From 88c194c0135a2cd853c6f409033227ead173effb Mon Sep 17 00:00:00 2001 From: Diogo Peralta Cordeiro Date: Tue, 23 Mar 2021 13:36:33 +0000 Subject: [PATCH] Some initial content --- index.html | 65 + soc/2018/images/testimonial1.png | Bin 0 -> 33334 bytes soc/2018/images/testimonial2.png | Bin 0 -> 63271 bytes soc/2018/images/testimonial3.png | Bin 0 -> 33178 bytes soc/2018/index.html | 331 + soc/2019/accepted_proposals/load.pdf | Bin 0 -> 163778 bytes soc/2019/accepted_proposals/network.pdf | Bin 0 -> 223592 bytes soc/2019/coding_environment.jpg | Bin 0 -> 104174 bytes soc/2019/ideas.php | 248 + soc/2019/index.html | 78 + soc/2019/tech_report/load/index.html | 109 + soc/2019/tech_report/network/index.html | 166 + soc/2020/academics.html | 222 + .../accepted_proposals/frontend_eliseu.pdf | 13454 ++++++++++++++++ soc/2020/accepted_proposals/pleroma.pdf | Bin 0 -> 541062 bytes soc/2020/accepted_proposals/rewrite.pdf | Bin 0 -> 73659 bytes soc/2020/announcements.php | 215 + soc/2020/coding_environment.jpg | Bin 0 -> 104174 bytes soc/2020/daily_report/archive/.env | 20 + .../daily_report/archive/August/hugo.html | 135 + .../archive/August/rainydaysavings.html | 150 + .../archive/August/susannadiv.html | 89 + soc/2020/daily_report/archive/July/hugo.html | 206 + .../archive/July/rainydaysavings.html | 138 + .../daily_report/archive/July/susannadiv.html | 74 + soc/2020/daily_report/archive/June/hugo.html | 96 + .../archive/June/rainydaysavings.html | 119 + .../daily_report/archive/June/susannadiv.html | 80 + soc/2020/daily_report/archive/May/hugo.html | 120 + .../archive/May/rainydaysavings.html | 55 + .../daily_report/archive/May/susannadiv.html | 67 + .../daily_report/archive/app/assets/app.css | 18 + .../daily_report/archive/app/assets/app.js | 2 + .../archive/app/assets/app.js.LICENSE.txt | 5 + .../app/assets/images/favicon.dark.png | Bin 0 -> 1928 bytes .../app/assets/images/favicon.light.png | Bin 0 -> 1889 bytes .../archive/app/assets/mix-manifest.json | 4 + .../app/assets/webfonts/fa-brands-400.eot | Bin 0 -> 133034 bytes .../app/assets/webfonts/fa-brands-400.svg | 3570 ++++ .../app/assets/webfonts/fa-brands-400.ttf | Bin 0 -> 132728 bytes .../app/assets/webfonts/fa-brands-400.woff | Bin 0 -> 89824 bytes .../app/assets/webfonts/fa-brands-400.woff2 | Bin 0 -> 76612 bytes .../app/assets/webfonts/fa-regular-400.eot | Bin 0 -> 34390 bytes .../app/assets/webfonts/fa-regular-400.svg | 803 + .../app/assets/webfonts/fa-regular-400.ttf | Bin 0 -> 34092 bytes .../app/assets/webfonts/fa-regular-400.woff | Bin 0 -> 16800 bytes .../app/assets/webfonts/fa-regular-400.woff2 | Bin 0 -> 13584 bytes .../app/assets/webfonts/fa-solid-900.eot | Bin 0 -> 202902 bytes .../app/assets/webfonts/fa-solid-900.svg | 4938 ++++++ .../app/assets/webfonts/fa-solid-900.ttf | Bin 0 -> 202616 bytes .../app/assets/webfonts/fa-solid-900.woff | Bin 0 -> 103300 bytes .../app/assets/webfonts/fa-solid-900.woff2 | Bin 0 -> 79444 bytes ...48658468a3d513a3ac0533b4d6d26dd5946814.php | 90 + ...82fd118473075a75ef12278c55369a8e4b38bf.php | 128 + ...16de7334c463807d0704e2d8e1092ff8cbac65.php | 90 + ...0b3b03fea1bd3237763d072ac904e32bb48984.php | 139 + ...b1c94c3590153d8b909d7542ea308009ce39b4.php | 178 + ...34ec1b2f9e4f032b3abbe68ababebc8d244f5c.php | 108 + ...5b157a86f3b5f0659a0e4d3b0905b33989590c.php | 72 + ...cd0d6488ad4a6dcc632e5f14937ed5c84c1ffa.php | 83 + .../daily_report/archive/app/config/app.php | 170 + .../archive/app/config/container.php | 21 + .../daily_report/archive/app/config/icons.php | 138 + .../archive/app/src/Bootstrap/AppManager.php | 38 + .../app/src/Bootstrap/ExceptionManager.php | 43 + .../app/src/Bootstrap/MiddlewareManager.php | 53 + .../app/src/Bootstrap/RouteManager.php | 32 + .../src/Controllers/DirectoryController.php | 104 + .../src/Controllers/FileInfoController.php | 68 + .../app/src/Controllers/IndexController.php | 48 + .../app/src/Controllers/SearchController.php | 66 + .../app/src/Controllers/ZipController.php | 122 + .../app/src/Exceptions/ErrorHandler.php | 66 + .../app/src/Factories/FinderFactory.php | 109 + .../app/src/Factories/TranslationFactory.php | 58 + .../archive/app/src/Factories/TwigFactory.php | 83 + .../app/src/Middlewares/WhoopsMiddleware.php | 64 + .../archive/app/src/SortMethods/Accessed.php | 20 + .../archive/app/src/SortMethods/Changed.php | 20 + .../archive/app/src/SortMethods/Modified.php | 20 + .../archive/app/src/SortMethods/Name.php | 20 + .../archive/app/src/SortMethods/Natural.php | 20 + .../app/src/SortMethods/SortMethod.php | 17 + .../archive/app/src/SortMethods/Type.php | 20 + .../archive/app/src/Support/Helpers.php | 34 + .../archive/app/src/Support/Str.php | 21 + .../archive/app/src/TemporaryFile.php | 46 + .../archive/app/src/ViewFunctions/Asset.php | 61 + .../app/src/ViewFunctions/Breadcrumbs.php | 54 + .../archive/app/src/ViewFunctions/Config.php | 40 + .../archive/app/src/ViewFunctions/FileUrl.php | 31 + .../archive/app/src/ViewFunctions/Icon.php | 42 + .../app/src/ViewFunctions/Markdown.php | 23 + .../app/src/ViewFunctions/ParentUrl.php | 48 + .../app/src/ViewFunctions/SizeForHumans.php | 26 + .../app/src/ViewFunctions/Translate.php | 36 + .../archive/app/src/ViewFunctions/Url.php | 64 + .../app/src/ViewFunctions/ViewFunction.php | 19 + .../archive/app/src/ViewFunctions/ZipUrl.php | 27 + .../archive/app/translations/de.yaml | 19 + .../archive/app/translations/en.yaml | 19 + .../archive/app/translations/es.yaml | 19 + .../archive/app/translations/fr.yaml | 19 + .../archive/app/translations/id.yaml | 19 + .../archive/app/translations/it.yaml | 19 + .../archive/app/translations/kr.yaml | 19 + .../archive/app/translations/nl.yaml | 19 + .../archive/app/translations/pl.yaml | 19 + .../archive/app/translations/pt-BR.yaml | 19 + .../archive/app/translations/ro.yaml | 19 + .../archive/app/translations/ru.yaml | 19 + .../archive/app/translations/zh-CN.yaml | 19 + .../archive/app/translations/zh-TW.yaml | 19 + .../archive/app/vendor/autoload.php | 7 + .../archive/app/vendor/bin/php-parse | 205 + .../archive/app/vendor/bin/var-dump-server | 63 + .../app/vendor/composer/ClassLoader.php | 445 + .../archive/app/vendor/composer/LICENSE | 21 + .../app/vendor/composer/autoload_classmap.php | 935 ++ .../app/vendor/composer/autoload_files.php | 18 + .../vendor/composer/autoload_namespaces.php | 11 + .../app/vendor/composer/autoload_psr4.php | 44 + .../app/vendor/composer/autoload_real.php | 73 + .../app/vendor/composer/autoload_static.php | 1184 ++ .../app/vendor/composer/installed.json | 2287 +++ .../vendor/erusev/parsedown-extra/.travis.yml | 30 + .../vendor/erusev/parsedown-extra/LICENSE.txt | 20 + .../erusev/parsedown-extra/ParsedownExtra.php | 538 + .../vendor/erusev/parsedown-extra/README.md | 31 + .../erusev/parsedown-extra/composer.json | 33 + .../erusev/parsedown-extra/phpunit.xml.dist | 8 + .../test/ParsedownExtraTest.php | 11 + .../parsedown-extra/test/TestParsedown.php | 9 + .../test/data/abbreviation.html | 3 + .../parsedown-extra/test/data/abbreviation.md | 7 + .../test/data/compound_footnote.html | 18 + .../test/data/compound_footnote.md | 14 + .../test/data/definition_list.html | 17 + .../test/data/definition_list.md | 20 + .../parsedown-extra/test/data/footnote.html | 20 + .../parsedown-extra/test/data/footnote.md | 11 + .../test/data/markdown_inside_markup.html | 25 + .../test/data/markdown_inside_markup.md | 32 + .../test/data/special_attributes.html | 6 + .../test/data/special_attributes.md | 12 + .../app/vendor/erusev/parsedown/LICENSE.txt | 20 + .../app/vendor/erusev/parsedown/Parsedown.php | 1712 ++ .../app/vendor/erusev/parsedown/README.md | 86 + .../app/vendor/erusev/parsedown/composer.json | 33 + .../vendor/fig/http-message-util/CHANGELOG.md | 125 + .../app/vendor/fig/http-message-util/LICENSE | 19 + .../vendor/fig/http-message-util/README.md | 17 + .../fig/http-message-util/composer.json | 28 + .../src/RequestMethodInterface.php | 34 + .../src/StatusCodeInterface.php | 107 + .../app/vendor/filp/whoops/CHANGELOG.md | 57 + .../archive/app/vendor/filp/whoops/LICENSE.md | 19 + .../app/vendor/filp/whoops/composer.json | 42 + .../src/Whoops/Exception/ErrorException.php | 17 + .../whoops/src/Whoops/Exception/Formatter.php | 73 + .../whoops/src/Whoops/Exception/Frame.php | 295 + .../src/Whoops/Exception/FrameCollection.php | 203 + .../whoops/src/Whoops/Exception/Inspector.php | 323 + .../src/Whoops/Handler/CallbackHandler.php | 52 + .../whoops/src/Whoops/Handler/Handler.php | 95 + .../src/Whoops/Handler/HandlerInterface.php | 36 + .../Whoops/Handler/JsonResponseHandler.php | 88 + .../src/Whoops/Handler/PlainTextHandler.php | 354 + .../src/Whoops/Handler/PrettyPageHandler.php | 800 + .../src/Whoops/Handler/XmlResponseHandler.php | 107 + .../src/Whoops/Resources/css/whoops.base.css | 604 + .../src/Whoops/Resources/js/clipboard.min.js | 7 + .../src/Whoops/Resources/js/prettify.min.js | 28 + .../src/Whoops/Resources/js/whoops.base.js | 210 + .../src/Whoops/Resources/js/zepto.min.js | 2 + .../Resources/views/env_details.html.php | 42 + .../Resources/views/frame_code.html.php | 63 + .../Resources/views/frame_list.html.php | 17 + .../Resources/views/frames_container.html.php | 3 + .../views/frames_description.html.php | 14 + .../Whoops/Resources/views/header.html.php | 96 + .../Resources/views/header_outer.html.php | 3 + .../Whoops/Resources/views/layout.html.php | 33 + .../Resources/views/panel_details.html.php | 2 + .../views/panel_details_outer.html.php | 3 + .../Resources/views/panel_left.html.php | 4 + .../Resources/views/panel_left_outer.html.php | 3 + .../app/vendor/filp/whoops/src/Whoops/Run.php | 452 + .../filp/whoops/src/Whoops/RunInterface.php | 131 + .../src/Whoops/Util/HtmlDumperOutput.php | 36 + .../filp/whoops/src/Whoops/Util/Misc.php | 77 + .../whoops/src/Whoops/Util/SystemFacade.php | 137 + .../whoops/src/Whoops/Util/TemplateHelper.php | 352 + .../vendor/jeremeamia/superclosure/LICENSE.md | 18 + .../jeremeamia/superclosure/composer.json | 39 + .../superclosure/src/Analyzer/AstAnalyzer.php | 148 + .../src/Analyzer/ClosureAnalyzer.php | 68 + .../superclosure/src/Analyzer/Token.php | 70 + .../src/Analyzer/TokenAnalyzer.php | 118 + .../Visitor/ClosureLocatorVisitor.php | 120 + .../Analyzer/Visitor/MagicConstantVisitor.php | 50 + .../Analyzer/Visitor/ThisDetectorVisitor.php | 27 + .../Exception/ClosureAnalysisException.php | 9 + .../ClosureSerializationException.php | 9 + .../ClosureUnserializationException.php | 9 + .../src/Exception/SuperClosureException.php | 9 + .../superclosure/src/SerializableClosure.php | 217 + .../superclosure/src/Serializer.php | 221 + .../superclosure/src/SerializerInterface.php | 45 + .../app/vendor/micheh/psr7-cache/LICENSE.md | 31 + .../app/vendor/micheh/psr7-cache/README.md | 142 + .../vendor/micheh/psr7-cache/composer.json | 37 + .../micheh/psr7-cache/src/CacheUtil.php | 501 + .../psr7-cache/src/Header/CacheControl.php | 271 + .../src/Header/RequestCacheControl.php | 92 + .../src/Header/ResponseCacheControl.php | 223 + .../app/vendor/middlewares/cache/CHANGELOG.md | 70 + .../vendor/middlewares/cache/CONTRIBUTING.md | 55 + .../app/vendor/middlewares/cache/LICENSE | 21 + .../app/vendor/middlewares/cache/README.md | 108 + .../vendor/middlewares/cache/composer.json | 49 + .../vendor/middlewares/cache/src/Cache.php | 82 + .../middlewares/cache/src/CachePrevention.php | 25 + .../vendor/middlewares/cache/src/Expires.php | 103 + .../cache/src/expires_defaults.php | 43 + .../app/vendor/middlewares/utils/CHANGELOG.md | 228 + .../vendor/middlewares/utils/CONTRIBUTING.md | 55 + .../app/vendor/middlewares/utils/LICENSE | 21 + .../app/vendor/middlewares/utils/README.md | 129 + .../vendor/middlewares/utils/composer.json | 57 + .../middlewares/utils/src/CallableHandler.php | 101 + .../middlewares/utils/src/Dispatcher.php | 68 + .../vendor/middlewares/utils/src/Factory.php | 104 + .../utils/src/FactoryDiscovery.php | 166 + .../utils/src/FactoryInterface.php | 26 + .../utils/src/HttpErrorException.php | 83 + .../middlewares/utils/src/RequestHandler.php | 29 + .../utils/src/RequestHandlerContainer.php | 111 + .../app/vendor/nikic/fast-route/.hhconfig | 1 + .../app/vendor/nikic/fast-route/.travis.yml | 20 + .../app/vendor/nikic/fast-route/FastRoute.hhi | 126 + .../app/vendor/nikic/fast-route/LICENSE | 31 + .../app/vendor/nikic/fast-route/README.md | 313 + .../app/vendor/nikic/fast-route/composer.json | 24 + .../app/vendor/nikic/fast-route/phpunit.xml | 24 + .../app/vendor/nikic/fast-route/psalm.xml | 28 + .../fast-route/src/BadRouteException.php | 7 + .../nikic/fast-route/src/DataGenerator.php | 26 + .../src/DataGenerator/CharCountBased.php | 31 + .../src/DataGenerator/GroupCountBased.php | 30 + .../src/DataGenerator/GroupPosBased.php | 27 + .../src/DataGenerator/MarkBased.php | 27 + .../src/DataGenerator/RegexBasedAbstract.php | 186 + .../nikic/fast-route/src/Dispatcher.php | 26 + .../src/Dispatcher/CharCountBased.php | 31 + .../src/Dispatcher/GroupCountBased.php | 31 + .../src/Dispatcher/GroupPosBased.php | 33 + .../fast-route/src/Dispatcher/MarkBased.php | 31 + .../src/Dispatcher/RegexBasedAbstract.php | 88 + .../app/vendor/nikic/fast-route/src/Route.php | 47 + .../nikic/fast-route/src/RouteCollector.php | 152 + .../nikic/fast-route/src/RouteParser.php | 37 + .../nikic/fast-route/src/RouteParser/Std.php | 87 + .../vendor/nikic/fast-route/src/bootstrap.php | 12 + .../vendor/nikic/fast-route/src/functions.php | 74 + .../test/Dispatcher/CharCountBasedTest.php | 16 + .../test/Dispatcher/DispatcherTest.php | 581 + .../test/Dispatcher/GroupCountBasedTest.php | 16 + .../test/Dispatcher/GroupPosBasedTest.php | 16 + .../test/Dispatcher/MarkBasedTest.php | 24 + .../HackTypechecker/HackTypecheckerTest.php | 44 + .../HackTypechecker/fixtures/all_options.php | 29 + .../fixtures/empty_options.php | 11 + .../HackTypechecker/fixtures/no_options.php | 11 + .../fast-route/test/RouteCollectorTest.php | 108 + .../fast-route/test/RouteParser/StdTest.php | 154 + .../nikic/fast-route/test/bootstrap.php | 11 + .../app/vendor/nikic/php-parser/LICENSE | 31 + .../app/vendor/nikic/php-parser/README.md | 225 + .../app/vendor/nikic/php-parser/bin/php-parse | 205 + .../app/vendor/nikic/php-parser/composer.json | 41 + .../vendor/nikic/php-parser/grammar/README.md | 30 + .../nikic/php-parser/grammar/parser.template | 106 + .../vendor/nikic/php-parser/grammar/php5.y | 1026 ++ .../vendor/nikic/php-parser/grammar/php7.y | 1031 ++ .../php-parser/grammar/rebuildParsers.php | 261 + .../nikic/php-parser/grammar/tokens.template | 17 + .../vendor/nikic/php-parser/grammar/tokens.y | 114 + .../php-parser/lib/PhpParser/Builder.php | 13 + .../lib/PhpParser/Builder/Class_.php | 122 + .../lib/PhpParser/Builder/Declaration.php | 43 + .../lib/PhpParser/Builder/FunctionLike.php | 74 + .../lib/PhpParser/Builder/Function_.php | 50 + .../lib/PhpParser/Builder/Interface_.php | 75 + .../lib/PhpParser/Builder/Method.php | 129 + .../lib/PhpParser/Builder/Namespace_.php | 45 + .../lib/PhpParser/Builder/Param.php | 106 + .../lib/PhpParser/Builder/Property.php | 132 + .../lib/PhpParser/Builder/TraitUse.php | 64 + .../PhpParser/Builder/TraitUseAdaptation.php | 148 + .../lib/PhpParser/Builder/Trait_.php | 60 + .../php-parser/lib/PhpParser/Builder/Use_.php | 49 + .../lib/PhpParser/BuilderFactory.php | 348 + .../lib/PhpParser/BuilderHelpers.php | 281 + .../php-parser/lib/PhpParser/Comment.php | 239 + .../php-parser/lib/PhpParser/Comment/Doc.php | 7 + .../ConstExprEvaluationException.php | 6 + .../lib/PhpParser/ConstExprEvaluator.php | 226 + .../nikic/php-parser/lib/PhpParser/Error.php | 180 + .../php-parser/lib/PhpParser/ErrorHandler.php | 13 + .../lib/PhpParser/ErrorHandler/Collecting.php | 46 + .../lib/PhpParser/ErrorHandler/Throwing.php | 18 + .../lib/PhpParser/Internal/DiffElem.php | 27 + .../lib/PhpParser/Internal/Differ.php | 164 + .../Internal/PrintableNewAnonClassNode.php | 57 + .../lib/PhpParser/Internal/TokenStream.php | 256 + .../php-parser/lib/PhpParser/JsonDecoder.php | 103 + .../nikic/php-parser/lib/PhpParser/Lexer.php | 422 + .../lib/PhpParser/Lexer/Emulative.php | 250 + .../CoaleseEqualTokenEmulator.php | 41 + .../Lexer/TokenEmulator/FnTokenEmulator.php | 53 + .../NumericLiteralSeparatorEmulator.php | 99 + .../TokenEmulator/TokenEmulatorInterface.php | 14 + .../php-parser/lib/PhpParser/NameContext.php | 285 + .../nikic/php-parser/lib/PhpParser/Node.php | 151 + .../php-parser/lib/PhpParser/Node/Arg.php | 38 + .../php-parser/lib/PhpParser/Node/Const_.php | 37 + .../php-parser/lib/PhpParser/Node/Expr.php | 9 + .../lib/PhpParser/Node/Expr/ArrayDimFetch.php | 34 + .../lib/PhpParser/Node/Expr/ArrayItem.php | 41 + .../lib/PhpParser/Node/Expr/Array_.php | 34 + .../lib/PhpParser/Node/Expr/ArrowFunction.php | 71 + .../lib/PhpParser/Node/Expr/Assign.php | 34 + .../lib/PhpParser/Node/Expr/AssignOp.php | 30 + .../Node/Expr/AssignOp/BitwiseAnd.php | 12 + .../Node/Expr/AssignOp/BitwiseOr.php | 12 + .../Node/Expr/AssignOp/BitwiseXor.php | 12 + .../PhpParser/Node/Expr/AssignOp/Coalesce.php | 12 + .../PhpParser/Node/Expr/AssignOp/Concat.php | 12 + .../lib/PhpParser/Node/Expr/AssignOp/Div.php | 12 + .../PhpParser/Node/Expr/AssignOp/Minus.php | 12 + .../lib/PhpParser/Node/Expr/AssignOp/Mod.php | 12 + .../lib/PhpParser/Node/Expr/AssignOp/Mul.php | 12 + .../lib/PhpParser/Node/Expr/AssignOp/Plus.php | 12 + .../lib/PhpParser/Node/Expr/AssignOp/Pow.php | 12 + .../Node/Expr/AssignOp/ShiftLeft.php | 12 + .../Node/Expr/AssignOp/ShiftRight.php | 12 + .../lib/PhpParser/Node/Expr/AssignRef.php | 34 + .../lib/PhpParser/Node/Expr/BinaryOp.php | 40 + .../Node/Expr/BinaryOp/BitwiseAnd.php | 16 + .../Node/Expr/BinaryOp/BitwiseOr.php | 16 + .../Node/Expr/BinaryOp/BitwiseXor.php | 16 + .../Node/Expr/BinaryOp/BooleanAnd.php | 16 + .../Node/Expr/BinaryOp/BooleanOr.php | 16 + .../PhpParser/Node/Expr/BinaryOp/Coalesce.php | 16 + .../PhpParser/Node/Expr/BinaryOp/Concat.php | 16 + .../lib/PhpParser/Node/Expr/BinaryOp/Div.php | 16 + .../PhpParser/Node/Expr/BinaryOp/Equal.php | 16 + .../PhpParser/Node/Expr/BinaryOp/Greater.php | 16 + .../Node/Expr/BinaryOp/GreaterOrEqual.php | 16 + .../Node/Expr/BinaryOp/Identical.php | 16 + .../Node/Expr/BinaryOp/LogicalAnd.php | 16 + .../Node/Expr/BinaryOp/LogicalOr.php | 16 + .../Node/Expr/BinaryOp/LogicalXor.php | 16 + .../PhpParser/Node/Expr/BinaryOp/Minus.php | 16 + .../lib/PhpParser/Node/Expr/BinaryOp/Mod.php | 16 + .../lib/PhpParser/Node/Expr/BinaryOp/Mul.php | 16 + .../PhpParser/Node/Expr/BinaryOp/NotEqual.php | 16 + .../Node/Expr/BinaryOp/NotIdentical.php | 16 + .../lib/PhpParser/Node/Expr/BinaryOp/Plus.php | 16 + .../lib/PhpParser/Node/Expr/BinaryOp/Pow.php | 16 + .../Node/Expr/BinaryOp/ShiftLeft.php | 16 + .../Node/Expr/BinaryOp/ShiftRight.php | 16 + .../PhpParser/Node/Expr/BinaryOp/Smaller.php | 16 + .../Node/Expr/BinaryOp/SmallerOrEqual.php | 16 + .../Node/Expr/BinaryOp/Spaceship.php | 16 + .../lib/PhpParser/Node/Expr/BitwiseNot.php | 30 + .../lib/PhpParser/Node/Expr/BooleanNot.php | 30 + .../lib/PhpParser/Node/Expr/Cast.php | 26 + .../lib/PhpParser/Node/Expr/Cast/Array_.php | 12 + .../lib/PhpParser/Node/Expr/Cast/Bool_.php | 12 + .../lib/PhpParser/Node/Expr/Cast/Double.php | 17 + .../lib/PhpParser/Node/Expr/Cast/Int_.php | 12 + .../lib/PhpParser/Node/Expr/Cast/Object_.php | 12 + .../lib/PhpParser/Node/Expr/Cast/String_.php | 12 + .../lib/PhpParser/Node/Expr/Cast/Unset_.php | 12 + .../PhpParser/Node/Expr/ClassConstFetch.php | 36 + .../lib/PhpParser/Node/Expr/Clone_.php | 30 + .../lib/PhpParser/Node/Expr/Closure.php | 71 + .../lib/PhpParser/Node/Expr/ClosureUse.php | 34 + .../lib/PhpParser/Node/Expr/ConstFetch.php | 31 + .../lib/PhpParser/Node/Expr/Empty_.php | 30 + .../lib/PhpParser/Node/Expr/Error.php | 31 + .../lib/PhpParser/Node/Expr/ErrorSuppress.php | 30 + .../lib/PhpParser/Node/Expr/Eval_.php | 30 + .../lib/PhpParser/Node/Expr/Exit_.php | 34 + .../lib/PhpParser/Node/Expr/FuncCall.php | 35 + .../lib/PhpParser/Node/Expr/Include_.php | 39 + .../lib/PhpParser/Node/Expr/Instanceof_.php | 35 + .../lib/PhpParser/Node/Expr/Isset_.php | 30 + .../lib/PhpParser/Node/Expr/List_.php | 30 + .../lib/PhpParser/Node/Expr/MethodCall.php | 40 + .../lib/PhpParser/Node/Expr/New_.php | 35 + .../lib/PhpParser/Node/Expr/PostDec.php | 30 + .../lib/PhpParser/Node/Expr/PostInc.php | 30 + .../lib/PhpParser/Node/Expr/PreDec.php | 30 + .../lib/PhpParser/Node/Expr/PreInc.php | 30 + .../lib/PhpParser/Node/Expr/Print_.php | 30 + .../lib/PhpParser/Node/Expr/PropertyFetch.php | 35 + .../lib/PhpParser/Node/Expr/ShellExec.php | 30 + .../lib/PhpParser/Node/Expr/StaticCall.php | 40 + .../Node/Expr/StaticPropertyFetch.php | 36 + .../lib/PhpParser/Node/Expr/Ternary.php | 38 + .../lib/PhpParser/Node/Expr/UnaryMinus.php | 30 + .../lib/PhpParser/Node/Expr/UnaryPlus.php | 30 + .../lib/PhpParser/Node/Expr/Variable.php | 30 + .../lib/PhpParser/Node/Expr/YieldFrom.php | 30 + .../lib/PhpParser/Node/Expr/Yield_.php | 34 + .../lib/PhpParser/Node/FunctionLike.php | 36 + .../lib/PhpParser/Node/Identifier.php | 75 + .../php-parser/lib/PhpParser/Node/Name.php | 242 + .../PhpParser/Node/Name/FullyQualified.php | 50 + .../lib/PhpParser/Node/Name/Relative.php | 50 + .../lib/PhpParser/Node/NullableType.php | 30 + .../php-parser/lib/PhpParser/Node/Param.php | 49 + .../php-parser/lib/PhpParser/Node/Scalar.php | 7 + .../lib/PhpParser/Node/Scalar/DNumber.php | 70 + .../lib/PhpParser/Node/Scalar/Encapsed.php | 31 + .../Node/Scalar/EncapsedStringPart.php | 30 + .../lib/PhpParser/Node/Scalar/LNumber.php | 73 + .../lib/PhpParser/Node/Scalar/MagicConst.php | 28 + .../Node/Scalar/MagicConst/Class_.php | 16 + .../PhpParser/Node/Scalar/MagicConst/Dir.php | 16 + .../PhpParser/Node/Scalar/MagicConst/File.php | 16 + .../Node/Scalar/MagicConst/Function_.php | 16 + .../PhpParser/Node/Scalar/MagicConst/Line.php | 16 + .../Node/Scalar/MagicConst/Method.php | 16 + .../Node/Scalar/MagicConst/Namespace_.php | 16 + .../Node/Scalar/MagicConst/Trait_.php | 16 + .../lib/PhpParser/Node/Scalar/String_.php | 141 + .../php-parser/lib/PhpParser/Node/Stmt.php | 9 + .../lib/PhpParser/Node/Stmt/Break_.php | 30 + .../lib/PhpParser/Node/Stmt/Case_.php | 34 + .../lib/PhpParser/Node/Stmt/Catch_.php | 41 + .../lib/PhpParser/Node/Stmt/ClassConst.php | 62 + .../lib/PhpParser/Node/Stmt/ClassLike.php | 107 + .../lib/PhpParser/Node/Stmt/ClassMethod.php | 151 + .../lib/PhpParser/Node/Stmt/Class_.php | 105 + .../lib/PhpParser/Node/Stmt/Const_.php | 30 + .../lib/PhpParser/Node/Stmt/Continue_.php | 30 + .../PhpParser/Node/Stmt/DeclareDeclare.php | 34 + .../lib/PhpParser/Node/Stmt/Declare_.php | 34 + .../lib/PhpParser/Node/Stmt/Do_.php | 34 + .../lib/PhpParser/Node/Stmt/Echo_.php | 30 + .../lib/PhpParser/Node/Stmt/ElseIf_.php | 34 + .../lib/PhpParser/Node/Stmt/Else_.php | 30 + .../lib/PhpParser/Node/Stmt/Expression.php | 33 + .../lib/PhpParser/Node/Stmt/Finally_.php | 30 + .../lib/PhpParser/Node/Stmt/For_.php | 43 + .../lib/PhpParser/Node/Stmt/Foreach_.php | 47 + .../lib/PhpParser/Node/Stmt/Function_.php | 69 + .../lib/PhpParser/Node/Stmt/Global_.php | 30 + .../lib/PhpParser/Node/Stmt/Goto_.php | 31 + .../lib/PhpParser/Node/Stmt/GroupUse.php | 39 + .../lib/PhpParser/Node/Stmt/HaltCompiler.php | 30 + .../lib/PhpParser/Node/Stmt/If_.php | 43 + .../lib/PhpParser/Node/Stmt/InlineHTML.php | 30 + .../lib/PhpParser/Node/Stmt/Interface_.php | 35 + .../lib/PhpParser/Node/Stmt/Label.php | 31 + .../lib/PhpParser/Node/Stmt/Namespace_.php | 38 + .../lib/PhpParser/Node/Stmt/Nop.php | 17 + .../lib/PhpParser/Node/Stmt/Property.php | 79 + .../PhpParser/Node/Stmt/PropertyProperty.php | 34 + .../lib/PhpParser/Node/Stmt/Return_.php | 30 + .../lib/PhpParser/Node/Stmt/StaticVar.php | 37 + .../lib/PhpParser/Node/Stmt/Static_.php | 30 + .../lib/PhpParser/Node/Stmt/Switch_.php | 34 + .../lib/PhpParser/Node/Stmt/Throw_.php | 30 + .../lib/PhpParser/Node/Stmt/TraitUse.php | 34 + .../Node/Stmt/TraitUseAdaptation.php | 13 + .../Node/Stmt/TraitUseAdaptation/Alias.php | 38 + .../Stmt/TraitUseAdaptation/Precedence.php | 34 + .../lib/PhpParser/Node/Stmt/Trait_.php | 30 + .../lib/PhpParser/Node/Stmt/TryCatch.php | 38 + .../lib/PhpParser/Node/Stmt/Unset_.php | 30 + .../lib/PhpParser/Node/Stmt/UseUse.php | 52 + .../lib/PhpParser/Node/Stmt/Use_.php | 47 + .../lib/PhpParser/Node/Stmt/While_.php | 34 + .../lib/PhpParser/Node/UnionType.php | 30 + .../lib/PhpParser/Node/VarLikeIdentifier.php | 17 + .../php-parser/lib/PhpParser/NodeAbstract.php | 178 + .../php-parser/lib/PhpParser/NodeDumper.php | 203 + .../php-parser/lib/PhpParser/NodeFinder.php | 81 + .../lib/PhpParser/NodeTraverser.php | 291 + .../lib/PhpParser/NodeTraverserInterface.php | 29 + .../php-parser/lib/PhpParser/NodeVisitor.php | 72 + .../PhpParser/NodeVisitor/CloningVisitor.php | 20 + .../PhpParser/NodeVisitor/FindingVisitor.php | 48 + .../NodeVisitor/FirstFindingVisitor.php | 50 + .../PhpParser/NodeVisitor/NameResolver.php | 228 + .../lib/PhpParser/NodeVisitorAbstract.php | 25 + .../nikic/php-parser/lib/PhpParser/Parser.php | 18 + .../lib/PhpParser/Parser/Multiple.php | 55 + .../php-parser/lib/PhpParser/Parser/Php5.php | 2640 +++ .../php-parser/lib/PhpParser/Parser/Php7.php | 2472 +++ .../lib/PhpParser/Parser/Tokens.php | 146 + .../lib/PhpParser/ParserAbstract.php | 1024 ++ .../lib/PhpParser/ParserFactory.php | 44 + .../lib/PhpParser/PrettyPrinter/Standard.php | 1003 ++ .../lib/PhpParser/PrettyPrinterAbstract.php | 1425 ++ .../archive/app/vendor/phlak/glob/LICENSE | 21 + .../archive/app/vendor/phlak/glob/Makefile | 13 + .../archive/app/vendor/phlak/glob/README.md | 180 + .../app/vendor/phlak/glob/composer.json | 48 + .../app/vendor/phlak/glob/psalm-baseline.xml | 8 + .../app/vendor/phlak/glob/src/Glob.php | 205 + .../app/vendor/php-di/invoker/CONTRIBUTING.md | 15 + .../archive/app/vendor/php-di/invoker/LICENSE | 21 + .../app/vendor/php-di/invoker/README.md | 234 + .../app/vendor/php-di/invoker/composer.json | 25 + .../php-di/invoker/doc/parameter-resolvers.md | 109 + .../php-di/invoker/src/CallableResolver.php | 133 + .../src/Exception/InvocationException.php | 12 + .../src/Exception/NotCallableException.php | 35 + .../NotEnoughParametersException.php | 12 + .../app/vendor/php-di/invoker/src/Invoker.php | 122 + .../php-di/invoker/src/InvokerInterface.php | 29 + .../AssociativeArrayResolver.php | 39 + .../ParameterNameContainerResolver.php | 51 + .../Container/TypeHintContainerResolver.php | 51 + .../DefaultValueResolver.php | 40 + .../NumericArrayResolver.php | 39 + .../ParameterResolver/ParameterResolver.php | 33 + .../src/ParameterResolver/ResolverChain.php | 69 + .../ParameterResolver/TypeHintResolver.php | 39 + .../src/Reflection/CallableReflection.php | 61 + .../app/vendor/php-di/php-di/.coveralls.yml | 2 + .../archive/app/vendor/php-di/php-di/.php_cs | 52 + .../vendor/php-di/php-di/.phpstorm.meta.php | 18 + .../app/vendor/php-di/php-di/.styleci.yml | 17 + .../app/vendor/php-di/php-di/.travis.yml | 40 + .../archive/app/vendor/php-di/php-di/404.md | 3 + .../app/vendor/php-di/php-di/CONTRIBUTING.md | 52 + .../archive/app/vendor/php-di/php-di/LICENSE | 18 + .../app/vendor/php-di/php-di/README.md | 27 + .../app/vendor/php-di/php-di/SECURITY.md | 11 + .../app/vendor/php-di/php-di/change-log.md | 436 + .../app/vendor/php-di/php-di/composer.json | 50 + .../app/vendor/php-di/php-di/couscous.yml | 147 + .../php-di/php-di/phpstan-baseline.neon | 62 + .../app/vendor/php-di/php-di/phpstan.neon | 14 + .../app/vendor/php-di/php-di/phpunit.xml.dist | 33 + .../php-di/php-di/src/Annotation/Inject.php | 93 + .../php-di/src/Annotation/Injectable.php | 42 + .../php-di/php-di/src/CompiledContainer.php | 123 + .../php-di/php-di/src/Compiler/Compiler.php | 401 + .../src/Compiler/ObjectCreationCompiler.php | 201 + .../src/Compiler/RequestedEntryHolder.php | 28 + .../php-di/php-di/src/Compiler/Template.php | 16 + .../vendor/php-di/php-di/src/Container.php | 430 + .../php-di/php-di/src/ContainerBuilder.php | 385 + .../php-di/src/Definition/ArrayDefinition.php | 73 + .../Definition/ArrayDefinitionExtension.php | 42 + .../src/Definition/AutowireDefinition.php | 12 + .../src/Definition/DecoratorDefinition.php | 42 + .../php-di/src/Definition/Definition.php | 37 + .../Dumper/ObjectDefinitionDumper.php | 135 + .../EnvironmentVariableDefinition.php | 112 + .../Exception/InvalidAnnotation.php | 14 + .../Exception/InvalidDefinition.php | 24 + .../Definition/ExtendsPreviousDefinition.php | 15 + .../src/Definition/FactoryDefinition.php | 79 + .../Helper/AutowireDefinitionHelper.php | 72 + .../Helper/CreateDefinitionHelper.php | 202 + .../Definition/Helper/DefinitionHelper.php | 20 + .../Helper/FactoryDefinitionHelper.php | 75 + .../src/Definition/InstanceDefinition.php | 69 + .../src/Definition/ObjectDefinition.php | 266 + .../ObjectDefinition/MethodInjection.php | 86 + .../ObjectDefinition/PropertyInjection.php | 70 + .../php-di/src/Definition/Reference.php | 73 + .../src/Definition/Resolver/ArrayResolver.php | 74 + .../Definition/Resolver/DecoratorResolver.php | 82 + .../Resolver/DefinitionResolver.php | 37 + .../Resolver/EnvironmentVariableResolver.php | 68 + .../Definition/Resolver/FactoryResolver.php | 123 + .../Definition/Resolver/InstanceInjector.php | 44 + .../src/Definition/Resolver/ObjectCreator.php | 221 + .../Definition/Resolver/ParameterResolver.php | 112 + .../Resolver/ResolverDispatcher.php | 127 + .../Definition/SelfResolvingDefinition.php | 27 + .../Source/AnnotationBasedAutowiring.php | 297 + .../src/Definition/Source/Autowiring.php | 24 + .../src/Definition/Source/DefinitionArray.php | 127 + .../src/Definition/Source/DefinitionFile.php | 69 + .../Source/DefinitionNormalizer.php | 120 + .../Definition/Source/DefinitionSource.php | 29 + .../Source/MutableDefinitionSource.php | 17 + .../src/Definition/Source/NoAutowiring.php | 24 + .../Source/ReflectionBasedAutowiring.php | 74 + .../src/Definition/Source/SourceCache.php | 88 + .../src/Definition/Source/SourceChain.php | 110 + .../src/Definition/StringDefinition.php | 97 + .../php-di/src/Definition/ValueDefinition.php | 72 + .../php-di/php-di/src/DependencyException.php | 14 + .../php-di/src/Factory/RequestedEntry.php | 23 + .../php-di/php-di/src/FactoryInterface.php | 31 + .../Invoker/DefinitionParameterResolver.php | 69 + .../src/Invoker/FactoryParameterResolver.php | 63 + .../php-di/php-di/src/NotFoundException.php | 14 + .../php-di/php-di/src/Proxy/ProxyFactory.php | 100 + .../vendor/php-di/php-di/src/functions.php | 156 + .../app/vendor/php-di/php-di/support.md | 42 + .../app/vendor/php-di/phpdoc-reader/LICENSE | 16 + .../app/vendor/php-di/phpdoc-reader/README.md | 58 + .../vendor/php-di/phpdoc-reader/composer.json | 23 + .../src/PhpDocReader/AnnotationException.php | 10 + .../src/PhpDocReader/PhpDocReader.php | 312 + .../PhpDocReader/PhpParser/TokenParser.php | 159 + .../PhpParser/UseStatementParser.php | 68 + .../vendor/php-di/slim-bridge/CONTRIBUTING.md | 15 + .../app/vendor/php-di/slim-bridge/LICENSE | 21 + .../app/vendor/php-di/slim-bridge/README.md | 119 + .../vendor/php-di/slim-bridge/composer.json | 26 + .../vendor/php-di/slim-bridge/src/Bridge.php | 57 + .../slim-bridge/src/CallableResolver.php | 28 + .../slim-bridge/src/ControllerInvoker.php | 49 + .../app/vendor/phpoption/phpoption/LICENSE | 201 + .../vendor/phpoption/phpoption/composer.json | 38 + .../phpoption/src/PhpOption/LazyOption.php | 169 + .../phpoption/src/PhpOption/None.php | 136 + .../phpoption/src/PhpOption/Option.php | 434 + .../phpoption/src/PhpOption/Some.php | 165 + .../archive/app/vendor/psr/cache/CHANGELOG.md | 16 + .../archive/app/vendor/psr/cache/LICENSE.txt | 19 + .../archive/app/vendor/psr/cache/README.md | 9 + .../app/vendor/psr/cache/composer.json | 25 + .../vendor/psr/cache/src/CacheException.php | 10 + .../psr/cache/src/CacheItemInterface.php | 105 + .../psr/cache/src/CacheItemPoolInterface.php | 138 + .../cache/src/InvalidArgumentException.php | 13 + .../archive/app/vendor/psr/container/LICENSE | 21 + .../app/vendor/psr/container/README.md | 5 + .../app/vendor/psr/container/composer.json | 27 + .../src/ContainerExceptionInterface.php | 13 + .../psr/container/src/ContainerInterface.php | 37 + .../src/NotFoundExceptionInterface.php | 13 + .../vendor/psr/http-factory/.pullapprove.yml | 7 + .../app/vendor/psr/http-factory/LICENSE | 21 + .../app/vendor/psr/http-factory/README.md | 10 + .../app/vendor/psr/http-factory/composer.json | 35 + .../src/RequestFactoryInterface.php | 18 + .../src/ResponseFactoryInterface.php | 18 + .../src/ServerRequestFactoryInterface.php | 24 + .../src/StreamFactoryInterface.php | 45 + .../src/UploadedFileFactoryInterface.php | 34 + .../http-factory/src/UriFactoryInterface.php | 17 + .../app/vendor/psr/http-message/CHANGELOG.md | 36 + .../app/vendor/psr/http-message/LICENSE | 19 + .../app/vendor/psr/http-message/README.md | 13 + .../app/vendor/psr/http-message/composer.json | 26 + .../psr/http-message/src/MessageInterface.php | 187 + .../psr/http-message/src/RequestInterface.php | 129 + .../http-message/src/ResponseInterface.php | 68 + .../src/ServerRequestInterface.php | 261 + .../psr/http-message/src/StreamInterface.php | 158 + .../src/UploadedFileInterface.php | 123 + .../psr/http-message/src/UriInterface.php | 323 + .../vendor/psr/http-server-handler/LICENSE | 21 + .../vendor/psr/http-server-handler/README.md | 6 + .../psr/http-server-handler/composer.json | 36 + .../src/RequestHandlerInterface.php | 22 + .../vendor/psr/http-server-middleware/LICENSE | 21 + .../psr/http-server-middleware/README.md | 6 + .../psr/http-server-middleware/composer.json | 36 + .../src/MiddlewareInterface.php | 25 + .../archive/app/vendor/psr/log/LICENSE | 19 + .../vendor/psr/log/Psr/Log/AbstractLogger.php | 128 + .../log/Psr/Log/InvalidArgumentException.php | 7 + .../app/vendor/psr/log/Psr/Log/LogLevel.php | 18 + .../psr/log/Psr/Log/LoggerAwareInterface.php | 18 + .../psr/log/Psr/Log/LoggerAwareTrait.php | 26 + .../psr/log/Psr/Log/LoggerInterface.php | 125 + .../vendor/psr/log/Psr/Log/LoggerTrait.php | 142 + .../app/vendor/psr/log/Psr/Log/NullLogger.php | 30 + .../vendor/psr/log/Psr/Log/Test/DummyTest.php | 18 + .../log/Psr/Log/Test/LoggerInterfaceTest.php | 138 + .../psr/log/Psr/Log/Test/TestLogger.php | 147 + .../archive/app/vendor/psr/log/README.md | 58 + .../archive/app/vendor/psr/log/composer.json | 26 + .../vendor/ralouphie/getallheaders/LICENSE | 21 + .../vendor/ralouphie/getallheaders/README.md | 27 + .../ralouphie/getallheaders/composer.json | 26 + .../getallheaders/src/getallheaders.php | 46 + .../archive/app/vendor/slim/psr7/LICENSE.md | 22 + .../app/vendor/slim/psr7/MAINTAINERS.md | 17 + .../app/vendor/slim/psr7/composer.json | 72 + .../app/vendor/slim/psr7/src/Cookies.php | 221 + .../app/vendor/slim/psr7/src/Environment.php | 55 + .../slim/psr7/src/Factory/RequestFactory.php | 73 + .../slim/psr7/src/Factory/ResponseFactory.php | 35 + .../psr7/src/Factory/ServerRequestFactory.php | 124 + .../slim/psr7/src/Factory/StreamFactory.php | 99 + .../psr7/src/Factory/UploadedFileFactory.php | 47 + .../slim/psr7/src/Factory/UriFactory.php | 116 + .../app/vendor/slim/psr7/src/Header.php | 105 + .../app/vendor/slim/psr7/src/Headers.php | 313 + .../psr7/src/Interfaces/HeadersInterface.php | 90 + .../app/vendor/slim/psr7/src/Message.php | 186 + .../vendor/slim/psr7/src/NonBufferedBody.php | 153 + .../app/vendor/slim/psr7/src/Request.php | 383 + .../app/vendor/slim/psr7/src/Response.php | 218 + .../app/vendor/slim/psr7/src/Stream.php | 420 + .../app/vendor/slim/psr7/src/UploadedFile.php | 281 + .../archive/app/vendor/slim/psr7/src/Uri.php | 493 + .../archive/app/vendor/slim/slim/CHANGELOG.md | 96 + .../archive/app/vendor/slim/slim/LICENSE.md | 19 + .../app/vendor/slim/slim/MAINTAINERS.md | 17 + .../archive/app/vendor/slim/slim/Slim/App.php | 232 + .../slim/slim/Slim/CallableResolver.php | 189 + .../slim/Slim/Error/AbstractErrorRenderer.php | 52 + .../Error/Renderers/HtmlErrorRenderer.php | 109 + .../Error/Renderers/JsonErrorRenderer.php | 60 + .../Renderers/PlainTextErrorRenderer.php | 81 + .../Slim/Error/Renderers/XmlErrorRenderer.php | 62 + .../Exception/HttpBadRequestException.php | 19 + .../slim/Slim/Exception/HttpException.php | 93 + .../Slim/Exception/HttpForbiddenException.php | 19 + .../HttpInternalServerErrorException.php | 19 + .../HttpMethodNotAllowedException.php | 45 + .../Slim/Exception/HttpNotFoundException.php | 19 + .../Exception/HttpNotImplementedException.php | 19 + .../Exception/HttpSpecializedException.php | 31 + .../Exception/HttpUnauthorizedException.php | 19 + .../slim/slim/Slim/Factory/AppFactory.php | 264 + .../Slim/Factory/Psr17/GuzzlePsr17Factory.php | 19 + .../Psr17/LaminasDiactorosPsr17Factory.php | 19 + .../Slim/Factory/Psr17/NyholmPsr17Factory.php | 36 + .../slim/Slim/Factory/Psr17/Psr17Factory.php | 107 + .../Factory/Psr17/Psr17FactoryProvider.php | 53 + .../Factory/Psr17/ServerRequestCreator.php | 48 + .../Factory/Psr17/SlimHttpPsr17Factory.php | 31 + .../Psr17/SlimHttpServerRequestCreator.php | 60 + .../Slim/Factory/Psr17/SlimPsr17Factory.php | 19 + .../Psr17/ZendDiactorosPsr17Factory.php | 19 + .../Factory/ServerRequestCreatorFactory.php | 113 + .../slim/slim/Slim/Handlers/ErrorHandler.php | 362 + .../Handlers/Strategies/RequestHandler.php | 59 + .../Handlers/Strategies/RequestResponse.php | 45 + .../Strategies/RequestResponseArgs.php | 43 + .../AdvancedCallableResolverInterface.php | 32 + .../Interfaces/CallableResolverInterface.php | 22 + .../Slim/Interfaces/DispatcherInterface.php | 33 + .../Slim/Interfaces/ErrorHandlerInterface.php | 34 + .../Interfaces/ErrorRendererInterface.php | 23 + .../InvocationStrategyInterface.php | 37 + .../MiddlewareDispatcherInterface.php | 49 + .../Slim/Interfaces/Psr17FactoryInterface.php | 60 + .../Psr17FactoryProviderInterface.php | 30 + ...uestHandlerInvocationStrategyInterface.php | 15 + .../Interfaces/RouteCollectorInterface.php | 131 + .../RouteCollectorProxyInterface.php | 160 + .../Slim/Interfaces/RouteGroupInterface.php | 53 + .../slim/Slim/Interfaces/RouteInterface.php | 161 + .../Slim/Interfaces/RouteParserInterface.php | 59 + .../Interfaces/RouteResolverInterface.php | 23 + .../ServerRequestCreatorInterface.php | 21 + .../app/vendor/slim/slim/Slim/Logger.php | 31 + .../Slim/Middleware/BodyParsingMiddleware.php | 191 + .../Middleware/ContentLengthMiddleware.php | 37 + .../slim/Slim/Middleware/ErrorMiddleware.php | 252 + .../Middleware/MethodOverrideMiddleware.php | 48 + .../Middleware/OutputBufferingMiddleware.php | 84 + .../Slim/Middleware/RoutingMiddleware.php | 104 + .../slim/slim/Slim/MiddlewareDispatcher.php | 289 + .../vendor/slim/slim/Slim/ResponseEmitter.php | 150 + .../slim/slim/Slim/Routing/Dispatcher.php | 87 + .../slim/Slim/Routing/FastRouteDispatcher.php | 99 + .../vendor/slim/slim/Slim/Routing/Route.php | 383 + .../slim/slim/Slim/Routing/RouteCollector.php | 296 + .../slim/Slim/Routing/RouteCollectorProxy.php | 209 + .../slim/slim/Slim/Routing/RouteContext.php | 118 + .../slim/slim/Slim/Routing/RouteGroup.php | 116 + .../slim/slim/Slim/Routing/RouteParser.php | 135 + .../slim/slim/Slim/Routing/RouteResolver.php | 70 + .../slim/slim/Slim/Routing/RouteRunner.php | 86 + .../slim/slim/Slim/Routing/RoutingResults.php | 146 + .../app/vendor/slim/slim/composer.json | 90 + .../app/vendor/slim/twig-view/.coveralls.yml | 1 + .../app/vendor/slim/twig-view/.editorconfig | 23 + .../app/vendor/slim/twig-view/LICENSE.md | 22 + .../app/vendor/slim/twig-view/composer.json | 52 + .../app/vendor/slim/twig-view/src/Twig.php | 294 + .../slim/twig-view/src/TwigExtension.php | 39 + .../slim/twig-view/src/TwigMiddleware.php | 127 + .../twig-view/src/TwigRuntimeExtension.php | 152 + .../slim/twig-view/src/TwigRuntimeLoader.php | 58 + .../app/vendor/symfony/finder/CHANGELOG.md | 79 + .../symfony/finder/Comparator/Comparator.php | 91 + .../finder/Comparator/DateComparator.php | 51 + .../finder/Comparator/NumberComparator.php | 79 + .../Exception/AccessDeniedException.php | 19 + .../Exception/DirectoryNotFoundException.php | 19 + .../app/vendor/symfony/finder/Finder.php | 797 + .../app/vendor/symfony/finder/Gitignore.php | 105 + .../app/vendor/symfony/finder/Glob.php | 111 + .../finder/Iterator/CustomFilterIterator.php | 61 + .../Iterator/DateRangeFilterIterator.php | 58 + .../Iterator/DepthRangeFilterIterator.php | 45 + .../ExcludeDirectoryFilterIterator.php | 87 + .../Iterator/FileTypeFilterIterator.php | 53 + .../Iterator/FilecontentFilterIterator.php | 58 + .../Iterator/FilenameFilterIterator.php | 47 + .../Iterator/MultiplePcreFilterIterator.php | 106 + .../finder/Iterator/PathFilterIterator.php | 56 + .../Iterator/RecursiveDirectoryIterator.php | 144 + .../Iterator/SizeRangeFilterIterator.php | 57 + .../finder/Iterator/SortableIterator.php | 101 + .../archive/app/vendor/symfony/finder/LICENSE | 19 + .../app/vendor/symfony/finder/README.md | 14 + .../app/vendor/symfony/finder/SplFileInfo.php | 85 + .../app/vendor/symfony/finder/composer.json | 33 + .../vendor/symfony/polyfill-ctype/Ctype.php | 227 + .../app/vendor/symfony/polyfill-ctype/LICENSE | 19 + .../vendor/symfony/polyfill-ctype/README.md | 12 + .../symfony/polyfill-ctype/bootstrap.php | 26 + .../symfony/polyfill-ctype/composer.json | 34 + .../vendor/symfony/polyfill-mbstring/LICENSE | 19 + .../symfony/polyfill-mbstring/Mbstring.php | 847 + .../symfony/polyfill-mbstring/README.md | 13 + .../Resources/unidata/lowerCase.php | 1096 ++ .../Resources/unidata/titleCaseRegexp.php | 5 + .../Resources/unidata/upperCase.php | 1104 ++ .../symfony/polyfill-mbstring/bootstrap.php | 64 + .../symfony/polyfill-mbstring/composer.json | 34 + .../app/vendor/symfony/polyfill-php56/LICENSE | 19 + .../vendor/symfony/polyfill-php56/Php56.php | 138 + .../vendor/symfony/polyfill-php56/README.md | 15 + .../symfony/polyfill-php56/bootstrap.php | 40 + .../symfony/polyfill-php56/composer.json | 32 + .../vendor/symfony/polyfill-util/Binary.php | 22 + .../polyfill-util/BinaryNoFuncOverload.php | 65 + .../polyfill-util/BinaryOnFuncOverload.php | 67 + .../app/vendor/symfony/polyfill-util/LICENSE | 19 + .../vendor/symfony/polyfill-util/README.md | 13 + .../symfony/polyfill-util/TestListener.php | 28 + .../polyfill-util/TestListenerForV5.php | 89 + .../polyfill-util/TestListenerForV6.php | 95 + .../polyfill-util/TestListenerForV7.php | 96 + .../polyfill-util/TestListenerTrait.php | 129 + .../symfony/polyfill-util/composer.json | 30 + .../symfony/translation-contracts/LICENSE | 19 + .../LocaleAwareInterface.php | 31 + .../symfony/translation-contracts/README.md | 9 + .../Test/TranslatorTest.php | 353 + .../TranslatorInterface.php | 65 + .../translation-contracts/TranslatorTrait.php | 257 + .../translation-contracts/composer.json | 33 + .../vendor/symfony/translation/CHANGELOG.md | 148 + .../Catalogue/AbstractOperation.php | 157 + .../translation/Catalogue/MergeOperation.php | 58 + .../Catalogue/OperationInterface.php | 71 + .../translation/Catalogue/TargetOperation.php | 72 + .../translation/Command/XliffLintCommand.php | 266 + .../TranslationDataCollector.php | 172 + .../translation/DataCollectorTranslator.php | 159 + .../TranslationDumperPass.php | 44 + .../TranslationExtractorPass.php | 49 + .../DependencyInjection/TranslatorPass.php | 89 + .../TranslatorPathsPass.php | 144 + .../translation/Dumper/CsvFileDumper.php | 60 + .../translation/Dumper/DumperInterface.php | 30 + .../symfony/translation/Dumper/FileDumper.php | 112 + .../translation/Dumper/IcuResFileDumper.php | 104 + .../translation/Dumper/IniFileDumper.php | 45 + .../translation/Dumper/JsonFileDumper.php | 40 + .../translation/Dumper/MoFileDumper.php | 82 + .../translation/Dumper/PhpFileDumper.php | 38 + .../translation/Dumper/PoFileDumper.php | 137 + .../translation/Dumper/QtFileDumper.php | 61 + .../translation/Dumper/XliffFileDumper.php | 203 + .../translation/Dumper/YamlFileDumper.php | 62 + .../Exception/ExceptionInterface.php | 21 + .../Exception/InvalidArgumentException.php | 21 + .../Exception/InvalidResourceException.php | 21 + .../translation/Exception/LogicException.php | 21 + .../Exception/NotFoundResourceException.php | 21 + .../Exception/RuntimeException.php | 21 + .../Extractor/AbstractFileExtractor.php | 76 + .../translation/Extractor/ChainExtractor.php | 59 + .../Extractor/ExtractorInterface.php | 37 + .../translation/Extractor/PhpExtractor.php | 247 + .../Extractor/PhpStringTokenParser.php | 142 + .../translation/Formatter/IntlFormatter.php | 60 + .../Formatter/IntlFormatterInterface.php | 27 + .../Formatter/MessageFormatter.php | 56 + .../Formatter/MessageFormatterInterface.php | 30 + .../translation/IdentityTranslator.php | 26 + .../app/vendor/symfony/translation/LICENSE | 19 + .../translation/Loader/ArrayLoader.php | 58 + .../translation/Loader/CsvFileLoader.php | 65 + .../symfony/translation/Loader/FileLoader.php | 65 + .../translation/Loader/IcuDatFileLoader.php | 61 + .../translation/Loader/IcuResFileLoader.php | 91 + .../translation/Loader/IniFileLoader.php | 28 + .../translation/Loader/JsonFileLoader.php | 60 + .../translation/Loader/LoaderInterface.php | 38 + .../translation/Loader/MoFileLoader.php | 140 + .../translation/Loader/PhpFileLoader.php | 42 + .../translation/Loader/PoFileLoader.php | 149 + .../translation/Loader/QtFileLoader.php | 77 + .../translation/Loader/XliffFileLoader.php | 208 + .../translation/Loader/YamlFileLoader.php | 54 + .../symfony/translation/LoggingTranslator.php | 127 + .../symfony/translation/MessageCatalogue.php | 313 + .../translation/MessageCatalogueInterface.php | 138 + .../translation/MetadataAwareInterface.php | 54 + .../app/vendor/symfony/translation/README.md | 31 + .../translation/Reader/TranslationReader.php | 62 + .../Reader/TranslationReaderInterface.php | 27 + .../Resources/bin/translation-status.php | 207 + .../translation/Resources/data/parents.json | 136 + .../schemas/xliff-core-1.2-strict.xsd | 2223 +++ .../Resources/schemas/xliff-core-2.0.xsd | 411 + .../translation/Resources/schemas/xml.xsd | 309 + .../vendor/symfony/translation/Translator.php | 472 + .../translation/TranslatorBagInterface.php | 33 + .../translation/Util/ArrayConverter.php | 99 + .../symfony/translation/Util/XliffUtils.php | 163 + .../translation/Writer/TranslationWriter.php | 72 + .../Writer/TranslationWriterInterface.php | 33 + .../vendor/symfony/translation/composer.json | 61 + .../vendor/symfony/var-dumper/CHANGELOG.md | 53 + .../symfony/var-dumper/Caster/AmqpCaster.php | 212 + .../symfony/var-dumper/Caster/ArgsStub.php | 80 + .../symfony/var-dumper/Caster/Caster.php | 170 + .../symfony/var-dumper/Caster/ClassStub.php | 106 + .../symfony/var-dumper/Caster/ConstStub.php | 36 + .../var-dumper/Caster/CutArrayStub.php | 30 + .../symfony/var-dumper/Caster/CutStub.php | 64 + .../symfony/var-dumper/Caster/DOMCaster.php | 304 + .../symfony/var-dumper/Caster/DateCaster.php | 126 + .../var-dumper/Caster/DoctrineCaster.php | 62 + .../symfony/var-dumper/Caster/DsCaster.php | 70 + .../symfony/var-dumper/Caster/DsPairStub.php | 28 + .../symfony/var-dumper/Caster/EnumStub.php | 30 + .../var-dumper/Caster/ExceptionCaster.php | 383 + .../symfony/var-dumper/Caster/FrameStub.php | 30 + .../symfony/var-dumper/Caster/GmpCaster.php | 32 + .../var-dumper/Caster/ImagineCaster.php | 37 + .../symfony/var-dumper/Caster/ImgStub.php | 26 + .../symfony/var-dumper/Caster/IntlCaster.php | 172 + .../symfony/var-dumper/Caster/LinkStub.php | 108 + .../var-dumper/Caster/MemcachedCaster.php | 81 + .../symfony/var-dumper/Caster/PdoCaster.php | 122 + .../symfony/var-dumper/Caster/PgSqlCaster.php | 156 + .../var-dumper/Caster/ProxyManagerCaster.php | 33 + .../symfony/var-dumper/Caster/RedisCaster.php | 152 + .../var-dumper/Caster/ReflectionCaster.php | 384 + .../var-dumper/Caster/ResourceCaster.php | 100 + .../symfony/var-dumper/Caster/SplCaster.php | 228 + .../symfony/var-dumper/Caster/StubCaster.php | 84 + .../var-dumper/Caster/SymfonyCaster.php | 69 + .../symfony/var-dumper/Caster/TraceStub.php | 36 + .../symfony/var-dumper/Caster/UuidCaster.php | 30 + .../var-dumper/Caster/XmlReaderCaster.php | 79 + .../var-dumper/Caster/XmlResourceCaster.php | 63 + .../var-dumper/Cloner/AbstractCloner.php | 360 + .../var-dumper/Cloner/ClonerInterface.php | 27 + .../symfony/var-dumper/Cloner/Cursor.php | 43 + .../vendor/symfony/var-dumper/Cloner/Data.php | 451 + .../var-dumper/Cloner/DumperInterface.php | 56 + .../vendor/symfony/var-dumper/Cloner/Stub.php | 67 + .../symfony/var-dumper/Cloner/VarCloner.php | 284 + .../Command/Descriptor/CliDescriptor.php | 88 + .../Descriptor/DumpDescriptorInterface.php | 23 + .../Command/Descriptor/HtmlDescriptor.php | 119 + .../var-dumper/Command/ServerDumpCommand.php | 99 + .../var-dumper/Dumper/AbstractDumper.php | 204 + .../symfony/var-dumper/Dumper/CliDumper.php | 636 + .../ContextProvider/CliContextProvider.php | 32 + .../ContextProviderInterface.php | 25 + .../RequestContextProvider.php | 51 + .../ContextProvider/SourceContextProvider.php | 126 + .../Dumper/ContextualizedDumper.php | 43 + .../var-dumper/Dumper/DataDumperInterface.php | 24 + .../symfony/var-dumper/Dumper/HtmlDumper.php | 1004 ++ .../var-dumper/Dumper/ServerDumper.php | 53 + .../Exception/ThrowingCasterException.php | 26 + .../app/vendor/symfony/var-dumper/LICENSE | 19 + .../app/vendor/symfony/var-dumper/README.md | 15 + .../var-dumper/Resources/bin/var-dump-server | 63 + .../Resources/css/htmlDescriptor.css | 130 + .../var-dumper/Resources/functions/dump.php | 43 + .../var-dumper/Resources/js/htmlDescriptor.js | 10 + .../symfony/var-dumper/Server/Connection.php | 95 + .../symfony/var-dumper/Server/DumpServer.php | 107 + .../var-dumper/Test/VarDumperTestTrait.php | 84 + .../vendor/symfony/var-dumper/VarDumper.php | 60 + .../vendor/symfony/var-dumper/composer.json | 53 + .../app/vendor/symfony/yaml/CHANGELOG.md | 202 + .../symfony/yaml/Command/LintCommand.php | 248 + .../app/vendor/symfony/yaml/Dumper.php | 125 + .../app/vendor/symfony/yaml/Escaper.php | 103 + .../symfony/yaml/Exception/DumpException.php | 21 + .../yaml/Exception/ExceptionInterface.php | 21 + .../symfony/yaml/Exception/ParseException.php | 133 + .../yaml/Exception/RuntimeException.php | 21 + .../app/vendor/symfony/yaml/Inline.php | 770 + .../archive/app/vendor/symfony/yaml/LICENSE | 19 + .../app/vendor/symfony/yaml/Parser.php | 1245 ++ .../archive/app/vendor/symfony/yaml/README.md | 13 + .../vendor/symfony/yaml/Tag/TaggedValue.php | 38 + .../app/vendor/symfony/yaml/Unescaper.php | 138 + .../archive/app/vendor/symfony/yaml/Yaml.php | 102 + .../app/vendor/symfony/yaml/composer.json | 43 + .../vendor/tightenco/collect/composer.json | 38 + .../Collect/Contracts/Support/Arrayable.php | 13 + .../Collect/Contracts/Support/Htmlable.php | 13 + .../Collect/Contracts/Support/Jsonable.php | 14 + .../collect/src/Collect/Support/Arr.php | 664 + .../src/Collect/Support/Collection.php | 1358 ++ .../src/Collect/Support/Enumerable.php | 928 ++ .../Support/HigherOrderCollectionProxy.php | 63 + .../src/Collect/Support/HtmlString.php | 56 + .../src/Collect/Support/LazyCollection.php | 1310 ++ .../Support/Traits/EnumeratesValues.php | 977 ++ .../src/Collect/Support/Traits/Macroable.php | 116 + .../collect/src/Collect/Support/alias.php | 21 + .../collect/src/Collect/Support/helpers.php | 118 + .../app/vendor/twig/twig/.editorconfig | 18 + .../archive/app/vendor/twig/twig/.php_cs.dist | 20 + .../archive/app/vendor/twig/twig/.travis.yml | 43 + .../archive/app/vendor/twig/twig/CHANGELOG | 1480 ++ .../archive/app/vendor/twig/twig/LICENSE | 29 + .../archive/app/vendor/twig/twig/README.rst | 24 + .../app/vendor/twig/twig/composer.json | 49 + .../app/vendor/twig/twig/doc/advanced.rst | 904 ++ .../archive/app/vendor/twig/twig/doc/api.rst | 586 + .../vendor/twig/twig/doc/coding_standards.rst | 101 + .../app/vendor/twig/twig/doc/deprecated.rst | 6 + .../app/vendor/twig/twig/doc/filters/abs.rst | 18 + .../vendor/twig/twig/doc/filters/batch.rst | 49 + .../twig/twig/doc/filters/capitalize.rst | 11 + .../vendor/twig/twig/doc/filters/column.rst | 24 + .../twig/doc/filters/convert_encoding.rst | 22 + .../twig/twig/doc/filters/country_name.rst | 39 + .../twig/twig/doc/filters/currency_name.rst | 42 + .../twig/twig/doc/filters/currency_symbol.rst | 42 + .../vendor/twig/twig/doc/filters/data_uri.rst | 48 + .../app/vendor/twig/twig/doc/filters/date.rst | 82 + .../twig/twig/doc/filters/date_modify.rst | 20 + .../vendor/twig/twig/doc/filters/default.rst | 33 + .../vendor/twig/twig/doc/filters/escape.rst | 119 + .../vendor/twig/twig/doc/filters/filter.rst | 55 + .../vendor/twig/twig/doc/filters/first.rst | 22 + .../vendor/twig/twig/doc/filters/format.rst | 16 + .../twig/twig/doc/filters/format_currency.rst | 72 + .../twig/twig/doc/filters/format_date.rst | 29 + .../twig/twig/doc/filters/format_datetime.rst | 65 + .../twig/twig/doc/filters/format_number.rst | 115 + .../twig/twig/doc/filters/format_time.rst | 29 + .../twig/doc/filters/html_to_markdown.rst | 63 + .../vendor/twig/twig/doc/filters/index.rst | 59 + .../twig/twig/doc/filters/inky_to_html.rst | 37 + .../twig/twig/doc/filters/inline_css.rst | 61 + .../app/vendor/twig/twig/doc/filters/join.rst | 32 + .../twig/twig/doc/filters/json_encode.rst | 23 + .../app/vendor/twig/twig/doc/filters/keys.rst | 11 + .../twig/twig/doc/filters/language_name.rst | 42 + .../app/vendor/twig/twig/doc/filters/last.rst | 22 + .../vendor/twig/twig/doc/filters/length.rst | 19 + .../twig/twig/doc/filters/locale_name.rst | 42 + .../vendor/twig/twig/doc/filters/lower.rst | 10 + .../app/vendor/twig/twig/doc/filters/map.rst | 34 + .../twig/doc/filters/markdown_to_html.rst | 62 + .../vendor/twig/twig/doc/filters/merge.rst | 48 + .../vendor/twig/twig/doc/filters/nl2br.rst | 19 + .../twig/twig/doc/filters/number_format.rst | 53 + .../app/vendor/twig/twig/doc/filters/raw.rst | 12 + .../vendor/twig/twig/doc/filters/reduce.rst | 29 + .../vendor/twig/twig/doc/filters/replace.rst | 25 + .../vendor/twig/twig/doc/filters/reverse.rst | 44 + .../vendor/twig/twig/doc/filters/round.rst | 34 + .../vendor/twig/twig/doc/filters/slice.rst | 68 + .../app/vendor/twig/twig/doc/filters/sort.rst | 42 + .../twig/twig/doc/filters/spaceless.rst | 56 + .../vendor/twig/twig/doc/filters/split.rst | 50 + .../twig/twig/doc/filters/striptags.rst | 29 + .../twig/twig/doc/filters/timezone_name.rst | 41 + .../vendor/twig/twig/doc/filters/title.rst | 11 + .../app/vendor/twig/twig/doc/filters/trim.rst | 39 + .../app/vendor/twig/twig/doc/filters/u.rst | 75 + .../vendor/twig/twig/doc/filters/upper.rst | 10 + .../twig/twig/doc/filters/url_encode.rst | 22 + .../twig/twig/doc/functions/attribute.rst | 23 + .../vendor/twig/twig/doc/functions/block.rst | 35 + .../twig/twig/doc/functions/constant.rst | 23 + .../twig/doc/functions/country_timezones.rst | 27 + .../vendor/twig/twig/doc/functions/cycle.rst | 28 + .../vendor/twig/twig/doc/functions/date.rst | 46 + .../vendor/twig/twig/doc/functions/dump.rst | 66 + .../twig/twig/doc/functions/html_classes.rst | 30 + .../twig/twig/doc/functions/include.rst | 77 + .../vendor/twig/twig/doc/functions/index.rst | 22 + .../vendor/twig/twig/doc/functions/max.rst | 17 + .../vendor/twig/twig/doc/functions/min.rst | 17 + .../vendor/twig/twig/doc/functions/parent.rst | 20 + .../vendor/twig/twig/doc/functions/random.rst | 27 + .../vendor/twig/twig/doc/functions/range.rst | 58 + .../vendor/twig/twig/doc/functions/source.rst | 26 + .../doc/functions/template_from_string.rst | 37 + .../app/vendor/twig/twig/doc/index.rst | 19 + .../app/vendor/twig/twig/doc/installation.rst | 10 + .../app/vendor/twig/twig/doc/internals.rst | 140 + .../app/vendor/twig/twig/doc/intro.rst | 70 + .../app/vendor/twig/twig/doc/recipes.rst | 527 + .../app/vendor/twig/twig/doc/templates.rst | 854 + .../vendor/twig/twig/doc/tests/constant.rst | 19 + .../vendor/twig/twig/doc/tests/defined.rst | 30 + .../twig/twig/doc/tests/divisibleby.rst | 10 + .../app/vendor/twig/twig/doc/tests/empty.rst | 18 + .../app/vendor/twig/twig/doc/tests/even.rst | 10 + .../app/vendor/twig/twig/doc/tests/index.rst | 15 + .../vendor/twig/twig/doc/tests/iterable.rst | 16 + .../app/vendor/twig/twig/doc/tests/null.rst | 12 + .../app/vendor/twig/twig/doc/tests/odd.rst | 10 + .../app/vendor/twig/twig/doc/tests/sameas.rst | 11 + .../app/vendor/twig/twig/drupal_test.sh | 51 + .../twig/twig/src/Cache/CacheInterface.php | 46 + .../twig/twig/src/Cache/FilesystemCache.php | 87 + .../vendor/twig/twig/src/Cache/NullCache.php | 38 + .../app/vendor/twig/twig/src/Compiler.php | 214 + .../app/vendor/twig/twig/src/Environment.php | 816 + .../app/vendor/twig/twig/src/Error/Error.php | 227 + .../twig/twig/src/Error/LoaderError.php | 21 + .../twig/twig/src/Error/RuntimeError.php | 22 + .../twig/twig/src/Error/SyntaxError.php | 46 + .../vendor/twig/twig/src/ExpressionParser.php | 807 + .../twig/src/Extension/AbstractExtension.php | 45 + .../twig/twig/src/Extension/CoreExtension.php | 1598 ++ .../twig/src/Extension/DebugExtension.php | 64 + .../twig/src/Extension/EscaperExtension.php | 418 + .../twig/src/Extension/ExtensionInterface.php | 68 + .../twig/src/Extension/GlobalsInterface.php | 25 + .../twig/src/Extension/OptimizerExtension.php | 29 + .../twig/src/Extension/ProfilerExtension.php | 52 + .../Extension/RuntimeExtensionInterface.php | 19 + .../twig/src/Extension/SandboxExtension.php | 123 + .../twig/src/Extension/StagingExtension.php | 100 + .../src/Extension/StringLoaderExtension.php | 42 + .../app/vendor/twig/twig/src/ExtensionSet.php | 438 + .../src/FileExtensionEscapingStrategy.php | 60 + .../app/vendor/twig/twig/src/Lexer.php | 497 + .../twig/twig/src/Loader/ArrayLoader.php | 78 + .../twig/twig/src/Loader/ChainLoader.php | 119 + .../twig/twig/src/Loader/FilesystemLoader.php | 283 + .../twig/twig/src/Loader/LoaderInterface.php | 49 + .../app/vendor/twig/twig/src/Markup.php | 44 + .../twig/twig/src/Node/AutoEscapeNode.php | 38 + .../vendor/twig/twig/src/Node/BlockNode.php | 44 + .../twig/twig/src/Node/BlockReferenceNode.php | 36 + .../vendor/twig/twig/src/Node/BodyNode.php | 21 + .../twig/twig/src/Node/CheckSecurityNode.php | 83 + .../twig/twig/src/Node/CheckToStringNode.php | 45 + .../twig/twig/src/Node/DeprecatedNode.php | 53 + .../app/vendor/twig/twig/src/Node/DoNode.php | 38 + .../vendor/twig/twig/src/Node/EmbedNode.php | 48 + .../Node/Expression/AbstractExpression.php | 24 + .../src/Node/Expression/ArrayExpression.php | 85 + .../Expression/ArrowFunctionExpression.php | 64 + .../Node/Expression/AssignNameExpression.php | 27 + .../Node/Expression/Binary/AbstractBinary.php | 42 + .../src/Node/Expression/Binary/AddBinary.php | 23 + .../src/Node/Expression/Binary/AndBinary.php | 23 + .../Expression/Binary/BitwiseAndBinary.php | 23 + .../Expression/Binary/BitwiseOrBinary.php | 23 + .../Expression/Binary/BitwiseXorBinary.php | 23 + .../Node/Expression/Binary/ConcatBinary.php | 23 + .../src/Node/Expression/Binary/DivBinary.php | 23 + .../Node/Expression/Binary/EndsWithBinary.php | 35 + .../Node/Expression/Binary/EqualBinary.php | 39 + .../Node/Expression/Binary/FloorDivBinary.php | 29 + .../Node/Expression/Binary/GreaterBinary.php | 39 + .../Expression/Binary/GreaterEqualBinary.php | 39 + .../src/Node/Expression/Binary/InBinary.php | 33 + .../src/Node/Expression/Binary/LessBinary.php | 39 + .../Expression/Binary/LessEqualBinary.php | 39 + .../Node/Expression/Binary/MatchesBinary.php | 33 + .../src/Node/Expression/Binary/ModBinary.php | 23 + .../src/Node/Expression/Binary/MulBinary.php | 23 + .../Node/Expression/Binary/NotEqualBinary.php | 39 + .../Node/Expression/Binary/NotInBinary.php | 33 + .../src/Node/Expression/Binary/OrBinary.php | 23 + .../Node/Expression/Binary/PowerBinary.php | 22 + .../Node/Expression/Binary/RangeBinary.php | 33 + .../Expression/Binary/SpaceshipBinary.php | 22 + .../Expression/Binary/StartsWithBinary.php | 35 + .../src/Node/Expression/Binary/SubBinary.php | 23 + .../Expression/BlockReferenceExpression.php | 86 + .../src/Node/Expression/CallExpression.php | 310 + .../Node/Expression/ConditionalExpression.php | 36 + .../Node/Expression/ConstantExpression.php | 28 + .../Node/Expression/Filter/DefaultFilter.php | 52 + .../src/Node/Expression/FilterExpression.php | 40 + .../Node/Expression/FunctionExpression.php | 43 + .../src/Node/Expression/GetAttrExpression.php | 87 + .../twig/src/Node/Expression/InlinePrint.php | 35 + .../Node/Expression/MethodCallExpression.php | 62 + .../src/Node/Expression/NameExpression.php | 97 + .../Expression/NullCoalesceExpression.php | 60 + .../src/Node/Expression/ParentExpression.php | 46 + .../Node/Expression/TempNameExpression.php | 31 + .../src/Node/Expression/Test/ConstantTest.php | 49 + .../src/Node/Expression/Test/DefinedTest.php | 74 + .../Node/Expression/Test/DivisiblebyTest.php | 36 + .../src/Node/Expression/Test/EvenTest.php | 35 + .../src/Node/Expression/Test/NullTest.php | 34 + .../twig/src/Node/Expression/Test/OddTest.php | 35 + .../src/Node/Expression/Test/SameasTest.php | 34 + .../src/Node/Expression/TestExpression.php | 42 + .../Node/Expression/Unary/AbstractUnary.php | 34 + .../src/Node/Expression/Unary/NegUnary.php | 23 + .../src/Node/Expression/Unary/NotUnary.php | 23 + .../src/Node/Expression/Unary/PosUnary.php | 23 + .../Node/Expression/VariadicExpression.php | 24 + .../vendor/twig/twig/src/Node/FlushNode.php | 35 + .../vendor/twig/twig/src/Node/ForLoopNode.php | 49 + .../app/vendor/twig/twig/src/Node/ForNode.php | 107 + .../app/vendor/twig/twig/src/Node/IfNode.php | 70 + .../vendor/twig/twig/src/Node/ImportNode.php | 63 + .../vendor/twig/twig/src/Node/IncludeNode.php | 106 + .../vendor/twig/twig/src/Node/MacroNode.php | 113 + .../vendor/twig/twig/src/Node/ModuleNode.php | 464 + .../app/vendor/twig/twig/src/Node/Node.php | 175 + .../twig/src/Node/NodeCaptureInterface.php | 21 + .../twig/src/Node/NodeOutputInterface.php | 21 + .../vendor/twig/twig/src/Node/PrintNode.php | 39 + .../vendor/twig/twig/src/Node/SandboxNode.php | 45 + .../app/vendor/twig/twig/src/Node/SetNode.php | 105 + .../vendor/twig/twig/src/Node/TextNode.php | 38 + .../vendor/twig/twig/src/Node/WithNode.php | 70 + .../vendor/twig/twig/src/NodeTraverser.php | 76 + .../src/NodeVisitor/AbstractNodeVisitor.php | 49 + .../src/NodeVisitor/EscaperNodeVisitor.php | 206 + .../MacroAutoImportNodeVisitor.php | 72 + .../src/NodeVisitor/NodeVisitorInterface.php | 46 + .../src/NodeVisitor/OptimizerNodeVisitor.php | 215 + .../NodeVisitor/SafeAnalysisNodeVisitor.php | 157 + .../src/NodeVisitor/SandboxNodeVisitor.php | 132 + .../app/vendor/twig/twig/src/Parser.php | 360 + .../twig/src/Profiler/Dumper/BaseDumper.php | 63 + .../src/Profiler/Dumper/BlackfireDumper.php | 72 + .../twig/src/Profiler/Dumper/HtmlDumper.php | 47 + .../twig/src/Profiler/Dumper/TextDumper.php | 35 + .../src/Profiler/Node/EnterProfileNode.php | 42 + .../src/Profiler/Node/LeaveProfileNode.php | 36 + .../NodeVisitor/ProfilerNodeVisitor.php | 76 + .../vendor/twig/twig/src/Profiler/Profile.php | 181 + .../RuntimeLoader/ContainerRuntimeLoader.php | 37 + .../RuntimeLoader/FactoryRuntimeLoader.php | 41 + .../RuntimeLoader/RuntimeLoaderInterface.php | 27 + .../twig/twig/src/Sandbox/SecurityError.php | 23 + .../Sandbox/SecurityNotAllowedFilterError.php | 33 + .../SecurityNotAllowedFunctionError.php | 33 + .../Sandbox/SecurityNotAllowedMethodError.php | 40 + .../SecurityNotAllowedPropertyError.php | 40 + .../Sandbox/SecurityNotAllowedTagError.php | 33 + .../twig/twig/src/Sandbox/SecurityPolicy.php | 126 + .../src/Sandbox/SecurityPolicyInterface.php | 35 + .../app/vendor/twig/twig/src/Source.php | 51 + .../app/vendor/twig/twig/src/Template.php | 424 + .../vendor/twig/twig/src/TemplateWrapper.php | 109 + .../twig/src/Test/IntegrationTestCase.php | 265 + .../twig/twig/src/Test/NodeTestCase.php | 65 + .../app/vendor/twig/twig/src/Token.php | 178 + .../src/TokenParser/AbstractTokenParser.php | 32 + .../twig/src/TokenParser/ApplyTokenParser.php | 58 + .../src/TokenParser/AutoEscapeTokenParser.php | 56 + .../twig/src/TokenParser/BlockTokenParser.php | 76 + .../src/TokenParser/DeprecatedTokenParser.php | 41 + .../twig/src/TokenParser/DoTokenParser.php | 36 + .../twig/src/TokenParser/EmbedTokenParser.php | 71 + .../src/TokenParser/ExtendsTokenParser.php | 50 + .../twig/src/TokenParser/FlushTokenParser.php | 36 + .../twig/src/TokenParser/ForTokenParser.php | 77 + .../twig/src/TokenParser/FromTokenParser.php | 64 + .../twig/src/TokenParser/IfTokenParser.php | 87 + .../src/TokenParser/ImportTokenParser.php | 42 + .../src/TokenParser/IncludeTokenParser.php | 67 + .../twig/src/TokenParser/MacroTokenParser.php | 64 + .../src/TokenParser/SandboxTokenParser.php | 64 + .../twig/src/TokenParser/SetTokenParser.php | 71 + .../src/TokenParser/TokenParserInterface.php | 46 + .../twig/src/TokenParser/UseTokenParser.php | 71 + .../twig/src/TokenParser/WithTokenParser.php | 54 + .../app/vendor/twig/twig/src/TokenStream.php | 132 + .../app/vendor/twig/twig/src/TwigFilter.php | 134 + .../app/vendor/twig/twig/src/TwigFunction.php | 122 + .../app/vendor/twig/twig/src/TwigTest.php | 94 + .../twig/src/Util/DeprecationCollector.php | 77 + .../twig/src/Util/TemplateDirIterator.php | 28 + .../app/vendor/vlucas/phpdotenv/LICENSE | 30 + .../app/vendor/vlucas/phpdotenv/composer.json | 52 + .../vlucas/phpdotenv/phpstan.src.neon.dist | 11 + .../vendor/vlucas/phpdotenv/src/Dotenv.php | 157 + .../src/Exception/ExceptionInterface.php | 8 + .../src/Exception/InvalidFileException.php | 10 + .../src/Exception/InvalidPathException.php | 10 + .../src/Exception/ValidationException.php | 10 + .../vlucas/phpdotenv/src/Loader/Lines.php | 135 + .../vlucas/phpdotenv/src/Loader/Loader.php | 118 + .../phpdotenv/src/Loader/LoaderInterface.php | 20 + .../vlucas/phpdotenv/src/Loader/Parser.php | 217 + .../vlucas/phpdotenv/src/Loader/Value.php | 83 + .../vlucas/phpdotenv/src/Regex/Regex.php | 122 + .../src/Repository/AbstractRepository.php | 175 + .../src/Repository/Adapter/ApacheAdapter.php | 64 + .../src/Repository/Adapter/ArrayAdapter.php | 67 + .../Adapter/AvailabilityInterface.php | 13 + .../Repository/Adapter/EnvConstAdapter.php | 60 + .../src/Repository/Adapter/PutenvAdapter.php | 56 + .../Repository/Adapter/ReaderInterface.php | 15 + .../Repository/Adapter/ServerConstAdapter.php | 60 + .../Repository/Adapter/WriterInterface.php | 25 + .../src/Repository/AdapterRepository.php | 86 + .../src/Repository/RepositoryBuilder.php | 144 + .../src/Repository/RepositoryInterface.php | 54 + .../vlucas/phpdotenv/src/Result/Error.php | 93 + .../vlucas/phpdotenv/src/Result/Result.php | 70 + .../vlucas/phpdotenv/src/Result/Success.php | 93 + .../vlucas/phpdotenv/src/Store/File/Paths.php | 27 + .../phpdotenv/src/Store/File/Reader.php | 52 + .../vlucas/phpdotenv/src/Store/FileStore.php | 61 + .../phpdotenv/src/Store/StoreBuilder.php | 102 + .../phpdotenv/src/Store/StoreInterface.php | 15 + .../vendor/vlucas/phpdotenv/src/Validator.php | 193 + .../archive/app/views/components/file.twig | 42 + .../archive/app/views/components/footer.twig | 21 + .../views/components/google-analytics.twig | 11 + .../archive/app/views/components/header.twig | 36 + .../archive/app/views/components/readme.twig | 15 + .../app/views/components/scroll-to-top.twig | 10 + .../archive/app/views/components/search.twig | 21 + .../daily_report/archive/app/views/error.twig | 18 + .../daily_report/archive/app/views/index.twig | 46 + .../archive/app/views/layouts/app.twig | 19 + .../daily_report/archive/hours-rules.html | 11 + soc/2020/daily_report/archive/index.php | 22 + .../archive/roadmap-as-of-june.txt | 68 + .../archive/roadmap-as-of-may.txt | 74 + soc/2020/daily_report/archive/roadmap.txt | 94 + soc/2020/daily_report/index.php | 1 + soc/2020/ideas.php | 329 + soc/2020/index.html | 75 + soc/2020/landing/index.html | 57 + soc/2020/landing/pranjal.png | Bin 0 -> 88665 bytes soc/2020/landing/rainydaysavings.png | Bin 0 -> 745657 bytes soc/2020/landing/suraj.png | Bin 0 -> 157728 bytes soc/2020/landing/susdiv.png | Bin 0 -> 210765 bytes soc/2020/proposal_rating_guidelines.txt | 81 + .../pleroma_fe/SusannaCertificate.pdf | Bin 0 -> 92306 bytes soc/2020/tech_report/pleroma_fe/index.html | 2 + .../pleroma_fe/technical_report.pdf | Bin 0 -> 158695 bytes ...rtificate of Completion for Hugo Sales.pdf | Bin 0 -> 107090 bytes soc/2020/tech_report/v3_be/index.html | 3 + .../tech_report/v3_be/technical_report.pdf | Bin 0 -> 123427 bytes soc/2020/tech_report/v3_fe/certificate.pdf | Bin 0 -> 107051 bytes .../tech_report/v3_fe/certificate_diogo.sig | Bin 0 -> 310 bytes .../tech_report/v3_fe/certificate_rozzin.sig | Bin 0 -> 590 bytes .../tech_report/v3_fe/daily_reports_diogo.sig | Bin 0 -> 310 bytes soc/2020/tech_report/v3_fe/index.html | 4 + .../tech_report/v3_fe/technical_report.pdf | Bin 0 -> 1386355 bytes .../v3_fe/technical_report_diogo.sig | Bin 0 -> 310 bytes .../v3_fe/technical_report_rozzin.sig | Bin 0 -> 590 bytes soc/2020/tech_report/v3_fe/transcript.pdf | Bin 0 -> 89849 bytes .../tech_report/v3_fe/transcript_diogo.sig | Bin 0 -> 310 bytes .../tech_report/v3_fe/transcript_rozzin.sig | Bin 0 -> 590 bytes .../tech_report/v3_fe/verification_letter.pdf | Bin 0 -> 119641 bytes .../v3_fe/verification_letter_diogo.sig | Bin 0 -> 310 bytes .../v3_fe/verification_letter_rozzin.sig | Bin 0 -> 590 bytes soc/index.html | 93 + 1382 files changed, 157806 insertions(+) create mode 100644 index.html create mode 100644 soc/2018/images/testimonial1.png create mode 100644 soc/2018/images/testimonial2.png create mode 100644 soc/2018/images/testimonial3.png create mode 100644 soc/2018/index.html create mode 100644 soc/2019/accepted_proposals/load.pdf create mode 100644 soc/2019/accepted_proposals/network.pdf create mode 100644 soc/2019/coding_environment.jpg create mode 100644 soc/2019/ideas.php create mode 100644 soc/2019/index.html create mode 100644 soc/2019/tech_report/load/index.html create mode 100644 soc/2019/tech_report/network/index.html create mode 100644 soc/2020/academics.html create mode 100644 soc/2020/accepted_proposals/frontend_eliseu.pdf create mode 100644 soc/2020/accepted_proposals/pleroma.pdf create mode 100644 soc/2020/accepted_proposals/rewrite.pdf create mode 100644 soc/2020/announcements.php create mode 100644 soc/2020/coding_environment.jpg create mode 100644 soc/2020/daily_report/archive/.env create mode 100644 soc/2020/daily_report/archive/August/hugo.html create mode 100644 soc/2020/daily_report/archive/August/rainydaysavings.html create mode 100644 soc/2020/daily_report/archive/August/susannadiv.html create mode 100644 soc/2020/daily_report/archive/July/hugo.html create mode 100644 soc/2020/daily_report/archive/July/rainydaysavings.html create mode 100644 soc/2020/daily_report/archive/July/susannadiv.html create mode 100644 soc/2020/daily_report/archive/June/hugo.html create mode 100644 soc/2020/daily_report/archive/June/rainydaysavings.html create mode 100644 soc/2020/daily_report/archive/June/susannadiv.html create mode 100644 soc/2020/daily_report/archive/May/hugo.html create mode 100644 soc/2020/daily_report/archive/May/rainydaysavings.html create mode 100644 soc/2020/daily_report/archive/May/susannadiv.html create mode 100644 soc/2020/daily_report/archive/app/assets/app.css create mode 100644 soc/2020/daily_report/archive/app/assets/app.js create mode 100644 soc/2020/daily_report/archive/app/assets/app.js.LICENSE.txt create mode 100644 soc/2020/daily_report/archive/app/assets/images/favicon.dark.png create mode 100644 soc/2020/daily_report/archive/app/assets/images/favicon.light.png create mode 100644 soc/2020/daily_report/archive/app/assets/mix-manifest.json create mode 100644 soc/2020/daily_report/archive/app/assets/webfonts/fa-brands-400.eot create mode 100644 soc/2020/daily_report/archive/app/assets/webfonts/fa-brands-400.svg create mode 100644 soc/2020/daily_report/archive/app/assets/webfonts/fa-brands-400.ttf create mode 100644 soc/2020/daily_report/archive/app/assets/webfonts/fa-brands-400.woff create mode 100644 soc/2020/daily_report/archive/app/assets/webfonts/fa-brands-400.woff2 create mode 100644 soc/2020/daily_report/archive/app/assets/webfonts/fa-regular-400.eot create mode 100644 soc/2020/daily_report/archive/app/assets/webfonts/fa-regular-400.svg create mode 100644 soc/2020/daily_report/archive/app/assets/webfonts/fa-regular-400.ttf create mode 100644 soc/2020/daily_report/archive/app/assets/webfonts/fa-regular-400.woff create mode 100644 soc/2020/daily_report/archive/app/assets/webfonts/fa-regular-400.woff2 create mode 100644 soc/2020/daily_report/archive/app/assets/webfonts/fa-solid-900.eot create mode 100644 soc/2020/daily_report/archive/app/assets/webfonts/fa-solid-900.svg create mode 100644 soc/2020/daily_report/archive/app/assets/webfonts/fa-solid-900.ttf create mode 100644 soc/2020/daily_report/archive/app/assets/webfonts/fa-solid-900.woff create mode 100644 soc/2020/daily_report/archive/app/assets/webfonts/fa-solid-900.woff2 create mode 100644 soc/2020/daily_report/archive/app/cache/views/28/286fc7bc95fe4fb5c37c4ef04348658468a3d513a3ac0533b4d6d26dd5946814.php create mode 100644 soc/2020/daily_report/archive/app/cache/views/40/40e67e6a946cfab36c9ee6915982fd118473075a75ef12278c55369a8e4b38bf.php create mode 100644 soc/2020/daily_report/archive/app/cache/views/44/448a9f26a9e40294fedf15482816de7334c463807d0704e2d8e1092ff8cbac65.php create mode 100644 soc/2020/daily_report/archive/app/cache/views/57/5736dc431428062df671acad860b3b03fea1bd3237763d072ac904e32bb48984.php create mode 100644 soc/2020/daily_report/archive/app/cache/views/5e/5e8a7c454c2113cd665884ede2b1c94c3590153d8b909d7542ea308009ce39b4.php create mode 100644 soc/2020/daily_report/archive/app/cache/views/9f/9f068c31a5b3f0c7c23661a38434ec1b2f9e4f032b3abbe68ababebc8d244f5c.php create mode 100644 soc/2020/daily_report/archive/app/cache/views/a6/a626095674c1d84dd8c6169b3c5b157a86f3b5f0659a0e4d3b0905b33989590c.php create mode 100644 soc/2020/daily_report/archive/app/cache/views/eb/eb091b9a4910b8725055283794cd0d6488ad4a6dcc632e5f14937ed5c84c1ffa.php create mode 100644 soc/2020/daily_report/archive/app/config/app.php create mode 100644 soc/2020/daily_report/archive/app/config/container.php create mode 100644 soc/2020/daily_report/archive/app/config/icons.php create mode 100644 soc/2020/daily_report/archive/app/src/Bootstrap/AppManager.php create mode 100644 soc/2020/daily_report/archive/app/src/Bootstrap/ExceptionManager.php create mode 100644 soc/2020/daily_report/archive/app/src/Bootstrap/MiddlewareManager.php create mode 100644 soc/2020/daily_report/archive/app/src/Bootstrap/RouteManager.php create mode 100644 soc/2020/daily_report/archive/app/src/Controllers/DirectoryController.php create mode 100644 soc/2020/daily_report/archive/app/src/Controllers/FileInfoController.php create mode 100644 soc/2020/daily_report/archive/app/src/Controllers/IndexController.php create mode 100644 soc/2020/daily_report/archive/app/src/Controllers/SearchController.php create mode 100644 soc/2020/daily_report/archive/app/src/Controllers/ZipController.php create mode 100644 soc/2020/daily_report/archive/app/src/Exceptions/ErrorHandler.php create mode 100644 soc/2020/daily_report/archive/app/src/Factories/FinderFactory.php create mode 100644 soc/2020/daily_report/archive/app/src/Factories/TranslationFactory.php create mode 100644 soc/2020/daily_report/archive/app/src/Factories/TwigFactory.php create mode 100644 soc/2020/daily_report/archive/app/src/Middlewares/WhoopsMiddleware.php create mode 100644 soc/2020/daily_report/archive/app/src/SortMethods/Accessed.php create mode 100644 soc/2020/daily_report/archive/app/src/SortMethods/Changed.php create mode 100644 soc/2020/daily_report/archive/app/src/SortMethods/Modified.php create mode 100644 soc/2020/daily_report/archive/app/src/SortMethods/Name.php create mode 100644 soc/2020/daily_report/archive/app/src/SortMethods/Natural.php create mode 100644 soc/2020/daily_report/archive/app/src/SortMethods/SortMethod.php create mode 100644 soc/2020/daily_report/archive/app/src/SortMethods/Type.php create mode 100644 soc/2020/daily_report/archive/app/src/Support/Helpers.php create mode 100644 soc/2020/daily_report/archive/app/src/Support/Str.php create mode 100644 soc/2020/daily_report/archive/app/src/TemporaryFile.php create mode 100644 soc/2020/daily_report/archive/app/src/ViewFunctions/Asset.php create mode 100644 soc/2020/daily_report/archive/app/src/ViewFunctions/Breadcrumbs.php create mode 100644 soc/2020/daily_report/archive/app/src/ViewFunctions/Config.php create mode 100644 soc/2020/daily_report/archive/app/src/ViewFunctions/FileUrl.php create mode 100644 soc/2020/daily_report/archive/app/src/ViewFunctions/Icon.php create mode 100644 soc/2020/daily_report/archive/app/src/ViewFunctions/Markdown.php create mode 100644 soc/2020/daily_report/archive/app/src/ViewFunctions/ParentUrl.php create mode 100644 soc/2020/daily_report/archive/app/src/ViewFunctions/SizeForHumans.php create mode 100644 soc/2020/daily_report/archive/app/src/ViewFunctions/Translate.php create mode 100644 soc/2020/daily_report/archive/app/src/ViewFunctions/Url.php create mode 100644 soc/2020/daily_report/archive/app/src/ViewFunctions/ViewFunction.php create mode 100644 soc/2020/daily_report/archive/app/src/ViewFunctions/ZipUrl.php create mode 100644 soc/2020/daily_report/archive/app/translations/de.yaml create mode 100644 soc/2020/daily_report/archive/app/translations/en.yaml create mode 100644 soc/2020/daily_report/archive/app/translations/es.yaml create mode 100644 soc/2020/daily_report/archive/app/translations/fr.yaml create mode 100644 soc/2020/daily_report/archive/app/translations/id.yaml create mode 100644 soc/2020/daily_report/archive/app/translations/it.yaml create mode 100644 soc/2020/daily_report/archive/app/translations/kr.yaml create mode 100644 soc/2020/daily_report/archive/app/translations/nl.yaml create mode 100644 soc/2020/daily_report/archive/app/translations/pl.yaml create mode 100644 soc/2020/daily_report/archive/app/translations/pt-BR.yaml create mode 100644 soc/2020/daily_report/archive/app/translations/ro.yaml create mode 100644 soc/2020/daily_report/archive/app/translations/ru.yaml create mode 100644 soc/2020/daily_report/archive/app/translations/zh-CN.yaml create mode 100644 soc/2020/daily_report/archive/app/translations/zh-TW.yaml create mode 100644 soc/2020/daily_report/archive/app/vendor/autoload.php create mode 100644 soc/2020/daily_report/archive/app/vendor/bin/php-parse create mode 100644 soc/2020/daily_report/archive/app/vendor/bin/var-dump-server create mode 100644 soc/2020/daily_report/archive/app/vendor/composer/ClassLoader.php create mode 100644 soc/2020/daily_report/archive/app/vendor/composer/LICENSE create mode 100644 soc/2020/daily_report/archive/app/vendor/composer/autoload_classmap.php create mode 100644 soc/2020/daily_report/archive/app/vendor/composer/autoload_files.php create mode 100644 soc/2020/daily_report/archive/app/vendor/composer/autoload_namespaces.php create mode 100644 soc/2020/daily_report/archive/app/vendor/composer/autoload_psr4.php create mode 100644 soc/2020/daily_report/archive/app/vendor/composer/autoload_real.php create mode 100644 soc/2020/daily_report/archive/app/vendor/composer/autoload_static.php create mode 100644 soc/2020/daily_report/archive/app/vendor/composer/installed.json create mode 100644 soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/.travis.yml create mode 100644 soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/LICENSE.txt create mode 100644 soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/ParsedownExtra.php create mode 100644 soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/README.md create mode 100644 soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/phpunit.xml.dist create mode 100644 soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/ParsedownExtraTest.php create mode 100644 soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/TestParsedown.php create mode 100644 soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/abbreviation.html create mode 100644 soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/abbreviation.md create mode 100644 soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/compound_footnote.html create mode 100644 soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/compound_footnote.md create mode 100644 soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/definition_list.html create mode 100644 soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/definition_list.md create mode 100644 soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/footnote.html create mode 100644 soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/footnote.md create mode 100644 soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/markdown_inside_markup.html create mode 100644 soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/markdown_inside_markup.md create mode 100644 soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/special_attributes.html create mode 100644 soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/special_attributes.md create mode 100644 soc/2020/daily_report/archive/app/vendor/erusev/parsedown/LICENSE.txt create mode 100644 soc/2020/daily_report/archive/app/vendor/erusev/parsedown/Parsedown.php create mode 100644 soc/2020/daily_report/archive/app/vendor/erusev/parsedown/README.md create mode 100644 soc/2020/daily_report/archive/app/vendor/erusev/parsedown/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/fig/http-message-util/CHANGELOG.md create mode 100644 soc/2020/daily_report/archive/app/vendor/fig/http-message-util/LICENSE create mode 100644 soc/2020/daily_report/archive/app/vendor/fig/http-message-util/README.md create mode 100644 soc/2020/daily_report/archive/app/vendor/fig/http-message-util/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/fig/http-message-util/src/RequestMethodInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/fig/http-message-util/src/StatusCodeInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/CHANGELOG.md create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/LICENSE.md create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Exception/ErrorException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Exception/Formatter.php create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Exception/Frame.php create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Exception/FrameCollection.php create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Exception/Inspector.php create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Handler/CallbackHandler.php create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Handler/Handler.php create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Handler/HandlerInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Handler/JsonResponseHandler.php create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Handler/PlainTextHandler.php create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Handler/PrettyPageHandler.php create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Handler/XmlResponseHandler.php create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/css/whoops.base.css create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/js/clipboard.min.js create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/js/prettify.min.js create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/js/whoops.base.js create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/js/zepto.min.js create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/env_details.html.php create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/frame_code.html.php create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/frame_list.html.php create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/frames_container.html.php create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/frames_description.html.php create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/header.html.php create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/header_outer.html.php create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/layout.html.php create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/panel_details.html.php create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/panel_details_outer.html.php create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/panel_left.html.php create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/panel_left_outer.html.php create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Run.php create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/RunInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Util/HtmlDumperOutput.php create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Util/Misc.php create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Util/SystemFacade.php create mode 100644 soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Util/TemplateHelper.php create mode 100644 soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/LICENSE.md create mode 100644 soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Analyzer/AstAnalyzer.php create mode 100644 soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Analyzer/ClosureAnalyzer.php create mode 100644 soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Analyzer/Token.php create mode 100644 soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Analyzer/TokenAnalyzer.php create mode 100644 soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Analyzer/Visitor/ClosureLocatorVisitor.php create mode 100644 soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Analyzer/Visitor/MagicConstantVisitor.php create mode 100644 soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Analyzer/Visitor/ThisDetectorVisitor.php create mode 100644 soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Exception/ClosureAnalysisException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Exception/ClosureSerializationException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Exception/ClosureUnserializationException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Exception/SuperClosureException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/SerializableClosure.php create mode 100644 soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Serializer.php create mode 100644 soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/SerializerInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/micheh/psr7-cache/LICENSE.md create mode 100644 soc/2020/daily_report/archive/app/vendor/micheh/psr7-cache/README.md create mode 100644 soc/2020/daily_report/archive/app/vendor/micheh/psr7-cache/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/micheh/psr7-cache/src/CacheUtil.php create mode 100644 soc/2020/daily_report/archive/app/vendor/micheh/psr7-cache/src/Header/CacheControl.php create mode 100644 soc/2020/daily_report/archive/app/vendor/micheh/psr7-cache/src/Header/RequestCacheControl.php create mode 100644 soc/2020/daily_report/archive/app/vendor/micheh/psr7-cache/src/Header/ResponseCacheControl.php create mode 100644 soc/2020/daily_report/archive/app/vendor/middlewares/cache/CHANGELOG.md create mode 100644 soc/2020/daily_report/archive/app/vendor/middlewares/cache/CONTRIBUTING.md create mode 100644 soc/2020/daily_report/archive/app/vendor/middlewares/cache/LICENSE create mode 100644 soc/2020/daily_report/archive/app/vendor/middlewares/cache/README.md create mode 100644 soc/2020/daily_report/archive/app/vendor/middlewares/cache/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/middlewares/cache/src/Cache.php create mode 100644 soc/2020/daily_report/archive/app/vendor/middlewares/cache/src/CachePrevention.php create mode 100644 soc/2020/daily_report/archive/app/vendor/middlewares/cache/src/Expires.php create mode 100644 soc/2020/daily_report/archive/app/vendor/middlewares/cache/src/expires_defaults.php create mode 100644 soc/2020/daily_report/archive/app/vendor/middlewares/utils/CHANGELOG.md create mode 100644 soc/2020/daily_report/archive/app/vendor/middlewares/utils/CONTRIBUTING.md create mode 100644 soc/2020/daily_report/archive/app/vendor/middlewares/utils/LICENSE create mode 100644 soc/2020/daily_report/archive/app/vendor/middlewares/utils/README.md create mode 100644 soc/2020/daily_report/archive/app/vendor/middlewares/utils/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/middlewares/utils/src/CallableHandler.php create mode 100644 soc/2020/daily_report/archive/app/vendor/middlewares/utils/src/Dispatcher.php create mode 100644 soc/2020/daily_report/archive/app/vendor/middlewares/utils/src/Factory.php create mode 100644 soc/2020/daily_report/archive/app/vendor/middlewares/utils/src/FactoryDiscovery.php create mode 100644 soc/2020/daily_report/archive/app/vendor/middlewares/utils/src/FactoryInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/middlewares/utils/src/HttpErrorException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/middlewares/utils/src/RequestHandler.php create mode 100644 soc/2020/daily_report/archive/app/vendor/middlewares/utils/src/RequestHandlerContainer.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/.hhconfig create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/.travis.yml create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/FastRoute.hhi create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/LICENSE create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/README.md create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/phpunit.xml create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/psalm.xml create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/BadRouteException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/DataGenerator.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/DataGenerator/CharCountBased.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/DataGenerator/GroupCountBased.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/DataGenerator/GroupPosBased.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/DataGenerator/MarkBased.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/DataGenerator/RegexBasedAbstract.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/Dispatcher.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/Dispatcher/CharCountBased.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/Dispatcher/GroupCountBased.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/Dispatcher/GroupPosBased.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/Dispatcher/MarkBased.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/Dispatcher/RegexBasedAbstract.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/Route.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/RouteCollector.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/RouteParser.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/RouteParser/Std.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/bootstrap.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/functions.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/Dispatcher/CharCountBasedTest.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/Dispatcher/DispatcherTest.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/Dispatcher/GroupCountBasedTest.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/Dispatcher/GroupPosBasedTest.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/Dispatcher/MarkBasedTest.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/HackTypechecker/HackTypecheckerTest.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/HackTypechecker/fixtures/all_options.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/HackTypechecker/fixtures/empty_options.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/HackTypechecker/fixtures/no_options.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/RouteCollectorTest.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/RouteParser/StdTest.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/bootstrap.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/LICENSE create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/README.md create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/bin/php-parse create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/grammar/README.md create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/grammar/parser.template create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/grammar/php5.y create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/grammar/php7.y create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/grammar/rebuildParsers.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/grammar/tokens.template create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/grammar/tokens.y create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Class_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Declaration.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Function_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Interface_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Method.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Property.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Trait_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Use_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/BuilderFactory.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Comment.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Comment/Doc.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluationException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluator.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Error.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Collecting.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Internal/DiffElem.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Internal/Differ.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Lexer.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulatorInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NameContext.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Arg.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Const_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Coalesce.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Concat.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Div.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Minus.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mod.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mul.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Plus.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Pow.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignRef.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseXor.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Coalesce.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Concat.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Div.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Equal.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Greater.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Minus.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mod.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mul.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Plus.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pow.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Bool_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Double.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Int_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Object_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/String_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Unset_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClassConstFetch.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Identifier.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Name.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/NullableType.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Param.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/EncapsedStringPart.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Dir.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/File.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Function_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Line.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Method.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Trait_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Throw_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeDumper.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeFinder.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Parser.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Parser/Multiple.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Parser/Php5.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Parser/Tokens.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/ParserFactory.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php create mode 100644 soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php create mode 100644 soc/2020/daily_report/archive/app/vendor/phlak/glob/LICENSE create mode 100644 soc/2020/daily_report/archive/app/vendor/phlak/glob/Makefile create mode 100644 soc/2020/daily_report/archive/app/vendor/phlak/glob/README.md create mode 100644 soc/2020/daily_report/archive/app/vendor/phlak/glob/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/phlak/glob/psalm-baseline.xml create mode 100644 soc/2020/daily_report/archive/app/vendor/phlak/glob/src/Glob.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/invoker/CONTRIBUTING.md create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/invoker/LICENSE create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/invoker/README.md create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/invoker/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/invoker/doc/parameter-resolvers.md create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/CallableResolver.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/Exception/InvocationException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/Exception/NotCallableException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/Exception/NotEnoughParametersException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/Invoker.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/InvokerInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/ParameterResolver/AssociativeArrayResolver.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/ParameterResolver/Container/ParameterNameContainerResolver.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/ParameterResolver/Container/TypeHintContainerResolver.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/ParameterResolver/DefaultValueResolver.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/ParameterResolver/NumericArrayResolver.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/ParameterResolver/ParameterResolver.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/ParameterResolver/ResolverChain.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/ParameterResolver/TypeHintResolver.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/Reflection/CallableReflection.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/.coveralls.yml create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/.php_cs create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/.phpstorm.meta.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/.styleci.yml create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/.travis.yml create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/404.md create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/CONTRIBUTING.md create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/LICENSE create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/README.md create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/SECURITY.md create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/change-log.md create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/couscous.yml create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/phpstan-baseline.neon create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/phpstan.neon create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/phpunit.xml.dist create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Annotation/Inject.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Annotation/Injectable.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/CompiledContainer.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Compiler/Compiler.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Compiler/ObjectCreationCompiler.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Compiler/RequestedEntryHolder.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Compiler/Template.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Container.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/ContainerBuilder.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/ArrayDefinition.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/ArrayDefinitionExtension.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/AutowireDefinition.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/DecoratorDefinition.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Definition.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Dumper/ObjectDefinitionDumper.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/EnvironmentVariableDefinition.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Exception/InvalidAnnotation.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Exception/InvalidDefinition.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/ExtendsPreviousDefinition.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/FactoryDefinition.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Helper/AutowireDefinitionHelper.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Helper/CreateDefinitionHelper.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Helper/DefinitionHelper.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Helper/FactoryDefinitionHelper.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/InstanceDefinition.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/ObjectDefinition.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/ObjectDefinition/MethodInjection.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/ObjectDefinition/PropertyInjection.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Reference.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/ArrayResolver.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/DecoratorResolver.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/DefinitionResolver.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/EnvironmentVariableResolver.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/FactoryResolver.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/InstanceInjector.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/ObjectCreator.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/ParameterResolver.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/ResolverDispatcher.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/SelfResolvingDefinition.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/AnnotationBasedAutowiring.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/Autowiring.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/DefinitionArray.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/DefinitionFile.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/DefinitionNormalizer.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/DefinitionSource.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/MutableDefinitionSource.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/NoAutowiring.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/ReflectionBasedAutowiring.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/SourceCache.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/SourceChain.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/StringDefinition.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/ValueDefinition.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/DependencyException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Factory/RequestedEntry.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/FactoryInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Invoker/DefinitionParameterResolver.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Invoker/FactoryParameterResolver.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/NotFoundException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Proxy/ProxyFactory.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/functions.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/php-di/support.md create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/phpdoc-reader/LICENSE create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/phpdoc-reader/README.md create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/phpdoc-reader/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/phpdoc-reader/src/PhpDocReader/AnnotationException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/phpdoc-reader/src/PhpDocReader/PhpDocReader.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/phpdoc-reader/src/PhpDocReader/PhpParser/TokenParser.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/phpdoc-reader/src/PhpDocReader/PhpParser/UseStatementParser.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/slim-bridge/CONTRIBUTING.md create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/slim-bridge/LICENSE create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/slim-bridge/README.md create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/slim-bridge/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/slim-bridge/src/Bridge.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/slim-bridge/src/CallableResolver.php create mode 100644 soc/2020/daily_report/archive/app/vendor/php-di/slim-bridge/src/ControllerInvoker.php create mode 100644 soc/2020/daily_report/archive/app/vendor/phpoption/phpoption/LICENSE create mode 100644 soc/2020/daily_report/archive/app/vendor/phpoption/phpoption/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/phpoption/phpoption/src/PhpOption/LazyOption.php create mode 100644 soc/2020/daily_report/archive/app/vendor/phpoption/phpoption/src/PhpOption/None.php create mode 100644 soc/2020/daily_report/archive/app/vendor/phpoption/phpoption/src/PhpOption/Option.php create mode 100644 soc/2020/daily_report/archive/app/vendor/phpoption/phpoption/src/PhpOption/Some.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/cache/CHANGELOG.md create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/cache/LICENSE.txt create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/cache/README.md create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/cache/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/cache/src/CacheException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/cache/src/CacheItemInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/cache/src/CacheItemPoolInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/cache/src/InvalidArgumentException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/container/LICENSE create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/container/README.md create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/container/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/container/src/ContainerExceptionInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/container/src/ContainerInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/container/src/NotFoundExceptionInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/http-factory/.pullapprove.yml create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/http-factory/LICENSE create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/http-factory/README.md create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/http-factory/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/http-factory/src/RequestFactoryInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/http-factory/src/ResponseFactoryInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/http-factory/src/ServerRequestFactoryInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/http-factory/src/StreamFactoryInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/http-factory/src/UploadedFileFactoryInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/http-factory/src/UriFactoryInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/http-message/CHANGELOG.md create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/http-message/LICENSE create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/http-message/README.md create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/http-message/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/http-message/src/MessageInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/http-message/src/RequestInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/http-message/src/ResponseInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/http-message/src/ServerRequestInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/http-message/src/StreamInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/http-message/src/UploadedFileInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/http-message/src/UriInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/http-server-handler/LICENSE create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/http-server-handler/README.md create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/http-server-handler/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/http-server-handler/src/RequestHandlerInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/http-server-middleware/LICENSE create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/http-server-middleware/README.md create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/http-server-middleware/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/http-server-middleware/src/MiddlewareInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/log/LICENSE create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/log/Psr/Log/AbstractLogger.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/log/Psr/Log/InvalidArgumentException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/log/Psr/Log/LogLevel.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/log/Psr/Log/LoggerAwareInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/log/Psr/Log/LoggerAwareTrait.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/log/Psr/Log/LoggerInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/log/Psr/Log/LoggerTrait.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/log/Psr/Log/NullLogger.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/log/Psr/Log/Test/DummyTest.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/log/Psr/Log/Test/TestLogger.php create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/log/README.md create mode 100644 soc/2020/daily_report/archive/app/vendor/psr/log/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/ralouphie/getallheaders/LICENSE create mode 100644 soc/2020/daily_report/archive/app/vendor/ralouphie/getallheaders/README.md create mode 100644 soc/2020/daily_report/archive/app/vendor/ralouphie/getallheaders/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/ralouphie/getallheaders/src/getallheaders.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/psr7/LICENSE.md create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/psr7/MAINTAINERS.md create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/psr7/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Cookies.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Environment.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Factory/RequestFactory.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Factory/ResponseFactory.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Factory/ServerRequestFactory.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Factory/StreamFactory.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Factory/UploadedFileFactory.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Factory/UriFactory.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Header.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Headers.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Interfaces/HeadersInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Message.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/psr7/src/NonBufferedBody.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Request.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Response.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Stream.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/psr7/src/UploadedFile.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Uri.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/CHANGELOG.md create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/LICENSE.md create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/MAINTAINERS.md create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/App.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/CallableResolver.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Error/AbstractErrorRenderer.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Error/Renderers/HtmlErrorRenderer.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Error/Renderers/JsonErrorRenderer.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Error/Renderers/PlainTextErrorRenderer.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Error/Renderers/XmlErrorRenderer.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Exception/HttpBadRequestException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Exception/HttpException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Exception/HttpForbiddenException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Exception/HttpInternalServerErrorException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Exception/HttpMethodNotAllowedException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Exception/HttpNotFoundException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Exception/HttpNotImplementedException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Exception/HttpSpecializedException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Exception/HttpUnauthorizedException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Factory/AppFactory.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Factory/Psr17/GuzzlePsr17Factory.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Factory/Psr17/LaminasDiactorosPsr17Factory.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Factory/Psr17/NyholmPsr17Factory.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Factory/Psr17/Psr17Factory.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Factory/Psr17/Psr17FactoryProvider.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Factory/Psr17/ServerRequestCreator.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Factory/Psr17/SlimHttpPsr17Factory.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Factory/Psr17/SlimHttpServerRequestCreator.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Factory/Psr17/SlimPsr17Factory.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Factory/Psr17/ZendDiactorosPsr17Factory.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Factory/ServerRequestCreatorFactory.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Handlers/ErrorHandler.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Handlers/Strategies/RequestHandler.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponse.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponseArgs.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Interfaces/AdvancedCallableResolverInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Interfaces/CallableResolverInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Interfaces/DispatcherInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Interfaces/ErrorHandlerInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Interfaces/ErrorRendererInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Interfaces/InvocationStrategyInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Interfaces/MiddlewareDispatcherInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Interfaces/Psr17FactoryInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Interfaces/Psr17FactoryProviderInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Interfaces/RequestHandlerInvocationStrategyInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Interfaces/RouteCollectorInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Interfaces/RouteCollectorProxyInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Interfaces/RouteGroupInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Interfaces/RouteInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Interfaces/RouteParserInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Interfaces/RouteResolverInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Interfaces/ServerRequestCreatorInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Logger.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Middleware/BodyParsingMiddleware.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Middleware/ContentLengthMiddleware.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Middleware/ErrorMiddleware.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Middleware/MethodOverrideMiddleware.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Middleware/OutputBufferingMiddleware.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Middleware/RoutingMiddleware.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/MiddlewareDispatcher.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/ResponseEmitter.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/Dispatcher.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/FastRouteDispatcher.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/Route.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/RouteCollector.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/RouteCollectorProxy.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/RouteContext.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/RouteGroup.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/RouteParser.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/RouteResolver.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/RouteRunner.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/RoutingResults.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/slim/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/twig-view/.coveralls.yml create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/twig-view/.editorconfig create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/twig-view/LICENSE.md create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/twig-view/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/twig-view/src/Twig.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/twig-view/src/TwigExtension.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/twig-view/src/TwigMiddleware.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/twig-view/src/TwigRuntimeExtension.php create mode 100644 soc/2020/daily_report/archive/app/vendor/slim/twig-view/src/TwigRuntimeLoader.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/finder/CHANGELOG.md create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/finder/Comparator/Comparator.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/finder/Comparator/DateComparator.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/finder/Comparator/NumberComparator.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/finder/Exception/AccessDeniedException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/finder/Exception/DirectoryNotFoundException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/finder/Finder.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/finder/Gitignore.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/finder/Glob.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/CustomFilterIterator.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/FilenameFilterIterator.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/PathFilterIterator.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/SortableIterator.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/finder/LICENSE create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/finder/README.md create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/finder/SplFileInfo.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/finder/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/polyfill-ctype/Ctype.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/polyfill-ctype/LICENSE create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/polyfill-ctype/README.md create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/polyfill-ctype/bootstrap.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/polyfill-ctype/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/polyfill-mbstring/LICENSE create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/polyfill-mbstring/Mbstring.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/polyfill-mbstring/README.md create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/polyfill-mbstring/bootstrap.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/polyfill-mbstring/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/polyfill-php56/LICENSE create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/polyfill-php56/Php56.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/polyfill-php56/README.md create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/polyfill-php56/bootstrap.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/polyfill-php56/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/Binary.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/BinaryNoFuncOverload.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/BinaryOnFuncOverload.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/LICENSE create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/README.md create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/TestListener.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/TestListenerForV5.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/TestListenerForV6.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/TestListenerForV7.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/TestListenerTrait.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation-contracts/LICENSE create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation-contracts/LocaleAwareInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation-contracts/README.md create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation-contracts/Test/TranslatorTest.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation-contracts/TranslatorInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation-contracts/TranslatorTrait.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation-contracts/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/CHANGELOG.md create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Catalogue/AbstractOperation.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Catalogue/MergeOperation.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Catalogue/OperationInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Catalogue/TargetOperation.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Command/XliffLintCommand.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/DataCollector/TranslationDataCollector.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/DataCollectorTranslator.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/DependencyInjection/TranslationDumperPass.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/DependencyInjection/TranslationExtractorPass.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/DependencyInjection/TranslatorPass.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/DependencyInjection/TranslatorPathsPass.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/CsvFileDumper.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/DumperInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/FileDumper.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/IcuResFileDumper.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/IniFileDumper.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/JsonFileDumper.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/MoFileDumper.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/PhpFileDumper.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/PoFileDumper.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/QtFileDumper.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/XliffFileDumper.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/YamlFileDumper.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Exception/ExceptionInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Exception/InvalidArgumentException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Exception/InvalidResourceException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Exception/LogicException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Exception/NotFoundResourceException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Exception/RuntimeException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Extractor/AbstractFileExtractor.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Extractor/ChainExtractor.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Extractor/ExtractorInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Extractor/PhpExtractor.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Extractor/PhpStringTokenParser.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Formatter/IntlFormatter.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Formatter/IntlFormatterInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Formatter/MessageFormatter.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Formatter/MessageFormatterInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/IdentityTranslator.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/LICENSE create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/ArrayLoader.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/CsvFileLoader.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/FileLoader.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/IcuDatFileLoader.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/IcuResFileLoader.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/IniFileLoader.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/JsonFileLoader.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/LoaderInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/MoFileLoader.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/PhpFileLoader.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/PoFileLoader.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/QtFileLoader.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/XliffFileLoader.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/YamlFileLoader.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/LoggingTranslator.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/MessageCatalogue.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/MessageCatalogueInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/MetadataAwareInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/README.md create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Reader/TranslationReader.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Reader/TranslationReaderInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Resources/bin/translation-status.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Resources/data/parents.json create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Resources/schemas/xliff-core-1.2-strict.xsd create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Resources/schemas/xliff-core-2.0.xsd create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Resources/schemas/xml.xsd create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Translator.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/TranslatorBagInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Util/ArrayConverter.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Util/XliffUtils.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Writer/TranslationWriter.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/Writer/TranslationWriterInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/translation/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/CHANGELOG.md create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/AmqpCaster.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ArgsStub.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/Caster.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ClassStub.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ConstStub.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/CutArrayStub.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/CutStub.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/DOMCaster.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/DateCaster.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/DoctrineCaster.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/DsCaster.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/DsPairStub.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/EnumStub.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ExceptionCaster.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/FrameStub.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/GmpCaster.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ImagineCaster.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ImgStub.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/IntlCaster.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/LinkStub.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/MemcachedCaster.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/PdoCaster.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/PgSqlCaster.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ProxyManagerCaster.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/RedisCaster.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ReflectionCaster.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ResourceCaster.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/SplCaster.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/StubCaster.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/SymfonyCaster.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/TraceStub.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/UuidCaster.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/XmlReaderCaster.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/XmlResourceCaster.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Cloner/AbstractCloner.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Cloner/ClonerInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Cloner/Cursor.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Cloner/Data.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Cloner/DumperInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Cloner/Stub.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Cloner/VarCloner.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Command/Descriptor/CliDescriptor.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Command/Descriptor/DumpDescriptorInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Command/Descriptor/HtmlDescriptor.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Command/ServerDumpCommand.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/AbstractDumper.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/CliDumper.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/ContextProvider/CliContextProvider.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/ContextProvider/ContextProviderInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/ContextProvider/RequestContextProvider.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/ContextProvider/SourceContextProvider.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/ContextualizedDumper.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/DataDumperInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/HtmlDumper.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/ServerDumper.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Exception/ThrowingCasterException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/LICENSE create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/README.md create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Resources/bin/var-dump-server create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Resources/css/htmlDescriptor.css create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Resources/functions/dump.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Resources/js/htmlDescriptor.js create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Server/Connection.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Server/DumpServer.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Test/VarDumperTestTrait.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/VarDumper.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/yaml/CHANGELOG.md create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/yaml/Command/LintCommand.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/yaml/Dumper.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/yaml/Escaper.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/yaml/Exception/DumpException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/yaml/Exception/ExceptionInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/yaml/Exception/ParseException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/yaml/Exception/RuntimeException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/yaml/Inline.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/yaml/LICENSE create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/yaml/Parser.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/yaml/README.md create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/yaml/Tag/TaggedValue.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/yaml/Unescaper.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/yaml/Yaml.php create mode 100644 soc/2020/daily_report/archive/app/vendor/symfony/yaml/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/tightenco/collect/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Contracts/Support/Arrayable.php create mode 100644 soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Contracts/Support/Htmlable.php create mode 100644 soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Contracts/Support/Jsonable.php create mode 100644 soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/Arr.php create mode 100644 soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/Collection.php create mode 100644 soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/Enumerable.php create mode 100644 soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/HigherOrderCollectionProxy.php create mode 100644 soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/HtmlString.php create mode 100644 soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/LazyCollection.php create mode 100644 soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/Traits/EnumeratesValues.php create mode 100644 soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/Traits/Macroable.php create mode 100644 soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/alias.php create mode 100644 soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/helpers.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/.editorconfig create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/.php_cs.dist create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/.travis.yml create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/CHANGELOG create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/LICENSE create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/README.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/advanced.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/api.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/coding_standards.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/deprecated.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/abs.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/batch.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/capitalize.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/column.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/convert_encoding.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/country_name.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/currency_name.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/currency_symbol.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/data_uri.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/date.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/date_modify.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/default.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/escape.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/filter.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/first.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/format.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/format_currency.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/format_date.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/format_datetime.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/format_number.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/format_time.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/html_to_markdown.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/index.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/inky_to_html.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/inline_css.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/join.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/json_encode.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/keys.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/language_name.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/last.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/length.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/locale_name.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/lower.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/map.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/markdown_to_html.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/merge.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/nl2br.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/number_format.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/raw.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/reduce.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/replace.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/reverse.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/round.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/slice.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/sort.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/spaceless.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/split.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/striptags.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/timezone_name.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/title.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/trim.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/u.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/upper.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/url_encode.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/functions/attribute.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/functions/block.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/functions/constant.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/functions/country_timezones.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/functions/cycle.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/functions/date.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/functions/dump.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/functions/html_classes.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/functions/include.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/functions/index.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/functions/max.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/functions/min.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/functions/parent.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/functions/random.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/functions/range.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/functions/source.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/functions/template_from_string.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/index.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/installation.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/internals.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/intro.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/recipes.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/templates.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/constant.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/defined.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/divisibleby.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/empty.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/even.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/index.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/iterable.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/null.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/odd.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/sameas.rst create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/drupal_test.sh create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Cache/CacheInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Cache/FilesystemCache.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Cache/NullCache.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Compiler.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Environment.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Error/Error.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Error/LoaderError.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Error/RuntimeError.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Error/SyntaxError.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/ExpressionParser.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/AbstractExtension.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/CoreExtension.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/DebugExtension.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/EscaperExtension.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/ExtensionInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/GlobalsInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/OptimizerExtension.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/ProfilerExtension.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/RuntimeExtensionInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/SandboxExtension.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/StagingExtension.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/StringLoaderExtension.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/ExtensionSet.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/FileExtensionEscapingStrategy.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Lexer.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Loader/ArrayLoader.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Loader/ChainLoader.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Loader/FilesystemLoader.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Loader/LoaderInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Markup.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/AutoEscapeNode.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/BlockNode.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/BlockReferenceNode.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/BodyNode.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/CheckSecurityNode.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/CheckToStringNode.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/DeprecatedNode.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/DoNode.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/EmbedNode.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/AbstractExpression.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/ArrayExpression.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/ArrowFunctionExpression.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/AssignNameExpression.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/AbstractBinary.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/AddBinary.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/AndBinary.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/BitwiseAndBinary.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/BitwiseOrBinary.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/BitwiseXorBinary.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/ConcatBinary.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/DivBinary.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/EndsWithBinary.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/EqualBinary.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/FloorDivBinary.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/GreaterBinary.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/GreaterEqualBinary.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/InBinary.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/LessBinary.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/LessEqualBinary.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/MatchesBinary.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/ModBinary.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/MulBinary.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/NotEqualBinary.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/NotInBinary.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/OrBinary.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/PowerBinary.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/RangeBinary.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/SpaceshipBinary.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/StartsWithBinary.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/SubBinary.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/BlockReferenceExpression.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/CallExpression.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/ConditionalExpression.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/ConstantExpression.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Filter/DefaultFilter.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/FilterExpression.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/FunctionExpression.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/GetAttrExpression.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/InlinePrint.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/MethodCallExpression.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/NameExpression.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/NullCoalesceExpression.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/ParentExpression.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/TempNameExpression.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Test/ConstantTest.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Test/DefinedTest.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Test/DivisiblebyTest.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Test/EvenTest.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Test/NullTest.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Test/OddTest.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Test/SameasTest.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/TestExpression.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Unary/AbstractUnary.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Unary/NegUnary.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Unary/NotUnary.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Unary/PosUnary.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/VariadicExpression.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/FlushNode.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/ForLoopNode.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/ForNode.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/IfNode.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/ImportNode.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/IncludeNode.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/MacroNode.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/ModuleNode.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Node.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/NodeCaptureInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/NodeOutputInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/PrintNode.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/SandboxNode.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/SetNode.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/TextNode.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/WithNode.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/NodeTraverser.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/NodeVisitor/AbstractNodeVisitor.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/NodeVisitor/EscaperNodeVisitor.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/NodeVisitor/MacroAutoImportNodeVisitor.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/NodeVisitor/NodeVisitorInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/NodeVisitor/OptimizerNodeVisitor.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/NodeVisitor/SafeAnalysisNodeVisitor.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/NodeVisitor/SandboxNodeVisitor.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Parser.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Profiler/Dumper/BaseDumper.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Profiler/Dumper/BlackfireDumper.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Profiler/Dumper/HtmlDumper.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Profiler/Dumper/TextDumper.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Profiler/Node/EnterProfileNode.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Profiler/Node/LeaveProfileNode.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Profiler/NodeVisitor/ProfilerNodeVisitor.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Profiler/Profile.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/RuntimeLoader/ContainerRuntimeLoader.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/RuntimeLoader/FactoryRuntimeLoader.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/RuntimeLoader/RuntimeLoaderInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Sandbox/SecurityError.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Sandbox/SecurityNotAllowedFilterError.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Sandbox/SecurityNotAllowedFunctionError.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Sandbox/SecurityNotAllowedMethodError.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Sandbox/SecurityNotAllowedPropertyError.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Sandbox/SecurityNotAllowedTagError.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Sandbox/SecurityPolicy.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Sandbox/SecurityPolicyInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Source.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Template.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/TemplateWrapper.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Test/IntegrationTestCase.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Test/NodeTestCase.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Token.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/AbstractTokenParser.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/ApplyTokenParser.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/AutoEscapeTokenParser.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/BlockTokenParser.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/DeprecatedTokenParser.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/DoTokenParser.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/EmbedTokenParser.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/ExtendsTokenParser.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/FlushTokenParser.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/ForTokenParser.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/FromTokenParser.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/IfTokenParser.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/ImportTokenParser.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/IncludeTokenParser.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/MacroTokenParser.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/SandboxTokenParser.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/SetTokenParser.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/TokenParserInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/UseTokenParser.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/WithTokenParser.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenStream.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/TwigFilter.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/TwigFunction.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/TwigTest.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Util/DeprecationCollector.php create mode 100644 soc/2020/daily_report/archive/app/vendor/twig/twig/src/Util/TemplateDirIterator.php create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/LICENSE create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/composer.json create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/phpstan.src.neon.dist create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Dotenv.php create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Exception/ExceptionInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Exception/InvalidFileException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Exception/InvalidPathException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Exception/ValidationException.php create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Loader/Lines.php create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Loader/Loader.php create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Loader/LoaderInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Loader/Parser.php create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Loader/Value.php create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Regex/Regex.php create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/AbstractRepository.php create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/Adapter/ApacheAdapter.php create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/Adapter/ArrayAdapter.php create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/Adapter/AvailabilityInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/Adapter/EnvConstAdapter.php create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/Adapter/PutenvAdapter.php create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReaderInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/Adapter/ServerConstAdapter.php create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/Adapter/WriterInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/AdapterRepository.php create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/RepositoryBuilder.php create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/RepositoryInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Result/Error.php create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Result/Result.php create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Result/Success.php create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Store/File/Paths.php create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Store/File/Reader.php create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Store/FileStore.php create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Store/StoreBuilder.php create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Store/StoreInterface.php create mode 100644 soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Validator.php create mode 100644 soc/2020/daily_report/archive/app/views/components/file.twig create mode 100644 soc/2020/daily_report/archive/app/views/components/footer.twig create mode 100644 soc/2020/daily_report/archive/app/views/components/google-analytics.twig create mode 100644 soc/2020/daily_report/archive/app/views/components/header.twig create mode 100644 soc/2020/daily_report/archive/app/views/components/readme.twig create mode 100644 soc/2020/daily_report/archive/app/views/components/scroll-to-top.twig create mode 100644 soc/2020/daily_report/archive/app/views/components/search.twig create mode 100644 soc/2020/daily_report/archive/app/views/error.twig create mode 100644 soc/2020/daily_report/archive/app/views/index.twig create mode 100644 soc/2020/daily_report/archive/app/views/layouts/app.twig create mode 100644 soc/2020/daily_report/archive/hours-rules.html create mode 100644 soc/2020/daily_report/archive/index.php create mode 100644 soc/2020/daily_report/archive/roadmap-as-of-june.txt create mode 100644 soc/2020/daily_report/archive/roadmap-as-of-may.txt create mode 100644 soc/2020/daily_report/archive/roadmap.txt create mode 100644 soc/2020/daily_report/index.php create mode 100644 soc/2020/ideas.php create mode 100644 soc/2020/index.html create mode 100644 soc/2020/landing/index.html create mode 100644 soc/2020/landing/pranjal.png create mode 100644 soc/2020/landing/rainydaysavings.png create mode 100644 soc/2020/landing/suraj.png create mode 100644 soc/2020/landing/susdiv.png create mode 100644 soc/2020/proposal_rating_guidelines.txt create mode 100644 soc/2020/tech_report/pleroma_fe/SusannaCertificate.pdf create mode 100644 soc/2020/tech_report/pleroma_fe/index.html create mode 100644 soc/2020/tech_report/pleroma_fe/technical_report.pdf create mode 100644 soc/2020/tech_report/v3_be/GSSoC 2020 Certificate of Completion for Hugo Sales.pdf create mode 100644 soc/2020/tech_report/v3_be/index.html create mode 100644 soc/2020/tech_report/v3_be/technical_report.pdf create mode 100644 soc/2020/tech_report/v3_fe/certificate.pdf create mode 100644 soc/2020/tech_report/v3_fe/certificate_diogo.sig create mode 100644 soc/2020/tech_report/v3_fe/certificate_rozzin.sig create mode 100644 soc/2020/tech_report/v3_fe/daily_reports_diogo.sig create mode 100644 soc/2020/tech_report/v3_fe/index.html create mode 100644 soc/2020/tech_report/v3_fe/technical_report.pdf create mode 100644 soc/2020/tech_report/v3_fe/technical_report_diogo.sig create mode 100644 soc/2020/tech_report/v3_fe/technical_report_rozzin.sig create mode 100644 soc/2020/tech_report/v3_fe/transcript.pdf create mode 100644 soc/2020/tech_report/v3_fe/transcript_diogo.sig create mode 100644 soc/2020/tech_report/v3_fe/transcript_rozzin.sig create mode 100644 soc/2020/tech_report/v3_fe/verification_letter.pdf create mode 100644 soc/2020/tech_report/v3_fe/verification_letter_diogo.sig create mode 100644 soc/2020/tech_report/v3_fe/verification_letter_rozzin.sig create mode 100644 soc/index.html diff --git a/index.html b/index.html new file mode 100644 index 0000000..46001c2 --- /dev/null +++ b/index.html @@ -0,0 +1,65 @@ + + + + + + GNU social + + +
+

GNU social

+ +
+

The project

+

True to the Unix-philosophy of small programs to do a small job, GNU + social is a social communication software used + in federated social networks. +

+

It is widely supported and has a large userbase. It is already used by + the Free Software Foundation. + As the GNU operating system, is built around privacy and trustworthy + technology based on free software(free as in freedom, specifically + to run, study, change and distribute yoursoftware as you please). + GNU social is technology for communities to runand host their own social media.

+

Currently, we’re working on adding features to easily and flexibly + create groups and improve tags, allowing easier content filtering and + connecting with anyone that shares your interests, all under your own + control and without infringing your privacy.

+ +

Features

+ + +

FAQ

+

Where can I join GNU social?

+

There are many kinds of GNU social server instances online right now!

+

Click here to see a list of popular GNU social sites you can join!

+ Disclaimer: Please note that the GNU social development team is not responsible for + the operation or content of sites that run its software. +

Who makes GNU social?

+

The current development team is lead by Diogo Cordeiro. A + list containing the current devs and other contributors is + available here. + The founders of the GNU social project were Matt Lee, + Evan Prodromou and + Mikael Nordfeldth. +

+ +

Contact

+

Discuss the project on our IRC channel #social on irc.freenode.net

+

Contribute code, report bugs and request features on our repository. +

+

If you are a student you can also apply to GNU social's Summer of Code. +

+ + diff --git a/soc/2018/images/testimonial1.png b/soc/2018/images/testimonial1.png new file mode 100644 index 0000000000000000000000000000000000000000..ade93936f1232855125fd595c071a9d8a1066c95 GIT binary patch literal 33334 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 P&_h~6LA*-T;QRjr@{kFf literal 0 HcmV?d00001 diff --git a/soc/2018/images/testimonial2.png b/soc/2018/images/testimonial2.png new file mode 100644 index 0000000000000000000000000000000000000000..cb3cb6db774b48644c38a318d5eae890d80c2423 GIT binary patch literal 63271 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

c-(KWr`3F?**!pIP@8U09BRaxZ= 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 + + + + ActivityPub plugin - Tech Report - GNU social Summer of Code 2018 + + + + + + + +

+
+

About the project and this document

+

What is this document?

+

This is a technical Google Summer of Code Project Report describing + briefly what I did from April 23 to August 6. +

+

The whole code I wrote during this period is available + here. + The API documentation is available + here. +

+

This document helps understanding what was done in a simple and informal way, + highlighting the most relevant parts, why some decisions were made and what + I've learned with it. +

+

The following document is intended to be reasonably self contained + and capable of quickstarting anyone in the world of ActivityPub implementation, + yet not replacing the official standard specification. +

+

From April 23 to May 14 I had to familiarize myself with the + Activity Pub standard and GNU social's plugins/events API and community. +

+

What is GNU social?

+

GNU social is a social communication software used in federated + social networks. +

+

ActivityPub?

+

In order to achieve said decentralization, a variety of standards on + how communication between different pieces of software in a federated + context should be done were created, such as OStatus. ActivityPub, however, + is the newest and covers parts left out of OStatus's specification, namely + app/client development. +

+

Benefits

+
    +
  • The tendency is that newer software will focus in the + implementation of the ActivityPub Protocol (as it is newer + and considered to be simpler) instead of OStatus, given + that, it is important for GNU social to support it in order to stay updated + and relevant in an even larger fediverse; +
  • +
  • It will simplify app/client development which is not covered by the + OStatus's specification and is becoming more and more relevant, + with the increase of smartphone users. +
  • +
+

Why a plugin?

+

Unix tools design philosophy

+

GNU social is true to the Unix-philosophy of small programs to do a + small job. +

+
+
    +
  • Compact and concise input syntax, making full use of ASCII repertoire to minimise keystrokes
  • +
  • Output format should be simple and easily usable as input for other programs
  • +
  • Programs can be joined together in “pipes†and “scripts†to solve more complex problems
  • +
  • Each tool originally performed a simple single function
  • +
  • Prefer reusing existing tools with minor extension to rewriting a new tool from scratch
  • +
  • The main user-interface software (“shellâ€) is a normal replaceable program without special privileges
  • +
  • Support for automating routine tasks
  • +
+
- Brian W. Kernighan, Rob Pike: The Unix Programming Environment. Prentice-Hall, 1984.
+
+

As so the project aims at building a plugin that will + implement the ActivityPub Protocol in GNU social. +

+
+
+

So how does ActivityPub work?

+

The ActivityPub protocol is a decentralized social networking + protocol based upon the ActivityStreams 2.0 data format. + It provides a client to server API for creating, updating and deleting + content, as well as a federated server to server API for delivering + notifications and content. +

+ +
+

Note: You are advised to read (at least) the standard + overview before continuing. +

+
+

Actor

+

Actor is the user doing a change in the fediverse and are identified by an URI. + In GNU social they have the following format: + https://myinstance.net/user/{id}. Thus allowing users to change their + usernames (or nicknames). +

+

Objects

+

Objects are our building blocks for the bigger concept of Activity. + The plugin has the following objects: +

+ +
+

Note: Tags, Attachment and Image are ("minor") + objects and, usually, wrapped by ("major") objects. +

+
+

Activities

+

Wrappers allow to give additional information on a given object. + The implemented wrappers are the following: +

+ +

By wrapping an object with one of those we are + able to perform an action in name of a given Actor. +

+
+
+

And how does the plugin work?

+

For the plugin I decided to create two key components.

+

The Explorer

+

Defined in this file it is responsable for grabbing remote users and creating an identity for those in the local instance. It is higly related with Activitypub_profile.php.

+

The Postman

+

This guy does the magic of publishing the activities + (thus the name ActivityPub!) to remote instances, he kinda is the + responsable for the federation provided by this plugin. Its code is here. +

+

Becoming familiar with GNU social's events

+

We just know what and when to deliver something thanks to GNU social's events.

+

Events the plugin is handling

+
+
Discovery Events
+
    +
  • Find remote profiles from mentions in texts (onEndFindMentions)
  • +
  • Allow to reference a remote profile (onStartCommandGetProfile)
  • +
  • Allow to reference a remote profile (onStartGetProfileUri)
  • +
+
Delivery Events
+
    +
  • Notify remote instance of subscription (onEndSubscribe)
  • +
  • Notify remote instance when a subscription is canceled (onEndUnsubscribe)
  • +
  • Notify remote instances when a notice is liked (onEndFavorNotice)
  • +
  • Notify remote instances when a notice like is reverted (onEndDisfavorNotice)
  • +
  • Notify remote instances when a notice is deleted (onEndDeleteOwnNotice)
  • +
  • Notify remote instances when a notice is created (onStartNoticeDistribute)
  • +
+
+

These are not the only events this plugin is listening to, but are + the most relevant. All these events hooks can be found here. +

+
+
+

Hold on, if you have a Postman then there sure is an inbox, right?

+

Two actually! :)

+

Fediverse is similar to the real world in some aspects. And one of those + is that people, sometimes, share the same "building". A list of some + public GNU social instances is available here. +

+

Well, if two people live in the same place then our Postman doesn't have to "travel" twice! Thus + the concept of shared inbox. +

+

Lets start with the inbox. An + inbox is where we, I mean, the Postman publishes + our Activity. +

+

By now you should have already realized that Activities are just + verbs wrapping objects thus basically forming a phrase: + Actor verb Object to Attention Actor(s). +

+

Well, for each Attention actor we deliver the same + Actor verb Object. +

+

Since it is the same message and frequently for people residing + in the same server we can obviously reduce a lot of traffic and + processing power here. +

+

The Explorer hands the Postman the sharedInbox address always that + it is possible. +

+
    +
  • +

    Inbox Handler code is here.

    +
  • +
+
+ +
+

What is left to do?

+

This plugin fulfills and even exceeds what I've originally proposed to + do during this summer (hooray!). But there is still room for further development + and improvement! +

+

Todo

+
    +
  • Finish implementing Client to Server
  • +
  • Implement a Circuit Breaker
  • +
  • Redis caching of collections
  • +
  • Queues
  • +
+
+
+

So, that was it?

+

Not really, this document doesn't describe the implementation of + + HTTP Signatures, the internal representation of ActivityPub Actors, + nor the details of Activity Streams or even the particularities of integrating + this in GNU social (I'm looking at you OStatus plugin). As stated in the + beginning of this document, the whole code and documentation is available + above, this was just meant to make the reading easier. +

+

I'm interested in implementing ActivityPub on my program and reading + this really helped me! Is there something else that I should know of that + wasn't mentioned in the article? +

+

Be sure to know HTTP Status Codes + and to start soon with the Test-driven development. +

+

And, obviously, follow rigorously the ActivityPub specification!

+

If you need help you can contact me + or Daniel Supernault directly or, even better, join the + W3C social IRC channel (#social@irc.w3.org), + you will definitely find us both there! :) +

+
+

Final Words

+

GSoC was a wonderful experience for me. I now feel more comfortable + with the GNU social’s codebase. I learned a lot of useful stuff like + ActivityPub, ActivityStreams, HTTP Signatures, PSR and Redis as well as + software engineering concepts like Circuit Breakers. I've also learned + more about Git and how libre and open source software development is + done and organized. +

+

I will try my best to regularly contribute to GNU social and other + projects. +

+

Thanks to Daniel Supernault and Mikael Nordfeldth for such a + wonderful experience and the knowledge. +

+
+
+

Testimonials

+
+

You're active, persistent and productive. Keep it up and we'll all have a great summer of code!

+
- Mikael Nordfeldth, GNU social Maintainer (2018) on my first GSoC evaluation
+
+ + + +
+
+ + diff --git a/soc/2019/accepted_proposals/load.pdf b/soc/2019/accepted_proposals/load.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9abf8ab4891ac7ec4ac989f54c837bde07f7e77d GIT binary patch literal 163778 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 literal 0 HcmV?d00001 diff --git a/soc/2019/accepted_proposals/network.pdf b/soc/2019/accepted_proposals/network.pdf new file mode 100644 index 0000000000000000000000000000000000000000..068bc879754b1ef6483841b8ca7f7da087a1263a GIT binary patch literal 223592 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�?od>rgOO&hSnUj z^$mxiF}0H?(*sVBq}H?Cl1$!goCUj9g8YB&E({f`1oW@?u*zNrA^OJvWiGc*v=rCc z64flD5eY5PZs}W1V+)Zyv=pgQBOMX+Gg`K+hl>!%NPl5Q_h7>%ZIlsiBEpn2vCO_A zT-ODpzZqVxsp*kXe>K>LFTQfR}>L6OhTn5DvZkRC&p zN#+!qRWG}{p7L3nsO{FM3%=U6`&ROF)h+=F0=jkU8oM5veiWkDLj!;9nutz+6T~0> z&NamK2Sysv53-1DlvU@m)YDJodi3aHquXNTGamM`!>Di~*W3 zkKq2LkOFzX)U#I8v?bleJ4ZPNY$H-$!m6fOGQFP zQLTz;0w}r5m^tU+OnPmZqyna;4+9rahq8=D)EsT;;ECB4@qgiYV=d}0Pn-g7sVNf` zRy&%#6Q!RceH_^q{=s`QcPg41Tw_9Ddy*I5Ev5!?G{rpUG174$PPqL3^f2!c-=Ucl znm3{==c;lR&P@;6%m5fsM)tH9LgvhV@xW9{K~|jItCNYc+2Vg62}%Idk>c>%`PI7u z_(^5JFw->tlfIMC^2cNHf`X(|G57Z&hnF)mNFX@8kTle!eU$Xps+I)Dci2zv%guOl zHueYurhXldBXAv;BFyr+21J|7&nz6|vB6#n#AO|0$M*VwZI?}rhmaLa@GUnjJm#R4 z316+n80t@cLidQ*dK|Z(%4S%+6kqIsXwguE=3hm;iAa4>bf1tlq`e^n9mQ&Lj&28J zRs^YemZzC3hgTPJZQ@`lL26sYG8O3MO@T{rHM>0vHUdJw(|I4r%K z_?t<*bbGP+Cs46?Xbx(+6XkYX)bPuaBMd$tSq~heL~WqvV$mi2ehMzf!|o)iB*gu_ z68r;e#E|jNacXn3=*#3gO{Mw^^|aXGLsZ1HbDM@2cbv^)`l>%;31SW_%cK9 z<^`y`NvP5+gm~F28m=iNaG#qdEb4JXJD0mvRye^&o@gqmtprBW!!9}0U=S6Pp_qz( z2O*>DUXa>}-SQ`0^G*mS@#qc^^pR43@1nn@X#IOl+sHOVG zEVO_b?v!3=f$^n3p$0w8PrT^#{-wdtls{U|u?)kxSmwhv6{$_pQZKw#9U8|lP;AH>v22jP+$iLyeMD+84lSzAQM@vU4Qwt&C=m%B(n}^vZ{^MTd83!gNkL+V9_kKO z=M!y$O;O7_97jau|px~n$!m)wG@a<#ZYUK4isp1?kX7$w~Y(DA$rJ* zD6^9fyaF_p~Wk7BVkNJWWP1PipCcjeVyP2 zL#OLHfMA>Rn6Wp97cRzJq07eeKY`Zld!ttF(DVXC(iDyt(u5)1iMVpimWH?kC3mhB zB*xa18nR&hh)Dj5KR36IPxp=D#X$^bzOhQctb(OI7MNIRMhLTX|+6e?lRQjqG zt^Acaw#Ycs8Ms2zN-)=%@C{!Y<_rctq8K>SH=L@8J@MMJP(vw>cxF|ft>=PX4La*dITt>ku-*V#myOtuQ{fmM;3GG^p?jX#H%*IBnz#=~ zi=tePAnxzxuFAH_9vINoe7lVZU@!o+hJLX=27sPm6OB01pTM9_LK=~X0=rO4HTShg z`}PCI@H-e?Nd|EyiYQLcUXbeFaMdQWS#WB8)M9p+5}SaOz|o-7QP}zX8V(J_nv9>1 zya5H0vf&&p;O6#nfinD;e2JU~K@t^Hj|8G3-sf!}ayhzoJ@Hp4 zX>k4Ti=%0*&W0gWX$zw`5LAqrb|l~9YN3 z0<@YDJP*vo^Y`OOJmheM<*%tj8k9}aA0yBbVDJ%BM9?E65dEEwoS}H>Hy+@xjzl}) zUy$e{DBWJUs(L@KRuSe-q2u725=5h?F|bIa`n!|;lqtYSwwV@%>@^LdQ6Pv^Q_kg^ zA=;1pvxQlR8tKYm99{^QowuF$Uq?7}d$tgYsqC4c5&C#D02PGd|UG{dEG zvciKc!Xoo6)IB_l#i*h%Iw|BA%p*m7TUs}7Dd9)j1v~O7jcKQSR_Jo$s@4*2HH!QLc4W-0dNP@)+ zOs=L`e`Gxjm~y0ItfoJId>M@+^d0O7cl=Yi(p2B|tDLt=;?;%CP<5W6nx`rSfQ!QX zkJ~#FRNowl4=}Yy0kNP0kGqIlehL=)N3)||B*G}*=(o~sGq~_+o@<^(4Vg8?;CK_G z4nGT+5*iaYiO3^)1+rDju=I&}!W-<~0&^g4aH;31#B=UHvcvM zx(-WR7oS$*DY!`)(zB+N?YcGj7{ zX1okb&I;+=(#PkpJLv#@IhwK9<;!B+pn(-Y0Q6dw9!{^O@VQ*CKmx(~*3fr1>zRi3)LnR7WgTdSZL0N&W;@wF&^dGfo?Vq+cNX0>#Bgc>wV-N;E$escviNnu6`&{Y0Mra_@{fX<&6y|GM~tQ45`5 z30(ZYK-f*Jgn?Z1cfRh}?2 za+JMf2sKz17k8Ev7Lk=r4=W#u@foxe9YV`#K~_1*?9YUS^W}s;lrfF})ZX`e;eie# zJsDn4Nc`hu_yb;@#Oz0-8$Z{SoJ>+~`t!6OSL@o|%`Ve3$zTK+3f3c;lcYbdx8O6o%_5^0wuy?n%+>E=qtl-5sGR zDE+ZZTH7~gOcAlkEV8Erjz6f1AqJG#ZE7#@!}bBdGR|}J{~U^K@t;Z9HSxJMZ9T#r z=S|^Zra@_HR9?;O1f#bjc>~c`l1Dp`FQ*i? zUi}sYIfG-&(?+9}lEW7J7h=EM{4>3oH2YFwxI+7|QrSU$Q$B^Yt5d%&&jz`*Oed-7 zGoGgr8*o4uaJ__!Fr^1Ab$(&uWB4xF=40vWpS_NuzF!YNS5zs(;lp#7Jaq8C_qrq9L4&8RS>%`W>cKFEo~ zw;u5Xwc@YK7{o&Z!Mf0X_$rpYTO5RwL6+ek*dcOwq= z4xi{R{E-B^wlGC*XvrcdotHNF1x<-(`C3$~{i9{dD0&b}l_YCi-}V$43ZD51AlCwL z4(wNyg6m=`SIL@z1ivAo3_OI>kY0G)EkILPUmiLVyn0d}S}`|_@E5U3vV#Zvp{_u) z3T4i>lLev@4TdG^Jo7aUMyXZ4dAO2N(F`tHYEGeN1W7x;l-;Lzy=yD8@%-j+cv{zC zJWx{V7<(NOob(Po{;Lh)Z92vldt)g=^ql*5Sm=ED~kg2k&<{*#DPF{RD>D( zAZP5I&S#1eUOu+r*d>)166tK2v$gjMto5sidNh;(#rZF5uk=#6t^iJ+bECIQ3h3b` z%Mgo3e)XhBPD%T}GB$4cQs7L{WO!Q<3rcG?$C^M(Ym9f5m|%{i(pjWVn`Yqy}>ORqXM)XX%rc64~~ruSN=h?g2&8X(i6ks z_jGX)fP-F}&R&v2!WUywpI0!-f!AygONkBVM5Le=TEaOe@y#O6MXT%LRZP!qtJbaQ zb4-H6adgbhfJyCaHAd@e+d+izr4#mlE9PeR@u&Sgkh9N$&bLD>!~q5=g57}T$4JqE zh`uh}&QQec382feONQsek2!|Pf@De+biyvopz(%rX4t}ulkLZ>n& zNW@RYly?|IY6J-vyf3OyQFuq2Z$0`^>U%q?IJe33$t-A<0x*%~w}Gi-9KA ze2`$$PuTDLHD%|bl&fnb{RG_3bn95UN~?*2x>Mkl(Mgq2ie33H*``J44z`?Hs7{@` zY>hmPm{CHB?xY~guhCq0qSw}Uyu~5{$2=7Dfae3FF&`nuUV(XIf1K+}oa%z$z1Zp> z^hanyg}HPAyF>;ToOFVza#E_$wpNu51hl`_l}xc1xV;^iGIKSSkg~Og{2OyeO}X3d`EUP--GDj|GL?PEu9YWfH5BmPdSdIQH~a z-ZeQpAsGb!A3j#;%FRjDWz>0+m zTWa(`{pt7yVmq_XQqgi18>GQVHRpud(kOslL?9RvXG)-)!ruy~LwPZC+K92#Ck+DMyh%Ow zS_Bz@L>c^-|BY5?&Ak=3Isv&eMdYqLTkZ~5q)_HZ)nvjb5AGWGhr>HlhO}QQufYhF zQ0kB5&LXJehYb@4743K&&*2>C4_tV4;J~ufl=zK&q{{7akGxUBxvQ>hL#QL82TQU6 zIEBU<>H+oDtbX=z3w;_?TKs(6&xH>f-?TS0Ot&A3u9)i4$_}~6#Rz8nA{p9Rj%AqMzTKf(%x)QXq zjEU;+_;T|g#G};E%sWrvE2`N&OxwK>z9qBsc9nB>;ZkY39${mLz)5atK6pav&iy01 z280lVqQ9~qu z`1C}W(y|j|0W-16RcXFdAVos~SoU01&+iDzg~8xVP&ehN?IVjvFUFNLrk=mxPW0g? z%rL^V4rI&gubA`3Loy-6S^V1i;vo&)V&y`YJgJ<7DUF_NAS}o|9iRfF4?wU6LtSq+UA2*AgY{3DK%5c^UWsMzIYE?t6bGbNPBXd zs;6cQ^oKP4Z?YM&D83-1RnqY27lSdCWi@Cg{X!kOGvq&F?s2^&Pp8f$wPT92v0eEc zNaRn!JkPE2^h=$cvXbu;#a|U8(E5FC^L=VRrL1~H|Uuc0y(zaonZbem9E;|Ha0brmk}wQI3z7( zTTU$0)A0aiX_<1LWdFe(y)ZHagdkZKJiFL?&Y|bCxm7ftT%hb7)zw`3AIryZ$34#W zjPG|XyGIbJXl!DA2iwvQ&bnF?W0O+yeWverR6A0~D0^5~soXb`O_%@XFHB>52+5$~ zz@k-Oz`<|Tu3DM<7FI!lB>u1<9n-k!Yh98K< z9gQo2uY2q+NyjBX5Npqju2bEC6he?Tnq@j5SD5+D3ZXl}npzpJgL*;!gw3COKYb`> zvHd{Lou_J9DAFg}H!u?>2{dAkHRCyVB#a!%>>+!+F!`> zMvsWMZWKm)>=!S1u_HEhC|;>0+tR>lFQIQPFC{Mgh`*Z{ZTrC-c8ms>_|C#Ul|#UK ziH{YdgwT6cI)TiL8Zld(Z98mF)#7u4?=zoi{JSd$M+%QS*`4+nm?Qao8cycyb4-No zZ5%yGTo@IhBzY_lIqMDJbXx=5emj`*3yA4qc{aiAt0YLjlfL{5U^cHy1e%rqiEGS` zR+sZo02Feo5KkZcWn$;qwvs#{3!7k6rpmmP4uOeNqsbjSb;5t`D(BXBLdEVt-b}Ef z(7ccL?T^!s+(bw(Cx57fVU!JSU3~`AmjuR^FfkT4MVd2CO#Fs_%|gA@vuxJcb+)E3 zlNr2*mN2vRkRS4^WWsRlUc{jy@0B%!U7cU38GrQrkDj4qr87&c;+ZvSUvY={f5f@~ ziEWQ?d>Hw{<@0WyQY#j4F)R?9q9IN2P9fmq7LN|@gM4VgdSiLz2P|j@38|NLe4fA@ z3~q2o(5Jy%6v20JmVuCXfxii>lz)M-V_r!OYl$JQDYRfX$uzHu;XFz=h_l@vi zeo>@WSoM>~UWd6m+1!atFmGU#qg;E(ixyDz)f$j08fOsd$+XM1%gJ&&ZPs2kBbKAg!q;^k`FaH&8!=taUN1AT~K`li~12Pq?%G@;Wcl z=yq@N%h(;$9(6JBAxwNK)YP6Y6!6o6gUZDolpZFDYXG=3=R?x^wx6UDEJt1W>5t zK-jTxvF^q$3NrB4x}}j?etcJoOp)r})@|`KLL0EQ5o#6_h~xNbIJ2>}#O6Ge+ASAV z7jyVOpP0Kp4xA)fl}yIW@T~C8+M)TeHH#DImctE@{jCR{807obO;Z0psvlh{?@rGL7StAgwdaPlBs|*eXXt6!>D&|bRM8UQXLIh zAQO~EgP^Ep$dB&{S zsf=7_#eiB<0v1L2M(tE1VC_dp^+U?#nq#rkGhP!NiXVT>Or_LhtFa&spUneVy9<{X zdL`!z;-US!5+X=3UHsJHP?G%O2|dh?T%CJyu0Wf6d`%}PIo$l!a@}l)3-(vENm{yFcl3I z{~}XHHS&K7NixspiiIC0d^3g}Tbbxk8wG~Tcx2dhK?LMB?h_D8`2qBbHG6k(A&&q4 zZ&A1p1~4tCvAM);tE?+!%T?(Vv@Ec39nqeUXa?@8 zQ1zP-hO5cIIJ#?42<-_Oxm#VU>QjI;{L6M5pea4Mp<5-%o5=SKKjI|fN4ltM z%XdPaW>Fm-s~Bqt^rJbEp}Z!S_S#9?=MU@p36Ds%C{og_OS~71aAPs2FG%NYshbG3 zvn0kbOP7+S3KYF35K2>z%cyP>zY85-4XA6;OVgVlTT9^ocoKf7BMudYfpoBd$#0k6 z*WptJu>(y7=BOeYi9!FbAPF53%FWT}`s^MNk*rzWK_^gB7VgnFyo6s{MT36O7jpCZ_mqB2|cl+{p%i&NcRr{@L$EK03 zFICnKXcF&h(Y`ixYhlxO6DU*7Ae;`XXI7JezL(vt@Ef4nf7G$H_sK|Rz7sH-31gSx zw{$Vkg^&aHd!JWY5#3Wd`W#esbcwF#orP?kVKyl|mA-)V~bo6y#mOCd&rerf>{UycN zUiq9gO@BXO;S>X%7=1L4*-eD;VNuoB#sr=)ql-6h0x40yAUQg_V^Jxqkeiujc5oi= zHjgG=P?Ya=#Qcby1E900G z9JzP6-fC)5iX}G|SXzIG;;bd6DKU56siym`c&{+ge%tw!c)otjnZ=U0C2>S2@Eqa} zNcOAk(=^1FDz3xG>~~VmT*hE|wnWm76D; zJ_ddHe%yd3p;32d9J~27NII-RUSr2tt9-!Mr-%`cvA8?BG*dKrnUMDMj9(4z=1zZ(mH)UoYhsdTb8PTY3RJZI@}oqQae)56SSr;1-a{w0dTtJ9BX2 z4qVK$+TFS){+Xiz{{#djCYXUind*Gna89OXJAvZ};u$@Evh{5D7o%1+cR}5&9_+AX z4>a%8K_({j+&`5B^TlJK3z5?fLvw(2-hTvmX?=SgqcFw`V8rp{5po>gr-t(fCuK5#b_*p7CQHRX`l{vH)-02kGR zM5~DOo6WWa+7(z&dH|uHKUv(5(E}mlDH74A${58ru>i@r zf!*bd5-e!TxmIfdV0E27lVt8GXzfxK-Ibd$tNG&IjCFn`>Y65>YW8IM=MVTqBk>=t zB2{*aE}0PP(q59!Ej36mrTuMQ{ya@+EQUr3o3Vm-6jk0Rz0Dkr371E&F6uOV!-;Wz z+fJI)V?Om+je2BzP$w1r=9LXXEenBF6)=y)WpC04tN(mqerE_H#!mv9x>Z%^g0i8@ z9s2*+I;Un~7+py(>s_{O+qP}nwr$(CZQHhO+c>*wF6a9Tx#)CKNk5!K=UYW%^eU%; zn#F2Z6_qTN}Xc zb9B_(^554|I!24Qj#d|nj%2%e9|mG?@+8&=d&UA=bNGSZF<-W1gI^gPeng0^BHArt zZ4USM$Dy(~XW}Uf%_t1o)34VvC^Ov9+?)+h$j}CnMq7)mS^Eo!QhTw#e6N3+$=ug& z!qWjENYozIgRe>ui@AVfNt~%L5Ge`~Q`px~zUx&5i~wKak8Z`J7P$3u31{lJyq zb3VmGW_RFuMYe&a|H^s^>8=$ThLmF~6+rO7A{aNf)K%rV}UcOjUn_k=i6po8=67pjoD4(YcrIVNxaL z`L(oD48@3^o0i;gII5zuddi2b(wJ5}@6k{L&n@iDG79Y2RHnC$3xZCNi-|f%-Q?-+gB%!K1 z!YE%vtK2QPjj}YWbO5y1!hcXaJjwPVsL*RV5{A{sNHP6W-gS3wW1md1FCyYnrDQ6NzZ;@)`!8BQ3ZdT+kiwy1^TGcwfweEk^@{uA{aIqd9X z30`n(b%7V#X4nfxy8z_v6HiHW5Hle_H(aI&Qnj4cqm6nt1c9VKT~aAQzswC%tUS0K z70W}_l%9j5aL7nZioj2N-@yoG+_P$(`%IKXz(pAEbv-|E{2++*99$G;A z%0!@ee+0vRSpP704E;C!#a=senLvX26d0N8zlxR`FRAWm(e=*7ejpL3H}?}!J2Cmw z;?qAo_Wj8DAM_!7vOTLKv@H30x4rot48Sk7_zd)U-!ii|um%)U66jrVn>7;UW+nQj z+sE4Y&Nf`Z;J&F&JJ9z)B#ladHzcIV-Rm-mq+;j4i!w0xII2zFi!?x@Prq?4G=*b; zVu2DB4ZBtPzP#d8zZ#g}n6tNS*7X+kQ7(Q|j!N+_X5UCHTo_QP8My@eN^cU4_ku}* z9ZU(%@TT*g1|7zcCI#U3diIVrO&&+pg$VHi{~Vgm6gFOt#j3m85cn;2a*o<)_e>*> zwPp zmNJ1x#W&-=ZuG%iD1>DB)~!wj15&E-dO*_Tp*vC$x-2*9wXqsYw%<%-3iZ(njNg1Z z9sEUoUCDiA(B6rTa15%lefmUF$bAmbCg1RzPm)I&Ph@gK_}C$>BAzI}4bT-vBSS{~-&X<2xgAp^Q zD%U#dHsU;`8Fd8T@J0HJ3tSgjhdlB0vjR)m__Lx@`bUK)L<64qxCC1vtUBxMD#tyg zMN;Tuc4ZBBd;Bg`ACl?uwEBU@yX!;5cyLh{PV&u_1l58KoLuatlHW=%YPOqK3iu!> z+wHd%I8RHPf%G|kQ6w{8L)WwxM>WGo4A>zPys^TktJ-5F_OAzZ6C(3=(U&GE(`kpM zy~Q~q{QSaUHl+jI$`9bQaEROM{QX;jdzV5sS7OQ4>qL{0Xwb{tSB;m0Vm&#U#1>!X zSAz1i!G2j8Ib8pRV9iLm)Gzthe9{o6G=*!6{sYkmu#eL!;gS-0I(@eF37ujB+PbOV zUS6~Z2Tj-Yxo%uNO>khU#u1}4?Az*($RX!@6~&H$pkW&OIt2}oRdzHU91NAxA($f` zDCmdGzd{*vE_*GykJ8)9tYB+=lYjM`$!XO3uc^XmTBvTYSBZ8Wap+2&)VlZT#jIUq zp&Pt8(WH5?`z27hZ6wVP(g^nDg`3jd>)m!OIB^L3_`C)Z$;g*ji%lD#E7gdbfvUEZ zBYp@Ew{6ou>*5vhT7LO$q-Ml|lU#09^Mq?W?b@qU*i`kg(vobh%cc!F{E$RqkRSA& zoe-->R*SYfZ{NEFioY>$z%w7F#kBD{c~^sZmiBSyvv{_=>BbmS{Kgg2H&a|`uG>*4 zoT4G4(gZjjp+;JdFx@u)8$GTFx;`9oOWHK0DWX+aGh;U`3MSyVvw}7X5fc~B8EEc- zcG|YQCn-WgD3XT-eldzO+ag5x7lA>lEbQ94eh*Sj-9gDnGoDf7`bUV2P&_~2J zRIl+Eb@*kLS9APa+%fA zWj7+0@YVwMn_j($Gi;tei#bs~Yz7kdz)ea6g*QlD1hM~MCdP}30%Kp_)3W2+hBS(P zkMx@zCngLBCRNoARsw#(ff%H9oir!n2>8i!lCT4Ccb_Z70hdc4**^XQVO;QIxS!+w zQVXf5LPb{2J^PpY-cWD;?Va6ceNwnYxc3mAou-}<2V!F5SDEsk)Q3gROZE)#j5~&N z90WDS>0z3P0JN$`X6%hFHgwM&4aJYvV#Z!WDR7|?b=+=2{g$jbw%dn<6cpL!CTO6u z`|t-|-2Q8nj-U(H8jUXTi+`SaAD&8!xI8apHB#+c(W&fOi|)D*d@nITn6^p~@~J$J z%;0xft+YEP<*N(kAgd8jSraGbdEv~`iYGJ$ky1cpR%Y5X57 z|25>D(A;sqw*MG!7)30b>~_WVtNL+!TFgPbx0VmT3k$Y%PWD(ol*O9;=p<~5_$RJd z3V>@uMeH($BJ;-Tl}z_*?gfX*@^nn-hH6r0W6^xJrS(cWbGcI2Mo5#G%DqJ!qp=C` zoLc%X-Le4T3Bt)2-F9@(YiT^VEb;Zm^MhhmG2*@t8FTOO`o1LmbZ&-2)+Ve`FLxq@{1-0jk+f} z>COlPDYF&iw?zOR(ldFis!;3&))<9nu*Hj6QVb&r>nuWFU=^|r1^9i@HoyQJxWCf{ zTz6_fs|rB-eaN?`x|$u)494s`@2YK8`5fvxz9;8jVin>+oUDhv5~^MO7NefS0j4t$ zDmKg(MaHA;O%CIblK~&Cd$j5m?C(2fMS;$kKP3WA>M4g=cIhU8vc}!89|UE=vyhDDXlWWqi7{n)d2C8FYd|3O* zsl?WX=rU%xFQ@;SQjk7_A|MKVd(|R^3<#c7*Ri|*M`eIWL7+-sC&peX%M9$G{9f@D z9iS90#5*mGeR6blL-QgY5}r^|eYB+8kPFu7vr2PRv*P+?!>myoD?a*+1{dBkRQuq_S5I>WRDWq ztW=;J5IbKrR>>3qw~vG)cawY`MSLbemMO`MQf_?4-gz2cxd%cD+^TN;(JUvOxit7A z5WZ@BP@I?T;dfb}=5wfaT<1d-jHpO0Nh~R_OH5O;TBka$BY3{U0S+H(4EC!38P|aS z;*GM5`{^$vfa$F$BqsEs1q8_Jpc09qkIh)p<-DI&H%fWX&vU;d?l(ZX8kKcR_$fKa zrX)RWU6Cz+ z>bwmxV<4R&G_cBes1IQ15e9zP@x#&G#v>tHmn^ z(7c0x)9!;d1zkRQ@F(-nNvExgy<_q}vRjEQC%9=bg{O$Y_+Tep6b15Eo z53S=c48b)3G4t-T7cx$dTOpF?#^J7Xel>39PPy-s7Y8OY<`XW=8fC$%lOE9x z)hj0?)@GDRmZZ6@E;>yT6wQzYsxtGx3$EB8a9)gKzzELLjpH_T${FWs(O%vFgWV5_ zQ9NF?cQGQTSghnBpcMRp_qDK(B+%o7*FFu5UvinJD~9g(!!_|c`hgm8nZ~`EBENm| z;O9f@nE{dmMDL?M;TAJej>Dwz^e#zIWvw(h5$eXx*UWXv@%=Yw(W3>KXffuuw!z(3 zQgW@p0--V+by79yc1+o_L~~}`X=2<**$>l^5(a9zk-5E4K(L_KVASJ0hj~>ld>mF; z3IjL=6XBF*EjHiHIb;3J?T;cMH=<@CA5b<3^hz7|Ys>+(7csS$-UyU;L9>+qbL>;I^(yHxE^E`Yy{UAIqv7oJjF|!3w_e3K| zq8WYM)HA{@tYgM>PlIn*^m90&*2E#jbmSpsHFJ0iPn+wB*N9m%+@Xk{c;d?b_SSr& zaJ#w5hamzjRyN^$1Y%5463>j}W{khblFVOv+MfxBeKC0XgK68|2l&bM#7IR_M_)3I z4g9x#?|G}Rpg1KWjn%J#5JUsGam9LHl;uXz;yxU~d1)De-!GH8fDs(Qy!qnvq~Gi< zs5tl#840gokm#WlDd8n`MKAmfUr6d$P+@WLp!|Ef<|cRSKV2LY`68q>?L$g70^pxW zn!8puWWt$wMpzWIj;QXpJXH}Oh{;APMB&ns&q&5GI4Zb} zk5+6B({dm|6ghG|-3p8Q0)Fqfn<|S=-dp;#l?I|wl5}rOb%v=f2dZTuUI{9_Jr0P| z-jzre@`=ER#cRf9(?#qof4YYN5cNYB%L~h&xcvctW87#e{h0JZr>YMVVs<^?;530Y zKk4ochL4&KS{Q?je~_bP5<{j|jX$!$QUk~kkiFa16;mNB!mdwBGG1v)o2KY%C~3g} zVFXT5+R-=LTE2Tgo#$=*CYB(QVEk@5@-unL9+Ca1zn#TBmPuT_ z)lY!5YbGWUw)QqTg@ebHJ8#V<%Y|5==??HYS}`VlW-}<52&~&KhydaTtbT>S)tf&Z zs-~!>|I;~8y~Co`b+nMSgjg5ePcja7Q6Kb!s7R*ilRN>qu87f$i(;4|;MAsNGfx}J z8z+A5_;5Lux+G)vMy&3zrXPm4FQxVVtC6#7zrG*jqAZ9VYL074}{b(QFtO+y#gKap%N1+a_LzUFth=p_$MUHN?_olZw zwn(ybAx{AAVz+dtjef&g6;cohk6~eKTbG3A#B{4fV29 z0cKhPX2z z;mxucS8qpKug7o!!Qknk(=VRZGAMQ0X_1MLkKx;tZpMiT-M;&?!Px{v-;hP(9453f;;;qfJRR916 zW~`hK!867eCTasiZoHOMbz1fQp@V$*tvlf<>S6U~?QzDxo!gNO99bkc=g*XASW>~x zZ~|%gfGGOUEj-5RJ*a$Wf>z}Q8{5EsJ9f^=*o6!IOtemVecGO`0G*B$)hymzyOd#^ zTN8E$+0J{T$k7*$L1fmlMHQz%!uP4M+$Hvi(h-X61(7^%>qVB~tWQ+C$_1mzxnX-2oP}ZI?G}FN%NPADva1 zBxN}p#DUJV$M&hKwLq1crR;=CQ&go_(_e#DEZv#2^X0@K z;ut0GUEnaN#j<}rP|KLxDKK6eu&Qc9IH}|+YE6u@hbd_ir||QnZybJ%lY=YbK3m&l z+m%ipIY|&>%(7Fg^%X{$Le+M8o~x}V>JJwq+tTUbH8A4lWfc3yTNU>raYx$u=n1

z!$4p$USTV4OPbw1&f4C1oFUHV^9C9khJjMORK zz~T3@lgQ+sA5mMRy6XdJ!jG*pAi<@hED9x`WTab{0pL%mK5+FgbovdsQ4Jgm-ne{N zM+2nzuK=!%ymxbrKkFl-~m_XlGDScVgrF?EFD zEdR-YuX${o%3+niE%?aW%oy>#Yqm3K9XXQx?nrt@3us;lW9uIyPEsD3+xdJ-yknI% z5_~p)4~qWvZWzLTD7z%8gqeZh9tZMKi>!Ty>tp2@E1cgoWptl+36>OMclF)cJjNvY;*&B?%q!!r!P>?d@#T@mi?2O#oK zF?#AOOSUFU;Dh+I-FfsZPB{Ax6L!Id49N4n3J)qy$;sqzkILbL8I@vktSrQF41yoZT#q4DU)T{Twf4+Os7P0a!78m&Ag ziDNe8Vr~*Q4#Cr7@2X6cUWtIw?Sd5BR=TR^!uu+ZdfvC*_!9~W1c9)ZwUG=yDT)a} zMg=ktx?HLeaL!=Si+|hrpioOLU#+CFNUgGH2PTwjJRgcR9yY@j7tGFYl2>imjxSMi zX`K;csA&NS$8eKjbtbt)dSq6Eg4$NmP6I%t$%asgOa2F9e;^Xlc~cplJK0%HIem3U+TDOWkG*g)s87U3C+hcVO3T8* zk1$^?g$E|t-9$RFdci{h)76S`vEz%pp+mU{pgAZ|2TL#xEZvMY48P0^*SYFVv$C>I z_&l@=2?(=hA_bQA;mhKL2v ze62=uM?kHY9WX5V+s;cUxYiD_<5B3g?mP4;gf&K$HLXXuD`=lRDw zt;tRI6q;zZurm6WEAtX6`c0xf%3L@PBOgOf%39VXf6&>&oCw~}o!MvFihpQB7e^Q7 zYk&I^N@9oQNS)~)Sqz0;JEY7LuP-YDp+C4fvL=FPu7%RNBfPp~1d>6w+@C}qX_yu! zzEDcoZ{GLdhjIG8fwh@*Nh(~u3`Aj9Z&#dMHbg5grLHsiH+TL(7u9=E{xjUiEhm_( zO~aUa`I;spg57}7pjS^<9S0g>%ptxG+2W0(!-Ms4peee6)|ihO#Hc2lt%_~}nm5T{ zj;(VN>8_ciozb^UK&I54tM;F?fh9YrWRMCs_j3{wM znJ1&QNk?^Q;uYjxeTQl@$e5^F8>QP3H_QG0;d1gyZxcaUpJGSE4!X`~=kOrX1|=E7 z{qrBiGS879V653|1M2lc4wThLNr;yuA2hr-xQll8%SLtX=awhQy#Ni?Zqko8+5$^O z`(8d(6eyB4yxp0*)WKjt4tIHc56Uk7x69+6jXwr8S(u4=09mg9nR=Uyb2|F)-ARU` zc^$*L!k4VO=>zZ%PcfXdfhNHLe+dd*4HQ#;ivf*Hh$QbO?#PFm-AC2zzm%yZ4DFqB zA!K$&PYDSh@$s=ob0dGH1T4@hJ5RH91qKBJJ#7)!*Z*09uaThMs?riS6Rc0kR&~Zu z0s#n4vs!$>2e!AafsxigwA4kiGNu(PgqZK)`!s?cwV^QPrL8EXkQ0qy)onq5oR1kT z+l(qh=CC{ZC}Fnm4`RoNGI^A`fMz`lsGq=49k|0ah&D1klZVO`HQwo|`aq}h*Dz4j zCPc$jOH^B}k6Ei9o?xHi7xZ?#nsRhxCMrYPW~l6c|8D(kMzrC?K(7uRdZw=W)QE@$kF}L?c2f=eox}h>JV8A4ew=H5& z=f9@W9g{n$E?_oyHSf z&&0taV>6MI7>zhoJRTdDc%hK21v7K}t*PIu&|DKA5@k8H#tHCu;e=5TogE-JKkr_YIg zU)xdu(u?YrZ3qQ|2vR0T_^B_hAx{7m223L;3k8&b7pqorYb-_B@ZilBI~q(jI}p3yFAA7M!~OW~F?!kqF`@_7e-dKu-r7pdwz zujtkuy+f$eW)F;@Dl)&4mXw3kmna~{`gA0MQv;%jh0V~ACC0d_I$QXp$aI+#<0@Nw zNl_30+x)%gXiph>@axU6(J@YDZWwiBHaK?b!RY_Kg%gz!@G5#dX3DAUuB$aGzu)A8 zUeyE|0DV)Zv29vuvV|?*B`x4o^D~358fI4%v{@g0_9`Kveb!iz4-P`_<9w&?z?+)I z-fBeIfv_RgYC7MtV@*pReGk>nLNb}~1A8S9 z?zc)W#244m;2V-Vzs2b>tU8*^I3j zd~N7X4I>*vJMl~fHsuz%kd(c{1~w7e>Eem#7xx?NFe?bIKR%ahFOYS!t8WXK$Vj+2 z{G1mbzUveeBE3syT32u^HpN3lTK-G=@whQT_y@o?(Q<-PGffZ#(SNNcw4K zYzNmQf#f=T(IIu$%ybHSS7ZsQ+I~bP6&M?1{(a0?Jvft>Idm@c(~0muw!NE~e$LiQ z)#-PY-DZbV#COu)x2$Wpo){QDgN6?SA^oVj&J0xi+!G$Np zl6|KkgMC9B0?tTt0MKnyC0_6U!XV2Ft+kG};?j|9o~t$n-RjmX2O5<}aQw&Qs($cb z3!ZDr!FY*MXYI(yLV355RzonN%4S3GWp6`Df=Lxz?4BobA-!L;<$m6KZgmZv<)S7( zi%YZ1O z;-TMp`N5=^Tfd`-E)8!x{3cKsoCX1}j*H@*%H|ie?*hlipRQGp-?Wt-)Xu`IJX@yk zCqjdki277Bd{>85iGe>io3D!+B4|nnL_$NGM)8SoT0{+@AKAOjPK>Avh*Wy`>=uQ{ zuhzMJgZMZ$_R^~g&-Y`IcbJONCuyUzp(|}}15ydw{Pq`rhDzmb>MnA;`?aCZkF<_p z5GM;O!A?$}XUlwky>QpRn<>P0F)Oo~AsHa=Pv_qq#3cH_@mo==IO$BvJwe9Z_p@>_ z)L;$;cuQtbX-b!L#Pud8IEru9Wm1y2`T#RuBHc(=@27oYbI?TbeWXN_>K3)I6paUJ z)S9QWeN@VTReyCO5&~7O6`9eQUiE^|(qSvg>vQ7!QYB*BVPb5UFpu57g=^OV3m@RA zPUXR#tQCchW6d`f&4fkG7()QVAdqLcE2kgS;|}yJ|KseBjJu|wgZtt%2<8FLHvf|Q z1{bKUOlreP`i8`0X=N5JaSYHU3vW5|!Mnc4Q`fNj;_;(6r2^n5?@b#EKwA~dj$hL8 zo_;4IN{GOBc20e|<}7oG)ihZzjJo1*l?ULT*T$0Ga$D=ZIwVM;U%lTwjdG=YpRzQKYpv+ljqszTzOKA@T_G?>jsg@;?;bU+J>PU9NTiqTTuIEt6Mkbao4<1 zXT}`IPlF_-UcC~0s$l_MJ{Nj9fx?;|lbSi#$&YZ)v$(ZvA zu>_(R7}&aEQFhnKF@ob;BXu!plq#Y$wBYnlIQ2uI&wPi+*%wtMwmFZX7?Tn&{=gU# znNIY9m(2%YGq&-*+6cYka)nB*!0O>7Xa8m|1^@uJZK9@0B7Nk(PADZ-yw_ z%tCx*#{$(^Qi5$qQs@Ygd1I@=xnA9Typ3hJAz(hVgdt41qz?}5G1Z8H9Jp}Pj)9X> zT;nm&mG2_21UHe$hO0M+=?N$=djH1EV4D7Qu9>nvRJG>BUKu;K9%L5JmzyYdmk_#T zYU07#@(`Qo+2tkme`g1Lp1R1ecg zQQ3vVAL(97;?=?Up2f5?pHVTxlz=$Kj9haVpJ_#d`87Btr*Z^`M&Jv+lmVnhFZ&~Y zx(jghx;Gf6Aur-TBIWRMXN#{zAq6`5jZH#8=4#dZoi}LF^u23%pou6=G;m;_Rsc61 z%44GHZ_a%`HUedy>!o6y%ak{7N9m$ddqGId`v)+4U#gr5&EX|KC`d=kPw((mAw>TC zZRM$i5&Z0a@z~|!ADVrd$*lKH7{zkM&(5`a`+vh>I>Fl+^O1rvV!@)aw85yYkHOrT znQ7gDO8TS|Sq|fLl75^K>3Y$I>Pg>JWdBtX#y3LHW$2UE4C9Zw)@V51PzX+|=DGJc zE%}c)o%ixH*}oyya!-|`mWr^=*N0^y^twyYx?ti4XjzVpd9eIe{s67 zg5o4#_5Y;5-BzhrW_gDc0R~nCNli&}R>N=su_XotMl!d3sgh;Y%P2N3pKk08^nMi~ zcd5TwJcJ{Qn3im(cdc0Xp#!@G@x$c6kF+ZlphCC5I1}N{IEU-j?7KI`4OHpbe9o|H zji?5mgyagfpQr6N-AA`=zKw{ifmxjQ@_9z1NZJRB#BzRCW85U)gP_6O{10Hgn>qWP zXt3e*#r$k*-8W8$@-p_R+nRh057zV0j?itR;`cg2K|ugY5PF&eR;|=WHeyg2dLW{+b-xE`R0^oD+vqNs;9Ui;KE#v4o0q?--TJ? zs+=ey-;QqNRR!FkSr$`nuZjRp4tVgq`oIutvmQDcu9Z*+;A<=3QvBgI0>}rJa=wk) zr2NhqC9`OQTi@44hcq=n+?ymmQq&a;fS}hd58kEP@pMO0<>i`j% z23-_{QW0?lZW<?dM8s9a^P9HxT z!EBHj936k(X_=ZVOp6kQVE>GT$ww_d^&*3ZhJL}rNSmL2JQALY!+OVKg3j zn|G$<%@<2*S9}M{Q8ZV(y)!OXw@{@VX&x=-u3>hRLq9;p5X2fn5-2zooMA6Kg_M%7 zIyQr$HMRX6`SpCO>q%`$)+Er2^h!R}qo(OJ6JC)rhH3GnH9sjL7$}7&L@}?d-}~EQ zkP*Rx>cn2P^>)5f_ct^Tz`JZ;B<@9aQ4T7@V`Zd4I;A12I5Sn>m-6F#{TqPRh4U|< zwL|kBrXfDS)4A`LlSy)v#{Zo6-vBY~dyXs6Q``&`H|xueFt3xqOth2;rjV<3#O~oK zhk|s&oGo?>Bqf42*Cd$OkGWEG>^0#zf1vcOC zwBbJ@`X8u>3o)m<+=<%2P!(9Md!NZ%l zk+fzf=DM82mPcJTQ=&Jv{Q1}e!cC~4ChHXX063LtRFis<*li~3dWx5A)G`MZng{)f zZ815b-FR!nRFAoBJzyWxW%-{Mt~YcMk^7dHv`D@YE&Gg#*P88IY=pGiP)ZSYp_vDb-!($1aI zmVPR~&AtQMpVMs#5{}9%G`O5GIL3zwXf7mk@b{p9ZRHUMwc{Q2$_57 zfRs5~$MM7*MWEFpxna%X!RVGc@%Ln(tk1_6KR9d2wbAsYreuM)o`8jd2p<@aBhcvJ zGYyc!B}ZULP<5?YNmusJ8<;Oj$I(y^!fVbRdDizzaVbUEJ(Rldd?izVg;UTAa}uX$ zNePX4bRyq@bqp7v4ALWs2NcAJ`%|jezm97QD+ie2%MhH4j1Zd(ZH|YZ0`Ar#6K=9^ z{{Szu3ywJpK&G1uy3ffYi0t$X{7l%7nvl&GeP>L2Duh`G2_yD0<6I zaA->5ASLKME4Er8?LH~Z_EpZq=hIcr2Fe0tHqdKE(kOV&){FlXL;i)KjVORtuk3^Q zHKCS9PxX@bh>{mLi`Edg!F(+l^S^xfe=o*OTMW(1!rHU%8rPh{cJ|hWFZ@RtTqS-Z zMf~G(*D3?<0`VF5WO-&Phm59KCS}Ez1_mFs_cr%skY3LhJz$QIA%FHkpPLf+J$%Rx zx_DrA0fgCy_ri|ZrfcyR7oESkIOPIKHCx+gC4Y5j;L#&G$LJes%xOyrxCw$Y`D5}Y zV7#etY>V~343cK34zy_urT2)*rqDm^|IRl>%6^y?ztJ9`81lq`Ch?_1Rh))aEAHsb z0)j)ehO_tVlv~7F-8_NGJgm4T;Xc(-^BQ+*S6rTyI>ZyD{(~3oow7GElw`^Ncz`GU zOf>yvAP@#b;bxdn)H=QwsE#e<^*xlagKmY~>s;L6`y5D*B6( z#FdQkl9|ez7yn!?8p7r!^axS(#E@``WK#8Q!}!NL4%1n6l*8zpFE zZucWsO8A`e7ALT1DqmdZouX78#%XXLbWKEV%xF0ZeUNeS84 z!CB)j!E9x^_mY6$f_9)~zHnY_52+m9i@Hed1t@0U0r2?S#fMHBCZn5AydSSo70zE? zuhD0t&aYvqvXni;h>3CunCJKeHH7a|JzSlsj%UoW;Q8pkCGWEBAR3pS&vnc~_yVm? zHvz-gB=$$?z>Ci6y3&DYKY2f$m@MwRsKW90a>@0@LF(;j!^{K-gnbq+P|*smJoINE zD#auKoHJN+{#T^)kr}ARC_Z)IJdt%@cc1=i7Q^%M54}V>&O?oRJFa!K&+kvA2p&vE zO=(=5&f7+Lt0lnL<`v*ahl)e(t=%|O+Q0d23&TLP^@TE+`V_-+a--LNz^cpXBAe=f zA!x*k%g6!~4vii=^pd2v$2YRhLmy95e9EiC^tJU5 zXN@-vQou#C0HtC7+C|q^rf}t+f5I#Tj0UR(w5Ec9c!=1L$1(IWUZy$zI6d4P2dqx$ zvp;aXlKH!%4>$A**17P!OE!X3{6kaX-Z?ycnib3|o_=53`%EQHt(Gd>>n3Py6uWu? z)Btw+oROh9fMQ(jd#+O|s-$zWcGN$e7f6jxck#z57OaQC7$WSU7O=o7m~}9n1G}$( zGb+teLPtn0MW74!;gHm&pvra4TLIFKZk>Px=;uXqEQ7KV} zsiWvOu^~LDSbqOYG-HXKdu($|&{2b=)9f>sRq(KOazY|QJ|Y6CHd)`J6>qR)s=(Eg zlth=IAzs`L@=G}s3k^E@$vi6Ad4buClgDNc4ij}AnXJa)vOwd0!{~9rg(vkj0P=^t> z8{k!X@&T>%^B4)Z1Kn;*3so`SD4)uQTJq9Hc|;PuG?lHG9nhM5MuC{O@p0ehhw|-S)u0Ux(66ABXpCPmok@F_q)^90@Pg;8@HBXT zly-FQ(qStKTp$Rn78A-)&!Ch{eTc^ zH*E@iOKxf>p$O18wUU69TLQGay+0FO>7Od!o`(%z6l72PvLZBsn1z)~W7d2^8G&)Z z085Q~e6!P;|C-^ZEs?a=`XF-yUD0@i*@LUW02s6Ny#=dXy2x0ELS6_^j z_fC@lraPHvHrjdS+seH>HO~jlDFFdXzXo37;N5f9dfb#+)cGKi&(B~J zoQ}RxBS(Bx5o(T!k(;%$XrtbAK$F;t0{tQohqnBULctQ(i{S(=5ZR9xFvBqtMfl|9 zcZ)MrxkDAXAtvMmyh{+xVMKH~R5$vf!D)JD9tJ`hh;E;BA`{{^_>K{D^_>i`4%lmZ zHigd@Dl?~+9kf0pK%e`^^2d#6m~>IIVBbnCZZE&k+n*B-DiX8N^j{(gcKTs34?4s0H~S`twKUJPgaNNS~_g%NJEhJLh3!>d2t; z(ZDL(XP=G8f z=|;yRQ!7KbWWYOuxuLEv4f(6jnG=Zajud#1u^Dz8AiK*hcE|>oH*gjIb_D$FM$b zv@)v3!j?LQztthu%i~%pq<=VPaCAC*3pJb5g+}SiwSewu;~nq0!NdPkF-IKjg1V%t zBznsBH7{cTxvlt*;3S~van;`M`|c##b&<%7*nPKgwYgCAsuoGlc0tgImmLu<9CmgM ztmS;PtesOuS?OKMqPY&&2^4tM%Sn$zk{Gu^V{mh%D3<3In+c8Gzzb3DbP_FAtS__w zW9uH9bK!z@QOC}VZ96lzZQFL9*tTtZ#(n|QcD?_hYgBiQ?(42iAbpxD zAA+cRtA-(&ZGB7>aDp4tva6zfU$MV`8-^_?*xb+g4sXohsno#sWdU|y zQJ1$%<}nyxQRl5dDvoIL-+4wA>>dH=UcMXAYh?$Kh3&^T9;Y2>=z0$-#|Mf5ZEsm zZ8i=sb;;lVmH6ugGy_}M!l~Ur(qYvk!+V}ex{1RkXX4yJ!P{A|x@YVtL9>qH1kk&V z&K6aKEL<2DzPQ;E!NYs1w;iC;hp0TQx=sbk4FtfYpuTkfP`ayUW!0QOsa`3UaTVNytK_v8 zd|sg!-6Rdskr7y6+j}+324Mz-E5FsO$q9}5TaaLS*x1uiMwCw?Uv|pydwj5yJcjlU zC#H&L%jDQ$?P^x-?vNE*Lu0FdVZS7u3_@u+%IJ2c_H{b>v*S{e7Y%)P9g@#AH>e+z zQAf7eIY(A;BI!au9$v*_K%DyabTq#5|I++<2t<Tnx9kR7DU!UMhOhcEs&iem;h6rH^mxePH@6fboJlr($G0IOq<^*#ss{|Lc-TlL~RR=iK5jfv}akg zh=36uniC-BLl|utJ}LMD>oFB#G}&EU(HqoR z{JaLGk)>?|5WPj|74?WaN$pKO8c_lX)J=kR%{_jaY6^2?m6MAvUXtj8)M5j>zS-5VQKPmTqfTMYEDNZQ_(#u$sLG~AY4qY1OPrz>Hm4JFifBvlXz1oLMkiq)@Qml3>kA7;Adb`Vl4CUBV*3No_RcNtmA4FcE*+gLJ34Gh0K8mgk16hyefM;(WNY*Qu_YJ7XcI z=fVO7pz75hvRqF(;E25*qnQbzIBVvzd)kuoKjoziDv$hOzpv<%W$iXQV4BUo7%iE!JSyLR5A`E z{|(*V-VIDjwan+C&iqIbnSzUrLe-w8G!L@q;9XRWLO+*XnH;3SLuX=(fv%uz{$dQr z3mGF`hh(Vi-a?>#=IW1_U}y|O0P(SA#(a<@HcwDe(U z>pE*^!K15ieEr^=CIZK&DHf3F_;`;Om<5}WZ7v(dAZa)v)ZA>hzrUa~tWmI+TEis} zsx2GH@T=}n(EQ@HRazj1J)JF5ywKGa{&s$xE`F;<%b`rDSZ($rOOsK}Au@8A@QYk8 zlY!w_*|wPa)YZn0m#lgiR0}p62ZdheT;lZsC>Vh&2!oo8MdCe>Zu1=@!87_oL|+k6 zGc0iu+!N=@2Up5IqG;R^X})b8zyY36|4@jqNwCbIOypg4(0#6ls+Yblyj!=*>+u5* zeaCFYT#`hRsg(LIW@bk2bYqONENR>t%H5YJJclJh=O?X4YeMN+T#{3VUy+GXOXb!c zz@*rUvJ_zS`6oNCASuxc3CC8|r9;n(U2E^!nxXBNkpa9Eab4?n*YVxfgrd>wKWy5U98~mys$N7xwF)|I518-UZ?HP4 zMzO4Kca5%MS_*D@;WZE>6yxw2>P;M{_y$|7?s3}OQeg5w6-&`ZgHx5ugEx+0TdoB5 zOlJ12DEB$iS{s?KB}*8m-bJ+V<_(HP)|4MV>dnh5oJ|;oOwV1qoI$sAyK? zVC$~nG!yf73mQeh)~~I4?8FXYbCNpEFATI^FA-gtC>?~AGOg?`B=0gqTeGFhbQcP~ zx*%3HP!?oKkd6;mt;F)fr$_AG00IY}6@4oT$>iB{>G;SuHS{5d3@mY2df^DHTDF;U@IC({W((1do(8 zE`3ZHz*HsFq|Y_lH_*d0l@TW82A7x z;-d@K3sxeP?8}lJFiF+PI_Hn^-Qv6cjgsygVBNP-o>M>u&asTK78>y#MYW!cV zoF%Lb_mK4zzD_0DFBS~Ii8&r8l;m+xEk8v0 zTWD(9G05NFQ4StSgtDk!_2SR>;RVBD$$re8D4g8QXC8GsOD{VinE{ye&&J>n7Nv?B z?0arWS_QdgN1TMi`Y6P5KxC)RH{}H8bUaG8Bn5Oh70*mN2j?Z|zhI@fl?CPivDxAj zcOb|kqVzR0{cy12Ka~$dj`NA{QK0M=U)J!hGB(c?oI1!{xXM%yw;w<(YsQ~iriU5( zNBp2yws8qswJ9o*-l9L)lLwpWsWMGq>-!)3ao9fOPpyoDk6}*-!Ui4etV^O9;EV`;1h6#4lgnIM+^SzX3WY}N^DqSSw~$Pks9!{5BFIPManX!;0iTrI}&J~x9J zQO*T?sDG_1D`6O%_U4^L`0beto81@Gg~ONPFur?(n;t;9LRxfvn0&jIaW%cMUl57X z3dS7d!gdbt7EA3JHIuYCqF=Rz_;$O*{2L1(FA~g~EjFM}4}5Mw^6i#{+<{s zPu;m%HKGfSNd+4*vpLVQ1 zr|eov=a3YR8{=3I*Q!moxDiYLb{oh5{Rc)et<4-9+3{$94ZUUAwg7aCmtb@TWF5J>&O=PY8%QuK;=4EQB0Q-37YGgF z|Kad4Tx72B^Z!}8UCk0-#GYtP#7~n$08z+AAgmr_E3U1wN`SFOiy5L%bInn&q|DSk zjlqG9t4B|ic9cdJ-ImXA{==2nnVX% z4N?lfwZHg0BMC!}6_wj=WrkT)+x>4UvnxNqF4JgcSpmC&#*#Tn$_|5iLY2FQXnL)K)GWz$J#-UMn$AL3?Go7z(5{@D9YwXbFq2b;>Z5ww_ zqWfFwci%A2C<3|;1%%f0@ql~ioPu6mgDGW27Fc%5==?y{uHE$sD)eS)7y@bT1kHW- z`8Z~4=yw0D(v|Lflc2Y4u($Y7H@dp2cjCp(PXMjBP>Uu^4DOKlGzp?7R_jE1nSDQR z*D>M1AJc^T_W~NHRh-eUQ$88BH8P8w0J}|Wag=-i3;+%w_brEhqXczy4vVOG6XOo1W=G3?mC?-_ELsCb|7Vi=K2BvcgO7>wv`5Q#u57g3)y?p9l`*?{Sya z@EKS?f3Qz^jYzJGvz58ND+F?2FGm-mEA~jY?^hl9yOabg=3pC;qA>w@Ufu>rYbVQX zKp>N^M**xH6YmzGR8ZbA?@la5d-U_TcDI*DRl8aBr)D9U*D)r{QIMX4ygh&Y&lGb@ z#?LoAD7gSH)5zjb_K)0$GQZzNjII~AP>FK2#e&;f={@b$ba2c4eiBLLgc~PGFt~>|v%|zesG%)Dp9vN6nw~>v`AukdU#2mBB(s)vEDMqM*$i-A1I~dx z?Is7|#3uV!AF4Z#leQR9T+9m8CeZ7~Cab>A33hUl@PH1Y8oP#ASCOpz9LxlH)RSav zkWIEaR=^3%jW&xASF)+!zk9~n7(o6Ys>iqfl@IEzRobXh{GhKh^CoNAt*x*L>JdZ+ zd9Wm$;I6&FP^rfWVHVK~G>0E9n+G!Hsax3 z{|4MM5{pBjc^FsQ8Wnxo&0Dot9v?!ZhEkewsvv3VmO1-$opP0$=qt;+-g;r@pvM^x zoi(LwY?^lPa1-^@OW$9Q`yhn{TknQQE0J}zM`S>E;kLHV7s`WYPh%v(N0!*|mYd?~ zO^U*RRXExENe;dXeDU7BnXy9@qdo|TOhg&(I@?8M$>wZY_w@Lmj}Rdmw5?S}YR1a^^Q14eW#g%w^(4YXb;M zN%lO|7Gf)5^N=W=KxrK#)lv&f8`o#vm6u0QVHmzlv!c%w7A;UVf|nbsqtMW1p_A65 z2C~5%B;rcMY4f-7eS*jMK4g;k)&$_2@Wzr1J;oDck6dO%5AGXz7-g#*s zkmN_6h8$>IZW_HVEoDuT89Ta3jP#FrK9MpTYmX8%6p30^MgXImtYl3{X|48n3dX+i zKksMk=9B$zYLN@G60dgKBQkIQ3s=rD+Tgd%<$h_U(VQ(AnR^?k?pEJ6SWikXJL!=V zHD){WX~6*J9p1kTnOyUuvg~lBV}da)q;{1j9Dn{c}`?I(@<0B(TH9Bsb$3s1#NtZxx}8+lO-ktuK~DiRr) zcif~#=r}q>;D*%(rbtZx7a(q%wc-=Up_~*jxXY5a8ju4yB|_({Cy2()!lsb^d~^&3 zVmq8a#Z5vYP{x6eMXM1n*)`raj)Q^_yaA+U8jXQ*JhC`_|R58^<^( zo-O;im|H~Ydjt)TaV*L|9_U{XKgaW^{0YsLFJc9=nc15aXdIaq@WYpRF+wgWx zjxxRu-*_bp!gzJfycJ#$P=~}48+=AW=*&+^A(F-omvmiZh4p+nyiGXr*W+}g+$5v- ze=0u6ov|;T4)m%LO>hugc9$-g1dsX+3 zh2C#zPa6*Avt`f{c-gGhTqF^g2a33^u-35B&6wr0P;o-FmDe!<|F|IMaVNCh#Xy(R zW}Ck7g#jcp$9VvDMAqUf#2#CG{7q%tz|NEk5kKGT>_{P)GNIjo4}Tm;)!gZhH`{G* z&hQ#n!?5sFu#}6}^)v`q2+aGW8~wpAKI1yth>;yY2u*m)O|_-kiyH4-O)7^E5)t6d z*NbE>IF{VYFR9?6eoobU$08D2LqNB8?0-G#qNd3=J`3a*)Li9G1?(jus=PXSY@x`J zZybHq_^v2QxMQvh$uFqnpeQw4kVBJ0PiKc_!7T~Ja@sUAotRXzt%1!>pm@HqBj1~L5{Dn||HJP`dGMZi$H7!I{HPnRu``g48So`@WeHULqxB*!g|ZCPW-ac>rbJwrm}qT_8~ zfsp^KslV^p<*D4`7wo>V-`(VMtewVfONf1`OEak`lj~G*Sel<@k35v$1L3f_j_TTD zc7LQ^xr4&RMw-ygzVjXVa5f9A!Peek2%q?gdB^ZuQr9gJrOqVvLX4J>adGGuvubzi z|0;>)Mo`23J`0PAg1cy;$Zd4U;@$%d1}Lgt&xiB!2bJu&=TYLDmjEd*aWnQN@|I_@ z`~(4gE=DnZ8EJv3X&=~$W2WXDIva>xa13(pX{NtPqtlB<&3cZ#mKfaIYiaiB<$QBd z)7%r)tg%ijPz^Tr)-EdpaCCp~bk-(7*gXsiLFhFwpuZF|BkaQ2wv~b2x)YWub3W(Tae^`Zd+r;3d+Ug3p z+>u4}nxXntBrRtt6QW4gNoatrewSt3XA&;Wo6zV7)%Am%8)}1PiDmwan3KD|I-;u5zMr5zRa~w(KLDVrpGf}bAM5) zV;UQOM{0vPfP3c%JQ|)wdV~uA@*F=TxGG_nxD1Ah0ZdC*-HM6kOP4#o()B2nMEYhq z`I|NR?5gv`bS72<-d_!~$cKG^NbRgJW=Gg8J*|eg zl->-iebdU&mimP?ocY7}|AQ%XEWsWwj+vNyZ8$hC?u+(IDcmukCbitr`5dn!9VGL9 zC<;oGF>-=qcjpv{7y?&!w|%}K%E?%CGwqfD(81YFq1nE%5~xNLV~IPfw!g29wKEo1 zH`VVsp&DtKzx*L5f!Cq__w!He&V2jhTe0dP{o$FA8Lp7dB%f26z_K{X(D~noEg%o) z#wZzig871CTr61KUJ)Dvk0NEkp|Qw%&`(Z3m8`nmC#v*6d85*W)@0fz677EsCM7$J*=aiHoGtzR!Ae5}#V4AiqfgcA|rWbWi`8Zt%5rrwU%L5CQ zE36xSKNu~=olDE4^Q^}Td*=djuH$No*QP=Ox#nMVATd~$59@5%)v+#KC5-fn zNuz)f$JsLJU2%uX24vO;t6A%GNJah~Nu`9WgG4Y)2+v>$4{WN1*dqAkWpsfn{^$DI z`n9cw7SLigv-AvS6>b*L9x>fkYCziE8v45S2JCw7P!c_EUAk~Uj7Hw+;aD?^I`m#J zFUI1qqi3`1sQTrf_Lh*L1SWE|boAbVpVhQp{$7K|z2Yv!m`wqyWDL3fjlx`Uj0r5r zN>;qFd~m>IFr=Tpk`ELWV8vYUE23?ukE=KVVUza4+9CfOkF!ke9_N67(Kh+2t2%4x zstqK*UypcexoAOILYOb6HsCoNF@t=db9Ymkasnd~9!VfhGNxR5IT#TClo6ggVVIO_wgpQdf)c;7o{@57SEuDoA z0P^zFOlfZP37)E!4nNDx%#srLTF4Z1@N$Zs-?R+V$inqv8u&()3OTIh=6A4Wp}@(c~#a1vgAP;ll<-gD+H3Y8_T1N0rzLM?eC&ZmMfcmeExnSfZ~VX)K(XiD|}NgM1tm z)Tjj>#I%E}x&f!5BEM$uXA5yr+6mB&5Xx&I@Q1xW|M{Sjlb5j?oTlJgDKh2)#H7t) zb5lp1-D-@A1S%d(M_P`gY%U=$T3ji|RN69@_z)QX%5cgua529Wi?QW0Fp| z-Egnl;3XO{(!M#vj9x3~wMap6$lBc7 zOW%ug+6ERJH(BTD8on%)1jY@W2!FsWG=gEcxGiA~+gk#eb?mRYUPek6-%2ow3 z*gw=$^)G2_R$e8sRfC3#Q4X4*C!Dp%&)el6N;kM}(42Yb3%*Se1 z*j*hqcM<7h2!E8g9Cd14o?A{tkuFzCVEGIq0#nW*GxA}lF`*+d083TcIJI8kAqC`` zW-iz|FaawV_`3LTRk4`*8AU3(VOaUN{E}>UHG48g(v3)wNG+i3X{4Q`qeH53!~9+AeG@_^8;MLd?VJrr3!) zhvtoro>oM7T@M4oJuL%RK;_B&BKCfNFk`H4Y2Xwln!NBa$Rs3}_X)=a$E|od%3^h; zQZ&UB6U>C<6OI@tJ2GW)O_aA1(+(YqT0x${inUtk12NJMd=WHkdg)Sq#iHnAU0KkU z71B-VOWox#}C8N?}U+{w^mr3uCi@p_J(Rp4agm$l=BWcNhk!(+>b z8SHh;YD>y%Sd}o@Y%pal?DaMrS?00+@*i8hlzU)#y^&2qOa_=envwarBC-f>FFale zZRrUNlU0K0udcZ;0FKPLhLU->r6FtqXx~>=J$wk!m>FO@3?~ks9N7@OBK=;Sf~ZQ$ z7mGo1?+j1j19+#-WD~UUb8}`4 zsN54`F3|S&J*D=`Z$h^QL5P!wZsGAThJxQKD$zk8CJ!1W!IJb5Kt!k3m>-~Y|~sgA*=HFw2>XTa`*oKl`&fhZyS zeQzVTPaXyuYAy|My7T2w7jI!NsR$HLsZuVe`m0DjO6xRT& z{^A!Pf?22ls4(K{M!6Ej9Pt*DFnL;Sst9fKVYRE?p~)88nF-w2C4rgkTt{~&6A^Azztf^lZ57XO|Dh1O@pK$4`6ZP~w z`8WW3V`j2@N$qt7`dqXLs9cAT>c8Fs8Fc;>$pR$x5FKOl3)5R@5Up_f9QQ8L-ODT#Td=q$@Ctjo2?pXXm zBSIN;U)5FSp1Ic+VI9TgCc7V^u@Gf>;=|3^D}DQ$q%EQOrw)?5&-{-oRJAJFSl3u- z&D^h(SEmZr`jTfRI1s{|bijC}dvis^M&PctfR?pb`7uci)$?@gXxRE4nsRN@6Z)>x^ z4r2B=pQ&A^7y;|&&rP+Mn@Q=Ddxd!B&AYsYxhu#d*gX^rFo{f7QdZ_#auJsusK|Y_ z`)7OwQ<)226&RgebgdsG0RmB_*<}s2OrgUWDC7YR{1|NdbVy-J*(?;AAJGaAN)kwO zz5uBI1$VIln32-KOa&$xqXcdR3NB`T@Rshy3rAmrK-jb?*hwmm@dJESnbT}?7+w6V z$ziV`Fpv9FDM+vWjt&y|Xw~VPU=@MEYG?!!&WAM}B3g))c-ZjY zV75zirCb#e4xuuI@~AQ~S_ihZxND)384Cn~=DXe^FUM5{}*D`)+i30s&qBf_|@Vw7ps| z*o_BHHjQFG{ZYcy0BkA|;_oyBM{wY35`*UtxYj88mbYc5tm$!Au~r;rFWI(O087Xc zWXZ~zDic~)av(iSZ6-A@r=>(B*B=(K1N3U?c!tz_lNE$f2#ciM@^GL*+>6XN>VpcM za;1Ea{SyXPu02h0y!+mZ&0&mGYRA~=!P!Es+BNHM*Exf_4vV@kk@Vng_WUeUd?@u(Z z7C{SGE#@0!lKJJW^hI>i?sV!0CZ~455E}f;uZ2tYx>B}ocyjKVNPOx9M_vjC{Ym+& zXzCT2m_0{(V2h#sBKnx81nC(PajSBk{3k}H+JFc)At^ysK)pSb8X4H=CW>D!rW76Q zB#D)Il%AItUWpwje%>->0(?^@ zm_BV_b$q!wCDY)w_6Wsg$?zk}yvk9Q*qMyXU446~?((!_u)OMnErf+LxFitK@Kz}P z>`TGYMDwHacn!bWO5k~gYaH~J_bEA!wGnJLfrr>TRKcXRoMfaA>~{8J@8hMUxV(@r z{gBq7<+E_4`_YdEL4n7rOk+zerX4*u#Ix{LbSv13`78Zz3PdNFTZb*(+*S)x10C%q zsVU4`F0OhE0hp`g$X(1O_y%1X2y**q>;Z};g$)iimRXg75<&IK%#rA&M^i9L%O#5& zreR?BU0RwGEAzc`02ngOtByWM0(FR4QaZsq&0Fq3S3syv0Gqy5@{*czQ9YwA{)_#A zZOE4Xa}OshIDnF*l!ImhhED)tAXE0XuiG=P4)F!JKXJd2a1)_-XUWr0p^G?IvU!2= zM~}Q?%%i1r|6k9)YmWqRPQwyCa?Ja+CJ~2R$Pw4LJFp73gd$GzqAuaPf8+4B{(Dc^(fm*8NvQjV ziR6|?^Ug>~YcRT2w)FVq&Q{5#9ybEm{=Fj=3`N|zI^&bR+cOdryd7NlPQdc1_P&2dfGK=aIo3{2+8yHZcPzu7t_TxV zAJig)eUnINLB&iChIpScdN>dVBc(n!0SMD(#-kX@)LY%bH>1?H$jhik$~5C6AXbyU z6GGVDyriao65_70P{?Lvm3o2p7Y&HWBZ^+eOpO~@+$OJgHH2J86V>{$HRVpswhRJm zQ>l4g+Xz8D<0E?&3iTQ4WHX^lcJT0-28_hE?a?Ezm~jFyC9tL8*Ng{;Ln46mXwzDT zk>^n1wL~&7@&kZ+PK4yCBklAix{i$1`+H?)wR(DL#EL<;f8!tnT@3?l?sv1;B9)|) zcmiQxha*aB570oixOc3e0%-k-{^+{j2a1LpU^e);(6FCKdZOthTemP61ep+Uh9>(e z2#5enL-%{$W9Pf&iBPxYf@PyZL#f=OTlKo8s+Rq_;6spiT>B)gR>|oKwi$SK)j6EC z4+zcFOdeFEDxY9^oqNn;d54oOdYrhid*}l~=v`{E1!A+0uOe8@Pz}j)9bUATmaKM3 zS!_>lrFsh4SD+d>)$=IAVv29pOKf$5ML_gw1@Utbsxq%pzpXSh;mX$>r#@yx$^Z7C zxxRQ-Mka357d9{XZQR&Cq&V^Ooag0#6mD1aj*?(`e*H~5wBwfXdtJfsetyuZ^bz$y zB*Mx%po>U`UDWl;!FrNl_H~X(DV59NJ%K-mHft{ojN-i|$10F)L)c@@*|gqTNW1|h ztZ%7RWq7KUVmvcX2fXyD#PTCcuza zHvKcl2@okU^YUC|S4~lpB_7mhWp)a>Sgl(1X82SpA^FFrl-zdF2(zWA8TObHlHjH# zq9!`;qM-GOJvZ*{toB=#<7J_0-PMmi7ZIq#aIwzu!H&YKL+p@*x- z4%EH2`U*eowZHVOQgHRJDsoq7gvaUHMvfc`(u`myj&b}i{DpslWDWR!quvbM-+$?E zykwT3)>_4PMn$b1k++?o!jPK?$=P@|B|1QVu9k!b-FHF8}1iWZgB|a?`4moW! zQJ=J{#!2S-$+?9EfWcNiV0eUf<%fg*Y6=p?h&??nU`&xD7@gmWLOxTH~ z8C5AV3On_NGu*>-ogB=ps~ek<(6>CZ^9KXTd|I)fb;fH&*tj zjBq-q9=gEJVK)smQHNxtgbZ#RRdhl8UrB6QRXXSVnW-u@9rR`%Z#`_nzsklDv@R?5 zCr}TB?nU%S^a%hOo?ow;qzK9iTI7?q zjc6yoW2Yyo>#HKmmD zBK?N$C)6Q-(=fc0Cl7GXNUAL**|dOv;1MGdtuMOPk{Ln=+s!>Lb8f$+ugZ@!$6^hM z#VZ($eIi=lzJ5TLJ446cQQhw`3VW}Zyh3gr*TaUHDc0N&!IZojDf8SSa#%5 z_?zRfG_XtZDQKEJ_}(Z=%(vZDEu#h$+X-Pp4&GP5>+b}r=|MQqx_w6bmt3?yYAo^A z(Mzf&i$8l&ga7jY4R-I?rZuX+M!aQ##lp0cbi%8&O)4Qt@uGYFY?xiA-@D~5cX>Lit^{29^E`goTqMm&?C>d@fpLp^z% zKiRjs8IVc%n|=aWmT#-I^P< zeM6JJ*S`q!@YLcqzf&3Xlzqp(QbwpO!6Be*e6!O2Qx&)BF&3bu^BU!DvGU^)j^zWE zy#(CN_W52~gXmwEfjfD0$`Z7S;)+c0!#*l=1iRddbb8Eq#+nb;+KcnR7vAZ&(Us*6 zPj`f{Rj__^_Dy;B!r9{EE>PPi0n1^SIl6}J{mA8|2`)%&{1E=8CR(>6KL4X3yfcO> z$zx0IOpm^${`;U!H8{=GhR9T8FRGj@?9JsR?m6J+5(4+L+}&{JBv1`?GZ(Ighf?|J z;uWh(Gv}d-_ObYm-O1r!P#UB8jpA96@`anVS6=$AgJ)Lp2?VfG&DAj!hj3z(Qtr=| zG%5lZkQGCiiCGPVa~!8xUe1zN#P5-82W5^QRl^P7(Q+XLLX8{G`Djlrco_17)#py^ z<)mqcn+J)-gr%;nCrwSc?Cqs}B*+?&U-_;yJw}R5=oRe3!^W;GyEzF3)X9ifyI!r= zdGKJ|vZvWFQDmZ^)FW?U(L@WK8D3(h!bt&Ys5d#TTjQrhMDH*MHT_CrX^H=}p?Y{W zXy`BYk++o^7G`M4kR`Nl2pKqw9twn-%^(*`qNYm;*BeQ%oCvgxNtTqGo zk6oyq0X2b-je(oh_8119FrmXFgMdSid?8`ztJEaG=&fk?CKCPk?}Lt_h)$YV!UXOp z?@IDYe`6HaS^92g;J%kLb7F?lKwa}{rK?M~MqaS)5cB>SYn?-9NJ;u<;xB!iWaQ6` zT9HbcvchhksD_erG?<$Mb!MVQGYXB9&q4L35Vv`4ksFP45@>ysNbg)eXt~coY614H z=1@YO@n~F@_uumL=bmrG1HP4i>3&J)zXK9hF39^>_Ww60-MYW<(87sa-nAr^A3kkw zDBS0^7F$mN)yh#pF@Mm_EOgd168rZe7 zEc&`3jyviJWz41ALgNbm9Pvpr)}SUn$}K}l#SHmC-w>UkWkMp%g$dsGfKDh>V1{RE zLopO8|B_A|&cBu~W)7V3qQ(00ep~LXUxoqFC&AH%NySKwJ+>9w?5j&9-mr)w0VAMe zbpDSC{=Ki$Kjs+KW10)32Xt7q&Ob(=U3uY3EzEoqC-W_{$vm>fAelsv%JK{EY8hXf zztVwpkOx6WowSB0mnOP+Fk*BjvWEOC1v+0f@oIa^Oz=c;Xkt(woqNO+a|$zn(C2CO zUz)IkbJQv&{fq9MX-3j6F8rPy|5~MGah^y9g!T01N;!P>cRwccI5S6NKcqsnegQ(? zN%JG1h0by%{ifBtk+-qwGArFs<<$IX+sSERFMfvAGI)q^+$LngsfkU=Ev2I*J~Rl; z{Cl~v!;(=fA^}-R!SMQhlO+gjhE7?M>-MZ}!VP4ylze`C+tqGGmn(Zof$IrL7Q&v6 zq=*x7BzHyDR8v;Fm7$C7GUO+-BTZaV+2E*t>0DBb|eEey^X-HX7cLZS) zv458;{WRFYAh&D&3kG3&h1PL8G?tf`OncIv1-qyR;sDUpr0fH{tBE2#;HzT*!R1h911T2?4~(~MMkE*KQ}Kw ziqs4{fb7_S8XfpTt_W9zi4#T)j?9i+d9pNPX_@U7WZP)`lkDZ z+q8dIB#J*#Gs=<{CnY!`s~yCwR!drWmN};Mlj{- zsw>I(ZHi`}07t$v@E?p(x4=(`%zxQVN1+2bD!-QsBE{M)w2UWz^h1@Vt8gJdWqID; z(cjTH72IbAH~PM(uPP4_4hqXtY^J~;q~GObi;w+hwRa-&hH#Xb6g6L${86OrJKry0gSwrsp^j&n4=+X3 z+$Ch%JC9a2bYcHY&?l#;3GzeFB)4!#i~HdInPD+Kze@--XSNz($6z4YcmtuT-e4t? z-x4}PMbG3+wr1LdtdvCtbF2!aVMSdWDEXpt$*P zzcU`+$|PW9ya@biAmekrRH|=U@b;RHcDM*_)zX`cedx9(G5-ptJ7)l+*xXX;fr&q% ze*@dEGN-!%VvfzB=nJ!7kL4BI@QEpQAHH9nfEY@zRQP>7B+NCM68-4jQ$_BeW}pc# z20Qo)>^qFHBPmkQcn&DP=+fCyMEgzK$qaU&**l_f_GL^j^yqJ3;Ve<@gCN}*dd zo&a%YPky-s-+6X^raE9W2-D823uY{Z8{$1n=Dy^^tFV;b3MlLlE-s-l1LqR4o@fy7 zu_!Q@I+vMuykaKC9ym!SCn>}^Ug#mhO894KRb32{SE#Jw=-*pi!!=iiSk`QAH-zJW zkn10E62*4zKXz-7Wt!D_(;6NaIcVyE#?fSd;ruWA5dRWk_joV8%T0Ya(E)n}d=oDn zE`7Ak2Dsd6vYNpLH=rE7_mGDxjv5C8k2qI}AXsBipwatvqp{e3PR;-Qb z7^ZGfLfSkHmA)wNmykytce;W|aIs)(7PRXXhK$P><>PClS#`Bwl%Imzk>R@ca|iGR zV>6a1^8M{c$*Pu(7|cSv$+D(k6HQ_v>wB7?6$gV=QhlLWXesBhXw8i$N2H41Gu=^M z(%Gmp#9@*MvRywGQ@Ek~%hygCs}T~PQrL{P5n7lut>B>Sl1=IXd|5Ue7MixNtQ?Rj z3{?0L(w{ab!kyid;03%6wcJl#rW+^tN;F!jS%a5roS; zejFvnq2W8NWOx^Y5TNd4CE4&X1~V+W;Ip!7bW{f)NQ?FIfbItySOsioBTrO`1nwYn z{(ZF(>Gk}V8k;F0yN+v2{>y|KWo63LE?s$D4egBa(Ez zRn8nYYgPzNc0}*wJwc9@9{=R^Y8&NWm-M3jVP_?uRV}p{_bc}MUR_H;IDhJ~2dIOVk>cDd{!+UX~EPwNc^+7={R zyy3><%fL?Y@u`E8ig3z_5#q2k2bJimX=|*0CUoHB&)dD4Ow8qF{Cnkb*usTJUf(jA zQzWXj;eU0#_DCJR%pYVY!?EA?2HWU9)Xt0%VU*rbf>CdyC)*qj~mZT2t45fm`AEMxd1AD}n$C5z(r{4H2Yyd9DhPTeSRa zW)alH-i)D3{583N!~-(Cw+;8OkTJEYB@|7|8SfE z3DPa2RjB?JRZ!6A<-uB*a5*3puU|*uF(Ly=M$oPz*Ob zJ^yKbk@PL(cQ9hRpVwiby?|=+;+_pglN;87c}!vse}Mu~ZC<<28Kv`&h8un0&jCbo zjQ*+LVa=Rjt|!Qr z*n*{2WRspM+|1RVomW%`*$*t9|IUyp`spSy_}iiH@BQ}H0zZ2$l&+!U)gwh)_>0Pp zo(p_jnMp|hPh0o2T?wEd0W`Ml6Wcy9I(9m?ZQDu5PRF*@v2EM7?PTW8+pKl}p&qMh zXJN_U{T9vYvmE0zUNtFdQ6SlvjQeZpH9n$EWZ9kRj!MxV_KQJEhaCTQLXduOrZhlb zRPJM?W$IPH&Ids$*WwWM(2G3oYbBcyq{1!tW|Nm)uU#|6oUfHW+$`w$;6g1WKD|`iL=^H1 zdRG`JYy9Y8v4ssHgL3u9>v{KhFR(H+7=8XZRYJB~<%|mc9MCuKGhCE^?7Qr@6mNi; z+w*7z=N;=v>)j&&p1`$-R{)Pda&<`5>3znySoupO37ep>NHmK#?02tb*jdTMG;=+i zk7Ggu$SQBkzIN0tAEIHAAI?nW3_o|%j^?EBlMhW#XBmmf2eQKl0Z@?l;YW+wG@9N_^-qoeMAh(iT zPDpAd3VaAA{qydgUptxdHjPZ+9w#5T;VdtCte-1rrwNTOUsNscSnuM=zjXBX{Esr3 z$8S8+nK#hsYAlc%A<@{Kh8?dafA+rU7BwyHT-vS>!nqb%s=X}8nc_tl;`ZOW2Q znJ_U_jY$1fU9c-9g}4C{HLmZ{LWrS6R>&@?DI>2rHqq_fAqpLDCY!m%{rHjb!VHtF z&vsDXBx$P$;)1k&X>LCy##dMTVwD?R=QL;3N+u`dAq?85>55rzFhstIPbxjfl=%JK z9Aiy@She{#m!Q&J0b+I93pmas@@M0(;Y5?kPsUuaL?WY_dj6!-Uu5R2Z-boclc2_* z=Y#LzjBP%DfR;CT3aO0A0Jia;0DlT=7Bqwx)NS(dCO#wCu(vK44t4=D3rlQuY5>!K z8k?j)J@PaRP4hq6LsC|!J3&l3N_{<6@`UllFlWcQneMLD&!--28~1C zw~zDGb%+mls?5FeAoW$^UgS-e*4vU`;J>_5oh_V#JAglGi2v z7hp;j@ioulEHaj9Dg0DAOW9{Y&Uo(oLqVQGWw-ERf^!tNdK4`!_$=g-*l?!}+R!lA z7qfJ+L27z^@D05z#s1v*r8JYG>wul>3Mdpr4N$LEs2i7x;2#9PK4z~q3N}^cfY18* zfdRWo>Wc&+_CfD*^pJ5~GD`LVkkjM&LkZ$dO<1_GNwtf3!7cZ+lnGXJqgj)G>a zEr0B8a(l`r^SEWmCJn0^H}u1e{OK_IxxbKiNA7p5!fTgN4aGKbo{MhyRb`w3__DRj zkQ;By0<2ZT^IjPTh&_HaP(1PRGv?5lHzR_bhi7iq>FmQ^VaeWdy}T5sEVNYaJ}1PaDFR1>I3$R!qIa+rPyF|wiV^R4}X zzuQ}701?Kr+P`{Dy~BiT=+ZqujyvmGWTb4nv@D{@|6~?WI>Mgd1=43vp25Zg2;P(X zfSTMc)=Ji#8)}^zv0O`}%&{9Z#>aPkCi|4Ydc+4yqfQBe`{xUPp{w0(>b~yF@){%t zHJ((aVs2BzyM7f@x-trCi`+S-@cS(kz|uyqvPCks$^QfO@YnXGcskhrZwtXC1l7_z zR70+^w-uSqzB#Nu@i}s5Y|}|eQkLlDE7Fj8lhI2KM^R8{4b6^4d0D9sJFkg4Hm17T z60iv0Ild8ZZz41rDs~ojwfhgfJah{ae>ofTAdaIL3X1KS1Twh)7UnT34-Vmk5`?5sit1DL5eVU3-7)0jrFjOdkBsVQtC6|pqp`@O>$mgf-GJQQ7WModDNPBcCb?!gmg z9hP6*2(yJq1*|ar5qxKf(A~G`jO&2=!q5n%_syQt5UqiTquUDD)3>oq4ryWnA3h~V z2n-D5v}}31m2TBC@raNl{cx@6AxRh@k>E2WSe&Pg!x)x_!mp}E2qYUSX#8m-{1B!k zJv76#Ppq6}$lnKNnekU12SK2@>L0Npce+rS0-J*?^u@eUd=#jA3cNrWD!I;I(8br3 zwgfIVAGF`(7aB;aT`Vn0hfq4FTq$?%4JZiZg+V6&ZkXWSUAH1FPGk4w7pdPa&gRm@ zmU-;vC%Dt1N`#hTPNxGwU+Sh{?J1!`kSwY!H@&$jJmshJ+5dxVo<; zZVqdHX}B0QLIhsKz!D#SycTF@Y95f9@dlB5p1i}cyJ@Oz<9<5@+rC{~8V}cmMzD$v zK!Rx8ofAeMIK)2`+d_Tx_DG7IL*gqdr+YuY(t+y5BH8Aw4f#(yu{6#|WUDK7r7wZ% zQMjNGn6P_6_{p8yN3*uLcOQXG^V%0ey$_~Q6W0^v|5TemJ!MePpe6P^U$JF8=8uIQ*(DJFr2sp0~`Tk)hcA*D*=ZraP{;hE9d9w4+rcbdrawt2~lm!4+ zW>j9!+}jws@~8;d&?GqF{pqhYs;)wJ)c%Yjypdo6l(3E~_h8CRp4`Hox zR;(YHieG?jkd(5ebe6Hx&%@YD6xL}U>N*PeY`F%hUhxoBMd>MeFik- z;%6RBu%TPL=ec2qn<(FwEnB`HUT%G_X#kIBYL6)Sv~_y__S5 z#ljQeyu%yi1XGp77C?cPBe(tqhthx5ywSczy@P+*J=;jRJV6sUD%$Dr+Ski+F?Yni z5Qo6~p*XxXL$uRcAVe$9UG4Nj{#-Gg8kUwKm9pjVHpnyB?4xoVp52qiz*AlmS0-z` z%AqXYu~kS^TM71!%P=tbm}sSmo!HPb(gcqHYfIN$2`rvDc(UE3DsxBfQCjS7CWPF6 z&`Ck}GTcb@8|fN&QQa_0(jd^5@4s)-fUoHSW)S@Zkhx}(8s#*9RyEv#^h;!r(Y`OaTY(LGMx>BUATx10wI^Em{p{B2d4solGE|*io&CO zC1|KP5G!{{*URzc>DeCBk=?3G*Qd+NlaBwN2TZaiDwdslMZ4sb0lG%du*$=Tl6|)& zoOvjIpy70jbft%I+F>v#o&vL0y{Gll-v%cdgYO;y zQ`VD6ib+-rKUM9;63YJ-^5|6pBU9GxVb$X15|42;0pcz#GLPdq`+4#!J$BZDi|k)} zteH1Qd86_`ch&^pLlh31ni9CMp+*t`a)4nZyRI#cB0zTb8SEc`aJrs7n;HOF z1W$|eP5sKOM*Zijw$kWVx9DbbDKh9hbtxy_y%(P_8|S!fKzK5zd+OhET%*ROtL34v zr{2$~Nq!D31wQZAA5ip{Yf-iu{?YzzE%Z8;g!|~2c&e-T;K|n(9oEhgJ(cU1P_I?T&7|h9KHCKR@J(tP7<)WbSP8 z9wb%-i+C7Ol4TnVtmqa))^6e>PDVSS_ARutFoG8(akyHb0^X#wzqh(dxBm?2P3~L7 z7{(c(+s^t7squ_NdD6+1qxOWsw;FbidC#Y9+m=KiYIw{J&ywFag)xLg+&@s9@4tO> zi+g?-D;0y{+95S?MF zXy)#91Re}7hqgn<9)PFY{#VCwCMwPn9gJATw@Jr5RswI5*&m=NB6wdSZfDLK+cPEI znPF%K)+7^uhp(g z(Sx#vPl{LER~CnHQ?x~u2-3&&XNJz(n(qjfQhxu(b!<9(&R3QN0G26SVBVxjE~Tfg2K0L5N)F=>0IIeDWDK`pqk%n8rAm+Q}tvI6(JcvPK;0 zCgZSevCLED=Gvd{p8_2a^$gnRn{V{{5j(W4udg|VulI{eiilucrR7k!N{R_7-v>$(;6C9}!e1?96rDI2qo=mGN+v z$9{S!=}(?|1?pHm*RqN|=c|g>hED}+Pqq$?=OXOka#ZuqI4D>1z8LvrI!DRjLUYLh zztf83(JQhB%w_2VA)ER<4waQIa?$w)C)PxFnn;XpAkiq`XPF4HwUHQP@i}j;MP3uX zx=^w`gf?ke3y$GN)wulPl2;3VI~>x{xtGoUCW1KOf-_O@|4G~YGkhYOW@a5^ie#9c zr?k?sS67T6@UO-QD|+of$8n6i+tVUdcM+q#D8=g+CZ?Aw=2k`8xJDDEerFB|6c;QN z2WcUW3gY9)FHo$64;^vHNacs(q%S(8n z{pPy~{k6MZ&XWX%hFB_sR^86%c<~c~l9CDGHONmKmItPqu|!_#V_-;LFT)1UHs7C_ zHT#f#63?)7XCu@x0m*UE_Im6tHxf+h^v9+z^19Pmfo;NHG=>j9?Gk_iVhPE{%x<>@ z8n&KB937z3Pb1P7SB1xb02*QWVr7t@p`Ek3st;M0Sp-fmB))?|k_Pvo%RWAHGi>)0 zI;<(^xtSb+;cBCig8aph&#qN@d4GVu_!gVm``5rM@#$}Dd_*j?!kuDDIcpOxG`Ba5 zMY&nK;OB%f}w8QVl3&Ef!Gl6W(Al~>8|aqQ&i+(v>|J5_B-%nF-eI)4t7WTD^d zm1_0SS_s^%q|nN95bv1T6E6ZeDI>}8hIgE?jyXL1I??aP(p;+r$LV2cuaPq9)a!qJ zQiB}fZ^M;r0qo2!udx&jVuF2(@ec#rN#W9iOnn3IJZ_`)P0kLm)~8j|TVqJ`Nr8_^ zaO6(U>+#%}rTj8!(qv#6QoozL$I@`l+DBTw3}@p(vcLRmQuIltZ}G@FGn8=a0Bjv# ze0~d79h_jzl2AIP6y>yP86i?oU_{P`Njx)F`=q9~cb z_#;itSGrqGWK{$D2C4a5y(8*Mx52_aQ;Fj11v`oN%V{rX` zT1r)jeyXbCsL_I012XaHH8-D{J?n1C{*`1(pIK`0$gDEa(=TiuGm;|0jdsKtr@V~b zwu|vKld|W&OGH z7ZYgVmN`a&q85C?)XOToc)h zYJZH2Af_cg8WThsH}~SBZ+vH;!O5)f86QbDfGc1ZoGTX1(-=3LsE$B2i0i%u=mKq( zmnX-?n9+X)2|8h8NC^sPEtCq_nhL)#`v~?|0d`dXTXHx(exSG=lSD{r#yyG;r=l*l zTYGFT<@yb1Kn57xnJh(K85v9MH2>a+|w3}u&@VhcMDwq*X zOTZ`#3XuAd35EwNqIP!-zo@nG=pycmv!^KRxoTC05l)^xp|O-;)v-^hp$~a-Z|SIvonu6keprdzv2}nGKL(nf*5_npVQcP3 zKu_u*g4nle=|z-QWHe3(EwgN0eTaP{`rUXLaDA)VD1)=uIO!s-una&y>pJ=dFWG>5 zN-%C&_U^MKAG(vE={2?jC*q=)D@nje1m0g>izv^r@QTheR)sdG&!2UOVw@7faGv|f zCs(u{kY{DNL~upVPF`P!Cm@|cflZ==#54;wdV+>odbOIL&4&cMNJxk*N~#>|0HF|7 zIJ<)Ag=4PP(WJ7fN@J zXi(}AryN-4`ZIba2y${DCGNLjl3?3Xk=$(u`Vbcx4-?|?O~O)l4m5^%uZNg|+YFjn z|21h)Yl#ti=4O_lL~Mh$)6kP`-h?17nEsKSR~y8WL118kV8B{SWL5L$9FP{EP36FA zJt4`kc*Rj)hN&EMwVGR6YCLH)Ha<8+;db{I4{8*osiL|UT!3~g^U4FT^yghTDYLmTb1=#$ML$S7tEg$JnR z5Zokg;;exmP$%vQeT|x{T02}n*ll@os--&V&U0Ugd2O9IQq(vo+uWj|Cut4Em^5?x z%MS~@Z2`}{T|D5_H$K$Q;K2qz!c-zQD0O;%oIS{Nc9AMf8}<&iWUQ3?oT$3O)m+-2 z6IT_&4YqKAGfAF8`Q7VHLYD^Mq8~haf@%^n^>@y1m5~->qhDwSL~^0uYV;COXE9a- zu5aVqgn2H-?tg12Rt_?X#&KkmZpbNNauGob`J7D|)i#WWp)K1Ia#SsYbKO`H{<*WE zcok9f-vRgU`EW!Y8EWNBgre9oK7_R?$;u$+(inc6nDvg}vJ|KC^_O&`A8N*!fwkX{FLQ2aPw`Ev zF5FwG%#-yrFCm45&uPzRx&6^lBse~N(Zu7r1lqQJjtY8dBONd-aYRO(ENA7!-m^S? zay`pyQ{U2E^4~g!WF6|3=AgHb_SY0QVEuVhYfA2dX97_pZIBP9r5#<1GylM}hZb)B(S`)sA@%Y8GeuR)_*}9}VE*PJt&Cu>8Vakj z;?X@pCSSN;G&1ND0<;@`9;$m6v09*yYg5;7wF#Igs964MyA!9o$vaali(bFe)}Mpo zOZwAFf>$&;d+lj?LA+)15A$CGgTj%RAM#bwJXsF3-|ziiWF9RmbwKzjYY?%J*b>1oh z$BV7~t4c;<{8`rhNeXJ4-}Te9mA$inF;3e(VE;A5#RB^Pu6HWPCqKCcf;j#?0P)yT zU7s>ovxLbjacy)_PA(k0YbjHzQXA*Y=rq9^Rk84B^HnHJIQSa{%w9JQb~7x62N;$& z?j#^t%ThWCcSE>xn)mQtv8YRil7c7`?eHz`6UH>h4nm`F8!8Fut{UhL1JCpqelHNJ zYlSl&NsVXN9XB|;FCp|<0!BLS^?NZq#M-zwQ_sTR2zqKKw)CQWd=VPd?maQdku(Sz znR_%VHh#-E8QE)<_nU!~Ybb-=wODk{KB-ui{{7;~f^N-P&!dM|;NR~;4Z>BzHgxzg zU69XvUFZ+x;}olh{B7|$`!MGzjo<=mE4gr`sxg-ysYzrZ=s$NP6fLAzi8b#)ngo-wJeeC#r^TQb4((u zZ4CzsEeS|VMB?^)?ARW$%N;6~dgmWFB~Z$deG+RQ3y{(##oH!8+Gmjn8et26wVV%UOjy~t{n|O9&;7#WBB2=*`IIK~?-vzm zf>SO59qKuK(Juq}@vS#alPtS9tI=u7360-I5r^bd$%;??U7~y;%Gdp=8>RfRl%-a} zq!5M~_O3=JGi~8}9+FAzF=sza=VY*}2n6_} zXmA0)rLO?Qf-}foo|I`T#~>Sp!jjLfWqV3NvDuB8GnWnO>hxJ%;RI(LFGCJ zyU#tazlI_yA66WO_@=tU2zyiD^|dr=DST)ghqZ)RU*ix0LTE{O1S-7}w7;L%u94u} zY0tQ+FkQZ7>`#y(({8A^Vd_j@YZFoX;aK7KL)?52Dt;b;84F1EwcRE!uBAvhV)tyv zBeQ8fLIu&#mo0vuzkc~24`O(T*8ZMBSyv=Fjr2q6Zy`KNq{A?aEzLns^TaMaCgJy(@XvNaOd~0;va~L^**r-ECV<*R@TMpk{ z4-?m=nK8WiTsy^K9G=8H7JN2ov4I|bw&Bs!ojiZC{zQ&f>Jdbks3GF}3))h>)V^u% z;Ub(Wi^x=GK}2OpKqCBBwsonvHZAzo;oN#)jJE|g^**4tC9QZX}cC1 z*SJ|Dh+r&Z#neP~qa>X{%y$CO#U)v5Ph$e<%IOsPpDP`r1d@#M-g*nn)wptAuT)YQEVB=rfBS@2iXqYYOFL45O2=iLX%;eC$2< z{YKMWJE;{o6)d0PI?s}jnqrvgAFbO&$#kcDlEorB9M>wq^!UiDv}!>>E1m6h zk4TdY`2z)RtJ2b}5#eo+-@OnmDinF5KU;0tKB^Ekyq()huWcc}lkJ*O)8x`g!pI7;(iu$}n4ui3GX(Q}l=h2UnOxKJb*(5%pd6H@R zjn1fY`pOi8!1`2`I^0BNckCO_6X$W+Jc}Lt1Ifc_f)6l&4Lfsz@5kjm3?M<8o*;hrb z7L;Ev3q-(oUgDyl=Gq443L=}PceV~X9teE6&a{PHcQl;a*Cq%?h=`tG5M?AWg~3EO zh!$ORV}{X<9=%SYlPFggf&_^W;YKgfqKhtSv=k*WCZdG+X54$fb-(rd*80tw_gVX# z{ha;mcfaSKJ!{r`1aX*m*`~KYxp*}1l$GMHt;VTKIi^S3F^(P(FUXT#A2}q$T!zpF z*az*DU)O%?cCo1GnLA3ZWHgkK2|wdUA50CDIvB6rJfSpKZcQ1*y*a&~5a=Mh4_`_1ufKok;<)yeC><38LB0S|3G*k_;2e`{|uZ18E;y2!E8cT^gHwB>Ta6a^dZm z$%bkZdT8@}=C?QNbyPuKR>e5G1KZPnfdhUNzZ1t-Ra6>ry!k-Z_M?(_?p>QSyo+L% zhyd!7XR>t`!vh31cJ_6{{vV0kWVbFEOvvz0;InXN zQg-C&vmj?WXMz7=-Te2Gvmj^UXKDD8ePaGI)~Vue%{zXDiS6XWldGtV(Ao_<+Dhei#?5ov$bej3iawmsDRJv@zBU=V9r+7&H!t^#+O>J30FRN#DQnxdFV3_4Xl210}?vl2AATCI!C<6PNlY zPZFPWZ#vHRus~8$aIh*CaVQ9&pzzODgi65vwH1v? zg#m)~FfK;E?f|eZ5H1Y>t2=x9_yQ$mNTv=J=SV6a41tgao_)w(H(ye|V0AZAQB<*Z z9`;yr^uPCez-+gCLHnjKjGDXuJ@TQlzj|V-0;`d-owxdR%|ztmpDeCd`VzlC0xYu#Msm>@ z(mN!MU5@*+!vBWt3nJHaw5OFn{aOG!(n1f$~`RQiE z57Vsyu*gW*#%FO+S9_RSg zZB$sk_;w`l?r6;71HnSkw}XgmVK1m=hqnO)8|kYZ6}A?6aw<5Cju$41YH;92-r_@T#N$rwc|&J-RqGIK!= zGzFiJ;f;4>cr3&5SluIao7udFbb@uzwIV8lBbyq%nh*`ml#g>#FTNMYcUiPn^tY&m z28GI?xh5f2nL3`5Q5o>FZ+Z{N7D-gNq#SPlUN#)5JEL^^4u`refyh zs(x#ewva)884Ho)re=OmfZoB#dUIIC%2)B3Ci+ts`MJS?J*r|mg`e-OSWw+m1&u%= zesl!AJmR6Y&l?s;8JhihVjtVLYBF3UJfk@IX@?nwi%A}v4es#h?=G5QbDbT#*h7$0 z;MHqSBg_NjSRQsDZH5Y}r1zT5+Py}R${+S4-lb0a%MX8-Q^?u`e&AnJQ3M?JHrn{g z+Ysl|9`4JxvlK+oZ3j{5({vSW1-EmF3jLJ-7=?cj)^b6fK&h+MU4$|Ne3_Aq=f0El zq{nczj4(m%LSdz)%;*K=HYoY=`WoSBbe0fQ8<5G>M!z`oO6?ps|@d6_QJ1cEq z9PKEJF|jwgFrLcsHu7UFewOh`nWPInE6)?Qq)-*>F&1MjcuLFy?38a3`s1Suoo}8KD{xDoXw;Y!pz9hJC}bIVLkAPEpf>KUXQy<}a=m0* zs#KmFwW90KS|U4cp#T0ua#ZxNAFHu%Yw@c$3_NNHjyw-0LmAWzoxjT7Fg`qFVnE<` zUKMVowRT2X35Uk0Vf>cRPqe1|%{=S1NmkC({yU&az%~-pcZ+L0`C+NZ*u_s`e1`qK zT|g1-@3F$Ah6lhh+n@&%8ebE5@s0CJl`2CxThpL-c^85?wP-Zb($&Y2hgVM0SwIU0 z=4F>3_PrJrX{{!JM1uQYrc)V|p1TkUT2(At@W7jE^D@&LR2dxMnXGYV*&HC%p2MY)s$2o0l(#LG!L#Lff-z|Srg^z@< zA=*AmD9qiEc2)RH^KfuPdNPV*GtfqUmj;!7aBAE&Oe6N-fY8o&xLUexSN%x{wabPg z`ZegLNrjAuxF05)Hj6!u_bYj^YZo%z95&D9tb6iVxOM+HE_|)v0A<>zTc!2od`<18 zUBsu;^`Dz{D4wiv;x8`Zs($pLnq64R*TrLuQ^;tpOqlnOk zKWzK#vC7_@ko*1eDFWAZ64r2I1E=VaJ1NGu-R~ru;dpON`gd^6_0FN0Pi26N?jl{3 zY-)d9cjf%x;k|~cm0HCEzF&8&2X`{P9JEXNQnU(6{oh!mj_1uSDULG{+v2Ua z>sT3vY$}TjPQKCyDnKvhdtVWY2}@?vPsHq|uhGUZz3P5EhMVk^um2^7be#@ZU+}t+ zTqz{uQAvDWm{LQ#ti0BP3dBfl?XdaQ@9hJg9tA&ut_D9CEggy0t{={0wzG0b)Nb^t zhY`ZNpI(f(G|8pILn-T(wYU;wy4*XvMM*VZ$9l={c=CpKxaIINt$`pXf2%QTVpe>W zF~w`+yaj7!@ez8x$#J2(OS*q}v1MqjUwSte+M)_ENeVQxgs1tDjuHFHGAla!Is=|B z|Lj8-2SIx9-~-zIdBdDFfi)a@H3#D5y5uvLFn@>fFqBXoBbkZ~GT)7=nA+wx5JB&0 zl_Q^8e7didkGb2T+i!zW(AUg2)Z7yT`6;KT(-!F#rRIxf^H`Lw7V?YH@c(AxU*_ekDp%RfeL7c6q5-hiS3U?P|#L+t=eOEDa8b*WV~i*=CBo zVwl#3#iTOjS(h0NHacc}&aQEzL(Ukb-r5=N&{SsJp=UM!JokZSdYDPBX(7)37dr|T zir-26S~Gl7Grq{j(W_e@JQWz+D}I$`8;lz=@cek~B}>x7t5>6p!t1TRbO_dK4=~~d zWiMTM!jM#`HxO5`41|Pw^AD z6QYpO30`>9DL?i6X{FU4drmL!O)YThDZCgcWiby9SIjR5UU89`CKCXQ^V4|#f9ADmJ zyv}VRtD`YrIeJ`ovU~a4TQliUM2JbZ8x8Wrpoo|~BG zI_a9I$U$UvK*Z3OWw$y02vn{*(S&K%-}~dJ*ye3Imz>Do4&!xY*`kK?W;d^&jusTUlpX4q?z$-rMe(pNGWl`BGolnIiZV)+I`2nzpb|ExW?av$zH9z z?J?uS_#&)?fqTKU(#+{<$>|(#?W0u%$}hNiO*oqQcBhO{zF!UZupVGce$VjW4;Z&nstRWwlxe-hkua|&D}T=7EVl=g(JxBdU? zSO2p~Ff+tD0Kl3!du#yE5(0!lC9DBpBj+Ge2LhD_AzKl^Z8^I_Ko(>t1&FU zqxEL#L<;G1mapYS4ZP<@T6c@MSBYsM zM`Z{63m)3r{r+d)Dfl84gbt}6f#!@f$a+BFyk&FXdKp4*1Ywle%Bc!TP6?lsyTN>- z&GAIzM-?gxTU6ylb2qNFe^X!JsDIiv|4UOfWv=Sd6WBcPsM7uIouVCknm2K+O|tqz zN69-KH;W27c;|(W`sO2>R27?pJqy0j9z__$_PKz6VO}cnB(ZSsK|KUcB!X;hRC4TW zRO0P7a47uI{J!~*aOQ?mfm53cA*^^**LyyL1F>jST*@@&M?Pop^`7w9xNwY^;4{lE zou(|FOFsFS-`QpXqU?v3P;kcGF4A9wCpu8ojbN=I%uS)G&B$!&*0>>5(Xo-+)8(cz z$@uM}8BpBD729odcHi*UeCI(wb#DaeP7qL|NHpg5`fD%E zM@I*6KA(X9<^kFOW+o;O6C*PS1Y%)fW@Q7jvt78r#($BA6D%YkA}k~Tfrv`nkP;QU zCJuo}--ce3lZU}zB2sXKvVz(TMVP|>{Dh8$g@x?`8y`D6pTZT$6@~xLBC}X+_N9T8-Vj785@t6kP*jSy(S!=HnN*Dk&um zm4PYUx~&XX(Y~XjtB2Azu(Yzav9+^zK)bnnczR*Hu|dHhp<&^;xcDatiBFU8=^2?> z+0S!wNyR0l)Uxu5%BmMlFPmFh+uC3C^uFus9~c}OrcF*w&&+=OH1~CRWp!bJ z|L4Ks(ecTz)3g7pRoQnvi}Dz?sHu93=BX9(Es3~qYpiQfZPm>SLB&4BF#ZA z0X$*~G0b4Cw4%mt7I8(3AH1%C6RejcU|+B9{|~hP1KIyOV6p$dko|99|2M8V02`3* zeDi?Z01dz)-^W#agW%e76)jg&S$z8mVyFJc%KFDh89Pb8 z;V3g1pMa-UIO~wLWc$Rwb~S5_rMD%@D4E-s3YcqLnxV0FpGvfD@Z8sASEq8O*6*{O z=zHbEScd^C=R?oi!Q>X%Yb~ER5k9WFnv#uvx-%n;Meaa`lPU$G_sq}td)CxF%?W(8Dky01Pys*K}bvRqwV0Z$OaE3Pxa z55be&eQE^;E?cvt+fZg~YdyG^(jOb9{$?tgL%{@Nm!H6}K{=f1LdT>OQbW4Cw~TI% zIZn2nMiXLHtR4pkP%!gE)Q-{hKbu+&Ije`IQbLanZgY6w@?#eAT41`xG6*{ys_0T9 zPo)tb=hM5V%5}oah~SlE>6#A96pLOGXWnK+Cbs&A;QofSJK@~_vA!s6XfDfZKm^S3zgyon@hPBTPLrKyq+^7%~WO<^TBeOmu}mP zbq3zE8*kwkY+KG0YZWV*BQT4L7+4vx$&!E5=#3M}0&**L?AN@%wu|D!m&_P6>BISy zhQj)-??W#D6e&IpY~?$SoXNF*b!+sz51*&%1UtXQ7ohVl)f@L6DIU7nH>1W~+7}+P z9umzp8Q55t)SwutLFr%gqB;f$8np9GRGYgBx3o+HQ~vB_2H> zS%L1C)jBtk1Hmn_!xXur}CWlg*{uT31#W6Y{ zjVK#E0I{u&i6uiy>nm5*c_ES|LNKmCeenVVBVa}bC6{W39DC-XnP}{3V-u&+kk)BvdI+R-O-VCYtencb{>4I3nMS{KA}06WhM zymddFLm7O9N0%vl%c<$df${HKsebqT59ED++h%?0n!PNq87FCL{bwX%{kc~QE{H28 zx{6WJ!7#)@JdWfCKPe}9L8ePwH2Y9*4K$%Wxwj!q;pKEF1iLh3BEZfJ0Rn#|F-e2p zfeZaH(B8RdaBz7H1zJpgO>Yd4Ab^~*SQ2ip23WeAAp5Q)n>I7Ej(MiV;AwZ-Lvmj z-fg@R_c&)7Gj0f`Tbkm6VZ>(1nme1ABLR_|sZ7=zoArV1T0WOH-Hjg_C?qtNJAUV_ z5l+C`cq-xK`WyWc=;~rmiN(cl%A}oY2 z&yjfhpFpNemUwndJP(zC7qRIq#ocZ3-@6eyFamH}dH^t~FHzv_oSN78WsYQ`I163} z03s&!OfsW=oHzK(LM165%Wwq-TrE6rn4lBnKATEA)t4aU zC0YKu`{%&PmA^sP1iJrWld8=nSW&ZPtT2`0J`pA1txy8nFU6N8_a=9R_61$i00#|8 z{;cCJPW6vS8GX$$Yo7jz-~1_4fluU%oe!ygL+fQQ*UxzvRtt<*q>lS?r_2exYUbxH z(iHJKzuu5o!`bYJ%B>Q=xvJMh8!^DrN$uf`U%@->yO@(*$isfSAM8*w@9zrj+?Amo zDG`FES{keg!Me_@Ok)-G;;;7W+KaX)>{JJ^>s(yKQ>6*heFluH#;$B+QR4x0ux7y% zRP{TVm!xX?ZO4B;P3v~Wa!QlY>j8Q3@fr4%lpxh3$9pmvpNO&{>;|;2$b_$a5pt!~ z_jUjMFgJARxm)q?CzEh-N-O8G&HakX-i(Qu@^7|IRswZio#Xc8v83-bL%En2fh>K2 zNE0j>==A(X!2{(hE0(`(eE;z`KfkI_dS**~(r;PLVH2KHBV^FD{!AG?*zffzS~py6 z*7)`lcbgA>d^m3Vrp?gQY)OUQxsI<%<=0EYCwpuX_7%wVk(%&6jp)|_N0kz-xynH< zdw4=Us9xzsdIVo!b6XrnZQn4Bh(JJ5eBJ$+k}F}WCw-T%7Mg+JC#kE1SjKRx+V+o>@H$_kmZVK*bV=%H*>h#}^)wR`>FZ-^ zwpTXG7+;NpI;Hzr`e101rYewu+ZaONn0mc*U@R0?$PhADmJ@xlcW0yv-1unWnAgx* z@7~gN*y7Icnm&qYWdL_-kn%l%`;__uoMtWg^#r=Yhvq&FICEF_;?45Eq(zl6BP zkf$ZgzM2TBSZbEX7^U@Onn880$m@w^T5z!6XT^R!-67oZcHbD`L;XJ`*#??_nvJ3s5O>rf7*l z1iWy{3-B;=DxTmP&lJvYX)Xmgn<~k2F(a~6-i1h5E>#}Z_@ulJuT4sMZ+CLXlN39F zjQKp`W8dO3_Q*y%^6Q?%jAOs@Dl1K5@NPkyzfWk-$iRx7WyZ^WhkutIsk2{X2-VIi z?_12}AD&#<_F=*Z4M9tf$}LSD(mx5b?lD(-xA_{|Fy2av<4&-e(HZ_aSQ}^m{8@rz zRo+Zb1u^QBj(x}RXtRehJ-JxVFsoE?1AJyv^E78QZ63Bj;KEJLf6p+ZB+ishu#3nB z*LlA4X$khr_n|uOtFKL$LD9dYmu!Fkeww%c`ilbc&^cs5;xgAgUv``&P1NMpT z;Q>)gC@FDpqK~H#CZ6VrP%dN%Nt+}Yk4A4$6$8MRJWq}3g*q2@$H2#$)x=-r?_z9$ z^|U+m_DRP{9tUEz_ z1V6bOyG`3Rubt&984{YZm=DLj^(N**``9o30Q}_3`413==B3SrB^tdpbLmKG+U$8_ zW}kwNv%TIdm;>Qkci-!EZ3=R0ahJ?JDmEc1)YTx8Ratve*&mI#tVDVb{Jpmt&+*|C z?-b_k<@#lSV=_>gmLCyOyYmr9c?$uE)sCria)|bn$YQps%HKVXm z1=-5R{e+Y#P*%9GscV;Ia(J)DgaVcS5vp3_2@_}LYNU_Cea?G5@188Ex^|%ImU2Ac z)`^WHM$F=kbrl}GHs3cSet_L;Yr!68uk9>F@S# z$aF>O8a8`Be@TuxE-=ED$v8+|s^CNCM;z-$iiB;!y~T%v$3N1VudV|E`h;|(l_er9 z1ATy1JsSi8F9_`f7Qgh{jDAIoK(_EZEDh;tgwe71w(k*Trn5R09Chf~UJ}4jO2$ma zA;R>N#>a1nw(>n4N$Q<%YhhN_pHm!ZH8W$ztueZ{3i zsH78?VZ_??Q%7@vVd}5lwBAGVzP@jO0z7FhyyjU+w$#kaHQ!iSnblRY6^C@`3i~W+ zy7A#>8^fg*P6t|}Mh6`5dnOJ1Qi{B0?Dfm#ZIoW8$8eN3sr~D~yuWVvh$IW;+2sZB zuYda$4~FCkXI4)iH1-9bo(yr6VfJCmu-Pz%~=w_Swm z-2M;XT^-VHG;!I(Y9>(w*KUbl59W@>-qV@;;X|6zl=1O!=V5uXrzs<*GF2aKqB3)&C=_6x~58Z8Q)3q^Ov&u2N;q?YC#P9GpT;kQF30N zNgj(+IdHLPiBT^lVN*XSP;Nc?DniAKBdns=Vs8cZPEBMqrn{7#a`^SUFr(|`FK61o zdz#kLCDs`O+xAD#kM3L!Gvug53RWYgxzR|q=K~rsL?fx}I*A`9#PnNgw1YOIY@PLr zs)hsyIr^@r7#I^2Q<0VaZBw7#x-UoC492m4t0qRP`;<-olkvG#dadR~#ZH^^Y(D*` zE@i5X+g_TzLHvEK={pfo`TGf#}$9=9ilX^|>E9M=|>* z!zPfF{-&_diOf>U#>~uF7PTh*X@Z=!>6CSN(7gStcWbkJ(Qp^2;WzTt{@hTIogHzNwQx)9BCFi)iO(dn4J6w8b<3qm;H#_f z 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°&jXac}~DR*|L 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

wdQR?FD-o?XEFF~#3pd_Mxw!GuWu6Eapmji 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 + + + + Google Summer of Code 2019 Ideas | GNU social + + + + + + + +

+
+ +

Ready?

+ + + + + + +
+

GNU social is a social communication software used in federated social networks. It is widely supported and has a large userbase. It is already used by the Free Software Foundation, and Richard Stallman himself.

+

If you would like to know how is it like to be a GSoC student at GNU social, read this blog post!

+

What would be expected from me?

+
+
Reliability Engineering
+
Fix bugs of current code base and ensure it stays functional
+
Software Engineering
+
Further development of GNU social v2
+
Computer Security Engineering
+
Ensure GS is secure
+
+

Every student will have to pick tasks in each of these fields in GS's GSoC. Excited already? Then read below some of our ideas and learn how you can be part of this!

+

Difficulty varies per task but in general GS's SoC is demanding, so you better be honestly interested and willing to work hard and learn a lot.

+
+
+

Ideas

+

Below is a list of (not very defined) ideas of things/areas you can work on this summer at GNU social. They are just ideas, not full proposals. You should pick some of them that seem to be related and talk on IRC about it. The community will help you understanding what has to be done so you can put a good proposal together.

+ +

Make the ActivityPub plugin started in previous GSoC reliable

+

In previous GSoC an ActivityPub plugin for GS was developed but isn't compatible with every piece of software used in the fediverse (only working with Mastodon so far) nor completely safe and robust for large usage.

+

Some of the existing key problems are:

+
    +
  • It is unable to de-duplicate when OStatus and ActivityPub are both enabled - mostly noticed between GS instances with both enabled;
  • +
  • Is unable to verify signatures which is an attack vector that makes the plugin unsafe for use right now;
  • +
  • It also doesn't make use of queues nor collections caching nor has any kind of circuit breaker implemented. This makes its use risky in a highly active GS instance.
  • +
+ +

Optimize how storage is used

+

Add support for temporary posts: This will allow support for "stories" and empower whole instances (and/or single users) to have temporary posts.

+

Optimize OEmbed plugin and further development on image handler: Work on this has already been started.

+ +

Review third party developer interfaces

+

There are various bots in the fediverse and we feel it might be about time to set them apart from humans so that we know who to kill when the robotic uprising comes, so to speak (ahem).

+

Ultimately, bots aren’t humans and, therefore, they shouldn’t have accounts claiming that they are “Persons”.

+

So some good measures for making change are:

+
    +
  • Introduce OAuth 2 in GNU social for authentication of clients that aren’t browsers;
  • +
  • Review current APIs for Tools that act in the User’s behalf and introduce a user platform for the management of those;
  • +
  • Review current APIs for Bots that act in their own behalf and introduce a developer platform for the management of those.
  • +
+

Technical sidenote for those who have read the ActivityPub standard: GS Bots are represented as Actors with the Application type, while GS Tools are an internal (not federated) thing that allow Actors with the Person type (commonly referred to as Users) to use third party tools to control their account.

+ +

“We have you noticed we’ve straighten every dent up”

+

Props to XRevan86 for that pun! (Notices in GNU social are colloquially referred to as Dents).

+

GNU social wants to get polished with a modern looking default theme. For this, it would be interesting to come up with some themes guidelines so, if you’re into web design, this might be the task for you! :)

+

On the other hand, if you are more into backend development, we’ve got you covered. Some new and interesting concepts in the world of Software Engineering were introduced and we are naturally looking forward to include them and refresh the current code base for the release of GNU social 2 with them!

+
+ + + + diff --git a/soc/2019/index.html b/soc/2019/index.html new file mode 100644 index 0000000..f3fa8af --- /dev/null +++ b/soc/2019/index.html @@ -0,0 +1,78 @@ + + + + + Google Summer of Code 2019 | GNU social + + + + + + + + +
+

What a summer!

+ +

We are truly proud of all the progress we made with the help of our students. GNU social mentees have to submit code on the level of typical contributors without spoon-feeding and that's something achieved in all of ours GSoC editions.

+

A GNU social contributor deals with {reliability, software and computer security} engineering. Mastery with full-stack web development and git is acquired in a hands-on way without ever dismissing theoretical computer science teachings for optimal efficiency and effective designs.

+

GNU social is a beautiful software that follows GNU and UNIX philosophies by heart.

+

A big thanks for all the support of our lovely community and devs who have been with us in yet another great journey!

+
+
+

Network Services Improvements

+

Proposed by Bruno Casteleiro and mentored by Diogo Cordeiro

+
    +
  • Improvements on OpenID support
  • +
  • Improvements on URLMapper
  • +
  • The Free Network - fluid transition between federation protocols
  • +
  • Some ActivityPub support improvements: +
      +
    • Add Queues
    • +
    • Add collection caching
    • +
    • Proper audience targetting
    • +
    • Inbox Forwarding
    • +
    • Groups over ActivityPub
    • +
    +
  • +
+ Technical Report +
+
+

Optimizations on Load Balance System and Storage Usage

+

Proposed by Miguel Dantas and mentored by Diogo Cordeiro

+
    +
  • Improvements on the OEmbed plugin (turned into Embed plugin)
  • +
  • Improvements on the Media Handling System
  • +
  • Added Redis support (queues and caching)
  • +
  • Fixed Memcached support
  • +
+ Technical Report +
+ + diff --git a/soc/2019/tech_report/load/index.html b/soc/2019/tech_report/load/index.html new file mode 100644 index 0000000..882f73a --- /dev/null +++ b/soc/2019/tech_report/load/index.html @@ -0,0 +1,109 @@ + + + + + + Optimizations on Load Balance System and Storage Usage - Tech Report - GNU social Summer of Code 2019 + + + + + + + + + +

About

+

What is this document?

+

This is a technical Google Summer of Code Project Report describing briefly what I did from May 6 to August 26. +

+

All the code I wrote during this period is available + here. +

+

This document helps understand what was done in a simple and informal way, highlighting the most relevant parts, why some decisions were made and what I’ve learned with it.

+

From May 6 to May 27 I had to familiarize myself with the GNU social’s plugins and events API, as well as other internal components and the community.

+

What is GNU social?

+

GNU social is a social communication software used in federated social networks. That requires queues and caching systems that are friendly to use and yet powerful and robust enough to handle the high load in servers with limited network, low storage + and reduced processing power. While scalable enough to take advantage of more powerful systems.

+

Abstract

+

TODO

+

Benefits

+
    +
  • Improvements on the Image Systems
  • +
  • Improvements of the Embed plugin
  • +
  • Improvements on the Queue System
  • +
  • Improvements on the Caching System
  • + +
+

Image System

+

The new Image handling system was my first bigger project and in it I essentially reviewed and refactored the existing code, followed by making sure a consistent and filesystem safe encoding is use for the filename, which is then further provided + when the file download is requested. This very file download was moved into PHP code so that the code could have easy control over what files are accessed; the main goal with this change was to allow arbitrary file uploads, while still ensuring + that no file is directly publicly accessible, as a misconfigured webserver or a maliciously crafted file could cause unwanted execution. In addition, this will allow, in the future, for easy permission control, via events, if a plugin to do so + is written. Along the same lines, it was important to make image validation more aggressive. While not immediately apparent, an image and a script may be contained in the same file and it was possible for a file to be identified as an image by + the upload code and then be executed by the webserver.

+

Embed Plugin

+

The existing Oembed plugin did a valiant attempt trying to get both Oembed and OpenGraph info about a page. The problem, besides the poor name given the dual purpose, was that it used an in-house implementation, which was not complete. This was therefore + replaced by an external library called Embed, by oscarotero. After refactoring and checking the existing code, as well as making sure the same filename conventions as above were in effect, image handling became significantly + more robust, eliminating the barrage of errors users would previously see, instead of images. In addition, I made it so only a configurable thumbnail size for the images was saved to disk, while still supporting upscaling should further themes + need it, which should significantly reduce disk space usage.

+

Queue System

+

The queue system received a refactor and checking, modernizing and cleaning up the code in places. I also added the option to use Redis as a backing for this, through a new RedisQueue plugin.

+

In addition, the existing DB, STOMP and UNQUEUE queue managers were broken out into plugins, allowing for easier management as well as making it more unified.

+

Caching System

+

Similarly, the caching system received the same treatment and a new RedisCache plugin was created.

+ +

Final Words

+

GSoC was a wonderful experience for me. I now feel more comfortable with the GNU social’s codebase as well as more confident in tackling other such large codebases. I learned a lot of useful stuff general software design principles, maintainability, + web security and Redis. I’ve also learned more about git and how libre and open source software development is made and organized.

+

I look forward to regularly contributing to GNU social and other projects.

+

Thanks to Diogo Cordeiro for such a wonderful experience and the help and knowledge he lent.

+ + + diff --git a/soc/2019/tech_report/network/index.html b/soc/2019/tech_report/network/index.html new file mode 100644 index 0000000..76eceee --- /dev/null +++ b/soc/2019/tech_report/network/index.html @@ -0,0 +1,166 @@ + + + + + + Improvements on GNU social's network systems - Tech Report - GNU social Summer of Code 2019 + + + + + + + + + +

About

+

What is this document?

+

This is a technical Google Summer of Code Project Report describing briefly what I did from May 27 to August 19.

+

The whole code I wrote during this period is available here.

+

This document helps understanding what was done in a simple and informal way, highlighting the most relevant parts, why some decisions were made and what I've learned with it. Unless explicitly said, the order in which I'll write about my tasks may + not exactly correspond to the real order by which I did the work.

+

What is GNU social?

+

GNU social is a social communication software used in federated social networks.

+

Abstract

+

My work for this summer involved, in a general way, working the different network systems of GNU social. Due to an unexpected increase of the workload in some of the tasks, my plan, although still related to network systems, turned to be a lot more + focused in the ActivityPub protocol, a communication standard for federated software. During my journey, other systems like the OpenID protocol or the internal url mapper were part of my work.

+

Benefits

+
    +
  • Ensuring federation of GNU social with other software that only implement the ActivityPub protocol.
  • +
  • Extending the ActivityPub implementation to correctly handle new interactions important in a social network.
  • +
  • Fix, extend and improve core code, ensuring better and greater usability.
  • +
+

OpenID

+

OpenID is an authentication protocol that allow users to use an unique identifier to login in multiple sites without needing to individual registration in each of them.

+

In GNU social, OpenID support is provided by a plugin and my task was to perform a revision of it.

+ +

During my revision it was necessary to update the external libraries used by the plugin. Since no code changes were required afterwards, this was a trivial update.

+

The OpenID user interface was also updated. Users had no option to choose whether to sync or not their GNU social accounts when adding an OpenID identifier in the settings. I've extended the interface with such sync option.

+

Learnings

+

Being the first task, reviewing OpenID helped me to better understand how plugins were structured and the back/front-end code interaction.

+

Routing

+

Internally, the URLMapper class is responsible for the creation of the many routes used in GNU social. This class was known for having a few issues and, having affected some of my work during other tasks, I was responsible to fix some + of those issues in different times during the summer.

+ +

Fully reworking the Mapper was considered as an option at a certain time, however, taking into account the many routes spread all over the codebase and my work schedule, I decided that fixing the existent class in the best way possible was the safest + and more rentable option I could take.

+

Accept-Headers

+

One of the first changes to the Mapper were result of needing to have two or more routes with exactly the same path to coexist, differentiated only by the accept-headers that should be set in the request.

+

This necessity was solved by extending the route creation function with an option array of accept-headers. When populated, the function verifies the request accept-headers and in case of any match, it stores/substitutes the new route in the appropriate + variables. +

+

Wrong matching

+

In some cases, some paths that would differ from one another only in their regex attributes were being routed. Although fundamentally equal, these paths generated different regex's during route creation. Because of this and because of being stored + by order of arrival, path matching was matching the wrong route in some cases.

+

This problem was solved by simply storing new routes at the head of the according array variable.

+

Dynamics first!

+

The Mapper distinguishes what are dynamic and static routes. Static routes are the ones with regex attributes in their paths. Because of both being stored in the same place, grouped by the action to be executed, some static routes were incorrectly + being matched in the place of the dynamic ones, simply because of being found first in the storage array.

+

It makes sense to look all dynamic routes first, specially when these don't have the problem of wrongly match with a request for a static route. Therefore, this problem was solved by separating both types in different variables and explicitly enforcing + the lookup of the dynamic routes first.

+

So many routes!

+

Spread all over the codebase, a great deal of the calls to the route creation function were making an improper use of the function parameters. All these calls were appropriately fixed.

+

Learnings

+

Specially because of some undo/redo that these changes required, this task was important for me to be more cautious with core code changes. Verification of the surrounding code and careful analysis of the changes to be done is very important.

+

Private Messaging

+

GNU social private messaging support is provided with the DirectMessage plugin . By requirement of the changes related to ActivityPub, this plugin end up being totally reworked by me.

+ +

The plugin suffered many changes in practically all of its code, making it hard to write about every change. Still, because of their importance, three changes are worth of an highlight spot:

+

Porting to the Notice DB table

+

GNU social already had notices, so it didn't make much sense to have a separated table just for private messages. The most important part of this port was ensuring an upgrade function and the correct handling of a newly introduced Notice MESSAGE_SCOPE scope.

+

Supporting multi-recipient

+

Porting to the Notice table automatically enabled text mentioning, so with just a few adjustments the plugin was handling multi-recipient messages.

+

Supporting federation

+

Of course, the whole reason for this task. Events were added in key points of the private messaging flow for the federation plugins to subscribe and handle in their own way.

+

Learnings

+

Because of its big extent, this task was a test to everything I had learned so far and, therefore, completing it gave me great pleasure and some energy boost for what was to come. In particular, I've learned how to add upgrading logic to plugins.

+

ActivityPub

+

Support for the ActivityPub protocol in GNU social is given by means of a plugin wrote by my own mentor, during last year's edition of GSoC. Since the last tests with other federated software some things changed and it was known that some interactions + weren't properly working, so part of my job was to review and ensure ActivityPub could federate again. Furthermore, some functionality was yet to be implemented and other came along the way, summing up the reasons as for why this task to consume + more time than the expected.

+ +

Following, the most important changes this plugin seen this summer:

+

Follow collections

+

The followers/following endpoints for ActivityPub users weren't retrieving the most accurate information due to accounting invalid users. This was easily fixed by porting and correctly adapting the subscriptions functions from the core to the plugin. + Furthermore, I've handled the caching of these collections.

+

Ensuring federation

+

This sub-task involved ensuring the operation of all interactions supported by the plugin, both from the sender and receiver sides. These interactions are: Accept-Follow, Create-Note, Delete-Note, Follow-Person, Like, Undo-Follow, Undo-Like and Announce. + In some of the cases the changes were something trivial, others require small function rewrites and bug-fixing. The interactions were tested with remote instances of GNU social, Pleroma, Mastodon and Pixelfed.

+

Later I've also introduced and ensured the operation of the Delete-Person activity.

+

Queue support

+

The GNU social queue system was added for ActivityPub notice distributions, these were proving to be quite a time consuming experience.

+

Audience targeting

+

At this point me and my mentor, Diogo, agreed that, despite not being supported in GNU social, we should still properly handle the different non-public types of notes that the inbox could receive, like the unlisted, followers-only or private/direct + types.

+

Handling private notes was fairly easy since I had already reworked the DirectMessage plugin, so it was only needed to introduce a new Create-Direct-Note activity and subscribe the DirectMessage events. It is worth mentioning that this + type of note has (yet) no standard way to be differentiated. After some research me and Diogo decided that making GNU social conforming with the discussed directMessage flag was the best way to handle the activity.

+

The unlisted and followers-only types of note were handled by storing such notices with a special GATEWAY type flag. This flag was originally introduced to represent notices with origin in services other than the OStatus protocol. Being + that way guarantees that the notice won't show in the public timelines. For the time being, I believe this is the best option for handling such note types: 1. easy to change (if required) in the future when proper support for these types is added + and 2. provides at least the minimum requirements of visibility scope.

+

Learnings

+

With this task I've learned how to use more systems of the program, like the caching and queue systems. Furthermore, I gained further knowledge in different aspects of the ActivityPub standard.

+

Remote Actions

+

Remote-follow button

+

Aiming to provide better user experience and to ensure federation in a general way, this task led to a new RemoteFollow plugin. This plugin is responsible to fully control the remote-follow button that shows on user profiles and to provide + the necessary events for all federation plugins to subscribe and make this button work.

+ +

As there isn't no standard way to treat a remote-follow button ActivityPub, the common way to do it is to extend the logic of OStatusSub, the OStatus way of handling such button. That is precisely what I did. I've ported the necessary actions related + to remote-following a user from the OStatus plugin and adapted it to be event-driven.

+

Learnings

+

This task was my first time working in the OStatus plugin, so I learned some details of its implementation.

+ +

I've introduced the "ActivityPub way" of fetching remote users and notices, allowing remote-following users without needing to leave the local instance.

+

Anything left to do?

+

Of course, there's always something more to do :)

+
    +
  • Further ActivityPub improvements (e.g Inbox Forwarding)
  • +
  • ActivityPub C2S (part of the original plan)
  • +
  • Some minor TODOs I left in the DirectMessage plugin (not crucial)
  • +
+ + diff --git a/soc/2020/academics.html b/soc/2020/academics.html new file mode 100644 index 0000000..61b7e69 --- /dev/null +++ b/soc/2020/academics.html @@ -0,0 +1,222 @@ + + + + + Assessment | GNU social SoC + + + + + + + +
+

Grading System employed

+

Effective Grading

+

Either pass or fail.

+

Qualitative Grading

+ + + + + + + + + + + + + + + + + + + + + + + + + +
GradeDefinition
31337Outstanding
1337Very Good
42Competent
0Failed
+

Method

+

Graded every month, the ceiled average is the final.

+

No Quantitative Grading system will be used.

+

The contributions will be evaluated according to the following directives:

+
+

Autonomy with which the work was done

+
+
    +
  • Low (was unable to progress autonomously);
  • +
  • Competent (some autonomy but with blocking situations that required the
    + intervention of the mentor);
  • +
  • Very Good (very good ability to solve problems independently in useful time
    + with the mentor mostly focused on defining the next steps of the work);
  • +
  • Outstanding (is sometimes able to suggest surprising and valid alternatives to what was originally planned by the mentor).
  • +
+
+

Objectives satisfaction

+
+
    +
  • Low (haven't reached to the minimum objectives admissible for the proposed work);
  • +
  • Competent (the objectives were reached though not entirely);
  • +
  • Very Good (reached up fully);
  • +
  • Outstanding (exceeded up the objectives set).
  • +
+
+

Intrinsic difficulty level of their work

+
+
    +
  • Low (relatively easy work, both from a scientific or technical point of view,
    + based on widespread knowledge);
  • +
  • Competent (work with some high complexity of details requiring more advanced
    + knowledge/expertise, either technical or scientific);
  • +
  • Very Good (relatively complex work, requiring a substantial knowledge and
    + technical skills, or resulting in some innovative contribution);
  • +
  • Outstanding (InSaNe).
  • +
+

Grade formula per month

+
+                                Autonomy level
+Satisfaction of objectives |    Low     Competent       Very Good       Outstanding
+                -----------+-------------------------------------------------------
+                Low        |    0       0               0               0
+                Competent  |    42      42              42              1337
+                Very Good  |    42      1337            1337            31337
+                Outstanding|    42      1337            1337            31337
+
+                        Grade from matrix above
+Difficulty level   |    0       42              1337    31337
+        -----------+-----------------------------------------
+        Low        |    0       0               42      1337
+        Competent  |    0       42              1337    1337
+        Very Good  |    0      1337             1337    1337
+        Outstanding|    0      1337             1337    31337
+
+
+

Modules

+

N.B.: The following are the minimum averages in GNU social's Summer of Code, we will come up with a custom + "transcript" for any interested student.

+

Web Technologies

+

Amount of time allocated to each module unit

+ + + + + + + + + + + + + + + + + + + + + + + + + +
DesignationTime (hours)
Autonomous study80
Mentorship20
Project work46
Total146
+

Assessment Components

+ + + + + + + + + + + + + + + + + +
DesignationWeight (%)
Proposal80
Proof of Competence20
+

Proposed Credits

+

1 Carnegie Unit
+ 5 ECTS

+

Proposal Rating Guidelines

+


+

Internship | Training

+

Amount of time allocated to each module unit

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DesignationTime (hours)
Internship276.5
Autonomous Study93.5
Final Report24
Mentorship44
Total438
+

Assessment Components

+ + + + + + + + + + + + + +
DesignationWeight (%)
Practical or project work100
+

Proposed Credits

+

4 Carnegie Unit
+ 18 Austria, Italy, and Spain ECTS
+ 16 Finland, The Netherlands, Portugal, and Russia ECTS
+ 15 Germany, Belgium, Romania, and Hungary ECTS

+
+ + diff --git a/soc/2020/accepted_proposals/frontend_eliseu.pdf b/soc/2020/accepted_proposals/frontend_eliseu.pdf new file mode 100644 index 0000000..3155717 --- /dev/null +++ b/soc/2020/accepted_proposals/frontend_eliseu.pdf @@ -0,0 +1,13454 @@ +%PDF-1.7 +%öäüß +1 0 obj +<< +/AcroForm 2 0 R +/Lang (en-US) +/MarkInfo << +/Marked true +>> +/Metadata 3 0 R +/Outlines 4 0 R +/Pages 5 0 R +/StructTreeRoot 6 0 R +/Type /Catalog +/ViewerPreferences 7 0 R +>> +endobj +8 0 obj +<< +/Author (Eliseu Amaro) +/CreationDate (D:20200330181403+01'00') +/Creator (LaTeX) +/ModDate (D:20200330184739+01'00') +/Producer (LaTeX) +/Title (GNU social New Frontend Classic) +>> +endobj +2 0 obj +<< +/DA (/Helv 0 Tf 0 g ) +/DR << +/Encoding << +/PDFDocEncoding 9 0 R +>> +/Font << +/Helv 10 0 R +/ZaDb 11 0 R +>> +>> +/Fields [] +>> +endobj +3 0 obj +<< +/Type /Metadata +/Subtype /XML +/Length 12 0 R +>> +stream + + + + + + + +GNU social New Frontend Classic + + + + +Eliseu Amaro + + +application/pdf + + + + + +endstream +endobj +4 0 obj +<< +/Count 15 +/First 13 0 R +/Last 14 0 R +/Type /Outlines +>> +endobj +5 0 obj +<< +/Type /Pages +/Count 7 +/Kids [15 0 R 16 0 R 17 0 R 18 0 R 19 0 R 20 0 R 21 0 R] +>> +endobj +6 0 obj +<< +/Type /StructTreeRoot +/RoleMap 22 0 R +/ParentTree 23 0 R +/K [24 0 R] +/ParentTreeNextKey 7 +>> +endobj +7 0 obj +<< +/DisplayDocTitle true +>> +endobj +9 0 obj +<< +/Differences [24 /breve /caron /circumflex /dotaccent /hungarumlaut /ogonek /ring /tilde 39 +/quotesingle 96 /grave 128 /bullet /dagger /daggerdbl /ellipsis /emdash /endash +/florin /fraction /guilsinglleft /guilsinglright /minus /perthousand /quotedblbase /quotedblleft /quotedblright /quoteleft +/quoteright /quotesinglbase /trademark /fi /fl /Lslash /OE /Scaron /Ydieresis /Zcaron +/dotlessi /lslash /oe /scaron /zcaron 160 /Euro 164 /currency 166 +/brokenbar 168 /dieresis /copyright /ordfeminine 172 /logicalnot /.notdef /registered /macron +/degree /plusminus /twosuperior /threesuperior /acute /mu 183 /periodcentered /cedilla /onesuperior +/ordmasculine 188 /onequarter /onehalf /threequarters 192 /Agrave /Aacute /Acircumflex /Atilde +/Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute +/Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply +/Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute +/acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis +/igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde +/odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] +/Type /Encoding +>> +endobj +10 0 obj +<< +/BaseFont /Helvetica +/Encoding 9 0 R +/Name /Helv +/Subtype /Type1 +/Type /Font +>> +endobj +11 0 obj +<< +/BaseFont /ZapfDingbats +/Name /ZaDb +/Subtype /Type1 +/Type /Font +>> +endobj +12 0 obj +951 +endobj +13 0 obj +<< +/A 25 0 R +/Next 26 0 R +/Parent 4 0 R +/Title (GNU social - New Frontend Classic) +>> +endobj +14 0 obj +<< +/A 27 0 R +/Parent 4 0 R +/Prev 28 0 R +/Title (Reference) +>> +endobj +15 0 obj +<< +/Contents 29 0 R +/Group << +/CS /DeviceRGB +/S /Transparency +/Type /Group +>> +/MediaBox [0 0 612 792] +/Parent 5 0 R +/Resources << +/ExtGState << +/GS0 30 0 R +>> +/Font << +/C2_0 31 0 R +/C2_1 32 0 R +/TT0 33 0 R +/TT1 34 0 R +>> +/ProcSet [/PDF /Text] +>> +/StructParents 0 +/Tabs /S +/Type /Page +>> +endobj +16 0 obj +<< +/Contents 35 0 R +/Group << +/CS /DeviceRGB +/S /Transparency +/Type /Group +>> +/MediaBox [0 0 612 792] +/Parent 5 0 R +/Resources << +/ExtGState << +/GS0 36 0 R +>> +/Font << +/C2_0 32 0 R +/C2_1 31 0 R +/TT0 33 0 R +/TT1 37 0 R +/TT2 34 0 R +>> +/ProcSet [/PDF /Text /ImageC] +/XObject << +/Im0 38 0 R +/Im1 39 0 R +>> +>> +/StructParents 1 +/Tabs /S +/Type /Page +>> +endobj +17 0 obj +<< +/Contents 40 0 R +/Group << +/CS /DeviceRGB +/S /Transparency +/Type /Group +>> +/MediaBox [0 0 612 792] +/Parent 5 0 R +/Resources << +/ExtGState << +/GS0 41 0 R +>> +/Font << +/C2_0 42 0 R +/C2_1 31 0 R +/C2_2 32 0 R +/TT0 33 0 R +/TT1 37 0 R +/TT2 34 0 R +>> +/ProcSet [/PDF /Text /ImageC] +/XObject << +/Im0 43 0 R +/Im1 44 0 R +>> +>> +/StructParents 2 +/Tabs /S +/Type /Page +>> +endobj +18 0 obj +<< +/Contents 45 0 R +/Group << +/CS /DeviceRGB +/S /Transparency +/Type /Group +>> +/MediaBox [0 0 612 792] +/Parent 5 0 R +/Resources << +/ExtGState << +/GS0 46 0 R +>> +/Font << +/C2_0 32 0 R +/C2_1 31 0 R +/TT0 33 0 R +/TT1 34 0 R +/TT2 47 0 R +>> +/ProcSet [/PDF /Text /ImageC] +/XObject << +/Im0 48 0 R +/Im1 49 0 R +>> +>> +/StructParents 3 +/Tabs /S +/Type /Page +>> +endobj +19 0 obj +<< +/Contents 50 0 R +/Group << +/CS /DeviceRGB +/S /Transparency +/Type /Group +>> +/MediaBox [0 0 612 792] +/Parent 5 0 R +/Resources << +/ExtGState << +/GS0 51 0 R +>> +/Font << +/C2_0 32 0 R +/C2_1 31 0 R +/TT0 33 0 R +/TT1 34 0 R +>> +/ProcSet [/PDF /Text /ImageC] +/XObject << +/Im0 52 0 R +>> +>> +/StructParents 4 +/Tabs /S +/Type /Page +>> +endobj +20 0 obj +<< +/Contents 53 0 R +/Group << +/CS /DeviceRGB +/S /Transparency +/Type /Group +>> +/MediaBox [0 0 612 792] +/Parent 5 0 R +/Resources << +/ExtGState << +/GS0 54 0 R +>> +/Font << +/C2_0 31 0 R +/TT0 33 0 R +/TT1 34 0 R +/TT2 47 0 R +>> +/ProcSet [/PDF /Text] +>> +/StructParents 5 +/Tabs /S +/Type /Page +>> +endobj +21 0 obj +<< +/Contents 55 0 R +/Group << +/CS /DeviceRGB +/S /Transparency +/Type /Group +>> +/MediaBox [0 0 612 792] +/Parent 5 0 R +/Resources << +/ExtGState << +/GS0 56 0 R +>> +/Font << +/C2_0 31 0 R +/C2_1 32 0 R +/C2_2 42 0 R +/TT0 33 0 R +/TT1 34 0 R +/TT2 37 0 R +>> +/ProcSet [/PDF /Text] +>> +/StructParents 6 +/Tabs /S +/Type /Page +>> +endobj +22 0 obj +<< +/Footnote /Note +/Endnote /Note +/Textbox /Sect +/Header /Sect +/Footer /Sect +/InlineShape /Sect +/Annotation /Sect +/Artifact /Sect +/Workbook /Document +/Worksheet /Part +/Macrosheet /Part +/Chartsheet /Part +/Dialogsheet /Part +/Slide /Part +/Chart /Sect +/Diagram /Figure +>> +endobj +23 0 obj +<< +/Nums [0 [57 0 R 58 0 R 59 0 R 60 0 R 61 0 R 62 0 R 63 0 R 64 0 R 65 0 R 66 0 R +67 0 R 68 0 R 69 0 R 70 0 R 71 0 R 72 0 R 73 0 R 74 0 R 75 0 R 76 0 R +77 0 R 78 0 R 79 0 R 80 0 R 81 0 R 82 0 R 83 0 R 84 0 R 85 0 R 86 0 R +87 0 R 88 0 R 89 0 R 90 0 R 91 0 R 92 0 R 93 0 R 94 0 R 95 0 R 96 0 R +97 0 R 98 0 R 99 0 R 100 0 R 101 0 R 102 0 R 103 0 R 104 0 R 105 0 R 106 0 R +107 0 R 108 0 R 109 0 R 110 0 R 111 0 R 112 0 R 113 0 R 114 0 R 115 0 R 116 0 R +117 0 R 118 0 R 119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 126 0 R +127 0 R 128 0 R 129 0 R 130 0 R 131 0 R 132 0 R 133 0 R 134 0 R 135 0 R 136 0 R +137 0 R 138 0 R 139 0 R 140 0 R 141 0 R 142 0 R 143 0 R 144 0 R 145 0 R 146 0 R +147 0 R 148 0 R 149 0 R 150 0 R 151 0 R 152 0 R 153 0 R 154 0 R 155 0 R 156 0 R +157 0 R 158 0 R 159 0 R 160 0 R 161 0 R 162 0 R 163 0 R 164 0 R 165 0 R] + 1 [166 0 R 167 0 R 168 0 R 169 0 R 170 0 R 171 0 R 172 0 R 173 0 R 174 0 R 175 0 R +176 0 R 177 0 R 178 0 R 179 0 R 180 0 R 181 0 R 182 0 R 183 0 R 184 0 R 185 0 R +186 0 R 187 0 R 188 0 R 189 0 R 190 0 R 191 0 R 192 0 R 193 0 R 194 0 R 195 0 R +196 0 R 197 0 R 198 0 R 199 0 R 200 0 R 201 0 R 202 0 R 203 0 R 204 0 R 205 0 R +206 0 R 207 0 R 208 0 R 209 0 R 210 0 R 211 0 R 212 0 R 213 0 R 214 0 R 215 0 R +216 0 R 217 0 R 218 0 R 219 0 R 220 0 R 221 0 R 222 0 R 223 0 R 224 0 R 225 0 R +226 0 R 227 0 R 228 0 R 229 0 R 230 0 R 231 0 R 232 0 R 233 0 R 234 0 R 235 0 R +236 0 R 237 0 R 238 0 R 239 0 R 240 0 R 241 0 R 242 0 R 243 0 R 244 0 R 245 0 R +246 0 R 247 0 R 248 0 R 249 0 R 250 0 R 251 0 R 252 0 R 253 0 R 254 0 R 255 0 R +256 0 R 257 0 R 258 0 R 259 0 R 260 0 R 261 0 R 262 0 R 263 0 R 264 0 R 265 0 R +266 0 R 267 0 R 268 0 R 269 0 R 270 0 R 271 0 R 272 0 R 273 0 R 274 0 R 275 0 R +276 0 R 277 0 R 278 0 R 279 0 R 280 0 R 281 0 R 282 0 R 283 0 R 284 0 R 285 0 R +286 0 R 287 0 R 288 0 R 289 0 R 290 0 R 291 0 R 292 0 R 293 0 R 294 0 R 295 0 R +296 0 R 297 0 R 298 0 R 299 0 R 300 0 R 301 0 R 302 0 R 303 0 R 304 0 R 305 0 R +306 0 R 307 0 R 308 0 R 309 0 R 310 0 R 311 0 R 312 0 R 313 0 R 314 0 R] + 2 [315 0 R 316 0 R 317 0 R 318 0 R 319 0 R 320 0 R 321 0 R 322 0 R 323 0 R 324 0 R +325 0 R 326 0 R 327 0 R 328 0 R 329 0 R 330 0 R 331 0 R 332 0 R 333 0 R 334 0 R +335 0 R 336 0 R 337 0 R 338 0 R 339 0 R 340 0 R 341 0 R 342 0 R 343 0 R 344 0 R +345 0 R 346 0 R 347 0 R 348 0 R 349 0 R 350 0 R 351 0 R 352 0 R 353 0 R 354 0 R +355 0 R 356 0 R 357 0 R 358 0 R 359 0 R 360 0 R 361 0 R 362 0 R 363 0 R 364 0 R +365 0 R 366 0 R 367 0 R 368 0 R 369 0 R 370 0 R 371 0 R 372 0 R 373 0 R 374 0 R +375 0 R 376 0 R 377 0 R 378 0 R 379 0 R 380 0 R 381 0 R 382 0 R 383 0 R 384 0 R +385 0 R 386 0 R 387 0 R 388 0 R 389 0 R 390 0 R 391 0 R 392 0 R 393 0 R 394 0 R +395 0 R 396 0 R 397 0 R 398 0 R 399 0 R 400 0 R 401 0 R 402 0 R 403 0 R 404 0 R +405 0 R 406 0 R 407 0 R 408 0 R 409 0 R 410 0 R 411 0 R 412 0 R 413 0 R 414 0 R +415 0 R 416 0 R 417 0 R 418 0 R 419 0 R 420 0 R 421 0 R 422 0 R 423 0 R 424 0 R +425 0 R 426 0 R 427 0 R 428 0 R 429 0 R 430 0 R 431 0 R 432 0 R 433 0 R 434 0 R +435 0 R] + 3 [436 0 R 437 0 R 438 0 R 439 0 R 440 0 R 441 0 R 442 0 R 443 0 R 444 0 R 445 0 R +446 0 R 447 0 R 448 0 R 449 0 R 450 0 R 451 0 R 452 0 R 453 0 R 454 0 R 455 0 R +456 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R 462 0 R 463 0 R 464 0 R 465 0 R +466 0 R 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R +476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R +486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R 494 0 R 495 0 R +496 0 R 497 0 R 498 0 R 499 0 R 500 0 R 501 0 R 502 0 R 503 0 R 504 0 R 505 0 R +506 0 R 507 0 R 508 0 R 509 0 R 510 0 R 511 0 R 512 0 R 513 0 R 514 0 R 515 0 R +516 0 R 517 0 R 518 0 R 519 0 R 520 0 R 521 0 R 522 0 R 523 0 R 524 0 R 525 0 R +526 0 R 527 0 R 528 0 R 529 0 R 530 0 R 531 0 R 532 0 R 533 0 R 534 0 R 535 0 R +536 0 R 537 0 R 538 0 R 539 0 R 540 0 R 541 0 R 542 0 R 543 0 R 544 0 R 545 0 R +546 0 R 547 0 R 548 0 R 549 0 R 550 0 R 551 0 R 552 0 R 553 0 R 554 0 R 555 0 R +556 0 R 557 0 R 558 0 R 559 0 R 560 0 R 561 0 R 562 0 R 563 0 R 564 0 R 565 0 R +566 0 R 567 0 R 568 0 R 569 0 R 570 0 R 571 0 R 572 0 R 573 0 R 574 0 R 575 0 R +576 0 R 577 0 R] + 4 [578 0 R 579 0 R 580 0 R 581 0 R 582 0 R 583 0 R 584 0 R 585 0 R 586 0 R 587 0 R +588 0 R 589 0 R 590 0 R 591 0 R 592 0 R 593 0 R 594 0 R 595 0 R 596 0 R 597 0 R +598 0 R 599 0 R 600 0 R 601 0 R 602 0 R 603 0 R 604 0 R 605 0 R 606 0 R 607 0 R +608 0 R 609 0 R 610 0 R 611 0 R 612 0 R 613 0 R 614 0 R 615 0 R 616 0 R 617 0 R +618 0 R 619 0 R 620 0 R 621 0 R 622 0 R 623 0 R 624 0 R 625 0 R 626 0 R 627 0 R +628 0 R 629 0 R 630 0 R 631 0 R 632 0 R 633 0 R 634 0 R] +5 [635 0 R 636 0 R 637 0 R 638 0 R 639 0 R 640 0 R 641 0 R 642 0 R 643 0 R 644 0 R +645 0 R 646 0 R 647 0 R 648 0 R 649 0 R 650 0 R 651 0 R 652 0 R 653 0 R 654 0 R +655 0 R 656 0 R 657 0 R 658 0 R 659 0 R 660 0 R 661 0 R 662 0 R 663 0 R 664 0 R +665 0 R 666 0 R 667 0 R 668 0 R 669 0 R 670 0 R 671 0 R 672 0 R 673 0 R 674 0 R +675 0 R 676 0 R 677 0 R 678 0 R 679 0 R 680 0 R 681 0 R 682 0 R 683 0 R 684 0 R +685 0 R 686 0 R 687 0 R 688 0 R 689 0 R 690 0 R 691 0 R 692 0 R 693 0 R 694 0 R +695 0 R 696 0 R 697 0 R 698 0 R 699 0 R 700 0 R 701 0 R 702 0 R 703 0 R 704 0 R +705 0 R 706 0 R 707 0 R 708 0 R 709 0 R 710 0 R 711 0 R 712 0 R 713 0 R 714 0 R +715 0 R 716 0 R 717 0 R 718 0 R 719 0 R 720 0 R 721 0 R 722 0 R 723 0 R 724 0 R +725 0 R 726 0 R 727 0 R 728 0 R 729 0 R 730 0 R 731 0 R 732 0 R 733 0 R 734 0 R +735 0 R 736 0 R] + 6 [737 0 R 738 0 R 739 0 R 740 0 R 741 0 R 742 0 R 743 0 R 744 0 R 745 0 R 746 0 R +747 0 R 748 0 R 749 0 R 750 0 R 751 0 R 752 0 R 753 0 R 754 0 R 755 0 R 756 0 R +757 0 R 758 0 R 759 0 R 760 0 R 761 0 R 762 0 R 763 0 R 764 0 R 765 0 R 766 0 R +767 0 R 768 0 R 769 0 R 770 0 R 771 0 R 772 0 R 773 0 R 774 0 R 775 0 R 776 0 R +777 0 R 778 0 R 779 0 R 780 0 R 781 0 R 782 0 R 783 0 R 784 0 R 785 0 R 786 0 R +787 0 R 788 0 R 789 0 R 790 0 R 791 0 R 792 0 R 793 0 R 794 0 R 795 0 R 796 0 R +797 0 R 798 0 R 799 0 R 800 0 R 801 0 R 802 0 R 803 0 R 804 0 R 805 0 R 806 0 R +807 0 R 808 0 R 809 0 R 810 0 R 811 0 R 812 0 R 813 0 R 814 0 R 815 0 R 816 0 R +817 0 R 818 0 R 819 0 R 820 0 R 821 0 R 822 0 R 823 0 R 824 0 R 825 0 R 826 0 R +827 0 R 828 0 R 829 0 R 830 0 R 831 0 R 832 0 R 833 0 R 834 0 R 835 0 R 836 0 R +837 0 R 838 0 R 839 0 R 840 0 R 841 0 R 842 0 R 843 0 R 844 0 R 845 0 R 846 0 R +847 0 R 848 0 R 849 0 R 850 0 R 851 0 R 852 0 R 853 0 R] +] +>> +endobj +24 0 obj +<< +/P 6 0 R +/S /Document +/Type /StructElem +/K [854 0 R 855 0 R 856 0 R 857 0 R 858 0 R 859 0 R 860 0 R 861 0 R 862 0 R 863 0 R +864 0 R 865 0 R 866 0 R 867 0 R 868 0 R 869 0 R 870 0 R 871 0 R 296 0 R 872 0 R +873 0 R 306 0 R 874 0 R 875 0 R 876 0 R 877 0 R 878 0 R 879 0 R 880 0 R 881 0 R +882 0 R 883 0 R 884 0 R 885 0 R 886 0 R 887 0 R 888 0 R 889 0 R 890 0 R 426 0 R +427 0 R 891 0 R 892 0 R 893 0 R 894 0 R 895 0 R 896 0 R 897 0 R 898 0 R 899 0 R +900 0 R 901 0 R 902 0 R 560 0 R 903 0 R 904 0 R 905 0 R 906 0 R 907 0 R 908 0 R +569 0 R 909 0 R 910 0 R 911 0 R 912 0 R 913 0 R 914 0 R 915 0 R 916 0 R 917 0 R +918 0 R 626 0 R 919 0 R 920 0 R 921 0 R 922 0 R 923 0 R 924 0 R 925 0 R 926 0 R +927 0 R 928 0 R 929 0 R 930 0 R 931 0 R 932 0 R 933 0 R 934 0 R 935 0 R 936 0 R +937 0 R 938 0 R 939 0 R 940 0 R 941 0 R 942 0 R 943 0 R 944 0 R 945 0 R 946 0 R +947 0 R 948 0 R 949 0 R 950 0 R 951 0 R] +>> +endobj +25 0 obj +<< +/D [15 0 R /FitH 792] +/S /GoTo +>> +endobj +26 0 obj +<< +/A 952 0 R +/Next 953 0 R +/Parent 4 0 R +/Prev 13 0 R +/Title (Summary) +>> +endobj +27 0 obj +<< +/D [21 0 R /FitH 541] +/S /GoTo +>> +endobj +28 0 obj +<< +/A 954 0 R +/Next 14 0 R +/Parent 4 0 R +/Prev 955 0 R +/Title (Qualification) +>> +endobj +29 0 obj +<< +/Filter /FlateDecode +/Length 4605 +>> +stream +H‰¤W[oÛ8~÷¯Ð£½[Ë$EêRÂ&ž¦˜Å¶è .fî PlÆVÇ–¼’œlæ×ïáJÓVRœHäÏw>žëêªéÊ»bÛ¯^­®º®Øø.ø´º®»®>¬>\n»Ç3V7uÝñ&XmäÛûb_VEWÖUç׿¬ƒÙg(@AŒId$høì÷¿Õìz3C!a8ØÏVo> `ßÎV› +0 + 6w³žH0²`³›Íñbóeöz3ûmÀObaæèƒ^¿p¿ÍVÎE%ŒüWQíƒù¹[¾ß,Vo׿þJ~lR×ä3¨Ì„"PÉâ0 â,³X¨üô +!r…˜„¢Á„X ?’/I{PX køQøÝ¡üÍ?hñ³ú1›RœQ>€Ào—†”ôx“‹£‘'ünhšÇ@t°«œDa–eÁ+EÉ`‘åK»Èüà+–äL˜ªwšHt‰E+6«’rÉrvCóý÷‡Í;ƒ#{ÖŽp@2@!¦™£8Ö>¯xÆ©uÀT0‘GÖðµf#UlPÉ©ôÎœÚ"xC‚¿œñ±bŠ|ç¡?¶$2–HÑïÒáiCG¹r5.5WœøËÅR¡ÎCedQyF\s<”œd¨`:Ñœ¥%}_Ëv¡Iä‹%¤Ò, +æ—àªêþÅÑb)Šóª\ˆÈLƒy,–úñ}Yu‹%†¦Ö)'ÁüêT4n}øÕdÍŠ¢¾Y#î)Ïê¤(ŒâáJyµ|sm”É4ߎŒCJ¥Êק¢<¾¡xHÆyÖùQȨ¯y„Îh¤N™á2âx¢Bú½0êI²Á’ñÏEœµãÓœûw)lÌɘIdbž×ÿ°1v>…'þƒôÖCšLuhÀˆ¦R>5!I‡fi"_;¿óÛ¶ì¸5ÿåӧ挢Œ–4Ô…,95J•³ùtºîܾ\­,ŸûÒø^w׃TnëÓªGŒUÂ.]Ò\è§]!…ÛâÞÛ¶9~o=z5üºÈØÄ`=5Â4žx_?Õ€°˜ŠÖVR»)O¦$B|šFä¯ÚR]ñ\LíJ0Ê"lþr8““&!ô¼žÒ05?a˜ó":Qi:8ö²¡’ÑÔÎa SK6Û@¬3éÍÛÍß[Mm#IäG%®tjr" ñ÷®ï½P¨tLÍ *H©,d2Hß7õB?óúÎu®þó¶6Éëtæ¢ôè·jË¿®>È'm†·39˜•;xø¿ÊßUÝ6ß^ö øÖs³—™\·¥³åÑØØÏäfÛ’™\¾zÇEIãäüáƤ:Ágª¡t¼ÚY`ë£)Z»Ø–Ûï85ýP1ŠÅO#2A4$ý`š ¥kò´Äùbæn^!ÅÀT +?¤~”–‹)°ÏÖùà + i¡4°Í;\˜ ÌÙ6ÆwLJiwAš@Ömí›w!¤ª¦]è‡z«¼UxcqX¹\¹ˆÕC+™vxŽ3õåVu QŸN ½x©¤÷ÚPÑ•õBS-´Jy¶ðaድY½ëÌÓCÑp…IŠ\Z¾¯"*àJD—gÕ·Æìx³Q&5s>"ºFô?t|QäG,íQ¿[¤ +ßòªk +‰€·ü‹ïFà_N +˜úFx _NŒRâ>­p6ß;”Ãi2ª…¾VÞ=˜û¯Å7¶öþBÏCí”÷|Û]ÏEÓÈS=M¢¸ g}|­óòIHt¯/z ]85Õ~¯“!€ÛôìþÂ]ôS™Ž‚Bl¶jAmš¸:€£ëP +ž[ˆA4)aÙKmgç¼UÈÔõT.œÄ²f²ìÆÐ7¾ŸWôhDàcŸÀ;›´ŽÇúÁ¿pËÄ+Ã%è•¥£4Éà# otüSX÷¡Ï—Ããm|Ñ5J£¦=¾Î&ïÊcÝ/¨Ï‡GA8уï8ÚÃëˆéˆŽŸL’Hž05"3 )ÈÏ*hO|¦ÚSq¹ˆjÂ,sM½oŠÓ&¦l +­eJú <ÇÞÕž_^Kä.Ç ʦ7•Ö EÄjJøR߆ƒïŒM-a¢ÂS_íp?a#*t”ØS‹†Ö)…–2ÊDK™ ‚øÏ(Ê—0O¼ÒMæZ¯ ±B×¹Š%±‹Åw¹Îçb3ÍUnò6U‘“_ÂÉó.û½w½Öšc§wÀ’>0{¨™Ødú œ3e¦Å'Ò‹X¡jDzçÐ^yXR‡¼X6ñ=æ)Óòë\‚d,wŒ\õ¤ciBjvå½E¹‡OY"¬'ß8>­5fmoâ‘rý­Û’ §ùÒ~.ĈÝ&ô‰OÀÁ„)R²»ô+E8ÊZ)„úÇQÿ¥YÊÔÌšCµ™W’0 cߣÄ㕨ۃÝá¹æçZ(qõj¤›ÛCÉEûsï:}H†éâ%Z,Ý)ÚŠß¾0•OJê†àI3†‘®„;Þ–¦*îÕ0Û™.§KÛÙïüãn¹ÿÖBo¥µCo¥ù )¢×Oõδ_¼©|c2ÌŸt_™ÁìdìñúÅ{®i¯ß2îã¿õÂùqá3¨QÞ—Mw鵑–\Ù”ÞùFÜ—­9ãb›Ì£ÿÍ ¸Ù³s_§pÀqÐÈ©ZS»IåI˜…ÑW½xcÇRkÃþ /^Oµ`‘½wÕÚn)€F¡GŽnê·Ö‹Æ|Ëï.À f¾SRP='+Xu#(™Ú¥‡ÐmZRƔԩM*!©,©î"Ä,†‘‹½}eYçGŸë’áú£Þ­@”èБcÀp§v¯뙲¯mÀÖ€k˜—–[`õ—=†œÜéJp¾ÛÆÏ6uì-ê¦pÃc`æ—eÊjke˳qᣠw!Ý¡èÌQö>Ê£õû1ÖOm©eÌGYÆTYpyíhá¥yªLøßÁ•y÷¤áoE#ÍŶuEÞ¼nÍçÜ÷ÅÒÕŸ¦{×Îj¸t_î8œû¼ëlÝhÀÔbWØóË£½q¬È;µËfæÚ#Ùºzلù§N Q…õØ‘]âÉCäDi$rŒ¼ñ·|{°¼»zZ’¶–7Y¶`(‚\ª›Go,[oÜòG¯[ë9{±ªÏ>¨nT{M/â—L_ôÁ¥ŠïÄ›î¼ÑOæ+âu8¾ûòö… ÷ÿÅ©n»ããˆ8ŒGÌQO²H{÷bý²ÚÖPM¿º²²°¶#Ní3i‚¥·Z„c¼ujKBa¦…úëÓb;,ö|#gî®Øv¥ÉµêH<—{Süâ©íƒÊ®qjKKñ瓦ӫËK ív°=Æš|ÆFqˆ=hfšŒõ”ºÉð«!J =n2$ðy3T7ÉUö7s˜aâ"f Òvn‚Ù46ÇÀtIPâ¦X{¤<yð"]ŒvþXÊ25„™qË1frn!dÊß1™Œöl‹#âi/仌žQÂ2@vçunܤ“ÇéÈ`÷ ŽÜ'¼‡#ç÷9yUŒÈ¹- +Q50ïyáß*òÜõè™ÃAtJCb Ì}F”%×:Q iìX-c»(ÓÜ YßTeWÆ÷k€ã±R Ï1Š¸6 jq“ Ò%,3Ýuŵ® rléÌö'(;ñÞü²ò‰Þ°ØNèl}í§É°é"Ý-ªVþrý•egÊšM@ÉG€5í¡sך–¤…oÍv<Ú¨õ`͉£!v-‘)÷»!“ãÅwz²Éâ‚dEì8 åÇ4÷Ìíö·ËÀ/ª„è¼6£”ó‡Ò‘d|¿ ¨hêYîó•tU…ú µç´‡«Â\Q÷Šo¦abÑ­ñ9ÎgmZiÕ¦‰ÆPã–Amìvt²“†ˆöub©ùãçé‰ÓâpÜqþ‚—Œ'Šà?ú#ì=øy²6‚bÜ!Šã·N HiW­o¾¶}ºˆf¯½§·@B ]èÝ61wKN6Çü…§ˆd¡å³õñŠ'½ÎŒ‹b5WÙˆôƒðÅìÑJhHÀ[È!XÖÆêBUyW¤m­ëc°^í/ý^ªè1«{å•qúÕÝ'k†SÜbšp7Gùh’4Ðw@ 9:{&¶·IçÎÂË* 4±IÂ|YzÁá=W„ê±’ÞY€I± +£èª´¬“V/ëÅ£•E'á^º\Ö´±’‚dyZµ^ðÇÉ©1>žÕ“üåÆ+RÃȹWo/«TþïГªûöý;a4‹_Bº.VA”b¬ÉýÒ:RT²B:/6¡‹• eÝ¥boTV»XMP6…Š^G ·aN³ªƒ1 ]4_g]ÚøyÐH–}Æ[+Q—›÷[ä7Mj¸{7"ˆ›ñÊî ‚ö‰+¢†äïçÖv“òƒ¡Ø~³¼êËêåƲO‘‰À·®‹/«'5dŠ^‡èŸ0úzÄ{žè÷q +°.šš2­KkÝêay‡D#¼¸ÌÈ7Ä‘AÊ)ô%)dL2È|V*‰&ðly|by*uL]¥ËÃM Ds2ÞZ±`MÊ\þŠ¹3Ïbá¹ú[ÜY ,uˆÈÔsMúA‰H£¥Cu(!%36Õ%_2œÏ8°2ÙöAGŠ"F;·âx5Sd]iUmdî• ¡ò3@y/'j5d<˳Xþ)ÚNé' ëŠñ9 ›±> +endobj +31 0 obj +<< +/Type /Font +/Subtype /Type0 +/BaseFont /BCDFEE+PTSans-Bold +/Encoding /Identity-H +/DescendantFonts [956 0 R] +/ToUnicode 957 0 R +>> +endobj +32 0 obj +<< +/Type /Font +/Subtype /Type0 +/BaseFont /BCDHEE+OpenSans-Regular +/Encoding /Identity-H +/DescendantFonts [958 0 R] +/ToUnicode 959 0 R +>> +endobj +33 0 obj +<< +/BaseFont /BCDEEE+OpenSans-Regular +/Encoding /WinAnsiEncoding +/FirstChar 32 +/FontDescriptor 960 0 R +/LastChar 243 +/Subtype /TrueType +/Type /Font +/Widths [260 0 0 0 0 0 0 0 296 296 +0 572 245 322 266 367 572 572 572 572 +572 572 572 572 572 572 266 266 0 0 +0 0 899 633 648 631 729 556 516 728 +738 279 267 0 519 903 754 779 602 0 +618 549 553 728 0 926 577 0 0 0 +0 0 0 0 0 556 613 476 613 561 +339 548 614 253 253 525 253 930 614 604 +613 613 408 477 353 614 501 778 524 504 +468 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 +0 604] +>> +endobj +34 0 obj +<< +/BaseFont /BCDGEE+PTSans-Bold +/Encoding /WinAnsiEncoding +/FirstChar 32 +/FontDescriptor 961 0 R +/LastChar 32 +/Subtype /TrueType +/Type /Font +/Widths [253] +>> +endobj +35 0 obj +<< +/Filter /FlateDecode +/Length 5398 +>> +stream +H‰¤W]oã6}÷¯à£½H‰%;0¤î-Ðî؇i±PlÆRG–<’Oúë÷òã’”'-$ÎCf$š"ïç9çÞÝwCõ\ìòîÝÝý0»’ïÉÇ»‡vÚ#ùýîÃùix=qr÷¾mÞ‘»­|û¥8TM1TmC6›‡ïÉâó"$!I#J²5%_ü÷¤Y„äÐ/î¶ÛDaR²}^ÄðDsÂhÀÈv¿XÒÕöÅ÷Ûů¼:ˆkç ¢úþg0î×Å݇SÑ'*šYòæö‡‡ÕÝÏÿþ.Ñ.È­³1šîëÈ´, `[Ó –¦ý‹wœ\&ÛG=¯ÂÄ^úqÉÉ* Öë”,w«ÛH=+F– YAè vËž¯n)<&`À*†J–¤„ÏÂ~m/dÀ#ʪ7‡U®¶ž:ø(„[—Uwàói•Àü^sR­¢î!^y²¿Vø5T`…« JnnØó¾:47â]î´ž´Ò“A؆ð^­2õÐœW·L¼k˼åÞÀ%ø¬ï"«µzøi‹æý‡ !Çö…Å&2pÛïÛ§å0öÌa’§£noF±¹öàˆ¿U{|Ú×2æ¢6ÙÜÄÓ\–aY¤‰²v(M† ‹·TçíŒI§;ø=Ö{ëö/jU"ìc˜qý2`ÂFé¼¥XØ&,ƒ0#ÆÒ쳇ó&˜*æ*JÓ Nœ`Í@¬Ôûε['Ah^×Ðà Õ ^B¿Â‰“ 5Ç€}ÁlÎ6 íñ´Ò‡înð÷ØÑUªqwñÊ÷7NUÀ‘ú™û—jo £9È.wR.aÞ ØzÞ©{% tÕAvÍà˜¹BÙ¥xEïÜRž^™o'1Ä©_yäßÔ½i(xTGñTÕ¶s^E<õÛÐ:Ý|jû!ÐÁ¾o …´‚nz¤Ö¾4—'ŽÝ3"…Þ—¦ANÇÁêŠjŽXË.S8µ†º3d…4,"*?(ê^XóÑw>;û•!éÉÑ|Å ]çAä]_å‡ò67ºÏ­ ¡hfª5‰Ó” H¦G×ã8 ’±e7Ê%.ZQÇ¢6½óª›ã/Øpà_ i ÎiÞ„:‹FzU3ÅnÇ ËöV=I5PsçA©ÓC÷mÚ X£*pˆ„ín¬ÒŠÚˆ±Æ2ú€RôqÖíði†é¾\±(ÈsÇx “›À—¬#X:ºtFçùÒNÄ@!Œ²T5fn—¯^ì ¥Š +îoŒ’êD3Íæ/fäÊ—Äh–HÅì6_¢8ŸŒâöÛòë¨L&»Ng‘RäÂ& ²|dDƒiW {fH[êË1ͨ{×ÝÔ4ŒÛÒßV3Lò¦`›ú•õf   6NHÑ(ÞCj"…gG¾+Ðœfˆu¤‚Æ#?š1©{U@*A³JG«¿ød§­×1÷FüˆÔ7æ¾XÍ¢äº ì(RÿM8'Ä*ÁˆÓCâ ꊣÓT“ೕ†Ciø¯'{ÞWX3æÌé^o ‘˜9¬•sÒæ Û€ v4wÖ¡¾ÅÃû>.· ElsmDµvÚ¯8ÊÉó4˜Á³µÝÚË}¨F1“ î,­ŽéðG.¿–÷H]7¯b ÜÖs„»ûltžuAŠdÔ‚ö€öŒêPÊêUhÓ10ÁŠSü DÀ>÷#+âð­M¼7s ƒp÷ñ,‚Øn¼ž¸C="M®ñØw~“}˜ÀhëØ™6”"®AaG‰vÕŸªÆ½=¹Tî<":ÌgÉÉÙ¼õVõ£ÁP]cáʇª6‘%U#¦!ýj¿s/l»½ÐÖn9éç7EM‡Ž|Π´ÓÕŸœØ`”ܬ½øíúLáfu˜«…b_ ¢œS!¡e‚]ñŠŽ +{0"wîpV5"L{Î÷ΖSqà½ó~n›|–$|·©Þ£zZŸ +Hû=¯ŸoF% ûHåflýÓ®=×û•ƒTÆìƒéÐ7?´Mê$ÄÖZTëMÿ–¦rÏ»Ò5{kÏôÔúJ9•Ú4“¯"µ?Õ•é);ëÞ̱ÆWã­©x®9ÏhJñ‚ ‘éE QmEÏkcŠR nƒåzr/VËwH|}UÔ–o#4|Wõ¶$[ÜÞ8Á(¤M‚ бªë‡mh_5;ã›\SÏ•¢På~ÕÏ öMTg±i»Þª²Ó —qëùˆס£‹ä±¨ÝÛpB5`—Îói IÐ[ÏÐé.{ÓËÄ9-Í?ϘR˜/ÍP˜òĹ|F“§¾4Cá){<ÈÞÍÁí‹åþ¶ÆZ?®¯Åyk{:C|®{­á¦f W]Z“÷OÎaJ^ì±\ôÅMë¹¢Fd=ü朥¸\kÅrݘ$–ñKáÒä ¦3øñ‘þï«–aYç2–ïÂåð—‚â†a¼A¸¿Æbu£ÌïÖ J°<Âß{»A¾×Ç(§Å*Óeú&Wuµ\ÉðDv¯O«*ˆ¸ªîZ£q ÞcÍ“Žltÿ^›c¯3’çÜOÃ{Ç7í¼¹Шäq3=i3ôÅ8i4Iƒ4¿J›ðݘ¯¢™:–1º‘‹,ÒÞ&ÒZUôr}œ2È< 6·fQÇUo‘7™2¹KRý—oLÀÅ.–ºxܘ$Š2€šê²˜ByT6ëä ”E ×WiÅÊÕÖµ[¯Ò´{U& °kzª|Å—j¯$22ãz*K5h¸²áGŒbjÔ|¾ËR†¬zÅì-ÕRº¬Ÿê OJ­¤š¿Š^¾i€º:¯ë`ùKÅ,%gÃ4‡F˜ï¥p[N=/õ•¢q¡€Ý‚xîA nÞ-ŠÊŽß¸ù®†#kê+£bÌ32¾:&¦ÙU§ôíQÄ…z,«æ0Ã{_Qg™˜—¼ÜÏ|EMœGA’Žü·ãF{„‚ÐíßÔ¯3tA6C¼[ª5ý?ëÕ²Û¸ŽD÷÷+¸LiøD Ý3»;@v³(6ױܒÜAþ~Š")O˜Lé–É"«XS§¬5o5ÂX…ûiðÁ5FÀ [°èÅ*wÛqºv_ã.L${¼ÊʺB§ø¢ˆõ©É$SkŒ1ƒ«Ü5Á­káJWxíFÍç“–éúUÑDvòŽÀ·=Ýøíø”®ìj½Ôïç1%ÖÙtÂ~ +Ï%Þg1Ó“¡qW?-­ÐœÎ´Û;ûWÝv1ƒoÆS'‰HÝÎHÄŠÆ9bÊe¸¯ ìàg·æ{«k™}ŠÛà)üèëøiÞíÙ+ÏwD,r”µ2.«ð$rÍ9¨å.¢Ô›¬ÅÍH•pïÖ¼Ù0™»3ºØïoç‡o†¾Á«šøegÔ=c ƒ +^EFŸ3~|RÌó¯xGKÿynH`ò—çõ§¸ƒY­çˆj7ÒÏóéÙ“5HÆCBÅå*Ê‚Êȶ+uy‹É%ιMjº²¾®ê.Ù%¬Öi¾¿g‘âØ»Œ'%Êçh-­Jc(½÷ãiJÐœË õ¬JE¬:å½ Ìðÿ†Õ&~𮆙ô~$ú¨Ì¥ãø¢¦] äšôe÷7^äyœtÆ€X‡$“ËøX]iþ¿g×{äÛx°[ˆŸï¥ø’M‚4iM`Nè§ËMs{§² ™ÙEsÁž³²¨å*=ù=̧f²Êt¢~‹ýjx|&ó ÓeãƒöD`°Ã)IDyîØ X!×Iô‚D]=­6]Í~€°î!ŲKšÓ›–µUQ¯-»!/ºPó—àd]^Û¹ƒòlÜZŠ‰—àö»ä†òªàÌMC{…¤%ªÄaD߈ŸvIvæ"=dµé/‘¥›qH0žî¡ûæ³²Û «¬ŽÌJ*Ôì6 Z“ñ‘3–'åÁÜÌ»›Þ¤99ªé 7ÌÒ1É1ÙÈ.d!X¦cX.VëµHåƒJQš‹Õº‰ñu4N‡ÍxÀ:™¡z\ x\vžp˜÷¯äYÇ¥?øw<íêo¡Gû˜Î‹âkÜ # éò‚×+æ‡Üa  »q"¡tLš<*?)¥ÌrÛ ü_6-¹ß >´-êÚÄkL`n,·]Ôµ© 5%Gr;AÝšjðJWCäpоÿ‹xdÝ‘ýØoMä–á3%êaqfDSã¯Ó°1W)/9¥D4·‰0xWËr}šÛcEµò©ò<?ÔÁ×^‘â‰Ü~À ˆ:×¾áEÛµèŸZÎnñ<«†Ô¼)€ˆVœÀ?ð¯øõ‡]Õ/´;A~óüÇßÿõ\’Œ`4Úkñh© Ïc­Q<ߨÙýÍžýå%„•¨½ˆ±du3[Ûÿþ©õ0Z’ÆÍ¢úãEå²ânÐä mrõx²h 5óÎyBÄFðÏ!™îÁŽ+z–±6ñimµfG‘¶ó´‹µUŸÖ&õG¤íÛÚêÏjk©VsáÛšOkãE½JŸ{Ÿ2ã‘X\Õß»k÷E,Ž3Íçwßꢱò³Bn’­LüçxíüYù\'Þî{o!4ÜVºQì€J€G¾FŸõ E„?¢‚L©0‘¶. õh#‹ŠGd—5¹­Õ!‹Cô]‡ðm4Ù[™Ôÿ®€ÈˆI+f¤¤‘’ob‘`goùèà{Ãœ"‘ÿ +S¤ÉoÊ{¿”„ø…F,(ü vEõ +Û2Òö.‰úK´a>¯ù…¢ "Î¥?'ÃàwÃ>”6¹®uÁsrµ±ô~é‚\ +9ò¬æÿ'À+”E +endstream +endobj +36 0 obj +<< +/BM /Normal +/CA 1 +/Type /ExtGState +/ca 1 +>> +endobj +37 0 obj +<< +/BaseFont /BCDIEE+OpenSans-Italic +/Encoding /WinAnsiEncoding +/FirstChar 32 +/FontDescriptor 962 0 R +/LastChar 121 +/Subtype /TrueType +/Type /Font +/Widths [260 0 0 0 0 0 0 0 285 285 +0 0 240 312 253 0 551 551 551 0 +551 0 0 0 0 0 0 0 0 0 +0 0 0 555 0 585 0 0 472 677 +0 273 267 0 0 837 0 0 0 0 +569 502 498 0 0 0 0 0 0 0 +0 0 0 0 0 565 577 450 577 493 +313 501 577 254 0 488 254 872 577 561 +577 577 396 428 324 577 462 717 478 462] +>> +endobj +38 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 1384 +/Height 272 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Filter /DCTDecode +/Interpolate true +/Length 26673 +>> +stream +ÿØÿàJFIF``ÿÛC  +   $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀh"ÿÄ + ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ + ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ +$4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ô +)h¯xòÄ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–’€ +(Í&hh£4PE-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-%RÑ@ E´”RÑ@ E-”QK@ E´”RÑ@ E-%RÒPE-%RÑ@ E-”RÒPE-”QK@ E´”RÒPE-”RÒPE-%RÒPE-”RÒPE-”QK@ E´”RÒPE-”RÑ@ E-%RÒPE-%RÑ@ E´”QK@ E´”RÑ@ E-”QK@ E-%RÒPE-”QK@ E-”QK@ E´”RÑ@ E-”QK@ E-%RÒPE-”QK@ E-”RÑ@ E´”QK@ E´”RÑ@ E-%RÒPE-”RÑ@ E-%RÑ@ EPÑEQEQEQEQEQEQEQEQE†šM)¬OÞMc \Ï”ªÃ¨ÉúÒ”¹UÆ•ÝrÔ›ëÈtñy©_¥¸»™Kä–ÞN552†E†<»æÆ+—ëZ^ÆÞËÌö0ÔàkÇoÖöÂdFº˜‡dS¼Ž wþ¾ž÷DâBï” ÝHã­)×æ—-‰•;+0¥¦KšÜÈu™¤Í:ŠnhÍ:Šnis@ E&hÍ-™£4´RfŒÐÑEQEQEQEQEQEQIIšuÜÑšu™£4´RfŒÐÑEQIE-™£4´RfŠZ))h¢Š(¢’ŒÐÑIš3@ E&hÍ-™£4´RRÐEPE% ¢“4f€ŠJ(h¤£4´QEQI@ E%´RfŒÐÑIšZ(¤¢€ŠLÑšZ(¢€ +(¤ ¢“4f€ŠLÑšZ)3Fhh¤Í ¢’ŠZ)(Í-™¥ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(\çŒÿäYºú§þ„+¤5ÎøÆ6 ]‘´œz_—‰'…¢3x†Ø+·-ÁëÒ¶®¼U~š¼¶¶ö©$q¹]If­rúmó麄7h2cät«š­•„+-ÕÌq£ýÒNw}ë\& ÚéÔ#’9’@Ì|ˆí©QÎKõ­ •{=CG¾¸µ–âÑ-BaSqFǧ­/k-GÈŽ¢ÏY°Ô#’K[¤‘csÈÚ=óô¦Úëú]å×Ù­ïcy³€£#?O_¹+håÔÿá%[H^)%XÊFFÓÜããùÔzUœ·7š|2MxÝÕ¶ «?Úk-4Dz&j„úæ›kwöY®•'È9ç§j¼*…Îku«[j2.f€8àúgéÍo.k{¦jÝM*ZJZ¢BŠ( Š( Š( ’–Ši¬ÕåO>Ÿ$‘­¨¶óîìŽõ¾k»ÒáÔ|q"ÝÛmþÈ$7dwFխܸ۩~ÛWšÜØ­c·)^¹Ê÷üMY_i-uöa}—8ÆN3õé\üH¶ñ>©mc ‚7°eŒŒà1ÛÜÕOG¢®•8ÔUÀ-åpコ²ö’_‰|©¥Îµ§ÙË$WIÆ¡˜6zŸ_¡oèéN×ñm—îõý}?˶²'ÆMöˆ¼À–J7²änà:̶°ðˆêàÚþôÌÛ~O›‚1Šn¤ÿ?ÀJ1; ÍVÇO‰eº¹H‘þé';¾€u©l¯íu<ëI–XóŒ©è}ë‰Õm/M&÷3¤Ih¨^8D¦6Ç÷O­møNÐÃåÉ’wûD€æhYÀê=óúSI9ÚÂqJ7:aE ¥­Ìʺ„ïma<éÈ…†k9î¯ìâ·¸šh§ŠVUeì#w§'5wWRÚMÐPI1œPÚip*A,†i]TÈX)Ç`zVníèZµ‹‘ÜÅ*ÈÈù±Wã¡jÞ¦±-”ÑÈ¿gžL3‘ü;Iþ•V ²=õ³Å)šI™ãUBC‚9éùÔ%<­3Gi£b¸2…¶áHéõ¤äì ÷ö×{„†e#ø«¡)ÐÚõÊyŠüÙ ÃÛéL„ý³XPÆâ„¡vR»É=0yâª#gÃ7v»$F®JÕ‰õü(æ˜XÙ’ö{x帑SxÆNO·sS[ÜEs™ î^™Æ+&à›kÛ ©"w!(ÅT¶ÂqÎ+VÚxî#ó" ·=Y +çóªNîÂkBjCNíIVI•¨êOc{n»wBêÆLucŸÂ¤¸¼t¿±Š6Sû·¹ÀÈÅ2í kv'i+²@xã¥Sûֺ͔j Z«9¿¹‘÷~ž•“nåÙSj–vò˜¤œ@ã뎟Cw¬ÛÚ]C äù€’Àvè9¬µˆÛÉs ÍÕÜ%åf A•ÁéÎÓV®QlßJ“˜! ¥¶FTc QÌìF¬WpÍ#¤o–@ €FGZD¾¶{g¹YA…3¹½1Ö³uæûL7¿ÒSÈsŒ`Œ~œÔRXIêÙħì—Y½gQøñO™…‘©6§inTK0†à$ã×qOkÛu·YÌËå9_<ÖrJº~§x÷(ûg*Ñȱ–¼tÿëÕ³È4ÀZ&U’ôH±‘Ê©n8íG3 #Aµ%Ý’Û¶è¦wV%Hè¤ñŸz» ÄS´‚'Ýå¶ÖÀàJÍÕ ’{Û‰Þ3ºAæ(û¿!©ô—+nm^°¬á¿ÚZi»Ù‰­ (U’PÕn¤´°yaÀp@œT qwk¨Ams,s¬á°Ê› +‘í“Å;^F“J‘T1%—…ëÔUt¶þÏÕÕßÌš9ÆÄ–F.Ñ·¦OcYɾbÖÅÙuK(e1Ip¡Áà>§ ©&¿¶· K0RWpœoZÀŽ!&¶ºº¼‰™Û)A•Á=AÚ[šH,uK#&ý‰lT…ˆäuRçaÊ‹ï¨E.Ÿqqk"¹ôè@î)%½’+i¿wºR€ïÈúb©$R\.«sN±ÏXÁ\ qøÓg\i6>Z¹)4AB#¯Z9˜XÕ¹¿¶´`³Ê› !A¿µ[Qrf_$ðÔú}k&ò7ƒX–yg¹‚)BI +nuƒŠy·´M,’è«Mæ |³½[×tü)ó;°²5í®à»Bð>àøž³4™ç˜Oæ’%`#•£Ø\cž+LUEÝÕ˜Vv«q<@-ÝQå™cÜË»çµhÖV·Ÿ¬e )¹MÀg§4Ka­Ë%Ô%žêí%@:¶cß©¦ÅªYÏ0Š9Ávû ©ú9¦5œz}­Ä–0~ûaÂ䜑ө¬µ2\Obâ{™¶Ì¦@ñmT8>ÃúÔ¶ÖƒµÍ计š7’7PǦëQ>§iÌÓ’ §-ôÍg^ÚÎ—Ï ù7Øóxþ"¤œ-Ž­Ä‘±¶ò<¥eBÞYÐsG3 "úßÛ=«Ü¬À€–aÛr:Ô’\ÅÆÎøY*u'¥cy]A«K L±Ü X•—ibÉÅ] ¸,’(¥&)£iKFFÌqŽzõíG;SR]BÖ|©%Äœ| yéÒ mLB/^m›-ÛfIÆô‰fH¹–b@÷ ê*k•hõY.^âæfvI{‡ÐðH¬”šEÙ3b;ûi%I•Œ ”Ç|u§›¨DÍ DÞÃÐz“Y&Ä+͵i^hå3ÆÒ.Ö'¸Æ‡³žçF¼”)7CpSÔ/eü¿W3‘¡©gq(Š)Ã9è0F~„õ§ BÔÏä s&â»@<ëéYVË Äöê×w®Ñ°aÂRs´:»¦¦Ù5ÊFë–=:Œ +›‘™t¶ñI"HÿsÌŒ¨¥6ãÅz]´“Fí)’(ê±’F;ý+)“QÖ¯´´m*[$³pòI&ã²úŠ«g}qi«k©o¦MxÒÌW(óÃ{Qí%ý åGNuë*ÊE‘/dL«ßßÒ¥}RÜj/§ßiù½8ÇÖ¹VÑ5 ?AÑÙ-Úyí.|éaNN Î^´ŠþïÅGPžÂKhe´1¨~HÁþ,t'Òšœ¶k°¹Q?‡u‰$ðì·úŒìþ\¬ íçà +¹aâ=?Q»û,FT˜ŒªÉ]ÃÚ¹»(µ»OÞiöÖ7\¤¥Ä˜2“Îßz~“§êÄ6—j& Ž»®ß{)Ç·Ý÷©Œä¬ŠqZ³¡¶ñ&Ÿwv–°™ZVvB”SÛ¥k×?á[I­-¯DðµO¸{îÖô?•[ÐþUÐÿa·ü÷÷Í/öÏqÿ|Ñõª}ÃØÈçv·¡ü¨ÚÞ‡ò®‹û ¿ç¸ÿ¾i?°Ûþ{ûæ­SîÆG=µ½åFÖô?•t_Ømÿ=×þù¨n4‰aˆÈ®®$ƒBÄÁ»\# +ŠždÜ?‚·NæMX(¢Šb +(¢€ +(¢€ +(¢€ +(«¶± žaž”¥+++²¦Çþë~TyoýÆü«N–³ö¬¾C/Ëî7åG–ÿÜoʵ)){V†g–ÿÜoÊ-ÿ¸ß•jQOÚ°ä2ü·þã~TyoýÆü«RŠ=«C/Ëî7åG–ÿÜoʵ(¥íXr~[ÿq¿*<·þã~U©EÕ‡!—å¿÷ò£Ëî7åZ”QíXr~[ÿq¿*<·þã~U©EÕ‡!—å¿÷ò£Ëî7åZ””{V†g–ÿÜoÊ-ÿ¸ß•jQGµaÈeùoýÆü¨òßûùV¥ý«C/Ëî7åG–ÿÜoʵ(¥íXr~[ÿq¿*<·þã~U©EÕ‡!—å¿÷ò£Ëî7åZ”Sö¬9 ¿-ÿ¸ß•[ÿq¿*Ô¢—µaÈeùoýÆü¨òßûùV¥{V†_–ÿÜoÊ-ÿ¸ß•jQGµaÈeùoýÆü¨òßûùV¥{V†_–ÿÜoÊ-ÿ¸ß•jRQíXrž[ÿq¿*<·þã~U©EÕ‡!—å¿÷ò£Ëî7åZ”Sö¬9 ¿-ÿ¸ß•[ÿq¿*Ô¢—µaÈeùoýÆü¨òßûùV¥{V†_–ÿÜoÊ-ÿ¸ß•iÒÓö¬9 ¿-ÿ¸ß•[ÿq¿*Ó¥¥íXr~[ÿq¿*<·þã~U©IGµaÈfyoýÆü¨òßûùV¥{V†_–ÿÜoÊ-ÿ¸ß•iÒÑíXr~[ÿq¿*<·þã~U©IOÚ°ä3<·þã~TyoýÆü«R’—µaÈfyoýÆü¨òßûùV¥{V†_–ÿÜoÊ-ÿ¸ß•iÑGµaÈfyoýÆü©µ«P\Ä2øù…R©v(¢´3 +(¢€ +(¢€ +(¢€ +(¢€ +vÆþé©aQ·wz± \>È—'¿µD§bÔnRØßÝ4yoýÓ[ƒE“4È ÕK›­yp +yzVj¼dì™N”’»3¼·þé£Ëîš³šLÖœìžR¿–ÿÝ4yoýÓV3FhçaÊWòßû¦-ÿºjÆhÍì9Jþ[ÿtÑå¿÷MXÍ£‡)_Ëîš<·þé«£4s°å+ùoýÓG–ÿÝ5c4fŽv¥-ÿºhòßû¦¬æŠ9Ør•¼·þé£ËîšµEì9J¾[ÿtÑå¿÷MZ¢Žv¥B¬:ƒIW*«®×"š•ÄÕ†ÑED…Q@Q@Q@Q@Q@Q@Q@Q@Q@ EPEPEPEPEPEPEPEPEPO‹ý`¦SâÿX)=†·:-ý\ÇÜVµehê¦ÿxV­yÿˆÎú_ +(¢²4 +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +CÊ‘íKHzãfÿVj½X›ýYªõíÇcÍ–áEUQEQEQE¡mÿëøÿ:Ï­ oø÷_ÇùÖu6.’ÑE‰¨QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES&ÿRÿJ}2oõ/ô¡n'±›EWQ€QEQEQEQE<_êÅtš|" 4 |Î7\Ü_êëR÷TžÓÃ3]YÚÉuu {Rг3tqÞ¸qWåÐê¡kžAâŸøŽ]ª_On-æ)+Â…Ž;çÞ½·O–[Ý"ÚK¸¶K,*Ò! Šñ nu¿´4ˆ¶K#ȉ¹`Aàð3’i¾a+ßÄÖ©Sy ²[ ®|¨HóÛ5¥gëÎ"VÛ ìÞq†8ãéšÍ‹Ã¶öPÈm É) Aq)d +‡Øj¿£éë¥épZÜP|Íýæ<“ùÓ\×Ô‹â–RÕQEZ_õ†¬ÕiÖ¨î)l2Š(­ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢Q@Q@Q@Q@Q@Q@Q@Q@>/õ‚™O‹ý`¡ì5¹Ñèê¦ÿxV­ehŸê¦ÿxV­yÿˆÏB—À‚Š(¬‹ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +CÐÒÒ†€8ÙÕš¯VfÿVjµ{QØóe¸QED…Q@Q@Q@h[Ǻþ?γëBÛþ=×ñþu6.“QE¨QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETs©¥IQÍþ¥þ”Öâ{´QEt˜Q@Q@Q@Q@"ÿV*x.%¶}Ѷ=GcPCþ¬T˜¬¤“Ñš'cHkMšO¨oþµU¹¿šèm?*tUlRâ³(EÝ"ÝI5fÆâ›sƒœpiõˆ/<„Ô¢…¿ÒüÇhãÇ'åúÕ·bR6(¬?´\¼‚;{©^–5óŠŒó»péì>™¥óЙÕWndM¼œmäç<çµ.aØÛ£ŠÀO·µ´ËÒY´Ì6¯6àt÷<{U˹¦òl¥1Vf;z-áÍÁcNŠç⻸’ß1ß1y$•@¾G8ÈÏ®*Oí)cˆ³<ª¦Ùü½Ãqiã}¨æAcrŠÃV¾˜<Ÿj™1qaBŒm*›ORy«I5ÚéWD’hžEBËÉœwâŽ`±  ” ’¹ä +  ‘c,°$.y c?Ì~uÏùηs™ú±RVOsE°”RÑHÓiƹë‹é¯^aV>j³)@J¼ýãü9ÏCI» #zŒ€ 'u5…&‹¶ Ì6ê&û:yX#‰rG¡éÍ!Ò¦’úáå6òû\ö`@SüXéÓŠW}‡do) ¡”‚È"‘ÐI#}Ö¥¦~æ´û!ƒÊ‰Kp¸,r8ÇÓ?Sû ßf• ¡3™I.åýúïÉ\ç=;Ôî6#EŠ%~ꀣè)Õ‹˜Ò\Äe¶ j$‘„ A +¨€qÔŽE6; ˆå³sn^XÔ+4…YC‡;ƒ`öëÆh»ì7)»×~ÍÃv3Žø®~&í"“pœÌWKFo˜Èù³€GÍëSɧ”Kob¶ìmž(Î0¶N߶is>ÁceS˜ œ ÷4êçSHo!KZK&ÙQÚ|¬g%qžzžµd[^HE³[™%2o\mmÄ3žàt£™…ª\UM6ÔZXÅ@²laÎIlw=êåPƒ´Q@‚Š)h*¼¿ë YªÒÿ¬5qÜRØŽŠZ*ÈŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ(¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ|_ë6ŸúÁIì5¹ÐèŸêæúŠÕ¬­ý\ßQZµä×þ#;é|(¢ŠÈÐ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)CKHzãæÿVjµY›ýYªõíGcÍ{‰E-D‰E-”RÑ@ E-•¡mÿëøÿ:¡Zßñî¿ó¬êl\7$¢–ŠÄÐJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJZ( ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¦Mþ¥þ•%2oõ/ô¦·±™E-Ò`%´PQKE%´PQKEX‡ýX§Ó"ÿV*JÉîh¶ŠZ)Ú¬níÄæ*‰Éz³X“èÒÜNÍ-ÆT™9çvŽ¸ÏaÚ“¿A¢eÕà{¶Š2®c;Ç.ÅGZŸûJÐï 23"± ¸ëùU3¥ÜK?›4Ñdy B8÷z÷¨môë‹‹EI]QÍ°l!²Å‡>ÜÒ»†ª_[³ì ÁwéÆzô¦ JÙðVE(CýUm*GfQ"ÇG±ög/òã‘Ò–m:âæ0³KeŠHE8Ã3úQvWQ³hÙÖu*¸ÏãÓëš’;»y­ÂJ¦œ¿@1Ö³5KWM’!<ˆãܪ~M¤¶xçžœzÔ°Ú›íí ;˜àóÎwsÏ&‹»Ø,‰ŸSˆŒE]¸cœmÚ¥»ÔÖ÷Ð]M$1±ó"ÆáŽ9õüERA1c1£’ûŠ9ÊmNjÄsÛK)ŠHöÈPÊsª§¿¢Ñ¨hK5ìVóùr‹å™ “€ Z|WPO¼RTûÜr*½îžnäÜ$ û£ÿiOþËSÇlRêæbÙmã01O[†„QêÖooþvÔ“îîRÿ«ž´é5K(¤1½Ê{‘>¦¨>#$ž'1Fb×C׊´švÂØe +fI¦Ð?JWhJÚ¥’¢;\  _SŽÙæ¤këT‘#iÐ3€WžÇ§çY’Y]GªF`dùÖv,èH™0>¼T‹£™7ú—úS[‰ìfÑEÒ`QEQEQEQEX‡ýX©)‘«úÉîh‚Š(¤MgVÜf9ÀHcòòsŒœòzd Ö•P›L†yžIÞI )@Àpx ØuÍ'~ƒEiõ/"<2 1"8ãkÓ#µ6ÛU&$#Ë1XÀTP 3.}qØúU‘¦E»{É,’nÜ]ˆÉàÐc¡4ŸÙP(Dq·k‚2¥F8ÇOZZB)5GK¥…m¤vi + ®P·®J›ûNŠìTÉ$y pSvOÓå46›6ÿ6Q.å3#9 ·=1ÈÎxïMþÈ·ów3ÊÈÜFXmó»¶yÉïF¡¡YµY>×ÌRÅ’+¨9Ë€ߦjÔ:šKp‘y3*¼ÈÀm,¹ÈëžÇµ Ò!ݹåžC° ÜÃ…:zŽ½jÂØB­¿u+J¼÷`AÿÐ +á¡ ºœpÜI‚b±²«ÈÚ¥±ŽùïéN:Œ"8ßkâIZ!ÀꡉïÓå5$–ËçnÝûÖVlëŒ*‡û&5\É6Õv‘cÜ6©`AíŸâ=M†„i¬ÂÑyñ†d@ÀeÃ0z䎸«MuåÛ¤ÒÃ${œ!VÁ+“€N1Q¶—nÑ¢øH„Jwr ƒõÈ1µY½´Ò<ªêU™°ƒôQ¨hP¸ÖfC/&À@qIé“úTÒêÁq ##Ë€tÊ“ØŒçòSΓoä¬8 ”îqsõÈÍ4é14¢Gšf;ÖF€—'Û§Oj=àÐmŽ±i?“ ÉÚ]Nå9$uèqZXªÖ¶bÐmŽYL@a#b + öã?™5jš¿Q0Å-SUiÖ³U¥ÿXj£¸¥°Ê(¢´ (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠZ(¢Q@Q@Q@Q@Q@Q@Q@Q@>/õ‚™O‹ý`¤öÜÜÑæDi#blžõ³\•;Ìï·ç\U(sJ÷:aW•ZÇWEržcÿ}¿:<Çþû~uUó/Ûù]ÊyýöüèóûíùÑõ_0öþGWEržcÿ}¿:<Çþû~t}WÌ=¿‘ÕÑ\§˜ÿßoΓÌï·çGÕ|ÃÛùeÉy¯ýöüé<çþû~t}WÌ=¿‘×Q\œÿßoÎ9ÿ¾ßUóoäuÔW#ç?÷Ûó£Îï·çGÕ_pöþG]Er>sÿ}¿:<×þû~t}WÌ=¿‘×Q\˜•ÿ¾ß/˜ÿßoΪù‡·ò:ºŠy’YÜǽs>cÿ}¿:BÌÝI?SMaµÕ‰×ò#—ýYªõb_õf«×tv9e¸QED…Q@Q@Q@_¶ÿP¿óª~ÛýBþ56.’ÑE‰¨QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES&ÿRÿJ}2oõ/ô¦·Ø΢Š+ Ä(¢ŠQE +(¢€ +(¢"ÿV)ôÈ¿ÕŠ}d÷4[Q@Ĭ¯·Ünf)ˆ\ùs“óc?ýjÖ¨^Ö‰£xQ£s–R£úÒ`eýºæ}I!‰âH–w²¥·U>¼OåKi¨\J¶o*D«tNç*“×ð«âÂÑUUm¢_z€ƒ†õúÒµ´¬/M}Ô*0>‚•˜îŒ¯í[¹cg !!iNìüØb0=2Z½gs3Í47XdÀ¦@!³Ç=ø« in‹µ WnÜÇ\}9§xKï1!lƒ¼ätü²hI†„˜¥Å-BŒRÑ@ E-˜£´PRÑEQE^_õ†¬UyÖ¨îL¶EU’QEQEQEQEQEQEQEQEQE-Q@‚Š( Š( Š( Š( Š( Š( Š( Š( úÁM§Åþ°R{ nOKEX³µ7Sm裖5‹i+³D›vBZÙËtß ÂŽ¬zV¼:e¼@ncz·OÊ­¢,h +:C5p䥶ˆë…$·EôÑE5íàa¢CøT3ÞÛÛgž(éæ8\þu,r¬Š2žA ÖWeÙ®4…#t ´ÿtô¬‡£rŽ¤0ê u Õ{Û5º‹€ƒîŸé]ë´í#)ÒOXœåE1q˜À/´í¦{Tì¥X© àŠ†XÖXž7WR¤{ì9N/LÖ¯ y—S–ô_%¼’›i¢Qmçä f¥[ýJÒÏKÔå¾7ödŽK}ŠÏÝǵ®Ú“YÝZo*êC$£qÉcË¥LÚe³^ÅxÈLÑDbSž6žØ§ÊÂèæt{ÿ\ÉgzÑM%¬À´Ûš-qÁ@ïΓûSSëÿm$±öM‹³ný¸õϾkn-OÓdûJ4±G,#37–¹ë…Î;ÔQhº<·ŒñÛ\Ja7–òΙ¥Ë.ãº3d¹Ô®¯5×R–ì‚´Qª)ê›°I*9µ½VúM6ÚÕf5’ÜÈmÊ$úoãã] Ò­Cß8FÍî<ï›®8ô⢗@°–ÞÖ-²!µ@É…W¦7h安´I5Ó":¤^]ØÈqsσŠÒRÖ(l£KXݸ€îY<œž{Ôë÷‘W‚¹áIËzqZWó=½„óG÷Ñ SÑ‹Rÿœ= 'œ= e¶¤Qš) e›åڛݻ sÛ¡ü¨‰f,$Üoe1î`N~„~thf§š= pô5ˆº¶ûµER|Ä#àÙ`r}±RIŒVÙ˜Zw–ý8£@ÔÖ󇡥󇡬iutŠÝ&1ðU™q‘ƒƒZK­M£ÞU6ÇÑ£¹ô%IãèhÐ56¼ÑèhóG¡ª–óˆ]…¹PNr;­y©¥¤ÞVÂì{{g·©àÓ² ³SΆ8zÉ:¬k»tlYƒ/uP3»òÇçL]]LLþClÀ9ÜØëëK@ÔÙóG¡£Î†±ßQ›Ì‰Ýw™ü™Ÿ§Ë»ƒùV—lÓ² ²o4z<áèkjè#Ye…’7‰¤CIõæžu#h倬ÃnÔ íÇŸÀÒÐ55|Ñèi|Ñèk'íÎ÷Æc‰Œr©çø Ê´)Ù +ì›Í†4zŠŠ,‚ì—͆4zŠŠ,‚ì—͆4zŠŠ,‚ì—͆4zŠŠ,‚ì—͆4zŠŠ,‚ì—͆4zŠŠ,‚ì—͆4zŠŠ,‚ì—͆4zŠŠ,‚ì—͆4zŠŠ,‚ì—͆4zŠŠ,‚ì—͆4zŠŠ,‚ì—͆4zŠŠ,‚ì—͆4zŠŠ,‚ä¾hô4y£ÐÔTQdd¾hô4y£ÐÔT”YÉ|áèi<áèj…õè²U%Cg'–ÇJ¨úÇúSEŠ• lO?•-vmyÃÐÑçCY3jfÚ8Úh€,›˜AÞ–[é O GdJàHHûÀzzfSWΆ8zÉþÓ1ÆLÐ0pˆààÇÍ*ê-æ{r¡e9Þ€GÔr(Ð55|áèi|áèkkq’AÕÁÀþTûFh’@¶àLŒŸ+7Xãgù`WRƒj*ú W%è‘ÕAjئ³u{á¦éW—¤nð¼¸õÚ Åh5gê0Åweqm?ú™chߟá#¸Î“æ­SU¼Ö/¤¼½™¤•Îy<(ô°®¿á—ˆ®ì¼C–Ò³Ú]åv1ÈFG§JÈÕ|«ØÜ·ÙmÚúÑŽbžßç ;tèkªøàë‹ f-KU o")6öìÃ{`¶=?­hÚ±š½ÏaCR +‚3ÅN+3CW„$âE8çëX÷r4“JŠY‘ *’H +èõ…ͪ·£V¯B‹¼ÇUZg4¦æØÇn$L/aU~_,(,ÇŽIäR‹¹£o£–w\X<¤sÜ’µtDÔrOÏ’É÷Ac€}qëWÊMÇ[ÆñÛ¢K!’@>fõ5™q5Ç|U¥Â?qSµ†Ðw^IãÚµò3Ö—#Ö›B9Ùî^8 óµ»Ü!Gs†;Afü2C +ܤvëıÇtÒJemÌrXm?»ëÖ·î-`•Œ³3 ¨WvòƒÔû}jXDKŽ"»cpqÇOÊ—(îfiÍu5üí<Ì¡×ÉÚq€p§¦: ñëUdº½7Nљ̈óf-Ÿ&Õ éÔœèh§a\æÃMæ¼ë-Álq™FâK•éÂj"k¸ÒY!Y‹~òLºe¾ðE'Ü(&ºZP)rŽæ<1¬š­³,÷/Ä̬ÌpÌHëÇ ýkfŠZ¤¬&ÆKþ¯ñªõb_õu^´ŽÄ=ŠZJ¢BŠ( Š( ŠZJ*XÜ´ÔtRjãCç. x™ÙUÔ©(ÛHúȬ±áÍ5b”å2‰<ö߸Œ[9Ó g(ó+¡V•ˆ +Ý@ð)­á2H¢Ä̱Æc¹Cü'žG±­O-¿ºhò›û¦—$GÎʉ¢Ù-ôWdÊÒB1i˜ªñŽ8Î*ôÑÇS·Í®Ëĺ¼Ö’´ð™#•áIF-‚ +Žqõæº-fòëKÒao´í*G-ÓD>E'–Ú8¦¦š¸œMÌÒ渫O]'Ù¤¸½Û4÷™¼ 7í åðSÍI±«yv +eÜÚ”h!,~éÁùò1ýÞyô¥Îƒ••-5zrsïN«$(¥¤ «Ëþ°Õš­/úÃUÄöEV„Q@Q@Q@Q@Q@Q@Q@Q@Q@QHŠ( Š( Š( Š( Š( Š( Š( Š( ¤‹ý`¨êH¿Ö +Oa¢Åu8xQ‡u¹zÚÒ®7Àa?y9JãÄFñ¿c¦‹³±u«Ç¾*x¦cxtI +F€’§ï2éƒú×±0®^ÿÀ>Ôo¦¼ºÓŒ—6ç>A“ô ŠãGK¹à6š¶£`¥-/n!SÕRBåL:…á½[Ãu1¹F ²—%õîßð­<)ÿ@³ÿÿñT†žÿ YÿÀ‰øª®dO+-xÄ_ð’x~;‰1ö¨•8Þÿ]P¬mÃZW‡–eÒíLb ƒÌgÎ3¼N:šÚ ´gk.§rÙ¬7®HÈÆGQWµ=ÉÇÝO”U#^…(òÁ#Š£¼Ž.Þ ;k bÞåÔD/ʣ܂ã;Tå½{Öd«lÞ·I­Êoò–DbÒ.ã/û¹í×膒Ÿ s»i¶wž#±)f±Í + «‰ù³Œ*“뜟´§µûF¾çÉ·$œÍâ>fû¾†µèÈÎ23UÊ…sœšöy­&S?˜ï Âh6ÜáN: úzçŠ|s´̦ãìмÿ<Øb4Àä3ý+¡¢‹ÎtêZˆ™ýãÆ'§T\îÙÂÿßT’êZƒù/ðÃÈe‰¦p²ÇjýÓŸ—k£¥¢Ï¸]­=á‚òc{"9¼µßµT/ùˆ<õÆxö­; ¾Ñe¹îdùqùU€)i¤+‹ESÉÕš­VfÿVjµ\v%îQEQ!EPEPEPV!Q·wsUêÌ_êÅL¶)n+ºÇ;ª£$žÂ¡ÖÅ•Dœ·O”ýéÒ¤¸‹Ïµ–íó®}21Ue±‘ä…’DO,(Þîàò3ž‡Þ³Ô²ÄW0Î̱¾â½x>¸ã×ð§Ë*B›ä$ ã€Iü…Vµ³’ äºma÷HÎsׯҤ½¶{˜•@¸`ÄpÃÐâl?´mÌðÄ¥ØÊ RªHààçÒœ5 Rùë…‰< ¤ãéUáÓ IW÷f@ÙSÈcž9¨Î‘#À°¼ë¶8ŒQœàã“Ï< +Wa¡lj6ŒÛDÃvà¤`ðOLúg5j¨Í§™Zvæ˜ÏN›Oõ«Ç@8ã­=@®·ÖÌ®ÞhsqëÏQL:•¸šÿxL¤„<ëéT×Epºu2 +iä†Ü Éçžµmí®$’ šX¼È˜žà‚1ëÖ•Øh: è¥F,B Äg?($g?…DÚ¬(ß:¾Ó"Ƭ£vr¹É©¤«Á m'Ü‘‹>ò3Wèxü©òéîÒ<‰*†3¬Ë•ÈP1F¡¡en p»dswGéM{Ø#wBä² ° +OlãëŽÕ½« JiØåA #Û~fœö.צo1CR qŽyÁü©Ý†ƒ¡Ôm¦Ž ÀÌ»‘YNqÇoÄsN[ûf D¹ +2xeÆ:Óíl »Û“(o*&ŒŒuÉ?¥=CBíQLAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPQÊ ¡=ÅIMõmô¡nZ(¢µ3’Š(¢Š(¢Š(¢Š(ÄêêÍÚOªèe½Øµ¸•6,Äg +zþ8ȪÑ«üV ¦¬Í¡'s‡ÿ…1sÿA¨¿ðÿñUÙxWC¸ðn•=¥Î —q³ï…BØO^犴.gQ3õ¨É,rÄ“êMsªþó5u•´B1,ÅRri§T\¤Þv2¢'(Ž¿§5Ô`IŠ1P‹ÛFÍ[¨ `ãpc>™¥vÆEŒ\Bda¹T8É zR¸É1F*¿ö•‡?é¶Üuýê÷éÞ¥’dˆÆ¼œŒp þ”\ 1F*½´dw[¨ +Ç÷Èa~¾”å¹·uÜ“ÄË·~C‚6úý(¸b“ _Ù£ìk»uoC ¦•IÑK›ˆñ‘êÀ΋€ìT7V±Þ[´—ØÝv9Cù‚ Dš¥¬’Ìh|¨•XÊ$yÏü)Æú/´A•xåä@R¿üWéEÐj-Œ dÛ$òI$ž¤“É4­cßGxèLÑ©T%Ž¸3ïN¶š·0˜óâAŒýiÒ][ŠòÏ#ýÖg¥¤ÂTŽ¥iÂÃ$ñ¤Žå3˜€õrÄ-Q@W—ýa«^_õ†ª;‰ìGEUQEQEQEQEQEQEQEQEQE-Q@Q@Q@Q@Q@Q@Q@Q@Q@>/õ‚™O‹ý`¤öܱRE+C"ȇ *:+-Ë:;k¨î“*pê÷1ZæÚ6 ŒU‡qZêò(Tî85É<;Þ'L+/´km£mSµ¹ê~×Ö"ä˜ûñY{)ö4ö‘î_Åfêà)†Ë‡j©q¨Ï8ÚÅôZ§[Ó¡gyέôˆ‚êV‚ÚYV'•‘KÐd±ô=!®“€¶Ôb ¬¶²÷j»âb¤´_1_¸9Ðf¶-7/ƒeÅÒ\0GÃG.ð¹' »¾®‰íá“;â²rr äÒ¬1¤~ZÆŠŸÝŠ•äd–Ñã· md]Ë«SŒ`ržIü*’Î÷ÐÎé‡wŠ÷^ºW‰$‘Æs†£Ë\çhÏ®)ØW0¿µ.„+2É»¢iž5^c +A#¯¦G=é‡W¹™%@æçNúœ§ëœVø†5,Dj }ì¿Z_)?¸½6ôíéô¢Ì.Œa}vɽ<¤¸Š›9!¶Œç?íTºmÝÝÕão‘|• v† ŽrG´ÌHAF=*•ž“¤é(±E(¿ R:ž;Ñf"–Š)’QE2oõf«Õ‰Õš¯ZGb^áEUQEQEQErÝ3&©Õûõ øÿ:ŠBá¹&Õô›WÐR÷«‘iì˺VÛì:×<¦£¹²‹{¶¯ ¥Ú¾‚¯=s¹úôªn”q‚)F¢–ÀàÖãv¯ £jú +Z*îH›WÐQµ}-\Ú¾‚«è)h¢à&Õôm_AKE6¯ £jú +Z(¸ µ}WÐRÑEÀM«è(Ú¾‚–Š.m_AFÕô´Qpjú +6¯ ¥¢‹€›WÐQµ}-\Ú¾‚«è)h¢à&Õôm_AKE6¯ £jú +Z(¸ µ}WÐRÑEÀM«è(Ú¾‚–Š.m_AFÕô´Qpjú +6¯ ¥¢‹€›WÐQµ}-\Ú¾‚«è)h¢à&Õôm_AKE6¯ £jú +Z(¸ µ}WÐRÑEÀM«è(Ú¾‚–Š.m_AFÕô´Qpjú +6¯ ¥¢‹€›WÐQµ}-\Ú¾‚«è)h¢à&Õôm_AKE6¯ £jú +Z(¸ µ}WÐRÑEÀM«è*ÐØJž™7ú—úSOPkC:Š(®ƒ¢Š(¢Š(¢Š(¢Š(Ä?êÅ>™ú±O¬žæ‹`¢Š)•‘%ã¥õ·î%È“yܹû¸ÇëZõBmNÞ ††]êÁKƒ“Žý(v*¶™<÷+<Â>dLcBJá7sÈóúPt“ý¥$ìˆò A3ºì!q÷Êz~µ'öÕ¿ÌL7 +UØ´x +‡£n¾üS¤ÖmcšH²Ìé¸q™”d¨÷â§AêCÉmoò·EdÖä㫼ý8?Iwg!³·ùûÞ³· ëÍ; ÔσOžkXžX ;m’4E‘“w ä2¤c€3õ§¾Ÿ¨,$…äx.ÇåÉÈ<›…Z:¬9TLÒ³2ùA>`@ƒÛ¡éÑêpM4qIJ9tÂýÐr9ÏÐÒ² JÑé,#u)‹\Ç6qÙUçòŸÎ¦þÏs§Þ[PgyH1ÈÍ55»'.·Ê»—ŒïŒ{‘ùÓŽª«p#’Þh×Ê2³¾@9æR»i×r]5Û-²É˜ÊƬJ»ºœ{úqŠGÑæ•Né#Ré6๠*@£åç¦sRvÊŠY¤T(18=}ªÐÔ (¯óa¥hºç?ÈÑd•?³'šé.&)£Ð’0¡‡R<úv«:¬× · +³&vÊd*S>Ø!¾†§´ºKÈDÑ«ˆÛ•.¸Ü=EX§d+™1é×1^-Èh¼æb #*UTöëÇJפ¥¦•€(¢Š^_õ†¬UyÖ¨î)l2Š(­ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€’–Š(¢Š@QEQE%-PRÑEQE%-PRÑEè¿Ö +m>/õ‚‡°ÖåŠmIfÇáP§ß_­Rñ ¯Ú,!¹•¢°–B&em œ|ªO`MsÎMlmsSì ôÒ²ÿ·úV&%´!¸²Óî<ËAržfàœ|¿‡Zß¹i’ÝšÝÈ:þ¨¨çer¢?²ÿ·úQö_öÿJ ú¥Ó㶈M&Ægù6r6á˜cÜäÓßT”]ªSNGF +IÝÏOOÆŽv¨¹ö_öÿJ>ËþßéUc¼»Û!0#Ï—%I +8ëÉç¯éQÛ\\C>Æa–îHñƒ¸pNsŸn˜£‡*/}—ý¿Ò²·úTÂXÎ1"œãõÏJ}ì9Q[ìŸíþ”}“ý¿Ò¬ÑG;TVû'û¥dÿoô«4QÎÕ¾ÉþßéGÙ?Ûý*Ís°åEo²·úQöOöÿJ³Eì9Q[ìŸíþ”}—ý¿Ò¬ÕkÓ¶o.âM®ØùŽ(çaʃì¿íþ•‘Ï' ÷¬»;h­­R Oll% æ°,[ÐÖåÏú±õ§¶Äâ¬P—ýY¨*Ä¿êÍW®˜ìc-Ä¥¢Šd…Q@Q@ KE•~ßþ=×ñþuF¯[ÿǺþ?΢¦ÅÃr특ÉþšÀøšú’øMÿ³Œ yƒÏ1gw—ϧlâ·meÜßtðk‹ñÖãM[YA£ÛÌ–àÞ+”{É?0>Ü×[ó”þ?á ê¦îôHf:~Áþ°¾fxÛžøÎkÓµ%“¸8¯)Ñôoˆ¶åµôÖ÷"0Yï#*ÉÜc}züÀªÄ:õoj˜_Xrøu9ýsT—HÓþÓ£\|áXd€ ÿ ²åñk i#²ImàŠ).dK¹¿¦Á·æÇá[×Úu®§†ò/60wmÜG?ªÒxH–X${K@¡cã Ç|{×S¿Cc-¼Qv×~LP‘ZåíQÍÀ\ºŒôÛÀÅUŸÇB(m4æy&‡ÍtÞ~Q¸® +rr\WJº]ŠH²-º†YŒàäðä`·åU¥ðæ‘4PÆöI¶DxfA9êzÒ´ƒBŒž(e¾e9³K„¶yŒ¸píŒ|˜éÈç5^-“Íq§­dIÙ$Yƒ11g#n;ãÖ¶DÓdÔýí#k¥Æ$9ÎGB{ïÖžºE‚$(¶É¶û$¿ï~y4Y††o‡|FuÖZÍ òÕYNX†=ÊŽxퟭg/ŒZõ¯`‚ÑãT†cà’C =A\ž¦º+ &ÇKó>ŇÌÆàqìOÄдÈîf¸KEY& ²aˆ ¯Ç4Y††L~%š >Ö{a²x#ss#•ÅrB€¤í‘֤Їk¢ÂÉ,î~i©ôJM;ŽêÆ•2oõ/ô©)“©¥ZÜ—±›E-Ð`”´S(¥¢€ŠZ((¥¢€'‹ýX§ÓbÿV)õ“ÜÑl%´RÚÊ}•œÍ& ;ÁpAç=N3Z¦±î5µ·¸e1ï„ùÔ7URHéŽÄpi;ur̺lRÁ4EÜ a’;ž~¼ÓWK‰'–Ec²RÌɱz·^qš ÷×i¨2ì –à"I‘óÊA<Žµ)Õæò<ÖV7„+&[)ž¼³Jèz—­-¥¶m­pd…cTE 1œ“l£þËQ B.%nà~ì†Ü0qëëPÿk”íñòÇÃn¾¿Z£EÌ9Ë‚aŒEÛ€0£Œtüª]ËýáùÖu{0ç4w/÷‡çFåþðüë>Š=˜sš—ûÃó£rÿx~uŸEÌ9Í Ëýáùѹ¼?:Ï¢fæ†åþðüèÜ¿ÞgÑG³sCrÿx~tÉÈy¬˜`~VÆ}¾•JŠ=˜s´Ó>ËŒê7RaËîiN{}*ÕÄ€PsÎMW¢š…„åq’ÿ«5^¬Kþ¬Ô´v2–âQKEQ"QKE%´PQKE%_·ÿP¿óª5zßýBþ?΢¦ÅÃrB*X`¯£Ttb°i=ÍSkbf¾†Õú +ƒœäòiqIBŠ[ ¶÷ +LÖv³4pAo,²,q­Ìe™Žª7º¹ódkkÈÂ,*öê»X\6XÏ~€qÏ4\V7óFkŸšúý,ï.VPv\y*»@»€,N ííE½ÕýÌCöè€xåq,dܨ^vã?1Î hÍciWwRË +ÜMæyÖ‰q÷@ +OP1Û뚥ý¥"aùmWdÎ Uù˜H@ÿ.§µ 6hÍsßÚw^~$˜ ÉoÒQ¶gçR7zã¥1õ™fòRÖå 4poePÛYä +ߎ â‹…Ž“4ŒáT³0 +9$ž•‡ÅìWj$»2 ¼û>ÓŒ©MÙ8séíQë·nòº*À hT8œç¯'(¸XèsH®®¡•ƒ)ƒXPêÔíÈgòͮёÏë•¦¡4eª-À‰£´‰¡„¨>y#‘Ï=±ÇN´\,uy£5¦Ëqpn%š\ªÌñ¤a@©5˜5 _15ÈšE¸ˆŒ£F|`2±æ‹…Ž“4f±t붇B–y®d¸’ æ@v–R3Ç~µNßR¼¸›ìëv¤…_96¹*Qh^£Óó¢ác¦Í®wíº½ºÊfûLûcØÊgn1ÎN9ý1P­íܱC$º”k¸@ÒÃ"1PU²å ãµ FhÍP¼½Ù¦MqjáÊ»ñ¸l1÷Ç'ðªê1¦¨¾QnCæ¸?wÀrh¸XÞÍ®|_ß2MpÒù~T°§‘°`î ¸×øŽ1Æ¢›Vº‰n•.iUÇÌŒ†8”¾ ÈRèÙõ¢ác¥Í®z=Bà­ºÜßÁO¼‹ˆÙX>Âî#nzç·ß][Å"‹Ò\Þ:Het_!>b¼í8Î$EÂÇQš3\Ã^Þ¢ÜL÷ªg^dQDU’F¹dö<*±>­$÷¾MÔf6x—z€ÀnÝœ^ ù¤gTRÌÁTrI8³5[¶³·†19I$;D¬UF@Ï$‚9úVæ©5Þ‹)žå`gµFXöß7^,c½ ‚Gaš3\亃Åuå=êÚDòϺB«ü;qÉ㹦Bí¡ižh­œÅ9b¨y dÓ­ .hÍ`C©5ÄŸ=ÛB<¥h¢uPÓerIü»éQ%õà´iÖãjÁFa·œž½ûb‹…Ž“4f°¬ïn.5™"7clM xwGÎÛ÷úuÍ"ßÞ¾¶ðy°",»<—dÆw·$ûçÔ\,n««¨e`ÊFA Òæ¸ûIä[Aö¶¶‰#µß"í[©`F3ŠÞÕ&Ž]Q1¸m°J¤ŽÄ)Í …,ÑšÂû]ÚÝLÂã÷Q]C +Å°`«"g'®rǺÍŶ¥;Ç;elËÃnví•Æ쎙=º.73Fk›·¾¿™aO¶ÂË,êždL²2¬H?(ð1ÇÖƒoš÷^i&á1¨ËÜð:ü¼öç ¢ác¤Í®muYü§1Þ,é²&’mƒ÷› ÓÐsƒÈÇ5,7·wPÛÇv•Ô\RdPªAc9$gâ‹…üÒ + $I=«+S¼’Öîßý $G¬hWÌcŸF¦ PŸPžHåC8wq2Km´~åB¶×°ë×w\,tk"¾v²¶:àôïNÍrÑÏ-½Ë4I½Œã ýâ-ó¦{¹%‚ÔÃö‰$/–@¹Fò˜à8ç±É¢ác£Í#:¨˜ œ žõͦ¯ök'-~%ÈI ¾ÒZA» ` ‘€1Is{$×1$·AnàU·Ú>eÊÞ½I祎›4f¹¨¯/ wZÃkçNæÞãœöÂñ§u=Ûâ—Éó؇ePHIãÑòGsB-ƒ `9=sóc\,ofŒÖ^—t×^a’ì4Ù!­ÀQäò@íŸÎ¨ÿh]L»ŒÛ¼qLvýé €è<ÿÀ… hÍs)¨K‚ÄÚƒ›†š@ZFvm'å'iäñ‚Oj!Õõ ‹‹Qæ[ý"m’8_7wÞÀ*IöÁõ¢ác¨¢’–˜Q@2oõ/ô§Ó%ÿRÿJkq=Œê)h®ƒ(¥¢€ŠZ((¥¢€ŠZ(x¿ÕŠ}2/õtúÍîh¶ +(¢ÄªÙ¶~i—ÈRÄ“É$zàtÏ>µr°&Ôn!žñë,Š¬UcÚÉr@ùçóƒŠLh¾4ë>R‚ÅpY‰'iܽOcÍEg¥[EYVFmù`I1$àtÕBK†žDAp.aI~I€æ6Èãƒje½ÜÄ©ç"+ +´Ä݃9玠jn‡fmý†ÛÌÞcÜ@Ú1 c€NѦÚ*lò²¸a†bpÁž˜“5ÃýµH¾d€Oi—nŽ $c“Τþ×—rÄ’,—iÔÄÉUS>ëNèVeËû¹Ø±” ¤©b7*ç#‘‚AÈô©mlÌvMorÞprI KlžOãXfè½Ù‘oá¾Ì›ŽÑò"äqü"´-î®Õ»I>äšâXL{ +9×?/­$ÕÇf_]>ØFË,£8ÜÅ#’})ßa¶ó7ù_1ÛžNÞœzŒV}ÕÕÔwN“â8%‰V=ƒ Éë߶*3«>aˆLžy¹‘$L … +ädvè´î…fkKk íºXûyôÈ?Ì +zÅÈò*€òcqõÇJÂ[ûØ­£wŸÌim’bÆ1ˆòÀìÏ9éZ\2ii‚ëí+ÞÒ §zó”c8ÏOJ.‚ćL´Ø«å’¸vsÔž·J˜[B >XÉ`çê:Ò°nnîf‰¦4K$&TdÌP:îóøÔ³jŽ—ÐEÏš¡ãF ÉûÀØù€ߨ Qteé´˜'½ŽfQ±V@Ê –*s‘þíXm>ÕäW0®Tà`tÈèqÛ5£ÞÞ]Î|ù` ¦^ à¼mž˜À uêMn +˜;ŒŠ$‰HB‚ň¤äÔ”QT ªòÿ¬5b —ýaªŽäËb:)h« J)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ÿÙ +endstream +endobj +39 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 267 +/Height 495 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Filter /DCTDecode +/Interpolate true +/Length 11066 +>> +stream +ÿØÿàJFIF``ÿÛC  +   $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀï "ÿÄ + ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ + ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ +$4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ô +)h¯xòÄ¢–ŠJ)i(¢ŒÒf€Š3ERÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÒPE-”RÒPE-%-Q@Q@i¤Ófë7/g¤ÝÜFpñÄYN:MÙ\i\ºZ“}xõ´×ú…ôp‹¹¼ÉŸ2ôéSRȱ5ä‘£sŠåú×[{/3×ÃÓÁ¯¼¶‘[Jn¦)<{×ç ŽÄ~uÛøP¸»ÓfŽâF“Ê“ +ÌrpGJ¸Wæ—-‰•;+p¥¨Á§fº ‡QIšLШ¦æŒÐ¨¦æ—4´RfŒÐÑIš3@ E&hÍ-Q@Q@Q@Q@Q@ EPEP cøþEûÿúâÕ²k'Ä1³è7Ê –0¶úTOáeGsË´HŒúÝœaŠæ@r„v5Ñ)¸É™¨¦‘ÓjØý‡í¿j‹ìßóÓwËkOÔ’Îé%e*2?äUu = +úâ &H®o7¤oã{oåùS´x.¤ñœÏ3 ,ÝcšKqN}/k+¥`äVfηâ‹K;IÒÒî&½Oº˜,3ž}ªûëvvv–ò_\Ç˾S‘ϸµÌ~ŸJ:dÿoRÌíåqŒç;¾œV†©=òOa +«ÃÙ—lÑÚ‰X¶>ï=*UYn>E±Óné¿g†ãíha•ö#€H-èxãñ©äÔ-b¼ŽÑåy²¦ Èý«”Ò4‰/<9¨ÙÎŒ“™Ø®åÚC‡¿ +~“c}¨Ú__\«%ÛAöXCu\øšµRNÚ ÅñøƒJ–ïì©}LNƒÁ>™éOŸ\Ó­fx¦ºD‘VRrz}k„²±še¶°šk¸Ý$Â,GÈAë¿9ük¥°µ ãNIaÜi±™xü)F¤Ÿ@pŠ4î|C¥ZN`žö4äã뎕bëT²²·YîncŽ&û¬OÞúz× ©¾¥ys¨ÂñËnm°Çh:Žåþ•jtkYt;Ùí¥žÒ+}¬nÚØôÿ=){ij>Du–Z͆ ²5­ÒH#~£h÷Í2ß_ÒÍìO18 +_¡èk“·Y5+¯‹H^–Ù.ÓÓ¦;gúÕ}.Î[›› y'» ŠÆ?°…‘êàçñ£ÚËM‘Ž P¸ÖôëK¯³Ot‰7!<ô«Â¨]h¶·š­®¡*æ[pp1Ãzgé[ËšÚ«u4iÔ”µD…Q@Q@Q@QHŠ( "˜Ë‘‚*J1@ÌY<7¤HÅ›Nƒ$äáqü«]Ó´[9"·Óã’öA¶8ã°'¿µv˜¦ìÎ}qYÊškDR“G á¯íF¸Õ­Ô–H[·¹÷®ÎÞÖXV("H£^ŠƒTûiا +q‚² IÉê3m©1F*É#ÛFÚ“b€#ÛFÚ“b€#ÛFÚ“b€#ÛFÚ“b€#ÛT5-,j1Æ¿j¹·d9›Miâ“šMY‚v2ô½ßJšI%”æIemÌßSZ SñKŠIYw.)h¦ ÅQ@Q@Q@Q@ EPEPE e€õ bc=©vCWí­žyQšÑþÓþ{/åXʼbìÍ#JRØçöŸCFÓè*è°ßþ{¯ýóGöÿÏuÿ¾j~³O¸ýŒŽ{kzÊ­è*è°ßþ{¯ýóGöÿÏuÿ¾húÍ>áìdsÛ[ÐþTmoCùWCý†ÿóÝïš?°ßþ{¯ýóGÖi÷c#žÚÞ‡ò£kzʺì7ÿžëÿ|Ñý†ÿóÝïš>³O¸{öÓè*6·¡ü«¡þÃùî¿÷ÍØoÿ=×þù£ë4û‡±‘ÏmoCùQµ½å]öÿÏuÿ¾hþÃùî¿÷ÍY§Ü=ŒŽ{kzÊ­è*è°ßþ{¯ýóGöÿÏuÿ¾húÍ>áìdsÛ[ÐþTmoCùWCý†ÿóÝïš?°ßþ{¯ýóGÖi÷c#žÚÞ‡ò£kzʺì7ÿžëÿ|Ñý†ÿóÝïš>³O¸{öÖô?•O¡®‡û ÿçºÿß5Æ‘41—VW’…‰ƒv¸:2F4È1¸~5 nÌš°QEÄQE-Q@Q@:?õ‹õ¦Ó“ýbýi=†oèëfÿtVÕbèëfú +Ú¯'üFwÒøŠ(¬MŠ( Š( Š( Š( Š( Š( Š( Š( ò¥ ô 2oõf«Õ‰¿Õš¯^Üv<ÙnQEQ!EPER¢Š(§Gþ±~´ÚtëëC7ô?õ³}mV.‰þ¶o÷EmW“ˆþ#;é|EV&EPEPEPEPEPEPEPEPAéE¥q’ÿ«5^¬Íþ¬Õjö£±æËp¢Š*‰ +(¢€ +)h ¢–ŠJtëëINOõ‹õ¡ì3Dÿ[7û¢¶kDÿ[7ÐVÍy8â3¾—ÀQEbhQEQEQEQEQEQEQEQE”PzP7ú³UªÌ¿êÍW¯j;l·ŠZ*‰ŠZ(¢–ŠJ)h §'úÅúÒS“ýbýi=†ohŸëfÿtVÍchŸëfú +Ù¯+üFwÒøŠ(¬MŠ( Š( Š( Š( Š( Š( Š( Š( ƒÒŠJã¦ÿVjµY—ýYªõíGcÍ{‰E-D‰E-QE (¢Š)Éþ±~´Úr¬_­&ÞÑÖÍô³XÚ/úÙ¾‚¶kʯüFwÒøŠ(¬MŠ( Š( Š( Š( Š( Š( Š( Š( ƒÒŠJã¦ÿVj½Y—ýYªÕíGcÍ–áEU(¢Š@-Q@‚Š( œŸ}~´Úr}õúÐÆ­"UŽá•Ž7Ž3[•ÉSüéGü´ûè×JòºgL*ò«UËyÒÿÏWÿ¾t¿óÕÿï£YýU÷/Û®ÇSErÞt¿óÕÿï£G/üõûèÑõWÜ=ºìu4W-çKÿ=_þú4yÒÿÏWÿ¾U}ÃÛ®ÇSErÞt¿óÕÿï£Móåÿž¯ÿ}>¬û‡·]Ž®ŠäþÑ/üõûèÒ}¢_ùêÿ÷Ñ£êϸ{uØëh®KíÿÏWÿ¾h—þz¿ýôhú«îÝv:Ú+’ûD¿óÕÿï£GÚ%ÿž¯ÿ}>ªû‡·]Ž¶Šä¾Ñ/üõûèÒý¢_ùêÿ÷ѣ꯸{uØë(®SÏ—þz¿ýôi|éç«ÿßFª¾áí×cª¨æ•a‰Îs^t¿óÕÿï£MgwûÌÍõ4Ö]X:þDRÿ«5^¬Kþ¬ÕzîŽÇ$· +(¢¨¢Š(h¢Š(¢Š)Sï¯Ö’œŸ}~´˜ËRÔ¶Öís0{õ>‚²m%vhµÐ-í¤¹}±¯Ôö­“`s#~B®Ã +AýiI®•å-´GT)%¸Å·zDƒþHÖ¶î0Сü)²\GÌŽ¨=X✒«¨e`ÊzkgÜÒÈ¥q¤!¶Ÿî·JÉ’7‰Ê:•aØ×P Ayh—Qc€ãîµtS®Ó´Œ§I=bsf˜ùÚq×T®ŒŒU†Q:†RB1]‡1Çizåð¿xµIîb¸ÄŒ-^ÙV6 ’662xÅ"êÚ¤ZUž·%âÉĪÐF *±ÀÃuÈ­›MÆ;„ºY§¸1†X¼ÙŒ‹fòÇáI†´ø®Eã28RcFõ YòÈ«£çQÕü­rî-GËK ˆŽ/% pN3Ž~µr-GP³ÕlÒêëí1]Ú¼Å<µ]…@?.9Ç=ëQ´;F·¿€ù›/œ¼ß79 =:T§J·7v—$7™kG<`€*|¬.ŽkHÕõëém.ü™¤µ™¿x¦8Äj¾ªAÝ‘ïKý±ª>‹&¼·j±$¤ ?-v”·ºæ¶¡Ðì´ù|øæžcc'•ç‘žçèzEÅËyr3©a3[$äÆIçqZ\²¶ãº)I{ª]êšÊÁ¨µ¼qÇ$qù(Ç&0Ø$Ž™¨eñ§vºd6«*Éqkö‰Fbz`8Åtk¥[­Åôã~ûÕ /<`.ÑN*»øvÅ­­!S4mh»!š9 +È£Ó"Ÿ,…tXÐæ¿ŸLµ(LW@ÀÈìxâ´ÅT´†+(’Ùev<‘æɹ›ÔäýjÂÊ…ÊRÀàŒò3üªÖIJJ))hÉÕš¯VeÿWUëHìL·ŠZ*„%´PEP ¢Š(§'ß_­6œŸ}~´˜Ë5·¤ÂÜÊGÌçô¬ZémWm¤Cý‘\X™Z6:h«Ê䦪ÝL°A$­÷QK¬µT¸U’'FåX~•Äu7xƒÄ7Þ Ô¥¹º™Ìe—ï•°·>øš÷Kñ ­“LòY]8âfÈRx =9ªšÿ‚u=2úCin÷vLÇÊš¿Œô8èEmxÁ—¿ÛvÚŽ§¶†ßrðÒ°é×­híc=n{j”UxÍX™¡¬BU”¿ÁúÖD­åÄïýÕ&º-YseŸF° wЕàqÕV‘ˤ÷PÅ 4‘H<  9 rìxí“øŠ“íò“PŽéä·óÕD<ƒ‘éI#ØWBj mÒicw,|³¸.~\ö${V–dÜ[U•mÓÏmÒ‘–8àØ{•ss8¹»Û#¬®a€õ¿.wtÉ8ãҵ誰Žrc-Ò‹u»’X%–%à ·,àqÓTH×Q*ˆî™Ô’9žLuj…äã·ÅtÚ¤Ò,®î¥…!°#“õÅ>Š(Vq²0sŠžQÜÌ°šê}FQ,áV"Ê`î@8 xã=zžµ··fñŒrHYepTã'X€~†·éiØW9•žc+\ —eTŽ3;']²äqÐQõ4±Ës–h¼Éd ñòpB)“ßöÿ®dO+,|?ñ3x“CÝ9l¶"9¿Úã†ü˜5Ù/Jçô i>–i4ؤ¦_t…ÇÖºRÊE]±f»0¬&äc8­ RàKq±OÊœ~5žk¾Œy`rUw‘ÇC½¼šý½ÕÎcÆ—.H,cSóGíÅf3[7†™$š%–9eòLŽøqž±sôÆsŠôªs•õã­&Åàmtã¥>As£ØZÞêšB¬—-ÜÜ;¹Þªª0l“ÇàkZößíäKö{yÂÛ“‰ú/Ì9k[9Ç>´ìsš®Qsô×óI ªeViÈöáFbP­†õì:ÿ{ŠHn¦A8·ŽI<Ä—!ž9÷®‡hÉ8=x ª‘‚J,9öÕ/¶¢¦Ó,‰æ'ÉÃ*–Ýù€¿÷Õ$šµì‚'…âŽ9•ä‰¤`¡†ì(äz`úó] £bQÓŠ,û…ÑnoY/$ûDQˆ¥ªpR~cß“ŽÕ£a7Úl£—s¶r `$vãñU ŒjpšÅ¢Š)ˆŽ_õu^¬Ëþ¬Õj¸ìKÜ(¢Š¢BŠ)h¢Š(¢Š(§'úÅúÓiÉ÷×ëIŒ³OÚ'‡ ™EdYÑZ]¥Òqüµ9ZæÙ2’t"´!ÕÝ@¦ÿqÁ®J˜w{Äé…e´m´mª‹ªÛ»×ê´«[ò‡cô¬}”û{H÷.ToïÖ1Fs!ê»TçÕ&”mOݯ·Z£[Ó¡­äe:Ý"!¨æ*«6Å-…'•%!®£œá-5Q5ΰúÕÜ¢“hÝ—Ë|«ž„ð=ù­}4ÊúýhcEŠ-™†IÆj¯â)ž+[XÄÍ\,sʧPƒß¶Nkžrkch«še?ß•e?ßý+ËÈ°ñVVM,ÂÍ,M/˜Ž„Ï5ÐNÎHÑ&ù’«œdúTs²¹QÙO÷ÿJ>Ê¿úU'Õ' qÆ$‹nmÛŽõäSΧ'ŸùXWeIƒ”b3ŒôâŽv¨µöSýÿÒ²Ÿïþ•R+û©’ß +½ÆJä’¹õ4Øîn!žvmºXÈÉÏ!GÙ4s°åEß²Ÿïþ”Ÿd?ßý*ÎåþðüéhçaÊŠ¿d?ß•d?ß•Z¢Žv¨«öCýÿÒ²ïþ•jŠ9Ør¢¯Ù÷ÇåGÙ÷ÇåV¨£‡**ýÿ|~T}ÿ|~UjŠ9Ør¢·Ù÷ÿJ>Ê¿úUš­zÊa9Äîý;QÎÕÙO÷ÿJŠHš3Ï ÷¬»8áÞÔ6ªÛÎÜK îÇvã[—?ê‡ÖœfÛŠ±B_õf «ÿ«5^ºc±Œ· +(¢™!EPE´”RÑ@ NO¾¿ZJTûëõ¤Æ‹5q„W0”‘UцXd§IšÆQ¹ªv"›Ãºs4/oÚK ‡Y O¸úÕ`®…[HÁ½g抟fW9hÙZ„fö1Þ²Zù¢O&=ãlr1ÒªÑG³rãÛ[ÉÄÑ!~êãKäCŒyi‚Á±Žã¡ýRÍ{0ç-ý’ØcÇÆ1Àìr?^j|ZÍÍ{0ç4²=hÈõ¬ê(öaÎhäzÑ‘ëYÔQìÃœÑÈõ£#Ö³¨£Ù‡9£‘ëFG­gQG³sG#Ö£‘K¨ +G‚WûsT¨£Ù‡8–ºuż;T¸ù…÷½nAãüjÕË‚ƒžrjµÔ,'+Œ—ýYªõb_õf ­£±”·ŠZ*‰ŠZ(¢Š(QES“ï­6œ¿|}i0Dæ±ä×<¦™ÚʳÃ!æpöÎJØ5ÉËi1–íÞüÎ× ñÏbAⱓf¨èæ¾µ¶tYîbŸî‡p ¥¸¼¶µE{‰ã‰[¡vÈž9 ½¼iì$º(¡4 O Ï?1mç±’Ê[›Y.•-|£å®òÇo~™ö¢ìv6ö5–Ùçíe´0'¤Å-%fh%´PŠ(¢€ +1EbŠ( M¥ ¢Š(¢Š(¢Š(¢Š(¢Š(’ýÃPTòýÃPUÇb%¸QEÄQERÑ@ E-”åûãëIJŸ|}hzç­®o#é ƒNŸh“çªþ†º*‚;X¡Y5À‘‹·=IëY4h™ÏEw_–á?9ÆqW.´x¤´·µDpÇ(vˆ$sžG9«éVqZËn!Ìrÿ¬ÞÅ‹}Iæ‹0º2£Ô5(­/d˜ˆáÞ’M +¡Ýé€H"­Ã-ô:”\Ü$±ÜFÍ´G·aè{Ž{Õˆô‹Hà–²2J»_|ŒÄL“ÅYkhšh¦+óÄCž€õ§fF%´÷"ËN‚ÙÒ#;H¤ìÎ1“)ßÚ°ÛMË— r¶é)L›$LÖ¬vñy “ÌxÏZ†ïNŽ[[”Žwœ†a# p3‘ÈéÚ•˜]]J)¯­ÅÀº™ W‹1…Á9ôúU"y%YV{‰$™Ü’B#dÈôj¶¢¼?j7;WÏUR"™ØàgçœóZVvö!ü…l¹™Ü±8éÉæ…pv- +(¥«$J)h ¢–ŠJ)h ¢–Šd¿pÕz±/Ü5Tv%‰E-BŠZ(¢–ŠJ)h §'ßZJTûãëH ”Vežª·7PJ¢6…›<2Žÿ‡³¹¡¥EdÛkQË Ìò¯—RN2ÎqêsÒ¦]^ÔÛK;y¨"ÆôxÊ¿=>SÏ4®‚ÌТ¨ZµûCÇpƒxEF…ƒ±>‹ÔÒ¶§Û,æ ¢¬p@ŇÔc"‹ ³/QTN«j,ÅÖæØ[`]‡yn›võϵ6=^ÖH&™¼ØÖ‰#*Àžœy¢è,Í +ZÏWµhf•¼Ø„#s¬±•`;±ix·ẖOSŒKB:wAbÆ(Å--ŠZ((¥¢€ŠZ((¥¢€ŠZ(9~á¨*Ä¿r «ŽÄ±(¥¢¨BQKI@ ER¢Š(§'ßZm9>øúÐõŒº2Ì’‹A7-"•=TõØ÷µIYXÒç?u£ÍúýhÅT¸Ô¬­dòî.á‰ÈÎ×p [®zõÓN¹º¼†kYC03A&7‚)þ„VMØÑ+›ÙÈȦù©æù[‡˜í¹çµËß\^\jWJ“y" ¦0×f¹\ä®>n}}1VÖ݈纑dktl,Ä+6q€;j\ñ¶n X¤”Ê‚8ÉŸR:æ¤ Aäåà‰-ô½a£¹˜Ì­8ÚÓŒ†Ç¯½^xd½ÔÚº¸Ž%¶GÛ…yÉç"‹…º+šŽêK‹]2›¹"ŽU2U}ŒÅz ݽ +#2ͥΖ÷ÌR;Â¡ä¸ º÷Cõýj9‚ÇMKT4‰c—OS”…fRe“{d~nõ|S$Z(¢˜Q@Q@Q@Q@Q@Ëþ® «ÿ«ªõQØ–QEP‚Š( ¢Š)(¢Š)Sï¯Ö’œŸ|}h'ªïejó‰ÞÚ”tÆ ~uf’³4+Ëio;«ËoŽŸu#éšY-`•Ñä‚7tå¿OJšŠƒìV¥äsm y¶ °ô>µ ‰ï¡ˆÛ¸qéO¢€(^éÂæÕmá0ÄŠÙÃ@®¿‘â›k¤[Aiöy’;€\È|ÈÆ7AÐV¬ij‘¢¢(ÀU¤¢Š`QEQEQEQEQEQE2_õf ©åû† «ŽÄKp¢Š)’QE +)h BQKE%9>øúÒR§ß ÕK‰%¾¾‰Û+Š¨1ЯÖCØêÞÜÍisn©;+$EˆÀ¨aéY3D$ºÑåu³•íam’NpG\¤ +[Yã–Tµ´{Ÿ%CJÁÂ…ÈÈõ8¨›H»)-ºÞF¶³¶éWËù²~ðSž÷ÏZ§©¤Ö—7)hòâåä[f~q´aºëJì«#JMYÏ”–¶q+Ä%((U=2Oz’R9ͨHØ} °ÃpP¨äÊ«®›wÛÍk¬¤bp3r¸9¥û) Æ@ß1Ï\þCò¥¨h2ÞøÜ\lXXGå‡ÞHïžß…>þg‚Ø: u\…Ü@$éÐÙGnÈc.6&Ìg ŽÙ©e‰fU œ 1êE=l×ÙR ̤±,þjì%Aç÷çô©Œ·I?“""D@®wgŸAÍZò#2;‘’êçÐúê´šj˜ŠÃ4‘¡I!±ëøzb–¡¡bÞ_>Ú)€Ç˜ñé‘š–‘T"*€Q€-1Q@Q@Q@Q@Q@Q@Q@ EPEPEPUêU» rr Þ:õ«u BMÚÍ‘´FÉ©úP2¿Ý±Ì. ‘‚¬„ŽsÀã¯5%µÑ¹Ë,EcçXsƒŽª²ŸËŠÝÝ 0`@;Ž@ôô§Ãk"ÞØD™~B~ŸÖ–¡¡5ÌÿgX!rÌ(8äœTqßBÊb3‘éëÔS®íþÓ¦âuc‚AÀ9ê)«f‘ÜE$`EaŽ¤“ŽsøQ¨hH—0¼e÷¨ ÷¾aÅi€—jeXg¥T]5ƒÁûÅÚ¿ëF>þ eü‰¨¿²çw-$À¶Â2K6NàAÁà: +.ÃCAn­ÝÖd*£q9è=J—µf\E$×6ñ¶Ñ#q2¦Hòóž¿PâkRš¢Š(QEQEQEQERRÑ@Q@%-RRÑ@´PQKE%´PTfx‚;—P¨pÇ= KY³ÛJÚ‚ª¡ò%e’Fì +ÿËùRlhÑ¢±¥gÝ$¢m¬0¨Àx!²Gä*ÔмWpù"Y©-€3ÉÝœ~‹…eu ¤# ŽôµŒ"ºû*Ó57–Í­Ößí|³²•Üs&KÙàWžø“pñ~“w ­ž£oaf`•…ä!efFlðXÜƹ½¼Îa½ÿ…§áÏùèð"ßÿŽQÿ OßóÐÿàE¿ÿ¯Ô´½RöÙ¢‹O²„µÄ’VùòɆt—úäz +Éÿ„OWÿžVßøÿOÛÌ=„ ¿áiøsþzü·ÿã”ÂÓðçüô?øoÿÇ+çßøDõùåmÿ°ÿñtÂ'¬Ï+oü ‡ÿ‹£ÛÌ=„ª4mfß[´{›d‘X/ÎTîÊ+‚ +±ã½h×ðÖ3†<–d/D±Ã€ÂÞFA àñ]uÁ·ÙÉ4”šAEU”´PIKEQEQE%-PRÑEQEQERÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ÿÙ +endstream +endobj +40 0 obj +<< +/Filter /FlateDecode +/Length 5189 +>> +stream +H‰¤W[oã6~ϯࣵ;VDŠ”äÅÀ@ì6³-:À1ЇNQ(2mkÇ‘2ºÌ4ÿ~ïTfÚÕ'”DžËw.ßáí]7Ô§²ÐÛ··wÃPV~D¿ÞîÚahŸÐo·ããðòÌÑí}Û¼C·ùôŸò\7åP· ÚnwßíÑͧ›%(Ãå‚:~óË?Ps³;Ü$1aonß=$èÜßÜ ÂIœt8ݤ°"b$fèp¼Y¥Ñá¿7ßn~ž!ð• o­ 2Û,Ëa0ÕÃxŒÖZª8ªëÆt4ŽVC=ïDÉ+‡E*'¼}´ÆJˆU®ñû ϸyw:3aŸ4XsQ4;çÒ¥ñ×± +þpé íx¾X§ž­Í]å¢P›½ŸuŽ|Gézõ±á6ú¦^œ– Æ"hu¸ØPõàW°Žçˆ©€¹{;ÀVýz¸”2:ÖT§¡¶YÀç#I"™¦EL©A2 tÙR…Ç,s¡;r s㊭º˜¬-;‰‘ e'ƒæNºš®Ö^X*#ëâJª´âœ–ª½¶ÙÙßËìl“Çi¡‚L±ùŠ 7“Is±^‰ìZ§úéÑ&1ö¦×G}~¸p[Ý8Ä{QmAh,0§«Ñ7Z}MeÓTKg ù$_>ó®úºÒœšOc-j­÷*k>ºùÒäË0 +Ýú.–Òwšç‚¥œR çd— ÿ’=üÒí\6KýÞ@Ðè$«\á#Ô°d?ÚX«„‚°=·óCƒÆœ‰”±¸È&6*N¼¬l¶N}P‘xñ€£K²H㯉n5íIZÉÕdzmSZÛ:;¯x8ªÎ‚Ãå½”TYD/ö`©­ív! 0}~s Ïò$ÆTä …RfxËÄìMsX[e¶xÎÄ÷­‚FÌæPûôN”>üßÀ¯Ð¿{}~¿Õ®y›Y¦ÈA£×LÔ‡îáGÕšíÄþçR˜5D^ +°Vlö +ù¹Û£ä:c¥aÒ!áÈví¼ò=ÖÞH…»­½•ˆÃÐàœ©4Ø=3%tr@ +6°¼² ž™õän«“Ǹqï> +÷…Ù ]½SP¸ûR¢` —©]À=iéÐJaòâ²&€|ðÒùŽR§t¡Ò¥3ž©ÐÍTÃü°z×ÚíÔÍ„òŸjœ1Üqt•yƒ¢€b^Acˆ×? °-ÃY\PÃÆÜôïž{ÍlÍMʃ駂”™î{ÏmÝ r—fQÛ«cÁŽ]`QÐPåÏu¸¥e- +H4%ùJ Ži6áÔZLÀJ•#òþôXV&b‚ž ñGšDÛ±9¾Ñ×l^6fR‚úÑž¨.NølpIÐÐåùI3äÿ‡{t]%ÀªæŸZÍb‚~Hȃxc¢”Ŭ˜@Q÷^Ñ—Þºo]›̵õs´n gwá›V÷x†³,ÎQ–àëy¾l& oLÚòkiŒý£–sòY~ש÷è_?M>Æ!.1™?éA/eÄs:µvЃhÉWœCÇ¥ôz;»¾ý$ºs—×¾•¸‰Êô…¡}⃀²à€ØRn#ù&Î +±´–“Ú|´FÃNMy:,x%“K[ü8Iµ—H7Bÿ-ÿlçþ5 +VB\oå83Œ–2m§åò@¦ºòÑÒèéÄÝÅÇrª£\wc|£H=e¯+HŠë!'´de—Ö î¸YºsqMâ‹!¤š–2¦l¬`¢¤dŽí“±¯ž¯?]JžEòJSºnY›8A™ˆ ‘.« ·Yƒ ‘ÊÅØsԞУ1ÿ:Ê‘¶¶Ez 4]Ê’xSÄdâ‘O’­‰íØÙ +0j)I’”¾rVt€t)I’”Åpð¡€>]V]k]ïÝ\=>¼>äè|myHЖÒbJ ™Š‰©V{‘>/½™1ì þv¢ÿèvÐÌ9éRÚKaäÈ©Âõü.¥¼’y3Í懧z¸¼AÄ ’˜p%¦î‚.‰éRR[‹KÑ¡BšXá[)‘ÙØ,%81'taM-m×êšÊ²M\d*¿\ìøU_ QBÑ`±wß͈ÞÌ]ÚØ1[²‰©0@bÓ Q=2o®/ðZöïƒI«÷?Ù®‰"¸š­þéïœv¨Åmë’<©‘Õ䦣öæÜ»³eÇå¹G^SONĹs3])ˆ€ND—ÒGJrÙ4=Øêfàî:ibÈûáM€=K™#ÍXL©gO@–ӥ̑f@ó ÄmÂ?\¸Ì9Z&Ä=·e1‚m:ìϼ«\8ëÏr2èí •b¼4Âe_œÞk[Â\ŠõHbÓE-²†–ŒrôoÝí£±îÔÏåÙåZ˜Ì N¥éÚýàð à3ºøÓAFœ½!yµø—ÊÙÌA$ëºG_øõàòRÊÂÐb +³.Çó]^ÊRâÒJ¼”¤pNãb‘JfÙFîý«K¬fPBâB_Kï¼)´^÷¯¼±”Ó-`0'.èZŸM½_·æF;CÍ”[vÑ‘Ÿ„„r´ú¯ƒÝ9XQÜø“9Í=“ËξEWs|ä_Ó~q—¦:‰¼˜ÎN{¶˜B(ŽaÊò!ÿ³+Ñ|cSKŽÅʳú×üì\|½ÈÓ8Ë|¥%1§Á¦P« tO~ÇË«ŒÍtqµÁªÝ½M’”m©àÁ-àGá—‹ÿ[I†êƒß~÷þKxÁò-a².àÛoçÇkNËÖ^Ä9Ó\@ç¼. Qt“á5ad"›,Î4t$¹ƒj”TÝ @î%BL¬“t»Æ‰*.M®Ðe;µVŸUCŸ±ø¼UõiÛX¶]Û—êŒÛsÿêÌŽsV9ꘪ.m ‘K}u¾|÷1ӦÌgz;u¬ð½²ªÌ)–j2Oê^jQVʬÒP· ‘¬ü×^S_UfU °9¹ž É"›íDØBLÞ;“{#WÉ!Ú3æâåŸØKàÔÖÌóà•ÅߎíöOúš·kfÎÊ€eSËD6í€aßü* ˜"¾]‘u©š‰H‰qA—à{éd*ÌT¶3T¢„ÌUŠ€Í‰¯üÇ^þ&©8à6›èÊÉÔaÈc’ìp +š|°ƒ‰P"º•ƒ) [eÉB¥&6,S}]:´öÆ[ö讲ænÄç“l4cùeÒgÑj=† 1ÃW +|c²Ãÿc½lz7’0|Ÿ_Á£´1"Ù$›Ø…Û‰ì,’=%Z¢%"©é™ñ¿ßꪮ¦žcÐw@L·Ÿ;.¸ U—Þ¹®?.<£LNïÜ,¶-È9dÎHQæÓ+¦@ôÐn.# +¿QŠ?׉øc§ íÇËâ$ÅÌ8Í‡Ò þ›¿Yßlu®æ“ 8 n5à¤s5_µŽ¹ÉßO 2ö0\ïlý¿Š™‡.ƒº ?¡¼3ÿ“úçh™ZÕCZíõŒÅleÖªL¶¤Ûšh©>§¢¶ï¡}Øj +PLå\šTÉä_º®'Í4’¢s:ªÙý=À±¹R.URN̼ـ® +ð‘r« Ÿ$‡† +@îì쯈XÂKMòr¢ßš( ÌÃ*ìpì\˜UH†ÁË Qh®°¢$@MMr¡~’ø™Õ’žû|>]!&îjƒbS,sî?ÙÕ&–­+óÐÇù{Ë\9ƒp~j/,SÇÅùÔ³å£E2i°Ô}òÁ…ßÐìsåFÒeÊMÅ” +Qaè–AÔ%x^Äe”&yœ™ºûJÌ6ÏñàšC{ (· 9Éy¢~;!Å6wJ*‚‘<Ïý‡Ç ¶Ô¥ï1wŠ&ƒœ‰¹S4ÉŠ Œ…ÂuÛc}iÇ×¥+q@fÏT‹Ô3" FªßxR',Uß¹eZBAu¼J¼N,*¿¡®ׄ}bš†nÙLªöm¼ÕâŽi=ÛS1÷þáTû(ŠEyå[iÚJUýÖÌ~üR©:¯øeêìz$ÈÍŠ¶QrúHr{Ÿ’s !Ë3¥0g¥ÃÜ៩æèDÝ-íå(‘±Jlu<5[ìõËШ7–»úg*!õÔ"•ê«ö)‘ o1íhþã¼s@€ëÛ-¢YÃ÷à–þ™š¶zbKöåö’•AjϘo‚—ìùö;š=¿€^r¯Ÿz`þ•J¼Ê€¡åw =C“ªRÝaMÕÅš[æ¸B¬ÐuC³Þ£U« )tëIÅfu]žkÇw~ñ;T+}˜Èï'¼¢V‚@ÓñzŽîkDjuI- Ð‡s=IXr{ôhjâÌ=G9½Ê‚™´PI‡#”Ú‹¿:>›YOlÇò|—^OL=K¥öÅ ïÎÐ;>ötmwÆ_êµ÷Óæ¶Y_/ÍíâõåòËÙí|€ÙRÙlJ\?&cÜoÛãÉ#{â«<2^¾£ka[òû€?Åò4õ +i±º½Ì-Õ³´Xõ.ÍÒ–tg#EûÃÒJæ"˜é$R:í‹êêVŸ->7K;†—Wxl}¬ÇñR#™mLJ[þÑ}¤^ˆèzcãÒN*vê ,7¹±ø³¡•Ê¤ýÙ›2rÓÎî.r0§2S³‹ù7€«Êqðg¤AØ» Ûì${jÆ/d±éœ•ýñõ|PßÔ!×ÑâKÙ-%a»ztlq:³ã„\ç\†…šŠSï>OäÊñˆ½=á³f¼4·»U`®ï–,•æq~ÀT5à gÅp“oc8ö\œË…réy0ºDzj\ÖjWi;¼¦€„©f”®ÿBÆYjì£ÑÞÖõ¥óúò¤f­óç FµÿÜîàTÛê茟êûK´UUsèé¤T€[V·=Ý3nžUÚ²„øÙR{îé¡j6ŸqÓ×ú„?ÏGô'$Õçâaz~¹‚v½9Õ€pbTÄEÁÔWÀðô)¤+¬Kò4.BÓ{Ë V‚P5h#°)h™Àã‡ûÓ‹>äö“i†¢÷ WÓRkÿξÓÿoHÊú,3ùæ™or’†ì|Sy¦¼ Ç©j“#ó;‹Î¿ä P&p5èk?™ê•´S;ˆ}¼B@{Äd3¡ÀÍÊÃ5Åv“ØO  wYw>†CpèÂà$¬Ë >^EU2¡¯˜”HÁ¡`› ù°ú¸!ïPJøÐŽPêDä.ÃÜ…®]~’Çy¶q 𬖀…·÷”d|Kïeà;é=•Eº$¸˜öKXÝÙÓ¸ëUÑü‰ES'Á#Ûòè”O¾ö.;áÛ0™üLN]¬Ý-y¤ xî|eò(¿ÒožBÕKܵW“OPE¢çØxLúX‡m™ä9ÏÁ’XŸÓ¨#ªß°®¬2Q‚æ´‰ÊHz&¨â]t¬„…#±Ûä÷+¿…˲ª°5W½!Bs—Ã’¥ÇT¯¾q“ä{@zÏÕ Bq"X~‡L¯ù¤\©YÉŠj13äZ;àE/êÁü£ñah„“N=Fvk.ÍGõ¿¥™O¿€dÂw‘[šÄ©EË_k¤ n J¿Ò‰‰`ìÂë˾!3¯ìQš#I ¡U7zªuG@·³{µ¼û×¹A-Û9¢Õûôï_ëN']OYÎÙÐæ©>:ŠCïõcóuŒCâ=WNdbÍ¢0g›±ôîXåœÝfÞ·oÜ^&Ãõ#Âöyà·ÐvÏ/Eïcèñ熧ÊöP_jU#ŽØGÊ‹ ÏŠ/ZÑQ(4h(¨@¾OÚ¬ó¸°ÒÆ×)m‡¹½ö.ý0g›z¤‡Ñ‘þØ·O-=mÇ×HEE•‚µ°Óx D:á¿´#^Ä!j¡’Ž5 +]…v;i«¯!‘š¯Y-(V‹U@vh‘»!–¯-nAFB0/Z]BöÚkÛÒý@ÃÕxoªÃAµêáî9ô²;ÆAÉ žüñS“‡4”ô¬Å&+y÷ýxˆÜ\P‘ë\ÞQ}ÄÀ}ô2@3°ÉûÏO¿Åi.$2›¸¼íOèï¹Û'åó±q%Ún©uCCW4#æBEZJçjÈ&DzñŸÔ:ûŠ ¬RÄY”•yœË(M =ÊÀ=ûïóXym_ñ=ÛÓ‡~>­£{ðÝâ¶Ø¤ÊàT2‡g·[ów{É·íQoW±Ol¥rUd2.¢TÆ™¶÷ü7³_Ç@f•0«„^&É-Ï‚ð¢÷vê‹ÍD… CRêº1;‹^š,|lU¯®@Ò-ö/¦`T‹j®Š‚û’¿‡/UC–9_Ù$͸Åâ=,Â`‰3~ü«Ìæ&Ë÷1Yø¿šHܤ|“0rÅ­§¬ÞÅ$ÌÝDxyõc}ù3¢|ªu÷UMyú°yðK»7€¥Èé·ãAË—ef34½ÔoAÿþð?b8¥à +endstream +endobj +41 0 obj +<< +/BM /Normal +/CA 1 +/Type /ExtGState +/ca 1 +>> +endobj +42 0 obj +<< +/Type /Font +/Subtype /Type0 +/BaseFont /BCDJEE+OpenSans-Italic +/Encoding /Identity-H +/DescendantFonts [963 0 R] +/ToUnicode 964 0 R +>> +endobj +43 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 629 +/Height 354 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Filter /DCTDecode +/Interpolate true +/Length 26104 +>> +stream +ÿØÿàJFIF``ÿÛC  +   $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀbu"ÿÄ + ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ + ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ +$4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?òú)h­ŒÄ¢–ŠJ)h ¢–ŠJ)ñ§™2F70\ýkÔu?‡þÐî!·ÕuB’=êçnÖçCÿÖȦ•Àòº+¹ñ‡ƒ4ÍÃZ~³¦]]IÛ¨Ùq·8e,ÀŸ­pä2ðÀŽ3È¡«”RÐAS†ÔH¢–ŠJ)h ¢–ŠJ)h ¢–”#F9Î8뎴Ú(¥ ¢–•Qœá±ô4Ú)@$à}(ÁÆqÀ ¢–ŠJ)ØaœƒÁÁâ’€ŠZ' é@ E-*£9!¶98 ÑKF3Ž=h(¥¢€Šz£ÉˆÍŽ¸¦ÐQKE%´PQKJÈéÊW<ŒŒf€E-”RÓ¶8Mûiþ,q@ ¢–ŠJ)h ¢–¦û%ÏÙ¾Óöy|ŒãÍØvþ}( +)iñÆò¸HÑÏEQ’h:)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–Š%´PQKE%´P¡aÄnÝÁ?{~£¯éšŽµo}¢kZ{ÝÏjÖ>LîÈFöY~FùìF xuMkuqc8žÖVŠ`0²' ¿CØûŠiØiž“ñ"úÆÛšo‡–úFÒeóÖ$ +sÀ^XqY ¬xbq·È%qmoàf;R2®Šr6±m¤5q ZGgv,ÌrXœ’i¸§p¹Ûý¿Á¢ÚÍ#„}¢8YZimò»Ê. (8`Þ½sžÕ-þ»áiãÔnüs}4Þd"X0¼ÀéœuïÐõ®b•Âçq«à´kÄþÌ-¢‹s Ã>w3ppAePxáG#»lµO }¢çí–‰äˆbŽH>ñÙó±8';þœwí\N(Å žŠÃÂvz~›suojÑHÊV8ðeQä™0[?¼ ò?®:þòÀx‘ï,lã6+*²[¿*Àc ð8<öÍeâ—\.Ku2ÜÞM:B¬ŽYbŒaPÀ¡¥¢„¢–ŠJë´i¶ZV›m<(ò·¡å!÷EæG…Û‚äðr=«’£î3³›TðšBÍ”/"ÂþB5¹Â‹µ_Ÿ˜î sþ54z·ƒ[P2K§F#V˜F"«ƒå”-Ùÿ–ƒ¡ÆG¶8\QŠ.,_½¼ºÔ–‘ùVÍ3´Qç;P“Ï ©ô»Ô±7Lû‹<;+ÉÞ§¨äp Q¢ðêZ{ÞŨϱn £È‰á„Û˜ø¿ÔŠûOâÑY$†I(ÙUö»×;Xztüð1F)Ü ×²ÛIiP6?x¦3¿vNInã§ü*….(¤#¦“YÒ®¦œÜDH’è9!xu V#Ô\ñÈ5Y¯ôÖQ$"<ï IV@¥”탖DžŠ1N㹸o4væt†FC†‘7¢0 /ç* —§Éfn#ExïCƒM¼…Á$w"¸ú)§ažƒm«x[ËžêHmI‰ > ÓüÒ p¿)E,=ªvï†ìæ·¹Ki#›÷!Âۯ«ÙËn, éœWE °Öü-gV^uÄÛ¤šÎ?Œ.£8ûÃÌ*~l×#™$iPX’B¨QÏ IE(¥¢„¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠZ)h ¢–ŠJ)h ¢–ŠJÐÓt¸®í|éòI)Æ+<ô­íþA‰þñþt˜Ðßì+OïKÿ}õ¨þ´þô¿÷×ÿZ´è¤33û +ÓûÒÿß_ýj?°­?½/ýõÿÖ­:(3û +ÓûÒÿß_ýj?°­?½/ýõÿÖ­:(3û +ÓûÒÿß_ýj?°­?½/ýõÿÖ­:(,èV¸áåð/þµa…(î„çcšì+‘øø›þºçM ‰E-Ä%´PݼÖ8æõ?>õÍõ¨é ]Íê:77©üé(¤1w7©üèÜާ󤢀szŸÎÍê:J(w7©üèÜާ󤢀szŸÎÍê:J(w7©üèÜާ󤢀szŸÎÍê:J(w7©üèÜާ󤢀szŸÎÍê:J(w7©üèÜާ󤢀szŸÎÍê:J(w7©üèÜާ󤢀szŸÎÍê:J(w7©üèÜާ󤢀.Z±e`Npjz¯i÷[ëVj„¢–Š%$6íutcÝ…$ûS©Ö7‚ÇQYž!,a†øÏF”1›Þ ðM΃kk,²¡71™#î鎞GµbXèz–¥l×–Í,jÛ~R2[ŽêOÌ+£ñáÖ¬Ò­-äC”’*@Æ1קµröÚŽ¡c-®&†# a°7ŒýG¥\d¯ ê±Åe([†Ù«œgéŽý)ÍáÝe´Ë ¨¬ì|³À^¤ý*9uÍVv‰¥¿¸vˆ†Œ³’TOÎœÚæ®É!kû’“—$8=Aõ£A[økXº€OŒžQ]ÊÍ… 6Ï\ª“ùzŠŠ}U¶ŒI>Ÿs-$à©ô¤Þ¨-þÎ/çòBy{7œmÁ\ß$§³júµâîšòâe‰•òÌNÒ ÁÏÔœ}hПkO,é×øà'¯JÍ­›ëtÒËw"³.BµFcؾCÁ÷Ícmm»¶¹ÆqÅ-*H‰ÝŠŽ¤‹ïþ5´S”RÑ@ E-”RÑ@ E-´”´PIKE”´PEP•½¢È1?Þ?ΰJÞÑ?äŸïçIRÑHbQKE%´PQKE%r/ÿ×Cü믮Eÿãâoúè4&%QLAEP|ÿë›ëQÔ³ÿ®o­GRP”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-fÓî·Ö­UkNõ«5H–QE%W“ïš³Uäûæ€ZÚLÚ‚F>Çd³ùnÌ ”,¸<‚1À¬ªØÒm5[›M”þ\°q“Ï=Ïà{P†\7þ!·¶vk_*8X1¡]¸UŸ@8÷5¥ö­äÈRÈÊÓªª¾yryç!{ûšµ>¬C+·$ˆ¥v4‹ÁÉ +3F8é“ÐTéšÄQƉz‘ž‚H軀„ûvÏjcöß6óžQÜ.ç‰q‰úgwןJKkvÝ&hì•–Gi]òq’<†ëŒ^}趱ÕÞI!þÐEŽÝ‰Êœüáw z Ÿ~¸¨¾¥ö™­Í⨆<1\)Rqè{w”‹"â†9cn +T•Æ©^½”ž[ZDñ :žA=È$“L —¶3^eõFu(¹rÊ1× ÿß4¿ÙzhÀ:²–!È +ƒ …ÏÏ·zÇŤ­¾Ÿ¦ÉhMD$ìp##:òOáÚ™¨ÚÚÚAÚêiÛ€ǯ?Nk7´˜©"ûÿ…2¤‹ïþšŠZ)€”RÑ@ E-”RÑ@ E-QKE%´PQKE%´P•^žyV(ÆYŽY=*æ7R9ê©ÇãChÚéVÖ¨ ’NìÃ?«×yD_´Ù”G_2,=³W´pÇ[³Ûl÷;fV1 É`MwÞ5¾ŽûïwR2º³;ÛºqÜ–éÇ­ ]\£ÄõM$[¡žß>XûËýÚBp£×`dÒ’»‰tiØu$5¤GjoŒ”ÿkåYóÉßÚ›m¯èòÄ":3\9C ‰ûÀ½Bía³§Prr*–¡µ}g³é²¦Ç.Ä)ç +=€ëÎâiÖZÍý»Æi»åR‚6 à€y ¾Ã¯qUq–§×thÚHJ¶2LÍilÇd€p>á ÑýÓüëÅeë×vÚ½òM¦X,°G¸$€pÇq¿ÇJuÖ³ª3Eð.ëyU¹CóãžF\Ô¿ð“jƒ,m£wgä~uÏ>Ÿâry¢â0 +²ýå#œr;ÔÐýÓõ©¯u;B(ã›nØØ° +ORîxû£¥CÝ?ZB$¢–ŠJ)h  +ßg7k¾F +2p2x®ˆ|>Õ·LeC1fÂ’åéÉÈ힢°œ&àIÃ{RoóÕúç©£A—¯<)¨XX=äñ¢ÂŠŒpÙ$1 zduªë¡O$I${Y7}ìvÎ?#ô¨IV29„šO“ÞÝ1Ö¶|9t}Ï™¶ý"xzåü¶>Z£à†-ØüsUrŸóÑ¿:>LcÌl}hЋL’[‰á ¹vÀ8þf¬] + Ä0ÏΫb<ç{dõ£äÆ7·ç@T|m£8PÙã¦}*tðõÓ2*3»8ÏÿXUueF,²¸$`{zR|ŸóÑ¿:­å¯¥/–¾•>"þñ£l_Þ4€ƒË_J<µô©öÅýãFØ¿¼h-}(ò×Ò§Û÷bþñ <µô£Ë_OÖ§Û÷bþñ <µôýhò×Óõ©öÅýãFØ¿¼h-}(ò×Óõ©öÅýãFØ¿¼h-}?Z<µô©öÅýãFØ¿¼h[=+í‘I/š‘ªqóIôò©Û@!]ÄñSÇ',3Œþxæ©í‹ûƱxÓëh_Cù×¥xÓÂözne%½¥ÌA£+3Ì8`=úôãŠãô}/K¾²y/uO²MæˆÕH\váŽH$rÙǧ^Ķ¶Œ_“Ðþt|¾‡ó­Ïì=8]˜Ž»nc¢5SǪ`·QùûUɼ9¡–Aâ8WËI$ +wÄ.nãüzÁc—ÊúÎŒ¯¡üëzÓDÒ¦{7[)^4ù0>Vl`“ôÀ9#ŒÏ?‡ôP³Mˆ¢òÔ¶ØÊ!wû@íãê:Q`9¬¯¡üé~_Cù×A†­N™i{>¯"â9# ÏË·órNqŒAëÖ²uKÓu9¬ÒágòŽÓ"®8ä~‹Wåô?:/õœzS*H~ÿáHDÔRÑL¢–ŠJ)h ¢–ŠJ)h ¢Š(¢Š(¢ŠZJ)h ž•.“t¶×£yÂ8ÚO§¥FzUB@$­ éz¹.ƒu%Ì6ñM#¦ÀdÏÊ;ãºÿ¯å£“O´d`UÝ‚ã^Mi­Ël¡’D7#ñ«OâA·ä‰z—Í ´UÍKû¥´µ’N}ëŸÒÅñ¸•¬cóas&@À19íU®/ZêMóJ¤öàT–:µÎšÒ5¥×—æ)GÊ{x=i!Wº‡ˆ%2E4jX§ËUf;ãÆF3œ¡ê:ŽO­VóµËH‚ùRh£a„ÜÂôéÀïT¤×/$¹–á®PÉ+“ 1#iÊã=ªAâMD:¿ÛFõÚ¹9ôÿõ÷§p4­â%ƒÌûøƒ¹ùGnàµFëZÔfyãºbY÷,ŠàðNà÷à};b‘¾ÔÉm怨š)#,7.õ##Ôgµ?zÿxQ½¼* +(}ëýáFõþð¨(  ÷¯÷…×û ¢€'Þ¿Þo_ï +‚ŠŸzÿxQ½¼* +(}ëýáFõþð¨(  ÷¯÷…×û›kiq}u­¬/4ò¶ÔK±w£ê6:ö}Í”ñÞb‡qÏLôõþð£zÿxR=Äo4MºC„Ü㊹ªøVÐÄGS°šÔJHC ûØëÌP#€äš«Yý×úÕªbŠZ(*$ž[k±4É"«)Á¥ªò¬4zó_Õ/íÌs»¶·iÜÇå¤K#Ý7p¿9…Es£Ïggö™=»Â¤œäg ôÅ%ý¬vŠ‘¥òÜÔ!WÜþES2;gs±Ï\šJ|?ð¦Týÿ‰襢˜ E-”RÑ@ E-”RÑ@´PQKE%´PQKE!éTÒH¡»†[ˆ÷Ä»²6†ÁǃƒÎ\b®ž”ËK ‹íþB«lÆrázôëô¡‚+^I§>¥ É™-ÙÊ‹–wƒòƒ’3ÁÇ4¦]FÛm® ˆþPÇ‚þ§æéV›|Å@´œ—]ÊGþ£óïì»âáÖWb¡†ÅÝ@#§ÔR±W(ÜK¦ÉŽ¤Œ«d>Ü’=ÍÏjÏ`7¤‘ž ­ÏìëÒÅE¬Åƒm#aëþH¥}:ò<î·“7’@\ŸÔQ`¹ƒEjRÒ°\Ê¢µh¢Áq/$·’;u€Ä\Šzü‹üêx~éúÔ54?týi¡6IE-Ä%´PÅyæ’­šîŽ´¿øF¿²¿²^7yÍÿßÆ1œÿ…p³ÿ¯­GJå"å¾­yey5Õ¤¦dR…€…=¹éõ«ð•kž`_º²Wj(ÁŒ8&¨ØÏ&e’ݧY#ÚU[ielô?ÝÇãZŸÚ¶ÊæC¡Bcu%Cì3¸ìzô x«[~Zýù`ßqG!·ŽÝ›=Ï©¦ÿÂQ­}¢[·ÉæˉÛjüÊ:žçž¼Ô‘jp ƒÜ鱄)´”EP~ác•=½íSý¶¼XŸÃÊ'acàrs€FÞzÈQp)Ýx“W½´{K‹²Öî4aG# ãšŠ=sR†áŽè¬q.F3œw«Pj© ßÚ—>QL +3“Ï èqÇ>â¦͹?±#eY7…8 pmöŒ{眀g6·¨²2ÆÖ௖¸ÆݸéÓ¨¢Ô¯ 1¦Ùå“jŽAôëÀçÚ®A¨¬vfÓQäeu2…Ý6öíý*TÕ-ü˜R-¶5Ø€ÅÈnNvðHãñ  +‰®jQù{.˜y`*p8§oz¹©Ún>_—‹Ž #·@IüÍZšú ¿.XôA0r‘µ”ãåc·=±øþaÕm„jƒG‡vNY‚’Fþèþ,ÓÅCkâFÑÉYUÕ¥34n€«9î©]^Ü^²µÄ›ÊŒþ]ýëhêPìKˆôÒ4l³ûÀr§?Î*3ªZ¿•ÐÐ*à€¤Ç*y;zq£¢¶á¾Š;‹¯3EI$wfUP”;6‘Æ×Õ‹rÕä,tu3> ñØóü99ÀëùP9Et³Ü-¼±Aq¡•ò1…b8 +HG ŒúûÔgU¶²Ô.-)NXc+°Æ6á—ãœóÆ{Ð=El}¬¬ÓÝe +£Åû¤7ÝÇ8}jH58a æh‘H¯3È€ùAÁÚ>^@ÇëÛ¸¿¥nm˜Ë£E$ÈP±TUGøz’GçÎGÞÆfóÿ±‘ ”+´’Ć$/^@þX  z+ :ìM‹û$y!pá€yçqœœôÅ6MRÝö´º ÞU‚ÕºýÎHÁûçÒ€0h­ûKûBI.—FVHîÒ¶pOÝ'oCù{TCS¶£û3!UW$ 7Í’@ÛÁ##Ã¥QÒµK­SƒP³`·P‘ tüjƧâ-OWÖWU½¸]¦Ý­°¡z c©íµ(£¼žtÑÑ÷œÆ¸»]§#…ç±éй&™s©ÚK§¼1èñÇ#*þÿ ‘Ï_º:Ð|÷³ÜÔU‹;h©Œõè]Ö¼Eªø­ÛSºiþÏŽ<ñÜû“Ü÷¬º)j»?ºÿQVjµŸÝ­ZªD±(¥¢€«Iþ°Õª­'úÃ@ ­ ¥yoš_7'`AÇN3íž¿JÏ­>ö XJͧ¥Ïï78ÈãåM.ÜŸ–ó#YGš|Çv}8SíQ ÐYãŒùøfÁrvàž¿Åú–}l8‰%Ò€’à“Ï\íåxþt°ê°›–è£í >éùè6ðÏøŠ`D£D¶ºeV”Æû—:ôääžüqÉÇ5÷éBêv1¹…¡Z®r²|½IúΦ7É%ÃJ4˜°‘ËŒerONg¯ÍíNþÓµ.Š€a󜸜‚ßár9æÂt,0™'À•¶Ø;3Çb3§jz íüÇóÑÁ@P6yþ"=©¶Ú”1Yˆ[JY2~y8ËuÇðàuäÔZä7qÆ ÓÓg,Ëü_   +׿có”Y <°9.y''ôÆ*(~ÿáQÔ°ýÿÂQKE%´PQKE%´PQKE0ŠZ((¥¢€ŠZ((¥¢€zRYjWw™äñœŒôéN=)úl62‡ûl¦ñà÷ZUÑôÅhÄ×¥wF®š€¾UO¹×øºãŠ5EuÛÔ€B6€£îú袛ý³uå„;l>J’¼„À÷éž{Õ¤±ÒÈÇÚùÚ2]Ç$¨9tÇ#½IcqÒA;²¤Läy‹”À~¾¹Ú8Æê5 +Š³¨A ½ëGnáâ>`~£¹géùÕj(¢Š@<týj +žº~´Ð‰h¥¢˜ E-™qþ½þµKqþ½þµHËÚK_%Äaþ´*’=@u?Ϫ²ë¦UˆÃ@ª­Á礇ß敤Ãq=Ä‹mvmä0CÝ–QŒ® +ÖM?WpCk%CģΓå NqáÀzR\MâåŽéÑ 2HT)ÁÁ,qÇÊAÀ=j,õ¤Ž+m]•š*yrºŽ\ –ÐTÿÙº¢¼É&´C!XÎÙ\†¶œàu?­6ò}~áe¶¸HÏÚÙ÷.õä® s»€0=¸Çµ='ñ&÷Þ†<´Ž]ÌNzôÉ>ǧ5V-3Qº·Žoí4Ú˽CÊùÎn§Ÿ¯lÔ¿Ùz›Bue1”WÓ83@F;ôãÔP²]ëí+BË9ˆ&7 á9Ç;‡#×ëC¿ˆ¦›Ï(¥¤‡ÊR­÷”ß(9ù;zU{­7W‚æ6}@¼’‡'­A›¨ùRÛ¦¨bg“Íp¸P¿¡Þzã¡ Ûkc6¯l‘Ç"ˆ™•wmÁ’z€¼{zÓæ¼×¤º‚èÀUÃÀÌ~] gÕM(Ó5rždz¸uüÂiù[ɧ4Û­?Q„HeÖVF·‚¬²•ÉÈúÿ:—í¾!‰üˆdXT‘•$ $ýzôäçéO’çĺ¬/˜Ä/$3de¹9ÏAß°ã]´}EcɪƟºKJù +rØéŸSèOJK[MVî! ÕÊ, /4€|Ù'è0~ u8  ~–æ<¬pJìå˜Þ2[9<Ÿ˜úö©ÅψX+ urT;òÀn,?‹<œ^1QG¤êÁ36¨6:yª|Ö!˧<w¯¶3Hú~§iuä®®zðâv€áTqîÙöæ€á×t÷ºxâò”¶é Dp#œã©ü[ŽãÄ„FžDh‘”%p9Áàþ‚ fªY˜ë#wÝÈ™òy8íÓ‚~œúS :à{bº¬î· vȳÈ@8ÈÏ|‘Ó¿Ò€&óüCp’ #2™axsóc +\ã< ÓÔâ¡š vçO[#hÔyezÿ ã$þ9÷¤šÇR±kk + ’ùgË™ÉbN Î0~ï<öæ•t½E†Èõdd%rÏŒíÈÏ€ë€($i—†ÞK'÷1’Ë 8õÿõÕJ鿱õ_(Æu‰6’žl˜`ê_$c‘øu'ÐÖå›ÙL±¼ˆû8d94¬ì¾ëýEZªÖ_uþ¢­SD±(¥¢˜ U¤ÿXÕjªËþ±©0ZºdššZ–´^bä1x9ÆrpB~~õ•Zšm¤²Ú¼æûÈ îUs¸¡º\¾ñB~+wΚUHɇs–n€©}ÄdõÉÓÚ«Ü.·ÖóÜÛ1’,$lO'å$O«éwqMp!ÖÊ_5Ô‡b\ñžœe°=ÎSÔbÔí|¹®5–D•Û+³!R|žF 1—çÿ„‚{;„ž(Ñ ­…ù'#œ…þ^´Ó{¯\œCFÒFÑ…aÆî +yö+ _Þw8ǘz‚’;˸›tw3#Œ¬„q€?ð¥q\èü$~dH…ª;TcÔç«c>£ÚªêúÂY¨¸Ž8íæ]Š¶Tÿ‰öÍeBø"òàÍn?ZŽ[›‰ÕViå‘Wî‡r@úQp"©!ûÿ…GRÁþ³ð DôRÑL¢–ŠJ)h ¢–ŠJ)h ŠZ((¥¢€ŠZ((¥¢€ôª«ȨŘzf­ž”Û=F{•` 1’Fzg·ãú +@ŠïñHѼn®Ò¥NséMòä#%[§\v´Þ&¹r›¢@F—Œçw_ûèÓÄ"à[DO–c I$Ø{~¾ôh3Ëî·#=;Rüè6Êg3[ÒxªoYïgã?ýU•}x×ÒÆìJ Lç%±ÜûÐLRÑEQE<týj +±Ý?Z‰(¥¢˜ E-›qþ½þµKqÄïõ¨U·¶ÔVcèHËv fï*Þ»"”sÃn^ïÕ¥ö]ÈÑÿiN±f8S†ÀùxÇ^HÉéƒëXNJ6O¡¦ù‹ïEÀß‚×FFiWVžP¡J©ÜI8nƒƒúw¨®­t¦I¤‹R’IÏ̦@~cÆsÇ^OåœóX¾bûÑæ/½~;]KHwÞÉí³ÌNå;»z‘ù{æ¡šßF ÐÝ9¸PB†ç>¸ÆçXÞbûÑæ/½¡ƒOÑ&ºTS–2Y•Y‡SŸ”ôÏéšlÚv‘²¤—ò¤ª›°Ãvæ9ãþéçû݈¬0{Ñæz.Ôº3@ —²,˜\‚§Û“Û¦î;ž)±ZiO<ÂkÏ-D‡ËÛ’ +‘Î ÏAXþbûÑæ/½¢[/yYmA‹,yû­ó±ÏlqŽ;Õw³ÑEÔj—ò˜w0w)Îä`c¹ãŸÊ±|Å÷£Ì_z.Úä‹…^¼Ñ¼J7ÀÆrƒ§| ÜtàR][h¢6÷o½q´?7#9÷ëíÇÒ±|Å÷£Ì_z.¼öZj7áÔÊgç…8ä ¹ãœÿœÜv4Æ4Ô™Uw|ÛO*œò:ñŒ{×9æ/½bûÑp7EžŒ–Ê$Õ$vÚ£Œ7ñê;|ߥ6 MüÁ5ü©¶gU!s¹26¶1Çó×Ì_z<Å÷¢àn­ž‘qÚQ–3º4a'ÌÃ#žƒ:~…@ÖzH–%ìT£op¼;t?Ÿ+#Ì_z_1}è¸7š"³¤Ó9çcºázdc=@ð/jÈÅ7Ì_CG˜¾†€ŠUgC”b§ÔS<Åô4y‹èiìQŠo˜¾†1} =™œå˜±À'<úRb›æ/¡¥â€.Ù}×úŠµU¬¾ëýEZªBŠZ)€• ‘1r@Îjz(¯”ÿݤò_ûµnŠV§’ÿÝ£ÉîÕº(°|§þíSÿv­QE€«å?÷hòŸûµjŠ,_)ÿ»RE+dñSQL¢–ŠJ)h ¢–ŠJ)h ¢–ŠZ)h ¢–ŠJ)h ¢–ŠCÒ—K²K饖BÁ2¡Nr>ó`à{‘qHzU<’N´˜#u|?n…D·r1*Œ|¨¸°äžG=EWm?)›Î’6 +ØG’G™×Ÿ—ˆýù5“E6n¼>m£™¼çcÿS€pH'9Æ8àõ9àV5I4ÓNËçHîUp»Žp)””RÑH¢–ŠJ±Ý?Z‚¬A÷OÖš%´S(¥¢€2®ÿÖÉ]/Ãû¯µ¨VHà‘Mó,ÒRƒ±?Ò¹»¿õ²Uhå’Ý•>Õ=JGqñ"ÂÞÏU™à†Þ%Úð$UãqÐäŠÆ´‡Âfλ¹¿ʱãäîÁ+駽`K<³Êå±Ó5*é÷²#µ–L…?»Bß{îôõ¢úŒè<ŸË I_# +HÇÞ=öúmíß¿JŽx|!ä\ù•QüøöÜáxç#ðê+tI†WO» r!n‡§jhÓoš%•,çhÛ£¬dƒÆznh¸Ë„>ÆÜ^ù¦fb>a&ÖÜ cÝ·¯çÚš°xCí÷®µ²«EöbÜËÿ-3òõ¸üëiš‰¥7F5Îçò[œvïOFÔeŽÒm“0Tb‡ãžÀäs@Oÿ‡Ø¾Q|&Ú:6[9|ÿ1Ê}pzSu<+öK–Óçº2D¿¹Þpd$ÈǾxÇAê a¶›~»wY\Ç ˜›“ŒàqéCéרѫZͺHüÔ Êzý(¸ì“BûnåœÜ²ÁGwŒcŽNÐzñÏnµ*ÇáÅŸ6å”[¹$l9°É>ý2+?ûTóV3§]‡c€¦ù{Ô1Y]Ü©µžL6Ó²2yëŽ;Шÿ³LVžp …“Îò‰ÜNιp8íWvøk¼Æöä»8í¼1ÛƒYÙzˆ*>ÁuóGî[œôíìiF“©0R,.Nnzˆüè~DЫ„’á¦T;[$m«áé»w¥Iokáç€<·w–42ÜIÜcžÕ“%…äK#Ik:¬gk±ŒáOøÌT«£jMÈ,®6£*c ’Ý0;Ð2 ¡n.\Z–0ñ´·^œþ¹¨jÙÒµ@67ñþ¬ñëŸJlšmüHÏ%ª€ÅŒM€CŸCHEj*äšN¡»O%¤¨ˆ2û”‚£ r;uÁ¦ß0ˆ­¬¬²²¬l!™±ž™äq@¨«cJÔŠo}Ù\nÜ!lc×¥JÔTl.[Œuí@(«Qi·Óce¬ÛHqB¡ÏL•ôMM&’#e1dÉ;W €2p{ñé@(«±iŒÑ4‘ÙÎT0_¸y'œSÇj‡ì»do²\m;Ï–p¸9ôâ€:{+ÜK{q?ü$ »É7`ü½¶à÷Ï?¥bئ”Ö±›©eÞÂMÛÉÛ´¨QŒç9ɪ’i×Ñ)i,®QGRÑ0ËÜSŽ—¨G6sáÎä9={~˜Íï·„DWÿð“CpΈ$·1; ØÎSŽçŽ¼qÛ¿26™r …ÉÀ'8MÖòysÄñ>3µÔ©ü"}ñHF—ݨ«UVËî¿ÔUº´KŠZ(+£Òü?iªhâxæ™nÚ³…m¢=ÛòO\ak«Vúå¤b;{‡ù˜SüX+ŸÈ‘øÓb?ê’ÛÛÜG%³E;…·°@nGC¯N*]?Áw7°¬÷vÉk)M³#æn @QŽ¿)ëŠÇYÔ¡‚c¼•c€æ5ÏÝëÓó?:ß^Õm-½üѪª¨ +ÝçÌþth ©h·:]½œó´L—qù‘˜É ‚qŒò:YÕnëQ¼½Š®nHáXð½ô•U¤QKE%´PQKE%´PQKE%´PQKE%´PÑEQEQEQE‡¥2Òâ(c¸ŠdvY.P€FÿJ’„³3¹¡cÇÜüÈ  (µ{ V’ÙaIPIûØA…éÈôéÖ¡:½“º–°ùUƒ€¥F0r§Ýýj¡ÓäùžL›NyǦ9ýE,Zt“&øáw\‘‘ê•Žä×_l™$Ã"D9ÇUP?¥V«ë`ìÊ« „¶0žsDV 7ú´-–z“ÐR°Š4Uç°hÐ;£>ý=3éQy ïùÑ`+QV|„÷üèòßó¢ÀV©àû§ëNòß󧪅€Š(¦EPUßúÙ*¥\»ÿ[%S¨e!+¡´ƒZ6ñ´3Ä‘¤BMáFT(d…ÎpÃ\W?[1i¶Íd³ÿkǤÂnÎÜ÷aÐÿœñBhYkÒSr`òÐ9a€CíQœrC.?J,WX›&DšÝ¿vŒ¾p>ñþëŽ8†M.Í-$Û™Ó,¸*ÜŽ½xóɨáÓ-dT?ÛQ¢²¡“v\Œï›ð¦¹lµ¹MºµÔm$®ñÆprÌÙíÉýh[oıÁªYB"¨È (ã¨FsÓŽpj‹YÀ—v@ê^lÈ<Ù…1‚Ü÷$rxÇÖ®C§irmoí¢‹.vn|±7zþC­,¶ä³Äæâ9&€´‘ªHlœàÉ%Iü ÷¤– vÖâ6{¨Äˆ0 â3–º|Œ}x¨“J±,Ê5Ô Ž¤>ö:îçŽúÜÒ®‰m2Jé­Fåw8þöÞ~n:õç¯8  š=~bíY¤wn”Û¹¹½}Ô‹¤kq\H°Ij«áŽÕTRPÔc¦Üã¾>µGû2Æ;˜c—WGYMÏŒŽ~sø~58Ò¬RÒ}u<»Ü#ƒ·8qœç©éùw“O‹_•#¸Žõ#Šv ½™Il’:¿ÅùkǬÛÏq¾…6'ï€8#=vòq_öG9¨†a mv5W}¸@Õää὿3UàÓìç|ÍXG)꬀€70ûÛºàgÓæ÷  /^šÕÅÄð¨†E©* 6Þxè6N}Ž,y^"Üf{»yHØÌhR9Û’@qÆ9ÏzÏ]6ìåÑnÈi,1Î8é‘ϧ5s/¬˜ÙÐ7ÍŒ+a3Ÿ›ý¦¾é4¡i­soº}N8–`b¹cµœd ‘øzpÖƒZþ͸‚G‚_1€!Þ6.ñ´Ž8Xè¶ 4ÂJä¼Á½ÇÞ¾ø¨dÓ`ŠxcÔM¹_.¤mB½wwÿ9  n[Y7sZÜN²HÑùŽÀ Œcã¥]/Xû{XEw}•£pü…S€W·PéÞ¢þÇ°¿A?>ÑŒc¨;ºþ_Ò˜º]¯–¥u” Îì²´F>lõ'ƒƒí@Gµ}o ÊÝFÁ2 €B«c8Ǫ~*åí¦½#I¾æÝVV‘LjUp[—U’>O>õ˜šm  Úº~踌.2ø]Ê~÷BxïR[i¶RÄ®úâÆ Œ™®Ý ã–æÞUgÝ&dB7€ sÙ±ëùÓ€ñ½…õdždÞ¤`àväŽ3‘ùŠ¯>›gPÈ5•~BÈ¡Æã— ‘ó ¸<þ8¡´½<eÖÕ…*ªÜq†;‡AŒÐfªnΣ(¾“̸S‡oëõªÉ÷Åhj:}½´lZœwN&Õ±ÔrN8ÇOJÏO¾)Ó±û¯õnªXý×úŠ·V‰aEPQ¼¡[ÍIUeÿZÔ'ž?»úÑçîþµ€ŸÏÝýhóÿÙýkF=COH€6áˆDMºBÃ9Ï-ƒž¢¤“RÒZ),6£ËRHÚxÝÔ|Ç9öÆeyãû¿­xþïëVÖöËìO´CEm«Û˜äŸ£{íª+ .}KÑ‚„±×<ý)ž?»úÑçÿ³úյЯšVŒ,[•UŽeQ€ÙÇj†óL¹±EyÂÇk†þTj+yãû¿­9$qŒ­RÁþ³ð  QE0 +(¢€ +(¢€ +(¢€ +(¢€ŠZ(”RÑ@ E-”RÑ@ V,Þæ9­[k“‚:p* +šÜ̘Æhä×ZŠ@Ë8ùOÊ”qØ⣆]BÞXƒyD °0é׸?\cÝ]MDWånTÇ|ÿ3úÒ ÛÄL (Aò‘ÇàiŒ_êÈ$äŸ(ã¿J¯Ìöà¬r2däãèGõ«‡Q¾ÛH¹Œ¶àžsÅR›Í–G™Ñv$ü¼P§½šå6ÊT’Û‹žÃ8늯Rd2Äm¼ô\ri +08*sô¤!”SŠ0ê¤~””RÑ@ E-”RÑ@7ëdªuvïýl•N¡–„­'þÈle<æ½ãxnñïÛÓõZ©«[ e‰ôØ•@ó7gn3ÊŸ®ÿ^„Á|>ó F÷n !QxÇ¿¯éQÊt4~ZÜybC¸É\gÓœzœÓØ}wNÚ=bϹ~\W·?çך¬úÌbÉ LªëçrämõÏJc-M‡aß!#·íþöì/_n;ô¨_þãmó„‡Nää‘““»œduö§6½hÓ«ØÄ +f3‚H\ñ»npxü½é«­Ø†bú%³¬d g¹ÂóóŠ4+Y4¥µXç18vòÉcósÀÛǯ֖àhGx·iÔoIË»ŽsÐgo?†9ê&³c"H¿Øð®õ+•+•Îy/^GåÛœ–Úì0iËfÚtr» ŒÃq_3~:c¨犙—ÃHâv($9C¿æÿÇG^{UYßDò[Ȇ_3Û QsŒe ûÙã¯o\cŽ™© ~h™Ä“©ƒ$ã$¶=FÑ€xäòW­ ¼–wÓÖa(\«°ùô;}1Ûü*Ü>"²‡güI¢;ÝFðcŒ»Ô`LP"¬M¢Ça’&{³‘òä©Çâl õâ¥yg˜xlÇ¿_nžõ$Ká甫yê¢2Å·u`¤¿ð 1žÄ÷¤¸×m§†X†• +#+PÃ’8#Ž óUî5 9ì„ `!a†ÞŒ¿3wÏËœ`ôÏç@Å>ˆ£NÙPÍ»›°1Ó©õê)c óe˜H¦qq±È\.Ìç ª}ˆüúÕ +Z)•,ë? +Ž¥ƒýgá@‹RÑLBQKE%´PQKE%´PÑEQEQEQKE%^Ò­ï.n%ŽËnÿ$—Ü@ùw*÷ï–Z¥V,¯®´éškI¼©6±[Œƒü@÷Ps׊ú5µeÕ´©•¯š2dÈ_$™ÔðX‘³pè­ôÚ}+ëĶî ïã\d2¤A?Ãê*ê¹_¶Ü$›NT, ÑTv'ó>¦²ZÆÙ˜³A brI…9ý*}â´-Ùø†•b´º†I¶FÀ=À ÕÄÖ.ЂKŒW&²¢´‚ ‘E8Èb@y!ëÙÙ¾j}›Êò¼¿)1·þî\ÒÓ©hıÑnuéí-v…C½±•ÿÔ>Ö7ìÿG߸(S& $dup\t®w÷³4²Nç#°ÈÌŠw‘s“˜eÈëòž?Îi 7ÛÀúº““m€ÛsæðI}€tîÇÝñ‘LOê}-£ux¡Y¤>h )8üúñþ"± µÐm¦Cc8*sŒãùâ“ȸÈT¹<”óO@6¯|©ØÚÉu1aM™%ð~fÚ8ǯ_þ±©çðF¢—7Ã5¼©mgÜWøŠçã‘X kw$ÞH†_3nâ¥H8þ”K »Œ2à¶ßºzñþ#ó£@5ÿáÔ~Û-©{pÑFdf2¸íÛc~U9ð6°­¿! +€¹É$1ÇN¸F?—­`-­Ó†e†RHSÆ:þT‚ –]Â)HÆì…==hÐ šfsª,UŽ6Uvlñ“Ƨo j*H+À$áºÀz{þñYmÄj¬ÑHªÇ +J‘“íùΗì÷#9†^3Ÿ”þ4€»&ñÏuJ °Ü q…;]‰#‚yìOOçSÿÂ5yå‡2C´•Ãdã•Ý鞘íÞ³ÖéÜ"ÛÌÎO!ÉíHm®U´„'ŠþH  TðÅû¨$Ä„íÀf= +–ÎqŽÔ) ^É9…e„hÎî6ýzgƒT%¶ˆ¥Üm<ÒžöW‘ÈÈÐJNòýE0-ßèWštiöl ÷Gÿ^³*ÌÑÞÌ|é–w,9gœéÅ1,İI¼uqŽ3ü…!ÑRý’çÌhü‰7ª†+´äŒ~#ó£ì·w%+’3°ã#¨üè**Skr¿z F1Õ~7ȘuŠN'å=ºþTÊ*ÉÓïBCo&Òp8ç9ÇN½ª7´¹•^ Aoº +yǼÑ`"¢¦šÎæÞFŽX$VWØFßâôúÓ~Ï>Xy2eFHÚx  Z>•q­êöÚm©Ešá¶©áGçò«ÚÏ…¯tO¦s-»O R®ŒvÝ3ÆGåY–É{Ò›e.*c0ã¶9èZI¾Úfk‰¼ó(!šGÎàzg'ÜP2I´ù!û9i#1ÎHY0ÁFrJÖñG„.¼+ö_µ^ZNnC2’c“89ý+Id™·K#;z±$Ñ$ÒÌTË#¹U»˜œ(èµZ°û¯õrªX}×úŠ¹TˆbQKE%5£V9#4ú(?%?»úÑä§÷Z’ŠÉOîþ´y)ýßÖ¤¢€#òSû¿­Jwõ©( ü”þïëG’ŸÝýjJ(?%?»úÓ•z S¨ ¢–ŠJ)h ¢–ŠJ)h ¢–ŠZ)h¦QKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKEdÜÿÇËýj*šçþ>ëQT\ÓÛO"Ù¢;2ÁñŒn\uï»mj‹Ÿ¦ÙÕ•CÆd)ÉéœôŒŸ ¬­2ÙîguŽçÈe@Û·c8eüÏ|{V¢é×brϬdF¥Œ‹1ëŽ0sÏÞ#ðjhdO.±¦*Ü]*´|&Õ̪@89F¿—½^Qâ´)àey[Ÿ”.Op[68ãž+>M>c4¾ª¥L~fçáºñú¾Ýˆ©ZÎþ?™µ“æ¯ÎQfbßw·=xÅ6ݵÐ#»‰AY†9¯Íótï’È©á¸ñå¢æt`nØÁ'û§?W³·’[8×ûaíæW`".ØUHÛïçÚ¬\éÒò빉d*¡åbAéž8,ÓmµÔ³éù%–eû¬ <“Çsõ÷4ø¥×æ‚›8‚Ä£(Î>^¿yOnÆ—û6é•b]oå •Vv s÷@Ç©èG®)§F»‰þmQ#]ˆù.Ùùl`s‘ÔúnÍ ¿·/Q.ÝäIhˆÝ–+¼ã㯽,â-Z?-bvƒÓaïžÞ٤°Ó¤­¼½cɉ‘wæR¥:6:ôùŽ=è“K¸$«ï“ËvmÒ œä’úúSk§ñV=Á‰RÙþhÉ_äqÓ9o¯­&|DdMËlárèÁpÃŽ¼Ê8õ:ÕYì¦Þ¨úÎõ•¤ÛدÈ;óÎqÇáOM:hÕ¥þÚQ¸¤– y\žAõÍJ±x‚Ú[¿–?ßn–gbŸ0`I>¸ LÔ—^!˜Z5Y?2FFåSÁíÈôÎj³ÙÜ-уûe¾à!¼ÂF (ÁçŒÉúré“JOíždMªYÈÀÚI“ÀÎq“Ž´nå5»Yâ̶²£Hco,ª©<&ÞÝ@p*½Íεk=Üñ¢ÁmΊ˕Âüò:~B˜t«ØËÕ„k±_&FÎ[œmä`éj8ì®®,–y5¨HÝÉä’xíÓ©À'¥F´–9ï•á…Œ0 VÛ©û½*Ò7ˆlî„J9îdy¶—@Ià’yà{zaÒf¬-¬+D2›#f`9à ¡ëŠŽkÒмº¨fyBiXí•ÝŸB™Í 9µ­GϘM{yÖB­…ýæsÁÆ8Çr:TŠ¾$òaU„*¡È7mÀg<ò*+Q,ͨ³ó™²Ý@ùºŽ0 î;°šMîðZ)*¡g<ÓœãnqϾ)/ˆ`–æp©KºYIdu~cŒñן|{T7WZÑÑ‚Ìv2*íªî¸ÎONŸ½KŸ4ÆHÿµÈš&‘w´¤.Å +~¼çðoöl²Û”:Ò4#bù{ºà´gŸÏŠ@`ÑZØÍö9® Ì#Ê,<°ÙfÁÇëÐý5™HEëºÿQW*¥‡Ý“ê*åR%‰E-ÀJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€2nãåþµMsÿ/õ¨ªY°K9%u½‘£B£k.x;†{áÝWã´ÐönkÙCcÎÛ°»sÜuü*Ì6Ï/Ÿ™$@›Oo™Iýhhé 1fÒFÂÌFç1ž{ñÅc-¬´iî¦í“Êy9ÈÆ[$Ž£§òÍ>[M)%O¶NÌ€€;猅=ñÈâ‘/´l9}-·¡B¹ÀÁäõôÏÿZ¢žïJ–;‰Ø|¬¤§Rxëïȹ`2öÛIŽ0m/d•ƒ Á”Œ¯||½~µe¡ÐdG/så2ÊvC¹8Æw gÒ–=WKû$0Í¥†eÙæ8#-µHöë“ž}j†mCO’Á¡K’àˆØº?>hKMï o‘aòŽÖ*rdÉÀû½:~u4–Ú™‡¿¸;HRFNFpvöè?ÎVí îÏÓ +FK «Oóž=©²Ýèªò"ØùŠ#ÂH„®[œ’ ÷ðÏ|P¥EûDª,Ç$«ïwœ&RýŸ@G”}®Y2ùlC ß6Fßîþ~Ý)°_é‰I4ì¸ óƒÉ!pO^í“ý)±]é‹<Ï5£JBëÛŽzÓ§ô ‚ßEh¦¼™$*»—†Ï?Âxþ^ý*O³hL£7²«uI±ÏUägóÏlT˪hë˜û–=©ót'99ïׯè*½ÒZê7];lJÌJpA\ üÜàóÔP]ÙiKŠý™YãÝÁm¨Ë–9Ú:_j”Å Gs-ÃË y<×`ÀíÛòqßÓ>øéQG§C:²XŸ-£ *ëÊîÁÎF@oûê–ëPÓ§…•,60ÆÂ8Æã©ãúžœú€9áИ–ûmÇ$'v9ù;/<};sÛè„Ê­w( +ï±°~eùvñ·¯Þôè:ROq¥9ƒÊ¶‘9AuÀÌŠqžs׎½\–‰,¿¼ÓHrTn=6œ/×ó@È>Å¡´>`¿–1¹†=xà/¦OøS'ƒBE˜Au<ŒòËp ÇÃþsøÓ…î*©¦´’ÚZFêÜs€}ô_iIæ tÐàỄ'„$arÕ÷~9¨ZëJóc+dÞZ£+ŒòDZëÁëíí@É"·Ð¼§/y&çŒmR(Û†z.ËùóÒ›5¾ˆ.‡—y3BG8R6Àw”“øuæ–{í*Fe‹MÆÙù;—ƒŒe½vŸÀúÖN)ØÚ9½œœðpqŒž~ï¦8÷ÇlÔBËL‘íŒW„+“ç+œã#oàxþu™Š1EÀÔ¸ƒDÛÝO3pC ™<ôç€??Âœ-´&<ÞN£ ¦I/®·^k'b‹¶ÖZV¾›qÙà™=ó’9úõÆ]âZ¤Ê-%y#( .0Aî* QŠ»a÷dúŠ¹U,>ìŸQW*–ı(¥¢˜ E-”RÑ@ E-”RÑ@ E-”RÑ@ KE”´Q@%-RRÑ@Q@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@7?ñòÿZ³¦hz–²’Éd¨Ëml°pN~˜«\ÿÇËýj¹~䎼ç㚎¥#y<¯Èê‚87d—åÊîçðþtÄðfºþ^#‡2…( Ë“¸â±˜"Y:a¨ùøýìœtùºQ ô6-ü)«\ †J¬Ë 1N^4.@õàu÷úÒËá n›[wŽ!%ÓºD<Åçnr~œóŠÇE$‰¤œ’©õ¤Ì„‚f“ ä|Ý­†êx7W1»»Û¨AÈ'åÝÛŽ„wî)?á Ö¼²Ø„’YQV@K°p„ ´p=k2sûé9ëóu§Å,ðH²Eq*:ÊU°Aëš4 <={p§Ë–"Á™pA#wCßm +öÞÞi¦’X—$ ÎõR8èAq×ðÍg€À`Hàg8ÏzS½ +q[Ó¥¡«/†ïciϼ¼î à$)ÜàŸÂ²¶ºHñÈ0èÅH#¡£çݻ͓>»¨UÛž§>´\QŠ(¤Š1EbŒQE£Q@(ÅPEPEPEPEPë»'ÔUʧ§ýÙ>¢®Õ­‰bQKE0ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ(¢–ŠJ)h ¢–Š(¢ŠJZ( Š( ’–Š(¢Š))h Š( Š( ¥¢ŠÉ¹ÿ—úÔ[ý‡åRÝÇËýk½ðç…,oôBâh®šh“yP–W`3‚p}¸ã­OR’<÷w°ü¨Ýì?*Ñtsë1Z £·Iˆùäû©õü«I|) Û»]Ó×vÌ~ð[× ïBW æïaùQ»Ø~UÑ·…aD,uÝ8…d;_={Sô÷éLŸÃPAí‹9_Ë’E¾GÈz{ž1ô>Ù,ÂÇ?»Ø~Tnö•o'†’Kq Õ¬C ¤’TuëÎ>¡ºc™Ï…m”0mrÇpuPÁÆY—§^Àç¦ acšÝì?*7{Ê´tÝ.;Օ廎€Á#-“Ž9©›BE'©Àcãœ8çÞ‹‘»Ø~Tnö•i˦ÚF/^†xfòãÈÀdG^£'¯÷âc¢[ùÔà;Iv]Ý3ϧ֋»Ø~Tnö•mÿÂ? T¶Ü°†mÉ=s×årjÑÑ® Bþßof€yÆÞyý(°XËÝì?*7{ʵu éÑ3=ÔLÊØØ8'§?¯ÀÖM.ïaùQ»Ø~T”Rw{ÊÞÃò¤¢€w°ü¨Ýì?*J(w{ÊÞÃò¤¢€w°ü¨Ýì?*J(w{ÊÞÃò§Ãšxâ »Éè2k£ñ‡„£ð¬ö‘.© ãN¤°UÚc#FO<} ;Ìîö•ät•ijH±ŽW3ì”F7 ]àîù—œ‘òúw©ªxfÂöZÌZÜWÝm l#Á8΄ñÒ‹Œ}?îÉõv©ißvO¨«´ÖÄ°¢Š)€QEQEQEQEQEQEQEQEQEQEQEZ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠÈºÿ™>µ«câÝkN´[kkéã‰>꤬ ~ÖU×ü|Éõ¨jK'ýýýÙ,Û¥|’IöÍM¨LÇn[p|øϯ ÏÒ¡²Yò1 þDƒ$I¸¸ÎG5°Öž#y5`Ÿ”´¯ÀÎÐsŽù8öÍ5ô‹ØöyíÞ@0=A# r:Ê•ômA>õ³}ýœ0<ä uõ U¹tÛøáó[PC(D'Ì}ü†À錘c=ýêÚÛê—ˆ·‘jî1WpîÈCØ ’¯OJ,<šMìNˆð€Í»:ÿsžxÆ_CSIáýF6•L@˜äœ0äœã§^~aÇ5oû.üË4‘jBäni1b»› ÷#דïR­†°îŵª!‘§“ÎnÀæ‹—}4æ„oWòÎ\pØ'}©°éW·y±Cº>~mê’}kNÛHÔ™¼Ø58ÔK—i̹=yã9çüš†+KÙ#x†­Æ»v©•ðÛöž=Xg8ïE€¥s¥_Z@f¸€Æ¶e˜g<öϵ9tk÷8X3ƒƒó¯^xÿ:Ö‚Y_N·[õU(žba¤,\©ÁüGýõõ¢çNÕ­’5“TÌ”FNÇæ#ŒöŸýnh°çEÔBokfTÆK3çž8¥“DÔbŽI ${²w¯cƒŽyÆåZ£L¿ò[~´30’³) qïÛSUà¶ÔgDdÖó,Ë&à8lt䜎z,¥jtЧTÞɸó©B¿VQ嫪ÙV|Ã#ëøf´ÛIÔEÛJºÂï™™/œÄ·p$uïÔôÇ­6kmYDpÿkºŒ™[9 ¦:c¯N(°ŸØš†óƒ;K®p3“קò4ƒFÔ ¢?³°c›É&q“ZÒØ\›qåë2<Èe2>0Œÿ1íù–zƒÊÒh«L*–]Ê }¾‡Ò‹>•uor–òê]pÝ@ÏåÐõ§.‹¨4ÒB¶ù’2”:çO¯û'ò«vö——°<²ê©$8“†_àëÔ†oÖ•lµ‚ ¯í-u" ýëgæÎ Ødþf‹SûPÇü{öëÆN~¤ñZaÒo•ãC #A¸|Äu{wô­k{ø–GM^?.XÆöI[8Ý‘Ô úúŸzlšF ef›UFh2U¼Ç$7ËœdQϵŒZ üÑI"ÆÅÝ·9-ôÇjˆè÷Â4uˆ:¹!v8l‘Œô>â´M¦¤.¦õ¥WŒ¬y3I†Ï@8éR;VEPš¶æ|î 3à)* Î:ç見™>‹{o •£R eŠ¸8ã8÷ãÓ= 4è÷ààÛ‘ò³gpÀ Á$çŒgšºÖ÷owqoªÈª‘ùžafe|á{z6=x#?ö^©öw?Úñ˜XH&r†ã “éE€ÊMñºû?|à72äeG©ô©?°õ"–ÙSï2° qŸ_zÐm+RYVIux•Ø2î398$gÞµµÕZÆyN¤þLd¡C+å¶äp¿çX :(¢ôï»'ÔUÚ§§}Ù>¢®Õ"X”RÑLBQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE-Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@_ñó'Ö¡©î¿ãæO­CRQ%²Â÷*³¾ÈÎrØ’Vg’ÂVÌ­°© NTuë€Gô5#]hŠ¶(ÚqŒ@Ýþ÷\qÎ +@G,>#hî-–LŸ•¼³žqýðNõ$všaºöM¡ˆ9de°zzqÇZlÍ£ËlÖÖ´²…P2NîœüÜç¯ð©ïH†5k}>aûÄÜÒ ä)Ž¸íÓÿ +oön<–mLª:?)'ïqÇ3ÏëPÃi¤:Ìe¾•6»2Xdm?–I楒÷EevsoÚÛFHÏËœ7çÇåŽ[çé!‹ |†PlŸœnÏñUïÛ¶hkMÊ,—ò—Üp…qÀdã¹öö÷¦ÜÙé(“¼ÌÄnòƒØñ“ŽãüŠ“í‰p œ˜‹˜ç +3÷±wCÇNî7šJi’y{!Ü’9þ.rq@Oo¤!ŒEu,ƒçó1œ.WÎG·ëS5Ž‡÷SrÙ_Þ2¸çw'Ž)Ï¢ÇgšÖIn m¸©`n8ÏÍÏËŽ=û2$3Ù1̬T)nŒ½ìߘ=°@ ®Œn–öQòñ…äç;³Çãׯ¶)–öÚT–èf¼’9ˆË d}ìc§÷yÍO抮Ïö íu ’ËÉàœ·eýOjeÅÎŒåZW Vn6…#\Ïš’{=3ˆµ  +BsÏ<œþ}©ÐØhK"™µ=àH™P¬)ÆîqÆ9úÓïCY:B»‰ÆãÀÈÀûÜñŸOëUî$Òä²a ¼Ü†O%JãrÜzþÀš+]Nb’ð²2/ïp~C“»ôÏ÷©¦ˆAÿO˜ ýÌî<çqŒΟyq¡=m,]›{ynÌÁvãÙ÷ç?Ò£[­ÄØ>ñÁ,3¸ýìr1ÄàÒŽÏHi.wß²¢0ü§.N2}}»ÖY1¦x­¶¹ðúªì±vÞyl®çøºN™ü}ô¶2,_c·h˜gy$áºc©8ïÿ×ë@Ó¾ìŸQWª–÷dúŠ»MŠ(¦ ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠZJ(¥ ¢–’€ +)i(¢Š(h¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ(ëþ>dúÔ5=×ü|Éõ¨j +$¶¸{K…žãÖ´ÿá!—~~Ék´±b…2§Œ`û…dQEÆkÿÂA!/ºÎÝ÷&Á¹:rrxã'8?ADž yY‹YÛÇ$*ãc¯^¼k"Š.¥ž½-•¨·Kh0Äà“‚A+ס*¿÷ȧ§ˆeE+öX +åHR2 r}OÍ×ØVE]©m®Én±)µ‚E‹î†^ø?§ê}jÅLj#/·´O-S\ ‚1éŽ>§·‡E;§·$A‚Û@>þîüÄñùãðƒXÛzn…¤D´jTíÆ:óÐ3Ûð¬Ú)\ ”ñ¢lû¹Ç òyäú“““Þ£¸×d¹9{[~¨pc*sÏsžù'©¬ª(¸\Ò—Z’GYÞ$•OßQ‚xaÛÞ<÷À©dñ²ÆÈÖ°bNqŒ‚01ÛŸ¯šÈ¢‹}õ1&žlͲ*¬Y‚YWh'׎qëW#ñ!{)1 +9ÀퟧJÄ¢‹­ý¼V);tgR7€r $î„dâ‘5ùRæY¾Ïïb»~P@`8<è+*Š.¼^ eù¶°¾TÆÜ!³ùÁöTRk%Ö ¶°ÇåË棾I?Ͼp÷Îm\ vñ Ä–¶È£oʌާ=òMd1 ä…ÚAéE\Å¥¢€b–ŠLQKE_Ó¾ìŸQWj–÷dúŠ½T¶%‰E-Ä%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PEPEPEPEPEPEPEPEPEPEPEPEPE×ü}Iõ¨h¢  ¢Š) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š`QEQEQEQEQEhißvO¨«´QT¶%îQE1 IERÑEQEQEQEQEQEQEQEQEQEÿÙ +endstream +endobj +44 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 629 +/Height 354 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Filter /DCTDecode +/Interpolate true +/Length 22350 +>> +stream +ÿØÿàJFIF``ÿÛC  +   $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀbu"ÿÄ + ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ + ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ +$4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ô +)h¯xòÄ¢–ŠJ)h ¢–ŠJ2)“?—7÷Fk†µñV»¨FòÚXÛHªÛJŒä}y¨EQ‹gyš+•ÐõÔ«‚8 ӌԕÐ8´ìÅ¢ÔÁíT!h£u¨¢ÂŒÐ ¢–ŠJ)h ¢–˜dQœ°ã¯4ê(ÝFá@´ŒÁFIë@nÉ4n´ (¥¢ E‡¨æŒÐ0¢ŒÑ‘@‚ŠZF`½HZ(£4nÆh¢ŒÒÐQHΫ÷˜©¥ÍQš3@f—4”RÓC©èAÇ¥Š3FhQFi7®í»†}3@Å¢ŒÒÐ!(¥¢€ŠZgäù©æã;7 þT u´ŒÊŠYØ*Ž¤œ +RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-€J)h ¢–ŠJ)h .¼.£©Ry¾—{ia%¾¡§Ü¬1Ê.7Æ¡‡Ê ò8ÇpkÔ±š†{Hnc1ÍxÏUn‡ê;Öu)óê\gÊqµ¹›YºÔÍ»Åk2-²NXc“ÉéÖµšÃWz[’Šf•”¬€ ³îV>£ŒWJ‘ª(UP JvÑDi$­ps»¹Ì}—]2Ü3H|·D“nã éÆ=)–Ún±ÚÃæyVÈ…d)&IÈn~¹#·øWU´Q´Sök¸sÃÙkì-Ûí`1cæ…ä `9`õn†–âÏ[ò¢ò&mæWi IÐnù@1·ë]6ÑFÑG³]Øä?âu=ÍÜPI*ºç,ÙØx0¦>\Ž¿zè-mîN”°\Îßh(U¥^=~E^ÛKŠq…„år8#1Alí!U»uosRRÑT!(¥¢ =+ŸÔt›»›Ë©c‘•Á„pû['9ö"º1JQRÑ;ÜvzÉ“Nê…×yFNJñòŒcŠ‰¬uáj.XÈV2û˜œ6à0GûÇzêvŠ0*}šîW1¢Ê–°¬ï¾U@±ÍŽMG{n×H\adÜÙñ´Ž‡ëV諶–&æL–—"µ& +«3G—´ûëšÚå•ÎÖ!•Õ°%r£¯âçZØ£¹PîT¶IVi<ÐÄ ÝòãŽ1ëV.(¦#lo"Ž1V-¼žA%ràçR-µÒ’û¤2yci/€bpFOQžk[b§•æ_‘z>ü"†ÛK ?®?HÖ·¯ÌŸ¾pIàqÉÇÖµqF)ò…ÆEŸ)r8äÆ©ê6²]$kÑ‚Ù,2>é֯ъm]XW1Ú;ØÄ­™…ùN}8ëׯoÆœÖ×,­ò“¹T3W$`ß¡õ­lQŠžQÜÊ0^–Ÿ.ü“·gq»#ø½8íZ0‡òSÌ}£vy©1E4¬+”î­ZyáláSvNôõ«ùWþlÎ0rŠXààôêx#éZ”b‹̶·½ Uebq€å¸ÆÜtõÝÏùÅH‘ÜÉ&é7"oÎÝý¶O|Ö†(Å£¹Œ¶—qE„ܬyÃñ€0@?•Z·Žå.ÈÌÉå€Å ?Óñ«ø£(Ø.!éXËcw +±Lnm¹ÛÁÀ'#¨çž¹ÿëíQŠ¸“±–mV 1? ž»°N úŸjÞëÊmÏ.v| 6r}ý1Þµ1F(åÌÈ¢½ûLM#Q{ƒÏô?ZVµ™^êTåݾAÇL(ÎzçƒÞ´±F(å ™‘Azaå89ßÏ#•Ç^¹úU«%™ 6wÔœ’=ù?ά⊰®QE1`ÝèsÜß^]$þS±n@8h$ã8Ïa[ÔR”T·v9y¬uŒÇ +I0Þ%+‹§".)gÆ[Ç×=Ö™«\$д¨ÑâM¤Ê~}̬¹ã#¿Zèh©öh®fsÇOÖd»¸w¸ò⑆Ԏwà ÷èväqŠèB¨QœŽNOçKERŠD·p¢Š)ˆ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠZ)h ¢–ŠJ)h ¢–Š1[ú~—ö¢I d’€:×[¤ÿÈ=~¦¹qRq…ѽ§-FbZ·ùð£ûÓý¿Ì…hÑ\Ú§s«ÙDZý‰iþßæ?ÂìKOöÿ1þ£EÚ§pöqìgbZ·ùð£ûÓý¿Ì…hÑG¶©Ü=œ{ßØ–Ÿíþcü(þÄ´ÿoóáZ4QíªwgÆiÑ-1Æñøð®næ1Ì£±"»jão¿ãîO÷ó®¼,å&îÌ+Å$¬U¢–Šî9D¢–Š½oˆTí=MMµº?*e¿ú„úTµÍ'©ºØnÕþèü¨Ú¿Ý•:ŠW»Wû£ò£jÿt~Tê(¸ Ú¿Ý•Wû£ò§QEÀnÕþèü¨Ú¿Ý•:Š.v¯÷GåFÕþèü©ÔQpµº?*6¯÷GåN¢‹€Ý«ýÑùQµº?*u\í_îÊ«ýÑùS¨¢à7jÿt~Tm_îÊE»Wû£ò£jÿt~Tê(¸ Ú¿Ý•Wû£ò§QEÀnÕþèü¨Ú¿Ý•:Š.v¯÷GåFÕþèü©ÔQpµº?*6¯÷GåN¢‹Fí]JŒdsUªÝïTú«]~é”·ŠZ*‰´4ûOµ8LíÜƨUÛiZ(œ+²y‘”ޘܹî3ÜVUy¹}Ý˧nmH4GLñö‚i¿iY,_cùÊn¼ÈÕ{JÒÒeŠyB; òç’zv4íJAši­õ}JðÌ…Z;–sýï­:kKiäÝ,HîŽpr?Çõ¬){K>ciòßB5Õ,äU¸BbŸý‘œsH5kÊ¢î±Upä·AøÒ¦›ep–Ñ(pC½A¤m)‹hBp¿tŽ†µ÷Œô.±a ž[Ü&ðp@ç0_æ@ÿõSâÔì¦r‘ÝDì3¬A“Jtë3/›öh÷îÝ»o9ΘÏÖ’; 8 Áx^¹ëü¨÷ƒA«b˸]EŒœúu«£‘Y°èúzD¨© +q¸œ“†Ý‚Þ¥i3ŒŒúP¯Ô…ÅE2¹Ç9©ª9¿Õþ5Kq=ŠÔRÑZ™‰E-”RÑ@ E-”RÑ@´R(¥¢€ŠZ((¥¢€ÖºÍ'þ<êk”k«ÒãÁ~¦¹1Ÿ:0ÿzŠ(¯8ì +(¢€ +(¢€ +(¢€ +ão¿ãêO÷ó®Ê¸ëïøú÷ó®ÌÄÎ|FÈ«E-èbQKEhÁþ¡>•%Gú„úT•Ì÷6[´”†RÒPEPEPEPEPEPEPEPEPEPEPEPEP;ß¼ŸCUjÝçÞO¡ªµÑ„Ê[‰E-D‰V£ÿVµZ­Gþ­je±Q¨Þ¥¹oßNcÞ mãœ:z¿Y÷³ZEpžt{¤ 8éÏÖ³e¢¯ÙôÙe +&,Ò†Îy'?Ÿz–h-.é¶,d’8ǟèc½²tÈe'9 +z`d÷÷ëR½Õ›»„°êO©Áã>Õ: aƒOCÜeA8WaŒ•Þ˜¢TÓÜ iÈ(¡Ç8õü)d¸³ììZAÜqùwÅI¾ÔIJy$ï,®rr Æyõ­> K_?|rebØÎpNjXl"‚a*–,Qœt'5\^ÚÚ©€Ê`g äúԪ±ÒEnx8íøÓÐ5/Ôs}ÏÆ’ÞánPº œsÞ7Üüj£¹,­E-©˜”RÑ@ E-”RÑ@ E-´RÑH¢–ŠJ)h ¢–ŠAÖºÍ+þ<êk”kvËRKh<§ŽA͉‹”lè4¥©·EfÿlÃÿ<¤ý(þÙ‡þyIúW±Ÿc«ÚG¹¥EfÿlÃÿ<¤ý)?¶áÿžR~”{öiæ—ý¹üò“ô£ûrùå'éG±Ÿ`ö‘îjQYÛÏ9?J_í¸生¥Æ}ƒÚG¹§\}÷ü}?ûÇùÖéÖ¢Ç> +À¹bò–=O5Õ…„¢ÝÌ+É4¬AE-Úr‰E-¡ú„úT•êéRW;ÜÝlQE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@/>ò} U«WŸy>•Z·‡Âc-Ä¢–Š¢D«1ÿ«Z¯VcÿV*e±QÜuSºžhŸÀds‘ž¹«•Ván‹ pzóÏO§ëY²Ê‰5Ú¼€Ûuä7©ÇOÓ­#\]¼A ¡ËmqÏ_Ò¥òµ±–Æ2ݺsÓýïÒ¬À“.á+‡ùO|~T†VŽK„‡ háCväþg­jº$‘hBŒ ’{ŽxÇoÖ´qIŠvFYîVb«nLcø³×§AKk$ÓHÆko+hÀby?¥]Å.(¦M÷?’£›î~5Kq=ŠôRÑZ‰E-”RÑ@ E-”RÑ@ EPEPEPEP:ÕØãidXÐe˜àU1Ö·4táÜõUâ±­.XÜÒš»±v -PïݘRCu§Þ™#†[iÌg¨ÊÛO¾:U?H«áÍ@5ÚZnÐN퀄Œ~¦¼›áÍ„ºo‹¢–âúÒ%xÙåÎO@“Ç~}+Ír”µlî²Z$zÅþœ!_:ìþ%ô®oV·¹¸HÚo)ÖPÜÈT0ÁÈ8äý8é]ÞÑ$L§£ âµ­äEK™|°[jüÀdþ=ú×U¹E¦sÕŠ‹º1ßHÔÝæ;òÛ\öå—å ´K¦j &ñ¨ÉK¸'ïËž„äÝzdt«–òéöò´‚íàr;“œã¾xü-Å´ÁÈ—Û†G\þ8?ʵ²"å8´ÝA™%„(edQ;°rÉûÙºÿ{I‚{ SåÓM);‹<»»‘ÀÀÏnzõ§Cci‡xä8‘ûÀyãðý1M]¡àJÙ8Ç̽¿ +i +æ˜`z{ÔS}áô¤·³ŽÝÙ“9`'¤ÿZtßx}+HîD¶"¢Š+BŠ(  _&ܱ'j‚Nk(ø¦À ù®s’ FrØPÇ­®ÐTñƒQý‘3ÿÐôÇÜ1Œ~U”¢ï¡¢kV׬1Ë™°a€ ‘)Ô£Wef ƒƒ•÷Æi©n·,« òÏZ–ÙÏ”™ÎsÖ—(ùˆÿµ¡ÜÃsp3÷O¿øR¶«†ù‰+œ€¾€ŸéNòˆé~B-²O”™=N¢æ${ÕHÑ˲ ’xÍEý« HÆrÓö¹ykÐc¥'–ÙÏ”™Æ: +9Bã¾Ü¢8’8û¼ÔmªD¡Žòp û¾”­eÚbB¹Î1Þ,çýRuÏAÞŽPæ-yëG˜Þµó@û¢—2ÿtSå “yëG˜Þµeþè£2ÿtQÊ&óÖ1½jËýÑFeþ裔.Mæ7­czÔ9—û¢ŒËýÑG(\›ÌoZ<Æõ¨s/÷E—û¢ŽP¹7˜Þ´yëPæ_îŠ3/÷E¡ro1½hóÖ¡Ì¿Ýf_îŠ9BâM~°È±±%Ûg©ÅD5XŠäÎÐÛvóÈÏò§²3´hOL‘MòéŒ÷È¥ÊÀuHGW#'(xçΕu(ÙÕ±f;GÈÏqK±¿çšþTØH1ÓG(s]k–¶—+o<Åeb  „çvqÛØÓmõëk«˜ …ÝžA‘˜ÈÀÁ#9õÅLöáÛsA1Ç%Aaó’ÄQSŸvï›­6µ[½ÂŠ(¦ «1c˪ե§,9i'*#‰ ’ÇŽçÚ³©.XÝ—wb¯¡üèù}çY~ñ Þ"ŸU¶¿¹±“Ëmö¢ßïòF~Ÿw¯<óÚ’þöúÞåÞÏÎŒ¦âÙ9à8ùþ5„*)#YAÄÔù}çKòúαÿ´ï Æ™(s9‹c1û¿ÞéÓô÷¨"Õõ,!—Js½Ñ~B~PG$äv?äV—DÙ›ù_CùÑ•ô?cO©_F°ìÓ™™Ñ]¾bBdò8^Ãñç¡çŪêDÅšSïeœ1 + Ç·Nô]™»•ô?/¡üëµ™þß=´v/'”軃âÏ'Ž{õ­–»³Žá¢1ùƒ!IÏ¿JLZ–¾_CùÔS}Î=jJdßsñª[‰ìW¢Š+S0¢Š(¢Š(¢Š(¢Š(i)h¤IKE”´PEP:Ö¾8‚ëæ8WIô¬‘Ö­€O@OÒ³¨”•™¤NèŸÅ~‹ÅVpÚÏw<FûÈ‹1ÆséÍr±|Ó¢™%T¾GF ¬»rèzWco}s„(]G@AÈ©ÛU“-±Üšàtf‘×í"õe»‰¾ËhK6_æ¹+ón"O´¾Õ2(L’Ùã­9¤žá÷HžÃ +¥u§Åxª'€¾Æ §#œ‚:WE8rGÌÆræfUµ¦˜›6l‘¸ÖÏ9é†ìjq„ÎHe $`yÆ[9?^µm4¸c…"X_lcjä± g=zÒd[í+ös´ä‘“Þ´ ¦,ôß”oS·îæNÝO׿çVmì-£XÚŒ+ŽG8ä}si˜Ê,,™î3ô«Q@ñÄ‘…b@ÉhA¨µÿx}*ÉF%Hü*¼ßx}*ã¹b)h­ŠZ(£4N t4Èí®PÆBÈ àš¹l¥£W©àT_Úš_ü$_ØâOí/~6|½3ŒúãšæE©¼`ÚЪö—M38˜…Ï ’?ÏøÓ¡µ¹GV’bø#zÿõ¿*½<‘Û6'‘#Ël˜ ŸAUÆ¥`J}lK ®%^G·4sŠÏitÍ'ïˆV26žÇüýiÆå‡úöq`F3ž3ù~µoûFÇþm»ËUïÓ¿zV¿³X¼ÃuÂÅAÞ9#¨§ÚŽ`±U­nž¾k;†sÐc§ëMk;²X­Ã Ž§9ÿ +»í¬Î©Ì,ìH +d‘×jV»·IDMÑýô9ã?lµËq*pÙqÇþFŽ`å èhØÞ†œ×0 ËÏü»¹p8õúSÒHåÏ–êûNÓœJ9ƒ”‹cz67¡©è£˜9H67¡£czžŠ9ƒ”ƒcz67¡©è£˜9H67¡£czžŠ9ƒ”ƒcz67¡©è£˜9H67¡£czžŠ9ƒ”ƒcz67¡©&š;xZiR4fc€*(o­n-~ÓÄmyp(æQv7¡£czzÍ+0q„ûÇÒ ³Ô¬µâÒå&(m§¦zQ̤sŒš†­^}äúUjÚ/C9n%´U%Zý_@A2°È õwZ¬Çþ¬TOb£¸«`²´·b6–†¬G¦EWšê8ƒçåñß'f©]Ìé2"Z‰{°ç׳IEhhÛ{‘NÜć9qÔèií ¸8Æ;äæ*%»˜È»ìYøœäàdôãž”éæpçfB…¶žÃÿžx¢áaN§o÷‹FÐ9?Ή5#1ä1¡ºtÏJŒÝJŒTiíÀÆW§O¥ u>qöØïÎ1»žœÑp±,Z„2È#·3”qÿÖçñ©!½Žk%·m-“Ž0qÍ-´†bÌÐÀèX`ž½±þsV(è cÐSêŽo¹øԔɾçãMn'±ZŠZ+S1(¥¢€ŠZ((¥¢€ŠZ(h¥¢Ä¢–ŠJ)h BQKEu«†9%¶–8_l‡;Šäg‘‘ÈÈã#¦j ëO¸»Š×ošHÝÓ +Oò¬ê+¢àìËV‰x–RE'É2»lc&ñ·9žNŽÔà—ûÆe‹nîp9 ùuªFöØMÄckm?0àú~†ß[(%§EŠÍŽAÅcÉæiÍähÄ—JûÕ^W^Þ[ŸnAÏ·ë@Á£éö× q¸)$9v'‘ƒÔÔ­§Ù¼­#B ¹Ëžj³f€EöÆûá²Ä“ŒtëíŸéQý†Qó}½)´°Ï=yëïß4liöªÁ„gpï¼úç×Öžö¶òoÞ›·ýì“Ïoêj´¶Ìóïl¨ +™<`ŒóžôÓi'™#=ûòÅ”@PG¯8ë@ZÂÑ·fw’[“ÎzÓ³¬÷nò¹çqî0{ûÊ ŽÞH7+ßinç<ƒÏ#ŸÒ—ì’–,o_`xç>¾œP“i–“. +aŒ:±ÈQØUˆ`ŠÜ0‰vî9<æ³~Ë!g‰µ&fuÀRHÇqƒ×½=m&RÌ5$ç““Ž½³ïúP¦hÍf<ñÀRüª*€Iþ?¯=ø¨á°™/ÛŽÅTŒ÷^(_4dVDheF’;òäz^˜8¥SOm{Öàî szÑp±­š3YÞFcŽwó,…î=r:ûþ”Ù-$r +j…QU°z‘žz÷  <ÑšÊ{iD«¶ý•v2ÄœžýüªCòþÜÂB᳞ÀcÏãüó@9£5•ýžâ@ßl;ÉÎpysúÒ­¤£pKó· °ç°é׌õü¾´©š3Yq[}˜,-|w4Egºž´ãk.ãþœÁAb£œŽ02sÎ(Ýå¬7ö’ZÎ ŠA†ã¾j+M2ÎÊÄÙÛŲÎFã“ž¼õ¨e¶w#kÖ\ 3÷Žx=xïúzS¡µ™.–F¾fPOîñÁã§S@#·Ž"åCÿx³ÏçPXivz`”ZB#ó[scüôö«”S¥çÞO¥V«W}V«VðøLe¸”RÑT!*ÌêÅW«ÿ«2ØqTî¾×æ/ÙÂlÇÍž¿‡½\ªwVòJùK–‹åÆ}zõ›,©ö˜]¬PíÈ'׎1øÔŒu†ÎBõÏ=áúÓc± »%ßÊã8õàÓZÊA +ï¿&4+ÔÇ×=ÿÎi ú|±FP„ÈË\¿áùóÒ¦Ûwä Ü‚O™Ž9^úÔÁnV0Ÿl|³przàûûŽ=©>Ë)É7ÌOËŒd ƒß¿­,ƒPÊ”hÇÈ2 +änÇ>œõ½éê"]«±— wù~4émç..Êÿu{×ØÓìàx]Œ—m6înÔÀšØO°ùåwg€¾”ù¾çãRS%ûŸRÜ—±^ŠZ+B¢–ŠJ)h ¢–Š%´P1h¢Š@QEQEQE­-Õ”W{<ܧŒQÞ™{%Òmû2;XœœsŽ;Ê¢eDaÓ-È#/Ï{ ç§Ì:pÓ­Æðå‰ã'©ªo¨^#2˜ù¡16O O¯ÝZWÔ/vÈb· †+þ­ŽÜ?à];t¨º/RÑÓ-šo4«nç¿©$ÿ:_ìè7î†dó«g9¨Åï_'ŒœSÆ9úõíQ½ýÌ2Ǩ ³…ca³·§¦2yö£@ÔÖ¢«ÙK,ÖÊó)Y 9 +þ‡š±LAES¨fûÃéST3}áô§Äö#¢Š*È +(¢€/Cþ¥~•%2õ+ô§Öse±Vô@bhû™8ÿ¾OôÍg”ÓŒś!‡RI#Uý+BúHã‰L°‰SwLŽ Ï?L~5ž×6*F,AÆâ˜yÀ?1RÊD° 6ÍmÉ)œI#9üqQm5ä#{3²íà{ô~ƒëïR=å¤QFÆÔí“sp‹Á^¹÷àtô¨ÒòÏj„±À-€6(}ÒnÁ/%óÝÕÝbOéÖ˜§K–‘رLíq’ìçÞ­Auktv1Æ@dã¦*¿Úí“nûHÎôÈòÔ9È$ãüšnÍ)˜™Žv¶p9ÏL{T¯ý˜Ã{¸%rr@PG¯aCÝX¬V´àÉ´,dž¹ýj$¹²A•°?ÄÊB)'’OQÇÿZ€qýœ¦i$gWVlã®H#¯?&™ ƒïRI=³+<¶@…}¹Tž…³ùñQ›«2±²éà†¹EasÈ÷é@é±–&oÜAÚx H»þt…4µPÊOáAÉÚ1ŽqS=Õ¬R:}”’Ó„^vò?Ïojiº´W9³;·ÈE=ñúçùûÐi›jÊ\.óÎÞs÷ŽxÏ{ÿ…(M24òò@Y<ÕèzrqïßÖ¤†îÊH˜-°UPï·bãå8'©ýj3uo$r̶ íTbã“@ ³LQ»ÌÙœÆsÇNÆ=éBéÖÓ¨óH‘NÔ_B8ãÐÓbšÉ1‹–'b¿ÄÏ·µHn­w¤†Ð’à0m‹œœÿ‡ò M`fóVRì‡x + ÆzñŽù¦¤rÃ$[÷!A#î9à|Ù'þGÚ¬ƒlk=§ƒ÷äQ Õ«ìòì +‰x$¢Éçô ˜4ÉWÌÜÛÈ Ä}:töýi«—*²€09ÂñÇùÏ5*ßZ³ˆÒÍÎ_¸ÈÀõúS¦–Î*lƒà{`ñùÿZd‘i®ÑÄÇ/$jª9ÛÆ::S|­5sûÆP¤ƒòà€=1éOkËd‘ZÊÛØ2  Œ~=)EͤÑ6e¶žAŒqò’zý1ùP,šuȈ4›Ø ª’2GÈT-–ÛÌfw ’9#8ÁéÇ^¿Ö¤{»0£ý s‹þsÎ?Jvý< A³Œ€Lj3Î8úËÓ"ØrUNÇY1Ærv¯^µ,réðÜ™üæ1c†Ÿ^öþ”G=­Î#'»Æø×ÿZF¼µÆ÷³`@=QsŒóüèÿÛ óV/3ç`\œÕŠÆ¶›Ã‹#”Èݵx*@Ç_óZvó¬èYU— T†ö§qÝõZ¯Vnú­V­ã±Œ· +(¢¨AV#ÿV*½Xî +™l8Žª‹jÒí™™]”.@=>a×uj¿TnçT˜D-Ì’0%F1œ~™?Ÿ½C-^<"©fÃáp:Bàqô_óš’&°t’8¥o™€9Æyµ]ÂñÄ^ÈomªAQòŽqø:±jÖ“nŽ;eE(Ê9ùži ©Ó"ž6Ù˜ÈH#Ÿ˜à}{Ó„:|DÇæ>Aç œœ{sÔô­3k90ÆNs÷GZÖᡳê ÷Ïó¢Ás'þ%{$Üä¶[q#-Ï'·û5bÖÞÅ®IÙ惸ò9à*ïÙ-Îs|œŸsOŽâ$¤h¤õÚ1š,$¨åûŸIL—î~5Kr^ÄQEh@QEQEQEQE´RÑ@ E-”RÑ@ E-w©™ÑYU˜líõ¨{ÒÜÙÇrÈdÉ œqÖ¢EDr˨uu*FàAíëNÞƒË×Ö³¿±!È‘²ÈžØÇÿ)[GGl™ŸÃàqÈïõÿ8¨»+CCzxuÇ^ô #œŒ;úVJh»Ÿ2¾¸*õ=xóZV–¢Ö6@٠źp>”]>(¥¢˜„¢–ŠJ†o¼>•=C7ÞJqÜOb*)h­ ŠZ(ô?êWéO¦À3VxÏ¥sIÙ›$Ú(Ýyêª`PÄ1ÜqƒÇ犦Òj!‹X™ðò2yçð´mÜïIövõ®Š³1e’ý—a²Á' ž1Ž?Z’/"½ªªÃÓéÏNŸŸJÖû;zŠ>ÎÞ¢‹ ³1ZMIe|@¬€¶ÞG<ü½ý3ùÔ±½÷Ú@x‡–y$cåýy­_³·¨£ìíê(º 3YïÒZÕ`ôûÑÍóD¬¶ÈÊ[qÇ<Ÿ¯åï[_goQGÙÛÕi]™’ò_ 0°)Lœ{nÀïéÏãJòÞФ‰_›=Cg¿Öµ~ÎÞ«GÙÛÔSº 3Í©ù˜£½GÊ?>jE›P01kdm(n3žNk_ìíê(û;zŠWAfd3^ùmåÀ¨ÊÄíÈÃýãúœsïK—æEB»NrAéÅk}½EgoQNè,̨æ»a!’دî÷"úœž ÏÒ 7:’&浜q‘Á'ëúÖçÙÛÔQövõ]™æß4§m¢¨Î9çûý)e—PR¾]²0( ã ÎGò­³·¨£ìíê(º 3Í}ùkjÑ·€qÓ¿©„×…ýœmê;÷ëZŸgoU£ìíê(º 3")uµ¥¶EĪrzŽœúùVŽÚ›ìíê)|†õs ³ ÛHP0Ã~¢¬y ê´y ê(æAfA¶µ?Þ¢!½EÈ,ÊáŒ9⊛ÈoQMh™N1íEЬÊW}WéUªÍßUúUzèŽÆ2ÜJ)hª•28 ƒÆ**)=A21}i7§­CE.T;²mÉëFôõ¨h£•3'óÖ1}j +(åAr1}hóÖ ¢ŽT'óÖ™#†YÄ¢–Š¡ E-”RÑ@ E-”QE-´R”RÑ@ E-”RÑ@:Ò_ܵ¬hêPØmÃ'Ã#'üóNjÉÇz‰êò°c¸fQ¾NI0^:T«¨¹uR0, ²¿8ç—öéZR*†9;GSRÓ@Š( AEPPÍ÷‡Ò¦¨fûÃéUÄö"¢–Š²¢–ŠÐµû±Õ߶á‹Éa’xî$\OeÝXô ~|Õ›_»^ â¸ê«³®›²0|¨KáXEÔ×]@æ9$¸Œ£1ÎG^£ ûT“Éâ´È ‚ÐÂü²ùÉFÜóëŸþµmO,sP5ݺ^dL>fÇN½}+4¬‹næA“Īày6L¸9`=8Ýëžÿ•>9_|ç†üûÑe.¿çÀ/a€,‡÷»BžœûÏ÷ìEj Ëb£'ç +ò݃‘Õˆ!a‚z°Úsžzg•0¾°T.r¤‘éÎá××ö늵ý£g°¿Úà*IR=ÌŒÉ4iÆ~fZ…þ×¾/%<½à`âéÏOZ®±×ùØ8#Û¾¾ŸÊ­ýº×Ÿô˜x$Þ1Hoí ÜÂëóð4][U3¡)‰˜nTno~¸ÛQË>¬³H"!ÂdmåÉÏ}.à¨I£bã*GµFuE!¸‹$ûÃhh<Ó +™€w¤ªâúÔÿËÄ]¿ŒwéJ·¶ÎÁVâ"ÌH8É#¨ DôUd¿µyV5 1ÂàýãŒñëN7¶Ã~gŒ˜ÁN4=\ßÚÚn¡Îq0u _Z¹‡§ïX¢ {Ëxò ÉHÚg#¨ÅFº•£F²}¢0¬@lrzPº*³êˆÁZâ0HÝ÷‡×éOû]¾TyñeþèÞ>o¥d\K¯ÿÂI[ÅöXÛæ3cŸ_|ý+Bå¯Díä©)´ÆÐ3“œäçÓ ©–òÙÎâ&'°pi>ÝjX¯Ú"ÊŒŸœžô Î×F»¾ÛûH‚³—zƒ·=žÃšÖ|ù<œœric•%]ѺºôÊœŠ%ÿVÔ-Äö2îþòý*µY»êµ^»#±Ë-Ä¢–Š¢D¬kýZæÃR1ñWˆYjPßMsJêÖï±Ã€9ç¶sŽ;â®T0YÛÛI,¨òœ»ËœŸÎ§ªWêKòŠZ)ˆJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h bÑE€(¢Š(¢Š(¢ŠZ[˜e‘¢h™CFÛ¾aÁàëINkåÈçó©’¸âìf>v‚0²™>ažH§Ìrzð:”i×*Œë–I ž£ë×ô«¿kŒ¾ÝË»Ó?çÒ‡»Ž3‡eSÇSRù‚ÒßìÑ2ddf÷9«5\Ý"‚K ¯ÍÒ‡»Xþ÷èz +vËUuºWbªA"ŸæŸJ,Âè–Š‹Í>”y§Ò‹0º%¨fûÃéKæŸJcÇ&šBoA´QEQ!EP…¯ÝŽ¯U+_»]®YîtÃ`¬{™4ñ# #vfr»rpÄç8ã/é[™%Ü¿iò¾Âì9ýæ:ãÐõ•üí0|Â-&öÚ'* ½Á¥¹6*>Õ$lRAóåŽôùÿ=Þ—“´è~Ââ6d©yÇ¥>KÉ°þÏf ¶ÌdƒŽ:ãŒÒºO§ ‘„5WmÙÎG +0OlÒ¼ºcy’²¤ÌIÁ=³ê YHÖ÷´Ù*!Ø»I @ã°ïïùUgº¼RÀéûŠc$.|·OÌЭΜˆéå:$˜F'€@¹àGæúlðº¬P>ò¤—¿_˜Sžöçj·ökœã$Ÿ»ŸO^(þÑ–2Št÷]ÄŽ3ýÜñÇ·ÿ®€»L•w4lUƒ8õÆ¿ÓÞ52$ä²ð2YˆÝÐç©8üjÇÛ.^),J•À~7Ž§·j‹í— ;¨Ó˜&à ²ž}ON?úôË·Óž'·gt¶(8ü;~b”6Ÿ,qKöisüƒ¯9úð2ß­?í÷NŒF˜å•|Ù< =ÿ*šK©ãrÇrxŸºL{ãð  +±^iÑL†(ä&D*bF}>¹?‡½DJ +mæ@rnIÉÆxóëߊ´nîw®4ÿ‘$`“Žß^¾Ÿ…:K‰ã ‹ ÁXŽ3ÈËc·°?Vš[8eýÕ›¹ŒífÜTBœ×­({¶Äê²&Õ8ÁH'o=úÔßÚ$Š$±a½Êägœ)>œôÿ ÓÒîGÝ´÷\À#–Ï^ݨ.ž-㞊 mªÛŠ‘“·=zv¦µå€µûKÀãÎ6ñ“×=ýOëNû}ɇqÒäå~æyëŒ?y¼›~Áˆ8Æ'$sòûPlÚu¼²DmØpÇW8ëèß­Am6šaa•Š!ØÀ8ROLÕÆ»œù@X6ź.NéØsLšîá$*ºi|*Ùã‚qÛ¾3øÐIq§Ü<’˜$ÞÎ|‚xü3íMY´ÕÛ[K÷”íàŒ¸Ïi.ä%±`ãj¶8ÆHã‘ߧá@¹¸x·ý€nÞ+1R¹ÏÝõâ€"·L¸*8ÉÊdnc‚>¼žj?¶Ø¼É<â„px,NÒ;÷4ÿ·\ 2šd€ãœwÇnií¨J'N”²‚B€OCŽ¸úÐQ^iÐyLÊ„.Õù8äôôëíA:Y·vkvXãm¤zžüÎ0Z’+©ÚGC§•êTí8PFxõÈÿòèîS§PÌÇ°3‘Ç®hõŠÀ¶‰ödÙåGµO/ú¶ª–wRÍ&dzxilŸ\ôéVåÿVi­Äö3.ú­W«7]V«W\v9e¸QEB +zÆXg8¦Uˆþà¤ØÒ#òO­Iõ©¨©»*ȇÉ>´y'Ö«µµË?úÜ Ìr%n„äqì8ÇJbÚ^‰šçv>÷Î@ê9Ç~1ïK™‡*-ù'Ö$úÔFÞãí +þË¿q=08ÇÔΟsy¡O1\†Î +ŒóÇ­>f¨w’}hòO­Bu+q™—Û’8CÛÿ×RÃwÔŒ¶@ÉÊ‘G0r¡|“ëMhÊóÖ¬S%ûŸ4ØšV ¢Š*ˆ +(¢…Q@Q@‚Š( bÑKE ŠZ((¥¢€ŠZ(*+……‘DË•ÏÎ1ýjjd¢2¸ŒuäÐXà´iTÅÔs€OÔfŸ$v³HÅñ¼ Ééôȧ¬0ÆÁ÷r;–öÇò¿f˜ªX’O¿9þbÈÍ­®yÀ#ý³ßñ©^¥Át ŽϵCöK}̾p6’[=ªÄ{Ú1Ö€¼q6P€3*ZMé°¶á´u9¥ÁÄP=¥ ¢–ŠJ)h ¢–Š¿k÷c«µJ×îÇWk–{0Ø*€ûi¼mû¿;q×=¿×>Õ~¨=„¦f‘nÜÙÙÎ1œãƒPY\Qbù¶ª2@±ïíéO_í/-÷÷”8à6yúñŸNß„cK»ÎP”¨UÃs’Cd÷ǧÿ«Šté62KtÇß0‚ŒñœsŒã×ó¡´Ë .£2œ©'Î?ôùÒðÊ^,ú¨ÝÀéŽç<ÒEý¢ +ù¢6;Nq€3õ8ÏùíBi×(Pý¾FÚAä}?ç=è—Ky.ÚuºdÉÝ´Û·=h:»nÆ¥Ià|ß/©çéÅOêbù²&Üsµ@ìzõir‰Íä…†7ÍŽÝiÓiÓ¹Ç},eÁõ8Ëd`gŒt j‡Ê´sÆsïíý}ªLj†UŸŸ38éþ=}¿¬Qé×­ï½’9Œ†,\÷÷ý=êy´ù¤mËy"lÿt^;ŸÆ€§ò“ånÏÍŽŸ‡òj=ú¨u]‘U¹8ë¡ÉɃ½XkÌ Ü”*O* úóëUäÒ.$,~ÞãpU?)9¨ëÐÿœÐ’. ×8R‚ êF8gðÆ}ò})Ššš1ùÑ—åÆqÇ\ûúT±é÷ ¿ý:S¸0w=1Ïj)£–íäC·Œ}{ãõï@ Æ¢VAº=ÃfÏïgÛ§¿ZkQS#Ë$¸c ÈäþÎ=©ÐésDñ¹½‘Ù[,Hûý8<ÔÑYÜGsæµÉ‘NFÒãñž?Z€j3“˜‘yÂã>¸ÉÏÓ<~4Žu<"!RÂ5Þì'ØéÏLvõ¦*éQ™oÝ¥Áä‚3éßµHtÛ¦a»P“n!AÆ;çÛõ4)â%ù¾[vÑŽÿ/_oת/øšmçÉ%°8ÛÏ'ò©$Ó¦uŒ%ì¨W œ’H'>¿…FtÛ•xö^Ë€À¾æcœÜ÷?…,RD%òÊs¼çž‡JLj€ ˜‰Ú3Ô÷úž´ô°¹ºµó³2m0s×­"é³å‹ßÌÄ’W’ÎqÀ=¸ü¨Œj(ÑoÛ"ƒû΀‘´ìÙü5¿µÜÇå"åÂî\“ÉÛߦ1ïŸjÓPvÄŽHìPT` œûÒKþ¬Óé’ÿ«4Öâ{·]V«Õ‹ž«PW\v9¥¸”RÑL‘*tû‚¡©Óî +R*$³5½±‘Îåa‚@,}†søV|º¥Â3„X¥#€‘€wõ?)'ÔÖÍj7QK$a#wS·hRà|矺IÇõëGö¤Ë<0´`¹”£á0ÞT“í“Áü3W伂)V7c¸¶Þã<šHï­¤Ue”aˆŽçúñHe9õ ”žH–/õN76 ‘·†sî)?´§ŒF’$^l‹(䘜þCÖ„ó´%vÁ$™ë°t§C!•7Ý9èÚƒO¸k«Q#íÝ’ÑørsõÍZ¥¢˜„¦K÷?’™/Üüi­Äö ¢–Š²¢–ŠJ)h ¢–ŠJ)h ¢Š)QEQEQEU-FêÞÙcûB» ïqƾ¬ãWjµÝ”wC–\ eqêp{€ +R½´m}L K_Ñ4UŽ;¡8HSyÛ°¬O1ç²·ýò} cŠ> +µ˜†½¸Ià†¶pFžõÒê^Óur¿mV“iÊ…€pGEQØŸÌúšÉo…þf,Úp,NI8çô¬­WÈÖô¼Èl>!øK[Ô Óí/'’ââLG’Àdû‘Ç­u­§ÀÃ`¾€Ö‡ÃÏ é—ð_ZXˆî pèãʺš¸)}¢$ãöH„ +"hÆv¶Iàw¨ŽŸRìƒÏQœÿ:µEY [X’Q 0$lÔôQ@Q@Q@Q@­Î¥[óûÕNõKô©8õ¬$®Íâì‹bxQæ'÷…WÀõ£Ö§•ÌËÓûÂéýáUð=hÀõ£•3,oOï +7§÷…WÀõ£ÖŽṮ½?¼(ÞŸÞ_ÖŒZ9Ps2Æôþð£ÌOï +¯ëF­¨9™czxQ½?¼*¾­´r æeéýáFôþðªø´`zÑʃ™–7§÷…Óû«àzÑëG*fXÞŸÞoOï +¯ëF­¨9™czxQ½?¼*¾­´r æe1?¼(ÞŸÞ_ÖŒZ9Ps2Æôþð£ÌOï +¯ëF­¨9™cÌOï +<Äþðªø´`zÑʃ™–<Äþð¦É"”À9ÍCëF=èåB»*ÜõZ‚¬\õZ¯]ØÆ[…QL©Óî +‚§O¸)H¨Ž¢Š*J"kh]Ë´`±ëü©‚ÂÔlÄ*6cn;`çùóV* ÈežÙ¢†S7ñŽ£éH ëÞÊøǹç‘[<†”Ý:c§qŸÓÒc§\g"öMÄäüíƒËq׎ª8þí\µ„ÛÛ$E·Ï?Œe¤@K)”œa‹ÃÓüæ¬ÑE +d¿sñ§Ó%û¿5¸žÄ4QEYEPEPEPEPÑKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´PÛuÞ±¯LñYÿÛMÿ ˜Ð?²ßìþVï¶oãvÜãúuÍhBHê9—ÿ¾ƒý­ý­ýžÿÚoç}¦O¿œç±øt®ZŠMèuSqKRö¥{–® miD`¨Ï'¥féÅCâm»K 8ìyç=kiÜnÈÜÇŒ÷=j?:>tç§"«Rt2—Å:s€TLr»±³6î?ç߶iO‰l>ˉÊË+BƒË9,?§ùõ­A4%wM½2Å/›ΘžGje¯ˆìo.’Ú!+Jå€r>Q“ÏòÿõTPx¢ÎKxd–)¢iT°LÐgñ­c< +üÄÛœzĶ‰8Ï_¯ø5?þ ?²Ç8IÈ‘Äj¡r@#¿ûCó¨á*ÓJHëç2Ç’Ä(àeFzú°k´ð)¤ŒgËý(3B ÆqŒŽ´î£ ‰E33‚TašŒk6‡»ŽG¨'úUÁ4NÅC£ p?È?•t'¤‰Ï¸ Et¿2ÈŽHŒ§'•z;ŽõÖ`\œqžo¯®*¶n`T,eŒ($°Ç­(žÛDˆX ‘¸f”Ÿ[µF  ä¨CÇæjFÕm’1#oËäôç?J´e„ —L`ž£ñ¦-Õ» a"# çõ D6º½ä‚8·n žqØ㱫µomÄb@®ZVº…P9•6ž„¼â˜QQ}¢¡¼ÔÚÄ€sÆFsü/Ú"Ý·ÍLànú#@QQ ˆOIPçÑ…;Îþz/nþ½(ôTl€¹_52zñùÓ–æ VT!~÷Ì8ïÍKED—0È¡’E ®áÏoZ_:,æ&C‘ÍE{c5ÜÁŒq £$Õm?Z·Ôt¦Ô"IDkÊËóqW&{g…„Æ&ˆýíø#üñDfßËGål<\cò¤cºY<зD2ËOLŽ†¨èÚì:ßäÛÏ„€ÆE“Ûð­TDEÂ(Qè)4;Wq,p1’{Ð=V «=V ­£±Œ·ŠZ*„%(b:( ÞÞ´ooZJ)Ø»ÛÖíëIEv.öõ£{zÒQ@]‹½½hÞÞ´”PbïoZBIêh¢€¸”RÑL¢–ŠJ)h ¢–ŠJ)h ŠZ)”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@"ÿT¿J}2/õKô§Ö/se±V÷É¡™™@l‚¹ëƒžžÙ¬ã–ÄÄA%_•'‘×í +ѽ•aˆ3EæHÆ3Žÿ«ñ¬óuˆ°y!Œtï‘ø~¢É; ²b„°o½¬:œgŽ¬:¬N—å•a eBL<ç„ü}jÚ]'–®¶g!öáTezsúÔk=´œ ±¾]Å—zCA§Ð1 ¡²®xã©Çl +ãÒ×å}ç(Abq»ñëR\H±Ü3}eŒ¨Ë…PI?_lÿ“QÅv«œéØr›‰U>Þ´$“i­?šÒŸ0‘€uÀ¸¦²i±I)mŤ%ØáˆÉ_^üéÜ*ÅŽ†…Rsì:ŸË®})ÃQ…׋6s¸®àœž0z¥0g[Y•YLnª0ëôÿ8¡?³% 0“9=÷1ý(ººXÄÛ¬<Ç vü™ÝÔgô…"ÞÄ›”Xá.6¯Þ#¸ã1ÁúR2IÂE½šuÀpÌ0G^½©Ut¼0Rãqɲç óÓО}þ•,w †aa´Æ¨Tmùn;w¦µÒžw€J‚ƒ‚½?—Ï3Lž8çýÞ5Pß)˜ÏùÅ6(´¡õìßå¨98b9ý?J˜O…d ÷ÈÆÑèNGñÄR¸Ð²}‡…lª:ç uëïÅCXKü“#Ü7‚H{?™ïRCŸxüóÉü3OŽæßkˆìð=ÅB œ ãŽ>¹¦i¿²üàìÌV dòsþâ¤2é‚?,³lgÞÇ 9 ëôüêA4o˜Ö,ûH1ÁÉüê4»—séár>PB’r@>ÃóèzRt¸Èfgb]ÿ7óžÅ +4Ãóp‚>÷P¹ð§7(ÒE³Ü²*’Ä'õ=oJ‰ç[NèHS°ð3ôãóÆ(Y4ûC^[í–" ŒŸ—Ÿzc6“æÉ™2À¶áópHÁý)ñ_¦ÔW³1ƒòž3ÇP;óíëQ5å¾Ý?® ¨$g·_olÐÙô¹cŠ2Í"¦0õ<~Ÿ–jX °þÐÊ÷([$‚H=þŸäTot‘ª9±7 +v„ù·?­;íi ÿg•îmß(éדÜÿ*`kÑT´Ú#ˆDÿ8q>¹ÿ9â¯P"µÏU¨*ÅÏU¨+Xìe-Ä¢–Š¢D¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠZ)h¤QKE%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE[‹ýRý)ôÈ¿Õ->²{›-Š×mp¨¦Ý¶y¸Á÷ñTž}GvÕ¶\°bcÉÎ;ŸÊ¯]Ã$ÊžT¦6V,à@ýHªme}åaoNüÐcß·ÒÄšãPŠÜ[ÆNÌç§?.9ïþqMIõ7To³Ä#'ÛŽpO׊{Új¼ËJóÈàt©"·½IµÀu{õôOËß„o-ë¹Ûª)089ïϦ* ú’mÛü¯Íæ[ŸCô§5…èšGKÂ-µOlœþ˜þ~µ$v—Kr$kÉÆáë@ ’}A-÷‹U2äd}ÜuëÖ£YuM¹[h¹àñŽ¾ýÿϳä´ÔV/ÝÝînÌ8ëŽ;ÒGm¨˜Ô›Œ[,­ƒÇÇó cËêùQ³Àu]½~÷÷©žf¨ËòIxÈ88ã>¿äõ©^ÖðÊYn¾ROÊGû_áÅ+ÛÞÑc˜!TÚyÎpzôô Cd—P0ŽÝ +vœŽGnÿçÚšeÔC[£ ÝÈúÿœw¦ó&MÚí/–ã¨íR­­ðÝeÊ€ã®yíÇw Áq|èÅí@!_H8ïÉþ´Íú›Ã+•$Ú›Œçæç>•+ÙÝÉ p7%œ63ùʈ-.â‘K\î^wôúPQõ}ž< “Œ œg›¹ÿ>ŠeÔqò#åFá‘Áç<çéëøÓâ‚õD›æVf +rp­“Ž1î?*®lµ$O’ì8ã¾y?–x ùúˆ“a¶FàŽN{úÿ“Kš›yfX"L‘¼œsõô¥û-ûÈK]…RÙ +ƒ çŽG¸ü¨–ÒùŠ˜îÊü€7Xgž”ÄŸR‘Æ-ãX˹ºž¸Ïùö©f’ø3 F;slwúöÿcZê\Guòäƒü=¹©½îÇÌ븰+èqÓ§ùÍDòj[Ô, …s’à qß#Ÿòié&¢b;­Ñ\2AÏßÔΈ­/“i{Âì½A‘íéŸÎ´q@m&©–Þ?Ìñ_ç…=¦¼A(kpHÇ–ËÈnpxÏãZX£ÀÍ…õcçA.ÌŒ’p8ëëü©¦ML)że¹Ç>ÿ_Lÿõ«Sb€2V}M²Eº`ÇpØÅÓÿ=oÛ4Ì„Î1Æ;TØ¥  +÷=V ©î:­CZÇc)n%´S$J)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€-Åþ©j ýVÇLhÒè°iràuä }rEOú¥© >dFãŽÕ„¯Ðè­©’þ(ÑãFvi¶¨Î|¦çæÛÇãNi æòb2ሸÚ2kP• ƒõÈ¥Êóû´ç¯6e]’ëúdMþð´ÑG2„|ŽÁA?ŸOjl~$Ò%·¸^M–è'Èx Ð}y¨vŠ2Àùz +>@&ÁùzJ,ÂèË>#Ó|èâD™™Ï¡Q÷¶÷÷ò4Ñâm%¤Ú<Ü ¥Ë!C!pï‘ŸjÖùxýÒqÓŽ”Ù)Q’H#ea‚ +õ”Y…ÑVmRÖ Ç R¡ºrÛÛþO‹QµšXãŽ9 vÀ%vÿ óÔ§¥[, ÉE$Œt¤ Èä^´Y…ÑA5kW +|‰Wv0É?&îÇÜ +¼vGNU†A¥ÊíÛå¦=1C1n½©¤ÄÚŠ1KEQ"bŒRÑ@ Š1KE&(Å-˜£´PbŠZ((¥¢€ŠZ((¥¢€+ÜuZ‚¬\uZ‚´ŽÆRÜJ)hª$J)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ŠZ)”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@âÿV´üý?*dê–°¼IâI´MJ°·þÏ6ó0û[\JÕI#${ö=+žr³:adtú~TgéùTzœßa·–t‰åØ›„iÔû +ÈoJ7mÒoilü˜á~¾´ÓM ¦¼ý?*3ôü«|A+¾Ñ¤Þ‚]nLtïì?úÝib×f–@?³.£_24%ןœg?Aßð÷ 56³ôü¨ÏÓò¬v×Y'òÎvT9Rá À ŒôéÆëÄCÄ·+¥]à)%JðªßNäcÔP›¹ú~TgéùU+ÛçµhÖ;w”¸'#¢ãÖ££fÎq¿Â{‚hG?OÊŒý?*£åÛrmˆY#Þø9ØpN;{ýª5Ô§bؤ»mëŽ=~”¥Ÿ§åF~Ÿ•fZN +ÙLFÒNî9À=9úT¿Ú."m%ɘDTrG¿¥^ÏÓò£?Oʳìõ?¶Hª°:©ÝØuÿÌÖ… ý?*3ôü¨¢˜\3ôü¨ÏÓò¢Š៧åF~Ÿ•P ý?*3ôü¨¢€¸géùQŸ§åEÃ?OÊŒý?*låÄîA;Tœ¦±ü?¯6¹îl¤·±Èlûàsþ4€ÚÏÓò£òªv·ÆåÑ|°»£ßÃnÛÓƒÆçôªVZÍÕÖ¹s§É¦¼QÁ’f/Gðžþ´ ѸêµOqÕjÖ;Ëq)h¢¨‘)h¢€–Š(¤¥¢€ +JZ(¤¥¢€ +(¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ(h¥¢ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-f?õKôª·Z6•}9ž÷J³¹˜€ ’ˆ9«q«Z}c$žæñm-äuŠ=Ì0ªƒ ªòjV±0]¹Ï±Çó8©®JÌÌSÁLœýk/ív{™VÄ‘Îì"õÆâ:ûÆ—×P¶rÛdÎÜçƒÛƒüÅ"êV­ÒaÓw Ž0OòÕdºµy +­©Y”˵vöÉëœ*»KenæÝì‚«µCpsØûP4“P¶‘Y–BBã?)ïÓ·9¨ÓUµp‡yÔ°Èè?Ïà}*·Û-BF¯k̪Œœ ž¿Ja¹±BØnb¥‚,kœ~ç‹òj6ÑB%iÒ»ÇÊyÆZY5 h¤òÞL?.ÒO5Bkû »e²vòþ@žZœ};v©^kuu“ì,\ç,r¸ÈçŸö{{P-C¨[O7•»ß°éÇøÒ6£lƒ-.3÷O<ãÒ©µÍ´~I[¶7 +Ðzþ¥$7v33•³#leË€ùC“@X¹ý¥i¿`˜þè'œ:DÕläuE—,ØÀÚxÏLñÅg›Û_0mÓÍ壂0yÿëÔÒMi²5Ú Ûò=}&€±síö‰ËæªÄ[hl`f˜š¥³ó²á˜a”Ž‡‡ãTEõ¡„FÖloò'–0N0ô¥I¬~y>ÂWÊRxŒc“Ž>¾¿ZÅÿí+]›Ä„®@ÈSÖ†Ôí2þpÚËéÕ±œ +¡ÌK)Ý`©ÁR¼G<ûgñ¤¶¸´XÕ>É!/ +8'<ûõÅcJ;øe‰¤BÛU‚;œˆ¦¶§h±¬6!ŠžÄê*¼³ÛÛȨ–¨ÁÙNT‹è¥5®m ²Cö=Âfûƒ.8ÿá@Xµý§iœy½Èû§°ÉíéÍ8jÅ]„¹¡›ƒÀ=?:ΖâÕš0Ö ½_å ‹Ž˜=<!J—ö¾PòìX,£•Ø£#ž¿—OzÅÉ5[XäU.~fÛœp>´ñ¨ÛyŒ…ʲã;”Ž½?•QûEŸ‘«§3+î|×#Ï=iÕ‹ZÇO£\’dž?Åèµ+id®CÆTóÎ)´mHÈ—¸\`ç'§õQe`†[[$bòlÚ½O`{ŠíÖ^r°·˜6|µùIsž  +Æ¿¶ò|ß0ydà6 öõ¦jYü Ì·@ÀŒóŠ¤·ÖŒ…ÁÊ©S-@ÉéüêA5ˆ¹‰>Ⱦc€Û‚.<õ ,kQ@¥¦"½ÇU¨j{Ž«PÖ‘ØÊ[‰E-ÉŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ(¢–Š@%´PQKE%´PQKE%´PQKE%´PQKE%´PQKE%´P˜ÿÕ­>›úµ§Vose±ìë1®æãךÏ[›ò€½˜ N0é“Ï_§~ä9„o±¸ÃgÞ¨4Zžx¸NHcå9'#×R(t2êB¢Q·ô<óž}9¤7:É`` Nxš_+PX‹„.qÕqÈéëPÁ®ñ)–áQ±È!sœóÐzP‹†½ÄonŠpŒY[ÇŒýyïP‰µ@üÛÆÀ®ynÇAÿש![ô|Ûˆ™LòxúuÿëÓd‚ðHL3¢¹,Aw' G:Põ0ì>ÍQœû\úR}²üùle$ ¶@Gz“ÊÔD2´Fd+„$t9ëÓÒ¢j­¹¾Òˆw0€xÝÁééþ}$–mAä·W&5;Aèýùô¨Ö}L(Ýn§ñÏž¾¸©–Þøßu¸•]¼‚0OnüÔb I–»†ÉÙÀàœŽŸAøt G> Ü½²/îÙ¶ç?7eÎ}ºûÐÓê*Hû267`ƒ€};Óš;àcU¹A„²9$ON?úÔÁ¢TtœŽ¼ßîúÿ“@ +’j8h—‡;[•Þ1Æ»škM©źgñϦG_¯åNA¨G;4ÓGä’NúzzÓò3,·QŸ‘°ã‚éŸÿUòüùlÁeb8tßÔ⥒{õ1„¶FÜyÝžÿÓµ5-µeìmÈÉÀÎ03Ž?ÏãÂùwä`ÜÇæ' òœc±ô?ŸzE¸Ô|À¯m\ °9ç>ŸOzt7Ìñ¬¶À—{qÎ9ìi†-IZ,\+üß>@û}7ìú¡‰ƒ^ rTÛ¾´,R߸2Ðü»G\e¹Ï=…D.uŸ—ã@ –}@Eû«t/—ûÇŽ>ïçøt§K-êÈÞ\Ñô¿w¯_Zíõ¡~Ò¤eI<Àätî•>(5‘%Ê·UçvzôôÍEƧ…ßjƒ<‘»$dôôàRIs©2°ŽÏi(Ø$‚Cvã=êF¶ÔÌeEÚ*p:àäôõÇù⥆+ä¸S$©$;HaЃëÓð ^m@Ž •Ž#ãæc¿J_?R"Ú3“ÓwÝþ´–ÐjŸºiîT «½B‚sžyÆ?ÏãR}Cy+t»K±ÁÛ·×ÿ­@×7Á!Ûj 1o3Ÿ»èG<ÿž•¢§ f²RßU$ï¹Q´œ` 7ËÇðö9«Ö±Ý!´J®6ã·¯a@‡OÕjž~«PÖ‘ØÊ[‰E-ÉŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ(h¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ(ÌêÖMýZÓë'¹²ØŠxVxŒm÷N3ùæ¨dG·|Û¶€w"µ(¤3/û!@P³Ê¸lœ7\cŸL~¦ˆô…T å;Gñ1=óžý\šÔ¢™³éI<æf–@ä`íÀçê2:iÒ|é7sÎ}@àz?SZ”P#6})&óšDi:{dŸëú +†!ÀË1ÜÏTöÁëŸ\þƒ¿5±E3_KWÛ™¥$&ÒIëÀþ_©§;6â;€°`aœçÛ¹íZP#%´ufÝö‰G9ãÜAÇŸ’°ýÙ¥þ.wò1øcÛÐV ÎKDB#´eHØÇ#œzçû¿©¨ÓGHÝXM)a–9ÎsÏÓÚµh E°+v.<æ,0Îl?ÏJ¬ú.VB·2ùŒ…A'Ž{þ|ýkbŠËþÉÕžâV +Àí'‚8àúƒŽi_HâHüÉÀ@9ç’ ç¯ðþ¦´è fSéržEù‰~zäcó‘îMHšnÝùß|~_Íé€?§ê}±£Ee <ÓÌIÉÉn翧Õ¤ …œŸZ}LQŠZ(1E-˜¢–Š‚~«PÔÓõZŠ´ŽÆRÜJ)hª$J)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h ¢–ŠJ)h Š(¤EPEPEPEPEPEPEPEPEPEPEP¨ÿÕ­:Š+'¹ºØ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š†~«PÑEiŒ¥¸QEÉ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€?ÿÙ +endstream +endobj +45 0 obj +<< +/Filter /FlateDecode +/Length 5054 +>> +stream +H‰¤WÛŽÛ8}÷WðÑ^¤ÕEê4 t÷L³Øì ^ÌC0ȶÚÖÆ–¼’ÜNöë·x)’J²‰óЉLQ¬ªÃªsªî»¡~-wyx¸†rw¬öäãýS; í™ü~ÿẾ\*rÿÒ¶CÕ‘ûúõÏòP7åP· Y¯Ÿ~x&‹ÿ,(¡$É +FºjñÛßH³xÚ,hÄDL‹û÷(9ô‹û͆’˜F”‘Íë"'–Á"A6ûÅ’¯6ÿ^ü¸Yü:áÀ¯QáDÌA?þ Îýº¸ÿp)ä?Êæ@–Us÷þiuÿóóO?€‘É!<³?<“`_Æx”2ióã¥ì‰RÁàï‘Rž¯yKÖE¡~ß%°ÀÕ‚ ”¾À_ÏÙºÀüim÷ðßÃ3‡ÿÓ5‹ŠB¿ûQ¿ã™6‡€€<;…¿X+ +y(£Ù:ÃåaêÃ\nÒÐd[£OÚSçºÐ§Ëgô˜§ú· +5öÃÊÌ|šs­ +c9óÜ}tÏòz¦÷; %<•¡{ûµ=Ál"×N)Mxú™¯mØðá9Âl´Î¨3`±ÿÿžu´ê`éí‹»X¸<)s{àÛÑ¥Jì¥gµ!¦›ƒc&ÝqÇ{àÂ׿oþ>­âé•0ª=‘FÉh©ªƒeÝ¡Z ²ü<¬îbp%%KrZé|\V+íéòPoëþ¨‡/«Éž²@Oc–ªšµ¾Îà‰$ØfœäÃS6+S1Ëýô˜y¨}žEI³¶YHcžÍ[=§ÛMCífÀÿlöÎf`{jWº.–×®Ÿ|è £éW L ¶ ÉÆÇŸJuü+Æ– ¸z¬VF(–äŒ%Z&íJør8VÝJËÇ’ÔX®}osøº2•[#e×á²uà­Š¦£^"‰@Ôã½ÀȨnÒ"‰eòríÚM·ʼ1eQÌ=Ã3b æP*"È kóãrëH¼ÙÛl«úž@>€ +Ü°ìJ\J©Ÿð³ +Ñ<Ê &I¿Ÿ¸ðÞäÕ®mä)}-ÿÝWìG!Q)•Ÿ¼[ŠªGïÄ߬A|ØÊ·”À…5CÕ Þé¸e·«¦gmªIùÊ}T½ +«·à“­ªá‹ñýýJ÷ ®ë½ ôTÃEÈ3¾“ËæùµµŸ¬‰V{ƒÀ¡¢î­•éˆ„ê–ê*Ò,‹Rnd³'=ú~Ýɶu$†.—Š‡£Åo ¥Í¥=±à”Ý'2ØO«³ÍŠž\JÈÞòt"2^èe /öC¿2ÝÙòÙ®€0–íà ‘WLõ¶›ƒQ¨Î&,‹r6BÉ×; ZrÑtgBÅ7YÄ=_æQ¨Æ&¢cŸÀˆ •x)pù»ßJV1EÑ•(výgÄ®!ýR¦ÞUUÒàQC?CËâP9<‘r†é¥v°á ¥­< †ÄŽµ\:êïÙL¤ÏzPq£S<ž~p0Lܘd¸'Ü ç+5À¤Óç6E¦)ÂéÆ -MsÚ 4Ù‰NxáÐLŒQÓ€R „psžD/Ó©†RÿÈg 1EÄW + t*¦<âžWs•8 „Ècåƒ,ÕŸ|Ý75vYƒOT‘ÕP£(VP£(ȃíBÛ´-×ܬ' £ÿÖ©£w‚lè1äùŒ_[ílä *<‡ê(ž?––æÁ¨9~מ=9QoZķdQ£­­1çwåA#eURŒ¥3ž^Ï*ÆTÒcA6;¢ÈA¤i”0•8åŒÌ •¹TDéÎèÇ幬¯-‘רo¹¹Î#xÎdq”ç#ÜÍ•¶Ef¸ª€1§Qšú72ãBBu)ÖºäÇSÝâõ¤ºEúMŸ.+×á3¬«À²M \¡,„,»Wü¹r¢¡$KÁ©qp®ïì^C|IBK–Ã<0öe[ ·ê›A¦ÁÉê;b©Î›…¾ª ¾äýUzIQ¢íõí¦ïÞaíÍÁ#tàÕì#TÊ+4Þÿò/p0Î}‹<îX¾.Oj‹iñꦷ¯l@e³SáÏaŠô~·vDÁPäñNùçéÍ]\ +¹µW›p§½WC6d§p§‹ZŸ[\þGýÕ^,LXž•Rm+LaoŽ˜,°D–/]U~Â)´ÇÕgÛˆ_·~€A¾Us’&´ñÐI“èökY½UÝ—áXÛ¡ñ;†Æáô#!µ?+˜”±w€Žy¾ÚÏ#Tƒå]À^È šOBuWÞ·‡Ü¸é0±[<>»þÈÊñåäˆj:@¡ª|'D"»ÆÓ(·PE3° +Õa&˜| +¸P6ý4L7 ×´9Ö½ëBoeo)`N™…êf, §#‡¬ò4»¶»´]9Èv²+(IŒ…ê2†'½Ér÷­Œôþ“Æ3|¬ Vu±íðPmɤêÑʶjÃo½ÿnä¾Yéºö6´PÝb"—xù°É2oÌõAGk±ª›áQ¨®%”F"õ<šA×a·zté£ÖÍ×¾êül ÃÂŒTë&cüï;ÝîÞe³õ‡*¤*.J3ÉœÛNÅ‘`ê^†ºEÏ›Q?™`Ÿþæ*Ð3Oåö¤Âßvr‰åLts4í¯üc½ÁF-›=ÐÖöÖœ*¬¦8̱[[¡GoÔÂ’ŸÅG¡-@ÂR™ÈT5=LNåP¥O0›îò¦œ.Í/F_Y«•Q>ÅG‰a€r‹TÞ¾ÍèEhÀY îãön2j"TqyB}‹ÓïI„Ê-‡D.‚ÓCü%•ä‹3ß:ÙSEt=Aq03J–§^öd¦”¶$¥ªãbTR›-­9y*Uj‚`j‚¹™3/Œå~tÁR$|ð^±ShgH£U©Ä:÷˜“§¡Ê§qÄÆQ·ƒÌ”£ek8h’s\®0Jô˜'UoÇNH쇮;Dí¨>Tï%)MG0”“D³Q0 †Q¾Õ2¬Ci}܈t0ý­ÌûÃkõïZK€€™2‚îÒ–”Õ®²Ù)Qÿ å'˜ƒÑ„y×ÎA%T24'¨µ^¸^D©õ@n¶Wü`BØVÔC†ÕX& õ*¦RAnêŶ«íœvp|A^m€©P—?;èÏÌ‘SM‡ –f²ó³ ̨¬ÔjŽÚûg;§hEÊÞ=³?b"'Ñ\º—!CÚB³™é´} 4I©|-%» ð[dk™—±~†wÏð ÿ?®ïܦt=Ì)cÜÝlI$Š3¾7ó%Œ^îÔÓ”I媢ⱅ;¿“Ð;Œ¾øbêxRc‰™4” +ÛàĄ̈ì's#÷W³ßÃh®Ðì¶çδxŠ*+Ä·±€›æ´{nÇã·˜ê²h^JŽzçHeîšC "rˆð]!‡hER^ÿ °ï— wµòʉãÒS<"WÕµsÝCÔ‹ea¡v*a¹^h+wȘþú¥Ã¨°˜äv;.WVòg¹Y¹Ä€’Ìæñ™Â,ââúÀCH+I5ò¨†'r Ãå¢û…Ç~lnÃóAp/[øŒ ÇŬR,ZØ”3L×âN/°©Ê¥ÝN¥†Í#Ǭěî'È°ÅA«Èü¬]aºV51?ÂÒOc<>Lj§?S=ƒ ªR÷rIM½·"|íô¹²bœEHñN>hÕ'8ÓÌÜ{Q=CÙ4·¼ßÍñ¯çåqÎð{ÈqŽS²neæ`ÃÕMr•Q ©ðÊ!¯çÛAL ž½éG‰?f$‡ÔSÛìQ/kÄÝãÍçºÕr‹âP–­ôKÇ?/´•9TPhT…£ÇñÍŸO•´z‘›ÊÁ“gór¸&e ïÚÊ"YÚ­üfo å…+¹„œY†Ï©+¥­O$5ÑsÕLlˆ"×Tµ®É%„ÕˆµǬDª|¯×ff¾^¬Y=Ê%’È¢ +5'ËdzóµÞ2ÿ×nµ3 >?úå\ÆÜó}½?uæï­ÉïÒŸ_šÞOãØiÚýlÔÇòVªqãcâ <ÀÞô‘ROu/‚T)Xw –©˜jI4’Wîü×T_ŒÜ¯Û9N)w-^ïÝ« PDšC×ÿžWFr©7êÓ“Ój¹¾Ö„ˆi£S­‘F=+¥ìQGÿÞlÁÃøR·›4"÷ª?*¤ú³yDÜ{9U8@0ˆI™ü¥Î~×ÚÛs@ý©ûhï4™3Ÿè@#†eÒÄ7sëäzn˜›ˆ€©òI ‡: xÚ€ÚiÕ„<÷ ­¼Áq&å§ìÆê-?9×ÎËÍЦñ'ñ‚3\¿íæXY1­¦ª#ZAsït1mt²‚þYõ8/MGŸºš*ŒSCrÒ©«©Â€Æ)óàØ¿œazU(±âF¢KitÎQ9¡£~踷†èy¾È<Þž"¤N5Urhbdð¥õ¹9@Nëú,˜1'+5û½5;ë ’®ß4ý E"”ÃÖ<÷hÒ ”†‡d>ô–íÙªÀ.9›§/–vɦ9íL)Ÿ[U¶ý_MUJœgi!¼jÅ@.B ôŠr p•3œ^n:Tƒ©L¸lã8UV¸`¥ž¹™`[½šJ¶×+E›ypÜ eŒ–ƒEbµ¤ÄˆØÒ-L5øÂ((šã¶¹Y‰R(_.¬Ô²²©PñœºÓÃËi²Ì“l+Ô3…~?Vª1öh»›@Dˆ™oߘ‹Y– +:‘ˆôÕÔñII.ž ú4ûÚw[kw{cùbZ¿xjí{+£¦”W+ +VSæMüyd±ÊS«%Ø ê—ÆÁøÀtla(‰êûo+CËÂô²˜ÊLí XõiöxÙïíP™±²Ýí#°D‰_³(¶_©YAÓ,MQ|¿R3õiv÷Ó +ÏZ©ŒºOj3vÛM²2õì~6–£R”’b|5£dë›>F3˜©ñœ,[u#sQ¡˜ëug¤ÅÅ $ÈøjQ2ºZ4Jy^Áž ±µ¢S¥¡†|8ÔÐæLJåã‹¡®~1]—©CßÔÅF…aX[Bž ÷N¿, ûM šòñ…‹šçW +GÊ4‹®ÛdŸŠu3AŸf÷õÚ0ïõbÕ1‘=M56èe}s:ƒ³Ì¢¤¥Õè"²¨1ÿ¦U Td ÙTÿ‰íËÄ|š}ÙY¼­¥¥RÌY ®‰@kžµMw1&ìQ@ÆÆpÀô¯r¾ò˜-ò2å‰ÈóTTIY(þ€ 5gþñžÉbàó`ùúðáïÏ’|ê m“½ÇrYÖLäUJÁaƒ")óÔ2ü™ÉPÛ¿ôç?ô"¦W µJ¨eÿûR݇¼ñþÀþ”òúÌ—\”‘?;Ù9*8ðìù¢o Þ7Éð®üdŠ›$S‰T/™™ ØYÞ&dåÇš%?^u‹x¡.â£^DNn‘§y9òœÞ&¤Ò2>¨¾4­EÕ%‚ô<$ý [Oôsð½@(Щ(Z‘.ƒ6•{|ÆÇ’ÓúUø•æ4ý#§¹íø] Ú’Üö*£Õ²2)¹š2r•Z&®šgƒÓ¼÷áŸJVEZˆétæù-Rµ…Ëd–½»â&ñ²š¢ øÎË›,Rî|ËÕMVjÖŽ9¡ 7(ÀEøhúÚwRølAwT5òAb‘uRú æ|s¶ÏÎ;ûgû<_Ðøá/è ü'À`—û +endstream +endobj +46 0 obj +<< +/BM /Normal +/CA 1 +/Type /ExtGState +/ca 1 +>> +endobj +47 0 obj +<< +/BaseFont /BCDKEE+SegoeUI +/Encoding /WinAnsiEncoding +/FirstChar 45 +/FontDescriptor 965 0 R +/LastChar 45 +/Subtype /TrueType +/Type /Font +/Widths [400] +>> +endobj +48 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 241 +/Height 347 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Filter /DCTDecode +/Interpolate true +/Length 8655 +>> +stream +ÿØÿàJFIF``ÿÛC  +   $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ[ñ"ÿÄ + ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ + ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ +$4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ô +)h¯xòÄ¢ŠLÐÑMÝFêu™¥ÍRÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-”RÑ@ E-QKHh„Ö.¡âm3M¸6÷Ÿ4uTRØúâ¶×kÄ~üŸùîÿΰ¯QÁ]Ó‚“Ôïá5Ñ¿ç´Ÿ÷èÑÿ ¶ÿ=¤ÿ¿F¹¸¼3ý§§ÙOk41EäüìÀäÉžsQßøti:EÜ—2Ç!,žC 9ÎyL*ËÚÕµí¡|ØíôßéÚ¬¦+Yó ÚÊA#ÚµÁ¯%ð™+âk2vøé¯U’pzÚG8ݙԊ‹²'ͨV@Ã*A Ó·ÖÄfŒÔ{é7й£5•[î°8ëƒNß@f“5ú7й£5ú7й¤ÍG¾ô-úpj}ÜÒæ E´”RÑ@ E-”RÑ@!¥¤4€‰ëÇußùßÿ×wþuìŒ+̼Aá½Oûfêh-^h¥s"² õç͉‹qV6¤Òdºë8ð¦’Öå„;@}§¾;þ9¨ÖÖé|'<‹¨Á5«(f—,Ç烜Q¦Ÿé°ì¹g·'>T±Ò©jÚµõßüKšÕ-UXf×·lÖ ¯‰š$öá_ùlþ­ÿ šôm[þ@ןõÅ¿•qÞðö£³ÝÍ»ÃY?8Á$‚0ã]ÝÝ·Ú¬æ·'o˜…sé‘[ЋTÝÌê5ÌrÚv®4YÊ#2Ë#3Œ’M]µ×/£Õ"°Ôìã…ç\ÄѾA>†«'…¯FQ…Ä–òF§*yÎ:ž-þâý.õKÔvŠ2‘ˆW$u¡{Eo>]J—^+¼µ”´Y–M¦5¸ &3×ü*íæ»tÚ˜°Ó-RiV1$#`(=?˜üë(x.ì[4&âÓ +Û‘ü¯¹îÝ@­;­ +ùuOí :ê(¥xÂJ²) àŸü¨^Ó¨>C?Ã×sÚé:¥À‰e¹$£>ÕÏäÕ«ÝÜj+e$v†Icf¡—z‚88>ÔßøE.N“wf×j^YÄÊûN§éÞ¹´Õmod’×÷jÊé [1SëšITVHmÅ݈¤º®›â¡Mü2ç8#­`]øZvÔ§º´{6YÎæK˜wí=ñ]™gö­ÉŒ²˜Ç@OÐV´ùùŸ1嶄:åýÖ›¦=ݬ)1ŒåÕ³÷}x©t[»«ý2;«¸V—æT\ýÞÝjñ]C+ FAåPª@ ;V¶|×¹7V°áK@¢™!EPEPES¢–Š@0ŠiZ’ŒP2عXOÙcG”ð7¶÷5…¦xI`ÔQÔ'7LÅðOõ®«˜©pMÝI¥ À”»)ø©í@7 Ÿ­6ì®$ §³.Y¶ûc4¿Ù£þzÿãµ pMAö«}̾|YUÜÃxàzý+RF¼¨«ýš?ç¯þ;Kýš?ç¯þ;VMÌ8Í”pÛùÔsßà ¯ÚA3G¸.aùºœRö’î>TEýš?ç¯þ;Göoý5ÿÇjÔ—0Eþ²hÓœ|Ì5&F3ž=hö’TQþÍÿ¦¿øïÿ^ìÑÿ=ñÚ´·¼†4–6p2T0'JE¹¥1,ñ™T3ùQí%Ü9Q[û8Ï_üvìÑÿ=ñÚ°÷VñH#’x‘ÏEgŸÂœ÷Äê’M3}ÕfŸ¥Ò]Õ˜Oüv˜º4Hr…Tú„µ)qG<ƒ•ÃLó×ÿ§8ùkÿŽÕìRÓö’*(ÿgÿÓOÒ –…°ÝCZµØÜŸB)Æ£¾¢qVÐÍ¢–ŠÜÈJ)h ¢–ŠJ(¢€Š( Š( Š( ¦µÿ…ü•CSÚÿÇÂþ?ʦ[1­Ë“äÁ Ý?ʸë]ÐÛøyžÁw¸"à˜ùa°œ?¨Èíi1\\èLâ®#6zeå²Z ´:‹/Íkç,(TË~xüj;[YcÑ5Õ•¯!xÂÛù@®SƒîŽ¿Ö»ŒQŠ\£¹ÍÍ¥Û^êºËÝÚ,ØŠ1‘2Ês·=úr*î›æÂ'kæ† % »®vw÷­|S^1$l÷XiòŠç£¥•×ööu£­ä;dº¸ò>]„0,@Ý’qÆj(£–ãY¶¹òRÒô¢ŠÃaŒdŽeþ,ñëÖ»«khí-b·„H9À¤Å.QÜóûÓi­ìW–NÚ©¼,%krÇapT‡ÆÛÖ¤Ö,Œšåø½•£ó¶‹sýžn ] aøséÏ5ÔÍ ÙÜ^}¦f¸ïå´ìcÈéòg©Š\¡q–êRÞ4g.U,ÃñÔÔÔ€RÖ„…Q@CuÿÍø:š¡ºÿfü?8î…-ŒÚ(¢ºŒŠ( Š( Š( ¢Š)QEQETÖ¿ñð¿ò¨jk_øø_ÇùR–ÌksBŠd²¤1<²0T@Y˜ôVe¯ˆtëÈeš9]c‰<Æycd}A#‘ô®[­“eâ7P‘£†fWTó1,l™_ï Àd{Õi|Kk>›y=„Ÿ<0´‰$иŒã¾qó¥.dfý†|Ekkgl÷Œí$,®`Ý@#¯õ§ÿn+ë:}œ +²AyL²ƒØcúæŽdfÕ RÕLQŠZZJ)h ¢–’€ +†ëþ=›ðþu=AuÿÍø:qÝ ìgQEÒ`QEQERQ@ EPEPEPSZÿÇÂþ?Ê¡©!qªÇ <Ò–Ã[—.£ómfŒ"ɽ +ìs…lŽ‡Ú¸« ê’Yê6`5”ІÞ[8,€ç Ž‹ŒWwà ƒ‘F+‘« ØãŸEÕ5{”{è"²Xl¤¶]².θÏI–³'…®4‰ìa’Í I`DŒ p>µÖm£m.P¹Ä]è½ÃÁ ¡–ÜY,(«tcXd’Á~õY´Ñµ+K¯Ì–ñ¿Ù-M¼àÊÂ@çÜ}+®ÛKŠ9P\: +Z¡Q@Q@Q@CuÿÍø:š«^H~_sUï!Kb…Q]&EPEPEPÑEQEM`Çð¤Ý†‘ ­™q2XÀSÓwÿì{Ÿî'çY:ð]KöRìcQ[?Ø÷?ÜOûêì{Ÿî'ýõG·‡qû)v2Ý>ëô4¾t¿óÑ¿:Öþǹþâ~tcÜÿq?ïª^ÚŸpös2|éç£~tyÒÿÏFüë[ûçû‰ÿ}QýsýÄüèöÔüƒÙÌÉó¥ÿžùÑçKÿ=ó­oì{Ÿî'ýõGö=Ï÷þú£ÛSòg3'Ï—þz7çGŸ/üôoε¿±î¸Ÿ÷ÕØ÷?ÜOÎmL=œÌŸ>_ùèß|¿óÑ¿:ÖþǹþâßTcÜÿq?:=µ0ös2|ùç£~tyòÿÏFüë[ûçû‰ÿ}QýsýÄÿ¾¨öÔÃÙÌÉóåÿžùÑçËÿ=ó­oì{Ÿî'ýõGö=Ï÷þú£ÛSg3'Ηþz7çL9<šÙþǹþâßTcÜÿq?ïª=½>áì¦cRV×ö=Ï÷óªS[”b’&Öq«l'M­ÊtR‘ƒŠJÐÌ(¢ŠJ)h ŠZ(*ݸÈAê­U«vÿòÏëýj'±QÜë@`t´Q^1éQ@Q@Q@Q@Q@Q@Q@Q@Q@bë@yÑrWšÚ¬mkýl_îšÛüDgWà0ýc}i´÷ÿXßZmz¨àŠZ)ˆ(¢Š(¢Š*Ý¿ü³úÿZ©VíÿåŸ×úÔOb£¹×QEãQEQEQEQEQEQEQEQEQEV6µþ¶/÷MlÖ6µþ¶/÷MmCøˆÎ¯À`¿úÆúÓiÏ÷ÛëM¯UEP ¢Š)€´QE +µoÿ,þ¿ÖªÕ»ùgõþµبîu´QExç¤QEQEQEQEQEQEQEQEQE­­‹ýÓ[5­­‹èkjÄFu~ þû}i´çûíõ¦×ªŽ¢Š(QKE +(¢Z·ÿ–_ëUjÕ¿ü³úÿZ‰ìTw:Ú(¢¼sÒ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +ÆÖ¿ÖÅþé­šÇÖ¿ÖÅþé­¨Õø ûíõ¤§?ßo­6½DpQLBQKEQEjßþYý­U«vÿÁõþµبîu”QExç¤QEQEQEQEQEQEQEQEQE­­‹èkb±õŸõ±ºkjÄFu~ þû}i´çûíõ¦×¨Ž¢Š)ˆ(¢Š(¢– Và8} U«1«Z™lTw:Å!”09dR×7åÄ+µ%!}:Óÿ´nÿç±ÿ¾Eyï .Œìöñ:+žþÑ»ÿžÇþùhÝÿÏcÿ|Š>­.áíât4W=ý£wÿ=ä(þÑ»ÿžÇþù}Z]ÃÛÄèh®{ûFïþ{ûäQý£wÿ=ä(ú´»‡·‰ÐÑ\÷ößüö?÷ȤþÒ»ÿžÇþù}Z]ÃÛÄ訮sûNïþ{ûäQý§wÿ=ýò(ú´»‡·‰ÑÑ\çößüö?÷È£ûNïþ{ûäQõiwo£¢¹Ïí;¿ùìï‘Gößüö?÷È£êÒîÞ'GEsŸÚwóØÿß#ü)´®ÿç±ÿ¾EV—pöñ:*+žþÑ»ÿžÇþùhÝÿÏcÿ|Š>­.áíât5¬03Æ òš¯ý¡wÿ=ä*»3;bI=I­)Qq•Ù*©+"›ÿ¬o­6œÿëëM®Ôr…QLBÑIE-Q@Y‹ýZÕj³ú±S-ŠŽã¨¢µtëÀM2ä +ŸçXÎj +ìÒ1rvEkm:iÀcò!î{þ šUº›sŸsŠ¼x¦®)VœŽ¨ÒŠ :u¡êñÿ5^]!19SèÜŠ»¾ž’«5Ônœ_CžÞ[vÛ"ãÐö5 tòD“FREÀ»µkY¶žTýÓë]T«sè÷9êSåÕlV5Îëþ —J¾µµO³Ä³+1žä¶Ááã½tF±õ}*ãRù#½X¢dØñ½ºÈ¸ÏCZÊöÐÍZú•¥Öoe»¶±±ŽÙîd·HÎLJ:qŽNMSݵ¤M¬?k7¦ÎXÝÎÐÀuÓ¥Zÿ„oìâÍì/^ÞâÚ#Ìd:ò8ïBxf8áµU¹c$Wk–F\™\õúõª}â´*sZj}šÇÌ°_2GÞÛYqœ×4—ž.(¶Ioi%Ÿ¸&`ìª=0 ’sÞµˆ Ϋ7ŸÿñˆÈÙ÷0»sןҪ<)e%¥óAwk‘æùaƒ§¡\úûÑi„0øšæö ímon÷åf$$a:ž™>ÔËŸÝÛÙ]¶‡íö·1Àé¸ìmý=G~ãEžám&:ƒ-ý±m·"!† Ôôüj»ø`Kg,r^3ÜÍp—Nc1SÀ< qG¼è£_º²º¼ƒS†`µ7JmØT ÏzƒGñT÷ú•½´°G²åK)‰_÷D á‹ÔV•Æ‡Þ§5ÜÒnŽkSlÑmìNsš4Í.÷O1Fú£OkìHš1Æ[<â‹Já¥iÔÀiÙ« Z(¢€+?ßo­6œÿ}©µª (¢Šb +)h Š(¤V#ÿV*½XýX©–ÅGrͤ>}ÊFzu?JèðÀè+#G\Ë#z+\ןˆ•åc¶Š´n1y×ÄÝh";N`—s§˜Òã%$ {’å^‡!⼗⿇îîn`Öm¢icH„3+‚H8ôäÖ+sG±ÅYxÛÄVWbáu[™yÉI¤.§ÛúW¼øoZ_Ðíu×oš¿2ÿuÁ˜¯šíí§» ·‰å•ÎdšúÁºDš†­,&?¾PZLᘒGáš©X˜ÜéÁ¨/àÚ°þ%–¦^”þ¢¦-§tSWV9CXºËÅ©Gå€Ïa@cÆé*“íòµnλ'‘}Š«-¼2‡C‡0ev:gÖ½-Ñó2P½vBöÍ?žÑ¯îÉVUÆ[ïqÎ}{U›+é®®"©û¢ÂVðw ~'ð©ÞÂÕŠºÚÛ‰P~íÚ v÷þtë;Uµ‰”Îî^GÆ71êhÔz }pÖÐ+"‚îëîé’qÍQžþêtÌa(G˜Xàã­jÉsFc•ÐõVð¨žÒ8aIQvÆæ0v}:qøÐî#ž‘'šëÏ‘íÞ9g‘™L$“cÎî„Æ:œÕ¥Õ5"#öXÃÜ0¨+ò¤œüø<Qô­ ]8[JŒdÞ#‹Ë@WH,O®H7Ølü¯+ìye·lòÆ3ëZI1Ü‚{«ˆ`µB"[‰Žœ”L)$ûôõ¬É5k©ôé<„>VìàüûÉž 9ç­oÉ3"¤±Fê§ 2‚¦;bÈÆÚPS°| tÒ›L.Œi¯$ýÌ,Ñ­¼r•+Îò"‹g=2 cêxo®…¤²f$Ñ—z³–r›È7dzÖŸØí·»ýžÏ÷›`Ë}iÆÖÝäóšM»wǦ})Y…ÐÛ¸[(…Ô‹$ÛFöUÚ údÕšlq¤H©*"ŒQ€)õB+?ßo­6œÿ}¾´ÚÕ…Q@‚Š(¦E-†%XýX¨*ÄêÅL¶w5tfýä«ê­c\ý” ¤c÷Oº^}ui\í¢ï5;è4Û ïn[l0¡w>¼Rø®Þk {Ó[Ƥˆà^P/¸î}ëÛ¼O ÿÂG¢É¦µÓÛ¤Œ¬Ì‹¸qùãò®üµóŸþüñ¬•º–ïÐâåø®H.|¸Zê8ä@¼¾O¯¦+xÕ{‹hnB £Wá×=˜t5èÛKWÖæÔ·–Þ%¶®îÖ躂̌¤íÈ•Ç©ÏJ‚ÑîZ}FÎ÷R½·*Ìz3…ç'p\`úb¶Æ¦‹‰.”^l›·¶ÞNî¿,Z6 ´ÖñÙıMÄŠÞúÒåcº3l¥½‹Á×S\Ìó´RMÈFå\½\b®G<ð¼vñA0š]Ì>×(8UÆyR}GëZ/ rÀк)‰—i^ÄzROm ʪÍm§#œøÓ°®aµóÜ\G2³¢³A” Óæ`•Zm^háŽw<©PÊ›\’»¶4ëÑ"ˆd8a“ޱè¬g5fk 8»9Ò••oª<`,ÃzŽã­_Kûgëû7Å*RCª5"ÉvS‚Ó Õ¸3'ýõPK©Û ù2çØqR¡'²”WRÑ*ŠYˆu&°ï®Í̸ê×îëM¹¼–äáŽtQU뮕.]^ç=JœÚ!¦¹Ÿëí¦˜íífŠ9÷#È\Ž°÷<ý5Óš§{¦Yꔺ·I äŒG#šÕÝ­ Õ¯©•ö›ÿøI"·Ší.-Ü3KÄ…1òÝrMX{‰¶%ˆÍr±F¨BÇ•ç9ÜJ“ÛÖ¤‡Ãú}½û^Å«;9v"wÚIÿg8ý*úÁË$¡~y s×? 0º1îuY^Ë"3K–’WrƒŸCó9ëR[_Ï´Ä‘ùó&o™ö€ŠäuÁç¦[]"ÍP ‰ŠìvŒçž@àS›Lµ`Æ\30)#)ùŽ[zÚ‹0º)nÄLx…þwA×¢°qöâ¬3Ë6ï,"nï3søWJ²rÄÀ>h|ƒ‚GÉéNu¨*D\¨@>cü?wùѨhQ›Z0Äs •ÝZl.T€Ø䜌 zÖ¬ ÒCºlfPJç8ö¬ÛÍ2G¸Y-€–f{Fwì€{œ +Ò¶I#¶‰%“Ì‘P|}ãŽM +àìKKEB +(¢€+?ßo­6œÿ|ýiµ¢3 +(¢˜Q@ ER«ÿ«^¬Gþ¬TËaÇrEVs…§ýžOAùÔ–ø³b¹õ¹Õ®´Éu˜õ‰s%±JmSÑ\ñXJm3e£sìòzγÉè?:šÒµYÁq´¯›¾ÓÛ#8¨›P.¤…”îf$1œã9#Ü +\ì9PŸg“Ð~t}žOAùÔ0ëVÓE#®>E ƒ"c§9Àú|Z¬sù^TNÛÔ± Œ('?ÊŽv>T?ìòzγÉè?:‚MFVŽÚX ”$’€Û—R õãµ]¶¸[˜|À¬¸fR­ÔH#ós°åD?g“Ð~tŸf“Ð~uvŠ9عQKìÒzγIè?:»Eì9QKìÒzγIè?:»Eì9QKìÒzγIè?:»Eì9QKìÒzγIè?:»Eì9QOìòzγÉè?:¹Xw—’Gr².³l°ÀíçĨ°xQ“ÁúQÎÇÊ‹í Š2GåQÔö.ÏﻊåƒrcP6ñÐŒš‰¸b=êã+“%b«ýóõ¦ÓŸïšmnŒBŠ( Š( ¢Š(©ãÿV* +ž?õb¦C‰nØŒ0ïœÖmφ4û“73Æ’’Ïr…|U¬r)|Çþû~uŒ¡vj¥d.“kued-î®å ¸\³ïRËeó¬’³8^‘œmcÓ=­Eæ?÷›ó£Ìï7çKÙœwöryKžrƒFKS1ÇóÍ> mÈ)¸áY~fÎA9?­Eæ?÷›ó£Ìï7çG³rHì#ˆF¡äeƒF¬Ü.ÜÒ‹$UeI%@ÛÉÚøåŽIúç¥Eæ?÷›ó£Ìï7çG³rÜqù{¾fmÍŸ˜çÃÚŸT|Çþó~tyýöüèäaÎ^¢¨ùýöüèóûíùÑÈÃœ½EQóûíùÑæ?÷Û󣑇9zŠ£æ?÷Ûó£Ìï·çG#rõGÌï·çG˜ÿßoÎŽFåê˺µ¾šæ%QfÖÌíç+ÇÉ_áúœÔÞcÿ}¿:<Çþû~t{6äöë4q·žaÎxò¨ÇâMWnXŸSAf#–'êi*£ÝÊÏ÷ÏÖ’œÿ|ýiµº2 +(¢€ŠZ(i)h ©Óî +†¦ýX©–É^óP¶°nd+¼áp…²imo`½‹Ì·:ƒƒÁB"³5ù<›=þÔ–¸‘ÿzê)ìk> +stream +ÿØÿàJFIF``ÿÛC  +   $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀH"ÿÄ + ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ + ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ +$4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ô +)h¯xòÄ¢–ŠJ)h ¢–’€ +)h ¢–ŠJ)h ¢ŠZJ)h ¢–ŠJ)h ¢–ŠJ)i(¢–ŠJ)h ¢–’€ +)h ¢ŠZJ)h ¢–ŠJ(¥ ¢–ŠJ)h ¢–ŠJ)h ¢–’€ +)h ¢–ŠJ)h ¢ŠZJ)h ¢–ŠJ)h ŠZ((¥¢€ŠZ((¥¤ ŠZ((¥¤4RRŠhpz~†€$¢™š3@¢£.RǨ d´S3N E´”RÑ@ E™ ¢“4f€ŠLÑšZ)3Fhh¤Í´QEQERRf€E7<Ñšu™£4´Rf“pë‘@¢“4f€ŠLÑšZ)3Fhh¤Í´QEQEQEQEQEQE-Q@QHŠ(¦ER¢Š)€RZC@ž*$xjô‚AØ:}Ervbk+ûMö°Ëö¢»öãçk»£~ö¶ñÄHŒ>÷'$úu¨?±ç6¦ÓíŸèàåËäs Ï#5}mJß½Öÿ½M¸é‚NZ0heÝßÞ>,±ìŠh¥òäÁ'¡ŠØ¶óü‘öƒ™ßËÎ?Z¦ú^û+«s/úù ¶ýÓÁüzUËt™" <‹#âTÚ?,ši;ê'k +Z(ª$(¢Š`4×;§Ý›+ÎÇìÒÍ&÷Çâ?Q]ªVÚzCnðÈVUiLœ¯©Èüª$›zš±›df:½Ô“äHöÊûs÷FNåKü–Ú%œ¨«ûÆÚ^V%S¯$õíZ?b?ošëúÈ„{qÓóúÔqXÜ[éðÛArªÑðY£Ü}3ýjlÐîˆßPš;H[l2Í4ž\~[ü‡ß4·ÓØXÉ5ÚÂX0TØÄO®zSF‹]žyY„Þx‘PØz{T¯c5Í«Eur‰ Ž‘íØAÈ=M?x4+ØêÆâô[4–Ò–RÁ bqŽÇ5XÈ·ývú2µ­á»GÍÅÊJ¸À ßêj¨Òeû–†älݺ3åò¼çžyý)ZV 5×´)¶[XÃwˆü€¨V‘ôØ®R$wy¼¢¡¸<ã Ô­§Ü›¥¹[¤Y¼¿-É‹ Œ“ÀÏiWK+m>vvOçn+Éç8§ï\4®îRûì÷iÝ‘2{u5@x‹p†¶òËcÊÞ|Ìgôϵk½¦ûèîKp‘²mÇ\ãü*½½…ͨX¡¼Qn§åF‹,¦sý(j]Xîêk©¡³Ž,Cí)<’3€󦦨ÒCjâ0­,þLŠNv‘œãò©$°n¤žÒäBeǘ­àHî94ÆÒ@²Š¦+,ry¢R¹Ëw$~4{Á¡?ÚŸûI­¶‚¢3=óœb«éºŒ÷® }A1†>b}A©`±•.Úê[Ÿ2VaÂ`r0)±éó›È®.nRCvm‹i9ã“žh÷…¡¤)i-hHQEQEQEQEQEQKE ŠZ((¥¢€ŠZ((¥¢€ŠZ(1IŠuÌQŠ} f(ÛO¢€Š\S¨ BQKE%´PQŠZ(¸£ê(¸£ê(¸£ê(¸¥Å-”RÑ@ E-”b–Šn(Å:Šn(Å:Š7bE7bEŠ1N¢€Š1N¢€Š1N¢€ŠZ((¥¢€ŠZ((¥¢€ŠZ((¥¢€ +(§/ß_­$Xr2Æ—È_SR×3ªË¨Câ…’ÁLÆ;0Zßv‚ì3õ±”Ú-E3¡òÔÑä/©® ëzŽ“g$ipd¹7Sî.ƒmÛÀ%†>ƒ?JÕ:ØÔ®±Ž7žâÞ=ϹÀIÆ–*UR¹ŸÈ_SG¾¦©è—sÞiì÷%hæ’&d\ÚÅsŽÝ+F­IµryQ¾¦!}MKX–o%¶“ÉHÔ›¤ÞI*XNGPäÕÞBúš<…õ5žo<Ûˆ˜È¾X¹hÔƒ€FÎ>¼šcÊ_Ãq2¾öÛ¶œädK‡)§ä/©£È_ST!0]¬ ˆã”³„Îí mà~:®÷ÓÍg .ç·g}ƒ˜XcƒõÉü¨çaÊ!}MBúšÊFû5À‰¤áFz˜óÏãSé×—S4Æi,†ä9éÏ­ì|¨½ä/©£È_SRÑO™ŠÈ‹È_SG¾¦³õ™–éZvŽØ %ÚF9ê?ÝÉïÚ‘¯çU˜„iä0?pÀóô¥ÎÔÑòÔÑä/©¬¥½žFžácE¸(Ìà ™=:ÒV|LÈÈÀF̹å!€Áûô4s”ÖòÔÑä/©¨/g{[hó/ÎÎyÇ< +¤º…Ô¶ìáÑ +[™OËœHþ”s±ršžBúš<…õ5—%ÛÍs™‚¸EòGR¸ÎO·5bé¢þÑ vámü¬¦æ–Ï?Ž1G;T\òÔÑä/©¬á{<’ˆâ–0í#Æ"#% ~¸ñ¦¾¥rÑ$¡V(ÝÄd¾ÒÜrxëÇáG8rš~Búš<…õ5VÖ{‰®$tB®ÛwHëø +¿MI…‘¾¦!}MKEÌ,ˆ¼…õ4y êjZ(æadEä/©£È_SRÑG3 "/!}MBúš–Š9˜Yy êhòÔÔ´QÌÂÈ‹È_SG¾¦¥¢ŽfD^Búš<…õ5-s0²"òÔÑä/©©h£™…‘¾¦!}MKEÌ,ˆ¼…õ4y êjZ(æadEä/©£È_SRÑG3 "/!}MBúš–Š9˜Yy êhòÔÔ´QÌÂÈ‹È_SG¾¦¥¢ŽfD^Búš<…õ5-s0²"òÔÑä/©©h£™…‘¾¦!}MKEÌ,Š®…4Ú±?ÜZ¯Z'tC•>úýi)ьʃý¡C\XË ô¥ò¨©è®~fmb$ûQäŸjžŠ9˜Yy'ÔRùGÔTÔQÌÂȇÊ>¢“É>¢§¢Žf òOµIö©è£™…ˆ|£ê)<“íSÑG3 "$ûQäŸjžŠ9˜X‡Ê>¢(úŠšŠ9˜XƒÊ>¢$úŠžŠ9˜XƒÉ>Ôy'Ú§¢Žf òO¨£É>¢§¢ŽfDIö£É>Õ=s0±’}¨òOµOEÌ,AäŸQKåQSQG3 ùGÔQåQSQG3 "(úŠ<£ê*j(æab(úŠ<£ê*j(æadCåQG”}EMEÌ,CåQG”}EMEÌ,ˆ|£ê(ò¨©¨£™…‘”}EQõ5s0±”}EQõ5s0±”}EQõ5s0±”}EQõ5s0²!ò¨£Ê>¢¦¢ŽfD>QõyGÔTÔQÌÂÄ>QõyGÔTÔQÌÂÄ>QõyGÔTÔQÌÂȇÊ>¢(úŠšŠ9˜X‡Ê>¢(úŠšŠ9˜X‡Ê>¢“Ê>¢§¢Žf(Üwªõvð~èz¥[AÝKp§Åþ¹?ÞÊ|_ë“ýáTö4ë;\ÔÛHÒÞñ 3²º(Œ¹‚ñïÍhÕ]BÂ=FÓìò³*ù‰&W®UƒÔW#ØÜÉ_Ç<ø·Xš$ŽÌFï3=€8#©.YÚX $zUOøEm>Éö>}¿eK\ägj¶AéÖmá‹;MmõH˜ùŽÌÛ h@$s†Û»õ£Þ º©ö·™µh•còŒ‚MÜœ‡5n kXÞèNÙ'Ë1•=$éLEYµDKå¶CVwbp7ÝñÚŸ gÔžÙcýÒÆXKŸ¼AÁÇ·=~´M¥C+¬ÑFÁVHЮÈíÇ^Ô°é6v÷‚ê7S NhÔ4"VŒ#™ÁÜ$b4' +¬FMKý«g½ÍåËÁÇÊ2JŒéåŒsË>ýÅqÈfÜG#×¥G.k ˜•ª m?sh¨4µ —X²i1!ËÓŒíÝ®)cÕm¥˜Ä­ç ÈG%xù½‡#šhÒ K©'C·Ìå—bžqŽ2?:zéË·1O$m b,Œê1ÁÈöíOPÐI5kX¤’9ÕgÍÈzòGçDšµ¤&1+:°È~PN>œÔhqE#H³¾ãGó"9ãžéWC·GÕÎä]¤²+n'Ž:ž˜¥¨hMq¨-­éŽ\D;ó‚NwëP¶¹lB$Î n䪗f2¿5=æ—󗔶JÆ0<ûŠ`Ò£?Þ•]j*‡VÆA{”õ k6¡bó7ÆÒ(l2—'>™4¿Úö¤|¾keÌkˆÏÌÃ9×4ÅÑ£Ç)•žDUFgৎÜuíŠ|š\rY}”HÁ ³’UIù‰=ÇijÜ^Em°8rÎ ˆY°:œÔØu {‰ÄQv*!N##'Þ’k!…’i"’%(pISŒƒŸ ¥´±ŠËw”[U0O@£ž 3ûRÛÏ1eò“qC·r‚HÏ®¢MRÖ%BÌÇz#¨T$Ç úÒ6"T–s¶g›¥}>cPE¢¢Ñ)tHÑŒ®ÂJö÷Å-CBFÕíT'úÒÎìXÉa·²;c"§–ö¡Š\³‰±å„RŲ3ÀúsPǦG‹)’F“l˜ãæ/·'§û"œÚz›{hÒW­€È1Ÿ»·œŒt§¨h,Z•´ó¤1wdÂIúr¤R>§m¸Ü_l÷Œ=¾¼ÒÚiñYÈdœ–Œ!Üzᙳõ%ÍTÔ´¦¹[‰cv3/õÉþð¦Sâÿ\Ÿï +§±+sMFX +‘Ú8c/#*"òYŽüi‹Ã +eõ¿Úm1»d2†¦9 cé\’7CþÑm˜ÇïÕüÃçúzÓZòÍ•î`R¿xÇÖ³I¼tu’H$i£D’Fà¦ÒNTƒ×Û‘šš- #Bα3$³>qýüÿMÙF‰š"FdŒHã*¥†X{ôÑqnÛñ4GË8|0ùO¡ô¬Xt #’ÜÊÂP±Â¬|÷M dgœw§6‰<–Ëýœá‚¹ýàܧ-Çw§=zÒ» µÚù>wÚ!ò³ûÆÜúf¦Àô‹w£K-Û\FT0°‹ÍhÁòTpxô5­m +ÛZÅ.Õ¸œ`zžM=@“ÐQè)h B`z +0=-˜‚ŒAKE& £ÐRÑ@ è(Àô´P`z +0=-˜‚ŒAKE& £ÐRÑ@ è(Àô´P`z +0=-˜‚ŒAKE& £ÐRÑ@ è(Àô´P`z +0=-˜‚ŒAKE& £ÐRÑ@ è(Àô´P`z +0=-˜‚ŒAKE& £ÐRÑ@ è(Àô´P`z +0=-˜‚ŒAKE& £ÐRÑ@ è(Àô´P`z +0=-˜‚™"€2*Jd‡€)­Á”®ÿÔ÷ª•^»ÿR?Þª5ÕOá1–âÓ¢ÿ\Ÿï +m>/õÉþðª{·4©À8`>¦›EsÚßß÷Õ[ûãþú¦QJÀ?k|ßTmoïûê™Eû[ûãþú£k|ßTÊ(°Úßß÷Õ[ûãþú¦QE€~Öþøÿ¾¨Úßß÷Õ2Š,ö·÷ÇýõFÖþøÿ¾©”Q`µ¿¾?ïª6·÷ÇýõL¢‹ý­ýñÿ}Qµ¿¾?ïªeXíoïûê­ýñÿ}S(¢À?k|ßTmoïûê™Eû[ûãþú£k|ßTÊ(°Úßß÷Õ[ûãþú¦QE€~Öþøÿ¾¨Úßß÷Õ2Š,ö·÷ÇýõFÖþøÿ¾©”Q`µ¿¾?ïª6·÷ÇýõL¢‹ý­ýñÿ}Qµ¿¾?ïªeXíoïûê­ýñÿ}S(¢À?k|ßTmoïûê™Eû[ûãþú£k|ßTÊ(°Úßß÷Õ[ûãþú¦QE€~Öþøÿ¾¨Úßß÷Õ2Š,ö·÷ÇýõFÖþøÿ¾©”Q`µ¿¾?ïª6·÷ÇýõL¢‹ý­ýñÿ}Qµ¿¾?ïªeXíoïûê­ýñÿ}S(¢À?k|ßTmoïûê™Eû[ûãþú£k|ßTÊ(°Úßß÷Õ[ûãþú¦QE€~Öþøÿ¾¨Úßß÷Õ2Š,ö·÷ÇýõM#®i(  +÷êGûÕJ®Ýÿ©ïU*ÞžÆSÜ)ñ®O÷…6ŸúÔÿxU½‰[š5‰âɧƒÃÒ½»Ê’™bPb}ÌŠ¶AÅmÐð,©¶DV\ƒ†t®W±º9GÖ¦ÐáÜ#DM¬³¨½¸óºžp8 ú +­s¬L.® ^¿Ò,›g™€¨ÁwÀyæ»9-#˜©–(ܯÝ, ãéQ¶lùßkeBœÆ@è>•6ó®ÞßÚëvOdÍ$i’Ë?ëTÎ=À9Ozųñ}Õ½¾›d¸3eóCoÃJÊ>lúc±é]÷Ù×z¾ÄÜ£ã=*?ìû|ƒöhr£ä çùÐÖ»Ë7ˆõfŸd0Ymw¸D.[#Êç'ê8Çÿª£o^6£eoœefŽpO']§#§Ð×_ö8³Ÿ&. #åúþtÖÓíÜÆZÚcBP|¿OJ5î"JÆÕ¯."»m£™Ö&›ÊÆ1œ`äŽ0àg ­¿,ûRy<±Ú¹n§Ö©ˆËÔÏqbcxÌYi +²– …ÈèGõªsêukn  .–Ó6ÃÈ-*‚>•Ð +¨Ú0¸>•XÁvAääáÉÎ!™V÷3C¢Û¼{ZG›ËL3!¨n5«ˆ-执·20¬«ŽyaŽ¾§èk{ìë´.ÄÚ@ÇÓÎ/ LAÈ%AÁõ  Ÿí ùn„[,fãÉÕ‰&íÝyú~µÖo¤xã†ÕÂ~@ óã,1÷sü]kx[¨èˆ9ÏNý3Lk(_fø"m‡+•iõ”|À£yssÛGlØBþö ÆFx÷Zkê>Úh o$²¬D²“ƒÆsǦkJ[HæKr0C¨9¢ÝB*@«÷F8JÄmZõ.nµCnJ¹›²2ÙäñŒ~4 ^á'òäkg·mÑä$r§¿`85´m#3 ŒQ™@Àr£pZ®ºUº\K Š=²Æ¨ÑìN 9Çü +€2®5™•ÝâXÛ`œ(ÉÁ(Èï£SI¨ß¦ -RÝ%ØÈà +bG|ŒèsíZÂÎ ¡D1€Œsÿê¯iŽ$Q»¡Ê³(%~ž”‡k,ú¥¤ÓË +E%¬²‚Ÿ2pÙ<‘ëÇz›Yš`^dÙ¾ÖFÝÉÁGb;ZO§[¾íÖñeÎX…Á' òG¸+@å‘IÆ9¨*òæ}:+KkhQä“* +¨ +03À,?ŸçPGR‘¸ŠÚ,â¥ÑÝÚñÃ3²N§þ›=m}™ É2q“NŸ•*Ûªª"ŸP=óüèšµÕ®,ô¸Ù¼¹Á…ÝUs¹v°1'ž¾ØÅkZÜßIg;Kn‚dÏ–2~23†lsÇZº–qFÌÉ jXaŠ¨ô%œ1ÄbHbXÏTU„ë7¹Ha…e¸Ã—WoËó?û]A?J½c=ÜÍzexþI +¢å>Py9篵]6æ„ÛBcS•Mƒý*An‹#H± v’½`Å©Þ­”,òÛ4ŸeûC³!Pß웯©úqWou'´Ž|¬¤¨ØS×ÌÆUj÷Ø`Àg‡†Þ>AÃzýi—?i–ïû¸Ü?—†aГìy  Ïí[¥;™a#ÍhL`Á•IÝק1ÐŽi$Ö&-B°³É/É8Ûoå[?eÎ3yqù¤`¾Ñ»ZjXÁ|¸"\œ¨=h¥Ì÷Q=¤˜|Ù‰WvC´aIÈöéšÏ‹X¸‚5y d¢i8ÿ€þ¢·Ì9 ¤Ž‡Ò˜m"(ÈaŒ« *0G§ë@‹}<:ÅÄ'cnU&BÂBgjŒõ= +rj×+ùâó@’D ÇNO?\ŠÙ‘Ú"Œ(ÇF8éCZDé±â”®ÜcÓé@+¬ßM˜ÒÝ^(¥wÞ ÜQ±†8ÏÔãÞ¥›U½¼ƒrLÒ*«"àÊ[Ì2xÇQœþ´-cQ…Š01Œ=({XäVY"•¾ðe­0 ³ç·C:,síã Üç 늱B[$êãDà/Ê1Àè)ÞYö§qXmï,ûQåŸj.‚Ãh§ygÚ,ûQtE;Ë>ÔygÚ‹ °Ú)ÞYö£Ë>Ô]†ÑNòϵYö¢è,6Šw–}¨òϵAa´S¼³íHAh¸îÿÔ÷ª^»ÿT?ÞªU½=Œ§¸SâÿZŸï +m:/õ©þðª{·4—ï +míÃÚÚ´±Âf`@Ú3Üõà×€iÚYV9â1¾í§®Ö*1ÍrÈèFyÖNÆ‘ I#Š5’fIxçîñót>”ƒVºyE`Œ®ò"3OŽPœçåàqÖ­gØå?p¿ ÀÆp@9õçžjU†Ý6íŒ ¥˜{ëùæ¢ÌwFjx€K,+œÏ¤lìªÇfðè¤pÎH¥mqã·=§F%„,¹,¹QϘzýjêØÙ£ÄéÓ„]¤Ž@}qïHº}Š†Ãuà çÐg°¢Ì.ŠskrA'ÖdÜï+±p6rªOB;V¥¼¦{xå1¼eÔ1GeÏb=j¬í',d‹æfÜX8Ær9qV¢¨QÐ +vat:Šnõ£zÐE7zѽh Ž¢›½hÞ´ÇQMÞ´oZvaqÔSw­Ö\uÝëFõ .:Šnõ£zÐE7zѽi…ÇQMÞ´oZ,Â㨦ïZ7­ ¸ê)»Öë@\uÝëFõ .:Šnõ£zÓ³ Ž¢›½hÞ´‚㨦ïZ7­qÔSw­Ö€¸ê)»ÖëL.:Šnõ£zÐE7zѽiÇQMÞ´oZ㨦ïZ7­qÔSw­Ö˜\uÝëFõ¤E7zѽh Ž¢›½hÞ´ÇQMÞ´oZv Ž¦I÷iw­5Û< +™VïýPúÕ*»wþ¨½T릞Æ3Ü)ñ­O÷…2ŸúÔÿxU=‰[š4àW®mk˜ÜvWûŸ­_î~µB ^ÆålÚ)· Õ-ÈFðOn?»‘ëHe¹úÑ•þçëMÈõ£#ÔQ`•þçëFåþçëMÈõqœf‹íËýÏÖËýÏÖ›A OAE€våþçëFåþçëU~ÝoåÅ'™òÌ¥í<€3üª(µk9W*î2Pñ²“¼áNèOz4þWûŸ­—ûŸ­6 –éc¸†Žï.HÚc$äôä{ÐËýÏÖËýÏÖ›GãE€våþçëFåþçëM¨¢¸Ifš%ÎèX#gÔ¨n?(}ËýÏÖËýÏÖ›øÑ‘ëE€våþçëFåþçëMãÖŒZ,·/÷?Z2¿Üýi¹Æh¢À;rÿsõ£rÿsõ¨#¸I&š%Îèˆ ŸqŸëE½Â\À“G®23Ö€'Ü¿ÜýhÜ¿Üýi¼g¢‹íËýÏÖŒ¯÷?ZmzÑ`¹¹úÑ•þçëMãÖª6£¼ÊRM±dÛÁ n wéøPܯ÷?Z7/÷?ZŽ7Y#G^Œ¡†}éÔíËýÏÖËýÏÖ›EÛ—ûŸ­—ûŸ­7#Ö ¹»†Ò$‘¾äm!QԨ늳•þçëFåþçëMœÑE€våþçëFåþçëQ»ª)f<NhY÷m`vœ†€$Ü¿ÜýhÜ¿Üýi´Q`¹¹úѹ¹úÓh¢À;rÿsõ£rÿsõ¦ÑE€våþçëFWûŸ­6Š,·/÷?Z7/÷?ZmXn_î~´n_î~´Ú(°Ü¿ÜýhÜ¿Üýi´Q`•þçëFåþçëM¢‹íËýÏÖËýÏÖ›EÛ—ûŸ­7½S ¿õCýê¥WnÿÕ­R­éìe=ŸúÔÿxS)ñ®O÷…SØ•¹¥HFTQJ98©6zålÞÇ màë‹{-9as ÔvòÇ<ž{°VeÀ* ÀçÐ +H<-xcUk[{h öìöÑJYHLïlàrÀãÕÝlôlõ6E]œE¿„î­”ýŸË·‘ṄȬrÏîÇÐ~•›ÿõþŸeo Ök9–ú2`óG–À#ITsß ö¯IØ=èØ=éYÙç—žÕå³²‚!jäa†bb傆*NÀ"c<ž0,®âYøÜ£` åq€HèMzÁïFÁïE]œ—„´Ýk–»U\¬ŠCOÌ@Psîr}ë¨a¹Hõ©vz6z¥d¬'va%ÛGo‘¢­´LÃçÌ%vŽ;TH¹¶‡§šGÙÜo”’ +0,¹9ã‚GÔ×I°{Ñ°{Ñ jeÞC=í”{ PÂ@ï8!À= ýj -+ʺŠyaˆl\ån`@ð?mìôlôhœÔ¶{{oo*ùHE ð²°ÚAü‰ÿT‰§\EqÌ6±D±Ê[#€>ã©9Æ2wʺ-GJ6z4 L-?K’;µ¸ºŠ2ʇní¬dfãð#šYt¦{Ùî„qù­sˆÿÄB†út5¹°{Ñ°{Ñ js'E¸xZ/*%o)’IspK¸þGó«?رÅrf·‚(Ûí "²Œ\Àzgž;ÖîÁïFÁïF©Ç&k+&C,,¶ç]²Ÿ0sƒϩÉæ¬\i²Ú¼1Ãq¹vHÁ_ÝŒrTàpOËÏ5ÔycÞƒÞ–©ÇùQͪJ§h,ñÅ Ú]fÜŸâÆsŽÝ+OJ´›Naÿz@r]v®Õ<€ª:œyü«sÊ\çúÒìôh údÒjSL°E™%‰ÒãwÍ\d~8#^jì{Ÿ,!Ž7s¢J[˜I˜éé].ÁïFÁïO@ÔämeŠ=ZK„¶Ü–•" +Ww,>þ>aÓ©éZú•”—3Ç ‚;„²ynØ +ÇoÓëZÞRƒœsK°{Ñ :nœmešYöÉ3mSÔ€ŠÓ$ʃMšêÝÚ(#ˆ“p¦PÜÉ’À߯?‡ÕìôycÞSŸºÑرX-¡*Јãbqä>N\{òñK6ŽåÙ⎠Í4ŽÌ‰”gñ5¿°{Ñ°{Ñ js¶ÚDñê‰q)f +U••”mÂÚ~]ØÎ{ãššëNš[ù$X£bï$å¾hBã }p>ks`÷£`÷£@ÔÄ°ÒšÒkyBF®¢f^­¹²¹õª·Uì÷³Ë¶1½%p*7+) ÐgÓ95Òìôlôhœôš;¤ÄÃMoû¦h8B†Ïýô§ž»jtIŒ!iÞh”’?s¸’ tâº}ƒÞƒÞ–©ÎÝè²âÕR8IŒi´oÆìç Žã¨ç>Ÿ¥ {¥šHó¶TÞÁŠÌO@ûݾ•·°{Ñ°{ÓÐ59ë½.y.nÚ‘DÑ°.äIÆ0q8èx¨çÑ¥&A(ªnZVÙ³2‚3¹HàžõÒìôlôh”lb’Þ„+3îcëžJµRlôlôî‚ÄtT›½½B±&ÁïFÁïEÐXŽŠ“`÷£`÷¢è,GEI°{Ñ°{Ñt#¢¤Ø=èØ=èº ÑRlôlô]ˆè©6z6z.‚ÄtT›½½Ab:*MƒÞšËŠ.*Ýÿ©ïU*½wþ¤½Tkz{OqiÑ­O÷…6ŸúÔÿxU=‰F’ýáST .G +Oá\¬èCè¦fOîÊŒÉýÃùR°î>Šfdþáü¨ÌŸÜ?• ¢™™?¸*3'÷åE‚ãè¦fOîÊŒÉýÃùQ`¸ú)™“û‡ò£2pþTX.>Šfdþáü¨ÌŸÜ?• ¢™™?¸*3'÷åE‚ãè¦fOîÊŒÉýÃùQ`¸ú)™“û‡ò£2pþTX.>Šfdþáü¨ÌŸÜ?• ¢™™?¸*3'÷åE‚ãè¦fOîÊŒÉýÃùQ`¸ú)™“û‡ò£2pþTX.>Šfdþáü¨ÌŸÜ?• ¢™™?¸*3'÷åE‚ãè¦fOîÊŒÉýÃùQ`¸ú)™“û‡ò£2pþTX.>Šfdþáü¨ÌŸÜ?• ¢™™?¸*3'÷åE‚ãè¦fOîÊŒÉýÃùQ`¸ú)™“û‡ò£2pþTX.>Šfdþáü¨ÌŸÜ?• ¢™™?¸*3'÷åE‚ãè¦fOîÊŒÉýÃùQ`¸ú)™“û‡ò£2pþTX.>Šfdþáü¨ÌŸÜ?• ¢™™?¸*3'÷åE‚ãè¦fOîÊŒÉýÃùQ`¸ú)™“û‡ò£2pþTX.>™'ÝühÌŸÜ?•1‰'ši ²½ßú‘þõR«·êGûÕJº)ìc=ŸúÔÿxSiÑ­O÷…SØ•¹£K“ëEÌn>¦ŒŸS\L:Ö®5÷YneFúKeÝ{8 +07î÷ð>¦¨F†O©£'ÔÖ zô¡#ì¯q(¹…#¤ò@÷«'W‘ZDkeYC„Ž6†l¶?.ï‘šWAfjäúš2}MdÝjw0­Úý™[ÚùîÂ\àØåçî÷õ¨­õ9¡iÚx÷Aö—_ÌË2Ütã×ð¢è ¼ŸSFO©¬Ý;S–þ7o±¼x@ñ– 禌ŸSYI¬†IɃ /# ýÕŠ‘œ{u ê·'’;-é„ϘrNΓ€×Ú‹ 5r}M>¦±ÿ· \GV­0*…Þ-Ìw¡ ‚¹—-ÕÍÅ©‘‹F¶ÁÉóH%‰#%qƒÓ¹â‹¹“êhÉõ5>¼!’p-üÅŽ)$FV`¦22WûRRa/ÙÚÕËHWÎùNT¶Kmã…§ó¢Š2}OçFO©ü袀 ŸSùÑ“ê:( 'ÔþtdúŸÎŠ(Éõ?>¦Š(Éõ?>§ó¢Š2}OçFO©ü袀 ŸSùÑ“êh¢€ ŸSùÑ“ê:( 'ÔÑ“ê:( 'ÔþtdúŸÎŠ(Éõ?>§ó¢Š2}M%-^ïýHúÕ*½wþ¤½T«j{Op§Åþµ?ÞÚt_ëSýáTö%nhÒàúï +š¹›±ºFJhZlwÍz– –%Œ»yÉêiÃú\‚Ü>Ÿ qˆ²¿tg8­z*n;í>†«ÜXAvÊÓÄX¨ ‘Áê8úUê)Ü,P}:Ùü¼À”0›~\N;{R6Ù¼ÍÐnó>ñbO|÷éÏ¥hQEÂÅan#xüVHü·'róÁüÏçHºmªÜyën¢BKgÏã×êý\,R†Ê;TqmŒ°àr@ôã°ö¾•v Ȳ4’\˜œäzc§áZ”Qp±&“g**=ª•U*=P}ÙBbhü¢Ûs$dþJ»E ›l7[p­ +¥r8¿ãREkò¢ … +0;ß©«tQp±ý•g¹Ûì«— ŽÍÔ{f¤– ·y‚X‚O ätæ®ÑEÂÆeÆšMkeHbpU†ÜáNs~jFÓmœÆZÝO–¡Wè:ëøÕú(¸XÎ:U£JÒe,Ù$óÜ`ñïÞ§{tx„M(!Hô Ô +µE Œv˜®Y±ŽíßžOçLm°hØC†Œ§'8õükBŠ.(¾Ÿnð$-òÓ”#oÐŽE'ö}¹}íã·oÌIc*ý\,g2Ø>I;3àMXH„Q¬h›U@ +aV(¢áb§ÐÑ´úšŠ9‚Ä;O¡£iô55sˆvŸCFÓèjj(æ í>†§ÐÔÔQÌ!Ú} O¡©¨£˜,C´ú6ŸCSQG0X‡iô4m>†¦¢Ž`±ÓèhÚ} MEÁb§ÐÑ´úšŠ9‚Ä;O¡£iô55sˆvŸCFÓèjj(æ í>†§ÐÔÔQÌ!Ú} O¡©¨£˜,C´ú6ŸCSQG0X‡iô4m>†¦¢Ž`±ÓèhÚ} MEÁb§ÐÒTôÉ:f„ÂÅK¿õCëTªí×ú¡õªUÑ Œg¸´ø¿Ö§û™Oýj}ESØ•¹¢¿xTÕ +ýáSW,Ž„QEHŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ™'ÝüiôÉ>ïãMn ©uþ¨}j\ºÿT>µNºa±„·úÔÿxSiÑÿ­O¨ª{·4Wï +š¢_¼*Zå‘ЂŠ(©QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES$û¿>™'Ýüi­Á•n¿Õ­S«—_ê‡Ö©×L60žâÓ£ÿZŸï +m:?õ©õObQ¢¿xTÕ +ýáSW+:QE# +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +(¢€ +dŸwñ§Ó$éŠkpeK¯õCëU*Ý×ú¡õª•Ñ Œ'¸SãÿZŸQM§Gþµ?ÞObVåúx Gõ¦Ñ\æ㶿¨ÿ¾…_ÔßB›E µýGýô(ÃúûèSh aýGýô(Úþ£þúÚ(ØQÿ} +0þ£þúÚ(Û_ÔßBŒ?¨ÿ¾…6Š`;ê?ï¡FÔßB›E ‡õ÷Уê?ï¡M¢€µýGýô(ÃúûèSh aýGýô(ÃúûèSh¦°þ£þúaýGýô)´P°þ£þúaýGýô)´RØQÿ} +0þ£þúÚ(ØQÿ} +6¿¨ÿ¾…6ŠvÔßBŒ?¨ÿ¾…6Š`;ê?ï¡FÔßB›E ‡õ÷Уê?ï¡M¢˜Úþ£þúaýGýô)´RØQÿ} +0þ£þúÚ)€ì?¨ÿ¾…Qÿ} +m€vÔßBŒ?¨ÿ¾…6Š`;ê?ï¡FÔßB›E;ê?ï¡F×õ÷ЦÑ@ÃúûèQ‡õ÷ЦÑ@ÃúûèQ‡õ÷ЦÑHaýGýô(Úþ£þúÚ)€ì?¨ÿ¾…Qÿ} +m€v×õ÷Уê?ï¡M¢˜ÃúûèQ‡õ÷ЦÑHaýGýô(ÃúûèSh¦°þ£þúÓœóE×ú¡õªurëýPÿzªVÐØÊ{…:?õ©õÚtëSýáTö%nhQKEs›œÖ£¨k6šÚۥŗٚ'¸ ;‚¡\—'=xëoØÝÛ ·¸’_8@°!Fgb»¸!Šô¿jÕ½Ò,õ ÜÆ\˜^óò62?AYW~ƒì-=Œs™VA4ÒÈÄÈ!ƒgjuè=CâÛY®l [[•’ì¡Ê.Ü1Sœ·' 𹮂°l¼)k µŠ]K4òZà XF_qlíÎ'¿ ­újýDíÐ͸’õuH!Žx–U›"HÛŽû»çÒ£þÞ¶ß:mbÑmû®‡v[hä9õÅi4óÇ1|`…9õÆ•e\hH¶Û-7g +˜’S,íœsìhÔ Ö£žHcû4¨Ò±{ dÜþ¢öú[mIC ²E½¶;ØœÏ=};šu¾–í k{#9ŽMèò£*8>Õn{(nwù¨NäØyíœþy£P*ÿk¯š°ý–´Ùå|¹.ìç8Æ=êkB+i$GWܪ¬ óîm |ãó±i°C*Ê7´ŠÅ·»I#þÍ“Üêv³º Šß,㹉Æ1Œ^ Q¨>· +Dò¼3‚»#àbMqϱ늖}R8fòD2É&õ@KGSþÉ£ûЇ ®ÈêË°¹Ú¡¾ölÓ¢Ò­â“Ì̯&ðûÉ9¨ý £PЮÚå¼qÜ<±¼kmmÌ “£ŒñÏsU&×$•ZK0HòŸ)ùÕœàýãÞ´äÒ­æ’I%óœ`çåä=9ò¥:l 0É#h÷;’pH'ù +5…k«Éí¢†cç$•š@  zqœ°öëQ'ˆ-Ã$3Í´ÚW—Û»Îb´.¬RêX݉Ðãø•†ýü)#ÓaŠ]ñ™7 sµ¸ÆHõÀj"ŒzéÚ²Og$Q}›íå”í>v ö¬0K$Œå¡SÈ]ÝAÆ1ïS"Ûb¡óDf,3“”=ÓµKŒq´l^Y2J´ŽXŒŒ*5 Ú_¥ä³"FËåÄg®:g#ñ£¹ÕÚæHL0Qä‘qµCSžÝ©çMOµ 4ÂMÀ±ÝÕG;~™ÇåRKcÍ3:’fUGç¨RHþf@‚MVãRB ’GÀP1=ÿÙ5 +ëjOÏerŠfÛ€áOÞõ©ÛGµyŒæŸ™Ø/˜v‚À† {äÔ¯§Ûº2²œ2¢ž{!ÊѨhP·ÖDvåï#‘T4Ø—kfマƒÓµ:-~ Ê,PË$'– +žv–ÎAÇ@{Õ…Ñíl«ºÿ#9*7gqß'ó©#ÓâC–CnC#–ÁÁÈѨh%¥ú^K4k§”ÅNâ¹àã¦r?SùðùþGšžp]Û7|ØõÅVm1 ȸL$Ü ;ú¨9ÛôÍY¸…§Œ ‘ãù•‰S‚@9ÇãÒ˜UýR 9MÎî¸esŽ„äþ©çµ30a4±œ®v1€ÙÆ=újŠëK·¼‘ž_3,¡X+‘ŸÆ€ þÚ…K!š8  ™-ß=Ó¬ïf¹Ôç‰â’(ÒÝQÀÎX¾NA=€üªvÓ-]2UYÛ÷pCèF‹}>;W’HšC+ MÒ±~qørijÝ\=¼¶ØÇ$¾[úŒƒ‚?çKuv-ŒJ"yd•ˆDLdàdõ TXÝ\ûEÔGa,žT%pØ –9ÆsøTÒØG,0£4»¡û’;ÇÎ}èªÆ²•0Ê#å8ÚÇ\ûgÍAý¼ž_˜ÖWK’',vàF{ýïÓ­[:]¹›Ì"C–ÜT¹Û»ÝZsi¶Ín`(|³€ÇîzQ¨hVmcùIes&eh•—n (Éê}äÐÚ岋f!¶ÜmÇ̹]Ç#9ë隸¶P£† +r$iG?ÄAùÕa¢Y  ™Q!ÁÚr¹õÁ£PЙïíÖÍ®’E–58Ìd’p÷Éöºù‹ÙgóË”1|¹nìç8Æ=êìð%Ì «”aÎ*´è!‘dÚEbÛ݉$‘ŽF $×é ôv¦7,ë¸6T¾ç“ôÍA³¨®ÐKcùš’-&Òd‰Q¶I–Ùbr2OþÌhÔ4)®¼’ÉAnò3Oä°‡oÊÍœƒá4±xŠÎbâ0í•ÚTïù‚ŽürG\U•Ò-”î 1}êûÌ„œ¨ ~„ŠpÒ­ÄO2ùMÑ7œ'9ù}9£Qè7Oº–êkÁ*4~T¡ ¨Ú§·^µzªÛéñ[H]bÌåØ´„î8Ÿ^«tÄ%´PQKE%´PQKE%´” ×ú¡õªurëýPúÕ:ÚKp§Åþµ?ÞÊ|ëSê)½‰[š dŠ–¢R×3:QE†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÇfŸLsÚ…¸2­×ú¡õªurëýPúÕ:è†ÆÜZtëSýáM§Çþµ>¢©’‹ô >ð”ɦŠÞši8ÐeÎs\æä»G÷ÅG÷ÅfÅ®é’"Õ,¤ÆÛ:ž§¿­hP¶ïŠ6ïŠmí£ûâ£ûâ›E;hþø£hþø¦Ñ@Ú?¾(Ú?¾)´P¶ïŠ6ïŠmí£ûâ£ûâ›E;hþø£hþø¦Ñ@Ú?¾(Ú?¾)´P¶ïŠ6ïŠmí£ûâ£ûâ›E;hþø£hþø¦Ñ@Ú?¾(Ú?¾)´P¶ïŠ6ïŠmí£ûâ£ûâ›E;hþø£hþø¨Vx^w…eF–0  a¹Aé‘Û5%;hþø£hþø¦Ñ@Ú?¾(Ú?¾)´P¶ïŠ6ïŠmí£ûâ£ûâ›E;hþø£hþø¦Ñ@Ú?¾(Ú?¾)´P¶ïŠ6ïŠmí£ûâ£ûâ›E;hþø£hþø¦Ñ@Ú?¾(Ú?¾)´P¶ïŠ6ïŠmí£ûâ£ûâ›E;hþø£hþø¦Ñ@Ú?¾)´Q@]ªZ©W.¿Õ­S­¡±”÷úÔÿxSiÑÿ­O¨ª{·4)C)VƒÔKNØkœÜäSK¼‡G™!¶hçmKÌ0 ÌòÅSm/[–MÏs©¯˜n÷…¹` ˜±Ïþ\t®ëaõ£aõ©²ÙÁˆO(;Éá»þ5·ñ1Ö4ç•îÖ;Šd¨ |áÆð2Nz©®÷aõ£aõ¢È.ÆÑNØ}hØ}j®M†ÑNØ}hØ}h¸Xmí‡Ö‡Ö‹…†ÑNØ}hØ}h¸Xmí‡Ö‡Ö‹…†ÑNØ}hØ}h¸Xmí‡Ö‡Ö‹…†ÑNØ}hØ}h¸Xmí‡Ö‡Ö‹…†ÑNØ}i¤`ÐEPE¡I k}Õ‡Šµ ÿ³nî!¹ŽI! +Tݜ凭aÚ[xœÛßù‹} J#ò×Îf(ÂQ»igoáϦGjô-‡Ö‡Ö¦Èzœ¦/´˜™.n¯ÿ³–ñ¾µí•”Æ6€ìÀãvxÍG×äÒ£hþ´éñäY¾ã‡bÄ’ÙÉ\r:×}-´s¨YcI€ê ´l>´\,6ŠvÃëFÃëEÂÃh§l>´l>´\,6ŠvÃëFÃëEÂÃh§l>´l>´\,6ŠvÃëFÃëEÂÃh§l>´l>´\,6ŠvÃëFÃëEÂÃh§l>´„EÂÅ{¯õCëU*å×ú¡õªu´62žáOýj}E6úÕÿxS{·4ï +eéqapb$H"m¸ëœqN§ï•ÎÑЙ•æ‹Éì"»G-³»ùr'î`åN}Z§mŸ³iÑ=ÕÂ%Ñ1Úv,Ä~\òxÇJÜŠxÚ#œåÊ ¾:ÐðÛÉ’ðFÑq”üªlÇtU¾kë[†—]Iæ*‘4„ü¤àœ÷ÅhŒãžµb8£Xã@ˆ£T`¼S°\uÝââ‹ÇQMÞ(Þ(°\uÝââ‹ÇQMÞ(Þ(°\uÝââ‹ÇQMÞ(Þ(°\uÝââ‹ÇQMÞ(Þ(°\uÝââ‹ÇQMÞ(Þ(°\u1ûRïÒri¤&Ä¢Š)ˆ*Eû¢£§ÀÅ&Ëo6]~UÛ3ÇFFÛ†E\îÎT7Nõ\kW‰mÒÇ ó­ÞdTäÚTóó}ìñŽ˜­i-m%g’Ö™~ì,>†£¼²†î×ÈÚ àdcÐàdw©³*èǺ¾¾Œ¬ó¬¶÷%#G¸‚I­K¨^Þ~òÙ‚xÌ)´üËæ¨ÎàpAÈÈÀ#5~ËM¶³ŠDòã}ìXU°ùEY[kTwu¶‰YÛs€9ÎO©ÍatU[«ç³½Ç ·vìUʬ‡h#¹Ç\u«vOq%”/wÇpÈ ˆ‡!O¥H6)bªc“ÔÒïìÂèuÝââ‹ÇQMÞ(Þ(°\uÝââ‹ÇQMÞ(Þ(°\uÝââ‹ÇQMÞ(Þ(°\uÝââ‹ÇQMÞ(Þ(°\uÝââ‹ÇQMÞ(Þ(°\uÝââ‹ÇS_¥Å4¶i¤&È.Õ­S«—?ê‡ÖªVÐØÆ{…:?õ«õ”èÿÖ/ÔU1"õ(ÛŽAüé*;‰ãµ¶–âfÛH]Ž:2kbo—Ðþt|¾‡ó¬½;[ƒPf0Íj®TGö«æné·çéÖ‰µí:Þò;ync_1Y„¦E +¥IÏ\ž”´ MO—Ðþt|¾‡óªŸÚ_h6ÿl·óÂî1ù£pÎqœãÅÕ´çEtÔ-YXáJ̤09õ#ó{åô?/¡üë2oO’Õ'–æ+erB¬ò¢“†+뎢£—Ä:j=Ìi:Í-»*É2îˆÈã‘üºÑ jkü¾‡ó£åô?Uû}ŸŸ$kƒÎw<~`Ü£ÔŒð)`¼µºg[{˜fdûâ9úã¥0,ü¾‡ó£åô?aZø¢ÊæñmÌ70i9fUå3»Ó®*ãk_è¦)–á.fòQá`êòAö¥ jhü¾‡ó£åô?fÅ­X½¬w\Gl²3" äE$ƒƒŽpjÔwvÓÄW9‘K¦×rŽ¤zŠ±òúΗÐþtÚÎÄ2]Û[Ç·|þgáHÛN~z{L ?—Ðþt|¾‡óªíwl’´OqÈ«¸¡q=qU"Öì%™naòäŒH’ “Œ}i§òúΗÐþu\Ý[‰Œ&x„¡w.7ëJh¿³,ª.à,çj ËAL _/¡üèù}çU件†EŽ[ˆ‘Ûî«8þ¢êÜÌЉâ2 Ë&ñ¸R(—Ðþt|¾‡óª¿o³ò|ïµÁånÛ¿ÌséŸZKKØî­ Ÿ!<ñò)a“ì=zP¿—Ðþt|¾‡óªßlµˆnaÞä…]ã,AÁǯ4óq™£çpí×òÅMòúΗÐþu_íVæ0ž/(Þ6çÓ4Ó}h!YÔ&8WóÒ}Zù}çGËè:¬÷¶±³+ܬ¼ÒGOñ55)8Šî ÒÀ$ŠI©ë@þ_CùÑòúΪ‹ëRÛ~Ñ}›Ê Œç”-õ¬˜)§­OL|¾‡ó£åô?6Š,¾_CùÑòúΛEß/¡üèù}çM¢‹ï—Ðþt|¾‡ó¦ÑE€wËè:>_CùÓh¢À;åô?/¡üé´Q`òúΛE Ïú¡õª•nçýXúÕZÖKp§Gþ±~¢›NýbýESܽQÜ#Ém$q•Ê@.»€$wêJ+c‘‡Âw°ÄïöpÊ.b¸Š‘„S9àœŒçœz +dž¾1ÆæÍÛmÂÈÒÂHýëîÊŒðFk®Šhæ b‘\+m§8#¨§äd Œž‚¦Èwg"þ¸k›äpÛKjmÎÐÌÒ¡C6N;vúUë] +ãíz|÷‚ËýdPFBÁpp{ðk ¢®Î_ ju½”fxþË:I<±Uß)o—ý¬Ò¯Iá9Ã^Ç öþEÁƒ20ög$qƒ´þ&º²@ xˆë"îF ¾¢•îÎU¼'p×rŸ´@!/<¨Â3æ–µ›<¨Ü!Z:N…ý™z³!ˆ ²ŠÙ–5ÆYIË~9­yfŽ¦FÚ‚:“ÐRA4w0G<-º92œc Ó²Ùͯƒ-N›w…~ÙpdÅÀÉ؉àÇi#ðÕòL.üû4ºûTs㈬@*lÀÎH5ÔÓ%š8B™Ø"ñÔž”Yìæm¼5yeqi`ó8Qì?ÌT´ÀÊm.W¸`^? Îg݃¿$cON*4Ò&6î’¼[—Ù€O¯?ËŠÙÈÎ23×R°\ÃþÂo´LÌÁÕË:³JùF+·îçoãéVM•Óìæ8ŒH¨Ò •÷#¯^™­'uŽ6‘ÎA$úJŽ²"ºœ«AõX.g^i†å¯X2qĤ»‚ÇúÕFðÿ˜n‘ß+(—d¾kîBàƒòço~µ»E ˜°é@É—fe1ÄÑÛ""…#'r¿Î?à8ǹ®–Š,0›G½spÆhWí´lÊQTŒ§Ž3š‡7ÙZÜL¥I‰÷e;(ÇàíêEnÑE\ÇM&X¼ƒŽRLŽ&w$ÜGÍ÷³Ï^„œV¬^g”¾qC'}€â•äH”3°PHPO©8v÷,ë ÊìŸxÒ€&¢‘˜"b¨É'°¤ÆÌ:–+¸{zÓÔQL–Xà…å•ÂFŠY™Ž½>Š¯õ¬þG•qùê^-­àu#ó«QEQEQEQE Ïú±õªµjçýXúÕZÖKqiÑÿ¬_¨¦Ó£ÿX¿Zl”^¨®T¶‘¡Mò…;8ÉíRŽN)ÌÎFIö¬.oc›];PÓФlnUž)IŒ9G]ÀäòY‘¥ûì׉tðJ¯ºq\›¶ì$g§Žz×F›$]U€ úƒJ*Fy´§6¶WŽ;ˆ¢ýЕZl–`ß1=1ùÔŸ`»´>mªJîl,“ +àìž™Åt;½½§+Ÿyö˜äž ÞîªnÁ¡ãqïŽõfÚÞò9£kˆg—ùx—„mìrÜôÁ_Zèvz6z4 N^ÚÓQi÷KŠ†Hd*Ä`0c»1íŠ[+{»y,,º«Ä’Ê7ýÂœô'oäk£â¶·’yXˆãRÌzð)±E ÂÃ弃.JÇëF©‘}mtúƒµºÊÛã+¹› +Ÿ)®®;~5Vh/®É2Z\Ô[|†@ *Ì_>˜úÖõ­Õ½æ|–c…Väc†g`÷£@Ôæ­èH]aŠÊÆ8]øUÈÆâƒ×ÖŸö;©‘ã¹ÒJ%´{óÇ< ¸ãº-ƒÞƒÞSš¸°ŸíÊío<Öé#à$¸;J(Çpi±Ùj†êÜÜK6#ÃGƒ´¼Ì:ý tû½½¦ ýœís4H^KuTu|A9x$*[kYšÒö ³A£«¾Y>\œœsï[;½½§,¶š´Äùâ@³£I"ùƒä` +ªuï•>Ÿ)õ©?³îí¤i3[ùp™cüÌAmÀx?wëŠévz6z4 NZ{JHá®ÞmT`Ï[åÏÌ3õÅM=ž¨ÂæÝÂƬоþd,A#¯P7õÑìôlôhœížŸrf¶óZäÀ ŒÊí·oÜÚ0ädÖ­]ÃpuXf…$‘ppŠ2rG=yô9À­ƒÞƒÞS•–ÛR¸´Ž¶Ÿ÷vÛ2½÷¡ãŸ@ÜÔ’ZÝìgŠ¢Raß#WïÙƒŽOSÅtÛ½½§;%­Û¥Ê˜®ÃÊ•eù|¿1N<¹íØúÓn´ùþاȚ[hîYyÛä•8Éþñ®“`÷£`÷£@Ô厦Ïoæ= @a Ñäüß0þ£<ô?ŽŽŸ ñ_\‡ILM’$”òNzu#ø±°{Ñ°{Ñ jrñX\AoFÖäÆ‚@U%Á.HÚÿ{¦3ôô­ í.'MŽbí±¿ÒJ9\þí‡8ê7b¶6z6z4 N`éÚŒVq­»L$kr&-)b[rñÉëÊ™­§O\#yÌÅ·„rJŒØýë¡Ø=èØ=èÐ59¿²]}ºi ŠTy.|Å›Ìù<½€r3ê=*(,/…”‚g»ó0›†aœŸ¿È?QÚºƒÞƒÞSMµ–+çš{vG’ù¹T‚½zÿœÕq§Ë§ú<ïMpÒG¸$³’Ôqç]ÁïFÁïF©¦Z]G3KzîÒãU%ò¹Ú7qõöªïc|¿½„È.y²Í! !WÛÆqŒì®‡`÷£`÷£@Ôæ…•Ü›#¹ŠÑyŠód’ ÞAÏLcëSOczÚ5í²1 ¬ÉMó;~bxê:ÖþÁïFÁïF©ƒ-¥ÕµÞët™íÒHܨ“%¸`ÝOºšƒì·K+L·LSyj&Á _+ÐõÇå].ÁïFÁïF©ÎÍiy’b•à‘’\±)ÜFXw ß½C †¢lËÍç}©!„Gûßâîë]FÁïFÁïF©ÌÜ[Ü,wéåJé(Â<‡æ.X` 㞸ÅkÚÀDóÜJÍvØ3ŽgÇԟƯìôlôh‘c#±Í…ÄV’¬[÷½yòáG#Æ·vz6z.‚ÌÄŠÞæ9-˜ å#†óÇѺ€}óVu˜%ºÑ/ …wË$¨¹êH8­-ƒÞƒÞ‹ ³8Xt-^Îùc´P–âÒf‚BÃ÷:Œ®=7 þ5«á»]BÞiÍÌw[˜Ðî&óÈ3½ÉÀ<…t»½½-R:*MƒÞƒÞªâ±&ÁïFÁïEÂÄtT›½½ ÑRlôÖ\Qp±^çýXúÕZµsþ¬}j­k Œ¥¸S£ÿX¿QINýbýES%—ï +.Q¤µ™e™ßS·šçhèLÀžÖúòÆÎ)-."HYb >\2Jð}qW4Í8ÙßJí1xcáÊ—8!ˆç”o>”r…̦°¹—FŠ÷Ï:K2ïè ˜gØdTFšºÑD2‰0á¾ìe=·m8­ÍçÒçÒ‹Ì#Lh-®#¸ æ¨GY6“ƒ–]ž¹êyóÏášÄÜÐÝì¿•½—ò¬ëíkNÓgŽˤŠI@ œ ã'îqMmwM[‰àûAi-Ô´¡#f +'1žzu¥ õ4÷{/åFïöWò¬);a-ìÉoºY#U¾vÀàzö´h›{½—ò£w²þU”þ ÒRímZõ<æeP ËWœcœðjýÄ ´²ªdBÁÆì”h“nö_ÊÞËùV3kÑ 'Tˆ¸Ž•oõŒqò™?殺×X‚V–9˜G"I"rÜ!9ù±Œàghš›½—ò£w²þUŸý¯c´1™†[`S'.3ȵ*_ÛIqä,™“>R#¨$w¥ RÞïöWò£w²þUMõHÓ{Ϊ»™rAê¹Ýùbˆµ Y™$;Êd*Û¶îÁdp3ÍRæïeü¨Ýì¿•WPµ·Ú‹Eت’On€f¡MRÍÚ5Y²ÒÀllà ?õ‹õÚtëê)²VåÚ¡¬éŸÚúkZyæ]H1X0àý+BŠÀÜæ®|-qx]®5‰Yæ‹Èœ¬(¾dyÎÜv=y÷©$ðÃùWöÐjsCixK•UŽ9 ×tô®†Š,‡s˜µðzÙ[Cµü‰,WjY<¥<”F=8§Éá1³6ú„°J|åg«nI[s.ó®’Š,‚ìÁ·H¦Š9ÝQäÀ ¾V0=ó¶·ih F<^‚(mc¹÷`HûòŸa…ÿ¾EI>‹ Ä>L’1C,²0¯˜øoý+RŠ,2­tXíÞB´2oýÌ=ß#/8ê~bsNµÑá´¾{„XægÂ<ÀXäüýqÉ­:( ˜£Kû]íô’,‘C Û8Èn78úí_ÈúÔÇJ•¥[“t>Ô² 7ù/Ý+¹ô'¿_ʵ(¢Ás4é_ñ*ŠÈNO–AÞëüç ;ƒéL²Ñ!´‰¢ó £Fñ/ ìÇé÷±øV­Ì«-)´óÛ›e\#$ +ŒèÀ$u9#ž;Ô“éK<ï)”‚òÆ=§õÍhÑ@\Äÿ„rµ†t) %ˆ:· {¾Ç½k[¶öñªŠ¨ ŠÚ¥¢€3ÆŸ,rÍäÜí‚f.ñ4yÁ=vœñž½ê¥Ö˜ðYJ3ÊÏ +FŠdHƒå|ç€0+nŠå++Y­TDdS +Dª Kó¹×#õªÏ£¼Ï$²Ü©œìÚÉÐ6°a¸gæ9µ­Eb¿‡’iÞI§Ý¸H €ä8 ‚ÝHàv÷©?±¯RîSo,¸A!’ÜíèW'å?kQE‚æmƘg½ša E‘#9UщSŽãž~”ë}3ʼ[·˜¼ß9|.-´p;`(­ +(>ïJŽîyf/¶F.JbÁ‡âJ¥>ˆ°Gw-¼PJò+ ænn¸NO†kvŠ,0-t¹.¢hîT¤J[ °«Éº2‡9f<9Ïj¸ºSÒyî ’£&M£jîÀǯÌrkNŠ,2K¸IUíæE(Òº³CHù<{ Õ»«7–â;˜'ògJd¦åe8È#AÞ®Q@¥3ÌÌ×Ç$‰,©³ï:mÁ°ùGÕö #cÝ“ÂðÆ¢00¬ÊÜœòFÜv­š(°\ΗLÝxn’m²ùË(Êä !B:÷Õ[Í1¿³ílaó„Ÿë@ÀU'çÏÕY€÷­º( ‘¼lcU‰ü¼ÈPx‘øŽ)ô´S(¥¢€ŠZ((¥¢€ŠZ((¥¢ E-ÀJ)h ¢–ŠJ)h ¢–ŠJ)h nÕþ5R­Üÿ«üj­i Œ§¸S£ÿX¿QM§Gþ±~¢©‰ª¦¢“IdÉ¢9 \Ûr223Û##>õn‰mâž3Ѭˆz«¨ þ°fÈæ…ìèþu¡À‚ÖRépæL•~@9ç¿95bã]–;…¢4'rò¸Ã„/ŒîÉÿ¾Ü°*X(]€Ûéô¦ýŠÛÌ2yï#¶ ‘õ¤3]WR_³¤vÑK4°È\Ž>\³_½ÏÒ®_]ÝÇ4Q[Uš•Œ ¶6ãŽõëZYÛÌŠ²ÃŠ‡*ûSÌ(NJ‚@ÆHíEÀÃW¹ŒîºXDj°É# #bɸw<à“èO;_ÜýŠÍöÇ×O´Ú€‚FFy8ŒŽjåæÜ !#p@|ê?‡éþ5bKx¦ŒÇ*+Æz«Aü(¸XÉmVHä’7ò‹%Ô08Ü!$ ÿ´qô¦A¨_Î,ð-—í%ˆùXì øòOáZßaµóO"-è«lt¤F»pŠ6ýÜŸJ.9ßí½@Á=ÂÙ …Cl,À`† ƒ†$çžÃõ1½¿þÓ†ÐËn»f)#ŽlÜ07pz÷?Ò¶>Åmæ<žD[߇mƒ-õ=éÏkŸ~$nC|Ê#¡úÐ=Õܶú¼‰PeX£S&J¡%ù#ðþT°jw7 n¾Dl»ËÈÀ•p­·åÌãÞ¶ÚC #G0Á”CMk+gHÑ –2 +)@B‘Ó”\vmrîGd¢E‘VHehÿ€È«ÈÝ“Áêvý*×ö…×Ûå´W…_Í*$ ш=÷ÿk‹P x€“;ÀAóg®}hkgËh"dÈ;J2:qø +ÄY»™ ë+ +K)³o889ãzÔúž«=Ï“I#2@s’âÿ ÷5®mâ9Ê)Î3Àç)L³e€ 9õ¢àsM©Ý¼³ßÁåy)hó*°'z+¶1Ïœûô©Î±znn|»@má.¥‰PA ¸½““½s[‚Ö›i·nÌmÛéôö¤6ví/šÐÆdÛ·yAœzgÒ€(i÷—\<7"-Âæ0F7nã“Î6õãéYé®Ü‹hæu·6•Bdyd2¯ÌsÓæÏl`×D!EmÁ@8 vW³Ó-¬­ÄQƧå +ï´eþ¾´\,fI©^Ƴ BÂÞM³LˆYBí »³ßœCÚ%ÔnüâÏ,o¼1¢ª!|¦ažyíÚ¶ŽfcHͬ;åËSê8©>ɘdòcóVÚ2{uüMu‹Õ´Y%H I 3.Äb; Œå±œñŒô«M{}Ž.%H¾ÐÒª°ªá¤ + $psW/tÈo-Ö.iùÄt#Ú–ËL†Ê×ì㠻ˑ´œç€8Ñp±œ5+³?Ù ·Y–GS3)ØBªž™ÎNï^ÄÕtÕo'ŽK‚ѤEmÊÄîÈÏÍž{Vü––ò©Y!Ô¶âAúýiZÒHÑ!p6†*2s΀1$Õ®ÖÏí(‘7›7“`r‡qbXÓ§œfžº…òý˜Ý–ñÈv9Æó¸¶Ð>VùsÇ÷ºàÖ±±¶-#"&Q‰ AóZE°´WÖÚÑŒ!Œ¨öô¢àSÓ#u7æHгíd¹È''ÔöíŠÐ§,Hƒ +Œçb—`¢ác.ú)îÊ¥Ïîåç°²=ñ‘øûUavòΖñìÞ6HàÁÀ8÷÷ãšÝØ(Ø(¸ì'ûE¢É¸±É9ÁöàýErÌ÷v^"Ô¯áyZ{xÒx8òØ6XP@?L×w°Q°PÁøƒQ³µ±Š6L­¥»E ÆY®ËpÀ6xÅwTý‚‚„ eý‚‚Åa”Sö +6 +.E?`£`¢áf2Š~ÁFÁEÂÃ(§ìl\,2Š~ÁFÁEÂÃ(§ìl\,ÆQOØ(Ø(¸Xeý‚‚‹…†QOØ(Ø(¸Xeý‚‚‹…˜Ê)û4®(¸X‚çý_ãUjÝÇú¿ÆªV°ØÊ{‹NýbýE6úÅúŠlH¼¿xT•;µ`Ѻcè¦ïö£µÇQMßíFÿj,E7µý¨°\uÝþÔoö¢ÁqÔSwûQ¿Ú‹ÇQMßíFÿj,E7µý¨°\uÝþÔoö¢ÁqÔSwûQ¿Ú‹ÇQMßíFÿj,E7µý¨°\uÝþÔoö¢ÁqÔSwûQ¿Ú‹ÇQMßíFÿj,E7µý¨°\uÝþÔoö¢ÁqÔSwûQ¿Ú‹ÇQMßíFÿj,E7µý¨°\uÝþÔoö¢ÁqÔSwûQ¿Ú‹ÇQMßíI¿Ú‹ÇÑMßíFÿj,E7µý¨°\uÝþÔ›ý¨°\}ÝþÔoö¢ÁqÔS7ûRïö¢ÁqÔSwûQ¿Ú‹ÇQMßíFÿj,M~”›ý© &„„Ù Çú¿ÆªÕ«õcëUkhìc-Å¥ýbýE%:?õ‹õ¦Ä‹´QEblQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECqþ¬}j­Z¸ÿV>µZµŽÆRÜ)Éþ±~¢’œŸëë@‘rŠ(¬‚Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  QYúÖ³‹o ’Dó<òˆc +®æ ž¬@ÔÖ‚TV~·§MªX}š¶¶]n`óQ†Æ21×9µfÍ vÆ6·Šòd³ºA[iÝCòqŽ¼óéRli¾TrýºßË‘]ѼÁ† ÷áÞ¹™< rëcö»˜mQFVÆå}ÜÀc¶8À«·> †áuU,«x’¸â˜3c£0ô¤3~ÊúÓQ·W1\BIã`Ã"Ÿ(³<;¢¾‰e,2J’É$›Ù×<ÎöcÛÖ´å#SŽâ–Å[õU«WêÇÖ«WDv9¥¸R©Ãèi(ª$¼FEQde—ÎjÏ•šs¢ÕWÎj<棕¨ª¾sQç5¬9ÑjŠ«ç5sQÊ誾sQç5¬9ÑjŠ«ç5sQÊ誾sQç5¬9ÑjŠ«ç5sQÊ誾sQç5¬9ÑjŠ«ç5sQÊ誾sQç5¬9ÑjŠ«ç5sQÊ誾sQç5¬9ÑjŠ«ç5sQÊ誾sQç5¬9ÑjŠ«ç5sQÊ誾sQç5¬9ÑjŠ«ç5sQÊ誾sQç5¬9ÑjŠ«ç5sQÊ誾sQç5¬9ÑjŠ«ç5sQÊ誾sQç5¬9ÑjŠ«ç5sQÊ誾sQç5¬9ÑjŠ«ç5sQÊ誾sQç5¬9ÑjŠ«ç5sQÊèçÖªùÍGœÔr°çE®}hçÖªùÍGœÔr°çE¬ŸZ*¯œÔy­G+tIpFÐ=ê½)$œšJ´¬ŒÛ»Š( AEPEPEPEPEPEPEPEPEPEPEPEPES¢Š(¢Š)QEÀ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÿÙ +endstream +endobj +50 0 obj +<< +/Filter /FlateDecode +/Length 3330 +>> +stream +H‰¤WÛnÛH}×WðQÄ4ï `{âÙ,v€D‹<ƒ-Q7©%);ž¯ßêîªî¢ä$óà„"»»NU×åœÛ»¶/wù¦·Þ¿¿½ëû|s(¶Ö—Ûû¦ï›£õçí§óSÿz*¬ÛǦé‹Öº]Ë_ÿÎ÷e÷eS[«Õý¯Öâ ×r­Øó­$ó­¶X|þŪ÷ë…ëø‘gí·¿}r­}·¸]¯]Ës×·Ö»EO~jE¾YëíbÙëÿ.>¬Œ8ðâ ÈÉØAôáw÷ÇâöÓ)¯…“ÿÊë½µ,ê›ßîíÛß>þ +FF»ðàÿÅL&®ë?tb_ØüòÞuýÐu£xu8®Zð V<ûâ9ºƒ—©|`-¼ cø›<ù>¥}pHHû”?úNj3äþïõá/€¿>>ˆß̈wqPf É}‚Ê2Ÿ q!xêÁÇXoÈ$ÚsJ4D#Äòбâ…ØåËðÒa‰ñQ|tÝøÒ9y\âúnÂ6Ä×ÑD‚>®Œuˆhx·º‰Ô«„ ]FGFðÃ(\ødÅ=Ëh |‚K cvàÆ£´¬ï/ü òö…&êtxëØ» +–Úˆß\ý_EoÅ…²Q4g €…oÄóaèþ wï/²D,Žs…°øÏõ?Ç•¯7¾| #ŠÄJ\ÈíXï²?ؘÌ˲U8–çšÞÎVÎ/Ïmo+ËCa#þekÙʵåFŸp¶U$–]ßè—Ç’Þþm«,K‡²³Nm/ä—]YŽ=Ú{¦÷~à‹¾küŸÐ0²)—þ`a8\fØY=Kt„ÔtÖ8%ZÕYW¥«HÇ›fxG¾c׺h<ºõšóüÔ‰B†nBèâ™×… 'LU¶Þu6¶0c†•=üˆ"‘vy½í(oÙŠžÞñ6Ù ñeÞÒJþ¶±áôFüÃíÎú¬§UH.í)ã À‹ïF´(Õâ(ø¿Ÿ÷Éܼ'Ž‘¬Ÿ¤Kß—mFìÍY‡ºj¨3|{§ëZÆ\ÅêE‡·Üĉ¸ŠÜ˜³§¦Ñá¯Õ˜[nm5¯dÜè Z·¯á¬ï,ßè›ÐË»²áQÖŽv:·Åú²Éð`ïL¦@/E€$-8F);^ö3 ö'UM†µo°tÿÎ2£aRŠ[°@§u;¡m{H糇 õ„æãÍ•Ø}<ßñpV~.Å´4ý¹Ü›ÝE|ÆÇ£NSŠ`gÒ[õ‹BŠOÛ’Ö<—[šŽÅ–«ô8ýjnY±>L-ÈÓÆ-Éo¶½ÈË?WhJb;ØòùMÇúFüpÖNö`²ñÔôö³„fC]åÛ[˜Uq’_‚÷fBD×ò𹬙¥¦Ý*¯ð(…P‘ÂåW +mݼ0ånBÕy¨ÇP7ɺ‹²X)µ/†¢ßD®&§ƒiϘ0±Y`ìæ]ŠÛµFÜ¥˜(Ê‚Šá#•å¶…ZŠV†Ê> ÔÐM¨õ£â7‘g·’cúcøJ©Ésté~èØa£ 8GQt˜.’°ý¡|!G=¡kîgJùˆ£´°¡ß®q˜éM +ÞÅjøaN íÁÌVñ³DgÏ”ö7†Ž¾m3„Ïd,” o~–A·ó–êK|Æ•/F_È*ﻦx²Nñr—OEÿ¢»ca‹ž¢ÛÁ”êÃnP©ë¤!•§¬¦{VIpå«„\eè°®ÂDjZ­é íMvß©õªîE±jp|*ö Áè>ªò±!S B‘Æ2m ÙSŒeVbÚG–˜n½h©90äÝEÀÍéDN«F£z`uŠÁÀiËžxÿˆ}ã ÎQÁ–(e]2t)¾•œšàËu¾gëéB4†%Ìèn˜&¬w¼ û­n7ú¦<ÄERtaíÆ¿ì§<2J¾¹“ºÑ\Y¦j%Žé­˜ 7)–òks†_ NgM+ÛOÝï³ñMí¶íÊZwA +j$Ìܤ2£.'¾²Еw-u˜æ(^«k’d"Az‚¤H xµ™Ôr‡±ððÚb]Hꖤȅc©š˜ËN·»\ã2Tü`MBTÛ®¨v™F¯l™=IÂÈ/IŒR\Õ +ö騣¯%Ô¶ÒxÄ6d͎ɽñ™5W§ªÌ‚q¡6Ûíò½FÖ±4Í\!繑ãà 3h<‚¹ZÍ \'Jj«éEI1©€÷z¦ Ûn‚Bóg+´,r¬ Åÿ9…“¢B[Ë4'îÑ5•ì>½Nbà(XÕõ„ûó'þ‹ûó!À¶Øé×RT‡ú¯*Y÷r[tå~æ¹\ÓÌÉó‹$nëo‚ûuåñD¯ªb°¹„ÔOC'I²))6^º7ˆFomA“§žàþÜ©¸™¤(ïĽÐut?ê6BŒrþrBÞÓð:PÖlyUìz^Aå¶`4]¾Ã•x•%Û™íÏ[~¸6W_KÍïeÒ㳜dM¦]½eN +>€V¦”ÂÏ#/uüë«ŸbîJ€bùÀæÔ3Í­¥Þ6¥g&7…AØ&Ôb0aÆ Ešç¦âÉD0á#cóÊ tXä¤ëL£à2£QO¸&ÑeÅ=’ñŒÔÅŠ2iºÜÿˆûR­8”ðRùúCáEêcE©ÿ^iù%aÀï.”XJ:ìjÑ!“rÏ4~¢°$¡:´ÈCŠÊ('ÿj¥±à»ÉÄ‹<„-Cö=Q)åRÊ1¢z47í]ûv…Òˆ®ìÊ´^háþŠ¯Ì<,\–ˆâ +Ü$"ϯpšn æÒ%ÕÎ\߉ÂËv¢åFÞO`‹Á\^”¨Q¦¡LécxfØ=<¹Ü}/Êp|BäýÈÔÌŒÌ\%$ìhHc BZ¯"σ¨‡ Ó”8Ìe4Š4 fš`|.Å`3ã<ÁY¬‡}Ù1xƒ‚fqÄ­‘ŠrpCr¡ˆ§ÕGxô<5Á‡À¬;Ùh³`$“`J Xò¾|)ÞŒ…¶aéU›æHçÏ’L”ý+|Fµ”›Çc#‰ +š,a¨â¾sÙƒY<™¬ž»¢5«5æo§¢-u<êMñN.’PN-±­æ¹ÜêAÍ7§t +þ¨;æØøÊœË2U‘x€:EÎÓXšæ·Í®¬ +k£ƒC]Ckƒ¾9–“§¹pÃQ[È欒6Õ}±os½€kO•10Þã¹$χə\Þ—j§ µõ$^½Áª#b‘73Õ3NýZóÑ™rqs¹b7†Ì)½d. Ä^âz¶’4§b'‚u®*QiáPÌb¬LkÈ[R Åî\‰>ÝJ yHªfÇ›½-*]pG}+ŒwT»¨•F_D8¥óIh™AP̘m*]çv–¹ßOaÂÆË„œçÎv?œxà?U>ÜŸ¯'Ý÷zü´ùÉÆ8ÈŠ.”gYQÅU,£òªc"ÄnkÊ°: ²ë·ë³õ¶¦’ß157 A:êyr% +Ψyàþ}Û¸—)©6†Ò|·YC¸i絎ãvŠý1üåÍòO€ÛßQtò÷EO}Nîùœ÷ä ?\Ìv*ÚÝœ¢È=È«\SµS³`òJ.Á‹¯ ÝÖu&¾4-=~í4)!3O9k†a+Ϥ-ܾØDz­ì”OïL©êMÚɺÜÈ¡‰ö³_zª¨¡Éªêw>°=J#˜ª}ƒý±¥é™ËðÇî¬ÃQ離]†ÙôE­‡¹ò´qJ–Í%¬2ËaÒÐx.„HƼy6× +s W_IßYemé}Ú¯®Ó*ù7+Æû5j aŽy ƒ’”¹ö磄R‚‘˜¢,‘¢võÖ«m%‚†¾ïWÌ£;ö–N楰®>ú "ëââ"þ¿iÒ›—‘Aú°ÌÒ69'i›æëË([vY¥F! +Rž›Òø>TMª“L¶ÀvEõŠúš IL6Ìg—åQðYʺË4¦Ã¶€Vµ5ÏN±QñWçÅ GVDØ^5ÊXËg*5Td.Æ1­ÃúMüo÷èkز‡?^Ø»(MkÓh£)ívp3Žz0H. ¾md8’IS­ÍãisqsRÃÕ aüUºÈ˜ 5Õi[ÁFËXOçbÍŒ4Ê*Y„¼ + £Æ=¨/‘ümÇ©³Ä(¥Žj&òµÃy&>|¯¯Ÿ¥ÚMt?ä5 +…Ñ·mlˆèDbTyœùÅ ÓZßÀ-Ÿ°=৅Û.ùp³ŽÍÀªè œѵgèöð.?¢‡ãAÞrˆAú3ÈsIµÿUJ?ÊÂÕ•|Þ÷åKyºß| +0SÖ” +endstream +endobj +51 0 obj +<< +/BM /Normal +/CA 1 +/Type /ExtGState +/ca 1 +>> +endobj +52 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 1193 +/Height 670 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate false +/Filter /FlateDecode +/Length 112931 +>> +stream +xœì}ù›VÅ•ÿßöõç™I~P'&<#˜Ä¸0™°(‚eš¥›Þ›qc ²CݸDpLÐ<“`Ìž`ÜÙD”f¾§êÜ{Þs«êÞ[w¿Ý}xÎóyšûÞ·ÞªS§–s>µŒ¼:9úêäH^9ssøÌMŽÃ_M|àøWCã_ž¾1túâÀé/O©ðÔõS× ûO~1pò‹¬ÈSPˆ)k¤_Ä<(dy³s˜[‚‚‚‚‚‚‚‚‚‚‚mÄ3‚Ì-#è.1ÖŽU ÚáR>ú_Êû2í©)g Ý·PúÇ®eãë”ì öQè×)?”C;ÿE´!"""""""""""2ý$“ß—àôYÝÕ,âv P¼?iElVPPPPPP°2Ì'©~ŸIöE¾8_¯ïÄqº¦¥ÿ ×O¼?‘8I¢üâý¾8§/âпœAÜn`ÇtÒ©Þ_ãêiƒÄº~Îuž¿/êñ1onû±Kþb»I ½òS\?‘xñYêiø}§ÏåîõýÜ_n`ÄŒõþ’7ý5®^‘’åµ<8ò*^…€×"hïéŒöû&´ß7®ý¾qí÷Ö~ßIí÷Ô~ß’}Úé;®Ý½cÚ• ð³Þ£Ÿy#}K»ÇµxB;€cÚÔ¿;pJ{§¯c®0‡˜Û çàú±eÌ­%íÄÒó&((8EÑÙKàóÆó&(˜e웶(R£Ø«õ„éÉ$É»üâø>ðÈžÙóÇ<üÌ÷.¸íߪH¾ùÝï™»jÙöqNÿu¸¿pÓ±~Cá• ¿LEÉZ%&[ð·7o‘6ˆFÕÓ§kíÔ¦C‘r+Bj¤m7žU‘L"í¨R]5žçB’=V£JFÞˆ5S šò¡ôROÆ÷ œúù>pÄžÞõ›Ûÿ}VuNŸ!K66¸?Ì•rýÆo žús«rÎ@›l!æ³^ÁÖbY¶Ñ†²TŠmh}Ó£vD¶6¦A[Û3¡–ËÕvã¥hªí7žÿ:ÛQã%šZj¹U80‹¨22I üع.ÊïÛzðŸuú}(+FΆÜ»÷ò¦ÉΩ/HüÜß´¡ÿfˆdµd‘Æ¥ÛÈ÷Ý–Xã­lz´ÜÆ‹œ¬²t2…ê¥qµ×_Ë Ê4.Z¬k&”´ÜÜNµ$(ªmMcÇkPgþ&á²cˆz—ß°Þå7t¯TøB{[¸äòÊn¨ÙïÃÅŸÚõSÞ߀æþiߟrýpåç!Ü¥8þU¤Dg¾6Ê[¿ëÄzr20“m ÖŒm°RP46…thb‚ÍÖQãåjN{û¯‡[©ŸÁokÖx+µífY¿‘¨?k_èGùõ¿ü–ú8kwÌžw÷ý$¿ó®ûá5Oï/zý_¸ï/†ø3X?âþŠ“€Î”K”"y›É’ÉþEŠKã5>-ªñBMiíÍ@5N• +j¼8-1þé-R¹"þRÝhX$^D|ø}#ÁÙžxˆ +º~×4׆W9\þöý¦ºi÷.X»õЇ€i®ß÷þÙÓûÛðòûðëÛ_îW'‹*îOŸ÷¢¼¿ë8ñq„©Lœ`8Í¢¯3«®Á–`ƒÌˆ½naÊ­v©ÍØHo0×ÃH¯;½QÚ‘`&,LôFƒvÞé`î¢<¯c—|ø¾ûþüÌž?ù8t+Fß‚7¿Ñuê›OÿRÝûÜøpUÚûÐk>5G©QNœ÷Âq8zöKÉ8ñUpÇDV¬4WS¹5–ˆ­Ø;½0G-4Uû­²%Ÿ_©¡íø¤I9iöâF®r5É5и½Â,2Z,æìóò¦ U{j;Uíë¡f©­ÔÒŽÚ&mVNñÞ¥Hl³~Á.?<Û3ºËO_¶žîú=²õØ–ÿ\Þ7áãúÍ[µkëÁ>¼îé®ß¸~êÖ?¼ï|Q9ÔþéÀIÜ–¨Ïü´¹¿Ó7ˆÓì +µ±ÛÑ|³YlOWŽL…ËŒEOO!v¸6[ªGcmfíKˆmÖh{-é»|JZJjUô 5[à”¨ÙÖÚz×|ت±fª´£Æk­ê^qªè§”¹Y¾Ø©}“ûàø—ÄúéûôííúÞöÞ£Ÿ§y#om>ðÁœåƒ>®ßœÇ7¿ò¼û÷¤º~ðëêîxð@õšÏð~ùký¸éïäubýOã157èÞ‡œ¬\F俘Œõ䧽HVW ”©uá\g=±N[ªŽŸjÖÓ§ÕùèÇx³†_$,—Ën\Ûí´ÿ"­ÀÇrÚSÆ*°m¶xýJ;òÔ¹ñi s˜‹ÌÊrG†ÉÛå¬_ôlOZí¹ýXºë·åÀàÍ-ïÇÿ‚O÷ðº}˶߻`Í÷þóɧŸ{wq÷‘;fÏÅOç®|nó+áý»´$9Ù'ßè=úx}Ç/áiŸ}Çî/Âúé•ŸˆÁî?ÅÙ7žZuØ +ž±f¬%™µ&÷¶ª-¶_–ÞÒseðþí^P]T¼h¤õ–«ÿ™X‘mç©‘Â#Bk±ºñ¨¦£=kCÞ¤ ÖÖäs¤¶-g¼Dý>ZíéÃúý|øœöæ.‚÷Nß3{þнÿ›_ù‡ ×îÅOñeŸoôýŒÖ|nüÔw=¨ó^®Œ}1Ù>y¼?}æç—‘ÛªÁàTœìXƒ/YvIKÀX6°âHKŽˆŠ ó’%Keù;íŽ:æ°¥¸ +i̇C·u[;ïÄr#œ9Y€Ò×*´À2KÁ²j'Co0óô_O’Þ÷òÞ€°ú©=m©€6€ÞœÓãs"ø€©ÉrÖ¯wüëwòø}ƒà‚ߧ¹?}-Åõ80óùqeaãþ]¹Þnf–“l²¤ø[îXœ`~öª¬]®ÍE/K‰ÑeÐØDûv'ÔK-Úˣòl¯2Í”†~·x™§hƒÅ6T¿ÅÇ£ü|_ÖÒ5Í’”Ð +j¯åâlNóí¨ñ,Ç×x4ד·ûsŒžº¼Y}ÌjOp¾|vð-Û~ÚßïûùðÙÛïJÙè§]¿×‰õ vü!ë‡ç½€£ªY?ôùúOuñßéë•xjê^‰ëE±9³=¾mÁI¼¿ÚzŒ¶Ï½ËõŠØR¶9[ãÚ¨`|,¥%–«Ãôž§;¬Ý‹Ì=Š×È´ÚõО>¤º¾×9»ndV_Û¬¬~+mGÍ·‹ê[VG35ÛF®Äû{Íõb$‘¼þZ ¸Oó¢X¿Sšõ;©Y¿šõ;æÅú©|«žSžÝ+ÿ Ü´ÿïÝûÿNˆOðSð}Ò||ðõÞ£Ÿö(âï³Þãá9Ÿú¨OÏkêÞyíâúOíñ©«4*¿cüKê´Wr=ø»‚Þômƒ±˜9͸œÛ¥Ä¿ùóÔï¦b)š‰IŸ¬P·©¯"HöédÕɘ©¥Æi2¶.ŒŒ"Ö5ÿ›êž7†Ùí*Y{7 ìø¤Ü¹1¦SÚ¬;WL&ë—4°Ê8ÓwagôþòՈê3ÎT§ƒþsÍ÷òyÙîVиÊÓX)écÏÉ{ÑB>QÙõ[;j¾Ægzø€MqNÖ/²Ö±ëw÷–£·éÊ×{¬÷ôœå wÿhñìùk~ºvϺ—~¯|@ý)¼yßâÍ^¬ßpý>í9òYÀú)¹¢X¿úú‰מzîüÿû·GyxÝÞÀûÓe)‡¡Óë`•ç¯ï¬bM}¿”¼MLä­)K\¥ ¬útÂL1ç¹+Ÿûîœå€TwÆèóÄÀ™®‡–<³ç-§jÙCŸå±ž“¨=ÔSÍ3O+ƒõ#¶(7ë·pí^âûÀ³ûÞŸ´ß¹ý®{w&ð©ïx²~ÛŽ~ªX¿cxËÃ¥~å–*î¯oìêÀصÕQ×Ïɵáß„É 'êËå¯`®Ÿù©úù¸Esðt¥h&¥,Œ$hØÉzs> `Ø´öc²MëšÂ¹ _EÀññÐõƒy¸ýi*r«ˆûÔù<·˜Å¢Rø>?½©qj•é÷qytÛXV]>º<Åßê¹óð|ÎòAÜÚËؽ8Ó,¶yK-×3{þ@#]n­úتÁq§X]ÚSϾC¬ß“CoƽÞßêgÏ#÷oΞ¿&ë§øG}Ëñ€ûs°~k÷§¦ÎñfëâÏ“ñÇ…ÌõóÿVñ|VYõÎrÆœ ㈢”Çý5Φµ“uèŒLëÇë‘c&Ö¯ô×ùÇè|cõìÉk¦¼õýø©çaX¼¿­cùÊX +뇈3dœ?'E; ¯oIx?N‡h{·¥ÛÆŒœcßsýrîJ†Zï2sT'nì8ïéµSœ§H^¥†\ïzŽ|üxÿD0k]¼¹ìr=§ŸÅ±~ë^øMËìC²pCù>£)…«¯§-ÌëÁ•jÐY 7€^Kùû¥ç¼@ýÖߎ¯ýÚìߤöž0)Ž¬·Rî¯zÖ¯÷hŠëwû÷ðý}-ëO\ºxõNåýÁûÐ_¥²~=G>é°~šøÓÍ_FÖ¼?Îú-\»‡óq6OÇÖå«à#¸pÝÆú™Ÿ†˜ž¾ÍåËgq³ts‘þ»ÿ&20€²ã¯&Ö/gKˆ§ÑPÓo^ã¹c•e¡§¥ŒØ;cõ±wFæûÆ®Ì ®mG>ÊQ:ry<÷ö¦²~àöý˜ž{¶ÐL-1+ßA¶7{þ¤o0o‘r1×/÷ÞgL̸+õ­ñ°=£ÐÅë%a·/²Ø'pMRW ++[-äÓL*ëY*¹)Ð +|íßZ9‰Ýk 2Ý„ÈúQÙÉZXƒµ¨ÇÏúm°5^ã%ZŽñ7Bí݇Ý+KáþÚÆú¥îõ»ûGKøéÉ®_&ybðõm‡? X?ºÛ±~}'®¬_V~Ê…ÚGË…à{2ÖÏÿ»Åó\æ׆‘1€Î=€ª%ÇU +ssjíDzX?{ä®_ qþ¢qE?‹Ê±þVgœŠæ +ôðÔÎóŸ%û™ºäòä~ßG{ùØ¥¬¬_jT|Ñƃ¸ fË‹qåògýl f’}mŽ«sÞÖ§ÿ,¹^¢xŠ½Ûvø#š–Wz¦4Íjæ®ÜWw¹Yଭ ä>$†õkÜAg­å°±Ì,Ov§=í¨ñZ«k`ý°ŠÕDqè/£èWêR è5ßÂ0nõR4M‡õÛî±×Ïx!)Ñõ{|൞#Êõ÷s»¾åA»~ŠøÓ¬Ÿòþ¬Ÿ¸à}õG÷+›³|àÎÙó0Íûöï[ܽ¼o|@Óp\º÷ÿõ‘ÍGàÓï<°”òÃCûeP$/C‚ô&ÿb¿Ê^ ÐTáå9ËúgÍ{Š^€,Í[ý\Ï‘1Á9Lo꼚° (ð&} +E¦l@²&ÏÃÂu{z~¿K;uATRø>¨_€÷—÷òg(j° ÷Ì] Ú€Ÿ°¿‰óLv=øØÏÖïÛ~ü³!Íý‘ 5ëŠS=³ö‚5¶,xú²j²s[2µ—™) ÚëôaïBþ U¯Ó¡qÓõãÒsä£G·žxhÙ¾0{þš…kv¯ašj·û’ÍÃ:\ÿÄÀZ ÏaÒ‹ï@» ¤à…¥ÛÆàeÊx“o£˜£W è½l#:Rgˆ-yé-jÏ ª#ŸeÝ‹¿åÿ5÷)àÕ²hÓAP»O"Fõ95¹rô?hbáÚ=›~ñçdÕa—\{a îÝ6@í«PnÖï}c_3¼¹¼o‚ FOvò(:}×øhÛ‘(ðÎyü;ašîºGOz~ ù'žwkFÄrŸbÞè}Hjص[µ9zóN<ç¬V#øëdØ6Ѭd>aìßvøC°Lj×êh8­#м£f¿G>‚÷gi«~ÅÈYã·ÉõƒrLNœÜPNœ23+Ò/EjSõ9º"Ðþç®zZ„:w(ÇêeÿY?²¢¾±Ë[Ð*·y(ããg -àû0§BŠïL ‰6øVŸîZñ9ØWv2`Õv +AóÑ=¶ñi—k?8”k¶2xÙxˆ<ÖV. –1¹Áæ«_ø]Ðõo‡ÇzNn9øA§Žv¶‹¸vD*Â^˨x‚_m½(<¡¶FƒˆÁŸÂGð[ð÷ŠÑs˜ü:­AMR€&Õif.âïmj.qí.··Lfý¨DCj"¡šÃB«9èߺŒoÂüaVØœ¿HÍAºN-æè.—ÎYZ¡;„Ü«‰Š£ÓÒøh…§|èzWû´ë·]»~½®¿ÓÁvý¾ñÁCCÀÑøÞ>‘êúmÓ®_výz•ë¬öÜžé˜Zó¹zç¯#¬Ÿöep-(ü NG\âàŒ€“Bë0Á‡JÈ øeÚÓ¼B8'ÍÃ¥77¼ôy=¶€µMûJ›öÿ•Þ1{ž±R”R€lã“õ/ÿÞp¾Hàeø”¾KËPÁ•ãµc:)Ù;ü/û²DE¡gŠo¯oHÌä3»ÿÀW~̾͞¯}ñI­{é·©«/rÄUf &°~ û­Œ8›cŒcýÀNh41dÑƃF¬GùÍûÿÁ;j0Qì„ ±Æˆëö謥䂧…@§áÉ^yFì+'ëG¹…y,)-™Å‹¬í´Ø.˜Ø……4é|ßNÿñ¾ŽëÇ#œ¨IçYj«v¼•U{9¢âd{PËÐÛà9x†å€Ç‡™ß°û}¾×xóþ¿§Ú^êLm 2®F`J`èÆGÔ‘V°ö…ßò׶¸8³[sѦCzA¬:5ŸU{Õ‹µ3+ìvù‡Zè +)T¾öcõ³¿ŽSµš£º40Û¥´À÷·Þw²~]1¼ ®pvgfçù!Æ›,Õê@HwÊ·¿Ò«±X¿.×Ê»vv¤7»½«¹=ë9áoš ƒèWÝ:«®çιê"ÿÎÊmز"»ö°tàëñd©ï"×ÏhwÎë_¿ôëüwyýê dæú-­¾N%ÍÑŽPiÐ[Ú-‚’…ñ”žãš +[ÀÔ93ÑÕ ¹ðÔçºëLÄè!ÁépŽÎ]:< #N*ï–ÀúåMnöìœ{ìì5`mÁ¡ν "Ö/Büåeýn¿ëžÍ¯\$Ö|:Óõëº__èÐ|3õv¿ëgP~Úõë·\?äûPVŽžKN_¹Q!1×Íͪ½8š:ŒW Y2wa¹Þmïý «9}½ïÄ%4˜À–‡й…3À_ó~ÉiÜü £P°‘šohJ¥P+°©[vÌK‡ÚV~ß‚µ[~Ûª½ê…Õ· œ²väôõŸ®y9ÐØá©:¨ŽàSpÉñ!¼°hã[½Î~ UcvÝÅU+5H[ÍPH™Þƒê{G}éô!OïzÇGÛ¶Â}»ßÄ•ÎNµÚ€€ÊÅ;2TxȈ¿H +ø2uJC,BÅÕõB:Z’1ÌX?ãaÂGÔÉ8×*pÖ/©fÙÿ~á×Ñ ìÕÔh{Ó¾?=ÖsÄnP©õÛX;Š†Þ°-ÔñR£ó‡?H3šß°qÀ*p &Á÷)Èt†ŠµŒ/wFgF½%K=Ía8\ñ‚¹ÅÿTbñ!vž–Gcøåš—õÙ°çÄú-Þ|Ä~á±ÞSx§Þþ€o.\»79Ybý:g¼»°~š„¿ÛXð‰|âÌ£Y¢"öŸT D¹?‚3@d©î™»|:xB<×’îÃôæ2íõEĽûm?^Þ¦_ü凋6® +$ nÝχ߄ïbÊð+ĵ!ûf¤Lìà}‹»ñ!±Ü„”7íÿ+>„)_Írý ìø´l#ülàÊ‘³›´{ÛÍžb<Âp'qáÚÝ[¹¢`âdóƒ¾ò5'»„eòéçÃo|à|ºÍún=üOÃH¶ù0uÝ…œô’µ—È´âˆúüd鬺Qƒ—e~¸¸ÛX¡7@УҺ fÍ_c¼Oãš±¦ ¾‹ÏaBÏiÔÃu&œe^÷Òœ'wì-ãz­¬g¼»øqõŒŒÐôh¹­?ì°rQ] ¬ŸURZ EH£›S3vúÜõãë ‚Q~ôœÙNó®l‰k³N«Ã‘‹Ÿ“3Ȧ¦j4×+ :¬ŸvýpeÔrÍk€í»g¬E× æNü9ŸIúÁY|‹¯%ÃI&eèk–NeÇV × ehvFÌ@ÕX8þfþ'䬗è*µN½°|Böh¾j¬RÃB:GÄ#Œ›ô$® §—ŠQeϹëwzý~°ZÀ•>ؘÑîøÅä¶PNâZóœÐ妞‚åâz N•ÛY/íßX8È‚W†­Ú# 2] J¾3çÖ/®f-‹ò¯_J‡ŸT¤~oG´"«Fq[L´‚l¦/ôz¸N¨~ƒ‘TûM©+¨m-®ãi…Þ¶zÃflLžë~HÍÁžc}NÐÎc"Úp¾Óügkþ’d(Èúݦö¦íÓÄŸâþ6ì~ß~áÞkø~@”Ô[ÝÕå!åçÜè×o¹~Dù­é=J\¾G{Xà×ðMy¶pOÝŸˆ?ú}(ðŽÓõãB)ƒ§‰oÂôÝÚ¡ã¹%Ž¾ ®œ‘aúˆH=îúmÐ AM‹NáÙÃœ¯ñ¥Î,/¸{×O?ä™d¿¨¼?ÚTø³õûœ¬_,ñwæëO¿@¿õã'†}b)Yƒ*3V|ÃÎëç#ëǦÓ+ô¤ÎÇ‘oBq\3‚„Ü‘±cÂ4Q¡'èÅàê&;`H×¢åˆèúªÎEZ9#Ÿ”óܬŸRK&&‹Ñ©éG]¿@oxa<íFZëgÄx1{ Cg +Ü: ç¬_Ç– ̈́﫹{h«‹gœAuAâ´Æ‰ÈnT2•w…Ar;å„VàÌ Õ ÆŸqζR;æ«&7[á”E:ïÓª\|¨–k&×ÖŒ;vW•õ³unÔ,½O³_býŠ7ßîׯérm¯¶ÅVQOèð‡ÈqÏÖN·arÄ›8{fNQ®RY¿ÔêŠcý¨Á2³qý‚¬_ŽúåUÜ|; +‹F˸yÇ¥2eRýW>O!ÁälÖ/®}áèl™‡'ëWos¸âdýÜ3Ø–°~aœÁbýÌûR]¿ïýøÉÐõ»ØíZóyû]÷Ü}ÿ’ot=ðÔÎwˆ„ÿ¦º~æÍŒõÓ'|Ʋ~|5)ò\|§èvžçÉyùièúqïÌpë~ãúmüÅ_ÀWâ©Á¯­ÆóÀwü!HŽÛ³çQþvçu|Õu +†ëgß7l£½½û†ë÷ó¡_Ò «vþJEÔ] +Wïü•íúQ + ò°výüY?°Û“AñáoÏ“–3ETf,:õæÃúÙ'lZ{ý,.&úþ+~½O¸ÅÀ>áV‹9]?uF½¬JpŠoÏÎú¶#À‘hy¸ÓÖ“õ£jð•Yï(…õ3l"ÕèòcôÛÉú%ØŠÞëa²~ËûÑlc•)EÔñ üfyéVk×Äéúùd2ë²è™ýð]@;"[ó¨ÌdIÐ^2ë—i¯ŸÉÅX‘7š•%Äâ¤bé*û+>®_¹¬Ÿ©7ëglL° ’\ÌÖ/аrE˳²~FÎaý R†a|¡uJNÖ/u‚áÏú …mT&†‚i³ ;"@ź1W|·‹Ñ.r·žÉB}úMƒ¬± 6Óê3·Y?'¡c¸~©³Õ›pNH'3ìýáð@?Þ‡@ÙãÎ +.§±ºßðJw“1Ê›p¼‰­"b:0RA!N=CœAzCÎò°~ü6–Æ­ß{ÿ¸K‰g¼øož-ƒõ+­Y¤UWÈØ"Ek0n>®Ÿgå…Ç„òï‚&9_ìãúy²~u6ãWx‡@‡|æîbçiY0!ÎЉ¹nuß~ü’ÏþŽYó6ø`ËÈû{ú¹w^·oÎò”e}ãÜ7üöýKRÓ|rèußg½‹¡ù>Îú—;¬Û›õÛ”vÆ‹vvÌuŒ¶ëçdý’Q!ò¹¥VŽœ%7Ÿ´éÃú­~ÓÞëg³~w¤f/¤;yéÊbýVŽ¾ådýRïÇœ½`MÿÉ+vD4.¶–)¢2c1A{ž¬Ÿa3Y?6+PÑËb|GÖ£ÄvÌ0ÉÍú%è-SÄ>÷^?g´½b£üY¿¸3´ëcý¢±q›õdÃú¬ùkzر4›Å³˜#'ÚÖÈ‘/lý{dçK‡ï¢†9CQ.ë×9ásüÆ–p£ßCËë`ýÎÄîÁ¤Ò~œl…}û†}X?¾W(#ë—R#R›ÅQÊH“½Y?Geý‚{ý\<ˆÝKÐñ&ø¼oì²½×oˆ1ê ÆðoÞc •ÄúÖŽkAé9ö3ÙX¿ø½~Ž5~õ;¤·›=ºm Oìדù’Y¿JÛ‘U:¾&Τò¯ß„L~sÝ‹¿×ã`6æÜ×™z§C*ëgŒªdœ?ÕÍž÷³æ`äšÃkq9Á5„‹»Ñ/%³~¯kÐu²7 G^EÇÍLgxBo÷;­Y¿Sšø;©½¿^®È÷º\¿-?@T.Þ‹N„í“ ¸~åÇ\?%ʹ»‚ìžáúë·áåßS:sôÊÉ„½~|û:b6¿sâ2÷¤È͉[ Ê÷ÇÝ·¸Ü7ç¦<þ‹I~¿½Ã·æÑw±hôEúƒKëǵ›½Ðõã >ÕCÆúñì½~¨d¾×Dßíþ߬1”|§ùôæû2ETf²$+°,Ö† {ïÞ‹°ùìrÊÄúáÉx? !Å—åûF죤U\ÄÞÐd¶ Š^zª…ö(ñ-fYOø¤¥n^©lÖ/ÎðlÛãÙÆÑ™âÌœõ <_k³ŒMr[£HŸ¨C#rŽ&QÆ©zeµ‚!ë„O´ +°®Îi„IŠl†%,Xd £%:†…K³ šÊ¦TGëÇTÍ÷]&kÌ®VªJûðC§Ø våè¹ÈâFY?Þ ùG2rÙE& TÇ2„˘Œsk$õKö^?xßÈaïÑñ#ç Ÿ9Y?~§6’âõ»õàX¿›öý©|Ö¯ºvä*íVʶmƒVi&lгÕnˆgô>ÎÉU›õãDYÍ!93P‰ BmsT·½1r™Úˆ½æÓÓõ»MíG›¿f×o¶hú/Næ­~Þ3µ'‡~çú Œ—¶s×ï¾EÝür‡Èq”ëöàUãÆMsŠ»Â#rÄ6¼ô­½¼­åfêKÛ¹ÿx[x¥;§ðÈ·ßÓøEÃ#ãßB1îIç'yÂ×ñ@˜}n'^òNO’]?¯ì…®ß¦_ü…ª£M{O¡ßp‚\?᳤n|`2¹ùÀß}]¿4¿/ÕõkÜ«š’Ïõ³ç¼Ïtº~t€¡íËÐŽTŠëÇæ*¿+èúeR]ê´:á¸ÑÊysŽGtÁ™§Zìċ]Kç•î´ RKmª%»~~aš#Ù®z`̦IÉ®ß;!ÁYAøuÈŒmí¥´,¸}¹‘Pë_ºP¹ëï’óÉÝ©a{sÆÃt×/œ®`•QâÆ•qÇCÅU+¿«1UìÖ +m.ÑõKP¸OB±»\ö <ΰí»†Â5̶ó5]m¼oŸÒOk䜮ßúE´%nQN×ÏÉçFîâ´>Meš@ÉX¿ët›*ŸõóXÕU6‹µ#ã„ÏÎ>åÄÒ!ÒŽ¿.¶[™Nøäû’ÿû´[Æ zbë?X?ŽÔŒ\ÍÁɃ³æ”¬Á¬C(ó„Ï’X?ÀadýTµëwJS3§p‘äå¹k–¿÷w›¦ÿÝzœ3€ˆ¯ßç³Î“»~Ûk¿oì²òûƔߧ}Ò«èâa>Éõ#é9ú±ï½~'µ77âq]Ý.íúL¿§/pýô›ÛŽ|”úfàúºÊ‘ŠÚ‹~ +.^rÀ£÷#®Ÿ•NzöÀõÓ´æXd±k¬¢Ôåê}({r&¤îÕc·¶=dŸÑ&;ˆ¶†m;Ñ¿¥ÌdLÖaDóaíD\¿°U2Á\¿½À'jÊq ècaô ‚Æjžüè¶)öH_á_f-÷±oø‹ˆy2{ŸßF·åàEü´Ó§w½õû$(WÔÆlmØÚóÕÓ^gÚ¦{`C{ÒMjTÒ%½á) ø/;È+ß!Ô9±` gçû+FÏòçC†ëgåò¿píž`óË™¯àÅ݇Öìz7«öJ´=ncäsÛë?y™–A¯®\`ý¼çèG+FÎÎ]µÓÐÀC˃K¬èM)<PNÑOÉ×&ÏìÓL­@M\Wu\?ÃB:®_øD]ûø ®OS§ ä²ê„z1­šõØ—œÕXW¤\Êkë,Ã=ƒúÆ.áóÍûÿzÐ^úw×Iø&Õ&ÌZ©BÉÚ¹Æðú £^œ;!WÝh;ê2Öjz} ËÊ綸ˆ:ã‡'¸Ì¹|F¥ÔQÌÖ9ïCh—O*/hŒ¬4Ö¹–Ú²mÒ†ŠýÈè{áoZí zVëHC]Ѿ-Hç„Ú䟀öÐZÀV•ë·ïüýŽëç*Wg+\4çtëÏs¦ú¥ô—öŒ)oTÿ"Œ´„/)²Ôo…í(Ú‡cëÀZ†çP/A;²ê—úvŹz6z&4î`UiØ ïi;+ ñò@)@½t"¬Ž°µÚ£3ôÒjtÏYµc¶ôG2ëG‚WòuEï6›ƒÍ >ÄÎ rúÆ® žÄL^»cÖ<Ãõƒ‰~´¼?öð–ï<°”SiöKô¹Èoâ7›ÇïÓmïô²óFuøuÚÇÇ×£ÒªH(½ÜýÊß°:Œµš ;þÂû,”^×¹?‘Ö[&_øÙ#r“ßëwd wñõKVÊüÕ»Ò)¿L_¥ jZJ‘°s\7ëdý†ô‚š™b‡…ð/‰Mv$EÝŸÂŽe@ÁÑ<²:.;o•MuZ{dõ.Ï>Æb^(°1µî}"ØgÇ5cÛ•Óù;ðuòéPÏqmaËÁ‹¼îào`¶ ¦÷=cž}8}ªÕq””ZX‹ÚלX¿ðXÏ3ä¼Ð¼Fsxø­õ/_ð¬_çÜ£”v¤Ë˜³Ù£sp9]bý‚¨~Uµf7ôÆ·ŒQÞ©IÞ Ö½ô;ç/òÑ™ÌI…ìõ`Ú³‘86rikvc~Àº(ìf} çv±NT‡ £mA‡°Nw~kÕ²ÍÓ²Hl¨!qÇrwÞ;¿N¿ï_îšõÌî÷Ù *Wp‘'²~ÊéÓ¬ŸöþŒFu%ÈÕZÄ''ñÎz:~I™yŽ»ó·‚ÚWc€Sì:m¦“‡Îé.!åG‘O¾/5:š'"ÓQÄ'£!Êä°s Å™scË¡ºX:óÐzMæVg“̧½„ ;ÚNi\·eÖHƪ)¡Oð«ÿê0$ù´ÿFj°tmgë@Òº‘Æ-³U’Ã<|”GWn;öhJë¼I(}¤±–Kù½V4žÏY¿~Χ2˜ëÄš!?µíð?s/ûÌ*ßüîO?÷nß µÎS3GWûq_ÈRǧœSpý”‹z}à´þc\íu…<ûôßX +Žq ZƒèÌg“7“EoÉæÃs–õÓÎÇm‡?ZÞ?N«:áåôE¾ÖZø‹|ïç"QbLaã ÚÔE§>cw\º¢p¼f[…±‘ü±\ã¬1i×jZ<³q}¦ä0Kk-“wn™–ÚbÉ5ÖKÁ1·dDÖ/XŸ;ÚÒ"JÒv&îϳiƒÅígjléþm*kýVÑŽ¦%zZB>¬#oYæ±Yfhè'fÃQ4Tc&±P+ÐÔà)¤œµQÓþeÛOýdÅŽÿúù(Ê·xÔ”û‰“8GïÎ{çÓ×!Í%›)§OíﻲKz©'Rà>hÖo<ˆS¸-18àhP;€[`ˆúµkɨ9)*ïµ*05NôÌYèʹª}B~ê©- ×ífï;ÊÞ©týƯ£Õ©¦„- Úd¹ÝzbŽÖ!h`œnu„uçÂá ö˜R«-{,bWôF˜+ç9t[¾þ³hO‡7³S)Ú‹Ï[š1Å®úuÿ:rÖiû­:š~µ+’7Õ&Îj…;(9JÈ_’ÈŒ“”BeOÊKWeKå•[^ýúÖi•Å´KZ¾º²ç?OÕ£¢Š5g&ùsf¬ìå¿_σØS7Ž“jÈçè, îÄQË>‡5÷7¤Y¡ÁS°_·y©ÿÄ¥íÇ>ï;þ¹Æ϶ù´÷览½G?é9ò Ç8gaÃËïÁw1~dúôþ>ü-t‚<œV ;•×pêú°ò `dü\?å®âßç`=sÉ™j:sX?:óFîp¯&Û2gY?Ú ÿ¥ù]¬#5ÛÁ&v-0@´I†d±>(|_ÕÜ_‘ÈsK±}å’¦ç>W÷/€ß§ðÓíǵ¨¼¿O8®ù‚ÓYøþÂõú[*… Á1åúá¯ôŸ V *'Bù}×ô +Ï/[„ˆ›Å8bÎ ¿Že™bXbþIïcs ×m^í=öÉÓ»ÎÏY>ÀïF¼sö¼ûwÃs|‡§`çd8Øqü¥—±wºÑ±Æ¹­úcîÖ!h`‚žšŠ Öfû1.ÿ¯~WêÜ=­ ¿>4Ÿç²ÚfÛkƒfZiÏÉõRܪs×>=÷#x>Î[ðïö´…ª[Aó}ÈÄÌ@¥Ã¯m,²â(î»q¿Õ +=4ˆ «e2avBXp% aqÖ/Âýiµ¤q×4§ƒ+0¯ fõíÞŸ‡<àgÈþד#1”ßïáý ¤¦ßY(8„‹9õξ€ãƒj¦o˜-­'#!‹D¼’›åÚ’óÖfaH]l Éñ%0}ÃZë0}.¾ÏŸé#Ì͆ :1cò³äõ[Y¥0÷o%ç6ÑêОKÑgý{ä­ÄšœNMV×ZÌh3ÉõRdþ0sk¤–žÄgÔË` mÐ[ýL=a•õ+í¨dK¨y$Íø[eÏZK`ý"ñ:U®#)Üß5µ“Kyg—#  ò?·x@…[üýöw\ +¿xã|SÀÔ[4™£Óǧö}ßP>…G´ÐÁ¶Ë-‹3ôïZl Á&c,çåûb§ qNaúZÂú¹ûL8‘ÂSÔ¥0#Yµ§ˆâù7ZSCÁŸðºˆ¶Árµ—O‡åèÍS3 keVT#9z΢½A‘ºÈ Vác!5_b+¨µ™fXŠTV¿%Œª™J׆I¨£ÆsR–Þ—É·½`›ûãG¦Ðî?“Ô ÇþìÛï[²égúð`&cúˆï¿NŸ>ˆæ†ö_´—ªÉV{¿Ø0Û€ŸŠõ0kþùi +ËgH]LŸƒïCÛ Ñ“ãkœ›!èSˆ•Çè*Êì-+g9†ß¬Ž‘Ÿ®kCéEË©> +”…íîI*í§z?Ü~,½MIÏVi]4˜Ã*{àüñüÑ„xQ%0¢(ûÃ@Ú¨oý¾ÔáO\zè±íöÝ +FÞäL_ÿÉ+a:¦/ø-ñ฀-‚,¡OzFoà%Œ_çŸi7A³˜½qînp¦–ŽONb9AÏý‰ñÌcB$Ê3ÂYÄòsã´Œ?{–¨¸Õee±Û¯ÉÚy5®“Æ1“uÕP/mÐI{ÚBý}Hãš™Xi›’zôÁ£g#:¬¡.7’ñXϘܙ±#ÌuäU~ +(à¶Cÿ¼oÑFã¢öŸ¬ØÏéúß)üJx౧o™> ;ù/9äœTW5í°\VÔHÇg½´0}mÆ|VY‘·ìBçÈY:̧½ŠôYQ ³"íÍþ´Òº(·^fx]dÕyƒ=pã½Gն݆œH;*Ë1Ko M÷À%G"Þë“!²y¾Ã‹î¨ø»å}§¿ùÝÉéû΃Ké>ÄØ=ŽÁ™˜ßæ`£BŽòi?q–bJb£¥ÈÄ &¿éHߪ)aú¦&×Ô4CÑ[A,ÑöÊÍÓ–[žØ«n'k3²­m3¶')ŽUpIeÕoô#X±åý½>Yq0å8úê×4j^Ù™`©¡Úý7¡9 ÍŽã~®À Ò÷/¬Úq®ëÁ¥w}Á=sWÍ]ùß+wœë9ò!¸xŠÝ 𺊈ô]J Ó§_ìüºvôø`]†e¬ +Q“åæ¹tL+ÖE&ŒÕFô× 4° … V„ɵ6=°R6^ºPl¯n¬…{ª”ÑÞQ˜×(1'MÇöëÓ¹`”:¬×ZnDå{ªüD0ð†q¯q8XŇ+ú®¨]?Ä!dî V:ÞA줦‰¿B¿‹Ì×pÈ…9äù·?̃¤ù²Ðõ+¶íXÜ«Æ䜺(:l¹öê,ÑèÔǯU¾ ñ2¶«Ö¹h~úÕoÊ%ØfkQ#`eñçVˆ3;hñ€j?`xT‹ù›Äô©s mÎèÕ$ÆÊÎyR)Z eI@ú®fªàݘ·ÖF+ã «ÃvÛBNEíµ¡ìíÄFj¤ñR7ŽÒ‡Lo”vÔNl§ý—oÇœ“™ bGôž¯80Ù·(µ8¶ˆòf?,3óƒPGYÞOÍC‰V-Ø 6nÉY±qMiM6®¥)§1©‹i‰mÐùLÖÿt­ß6”½%8UtX¹UTaM䀌^Ðâ8£Æ=÷™†ŽzÏ‹ÅFÛ‡9¬±ñ<· ›êÚPöX³6ìOKùÅ6hrŠÚmEظ>Ë­‘¸öBOêiYí±±Æk§º>-U‡\“žZå¹*¥.Z¥ÛÆk<‚5Æ܌㉳sñ¦¹³Ïâ’’#0mˆEL{4k? 3¥_º% + + + +¶wÔ8~µ¡¼‚‚‚‚å`•Q “@'˜Œ©'@:sROÌG°¬Â†§(Nv@PPP° ¼YŽ¾†>—G^ÅÕ˜QT¾ÛBM3î× –.¡\5`¥µ6…´Ñ†² +V‹mˆ + + + + + + +N'¬Ò»Ü‘m‹ÝÛ•õλ,»Ãšöµ§? +Ç'(((((((((Ø>¼Y¦280/&ÿV+"ù3 ‹s|m(…         àTÇÚd’n‰‚‡ä“ä”ë,©H²HM‰ˆˆˆˆˆˆˆä–¦™#Á©‹u{š™Ÿ‚Ÿì DlJ|HÀ‚Ò`éDDDDDDDDDDDDÚ#mð=«8² ål ¾¡}ÀàŽ×ñøÍBØx)§9ŠˆˆˆˆˆˆˆˆˆLMiÞ÷t¡p|‚‚‚‚‚‚‚‚‚‚‚‚eb˜AAAAAAAAAAAAÁjQù€‚‚‚S› + + + + + + + +¶›÷=«Få + + + + + + + + + + + + +NglÞ÷¬oNa|]PPPPPPPPPPPPÐõ=Ÿýåä g'÷ýjrÿ¯oxçÖÁó· + +N)»ëK{n°5 Jß"8 ðÀyÝ¥¼=ù¹Égß(¡-ì|srïÛ“ÇÿwòÔïnM¼wëUß + + + +–ƒÐ¯Bï +},ô´Ðß6>ÿñÀf8»g߸¹û&žŸÔã à4A°j°í[– ô-‚Ó w¿uSÇ”ò´…¿¼yèÝÉ3MÏ‹[Õ ô·‡ÞQ}¯ƒkk6áo>ÿæäÔZ_,Á¶ÁÂiY‚Ò·N?<ðëÉçÏfn »ßšœ¸0Ùü\KPPPp†!ô½Ð7>#ŠÇºcò/¿uShÍGS«Ã—Ï5ÏÍ4”¾EpãËoeh Îß<Ó‚ù   àÌDèüºùy‘ŸÕ>`møÂÙÉC礼ü!5– +Ncœ|ñl}-KPúÁ鎓/ój {ßž|õ=Å÷½¦g ù° s'AAAÁ©‹gÞ›Ü÷v8¾&Y¿çß¼yðÙƒ#8SðÀùÉ]o¶"Â3íQúÁ™€ÎßÜu6¥-¼üÖÍ3ïÉ:OAAAÁæqâÂäKí[Vgdœß¦£¦‚‚µ¢ +ø´€›öèß·Üýƒù·}ã[(ðw¹5þ­ï«Ä^hƒí NKÜû?)máØoŠò}‚‚‚‚‚e!ôÉÏ‘,¬ÉÇÜùK˜›¥ìÄyíý[ùäÖ'Wÿï«›ÿ'ÿä_kÿ}‚•þùã[`±i±úü§ó –Ø· ~‹ù}(ßRÞ_i¼ ¦?pè‚ýéÆ]¯k¯ðw3G‚SÏO&œ!¼ëÍÉ3n¶!Ö-((((}²¾ñ¡ó¥ë÷Æd øâ¹I·|ç–¿{ëýoݺÕôœ^þÉ¿,ÿÀbÁn½ë¶jD°üÚZÙÌÄä¾…pðÐt÷žõc|òóžW6>ÿ†Ïw=‘\?ûSüiÈCY¿%8cQíø‹i û~5©âÌ¿¿%(85°iFFP°Ü÷v˜¾X?’â"™&¯|)^Ÿü›ªÿ.}¡lØiÛ€{ßn>Â3½1¡o±y7tý8;”'{^ÁçOn{Ù:xBŸò^=b0‰ë÷ü™Œ ' ¿((˜ŒûÞŽm Çÿ?{ßúG‘gû·]¾ÞØK0¾sw‰ÏÎ ÍàÀxÃ3Æì<»Ø3D·®ßߎ޴–Ý*2ÍY›œ!ãÚÂáº~d2™ìãÎ켧TÁ³+½X8[¾gÙò ׄ=õø´?¥Ç7ßùžÆæ¸{K”·ET˜øwÐb"è$çÆO/Ìþ9çú9½45ƒ/a®Ÿ‘S/G1Á‘$“'¼+Šïp'“Édßwfç=%sÓ˜qÏ0¿½åº×Î`dø&Ç=¥wÿ„§¡y¾‰Zçb )ÑA›³ëι~ÊSrŸE¾I ²5ý\?9"ØØ7Û¹‡äF帶pÔƒçÛd2™L6ØyO©‚ã]¿l¹#|bå;\wÙŒ,âÖýë7<è§åÕÊš“ãî-É<¿êË‘Vé'£:Åõ[¹î¯²—½©œ»ð ³eŠ¢Üº~Æ•ë')JúûcA~.äf㸶ô1ÚÜìÜéóÊõ+–\wÙŒ,b²H×Ïw×OÜ:ù¬†\ªÏº§8ÁõÛ8'ÅËSª0Áõ“Y~úѱק¶ÕGÉä¦ëG&“ÉuÄÎ{J•<‡¿Y¥(»î°3™…õöÓrjeÍÉq÷ƒÿ¸­³²Ê¼+W9 ðÒ_~GsýÎk®_¸WôEsJÐ<ºž5±î«ŽB&'s\[Xjÿĵ/@&“É ÉÎÇG™ìôɼëÞ:ƒ‘YÄ=¥Ï­•5'§ôJ È”×&xå=†']oS\?Yò¥£Òõ3öBñ¡£G×­«ŒÂuoÁÈ,â¾ä¹µ2ÿA×L¦ëG&“ÉMÅ5êÿÐõc0ÜFÜSzžð40ÇÝ[xï¹éOÏ•¬¼ˆÒÈäœ9®-øÐÃ!“Éd²ÁÎ{J|,|_{ÆVGo9Ê®{ë Ffaý†ƒskeÍÉq÷ƒÑa†¸[§,¹†L6lŽqÕ»Â>AáânÚNàüɼëÞ:ƒ‘YÄ=¥wÿ„§¡ÙzÍ;zKúˇ.”¾((,\<ûðÌÜ$|t°üå`ù‹ åýý¥Î^º~d2™\÷켧TÁ®ŸÌ»î­3™]?\¿Î¾òç_7ÛP²•2ä®áàN&çÆø~¡ hÜUâÚ‚u&“Éd²ÁÎ{J:Óõc0² +º~Î]¿ý}å#ƒAx)_w¹~rHnB>2Xþ¬®™L&×+;ï)U0]?#£ ëçÖõ;š}]éü¾#ÓG§ ¦÷Gö“—~E×L&“ë’÷”t¦ëÇ`dtýº~úí~_×PéÔ7¥¾+寿/Œ–ScèZ9Ã×gˆÌ1t}æÂèLÿÕ™Óß– Ã^<§õŠ–ôÓõ#“Éäúcç=¥ +¦ëÇ`dtý\¹~ûûƒŽqW¥ßW*) B¬]/jîZiŒ}‡Â ¾ +rm2ðü•r÷°Okýat!>ë£ëG&“ÉuÆÎ{J•<‡}àR”]÷֌̢CÖ–ŒðæðI ¹FŒ+|èB8 OVã qò„Û¬I—Þé[ýçÜ&kx ]›9õMøÓIÌáÐ…à®×œWÏ|xªO&“ÉqìÞé£ëÇ`Ô èú9áÎÞàÖªû}g¿›wë¢^ÞÀ÷Ó£Ó LïÏ+>{Ù‹g¶žðÑÁ` Û¸¶àC Éd2™l°óžR%Óõc0² ë7<•S+kN>ðU…î;õMièZ`ÕE\²â38ª©þÜðõòéo½øíö„ôÇþv;¯™L&“£ì¼§aº~ FA×Ï q¡¬t߉K³]‚Ó74:=26=v¯xïAQ>#éØšàFÕŸ{eÔŒë|ò’ûßnOø‹º~d2™\O켧D×Á¨EÐõs‡çß¼Ð{¥ç©ë¾ÑÛÅÉ©bB`+òÄ©?ëÈOçʨ¸ïªûßnOøÈ ]?2™L®'vÞSŠ0]?#ƒ ëç„Ìê¾Âð¬:³ê¾‹×§ÇH}z 'ò§T>(£†g\çî‹^ü‚;ç#CtýÈd2¹žØyO‰®ƒQ‹ ëç„ÕhÏÓßÄê¾onLëfßT|èööJ£þ|PFÍÀ=œñWÑ‹ ëG&“ÉõÁÎ{J:o9ÀàÎÞr”]÷֌̂®ŸV£=û¯š«»(¿Oé¾Ñ€ØKy 3þœk¢&á~ŽùœïEÐõ#“Éäºaç=%º~ F-‚®_þüa¡¨\¿ÊÑžj¾žçiè»mí\ÞòÌC?z¼éƒv«úþÖ5?©þòçÁk^ü‚ûÀq-‡º‘Éd2Ù`úKtýŒÌÃú çÖÊš7Ë€Ï.Ó0®ÕyíîtT÷MNN®Z³¢OÇŠç[‘U£wŠR”^x ø4ò¤ùðôêõ¸nÿµeo>‡Ãu~F‰ár\‹p^1‚ ßáBý…Ýü>º~ F–A×/gþÐ\?}´§zCt¨'ôÝÞΆî ]Wjاzãßò ó¼ôË눮~µ}ã¸áCÝÈd2™l°óþ’ÎtýŒ¬‚®_Î éçú‰O72fZ~“aD-?ÁSϵJCý¡QäìúÁÏ(A× ¢®à¼¿TÁtýŒŒ‚®Ÿ[×/:ËoìžE÷! ñ¬ÒïÉ–§U]ý¡œèŒ?º~tý\q\‹ð¡nd2™L6ØyIgº~ FVA×Ï×O:àÞ»ô[ûúŸ¬Òï…—^µJ?”£ÊŒsýö~qþÿ=½ZÊÁ‡íûŽ‰QuôÜ•Ö×ÚT:²) )POHù¿?ÿ >ƒ±—ñ§ÊœPŽ~häANI?p|P¤ðO?Y.eê;&”©#®|Ãõé¹dÃÑ“w§ë·hĵç#‚ ¢pÞ_ª`º~ FFA×Ï7×Ï:Úsbbâø©«ôC:¶F¥ßäT×ïÈÙ)áéÖõ"ˆÕv=ÐVÿôf5—’?Û;‰‡¥Ž‹M"ÍäÇŸJC¼…œ`)ÒiÝŸß“MŽÚ +¥©Bd/ä äÕõYé7[±Õë¥pïåÉeê^ÛÞCçe/äÁÙé%è®ßûŸ|lúÉrä‘3•šC÷Iz°{˜Ÿ{¿{@×o)×"|¨™L&“ vÞ_Ò™®ƒ‘UÐõóÍõÓ¥Ÿ²ó&ÂØÓ±ßÐ}ßß"› ãO +Ivýö˜•N¡Õeˆ£3"© y”/&ÚG¹~Ê5ƒP’?±‹”0»òLèÄI9²I•#ŠÜSÖ›È+¨9åú©Z©CÈŸ eêò•ÿ8/l+]?ٙūêîtý¸á¼bADÎûK•<‡}àR”]÷ÖŒÌÂú çÖÊšCã¯'ý.|_L~·ÆÆú¿€Ü{ê¹VðñS=H‰“~“SE”– ýÎ7®L=ˆ÷?ùÜ:$Ri1QFº‹þ©ï+Ÿ ˆ¢4öRL?œ>ÄTeN(S‡ÕÕk%Ÿsθ”Q¬Uw§ô[46Ë÷?ÂÎ+F †Ž ™L×®ƒ±ˆ ë—3'»~kú\?%è ñV­Y÷ðcïéÜõ­ÆçeOürÅó­Ø•~('YúÉ +ŸÛ÷Sð›þž¹ôËÄ=xgK”~Ö2£ÒoÝŸßÓ³é%¨³ë½ü@Ÿî'ê/awJ¿Eƒ®ADÁy‰®ƒQ‹ ëç•ë¬ðyß”~c·o/oyÆjE ‘Ç~('yÀçùïÆe„' ³ÞÄ>K3à3ô3ÊQRk8Ý€O«ôK(S‡Q¾žG¯¡á ÈÒ1’ž°;¥ßÒz–á¼bADÎûK¦ëÇ`dtýræªsý.ß2—y‰[ÛSÇo_~ÍXæ夙ë)ˆØ‘IsÁR*?1—yQÃAÓK?½9 +þ”œ²ŽÊCÚ2/€¬¢™,ýÊÔ¡—/ÙTÆ\¿`—¹rš›Ð—°;¥ßztý‚ êÎûKtýŒZ]?ß\¿ÁÑ`šžq'NŸ©ªûÈ9/§Š('Yú¸©”¬f©¼-ã +úˆÊôÒÏ(G|=e´oOP%$K¿ä2 õgœ]´†ê¢%u›/nwJ¿¥õ"èúAÔœ÷—"L×ÁÈ èúå̆ë§ë25Ýoôμñ—Æò¬Z³NI?” &ú%Ïõ#jŠÁëî¾=]?‚ ˆ:‚óþ]?£A×Ï­ë÷õ÷¦ôõ7>1+ý–ýô)¥ßÃ=.»`_«î£ôËFÝÿ|{‚¸á¼bADÎûK|<Ô€µçÀé+GÙuoÁÈ,¬ßðÀõË«•5®ß±Ðõ¤_ïÕP”]¥ßµP¬] ¤ßðõŠaŸ“ÕBê‰}é7Wš*èF¨ø4¾*r͸ïûð7ô"¹×"²)Ÿ ‚È8}týŒìƒ®Ÿ[ׯ绒îÊéÆߥJõ'+2L{¥´üèú倞ïÜÿ|{º~Auçý%ÃõÛ>-¬5w†H”]÷ÖŒÌÂú ï ]¿|ZY²îúu_šwýÀâÓÒo´(Þßý¦RrŠßwAx ËQ%G]¿E;YäôÜ})ü uí¸ùÀq-‡º‘Éd2Ù`磤*™®ƒ‘MÐõËŸu×è»kü Fï'&“D¶Êº.Z~ž ïjøJ„ˆkÎ+FADáC‰®ƒ‘yÐõsëú»/–ôyQï<8Z¼vÉ‹'·žp\‹ð¡nd2™L6؇þ’bº~ FVA×Ï ë®pêÛÒ`ä-†÷—úŽ´ü\âzù4gùU"®-8¯A…óžRÓõc02 +º~NXwý„Ï|WÒçå)ç.êFÙÈYÕïãÚžµæ³—½xfëǵêF&“Édƒ÷”tõ—‡«Ü—¢ìº·Î`dÖo88·VÖœŒûjTýüŠÏ¾ê‹¼ñ!NýéºO×Ît_cèúÌ©oßN¢qÏrWŒ ‚ˆÂ½ÓG×Á¨AÐõs¸©ºO¸0\ê½2­{ ŠÏª«ê>Îò«÷_î¾èÅÓZ9¡-8¯™L&“ vÞSªäé|8엢캷Î`dtý\¹~]1ê|ìb±çÛâù+ÓýW§/ŒVóí)LÝ—ݘ¹pm¦tæÜHùä·î©}æä¶@&“Éd¯ØyOÉ`º~ F&A×Ï «»«¡ûŽ Nš,(.šU9Fù>üš›“éú‘Édr±óž]?£aý†ƒskeÍÉúÝ5ªû/B÷%èêÏùï¹™9M[ “Éd²'\ë¾]?ÃIÐõsÂÆ=Öªû¢ðË S_L§ø õçÃï¹™™®™L&×;ï)Ñõc0jtýœ»~]ájŸqªmqã< Fù>üŽ›™S¶2™L&ûÀÎ{J&ç‚ lƒëÞ:ƒ‘YÐõsÂúÝUÍÅ[úhO«¨Êwþ;Bnf¦ëG&“ÉuÄÎ{JtýŒZ]?·®_t…Ï%ê>]ýE×õáׄܜ\µ-Éd2ÙvÞS29Ðõc4|Ä}Éske͉àÖz1\àņ@ú uÓúaä̾˜ÂåБ3’ÛAáœ÷”*@×ÁÈ(èú¹rý¬oô³Îõ³®îb]ïÅ:ËÞÙNh ÎëF&“Édƒ÷”tn`Œð¾Ð1ØuoÁÈ,¬ßppn­¬99¼µÊ æù舵Y¥œ,ÞRì.ö])^½]¼u¯¨Ÿ‘‚tlU9ÁF9ÆQºBã¯p±ìœ‰¦Â–ãtý‚ êq7m7 ëÇ`dtýœpÔ‰3Þï ÏÝš˜,&¶"OÜJ/ÖcùðD‘ÜT×|¨™L&“ vÞSÒ™®ƒ‘UÐõsÂQ'Îê÷¸T¼3ž$úô@Nä·zQ‡Ñ×ÜT×|¨™L&“ vÞSªäPÖžÃõ.JQvÝ[g02 º~>¸~V¿ïÔ·EÝ웊ÝþÃ^i¼?ž(’›ŠãÚ‚u#“Éd²ÁÎ{J:Óõc0² +º~>¸~ºC§ü>¥ûD_Tb/åý%Ìøóá‰"¹©8®-øP72™L&켧TÉtýŒlÂú _îS+kBÞ|¬}›ƒ@½áî¸]÷mûhçò–gúÑ£àM´[ÕßñŠ·<(ð-„Cĵç#‚ðtýèú1Ù]¿üY|&ÌòºfÑ}“““«Ö¬ƒèÓ±âùV¤GÕßàèTÕ]®Ÿ(æÆ;4€kåCMÍ-/¬}Ój²hŽk>ÔL&“ÉûÐ_¢ëÇ`dtýræÍǦ ×Ï°üº†-C=¡ïöv0tŸéºúSÃ>QŽaü5íëÝ•ôóPp=7º—H?ç•_ +âZ„óŠAQ8ï/éL×ÁÈ*èúåÌ~ºëå×wÅ¢û¬–Ÿà©çZ%ƒ¡þPgü »uý Úô”G–-ßYYh9týÈd2™œ';ï/Uòt>öKQvÝ[g02 ë7|_èúåÙÖš‡·„®_t´§z'ûÕÛ݇€Ä³J¿'[žVytõ‡rT™M>æS¤Ÿ“£ìÏDuBúm]?®çz–áCÝÈÄAdçN]?£A×/gŽsýÔûønݳK¿µ¯ÿÉ*ý^xéU«ôC9Ñwü®ß‡ç~ü³ßH9=7¥ï„ô'V¬Fâ#Ë–·nxúEÒ¡>ž}¥ )HÇVäªZÛ¶]ý©ûYÌŽ­ºc…<(DŠ» +#]s}6¤ @ÔD¶¾¸á½ÏûÇe+ê€ãªªê{éü¡vP¥•t×GWå£ÂÈM׫s\pv¸`¹¨Î]Ê”ÔGÎQj…BÔq¥&8î‹Ú!ÔõT®êlh@âÝÝÖ«áÓõ#“Éä:bçý%º~ F-‚®Ÿo®Ÿu´çÄÄÄñS=Vé‡tlJ¿‰É*®_Çé"CºBÅù w{J¢&:{nBAnÈoÔ6‘:Hä¡hC¤ 'ŠäD!$¢q (¡†D¹ 'Ò!”¤„ ¡\ê ç¾BYdÝ«+Ô>J‘É^Qu¦*5Çt×O/jKÔ®ÔêÍöƒòYN$ú;W‡ áeQY4 |ŽŽ5U×\6áB'ÊÕ(„‡°–£\?ü_p +ª4ì«ò8ï'¤èEÐõ#“Éäú`çý¥ +>jÀÚsà€ô—£ìº·Î`dÖoxàúåÕÊš×ïx’ë§K?eçM„±§c¿¡û6¾¿E6ÆŸ’ìúí躌¢óÎ | ÍTÊçáEQ+Pºî€ Ñu®°Pˆîôá³èÇ·Úâƒ~Dü©rŠäÔ÷-¹«0bŒØÄŸâ¬5×± áA •ú B u0~ã¢k=Éoè©„:¼^½LCß{)×Ï8‹á!ŒrÄ T®Ÿ¨T)éЉP£Î{ézöáCÝÈd2™l°N]?#û ëç•ëwx`*AúÝëÿzrï©çZÁÇOõ %NúML¥%ÏõƒÎ‚Ž€¬ÐG ÊBýþ¯t‡Òb’¢ë8]a©q¤: +¡:ƒZÑ_ô2•b’­ÂM…9i :÷ÍzЮJý‡lÀ›í•o¨ÆXêÐk’\UO•ßÐwz9 ªÐz¹òú\?ÔV]Cü³Ô˜UÏ™®™L&×;ï/Ñõc0jtý¼rý¾˜Òçú)A‰·jͺ‡{|Oç~¨?h=0>/{â—+žoÅÖ¨ôC9(-y®_!t‘d ! £ñÁ˜;¦t‡¡qd¶šÊ©k5~Òø5‰ºTz™J1ÉV¥ +ßj?ˆ«þNY½‚M}Ðq%+ÝA +$—ŸPCâúé{½Âzt}…O× +Ý*³)}è!¤ëEÐõ#“Éäºaçý¥J¦ëÇ`dtý¼rýŒ>EÍݾ½¼åëD? òÒo¡+|ªõC ‚tuvpnÀgÁæúEÇIÊ稻' uc¨}Ý’8×OFBªUhâب¹^χl+|®mÛ.åGkå„:$¸~ÈŸÞõ“1¥jæ£ÎÆ +Ÿ"Ïq…q +>ôRõ"èú‘Édrý°óþ’áúµ‡°Ö¼/t@¢ìº·Î`dtý¼rýÀ½#SÆ2/qk{êøí˯˼ œª+|ª;¼¬©"ã<Õ2/’}¡Fu¦wýäó[íÕj'j=YæEV†ŸKé©8ׯjµ‚(ò[×´”ƒª‘œrЂÍ_“š(}*µÂg© ŽbEW‡×O>ë^d‚ë×5wY;´3<„J×çNâeU«Nô“éú‘Édr±óþ]?£A×Ï7×ïèÐÔÄä¼ô;qúLUÝ'@NµJ@9É®ßήËjrœ¾îe!©^î ¿é ½ë×57P•¯Ö3ÙUùr}™8ׯ+Tgê-²£õ×Ê8¨(8]“ª­Æ{+d-SµÉúþô¸:$¸~]á >ÙEFÀ&¸~…Ðc5!é†ëך‰jåÕº`º~d2™\G켿D×Á¨EX¿áûB×/ŸVÖl¼%týºd¼eèú)“n`jptÞøKcù V­Y§¤J8Nô;2+'g¡Ž+(„·w¢Ý÷V¨%ëq-ÂyÅ‚ ˆ(œ÷—*úNǧóápä[)Ê®{ë Ffaý†ƒskeÍÆ€ÕõÓÇ|BµÝŸ•~Ë~ú‹”ÒïáÇ—]°¯ZÛSí™<×\G,³­ï÷–ãZ„u#“Éd²Áî>º~ F ‚®_Îl¸~ºñ§L:·ã+†}NV }¨'öMcùÑõ«S@ñ=±buk¸ M®ADÁy‰®ƒQ‹ ëçÖõÓWzÑgü}90uê› +õ'õ ȽÔ;ôY~Ñ5^èúÕ#‹Ã«ÏR¬Žk>ÔL&“É;ï/L×ÁÈ$èúåÏq®Ÿaü‰÷wçþTÊ@Nñû¬–'únA× ¢ŽàCI1]?#« ë—?®_ÂŒ¿/C78:õÃD’èÃVY×Eò§™å§¿ÙLÎãZ„u#“Éd²Á>ô—èú1™]¿üÙpý ã/êý]CS½#SWƦnþcV‚ñ)HÇV•Sí›lùÑõ#r]?‚ ˆ:‚ý%§óá°\Š²ëÞ:ƒ‘YX¿áàÜZYsrTˆY¥Ÿ®þÒ€º¯vðál]s;]?2™L®öÁé«pýrAÐ ¶ÁuoÁÈ,â¾ä¹µ²æDT‹%¨¿ª0š9Y÷Qúùƒ®ADÁzǦëÇ`Ô{Ðõs¸©VUéí¿8ÑGÝGøƒ„¶@Aøç=%“s]?FÃ]?'(ÄH¿¨÷·ÐŸUu¥á m ‚ð Î{J ëÇ`dtý\¹~…xõÀ™`üÅe¦î#¼Br[ ‚ ¼‚óž’ɹ€®£áƒ®Ÿ¨[kœå'èR‚ïò#|CÕ¶@Aøç=¥ +Ðõc02 +º~]?AÜD¿Å Àh!Ô}„HÓ‚ O༧dr. ëÇhø ëçÆ Öªû¢0aÀgòîÔ}„s¤l A„pÞSªÄt>öKQvÝ[g02 º~Î]¿B¢ô[¢åGéGx‚”m ‚ðÎ{J:o `Œðg¡b°ëÞ:ƒ‘YX¿áàÜZYs2nªÝá­µ;Ô}“)2mŽ)'‚nl”£ÊWG$“óç4mLnB&?Ñ~"//=èú1Ù„õøÌ©•5'«[kÜË2Yæ…Ë{þ j[ ‚ üóž’Î[óbôCÄd×½u#³°~ÃÁ¹µ²æäBø¼Wùq­ÒË æôÉ̾6ò£kÉôþÈ®8¹-Éd2Ù+v>>ª’éú1Ù]?'\ˆy©Ÿu®ßâÞçžðV÷BxW'ˆèú9aëü¾¨ßwòRñîx’èÓ9‘ßêýqÆÙ9ǵêF&“Édƒ÷”œp\¯ØuoÁÈ,èú9á4~ßéo‹ºÙ7ºý‡½Òx…ðÆÞ$øÛ¡‡~ôh&E­mÛŽ¢”éü¼ê tý‚ êÎ{JtýŒZD¬ë—W+kNN˜å§ü>¥ûD_Tb/åý%Ìøóá‰bn¬¤ßËù°ãÜ#Ë–wöÜ<Ô?þyÿ¸óóª/Žk >ÔL&“ÉûàÁÑõc02¸çÎ[_ó–ãŸўjµ5ÎÓÐwÛ>Ú¹¼åð¦Ú­êûêoy úÛJ¿¥—óƦ=-/¬÷áŒê‘ãZ„u#“Éd²Á>ô—æ™®ƒ‘QÐõËŸÛOL'ÏòºfÑ}“““«Ö¬“ц ++žoEzTý ŽNUñçÃ/K>œ•ë·aÓ¨?Ψ9®EøP72™L&ìC©‚éú1Y]¿œ¹ýø´áúº¯0lê }··ó€¡ûH×ÕŸö©Þøð–‡;Î-ûÙo¤œ–Öïë¹)÷|¤?¹b5Y¶¼uÃ{‡úÇ%Úgå+mHA:¶"TÕ«mÛåÏ'V¬Þ]Q¿›;Îý8,[uÅ„<ϾÒ&Ei» +#ê·)Û  &²Rã*Qü©ªªï¥³:#µ•tÝõÃÑUù¨?òGÓõã*Vu– + Œ’q ç.9q¦rÖ`ý¬‘ymÛö•s… 4ã:XG¦ß ÿ;¤Ë?W@ꀪÿòÇ]š÷"èú‘Édrý°óþ]?£A×/g†îk×\¿è,¿þ+ÝgµüO=×* õ‡r’Ç|vœ¾!Ë•àE°qG·ÜíÅ#{wG7>wöÜ„¾Ðu 6‘Zì‰PŠ6D +rªñÐD!ÛõP J”BN¤C-J ¢›pÙK$[t¯îP)E&{EµÒ߃Ê¡L( Qºë§— Õ#jWjõVûAùülx"ÑßAÃõC”†ZáXRŽè>©?×gªê:ˆÎ‚n&G4ÎTçô{¡øê×GÕ×AT¹\gëÈ©A×L&“ë„÷—L¦ëÇ`dtýrfÃõ‹Îò»zÛ¢ûxVé÷dËÓ*®þPNtÆŸîúí꺌ÝuŸN +nmÛv•5¡¢è•ZCŸC§+,¨']Ëà³èGÈ–'W¬Öˆt•»+ZÐæÖAõ#6ñçæŽsÑš+§Oj+ÇÒ]?‘xÆoRt­'ù•×©×G/»ç‚ÂõZá³:®HW•Ÿõ#ÆÍ"\Ü^ÝsþiaN­ëçb½yô"èú‘Édrý°óþ]?£A×Ï×O½oìž]ú­}ýOVé÷ÂK¯Z¥ʉ¾ãÏó !ù ŸÜí‘¢ë¯îP€ˆ:3´´ž®}t…¥Æ‘ê(„êL×2F™JcÊÖ á¦ÂœÆ4 «0áÛÚ]©I¡"Q7ä„üQ¾¡JªC¯‰ªáúéu}ªLãŒÔ5Tg­ëku¦ÆÓï…£ã,ÔXS]­%[¯@N½º~d2™\'켿ä„éú1>’\?Ú`ã1ìúYG{NLL?Õc•~HÇÖ¨ô›˜¬âúÉJ/‡úÇ¡ûD ÈØ?|Ö•`AÓ8†Žyy*§®°ÔøIã×òÐSô2•W%[•*DQjcÇùYÑ>7wœCÉÈ/c)Ÿ}¥ š´jùQ×O×e¸z8Š1~R‘¡ ™àú¥ÙëópÀ*¶*wOwý¬%WÀa/‡™L&“ îÒ>ø}s®ßÖ\ø³°e×½u#³°~Ã? ]¿|ZY³q{èúDy…®Ÿà¨h´Jé§ì¼‰0ötì7tßÆ÷·È&Ãø“BT™ê(긂îðö.x2xÙ­s‚Cá€Ïí¡…¤t„@I?õ§(¬h! +f–ÖãvÏ µInwh¨í µÄT¯˜ŽWÛ¶+iiÔÊŠ7Bå¥þé§gÃTý©|F3E6îq{'(—+ÎõÓymxòëEÐõ#“Éä:až–çÏtý týræöD×ïÈÀT‚ô»56ÖÿõäÞSϵ‚ŸêAJœô›˜ J«êúÉ^Ö ‘qž¢#ä3Ò!¦Ô¨Îô®Ÿ|†¤ +9Õz2ÐGP²2ŒØyÊ)‹sý +¡R+ˆ"¿áKªúÈAe#Ž¨V\y(ò^?Y—F¤¢Ô +Ÿ¥&8ŠÕ KvýºçæBÊ™î*Œàº©ñ™5uýd¬©Ô¹³ç¦¬ÎšìúWÀa/‡™L&“ vÞ_2˜®ƒ‘IÐõË™“]?ˆ5}®Ÿtx«Ö¬{ø±Ç÷tî‡úƒÖãó²'~¹âùVlJ¿`®ßÀT‚뷫벚‘·,\õ±;¼Ûw‡v•ñrIOïúÉŸRˆ”¿9&Ý¡°Z©½ž`wøšAœëךê-²£Ê¦ÃzP½bj«qjûµLÕ&ÃÎSõIvý$\Uã’ÖÔõëž+ïk‹`5j®@­×"ò9:A± 8ï/Uôòbº~Œ†º~^¹~Æ +Ÿ¢æÆnß^ÞòŒu¢ß¬Æyâ—ÈcH¿ª+|6Õ[ÝÉÎ9®EøP72™L&켿d0]?#“ ë—3Wë×72e,󷶧Žß¾üš±Ì ÊYÐ\?‚¨)èúAÔœ÷—èú1µº~¾¹~]CS“óÒïÄé3UuŸ9Õ^(åÐõ#ûÃq-‡º‘Éd2Ù`çý%ƒ·žÌƒéú1>’\¿\ZY³qû »ë§O÷7þÒX~‚UkÖ)é‡ÔD?º~„ˆkÎ+FAD±ÕµÓç•ë79íº¿Î`dø&ÓõóÄõÓßêÕvw|Vú-ûé/RJ¿‡{\vÁ¾jmOý}îtýÈ9®EøP72™L&켿d°[×ïæ}×]v#‹À7™®_Îl¸~Öé~n'.V ûœ¬úPOì›Æò£ëGä º~Auçý¥ +ÎËaŒë_ºéºËÎ`dø&Ç=ßðÁßoHŒ¿ÐõKó)êïô7ê/Nê{Yu¥áq-ÂyÅ‚H|(2]?W®ßáÁR©ÌŒúŽb)ø&ÓõËŸã\?Cú‰÷wçþTÊ@NñûRJ?ç ¢©@× ¢ŽàCiž]»~àk”~ŒúŽ¯GË ßpçîX³áú%«?Yõ凉$ч­²®KzÝGéG䌸á¼bAD>ô—*Ø©ë'|÷ª?F½Æ?~HÒ}týòtý égU…¡©¾‘©«cS·þ1+ÁøŒ¤ckT÷Qú^®ADÁ‡þRþœÜ7>ðUùâ ŽûdÔY”ƒ)~e|{“Ÿl8o}ÍQ!f•~ºúKê>Â[ß|º~Au/œ>Ï\?ác—Ê—ÇÊcãå)¾ñáqàû‰o)¾«øÆVýVÓõ«5GµX‚ú«ª£™“u¥‘?âÚ‚óŠAQ8ï)9á4=drïë¦Ósg/Pll^Ð5qûtÞú›qS­ªþÒÛq¢ºð m ‚ð Î{J:oË‹«§úå”êƹsÈž«¿¸váà¸;FúE½¿…ø¬ªû(ý'Hh A„opÞSrÂ>h¨zäZ+¾ŽóÀT†ì³tõtÞú›å¾'Í¢8Œ¿¸ÌÔ}„WHn A„WpÞSÒ™®ŸÏ¼ÄQÙj:¯xÑcAüskeÍÉêÖgùÅ º”à»üßPµ-AþÀyOÉ`º~~òâœ>t™Ð+õ—[+kNÖï®qý'£…P÷>€®ADÁyO©Âõ;•}`YŸœŽÒ_Šr nú¦ îè ÕPŸ› >Ô/'Ÿ4`äštöMÇ]Ã¥þwèúùÄÆ Öªû¢0aÀgòîÔ}„sĵ…ÂE~9 ‚ üº Î{JÓõóÓð´;bçBÅÔØœn¦¡õJÒõk$ŽÞc“Eߢ-?J?Âĵ…®a÷u#‚ tö«H×ÏC¶zU©œ¾Ú§ÀÙ ÿYÕYÿœÆ 4®’Õõ Ô_ŽÿÓÜZYsrpk½TFc^ |‡JmŽ57T\å¨òÕÉäü9®-ä7“L&“ýbÜ™÷” ¦ë秜ßgz^6_ìÓ³¡’j8NãVõþòüŸæÖÊš“ƒ[kˆ¸—;d²Ì —÷$üA\[8tÁ}Ý‚ Ÿ_ð«H×Ï7N3¿/ÙéKï¬íÎüGŽô„Z-ÔŒ:€i¼¿Üþ§><ái`n­šßgp ý*½¼`ZßàTùÝg+™ÞÙǵ…_ñ;I&“ÉI×[FžÌß÷{Ø<™;wÓê…æ÷Uú_Vlï™P5Wwãçý9œñ—[+kNîŽy©Ÿu®ßâÞçžðV÷àÆNù"áw6óéºzAÎ÷BÞEcqÕÀ=Ù·Ñ_Íéú,^›¹3sãþÌÝå“å©éòti¦<Ÿ‘‚ô;Ê7îÍ\¾=3pm{ÕºnUgùÅù}QO­¦.Þž3öœýA}ÎÍ=Tlœoï®_£r÷Ü3:æúuû¯¯Þ.ÞºWTÏHA:¶¦™ë§?!tþ “Ülœð;{àk/jH&“s‚«•¦„züKvô2äôµÂ=¹iû5ïc§ð_º†Ëßß™,ŠÂ[L`ß«wfPN¢äY~q~Ÿá…%¸f{<¨VuŽ;#ý¬«ztý•«Z~úĽ¡Ñ©‰ÉbB`+òÄ-õIãðÉ£k>¿0×µ#¢¡‘¹±åõxªÔêbp7ö±Ø®ßÉïÊ7ïF^†Qœž¹~o%×ÚõÓ}«è{ú6uô?õÒÛýèQÁ¿þªuåºMÛŽ|¯{dm|ê?Þ’ /[ŽÏïîíÝsöqîÀ/¿³S¶þþ/Ÿ­|uò¨œ¸øɉÛ/·í|ô‰—Λ;ε¬Z¯RèúeÈgÉdrnl]õ½É9îI¾õ-صàäÆý7}è/åϵn##·-B,v+¥ˆ… +@¤\½³˜³HåúÍ­dòÎ'§£Úç׫ßOÙv³³ä4çNéµöWh«½½Q×[ã\?赟=».ªøæ¥_¨éT]÷ÿ{÷9I‡6”ùùõœÐ’þß{Îï>óœpÄ@ú©÷>„ºïÓ0áî‘ù÷ÓyëkT ×ÏÐ}ÝÖ¡žÐw{;X ]WjاzãCÂÓ?(e?û”ÓòÂú}gn*ôäŠÕH|dÙòÖ ïúj\ÒßØ´gåïÚòHhX#ÄÑ«mÛÕŸ»»GTosçláØúÆ_ö¨täYùJÛìCžßµí.Œ(u€ˆšÈÖÖ7Þ;Ô?.[Qw¶ª«Öë{Ú-®æ¨'XªŠŠ!§±ïÆÝú…EMDú©«œÈ¦=*?ꆪ«§Ÿ»â]1\%9X¿bK>õèÿn +®¶°ÚÛ;g½í€bÒ5׿­œ“~áHË…º~º:ûÙÊ9Y§•op\%â~Õú'ÝõC~='ôã¬ôÛÛkœWðˆž³oˆ¾ïo®_í4`n­¬Ùxë‰âVÍõ‹Îòë¿jÑ}VËOðÔs­’ÁP('yÌgçé"pDÅlÜÙ-½tÑ;ÐAø¼¯ç&” D‡Ò&ØF~¨#¢D‚œj´$ + +¿X†¢TZ9‘µ"%ˆfÁQd/‘6ѽºÃq˜J Ê^J*®Zóª% =êú¡©¡ü)W [‘S©0”8§Èt5—òŠ‰î“s#'®RVçåçÿ;K&“óäšj=ßxÑgZõ +,Hë-TÆÕÓú?u®õœpZG×°efß"Dß´-¡£³ÿÐ3LF)]?¥nDï|pàÒnù‚nÞ5;óàƒýÃòç³k7î:¥§þ¥å·²ÉQYÍõ‹ª3¨¶yK.Fý©<í_Žèéoÿý„1ÐtýpDH¿J×OW0è4Ô}`5ÏQÏ»¡ûÒ»~iZñ‚ØyëkTÞZéúEgù}Û¢ûxVé÷dËÓ*®þPNtÆŸîúí*\ÆîQ¯ +Ê"š·¥ô”ä‰Ê µ¨‡ÔgÆ­|¥M÷­ðYÔÊ[íƒÚñ§Êœ9*{‰2Ú]1æÜf\ç¹E×\9ŒQ¥맔©(P©-®›1TüÁ¨–LyÅ Ùô3Âg•séçåçü;K&“sæ…º`ÄKW¸©4¾.De_ÑÊ ªmô꼿dð¶Syðg_…W Sî½Z²¶L)ú¬r/.­þrv$ííë¿9s|¯úŠÂÁw¯w*p²Î‡¢æÜD°ºËÙÐí:;û®öy]vf*韺þèÇO~||LRv÷܇þªðÚzîÏ»~{C×ïLèúíÕ\¿09çÕÙÊu²/$çœÀ|WR¢¬òOK‡&•ô÷÷IŠQá5m;æ]?í¼€­‡¯ÊûßÕu+Š¾I¹VrÝ„õë)¬_íd^Êw5·VÖl¼õdèú], E"i!ÆîÙ¥ßÚ×ÿd•~/¼ôªUú¡U¦:Š:®JŠ£eÕú@p]* ¢ÿèU¡Þ¹*£UëUº˜SúŸ³jåRY#ÕHÂßµµ¾ñž^¸^漧V¹I“©’Žô5+Z㌌SV)å! ¸µÕpéçåòü%“kήu–oÜ Nß‚4`\ëS}»v›/·Nç¦t ¶¹%U1bªn]¿on¦Õ}U_›«jÀ”êïÛ[‹iïÆ7\`W šîå¶ê-~ï~Ú7;ݯõÏâ—½¶iŸòÑÚ_‘Ñ’ÿÒò¢>~2ÐVoÏj+ý=ìj5)’³Bú…®ÜÇÇn)!¶æ­O>:v éP—/½ùñ³¿{w×éû»zÆ?꾩ò¼±ù IyiÎËRʦ®Ÿ’~¡ëœ×_>“œ ê9ûæúO¯„8p)n´g´Í.b´ù⾫><áiH®êúYG{NLL?Õc•~HÇÖ¨ô›˜¬âúÉJ/‡¾߸£J ¹~øðÿÙ;Ó·¨Ž¼ýÿm“·“¼›hòbbýÅdf"ÆyFÍ<Š:š‰bæѨh4‰ +¸* ¸%â.€š¨€Y\â‚KTV÷©owQ]§N¥›>§áÛW]Ÿ«¨®S§êtŸ¦îs×Bc ¥_ã 1ÇÍ=Òk=L¨•õ•ÇÜîOñ¶;ÒÏcŒ¥æXIný®c(Ð×W +^s÷¹´3º[¤¹~hS%?·+àÕOI?S ³oW˜·ÿ³L&3ÏœšNŸ]ýYtŸêÇåFñiŒªþ´O6öþ’Æ‚sýŽ\xnÞcÝ®û‚+>_ hWƺ¡ÎGüZçö›T×O:Yäm9tfð /ìÀ…ߥ³¦…ÿî:)5ÅVs´ÕÁ‹ŽúÛRŸðéÌT<8ŘK¥|säNj< ”`]§£þ¾n¾nÌí&óÔsýÈßüÇçåÆ3.^³+å^BSWÌå:÷o×O2Â76owÙT£¯ë§J?i罯ƒ ÍšîÛúõNzK3þ¨_×O5eR/]Æ´áøðB—‡å呹Ý= +PLÎEÓyÛ½]?£)æÁkî>…­µí]¿€U +~Å4ko|Àg.Ú•„À®“9Yié¸G.Ù©õyÜ´—$OèU­zëÕ6hdjl˜‹^ùL½Gµ&AúŠ±÷—2ûNy¢Óö=ùùÑh6ºOÓtC^F Aýýòȧu^Oxèiøë'&²•V¶ÌYº^.ómõÏ·Š•[žËõOÀ {ÏÍIo¯€<ˆK¿Osý(]uýÆW‰q»~J {Ûï/úïNiíá,ÿÜÚˆtGÓ¥½?5Dß2áһĴë÷9¥h®ŸØƒ>³]KÖ©*rþçåÈsˆ¦@B÷ Ž_1×Ó›€®}öÞ_žðLJÚ]¿–‡,ÒïÁÇ=W€Ü+ZP ž9߉/é÷rÐ)Í×õkŽ ­©BóìR‹Šˆ8Ò‹ÿ³]ÎÎ îúQ|ý®c´ò ­–Ù.æ©¥–yëœw&Ý./×|.¹&òk.˜¬OÀš»Ï¥– ç?Z\?Š;UkÎR” ~ÅhÖ]%”™Zæ%GíJóð–ÉdæŸÙŒóÌ~=“œ¬ˆbIq×3ˆ÷gœg§õåÌóøf¬€¾ã?ÃÎø‹½¿¤±°\¿îÛ†qžvÝgtúTe7èý2 +@£ýDý!±ç¶­uÆç<ò9øë—ùÔ‚|.rúĤ<¡ÈL”y¢ñ€Ø$BúqÒ­ Eª‰@­nr®Ÿê÷Rfü9º/ðó®œ{y»Ë¦í®Äš:×OÞÔxÿû¯•oLŸq°±êZDüí÷ÿ2wa1ÞuK?”ãH?oׯîÔOrF^j-MÅrßJàÿÄ"–!=¬öô¼6Y¾³†‰Hw6wøLÙÜ¡ýg/ÇJ=ê ÷D ÖRÀš»Ï%ÎB§@Å,®_À*…ºbúæ9mWì]?&sòÑÞë°{sÁÇûÞ-Z +NPù–u,îžÛÍÔÇtóø‚P–SÝv—þ7yõ!}ûŠ±÷—2x.OtÚžõóö›¡uŸ”~nѧJ¼—¦—QZì¿€ê­ðj£ÑõSŸ3¨= ™nšÓçŒöì*ÉD-§×±–<^%KÖV×ñ»/}ËqÓ]¹³ƒÅï«7ÍØ 2Â<'Þ_fõмàà´»~Ú +Ÿt#?|ôhÖßþÇ8Ñ/%¬Þÿ òhÒÏw…OÞÕ™OzÝ9ù?Ëd2ca¿Oögþ½¥aÎÒ/ÕŽ;%,wïÒ¯?oŽ¡Öº-‡ºP}§h}6íØŒ1]™n—¯§í¦¯¯Ê©n½“–~áFŽÉÏ7öþ’ÆBqýŽ]qíã`”~–AžÆ¡_ôz‘ù2j@Múª?cmÑ +´Å«¥îqÝîçÒÉÊp»Òë|jŒàÚóx9qŽšëx™^5t{|^~Ÿ3TU¡ôþ´’¾#Ìsåýåí.›jôë×ýËö´ÇkmO5,Z¾J»ÙQN¨¹~8Lh`×Éœ|Œ0ËOö …Ð[¯öÝ)‰uý¼À-‡ºg-Ùwæ¡ÅõËÙÌïÓzÎ*½¼?£ë§Õ¶\¿|1ûûâÅYIùJ?‹èÓäÞsåå–ÆÅ|çý+ü|ÈçÞ·ÏÕÅ÷|\׸¾½¡Æpº¿ù–w½Ê‰_0›1Ÿ±ß}“•^®ŸjüAµ=þ=õ#ðö{”~oLŸA‡àX£îcéÇ!Æ0ÿg™Lf¼ 5Ú“ôTÊYëRfö¥û3î)÷-­¿ö+ +KÕhR-R™RëÑQ2?©¶ýg¨ÇR™ZNZ” éGõ¼¨óÚª6j#t¥ûÒeÊšqÔÚê6ükHï€F$çnkCõ]Iîmmè–q©篬 /­j¥Î•SÝ–žëç=fÌîÄÞ_Š…Ù܃ÃÙZ~šîSEß3åõ4ýR5¨©¿lŒ?´Ë«Õ^wº¦bÊÅSŽ”îSuPxõg¡QQ|_7ߘ6óg½¾Ï·"eÍ®“o¼å¬à·ª¢)ºtÍéËÐ}éÎ_Y¾¸´Ò8Ò¿›j:ê¿lfüÅ~÷MVj®ŸqÌ'„ÛÙÞŒaŸ–}µ)½8 +DZüXúqÈgðº#‚Bg2™Icµ=Õa“ª. 8×Ïuøeˬ@÷\?5§¦ÚPU?Ò±¤ÉÔ‚3ZÕC¦Æ|z¸~FÝJuFÚ ý=¹<‹ÖT¶H×âè7®©<™–~NÒé»®,§~ãø\¿H®â±÷—baä{¡û¶y?·ô³[~nÝ'ÅÝ¥®ž¯¶};gþ¢7¦Ï þˆ¯Y¿éRf£þ,õ÷ÚëÁ²Š¯ªþV”ÕÍ^XrèÒ —2Róň^éFf”éíô}0å¢5»ßwúá¾Ó û6î=‡œ¸‘z­3¸-r)Ów>.7¾®ûjÎ=v†´ÝmψÞx{V@õ—͘ÏØï¾ÉJrýZoØÆ|’úëèÏP^PÍ€ü8* åÇÒCÞ¾~^wDC÷hz°L&3}]¿ôT8'U¥ê² ®_z¸¦‡F“£.½üAud¦»Ì ®Ÿ½|/×O¶ÑèúG{Ö§WwQÇp¢‡\ÝzÛ(ýT׊úkÄ”@rýÈsâúá—9öþR,Œ|/ ؤ“]úùê¾7{ÿ¹ìs˸/hÀ¶Óg5ûOUrØg4é7<úÊëÀ²š“ü¶-Û…cVd!ÕŸq´¤QÊ49t•'Á)÷Ô´™ŸDÉPñIâÔßís»~å =ŽÜ¿ˆ¯Þ~Äâý}¶éÀºê¶ìÇ|Æ~÷MbBý}ÿ£ÿ˜Oòþž |!'ù}<Ú“CÒÂÉëžwÄÁËìú1™…J»ë·óD¿:NÕnA\?MÇ©Ê‘ô×~EaåÊõSË7öµ"¸~ž+|*k{Òü>ˆ8ôúhÀgU˯Åõ“3©÷H£I#»~øeNB)ÿŒv/ܼoÓMFéç5ÔSÓ}OŸ>m>þÙ|¾¡ö`#Ùšú³¥^?ÞÓ[mÙÁSsºñ•Æ=È›óS^såܪÐPšIÁmÜ×!µÞÎç‹Öìš³d}ˆå­3ø¼V¶¡™‰[ºåmŽOê Ïø•0þ"Õu>ƒHÜyâ§ìgüÅ~÷MbVž>zÕ<æÓ­þhÕ—/m¢ïÒº.ÁuK?ù Ç®yÞ5}~‹˜Lfbiwýh]9nñšJU—¹5”–BZL®µB«²$)5rÒhÌ\¹~4¯P®CúŽrºUaѲõÒõƒÎ‘©=-sývŸº§uÝ>/½t/ó2e…:ïÏíúYFŠFsýö_HDI²º#ODÛ›¯Ž…¥×F~A¤ŸjùÉu]¤îƒš ¸à…Õû¤úSW}ÉÞøCµV‹o }gFÅ“zž0"ž0 KÖu>EÅvëûÖ –íï ‡³–|{´wÆœ%‡œñÉßÞ¢¥ëË{YälñR<0ú±ªUMQ©¦ï<Þ¨¨«*´ó‚ˆ‹‰/d6wØRß êQß½IG¡Ú,X匹}kªäè¸ËƒBͽ¤sí?ûçu2¼= ¿ˆË3nªéL5ÁªµÕ­ ˜êû²Á[‹üx«xmÂg›êØØ5„”ŠÆ+Çeœ»lƒlÚ:1TÖY~ +òsÑhÿ&çí.›‚D8Ô5ÜÞKú‹„©³…j#ùFRnèÔ¡ž_‡~}8ôàiJ‚ˆ#éb‡TNy,¨–)Ï%‰ùé¾±‰e/“é°þ²øþŸ7pwÇH³èi +“Ðßf2Bß}ý¶ê–så !‘H£ióøä¨N-…ÔYz#†>qx‹:þS›˜+×Oª?õì^+À-Û ]?pÑšJÚßçµìë‡øg›húN}æ¯uD«ZnK×O,é™áúÑQå ãK†¢*Äé4†wýðËœÅW®ßÏrlùIÝw©«' ß§†æãßiê/WÆ_ÿÃ1µí^3|5gŠÖx¡'e5ˆ¯ÞÞ|èÒ é4e¹ê‘}{´‰à¡K4²—V¿Ä—ŠI]/T[IF®“¹ãX?J@þšs5çS %Ûš(ÔÜKÄ¥«~ðÂsˆ¸åk¥‹G¢â÷ÇIé(ˆDÜw¸‘X²­qÅgð½óñbäÄYH$V·ÞÁ +èˆA1«—â‹K«è®‡ŽÃQ[º.!Ž·œ5^.;ZÏñsÏ?¦8Òñ»Q×ñ´®ãÉÎã·p…¿øú(äsNÖùŒýî›ÜÜÓ¡ÛpFãOõþ‚õ@¶ü8$'ìé´Ý‡ºxÌ'“Y´¬&gÙ}Ø8c¥éÛ:¯ñoã;5«£¹2×ùTv?÷ŒqbºÏâú%p´gb]¿c×íP÷Y¤Ÿq¨çœù‹Âê>„·ÞûH[õ%WÆò©m7úJn×ReöÂéÜ­ØT'Ý:!Sî?ûèõé3×T¶ˆqž/‡B"ñ²ýBߥœ5/×çš»lƒ,ÄáPLÒw¡ËV”ÕŠuD_@»á-Šs䪴ïÌC±4ès…ÔŠ¼¿ÒÊ Hºuƒ¬s\EòûÒ\[íh:ˆ5ÕË£8"h/Åi7@Ä¡OÉmìrîYÚöe÷)g—uÕm„”Ž¦-[¯^[)KÖU«®+»~Édå¹áã?èNœêýIçÎíº©åôõûÀ ÷û˜Ì4]ó¹#öt†þoËd2“@cï¢É4Ì2¬il—¤ÌéN1PŒã’”£¿¢Q+M;—ZOKÏ¿ÉIè)iL¦ëwþVhËÏ2ÚSÕ}5"è> +;ªöÚ¿hÒ/´·ÉïÉö„Z©xmµ3äRX~µçŸCEö‡?þiK}—|šñç¿-^´¦Rúz,(qDÖ¥Áåeµˆk»]¿šóΘ;÷«ï’¿¦>!˜Z!vìjùõ5e^m©³ÆË<ŠCîÉë9{A *_/ê,E!uîg/H—^ˆø쫧棙óµô/ȃ£äuHË«¶!Žë&äaCæ3(TX]ã…]¿$sOÇ°ÛŒS­:Íþ ´ܧ`ËCžÃÞNÿ;b¿3ã½?&³Àhqý{ìîçµD¡ÐÞ"Ù®p- æýÙ©¯áÚZ«§Ç,?ç×8 }$‰uý~{Qú-?ZžªíÉ“'ËWý7²ô›ù׿££úËrÌ'ÚëûäG{Â#çèAÁ9K¥ý¸ÒªH?é—Í_Y>gé—©ys"RhÜæëoÍÜÚУº{^®_y㔉Õõs”ãüUҕí<åbß̲ÇΓuX\ZY´l=ÅWPmE\>]ÁQ¯‰¥“,O`^ëñÊÇèLÏáUgö‘¤§48‘œÙ¯…Z,¡øŒ9Å«·A\žZ}ž³§Ý™/¼÷ôoìúv »]9¯yA¨kôûò4ËÉì;Õ;RßôŽ¨»ú.“ÉŒMÞ®YKwÌßó z¬oùù§±VZýíÞÐéÓŽ +â÷yõ ð;{侮\?ë–>£=-–„[„Y~j¸~㦗ôsZ=--Rwyò̧æü謪Ö;PaËËê>X°JÎì{çãℶ:tñ媊¦?ÿmñþ³)ëd"?Ô¥¹{^®¢#'Ñ7¨–óÁü•Ò[\SÙ-Iñåkæ,ùR®Ø …¸ªâ0Å—o¬E•WGYo©ïBù¨§å9Œ~='}%ˆ8iI9*Í—kx"aHñ궻o¼=Küé<ÃI9}—i&¯¶jSEãdv?}b×/±¬<çØâ¾ÞŸÝôÊlôûØòãÏÐrg¨}x‡w&³ð˜¥÷7Éh™ç¨Í¹38€nç.ýœJ¯¹™û¶ªgò]¿ï®û%_ég\àºï×Ûæ탇Öö3dü÷ø‹,ýð.ZÝd}ò£>)o¼EÞi®ªÖÛÕmw ¸ÄÀÈJ¼e„ôoö¦ÖÉL»u÷w@½ùþ'åPR™îž—ëWÛñEA79ñóÍ%fÒÑÈRÈ.6¦çýAëAýÑÌ>Ù¶Š5^'•MŠœß¹Y¶¿ãÍ:|k&)Ô²FÌþÓVøD…­Ù…8ÞEù(Gá]Zs÷©»hþÜe¦ÍœW¼¶ŠžÕ,XU1{a * )‡&Ó/N_×Þ¥5^pUë:žT¾Š†£L”s೺Χìú +ê.ÒÔ<›÷–ì÷1ãeÛÍ‘ƒ]QîˆÝΪ/Ið2˜Lf@ÚgüÙçýM2ÚÛëöàtïÏà J«C*éþt^®v–ôLD¿(^z}Ï›Lì˜ãÑžÒòƒpË•ôËù˜OgÏôp¾NäïgÒyæ ¾+69ûÓÕ“:s6IùR⨬¦qgg¡•(ƒ³måegW¾-õÝøsÎ’uŽÖK—àxy¤ûDù’ô.â;NÜ‚¨ÄÐhË…D~”Ig¡ûÄv{b%™·fÒ&ˆ}ä28 P‚Åæ)È@GAÒQßí¥¢HÖ+u#B¯ÑQóWU@H"s=iUgöâ** 鈗VµÔ‹ù¹Õ§î¦w|(A‘j±Æ ]½šÜ=¼óxÿŒ¢%¯‰=# „üðÓÕHYX²Ý¹ÙéW? ×¾-VÅý„gê°òÜÈîŽác× >—£g ^fû}òŽÿ0B«D¾/övŽÔ^‚mì;·£Ád2}iqý‚¬ùYè Þ^ãlÁ€sz|š·h †.bC7ßHÍÅ‘=Ãè‡ÄÞ*D×ïÅ°]$ÚÖÁ(ý:/^ÎRúµœ:ýøñãhc>íB«åhòãí~ +ÑàÚ‰O›‘çfUëm1Xô¶ÛÝ“®ŸV¾Ï3ÇKSù5ç(emUëŸÿ¶8ôÚJ¦vÙÏ›ýømIËÓ'ãˆnû÷9 Ï^¦…®½è|jè6Ÿ¼>Úv3íóuúŒû}Ìü°­w¬åÆ؉œ|“pO1™Ì<ÿŪÄÿ2_î:;„HA3HK½Ž2—yf°òìPÎèQs¯Ú&áû“×}G¯ú«¤°ýH÷A² äDúIãÏwÏàÒŽz8þÆ™­ÄàŠOrÁÊòùŸo5ªE£Â¢`ÚÃX²­éüÓŸÞ›»ãXŸ1g(…eT—Е8Å VŠµ:_ÎY².k³hû³×§wטK h¥[÷™ka´'»~12‡ÿwbo “Éd2§“ ¹’Ã*?ED»EcºÅþmIƒ»~??Š>ÚÓKúIËÂíÚ?F–~'ÛÚ¥ôs¯ó™ýt?´]uý¼”ˆ}–ŸÔzFñª°€å¤è¡õ"3'0º]¿Øéû‹Í¿çL&“ÉL&“ ¹’@yM|sæV÷¬aìß“2¸ë÷ðyPËÏ8ÑϽ­ƒ:ÚóáÇ<øbíƺoAñ +‹TéGÆ_®¦û¡íêJ/^zÄ¢û¼´Ò!?åe)Á8æ3Šú˵²ËRÚGxúê¾€£=ÙõKù7œÉd2™Ǫ¸•WŒÔ®F¨c'NëIÆþ݈Ž|°éªè à³Ál¥Ÿ×D¿G‘ô»õÓOïýå“PºoúŒÙ8Š¤A¶x;Ým×öv±¸~êŠ+6¯Í=Ò2“Úl;‹žòRXÙk½œŒáô-3W뺰ëÇd2™L&3ÿ¬J€Ë â:Äþ}H2ƒ»~ƒwvˆ0Ѥßýû÷ûoÝ +®þ^ó³ç;q”*ý¢M÷³7mе¿ƒ}®Ÿç/_†îˤÅG³+8ûXSù™ßgÔzvõç«ø‚û}ìú1™L&“Éœ&AûäMë¹YXµM«;òÁfáèá¨UE˜è&'úA¸AÁýöÛo÷îÝëíëûÇ¢ù꾿þýŸÈ‰ü8 +ǪÒŠ2·»ûŒ½¢ë ¤ùJ´e$ùP´yåJ¡nh}NÚßÜÑtAØpù¥ØÂÒÀŒ<¢|©så‹tFcMÒ}Ý4Ò–×Ü΀ßdɼÝeÌ꼌a`2™L&3tTÉùá°LBÍóÝjvú&žÁ]’€–Ÿq´§ï/dù‘ô»{÷î;wŽ}wò/ó>5Š¾w?š[µ§ySJ?ãt¿\I?¼§­ð©z¾û¹}=„ƒž« âýQO1yjÙóôe³t-®_ðžaý>vý˜L&“Éd2óÀ*öø‚1Q®Ÿ}?w·î3Nô“ÒOÛÑOŽöT¥ßmñº~ãTÞ—›¶R@üÒå.z‹¤__¿Eú‘ñG§öîgoàQ—ë'½?£ß—¢·sŠ²„FS™)º<µz|‘}=éÚs⺩.ªÊ‰ðûØõ‹‹»;Gk.Ôw6öàƒ‹ò©1™L&“É,PÇ•}} ô4Ðß@¯}Øû?¾Ì›ÆlÎ…ëm´§&ý®\½ö·ÿùçëÓÞ9ØØ$¥ß¯¦—”~Ç¿o™þî‡8ê\Ç9ÝÏwc÷hÆŸÑõ“ë½xù}3õ‚Íò³PH¿!!ô¼÷a¶Úçì…%Ë7ÖÖ‹Z½öú›[ê»ålÄ ÙÏÝo~_äõ<Ã:}ìúÅø,ë`WVŸ“Éd2™Lf¸œo…­§”×é–¹~ÙH?šè··æ :¤j®joEúlhBõ²­ÛC-òJúšæú5eÎø#×O:Y›j:ßx{*VÞÐ-”Ô‹ò†ž¢eë)ñoÞDúþ³–—Õ¼óq1¥¿ùþ'+ÊêÈ`•{¼+T[ciÀ”߇’õ< J,sA”Œ³P\T²Çž?å`ªn]ÔY~^3û¼\?Ë\¿,Ÿ>åí.cƒÏ‹Éd2™L&3ÑAo$öQ¹~C#þÒÏ=Ú3ÈòžËWý×{-—O×o.G8öÝIŠÌ_¼üõiï3£_éçžîdO´½)½¶g“ÉõÓöõûlÓY+¨*²Ò—VâOH?è2z qè¾Ê–_HBýA÷¥ÚRV{èâ ™Ó%ëÉ$‡nkC7Ò=}@QÈŠ²ZŠãØ­)}¢ÃïØîžÙÐõ þ½µ0 Ox¦k/åæób2™L&“É̆è“ÄÞ/*×ïùPéçµÆ‹”~Ý! ´l¤Ÿ—úCÛÅwÆà=¹×ùœ»l鸴ôë¦ùz5çJ«Z(þíÑ›ôî·Go@â•í?_Õòë¡‹Îz/EK¿t<Á¥_Š¥`ž«îÛ´™óðÖÚªVÄ¡ûÈûÉõ³yvÙ»~aÉû³»~9þ“·»l*³ºo>;&“Éd2™ÌмâôLbï\¿|×!à®î/|t_é·¿®>‡º/%¦*÷ä\ú=|þªI8Ň…QÙH£=„~Y²®úÃOW×v<–®ß!1zSš®d[ÉCgmO¡øˆ•-¿f,Ûß!ó‹|/+¯QXŸÖV¤¡º†ÊéGé¡ïH0‚Î8Òtú¸ëwYqý.¿Üq¬¯hÙúñ!©Çz‘âÏšó”gõö#ø9©´ÒêVNñ²šN:ê¹bSãñ ­‡”ºŽ' VU R¼® +)x—¼NbÙñþH*דH×9à·4c_÷xÒsïG÷MÄgÇd2™Ì g<&3çDØÛ)ú* pú’ìúÝ{j–E‘¥ßÅËÝ9×}ÚNŸ5J?9Ý/¬ô»ýxL|[¹~) +½ƒPÑØ#½°ò†ñ&Ï_Y¾ÿì#rú@9¶sÚÌO ûÜ;ýÍŠ¬xm•ºÚ'¹~¤ +¥(Ý7Ò}äè•âpOׯöüc1ä©=?€8´!þ¬n»<ˆlªé¤ògÌ)F±Ÿmª£3.,Ù¶°¤q´Ù@ÄwŸºãäÙ|€<>Òž_|}´®ãñîSw× +µ¸§ý.®øUÝEßõ<~KC1owٔ塮¿0L&“Éd2™y ú'±÷‘âbð«Ô{?œôS'ú¥ßÌ¿þ}‚¤ß[ï}tçî]‹ô »¿ÚÞlZã¥É™w6>.1c£Ð;Bú]‘ZlDZ¾Ù Kè­âÒJ©ïG:t©¿oöª;;ìn»M‡ìn»#K“Z¯¢Q_æ…té5™q9.Tº~ Âõ£µhVoo†¬“Š’Tž(ÊÑw„¤ésm§Ì ·¹öâs—mzDÜÉ#®Y²®Z^Ÿ/¾9Š£\x–·]ŒŒýî›ÜÜÓ9QšÉd2%áŽ1™ÌÂâgLJ$ŒR™ŸZð_×îÛæý¢I¿ÍßLò}¥_ðE>ÑvúždéúÉ}ý ìèÝÒª“Ú.~4×êOuýh¨$´•[÷¹]?âÎã}ŽT€£>üt5»~“õÝò©M!  +B¹ë¹¸´ +Òo×÷?ÙEŠC'"^ÞГZ‰*mˆýÊ0™L&“œè¥ÄÞSŠ…¡®’q‡sývVï›PÝGá«mßæd™´š®@@×/µŽåe)ýR+|–V¶Hõ÷Í‘›ôîšÊï·ÖwWµü"Õßœ%ëþæûsÅ6îNþeµ"åU?ªN"Ô%2¸WÚ„`\[Õ"S6Õtˆl/½\?7aí«¶ô€ÏT¤“ˆ8 +Z”å@jʱ1½’§Ûõ“ëy¸ðïJï]¿IÃÂíY(ú%'õ¬=? ¤_ONjU(ª™Éd2™LIôRbï)ÅÂPWéö㮟—ôÃë­÷>ʃô{cú :]–ÒÖx‘ß/×/C÷ J×ÆyÒŸ,XõÎÇ‹)Žˆ³Ÿ»°ù õð¹{ªN„èCJɶ&Mñ©«Ç¦ÓÒ¡q,ÍãÛq¬§[\ZIï~à,ó’šëGúqtQä©=ÿñÕÛ›ñguzv!ÒQ‚ê*B*î<Þ§Ž;…$¤ñŸÐzÒés»~òºmkº†w÷žþ]¿IÆhŸÚâÒ*|ÉÉ‘òeõ)r¬ 2dN™(†;)×÷·Ô£P2¥C¹¨éÒA£±”Ê©Såà^À}ýeu›|W«g–õ‘gQªtË«žRyQ}T/Ü=ª9òÐÕCÍÕBpj¦êR[Ü­p_sèÐÌ*9õ¤wÓjs«ªÎÌÊTißõªÊ6¦+à3Æ•Éd2™L/¢—{O)ƒy¢s®ä©^ƒ8 +.ýHýuõ\̓î£p ¾‰t_d釴Z^¦«B‰(<|EŒóì&:º¯{ˆ(]?a¾œ¿²\Š¾7g~2åÖšóPså=ªèC¼¬F¬ðyYx…U-HÄ»èJQ9n¢Gú™ÞuÔßÌO茎ÖK§;ÒoS-ÅJ6öP +±hézª zm;Ž÷ÉÒ6Õv"zP¦ 9¨˜Ø`bPLo„Ü›1'µ¡á´Yó6×vÒ•I¹~é«´®º•vv@˜Q´ä«b…Ï+#ÚµUü[œy»Ë¦&£}.ŽÞ™+„H©íþTc|w×IEïˆÚÙeÝÜõTSpTJ=‰wÕ«„<²þÚUÕÖQ9)•­ÔÖëš«é²4G©e¦È룶×P=¯zUé +È£¨Lù.Ψ¶t +1ý%&“ÉœL„âK¶ëŽ¸l1»ôs¯ôRºqKÞ¤ßg«K5éçžèg—~h¯zŒ£=ÕqŒúÞå™Nœ¶¢Kpæduw}rÎÔ8O×^íwoÏçhÏfvýöÛBDÞÑéòÅÈKRsŽkœ,¾ªG¦ZtφC\:MÚÙµc¡V¢É”g¤Vçâ¹GWª)äèIÿNõפëgl¹iê»Á¯¹{ ªæ`’s§…üÒ Ô>}é®jßí,(“G™2™L&3ÆÞSR¹»3ODÛˆg‰yÿY8×Ï-ýæÌ_œ7é÷Ö{ù.ïi—~h¯úÄUóûÈ«R]?Gý¥]¿¡ø„'éÌé»ôB¥ú®J£Ç7Nõ,(ƒý,¾mÔê£]•òºiôòûÄ2¼òü»×¹Ü)Òst´jÚ7lösýÔЫþÆkntý¤[G5TÛ¨ùwäîÉtù)[LúVh×Éd2™ÌPŒ½§¤3‘Oæ;~ +!ýŒc>ó3ÑO÷hÏPÒíU¯€qu}mÏ´÷WyÐq ‡—§­í)éã÷q÷²§£æ²-Çí÷¹>ßµ=Ùõ+PFû\4¯G%Í}Ófxíúþ'm …jNÍÛÒÜ4Õã£Õ‰óuý¤ƒ­>î³{ËRsÍY³»~j9h6ëP£vÍ}]?Ë:08—z¬Zg_×Os™L&“É ÅØ{Jáúš<Ë|1þäRŸr{w¼žˆ×cñH¿y¼è]ÊLR!´—Ÿ\Ø3¬å§I¿11ÚS»BÐèÄq&?‹¼­´§V/¼°q^¦•9£R+-©ny&]íŠiúnÔ‹¾¥A˜·»lj2Úç‚Þ~±PUÆw¥3¥¦“Ëæ[²£ÝÄ,BJ©>W¥pñŽ(Þ™ú®z.râê„ÛU,T‰,Y;õAÎlêS)FwKÝç2¦ÊÓê@®ŸWëd}hV#h¯¿zÍIÙ©ï’ë'SÈ·5–£åD9亿 ÚY,e2™L&“„^}vý4þ<0AúÙÕ À'é×ãôkÀô’ïÊüÝÊòÓ¤Zj¼FßÊ=×oÜõSv®Ÿ»„˜˜÷çåôùú}´¶gsòžöL>Fû\Üsý¤¿¦zUÎz/Ê:œAæÖ‘W%Ý(ò¥ëçv‘h-™¢ú\9qýìõ¡•3å›òš¸ëéöÔ(æÜ©®_³˜WèžmGí²¸®Ækîn¯ûìÚê8Ÿ&Z7¾ZKºvý˜L&“™ÆÞS*×õTÆ1ŸÆ¥>êOu5¨É=©øHô…Ò}A¤Úhl»Ñõk¢.Ï‹¼6g~ÍòÓ(æú#¸{Ñ<¸œ¸‡¾¢ô@%~_³·Ó'™ÿ§=Ìä¸~•'rv4HÏ“QjÛ…tzÀòɹ££P2 +‘Ssz IZëÒ}ÒM”ž×Ï·>(Óxv­žn×òhÎêúQfPª9©>F·Ñ~͵zj^ž–‡¼NòOÉ”³ÿ ëå§Ï®“Éd2'”±÷”4æÇ[Œ6/²÷A¶ÆŸªþ4¨j@M jé2¿}nÝÙò»þ›¡í´êˆ{•ã/õ¤û ­œê±*³Z×% CËkEÁ×u™Ð=$óv—MM&awž÷sË\‘æ3&¡&L&“ÉdN4«ãvú +Èõ‡•m¼¤Ÿ¯ú3 +@UÚ_2¿*ú|u_é7DÐ.w{ +EíiÐAPI´ïyØÝr·®K4ú*>Y¯±–ÝÜW²9ïºïˆxÚ“„{p²2 ¿êÙ0ö§‘L&“Éd2'ŽÕq;}çú÷ŸEWFè––—v”[ô…Õ}x¡EÆ–6›tŠ:×OWOBñ¹\ý¥ŽrkI—R{íõ7˺‘D\Ïc,gvî ®þ’ ûš§êÓžBùma2™L&“Éœ8ÆÞSŠ…Ù_·Cc^ÒÏKýy @£ ´¿´c¢ÏW÷I釶xµÔK÷IºÕÖºêV±”)Ÿmª{çãbJœ»l}uÛm·6DÊ RŒ*Ry*{·äÔé­æPêŸý/ÁÕ_þïúØï¾ÉÍ$üª3™L&“Éd{OIgg>Ø|M\,xüÇQ¹ÍŸ¯ú³@· þÒÊñ}v݇V -^-mv–yQ騘+ÃDGéôﯛtÐ˺ŽÇo¼=KJ¿úË/ õ4M7mæ<¤;V`—Ðb‚+6ÕÎ^X¢¦øÒqý…ë×(\¿0Çzñ‹¯-[Ÿ‘îl]1h§¼*åUR)¯dößÀ †¹ëã¿Ç'5×üèµ±?Ž¶Þ;Õ;vºÏ gú™L&“Éd2sIô4Ðß@¯ã(÷æD5·÷Žªså|ÕŸ&Ý0ÚK+Ó}R‹îC­ðjc³÷hOÃþÂõƒn‚²#‰Gc8¿=zš®¼¡›âôVEc½«º~³¬ +áÜeãúEcHïÏèúñÓžIOíj¹6Úrc¬=îÿL&“Éd2§Ñ÷8yÃé‡$½X ®±çŽú "Ã*A¯ÃŠ>µÂ=·m­Óü>‹ëç°{hs]§3Pssêúi¤·Ê»eŠÝõ«íXXRANâ;sŠ7×v6vvæÙ éw¸qБ~éô]'ú‹ÒVãÜeëwïE9 þDiÒÝß;÷ÑYÖV·B±"î(Ð…«(êƒtœŠBº“_8}ue:…EKv}wKóþÄ– ú5̱ßžy»Ë¦&µ±øá=Ý/~‡™L&“Éd2óKôC´Ñ}±÷”2XP®ñ×ÛNh—_^ÅZj"kÛwߧu¡\?ê9cNqÅá+ê\?u—Òª¤#›¶º‹Ñõst\×à‡ K Áö´ßE|Ýî6ûUÝÄñ®~W§3RþOgɺ*Ôq‹?wŸºƒwÕcQÏé³æá]:jaÉ6H9ÄW” *ê€ú ØÕÛ›z~*2UC'…3.Tø}ÿùæ(J6Îï‹}EvýòOy¿¿>ŠŸÜ$<÷c2™L&“9e‰ÞÈw×Ü,(×8ðÂs§¿€ÐW?Ð^YOÔÙ·]¡\¿¹Ë6@(í:ÑO\j¦âßí8ÞKæÝæÚN·»'½BPJC +N:zÐtf×@ÖÉü¤òP8âÐwÅ몲»ýŽSºN™sÚ¬yŽ*ìvª!ˇê$=HyÔ³|øéjèPÙv§&MW,3ûØõ›:¤ë|º/k¿ïtßh{ßhfs&“Éd2™“›è“œ¸žÈ~`º~Ä[GUae×_ae`–rOÓ}ˆô?Ô®à®tät™ôàÔ>Ýw,¥û ­Ü3éHú¥4—påˆÐqÓgÍSSä´>/× +4¥×ÒGÉ’×U·Ri(vî²õP”8jOûÝݧ%X×ñy>ÛTÅGÇâ(G3¦ËQωdÛÙõcª¿-Ç~º/òÓ9¨¹ÞÑhŒvF&“Éd2™“›èŸ$°¸»3¤9¹eÏíÐê/šŒP²Z«îÛA[ÔL.U&…¢!]3,ôŽ£þ>ütµæÙIçBigÚïƒøjì"­7ÎÃÂGƒÈúÐhN\rÝî6ˆ55Eê¯Ã.×ò@÷A—©åÈ’¡òHëAµ¡d¤@'B">cN1åOgvâ +é'ËQÏr óñ»EKÐ(Tï]1Ëï0ÍìK_¢ûê ñ•ûï^(æí.›šÄn½éü̆ §……—“áì8pà0¡!v׃Éd¢’8×/_œ Ñt§zÇw|ÈFæê¥Õu;u3„CÜõ[úeõì…%4/2*½.JÉÎã}»ÛnKÝg\9SóæT‡ã@š©G)Åk«¤+gtý å¦Íœ§–ã øLÏéCœx¡2§QÒÝ èúA?Î(ZràÂSû^~ìúMAýa,‚û–ÓÇ “Éd2™L_¢op4yýÀÂuýˆ'~}>¤k®¹Ùv3Äè ßõ[Ú{GNõŽØé»Lì#L˜L&“ÉdÚ˜/ï½”$8}“Éõ“¼ôËØЈ"ËÃkpx¬ë×è­°»~bdãÑûË–²Ìœ”–S’îs´ž¨áÞÓwÿ½ùRØõc‚í½6‹[×.d]ØÀö8pàÀÁÐK‰½§4)]?É«wG‡]³ÿòóÂy»¬;¶Gsýl»º+Þ_DºK³0û³„=VõÙæ~ºZ­IE“0ÙõcvBz¾çåÐÙ=¾¶›Ã¾> {L&“Éd2D/%öž’ÆIãú©ì}ð*Ÿúçê{ð*'57úVš·•áúEóþÜ%$˜´›­êI®” »~LðŒøuµ‡àNß©›Ã¾!¸ý¤n8pàÀ‡Ibï)ÅÂXzÝ? ¼šè (ÿçW¹­yDõg«évÐ +”ÿÞ|`Ú¬y4Ñoú¬yŸm>pðⳂØÏ]¿‰æ™@ÏÜ|æôµ MŠA¼¿ uc2™L&“9‰{OIã¤týTž½5vïé«ÜNDi(%OD}×ù´©¿)@í:H¯[¼~»~yàñ»j ¾~Ÿêè]üy¸ÿþÐçÃOŸ¿¦"ø‰}÷‡Áâ²ëÇ8pPCì=¥©ãúil¹áø€/;#"##ÏÉÌÈsNÔÚk¯S™‘ñر3rùED–Z7¸öaåaúJÕ'xß±nÅžÑÕɸj{Ï–·Ê«óxž§ú$Ö›~ëäºÿØ´åÅWgÏœ5 †þ>þ¼›ó±”û‹¬_ÔQGuÔQG‹|Ó™ù@¬³g4D(’­ÌHåÊš T¢D¨~S¥îKþ5r(Õ§œƒ©)OÆËh…Ĥ¦f gÚ° þuÔQG=ˆ)i:²~CªƒókíÑÁû­»ËÆS[GÚ¼Ùž'/Ú)¿ëéßoî]æ†~„ ÝÄß[{è/²~ÐÃÈúIM(†°éñS9éà£Ò“–Œ!˜DFmÐÀÅVä%kà;ÆD¦ÎCdÀw֦󱧻OóOSö~Re>Ä­ñ›QGuÔèƒGJR·™õ{ãÜÍ7/Þ<õáï~|óÌåç.GíÒ³—nÒBÝdÌ4>5ô×MZxöÒ3Þ|냛‡ß¬_»´u¤Ícýæ?íA?mª'ý]»vÍúQ2F&ô{ÿJoÎgë'gèɨ˜Âœ¡‡ô«ó…'O‹9{2nGÌÜ›("|mÇÕÀ”¹œ(çÊÙÔ“Wõ“¥$Ó)STå¨y)-k+q• ´Â“'¼•Ô’#›Î²iVÍÖÓpìoÎÉ´ò¡°’†ù8òÇo‰¬èrz!¥öÔñ. gópœÖS\O9ûÔ§§Øc¹†Ò»([:‹ãše¬9"&ʳғÑSZùß²7ꨣŽzpx°òÑfâAR"D­DàÉ3Ž37ZìV;?kÖ:õ“•äV8jîÿ„u£-“+Ä/&v kËZió»”_εÓ9«ÞÐ×hm»†Úõ›iBSœ0 EúsIPœÓ‰:êBM2ù¾—W7v—§N†Ö¬$ +•ú)IX¿óß¹¡ßå+W¬èoåêÿúë¯úis>ú‘FY(WV&aýÒJʃµö€Ø;Ÿ"Aú¥‘93@R3ƒ_º±(ùuŽ{ÓQ‰À 2’g¦/Ói¼RB4Y?¤—³CÑ.GÍýŸ°yh ¶²²~nübîâ`§ d1Q´Öµd²òVùùp|fŽ/Ï}kû®ø°~ŽöNçÌpž°1š%5ÖOÖÓ‡õ¢f£Ž:êÑÐm`ú²úûô³˜óY O\üáÌe ?»žY¸¶ïÍóûß<ïHuÔýéãg¯;{Õ?ý›½¼º±»l<µ9Æ:X¿k7ì{¼Hè÷µúÛè0À¥¿½ŸäÿüaegúM/„~T„›õ“µ•˜ØGãò€2|X?9«ÓÊkà*Žð{>Saeýø·‰D4ÝMfãw4¬ÊZ®ÌrÔ¼”Ö.‰>ʲ~Úž“܉’džTŠ–›–¿cN£ä¿è*ÓVy+MFÏÜSÔŠÓ%"㯚½£1h¥Öú%‹"‹æÓ².dýä\bÙFYOÖoxwš:ꨇT[ç,…ÒmcýN}˜Ëúí=1ÿÐÊõÿýý²ô¾ÇþøüK3 ×änjÕ›vuž|vKju¡~~ûA¸Ö†¿Ny^5óadýÂëdhÍŠƒõûâZôÛ´õ¥ŸÜöëWwíÐûJýÑËW®<÷ç ¿üÿó؉·ÜЊp³~&BÛES’€=è§ØCRêßô»hÙ,¥ŸÛÊíB­‹ú¥6ìA?;ÃEKq$“›1R54‚írÔ¼”ô¶yIÃùôpAš¸‡_ròa–™t™#e(î—.€ÊO,mBa|­Î=˜“-×mv¤ïmþ)Jç¥ÀgJµ´·ÆS\åèiy)½>mÇååÒå¿ ë—sVëâë'̨õQ”(Q¢Ô-Á#¥Œn맾ã`aX¶í›AŸ€‡O4 ×SŸ&è÷ij[ÚP“¨­úþÇŸ!/zpåzú-ŠÎÊ÷ $äf䮑õ ®“q5û†ÍÁú}ú•k­ŸÜÞóŸþùgÿúûG î‘Ð I^ýëôûäËÖOƒH’ßÑà3hþ¬ß´m'Oõ0kû"N{¶˜°ÎÊîY’e÷]$ùÃÚ—,øΣæþZ~c"¡cKZY?XØÚ–éììVfµò=Ùvm¦¨„ÀlOsç+f—LŸ4»Ü‰Ô¼JÚ“¿ ’×›š%ÉnT79[ÒÚ.é?zG‹Úš³.;|jùËš[ï ÈúEuÔ­ÒÁ#¥¬nëgåVv™Eø}ïC+é÷ñ³ÿØ{bž9 +Ô[ËýEÖ¯åz瑹uÛ_ß¾ÿ$ý&ï‚G)$ø#a=ò1: M^gÍ!²~Áu2´fÅÁú-|f‡~ôGÏ •óäø›okvgèwþS¯µ~QFLLʯÉ£ü¢HÑX¿(Q¢Di¹”ÚÌúYÙÄäËæäÂ5y|߉yÄê™ç¬:²~C¤'OôøšM+×½xüìUÿ«"ë\'ãjö ›ƒõ{{aÑúq‡wçÞóÇ}$?¹íן~ö™u‡Ï“”XëõhhÇ:µRZ[©µU»¿uÔQGÝ6Ž¬_ûu2´fÅÊúIâï‹o%ñ÷Ç5ÏõýH¾qTÎö¼úõ"eY¿šD³¤C‚W5JkîáïKCáQ²’í¯mÛ¤¬3 ©“D +Á#¥ábý&OpGÀÊ<»rÝ‹têþÇŸñdsv™%Œöij[dn<T +În?p’PŽP²tÏ–„õcfp.åÁôÉ͵~”ìàÌÁY­¨¡±Ã'˾ó{ÕRòºe?ƒ5¤Ž>IûxucwÙxjsŒ-„~ï~”~wþËòþ ßÚÿ·QR~ï|ØÅ}•C?íBÿPD+´Uñ‰»Î5IåMè£-'kµ“Í^ùöË€†mÒÈ£êá-±IÀÁ$x%›‘à‘RV·õ#m^~ûàÊ™…ëòøÎtçÏíø³K§.^ßydŽpÉ›j­Á̘)ÁÙ1K¨±~tVã‘›–ƒº¤w$²~­Òä Ï«=<¡Ÿ½Šµ¥xf3éíûOÎ,\ÃÙãgÿaÍÁÇ«»ËÆS>q4èô÷Ñ?ô¼Õ'þ®|êÛôOR~”a%”_ðp"Ê°Hå1X”(Q¢´A‚#µÊ%x¤$uûY¿9±“çÒû#”·ïÍó=2÷Çç_b²F}ƒ»4ãóàÊõ`îþ´þåg6ï6Ó¤ø®{äÿ®9õ#}·šðY¿ÐÔ¯Ù´ñ¯S>é#ë\ûº&ñ×™_üìË&úÓ ùgÅ}W¿N2ìúÂF‰%J”(í”à­* )eõ°~gÄš¾<ÙžÌÇ+Áø`Û¬Î;4óåðⓧ.~{&Ùõåï‡t–¬$¬wJíêIg±)¨•õ#½þ¥IÊŒÞÔì§à +¬iµððSí÷¦]ÇîYþd±¨}tdý‚ë> Ðßô…ů®Ý`è'ÑŸʳ÷Q&”ã>èüy%J”(Q¢ …nƒKðHIê¡`ý Ÿ½úøšM¿¹ï1`½ß>´òùí¯ËµZy«±Xãe}ØÆ“Ïœùà¡ô#tjïô¹9µ‚ï µÐïîåO®éÐŽ#³ÖßÝê#Ì:X¿ƒ +oMbæ7v Î|§>|ú£ÉÓ•º*²~Áµô;n#þÀý}ü ÷§@ó“᪯Þ|_!î þ %J”(Q†N‚÷A$x¤”ѧ¬_ÈúI-WüÑoƒ}sQGÍ߈TKG§"ë7D:o¤ÕžVâò·?ÿ&ƒþ4h§Ä_|“lÙh¸Ï„~Qªid«¯a”Ö +ܣЅ¢G›”u‰è!A$8‚ë[‚GJR·õûÛÇýð5Øç“ä7÷=vráZ9D=ž¬ñƒÉw:nò „¥÷=Fg™v¬'}÷ãÈú…מÐï¸ý‘¼wiñËkv¨1}”ŒËk )¿ô!cÕL[ÛYõÕ¶ª›=/ŸÖš´›E%›” ýX«ÙûÎ!8ŽëC‚GJÝ2Öoæï7ûcmýý&ùÛGmà¢}øôÇûNÌ“¦ßËÒÉïÙDgÉ—ö8Og¡­;|ÎüÝË«»ËÆS;[ǃžÁZž»qòƒç?¹ñÙW‹_~³xíÛî7 èýKé%°‚>å7È3.x¼Q_ÜÒ¶ú´¼/ê À†EF²Q­µdËÍ;Ô•nŠú¤±¶‡re%8Ógè&D…ÁÅrââ*¨îGŽŸ½Ú÷µQ¢ÿ¬Ù¸‹dFÇ>BîêãÕÝeã)þÐï¸ú0P#î;^ú%¢ …D§Š%J3Òð2zè/<Ó×bÖoòý›³—¼VüEuX={éæäû‘õ ¯KA?óùUm"/Ñ@ß1ƒïóyŠ¬G‰2†¢ÝÈ ^Õ(‰¿WDǨUF ý”t݈x²~$Ô›žœK”(åØ_—nì.Oq·eÑŸú<ú­¥DÜW‰Äx¬ÍR*`Ò_ƒÔ°=nVX¥vú¿Õb-©yåŽa픡ó´–ÈÈ ¿à‘RFZÆúAŸþ(<§uÔ}ú£þÜŠ7<£« ‡\OÀ5à³8¯ˆ:_­¡‚vyaSù³¾¾,ˆŒO…[ØqÁ+ßiÌmj5øh;y ;´1;ûä3è/x¤¤ëFÄŸõ#y=Yô×ÝG1J”VÉ\²Äïæëeü¹±»l<ÅgÔí•zB•Å}žÐ/xŒQkèªhÏ`£m=Òp<ÖNᦵÁzÃè?CZívk|#/ÛQ€~¡#¥Œ´’õƒ~ãÜÍ·>¸yêÃg/Ý ÎòD=æzöÒ§>Lòs¥=¹oxFW{¼5M¹täA_…²ôþ'V¬ßQ˜lâ¿ü×­“gúŽ:‚7Ó¿ªC®Lá~áÐ9L+|[(ý9¿Ã[†×mô|Œ6èw²*ùI“þ@ESl~–lll)‹þ‚Ã:/è:R2ô÷ èR¬_”(£$Ýeã©ýÇÞ +×Ü.@p—‚‡{«âs +×¾2°naèçŽÏ§ÕQ*}Ï©+Áí`JÛ°ž5Hn’2ë ¡ý&ÿ/€2™ÑÕÞ\yE3ô#GõyO’wyi²ÜÂÊÜqßžzþU ú홹Ì­âcvk{åmÒÉB?r›†;¥B¤ò£‡þ’ˆ¥=ÒbÖ/ê¨GC‡~·3âºÔð[£U÷| _ðÇôê-î}xuÞÙà±™Ëw™¯è«­À-·Þ¾ãØE®Lå ”±_^åë(׿nü»¬P í“Œ:Žº¸¾&¸¡ßªÍûÉÿ +陬’«Ê +;?9*¹kY·éúÑ8渤¦ÕêÛV5¡ß«²ª£’ZO·7…ŠækÉmÈyjµ@}B•§ÇJž«6ªú ŽìŠ¡_èHÉБõ‹¥Fiì.O]v®Á9@>pRƒ~ƒÇ*UHœO{¢53ó‰~ë«Ï䙯¨”Jú«”Ë–Û·©«•Cs_zNª|dÍ–¼.®©9¥&|¶_Lç'#lØ=SôûåÝð%S>R··[¡_)!³Wýêhx“Â5ÿÅ]Ëû™G +ú…Ž”¤Þ®Ð_ú@²yËM½ÿ½ï¼÷ƒ§.•sÔQ7¬»ËÆSÓ zB ­¥tò°À#£:Œðùg“Ç^úÇ®#xÌ©ðþëo¹õvŠ7(¬Ú¸{&y2¦EÑt–~<ºf ŽS°D%þé¯î¡`)·š£©Ò8µö•©Õ[ȹDhºj…Š7ÃÒûþ@iPɽ¯žœû%¾ÚY ³8NOsÔp« +¡q-ç08*º¦é·£2²&É_å°£³@ùS²ê¶Bc¨U‰ëF)¥•’ Ÿi2]…ü·Mž!ãïgIø,ë­*sœ¥:sÝè7õšVù/[}qKÚ­°pa¹RS‹ÈyòÑg^ÀqÊ!c´cÑïÔwèGô¬mÖ„4x«ŽBs첤)ô¼”Ú¸DV[åL-e “ŸPº–@:—±_%> &Ô9z)éZöR­†T+´ˆŽ¯Ú´/)ëÜ©s7ºþ¯~ӵϽ|tùSÏ›½Cž¼T…åÞÃhÈmïÌeNƒãÔöĽ³WÝ¡n.Óšeø㳬¹\ÊwŽ'.ª¢k¾© ™Û6Óò<.³'S­è¾ÐÒsÛÑŠâ);¬Ú¼?3¤)¥7â·öAþ” ù£>t„ï\öyÖä6¸j‰rc¶˜—¤%åhcZ•Á»ú#j@fÕÌNÇÍ— ]Ò Å÷&5rcèg‚Ð;RǦ”“ªS4¡^Ë8ØýOÈé +rJ*u1¿M¢ãd7Ò·ÈîKSî£-²8J&)掚@Bid奫pÓ¨†<æ —%oò½¯Gúµ‚ék)ëG8.Š[<-¥=ÒØ]6žzÀ¹¦Ï'7ùübèg>µI°¦ŒßôLÜ "<÷éAIñÅ {TIKŠ=ð¡^«â7=©q +1§|Jó‡T(›÷ªÑ‚.ºŠ®åSˆ‘8ø‘¥[›ÜÊœºâ¨ %æxàPó¿tŠ¢#úA‚ù”xEŸ—Œ ‹*QpBõ§ØI Ÿ¨¬$ÔW)aRÁ°µ±Rè,º áOóƒIq +Ãè_Lå¢ZI«º»µð5;Â9Š¾¨ TD}ô›J¤Ðí•FC¶Öɨb8Nš]‘ÚBVB¯ÉĵpQjã« +pY}Ãz¹Fì:œ +mä4ý'¯È¨E»O^"|GiÐ S +îuý_ýFgú£ß”¸ëÿtJÜ&dél¼-Bét–o:íæB×£z2æªRëôBT›WŸIÏÑ\E»¯ =gB°~Èyå Þ˜TÎD–|DBJª0N‘dtœOÉá¦JÂíµ5¹]7VŽtcà>®!Õn*‡õÓV†º]]cîÜЊ&ãÀhrô³v½ùÁ€†^sÜbtP ÕÄ0ˆÑƒN‘ ILjø¼âH}Ï©<3²Pé*°!Ê’•7Å+ô )µ“õóçø¢f]hÕ¨Û ƒób£­§ûbýL]ŠãËË'/=ó}ë'ßNï‹"ùþ‰ +ä›j°x;ÍǨ&; sÓX?zÐóYäö!y.c퉸ÖÍúÑ©s©ã{UV²t­nÐP84%ÞöO¤œÑjuJ¦§ù=ç¦åÐQÉjËŒªÆe)h,’ÌÙd£ò´LI¶}`Åz>K¿ÙÚ+”„ÜÂ>tý.ssp7Tyê;í8…Rnk°·È¾/C¡ l׎΂Ö×€´µ.I¶ÑꯪËeî .×´ÛÐÚƒ¾½pî† ' ÄÝ£ûe"‡õ[öÔóøÝQèOùÿ…ŽBˆK ¤é äù®$̨ÕAcý¤•ºöIËeþ+ï>%#K+mié¥Íå}í`ŠMÖOÎ ÀxeÚV«a?#Y˜ó9wÃôÆfÏ‘ÞH÷[uBÌ…ÐZºZ¹±dÕ¹¶ÌK‚K•wkâiª÷µº¡§¨JÒCL•=î!ÍvQ‡Jo‘ü£ä@eÏfr¾ÿ 9zk£äô5?!+i÷5]‹Ñ#9•ï9>ós©`myG[ÇyÓTæ'ó 䙨ˆ?~z:fÝT Ô¤ƒGJšÎúçÑFFÂr[Qò¤±»l{ÊvMؘ5­_0<æÝÖ1Mê½êÓ KTï¤h…g# žÜË…¬_—ÛÍö{šî'YnWó1êͤ]Šý„Ö8bsÕaë—¹Y?-7ö+›¯irWÌ‘\ªƒõ£²0XK‰IÚ“Q{zFÖo¨Y¿àÙhKpª+ +Kð7<£­ƒ¿Íƒ¸×ú°~;Ô„Où"Z®÷7_kc……<2e¼Ëåkµ Y?¹}:ámA{ËÝ­^öu7á`ý|*ƒil²±xÏ‘ &|f^ÑÛÞ¥w“•Ùבç€Éz"h´¦×ÞœcÙ›Tcý´ù¼nu”+Å$øÊZCç|•aÎ~ ˜Ü fÁiá<ü¯ãrºÖB‡ù9•£žV{¹°{üEMø„ÈS1ÇìÛ”˜ð©%³:á- +hg=Y?¬+”t˜—‘[IÚ‡|©p«ÉŽ€{Ö»2`âµr.×µqyæ¿’Yƒ©Ù+ÐÏQ9»‡G«`¿Y¤ìÕ6¥Y¹V…¬ŸÕÕeòé'V  œ’Þ]þ)kR¦SüY?¬ïËËÍ1–šB–ÄÆ;2¥,Ns­-Ìú¡,“’å~Á#%©ƒ°~þÖ¾3ßí?ó})ÝÞ­%ú@h¶+êÈúEÖ/õþèÛ&Ï@ï9uåØùïèY¹TícfM¾A5Ù1p1`7&群”X#S ë7ÁÛ¼¨pT2ÌP$(CÅ?{TlŒ÷ätœ‚"Þ{°?Ö,@9PÐûIrþÉŽ%k¶P°D¿Á"1ÏÂïíéì5isRmó²Zmš‘gŸ<-׿ÈzN¨ÌôZ)Ý]DÊ°~à ¸ß©æÕ^:f¹Xÿ(×þ@oTpÇ©&¨3åão “óbFv¦¶0'EG˜éCð 6„Žƒ+o²jÓ¾)Áwàrx³'°ö!ó +;Ô>À»º{°×:ÅÔð^.õ²‚ŠF+¨EØõÑÊú%6TíÒü_cý )M2ÏV¥Tí$ƒ¶Sµ‚nÖrHÖ±LŸÉ¢’=ÉÃÑŠ®sX?üfž`õ^ÍÃ}X?~Gä‘ʳ~TúØw4ú%ÙæE¡¿jcIæv Y?i x>ü{Š,Ÿ¬4úÈÊúmP®Î‚JÖ1,{ˆ}„LßÐx>vÕ½¥"Ö›jbo¿Í>X?,Ù˜H7·ç—Ò¼Ÿ9U’Â>Žioé6éîµ~…•™J÷Ü›H·þÆîS)s”ýJB#àWô*™þqÎÙÁaYy•¬'vœH÷i”"Æ[šLù³~)ev«V.Zann9•ýè¯(ô·SXËÆÕ`¾Œ:ý‘ô ÈíOi2E§¾ÄO+˜w9Çî—¼ÆÍß©4Y&¾Ë¶È¬9ÖèáÔÑ÷¿Õˆ9J&3a?çd”-·´»×¢àøø‹`ýY?ù ÊVr”ò¾ {iò—£²KS§cç[Óo5Ÿð#˜°ò·Û‰ê²>Û©N”aýØ‹´%uhÊ éH˜7ŒÈ»ÆTŸÊ~Ü *dý¬®®%f¿ëÌi¿ó½ î»&ÖO~E‹Ÿð`ýÐÑwˆoúX팡OÎZ‘5Ñ\…'–ËozR\ÉämÚZ6²~ÕêæY?7WU–ãgWÿ ‹ÿ†g¤uð·y…¬ŸöÆÚÜ'͇‡ê®1Ïkýò·ò>éJêÖ_éZ¦V +y[l…‚ÃõÖ¡ºrQÐoŠÄX‡Õd»(þ_rëí(˜'ÿ;¬~Þ—L~°Þ¶·ÁŸ?êséJFïviÏÇÈúU¬gý"Ó„lS6¶º±»l³=Í/¹ŠûªFXÚœ´ÊôàñCr눊YçEGEùî3g{6«‡„«È“p¡?>R—ÿ;µœq +]÷ê*|IΙ¬µÁ“Á‚Œ}µ«^‚?ýÝ:x¤”Õ²~}¬éÛ7÷Ý޹Ųº ¬œ¿¦:žO\ý×Zþ ÏHë6Œênî¯÷ÉïÇå>=}b•ŠžÔu±¡°‰‰³Âês½Ýü2­›/Áú5¡º®–õ“(Ò_ÿÇko/¹õv¹: +›Ã-ð¥>Y¿>ìЯknì:WžÍoÆò¯¬_ýúû´c•Ÿ•ÉÚ7·¨p\Ô]] œÿOÝØ]6žº £zYÖ¯ôlOÏgw%ÏëX Ø$x<\غù¬_õ:x”NWÅú!Ö8b¦”Håâ/=Ã(ªöri(Jo/õÉú•²F ü­éQ+`é}õ”ù|Œ¬ß²~¥Ö÷õÇô•îo `pþk‚¬_@ôgmK¸%`Ì\F‹Qz=ºiÖ/¸—=FI¯å=Ç+ïš÷7Û3²~%õÛë×ÛfÔTÃ÷~Ðt²/%v§Ä.—ŠÉ"èw[ô±:Û§x±j5C¿ÊsD3ôÓÏb­Ÿ¡Ù’¬­6'ýºb£¢nL7s—­>¡ÆÕ–È4^?få8ÞU +9†'šžzVQN/qdÒ·ø—ž/KÕ¾¾¶žª¢½¬ê0ÔÀ’‰—ê‹èÜZ>7'W°H=ú‘Õ›±CË g Ç=¼zóõ%ñ¿¼ö6§q ¾Ò³=½céáEd½­êsêmèßuµ6Øsì*ßÆþöx‰¬ß²~Ìaõ#à#Y0Âe]îïÄ'{Þývï»ßJ=ú¬Ÿ™Æû‹¬_t ÞðŒ²nè>ʬßüâ« ÷>¼š7\öÔóe£×nùy-•QD3QŠ?þªZ.Þ3sÙ3®{îå£ÅÃÕÅç™ãûãÍD˜íÿŸÕ„"×¾|´’ZmØ}ò–[oßýöǯÏ~~pöóW¦Îî#MÈŽŽP)Œ‘­³@ÉzdÃúîtÊ?ùN„áuÉ—ëöð¬ZÕ»…&ý³šûÑ©1C~q×ò»gªÂÚµ´¨¤ÇFÖ¯ }Z½9¯Yo;ÕÝ`DjÖ˜ðI:~w>@ÀgŸÚÚ…5 ß¦Có|÷H¯{íI þiË8ÎWá7#G!sî±~Ù#2%ý¦²ö%ˆl³–Ï+o}&3—9“~zëQ»\·K¦yú…#wþ~•ÌyÝ®Ót¼Çú¥)q¤g™3ßÑïÛÔäX–o_•VÕlÎÛ¼¼þŸ7£TGÖ¯:8ÓWÈú™Ä_YÖo©úÖs±82éW&群 vy9] ŠBÜU›öyUFH.ë§ÕY;^²”$¯¸ù²R! ïè,$K+C0œ»€¬ºUÅÆý´7ÏòÞèG?È7¨ ²»ëë)†~ý]+ýÌHƬ¤V+€­€éÞÿÿvÐÓº qœ…¿èçÛ§%¬[Ÿüƒ]Ë”ÌÖÌÓî·ý +;X"PóÏfDs¶ªº²£ _b–ùŽ3—©ú—Ð_%¯F4)ÙLóá¨==ó²ÁŸþn )IݺÜ6ó•õËÛÕ“¡3\ß^>ñ `‘äû–­ÜhN +½ó÷Okœ`ÞÜQNCpR²~„¶Äq\ùÂ3Ÿ§ƒIÔU”ó+iµóJ§”Wéˆl‹•õz¥:p­€ûx]$i*ÚgÅ_plÜtø7<#­ƒ¿Í+dýÌ^J±~Ù}ÒëËÎå¹Ý_‡#>u°é~X¿vê,<{ò‹»–WÃö•ƒu>Þ†Ý'ïꩧaý]³¥&ö‡"pÊ™¿å×eÙÎÙ¿ëçÖ^}ZÒ +Y¿®eÊäyhîËÞÈPÒo=u߬_‰1SÞ yvî«þ¬ÙâõuȾX¿ÄCÒ#¬XŸ¼ÁhÏ(:ß]ý·a÷L¯üZg>#ëW‹®Ÿõ#èWÈúïë²~Šq“¬ YBùMž7ù>‚W8¹¿½)bÑu»Nk¹IèGGîüý*yVrŽ”׊~k,W Áki=MÝÅ°é@?í*õC5&”ŽÜc»ñ„OÉúñ4Ý +Öllt3ÜúØêàoó¤x²~KïbÛä™ëw,¹õö_Þý=ݺ¼Xúæ³ßÎ/®}eJNïÁ;púqhö‹åO=O?(fã ¼ûÊ7û>Ÿ~Pž±I?vtä¿“s_:ÞÁ¢&½4ê9ÎBaAÓOuÅü|üÕΊ`é8Ee¬/ÀWmÚ‡d$ÔœCêÖ$hç, |óšN­}ùh'e[džl%:E­ã|Q“)ø_Ζ~P&<Šb©ž½ø +½¬6ô·|¯ûRÙ¸{&á)ÄT¦#(Tþü7 êÉ&’6—mì™:Íœþ¥ãl¤‡›uš³æɦf8Fbº+ ý‹/•#7Ò”žÚ%ÿ•¶âºi¬_^ÝØ3IƒÚÃýÂb:Ož3K±ÇõDGhÿv²¬·Õ·ÙVfŸj÷ ¸ÍIÈUp•ãFv³~äÀË—S‚L«çɓшÉÒÁÕ›÷ó @7Õ\þË-’‘w_'ËúÙXô,¶çä%Ó ½|F neÕ¬X¡³ÉA›:Ž»å:ds¸à~Ä Äõ%åH…³n‡ç'K¯2NûÓA²_ÂEXž\ENÕQÐïð™¯èWl籋æbùa$þ‚GJ\V?º,Íú¥“-¥¬ÝuZãò@“iÇâ”ñë +A ­ëeY?ú ¨HP‹Ó3ëÎÐŒŽŽÉ²ö¦—›µ5kþ2!Vu•‘%Bw¡ß‰O€(Ô)XH>¨­øóÜç³ \ØøèðoxFZ›×ëGÐjô€ÛsêÊÞSW: +úÉ·î’kc߬â™øô¦}ôüÝ}òRGã_²ïóñ¼Æz +ØnQÔU›÷ÓÙ=3—)ŸÂ·ý”Cí¼2uˆbË,ÓA¡Ö(!¸â•_·¨§ù” +$–©¨ÀʶPÌ€8Zá8•hvpö ŠIþ)¨üE…(d”Ûm©)xJM…"Mu |vRˆB¿éÅçlUD8Ìðª«çTõÐ"JC±¿u§š¼ ‚‡ ý-ß­s6JO6ç#lŸ;˜Ñ£´*¥‘=‚úS{)·¤þê·l;k:(WqÒo:‚|èZîYi+.]2qf°†WS¶I ç.R¿À‡Ñ¿UHIš~?²f úŽò¤:ÈvuRÐZ7ò+úô¤á3Sû,ﬧ”3£&¨§É7Ñ‘n¿§˹õ³æ¬•kõmÙZŸjuÖFªåFÞå^+ZÈúi㦠Ä!ÿºNµ QVfJÛ~Å=%Ç +ø3•ËÓÇ÷¸¼—áðÿƒÊáct•LÃ+75ûûL¶þ[ÙQU«—¥ŽÊcå@žé¾³ä}ê©èFP´Ý!…ÜÉb’Ñ˳­•õC>c”C{aOØ ¯A£÷ruããZòR·ýáŸÉ°f³@¦ŒVÐH¸wæ2[›|¬=y÷;Ž]$ ¸a÷ŒÉú éN/Á#¥Œn+ëg•?½p$;c Î Ú&•Õ²•›´4)nZ¥±~­Û¥q‹’õCz¬4¹BhL +]÷Ú;2ëÄTõ#觵W¡så#ÖÞ–Îó”Ü_dýÚ¦ƒ¿ámümžÖdKë×{©›}],_›k¯Ç;ëG±|×*ßÿ[é+k@1^×óûÞ%*‚â:€äê¤d£T¸ì…› ¾i +¥0Óg½Ê4êÌÇÁð¿’X¢‚7¯ê¥¡E³…6ô·¼õ­8Cü¦¸h"åà$ 4á\ Å)©uÒJh;÷c'¥Bäz(ú "€ê ±iܹëgí­Ü¤gU£ö¨¸]ÖŸÿÕ\¨£¦A¢²¬¼º ÑØ14YÕŸÉJC±Ö/ÙˆÆØç3²~Áuø7<#­ƒ¿Íëõ[±~‡\ÑP–õÓ¸7ë's¦ßôˆ·¾ù/ÔvÏP˜„pïÛ5A=5þÈd.XSDqG:‰ˆ‚C¼I~NQ6ZJD_æ.ˆnÖO{óšgØõ›BG*¼X'fЖŠêus3ÞºçÙÐßòVÖoÏÌå$¾Rý#k¶P|e² š'P0F)yZs¯Úô3ˆÉjaÞ×T:#ÇåD–~X?öês½ï;#€4û3ueÜ›²,GÝÈô›üÐÁ qž{lÎl¶ÂZ·Ú‡õ³úvgÖÏäò¬zÖ<ðÑԩȣȯ²õ“÷åO£·‚} ]ZCö/ûÃ2›ÃJk_>Jµ¢üŸSï… +Y?»ÏdëϨ–пrdYÞåÏú‘…©¶·¨k>;ýj^Êv¶~÷„îeº›xþ$ìà½é~¤<Á¹óxë°¿Ý?Í^ȶ‚@«e¤R1UÒ½ÖÏÁúµyÅ_ðH)£ÛÊúIžK®ÑËÆ*õs‡õ€y¬Oà”ü£äò$ë'ëãÃúaþ§–5,dýxÂgoU£Øí³«S»­{ío`7¾Y¿¶éàoxF[›'ÅŸõôë›õÓ¸ž 'ë'sîÒN:À! ð¨¬¼÷í·Ë#Öµ~`åä:>4“£A)yt‰›õÓÞTç jkf»òª×¯ëÝ6ô·ü„õ#¡Ðhµš ʵê8Y?,4c+qJë›|Sº<£JÏœ—ƒðdýl^Í ·fHþ£¹gëO×’°š‰ë“GÄ8œYŠ£8OÖÏêÛX?Ï›µvГõƒS1æÏúI—^ªJg~Qk¦æJSÈþeS¸øšê‰·7p~ëgéD£òþŽê¨˜?ëÙÑYÀŠ¿²kýôjÆ䡃:<ª-@ìþi6ÙÏ©h¸ôs³~n⯠`ðHÉÐß×­ ý8 ÒÓûßÞ$ §€b½ùôã ºòªz{ª(dÔ%ÅbÂV™‰~EÐy{9øŠ"Yz(RýÛq‚§K¾"¡(?¯¶c‚ïìá8AAj¥ÓAYCíÈ>±Ã'oïÙµ‰ ?%O¿p„ ßó»ÿ¶›½¤rè/+¯+6*J3²]½i‰R“Òë€~˜ÊÕ Û^>Zú-UËgÊ™TÛú¡,ë ÌNv"‡[&ôÓb,é 6á“­XO¹¡„ç›åUÏŒÙêƒ~±ã»]2<–£ãÖyhšÙó‡&L­Jû›@Þ,NÓt×>"j³Ây>óêÆÂ/+: +Q:&|ZYŠ£¸ +'|j}šñÃìÈàóbÂ0GÚ쟤d˜ŸÙ7ôÃ6ˆ Õk úh/Í®;“X Ûeé)Þ;Q3û!µK%Éty ‚`y‰Üa¨UjO!ükòSÒ˜¦»DÔ6„ +ca) \šýA+ËZ7­þLÉ5€ÒCòœÙÌÊZœ'ôËómyGk}Š-[±@RLÇC+¬xw.ÝÎäTt;c«[ƒ°ŒuÙ`שÄF”ìÆjÏrÐo~Ñôa6œ²sjþàv`ìÙü®9a±ÏøC¿ùEÏŠiÎæ©´?»5Ýüdè§Ý8˜öéïð+ÒåÒŽf:X¿L/x;Õ/ï~€žXî·mò ~ôMüµ‡ )úûºµ•õ#ͬiÉú%‹×¬Û¼$ªÇñå~×O¤!mÍ +_d@šÍ‡Ïÿ¼÷õ½u‚e›¬_ÊB&¬Ÿqi|æOḠ+Ež6«‡4|ÕÓ[1Gô´Ì§Çú½õ)Žð$U*W}GþSícîÝïú .Újy…J~ˆºÝÌ]6¶:8Ü«úÑPneÅûi<ª.ñcÔ„~òc +ô€î¾9¯úñ(óÞ‡ ÒЂ×Î`¿8~èË;h[+p¨†øa€|Q¯m0.g]òŽýÌÑÈï5à5uYè'Èû–;ª×ôë¤ï˨LÆZX¥Ÿé¤›ÒÃhÔ5ª/‹±µÙÁ¬$¬ P5þ‹{s"»¼úéîZQÛ _ÇûãÖº­UE²[Êë¹OMÉsfSøC?«ok —}Š×Ö‘¡ôcXÁYIX1©–›u-c +v**½ëTêÔÚW¦`gº ß …w°:0Ûj"û%Í Ý>“ùzIè縳4gsŒT\UÙ/•@¿ŽXˆ›H&°:¼V¾ïòšé€~î¡ Ï©´O]ìåÊvõ[–¹¾Ï±Ê/²~‘õ1î;ô›q~©BƒG Ä0m2k2‹¿}‚׶åÒØ]J†Ñªm®gp­¨iý¡¿þ0`Ð/t¤$õ‹ +ý5 Á€xrÚ—þr5ób…)GT›vcmåûâÞžAtcw™C‡~¿Y¿‘†~CDÕÃÔdíÁ*6õþ·a¬1nÐ*{£ Ue&m«jp­®]ƒ ¿²°vè:R2t Heå­*æàFKç1}n¾/îíY¿ÑÓÁá^Yè×ÄB¿ª"œ‘ŒúÂE2‡@dŒ¼ãZ.ÁïБ†«ò­ªLƒÊƒ~þ诬ú…Ž”tÖït: ƒÿó&逆Þhè}˜:ö:Ï>¦Î³04z!ê&ucwÙxêàp/B¿¶Nm +fš± C¿Fà˜÷~{L:Œ2Ô†mCmÏÝh¢&!zÁKaÀ°Ð¯ ³¿²3Ášcýè—ÃFåqÍð€îr‡E;lWùÔÁßðŒ¶÷"ôk{àÔÊx¦&Ëh ¯íÐ/xgµY‚ߘA†‚¼¢Žj÷“àîZ[_¸¡_µ°¾Ø x¤$uó¬_²â/Ÿ“"íÉmEíÏôE¾/²~#¬ƒÃ½–@?ë÷|ÃÇrõÄNò“ÙÚ7…Û"îàÖOúhÚ gÉ Fúɯi²4|ëóŠð¶­¨nrd+לŠ*ÐÇýÅßmïóÆô³p…0ú )et㬟cÅ_)0j÷š¾È÷µGÃ3Ú:8Üëú­}ejÛä™ú ý^ûòѺ‚œª…BD$?ýÕ=>`@MK¡_^„S¦Sª‚~Œþ(·='/ÕÕ´FfG„I>ß_ðYöÂÞýÐ=1û¼“_<óÁ¥r­Ä]ë¯s?ЯR)‹à6ì>¹äÖÛiT94ûI­=âƒþ<1`óÐ/x¤$uÖº¥r¯Oíc±È÷µM‡Ã3Ò:8ÜëúÝûðêÕ[T»½§„~«6í£"j r*89PDMÄ£k¶øHUA¿æb-­O½-ã/yÐB¶}µs¡ÂV'™4-;BSòyòü>ú7ïB*QvDïþªÖ7æ½1—· e²Õœ0ßþÝöÖ|ã”RÞ†Z7˜º_¡"¬Ú±!Cý*«°ŸñýÑ_!lý”2:ëÇÚ‡±ªiÅróÙ-³…Ú“é‹|_Ktð7<£­ƒÃ½> _ ý†wÂgà¤íúó‰7*~„7-vkFŠ¢ÇÊ¡Ó•´º›É ½_¾Ð²¡©^ɾZúèš-õ2ËÚM¬¥z{ë¼ñ»¥Tç¾Ý4Xµq×òbèׯý‡úUsk”邪`“è/x¤$u@ÖudújÒ‘ïk‰ÿ†g¤up¸×ô[zÿ+Öÿö¾¶ÙŽâ:÷¿Ï©ò·ÄäS®®{?KT…ØU¶”¸Œ0öµ¸6ÒÁε^\•ˆ£7°^0Ò‘dÐ ÚG`IéX ';·Ê€m@`×}ºŸ™5kº{zÏž=3=gŸ©êZ5{vO÷êÕ/³ž~º{NòÅ„÷¬¬xÄÅÉÉ]yÁýÛé×àfð/a¾c oj ýŠhoÝ?xúÚ="é¯^{ÏyâæÞãWvì:à륣"gÙÙ{è&‰¬i/î­ nr §.” +ègý%]øíÛ¿³_ƪ +úEâÓ-•`[ÜGÞaò1˜.¤¦Pv¦0±X•F`²~0DT ˜ÈƇÚAep¿d|{“Ðï‡Ï]þüƒÛp‰kÁ}¸ƒÁR;í°‰é”òHkwÅ2hcË+çôOq‘Ô£-3\HÖTIÌÎ|q±ç™³ìAì#å ’ˆFz!çA))$©=±?ƒß ¡ÁM(è†!¿Z7'tt¿k¸Êäó«#RS~v(‘^›'Õ„јýòf-9ÔgÙÓK«µ½Rè8ÒÔåN–‹WðYË2µš +û×Szú$c)ËâePÛiÌú§˜ýÌkïâg°µÎOœ>®‡½BÞAm:©ªìüáK'"Ío3 R´ÌÕÃH]Ë”›=TÂ+ÆoE¦ÔNú0pùÐù-ÛvH•]\ÿ÷q±ãÉIšÏ_}§è—ÜSòäg=HëW ú,Ç÷æ§ch%ˆIâöC§¡·^¶9er¸7?ôãÛ ¯6¼3Ï:ÏôrñNÄ[’ïÐY¡€žöv2ÛsWn¹è .MúKò§L†ã)üß Ê»»&ôÓ¬þ—ƒþ€\¡_$¾ö^ô_A€Œ©½,øHÜ4§%Ü¡§Túù¹dÎÿíbí«†k3«š<5ܧ̈-„ÐÑNÿâ7°~"eH ý‚ºáBf$ §›.T§ü ‰°yÐg“Ö¢$‚ã^!þ¥ËE”-;‰è¼iƒk“úD¶ ”3#yn0oBŠ‡ì¤¬»!4—GÝË ¯{+KíÖlÙ†è­H™ƒ4ý(O¥Ö&bš‘š +g§P$KŠtƒ„m(lÍ"56]ô÷ †ÈtS/u|ú€«vY"ÕT² µñr ŽŠz  Ž¥ñdڪ°zÁO46]S¾ÎlNÒÔåqT±`%ä"H-ý‚ÙE†/vŽ*Ì=¸(Úaýª†={³Œ­úàk%^e|™¢ËœZ»‡‹Õë¿Eš²«/\@B ¾‹oþáà™ëIŽ|IÎôi9Öï§ù¾¿>±–㾿¡ÉÔs; .“ý9¡Ÿï0ó¯9¼âý÷ìLЯHÜœJºá­Ôa*ôÓ¢8rÌÔ§ë@?@7‚OÄyžðO`ªÝŎªIOÚ•Š@?7kØb*^9غ „×ô–S&ô#îc@ +ÿð=S¡ŸN[šbºjè'm@OA”RÎ,èôÍ1ÍP0w}ÄŠ3QPú99ʃP…õÙ¦Ü4É‘`臌ô_TÒ!þH’–næ9jŸ|J¼¦‚Ù±˜dúâå@?=[  œ1„à(ýLYT©ë”¥>ô›ª6Œ¯‡>]Aqè§ÇR\k"‹95~—8ÐÐ)Û­†TÁDêg¾œP•ZdÁ§Fœ¡ ×U–Éš·2©Ñ°F•9ë<ñ†Å{ƒf,ºþ۪şý@¿äž’'³~?5r ‚oÃxHN„mªÐ[/Ûœ29Ü›úÁ ÒKqÄM2‹â<—¬Á‚Ͻǯ q®êœŠ¼&3B¿`:d+¦">ý ¬Ò¥ÆÅ’ZÁµ¤V'¡_Íø»Å^ƒzœýtà{Îu _$ÖZÉÁ¹RP‘¬{¼ìïõûξãdHãÐ^ŸÛk6¹jèç´b´óéLqHŽA|긦Ž{éC‰HCõëe’c7¨äÀ« ¦ „ׇ¦†»¡§¼³:qIÎÆ/+Oe€ ²¿,Eâ?È\dÇÔüC_cЯljÔ)®ÉÛg{0„›ú4èWyê˜nè7Umg=ª® 8ôÓ%â²Õ >h9²`›Ò‡~zq©ö}Q^×]úUe¾&9Ê–‘¹ô«Füª Z¦²yר²IØ …-ôãû(²õ¯'Ö/µ§T–‰Y¿'|žå'ùµ9ª…Ç¿¨küËk}g1dƒ>ƒ²ªFFÙºL=·³à29Ü›ú½°¾”Ï;njp6¾ô›äK= [‚{ýÚ…~d+f‚~%0/ªó^‚ЯfüˆÝ≈oCD¨ÀÐÏÍ¥\ð)xþ\,qüÖoVèçðkµðK¨ Ä¡_ !YO~PÐþ'ÅM]IØú¹ÄMuï@‡ÕÊ0G½å³N#¯â‰|ý§6¼ ©ONî+ùöÇh`šzŽ_úU•%RM~Óªv„cš úõášUü”¤ ô .3ÐuG,YTA¿Hv‘á‹Ä«³½:ØêDÈ0âWM¤Ce™†,©2*\lTÏY¿åCçãЯô—ÜSòdÖoV–*9­6ð0«=Gú¯ÏÐ[/Ûœ29Ü›ú™×“òpà&‰›ZgÁ§Þé~²¥tM¡ŸÞyQdç¥3Ï‚Oñô"~é¤úÕŒïx8œgžê ;áñ§1AYn¯É´RÕ¡Ÿãæ ëÇ8'®Ü‰/øtJíØgèÇeœÁ:­ý¸ÆR§ï,øtl²”ob,øô Ó¬ÐGƒ +>­Âˆó¯/üBNOÝe7©Mí­n©§õ‘ ·>ˆ¸ëS¹odÝrüÔœòV¶ä²’O_óÛCd4€_úEL•Ú•ö¯¡vdþ*Ûj:ôsìÉÑ ¸àÓ8A+äŒ HgjvÎðåü¥•w6ëBI´È0Rú•duwV™c|£°·à³úkË7Hî) õ¿è—vÇ߸ûodýF&‡{ó@¿åCçñ¦“-íÙöÍÅw:_‚pÔù:æBAÁ,\ÜRú!—âdÅzЋµÄÏgJÞûÃùi¢ˆÉ USý¥‰BÛmYrÔ€ø¨AèW3¾ï&9h¢* <Á€^7'Jès¯v©SCõ1}n.¨Ï­Š@?9ÜRŽûÓpéáü˜—>w™pÏ~N©ÉBÎvVIîó( 'Ô‡~Î1/Ž&Aè§ÏPÕGgT±HŽ’¥hÕйS +BšˆM`ÒË+¨GZÛ1]¤·²Ôî ™ŽHoäçíK‹ò5µùx=ÊMŽM…~áì”ã-ŸàD‡SÞÊ–œïFÔ#˜oŒnSÏï¹Ô†~UeñÕÛ¿žÚ@Á +’AÕÍjB?AITìˆýPŽýØdØ‘28Êë¯ÏÈæ_tgY™Éξ4Ô½ `*ô‹ #õ¡Ÿß¼ ý¦V™LNf +¿Â&”}ÜA½x +hÏè/¹§T’¯ÿùÙ9ä±ÚÒøÀ¿ú‹ÈóD!i Ñ_…¾¶¥¤¼‚q⺠VVY[¤®Q¶+gê)£œUšqõ¿ D¾rϾ,”¼z×¾V”\{Û.;É¥ymݹR}âÊYChjz†P?—ùójœûÀÂRyÙUÂà|Æ].ZìßÞÕÐ{*¸×²CÍ“¶¨®ZBŸMhÖô‡ÙÔ7a˜¯ +ê|ê½Sè—šãKÏú5ãûì- ³09;¶¨!ý ÏBËäL_„ò«býtèÖ[¬OµXþ’FUÃ~†Öo +5Fè—©Ôzßoݹ*xúƒjê›68•5cÕLEö’ÜSj‘õ«/5d"_ìÞÂË*{F¸¿šÖ(°~ýô²Í)“3}"¾¯ÖoVLyªì3¯©²;t,¯ÜþX®óEeéµêPÎ_³ÃÑg¾z7ˆOÉÃ/Yè×þC¨ýÞú~³Ú ZIF’ÈS;ë8 SkNjK:V­Q Λ—Òy;ûop‘szÉ×G¹²GÖoV¾o:áuë“,T]Ëx"sFdhÀý%'È2¤ŸáYh™œìë„õ»ýI;¡öŒhkY7ȱk•º#ë—¸NShâS~ÍY¿úEH^õµ‡N }§*šüœÉÈ 4ˆmøP£æYö9'÷—ÜS*É~Y¿ú|_%Ÿ%Èn°r7—d.b‡OÍÄý #[<™œ[l9¾¯}֯ݙÒ$³Ó3廑¹?2>ñ; "¥.FÖ/¯å ì¶¿ ¡%õŸ¿.Zgµ>A;;­¨qÛ lĺën¬pj¡ŸÜgäþüwt÷7'ë7‰²ŒyôzŒir8©C—îþ­ÿ´ý»ÏøÔÛñŸÿ÷ß}iÇ—þy·Kêmˆ°~¿¸X¿¢˜»\svóäR‰¿ÞBúž…–ÉɾA³~·?©5#<ßþÕk/ÈQ*þÅÄ;kec‡¶*±‹ªLѨ‚Ä_úÞའåFÒâˆáØ­uc:é³Þ(u×u½@™TÄ_rO©${Á˜È¨þyžôóØ®ã¿øú}}OömõæÇ«·>Lφ$J²lÿÞJ'é‡Àšg~vÄ|mf™|†g±åø¾ÊúÉ¿måU3ß9¹¿ví3·Ž/ÈþÌÅ M¶R‰fû»Ð' ë7°ö?¥.nRÈ.Æ„¶FgtÝ 5X§Å6ë}=·@ONÝñÙúŽ¿äž’–ý}Öµ4¬ßk¸òÜ¿sEb!W.½m ß÷,ë÷&I+òY–õÛjY¿üŽÅw·.™¾sŸw˜ïÆ´^.;Ck䧿"úe 9²~ÉɾÊúÉ¿-æU3ëùCw:Ϫ¨Ÿ˜ ¡…á×]¿ú«¸sÖo`íJ¡Úm<b$‘”¦ã•[³°UÅïÎÕY÷ÚgrO©$‡ÇúeÐOX?ÅgiÖŒ$îjyüg¿“!qgß 7œ˜O¾¤ãsá-îK‘_û?u(¬7hþÍý?Áõî#/—´úùë²ðß}/¼.w¶oå›û~‚ëÝG.ëôQj‡Í„„þN©!uú4£Oì¡ÎŽ¿äÙâÉä3<‹-‡À÷mHÖ¯­ô§Êîæü½¼òO*÷R®\Fö|ÍË J¶ÈÛv'ÛhE"‹ïP—|.˜“|œZîOó!´‡fe –·qÝõËúUµ‡Ê’.pmŸ{êÙÿŽ¿äž’'?ëT»ñé±yX?Åd ë'L°’€rô—ÅÁ`1?œÄ!â ¦f@¢âþüt,‚»!q 9ФS—…øÊ>é§ïð°@°Ô+ï0µ•Kwä¾@?3=îodýz=ô²“3­+HŽøDßþJçÓ®‡ ÏäÌkïVz•ÎuÏ^_{ÞÂêµ÷vì:ð¹¿}N8\2~Oa߬=Y÷ óÔ—pk±ÒüuíÝökЦ¶÷øË~ÿ¢=Ÿ³j&A¾ßëµÖÞ†ã-§’ýã¾GÚÈÌÒÞ¿ÌÙ€¢,³–(•å›µ¥ÙGlkºÞ[uu^SÑ_»k>ûYcY[v¿¦ôú§õY¿³ýÈú•w± ëç3q"Ÿ:|ÙâµËšõsžbÜâӬџÏî9wt`̺O £GÄêp|AÖ:XªHô¦Âî±…7ÆíÖZGr #3K¦I?s¶T›ûN?ÖžI“;ó2³'×Ì ÝzL­¯H^=ïøKî)yr@¬°‰^©ä¶4ëçKáïÎÜüèÌAò)'æ×¾{P3z|Jó€šã³ñc…òJqˆÅ„gdʾyŸÅb1ÖOîHúfag™yÌVþüw¾Ô© :Tïø Ö˘²E’=ô²Í,“#¾¬ßã?8l _¬ß ä¶n`–¹½µzdÇ®A?ah¬ßÎåýæcýŒ+8²ÇŸ>ÔJy ³¯Ñ5ð§zIÚs~õTÖOßÿ·Ó¯5Ä;µûÅãß·Õݶ‡Üº|éÖûM¾kßJ{ëgÕYê“Î`íþ‘u/È7(‹þX‘WÏk>“{Je9PÖ/ƒ~¡Õ•ëçìÎËWi^¶¸ïcH‹×žÂµ~ +°Hø;Ä!ëÄäpˆ9†z]3ƒA)»Éúq¿¡0zHqvyy*ëÇ}Žž²3‘:|í»ÏõV-×ÍÀ‘õY¿Å•É߬¬` —)2àw™Ÿß˜¼ ‰›x‰çÉ;ŸûÛáÿËûNøøÛ¿³ŸY+=‡¹ð¾d'A|Z(€Ô˜¯N×\~I>w­xÜÆܾkùqSÞ ·>›äªVúÏ\C´ ëýí›ÁRŠªÒU“¾ºéù°U°ì¸sø¥›R;Ÿ^!ÖÛæmâ»´) 6™©Ÿ¾kƲ>~ú®…ËuÍ:BZƒ­…Ô•¤Ã§²X¶UMñ>AAPGâ»óÕ¨:˳Úòn£Êïñ>ÒA|){É3·û—ïUVY êA¹?•õƒdî{ü²® á¡6ïàBZ [f©Sç=]*úäÚ]§å»ãFÞEaØÖ–þˆ -Š÷Ò!¾”NtËKŸ­%‡3R¹¬»@s +Y¯¾¾H·R)¦1Âä.ËÎâ ]±8hoNË3…½Æ´Õi¢õNy$_-qïñ+¥Âª‡nEµîÚ/¹ø£zÐÚ¬qÆäÛáÌkïB[©©¬‡Vã¯@©u¥ÃòbU–‚OÉ}ù×4Ú¼6–£õѵ#èQ¢ÔóÙ{üe±‰ÔH ?zíáÔÚ="¾‹o~XÖœY¿T¬_¶×¯|jeý½~ÀJšõ3Ðïøïï}á:î?¾ïyÆ9øÒí =»Þòã Æôw’õ;þóßiÍiNeýìi0ëg,0i%;©Y?9¡Ttƒ=¿ôõÝÂý¬ßÈú-’LŽø°~õÛšõË­b¾×ñ-éãmÎ÷ßP‚ 5R¿oCyâE\1ˆLÅ¯à‹˜×H\Öã!ñº¿xqd—“ J¼gqÍ]câ½;þ$¤¬Ìd¹èíോ,ˆæpÇGŽ×aüŠ¹qí«#j»éRdjçž3õÑèØÜ í€ƒMxŸ˜B|`\þÁm@\á  Ó}4ë‡RZ› _ÑDjY§/vX +qL~yƒÖ>ÒÇOXƒXC·– %ùèÆCÁšBâ&ß·îÃC¥ óÕ~rñ¬Ý(ÏâÚ4*{Rž…*÷iOÑܱ†ö6Ö´î +Ï9Îúi»iŒÀè3£OášýK×oÖ©í¿Ô„Þ2pMÖ\CxA³~L½O|{Û52\+ÑòbÃHéâx'8JàO ÞÌþÊ˲TÍCeÃW>¾iä…¼Ðƈ옠\³8hu«×Þs,C;,¯œCËÎ⨂kÚ)àš©ñY±ÿêõ÷D[©"(˜ -Sl¨­¤Gbä›U¥7Ž1)è,5.³Ôgï‰+¸††Yµæ³=þ¨î[›6¹õ)£MH“=—¦ˆ³oEY}ôLG`mIŽbU”6÷ëHRÀµ©h¥¯Ykø é£ÅJ›40ÔÒt >r—qÞªáöpý·x sX»¸þ!ÞÎÏ_}çØ¥77ë÷z·Ò@¿VüÇŸ}i •gõ1/†¥ú$€Vš½o[-ëwËî³û¹YI¸Ä;@={-VŠ°~¼ÿÔ!sB&$㤠+±~_ûî3¦‘¹ó·àùŸ@‚z—"ŸåÉŸ X?Ù]X¥ƒÃúùß´&]!÷7²~#ë·H29âk°×/ƒ~ù^?—õó|Kñ{åÍNwpm^åe¿%w9*×ÃÀsð½}aáIÊn5üäõ?|cT•µ‹ +³˜~‚0UóçŽ?¶Ê; +JßV4½¼´w[•våXiníÖ^q¤==¤üÃ_–už¸Fj¼Î _¾×ÅÔØ$‡±Y-k¼™¤˜/rW(&¾Mþe]ûxÖg¯Üº+Û_#h=K/¼’ 3zËUùŠõ!ø,êÈ4ªœïÐ5¥™AÄ_ +²~—݉­;•§£øØ“|]MÖÏÁ~j»þY#}—Y®ð“¼ õA]hÆŸ«vÙãè]këÅKW…w"£áØTD´}uÞ!Þ/奸'b(ÇA"a‡bx.|JsDwîgöϱ1‘ßr¦¢`ÑXCæ Šʺær¯uÖ5nªU±l(µÌÃGõR;Ïíæðt>²‹Ï° öä\ ZÌfÿT›d^,iŸè°~¦å„ôA­ÙFUb곆Qni|'FjÄySøía˶| ÓªÁ½~UèodýêÈŽNøt1Jb%È*ÖòK_ßm±Ò[äe‡ Žc ¥Ú'Ƚ~þy›Á]„Çñß]°~U:o:¬_!×ïâïŸw¬ßÈú-žLŽø"¸¯-Ö¯Êóôqø-ðú&ç9ƒ<.½$fI­"ë'»Õ€øxýù·ùhoaí59zÂÛ„§* ™d&¾M¦êÓ‡2¬ Ö¾^ã$¾(üdÅ7–›ð| K{¢Œžò™Í¿xSö÷áÚ€åë§Wo Õ²æw +?Myw~y+-œ3h~¨ôÕo–íïÖTŽ)Lâ!_´*_¶ªžØŒä•¤ùXRdz~^îUVBkA^A=ëØÍaýüÔO‘|f·¹V±~ +k ¥-ààЩ¥«Â;‘QÂ)ïÔQË·žßZÂyù#dYÂ\§TáAÁΪ˜É‰°~N{²è¹šƒ§½ª¬Bñ!dd«õJ Þ-?(£º°Ÿ>ºô‘Ýɵ»°•¡ô{w$±z½_G®UCi:¬ŸS›¢”ôQ<¬n‘ñr ´‡'ñ"Æ[øâú‡¸0VýÁá³7~W礗‘õ«#ë³~ÅwýÈúÉ'ÝC¬€Y¿U~~]ÝÙ÷ÂëúYXçÄ1GøúŽYHi7Ç6-¿“˹Õ®üYë̃»ujˆÀiï˜Ï:lµÐOinØ:›”Ü1¬ŸÕSîÖo«eýò;ë§t0 Õ¨zPîÊϪjX?{ÇaKW.ÝåÞIsÌKÙÚÁz1\Õ¯þ<ʶd?½lÓJ3´ ˜7B(˜7ˆ +î½­ ßÛ +úݹŸ…b¹r¢Ttç/¸ÊÜ"‘ÏHÀ';œÐ '®ÜÁ_Ÿh$pß‹·~opÍíIñÚê̵w¹Š&ó”¼–óU|&N¬Z•od%ª[#o«iÿ¥òúg. ²~Ù_žµ«¬$ëoƒµLAów{ü²Ö¼€½ù|Áa€õsFøºn/°1ñ¼Ö'Cs!+ù¬Ÿ_º¥ê½~Ü€©ÁI”õ㺻àø ýEîÈzõp^<‘–^(ßÏ–ª;™ýgdý2Sä×z½%{Y^¨X<ᬬŸÃOaÄóY¼‰å5§ÿ­âìx‡ðm*ëÇ}ˆÂ»ÙWŒÚÕ¼žr&¿g„ym0Wëç×ÚÄ~ÍÜ=žÕ5Âsu ³Ó§$ej•-ø,ŸðyðÌu¤°ð{ýž³3ç]Ëgod€"( Eº|—ÐÏøy?“ž°¬ßÖ¯ïÁõ¹’Ë7ý™ÃU¾ö݃Û-g7Í},ÿJÐÿRfGb–ð£Ž#’ÜŸ`UÑRX?¹#¬ß–õã=Šõã–õ;aY?yVX¿ˆ¶Ðó Küñ“îxJÿ›á¾Ó¯Ó’ŽµýTyÑrU£lKöÓË6­Ä ú3Ë»¥•¯ÞãW¾r—“‡™´ +Ì»¯¡‹o~xÕ²~û,“uÔÎUâ=έëx®©)ñ5;¥¹–Olâñ£vjúh±ßü›¥SŽÏ½úÎZ>ejNN°Ç•¬^{÷ÍÑ”»öï|zeB®JÉ#–Ï‚Oûâ­ßS7?¯£ÜGc)¾—åßü¤¸O.Üz_h£ì_ÎÄæç9àú¢©¦û!ÿR’øCÊÈ î.$4—™&¸‘Ô“‹¯ ðøhRÜ·ù +?¢ãSy>¥9¯µ¬:Ì1/“ÛÅ1/Kó±8/Ýú=c²6¡,@[UÕ²@¿5ë%òÐÇ’>S‹[x‹=VB¾´Œn-Ù|Bn‡¬2/¯å¬½UlõZË‘Ó.#mÉW _üY‘´ã €H3X³<·SòÊ×ÚeéH+9UɃPhç/'é­âÄû³8æå–9ÈEä$DŠñ_»ÚY]#ÄG-oNïëIü!e(œ»%/’5ç‡Ø”©Œ¦ºx\ ž1ÂúMTs +Z/?BDóR•WO¤ç‹È”Á†$}Šc=ÖͱdŽŒ…§±~qShƒg¨°LÌ9¹Uiù&gá‡AF×%ZqÌ‹-ð‰©V¯ÔÅŽ¹; +©…8;b=‘HK‡&ù‰utGó’ç‹ŸL †Å Ë"H‰œ ÿ••–\ô¢FRºÖ„<Í^U–m4GÖä¬hV#¹­²c^”… ÔíoÞåCçM5Ýø­Vïh¾še•NÕbžë‚’¯*ɾ0& ÇäðP<çS¾CçsŽŒï¼#ëg–hFã÷ú9RÀW•&3ÈòÆú²J7žðIèÈ+t¶§@?G&çÈO&ŸáYl™œïkÀúáÕƒwß’Ýj4É™&}¾}ÖïáÐéè2{Ï}RKú`ùC'ù2š°~Kå­'®Ü‘S_äõì8÷|Þ~Éû27ÐIÊGroœûìä›tÜ'(:pΖ잞yvf˜å˜njHæHÏÞë¿õi¢¿>¿tS¦.9Ê?s6ûšb1¤:v.¯È¹.Üq™UtžŽkÀi¬¼—ÂŒåyo'ý* Oʧ£gY(s=äŽ3FÆaýr­œš’3Nõä{‘|õªgEç>wê}.ÿ¸ƒæs‘—>¼ðûNÜJR;ôu³cyê±~Ú>´Làãzw[Ù¶r¼¼éÖW×ÿJÙ‹ê~+ã^ƒ_ðY?¿tºôwŽæ^ƒ£Ä$Êúé1A¯Oöç¤7¯¬W ÈFZ9á#Iéãù×â¬_ÉßٯחßÈú¬ßbÈä|_ÖOd`»b]Õìz»Òù%~â¦³ï¯‹Ü Y1·]ä;£Å–Ê'|Šl®É¬eïȳ´ÉT2þ¡È:õXuÝ™ôOGìG.ýUì›/ ûB3Ù]Þ)ö” VžZ»g6„þµð|=¹†ä#Ö«#×Eð›ížñ²ÉY¿8÷çpR"çäÈÈúÅã¬\zÛÙ‹WWÎÄè5“åW.¶%:û §ò}Á]~CàÈO¦ŸáYh™œï[$ÖorûãO¯lÙºýÅ[¿—ý}ŸhÁ`¬_p¶ÿ­êÙõv™ÙÓ„5Údý˜ûLœÅßþNuª>]Ñu˜>|õÆýóš›ïKΔÍ/çaý‚ Z|õKc©¿Û¢ž¾¯Ù÷ÜGÖ/¾ã¯jß_-pÆ]=ðwU¥ÊŽxÃ`^U–G¶xr3< ,“ó}ý³~ÝIÿTÏ L¨¡Ë´"›Z¾M+5ã,fâ/ªž 2PhC—q>zÖo”ó÷ŽÞù¾šLSc +Ê!°lõeýrEd?ÚNÕ$²ËoaX¿çìÌy×òÅ_ýeÒbÏ"ò<™©´ˆæ~Ùi¨â+›…NUª¢\“³c‹žMÍ‹-vHÎ÷õÏúu|ê*=ß×u˜ÃømÚª1U¤§©“M^5ƒ Í ;ÕæÉË5ØÐ…Á[ÕÁØà¼æ Ý¥/Eëi¬Æ‹×–l—mù¾‘õ[0™œïÛT¬_BÝzbfI¡5[5f.ª®§éïûemÞ§™¼tÔÉíÜtg_+\Ø(E¶Åëͺ¿o¾odý|éð}-2}g×?±x0,ãÏF8Çä2¢yüÙÇZU;£lEöÖË6§îû™eý‚ï‹ø›«Ò÷NäeM]í9?°E9‡ýÛ´U§hb 8„:”m>œ~Ú›µá¾ä(i”õeñU}Óadýfeýü}5Y°N½„,a׬b„]/¶Ø2õÜ΂Ë!à¾YY¿‡¿úí'³ÍéÚùo“õë?’ÏX×õåª<ù)´¹#²Ÿ–¦è”©cíjD[£Ê2s´ ù@|äLK91&©(ã°Î/ ÖQo9voí5>2} ¸3Ftàˆ¯ñ·üFÖ/‰ÄwöÍÊ|%‘­³{-¦ßSùS»Å/9/¶Ø²·^¶9åp߬¬ßßÛsÉ‚¬üO¸© ýº ~™™ï›ækñøÐ ·ÞwžÝ³r6îŸGd†w*¼ú̪íqí°~¼V ‚½'®Dâd˜«KN$bí™âZN¤5jÕ/ÝzêßN¿†ë3×Þ­Š©qÖQÛ`fBíH¯Ý +…æI¾ÅëÝýçØ3úë÷ÕÇþÌáåLåJˆ +›i5¿‡ÜS*É_þ¹i|àÛqäOyÞKþ¹ž@ÒLòT“îä<ºÍ)©Ã¬OiÛFd°^Fٮ쭗mNiÆÕ_ÿ%¹|õîwå+÷ì'—v›¹eý~dY¿·­¡äò¡s>¶¼v‡¸`CI¯, ‡ö/>b¼ër:<ôÈ–mÛáâ6ÐÁ¯~+ø/¥±jM ëå8y‹g¹„eëÓryåÜ£;—#qv°˜«iú…ª½âY¿™<öx°&w¦qÌÌZ…äl¼Zó““·?÷·÷نپÐ×Xö…µëçØ÷µ‚Œú”CÐ|È´•ùáÔß X¿úg{ÎÏÊ Kèó†rÝ.g—JN=7uäûFÖoñdr¾oÖ¯rÍgŸ3êø„S%Zx×[¶n×)œ°Î-€_›¬_‹Þ 'ûçûjÊvX¿(ªjŸõëÌ“¦«ƒ@+âú\\ÿÀ¤ÙÔòµÖ ¦C^è¿ÐphcK ­½UÜ—Á²±lÑCHî)%gý¦²QšíZlÙŒŒ[¯¦LÎ…m™œ[l™œïkÆú}ó‡wì:Àuõ['×îú| î?þýCî\f´G[>¹ö6dösçòK·Þלw3=ðÅGÌÚ6{©!È쯇9xæ5ÆŸXjã [·35®©©AâzË6ó1Ú…u»bóíûÖ?ØñdVä‚eýVo¼gäõwE$mQjÍúá:P}V:zñõD)„õC +Ôz­ª¥oáSWï- =qß± PÞK·~µŸùÃB7hkÃ4—±I^Rü }üÚwtÛ{âŠXñ¡ÿÍøM{}ðÌ5Ú‡q`ÕHyEVÕﳘÔ_tF]‹e¤¦øï™kïÂV~sxØ`;„…§¶Øé0zÍÅ7?à}óQrV58K?«Z25 ÖK³´æåÜMV¯9úÖæWËQ_:kÓz«kåb=•Ó¶ÑY_Cî=þ²ô ´FHƒÂÊ¥ž"e4ó-ÛŠ.Ÿõ_ÇtÕòQjÝ/Äæ"¥Õ± KËôÇ hΚ¥Í!÷žxšˆþÂþ;½†1Y bUÑA÷É2Èï£Ö˜&µ]½þžÔ]Ñ&óšE.m + O\Y>tN´Úwâ +Gr‘Î8/²ê½0ÊËÖ=„äž’+ûeýâ<”Ïd%ßÇ׳ìŽãÏóL%{ëe›S&çûfbý^±'½üýW¿ âéCçq}éÍá«G£ù¢îQ"#F²Ì ‘kïo*gÇp±eëvîc¢ïÇÙxÜÏ|<»«Ž’ì°ƒÇurò¶¤Æ”#©ñš{ Œ·ÿزÁ\vNŽ«ñ×xjí®õBc3çLÀᔹ}èMŒ§ªÊÅ$wh%ñ ¡hÐŽÜ$/,"¿ —å•s¦°öºŠ£…žp _—ƃ뽧-Œ\Ppƒs3ò>xô{ÈôÁ€rŸ¶‚}P"a”duþE¦d…`³¶°B7(ƒë 6šœÜ"§¸@ɬvlx¤~+ +ʪúÂS?^7ø©¡8FO«3Ê‚GhnÉFoÕG·1ŸõÃuÀ5ZÊ…ƒv`S‘˜êñÊë°~È ².t?Ò¬Ÿ>'‡x kÔ0c•ÒeiÖ`P@¦ÌR˜Ù€2맯1&H¯DËÜb'pX"Ÿ»Ì¬d¯QMIø»¼Ä1áôk¬élcÚ~/Öv€&ºzÜ@űö9U"#  Ûcšhc²™Ñ’ÚªN/.ƒ†Ì’=KëÉnÂgÑÒdŸlÖ&mk×mò¨(lÓäcbÄ~òÀI(Œq;Î÷%g¬FÙXvá!$÷”Öï¹^ä‹–¡3Ì¥†ŽäRO_Ê‚Lʳ럜µn¨)õ³ýË`‰"¥›éYY´YSÒþ£ì_öÖË6§ü™UK%§²~Î<0Y¿OcÍV8¬¼Ù—ÉáP¬çc®áŠpΟLçðN‘Þ_–{kÅXjŠÀõ£;-RËõ¹`³qÞà—èî3ŸõC©ÏöÅGxNé–mfýgÆúYÖš8œcæÛ[Ƈñ5 ©Q¢ìˇÎÅY?cażP<Ú©Gý©­Þ±(÷Y§šÓ,±™J‡WÒ­À5Šï8uõ.n +ᡬ/¦¦ùCíY /à/Í Ã®ÚY)mL³~mYˈ5L[ªÑrPƒº,´ƒAôuX¿ü~‘ÂO£f`qMÖ¸ÀVeFÉOÛŠêﬔ~¡k­¾ž®Šõ+õÄ; + Ncý´ÔÌ&â`Dp­K¤­á÷b¹“ª7œ¾ÄçŒB‘^c¦Vr¯Šõ#çó’š5ÎÐtù~Ö&Uc›¤ …äúÆäˆm®Gø¾!ðV£œUvº.hL_ +Ö¯>ÓW“¯ÙÇWŸ÷ô _¦ŸáYh™œï‹³~þœ°ÞëwÕ@¿ua+ÖÏðj–Ûú{.×À9m'p>¼H-g4÷´gå¬,;„ïDfdÕ:fÔ,sÎÉ /®€kD€†œE¯Ãú­Yw‘³ôpð8/iž´pƒóÿ>Ÿâ0>“Ð $N„õ›ná·²}ˆðBeÅ—0tM…‹qX?a^Örò…eA‘‹å£6µ©ºiþH—”Ü~ê3?§²~ÁúZ^1.´Ž)ÈÅ,Ï{葪}|'=ã°Iœ3ªNË‘uÑ:ÛÀÖ/¿# ÿt(ø2ϧÖîâ3°rŽìdë¬,ŠÏÕ×0E¶æSJ䵨¢'zý:Îúù]>ÈŸ²#Dz–ÏúUŽB¡¾°T>Ý×áuLmÛ*Öobç(–ìbàªõ{ón"Ìx•ÂÁZ³S"ʈŸÇ.®|ßüLÙFÔydýêËkó}•<šÅYSåÙŽÍÊ+Œ0ƒ ¸¿äl×(GÖoáY?‘fÎ3‡!iæ9låßÛ>íg#qìÒ:ÙŠ5Å ¬ÙYhò_kù,7þ嵎yÊÎiŸ²sÚò¯Ÿ%Ý'áÈയݱ.VÎppÉ}-ßnr)Rs4„Ü·¥õ J΢¯Y~çÕ/¾ùN“¾çÞ}ýÉeè4Éè;Ç·ÃL†›JoüÂúûkŠ§X³;à¶lÝŽy6©ØM8±žäEÇÒ¬2µ¹W×MÜQ¿¤°Û>ËŸšeo7Þ«*¯´7ÃV„êkŸ]8§ŸÝ *üâ#º=d:X pÇÜË + ÑqN®ÙFµf–ÛC¤å<ºs™¼ÿ”Óª,)¬ßZÎõ,:秱ðšÝS‰;f¦bõZ°—‰màú˜Õ‘ûU=)›å…¶ît¹t+Òׄ~ºu‰ÍúÉ¿Yjù€SWï–j0dI\;ý±†Ó‹ã£P¡¹êÅæ:×Pz“S·déûA­`=® ötÈ‹vE´Añ_4«C…1·)©_¿Î¨Ny P¦Y2M«YåÆÒ6¹ýfY¿!øK”ý}Öƒ|ñ6OùLK{nɧZÚóOîòMB¹¤Î%.婶ô©‘¯o{ºËgŽ å_ônÿy”Ô½õ²Í)»[¡1“Œ¯$qVe¬_~JY?~ëA¯­rÖ³eþXˆk€Ã#³Ù5ùgž?Ûo¨9/5ÄLÓÌ‘3¿–»kÖGUœb*|×b=þýC’²f»œr1åµOAÀì2SwÈÔíPÅú-ì0)\ý¨wZq§’f+*Y?C†ó°~ZBa9ÑÆ‚çúR¬ÊºÐ{Ù¸àSrÏ8/[¢lÏWRN8¬×îÆ¿EèÔ¯¶ÃEŠô¹ª:¬›±ŸZ Ó Ž Ñ—µµ ÷È +½ñ[ö… åý^É;.ë——"»~«Xƒ-»+Y?›8SsZTd×$;ÂTÖ/Û‡›ß©…|6ÖçÔ˜N±ÏQq¾²Ö±÷¥:y«ÐÍ°>?ù ¶›ÐÎÁ6©[kŠã³ÃúÍÊ÷ auÊ(SÉôL_ +Öo*ßW‡ã3”Ü­§Êšüà°dˆ9¾ÅÉgx[&™Á›•û«Ãúñ÷geýÖòsêÈG\|ósEû#3çÆñûê·.Ú=SDSSãœü>ë,á¼²-Û¶KÊ2+þä“|ñ)×ó¯Üóù&Ípž°`ºÔä)óÔÕ»Ù1/!ž‚ö!Š„Îí +:”‚L"bÂæzÞžÒT„ÅàWsÜáUíi0fA,ÏH$O±÷ÄË[ìN1‡!-±~årñü²™ûúoyˆY?„§—²°9< ×»Ò2šýÔ<¦¾†µ¹OÍ·9¹r¶´‹ùy­LíÑë¹5Xõ3ÍÉëÅx +iê§"ã†3 +iÛÊhÀ˜Ò9. Ó‡úåY£Ôß|V]sP NI^æÔš|õBU›”– )X¿Kob$‡ÄõO^y‡cû0ù¦QA&÷”úgýŽÝˆ1Væ8Ì—âÈV šû¸9[‡(ç×dVNÐg}þ”r ×(GÖos²~"ë³~ò­aýp]0w? ³~g/ÈÙãKöûôaüó–òó +à•q×Ýν'®LMmbÏH—Ið*yÚ´ýæË~xƒ§®Þ“rñÚ9 ݪ±®óZsθP¥–Mdú~qLÙ>rZû–m;€:}«jù°Åàr׈´0ñ­aε’gVèüåL{ÿ|].Ù¿F[IíGt“ùêù°EvxVÎ؇}$¾.¯ÁeðÆËéëkÍbè&%¥W<É}f9íqôÙ&ô×ì)ˆ<ŸŸmÌ9ÿ„«F—ò¯$ð;Ü¥åk¢%0&2ªË÷•¹0ŸÑ[½ùT\Öa%<à´=€ãžH&ŸáYl™|6Ï—SY?‘.Æ™c—™öÈšš×”ƒÒª~Ž«÷´Xü‹,:úl‹Ö‹ÈcסO×v˜Göc‡åê"w`( ¤.,¿TÞ7„Zh IÕnÍämFdÕH>ò}£ŒËäžÒX¿Êý}Še¦lõÖGg ¦›WÎÃÖ!…¶4™—,3€ñ}”É®QŽ¬ß&gý~V½ï/øÍ_áþ:•zŽ}ÙµžU:÷™¯È©ÖðOõ¯ú¾@ª²<}ø@YÅ>p7œœjÈ5´Á³ɪaŠ7•l…õK^ +GFX¿äº922n|ß(ëÈäž’'?ëT>ûú§ÏZÖï§Üfwùçž5»Ëïw´Yž ò}%ûèÌž£— GF¦Ì ¾?Ydg¤l 8¶öŸú~DJ:óÈšyEd$ý³Ü h¥XÃHÚÇJ±¥¶*å‹·‰þF9 ÙC/ÛÌr£º#ëåa°p©ÊSJ®ÛÕòz-­g3Ou-?™Dví:p‚'ç$G|uZÚœõ’¼ŒChE³Êº¶Êë7õÙ!K½ëy 2¸NcäûF¹áY¿_v+ ô{=;„„’•È/–Ï"Ãeø>~\i@a—•_þÖ>‰pÔ@¿?Ú¿þ¨ãl©—’RÊ‘2b“sùa/rä ­'G»8Ò0M·ÿ<ÊþäÈú%•CÀzŽ¬óu¡E€=áî´êZŸÖ÷"5Óv 2Ì–ÖV‰Z,]ëúuÛèµ°!´­oç:©|ß(ëËäž’'{eý4oUðY9ÃuöÖÇú}åÛûÖlÿêëò¯~“_Ð÷Æ+ä\ ]TVå—µÉ8÷gý ôÏ5Ê‘õëMaTo€þúñ'‡ƒªÚ-E×¹Ó÷[¶m ;$‘ÄMCkE k§Î×Ó¿ƒF9(™ÜS*˾Y?a¬ê°~»^VLÙŸþz˶ôS¬®õ_9˜ÉÝG/U§üÑ—¿µ·~Ê6¯ôqÇö?¿ü„ŽéáÀê/5xì•ßè¿ò¿÷gÐXlõï÷µ GÖoø²‡^¶™¥Z‡Œ Æ—ðƒñ3Û É‹“ÐÉ•ß ¡õ8ºØ -gê¨np_êWφ’{J%Ù®|öƧäû¦³~9·E¶‹ÐR RÎŽýñ±ù1ïLÖÏnö¯¾NÆMžÕYð_4ÿ_¤‰ž±Šs¬R@ëðÔá‹Á;ÿå8¹¿}#á¹Wßµ_|ìøY¿áËÌð,²4ãêæôšq3­ÿeZÙ˜¡H®ù(O [lYs$ù¾QerO©,»Â•Ïr©g.c¬_¾£{Ü„õÛ}ôrÁ§'HíÈäקßøÃþ3¯ ÅvšK+oþ©we®MØ·/k’Ò)k†ñ dËcRþûÔ‘ Á=öƒç;rÜæ†dÇ;ÿøDñ/ï(:2ËE +rìêjæñGgoÒ{Ž]†A";þ|ÖÛ5Ê‘õY¿Á8< ³\­Û|øôD•’ë6†1lˆ0ëèü¥3†a†äžRI•õ³hè¿¯Ü ,:óFãŽ\yÇ‚¬æHðÓ¿üƒÃ’q“GÌBÍò.<~'†wê!J¤\ùòŽ(°ÿô ÞÑZè÷Ë?|/§üž:|QRÐ,û|ãO¢óî#—;þä4TµãÏgýÆs>‡&0óÈÒŒ«˜Ó‹Ëú3Æ‹¤>ó—«ÿ™ù¡Y¸Å2ºh UÆÞ4Ñ2mÞ í§qË·5Ž á]3ÊaÊäž’–?¶° ùœåûDr!¢|ÜA>ñ`–/ZÖï¼eýôÇž}å7Ç®º›ìž:rqõfñq‡£–õû›òî9'Ø@üQŸ J&qÕòn”N +Ì…ÿôSþò{ùoA)*øeÅúᎠÁ`Ø}ôÒê݈͜óà#Æ&rΧÚñ?ç39Ï5Ê‘õY?^6Wœ$È̶’ë6„±Ïœ!yÑ$y)6Jè®ù%©?Çáë•`Q q=ÞÓ,qT¬ß+ÿuææŸvþßã…ò™34ßøë(ôæΈÇ!ýÉÊbN?ë')“ï ²~qèGÖåýJ¢.™cN÷ÏzÎgržk”#ë7²~Aiœ„0;£lÌ4“CД #7"›¼Àro–Q\&÷”´ëç|ÒýÙW~ÃÃOX‘¿«býþÆî³#”ÓŒž#¨ÿ=V>ÉH÷e;Þÿgïk›ä(®5ÿÛ|¾ºk_Ø„#p½ÄÝ0ŒÞ‹ DŒ±ðµÙÕÈFF À’/½F\ºGÂ’[„^FØÞSyºOŸ>ùRYÕU•ÙÕgâÄ=ÕÕùz*ë<õdfýl狘>Møĵ~\ŒQýps˜éR]Åš®š}>îñ’üúÀ›£VÂOõ¤ ŸØ¶„@7Ž½I1lï*S|Ö¨~æ©Úáz15èoŠsë(C¸0yÙ;Àî&ŠsÉ#¥g:QýÈÊU¿iá«~@‚€ á´ÏGž:Š’WýÌ&Ëúðß#BçüÉ[ú7QôÞ¸Œ&¨Ûvæ=:mJõ{c²Öïa\ë7eWÈ̻ݯšw»_ûÑc»ñ'?ú˜™í¹IFmH ˭ЛԲ±®²E¶ãf\G[7ñƒššššÚ|YòÛ‡Zc¦ª_ (T?@©ú™÷ú9U?|Å9)b§T?ÔWöÿÈWÓ–Ì^šøù^³/(}KdͼV¯`‚ÿþËgé[® Næd>Rh|¤úË3[ŒGfïq@Õïð |“—dûþ7°vX‘‚÷™ ^~<¦~ÀŽ_ë T?¡÷©ê—!æð´§Çx<õÓ<Õ“ß)ç“GJÛ6¡úqáËX$ü Õ…¿i“ª_àµzæõ S;|r3¯løÒù*ö%\ èz! 5dŽ¤ú‘è4TýÀè­v‚Xµ{@.ô[2›½ŒÇ’üTõ› ëà*[d;nÆÕ^Úº 6æË°ØùԮ߭Ójí5o[x‘/œ ¦¶ä‘·´ªàDɯø#ê÷ÌúÔ¿¹öG´èéÁŸI×{äÉ£‚4­ìÿþ +ÎïmÿѯF/Rß5ø€§ÉÕ@R éø½†KâZ]hïz×}ÑZ? †´Ѧ™÷þêw¨úAíþˆmk³d^m?Y 9n+¾^ÒVýrйUõËSõ;ûÉ?ÞýäŠÿ^Õ2(sGX£qêZõmÃ[æË‹Î\Ê«/úä{mW$‡þRì1VŠ1Tõ#ó©~¾´Û'­}ó(€XÔâAÛ‚+e.¼ŽTwÞ NÉÏ©ú%¹Ô„us•-¬UzòvöÓ¨©Õ³YÔÔåW P¿äeˆ7õ:5µÎLU¿šìò¤Ü…ұϧk·O|Ӿܜ+€¶Ø!z÷å¸mÿÉÑtM³W ûV¦)êÅkmë}¥{{ªê—!æð„§ÇØÈ9D]ñ¡XÕ˜jj1D»UÕ3Án®²…ÅÙÇäÅYõ¯¦¦¦¦¦¦Ö±=“ZéãöìëÁp"¢@œüIS@q6ãˆéï°!N}ˆsA»DœnêÃoÜ"·‘#Î3í”EíxÝ'mb·˜Ýž‡‘kœù»bVØÍU¶°ƒêƯÇßÇ…ü `í2(****NáûŠŠ}ÃÔ_Õðr“i}JhXSÚr¦Df4­¶m胾ßÚ¹ûô>³»Ë Þbv{šÙžYè\Š;»Êëú﷢¢¢¢¢¢b˜½0¹¶¥¨ª_æª_@­[Ï0»Š¨«ÿØL)%Tý}ºU@D-lµØüäz78¥Á5«!úÕLgÝÍ~žÞK®j)ªê—¹ê¯ôמ¿FûWªý)******:1y¤”y$`1„Äõ*ag¬P¢sŸÿLÎxƘ᩼o^0ùÕ×oŒuKy_ ãÃþr¸ã(*΄©Ÿ–+***Î;KzßXõ{¶Ÿò»÷K‡8ë ÒZs;Uï›GL~õõÃãmXïã*ÞŸ>*ø]Ìœö§¿òÍÿÔ9ŸŠŠŠŠŠŠŠ„É#% U¿#cí¯TÿªiµÂJ©ñ©Þ7§ØÙU¶˜XòDÚ¯÷‘r÷ǾºÌHßfðÀw>š(†”²ÈQµ?EEEEEÅEÆä‘Ç´ªŸÐþbT?ß0•4ÁJé·§VZÓ§ïmŸ_Ìá OqÃÿœÍ^'ô¾õó7.|"}×Í_€Âχ–ö§+þ“GJÓª~NU˧åu¬Ç5«-Fê•>¥/õJ±vv•-&ž³ õM¬ï{åýýrÓ&}׃6üìÊ÷äº?¡ýùJ¨¨¨¨¨¨¨ØoL)e¢úE®hK¾¦¯A]/Uãëæð„§Ç¸áÎæ[å‡kô>½,y§x׬?'Äþú¥\÷§+þ72Tý:±Bþ˜6³QIÈ òš™·9g®7»¹Ôæ×:»ÊÓ`Puš!\3ó0‘—íÃϧ&y:ßpãÕÿûÿv<ñôî7O¶  `>¥LñÜ}…¬cï+******Î áJz_ÇXÄÀl\x“ÎörIµ3Œ³.ó;Ã3e-gÌá OqÃóœ-°Êï­ %¼ïðÑcß¼ù{KÿôÏdÿr×Ý6ëþN}8õ¾?]ñ§¨¨¨¨¨¨˜¿z£#áOMMMMMMmN,y¤4e)T?ŸÞ×75”ª{•ÞÛÎÛMqN1¹æÞo,ÆUóT£ïÃs7Þù(ÄûΞ;ÏIýÀ¾yó÷®š?û{çâÔ~/ý~ËÃÊs/SËÜv÷Îsà«›¾{§3…-mÇ_=sì4¥éø,Úr´Óôúõ^ø èLH“Ÿ'LÙû2?ô‡yú"åÛ¾ÿ}g6Þ†¼‚E‚çCíŠÆq}ûÌÚéQÓeàŠŠŠŠŠ“GJ;1.‚TÒû¢t´Ó×'œÖ¹\©!’©ê×cëì*[L+†VË’ß—×$õ#Þmÿ÷(À‹kDýýqê‰ûT¿ž È×ðó¡7>žP±!۲߂‰ŸãO L§àtæ¸Ú„øLÒOø,rĞƔŠ2Å’à¿vvIg1b©Æ Aú—§oP ž 0H³`¾¬T*;dÐ΀D°lT5555µ¬,y¤4eÙ¨~”¾· ›k»R} + ¾½½¯˜Åžþb1®ZOØœïtRöÚnÉïêøﶽ;Lý€†…¿LÞðÞoÕ#Û¾ÿYÙk™ÿü‚ø˜ó¹bˆ$¨ Yìü•sénÆÇŽ£ +ˆG„¦6bdV©ß9SØ îY¥M&Ô/âüQ!­ãÐ>XZ¨©­ë‘ršƒ(****:1y¤$±#d&½Ï'êµg¥jc]yQµ¿Å±Î®²Å´bhµÌ§ú½4¡~bª'ü]¹r%†úÁiÄþlêwæã‰ðg«~4¹‘$*Ô¿H~â“IÚ‹;ô+ä)N(Æø\M®LAð_š<Э¸qlcZMs‰\¼RÔ\ÿÂ#ü^Z§Ç¥=üÌ 3a—Ó¿âÒÞˆ²o}Ÿ­ÊËÉgŸ–¶ÆÆ´Üé'Ôo:k_wÀϹ/Q¨‹E™§æÜÖr*55555§%”’…Á1ÔÉÑÖ]k7ß±eb·/ƒÁÁxâ¶çÄÇð“ûVöÙ_ÝþÃGÀÄÁ'ÖÞÅ\ºáJýúcªúå¤úùÞänÞéð•Mýˆ÷Áß¿?ðÓ0õÛ³o?ži ˜2dAªŸx·;–iéA磢„üŽéS¸îŒÔ« õ«þK«áFÍgT»Hw›Ð®`š¸bŽÖÐA A^q>$ˆ9NˆûVä8!•V¾Ð&Îàºê\1´=jJÍV¹&(Ê@å)Ç«~Bëļ„ši«~ðïÔƒ¦º¢·PLfÀ²••');ðö50úÀ퉣gúÑ9dpܦ~Ûžs؆ÉþÒSµ¬³«l1­Z§Í¹½'.ôûôKïlO$t/¯oxß×þÛ·.~ôQ?!ü^ï~å«ðr?!ó!E‚ÏâøÆXˆAõ§AÕO¬ãB›­‘¦ JD‚Lò³5¾i«“BøóI~Îøiv탶Ægë€NãÕ ¯õãVL—-kd[õCa‘gM'ˆ¹r*jjwÝ#jjjjj³XòH)‰a ÉûHïÛ{â’ož§MôJ©7'õëÂj±¿ääEmK~õõÛì1¶t{ƒds_š¿Ûr¯úíxò<'0çwz ÌùÜ“# ÔID’ÂÉ?­)êf[Nêæ/v‚‚¤ÐŽ.TrJ°”ú‘aãðã6r8’ú :\‰ú '©Jý|P…ÙõMG;Þl¸¸¤R?555µT–ƯÈîO"¥’3Jab†êòÏv|Û°ZB ·¢œ­ô‚!Šóˆ]e‹‰0¨¾b†VB3µ'XþÍL¹Ä ŸCv¦~^¼èdmýÕåË—‰ú‰9ŸDý1/Ì—J‚ˆ%$o» ×jbòíŒúa]~`¨ßõÃ3_aÔOÔ½›¬·›ØžŽS.Ï^ð¬áT(R Møë;"r¹#%¡ß:É §3>É/†èÙçÄ=ã\Üꨯ]}ŸVk×ËIýðç1ÔϹ²RMMMM­ž%§{I åJªßýÛûlž¶íù×}ßé;à¡~>5Wÿåqq:^š,* ¸ç}£ã㉬E^*üõÝ’_}ý6{Œ ¨~W¯»÷xáÔï²ù;päE €·þÏïƒýïûú¯áq<^Jý ‹RÕocLåhgþ Æù«è_®ÒWÝLø ð,•}PlCiâ2ÀÀÉ\ºƹ.s'ø6„±=N‹&«Û¬¤8!½=p:e'ªDýpQdL¯9'|ò#œ® +êÇË©ÔOMMM­cK)qËMõ;dæ@>wâÒH+n>½ï~3™ìyõ#ÔìèNøäçpMŸé;¾s¼ñKÁÑÆçÜ·²OÁ¬Á~þÔQQžeÃ7IR¤åŠXSB®úÚ­täO£6Tœ;L®‹õ7ª¨~Ÿ_)¡~;ž|æ›7o÷¾ç‘è}aþàÇ/>¶ý7ßùïÿãåõ0õƒ,JU¿±¾†2•Ü~‰9}ûSöRr²ª)†üã\‹ÇK©úÑ–˜â8’ ÒòÝÐg®ñQŽ¤f’þˆé“>ÈËL KäËë«/mþÉs("²òJ5ÅŸPëóõoyŽ¨ÿŠRÁÉ¢vv›ð’P›¿Âæ+ŒúùT`¡Ã*****ΈÉ#%ÝÊ¥ª­€ÛkØŸÐÎHbCVu»áhÜ”Á·‘kýJc +ö™B+Ægg„…D©±ø×l7:‘ƒ+þt³—>YgWÙbÚ†W¹T¿K—Ckýøöž_ûÆ·þ×~t >pµû¹çÔïã/¢T¿ñ6BayˆQ<¡Ñž™Æ‹WW²ÀË"U?›¥òY”¤`.±WTø=þ~!GòW$PâöÎ3<;gR¼UIáâ`ËÜ9¹ÔN*™òu†÷¾ ù¼´˜Ž]5[$]²¶Á[ÅòÜUõSSSSëØ’GJÜ~÷fGx¤Šê7Áév¤©!#ó­ø›]õó¥çà +A<‚“HùJC©úá&|TÕoq0‡'<=Æ ë [@õ{ï7õƒ? x6ðÙàø+âÅîDýÎ^*_뇈Á¿­%õ¡¾¤îÕFT©¸.©h£PýbòHI`7†òG¼ê'Þ™N+ép)_˜ú5®úÙ)Ün¨eDÔ/ úá´Ï©eƒwlYÁ­lTõëµuv•-¦m˜q•[@õ;ñÁ¦óåo¼õv<ïûæÍßûøÒ%矯ý¹\õ#jq^ŸXÄWÉb^6¡ó¶5555µn,y¤Ä-7Õwø䪟`ÅûÙÇ{ªàŽ¶r×àZ¿°ê‡Ôïà˜ †U?Zñ‡¶U0ëw;«ª_¿±³«l1qÃzÂÆU6ó:õ‰ê7<·yùªƒúÝö¯wW¢~`mÿýJ÷ϯÒgx_@õC½/¼s¦¢bmTÕOQQQ1ÌAéËVõ“ŸEýPD£mUlÙŽ[ªŸÙæ¥TõÃ5†8Uä.T?þ‚?ÜÈ…?Uýzl]e‹if\åæ|¥; §/nŠ^†¯Vå}Kf1à¥O>³=!q.ù…×ú©©©©©©©õÞ’GJÜòTý€-ÿlÇ!Æþh§M €|‡O¡Ü[13B¹fçS÷»Ñ‘À{ýFª{‹ŸPýh>*Îùä{~úT?¨¾ã*«ª_¿1¹.ÖoÜ°ž°9U¿ã†ú­Ÿ¿18·ùù•M.üýôÑÇjP?°ÃGñÙžŸ~¹9<·£ú)Ö@Ñ’Ì¡´Šy"^ƒñ¾4ÅÇ–üK›Vò„æPÅl1y¤$ñ.c`'£¬xÐí?|dòÞsç;ò·Æß¹pÀz»Ÿ¼b)ÛÚ»Dýì÷úÝ7~;åNªå…Gl£Y©{ÍŸ|¡ß·Í{ýáê[Ý{Œ]e‹‰ö+îÈb§`go]˜¢~ÿr×=õ¨ßÿùõã\ò{ó/#ÞG{¼7ªßì1¤ˆ+âãU“dŸ„ËÜ6[‹ÒöœÇx²Õöﲿr(æ8£‡té-]³Ö´ùµq²µ~Ô¢{6µÒÇ­cÕ/’ý=wâÒÖ]kög ±3nËÓïg«íN¿ixÖÎq"{¦‰ØÊó¯‡U?‘¯Pýø>Ÿ|·™›Ù{ýÄ{á¼Ï©ú%ç/Šµ1‹'<ýŲ¨O¨~Èþþò™\ñG[}âß뾺6þã’$88·9;ïK *Î –ú’ú•¢¢â3´Ã§ý«ªovÈ¿(ÖÆή²ÅÄåžó ìïÒ×mö' ýçä}Ÿ~¹‰iVí™ü«¨¨¨¨¨˜'æÀÚÁä‘Òv®úE²?Ç;þ²eCep뮵J¼Ï9Û3þ¢X³xÂÓ_ŒÑ8ÄœOd¯¼·yùÊu¢~œý9 ÿ–ó¾ËW¯o¼7á}1ª_òû©¢¢¢¢¢â\`Ü­oª_'È#á˜9Ÿ>íïP£Ð~­ùÌRn¥9ê*¿Þcò«¯ß£úm¸Vüó3Ïm^øë”ö' ýG§á¯þüéõá¹ +¼/ù=TQQQQQqî0§ª_%ñp$ûsjn^æ#h1Ì®*º2ûÆLmJ£¼o±1~Ôcô´â®á\ñ‡³4ß¼°ùÙ—SìOÐ@û8œ ?9ua”‚½ÊÏží©ØR û0y ³E|&öõ¨ÄJþ ’ +“38Uý*¡ˆ‡ÇÇþB +`ZœM[ŒÙÝEg{ö“_}ýFßHkß5ìðG/}°‰žPú¾¸²ùÎÅMþ[šGê‹46¨³Dbs•õ¦Ìà|•ÖYæµð¥3¿þŸ§'´ÔÂÝ`ò«¾qߨBrWSõË ^"ü]'ø‚‰ÉŽ ©qÙaÔ¿\vÇõÂìÚùD4Ú즪_Ÿ00Þ¢b´ë ààìõ×>¸~îÒõO¾(hà•k£w@ÀøÂW¯pÎçó<9ïqË,÷¸äñF{qKnåɼ/<îlÊ™?öÀgæîúÍ°7ÛÀÎê’›SÕ¯E<ìSýÂÚ_…Y q*[<6¨:Ó÷µF÷é]æ¬jшç$Tpæ{é?ñ%Ï¡´i[ l©.aí/¹¢§ªŸÏJ•‘¹Óþ*­æ‹‘ùTòë«uv•-¦E>ski©] ÍY²[ÇPMml·ÝýÀCÛ÷”ž¶ôOÿüôÑSõ²˜£f¯á¨ÉËœ•á¢Ý]/¾So…o†VÏùÞ2¿n3£çãhƒý­ +~Ò¥?@ÖP€«ßFKv6¶TºÕΓê—e¢úΨî¥Âð~žUÕÌȶRœÌá O1þÉ[ƒkîfÜûoîY=—ÞuôÔÊž—’?Áö!Q?{ &ÇQœÖB ÷ƒ'/&osÓ8ì~qöZ÷e³Ë€Ô>ƒÿ‡½k`NÛ—ÉôÛÑšŒÅD¿í•gí/ YH?ƒ*RE:”o7*LSxôô礬…ñÇÿñ„OU©W£Ò¹ê×$ççí¶cõ 5-©~·Ü¹Lšzl75mÛÛª_¥þvõÒ·µ#êW:&äTòïÜq4cÕÞŒŸo“ƒ®§ªŸmáØx¾Vù5Ëþ’µ¶­³«l1­Þ#¸„¼OP?A+¶<¸òõ›nxÂ*ˆˆ¹À‘µÓŸÃ·ð‚d<Až|Ów邏á ÿB€øÕÊž—~ñäAþ¯d.ӚᜃyÝuïVÈ¿Ú7<ßâq¸›c¦öš)Š°0ð¹Ra0#HÎ +bÙˆúÁWP$*üË[‰¨Ÿ}¦ñ-4þï×ÏÂWP» ðWØŒë,0F=¿³—bâø-”™ÊŸ¡×Dyø¿ÔÂÎn-Í—üœϼï—;ñ ¤À³C;û{[Û. éV䇢ŽCñb¯¡—¢BÅÆ”?§#h>§ÂŠz.òRQB( Ž?úÄjAýÎ^CÃÏðaÛîcË?Ùf÷¿L¨Ñ0µ'?¤s¨1WÌìÐÀÅÅ‹Ç[†.1^x‘¯è,r~j:Ȉ§õø ø™<J×…8ŸêŽµ(‘Ä ðèÎü_:“{#ÿŠÚÓ§Á‡ +LW.ù<¸íƼ§°xöðålU§«šŽFH¬]›PH{‹( 9¶³SÖÈË ¯úŠÐÅô ŽC»QCa÷Ñ™|ô€±EŒ6\b^7Hà^x§«@ …S^ÜñŽýñ²ª~ókáØ8~ÿ“07œ‘'vÃ:•ñ-š%¿úúm3È0¾˜ÔœÔϾkƒø 9Bh‡õå†É:s€‚áq@rE¨Kvš^ã=ˆ¿E…:"gqú†óçBØ 8ÖqÒƒ–ÿøzüj´úúàwpö‚“úÁq`ðNFÿ‡Ïü2áÎF kDDè¢v=ÃTT8Á9½‹ù +Ïq’ʺÔsõƒ\ð_¸Tù3â×CKdŸ}DÂ3‰GC#ð,à8}ŇG,0ÝÇO2tcp¸#ï£Byè‘Z)õ+uuÞãagEŒ/`•}ÔÏÙõöMG¼ðÑÁ°×—ÑIS ä€8 âè_A‚ÙðùÞ§|ÍHçpWÁ6ļxáÅÊûKÎìÊ©_êùQ;1_T\›â%—ðâ7ö´©_r2¢Ö¥%'Gý¶¦FæÚt/&qórR?ˆÒñÙ5WüñïûÐ(   ?|&6ÄcTß]ØŽNáFO_a +xk†Lñ¶.ÂÑ0õ«ZÈÂ!úwÍLÄÅW8ÙFà4,E€"ŒA¦ˆrã·…ägŠ&…Ï<2äîVg™Eù!qqB©pkPñ¾C]F+pQ}jLÌ:ìŸÇS?у‘½Ü ÚvÇþW‘ßAÃú¨ßòO¶ÑiÀþà´çgùið/]Ü àŒâ`àâM:çËE.ç¥,dYêÙ0õ »Mý¸ã•Ý¶¢„5F$$Ôø/òqáD‡Ñs¸7†G^/§ci¹ Ág~µsM§ˆ²áA(÷Ûcã©Ÿ]/þ¨M°'î" 2è)ÛÁìÔìC+Ù‹£|ðœû~¹“Yðê„©Ÿ³5 /¾4òôCøK)%1_T\‰ñÍ…ÙEÕIž nɯ¾~[ò!½6õ³ãs¼Ã:oÍâÖ‰á“0Œì0C„1ÔO,¬£ŸÀ +Iúci`S¯06‰ í¯xÉ)µÀiaîeƒÓP1ä!h$õƒ²¦IS¾  >óHUhI‘ݺîÚ*AÌ¡õµg 5xQ‘Áo©Äd¶¥ñLN€!kTʸñ€ NpþÜn¢JNUÚ DÖPò³Ë&¨Eþ"þç§A] œÊI"Ï¢4q^`Plü ç‰`ÕøÜ9²€‹Ú!’úÑç¡Ñ€œ,ƒ_¼UG¤£of7¯ðjºáøAO$0< +³Ý +¿À‡Œ–R¿€«;›=àÌv½|Cñ’¥±:;%p…©ŸH²ƒv³épîÇQššNN†3iJ?ÍñžÑžY{[©ßœš÷ô…éžÀ…µäW_¿-ù&}ñÔ'&EÆ6ºØ¢ƒ/Ðòl¥ñ†ó'¸‰ŸØV‰ú•&@ýà8Þ.âê@¸Iý¨yù,ÓaõjT è‚Ïâ_,[¥n†Q:­/ãV©5DQ˜=í‘ãÀ¿>±*(  +^aêçû¹omêçì…6¨ð¨2> ”í,*Q?H ‚ahH > Îh72´¡àƒõî6NêÃ2øi>×u:ûß0õƒ•†GÛ„#[áÔ£”ú•º:ïqî„d”ô&Ô OLO*æAýœj¾0pWœ µÔ@áá+š<œ~²go4ÝM>“GJIÌŽ‡'}Îw¬×°Î8`rJ¢Ö%¿úúmɇô¦¨Nøäш˜Ñ$bgï ŒkP?¾jÔ‰P‹'wS³P?>*+"%2œ»(¨Ÿý,]Lq G2h|¥ŒA£ó|>á²gÐå£~n äËͧUj QTb%Ø>v3°fÁ ˜Fÿ~¿µ9Q¤S…zíåø„ÏÀ6/¤¾ <>…‘:IA$õÃu…\‹idûRâí¾¦~C¶S +]‰‘,ƒÖÊ\·õ㜗”Pî9˜rxxtNÇ3©´˜8Æ›y[i§ݕàÜOœ-€YàW¼Óqu/I¥N‰§~¸¾Ï—Z`,µ Z’öçq–D¸Š¨ ©~˜—-I÷`¹_òH)‰Ùñð줯)®×*OTíO-ùÕ×oK>¤×£~·Ü¹üôÑSd¸5Á­lÜ9oó"b›Ù†Ò6]©Aý–ÆëJø6Ü V¡øccŒdà8¤[y½Âà6/´ p˜>ÎÆ„`¨"• 8NÃm^pÓ _ûøŒ¯±½àq8ÞšƒrÁ ‡¾ ËIý&8»Uä‹A¬i#]¥-zv¹6½ ·†­yQ€Ší '&Gˆé`ðL»£`G`§p¡Ê÷slmŠ¹SÑÖŽ1Ôj7°örÁ9fµ·yñQ?8‡fâN2Xw¨£MÔR€¼¼Î‡öĆÚev°s¢}v±=4ÈœÞ[ƒú‰gDN×­Aý Yì#äæäH8<âW¥Ã£Óv±µ„Ž·yÁžÂm^"©ŸÓÕù ‚ÃúFÈÁø¹ÁÅ*·DýpSMºðùŒôõÃјFç[Žn¯î´K"\zvñÂ-eðq(n4ªÔoNÍŽ‡ë‘¾ä\¯Tê·È–üêë·%ÒëQ¿¥éå pdèٽܾïÆϽQ[ïß õÃ%KãÍí) §ýÌ¡®`ÔÊ·IŸqÂçp¼çÞÒxëoÜÝb0VŽø{ +¸FÀEß; ÂÄ—Ù¿âåÄÝ7ßÒ$žú ÆʦèV‘/ÖÂÞ¼b8ýÒŠÄâ[ƒâ^\ËFÅ ½ :^‘€©QûÃ9,î’ç®0B<(ô æUg,Û,ùΞ{ƒH½)jÇ똤T÷øÜ`Áû®Ñ‘YýR«þ«ÇŸåë7ÝRL4GVO^À¥mÝ\õ™øÒ®£†úÕúm/½½‘±KŒ-‘ùvà ߊû£¸‡:ï³ÉïþaL) ìÆ*mêBª_cßÛ×FHÖ¨8H†ÔÏ·ôOU¿Å´Î®²Å´äOó¸Eª~Ug{âfâ…‰´AûªGí‚uŸig6¨¨úµQ€Åµ¦T?L‡ „³£ÓÌzC±~0¼Ûg*WiÏ—ê©~•Z#½³5ZV»£Õ¬¿Ò>Û¶LT?¡Ž¡ê·åg;lekp@²n¾}™lJ¡;]ð;À'Žžáç í\;ƒßŠ¤„Ò÷ä±wáàý+ûÄq8hˆ^Áþ ´Pfa‘ªà ©•)EUýæ“?Ík[õké¹w#sìàù|vhõ9v«˜°´­öxî8­úÕij×FéŒ9‡°^EŸŽÇúœ¼<ñ}:H§÷9Û° Oüʾ?ªê×8v`ϾQòŽ§ê·l¨ŸSïÛ¹ö®MèÀVžK{@Öœ§ýü©£tŽ“Ž’šÎ©7¤~øyÙCýt¹ŸZ7WÙÂZò§yÜÚPýLÄeDªÚ å?ê©ã»·„¥m¯¯Å„ä'ä¿ÒsÄ™sîÕé»cÞŒ-·^Z “g,@é¯ô•îm[Wì2´¿e¤êgë}ÀÅŠ#F¹#–GZp7[ãÛ¾¿8¸ÕP?®÷´n|„’ŠWýð_ëçÜóSU¿ÅÄžðô“?Íë¥ê‡™o³Ï“}߶—c>XUÍg¦•[G˜ÝǽXªå…õ¾êª_›¿ö7/8´ÖÿfØþµËà¯|(îâîißaUõËŸ}#ÄzŒì5µ# +©~Î]Pƒ›p®1×[~øqTë9ÿÝnt@<ˆ|ðçOÅ#;äW(wìû·¤úÂÅ}c$ÕŽLÖúáËþÌ¢¿#(ù|5> ÃoPœk,®|ÒR Õ–üi·Þ¨~5r¯aÛ(FíÓR›·×Ý÷ò¢X·ª_r/ôdµ$½ÙeÉå¯QÁz ýTõ«dó¢úq­íÑ]kÀ¹GG¦=ÒïFÊÝôš>¡ú1Av)††ë†¸v&Fõ;8¦~7ý©ê·€˜üÙK¿1ùÓ¼«~•r`±oÆöÝöñ@Žm<Á®ôä9!J8{;4ØË£·]w«LvÉ@©áø£_üwhÙõ⛃³×à_|“øãû_™œXXq_Ðä^ÚöT4æÑ·’÷lÛ˜áˆ]í±«FÅQU¿ùÅÙU?ι¶êÈyŸÍ×øüσo_EÜöŸ¯\ïÉ×Ûj¨Ÿÿéd‘¸p4¿”•d¢ú°>G%×÷;(æp ösÕ w%qç*T?ëîÖHìÔRüöÜðì]÷n¥—²­jTØ-ßWSEt¥Äó¯Æxñ“FÆuÛv›%n0>§È|õä…6ÞâÄYöÿ,rÛžc”jÇê«@ôV_ÿË‹§þúâÛÝûò»ð/ 0;8¹L8²k(´´a{W:¾4Ðöºâ`ûÏ1j·jSϺôÏF®Ç0âPŒö;îùíꉦ¸v5ªê±õöx)T¿Yîݨ~³Ìþj;‰ÍšUýp-ÞHõ³øÚòÃÃç½'>"ÕßSWWž¶y¡‚>Õ’RÕOqvÌõs`|aÕÏfUU¿âõ^íD¥¸öÎçÄ.?¸í¹ÁYˆ vìõÑ'V«Æ>ÕO”Yï2bñŨC +Ù,B ï[?>‡ÚhxѦTЪõbãFâsŠÌÁ7  +t<æmtµqÕ~Ëýš³‘R^È>VñUß-oÔet¾µó'£_LŸÖx¶`³<αeªúm sœ¥UgQýø˜)ü³„’ÇðÍ#^wðùÀÉ¡×à_Îþº¬ci¨âk§ª_Ÿ°AÕoj­ãkÈ㊵~lÿÜã…T¿Ÿ?y”«~ÈéFkýûä€KâÌÑì8:ayÈ4¹êå «~È¡(¶„ɯ¾~c£zXõ³ç|VRý€mEÆÒm°Œ´gŒâj¨~yb{ì¯åùÎ÷4¢6™ïX}5òIE툺¶ê÷ãÿx¢%õ"pó*@\¬wmÄÍ窩ÅôiUÿ)Uý°e*¥¹vúsªúm$ÖVýâÇL~-øÚ¹^ù‹&õ<ïr^ƒñˆ×ÙòÐÊ]÷nÍgŽŸS!¥^¨Íû:RýÚÇä‘Rlc‡Ïc«öøŸ=?í>Q+ä³@'ëÇs;G¼’ñ>çŸ`û^»Ti¶§ª~ýÆäW_¿1‡Q½ªêwÛÝ<½vê¡í{¾~Ó-·Ü¹ w7ÔÅèˆñ-|^ÙóŸÞƒ1!|8úögËnƒ`PŒD÷\éÁ8‡fl‡}Ãsüßµw>Ü‹±$tŽñ₦›¾{'Äütü¹áYˆ`á8|‹¦3 +zô‰U< lù'ÛŽžþ cí(eH Ó;¯á«m» HmqñÈjGé`D MAÿ’ÎéC"4 +âF<>U¼·A©øSwúÉ–Wœmßò"–è ÊÉ`aŒGÓë¿ÁˆmA9©‰x›ó:b]x<-Ç©ñüÂÍL@Ï:ӤȜ”¸m{ŽM¹ëtÜu,ÞT¾}Ô‰€p>Ôkò¯éS<z‡·•M¨~¾²‘gÒži^6<‡³ThÕ‰3}Àæ“ìÆ,’ʉ!þL«ÞNߦ¶²ûT\;42 wƒ2€«à¯€‹ù®â°êÜ·Œx8¯5OÆ* ÙŠ!|tçàB€’ó©FàcpíÓUÉ[ž?[˜80+¨G°ÅVO^/cfŒÏp– +玺²›{攣²yÂÎ+ J8ålþ‘jhfV@ ÓŒúRN£½èGH >Py°%ùH…߆Goº³Œ +3n_ûÃAh ªo‘…Wí;—¨xï<\oí_@kPÁ~¿~Þ^11ì/y¤”k¨~ÂøûÖñm ¶‘NÇç|:ßë~ç;gy|–)7 }¸êõ>äzâí~ÀaUõSL~õõsÕ«ª~@ýà¦÷¾ƒ'/üÃE¸ßa<ïÔÚœ1üB¸ÿ®¾~AÄH"ÒÃû5ÎÚ·> +Ø *šùB1‘¤§­ì} bKÁû TÃ5J‘ÒÊ/Š©0®+‚C—Ú1Æ P ¬‡ j6< qÅ$™S<ƒùŠèGÑp>æ e€t0ìÄØ Ž@|N­Ê#HŸV]A¼‡‘ÁâSƒ’Ðœ+_Æ·¼ˆåá|hs:BíùÀ’¥»Á9¼G°üP_H 犺4™­â„ÏȘ ¢²ãžåmE¹s%ÎîQ#ƒt Fa.d|û#g@$Øw£òzr– ü +>ãù8K™üŠû!¿²à3•ËiëMpû<–R©~®”E¾Nßæý(úT”YŒ PH ¼+¼V´Tõã@pZLsÞ'Æ(§2eÃ3‘POñ±ý¹ l¦åኣkœ_ËèèÿðyäÀ¦ø9ÄÈDû—úŒóy䂵ÆŒÆ:ôFä>+KpvßH…̺xd˜;´˜Í’"U?ì‘‚>¯¾Š£ÖÛÛf8ûFo¸*áü-xi¸ýÑ?‹aÍÕ¼ìZŒœjÜÚ8ã}ý½ps¼åÎe`|Àað´U¿9ó™Ñ–~Ü~¯×þ8»;ºnùÙ:×ý!%>óÒþzõªú)&¿úú9Œê5T¿BìcsZ|ªEh"f(›{fFÙªÄåëómÞ¢MªßSäÃ×ox­ŸHgò’8•)~ð'Ü3Ÿq™õ4;ù÷Þžèð+lO®d9Û¿ÔgDùñ|bÓÐ_‚S®¬Às^;HYiËÛª°E P”æÎg_äíà½Gôpú·¾öGÿ¶èWy/”>]Ä'ÀøàçO^ ¬õ ¨~9³¿ä‘R¤H8Fõ#äû¥Øû½H´xŸ“÷ú9Ïñ¥ìAQ¶Àî.Êû“_}ýÆFõªßCÛ÷ð»[UÕOh=aÕ§ ŸáŽ }øÛÕ&atq»0,§Ðì(HD4¹ãàhe›>£/;f«~"*ãl‚GABŽ#!•E¡Žâ™F05_Æ·¼SõƒÈsi<‹~HñU@õƒ˜Τiu¤½Š¹ŽK®Ù˜£~b܈3âð8Ÿ‚H&rQýÈ«ì-‚R©p¦.Oz“ç(´Ã’™™PÐ(Mô.‡3[íãÈ®ŠêçôíÁ ª_Ìsß™‘ªx t*sf©êǯHF›Ï"Iç­Áû—üAÌŸ\b³ß·í)„ÂbÚ!{.PýœèTýÛâ#×È|WV¼ê- _ჵ˜~…—R;;w@‚k®&š?‰í½áz¤ÂÐxh§Ú½ j±öŽåTæyÂÊÞ— áµ~Õ/ç9ŸÉ#%ÝÀh†é8Ì̇”f–ËI3œ+h§¯9¦€î\;3:Xš”Ëœ¥â欋¯â`Ô8j½´Î®²Å´bhÍÆŠ»ËŠ{³‚úýÚP¿±ž¥ŸßD›Äç™ê7¶Ñm×s„~‚?)1êô¿tfŒ¡„yMž·³b âvvdMŸ†ª¥@ÕœDƒÌ&r‰•ˆ¯qÄW¸†ÿ;Šdžû“j×ê«âQ¥mßò"A2p‚(•J4¦ð„[ÍB3j%:s2Ñ+h¨3âù#Yù“D-£ÜycÚ=âôjª¸3AðáB”,Ï+P¶"¾=yçæQy„RšgæÈ;×ç–”¯Ó·E?Ú}ÊS¶G†˜Ë#jq00J7¦©üL»7EÏr—1”ó›¢R85—7Ũ§Ÿ©h# JÈ©i–o@õ£ù™ô­Í­lVKÌqpnŠ“:52ÄxÕsÙ·~WüU]ë'+/ƒÐ©|j)ásƒ³Èj‘½Úß©Jãç€ê7åTìÉ wõ îðYÊþòTw§æzª~íϧ¬Å¨rö½ÉŽ.UÔ½RÏ÷?]å§ø¢ª~ªúUWýp~†¨¦ªêw«Y>#2ŸÙUIõçµ”—sæ`zN "ßÃ3Ðúœ†køùEvÖ[Øœ1žOõóEƒi¾™ˆÜø³Å«~¾–÷År±ã{»¸2ÂÛ Ž;ç¡Q‹ù´'¢@Hýâ{“£Sõƒ>êFˆzT`–W1áÓÔ…ç(ç\£ñEãNïhk‘ÜcT?ŸoóëWô)÷C12Ä«~û†Å„a¡(Áokàç-­ø‡ðvRýP•ŽWýhªApìè,ó'Ò¬`1f|ÆY~§ê‡ŸE®,È% úñ‘J̬´ª³mÅõÅË üJKíà½9gÄóíPýx/„Ù+©~8³׿מó™'ûK) ìÆ„RIûóÉ¥" Íû5/‚oJÝ‹ûÂzŸJ~‹`]e‹iÉ•¾FT?Üîl´—‚Ù‘ž¨Oöëpihpþhm¾¹M£Òá|žОðI¬xz¡b ¾) œ0¢uçFÛ YÃÔ›p›—Ñž§?›<=žV:LQ™—hŠ‰óo5›õ Œ +€ &EÅF¦ÁÁ-%ñ œ†ó3ë©~XZ’,ÅëLõC¢}ëx—°Ëè«ÑÞ‰V³ãfp[šŽ4DaØòÔÅÔP¸§þkëS¼1mw¥êÄ«~XàÑ6/§?C—&y9Ë&Ê¿E%Oâsf;)gv‘ªŸÏ·ù-ú·l-HZ#ƒíxX Û‘ÀðÊ…Ëœ +.gÜê–´Õox~Óöajhv.p ;0îÙRðwË K}FÞé¨ô9²`ÂÙ#•èAÔg'›Ÿ”µ­(6oqáà´Ïx‡§åÒj:Ui{(ˆwª[î\†ûcÁþÞ»ñôÚ)ü n h¾»mÀÆÉ#%nÝ«~ÍjQkÕõ"WöÅè}ºÊoA0‡'<=ÆäOóQýàÈ·²ÇÅûôœ.·Q³¦­úÁqZ7±ü“møä|XQ{šP?k}æ‰ÃmWŸa¾´áùÛo`žýN^î°²[ìAÆ?pµˆö] ðÙÛ®iÇ~Òhøûv쵆êÇ+Hû–Sx6*{‚Ý™ê74»ÿ ˆ«~¸J}f0~{ÂÒxXþf1HL¼#¨Bÿ¢Þ\šÞÞ©ú Î1wž­7õ ©—;Œ}@äå,®ÿ"·¤#q¶€í!Ò™-mn0^1:Énœr¤êçóm~E‹>ÅÇΑÁVýp—TŸZDo+À¤pOEüÆjñ+|ÓÁÈ©vào\Ùûß·6Fõ£ù~äüm¸;¥ÓàzœrొJ5;Éð13ì3ü}èˆÕoxnSô—ïÊ‚zMœ-8RQQy¿L¨ß ªß€­FÄ7¤ðvpŽÞ¢0tÝ9Û?¬ú‰^-,j<6Âý…Þ6R¼Üáøyߊ¿xí/‡õ€É#%ݘ-…TþJå¿ +‹ëêz1Ÿê}jÂ:»ÊÓ’+}Üb$?0®÷¡9ŸœÓCæH°)«W°~V¿ƒFžë¦îqÕ2lÉù²äMZ»U³*Lž ;c5íû£Oø«-ÿu¯&”¸¥Rý+½é¯tçÏ0PžJûyªÞ·h˜Ãžcr¥¯Tõ³ŸUŠÌ‹[žçY}é +'F®Ý›#Ë ÊS¯FbòÎcê˜C9óÇ<­cLÞªÙ–¼÷#FL-Äý1°ß˼(€É#%ݘ-…„±0^lIÔ«¡ô©Þ·€ÖÙU¶˜–\ékUõ+n—u­ôáj#V/÷Yê•%lÞœŠÝ× +&iÒþÙü¶gÎÅKî«ÔÎ)ü…µ¿Ìå¿ä‘·ßu…¿`Â`‚Ù!¿+Âß!Ë+ÃB¡Ã9Ÿ12ý0Æ×Èn ÅcgWÙbbrº·àÔoÈâüJ™&@º‰a22£¬úS}ü\T!µ†2ïÓ†sóت9—3¹ÇÆáºØª_ŒöWO|Å¥Ó©ê7»ù‘,^ (ƒBœ%µJŸJ~j]e‹iÉéžR¿Yl– +fbÃÖÖýÍZ¶³×’´Æ¢9@Ví96w­ÊÉ­¨É=¶ÁzÕÓþꉀmÇÉ#¥$v$Hy*Q§FX[gDOIß‚x~ò«¯ß–œîU¥~ìñÒT„Ó˨/a$Ó]ãéC˾’w\æ–ü +íå80_…Ϫ0]VÊGýâÙ_%Øjl|~”ÀnìpsÔ¯m&8;ÅSÞ§FvøOéÉQ¿-9ÝSê—yà”U0ÓQËõë.xïçÓ¤óhsÝ°9”vÀÖØ΋E6o€Vâ€i©_òH)‰øc9÷™^åF÷”ñ©ç'¿úúmÉéžR¿Ì§<㙶ZF¾¼©_òÎÊÙ’_˜I†‚¼¢b'÷“äîÚ^_„©_³P©_³öŸ§cIP{,¬cKN:Ôr0ðüäW_¿-9ÝË„úM^[ÜfÓ^ÈWÉð}èøyôzèÔ1LdËWê”UÛõâ›æ•Ê½¥~£·i§îß s–K/ù0£W$oÛ¦ÊÆG¶JÕiª5®/zo{½ 3²…$€IØ_òH)‰í=U™ +ýö¾÷9ŠãÜúÓ?Ïñ‰á“Á6T;õƲ†K]À‰A‰øˆËOù„]1ñJ £8ü°¯ÁäÞ ¼*¶CUrÁ©÷LŸÝGº{zggg¶gEWušéé~úéž™çÌééÎÝãK©ÿt6ö¥·îStºW‚ú:wyjîF}ÔÛgçk +r*Ou9 =µqK²Ó ©i&õË‹pzê”ʨ_‡ý¡´™ë÷kjÚ`æ@„‰1_.øìõD¹¾"~ܾÔ×ú/¼ÿTù­d¸ÀæÔ¯ÚÔ+ƒ;:síO=ƒ»Ê¥[ß ÕÚ#EØ_Aø¤S¿ƒÃÙ/ -ºó}¯˜Qª¯7˵+áºÇÙ/}•=î• ~Û¶ï?q±Úå=5õ;>ƒ*ê rªMBp9 ¢F ±ãÀñBREÔo`±–Õ§Å=ÓÃ0È£~&Á·çîTØj2àh9šbÌcä—èß¼W½zéº#äúªvl,æ\Ň.Ö„ÿ³½u_øáZJøÐꦰ«K'TŠ*ØLCGýª2¸ ó‹³¿~þpýS¿¦s7ÿ¶o %Éy) KÂh?w#þu·îStºW‚úÕñ¡ßðNø$Á‘ö’ýŠ7ª ~à›®ß“ºF•S?‘ÿ*i5 é§ëKTÚkhjY®¥;¯UYîÓozŸ-µÚ[ë…ÏZ*»©O³ôÂË]©_iÿ#õ«äÒè© ª"€ƒdÑ#%ÎÞ(š/þ*ÖÈ*Wñš %züêñô­A__Ñ1©~©ßæŸîÚûîY>˜ðœ•ظ°xWpGg®!Ìà! +an` OjMý$ +96óéS·Hù³×W¬Ç(v:wù•½‡\XŽÎÌêÌ{Ø&…ƒ¬é(nîö·(;9‡S7ÊMBý/é† nÝ3!†‰b•GýùŠIð-ö#÷0‰øè-ÒSh;Kh®J'°X Û#LS]1?Ìöƒ„ýÚùÜIêwðÌÜ7¼€ ¶…÷eÝ÷ñçÞV[ã°„ë´ñ(swÅ3cc“³ú§„Ç(jÛöý,R5M·³^lŒŸáua Ä.Sö‰l”‡påX'JK”öÄÿLîex +vÂH÷2ôÆÕz8ábÁ%ã^–1â1·;=åV‡é¹yÒM8ƒÙm/G²÷šå•®gk»­Ðyd¨Ë&·á½¶¥k7‰ÿ š ;Ý’{)ÛâÞÊ`¶5˜õOqûÌõûøéíDm3ï'Ö5®oz†¼ÅÚtQyÕ¹·/]ˆ\hî˜a’¦ÑÛHAÏXÃ&áãŽ"ìÇÔ¥ã'.>³etµË¾øŽû±ñꛇ¥Ìé«÷"P¿Øó£llú¿·k—Ï’—Rô„q>ø‹ëÉLÑé^ÿÔO7<Úðd€Çà™Q.ž‰xJòÚ+õÑÓÑãm7\É*šœ$¤ S?2 rIþ”—á8 ‡;¡@yv¤~ZõÃ! 9ȶ—úòëèEò4oNe!FâGs:XÂFJE¨Ÿ[ cË–šû×î39Ù5RöÓVÄBê‡l3ŸýþÁO” ÔÔÏkö0 dE2¡±«ë¼}ÊC(„Ã1›Œ] Žß +ñnY¶|IÄàM;\»Ô ¼´% E8ɉ ƒ¹(²U²¾ a¹œ‚º^zÃx}µ²ÕVÏZ>ÄÕŠ’é1 ®#)­Ö.b™žòV'¥á[Šr,‡x}(س(C×»WCf¡Nz¨ë ߥ~B¸Š·%ÐMÚÿEÌÆ¡¬ß]Qßè¼÷RÞñäµM…cõ ?1ØtO¹6s8ÉP—ÓÑÅ•P‹0µ0õóV¸}ñrà]…µ{'E[ª_ÞmD¿½ x†]ï}¬„»ŒS\2ÓW¾ÆÆÅå¿ Lùª\PB0¾ù/ÿ~|ö÷Q–|‰)éE¸p3}—pÝ"Æ6Fx4¸'£Ó½>©Ÿ0s9<âÝçlOÔHìì*ºá©êµ¡+õÓ¢r¬Ô•‹P?.À0‚EO$xð®ðÎH «ßÂ…HÀ©ºI O:” +P?«:Vˆ†°õðÎéµJ&õ#ïcB ?Þ¾¯+õÓÉKaרŸŒý +B¤VGYÐå ›c!Z¡`íz‰ëEAAêgÕ('Â4ÖU7œBxS«Ã‹P?T¤ÑHKø£HªwJ:§žî)oul&•¾p{ÔO¿­ò&Þ ¬{ÉQ˜ú¡-ºÕEÚRœúu5Î×·>ÝAaê§ï¥ØÖ&sjþ.y`¡ÕŽ[M©¼…¯.pû²R^i Ÿú6bÝÊ°çoíRXX¤Ë¬yžxÂâ9‹ A˜2˜7ùs0Ô/z¤da”t¶Ø?ý¥”Òp%Œê´¤ç€Stº×'õC¤§âH˜„m7$+1áóйË(œ³:»2¯…©Ÿ·ª]Ÿ>Qf éVccDÍàQ³½Ô¯`þ€ßÂ…€¯Á<¾ývàFÎE¨_ –ÖZêçFà܆ˆˆdÞ£ðe÷[¿=‡N·Ò õCÔgÂCÎÛ§î!‹ÚèàÓzÅ!5zù©šZá¥K%Õí—V‡»Á$‹^y9)¼^4Õ{ºÆ[³G:kã[ÆÓ0j‰Ä=‘µ”¨Ž¥¹‹¾¨Ÿåjô)¶©Ûzßöànàê]©Ÿ¾óiK ›,‡1Ûšª;(Lýt‹8mÕkFŽLØ&ºÔOO.•Äk_Œ×} ~yÕn_­Ë–;sê—wq»Æ뙼á]¤Ë:„] &õãó(ðé_RýŒÓ·ÿæöãÿëûþëûß6@¯I˜°gïN6z1†1’§oÅ¿¦ž@ŒN÷ú¡~Ss7F:ïÀ­0Õû6¾õ[èLõ$mñ~ëW-õ£ZÑõÓHÓxä­÷â¥~óü.DbF "– ~V-VÃøBˆ%Ÿ¥úõJý,}­ñŽ0õsRËDò¢~Œ?9)®ëLÂÒÔÏnW.Xm kÔŸ|äy:‘k×çuõ…Å»äJ®ÿq7€ñE.|Ô/¯-nr‡nW³SOÔÏkç¬â§¼AòR?ï4ÝwdÁREõ T¸}Qxµ?¯ö:1 pq»&pA±R¯‡]FƒeŠ‹¨~ã'.†©ß`Ø_ôHÉÂF|o˜0á°cJ‘Rtº×õêaÒH/>õ—>ê'‰SéÂáJ€úé//¤:·œ~&|J¤ˆK[9Ô¯`~+Âá{æ®Á°•v8Îeº]¸G¤Òé|"ÄäNø´,qìJý˜¸4¨ðÓRëzµZ­îzÌÝþ6®w䮓õÈqK³Ú›7’-#Í|ꎇÀÝ1|Aê0yfçù¿ˆÙ÷WüÔ´È­,àXþäÝÀ;áÓ}XI/+dÝPN×ê¬Û—uHo}h¬%Ù·‘‚ÔOÈÀåàí2Ëù0ØðY‚ýUD”tj÷L˜0aÂÒîõCýÆO\Ä“N>iç<>¹øLçC:Çœ((œ…“[ +R?Ô"++ž˜:hçd-‰ó½ÕyËAô¾©³š(rrƒBU×xiA±¿Mæ³,Yj@bT/õ+˜ß “,6‘Wˆ$®`À¨Œ'JèuH¯ö¨UCõ2}V-pµV¨Ÿ,n)Ëýiº´©³ÌËÁ3smº·–úY­¦ +ÙÓZ%s) +§~Ö2/–%^ê§×PÕKgä©H–‘:›×ÏÚÛ´„‚‚ˆ&«>¹ó7Æe‹®pQµ® \­l5—ši™orë!ì|;ÙZ»0 Ê‘‡ƒÜª£N¤.SÃlz9)ÝÞ¼‘ìò5/]ÚÔYô‰·¹1ÞÒ¦yó m±ÌÎó³¹Ì È)ï]ºƒòîcî­,¬mÑl릡;ñ¤Zé‹?5³ÓMæ66dù^G]« ܾÈõ¤´‘μb×icà6RœúYÃnwßx»Œs8ñ%*~’ë=³eÏ\²¿©¹Ø<õ‹)YØÅ$a„ Katº¦~î#ÆúÖO>*Á“K/‰ÐR+{tþÜ¡¥V’çʇaꇥ„¼5ÌÔoÁ|mÔµ:·k!nF}=Q?z€_´ÉúüzÙI/õ+’ߊŠ[åhD­¥é-DÖ9gä)&eˆßêèzátÚÐÕTÔ¬‡%ÃùG³“fqu˜øso«å*®»^úñKR—§~­àŸ;x©Ÿ¬íïýsw YFºŒÅÏâ“‘µÿßÁ¯«Xck-õûøæßÀþäÏ´Ò¸Z[õöeD¹–‹Ù<ÔÃr<Ô•úy«Ó·ü…_tXíÍÉ ¯õÌõ?îÖP—ýRKqꇔ××l¯ÿ š Æáí ¹©ºw³‚ÔOX ;iþ(Ç¥~¼ä¶#Ê`¯ÿ}F>þÅå,3Õ¹·/ÍõU†Еún#Å©Ÿ;¼Iýºv™¼œ¤Á¸|8„øçúyÄU@Ìþ¢GJ›À=&L˜°4F§{%¨_‘¿tw²%R^áSñZú¯«& >éx;rZû7î«}§föo3Ô7•Lío-k³<Î@ªy$ rõZ~3‡ú˜úì‚"õ^+õ‹)%L˜0áºÁèt/Àû†—ú þÑ<Üñ’bU ¢~µ¥öo3õ«çµOåÞÌyå„ËoÔPb“ÕY½vMWöWëb/gb+}IõK˜0áºÁèŒoýQ¿AÖµN¢¦Dý¢vk4KžxêWÕx¨ðváõÒBÔÏ{ºuhØ{mè’å|ëP×äR¿A²¿è‘R„ ®ŒÎøê ~>+KÄN®q=N‰úEíÓ8–8¼¯4õ+Þ„è]_Óx¨õ¦¡÷äe“Ÿ=9y]ÝĆ<é…~¦}öÉþ¢GJ6ÞX§Øß&L˜°fŒÎøšLý +>£×;Ü“þž.oϺH:ýÜèð–Ÿ0až0:ãKÔ¯ÿzo^•I¢}w㮳ÖÊ0§ª:±Ž®Œ3¨õ«gTxÇ°üV¹3­r¼UKßÕÝïM0&–ð=R²± +ƒÿ>yù¥7Yû±ûÃçþ8£fUY²ñ¥]??½T_ùå<tÒ>ùõïV°èž;>½¼eçOyöÕ}]=™0áP`tÆ7¼Ô¯UçËØš¹V=Ä¡¯d1>‹$ê7¨ð/‚=1¨_ãÆ°9­ØKÁ Þ“ºáÃÛƒEšéíñ†ŒÞ€Q„¿,biãk6îõÛ{ÌÚ=Ø>·BU\  ©¦òu™]ÛöŒàÏNÃ` »˻Т__^™¼úà—3··îœ”“0á°`tÆ7¤ÔÏûøØ÷[ù˜ø×hZj~ß Úo'ê§ÕO× Õ7‹49zUÒ¹›×üúü¨zðë½D”,lfÚmT¿³kßðXõ{yìÙʬ£|Á¿þ¨¸çÕC7¼´ §>{hÙ¬[<ùÙÃ/í›^®¶- £3¾¡¦~‹¶Y< ôdP¿ÆFÚ}(-o8­®äS]7ÊõõŽ·½¥ûnÀ²øí¥§›^ô~)ו±z¡;/üE”Ö`¸§‹¨~ØÞðâ.N_üÕìmîתXY8vnÝ9ñëË+m8~åÎ:ùû‡¨åµw¦e?Ë»QBVm9ŠüÔ×phËŽ ± +ˆ=8Wr¶œÑãôìÍrž!– ÔVÁ~´ÝÍ¿ã?>bþ&ôx„å0:ãkõCd2sý~ÞãÏÚÞPaöúÊ+{ýà©g„#!$c(ž¨_OÉ;ZòUãMœ¯oÔ +cήÔ.ªj¼5'ZŽ•ª½EÔáÆÀíÅÒ ½¿ïŠèötîØpÝਫ´ð—T¿ú’Vý$aÏn£Ž1èÌäÕg•ªuV©r̃m°¿©Ï"dm4rXA¨BŸÅòa‰T½Ñmb¡Ÿ^Æ!°? Ýêv•óŒ”3nT< Î“W>l_¥”Ҧ茯õ›š»±÷ݳuP?°¡ó wøAÆxÖ[áP%éÂâ]4sÛöý(üÒ­o€cÇgÈSšFýN~üùžC§û¤~–uÂþ~Ú«G \ç=TG¤¾C—ÕÚ)a +^e]©\Géüu,‰Ý—)Lå\Qí`+> ‹7*ïr³†ôBSãíž,Yè[™åM»¦æܨhÀÂb•Fè}ÄpO/îv3aÕoËá’ü`7;þ㣳Žêg}©‡Ÿ¿8½TÄä<ò»n¿¼?›ùÉm–üÊÉùÚ;Ó£c§°}Ä,±’Í´ì”Ö) +]žêw¶Ø7ŒÏÐà›ð‰äÄ6ö„ËO«•&\ñ• ~;ßž¬‰ú5*ýè…—]ÎÒ´öÔÆ-¯ì=äuTÓ¨ßãÇú§~^72í8p¼’ö‚A{ÿ®’Ð:Êx®$°ì>áS¥£3×ê¦~ìîæß"ò†S%N¨6U2êhEÞ¼{ëî‘@’ë1¯¢S¿è‘’…ÍLaÕ¤Æe…Ìo©~V!õ5¢ÓÖú×TJF·n×­ú¹”Ä3\~RýRZ):ãë•ú¶pš"žA'¬÷“[qèü vâqÖêDžÜ󃧞A@(Ï;9ñÀèž V®äXtÖÂýR$‰iaJc½ºLlsú%õ8ìa6ëtT§Ogcçn+>¡©ÀàØ̧ȆS¼q‚ŽÍÄEÖUÑ¥ÞV²Œ_ãó?—îÝ#×ß2SY©{ÈëF±Ç-?ÏHö5ûè ŽJWRÏâ!Ëùy=Åý, AI×xëÕݤ3Xžw<÷£ä—¶ëbŒFÆëË*ó¼ó`ƒìïJýXEËÌ÷Ó}!š ÌælÈô^ÔÖp½°x×r¾ußá$£Qp¦¸IF÷[­C~iEfÙöð]yHE¥såRr‡“ë=ïí uI3µØŒ+6G.}[`ÓP wâtí)—›”湜s\ ®Ë‡îP?l{;š½†C(#V:"oêA~Ô.=b=U½ãáâò_ðnßÖ¾øOçé«÷NÍßLª_¬Ôõ[?p1~×f%KõC6}”>ÃUO}ö%ð{=I$ƒRþóÇyrhtìÔÙ!Õ'’[qÛRýøU ”Чê÷«ÙÛ–àÈÆòKCý-¤nfžSJiˆRtÆ7êg‰Pò°cbÀlÅ-šìx"7`U1 ;_«eÙÌö·ïË›ÎÜEÆ ¤'È«i7Bö&‰có¢£<êgùÊ-Ó­KGGð•û¡wzË /ÍÛ+õÓƒJ¿¥]©Õag Àòêµ óž›7¨4¯dþ0õkuûÊUÎBc·:óèJS?«´–™¸«™¾uQçÅÉ.õ“SЖd&†1ºÖÞ ·.ïî¤c‡“•Í{û’º4!‡bs\±O†¥Ì—â£ß!Ñÿâ^’wäteÁr[ÞH ^ZêíJm³ÎÆnÕœE.Fï]]sñ›¥Ó¹Ì.ü†M¸'¶…-òå•në¢yz¢Eý0r¼ö ×¬CáAèëIᎇg¶Œò)L¯z'|汿¤úÕ„aÕï¬QÍÀ\~i¨ÍÉÏ‚㸪ܿ«e^Nše^¬=ðâØô²«‘¡ü †ER˼œ1JŸþß:ZÛÄÂ3†ˆ½nÿpà î)-ã)¬ ³ì„IÈ&™äM2b1Õ}¥o¥âªb=ÇILE`€Ÿl£ÄÆ«;'g]º‘güj3äç’e‹úéÙ›Ún/»ÔoÁ·@«ÅòŒ¤‚æ ½Ã,/8´zªÕáVáz¤·^ͶòÎõ*—KêüyÔ¯`Wb´è0Ò-0ì7‹ú¹¥I¯aˆ™­áêå ÚdÖJlÓµuy|'p—p«(Ný¼·¯¼ºÜ;¤•à.ÍS„@Y|P +Ò“+¼ãA2ë ¶xWz™N´š#™½·J—]ºï…Å»ð!v¥~:ƒTJÝ>²¼Z„úy?pX0ó +\oä ¼qkqÇÁxsÂ'6àÕoO~ø‡ÿWõ‹)YØÌÔUõ;Ûù¶N¾ÅÓ«}êBv«?wÐj]^B6¯2Èå:Q>ʤÊÆ?wЙ¬#ÊêdyϳFÄìÇQjˆÒ@œ…m*áÊ”nÓdÙþ7”V/˜½—SJ©ÿôõDýH÷@ý$TΛ·†¨[/N¨Ó¹ÖW8¢ïûøæßH^ÚzY΢%\èy$R²ŒÁ~<%n·‚'ìå%†]¿õ³„×\À’³¹;Ư6ÓKý˜MQ?¯àè5¯õË3ÒeXáX=ú1YƒÊåwRZ^½bXà\ï ª„úåy©ZꇢŠS?K1ñFÑ®=p]ÝÔ/p—¨œúyëÊ# :¹\ÉK"ê£~šéÊ… õs™løVÙ•úq®#2Ëm³4õ£Äïýz±ê—'àŠæ˜w'q{ĪÅxò +õcš¾òõ«oÆéE¾õ+Áþ¢GJON +ü“œ@ÁA? þÏEJ)59E'}%¨žA꧿=É£~šAx'|ꤗ”7$å½ß,‰Ò§vfÑcp½J=ëL¾èñÚ&j‹~Ês—@L"Ÿl„#wö7•é…:δv†_íw§‰ÿÛÔ/'ü¶¢_«! +ºqZ«Ã/tä“gd× Ÿœ(¥ý`Å~Ú?Ö r ïu§÷ܼA5²vª$§Zź‡Št¥Ì¿õö²·Ýq¸ ­!g±Zk§>äNNñ}¥hu·5œ¬ Ÿ–ÝÖäOøä˜ôV‘7œ\ïyo_ÞºòÈ‚Ny|Áš:hMø\(FýÄ­ÎK9$Ó 5;ëÚ• ݨŸÕ=áÓ{«¤çeR^RFúÖ•úñ;D&k§K´u-îÊ™ü?#å6ž}yÔÏí51Øšè2Siu„”L3d§^áóøìïQB-ßú™p¥9¸ŽS¢~y‰ì)±¿”†=E'}%¨ž8x Í}ñ©•,>ûð€ã§ëaê×u™+HË_¸šmÁ,M)ËTZÿRÇ°-ÓMÕn]'ÕgkÖsYVósW™´|BŠ§Ã‡Œ˜%ÚNvþ×–[ÿëGÁ»ˆ•­ày¡³ä‚KÐÆä-óÒñ<Ý%Α‰¦âÀ0õ£]?Hù2C5`$@‡pC[Ñ£7€×ƒj“Zª¼L˦Þzu¤8×;¨8WÓÛ³\·SéY¾Eº’ ¡Ð %–y9¹v]k™k@Z†ñ¨¬:ÂFYQ®ÛÝ'×.óƒõ2// ·ÅÊú!4FóÏ]"HýZ¿³²–y±ê*BýH‚d]Ž[kY*Gzq’<êv…v8‡®E嬊¬®Þ¡'~3ÒJšh}¤fÝ*]¦f1;R' +‘(S™‹&y©_`™ü”ul°ÁÆjrוú‰ÜfŒ¢t¯‰xÊANÇ%kd¿öï6Ú"P®_|7~â¢,ó¢©Íë~…ÏõõK)¥uŸ¢“¾ÔŒ˜Oø`’õê¹î_ÕoSðÏøÔˆ³°¼NüèIÖoÓ4£ú¬ý”ã\ë+a²ˆº,çÎ÷ö#Î?#ð:)Y¢q~g'ÿIg™ªèóR?>Öe™nZèr +½â·^(@ì× §{wZìÃk¼Û«¬¹óÅ%÷K9®ÃÔ7ZÔÏ*?`¤µ,¼þsfNär7^ê—7¨Ðà­WwSÞ¹yƒJZ”£õ\ry1/Oê xIz‡±®µ,{•Y'þa3î q¾œ+ËË󰸉4ÐN?wpÅS«uºôÿ> ­½úïݨŸNÅo_n]E¨ÙŸ|H[äÏÔ/àŠMæÏDôE¦Pê ÖÛ•òR?ù‰æ<³e”6ÈJ˜|L¸·Ê…Ž*'pÄõHH±Å¢.4H3v¾=é¥~8eSΟ;PA“k“ªõcÂ!ÚÃ^Û¤þgGˆ›w`l2‹Ìh‡ëµ€Ä]tTÞŸ;ÀâÕß›¾zoýS¿›ëwŸ0Ô¯–$L˜°&Ìî«þWt¼ú?æ¡àà•ÿ6‘fÏš?=\¸gR +[_›h$ˆí«@ÎÞ÷à /d\ïnÆ_Î-|õãíûÚó?ïþcë©ÝòFW¬£ö^Ï2Ýñ¹íŸ»ÿ¨Ûuøß[{{#Sø³²æ$‹èµœÏ6ó¶ëKy_2ÖF|3Â~«)UÕ­”G…zJåZW¤dô…0 —‹é¢*lN…µæÍ–öIñµ=× õK)¥”Ræ]ï+¡ús•ÇN½%kQJ“ð3{ïmÍÿ¬38dðæÖÛ«ÇFÖ.óÒ¿‹zm{M~¨ÉÉÕ¦¡ ~Eú1o»¾”¨_}}:0¢ÔOé{jã–ÉÏ›*iïÞ*¡¶oT¥ú•Ó,J¸B7Öj»{¨B?בš£úõÚ}®ÿ­ª; …ê׿o»^A•wtt¥¬ÿÔê—'¢žƒ¥“õÉdUvô¾r’_Rý&L˜°BŒ®÷ ^õ«-Ý*#Z¸V©Ë{¾:/•Ó,zÒ/òÎuG`SFc³q!¨G÷„uŒêõ„C¡÷Y÷ö<ôjL^l‚ÊV‹·+€ƒ±¶«%yOó¤ú¥”RJ)5!E×û¯úÕ˜\é*¶ÞWwêËùÕùª´Tä•J—¹PNý|ÂR9Çvõyôv56Õáðjmè_+žê+¿¥¬ÖV˜ÂU‡õ¾Ò’_ÓT¿s7&L˜pˆ7Õkæ­Z\\âû@¯ò-bÍ£ç‘à"¿MP¸Àw˱Ð(V!Œh[ دÿ+ò•eCAÔö[ۥˤt9 »Ž™5Þ‹¤F­oŒ®ú…K«[ K(X•®×ë÷}ýè} Uý&L˜ph± ³=yÏ‹ð“ËKŠFjJO˜ê×—"P¯*5*IÑ{§)ù|=¹½’Úã +d)U’ºŠ}}J~IõK˜0a +1ºÞWBõÛüÓ]o¶?Ngð°[ëBõ3qÑ@õ£=‡Ïl6¾\Pekå(8…j {©_•Óæ¸×üvŸåôïíâ=¢½‘ç™~ƆüÃø^³°‰7¬ÓuäÔ‡VSsüóñHwƒ}4°àí=nÍâ Z÷ü' ½ÏA ›`'°«ûŒ¢GJ6á½}„ –Ãèz_ Õ¯½.™OõCü9qnQG´VÞµJzü7·]DÉÃåC/ÝþÆ:wlrûË­9¿ÇðïQñjÁ57 +ÕØu=œå”›±vrî‡Î]ä¡+J”\Üo÷”Ç9QTnT_ºõ ÕÑ™kØž¹~?/§þŸlƒ-ö4ë¯tÇm{ýRcy”ÿb\݃¯qÀ3?Ãç–›áÙuVa`•°&cOí +`3íì?Bˆ)il÷L˜0aÂÒ]ï«Võ?1»mûþ&¼Û¯õÍ<Ú§6nAtm•ƒ?záeóWM=ÛИÀ(áÕ +µ€ ê_ÕÓ869ûâûy†Zõëɶ"ýUP;ÓªßØñx¸ÿžn6¼ÕïÂâ<õLô+][‹þ2ÿÐר{KOXºÆz_OS° –R‹¬IïKª_A|ú¹Ñ§ŸuñðÇw™güƒå­;'¸ÿÙ×öíž¼¬K˜ºþðg§7¾´ G£c§&—t­w÷‰ËRÎB ('/?, MðU„O8F×ûúQý}ÿï0à7êUaOïÛÐ"ºËÓ%œ_È‚ÛÑ=ª~ý+/!¸ÞW+QýšHåª_%m÷– N·É0а yÿß=s_|›q·²ž×ª_D̳×oö} »·ô?Ú»æìIï«D K+Œ¢GJ›À=N÷“7Yû_7´ÌëÈïVÀé~5{4ð¥7Ilcظpç‘z­‹e"ååëôetÿ$L˜0ºÞWNõÛùËÉWöâ¼ÇÍÿçß.,Þuõìßqàø‹oìg¶mÛ÷_X¼äOì¿të­°ðk¦§6n9:sûQJØ«›¹&o¶Ç&3òÅÒ^Ù3ѵ4 ¶y +9Úœ™± kçn+ÍÁ){3Ù®‹êwqy8{ý¾Ø`ífóOÓÚÈbõ~xijî´&‰Æ„h9vz½j)2–‡§¯Üõzvb¿í“;ÿ¸tëoðó3¡^pX؆ x›ÆãDý•ŽÂ·÷-Û»,^E~ضÐQ[DK:6ó)«`x5Ð^Á¼þâ~q -èkñŒôÎ\¿_¹cÌRý¼ãî:ràŸÍw!óüßr?Ú¨óS#³4ÉL´ÄÛ/ZõË­Úá“㳟ZºÞæ¿–£¿tÕ(3Ð#h—˜Äœ­µªŸ¥]Nœ—ëâ¨ij\ð}±H/µ:j¦\òrý2Ïηë‘VëëB|.(£ŽcXF¦{߀åìY1xâÜ<,YýÙQÿ­«†9[ Ž^Õš£[/Ыï£×Ä`œ5{}EúN –žE-¼Ûˆ¸ÇOÌ®þ<¹ Þ]¹KX+¢GJC„{N\ÖœxøÒݧŸêœSŸ=ÌÈàô2÷P쳮ɫPØe¯å4Ñ'Løä`t½¯'ÕïŠa ~!Æß¿ˆí¹/¿C¬"ÖkÈø±L,›œA,„`›Á ßTc!¿cbìÇ·ñØÏ_Õ1@’/ìq_¼#¥±ä@iÜæ7P8ºíý™lgÞÉ#pE+æL|xáÊÝ, + ¾9g™( BÞíÃ6»ÉP?±„1-kGu’ÙpMÃ)³Ë+lŠÝñöqð—3+r;O£‡ÁžL„ßöð‰ÙŒë-¯h£D¡à)­›à~ðãíû¨ô!š•ýôUÛE餙Ç£ÇLœ ÁoÛÌìM¯mhÅ‚adÈ“5Ám7çÞÿ"‚¥'™©;Š¼˜×_8 iÖðG”†æÀNÚŒ¶l3\˜-%Ód_dÎ9;¯Ç˜«ú­*å"#íB^?p¨HNúÜm¯¥ú¡^ȾÐבVýÄÃä8R ¼ŸwÕX¥u,³ˆê„QÇ’Ù +ŒFKõÓÛ¸'ÈU‰&ͱE®vÙ¾ Ì6Æ0î$<+»äÏHÞjØ [Í,ǘö€{k?ÀÝ +}ß@/³÷ùªDî0í›’WÌ c˜“_þÒ“Ú«ÖU^ Y/W–¶sÖ¼eâ¹iòlÛ`3Úõ˜ä6FËä« æÄ{ï»g³Ë—ß…õ¾èŠUÂÒXG„=RÒ˜±•›ÍÅÝ'Œ§öüìàôÖnÎG>’œ lï\¼Ý]…¼”M1Å~l€‚`²vá‰øùÖé%}ò°vìoÏJ}~ôu3}”yVç£>ŸÍV=òÉ +²¡vmeÍèþOØÆ~OòÄbt½/¬ú¹_+PõC8!oŒµZa©~È&ßž d²4pfÛY(kÞùSéà;|æAP¤¿aiGkjO 4­`ûEÃÔÄÄáòq]øë3Wõ›2k•ó²=àœÿIÕª,±4GÆöT|˜_«R?ÇŎU?Ó«Ê‹þ2KûÄBÚOkõ‹²Ÿ}ª5M­fj\­Êk›ð­wL_¹‹¢t( ½ýÅÒ´¾ƒ~§ÀpHëÂp~Þw|2ƴꇮÔß…Qo-2rЃº-ôÆ^ÕOöK ¨5jv¯‰ÿµ^f)J°œ£(ÏÂ<ÕÏêµâ(:]žê§¯ÄÅ»ª~µ²¹©}«iÛ€mÝ"í ÷*–=¼oèVð¾a]  uÖ](pÕ¼²gBT¼<Õzœ«KjÕ˜lÚÚÏ1©¯8ŽIúP”AÎO`NÞ±ÍϽ¯ ºUÂ^±Ö!z¤4Dèª~`a»'/»9Á¶ž~nTÎuN^}Pº.­úa?8øÚäÒ–)³CÁïž}uŸœ5>½Œªeû½OV°³'cˆf?磢dpÀ_ÍÞfN”¯Û‚Bø¥az!aÂ&cxß5£úå=SÜØà9ó­ŸÌBáFõndËÙ›näÃÈÄJŒÜ$eqö—ÌdCìÄ8pÖfniŒÞõü+m!â.l#,äœÃp|+QNá<+D³`‚ºÌ ‹w$t£Maˆ\òäÅ®E.ýÙÜ]ccö4ùŸïó0‹ +þû±`{…Ï?ÕïOE´#{*ž¹§â±{íxl¯™veå¼`Ä ätóÈNjZìhdçïdQÖ׫QúyC¸d¿ÆÎG.«¥YÂêÚN/¶£8Ø#1nÌâjU&§i™IVûÛÌH•ÙŽÕÉãú¡'_ºý £ñ,^ýZEÚ_g_À!bÇQ®M*~[À;Þ“º8ìØ짬e5Î Ú&SÝ–ÂoèÒ“Œ=å´WÆÐÛ_,DŸ%¶aE‡6/6àsðŽ´'έæ!‹bÛ;#yÛû½gYc Ï“«ªß½¶Ö“©xNiÑ_› EÍÞTø®2ñí¢¡Só™*4ÅK»³?ïŠ@Éh#ûN·K"½Mê§G—ø\&|ÊÑö;‡¯ÛsÀduz=‰m뺰¼a]Åá»X®¯b3åòŸÖÕäæÔ#Y®}¯UðçŽz¯ôŒ_«Ëw•UÅ<8¤¥nÿZwubà)@Œò„êjU¯8\ÖF÷?0z¤´c¿±c9ÕOðÈïVÀÅÀª¸Âg׺ô +Ÿ¨Et·6ßTùõš0`j\I&£ÏJ]¿8½„<,óÙW÷1ÿøËZ%×C9ÜFíT£û?aÂæct½¯ÈÛË"ªÿë!¬úYoæõœ4y›]P°ÞóoÛ¾_ÏÍ3¥]òèYaófõBýžˆØ˜‘’̲ÊÑzçbí8p\JÖ­¶ÚÅ’}:ÅBgŽ‡J×=yØRR8û‘:¿´Ò3!꟫¡ÀÂ~T?ü_ ZŽ1æ]ÞEñ*ûBæ¹¹–‹ÔNÍKæz5²³e=å–oõ—xu³YæeÑè\\æ…壙íÕ5ïe_Wqvœ(zÇÌbD³jÉKW¢"ÃÒÐ;]–ž»(_k®Qó_~‡3iøÁ 'œK˹*¦x’É*ÓUý¨é ØåVýx-l#m\ëCø¼Íõþ”q=.âDÕ +Ñøû¥-¼‚,0›ïúöqzF«ŸZÇÔÛÇÌÔbŽ@ËçÔÊ9ÒX5Yê§ðƒÕƒU¿ŒÛ:W1ÎÊx™:+pß°îB^õ9eò¾$Júþû9ÏYßy䞃^°úHêš•Ë$LÊH\ÕïÔ囸“Í-îïíÍÔ›6£GJk° Ü3Ë­ði!蘥Ù¬K0¬úAÖøbƒ¥NŽŽbþ÷>YÑÊ Æg_Ý7þÁ²hˆMð„ÍÇ(oðX\õ“ÿzÕÏRŠ«~ µF:KÐS» ¨~ˆÊøÕ‚°¤Cç.w-ºŒ|‘„¨’«mÀÚ¿œ”ïe N_ùZÚÅmKï0fÜÐu‰…n«å#2½ß«ú‘»‘Lòd¬Ó§Ë¶9xg¶³ÿ[ôy˜ë…Ò\kTT?½€¿¬iï*º]òý}ei +^ÛVßÜ[ev8Wº ’_·‡2®´¶|oa?¸ÉÚ?wøTìÇÕþ‘G+AŒÃy +×ççsõM=¨øe¿Òr-шH^þw #2Å|Þ¬Ž+玟¸hyÒ«úqüǬ꟧úa IÕÙ˜Wß|iʨ£vIÕGù•öxÿ"¯·ì—A/Á'ÕϺBi¿VĸzÒHçÿPVgP__Ùܹäw8ú“§úÁÃÖuÑ~“°¶Õ¸¾X‘¬Äâ½oôªúÉÿ•ð_$ç…Å»úæ# +¬xXüŸggû6¢®qï˜Ôך«úᾟÿyù&îäÿi¨ßWïuý‡&<›FÄè‘’M` 9èUâäý@ ²•R.ÞÖßå[ýâô¿›Ãön³ä‹õm]ñºˆaÕï\Gs|úùÑlŽ¨ÙC®ÇU=aI~ZË/a§ØöÖé%®üYÄÚ„ £¿Ís±«ê'Ðb¬wìò¦½!XÐò‚Ø(«Š×HÞ×^ƒÔè/ÔŠœ[¡÷85#›[³úÁÁø¡D»ê¨jÛûëðüÈÚïàšÐ %,ÉûZ3ú˜Ì»“'½/a£GJkñQ“Ñ0¬£î~ð¾­;òÌ|Îy9:¹ôWù +väw÷³£7…qµ.ç(öÕouÏîÉy£âµ÷€¬¡®lmµgÁP¹G>Ÿ^–üSŸý9å@³ +¨±üê_Ms±6a„DóVíûFáUF^aäàà"ãÌ:ѼåþgÿX·y6²^Á®ÞPÚP{RŽáÃï_|eïDÝ~(ƒïÍ&à¶íû8Õ°òk¶£ú5îZî©'/}ÎiÒ5Œ–G•`‰ÿm7Ï…AkL ›†Pú¦ÔœÄ ŒnFJ) QºfÞª5*™/úýé*Wó%W„ÒÞi/6à½z1O}à×p²ª!çÐz×B\O^mˆRüDa%ª_ôVXèZ(oN¢Ûf¡WéKz_ÂâˆX%¶Ò§ñQ†à‘Oî›)£nI„C„æ¾ú}£ðêÿ0ð ‰…ÑÄÿ;¤HûÛ.Ëžžl3Ñé?-ÜÓùQ¾Fœûâ+Oô–Ö4Þ¢·± £¨W¬ÄwvVJùgüS§æ õk€%û:ï>OŒþ$JØÖ<(úü( SjBšºþpëΉ×Íÿ;¤”RJÅӵ؟›ª_ù¯¸ØT¤-n`ÝöpZ^ŒÁýx¾±#­ªUغ:Lrmö^ +k‹û¹Hiá;|ôÇPJJÑ#%¢¿±OäG‹?;8mV‰‰oO„C„×¢¿-ôaømpöÝ_YÕ ^©óMx­–lEݵómÿ:ðacGÑù! +6DÕjò(ŠØ;á{;1ú3(a£0z¤daJ)¥”Òð¦žÞ¼ 8U¢ý¥7ÅR(š™žä¶£Ï½½Ð¾Ò‘SdRGôGOJMKÑ#%šÀ=&L˜°4^‹ý6¯í¯§oÆÅÒ +EtË®?l ¶¾±à<é} ½=R²0¥”RJixSÁwnQR‘÷ÃëR +lf»*÷yóå‰<'D·-¥”†"õz÷ŽþÐI©™)z¤¤S¸g„ –Æk±ßæÁâoŒ‡K¤=ý·kðoæ›æá +GHCú¢6ª³DcÜ+zHÇOék\<_Õ}¬ Ïš„ÍÄè‘Ò¼e8`„ 'f¯Ôîÿ«á¸d&6 %àq1ºmMÀ€úÄ&´®>ÉmRo7çwkìbaÜ ÓµØºRJMNY¸Ò ô(a„ ‡Í}õûaA$1-S.Í<ÏG 5ø)%¿÷É}”Ì<£c§ÞËøZ¶ÿð¥;°AJCu(¿ ý[w (e%jä&êw“Kpîª.Þ’ò±r˜>¤Ê)§i²‰W-Ä~´ŽæÁ·ð°ôÈOÞ<ªsþx‡í‚Íh5PJ†U°Ÿ&™y¼ÙYº¿Pšx&ašûjl5$a„ &L˜Ð‡Ñ#%MÐȼøÖé¥MÙœÏöNžäöÞ÷/oÝ9qÂ|}ö®áqïf3!³ý Aàï}²Â£ààÔ +¶V¨šµ©Ÿ)yêúC” šv*ã‰÷F©KFi YrVAÝ-#8o{–®Ñªy|°ŒÎgœ7+„ûy¼‡òá*,¹¸ÿi–È~–s ›¹š)³ð-¿¾¤ †“®–#ý"í‚OØj ™#ÊG9Ò.”ŽÏþ¢ âó&Œˆ×þü¯O³»k„ &L˜0aã0z¤´Á@]œ2s©û¼cf{Ne, ; +F ¿z_ >¸çÄ|–­£CÁM´VHÔªß[g–¶î<¨‚¡P;|é²M.ýUŽþäÍ£Ô »Úßž0é;ZºÆ@™ú(ÚÛYOfõ(KîÉÿ¢îuÖxiûS«™ì#ÖVý ^Õ%½ßr¢¯µËôY z1úÛ¼„ &L˜0aÂ<Œ)il÷ÌÅWÆ3¢qÞÌö|}bšû'Íg€V¢Þ´7cÇt §–bU6*kçת~à2R2QÔ+W)Ã~-by@õ+]£¥ú½÷É +ÊáDP"b›ªœ.§WÕOׂ^]Rk¯–…]U?},GŸZu¡d·g÷šµX›06£¿ÍK˜0a„ &ÌÃè‘ÒZlõ"¸µ!­þPò~¶çļwË÷>¹Ï/ÈÜoýÈAt~Q¯\¥¬¸ê³ó¾õ+]£Vý¦®ÿ_Š*G½ë –Pý4Š.‰vY딊…]U?}V‡ÿ®©å­3KXy5áúÃèoó&L˜0a„ ó0z¤¤1c·7¹.%¿ùÒûWµ§µù3ÕïçÇòJã¡çEõ3ûA7²/ +UNÐœLiº¥´ªÎÑLáúÿíݽ\WàùØu\º³ (TÑV‘E{ºÐºŠ”Ò)PE¬(lCc$Rd D…6(RBÖ qâ!Ûlv‘ òWŒ‚14®èflxïœõõÌÞÙe˜õÝsfç¹:z4¾{?fîŽWçwÞûñ›«“¼ó§Wð5~:õc­­ª_cɇÓO«>ùÁ¶ý¦;¦Ný»¨ßáò`ãõüú„Ïx}apð뵞^ƒ9îsÅAˆ¹m/éSl]]˜û»Ç2þ¨V£jóiî‘L’$¹»U¥ˆz_²ˆº“?œm¸­Btáí+13ÕßùË¿qùVº>n§ª_½Vª!WýÞùëÖMWb;ñúÍw?¦­í¥ê[‹¸4ü\¿ØZª—M½Çx]_·Û¬+¡±nºŸgªú¥ë"Ó¾Ò~ÓÖ÷~ù|’c,–L[‹×éh¿ÃTUŒ9ñ{©¯[L§k¦µb¿ñnw©úźƒƒp9Ý…µ¾›hzž`|º´ÌŸ„È91ûhI’äNfï) ›}Ä~wS©«]µ©vV? ÕךU¿ŸþêÓúª±å·ªÇ(¬VýÂ__ÿWý¨…z™÷÷Võ[TÄÒGÓ–¿;x´Ä^ök¥­Åºé¤G6¤çý=}êß ¾Yï7Ž@ÚÚ[ƒG Vð½ÝßyÜOah¾ÃôII3EòêœCG»~K©ÆºSÕomPã«÷˧ù±µŸ<ÙHýIKø²d7K¨¾‘$IŽ3{OiÄ­;½äLZý]}ðˆå¸I’$Ÿø~îJß°Uß©„J’S¹™{4$Ir'³÷”FÌ=bO’{qãýÍÜu.’$ɦÑKÉÞSÚn ”$§òO÷ûÕ_×Ücz$I’Û¼q?OiÔÉgc #9óç¿Tõ#I’%½”ì=¥í‘@Ir?»§êG’$KôòÝü=¥Q ¨•ä´þîv󟃱5’$É’ü €žRÃ(INéµ/Ýç“$I–eu¶gî>Rò'IN{›gÙ#I’LFÏ$ú'ÙûHM l9›²pM›õöÙ½þæƒê¢?MÓ4í@¶ìrr£Orù‹ª’»Æ×4öliè?s3Ň-ᘓ³îïïõþüŒFêH’$§6ú$ÙûEã½53/ÌýÞ~wu¸½þ×cþùóçǨn·»¸¸øæÊÏÓÂ76nzîPÞZÞ$SŠ~k¹+&šv0Ú'wûjš¦iš¦ejÑùänþÑN-ög§ý"ÓE²Û)÷Õéïùo<Ÿ–ÿèÓ–——3çº &U?òÙzñfop×—ü#~$Ir®ŒÈÅúB»Y@o’ªß‰o8vìØîgN®¯¯ÇŠ¯¾öjZåÚúµW¾ýJæh÷¿¦­ª_Çœ.¸ØW·üÙsœFô[X\H%¿ÈwǺÝîÇÃxsb~*ü½¸ôb}Îç…Ÿ]Ø–³êËëêØÕ|½Ÿ“ªI’$Éý°€ñù¦Ñè÷Æ߈9—.]Š™‘òNŸ>/~8˜>peeeuu5ÍŒXŸóyåê•fÎj¾È•û:ª~$I’$÷É*–fg4ú}ÿß‹9ëëë‘ò:Cwz‰ ¸´´4|ÎgD¿ÅÅÅ´Öo?|ïê«ÛrÖpÕo8|åšžÜæ%ÿ1Ÿó–$I’³hþì9ÆÎU¿n·{æÌ™Tõ‹Ä·²²²Uõ[ø?ª~B¢_Çœ$I’ä¶Ê€¥Ùi^ë·°u­ßêêjĽX r_}­ßÒÒÒ;w⧧Nzá›/Lx­ßpøÊ5©ú‘$I’ÜógÏ1vÑï¥/=zÔ>I’$Ir*{Ú÷\¿……¯œ;wn—èwòäɯ}ý«³ø\¿Ž9I’d)Þ$Ù‚Õÿ¯èˆFô«oöröìÙ±¹ïå“/9r$b}¶ç¡çeÎuLª~$I’$÷ÅÜ£:ãì ]—wৎªI’$Éý°„:bæRܾO%s’$I’Ú²'I’$I²E/VöI’œO×H’œ‹H $I’$Éö¬Æ> +stream +H‰¬W]oÛ8}÷¯à£´X+"Å  4iәŠ6³õ`0 ÕflMmÉ+Éɦ¿~/e‘’×%¥>$–%™—<÷ãœs󮬳§tY£ÛÛ›wu.7r…7wE];ôçͧÃçúu/ÑÍCQÔ²D7óæÛcºÎò´ÎŠÍfwïïÑä¿“…ˆc‚DBP)'ü å“»ù$ Ãh=¹ùø)Dëjr3Ÿ‡‡AHÐüiÁ‰#CóÕÄãþü¯É‡ùä7‹ÏbAÒ[µ }ø6÷ÛäæÓ>ÍÕ!Ió5òd>ýxçßüzÿó{òý#`š¨ˆ÷ä?’·!8 BªB.nÃ03…®h† Ϧ8H`[pƒ ¸IÛÏ{øLf°ù$IôÛa4‹h†5 µo…LJôA}Ÿ±f%¬îÍþœÿÃî€Øþ€ó9î·ã( ´wBP‰Ęj¤²A§*¡m‰ Cã "*ºBE¡Ag%rqmXGjé¸9ÑÉÒ ¦þî/Cp~º,$uèr +‰ µ_Œqp†½âáP`"N!PÕ>Ì8’¨Ù9PpïNÓVÝ€ˆ\ñè8~AØX0xp†G[nSƒ »qþ$qñ£öKÂ( çhòáËAa~¡ JÂèm9(LÚ8²ŸD‘ýTh&‘ÙMÔLê¶ç0‰¨=CÍç¤#ˆ¥Æ Àã&äÔ:$s Ùã0ò ¡½˜ ï¾Øù@M‘·;ø yyV¿¢Ïp/½"÷›ê„Ç«ÌWì7s¿½µö­3Ãõ–›W¯¼(ÆÁÉp»Â„ÓÄ\xéÎÀ´Í4Ni™}•HãüⳆ³½¬Þ ÇŸô·Ç¿û ™sä¡O¯;?9®òTä¯H/™B:ÚUVHekþ’é’‘Ø&Ûh—+Ùˆ¸êz·l`9q-&è€tÔýºD«b© >˜þy ’T¯R4Ýb:&Ö¨ÛŒ±+¨r®=€ÆØÔMБ¨/õe±’à2kpù@p1¡ÍAC8—´ÓPëƒKÉIÌ…÷¸=€3ÒUÅÖ%ãbP†1q„ˆ8Mš·õ‚Þ¥´‹ma!6–ãÛ]ÉD`WPœÁÛ¦41¡n +ÃÐ’íU¥ëhƒÒfš©X<1XÜßYfȾ4³õYúÓvoHúJ$-þ/«j¸nÞÈòµQ&h¥6/MSdëí|à.¯X~q8ÐPYEDÃì4ŒNB&íÁèö•}Ta]ó6Òè¢àaSô4j»²³;ËŽeot¿a{ ÔÅY o‹YÛ·?ÈpR°^äÛà‡á‘1˜ñýÕFÙM–@駰÷€} <sÀŽð(X’$AG‡7ÂFJwYeÂdľ9mH颵‹°ê™n[Ö.'D\…X4RþvAÞ{ù,·ÅÞ؇¥bFÞzŒZîöF¥¥µ )"kI •´ZS„" ®²+ÌP­¦0AßB™¢Æ4&@‘UKa¥¸û­~õ YM 7{l­m4RÑÒܹLGJÚ.èÂû½’@ò­’÷§øX£`¶ÚjUlH#mv{èŸtoVr¨ ÔÈ€§CYo¤Y¶4ËÈ|“ê…r¦¥4Y>T²T‰>níPÕ…¾ÞõÛ(Óá›p€ã3¤= ›ÝÃ6ÎëRcž(µÑmË¥‡Çw$Ê][x$q›˜ ïÐå-Ó~AEŽ@Äkm߉ø¼BµÜíõ‹Û´ÖÚP:h!fM¾ÜÉôô¡ÍùHÄ®jžÛÀEP)9 ºð>(‘£á’¨ÎÖJ8nj5 +¡»u®ôv^{%;{•úf`BF^|¥ë¬Þ eg£¤Ê‰~¶ßêÛiݹ<‡äpb'þ¸è:ìš›¡6BçFÇ\xŸN,N XœÜ”ô Ò—/é+T~Œþ‡ha.}qÌdñ,;½[kSµénî’À¬“`3é¾=tHšÅ¹AœÝÛ©Ó]xóô‹DéJëÚÒÖiÓ+OȹÁÔŒ '{3ƒ/_5;)ÕÿC×»ùȾÊROŸtóòemLJ‘§Û¬~u8…õ„#'$‰qÀ\ý¢9!»  ïçݾ,žMÏ¡ŸÒ½Ÿ1Ü˱Ž.L[3q<Ô•´Yà\‘¢c»’6 &èÂ{,ÌàìM¥aÛ  ¬¢ö“åSº” Z»Šxœ«€nÕdèâHWÑ]xe.0,µ¹H·¦œÿ%Ÿi)_à‹­ás˜>— “°ù~>[û#µO>í¼Å¢ÇD£Ø'b¦½mŒ¤Ÿ(Qå}²ÜþÁâ3®Ð³fåY[·nT’ØŒõ‹Ê0eØߧ—$Nsým†°%We˜‘ h‚—d`yQi&Õ¾PÜr䇱ŸD¶-—8à7€Å4pW‰“x —©ÁÚ5ó¨Tÿ×C=áÖ9 Ø7Bs–'‰4¿‚Q³ÁÈ>®Í¾—ÀY{aí;ªhLpTàtMÐEG÷‡Ï»¬ÒôUeEîO[•…R_¯ÀxIÝZ;š¯ö=e¾Ú‡æ ‡ø¤ªþ/À1Òæ +endstream +endobj +54 0 obj +<< +/BM /Normal +/CA 1 +/Type /ExtGState +/ca 1 +>> +endobj +55 0 obj +<< +/Filter /FlateDecode +/Length 5280 +>> +stream +H‰¤W]oÛ:}÷¯à£´¨‰"õb'éíâvÑ»q± 5Vl·Ž••”ææßï~Ù¾»’úØ–ÈáÌðÌÌ9W×m¿¬zòþýÕußW»zC~¿Z6}ß<‘?®î_¾öoÏ5¹ºkš¾nÉÕZþú\m÷Ǫß7G²X,oVdöŸYLb’%”ä%%m=û×ßÈq¶\Ïâˆò„lgWîc²ífWëuL’8Š)Y?ÎRøF ÂiÄÉz3 òpýmv»žý6Àà‰!•Ž!‚†n?s¿Í®îŸ«£ò×ê¸%A}œX†WŸVoàÿBÂJqâŠþŽÌðHžE9É“2Š™8ò÷÷qL³EÊ |áþbñ·P¿ øK☭à/ƒ?¿sõ[®M¬ÿ>Ìád¸ÃëubýM²4J2ÇãI¢Ãï’”Ø{ÉãÖee">T–Ò2‹i ÁóP,æiŸ"KqºH)üÈLÊDªà“åò%Í£²”+eî–ê¥ØÅ`%ÊvœrqjG¡mËŒãC½:æ× € àæ=žs§þ¼³.î¤×ð.4-ôjí6@vR–-æÔ˜Z)spd`‘ÄjljíKųԚJÓS×EzÒ³œ-ÌYn<_Ì!óef¿³ „9ÀF\˜Õˆ×gÑ#‚{ &gbµ2+Mç¼E"Æ v ~» +Àz^h\`ð"Fk!WVäÒ¾óÀ\·H*§Ã‹*p¯ï°ŒF‰‹ï "!-eXÁºï*“AµÙ„*Z(;LNЋ>w!¦(ØwïH˜ÆêýGñ•¯ûÃÁn›“llYžE4S!uõqCÂ9S…¼èëáþð‰þ$ÐÛ9u< +ºÁ+›z&£Ô;sx³Ì'Ÿ™Fiáe¾­C€Çö%œÃÇ!ÌFªöð6ÅT²°#Ý™M,ÃVرèOY1—¹z©©K2†Ý ¡w—n”ŠŽÅœìŽ¹ÑŸåwP†ßIîÂW*<Å<ék¾–é±×‰,O‘ Í(|ø¤EBĤWþ^â,,¡È†ÜÀe.ƲôÄágÒ“ ¬¥dsK²¸…†@£t›:D²TϨá÷èîµ2¤q¦80ÆÍJk@ºÅ…q—QyÌdž™J‡ ve>KÌ»C²XM(*^[ +USÌU*Xžf¬ò䯒Í,‡¶UãQ@̾ÒG6Ñ+ 1Y1“¹ô@¼c*Æ+¹ö­B{þZ`ò²”?±´ÒcL²¼–R–Ljòø³úrgº(0!‘ÜqxL:Gp¦K ˆç¯3}K"fUY{Áëú—1*UψÜMæZ ]JF0žº© º±pR¼ÕUKB$>/!”ã¦n5gÛšoÕf¥“¡ +ï~¨y™¹°AŸ!ð ÷6¹œø–(º`;vŽ³úo¡‡‹ÝséÐ4±ƒHv.ìðÎÁv±Îè`ª‰ZæWt pì·n5‰p–Æn‘Ûþï× 1um­ü<ÙÉûõá :¡´M|bó%s'ó¤'ÞðÊ¡SyÕÄܼ3®€‡#㶌h>bx ‚G0$ß=ÙÄá?eÊ»»êAk†—CÿF„8îÆÔY—Äsæ9rÿ`±7ÊãøPw¤ QU=’Þ8˜Ê/Çó?j#¿Zý¬ÛcxhíscDOÛ7ÚèF‹Ÿ—v*² Wm‰P}°ªß?Y7vºÕzo[“äµÒû;R‹M‚ÜÂ]mNÞ(ƒ‰æÃ?¾N»Ü<˜0öÕA-5ÀisqÛ¸–ãaÄ~J:qæJ§“‰¥É2Ö#35hh×uªj{žÚîÆÜy‡o Í™å¬Äþ'Ù…ês–hÒ'[ÉòT6á*§¡á`>W\ò8ÝM öûŸgÌ8t¡Û;M·8Q‹¾,ð‚Õ§¯ÜÓäØÜ×¥é sM,Ë÷µ¹Á£l†NÈ»¼ÃtÌ÷úôJν”:—{Gê§×87V#Zó{©éÀ'8IÖ„ç,sð+šôP†C‡Ò‹Ÿ¥’Úª ^÷ýŽ„"eÁhG +4A# +}{]BöX‚9 îM‡ÒÕÿôd:P+b×È'^Õ¨Ö,¢Ð ±“;˜”W/kNÉ<—áqß;GݬT•æ¸s)ûƒÝ}^½¾Š”íâV.ò(– ò{yF“Nä"C£Ü‡çºÜÍnâIýš4D)W}Oö®6}îJÚpd¬Úφ_äTÆŸÆE”¹l`(é¹Ú€ÒàC)¥eÄØ ˜â;TQ6Aê¦^œ>“é¤YNk^"4LûñGV~B%Ë3øš.&?¹C·9¾§£.©îâ]:ö˜:ÜbìÖ.Ö¹ë‰GÓrI£S¿[„ÑáˆIGˆ!ŸJ²"JÝë +¢Á=4L¯9 ²Â=txãN§’æ<–};.#èý²6>B£Eeì*CÒ~˜N,ß[«¾×Gbøéƒßâ_Úè­ZÙé­/;M8ávýJ.Sü&øåå©:/Èt*I§@¨Ä”4qóá¹Á,OeQƼdªB›?œˆ»½HàQÒ|9!?¨²>êÕÇÞ,¯õ³ö±Ia®aĈL§ÒŽ4‘ãÃÇ’øÊ(ІsÝõá¹…0ÇÕOµEÄ®ú¡AVÙ_ë¾—,@<ÑfŽ›ºÕ èúê¸Ù›i±uð5Š9¤SÙ$¬L#“¹«ílÁ˜œT‡CmÝ6™êL"Éc%°a±)l­HÃ/[m¢j!¢ãr ª±t${@‘¡WƦ>Âx¼©µÏÝ~{$d¢O0šµúaÜ%ÏUÛïó¾°Ö¾T½8|?¿,²­ +ß*Cü:Œš>ìt‹JÍÙ· ùP¸Ì4ðd§eîu>éÖ¡©Ðá~Œ`1è(Ë¡H˜¡£7rè;ƒ>¶#TrŠåf"ØÝïX A£IùµC—Š½Iõ¹”묊BÖ3ØNôÛ“5©$-'tÀ¤„Ÿh*ËI|ñ6<¡#H™ßŽcÁÜt2|Ñ0üܘÁ×öýÍð[fS™1ä95‚°©Ìƒ‚°*˜—‰CÕõ¦U½ÉŠ«Úñà#>Êi°,Np®˜²£{òÀ‚H²Ú‚[P!˜4:-Õ>#ÀÎ9{Æ|X+äÔJ/6rʦļ´]Ë+G.Ê»Æõ…5›` ­ +‘+]•XfÎ,UöNcò$K©³i©É·McaVq78ë‹-b[ý§zò7wDÍð²fS©j“@/J(o-‰}ª£žÊó +A—·.Œ)á©L¬(sþ1¬»Ý¢¹æ—Ûø©gº™Ô»FR÷ƒx ŸBP$_¯•K,Å^I§ªC׈ŸÎu±½û.yE«=.Pù¯¾Ëɯ¼QœÇñLp^Üö*£ +éÀ3ݘåzñZíö}­™Ç;'ªMs4'áá¯û~çüíEzÛÛnìþ²Ö9ùôëÅ°†‘¹¡®îïãT2´¡ ýídY”)ùøZÃu+›J SÔ=wÜG¡ ²•¥ð¤ì®Ú€!^ƽú’#”ž[ –æ¹éªÃˆ[™J38»È_G䇠þM8Àºp3¤;v.& 9¢ÅC_žs;ÅĪØÿ%½Z{ÛF®è_ÑG °Çœ'É  (ë´ X` ŒLGjlQ ˜î¯ï½3s‡CzÛjf?È&9¯ûšsΕ#ßÚÛ]Žè:[žðK+/‚ Bdz¨¬T“{ìBQõ¶¦P¨Ýõ,ÜQµA·FMÕóìéÚ½þðï–6z=·OøâO´"ù…¨¥ýšÏýØÌ/=£eÃ>4kÁÄ®†Ãóا«,Va[Lj›þ¬§­º•GêÚƒa²é?ÇéxÕe¢ùÚýw/‡•¿ïßä—×çÇ ØGÇ_+hŠ–Ð>:T¼Üæ\ ŠŠq3ZR´¹*@ÀmΙuìÜÿ5ó¢à€—”À<§Qš呇$©×ªŠ•¸ª½Ü$Ä©l¯9Êh³æ˜tîù剼„k¼Ùww|´š¿óÈì” æ’†ã7©ª:[òÛîgÛ(q$4—Ë Ã'é ý~) +NH¤îW wÒ¤QŒˆ)¦Fb‹ŒÄ|n°#‹èÅ5(`tࡧX^¹ Ùž±RÔƒÙõ24’ûª ~ÚДš–‹Ú·"<46“6axzj9mVþp Öä/äTa‡ìVëÙÊÐzÉ-°ëع-hŽç\QÎ|ŠýW¿D=&ºc7Jè¥L.ó^Æ+q·L>ŒKåö¥÷À$±pTcJpƧá¶9¶ö=ôo»òÏ'º@y^x¿&\…\zR$rr–îz%m~¾nOÍ× Z;ƒš…á]ÊÍå$ü_–˜NÅЫÀ^˜Ìýpy2sÙɦDtèïËát~wC™ºyy!â~aQÃ9PVwáS©¦¦3"yZÏvÝóDEPP¼%W¤|$}7/tø>¥Nr4àUöëË£žÛž ®Y؛Ӊü~ +öœ€Ü¶ (63¹\:½,$“q(–Çöåbʦœz ­Dçt™‹ÜR˜i¤¡}¡œwÇáò\—¹ ”Tš ‘év.K“ÊLÜ~¡ºÿs±V–Üj¸,ÿs!V–›Ž‰ÿ]Oøžàv.ÆɺšÝ±·s1ÎêÁ­N)8Óq0ï lŠKf2‘½Ì6-J5qõµûÑ_|n•‹g +TKîÍ®rM)>¿Ù+¯žÚó÷¡C¶?¦ÒÆ ÃûåfŠÁƒ^Kèw>·+'Ηïì|/$„N`U.,:áŵ}E/>5ýn¿ å" +Aꤸ_±ƒr!“óÛѤ„þ¶ÊG×ߊZ3ŸËí+¹ÝcË•7€¬̾é‰Î{Ào$ïúö'@ÜåÊÅVìwAÞ£Sª>M·âŸ<:Ô¦T)l( ´ÐBª­mYMèß dqëzL ¤ï‹‚s˜‚ÕþvÔ€¯8 ÛréÐhÛù4QÀáâv–a/ªÌÚ§­Pð»õÖ}XGßךX;†M,§ýÃ4-Ü4UÓ»Î8´ÏüôãU¹.ÃA0EO,ÚF1ÚŒ1ÂÓù‡1NXp'µVáHþÆ +»=|ÕÒî„fš×nåëoù£?büš'üE¿{t™u1ÝÇYØ<"°±†è7”Žc”õ/ÝîÐT¯>ëÀT Ñy;ÂÀs3h~wŒJë ìDúá¸kaÀ­J u’Úó["t½¡7*<ºkwôaåoÅL÷Ô+¿½&˜™«Ï¸€Ó&v^-4š§ï—\Þ¯®¬­§™Êì;ç`åbYSþêKØì¶ImEZëKɼÎUZž¸šÄˆ‹‚ +®b‹‡½Ã;ú ˶0NÈRPÀ@.boH +7çã¢(ižN’uvË ×j‚’¬sU™W’ªbÚKÉ]XH#f éñþ#Ô ©È_YÊ]Ns“»Ì9@µšXÛ`D@À”,åÒ,Wðd"#RÒ”ÍR(ñD»>ÑœC9ñ¹¾¶ +Æ+P09ÒŸr3ÊI'‚ýŽÏ.^ÿDúI8­ƒƒA+Ú•ï¨Ã?Ôš^#¬’¶Ûmæ«Œ×tÚ¯®ÞHI‰¿˜–…ˆ±•ɽàkäJ;{„q^Lï[·VäÑGþ`UgÉzí¶F©8jsI»­ßèup/KWÔ¹ºB=¿K±® @ìV =-V>VZеÿÔôß[ }âö•‡†o« .öòû§(^*D2ëÈßAã6ÄýnŸbD.׆)1±âj¡xèýråÊ|)ÌŸRlK ìdqV™‰qN?§tŠ ô=ƒ0£˜ŒŒH“ ¼È¥Unj ‘÷‚ŠChÔ ¨£GÀ^ƒ¸ºù×ó÷ž­x±X*8’Êà—…í+cF}’ä\:—ªf&Ît9ñ"‰—ߊˆ€tñý ›£bõ¾ÿÆ\{’€$vŽ%Bɞ؂ + iÂ}|JJGmOKO¶ôÈš¤l$ ûì¢IÁdtê— +j$"^µ  R +‚¸OÇܱ¨ Œ&‰mŠ ý»¹&G*OñU iDRžˆKOÖ3î‡ïÀ¤Ea‚jë’Þ½8P#i×nİžs³ ')Ç»:ÄÆ +RN¨¨Šb±ölÀêž1Ê»9F¯ôþoàÆ»gòøŸó\ÖT¼žÝÚ ‘Ò–>í;µ¼ë›@óçf¤Wº;ží {¥º#\4/>öO{jË»sÂ¥ã¹L| ZÕ‹»ÝBk¨oÝ¿«„ ÈséÖé‘‚3S¹ÀJÇ2£0S À<ë$'Ÿ… HW™—HÃ<›†¹´}S^þ?öåŠÊHßXÁRWDÇÐäÐXM ÆMKÑú<—ƒE©Y)"GSPŸ¶“ÿ#Àßš‘à +endstream +endobj +56 0 obj +<< +/BM /Normal +/CA 1 +/Type /ExtGState +/ca 1 +>> +endobj +57 0 obj +<< +/P 854 0 R +/S /Span +/Type /StructElem +/Pg 15 0 R +/K 0 +>> +endobj +58 0 obj +<< +/P 854 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [1] +/Pg 15 0 R +>> +endobj +59 0 obj +<< +/P 855 0 R +/S /Span +/Type /StructElem +/Pg 15 0 R +/K 2 +>> +endobj +60 0 obj +<< +/P 855 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [3] +/Pg 15 0 R +>> +endobj +61 0 obj +<< +/P 856 0 R +/S /Span +/Type /StructElem +/ActualText (Name: ) +/K [4] +/Pg 15 0 R +>> +endobj +62 0 obj +<< +/P 856 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [5] +/Pg 15 0 R +>> +endobj +63 0 obj +<< +/P 856 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [6] +/Pg 15 0 R +>> +endobj +64 0 obj +<< +/P 856 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [7] +/Pg 15 0 R +>> +endobj +65 0 obj +<< +/P 856 0 R +/S /Span +/Type /StructElem +/ActualText +/K [8] +/Pg 15 0 R +>> +endobj +66 0 obj +<< +/P 856 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [9] +/Pg 15 0 R +>> +endobj +67 0 obj +<< +/P 856 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [10] +/Pg 15 0 R +>> +endobj +68 0 obj +<< +/P 857 0 R +/S /Span +/Type /StructElem +/ActualText (Email: ) +/K [11] +/Pg 15 0 R +>> +endobj +69 0 obj +<< +/P 857 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [12] +/Pg 15 0 R +>> +endobj +70 0 obj +<< +/P 857 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [13] +/Pg 15 0 R +>> +endobj +71 0 obj +<< +/P 857 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [14] +/Pg 15 0 R +>> +endobj +72 0 obj +<< +/P 857 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [15] +/Pg 15 0 R +>> +endobj +73 0 obj +<< +/P 857 0 R +/S /Span +/Type /StructElem +/ActualText (eliseuamaro@pm.me ) +/K [16] +/Pg 15 0 R +>> +endobj +74 0 obj +<< +/P 857 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [17] +/Pg 15 0 R +>> +endobj +75 0 obj +<< +/P 858 0 R +/S /Span +/Type /StructElem +/ActualText (Website: ) +/K [18] +/Pg 15 0 R +>> +endobj +76 0 obj +<< +/P 858 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [19] +/Pg 15 0 R +>> +endobj +77 0 obj +<< +/P 858 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [20] +/Pg 15 0 R +>> +endobj +78 0 obj +<< +/P 858 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [21] +/Pg 15 0 R +>> +endobj +79 0 obj +<< +/P 858 0 R +/S /Span +/Type /StructElem +/ActualText (https://github.com/rainydaysavings/) +/K [22] +/Pg 15 0 R +>> +endobj +80 0 obj +<< +/P 858 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [23] +/Pg 15 0 R +>> +endobj +81 0 obj +<< +/P 859 0 R +/S /Span +/Type /StructElem +/ActualText (Time zone) +/K [24] +/Pg 15 0 R +>> +endobj +82 0 obj +<< +/P 859 0 R +/S /Span +/Type /StructElem +/ActualText (:) +/K [25] +/Pg 15 0 R +>> +endobj +83 0 obj +<< +/P 859 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [26] +/Pg 15 0 R +>> +endobj +84 0 obj +<< +/P 859 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [27] +/Pg 15 0 R +>> +endobj +85 0 obj +<< +/P 859 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [28] +/Pg 15 0 R +>> +endobj +86 0 obj +<< +/P 859 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [29] +/Pg 15 0 R +>> +endobj +87 0 obj +<< +/P 859 0 R +/S /Span +/Type /StructElem +/ActualText (GMT+) +/K [30] +/Pg 15 0 R +>> +endobj +88 0 obj +<< +/P 859 0 R +/S /Span +/Type /StructElem +/ActualText (1) +/K [31] +/Pg 15 0 R +>> +endobj +89 0 obj +<< +/P 859 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [32] +/Pg 15 0 R +>> +endobj +90 0 obj +<< +/P 860 0 R +/S /Span +/Type /StructElem +/ActualText (Proof of competence: ) +/K [33] +/Pg 15 0 R +>> +endobj +91 0 obj +<< +/P 860 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [34] +/Pg 15 0 R +>> +endobj +92 0 obj +<< +/P 860 0 R +/S /Span +/Type /StructElem +/ActualText (https://notabug.org/rainydaysavings/NewFrontendClassic) +/K [35] +/Pg 15 0 R +>> +endobj +93 0 obj +<< +/P 860 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [36] +/Pg 15 0 R +>> +endobj +94 0 obj +<< +/P 861 0 R +/S /Span +/Type /StructElem +/Pg 15 0 R +/K 37 +>> +endobj +95 0 obj +<< +/P 861 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [38] +/Pg 15 0 R +>> +endobj +96 0 obj +<< +/P 862 0 R +/S /Span +/Type /StructElem +/ActualText (GNU social is a communications software used in federated/) +/K [39] +/Pg 15 0 R +>> +endobj +97 0 obj +<< +/P 862 0 R +/S /Span +/Type /StructElem +/ActualText (decentralized) +/K [40] +/Pg 15 0 R +>> +endobj +98 0 obj +<< +/P 862 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [41] +/Pg 15 0 R +>> +endobj +99 0 obj +<< +/P 862 0 R +/S /Span +/Type /StructElem +/ActualText (social networks. It is part of ) +/K [42] +/Pg 15 0 R +>> +endobj +100 0 obj +<< +/P 862 0 R +/S /Span +/Type /StructElem +/ActualText (the GNU project as the name implies and it ) +/K [43] +/Pg 15 0 R +>> +endobj +101 0 obj +<< +/P 862 0 R +/S /Span +/Type /StructElem +/ActualText (follows the Unix) +/K [44] +/Pg 15 0 R +>> +endobj +102 0 obj +<< +/P 862 0 R +/S /Span +/Type /StructElem +/ActualText (-) +/K [45] +/Pg 15 0 R +>> +endobj +103 0 obj +<< +/P 862 0 R +/S /Span +/Type /StructElem +/ActualText (philosophy where) +/K [46] +/Pg 15 0 R +>> +endobj +104 0 obj +<< +/P 862 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [47] +/Pg 15 0 R +>> +endobj +105 0 obj +<< +/P 862 0 R +/S /Span +/Type /StructElem +/ActualText (small program) +/K [48] +/Pg 15 0 R +>> +endobj +106 0 obj +<< +/P 862 0 R +/S /Span +/Type /StructElem +/ActualText (s do a small ) +/K [49] +/Pg 15 0 R +>> +endobj +107 0 obj +<< +/P 862 0 R +/S /Span +/Type /StructElem +/ActualText (job.) +/K [50] +/Pg 15 0 R +>> +endobj +108 0 obj +<< +/P 862 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [51] +/Pg 15 0 R +>> +endobj +109 0 obj +<< +/P 862 0 R +/S /Span +/Type /StructElem +/ActualText +/K [52] +/Pg 15 0 R +>> +endobj +110 0 obj +<< +/P 862 0 R +/S /Span +/Type /StructElem +/ActualText (achieve this, the design must be simple, modern and improve the UX by virtue of visual movement flow ) +/K [53] +/Pg 15 0 R +>> +endobj +111 0 obj +<< +/P 862 0 R +/S /Span +/Type /StructElem +/ActualText (through means of careful placement) +/K [54] +/Pg 15 0 R +>> +endobj +112 0 obj +<< +/P 862 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [55] +/Pg 15 0 R +>> +endobj +113 0 obj +<< +/P 862 0 R +/S /Span +/Type /StructElem +/ActualText (of design elements and the ) +/K [56] +/Pg 15 0 R +>> +endobj +114 0 obj +<< +/P 862 0 R +/S /Span +/Type /StructElem +/ActualText (good use of ) +/K [57] +/Pg 15 0 R +>> +endobj +115 0 obj +<< +/P 862 0 R +/S /Span +/Type /StructElem +/ActualText (typography principles that will ) +/K [58] +/Pg 15 0 R +>> +endobj +116 0 obj +<< +/P 862 0 R +/S /Span +/Type /StructElem +/ActualText (help infuse character, beauty and provide better readability for the user.) +/K [59] +/Pg 15 0 R +>> +endobj +117 0 obj +<< +/P 862 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [60] +/Pg 15 0 R +>> +endobj +118 0 obj +<< +/P 863 0 R +/S /Span +/Type /StructElem +/ActualText (Mechanical memory is a big part of how we use the web, we are mostly ) +/K [61] +/Pg 15 0 R +>> +endobj +119 0 obj +<< +/P 863 0 R +/S /Span +/Type /StructElem +/ActualText (unconscious) +/K [62] +/Pg 15 0 R +>> +endobj +120 0 obj +<< +/P 863 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [63] +/Pg 15 0 R +>> +endobj +121 0 obj +<< +/P 863 0 R +/S /Span +/Type /StructElem +/ActualText (of the actions we ) +/K [64] +/Pg 15 0 R +>> +endobj +122 0 obj +<< +/P 863 0 R +/S /Span +/Type /StructElem +/ActualText (take and b) +/K [65] +/Pg 15 0 R +>> +endobj +123 0 obj +<< +/P 863 0 R +/S /Span +/Type /StructElem +/ActualText +/K [66] +/Pg 15 0 R +>> +endobj +124 0 obj +<< +/P 863 0 R +/S /Span +/Type /StructElem +/ActualText (to not only guide the user but also improve their experience overall.) +/K [67] +/Pg 15 0 R +>> +endobj +125 0 obj +<< +/P 863 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [68] +/Pg 15 0 R +>> +endobj +126 0 obj +<< +/P 864 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [69] +/Pg 15 0 R +>> +endobj +127 0 obj +<< +/P 865 0 R +/S /Span +/Type /StructElem +/Pg 15 0 R +/K 70 +>> +endobj +128 0 obj +<< +/P 865 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [71] +/Pg 15 0 R +>> +endobj +129 0 obj +<< +/P 866 0 R +/S /Span +/Type /StructElem +/Pg 15 0 R +/K 72 +>> +endobj +130 0 obj +<< +/P 866 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [73] +/Pg 15 0 R +>> +endobj +131 0 obj +<< +/P 867 0 R +/S /Span +/Type /StructElem +/ActualText (The act of reading throughout our life injected us with some of this mechanical memory that we use in ) +/K [74] +/Pg 15 0 R +>> +endobj +132 0 obj +<< +/P 867 0 R +/S /Span +/Type /StructElem +/ActualText (the web today, aiding us performing tasks better and faster. ) +/K [75] +/Pg 15 0 R +>> +endobj +133 0 obj +<< +/P 867 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [76] +/Pg 15 0 R +>> +endobj +134 0 obj +<< +/P 868 0 R +/S /Span +/Type /StructElem +/ActualText (Some w) +/K [77] +/Pg 15 0 R +>> +endobj +135 0 obj +<< +/P 868 0 R +/S /Span +/Type /StructElem +/ActualText (estern web design principles are ) +/K [78] +/Pg 15 0 R +>> +endobj +136 0 obj +<< +/P 868 0 R +/S /Span +/Type /StructElem +/ActualText (fairly ) +/K [79] +/Pg 15 0 R +>> +endobj +137 0 obj +<< +/P 868 0 R +/S /Span +/Type /StructElem +/ActualText (dominant ) +/K [80] +/Pg 15 0 R +>> +endobj +138 0 obj +<< +/P 868 0 R +/S /Span +/Type /StructElem +/ActualText (even though most cultures throughout ) +/K [81] +/Pg 15 0 R +>> +endobj +139 0 obj +<< +/P 868 0 R +/S /Span +/Type /StructElem +/ActualText (the world ) +/K [82] +/Pg 15 0 R +>> +endobj +140 0 obj +<< +/P 868 0 R +/S /Span +/Type /StructElem +/ActualText (use different writing systems, one example of this are menus placement in Japanese websites, although the ) +/K [83] +/Pg 15 0 R +>> +endobj +141 0 obj +<< +/P 868 0 R +/S /Span +/Type /StructElem +/ActualText (language can be written from left to right \() +/K [84] +/Pg 15 0 R +>> +endobj +142 0 obj +<< +/P 868 0 R +/S /Span +/Type /StructElem +/ActualText (tategaki) +/K [85] +/Pg 15 0 R +>> +endobj +143 0 obj +<< +/P 868 0 R +/S /Span +/Type /StructElem +/ActualText (\)) +/K [86] +/Pg 15 0 R +>> +endobj +144 0 obj +<< +/P 868 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [87] +/Pg 15 0 R +>> +endobj +145 0 obj +<< +/P 868 0 R +/S /Span +/Type /StructElem +/ActualText (or top to bottom \(yokogaki\), ) +/K [88] +/Pg 15 0 R +>> +endobj +146 0 obj +<< +/P 868 0 R +/S /Span +/Type /StructElem +/ActualText (menus) +/K [89] +/Pg 15 0 R +>> +endobj +147 0 obj +<< +/P 868 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [90] +/Pg 15 0 R +>> +endobj +148 0 obj +<< +/P 868 0 R +/S /Span +/Type /StructElem +/ActualText (tend to ) +/K [91] +/Pg 15 0 R +>> +endobj +149 0 obj +<< +/P 868 0 R +/S /Span +/Type /StructElem +/ActualText (be placed ) +/K [92] +/Pg 15 0 R +>> +endobj +150 0 obj +<< +/P 868 0 R +/S /Span +/Type /StructElem +/ActualText (following mostly LTR principles ) +/K [93] +/Pg 15 0 R +>> +endobj +151 0 obj +<< +/P 868 0 R +/S /Span +/Type /StructElem +/ActualText (\(Cyr and Trevor) +/K [94] +/Pg 15 0 R +>> +endobj +152 0 obj +<< +/P 868 0 R +/S /Span +/Type /StructElem +/ActualText (-) +/K [95] +/Pg 15 0 R +>> +endobj +153 0 obj +<< +/P 868 0 R +/S /Span +/Type /StructElem +/ActualText (Smith, 2004\)) +/K [96] +/Pg 15 0 R +>> +endobj +154 0 obj +<< +/P 868 0 R +/S /Span +/Type /StructElem +/ActualText (.) +/K [97] +/Pg 15 0 R +>> +endobj +155 0 obj +<< +/P 868 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [98] +/Pg 15 0 R +>> +endobj +156 0 obj +<< +/P 868 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [99] +/Pg 15 0 R +>> +endobj +157 0 obj +<< +/P 869 0 R +/S /Span +/Type /StructElem +/ActualText (LTR or left to right implies the user will direct ) +/K [100] +/Pg 15 0 R +>> +endobj +158 0 obj +<< +/P 869 0 R +/S /Span +/Type /StructElem +/ActualText (its) +/K [101] +/Pg 15 0 R +>> +endobj +159 0 obj +<< +/P 869 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [102] +/Pg 15 0 R +>> +endobj +160 0 obj +<< +/P 869 0 R +/S /Span +/Type /StructElem +/ActualText (attention ) +/K [103] +/Pg 15 0 R +>> +endobj +161 0 obj +<< +/P 869 0 R +/S /Span +/Type /StructElem +/ActualText (to the top leftmost part of the screen upon ) +/K [104] +/Pg 15 0 R +>> +endobj +162 0 obj +<< +/P 869 0 R +/S /Span +/Type /StructElem +/ActualText +/K [105] +/Pg 15 0 R +>> +endobj +163 0 obj +<< +/P 869 0 R +/S /Span +/Type /StructElem +/ActualText (logo as well as where the user is in that webpage.) +/K [106] +/Pg 15 0 R +>> +endobj +164 0 obj +<< +/P 869 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [107] +/Pg 15 0 R +>> +endobj +165 0 obj +<< +/P 869 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [108] +/Pg 15 0 R +>> +endobj +166 0 obj +<< +/P 870 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [0] +/Pg 16 0 R +>> +endobj +167 0 obj +<< +/P 872 0 R +/S /Span +/Type /StructElem +/ActualText (Here w) +/K [1] +/Pg 16 0 R +>> +endobj +168 0 obj +<< +/P 872 0 R +/S /Span +/Type /StructElem +/ActualText (e can see how this principle is applied in the design, continuing the LTR movement) +/K [2] +/Pg 16 0 R +>> +endobj +169 0 obj +<< +/P 872 0 R +/S /Span +/Type /StructElem +/ActualText (, in the middle, ) +/K [3] +/Pg 16 0 R +>> +endobj +170 0 obj +<< +/P 872 0 R +/S /Span +/Type /StructElem +/ActualText (the user location on the site is seen.) +/K [4] +/Pg 16 0 R +>> +endobj +171 0 obj +<< +/P 872 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [5] +/Pg 16 0 R +>> +endobj +172 0 obj +<< +/P 872 0 R +/S /Span +/Type /StructElem +/ActualText (Bellow it a text prompt is displayed, providing the user right away the) +/K [6] +/Pg 16 0 R +>> +endobj +173 0 obj +<< +/P 872 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [7] +/Pg 16 0 R +>> +endobj +174 0 obj +<< +/P 872 0 R +/S /Span +/Type /StructElem +/ActualText (ability to post. Another) +/K [8] +/Pg 16 0 R +>> +endobj +175 0 obj +<< +/P 872 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [9] +/Pg 16 0 R +>> +endobj +176 0 obj +<< +/P 872 0 R +/S /Span +/Type /StructElem +/ActualText (argument can also be made) +/K [10] +/Pg 16 0 R +>> +endobj +177 0 obj +<< +/P 872 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [11] +/Pg 16 0 R +>> +endobj +178 0 obj +<< +/P 872 0 R +/S /Span +/Type /StructElem +/ActualText (for this) +/K [12] +/Pg 16 0 R +>> +endobj +179 0 obj +<< +/P 872 0 R +/S /Span +/Type /StructElem +/ActualText (, normally the text prompt is also accessible on ) +/K [13] +/Pg 16 0 R +>> +endobj +180 0 obj +<< +/P 872 0 R +/S /Span +/Type /StructElem +/ActualText (other social network) +/K [14] +/Pg 16 0 R +>> +endobj +181 0 obj +<< +/P 872 0 R +/S /Span +/Type /StructElem +/ActualText (s) +/K [15] +/Pg 16 0 R +>> +endobj +182 0 obj +<< +/P 872 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [16] +/Pg 16 0 R +>> +endobj +183 0 obj +<< +/P 872 0 R +/S /Span +/Type /StructElem +/ActualText (in the same general area) +/K [17] +/Pg 16 0 R +>> +endobj +184 0 obj +<< +/P 872 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [18] +/Pg 16 0 R +>> +endobj +185 0 obj +<< +/P 872 0 R +/S /Span +/Type /StructElem +/ActualText (\(Pang ) +/K [19] +/Pg 16 0 R +>> +endobj +186 0 obj +<< +/P 872 0 R +/S /Span +/Type /StructElem +/ActualText (et al.) +/K [20] +/Pg 16 0 R +>> +endobj +187 0 obj +<< +/P 872 0 R +/S /Span +/Type /StructElem +/ActualText (, 2016\)) +/K [21] +/Pg 16 0 R +>> +endobj +188 0 obj +<< +/P 872 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [22] +/Pg 16 0 R +>> +endobj +189 0 obj +<< +/P 872 0 R +/S /Span +/Type /StructElem +/ActualText (and mechanical memory is a key) +/K [23] +/Pg 16 0 R +>> +endobj +190 0 obj +<< +/P 872 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [24] +/Pg 16 0 R +>> +endobj +191 0 obj +<< +/P 872 0 R +/S /Span +/Type /StructElem +/ActualText (principle ) +/K [25] +/Pg 16 0 R +>> +endobj +192 0 obj +<< +/P 872 0 R +/S /Span +/Type /StructElem +/ActualText (of this design.) +/K [26] +/Pg 16 0 R +>> +endobj +193 0 obj +<< +/P 872 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [27] +/Pg 16 0 R +>> +endobj +194 0 obj +<< +/P 873 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [28] +/Pg 16 0 R +>> +endobj +195 0 obj +<< +/P 873 0 R +/S /Span +/Type /StructElem +/ActualText (There are options inherent to the user though, and thus these must be ) +/K [29] +/Pg 16 0 R +>> +endobj +196 0 obj +<< +/P 873 0 R +/S /Span +/Type /StructElem +/ActualText (containerized within the users profile info in order to contextualize the user that ) +/K [30] +/Pg 16 0 R +>> +endobj +197 0 obj +<< +/P 873 0 R +/S /Span +/Type /StructElem +/ActualText (these are indeed pages unique to himself, one could argue that options such as ) +/K [31] +/Pg 16 0 R +>> +endobj +198 0 obj +<< +/P 873 0 R +/S /Span +/Type /StructElem +/ActualText (replies, ) +/K [32] +/Pg 16 0 R +>> +endobj +199 0 obj +<< +/P 873 0 R +/S /Span +/Type /StructElem +/ActualText (favourites) +/K [33] +/Pg 16 0 R +>> +endobj +200 0 obj +<< +/P 873 0 R +/S /Span +/Type /StructElem +/ActualText (, re) +/K [34] +/Pg 16 0 R +>> +endobj +201 0 obj +<< +/P 873 0 R +/S /Span +/Type /StructElem +/ActualText (verse ) +/K [35] +/Pg 16 0 R +>> +endobj +202 0 obj +<< +/P 873 0 R +/S /Span +/Type /StructElem +/ActualText (favourites) +/K [36] +/Pg 16 0 R +>> +endobj +203 0 obj +<< +/P 873 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [37] +/Pg 16 0 R +>> +endobj +204 0 obj +<< +/P 873 0 R +/S /Span +/Type /StructElem +/ActualText (are also unique to each user and that would ) +/K [38] +/Pg 16 0 R +>> +endobj +205 0 obj +<< +/P 873 0 R +/S /Span +/Type /StructElem +/ActualText (be correct) +/K [39] +/Pg 16 0 R +>> +endobj +206 0 obj +<< +/P 873 0 R +/S /Span +/Type /StructElem +/ActualText (;) +/K [40] +/Pg 16 0 R +>> +endobj +207 0 obj +<< +/P 873 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [41] +/Pg 16 0 R +>> +endobj +208 0 obj +<< +/P 873 0 R +/S /Span +/Type /StructElem +/ActualText (however, these are pages much more closely related to how the user ) +/K [42] +/Pg 16 0 R +>> +endobj +209 0 obj +<< +/P 873 0 R +/S /Span +/Type /StructElem +/ActualText (interacts) +/K [43] +/Pg 16 0 R +>> +endobj +210 0 obj +<< +/P 873 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [44] +/Pg 16 0 R +>> +endobj +211 0 obj +<< +/P 873 0 R +/S /Span +/Type /StructElem +/ActualText (with the rest of the community ) +/K [45] +/Pg 16 0 R +>> +endobj +212 0 obj +<< +/P 873 0 R +/S /Span +/Type /StructElem +/ActualText (and much more frequently accessed ) +/K [46] +/Pg 16 0 R +>> +endobj +213 0 obj +<< +/P 873 0 R +/S /Span +/Type /StructElem +/ActualText (than bookmarks) +/K [47] +/Pg 16 0 R +>> +endobj +214 0 obj +<< +/P 873 0 R +/S /Span +/Type /StructElem +/ActualText (,) +/K [48] +/Pg 16 0 R +>> +endobj +215 0 obj +<< +/P 873 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [49] +/Pg 16 0 R +>> +endobj +216 0 obj +<< +/P 873 0 R +/S /Span +/Type /StructElem +/ActualText (hence the) +/K [50] +/Pg 16 0 R +>> +endobj +217 0 obj +<< +/P 873 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [51] +/Pg 16 0 R +>> +endobj +218 0 obj +<< +/P 873 0 R +/S /Span +/Type /StructElem +/ActualText (decisio) +/K [52] +/Pg 16 0 R +>> +endobj +219 0 obj +<< +/P 873 0 R +/S /Span +/Type /StructElem +/ActualText (n. ) +/K [53] +/Pg 16 0 R +>> +endobj +220 0 obj +<< +/P 873 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [54] +/Pg 16 0 R +>> +endobj +221 0 obj +<< +/P 874 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [55] +/Pg 16 0 R +>> +endobj +222 0 obj +<< +/P 875 0 R +/S /Span +/Type /StructElem +/ActualText (The search bar placement might be a controversial decision at first, since it is ) +/K [56] +/Pg 16 0 R +>> +endobj +223 0 obj +<< +/P 875 0 R +/S /Span +/Type /StructElem +/ActualText (supposed to search through) +/K [57] +/Pg 16 0 R +>> +endobj +224 0 obj +<< +/P 875 0 R +/S /Span +/Type /StructElem +/ActualText (out) +/K [58] +/Pg 16 0 R +>> +endobj +225 0 obj +<< +/P 875 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [59] +/Pg 16 0 R +>> +endobj +226 0 obj +<< +/P 875 0 R +/S /Span +/Type /StructElem +/ActualText (the whole social network and not just into the ) +/K [60] +/Pg 16 0 R +>> +endobj +227 0 obj +<< +/P 875 0 R +/S /Span +/Type /StructElem +/ActualText +/K [61] +/Pg 16 0 R +>> +endobj +228 0 obj +<< +/P 875 0 R +/S /Span +/Type /StructElem +/ActualText +/K [62] +/Pg 16 0 R +>> +endobj +229 0 obj +<< +/P 875 0 R +/S /Span +/Type /StructElem +/ActualText (and therefore the search bar as well.) +/K [63] +/Pg 16 0 R +>> +endobj +230 0 obj +<< +/P 875 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [64] +/Pg 16 0 R +>> +endobj +231 0 obj +<< +/P 875 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [65] +/Pg 16 0 R +>> +endobj +232 0 obj +<< +/P 875 0 R +/S /Span +/Type /StructElem +/ActualText (Furthermore, its) +/K [66] +/Pg 16 0 R +>> +endobj +233 0 obj +<< +/P 875 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [67] +/Pg 16 0 R +>> +endobj +234 0 obj +<< +/P 875 0 R +/S /Span +/Type /StructElem +/ActualText (something) +/K [68] +/Pg 16 0 R +>> +endobj +235 0 obj +<< +/P 875 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [69] +/Pg 16 0 R +>> +endobj +236 0 obj +<< +/P 875 0 R +/S /Span +/Type /StructElem +/ActualText (commonly ) +/K [70] +/Pg 16 0 R +>> +endobj +237 0 obj +<< +/P 875 0 R +/S /Span +/Type /StructElem +/ActualText (placed along side the profile or where it can be accessed through, its also ) +/K [71] +/Pg 16 0 R +>> +endobj +238 0 obj +<< +/P 875 0 R +/S /Span +/Type /StructElem +/ActualText +/K [72] +/Pg 16 0 R +>> +endobj +239 0 obj +<< +/P 875 0 R +/S /Span +/Type /StructElem +/ActualText (can assume its on) +/K [73] +/Pg 16 0 R +>> +endobj +240 0 obj +<< +/P 875 0 R +/S /Span +/Type /StructElem +/ActualText (e) +/K [74] +/Pg 16 0 R +>> +endobj +241 0 obj +<< +/P 875 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [75] +/Pg 16 0 R +>> +endobj +242 0 obj +<< +/P 875 0 R +/S /Span +/Type /StructElem +/ActualText (of the first options to be seen) +/K [76] +/Pg 16 0 R +>> +endobj +243 0 obj +<< +/P 875 0 R +/S /Span +/Type /StructElem +/ActualText (,) +/K [77] +/Pg 16 0 R +>> +endobj +244 0 obj +<< +/P 875 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [78] +/Pg 16 0 R +>> +endobj +245 0 obj +<< +/P 875 0 R +/S /Span +/Type /StructElem +/ActualText (so ) +/K [79] +/Pg 16 0 R +>> +endobj +246 0 obj +<< +/P 875 0 R +/S /Span +/Type /StructElem +/ActualText (its location ) +/K [80] +/Pg 16 0 R +>> +endobj +247 0 obj +<< +/P 875 0 R +/S /Span +/Type /StructElem +/ActualText (is immediately ret) +/K [81] +/Pg 16 0 R +>> +endobj +248 0 obj +<< +/P 875 0 R +/S /Span +/Type /StructElem +/ActualText (ained by the user.) +/K [82] +/Pg 16 0 R +>> +endobj +249 0 obj +<< +/P 875 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [83] +/Pg 16 0 R +>> +endobj +250 0 obj +<< +/P 877 0 R +/S /Span +/Type /StructElem +/ActualText (Then we) +/K [84] +/Pg 16 0 R +>> +endobj +251 0 obj +<< +/P 877 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [85] +/Pg 16 0 R +>> +endobj +252 0 obj +<< +/P 877 0 R +/S /Span +/Type /StructElem +/ActualText (arrive at the center) +/K [86] +/Pg 16 0 R +>> +endobj +253 0 obj +<< +/P 877 0 R +/S /Span +/Type /StructElem +/ActualText (, the bread and butter of every social network, the interactions between ) +/K [87] +/Pg 16 0 R +>> +endobj +254 0 obj +<< +/P 877 0 R +/S /Span +/Type /StructElem +/ActualText (everyone) +/K [88] +/Pg 16 0 R +>> +endobj +255 0 obj +<< +/P 877 0 R +/S /Span +/Type /StructElem +/ActualText (,) +/K [89] +/Pg 16 0 R +>> +endobj +256 0 obj +<< +/P 877 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [90] +/Pg 16 0 R +>> +endobj +257 0 obj +<< +/P 877 0 R +/S /Span +/Type /StructElem +/ActualText (and of course) +/K [91] +/Pg 16 0 R +>> +endobj +258 0 obj +<< +/P 877 0 R +/S /Span +/Type /StructElem +/ActualText (,) +/K [92] +/Pg 16 0 R +>> +endobj +259 0 obj +<< +/P 877 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [93] +/Pg 16 0 R +>> +endobj +260 0 obj +<< +/P 877 0 R +/S /Span +/Type /StructElem +/ActualText (they are displayed front and center.) +/K [94] +/Pg 16 0 R +>> +endobj +261 0 obj +<< +/P 877 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [95] +/Pg 16 0 R +>> +endobj +262 0 obj +<< +/P 878 0 R +/S /Span +/Type /StructElem +/ActualText (At the right we have popular posts as well as trends) +/K [96] +/Pg 16 0 R +>> +endobj +263 0 obj +<< +/P 878 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [97] +/Pg 16 0 R +>> +endobj +264 0 obj +<< +/P 878 0 R +/S /Span +/Type /StructElem +/ActualText +/K [98] +/Pg 16 0 R +>> +endobj +265 0 obj +<< +/P 878 0 R +/S /Span +/Type /StructElem +/ActualText (tant to the user those that he ) +/K [99] +/Pg 16 0 R +>> +endobj +266 0 obj +<< +/P 878 0 R +/S /Span +/Type /StructElem +/ActualText +/K [100] +/Pg 16 0 R +>> +endobj +267 0 obj +<< +/P 878 0 R +/S /Span +/Type /StructElem +/ActualText (the right, it should also be separated.) +/K [101] +/Pg 16 0 R +>> +endobj +268 0 obj +<< +/P 878 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [102] +/Pg 16 0 R +>> +endobj +269 0 obj +<< +/P 879 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [103] +/Pg 16 0 R +>> +endobj +270 0 obj +<< +/P 880 0 R +/S /Span +/Type /StructElem +/Pg 16 0 R +/K 104 +>> +endobj +271 0 obj +<< +/P 880 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [105] +/Pg 16 0 R +>> +endobj +272 0 obj +<< +/P 881 0 R +/S /Span +/Type /StructElem +/ActualText (Colour) +/K [106] +/Pg 16 0 R +>> +endobj +273 0 obj +<< +/P 881 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [107] +/Pg 16 0 R +>> +endobj +274 0 obj +<< +/P 881 0 R +/S /Span +/Type /StructElem +/ActualText (is a very powerful tool, more so in ) +/K [108] +/Pg 16 0 R +>> +endobj +275 0 obj +<< +/P 881 0 R +/S /Span +/Type /StructElem +/ActualText (fact in suc) +/K [109] +/Pg 16 0 R +>> +endobj +276 0 obj +<< +/P 881 0 R +/S /Span +/Type /StructElem +/ActualText (h) +/K [110] +/Pg 16 0 R +>> +endobj +277 0 obj +<< +/P 881 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [111] +/Pg 16 0 R +>> +endobj +278 0 obj +<< +/P 881 0 R +/S /Span +/Type /StructElem +/ActualText (a visual paradigm such as ) +/K [112] +/Pg 16 0 R +>> +endobj +279 0 obj +<< +/P 881 0 R +/S /Span +/Type /StructElem +/ActualText (web design) +/K [113] +/Pg 16 0 R +>> +endobj +280 0 obj +<< +/P 881 0 R +/S /Span +/Type /StructElem +/ActualText (, with careful ) +/K [114] +/Pg 16 0 R +>> +endobj +281 0 obj +<< +/P 881 0 R +/S /Span +/Type /StructElem +/ActualText (selection of ) +/K [115] +/Pg 16 0 R +>> +endobj +282 0 obj +<< +/P 881 0 R +/S /Span +/Type /StructElem +/ActualText (colours) +/K [116] +/Pg 16 0 R +>> +endobj +283 0 obj +<< +/P 881 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [117] +/Pg 16 0 R +>> +endobj +284 0 obj +<< +/P 881 0 R +/S /Span +/Type /StructElem +/ActualText (the user can perhaps) +/K [118] +/Pg 16 0 R +>> +endobj +285 0 obj +<< +/P 881 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [119] +/Pg 16 0 R +>> +endobj +286 0 obj +<< +/P 881 0 R +/S /Span +/Type /StructElem +/ActualText (be ) +/K [120] +/Pg 16 0 R +>> +endobj +287 0 obj +<< +/P 881 0 R +/S /Span +/Type /StructElem +/ActualText (unconsciously manipulated to stay in that web page for longer ) +/K [121] +/Pg 16 0 R +>> +endobj +288 0 obj +<< +/P 881 0 R +/S /Span +/Type /StructElem +/ActualText (or) +/K [122] +/Pg 16 0 R +>> +endobj +289 0 obj +<< +/P 881 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [123] +/Pg 16 0 R +>> +endobj +290 0 obj +<< +/P 881 0 R +/S /Span +/Type /StructElem +/ActualText (think of load times to be quicker) +/K [124] +/Pg 16 0 R +>> +endobj +291 0 obj +<< +/P 881 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [125] +/Pg 16 0 R +>> +endobj +292 0 obj +<< +/P 881 0 R +/S /Span +/Type /StructElem +/ActualText (even.) +/K [126] +/Pg 16 0 R +>> +endobj +293 0 obj +<< +/P 881 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [127] +/Pg 16 0 R +>> +endobj +294 0 obj +<< +/P 882 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [128] +/Pg 16 0 R +>> +endobj +295 0 obj +<< +/P 883 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [129] +/Pg 16 0 R +>> +endobj +296 0 obj +<< +/P 24 0 R +/S /Figure +/Alt (A screenshot of a cell phone\n\nDescription automatically generated) +/Type /StructElem +/K [130] +/Pg 16 0 R +>> +endobj +297 0 obj +<< +/P 871 0 R +/S /Figure +/Type /StructElem +/K [131] +/Pg 16 0 R +>> +endobj +298 0 obj +<< +/P 966 0 R +/S /Span +/Type /StructElem +/ActualText (Figure ) +/K [132] +/Pg 16 0 R +>> +endobj +299 0 obj +<< +/P 966 0 R +/S /Span +/Type /StructElem +/ActualText (1) +/K [133] +/Pg 16 0 R +>> +endobj +300 0 obj +<< +/P 966 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [134] +/Pg 16 0 R +>> +endobj +301 0 obj +<< +/P 966 0 R +/S /Span +/Type /StructElem +/ActualText (-) +/K [135] +/Pg 16 0 R +>> +endobj +302 0 obj +<< +/P 966 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [136] +/Pg 16 0 R +>> +endobj +303 0 obj +<< +/P 966 0 R +/S /Span +/Type /StructElem +/ActualText (Top of the ) +/K [137] +/Pg 16 0 R +>> +endobj +304 0 obj +<< +/P 966 0 R +/S /Span +/Type /StructElem +/ActualText (Home Timeline) +/K [138] +/Pg 16 0 R +>> +endobj +305 0 obj +<< +/P 966 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [139] +/Pg 16 0 R +>> +endobj +306 0 obj +<< +/P 24 0 R +/S /Figure +/Alt (A screenshot of a cell phone\n\nDescription automatically generated) +/Type /StructElem +/K [140] +/Pg 16 0 R +>> +endobj +307 0 obj +<< +/P 876 0 R +/S /Figure +/Type /StructElem +/K [141] +/Pg 16 0 R +>> +endobj +308 0 obj +<< +/P 967 0 R +/S /Span +/Type /StructElem +/ActualText (Figure ) +/K [142] +/Pg 16 0 R +>> +endobj +309 0 obj +<< +/P 967 0 R +/S /Span +/Type /StructElem +/ActualText (2) +/K [143] +/Pg 16 0 R +>> +endobj +310 0 obj +<< +/P 967 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [144] +/Pg 16 0 R +>> +endobj +311 0 obj +<< +/P 967 0 R +/S /Span +/Type /StructElem +/ActualText (-) +/K [145] +/Pg 16 0 R +>> +endobj +312 0 obj +<< +/P 967 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [146] +/Pg 16 0 R +>> +endobj +313 0 obj +<< +/P 967 0 R +/S /Span +/Type /StructElem +/ActualText (Profile container) +/K [147] +/Pg 16 0 R +>> +endobj +314 0 obj +<< +/P 967 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [148] +/Pg 16 0 R +>> +endobj +315 0 obj +<< +/P 884 0 R +/S /Span +/Type /StructElem +/ActualText +/K [0] +/Pg 17 0 R +>> +endobj +316 0 obj +<< +/P 884 0 R +/S /Span +/Type /StructElem +/ActualText (-) +/K [1] +/Pg 17 0 R +>> +endobj +317 0 obj +<< +/P 884 0 R +/S /Span +/Type /StructElem +/ActualText (induced relaxation has a direct effect on attitude, in addition to its indirect effect ) +/K [2] +/Pg 17 0 R +>> +endobj +318 0 obj +<< +/P 884 0 R +/S /Span +/Type /StructElem +/ActualText (through perceived quickness. This suggests that site) +/K [3] +/Pg 17 0 R +>> +endobj +319 0 obj +<< +/P 884 0 R +/S /Span +/Type /StructElem +/ActualText (-) +/K [4] +/Pg 17 0 R +>> +endobj +320 0 obj +<< +/P 884 0 R +/S /Span +/Type /StructElem +/ActualText (design characteristics such as color ) +/K [5] +/Pg 17 0 R +>> +endobj +321 0 obj +<< +/P 884 0 R +/S /Span +/Type /StructElem +/ActualText (have effects beyond their influence on perceived quickness.) +/K [6] +/Pg 17 0 R +>> +endobj +322 0 obj +<< +/P 884 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [7] +/Pg 17 0 R +>> +endobj +323 0 obj +<< +/P 884 0 R +/S /Span +/Type /StructElem +/ActualText +/K [8] +/Pg 17 0 R +>> +endobj +324 0 obj +<< +/P 884 0 R +/S /Span +/Type /StructElem +/ActualText (The results po) +/K [9] +/Pg 17 0 R +>> +endobj +325 0 obj +<< +/P 884 0 R +/S /Span +/Type /StructElem +/ActualText (int to the ) +/K [10] +/Pg 17 0 R +>> +endobj +326 0 obj +<< +/P 884 0 R +/S /Span +/Type /StructElem +/ActualText (potential effectiveness of a blue \(rather than red or yellow\) background screen color in ) +/K [11] +/Pg 17 0 R +>> +endobj +327 0 obj +<< +/P 884 0 R +/S /Span +/Type /StructElem +/ActualText +/K [12] +/Pg 17 0 R +>> +endobj +328 0 obj +<< +/P 884 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [13] +/Pg 17 0 R +>> +endobj +329 0 obj +<< +/P 884 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [14] +/Pg 17 0 R +>> +endobj +330 0 obj +<< +/P 885 0 R +/S /Span +/Type /StructElem +/ActualText (\(Gorn et al., 2004\)) +/K [15] +/Pg 17 0 R +>> +endobj +331 0 obj +<< +/P 885 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [16] +/Pg 17 0 R +>> +endobj +332 0 obj +<< +/P 886 0 R +/S /Span +/Type /StructElem +/ActualText (These results point out the need for calming ) +/K [17] +/Pg 17 0 R +>> +endobj +333 0 obj +<< +/P 886 0 R +/S /Span +/Type /StructElem +/ActualText (colours) +/K [18] +/Pg 17 0 R +>> +endobj +334 0 obj +<< +/P 886 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [19] +/Pg 17 0 R +>> +endobj +335 0 obj +<< +/P 886 0 R +/S /Span +/Type /StructElem +/ActualText (for a background, and such a ) +/K [20] +/Pg 17 0 R +>> +endobj +336 0 obj +<< +/P 886 0 R +/S /Span +/Type /StructElem +/ActualText (colour) +/K [21] +/Pg 17 0 R +>> +endobj +337 0 obj +<< +/P 886 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [22] +/Pg 17 0 R +>> +endobj +338 0 obj +<< +/P 886 0 R +/S /Span +/Type /StructElem +/ActualText (is a soothing ) +/K [23] +/Pg 17 0 R +>> +endobj +339 0 obj +<< +/P 886 0 R +/S /Span +/Type /StructElem +/ActualText (and relaxing blue. ) +/K [24] +/Pg 17 0 R +>> +endobj +340 0 obj +<< +/P 886 0 R +/S /Span +/Type /StructElem +/ActualText (This ) +/K [25] +/Pg 17 0 R +>> +endobj +341 0 obj +<< +/P 886 0 R +/S /Span +/Type /StructElem +/ActualText (seems also something) +/K [26] +/Pg 17 0 R +>> +endobj +342 0 obj +<< +/P 886 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [27] +/Pg 17 0 R +>> +endobj +343 0 obj +<< +/P 886 0 R +/S /Span +/Type /StructElem +/ActualText (unaffected by even culture differences, as seen by how ) +/K [28] +/Pg 17 0 R +>> +endobj +344 0 obj +<< +/P 886 0 R +/S /Span +/Type /StructElem +/ActualText (domi) +/K [29] +/Pg 17 0 R +>> +endobj +345 0 obj +<< +/P 886 0 R +/S /Span +/Type /StructElem +/ActualText (nating the use of blueish ) +/K [30] +/Pg 17 0 R +>> +endobj +346 0 obj +<< +/P 886 0 R +/S /Span +/Type /StructElem +/ActualText (colours) +/K [31] +/Pg 17 0 R +>> +endobj +347 0 obj +<< +/P 886 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [32] +/Pg 17 0 R +>> +endobj +348 0 obj +<< +/P 886 0 R +/S /Span +/Type /StructElem +/ActualText (is across the globe ) +/K [33] +/Pg 17 0 R +>> +endobj +349 0 obj +<< +/P 886 0 R +/S /Span +/Type /StructElem +/ActualText (\(Cyr and Trevor) +/K [34] +/Pg 17 0 R +>> +endobj +350 0 obj +<< +/P 886 0 R +/S /Span +/Type /StructElem +/ActualText (-) +/K [35] +/Pg 17 0 R +>> +endobj +351 0 obj +<< +/P 886 0 R +/S /Span +/Type /StructElem +/ActualText (Smith, 2004\)) +/K [36] +/Pg 17 0 R +>> +endobj +352 0 obj +<< +/P 886 0 R +/S /Span +/Type /StructElem +/ActualText (. ) +/K [37] +/Pg 17 0 R +>> +endobj +353 0 obj +<< +/P 886 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [38] +/Pg 17 0 R +>> +endobj +354 0 obj +<< +/P 887 0 R +/S /Span +/Type /StructElem +/ActualText (While usin) +/K [39] +/Pg 17 0 R +>> +endobj +355 0 obj +<< +/P 887 0 R +/S /Span +/Type /StructElem +/ActualText (g only HTML + CSS such findings are of great ) +/K [40] +/Pg 17 0 R +>> +endobj +356 0 obj +<< +/P 887 0 R +/S /Span +/Type /StructElem +/ActualText (interest,) +/K [41] +/Pg 17 0 R +>> +endobj +357 0 obj +<< +/P 887 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [42] +/Pg 17 0 R +>> +endobj +358 0 obj +<< +/P 887 0 R +/S /Span +/Type /StructElem +/ActualText (so the user perceives each load of a new ) +/K [43] +/Pg 17 0 R +>> +endobj +359 0 obj +<< +/P 887 0 R +/S /Span +/Type /StructElem +/ActualText (page to be faster) +/K [44] +/Pg 17 0 R +>> +endobj +360 0 obj +<< +/P 887 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [45] +/Pg 17 0 R +>> +endobj +361 0 obj +<< +/P 887 0 R +/S /Span +/Type /StructElem +/ActualText (as well) +/K [46] +/Pg 17 0 R +>> +endobj +362 0 obj +<< +/P 887 0 R +/S /Span +/Type /StructElem +/ActualText (.) +/K [47] +/Pg 17 0 R +>> +endobj +363 0 obj +<< +/P 887 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [48] +/Pg 17 0 R +>> +endobj +364 0 obj +<< +/P 887 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [49] +/Pg 17 0 R +>> +endobj +365 0 obj +<< +/P 888 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [50] +/Pg 17 0 R +>> +endobj +366 0 obj +<< +/P 889 0 R +/S /Span +/Type /StructElem +/ActualText (As such, both light and dark default themes are blueish in ) +/K [51] +/Pg 17 0 R +>> +endobj +367 0 obj +<< +/P 889 0 R +/S /Span +/Type /StructElem +/ActualText (colour) +/K [52] +/Pg 17 0 R +>> +endobj +368 0 obj +<< +/P 889 0 R +/S /Span +/Type /StructElem +/ActualText (:) +/K [53] +/Pg 17 0 R +>> +endobj +369 0 obj +<< +/P 889 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [54] +/Pg 17 0 R +>> +endobj +370 0 obj +<< +/P 891 0 R +/S /Span +/Type /StructElem +/Pg 17 0 R +/K 55 +>> +endobj +371 0 obj +<< +/P 891 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [56] +/Pg 17 0 R +>> +endobj +372 0 obj +<< +/P 892 0 R +/S /Span +/Type /StructElem +/ActualText +/K [57] +/Pg 17 0 R +>> +endobj +373 0 obj +<< +/P 892 0 R +/S /Span +/Type /StructElem +/ActualText +/K [58] +/Pg 17 0 R +>> +endobj +374 0 obj +<< +/P 892 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [59] +/Pg 17 0 R +>> +endobj +375 0 obj +<< +/P 893 0 R +/S /Span +/Type /StructElem +/ActualText (Tobias Frere) +/K [60] +/Pg 17 0 R +>> +endobj +376 0 obj +<< +/P 893 0 R +/S /Span +/Type /StructElem +/ActualText (-) +/K [61] +/Pg 17 0 R +>> +endobj +377 0 obj +<< +/P 893 0 R +/S /Span +/Type /StructElem +/ActualText (Jones) +/K [62] +/Pg 17 0 R +>> +endobj +378 0 obj +<< +/P 893 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [63] +/Pg 17 0 R +>> +endobj +379 0 obj +<< +/P 893 0 R +/S /Span +/Type /StructElem +/ActualText (\(cited by Covert, 2014\)) +/K [64] +/Pg 17 0 R +>> +endobj +380 0 obj +<< +/P 893 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [65] +/Pg 17 0 R +>> +endobj +381 0 obj +<< +/P 894 0 R +/S /Span +/Type /StructElem +/ActualText (The) +/K [66] +/Pg 17 0 R +>> +endobj +382 0 obj +<< +/P 894 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [67] +/Pg 17 0 R +>> +endobj +383 0 obj +<< +/P 894 0 R +/S /Span +/Type /StructElem +/ActualText (best) +/K [68] +/Pg 17 0 R +>> +endobj +384 0 obj +<< +/P 894 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [69] +/Pg 17 0 R +>> +endobj +385 0 obj +<< +/P 894 0 R +/S /Span +/Type /StructElem +/ActualText (UI typeface goes ) +/K [70] +/Pg 17 0 R +>> +endobj +386 0 obj +<< +/P 894 0 R +/S /Span +/Type /StructElem +/ActualText (unnoticed;) +/K [71] +/Pg 17 0 R +>> +endobj +387 0 obj +<< +/P 894 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [72] +/Pg 17 0 R +>> +endobj +388 0 obj +<< +/P 894 0 R +/S /Span +/Type /StructElem +/ActualText +/K [73] +/Pg 17 0 R +>> +endobj +389 0 obj +<< +/P 894 0 R +/S /Span +/Type /StructElem +/ActualText (to their) +/K [74] +/Pg 17 0 R +>> +endobj +390 0 obj +<< +/P 894 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [75] +/Pg 17 0 R +>> +endobj +391 0 obj +<< +/P 894 0 R +/S /Span +/Type /StructElem +/ActualText (focus on) +/K [76] +/Pg 17 0 R +>> +endobj +392 0 obj +<< +/P 894 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [77] +/Pg 17 0 R +>> +endobj +393 0 obj +<< +/P 894 0 R +/S /Span +/Type /StructElem +/ActualText (clarity.) +/K [78] +/Pg 17 0 R +>> +endobj +394 0 obj +<< +/P 894 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [79] +/Pg 17 0 R +>> +endobj +395 0 obj +<< +/P 894 0 R +/S /Span +/Type /StructElem +/ActualText +/K [80] +/Pg 17 0 R +>> +endobj +396 0 obj +<< +/P 894 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [81] +/Pg 17 0 R +>> +endobj +397 0 obj +<< +/P 894 0 R +/S /Span +/Type /StructElem +/ActualText (and because of this its choice is of u) +/K [82] +/Pg 17 0 R +>> +endobj +398 0 obj +<< +/P 894 0 R +/S /Span +/Type /StructElem +/ActualText (p) +/K [83] +/Pg 17 0 R +>> +endobj +399 0 obj +<< +/P 894 0 R +/S /Span +/Type /StructElem +/ActualText (most ) +/K [84] +/Pg 17 0 R +>> +endobj +400 0 obj +<< +/P 894 0 R +/S /Span +/Type /StructElem +/ActualText +/K [85] +/Pg 17 0 R +>> +endobj +401 0 obj +<< +/P 894 0 R +/S /Span +/Type /StructElem +/ActualText (-) +/K [86] +/Pg 17 0 R +>> +endobj +402 0 obj +<< +/P 894 0 R +/S /Span +/Type /StructElem +/ActualText (height ) +/K [87] +/Pg 17 0 R +>> +endobj +403 0 obj +<< +/P 894 0 R +/S /Span +/Type /StructElem +/ActualText (is very attractive, another key element is the distinction between glyphs, words like ) +/K [88] +/Pg 17 0 R +>> +endobj +404 0 obj +<< +/P 894 0 R +/S /Span +/Type /StructElem +/ActualText (millimetre) +/K [89] +/Pg 17 0 R +>> +endobj +405 0 obj +<< +/P 894 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [90] +/Pg 17 0 R +>> +endobj +406 0 obj +<< +/P 894 0 R +/S /Span +/Type /StructElem +/ActualText (migh) +/K [91] +/Pg 17 0 R +>> +endobj +407 0 obj +<< +/P 894 0 R +/S /Span +/Type /StructElem +/ActualText (t be hard ) +/K [92] +/Pg 17 0 R +>> +endobj +408 0 obj +<< +/P 894 0 R +/S /Span +/Type /StructElem +/ActualText (to decipher provided a poor choice of font for example) +/K [93] +/Pg 17 0 R +>> +endobj +409 0 obj +<< +/P 894 0 R +/S /Span +/Type /StructElem +/ActualText (.) +/K [94] +/Pg 17 0 R +>> +endobj +410 0 obj +<< +/P 894 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [95] +/Pg 17 0 R +>> +endobj +411 0 obj +<< +/P 895 0 R +/S /Span +/Type /StructElem +/ActualText +/K [96] +/Pg 17 0 R +>> +endobj +412 0 obj +<< +/P 895 0 R +/S /Span +/Type /StructElem +/ActualText +/K [97] +/Pg 17 0 R +>> +endobj +413 0 obj +<< +/P 895 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [98] +/Pg 17 0 R +>> +endobj +414 0 obj +<< +/P 895 0 R +/S /Span +/Type /StructElem +/ActualText (same as seen here, PT ) +/K [99] +/Pg 17 0 R +>> +endobj +415 0 obj +<< +/P 895 0 R +/S /Span +/Type /StructElem +/ActualText (Sans for larger elements and Open Sans for smaller text.) +/K [100] +/Pg 17 0 R +>> +endobj +416 0 obj +<< +/P 895 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [101] +/Pg 17 0 R +>> +endobj +417 0 obj +<< +/P 895 0 R +/S /Span +/Type /StructElem +/ActualText (PT Sans helps infuse some character while ) +/K [102] +/Pg 17 0 R +>> +endobj +418 0 obj +<< +/P 895 0 R +/S /Span +/Type /StructElem +/ActualText (providing great legibility and Open Sans with its large x) +/K [103] +/Pg 17 0 R +>> +endobj +419 0 obj +<< +/P 895 0 R +/S /Span +/Type /StructElem +/ActualText (-) +/K [104] +/Pg 17 0 R +>> +endobj +420 0 obj +<< +/P 895 0 R +/S /Span +/Type /StructElem +/ActualText (height provides clarity for smaller text. ) +/K [105] +/Pg 17 0 R +>> +endobj +421 0 obj +<< +/P 895 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [106] +/Pg 17 0 R +>> +endobj +422 0 obj +<< +/P 896 0 R +/S /Span +/Type /StructElem +/ActualText (Both fonts also use GPL ) +/K [107] +/Pg 17 0 R +>> +endobj +423 0 obj +<< +/P 896 0 R +/S /Span +/Type /StructElem +/ActualText (compatible licenses.) +/K [108] +/Pg 17 0 R +>> +endobj +424 0 obj +<< +/P 896 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [109] +/Pg 17 0 R +>> +endobj +425 0 obj +<< +/P 897 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [110] +/Pg 17 0 R +>> +endobj +426 0 obj +<< +/P 24 0 R +/S /Figure +/Alt (A screenshot of a cell phone\n\nDescription automatically generated) +/Type /StructElem +/K [111] +/Pg 17 0 R +>> +endobj +427 0 obj +<< +/P 24 0 R +/S /Figure +/Alt (A screenshot of a cell phone\n\nDescription automatically generated) +/Type /StructElem +/K [112] +/Pg 17 0 R +>> +endobj +428 0 obj +<< +/P 890 0 R +/S /Figure +/Type /StructElem +/K [113] +/Pg 17 0 R +>> +endobj +429 0 obj +<< +/P 968 0 R +/S /Span +/Type /StructElem +/ActualText (Figure ) +/K [114] +/Pg 17 0 R +>> +endobj +430 0 obj +<< +/P 968 0 R +/S /Span +/Type /StructElem +/ActualText (3) +/K [115] +/Pg 17 0 R +>> +endobj +431 0 obj +<< +/P 968 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [116] +/Pg 17 0 R +>> +endobj +432 0 obj +<< +/P 968 0 R +/S /Span +/Type /StructElem +/ActualText (-) +/K [117] +/Pg 17 0 R +>> +endobj +433 0 obj +<< +/P 968 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [118] +/Pg 17 0 R +>> +endobj +434 0 obj +<< +/P 968 0 R +/S /Span +/Type /StructElem +/ActualText (Dark and Light themes) +/K [119] +/Pg 17 0 R +>> +endobj +435 0 obj +<< +/P 968 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [120] +/Pg 17 0 R +>> +endobj +436 0 obj +<< +/P 898 0 R +/S /Span +/Type /StructElem +/ActualText +/K [0] +/Pg 18 0 R +>> +endobj +437 0 obj +<< +/P 898 0 R +/S /Span +/Type /StructElem +/ActualText (in text legibility) +/K [1] +/Pg 18 0 R +>> +endobj +438 0 obj +<< +/P 898 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [2] +/Pg 18 0 R +>> +endobj +439 0 obj +<< +/P 898 0 R +/S /Span +/Type /StructElem +/ActualText (and) +/K [3] +/Pg 18 0 R +>> +endobj +440 0 obj +<< +/P 898 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [4] +/Pg 18 0 R +>> +endobj +441 0 obj +<< +/P 898 0 R +/S /Span +/Type /StructElem +/ActualText (with ) +/K [5] +/Pg 18 0 R +>> +endobj +442 0 obj +<< +/P 898 0 R +/S /Span +/Type /StructElem +/ActualText (colours) +/K [6] +/Pg 18 0 R +>> +endobj +443 0 obj +<< +/P 898 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [7] +/Pg 18 0 R +>> +endobj +444 0 obj +<< +/P 898 0 R +/S /Span +/Type /StructElem +/ActualText (into the mix other issues arrive.) +/K [8] +/Pg 18 0 R +>> +endobj +445 0 obj +<< +/P 898 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [9] +/Pg 18 0 R +>> +endobj +446 0 obj +<< +/P 899 0 R +/S /Span +/Type /StructElem +/ActualText (Colour) +/K [10] +/Pg 18 0 R +>> +endobj +447 0 obj +<< +/P 899 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [11] +/Pg 18 0 R +>> +endobj +448 0 obj +<< +/P 899 0 R +/S /Span +/Type /StructElem +/ActualText (blindness was taken into consideration, Web Content Acce) +/K [12] +/Pg 18 0 R +>> +endobj +449 0 obj +<< +/P 899 0 R +/S /Span +/Type /StructElem +/ActualText (ssibility Guidelines were followed and ) +/K [13] +/Pg 18 0 R +>> +endobj +450 0 obj +<< +/P 899 0 R +/S /Span +/Type /StructElem +/ActualText (as such both light and dark themes pass all tests, both for ) +/K [14] +/Pg 18 0 R +>> +endobj +451 0 obj +<< +/P 899 0 R +/S /Span +/Type /StructElem +/ActualText (colour) +/K [15] +/Pg 18 0 R +>> +endobj +452 0 obj +<< +/P 899 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [16] +/Pg 18 0 R +>> +endobj +453 0 obj +<< +/P 899 0 R +/S /Span +/Type /StructElem +/ActualText (blindness and contrast in smaller fonts.) +/K [17] +/Pg 18 0 R +>> +endobj +454 0 obj +<< +/P 899 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [18] +/Pg 18 0 R +>> +endobj +455 0 obj +<< +/P 900 0 R +/S /Span +/Type /StructElem +/Pg 18 0 R +/K 19 +>> +endobj +456 0 obj +<< +/P 900 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [20] +/Pg 18 0 R +>> +endobj +457 0 obj +<< +/P 901 0 R +/S /Span +/Type /StructElem +/Pg 18 0 R +/K 21 +>> +endobj +458 0 obj +<< +/P 901 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [22] +/Pg 18 0 R +>> +endobj +459 0 obj +<< +/P 902 0 R +/S /Span +/Type /StructElem +/ActualText (In my interactions with the community it has come to my attention the need for ) +/K [23] +/Pg 18 0 R +>> +endobj +460 0 obj +<< +/P 902 0 R +/S /Span +/Type /StructElem +/ActualText (a ) +/K [24] +/Pg 18 0 R +>> +endobj +461 0 obj +<< +/P 902 0 R +/S /Span +/Type /StructElem +/ActualText (main menu ) +/K [25] +/Pg 18 0 R +>> +endobj +462 0 obj +<< +/P 902 0 R +/S /Span +/Type /StructElem +/ActualText (that) +/K [26] +/Pg 18 0 R +>> +endobj +463 0 obj +<< +/P 902 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [27] +/Pg 18 0 R +>> +endobj +464 0 obj +<< +/P 902 0 R +/S /Span +/Type /StructElem +/ActualText (would help communities ) +/K [28] +/Pg 18 0 R +>> +endobj +465 0 obj +<< +/P 902 0 R +/S /Span +/Type /StructElem +/ActualText (surf ) +/K [29] +/Pg 18 0 R +>> +endobj +466 0 obj +<< +/P 902 0 R +/S /Span +/Type /StructElem +/ActualText (between their main site and their ) +/K [30] +/Pg 18 0 R +>> +endobj +467 0 obj +<< +/P 902 0 R +/S /Span +/Type /StructElem +/ActualText (GNU social instance) +/K [31] +/Pg 18 0 R +>> +endobj +468 0 obj +<< +/P 902 0 R +/S /Span +/Type /StructElem +/ActualText (, it would help communities such as The Freaks Club have ) +/K [32] +/Pg 18 0 R +>> +endobj +469 0 obj +<< +/P 902 0 R +/S /Span +/Type /StructElem +/ActualText (everything tightly integrated) +/K [33] +/Pg 18 0 R +>> +endobj +470 0 obj +<< +/P 902 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [34] +/Pg 18 0 R +>> +endobj +471 0 obj +<< +/P 902 0 R +/S /Span +/Type /StructElem +/ActualText (for example) +/K [35] +/Pg 18 0 R +>> +endobj +472 0 obj +<< +/P 902 0 R +/S /Span +/Type /StructElem +/ActualText (. ) +/K [36] +/Pg 18 0 R +>> +endobj +473 0 obj +<< +/P 902 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [37] +/Pg 18 0 R +>> +endobj +474 0 obj +<< +/P 903 0 R +/S /Span +/Type /StructElem +/ActualText (This was ) +/K [38] +/Pg 18 0 R +>> +endobj +475 0 obj +<< +/P 903 0 R +/S /Span +/Type /StructElem +/ActualText (incorporated ) +/K [39] +/Pg 18 0 R +>> +endobj +476 0 obj +<< +/P 903 0 R +/S /Span +/Type /StructElem +/ActualText (into the design in the form of a drop) +/K [40] +/Pg 18 0 R +>> +endobj +477 0 obj +<< +/P 903 0 R +/S /Span +/Type /StructElem +/ActualText (-) +/K [41] +/Pg 18 0 R +>> +endobj +478 0 obj +<< +/P 903 0 R +/S /Span +/Type /StructElem +/ActualText (down menu located ) +/K [42] +/Pg 18 0 R +>> +endobj +479 0 obj +<< +/P 903 0 R +/S /Span +/Type /StructElem +/ActualText (in the instances name, it shows an arrow ) +/K [43] +/Pg 18 0 R +>> +endobj +480 0 obj +<< +/P 903 0 R +/S /Span +/Type /StructElem +/ActualText (to better) +/K [44] +/Pg 18 0 R +>> +endobj +481 0 obj +<< +/P 903 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [45] +/Pg 18 0 R +>> +endobj +482 0 obj +<< +/P 903 0 R +/S /Span +/Type /StructElem +/ActualText (illustrate the user that there ) +/K [46] +/Pg 18 0 R +>> +endobj +483 0 obj +<< +/P 903 0 R +/S /Span +/Type /StructElem +/ActualText (more options available and while the reasoning behind ) +/K [47] +/Pg 18 0 R +>> +endobj +484 0 obj +<< +/P 903 0 R +/S /Span +/Type /StructElem +/ActualText (it ) +/K [48] +/Pg 18 0 R +>> +endobj +485 0 obj +<< +/P 903 0 R +/S /Span +/Type /StructElem +/ActualText (was as seen above) +/K [49] +/Pg 18 0 R +>> +endobj +486 0 obj +<< +/P 903 0 R +/S /Span +/Type /StructElem +/ActualText (,) +/K [50] +/Pg 18 0 R +>> +endobj +487 0 obj +<< +/P 903 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [51] +/Pg 18 0 R +>> +endobj +488 0 obj +<< +/P 903 0 R +/S /Span +/Type /StructElem +/ActualText (it ) +/K [52] +/Pg 18 0 R +>> +endobj +489 0 obj +<< +/P 903 0 R +/S /Span +/Type /StructElem +/ActualText (could also be use) +/K [53] +/Pg 18 0 R +>> +endobj +490 0 obj +<< +/P 903 0 R +/S /Span +/Type /StructElem +/ActualText (d ) +/K [54] +/Pg 18 0 R +>> +endobj +491 0 obj +<< +/P 903 0 R +/S /Span +/Type /StructElem +/ActualText (for) +/K [55] +/Pg 18 0 R +>> +endobj +492 0 obj +<< +/P 903 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [56] +/Pg 18 0 R +>> +endobj +493 0 obj +<< +/P 903 0 R +/S /Span +/Type /StructElem +/ActualText (other purposes such as ) +/K [57] +/Pg 18 0 R +>> +endobj +494 0 obj +<< +/P 903 0 R +/S /Span +/Type /StructElem +/ActualText (navigating to other instances akin to ) +/K [58] +/Pg 18 0 R +>> +endobj +495 0 obj +<< +/P 903 0 R +/S /Span +/Type /StructElem +/ActualText (what would be seen in webrings for example.) +/K [59] +/Pg 18 0 R +>> +endobj +496 0 obj +<< +/P 903 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [60] +/Pg 18 0 R +>> +endobj +497 0 obj +<< +/P 905 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [61] +/Pg 18 0 R +>> +endobj +498 0 obj +<< +/P 906 0 R +/S /Span +/Type /StructElem +/Pg 18 0 R +/K 62 +>> +endobj +499 0 obj +<< +/P 906 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [63] +/Pg 18 0 R +>> +endobj +500 0 obj +<< +/P 907 0 R +/S /Span +/Type /StructElem +/ActualText (This) +/K [64] +/Pg 18 0 R +>> +endobj +501 0 obj +<< +/P 907 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [65] +/Pg 18 0 R +>> +endobj +502 0 obj +<< +/P 907 0 R +/S /Span +/Type /StructElem +/ActualText (page was re) +/K [66] +/Pg 18 0 R +>> +endobj +503 0 obj +<< +/P 907 0 R +/S /Span +/Type /StructElem +/ActualText (-) +/K [67] +/Pg 18 0 R +>> +endobj +504 0 obj +<< +/P 907 0 R +/S /Span +/Type /StructElem +/ActualText (organized from the ground up, ) +/K [68] +/Pg 18 0 R +>> +endobj +505 0 obj +<< +/P 907 0 R +/S /Span +/Type /StructElem +/ActualText +/K [69] +/Pg 18 0 R +>> +endobj +506 0 obj +<< +/P 907 0 R +/S /Span +/Type /StructElem +/ActualText (very well into the design) +/K [70] +/Pg 18 0 R +>> +endobj +507 0 obj +<< +/P 907 0 R +/S /Span +/Type /StructElem +/ActualText (. For ) +/K [71] +/Pg 18 0 R +>> +endobj +508 0 obj +<< +/P 907 0 R +/S /Span +/Type /StructElem +/ActualText +/K [72] +/Pg 18 0 R +>> +endobj +509 0 obj +<< +/P 907 0 R +/S /Span +/Type /StructElem +/ActualText (are located on the right pane and ) +/K [73] +/Pg 18 0 R +>> +endobj +510 0 obj +<< +/P 907 0 R +/S /Span +/Type /StructElem +/ActualText +/K [74] +/Pg 18 0 R +>> +endobj +511 0 obj +<< +/P 907 0 R +/S /Span +/Type /StructElem +/ActualText (as backup and restore exist, this also further proves the point related) +/K [75] +/Pg 18 0 R +>> +endobj +512 0 obj +<< +/P 907 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [76] +/Pg 18 0 R +>> +endobj +513 0 obj +<< +/P 907 0 R +/S /Span +/Type /StructElem +/ActualText (to mechanical memory seen ) +/K [77] +/Pg 18 0 R +>> +endobj +514 0 obj +<< +/P 907 0 R +/S /Span +/Type /StructElem +/ActualText (beforehand.) +/K [78] +/Pg 18 0 R +>> +endobj +515 0 obj +<< +/P 907 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [79] +/Pg 18 0 R +>> +endobj +516 0 obj +<< +/P 908 0 R +/S /Span +/Type /StructElem +/ActualText (And so, as an example I based myself in this design ) +/K [80] +/Pg 18 0 R +>> +endobj +517 0 obj +<< +/P 908 0 R +/S /Span +/Type /StructElem +/ActualText (mock) +/K [81] +/Pg 18 0 R +>> +endobj +518 0 obj +<< +/P 908 0 R +/S /Span +/Type /StructElem +/ActualText (-) +/K [82] +/Pg 18 0 R +>> +endobj +519 0 obj +<< +/P 908 0 R +/S /Span +/Type /StructElem +/ActualText (up) +/K [83] +/Pg 18 0 R +>> +endobj +520 0 obj +<< +/P 908 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [84] +/Pg 18 0 R +>> +endobj +521 0 obj +<< +/P 908 0 R +/S /Span +/Type /StructElem +/ActualText +/K [85] +/Pg 18 0 R +>> +endobj +522 0 obj +<< +/P 908 0 R +/S /Span +/Type /StructElem +/ActualText +/K [86] +/Pg 18 0 R +>> +endobj +523 0 obj +<< +/P 908 0 R +/S /Span +/Type /StructElem +/ActualText (demonstrates the need for) +/K [87] +/Pg 18 0 R +>> +endobj +524 0 obj +<< +/P 908 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [88] +/Pg 18 0 R +>> +endobj +525 0 obj +<< +/P 908 0 R +/S /Span +/Type /StructElem +/ActualText (more) +/K [89] +/Pg 18 0 R +>> +endobj +526 0 obj +<< +/P 908 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [90] +/Pg 18 0 R +>> +endobj +527 0 obj +<< +/P 908 0 R +/S /Span +/Type /StructElem +/ActualText (work into the plugins ) +/K [91] +/Pg 18 0 R +>> +endobj +528 0 obj +<< +/P 908 0 R +/S /Span +/Type /StructElem +/ActualText (templates as well in order to integrate them into the design.) +/K [92] +/Pg 18 0 R +>> +endobj +529 0 obj +<< +/P 908 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [93] +/Pg 18 0 R +>> +endobj +530 0 obj +<< +/P 909 0 R +/S /Span +/Type /StructElem +/ActualText +/K [94] +/Pg 18 0 R +>> +endobj +531 0 obj +<< +/P 909 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [95] +/Pg 18 0 R +>> +endobj +532 0 obj +<< +/P 969 0 R +/S /Span +/Type /StructElem +/Pg 18 0 R +/K 96 +>> +endobj +533 0 obj +<< +/P 969 0 R +/S /Span +/Type /StructElem +/ActualText (Profile) +/K [97] +/Pg 18 0 R +>> +endobj +534 0 obj +<< +/P 969 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [98] +/Pg 18 0 R +>> +endobj +535 0 obj +<< +/P 970 0 R +/S /Span +/Type /StructElem +/Pg 18 0 R +/K 99 +>> +endobj +536 0 obj +<< +/P 970 0 R +/S /Span +/Type /StructElem +/ActualText (Main) +/K [100] +/Pg 18 0 R +>> +endobj +537 0 obj +<< +/P 970 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [101] +/Pg 18 0 R +>> +endobj +538 0 obj +<< +/P 971 0 R +/S /Span +/Type /StructElem +/Pg 18 0 R +/K 102 +>> +endobj +539 0 obj +<< +/P 971 0 R +/S /Span +/Type /StructElem +/ActualText (Full Profile) +/K [103] +/Pg 18 0 R +>> +endobj +540 0 obj +<< +/P 971 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [104] +/Pg 18 0 R +>> +endobj +541 0 obj +<< +/P 972 0 R +/S /Span +/Type /StructElem +/Pg 18 0 R +/K 105 +>> +endobj +542 0 obj +<< +/P 972 0 R +/S /Span +/Type /StructElem +/ActualText (Avatar and Cover) +/K [106] +/Pg 18 0 R +>> +endobj +543 0 obj +<< +/P 972 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [107] +/Pg 18 0 R +>> +endobj +544 0 obj +<< +/P 973 0 R +/S /Span +/Type /StructElem +/Pg 18 0 R +/K 108 +>> +endobj +545 0 obj +<< +/P 973 0 R +/S /Span +/Type /StructElem +/ActualText (Account) +/K [109] +/Pg 18 0 R +>> +endobj +546 0 obj +<< +/P 973 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [110] +/Pg 18 0 R +>> +endobj +547 0 obj +<< +/P 974 0 R +/S /Span +/Type /StructElem +/Pg 18 0 R +/K 111 +>> +endobj +548 0 obj +<< +/P 974 0 R +/S /Span +/Type /StructElem +/ActualText (Email) +/K [112] +/Pg 18 0 R +>> +endobj +549 0 obj +<< +/P 974 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [113] +/Pg 18 0 R +>> +endobj +550 0 obj +<< +/P 975 0 R +/S /Span +/Type /StructElem +/Pg 18 0 R +/K 114 +>> +endobj +551 0 obj +<< +/P 975 0 R +/S /Span +/Type /StructElem +/ActualText (Password) +/K [115] +/Pg 18 0 R +>> +endobj +552 0 obj +<< +/P 975 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [116] +/Pg 18 0 R +>> +endobj +553 0 obj +<< +/P 976 0 R +/S /Span +/Type /StructElem +/Pg 18 0 R +/K 117 +>> +endobj +554 0 obj +<< +/P 976 0 R +/S /Span +/Type /StructElem +/ActualText (Backup and restore) +/K [118] +/Pg 18 0 R +>> +endobj +555 0 obj +<< +/P 976 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [119] +/Pg 18 0 R +>> +endobj +556 0 obj +<< +/P 977 0 R +/S /Span +/Type /StructElem +/Pg 18 0 R +/K 120 +>> +endobj +557 0 obj +<< +/P 977 0 R +/S /Span +/Type /StructElem +/ActualText (Miscellaneous) +/K [121] +/Pg 18 0 R +>> +endobj +558 0 obj +<< +/P 977 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [122] +/Pg 18 0 R +>> +endobj +559 0 obj +<< +/P 911 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [123] +/Pg 18 0 R +>> +endobj +560 0 obj +<< +/P 24 0 R +/S /Figure +/Alt (A screenshot of a cell phone\n\nDescription automatically generated) +/Type /StructElem +/K [124] +/Pg 18 0 R +>> +endobj +561 0 obj +<< +/P 904 0 R +/S /Figure +/Type /StructElem +/K [125] +/Pg 18 0 R +>> +endobj +562 0 obj +<< +/P 978 0 R +/S /Span +/Type /StructElem +/ActualText (Figure ) +/K [126] +/Pg 18 0 R +>> +endobj +563 0 obj +<< +/P 978 0 R +/S /Span +/Type /StructElem +/ActualText (4) +/K [127] +/Pg 18 0 R +>> +endobj +564 0 obj +<< +/P 978 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [128] +/Pg 18 0 R +>> +endobj +565 0 obj +<< +/P 978 0 R +/S /Span +/Type /StructElem +/ActualText (-) +/K [129] +/Pg 18 0 R +>> +endobj +566 0 obj +<< +/P 978 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [130] +/Pg 18 0 R +>> +endobj +567 0 obj +<< +/P 978 0 R +/S /Span +/Type /StructElem +/ActualText (Menu) +/K [131] +/Pg 18 0 R +>> +endobj +568 0 obj +<< +/P 978 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [132] +/Pg 18 0 R +>> +endobj +569 0 obj +<< +/P 24 0 R +/S /Figure +/Alt (A screenshot of a cell phone\n\nDescription automatically generated) +/Type /StructElem +/K [133] +/Pg 18 0 R +>> +endobj +570 0 obj +<< +/P 979 0 R +/S /Figure +/Type /StructElem +/K [134] +/Pg 18 0 R +>> +endobj +571 0 obj +<< +/P 980 0 R +/S /Span +/Type /StructElem +/ActualText (Figure ) +/K [135] +/Pg 18 0 R +>> +endobj +572 0 obj +<< +/P 980 0 R +/S /Span +/Type /StructElem +/ActualText (5) +/K [136] +/Pg 18 0 R +>> +endobj +573 0 obj +<< +/P 980 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [137] +/Pg 18 0 R +>> +endobj +574 0 obj +<< +/P 980 0 R +/S /Span +/Type /StructElem +/ActualText (-) +/K [138] +/Pg 18 0 R +>> +endobj +575 0 obj +<< +/P 980 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [139] +/Pg 18 0 R +>> +endobj +576 0 obj +<< +/P 980 0 R +/S /Span +/Type /StructElem +/ActualText (Profile settings) +/K [140] +/Pg 18 0 R +>> +endobj +577 0 obj +<< +/P 980 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [141] +/Pg 18 0 R +>> +endobj +578 0 obj +<< +/P 912 0 R +/S /Span +/Type /StructElem +/ActualText +/K [0] +/Pg 19 0 R +>> +endobj +579 0 obj +<< +/P 912 0 R +/S /Span +/Type /StructElem +/ActualText (the user further customize his profile.) +/K [1] +/Pg 19 0 R +>> +endobj +580 0 obj +<< +/P 912 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [2] +/Pg 19 0 R +>> +endobj +581 0 obj +<< +/P 913 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [3] +/Pg 19 0 R +>> +endobj +582 0 obj +<< +/P 914 0 R +/S /Span +/Type /StructElem +/Pg 19 0 R +/K 4 +>> +endobj +583 0 obj +<< +/P 914 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [5] +/Pg 19 0 R +>> +endobj +584 0 obj +<< +/P 915 0 R +/S /Span +/Type /StructElem +/ActualText (As it stands there are two subpages, an i) +/K [6] +/Pg 19 0 R +>> +endobj +585 0 obj +<< +/P 915 0 R +/S /Span +/Type /StructElem +/ActualText (nbox and outbox, which is a poor design decision and ) +/K [7] +/Pg 19 0 R +>> +endobj +586 0 obj +<< +/P 915 0 R +/S /Span +/Type /StructElem +/ActualText (further ) +/K [8] +/Pg 19 0 R +>> +endobj +587 0 obj +<< +/P 915 0 R +/S /Span +/Type /StructElem +/ActualText (confuses the user.) +/K [9] +/Pg 19 0 R +>> +endobj +588 0 obj +<< +/P 915 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [10] +/Pg 19 0 R +>> +endobj +589 0 obj +<< +/P 916 0 R +/S /Span +/Type /StructElem +/ActualText (With the messages divided like this a user would have to visit both inbox and outbox in order to know if ) +/K [11] +/Pg 19 0 R +>> +endobj +590 0 obj +<< +/P 916 0 R +/S /Span +/Type /StructElem +/ActualText +/K [12] +/Pg 19 0 R +>> +endobj +591 0 obj +<< +/P 916 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [13] +/Pg 19 0 R +>> +endobj +592 0 obj +<< +/P 916 0 R +/S /Span +/Type /StructElem +/ActualText (no division whatsoever between ) +/K [14] +/Pg 19 0 R +>> +endobj +593 0 obj +<< +/P 916 0 R +/S /Span +/Type /StructElem +/ActualText +/K [15] +/Pg 19 0 R +>> +endobj +594 0 obj +<< +/P 916 0 R +/S /Span +/Type /StructElem +/ActualText (if you would like to find a message from x user you would need to search yourself for it in the middle of ) +/K [16] +/Pg 19 0 R +>> +endobj +595 0 obj +<< +/P 916 0 R +/S /Span +/Type /StructElem +/ActualText (messages ) +/K [17] +/Pg 19 0 R +>> +endobj +596 0 obj +<< +/P 916 0 R +/S /Span +/Type /StructElem +/ActualText (from ) +/K [18] +/Pg 19 0 R +>> +endobj +597 0 obj +<< +/P 916 0 R +/S /Span +/Type /StructElem +/ActualText (n other users.) +/K [19] +/Pg 19 0 R +>> +endobj +598 0 obj +<< +/P 916 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [20] +/Pg 19 0 R +>> +endobj +599 0 obj +<< +/P 917 0 R +/S /Span +/Type /StructElem +/ActualText (The solution ) +/K [21] +/Pg 19 0 R +>> +endobj +600 0 obj +<< +/P 917 0 R +/S /Span +/Type /StructElem +/ActualText (regarding the design ) +/K [22] +/Pg 19 0 R +>> +endobj +601 0 obj +<< +/P 917 0 R +/S /Span +/Type /StructElem +/ActualText (was simple) +/K [23] +/Pg 19 0 R +>> +endobj +602 0 obj +<< +/P 917 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [24] +/Pg 19 0 R +>> +endobj +603 0 obj +<< +/P 917 0 R +/S /Span +/Type /StructElem +/ActualText (then) +/K [25] +/Pg 19 0 R +>> +endobj +604 0 obj +<< +/P 917 0 R +/S /Span +/Type /StructElem +/ActualText (, show on the left side who you are talking to and in ) +/K [26] +/Pg 19 0 R +>> +endobj +605 0 obj +<< +/P 917 0 R +/S /Span +/Type /StructElem +/ActualText (the ) +/K [27] +/Pg 19 0 R +>> +endobj +606 0 obj +<< +/P 917 0 R +/S /Span +/Type /StructElem +/ActualText (centre) +/K [28] +/Pg 19 0 R +>> +endobj +607 0 obj +<< +/P 917 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [29] +/Pg 19 0 R +>> +endobj +608 0 obj +<< +/P 917 0 R +/S /Span +/Type /StructElem +/ActualText +/K [30] +/Pg 19 0 R +>> +endobj +609 0 obj +<< +/P 917 0 R +/S /Span +/Type /StructElem +/ActualText (chat.) +/K [31] +/Pg 19 0 R +>> +endobj +610 0 obj +<< +/P 917 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [32] +/Pg 19 0 R +>> +endobj +611 0 obj +<< +/P 919 0 R +/S /Span +/Type /StructElem +/Pg 19 0 R +/K 33 +>> +endobj +612 0 obj +<< +/P 919 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [34] +/Pg 19 0 R +>> +endobj +613 0 obj +<< +/P 920 0 R +/S /Span +/Type /StructElem +/ActualText (With this interface I hope to give the community a more intuitive user experience, provide more options ) +/K [35] +/Pg 19 0 R +>> +endobj +614 0 obj +<< +/P 920 0 R +/S /Span +/Type /StructElem +/ActualText (to profile customization and integrate plu) +/K [36] +/Pg 19 0 R +>> +endobj +615 0 obj +<< +/P 920 0 R +/S /Span +/Type /StructElem +/ActualText (gins better into the UI. ) +/K [37] +/Pg 19 0 R +>> +endobj +616 0 obj +<< +/P 920 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [38] +/Pg 19 0 R +>> +endobj +617 0 obj +<< +/P 921 0 R +/S /Span +/Type /StructElem +/ActualText (Hopefully the careful use of elements, ) +/K [39] +/Pg 19 0 R +>> +endobj +618 0 obj +<< +/P 921 0 R +/S /Span +/Type /StructElem +/ActualText (colour) +/K [40] +/Pg 19 0 R +>> +endobj +619 0 obj +<< +/P 921 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [41] +/Pg 19 0 R +>> +endobj +620 0 obj +<< +/P 921 0 R +/S /Span +/Type /StructElem +/ActualText (and typography will also help the whole community grow ) +/K [42] +/Pg 19 0 R +>> +endobj +621 0 obj +<< +/P 921 0 R +/S /Span +/Type /StructElem +/ActualText (and ) +/K [43] +/Pg 19 0 R +>> +endobj +622 0 obj +<< +/P 921 0 R +/S /Span +/Type /StructElem +/ActualText (facilitate the use of social networks based on this communications platform to their full extent with ) +/K [44] +/Pg 19 0 R +>> +endobj +623 0 obj +<< +/P 921 0 R +/S /Span +/Type /StructElem +/ActualText (improvements in message) +/K [45] +/Pg 19 0 R +>> +endobj +624 0 obj +<< +/P 921 0 R +/S /Span +/Type /StructElem +/ActualText +/K [46] +/Pg 19 0 R +>> +endobj +625 0 obj +<< +/P 921 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [47] +/Pg 19 0 R +>> +endobj +626 0 obj +<< +/P 24 0 R +/S /Figure +/Alt (A screenshot of a cell phone\n\nDescription automatically generated) +/Type /StructElem +/K [48] +/Pg 19 0 R +>> +endobj +627 0 obj +<< +/P 918 0 R +/S /Figure +/Type /StructElem +/K [49] +/Pg 19 0 R +>> +endobj +628 0 obj +<< +/P 981 0 R +/S /Span +/Type /StructElem +/ActualText (Figure ) +/K [50] +/Pg 19 0 R +>> +endobj +629 0 obj +<< +/P 981 0 R +/S /Span +/Type /StructElem +/ActualText (6) +/K [51] +/Pg 19 0 R +>> +endobj +630 0 obj +<< +/P 981 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [52] +/Pg 19 0 R +>> +endobj +631 0 obj +<< +/P 981 0 R +/S /Span +/Type /StructElem +/ActualText (-) +/K [53] +/Pg 19 0 R +>> +endobj +632 0 obj +<< +/P 981 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [54] +/Pg 19 0 R +>> +endobj +633 0 obj +<< +/P 981 0 R +/S /Span +/Type /StructElem +/ActualText (Messages page) +/K [55] +/Pg 19 0 R +>> +endobj +634 0 obj +<< +/P 981 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [56] +/Pg 19 0 R +>> +endobj +635 0 obj +<< +/P 922 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 0 +>> +endobj +636 0 obj +<< +/P 922 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [1] +/Pg 20 0 R +>> +endobj +637 0 obj +<< +/P 923 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 2 +>> +endobj +638 0 obj +<< +/P 923 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [3] +/Pg 20 0 R +>> +endobj +639 0 obj +<< +/P 982 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 4 +>> +endobj +640 0 obj +<< +/P 982 0 R +/S /Span +/Type /StructElem +/ActualText (Community bonding) +/K [5] +/Pg 20 0 R +>> +endobj +641 0 obj +<< +/P 982 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [6] +/Pg 20 0 R +>> +endobj +642 0 obj +<< +/P 983 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 7 +>> +endobj +643 0 obj +<< +/P 983 0 R +/S /Span +/Type /StructElem +/ActualText (Familiarize with PHP, Symfony and Twig) +/K [8] +/Pg 20 0 R +>> +endobj +644 0 obj +<< +/P 983 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [9] +/Pg 20 0 R +>> +endobj +645 0 obj +<< +/P 984 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 10 +>> +endobj +646 0 obj +<< +/P 984 0 R +/S /Span +/Type /StructElem +/ActualText (Familiarize with the documentation) +/K [11] +/Pg 20 0 R +>> +endobj +647 0 obj +<< +/P 984 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [12] +/Pg 20 0 R +>> +endobj +648 0 obj +<< +/P 985 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 13 +>> +endobj +649 0 obj +<< +/P 985 0 R +/S /Span +/Type /StructElem +/ActualText (Familiarize with the code) +/K [14] +/Pg 20 0 R +>> +endobj +650 0 obj +<< +/P 985 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [15] +/Pg 20 0 R +>> +endobj +651 0 obj +<< +/P 986 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 16 +>> +endobj +652 0 obj +<< +/P 986 0 R +/S /Span +/Type /StructElem +/ActualText (Plugins) +/K [17] +/Pg 20 0 R +>> +endobj +653 0 obj +<< +/P 986 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [18] +/Pg 20 0 R +>> +endobj +654 0 obj +<< +/P 987 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 19 +>> +endobj +655 0 obj +<< +/P 987 0 R +/S /Span +/Type /StructElem +/ActualText (Core) +/K [20] +/Pg 20 0 R +>> +endobj +656 0 obj +<< +/P 987 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [21] +/Pg 20 0 R +>> +endobj +657 0 obj +<< +/P 988 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 22 +>> +endobj +658 0 obj +<< +/P 988 0 R +/S /Span +/Type /StructElem +/ActualText (Polish and ) +/K [23] +/Pg 20 0 R +>> +endobj +659 0 obj +<< +/P 988 0 R +/S /Span +/Type /StructElem +/ActualText (improve existing design mock) +/K [24] +/Pg 20 0 R +>> +endobj +660 0 obj +<< +/P 988 0 R +/S /Span +/Type /StructElem +/ActualText (-) +/K [25] +/Pg 20 0 R +>> +endobj +661 0 obj +<< +/P 988 0 R +/S /Span +/Type /StructElem +/ActualText (ups) +/K [26] +/Pg 20 0 R +>> +endobj +662 0 obj +<< +/P 988 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [27] +/Pg 20 0 R +>> +endobj +663 0 obj +<< +/P 925 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 28 +>> +endobj +664 0 obj +<< +/P 925 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [29] +/Pg 20 0 R +>> +endobj +665 0 obj +<< +/P 989 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 30 +>> +endobj +666 0 obj +<< +/P 989 0 R +/S /Span +/Type /StructElem +/ActualText (Develop core templates) +/K [31] +/Pg 20 0 R +>> +endobj +667 0 obj +<< +/P 989 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [32] +/Pg 20 0 R +>> +endobj +668 0 obj +<< +/P 990 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 33 +>> +endobj +669 0 obj +<< +/P 990 0 R +/S /Span +/Type /StructElem +/ActualText (Develop a cover plugin) +/K [34] +/Pg 20 0 R +>> +endobj +670 0 obj +<< +/P 990 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [35] +/Pg 20 0 R +>> +endobj +671 0 obj +<< +/P 991 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 36 +>> +endobj +672 0 obj +<< +/P 991 0 R +/S /Span +/Type /StructElem +/ActualText (Use existing plugins to further enhance user customization) +/K [37] +/Pg 20 0 R +>> +endobj +673 0 obj +<< +/P 991 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [38] +/Pg 20 0 R +>> +endobj +674 0 obj +<< +/P 992 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 39 +>> +endobj +675 0 obj +<< +/P 992 0 R +/S /Span +/Type /StructElem +/ActualText (OverwriteThemeBackground plugin rework) +/K [40] +/Pg 20 0 R +>> +endobj +676 0 obj +<< +/P 992 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [41] +/Pg 20 0 R +>> +endobj +677 0 obj +<< +/P 993 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 42 +>> +endobj +678 0 obj +<< +/P 993 0 R +/S /Span +/Type /StructElem +/ActualText (Adjust design decisions if needed and search for new) +/K [43] +/Pg 20 0 R +>> +endobj +679 0 obj +<< +/P 993 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [44] +/Pg 20 0 R +>> +endobj +680 0 obj +<< +/P 993 0 R +/S /Span +/Type /StructElem +/ActualText (solutions) +/K [45] +/Pg 20 0 R +>> +endobj +681 0 obj +<< +/P 993 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [46] +/Pg 20 0 R +>> +endobj +682 0 obj +<< +/P 994 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 47 +>> +endobj +683 0 obj +<< +/P 994 0 R +/S /Span +/Type /StructElem +/ActualText (Focus on ensuring a better mobile UX) +/K [48] +/Pg 20 0 R +>> +endobj +684 0 obj +<< +/P 994 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [49] +/Pg 20 0 R +>> +endobj +685 0 obj +<< +/P 927 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 50 +>> +endobj +686 0 obj +<< +/P 927 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [51] +/Pg 20 0 R +>> +endobj +687 0 obj +<< +/P 995 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 52 +>> +endobj +688 0 obj +<< +/P 995 0 R +/S /Span +/Type /StructElem +/ActualText (First Evaluation) +/K [53] +/Pg 20 0 R +>> +endobj +689 0 obj +<< +/P 995 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [54] +/Pg 20 0 R +>> +endobj +690 0 obj +<< +/P 929 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 55 +>> +endobj +691 0 obj +<< +/P 929 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [56] +/Pg 20 0 R +>> +endobj +692 0 obj +<< +/P 996 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 57 +>> +endobj +693 0 obj +<< +/P 996 0 R +/S /Span +/Type /StructElem +/ActualText (Work on plugins templates) +/K [58] +/Pg 20 0 R +>> +endobj +694 0 obj +<< +/P 996 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [59] +/Pg 20 0 R +>> +endobj +695 0 obj +<< +/P 997 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 60 +>> +endobj +696 0 obj +<< +/P 997 0 R +/S /Span +/Type /StructElem +/ActualText (Ensure tight integration with core templates) +/K [61] +/Pg 20 0 R +>> +endobj +697 0 obj +<< +/P 997 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [62] +/Pg 20 0 R +>> +endobj +698 0 obj +<< +/P 998 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 63 +>> +endobj +699 0 obj +<< +/P 998 0 R +/S /Span +/Type /StructElem +/ActualText (Search new ways to improve them) +/K [64] +/Pg 20 0 R +>> +endobj +700 0 obj +<< +/P 998 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [65] +/Pg 20 0 R +>> +endobj +701 0 obj +<< +/P 999 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 66 +>> +endobj +702 0 obj +<< +/P 999 0 R +/S /Span +/Type /StructElem +/ActualText (Take advantage of ) +/K [67] +/Pg 20 0 R +>> +endobj +703 0 obj +<< +/P 999 0 R +/S /Span +/Type /StructElem +/ActualText (underutilized functionality) +/K [68] +/Pg 20 0 R +>> +endobj +704 0 obj +<< +/P 999 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [69] +/Pg 20 0 R +>> +endobj +705 0 obj +<< +/P 1000 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 70 +>> +endobj +706 0 obj +<< +/P 1000 0 R +/S /Span +/Type /StructElem +/ActualText (Improve Happenings functionality and uses) +/K [71] +/Pg 20 0 R +>> +endobj +707 0 obj +<< +/P 1000 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [72] +/Pg 20 0 R +>> +endobj +708 0 obj +<< +/P 931 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 73 +>> +endobj +709 0 obj +<< +/P 931 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [74] +/Pg 20 0 R +>> +endobj +710 0 obj +<< +/P 1001 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 75 +>> +endobj +711 0 obj +<< +/P 1001 0 R +/S /Span +/Type /StructElem +/ActualText (Second Evaluation) +/K [76] +/Pg 20 0 R +>> +endobj +712 0 obj +<< +/P 1001 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [77] +/Pg 20 0 R +>> +endobj +713 0 obj +<< +/P 933 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 78 +>> +endobj +714 0 obj +<< +/P 933 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [79] +/Pg 20 0 R +>> +endobj +715 0 obj +<< +/P 1002 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 80 +>> +endobj +716 0 obj +<< +/P 1002 0 R +/S /Span +/Type /StructElem +/ActualText (Further work in plugin templates) +/K [81] +/Pg 20 0 R +>> +endobj +717 0 obj +<< +/P 1002 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [82] +/Pg 20 0 R +>> +endobj +718 0 obj +<< +/P 1003 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 83 +>> +endobj +719 0 obj +<< +/P 1003 0 R +/S /Span +/Type /StructElem +/ActualText (Polish interface) +/K [84] +/Pg 20 0 R +>> +endobj +720 0 obj +<< +/P 1003 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [85] +/Pg 20 0 R +>> +endobj +721 0 obj +<< +/P 1004 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 86 +>> +endobj +722 0 obj +<< +/P 1004 0 R +/S /Span +/Type /StructElem +/ActualText (General Review) +/K [87] +/Pg 20 0 R +>> +endobj +723 0 obj +<< +/P 1004 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [88] +/Pg 20 0 R +>> +endobj +724 0 obj +<< +/P 935 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 89 +>> +endobj +725 0 obj +<< +/P 935 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [90] +/Pg 20 0 R +>> +endobj +726 0 obj +<< +/P 1005 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 91 +>> +endobj +727 0 obj +<< +/P 1005 0 R +/S /Span +/Type /StructElem +/ActualText (Final reports) +/K [92] +/Pg 20 0 R +>> +endobj +728 0 obj +<< +/P 1005 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [93] +/Pg 20 0 R +>> +endobj +729 0 obj +<< +/P 1006 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 94 +>> +endobj +730 0 obj +<< +/P 1006 0 R +/S /Span +/Type /StructElem +/ActualText (Final merge) +/K [95] +/Pg 20 0 R +>> +endobj +731 0 obj +<< +/P 1006 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [96] +/Pg 20 0 R +>> +endobj +732 0 obj +<< +/P 1007 0 R +/S /Span +/Type /StructElem +/Pg 20 0 R +/K 97 +>> +endobj +733 0 obj +<< +/P 1007 0 R +/S /Span +/Type /StructElem +/ActualText (Final) +/K [98] +/Pg 20 0 R +>> +endobj +734 0 obj +<< +/P 1007 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [99] +/Pg 20 0 R +>> +endobj +735 0 obj +<< +/P 1007 0 R +/S /Span +/Type /StructElem +/ActualText (submission and evaluation) +/K [100] +/Pg 20 0 R +>> +endobj +736 0 obj +<< +/P 1007 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [101] +/Pg 20 0 R +>> +endobj +737 0 obj +<< +/P 937 0 R +/S /Span +/Type /StructElem +/Pg 21 0 R +/K 0 +>> +endobj +738 0 obj +<< +/P 937 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [1] +/Pg 21 0 R +>> +endobj +739 0 obj +<< +/P 938 0 R +/S /Span +/Type /StructElem +/ActualText +/K [2] +/Pg 21 0 R +>> +endobj +740 0 obj +<< +/P 938 0 R +/S /Span +/Type /StructElem +/ActualText (. To add to this, I will ) +/K [3] +/Pg 21 0 R +>> +endobj +741 0 obj +<< +/P 938 0 R +/S /Span +/Type /StructElem +/ActualText (send update) +/K [4] +/Pg 21 0 R +>> +endobj +742 0 obj +<< +/P 938 0 R +/S /Span +/Type /StructElem +/ActualText (s) +/K [5] +/Pg 21 0 R +>> +endobj +743 0 obj +<< +/P 938 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [6] +/Pg 21 0 R +>> +endobj +744 0 obj +<< +/P 938 0 R +/S /Span +/Type /StructElem +/ActualText (regularly ) +/K [7] +/Pg 21 0 R +>> +endobj +745 0 obj +<< +/P 938 0 R +/S /Span +/Type /StructElem +/ActualText (at the end of each week to my mentors regarding the state of the art and possible) +/K [8] +/Pg 21 0 R +>> +endobj +746 0 obj +<< +/P 938 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [9] +/Pg 21 0 R +>> +endobj +747 0 obj +<< +/P 938 0 R +/S /Span +/Type /StructElem +/ActualText +/K [10] +/Pg 21 0 R +>> +endobj +748 0 obj +<< +/P 938 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [11] +/Pg 21 0 R +>> +endobj +749 0 obj +<< +/P 939 0 R +/S /Span +/Type /StructElem +/ActualText +/K [12] +/Pg 21 0 R +>> +endobj +750 0 obj +<< +/P 939 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [13] +/Pg 21 0 R +>> +endobj +751 0 obj +<< +/P 940 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [14] +/Pg 21 0 R +>> +endobj +752 0 obj +<< +/P 941 0 R +/S /Span +/Type /StructElem +/Pg 21 0 R +/K 15 +>> +endobj +753 0 obj +<< +/P 941 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [16] +/Pg 21 0 R +>> +endobj +754 0 obj +<< +/P 942 0 R +/S /Span +/Type /StructElem +/ActualText +/K [17] +/Pg 21 0 R +>> +endobj +755 0 obj +<< +/P 942 0 R +/S /Span +/Type /StructElem +/ActualText (-) +/K [18] +/Pg 21 0 R +>> +endobj +756 0 obj +<< +/P 942 0 R +/S /Span +/Type /StructElem +/ActualText (year undergrad ) +/K [19] +/Pg 21 0 R +>> +endobj +757 0 obj +<< +/P 942 0 R +/S /Span +/Type /StructElem +/ActualText +/K [20] +/Pg 21 0 R +>> +endobj +758 0 obj +<< +/P 942 0 R +/S /Span +/Type /StructElem +/ActualText (, at the ) +/K [21] +/Pg 21 0 R +>> +endobj +759 0 obj +<< +/P 942 0 R +/S /Span +/Type /StructElem +/ActualText (Faculty of ) +/K [22] +/Pg 21 0 R +>> +endobj +760 0 obj +<< +/P 942 0 R +/S /Span +/Type /StructElem +/ActualText (Sciences of the University of Porto. During my time here I was exposed to GNU social through my ) +/K [23] +/Pg 21 0 R +>> +endobj +761 0 obj +<< +/P 942 0 R +/S /Span +/Type /StructElem +/ActualText +/K [24] +/Pg 21 0 R +>> +endobj +762 0 obj +<< +/P 942 0 R +/S /Span +/Type /StructElem +/ActualText (, ) +/K [25] +/Pg 21 0 R +>> +endobj +763 0 obj +<< +/P 942 0 R +/S /Span +/Type /StructElem +/ActualText (with Google Summer of ) +/K [26] +/Pg 21 0 R +>> +endobj +764 0 obj +<< +/P 942 0 R +/S /Span +/Type /StructElem +/ActualText +/K [27] +/Pg 21 0 R +>> +endobj +765 0 obj +<< +/P 942 0 R +/S /Span +/Type /StructElem +/ActualText (do it) +/K [28] +/Pg 21 0 R +>> +endobj +766 0 obj +<< +/P 942 0 R +/S /Span +/Type /StructElem +/ActualText +/K [29] +/Pg 21 0 R +>> +endobj +767 0 obj +<< +/P 942 0 R +/S /Span +/Type /StructElem +/ActualText (.) +/K [30] +/Pg 21 0 R +>> +endobj +768 0 obj +<< +/P 942 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [31] +/Pg 21 0 R +>> +endobj +769 0 obj +<< +/P 943 0 R +/S /Span +/Type /StructElem +/ActualText (I have taken courses such as Human) +/K [32] +/Pg 21 0 R +>> +endobj +770 0 obj +<< +/P 943 0 R +/S /Span +/Type /StructElem +/ActualText (-) +/K [33] +/Pg 21 0 R +>> +endobj +771 0 obj +<< +/P 943 0 R +/S /Span +/Type /StructElem +/ActualText (Machine Interfaces ) +/K [34] +/Pg 21 0 R +>> +endobj +772 0 obj +<< +/P 943 0 R +/S /Span +/Type /StructElem +/ActualText (that helped me have a better understanding of ) +/K [35] +/Pg 21 0 R +>> +endobj +773 0 obj +<< +/P 943 0 R +/S /Span +/Type /StructElem +/ActualText (the challenges faced regarding an interface design and have participated in game jams such as Retro Ga) +/K [36] +/Pg 21 0 R +>> +endobj +774 0 obj +<< +/P 943 0 R +/S /Span +/Type /StructElem +/ActualText (me ) +/K [37] +/Pg 21 0 R +>> +endobj +775 0 obj +<< +/P 943 0 R +/S /Span +/Type /StructElem +/ActualText +/K [38] +/Pg 21 0 R +>> +endobj +776 0 obj +<< +/P 943 0 R +/S /Span +/Type /StructElem +/ActualText (UPorto) +/K [39] +/Pg 21 0 R +>> +endobj +777 0 obj +<< +/P 943 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [40] +/Pg 21 0 R +>> +endobj +778 0 obj +<< +/P 943 0 R +/S /Span +/Type /StructElem +/ActualText (last year) +/K [41] +/Pg 21 0 R +>> +endobj +779 0 obj +<< +/P 943 0 R +/S /Span +/Type /StructElem +/ActualText +/K [42] +/Pg 21 0 R +>> +endobj +780 0 obj +<< +/P 943 0 R +/S /Span +/Type /StructElem +/ActualText (game.) +/K [43] +/Pg 21 0 R +>> +endobj +781 0 obj +<< +/P 943 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [44] +/Pg 21 0 R +>> +endobj +782 0 obj +<< +/P 943 0 R +/S /Span +/Type /StructElem +/ActualText (During high school I was also asked to make a new school website, done with just HTML and CSS as ) +/K [45] +/Pg 21 0 R +>> +endobj +783 0 obj +<< +/P 943 0 R +/S /Span +/Type /StructElem +/ActualText (well.) +/K [46] +/Pg 21 0 R +>> +endobj +784 0 obj +<< +/P 943 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [47] +/Pg 21 0 R +>> +endobj +785 0 obj +<< +/P 944 0 R +/S /Span +/Type /StructElem +/ActualText (For this proposal) +/K [48] +/Pg 21 0 R +>> +endobj +786 0 obj +<< +/P 944 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [49] +/Pg 21 0 R +>> +endobj +787 0 obj +<< +/P 944 0 R +/S /Span +/Type /StructElem +/ActualText +/K [50] +/Pg 21 0 R +>> +endobj +788 0 obj +<< +/P 944 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [51] +/Pg 21 0 R +>> +endobj +789 0 obj +<< +/P 944 0 R +/S /Span +/Type /StructElem +/ActualText (for me to familiarize myself with PHP in the meantime and learn more ) +/K [52] +/Pg 21 0 R +>> +endobj +790 0 obj +<< +/P 944 0 R +/S /Span +/Type /StructElem +/ActualText (about Twig and Symfony as well.) +/K [53] +/Pg 21 0 R +>> +endobj +791 0 obj +<< +/P 944 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [54] +/Pg 21 0 R +>> +endobj +792 0 obj +<< +/P 944 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [55] +/Pg 21 0 R +>> +endobj +793 0 obj +<< +/P 945 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [56] +/Pg 21 0 R +>> +endobj +794 0 obj +<< +/P 946 0 R +/S /Span +/Type /StructElem +/Pg 21 0 R +/K 57 +>> +endobj +795 0 obj +<< +/P 946 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [58] +/Pg 21 0 R +>> +endobj +796 0 obj +<< +/P 947 0 R +/S /Span +/Type /StructElem +/ActualText (Covert, A. \(2014\) ) +/K [59] +/Pg 21 0 R +>> +endobj +797 0 obj +<< +/P 947 0 R +/S /Span +/Type /StructElem +/ActualText +/K [60] +/Pg 21 0 R +>> +endobj +798 0 obj +<< +/P 947 0 R +/S /Span +/Type /StructElem +/ActualText (, ) +/K [61] +/Pg 21 0 R +>> +endobj +799 0 obj +<< +/P 947 0 R +/S /Span +/Type /StructElem +/ActualText (Fast Company) +/K [62] +/Pg 21 0 R +>> +endobj +800 0 obj +<< +/P 947 0 R +/S /Span +/Type /StructElem +/ActualText (. Available at: ) +/K [63] +/Pg 21 0 R +>> +endobj +801 0 obj +<< +/P 947 0 R +/S /Span +/Type /StructElem +/ActualText (ht) +/K [64] +/Pg 21 0 R +>> +endobj +802 0 obj +<< +/P 947 0 R +/S /Span +/Type /StructElem +/ActualText (tps://www.fastcompany.com/3031432/why) +/K [65] +/Pg 21 0 R +>> +endobj +803 0 obj +<< +/P 947 0 R +/S /Span +/Type /StructElem +/ActualText (-) +/K [66] +/Pg 21 0 R +>> +endobj +804 0 obj +<< +/P 947 0 R +/S /Span +/Type /StructElem +/ActualText (apples) +/K [67] +/Pg 21 0 R +>> +endobj +805 0 obj +<< +/P 947 0 R +/S /Span +/Type /StructElem +/ActualText (-) +/K [68] +/Pg 21 0 R +>> +endobj +806 0 obj +<< +/P 947 0 R +/S /Span +/Type /StructElem +/ActualText (new) +/K [69] +/Pg 21 0 R +>> +endobj +807 0 obj +<< +/P 947 0 R +/S /Span +/Type /StructElem +/ActualText (-) +/K [70] +/Pg 21 0 R +>> +endobj +808 0 obj +<< +/P 947 0 R +/S /Span +/Type /StructElem +/ActualText (font) +/K [71] +/Pg 21 0 R +>> +endobj +809 0 obj +<< +/P 947 0 R +/S /Span +/Type /StructElem +/ActualText (-) +/K [72] +/Pg 21 0 R +>> +endobj +810 0 obj +<< +/P 947 0 R +/S /Span +/Type /StructElem +/ActualText (wont) +/K [73] +/Pg 21 0 R +>> +endobj +811 0 obj +<< +/P 947 0 R +/S /Span +/Type /StructElem +/ActualText (-) +/K [74] +/Pg 21 0 R +>> +endobj +812 0 obj +<< +/P 947 0 R +/S /Span +/Type /StructElem +/ActualText (work) +/K [75] +/Pg 21 0 R +>> +endobj +813 0 obj +<< +/P 947 0 R +/S /Span +/Type /StructElem +/ActualText (-) +/K [76] +/Pg 21 0 R +>> +endobj +814 0 obj +<< +/P 947 0 R +/S /Span +/Type /StructElem +/ActualText (on) +/K [77] +/Pg 21 0 R +>> +endobj +815 0 obj +<< +/P 947 0 R +/S /Span +/Type /StructElem +/ActualText (-) +/K [78] +/Pg 21 0 R +>> +endobj +816 0 obj +<< +/P 947 0 R +/S /Span +/Type /StructElem +/ActualText (your) +/K [79] +/Pg 21 0 R +>> +endobj +817 0 obj +<< +/P 947 0 R +/S /Span +/Type /StructElem +/ActualText (-) +/K [80] +/Pg 21 0 R +>> +endobj +818 0 obj +<< +/P 947 0 R +/S /Span +/Type /StructElem +/ActualText (desktop \(Accessed: 25 ) +/K [81] +/Pg 21 0 R +>> +endobj +819 0 obj +<< +/P 947 0 R +/S /Span +/Type /StructElem +/ActualText (March 2020\).) +/K [82] +/Pg 21 0 R +>> +endobj +820 0 obj +<< +/P 947 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [83] +/Pg 21 0 R +>> +endobj +821 0 obj +<< +/P 948 0 R +/S /Span +/Type /StructElem +/ActualText (Cyr, D. and Trevor) +/K [84] +/Pg 21 0 R +>> +endobj +822 0 obj +<< +/P 948 0 R +/S /Span +/Type /StructElem +/ActualText (-) +/K [85] +/Pg 21 0 R +>> +endobj +823 0 obj +<< +/P 948 0 R +/S /Span +/Type /StructElem +/ActualText +/K [86] +/Pg 21 0 R +>> +endobj +824 0 obj +<< +/P 948 0 R +/S /Span +/Type /StructElem +/ActualText (Japanese, and United States web site characterist) +/K [87] +/Pg 21 0 R +>> +endobj +825 0 obj +<< +/P 948 0 R +/S /Span +/Type /StructElem +/ActualText +/K [88] +/Pg 21 0 R +>> +endobj +826 0 obj +<< +/P 948 0 R +/S /Span +/Type /StructElem +/ActualText (Journal of the American Society for Information Science ) +/K [89] +/Pg 21 0 R +>> +endobj +827 0 obj +<< +/P 948 0 R +/S /Span +/Type /StructElem +/ActualText (and Technology) +/K [90] +/Pg 21 0 R +>> +endobj +828 0 obj +<< +/P 948 0 R +/S /Span +/Type /StructElem +/ActualText (, 55\(13\), pp. 1199) +/K [91] +/Pg 21 0 R +>> +endobj +829 0 obj +<< +/P 948 0 R +/S /Span +/Type /StructElem +/ActualText +/K [92] +/Pg 21 0 R +>> +endobj +830 0 obj +<< +/P 948 0 R +/S /Span +/Type /StructElem +/ActualText (1208. doi: 10.1002/asi.20075.) +/K [93] +/Pg 21 0 R +>> +endobj +831 0 obj +<< +/P 948 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [94] +/Pg 21 0 R +>> +endobj +832 0 obj +<< +/P 949 0 R +/S /Span +/Type /StructElem +/ActualText (Gorn, G. J. ) +/K [95] +/Pg 21 0 R +>> +endobj +833 0 obj +<< +/P 949 0 R +/S /Span +/Type /StructElem +/ActualText (et al.) +/K [96] +/Pg 21 0 R +>> +endobj +834 0 obj +<< +/P 949 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [97] +/Pg 21 0 R +>> +endobj +835 0 obj +<< +/P 949 0 R +/S /Span +/Type /StructElem +/ActualText +/K [98] +/Pg 21 0 R +>> +endobj +836 0 obj +<< +/P 949 0 R +/S /Span +/Type /StructElem +/ActualText (Journal of Marketing ) +/K [99] +/Pg 21 0 R +>> +endobj +837 0 obj +<< +/P 949 0 R +/S /Span +/Type /StructElem +/ActualText (Research) +/K [100] +/Pg 21 0 R +>> +endobj +838 0 obj +<< +/P 949 0 R +/S /Span +/Type /StructElem +/ActualText (, 41\(2\), pp) +/K [101] +/Pg 21 0 R +>> +endobj +839 0 obj +<< +/P 949 0 R +/S /Span +/Type /StructElem +/ActualText (. 215) +/K [102] +/Pg 21 0 R +>> +endobj +840 0 obj +<< +/P 949 0 R +/S /Span +/Type /StructElem +/ActualText +/K [103] +/Pg 21 0 R +>> +endobj +841 0 obj +<< +/P 949 0 R +/S /Span +/Type /StructElem +/ActualText (225. doi: 10.1509/jmkr.41.2.215.28668.) +/K [104] +/Pg 21 0 R +>> +endobj +842 0 obj +<< +/P 949 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [105] +/Pg 21 0 R +>> +endobj +843 0 obj +<< +/P 950 0 R +/S /Span +/Type /StructElem +/ActualText (Pang, X. ) +/K [106] +/Pg 21 0 R +>> +endobj +844 0 obj +<< +/P 950 0 R +/S /Span +/Type /StructElem +/ActualText (et al.) +/K [107] +/Pg 21 0 R +>> +endobj +845 0 obj +<< +/P 950 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [108] +/Pg 21 0 R +>> +endobj +846 0 obj +<< +/P 950 0 R +/S /Span +/Type /StructElem +/ActualText +/K [109] +/Pg 21 0 R +>> +endobj +847 0 obj +<< +/P 950 0 R +/S /Span +/Type /StructElem +/ActualText (ACM Transactions on Graphics) +/K [110] +/Pg 21 0 R +>> +endobj +848 0 obj +<< +/P 950 0 R +/S /Span +/Type /StructElem +/ActualText (, ) +/K [111] +/Pg 21 0 R +>> +endobj +849 0 obj +<< +/P 950 0 R +/S /Span +/Type /StructElem +/ActualText (35\(6\), pp. 1) +/K [112] +/Pg 21 0 R +>> +endobj +850 0 obj +<< +/P 950 0 R +/S /Span +/Type /StructElem +/ActualText +/K [113] +/Pg 21 0 R +>> +endobj +851 0 obj +<< +/P 950 0 R +/S /Span +/Type /StructElem +/ActualText (17. doi: 10.1145/2980179.2982422.) +/K [114] +/Pg 21 0 R +>> +endobj +852 0 obj +<< +/P 950 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [115] +/Pg 21 0 R +>> +endobj +853 0 obj +<< +/P 951 0 R +/S /Span +/Type /StructElem +/ActualText ( ) +/K [116] +/Pg 21 0 R +>> +endobj +854 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [57 0 R 58 0 R] +/Pg 15 0 R +>> +endobj +855 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [59 0 R 60 0 R] +/Pg 15 0 R +>> +endobj +856 0 obj +<< +/P 24 0 R +/S /H1 +/Type /StructElem +/K [61 0 R 62 0 R 63 0 R 64 0 R 65 0 R 66 0 R 67 0 R] +/Pg 15 0 R +>> +endobj +857 0 obj +<< +/P 24 0 R +/S /H1 +/Type /StructElem +/K [68 0 R 69 0 R 70 0 R 71 0 R 72 0 R 73 0 R 74 0 R] +/Pg 15 0 R +>> +endobj +858 0 obj +<< +/P 24 0 R +/S /H1 +/Type /StructElem +/K [75 0 R 76 0 R 77 0 R 78 0 R 79 0 R 80 0 R] +/Pg 15 0 R +>> +endobj +859 0 obj +<< +/P 24 0 R +/S /H1 +/Type /StructElem +/K [81 0 R 82 0 R 83 0 R 84 0 R 85 0 R 86 0 R 87 0 R 88 0 R 89 0 R] +/Pg 15 0 R +>> +endobj +860 0 obj +<< +/P 24 0 R +/S /H1 +/Type /StructElem +/K [90 0 R 91 0 R 92 0 R 93 0 R] +/Pg 15 0 R +>> +endobj +861 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [94 0 R 95 0 R] +/Pg 15 0 R +>> +endobj +862 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [96 0 R 97 0 R 98 0 R 99 0 R 100 0 R 101 0 R 102 0 R 103 0 R 104 0 R 105 0 R +106 0 R 107 0 R 108 0 R 109 0 R 110 0 R 111 0 R 112 0 R 113 0 R 114 0 R 115 0 R +116 0 R 117 0 R] +/Pg 15 0 R +>> +endobj +863 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [118 0 R 119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R] +/Pg 15 0 R +>> +endobj +864 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [126 0 R] +/Pg 15 0 R +>> +endobj +865 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [127 0 R 128 0 R] +/Pg 15 0 R +>> +endobj +866 0 obj +<< +/P 24 0 R +/S /H2 +/Type /StructElem +/K [129 0 R 130 0 R] +/Pg 15 0 R +>> +endobj +867 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [131 0 R 132 0 R 133 0 R] +/Pg 15 0 R +>> +endobj +868 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [134 0 R 135 0 R 136 0 R 137 0 R 138 0 R 139 0 R 140 0 R 141 0 R 142 0 R 143 0 R +144 0 R 145 0 R 146 0 R 147 0 R 148 0 R 149 0 R 150 0 R 151 0 R 152 0 R 153 0 R +154 0 R 155 0 R 156 0 R] +/Pg 15 0 R +>> +endobj +869 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [157 0 R 158 0 R 159 0 R 160 0 R 161 0 R 162 0 R 163 0 R 164 0 R 165 0 R] +/Pg 15 0 R +>> +endobj +870 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [166 0 R] +/Pg 16 0 R +>> +endobj +871 0 obj +<< +/P 24 0 R +/S /Textbox +/Type /StructElem +/K [966 0 R 297 0 R] +/Pg 16 0 R +>> +endobj +872 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [167 0 R 168 0 R 169 0 R 170 0 R 171 0 R 172 0 R 173 0 R 174 0 R 175 0 R 176 0 R +177 0 R 178 0 R 179 0 R 180 0 R 181 0 R 182 0 R 183 0 R 184 0 R 185 0 R 186 0 R +187 0 R 188 0 R 189 0 R 190 0 R 191 0 R 192 0 R 193 0 R] +/Pg 16 0 R +>> +endobj +873 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [194 0 R 195 0 R 196 0 R 197 0 R 198 0 R 199 0 R 200 0 R 201 0 R 202 0 R 203 0 R +204 0 R 205 0 R 206 0 R 207 0 R 208 0 R 209 0 R 210 0 R 211 0 R 212 0 R 213 0 R +214 0 R 215 0 R 216 0 R 217 0 R 218 0 R 219 0 R 220 0 R] +/Pg 16 0 R +>> +endobj +874 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [221 0 R] +/Pg 16 0 R +>> +endobj +875 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [222 0 R 223 0 R 224 0 R 225 0 R 226 0 R 227 0 R 228 0 R 229 0 R 230 0 R 231 0 R +232 0 R 233 0 R 234 0 R 235 0 R 236 0 R 237 0 R 238 0 R 239 0 R 240 0 R 241 0 R +242 0 R 243 0 R 244 0 R 245 0 R 246 0 R 247 0 R 248 0 R 249 0 R] +/Pg 16 0 R +>> +endobj +876 0 obj +<< +/P 24 0 R +/S /Textbox +/Type /StructElem +/K [967 0 R 307 0 R] +/Pg 16 0 R +>> +endobj +877 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [250 0 R 251 0 R 252 0 R 253 0 R 254 0 R 255 0 R 256 0 R 257 0 R 258 0 R 259 0 R +260 0 R 261 0 R] +/Pg 16 0 R +>> +endobj +878 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [262 0 R 263 0 R 264 0 R 265 0 R 266 0 R 267 0 R 268 0 R] +/Pg 16 0 R +>> +endobj +879 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [269 0 R] +/Pg 16 0 R +>> +endobj +880 0 obj +<< +/P 24 0 R +/S /H2 +/Type /StructElem +/K [270 0 R 271 0 R] +/Pg 16 0 R +>> +endobj +881 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [272 0 R 273 0 R 274 0 R 275 0 R 276 0 R 277 0 R 278 0 R 279 0 R 280 0 R 281 0 R +282 0 R 283 0 R 284 0 R 285 0 R 286 0 R 287 0 R 288 0 R 289 0 R 290 0 R 291 0 R +292 0 R 293 0 R] +/Pg 16 0 R +>> +endobj +882 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [294 0 R] +/Pg 16 0 R +>> +endobj +883 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [295 0 R] +/Pg 16 0 R +>> +endobj +884 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [315 0 R 316 0 R 317 0 R 318 0 R 319 0 R 320 0 R 321 0 R 322 0 R 323 0 R 324 0 R +325 0 R 326 0 R 327 0 R 328 0 R 329 0 R] +/Pg 17 0 R +>> +endobj +885 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [330 0 R 331 0 R] +/Pg 17 0 R +>> +endobj +886 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [332 0 R 333 0 R 334 0 R 335 0 R 336 0 R 337 0 R 338 0 R 339 0 R 340 0 R 341 0 R +342 0 R 343 0 R 344 0 R 345 0 R 346 0 R 347 0 R 348 0 R 349 0 R 350 0 R 351 0 R +352 0 R 353 0 R] +/Pg 17 0 R +>> +endobj +887 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [354 0 R 355 0 R 356 0 R 357 0 R 358 0 R 359 0 R 360 0 R 361 0 R 362 0 R 363 0 R +364 0 R] +/Pg 17 0 R +>> +endobj +888 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [365 0 R] +/Pg 17 0 R +>> +endobj +889 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [366 0 R 367 0 R 368 0 R 369 0 R] +/Pg 17 0 R +>> +endobj +890 0 obj +<< +/P 24 0 R +/S /Textbox +/Type /StructElem +/K [968 0 R 428 0 R] +/Pg 17 0 R +>> +endobj +891 0 obj +<< +/P 24 0 R +/S /H2 +/Type /StructElem +/K [370 0 R 371 0 R] +/Pg 17 0 R +>> +endobj +892 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [372 0 R 373 0 R 374 0 R] +/Pg 17 0 R +>> +endobj +893 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [375 0 R 376 0 R 377 0 R 378 0 R 379 0 R 380 0 R] +/Pg 17 0 R +>> +endobj +894 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [381 0 R 382 0 R 383 0 R 384 0 R 385 0 R 386 0 R 387 0 R 388 0 R 389 0 R 390 0 R +391 0 R 392 0 R 393 0 R 394 0 R 395 0 R 396 0 R 397 0 R 398 0 R 399 0 R 400 0 R +401 0 R 402 0 R 403 0 R 404 0 R 405 0 R 406 0 R 407 0 R 408 0 R 409 0 R 410 0 R] +/Pg 17 0 R +>> +endobj +895 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [411 0 R 412 0 R 413 0 R 414 0 R 415 0 R 416 0 R 417 0 R 418 0 R 419 0 R 420 0 R +421 0 R] +/Pg 17 0 R +>> +endobj +896 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [422 0 R 423 0 R 424 0 R] +/Pg 17 0 R +>> +endobj +897 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [425 0 R] +/Pg 17 0 R +>> +endobj +898 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [436 0 R 437 0 R 438 0 R 439 0 R 440 0 R 441 0 R 442 0 R 443 0 R 444 0 R 445 0 R] +/Pg 18 0 R +>> +endobj +899 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [446 0 R 447 0 R 448 0 R 449 0 R 450 0 R 451 0 R 452 0 R 453 0 R 454 0 R] +/Pg 18 0 R +>> +endobj +900 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [455 0 R 456 0 R] +/Pg 18 0 R +>> +endobj +901 0 obj +<< +/P 24 0 R +/S /H2 +/Type /StructElem +/K [457 0 R 458 0 R] +/Pg 18 0 R +>> +endobj +902 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [459 0 R 460 0 R 461 0 R 462 0 R 463 0 R 464 0 R 465 0 R 466 0 R 467 0 R 468 0 R +469 0 R 470 0 R 471 0 R 472 0 R 473 0 R] +/Pg 18 0 R +>> +endobj +903 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R +484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R +494 0 R 495 0 R 496 0 R] +/Pg 18 0 R +>> +endobj +904 0 obj +<< +/P 24 0 R +/S /Textbox +/Type /StructElem +/K [978 0 R 561 0 R] +/Pg 18 0 R +>> +endobj +905 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [497 0 R] +/Pg 18 0 R +>> +endobj +906 0 obj +<< +/P 24 0 R +/S /H2 +/Type /StructElem +/K [498 0 R 499 0 R] +/Pg 18 0 R +>> +endobj +907 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [500 0 R 501 0 R 502 0 R 503 0 R 504 0 R 505 0 R 506 0 R 507 0 R 508 0 R 509 0 R +510 0 R 511 0 R 512 0 R 513 0 R 514 0 R 515 0 R] +/Pg 18 0 R +>> +endobj +908 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [516 0 R 517 0 R 518 0 R 519 0 R 520 0 R 521 0 R 522 0 R 523 0 R 524 0 R 525 0 R +526 0 R 527 0 R 528 0 R 529 0 R] +/Pg 18 0 R +>> +endobj +909 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [530 0 R 531 0 R] +/Pg 18 0 R +>> +endobj +910 0 obj +<< +/P 24 0 R +/S /L +/A 1008 0 R +/Type /StructElem +/K [1009 0 R 1010 0 R 1011 0 R] +/Pg 18 0 R +>> +endobj +911 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [559 0 R] +/Pg 18 0 R +>> +endobj +912 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [578 0 R 579 0 R 580 0 R] +/Pg 19 0 R +>> +endobj +913 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [581 0 R] +/Pg 19 0 R +>> +endobj +914 0 obj +<< +/P 24 0 R +/S /H2 +/Type /StructElem +/K [582 0 R 583 0 R] +/Pg 19 0 R +>> +endobj +915 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [584 0 R 585 0 R 586 0 R 587 0 R 588 0 R] +/Pg 19 0 R +>> +endobj +916 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [589 0 R 590 0 R 591 0 R 592 0 R 593 0 R 594 0 R 595 0 R 596 0 R 597 0 R 598 0 R] +/Pg 19 0 R +>> +endobj +917 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [599 0 R 600 0 R 601 0 R 602 0 R 603 0 R 604 0 R 605 0 R 606 0 R 607 0 R 608 0 R +609 0 R 610 0 R] +/Pg 19 0 R +>> +endobj +918 0 obj +<< +/P 24 0 R +/S /Textbox +/Type /StructElem +/K [981 0 R 627 0 R] +/Pg 19 0 R +>> +endobj +919 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [611 0 R 612 0 R] +/Pg 19 0 R +>> +endobj +920 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [613 0 R 614 0 R 615 0 R 616 0 R] +/Pg 19 0 R +>> +endobj +921 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [617 0 R 618 0 R 619 0 R 620 0 R 621 0 R 622 0 R 623 0 R 624 0 R 625 0 R] +/Pg 19 0 R +>> +endobj +922 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [635 0 R 636 0 R] +/Pg 20 0 R +>> +endobj +923 0 obj +<< +/P 24 0 R +/S /H2 +/Type /StructElem +/K [637 0 R 638 0 R] +/Pg 20 0 R +>> +endobj +924 0 obj +<< +/P 24 0 R +/S /L +/A 1012 0 R +/Type /StructElem +/K [1013 0 R 1014 0 R 1015 0 R 1016 0 R 1017 0 R] +/Pg 20 0 R +>> +endobj +925 0 obj +<< +/P 24 0 R +/S /H2 +/Type /StructElem +/K [663 0 R 664 0 R] +/Pg 20 0 R +>> +endobj +926 0 obj +<< +/P 24 0 R +/S /L +/A 1018 0 R +/Type /StructElem +/K [1019 0 R 1020 0 R 1021 0 R] +/Pg 20 0 R +>> +endobj +927 0 obj +<< +/P 24 0 R +/S /H2 +/Type /StructElem +/K [685 0 R 686 0 R] +/Pg 20 0 R +>> +endobj +928 0 obj +<< +/P 24 0 R +/S /L +/A 1022 0 R +/Type /StructElem +/K [1023 0 R] +/Pg 20 0 R +>> +endobj +929 0 obj +<< +/P 24 0 R +/S /H2 +/Type /StructElem +/K [690 0 R 691 0 R] +/Pg 20 0 R +>> +endobj +930 0 obj +<< +/P 24 0 R +/S /L +/A 1024 0 R +/Type /StructElem +/K [1025 0 R 1026 0 R] +/Pg 20 0 R +>> +endobj +931 0 obj +<< +/P 24 0 R +/S /H2 +/Type /StructElem +/K [708 0 R 709 0 R] +/Pg 20 0 R +>> +endobj +932 0 obj +<< +/P 24 0 R +/S /L +/A 1027 0 R +/Type /StructElem +/K [1028 0 R] +/Pg 20 0 R +>> +endobj +933 0 obj +<< +/P 24 0 R +/S /H2 +/Type /StructElem +/K [713 0 R 714 0 R] +/Pg 20 0 R +>> +endobj +934 0 obj +<< +/P 24 0 R +/S /L +/A 1029 0 R +/Type /StructElem +/K [1030 0 R 1031 0 R 1032 0 R] +/Pg 20 0 R +>> +endobj +935 0 obj +<< +/P 24 0 R +/S /H2 +/Type /StructElem +/K [724 0 R 725 0 R] +/Pg 20 0 R +>> +endobj +936 0 obj +<< +/P 24 0 R +/S /L +/A 1033 0 R +/Type /StructElem +/K [1034 0 R 1035 0 R 1036 0 R] +/Pg 20 0 R +>> +endobj +937 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [737 0 R 738 0 R] +/Pg 21 0 R +>> +endobj +938 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [739 0 R 740 0 R 741 0 R 742 0 R 743 0 R 744 0 R 745 0 R 746 0 R 747 0 R 748 0 R] +/Pg 21 0 R +>> +endobj +939 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [749 0 R 750 0 R] +/Pg 21 0 R +>> +endobj +940 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [751 0 R] +/Pg 21 0 R +>> +endobj +941 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [752 0 R 753 0 R] +/Pg 21 0 R +>> +endobj +942 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [754 0 R 755 0 R 756 0 R 757 0 R 758 0 R 759 0 R 760 0 R 761 0 R 762 0 R 763 0 R +764 0 R 765 0 R 766 0 R 767 0 R 768 0 R] +/Pg 21 0 R +>> +endobj +943 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [769 0 R 770 0 R 771 0 R 772 0 R 773 0 R 774 0 R 775 0 R 776 0 R 777 0 R 778 0 R +779 0 R 780 0 R 781 0 R 782 0 R 783 0 R 784 0 R] +/Pg 21 0 R +>> +endobj +944 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [785 0 R 786 0 R 787 0 R 788 0 R 789 0 R 790 0 R 791 0 R 792 0 R] +/Pg 21 0 R +>> +endobj +945 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [793 0 R] +/Pg 21 0 R +>> +endobj +946 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [794 0 R 795 0 R] +/Pg 21 0 R +>> +endobj +947 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [796 0 R 797 0 R 798 0 R 799 0 R 800 0 R 801 0 R 802 0 R 803 0 R 804 0 R 805 0 R +806 0 R 807 0 R 808 0 R 809 0 R 810 0 R 811 0 R 812 0 R 813 0 R 814 0 R 815 0 R +816 0 R 817 0 R 818 0 R 819 0 R 820 0 R] +/Pg 21 0 R +>> +endobj +948 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [821 0 R 822 0 R 823 0 R 824 0 R 825 0 R 826 0 R 827 0 R 828 0 R 829 0 R 830 0 R +831 0 R] +/Pg 21 0 R +>> +endobj +949 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [832 0 R 833 0 R 834 0 R 835 0 R 836 0 R 837 0 R 838 0 R 839 0 R 840 0 R 841 0 R +842 0 R] +/Pg 21 0 R +>> +endobj +950 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [843 0 R 844 0 R 845 0 R 846 0 R 847 0 R 848 0 R 849 0 R 850 0 R 851 0 R 852 0 R] +/Pg 21 0 R +>> +endobj +951 0 obj +<< +/P 24 0 R +/S /P +/Type /StructElem +/K [853 0 R] +/Pg 21 0 R +>> +endobj +952 0 obj +<< +/D [15 0 R /FitH 747] +/S /GoTo +>> +endobj +953 0 obj +<< +/A 1037 0 R +/Count 3 +/First 1038 0 R +/Last 1039 0 R +/Next 1040 0 R +/Parent 4 0 R +/Prev 26 0 R +/Title (Design Principles) +>> +endobj +954 0 obj +<< +/D [21 0 R /FitH 834] +/S /GoTo +>> +endobj +955 0 obj +<< +/A 1041 0 R +/Next 28 0 R +/Parent 4 0 R +/Prev 1042 0 R +/Title (Communication) +>> +endobj +956 0 obj +<< +/BaseFont /BCDFEE+PTSans-Bold +/Subtype /CIDFontType2 +/Type /Font +/CIDToGIDMap /Identity +/DW 1000 +/CIDSystemInfo 1043 0 R +/FontDescriptor 1044 0 R +/W [0 [750] + 3 [253] + 15 [252 360] + 19 [567 567 567 567 567] + 26 [567] +28 [567] + 36 [605 591 559 647 522 508 609] + 45 [334] + 48 [800 657] + 51 [572 670 602 530 568 627] +68 [496 536 433 539 508 321 536 545 269] + 79 [294 805 545 537 540] + 85 [351 422 349 538 477 721] + 92 [478] + 543 [660] +] +>> +endobj +957 0 obj +<< +/Filter /FlateDecode +/Length 346 +>> +stream +xœ}RËnƒ0¼ó>¦‡Û@h$„EâЇJûÄ^R¤b,ãøûÚÞ¼šHµd¬]ÏÌ®—‰«z[«Þ’øÝŒ¢Kº^IÓx4ȽŠØŠÈ^ØS¾bhu;r3O†ZucT$þp—“53Yl万§(~3L¯dñU5.nŽZÿÀÊ•%‘Ð9¡—V¿¶8Жµt÷½—ŽsE|Î1ÃfÄ(aÒ­ÓªDu«$Åέ2%ïîO¬}'¾[ЉCSÊi@ŸòüŒºŠîŒQDW¥O2ä²<ÉYIü¾Û ,Gn…Ñú¶.{¨ËS,ˆÜ”ý)ñð¾EØæV4{Mð Cô64”àc’çpd4$S,Ÿb³+†IœE†„Î"Ë0‰æüÿYd(˜¯=—3/Èý8oÚöÿÎ[ìb q4Æy"ø0˜ÁÛ Wp±ªµgùý ÇÒè +endstream +endobj +958 0 obj +<< +/BaseFont /BCDHEE+OpenSans-Regular +/Subtype /CIDFontType2 +/Type /Font +/CIDToGIDMap /Identity +/DW 1000 +/CIDSystemInfo 1045 0 R +/FontDescriptor 1046 0 R +/W [0 [600] + 3 [260] + 11 [296 296] + 14 [572 245 322 266 367 572 572 572 572 572 +572 572 572 572 572 266 266] + 35 [899 633 648 631 729 556 516 728 738] +45 [267] + 47 [519 903 754 779 602] + 53 [618 549 553 728] + 58 [926 577] + 68 [556 613 476 613 561 339 548 614 253 253 +525 253 930 614 604 613 613 408 477 353 +614 501 778 524 504 468] +181 [604] + 514 [500] + 518 [170 170] + 522 [350 350] + 918 [279] +] +>> +endobj +959 0 obj +<< +/Filter /FlateDecode +/Length 379 +>> +stream +xœ}SËnƒ0¼ó>¦‡Û¼‚„i$}¨´@`I‘Š± 9äïk{Q’ K`íxfwÖZ»yq(D7÷] u i;Ñ(‡‹ªœàÜ ‡SÒtõ4Gö_÷•t\-.¯ã}!ÚÁIâ~èÃqRW²ÉšáOŽû¦P8“ÍW^긼Hù=ˆ‰P'MI­NôRÉתâZÙ¶hôy7]·Zsg|^%nc†fê¡QV5¨JœÁI¨^)IŽz¥ˆæßù¬:µõw¥,ÛÓlJ9µì¿±îI÷–Fsdïf6žóEÒ#ÒòÔDŒaô¼^‚¡ÙÍ£J,|³iácR¾LŠ†ÙÙ±5Ä}4„=ùl½G­Ÿ=V +•8öìa>¶îîìp3±|YÐGOÊCfÁå:ˆøªQN¹¦qskWÂih²q!{—Z0Cp`¾ZÉ‹Cl2~¬d†Í¼‰Û$×¥ôÛ‡c§×Ìm'àö¶ä Ê|¿Ò¯ +endstream +endobj +960 0 obj +<< +/Type /FontDescriptor +/FontName /BCDEEE+OpenSans-Regular +/Flags 32 +/ItalicAngle 0 +/Ascent 1069 +/Descent -240 +/CapHeight 765 +/AvgWidth 589 +/MaxWidth 1754 +/FontWeight 400 +/XHeight 250 +/StemV 58 +/FontBBox [-550 -240 1204 765] +/FontFile2 1047 0 R +>> +endobj +961 0 obj +<< +/Type /FontDescriptor +/FontName /BCDGEE+PTSans-Bold +/Flags 32 +/ItalicAngle 0 +/Ascent 1018 +/Descent -276 +/CapHeight 1018 +/AvgWidth 537 +/MaxWidth 1578 +/FontWeight 700 +/XHeight 250 +/StemV 53 +/FontBBox [-387 -276 1191 1018] +/FontFile2 1048 0 R +>> +endobj +962 0 obj +<< +/Type /FontDescriptor +/FontName /BCDIEE+OpenSans-Italic +/Flags 32 +/ItalicAngle -12 +/Ascent 1069 +/Descent -240 +/CapHeight 765 +/AvgWidth 552 +/MaxWidth 1729 +/FontWeight 400 +/XHeight 250 +/StemV 55 +/FontBBox [-498 -240 1231 765] +/FontFile2 1049 0 R +>> +endobj +963 0 obj +<< +/BaseFont /BCDJEE+OpenSans-Italic +/Subtype /CIDFontType2 +/Type /Font +/CIDToGIDMap /Identity +/DW 1000 +/CIDSystemInfo 1050 0 R +/FontDescriptor 1051 0 R +/W [0 [600] + 3 [260] + 11 [285 285] + 15 [240 312 253] + 19 [551 551 551] +23 [551] + 36 [555 598 585 666] + 41 [472 677] + 45 [267] + 48 [837 702 720] +53 [569 502 498] + 58 [852] + 60 [503] + 68 [565 577 450 577 493 313 501 577 254] + 78 [488 254 872 577 561 577 577 396 428 324 +577 462 717 478 462] +519 [170] + 522 [351 351] + 528 [763] + 916 [273] +] +>> +endobj +964 0 obj +<< +/Filter /FlateDecode +/Length 353 +>> +stream +xœ}“Ïnƒ0 Æï> +endobj +966 0 obj +<< +/P 871 0 R +/S /P +/Type /StructElem +/K [298 0 R 299 0 R 300 0 R 301 0 R 302 0 R 303 0 R 304 0 R 305 0 R] +/Pg 16 0 R +>> +endobj +967 0 obj +<< +/P 876 0 R +/S /P +/Type /StructElem +/K [308 0 R 309 0 R 310 0 R 311 0 R 312 0 R 313 0 R 314 0 R] +/Pg 16 0 R +>> +endobj +968 0 obj +<< +/P 890 0 R +/S /P +/Type /StructElem +/K [429 0 R 430 0 R 431 0 R 432 0 R 433 0 R 434 0 R 435 0 R] +/Pg 17 0 R +>> +endobj +969 0 obj +<< +/P 1009 0 R +/S /LBody +/Type /StructElem +/K [532 0 R 533 0 R 534 0 R 1053 0 R] +/Pg 18 0 R +>> +endobj +970 0 obj +<< +/P 1054 0 R +/S /LBody +/Type /StructElem +/K [535 0 R 536 0 R 537 0 R] +/Pg 18 0 R +>> +endobj +971 0 obj +<< +/P 1055 0 R +/S /LBody +/Type /StructElem +/K [538 0 R 539 0 R 540 0 R] +/Pg 18 0 R +>> +endobj +972 0 obj +<< +/P 1056 0 R +/S /LBody +/Type /StructElem +/K [541 0 R 542 0 R 543 0 R] +/Pg 18 0 R +>> +endobj +973 0 obj +<< +/P 1010 0 R +/S /LBody +/Type /StructElem +/K [544 0 R 545 0 R 546 0 R 1057 0 R] +/Pg 18 0 R +>> +endobj +974 0 obj +<< +/P 1058 0 R +/S /LBody +/Type /StructElem +/K [547 0 R 548 0 R 549 0 R] +/Pg 18 0 R +>> +endobj +975 0 obj +<< +/P 1059 0 R +/S /LBody +/Type /StructElem +/K [550 0 R 551 0 R 552 0 R] +/Pg 18 0 R +>> +endobj +976 0 obj +<< +/P 1060 0 R +/S /LBody +/Type /StructElem +/K [553 0 R 554 0 R 555 0 R 979 0 R] +/Pg 18 0 R +>> +endobj +977 0 obj +<< +/P 1011 0 R +/S /LBody +/Type /StructElem +/K [556 0 R 557 0 R 558 0 R] +/Pg 18 0 R +>> +endobj +978 0 obj +<< +/P 904 0 R +/S /P +/Type /StructElem +/K [562 0 R 563 0 R 564 0 R 565 0 R 566 0 R 567 0 R 568 0 R] +/Pg 18 0 R +>> +endobj +979 0 obj +<< +/P 976 0 R +/S /Textbox +/Type /StructElem +/K [980 0 R 570 0 R] +/Pg 18 0 R +>> +endobj +980 0 obj +<< +/P 979 0 R +/S /P +/Type /StructElem +/K [571 0 R 572 0 R 573 0 R 574 0 R 575 0 R 576 0 R 577 0 R] +/Pg 18 0 R +>> +endobj +981 0 obj +<< +/P 918 0 R +/S /P +/Type /StructElem +/K [628 0 R 629 0 R 630 0 R 631 0 R 632 0 R 633 0 R 634 0 R] +/Pg 19 0 R +>> +endobj +982 0 obj +<< +/P 1013 0 R +/S /LBody +/Type /StructElem +/K [639 0 R 640 0 R 641 0 R] +/Pg 20 0 R +>> +endobj +983 0 obj +<< +/P 1014 0 R +/S /LBody +/Type /StructElem +/K [642 0 R 643 0 R 644 0 R] +/Pg 20 0 R +>> +endobj +984 0 obj +<< +/P 1015 0 R +/S /LBody +/Type /StructElem +/K [645 0 R 646 0 R 647 0 R] +/Pg 20 0 R +>> +endobj +985 0 obj +<< +/P 1016 0 R +/S /LBody +/Type /StructElem +/K [648 0 R 649 0 R 650 0 R 1061 0 R] +/Pg 20 0 R +>> +endobj +986 0 obj +<< +/P 1062 0 R +/S /LBody +/Type /StructElem +/K [651 0 R 652 0 R 653 0 R] +/Pg 20 0 R +>> +endobj +987 0 obj +<< +/P 1063 0 R +/S /LBody +/Type /StructElem +/K [654 0 R 655 0 R 656 0 R] +/Pg 20 0 R +>> +endobj +988 0 obj +<< +/P 1017 0 R +/S /LBody +/Type /StructElem +/K [657 0 R 658 0 R 659 0 R 660 0 R 661 0 R 662 0 R] +/Pg 20 0 R +>> +endobj +989 0 obj +<< +/P 1019 0 R +/S /LBody +/Type /StructElem +/K [665 0 R 666 0 R 667 0 R 1064 0 R] +/Pg 20 0 R +>> +endobj +990 0 obj +<< +/P 1065 0 R +/S /LBody +/Type /StructElem +/K [668 0 R 669 0 R 670 0 R] +/Pg 20 0 R +>> +endobj +991 0 obj +<< +/P 1066 0 R +/S /LBody +/Type /StructElem +/K [671 0 R 672 0 R 673 0 R 1067 0 R] +/Pg 20 0 R +>> +endobj +992 0 obj +<< +/P 1068 0 R +/S /LBody +/Type /StructElem +/K [674 0 R 675 0 R 676 0 R] +/Pg 20 0 R +>> +endobj +993 0 obj +<< +/P 1020 0 R +/S /LBody +/Type /StructElem +/K [677 0 R 678 0 R 679 0 R 680 0 R 681 0 R] +/Pg 20 0 R +>> +endobj +994 0 obj +<< +/P 1021 0 R +/S /LBody +/Type /StructElem +/K [682 0 R 683 0 R 684 0 R] +/Pg 20 0 R +>> +endobj +995 0 obj +<< +/P 1023 0 R +/S /LBody +/Type /StructElem +/K [687 0 R 688 0 R 689 0 R] +/Pg 20 0 R +>> +endobj +996 0 obj +<< +/P 1025 0 R +/S /LBody +/Type /StructElem +/K [692 0 R 693 0 R 694 0 R 1069 0 R] +/Pg 20 0 R +>> +endobj +997 0 obj +<< +/P 1070 0 R +/S /LBody +/Type /StructElem +/K [695 0 R 696 0 R 697 0 R] +/Pg 20 0 R +>> +endobj +998 0 obj +<< +/P 1071 0 R +/S /LBody +/Type /StructElem +/K [698 0 R 699 0 R 700 0 R] +/Pg 20 0 R +>> +endobj +999 0 obj +<< +/P 1026 0 R +/S /LBody +/Type /StructElem +/K [701 0 R 702 0 R 703 0 R 704 0 R 1072 0 R] +/Pg 20 0 R +>> +endobj +1000 0 obj +<< +/P 1073 0 R +/S /LBody +/Type /StructElem +/K [705 0 R 706 0 R 707 0 R] +/Pg 20 0 R +>> +endobj +1001 0 obj +<< +/P 1028 0 R +/S /LBody +/Type /StructElem +/K [710 0 R 711 0 R 712 0 R] +/Pg 20 0 R +>> +endobj +1002 0 obj +<< +/P 1030 0 R +/S /LBody +/Type /StructElem +/K [715 0 R 716 0 R 717 0 R] +/Pg 20 0 R +>> +endobj +1003 0 obj +<< +/P 1031 0 R +/S /LBody +/Type /StructElem +/K [718 0 R 719 0 R 720 0 R] +/Pg 20 0 R +>> +endobj +1004 0 obj +<< +/P 1032 0 R +/S /LBody +/Type /StructElem +/K [721 0 R 722 0 R 723 0 R] +/Pg 20 0 R +>> +endobj +1005 0 obj +<< +/P 1034 0 R +/S /LBody +/Type /StructElem +/K [726 0 R 727 0 R 728 0 R] +/Pg 20 0 R +>> +endobj +1006 0 obj +<< +/P 1035 0 R +/S /LBody +/Type /StructElem +/K [729 0 R 730 0 R 731 0 R] +/Pg 20 0 R +>> +endobj +1007 0 obj +<< +/P 1036 0 R +/S /LBody +/Type /StructElem +/K [732 0 R 733 0 R 734 0 R 735 0 R 736 0 R] +/Pg 20 0 R +>> +endobj +1008 0 obj +<< +/O /List +/ListNumbering /None +>> +endobj +1009 0 obj +<< +/P 910 0 R +/S /LI +/Type /StructElem +/K [969 0 R] +/Pg 18 0 R +>> +endobj +1010 0 obj +<< +/P 910 0 R +/S /LI +/Type /StructElem +/K [973 0 R] +/Pg 18 0 R +>> +endobj +1011 0 obj +<< +/P 910 0 R +/S /LI +/Type /StructElem +/K [977 0 R] +/Pg 18 0 R +>> +endobj +1012 0 obj +<< +/O /List +/ListNumbering /None +>> +endobj +1013 0 obj +<< +/P 924 0 R +/S /LI +/Type /StructElem +/K [982 0 R] +/Pg 20 0 R +>> +endobj +1014 0 obj +<< +/P 924 0 R +/S /LI +/Type /StructElem +/K [983 0 R] +/Pg 20 0 R +>> +endobj +1015 0 obj +<< +/P 924 0 R +/S /LI +/Type /StructElem +/K [984 0 R] +/Pg 20 0 R +>> +endobj +1016 0 obj +<< +/P 924 0 R +/S /LI +/Type /StructElem +/K [985 0 R] +/Pg 20 0 R +>> +endobj +1017 0 obj +<< +/P 924 0 R +/S /LI +/Type /StructElem +/K [988 0 R] +/Pg 20 0 R +>> +endobj +1018 0 obj +<< +/O /List +/ListNumbering /None +>> +endobj +1019 0 obj +<< +/P 926 0 R +/S /LI +/Type /StructElem +/K [989 0 R] +/Pg 20 0 R +>> +endobj +1020 0 obj +<< +/P 926 0 R +/S /LI +/Type /StructElem +/K [993 0 R] +/Pg 20 0 R +>> +endobj +1021 0 obj +<< +/P 926 0 R +/S /LI +/Type /StructElem +/K [994 0 R] +/Pg 20 0 R +>> +endobj +1022 0 obj +<< +/O /List +/ListNumbering /None +>> +endobj +1023 0 obj +<< +/P 928 0 R +/S /LI +/Type /StructElem +/K [995 0 R] +/Pg 20 0 R +>> +endobj +1024 0 obj +<< +/O /List +/ListNumbering /None +>> +endobj +1025 0 obj +<< +/P 930 0 R +/S /LI +/Type /StructElem +/K [996 0 R] +/Pg 20 0 R +>> +endobj +1026 0 obj +<< +/P 930 0 R +/S /LI +/Type /StructElem +/K [999 0 R] +/Pg 20 0 R +>> +endobj +1027 0 obj +<< +/O /List +/ListNumbering /None +>> +endobj +1028 0 obj +<< +/P 932 0 R +/S /LI +/Type /StructElem +/K [1001 0 R] +/Pg 20 0 R +>> +endobj +1029 0 obj +<< +/O /List +/ListNumbering /None +>> +endobj +1030 0 obj +<< +/P 934 0 R +/S /LI +/Type /StructElem +/K [1002 0 R] +/Pg 20 0 R +>> +endobj +1031 0 obj +<< +/P 934 0 R +/S /LI +/Type /StructElem +/K [1003 0 R] +/Pg 20 0 R +>> +endobj +1032 0 obj +<< +/P 934 0 R +/S /LI +/Type /StructElem +/K [1004 0 R] +/Pg 20 0 R +>> +endobj +1033 0 obj +<< +/O /List +/ListNumbering /None +>> +endobj +1034 0 obj +<< +/P 936 0 R +/S /LI +/Type /StructElem +/K [1005 0 R] +/Pg 20 0 R +>> +endobj +1035 0 obj +<< +/P 936 0 R +/S /LI +/Type /StructElem +/K [1006 0 R] +/Pg 20 0 R +>> +endobj +1036 0 obj +<< +/P 936 0 R +/S /LI +/Type /StructElem +/K [1007 0 R] +/Pg 20 0 R +>> +endobj +1037 0 obj +<< +/D [15 0 R /FitH 454] +/S /GoTo +>> +endobj +1038 0 obj +<< +/A 1074 0 R +/Next 1075 0 R +/Parent 953 0 R +/Title (Mechanical memory and movement flow) +>> +endobj +1039 0 obj +<< +/A 1076 0 R +/Parent 953 0 R +/Prev 1075 0 R +/Title (Readability) +>> +endobj +1040 0 obj +<< +/A 1077 0 R +/Count 3 +/First 1078 0 R +/Last 1079 0 R +/Next 1080 0 R +/Parent 4 0 R +/Prev 953 0 R +/Title (Additions and changes) +>> +endobj +1041 0 obj +<< +/D [21 0 R /FitH 834] +/S /GoTo +>> +endobj +1042 0 obj +<< +/A 1081 0 R +/Next 955 0 R +/Parent 4 0 R +/Prev 1080 0 R +/Title (Tentative Timeline) +>> +endobj +1043 0 obj +<< +/Ordering (Identity) +/Registry (Adobe) +/Supplement 0 +>> +endobj +1044 0 obj +<< +/Type /FontDescriptor +/FontName /BCDFEE+PTSans-Bold +/Flags 32 +/ItalicAngle 0 +/Ascent 1018 +/Descent -276 +/CapHeight 1018 +/AvgWidth 537 +/MaxWidth 1578 +/FontWeight 700 +/XHeight 250 +/StemV 53 +/FontBBox [-387 -276 1191 1018] +/FontFile2 1048 0 R +>> +endobj +1045 0 obj +<< +/Ordering (Identity) +/Registry (Adobe) +/Supplement 0 +>> +endobj +1046 0 obj +<< +/Type /FontDescriptor +/FontName /BCDHEE+OpenSans-Regular +/Flags 32 +/ItalicAngle 0 +/Ascent 1069 +/Descent -240 +/CapHeight 765 +/AvgWidth 589 +/MaxWidth 1754 +/FontWeight 400 +/XHeight 250 +/StemV 58 +/FontBBox [-550 -240 1204 765] +/FontFile2 1047 0 R +>> +endobj +1047 0 obj +<< +/Filter /FlateDecode +/Length 10181 +/Length1 20184 +>> +stream +xœì{ xTEÖhUݵ÷}Išî\:!$’Na1M6†-˜ &0 (…AE!lÙd2í`‹ˆàŽŠˆ;nŒ£â¨ˆ¸/¤oþS·»³ μÿmóÞ÷YávwUÝ:çÔÙϽÂ!|°ÈX66-c{ÿ¯"„+`´jÊÌêYÌ7 DÈ8ú-SæÍqF:w"„þŽi³®yku« æ/ $´\{ý-Óî;ª¹¡Øq%/®Z]CM™÷¾WÿZн¬ªøVè÷ª9çæ-m‰×BÿBú;¯¿qJõâIóÆ ”ÿÀ?³úæY\š8æÀýîªgN-«š;¡ÒT„˜ÊY7ÖÍiŸŽ¦!tÕ2:?릩³ò÷7}”F¬Bto8潂’ÖÙ×ÿ€T"¢íxVú +úýfÊËo^ÜzSµƒâ@*DP¸Á:qUh í¹¸I^¨Ú¡@êÒ˜ t„iByˆAwQšKõB ŒaÄ°­øÄ!Ämâ|0þfN¡iø‘ Ï3KûwD¾ö#÷Û›ÂN:6ÁÀE–—­èNq©p#üc‹¹VºS€~SF€“„^ÚÀd¡¥è2LBcà¢Ü¿ÕâQ.YÆÚ@. +ŒMƒë0\5pM‚+®¥pÍôkáš¡ÜïA¹—ÂÒÑ-œvš†ŽsZ´ˆ{gëàò@ÿu膎“&À'µW)4$¡ãB:΋p B‹ØSè¸2þ-¬©A3Ø™È ë)°k‘‹Ý†ÄËí«k|“ØÏP9‰ê໎]„êH+Šc'£$ös$<ÚAøöµ¬Oùf£ gßTîÒ5L¬?û|ÅÃÜNôÏA6`ˆˆ0GИGÇÿjc·áåÿ§qü¿Ú¨,þÓ4üÑþh´?Úÿ/EÝcžˆbèí“(†^ÿ÷)ûï5ö0Äj¸þÓtü«&ÌEqôúOÓñGû£ýÑþh´1}Q&»jïQ_¨“•zm Ô,—©ß¸™Ý}Ô<³/…G…k±ÿÁ†•Z!-"¨—QO¨ƒ¤G ( BÃÑ(TŽ*ÐÔ‚¾s[Ü1l{;¢lo”Uîˆ^W£êȼÓÝã"jooÿ˜þ!þ†¿§ÚŸúèëÎt^ÁnÎËP —„z!/JDI€!õA)Lêˬ"™$‹ü‰Lò›P¨(7vÌèQeWQ:¼¤xXQaA~ÞPî•C˜3 »Vz¿´+ú¦öNJôö’<ñN«ÉhÐë4j•(ðËŒRÝA\Ud¼nSQµT(U÷Mu:k ú¦JEUAwµ;_l¢T\¬ IÕAw•;˜_Õ]†«‚~¸sÚ%wúÃwú;îÄF÷`4˜¢ÜÁ’û®]¿WHwð+å÷Hå7›¨ttÐñx`…B¥Ö],šW[_X4âf:_ÊŸªî›ŠšÕø©_ÁÞÒ¬fÜûJ¬ü ½ 6$ê(ZØiauMpÔèŠÂ—Çè›ZÔKÊÊW@ùü  €tO§¤£îæÔ£õ+ÑäªmTS=±"ÈTÃÚz¦°¾þî )%˜,“|â„O ¦J…Á +µtLžÒN”8Èy’»þÛ‘¾:×}¤:2Â{? ú3HòƒxL…‡6W𺾾HrÕWÕWh_Úê”_…ÆÓ.ÀÉ/vyžpë›J`ÚA +DÊÔâè¸)˜A?ó‹•!ÊK'Uzw…4U +Hµî TÝeÂå3žGd5®[¯ ³€MÈÓÑef°(ÅÕ•¹ÁaJ¿£[|ÉtItÚ]/J¥cë)p)å%ADUØ?ÀäR|5h |¯Û&­t}³ßO¹v "•ÔÔKc++wƒ?YäZ@q™Q).—×7\[^³„—nöãec++!.-W±—`’_•hîsÝù•QBGé í¸i‡BQ¹ßuÐÐbe–U”þ”)cbt £)HxÌF”¨ ò#3lxƽ›…11<¶XSZ3¢,ó«9¿èWùµDG\͘í…‘C#U=¦Å:ìj†Uc”áxq³Êï +ß±îð‡)\VÞ‰º¼²â1-‚eÊ' Ê£ ÔÅY †°R计Šòç@m}U€²ƒhàbéJ“t%Âkƒjij^P#åÑñ\:žçé¸*Ší–/Ù +bª*<`’îØã®zãWTRp*õÆOûú7ª<Åîr7îY_Ì”Ç÷Ćž¹=íÉŒ,MŒQê‹/-òÆ'f˽¾^å1–öxmç™öøá%¾ø˜³øÌåfÊY¬f°Éee˜aE1ñ_aÉ—PÞÃç*·ûlå&l(7ú åC™ÄNˆÁÐn <ÄûrìCå7¢ÛУèkÄ^lÇ>€ïi76%¥ô€Ð!B5jB/ zÇÒOÿèÊ ¿,ˆÊ+'T4c¼:°tÕ*”WÌ[tÇJƒ5ðÃ×lGyºº””Iusæ¦Ð6'¥nNJצt“ ½á­È®âZás.×Êèž±ÅÈŠÖBætŽö:?e+ý„U–¶{Û¿’—¶!|ø¿‘ëui‘Çñ+Ðíè´­A«ÑF´ ÝŽ ¨Æ }7ÁªƒdÛÏ2a¡´Œ4Nó¥ùÒûY<&O6\ǘ’¶ýµä–ÐÝ\ë¯ÃkÙ³°zCûÇx¹²ZRüVF¥",k0b¬%Z¾, µå榘Ì(Ç™f2ã“Ïg˜Xb|L¦/Ãn³òRB".šî;ùÑÍsý9™x=+ýÚ²¬(Ï?,—R¸”i$Á…ñ~b–aEO€ûNdP¸XËHŒ.œÛ{z2II®MæZCˆ‘^4##&€¥C=üZ©YÄê š$ +(· ‹Ñœíã‰ÍjvH‰dÌæu;îY{ïŠ×o"éX…_y䘜ñý¹ÿMø9 +u@ÕF¡²j€‹ô5Ã&u‡ŠDú›³2I’Ïn&ÚÍë\qïÚ{vP°ò/òÀ]‡ñK¾Ç¯{TN¨µèc6™}iPo¿±¬Šã´:F…Qd±ˆÒþäK1!_W¶zl“dòdyL>² +o‘kVÈÓ𦌣^›êñ€›+ÿŒg¢ó ¦}R©9ö …Ìô~^¯Ð˜'b'g-r ÕwÔÈ?ÝT‹3&ÂÚqø4É%³A¦}q, ¥ù"k-YÛ8ü%>½¾sS4} Ô;ýêŠ) ¨ìˆj%8½_vfÿ Ø0$gàм_þŒüÂÂü¡E¹”¯ômÙ{Šä-û b9†!æ(Ka³XÂä½Ð™F*Ñ_‡Ã}Mk?Çö[Ó€Õõö[ÍHË#>Æ©²•Tc( 01@r†‰è”‹”@LF³/ÃŒ•O“2ÂöýúÇs?žÿþüOm5ìl¼ï¾Æ äy©\oÃ7á[ñMò­ò:ù˜üNƒàÏ+ŸªÁRÉK@õòU‹X£eU‚€U’R·¥¥ãd¬^sÿ]×-È,š5lôÓÔ¤÷fpG@f4ØßÓÌ©Ñ b8ÆbÅœ™P³™x¦C>QË¢$SÛ +;-Ŷ0t< 3‰0;ãô¡Ò<-/S‹ýúÈÙx”Ä£Ö2´%ã³kZªrCó€Kq ±h ?ÞÀÄXE«ƒa{¸0 B…Í2´ñ¼¶4Àÿ†ulË`mV$%(V= B’LžéOú~†Uòù§%E¯N >-/¿æñÙäíÐ~o³èÓç?–å²ûú·âŒ¸l²g£\â œ™ T¥TíP‰ø¥X“ÆãjLL¢W«ÑÇ hôz+cu”¬1Œ82¡+m9]xõ›È“á° ã‹hœ”€¸¨\y›ÕnŸ‹Ëpñì¡#§|ù³V{Ãùg?þååñ—«·®[[ÙµžÌÆâ‡-kbä÷äçöœùù".á±Ýk‡/)ºvo-ÕGi +𓇈`ć8F†Œ0ú3V{XÇ“x'Pn8úÓ.)~á‹»Öïm?ø¢ gÔßüåü¿Þ_ã–§î» \´zÞkæ¯å^:´óú½%å/l=}âðÅ•Wí›õÀo¾kå‚êû‡ù73×Þ\3ñμÁõ§Î§²»£>üh¨?ÁeJP«i Û$}O¬U¯'V«D+ad€tW;sNJ7ÁbÐ5P;p‰ïü¤ÝÞì‰î"‘õ†j猚vá6»õ¦§>iõ¾37ËÖ5[îY?acŘõLQ[£uM,©oìÕÿ|õ,n”ßÃýì¼ç/ÃMß; Es +¶|¸úp#˜Bv‡ÞRÐ;‚HÔ‡G"_×Xb‚Äâ’¨2oa×ØÂ<~÷Ý4Ä%.\"ø†Ð$ŽS©¬±, 1*±–ŽðÈt è ”¶ù€dàÎxI¾¦hŠèžni/âp-( å¢B‚tEý ÁêB(Ùª¿‚óuÀMøK‰Ï`S ¬æúÌ9PÈ›s2‡¯Ã‡RôIQqÐí;›UÑ/ÒKJ`‰Zc¶—Ü‚[/OkÆ0o±(¦x âÁÚñó4bïû¦5ì>w´`OaÌÒ 7Ý+Ý|Fn}çá´×þqô{ù>ùÆ·ðJŒÞÆeû/þøôI³¾¸|Ézrzõ¹%µ£¯ž|"ør{Œ]îcßûöž}ظþ ¼û#ù¤|`üÒqx ž†YÜpfŸü˜¼SÆ9˜³¶„OîpFî0˜‘åø{½FÄÍîV`=) h8½Â=b!Üû¹3`›ÌˆþšçaÆ Ð<,­j µ¶ì!ykH®<µÉ#Ù“÷àSrwø×2?;~QU<°#8žC–áF%þD §6ÄÄèÕ¬ ‡x$œçð€Á Gú˜á½9†`Ýïdzˆëó¸Yjò6Öde%Åöy’Éùuo…„…]»”:/“&ìlÙ<ú+No~lÿã\ë#‡—ìŽQçÈï=ó>S0û®…3CkC,_·l1¿‹ÀšO*¾*²l½U¥gN3* ˜Y ü²tÿ  sä‹Š?ÓÜË—á™AßÈŸcÝ/ŸÙpF~BÞ¾ç¾svOq#ç“Ÿ”?—?’ŸÏ¾//ÃÓÿÇ·î*ª»À1®8ù"µG=«‚R×látÃÃꇨ”~›S!Ô nÄÀÉäs y¾¼F¾ÅåxA àúô§“<%ù\noçZå»ä¿âž8áâ,Hz`Ï€—ùðjhÌäÕjÌ"³Z¯* €û$„+ «KØü»1“a‹\ÌÏm§˜´ÐB2)´ƒ,åZï—“Bg»`R¡ ,䪘1£Ö\‚ÈÜYÉtà E1຦(xúüþˆä¸! 9Ý…UŒ!DïÙqÈU‘ŸÓjM%-Ë9Jœå÷#¿ÇÄw“£bÒÔºaW#ð7s.l“[äÕûqÅg_¼˜÷Ü~ùù ìÁÎ kåƒDåxñ +\ó ¾zßø†qòSòYùù ?Þ;¯pÙçQaŒD–å§ÓŠLI@95Ï@ŽDÍÜQZ+ìØ<$E>øôqñMmrSCšH04 +ê®uäÊq Dã ÙþV3Q2˜‚€åÙážQCoxXˆP8s“V@&›mJ‚0.˜d|HÞ³‡={&Kl“wòdïÅñÂíUòm¸V©Áâü:(ê *à ¸+\L8ŽõÏÐV^;©ÿ°‘S®m:*ßæZk½y6GNuÕ>2 =N²=È ¹ ‘é±o¢*õë'›ÂkùÙ´†}rŠÇC¥ãuVV›rO=â)K)O9—²KvM4Á¹ùL´803J6Šú­á“"~]nÒ‹²–3nz£m×zq8 ÕóÈŽ#¿~‘g.à6¢+ü6ÔØ`Wk2kÁ 2XˆÊò7x¥b@›H²Až¹Oµ}$·eâD¢'°/½ÓÒv tao.3ŒúªÝG.Wo•T,c( 0–Ëû†°þºQ×z‹;"o•Ÿ¡n Wᨧ&_¬ }óÝÏ?}û]ê®íò  Åµx*^.Ï’”ß–Oà Üj¯tùDØO±µŠ›Q¦?V |>#‹U Z¦Vó‚`þ;ÎéLr QR|7ŽT"[+Ÿ’Ïîi I¯fã?^½€#®žH¤œŽõ&j{2v;x ;˨º ©k*«pDrGË Hð’Ùõ@J浟%ò?/Èm++ߨmÚ3dͺ—•O½»?kßÃwo°tùÙ¿á¥ÇÞÉß™˜z{݈ê1™%/lßý¨{G̹vDõèô1‡©­™•À?*f3ÂfÊu¬úÝ—v:à ‹‘_“†¿3M/ôàò{n°b/Öb NMp¬²ÇÉã_|gÐúà`e³?fàOžßÇ;^oâMnÙf²°–Q©€=*#c) +0ößgO¸*’øèó3‡/) Æ%E–™'ÁlRÕ}úö×Þ:3_'°wËÛš6nnZ·yÓú¿âDl€¿Ôe#ñ‘_ÎÍ?øŠôùóŸ|í­•fàÅ¢Aþx§Ú¡a°±.‡¦(àp ž·*ŒÒwcT×ÜÉוef›Íc³‹gxÁr»í;ù3̽ÿÊ…Ž;¸«ùo[·Ü¹UO†¬´âÞXÀ*<@þæÃéÇ^~o¢‡ùtφ­¥R‹ƒÜ@ÏÇ#+Ô/qV­ÖBˆÀpŒÍ®SPƒ¸¢€E00Ô|Ѥ&òÄÏDƒ’ÒA¬ÉÊÎ2z¢î<Ú6ùóÆgžÁÕWÏM©*˜T‰Ìóm9Ì󥃇à{¥¥ñ‹ê!ê2(I¶²éÀ™>( E7ø¯L‰àÕÆáÒ-Ø‘> =â½1ê¼ü†,CVQ@4, NûDƒhïÓ‡ ô1ôÎèm´_1,`wEX×!bgZš ÜFÊïÄ%[ô±F’bJÙMäAdÈNìüeÀQû`{ÚÉÊ„_lúK=Rß?šž2cxåS{Ÿ”ß—ÿùöç‹çôÉñ–_÷Îsã eSÃÊSÇoØðüì[+—Ìùîǹ·²ÅÓÒìaÛŠÊû¦4¬i}òÁu5ëb-£²Wö‘v]ßò´õ" +L\t] ðzfpݼs?Ý +r +‚,=·ÓÜV¯E²«ì§^e6³E³QÊFÝdnt¯Q«§žÊV`SÔâÃnŠÙ¶`ÉßhlÕéûæ?Nž½ëÎÃo…žëN.P6áÉWCYÔwîE™ÆiÀ;›è³Œ&PЦšñJ×G ´Hbº<ÄÀã[ôé=p`ï>Øbœœ“ÕÀ€ìl€Ý¾V¶*°µÈ‰Rýv‹F£ŘX»±8`÷« ´E¤Û ‰¥KòkìŠ-åšA…ùW•tb”­1w[˯fÛ.åߢÈÃ<žQ¿Ë¨W«5‘g9‘5™!»0E‘46Æ@5 +ÀœV¡œ[±ÿ  Æâq)xò³r~︼hÑÎ"I2Ï—û†Vþzyom{>».ŒÜ ‚m‚›b9‚NF“{ÊDÊ8¸G¹› ¬DBE~Éf2™Aü’Ê,1½¼=ì6›9†ÕÅ€§1Z 3Ú”„<7òàŒÀç3u/ñ»(D§f8¨^¸Qíཱིæm¾·qÖü-kïv‰iÏÀ¸LL?4ÿÐArüŽ;ö m¡ß¿:Æ7Œª<4¾æÉרÆD´èµ¢t¿Y©ºZUv›Ve4‚²jÃï)kw]utÕÔ=R2|f?÷ÕÔCo)xG¤a;pRM‚üÝ‚tbcÔvðcFÆØÍùwÍßAeHuª¨ÓÆÁ°'Ëßž_ÿÉŸ±öüYlh{b×CíÞý—‡‰Wþ^~½“¿A8J‘_‘/¾öþ{¯Ÿ:M½||Ù\e×”ëwÇhXAãÍ¢9Ab5È`° F•At¡n>·3Uí0XÅÓC€¶waÚÔÕw Ô4Hkïvˆþ¦Þýê›ó»Ȧ¦ÕÛ·[ËÆT—‡ð™ •£ä·äïhÐf>>ô’÷³çϾxâ=Ê+ 4[áU8«0ÆÙ™ØØcŒÛërâzö´ë,<¿Q‡Šº6Ãq3£vGttDÐìHÕÇ“«7p[v¯Û¼qÑç/¼õÑ-*ç]Ýü½¯{ϾøñÉ“§W@ù£jàŠ¦†_^ÆoÖý5¬GLÐiD}üVJ¥V¨þ :¤¶)ž!’í˜sº½›Œ¡(óÈÎ’Ž‚Ì¥O4.·ˆCö°µ› ïlµ°Å/]7'\Y0u€¥øáÊ‚³tTE»‘gTú“v¹Ú‚ï|•‘™˜tùmiÁÔ}òÊ» Êö[²òÆíoÏ}÷HóîA¹kÞÍ}kV?½§ll,ÜÔûŠ±åþ Wæ”__z×æâ» †M½r@Ö°{€ÆøösdWZÕÑjUiTf†u:Ô£eX@ï7”Tì‰nÉjX>6úÜÅDu¶ÏFŸóXíÄœ:ÆéšÞG~jëÖ¢*|¥üÔ¤¹:á6 —‘•£ +¿o-œ2ƒZôN°®åM¦?[­VmQÛìZÎ(Z ŠUÛ5ÑŒ¼¥É×½V% ѬلG€Q?иܩòí›óÂólq(ЛÄñÀúÑãœ"'"'/Y˜éÛW5Vkuœ +”äÜ—­J”bÄ×ßloü \µ÷Ü(½¨™ûò^¹ +€Îû¤ $ý.ÒzÇžTh= ÚXU®¸ž»^U+Æš!܈¶®5Ï×Q÷0ôñ´@ÓšÍT§ âQPö”lÚqK¦Ø»çÉ£ò›Ì¸Q5éæã-Ï °Š¬ôäù¹cЩG¯ ÝõÝyTiξ,27´bÏÜ^ ä} +¨J‚=ŠÊü&ã!ï¢/™±¨±±°ÙîÅO¤îÁJ t@¾ã ìÁîÇå;ðÚÃò ùÅÃ$8ä‰xgèóÐI|X.øìø6Z•Â6»ƒ…BÒrK„¨ž›‘Û™!AlíÜÖlH5³ÉÞ eQ7öì^9¹èñe#†g<\2¼æ­k|?‘?_tÜlZª=ºE9–;0ªè{^3à‹Y̪5;,À°8,@£ÝåÞó*ï¸<Ì̶OÉøÐIòYh/ùÓlfüí··‚8¹œ=͘yÀµ´ª»X…Òb£ïü1Æz.Hxy¿Ý/¦>â¿‘ýöÊàPÛÐ#™ííáÁ{H"¥óhÞx„ÄÇH‚)¥dQªñiæ‘È™DXîÒ3c˜‰‘31Ì1\ ÔùæVÌA8f”%Ã’ÔŸº¼Zûä ó¼Ì1{%ÖÞ"ÿ„.YÉaQÅ °ò¹è”·2ælœE_Å,(rs­vúǽC31XKZ”µëײX§b&$B==>¢hHˆy"tàÀ {Ò…Þî¤èm,ÖÉgª;(ë +ÝH¡«t˜ƒTHÇ)…¾ç: Ghôt°ˆK’ôΪ‹bótdÛ'È?.¨Á™BÀ¨6ØPm$¢0k ­(:®í2^Ö9οãI¨„@,è\ÇÍì˜ú2óe‘ùLØV¾²#kûÍÊ!ª¶.ú”OË›œ1Ê©ŠDÆ0òߟªèš$8~úðô¿¼ûÎ/!vóêUÛ¶­Yµ‰¤É?È/à,¬‡b0K~IþæÕ~ñÊËç>§²ï $d³“jd“ò„i´ ¦¡2FT䤥uÁ>Q!('*²·‹ùW6TâÛVô¯Wæ÷›u–f2XÚÛ°£ðhNzžÂ¡Ç\ä@E¢Ó‘#¥[äÉÓeŽTðçð0o·Ák·ÎN]1¿bËÄÊ£ß>÷î’CòABŽ,ÅiókǽúÚ!ÃgîÚÕP÷øâÏxåD…|ëb瀆ù6|¦‚ Ÿ©`/9S‘¨œ©ðþËwPÿ[OU0¿=Uáw±Ó©˜é3„ßžªP™õ†ðÁ +#Ó«ãà Ðz™³ÞËœ­˜vzW(ƒ9pZ¾K«N.s\ò*\·ˆy®­O|÷ÃñCÛ('—'ãØkþõÙ +£r¶â7,üŸ:[1éÁèÙ +’xù³`E‘³„WþG•÷n6å¿Ú¹º(¢(|îÌîº?î֢߬’k­«nnTöãCfÚŸfa=l»ëæϺº»fT!„äƒDôÚDPÔKP¥QQF‘$ödvî»ë®?T Õƒóqï|sæÜsϽÌÌžåÜôræŠØ“V,é+&¢òš´Ê×, ÕLvg6âØsñ*š#˯Êò/gYþÜ¿‘å'£¿ÊòËO!å#þ¢_JP±§mñ(ÛAï mz†èp,YbOóòsV”ï³çdf3ŒVÉŠ‘¶Õ$a'%EÚVö.![>-ÐVÒ«kYb´ˆ +}ÝŠÞç/v“w]ëç7£ß‡Žé¬§FÆÇ.ì8|îjǽgyŸž|ùêM“Ýs-Q×µ®WFFÊ{Îh—œ…!a¶rÍ|J"Blášœ/zÚG—¬Ñ0-›£:p^ ÆÉb’OªˆŸDÉ€`Ú„Û„X'G;'·cPnPQªÌªJÕIÕ- \)Þ”3ˆ¾”/êlµO}1ªÙ¢©×ô >h 3Ш} ý®«ÔõèÞ¦¶¤ö§¾Õ[õµú€þ±~Ò°ÙpÁ0lÌ2¶o¿š$ÓÓYÓÓØŸÂüo·œ,à¿Ä:ŽsÃ%ó«yÇ{óðJnC¯€é#\=Îé÷”-'óÙg›“l†QRy)”AÎk»â¨Mz'±m²ž~Ïm–M~Ë\Þú]5a-¡H(Âz“P‡õñ0ñ¤¥º?ïÎæÚ +endstream +endobj +1048 0 obj +<< +/Filter /FlateDecode +/Length 29818 +/Length1 62368 +>> +stream +xœì{ tT×™æ}÷½zïÕþ¤ÚKHU¥B*mPB[!À¨°ÙIŒâ$›Õ ’ŒÙ: ıYäîXÓ±±‰“Ø3œÌŒK//B8¤Áã˜Å«û$€c:8él·Op2bµ‘æÿ^•ŠÅ$Ý}úLÏésRâþwy÷þï¿÷þ÷ßîƒ Œ1'‰ióoOÖ}ãæ ?cLh£Ö%÷>xOçÈ}zs\ ú§÷®]µ¥ømŒ©^³¬sùƒßýöjB0Dc¾¹ü Ë~w÷_¥çÓ[û«Kï¹oè§ÃÔ÷¥¦Ô Ä,/Q_/ÕÇ®xpÍú­;3¨>À˜=ýÀê{ïùÞ}ÛmŒm˘å¿-‹QzöŸr¸§Pù»4nå…¬ˆOdvþ0kþSï»þ'|Ì<Èš…>ãE,FïŽ ÓOê1jw² ù¾åì&±Œ5£‡èù˜ì»„ÅÔï%:˜…‡Yƒð#à7rÁ|ö«‘óÿz>CßeUòù·Y¥‰äY¥ð=VúoyÿŸÿþ?â¹™ÿ¿iøwý]dŽí¡$+þüûóïÏ¿ÿ?þ{ðß2ÞÔgBßý¿þIâŸeÎèÙ´°uÁGÿ’î¼’9ø²ºIÙ͔ͣDJ^‚‚™K þAìkæ'{+A6oK‘u8‹Íe·²;ÙJÖÉÖ± ìûì‡ìUa‚°‰¿õD¿óŸk<÷¥OøÈÒ¸VkŽ›Fã>ÏZÙ=ìÖmŽÓÙÞü¸¯Ñ¸'ŒŒŒüãŸøûŸæßÀÈKÃí¿qüúüºÙñ„c±òæõ^É¿ôGÎVͼfmmë„o´#°ÇŠ÷’$.¾{Üj¢Ñ+§g„%Tá5ÔP£’X™ËfÞÖoöD{æÜ×]qÏ}©ÌÌéÁÒžöd4Ãno[IðŽ¶X&Ý^”/.moŸDx$à‘L<=í„aUÃ*!¸L,5ó¢±¼µí m™ÍÓ‹2ééíE±XtFæ@k[æÀô¢X{;õ’ó”Rþ••ÁÍ +Ñ,WQAÍb¹½-“.Ê°öžžl-Ëlîé)ê¡yäêìÀu »¾!k •F±lÆ€°¹Õ|´9+BC<íÓéÝÖšy··Í Jc Ô†%·ÝÖ–‰nÐØ¢6Ú„"ZØvŒÃžT³Wá72^-¼J (¡°Ÿ²y˜Eä‘‘wÉÔêýäS^ß"¦E¹®…í'ÔõôŠæcÎ\'þ™‘Ø6qU Q¤.¥šÈË®ï«ÔÃÆ„‡_e›syùšWÙ\¾ù#¹vz¾Ÿò rzANÏ7åòWry„ifÞ’ËçòM¹üù\¾?—»éÀïÉ\þJ.Ÿ| Æeóý¹üL. §ñÉ\¾8—?™ËÍþÐÊ=ÄfÙ£l ÛÎzi9\#™CH3Uèbvaˆ¹¸“üË}ÌÅÂðÅù>*‹DV˜$G›Áîf+Øzöû{‘õ³×Øöö»,„˜P)Lf _¾$,g‰Œ­ºMç¢XÝN‹4£-Ã’E}Ì;µÝ¬ˆTÕ©íµ<±‚˜ $”€HR‰”PßX_×ÔØP^-ê|^¹ZhLÅ}õ>jx㥠¥Î__Gêë©òx©Ï[ÂSMõuÅB©Y«¯KêËo⥲(E?½O4Rƒ’ TfçTMâjD~¼‘Þ‘òâÐ3´¤ä8!š,¤®¼á3Tþy0\‰›4²:ïdáÚ1õ74:ûx@Ž'"»Eˆ+¾x‚hðgéÎé Ô«4A/È!mJ%ê”xCï¹¼–«¯¿^÷Æuö©’l³Ëv‡j‘ĆˆCqÄ…‹\¶¸ +e‹„\–e·d±œ;T™ž6Iá6ɹÀ«­ŠÈ- +—,NI¶[D‹(Iœ0ÊœÊRÂëõªÙE?/ç’$rI´Z-¼ôê—†²¸Öëq— +¢ÄAVe ,f{)h¢n2·f»•GìªCU‚DÏE‹Å¦Z¡P$—Ý" ‚ÅEäñqD¤àQ,.—(s»,s_žÎxûíº'êLxù׋Bt1vY.)ñJ\á+̓rÂ$r•9„]â» ^I"-šÃ"H²[à43ĉ4‹(ˆœ«>Ÿ×nu»ÝvÁBëb³sùÊKl7BçLlžEˆ*±ÈB³w†ÜKÀÁÝ.I´¨Vn³¸9í’Åí¢¾² ý¿`ä,»`Fé +Øoq +LRÒBG]ªÖ£LèÐÉ^èÒ—˜%%JQQ`…ͺÄd²™eää´#2‰*™Ä‘Ì ™ß¢t’ÒJ#”Ô®iN2É!™dLòN&™%“’™ÜqœÐ{ô.Í!tôw:6;zbG­#íhuˆ]ú 5ßHL¸©â&1‘±žÐ[­4þÆfk¯•wèšUèÈH'H„ÔÐ è0ùé,ÆKËïÛ¾-ìª[^SS>¶†ïÞó½ï ¿¯¬ŒÇ«ªÙ3‹„ß +KhÊIœ3A!ø-PVËÐHÈóc½KY+‰þN&vèn ËD vB;-(a`?3eãdSÒ‘Ž«ÖG°²,·²Ÿ™‘xBWD€¨Lžz%¾¨{ì­|ßqÂY6òû{Öà +„&N8?&œÆ“´ú¼K_M¨Z–&Âô ÞÕI ¿SÞ,÷ÊDb§LM0Òr«Ì»õ ÊäA™æS+§)Ó™LÔ9˜Œ­u$3öA}‡F¹ÍÚĹ´‹(­¢´‘R¥oak» »»ÈÍ»Œ¹îEnÞm|à¾è&´•îfjÌM5¿_4ÕN̲—f©·ŠBwÆ­eì'ôçíTß„¦íB·Áìšw€;’ĵsÞ.¼ƒhIžNQšEi!¥å”ÖQ’»¦YÙ.2ìöP:Dé%);ÂJ#¬4ÂJ#¬4ÂJ#¬4¢§…óÀke³ G¥”ÖS’€o7u#ó†¦t<‹=­ÔÓJ=­Ô“»R96sq%1UHÉåUãbUµc*“žò¢ +¨L—VL?nZuHn²×Kwob§È:n'^éÌkE½—Ó*¼Åi=’(­æB·¾%7Ã^€Z€ÅXÌ$ÀjZL£VL‹ØKÑd21©ŒuvÓ#=ƒ­}GãC`0_¼é“O„ö‡I2TŒüküM²ž¯®p˜É°'ÁN”L&nA) `ŠŒ4¸¦@™ŒÖ Ð +ÁƒN€(X,ô>‡4”‘µ¾Bi(ǦÖ=ÛVªX‰WúÜÂPFÔú|ÂPŽô +ˆ¥Ù˜wÖ†¥ñI4ïYÒB‰æ}ˆN¡‘R‰]õØj¡¾‡Ö)Ôw–J¥Y4†b بÓl5¨6zTi£îåN:5Çœ§çtjÐà ôð‚‡J•*m8Àë 4$-P@ÒLH„r¼!J&UŠU)´š¤ˆî,}ˆ4c¶Ú¦Ò *@Ül[› eâ «-jC ô4€Fê‘p‚P˜ÈSXâ¶,ôÓ{gùúiè…ˆ]ž«¤aÊëÏ+dXT|uíW×nZû•µ6Þ49ÕÐ2¥QX<ðþW÷?Él||ããû28¶Å¼•9LFì÷³„XŸš¥jãŒ0"Ћ6 Dã|€´S$AË°Aw&¡&ŸÐ#àùVšË눩¬3Èò4ä·UËØ3¶dŽCb +e”CTq€Cˆ–Œ¢e,$?°  DÓ2ÖÁÚ ºJ‹Ÿª/H¹…eõ¾ØÒ'ܵí©ßÎÙ6ÜõðÄôÉ7͸üÒC˜næ>¤Sü&·±0·ÀåIF´ûŸ CD‡!*Ã,+*õHIÑq@7ž•iF[ä¨sÁó °˜€q¿ü·²ì—yWÿ/ä÷ä³2©8‘Fè²$ûãˆxòg£˜&[<:sUl˜¹UÒV^9‡^oq¼í W¶“´Ìk}~ž?3mn" ¨x–€¡ ¨c*B|6#zg”Vþ‘(QÐHê Ñ;€ÞÏ(à-ôÕ×Q'„›[ð¥h§Z²|aW_WÂ…wÊšgÄg¾+8å¦Iã‹’õÑ[ ‰{o©žÝP êWÜב¨´¸º%t˼Ö/|®´²±È÷Åh"8ËÎnùƒðÒšqá÷&ÕÁ(­}gJ"ˆe`¨FzÞ% j}¢4¤¯Æ¢Q0\Ôl͸3®¤®D]Ø$%™‰jÇ vËæ@“~'ÿM:a¤¤æ«(M¢4—Ò"J«(É݆ÍÆÉÛ‰£ø†¸Ó¼„C@iÀP}¯@UzNÚ,çèΙۘãYÝã,Yž¤¾„Ž,Žƒêší\}Z}Q;2N’’ÔÑí4¹ªÒM˜÷ºad7u8Ýgî65¡¥4ÚÔ7|ÔºÖG­ºõ€rÇð‘nVüÆÁðÑ0e Â˼»ÿPøXøt˜$ÝrpõÁ"S -ƒ@SµB›¬ðšÀš<Â<ÞC¾c”éëè}†ì÷Ó;ú‡‡ßÖ„Õ@:&äzYŒPŸQ×£±S12¶Æž‰ñŽTÎajl”xcÌ+¡IIF%R%Âï§N›>gö†æù»…¯þUMU¼%9&1ã‹5wÇÃ-KnN67Íxqœõ¡Y?)²ÈbxÂìää“Æhîœé6"bü5ÚÎBá`Ö"“ˆ·^Á4[ §ÎäJ¦Ä2…Õ‰¬ý”7ñÒàQ©–$¸‘‘@Ÿ‘`pJ½hzAÊ@ûÀD×îŒg´Èó!^ÁáŸ//¦S©×­o˜pVË›Ðí 5Ls“/ÿQ£ZéæÂÁŒ2¨oWhh•2I!St‘²JÙ¨ˆ°KŽ0…½MéJ)I†U )PuJvr$bd-£ êeØÒ- 4ZK »V¤‘y¸Û¿C{I£qO£üSíç(7hyãõ<êµë…ŠÆ.LöI$š…ÁL!­„ éµ +Žà¨-'»ü.ÂpÑû÷4Aò$LñãÆ2TWÐEë2€‡ª‹( éaYÜG|Ò(ü>/š`ÛX~yñð8²Ï,¤™Â¬JøI½š·ÏLƒlÀb(¨ý9#­mÝYëm“©¹r]:²ÆÜU&Œ"„yôÍ'ö¼°ÉfµÆI4׳Cw1rÉ“Í.z²v]ÙuªÖ»ñœMqˆ9»H]ÓV·¾Å\ÄØ.ò]ä-ºÀ­ó]‹±ë~‹‹íOê?ôy_ ñ-VEÞ4Žó÷9Ä™´ÆÛâd÷GåS8J˱—ÇàâUNÑ1–ÙÖÚ ³L£ÏXf_KÎ…> .Ç3ŒcöÓvôò¬õP¶Ü»Î ¼Ð1Á­áÅ65d2å1~š^ÚT<%žE*Ÿ}£¡Ú‚@¿Ò¶ÖÛl èÛßúUöÈV:6@Sãà+=ðÆÞõxãÅ ôs("FÊ¿ØÓ0•_ñ+Ä”Kˆ—ŽçYË-Ers< Iy\dò©®¯M¾÷ÑÙcR ¦&Ô`j|ù¼Ée_M×V6¸DWñ¸È„&á×õ nŠoýÚš—»¦ÈË”ŠÉóªÃÞpã¦6O +{|ž1MU¡–ì7A¼ƒä¥Âœ‹ï¹çøk—[ë·ZM~픑s¤}²±Mš¿œµ«}$»Z!z4¦ZÈ©HNXu@€uCýv÷§°h3:Э#+ñ’0sFÜØ:'©dD}µ>x¿d¦d|Z_e(“Ô-,sìƒ{²¯ŒØò£²OËxdVJ¦ZêÓMþã›á·è½™Þ•¹9¯ñŠˆŠF™B£Š¦HiÀžN«Ó›Ò´Wît$M º)ý$eúü4÷<À+i¹˜€q2}†:âQ‡±?ýVšw÷U“­gIW“¦õEùP¦Hë›rň_F¾Ñ/‰ E²žÄgàìƒ÷¯Àû?-ž‰×L&ë0~¨¾N'@Ÿžhwü‚JÆLuJtƒXŸi]&9†]^N»l¼Xò£ÂØXBå-%;¨lÌ,YPB}”øÐ¥„ê™8¡Ú§Ò¶F*ŸD}÷N:2 ±}‚ ëAŠ˜ÃNTW¢ú6&ðªø&M ›uŠ—(ÓßåË¥u° ŽUý)u–ºP¥mŸÊ™Dg =BW‚1›J„,M$—¶²ö ¥]”öP"¹ô]V +^XjŸÝ˶ìLèø>Àã4c`Òaš†þKš\Å—³B«„ñB¢`ª?G¬›Ê!u«z*’ ž*ä„°âãgImiISE`üç¿ÔPÐxSKØ3aâäâ sj.…’cý᪆ð‹?Tw•9ÈýŽUÂ5 +7TÇTÙ¬šRÙ4¿.(Ê2'¿PâîòéÃaG¨<+÷ɯq.B’sGm"\êU9ÿ1<§r² üdDrž“¦ÒéJìëøà ¼ Jú™¦iQìZÚ‰árÞ¹iœ§¼×öÐéeH×b8²°ákɆ¿‘“3jÂ}ñŠfôfŒx%z±¶ àY¸/,VÐ Çå÷¡AÚ`O‚ÙfËE^®ó6,~¼˜]þ=~D?üÄ-rÈ*‘ ÛÚ¢Æó¤3 9쇛£„aôƒws¡ÄônLÌ7oGi'Ùv ñúE d+h¸X`²˜•°¥JJÍ”¤.cnÁ¢â•-p‰¬¾¨Ûí ²úmþ°¿Ê-Eý ¨<,æiÚ†Â8TgN•€ê?5CŠx#”½91ƒ’/‘ðì§!z”’ÔÑ¿.²5òLDì(ËZY! Œ§ªŒ{/ܽ·¡¥kA}ó]§Ü^ThwûÒà„9µã¦ŠÞÄÂ'î]þÄeš}ݶöËMí-ñBî ¦Œœå÷Ìö²„ðæÎÙ¼ˆKbA:¡ –@—œDiÀj@C•º âÊÈãÒ(áb—¨iJ­pª‰Ç¼ˆ+z1Àí…F‰Ñƒþ¨·Ö›ö’ìÕúBòPƦõʼnûÎT€û*a—$:ôV""P™gËk,Ï|ô™ H±¥[ë+¹Â–/Â6é‡;U®4ÁS:§ rH ý‡”cÊir¬Œ~õ ̈rœ‹=÷¬uÒ =$Œ=ÎCNÚ.3ë6¬ÑP”øUc„é"NÌ…2˜ueAR8†Z,çàC¼ïÚwè ¼ö<Àn“"¿C£K}/¢<ÎÃô.}/äà¢ÀØë<‚·ÊQ?Þjf„# +fŠùAÁùXþåúE““ÃZ*ç]ž¬L˺ÚãyÂCR¬ „Ú²2nŠ¯qb£¯ã±ÛÊÇÞ±}©ÖØÜà<æg—<~¯eÒçÇjÕsù>\È5Üýè­³[6•‹"çŸç|¸š$•P9½=YyûÍU,ç}½KÞ—]Èúàvâ¨(ÜïXrn”NÂ×Pí¨Ð`EGp/p`ļ’°Sç–\•¼Tk©”±k}*1Œ4?×2HLsx­d²a×^À®РEz6;óL#ŸׇÚE‡tI@´LC}>¢'¥3P²ðii“ˆ¼"í‡{åýÒ[ÔÞ§ˆ&ÿZÁmž˜/æ«÷ŠƦÏxù²P4üE¾oã÷6þ`cnÞ¡5²2#»FVÄÀòËc®VvQL`…ó‡x©F^¥(JµÙðéõK¡ÏÇù=€e#pÃ)«TQ¯™²zƒ)ç¦iN9;}L37?ú+ˆ›³È£ÛN“ûï‡ßÕSIO•ñOÌÙÚàƒ¦· 5’O¢jŠ“3h;PHÕÕg +©ú.J %f+̺âˆ,4Ǥñ‚!¿‹]¤ aÒcOè‹Ë!gÀ $Eod´a½ áš»©Ñ%0åì:æ¶ä¼ý'su—á&éKV#‰¿hz£QÊÈ®,;1ÍÎnaeìvJ÷Rz˜Ò×)Y ¿ß Â/(½Gé,%©cš›Y¨à£„¿FJ3(ÝIi)%¥‹:tRa3¥^J/PÊP:@iº§üчïRú˜’Úe°2­Œwʹm9Û P&B  À°Úí€3z®K%c™s­ú6Žf¤ á +Ÿ ™ªP&Eè§TN©‰©B%€žk‚šmCHccȲóSCÀKÅ@ £ÚTŒ˜â@1ÚƒÖD1r1ô}IVg¢$«s»©´ãÊûäÅë=˜ÀvL ؇ ìrìÁŽöŽõøXÎõ¸É_†VOÈCvs³gŽ§ÝCvå*4ªÁ fhf]Fe°™é|ÓP8üÉá7B¡Jxã“0µÔUS{ɤõªœ'Ð(N§Šé ˜Š^µ¦tvRæl„XÁ t¶‹*íÆ„P/Xªi¾åá;j›;ÖL™rWјÐÔÚêÙÅcên)×<#<8|8­jïY|ï …¶‡möðä/ÞÜr×ä1NçcäS|02$8H’hÂ]£÷üröž”ý +ÀêœÛÕä¨ä]±M¹XRØ¿#/¤»²qÓÕ9qmJoØ„§ûÑùÉ\,ÕvBà,ŸÁÑÞ0ǘŽv·>X˜?„×Üî›±EÄÊW´ô.¸ÈwÂ\Û¯W±,ˆ» a̹g]ÔúªëMíÎn8ö«Ür†j ¢ãJt܉Ž‹Púpœ²Ÿ³ó.“§íÄÓvâi;ñ´I¤} ~à?Ù}ÀÓŒµî-nÞí©/Q›÷h_ß^X™_<=T&Þïf³S1‡½Ó9µ>§ùoiW|â×Í)yIio+b?L¢ý°"°†FrÆI}Æ»Þщ¡µ–@?îÇ£v1§üFr  š²;«.ÓPµ(}Œ’äµ#²LZ uu²Û¼‘ìÐâþt‡ôÚýˆ>œÅJ[ì^ÜGL´Ì¶´Yˆ£ƒXº—±tÍ+K'~iùЂØZC{©Ó4܉[ØzJÛ(=K‰–súç¶b"õ‚ª¶ICºÓ|þ8 ©œè9ê<…LvúqŠabé3ñ¸ßy¶ÏY4X ¸¿‰’%·½0;Gka¨FΛ]°Ae|ÕžB ?@§ (ï-.ø`‹ÜX—N”2(QÛ¨‰hÞ¶_#šG+f˜T½ÞÉR´ Ổ±þ‚?ÁŸãæÅT9–Õ”&SšGI‚•± ê‘klÙž²™½ä#Ž¥Ô@i:%)ÿùOI"÷}(¤ ˆ­îeGð%ÖÖÎV"N8šëe€‹  £ÿ%ô·á>¯‡}‹}ß„v³¡O›ÄˆažCŸ¿@ë;0ôîb÷£õ ƒÖ}hýˆ}Šo­Æ õ踿`(lÙmVý&‰¨zaó á^4äqw äöSõçô°¬Ú NWÅîþ5êcêSTÐŽîCO“…c¼§ž…Ã9c–ª¨ ©K· ÏQôQÔú¬Ë;ŠYÁBVŸ•›÷g,ˆé·aj‡Ì…S1“Ù¬™šo=YÛ(=Ki7,„.ý8¦·]÷„0ýf :ÂÞ¦Aý!VÉš™Øm`Ñyv©õUèð!»„õù>Öõ”zÄ.±§°ÇÔÓ v9,7­ëÎ\í‡ú ªêD¬FÚðäΧ¨OÐùü0eѽO°6šÙƒ=4üMþÚð÷ß/t^Æítl<»øRö¦ ±‹ ^Ñ©š·ýŒ©L£¥TK)M©uè­ ®7×·ªØÔÂÙ`E>0a†) )<äa…C€"R‘××|Ïä¡Š.…Sô@78“æWM|'´äJŒ·ýœ)óðÉry>É]0½ˆ¯~úm«/·5ÙháÁ˜ÚÛj©ycVl!þãˆÏc´|¡ramY?Ç»1l7­#ëg£ÿF¥­ˆ_†Õà"î[œGÓ{{%@Pë=åB—'ûñÇ•(©/Ž‚¯„×åƒUKëVÞÑ8þs÷4XüÁ€eûϼcí’VX 5V…‚‰:þ#ÕZPל›ï";› ¿ç­"ÿG*ØŠj±ê° ÿo¥|¤’ÿ y^’ |–¹`ŸG@°_ß`Þ$ñ!Â[¾“ø(a>Z[j¥k-^s=Û< ‡£à]Xò›‹{é‘-®E†VŸù‰†5™ñžÀeBy•ÅZß8Úèùˆ«6A¬,iÓ4åMÙ íwptó£T‰B*šŸ˜ñ>˜áɾ*Eµ¾*Ê‚Z_ÝC÷YX»„sCáv +wÁÿXF5‚*>ȹP +뀀є˜I.­q*qží!¸º * ï1[ŽR[5•‡khÀÄšÙ5ø&#‰rrv’¿Ÿ¼@™ÞV [®*¥¥õ45a$ À¬S¿2ŸÁøN_w‚ŸÁ/ƒà TAµIúˈÌoD ~&üò«©_ +š¯L!PMt.¬^^Mt6ÖÌé~š†~àHþ`’úÎMB%/a+òóhG)XO¥6Ì#êÌ¡)Xd¸bñRŸþg0¡¡)ËÑröžÕlÍEøùßÔN¨_²èŽ² LIÕí ÕùÇ/¯øÖ“ó:çŽ}îŸëœ3¶·°lRŜւ±“ªæ´¾éô}òZÙðZd¡ï•Ÿ4,Ùr[6¶§Çvo®o»¹ì‘œÔškJ­¯¹q5㬜ü“¶3t@ÿtTµgÚŒÀš.D2Zíê?é=ãñŠT€éN[¼N†*­î$>©ÄÁ›0ål!Ûsá í9|2Š¨µÿ¿iû´Ÿi$®Ç ãƒhÿJ·â᯴ßiÃxø+|X²X[±_EÙ¥•h´•?Ñþ¾)¹ Ôã´›ðø/1ú‹èóŽöOdšÏi?@Ú{€ÀJT7€®‹¸À°i}Åt,;G¯'nÎ áB‹'û…JÆ9˜ñàC˜Ñ¨p¡– 0Ü¡yüÆêЦÏßä–A/쀆Z®®S·ªbNùvé{ ÛŽ:N!q!FÅA + 6à#»Ü`Ø +¸(x¦Õ'¡u r8bjéeêZèÅ~(¼­y­N§ +¯¼ˆ ï/»ÍÓ½({ºŒ½‘#‘«¸²ð1[¿Ù¯:§ë|Ï×zË„¾ûüìíï«´Ojž>‘ÿHR$^XóùI ðE†Ï +…Îá_óÏqño¦Œ3}Õ¢‘?ÿ‡äí8^—•µ +ñãF HMâÆZVLXLXÌ–Pꤴ™’lvë€ÀdòP­’VZõ‡)ZŸ_6¿Ý,Ì”%õWpŠ—$˜Mæ7ðó”*¥Ø@ÑQ +Ï´RlçˆdË…ó7‹ÝÆ;â?á3Eâ*Ü3~ ^¤L?7ãe|jî Ž‡ô‰A·„°©!bÕ¡—Bý!:MˆùÌ +-,­ !– nE¿µ¡-¡!zg.ö" ±QzƒÒ/ÌX˜Ù 1¥2J”fPº“ÒRJJw¦T뫾"ìÍûÒm®VX&Â9®„ "–‹k|݇ý>*cÓ×F¶DpÉj‚n}!"œ[ò°&ÂJKs¡¸ú€€ I±ƒ\‚þ6m…¶×Ûq®âK½Þ«Bj_¤—#=x¯ ¯üÀÎ2·ìÿ²÷åÑQ]gžïU½Ú¤R©ªT»¶’J*I © +ZDÂ6›-Å,lY !0  $°=ÆMlaœt`z&€ãôÀ¤l:“ƒ¨®ÈàN·éÓ Æéô±úœƒ£90=cg’@:`°Hóý¾û^-b±»ÿÉ99sÞ¹÷Ý·ßå»ßýö ‡i., +?†I p÷¨¥³ª•[tRJÒ `¶VÞY´lQ¤¸iåìy›CÓ=«j¢5|¦ôÞö†ús+3C•3óæÿ0X^ªYÚXóÀLŸÛ5`ó†ƒåÅ%5Ô×¹6gÛn´YͱˆFS¥û¡d’ž2/d$ÂA!°ÕÑØëج- Nôl6Ü!úUd-È"è˜JGP:ÒJt‹•FDã- +O£ý„A‹7Ù¬¡ÙEºªŸîýg]±îž?ü½îÈ÷&¯éæP ]ò!߇ü‰ˆÍöC€ö&JUï›~Húû„!µ]ÈÓNHÊ5±.d'ôo¬‰kR•pmXXž 9¨ŸDvhŒ!ñ$èÔLª~æT©ÛH&+„iŠ:€:zF9§| Œ@tëFvÆÓ)Ãe¨|h¾ ¤õ!°áóGÀhïý³%àÞ¿¡±ð±nئÒìè f7ÐÛFÏ*ç•ñó|d8oøÐ@GxãèOÌï› ¤ûKó§øÌÏÁ Û@ÐíÜAÎ xßÊd!” Î&nA]¼å“»Kš«›øxov0lª'~î}O4üN~wbaEC({áC,ÞÉ›ò[ò„’"º\Á9øh|Ú!û>Œ,6Èï ´K=G.lSèñVsêxÝŽ>`ƒ¹Ó™íXtˆþ'Ž!ŸXóò1 C"ÿª ×b‘éìƒ]ØÌS—±|ÁKäGâ=ù»ò©öåN!a³s˜z%>#(_£eîD‰ òu¤|<ÞZÞQμ_‡TN»œv¹´Ÿ’’Xî®CT_î©xðÉ{L³ÊÉ.«Î,l¨ Éï9ÝþêæòÊÕ+¿\² °Ê]6»¨º©,[_?Þ5ñëk¾^±\y…ÐÏ‘oÉ–rå0 ¬A –Ÿí 1>Äýó3Ù Þξú­Ù­Ù ÌŸdåšê6϶Â*(‘ÅŸ…±Ð#zÄ‚GrÆ Z ^AìE@Ä@rÔ 7M·¨ùlÄtF+{ÚOØ &iIö&ý{ŽB!>dÚc:¥;4ã4D¿ÀLÄÔúNFüéÀ².ÈX–õLÆ9Xv¾–{2äõ ­Ã”P:*, Ï˜ÎÑ‹„[Mß(˜Ý ôþc§èuq¬é°ÞàWäÔ¸k0Àª‡L™àfe&¨v+î{Ê×´¿°­ySîÅ’*«½Ô=»N÷ë¾¼§ŸÝó5w–üLiè}³ñÁåûÛõŠNGÌä3Ü6ìrzaÌtò¯v[еÁ‡ãˆMÃ#-hña  Æ"d=8¼„,ªšä¸ ×â…½…ài±RA&H… ¹#wûÔ…*Ó~©cËœ@BôÿÐp´¤ô,é[ ~õÉ1Ã)<úŒŸ`º™á­ó‘å øÅŒ›è÷ËÙ7 Y<Éâ0Ž÷òhl.çß:ŸÏÚ;ñr!ýïKù†úò7ñr^þ‹Œëš¹.aøŒ4>£²áQHãeÉöC–»ßy7²ó<”‚nh?ÈÿŸeãAœ}‹²„‰Lí­2ò++ªæ.›åíßRwon¡·*¿¶Þ–WUPTí,ôxà žhܵ×iÛ”i]ôP°¶Üë°böa\…U\*’ßz«~º¦¢‰BZIèqöãЮfBwÃ|—‚#Ãû½Æ +AÚ·#Û‡C¸<Æváð8{5áPBÅá%Ê0w +i"îfº +›¶«(EC `‘¬=ué˜êc—&Æ,Ù,ó`Ÿ;¨¹ó’Só&ÌôÞÊxF„&™™XN¥rJõ,¤í€©óÛY ¼Ù`ÂÚü¡í¦ŽÞ¶]€a”lUØ5øzvG‹F‹Ønp¦tyF=æ',Ra~ +¯71Mû☴.K3à¯É:‡¯ýØö.ÞÏjlã“]¶AT€ëÑß[ðò--u%°wXŽÙ5°ç›­‚ˆGþW¹Í©¸¨y¼{[oa¹k÷ÿ WZlŹuuU#Ó–×ÌMæùç¾n2ÿÓ¾SúYfæýkšÒ äÍ|qóBi3jsÙUd½À#È\i´¥Vdc¸eŽ SýIÁ +Ú +¯'áZÂ%ûEõ@Um²Û€nó × Ž"Η^’?.d`Qˆ¿Žä`âœÆ‰ ¸èÓI.š!e*‰åYØÏ#/ß—w8:¼'oWõm$¯‰v#Îq¦/œD_8‰¾p}á~¸씂”¢”š)µR2þr +²Ü‡Û‰‡ê¡´‹Ò>JJß(¤zWÜ-îv¬óõÅÞ¤ ¾‚Ĺ7û[‰S=íó_ò³*¡•X®J½”žcþ,„]ýeêSeÙ»-þ¢rHÊ1ÁnÈž`²®Z”3Û©t_|u…•šû‚õV™[kq´Á:DGÀxâe•ØíU^V zë.›n`%L¿’ «×x—uÐÊS«L²Ju”Qz„’Òßc=H×b×A€®„“ÀQß(Œ6ø†hWš„a! (âõªNOKWMmX~»`Ãœ½Ïö‡× ?Ó7ÞS1ß±¯f†á ¥bº¯èÏŸ~þyWõCsÜÑ@S³?KÌ«©# ŽJîÓýHòÊFÁQåp  â¨zÀQ\-u„J#6¡Ü4ë…‘†Vl­Èz@—_‚)Æ*©Êã¸ß;k­E«ÿöR¸o²zb¢(`ÐÊQûˆÉ‘ÙØÇ;§к U«Ya(_Fö=È ÌŠ:ïóŠà’!€Ö€”À‹»_ÅF\<‡lXõÓm‹dþÄ â€{9a³QãfV/sAëÒÖÙ~o(ÇåÍÔoݺ{|-¯}EN·Ù`õ—ú¶N<% ¼P)_ÒIR@ +Ëÿ™«€”—‡&¬=(µ£´¥KÈxAÙ™ªd(ûŸFáXw)pÄiT½Dëž+ Â2Œha Æ6†µ¦„–ˆ«£ö–cAb+J”ZËë„—ºÙ›6Ç3Ô8Øoß~"C¾³9¼ø†Ã~"—úÚk?Q”ôÇ1Èn +gy… ,Íæx¹³ÞI§Î:Ï;5VNæÔçà¤û<ŒfÏz΃>ï*„}ä«¥¯cw¹ôF)KÇË«dXUÊ~™yt£”ÎP:'ˆ» +g^þ¶óv;é±ÏøëâCÂE1þcÏ»0î+¢~íhéhòkE‚à«ãÉ3O“ / auU¸4¸iñ2w®w^Õ}3”ÐêµíÏ=ÕÜWdVϬnÙàÊÜ`q6ÎFv<7ü’Ó:ñlqñÿÊzàá%K1§(û5Qy!À¿f̤ý¨X‡§l +qìý˜d„Ë1ÓìÈ:pÝî ¢ÄÇ÷Óüaa|¨…ࢥÕ"P¸QÇí– ÑölHa‹5APßLÒŽŒ=i¯úÓ/M"ÀN\$Œiý±ÛO(ºk1«öêøÓè,‘ô‚l¤´²¢Î``atzœ:u‡Qì"„?Hi˜Ò¬ ýñ2gn¹ì¼nþ-kü ‡}ÄL„v¼”Ê(!R¯šr±~$|õ;±ûÀù1v|‰Wñ;âœC8eÊñæÀ˜„ÞXänËP*:jT^Î!?Y\UTgÙ½[ñ-¬ Ï)Ë‘óæÕV…&þA÷ÃI)vU·Ì™xñAU÷=Ý[º°ôÑ„$å™×%éË þï(j–-…–-…–-E:Lé8%¶z‡ÒEJW(MRÊ ö X&ö6RÂÔȤÌ#*¢Œ¹¼_ì›MÏØàiµ5ƒÞ‰À¾A²ÙQ¾ªÒ„€£@»Ç…¯"“pØÁ‡0_ŠÀf#šÝŒR¶Äû¤ýö¦ _s}‚QÝa}ÑzÈ +Q!hÔ G߶²ÑÏK´T}a(½e Ìû‹t×èNë^ëËxæŽwÆž¦+ªK›W¬fŽš7.«×a³ßj˜»ûµPP1u™í³çéV‰Y¤ûQX¥º|!ŸgKÙRjäñR Id“8ì RÜ^,¥9P*æK„] 1A&!Þc3ÚfÍdVÌ‘©TõÊÙÁdGÖžã +JÈzq¤ ²œX„°p%±—Œ‚,ô8'UûÓ>a„Ú‚ì +O#ëÀͽ87†,˜4KM›|i¼Üg"\9–ãEI/mÂÄv€º ³!tˆÏ€/Ï8ÏaâÅÄ19½˜RêÄÙ‹5é|¼}PL€ôÅøŽú0ã|u>Ì8Ÿ*PW…æñÅÁU ¸7Ÿ + +lžZ‰Q|ºÌUŠøÖ[Î÷ðùW1÷÷ >êÇ÷ÀÀõ >1 ÉÛQÔF|X“Ñħ»ƒ;ðÍ%ÁÕ´Kì^Á×{µ)Ò®É+ÅÓ2wwf+ÞEõÑyïâši¥ÎÝþé¡Š Ù¾`NiþÄßÈ×î F˪˪]3nšø™ìol MœLâtáôMwÁéU +Û/°ûØç"öžboùˆ}DèBÄLš‚áÇ44;±À¿ ÃÇÎÁ»ùcd—áâ\¡k€wæbVßuþËo§s;–_ìì>FfþW1ò{8a-èÍaÉÀ4ÝzÁè*}·~T9£pÄ9êÅ›ºœƒxSÊóñ÷œ—“0yëÐ +<šVZ“¹{åÒ¹¥sÊ]@äÓƒ?äñSñ¸Ê£Ý¤1Ë–òuIêvÕ£Zõž>œ¦±ƒõ%Õ±žÒªÏ4ûKO8M%$4ý²„Ín`§h‘aÇ!¡éAö2;4)­…·ûò0ûºEœÜ$+~ú6@º‰±ø¡p®Cßi؃ÌËÕ^^{vbì5ÇÆp]ŽAØg-ÅEÎG`ö8ŠyÙžÌϽc=4ûÛ‘@¶GUô÷#L ¤ûâþ?½æeÿ1?aºÙAˆT…d7öÊK«!jý.DC óV‚OìÊ„õë@¡/æAcš·3qÄYù<ÂÈÊâguçá[Õž1 B^ľ¯tÍx\ï[˜Ÿp[3¨NoYß³âlJk:Wž†úcÏS¹µñ ž!4ô5*>Ý߈6|’ßÈNBü+êßØ€oÞI0º‹óVQEGQß½yúþºÛ› 4‹žé»jNþÓ”7æ[}e¹53«ë¢µŸîÚ+DKÈ‹ê§yïo]°b1ËuëåÏtˆX” ¹n,\På&d“¥&pTíÈ +Õ¬‡ý£ÁœhNs´ûpÇÏáøJ#¾1㱚‹Ö¼þ; +vG!>bA¬0 sÔ' +`Ç`£qÙþâ˜Þ*ãÕœtà̘¢·ˆéŒpÅa3ªr_A´-¢o/µU ë®'Ä¿Âu5~Æ|»g¾›‰£Ìsðª?c=%ù(Ì/[oÀàµÂ“¬b ‚ú1A´ Áò«-§½Š-èâg3ÏãE¼ë‹uãEZoâE"¶N|8ÿ-]øïÚz¢i55Ã'!*7´g+E5?^и¢²£‹áéV[Qn}}¥|mn¸dèùæ ‹Ã–ŒÖ=efµØâÓ!¬ò{Qºä¼½ˆGU;`HàˆÂ_(ƒ‡˜u +föÊúC3–XÇœ²@‘üT&­©G8¹´<“Zí'lüA~X÷‚/6é§FÍÖ ÖéÀp 3¹W)‹rZ5ñ U±f²Ujkpl$‰í»û&²̉z‘.O4I\­5Z„ž˜>Ÿã*­Ò³uÄ1ov´:tB¢ä:(õJpÀ#èèiǘã’¦øPD ód@ûûö2Oö Ìvz åN´?–ƒµ>Ÿ•"%4ß)¹Xr¥„WíR ±%ÄF”QFêMº%ÞRÒ^’°J‰¿¨?rŠeV}±·•„‰}ü5ÃIì`»OWÊ!mÿÈð‰™/³ÃP³TN©1îÚbKÌšˆßK'_¦tŒÒ)‚7[|Е¹ëàŒ+š?êõb9öz½º„HJ81)Î=«,\.±p¹ÄÂå —Ë“;Ï›•;Ç÷ê_NiÉOÐ’nÃŽdK`Åп߰J‰_~B%‡7Ҏ𚉪꥔Ð@ÈÀ|¢6£ÅƒÐ‡ #V›öÔz’õÕûz²Lgªmá.Ë¥.Ë¥.Ë¥.ãú¿˜{(Cy>4C½åuXI®,’Û„ùCRß ŒR¤ ²¹xæܙū–5<È÷.,™Ã‡k×ÎnË/ñ.-Ͻäò¹Ü¥ U÷?äË~Üâªrzr<¡úÊ¥ä:×fù=ÛI3f•nˆZ|Uà “*›•< % ;@fBH'äs`éhÈ!{š' +c㸈 É÷fÓAv+XC»£/6’-ä|Þñøÿ¨í^î‚þIJpëJ < ñý¸&ž3!ЉÌ$cb¦¦"€ëS—ªÀ³Ðè§TA© ?¯ëº·¸ü.¸ÝÌ®c?ÊT†qž2,ØýÔSî|W¾Ó›»¸tÁüòµÇK¿²õô¬*³y}–sÑ—Oý6‹úí·ò5É//+¬Ñ9ᡠïŒ{vÁÔ§Éßâo÷ëûcQ4ÓNÙˆ_`ýXK÷'øÇ$Þ‹RTã)5Ê<{,¶5í°¨¹‚Ò2{nBúÆ®OwÕöƒWg‹eç¤ä¯;d¡q|º >ÝŸnÀç&÷SnUSãIÓÊ+š.œÆSw|ü˜ûdfOºŸþœ·ä8Ä(ÀÚ"UîÍŸV:úÛl~«x®Ï-'BvâÿÌ«­ Ê÷N|§¢%xx¦«ú¡F¹™þmò3ùÿÒ¸Xä׸eŽb:šÃ0m¬Ù>U-Úµh_¼ÅÜ{6´ÁÙ«lw2¸Ùdv({‘±oƲV¸%6ŒÅ<§:fÐáÒUd²™@ ÄãñW•×!ÎÏTr¤Cts¡¢6+Ï(_Sô‰ ”{ Êù…re£ÃÅ(ÐHs‘Ë„ŒÜÇÆSXÆ?0~ ;oŽÓx|1~ÌtŠÖsŒXÆUýüè:Ë€å+úÎO,ï—ýš lt¹e½e›… 0?m³0ÆM%îZ£±BÔ´ÌÄ|M[Ö¶?òØè£ò“òÓ²¾/þù}™YLšÂÄ IF»:v™Ñ‡ô58 ¶_û—– ó`‹¬L˜äO0¦7'?Ó] 1uë +E¡lSVI¨Ê©¾ØdA(¬Â(!Dì²±D8Q*µ%CÙ¶âÞý¬á‚<ë"2ɽeü¨4 +‡Ô-æ…zl!².z•r(c¾7VqÿëzAÆc! <t¨óJ%ƒ4›ÒJ+à¿Öÿ+ÃßF¢¸Ë$Þp‚µ\ Vxî°f§-V‹+qÉ,*õUó+X2̨zÊ€2³9lQ–Ø­„ÏB0j&dƒˆÃbÈrC±ù|Ö…œo„»Œ}|´ÃÞkÎNP Ø]0ýdÜla{AÆq̧x³[ì`¿Ù~HØ«­Y/²±¤[š0 ­ËIá|Òù´~3p‘ÓC:0â†úZ8¿¸Z'Ö•™ }4Ϙ %€ £wä@Ääž_µ„2d|AqÓ=rŽ·¦I®aw,8eÕÊt,ÿÕ£NÅÖ<ôÍŽÎ,ƒµcÝÿó%Vƒc™|mRZ¶|’ Ì×Ô<ñ‘üÉg«×| +x»1Y#Àð–)p´+½êŒnãÉÛŒ'¸FN÷âÂ5d +ÎÍLÌü‘¶°«©£oG¶ Êü043» {ëm.";Œ¬W_À}÷¢ômœZ¬¸Iö +ía•XtL_yEùžò·97Ôò<·Öë%Ä*1+ê‘eñ ¡XŽ¸_hSûbΡL»GÜã±{0æ1ÊFÜ_qÿ¨N‰gÄK¸ò +²÷a¼UŽ{–¹×¹Ü4íÿ·ûwP¯~êU;.?‡K$@†'vÜ.î4ÙEÔvnxdNÅ(ñ +¹àfÚ Ó~®»&Ú`I¶!-ˆÖËAП,C°=á£þøžŒƒˆ³f²¤-‡p‹ˆ{1ã®á}*š²é¿Ÿ×*}ͧ1kéð¡œÐ´šÐ¬B_v¶wzæ¿|ëçµÈ¾‰yõm÷•:ºe5JÄ•O“wÈOé~$åKeºƒ9¬R²ÃÈ"`ššUª ¶äBMoW#o÷ÇGŒ§Á®©Úx¨>'!Ji¦>)Cl*'" Ä®BxÝRq«/Qöx¬ôزeÏù]BÖÊhçŽÐUM²OD[¿ˆ¢óf³ÂÞ!ìã¦#¢å#ÄZµŒÇŽPU¼ö‘âñ$_NØÂNT|f…Ò©l§õŽ®.¤3+)uQä«ñaå4è+ Fé¨ÀD/ñòo< ´ôˆ07HPÚ@iˆ’¹n‚LÂO©‚R¥%”VSÚHi'ܵÚâkì›ìDŒdâ "Ä!-¦´ŠR7¥”Œmq‹ÃO¸&þ’ã›"Þs©ô‹ˆ=ç¢ç\BƒTªÌr2*ìV*] +LÁ¸òó&\¡:*TG…ꈆņ ¦„‡óiRÜl÷ÙÕ˜âvª¥ji§ZÚYeio€sÃjûF4ÈAtPwl˜¹-¶|廢=&jƒn”ê¸=9šÉZŠIKÂÑËÚKè.çÚ—Ö3;³”¬èôY_ +5¶T꜡òù®ž`À4½Ñ­û¶ÍU×0··²ÚQTWYT°è^»ù[^kÈ`˵;¡›)?#oÖ—éMº(bºHŒk V}‘è \¯—·Ë[õAº>#íz–z½‚žßÆÏGÒ®›pæ[±¼Mþ3ÝY"ü dá{ÉlS"¸%D±ZÜûãZd¸øHÆiÌøÓ7$ˆ}b¢ «h¢¡]ãàéýã±X‚´Ã %˜˜l ëšl˜IÐ—Ñ ÇÄšDö²&d< ›““mÄ3k…82àö¼ñX;ÔD‡ó’Ë¢òÚ ]ÒkÔc®P£y ¥5!» |âWתFGP5yðˆ|‚G,¸; =¢ú½‹x‘:/$’ÀxlÒT¨ž7G²ˆ4‡Ãó«Û se9·°0OWPÕ<-ÇY>?™_îÄ~eéŒh8 ™þêx–¡^Ú¡YÖ+²Áèã=º]P\JĤGôùx~¢»]EÆTG†×Öøs†ý ¨zÕõ¸ívÌPÊÏ`j¡…»waE Nv ù[èÁ)NíÏaÏ ‰Žì¤RŠ²Ò˜íOb§…hæ*Ò8 +æqa¤Ý›0¯<âd"pª¡’Ò&ÂÑì‡B¢ÅÛî¥Ê_ôÞžûM³aI°Âé FØ•|Ž–ëëõ‹Hôþ5ˆ@,z?Š?I´"¦9ÿj‚å“ý ‚½oẗP¡ÔVUrI\x`KÌK ž¡àR}1ÞÁ¹wpîŠê•¡ºfìǹÕ+ƒý3Úð[‰lí'øçAÂg|‰²ˆ}ºÒH»Õ©ÁïçN‡#‘pxºîÏò+*òóËÊY[¤Ëº2y õîÂäÚÕÿ0´Å&‘ç`º'ñŸ…ÞÄø #Éÿ,¹‹¶ÈoL,”× Ðû+&¿Eø ¶]‡„üAŸ›âà‘4ïkS#å7ækN‘+¤Æg¥†½ü>ñ ‘u¥+ˆþq ‡‘•1Ξ"˜ff|ÚAÏ2y«gÖ3:£QžŒ–¿xmFAãŒÿ¶bÕÄϾS,{°gâÔzôÓLjÇfjG@~<Óó9¨Æ8°põ9ÄçV«©Nºl´×'|v¯ Ô,âuª”Š"Aú‡» ÂO*+±Å¡ãÐ$ŒÄMcé.AT•êt‹n  éÀ®„rî°ZâùÝ€Æm°“h2 âÈ oì"Öר#i¸P·HWÄû#Ê $Ÿþ:5¢qkX?®Cáe€’‹èŽ@]ÞâKt«ñàÝGؽ¯ÿ%¦õ!×k06BÞäõãmú”·ñ¼ м м м м-u!÷õüï)qß#?6wZ¤qÓÄ[æºÒúܨ³8ÔR²èÁ³ËÃ~%³s‘3Z7'0ѹÆ3#V?ù y«Ü,UnÜS Ÿßï9è˜çTÔ,1”†¸:êi†èÚ®ŠiŽ5!¤ÑÅ,‰ˆk-hF\#;"š +">¶ùï ƒþ‘Ã4„âv5&ñ”ÊfÎÃß!l9\8d™F]0zˆÞ%¤M®p¤5ï9Xê€àHÒßDö>T)ªÄòi[’Z"Éé«Èvƒœ€ç²buÁ”y¹u=,Ž¿Zs;Œ¸`ž<Œ_sÁ×ùc+¬v¬^h\áQÄoâÈLZ'¸_açõ±Š(×›‹`&Pôó<И|LåØLj1a +zƒxOP /¡§l‹Ý(ŸŠ(;Py¸ +sjB¬ÊGØY?Ú¶—?…àUmÛM4k-õÆÙm£ïY¡Öªß‚ÛÚ°Õçßd$tBj½QWMaµesЇ*/ÆOGn¢Þ–"?ê-bkÆ£ÞŸP&ÓÚ_š 0ÄL4ú\‹¹Éº0Ðí“çLœ™x”Cœ|:Ëhß½î F³§Rì ×åù=‡úDð“¯oåà'ºÐ)ø5òl駺¬/úO2ççü“,ë<ÿ)­NîÐeÓ<ΤÉeâ_i“ËhÆ*³•B 9Š)ìRôiÄ2>¹2êW!ûä<Ý?âêáú™Ìúé˜Ê8þÆÀÂ0_bX¡m1ÝÊ®QmÛAwñoÅdƒ^•Ú1pEÕ$)‚6A€ 6©¤NèXf!èœ]P9+4>ãWº3DåÌý/xÆy\ý¹Óm}0S¹&Ì.{L¥»LûÀ¬eƒÈ0©1žPä”Ó16∠t|`,ÉK4‰@S£Q†Ãb3ˆ€$ñ %jÁ¯%dŽïiÞ:¼h$I «Óó,fp7€¼!-V?î·®Á,7gù²à~™µ*«;‹Gz­Ü$&Î|Kš7Âá‘ Fg«…ĺ ëEY +î‹ÎCN~æ±L§(½Mé³O²#$¶ÙSùùW»î^°à‰¶Oî¯Ê/qÁéÉðœßš×þˆ;§ÓæÈò‡}“ÉÓ=¬{[*—Wñ˜äÚhLöÁ ±G8ÑÈÄo( Xµ;¾ßJ¹c,Ö ºBÕÑZ£¥”ì”äBü“—¶XeÃ^NûδtI§6@¥tPª©ë4G„‹ÑË×b7{::"±P—=„¨wDÀðcXl2Ö(¦¤(Ds|XŠÎbYb ö~¡#m‹=…`;Ëö–½\FdãSe„x¾Vö­2ºá§eãØ}¿ìïÊØ¥4gvNÒìù-¬j‹`Üeryñ¢¡ÔÅ•¢§Äû¾Zö +•åtÿuÀ +t^Gš®ÜUåöæe+<@Ã÷hwncÍ™cõ:²í÷†uËá´Z& ¶æ=þ¨b0êÿðÛ„)/fþNý#þ[âS·‘-Ä.‚ó‚d!Õ5ão-Ä.'A² ýïŽe ½°ˆš`òÀ Íé¤vïs~5KóÿžÝ»ñÿOv••.6ÝÝ×ÛImÓGÿ!6å†'¦•æ5¼4Ÿ´ü&}Ët[Ïd]ÉögÏpŒas¾‚Íõ¼çAσÞßkþßæÞŸûJÞ¦ÛoùoüEá³Á}E¿+~%ô—%ÿ©$†­´9¼§lmù÷*¾_ñýiåÓÿ¡²­ª¢:'ò@äèàÝ·éÛLÛÌ‚”­zæ?Õ­¦ù´ýþNÛ¬-ÿûÝþòîÛlyöûuyÿñ­þüŸöÖ k(oØvë6çK¥´õ4ö0’Ζޠ…BV ªí’$µ,K6¹X-ë$sèYµ¬—¾Z®–ÉÚª– RIè/Ô²Qò„FÕ²IZú©Z;ýuµl‘î+ÑÞŸaÉ(éRË™Rµô?Ô²Uz¨ªW-gÿFÒî±Is«þ^ºWê‘z¥R¿´‘¨©ni›$j)(Í”¢´5P©UZKW×JËé®^©“Î,¥»ÖÓ‚Ò|i3mÁ”§ø¨“ö´¤wÞî+åÒ:©BýÒ J•Ÿó­r~nŸ#Ehâ­šŽÅ3ÛÔgªé½=Òº£WÚ.=AõÛÈ_Âû‡¨¼Þ”žRÇ ´žÚÊ5{ˆÞ¶…¯¥bªÓrÚ/£sø'}1¿'y¶“ÛÔEg‚|Çzõjz;Š©VYÄ‘ -§ïoäw'¿¸ŒJ]TâçÐnq‡¨{'YÔr;_ rKpo ckÚ—¦=‰:¯ä§è|ß;ƒê4ƒöÉú¤M«Ã:»ê÷Ÿ ýf:3ÄïÔZ,î\KWèJƒ”6ÒñZδ¾_Ë5/}™ËÛh<ƒSÆv€¾Š~íeˆªæZo¦}Ý@×[èù¥‰­ú£løò2i Õ#Ð*- ¸A»Zh¿œG` Á=Î.£üÎý_Ås –Ÿí¤Þê§1ìL̺?r+³8ªßÃÔŠùÒƒD#/¥’ÉÙ Ô"1öA†ãdb^‹Ñ¬`hп¡h€öi&ng8Ú¦B``3Aài=ŸC>¨Âe/Ï\ñ%QÀïf{TL±‘ïÒu­V½t¥GÚDg×1ÌU¦Ôb;]íåg·¥´-ùì:®µx¯ÛNºÚ¥>‘앵tçZ®íîƒäüÁÌÛJý¸gÒ6õªÀc[xÎoä³jÍ´çD EÝý±–k‡:u¦ÜÛ“‹.îô“èÍ'yoåÞíæow§´õßB÷ïTg?z¤[©õi8`K¢&ê™­\»µÜ[UøïæyŠzÔ>í繞Š' -ä9¶–G˜g enÅ©õý#j½]½£R…¬íTÞ˜8³…î\Ϙ|ã”v‰vŠqNz‚žÜ–ø–èåÍÜ;kU,ÚÃc©‹šîLî­Üâ ãÊÍ*VÝ™¸s ×s3÷â¯|˧@œ€ôî:ºO´CûâV~Ózu]Lƒvm´Åóëøn­wžPW–͉AMžà£õ‰swë Ñ_þFjÛRñ¾¨ÝÀ-«]:¯Wûb-÷’öÔTªý˜\§§öíö<<ñ…zäöýœ„‚Û=/ú±›aR` þ”žÕj"ú·ŸÇ´“aâÖ•\kcr&ôŒ†=Ò!=µ¾xwãŽ~5 ÿu©cqëŒ÷­UgèTšâöÔÀzzRôµÖ²µŒ7«°Û“=ôìö”º$q¤ÖúÔNŨc&)œ\¾ý$ñÅ}´*-¤5÷!JË)µðÊ‹+Åw¡´ŠÕÞèRñÖ­Nh{r-éb:¤3Aå¦hê,Þ–æ]¬Î +|«œž«ø½¯Áá:õ›ýj¿oáò“‰98 ‰ 8\ƒ‘i8<otª³q;½c:Z +U¬°QÇé4YêÌHëä:˜›â/Doßi,4¨Jï<7ÖMÁØ©­ÇqÃ[*­¼î6£2 Ö:9wÄؤֿE}b#×[TÚG«ßZ^Y’8 ‡!n½:«¶©W*¸`€¹9AmãÖjÏV1 NmhO%éš•w'1n*½zûÞžJÓÞ*-\ÇkØVõÞ Œ¼…û%‰åÄÝ…9+Þ :´~r}‡¤ ×z1&žÒà9utçsßuó×¾ÈHpk·&V·ÎD‹:çÄú½A¥+·$ÎocxïfúuÚ[CÜÚ¼ìQóäº×«Ö¥'eäÄÈl½ ¬§Ï²;÷Uu +'³€°Ñƒ´B,cþ­…ù¶0Ï”ï»eýhåmáÙ–äßVµîTÇPôÀVµv•R*®q#‚vÞ u¦ðZ§·½‡ÞºM]¥“^‡M…Ì;·>ù¥í y€FïTiñNA w¦Ô0I¦ÓÉ;ïJ¦r)‚žÝ,ÝÊÞÎÐ:õjRöpë<üÝ xUE¶ï«væ2ˆ +(!ŒBŒÞ~Þ¾×¾j÷”+ 28µâ*O¦Gi®#¨h«84jk;  ¢2©ˆ8!Ãhš`Bh¸`ì®û«UµÏÙ'9!ÀýÞûÞ÷öþþ»ö®]µjÕªU«Vծ侶ÎZ„ó¹šzr³·Æ#Ä;u’u6ÈÏ´FÈÈ{N\kþ‡ŒÕ½Å‰úhõ÷Ñá^Ç“-Îo†ø2ï;Æ÷‘Tv(ôùSY WB}v»È·`ò\.yâø²íus¤Ïœ%µ?ör¼íjòW{^òf’°b©g!ƒeö~kRï m’ë¡ÑY©[k[§Çá<è!ÞçJÌæS{ _¿ÈSŒÎÜ’ý¹AÂkTGC¯h´/ç i;§YÎBßîg QÏïVñèlŽ3¼ç>H%Öònõ1á¨k2é%:Rê®à ó’t#H*êÃdüwq£Õ ž·ÁÒ–E‘Ö Ë kŽ¦N?Ý +ZÔc¯{~>ÂK6¹œd9;Oˆ÷»ÇJÊq)=®1ÞÓMôŸöÖcÄô–cé+c<ÿaž#ñ¶£ó'¡"©åí2§"¾õh•¯G«ÁÞê{4LÿjÊå&i!7·¶®-êóR“ç2Ž†ëÿÉþôðøZÌH_Á)¼q§‘Ã"ZJ'œc„Ú12¾î¨U2­°µ£sÑ_‹dÃùùðOnß#'FgÄùI^\jº‡Ó·‚çÆääuŠÄºItmq˜¤÷ÿI¹EÞ¯qVf_-mÚµ;Ž@ã ½ÞY‹722Z[;q›ð7ÎÛÿ[’´¼¶Oèèý÷äµÆuKzTÒ¨]§¨¯YýHÕ‡¬†‡úó/IúsxO§¶×ä¸KåQ%|ˆúæIŽòée¡nÔ5꺾1įˆÜ¡ŽlM#ê!&JJÖƺJ¬oíìÿÿµ²#™éôÏtz£Åáœ&ùdMέÜ÷ò?ÆÛ‰°­Æòvˆrëû7«ºfÒ5= šžuí[7êG×óì ­«ê ï=¨…­‹ãýbùž–øÒÖO¾ôWW²¯¼³9óå›Õ¥Øš²6x¡Ê—Ùo?ÿÞ}ɽBf{“n€Ðr4úrµ´¯RîûC¾<Û§KDšJÞnêJÿ]¬ŸP½”û|áµ|ýëæÓÙ¶¤N½ÕEÄ]àËëM®ðka/áÅqÚŸøD©É\õCÎœdºR÷¶ ´{=Ë¡HÊÞ÷ŽóÙÝsÚEdd)÷—o•DÖ}%vaÒ¹o—]¤ÎŽÛÞR‡î¼wué&¸–pu•ï¡WIŠ‹à«¿ÿ¶ßEj×Û?÷—ú\(ùm©—H¬ãìRßÊö>AåL/KLJ•ÿåñ’ûIý{Ê—¢PCjó‘/-ÝSJí+­ÐÍ˾‹ÿ®•Ž“}B-Ê7Ð.Rï~)ù ©%·A*K¸HjÑMäÑSR÷“UŠ®B©g<¿ÍÙWâûGh:ív-ß3"î~£›ºŒR»yÍé"J®…ë–ÿD-œœ»øk׸õˆ¶qo߆]ã-z©èRm©\!=®›¤ê"íÑ/.…îÒK{yÎDô(lÇ^ /s–,ß°·„éŽÄB8ZaÙÉ-x¡|éîé9ì—FýtÏôëEÉ»?Ü–s¤¸\7xx÷?ì»pLÍÙÀYPµ»þ™R¯¡–NHåŒ8•šÔÃ]ù2‚†_žÝ÷‚šöºî7]À%2:ÚRn«~ƒo­3‘ù0Io}†0þrâ¯RƒÅë&éÇYXÞÍâ%‡ó+Çûò=ÖKÄ­9Œ‰é=ühéFç)$Ö~£Ü¬÷?»±2¶#Î-~?Aè;¸yJb¥`°ŠîeJøx‡›½ ‘yªK‹Tb×Õ11÷¶¥†ëZÃdR¸š˜Dåp®Hhœø nN;J¼áäšÙ=õÕ,º»bˆŸË ¯„ÞOM_$œ»5dß)_FóÄ7;zGù½I|žÄÜì¿ÃqÈ_8×O´r‘h´óPFŠg2Üó3DÝ©j~A®g‡­p£_‰(Šô“„§’XŸQG¿j8¿n°ï=ÃýŠNBkœnó ÷ôÜ5H¬´D÷~ÅûŠ+5ák9ý¹Õ—x“× WÛĜۖrkœ#?Tä=Dê;Tø»£ÖÊÒÍÞïãõÜùƒE*ÜYâä06îñ'$®@ ñ+&¡Ï®+$æã7©Ä¢HÜœ<1ËvëÓ7K½ߎR}+v:9:2M¬%%4Ûimtµ ,Ùí» ¿†:í(ò«È7ù=ƒ#1nE?º®iùŽ~Û K¸MîŠd‡At'Nb¦2"²J gå£_}+z‘¼2î J–eí½3Q) Wá:YbwU²Uêé©EeÓÕϘ‡ú¶K¥{aï/R5×D£òLŒ8¶­\ë Uîû˜­Ý-*Õ*ÿðH oð{M'íìLäé+­_$knÏÙ`ß÷nHÑêuíë&-6º'uó:<>f¸fÑ/ +câ+uïæq£Î¨¸…Jìe«½)ÕŽƒÚc÷ï9„{xöèf¿::\V'œDkJâf¿æ“,A›²‹ÔÜæMŒÑ}âý6Ái/á±H¹U—ºôõhÚÍJîÂ$ë}†rû­V»rGÉh[ÛWI^ÿ/Šû + {íø¸”<·Húš^MM­qãÀUsÍörÑ’Aâ÷¸Õ d?èÌ£ÞÃ|«p1’»šßb‹äíÑïš½N´íF•&ûÖ•™‡ž¤:´üºóo ÜtǨ¡êø¡7Œ®òTºä2’ßþyTâYƒ •yÓ EƒUGY4RºëmƒG Wg¹«Ð×¾{ È›œ<æc³A.Ô:¡_Zg«vª½ê :ªÓˆé¬ +ÔéXã3¨Û?‰×|Þñ¯Õ¿¨UgÃñ¿!sÕyê·ê^uŸº_= T©‰j’zX=¢U“ÕcêqõGõ„zR=¥¦¨§Õ3êYõœšªžW/¨ÕŸÕKêeõ¹Z¬–¨¯Ô2õµúF­RkÔZõZ¯6ªÍê{õWU¦~P?ªíªBUª¿©=j¯úYU«*¦~Qÿ rN×™:[çêúxÝT7Ó'é溥>UçéÖºn§OÓõéú\}žþ­þþŸú|ÝE_ »ê u7Ý]_¤/Ö=ô¿ëKtOÝK÷Ö—ê>ú2ÝW÷Óýõ}¹¾B_©¯ÒWëßëkôµz ¾N_¯oÐ7ê›ô =X߬oÑ·êgõŸôóúEý’þ‹~U¿®ßÐÓõ[úmýŽ~OÏÑóôûúCý‘þX¢?Ó_è/õR]¬—ëz¥^­¿Õkõwz½Þ¨7ëïõV½M—ëŸô½SïÒ»õê}ºJï×õ!ýwm¤AV4 M‚‚ƒ“ƒÁ)A«àºà¶`X0"øßAQ0&ÜÜÜü!øà¾àà¡`RðH09x-}dö¢ô±éS²NÍؘ[–þrnYÆZÞÌÍîIþÄ è™Q˜}ŽÍž¹eaZ9׸’嬴Øò3چș•±ÑÂr’±6„Éz,khÖÐìÅ9ݳËî˜Ó'saΠŒxî“ù`vÇìŽömNΙS²ó3§¾œ9+È•93g`ÖÄÌù™óyâ$÷YCy&Göb›Ÿ˜…¤z,;?„}—3ˆÜ˲óI#©²î$ °eÂGwÎ’®-!¼s<‹-%›7ûW"žrÞž=0ûAÛ6\­¤KŽîŽ»d*$?Áò{0çÛ~¹ehGµØ³\t¤¡j¤«&ªeÜ +YËZ³#çw²zÐC]ƨÖqä +F€«Õ5êZ4ÌzQ‹4 ûµ>ÖêÌUóÔ|õ¾ú@-PŸ¨OÕgIvh%v(´6û°7ÖÒ: K“­ÉÒu,Í baò±1m±2í±1…XkW.¢XkrE Ëa­†³ÿKߦ‡êaz¸©Çèqúv}‡¾SߥïÑãõ}úý ~HOÒè'ô“X—ç°/S½…yó +Væ5ìÌ4,ËX–…Ø–EX—Ož‹eY…mYƒeÙè­ÊØ” +¬J¥Þ‹=9€E‰aS~‰[•¬ [¬ÉÉX’Sƒ<Ûƒƒ6AÛ ]Ð>èt +‚¡bUÆbSÆ‚{±(bS&bUÆ®<Š]ù#–åÉ` +ve*–åìÊ+X”™Ø”YÁl±)óéåiã,•aF«\3Z76ź‰©ÚšÑA{ÐøtµÓTêã@SªO6•6—)S'¨WÍjõšY§Þo›Ô,Æþw±Nï©‹Ô<¯0ëÕPÎèµÓÒYfŸÎ1ë U¦™í– +4÷A³LhN„“óѶëÁ,ƸwUshGþ¶¤; i+uFdmùTiöªïb-€FÀûÍz Ù'w³yW.wk¹Û¬2ñ®VÓðÞöÐ]OðÒˆmOLsžþ˜_ÔN•¥Í=äÞ¢OVYAýÂÒ[IÌvîàCÊ= ILG³Õ4óÒ˜¥f˜ÕLó +RY㥒IM.PsÌçj®™¡æ›7Ôûæ#¤´\-4 ÕÇ`‘ùV}f~RËÉ¿‚øo¡±Á|€—x –«ýx.'Þ˜WtšYè%:‰#Ñð¶ÞV ÑbÝ‚÷íÍJáx»—_‘MsPêÒI5Bz½Ì6d¶W2_éñf‚žd>Ô«ãô#f–~ŠpŠyN?mÞÕÏ™ŸôŸÑ€Ï(ãî+Ín½G 6‹tµùZ0kô/æ»@™ùA`¶éfziV¹æõ`¬© Æ›™Áóip/xwy~íç©Jj´_µ×Т½àe¼ ï?Ã{sxŸ£‡÷§¸Ÿb¦ÀÿBxÞ ÏUð|¼–ÀëFýÕ~Âï^ø]ìù}Åóû!ü~¿Kàw6üΆßYðû9ü.ßMð»Æó;~? 棑Zäè ÔIÁ‹´‡Õ²ÕhÖ±Õhd51ÐDüÑË^há@úçxS¡2±;ͤïö2Õ™yúQ¬Ïãôª´èûdîç© }µ?xëí½³½³Yh¯èÍ’l–V=ÌÏ*”YE«oËEr›ÚzJŠ!±Õz;ÒÙ£šÐºëiÝmHl+ÛŠÄr‘Ðj$T„¾AB›Ð&$´ -GBß ¡’àI¼«)f+RZ‡”J‘R%Rª@JÁ4Õ ©¸vÜ+­ºË·ñ^‘^U¼¥«ä)У©‘mí@¯ÍF➌™Ó˜Ó¼ƒíš…úë˜NìÅÄžO¬µ[X‡W±¯›¯°@뼚­Þ2S°Bb…Vc…š«w ø®jƒ%êŠzSÍãý|,Ïûæ,Ñ,Ðõ qŸ™-êKh-ÇZ­àÝ·¼[gžÇÍV›°@[ˆ/džî4‹¼5š†%ª Í7`…~ô-¸’¶_¤óÍKº-}­½Ù„—úªù‚Ãb8\w‹àî{¸ëgyž³Åp´Ž¶bWaWÁÉ28)“¥p±VÀÁépð6±.–b‹áâöð 8Ù'»‘a)œTêyw2q-OíM©XClŠºRüÜÓÔ ü%j#ÿ£úýrÚ“é÷§OMÿ%óÎÌÍøo{³¾Ò¨¬Yͪ醻¹YË$†ç9£²d7µo¡{þS<£ÞøEï©rñS.a&3ÏcÞÆ]xÐ÷êÇñ$þ̼d¾x _éeø %x +›ðJôšÑþEl^ š»ƒ62"ŸÍÈÙœNϘƒ´=£„žQ›‰¼™È›‰¤-¡W”Ð+Jè%¤œhÿ.„žq1øwÐôÓÁ ð˜ Þ³Á\0ÌïƒÀP –ƒ`%X ¾ë@ Ø6- ü¬–ÌÏÁ,žm-ƒ×Çàõ1x{ŒŽdDíc­ wÇqwœº[¥áAdЗrA¼Ò†x,XtÕØLPMÛ£•Ñìpø5°ÿ“÷ßhãs͹hÿyXÙß2žOî ͳÈ`2˜€ &¨><_úrß°?áÂËÁä¹’ð*⮿׀kÁõкÞFp?žî…ûÀýà€5U‰f’šOSÀÓàð,xL/ÁÛ+ôƒ×À›”5z³Áž~D¸| >‡Þ„‹ —€¥¤ÿ +Ť[Fø5XÉýjP6ò¼|JyÞOÞƒä9Dø qÿ Ç* Óè­æYúÏ"Ý°)½øzñ‰<·§€VÄçaË[ß´§‘¿ù xw:y +]òÌ„ 5Èm¬míÌä =aБûó-Ü]˜Ì!nös><ž‡.W£ËÕªhlö¨ó »›C´Ø!Zì-uˆV:Dë¤evÐ2»i™´Ìu=iGg:ïg€·ÀLð6˜ æ‚y`>x|€OÈû(æ~9XV‚Õà[°”€ `ØJÁßÁ·ÕàsIB‘À$° ì¡Zº:hǨҞ°èÈý,sˆïPú<Æ…nà÷à°”1¢¹Žõî÷€IàQ0,‹ÀvpÄÀ/H´ŒX¥ŒX¥ŒX¥ŒX¥ŒX¥ŒX¥ŒX¥ŒV¥Á+`&½ã:úÖ>$¼=Þ‡Ô6 ¿ó¼\ĸԃÑë +î¯ö¼]Cܵ„ÇcñGŽ#¼Ü…½½éîïã~á£à Ò1JQzŒÒc”£Ô%Æ(-FI1J‰QBLôj2m9™¶›Œ\'#ÇÉv…_ê|p=(ð:Páu ®l›VÁUíi9«‚³*8³íh¹³íg9¬‚CÛF1Údí± n«à¶ +n«àÖÊ9†ŒcÈ7†\cȵ¹V × +djkSEmª¨Mµ©¢6UÔ¦ŠÚTQ›*jSEmª¨M•Œ ± ©×0<ÈÑà P¢2ƒÆ̯lmPÛÔvµ]@mÛ•¹A/Ð|§:˜X + Ð + Ð +ð&2Bö•‡±ßêlu.#Éoyw!apè€ËÁ•àZ`G‚{I¸<Wxÿ*x ¼¬gøxÌï€wÁ{K¨> ÁÇ`ø_.&ü’p áRÂr°‡°¼i€‘RgÐœZ€S@+Кúæ¶!Ä*ëv„Xe]z¨³õ¥„Áë‹‚é` \½l%Í6P®.Ò»xþ–OÙç!ûÙç!{Fü¦#­ÖlfË–²#D™µf·)––Øg¶šÙf!1eæMSav™rÞl4ëM•ùÒ<®š3K>êÊöú‘”T +™Í +è®4›9—CÝrðO]uÔôW€k,}ƱWÍ=f’™nF™ Ô` ç ó¹ùˆ2&šQ*Ë\Bª¬£¤¿îª ËðÃÍ&óܯbeß7»Í”±þhy +N>Õf¼™ƒœpw©”›JÆ —b3<Œ'¼l³¼[)p^ŠÔWÁéWf±Ùnë@+ï >Ð7•ÇBW(7´>¢yÝÙ šQF™YmPÒ;'ñf2éžÅ#::úe\:šeÐ_(5Øý-¦ÌGFUæoÔc ö¤“y^j6%ýr.íÐü·Ðà]&5(ẹ€þz³Î¼ýYð¿Jø9Zþ•yWô¤ÉXþ7CŸð½Œs¥ÙcÛ9ª£oá¿9²y_…ÜK„û³Äó)m÷1Ñ·òß“"þ-»ÃÊߧ:&ù‹;‰°ÖØõÝH¤ Þ‘{^uLô·û°–^#™j¨Ÿä¬4×åÇDßõßTúiK>>¤~¬‡§Ÿbì°ÚyÚW;Å—±Û¶K°ËSF?¶VNz*tŸô³ +3ÓÌô©×Óæû$m9v±Rú`9ö0åø&#ûbóˆµ^¶oíX³@žª¡ëù øf<[KI» Xõ2ó¶ä*ƆX/Å~- é¿+ÖþKóˆíÔ¢ ŽÖï‰éÎò_!i'`çHßpuýÒõRócTžæu¹žç0ìo'u"_Í<–,~ãïÞ·t¥<›¶eÈ'cÅd—9½i}îfJ^Ïšëˆhˆœîg›ÎÝýÐßA]B{ÜRr¼'÷ví¥µ¸ß|ƘjLJRx›©N2OJy­$UcòoK´°³•I-³ûØ|…äÃRæÚÞ‹í:ì³»7š‰Å;ɧº¼X¥ûRÆ.“ë§øm‹Â±­ûYô£ÔzUH Ø¶ã—«s„t-Y+v­\×;ý< wdý«ÜYïGñ…—Ð+Ñ·­èÑ×è`©èO™h—õ·ÇéO¶Üö8Ù<åKš)ÞËN•‡EêL½'™)øu½Ì8ñ&YZ”¸ˆ»ò8wõZvRDís£Ú +«¥P²=ÞJò߃söÄûA=~õÖýÝHg·÷…wŠõŸÚ,u6‘²úQe¿Šø·õÖà^ÎAâ%â ïô1VÞ;Ŷ#Ò[p~PìÓ>™_éõøQåÂeLÚa ’ù+s‹yÈòÍûyâ lþÖPs¬[Ùf¡ 7%ص ò[lÖ3žÄìã[3„>ŸËd’øÊkѦ f“—{cžêÓŸöqúóÅ~o“V­Ä?µ^j93IÖzByvÏŽÛ ¬üœæ‘gã{9+ðv´öYô¼Œû´gòn(í[*#Ç6é [€²¥:6~çFœæ)t¼X4¦Êj::òƒ³X¢?¡^úÑ5çë¤_ϱÏ×yŸðE‹ª%eµh’kíRŸûÃzkræ"eå)•°/Îb­_`u.eüÖŠq£YÌz­‘Øzl½õSÆÿœšSó¡H5¬Óaè×់Ô%µ_¦—¼k¥Ðª|Zo +RF[Ù7KJ÷“×¢X$îH¼§Æ)K µ)aóBý’ë¶T¹Rй¥ŽøuôÕÍÖ¾ÅcIÿ¨víë[{C½ôëég•¢ï›1>,OJ·8Eæ¼úJ­÷ÐúÔ”;¿ÏÉþ·µ‹å/£¢;~{¦«ê-5S½}˜]OÅj™Z®¾V+Ô*õ­Z§JÔU©vÅw\ÚP:iÔáö?uT÷;ì.¨¡z¸¡‹ô8¿ÿéî”; ¦è§#» ^H±jºž¡ßÖ³ô;ú]ýžž­çè¹)öF}.»/—$íZ«×¥Ü%µKÿ-ÅN)è Ò‚tÙ/u\Ð h4•]SÍ»ojô1ïœò»¦TZ0Wˆ5ëSsñ”OQÖó<9ô>#Ç©uéa¸'Ù9² ÓîÃLýÄ*)ëÇdóÆêjˤÔì¿ÇÇcNˆ¿iÄõWÊY&ª)ošÈÌÀ'ÖÙ3N®óM݇®“&O©e®Û=t¸ïº køÂ⧸£ ÷Mj”Þ Ž°l7îEQÿ‘ƒŒ¬ô£¨]'G;Ù†Hud¦¶ÚÒ†Íâ8’Ñ#j÷:r*Õ›μòTk‰qGæƒ6ª­ì&Ï'¶µÄ¶–Üö?€åËs°óËÎê Ÿ/ §ó¶0ŒUXI‹yßÙçN¼;S(Jöï +(½PʶÏmxÎ#GžÏÕÁÓµa®V|= +¨ÅéÔ£“ÐjÉ×:.»“£³À½ ß$‡­â2ë§mÑ!^¿Š×%|ç |ÙQþ:DdÖÕ9¾O¦‹Ÿ,§ýi¸þêŽÚãÿþÑ(驽üíWAü9!¯5eS§"«ŠÑ÷ásÍömÔ:»×Ä[[ka6ËÞ’Úþ:vÆÕÎÑsGÍo-Yñ8»æç,mo5B+`mýñ¨x|sžš#ÃæâK4•¿ ó׶á‘~Dö63r6«ãKQVüŒÖÏYÄ‘ÓržaÜñ‚ðT‘7•A2¹shíããPu 9Mx´Põ6Ms “i$ât£o¶èn‹ —Þ¶á q8)/o²kh{íÃÚÚVñ§S}ŒíÕ-#q§$¥s´[ÜJÞž&1ùru–Âõû=gb3:Ëï4t–]|ö’ºk;l¤{ÛVbÚÉÕž§‹m-””…rÅBrt–rZñ®µ]û—ÜNE{¬ OKU³'·KŠ³4,òˆ·´ZK]ÏçÓàÉÂíeêà)Ÿï÷}ŠÎ"¯BAGy²ÞugPèù(ô| +Âr-:‰mG‚b˜WI‰®®©¾a¤Ëy"çIþêŽ#³Gv‹¿”|Øz¹:¸ÃÖ½¥ÈãÌT’lZù¸hžP†ÉGa­´‰ô‰Þéì^c¥þ šg4 +endstream +endobj +1049 0 obj +<< +/Filter /FlateDecode +/Length 8139 +/Length1 16920 +>> +stream +xœí| xU¶ð½UÕÕK:ÝÞ²tBºSdÁN¤“4$M’î¬ t…-+$ì ›1 ˆb"‚€‚ˆ €LDÄKŒ2,**ƒŠã>è0>‚ƒË($ÕïÜê΃óÏ|Î÷¿ÿû~îMUÝõœsÏ=Û½ Œ +„ƒ4c'$&=ã|4 !ì†Ö²Ê¹å 䥳Ò$CýDå=õfÕ±àP„B;¡þôŒ3çÞWÞý?!$=4sβÍU¯½…PÌ­¦º¼Šn]þ<Œý žÔhИ5|=ÔÖÌ­_öˆ¼êOuïœù•åêòb„ìá¯hnùÒ’xY%ôƒñæyås«ÇÕï@hÔ„è‰ æ×Õ{§¢~“ô/XT½ ¸ùñ…ìƒ9rDÖ†C?µL­kŸ®ù’ËIoUæ#ßsÖߟëbº?•,«@’ÃãK0O¶¶» !ù².F‡~„¢~‰~œŒ¡ÛÐD£!ðPHƒÑ˜ª’‚:F43¯G„$[%6hô}é³hAC°,-a(ŠùQWÈ<ãì¡£'dÂ|ó †ôè~ÙZÊmFxécr$d¥ý :.¶')òh‘•F_¢Û$*Q9Þ²ž:¾ìÝF5";Å"«£-cjp"|•þºævpþYbz[™·ÐDf?z\RŒ&Š\:…&Jf¡ÇEZ½Sœp¼g<{K¶ÃsÒ×/ÂX óKw¡WzÇEçÅ>ù§øW£ +f;Ao¿ô5TA5{M åm&í” iú¥A9½ŽFv¦Œ÷žçXaþ\$£¶ R¨/¤  +É´˜þÀÛAðŽøwyr'ÝIwÒt'ÝIÿ7ž‚zÊÔ»h< ·ŽaM>ßÿÿJbÖ‚¯†ç›Ž–¤Á^yþ·é¸“î¤;éÿïD#´†™gœó(>ï=GÚ˜"ï©Û•(o¶Yp¶I¹u •è;³ý‹ ‹g\çE‘i œIÄ¢(4 FI(e¡l”‡Æ¢b4 ñ¨-3‡š#Ì17¯‘lŠ‡“s2\(ÎÑEâ¸r4Æ…Ã8äõz/ôÏõ¯}yò_EJnN!·¡Žýô&”@·RÉT +5•š†#{r)ï.)žP4~ÜØÂ1ùy¹9Ù.gVfÆhGú¨»GŽž6Ìžš2tHâà„ø¸Ø˜è\”%2D¤Q«r™”•04…Q¼ÙƒËœ:Úä*çœ\yNB¼ÙR“•ïä\es¹Ù&†ËÉ›¸r¹Ìì‰Oy¿æ2Fθe¤Ã7ÒÑ;kÌ#ÑH‚‚3{ÎdqæN\:Þ åµYoö|#–Lje&F¬BÅb"U„Z³Ó㺧¦ÅY4âöE&—Y­HˆGíŠ(@ÉÇ-hÇq£°X âœÃÛ)$ $ha¥Îò*ϸñng–Ébáâs=*.KìB™"H›é‘Š ͵„tÔjn?Öòp§U”Y•U\Uù·‡.‡¹-´³¥åAOÕ3ˆËò Zþ—Xyµ'žËrz¬j~Q/žü>”Ø#‰Öpæ–,‡ûæòÍ-åþ6Zó"E•éÁEn I&ðº¥ÅÅ™]-e-åÞ¦ +άáZÚ•Ê–N`7çÞWZM×üGSVƒ‡óþ¥»Šò=ºñ“Ý*Úe®)‡øIç,ÃL– Þ1ã~©[€9Àa‹…°¡µÓ* âiïöÕͨÂt9­¼‡*#=Çzz %¤§©§§wz{›?ÁÝâa¢s«8'p¼µÜÓTÒ5‹l §ñ¨~4Y¸m9-‘ÇšªÜªZ³GL‚Yý'€Ü)-±¢úÑ÷ùÆb‚´æ4À8NÎYæÿ¹§&˜Ñ9VŸ »=Ž,(8Êý;æl’3ÊË`Ãj³ÄÍô$r 0 €Y´Ìì¦L45Ð`vAË o4Z.¶ÁÍivcê dx™ÕYþq¤~P §Ìœh,©œÌ“…·øRB<Ýf?b˜!#LÍéé32Ï̱‰ð2„½ÙÍUs÷Ëfpb+EZI#©˜I…@*‚ŠLozÙP“Øˈ b½²#±MÖÓ†Qe'åkÓøňˆˆ‚Æ×ãèÍ@›Ì×Ö$¶‰©–9‡Ì!w(©@ÊÔŽIÓhy|££ƒJˆMí0«HlîÄMír‡É7¢ F8|®)éC]Rê>¨D0M|¢ ’@\Bj`³Á­8ÍUDPîåkZÊx¢lÈ[?؃¹Q°MÜ( „Uz\u†'€Ë íé¤=Ý×Î’v)ˆ(6b˜Þ{?΃‰Lv[@%Íao™Z4ßâÁ¨´h¾JpXCaih›ÿpcþv᪠t™ð|÷ï„kT,Õ€K0¾ƒùÛ„Ÿ°][ÖÎ'Ï ÌJ9­s²…O5ßWx%øÒ÷xÀG@­Ÿ£Ò¨:X§¬ª"Ïí©Ãç£ð¹íÛÉŠ€Ï€ú¬HyXNåå„¿C‡Øû1Õ:>Ûš2.kpjÞ˜ÉÉ)ÙÓ“ —y/3Y oJŠ‚Ê€À|>@Êèóy&Ô·AVqY ÌOÑhÚÌ’(–2趤TmŠ†ÉzJøÛAÏ‘Ý8ðBnx¯a¾øóú¯…òöuþﻊ3Ɖ¿¯y§é`¤XÎâ`Ÿ6-mè §ÓÚY©4v¢`ßk#"’øãðñÇèG±¤"eø¼FNV«Y´KN# +w¨¨° €|>HŠÃ +xI¤:—,;E§$ÇpQ¬4ÖÏ VŠ z]WC$>;ã±òÄ¥3Çlä‹~÷'Ï™±/ž¦ölÄ»§®mX‘_YŸ–U·µýÉù¯¼×.œ‘!ñ·‚ˆ)Êu(Ú¡euj)–è$¼\§£¥,í[G¢ ‚ ¼ãˆ(Ú±¶YRµ:Ž g¬svçu/ˆ 3^{÷¿…ŃŲ ÊàîK¸P8€ ·Óïw ú 'áFt¯¼ÞVÀ«ŽI‘ +E8TŒ +çò* ZHkAæ Rß’1ˆ=¶é8šŽ‰eYšN4?¼JGîïܛυH¢'½ƒÏ +‰D?©¹Øzðy÷~¡ä +ΊÌ€¯ûcF Ž`‰Y­6çñju JœÇ«èÀ<>PÛÃ\-J I?€Ñ¤g¥#ð–á,X’A8ÎÑ–ž…=û·×­Þó +CqJìOÛ^Y½îƒëXqøÄc_–tžµ'"æ§æýáo ¥l¸¯fæyÏl¬_Avúqïe‰v:„H§åòz&PšËêú¤3Šñ ¤ÝÀ‚˜ƒú˜&Kcèýû…ož9ù|ëK·Í»&\þW}ùúfg‹ÄvBxèóßžO{,2[1öþøåqk°¿À‰ø ‡ý|¬6gi‰.—hoÒ‹[Ì' ÔúV(Ñ¿/,® Oã<ëqd× oã¤]ïœ:pž+Ü|Ë<×%{ ~øáç7•žÏqE8Ô¬<—gÁi)I.Oѽ¶ÑJT[¤LíÃ)ÔùÝoΣ4æî«’Ž'º/=ÑÃ¥BàRŠqèQD.°´¹|ÄæòŒîæÅ„åÌ~^Y "=lË™‚Ooýè´ð“ðéi\óéâ35cÚg='\Úz¦së¬2á<%t§åc ¦!yù‡¸ø-QI§…M_ý$ƒëÁÞɆh_ÍœaÂGZy<&œQí§£v æLŠƒñiA¥Û‡Ñ6-¾¦}Ñ‹¶O‰fqÓ¦q7 +¢Ž T +@U¢ —ä–å[ØÐ!tT¬%Ð4Lí©Â: ªV…bÛ^áôX¡1t£¾a©dïõ,a5p«üm'ÀÑ£P‡RAæ*e4RK‰&ÙÒmÚ`bˆh¢ª¢.Ù`¡œV æ–Ú½G&µjŽîÄ)ß?&§6b…pvÿ}˜Øn›D“s#¯«üTs´«Z2æúäÃ&iljdpÈé©JFc`ò™<Ìù0a[ª]gcê ɬù®}€å>͸kÿnæÔç¯w} +ÀG~q˜N$–ˆìø*°Û`‰ÝV‰{mè·×~»Ý³É(ºŸáNŽ‘¬òz‘ðçcxìûßãúé¡×Ú¶üíá#t«ð0é"è† +Ëð¡ËÂï·½-lùäÔù“xÎç§Îûô„yHÜ_HœN†T*”G ’‚ÒÒÊ\žöK°M´K>3+´˜ƒ4b›(©ßJàææ½ 3|TXõ•³µ3TmÇß{p UÖý4hÌawu÷2ªŒ:.hGïݱl.ág,x,d=†ÈV¤Ò@ÂsyCƒÑýåœàÔ¿›bôa‹‰IIî“w¸a @Ñ +_{g=“½óÀΣµë6/Ʋ+ŸŸž‘±ÛùÀ®¨¼Ú3SpÛ#¢öo¾¿pÉø’½õ¿½3øñ˜øÖ%©c²îvW-ª^Ž-´Ñ¡ÀZ)˜fØ ºGÖ}jl'Jüõ>lfYè5’È͛ɚÎ#$m†ÙD"u-×)h,÷‰‰_"9:&„<ŠM¬—Úˆ¬ëŒ_¹¸w¨Œ Íâ÷ÚI)X>?vÀ*ÇòüaxUýúš 9Ïv©$]+ÜO÷0]Öµû‰Í¾XI7~PZæ$à—GF,¥‰½#»Gb3‰¦hŠ/ï^»pß’+{©ÓÔ¥®™Ý¨húQ"°'e̤ïëÐ+%’¨eæâ‘F©sñJ¸Gžô Qî1ìƒÍn£9;G¢“”dm*í“MÎ'©Tã”õq™W‡É¾Ñºý‘ëƒÊ-]0¹æàŒi̔ʩûntžýê}ï᪷»L/ãAÍ\¾Oød×¢…„¢@QDÕ0@QúXƒÚèâÕtý#EN +Š¡¤-Õ.P¬®¿ÞP–òÑ +WÎk³Ù‡È§.[»ý¡Ìe§ϯ­|¾F?ý—Õ_¼ûî™ÿÆ g…§NÑŽ +_lž·x'¶¶]N§è½À)ÑŸI•.^ªAº~ÔˆT/|.ŒëÅ Î _?ñÇMX²ë¡U‰K+¼\»zqNÓ¨{õ<ù&.zÕ¶Öö„põé¦GâLëÒý;rÖ¯G²~:@¡¦Ü€ÂÉŽ¨ ®Þü¦ -&[rÛ=¡OLR…î:Z²jÏ´Öm눙öæâ93«_¨eJ>¹ÏøùòÙ†š×öÿWèŠø-æ6ϯV8÷ìUô!qõQÄS…«\|x8’JCE>hûñ¡×SùØáÛ ÆÂI{¸AöÅoEðåÎ÷ûqÓ[…CÂi ³¢9}uå´õÉ3Qþå»\ý'Ç`þØê%‡ÎŒ[µqà ñýå‘ß,Y˜âOeôô*6äö.‡Q&Ѐ„hPXD6¦F ÈÔÇ'_X':ѦØu\:% +Šo¯¤R›”£Y¶Æ9Ì1¤ (ôÂñÀw‚ïz:®Þl-¸{ÒÔˆÐ+¡ßüwìNAoXk¼·Žž™Qõæ³Áªæˆòæ97:^Ýho³ g +€Gq(e¢GœÉf>IÓ²yÆ,§¥16Àbˆ‹qdó1š8*›Sâ³yÃMtû’˜–Ãê ¥Rß9 –ؽà`1^³æ¦Ú}/ò©Ãús ¤¯’ê–)ý`ÐÅ“öˆÖŒôŇw Ÿ ?ñÙúg +gLNwõ•Â‚Mgæ¬Ü±´ Kǽ'Ý]T¸x4“3;dTÙï.ÈR +™d*ãýMoo| vkê qÎJ«¹a‰Ÿô×SÚX?*G¥ ½Ö–ðÅ'Mÿ(hÌ°Mƒ@’#Hä« 0Bì`0ÂÎ5~'CÄì£È$TŠ¾TE÷ª0ÄåÔÇ›´ùçš-Õm ¹Z 7È0í¥ªUë‚cgQ‡¦ ÚtÏ—;„XV_´uÇþ+f­¿TÍqÁ"ÚxEJÎC8£BªÃJ)¥Æ0¯Á!ÓÆél4a™ïxu¡í¯mË6wf|\2“ƒC†e—Ú †ëž+°À +Tä̪ää©–€2é=ªV »H:EIq¥zK°âØß^ÚR´çíÍY”@%R¡BBw+¥\!Ìgõ‚§ûr³:•Ði8‰RH¤ŽÐ†m_¶á‚6èðñ}d*lΨVêÕÈ¢4IJ:ÖŇ逑6ŸŸ²Ùü‰ÜŒñ³Sgó33¸—§ÐØ7€êܤ•_¼cð÷¯­FŤ¦,\ ›x¢²±Õ¸~ï&½3oüö%‘³ «]…KÏ?%D39§—Ô¬¬oX¶feÖ¼î2êPÍ]£òëÏm”¨gÏÞP²ç>r•B«î6{þTò`ÇõÙ…¾-'$•,kܼðÄ¥,ýÓv‘‚åÕ­ c«»ËDËô-ÁL쉧P±“Òл>ËŒ}Áoqr?ó¬¥VýlýOûdÃOxUÃì¹/Lo\R³g*3ñË×:þüÚQ<ö °°nÝ&áçgV­Û€ɹîèzSÚã¥Àmªj¹é_ðRp¶ƒ-†ÿ‚—Ú§`hõì=x\+xÏãmoù¾ÏKU•Æ„– +4›|öÂIÏ„í¯ß쥀@ñç=t 5øs“H‘F¤îý9ÁøE÷Ñ R)”N¨ÂÛº¿êþàÔŠ{>D¢V µZjhê=g ¢ƒ5—RÅ30ë“M¤Ø+Úò:–« %<Ë™ÚÑ”“•žU´Ø^ 8ï¾+šôg+U~]Ø÷€áAmuåÂÇú8¥Ï3ò)œcÞšƒYñ†’bdq¸›pJ:Œ“½«ñ]§‰§\A§WÀ lhà!$¥½·±±©:%µø>ø{Ù¸c;uŸe+ö5nF7Æw «—?ÀJá7Û,ÀN7ŠØÕ ö‘P`{#©K0ÀÔ~´P Ši‡Ó‡÷e|G¸zŽ.òzÉí¨$]C±(ˆ"—Üðe´äÚ!ò— 2;! +ŒA¹Ð*EÔªÞvO¿ö±¤b4h—&@ûÝh4*@yŽ˜<§Ã—n° 0ÐÅ' @ÁŠ°¸áŠ8E6oSKt*â«L}n¶ç‚0¤§%Ȧ!1î,Aiû¶ðâL‹ý6a'¾9 ¡,Ù©w§fM » DBÐy? J]îÛ¥øÏ! ;wZ80¡àn~JxÈÕ°+_[Ÿ¡Ç¶]ô41©bÄZw/3œ©P¬_qsð:çõ=FusÄŒ{I{² _&Pj®/¢D~~ÑÀ¯ÑŽ(¦Øã¢â\üÐ(4ʤ¯ÊæGÄ«åÁÚ`ÏhÿS}Œò¥m¿ŠQ’oÛp~ÛõÿúUüaõ?¡‹) ‡ ZÔŸD¹Ö{yÔsrV0 ûîqòù€Æ0æ¦û÷¾ –ró=£XûíŽWßmíÚ~ø¡®¦múòE3Ÿž¾:yZx¶ýâ[ïâü—¿šô¸pm×Ú-ëphÛCA·óñ +ðqpÚ—È°BsÓý;ØP±X`ñº]÷*GêÂ'uâ=­TúðŸÒ"²çàAľ5hºMàTAŠ|>(† +í½÷Ýïù/à©Þ øžxFj°ÐÑ]ž¼ÿ±e)“Jò6Ï*Zþæ¼'÷d4 +=K•¯ÆisêgÞ7)½h~UÁ–ÕÅkW['9:%´ÑçrrÿnqhÈÝûž%—ïj©†軳H´Ù|Gžè~wïdY±¬Ó'Ïî,è^B'ž>}VhÍ sDȦ§ :“°×­ ßèÊÂ…K/ÔR­Žî—|çCV%júpÇ€°¸>ÿ?iwŸìþJ­þ•jüoj.‘É°zÀe%²¢ÁŽ@SPH¸:DêâC4Av-±.ÞÒÿ¼ /ŒîîE÷…‘»¶/b²§âãSO.«¾Þ n~Õ­Èl¼žðíûŒ:4îá‘—ø®Ä°´'.<¶ïFýGﹶ LZӲǛ.Þ “S¦‘Öw +!žˆímÂ[ä7 o&ÎE3úåÑoÄü*z]B—p4vá•þb¾B Qmß¡GÓÕbÞFŸ¯Or³ŽÙ/æ+̉ê–XƒEšgB`ÖAKð09Q!pÕ)J)þƒï÷ðøôvÉ÷¯5|‰"ÿ/•‚0e§ìðAM†÷Tú„é&ú7dìÿ> +endobj +1051 0 obj +<< +/Type /FontDescriptor +/FontName /BCDJEE+OpenSans-Italic +/Flags 32 +/ItalicAngle -12 +/Ascent 1069 +/Descent -240 +/CapHeight 765 +/AvgWidth 552 +/MaxWidth 1729 +/FontWeight 400 +/XHeight 250 +/StemV 55 +/FontBBox [-498 -240 1231 765] +/FontFile2 1049 0 R +>> +endobj +1052 0 obj +<< +/Filter /FlateDecode +/Length 7344 +/Length1 49088 +>> +stream +xœí} xÇ‘hõÌìêo%­~VZfY!~FÖ‚„Ëh…´âG„$l ÌY+@!t’ãÄ Ÿ!Æ wgûŒ“÷Ççs’ç<3Ä>ÿ蜜ÏNÌÅ9'y~v^ŒßʼnMLìÄ/g@{Õ53«•À¿÷åîr™jº¦ººº»ªººz€tD ¯ 5­„ÀÆ“§ëXßì+»¡ãš;ØØnïÜîgªç€µýØV;÷ É&ny»°<{kÿ¶«k_܆ý?ÄöõÛz÷m=iÿçïl¿ÀÞÝÝVß…ÇqìE¬åœ‘6ãοÛEÝ;‡n\r]âl¿POï®Îð=ß=– +ÐòóŸÚ¾±?ÿ¶äQìoEyyg×Pxmí# ¾|üp_xg×”»ž8>ŽÓ5õïŠn€½ØŸÍåûºúÿêW§Z$¹¥`ûò؃êÿ~ô†ôÊß‚;8œømå þ|qWÝÌ ;.>œ>‘܉Í$’ç€ÏÄû.M ã~saÇû?HŸˆõà|“s²Ïˆ!€|ð9\.-ùzâˆÒzvØ ÑvÜæÇ)ÝúSül2mBŠM°âëP‡×k›e‚½d{abKM¼Od`QÞ'{W†\Ûx€Öù]#¡N‰^økø˜ úáŽ+ûû€<öûš[zÚ?Í8áçX`X`X`X`X`X`X`X`X`X`X`X`üÑ‚ôMÐ>JÆžy¹Œø»güáÿ¾ÿl,°À ,°À ,°À‚bŒNiŸ´þ= ,°À ,ø#þ/‚‰X³3zJЈO'ÎO…Ùp¬dg4JO<'úÛèÏÌr¦ÿÛcÁ‡ÔÍ›ÚZšÖ¯[ÛP¿fõª•u5+ªƒU˯©¼zY biù’Åþ²E }¥W•( æÏ›[<§È;Û#ÌšéΟ‘—›ãÊÎÊÌp¦§¥:R’“ì6I”°<-¯¦5´]›QÓ®9¼µ^§¬9Ö_ëÓ ÓíñfÈ~_ÛU†”fS4Ȫײ XѦٕé"ë4qŽó^ë–Cš4yׄUm^S«Çëü±;Ö߆c´üšVÇ­ sð×jìÂ_k²ª9‘ïqëœÕ4¶ò:}­™PáiCÜÔª˜Í¶¶+)y :>MÍu,âq̨©Õ {¯iàâbç+@ƒJmž‚Š8‘¢ÙÀ§±ìw4–¥1×ZTyê|ØÙŠ+ø ¤n÷†Ôô¨Ú>éÓóºG=rDŽ4µfø‘$¥ëµg6´Ž¤$×xkº’‘Ä€‘ää¤pNÑ?ÂË‚#´lD€ÄTt_&W7Äëv-x¤ o-ú {²&{Æ¢ãG㻇™T–NéJhö-AWBîÑ‚a ŽÈ#%ã‘£cNèhWªW _ߪ‰aqN¨»E›Y߸ Y¸Öön™ow-!¾yr¨[Ž`›Ë¶#öÖòMŸÂW»»Úy˜°vo-ö%Õ´Þæwk™ø iŠ–Šb©7½î#¡¼™7#‘Ûdí^T7®×Ã1Aª yq5œ,´}ß_lÛ(W«´9Á#aYîØ®Ç^ø¨ÿžˆSs¼çÁÝÁýÁ‘4Ðp¥Ú¾«¼=ÌÍ m—#GºÈÔ£dÆ«Ú^Ë+ˆÑqô¦ÖP·74¹ Ž„8gúXG›¡ð‘Hˆ«VQ{]eì˜ÔŸŸ ·ÂPŸ-ØBh¡=ÀƒáÚ6ƒelâÃxO{m[›GßwÕæÜf+õÊ>cÂ-[qz¾ƒ}ãW•Ô7µ†jÝd½&Ô´^s.Ï}éúÆ›å¡LÄwέû¨¾Ù[¿A‚nµ·èXˆí<Šò4ë™<÷¤ë¼uí‘HW®‹´GÂcÑá¯ìôFFŽH¨]¦“Ïÿè·Vw´Ms¶w³e¸É<Þêšêµ¬ ›ùöÔÉÝa=YTy=nOF›)ÓøAÝÆ9ÈǸçç,â| us`FrËu<½ŒaVpkÎ +~LQ“­x:)f áùhÆÉÝü¤ˆmsB=͆ƒ0€áyoƒÁÅI<~†ŽŒ¡Úð†V½-C‡{‚>÷®÷Œ›=®¼gØì‰ o÷â^åÕ7DLÇÇs$Û)|äJ·ª6Þ‚6þ®BK¬0¶;«¦Ut %¸EN%+˜¾*µ\…rŸ`–Œ8½òó^Í©h¶šÖqwe›ìÌÀôÆPf•ÂO fÑç½Ï2ž;!Û©±Jåp>`.¥”.æV`g,xäP¤Ýˆ®x³Œ @í¾²m(ãô¢yn]>#ÓË-|ŽRš‘©çÔñ³äöèkÚ´4žµ´·¡¾îšV³žÖ DÈ!¹›o¶&·×RhsdzǢgÛkyÚC•¹ˆÛkĺk§ÆÚÇðaŒð[Ž¶uctkÁh¼—¥ÓÒÒjx©Âmœ"¾ÖjnÊÔþ˜M™Ë½[ß2¥7/¿<Ø];û-­ZbN¥·W*îøæªiÝ«Ín@OÈ«¹Sñþ©pOááþuæ‘›Ý7ñûD`+F¼ìð†‘ ;ܼ©o¸§òá–ÖQ 5í+ÚFŠ°¿õ´Œ/CÄ8—3yCæ ¨g8ã¨HòîÓA€aꕈAíÎ1ÄK4y :ÇçÔ*¦…‚øV×9&é=ASZB^¢Î&ÁpûƒÉ¶`b0)èR÷ã¬Qä<ŠosI N:X*sà¨&b±á‘¤ [—F‰ ®áá“KoÜÔzÒ8Œ0.´‚º{Þˆg ×ج9ù&âë•&ç?ëŽ8yºÖÚžÒþ™çÁ “‘9ìpc¼M×kÙõM›Ýk»ê4Èlù©¤<¶Fc•&±Ø$ÊLÂg¥&Qb“LB4 ¼@T”ðá‹„ß%ükÂç ¿Møá_þ á—¿HøÂg?Gø»„Ÿ%ü ᧠‡ðS„Ç ?NX×l„ð ÂG !!|;á +ÂK $|+á„÷¾™páF«§qì{B:‡¶^z qPz3NJ ¼r6'wæ„è3ŸÍqæ³3~ðOHïÙ‹hg?¢Þ]ˆvôå¸wôÈÚíš¹m;¢­=ˆºº³Ý]݇þ4Æ`ÎM53<û°^eÖÀ±U…¾Ç¤ŸMÁ&žÌŠž}Búÿ¸öY²tþdjF 8&ýr4%;p::.½}Ò=;PU*ýûÿRzñB¿M:¿q2ÅXø8Ûˆ­aŽYËÉcE…UO²ÈIgÕp/V!zöÔ¯ç+85 ž¼¦FÍãϪ“%>ý™;“?¯ æ+ù¹¨^RþÜì–ÂÂfŠ`Î÷¼Þ@ðÿÎ_hn”¦×EÖRR§™€ä”K“• 'lÊ;Øóí¿”àK¹3/cŸ|má"š$ãµYàsso>!(OÇ^vpô‹Éø¸E ëÁt|~ ëQèø1Nsö‘_eçîºSätÐñ›¬œÀ[Ç$åN´™3R:óf¶v²{Ž ºÀ±9óðû ”¥£…íß,(_NVN³å¬rÄ#5ZXÀã3z3ÎÉJO•çñì|‹_Då¹ÂIß™='| +æfŒç»ùó‘qgfàÌs\ñGžE·|÷¢ƒ9çÑ#¿Ü/( ;{ÍÈ A9±_÷À é™4ÅãsçcŸƒÛ1õ(ìÐh$™FÎWœlph÷eª]®'ˆ£? +pÁ!Ó:NWËÓªÐÓWIâ^olZQ¯%â§Gbãf-ß‹g°QŽ ‡w½ŒÙùͼ¹µÚÅ–ƒÊ*±.ÆZ†Õ‡µk VV «ˆ•׫QuB½¨¾«þZ=¯¾­žS©þD}I}Q}A=£>§~W}V}F}ZýŽú”:®>®žRGÔêQõˆQoWª·ªÔýêÍj‡Ú¨®RÓÔë‰IhûäCÅöäÿWêóLèœèÑÛ'ñĺ‰ùÑß’äwð~Œå“ƒ_‡; úë¨ÄÑ_‚îXûópÔÐìVzÞÔ¤ô‡ÃY,÷Âëì &\Ö÷9þÿÀß÷Ñk`l°½l{y­pÖÚ< ß'Ì­¼öÂMÆz‹Ñw ù¨o'=ïBÞ]èç{áóìh€!PѪؽð,lGÙœ§žûp­ý°÷3C(‚ ¢oã ÛÐïŸþ:áŸxlâ\]…=ðYá=Œ€Téžè»Ðu¨ÃhHè™X¯ÇÿïÒÈ°ßËcfàÁÃÐ ü9†Ï¿ýäŠDa¢óÒÎK{¢½Õö ÛϤ'¤·DUš}pwöKð5¢îDo}ý£g³À ,°À‚ÿ‚p+Þ£wÃÝÑCч  æÛ³á!¼gë&Zmíx#Âr=ݼ_ƒ/à;Æ«ðe¨Ç7€SÑ7¦Ìò?ð¾~ßHêñoð?!}o僶=øm•ùÁ”&J ÚlIøÎd|gðQufÑB†'cŽ'Ãó€øÓ‹ _ZcÛó~äniÎp*ú+v¾aˆUAY…ä ”¬m–²ðÕèæBÑ' +bê‰ Ì™ ' cÑ7N¦Ú×&ø”-¯þpàÕ@ªÈÏsþcÕ¢…LôŠY³‹—,.÷—帲íloÖm™­¥ÕÕ¥W­Xa;~á}Éþ~K°”3Jùïšýµø²0Lk'€7˜.J>éIéû’M’’D» ŠPå?SÆ|hËœ?ˆx3Øâ;Ùÿ»Óv|¢š=É+ÿ³Ý;Øû¨ðœkfÐ)°æ¶õãÿß~z2æÛâÛ¾- +NáYâF/ýT˜ÍÞ¿…Ã÷ûêà†Gƒ®›òÙî,VœUž% ä°œ¼”TÖŠ&Ÿâ„ ‰àRNåä3[Rª=3#3ýˆþ€DG)ˆöçsFþ\6 üàÆ.6}ÿ[ØËfeEÌÅŽ¬T§NÞí´cŸsÆXôî]|¾wÙ>Ey?eJf@Q|Ê¿ò Þ†ªªÌ\ä(Ü)[¶lñx3/õÚ˜—Ïõæ¸ÐG~–“ë/_Êüö¯¥IyY9M¹®)ñ¾Ÿ²1º]Ég÷OâS^paTª[Øyí·/mÇ/æ ö,_ÇÝi¾!9ñ;Ä ³àKÁŠt;sÚgæ¥8 ApÛÜÇÚl9Ì•æJqkKq¦CFêtGd¶T²üw'uœ.à.`…yÜðÿÙoþä©‘3Oc<à‰“2Ñê¶ÓàÀŸË-Np%¦$ iÎ~þ÷2“íÜ;7ÁÎM°Ä“ñn0 ™ ¶:$ºâe¾Pu¦¬ÌWUŵ&õø&¹üåxVr…Ç” =~ÿý’÷Ž¶àlq“çé/½'Á ½ûÒø)×ð”·àwZ2äbt§AEJæR{F aIfÀŽ>9WuŽùÎùÎa,d§ ^<ç2ˆ‹K/.P¶\Z¶|ãí»&~ÆVÉ®y°rÏC·ÞÔ§}f…0÷æïݱ^òO\˜xoÛ]×/¸xn¡ú~&p=[®ç9˜žëÌ^ê’í6XÊr–¸øàb~¿ßw®¬lÑByåzzìñà3£‡?[Ç—»”œ1ñ?['¾éJEñ‹/±Ëž+È`uÿGxB //ZV|ñ¢(WË«/ÕHþKˬɵ¶HxR÷€ø +j4Š 4˜›“ù…IK“s—&,KYÂ’Q7Õ9Œ—sT±ÌwééÌ×P,ј:Ê +z(Á•“+bˆèî_"«h¾oVø~¶óÚHxqq]GeeÕ̽{¸wi[ÐËVÊÊŒä‰zÉ?wMOͲΆ%©b~ûêu Q°´Œz'å±\(¦cÍÒ’(ŠÒ‰4ß«?¤4yéi3Eò]š]Š»\ð£Nloö@ö©Œ‚y¹¹ó 22ñ™3¯ óå¿J ï?ÅiêÃgfÁ|¾Þ¨´TxÌ^Hy³ð1°±C`Æ}K° B€Ío†„™37|EHþŠ½p"½Á+ßç„ÕbðSœ'íöE|I>=KŠ— 7 +«ñ›Çc”论¼|õßWXé'*ßøò®U¬b«XÅ*V±ŠU¬b«XÅ*V±ŠU¬b«XÅ*V±Ê{”ËÊP¬|Û*då‚U¬b«Xå¿c ²Ø*V±ŠU¬b«ü÷.ôÓ …:ÐÿE5²‰ÃiNj‰ôóiB±A‹ ÇøRœŒ ò„ÅmGùƒN€a“A'Âá%ƒNk¥× :5M²-3è4â‹À$×ud-'Ú†´3kÑvâÿ Ñ ÄßNt"Ñ7„Jç Ï´n‹Në¶è´n‹NKq2º-:­Û¢Óº-:­Û¢Ó)1“Ж¼¬ˆA§ÁƒŸgK +×ÓsÑŽ8~§=£D;¹žž§ˆÎB:Óó<ÑÙqò.²W§sâø3hìkD»i-}ÎYq2…qtÉŸ'ú*¢'8§sbÜüŽ8¾ÃÔÿ C,„EPÔZèN€]0ˆu+ !¯©è'FNR}PŠ=ÕЋE†&ämƒnì¤V>»Pzb•$S±¬ÂVr»`/rÖãŒ]8O ì#J¦Ÿ‘݇sï¦U{‘ÚFÚÈXw¡Ì>k®#Çô^~¤Šc­¥PB:„q†~”•qÝ0®Ãç脆ìlu#—÷îFc6µ ¿‡ìèý@}¶’/dXíìáÜ0ybªú<» KeZe7öv’½¦‡÷âØâìF)•<'#¿›xka5êĽÓCãúÈ·WÓø.’肸fýì/Dz¡‘)+öµu1wpÒÞ?D?¡Ü‹r¥ÐŒímØÇÇnÄõõ=݆úõ’®×’Žƒ±y–à˜rôÿä8>*~Ýa²‹G‘JZó¹v‡¶N±øòÜFíݨ½)Í÷s'¶ùÞö}¥ÿa±œLÕŠç?”xæBÉAX>,*ùŽ÷ì¼,FJÈò!½"eÅ +÷ý>ä†Q7݇WŠ¯AŠÑ~ÒX×}+é6D{ÑF#eŠü}äÝž¡Ø™Òœ·‹"…{’GjÅJrýÆ^–Йê£uúÉúØNc–.£¦¹ûi'¸ÅCÔÇGuæÞL÷ó1BßõË8[c6”|¬SÜOmÇtb»ÄØs~¶ôuKbëL· ‡öw/ù©“NÁ•|¶×°´‡ÎG/óÔN÷=ÓKÔ<”Ÿ?%î®<»®Ã§õm|Tó™¶!o€âxˆv®3ÇW²À\ýr½®Ž‹n‰nË­gæ¹: û(~v¡—úèô‡?ÐR=öÂS¢J?Å» ¬[¥Ó»éléY…kkî¦9—ì¥ÌýÁ1ªgà>cg&g7OHáåÊs—è{è3v|NIoLó\O¥ïÕø^·2þ¦™Ó“žØK~Üù)÷Ѽ ø›]Ÿá™®8 TÂ|ÍI¿lG‰Î¸»cèCò±žùU²À¼ñ–MÉâú;Ö¢¯ô®ÜGw„yËLúǼÉ&}ŸS¦Ž¤\¡ïU‡a÷•ïÜðìè@ÌúAŠÒ>š]?EúÍ£Ú0ï·U¢ÞõP‡­ëð¶l"ÿÎ’1‹6aϵتEn-ræ¢D³Ñ?—vê:º‡V¡ÜFºãô9š¯Ãvå¸:©Í[õ(¿çâcCÐJk„p¶f’l¢¹×"·Ÿ!CŽ¨AÎFlsz%eA}½u8Jó_m܉º¦-È—cNÕj5­hj¶[M8ÿ*£·ç^MóqýùúuD¯‹éYghZM>â3ó9kP£jqîF|6¢\3­_M6ëÚ®#ê°_·%Dð•K [u9îŸk¾G\¿,“VU“V‘6“þ«Ág#jÎç_‰½-tC¬Ç‘µdi3y/døŒ[Û@­I«ôª!k¸W¹j‘^‹ueÌwM„u]šâf›ê»ë¨RJ·¯ÚÀ5ä¹õÔÒw£†Z-´W¼·ÄØË&²cúª×Q$†Hªš,nŽEHE¯®½úëã4Ñ×ã{¯‹Õò‡œ}³£±Ó—û…{½š|ÂõjŽ­üA3—bï.Ê4üÔ÷щÆw–Šçv;¶A9Çìo6²„J'[‹#âãâ“XO‹Šß´¾'­ïÉOà[ë{ò÷÷=©ÿþžõMù‡ùM©ïžõ]i}WZß•Öwåôln}[Ný¶4½c}_Zß—Ö÷åµïK~6'¿1ÃtO˜íW雳kÊ7h×”¯LúΔ +¤ER½´Rºq¥Ã˜ýø»:ÏYÕ(1@NËG— ºsÄ•Ïyüo©½}Û ºdP§[8Ýê+Y9е£¤fß@oIõÀNlvíàh6Ã%«º:JzwYZ?±àßð r +endstream +endobj +1053 0 obj +<< +/P 969 0 R +/S /L +/A 1082 0 R +/Type /StructElem +/K [1054 0 R 1055 0 R 1056 0 R] +/Pg 18 0 R +>> +endobj +1054 0 obj +<< +/P 1053 0 R +/S /LI +/Type /StructElem +/K [970 0 R] +/Pg 18 0 R +>> +endobj +1055 0 obj +<< +/P 1053 0 R +/S /LI +/Type /StructElem +/K [971 0 R] +/Pg 18 0 R +>> +endobj +1056 0 obj +<< +/P 1053 0 R +/S /LI +/Type /StructElem +/K [972 0 R] +/Pg 18 0 R +>> +endobj +1057 0 obj +<< +/P 973 0 R +/S /L +/A 1083 0 R +/Type /StructElem +/K [1058 0 R 1059 0 R 1060 0 R] +/Pg 18 0 R +>> +endobj +1058 0 obj +<< +/P 1057 0 R +/S /LI +/Type /StructElem +/K [974 0 R] +/Pg 18 0 R +>> +endobj +1059 0 obj +<< +/P 1057 0 R +/S /LI +/Type /StructElem +/K [975 0 R] +/Pg 18 0 R +>> +endobj +1060 0 obj +<< +/P 1057 0 R +/S /LI +/Type /StructElem +/K [976 0 R] +/Pg 18 0 R +>> +endobj +1061 0 obj +<< +/P 985 0 R +/S /L +/A 1084 0 R +/Type /StructElem +/K [1062 0 R 1063 0 R] +/Pg 20 0 R +>> +endobj +1062 0 obj +<< +/P 1061 0 R +/S /LI +/Type /StructElem +/K [986 0 R] +/Pg 20 0 R +>> +endobj +1063 0 obj +<< +/P 1061 0 R +/S /LI +/Type /StructElem +/K [987 0 R] +/Pg 20 0 R +>> +endobj +1064 0 obj +<< +/P 989 0 R +/S /L +/A 1085 0 R +/Type /StructElem +/K [1065 0 R 1066 0 R] +/Pg 20 0 R +>> +endobj +1065 0 obj +<< +/P 1064 0 R +/S /LI +/Type /StructElem +/K [990 0 R] +/Pg 20 0 R +>> +endobj +1066 0 obj +<< +/P 1064 0 R +/S /LI +/Type /StructElem +/K [991 0 R] +/Pg 20 0 R +>> +endobj +1067 0 obj +<< +/P 991 0 R +/S /L +/A 1086 0 R +/Type /StructElem +/K [1068 0 R] +/Pg 20 0 R +>> +endobj +1068 0 obj +<< +/P 1067 0 R +/S /LI +/Type /StructElem +/K [992 0 R] +/Pg 20 0 R +>> +endobj +1069 0 obj +<< +/P 996 0 R +/S /L +/A 1087 0 R +/Type /StructElem +/K [1070 0 R 1071 0 R] +/Pg 20 0 R +>> +endobj +1070 0 obj +<< +/P 1069 0 R +/S /LI +/Type /StructElem +/K [997 0 R] +/Pg 20 0 R +>> +endobj +1071 0 obj +<< +/P 1069 0 R +/S /LI +/Type /StructElem +/K [998 0 R] +/Pg 20 0 R +>> +endobj +1072 0 obj +<< +/P 999 0 R +/S /L +/A 1088 0 R +/Type /StructElem +/K [1073 0 R] +/Pg 20 0 R +>> +endobj +1073 0 obj +<< +/P 1072 0 R +/S /LI +/Type /StructElem +/K [1000 0 R] +/Pg 20 0 R +>> +endobj +1074 0 obj +<< +/D [15 0 R /FitH 454] +/S /GoTo +>> +endobj +1075 0 obj +<< +/A 1089 0 R +/Next 1039 0 R +/Parent 953 0 R +/Prev 1038 0 R +/Title (Psychology of colour) +>> +endobj +1076 0 obj +<< +/D [17 0 R /FitH 536] +/S /GoTo +>> +endobj +1077 0 obj +<< +/D [18 0 R /FitH 768] +/S /GoTo +>> +endobj +1078 0 obj +<< +/A 1090 0 R +/Next 1091 0 R +/Parent 1040 0 R +/Title (Menu) +>> +endobj +1079 0 obj +<< +/A 1092 0 R +/Parent 1040 0 R +/Prev 1091 0 R +/Title (Messages) +>> +endobj +1080 0 obj +<< +/A 1093 0 R +/Next 1042 0 R +/Parent 4 0 R +/Prev 1040 0 R +/Title (Benefits) +>> +endobj +1081 0 obj +<< +/D [20 0 R /FitH 940] +/S /GoTo +>> +endobj +1082 0 obj +<< +/O /List +/ListNumbering /None +>> +endobj +1083 0 obj +<< +/O /List +/ListNumbering /None +>> +endobj +1084 0 obj +<< +/O /List +/ListNumbering /None +>> +endobj +1085 0 obj +<< +/O /List +/ListNumbering /None +>> +endobj +1086 0 obj +<< +/O /List +/ListNumbering /None +>> +endobj +1087 0 obj +<< +/O /List +/ListNumbering /None +>> +endobj +1088 0 obj +<< +/O /List +/ListNumbering /None +>> +endobj +1089 0 obj +<< +/D [16 0 R /FitH 348] +/S /GoTo +>> +endobj +1090 0 obj +<< +/D [18 0 R /FitH 768] +/S /GoTo +>> +endobj +1091 0 obj +<< +/A 1094 0 R +/Next 1079 0 R +/Parent 1040 0 R +/Prev 1078 0 R +/Title (Settings) +>> +endobj +1092 0 obj +<< +/D [19 0 R /FitH 820] +/S /GoTo +>> +endobj +1093 0 obj +<< +/D [19 0 R /FitH 325] +/S /GoTo +>> +endobj +1094 0 obj +<< +/D [18 0 R /FitH 543] +/S /GoTo +>> +endobj +xref +0 1095 +0000000000 65535 f +0000000015 00000 n +0000000397 00000 n +0000000537 00000 n +0000001574 00000 n +0000001648 00000 n +0000001748 00000 n +0000001859 00000 n +0000000202 00000 n +0000001902 00000 n +0000003226 00000 n +0000003325 00000 n +0000003411 00000 n +0000003431 00000 n +0000003533 00000 n +0000003611 00000 n +0000003914 00000 n +0000004276 00000 n +0000004651 00000 n +0000005013 00000 n +0000005351 00000 n +0000005653 00000 n +0000005981 00000 n +0000006265 00000 n +0000012662 00000 n +0000013569 00000 n +0000013622 00000 n +0000013713 00000 n +0000013766 00000 n +0000013863 00000 n +0000018544 00000 n +0000018607 00000 n +0000018755 00000 n +0000018908 00000 n +0000019647 00000 n +0000019822 00000 n +0000025296 00000 n +0000025359 00000 n +0000025803 00000 n +0000052667 00000 n +0000063923 00000 n +0000069188 00000 n +0000069251 00000 n +0000069403 00000 n +0000095697 00000 n +0000118237 00000 n +0000123367 00000 n +0000123430 00000 n +0000123601 00000 n +0000132445 00000 n +0000161401 00000 n +0000164807 00000 n +0000164870 00000 n +0000277996 00000 n +0000280765 00000 n +0000280828 00000 n +0000286184 00000 n +0000286247 00000 n +0000286323 00000 n +0000286417 00000 n +0000286493 00000 n +0000286587 00000 n +0000286686 00000 n +0000286780 00000 n +0000286874 00000 n +0000286968 00000 n +0000287169 00000 n +0000287263 00000 n +0000287358 00000 n +0000287459 00000 n +0000287554 00000 n +0000287649 00000 n +0000287744 00000 n +0000287839 00000 n +0000287951 00000 n +0000288046 00000 n +0000288149 00000 n +0000288244 00000 n +0000288339 00000 n +0000288434 00000 n +0000288563 00000 n +0000288658 00000 n +0000288761 00000 n +0000288856 00000 n +0000288951 00000 n +0000289046 00000 n +0000289141 00000 n +0000289236 00000 n +0000289334 00000 n +0000289429 00000 n +0000289524 00000 n +0000289639 00000 n +0000289734 00000 n +0000289882 00000 n +0000289977 00000 n +0000290054 00000 n +0000290149 00000 n +0000290301 00000 n +0000290408 00000 n +0000290503 00000 n +0000290628 00000 n +0000290766 00000 n +0000290877 00000 n +0000290973 00000 n +0000291084 00000 n +0000291180 00000 n +0000291288 00000 n +0000291396 00000 n +0000291495 00000 n +0000291591 00000 n +0000292102 00000 n +0000292298 00000 n +0000292427 00000 n +0000292523 00000 n +0000292645 00000 n +0000292752 00000 n +0000292879 00000 n +0000293048 00000 n +0000293144 00000 n +0000293308 00000 n +0000293414 00000 n +0000293510 00000 n +0000293623 00000 n +0000293728 00000 n +0000294223 00000 n +0000294387 00000 n +0000294483 00000 n +0000294579 00000 n +0000294657 00000 n +0000294753 00000 n +0000294831 00000 n +0000294927 00000 n +0000295124 00000 n +0000295280 00000 n +0000295376 00000 n +0000295477 00000 n +0000295605 00000 n +0000295707 00000 n +0000295811 00000 n +0000295943 00000 n +0000296048 00000 n +0000296249 00000 n +0000296389 00000 n +0000296492 00000 n +0000296589 00000 n +0000296685 00000 n +0000296811 00000 n +0000296911 00000 n +0000297007 00000 n +0000297110 00000 n +0000297215 00000 n +0000297342 00000 n +0000297453 00000 n +0000297549 00000 n +0000297657 00000 n +0000297753 00000 n +0000297849 00000 n +0000297945 00000 n +0000298091 00000 n +0000298190 00000 n +0000298287 00000 n +0000298393 00000 n +0000298533 00000 n +0000299073 00000 n +0000299219 00000 n +0000299316 00000 n +0000299413 00000 n +0000299508 00000 n +0000299608 00000 n +0000299784 00000 n +0000299895 00000 n +0000300027 00000 n +0000300122 00000 n +0000300287 00000 n +0000300382 00000 n +0000300500 00000 n +0000300595 00000 n +0000300715 00000 n +0000300811 00000 n +0000300914 00000 n +0000301058 00000 n +0000301173 00000 n +0000301269 00000 n +0000301365 00000 n +0000301484 00000 n +0000301580 00000 n +0000301682 00000 n +0000301783 00000 n +0000301886 00000 n +0000301982 00000 n +0000302107 00000 n +0000302203 00000 n +0000302308 00000 n +0000302418 00000 n +0000302514 00000 n +0000302610 00000 n +0000302775 00000 n +0000302954 00000 n +0000303128 00000 n +0000303232 00000 n +0000303337 00000 n +0000303436 00000 n +0000303537 00000 n +0000303642 00000 n +0000303738 00000 n +0000303877 00000 n +0000303982 00000 n +0000304078 00000 n +0000304174 00000 n +0000304336 00000 n +0000304440 00000 n +0000304536 00000 n +0000304662 00000 n +0000304791 00000 n +0000304900 00000 n +0000304996 00000 n +0000305092 00000 n +0000305196 00000 n +0000305292 00000 n +0000305394 00000 n +0000305492 00000 n +0000305588 00000 n +0000305684 00000 n +0000305860 00000 n +0000305981 00000 n +0000306079 00000 n +0000306175 00000 n +0000306317 00000 n +0000306592 00000 n +0000306859 00000 n +0000306991 00000 n +0000307087 00000 n +0000307183 00000 n +0000307294 00000 n +0000307390 00000 n +0000307494 00000 n +0000307590 00000 n +0000307694 00000 n +0000307865 00000 n +0000308300 00000 n +0000308412 00000 n +0000308508 00000 n +0000308604 00000 n +0000308730 00000 n +0000308826 00000 n +0000308922 00000 n +0000309020 00000 n +0000309128 00000 n +0000309241 00000 n +0000309354 00000 n +0000309450 00000 n +0000309552 00000 n +0000309648 00000 n +0000309763 00000 n +0000309931 00000 n +0000310034 00000 n +0000310130 00000 n +0000310226 00000 n +0000310334 00000 n +0000310430 00000 n +0000310526 00000 n +0000310657 00000 n +0000310753 00000 n +0000310900 00000 n +0000310996 00000 n +0000311179 00000 n +0000311305 00000 n +0000311841 00000 n +0000311976 00000 n +0000312073 00000 n +0000312170 00000 n +0000312249 00000 n +0000312346 00000 n +0000312448 00000 n +0000312545 00000 n +0000312677 00000 n +0000312784 00000 n +0000312881 00000 n +0000312978 00000 n +0000313100 00000 n +0000313206 00000 n +0000313317 00000 n +0000313426 00000 n +0000313529 00000 n +0000313626 00000 n +0000313742 00000 n +0000313839 00000 n +0000313938 00000 n +0000314096 00000 n +0000314194 00000 n +0000314291 00000 n +0000314420 00000 n +0000314517 00000 n +0000314618 00000 n +0000314715 00000 n +0000314812 00000 n +0000314909 00000 n +0000315066 00000 n +0000315149 00000 n +0000315252 00000 n +0000315349 00000 n +0000315446 00000 n +0000315543 00000 n +0000315640 00000 n +0000315747 00000 n +0000315856 00000 n +0000315953 00000 n +0000316110 00000 n +0000316193 00000 n +0000316296 00000 n +0000316393 00000 n +0000316490 00000 n +0000316587 00000 n +0000316684 00000 n +0000316797 00000 n +0000316894 00000 n +0000317016 00000 n +0000317111 00000 n +0000317292 00000 n +0000317438 00000 n +0000317533 00000 n +0000317664 00000 n +0000317817 00000 n +0000317912 00000 n +0000318026 00000 n +0000318134 00000 n +0000318240 00000 n +0000318426 00000 n +0000318821 00000 n +0000318917 00000 n +0000319013 00000 n +0000319129 00000 n +0000319225 00000 n +0000319365 00000 n +0000319467 00000 n +0000319563 00000 n +0000319687 00000 n +0000319788 00000 n +0000319884 00000 n +0000319993 00000 n +0000320107 00000 n +0000320207 00000 n +0000320322 00000 n +0000320418 00000 n +0000320568 00000 n +0000320667 00000 n +0000320788 00000 n +0000320890 00000 n +0000320986 00000 n +0000321101 00000 n +0000321212 00000 n +0000321308 00000 n +0000321416 00000 n +0000321513 00000 n +0000321609 00000 n +0000321714 00000 n +0000321854 00000 n +0000321958 00000 n +0000322054 00000 n +0000322190 00000 n +0000322302 00000 n +0000322398 00000 n +0000322500 00000 n +0000322596 00000 n +0000322692 00000 n +0000322788 00000 n +0000322884 00000 n +0000323038 00000 n +0000323139 00000 n +0000323235 00000 n +0000323331 00000 n +0000323409 00000 n +0000323505 00000 n +0000323964 00000 n +0000324183 00000 n +0000324279 00000 n +0000324386 00000 n +0000324482 00000 n +0000324582 00000 n +0000324678 00000 n +0000324798 00000 n +0000324894 00000 n +0000324992 00000 n +0000325088 00000 n +0000325187 00000 n +0000325283 00000 n +0000325395 00000 n +0000325500 00000 n +0000325596 00000 n +0000325975 00000 n +0000326078 00000 n +0000326174 00000 n +0000326277 00000 n +0000326373 00000 n +0000326476 00000 n +0000326572 00000 n +0000326835 00000 n +0000326931 00000 n +0000327064 00000 n +0000327160 00000 n +0000327260 00000 n +0000327767 00000 n +0000327863 00000 n +0000327965 00000 n +0000328146 00000 n +0000328251 00000 n +0000328347 00000 n +0000328446 00000 n +0000328551 00000 n +0000328700 00000 n +0000328796 00000 n +0000328892 00000 n +0000329411 00000 n +0000329850 00000 n +0000329946 00000 n +0000330063 00000 n +0000330215 00000 n +0000330312 00000 n +0000330450 00000 n +0000330603 00000 n +0000330700 00000 n +0000330838 00000 n +0000330935 00000 n +0000331055 00000 n +0000331171 00000 n +0000331268 00000 n +0000331365 00000 n +0000331522 00000 n +0000331679 00000 n +0000331762 00000 n +0000331865 00000 n +0000331962 00000 n +0000332059 00000 n +0000332156 00000 n +0000332253 00000 n +0000332370 00000 n +0000332467 00000 n +0000332969 00000 n +0000333081 00000 n +0000333176 00000 n +0000333273 00000 n +0000333368 00000 n +0000333467 00000 n +0000333568 00000 n +0000333663 00000 n +0000333790 00000 n +0000333885 00000 n +0000333986 00000 n +0000334082 00000 n +0000334233 00000 n +0000334367 00000 n +0000334522 00000 n +0000334623 00000 n +0000334719 00000 n +0000334854 00000 n +0000334950 00000 n +0000335028 00000 n +0000335124 00000 n +0000335202 00000 n +0000335298 00000 n +0000335472 00000 n +0000335569 00000 n +0000335674 00000 n +0000335773 00000 n +0000335869 00000 n +0000335987 00000 n +0000336087 00000 n +0000336216 00000 n +0000336330 00000 n +0000336482 00000 n +0000336606 00000 n +0000336702 00000 n +0000336808 00000 n +0000336905 00000 n +0000337001 00000 n +0000337105 00000 n +0000337213 00000 n +0000337345 00000 n +0000337441 00000 n +0000337554 00000 n +0000337690 00000 n +0000337794 00000 n +0000337890 00000 n +0000338016 00000 n +0000338165 00000 n +0000338263 00000 n +0000338375 00000 n +0000338471 00000 n +0000338567 00000 n +0000338665 00000 n +0000338777 00000 n +0000338874 00000 n +0000338972 00000 n +0000339068 00000 n +0000339186 00000 n +0000339319 00000 n +0000339457 00000 n +0000339553 00000 n +0000339649 00000 n +0000339727 00000 n +0000339823 00000 n +0000339922 00000 n +0000340018 00000 n +0000340124 00000 n +0000340220 00000 n +0000340345 00000 n +0000340672 00000 n +0000340792 00000 n +0000340893 00000 n +0000341312 00000 n +0000341441 00000 n +0000341824 00000 n +0000341990 00000 n +0000342086 00000 n +0000342207 00000 n +0000342313 00000 n +0000342409 00000 n +0000342556 00000 n +0000342655 00000 n +0000342751 00000 n +0000342848 00000 n +0000342944 00000 n +0000343259 00000 n +0000343574 00000 n +0000343694 00000 n +0000343790 00000 n +0000343889 00000 n +0000343985 00000 n +0000344102 00000 n +0000344258 00000 n +0000344354 00000 n +0000344625 00000 n +0000344721 00000 n +0000344799 00000 n +0000344901 00000 n +0000344997 00000 n +0000345075 00000 n +0000345175 00000 n +0000345272 00000 n +0000345351 00000 n +0000345459 00000 n +0000345556 00000 n +0000345635 00000 n +0000345747 00000 n +0000345844 00000 n +0000345923 00000 n +0000346026 00000 n +0000346123 00000 n +0000346202 00000 n +0000346303 00000 n +0000346400 00000 n +0000346479 00000 n +0000346583 00000 n +0000346680 00000 n +0000346759 00000 n +0000346873 00000 n +0000346970 00000 n +0000347049 00000 n +0000347158 00000 n +0000347255 00000 n +0000347352 00000 n +0000347509 00000 n +0000347592 00000 n +0000347695 00000 n +0000347792 00000 n +0000347889 00000 n +0000347986 00000 n +0000348083 00000 n +0000348183 00000 n +0000348280 00000 n +0000348437 00000 n +0000348520 00000 n +0000348623 00000 n +0000348720 00000 n +0000348817 00000 n +0000348914 00000 n +0000349011 00000 n +0000349123 00000 n +0000349220 00000 n +0000349762 00000 n +0000349895 00000 n +0000349990 00000 n +0000350085 00000 n +0000350162 00000 n +0000350257 00000 n +0000350392 00000 n +0000350539 00000 n +0000350641 00000 n +0000350753 00000 n +0000350849 00000 n +0000351049 00000 n +0000351432 00000 n +0000351528 00000 n +0000351654 00000 n +0000352189 00000 n +0000352390 00000 n +0000352494 00000 n +0000352594 00000 n +0000352703 00000 n +0000352799 00000 n +0000352907 00000 n +0000353023 00000 n +0000353128 00000 n +0000353224 00000 n +0000353323 00000 n +0000353472 00000 n +0000353571 00000 n +0000353672 00000 n +0000353768 00000 n +0000354243 00000 n +0000354343 00000 n +0000354439 00000 n +0000354517 00000 n +0000354613 00000 n +0000354812 00000 n +0000354949 00000 n +0000355069 00000 n +0000355165 00000 n +0000355299 00000 n +0000355400 00000 n +0000355496 00000 n +0000355646 00000 n +0000355745 00000 n +0000355942 00000 n +0000356060 00000 n +0000356387 00000 n +0000356483 00000 n +0000356639 00000 n +0000356721 00000 n +0000356823 00000 n +0000356919 00000 n +0000357015 00000 n +0000357111 00000 n +0000357207 00000 n +0000357315 00000 n +0000357411 00000 n +0000357488 00000 n +0000357583 00000 n +0000357660 00000 n +0000357755 00000 n +0000357832 00000 n +0000357943 00000 n +0000358038 00000 n +0000358115 00000 n +0000358247 00000 n +0000358342 00000 n +0000358420 00000 n +0000358549 00000 n +0000358645 00000 n +0000358723 00000 n +0000358843 00000 n +0000358939 00000 n +0000359017 00000 n +0000359119 00000 n +0000359215 00000 n +0000359293 00000 n +0000359392 00000 n +0000359488 00000 n +0000359566 00000 n +0000359672 00000 n +0000359795 00000 n +0000359891 00000 n +0000359989 00000 n +0000360085 00000 n +0000360163 00000 n +0000360259 00000 n +0000360337 00000 n +0000360454 00000 n +0000360550 00000 n +0000360628 00000 n +0000360745 00000 n +0000360841 00000 n +0000360919 00000 n +0000361072 00000 n +0000361168 00000 n +0000361246 00000 n +0000361379 00000 n +0000361475 00000 n +0000361553 00000 n +0000361700 00000 n +0000361796 00000 n +0000361900 00000 n +0000361996 00000 n +0000362074 00000 n +0000362205 00000 n +0000362301 00000 n +0000362379 00000 n +0000362475 00000 n +0000362553 00000 n +0000362664 00000 n +0000362760 00000 n +0000362838 00000 n +0000362934 00000 n +0000363012 00000 n +0000363132 00000 n +0000363228 00000 n +0000363306 00000 n +0000363445 00000 n +0000363541 00000 n +0000363619 00000 n +0000363745 00000 n +0000363841 00000 n +0000363919 00000 n +0000364032 00000 n +0000364154 00000 n +0000364250 00000 n +0000364329 00000 n +0000364466 00000 n +0000364563 00000 n +0000364641 00000 n +0000364737 00000 n +0000364816 00000 n +0000364929 00000 n +0000365026 00000 n +0000365104 00000 n +0000365200 00000 n +0000365279 00000 n +0000365407 00000 n +0000365504 00000 n +0000365583 00000 n +0000365695 00000 n +0000365792 00000 n +0000365871 00000 n +0000365981 00000 n +0000366078 00000 n +0000366156 00000 n +0000366252 00000 n +0000366331 00000 n +0000366440 00000 n +0000366537 00000 n +0000366616 00000 n +0000366723 00000 n +0000366820 00000 n +0000366899 00000 n +0000367000 00000 n +0000367097 00000 n +0000367219 00000 n +0000367317 00000 n +0000367394 00000 n +0000367489 00000 n +0000367931 00000 n +0000368050 00000 n +0000368155 00000 n +0000368250 00000 n +0000368345 00000 n +0000368449 00000 n +0000368624 00000 n +0000368719 00000 n +0000368954 00000 n +0000369050 00000 n +0000369481 00000 n +0000369577 00000 n +0000369673 00000 n +0000369751 00000 n +0000369847 00000 n +0000369994 00000 n +0000370090 00000 n +0000370200 00000 n +0000370559 00000 n +0000370663 00000 n +0000370769 00000 n +0000370960 00000 n +0000371383 00000 n +0000371480 00000 n +0000371597 00000 n +0000371916 00000 n +0000372016 00000 n +0000372303 00000 n +0000372399 00000 n +0000372495 00000 n +0000372624 00000 n +0000372720 00000 n +0000372834 00000 n +0000372975 00000 n +0000373172 00000 n +0000373270 00000 n +0000373501 00000 n +0000373602 00000 n +0000373698 00000 n +0000373802 00000 n +0000374149 00000 n +0000374249 00000 n +0000374345 00000 n +0000374537 00000 n +0000374637 00000 n +0000374733 00000 n +0000374845 00000 n +0000374941 00000 n +0000375100 00000 n +0000375196 00000 n +0000375360 00000 n +0000375486 00000 n +0000375582 00000 n +0000375678 00000 n +0000375774 00000 n +0000375852 00000 n +0000375948 00000 n +0000376063 00000 n +0000376350 00000 n +0000376447 00000 n +0000376554 00000 n +0000376665 00000 n +0000376762 00000 n +0000376894 00000 n +0000376990 00000 n +0000377091 00000 n +0000377187 00000 n +0000377285 00000 n +0000377381 00000 n +0000377480 00000 n +0000377576 00000 n +0000377675 00000 n +0000377771 00000 n +0000377870 00000 n +0000377966 00000 n +0000378063 00000 n +0000378159 00000 n +0000378258 00000 n +0000378354 00000 n +0000378472 00000 n +0000378580 00000 n +0000378676 00000 n +0000378789 00000 n +0000378885 00000 n +0000379308 00000 n +0000379452 00000 n +0000379575 00000 n +0000379726 00000 n +0000379835 00000 n +0000379950 00000 n +0000380053 00000 n +0000380177 00000 n +0000380273 00000 n +0000380380 00000 n +0000380481 00000 n +0000380577 00000 n +0000380964 00000 n +0000381080 00000 n +0000381184 00000 n +0000381293 00000 n +0000381394 00000 n +0000381498 00000 n +0000381632 00000 n +0000381729 00000 n +0000381834 00000 n +0000381936 00000 n +0000382033 00000 n +0000382397 00000 n +0000382521 00000 n +0000382619 00000 n +0000382729 00000 n +0000382833 00000 n +0000382962 00000 n +0000383059 00000 n +0000383156 00000 n +0000383243 00000 n +0000383330 00000 n +0000383453 00000 n +0000383576 00000 n +0000383692 00000 n +0000383829 00000 n +0000383931 00000 n +0000384018 00000 n +0000384263 00000 n +0000384400 00000 n +0000384481 00000 n +0000384570 00000 n +0000384660 00000 n +0000384757 00000 n +0000385014 00000 n +0000385159 00000 n +0000385240 00000 n +0000385335 00000 n +0000385624 00000 n +0000385913 00000 n +0000385994 00000 n +0000386291 00000 n +0000386386 00000 n +0000386555 00000 n +0000386684 00000 n +0000386765 00000 n +0000386855 00000 n +0000387104 00000 n +0000387185 00000 n +0000387266 00000 n +0000387459 00000 n +0000387548 00000 n +0000387797 00000 n +0000387958 00000 n +0000388039 00000 n +0000388144 00000 n +0000388239 00000 n +0000388329 00000 n +0000388426 00000 n +0000388547 00000 n +0000388860 00000 n +0000389021 00000 n +0000389118 00000 n +0000389199 00000 n +0000389352 00000 n +0000389497 00000 n +0000389586 00000 n +0000389676 00000 n +0000389869 00000 n +0000390126 00000 n +0000390221 00000 n +0000390302 00000 n +0000390392 00000 n +0000390593 00000 n +0000390778 00000 n +0000390867 00000 n +0000390979 00000 n +0000391060 00000 n +0000391157 00000 n +0000391238 00000 n +0000391328 00000 n +0000391441 00000 n +0000391594 00000 n +0000391763 00000 n +0000391858 00000 n +0000391947 00000 n +0000392052 00000 n +0000392197 00000 n +0000392286 00000 n +0000392376 00000 n +0000392506 00000 n +0000392596 00000 n +0000392708 00000 n +0000392798 00000 n +0000392892 00000 n +0000392982 00000 n +0000393085 00000 n +0000393175 00000 n +0000393269 00000 n +0000393359 00000 n +0000393471 00000 n +0000393561 00000 n +0000393673 00000 n +0000393762 00000 n +0000393915 00000 n +0000394004 00000 n +0000394085 00000 n +0000394174 00000 n +0000394367 00000 n +0000394568 00000 n +0000394705 00000 n +0000394786 00000 n +0000394875 00000 n +0000395148 00000 n +0000395309 00000 n +0000395470 00000 n +0000395623 00000 n +0000395704 00000 n +0000395758 00000 n +0000395902 00000 n +0000395956 00000 n +0000396056 00000 n +0000396513 00000 n +0000396935 00000 n +0000397505 00000 n +0000397960 00000 n +0000398226 00000 n +0000398489 00000 n +0000398756 00000 n +0000399267 00000 n +0000399696 00000 n +0000399953 00000 n +0000400091 00000 n +0000400221 00000 n +0000400351 00000 n +0000400463 00000 n +0000400566 00000 n +0000400669 00000 n +0000400772 00000 n +0000400884 00000 n +0000400987 00000 n +0000401090 00000 n +0000401201 00000 n +0000401304 00000 n +0000401434 00000 n +0000401530 00000 n +0000401660 00000 n +0000401790 00000 n +0000401893 00000 n +0000401996 00000 n +0000402099 00000 n +0000402211 00000 n +0000402314 00000 n +0000402417 00000 n +0000402544 00000 n +0000402656 00000 n +0000402759 00000 n +0000402871 00000 n +0000402974 00000 n +0000403093 00000 n +0000403196 00000 n +0000403299 00000 n +0000403411 00000 n +0000403514 00000 n +0000403617 00000 n +0000403737 00000 n +0000403841 00000 n +0000403945 00000 n +0000404049 00000 n +0000404153 00000 n +0000404257 00000 n +0000404361 00000 n +0000404465 00000 n +0000404585 00000 n +0000404639 00000 n +0000404723 00000 n +0000404807 00000 n +0000404891 00000 n +0000404945 00000 n +0000405029 00000 n +0000405113 00000 n +0000405197 00000 n +0000405281 00000 n +0000405365 00000 n +0000405419 00000 n +0000405503 00000 n +0000405587 00000 n +0000405671 00000 n +0000405725 00000 n +0000405809 00000 n +0000405863 00000 n +0000405947 00000 n +0000406031 00000 n +0000406085 00000 n +0000406170 00000 n +0000406224 00000 n +0000406309 00000 n +0000406394 00000 n +0000406479 00000 n +0000406533 00000 n +0000406618 00000 n +0000406703 00000 n +0000406788 00000 n +0000406843 00000 n +0000406955 00000 n +0000407043 00000 n +0000407193 00000 n +0000407248 00000 n +0000407355 00000 n +0000407432 00000 n +0000407696 00000 n +0000407773 00000 n +0000408040 00000 n +0000418315 00000 n +0000448227 00000 n +0000456459 00000 n +0000456536 00000 n +0000456804 00000 n +0000464241 00000 n +0000464355 00000 n +0000464440 00000 n +0000464525 00000 n +0000464610 00000 n +0000464724 00000 n +0000464809 00000 n +0000464894 00000 n +0000464979 00000 n +0000465084 00000 n +0000465169 00000 n +0000465254 00000 n +0000465359 00000 n +0000465444 00000 n +0000465529 00000 n +0000465625 00000 n +0000465710 00000 n +0000465815 00000 n +0000465900 00000 n +0000465985 00000 n +0000466081 00000 n +0000466167 00000 n +0000466222 00000 n +0000466334 00000 n +0000466389 00000 n +0000466444 00000 n +0000466526 00000 n +0000466612 00000 n +0000466710 00000 n +0000466765 00000 n +0000466819 00000 n +0000466873 00000 n +0000466927 00000 n +0000466981 00000 n +0000467035 00000 n +0000467089 00000 n +0000467143 00000 n +0000467198 00000 n +0000467253 00000 n +0000467354 00000 n +0000467409 00000 n +0000467464 00000 n +trailer +<< +/Size 1095 +/Root 1 0 R +/Info 8 0 R +/ID [ ] +>> +startxref +467519 +%%EOF diff --git a/soc/2020/accepted_proposals/pleroma.pdf b/soc/2020/accepted_proposals/pleroma.pdf new file mode 100644 index 0000000000000000000000000000000000000000..642960a13446f917a9f3d886ae3522c92cba7d43 GIT binary patch literal 541062 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
WG^@#j|0+*iT?rj3%!NT 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⁣fx@hc)!i8qL5K__~;DwbZocf)+E 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

A>{|;SXBXoByRGtiJ*+U+Q{U)( zxU!sljGe9R=qK{V=O1z1Bt2c)Gaq_=p;&9RZ}R-{!{5Sr@T29`ge|-rm{XH?wgKHy zPa6@e?H_k}M@;jflO#Bk`PPT7*M=Q{mU4u3_xgaX=u=TU^D;BD5+-|-Vu2mqP1gVX zO+O2+LxVmKjZVs~0#iDU?X2o&;IKn}mZ1~e?s!hJeD?s47Lj_gc?;@nNNFv|m~PZS zTbk#oh#;dDW>@cN7?K=i^L0;rYBnn8Ogk+SGjS-bV=S!$j=&33!$Zgr-w=6+MVR0Q z!fec-{=sK!m)VbgYu9JMT+2ttzfwy|l}T!7=k$Mp5OuRNA4SPT0$m2t1knLj36}cH zV^*pw98MSm&4w}`st%_P&5%g*oXe@r4P`N@>w;uWD(C>uD1&lM>ed=@*6?3ORO~nM zrh4%=%hxqY)#YLOB@3uVt-M7p1=(xL4!$_OOiOfSfmu9|FR+k6Ux4fF6G$oAV*_9-qq}jV;*1gfon=9nXu{%@WWZ$^Y?`r zNA-LU({t=+Kdz%Lt(V)=R^2$sP`llaZm-|f_i*G)&?@KR+B7GDEO8ezRA?#I@QVb< zhmV`d_gqTJ7JXnt&s)haM9UHgnVT{X5D6q33>3Tg;Z#yDoJ2i#T+ziyda_^4PYObI=Wgl5OY37|LR!%?>JW4BcyNo$y z$&E3uE0U~aK|clEA(m%-H0Iw_gh#`mF7;s>g48(Y*Ez9iN>d?u#x)zQ+Scy_&BRPS zF=ctFn;Kt-fWjQ|WgF z#ant=o-3Nt28AfZUQvMqdb7@OueAzAC=SXS-NZ*cYX+Oh-|2e%v_I+3KYZAlq5UG= z;VagM@L*>&{gYXTwet`5`o{V~!QMVB*Sw5YSiS{$!|O;JSDJ8b#?dJ!tn7P4oBf87 z2UnOHgekeFLP(m#U;zY0h?S5lktSuy^U1#hW@`s5C>1kSq%K1OEQ5}4z>~o|yJRpyd|yuXZ1&((9#!W3vY^Yt<+G~vOzatYT+8{H#!zJW<^sY5c7`K4)eFk8hq!&WG;pH>ZlVfAK=CbyA-nGm z=)X8(H<|w*(tg4kil?;;I_9|Va@f^`%XS^XWoyB#K&+TqJ_u2J0^Daw#?df8fDx5j zA?h~HP&b90`WJAYm@1zDd-g8!!#q3^KAe0<+;81?aVLcjfUFPjw`Af2CL&p8rJlEw&(ENCbJR6DTIwL`U^coN{=%I}0a<`P+-u z&BzIThLy&g-34^d9~y6CXryCEygUkE;)It`gp|JH%8ldCoA*A>2kd>rJ<s}RAeS&eUs~gRohl)n&l%-;YO1HB0b08MwjzM>} zQ{cWzC#-f`PC4AAob*oWljZ4kT3=9lK8@)Pj|q<>)1M`3CiNN1|9Anm%Xo_4mCX-j zx@C+m)0iW|vW&kZ3joO~FoUN|2^W9t&_|%!?G#y&CVISZ&gQa@fK-lvE~6A=i_`H2 zd9vbTh!nhaO8FK1gLmk2Z29XE3KOP@U{$v90aO!qKDTgh_{8x&lXul!Uhs6ltgS&O zybkC`#nUkQ!ZA zIqVQN22ZF?aJ=&)<1v$Ca6DF9@lJAZ6p?~c=UN03w$W)i{I7tQ{F4{a^UfgdG&PZ# zV}B08Ua%Y*hofj}@wblOgYgzH>#g3Yd(_$&<@ZhAGkke8y?eCBvZAYP>7sAC(%0AI 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 VVQYsgD#$O!hs(^YsHKGazW{-*vrGU0 literal 0 HcmV?d00001 diff --git a/soc/2020/announcements.php b/soc/2020/announcements.php new file mode 100644 index 0000000..dc1d8bb --- /dev/null +++ b/soc/2020/announcements.php @@ -0,0 +1,215 @@ + + + + + 2020 | GNU social Summer of Code + + + + + + +

+ +
+

Announcements

+

Last August Week (--08-24)

+

Final Report Instructions
+ The report must have A4 paper geometry with 12pt font-size. + The pages, sections and figures must be enumerated. Maximum of 5000 words. + These limits don't include cover, indexes nor appendices. + The report must be well structured.

+ One example of a suitable format is:
+

+- Cover
+    Title / Author / Date
+- Mentors Page
+    Page for the mentors to sign and make the necessary comments (namely a declaration confirming
+    the student has evidenced certain knowledge throughout the summer and worked the
+    declared hours).  Note that this is mandatory.
+- Abstract
+    A brief summary of approximately 250 words. Note that this is mandatory.
+- Preface
+    Explaining when, where, and why the project was carried out, and thanking those who helped.
+- Table of contents
+- Introduction
+    Introduction to the done work, and description of the objectives during the summer.
+    Short background, issue and aim, as well as the structure of the report.
+- Methodology
+    Theories, tools, etc., that were applied in the project.
+    Description of used technologies as well as discarded alternatives.
+- Results
+- Discusssion and conclusion
+    Reflection on whether the aim was fulfilled, and on the opportunities
+    for further development. Critical review and discussion of the results.
+- References
+    In order to enable the reader to review the project and go to the original sources
+    on which the material is based, the report needs a good reference list.
+    Continuously filling in the reference list can save you a lot of time
+    compared to doing everything at the end.
+- Appendices
+    Extensive data material that is relevant to the work, but too large
+    to incorporate into the text, can be included in an appendix.
+            
+

Information on referencing (Lund University Libraries' website)

+

Guide and checklist for writing a summary of a degree project aiming at a popular science readership (Faculty of Engineering (LTH), Lund University)

+ The graphic design +

It is better to concentrate more on the content of the report than on the design. Customise the layout to fit the content rather than the other way around.

+

Second Evaluations open July 27 - 31 17:00 (GMT+1)

+

Quick reminder that the GNU social Summer of Code 2020 assessing week has started! You should have opened your Merge Requests by now. Additionally, if you're on GSoC, you need to fill Google's forms.

+

Best wishes!

+

First Evaluations open June 30 - July 2 17:00 (GMT+1)

+

Quick reminder that the GNU social Summer of Code 2020 assessing week has started! You should have opened your Merge Requests by now. Additionally, we need you to fill two forms.

+

Mentor Evaluation: (information on that one at your email inbox)

+

Student Self Assessment

+

These two forms together will only take 10 minutes to complete and are REQUIRED - don't miss the deadline and fail GS SoC because you didn't take 10 minutes to complete the evaluation.

+

Deadline for students to complete the evaluation form is Thursday, July 2nd at 17:00 (GMT+1).

+

Best wishes!

+

End of June's third week (--06-22)

+

Important Note: +Congrats to you all on maintaining a sensible amount of hours to work with in this final June's week, this was specially important in this exams season of yours.
+This system based on debitable hours per week was a special case due to distributing work with May in order to make it up for exams. +This is not how it will work in the next two months. As was stated in the work schedule explanation, there's +a closed interval of hours that we expect you to work per week. Hence, the freedom you had this month regarding transferring work +from a week to another will soon be significantly reduced.
+That being said, it's also now opportune to kindly remind you of our assessing framework, +please note that hours is not even part of what we use to assess, i.e., working more or less hours isn't really considered, +that's just a formal requirement, we care about results. The parameters you will be graded on are: +- Autonomy (Have you bothered the mentors beyong what's healthy?); +- Objectives satisfaction (Have you done all the tasks you were assigned in the roadmap?); +- Difficulty (Were these tasks hard?).
+By the end of this week, GSoC assessment will start. Best of work nailing it! :) +

+

+

Current status of debitable hours
+Hugo
+Dedicated hours this week: 12
+Expected hours this week: 36.5
+Debitable hours next week: 49.5-(36.5-12)= 25
+
+Susanna
+Dedicated hours this week: 57.75
+Expected hours this week: 36.5
+Debitable hours next week: -5.14-(36.5-57.75)= 16.11
+
+Eliseu
+Dedicated hours this week: 24
+Expected hours this week: 32
+Debitable hours next week: 16-(32-24)= 8
+

+

End of June's second week (--06-15)

+

+

Current status of debitable hours
+Hugo
+Dedicated hours this week: 6
+Expected hours this week: 36.5
+Debitable hours next week: 80-(36.5-6)= 49.5
+
+Susanna
+Dedicated hours this week: 2.15
+Expected hours this week: 36.5
+Debitable hours next week: 29.21-(36.5-2.15)= -5.14
+
+Eliseu
+Dedicated hours this week: 34
+Expected hours this week: 32
+Debitable hours next week: 14-(32-34)= 16
+

+

End of June's first week (--06-08)

+

+

Current status of May debitable hours
+Hugo
+Dedicated hours this week: 20
+Expected hours this week: 24
+24 - 20 = 4h debited from May
+84 - 4 = 80 debitable May hours remaining
+
+Susanna
+Dedicated hours this week: 29.41
+Expected hours this week: 36.5
+36.5 - 29.41 = 7.09h debited from May
+36.3 - 7.09 = 29.21 debitable May hours remaining
+
+Eliseu
+Dedicated hours this week: 23
+Expected hours this week: 32
+32 - 23 = 9h debited from May
+23 - 9 = 14 debitable May hours remaining
+

+

Bonding period end (--06-01)

+

+

Total of May dedicated hours per student
+
+Hugo: 84h
+Susanna: 36.3h
+Eliseu: 23h
+
+State of the tasks
+
+Hugo
+The following tasks:
+- Port configuration
+- Basic interfaces for queuing, caching, etc.
+- Basic test structure
+have moved to June.
+
+Susanna
+May tasks moved all to June.
+
+Eliseu
+May tasks moved all to June.
+

+

Bonding Period Start (--05-04)

+

GSoC Roadmap published and added to day-to-day links!

+

New landing page (--04-14)

+

Poll results: +

    +
  • susanna: 5
  • +
  • pranjal: 3
  • +
  • spookie: 3
  • +
  • suraj: 0
  • +
+ Congrats everyone! :) +

+

New landing page contest (--04-12)

+

The FE prospective students had to write a new landing page as part of their Proof of Competence, we're now running a poll in our IRC channel to decide which one will replace the existing one at gnusocial.network.

+

End of GSoC Student Application Period (--03-31)

+

Students who haven't finished their proof of competence are allowed to further work until --04-10. After that we won't consider any further work in the assessment process. Results will be announced in --05-04.

+
+ + diff --git a/soc/2020/coding_environment.jpg b/soc/2020/coding_environment.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aa03951d4be004e49db5f89a943642cc61a4ec43 GIT binary patch literal 104174 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 z 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°&jXac}~DR*|L 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

wdQR?FD-o?XEFF~#3pd_Mxw!GuWu6Eapmji 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 + + + +Daily Report Viewer | GS SoC 2020 + + + + + + + + +

+

Showing reports for hugo

Day 0

No report.

Day 1

Summary: Figured out how to make symfony/composer stop complaining about not having a use statement.

Dedicated Time (in hours): 1.5

+
+

Day 2

Summary: Trying to get events to work with modules. Events and most of the thing is working, can't use controllers in modules. Got controllers sorted and committed everything

Dedicated Time (in hours): 7

+
+

Day 3

No report.

Day 4

Summary: Fix plugins, make notification settings work, help Eliseu rebase

Dedicated Time (in hours): 6

+
+Relevant commmits:
+  - 32c2a4a984eeba17c947db5a30a03d0128144edb [AUTOGENERATED] Update autogenerated code
+  - 10daa5953b7f201643c25c1dc8e6f9cfd7ffcebc [COMPONENT] Remove 'post on status change' option for email transport
+  - 83bedf9cac963faa09a93b99d34764a142367f74 [COMPONENT][PLUGIN] Move Email and XMPP notification handlers from components to plugins, so they can be disabled
+  - 5b0286f39c2bb720eda92590dc61e939dd80caf7 [PLUGIN] Remove Test plugin
+  - c7dc2ce9168cea557ccdb2a2ed0370ae8053b129 [UI][SETTINGS] User notification settings with configurable transports (through plugins)
+

Day 5

No report.

Day 6

Summary: Handle avatar upload. Fixes and displaying avatar

Dedicated Time (in hours): 9

+
+Relevant commits:
+  - c6ac0b46014b487f88150a7c98a4f597d70c512b [DB][FILE][AVATAR] Handle deleting files, change file and avatar tables
+  - 7e331f61598110377859044e5ce7a1e71c4bf86a [DB] Add entity base class to allow sharing methods such as 'create'
+  - 9e242f1e069527dfd23a86ed8deadd5b46ae802e [MEDIA][AVATAR] Handle avatar validation and storage
+  - 948f2e02071ffa96d77a45a182226abd54387893 [JS] Whitespace cleanup
+  - 30ab956c771ebf4cd20e9bb37951d4dbcae57e5a [DEPENDENCIES] Update dependencies
+  - c0cc9d69dde3e41367c4c8927e600b4f95236c83 [AUTOGENERATED] Update autogenerated code
+  - 3f68763156c055a204890fefa02762009697fe1c [AVATAR] Handle avatar upload without js and save and validate uploaded files
+  - c40a8417aafc79352c9c9bd66454b956575f05e6 [AVATAR] Fixed avatar upload, added avatar inline download and updated template and base controller
+  - 143eb10dc0ed58d15587bffe6d6ee4ee314f79fe [TOOLS] Update generate_entity_fields
+  - d211e4f5dde066998f11547e6268275c1a7ee89f [AUTOGENERATED] Update autogenerated code
+

Total hours this week: 23.5


Day 7

No report.

Day 8

Summary: Refactoring and finishing avatar upload

Dedicated Time (in hours): 3

+
+

Day 9

Summary: Design meeting with Diogo and start of implementation of feeds and data model

Dedicated Time (in hours): 6

+
+

Day 10

No report.

Day 11

No report.

Day 12

Summary: Data Representation and Modeling refactor, rebase with Eliseu, fixes

Dedicated Time (in hours): 4

+
+Relevant commits:
+  - bbdec3bc7e3d8339cb06bc1f6e148d65b4247119 [CORE] Data Representation and Modelling refactor
+  - 09680cbe84e06667e55b6050e758afc2f6a6fb85 [CORE][DB] Fix uses of db tables after previous restructure
+  - 9917a3d6842142c44ff2aeaafc2363b9b4faff26 [TOOLS] Fix bin/generate_entity_fields
+  - 154bd7e6d049a8f5b27cec7a6d89332709d8cf71 [AUTOGENERATED] Update autogenerated code
+  - 749b899b3c7710fc74a7ec7bd47d941a960a6e6d [DEPENDENCY] Update dependencies
+  - bc4ab499e6b7a10ff3c46a586edf8e703734d44e [COMMAND] Fix 'bin/console doctrine:database:create' by only loading defaults if we have a connection
+

Day 13

Summary: Implement rudimentary network public feed, fixes and refactors and trying to figure out how to make a composite unique key

Dedicated Time (in hours): 7

+
+Relevant commits:
+  - 00de6c0bd3ed00d72974c7ac722b310064e04dcb [UTIL][Common] Implement 'isSystemPath'
+  - 1bb7461f7631de150d76fca86088b12784c2388a [CONTROLLER][AdminPanel] Add missing use statement
+  - 8bd08a095851b876769ea3cef0da603c6f38d34d [SECURITY] Wrap getUser in a try catch, in case the user doesn't exist
+  - ed0c82e6304c8d26808fc5c29e0fee804f2a9207 [STREAM][NetworkPublic] Add skeleton of public timeline and posting
+  - 44a14dd20fc400cdf768ba14e088c4e60ca2e4c5 [Media] Move code from media.php to utils.php
+  - e7f58205f8bf82d6b12a7529da346e3116241ef4 [DB] Add 'dql' method to wrap 'createQuery' and replace 'Gsactor' with 'GSActor'
+  - 3f2e73436278c31b1f0205d45a05130614943856 [Media] Use utils
+  - 87765c46ab0cd536d8ca1f2c93a8033136d03fb2 [UserPanel] Fix upload of avatar
+  - a94e418ec66e2b41451dfb50250f8ab21c47a524 [DB][DEFAULTS] Add avatar/default
+  - be06ff42cb8a7b5049a14a753dac35c25cb7563b [DB][AVATAR] Remove extraneous slash
+

Total hours this week: 20


Day 14

Summary: UI improvements; HTTP Client wrapper, fix notes getting posted 5 times; fix static pages, investigating error with phone number form, since maintainer replied

Dedicated Time (in hours): 6

+
+Relevant commits:
+  - c4fc59e749b1cd6f7b39fbee060bceeb1c49cd51 [DB][File] Remove timestamp, add actor_id
+  - 142783cdca4a61a3766a30aae4c47b5bf7e5d708 [MODULE][Left][UI][TAGS] Add Left module which handles fetching tags and followers, fix self tags
+  - 8b8625a786952e52d11b606b8e00ad319224fdcb [ENTITY] Add Entity base class to all entities
+  - dfa3dc5c31ab60bfa770d1a53f9b671db0dc3b14 [UI][LEFT] Add link to settings on avatar and personal info
+  - 95a3b25bea7836a662283c66b997e5315fe9d0fc [UI][CACHE][DB] Add follow counts to left panel, caching the results; change follow table
+  - fc480c404b759a20c5535823bf610f2d41146ceb [DB][FOLLOW] Change Follow table
+  - dc5087c442b1bc70bf2869abbef28cab71f7b18c [WRAPPER][HTTPClient] Static wrapper around Symfony's HTTP Client
+  - e3f3bcf5decbdc0730653019cd3b081ca89e5a32 [CONTROLLER] Stop propagation of kernel.controller so notices aren't posted 5 times. Not sure why it happens otherwise
+  - 870531527141f20a9712fb7d548b096a9802dd83 [UI][FAQ] Fix static pages
+  - 9a1c1edb0f45478e655b40f20fcdd6ed119bb754 [UI][LEFT] Add # before selftags, and link
+

Day 15

Summary: Investigating phone number error upstream, small hack fix, small UI fixes

Dedicated Time (in hours): 1.5

+
+Relevant commits:
+  - 52d0e5b9ad27d12185a9f8499cc4a0af2369d706 [UI][ACCOUNT][SETTINGS] Hack to fix error related to phone number, until a solution is found upstream
+  - 7b13b54cc1bc223a0f816289c6153952f2f82695 [UI][SELFTAGS] Display 'none' if the user doesn't have selftags

Day 16

No report.

Day 17

No report.

Day 18

No report.

Day 19

Summary: Uploading and seeing attachments

Dedicated Time (in hours): 6

+
+Relevant commits:
+  - a24072eb2b00d198895321d7320e23a459cf5ad7 [SECURITY] Fix error in user registering where password wasn't hashed
+  - 935589c36ed13c38e45b4d3d6940d519a0552e4e [UI][MEDIA] Add actor avatar in feed timeline
+  - 469d2529b67650601fdd53802da7a07acd523ca2 [MEDIA][CACHE] Cache avatar queries and delete stale values; small refactoring
+  - a032acd7c3a8c2a9598452b04b3a7636c26027a6 [DEPENDENCY] Add tgalopin/html-sanitizer-bundle and transitively tgalopin/html-sanitizer
+  - 86371db0bd96679d1a7783daa5ff1b0ca91c70bb [UI][NOTE] Post and see attachments
+  - 79b1ab038d1d6f289d13892162cb7a62fcd1f31e [MEDIA] Only try to get an avatar if a user is logged in
+  - cd90c1e5931946d356319b2755cc85c9829ac18c [DB][MEDIA] Small database structure changes
+
+

Day 20

Summary: Rebasing, studying AP plugin, start fixing it; help Eliseu

Dedicated Time (in hours): 5

+
+Relevant commits:
+  - 5a322f8bb818690213c692c53750f54be79363f4 [UI][TWIG] Small UI cleanup and change twig 'active' function to check for starts with, rather than equals
+  - 4755ff70624968b8e8de4b9441abc80ff5f50d3f [ActivityPub] Initial cleanup, removing 'die' statements, and ignoring the subfolders
+

Total hours this week: 18.5


Day 21

No report.

Day 22

No report.

Day 23

No report.

Day 24

No report.

Day 25

No report.

Day 26

No report.

Day 27

Summary: Fixes, helping Eliseu, reasearch adding entity loading to plugins, add note replying, start note favourite

Dedicated Time (in hours): 7

+
+Relevant commits:
+  - b27806c211440180e27d794754eb44b46ceab531 [MODULE] Fix avatars not loading
+  - f702130d69bd77cdbbad5fa17a96a6154cde7ab8 [CACHE] Fix bug in list caching
+  - de7e1cecbdf5038ecedac6a030bad32e348225be [NOTE][UI] Add note replying and UI displaying
+

Total hours this week: 7


Day 28

Summary: Start implemeting favorites and recycles, researching Doctrine plugin enitites; meeting with Diogo about federation in v3

Dedicated Time (in hours): 6

+
+

Day 29

Summary: Helping Eliseu with favorites and repeats, reviewing all code, adding docs

Dedicated Time (in hours): 10

+
+

Day 30

Summary: Implementing replies, refactoring, documentation, discussion with Diogo and Eliseu about next steps

Dedicated Time (in hours): 9.5

+
+

Day 31

No report.

+ diff --git a/soc/2020/daily_report/archive/August/rainydaysavings.html b/soc/2020/daily_report/archive/August/rainydaysavings.html new file mode 100644 index 0000000..21fe0cd --- /dev/null +++ b/soc/2020/daily_report/archive/August/rainydaysavings.html @@ -0,0 +1,150 @@ + + + + +Daily Report Viewer | GS SoC 2020 + + + + + + + + + +

Showing reports for rainydaysavings

Day 0

No report.

Day 1

No report.

Day 2

No report.

Day 3

No report.

Day 4

Summary: Accessibility improvements, forms fixes

Dedicated Time (in hours): 6

+- Checkbox trick needs to be focused by keyboard and give visual feedback of this
+
+Relevant commits:
+- d8f9652f82@upstream [UI] Accessibility improvements all around
+- fccc5b90c5@upstream [UI] Fixed issue where certain form element would be on top the left panel
+- 6d528400f4@upstream [ROUTES] Fix use statement
+

Day 5

Summary: Notifications settings page work and study

Dedicated Time (in hours): 4

+- Exploring different ways to show notifications settings
+- Helping Hugo with avatar page issues
+
+Relevant commits:
+- 99f30d8156@upstream [UI] Notifications settings page CSS work
+

Day 6

Summary: Notifications settings tabs functionality and styling done

Dedicated Time (in hours): 10

+- Even though "checkbox trick" is used accessibility wasn't taken out of the window, everything can be accessed via keyboard
+
+Relevant commits: 
+- 4e86d10802@upstream [UI] Notification settings tabs functional
+- 61bafef818@upstream [UI] Notification settings styling progress
+- c6d66eb0d9@upstream [UI] Notifications settings styling finished
+

Total hours this week: 20


Day 7

No report.

Day 8

No report.

Day 9

No report.

Day 10

No report.

Day 11

Summary: Small fixes all around and right panel added

Dedicated Time (in hours): 10

+
+Relevant commits:
+- c51df09b70@upstream [UI] Right panel added
+- a665b4c882@upstram [UI] Additional fixes to settings page
+- 61b82aeda8@upstream [UI] Small general settings CSS fixes
+- 159fc7cabe@upstream [UI] Settings small fix
+- 9e3c160253@upstream [UI] Notification settings checkbox placement fix
+

Day 12

Summary: Complete CSS overhaul

Dedicated Time (in hours): 12

+- New theme, firefox's banding on the last one was unacceptable;
+- Various fixes all around (eg. right panel checkbox, language selector arrow placement, fixing shadows on top of eachother, etc...);
+- Colours used are now variables as well;
+
+Relevant commits:
+- 02350befcb@upstream [UI] Complete base CSS overhaul and new theme
+- 9c05a7d4b9@upstream [UI] Settings theme according to base theme
+- bfa58c4df7@upstream [UI] Right panel checkbox size fix
+- 5efef8dab5@upstream [UI] Left panel theme now looks like it should
+

Day 13

Summary: More polish and feed structure work

Dedicated Time (in hours): 12

+- Previous design wasn't consistent with the feed mockup, even more overall work was done in that regard;
+- Right panel will be contextual, on feed it might show plugins as well as RSS and such;
+
+Relevant commits:
+- f7d423a2c8@upstream [UI] Public feed responsive CSS work
+- 0d642b2e60@upstream [UI] Responsive settings CSS work
+- 6e198f1e7f@upstream [UI] Responsive base design polish
+- 618b77a195@upstream [UI] Feed structure done, feed CSS work
+- a847317df8@upstream [UI] Polishing design, settings pages
+- af2951562b@upstream [UI] Polishing base template
+

Total hours this week: 34


Day 14

No report.

Day 15

No report.

Day 16

No report.

Day 17

Summary: Fixing new dynamic left panel view

Dedicated Time (in hours): 4

+- Early implementation of notices style and fixing it's structure
+
+Relevant commits:
+- 903e6caf89@upstream [UI] Fix left panel new dynamic components view
+- 3fa5ea645a@upstream [UI] Fixing timeline notice structure and CSS
+

Day 18

Summary: Finalizing timeline structure and CSS, further CSS consistency work

Dedicated Time (in hours): 12

+- new reset CSS to fix even more browser inconsistencies, firefox for some reason had a margin of 1px for textareas too, jesus
+
+Relevant commits:
+- 33e84cf21d@upstream [UI] New reset CSS to deal with firefox's abysmal and evil defaults
+- 049951f021@upstream [UI] Finalizing timeline structure and CSS
+- 4d16951572@upstream [UI] Fixes to settings CSS
+

Day 19

Summary: Fixing login, register and static pages

Dedicated Time (in hours): 6

+- Worked on the scope of notes, the "To:" option, haven't managed to make it work yet;
+
+Relevant commits:
+- 2ab8a583f3@upstream [UI] Fixing static pages styling
+- 9de272e616@upstream [UI] Fixing issue where notices wouldn't break text
+- 0214e68070@upstream [UI] Fixing login and register styling, refactoring
+

Day 20

Summary: Post scope initial implementation

Dedicated Time (in hours): 8

+- discussion with Hugo about what's next and organizing ideas
+
+Relevant commits:
+4ee99a6553@upstream [COMPONENT] Posts scope initial form
+

Total hours this week: 30


Day 21

No report.

Day 22

No report.

Day 23

No report.

Day 24

Summary: Work on new notice form

Dedicated Time (in hours): 8

+Relevant commits:
+- 504c5e4ac6@upstream [UI] Links removed since they are part of a plugin
+- 52e7d4e23f@upstream [UI] Post form new structure first styling implementation
+- 27b6995433@upstream [UI] Small border fix
+- 0cc8e29415@upstream [COMPONENTS] Small fix
+- 8d61925f70@upstream [UI][TWIG] Better, divided form rendering of the posting form
+- 26f60291e4@upstream [UI] Small border radius problem fix
+

Day 25

Summary: Home timeline route and controller work

Dedicated Time (in hours): 12

+- A random welcoming string now appears in the posting form
+
+Relevant commits:
+- 55b9224cd3@upstream [TWIG] Timeline structure rework
+- c0c6af2871@upstream [ROUTE] Home timeline added
+- b2e7a5aac3@upstream [CONTROLLER] Home timeline controller work
+- bb2039e074@upstream [UI] Posting form styling work
+- 55527d3e63@upstream [COMPONENT] Posting form now shows a random default string
+

Day 26

Summary: Reply controller initial work, routes fixes and timeline rework

Dedicated Time (in hours): 12

+- Working with Hugo and accessing the current progress
+
+Relevant commits:
+- 6abac287b9@upstream [TWIG] Timeline template rework
+- a582089201@upstream [ROUTE] Home timeline route url now shows accordingly as the user nickname
+- dbf3c3b432@upstream [UI] Posting form re-styling
+- d40736f6be@upstream [CONTROLLER] Reply initial implementation
+- 42fca5a7ee@upstream [COMPONENT] Posting form restructure and minor fixes
+

Day 27

Summary: Acessibility work, post creation form polish

Dedicated Time (in hours): 12

+Relevant commits:
+- bcf66b25cc@upstream [TWIG] Timeline attachment form restructure
+- b3855cb824@upstream [Controller] Attempting to fix home timeline query
+- 8ce979dbbf@upstream [UI] No focus outlines by default
+- 81e5d51bd5@upstream [UI] Custom and accessible checkboxes, radio buttons and normal buttons
+- 2718bfecf9@upstream [COMPONENT] Fixing typo
+

Total hours this week: 44


Day 28

No report.

Day 29

Summary: Browser intercompatibility work, fixes

Dedicated Time (in hours): 4

+Relevant commits:
+- dcc0e8acca@upstream [UI] Checkboxes now display a custom tick
+- 8921abe012@upstream [UI] Browser compatibility improvements, various small fixes
+

Day 30

No report.

Day 31

No report.

+ diff --git a/soc/2020/daily_report/archive/August/susannadiv.html b/soc/2020/daily_report/archive/August/susannadiv.html new file mode 100644 index 0000000..f853070 --- /dev/null +++ b/soc/2020/daily_report/archive/August/susannadiv.html @@ -0,0 +1,89 @@ + + + + +Daily Report Viewer | GS SoC 2020 + + + + + + + + + +

Showing reports for susannadiv

Day 0

No report.

Day 1

No report.

Day 2

No report.

Day 3

Summary: Studied Pleroma API + Mastodon enpoints in relation to the implemented frontend + started FavouriteList retireval call

Dedicated Time (in hours): 7

Day 4

Summary: Replaced Public page's API call

Dedicated Time (in hours): 5.5

Day 5

Summary: Workaround on Pleroma login documentation issue + started implementation of API calls

Dedicated Time (in hours): 6

Day 6

Summary: Redux-ed login and signup options

Dedicated Time (in hours): 5


Total hours this week: 23.5


Day 7

Summary: Finished login & signup API calls

Dedicated Time (in hours): 5.15

Day 8

Summary: Studied authentication token (placement + state managment) + getCaptcha implementation for registering

Dedicated Time (in hours): 6.5

Day 9

Summary: Registration Code Setup & working with oauth tokens + Added API call for home timeline data calling + Added Login, Signup, tokens & captcha reload code

Dedicated Time (in hours): 12.5

+Relevant commits:
+- e2d1bb380b71fe80c270dd2246ce39b32dae34cf  Registration Code Setup & working with oauth tokens
+- ff519321ef745f2753abe0afa1b880d63bbc7a71  Added API call for home timeline data calling
+- 12fcea005ac4d1c4a50b87dfe96c7aa02c383af6  Added Login, Signup, tokens & captcha reload code

Day 10

Summary: Finished status object for timelines

Dedicated Time (in hours): 5

Day 11

Summary: Post display on all timelines

Dedicated Time (in hours): 8

+Relevant commits: 
+- 414df692d5399840fc19fb61f677681286e0c909
+- 2d7e470c6fa4fc530ad374c4744394a36bd10d79

Day 12

Summary: Added html parser for tag in text posts removal + adding make post component endpoint

Dedicated Time (in hours): 5.5

Day 13

Summary: Post-making component with media upload + retweet/unretwwet endpoint

Dedicated Time (in hours): 14

+Relevant commits: 
+- b834ee4b7af6bd1cae19fe71626c9116f9f24dfd
+- 3d852e982637849c57973f6bcbec98c3a9532385

Total hours this week: 56.65


Day 14

Summary: Showing profile data on Navbar and logout feature working + Implementing retweets mechanism

Dedicated Time (in hours): 13.5

+Relevant commits: 
+- 60f7c6ef6b5c43c3a604e28e228667784a40e601
+- a8dfac7f03e3ad841ed5c215431b4774d08a3a7d

Day 15

Summary: Getting statuses for the selected users on timeline + Deleting a post

Dedicated Time (in hours): 12

+Relevant commits: 
+- bf619b97b33170af520bdd3ea4d8e2e27388d918
+- a69d157fbb1d469633eb216c0cca374eb7734503

Day 16

Summary: Reacting with emoji + emoji counter endpoint implementation + beginning of reply with comments

Dedicated Time (in hours): 11

Day 17

Summary: Finished working on In conversation dialog box for replies history + creating comments

Dedicated Time (in hours): 15

+Relevant commits: 
+- 3ec0e6e3f9c9266e575c1a30608fd86a704113ac
+- c05f6e029d9d12c0f18fe6fb3e518262b1f2692c

Day 18

Summary: Show notifications + adding mark all notifications as read

Dedicated Time (in hours): 9.5

+Relevant commits: 
+- 97138636645b78433b0bf7b93366e9cb2eaa2ed4
+- 5f01f1dc4195dd67f17d07cf9aa2fdfef9f9e52b

Day 19

Summary: Added ProfileTile followers/following design + fetch user's favourite timeline

Dedicated Time (in hours): 4.5

Day 20

Summary: ProfileTIle endpoint implementation + followers/following counter

Dedicated Time (in hours): 8

+Relevant commits:
+- 24bca6f27261ef2680718a0ba6fbc7c8e4aeaad9

Total hours this week: 73.5


Day 21

Summary: ProfileTile + follow + avatar implementation

Dedicated Time (in hours): 11

+Relevant commits:
+- 1507bef12dc67f443d8ea986e845af3bd5248373

Day 22

Summary: Working on follow/unfollow and followers/followings list + Showing avatar in statuses & bio in profile tile

Dedicated Time (in hours): 7.5

+Relevant commits:
+- aa94f2936affca608752827f83d336b706e41099
+- cb7de04e94acd532677a5f449305241887d3755f

Day 23

Summary: FInishing EidtProfile + Uploading media in post and show media in statuses + Showing followings/followers list in profile

Dedicated Time (in hours): 14.5

+Relevant commits:
+- 9b34a768ff7616408e0955614a8aa52aae94c76a
+- 144094729048384b33856ad20b129d3cad1c91d5
+- 074f27d9989adec316a39ca6414fb370b3d6dba2

Day 24

Summary: Blovk/unblock users + Mute/Unmute users + Favourite timeline + Direct Messages timeline + all necessary routing and buttons

Dedicated Time (in hours): 15.5

+Relevant commits:
+- fd3b1a06124d4a111615299fc06e13d7f16c34c6
+- 539cb4461863133e3938524a849b5503937438c1
+- c56253f9c76c84da6459631d4610b86fe98e1fa6
+- ee4a2076938a0b08c9f1a4240bc4f9e1c40e542e

Day 25

Summary: Fix onClick function for followers/following tile + refine routing for user's page

Dedicated Time (in hours): 7.5

Day 26

Summary: Fixing profile routes on multiple places and hiding profile tile when logout + assuring profiles links working from anywhere including followers/followings

Dedicated Time (in hours): 10.5

+Relevant commits:
+- 630ee89275cb56c21147c74ac8a952f96f189d21
+- 760c2a7a83c0ebcb0749d2d3b6b40b06a0810728
+- d31ef84328e3593e04baa2b85834c74028cbbc86

Day 27

Summary: Mark all notifications as done + Showing post content snippet in notification bar

Dedicated Time (in hours): 11

+Relevant commits:
+- d51ce601adf5b8d352df679512462c77f519eadd

Total hours this week: 77.5


Day 28

Summary: Sending direct message (post) to user + not allowing retweet for direct messages

Dedicated Time (in hours): 11

+Relevant commits:
+- 4f8959ca5feba11e24cf33a261029435f1201e3a
+- b303e002e2e24ca707313168abd8dd4b4ad9fa2c

Day 29

Summary: Final conversation + overall design touchups

Dedicated Time (in hours): 7

+Relevant commits:
+- 8d05f99b82a467655954e8d4fda949a9411900d4
+- 8a92f5747fa10392126f9bb26b94a05814882487

Day 30

No report.

Day 31

No report.

+ diff --git a/soc/2020/daily_report/archive/July/hugo.html b/soc/2020/daily_report/archive/July/hugo.html new file mode 100644 index 0000000..e9d1bea --- /dev/null +++ b/soc/2020/daily_report/archive/July/hugo.html @@ -0,0 +1,206 @@ + + + + +Daily Report Viewer | GS SoC 2020 + + + + + + + + + +

Showing reports for hugo

Day 0

No report.

Day 1

Summary: Review database structure

Dedicated Time (in hours): 11

Day 2

Summary: Finish database review, open rfc, update script and autogenerated code

Dedicated Time (in hours): 11

+
+Relevant commits:
+
+ - 20b0c4a3a6b38b3631fdd00fd967ff973dde0e77 [DB][REFACTOR] Restructure the database
+ - 06efbb28abed57cb37c870e097bcdc7914d1a164 [TOOLS] Update bin/generate_entity_fields script
+ - ebf8e2ec0e2da494358d59d16d066e7e812487e8 [AUTOGENERATED] Update autogenerated code
+ - 5b5e66898b47bdb0fe8dbd6d3814fb6f1c5904e0 [MODULE] Move 'foreign' entities from core to a module
+

Day 3

Summary: Helping Eliseu and investing a potential Doctrine bug

Dedicated Time (in hours): 1.5

Day 4

Summary: Investigate Doctrine bug, fix database restructure commit, changed zero dates to CURRENT_TIMESTAMP, fixed Elise's rebase and last commit; researching how to implement queueing (symfony messenger) and investivating avatar 404 bug

Dedicated Time (in hours): 7

+
+Relevant commits:
+  - a17072af6291d8f56b7f37901caf39d3b048033e [DB][REFACTOR] Restructure the database
+  - a56d64678b22158cd04ecf35200a975838f1a7a5 [DB] Replace zero dates with CURRENT_TIMESTAMP and add defaults to all 'created' or 'modified'
+  - 38a615aeac33ca1496da391aa23911bd64dc5a07 (v3)
+
+

Day 5

Summary: Design discussion with Diogo, updating dependencies, adding wikimedia/composer-merge-plugin as a dep., fix deprecated use of class, fix routes, add controller base class, dummy notices

Dedicated Time (in hours): 7.5

+
+Relevant commits:
+  - 4224346dbc6aade65673b4db92bc1ee07d7dff2d [COMMAND][DEPRECATION][FIX] Fix app:events's deprecation
+  - b6426445b77c7e3d46d9a9169145346015e73a3b [ROUTE] Fix routes, config_admin got deleted
+  - 49b10bed87e2f790cffa92e271c92e57dceed363 [CONTROLLER] Add Controller base class, which handles rendering templates if requested HTML or json, accordingly
+  - 7b53a32d705b554099f44b0566076c11eda4f706 [FIX] Make ModulesManager check if file exists
+  - a227bec59d07a867194a70d485bd179cb7f50508 [CONTROLLER] Show dummy notices in main/all
+

Day 6

No report.


Total hours this week: 38


Day 7

No report.

Day 8

Summary: Implement and test queue wrapper. Investigating http caching. Configure HTTP cache, add cache wrapper, refactor log wrapper

Dedicated Time (in hours): 6

+
+Relevant commits:
+  - a2024f83eb1416c7210dc59e0224839cca5253e9 [DB] Delete queue_item table, as queueing will be handled by messenger
+  - 50c27b500ffd975e8e0b5d59c792beaa729c5d93 [DEPENDENCY] Add symfony/messenger as a dependency
+  - 4a249209b086e091b567a181a6c5ba8ddac68354 [QUEUE] Add queueing wrapper, default configuration and example usage
+  - 92467685b303486bc0f9b315c2f0edcbc1d9d832 [REFACTOR] Refactor log wrapper
+  - 7b687a666b71a82d9592d8b27ecb81398c133416 [DEPENDENCY] Add symfony/cache as a dependency
+  - 2f371019f7253da186de7c7f4e4a7aced92decf6 [CACHE] Add a static wrapper around symfony/cache
+  - 311258139faa63b12d2a6e99a90790f1b4b17d75 [CACHE][HTTP] Configure simple HTTP cache
+

Day 9

Summary: Miscellaneous fixes, add ds extension and ring buffer data structure

Dedicated Time (in hours): 6

+
+Relevant commits:
+  - bcd4780623afe1a1ba032d38653b95c480b9cb01 [FORMATTING][DEFAULTS] Fix formatting and remove redundant config defaults
+  - 272463678ed5e76d5d3b8fb01ca7d41e52b462b7 [FIX] Fix cache wrapper
+  - e73965b12f85c60f4920474530fd0f04c9f09b09 [FIX] Fix configure script to use quotation marks properly
+  - 177899147d0fb0ead7fab4556decbc1b4d04f775 [DOCKER][PHP][EXTENSION] Add PHP ds extension to docker PHP image
+  - 3eb7c318d585572e40c945831d0216cdee11ce15 [PHP][EXTENSION][POLYFILL] Add php-ds polyfill, which is used if the native extension is not available
+  - e87cc1fbd48bdf508ed9c72ba6548363564ab25e [DEFAULTS][FIX] Fix defaults to use value from environment
+  - c4c0e857302999df22f55b590f760514883b92f1 [DOCKER] Move certbot files to hidden folder, so it's ignored by GNU global
+  - 4f917b921ab9319928340222c9f9300d1a0635c3 [DATASTRUCTURE] Add Ring Buffer datastructure
+  - 6cfd022e2734376708ada3fa50edbaa38108f73a [CACHE] Extend the static wrapper to support working with lists in caches that don't natively support them
+

Day 10

Summary: Add msgpack and redis extensions to docker image, add support for multiple cache pools

Dedicated Time (in hours): 7

+
+Relevant commits:
+  - 5c7ef011aab8f4086bf57e26f0efbc350368230a [DEFAULTS] Add modified time to config table (as value) and only reload the defaults if the file is newer
+  - 4bd1a64c50a5e8285fb25eb6babfe2a2de701e6c [DOCKER] Add msgpack and redis extensions to docker image
+  - cb429885e0c028219e460f213bd9ea022c09f1ae [CACHE] Add support for multiple pools with the syntax (as an example) SOCIAL_CACHE_ADAPTER='default=redis://localhost:6379,memcached://localhost:11211;db.config=apcu://'
+
+

Day 11

No report.

Day 12

No report.

Day 13

Summary: Discussion with Diogo regarding next steps on the software's architecture design

Dedicated Time (in hours): 5

+
+

Total hours this week: 24


Day 14

Summary: Discussion with Diogo about ways to handle UI events. Added special support for redis to the cache. Fixes and refactoring

Dedicated Time (in hours): 4

+
+Relevant commits:
+  - ca560fc8191c82227ac7d46e65ca032636ca74a7 [DOCKER] Updated php image so redis is compiled with LZ4 compression available, as it's the fastest at decompressing and really fast at compressing. Read performance is more important, with this being used as a cache
+  - 14c6a7c42b67730d511c6b567200eaa7b70d9a37 [DATASTRUCTURE] Refactor and implement array indexing methods
+  - 38dc05edd24f17f6641c2f4697f433319fb0de60 [CACHE][REDIS][FIX] Add special support for redis (fixed size lists), set method and general fixes

Day 15

Summary: Review enhanncement tagged issues with Diogo and decide what to implement in v3

Dedicated Time (in hours): 3.5

+
+
+

Day 16

Summary: Fixing redis extension use lz4 build failure, adding a redis polyfill placeholder, to allow autoloading the necessary classes if the extension isn't installed. Discussion with Diogo and Eliseu about the features for v3. Fix use of redis

Dedicated Time (in hours): 5

+
+

Day 17

Summary: Trying to understand how to implement doctrine caching, fixing symfony translator PR, so it's hopefully accepted, update DB wrapper so entity names are provided without the namespace

Dedicated Time (in hours): 3

+
+Relevant commits:
+  - 6e405270d6e56f6a264d182e9321a861c8ad5f10 [DATABASE][WRAPPER] Update DB wrapper so entity names are provided without the namespace
+  - https://github.com/someonewithpc/symfony/commit/e7e8a95d423947545313cbdd915fcfd214be7412 Add support for calling 'trans' with ICU formatted messages
+

Day 18

Summary: Design meeting with Diogo

Dedicated Time (in hours): 3

+
+

Day 19

Summary: Studying how to implement login with Symfony, and social's v2 implementation, reading about best practices about password storage

Dedicated Time (in hours): 3

+
+

Day 20

Summary: Start implementing user login and supporting systems

Dedicated Time (in hours): 8

+
+Relevant commits:
+  - a9629d1d064cd37709e95a906318ae99394decad [DB] Re-import the local_group table, as it'll be used as per the new group semantics
+  - 992d2e598bc70ff68a69617fcbe9b0d82fa66702 [DB][WRAPPER] Add findBy method which allows finding entities with a complex expression
+  - e27042af3ee3b7d68d28aa004e47262a657ccc5e [DEFAULTS] Update default reserved usernames
+  - 88c9f03e0827e8f16fd56e9c3f9f0c1ff0ecb9dd [UTIL][NICKNAME] Import nickname utilities and exceptions from v2
+  - 4cb4af4791781ccb80461968f6a8a1afa91cc315 [REFACTOR] Change methods in the Common class to camelCase, add isSystemPath (previously in Nickname.php)
+

Total hours this week: 29.5


Day 21

Summary: A lot of fixing and refactoring, rename user table, add login and logout functionality, implement password hashing

Dedicated Time (in hours): 8

+
+Relevant commits:
+  - 4cf9e52eda73717cc5e1433b56b6987c6d8a3b32 [CACHE] Tiny fix
+  - 14471bd49c18f5ab6eb4662147fe2f32812d5096 [DB] Re-import the local_group table, as it'll be used as per the new group semantics
+  - f612e7653ddf90cfc5064e711c51bb2349880bd4 [DB][WRAPPER] Add findBy method which allows finding entities with a complex expression
+  - 8fbaa1019b4d13acac584d311be016039a89165e [DEFAULTS] Update default reserved usernames
+  - 643c4f37c05547181856c3da946c490825939370 [UTIL][NICKNAME] Import nickname utilities and exceptions from v2
+  - e09fbf32dac403f6e8a388857dcb808ba1f77130 [REFACTOR] Change methods in the Common class to camelCase, add isSystemPath (previously in Nickname.php)
+  - 03d521f460aa0323d2c11d48ba84cfc2595982c9 [I18n] Remove I18nHelper
+  - cfadcfb171bde7288e8d4dbdcab213a2d1b4a04f [CONFIG] Change way configuration is done to use Symfony's system instead of environment vars
+  - 21847e9a8d8e64b2f74e84a949db1f4cc0aa72ea [DEPENDENCY] Add symfony/config as a dependency
+  - c314ac2a2b7944161df6896a33aaa9aba6625c52 [DB] Rename user table to local_user, since doctrine shits itself otherwise ._.
+  - 78988a8a4e3a124db98a1b5f909769e20f2406e3 [AUTOGENERATED] Update autogenerated code
+  - 82665ec7869fefd238fa765284196d5d55af4316 [TOOLS] Update shebang on scripts to use the correct php executable
+  - 147149cf69a92e24b926173afa60ca908e3b82f3 [I18N] Remove support for context until it proves necessary, as it broke the code
+  - 34b45a54bcea26af1f4a0e359948300a558d3918 [REFACTOR] Refactor GNUsocial.php so it initializes itself as a service
+  - f36d0963a500eca97efb9ce6eb91a28debb76b7a [UTILS] Make Common::config return the unserialized value instead of the entity
+  - b62058a23f2292d89e4d400ba5c73017da66f418 [UTILS] Remove Functional::arity as it got merged upstream as Functional\ary
+  - 3bfbf4a5ff73c1ee6df5262c303e2771ab9c40b4 [UI][SESSION] Add login and logout pages
+  - Break
+  - da63805a2761df8a4fd7acf8e0d50411c8da8930 [DEFAULTS][FIX] Fix logic error that kept reloading the table when the file wasn't modified
+  - 3b818ce3c40f91c61d4b03f1bc30cf1132a262cd [UTIL] Update Common::config to ensure the values queried exist
+  - e60b668294d99188875a386d56a3eb206e0d8995 [DB] Add role collumn to profile table
+  - 8aaa6768eccde9c4a430a403b0c39268c81e8c94 [USER] Add UserRoles
+  - 13e7830b7df027d49fbfd2d9bab35cefe420d2ae [LOGIN] Implement password checking and related systems
+  - d9f95d91df06dcd199cca2725b30bc51b24807f1 [DEFAULTS] Add password hashing algorithm default settings
+  - 5084f94ff7d6dfffa52a27784499693cdf822c32 [CONTROLLER] Remove example enqueue
+

Day 22

Summary: Rebasing with Eliseu, helping him setup afterwards, design meeting with Eliseu and Diogo. Implement backbone for notification and refactor controllers. Add twig 'active' function, Common::getUser

Dedicated Time (in hours): 9.5

+
+Related commits:
+  - 131415965493d5bce804a561c18dc8254786d9c9 [NOTIFICATION][DB] Update user notification prefs table, implementation of Notification and define a base class for notification transport
+  - 8d4a8665cfbcfef450a6b2e22de064d74f45d7ee [CONTROLLER][REFACTOR] Refactor controllers to use the new base class and remove controller from the class name
+  - 94d82783aab6f39aa48dcecd47270d85c0dd11e4 [CONTROLLER][REFACTOR] Refactor the base Controller to not reinvent the wheel too much and rely on Symfony's events
+  - 9a51870bca4df6ed549f800a673fcdf81ccf9194 [TWIG] Add twig function to output the active tag if the current route matches a given one
+  - 15b39f0be77e9fe07dc43883f470052a593a4051 [REFACTOR] Small refactor on entrypoint and RouteLoader
+  - d95a7861872f1a291a7d537d7ff12bba4be3034f [COMMON][SECURITY][WRAPPER] Added security service static wrapper and Common::getUser
+

Day 23

No report.

Day 24

Summary: Implement registration and bug fixes; fix controllers, refactors and stuff

Dedicated Time (in hours): 10

+
+Relevant commits:
+  - 28845792db [DEPENDENCY] Add symfonycasts/verify-email-bundle
+  - 5af8881b6b [TOOLS] Update generate fields script to output default values
+  - ffe5bb0b7c [FIX] Fix bug in DB.php, since findBy can return different types
+  - eec74314cc [MAILER][WRAPPER] Add mailer wrapper that respects the configuration
+  - 8b66b1175b [DB] Update LocalUser table to not have a numerical id, add is_email_verified and fix getProfile accordingly
+  - 3387d4defe [FORM][WRAPPER] Merge argument options, not replace
+  - ab3c8829a7 [DB] Fix typo in profile table and add a constructor
+  - f51cdbf842 [DB] Fix typos in user_notification_prefs
+  - 9fd9624ec7 [UTIL][NICKNAME] Small refactor and remove the check between user nickname and group_alias, as these will have different semantics
+  - ecd62cb810 [USER][UI][AUTHENTICATION] Add registration form
+  - f053409876 [REFACTOR] Small refactor in Authenticator.php, to remove unused services
+  - d720e19525 [AUTOGENERATED] Update all entity fields
+  - 3dea3877fd [I18N] Remove incomplete autogenerated translation file, to be fixed later
+  - be9d1ead5c [UTILS] Update Common::setConfig to throw an exception if appropriate, add Formatting::{toString,toArray}
+  - 9bc9be9e2e [CONTROLLER][ADMIN][CONFIG] Fix form to use static strings as keys and add labels seperately; convert input from string to appropriate type
+  - 81725b4dc0 [FIX][CONTROLLER] Remove unreachable code from the Security controller
+  - d89d66b0fa [SECURITY] Update way passwords are checked and update
+  - bf3578dc26 [UTIL] Update Formatting::{toString,toArray} to allow spliting by either space or comma
+  - 6d8b49bea6 [DB][REFACTOR] Refactor DB.php and make findBy always return an array, instead of a doctrine collection
+  - 7066b2a18b [FORM] Add Form::isRequired
+  - f4602192a4 [SELFTAGS] Add Profile::{set,get}SelfTags
+  - a4869e3586 [UI][USERPANEL] Add prefilled fields, mark some as optional and handle self tags in the profile settings page
+

Day 25

Summary: Add phone number to user table, update user panel controller

Dedicated Time (in hours): 3

+
+Relevant commits:
+  - d0eaf8d42b [UTIL][NICKNAME][FIX] Add self to constant
+  - 057fbb19bd [DEPENDENCY] Add odolbeau/phone-number-bundle
+  - 3f52592af2 [REFACTOR][REGISTER] Save previous url to redirect back after registering
+  - 63b65b0620 [UI][ROUTER] s%settings/profile%settings/personal_info%
+  - 58ff9aeceb [UI] Update settings/account to reflect the current values
+  - 70b5210f87 [DB][REFACTOR] Update local_user, SchemaDefDriver and bin/generate_entity_fields to use the phone_number type (which maps to a varchar 35 and does validation)
+  - 3c6bcef037 [Controller] Update settings/avatar
+

Day 26

Summary: Add Form::handle which automagically creates a form, handles a request, and writes the data to the given entity; Help Eliseu with avatar cropper, submit bug report to phone-number-bundle

Dedicated Time (in hours): 6.5

+
+Relevant commits:
+  - b480b664016908d1486bdc58c94bd7c4674572c3 [SECURITY][FIX] Save previous url on /register and /logout
+  - ed3f413521dd4a1d4be2ab1cf02a0be0202653a9 [DB][TOOLS] Update local_user to return the proper PhoneNumber type
+  - 5dcb998b68eb04c01840246e86ca3a7e6c31767b [FORM] Add Form::handle which automagically creates a form, handles a request, and writes the data to the given entity and update Form::create to do some more magic as well
+  - b6e96d5df40ce858c0caad7157f3d7a78efd43ab [FORM] Add DataTransformer to and from array
+  - cbc457014d9225df0ba51bdfe37b5e3cc16b353b [FORMATTING] Add option to split a string to array by both a comma and a space
+  - 3d2fab76104444f759b4c781d86e5eab5da16bc3 [DB] Remove DB::flush from Profile::setSelfTags
+  - d989995ec8a1e2d7eb5b16a369df4881f6bc3f09 [CONTROLLER][REFACTOR][UI] Refactor UserPanel to use the new Form::handle method and add placeholders in the password fields
+

Day 27

Summary: Start implementing tabbednotification settings panel

Dedicated Time (in hours): 2

+
+

Total hours this week: 39


Day 28

Summary: Attempting to update the ExtensionManager, but can't dynamically load classes, asked on symfony slack, awaiying an answer

Dedicated Time (in hours): 1.5

+
+

Day 29

No report.

Day 30

No report.

Day 31

No report.

+ diff --git a/soc/2020/daily_report/archive/July/rainydaysavings.html b/soc/2020/daily_report/archive/July/rainydaysavings.html new file mode 100644 index 0000000..6189448 --- /dev/null +++ b/soc/2020/daily_report/archive/July/rainydaysavings.html @@ -0,0 +1,138 @@ + + + + +Daily Report Viewer | GS SoC 2020 + + + + + + + + + +

Showing reports for rainydaysavings

Day 0

No report.

Day 1

No report.

Day 2

No report.

Day 3

Summary: Implementing user panel actions

Dedicated Time (in hours): 6

+- Fixing rebase issues
+
+Relevant commits:
+c5cf6c158e@upstream
+85c17a4f4f@upstream
+

Day 4

Summary: Overall CSS refactoring for faster theming

Dedicated Time (in hours): 4

+Relevant commits:
+- d4c3c9f24f@upstream
+

Day 5

Summary: Home feed design work

Dedicated Time (in hours): 5

+- Continuing yesterday's refactoring work
+
+Relevant commits:
+ff54443fed@designs
+

Day 6

Summary: Polishing designs and CSS

Dedicated Time (in hours): 5

+Relevant commits:
+- d8277675f7@designs
+- f2fbb626e6@upstream
+

Total hours this week: 20


Day 7

No report.

Day 8

Summary: New design work focused on the desktop experience

Dedicated Time (in hours): 5

+Relevant commits:
+- 77bdee2601@designs
+

Day 9

No report.

Day 10

No report.

Day 11

Summary: Implementing new design structure

Dedicated Time (in hours): 10

+Relevant commits:
+- 6d61e09a07@upstream
+

Day 12

Summary: Further work into new design

Dedicated Time (in hours): 10

+- Some icons need rework so the vector itself is perfectly square.
+
+Relevant commits:
+- 36e276e8cc@upstream
+

Day 13

Summary: Finished responsive work for redesign

Dedicated Time (in hours): 8

+Relevant commits:
+- 92fbde43c7@upstream [UI] Redesign responsiveness work done
+

Total hours this week: 33


Day 14

No report.

Day 15

No report.

Day 16

Summary: Review issues with Diogo and discuss what to implement in v3

Dedicated Time (in hours): 2

+
+

Day 17

No report.

Day 18

Summary: Side panel animations, FAQ template fixes

Dedicated Time (in hours): 6

+- Started port of UserPanel pages to new design
+
+Relevant commits:
+- d2ddb648c2@upstream [UI] Fixed FAQ template issues
+- 583785dc84@upstream [UI] Side panel animation added
+- e16909cf90@upstream [UI] Corrected core action name, UserPanel CSS work
+

Day 19

Summary: Overall polish, fixes and finalizing redesign port

Dedicated Time (in hours): 12

+Relevant commits:
+- 7b78a2af69@upstream [UI] Settings page CSS redesign port completed
+- 10aaba911c@upstream [UI] Reset CSS added, small fixes all around
+- a4066608f8@upstream [UI] Form help messages added, fixed checkbox trick hitbox
+- 4ae2cc44dd@upstream [UI] FAQ pages markdown fixes
+

Day 20

Summary: UserPanel Controller work

Dedicated Time (in hours): 10

+- Further discussion with Diogo about porting remaining core actions
+
+Relevant commits:
+- c2df96beda@upstream [UI] Fixed top header spacing issue, hamburger menu weird rendering
+- ac67734978@upstream [CORE][UI] UserPanel account page form added, account page CSS work
+

Total hours this week: 30


Day 21

Summary: Settings pages added, routes rework

Dedicated Time (in hours): 4

+- Further discussions with Hugo and Diogo
+
+Relevant commits:
+- 4255a21e63@upstream [CORE][UI] Settings routes refactor, avatar and misc settings added.
+

Day 22

Summary: Left panel template, Login page CSS

Dedicated Time (in hours): 5

+- Overall refactoring done as well
+- Left panel is now aware if user is logged in
+
+Relevant commits:
+- cd53227e3c@upstream [UI] Left panel template and Login page CSS work done
+

Day 23

Summary: Footer links and pages, small fixes

Dedicated Time (in hours): 8

+Relevant commits:
+- de9e05dda4@upstream [UI] Login template small fix
+- dfec290870@upstream [UI] Footer links added
+- eee902d977@upstream [UI] Footer links and pages done
+- dd1f02291d@upstream [UI] Fixing problem due to Firefox's autofill filter
+

Day 24

Summary: Register CSS and Login CSS rework

Dedicated Time (in hours): 8

+- Register and Login now occupy left panel, defaults into view in smaller screens
+- Body to be added as public timeline tommorow
+
+Relevant commits:
+- 5c01fb7338@upstream [UI] Register and Login rework
+

Day 25

Summary: CSS, templates and navs fixes

Dedicated Time (in hours): 10

+- Starting work on avatar cropping 
+
+Relevant commits:
+- bbe941c291@upstream [CONTROLLER][UI] Fixing controller display errors, Settings CSS fixes
+- 440795b4db@upstream [ROUTER][UI] Fixing Settings navs and templates
+- cf740048c5@upstream [FIX][SECURITY] Fix typo
+

Day 26

Summary: Avatar JS cropping, small fixes

Dedicated Time (in hours): 10

+- Started work on Public Timeline structure and CSS
+
+Relevant commits:
+- 1788600589@upstream [CONTROLLER][UI] Avatar JS cropping added
+- e8ab639df4@upstream [UI] Login and Register button fixes
+

Day 27

Summary: Avatar cropping works as intended now

Dedicated Time (in hours): 4

+- Crops a perfect circle
+- Shows proper preview
+
+Issues:
+- JS shows above header elements, of which the left panel is part of, to fix this z-index would be used;
+- To fix it the position property cannot be fixed, which would break the design, of course it needs to be fixed and will as soon as I find some alternative;
+
+Relevant commits: 
+dfe061130b@upstream [UI] Cropping avatar as a circle, proper preview done
+

Total hours this week: 49


Day 28

No report.

Day 29

No report.

Day 30

No report.

Day 31

No report.

+ diff --git a/soc/2020/daily_report/archive/July/susannadiv.html b/soc/2020/daily_report/archive/July/susannadiv.html new file mode 100644 index 0000000..3ec0e16 --- /dev/null +++ b/soc/2020/daily_report/archive/July/susannadiv.html @@ -0,0 +1,74 @@ + + + + +Daily Report Viewer | GS SoC 2020 + + + + + + + + + +

Showing reports for susannadiv

Day 0

Summary: Fixed commits + indentation

Dedicated Time (in hours): 2

Day 1

No report.

Day 2

No report.

Day 3

No report.

Day 4

Summary: Re-read React rules, best practices and node-modules + finished CSS styling

Dedicated Time (in hours): 7

Day 5

Summary: Added Home page + Navbar, Profile component + adjusted CSS to SCSS standard

Dedicated Time (in hours): 7.5

Day 6

No report.


Total hours this week: 16.5


Day 7

Summary: Added Notifications, Navbar, ProfileTile components + redux routing

Dedicated Time (in hours): 9.5

+Relevant commits: 
+- 611c215380a5a6a6c3bfb6b036953aaa1d852d92

Day 8

Summary: Added ProfileTile component + Network and Public pages + upgraded redux routing

Dedicated Time (in hours): 7

Day 9

Summary: Upgraded user page routing & user specific ProfileTile component

Dedicated Time (in hours): 5.5

+Relevant commits:
+- 9a0b81dd40db4303fce41811e8a79b5a51a3bb8b 

Day 10

Summary: Aquainted with Bootstrap frameowrk + studied routing for Status/post-specific model

Dedicated Time (in hours): 6

Day 11

No report.

Day 12

No report.

Day 13

No report.


Total hours this week: 28


Day 14

Summary: Added & tested Like functionality + Notification Panel

Dedicated Time (in hours): 6.5

+Relevant commit:
+- 2399af4e75a97cb9438eb45c5e647439b2c3f073

Day 15

Summary: Added Login scroll down menu panel

Dedicated Time (in hours): 6.75

+Relevant commit:
+- 0aefb1ed32e99863ddcb0d33010dd916cca95aac

Day 16

Summary: Notification panel touchup + designed scroll bar

Dedicated Time (in hours): 6

+Relevant commit:
+- a417d95e5460c8f2cdf5e7bf25e2b4303c719449

Day 17

Summary: Added functioning base for full settings page

Dedicated Time (in hours): 7.5

+Relevant commit:
+- b10c07c9ba45162f394fab1c676acc9cf9ab944c

Day 18

Summary: Modified reply/comment structure

Dedicated Time (in hours): 6.5

+Relevant commit:
+- c1f90479eea5c7f5ef6490a70e1071769d1f4171

Day 19

Summary: Added spinner component

Dedicated Time (in hours): 6.15

+Relevant commit:
+- cb5c258ebfa1a92e08be2082992a795308f27c88

Day 20

Summary: Added input form handling

Dedicated Time (in hours): 6.5

+Relevant commit:
+- f025da7d171404ce14e1e0c10ecef1543b4d5230

Total hours this week: 45.9


Day 21

Summary: Added retractable search bar + button redesign + attatchement handling + fixed routing + new post maker + added subnotification panel

Dedicated Time (in hours): 12

+Relevant commit:
+- 7c3c9074d2ef17237af0d530cb85a2481a375c4a

Day 22

Summary:

Dedicated Time (in hours):

+Relevant commit:
+- f2a835b2dec8361fd717672eaf7e2be37945104a

Day 23

Summary: Finished settings page + added avatar uploading + redesigned authentication system + additional routing for logged in/out functionalities

Dedicated Time (in hours): 13

+Relevant commit:
+- 0ba5629e14224d2c2854beca5a39449914526a30

Day 24

Summary: Fixed login routing + added edit avatar component + settings routing in navbar + redux for handles

Dedicated Time (in hours): 8

+Relevant commit:
+- 9a3afd177733a777b6de46c052d38f507a40d619

Day 25

Summary: Added placeholder backend for demonstrating functionalities + fixed settings menu

Dedicated Time (in hours): 8.5

+Relevant commit:
+- 97d507045f96710d111a55638d38a80f3893f29b
+- 1b01338247d49d41d604b1940c1dc2bd406097af

Day 26

Summary: Finishing profiletile fixes for logged in users + fixed routing + fixed public folder's contents and primary colour for components

Dedicated Time (in hours): 11

+Relevant commit:
+- 38951a1824d35a2d95e8a79746e9bda4a6af0aa5

Day 27

Summary: Finishing component tweaking - deleted personal-use comments

Dedicated Time (in hours): 5

+Relevant commit:
+- 07c03bb5e92263b749677c4093a1690ddc817c8a

Total hours this week: 57.5


Day 28

Summary: Fixed identation + final testing

Dedicated Time (in hours): 3.5

+Relevant commit:
+- ade87d5829ec387d818d901ffc38a21a099177ca

Day 29

No report.

Day 30

No report.

Day 31

No report.

+ diff --git a/soc/2020/daily_report/archive/June/hugo.html b/soc/2020/daily_report/archive/June/hugo.html new file mode 100644 index 0000000..ba6ec46 --- /dev/null +++ b/soc/2020/daily_report/archive/June/hugo.html @@ -0,0 +1,96 @@ + + + + +Daily Report Viewer | GS SoC 2020 + + + + + + + + + +

Showing reports for hugo

Day 0

Summary: Admin configuration panel and updating code around default configuration

Dedicated Time (in hours): 2

+
+

Day 1

Summary: Add admin config form and display previous value. Studying Pleroma API

Dedicated Time (in hours): 2

+
+

Day 2

No report.

Day 3

Summary: Refactoring core, use dropdown in admin config panel, add custom message extractor, contributing to upstream Functional

Dedicated Time (in hours): 5

+
+Relevant commits:
+  - 0d7eb496cf6ad188bff0c238d819af7a5faf1ad8 [UI][CONFIG] Added admin configuration form
+  - b40ea7227940ebab7a55ab5268fdf1182a3dcc48 [CORE] Refactoring core
+  - 298cce0d53eebfaab914e6ff1e7d179700ac0dee [ROUTER] Add static wrapper around Symfony's router
+  - e7260fdf9a1ee1760e189feac2b398b73f91db60 [I18N] Refactor since rfc/use-static-function is not implemented
+  - 9e6278c3eda7c7038b9fc1f42f240142658dfbb9 [I18N] Custom translation extractor based on Symfony's PhpExtractor, since we use  instead of
+
+
+

Day 4

Summary: Updated configure script, helped Susanna. Added method to dump dynamic-valued calls to _m and dumped english files

Dedicated Time (in hours): 4

+
+Relevant commits:
+  -  a43c113e33b46448f416e4ccbfad2ca85e13ccad [TOOLS] Improve configure script to disallow reserved database names
+  -  b795bbdff9201c65372e47318a5bfbb3a83d7b23 (v2) [SCRIPTS] Import changes to configure script from V3
+  -  7eff019489f4125284afbd3c3ebbccf3ff380577 [I18N] Added ability to call `_m_dynamic` from any class, allowing it to define translations for dynamic-valued calls to `_m`
+  -  e7b921514bfb0ec7fddcaed6e6862f8681bd8b42 [TOOLS] Small fix to composer install hook
+  -  3e16f00d9fe91c85feab62c0a8622d2b52073737 [I18N] Dumped english translation files
+
+
+

Day 5

No report.

Day 6

Summary: Studying ICU message format to improve the implementation of the translation facilities, testing

Dedicated Time (in hours): 7

+
+

Total hours this week: 20


Day 7

Summary: Upgrade dependencies, fixed autoloading for _m and trying to fix the tests (the framework isn't loaded the same way)

Dedicated Time (in hours): 2

+
+Relevant commits:
+  - dc92ba1a6b443d2667d71ff94e90bb422e89e68e [DEPENDENCY] Upgrade Symfony framework from 5.0 to 5.1
+  - d06fffffb4544986109eb7d0ce1d92c390bb0771 [AUTOLOAD] Always autoload _m file
+
+

Day 8

No report.

Day 9

No report.

Day 10

Summary: Fixed bugs in I18n _m implementation, trying to fix tests

Dedicated Time (in hours): 4

+
+Tested and researched a lot of things, asked for help Symfony's Slack, ran the component tests and wrote a bug report.
+
+

Day 11

No report.

Day 12

No report.

Day 13

No report.


Total hours this week: 6


Day 14

No report.

Day 15

No report.

Day 16

No report.

Day 17

No report.

Day 18

No report.

Day 19

Summary: Meeting helping Eliseu and planning various things

Dedicated Time (in hours): 5

+
+

Day 20

Summary: Support for TemplateController and Symfony/Translation PR #37371, helping Eliseu, working on ICU format

Dedicated Time (in hours): 7

+
+- bc8509d9ec9cb56c995ae6acce6fda3af6cb350d [ROUTER] Add easier support for using TemplateController and improved documentation
+- Symfony pull request https://github.com/symfony/symfony/pull/37371
+

Total hours this week: 12


Day 21

No report.

Day 22

Summary: Added testing and implementation for _m and formatICU

Dedicated Time (in hours): 2

+
+Relevant commits:
+  - d9d89efc5eafc725d51ceecf11eabff63ea6e362 [I18N] Fix implementation of I18nHelper::formatICU
+  - 8d6dbb1bcc3ce1319757099e41550d3dc6168e20 [TESTS][I18N] Added test for I18n::_m and I18nHelper::formatICU
+  - bc25920efb4a1ccf993592da9793cedf1000f182 [UPGRADE][DEPRECATION] Fixed deprecation resultant from Symfony 5.1 upgrade
+
+
+

Day 23

Summary: Add admin site config page

Dedicated Time (in hours): 2.5

+
+Relevant commits:
+  - 8e74c7bd5a1c7b65fdadcd79eb5093de094e9bfb [DEFAULTS] Small fixes and add check of SOCIAL_NO_RELOAD_DEFAULTS from the environment, to override the reloading of default values
+  - e0bf6adeed934a3623ff6bf1970f03756951542e [ROUTE][ADMIN][CONFIG] Add route to update values in the config table
+
+
+

Day 24

No report.

Day 25

No report.

Day 26

No report.

Day 27

No report.


Total hours this week: 4.5


Day 28

No report.

Day 29

No report.

Day 30

No report.

+ diff --git a/soc/2020/daily_report/archive/June/rainydaysavings.html b/soc/2020/daily_report/archive/June/rainydaysavings.html new file mode 100644 index 0000000..7accb3c --- /dev/null +++ b/soc/2020/daily_report/archive/June/rainydaysavings.html @@ -0,0 +1,119 @@ + + + + +Daily Report Viewer | GS SoC 2020 + + + + + + + + + +

Showing reports for rainydaysavings

Day 0

Summary: Getting basic design finalized

Dedicated Time (in hours): 8

+- Polishing design
+- Listening to the community and making necessary changes
+

Day 1

Summary: Polishing design work

Dedicated Time (in hours): 2

                                      
+ - Polishing design
+

Day 2

Summary: Creating new icon set

Dedicated Time (in hours): 5

+- Fixing a neo-quitter theme bug
+
+Relevant commits: 
+- 92ad44abf9@upstream
+- 62e734517e@designs
+

Day 3

Summary: Studying Symfony Controllers and Twig

Dedicated Time (in hours): 2

+- Getting ready to make the FAQ page
+- Understanding the codebase
+

Day 4

Summary: Creating FAQ Route and Controller, basic template structure

Dedicated Time (in hours): 6

+Relevant commit:
+- 28575ce2d5@upstream
+

Day 5

No report.

Day 6

No report.


Total hours this week: 23


Day 7

No report.

Day 8

Summary: Polished icons and created more

Dedicated Time (in hours): 2

+ - Fixed symmetry issues
+ - Added logo, search and options icons
+
+ Relevant commit:
+ - 48d2467494@designs
+
+

Day 9

No report.

Day 10

Summary: FAQ page progress

Dedicated Time (in hours): 7

+- Added icon assets
+
+Relevant commits:
+- 224e87ddd7@upstream
+- 3424510eaa@designs
+

Day 11

Summary: FAQ page progress, almost completed

Dedicated Time (in hours): 9

+Relevant commits:
+- 75f0d589f1@upstream
+

Day 12

Summary: FAQ subpages completed, routing as well

Dedicated Time (in hours): 8

+Relevant commits:
+- 2d65e80555@upstream
+

Day 13

Summary: FAQ Responsiveness work, containerization

Dedicated Time (in hours): 8

+- Better use of Twig's functionality to better organize pages content
+
+Relevant commit:
+- 51664dd47a@upstream
+

Total hours this week: 34


Day 14

Summary: Organizing FAQ, exploring better navigation solutions

Dedicated Time (in hours): 4

+- Different navigation methods approached, none came to fruition, sliding header solution to be implemented tommorow
+
+Relevant commit:
+- d3cb7c8366@upstream
+

Day 15

No report.

Day 16

No report.

Day 17

No report.

Day 18

Summary: PHP and Symfony study

Dedicated Time (in hours): 2

Day 19

Summary: Various fixes, studying and discussion with mentors

Dedicated Time (in hours): 8

+- Fixing static pages routes
+- Discussing improvements and what to tackle next with Hugo and Diogo
+- Studying Web Security and solutions to possible vulnerabilities
+- Studying PHP
+
+Relevant commits:
+- 5734468448@upstream
+

Day 20

Summary: Codebase study and core actions work started

Dedicated Time (in hours): 10

+- Refactored CSS code to better reflect pages as their own contained blocks
+- Started work on user admin panel controller
+- Routing fixed with attention to possible vulnerabilities
+
+Relevant commits:
+6d9411ccf3@upstream
+0cff087081@upstream
+

Total hours this week: 24


Day 21

No report.

Day 22

No report.

Day 23

Summary: New header block and settings page design concept

Dedicated Time (in hours): 4

+Relevant commits:
+- b0129fa7b2@designs
+

Day 24

Summary: Polishing header design, implementing new header

Dedicated Time (in hours): 8

+Relevant commits:
+- d5576875cb@upstream
+

Day 25

Summary: Settings page work started, structure and routing done

Dedicated Time (in hours): 5

+Relevant commits:
+- b9cbc6a0c7@upstream
+

Day 26

Summary: UserAdminPanel port iniciated, Settings page styling almost finished

Dedicated Time (in hours): 6

+Relevant commits:
+- 433f27f684@upstream
+

Day 27

Summary: Settings page responsive-ness work

Dedicated Time (in hours): 10

+- Symfony docs study on forms, specifically requests
+- Trying to get settings page functionality to work
+
+Relevant commits:
+- 4bfa22b050@upstream
+

Total hours this week: 33


Day 28

No report.

Day 29

No report.

Day 30

No report.

+ diff --git a/soc/2020/daily_report/archive/June/susannadiv.html b/soc/2020/daily_report/archive/June/susannadiv.html new file mode 100644 index 0000000..b536ee9 --- /dev/null +++ b/soc/2020/daily_report/archive/June/susannadiv.html @@ -0,0 +1,80 @@ + + + + +Daily Report Viewer | GS SoC 2020 + + + + + + + + + +

Showing reports for susannadiv

Day 0

Summary: Debugged ActivityPub Following and Follower endpoint handling for empty list

Dedicated Time (in hours): 5.2

+- Set up remote debugging enviroment
+- Located and half-way through fixing Following and Follower endpoint "empty list for a specific actor does not return correct json report" bug for the ActivityPub plugin; said bug has been observed and reproduced in a GS v2 postgres db-based instance. 
+Relevant commit:
+
+

Day 1

No report.

Day 2

Summary: Studied and reviewed previous knowledge on ActivityPub Protocol

Dedicated Time (in hours): 2.1

+- Familiarized with the entirity of the AP plugin implementation
+- Brief testing of actor's profile functionality
+

Day 3

Summary: Fixed DB syntax error and gathered information on image uploading + codebase image-handling familiarization

Dedicated Time (in hours): 4

+- MR writing for previous debug session
+

Day 4

Summary: Fixed the Postgres incompatible query in both the AP and Autocomplete plugins and the clean_profile script

Dedicated Time (in hours): 9

+- Brief testing of image uploading functionality
+- Replaced "!=" with the ANSI standard operator "<>"
+- Fixed bad db setup
+- Relevant commits:
+6d62653692fadb1b2680c8dd329774c1958f87ca [ActivityPub] Fix Postgres incompatible query in Following and Followed collection
+125f88386dc65d2ac05c10e22def647c77005613 [SCRIPTS] Fix postgres incompatible query in clean_profiles.php 	
+4226850d3a1cd697476a591f059c5b5b73c53e15 [Autocomplete] Fix postgres incompatible query in AutocompleteAction
+f254fb2183a0da3e1874fb7196322c4747c72651 [ActivityPub] Replace "!=" with the ANSI standard operator "<>"
+

Day 5

No report.

Day 6

Summary: Tested and attempted at physically optimizing tuned left-deep pipeline of notice-getting timeline query + Explained and learned about DBMS' abstract structures and postgres-specific physical time-sensitive performance optimization through usage of scalar subqueries as opposed to insiemistic operators

Dedicated Time (in hours): 9.11


Total hours this week: 29.41


Day 7

No report.

Day 8

Summary: Tested thorughly image (and specifically avatar) upload handling in AP

Dedicated Time (in hours): 2.15

Day 9

No report.

Day 10

No report.

Day 11

No report.

Day 12

No report.

Day 13

No report.


Total hours this week: 2.15


Day 14

Summary: First implementation of postman's DELETE http request function for cache refresh in AP + Testing of avatar fetching in AP + Testing of OStatus' queue handling for remote likes and writing of plan of action for AP's queue handler's implementation

Dedicated Time (in hours): 9.45

+Relevant commits:
+- 08f61fc453b20c9029b0d6708c78518d044bd649 [ActivityPub] Implemented first, non-queued HTTP Delete request function
+

Day 15

Summary: AP's queue handler function initial implementation + plan of action regarding pushing and actor division analysis

Dedicated Time (in hours): 6.15

+
+

Day 16

Summary: Finished AP's queue handler function implementation + continued avtar fromURI implementation & testing + started studying TFNM's possible unit tests

Dedicated Time (in hours): 10

+
+

Day 17

No report.

Day 18

Summary: Polished queue handling code + planned avatar fetching fromURL implementation

Dedicated Time (in hours): 9.5

+Relevant commits:
+-212efc23d7765784bc3d46a9a261a6481c27adf5 [ActivityPub] Moved Delivery Events to queue handler
+-5d2632e90b33fc0af78ea5b5613cc11ad0570a2f [ActivityPub] Fix delivery events queue handling
+

Day 19

Summary: Finished fetch avatars in accordance to the new media system function + wrote PHP unit tests for AP + conducted AP user testing on follow/unfollow, like/undo_like events

Dedicated Time (in hours): 12.5

+Relevant commits:
+-6a68ca3f0fc8cc49cecfa1476500a2caa3a39a88 [Federation] Fetch avatars in accordance to the new media system
+

Day 20

Summary: AP php unit tests + queue handling debug and Actor/Object studying

Dedicated Time (in hours): 10.15


Total hours this week: 57.75


Day 21

Summary: AP plugin testing + resources study

Dedicated Time (in hours): 3

Day 22

Summary: Fix ensuring presence of Actor Profile in notice creation + implemented model for polls support + wrote implementation plan for upcoming days

Dedicated Time (in hours): 7

+Relevant commit:
+- 1ef8fa92d2e4d6b03cbace55557f2505342c69a3 [ActivityPub] Fix ensuring presence of Actor Profile in notice creation

Day 23

Summary: Fix implemnented model for polls support + further inquiring on imbox forwarding

Dedicated Time (in hours): 6.5

Day 24

Summary: Fix queue bug + further unanswered inquiring on polls support, polls_reply (according to the ActivityPub standard)

Dedicated Time (in hours): 7

+Relevant commit:
+- b6e21d912fb4c63fcc12d95b42f24840c755f9fb [ActivityPub] Added Happenings support (pushed)
+

Day 25

Summary: Analyzed invalid signatures inbox bug + fixed AP phptest model

Dedicated Time (in hours): 5.5

+Relevant commit:
+- 1ef8fa92d2e4d6b03cbace55557f2505342c69a3 [ActivityPub] Fix ensuring presence of Actor Profile in notice creation
+

Day 26

Summary: Implementation of failed queue

Dedicated Time (in hours): 6

Day 27

Summary: Fixed avatar fetching from external instances

Dedicated Time (in hours): 6.5


Total hours this week: 41.5


Day 28

No report.

Day 29

Summary: Review Delete verb + prepared for merging

Dedicated Time (in hours): 6

Day 30

No report.

+ diff --git a/soc/2020/daily_report/archive/May/hugo.html b/soc/2020/daily_report/archive/May/hugo.html new file mode 100644 index 0000000..c506bc0 --- /dev/null +++ b/soc/2020/daily_report/archive/May/hugo.html @@ -0,0 +1,120 @@ + + + + +Daily Report Viewer | GS SoC 2020 + + + + + + + + + +

Showing reports for hugo

Day 0

Summary: Small fixes and improving docker containers

Dedicated Time (in hours): 2

+- Fixed deprecated warnigns during installation
+- Started configuring easier to use docker containers
+
+Relevant commits:
+  - 6c844315aa41ab23f6800a557657a6a44bf8321e
+

Day 1

Summary: Improving docker container

Dedicated Time (in hours): 2

+- Finished improving docker containers, with automatic SSL certificate creation, with Let's Encrypt
+
+Relevant commits:
+  - 7ac5fdf31610424116557f428a965dab737c1577
+
+

Day 2

Summary: Fixing docker environment and automatic configuration scripts

Dedicated Time (in hours): 10

+- Added script to configure app
+- Fixed docker to configure the app environment
+- Fixed install script
+- Brought GnuDIP2 back to life https://notabug.org/someonewithpc/gnudip
+
+Relevant commits:
+  - 8e9d4841ccc43da2c71c06a7bd0432be64d97114 [TOOLS] Added script to configure the installation and to bootstrap certificate creation with Let's Encrypt
+  - e202c55ffeb3ebf3b36ec98ace0d2e577629bd95 [DOCKER] Fixed docker environment to properly configure the app environment
+  - 12946733d7413bbcb11158f0e73af36d63f0c3a5 [TOOLS][DOCKER] Further fixes in the docker environment and fixed the install script
+  - 278650a7746eaa9b412ac24ef18da71e3d30f183 [TOOLS] Updated install script to also support mariadb
+

Day 3

Summary: Writing a V3 installation instruction and code walkthrough document, backporting docker setup to v2

Dedicated Time (in hours): 10

+
+Relevant commits:
+  - b1c09fe06bc866fcf3537c8f008bd700203bad51 [DOCUMENTATION] Added install documentation
+  - 8ff3846c8906ccfe5e785624af910684616e2cb0 [DOCUMENTATION] Added a code walkthrough document, which explains how the codebase works
+  - d530fdb2baa67fa0a1099947d3457e92a2044435 [DOCKER][TOOLS] Updated docker environment and social install script
+  - d3cfaca3d65654438b9eb729aac8e77dc101cc43 [DOCKER] Small fixes to docker setup, imported from V2
+  - d7790ba8a7fe24f9289411ff2ad69b9fd68329e5 [DOCUMENTATION] Import installation instructions for installing without docker from V2
+  - b2e940419759737456bf636d31bf2126bd93e9b7 [SCRIPTS] Moved tools from bin to scripts and edited INSTALL.md
+  - d94466bbbab949de502a9a079ffd9e7cd52ba3c1 [DOCUMENTATION] Updated INSTALL.md to reflect the fact that a CNAME record can be used directly

Day 4

No report.

Day 5

Summary: Helping students setup V3, correcting and reviewing V3 commits

Dedicated Time (in hours): 1

+
+

Day 6

Summary: Helping students setup V3, reviewing V3 commits, some refactoring work

Dedicated Time (in hours): 2

+
+

Total hours this week: 27


Day 7

Summary: Import commits by Diogo to add option to use self signed certificates, refactoring, rebased on nightly, changed author email

Dedicated Time (in hours): 6

+
+Relevant commits:
+  - 694d35635b128eddeada6568eb6adb7fd5e18b4a [FIX] Small bug fixes and docblock elaboration
+  - 4d52a08538310333515deb7afe516bdcdfe4ff72 [DOCKER][BOOTSTRAP] Add option to use a self signed cert
+  - e0274a645d086e10fa8b37d56c40bf8128500b0d [FORMATTING] Cherry-pick of Diogo's 763ac735c0758624ebd5957993dc0676b865927a
+  - 1a50b714de3ab13e137848b44e81ca4cb95d6874 [REFACTORING] Splitting up Common
+  - d73700947a234ef55b46f5c3a79bed76f1ebf759 [REFACTORING] Resolve errors from previous commit
+  - 1ad672f1f400fadc87d7ac6fb2e9b768feaa5819 [ASSETS] Import old favicon.ico
+

Day 8

Summary: Studying Doctrine's documentation

Dedicated Time (in hours): 3

+
+- Trying to figure out the best way to provide database access, since
+    the Symfony-preferred way:
+    `$this->getDoctrine()->getRepository(Product::class)->find($id)`
+    seems much too verbose.
+- Studying configuration options
+- Merging report commits
+

Day 9

Summary: Investigating how to use doctrine with symfony, prototyping, and helping Susanna setup her dev environment

Dedicated Time (in hours): 5

+
+

Day 10

Summary: Load default config values into database, small tweaks to docker and SchemaDefDriver

Dedicated Time (in hours): 7

+  - ae4f11e8f812aa9e6d2a9b0fdaaf712ab315aca6 [DB][CONFIG] Bring default configs from V2 and implement DB wrapper
+  - 0570fea3fcde06ab0bf845a6a42ff41c0451da53 [DB][CONFIG] Loading defaults into database, doctrine static wrapper
+  - 6ade8ae7f555e905def2c662f05f2103b0b3535c [DOCKER] Change postgres data path to the correct one
+  - 82d178318b21901fba45a4a8ff0e3340bcb6affe [DB] Postgres doesn't understand '0000-00-00 00:00:00' for datetime, use '-infinity'
+

Day 11

Summary: Implement database config defaults loading, help Eliseu and Susanna setup their dev environments

Dedicated Time (in hours): 9

+
+

Day 12

Summary: Updated install tools and optimized DB default loading

Dedicated Time (in hours): 8

+
+Commits:
+  - 0ae410978d79d405e793671d784f49f4ef088f23 [DB] Fix 'relation config doesn't exist'
+  - 9c8373abd83ef48e639e7a6fb18b9c1eeb12ca5c [TOOLS] Update install scripts
+  - dce5c802caaa95f129739936ca726d0fff252016 [DB] Change the way defaults are loaded, bulk insert, reload everything in debug mode, only on http requests (not command line)
+  - c759ab239b2e0490f8db66d3a7eea4ad6764d169 [GIT] Added docker-compose to gitignore, in preparation for using a script to generate them
+  - 852c715ef94605e2a61639fca99f20161e350852 [DEFAULTS] Remove deprecated defaults and convert them to snake_case
+
+

Day 13

Summary: Documented all config options, added alchemy/zippy

Dedicated Time (in hours): 3

+
+

Total hours this week: 41


Day 14

No report.

Day 15

No report.

Day 16

No report.

Day 17

No report.

Day 18

No report.

Day 19

No report.

Day 20

Summary: Studying other software's docker configuration and codebases

Dedicated Time (in hours): 5

+
+

Total hours this week: 5


Day 21

Summary: Studying OpenID, OAuth and SASL protocol, for potential Single-Sign-On

Dedicated Time (in hours): 4

+
+

Day 22

Summary: Help Susanna setup her V2 instance, updating PR to upstream `functional-php`

Dedicated Time (in hours): 5

+
+

Day 23

Summary: Help Susanna setup her V2 instance, and Eliseu understand how to implement templates

Dedicated Time (in hours): 2

+
+

Day 24

No report.

Day 25

No report.

Day 26

No report.

Day 27

No report.


Total hours this week: 11


+ diff --git a/soc/2020/daily_report/archive/May/rainydaysavings.html b/soc/2020/daily_report/archive/May/rainydaysavings.html new file mode 100644 index 0000000..662f570 --- /dev/null +++ b/soc/2020/daily_report/archive/May/rainydaysavings.html @@ -0,0 +1,55 @@ + + + + +Daily Report Viewer | GS SoC 2020 + + + + + + + + + +

Showing reports for rainydaysavings

Day 0

No report.

Day 1

Summary: Understanding the codebase

Dedicated Time (in hours): 3

+- Studying PHP
+- Getting a grasp of what I need to implement and how
+- Studying Twig's docs, emphasis on controllers
+

Day 2

Summary: Further PHP study and practice

Dedicated Time (in hours): 5

+- Study and practice with PHP
+

Day 3

No report.

Day 4

No report.

Day 5

No report.

Day 6

No report.


Total hours this week: 8


Day 7

No report.

Day 8

No report.

Day 9

No report.

Day 10

No report.

Day 11

Summary: GNU social v3 - setting up

Dedicated Time (in hours): 5

+- Setting up v3 with help from Diogo and Hugo
+- First assigment given
+- Studying Symfony templating
+

Day 12

No report.

Day 13

No report.


Total hours this week: 5


Day 14

No report.

Day 15

No report.

Day 16

No report.

Day 17

No report.

Day 18

No report.

Day 19

No report.

Day 20

No report.


Total hours this week: 0


Day 21

No report.

Day 22

Summary: New design work

Dedicated Time (in hours): 10

+- PHP practice;
+- New design and approach;
+
+Relevant commits:
+- https://github.com/rainydaysavings/GNU-social-designs/commit/3270007971df227968129319aab444b088120c27 (@designs)
+

Day 23

No report.

Day 24

No report.

Day 25

No report.

Day 26

No report.

Day 27

No report.


Total hours this week: 10


+ diff --git a/soc/2020/daily_report/archive/May/susannadiv.html b/soc/2020/daily_report/archive/May/susannadiv.html new file mode 100644 index 0000000..29e44e3 --- /dev/null +++ b/soc/2020/daily_report/archive/May/susannadiv.html @@ -0,0 +1,67 @@ + + + + +Daily Report Viewer | GS SoC 2020 + + + + + + + + + +

Showing reports for susannadiv

Day 0

No report.

Day 1

No report.

Day 2

No report.

Day 3

No report.

Day 4

No report.

Day 5

Summary: Setting up the enviroment

Dedicated Time (in hours): 4.5

+- Set up of a GS-dedicated virtual machine
+- Installation of docker and docker-compose
+- Acquired the domain susannadiv.tk and set up /bin/bootstrap_certificates
+

Day 6

Summary: Continuation of enviroment setup

Dedicated Time (in hours): 2.5

+- Registered for a GnuDIP dynamic DNS solution
+- Researched systemd Debian documentation page
+

Total hours this week: 7


Day 7

Summary: Self-study of UNIX/Bash-based tools

Dedicated Time (in hours): 1.75

+- Finished studying all the material regarding git usage
+- Studied recommended (and some additional) resources regarding file
+  manipulation and shell scripting
+- Short self-training period to freshen-up previous knowledge
+

Day 8

Summary: Continuation of enviroment setup

Dedicated Time (in hours): 0.15

Day 9

No report.

Day 10

Summary: Debugged initial setup

Dedicated Time (in hours): 6

+- Configured CNAME profile record from the DNS provider
+- Succefully finished GunDIP dynamic DNS hosting setup
+- Installed necessary php-packages
+

Day 11

No report.

Day 12

Summary: Terminated installation

Dedicated Time (in hours): 7

+- Ateended briefing on ActivityPub, OStatus, Core and Plugins functionalities
+

Day 13

No report.


Total hours this week: 14.9


Day 14

No report.

Day 15

No report.

Day 16

Summary: Finished CSS styling on the GNU social landing page

Dedicated Time (in hours): 3

+- Perfected readability by tuning down rgb brighteness for a less vivacious dark background + modified font palette into lighter tones
+

Day 17

No report.

Day 18

No report.

Day 19

Summary: Continued personal susannadiv.tk instances debugging

Dedicated Time (in hours): 4.25

+- Searched for port-forwarding isp-related problems and analized possible solutions  
+

Day 20

No report.


Total hours this week: 7.25


Day 21

No report.

Day 22

Summary: Setting up of AWS VPS service EC2

Dedicated Time (in hours): 6

+- Setting up of a fully functioning EC-2 instance with docker and docker-compose
+- Debugging of DNS problems
+- Installation of another CS v2 instance on said EC-2 machine
+

Day 23

Summary: Succesfully set up net-based instance and started 'get to know the federation handling' tests

Dedicated Time (in hours): 1.15

+
+

Day 24

No report.

Day 25

No report.

Day 26

No report.

Day 27

No report.


Total hours this week: 7.15


+ diff --git a/soc/2020/daily_report/archive/app/assets/app.css b/soc/2020/daily_report/archive/app/assets/app.css new file mode 100644 index 0000000..9251693 --- /dev/null +++ b/soc/2020/daily_report/archive/app/assets/app.css @@ -0,0 +1,18 @@ +@import url(https://fonts.googleapis.com/css?family=Source+Code+Pro|Work+Sans:200,400&display=swap); + +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}[hidden],template{display:none}blockquote,dd,dl,h1,h2,hr,p,pre{margin:0}button{background-color:transparent;background-image:none;padding:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}fieldset,ol,ul{margin:0;padding:0}ol,ul{list-style:none}html{font-family:Work Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}*,:after,:before{box-sizing:border-box;border:0 solid #e2e8f0}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#a0aec0}input::-moz-placeholder,textarea::-moz-placeholder{color:#a0aec0}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#a0aec0}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:#a0aec0}input::placeholder,textarea::placeholder{color:#a0aec0}[role=button],button{cursor:pointer}table{border-collapse:collapse}h1,h2{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,select,textarea{padding:0;line-height:inherit;color:inherit}code,kbd,pre,samp{font-family:Source Code Pro,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}embed,img,object,svg{display:block;vertical-align:middle}img{max-width:100%;height:auto}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}.space-x-2>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0.5rem*var(--space-x-reverse));margin-left:calc(0.5rem*(1 - var(--space-x-reverse)))}.bg-transparent{background-color:transparent}.bg-white{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.bg-gray-100{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.bg-blue-600{--bg-opacity:1;background-color:#3182ce;background-color:rgba(49,130,206,var(--bg-opacity))}.bg-blue-700{--bg-opacity:1;background-color:#2b6cb0;background-color:rgba(43,108,176,var(--bg-opacity))}.hover\:bg-gray-200:hover{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.hover\:bg-gray-400:hover{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.hover\:bg-red-700:hover{--bg-opacity:1;background-color:#c53030;background-color:rgba(197,48,48,var(--bg-opacity))}.hover\:bg-blue-700:hover{--bg-opacity:1;background-color:#2b6cb0;background-color:rgba(43,108,176,var(--bg-opacity))}.border-gray-800{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.rounded{border-radius:.25rem}.rounded-lg{border-radius:.5rem}.rounded-full{border-radius:9999px}.rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.border{border-width:1px}.border-t-2{border-top-width:2px}.cursor-pointer{cursor:pointer}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.table{display:table}.hidden{display:none}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.flex-1{flex:1 1 0%}.flex-grow{flex-grow:1}.flex-shrink-0{flex-shrink:0}.order-first{order:-9999}.font-sans{font-family:Work Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.font-mono{font-family:Source Code Pro,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-thin{font-weight:200}.font-bold{font-weight:700}.h-6{height:1.5rem}.h-12{height:3rem}.h-screen{height:100vh}.text-sm{font-size:.875rem}.text-lg{font-size:1.125rem}.text-xl{font-size:1.25rem}.text-2xl{font-size:1.5rem}.text-4xl{font-size:2.25rem}.m-4{margin:1rem}.-m-1{margin:-.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.my-4{margin-top:1rem;margin-bottom:1rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.mr-2{margin-right:.5rem}.ml-2{margin-left:.5rem}.mb-4{margin-bottom:1rem}.min-h-screen{min-height:100vh}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-4{padding:1rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.pr-2{padding-right:.5rem}.pr-3{padding-right:.75rem}.pt-4{padding-top:1rem}.placeholder-gray-900::-webkit-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.placeholder-gray-900::-moz-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.placeholder-gray-900:-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.placeholder-gray-900::-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.placeholder-gray-900::placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:-webkit-sticky;position:sticky}.inset-y-0{top:0;bottom:0}.top-0{top:0}.right-0{right:0}.bottom-0{bottom:0}.left-0{left:0}.resize{resize:both}.shadow{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.shadow-md{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.shadow-lg{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.shadow-inner{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.hover\:shadow:hover{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.table-auto{table-layout:auto}.text-center{text-align:center}.text-right{text-align:right}.text-white{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.text-gray-400{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.text-gray-600{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.text-blue-900{--text-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--text-opacity))}.hover\:text-white:hover{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.hover\:text-gray-400:hover{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.hover\:text-blue-700:hover{--text-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--text-opacity))}.hover\:text-github:hover{--text-opacity:1;color:#171515;color:rgba(23,21,21,var(--text-opacity))}.hover\:text-spectrum:hover{--text-opacity:1;color:#7b16ff;color:rgba(123,22,255,var(--text-opacity))}.hover\:text-twitter:hover{--text-opacity:1;color:#1da1f2;color:rgba(29,161,242,var(--text-opacity))}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.hover\:underline:hover,.underline{text-decoration:underline}.tracking-tight{letter-spacing:-.025em}.group:hover .group-hover\:visible,.visible{visibility:visible}.whitespace-no-wrap{white-space:nowrap}.break-all{word-break:break-all}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.w-6{width:1.5rem}.w-12{width:3rem}.w-1\/4{width:25%}.w-1\/6{width:16.666667%}.w-full{width:100%}.w-screen{width:100vw}.z-50{z-index:50}.transform{--transform-translate-x:0;--transform-translate-y:0;--transform-rotate:0;--transform-skew-x:0;--transform-skew-y:0;--transform-scale-x:1;--transform-scale-y:1;transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y))}.transition{transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-500{transition-duration:.5s} + +/*! + * Font Awesome Free 5.13.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */.fa,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\F26E"}.fa-accessible-icon:before{content:"\F368"}.fa-accusoft:before{content:"\F369"}.fa-acquisitions-incorporated:before{content:"\F6AF"}.fa-ad:before{content:"\F641"}.fa-address-book:before{content:"\F2B9"}.fa-address-card:before{content:"\F2BB"}.fa-adjust:before{content:"\F042"}.fa-adn:before{content:"\F170"}.fa-adobe:before{content:"\F778"}.fa-adversal:before{content:"\F36A"}.fa-affiliatetheme:before{content:"\F36B"}.fa-air-freshener:before{content:"\F5D0"}.fa-airbnb:before{content:"\F834"}.fa-algolia:before{content:"\F36C"}.fa-align-center:before{content:"\F037"}.fa-align-justify:before{content:"\F039"}.fa-align-left:before{content:"\F036"}.fa-align-right:before{content:"\F038"}.fa-alipay:before{content:"\F642"}.fa-allergies:before{content:"\F461"}.fa-amazon:before{content:"\F270"}.fa-amazon-pay:before{content:"\F42C"}.fa-ambulance:before{content:"\F0F9"}.fa-american-sign-language-interpreting:before{content:"\F2A3"}.fa-amilia:before{content:"\F36D"}.fa-anchor:before{content:"\F13D"}.fa-android:before{content:"\F17B"}.fa-angellist:before{content:"\F209"}.fa-angle-double-down:before{content:"\F103"}.fa-angle-double-left:before{content:"\F100"}.fa-angle-double-right:before{content:"\F101"}.fa-angle-double-up:before{content:"\F102"}.fa-angle-down:before{content:"\F107"}.fa-angle-left:before{content:"\F104"}.fa-angle-right:before{content:"\F105"}.fa-angle-up:before{content:"\F106"}.fa-angry:before{content:"\F556"}.fa-angrycreative:before{content:"\F36E"}.fa-angular:before{content:"\F420"}.fa-ankh:before{content:"\F644"}.fa-app-store:before{content:"\F36F"}.fa-app-store-ios:before{content:"\F370"}.fa-apper:before{content:"\F371"}.fa-apple:before{content:"\F179"}.fa-apple-alt:before{content:"\F5D1"}.fa-apple-pay:before{content:"\F415"}.fa-archive:before{content:"\F187"}.fa-archway:before{content:"\F557"}.fa-arrow-alt-circle-down:before{content:"\F358"}.fa-arrow-alt-circle-left:before{content:"\F359"}.fa-arrow-alt-circle-right:before{content:"\F35A"}.fa-arrow-alt-circle-up:before{content:"\F35B"}.fa-arrow-circle-down:before{content:"\F0AB"}.fa-arrow-circle-left:before{content:"\F0A8"}.fa-arrow-circle-right:before{content:"\F0A9"}.fa-arrow-circle-up:before{content:"\F0AA"}.fa-arrow-down:before{content:"\F063"}.fa-arrow-left:before{content:"\F060"}.fa-arrow-right:before{content:"\F061"}.fa-arrow-up:before{content:"\F062"}.fa-arrows-alt:before{content:"\F0B2"}.fa-arrows-alt-h:before{content:"\F337"}.fa-arrows-alt-v:before{content:"\F338"}.fa-artstation:before{content:"\F77A"}.fa-assistive-listening-systems:before{content:"\F2A2"}.fa-asterisk:before{content:"\F069"}.fa-asymmetrik:before{content:"\F372"}.fa-at:before{content:"\F1FA"}.fa-atlas:before{content:"\F558"}.fa-atlassian:before{content:"\F77B"}.fa-atom:before{content:"\F5D2"}.fa-audible:before{content:"\F373"}.fa-audio-description:before{content:"\F29E"}.fa-autoprefixer:before{content:"\F41C"}.fa-avianex:before{content:"\F374"}.fa-aviato:before{content:"\F421"}.fa-award:before{content:"\F559"}.fa-aws:before{content:"\F375"}.fa-baby:before{content:"\F77C"}.fa-baby-carriage:before{content:"\F77D"}.fa-backspace:before{content:"\F55A"}.fa-backward:before{content:"\F04A"}.fa-bacon:before{content:"\F7E5"}.fa-bahai:before{content:"\F666"}.fa-balance-scale:before{content:"\F24E"}.fa-balance-scale-left:before{content:"\F515"}.fa-balance-scale-right:before{content:"\F516"}.fa-ban:before{content:"\F05E"}.fa-band-aid:before{content:"\F462"}.fa-bandcamp:before{content:"\F2D5"}.fa-barcode:before{content:"\F02A"}.fa-bars:before{content:"\F0C9"}.fa-baseball-ball:before{content:"\F433"}.fa-basketball-ball:before{content:"\F434"}.fa-bath:before{content:"\F2CD"}.fa-battery-empty:before{content:"\F244"}.fa-battery-full:before{content:"\F240"}.fa-battery-half:before{content:"\F242"}.fa-battery-quarter:before{content:"\F243"}.fa-battery-three-quarters:before{content:"\F241"}.fa-battle-net:before{content:"\F835"}.fa-bed:before{content:"\F236"}.fa-beer:before{content:"\F0FC"}.fa-behance:before{content:"\F1B4"}.fa-behance-square:before{content:"\F1B5"}.fa-bell:before{content:"\F0F3"}.fa-bell-slash:before{content:"\F1F6"}.fa-bezier-curve:before{content:"\F55B"}.fa-bible:before{content:"\F647"}.fa-bicycle:before{content:"\F206"}.fa-biking:before{content:"\F84A"}.fa-bimobject:before{content:"\F378"}.fa-binoculars:before{content:"\F1E5"}.fa-biohazard:before{content:"\F780"}.fa-birthday-cake:before{content:"\F1FD"}.fa-bitbucket:before{content:"\F171"}.fa-bitcoin:before{content:"\F379"}.fa-bity:before{content:"\F37A"}.fa-black-tie:before{content:"\F27E"}.fa-blackberry:before{content:"\F37B"}.fa-blender:before{content:"\F517"}.fa-blender-phone:before{content:"\F6B6"}.fa-blind:before{content:"\F29D"}.fa-blog:before{content:"\F781"}.fa-blogger:before{content:"\F37C"}.fa-blogger-b:before{content:"\F37D"}.fa-bluetooth:before{content:"\F293"}.fa-bluetooth-b:before{content:"\F294"}.fa-bold:before{content:"\F032"}.fa-bolt:before{content:"\F0E7"}.fa-bomb:before{content:"\F1E2"}.fa-bone:before{content:"\F5D7"}.fa-bong:before{content:"\F55C"}.fa-book:before{content:"\F02D"}.fa-book-dead:before{content:"\F6B7"}.fa-book-medical:before{content:"\F7E6"}.fa-book-open:before{content:"\F518"}.fa-book-reader:before{content:"\F5DA"}.fa-bookmark:before{content:"\F02E"}.fa-bootstrap:before{content:"\F836"}.fa-border-all:before{content:"\F84C"}.fa-border-none:before{content:"\F850"}.fa-border-style:before{content:"\F853"}.fa-bowling-ball:before{content:"\F436"}.fa-box:before{content:"\F466"}.fa-box-open:before{content:"\F49E"}.fa-box-tissue:before{content:"\F95B"}.fa-boxes:before{content:"\F468"}.fa-braille:before{content:"\F2A1"}.fa-brain:before{content:"\F5DC"}.fa-bread-slice:before{content:"\F7EC"}.fa-briefcase:before{content:"\F0B1"}.fa-briefcase-medical:before{content:"\F469"}.fa-broadcast-tower:before{content:"\F519"}.fa-broom:before{content:"\F51A"}.fa-brush:before{content:"\F55D"}.fa-btc:before{content:"\F15A"}.fa-buffer:before{content:"\F837"}.fa-bug:before{content:"\F188"}.fa-building:before{content:"\F1AD"}.fa-bullhorn:before{content:"\F0A1"}.fa-bullseye:before{content:"\F140"}.fa-burn:before{content:"\F46A"}.fa-buromobelexperte:before{content:"\F37F"}.fa-bus:before{content:"\F207"}.fa-bus-alt:before{content:"\F55E"}.fa-business-time:before{content:"\F64A"}.fa-buy-n-large:before{content:"\F8A6"}.fa-buysellads:before{content:"\F20D"}.fa-calculator:before{content:"\F1EC"}.fa-calendar:before{content:"\F133"}.fa-calendar-alt:before{content:"\F073"}.fa-calendar-check:before{content:"\F274"}.fa-calendar-day:before{content:"\F783"}.fa-calendar-minus:before{content:"\F272"}.fa-calendar-plus:before{content:"\F271"}.fa-calendar-times:before{content:"\F273"}.fa-calendar-week:before{content:"\F784"}.fa-camera:before{content:"\F030"}.fa-camera-retro:before{content:"\F083"}.fa-campground:before{content:"\F6BB"}.fa-canadian-maple-leaf:before{content:"\F785"}.fa-candy-cane:before{content:"\F786"}.fa-cannabis:before{content:"\F55F"}.fa-capsules:before{content:"\F46B"}.fa-car:before{content:"\F1B9"}.fa-car-alt:before{content:"\F5DE"}.fa-car-battery:before{content:"\F5DF"}.fa-car-crash:before{content:"\F5E1"}.fa-car-side:before{content:"\F5E4"}.fa-caravan:before{content:"\F8FF"}.fa-caret-down:before{content:"\F0D7"}.fa-caret-left:before{content:"\F0D9"}.fa-caret-right:before{content:"\F0DA"}.fa-caret-square-down:before{content:"\F150"}.fa-caret-square-left:before{content:"\F191"}.fa-caret-square-right:before{content:"\F152"}.fa-caret-square-up:before{content:"\F151"}.fa-caret-up:before{content:"\F0D8"}.fa-carrot:before{content:"\F787"}.fa-cart-arrow-down:before{content:"\F218"}.fa-cart-plus:before{content:"\F217"}.fa-cash-register:before{content:"\F788"}.fa-cat:before{content:"\F6BE"}.fa-cc-amazon-pay:before{content:"\F42D"}.fa-cc-amex:before{content:"\F1F3"}.fa-cc-apple-pay:before{content:"\F416"}.fa-cc-diners-club:before{content:"\F24C"}.fa-cc-discover:before{content:"\F1F2"}.fa-cc-jcb:before{content:"\F24B"}.fa-cc-mastercard:before{content:"\F1F1"}.fa-cc-paypal:before{content:"\F1F4"}.fa-cc-stripe:before{content:"\F1F5"}.fa-cc-visa:before{content:"\F1F0"}.fa-centercode:before{content:"\F380"}.fa-centos:before{content:"\F789"}.fa-certificate:before{content:"\F0A3"}.fa-chair:before{content:"\F6C0"}.fa-chalkboard:before{content:"\F51B"}.fa-chalkboard-teacher:before{content:"\F51C"}.fa-charging-station:before{content:"\F5E7"}.fa-chart-area:before{content:"\F1FE"}.fa-chart-bar:before{content:"\F080"}.fa-chart-line:before{content:"\F201"}.fa-chart-pie:before{content:"\F200"}.fa-check:before{content:"\F00C"}.fa-check-circle:before{content:"\F058"}.fa-check-double:before{content:"\F560"}.fa-check-square:before{content:"\F14A"}.fa-cheese:before{content:"\F7EF"}.fa-chess:before{content:"\F439"}.fa-chess-bishop:before{content:"\F43A"}.fa-chess-board:before{content:"\F43C"}.fa-chess-king:before{content:"\F43F"}.fa-chess-knight:before{content:"\F441"}.fa-chess-pawn:before{content:"\F443"}.fa-chess-queen:before{content:"\F445"}.fa-chess-rook:before{content:"\F447"}.fa-chevron-circle-down:before{content:"\F13A"}.fa-chevron-circle-left:before{content:"\F137"}.fa-chevron-circle-right:before{content:"\F138"}.fa-chevron-circle-up:before{content:"\F139"}.fa-chevron-down:before{content:"\F078"}.fa-chevron-left:before{content:"\F053"}.fa-chevron-right:before{content:"\F054"}.fa-chevron-up:before{content:"\F077"}.fa-child:before{content:"\F1AE"}.fa-chrome:before{content:"\F268"}.fa-chromecast:before{content:"\F838"}.fa-church:before{content:"\F51D"}.fa-circle:before{content:"\F111"}.fa-circle-notch:before{content:"\F1CE"}.fa-city:before{content:"\F64F"}.fa-clinic-medical:before{content:"\F7F2"}.fa-clipboard:before{content:"\F328"}.fa-clipboard-check:before{content:"\F46C"}.fa-clipboard-list:before{content:"\F46D"}.fa-clock:before{content:"\F017"}.fa-clone:before{content:"\F24D"}.fa-closed-captioning:before{content:"\F20A"}.fa-cloud:before{content:"\F0C2"}.fa-cloud-download-alt:before{content:"\F381"}.fa-cloud-meatball:before{content:"\F73B"}.fa-cloud-moon:before{content:"\F6C3"}.fa-cloud-moon-rain:before{content:"\F73C"}.fa-cloud-rain:before{content:"\F73D"}.fa-cloud-showers-heavy:before{content:"\F740"}.fa-cloud-sun:before{content:"\F6C4"}.fa-cloud-sun-rain:before{content:"\F743"}.fa-cloud-upload-alt:before{content:"\F382"}.fa-cloudscale:before{content:"\F383"}.fa-cloudsmith:before{content:"\F384"}.fa-cloudversify:before{content:"\F385"}.fa-cocktail:before{content:"\F561"}.fa-code:before{content:"\F121"}.fa-code-branch:before{content:"\F126"}.fa-codepen:before{content:"\F1CB"}.fa-codiepie:before{content:"\F284"}.fa-coffee:before{content:"\F0F4"}.fa-cog:before{content:"\F013"}.fa-cogs:before{content:"\F085"}.fa-coins:before{content:"\F51E"}.fa-columns:before{content:"\F0DB"}.fa-comment:before{content:"\F075"}.fa-comment-alt:before{content:"\F27A"}.fa-comment-dollar:before{content:"\F651"}.fa-comment-dots:before{content:"\F4AD"}.fa-comment-medical:before{content:"\F7F5"}.fa-comment-slash:before{content:"\F4B3"}.fa-comments:before{content:"\F086"}.fa-comments-dollar:before{content:"\F653"}.fa-compact-disc:before{content:"\F51F"}.fa-compass:before{content:"\F14E"}.fa-compress:before{content:"\F066"}.fa-compress-alt:before{content:"\F422"}.fa-compress-arrows-alt:before{content:"\F78C"}.fa-concierge-bell:before{content:"\F562"}.fa-confluence:before{content:"\F78D"}.fa-connectdevelop:before{content:"\F20E"}.fa-contao:before{content:"\F26D"}.fa-cookie:before{content:"\F563"}.fa-cookie-bite:before{content:"\F564"}.fa-copy:before{content:"\F0C5"}.fa-copyright:before{content:"\F1F9"}.fa-cotton-bureau:before{content:"\F89E"}.fa-couch:before{content:"\F4B8"}.fa-cpanel:before{content:"\F388"}.fa-creative-commons:before{content:"\F25E"}.fa-creative-commons-by:before{content:"\F4E7"}.fa-creative-commons-nc:before{content:"\F4E8"}.fa-creative-commons-nc-eu:before{content:"\F4E9"}.fa-creative-commons-nc-jp:before{content:"\F4EA"}.fa-creative-commons-nd:before{content:"\F4EB"}.fa-creative-commons-pd:before{content:"\F4EC"}.fa-creative-commons-pd-alt:before{content:"\F4ED"}.fa-creative-commons-remix:before{content:"\F4EE"}.fa-creative-commons-sa:before{content:"\F4EF"}.fa-creative-commons-sampling:before{content:"\F4F0"}.fa-creative-commons-sampling-plus:before{content:"\F4F1"}.fa-creative-commons-share:before{content:"\F4F2"}.fa-creative-commons-zero:before{content:"\F4F3"}.fa-credit-card:before{content:"\F09D"}.fa-critical-role:before{content:"\F6C9"}.fa-crop:before{content:"\F125"}.fa-crop-alt:before{content:"\F565"}.fa-cross:before{content:"\F654"}.fa-crosshairs:before{content:"\F05B"}.fa-crow:before{content:"\F520"}.fa-crown:before{content:"\F521"}.fa-crutch:before{content:"\F7F7"}.fa-css3:before{content:"\F13C"}.fa-css3-alt:before{content:"\F38B"}.fa-cube:before{content:"\F1B2"}.fa-cubes:before{content:"\F1B3"}.fa-cut:before{content:"\F0C4"}.fa-cuttlefish:before{content:"\F38C"}.fa-d-and-d:before{content:"\F38D"}.fa-d-and-d-beyond:before{content:"\F6CA"}.fa-dailymotion:before{content:"\F952"}.fa-dashcube:before{content:"\F210"}.fa-database:before{content:"\F1C0"}.fa-deaf:before{content:"\F2A4"}.fa-delicious:before{content:"\F1A5"}.fa-democrat:before{content:"\F747"}.fa-deploydog:before{content:"\F38E"}.fa-deskpro:before{content:"\F38F"}.fa-desktop:before{content:"\F108"}.fa-dev:before{content:"\F6CC"}.fa-deviantart:before{content:"\F1BD"}.fa-dharmachakra:before{content:"\F655"}.fa-dhl:before{content:"\F790"}.fa-diagnoses:before{content:"\F470"}.fa-diaspora:before{content:"\F791"}.fa-dice:before{content:"\F522"}.fa-dice-d20:before{content:"\F6CF"}.fa-dice-d6:before{content:"\F6D1"}.fa-dice-five:before{content:"\F523"}.fa-dice-four:before{content:"\F524"}.fa-dice-one:before{content:"\F525"}.fa-dice-six:before{content:"\F526"}.fa-dice-three:before{content:"\F527"}.fa-dice-two:before{content:"\F528"}.fa-digg:before{content:"\F1A6"}.fa-digital-ocean:before{content:"\F391"}.fa-digital-tachograph:before{content:"\F566"}.fa-directions:before{content:"\F5EB"}.fa-discord:before{content:"\F392"}.fa-discourse:before{content:"\F393"}.fa-disease:before{content:"\F7FA"}.fa-divide:before{content:"\F529"}.fa-dizzy:before{content:"\F567"}.fa-dna:before{content:"\F471"}.fa-dochub:before{content:"\F394"}.fa-docker:before{content:"\F395"}.fa-dog:before{content:"\F6D3"}.fa-dollar-sign:before{content:"\F155"}.fa-dolly:before{content:"\F472"}.fa-dolly-flatbed:before{content:"\F474"}.fa-donate:before{content:"\F4B9"}.fa-door-closed:before{content:"\F52A"}.fa-door-open:before{content:"\F52B"}.fa-dot-circle:before{content:"\F192"}.fa-dove:before{content:"\F4BA"}.fa-download:before{content:"\F019"}.fa-draft2digital:before{content:"\F396"}.fa-drafting-compass:before{content:"\F568"}.fa-dragon:before{content:"\F6D5"}.fa-draw-polygon:before{content:"\F5EE"}.fa-dribbble:before{content:"\F17D"}.fa-dribbble-square:before{content:"\F397"}.fa-dropbox:before{content:"\F16B"}.fa-drum:before{content:"\F569"}.fa-drum-steelpan:before{content:"\F56A"}.fa-drumstick-bite:before{content:"\F6D7"}.fa-drupal:before{content:"\F1A9"}.fa-dumbbell:before{content:"\F44B"}.fa-dumpster:before{content:"\F793"}.fa-dumpster-fire:before{content:"\F794"}.fa-dungeon:before{content:"\F6D9"}.fa-dyalog:before{content:"\F399"}.fa-earlybirds:before{content:"\F39A"}.fa-ebay:before{content:"\F4F4"}.fa-edge:before{content:"\F282"}.fa-edit:before{content:"\F044"}.fa-egg:before{content:"\F7FB"}.fa-eject:before{content:"\F052"}.fa-elementor:before{content:"\F430"}.fa-ellipsis-h:before{content:"\F141"}.fa-ellipsis-v:before{content:"\F142"}.fa-ello:before{content:"\F5F1"}.fa-ember:before{content:"\F423"}.fa-empire:before{content:"\F1D1"}.fa-envelope:before{content:"\F0E0"}.fa-envelope-open:before{content:"\F2B6"}.fa-envelope-open-text:before{content:"\F658"}.fa-envelope-square:before{content:"\F199"}.fa-envira:before{content:"\F299"}.fa-equals:before{content:"\F52C"}.fa-eraser:before{content:"\F12D"}.fa-erlang:before{content:"\F39D"}.fa-ethereum:before{content:"\F42E"}.fa-ethernet:before{content:"\F796"}.fa-etsy:before{content:"\F2D7"}.fa-euro-sign:before{content:"\F153"}.fa-evernote:before{content:"\F839"}.fa-exchange-alt:before{content:"\F362"}.fa-exclamation:before{content:"\F12A"}.fa-exclamation-circle:before{content:"\F06A"}.fa-exclamation-triangle:before{content:"\F071"}.fa-expand:before{content:"\F065"}.fa-expand-alt:before{content:"\F424"}.fa-expand-arrows-alt:before{content:"\F31E"}.fa-expeditedssl:before{content:"\F23E"}.fa-external-link-alt:before{content:"\F35D"}.fa-external-link-square-alt:before{content:"\F360"}.fa-eye:before{content:"\F06E"}.fa-eye-dropper:before{content:"\F1FB"}.fa-eye-slash:before{content:"\F070"}.fa-facebook:before{content:"\F09A"}.fa-facebook-f:before{content:"\F39E"}.fa-facebook-messenger:before{content:"\F39F"}.fa-facebook-square:before{content:"\F082"}.fa-fan:before{content:"\F863"}.fa-fantasy-flight-games:before{content:"\F6DC"}.fa-fast-backward:before{content:"\F049"}.fa-fast-forward:before{content:"\F050"}.fa-faucet:before{content:"\F905"}.fa-fax:before{content:"\F1AC"}.fa-feather:before{content:"\F52D"}.fa-feather-alt:before{content:"\F56B"}.fa-fedex:before{content:"\F797"}.fa-fedora:before{content:"\F798"}.fa-female:before{content:"\F182"}.fa-fighter-jet:before{content:"\F0FB"}.fa-figma:before{content:"\F799"}.fa-file:before{content:"\F15B"}.fa-file-alt:before{content:"\F15C"}.fa-file-archive:before{content:"\F1C6"}.fa-file-audio:before{content:"\F1C7"}.fa-file-code:before{content:"\F1C9"}.fa-file-contract:before{content:"\F56C"}.fa-file-csv:before{content:"\F6DD"}.fa-file-download:before{content:"\F56D"}.fa-file-excel:before{content:"\F1C3"}.fa-file-export:before{content:"\F56E"}.fa-file-image:before{content:"\F1C5"}.fa-file-import:before{content:"\F56F"}.fa-file-invoice:before{content:"\F570"}.fa-file-invoice-dollar:before{content:"\F571"}.fa-file-medical:before{content:"\F477"}.fa-file-medical-alt:before{content:"\F478"}.fa-file-pdf:before{content:"\F1C1"}.fa-file-powerpoint:before{content:"\F1C4"}.fa-file-prescription:before{content:"\F572"}.fa-file-signature:before{content:"\F573"}.fa-file-upload:before{content:"\F574"}.fa-file-video:before{content:"\F1C8"}.fa-file-word:before{content:"\F1C2"}.fa-fill:before{content:"\F575"}.fa-fill-drip:before{content:"\F576"}.fa-film:before{content:"\F008"}.fa-filter:before{content:"\F0B0"}.fa-fingerprint:before{content:"\F577"}.fa-fire:before{content:"\F06D"}.fa-fire-alt:before{content:"\F7E4"}.fa-fire-extinguisher:before{content:"\F134"}.fa-firefox:before{content:"\F269"}.fa-firefox-browser:before{content:"\F907"}.fa-first-aid:before{content:"\F479"}.fa-first-order:before{content:"\F2B0"}.fa-first-order-alt:before{content:"\F50A"}.fa-firstdraft:before{content:"\F3A1"}.fa-fish:before{content:"\F578"}.fa-fist-raised:before{content:"\F6DE"}.fa-flag:before{content:"\F024"}.fa-flag-checkered:before{content:"\F11E"}.fa-flag-usa:before{content:"\F74D"}.fa-flask:before{content:"\F0C3"}.fa-flickr:before{content:"\F16E"}.fa-flipboard:before{content:"\F44D"}.fa-flushed:before{content:"\F579"}.fa-fly:before{content:"\F417"}.fa-folder:before{content:"\F07B"}.fa-folder-minus:before{content:"\F65D"}.fa-folder-open:before{content:"\F07C"}.fa-folder-plus:before{content:"\F65E"}.fa-font:before{content:"\F031"}.fa-font-awesome:before{content:"\F2B4"}.fa-font-awesome-alt:before{content:"\F35C"}.fa-font-awesome-flag:before{content:"\F425"}.fa-font-awesome-logo-full:before{content:"\F4E6"}.fa-fonticons:before{content:"\F280"}.fa-fonticons-fi:before{content:"\F3A2"}.fa-football-ball:before{content:"\F44E"}.fa-fort-awesome:before{content:"\F286"}.fa-fort-awesome-alt:before{content:"\F3A3"}.fa-forumbee:before{content:"\F211"}.fa-forward:before{content:"\F04E"}.fa-foursquare:before{content:"\F180"}.fa-free-code-camp:before{content:"\F2C5"}.fa-freebsd:before{content:"\F3A4"}.fa-frog:before{content:"\F52E"}.fa-frown:before{content:"\F119"}.fa-frown-open:before{content:"\F57A"}.fa-fulcrum:before{content:"\F50B"}.fa-funnel-dollar:before{content:"\F662"}.fa-futbol:before{content:"\F1E3"}.fa-galactic-republic:before{content:"\F50C"}.fa-galactic-senate:before{content:"\F50D"}.fa-gamepad:before{content:"\F11B"}.fa-gas-pump:before{content:"\F52F"}.fa-gavel:before{content:"\F0E3"}.fa-gem:before{content:"\F3A5"}.fa-genderless:before{content:"\F22D"}.fa-get-pocket:before{content:"\F265"}.fa-gg:before{content:"\F260"}.fa-gg-circle:before{content:"\F261"}.fa-ghost:before{content:"\F6E2"}.fa-gift:before{content:"\F06B"}.fa-gifts:before{content:"\F79C"}.fa-git:before{content:"\F1D3"}.fa-git-alt:before{content:"\F841"}.fa-git-square:before{content:"\F1D2"}.fa-github:before{content:"\F09B"}.fa-github-alt:before{content:"\F113"}.fa-github-square:before{content:"\F092"}.fa-gitkraken:before{content:"\F3A6"}.fa-gitlab:before{content:"\F296"}.fa-gitter:before{content:"\F426"}.fa-glass-cheers:before{content:"\F79F"}.fa-glass-martini:before{content:"\F000"}.fa-glass-martini-alt:before{content:"\F57B"}.fa-glass-whiskey:before{content:"\F7A0"}.fa-glasses:before{content:"\F530"}.fa-glide:before{content:"\F2A5"}.fa-glide-g:before{content:"\F2A6"}.fa-globe:before{content:"\F0AC"}.fa-globe-africa:before{content:"\F57C"}.fa-globe-americas:before{content:"\F57D"}.fa-globe-asia:before{content:"\F57E"}.fa-globe-europe:before{content:"\F7A2"}.fa-gofore:before{content:"\F3A7"}.fa-golf-ball:before{content:"\F450"}.fa-goodreads:before{content:"\F3A8"}.fa-goodreads-g:before{content:"\F3A9"}.fa-google:before{content:"\F1A0"}.fa-google-drive:before{content:"\F3AA"}.fa-google-play:before{content:"\F3AB"}.fa-google-plus:before{content:"\F2B3"}.fa-google-plus-g:before{content:"\F0D5"}.fa-google-plus-square:before{content:"\F0D4"}.fa-google-wallet:before{content:"\F1EE"}.fa-gopuram:before{content:"\F664"}.fa-graduation-cap:before{content:"\F19D"}.fa-gratipay:before{content:"\F184"}.fa-grav:before{content:"\F2D6"}.fa-greater-than:before{content:"\F531"}.fa-greater-than-equal:before{content:"\F532"}.fa-grimace:before{content:"\F57F"}.fa-grin:before{content:"\F580"}.fa-grin-alt:before{content:"\F581"}.fa-grin-beam:before{content:"\F582"}.fa-grin-beam-sweat:before{content:"\F583"}.fa-grin-hearts:before{content:"\F584"}.fa-grin-squint:before{content:"\F585"}.fa-grin-squint-tears:before{content:"\F586"}.fa-grin-stars:before{content:"\F587"}.fa-grin-tears:before{content:"\F588"}.fa-grin-tongue:before{content:"\F589"}.fa-grin-tongue-squint:before{content:"\F58A"}.fa-grin-tongue-wink:before{content:"\F58B"}.fa-grin-wink:before{content:"\F58C"}.fa-grip-horizontal:before{content:"\F58D"}.fa-grip-lines:before{content:"\F7A4"}.fa-grip-lines-vertical:before{content:"\F7A5"}.fa-grip-vertical:before{content:"\F58E"}.fa-gripfire:before{content:"\F3AC"}.fa-grunt:before{content:"\F3AD"}.fa-guitar:before{content:"\F7A6"}.fa-gulp:before{content:"\F3AE"}.fa-h-square:before{content:"\F0FD"}.fa-hacker-news:before{content:"\F1D4"}.fa-hacker-news-square:before{content:"\F3AF"}.fa-hackerrank:before{content:"\F5F7"}.fa-hamburger:before{content:"\F805"}.fa-hammer:before{content:"\F6E3"}.fa-hamsa:before{content:"\F665"}.fa-hand-holding:before{content:"\F4BD"}.fa-hand-holding-heart:before{content:"\F4BE"}.fa-hand-holding-medical:before{content:"\F95C"}.fa-hand-holding-usd:before{content:"\F4C0"}.fa-hand-holding-water:before{content:"\F4C1"}.fa-hand-lizard:before{content:"\F258"}.fa-hand-middle-finger:before{content:"\F806"}.fa-hand-paper:before{content:"\F256"}.fa-hand-peace:before{content:"\F25B"}.fa-hand-point-down:before{content:"\F0A7"}.fa-hand-point-left:before{content:"\F0A5"}.fa-hand-point-right:before{content:"\F0A4"}.fa-hand-point-up:before{content:"\F0A6"}.fa-hand-pointer:before{content:"\F25A"}.fa-hand-rock:before{content:"\F255"}.fa-hand-scissors:before{content:"\F257"}.fa-hand-sparkles:before{content:"\F95D"}.fa-hand-spock:before{content:"\F259"}.fa-hands:before{content:"\F4C2"}.fa-hands-helping:before{content:"\F4C4"}.fa-hands-wash:before{content:"\F95E"}.fa-handshake:before{content:"\F2B5"}.fa-handshake-alt-slash:before{content:"\F95F"}.fa-handshake-slash:before{content:"\F960"}.fa-hanukiah:before{content:"\F6E6"}.fa-hard-hat:before{content:"\F807"}.fa-hashtag:before{content:"\F292"}.fa-hat-cowboy:before{content:"\F8C0"}.fa-hat-cowboy-side:before{content:"\F8C1"}.fa-hat-wizard:before{content:"\F6E8"}.fa-hdd:before{content:"\F0A0"}.fa-head-side-cough:before{content:"\F961"}.fa-head-side-cough-slash:before{content:"\F962"}.fa-head-side-mask:before{content:"\F963"}.fa-head-side-virus:before{content:"\F964"}.fa-heading:before{content:"\F1DC"}.fa-headphones:before{content:"\F025"}.fa-headphones-alt:before{content:"\F58F"}.fa-headset:before{content:"\F590"}.fa-heart:before{content:"\F004"}.fa-heart-broken:before{content:"\F7A9"}.fa-heartbeat:before{content:"\F21E"}.fa-helicopter:before{content:"\F533"}.fa-highlighter:before{content:"\F591"}.fa-hiking:before{content:"\F6EC"}.fa-hippo:before{content:"\F6ED"}.fa-hips:before{content:"\F452"}.fa-hire-a-helper:before{content:"\F3B0"}.fa-history:before{content:"\F1DA"}.fa-hockey-puck:before{content:"\F453"}.fa-holly-berry:before{content:"\F7AA"}.fa-home:before{content:"\F015"}.fa-hooli:before{content:"\F427"}.fa-hornbill:before{content:"\F592"}.fa-horse:before{content:"\F6F0"}.fa-horse-head:before{content:"\F7AB"}.fa-hospital:before{content:"\F0F8"}.fa-hospital-alt:before{content:"\F47D"}.fa-hospital-symbol:before{content:"\F47E"}.fa-hospital-user:before{content:"\F80D"}.fa-hot-tub:before{content:"\F593"}.fa-hotdog:before{content:"\F80F"}.fa-hotel:before{content:"\F594"}.fa-hotjar:before{content:"\F3B1"}.fa-hourglass:before{content:"\F254"}.fa-hourglass-end:before{content:"\F253"}.fa-hourglass-half:before{content:"\F252"}.fa-hourglass-start:before{content:"\F251"}.fa-house-damage:before{content:"\F6F1"}.fa-house-user:before{content:"\F965"}.fa-houzz:before{content:"\F27C"}.fa-hryvnia:before{content:"\F6F2"}.fa-html5:before{content:"\F13B"}.fa-hubspot:before{content:"\F3B2"}.fa-i-cursor:before{content:"\F246"}.fa-ice-cream:before{content:"\F810"}.fa-icicles:before{content:"\F7AD"}.fa-icons:before{content:"\F86D"}.fa-id-badge:before{content:"\F2C1"}.fa-id-card:before{content:"\F2C2"}.fa-id-card-alt:before{content:"\F47F"}.fa-ideal:before{content:"\F913"}.fa-igloo:before{content:"\F7AE"}.fa-image:before{content:"\F03E"}.fa-images:before{content:"\F302"}.fa-imdb:before{content:"\F2D8"}.fa-inbox:before{content:"\F01C"}.fa-indent:before{content:"\F03C"}.fa-industry:before{content:"\F275"}.fa-infinity:before{content:"\F534"}.fa-info:before{content:"\F129"}.fa-info-circle:before{content:"\F05A"}.fa-instagram:before{content:"\F16D"}.fa-instagram-square:before{content:"\F955"}.fa-intercom:before{content:"\F7AF"}.fa-internet-explorer:before{content:"\F26B"}.fa-invision:before{content:"\F7B0"}.fa-ioxhost:before{content:"\F208"}.fa-italic:before{content:"\F033"}.fa-itch-io:before{content:"\F83A"}.fa-itunes:before{content:"\F3B4"}.fa-itunes-note:before{content:"\F3B5"}.fa-java:before{content:"\F4E4"}.fa-jedi:before{content:"\F669"}.fa-jedi-order:before{content:"\F50E"}.fa-jenkins:before{content:"\F3B6"}.fa-jira:before{content:"\F7B1"}.fa-joget:before{content:"\F3B7"}.fa-joint:before{content:"\F595"}.fa-joomla:before{content:"\F1AA"}.fa-journal-whills:before{content:"\F66A"}.fa-js:before{content:"\F3B8"}.fa-js-square:before{content:"\F3B9"}.fa-jsfiddle:before{content:"\F1CC"}.fa-kaaba:before{content:"\F66B"}.fa-kaggle:before{content:"\F5FA"}.fa-key:before{content:"\F084"}.fa-keybase:before{content:"\F4F5"}.fa-keyboard:before{content:"\F11C"}.fa-keycdn:before{content:"\F3BA"}.fa-khanda:before{content:"\F66D"}.fa-kickstarter:before{content:"\F3BB"}.fa-kickstarter-k:before{content:"\F3BC"}.fa-kiss:before{content:"\F596"}.fa-kiss-beam:before{content:"\F597"}.fa-kiss-wink-heart:before{content:"\F598"}.fa-kiwi-bird:before{content:"\F535"}.fa-korvue:before{content:"\F42F"}.fa-landmark:before{content:"\F66F"}.fa-language:before{content:"\F1AB"}.fa-laptop:before{content:"\F109"}.fa-laptop-code:before{content:"\F5FC"}.fa-laptop-house:before{content:"\F966"}.fa-laptop-medical:before{content:"\F812"}.fa-laravel:before{content:"\F3BD"}.fa-lastfm:before{content:"\F202"}.fa-lastfm-square:before{content:"\F203"}.fa-laugh:before{content:"\F599"}.fa-laugh-beam:before{content:"\F59A"}.fa-laugh-squint:before{content:"\F59B"}.fa-laugh-wink:before{content:"\F59C"}.fa-layer-group:before{content:"\F5FD"}.fa-leaf:before{content:"\F06C"}.fa-leanpub:before{content:"\F212"}.fa-lemon:before{content:"\F094"}.fa-less:before{content:"\F41D"}.fa-less-than:before{content:"\F536"}.fa-less-than-equal:before{content:"\F537"}.fa-level-down-alt:before{content:"\F3BE"}.fa-level-up-alt:before{content:"\F3BF"}.fa-life-ring:before{content:"\F1CD"}.fa-lightbulb:before{content:"\F0EB"}.fa-line:before{content:"\F3C0"}.fa-link:before{content:"\F0C1"}.fa-linkedin:before{content:"\F08C"}.fa-linkedin-in:before{content:"\F0E1"}.fa-linode:before{content:"\F2B8"}.fa-linux:before{content:"\F17C"}.fa-lira-sign:before{content:"\F195"}.fa-list:before{content:"\F03A"}.fa-list-alt:before{content:"\F022"}.fa-list-ol:before{content:"\F0CB"}.fa-list-ul:before{content:"\F0CA"}.fa-location-arrow:before{content:"\F124"}.fa-lock:before{content:"\F023"}.fa-lock-open:before{content:"\F3C1"}.fa-long-arrow-alt-down:before{content:"\F309"}.fa-long-arrow-alt-left:before{content:"\F30A"}.fa-long-arrow-alt-right:before{content:"\F30B"}.fa-long-arrow-alt-up:before{content:"\F30C"}.fa-low-vision:before{content:"\F2A8"}.fa-luggage-cart:before{content:"\F59D"}.fa-lungs:before{content:"\F604"}.fa-lungs-virus:before{content:"\F967"}.fa-lyft:before{content:"\F3C3"}.fa-magento:before{content:"\F3C4"}.fa-magic:before{content:"\F0D0"}.fa-magnet:before{content:"\F076"}.fa-mail-bulk:before{content:"\F674"}.fa-mailchimp:before{content:"\F59E"}.fa-male:before{content:"\F183"}.fa-mandalorian:before{content:"\F50F"}.fa-map:before{content:"\F279"}.fa-map-marked:before{content:"\F59F"}.fa-map-marked-alt:before{content:"\F5A0"}.fa-map-marker:before{content:"\F041"}.fa-map-marker-alt:before{content:"\F3C5"}.fa-map-pin:before{content:"\F276"}.fa-map-signs:before{content:"\F277"}.fa-markdown:before{content:"\F60F"}.fa-marker:before{content:"\F5A1"}.fa-mars:before{content:"\F222"}.fa-mars-double:before{content:"\F227"}.fa-mars-stroke:before{content:"\F229"}.fa-mars-stroke-h:before{content:"\F22B"}.fa-mars-stroke-v:before{content:"\F22A"}.fa-mask:before{content:"\F6FA"}.fa-mastodon:before{content:"\F4F6"}.fa-maxcdn:before{content:"\F136"}.fa-mdb:before{content:"\F8CA"}.fa-medal:before{content:"\F5A2"}.fa-medapps:before{content:"\F3C6"}.fa-medium:before{content:"\F23A"}.fa-medium-m:before{content:"\F3C7"}.fa-medkit:before{content:"\F0FA"}.fa-medrt:before{content:"\F3C8"}.fa-meetup:before{content:"\F2E0"}.fa-megaport:before{content:"\F5A3"}.fa-meh:before{content:"\F11A"}.fa-meh-blank:before{content:"\F5A4"}.fa-meh-rolling-eyes:before{content:"\F5A5"}.fa-memory:before{content:"\F538"}.fa-mendeley:before{content:"\F7B3"}.fa-menorah:before{content:"\F676"}.fa-mercury:before{content:"\F223"}.fa-meteor:before{content:"\F753"}.fa-microblog:before{content:"\F91A"}.fa-microchip:before{content:"\F2DB"}.fa-microphone:before{content:"\F130"}.fa-microphone-alt:before{content:"\F3C9"}.fa-microphone-alt-slash:before{content:"\F539"}.fa-microphone-slash:before{content:"\F131"}.fa-microscope:before{content:"\F610"}.fa-microsoft:before{content:"\F3CA"}.fa-minus:before{content:"\F068"}.fa-minus-circle:before{content:"\F056"}.fa-minus-square:before{content:"\F146"}.fa-mitten:before{content:"\F7B5"}.fa-mix:before{content:"\F3CB"}.fa-mixcloud:before{content:"\F289"}.fa-mixer:before{content:"\F956"}.fa-mizuni:before{content:"\F3CC"}.fa-mobile:before{content:"\F10B"}.fa-mobile-alt:before{content:"\F3CD"}.fa-modx:before{content:"\F285"}.fa-monero:before{content:"\F3D0"}.fa-money-bill:before{content:"\F0D6"}.fa-money-bill-alt:before{content:"\F3D1"}.fa-money-bill-wave:before{content:"\F53A"}.fa-money-bill-wave-alt:before{content:"\F53B"}.fa-money-check:before{content:"\F53C"}.fa-money-check-alt:before{content:"\F53D"}.fa-monument:before{content:"\F5A6"}.fa-moon:before{content:"\F186"}.fa-mortar-pestle:before{content:"\F5A7"}.fa-mosque:before{content:"\F678"}.fa-motorcycle:before{content:"\F21C"}.fa-mountain:before{content:"\F6FC"}.fa-mouse:before{content:"\F8CC"}.fa-mouse-pointer:before{content:"\F245"}.fa-mug-hot:before{content:"\F7B6"}.fa-music:before{content:"\F001"}.fa-napster:before{content:"\F3D2"}.fa-neos:before{content:"\F612"}.fa-network-wired:before{content:"\F6FF"}.fa-neuter:before{content:"\F22C"}.fa-newspaper:before{content:"\F1EA"}.fa-nimblr:before{content:"\F5A8"}.fa-node:before{content:"\F419"}.fa-node-js:before{content:"\F3D3"}.fa-not-equal:before{content:"\F53E"}.fa-notes-medical:before{content:"\F481"}.fa-npm:before{content:"\F3D4"}.fa-ns8:before{content:"\F3D5"}.fa-nutritionix:before{content:"\F3D6"}.fa-object-group:before{content:"\F247"}.fa-object-ungroup:before{content:"\F248"}.fa-odnoklassniki:before{content:"\F263"}.fa-odnoklassniki-square:before{content:"\F264"}.fa-oil-can:before{content:"\F613"}.fa-old-republic:before{content:"\F510"}.fa-om:before{content:"\F679"}.fa-opencart:before{content:"\F23D"}.fa-openid:before{content:"\F19B"}.fa-opera:before{content:"\F26A"}.fa-optin-monster:before{content:"\F23C"}.fa-orcid:before{content:"\F8D2"}.fa-osi:before{content:"\F41A"}.fa-otter:before{content:"\F700"}.fa-outdent:before{content:"\F03B"}.fa-page4:before{content:"\F3D7"}.fa-pagelines:before{content:"\F18C"}.fa-pager:before{content:"\F815"}.fa-paint-brush:before{content:"\F1FC"}.fa-paint-roller:before{content:"\F5AA"}.fa-palette:before{content:"\F53F"}.fa-palfed:before{content:"\F3D8"}.fa-pallet:before{content:"\F482"}.fa-paper-plane:before{content:"\F1D8"}.fa-paperclip:before{content:"\F0C6"}.fa-parachute-box:before{content:"\F4CD"}.fa-paragraph:before{content:"\F1DD"}.fa-parking:before{content:"\F540"}.fa-passport:before{content:"\F5AB"}.fa-pastafarianism:before{content:"\F67B"}.fa-paste:before{content:"\F0EA"}.fa-patreon:before{content:"\F3D9"}.fa-pause:before{content:"\F04C"}.fa-pause-circle:before{content:"\F28B"}.fa-paw:before{content:"\F1B0"}.fa-paypal:before{content:"\F1ED"}.fa-peace:before{content:"\F67C"}.fa-pen:before{content:"\F304"}.fa-pen-alt:before{content:"\F305"}.fa-pen-fancy:before{content:"\F5AC"}.fa-pen-nib:before{content:"\F5AD"}.fa-pen-square:before{content:"\F14B"}.fa-pencil-alt:before{content:"\F303"}.fa-pencil-ruler:before{content:"\F5AE"}.fa-penny-arcade:before{content:"\F704"}.fa-people-arrows:before{content:"\F968"}.fa-people-carry:before{content:"\F4CE"}.fa-pepper-hot:before{content:"\F816"}.fa-percent:before{content:"\F295"}.fa-percentage:before{content:"\F541"}.fa-periscope:before{content:"\F3DA"}.fa-person-booth:before{content:"\F756"}.fa-phabricator:before{content:"\F3DB"}.fa-phoenix-framework:before{content:"\F3DC"}.fa-phoenix-squadron:before{content:"\F511"}.fa-phone:before{content:"\F095"}.fa-phone-alt:before{content:"\F879"}.fa-phone-slash:before{content:"\F3DD"}.fa-phone-square:before{content:"\F098"}.fa-phone-square-alt:before{content:"\F87B"}.fa-phone-volume:before{content:"\F2A0"}.fa-photo-video:before{content:"\F87C"}.fa-php:before{content:"\F457"}.fa-pied-piper:before{content:"\F2AE"}.fa-pied-piper-alt:before{content:"\F1A8"}.fa-pied-piper-hat:before{content:"\F4E5"}.fa-pied-piper-pp:before{content:"\F1A7"}.fa-pied-piper-square:before{content:"\F91E"}.fa-piggy-bank:before{content:"\F4D3"}.fa-pills:before{content:"\F484"}.fa-pinterest:before{content:"\F0D2"}.fa-pinterest-p:before{content:"\F231"}.fa-pinterest-square:before{content:"\F0D3"}.fa-pizza-slice:before{content:"\F818"}.fa-place-of-worship:before{content:"\F67F"}.fa-plane:before{content:"\F072"}.fa-plane-arrival:before{content:"\F5AF"}.fa-plane-departure:before{content:"\F5B0"}.fa-plane-slash:before{content:"\F969"}.fa-play:before{content:"\F04B"}.fa-play-circle:before{content:"\F144"}.fa-playstation:before{content:"\F3DF"}.fa-plug:before{content:"\F1E6"}.fa-plus:before{content:"\F067"}.fa-plus-circle:before{content:"\F055"}.fa-plus-square:before{content:"\F0FE"}.fa-podcast:before{content:"\F2CE"}.fa-poll:before{content:"\F681"}.fa-poll-h:before{content:"\F682"}.fa-poo:before{content:"\F2FE"}.fa-poo-storm:before{content:"\F75A"}.fa-poop:before{content:"\F619"}.fa-portrait:before{content:"\F3E0"}.fa-pound-sign:before{content:"\F154"}.fa-power-off:before{content:"\F011"}.fa-pray:before{content:"\F683"}.fa-praying-hands:before{content:"\F684"}.fa-prescription:before{content:"\F5B1"}.fa-prescription-bottle:before{content:"\F485"}.fa-prescription-bottle-alt:before{content:"\F486"}.fa-print:before{content:"\F02F"}.fa-procedures:before{content:"\F487"}.fa-product-hunt:before{content:"\F288"}.fa-project-diagram:before{content:"\F542"}.fa-pump-medical:before{content:"\F96A"}.fa-pump-soap:before{content:"\F96B"}.fa-pushed:before{content:"\F3E1"}.fa-puzzle-piece:before{content:"\F12E"}.fa-python:before{content:"\F3E2"}.fa-qq:before{content:"\F1D6"}.fa-qrcode:before{content:"\F029"}.fa-question:before{content:"\F128"}.fa-question-circle:before{content:"\F059"}.fa-quidditch:before{content:"\F458"}.fa-quinscape:before{content:"\F459"}.fa-quora:before{content:"\F2C4"}.fa-quote-left:before{content:"\F10D"}.fa-quote-right:before{content:"\F10E"}.fa-quran:before{content:"\F687"}.fa-r-project:before{content:"\F4F7"}.fa-radiation:before{content:"\F7B9"}.fa-radiation-alt:before{content:"\F7BA"}.fa-rainbow:before{content:"\F75B"}.fa-random:before{content:"\F074"}.fa-raspberry-pi:before{content:"\F7BB"}.fa-ravelry:before{content:"\F2D9"}.fa-react:before{content:"\F41B"}.fa-reacteurope:before{content:"\F75D"}.fa-readme:before{content:"\F4D5"}.fa-rebel:before{content:"\F1D0"}.fa-receipt:before{content:"\F543"}.fa-record-vinyl:before{content:"\F8D9"}.fa-recycle:before{content:"\F1B8"}.fa-red-river:before{content:"\F3E3"}.fa-reddit:before{content:"\F1A1"}.fa-reddit-alien:before{content:"\F281"}.fa-reddit-square:before{content:"\F1A2"}.fa-redhat:before{content:"\F7BC"}.fa-redo:before{content:"\F01E"}.fa-redo-alt:before{content:"\F2F9"}.fa-registered:before{content:"\F25D"}.fa-remove-format:before{content:"\F87D"}.fa-renren:before{content:"\F18B"}.fa-reply:before{content:"\F3E5"}.fa-reply-all:before{content:"\F122"}.fa-replyd:before{content:"\F3E6"}.fa-republican:before{content:"\F75E"}.fa-researchgate:before{content:"\F4F8"}.fa-resolving:before{content:"\F3E7"}.fa-restroom:before{content:"\F7BD"}.fa-retweet:before{content:"\F079"}.fa-rev:before{content:"\F5B2"}.fa-ribbon:before{content:"\F4D6"}.fa-ring:before{content:"\F70B"}.fa-road:before{content:"\F018"}.fa-robot:before{content:"\F544"}.fa-rocket:before{content:"\F135"}.fa-rocketchat:before{content:"\F3E8"}.fa-rockrms:before{content:"\F3E9"}.fa-route:before{content:"\F4D7"}.fa-rss:before{content:"\F09E"}.fa-rss-square:before{content:"\F143"}.fa-ruble-sign:before{content:"\F158"}.fa-ruler:before{content:"\F545"}.fa-ruler-combined:before{content:"\F546"}.fa-ruler-horizontal:before{content:"\F547"}.fa-ruler-vertical:before{content:"\F548"}.fa-running:before{content:"\F70C"}.fa-rupee-sign:before{content:"\F156"}.fa-sad-cry:before{content:"\F5B3"}.fa-sad-tear:before{content:"\F5B4"}.fa-safari:before{content:"\F267"}.fa-salesforce:before{content:"\F83B"}.fa-sass:before{content:"\F41E"}.fa-satellite:before{content:"\F7BF"}.fa-satellite-dish:before{content:"\F7C0"}.fa-save:before{content:"\F0C7"}.fa-schlix:before{content:"\F3EA"}.fa-school:before{content:"\F549"}.fa-screwdriver:before{content:"\F54A"}.fa-scribd:before{content:"\F28A"}.fa-scroll:before{content:"\F70E"}.fa-sd-card:before{content:"\F7C2"}.fa-search:before{content:"\F002"}.fa-search-dollar:before{content:"\F688"}.fa-search-location:before{content:"\F689"}.fa-search-minus:before{content:"\F010"}.fa-search-plus:before{content:"\F00E"}.fa-searchengin:before{content:"\F3EB"}.fa-seedling:before{content:"\F4D8"}.fa-sellcast:before{content:"\F2DA"}.fa-sellsy:before{content:"\F213"}.fa-server:before{content:"\F233"}.fa-servicestack:before{content:"\F3EC"}.fa-shapes:before{content:"\F61F"}.fa-share:before{content:"\F064"}.fa-share-alt:before{content:"\F1E0"}.fa-share-alt-square:before{content:"\F1E1"}.fa-share-square:before{content:"\F14D"}.fa-shekel-sign:before{content:"\F20B"}.fa-shield-alt:before{content:"\F3ED"}.fa-shield-virus:before{content:"\F96C"}.fa-ship:before{content:"\F21A"}.fa-shipping-fast:before{content:"\F48B"}.fa-shirtsinbulk:before{content:"\F214"}.fa-shoe-prints:before{content:"\F54B"}.fa-shopify:before{content:"\F957"}.fa-shopping-bag:before{content:"\F290"}.fa-shopping-basket:before{content:"\F291"}.fa-shopping-cart:before{content:"\F07A"}.fa-shopware:before{content:"\F5B5"}.fa-shower:before{content:"\F2CC"}.fa-shuttle-van:before{content:"\F5B6"}.fa-sign:before{content:"\F4D9"}.fa-sign-in-alt:before{content:"\F2F6"}.fa-sign-language:before{content:"\F2A7"}.fa-sign-out-alt:before{content:"\F2F5"}.fa-signal:before{content:"\F012"}.fa-signature:before{content:"\F5B7"}.fa-sim-card:before{content:"\F7C4"}.fa-simplybuilt:before{content:"\F215"}.fa-sistrix:before{content:"\F3EE"}.fa-sitemap:before{content:"\F0E8"}.fa-sith:before{content:"\F512"}.fa-skating:before{content:"\F7C5"}.fa-sketch:before{content:"\F7C6"}.fa-skiing:before{content:"\F7C9"}.fa-skiing-nordic:before{content:"\F7CA"}.fa-skull:before{content:"\F54C"}.fa-skull-crossbones:before{content:"\F714"}.fa-skyatlas:before{content:"\F216"}.fa-skype:before{content:"\F17E"}.fa-slack:before{content:"\F198"}.fa-slack-hash:before{content:"\F3EF"}.fa-slash:before{content:"\F715"}.fa-sleigh:before{content:"\F7CC"}.fa-sliders-h:before{content:"\F1DE"}.fa-slideshare:before{content:"\F1E7"}.fa-smile:before{content:"\F118"}.fa-smile-beam:before{content:"\F5B8"}.fa-smile-wink:before{content:"\F4DA"}.fa-smog:before{content:"\F75F"}.fa-smoking:before{content:"\F48D"}.fa-smoking-ban:before{content:"\F54D"}.fa-sms:before{content:"\F7CD"}.fa-snapchat:before{content:"\F2AB"}.fa-snapchat-ghost:before{content:"\F2AC"}.fa-snapchat-square:before{content:"\F2AD"}.fa-snowboarding:before{content:"\F7CE"}.fa-snowflake:before{content:"\F2DC"}.fa-snowman:before{content:"\F7D0"}.fa-snowplow:before{content:"\F7D2"}.fa-soap:before{content:"\F96E"}.fa-socks:before{content:"\F696"}.fa-solar-panel:before{content:"\F5BA"}.fa-sort:before{content:"\F0DC"}.fa-sort-alpha-down:before{content:"\F15D"}.fa-sort-alpha-down-alt:before{content:"\F881"}.fa-sort-alpha-up:before{content:"\F15E"}.fa-sort-alpha-up-alt:before{content:"\F882"}.fa-sort-amount-down:before{content:"\F160"}.fa-sort-amount-down-alt:before{content:"\F884"}.fa-sort-amount-up:before{content:"\F161"}.fa-sort-amount-up-alt:before{content:"\F885"}.fa-sort-down:before{content:"\F0DD"}.fa-sort-numeric-down:before{content:"\F162"}.fa-sort-numeric-down-alt:before{content:"\F886"}.fa-sort-numeric-up:before{content:"\F163"}.fa-sort-numeric-up-alt:before{content:"\F887"}.fa-sort-up:before{content:"\F0DE"}.fa-soundcloud:before{content:"\F1BE"}.fa-sourcetree:before{content:"\F7D3"}.fa-spa:before{content:"\F5BB"}.fa-space-shuttle:before{content:"\F197"}.fa-speakap:before{content:"\F3F3"}.fa-speaker-deck:before{content:"\F83C"}.fa-spell-check:before{content:"\F891"}.fa-spider:before{content:"\F717"}.fa-spinner:before{content:"\F110"}.fa-splotch:before{content:"\F5BC"}.fa-spotify:before{content:"\F1BC"}.fa-spray-can:before{content:"\F5BD"}.fa-square:before{content:"\F0C8"}.fa-square-full:before{content:"\F45C"}.fa-square-root-alt:before{content:"\F698"}.fa-squarespace:before{content:"\F5BE"}.fa-stack-exchange:before{content:"\F18D"}.fa-stack-overflow:before{content:"\F16C"}.fa-stackpath:before{content:"\F842"}.fa-stamp:before{content:"\F5BF"}.fa-star:before{content:"\F005"}.fa-star-and-crescent:before{content:"\F699"}.fa-star-half:before{content:"\F089"}.fa-star-half-alt:before{content:"\F5C0"}.fa-star-of-david:before{content:"\F69A"}.fa-star-of-life:before{content:"\F621"}.fa-staylinked:before{content:"\F3F5"}.fa-steam:before{content:"\F1B6"}.fa-steam-square:before{content:"\F1B7"}.fa-steam-symbol:before{content:"\F3F6"}.fa-step-backward:before{content:"\F048"}.fa-step-forward:before{content:"\F051"}.fa-stethoscope:before{content:"\F0F1"}.fa-sticker-mule:before{content:"\F3F7"}.fa-sticky-note:before{content:"\F249"}.fa-stop:before{content:"\F04D"}.fa-stop-circle:before{content:"\F28D"}.fa-stopwatch:before{content:"\F2F2"}.fa-stopwatch-20:before{content:"\F96F"}.fa-store:before{content:"\F54E"}.fa-store-alt:before{content:"\F54F"}.fa-store-alt-slash:before{content:"\F970"}.fa-store-slash:before{content:"\F971"}.fa-strava:before{content:"\F428"}.fa-stream:before{content:"\F550"}.fa-street-view:before{content:"\F21D"}.fa-strikethrough:before{content:"\F0CC"}.fa-stripe:before{content:"\F429"}.fa-stripe-s:before{content:"\F42A"}.fa-stroopwafel:before{content:"\F551"}.fa-studiovinari:before{content:"\F3F8"}.fa-stumbleupon:before{content:"\F1A4"}.fa-stumbleupon-circle:before{content:"\F1A3"}.fa-subscript:before{content:"\F12C"}.fa-subway:before{content:"\F239"}.fa-suitcase:before{content:"\F0F2"}.fa-suitcase-rolling:before{content:"\F5C1"}.fa-sun:before{content:"\F185"}.fa-superpowers:before{content:"\F2DD"}.fa-superscript:before{content:"\F12B"}.fa-supple:before{content:"\F3F9"}.fa-surprise:before{content:"\F5C2"}.fa-suse:before{content:"\F7D6"}.fa-swatchbook:before{content:"\F5C3"}.fa-swift:before{content:"\F8E1"}.fa-swimmer:before{content:"\F5C4"}.fa-swimming-pool:before{content:"\F5C5"}.fa-symfony:before{content:"\F83D"}.fa-synagogue:before{content:"\F69B"}.fa-sync:before{content:"\F021"}.fa-sync-alt:before{content:"\F2F1"}.fa-syringe:before{content:"\F48E"}.fa-table:before{content:"\F0CE"}.fa-table-tennis:before{content:"\F45D"}.fa-tablet:before{content:"\F10A"}.fa-tablet-alt:before{content:"\F3FA"}.fa-tablets:before{content:"\F490"}.fa-tachometer-alt:before{content:"\F3FD"}.fa-tag:before{content:"\F02B"}.fa-tags:before{content:"\F02C"}.fa-tape:before{content:"\F4DB"}.fa-tasks:before{content:"\F0AE"}.fa-taxi:before{content:"\F1BA"}.fa-teamspeak:before{content:"\F4F9"}.fa-teeth:before{content:"\F62E"}.fa-teeth-open:before{content:"\F62F"}.fa-telegram:before{content:"\F2C6"}.fa-telegram-plane:before{content:"\F3FE"}.fa-temperature-high:before{content:"\F769"}.fa-temperature-low:before{content:"\F76B"}.fa-tencent-weibo:before{content:"\F1D5"}.fa-tenge:before{content:"\F7D7"}.fa-terminal:before{content:"\F120"}.fa-text-height:before{content:"\F034"}.fa-text-width:before{content:"\F035"}.fa-th:before{content:"\F00A"}.fa-th-large:before{content:"\F009"}.fa-th-list:before{content:"\F00B"}.fa-the-red-yeti:before{content:"\F69D"}.fa-theater-masks:before{content:"\F630"}.fa-themeco:before{content:"\F5C6"}.fa-themeisle:before{content:"\F2B2"}.fa-thermometer:before{content:"\F491"}.fa-thermometer-empty:before{content:"\F2CB"}.fa-thermometer-full:before{content:"\F2C7"}.fa-thermometer-half:before{content:"\F2C9"}.fa-thermometer-quarter:before{content:"\F2CA"}.fa-thermometer-three-quarters:before{content:"\F2C8"}.fa-think-peaks:before{content:"\F731"}.fa-thumbs-down:before{content:"\F165"}.fa-thumbs-up:before{content:"\F164"}.fa-thumbtack:before{content:"\F08D"}.fa-ticket-alt:before{content:"\F3FF"}.fa-times:before{content:"\F00D"}.fa-times-circle:before{content:"\F057"}.fa-tint:before{content:"\F043"}.fa-tint-slash:before{content:"\F5C7"}.fa-tired:before{content:"\F5C8"}.fa-toggle-off:before{content:"\F204"}.fa-toggle-on:before{content:"\F205"}.fa-toilet:before{content:"\F7D8"}.fa-toilet-paper:before{content:"\F71E"}.fa-toilet-paper-slash:before{content:"\F972"}.fa-toolbox:before{content:"\F552"}.fa-tools:before{content:"\F7D9"}.fa-tooth:before{content:"\F5C9"}.fa-torah:before{content:"\F6A0"}.fa-torii-gate:before{content:"\F6A1"}.fa-tractor:before{content:"\F722"}.fa-trade-federation:before{content:"\F513"}.fa-trademark:before{content:"\F25C"}.fa-traffic-light:before{content:"\F637"}.fa-trailer:before{content:"\F941"}.fa-train:before{content:"\F238"}.fa-tram:before{content:"\F7DA"}.fa-transgender:before{content:"\F224"}.fa-transgender-alt:before{content:"\F225"}.fa-trash:before{content:"\F1F8"}.fa-trash-alt:before{content:"\F2ED"}.fa-trash-restore:before{content:"\F829"}.fa-trash-restore-alt:before{content:"\F82A"}.fa-tree:before{content:"\F1BB"}.fa-trello:before{content:"\F181"}.fa-tripadvisor:before{content:"\F262"}.fa-trophy:before{content:"\F091"}.fa-truck:before{content:"\F0D1"}.fa-truck-loading:before{content:"\F4DE"}.fa-truck-monster:before{content:"\F63B"}.fa-truck-moving:before{content:"\F4DF"}.fa-truck-pickup:before{content:"\F63C"}.fa-tshirt:before{content:"\F553"}.fa-tty:before{content:"\F1E4"}.fa-tumblr:before{content:"\F173"}.fa-tumblr-square:before{content:"\F174"}.fa-tv:before{content:"\F26C"}.fa-twitch:before{content:"\F1E8"}.fa-twitter:before{content:"\F099"}.fa-twitter-square:before{content:"\F081"}.fa-typo3:before{content:"\F42B"}.fa-uber:before{content:"\F402"}.fa-ubuntu:before{content:"\F7DF"}.fa-uikit:before{content:"\F403"}.fa-umbraco:before{content:"\F8E8"}.fa-umbrella:before{content:"\F0E9"}.fa-umbrella-beach:before{content:"\F5CA"}.fa-underline:before{content:"\F0CD"}.fa-undo:before{content:"\F0E2"}.fa-undo-alt:before{content:"\F2EA"}.fa-uniregistry:before{content:"\F404"}.fa-unity:before{content:"\F949"}.fa-universal-access:before{content:"\F29A"}.fa-university:before{content:"\F19C"}.fa-unlink:before{content:"\F127"}.fa-unlock:before{content:"\F09C"}.fa-unlock-alt:before{content:"\F13E"}.fa-untappd:before{content:"\F405"}.fa-upload:before{content:"\F093"}.fa-ups:before{content:"\F7E0"}.fa-usb:before{content:"\F287"}.fa-user:before{content:"\F007"}.fa-user-alt:before{content:"\F406"}.fa-user-alt-slash:before{content:"\F4FA"}.fa-user-astronaut:before{content:"\F4FB"}.fa-user-check:before{content:"\F4FC"}.fa-user-circle:before{content:"\F2BD"}.fa-user-clock:before{content:"\F4FD"}.fa-user-cog:before{content:"\F4FE"}.fa-user-edit:before{content:"\F4FF"}.fa-user-friends:before{content:"\F500"}.fa-user-graduate:before{content:"\F501"}.fa-user-injured:before{content:"\F728"}.fa-user-lock:before{content:"\F502"}.fa-user-md:before{content:"\F0F0"}.fa-user-minus:before{content:"\F503"}.fa-user-ninja:before{content:"\F504"}.fa-user-nurse:before{content:"\F82F"}.fa-user-plus:before{content:"\F234"}.fa-user-secret:before{content:"\F21B"}.fa-user-shield:before{content:"\F505"}.fa-user-slash:before{content:"\F506"}.fa-user-tag:before{content:"\F507"}.fa-user-tie:before{content:"\F508"}.fa-user-times:before{content:"\F235"}.fa-users:before{content:"\F0C0"}.fa-users-cog:before{content:"\F509"}.fa-usps:before{content:"\F7E1"}.fa-ussunnah:before{content:"\F407"}.fa-utensil-spoon:before{content:"\F2E5"}.fa-utensils:before{content:"\F2E7"}.fa-vaadin:before{content:"\F408"}.fa-vector-square:before{content:"\F5CB"}.fa-venus:before{content:"\F221"}.fa-venus-double:before{content:"\F226"}.fa-venus-mars:before{content:"\F228"}.fa-viacoin:before{content:"\F237"}.fa-viadeo:before{content:"\F2A9"}.fa-viadeo-square:before{content:"\F2AA"}.fa-vial:before{content:"\F492"}.fa-vials:before{content:"\F493"}.fa-viber:before{content:"\F409"}.fa-video:before{content:"\F03D"}.fa-video-slash:before{content:"\F4E2"}.fa-vihara:before{content:"\F6A7"}.fa-vimeo:before{content:"\F40A"}.fa-vimeo-square:before{content:"\F194"}.fa-vimeo-v:before{content:"\F27D"}.fa-vine:before{content:"\F1CA"}.fa-virus:before{content:"\F974"}.fa-virus-slash:before{content:"\F975"}.fa-viruses:before{content:"\F976"}.fa-vk:before{content:"\F189"}.fa-vnv:before{content:"\F40B"}.fa-voicemail:before{content:"\F897"}.fa-volleyball-ball:before{content:"\F45F"}.fa-volume-down:before{content:"\F027"}.fa-volume-mute:before{content:"\F6A9"}.fa-volume-off:before{content:"\F026"}.fa-volume-up:before{content:"\F028"}.fa-vote-yea:before{content:"\F772"}.fa-vr-cardboard:before{content:"\F729"}.fa-vuejs:before{content:"\F41F"}.fa-walking:before{content:"\F554"}.fa-wallet:before{content:"\F555"}.fa-warehouse:before{content:"\F494"}.fa-water:before{content:"\F773"}.fa-wave-square:before{content:"\F83E"}.fa-waze:before{content:"\F83F"}.fa-weebly:before{content:"\F5CC"}.fa-weibo:before{content:"\F18A"}.fa-weight:before{content:"\F496"}.fa-weight-hanging:before{content:"\F5CD"}.fa-weixin:before{content:"\F1D7"}.fa-whatsapp:before{content:"\F232"}.fa-whatsapp-square:before{content:"\F40C"}.fa-wheelchair:before{content:"\F193"}.fa-whmcs:before{content:"\F40D"}.fa-wifi:before{content:"\F1EB"}.fa-wikipedia-w:before{content:"\F266"}.fa-wind:before{content:"\F72E"}.fa-window-close:before{content:"\F410"}.fa-window-maximize:before{content:"\F2D0"}.fa-window-minimize:before{content:"\F2D1"}.fa-window-restore:before{content:"\F2D2"}.fa-windows:before{content:"\F17A"}.fa-wine-bottle:before{content:"\F72F"}.fa-wine-glass:before{content:"\F4E3"}.fa-wine-glass-alt:before{content:"\F5CE"}.fa-wix:before{content:"\F5CF"}.fa-wizards-of-the-coast:before{content:"\F730"}.fa-wolf-pack-battalion:before{content:"\F514"}.fa-won-sign:before{content:"\F159"}.fa-wordpress:before{content:"\F19A"}.fa-wordpress-simple:before{content:"\F411"}.fa-wpbeginner:before{content:"\F297"}.fa-wpexplorer:before{content:"\F2DE"}.fa-wpforms:before{content:"\F298"}.fa-wpressr:before{content:"\F3E4"}.fa-wrench:before{content:"\F0AD"}.fa-x-ray:before{content:"\F497"}.fa-xbox:before{content:"\F412"}.fa-xing:before{content:"\F168"}.fa-xing-square:before{content:"\F169"}.fa-y-combinator:before{content:"\F23B"}.fa-yahoo:before{content:"\F19E"}.fa-yammer:before{content:"\F840"}.fa-yandex:before{content:"\F413"}.fa-yandex-international:before{content:"\F414"}.fa-yarn:before{content:"\F7E3"}.fa-yelp:before{content:"\F1E9"}.fa-yen-sign:before{content:"\F157"}.fa-yin-yang:before{content:"\F6AD"}.fa-yoast:before{content:"\F2B1"}.fa-youtube:before{content:"\F167"}.fa-youtube-square:before{content:"\F431"}.fa-zhihu:before{content:"\F63F"} + +/*! + * Font Awesome Free 5.13.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */@font-face{font-family:Font Awesome\ 5 Brands;font-style:normal;font-weight:400;font-display:block;src:url(webfonts/fa-brands-400.eot);src:url(webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(webfonts/fa-brands-400.woff2) format("woff2"),url(webfonts/fa-brands-400.woff) format("woff"),url(webfonts/fa-brands-400.ttf) format("truetype"),url(webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:Font Awesome\ 5 Brands;font-weight:400} + +/*! + * Font Awesome Free 5.13.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */@font-face{font-family:Font Awesome\ 5 Free;font-style:normal;font-weight:900;font-display:block;src:url(webfonts/fa-solid-900.eot);src:url(webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(webfonts/fa-solid-900.woff2) format("woff2"),url(webfonts/fa-solid-900.woff) format("woff"),url(webfonts/fa-solid-900.ttf) format("truetype"),url(webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.fas{font-family:Font Awesome\ 5 Free;font-weight:900}.hljs{display:block;overflow-x:auto;padding:.5em;color:#333;background:#f8f8f8}.hljs-comment,.hljs-quote{color:#998;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-subst{color:#333;font-weight:700}.hljs-literal,.hljs-number,.hljs-tag .hljs-attr,.hljs-template-variable,.hljs-variable{color:teal}.hljs-doctag,.hljs-string{color:#d14}.hljs-section,.hljs-selector-id,.hljs-title{color:#900;font-weight:700}.hljs-subst{font-weight:400}.hljs-class .hljs-title,.hljs-type{color:#458;font-weight:700}.hljs-attribute,.hljs-name,.hljs-tag{color:navy;font-weight:400}.hljs-link,.hljs-regexp{color:#009926}.hljs-bullet,.hljs-symbol{color:#990073}.hljs-built_in,.hljs-builtin-name{color:#0086b3}.hljs-meta{color:#999;font-weight:700}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.markdown{overflow-wrap:break-word}.markdown a{--text-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--text-opacity));text-decoration:underline}.markdown a:hover{--text-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--text-opacity))}.markdown img{display:inline}.markdown blockquote,.markdown dl,.markdown ol,.markdown p,.markdown pre,.markdown table,.markdown ul{margin-top:1rem;margin-bottom:1rem}.markdown ol,.markdown ul{padding-left:2rem}.markdown ul{list-style-type:disc}.markdown ol{list-style-type:decimal}.markdown h1{font-size:2.25rem}.markdown h1,.markdown h2{border-bottom-width:1px;--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.markdown h2{font-size:1.875rem}.markdown h1,.markdown h2{font-weight:700;line-height:1.625;margin-top:2rem;margin-bottom:1rem}.markdown h1+p,.markdown h2+p{margin-top:1rem}.markdown code{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity));border-radius:.125rem;font-family:Source Code Pro,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;padding:.25rem;overflow-y:auto}.markdown pre>code{display:block;padding:1rem;font-size:.875rem;white-space:pre}.markdown hr{border-top-width:2px;--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity));margin-top:1rem;margin-bottom:1rem}.markdown blockquote{border-left-width:4px;--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity));padding-left:.5rem;--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.markdown table{display:table}.markdown table td,.markdown table th{border-width:1px;--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity));padding:.25rem}.markdown dl dt,.markdown table th{font-weight:700}.markdown dl dd{padding-left:1rem}.markdown>:first-child{margin-top:0}.markdown>:last-child{margin-bottom:0}#app.dark-mode{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}#app.dark-mode header{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}#app.dark-mode header #search{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}#app.dark-mode header #search a,#app.dark-mode header #search i.fa-search{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}#app.dark-mode #content,#app.dark-mode header #search a:hover{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}#app.dark-mode #file-list a:hover{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}#app.dark-mode #file-list a:hover button:hover{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}#app.dark-mode footer{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity));--border-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--border-opacity))}#app.dark-mode footer a:hover{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}#app.dark-mode #scroll-to-top{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}#app.dark-mode #file-info-modal{background-color:rgba(65,79,104,.5)!important}#app.dark-mode #file-info-modal #file-info-dialogue{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity));--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}#app.dark-mode #file-info-modal #file-info-dialogue header{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}#app.dark-mode #file-info-modal #file-info-dialogue header button{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}#app.dark-mode #file-info-modal #file-info-dialogue header button:hover{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}#app.dark-mode #readme article{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity));border-width:0}#app.dark-mode .markdown a{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}#app.dark-mode .markdown a:hover{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}#app.dark-mode .markdown h1,#app.dark-mode .markdown h2{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}#app.dark-mode .markdown code{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}#app.dark-mode .markdown hr{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}#app.dark-mode .markdown .hljs,#app.dark-mode .markdown .hljs-keyword{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}:target:before{content:"";display:block;height:80px;margin-top:-80px;visibility:hidden}@media (min-width:640px){.sm\:block{display:block}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}}@media (min-width:768px){.md\:flex{display:flex}.md\:hidden{display:none}.md\:flex-row{flex-direction:row}.md\:max-w-xs{max-width:20rem}.md\:p-0{padding:0}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:invisible{visibility:hidden}}@media (min-width:1024px){.lg\:px-12{padding-left:3rem;padding-right:3rem}} \ No newline at end of file diff --git a/soc/2020/daily_report/archive/app/assets/app.js b/soc/2020/daily_report/archive/app/assets/app.js new file mode 100644 index 0000000..d046aa7 --- /dev/null +++ b/soc/2020/daily_report/archive/app/assets/app.js @@ -0,0 +1,2 @@ +/*! For license information please see app.js.LICENSE.txt */ +!function(e){var t={};function n(a){if(t[a])return t[a].exports;var r=t[a]={i:a,l:!1,exports:{}};return e[a].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,a){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(n.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(a,r,function(t){return e[t]}.bind(null,r));return a},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/",n(n.s=0)}({"+FGM":function(e,t){e.exports=function(e){var t=e.COMMENT("--","$"),n="BIGINT INT8 BIGSERIAL SERIAL8 BIT VARYING VARBIT BOOLEAN BOOL BOX BYTEA CHARACTER CHAR VARCHAR CIDR CIRCLE DATE DOUBLE PRECISION FLOAT8 FLOAT INET INTEGER INT INT4 INTERVAL JSON JSONB LINE LSEG|10 MACADDR MACADDR8 MONEY NUMERIC DEC DECIMAL PATH POINT POLYGON REAL FLOAT4 SMALLINT INT2 SMALLSERIAL|10 SERIAL2|10 SERIAL|10 SERIAL4|10 TEXT TIME ZONE TIMETZ|10 TIMESTAMP TIMESTAMPTZ|10 TSQUERY|10 TSVECTOR|10 TXID_SNAPSHOT|10 UUID XML NATIONAL NCHAR INT4RANGE|10 INT8RANGE|10 NUMRANGE|10 TSRANGE|10 TSTZRANGE|10 DATERANGE|10 ANYELEMENT ANYARRAY ANYNONARRAY ANYENUM ANYRANGE CSTRING INTERNAL RECORD PG_DDL_COMMAND VOID UNKNOWN OPAQUE REFCURSOR NAME OID REGPROC|10 REGPROCEDURE|10 REGOPER|10 REGOPERATOR|10 REGCLASS|10 REGTYPE|10 REGROLE|10 REGNAMESPACE|10 REGCONFIG|10 REGDICTIONARY|10 ",a=n.trim().split(" ").map((function(e){return e.split("|")[0]})).join("|"),r="ARRAY_AGG AVG BIT_AND BIT_OR BOOL_AND BOOL_OR COUNT EVERY JSON_AGG JSONB_AGG JSON_OBJECT_AGG JSONB_OBJECT_AGG MAX MIN MODE STRING_AGG SUM XMLAGG CORR COVAR_POP COVAR_SAMP REGR_AVGX REGR_AVGY REGR_COUNT REGR_INTERCEPT REGR_R2 REGR_SLOPE REGR_SXX REGR_SXY REGR_SYY STDDEV STDDEV_POP STDDEV_SAMP VARIANCE VAR_POP VAR_SAMP PERCENTILE_CONT PERCENTILE_DISC ROW_NUMBER RANK DENSE_RANK PERCENT_RANK CUME_DIST NTILE LAG LEAD FIRST_VALUE LAST_VALUE NTH_VALUE NUM_NONNULLS NUM_NULLS ABS CBRT CEIL CEILING DEGREES DIV EXP FLOOR LN LOG MOD PI POWER RADIANS ROUND SCALE SIGN SQRT TRUNC WIDTH_BUCKET RANDOM SETSEED ACOS ACOSD ASIN ASIND ATAN ATAND ATAN2 ATAN2D COS COSD COT COTD SIN SIND TAN TAND BIT_LENGTH CHAR_LENGTH CHARACTER_LENGTH LOWER OCTET_LENGTH OVERLAY POSITION SUBSTRING TREAT TRIM UPPER ASCII BTRIM CHR CONCAT CONCAT_WS CONVERT CONVERT_FROM CONVERT_TO DECODE ENCODE INITCAP LEFT LENGTH LPAD LTRIM MD5 PARSE_IDENT PG_CLIENT_ENCODING QUOTE_IDENT|10 QUOTE_LITERAL|10 QUOTE_NULLABLE|10 REGEXP_MATCH REGEXP_MATCHES REGEXP_REPLACE REGEXP_SPLIT_TO_ARRAY REGEXP_SPLIT_TO_TABLE REPEAT REPLACE REVERSE RIGHT RPAD RTRIM SPLIT_PART STRPOS SUBSTR TO_ASCII TO_HEX TRANSLATE OCTET_LENGTH GET_BIT GET_BYTE SET_BIT SET_BYTE TO_CHAR TO_DATE TO_NUMBER TO_TIMESTAMP AGE CLOCK_TIMESTAMP|10 DATE_PART DATE_TRUNC ISFINITE JUSTIFY_DAYS JUSTIFY_HOURS JUSTIFY_INTERVAL MAKE_DATE MAKE_INTERVAL|10 MAKE_TIME MAKE_TIMESTAMP|10 MAKE_TIMESTAMPTZ|10 NOW STATEMENT_TIMESTAMP|10 TIMEOFDAY TRANSACTION_TIMESTAMP|10 ENUM_FIRST ENUM_LAST ENUM_RANGE AREA CENTER DIAMETER HEIGHT ISCLOSED ISOPEN NPOINTS PCLOSE POPEN RADIUS WIDTH BOX BOUND_BOX CIRCLE LINE LSEG PATH POLYGON ABBREV BROADCAST HOST HOSTMASK MASKLEN NETMASK NETWORK SET_MASKLEN TEXT INET_SAME_FAMILY INET_MERGE MACADDR8_SET7BIT ARRAY_TO_TSVECTOR GET_CURRENT_TS_CONFIG NUMNODE PLAINTO_TSQUERY PHRASETO_TSQUERY WEBSEARCH_TO_TSQUERY QUERYTREE SETWEIGHT STRIP TO_TSQUERY TO_TSVECTOR JSON_TO_TSVECTOR JSONB_TO_TSVECTOR TS_DELETE TS_FILTER TS_HEADLINE TS_RANK TS_RANK_CD TS_REWRITE TSQUERY_PHRASE TSVECTOR_TO_ARRAY TSVECTOR_UPDATE_TRIGGER TSVECTOR_UPDATE_TRIGGER_COLUMN XMLCOMMENT XMLCONCAT XMLELEMENT XMLFOREST XMLPI XMLROOT XMLEXISTS XML_IS_WELL_FORMED XML_IS_WELL_FORMED_DOCUMENT XML_IS_WELL_FORMED_CONTENT XPATH XPATH_EXISTS XMLTABLE XMLNAMESPACES TABLE_TO_XML TABLE_TO_XMLSCHEMA TABLE_TO_XML_AND_XMLSCHEMA QUERY_TO_XML QUERY_TO_XMLSCHEMA QUERY_TO_XML_AND_XMLSCHEMA CURSOR_TO_XML CURSOR_TO_XMLSCHEMA SCHEMA_TO_XML SCHEMA_TO_XMLSCHEMA SCHEMA_TO_XML_AND_XMLSCHEMA DATABASE_TO_XML DATABASE_TO_XMLSCHEMA DATABASE_TO_XML_AND_XMLSCHEMA XMLATTRIBUTES TO_JSON TO_JSONB ARRAY_TO_JSON ROW_TO_JSON JSON_BUILD_ARRAY JSONB_BUILD_ARRAY JSON_BUILD_OBJECT JSONB_BUILD_OBJECT JSON_OBJECT JSONB_OBJECT JSON_ARRAY_LENGTH JSONB_ARRAY_LENGTH JSON_EACH JSONB_EACH JSON_EACH_TEXT JSONB_EACH_TEXT JSON_EXTRACT_PATH JSONB_EXTRACT_PATH JSON_OBJECT_KEYS JSONB_OBJECT_KEYS JSON_POPULATE_RECORD JSONB_POPULATE_RECORD JSON_POPULATE_RECORDSET JSONB_POPULATE_RECORDSET JSON_ARRAY_ELEMENTS JSONB_ARRAY_ELEMENTS JSON_ARRAY_ELEMENTS_TEXT JSONB_ARRAY_ELEMENTS_TEXT JSON_TYPEOF JSONB_TYPEOF JSON_TO_RECORD JSONB_TO_RECORD JSON_TO_RECORDSET JSONB_TO_RECORDSET JSON_STRIP_NULLS JSONB_STRIP_NULLS JSONB_SET JSONB_INSERT JSONB_PRETTY CURRVAL LASTVAL NEXTVAL SETVAL COALESCE NULLIF GREATEST LEAST ARRAY_APPEND ARRAY_CAT ARRAY_NDIMS ARRAY_DIMS ARRAY_FILL ARRAY_LENGTH ARRAY_LOWER ARRAY_POSITION ARRAY_POSITIONS ARRAY_PREPEND ARRAY_REMOVE ARRAY_REPLACE ARRAY_TO_STRING ARRAY_UPPER CARDINALITY STRING_TO_ARRAY UNNEST ISEMPTY LOWER_INC UPPER_INC LOWER_INF UPPER_INF RANGE_MERGE GENERATE_SERIES GENERATE_SUBSCRIPTS CURRENT_DATABASE CURRENT_QUERY CURRENT_SCHEMA|10 CURRENT_SCHEMAS|10 INET_CLIENT_ADDR INET_CLIENT_PORT INET_SERVER_ADDR INET_SERVER_PORT ROW_SECURITY_ACTIVE FORMAT_TYPE TO_REGCLASS TO_REGPROC TO_REGPROCEDURE TO_REGOPER TO_REGOPERATOR TO_REGTYPE TO_REGNAMESPACE TO_REGROLE COL_DESCRIPTION OBJ_DESCRIPTION SHOBJ_DESCRIPTION TXID_CURRENT TXID_CURRENT_IF_ASSIGNED TXID_CURRENT_SNAPSHOT TXID_SNAPSHOT_XIP TXID_SNAPSHOT_XMAX TXID_SNAPSHOT_XMIN TXID_VISIBLE_IN_SNAPSHOT TXID_STATUS CURRENT_SETTING SET_CONFIG BRIN_SUMMARIZE_NEW_VALUES BRIN_SUMMARIZE_RANGE BRIN_DESUMMARIZE_RANGE GIN_CLEAN_PENDING_LIST SUPPRESS_REDUNDANT_UPDATES_TRIGGER LO_FROM_BYTEA LO_PUT LO_GET LO_CREAT LO_CREATE LO_UNLINK LO_IMPORT LO_EXPORT LOREAD LOWRITE GROUPING CAST ".trim().split(" ").map((function(e){return e.split("|")[0]})).join("|");return{name:"PostgreSQL",aliases:["postgres","postgresql"],case_insensitive:!0,keywords:{keyword:"ABORT ALTER ANALYZE BEGIN CALL CHECKPOINT|10 CLOSE CLUSTER COMMENT COMMIT COPY CREATE DEALLOCATE DECLARE DELETE DISCARD DO DROP END EXECUTE EXPLAIN FETCH GRANT IMPORT INSERT LISTEN LOAD LOCK MOVE NOTIFY PREPARE REASSIGN|10 REFRESH REINDEX RELEASE RESET REVOKE ROLLBACK SAVEPOINT SECURITY SELECT SET SHOW START TRUNCATE UNLISTEN|10 UPDATE VACUUM|10 VALUES AGGREGATE COLLATION CONVERSION|10 DATABASE DEFAULT PRIVILEGES DOMAIN TRIGGER EXTENSION FOREIGN WRAPPER|10 TABLE FUNCTION GROUP LANGUAGE LARGE OBJECT MATERIALIZED VIEW OPERATOR CLASS FAMILY POLICY PUBLICATION|10 ROLE RULE SCHEMA SEQUENCE SERVER STATISTICS SUBSCRIPTION SYSTEM TABLESPACE CONFIGURATION DICTIONARY PARSER TEMPLATE TYPE USER MAPPING PREPARED ACCESS METHOD CAST AS TRANSFORM TRANSACTION OWNED TO INTO SESSION AUTHORIZATION INDEX PROCEDURE ASSERTION ALL ANALYSE AND ANY ARRAY ASC ASYMMETRIC|10 BOTH CASE CHECK COLLATE COLUMN CONCURRENTLY|10 CONSTRAINT CROSS DEFERRABLE RANGE DESC DISTINCT ELSE EXCEPT FOR FREEZE|10 FROM FULL HAVING ILIKE IN INITIALLY INNER INTERSECT IS ISNULL JOIN LATERAL LEADING LIKE LIMIT NATURAL NOT NOTNULL NULL OFFSET ON ONLY OR ORDER OUTER OVERLAPS PLACING PRIMARY REFERENCES RETURNING SIMILAR SOME SYMMETRIC TABLESAMPLE THEN TRAILING UNION UNIQUE USING VARIADIC|10 VERBOSE WHEN WHERE WINDOW WITH BY RETURNS INOUT OUT SETOF|10 IF STRICT CURRENT CONTINUE OWNER LOCATION OVER PARTITION WITHIN BETWEEN ESCAPE EXTERNAL INVOKER DEFINER WORK RENAME VERSION CONNECTION CONNECT TABLES TEMP TEMPORARY FUNCTIONS SEQUENCES TYPES SCHEMAS OPTION CASCADE RESTRICT ADD ADMIN EXISTS VALID VALIDATE ENABLE DISABLE REPLICA|10 ALWAYS PASSING COLUMNS PATH REF VALUE OVERRIDING IMMUTABLE STABLE VOLATILE BEFORE AFTER EACH ROW PROCEDURAL ROUTINE NO HANDLER VALIDATOR OPTIONS STORAGE OIDS|10 WITHOUT INHERIT DEPENDS CALLED INPUT LEAKPROOF|10 COST ROWS NOWAIT SEARCH UNTIL ENCRYPTED|10 PASSWORD CONFLICT|10 INSTEAD INHERITS CHARACTERISTICS WRITE CURSOR ALSO STATEMENT SHARE EXCLUSIVE INLINE ISOLATION REPEATABLE READ COMMITTED SERIALIZABLE UNCOMMITTED LOCAL GLOBAL SQL PROCEDURES RECURSIVE SNAPSHOT ROLLUP CUBE TRUSTED|10 INCLUDE FOLLOWING PRECEDING UNBOUNDED RANGE GROUPS UNENCRYPTED|10 SYSID FORMAT DELIMITER HEADER QUOTE ENCODING FILTER OFF FORCE_QUOTE FORCE_NOT_NULL FORCE_NULL COSTS BUFFERS TIMING SUMMARY DISABLE_PAGE_SKIPPING RESTART CYCLE GENERATED IDENTITY DEFERRED IMMEDIATE LEVEL LOGGED UNLOGGED OF NOTHING NONE EXCLUDE ATTRIBUTE USAGE ROUTINES TRUE FALSE NAN INFINITY ALIAS BEGIN CONSTANT DECLARE END EXCEPTION RETURN PERFORM|10 RAISE GET DIAGNOSTICS STACKED|10 FOREACH LOOP ELSIF EXIT WHILE REVERSE SLICE DEBUG LOG INFO NOTICE WARNING ASSERT OPEN SUPERUSER NOSUPERUSER CREATEDB NOCREATEDB CREATEROLE NOCREATEROLE INHERIT NOINHERIT LOGIN NOLOGIN REPLICATION NOREPLICATION BYPASSRLS NOBYPASSRLS ",built_in:"CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER CURRENT_CATALOG|10 CURRENT_DATE LOCALTIME LOCALTIMESTAMP CURRENT_ROLE|10 CURRENT_SCHEMA|10 SESSION_USER PUBLIC FOUND NEW OLD TG_NAME|10 TG_WHEN|10 TG_LEVEL|10 TG_OP|10 TG_RELID|10 TG_RELNAME|10 TG_TABLE_NAME|10 TG_TABLE_SCHEMA|10 TG_NARGS|10 TG_ARGV|10 TG_EVENT|10 TG_TAG|10 ROW_COUNT RESULT_OID|10 PG_CONTEXT|10 RETURNED_SQLSTATE COLUMN_NAME CONSTRAINT_NAME PG_DATATYPE_NAME|10 MESSAGE_TEXT TABLE_NAME SCHEMA_NAME PG_EXCEPTION_DETAIL|10 PG_EXCEPTION_HINT|10 PG_EXCEPTION_CONTEXT|10 SQLSTATE SQLERRM|10 SUCCESSFUL_COMPLETION WARNING DYNAMIC_RESULT_SETS_RETURNED IMPLICIT_ZERO_BIT_PADDING NULL_VALUE_ELIMINATED_IN_SET_FUNCTION PRIVILEGE_NOT_GRANTED PRIVILEGE_NOT_REVOKED STRING_DATA_RIGHT_TRUNCATION DEPRECATED_FEATURE NO_DATA NO_ADDITIONAL_DYNAMIC_RESULT_SETS_RETURNED SQL_STATEMENT_NOT_YET_COMPLETE CONNECTION_EXCEPTION CONNECTION_DOES_NOT_EXIST CONNECTION_FAILURE SQLCLIENT_UNABLE_TO_ESTABLISH_SQLCONNECTION SQLSERVER_REJECTED_ESTABLISHMENT_OF_SQLCONNECTION TRANSACTION_RESOLUTION_UNKNOWN PROTOCOL_VIOLATION TRIGGERED_ACTION_EXCEPTION FEATURE_NOT_SUPPORTED INVALID_TRANSACTION_INITIATION LOCATOR_EXCEPTION INVALID_LOCATOR_SPECIFICATION INVALID_GRANTOR INVALID_GRANT_OPERATION INVALID_ROLE_SPECIFICATION DIAGNOSTICS_EXCEPTION STACKED_DIAGNOSTICS_ACCESSED_WITHOUT_ACTIVE_HANDLER CASE_NOT_FOUND CARDINALITY_VIOLATION DATA_EXCEPTION ARRAY_SUBSCRIPT_ERROR CHARACTER_NOT_IN_REPERTOIRE DATETIME_FIELD_OVERFLOW DIVISION_BY_ZERO ERROR_IN_ASSIGNMENT ESCAPE_CHARACTER_CONFLICT INDICATOR_OVERFLOW INTERVAL_FIELD_OVERFLOW INVALID_ARGUMENT_FOR_LOGARITHM INVALID_ARGUMENT_FOR_NTILE_FUNCTION INVALID_ARGUMENT_FOR_NTH_VALUE_FUNCTION INVALID_ARGUMENT_FOR_POWER_FUNCTION INVALID_ARGUMENT_FOR_WIDTH_BUCKET_FUNCTION INVALID_CHARACTER_VALUE_FOR_CAST INVALID_DATETIME_FORMAT INVALID_ESCAPE_CHARACTER INVALID_ESCAPE_OCTET INVALID_ESCAPE_SEQUENCE NONSTANDARD_USE_OF_ESCAPE_CHARACTER INVALID_INDICATOR_PARAMETER_VALUE INVALID_PARAMETER_VALUE INVALID_REGULAR_EXPRESSION INVALID_ROW_COUNT_IN_LIMIT_CLAUSE INVALID_ROW_COUNT_IN_RESULT_OFFSET_CLAUSE INVALID_TABLESAMPLE_ARGUMENT INVALID_TABLESAMPLE_REPEAT INVALID_TIME_ZONE_DISPLACEMENT_VALUE INVALID_USE_OF_ESCAPE_CHARACTER MOST_SPECIFIC_TYPE_MISMATCH NULL_VALUE_NOT_ALLOWED NULL_VALUE_NO_INDICATOR_PARAMETER NUMERIC_VALUE_OUT_OF_RANGE SEQUENCE_GENERATOR_LIMIT_EXCEEDED STRING_DATA_LENGTH_MISMATCH STRING_DATA_RIGHT_TRUNCATION SUBSTRING_ERROR TRIM_ERROR UNTERMINATED_C_STRING ZERO_LENGTH_CHARACTER_STRING FLOATING_POINT_EXCEPTION INVALID_TEXT_REPRESENTATION INVALID_BINARY_REPRESENTATION BAD_COPY_FILE_FORMAT UNTRANSLATABLE_CHARACTER NOT_AN_XML_DOCUMENT INVALID_XML_DOCUMENT INVALID_XML_CONTENT INVALID_XML_COMMENT INVALID_XML_PROCESSING_INSTRUCTION INTEGRITY_CONSTRAINT_VIOLATION RESTRICT_VIOLATION NOT_NULL_VIOLATION FOREIGN_KEY_VIOLATION UNIQUE_VIOLATION CHECK_VIOLATION EXCLUSION_VIOLATION INVALID_CURSOR_STATE INVALID_TRANSACTION_STATE ACTIVE_SQL_TRANSACTION BRANCH_TRANSACTION_ALREADY_ACTIVE HELD_CURSOR_REQUIRES_SAME_ISOLATION_LEVEL INAPPROPRIATE_ACCESS_MODE_FOR_BRANCH_TRANSACTION INAPPROPRIATE_ISOLATION_LEVEL_FOR_BRANCH_TRANSACTION NO_ACTIVE_SQL_TRANSACTION_FOR_BRANCH_TRANSACTION READ_ONLY_SQL_TRANSACTION SCHEMA_AND_DATA_STATEMENT_MIXING_NOT_SUPPORTED NO_ACTIVE_SQL_TRANSACTION IN_FAILED_SQL_TRANSACTION IDLE_IN_TRANSACTION_SESSION_TIMEOUT INVALID_SQL_STATEMENT_NAME TRIGGERED_DATA_CHANGE_VIOLATION INVALID_AUTHORIZATION_SPECIFICATION INVALID_PASSWORD DEPENDENT_PRIVILEGE_DESCRIPTORS_STILL_EXIST DEPENDENT_OBJECTS_STILL_EXIST INVALID_TRANSACTION_TERMINATION SQL_ROUTINE_EXCEPTION FUNCTION_EXECUTED_NO_RETURN_STATEMENT MODIFYING_SQL_DATA_NOT_PERMITTED PROHIBITED_SQL_STATEMENT_ATTEMPTED READING_SQL_DATA_NOT_PERMITTED INVALID_CURSOR_NAME EXTERNAL_ROUTINE_EXCEPTION CONTAINING_SQL_NOT_PERMITTED MODIFYING_SQL_DATA_NOT_PERMITTED PROHIBITED_SQL_STATEMENT_ATTEMPTED READING_SQL_DATA_NOT_PERMITTED EXTERNAL_ROUTINE_INVOCATION_EXCEPTION INVALID_SQLSTATE_RETURNED NULL_VALUE_NOT_ALLOWED TRIGGER_PROTOCOL_VIOLATED SRF_PROTOCOL_VIOLATED EVENT_TRIGGER_PROTOCOL_VIOLATED SAVEPOINT_EXCEPTION INVALID_SAVEPOINT_SPECIFICATION INVALID_CATALOG_NAME INVALID_SCHEMA_NAME TRANSACTION_ROLLBACK TRANSACTION_INTEGRITY_CONSTRAINT_VIOLATION SERIALIZATION_FAILURE STATEMENT_COMPLETION_UNKNOWN DEADLOCK_DETECTED SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION SYNTAX_ERROR INSUFFICIENT_PRIVILEGE CANNOT_COERCE GROUPING_ERROR WINDOWING_ERROR INVALID_RECURSION INVALID_FOREIGN_KEY INVALID_NAME NAME_TOO_LONG RESERVED_NAME DATATYPE_MISMATCH INDETERMINATE_DATATYPE COLLATION_MISMATCH INDETERMINATE_COLLATION WRONG_OBJECT_TYPE GENERATED_ALWAYS UNDEFINED_COLUMN UNDEFINED_FUNCTION UNDEFINED_TABLE UNDEFINED_PARAMETER UNDEFINED_OBJECT DUPLICATE_COLUMN DUPLICATE_CURSOR DUPLICATE_DATABASE DUPLICATE_FUNCTION DUPLICATE_PREPARED_STATEMENT DUPLICATE_SCHEMA DUPLICATE_TABLE DUPLICATE_ALIAS DUPLICATE_OBJECT AMBIGUOUS_COLUMN AMBIGUOUS_FUNCTION AMBIGUOUS_PARAMETER AMBIGUOUS_ALIAS INVALID_COLUMN_REFERENCE INVALID_COLUMN_DEFINITION INVALID_CURSOR_DEFINITION INVALID_DATABASE_DEFINITION INVALID_FUNCTION_DEFINITION INVALID_PREPARED_STATEMENT_DEFINITION INVALID_SCHEMA_DEFINITION INVALID_TABLE_DEFINITION INVALID_OBJECT_DEFINITION WITH_CHECK_OPTION_VIOLATION INSUFFICIENT_RESOURCES DISK_FULL OUT_OF_MEMORY TOO_MANY_CONNECTIONS CONFIGURATION_LIMIT_EXCEEDED PROGRAM_LIMIT_EXCEEDED STATEMENT_TOO_COMPLEX TOO_MANY_COLUMNS TOO_MANY_ARGUMENTS OBJECT_NOT_IN_PREREQUISITE_STATE OBJECT_IN_USE CANT_CHANGE_RUNTIME_PARAM LOCK_NOT_AVAILABLE OPERATOR_INTERVENTION QUERY_CANCELED ADMIN_SHUTDOWN CRASH_SHUTDOWN CANNOT_CONNECT_NOW DATABASE_DROPPED SYSTEM_ERROR IO_ERROR UNDEFINED_FILE DUPLICATE_FILE SNAPSHOT_TOO_OLD CONFIG_FILE_ERROR LOCK_FILE_EXISTS FDW_ERROR FDW_COLUMN_NAME_NOT_FOUND FDW_DYNAMIC_PARAMETER_VALUE_NEEDED FDW_FUNCTION_SEQUENCE_ERROR FDW_INCONSISTENT_DESCRIPTOR_INFORMATION FDW_INVALID_ATTRIBUTE_VALUE FDW_INVALID_COLUMN_NAME FDW_INVALID_COLUMN_NUMBER FDW_INVALID_DATA_TYPE FDW_INVALID_DATA_TYPE_DESCRIPTORS FDW_INVALID_DESCRIPTOR_FIELD_IDENTIFIER FDW_INVALID_HANDLE FDW_INVALID_OPTION_INDEX FDW_INVALID_OPTION_NAME FDW_INVALID_STRING_LENGTH_OR_BUFFER_LENGTH FDW_INVALID_STRING_FORMAT FDW_INVALID_USE_OF_NULL_POINTER FDW_TOO_MANY_HANDLES FDW_OUT_OF_MEMORY FDW_NO_SCHEMAS FDW_OPTION_NAME_NOT_FOUND FDW_REPLY_HANDLE FDW_SCHEMA_NOT_FOUND FDW_TABLE_NOT_FOUND FDW_UNABLE_TO_CREATE_EXECUTION FDW_UNABLE_TO_CREATE_REPLY FDW_UNABLE_TO_ESTABLISH_CONNECTION PLPGSQL_ERROR RAISE_EXCEPTION NO_DATA_FOUND TOO_MANY_ROWS ASSERT_FAILURE INTERNAL_ERROR DATA_CORRUPTED INDEX_CORRUPTED "},illegal:/:==|\W\s*\(\*|(^|\s)\$[a-z]|{{|[a-z]:\s*$|\.\.\.|TO:|DO:/,contains:[{className:"keyword",variants:[{begin:/\bTEXT\s*SEARCH\b/},{begin:/\b(PRIMARY|FOREIGN|FOR(\s+NO)?)\s+KEY\b/},{begin:/\bPARALLEL\s+(UNSAFE|RESTRICTED|SAFE)\b/},{begin:/\bSTORAGE\s+(PLAIN|EXTERNAL|EXTENDED|MAIN)\b/},{begin:/\bMATCH\s+(FULL|PARTIAL|SIMPLE)\b/},{begin:/\bNULLS\s+(FIRST|LAST)\b/},{begin:/\bEVENT\s+TRIGGER\b/},{begin:/\b(MAPPING|OR)\s+REPLACE\b/},{begin:/\b(FROM|TO)\s+(PROGRAM|STDIN|STDOUT)\b/},{begin:/\b(SHARE|EXCLUSIVE)\s+MODE\b/},{begin:/\b(LEFT|RIGHT)\s+(OUTER\s+)?JOIN\b/},{begin:/\b(FETCH|MOVE)\s+(NEXT|PRIOR|FIRST|LAST|ABSOLUTE|RELATIVE|FORWARD|BACKWARD)\b/},{begin:/\bPRESERVE\s+ROWS\b/},{begin:/\bDISCARD\s+PLANS\b/},{begin:/\bREFERENCING\s+(OLD|NEW)\b/},{begin:/\bSKIP\s+LOCKED\b/},{begin:/\bGROUPING\s+SETS\b/},{begin:/\b(BINARY|INSENSITIVE|SCROLL|NO\s+SCROLL)\s+(CURSOR|FOR)\b/},{begin:/\b(WITH|WITHOUT)\s+HOLD\b/},{begin:/\bWITH\s+(CASCADED|LOCAL)\s+CHECK\s+OPTION\b/},{begin:/\bEXCLUDE\s+(TIES|NO\s+OTHERS)\b/},{begin:/\bFORMAT\s+(TEXT|XML|JSON|YAML)\b/},{begin:/\bSET\s+((SESSION|LOCAL)\s+)?NAMES\b/},{begin:/\bIS\s+(NOT\s+)?UNKNOWN\b/},{begin:/\bSECURITY\s+LABEL\b/},{begin:/\bSTANDALONE\s+(YES|NO|NO\s+VALUE)\b/},{begin:/\bWITH\s+(NO\s+)?DATA\b/},{begin:/\b(FOREIGN|SET)\s+DATA\b/},{begin:/\bSET\s+(CATALOG|CONSTRAINTS)\b/},{begin:/\b(WITH|FOR)\s+ORDINALITY\b/},{begin:/\bIS\s+(NOT\s+)?DOCUMENT\b/},{begin:/\bXML\s+OPTION\s+(DOCUMENT|CONTENT)\b/},{begin:/\b(STRIP|PRESERVE)\s+WHITESPACE\b/},{begin:/\bNO\s+(ACTION|MAXVALUE|MINVALUE)\b/},{begin:/\bPARTITION\s+BY\s+(RANGE|LIST|HASH)\b/},{begin:/\bAT\s+TIME\s+ZONE\b/},{begin:/\bGRANTED\s+BY\b/},{begin:/\bRETURN\s+(QUERY|NEXT)\b/},{begin:/\b(ATTACH|DETACH)\s+PARTITION\b/},{begin:/\bFORCE\s+ROW\s+LEVEL\s+SECURITY\b/},{begin:/\b(INCLUDING|EXCLUDING)\s+(COMMENTS|CONSTRAINTS|DEFAULTS|IDENTITY|INDEXES|STATISTICS|STORAGE|ALL)\b/},{begin:/\bAS\s+(ASSIGNMENT|IMPLICIT|PERMISSIVE|RESTRICTIVE|ENUM|RANGE)\b/}]},{begin:/\b(FORMAT|FAMILY|VERSION)\s*\(/},{begin:/\bINCLUDE\s*\(/,keywords:"INCLUDE"},{begin:/\bRANGE(?!\s*(BETWEEN|UNBOUNDED|CURRENT|[-0-9]+))/},{begin:/\b(VERSION|OWNER|TEMPLATE|TABLESPACE|CONNECTION\s+LIMIT|PROCEDURE|RESTRICT|JOIN|PARSER|COPY|START|END|COLLATION|INPUT|ANALYZE|STORAGE|LIKE|DEFAULT|DELIMITER|ENCODING|COLUMN|CONSTRAINT|TABLE|SCHEMA)\s*=/},{begin:/\b(PG_\w+?|HAS_[A-Z_]+_PRIVILEGE)\b/,relevance:10},{begin:/\bEXTRACT\s*\(/,end:/\bFROM\b/,returnEnd:!0,keywords:{type:"CENTURY DAY DECADE DOW DOY EPOCH HOUR ISODOW ISOYEAR MICROSECONDS MILLENNIUM MILLISECONDS MINUTE MONTH QUARTER SECOND TIMEZONE TIMEZONE_HOUR TIMEZONE_MINUTE WEEK YEAR"}},{begin:/\b(XMLELEMENT|XMLPI)\s*\(\s*NAME/,keywords:{keyword:"NAME"}},{begin:/\b(XMLPARSE|XMLSERIALIZE)\s*\(\s*(DOCUMENT|CONTENT)/,keywords:{keyword:"DOCUMENT CONTENT"}},{beginKeywords:"CACHE INCREMENT MAXVALUE MINVALUE",end:e.C_NUMBER_RE,returnEnd:!0,keywords:"BY CACHE INCREMENT MAXVALUE MINVALUE"},{className:"type",begin:/\b(WITH|WITHOUT)\s+TIME\s+ZONE\b/},{className:"type",begin:/\bINTERVAL\s+(YEAR|MONTH|DAY|HOUR|MINUTE|SECOND)(\s+TO\s+(MONTH|HOUR|MINUTE|SECOND))?\b/},{begin:/\bRETURNS\s+(LANGUAGE_HANDLER|TRIGGER|EVENT_TRIGGER|FDW_HANDLER|INDEX_AM_HANDLER|TSM_HANDLER)\b/,keywords:{keyword:"RETURNS",type:"LANGUAGE_HANDLER TRIGGER EVENT_TRIGGER FDW_HANDLER INDEX_AM_HANDLER TSM_HANDLER"}},{begin:"\\b("+r+")\\s*\\("},{begin:"\\.("+a+")\\b"},{begin:"\\b("+a+")\\s+PATH\\b",keywords:{keyword:"PATH",type:n.replace("PATH ","")}},{className:"type",begin:"\\b("+a+")\\b"},{className:"string",begin:"'",end:"'",contains:[{begin:"''"}]},{className:"string",begin:"(e|E|u&|U&)'",end:"'",contains:[{begin:"\\\\."}],relevance:10},{begin:"\\$([a-zA-Z_]?|[a-zA-Z_][a-zA-Z_0-9]*)\\$",endSameAsBegin:!0,contains:[{subLanguage:["pgsql","perl","python","tcl","r","lua","java","php","ruby","bash","scheme","xml","json"],endsWithParent:!0}]},{begin:'"',end:'"',contains:[{begin:'""'}]},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,{className:"meta",variants:[{begin:"%(ROW)?TYPE",relevance:10},{begin:"\\$\\d+"},{begin:"^#\\w",end:"$"}]},{className:"symbol",begin:"<<\\s*[a-zA-Z_][a-zA-Z_0-9$]*\\s*>>",relevance:10}]}}},"+fC4":function(e,t){e.exports=function(e){var t={className:"rest_arg",begin:"[.]{3}",end:"[a-zA-Z_$][a-zA-Z0-9_$]*",relevance:10};return{name:"ActionScript",aliases:["as"],keywords:{keyword:"as break case catch class const continue default delete do dynamic each else extends final finally for function get if implements import in include instanceof interface internal is namespace native new override package private protected public return set static super switch this throw try typeof use var void while with",literal:"true false null undefined"},contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.C_NUMBER_MODE,{className:"class",beginKeywords:"package",end:"{",contains:[e.TITLE_MODE]},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,contains:[{beginKeywords:"extends implements"},e.TITLE_MODE]},{className:"meta",beginKeywords:"import include",end:";",keywords:{"meta-keyword":"import include"}},{className:"function",beginKeywords:"function",end:"[{;]",excludeEnd:!0,illegal:"\\S",contains:[e.TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,t]},{begin:":\\s*([*]|[a-zA-Z_$][a-zA-Z0-9_$]*)"}]},e.METHOD_GUARD],illegal:/#/}}},0:function(e,t,n){n("FdgN"),e.exports=n("ev8t")},"0kiY":function(e,t){e.exports=function(e){var t={begin:/\|[A-Za-z]+:?/,keywords:{name:"truncatewords removetags linebreaksbr yesno get_digit timesince random striptags filesizeformat escape linebreaks length_is ljust rjust cut urlize fix_ampersands title floatformat capfirst pprint divisibleby add make_list unordered_list urlencode timeuntil urlizetrunc wordcount stringformat linenumbers slice date dictsort dictsortreversed default_if_none pluralize lower join center default truncatewords_html upper length phone2numeric wordwrap time addslashes slugify first escapejs force_escape iriencode last safe safeseq truncatechars localize unlocalize localtime utc timezone"},contains:[e.QUOTE_STRING_MODE,e.APOS_STRING_MODE]};return{name:"Django",aliases:["jinja"],case_insensitive:!0,subLanguage:"xml",contains:[e.COMMENT(/\{%\s*comment\s*%}/,/\{%\s*endcomment\s*%}/),e.COMMENT(/\{#/,/#}/),{className:"template-tag",begin:/\{%/,end:/%}/,contains:[{className:"name",begin:/\w+/,keywords:{name:"comment endcomment load templatetag ifchanged endifchanged if endif firstof for endfor ifnotequal endifnotequal widthratio extends include spaceless endspaceless regroup ifequal endifequal ssi now with cycle url filter endfilter debug block endblock else autoescape endautoescape csrf_token empty elif endwith static trans blocktrans endblocktrans get_static_prefix get_media_prefix plural get_current_language language get_available_languages get_current_language_bidi get_language_info get_language_info_list localize endlocalize localtime endlocaltime timezone endtimezone get_current_timezone verbatim"},starts:{endsWithParent:!0,keywords:"in by as",contains:[t],relevance:0}}]},{className:"template-variable",begin:/\{\{/,end:/}}/,contains:[t]}]}}},"1LUk":function(e,t){e.exports=function(e){return{name:"Stata",aliases:["do","ado"],case_insensitive:!0,keywords:"if else in foreach for forv forva forval forvalu forvalue forvalues by bys bysort xi quietly qui capture about ac ac_7 acprplot acprplot_7 adjust ado adopath adoupdate alpha ameans an ano anov anova anova_estat anova_terms anovadef aorder ap app appe appen append arch arch_dr arch_estat arch_p archlm areg areg_p args arima arima_dr arima_estat arima_p as asmprobit asmprobit_estat asmprobit_lf asmprobit_mfx__dlg asmprobit_p ass asse asser assert avplot avplot_7 avplots avplots_7 bcskew0 bgodfrey bias binreg bip0_lf biplot bipp_lf bipr_lf bipr_p biprobit bitest bitesti bitowt blogit bmemsize boot bootsamp bootstrap bootstrap_8 boxco_l boxco_p boxcox boxcox_6 boxcox_p bprobit br break brier bro brow brows browse brr brrstat bs bs_7 bsampl_w bsample bsample_7 bsqreg bstat bstat_7 bstat_8 bstrap bstrap_7 bubble bubbleplot ca ca_estat ca_p cabiplot camat canon canon_8 canon_8_p canon_estat canon_p cap caprojection capt captu captur capture cat cc cchart cchart_7 cci cd censobs_table centile cf char chdir checkdlgfiles checkestimationsample checkhlpfiles checksum chelp ci cii cl class classutil clear cli clis clist clo clog clog_lf clog_p clogi clogi_sw clogit clogit_lf clogit_p clogitp clogl_sw cloglog clonevar clslistarray cluster cluster_measures cluster_stop cluster_tree cluster_tree_8 clustermat cmdlog cnr cnre cnreg cnreg_p cnreg_sw cnsreg codebook collaps4 collapse colormult_nb colormult_nw compare compress conf confi confir confirm conren cons const constr constra constrai constrain constraint continue contract copy copyright copysource cor corc corr corr2data corr_anti corr_kmo corr_smc corre correl correla correlat correlate corrgram cou coun count cox cox_p cox_sw coxbase coxhaz coxvar cprplot cprplot_7 crc cret cretu cretur creturn cross cs cscript cscript_log csi ct ct_is ctset ctst_5 ctst_st cttost cumsp cumsp_7 cumul cusum cusum_7 cutil d|0 datasig datasign datasigna datasignat datasignatu datasignatur datasignature datetof db dbeta de dec deco decod decode deff des desc descr descri describ describe destring dfbeta dfgls dfuller di di_g dir dirstats dis discard disp disp_res disp_s displ displa display distinct do doe doed doedi doedit dotplot dotplot_7 dprobit drawnorm drop ds ds_util dstdize duplicates durbina dwstat dydx e|0 ed edi edit egen eivreg emdef en enc enco encod encode eq erase ereg ereg_lf ereg_p ereg_sw ereghet ereghet_glf ereghet_glf_sh ereghet_gp ereghet_ilf ereghet_ilf_sh ereghet_ip eret eretu eretur ereturn err erro error esize est est_cfexist est_cfname est_clickable est_expand est_hold est_table est_unhold est_unholdok estat estat_default estat_summ estat_vce_only esti estimates etodow etof etomdy ex exi exit expand expandcl fac fact facto factor factor_estat factor_p factor_pca_rotated factor_rotate factormat fcast fcast_compute fcast_graph fdades fdadesc fdadescr fdadescri fdadescrib fdadescribe fdasav fdasave fdause fh_st file open file read file close file filefilter fillin find_hlp_file findfile findit findit_7 fit fl fli flis flist for5_0 forest forestplot form forma format fpredict frac_154 frac_adj frac_chk frac_cox frac_ddp frac_dis frac_dv frac_in frac_mun frac_pp frac_pq frac_pv frac_wgt frac_xo fracgen fracplot fracplot_7 fracpoly fracpred fron_ex fron_hn fron_p fron_tn fron_tn2 frontier ftodate ftoe ftomdy ftowdate funnel funnelplot g|0 gamhet_glf gamhet_gp gamhet_ilf gamhet_ip gamma gamma_d2 gamma_p gamma_sw gammahet gdi_hexagon gdi_spokes ge gen gene gener genera generat generate genrank genstd genvmean gettoken gl gladder gladder_7 glim_l01 glim_l02 glim_l03 glim_l04 glim_l05 glim_l06 glim_l07 glim_l08 glim_l09 glim_l10 glim_l11 glim_l12 glim_lf glim_mu glim_nw1 glim_nw2 glim_nw3 glim_p glim_v1 glim_v2 glim_v3 glim_v4 glim_v5 glim_v6 glim_v7 glm glm_6 glm_p glm_sw glmpred glo glob globa global glogit glogit_8 glogit_p gmeans gnbre_lf gnbreg gnbreg_5 gnbreg_p gomp_lf gompe_sw gomper_p gompertz gompertzhet gomphet_glf gomphet_glf_sh gomphet_gp gomphet_ilf gomphet_ilf_sh gomphet_ip gphdot gphpen gphprint gprefs gprobi_p gprobit gprobit_8 gr gr7 gr_copy gr_current gr_db gr_describe gr_dir gr_draw gr_draw_replay gr_drop gr_edit gr_editviewopts gr_example gr_example2 gr_export gr_print gr_qscheme gr_query gr_read gr_rename gr_replay gr_save gr_set gr_setscheme gr_table gr_undo gr_use graph graph7 grebar greigen greigen_7 greigen_8 grmeanby grmeanby_7 gs_fileinfo gs_filetype gs_graphinfo gs_stat gsort gwood h|0 hadimvo hareg hausman haver he heck_d2 heckma_p heckman heckp_lf heckpr_p heckprob hel help hereg hetpr_lf hetpr_p hetprob hettest hexdump hilite hist hist_7 histogram hlogit hlu hmeans hotel hotelling hprobit hreg hsearch icd9 icd9_ff icd9p iis impute imtest inbase include inf infi infil infile infix inp inpu input ins insheet insp inspe inspec inspect integ inten intreg intreg_7 intreg_p intrg2_ll intrg_ll intrg_ll2 ipolate iqreg ir irf irf_create irfm iri is_svy is_svysum isid istdize ivprob_1_lf ivprob_lf ivprobit ivprobit_p ivreg ivreg_footnote ivtob_1_lf ivtob_lf ivtobit ivtobit_p jackknife jacknife jknife jknife_6 jknife_8 jkstat joinby kalarma1 kap kap_3 kapmeier kappa kapwgt kdensity kdensity_7 keep ksm ksmirnov ktau kwallis l|0 la lab labbe labbeplot labe label labelbook ladder levels levelsof leverage lfit lfit_p li lincom line linktest lis list lloghet_glf lloghet_glf_sh lloghet_gp lloghet_ilf lloghet_ilf_sh lloghet_ip llogi_sw llogis_p llogist llogistic llogistichet lnorm_lf lnorm_sw lnorma_p lnormal lnormalhet lnormhet_glf lnormhet_glf_sh lnormhet_gp lnormhet_ilf lnormhet_ilf_sh lnormhet_ip lnskew0 loadingplot loc loca local log logi logis_lf logistic logistic_p logit logit_estat logit_p loglogs logrank loneway lookfor lookup lowess lowess_7 lpredict lrecomp lroc lroc_7 lrtest ls lsens lsens_7 lsens_x lstat ltable ltable_7 ltriang lv lvr2plot lvr2plot_7 m|0 ma mac macr macro makecns man manova manova_estat manova_p manovatest mantel mark markin markout marksample mat mat_capp mat_order mat_put_rr mat_rapp mata mata_clear mata_describe mata_drop mata_matdescribe mata_matsave mata_matuse mata_memory mata_mlib mata_mosave mata_rename mata_which matalabel matcproc matlist matname matr matri matrix matrix_input__dlg matstrik mcc mcci md0_ md1_ md1debug_ md2_ md2debug_ mds mds_estat mds_p mdsconfig mdslong mdsmat mdsshepard mdytoe mdytof me_derd mean means median memory memsize menl meqparse mer merg merge meta mfp mfx mhelp mhodds minbound mixed_ll mixed_ll_reparm mkassert mkdir mkmat mkspline ml ml_5 ml_adjs ml_bhhhs ml_c_d ml_check ml_clear ml_cnt ml_debug ml_defd ml_e0 ml_e0_bfgs ml_e0_cycle ml_e0_dfp ml_e0i ml_e1 ml_e1_bfgs ml_e1_bhhh ml_e1_cycle ml_e1_dfp ml_e2 ml_e2_cycle ml_ebfg0 ml_ebfr0 ml_ebfr1 ml_ebh0q ml_ebhh0 ml_ebhr0 ml_ebr0i ml_ecr0i ml_edfp0 ml_edfr0 ml_edfr1 ml_edr0i ml_eds ml_eer0i ml_egr0i ml_elf ml_elf_bfgs ml_elf_bhhh ml_elf_cycle ml_elf_dfp ml_elfi ml_elfs ml_enr0i ml_enrr0 ml_erdu0 ml_erdu0_bfgs ml_erdu0_bhhh ml_erdu0_bhhhq ml_erdu0_cycle ml_erdu0_dfp ml_erdu0_nrbfgs ml_exde ml_footnote ml_geqnr ml_grad0 ml_graph ml_hbhhh ml_hd0 ml_hold ml_init ml_inv ml_log ml_max ml_mlout ml_mlout_8 ml_model ml_nb0 ml_opt ml_p ml_plot ml_query ml_rdgrd ml_repor ml_s_e ml_score ml_searc ml_technique ml_unhold mleval mlf_ mlmatbysum mlmatsum mlog mlogi mlogit mlogit_footnote mlogit_p mlopts mlsum mlvecsum mnl0_ mor more mov move mprobit mprobit_lf mprobit_p mrdu0_ mrdu1_ mvdecode mvencode mvreg mvreg_estat n|0 nbreg nbreg_al nbreg_lf nbreg_p nbreg_sw nestreg net newey newey_7 newey_p news nl nl_7 nl_9 nl_9_p nl_p nl_p_7 nlcom nlcom_p nlexp2 nlexp2_7 nlexp2a nlexp2a_7 nlexp3 nlexp3_7 nlgom3 nlgom3_7 nlgom4 nlgom4_7 nlinit nllog3 nllog3_7 nllog4 nllog4_7 nlog_rd nlogit nlogit_p nlogitgen nlogittree nlpred no nobreak noi nois noisi noisil noisily note notes notes_dlg nptrend numlabel numlist odbc old_ver olo olog ologi ologi_sw ologit ologit_p ologitp on one onew onewa oneway op_colnm op_comp op_diff op_inv op_str opr opro oprob oprob_sw oprobi oprobi_p oprobit oprobitp opts_exclusive order orthog orthpoly ou out outf outfi outfil outfile outs outsh outshe outshee outsheet ovtest pac pac_7 palette parse parse_dissim pause pca pca_8 pca_display pca_estat pca_p pca_rotate pcamat pchart pchart_7 pchi pchi_7 pcorr pctile pentium pergram pergram_7 permute permute_8 personal peto_st pkcollapse pkcross pkequiv pkexamine pkexamine_7 pkshape pksumm pksumm_7 pl plo plot plugin pnorm pnorm_7 poisgof poiss_lf poiss_sw poisso_p poisson poisson_estat post postclose postfile postutil pperron pr prais prais_e prais_e2 prais_p predict predictnl preserve print pro prob probi probit probit_estat probit_p proc_time procoverlay procrustes procrustes_estat procrustes_p profiler prog progr progra program prop proportion prtest prtesti pwcorr pwd q\\s qby qbys qchi qchi_7 qladder qladder_7 qnorm qnorm_7 qqplot qqplot_7 qreg qreg_c qreg_p qreg_sw qu quadchk quantile quantile_7 que quer query range ranksum ratio rchart rchart_7 rcof recast reclink recode reg reg3 reg3_p regdw regr regre regre_p2 regres regres_p regress regress_estat regriv_p remap ren rena renam rename renpfix repeat replace report reshape restore ret retu retur return rm rmdir robvar roccomp roccomp_7 roccomp_8 rocf_lf rocfit rocfit_8 rocgold rocplot rocplot_7 roctab roctab_7 rolling rologit rologit_p rot rota rotat rotate rotatemat rreg rreg_p ru run runtest rvfplot rvfplot_7 rvpplot rvpplot_7 sa safesum sample sampsi sav save savedresults saveold sc sca scal scala scalar scatter scm_mine sco scob_lf scob_p scobi_sw scobit scor score scoreplot scoreplot_help scree screeplot screeplot_help sdtest sdtesti se search separate seperate serrbar serrbar_7 serset set set_defaults sfrancia sh she shel shell shewhart shewhart_7 signestimationsample signrank signtest simul simul_7 simulate simulate_8 sktest sleep slogit slogit_d2 slogit_p smooth snapspan so sor sort spearman spikeplot spikeplot_7 spikeplt spline_x split sqreg sqreg_p sret sretu sretur sreturn ssc st st_ct st_hc st_hcd st_hcd_sh st_is st_issys st_note st_promo st_set st_show st_smpl st_subid stack statsby statsby_8 stbase stci stci_7 stcox stcox_estat stcox_fr stcox_fr_ll stcox_p stcox_sw stcoxkm stcoxkm_7 stcstat stcurv stcurve stcurve_7 stdes stem stepwise stereg stfill stgen stir stjoin stmc stmh stphplot stphplot_7 stphtest stphtest_7 stptime strate strate_7 streg streg_sw streset sts sts_7 stset stsplit stsum sttocc sttoct stvary stweib su suest suest_8 sum summ summa summar summari summariz summarize sunflower sureg survcurv survsum svar svar_p svmat svy svy_disp svy_dreg svy_est svy_est_7 svy_estat svy_get svy_gnbreg_p svy_head svy_header svy_heckman_p svy_heckprob_p svy_intreg_p svy_ivreg_p svy_logistic_p svy_logit_p svy_mlogit_p svy_nbreg_p svy_ologit_p svy_oprobit_p svy_poisson_p svy_probit_p svy_regress_p svy_sub svy_sub_7 svy_x svy_x_7 svy_x_p svydes svydes_8 svygen svygnbreg svyheckman svyheckprob svyintreg svyintreg_7 svyintrg svyivreg svylc svylog_p svylogit svymarkout svymarkout_8 svymean svymlog svymlogit svynbreg svyolog svyologit svyoprob svyoprobit svyopts svypois svypois_7 svypoisson svyprobit svyprobt svyprop svyprop_7 svyratio svyreg svyreg_p svyregress svyset svyset_7 svyset_8 svytab svytab_7 svytest svytotal sw sw_8 swcnreg swcox swereg swilk swlogis swlogit swologit swoprbt swpois swprobit swqreg swtobit swweib symmetry symmi symplot symplot_7 syntax sysdescribe sysdir sysuse szroeter ta tab tab1 tab2 tab_or tabd tabdi tabdis tabdisp tabi table tabodds tabodds_7 tabstat tabu tabul tabula tabulat tabulate te tempfile tempname tempvar tes test testnl testparm teststd tetrachoric time_it timer tis tob tobi tobit tobit_p tobit_sw token tokeni tokeniz tokenize tostring total translate translator transmap treat_ll treatr_p treatreg trim trimfill trnb_cons trnb_mean trpoiss_d2 trunc_ll truncr_p truncreg tsappend tset tsfill tsline tsline_ex tsreport tsrevar tsrline tsset tssmooth tsunab ttest ttesti tut_chk tut_wait tutorial tw tware_st two twoway twoway__fpfit_serset twoway__function_gen twoway__histogram_gen twoway__ipoint_serset twoway__ipoints_serset twoway__kdensity_gen twoway__lfit_serset twoway__normgen_gen twoway__pci_serset twoway__qfit_serset twoway__scatteri_serset twoway__sunflower_gen twoway_ksm_serset ty typ type typeof u|0 unab unabbrev unabcmd update us use uselabel var var_mkcompanion var_p varbasic varfcast vargranger varirf varirf_add varirf_cgraph varirf_create varirf_ctable varirf_describe varirf_dir varirf_drop varirf_erase varirf_graph varirf_ograph varirf_rename varirf_set varirf_table varlist varlmar varnorm varsoc varstable varstable_w varstable_w2 varwle vce vec vec_fevd vec_mkphi vec_p vec_p_w vecirf_create veclmar veclmar_w vecnorm vecnorm_w vecrank vecstable verinst vers versi versio version view viewsource vif vwls wdatetof webdescribe webseek webuse weib1_lf weib2_lf weib_lf weib_lf0 weibhet_glf weibhet_glf_sh weibhet_glfa weibhet_glfa_sh weibhet_gp weibhet_ilf weibhet_ilf_sh weibhet_ilfa weibhet_ilfa_sh weibhet_ip weibu_sw weibul_p weibull weibull_c weibull_s weibullhet wh whelp whi which whil while wilc_st wilcoxon win wind windo window winexec wntestb wntestb_7 wntestq xchart xchart_7 xcorr xcorr_7 xi xi_6 xmlsav xmlsave xmluse xpose xsh xshe xshel xshell xt_iis xt_tis xtab_p xtabond xtbin_p xtclog xtcloglog xtcloglog_8 xtcloglog_d2 xtcloglog_pa_p xtcloglog_re_p xtcnt_p xtcorr xtdata xtdes xtfront_p xtfrontier xtgee xtgee_elink xtgee_estat xtgee_makeivar xtgee_p xtgee_plink xtgls xtgls_p xthaus xthausman xtht_p xthtaylor xtile xtint_p xtintreg xtintreg_8 xtintreg_d2 xtintreg_p xtivp_1 xtivp_2 xtivreg xtline xtline_ex xtlogit xtlogit_8 xtlogit_d2 xtlogit_fe_p xtlogit_pa_p xtlogit_re_p xtmixed xtmixed_estat xtmixed_p xtnb_fe xtnb_lf xtnbreg xtnbreg_pa_p xtnbreg_refe_p xtpcse xtpcse_p xtpois xtpoisson xtpoisson_d2 xtpoisson_pa_p xtpoisson_refe_p xtpred xtprobit xtprobit_8 xtprobit_d2 xtprobit_re_p xtps_fe xtps_lf xtps_ren xtps_ren_8 xtrar_p xtrc xtrc_p xtrchh xtrefe_p xtreg xtreg_be xtreg_fe xtreg_ml xtreg_pa_p xtreg_re xtregar xtrere_p xtset xtsf_ll xtsf_llti xtsum xttab xttest0 xttobit xttobit_8 xttobit_p xttrans yx yxview__barlike_draw yxview_area_draw yxview_bar_draw yxview_dot_draw yxview_dropline_draw yxview_function_draw yxview_iarrow_draw yxview_ilabels_draw yxview_normal_draw yxview_pcarrow_draw yxview_pcbarrow_draw yxview_pccapsym_draw yxview_pcscatter_draw yxview_pcspike_draw yxview_rarea_draw yxview_rbar_draw yxview_rbarm_draw yxview_rcap_draw yxview_rcapsym_draw yxview_rconnected_draw yxview_rline_draw yxview_rscatter_draw yxview_rspike_draw yxview_spike_draw yxview_sunflower_draw zap_s zinb zinb_llf zinb_plf zip zip_llf zip_p zip_plf zt_ct_5 zt_hc_5 zt_hcd_5 zt_is_5 zt_iss_5 zt_sho_5 zt_smp_5 ztbase_5 ztcox_5 ztdes_5 ztereg_5 ztfill_5 ztgen_5 ztir_5 ztjoin_5 ztnb ztnb_p ztp ztp_p zts_5 ztset_5 ztspli_5 ztsum_5 zttoct_5 ztvary_5 ztweib_5",contains:[{className:"symbol",begin:/`[a-zA-Z0-9_]+'/},{className:"variable",begin:/\$\{?[a-zA-Z0-9_]+\}?/},{className:"string",variants:[{begin:'`"[^\r\n]*?"\''},{begin:'"[^\r\n"]*"'}]},{className:"built_in",variants:[{begin:"\\b(abs|acos|asin|atan|atan2|atanh|ceil|cloglog|comb|cos|digamma|exp|floor|invcloglog|invlogit|ln|lnfact|lnfactorial|lngamma|log|log10|max|min|mod|reldif|round|sign|sin|sqrt|sum|tan|tanh|trigamma|trunc|betaden|Binomial|binorm|binormal|chi2|chi2tail|dgammapda|dgammapdada|dgammapdadx|dgammapdx|dgammapdxdx|F|Fden|Ftail|gammaden|gammap|ibeta|invbinomial|invchi2|invchi2tail|invF|invFtail|invgammap|invibeta|invnchi2|invnFtail|invnibeta|invnorm|invnormal|invttail|nbetaden|nchi2|nFden|nFtail|nibeta|norm|normal|normalden|normd|npnchi2|tden|ttail|uniform|abbrev|char|index|indexnot|length|lower|ltrim|match|plural|proper|real|regexm|regexr|regexs|reverse|rtrim|string|strlen|strlower|strltrim|strmatch|strofreal|strpos|strproper|strreverse|strrtrim|strtrim|strupper|subinstr|subinword|substr|trim|upper|word|wordcount|_caller|autocode|byteorder|chop|clip|cond|e|epsdouble|epsfloat|group|inlist|inrange|irecode|matrix|maxbyte|maxdouble|maxfloat|maxint|maxlong|mi|minbyte|mindouble|minfloat|minint|minlong|missing|r|recode|replay|return|s|scalar|d|date|day|dow|doy|halfyear|mdy|month|quarter|week|year|d|daily|dofd|dofh|dofm|dofq|dofw|dofy|h|halfyearly|hofd|m|mofd|monthly|q|qofd|quarterly|tin|twithin|w|weekly|wofd|y|yearly|yh|ym|yofd|yq|yw|cholesky|colnumb|colsof|corr|det|diag|diag0cnt|el|get|hadamard|I|inv|invsym|issym|issymmetric|J|matmissing|matuniform|mreldif|nullmat|rownumb|rowsof|sweep|syminv|trace|vec|vecdiag)(?=\\()"}]},e.COMMENT("^[ \t]*\\*.*$",!1),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]}}},"28xz":function(e,t){e.exports=function(e){var t={className:"built_in",begin:"\\b(void|bool|int|int8|int16|int32|int64|uint|uint8|uint16|uint32|uint64|string|ref|array|double|float|auto|dictionary)"},n={className:"symbol",begin:"[a-zA-Z0-9_]+@"},a={className:"keyword",begin:"<",end:">",contains:[t,n]};return t.contains=[a],n.contains=[a],{name:"AngelScript",aliases:["asc"],keywords:"for in|0 break continue while do|0 return if else case switch namespace is cast or and xor not get|0 in inout|10 out override set|0 private public const default|0 final shared external mixin|10 enum typedef funcdef this super import from interface abstract|0 try catch protected explicit property",illegal:"(^using\\s+[A-Za-z0-9_\\.]+;$|\\bfunctions*[^\\(])",contains:[{className:"string",begin:"'",end:"'",illegal:"\\n",contains:[e.BACKSLASH_ESCAPE],relevance:0},{className:"string",begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE],relevance:0},{className:"string",begin:'"""',end:'"""'},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{beginKeywords:"interface namespace",end:"{",illegal:"[;.\\-]",contains:[{className:"symbol",begin:"[a-zA-Z0-9_]+"}]},{beginKeywords:"class",end:"{",illegal:"[;.\\-]",contains:[{className:"symbol",begin:"[a-zA-Z0-9_]+",contains:[{begin:"[:,]\\s*",contains:[{className:"symbol",begin:"[a-zA-Z0-9_]+"}]}]}]},t,n,{className:"literal",begin:"\\b(null|true|false)"},{className:"number",begin:"(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?f?|\\.\\d+f?)([eE][-+]?\\d+f?)?)"}]}}},"2SVd":function(e,t,n){"use strict";e.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},"2Vkh":function(e,t){e.exports=function(e){var t="foreach do while for if from to step else on-error and or not in",n="true false yes no nothing nil null",a={className:"variable",variants:[{begin:/\$[\w\d#@][\w\d_]*/},{begin:/\$\{(.*?)}/}]},r={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,a,{className:"variable",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]}]},i={className:"string",begin:/'/,end:/'/};return{name:"Microtik RouterOS script",aliases:["routeros","mikrotik"],case_insensitive:!0,lexemes:/:?[\w-]+/,keywords:{literal:n,keyword:t+" :"+t.split(" ").join(" :")+" :"+"global local beep delay put len typeof pick log time set find environment terminal error execute parse resolve toarray tobool toid toip toip6 tonum tostr totime".split(" ").join(" :")},contains:[{variants:[{begin:/^@/,end:/$/},{begin:/\/\*/,end:/\*\//},{begin:/%%/,end:/$/},{begin:/^'/,end:/$/},{begin:/^\s*\/[\w-]+=/,end:/$/},{begin:/\/\//,end:/$/},{begin:/^\[\\]$/},{begin:/<\//,end:/>/},{begin:/^facet /,end:/\}/},{begin:"^1\\.\\.(\\d+)$",end:/$/}],illegal:/./},e.COMMENT("^#","$"),r,i,a,{begin:/[\w-]+\=([^\s\{\}\[\]\(\)]+)/,relevance:0,returnBegin:!0,contains:[{className:"attribute",begin:/[^=]+/},{begin:/=/,endsWithParent:!0,relevance:0,contains:[r,i,a,{className:"literal",begin:"\\b("+n.split(" ").join("|")+")\\b"},{begin:/("[^"]*"|[^\s\{\}\[\]]+)/}]}]},{className:"number",begin:/\*[0-9a-fA-F]+/},{begin:"\\b("+"add remove enable disable set get print export edit find run debug error info warning".split(" ").join("|")+")([\\s[(]|])",returnBegin:!0,contains:[{className:"builtin-name",begin:/\w+/}]},{className:"built_in",variants:[{begin:"(\\.\\./|/|\\s)(("+"traffic-flow traffic-generator firewall scheduler aaa accounting address-list address align area bandwidth-server bfd bgp bridge client clock community config connection console customer default dhcp-client dhcp-server discovery dns e-mail ethernet filter firewall firmware gps graphing group hardware health hotspot identity igmp-proxy incoming instance interface ip ipsec ipv6 irq l2tp-server lcd ldp logging mac-server mac-winbox mangle manual mirror mme mpls nat nd neighbor network note ntp ospf ospf-v3 ovpn-server page peer pim ping policy pool port ppp pppoe-client pptp-server prefix profile proposal proxy queue radius resource rip ripng route routing screen script security-profiles server service service-port settings shares smb sms sniffer snmp snooper socks sstp-server system tool tracking type upgrade upnp user-manager users user vlan secret vrrp watchdog web-access wireless pptp pppoe lan wan layer7-protocol lease simple raw".split(" ").join("|")+");?\\s)+",relevance:10},{begin:/\.\./}]}]}}},"3EHr":function(e,t){e.exports=function(e){return{name:"SML (Standard ML)",aliases:["ml"],keywords:{keyword:"abstype and andalso as case datatype do else end eqtype exception fn fun functor handle if in include infix infixr let local nonfix of op open orelse raise rec sharing sig signature struct structure then type val with withtype where while",built_in:"array bool char exn int list option order real ref string substring vector unit word",literal:"true false NONE SOME LESS EQUAL GREATER nil"},illegal:/\/\/|>>/,lexemes:"[a-z_]\\w*!?",contains:[{className:"literal",begin:/\[(\|\|)?\]|\(\)/,relevance:0},e.COMMENT("\\(\\*","\\*\\)",{contains:["self"]}),{className:"symbol",begin:"'[A-Za-z_](?!')[\\w']*"},{className:"type",begin:"`[A-Z][\\w']*"},{className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},{begin:"[a-z_]\\w*'[\\w']*"},e.inherit(e.APOS_STRING_MODE,{className:"string",relevance:0}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),{className:"number",begin:"\\b(0[xX][a-fA-F0-9_]+[Lln]?|0[oO][0-7_]+[Lln]?|0[bB][01_]+[Lln]?|[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)",relevance:0},{begin:/[-=]>/}]}}},"3gkP":function(e,t){e.exports=function(e){var t=e.COMMENT("--","$");return{name:"SQL",case_insensitive:!0,illegal:/[<>{}*]/,contains:[{beginKeywords:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment values with",end:/;/,endsWithParent:!0,lexemes:/[\w\.]+/,keywords:{keyword:"as abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias all allocate allow alter always analyze ancillary and anti any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound bucket buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain explode export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force foreign form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour hours http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lateral lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minutes minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notnull notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second seconds section securefile security seed segment select self semi sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tablesample tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unnest unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace window with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null unknown",built_in:"array bigint binary bit blob bool boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text time timestamp tinyint varchar varchar2 varying void"},contains:[{className:"string",begin:"'",end:"'",contains:[{begin:"''"}]},{className:"string",begin:'"',end:'"',contains:[{begin:'""'}]},{className:"string",begin:"`",end:"`"},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,e.HASH_COMMENT_MODE]},e.C_BLOCK_COMMENT_MODE,t,e.HASH_COMMENT_MODE]}}},"3wag":function(e,t){e.exports=function(e){return{name:"GLSL",keywords:{keyword:"break continue discard do else for if return while switch case default attribute binding buffer ccw centroid centroid varying coherent column_major const cw depth_any depth_greater depth_less depth_unchanged early_fragment_tests equal_spacing flat fractional_even_spacing fractional_odd_spacing highp in index inout invariant invocations isolines layout line_strip lines lines_adjacency local_size_x local_size_y local_size_z location lowp max_vertices mediump noperspective offset origin_upper_left out packed patch pixel_center_integer point_mode points precise precision quads r11f_g11f_b10f r16 r16_snorm r16f r16i r16ui r32f r32i r32ui r8 r8_snorm r8i r8ui readonly restrict rg16 rg16_snorm rg16f rg16i rg16ui rg32f rg32i rg32ui rg8 rg8_snorm rg8i rg8ui rgb10_a2 rgb10_a2ui rgba16 rgba16_snorm rgba16f rgba16i rgba16ui rgba32f rgba32i rgba32ui rgba8 rgba8_snorm rgba8i rgba8ui row_major sample shared smooth std140 std430 stream triangle_strip triangles triangles_adjacency uniform varying vertices volatile writeonly",type:"atomic_uint bool bvec2 bvec3 bvec4 dmat2 dmat2x2 dmat2x3 dmat2x4 dmat3 dmat3x2 dmat3x3 dmat3x4 dmat4 dmat4x2 dmat4x3 dmat4x4 double dvec2 dvec3 dvec4 float iimage1D iimage1DArray iimage2D iimage2DArray iimage2DMS iimage2DMSArray iimage2DRect iimage3D iimageBuffer iimageCube iimageCubeArray image1D image1DArray image2D image2DArray image2DMS image2DMSArray image2DRect image3D imageBuffer imageCube imageCubeArray int isampler1D isampler1DArray isampler2D isampler2DArray isampler2DMS isampler2DMSArray isampler2DRect isampler3D isamplerBuffer isamplerCube isamplerCubeArray ivec2 ivec3 ivec4 mat2 mat2x2 mat2x3 mat2x4 mat3 mat3x2 mat3x3 mat3x4 mat4 mat4x2 mat4x3 mat4x4 sampler1D sampler1DArray sampler1DArrayShadow sampler1DShadow sampler2D sampler2DArray sampler2DArrayShadow sampler2DMS sampler2DMSArray sampler2DRect sampler2DRectShadow sampler2DShadow sampler3D samplerBuffer samplerCube samplerCubeArray samplerCubeArrayShadow samplerCubeShadow image1D uimage1DArray uimage2D uimage2DArray uimage2DMS uimage2DMSArray uimage2DRect uimage3D uimageBuffer uimageCube uimageCubeArray uint usampler1D usampler1DArray usampler2D usampler2DArray usampler2DMS usampler2DMSArray usampler2DRect usampler3D samplerBuffer usamplerCube usamplerCubeArray uvec2 uvec3 uvec4 vec2 vec3 vec4 void",built_in:"gl_MaxAtomicCounterBindings gl_MaxAtomicCounterBufferSize gl_MaxClipDistances gl_MaxClipPlanes gl_MaxCombinedAtomicCounterBuffers gl_MaxCombinedAtomicCounters gl_MaxCombinedImageUniforms gl_MaxCombinedImageUnitsAndFragmentOutputs gl_MaxCombinedTextureImageUnits gl_MaxComputeAtomicCounterBuffers gl_MaxComputeAtomicCounters gl_MaxComputeImageUniforms gl_MaxComputeTextureImageUnits gl_MaxComputeUniformComponents gl_MaxComputeWorkGroupCount gl_MaxComputeWorkGroupSize gl_MaxDrawBuffers gl_MaxFragmentAtomicCounterBuffers gl_MaxFragmentAtomicCounters gl_MaxFragmentImageUniforms gl_MaxFragmentInputComponents gl_MaxFragmentInputVectors gl_MaxFragmentUniformComponents gl_MaxFragmentUniformVectors gl_MaxGeometryAtomicCounterBuffers gl_MaxGeometryAtomicCounters gl_MaxGeometryImageUniforms gl_MaxGeometryInputComponents gl_MaxGeometryOutputComponents gl_MaxGeometryOutputVertices gl_MaxGeometryTextureImageUnits gl_MaxGeometryTotalOutputComponents gl_MaxGeometryUniformComponents gl_MaxGeometryVaryingComponents gl_MaxImageSamples gl_MaxImageUnits gl_MaxLights gl_MaxPatchVertices gl_MaxProgramTexelOffset gl_MaxTessControlAtomicCounterBuffers gl_MaxTessControlAtomicCounters gl_MaxTessControlImageUniforms gl_MaxTessControlInputComponents gl_MaxTessControlOutputComponents gl_MaxTessControlTextureImageUnits gl_MaxTessControlTotalOutputComponents gl_MaxTessControlUniformComponents gl_MaxTessEvaluationAtomicCounterBuffers gl_MaxTessEvaluationAtomicCounters gl_MaxTessEvaluationImageUniforms gl_MaxTessEvaluationInputComponents gl_MaxTessEvaluationOutputComponents gl_MaxTessEvaluationTextureImageUnits gl_MaxTessEvaluationUniformComponents gl_MaxTessGenLevel gl_MaxTessPatchComponents gl_MaxTextureCoords gl_MaxTextureImageUnits gl_MaxTextureUnits gl_MaxVaryingComponents gl_MaxVaryingFloats gl_MaxVaryingVectors gl_MaxVertexAtomicCounterBuffers gl_MaxVertexAtomicCounters gl_MaxVertexAttribs gl_MaxVertexImageUniforms gl_MaxVertexOutputComponents gl_MaxVertexOutputVectors gl_MaxVertexTextureImageUnits gl_MaxVertexUniformComponents gl_MaxVertexUniformVectors gl_MaxViewports gl_MinProgramTexelOffset gl_BackColor gl_BackLightModelProduct gl_BackLightProduct gl_BackMaterial gl_BackSecondaryColor gl_ClipDistance gl_ClipPlane gl_ClipVertex gl_Color gl_DepthRange gl_EyePlaneQ gl_EyePlaneR gl_EyePlaneS gl_EyePlaneT gl_Fog gl_FogCoord gl_FogFragCoord gl_FragColor gl_FragCoord gl_FragData gl_FragDepth gl_FrontColor gl_FrontFacing gl_FrontLightModelProduct gl_FrontLightProduct gl_FrontMaterial gl_FrontSecondaryColor gl_GlobalInvocationID gl_InstanceID gl_InvocationID gl_Layer gl_LightModel gl_LightSource gl_LocalInvocationID gl_LocalInvocationIndex gl_ModelViewMatrix gl_ModelViewMatrixInverse gl_ModelViewMatrixInverseTranspose gl_ModelViewMatrixTranspose gl_ModelViewProjectionMatrix gl_ModelViewProjectionMatrixInverse gl_ModelViewProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixTranspose gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_Normal gl_NormalMatrix gl_NormalScale gl_NumSamples gl_NumWorkGroups gl_ObjectPlaneQ gl_ObjectPlaneR gl_ObjectPlaneS gl_ObjectPlaneT gl_PatchVerticesIn gl_Point gl_PointCoord gl_PointSize gl_Position gl_PrimitiveID gl_PrimitiveIDIn gl_ProjectionMatrix gl_ProjectionMatrixInverse gl_ProjectionMatrixInverseTranspose gl_ProjectionMatrixTranspose gl_SampleID gl_SampleMask gl_SampleMaskIn gl_SamplePosition gl_SecondaryColor gl_TessCoord gl_TessLevelInner gl_TessLevelOuter gl_TexCoord gl_TextureEnvColor gl_TextureMatrix gl_TextureMatrixInverse gl_TextureMatrixInverseTranspose gl_TextureMatrixTranspose gl_Vertex gl_VertexID gl_ViewportIndex gl_WorkGroupID gl_WorkGroupSize gl_in gl_out EmitStreamVertex EmitVertex EndPrimitive EndStreamPrimitive abs acos acosh all any asin asinh atan atanh atomicAdd atomicAnd atomicCompSwap atomicCounter atomicCounterDecrement atomicCounterIncrement atomicExchange atomicMax atomicMin atomicOr atomicXor barrier bitCount bitfieldExtract bitfieldInsert bitfieldReverse ceil clamp cos cosh cross dFdx dFdy degrees determinant distance dot equal exp exp2 faceforward findLSB findMSB floatBitsToInt floatBitsToUint floor fma fract frexp ftransform fwidth greaterThan greaterThanEqual groupMemoryBarrier imageAtomicAdd imageAtomicAnd imageAtomicCompSwap imageAtomicExchange imageAtomicMax imageAtomicMin imageAtomicOr imageAtomicXor imageLoad imageSize imageStore imulExtended intBitsToFloat interpolateAtCentroid interpolateAtOffset interpolateAtSample inverse inversesqrt isinf isnan ldexp length lessThan lessThanEqual log log2 matrixCompMult max memoryBarrier memoryBarrierAtomicCounter memoryBarrierBuffer memoryBarrierImage memoryBarrierShared min mix mod modf noise1 noise2 noise3 noise4 normalize not notEqual outerProduct packDouble2x32 packHalf2x16 packSnorm2x16 packSnorm4x8 packUnorm2x16 packUnorm4x8 pow radians reflect refract round roundEven shadow1D shadow1DLod shadow1DProj shadow1DProjLod shadow2D shadow2DLod shadow2DProj shadow2DProjLod sign sin sinh smoothstep sqrt step tan tanh texelFetch texelFetchOffset texture texture1D texture1DLod texture1DProj texture1DProjLod texture2D texture2DLod texture2DProj texture2DProjLod texture3D texture3DLod texture3DProj texture3DProjLod textureCube textureCubeLod textureGather textureGatherOffset textureGatherOffsets textureGrad textureGradOffset textureLod textureLodOffset textureOffset textureProj textureProjGrad textureProjGradOffset textureProjLod textureProjLodOffset textureProjOffset textureQueryLevels textureQueryLod textureSize transpose trunc uaddCarry uintBitsToFloat umulExtended unpackDouble2x32 unpackHalf2x16 unpackSnorm2x16 unpackSnorm4x8 unpackUnorm2x16 unpackUnorm4x8 usubBorrow",literal:"true false"},illegal:'"',contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.C_NUMBER_MODE,{className:"meta",begin:"#",end:"$"}]}}},"4Fr3":function(e,t){e.exports=function(e){return{name:"PHP template",subLanguage:"xml",contains:[{begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},e.inherit(e.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]}]}}},"4Q+X":function(e,t){e.exports=function(e){return{name:"Verilog",aliases:["v","sv","svh"],case_insensitive:!1,keywords:{keyword:"accept_on alias always always_comb always_ff always_latch and assert assign assume automatic before begin bind bins binsof bit break buf|0 bufif0 bufif1 byte case casex casez cell chandle checker class clocking cmos config const constraint context continue cover covergroup coverpoint cross deassign default defparam design disable dist do edge else end endcase endchecker endclass endclocking endconfig endfunction endgenerate endgroup endinterface endmodule endpackage endprimitive endprogram endproperty endspecify endsequence endtable endtask enum event eventually expect export extends extern final first_match for force foreach forever fork forkjoin function generate|5 genvar global highz0 highz1 if iff ifnone ignore_bins illegal_bins implements implies import incdir include initial inout input inside instance int integer interconnect interface intersect join join_any join_none large let liblist library local localparam logic longint macromodule matches medium modport module nand negedge nettype new nexttime nmos nor noshowcancelled not notif0 notif1 or output package packed parameter pmos posedge primitive priority program property protected pull0 pull1 pulldown pullup pulsestyle_ondetect pulsestyle_onevent pure rand randc randcase randsequence rcmos real realtime ref reg reject_on release repeat restrict return rnmos rpmos rtran rtranif0 rtranif1 s_always s_eventually s_nexttime s_until s_until_with scalared sequence shortint shortreal showcancelled signed small soft solve specify specparam static string strong strong0 strong1 struct super supply0 supply1 sync_accept_on sync_reject_on table tagged task this throughout time timeprecision timeunit tran tranif0 tranif1 tri tri0 tri1 triand trior trireg type typedef union unique unique0 unsigned until until_with untyped use uwire var vectored virtual void wait wait_order wand weak weak0 weak1 while wildcard wire with within wor xnor xor",literal:"null",built_in:"$finish $stop $exit $fatal $error $warning $info $realtime $time $printtimescale $bitstoreal $bitstoshortreal $itor $signed $cast $bits $stime $timeformat $realtobits $shortrealtobits $rtoi $unsigned $asserton $assertkill $assertpasson $assertfailon $assertnonvacuouson $assertoff $assertcontrol $assertpassoff $assertfailoff $assertvacuousoff $isunbounded $sampled $fell $changed $past_gclk $fell_gclk $changed_gclk $rising_gclk $steady_gclk $coverage_control $coverage_get $coverage_save $set_coverage_db_name $rose $stable $past $rose_gclk $stable_gclk $future_gclk $falling_gclk $changing_gclk $display $coverage_get_max $coverage_merge $get_coverage $load_coverage_db $typename $unpacked_dimensions $left $low $increment $clog2 $ln $log10 $exp $sqrt $pow $floor $ceil $sin $cos $tan $countbits $onehot $isunknown $fatal $warning $dimensions $right $high $size $asin $acos $atan $atan2 $hypot $sinh $cosh $tanh $asinh $acosh $atanh $countones $onehot0 $error $info $random $dist_chi_square $dist_erlang $dist_exponential $dist_normal $dist_poisson $dist_t $dist_uniform $q_initialize $q_remove $q_exam $async$and$array $async$nand$array $async$or$array $async$nor$array $sync$and$array $sync$nand$array $sync$or$array $sync$nor$array $q_add $q_full $psprintf $async$and$plane $async$nand$plane $async$or$plane $async$nor$plane $sync$and$plane $sync$nand$plane $sync$or$plane $sync$nor$plane $system $display $displayb $displayh $displayo $strobe $strobeb $strobeh $strobeo $write $readmemb $readmemh $writememh $value$plusargs $dumpvars $dumpon $dumplimit $dumpports $dumpportson $dumpportslimit $writeb $writeh $writeo $monitor $monitorb $monitorh $monitoro $writememb $dumpfile $dumpoff $dumpall $dumpflush $dumpportsoff $dumpportsall $dumpportsflush $fclose $fdisplay $fdisplayb $fdisplayh $fdisplayo $fstrobe $fstrobeb $fstrobeh $fstrobeo $swrite $swriteb $swriteh $swriteo $fscanf $fread $fseek $fflush $feof $fopen $fwrite $fwriteb $fwriteh $fwriteo $fmonitor $fmonitorb $fmonitorh $fmonitoro $sformat $sformatf $fgetc $ungetc $fgets $sscanf $rewind $ftell $ferror"},lexemes:/[\w\$]+/,contains:[e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE,e.QUOTE_STRING_MODE,{className:"number",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:"\\b((\\d+'(b|h|o|d|B|H|O|D))[0-9xzXZa-fA-F_]+)"},{begin:"\\B(('(b|h|o|d|B|H|O|D))[0-9xzXZa-fA-F_]+)"},{begin:"\\b([0-9_])+",relevance:0}]},{className:"variable",variants:[{begin:"#\\((?!parameter).+\\)"},{begin:"\\.\\w+",relevance:0}]},{className:"meta",begin:"`",end:"$",keywords:{"meta-keyword":"define __FILE__ __LINE__ begin_keywords celldefine default_nettype define else elsif end_keywords endcelldefine endif ifdef ifndef include line nounconnected_drive pragma resetall timescale unconnected_drive undef undefineall"},relevance:0}]}}},"4qfg":function(e,t){e.exports=function(e){var t={className:"string",variants:[{begin:'"',end:'"',contains:[{begin:'""',relevance:0}]},{begin:"'",end:"'",contains:[{begin:"''",relevance:0}]}]},n={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"define undef ifdef ifndef else endif include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(t,{className:"meta-string"}),{className:"meta-string",begin:/<[^\n>]*>/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]};return{name:"SQF",aliases:["sqf"],case_insensitive:!0,keywords:{keyword:"case catch default do else exit exitWith for forEach from if private switch then throw to try waitUntil while with",built_in:"abs accTime acos action actionIDs actionKeys actionKeysImages actionKeysNames actionKeysNamesArray actionName actionParams activateAddons activatedAddons activateKey add3DENConnection add3DENEventHandler add3DENLayer addAction addBackpack addBackpackCargo addBackpackCargoGlobal addBackpackGlobal addCamShake addCuratorAddons addCuratorCameraArea addCuratorEditableObjects addCuratorEditingArea addCuratorPoints addEditorObject addEventHandler addForce addGoggles addGroupIcon addHandgunItem addHeadgear addItem addItemCargo addItemCargoGlobal addItemPool addItemToBackpack addItemToUniform addItemToVest addLiveStats addMagazine addMagazineAmmoCargo addMagazineCargo addMagazineCargoGlobal addMagazineGlobal addMagazinePool addMagazines addMagazineTurret addMenu addMenuItem addMissionEventHandler addMPEventHandler addMusicEventHandler addOwnedMine addPlayerScores addPrimaryWeaponItem addPublicVariableEventHandler addRating addResources addScore addScoreSide addSecondaryWeaponItem addSwitchableUnit addTeamMember addToRemainsCollector addTorque addUniform addVehicle addVest addWaypoint addWeapon addWeaponCargo addWeaponCargoGlobal addWeaponGlobal addWeaponItem addWeaponPool addWeaponTurret admin agent agents AGLToASL aimedAtTarget aimPos airDensityRTD airplaneThrottle airportSide AISFinishHeal alive all3DENEntities allAirports allControls allCurators allCutLayers allDead allDeadMen allDisplays allGroups allMapMarkers allMines allMissionObjects allow3DMode allowCrewInImmobile allowCuratorLogicIgnoreAreas allowDamage allowDammage allowFileOperations allowFleeing allowGetIn allowSprint allPlayers allSimpleObjects allSites allTurrets allUnits allUnitsUAV allVariables ammo ammoOnPylon and animate animateBay animateDoor animatePylon animateSource animationNames animationPhase animationSourcePhase animationState append apply armoryPoints arrayIntersect asin ASLToAGL ASLToATL assert assignAsCargo assignAsCargoIndex assignAsCommander assignAsDriver assignAsGunner assignAsTurret assignCurator assignedCargo assignedCommander assignedDriver assignedGunner assignedItems assignedTarget assignedTeam assignedVehicle assignedVehicleRole assignItem assignTeam assignToAirport atan atan2 atg ATLToASL attachedObject attachedObjects attachedTo attachObject attachTo attackEnabled backpack backpackCargo backpackContainer backpackItems backpackMagazines backpackSpaceFor behaviour benchmark binocular boundingBox boundingBoxReal boundingCenter breakOut breakTo briefingName buildingExit buildingPos buttonAction buttonSetAction cadetMode call callExtension camCommand camCommit camCommitPrepared camCommitted camConstuctionSetParams camCreate camDestroy cameraEffect cameraEffectEnableHUD cameraInterest cameraOn cameraView campaignConfigFile camPreload camPreloaded camPrepareBank camPrepareDir camPrepareDive camPrepareFocus camPrepareFov camPrepareFovRange camPreparePos camPrepareRelPos camPrepareTarget camSetBank camSetDir camSetDive camSetFocus camSetFov camSetFovRange camSetPos camSetRelPos camSetTarget camTarget camUseNVG canAdd canAddItemToBackpack canAddItemToUniform canAddItemToVest cancelSimpleTaskDestination canFire canMove canSlingLoad canStand canSuspend canTriggerDynamicSimulation canUnloadInCombat canVehicleCargo captive captiveNum cbChecked cbSetChecked ceil channelEnabled cheatsEnabled checkAIFeature checkVisibility className clearAllItemsFromBackpack clearBackpackCargo clearBackpackCargoGlobal clearGroupIcons clearItemCargo clearItemCargoGlobal clearItemPool clearMagazineCargo clearMagazineCargoGlobal clearMagazinePool clearOverlay clearRadio clearWeaponCargo clearWeaponCargoGlobal clearWeaponPool clientOwner closeDialog closeDisplay closeOverlay collapseObjectTree collect3DENHistory collectiveRTD combatMode commandArtilleryFire commandChat commander commandFire commandFollow commandFSM commandGetOut commandingMenu commandMove commandRadio commandStop commandSuppressiveFire commandTarget commandWatch comment commitOverlay compile compileFinal completedFSM composeText configClasses configFile configHierarchy configName configProperties configSourceAddonList configSourceMod configSourceModList confirmSensorTarget connectTerminalToUAV controlsGroupCtrl copyFromClipboard copyToClipboard copyWaypoints cos count countEnemy countFriendly countSide countType countUnknown create3DENComposition create3DENEntity createAgent createCenter createDialog createDiaryLink createDiaryRecord createDiarySubject createDisplay createGearDialog createGroup createGuardedPoint createLocation createMarker createMarkerLocal createMenu createMine createMissionDisplay createMPCampaignDisplay createSimpleObject createSimpleTask createSite createSoundSource createTask createTeam createTrigger createUnit createVehicle createVehicleCrew createVehicleLocal crew ctAddHeader ctAddRow ctClear ctCurSel ctData ctFindHeaderRows ctFindRowHeader ctHeaderControls ctHeaderCount ctRemoveHeaders ctRemoveRows ctrlActivate ctrlAddEventHandler ctrlAngle ctrlAutoScrollDelay ctrlAutoScrollRewind ctrlAutoScrollSpeed ctrlChecked ctrlClassName ctrlCommit ctrlCommitted ctrlCreate ctrlDelete ctrlEnable ctrlEnabled ctrlFade ctrlHTMLLoaded ctrlIDC ctrlIDD ctrlMapAnimAdd ctrlMapAnimClear ctrlMapAnimCommit ctrlMapAnimDone ctrlMapCursor ctrlMapMouseOver ctrlMapScale ctrlMapScreenToWorld ctrlMapWorldToScreen ctrlModel ctrlModelDirAndUp ctrlModelScale ctrlParent ctrlParentControlsGroup ctrlPosition ctrlRemoveAllEventHandlers ctrlRemoveEventHandler ctrlScale ctrlSetActiveColor ctrlSetAngle ctrlSetAutoScrollDelay ctrlSetAutoScrollRewind ctrlSetAutoScrollSpeed ctrlSetBackgroundColor ctrlSetChecked ctrlSetEventHandler ctrlSetFade ctrlSetFocus ctrlSetFont ctrlSetFontH1 ctrlSetFontH1B ctrlSetFontH2 ctrlSetFontH2B ctrlSetFontH3 ctrlSetFontH3B ctrlSetFontH4 ctrlSetFontH4B ctrlSetFontH5 ctrlSetFontH5B ctrlSetFontH6 ctrlSetFontH6B ctrlSetFontHeight ctrlSetFontHeightH1 ctrlSetFontHeightH2 ctrlSetFontHeightH3 ctrlSetFontHeightH4 ctrlSetFontHeightH5 ctrlSetFontHeightH6 ctrlSetFontHeightSecondary ctrlSetFontP ctrlSetFontPB ctrlSetFontSecondary ctrlSetForegroundColor ctrlSetModel ctrlSetModelDirAndUp ctrlSetModelScale ctrlSetPixelPrecision ctrlSetPosition ctrlSetScale ctrlSetStructuredText ctrlSetText ctrlSetTextColor ctrlSetTooltip ctrlSetTooltipColorBox ctrlSetTooltipColorShade ctrlSetTooltipColorText ctrlShow ctrlShown ctrlText ctrlTextHeight ctrlTextWidth ctrlType ctrlVisible ctRowControls ctRowCount ctSetCurSel ctSetData ctSetHeaderTemplate ctSetRowTemplate ctSetValue ctValue curatorAddons curatorCamera curatorCameraArea curatorCameraAreaCeiling curatorCoef curatorEditableObjects curatorEditingArea curatorEditingAreaType curatorMouseOver curatorPoints curatorRegisteredObjects curatorSelected curatorWaypointCost current3DENOperation currentChannel currentCommand currentMagazine currentMagazineDetail currentMagazineDetailTurret currentMagazineTurret currentMuzzle currentNamespace currentTask currentTasks currentThrowable currentVisionMode currentWaypoint currentWeapon currentWeaponMode currentWeaponTurret currentZeroing cursorObject cursorTarget customChat customRadio cutFadeOut cutObj cutRsc cutText damage date dateToNumber daytime deActivateKey debriefingText debugFSM debugLog deg delete3DENEntities deleteAt deleteCenter deleteCollection deleteEditorObject deleteGroup deleteGroupWhenEmpty deleteIdentity deleteLocation deleteMarker deleteMarkerLocal deleteRange deleteResources deleteSite deleteStatus deleteTeam deleteVehicle deleteVehicleCrew deleteWaypoint detach detectedMines diag_activeMissionFSMs diag_activeScripts diag_activeSQFScripts diag_activeSQSScripts diag_captureFrame diag_captureFrameToFile diag_captureSlowFrame diag_codePerformance diag_drawMode diag_enable diag_enabled diag_fps diag_fpsMin diag_frameNo diag_lightNewLoad diag_list diag_log diag_logSlowFrame diag_mergeConfigFile diag_recordTurretLimits diag_setLightNew diag_tickTime diag_toggle dialog diarySubjectExists didJIP didJIPOwner difficulty difficultyEnabled difficultyEnabledRTD difficultyOption direction directSay disableAI disableCollisionWith disableConversation disableDebriefingStats disableMapIndicators disableNVGEquipment disableRemoteSensors disableSerialization disableTIEquipment disableUAVConnectability disableUserInput displayAddEventHandler displayCtrl displayParent displayRemoveAllEventHandlers displayRemoveEventHandler displaySetEventHandler dissolveTeam distance distance2D distanceSqr distributionRegion do3DENAction doArtilleryFire doFire doFollow doFSM doGetOut doMove doorPhase doStop doSuppressiveFire doTarget doWatch drawArrow drawEllipse drawIcon drawIcon3D drawLine drawLine3D drawLink drawLocation drawPolygon drawRectangle drawTriangle driver drop dynamicSimulationDistance dynamicSimulationDistanceCoef dynamicSimulationEnabled dynamicSimulationSystemEnabled echo edit3DENMissionAttributes editObject editorSetEventHandler effectiveCommander emptyPositions enableAI enableAIFeature enableAimPrecision enableAttack enableAudioFeature enableAutoStartUpRTD enableAutoTrimRTD enableCamShake enableCaustics enableChannel enableCollisionWith enableCopilot enableDebriefingStats enableDiagLegend enableDynamicSimulation enableDynamicSimulationSystem enableEndDialog enableEngineArtillery enableEnvironment enableFatigue enableGunLights enableInfoPanelComponent enableIRLasers enableMimics enablePersonTurret enableRadio enableReload enableRopeAttach enableSatNormalOnDetail enableSaving enableSentences enableSimulation enableSimulationGlobal enableStamina enableTeamSwitch enableTraffic enableUAVConnectability enableUAVWaypoints enableVehicleCargo enableVehicleSensor enableWeaponDisassembly endLoadingScreen endMission engineOn enginesIsOnRTD enginesRpmRTD enginesTorqueRTD entities environmentEnabled estimatedEndServerTime estimatedTimeLeft evalObjectArgument everyBackpack everyContainer exec execEditorScript execFSM execVM exp expectedDestination exportJIPMessages eyeDirection eyePos face faction fadeMusic fadeRadio fadeSound fadeSpeech failMission fillWeaponsFromPool find findCover findDisplay findEditorObject findEmptyPosition findEmptyPositionReady findIf findNearestEnemy finishMissionInit finite fire fireAtTarget firstBackpack flag flagAnimationPhase flagOwner flagSide flagTexture fleeing floor flyInHeight flyInHeightASL fog fogForecast fogParams forceAddUniform forcedMap forceEnd forceFlagTexture forceFollowRoad forceMap forceRespawn forceSpeed forceWalk forceWeaponFire forceWeatherChange forEachMember forEachMemberAgent forEachMemberTeam forgetTarget format formation formationDirection formationLeader formationMembers formationPosition formationTask formatText formLeader freeLook fromEditor fuel fullCrew gearIDCAmmoCount gearSlotAmmoCount gearSlotData get3DENActionState get3DENAttribute get3DENCamera get3DENConnections get3DENEntity get3DENEntityID get3DENGrid get3DENIconsVisible get3DENLayerEntities get3DENLinesVisible get3DENMissionAttribute get3DENMouseOver get3DENSelected getAimingCoef getAllEnvSoundControllers getAllHitPointsDamage getAllOwnedMines getAllSoundControllers getAmmoCargo getAnimAimPrecision getAnimSpeedCoef getArray getArtilleryAmmo getArtilleryComputerSettings getArtilleryETA getAssignedCuratorLogic getAssignedCuratorUnit getBackpackCargo getBleedingRemaining getBurningValue getCameraViewDirection getCargoIndex getCenterOfMass getClientState getClientStateNumber getCompatiblePylonMagazines getConnectedUAV getContainerMaxLoad getCursorObjectParams getCustomAimCoef getDammage getDescription getDir getDirVisual getDLCAssetsUsage getDLCAssetsUsageByName getDLCs getEditorCamera getEditorMode getEditorObjectScope getElevationOffset getEnvSoundController getFatigue getForcedFlagTexture getFriend getFSMVariable getFuelCargo getGroupIcon getGroupIconParams getGroupIcons getHideFrom getHit getHitIndex getHitPointDamage getItemCargo getMagazineCargo getMarkerColor getMarkerPos getMarkerSize getMarkerType getMass getMissionConfig getMissionConfigValue getMissionDLCs getMissionLayerEntities getModelInfo getMousePosition getMusicPlayedTime getNumber getObjectArgument getObjectChildren getObjectDLC getObjectMaterials getObjectProxy getObjectTextures getObjectType getObjectViewDistance getOxygenRemaining getPersonUsedDLCs getPilotCameraDirection getPilotCameraPosition getPilotCameraRotation getPilotCameraTarget getPlateNumber getPlayerChannel getPlayerScores getPlayerUID getPos getPosASL getPosASLVisual getPosASLW getPosATL getPosATLVisual getPosVisual getPosWorld getPylonMagazines getRelDir getRelPos getRemoteSensorsDisabled getRepairCargo getResolution getShadowDistance getShotParents getSlingLoad getSoundController getSoundControllerResult getSpeed getStamina getStatValue getSuppression getTerrainGrid getTerrainHeightASL getText getTotalDLCUsageTime getUnitLoadout getUnitTrait getUserMFDText getUserMFDvalue getVariable getVehicleCargo getWeaponCargo getWeaponSway getWingsOrientationRTD getWingsPositionRTD getWPPos glanceAt globalChat globalRadio goggles goto group groupChat groupFromNetId groupIconSelectable groupIconsVisible groupId groupOwner groupRadio groupSelectedUnits groupSelectUnit gunner gusts halt handgunItems handgunMagazine handgunWeapon handsHit hasInterface hasPilotCamera hasWeapon hcAllGroups hcGroupParams hcLeader hcRemoveAllGroups hcRemoveGroup hcSelected hcSelectGroup hcSetGroup hcShowBar hcShownBar headgear hideBody hideObject hideObjectGlobal hideSelection hint hintC hintCadet hintSilent hmd hostMission htmlLoad HUDMovementLevels humidity image importAllGroups importance in inArea inAreaArray incapacitatedState inflame inflamed infoPanel infoPanelComponentEnabled infoPanelComponents infoPanels inGameUISetEventHandler inheritsFrom initAmbientLife inPolygon inputAction inRangeOfArtillery insertEditorObject intersect is3DEN is3DENMultiplayer isAbleToBreathe isAgent isArray isAutoHoverOn isAutonomous isAutotest isBleeding isBurning isClass isCollisionLightOn isCopilotEnabled isDamageAllowed isDedicated isDLCAvailable isEngineOn isEqualTo isEqualType isEqualTypeAll isEqualTypeAny isEqualTypeArray isEqualTypeParams isFilePatchingEnabled isFlashlightOn isFlatEmpty isForcedWalk isFormationLeader isGroupDeletedWhenEmpty isHidden isInRemainsCollector isInstructorFigureEnabled isIRLaserOn isKeyActive isKindOf isLaserOn isLightOn isLocalized isManualFire isMarkedForCollection isMultiplayer isMultiplayerSolo isNil isNull isNumber isObjectHidden isObjectRTD isOnRoad isPipEnabled isPlayer isRealTime isRemoteExecuted isRemoteExecutedJIP isServer isShowing3DIcons isSimpleObject isSprintAllowed isStaminaEnabled isSteamMission isStreamFriendlyUIEnabled isText isTouchingGround isTurnedOut isTutHintsEnabled isUAVConnectable isUAVConnected isUIContext isUniformAllowed isVehicleCargo isVehicleRadarOn isVehicleSensorEnabled isWalking isWeaponDeployed isWeaponRested itemCargo items itemsWithMagazines join joinAs joinAsSilent joinSilent joinString kbAddDatabase kbAddDatabaseTargets kbAddTopic kbHasTopic kbReact kbRemoveTopic kbTell kbWasSaid keyImage keyName knowsAbout land landAt landResult language laserTarget lbAdd lbClear lbColor lbColorRight lbCurSel lbData lbDelete lbIsSelected lbPicture lbPictureRight lbSelection lbSetColor lbSetColorRight lbSetCurSel lbSetData lbSetPicture lbSetPictureColor lbSetPictureColorDisabled lbSetPictureColorSelected lbSetPictureRight lbSetPictureRightColor lbSetPictureRightColorDisabled lbSetPictureRightColorSelected lbSetSelectColor lbSetSelectColorRight lbSetSelected lbSetText lbSetTextRight lbSetTooltip lbSetValue lbSize lbSort lbSortByValue lbText lbTextRight lbValue leader leaderboardDeInit leaderboardGetRows leaderboardInit leaderboardRequestRowsFriends leaderboardsRequestUploadScore leaderboardsRequestUploadScoreKeepBest leaderboardState leaveVehicle libraryCredits libraryDisclaimers lifeState lightAttachObject lightDetachObject lightIsOn lightnings limitSpeed linearConversion lineIntersects lineIntersectsObjs lineIntersectsSurfaces lineIntersectsWith linkItem list listObjects listRemoteTargets listVehicleSensors ln lnbAddArray lnbAddColumn lnbAddRow lnbClear lnbColor lnbCurSelRow lnbData lnbDeleteColumn lnbDeleteRow lnbGetColumnsPosition lnbPicture lnbSetColor lnbSetColumnsPos lnbSetCurSelRow lnbSetData lnbSetPicture lnbSetText lnbSetValue lnbSize lnbSort lnbSortByValue lnbText lnbValue load loadAbs loadBackpack loadFile loadGame loadIdentity loadMagazine loadOverlay loadStatus loadUniform loadVest local localize locationPosition lock lockCameraTo lockCargo lockDriver locked lockedCargo lockedDriver lockedTurret lockIdentity lockTurret lockWP log logEntities logNetwork logNetworkTerminate lookAt lookAtPos magazineCargo magazines magazinesAllTurrets magazinesAmmo magazinesAmmoCargo magazinesAmmoFull magazinesDetail magazinesDetailBackpack magazinesDetailUniform magazinesDetailVest magazinesTurret magazineTurretAmmo mapAnimAdd mapAnimClear mapAnimCommit mapAnimDone mapCenterOnCamera mapGridPosition markAsFinishedOnSteam markerAlpha markerBrush markerColor markerDir markerPos markerShape markerSize markerText markerType max members menuAction menuAdd menuChecked menuClear menuCollapse menuData menuDelete menuEnable menuEnabled menuExpand menuHover menuPicture menuSetAction menuSetCheck menuSetData menuSetPicture menuSetValue menuShortcut menuShortcutText menuSize menuSort menuText menuURL menuValue min mineActive mineDetectedBy missionConfigFile missionDifficulty missionName missionNamespace missionStart missionVersion mod modelToWorld modelToWorldVisual modelToWorldVisualWorld modelToWorldWorld modParams moonIntensity moonPhase morale move move3DENCamera moveInAny moveInCargo moveInCommander moveInDriver moveInGunner moveInTurret moveObjectToEnd moveOut moveTime moveTo moveToCompleted moveToFailed musicVolume name nameSound nearEntities nearestBuilding nearestLocation nearestLocations nearestLocationWithDubbing nearestObject nearestObjects nearestTerrainObjects nearObjects nearObjectsReady nearRoads nearSupplies nearTargets needReload netId netObjNull newOverlay nextMenuItemIndex nextWeatherChange nMenuItems not numberOfEnginesRTD numberToDate objectCurators objectFromNetId objectParent objStatus onBriefingGroup onBriefingNotes onBriefingPlan onBriefingTeamSwitch onCommandModeChanged onDoubleClick onEachFrame onGroupIconClick onGroupIconOverEnter onGroupIconOverLeave onHCGroupSelectionChanged onMapSingleClick onPlayerConnected onPlayerDisconnected onPreloadFinished onPreloadStarted onShowNewObject onTeamSwitch openCuratorInterface openDLCPage openMap openSteamApp openYoutubeVideo or orderGetIn overcast overcastForecast owner param params parseNumber parseSimpleArray parseText parsingNamespace particlesQuality pickWeaponPool pitch pixelGrid pixelGridBase pixelGridNoUIScale pixelH pixelW playableSlotsNumber playableUnits playAction playActionNow player playerRespawnTime playerSide playersNumber playGesture playMission playMove playMoveNow playMusic playScriptedMission playSound playSound3D position positionCameraToWorld posScreenToWorld posWorldToScreen ppEffectAdjust ppEffectCommit ppEffectCommitted ppEffectCreate ppEffectDestroy ppEffectEnable ppEffectEnabled ppEffectForceInNVG precision preloadCamera preloadObject preloadSound preloadTitleObj preloadTitleRsc preprocessFile preprocessFileLineNumbers primaryWeapon primaryWeaponItems primaryWeaponMagazine priority processDiaryLink productVersion profileName profileNamespace profileNameSteam progressLoadingScreen progressPosition progressSetPosition publicVariable publicVariableClient publicVariableServer pushBack pushBackUnique putWeaponPool queryItemsPool queryMagazinePool queryWeaponPool rad radioChannelAdd radioChannelCreate radioChannelRemove radioChannelSetCallSign radioChannelSetLabel radioVolume rain rainbow random rank rankId rating rectangular registeredTasks registerTask reload reloadEnabled remoteControl remoteExec remoteExecCall remoteExecutedOwner remove3DENConnection remove3DENEventHandler remove3DENLayer removeAction removeAll3DENEventHandlers removeAllActions removeAllAssignedItems removeAllContainers removeAllCuratorAddons removeAllCuratorCameraAreas removeAllCuratorEditingAreas removeAllEventHandlers removeAllHandgunItems removeAllItems removeAllItemsWithMagazines removeAllMissionEventHandlers removeAllMPEventHandlers removeAllMusicEventHandlers removeAllOwnedMines removeAllPrimaryWeaponItems removeAllWeapons removeBackpack removeBackpackGlobal removeCuratorAddons removeCuratorCameraArea removeCuratorEditableObjects removeCuratorEditingArea removeDrawIcon removeDrawLinks removeEventHandler removeFromRemainsCollector removeGoggles removeGroupIcon removeHandgunItem removeHeadgear removeItem removeItemFromBackpack removeItemFromUniform removeItemFromVest removeItems removeMagazine removeMagazineGlobal removeMagazines removeMagazinesTurret removeMagazineTurret removeMenuItem removeMissionEventHandler removeMPEventHandler removeMusicEventHandler removeOwnedMine removePrimaryWeaponItem removeSecondaryWeaponItem removeSimpleTask removeSwitchableUnit removeTeamMember removeUniform removeVest removeWeapon removeWeaponAttachmentCargo removeWeaponCargo removeWeaponGlobal removeWeaponTurret reportRemoteTarget requiredVersion resetCamShake resetSubgroupDirection resize resources respawnVehicle restartEditorCamera reveal revealMine reverse reversedMouseY roadAt roadsConnectedTo roleDescription ropeAttachedObjects ropeAttachedTo ropeAttachEnabled ropeAttachTo ropeCreate ropeCut ropeDestroy ropeDetach ropeEndPosition ropeLength ropes ropeUnwind ropeUnwound rotorsForcesRTD rotorsRpmRTD round runInitScript safeZoneH safeZoneW safeZoneWAbs safeZoneX safeZoneXAbs safeZoneY save3DENInventory saveGame saveIdentity saveJoysticks saveOverlay saveProfileNamespace saveStatus saveVar savingEnabled say say2D say3D scopeName score scoreSide screenshot screenToWorld scriptDone scriptName scudState secondaryWeapon secondaryWeaponItems secondaryWeaponMagazine select selectBestPlaces selectDiarySubject selectedEditorObjects selectEditorObject selectionNames selectionPosition selectLeader selectMax selectMin selectNoPlayer selectPlayer selectRandom selectRandomWeighted selectWeapon selectWeaponTurret sendAUMessage sendSimpleCommand sendTask sendTaskResult sendUDPMessage serverCommand serverCommandAvailable serverCommandExecutable serverName serverTime set set3DENAttribute set3DENAttributes set3DENGrid set3DENIconsVisible set3DENLayer set3DENLinesVisible set3DENLogicType set3DENMissionAttribute set3DENMissionAttributes set3DENModelsVisible set3DENObjectType set3DENSelected setAccTime setActualCollectiveRTD setAirplaneThrottle setAirportSide setAmmo setAmmoCargo setAmmoOnPylon setAnimSpeedCoef setAperture setApertureNew setArmoryPoints setAttributes setAutonomous setBehaviour setBleedingRemaining setBrakesRTD setCameraInterest setCamShakeDefParams setCamShakeParams setCamUseTI setCaptive setCenterOfMass setCollisionLight setCombatMode setCompassOscillation setConvoySeparation setCuratorCameraAreaCeiling setCuratorCoef setCuratorEditingAreaType setCuratorWaypointCost setCurrentChannel setCurrentTask setCurrentWaypoint setCustomAimCoef setCustomWeightRTD setDamage setDammage setDate setDebriefingText setDefaultCamera setDestination setDetailMapBlendPars setDir setDirection setDrawIcon setDriveOnPath setDropInterval setDynamicSimulationDistance setDynamicSimulationDistanceCoef setEditorMode setEditorObjectScope setEffectCondition setEngineRPMRTD setFace setFaceAnimation setFatigue setFeatureType setFlagAnimationPhase setFlagOwner setFlagSide setFlagTexture setFog setFormation setFormationTask setFormDir setFriend setFromEditor setFSMVariable setFuel setFuelCargo setGroupIcon setGroupIconParams setGroupIconsSelectable setGroupIconsVisible setGroupId setGroupIdGlobal setGroupOwner setGusts setHideBehind setHit setHitIndex setHitPointDamage setHorizonParallaxCoef setHUDMovementLevels setIdentity setImportance setInfoPanel setLeader setLightAmbient setLightAttenuation setLightBrightness setLightColor setLightDayLight setLightFlareMaxDistance setLightFlareSize setLightIntensity setLightnings setLightUseFlare setLocalWindParams setMagazineTurretAmmo setMarkerAlpha setMarkerAlphaLocal setMarkerBrush setMarkerBrushLocal setMarkerColor setMarkerColorLocal setMarkerDir setMarkerDirLocal setMarkerPos setMarkerPosLocal setMarkerShape setMarkerShapeLocal setMarkerSize setMarkerSizeLocal setMarkerText setMarkerTextLocal setMarkerType setMarkerTypeLocal setMass setMimic setMousePosition setMusicEffect setMusicEventHandler setName setNameSound setObjectArguments setObjectMaterial setObjectMaterialGlobal setObjectProxy setObjectTexture setObjectTextureGlobal setObjectViewDistance setOvercast setOwner setOxygenRemaining setParticleCircle setParticleClass setParticleFire setParticleParams setParticleRandom setPilotCameraDirection setPilotCameraRotation setPilotCameraTarget setPilotLight setPiPEffect setPitch setPlateNumber setPlayable setPlayerRespawnTime setPos setPosASL setPosASL2 setPosASLW setPosATL setPosition setPosWorld setPylonLoadOut setPylonsPriority setRadioMsg setRain setRainbow setRandomLip setRank setRectangular setRepairCargo setRotorBrakeRTD setShadowDistance setShotParents setSide setSimpleTaskAlwaysVisible setSimpleTaskCustomData setSimpleTaskDescription setSimpleTaskDestination setSimpleTaskTarget setSimpleTaskType setSimulWeatherLayers setSize setSkill setSlingLoad setSoundEffect setSpeaker setSpeech setSpeedMode setStamina setStaminaScheme setStatValue setSuppression setSystemOfUnits setTargetAge setTaskMarkerOffset setTaskResult setTaskState setTerrainGrid setText setTimeMultiplier setTitleEffect setTrafficDensity setTrafficDistance setTrafficGap setTrafficSpeed setTriggerActivation setTriggerArea setTriggerStatements setTriggerText setTriggerTimeout setTriggerType setType setUnconscious setUnitAbility setUnitLoadout setUnitPos setUnitPosWeak setUnitRank setUnitRecoilCoefficient setUnitTrait setUnloadInCombat setUserActionText setUserMFDText setUserMFDvalue setVariable setVectorDir setVectorDirAndUp setVectorUp setVehicleAmmo setVehicleAmmoDef setVehicleArmor setVehicleCargo setVehicleId setVehicleLock setVehiclePosition setVehicleRadar setVehicleReceiveRemoteTargets setVehicleReportOwnPosition setVehicleReportRemoteTargets setVehicleTIPars setVehicleVarName setVelocity setVelocityModelSpace setVelocityTransformation setViewDistance setVisibleIfTreeCollapsed setWantedRPMRTD setWaves setWaypointBehaviour setWaypointCombatMode setWaypointCompletionRadius setWaypointDescription setWaypointForceBehaviour setWaypointFormation setWaypointHousePosition setWaypointLoiterRadius setWaypointLoiterType setWaypointName setWaypointPosition setWaypointScript setWaypointSpeed setWaypointStatements setWaypointTimeout setWaypointType setWaypointVisible setWeaponReloadingTime setWind setWindDir setWindForce setWindStr setWingForceScaleRTD setWPPos show3DIcons showChat showCinemaBorder showCommandingMenu showCompass showCuratorCompass showGPS showHUD showLegend showMap shownArtilleryComputer shownChat shownCompass shownCuratorCompass showNewEditorObject shownGPS shownHUD shownMap shownPad shownRadio shownScoretable shownUAVFeed shownWarrant shownWatch showPad showRadio showScoretable showSubtitles showUAVFeed showWarrant showWatch showWaypoint showWaypoints side sideChat sideEnemy sideFriendly sideRadio simpleTasks simulationEnabled simulCloudDensity simulCloudOcclusion simulInClouds simulWeatherSync sin size sizeOf skill skillFinal skipTime sleep sliderPosition sliderRange sliderSetPosition sliderSetRange sliderSetSpeed sliderSpeed slingLoadAssistantShown soldierMagazines someAmmo sort soundVolume spawn speaker speed speedMode splitString sqrt squadParams stance startLoadingScreen step stop stopEngineRTD stopped str sunOrMoon supportInfo suppressFor surfaceIsWater surfaceNormal surfaceType swimInDepth switchableUnits switchAction switchCamera switchGesture switchLight switchMove synchronizedObjects synchronizedTriggers synchronizedWaypoints synchronizeObjectsAdd synchronizeObjectsRemove synchronizeTrigger synchronizeWaypoint systemChat systemOfUnits tan targetKnowledge targets targetsAggregate targetsQuery taskAlwaysVisible taskChildren taskCompleted taskCustomData taskDescription taskDestination taskHint taskMarkerOffset taskParent taskResult taskState taskType teamMember teamName teams teamSwitch teamSwitchEnabled teamType terminate terrainIntersect terrainIntersectASL terrainIntersectAtASL text textLog textLogFormat tg time timeMultiplier titleCut titleFadeOut titleObj titleRsc titleText toArray toFixed toLower toString toUpper triggerActivated triggerActivation triggerArea triggerAttachedVehicle triggerAttachObject triggerAttachVehicle triggerDynamicSimulation triggerStatements triggerText triggerTimeout triggerTimeoutCurrent triggerType turretLocal turretOwner turretUnit tvAdd tvClear tvCollapse tvCollapseAll tvCount tvCurSel tvData tvDelete tvExpand tvExpandAll tvPicture tvSetColor tvSetCurSel tvSetData tvSetPicture tvSetPictureColor tvSetPictureColorDisabled tvSetPictureColorSelected tvSetPictureRight tvSetPictureRightColor tvSetPictureRightColorDisabled tvSetPictureRightColorSelected tvSetText tvSetTooltip tvSetValue tvSort tvSortByValue tvText tvTooltip tvValue type typeName typeOf UAVControl uiNamespace uiSleep unassignCurator unassignItem unassignTeam unassignVehicle underwater uniform uniformContainer uniformItems uniformMagazines unitAddons unitAimPosition unitAimPositionVisual unitBackpack unitIsUAV unitPos unitReady unitRecoilCoefficient units unitsBelowHeight unlinkItem unlockAchievement unregisterTask updateDrawIcon updateMenuItem updateObjectTree useAISteeringComponent useAudioTimeForMoves userInputDisabled vectorAdd vectorCos vectorCrossProduct vectorDiff vectorDir vectorDirVisual vectorDistance vectorDistanceSqr vectorDotProduct vectorFromTo vectorMagnitude vectorMagnitudeSqr vectorModelToWorld vectorModelToWorldVisual vectorMultiply vectorNormalized vectorUp vectorUpVisual vectorWorldToModel vectorWorldToModelVisual vehicle vehicleCargoEnabled vehicleChat vehicleRadio vehicleReceiveRemoteTargets vehicleReportOwnPosition vehicleReportRemoteTargets vehicles vehicleVarName velocity velocityModelSpace verifySignature vest vestContainer vestItems vestMagazines viewDistance visibleCompass visibleGPS visibleMap visiblePosition visiblePositionASL visibleScoretable visibleWatch waves waypointAttachedObject waypointAttachedVehicle waypointAttachObject waypointAttachVehicle waypointBehaviour waypointCombatMode waypointCompletionRadius waypointDescription waypointForceBehaviour waypointFormation waypointHousePosition waypointLoiterRadius waypointLoiterType waypointName waypointPosition waypoints waypointScript waypointsEnabledUAV waypointShow waypointSpeed waypointStatements waypointTimeout waypointTimeoutCurrent waypointType waypointVisible weaponAccessories weaponAccessoriesCargo weaponCargo weaponDirection weaponInertia weaponLowered weapons weaponsItems weaponsItemsCargo weaponState weaponsTurret weightRTD WFSideText wind ",literal:"blufor civilian configNull controlNull displayNull east endl false grpNull independent lineBreak locationNull nil objNull opfor pi resistance scriptNull sideAmbientLife sideEmpty sideLogic sideUnknown taskNull teamMemberNull true west"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.NUMBER_MODE,{className:"variable",begin:/\b_+[a-zA-Z_]\w*/},{className:"title",begin:/[a-zA-Z][a-zA-Z0-9]+_fnc_\w*/},t,n],illegal:/#|^\$ /}}},"5VxD":function(e,t){e.exports=function(e){var t={"builtin-name":"each in with if else unless bindattr action collection debugger log outlet template unbound view yield lookup"},n={begin:/".*?"|'.*?'|\[.*?\]|\w+/},a=e.inherit(n,{keywords:t,starts:{endsWithParent:!0,relevance:0,contains:[e.inherit(n,{relevance:0})]}}),r=e.inherit(a,{className:"name"}),i=e.inherit(a,{relevance:0});return{name:"Handlebars",aliases:["hbs","html.hbs","html.handlebars"],case_insensitive:!0,subLanguage:"xml",contains:[{begin:/\\\{\{/,skip:!0},{begin:/\\\\(?=\{\{)/,skip:!0},e.COMMENT(/\{\{!--/,/--\}\}/),e.COMMENT(/\{\{!/,/\}\}/),{className:"template-tag",begin:/\{\{\{\{(?!\/)/,end:/\}\}\}\}/,contains:[r],starts:{end:/\{\{\{\{\//,returnEnd:!0,subLanguage:"xml"}},{className:"template-tag",begin:/\{\{\{\{\//,end:/\}\}\}\}/,contains:[r]},{className:"template-tag",begin:/\{\{[#\/]/,end:/\}\}/,contains:[r]},{className:"template-variable",begin:/\{\{\{/,end:/\}\}\}/,keywords:t,contains:[i]},{className:"template-variable",begin:/\{\{/,end:/\}\}/,keywords:t,contains:[i]}]}}},"5oMp":function(e,t,n){"use strict";e.exports=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}},"5upZ":function(e,t){e.exports=function(e){return{name:"GML",aliases:["gml","GML"],case_insensitive:!1,keywords:{keyword:"begin end if then else while do for break continue with until repeat exit and or xor not return mod div switch case default var globalvar enum #macro #region #endregion",built_in:"is_real is_string is_array is_undefined is_int32 is_int64 is_ptr is_vec3 is_vec4 is_matrix is_bool typeof variable_global_exists variable_global_get variable_global_set variable_instance_exists variable_instance_get variable_instance_set variable_instance_get_names array_length_1d array_length_2d array_height_2d array_equals array_create array_copy random random_range irandom irandom_range random_set_seed random_get_seed randomize randomise choose abs round floor ceil sign frac sqrt sqr exp ln log2 log10 sin cos tan arcsin arccos arctan arctan2 dsin dcos dtan darcsin darccos darctan darctan2 degtorad radtodeg power logn min max mean median clamp lerp dot_product dot_product_3d dot_product_normalised dot_product_3d_normalised dot_product_normalized dot_product_3d_normalized math_set_epsilon math_get_epsilon angle_difference point_distance_3d point_distance point_direction lengthdir_x lengthdir_y real string int64 ptr string_format chr ansi_char ord string_length string_byte_length string_pos string_copy string_char_at string_ord_at string_byte_at string_set_byte_at string_delete string_insert string_lower string_upper string_repeat string_letters string_digits string_lettersdigits string_replace string_replace_all string_count string_hash_to_newline clipboard_has_text clipboard_set_text clipboard_get_text date_current_datetime date_create_datetime date_valid_datetime date_inc_year date_inc_month date_inc_week date_inc_day date_inc_hour date_inc_minute date_inc_second date_get_year date_get_month date_get_week date_get_day date_get_hour date_get_minute date_get_second date_get_weekday date_get_day_of_year date_get_hour_of_year date_get_minute_of_year date_get_second_of_year date_year_span date_month_span date_week_span date_day_span date_hour_span date_minute_span date_second_span date_compare_datetime date_compare_date date_compare_time date_date_of date_time_of date_datetime_string date_date_string date_time_string date_days_in_month date_days_in_year date_leap_year date_is_today date_set_timezone date_get_timezone game_set_speed game_get_speed motion_set motion_add place_free place_empty place_meeting place_snapped move_random move_snap move_towards_point move_contact_solid move_contact_all move_outside_solid move_outside_all move_bounce_solid move_bounce_all move_wrap distance_to_point distance_to_object position_empty position_meeting path_start path_end mp_linear_step mp_potential_step mp_linear_step_object mp_potential_step_object mp_potential_settings mp_linear_path mp_potential_path mp_linear_path_object mp_potential_path_object mp_grid_create mp_grid_destroy mp_grid_clear_all mp_grid_clear_cell mp_grid_clear_rectangle mp_grid_add_cell mp_grid_get_cell mp_grid_add_rectangle mp_grid_add_instances mp_grid_path mp_grid_draw mp_grid_to_ds_grid collision_point collision_rectangle collision_circle collision_ellipse collision_line collision_point_list collision_rectangle_list collision_circle_list collision_ellipse_list collision_line_list instance_position_list instance_place_list point_in_rectangle point_in_triangle point_in_circle rectangle_in_rectangle rectangle_in_triangle rectangle_in_circle instance_find instance_exists instance_number instance_position instance_nearest instance_furthest instance_place instance_create_depth instance_create_layer instance_copy instance_change instance_destroy position_destroy position_change instance_id_get instance_deactivate_all instance_deactivate_object instance_deactivate_region instance_activate_all instance_activate_object instance_activate_region room_goto room_goto_previous room_goto_next room_previous room_next room_restart game_end game_restart game_load game_save game_save_buffer game_load_buffer event_perform event_user event_perform_object event_inherited show_debug_message show_debug_overlay debug_event debug_get_callstack alarm_get alarm_set font_texture_page_size keyboard_set_map keyboard_get_map keyboard_unset_map keyboard_check keyboard_check_pressed keyboard_check_released keyboard_check_direct keyboard_get_numlock keyboard_set_numlock keyboard_key_press keyboard_key_release keyboard_clear io_clear mouse_check_button mouse_check_button_pressed mouse_check_button_released mouse_wheel_up mouse_wheel_down mouse_clear draw_self draw_sprite draw_sprite_pos draw_sprite_ext draw_sprite_stretched draw_sprite_stretched_ext draw_sprite_tiled draw_sprite_tiled_ext draw_sprite_part draw_sprite_part_ext draw_sprite_general draw_clear draw_clear_alpha draw_point draw_line draw_line_width draw_rectangle draw_roundrect draw_roundrect_ext draw_triangle draw_circle draw_ellipse draw_set_circle_precision draw_arrow draw_button draw_path draw_healthbar draw_getpixel draw_getpixel_ext draw_set_colour draw_set_color draw_set_alpha draw_get_colour draw_get_color draw_get_alpha merge_colour make_colour_rgb make_colour_hsv colour_get_red colour_get_green colour_get_blue colour_get_hue colour_get_saturation colour_get_value merge_color make_color_rgb make_color_hsv color_get_red color_get_green color_get_blue color_get_hue color_get_saturation color_get_value merge_color screen_save screen_save_part draw_set_font draw_set_halign draw_set_valign draw_text draw_text_ext string_width string_height string_width_ext string_height_ext draw_text_transformed draw_text_ext_transformed draw_text_colour draw_text_ext_colour draw_text_transformed_colour draw_text_ext_transformed_colour draw_text_color draw_text_ext_color draw_text_transformed_color draw_text_ext_transformed_color draw_point_colour draw_line_colour draw_line_width_colour draw_rectangle_colour draw_roundrect_colour draw_roundrect_colour_ext draw_triangle_colour draw_circle_colour draw_ellipse_colour draw_point_color draw_line_color draw_line_width_color draw_rectangle_color draw_roundrect_color draw_roundrect_color_ext draw_triangle_color draw_circle_color draw_ellipse_color draw_primitive_begin draw_vertex draw_vertex_colour draw_vertex_color draw_primitive_end sprite_get_uvs font_get_uvs sprite_get_texture font_get_texture texture_get_width texture_get_height texture_get_uvs draw_primitive_begin_texture draw_vertex_texture draw_vertex_texture_colour draw_vertex_texture_color texture_global_scale surface_create surface_create_ext surface_resize surface_free surface_exists surface_get_width surface_get_height surface_get_texture surface_set_target surface_set_target_ext surface_reset_target surface_depth_disable surface_get_depth_disable draw_surface draw_surface_stretched draw_surface_tiled draw_surface_part draw_surface_ext draw_surface_stretched_ext draw_surface_tiled_ext draw_surface_part_ext draw_surface_general surface_getpixel surface_getpixel_ext surface_save surface_save_part surface_copy surface_copy_part application_surface_draw_enable application_get_position application_surface_enable application_surface_is_enabled display_get_width display_get_height display_get_orientation display_get_gui_width display_get_gui_height display_reset display_mouse_get_x display_mouse_get_y display_mouse_set display_set_ui_visibility window_set_fullscreen window_get_fullscreen window_set_caption window_set_min_width window_set_max_width window_set_min_height window_set_max_height window_get_visible_rects window_get_caption window_set_cursor window_get_cursor window_set_colour window_get_colour window_set_color window_get_color window_set_position window_set_size window_set_rectangle window_center window_get_x window_get_y window_get_width window_get_height window_mouse_get_x window_mouse_get_y window_mouse_set window_view_mouse_get_x window_view_mouse_get_y window_views_mouse_get_x window_views_mouse_get_y audio_listener_position audio_listener_velocity audio_listener_orientation audio_emitter_position audio_emitter_create audio_emitter_free audio_emitter_exists audio_emitter_pitch audio_emitter_velocity audio_emitter_falloff audio_emitter_gain audio_play_sound audio_play_sound_on audio_play_sound_at audio_stop_sound audio_resume_music audio_music_is_playing audio_resume_sound audio_pause_sound audio_pause_music audio_channel_num audio_sound_length audio_get_type audio_falloff_set_model audio_play_music audio_stop_music audio_master_gain audio_music_gain audio_sound_gain audio_sound_pitch audio_stop_all audio_resume_all audio_pause_all audio_is_playing audio_is_paused audio_exists audio_sound_set_track_position audio_sound_get_track_position audio_emitter_get_gain audio_emitter_get_pitch audio_emitter_get_x audio_emitter_get_y audio_emitter_get_z audio_emitter_get_vx audio_emitter_get_vy audio_emitter_get_vz audio_listener_set_position audio_listener_set_velocity audio_listener_set_orientation audio_listener_get_data audio_set_master_gain audio_get_master_gain audio_sound_get_gain audio_sound_get_pitch audio_get_name audio_sound_set_track_position audio_sound_get_track_position audio_create_stream audio_destroy_stream audio_create_sync_group audio_destroy_sync_group audio_play_in_sync_group audio_start_sync_group audio_stop_sync_group audio_pause_sync_group audio_resume_sync_group audio_sync_group_get_track_pos audio_sync_group_debug audio_sync_group_is_playing audio_debug audio_group_load audio_group_unload audio_group_is_loaded audio_group_load_progress audio_group_name audio_group_stop_all audio_group_set_gain audio_create_buffer_sound audio_free_buffer_sound audio_create_play_queue audio_free_play_queue audio_queue_sound audio_get_recorder_count audio_get_recorder_info audio_start_recording audio_stop_recording audio_sound_get_listener_mask audio_emitter_get_listener_mask audio_get_listener_mask audio_sound_set_listener_mask audio_emitter_set_listener_mask audio_set_listener_mask audio_get_listener_count audio_get_listener_info audio_system show_message show_message_async clickable_add clickable_add_ext clickable_change clickable_change_ext clickable_delete clickable_exists clickable_set_style show_question show_question_async get_integer get_string get_integer_async get_string_async get_login_async get_open_filename get_save_filename get_open_filename_ext get_save_filename_ext show_error highscore_clear highscore_add highscore_value highscore_name draw_highscore sprite_exists sprite_get_name sprite_get_number sprite_get_width sprite_get_height sprite_get_xoffset sprite_get_yoffset sprite_get_bbox_left sprite_get_bbox_right sprite_get_bbox_top sprite_get_bbox_bottom sprite_save sprite_save_strip sprite_set_cache_size sprite_set_cache_size_ext sprite_get_tpe sprite_prefetch sprite_prefetch_multi sprite_flush sprite_flush_multi sprite_set_speed sprite_get_speed_type sprite_get_speed font_exists font_get_name font_get_fontname font_get_bold font_get_italic font_get_first font_get_last font_get_size font_set_cache_size path_exists path_get_name path_get_length path_get_time path_get_kind path_get_closed path_get_precision path_get_number path_get_point_x path_get_point_y path_get_point_speed path_get_x path_get_y path_get_speed script_exists script_get_name timeline_add timeline_delete timeline_clear timeline_exists timeline_get_name timeline_moment_clear timeline_moment_add_script timeline_size timeline_max_moment object_exists object_get_name object_get_sprite object_get_solid object_get_visible object_get_persistent object_get_mask object_get_parent object_get_physics object_is_ancestor room_exists room_get_name sprite_set_offset sprite_duplicate sprite_assign sprite_merge sprite_add sprite_replace sprite_create_from_surface sprite_add_from_surface sprite_delete sprite_set_alpha_from_sprite sprite_collision_mask font_add_enable_aa font_add_get_enable_aa font_add font_add_sprite font_add_sprite_ext font_replace font_replace_sprite font_replace_sprite_ext font_delete path_set_kind path_set_closed path_set_precision path_add path_assign path_duplicate path_append path_delete path_add_point path_insert_point path_change_point path_delete_point path_clear_points path_reverse path_mirror path_flip path_rotate path_rescale path_shift script_execute object_set_sprite object_set_solid object_set_visible object_set_persistent object_set_mask room_set_width room_set_height room_set_persistent room_set_background_colour room_set_background_color room_set_view room_set_viewport room_get_viewport room_set_view_enabled room_add room_duplicate room_assign room_instance_add room_instance_clear room_get_camera room_set_camera asset_get_index asset_get_type file_text_open_from_string file_text_open_read file_text_open_write file_text_open_append file_text_close file_text_write_string file_text_write_real file_text_writeln file_text_read_string file_text_read_real file_text_readln file_text_eof file_text_eoln file_exists file_delete file_rename file_copy directory_exists directory_create directory_destroy file_find_first file_find_next file_find_close file_attributes filename_name filename_path filename_dir filename_drive filename_ext filename_change_ext file_bin_open file_bin_rewrite file_bin_close file_bin_position file_bin_size file_bin_seek file_bin_write_byte file_bin_read_byte parameter_count parameter_string environment_get_variable ini_open_from_string ini_open ini_close ini_read_string ini_read_real ini_write_string ini_write_real ini_key_exists ini_section_exists ini_key_delete ini_section_delete ds_set_precision ds_exists ds_stack_create ds_stack_destroy ds_stack_clear ds_stack_copy ds_stack_size ds_stack_empty ds_stack_push ds_stack_pop ds_stack_top ds_stack_write ds_stack_read ds_queue_create ds_queue_destroy ds_queue_clear ds_queue_copy ds_queue_size ds_queue_empty ds_queue_enqueue ds_queue_dequeue ds_queue_head ds_queue_tail ds_queue_write ds_queue_read ds_list_create ds_list_destroy ds_list_clear ds_list_copy ds_list_size ds_list_empty ds_list_add ds_list_insert ds_list_replace ds_list_delete ds_list_find_index ds_list_find_value ds_list_mark_as_list ds_list_mark_as_map ds_list_sort ds_list_shuffle ds_list_write ds_list_read ds_list_set ds_map_create ds_map_destroy ds_map_clear ds_map_copy ds_map_size ds_map_empty ds_map_add ds_map_add_list ds_map_add_map ds_map_replace ds_map_replace_map ds_map_replace_list ds_map_delete ds_map_exists ds_map_find_value ds_map_find_previous ds_map_find_next ds_map_find_first ds_map_find_last ds_map_write ds_map_read ds_map_secure_save ds_map_secure_load ds_map_secure_load_buffer ds_map_secure_save_buffer ds_map_set ds_priority_create ds_priority_destroy ds_priority_clear ds_priority_copy ds_priority_size ds_priority_empty ds_priority_add ds_priority_change_priority ds_priority_find_priority ds_priority_delete_value ds_priority_delete_min ds_priority_find_min ds_priority_delete_max ds_priority_find_max ds_priority_write ds_priority_read ds_grid_create ds_grid_destroy ds_grid_copy ds_grid_resize ds_grid_width ds_grid_height ds_grid_clear ds_grid_set ds_grid_add ds_grid_multiply ds_grid_set_region ds_grid_add_region ds_grid_multiply_region ds_grid_set_disk ds_grid_add_disk ds_grid_multiply_disk ds_grid_set_grid_region ds_grid_add_grid_region ds_grid_multiply_grid_region ds_grid_get ds_grid_get_sum ds_grid_get_max ds_grid_get_min ds_grid_get_mean ds_grid_get_disk_sum ds_grid_get_disk_min ds_grid_get_disk_max ds_grid_get_disk_mean ds_grid_value_exists ds_grid_value_x ds_grid_value_y ds_grid_value_disk_exists ds_grid_value_disk_x ds_grid_value_disk_y ds_grid_shuffle ds_grid_write ds_grid_read ds_grid_sort ds_grid_set ds_grid_get effect_create_below effect_create_above effect_clear part_type_create part_type_destroy part_type_exists part_type_clear part_type_shape part_type_sprite part_type_size part_type_scale part_type_orientation part_type_life part_type_step part_type_death part_type_speed part_type_direction part_type_gravity part_type_colour1 part_type_colour2 part_type_colour3 part_type_colour_mix part_type_colour_rgb part_type_colour_hsv part_type_color1 part_type_color2 part_type_color3 part_type_color_mix part_type_color_rgb part_type_color_hsv part_type_alpha1 part_type_alpha2 part_type_alpha3 part_type_blend part_system_create part_system_create_layer part_system_destroy part_system_exists part_system_clear part_system_draw_order part_system_depth part_system_position part_system_automatic_update part_system_automatic_draw part_system_update part_system_drawit part_system_get_layer part_system_layer part_particles_create part_particles_create_colour part_particles_create_color part_particles_clear part_particles_count part_emitter_create part_emitter_destroy part_emitter_destroy_all part_emitter_exists part_emitter_clear part_emitter_region part_emitter_burst part_emitter_stream external_call external_define external_free window_handle window_device matrix_get matrix_set matrix_build_identity matrix_build matrix_build_lookat matrix_build_projection_ortho matrix_build_projection_perspective matrix_build_projection_perspective_fov matrix_multiply matrix_transform_vertex matrix_stack_push matrix_stack_pop matrix_stack_multiply matrix_stack_set matrix_stack_clear matrix_stack_top matrix_stack_is_empty browser_input_capture os_get_config os_get_info os_get_language os_get_region os_lock_orientation display_get_dpi_x display_get_dpi_y display_set_gui_size display_set_gui_maximise display_set_gui_maximize device_mouse_dbclick_enable display_set_timing_method display_get_timing_method display_set_sleep_margin display_get_sleep_margin virtual_key_add virtual_key_hide virtual_key_delete virtual_key_show draw_enable_drawevent draw_enable_swf_aa draw_set_swf_aa_level draw_get_swf_aa_level draw_texture_flush draw_flush gpu_set_blendenable gpu_set_ztestenable gpu_set_zfunc gpu_set_zwriteenable gpu_set_lightingenable gpu_set_fog gpu_set_cullmode gpu_set_blendmode gpu_set_blendmode_ext gpu_set_blendmode_ext_sepalpha gpu_set_colorwriteenable gpu_set_colourwriteenable gpu_set_alphatestenable gpu_set_alphatestref gpu_set_alphatestfunc gpu_set_texfilter gpu_set_texfilter_ext gpu_set_texrepeat gpu_set_texrepeat_ext gpu_set_tex_filter gpu_set_tex_filter_ext gpu_set_tex_repeat gpu_set_tex_repeat_ext gpu_set_tex_mip_filter gpu_set_tex_mip_filter_ext gpu_set_tex_mip_bias gpu_set_tex_mip_bias_ext gpu_set_tex_min_mip gpu_set_tex_min_mip_ext gpu_set_tex_max_mip gpu_set_tex_max_mip_ext gpu_set_tex_max_aniso gpu_set_tex_max_aniso_ext gpu_set_tex_mip_enable gpu_set_tex_mip_enable_ext gpu_get_blendenable gpu_get_ztestenable gpu_get_zfunc gpu_get_zwriteenable gpu_get_lightingenable gpu_get_fog gpu_get_cullmode gpu_get_blendmode gpu_get_blendmode_ext gpu_get_blendmode_ext_sepalpha gpu_get_blendmode_src gpu_get_blendmode_dest gpu_get_blendmode_srcalpha gpu_get_blendmode_destalpha gpu_get_colorwriteenable gpu_get_colourwriteenable gpu_get_alphatestenable gpu_get_alphatestref gpu_get_alphatestfunc gpu_get_texfilter gpu_get_texfilter_ext gpu_get_texrepeat gpu_get_texrepeat_ext gpu_get_tex_filter gpu_get_tex_filter_ext gpu_get_tex_repeat gpu_get_tex_repeat_ext gpu_get_tex_mip_filter gpu_get_tex_mip_filter_ext gpu_get_tex_mip_bias gpu_get_tex_mip_bias_ext gpu_get_tex_min_mip gpu_get_tex_min_mip_ext gpu_get_tex_max_mip gpu_get_tex_max_mip_ext gpu_get_tex_max_aniso gpu_get_tex_max_aniso_ext gpu_get_tex_mip_enable gpu_get_tex_mip_enable_ext gpu_push_state gpu_pop_state gpu_get_state gpu_set_state draw_light_define_ambient draw_light_define_direction draw_light_define_point draw_light_enable draw_set_lighting draw_light_get_ambient draw_light_get draw_get_lighting shop_leave_rating url_get_domain url_open url_open_ext url_open_full get_timer achievement_login achievement_logout achievement_post achievement_increment achievement_post_score achievement_available achievement_show_achievements achievement_show_leaderboards achievement_load_friends achievement_load_leaderboard achievement_send_challenge achievement_load_progress achievement_reset achievement_login_status achievement_get_pic achievement_show_challenge_notifications achievement_get_challenges achievement_event achievement_show achievement_get_info cloud_file_save cloud_string_save cloud_synchronise ads_enable ads_disable ads_setup ads_engagement_launch ads_engagement_available ads_engagement_active ads_event ads_event_preload ads_set_reward_callback ads_get_display_height ads_get_display_width ads_move ads_interstitial_available ads_interstitial_display device_get_tilt_x device_get_tilt_y device_get_tilt_z device_is_keypad_open device_mouse_check_button device_mouse_check_button_pressed device_mouse_check_button_released device_mouse_x device_mouse_y device_mouse_raw_x device_mouse_raw_y device_mouse_x_to_gui device_mouse_y_to_gui iap_activate iap_status iap_enumerate_products iap_restore_all iap_acquire iap_consume iap_product_details iap_purchase_details facebook_init facebook_login facebook_status facebook_graph_request facebook_dialog facebook_logout facebook_launch_offerwall facebook_post_message facebook_send_invite facebook_user_id facebook_accesstoken facebook_check_permission facebook_request_read_permissions facebook_request_publish_permissions gamepad_is_supported gamepad_get_device_count gamepad_is_connected gamepad_get_description gamepad_get_button_threshold gamepad_set_button_threshold gamepad_get_axis_deadzone gamepad_set_axis_deadzone gamepad_button_count gamepad_button_check gamepad_button_check_pressed gamepad_button_check_released gamepad_button_value gamepad_axis_count gamepad_axis_value gamepad_set_vibration gamepad_set_colour gamepad_set_color os_is_paused window_has_focus code_is_compiled http_get http_get_file http_post_string http_request json_encode json_decode zip_unzip load_csv base64_encode base64_decode md5_string_unicode md5_string_utf8 md5_file os_is_network_connected sha1_string_unicode sha1_string_utf8 sha1_file os_powersave_enable analytics_event analytics_event_ext win8_livetile_tile_notification win8_livetile_tile_clear win8_livetile_badge_notification win8_livetile_badge_clear win8_livetile_queue_enable win8_secondarytile_pin win8_secondarytile_badge_notification win8_secondarytile_delete win8_livetile_notification_begin win8_livetile_notification_secondary_begin win8_livetile_notification_expiry win8_livetile_notification_tag win8_livetile_notification_text_add win8_livetile_notification_image_add win8_livetile_notification_end win8_appbar_enable win8_appbar_add_element win8_appbar_remove_element win8_settingscharm_add_entry win8_settingscharm_add_html_entry win8_settingscharm_add_xaml_entry win8_settingscharm_set_xaml_property win8_settingscharm_get_xaml_property win8_settingscharm_remove_entry win8_share_image win8_share_screenshot win8_share_file win8_share_url win8_share_text win8_search_enable win8_search_disable win8_search_add_suggestions win8_device_touchscreen_available win8_license_initialize_sandbox win8_license_trial_version winphone_license_trial_version winphone_tile_title winphone_tile_count winphone_tile_back_title winphone_tile_back_content winphone_tile_back_content_wide winphone_tile_front_image winphone_tile_front_image_small winphone_tile_front_image_wide winphone_tile_back_image winphone_tile_back_image_wide winphone_tile_background_colour winphone_tile_background_color winphone_tile_icon_image winphone_tile_small_icon_image winphone_tile_wide_content winphone_tile_cycle_images winphone_tile_small_background_image physics_world_create physics_world_gravity physics_world_update_speed physics_world_update_iterations physics_world_draw_debug physics_pause_enable physics_fixture_create physics_fixture_set_kinematic physics_fixture_set_density physics_fixture_set_awake physics_fixture_set_restitution physics_fixture_set_friction physics_fixture_set_collision_group physics_fixture_set_sensor physics_fixture_set_linear_damping physics_fixture_set_angular_damping physics_fixture_set_circle_shape physics_fixture_set_box_shape physics_fixture_set_edge_shape physics_fixture_set_polygon_shape physics_fixture_set_chain_shape physics_fixture_add_point physics_fixture_bind physics_fixture_bind_ext physics_fixture_delete physics_apply_force physics_apply_impulse physics_apply_angular_impulse physics_apply_local_force physics_apply_local_impulse physics_apply_torque physics_mass_properties physics_draw_debug physics_test_overlap physics_remove_fixture physics_set_friction physics_set_density physics_set_restitution physics_get_friction physics_get_density physics_get_restitution physics_joint_distance_create physics_joint_rope_create physics_joint_revolute_create physics_joint_prismatic_create physics_joint_pulley_create physics_joint_wheel_create physics_joint_weld_create physics_joint_friction_create physics_joint_gear_create physics_joint_enable_motor physics_joint_get_value physics_joint_set_value physics_joint_delete physics_particle_create physics_particle_delete physics_particle_delete_region_circle physics_particle_delete_region_box physics_particle_delete_region_poly physics_particle_set_flags physics_particle_set_category_flags physics_particle_draw physics_particle_draw_ext physics_particle_count physics_particle_get_data physics_particle_get_data_particle physics_particle_group_begin physics_particle_group_circle physics_particle_group_box physics_particle_group_polygon physics_particle_group_add_point physics_particle_group_end physics_particle_group_join physics_particle_group_delete physics_particle_group_count physics_particle_group_get_data physics_particle_group_get_mass physics_particle_group_get_inertia physics_particle_group_get_centre_x physics_particle_group_get_centre_y physics_particle_group_get_vel_x physics_particle_group_get_vel_y physics_particle_group_get_ang_vel physics_particle_group_get_x physics_particle_group_get_y physics_particle_group_get_angle physics_particle_set_group_flags physics_particle_get_group_flags physics_particle_get_max_count physics_particle_get_radius physics_particle_get_density physics_particle_get_damping physics_particle_get_gravity_scale physics_particle_set_max_count physics_particle_set_radius physics_particle_set_density physics_particle_set_damping physics_particle_set_gravity_scale network_create_socket network_create_socket_ext network_create_server network_create_server_raw network_connect network_connect_raw network_send_packet network_send_raw network_send_broadcast network_send_udp network_send_udp_raw network_set_timeout network_set_config network_resolve network_destroy buffer_create buffer_write buffer_read buffer_seek buffer_get_surface buffer_set_surface buffer_delete buffer_exists buffer_get_type buffer_get_alignment buffer_poke buffer_peek buffer_save buffer_save_ext buffer_load buffer_load_ext buffer_load_partial buffer_copy buffer_fill buffer_get_size buffer_tell buffer_resize buffer_md5 buffer_sha1 buffer_base64_encode buffer_base64_decode buffer_base64_decode_ext buffer_sizeof buffer_get_address buffer_create_from_vertex_buffer buffer_create_from_vertex_buffer_ext buffer_copy_from_vertex_buffer buffer_async_group_begin buffer_async_group_option buffer_async_group_end buffer_load_async buffer_save_async gml_release_mode gml_pragma steam_activate_overlay steam_is_overlay_enabled steam_is_overlay_activated steam_get_persona_name steam_initialised steam_is_cloud_enabled_for_app steam_is_cloud_enabled_for_account steam_file_persisted steam_get_quota_total steam_get_quota_free steam_file_write steam_file_write_file steam_file_read steam_file_delete steam_file_exists steam_file_size steam_file_share steam_is_screenshot_requested steam_send_screenshot steam_is_user_logged_on steam_get_user_steam_id steam_user_owns_dlc steam_user_installed_dlc steam_set_achievement steam_get_achievement steam_clear_achievement steam_set_stat_int steam_set_stat_float steam_set_stat_avg_rate steam_get_stat_int steam_get_stat_float steam_get_stat_avg_rate steam_reset_all_stats steam_reset_all_stats_achievements steam_stats_ready steam_create_leaderboard steam_upload_score steam_upload_score_ext steam_download_scores_around_user steam_download_scores steam_download_friends_scores steam_upload_score_buffer steam_upload_score_buffer_ext steam_current_game_language steam_available_languages steam_activate_overlay_browser steam_activate_overlay_user steam_activate_overlay_store steam_get_user_persona_name steam_get_app_id steam_get_user_account_id steam_ugc_download steam_ugc_create_item steam_ugc_start_item_update steam_ugc_set_item_title steam_ugc_set_item_description steam_ugc_set_item_visibility steam_ugc_set_item_tags steam_ugc_set_item_content steam_ugc_set_item_preview steam_ugc_submit_item_update steam_ugc_get_item_update_progress steam_ugc_subscribe_item steam_ugc_unsubscribe_item steam_ugc_num_subscribed_items steam_ugc_get_subscribed_items steam_ugc_get_item_install_info steam_ugc_get_item_update_info steam_ugc_request_item_details steam_ugc_create_query_user steam_ugc_create_query_user_ex steam_ugc_create_query_all steam_ugc_create_query_all_ex steam_ugc_query_set_cloud_filename_filter steam_ugc_query_set_match_any_tag steam_ugc_query_set_search_text steam_ugc_query_set_ranked_by_trend_days steam_ugc_query_add_required_tag steam_ugc_query_add_excluded_tag steam_ugc_query_set_return_long_description steam_ugc_query_set_return_total_only steam_ugc_query_set_allow_cached_response steam_ugc_send_query shader_set shader_get_name shader_reset shader_current shader_is_compiled shader_get_sampler_index shader_get_uniform shader_set_uniform_i shader_set_uniform_i_array shader_set_uniform_f shader_set_uniform_f_array shader_set_uniform_matrix shader_set_uniform_matrix_array shader_enable_corner_id texture_set_stage texture_get_texel_width texture_get_texel_height shaders_are_supported vertex_format_begin vertex_format_end vertex_format_delete vertex_format_add_position vertex_format_add_position_3d vertex_format_add_colour vertex_format_add_color vertex_format_add_normal vertex_format_add_texcoord vertex_format_add_textcoord vertex_format_add_custom vertex_create_buffer vertex_create_buffer_ext vertex_delete_buffer vertex_begin vertex_end vertex_position vertex_position_3d vertex_colour vertex_color vertex_argb vertex_texcoord vertex_normal vertex_float1 vertex_float2 vertex_float3 vertex_float4 vertex_ubyte4 vertex_submit vertex_freeze vertex_get_number vertex_get_buffer_size vertex_create_buffer_from_buffer vertex_create_buffer_from_buffer_ext push_local_notification push_get_first_local_notification push_get_next_local_notification push_cancel_local_notification skeleton_animation_set skeleton_animation_get skeleton_animation_mix skeleton_animation_set_ext skeleton_animation_get_ext skeleton_animation_get_duration skeleton_animation_get_frames skeleton_animation_clear skeleton_skin_set skeleton_skin_get skeleton_attachment_set skeleton_attachment_get skeleton_attachment_create skeleton_collision_draw_set skeleton_bone_data_get skeleton_bone_data_set skeleton_bone_state_get skeleton_bone_state_set skeleton_get_minmax skeleton_get_num_bounds skeleton_get_bounds skeleton_animation_get_frame skeleton_animation_set_frame draw_skeleton draw_skeleton_time draw_skeleton_instance draw_skeleton_collision skeleton_animation_list skeleton_skin_list skeleton_slot_data layer_get_id layer_get_id_at_depth layer_get_depth layer_create layer_destroy layer_destroy_instances layer_add_instance layer_has_instance layer_set_visible layer_get_visible layer_exists layer_x layer_y layer_get_x layer_get_y layer_hspeed layer_vspeed layer_get_hspeed layer_get_vspeed layer_script_begin layer_script_end layer_shader layer_get_script_begin layer_get_script_end layer_get_shader layer_set_target_room layer_get_target_room layer_reset_target_room layer_get_all layer_get_all_elements layer_get_name layer_depth layer_get_element_layer layer_get_element_type layer_element_move layer_force_draw_depth layer_is_draw_depth_forced layer_get_forced_depth layer_background_get_id layer_background_exists layer_background_create layer_background_destroy layer_background_visible layer_background_change layer_background_sprite layer_background_htiled layer_background_vtiled layer_background_stretch layer_background_yscale layer_background_xscale layer_background_blend layer_background_alpha layer_background_index layer_background_speed layer_background_get_visible layer_background_get_sprite layer_background_get_htiled layer_background_get_vtiled layer_background_get_stretch layer_background_get_yscale layer_background_get_xscale layer_background_get_blend layer_background_get_alpha layer_background_get_index layer_background_get_speed layer_sprite_get_id layer_sprite_exists layer_sprite_create layer_sprite_destroy layer_sprite_change layer_sprite_index layer_sprite_speed layer_sprite_xscale layer_sprite_yscale layer_sprite_angle layer_sprite_blend layer_sprite_alpha layer_sprite_x layer_sprite_y layer_sprite_get_sprite layer_sprite_get_index layer_sprite_get_speed layer_sprite_get_xscale layer_sprite_get_yscale layer_sprite_get_angle layer_sprite_get_blend layer_sprite_get_alpha layer_sprite_get_x layer_sprite_get_y layer_tilemap_get_id layer_tilemap_exists layer_tilemap_create layer_tilemap_destroy tilemap_tileset tilemap_x tilemap_y tilemap_set tilemap_set_at_pixel tilemap_get_tileset tilemap_get_tile_width tilemap_get_tile_height tilemap_get_width tilemap_get_height tilemap_get_x tilemap_get_y tilemap_get tilemap_get_at_pixel tilemap_get_cell_x_at_pixel tilemap_get_cell_y_at_pixel tilemap_clear draw_tilemap draw_tile tilemap_set_global_mask tilemap_get_global_mask tilemap_set_mask tilemap_get_mask tilemap_get_frame tile_set_empty tile_set_index tile_set_flip tile_set_mirror tile_set_rotate tile_get_empty tile_get_index tile_get_flip tile_get_mirror tile_get_rotate layer_tile_exists layer_tile_create layer_tile_destroy layer_tile_change layer_tile_xscale layer_tile_yscale layer_tile_blend layer_tile_alpha layer_tile_x layer_tile_y layer_tile_region layer_tile_visible layer_tile_get_sprite layer_tile_get_xscale layer_tile_get_yscale layer_tile_get_blend layer_tile_get_alpha layer_tile_get_x layer_tile_get_y layer_tile_get_region layer_tile_get_visible layer_instance_get_instance instance_activate_layer instance_deactivate_layer camera_create camera_create_view camera_destroy camera_apply camera_get_active camera_get_default camera_set_default camera_set_view_mat camera_set_proj_mat camera_set_update_script camera_set_begin_script camera_set_end_script camera_set_view_pos camera_set_view_size camera_set_view_speed camera_set_view_border camera_set_view_angle camera_set_view_target camera_get_view_mat camera_get_proj_mat camera_get_update_script camera_get_begin_script camera_get_end_script camera_get_view_x camera_get_view_y camera_get_view_width camera_get_view_height camera_get_view_speed_x camera_get_view_speed_y camera_get_view_border_x camera_get_view_border_y camera_get_view_angle camera_get_view_target view_get_camera view_get_visible view_get_xport view_get_yport view_get_wport view_get_hport view_get_surface_id view_set_camera view_set_visible view_set_xport view_set_yport view_set_wport view_set_hport view_set_surface_id gesture_drag_time gesture_drag_distance gesture_flick_speed gesture_double_tap_time gesture_double_tap_distance gesture_pinch_distance gesture_pinch_angle_towards gesture_pinch_angle_away gesture_rotate_time gesture_rotate_angle gesture_tap_count gesture_get_drag_time gesture_get_drag_distance gesture_get_flick_speed gesture_get_double_tap_time gesture_get_double_tap_distance gesture_get_pinch_distance gesture_get_pinch_angle_towards gesture_get_pinch_angle_away gesture_get_rotate_time gesture_get_rotate_angle gesture_get_tap_count keyboard_virtual_show keyboard_virtual_hide keyboard_virtual_status keyboard_virtual_height",literal:"self other all noone global local undefined pointer_invalid pointer_null path_action_stop path_action_restart path_action_continue path_action_reverse true false pi GM_build_date GM_version GM_runtime_version timezone_local timezone_utc gamespeed_fps gamespeed_microseconds ev_create ev_destroy ev_step ev_alarm ev_keyboard ev_mouse ev_collision ev_other ev_draw ev_draw_begin ev_draw_end ev_draw_pre ev_draw_post ev_keypress ev_keyrelease ev_trigger ev_left_button ev_right_button ev_middle_button ev_no_button ev_left_press ev_right_press ev_middle_press ev_left_release ev_right_release ev_middle_release ev_mouse_enter ev_mouse_leave ev_mouse_wheel_up ev_mouse_wheel_down ev_global_left_button ev_global_right_button ev_global_middle_button ev_global_left_press ev_global_right_press ev_global_middle_press ev_global_left_release ev_global_right_release ev_global_middle_release ev_joystick1_left ev_joystick1_right ev_joystick1_up ev_joystick1_down ev_joystick1_button1 ev_joystick1_button2 ev_joystick1_button3 ev_joystick1_button4 ev_joystick1_button5 ev_joystick1_button6 ev_joystick1_button7 ev_joystick1_button8 ev_joystick2_left ev_joystick2_right ev_joystick2_up ev_joystick2_down ev_joystick2_button1 ev_joystick2_button2 ev_joystick2_button3 ev_joystick2_button4 ev_joystick2_button5 ev_joystick2_button6 ev_joystick2_button7 ev_joystick2_button8 ev_outside ev_boundary ev_game_start ev_game_end ev_room_start ev_room_end ev_no_more_lives ev_animation_end ev_end_of_path ev_no_more_health ev_close_button ev_user0 ev_user1 ev_user2 ev_user3 ev_user4 ev_user5 ev_user6 ev_user7 ev_user8 ev_user9 ev_user10 ev_user11 ev_user12 ev_user13 ev_user14 ev_user15 ev_step_normal ev_step_begin ev_step_end ev_gui ev_gui_begin ev_gui_end ev_cleanup ev_gesture ev_gesture_tap ev_gesture_double_tap ev_gesture_drag_start ev_gesture_dragging ev_gesture_drag_end ev_gesture_flick ev_gesture_pinch_start ev_gesture_pinch_in ev_gesture_pinch_out ev_gesture_pinch_end ev_gesture_rotate_start ev_gesture_rotating ev_gesture_rotate_end ev_global_gesture_tap ev_global_gesture_double_tap ev_global_gesture_drag_start ev_global_gesture_dragging ev_global_gesture_drag_end ev_global_gesture_flick ev_global_gesture_pinch_start ev_global_gesture_pinch_in ev_global_gesture_pinch_out ev_global_gesture_pinch_end ev_global_gesture_rotate_start ev_global_gesture_rotating ev_global_gesture_rotate_end vk_nokey vk_anykey vk_enter vk_return vk_shift vk_control vk_alt vk_escape vk_space vk_backspace vk_tab vk_pause vk_printscreen vk_left vk_right vk_up vk_down vk_home vk_end vk_delete vk_insert vk_pageup vk_pagedown vk_f1 vk_f2 vk_f3 vk_f4 vk_f5 vk_f6 vk_f7 vk_f8 vk_f9 vk_f10 vk_f11 vk_f12 vk_numpad0 vk_numpad1 vk_numpad2 vk_numpad3 vk_numpad4 vk_numpad5 vk_numpad6 vk_numpad7 vk_numpad8 vk_numpad9 vk_divide vk_multiply vk_subtract vk_add vk_decimal vk_lshift vk_lcontrol vk_lalt vk_rshift vk_rcontrol vk_ralt mb_any mb_none mb_left mb_right mb_middle c_aqua c_black c_blue c_dkgray c_fuchsia c_gray c_green c_lime c_ltgray c_maroon c_navy c_olive c_purple c_red c_silver c_teal c_white c_yellow c_orange fa_left fa_center fa_right fa_top fa_middle fa_bottom pr_pointlist pr_linelist pr_linestrip pr_trianglelist pr_trianglestrip pr_trianglefan bm_complex bm_normal bm_add bm_max bm_subtract bm_zero bm_one bm_src_colour bm_inv_src_colour bm_src_color bm_inv_src_color bm_src_alpha bm_inv_src_alpha bm_dest_alpha bm_inv_dest_alpha bm_dest_colour bm_inv_dest_colour bm_dest_color bm_inv_dest_color bm_src_alpha_sat tf_point tf_linear tf_anisotropic mip_off mip_on mip_markedonly audio_falloff_none audio_falloff_inverse_distance audio_falloff_inverse_distance_clamped audio_falloff_linear_distance audio_falloff_linear_distance_clamped audio_falloff_exponent_distance audio_falloff_exponent_distance_clamped audio_old_system audio_new_system audio_mono audio_stereo audio_3d cr_default cr_none cr_arrow cr_cross cr_beam cr_size_nesw cr_size_ns cr_size_nwse cr_size_we cr_uparrow cr_hourglass cr_drag cr_appstart cr_handpoint cr_size_all spritespeed_framespersecond spritespeed_framespergameframe asset_object asset_unknown asset_sprite asset_sound asset_room asset_path asset_script asset_font asset_timeline asset_tiles asset_shader fa_readonly fa_hidden fa_sysfile fa_volumeid fa_directory fa_archive ds_type_map ds_type_list ds_type_stack ds_type_queue ds_type_grid ds_type_priority ef_explosion ef_ring ef_ellipse ef_firework ef_smoke ef_smokeup ef_star ef_spark ef_flare ef_cloud ef_rain ef_snow pt_shape_pixel pt_shape_disk pt_shape_square pt_shape_line pt_shape_star pt_shape_circle pt_shape_ring pt_shape_sphere pt_shape_flare pt_shape_spark pt_shape_explosion pt_shape_cloud pt_shape_smoke pt_shape_snow ps_distr_linear ps_distr_gaussian ps_distr_invgaussian ps_shape_rectangle ps_shape_ellipse ps_shape_diamond ps_shape_line ty_real ty_string dll_cdecl dll_stdcall matrix_view matrix_projection matrix_world os_win32 os_windows os_macosx os_ios os_android os_symbian os_linux os_unknown os_winphone os_tizen os_win8native os_wiiu os_3ds os_psvita os_bb10 os_ps4 os_xboxone os_ps3 os_xbox360 os_uwp os_tvos os_switch browser_not_a_browser browser_unknown browser_ie browser_firefox browser_chrome browser_safari browser_safari_mobile browser_opera browser_tizen browser_edge browser_windows_store browser_ie_mobile device_ios_unknown device_ios_iphone device_ios_iphone_retina device_ios_ipad device_ios_ipad_retina device_ios_iphone5 device_ios_iphone6 device_ios_iphone6plus device_emulator device_tablet display_landscape display_landscape_flipped display_portrait display_portrait_flipped tm_sleep tm_countvsyncs of_challenge_win of_challen ge_lose of_challenge_tie leaderboard_type_number leaderboard_type_time_mins_secs cmpfunc_never cmpfunc_less cmpfunc_equal cmpfunc_lessequal cmpfunc_greater cmpfunc_notequal cmpfunc_greaterequal cmpfunc_always cull_noculling cull_clockwise cull_counterclockwise lighttype_dir lighttype_point iap_ev_storeload iap_ev_product iap_ev_purchase iap_ev_consume iap_ev_restore iap_storeload_ok iap_storeload_failed iap_status_uninitialised iap_status_unavailable iap_status_loading iap_status_available iap_status_processing iap_status_restoring iap_failed iap_unavailable iap_available iap_purchased iap_canceled iap_refunded fb_login_default fb_login_fallback_to_webview fb_login_no_fallback_to_webview fb_login_forcing_webview fb_login_use_system_account fb_login_forcing_safari phy_joint_anchor_1_x phy_joint_anchor_1_y phy_joint_anchor_2_x phy_joint_anchor_2_y phy_joint_reaction_force_x phy_joint_reaction_force_y phy_joint_reaction_torque phy_joint_motor_speed phy_joint_angle phy_joint_motor_torque phy_joint_max_motor_torque phy_joint_translation phy_joint_speed phy_joint_motor_force phy_joint_max_motor_force phy_joint_length_1 phy_joint_length_2 phy_joint_damping_ratio phy_joint_frequency phy_joint_lower_angle_limit phy_joint_upper_angle_limit phy_joint_angle_limits phy_joint_max_length phy_joint_max_torque phy_joint_max_force phy_debug_render_aabb phy_debug_render_collision_pairs phy_debug_render_coms phy_debug_render_core_shapes phy_debug_render_joints phy_debug_render_obb phy_debug_render_shapes phy_particle_flag_water phy_particle_flag_zombie phy_particle_flag_wall phy_particle_flag_spring phy_particle_flag_elastic phy_particle_flag_viscous phy_particle_flag_powder phy_particle_flag_tensile phy_particle_flag_colourmixing phy_particle_flag_colormixing phy_particle_group_flag_solid phy_particle_group_flag_rigid phy_particle_data_flag_typeflags phy_particle_data_flag_position phy_particle_data_flag_velocity phy_particle_data_flag_colour phy_particle_data_flag_color phy_particle_data_flag_category achievement_our_info achievement_friends_info achievement_leaderboard_info achievement_achievement_info achievement_filter_all_players achievement_filter_friends_only achievement_filter_favorites_only achievement_type_achievement_challenge achievement_type_score_challenge achievement_pic_loaded achievement_show_ui achievement_show_profile achievement_show_leaderboard achievement_show_achievement achievement_show_bank achievement_show_friend_picker achievement_show_purchase_prompt network_socket_tcp network_socket_udp network_socket_bluetooth network_type_connect network_type_disconnect network_type_data network_type_non_blocking_connect network_config_connect_timeout network_config_use_non_blocking_socket network_config_enable_reliable_udp network_config_disable_reliable_udp buffer_fixed buffer_grow buffer_wrap buffer_fast buffer_vbuffer buffer_network buffer_u8 buffer_s8 buffer_u16 buffer_s16 buffer_u32 buffer_s32 buffer_u64 buffer_f16 buffer_f32 buffer_f64 buffer_bool buffer_text buffer_string buffer_surface_copy buffer_seek_start buffer_seek_relative buffer_seek_end buffer_generalerror buffer_outofspace buffer_outofbounds buffer_invalidtype text_type button_type input_type ANSI_CHARSET DEFAULT_CHARSET EASTEUROPE_CHARSET RUSSIAN_CHARSET SYMBOL_CHARSET SHIFTJIS_CHARSET HANGEUL_CHARSET GB2312_CHARSET CHINESEBIG5_CHARSET JOHAB_CHARSET HEBREW_CHARSET ARABIC_CHARSET GREEK_CHARSET TURKISH_CHARSET VIETNAMESE_CHARSET THAI_CHARSET MAC_CHARSET BALTIC_CHARSET OEM_CHARSET gp_face1 gp_face2 gp_face3 gp_face4 gp_shoulderl gp_shoulderr gp_shoulderlb gp_shoulderrb gp_select gp_start gp_stickl gp_stickr gp_padu gp_padd gp_padl gp_padr gp_axislh gp_axislv gp_axisrh gp_axisrv ov_friends ov_community ov_players ov_settings ov_gamegroup ov_achievements lb_sort_none lb_sort_ascending lb_sort_descending lb_disp_none lb_disp_numeric lb_disp_time_sec lb_disp_time_ms ugc_result_success ugc_filetype_community ugc_filetype_microtrans ugc_visibility_public ugc_visibility_friends_only ugc_visibility_private ugc_query_RankedByVote ugc_query_RankedByPublicationDate ugc_query_AcceptedForGameRankedByAcceptanceDate ugc_query_RankedByTrend ugc_query_FavoritedByFriendsRankedByPublicationDate ugc_query_CreatedByFriendsRankedByPublicationDate ugc_query_RankedByNumTimesReported ugc_query_CreatedByFollowedUsersRankedByPublicationDate ugc_query_NotYetRated ugc_query_RankedByTotalVotesAsc ugc_query_RankedByVotesUp ugc_query_RankedByTextSearch ugc_sortorder_CreationOrderDesc ugc_sortorder_CreationOrderAsc ugc_sortorder_TitleAsc ugc_sortorder_LastUpdatedDesc ugc_sortorder_SubscriptionDateDesc ugc_sortorder_VoteScoreDesc ugc_sortorder_ForModeration ugc_list_Published ugc_list_VotedOn ugc_list_VotedUp ugc_list_VotedDown ugc_list_WillVoteLater ugc_list_Favorited ugc_list_Subscribed ugc_list_UsedOrPlayed ugc_list_Followed ugc_match_Items ugc_match_Items_Mtx ugc_match_Items_ReadyToUse ugc_match_Collections ugc_match_Artwork ugc_match_Videos ugc_match_Screenshots ugc_match_AllGuides ugc_match_WebGuides ugc_match_IntegratedGuides ugc_match_UsableInGame ugc_match_ControllerBindings vertex_usage_position vertex_usage_colour vertex_usage_color vertex_usage_normal vertex_usage_texcoord vertex_usage_textcoord vertex_usage_blendweight vertex_usage_blendindices vertex_usage_psize vertex_usage_tangent vertex_usage_binormal vertex_usage_fog vertex_usage_depth vertex_usage_sample vertex_type_float1 vertex_type_float2 vertex_type_float3 vertex_type_float4 vertex_type_colour vertex_type_color vertex_type_ubyte4 layerelementtype_undefined layerelementtype_background layerelementtype_instance layerelementtype_oldtilemap layerelementtype_sprite layerelementtype_tilemap layerelementtype_particlesystem layerelementtype_tile tile_rotate tile_flip tile_mirror tile_index_mask kbv_type_default kbv_type_ascii kbv_type_url kbv_type_email kbv_type_numbers kbv_type_phone kbv_type_phone_name kbv_returnkey_default kbv_returnkey_go kbv_returnkey_google kbv_returnkey_join kbv_returnkey_next kbv_returnkey_route kbv_returnkey_search kbv_returnkey_send kbv_returnkey_yahoo kbv_returnkey_done kbv_returnkey_continue kbv_returnkey_emergency kbv_autocapitalize_none kbv_autocapitalize_words kbv_autocapitalize_sentences kbv_autocapitalize_characters",symbol:"argument_relative argument argument0 argument1 argument2 argument3 argument4 argument5 argument6 argument7 argument8 argument9 argument10 argument11 argument12 argument13 argument14 argument15 argument_count x y xprevious yprevious xstart ystart hspeed vspeed direction speed friction gravity gravity_direction path_index path_position path_positionprevious path_speed path_scale path_orientation path_endaction object_index id solid persistent mask_index instance_count instance_id room_speed fps fps_real current_time current_year current_month current_day current_weekday current_hour current_minute current_second alarm timeline_index timeline_position timeline_speed timeline_running timeline_loop room room_first room_last room_width room_height room_caption room_persistent score lives health show_score show_lives show_health caption_score caption_lives caption_health event_type event_number event_object event_action application_surface gamemaker_pro gamemaker_registered gamemaker_version error_occurred error_last debug_mode keyboard_key keyboard_lastkey keyboard_lastchar keyboard_string mouse_x mouse_y mouse_button mouse_lastbutton cursor_sprite visible sprite_index sprite_width sprite_height sprite_xoffset sprite_yoffset image_number image_index image_speed depth image_xscale image_yscale image_angle image_alpha image_blend bbox_left bbox_right bbox_top bbox_bottom layer background_colour background_showcolour background_color background_showcolor view_enabled view_current view_visible view_xview view_yview view_wview view_hview view_xport view_yport view_wport view_hport view_angle view_hborder view_vborder view_hspeed view_vspeed view_object view_surface_id view_camera game_id game_display_name game_project_name game_save_id working_directory temp_directory program_directory browser_width browser_height os_type os_device os_browser os_version display_aa async_load delta_time webgl_enabled event_data iap_data phy_rotation phy_position_x phy_position_y phy_angular_velocity phy_linear_velocity_x phy_linear_velocity_y phy_speed_x phy_speed_y phy_speed phy_angular_damping phy_linear_damping phy_bullet phy_fixed_rotation phy_active phy_mass phy_inertia phy_com_x phy_com_y phy_dynamic phy_kinematic phy_sleeping phy_collision_points phy_collision_x phy_collision_y phy_col_normal_x phy_col_normal_y phy_position_xprevious phy_position_yprevious"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE]}}},"6ZBy":function(e,t){e.exports=function(e){var t="~?[a-z$_][0-9a-zA-Z$_]*",n="`?[A-Z$_][0-9a-zA-Z$_]*",a="("+(["||","&&","++","**","+.","*","/","*.","/.","...","|>"].map((function(e){return e.split("").map((function(e){return"\\"+e})).join("")})).join("|")+"|==|===)"),r="\\s+"+a+"\\s+",i={keyword:"and as asr assert begin class constraint do done downto else end exception external for fun function functor if in include inherit initializer land lazy let lor lsl lsr lxor match method mod module mutable new nonrec object of open or private rec sig struct then to try type val virtual when while with",built_in:"array bool bytes char exn|5 float int int32 int64 list lazy_t|5 nativeint|5 ref string unit ",literal:"true false"},o="\\b(0[xX][a-fA-F0-9_]+[Lln]?|0[oO][0-7_]+[Lln]?|0[bB][01_]+[Lln]?|[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)",s={className:"number",relevance:0,variants:[{begin:o},{begin:"\\(\\-"+o+"\\)"}]},l={className:"operator",relevance:0,begin:a},c=[{className:"identifier",relevance:0,begin:t},l,s],_=[e.QUOTE_STRING_MODE,l,{className:"module",begin:"\\b"+n,returnBegin:!0,end:".",contains:[{className:"identifier",begin:n,relevance:0}]}],d=[{className:"module",begin:"\\b"+n,returnBegin:!0,end:".",relevance:0,contains:[{className:"identifier",begin:n,relevance:0}]}],u={className:"function",relevance:0,keywords:i,variants:[{begin:"\\s(\\(\\.?.*?\\)|"+t+")\\s*=>",end:"\\s*=>",returnBegin:!0,relevance:0,contains:[{className:"params",variants:[{begin:t},{begin:"~?[a-z$_][0-9a-zA-Z$_]*(s*:s*[a-z$_][0-9a-z$_]*((s*('?[a-z$_][0-9a-z$_]*s*(,'?[a-z$_][0-9a-z$_]*)*)?s*))?)?(s*:s*[a-z$_][0-9a-z$_]*((s*('?[a-z$_][0-9a-z$_]*s*(,'?[a-z$_][0-9a-z$_]*)*)?s*))?)?"},{begin:/\(\s*\)/}]}]},{begin:"\\s\\(\\.?[^;\\|]*\\)\\s*=>",end:"\\s=>",returnBegin:!0,relevance:0,contains:[{className:"params",relevance:0,variants:[{begin:t,end:"(,|\\n|\\))",relevance:0,contains:[l,{className:"typing",begin:":",end:"(,|\\n)",returnBegin:!0,relevance:0,contains:d}]}]}]},{begin:"\\(\\.\\s"+t+"\\)\\s*=>"}]};_.push(u);var p={className:"constructor",begin:n+"\\(",end:"\\)",illegal:"\\n",keywords:i,contains:[e.QUOTE_STRING_MODE,l,{className:"params",begin:"\\b"+t}]},m={className:"pattern-match",begin:"\\|",returnBegin:!0,keywords:i,end:"=>",relevance:0,contains:[p,l,{relevance:0,className:"constructor",begin:n}]},E={className:"module-access",keywords:i,returnBegin:!0,variants:[{begin:"\\b("+n+"\\.)+"+t},{begin:"\\b("+n+"\\.)+\\(",end:"\\)",returnBegin:!0,contains:[u,{begin:"\\(",end:"\\)",skip:!0}].concat(_)},{begin:"\\b("+n+"\\.)+{",end:"}"}],contains:_};return d.push(E),{name:"ReasonML",aliases:["re"],keywords:i,illegal:"(:\\-|:=|\\${|\\+=)",contains:[e.COMMENT("/\\*","\\*/",{illegal:"^(\\#,\\/\\/)"}),{className:"character",begin:"'(\\\\[^']+|[^'])'",illegal:"\\n",relevance:0},e.QUOTE_STRING_MODE,{className:"literal",begin:"\\(\\)",relevance:0},{className:"literal",begin:"\\[\\|",end:"\\|\\]",relevance:0,contains:c},{className:"literal",begin:"\\[",end:"\\]",relevance:0,contains:c},p,{className:"operator",begin:r,illegal:"\\-\\->",relevance:0},s,e.C_LINE_COMMENT_MODE,m,u,{className:"module-def",begin:"\\bmodule\\s+"+t+"\\s+"+n+"\\s+=\\s+{",end:"}",returnBegin:!0,keywords:i,relevance:0,contains:[{className:"module",relevance:0,begin:n},{begin:"{",end:"}",skip:!0}].concat(_)},E]}}},"6k3J":function(e,t){e.exports=function(e){var t=[e.C_NUMBER_MODE,{className:"string",begin:"'|\"",end:"'|\"",contains:[e.BACKSLASH_ESCAPE,{begin:"''"}]}];return{name:"Scilab",aliases:["sci"],lexemes:/%?\w+/,keywords:{keyword:"abort break case clear catch continue do elseif else endfunction end for function global if pause return resume select try then while",literal:"%f %F %t %T %pi %eps %inf %nan %e %i %z %s",built_in:"abs and acos asin atan ceil cd chdir clearglobal cosh cos cumprod deff disp error exec execstr exists exp eye gettext floor fprintf fread fsolve imag isdef isempty isinfisnan isvector lasterror length load linspace list listfiles log10 log2 log max min msprintf mclose mopen ones or pathconvert poly printf prod pwd rand real round sinh sin size gsort sprintf sqrt strcat strcmps tring sum system tanh tan type typename warning zeros matrix"},illegal:'("|#|/\\*|\\s+/\\w+)',contains:[{className:"function",beginKeywords:"function",end:"$",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)"}]},{begin:"[a-zA-Z_][a-zA-Z_0-9]*('+[\\.']*|[\\.']+)",end:"",relevance:0},{begin:"\\[",end:"\\]'*[\\.']*",relevance:0,contains:t},e.COMMENT("//","$")].concat(t)}}},"6quq":function(e,t){e.exports=function(e){return{name:"CMake",aliases:["cmake.in"],case_insensitive:!0,keywords:{keyword:"break cmake_host_system_information cmake_minimum_required cmake_parse_arguments cmake_policy configure_file continue elseif else endforeach endfunction endif endmacro endwhile execute_process file find_file find_library find_package find_path find_program foreach function get_cmake_property get_directory_property get_filename_component get_property if include include_guard list macro mark_as_advanced math message option return separate_arguments set_directory_properties set_property set site_name string unset variable_watch while add_compile_definitions add_compile_options add_custom_command add_custom_target add_definitions add_dependencies add_executable add_library add_link_options add_subdirectory add_test aux_source_directory build_command create_test_sourcelist define_property enable_language enable_testing export fltk_wrap_ui get_source_file_property get_target_property get_test_property include_directories include_external_msproject include_regular_expression install link_directories link_libraries load_cache project qt_wrap_cpp qt_wrap_ui remove_definitions set_source_files_properties set_target_properties set_tests_properties source_group target_compile_definitions target_compile_features target_compile_options target_include_directories target_link_directories target_link_libraries target_link_options target_sources try_compile try_run ctest_build ctest_configure ctest_coverage ctest_empty_binary_directory ctest_memcheck ctest_read_custom_files ctest_run_script ctest_sleep ctest_start ctest_submit ctest_test ctest_update ctest_upload build_name exec_program export_library_dependencies install_files install_programs install_targets load_command make_directory output_required_files remove subdir_depends subdirs use_mangled_mesa utility_source variable_requires write_file qt5_use_modules qt5_use_package qt5_wrap_cpp on off true false and or not command policy target test exists is_newer_than is_directory is_symlink is_absolute matches less greater equal less_equal greater_equal strless strgreater strequal strless_equal strgreater_equal version_less version_greater version_equal version_less_equal version_greater_equal in_list defined"},contains:[{className:"variable",begin:"\\${",end:"}"},e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE]}}},"73oX":function(e,t){e.exports=function(e){return{name:"Mathematica",aliases:["mma","wl"],lexemes:"(\\$|\\b)"+e.IDENT_RE+"\\b",keywords:"AASTriangle AbelianGroup Abort AbortKernels AbortProtect AbortScheduledTask Above Abs AbsArg AbsArgPlot Absolute AbsoluteCorrelation AbsoluteCorrelationFunction AbsoluteCurrentValue AbsoluteDashing AbsoluteFileName AbsoluteOptions AbsolutePointSize AbsoluteThickness AbsoluteTime AbsoluteTiming AcceptanceThreshold AccountingForm Accumulate Accuracy AccuracyGoal ActionDelay ActionMenu ActionMenuBox ActionMenuBoxOptions Activate Active ActiveClassification ActiveClassificationObject ActiveItem ActivePrediction ActivePredictionObject ActiveStyle AcyclicGraphQ AddOnHelpPath AddSides AddTo AddToSearchIndex AddUsers AdjacencyGraph AdjacencyList AdjacencyMatrix AdjustmentBox AdjustmentBoxOptions AdjustTimeSeriesForecast AdministrativeDivisionData AffineHalfSpace AffineSpace AffineStateSpaceModel AffineTransform After AggregatedEntityClass AggregationLayer AircraftData AirportData AirPressureData AirTemperatureData AiryAi AiryAiPrime AiryAiZero AiryBi AiryBiPrime AiryBiZero AlgebraicIntegerQ AlgebraicNumber AlgebraicNumberDenominator AlgebraicNumberNorm AlgebraicNumberPolynomial AlgebraicNumberTrace AlgebraicRules AlgebraicRulesData Algebraics AlgebraicUnitQ Alignment AlignmentMarker AlignmentPoint All AllowAdultContent AllowedCloudExtraParameters AllowedCloudParameterExtensions AllowedDimensions AllowedFrequencyRange AllowedHeads AllowGroupClose AllowIncomplete AllowInlineCells AllowKernelInitialization AllowLooseGrammar AllowReverseGroupClose AllowScriptLevelChange AllTrue Alphabet AlphabeticOrder AlphabeticSort AlphaChannel AlternateImage AlternatingFactorial AlternatingGroup AlternativeHypothesis Alternatives AltitudeMethod AmbientLight AmbiguityFunction AmbiguityList Analytic AnatomyData AnatomyForm AnatomyPlot3D AnatomySkinStyle AnatomyStyling AnchoredSearch And AndersonDarlingTest AngerJ AngleBisector AngleBracket AnglePath AnglePath3D AngleVector AngularGauge Animate AnimationCycleOffset AnimationCycleRepetitions AnimationDirection AnimationDisplayTime AnimationRate AnimationRepetitions AnimationRunning AnimationRunTime AnimationTimeIndex Animator AnimatorBox AnimatorBoxOptions AnimatorElements Annotate Annotation AnnotationDelete AnnotationNames AnnotationRules AnnotationValue Annuity AnnuityDue Annulus AnomalyDetection AnomalyDetectorFunction Anonymous Antialiasing AntihermitianMatrixQ Antisymmetric AntisymmetricMatrixQ Antonyms AnyOrder AnySubset AnyTrue Apart ApartSquareFree APIFunction Appearance AppearanceElements AppearanceRules AppellF1 Append AppendCheck AppendLayer AppendTo ApplicationIdentificationKey Apply ApplySides ArcCos ArcCosh ArcCot ArcCoth ArcCsc ArcCsch ArcCurvature ARCHProcess ArcLength ArcSec ArcSech ArcSin ArcSinDistribution ArcSinh ArcTan ArcTanh Area Arg ArgMax ArgMin ArgumentCountQ ARIMAProcess ArithmeticGeometricMean ARMAProcess Around AroundReplace ARProcess Array ArrayComponents ArrayDepth ArrayFilter ArrayFlatten ArrayMesh ArrayPad ArrayPlot ArrayQ ArrayResample ArrayReshape ArrayRules Arrays Arrow Arrow3DBox ArrowBox Arrowheads ASATriangle Ask AskAppend AskConfirm AskDisplay AskedQ AskedValue AskFunction AskState AskTemplateDisplay AspectRatio AspectRatioFixed Assert AssociateTo Association AssociationFormat AssociationMap AssociationQ AssociationThread AssumeDeterministic Assuming Assumptions AstronomicalData AsymptoticDSolveValue AsymptoticEqual AsymptoticEquivalent AsymptoticGreater AsymptoticGreaterEqual AsymptoticIntegrate AsymptoticLess AsymptoticLessEqual AsymptoticOutputTracker AsymptoticRSolveValue AsymptoticSolve AsymptoticSum Asynchronous AsynchronousTaskObject AsynchronousTasks Atom AtomCoordinates AtomCount AtomDiagramCoordinates AtomList AtomQ AttentionLayer Attributes Audio AudioAmplify AudioAnnotate AudioAnnotationLookup AudioBlockMap AudioCapture AudioChannelAssignment AudioChannelCombine AudioChannelMix AudioChannels AudioChannelSeparate AudioData AudioDelay AudioDelete AudioDevice AudioDistance AudioFade AudioFrequencyShift AudioGenerator AudioIdentify AudioInputDevice AudioInsert AudioIntervals AudioJoin AudioLabel AudioLength AudioLocalMeasurements AudioLooping AudioLoudness AudioMeasurements AudioNormalize AudioOutputDevice AudioOverlay AudioPad AudioPan AudioPartition AudioPause AudioPitchShift AudioPlay AudioPlot AudioQ AudioRecord AudioReplace AudioResample AudioReverb AudioSampleRate AudioSpectralMap AudioSpectralTransformation AudioSplit AudioStop AudioStream AudioStreams AudioTimeStretch AudioTrim AudioType AugmentedPolyhedron AugmentedSymmetricPolynomial Authenticate Authentication AuthenticationDialog AutoAction Autocomplete AutocompletionFunction AutoCopy AutocorrelationTest AutoDelete AutoEvaluateEvents AutoGeneratedPackage AutoIndent AutoIndentSpacings AutoItalicWords AutoloadPath AutoMatch Automatic AutomaticImageSize AutoMultiplicationSymbol AutoNumberFormatting AutoOpenNotebooks AutoOpenPalettes AutoQuoteCharacters AutoRefreshed AutoRemove AutorunSequencing AutoScaling AutoScroll AutoSpacing AutoStyleOptions AutoStyleWords AutoSubmitting Axes AxesEdge AxesLabel AxesOrigin AxesStyle AxiomaticTheory Axis BabyMonsterGroupB Back Background BackgroundAppearance BackgroundTasksSettings Backslash Backsubstitution Backward Ball Band BandpassFilter BandstopFilter BarabasiAlbertGraphDistribution BarChart BarChart3D BarcodeImage BarcodeRecognize BaringhausHenzeTest BarLegend BarlowProschanImportance BarnesG BarOrigin BarSpacing BartlettHannWindow BartlettWindow BaseDecode BaseEncode BaseForm Baseline BaselinePosition BaseStyle BasicRecurrentLayer BatchNormalizationLayer BatchSize BatesDistribution BattleLemarieWavelet BayesianMaximization BayesianMaximizationObject BayesianMinimization BayesianMinimizationObject Because BeckmannDistribution Beep Before Begin BeginDialogPacket BeginFrontEndInteractionPacket BeginPackage BellB BellY Below BenfordDistribution BeniniDistribution BenktanderGibratDistribution BenktanderWeibullDistribution BernoulliB BernoulliDistribution BernoulliGraphDistribution BernoulliProcess BernsteinBasis BesselFilterModel BesselI BesselJ BesselJZero BesselK BesselY BesselYZero Beta BetaBinomialDistribution BetaDistribution BetaNegativeBinomialDistribution BetaPrimeDistribution BetaRegularized Between BetweennessCentrality BeveledPolyhedron BezierCurve BezierCurve3DBox BezierCurve3DBoxOptions BezierCurveBox BezierCurveBoxOptions BezierFunction BilateralFilter Binarize BinaryDeserialize BinaryDistance BinaryFormat BinaryImageQ BinaryRead BinaryReadList BinarySerialize BinaryWrite BinCounts BinLists Binomial BinomialDistribution BinomialProcess BinormalDistribution BiorthogonalSplineWavelet BipartiteGraphQ BiquadraticFilterModel BirnbaumImportance BirnbaumSaundersDistribution BitAnd BitClear BitGet BitLength BitNot BitOr BitSet BitShiftLeft BitShiftRight BitXor BiweightLocation BiweightMidvariance Black BlackmanHarrisWindow BlackmanNuttallWindow BlackmanWindow Blank BlankForm BlankNullSequence BlankSequence Blend Block BlockchainAddressData BlockchainBase BlockchainBlockData BlockchainContractValue BlockchainData BlockchainGet BlockchainKeyEncode BlockchainPut BlockchainTokenData BlockchainTransaction BlockchainTransactionData BlockchainTransactionSign BlockchainTransactionSubmit BlockMap BlockRandom BlomqvistBeta BlomqvistBetaTest Blue Blur BodePlot BohmanWindow Bold Bond BondCount BondList BondQ Bookmarks Boole BooleanConsecutiveFunction BooleanConvert BooleanCountingFunction BooleanFunction BooleanGraph BooleanMaxterms BooleanMinimize BooleanMinterms BooleanQ BooleanRegion Booleans BooleanStrings BooleanTable BooleanVariables BorderDimensions BorelTannerDistribution Bottom BottomHatTransform BoundaryDiscretizeGraphics BoundaryDiscretizeRegion BoundaryMesh BoundaryMeshRegion BoundaryMeshRegionQ BoundaryStyle BoundedRegionQ BoundingRegion Bounds Box BoxBaselineShift BoxData BoxDimensions Boxed Boxes BoxForm BoxFormFormatTypes BoxFrame BoxID BoxMargins BoxMatrix BoxObject BoxRatios BoxRotation BoxRotationPoint BoxStyle BoxWhiskerChart Bra BracketingBar BraKet BrayCurtisDistance BreadthFirstScan Break BridgeData BrightnessEqualize BroadcastStationData Brown BrownForsytheTest BrownianBridgeProcess BrowserCategory BSplineBasis BSplineCurve BSplineCurve3DBox BSplineCurve3DBoxOptions BSplineCurveBox BSplineCurveBoxOptions BSplineFunction BSplineSurface BSplineSurface3DBox BSplineSurface3DBoxOptions BubbleChart BubbleChart3D BubbleScale BubbleSizes BuildingData BulletGauge BusinessDayQ ButterflyGraph ButterworthFilterModel Button ButtonBar ButtonBox ButtonBoxOptions ButtonCell ButtonContents ButtonData ButtonEvaluator ButtonExpandable ButtonFrame ButtonFunction ButtonMargins ButtonMinHeight ButtonNote ButtonNotebook ButtonSource ButtonStyle ButtonStyleMenuListing Byte ByteArray ByteArrayFormat ByteArrayQ ByteArrayToString ByteCount ByteOrdering C CachedValue CacheGraphics CachePersistence CalendarConvert CalendarData CalendarType Callout CalloutMarker CalloutStyle CallPacket CanberraDistance Cancel CancelButton CandlestickChart CanonicalGraph CanonicalizePolygon CanonicalizePolyhedron CanonicalName CanonicalWarpingCorrespondence CanonicalWarpingDistance CantorMesh CantorStaircase Cap CapForm CapitalDifferentialD Capitalize CapsuleShape CaptureRunning CardinalBSplineBasis CarlemanLinearize CarmichaelLambda CaseOrdering Cases CaseSensitive Cashflow Casoratian Catalan CatalanNumber Catch Catenate CatenateLayer CauchyDistribution CauchyWindow CayleyGraph CDF CDFDeploy CDFInformation CDFWavelet Ceiling CelestialSystem Cell CellAutoOverwrite CellBaseline CellBoundingBox CellBracketOptions CellChangeTimes CellContents CellContext CellDingbat CellDynamicExpression CellEditDuplicate CellElementsBoundingBox CellElementSpacings CellEpilog CellEvaluationDuplicate CellEvaluationFunction CellEvaluationLanguage CellEventActions CellFrame CellFrameColor CellFrameLabelMargins CellFrameLabels CellFrameMargins CellGroup CellGroupData CellGrouping CellGroupingRules CellHorizontalScrolling CellID CellLabel CellLabelAutoDelete CellLabelMargins CellLabelPositioning CellLabelStyle CellLabelTemplate CellMargins CellObject CellOpen CellPrint CellProlog Cells CellSize CellStyle CellTags CellularAutomaton CensoredDistribution Censoring Center CenterArray CenterDot CentralFeature CentralMoment CentralMomentGeneratingFunction Cepstrogram CepstrogramArray CepstrumArray CForm ChampernowneNumber ChangeOptions ChannelBase ChannelBrokerAction ChannelDatabin ChannelHistoryLength ChannelListen ChannelListener ChannelListeners ChannelListenerWait ChannelObject ChannelPreSendFunction ChannelReceiverFunction ChannelSend ChannelSubscribers ChanVeseBinarize Character CharacterCounts CharacterEncoding CharacterEncodingsPath CharacteristicFunction CharacteristicPolynomial CharacterName CharacterRange Characters ChartBaseStyle ChartElementData ChartElementDataFunction ChartElementFunction ChartElements ChartLabels ChartLayout ChartLegends ChartStyle Chebyshev1FilterModel Chebyshev2FilterModel ChebyshevDistance ChebyshevT ChebyshevU Check CheckAbort CheckAll Checkbox CheckboxBar CheckboxBox CheckboxBoxOptions ChemicalData ChessboardDistance ChiDistribution ChineseRemainder ChiSquareDistribution ChoiceButtons ChoiceDialog CholeskyDecomposition Chop ChromaticityPlot ChromaticityPlot3D ChromaticPolynomial Circle CircleBox CircleDot CircleMinus CirclePlus CirclePoints CircleThrough CircleTimes CirculantGraph CircularOrthogonalMatrixDistribution CircularQuaternionMatrixDistribution CircularRealMatrixDistribution CircularSymplecticMatrixDistribution CircularUnitaryMatrixDistribution Circumsphere CityData ClassifierFunction ClassifierInformation ClassifierMeasurements ClassifierMeasurementsObject Classify ClassPriors Clear ClearAll ClearAttributes ClearCookies ClearPermissions ClearSystemCache ClebschGordan ClickPane Clip ClipboardNotebook ClipFill ClippingStyle ClipPlanes ClipPlanesStyle ClipRange Clock ClockGauge ClockwiseContourIntegral Close Closed CloseKernels ClosenessCentrality Closing ClosingAutoSave ClosingEvent CloudAccountData CloudBase CloudConnect CloudDeploy CloudDirectory CloudDisconnect CloudEvaluate CloudExport CloudExpression CloudExpressions CloudFunction CloudGet CloudImport CloudLoggingData CloudObject CloudObjectInformation CloudObjectInformationData CloudObjectNameFormat CloudObjects CloudObjectURLType CloudPublish CloudPut CloudRenderingMethod CloudSave CloudShare CloudSubmit CloudSymbol CloudUnshare ClusterClassify ClusterDissimilarityFunction ClusteringComponents ClusteringTree CMYKColor Coarse CodeAssistOptions Coefficient CoefficientArrays CoefficientDomain CoefficientList CoefficientRules CoifletWavelet Collect Colon ColonForm ColorBalance ColorCombine ColorConvert ColorCoverage ColorData ColorDataFunction ColorDetect ColorDistance ColorFunction ColorFunctionScaling Colorize ColorNegate ColorOutput ColorProfileData ColorQ ColorQuantize ColorReplace ColorRules ColorSelectorSettings ColorSeparate ColorSetter ColorSetterBox ColorSetterBoxOptions ColorSlider ColorsNear ColorSpace ColorToneMapping Column ColumnAlignments ColumnBackgrounds ColumnForm ColumnLines ColumnsEqual ColumnSpacings ColumnWidths CombinedEntityClass CombinerFunction CometData CommonDefaultFormatTypes Commonest CommonestFilter CommonName CommonUnits CommunityBoundaryStyle CommunityGraphPlot CommunityLabels CommunityRegionStyle CompanyData CompatibleUnitQ CompilationOptions CompilationTarget Compile Compiled CompiledCodeFunction CompiledFunction CompilerOptions Complement CompleteGraph CompleteGraphQ CompleteKaryTree CompletionsListPacket Complex Complexes ComplexExpand ComplexInfinity ComplexityFunction ComplexListPlot ComplexPlot ComplexPlot3D ComponentMeasurements ComponentwiseContextMenu Compose ComposeList ComposeSeries CompositeQ Composition CompoundElement CompoundExpression CompoundPoissonDistribution CompoundPoissonProcess CompoundRenewalProcess Compress CompressedData ComputeUncertainty Condition ConditionalExpression Conditioned Cone ConeBox ConfidenceLevel ConfidenceRange ConfidenceTransform ConfigurationPath ConformAudio ConformImages Congruent ConicHullRegion ConicHullRegion3DBox ConicHullRegionBox ConicOptimization Conjugate ConjugateTranspose Conjunction Connect ConnectedComponents ConnectedGraphComponents ConnectedGraphQ ConnectedMeshComponents ConnectedMoleculeComponents ConnectedMoleculeQ ConnectionSettings ConnectLibraryCallbackFunction ConnectSystemModelComponents ConnesWindow ConoverTest ConsoleMessage ConsoleMessagePacket ConsolePrint Constant ConstantArray ConstantArrayLayer ConstantImage ConstantPlusLayer ConstantRegionQ Constants ConstantTimesLayer ConstellationData ConstrainedMax ConstrainedMin Construct Containing ContainsAll ContainsAny ContainsExactly ContainsNone ContainsOnly ContentFieldOptions ContentLocationFunction ContentObject ContentPadding ContentsBoundingBox ContentSelectable ContentSize Context ContextMenu Contexts ContextToFileName Continuation Continue ContinuedFraction ContinuedFractionK ContinuousAction ContinuousMarkovProcess ContinuousTask ContinuousTimeModelQ ContinuousWaveletData ContinuousWaveletTransform ContourDetect ContourGraphics ContourIntegral ContourLabels ContourLines ContourPlot ContourPlot3D Contours ContourShading ContourSmoothing ContourStyle ContraharmonicMean ContrastiveLossLayer Control ControlActive ControlAlignment ControlGroupContentsBox ControllabilityGramian ControllabilityMatrix ControllableDecomposition ControllableModelQ ControllerDuration ControllerInformation ControllerInformationData ControllerLinking ControllerManipulate ControllerMethod ControllerPath ControllerState ControlPlacement ControlsRendering ControlType Convergents ConversionOptions ConversionRules ConvertToBitmapPacket ConvertToPostScript ConvertToPostScriptPacket ConvexHullMesh ConvexPolygonQ ConvexPolyhedronQ ConvolutionLayer Convolve ConwayGroupCo1 ConwayGroupCo2 ConwayGroupCo3 CookieFunction Cookies CoordinateBoundingBox CoordinateBoundingBoxArray CoordinateBounds CoordinateBoundsArray CoordinateChartData CoordinatesToolOptions CoordinateTransform CoordinateTransformData CoprimeQ Coproduct CopulaDistribution Copyable CopyDatabin CopyDirectory CopyFile CopyTag CopyToClipboard CornerFilter CornerNeighbors Correlation CorrelationDistance CorrelationFunction CorrelationTest Cos Cosh CoshIntegral CosineDistance CosineWindow CosIntegral Cot Coth Count CountDistinct CountDistinctBy CounterAssignments CounterBox CounterBoxOptions CounterClockwiseContourIntegral CounterEvaluator CounterFunction CounterIncrements CounterStyle CounterStyleMenuListing CountRoots CountryData Counts CountsBy Covariance CovarianceEstimatorFunction CovarianceFunction CoxianDistribution CoxIngersollRossProcess CoxModel CoxModelFit CramerVonMisesTest CreateArchive CreateCellID CreateChannel CreateCloudExpression CreateDatabin CreateDataSystemModel CreateDialog CreateDirectory CreateDocument CreateFile CreateIntermediateDirectories CreateManagedLibraryExpression CreateNotebook CreatePalette CreatePalettePacket CreatePermissionsGroup CreateScheduledTask CreateSearchIndex CreateSystemModel CreateTemporary CreateUUID CreateWindow CriterionFunction CriticalityFailureImportance CriticalitySuccessImportance CriticalSection Cross CrossEntropyLossLayer CrossingCount CrossingDetect CrossingPolygon CrossMatrix Csc Csch CTCLossLayer Cube CubeRoot Cubics Cuboid CuboidBox Cumulant CumulantGeneratingFunction Cup CupCap Curl CurlyDoubleQuote CurlyQuote CurrencyConvert CurrentDate CurrentImage CurrentlySpeakingPacket CurrentNotebookImage CurrentScreenImage CurrentValue Curry CurvatureFlowFilter CurveClosed Cyan CycleGraph CycleIndexPolynomial Cycles CyclicGroup Cyclotomic Cylinder CylinderBox CylindricalDecomposition D DagumDistribution DamData DamerauLevenshteinDistance DampingFactor Darker Dashed Dashing DatabaseConnect DatabaseDisconnect DatabaseReference Databin DatabinAdd DatabinRemove Databins DatabinUpload DataCompression DataDistribution DataRange DataReversed Dataset Date DateBounds Dated DateDelimiters DateDifference DatedUnit DateFormat DateFunction DateHistogram DateList DateListLogPlot DateListPlot DateListStepPlot DateObject DateObjectQ DateOverlapsQ DatePattern DatePlus DateRange DateReduction DateString DateTicksFormat DateValue DateWithinQ DaubechiesWavelet DavisDistribution DawsonF DayCount DayCountConvention DayHemisphere DaylightQ DayMatchQ DayName DayNightTerminator DayPlus DayRange DayRound DeBruijnGraph DeBruijnSequence Debug DebugTag Decapitalize Decimal DecimalForm DeclareKnownSymbols DeclarePackage Decompose DeconvolutionLayer Decrement Decrypt DecryptFile DedekindEta DeepSpaceProbeData Default DefaultAxesStyle DefaultBaseStyle DefaultBoxStyle DefaultButton DefaultColor DefaultControlPlacement DefaultDuplicateCellStyle DefaultDuration DefaultElement DefaultFaceGridsStyle DefaultFieldHintStyle DefaultFont DefaultFontProperties DefaultFormatType DefaultFormatTypeForStyle DefaultFrameStyle DefaultFrameTicksStyle DefaultGridLinesStyle DefaultInlineFormatType DefaultInputFormatType DefaultLabelStyle DefaultMenuStyle DefaultNaturalLanguage DefaultNewCellStyle DefaultNewInlineCellStyle DefaultNotebook DefaultOptions DefaultOutputFormatType DefaultPrintPrecision DefaultStyle DefaultStyleDefinitions DefaultTextFormatType DefaultTextInlineFormatType DefaultTicksStyle DefaultTooltipStyle DefaultValue DefaultValues Defer DefineExternal DefineInputStreamMethod DefineOutputStreamMethod DefineResourceFunction Definition Degree DegreeCentrality DegreeGraphDistribution DegreeLexicographic DegreeReverseLexicographic DEigensystem DEigenvalues Deinitialization Del DelaunayMesh Delayed Deletable Delete DeleteAnomalies DeleteBorderComponents DeleteCases DeleteChannel DeleteCloudExpression DeleteContents DeleteDirectory DeleteDuplicates DeleteDuplicatesBy DeleteFile DeleteMissing DeleteObject DeletePermissionsKey DeleteSearchIndex DeleteSmallComponents DeleteStopwords DeleteWithContents DeletionWarning DelimitedArray DelimitedSequence Delimiter DelimiterFlashTime DelimiterMatching Delimiters DeliveryFunction Dendrogram Denominator DensityGraphics DensityHistogram DensityPlot DensityPlot3D DependentVariables Deploy Deployed Depth DepthFirstScan Derivative DerivativeFilter DerivedKey DescriptorStateSpace DesignMatrix DestroyAfterEvaluation Det DeviceClose DeviceConfigure DeviceExecute DeviceExecuteAsynchronous DeviceObject DeviceOpen DeviceOpenQ DeviceRead DeviceReadBuffer DeviceReadLatest DeviceReadList DeviceReadTimeSeries Devices DeviceStreams DeviceWrite DeviceWriteBuffer DGaussianWavelet DiacriticalPositioning Diagonal DiagonalizableMatrixQ DiagonalMatrix DiagonalMatrixQ Dialog DialogIndent DialogInput DialogLevel DialogNotebook DialogProlog DialogReturn DialogSymbols Diamond DiamondMatrix DiceDissimilarity DictionaryLookup DictionaryWordQ DifferenceDelta DifferenceOrder DifferenceQuotient DifferenceRoot DifferenceRootReduce Differences DifferentialD DifferentialRoot DifferentialRootReduce DifferentiatorFilter DigitalSignature DigitBlock DigitBlockMinimum DigitCharacter DigitCount DigitQ DihedralAngle DihedralGroup Dilation DimensionalCombinations DimensionalMeshComponents DimensionReduce DimensionReducerFunction DimensionReduction Dimensions DiracComb DiracDelta DirectedEdge DirectedEdges DirectedGraph DirectedGraphQ DirectedInfinity Direction Directive Directory DirectoryName DirectoryQ DirectoryStack DirichletBeta DirichletCharacter DirichletCondition DirichletConvolve DirichletDistribution DirichletEta DirichletL DirichletLambda DirichletTransform DirichletWindow DisableConsolePrintPacket DisableFormatting DiscreteChirpZTransform DiscreteConvolve DiscreteDelta DiscreteHadamardTransform DiscreteIndicator DiscreteLimit DiscreteLQEstimatorGains DiscreteLQRegulatorGains DiscreteLyapunovSolve DiscreteMarkovProcess DiscreteMaxLimit DiscreteMinLimit DiscretePlot DiscretePlot3D DiscreteRatio DiscreteRiccatiSolve DiscreteShift DiscreteTimeModelQ DiscreteUniformDistribution DiscreteVariables DiscreteWaveletData DiscreteWaveletPacketTransform DiscreteWaveletTransform DiscretizeGraphics DiscretizeRegion Discriminant DisjointQ Disjunction Disk DiskBox DiskMatrix DiskSegment Dispatch DispatchQ DispersionEstimatorFunction Display DisplayAllSteps DisplayEndPacket DisplayFlushImagePacket DisplayForm DisplayFunction DisplayPacket DisplayRules DisplaySetSizePacket DisplayString DisplayTemporary DisplayWith DisplayWithRef DisplayWithVariable DistanceFunction DistanceMatrix DistanceTransform Distribute Distributed DistributedContexts DistributeDefinitions DistributionChart DistributionDomain DistributionFitTest DistributionParameterAssumptions DistributionParameterQ Dithering Div Divergence Divide DivideBy Dividers DivideSides Divisible Divisors DivisorSigma DivisorSum DMSList DMSString Do DockedCells DocumentGenerator DocumentGeneratorInformation DocumentGeneratorInformationData DocumentGenerators DocumentNotebook DocumentWeightingRules Dodecahedron DomainRegistrationInformation DominantColors DOSTextFormat Dot DotDashed DotEqual DotLayer DotPlusLayer Dotted DoubleBracketingBar DoubleContourIntegral DoubleDownArrow DoubleLeftArrow DoubleLeftRightArrow DoubleLeftTee DoubleLongLeftArrow DoubleLongLeftRightArrow DoubleLongRightArrow DoubleRightArrow DoubleRightTee DoubleUpArrow DoubleUpDownArrow DoubleVerticalBar DoublyInfinite Down DownArrow DownArrowBar DownArrowUpArrow DownLeftRightVector DownLeftTeeVector DownLeftVector DownLeftVectorBar DownRightTeeVector DownRightVector DownRightVectorBar Downsample DownTee DownTeeArrow DownValues DragAndDrop DrawEdges DrawFrontFaces DrawHighlighted Drop DropoutLayer DSolve DSolveValue Dt DualLinearProgramming DualPolyhedron DualSystemsModel DumpGet DumpSave DuplicateFreeQ Duration Dynamic DynamicBox DynamicBoxOptions DynamicEvaluationTimeout DynamicGeoGraphics DynamicImage DynamicLocation DynamicModule DynamicModuleBox DynamicModuleBoxOptions DynamicModuleParent DynamicModuleValues DynamicName DynamicNamespace DynamicReference DynamicSetting DynamicUpdating DynamicWrapper DynamicWrapperBox DynamicWrapperBoxOptions E EarthImpactData EarthquakeData EccentricityCentrality Echo EchoFunction EclipseType EdgeAdd EdgeBetweennessCentrality EdgeCapacity EdgeCapForm EdgeColor EdgeConnectivity EdgeContract EdgeCost EdgeCount EdgeCoverQ EdgeCycleMatrix EdgeDashing EdgeDelete EdgeDetect EdgeForm EdgeIndex EdgeJoinForm EdgeLabeling EdgeLabels EdgeLabelStyle EdgeList EdgeOpacity EdgeQ EdgeRenderingFunction EdgeRules EdgeShapeFunction EdgeStyle EdgeThickness EdgeWeight EdgeWeightedGraphQ Editable EditButtonSettings EditCellTagsSettings EditDistance EffectiveInterest Eigensystem Eigenvalues EigenvectorCentrality Eigenvectors Element ElementData ElementwiseLayer ElidedForms Eliminate EliminationOrder Ellipsoid EllipticE EllipticExp EllipticExpPrime EllipticF EllipticFilterModel EllipticK EllipticLog EllipticNomeQ EllipticPi EllipticReducedHalfPeriods EllipticTheta EllipticThetaPrime EmbedCode EmbeddedHTML EmbeddedService EmbeddingLayer EmbeddingObject EmitSound EmphasizeSyntaxErrors EmpiricalDistribution Empty EmptyGraphQ EmptyRegion EnableConsolePrintPacket Enabled Encode Encrypt EncryptedObject EncryptFile End EndAdd EndDialogPacket EndFrontEndInteractionPacket EndOfBuffer EndOfFile EndOfLine EndOfString EndPackage EngineEnvironment EngineeringForm Enter EnterExpressionPacket EnterTextPacket Entity EntityClass EntityClassList EntityCopies EntityFunction EntityGroup EntityInstance EntityList EntityPrefetch EntityProperties EntityProperty EntityPropertyClass EntityRegister EntityStore EntityStores EntityTypeName EntityUnregister EntityValue Entropy EntropyFilter Environment Epilog EpilogFunction Equal EqualColumns EqualRows EqualTilde EqualTo EquatedTo Equilibrium EquirippleFilterKernel Equivalent Erf Erfc Erfi ErlangB ErlangC ErlangDistribution Erosion ErrorBox ErrorBoxOptions ErrorNorm ErrorPacket ErrorsDialogSettings EscapeRadius EstimatedBackground EstimatedDistribution EstimatedProcess EstimatorGains EstimatorRegulator EuclideanDistance EulerAngles EulerCharacteristic EulerE EulerGamma EulerianGraphQ EulerMatrix EulerPhi Evaluatable Evaluate Evaluated EvaluatePacket EvaluateScheduledTask EvaluationBox EvaluationCell EvaluationCompletionAction EvaluationData EvaluationElements EvaluationEnvironment EvaluationMode EvaluationMonitor EvaluationNotebook EvaluationObject EvaluationOrder Evaluator EvaluatorNames EvenQ EventData EventEvaluator EventHandler EventHandlerTag EventLabels EventSeries ExactBlackmanWindow ExactNumberQ ExactRootIsolation ExampleData Except ExcludedForms ExcludedLines ExcludedPhysicalQuantities ExcludePods Exclusions ExclusionsStyle Exists Exit ExitDialog ExoplanetData Exp Expand ExpandAll ExpandDenominator ExpandFileName ExpandNumerator Expectation ExpectationE ExpectedValue ExpGammaDistribution ExpIntegralE ExpIntegralEi ExpirationDate Exponent ExponentFunction ExponentialDistribution ExponentialFamily ExponentialGeneratingFunction ExponentialMovingAverage ExponentialPowerDistribution ExponentPosition ExponentStep Export ExportAutoReplacements ExportByteArray ExportForm ExportPacket ExportString Expression ExpressionCell ExpressionPacket ExpressionUUID ExpToTrig ExtendedEntityClass ExtendedGCD Extension ExtentElementFunction ExtentMarkers ExtentSize ExternalBundle ExternalCall ExternalDataCharacterEncoding ExternalEvaluate ExternalFunction ExternalFunctionName ExternalObject ExternalOptions ExternalSessionObject ExternalSessions ExternalTypeSignature ExternalValue Extract ExtractArchive ExtractLayer ExtremeValueDistribution FaceForm FaceGrids FaceGridsStyle FacialFeatures Factor FactorComplete Factorial Factorial2 FactorialMoment FactorialMomentGeneratingFunction FactorialPower FactorInteger FactorList FactorSquareFree FactorSquareFreeList FactorTerms FactorTermsList Fail Failure FailureAction FailureDistribution FailureQ False FareySequence FARIMAProcess FeatureDistance FeatureExtract FeatureExtraction FeatureExtractor FeatureExtractorFunction FeatureNames FeatureNearest FeatureSpacePlot FeatureSpacePlot3D FeatureTypes FEDisableConsolePrintPacket FeedbackLinearize FeedbackSector FeedbackSectorStyle FeedbackType FEEnableConsolePrintPacket FetalGrowthData Fibonacci Fibonorial FieldCompletionFunction FieldHint FieldHintStyle FieldMasked FieldSize File FileBaseName FileByteCount FileConvert FileDate FileExistsQ FileExtension FileFormat FileHandler FileHash FileInformation FileName FileNameDepth FileNameDialogSettings FileNameDrop FileNameForms FileNameJoin FileNames FileNameSetter FileNameSplit FileNameTake FilePrint FileSize FileSystemMap FileSystemScan FileTemplate FileTemplateApply FileType FilledCurve FilledCurveBox FilledCurveBoxOptions Filling FillingStyle FillingTransform FilteredEntityClass FilterRules FinancialBond FinancialData FinancialDerivative FinancialIndicator Find FindAnomalies FindArgMax FindArgMin FindChannels FindClique FindClusters FindCookies FindCurvePath FindCycle FindDevices FindDistribution FindDistributionParameters FindDivisions FindEdgeCover FindEdgeCut FindEdgeIndependentPaths FindEquationalProof FindEulerianCycle FindExternalEvaluators FindFaces FindFile FindFit FindFormula FindFundamentalCycles FindGeneratingFunction FindGeoLocation FindGeometricConjectures FindGeometricTransform FindGraphCommunities FindGraphIsomorphism FindGraphPartition FindHamiltonianCycle FindHamiltonianPath FindHiddenMarkovStates FindIndependentEdgeSet FindIndependentVertexSet FindInstance FindIntegerNullVector FindKClan FindKClique FindKClub FindKPlex FindLibrary FindLinearRecurrence FindList FindMatchingColor FindMaximum FindMaximumFlow FindMaxValue FindMeshDefects FindMinimum FindMinimumCostFlow FindMinimumCut FindMinValue FindMoleculeSubstructure FindPath FindPeaks FindPermutation FindPostmanTour FindProcessParameters FindRepeat FindRoot FindSequenceFunction FindSettings FindShortestPath FindShortestTour FindSpanningTree FindSystemModelEquilibrium FindTextualAnswer FindThreshold FindTransientRepeat FindVertexCover FindVertexCut FindVertexIndependentPaths Fine FinishDynamic FiniteAbelianGroupCount FiniteGroupCount FiniteGroupData First FirstCase FirstPassageTimeDistribution FirstPosition FischerGroupFi22 FischerGroupFi23 FischerGroupFi24Prime FisherHypergeometricDistribution FisherRatioTest FisherZDistribution Fit FitAll FitRegularization FittedModel FixedOrder FixedPoint FixedPointList FlashSelection Flat Flatten FlattenAt FlattenLayer FlatTopWindow FlipView Floor FlowPolynomial FlushPrintOutputPacket Fold FoldList FoldPair FoldPairList FollowRedirects Font FontColor FontFamily FontForm FontName FontOpacity FontPostScriptName FontProperties FontReencoding FontSize FontSlant FontSubstitutions FontTracking FontVariations FontWeight For ForAll Format FormatRules FormatType FormatTypeAutoConvert FormatValues FormBox FormBoxOptions FormControl FormFunction FormLayoutFunction FormObject FormPage FormTheme FormulaData FormulaLookup FortranForm Forward ForwardBackward Fourier FourierCoefficient FourierCosCoefficient FourierCosSeries FourierCosTransform FourierDCT FourierDCTFilter FourierDCTMatrix FourierDST FourierDSTMatrix FourierMatrix FourierParameters FourierSequenceTransform FourierSeries FourierSinCoefficient FourierSinSeries FourierSinTransform FourierTransform FourierTrigSeries FractionalBrownianMotionProcess FractionalGaussianNoiseProcess FractionalPart FractionBox FractionBoxOptions FractionLine Frame FrameBox FrameBoxOptions Framed FrameInset FrameLabel Frameless FrameMargins FrameRate FrameStyle FrameTicks FrameTicksStyle FRatioDistribution FrechetDistribution FreeQ FrenetSerretSystem FrequencySamplingFilterKernel FresnelC FresnelF FresnelG FresnelS Friday FrobeniusNumber FrobeniusSolve FromAbsoluteTime FromCharacterCode FromCoefficientRules FromContinuedFraction FromDate FromDigits FromDMS FromEntity FromJulianDate FromLetterNumber FromPolarCoordinates FromRomanNumeral FromSphericalCoordinates FromUnixTime Front FrontEndDynamicExpression FrontEndEventActions FrontEndExecute FrontEndObject FrontEndResource FrontEndResourceString FrontEndStackSize FrontEndToken FrontEndTokenExecute FrontEndValueCache FrontEndVersion FrontFaceColor FrontFaceOpacity Full FullAxes FullDefinition FullForm FullGraphics FullInformationOutputRegulator FullOptions FullRegion FullSimplify Function FunctionCompile FunctionCompileExport FunctionCompileExportByteArray FunctionCompileExportLibrary FunctionCompileExportString FunctionDomain FunctionExpand FunctionInterpolation FunctionPeriod FunctionRange FunctionSpace FussellVeselyImportanceGaborFilter GaborMatrix GaborWavelet GainMargins GainPhaseMargins GalaxyData GalleryView Gamma GammaDistribution GammaRegularized GapPenalty GARCHProcess GatedRecurrentLayer Gather GatherBy GaugeFaceElementFunction GaugeFaceStyle GaugeFrameElementFunction GaugeFrameSize GaugeFrameStyle GaugeLabels GaugeMarkers GaugeStyle GaussianFilter GaussianIntegers GaussianMatrix GaussianOrthogonalMatrixDistribution GaussianSymplecticMatrixDistribution GaussianUnitaryMatrixDistribution GaussianWindow GCD GegenbauerC General GeneralizedLinearModelFit GenerateAsymmetricKeyPair GenerateConditions GeneratedCell GeneratedDocumentBinding GenerateDerivedKey GenerateDigitalSignature GenerateDocument GeneratedParameters GeneratedQuantityMagnitudes GenerateHTTPResponse GenerateSecuredAuthenticationKey GenerateSymmetricKey GeneratingFunction GeneratorDescription GeneratorHistoryLength GeneratorOutputType Generic GenericCylindricalDecomposition GenomeData GenomeLookup GeoAntipode GeoArea GeoArraySize GeoBackground GeoBoundingBox GeoBounds GeoBoundsRegion GeoBubbleChart GeoCenter GeoCircle GeodesicClosing GeodesicDilation GeodesicErosion GeodesicOpening GeoDestination GeodesyData GeoDirection GeoDisk GeoDisplacement GeoDistance GeoDistanceList GeoElevationData GeoEntities GeoGraphics GeogravityModelData GeoGridDirectionDifference GeoGridLines GeoGridLinesStyle GeoGridPosition GeoGridRange GeoGridRangePadding GeoGridUnitArea GeoGridUnitDistance GeoGridVector GeoGroup GeoHemisphere GeoHemisphereBoundary GeoHistogram GeoIdentify GeoImage GeoLabels GeoLength GeoListPlot GeoLocation GeologicalPeriodData GeomagneticModelData GeoMarker GeometricAssertion GeometricBrownianMotionProcess GeometricDistribution GeometricMean GeometricMeanFilter GeometricScene GeometricTransformation GeometricTransformation3DBox GeometricTransformation3DBoxOptions GeometricTransformationBox GeometricTransformationBoxOptions GeoModel GeoNearest GeoPath GeoPosition GeoPositionENU GeoPositionXYZ GeoProjection GeoProjectionData GeoRange GeoRangePadding GeoRegionValuePlot GeoResolution GeoScaleBar GeoServer GeoSmoothHistogram GeoStreamPlot GeoStyling GeoStylingImageFunction GeoVariant GeoVector GeoVectorENU GeoVectorPlot GeoVectorXYZ GeoVisibleRegion GeoVisibleRegionBoundary GeoWithinQ GeoZoomLevel GestureHandler GestureHandlerTag Get GetBoundingBoxSizePacket GetContext GetEnvironment GetFileName GetFrontEndOptionsDataPacket GetLinebreakInformationPacket GetMenusPacket GetPageBreakInformationPacket Glaisher GlobalClusteringCoefficient GlobalPreferences GlobalSession Glow GoldenAngle GoldenRatio GompertzMakehamDistribution GoodmanKruskalGamma GoodmanKruskalGammaTest Goto Grad Gradient GradientFilter GradientOrientationFilter GrammarApply GrammarRules GrammarToken Graph Graph3D GraphAssortativity GraphAutomorphismGroup GraphCenter GraphComplement GraphData GraphDensity GraphDiameter GraphDifference GraphDisjointUnion GraphDistance GraphDistanceMatrix GraphElementData GraphEmbedding GraphHighlight GraphHighlightStyle GraphHub Graphics Graphics3D Graphics3DBox Graphics3DBoxOptions GraphicsArray GraphicsBaseline GraphicsBox GraphicsBoxOptions GraphicsColor GraphicsColumn GraphicsComplex GraphicsComplex3DBox GraphicsComplex3DBoxOptions GraphicsComplexBox GraphicsComplexBoxOptions GraphicsContents GraphicsData GraphicsGrid GraphicsGridBox GraphicsGroup GraphicsGroup3DBox GraphicsGroup3DBoxOptions GraphicsGroupBox GraphicsGroupBoxOptions GraphicsGrouping GraphicsHighlightColor GraphicsRow GraphicsSpacing GraphicsStyle GraphIntersection GraphLayout GraphLinkEfficiency GraphPeriphery GraphPlot GraphPlot3D GraphPower GraphPropertyDistribution GraphQ GraphRadius GraphReciprocity GraphRoot GraphStyle GraphUnion Gray GrayLevel Greater GreaterEqual GreaterEqualLess GreaterEqualThan GreaterFullEqual GreaterGreater GreaterLess GreaterSlantEqual GreaterThan GreaterTilde Green GreenFunction Grid GridBaseline GridBox GridBoxAlignment GridBoxBackground GridBoxDividers GridBoxFrame GridBoxItemSize GridBoxItemStyle GridBoxOptions GridBoxSpacings GridCreationSettings GridDefaultElement GridElementStyleOptions GridFrame GridFrameMargins GridGraph GridLines GridLinesStyle GroebnerBasis GroupActionBase GroupBy GroupCentralizer GroupElementFromWord GroupElementPosition GroupElementQ GroupElements GroupElementToWord GroupGenerators Groupings GroupMultiplicationTable GroupOrbits GroupOrder GroupPageBreakWithin GroupSetwiseStabilizer GroupStabilizer GroupStabilizerChain GroupTogetherGrouping GroupTogetherNestedGrouping GrowCutComponents Gudermannian GuidedFilter GumbelDistribution HaarWavelet HadamardMatrix HalfLine HalfNormalDistribution HalfPlane HalfSpace HamiltonianGraphQ HammingDistance HammingWindow HandlerFunctions HandlerFunctionsKeys HankelH1 HankelH2 HankelMatrix HankelTransform HannPoissonWindow HannWindow HaradaNortonGroupHN HararyGraph HarmonicMean HarmonicMeanFilter HarmonicNumber Hash Haversine HazardFunction Head HeadCompose HeaderLines Heads HeavisideLambda HeavisidePi HeavisideTheta HeldGroupHe HeldPart HelpBrowserLookup HelpBrowserNotebook HelpBrowserSettings Here HermiteDecomposition HermiteH HermitianMatrixQ HessenbergDecomposition Hessian HexadecimalCharacter Hexahedron HexahedronBox HexahedronBoxOptions HiddenMarkovProcess HiddenSurface Highlighted HighlightGraph HighlightImage HighlightMesh HighpassFilter HigmanSimsGroupHS HilbertCurve HilbertFilter HilbertMatrix Histogram Histogram3D HistogramDistribution HistogramList HistogramTransform HistogramTransformInterpolation HistoricalPeriodData HitMissTransform HITSCentrality HjorthDistribution HodgeDual HoeffdingD HoeffdingDTest Hold HoldAll HoldAllComplete HoldComplete HoldFirst HoldForm HoldPattern HoldRest HolidayCalendar HomeDirectory HomePage Horizontal HorizontalForm HorizontalGauge HorizontalScrollPosition HornerForm HostLookup HotellingTSquareDistribution HoytDistribution HTMLSave HTTPErrorResponse HTTPRedirect HTTPRequest HTTPRequestData HTTPResponse Hue HumanGrowthData HumpDownHump HumpEqual HurwitzLerchPhi HurwitzZeta HyperbolicDistribution HypercubeGraph HyperexponentialDistribution Hyperfactorial Hypergeometric0F1 Hypergeometric0F1Regularized Hypergeometric1F1 Hypergeometric1F1Regularized Hypergeometric2F1 Hypergeometric2F1Regularized HypergeometricDistribution HypergeometricPFQ HypergeometricPFQRegularized HypergeometricU Hyperlink HyperlinkCreationSettings Hyperplane Hyphenation HyphenationOptions HypoexponentialDistribution HypothesisTestData I IconData Iconize IconizedObject IconRules Icosahedron Identity IdentityMatrix If IgnoreCase IgnoreDiacritics IgnorePunctuation IgnoreSpellCheck IgnoringInactive Im Image Image3D Image3DProjection Image3DSlices ImageAccumulate ImageAdd ImageAdjust ImageAlign ImageApply ImageApplyIndexed ImageAspectRatio ImageAssemble ImageAugmentationLayer ImageBoundingBoxes ImageCache ImageCacheValid ImageCapture ImageCaptureFunction ImageCases ImageChannels ImageClip ImageCollage ImageColorSpace ImageCompose ImageContainsQ ImageContents ImageConvolve ImageCooccurrence ImageCorners ImageCorrelate ImageCorrespondingPoints ImageCrop ImageData ImageDeconvolve ImageDemosaic ImageDifference ImageDimensions ImageDisplacements ImageDistance ImageEffect ImageExposureCombine ImageFeatureTrack ImageFileApply ImageFileFilter ImageFileScan ImageFilter ImageFocusCombine ImageForestingComponents ImageFormattingWidth ImageForwardTransformation ImageGraphics ImageHistogram ImageIdentify ImageInstanceQ ImageKeypoints ImageLevels ImageLines ImageMargins ImageMarker ImageMarkers ImageMeasurements ImageMesh ImageMultiply ImageOffset ImagePad ImagePadding ImagePartition ImagePeriodogram ImagePerspectiveTransformation ImagePosition ImagePreviewFunction ImagePyramid ImagePyramidApply ImageQ ImageRangeCache ImageRecolor ImageReflect ImageRegion ImageResize ImageResolution ImageRestyle ImageRotate ImageRotated ImageSaliencyFilter ImageScaled ImageScan ImageSize ImageSizeAction ImageSizeCache ImageSizeMultipliers ImageSizeRaw ImageSubtract ImageTake ImageTransformation ImageTrim ImageType ImageValue ImageValuePositions ImagingDevice ImplicitRegion Implies Import ImportAutoReplacements ImportByteArray ImportOptions ImportString ImprovementImportance In Inactivate Inactive IncidenceGraph IncidenceList IncidenceMatrix IncludeAromaticBonds IncludeConstantBasis IncludeDefinitions IncludeDirectories IncludeFileExtension IncludeGeneratorTasks IncludeHydrogens IncludeInflections IncludeMetaInformation IncludePods IncludeQuantities IncludeRelatedTables IncludeSingularTerm IncludeWindowTimes Increment IndefiniteMatrixQ Indent IndentingNewlineSpacings IndentMaxFraction IndependenceTest IndependentEdgeSetQ IndependentPhysicalQuantity IndependentUnit IndependentUnitDimension IndependentVertexSetQ Indeterminate IndeterminateThreshold IndexCreationOptions Indexed IndexGraph IndexTag Inequality InexactNumberQ InexactNumbers InfiniteLine InfinitePlane Infinity Infix InflationAdjust InflationMethod Information InformationData InformationDataGrid Inherited InheritScope InhomogeneousPoissonProcess InitialEvaluationHistory Initialization InitializationCell InitializationCellEvaluation InitializationCellWarning InitializationObjects InitializationValue Initialize InitialSeeding InlineCounterAssignments InlineCounterIncrements InlineRules Inner InnerPolygon InnerPolyhedron Inpaint Input InputAliases InputAssumptions InputAutoReplacements InputField InputFieldBox InputFieldBoxOptions InputForm InputGrouping InputNamePacket InputNotebook InputPacket InputSettings InputStream InputString InputStringPacket InputToBoxFormPacket Insert InsertionFunction InsertionPointObject InsertLinebreaks InsertResults Inset Inset3DBox Inset3DBoxOptions InsetBox InsetBoxOptions Insphere Install InstallService InstanceNormalizationLayer InString Integer IntegerDigits IntegerExponent IntegerLength IntegerName IntegerPart IntegerPartitions IntegerQ IntegerReverse Integers IntegerString Integral Integrate Interactive InteractiveTradingChart Interlaced Interleaving InternallyBalancedDecomposition InterpolatingFunction InterpolatingPolynomial Interpolation InterpolationOrder InterpolationPoints InterpolationPrecision Interpretation InterpretationBox InterpretationBoxOptions InterpretationFunction Interpreter InterpretTemplate InterquartileRange Interrupt InterruptSettings IntersectingQ Intersection Interval IntervalIntersection IntervalMarkers IntervalMarkersStyle IntervalMemberQ IntervalSlider IntervalUnion Into Inverse InverseBetaRegularized InverseCDF InverseChiSquareDistribution InverseContinuousWaveletTransform InverseDistanceTransform InverseEllipticNomeQ InverseErf InverseErfc InverseFourier InverseFourierCosTransform InverseFourierSequenceTransform InverseFourierSinTransform InverseFourierTransform InverseFunction InverseFunctions InverseGammaDistribution InverseGammaRegularized InverseGaussianDistribution InverseGudermannian InverseHankelTransform InverseHaversine InverseImagePyramid InverseJacobiCD InverseJacobiCN InverseJacobiCS InverseJacobiDC InverseJacobiDN InverseJacobiDS InverseJacobiNC InverseJacobiND InverseJacobiNS InverseJacobiSC InverseJacobiSD InverseJacobiSN InverseLaplaceTransform InverseMellinTransform InversePermutation InverseRadon InverseRadonTransform InverseSeries InverseShortTimeFourier InverseSpectrogram InverseSurvivalFunction InverseTransformedRegion InverseWaveletTransform InverseWeierstrassP InverseWishartMatrixDistribution InverseZTransform Invisible InvisibleApplication InvisibleTimes IPAddress IrreduciblePolynomialQ IslandData IsolatingInterval IsomorphicGraphQ IsotopeData Italic Item ItemAspectRatio ItemBox ItemBoxOptions ItemSize ItemStyle ItoProcess JaccardDissimilarity JacobiAmplitude Jacobian JacobiCD JacobiCN JacobiCS JacobiDC JacobiDN JacobiDS JacobiNC JacobiND JacobiNS JacobiP JacobiSC JacobiSD JacobiSN JacobiSymbol JacobiZeta JankoGroupJ1 JankoGroupJ2 JankoGroupJ3 JankoGroupJ4 JarqueBeraALMTest JohnsonDistribution Join JoinAcross Joined JoinedCurve JoinedCurveBox JoinedCurveBoxOptions JoinForm JordanDecomposition JordanModelDecomposition JulianDate JuliaSetBoettcher JuliaSetIterationCount JuliaSetPlot JuliaSetPoints K KagiChart KaiserBesselWindow KaiserWindow KalmanEstimator KalmanFilter KarhunenLoeveDecomposition KaryTree KatzCentrality KCoreComponents KDistribution KEdgeConnectedComponents KEdgeConnectedGraphQ KelvinBei KelvinBer KelvinKei KelvinKer KendallTau KendallTauTest KernelExecute KernelFunction KernelMixtureDistribution Kernels Ket Key KeyCollisionFunction KeyComplement KeyDrop KeyDropFrom KeyExistsQ KeyFreeQ KeyIntersection KeyMap KeyMemberQ KeypointStrength Keys KeySelect KeySort KeySortBy KeyTake KeyUnion KeyValueMap KeyValuePattern Khinchin KillProcess KirchhoffGraph KirchhoffMatrix KleinInvariantJ KnapsackSolve KnightTourGraph KnotData KnownUnitQ KochCurve KolmogorovSmirnovTest KroneckerDelta KroneckerModelDecomposition KroneckerProduct KroneckerSymbol KuiperTest KumaraswamyDistribution Kurtosis KuwaharaFilter KVertexConnectedComponents KVertexConnectedGraphQ LABColor Label Labeled LabeledSlider LabelingFunction LabelingSize LabelStyle LabelVisibility LaguerreL LakeData LambdaComponents LambertW LaminaData LanczosWindow LandauDistribution Language LanguageCategory LanguageData LanguageIdentify LanguageOptions LaplaceDistribution LaplaceTransform Laplacian LaplacianFilter LaplacianGaussianFilter Large Larger Last Latitude LatitudeLongitude LatticeData LatticeReduce Launch LaunchKernels LayeredGraphPlot LayerSizeFunction LayoutInformation LCHColor LCM LeaderSize LeafCount LeapYearQ LearnDistribution LearnedDistribution LearningRate LearningRateMultipliers LeastSquares LeastSquaresFilterKernel Left LeftArrow LeftArrowBar LeftArrowRightArrow LeftDownTeeVector LeftDownVector LeftDownVectorBar LeftRightArrow LeftRightVector LeftTee LeftTeeArrow LeftTeeVector LeftTriangle LeftTriangleBar LeftTriangleEqual LeftUpDownVector LeftUpTeeVector LeftUpVector LeftUpVectorBar LeftVector LeftVectorBar LegendAppearance Legended LegendFunction LegendLabel LegendLayout LegendMargins LegendMarkers LegendMarkerSize LegendreP LegendreQ LegendreType Length LengthWhile LerchPhi Less LessEqual LessEqualGreater LessEqualThan LessFullEqual LessGreater LessLess LessSlantEqual LessThan LessTilde LetterCharacter LetterCounts LetterNumber LetterQ Level LeveneTest LeviCivitaTensor LevyDistribution Lexicographic LibraryDataType LibraryFunction LibraryFunctionError LibraryFunctionInformation LibraryFunctionLoad LibraryFunctionUnload LibraryLoad LibraryUnload LicenseID LiftingFilterData LiftingWaveletTransform LightBlue LightBrown LightCyan Lighter LightGray LightGreen Lighting LightingAngle LightMagenta LightOrange LightPink LightPurple LightRed LightSources LightYellow Likelihood Limit LimitsPositioning LimitsPositioningTokens LindleyDistribution Line Line3DBox Line3DBoxOptions LinearFilter LinearFractionalOptimization LinearFractionalTransform LinearGradientImage LinearizingTransformationData LinearLayer LinearModelFit LinearOffsetFunction LinearOptimization LinearProgramming LinearRecurrence LinearSolve LinearSolveFunction LineBox LineBoxOptions LineBreak LinebreakAdjustments LineBreakChart LinebreakSemicolonWeighting LineBreakWithin LineColor LineGraph LineIndent LineIndentMaxFraction LineIntegralConvolutionPlot LineIntegralConvolutionScale LineLegend LineOpacity LineSpacing LineWrapParts LinkActivate LinkClose LinkConnect LinkConnectedQ LinkCreate LinkError LinkFlush LinkFunction LinkHost LinkInterrupt LinkLaunch LinkMode LinkObject LinkOpen LinkOptions LinkPatterns LinkProtocol LinkRankCentrality LinkRead LinkReadHeld LinkReadyQ Links LinkService LinkWrite LinkWriteHeld LiouvilleLambda List Listable ListAnimate ListContourPlot ListContourPlot3D ListConvolve ListCorrelate ListCurvePathPlot ListDeconvolve ListDensityPlot ListDensityPlot3D Listen ListFormat ListFourierSequenceTransform ListInterpolation ListLineIntegralConvolutionPlot ListLinePlot ListLogLinearPlot ListLogLogPlot ListLogPlot ListPicker ListPickerBox ListPickerBoxBackground ListPickerBoxOptions ListPlay ListPlot ListPlot3D ListPointPlot3D ListPolarPlot ListQ ListSliceContourPlot3D ListSliceDensityPlot3D ListSliceVectorPlot3D ListStepPlot ListStreamDensityPlot ListStreamPlot ListSurfacePlot3D ListVectorDensityPlot ListVectorPlot ListVectorPlot3D ListZTransform Literal LiteralSearch LocalAdaptiveBinarize LocalCache LocalClusteringCoefficient LocalizeDefinitions LocalizeVariables LocalObject LocalObjects LocalResponseNormalizationLayer LocalSubmit LocalSymbol LocalTime LocalTimeZone LocationEquivalenceTest LocationTest Locator LocatorAutoCreate LocatorBox LocatorBoxOptions LocatorCentering LocatorPane LocatorPaneBox LocatorPaneBoxOptions LocatorRegion Locked Log Log10 Log2 LogBarnesG LogGamma LogGammaDistribution LogicalExpand LogIntegral LogisticDistribution LogisticSigmoid LogitModelFit LogLikelihood LogLinearPlot LogLogisticDistribution LogLogPlot LogMultinormalDistribution LogNormalDistribution LogPlot LogRankTest LogSeriesDistribution LongEqual Longest LongestCommonSequence LongestCommonSequencePositions LongestCommonSubsequence LongestCommonSubsequencePositions LongestMatch LongestOrderedSequence LongForm Longitude LongLeftArrow LongLeftRightArrow LongRightArrow LongShortTermMemoryLayer Lookup Loopback LoopFreeGraphQ LossFunction LowerCaseQ LowerLeftArrow LowerRightArrow LowerTriangularize LowerTriangularMatrixQ LowpassFilter LQEstimatorGains LQGRegulator LQOutputRegulatorGains LQRegulatorGains LUBackSubstitution LucasL LuccioSamiComponents LUDecomposition LunarEclipse LUVColor LyapunovSolve LyonsGroupLy MachineID MachineName MachineNumberQ MachinePrecision MacintoshSystemPageSetup Magenta Magnification Magnify MailAddressValidation MailExecute MailFolder MailItem MailReceiverFunction MailResponseFunction MailSearch MailServerConnect MailServerConnection MailSettings MainSolve MaintainDynamicCaches Majority MakeBoxes MakeExpression MakeRules ManagedLibraryExpressionID ManagedLibraryExpressionQ MandelbrotSetBoettcher MandelbrotSetDistance MandelbrotSetIterationCount MandelbrotSetMemberQ MandelbrotSetPlot MangoldtLambda ManhattanDistance Manipulate Manipulator MannedSpaceMissionData MannWhitneyTest MantissaExponent Manual Map MapAll MapAt MapIndexed MAProcess MapThread MarchenkoPasturDistribution MarcumQ MardiaCombinedTest MardiaKurtosisTest MardiaSkewnessTest MarginalDistribution MarkovProcessProperties Masking MatchingDissimilarity MatchLocalNameQ MatchLocalNames MatchQ Material MathematicalFunctionData MathematicaNotation MathieuC MathieuCharacteristicA MathieuCharacteristicB MathieuCharacteristicExponent MathieuCPrime MathieuGroupM11 MathieuGroupM12 MathieuGroupM22 MathieuGroupM23 MathieuGroupM24 MathieuS MathieuSPrime MathMLForm MathMLText Matrices MatrixExp MatrixForm MatrixFunction MatrixLog MatrixNormalDistribution MatrixPlot MatrixPower MatrixPropertyDistribution MatrixQ MatrixRank MatrixTDistribution Max MaxBend MaxCellMeasure MaxColorDistance MaxDetect MaxDuration MaxExtraBandwidths MaxExtraConditions MaxFeatureDisplacement MaxFeatures MaxFilter MaximalBy Maximize MaxItems MaxIterations MaxLimit MaxMemoryUsed MaxMixtureKernels MaxOverlapFraction MaxPlotPoints MaxPoints MaxRecursion MaxStableDistribution MaxStepFraction MaxSteps MaxStepSize MaxTrainingRounds MaxValue MaxwellDistribution MaxWordGap McLaughlinGroupMcL Mean MeanAbsoluteLossLayer MeanAround MeanClusteringCoefficient MeanDegreeConnectivity MeanDeviation MeanFilter MeanGraphDistance MeanNeighborDegree MeanShift MeanShiftFilter MeanSquaredLossLayer Median MedianDeviation MedianFilter MedicalTestData Medium MeijerG MeijerGReduce MeixnerDistribution MellinConvolve MellinTransform MemberQ MemoryAvailable MemoryConstrained MemoryConstraint MemoryInUse MengerMesh Menu MenuAppearance MenuCommandKey MenuEvaluator MenuItem MenuList MenuPacket MenuSortingValue MenuStyle MenuView Merge MergeDifferences MergingFunction MersennePrimeExponent MersennePrimeExponentQ Mesh MeshCellCentroid MeshCellCount MeshCellHighlight MeshCellIndex MeshCellLabel MeshCellMarker MeshCellMeasure MeshCellQuality MeshCells MeshCellShapeFunction MeshCellStyle MeshCoordinates MeshFunctions MeshPrimitives MeshQualityGoal MeshRange MeshRefinementFunction MeshRegion MeshRegionQ MeshShading MeshStyle Message MessageDialog MessageList MessageName MessageObject MessageOptions MessagePacket Messages MessagesNotebook MetaCharacters MetaInformation MeteorShowerData Method MethodOptions MexicanHatWavelet MeyerWavelet Midpoint Min MinColorDistance MinDetect MineralData MinFilter MinimalBy MinimalPolynomial MinimalStateSpaceModel Minimize MinimumTimeIncrement MinIntervalSize MinkowskiQuestionMark MinLimit MinMax MinorPlanetData Minors MinRecursion MinSize MinStableDistribution Minus MinusPlus MinValue Missing MissingBehavior MissingDataMethod MissingDataRules MissingQ MissingString MissingStyle MissingValuePattern MittagLefflerE MixedFractionParts MixedGraphQ MixedMagnitude MixedRadix MixedRadixQuantity MixedUnit MixtureDistribution Mod Modal Mode Modular ModularInverse ModularLambda Module Modulus MoebiusMu Molecule MoleculeContainsQ MoleculeEquivalentQ MoleculeGraph MoleculeModify MoleculePattern MoleculePlot MoleculePlot3D MoleculeProperty MoleculeQ MoleculeValue Moment Momentary MomentConvert MomentEvaluate MomentGeneratingFunction MomentOfInertia Monday Monitor MonomialList MonomialOrder MonsterGroupM MoonPhase MoonPosition MorletWavelet MorphologicalBinarize MorphologicalBranchPoints MorphologicalComponents MorphologicalEulerNumber MorphologicalGraph MorphologicalPerimeter MorphologicalTransform MortalityData Most MountainData MouseAnnotation MouseAppearance MouseAppearanceTag MouseButtons Mouseover MousePointerNote MousePosition MovieData MovingAverage MovingMap MovingMedian MoyalDistribution Multicolumn MultiedgeStyle MultigraphQ MultilaunchWarning MultiLetterItalics MultiLetterStyle MultilineFunction Multinomial MultinomialDistribution MultinormalDistribution MultiplicativeOrder Multiplicity MultiplySides Multiselection MultivariateHypergeometricDistribution MultivariatePoissonDistribution MultivariateTDistribution N NakagamiDistribution NameQ Names NamespaceBox NamespaceBoxOptions Nand NArgMax NArgMin NBernoulliB NBodySimulation NBodySimulationData NCache NDEigensystem NDEigenvalues NDSolve NDSolveValue Nearest NearestFunction NearestNeighborGraph NearestTo NebulaData NeedCurrentFrontEndPackagePacket NeedCurrentFrontEndSymbolsPacket NeedlemanWunschSimilarity Needs Negative NegativeBinomialDistribution NegativeDefiniteMatrixQ NegativeIntegers NegativeMultinomialDistribution NegativeRationals NegativeReals NegativeSemidefiniteMatrixQ NeighborhoodData NeighborhoodGraph Nest NestedGreaterGreater NestedLessLess NestedScriptRules NestGraph NestList NestWhile NestWhileList NetAppend NetBidirectionalOperator NetChain NetDecoder NetDelete NetDrop NetEncoder NetEvaluationMode NetExtract NetFlatten NetFoldOperator NetGraph NetInformation NetInitialize NetInsert NetInsertSharedArrays NetJoin NetMapOperator NetMapThreadOperator NetMeasurements NetModel NetNestOperator NetPairEmbeddingOperator NetPort NetPortGradient NetPrepend NetRename NetReplace NetReplacePart NetSharedArray NetStateObject NetTake NetTrain NetTrainResultsObject NetworkPacketCapture NetworkPacketRecording NetworkPacketRecordingDuring NetworkPacketTrace NeumannValue NevilleThetaC NevilleThetaD NevilleThetaN NevilleThetaS NewPrimitiveStyle NExpectation Next NextCell NextDate NextPrime NextScheduledTaskTime NHoldAll NHoldFirst NHoldRest NicholsGridLines NicholsPlot NightHemisphere NIntegrate NMaximize NMaxValue NMinimize NMinValue NominalVariables NonAssociative NoncentralBetaDistribution NoncentralChiSquareDistribution NoncentralFRatioDistribution NoncentralStudentTDistribution NonCommutativeMultiply NonConstants NondimensionalizationTransform None NoneTrue NonlinearModelFit NonlinearStateSpaceModel NonlocalMeansFilter NonNegative NonNegativeIntegers NonNegativeRationals NonNegativeReals NonPositive NonPositiveIntegers NonPositiveRationals NonPositiveReals Nor NorlundB Norm Normal NormalDistribution NormalGrouping NormalizationLayer Normalize Normalized NormalizedSquaredEuclideanDistance NormalMatrixQ NormalsFunction NormFunction Not NotCongruent NotCupCap NotDoubleVerticalBar Notebook NotebookApply NotebookAutoSave NotebookClose NotebookConvertSettings NotebookCreate NotebookCreateReturnObject NotebookDefault NotebookDelete NotebookDirectory NotebookDynamicExpression NotebookEvaluate NotebookEventActions NotebookFileName NotebookFind NotebookFindReturnObject NotebookGet NotebookGetLayoutInformationPacket NotebookGetMisspellingsPacket NotebookImport NotebookInformation NotebookInterfaceObject NotebookLocate NotebookObject NotebookOpen NotebookOpenReturnObject NotebookPath NotebookPrint NotebookPut NotebookPutReturnObject NotebookRead NotebookResetGeneratedCells Notebooks NotebookSave NotebookSaveAs NotebookSelection NotebookSetupLayoutInformationPacket NotebooksMenu NotebookTemplate NotebookWrite NotElement NotEqualTilde NotExists NotGreater NotGreaterEqual NotGreaterFullEqual NotGreaterGreater NotGreaterLess NotGreaterSlantEqual NotGreaterTilde Nothing NotHumpDownHump NotHumpEqual NotificationFunction NotLeftTriangle NotLeftTriangleBar NotLeftTriangleEqual NotLess NotLessEqual NotLessFullEqual NotLessGreater NotLessLess NotLessSlantEqual NotLessTilde NotNestedGreaterGreater NotNestedLessLess NotPrecedes NotPrecedesEqual NotPrecedesSlantEqual NotPrecedesTilde NotReverseElement NotRightTriangle NotRightTriangleBar NotRightTriangleEqual NotSquareSubset NotSquareSubsetEqual NotSquareSuperset NotSquareSupersetEqual NotSubset NotSubsetEqual NotSucceeds NotSucceedsEqual NotSucceedsSlantEqual NotSucceedsTilde NotSuperset NotSupersetEqual NotTilde NotTildeEqual NotTildeFullEqual NotTildeTilde NotVerticalBar Now NoWhitespace NProbability NProduct NProductFactors NRoots NSolve NSum NSumTerms NuclearExplosionData NuclearReactorData Null NullRecords NullSpace NullWords Number NumberCompose NumberDecompose NumberExpand NumberFieldClassNumber NumberFieldDiscriminant NumberFieldFundamentalUnits NumberFieldIntegralBasis NumberFieldNormRepresentatives NumberFieldRegulator NumberFieldRootsOfUnity NumberFieldSignature NumberForm NumberFormat NumberLinePlot NumberMarks NumberMultiplier NumberPadding NumberPoint NumberQ NumberSeparator NumberSigns NumberString Numerator NumeratorDenominator NumericalOrder NumericalSort NumericArray NumericArrayQ NumericArrayType NumericFunction NumericQ NuttallWindow NValues NyquistGridLines NyquistPlot O ObservabilityGramian ObservabilityMatrix ObservableDecomposition ObservableModelQ OceanData Octahedron OddQ Off Offset OLEData On ONanGroupON Once OneIdentity Opacity OpacityFunction OpacityFunctionScaling Open OpenAppend Opener OpenerBox OpenerBoxOptions OpenerView OpenFunctionInspectorPacket Opening OpenRead OpenSpecialOptions OpenTemporary OpenWrite Operate OperatingSystem OptimumFlowData Optional OptionalElement OptionInspectorSettings OptionQ Options OptionsPacket OptionsPattern OptionValue OptionValueBox OptionValueBoxOptions Or Orange Order OrderDistribution OrderedQ Ordering OrderingBy OrderingLayer Orderless OrderlessPatternSequence OrnsteinUhlenbeckProcess Orthogonalize OrthogonalMatrixQ Out Outer OuterPolygon OuterPolyhedron OutputAutoOverwrite OutputControllabilityMatrix OutputControllableModelQ OutputForm OutputFormData OutputGrouping OutputMathEditExpression OutputNamePacket OutputResponse OutputSizeLimit OutputStream Over OverBar OverDot Overflow OverHat Overlaps Overlay OverlayBox OverlayBoxOptions Overscript OverscriptBox OverscriptBoxOptions OverTilde OverVector OverwriteTarget OwenT OwnValues Package PackingMethod PaddedForm Padding PaddingLayer PaddingSize PadeApproximant PadLeft PadRight PageBreakAbove PageBreakBelow PageBreakWithin PageFooterLines PageFooters PageHeaderLines PageHeaders PageHeight PageRankCentrality PageTheme PageWidth Pagination PairedBarChart PairedHistogram PairedSmoothHistogram PairedTTest PairedZTest PaletteNotebook PalettePath PalindromeQ Pane PaneBox PaneBoxOptions Panel PanelBox PanelBoxOptions Paneled PaneSelector PaneSelectorBox PaneSelectorBoxOptions PaperWidth ParabolicCylinderD ParagraphIndent ParagraphSpacing ParallelArray ParallelCombine ParallelDo Parallelepiped ParallelEvaluate Parallelization Parallelize ParallelMap ParallelNeeds Parallelogram ParallelProduct ParallelSubmit ParallelSum ParallelTable ParallelTry Parameter ParameterEstimator ParameterMixtureDistribution ParameterVariables ParametricFunction ParametricNDSolve ParametricNDSolveValue ParametricPlot ParametricPlot3D ParametricRegion ParentBox ParentCell ParentConnect ParentDirectory ParentForm Parenthesize ParentList ParentNotebook ParetoDistribution ParetoPickandsDistribution ParkData Part PartBehavior PartialCorrelationFunction PartialD ParticleAcceleratorData ParticleData Partition PartitionGranularity PartitionsP PartitionsQ PartLayer PartOfSpeech PartProtection ParzenWindow PascalDistribution PassEventsDown PassEventsUp Paste PasteAutoQuoteCharacters PasteBoxFormInlineCells PasteButton Path PathGraph PathGraphQ Pattern PatternSequence PatternTest PauliMatrix PaulWavelet Pause PausedTime PDF PeakDetect PeanoCurve PearsonChiSquareTest PearsonCorrelationTest PearsonDistribution PercentForm PerfectNumber PerfectNumberQ PerformanceGoal Perimeter PeriodicBoundaryCondition PeriodicInterpolation Periodogram PeriodogramArray Permanent Permissions PermissionsGroup PermissionsGroupMemberQ PermissionsGroups PermissionsKey PermissionsKeys PermutationCycles PermutationCyclesQ PermutationGroup PermutationLength PermutationList PermutationListQ PermutationMax PermutationMin PermutationOrder PermutationPower PermutationProduct PermutationReplace Permutations PermutationSupport Permute PeronaMalikFilter Perpendicular PerpendicularBisector PersistenceLocation PersistenceTime PersistentObject PersistentObjects PersistentValue PersonData PERTDistribution PetersenGraph PhaseMargins PhaseRange PhysicalSystemData Pi Pick PIDData PIDDerivativeFilter PIDFeedforward PIDTune Piecewise PiecewiseExpand PieChart PieChart3D PillaiTrace PillaiTraceTest PingTime Pink PitchRecognize Pivoting PixelConstrained PixelValue PixelValuePositions Placed Placeholder PlaceholderReplace Plain PlanarAngle PlanarGraph PlanarGraphQ PlanckRadiationLaw PlaneCurveData PlanetaryMoonData PlanetData PlantData Play PlayRange Plot Plot3D Plot3Matrix PlotDivision PlotJoined PlotLabel PlotLabels PlotLayout PlotLegends PlotMarkers PlotPoints PlotRange PlotRangeClipping PlotRangeClipPlanesStyle PlotRangePadding PlotRegion PlotStyle PlotTheme Pluralize Plus PlusMinus Pochhammer PodStates PodWidth Point Point3DBox Point3DBoxOptions PointBox PointBoxOptions PointFigureChart PointLegend PointSize PoissonConsulDistribution PoissonDistribution PoissonProcess PoissonWindow PolarAxes PolarAxesOrigin PolarGridLines PolarPlot PolarTicks PoleZeroMarkers PolyaAeppliDistribution PolyGamma Polygon Polygon3DBox Polygon3DBoxOptions PolygonalNumber PolygonAngle PolygonBox PolygonBoxOptions PolygonCoordinates PolygonDecomposition PolygonHoleScale PolygonIntersections PolygonScale Polyhedron PolyhedronAngle PolyhedronCoordinates PolyhedronData PolyhedronDecomposition PolyhedronGenus PolyLog PolynomialExtendedGCD PolynomialForm PolynomialGCD PolynomialLCM PolynomialMod PolynomialQ PolynomialQuotient PolynomialQuotientRemainder PolynomialReduce PolynomialRemainder Polynomials PoolingLayer PopupMenu PopupMenuBox PopupMenuBoxOptions PopupView PopupWindow Position PositionIndex Positive PositiveDefiniteMatrixQ PositiveIntegers PositiveRationals PositiveReals PositiveSemidefiniteMatrixQ PossibleZeroQ Postfix PostScript Power PowerDistribution PowerExpand PowerMod PowerModList PowerRange PowerSpectralDensity PowersRepresentations PowerSymmetricPolynomial Precedence PrecedenceForm Precedes PrecedesEqual PrecedesSlantEqual PrecedesTilde Precision PrecisionGoal PreDecrement Predict PredictionRoot PredictorFunction PredictorInformation PredictorMeasurements PredictorMeasurementsObject PreemptProtect PreferencesPath Prefix PreIncrement Prepend PrependLayer PrependTo PreprocessingRules PreserveColor PreserveImageOptions Previous PreviousCell PreviousDate PriceGraphDistribution PrimaryPlaceholder Prime PrimeNu PrimeOmega PrimePi PrimePowerQ PrimeQ Primes PrimeZetaP PrimitivePolynomialQ PrimitiveRoot PrimitiveRootList PrincipalComponents PrincipalValue Print PrintableASCIIQ PrintAction PrintForm PrintingCopies PrintingOptions PrintingPageRange PrintingStartingPageNumber PrintingStyleEnvironment Printout3D Printout3DPreviewer PrintPrecision PrintTemporary Prism PrismBox PrismBoxOptions PrivateCellOptions PrivateEvaluationOptions PrivateFontOptions PrivateFrontEndOptions PrivateKey PrivateNotebookOptions PrivatePaths Probability ProbabilityDistribution ProbabilityPlot ProbabilityPr ProbabilityScalePlot ProbitModelFit ProcessConnection ProcessDirectory ProcessEnvironment Processes ProcessEstimator ProcessInformation ProcessObject ProcessParameterAssumptions ProcessParameterQ ProcessStateDomain ProcessStatus ProcessTimeDomain Product ProductDistribution ProductLog ProgressIndicator ProgressIndicatorBox ProgressIndicatorBoxOptions Projection Prolog PromptForm ProofObject Properties Property PropertyList PropertyValue Proportion Proportional Protect Protected ProteinData Pruning PseudoInverse PsychrometricPropertyData PublicKey PublisherID PulsarData PunctuationCharacter Purple Put PutAppend Pyramid PyramidBox PyramidBoxOptions QBinomial QFactorial QGamma QHypergeometricPFQ QnDispersion QPochhammer QPolyGamma QRDecomposition QuadraticIrrationalQ QuadraticOptimization Quantile QuantilePlot Quantity QuantityArray QuantityDistribution QuantityForm QuantityMagnitude QuantityQ QuantityUnit QuantityVariable QuantityVariableCanonicalUnit QuantityVariableDimensions QuantityVariableIdentifier QuantityVariablePhysicalQuantity Quartics QuartileDeviation Quartiles QuartileSkewness Query QueueingNetworkProcess QueueingProcess QueueProperties Quiet Quit Quotient QuotientRemainder RadialGradientImage RadialityCentrality RadicalBox RadicalBoxOptions RadioButton RadioButtonBar RadioButtonBox RadioButtonBoxOptions Radon RadonTransform RamanujanTau RamanujanTauL RamanujanTauTheta RamanujanTauZ Ramp Random RandomChoice RandomColor RandomComplex RandomEntity RandomFunction RandomGeoPosition RandomGraph RandomImage RandomInstance RandomInteger RandomPermutation RandomPoint RandomPolygon RandomPolyhedron RandomPrime RandomReal RandomSample RandomSeed RandomSeeding RandomVariate RandomWalkProcess RandomWord Range RangeFilter RangeSpecification RankedMax RankedMin RarerProbability Raster Raster3D Raster3DBox Raster3DBoxOptions RasterArray RasterBox RasterBoxOptions Rasterize RasterSize Rational RationalFunctions Rationalize Rationals Ratios RawArray RawBoxes RawData RawMedium RayleighDistribution Re Read ReadByteArray ReadLine ReadList ReadProtected ReadString Real RealAbs RealBlockDiagonalForm RealDigits RealExponent Reals RealSign Reap RecognitionPrior RecognitionThreshold Record RecordLists RecordSeparators Rectangle RectangleBox RectangleBoxOptions RectangleChart RectangleChart3D RectangularRepeatingElement RecurrenceFilter RecurrenceTable RecurringDigitsForm Red Reduce RefBox ReferenceLineStyle ReferenceMarkers ReferenceMarkerStyle Refine ReflectionMatrix ReflectionTransform Refresh RefreshRate Region RegionBinarize RegionBoundary RegionBounds RegionCentroid RegionDifference RegionDimension RegionDisjoint RegionDistance RegionDistanceFunction RegionEmbeddingDimension RegionEqual RegionFunction RegionImage RegionIntersection RegionMeasure RegionMember RegionMemberFunction RegionMoment RegionNearest RegionNearestFunction RegionPlot RegionPlot3D RegionProduct RegionQ RegionResize RegionSize RegionSymmetricDifference RegionUnion RegionWithin RegisterExternalEvaluator RegularExpression Regularization RegularlySampledQ RegularPolygon ReIm ReImLabels ReImPlot ReImStyle Reinstall RelationalDatabase RelationGraph Release ReleaseHold ReliabilityDistribution ReliefImage ReliefPlot RemoteAuthorizationCaching RemoteConnect RemoteConnectionObject RemoteFile RemoteRun RemoteRunProcess Remove RemoveAlphaChannel RemoveAsynchronousTask RemoveAudioStream RemoveBackground RemoveChannelListener RemoveChannelSubscribers Removed RemoveDiacritics RemoveInputStreamMethod RemoveOutputStreamMethod RemoveProperty RemoveScheduledTask RemoveUsers RenameDirectory RenameFile RenderAll RenderingOptions RenewalProcess RenkoChart RepairMesh Repeated RepeatedNull RepeatedString RepeatedTiming RepeatingElement Replace ReplaceAll ReplaceHeldPart ReplaceImageValue ReplaceList ReplacePart ReplacePixelValue ReplaceRepeated ReplicateLayer RequiredPhysicalQuantities Resampling ResamplingAlgorithmData ResamplingMethod Rescale RescalingTransform ResetDirectory ResetMenusPacket ResetScheduledTask ReshapeLayer Residue ResizeLayer Resolve ResourceAcquire ResourceData ResourceFunction ResourceObject ResourceRegister ResourceRemove ResourceSearch ResourceSubmissionObject ResourceSubmit ResourceSystemBase ResourceUpdate ResponseForm Rest RestartInterval Restricted Resultant ResumePacket Return ReturnEntersInput ReturnExpressionPacket ReturnInputFormPacket ReturnPacket ReturnReceiptFunction ReturnTextPacket Reverse ReverseBiorthogonalSplineWavelet ReverseElement ReverseEquilibrium ReverseGraph ReverseSort ReverseSortBy ReverseUpEquilibrium RevolutionAxis RevolutionPlot3D RGBColor RiccatiSolve RiceDistribution RidgeFilter RiemannR RiemannSiegelTheta RiemannSiegelZ RiemannXi Riffle Right RightArrow RightArrowBar RightArrowLeftArrow RightComposition RightCosetRepresentative RightDownTeeVector RightDownVector RightDownVectorBar RightTee RightTeeArrow RightTeeVector RightTriangle RightTriangleBar RightTriangleEqual RightUpDownVector RightUpTeeVector RightUpVector RightUpVectorBar RightVector RightVectorBar RiskAchievementImportance RiskReductionImportance RogersTanimotoDissimilarity RollPitchYawAngles RollPitchYawMatrix RomanNumeral Root RootApproximant RootIntervals RootLocusPlot RootMeanSquare RootOfUnityQ RootReduce Roots RootSum Rotate RotateLabel RotateLeft RotateRight RotationAction RotationBox RotationBoxOptions RotationMatrix RotationTransform Round RoundImplies RoundingRadius Row RowAlignments RowBackgrounds RowBox RowHeights RowLines RowMinHeight RowReduce RowsEqual RowSpacings RSolve RSolveValue RudinShapiro RudvalisGroupRu Rule RuleCondition RuleDelayed RuleForm RulePlot RulerUnits Run RunProcess RunScheduledTask RunThrough RuntimeAttributes RuntimeOptions RussellRaoDissimilarity SameQ SameTest SampledEntityClass SampleDepth SampledSoundFunction SampledSoundList SampleRate SamplingPeriod SARIMAProcess SARMAProcess SASTriangle SatelliteData SatisfiabilityCount SatisfiabilityInstances SatisfiableQ Saturday Save Saveable SaveAutoDelete SaveConnection SaveDefinitions SavitzkyGolayMatrix SawtoothWave Scale Scaled ScaleDivisions ScaledMousePosition ScaleOrigin ScalePadding ScaleRanges ScaleRangeStyle ScalingFunctions ScalingMatrix ScalingTransform Scan ScheduledTask ScheduledTaskActiveQ ScheduledTaskInformation ScheduledTaskInformationData ScheduledTaskObject ScheduledTasks SchurDecomposition ScientificForm ScientificNotationThreshold ScorerGi ScorerGiPrime ScorerHi ScorerHiPrime ScreenRectangle ScreenStyleEnvironment ScriptBaselineShifts ScriptForm ScriptLevel ScriptMinSize ScriptRules ScriptSizeMultipliers Scrollbars ScrollingOptions ScrollPosition SearchAdjustment SearchIndexObject SearchIndices SearchQueryString SearchResultObject Sec Sech SechDistribution SecondOrderConeOptimization SectionGrouping SectorChart SectorChart3D SectorOrigin SectorSpacing SecuredAuthenticationKey SecuredAuthenticationKeys SeedRandom Select Selectable SelectComponents SelectedCells SelectedNotebook SelectFirst Selection SelectionAnimate SelectionCell SelectionCellCreateCell SelectionCellDefaultStyle SelectionCellParentStyle SelectionCreateCell SelectionDebuggerTag SelectionDuplicateCell SelectionEvaluate SelectionEvaluateCreateCell SelectionMove SelectionPlaceholder SelectionSetStyle SelectWithContents SelfLoops SelfLoopStyle SemanticImport SemanticImportString SemanticInterpretation SemialgebraicComponentInstances SemidefiniteOptimization SendMail SendMessage Sequence SequenceAlignment SequenceAttentionLayer SequenceCases SequenceCount SequenceFold SequenceFoldList SequenceForm SequenceHold SequenceLastLayer SequenceMostLayer SequencePosition SequencePredict SequencePredictorFunction SequenceReplace SequenceRestLayer SequenceReverseLayer SequenceSplit Series SeriesCoefficient SeriesData ServiceConnect ServiceDisconnect ServiceExecute ServiceObject ServiceRequest ServiceResponse ServiceSubmit SessionSubmit SessionTime Set SetAccuracy SetAlphaChannel SetAttributes Setbacks SetBoxFormNamesPacket SetCloudDirectory SetCookies SetDelayed SetDirectory SetEnvironment SetEvaluationNotebook SetFileDate SetFileLoadingContext SetNotebookStatusLine SetOptions SetOptionsPacket SetPermissions SetPrecision SetProperty SetSecuredAuthenticationKey SetSelectedNotebook SetSharedFunction SetSharedVariable SetSpeechParametersPacket SetStreamPosition SetSystemModel SetSystemOptions Setter SetterBar SetterBox SetterBoxOptions Setting SetUsers SetValue Shading Shallow ShannonWavelet ShapiroWilkTest Share SharingList Sharpen ShearingMatrix ShearingTransform ShellRegion ShenCastanMatrix ShiftedGompertzDistribution ShiftRegisterSequence Short ShortDownArrow Shortest ShortestMatch ShortestPathFunction ShortLeftArrow ShortRightArrow ShortTimeFourier ShortTimeFourierData ShortUpArrow Show ShowAutoConvert ShowAutoSpellCheck ShowAutoStyles ShowCellBracket ShowCellLabel ShowCellTags ShowClosedCellArea ShowCodeAssist ShowContents ShowControls ShowCursorTracker ShowGroupOpenCloseIcon ShowGroupOpener ShowInvisibleCharacters ShowPageBreaks ShowPredictiveInterface ShowSelection ShowShortBoxForm ShowSpecialCharacters ShowStringCharacters ShowSyntaxStyles ShrinkingDelay ShrinkWrapBoundingBox SiderealTime SiegelTheta SiegelTukeyTest SierpinskiCurve SierpinskiMesh Sign Signature SignedRankTest SignedRegionDistance SignificanceLevel SignPadding SignTest SimilarityRules SimpleGraph SimpleGraphQ SimplePolygonQ SimplePolyhedronQ Simplex Simplify Sin Sinc SinghMaddalaDistribution SingleEvaluation SingleLetterItalics SingleLetterStyle SingularValueDecomposition SingularValueList SingularValuePlot SingularValues Sinh SinhIntegral SinIntegral SixJSymbol Skeleton SkeletonTransform SkellamDistribution Skewness SkewNormalDistribution SkinStyle Skip SliceContourPlot3D SliceDensityPlot3D SliceDistribution SliceVectorPlot3D Slider Slider2D Slider2DBox Slider2DBoxOptions SliderBox SliderBoxOptions SlideView Slot SlotSequence Small SmallCircle Smaller SmithDecomposition SmithDelayCompensator SmithWatermanSimilarity SmoothDensityHistogram SmoothHistogram SmoothHistogram3D SmoothKernelDistribution SnDispersion Snippet SnubPolyhedron SocialMediaData Socket SocketConnect SocketListen SocketListener SocketObject SocketOpen SocketReadMessage SocketReadyQ Sockets SocketWaitAll SocketWaitNext SoftmaxLayer SokalSneathDissimilarity SolarEclipse SolarSystemFeatureData SolidAngle SolidData SolidRegionQ Solve SolveAlways SolveDelayed Sort SortBy SortedBy SortedEntityClass Sound SoundAndGraphics SoundNote SoundVolume SourceLink Sow Space SpaceCurveData SpaceForm Spacer Spacings Span SpanAdjustments SpanCharacterRounding SpanFromAbove SpanFromBoth SpanFromLeft SpanLineThickness SpanMaxSize SpanMinSize SpanningCharacters SpanSymmetric SparseArray SpatialGraphDistribution SpatialMedian SpatialTransformationLayer Speak SpeakTextPacket SpearmanRankTest SpearmanRho SpeciesData SpecificityGoal SpectralLineData Spectrogram SpectrogramArray Specularity SpeechRecognize SpeechSynthesize SpellingCorrection SpellingCorrectionList SpellingDictionaries SpellingDictionariesPath SpellingOptions SpellingSuggestionsPacket Sphere SphereBox SpherePoints SphericalBesselJ SphericalBesselY SphericalHankelH1 SphericalHankelH2 SphericalHarmonicY SphericalPlot3D SphericalRegion SphericalShell SpheroidalEigenvalue SpheroidalJoiningFactor SpheroidalPS SpheroidalPSPrime SpheroidalQS SpheroidalQSPrime SpheroidalRadialFactor SpheroidalS1 SpheroidalS1Prime SpheroidalS2 SpheroidalS2Prime Splice SplicedDistribution SplineClosed SplineDegree SplineKnots SplineWeights Split SplitBy SpokenString Sqrt SqrtBox SqrtBoxOptions Square SquaredEuclideanDistance SquareFreeQ SquareIntersection SquareMatrixQ SquareRepeatingElement SquaresR SquareSubset SquareSubsetEqual SquareSuperset SquareSupersetEqual SquareUnion SquareWave SSSTriangle StabilityMargins StabilityMarginsStyle StableDistribution Stack StackBegin StackComplete StackedDateListPlot StackedListPlot StackInhibit StadiumShape StandardAtmosphereData StandardDeviation StandardDeviationFilter StandardForm Standardize Standardized StandardOceanData StandbyDistribution Star StarClusterData StarData StarGraph StartAsynchronousTask StartExternalSession StartingStepSize StartOfLine StartOfString StartProcess StartScheduledTask StartupSound StartWebSession StateDimensions StateFeedbackGains StateOutputEstimator StateResponse StateSpaceModel StateSpaceRealization StateSpaceTransform StateTransformationLinearize StationaryDistribution StationaryWaveletPacketTransform StationaryWaveletTransform StatusArea StatusCentrality StepMonitor StereochemistryElements StieltjesGamma StirlingS1 StirlingS2 StopAsynchronousTask StoppingPowerData StopScheduledTask StrataVariables StratonovichProcess StreamColorFunction StreamColorFunctionScaling StreamDensityPlot StreamMarkers StreamPlot StreamPoints StreamPosition Streams StreamScale StreamStyle String StringBreak StringByteCount StringCases StringContainsQ StringCount StringDelete StringDrop StringEndsQ StringExpression StringExtract StringForm StringFormat StringFreeQ StringInsert StringJoin StringLength StringMatchQ StringPadLeft StringPadRight StringPart StringPartition StringPosition StringQ StringRepeat StringReplace StringReplaceList StringReplacePart StringReverse StringRiffle StringRotateLeft StringRotateRight StringSkeleton StringSplit StringStartsQ StringTake StringTemplate StringToByteArray StringToStream StringTrim StripBoxes StripOnInput StripWrapperBoxes StrokeForm StructuralImportance StructuredArray StructuredSelection StruveH StruveL Stub StudentTDistribution Style StyleBox StyleBoxAutoDelete StyleData StyleDefinitions StyleForm StyleHints StyleKeyMapping StyleMenuListing StyleNameDialogSettings StyleNames StylePrint StyleSheetPath Subdivide Subfactorial Subgraph SubMinus SubPlus SubresultantPolynomialRemainders SubresultantPolynomials Subresultants Subscript SubscriptBox SubscriptBoxOptions Subscripted Subsequences Subset SubsetEqual SubsetMap SubsetQ Subsets SubStar SubstitutionSystem Subsuperscript SubsuperscriptBox SubsuperscriptBoxOptions Subtract SubtractFrom SubtractSides SubValues Succeeds SucceedsEqual SucceedsSlantEqual SucceedsTilde Success SuchThat Sum SumConvergence SummationLayer Sunday SunPosition Sunrise Sunset SuperDagger SuperMinus SupernovaData SuperPlus Superscript SuperscriptBox SuperscriptBoxOptions Superset SupersetEqual SuperStar Surd SurdForm SurfaceArea SurfaceColor SurfaceData SurfaceGraphics SurvivalDistribution SurvivalFunction SurvivalModel SurvivalModelFit SuspendPacket SuzukiDistribution SuzukiGroupSuz SwatchLegend Switch Symbol SymbolName SymletWavelet Symmetric SymmetricGroup SymmetricKey SymmetricMatrixQ SymmetricPolynomial SymmetricReduction Symmetrize SymmetrizedArray SymmetrizedArrayRules SymmetrizedDependentComponents SymmetrizedIndependentComponents SymmetrizedReplacePart SynchronousInitialization SynchronousUpdating Synonyms Syntax SyntaxForm SyntaxInformation SyntaxLength SyntaxPacket SyntaxQ SynthesizeMissingValues SystemDialogInput SystemException SystemGet SystemHelpPath SystemInformation SystemInformationData SystemInstall SystemModel SystemModeler SystemModelExamples SystemModelLinearize SystemModelParametricSimulate SystemModelPlot SystemModelProgressReporting SystemModelReliability SystemModels SystemModelSimulate SystemModelSimulateSensitivity SystemModelSimulationData SystemOpen SystemOptions SystemProcessData SystemProcesses SystemsConnectionsModel SystemsModelDelay SystemsModelDelayApproximate SystemsModelDelete SystemsModelDimensions SystemsModelExtract SystemsModelFeedbackConnect SystemsModelLabels SystemsModelLinearity SystemsModelMerge SystemsModelOrder SystemsModelParallelConnect SystemsModelSeriesConnect SystemsModelStateFeedbackConnect SystemsModelVectorRelativeOrders SystemStub SystemTest Tab TabFilling Table TableAlignments TableDepth TableDirections TableForm TableHeadings TableSpacing TableView TableViewBox TableViewBoxBackground TableViewBoxOptions TabSpacings TabView TabViewBox TabViewBoxOptions TagBox TagBoxNote TagBoxOptions TaggingRules TagSet TagSetDelayed TagStyle TagUnset Take TakeDrop TakeLargest TakeLargestBy TakeList TakeSmallest TakeSmallestBy TakeWhile Tally Tan Tanh TargetDevice TargetFunctions TargetSystem TargetUnits TaskAbort TaskExecute TaskObject TaskRemove TaskResume Tasks TaskSuspend TaskWait TautologyQ TelegraphProcess TemplateApply TemplateArgBox TemplateBox TemplateBoxOptions TemplateEvaluate TemplateExpression TemplateIf TemplateObject TemplateSequence TemplateSlot TemplateSlotSequence TemplateUnevaluated TemplateVerbatim TemplateWith TemporalData TemporalRegularity Temporary TemporaryVariable TensorContract TensorDimensions TensorExpand TensorProduct TensorQ TensorRank TensorReduce TensorSymmetry TensorTranspose TensorWedge TestID TestReport TestReportObject TestResultObject Tetrahedron TetrahedronBox TetrahedronBoxOptions TeXForm TeXSave Text Text3DBox Text3DBoxOptions TextAlignment TextBand TextBoundingBox TextBox TextCases TextCell TextClipboardType TextContents TextData TextElement TextForm TextGrid TextJustification TextLine TextPacket TextParagraph TextPosition TextRecognize TextSearch TextSearchReport TextSentences TextString TextStructure TextStyle TextTranslation Texture TextureCoordinateFunction TextureCoordinateScaling TextWords Therefore ThermodynamicData ThermometerGauge Thick Thickness Thin Thinning ThisLink ThompsonGroupTh Thread ThreadingLayer ThreeJSymbol Threshold Through Throw ThueMorse Thumbnail Thursday Ticks TicksStyle TideData Tilde TildeEqual TildeFullEqual TildeTilde TimeConstrained TimeConstraint TimeDirection TimeFormat TimeGoal TimelinePlot TimeObject TimeObjectQ Times TimesBy TimeSeries TimeSeriesAggregate TimeSeriesForecast TimeSeriesInsert TimeSeriesInvertibility TimeSeriesMap TimeSeriesMapThread TimeSeriesModel TimeSeriesModelFit TimeSeriesResample TimeSeriesRescale TimeSeriesShift TimeSeriesThread TimeSeriesWindow TimeUsed TimeValue TimeWarpingCorrespondence TimeWarpingDistance TimeZone TimeZoneConvert TimeZoneOffset Timing Tiny TitleGrouping TitsGroupT ToBoxes ToCharacterCode ToColor ToContinuousTimeModel ToDate Today ToDiscreteTimeModel ToEntity ToeplitzMatrix ToExpression ToFileName Together Toggle ToggleFalse Toggler TogglerBar TogglerBox TogglerBoxOptions ToHeldExpression ToInvertibleTimeSeries TokenWords Tolerance ToLowerCase Tomorrow ToNumberField TooBig Tooltip TooltipBox TooltipBoxOptions TooltipDelay TooltipStyle Top TopHatTransform ToPolarCoordinates TopologicalSort ToRadicals ToRules ToSphericalCoordinates ToString Total TotalHeight TotalLayer TotalVariationFilter TotalWidth TouchPosition TouchscreenAutoZoom TouchscreenControlPlacement ToUpperCase Tr Trace TraceAbove TraceAction TraceBackward TraceDepth TraceDialog TraceForward TraceInternal TraceLevel TraceOff TraceOn TraceOriginal TracePrint TraceScan TrackedSymbols TrackingFunction TracyWidomDistribution TradingChart TraditionalForm TraditionalFunctionNotation TraditionalNotation TraditionalOrder TrainingProgressCheckpointing TrainingProgressFunction TrainingProgressMeasurements TrainingProgressReporting TrainingStoppingCriterion TransferFunctionCancel TransferFunctionExpand TransferFunctionFactor TransferFunctionModel TransferFunctionPoles TransferFunctionTransform TransferFunctionZeros TransformationClass TransformationFunction TransformationFunctions TransformationMatrix TransformedDistribution TransformedField TransformedProcess TransformedRegion TransitionDirection TransitionDuration TransitionEffect TransitiveClosureGraph TransitiveReductionGraph Translate TranslationOptions TranslationTransform Transliterate Transparent TransparentColor Transpose TransposeLayer TrapSelection TravelDirections TravelDirectionsData TravelDistance TravelDistanceList TravelMethod TravelTime TreeForm TreeGraph TreeGraphQ TreePlot TrendStyle Triangle TriangleCenter TriangleConstruct TriangleMeasurement TriangleWave TriangularDistribution TriangulateMesh Trig TrigExpand TrigFactor TrigFactorList Trigger TrigReduce TrigToExp TrimmedMean TrimmedVariance TropicalStormData True TrueQ TruncatedDistribution TruncatedPolyhedron TsallisQExponentialDistribution TsallisQGaussianDistribution TTest Tube TubeBezierCurveBox TubeBezierCurveBoxOptions TubeBox TubeBoxOptions TubeBSplineCurveBox TubeBSplineCurveBoxOptions Tuesday TukeyLambdaDistribution TukeyWindow TunnelData Tuples TuranGraph TuringMachine TuttePolynomial TwoWayRule Typed TypeSpecifier UnateQ Uncompress UnconstrainedParameters Undefined UnderBar Underflow Underlined Underoverscript UnderoverscriptBox UnderoverscriptBoxOptions Underscript UnderscriptBox UnderscriptBoxOptions UnderseaFeatureData UndirectedEdge UndirectedGraph UndirectedGraphQ UndoOptions UndoTrackedVariables Unequal UnequalTo Unevaluated UniformDistribution UniformGraphDistribution UniformPolyhedron UniformSumDistribution Uninstall Union UnionPlus Unique UnitaryMatrixQ UnitBox UnitConvert UnitDimensions Unitize UnitRootTest UnitSimplify UnitStep UnitSystem UnitTriangle UnitVector UnitVectorLayer UnityDimensions UniverseModelData UniversityData UnixTime Unprotect UnregisterExternalEvaluator UnsameQ UnsavedVariables Unset UnsetShared UntrackedVariables Up UpArrow UpArrowBar UpArrowDownArrow Update UpdateDynamicObjects UpdateDynamicObjectsSynchronous UpdateInterval UpdateSearchIndex UpDownArrow UpEquilibrium UpperCaseQ UpperLeftArrow UpperRightArrow UpperTriangularize UpperTriangularMatrixQ Upsample UpSet UpSetDelayed UpTee UpTeeArrow UpTo UpValues URL URLBuild URLDecode URLDispatcher URLDownload URLDownloadSubmit URLEncode URLExecute URLExpand URLFetch URLFetchAsynchronous URLParse URLQueryDecode URLQueryEncode URLRead URLResponseTime URLSave URLSaveAsynchronous URLShorten URLSubmit UseGraphicsRange UserDefinedWavelet Using UsingFrontEnd UtilityFunction V2Get ValenceErrorHandling ValidationLength ValidationSet Value ValueBox ValueBoxOptions ValueDimensions ValueForm ValuePreprocessingFunction ValueQ Values ValuesData Variables Variance VarianceEquivalenceTest VarianceEstimatorFunction VarianceGammaDistribution VarianceTest VectorAngle VectorAround VectorColorFunction VectorColorFunctionScaling VectorDensityPlot VectorGlyphData VectorGreater VectorGreaterEqual VectorLess VectorLessEqual VectorMarkers VectorPlot VectorPlot3D VectorPoints VectorQ Vectors VectorScale VectorStyle Vee Verbatim Verbose VerboseConvertToPostScriptPacket VerificationTest VerifyConvergence VerifyDerivedKey VerifyDigitalSignature VerifyInterpretation VerifySecurityCertificates VerifySolutions VerifyTestAssumptions Version VersionNumber VertexAdd VertexCapacity VertexColors VertexComponent VertexConnectivity VertexContract VertexCoordinateRules VertexCoordinates VertexCorrelationSimilarity VertexCosineSimilarity VertexCount VertexCoverQ VertexDataCoordinates VertexDegree VertexDelete VertexDiceSimilarity VertexEccentricity VertexInComponent VertexInDegree VertexIndex VertexJaccardSimilarity VertexLabeling VertexLabels VertexLabelStyle VertexList VertexNormals VertexOutComponent VertexOutDegree VertexQ VertexRenderingFunction VertexReplace VertexShape VertexShapeFunction VertexSize VertexStyle VertexTextureCoordinates VertexWeight VertexWeightedGraphQ Vertical VerticalBar VerticalForm VerticalGauge VerticalSeparator VerticalSlider VerticalTilde ViewAngle ViewCenter ViewMatrix ViewPoint ViewPointSelectorSettings ViewPort ViewProjection ViewRange ViewVector ViewVertical VirtualGroupData Visible VisibleCell VoiceStyleData VoigtDistribution VolcanoData Volume VonMisesDistribution VoronoiMesh WaitAll WaitAsynchronousTask WaitNext WaitUntil WakebyDistribution WalleniusHypergeometricDistribution WaringYuleDistribution WarpingCorrespondence WarpingDistance WatershedComponents WatsonUSquareTest WattsStrogatzGraphDistribution WaveletBestBasis WaveletFilterCoefficients WaveletImagePlot WaveletListPlot WaveletMapIndexed WaveletMatrixPlot WaveletPhi WaveletPsi WaveletScale WaveletScalogram WaveletThreshold WeaklyConnectedComponents WeaklyConnectedGraphComponents WeaklyConnectedGraphQ WeakStationarity WeatherData WeatherForecastData WebAudioSearch WebElementObject WeberE WebExecute WebImage WebImageSearch WebSearch WebSessionObject WebSessions WebWindowObject Wedge Wednesday WeibullDistribution WeierstrassE1 WeierstrassE2 WeierstrassE3 WeierstrassEta1 WeierstrassEta2 WeierstrassEta3 WeierstrassHalfPeriods WeierstrassHalfPeriodW1 WeierstrassHalfPeriodW2 WeierstrassHalfPeriodW3 WeierstrassInvariantG2 WeierstrassInvariantG3 WeierstrassInvariants WeierstrassP WeierstrassPPrime WeierstrassSigma WeierstrassZeta WeightedAdjacencyGraph WeightedAdjacencyMatrix WeightedData WeightedGraphQ Weights WelchWindow WheelGraph WhenEvent Which While White WhiteNoiseProcess WhitePoint Whitespace WhitespaceCharacter WhittakerM WhittakerW WienerFilter WienerProcess WignerD WignerSemicircleDistribution WikipediaData WikipediaSearch WilksW WilksWTest WindDirectionData WindingCount WindingPolygon WindowClickSelect WindowElements WindowFloating WindowFrame WindowFrameElements WindowMargins WindowMovable WindowOpacity WindowPersistentStyles WindowSelected WindowSize WindowStatusArea WindowTitle WindowToolbars WindowWidth WindSpeedData WindVectorData WinsorizedMean WinsorizedVariance WishartMatrixDistribution With WolframAlpha WolframAlphaDate WolframAlphaQuantity WolframAlphaResult WolframLanguageData Word WordBoundary WordCharacter WordCloud WordCount WordCounts WordData WordDefinition WordFrequency WordFrequencyData WordList WordOrientation WordSearch WordSelectionFunction WordSeparators WordSpacings WordStem WordTranslation WorkingPrecision WrapAround Write WriteLine WriteString Wronskian XMLElement XMLObject XMLTemplate Xnor Xor XYZColor Yellow Yesterday YuleDissimilarity ZernikeR ZeroSymmetric ZeroTest ZeroWidthTimes Zeta ZetaZero ZIPCodeData ZipfDistribution ZoomCenter ZoomFactor ZTest ZTransform $Aborted $ActivationGroupID $ActivationKey $ActivationUserRegistered $AddOnsDirectory $AllowExternalChannelFunctions $AssertFunction $Assumptions $AsynchronousTask $AudioInputDevices $AudioOutputDevices $BaseDirectory $BatchInput $BatchOutput $BlockchainBase $BoxForms $ByteOrdering $CacheBaseDirectory $Canceled $ChannelBase $CharacterEncoding $CharacterEncodings $CloudBase $CloudConnected $CloudCreditsAvailable $CloudEvaluation $CloudExpressionBase $CloudObjectNameFormat $CloudObjectURLType $CloudRootDirectory $CloudSymbolBase $CloudUserID $CloudUserUUID $CloudVersion $CloudVersionNumber $CloudWolframEngineVersionNumber $CommandLine $CompilationTarget $ConditionHold $ConfiguredKernels $Context $ContextPath $ControlActiveSetting $Cookies $CookieStore $CreationDate $CurrentLink $CurrentTask $CurrentWebSession $DateStringFormat $DefaultAudioInputDevice $DefaultAudioOutputDevice $DefaultFont $DefaultFrontEnd $DefaultImagingDevice $DefaultLocalBase $DefaultMailbox $DefaultNetworkInterface $DefaultPath $Display $DisplayFunction $DistributedContexts $DynamicEvaluation $Echo $EmbedCodeEnvironments $EmbeddableServices $EntityStores $Epilog $EvaluationCloudBase $EvaluationCloudObject $EvaluationEnvironment $ExportFormats $Failed $FinancialDataSource $FontFamilies $FormatType $FrontEnd $FrontEndSession $GeoEntityTypes $GeoLocation $GeoLocationCity $GeoLocationCountry $GeoLocationPrecision $GeoLocationSource $HistoryLength $HomeDirectory $HTMLExportRules $HTTPCookies $HTTPRequest $IgnoreEOF $ImageFormattingWidth $ImagingDevice $ImagingDevices $ImportFormats $IncomingMailSettings $InitialDirectory $Initialization $InitializationContexts $Input $InputFileName $InputStreamMethods $Inspector $InstallationDate $InstallationDirectory $InterfaceEnvironment $InterpreterTypes $IterationLimit $KernelCount $KernelID $Language $LaunchDirectory $LibraryPath $LicenseExpirationDate $LicenseID $LicenseProcesses $LicenseServer $LicenseSubprocesses $LicenseType $Line $Linked $LinkSupported $LoadedFiles $LocalBase $LocalSymbolBase $MachineAddresses $MachineDomain $MachineDomains $MachineEpsilon $MachineID $MachineName $MachinePrecision $MachineType $MaxExtraPrecision $MaxLicenseProcesses $MaxLicenseSubprocesses $MaxMachineNumber $MaxNumber $MaxPiecewiseCases $MaxPrecision $MaxRootDegree $MessageGroups $MessageList $MessagePrePrint $Messages $MinMachineNumber $MinNumber $MinorReleaseNumber $MinPrecision $MobilePhone $ModuleNumber $NetworkConnected $NetworkInterfaces $NetworkLicense $NewMessage $NewSymbol $Notebooks $NoValue $NumberMarks $Off $OperatingSystem $Output $OutputForms $OutputSizeLimit $OutputStreamMethods $Packages $ParentLink $ParentProcessID $PasswordFile $PatchLevelID $Path $PathnameSeparator $PerformanceGoal $Permissions $PermissionsGroupBase $PersistenceBase $PersistencePath $PipeSupported $PlotTheme $Post $Pre $PreferencesDirectory $PreInitialization $PrePrint $PreRead $PrintForms $PrintLiteral $Printout3DPreviewer $ProcessID $ProcessorCount $ProcessorType $ProductInformation $ProgramName $PublisherID $RandomState $RecursionLimit $RegisteredDeviceClasses $RegisteredUserName $ReleaseNumber $RequesterAddress $RequesterWolframID $RequesterWolframUUID $ResourceSystemBase $RootDirectory $ScheduledTask $ScriptCommandLine $ScriptInputString $SecuredAuthenticationKeyTokens $ServiceCreditsAvailable $Services $SessionID $SetParentLink $SharedFunctions $SharedVariables $SoundDisplay $SoundDisplayFunction $SourceLink $SSHAuthentication $SummaryBoxDataSizeLimit $SuppressInputFormHeads $SynchronousEvaluation $SyntaxHandler $System $SystemCharacterEncoding $SystemID $SystemMemory $SystemShell $SystemTimeZone $SystemWordLength $TemplatePath $TemporaryDirectory $TemporaryPrefix $TestFileName $TextStyle $TimedOut $TimeUnit $TimeZone $TimeZoneEntity $TopDirectory $TraceOff $TraceOn $TracePattern $TracePostAction $TracePreAction $UnitSystem $Urgent $UserAddOnsDirectory $UserAgentLanguages $UserAgentMachine $UserAgentName $UserAgentOperatingSystem $UserAgentString $UserAgentVersion $UserBaseDirectory $UserDocumentsDirectory $Username $UserName $UserURLBase $Version $VersionNumber $VoiceStyles $WolframID $WolframUUID",contains:[e.COMMENT("\\(\\*","\\*\\)",{contains:["self"]}),e.QUOTE_STRING_MODE,e.C_NUMBER_MODE]}}},"75kF":function(e,t){e.exports=function(e){var t={variants:[e.COMMENT(";","$",{relevance:0}),e.COMMENT("#cs","#ce"),e.COMMENT("#comments-start","#comments-end")]},n={begin:"\\$[A-z0-9_]+"},a={className:"string",variants:[{begin:/"/,end:/"/,contains:[{begin:/""/,relevance:0}]},{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]}]},r={variants:[e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]};return{name:"AutoIt",case_insensitive:!0,illegal:/\/\*/,keywords:{keyword:"ByRef Case Const ContinueCase ContinueLoop Default Dim Do Else ElseIf EndFunc EndIf EndSelect EndSwitch EndWith Enum Exit ExitLoop For Func Global If In Local Next ReDim Return Select Static Step Switch Then To Until Volatile WEnd While With",built_in:"Abs ACos AdlibRegister AdlibUnRegister Asc AscW ASin Assign ATan AutoItSetOption AutoItWinGetTitle AutoItWinSetTitle Beep Binary BinaryLen BinaryMid BinaryToString BitAND BitNOT BitOR BitRotate BitShift BitXOR BlockInput Break Call CDTray Ceiling Chr ChrW ClipGet ClipPut ConsoleRead ConsoleWrite ConsoleWriteError ControlClick ControlCommand ControlDisable ControlEnable ControlFocus ControlGetFocus ControlGetHandle ControlGetPos ControlGetText ControlHide ControlListView ControlMove ControlSend ControlSetText ControlShow ControlTreeView Cos Dec DirCopy DirCreate DirGetSize DirMove DirRemove DllCall DllCallAddress DllCallbackFree DllCallbackGetPtr DllCallbackRegister DllClose DllOpen DllStructCreate DllStructGetData DllStructGetPtr DllStructGetSize DllStructSetData DriveGetDrive DriveGetFileSystem DriveGetLabel DriveGetSerial DriveGetType DriveMapAdd DriveMapDel DriveMapGet DriveSetLabel DriveSpaceFree DriveSpaceTotal DriveStatus EnvGet EnvSet EnvUpdate Eval Execute Exp FileChangeDir FileClose FileCopy FileCreateNTFSLink FileCreateShortcut FileDelete FileExists FileFindFirstFile FileFindNextFile FileFlush FileGetAttrib FileGetEncoding FileGetLongName FileGetPos FileGetShortcut FileGetShortName FileGetSize FileGetTime FileGetVersion FileInstall FileMove FileOpen FileOpenDialog FileRead FileReadLine FileReadToArray FileRecycle FileRecycleEmpty FileSaveDialog FileSelectFolder FileSetAttrib FileSetEnd FileSetPos FileSetTime FileWrite FileWriteLine Floor FtpSetProxy FuncName GUICreate GUICtrlCreateAvi GUICtrlCreateButton GUICtrlCreateCheckbox GUICtrlCreateCombo GUICtrlCreateContextMenu GUICtrlCreateDate GUICtrlCreateDummy GUICtrlCreateEdit GUICtrlCreateGraphic GUICtrlCreateGroup GUICtrlCreateIcon GUICtrlCreateInput GUICtrlCreateLabel GUICtrlCreateList GUICtrlCreateListView GUICtrlCreateListViewItem GUICtrlCreateMenu GUICtrlCreateMenuItem GUICtrlCreateMonthCal GUICtrlCreateObj GUICtrlCreatePic GUICtrlCreateProgress GUICtrlCreateRadio GUICtrlCreateSlider GUICtrlCreateTab GUICtrlCreateTabItem GUICtrlCreateTreeView GUICtrlCreateTreeViewItem GUICtrlCreateUpdown GUICtrlDelete GUICtrlGetHandle GUICtrlGetState GUICtrlRead GUICtrlRecvMsg GUICtrlRegisterListViewSort GUICtrlSendMsg GUICtrlSendToDummy GUICtrlSetBkColor GUICtrlSetColor GUICtrlSetCursor GUICtrlSetData GUICtrlSetDefBkColor GUICtrlSetDefColor GUICtrlSetFont GUICtrlSetGraphic GUICtrlSetImage GUICtrlSetLimit GUICtrlSetOnEvent GUICtrlSetPos GUICtrlSetResizing GUICtrlSetState GUICtrlSetStyle GUICtrlSetTip GUIDelete GUIGetCursorInfo GUIGetMsg GUIGetStyle GUIRegisterMsg GUISetAccelerators GUISetBkColor GUISetCoord GUISetCursor GUISetFont GUISetHelp GUISetIcon GUISetOnEvent GUISetState GUISetStyle GUIStartGroup GUISwitch Hex HotKeySet HttpSetProxy HttpSetUserAgent HWnd InetClose InetGet InetGetInfo InetGetSize InetRead IniDelete IniRead IniReadSection IniReadSectionNames IniRenameSection IniWrite IniWriteSection InputBox Int IsAdmin IsArray IsBinary IsBool IsDeclared IsDllStruct IsFloat IsFunc IsHWnd IsInt IsKeyword IsNumber IsObj IsPtr IsString Log MemGetStats Mod MouseClick MouseClickDrag MouseDown MouseGetCursor MouseGetPos MouseMove MouseUp MouseWheel MsgBox Number ObjCreate ObjCreateInterface ObjEvent ObjGet ObjName OnAutoItExitRegister OnAutoItExitUnRegister Ping PixelChecksum PixelGetColor PixelSearch ProcessClose ProcessExists ProcessGetStats ProcessList ProcessSetPriority ProcessWait ProcessWaitClose ProgressOff ProgressOn ProgressSet Ptr Random RegDelete RegEnumKey RegEnumVal RegRead RegWrite Round Run RunAs RunAsWait RunWait Send SendKeepActive SetError SetExtended ShellExecute ShellExecuteWait Shutdown Sin Sleep SoundPlay SoundSetWaveVolume SplashImageOn SplashOff SplashTextOn Sqrt SRandom StatusbarGetText StderrRead StdinWrite StdioClose StdoutRead String StringAddCR StringCompare StringFormat StringFromASCIIArray StringInStr StringIsAlNum StringIsAlpha StringIsASCII StringIsDigit StringIsFloat StringIsInt StringIsLower StringIsSpace StringIsUpper StringIsXDigit StringLeft StringLen StringLower StringMid StringRegExp StringRegExpReplace StringReplace StringReverse StringRight StringSplit StringStripCR StringStripWS StringToASCIIArray StringToBinary StringTrimLeft StringTrimRight StringUpper Tan TCPAccept TCPCloseSocket TCPConnect TCPListen TCPNameToIP TCPRecv TCPSend TCPShutdown, UDPShutdown TCPStartup, UDPStartup TimerDiff TimerInit ToolTip TrayCreateItem TrayCreateMenu TrayGetMsg TrayItemDelete TrayItemGetHandle TrayItemGetState TrayItemGetText TrayItemSetOnEvent TrayItemSetState TrayItemSetText TraySetClick TraySetIcon TraySetOnEvent TraySetPauseIcon TraySetState TraySetToolTip TrayTip UBound UDPBind UDPCloseSocket UDPOpen UDPRecv UDPSend VarGetType WinActivate WinActive WinClose WinExists WinFlash WinGetCaretPos WinGetClassList WinGetClientSize WinGetHandle WinGetPos WinGetProcess WinGetState WinGetText WinGetTitle WinKill WinList WinMenuSelectItem WinMinimizeAll WinMinimizeAllUndo WinMove WinSetOnTop WinSetState WinSetTitle WinSetTrans WinWait",literal:"True False And Null Not Or"},contains:[t,n,a,r,{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"comments include include-once NoTrayIcon OnAutoItStartRegister pragma compile RequireAdmin"},contains:[{begin:/\\\n/,relevance:0},{beginKeywords:"include",keywords:{"meta-keyword":"include"},end:"$",contains:[a,{className:"meta-string",variants:[{begin:"<",end:">"},{begin:/"/,end:/"/,contains:[{begin:/""/,relevance:0}]},{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]}]}]},a,t]},{className:"symbol",begin:"@[A-z0-9_]+"},{className:"function",beginKeywords:"Func",end:"$",illegal:"\\$|\\[|%",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",contains:[n,a,r]}]}]}}},"7P7d":function(e,t){e.exports=function(e){var t={begin:"\\[=*\\[",end:"\\]=*\\]",contains:["self"]},n=[e.COMMENT("--(?!\\[=*\\[)","$"),e.COMMENT("--\\[=*\\[","\\]=*\\]",{contains:[t],relevance:10})];return{name:"Lua",lexemes:e.UNDERSCORE_IDENT_RE,keywords:{literal:"true false nil",keyword:"and break do else elseif end for goto if in local not or repeat return then until while",built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"},contains:n.concat([{className:"function",beginKeywords:"function",end:"\\)",contains:[e.inherit(e.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",begin:"\\(",endsWithParent:!0,contains:n}].concat(n)},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:"\\[=*\\[",end:"\\]=*\\]",contains:[t],relevance:5}])}}},"7mzT":function(e,t){e.exports=function(e){return{name:"OCaml",aliases:["ml"],keywords:{keyword:"and as assert asr begin class constraint do done downto else end exception external for fun function functor if in include inherit! inherit initializer land lazy let lor lsl lsr lxor match method!|10 method mod module mutable new object of open! open or private rec sig struct then to try type val! val virtual when while with parser value",built_in:"array bool bytes char exn|5 float int int32 int64 list lazy_t|5 nativeint|5 string unit in_channel out_channel ref",literal:"true false"},illegal:/\/\/|>>/,lexemes:"[a-z_]\\w*!?",contains:[{className:"literal",begin:"\\[(\\|\\|)?\\]|\\(\\)",relevance:0},e.COMMENT("\\(\\*","\\*\\)",{contains:["self"]}),{className:"symbol",begin:"'[A-Za-z_](?!')[\\w']*"},{className:"type",begin:"`[A-Z][\\w']*"},{className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},{begin:"[a-z_]\\w*'[\\w']*",relevance:0},e.inherit(e.APOS_STRING_MODE,{className:"string",relevance:0}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),{className:"number",begin:"\\b(0[xX][a-fA-F0-9_]+[Lln]?|0[oO][0-7_]+[Lln]?|0[bB][01_]+[Lln]?|[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)",relevance:0},{begin:/[-=]>/}]}}},"7oys":function(e,t){e.exports=function(e){var t={begin:/(?:[A-Z\_\.\-]+|--[a-zA-Z0-9_-]+)\s*:/,returnBegin:!0,end:";",endsWithParent:!0,contains:[{className:"attribute",begin:/\S/,end:":",excludeEnd:!0,starts:{endsWithParent:!0,excludeEnd:!0,contains:[{begin:/[\w-]+\(/,returnBegin:!0,contains:[{className:"built_in",begin:/[\w-]+/},{begin:/\(/,end:/\)/,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE]}]},e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_BLOCK_COMMENT_MODE,{className:"number",begin:"#[0-9A-Fa-f]+"},{className:"meta",begin:"!important"}]}}]};return{name:"CSS",case_insensitive:!0,illegal:/[=\/|'\$]/,contains:[e.C_BLOCK_COMMENT_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/},{className:"selector-class",begin:/\.[A-Za-z0-9_-]+/},{className:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},{className:"selector-pseudo",begin:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{begin:"@(page|font-face)",lexemes:"@[a-z-]+",keywords:"@page @font-face"},{begin:"@",end:"[{;]",illegal:/:/,returnBegin:!0,contains:[{className:"keyword",begin:/@\-?\w[\w]*(\-\w+)*/},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:"and or not only",contains:[{begin:/[a-z-]+:/,className:"attribute"},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0},{begin:"{",end:"}",illegal:/\S/,contains:[e.C_BLOCK_COMMENT_MODE,t]}]}}},"8Kqh":function(e,t){e.exports=function(e){var t={className:"number",begin:"\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?"};return{name:"Apache config",aliases:["apacheconf"],case_insensitive:!0,contains:[e.HASH_COMMENT_MODE,{className:"section",begin:"",contains:[t,{className:"number",begin:":\\d{1,5}"},e.inherit(e.QUOTE_STRING_MODE,{relevance:0})]},{className:"attribute",begin:/\w+/,relevance:0,keywords:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{end:/$/,relevance:0,keywords:{literal:"on off all deny allow"},contains:[{className:"meta",begin:"\\s\\[",end:"\\]$"},{className:"variable",begin:"[\\$%]\\{",end:"\\}",contains:["self",{className:"number",begin:"[\\$%]\\d+"}]},t,{className:"number",begin:"\\d+"},e.QUOTE_STRING_MODE]}}],illegal:/\S/}}},"8Pgg":function(e,t){e.exports=function(e){const t={},n={begin:/\$\{/,end:/\}/,contains:[{begin:/:-/,contains:[t]}]};Object.assign(t,{className:"variable",variants:[{begin:/\$[\w\d#@][\w\d_]*/},n]});const a={className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},r={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,t,a]};a.contains.push(r);const i={begin:/\$\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,t]};return{name:"Bash",aliases:["sh","zsh"],lexemes:/\b-?[a-z\._]+\b/,keywords:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},contains:[{className:"meta",begin:/^#![^\n]+sh\s*$/,relevance:10},{className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},i,e.HASH_COMMENT_MODE,r,{className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},t]}}},"8SK+":function(e,t){e.exports=function(e){return{name:"Vala",keywords:{keyword:"char uchar unichar int uint long ulong short ushort int8 int16 int32 int64 uint8 uint16 uint32 uint64 float double bool struct enum string void weak unowned owned async signal static abstract interface override virtual delegate if while do for foreach else switch case break default return try catch public private protected internal using new this get set const stdout stdin stderr var",built_in:"DBus GLib CCode Gee Object Gtk Posix",literal:"false true null"},contains:[{className:"class",beginKeywords:"class interface namespace",end:"{",excludeEnd:!0,illegal:"[^,:\\n\\s\\.]",contains:[e.UNDERSCORE_TITLE_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"string",begin:'"""',end:'"""',relevance:5},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,{className:"meta",begin:"^#",end:"$",relevance:2}]}}},"8oxB":function(e,t){var n,a,r=e.exports={};function i(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function s(e){if(n===setTimeout)return setTimeout(e,0);if((n===i||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:i}catch(e){n=i}try{a="function"==typeof clearTimeout?clearTimeout:o}catch(e){a=o}}();var l,c=[],_=!1,d=-1;function u(){_&&l&&(_=!1,l.length?c=l.concat(c):d=-1,c.length&&p())}function p(){if(!_){var e=s(u);_=!0;for(var t=c.length;t;){for(l=c,c=[];++d1)for(var n=1;n",subLanguage:"vbscript"}]}}},"9G73":function(e,t){e.exports=function(e){var t="attribute block constant cycle date dump include max min parent random range source template_from_string",n={beginKeywords:t,keywords:{name:t},relevance:0,contains:[{className:"params",begin:"\\(",end:"\\)"}]},a={begin:/\|[A-Za-z_]+:?/,keywords:"abs batch capitalize column convert_encoding date date_modify default escape filter first format inky_to_html inline_css join json_encode keys last length lower map markdown merge nl2br number_format raw reduce replace reverse round slice sort spaceless split striptags title trim upper url_encode",contains:[n]},r="apply autoescape block deprecated do embed extends filter flush for from if import include macro sandbox set use verbatim with";return r=r+" "+r.split(" ").map((function(e){return"end"+e})).join(" "),{name:"Twig",aliases:["craftcms"],case_insensitive:!0,subLanguage:"xml",contains:[e.COMMENT(/\{#/,/#}/),{className:"template-tag",begin:/\{%/,end:/%}/,contains:[{className:"name",begin:/\w+/,keywords:r,starts:{endsWithParent:!0,contains:[a,n],relevance:0}}]},{className:"template-variable",begin:/\{\{/,end:/}}/,contains:["self",a,n]}]}}},"9JLW":function(e,t){e.exports=function(e){return{name:"Erlang REPL",keywords:{built_in:"spawn spawn_link self",keyword:"after and andalso|10 band begin bnot bor bsl bsr bxor case catch cond div end fun if let not of or orelse|10 query receive rem try when xor"},contains:[{className:"meta",begin:"^[0-9]+> ",relevance:10},e.COMMENT("%","$"),{className:"number",begin:"\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)",relevance:0},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{begin:"\\?(::)?([A-Z]\\w*(::)?)+"},{begin:"->"},{begin:"ok"},{begin:"!"},{begin:"(\\b[a-z'][a-zA-Z0-9_']*:[a-z'][a-zA-Z0-9_']*)|(\\b[a-z'][a-zA-Z0-9_']*)",relevance:0},{begin:"[A-Z][a-zA-Z0-9_']*",relevance:0}]}}},"9Mhc":function(e,t){e.exports=function(e){return{name:"N1QL",case_insensitive:!0,contains:[{beginKeywords:"build create index delete drop explain infer|10 insert merge prepare select update upsert|10",end:/;/,endsWithParent:!0,keywords:{keyword:"all alter analyze and any array as asc begin between binary boolean break bucket build by call case cast cluster collate collection commit connect continue correlate cover create database dataset datastore declare decrement delete derived desc describe distinct do drop each element else end every except exclude execute exists explain fetch first flatten for force from function grant group gsi having if ignore ilike in include increment index infer inline inner insert intersect into is join key keys keyspace known last left let letting like limit lsm map mapping matched materialized merge minus namespace nest not number object offset on option or order outer over parse partition password path pool prepare primary private privilege procedure public raw realm reduce rename return returning revoke right role rollback satisfies schema select self semi set show some start statistics string system then to transaction trigger truncate under union unique unknown unnest unset update upsert use user using validate value valued values via view when where while with within work xor",literal:"true false null missing|5",built_in:"array_agg array_append array_concat array_contains array_count array_distinct array_ifnull array_length array_max array_min array_position array_prepend array_put array_range array_remove array_repeat array_replace array_reverse array_sort array_sum avg count max min sum greatest least ifmissing ifmissingornull ifnull missingif nullif ifinf ifnan ifnanorinf naninf neginfif posinfif clock_millis clock_str date_add_millis date_add_str date_diff_millis date_diff_str date_part_millis date_part_str date_trunc_millis date_trunc_str duration_to_str millis str_to_millis millis_to_str millis_to_utc millis_to_zone_name now_millis now_str str_to_duration str_to_utc str_to_zone_name decode_json encode_json encoded_size poly_length base64 base64_encode base64_decode meta uuid abs acos asin atan atan2 ceil cos degrees e exp ln log floor pi power radians random round sign sin sqrt tan trunc object_length object_names object_pairs object_inner_pairs object_values object_inner_values object_add object_put object_remove object_unwrap regexp_contains regexp_like regexp_position regexp_replace contains initcap length lower ltrim position repeat replace rtrim split substr title trim upper isarray isatom isboolean isnumber isobject isstring type toarray toatom toboolean tonumber toobject tostring"},contains:[{className:"string",begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE],relevance:0},{className:"string",begin:'"',end:'"',contains:[e.BACKSLASH_ESCAPE],relevance:0},{className:"symbol",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE],relevance:2},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE]},e.C_BLOCK_COMMENT_MODE]}}},"9Nr/":function(e,t){e.exports=function(e){return{name:"Dust",aliases:["dst"],case_insensitive:!0,subLanguage:"xml",contains:[{className:"template-tag",begin:/\{[#\/]/,end:/\}/,illegal:/;/,contains:[{className:"name",begin:/[a-zA-Z\.-]+/,starts:{endsWithParent:!0,relevance:0,contains:[e.QUOTE_STRING_MODE]}}]},{className:"template-variable",begin:/\{/,end:/\}/,illegal:/;/,keywords:"if eq ne lt lte gt gte select default math sep"}]}}},"9Q8I":function(e,t){e.exports=function(e){var t={className:"attribute",begin:/[a-zA-Z-_]+/,end:/\s*:/,excludeEnd:!0,starts:{end:";",relevance:0,contains:[{className:"variable",begin:/\.[a-zA-Z-_]+/},{className:"keyword",begin:/\(optional\)/}]}};return{name:"Roboconf",aliases:["graph","instances"],case_insensitive:!0,keywords:"import",contains:[{begin:"^facet [a-zA-Z-_][^\\n{]+\\{",end:"}",keywords:"facet",contains:[t,e.HASH_COMMENT_MODE]},{begin:"^\\s*instance of [a-zA-Z-_][^\\n{]+\\{",end:"}",keywords:"name count channels instance-data instance-state instance of",illegal:/\S/,contains:["self",t,e.HASH_COMMENT_MODE]},{begin:"^[a-zA-Z-_][^\\n{]+\\{",end:"}",contains:[t,e.HASH_COMMENT_MODE]},e.HASH_COMMENT_MODE]}}},"9U8A":function(e,t){e.exports=function(e){var t={className:"variable",variants:[{begin:/\$\d+/},{begin:/\$\{/,end:/}/},{begin:"[\\$\\@]"+e.UNDERSCORE_IDENT_RE}]},n={endsWithParent:!0,lexemes:"[a-z/_]+",keywords:{literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},relevance:0,illegal:"=>",contains:[e.HASH_COMMENT_MODE,{className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/}]},{begin:"([a-z]+):/",end:"\\s",endsWithParent:!0,excludeEnd:!0,contains:[t]},{className:"regexp",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:"\\s\\^",end:"\\s|{|;",returnEnd:!0},{begin:"~\\*?\\s+",end:"\\s|{|;",returnEnd:!0},{begin:"\\*(\\.[a-z\\-]+)+"},{begin:"([a-z\\-]+\\.)+\\*"}]},{className:"number",begin:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{className:"number",begin:"\\b\\d+[kKmMgGdshdwy]*\\b",relevance:0},t]};return{name:"Nginx config",aliases:["nginxconf"],contains:[e.HASH_COMMENT_MODE,{begin:e.UNDERSCORE_IDENT_RE+"\\s+{",returnBegin:!0,end:"{",contains:[{className:"section",begin:e.UNDERSCORE_IDENT_RE}],relevance:0},{begin:e.UNDERSCORE_IDENT_RE+"\\s",end:";|{",returnBegin:!0,contains:[{className:"attribute",begin:e.UNDERSCORE_IDENT_RE,starts:n}],relevance:0}],illegal:"[^\\s\\}]"}}},"9c9R":function(e,t){e.exports=function(e){return{name:"Excel formulae",aliases:["xlsx","xls"],case_insensitive:!0,lexemes:/[a-zA-Z][\w\.]*/,keywords:{built_in:"ABS ACCRINT ACCRINTM ACOS ACOSH ACOT ACOTH AGGREGATE ADDRESS AMORDEGRC AMORLINC AND ARABIC AREAS ASC ASIN ASINH ATAN ATAN2 ATANH AVEDEV AVERAGE AVERAGEA AVERAGEIF AVERAGEIFS BAHTTEXT BASE BESSELI BESSELJ BESSELK BESSELY BETADIST BETA.DIST BETAINV BETA.INV BIN2DEC BIN2HEX BIN2OCT BINOMDIST BINOM.DIST BINOM.DIST.RANGE BINOM.INV BITAND BITLSHIFT BITOR BITRSHIFT BITXOR CALL CEILING CEILING.MATH CEILING.PRECISE CELL CHAR CHIDIST CHIINV CHITEST CHISQ.DIST CHISQ.DIST.RT CHISQ.INV CHISQ.INV.RT CHISQ.TEST CHOOSE CLEAN CODE COLUMN COLUMNS COMBIN COMBINA COMPLEX CONCAT CONCATENATE CONFIDENCE CONFIDENCE.NORM CONFIDENCE.T CONVERT CORREL COS COSH COT COTH COUNT COUNTA COUNTBLANK COUNTIF COUNTIFS COUPDAYBS COUPDAYS COUPDAYSNC COUPNCD COUPNUM COUPPCD COVAR COVARIANCE.P COVARIANCE.S CRITBINOM CSC CSCH CUBEKPIMEMBER CUBEMEMBER CUBEMEMBERPROPERTY CUBERANKEDMEMBER CUBESET CUBESETCOUNT CUBEVALUE CUMIPMT CUMPRINC DATE DATEDIF DATEVALUE DAVERAGE DAY DAYS DAYS360 DB DBCS DCOUNT DCOUNTA DDB DEC2BIN DEC2HEX DEC2OCT DECIMAL DEGREES DELTA DEVSQ DGET DISC DMAX DMIN DOLLAR DOLLARDE DOLLARFR DPRODUCT DSTDEV DSTDEVP DSUM DURATION DVAR DVARP EDATE EFFECT ENCODEURL EOMONTH ERF ERF.PRECISE ERFC ERFC.PRECISE ERROR.TYPE EUROCONVERT EVEN EXACT EXP EXPON.DIST EXPONDIST FACT FACTDOUBLE FALSE|0 F.DIST FDIST F.DIST.RT FILTERXML FIND FINDB F.INV F.INV.RT FINV FISHER FISHERINV FIXED FLOOR FLOOR.MATH FLOOR.PRECISE FORECAST FORECAST.ETS FORECAST.ETS.CONFINT FORECAST.ETS.SEASONALITY FORECAST.ETS.STAT FORECAST.LINEAR FORMULATEXT FREQUENCY F.TEST FTEST FV FVSCHEDULE GAMMA GAMMA.DIST GAMMADIST GAMMA.INV GAMMAINV GAMMALN GAMMALN.PRECISE GAUSS GCD GEOMEAN GESTEP GETPIVOTDATA GROWTH HARMEAN HEX2BIN HEX2DEC HEX2OCT HLOOKUP HOUR HYPERLINK HYPGEOM.DIST HYPGEOMDIST IF IFERROR IFNA IFS IMABS IMAGINARY IMARGUMENT IMCONJUGATE IMCOS IMCOSH IMCOT IMCSC IMCSCH IMDIV IMEXP IMLN IMLOG10 IMLOG2 IMPOWER IMPRODUCT IMREAL IMSEC IMSECH IMSIN IMSINH IMSQRT IMSUB IMSUM IMTAN INDEX INDIRECT INFO INT INTERCEPT INTRATE IPMT IRR ISBLANK ISERR ISERROR ISEVEN ISFORMULA ISLOGICAL ISNA ISNONTEXT ISNUMBER ISODD ISREF ISTEXT ISO.CEILING ISOWEEKNUM ISPMT JIS KURT LARGE LCM LEFT LEFTB LEN LENB LINEST LN LOG LOG10 LOGEST LOGINV LOGNORM.DIST LOGNORMDIST LOGNORM.INV LOOKUP LOWER MATCH MAX MAXA MAXIFS MDETERM MDURATION MEDIAN MID MIDBs MIN MINIFS MINA MINUTE MINVERSE MIRR MMULT MOD MODE MODE.MULT MODE.SNGL MONTH MROUND MULTINOMIAL MUNIT N NA NEGBINOM.DIST NEGBINOMDIST NETWORKDAYS NETWORKDAYS.INTL NOMINAL NORM.DIST NORMDIST NORMINV NORM.INV NORM.S.DIST NORMSDIST NORM.S.INV NORMSINV NOT NOW NPER NPV NUMBERVALUE OCT2BIN OCT2DEC OCT2HEX ODD ODDFPRICE ODDFYIELD ODDLPRICE ODDLYIELD OFFSET OR PDURATION PEARSON PERCENTILE.EXC PERCENTILE.INC PERCENTILE PERCENTRANK.EXC PERCENTRANK.INC PERCENTRANK PERMUT PERMUTATIONA PHI PHONETIC PI PMT POISSON.DIST POISSON POWER PPMT PRICE PRICEDISC PRICEMAT PROB PRODUCT PROPER PV QUARTILE QUARTILE.EXC QUARTILE.INC QUOTIENT RADIANS RAND RANDBETWEEN RANK.AVG RANK.EQ RANK RATE RECEIVED REGISTER.ID REPLACE REPLACEB REPT RIGHT RIGHTB ROMAN ROUND ROUNDDOWN ROUNDUP ROW ROWS RRI RSQ RTD SEARCH SEARCHB SEC SECH SECOND SERIESSUM SHEET SHEETS SIGN SIN SINH SKEW SKEW.P SLN SLOPE SMALL SQL.REQUEST SQRT SQRTPI STANDARDIZE STDEV STDEV.P STDEV.S STDEVA STDEVP STDEVPA STEYX SUBSTITUTE SUBTOTAL SUM SUMIF SUMIFS SUMPRODUCT SUMSQ SUMX2MY2 SUMX2PY2 SUMXMY2 SWITCH SYD T TAN TANH TBILLEQ TBILLPRICE TBILLYIELD T.DIST T.DIST.2T T.DIST.RT TDIST TEXT TEXTJOIN TIME TIMEVALUE T.INV T.INV.2T TINV TODAY TRANSPOSE TREND TRIM TRIMMEAN TRUE|0 TRUNC T.TEST TTEST TYPE UNICHAR UNICODE UPPER VALUE VAR VAR.P VAR.S VARA VARP VARPA VDB VLOOKUP WEBSERVICE WEEKDAY WEEKNUM WEIBULL WEIBULL.DIST WORKDAY WORKDAY.INTL XIRR XNPV XOR YEAR YEARFRAC YIELD YIELDDISC YIELDMAT Z.TEST ZTEST"},contains:[{begin:/^=/,end:/[^=]/,returnEnd:!0,illegal:/=/,relevance:10},{className:"symbol",begin:/\b[A-Z]{1,2}\d+\b/,end:/[^\d]/,excludeEnd:!0,relevance:0},{className:"symbol",begin:/[A-Z]{0,2}\d*:[A-Z]{0,2}\d*/,relevance:0},e.BACKSLASH_ESCAPE,e.QUOTE_STRING_MODE,{className:"number",begin:e.NUMBER_RE+"(%)?",relevance:0},e.COMMENT(/\bN\(/,/\)/,{excludeBegin:!0,excludeEnd:!0,illegal:/\n/})]}}},"9rSQ":function(e,t,n){"use strict";var a=n("xTJ+");function r(){this.handlers=[]}r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){a.forEach(this.handlers,(function(t){null!==t&&e(t)}))},e.exports=r},"9xzc":function(e,t){e.exports=function(e){var t="[A-Za-zÐ-Яа-ÑÑ‘Ð_][A-Za-zÐ-Яа-ÑÑ‘Ð_0-9]+",n="далее возврат вызватьиÑключение выполнить Ð´Ð»Ñ ÐµÑли и из или иначе иначееÑли иÑключение каждого конецеÑли конецпопытки конеццикла не новый перейти перем по пока попытка прервать продолжить тогда цикл ÑкÑпорт ",a="null иÑтина ложь неопределено",r=e.inherit(e.NUMBER_MODE),i={className:"string",begin:'"|\\|',end:'"|$',contains:[{begin:'""'}]},o={begin:"'",end:"'",excludeBegin:!0,excludeEnd:!0,contains:[{className:"number",begin:"\\d{4}([\\.\\\\/:-]?\\d{2}){0,5}"}]},s=e.inherit(e.C_LINE_COMMENT_MODE);return{name:"1C:Enterprise",case_insensitive:!0,lexemes:t,keywords:{keyword:n,built_in:"разделительÑтраниц разделительÑтрок ÑимволтабулÑции ansitooem oemtoansi ввеÑтивидÑубконто ввеÑтиперечиÑление ввеÑтипериод ввеÑтипланÑчетов выбранныйпланÑчетов датагод датамеÑÑц датачиÑло заголовокÑиÑтемы значениевÑтроку значениеизÑтроки каталогиб ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ ÐºÐ¾Ð´Ñимв конгода конецпериодаби конецраÑÑчитанногопериодаби конецÑтандартногоинтервала конквартала конмеÑÑца коннедели лог лог10 макÑимальноеколичеÑтвоÑубконто названиеинтерфейÑа названиенабораправ назначитьвид назначитьÑчет найтиÑÑылки началопериодаби началоÑтандартногоинтервала начгода начквартала начмеÑÑца начнедели номерднÑгода номерднÑнедели номернеделигода Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ°Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð¾ÑновнойжурналраÑчетов оÑновнойпланÑчетов оÑновнойÑзык очиÑтитьокноÑообщений периодÑÑ‚Ñ€ получитьвремÑта получитьдатута получитьдокументта получитьзначениÑотбора получитьпозициюта получитьпуÑтоезначение получитьта префикÑавтонумерации пропиÑÑŒ пуÑтоезначение разм разобратьпозициюдокумента раÑÑчитатьрегиÑтрына раÑÑчитатьрегиÑтрыпо Ñимв Ñоздатьобъект ÑтатуÑвозврата ÑтрколичеÑтвоÑтрок Ñформироватьпозициюдокумента Ñчетпокоду Ñ‚ÐµÐºÑƒÑ‰ÐµÐµÐ²Ñ€ÐµÐ¼Ñ Ñ‚Ð¸Ð¿Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñ‚Ð¸Ð¿Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸ÑÑÑ‚Ñ€ уÑтановитьтана уÑтановитьтапо фикÑшаблон шаблон acos asin atan base64значение base64Ñтрока cos exp log log10 pow sin sqrt tan xmlзначение xmlÑтрока xmlтип xmlтипзнч активноеокно безопаÑныйрежим безопаÑныйрежимразделениÑданных булево ввеÑтидату ввеÑтизначение ввеÑтиÑтроку ввеÑтичиÑло возможноÑтьчтениÑxml Ð²Ð¾Ð¿Ñ€Ð¾Ñ Ð²Ð¾ÑÑтановитьзначение врег выгрузитьжурналрегиÑтрации Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÑƒÐ¾Ð¿Ð¾Ð²ÐµÑ‰ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒÐ¿Ñ€Ð¾Ð²ÐµÑ€ÐºÑƒÐ¿Ñ€Ð°Ð²Ð´Ð¾Ñтупа вычиÑлить год данныеформывзначение дата день деньгода деньнедели добавитьмеÑÑц заблокироватьданныедлÑÑ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð°Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒÑ€Ð°Ð±Ð¾Ñ‚ÑƒÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ñ‚ÑŒÑ€Ð°Ð±Ð¾Ñ‚ÑƒÑиÑтемы загрузитьвнешнююкомпоненту закрытьÑправку запиÑатьjson запиÑатьxml запиÑатьдатуjson запиÑьжурналарегиÑтрации заполнитьзначениÑÑвойÑтв запроÑÐ¸Ñ‚ÑŒÑ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸ÐµÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð·Ð°Ð¿ÑƒÑтитьприложение запуÑтитьÑиÑтему зафикÑироватьтранзакцию значениевданныеформы значениевÑтрокувнутр значениевфайл значениезаполнено значениеизÑтрокивнутр значениеизфайла изxmlтипа импортмоделиxdto имÑкомпьютера имÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒÐ¿Ñ€ÐµÐ´Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð½Ñ‹ÐµÐ´Ð°Ð½Ð½Ñ‹Ðµ информациÑобошибке каталогбиблиотекимобильногоуÑтройÑтва каталогвременныхфайлов каталогдокументов каталогпрограммы кодироватьÑтроку кодлокализацииинформационнойбазы кодÑимвола командаÑиÑтемы конецгода ÐºÐ¾Ð½ÐµÑ†Ð´Ð½Ñ ÐºÐ¾Ð½ÐµÑ†ÐºÐ²Ð°Ñ€Ñ‚Ð°Ð»Ð° конецмеÑÑца конецминуты конецнедели конецчаÑа конфигурациÑбазыданныхизмененадинамичеÑки конфигурациÑизменена копироватьданныеформы копироватьфайл краткоепредÑтавлениеошибки лев Ð¼Ð°ÐºÑ Ð¼ÐµÑÑ‚Ð½Ð¾ÐµÐ²Ñ€ÐµÐ¼Ñ Ð¼ÐµÑÑц мин минута монопольныйрежим найти найтинедопуÑтимыеÑимволыxml найтиокнопонавигационнойÑÑылке найтипомеченныенаудаление найтипоÑÑылкам найтифайлы началогода Ð½Ð°Ñ‡Ð°Ð»Ð¾Ð´Ð½Ñ Ð½Ð°Ñ‡Ð°Ð»Ð¾ÐºÐ²Ð°Ñ€Ñ‚Ð°Ð»Ð° началомеÑÑца началоминуты началонедели началочаÑа начатьзапроÑразрешениÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½Ð°Ñ‡Ð°Ñ‚ÑŒÐ·Ð°Ð¿ÑƒÑÐºÐ¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ð°Ñ‡Ð°Ñ‚ÑŒÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸ÐµÑ„Ð°Ð¹Ð»Ð° начатьперемещениефайла начатьподключениевнешнейкомпоненты начатьподключениераÑширениÑработыÑкриптографией начатьподключениераÑширениÑработыÑфайлами начатьпоиÑкфайлов начатьполучениекаталогавременныхфайлов начатьполучениекаталогадокументов Ð½Ð°Ñ‡Ð°Ñ‚ÑŒÐ¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸ÐµÑ€Ð°Ð±Ð¾Ñ‡ÐµÐ³Ð¾ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°Ð´Ð°Ð½Ð½Ñ‹Ñ…Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½Ð°Ñ‡Ð°Ñ‚ÑŒÐ¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸ÐµÑ„Ð°Ð¹Ð»Ð¾Ð² начатьпомещениефайла начатьпомещениефайлов начатьÑозданиедвоичныхданныхизфайла начатьÑозданиекаталога начатьтранзакцию начатьудалениефайлов начатьуÑтановкувнешнейкомпоненты начатьуÑтановкураÑширениÑработыÑкриптографией начатьуÑтановкураÑширениÑработыÑфайлами неделÑгода необходимоÑтьзавершениÑÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð½Ð¾Ð¼ÐµÑ€ÑеанÑаинформационнойбазы номерÑоединениÑинформационнойбазы нрег нÑÑ‚Ñ€ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒÐ¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒÐ½ÑƒÐ¼ÐµÑ€Ð°Ñ†Ð¸ÑŽÐ¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð² обновитьповторноиÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÐµÐ¼Ñ‹ÐµÐ·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ°Ð¿Ñ€ÐµÑ€Ñ‹Ð²Ð°Ð½Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½Ð¸Ñ‚ÑŒÑ„Ð°Ð¹Ð»Ñ‹ окр опиÑаниеошибки оповеÑтить оповеÑтитьобизменении отключитьобработчикзапроÑанаÑÑ‚Ñ€Ð¾ÐµÐºÐºÐ»Ð¸ÐµÐ½Ñ‚Ð°Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ñ‡Ð¸ÐºÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ñ‡Ð¸ÐºÐ¾Ð¿Ð¾Ð²ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚ÑŒÐ·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ открытьиндекÑÑправки открытьÑодержаниеÑправки открытьÑправку открытьформу открытьформумодально отменитьтранзакцию очиÑтитьжурналрегиÑтрации очиÑтитьнаÑÑ‚Ñ€Ð¾Ð¹ÐºÐ¸Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¾Ñ‡Ð¸ÑтитьÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ‹Ð´Ð¾Ñтупа перейтипонавигационнойÑÑылке перемеÑтитьфайл подключитьвнешнююкомпоненту подключитьобработчикзапроÑанаÑÑ‚Ñ€Ð¾ÐµÐºÐºÐ»Ð¸ÐµÐ½Ñ‚Ð°Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ñ‡Ð¸ÐºÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒÐ¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ñ‡Ð¸ÐºÐ¾Ð¿Ð¾Ð²ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒÑ€Ð°ÑширениеработыÑкриптографией подключитьраÑширениеработыÑфайлами подробноепредÑтавлениеошибки показатьвводдаты Ð¿Ð¾ÐºÐ°Ð·Ð°Ñ‚ÑŒÐ²Ð²Ð¾Ð´Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°Ñ‚ÑŒÐ²Ð²Ð¾Ð´Ñтроки показатьвводчиÑла Ð¿Ð¾ÐºÐ°Ð·Ð°Ñ‚ÑŒÐ²Ð¾Ð¿Ñ€Ð¾Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°Ñ‚ÑŒÐ·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ показатьинформациюобошибке показатьнакарте Ð¿Ð¾ÐºÐ°Ð·Ð°Ñ‚ÑŒÐ¾Ð¿Ð¾Ð²ÐµÑ‰ÐµÐ½Ð¸ÐµÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°Ñ‚ÑŒÐ¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ полноеимÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒcomобъект получитьxmlтип получитьадреÑпомеÑтоположению получитьблокировкуÑеанÑов получитьвремÑзавершениÑÑпÑщегоÑеанÑа получитьвремÑзаÑыпаниÑпаÑÑивногоÑеанÑа получитьвремÑожиданиÑблокировкиданных получитьданныевыбора Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒÐ´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð°Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒÐ´Ð¾Ð¿ÑƒÑтимыекодылокализации получитьдопуÑтимыечаÑовыепоÑÑа получитьзаголовокклиентÑÐºÐ¾Ð³Ð¾Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒÐ·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾ÐºÑиÑтемы получитьзначениÑотборажурналарегиÑтрации получитьидентификаторконфигурации получитьизвременногохранилища получитьимÑвременногофайла получитьимÑÐºÐ»Ð¸ÐµÐ½Ñ‚Ð°Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒÐ¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸ÑŽÑкрановклиента получитьиÑпользованиежурналарегиÑтрации получитьиÑпользованиеÑобытиÑжурналарегиÑтрации Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒÐºÑ€Ð°Ñ‚ÐºÐ¸Ð¹Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾ÐºÐ¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒÐ¼Ð°ÐºÐµÑ‚Ð¾Ñ„Ð¾Ñ€Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒÐ¼Ð°ÑкувÑефайлы получитьмаÑкувÑефайлыклиента получитьмаÑкувÑефайлыÑервера получитьмеÑтоположениепоадреÑу получитьминимальнуюдлинупаролейпользователей получитьнавигационнуюÑÑылку получитьнавигационнуюÑÑылкуинформационнойбазы получитьобновлениеконфигурациибазыданных получитьобновлениепредопределенныхданныхинформационнойбазы получитьобщиймакет получитьобщуюформу получитьокна получитьоперативнуюотметкувремени получитьотключениебезопаÑногорежима получитьпараметрыфункциональныхопцийинтерфейÑа получитьполноеимÑÐ¿Ñ€ÐµÐ´Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð½Ð¾Ð³Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒÐ¿Ñ€ÐµÐ´ÑтавлениÑнавигационныхÑÑылок получитьпроверкуÑложноÑтипаролейпользователей получитьразделительпути получитьразделительпутиклиента получитьразделительпутиÑервера получитьÑеанÑыинформационнойбазы получитьÑкороÑтьклиентÑкогоÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒÑоединениÑинформационнойбазы получитьÑообщениÑпользователю получитьÑоответÑтвиеобъектаиформы получитьÑоÑтавÑтандартногоинтерфейÑаodata получитьÑтруктурухранениÑбазыданных получитьтекущийÑеанÑинформационнойбазы получитьфайл получитьфайлы получитьформу получитьфункциональнуюопцию получитьфункциональнуюопциюинтерфейÑа получитьчаÑовойпоÑÑинформационнойбазы Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ð¸Ð¾Ñ Ð¿Ð¾Ð¼ÐµÑтитьвовременноехранилище помеÑтитьфайл помеÑтитьфайлы прав праводоÑтупа предопределенноезначение предÑтавлениекодалокализации предÑтавлениепериода предÑтавлениеправа предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ´ÑтавлениеÑобытиÑжурналарегиÑтрации предÑтавлениечаÑовогопоÑÑа предупреждение прекратитьработуÑиÑтемы привилегированныйрежим продолжитьвызов прочитатьjson прочитатьxml прочитатьдатуjson пуÑтаÑÑтрока Ñ€Ð°Ð±Ð¾Ñ‡Ð¸Ð¹ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð´Ð°Ð½Ð½Ñ‹Ñ…Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñ€Ð°Ð·Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒÐ´Ð°Ð½Ð½Ñ‹ÐµÐ´Ð»ÑÑ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¸Ñ‚ÑŒÑ„Ð°Ð¹Ð» разорватьÑоединениеÑвнешнимиÑточникомданных раÑкодироватьÑтроку рольдоÑтупна Ñекунда Ñигнал Ñимвол ÑкопироватьжурналрегиÑтрации Ñмещениелетнеговремени ÑмещениеÑтандартноговремени Ñоединитьбуферыдвоичныхданных Ñоздатькаталог Ñоздатьфабрикуxdto Ñокрл Ñокрлп Ñокрп Ñообщить ÑоÑтоÑние Ñохранитьзначение ÑохранитьнаÑÑ‚Ñ€Ð¾Ð¹ÐºÐ¸Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñред Ñтрдлина ÑтрзаканчиваетÑÑна Ñтрзаменить Ñтрнайти ÑтрначинаетÑÑÑ Ñтрока ÑтрокаÑоединениÑинформационнойбазы ÑтрполучитьÑтроку Ñтрразделить ÑÑ‚Ñ€Ñоединить ÑÑ‚Ñ€Ñравнить ÑтрчиÑловхождений ÑтрчиÑлоÑтрок Ñтршаблон текущаÑдата текущаÑдатаÑеанÑа текущаÑуниверÑальнаÑдата текущаÑуниверÑальнаÑдатавмиллиÑекундах текущийвариантинтерфейÑаклиентÑÐºÐ¾Ð³Ð¾Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ‚ÐµÐºÑƒÑ‰Ð¸Ð¹Ð²Ð°Ñ€Ð¸Ð°Ð½Ñ‚Ð¾ÑновногошрифтаклиентÑÐºÐ¾Ð³Ð¾Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ‚ÐµÐºÑƒÑ‰Ð¸Ð¹ÐºÐ¾Ð´Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¸ текущийрежимзапуÑка текущийÑзык текущийÑзыкÑиÑтемы тип типзнч транзакциÑактивна трег удалитьданныеинформационнойбазы удалитьизвременногохранилища удалитьобъекты удалитьфайлы универÑÐ°Ð»ÑŒÐ½Ð¾ÐµÐ²Ñ€ÐµÐ¼Ñ ÑƒÑтановитьбезопаÑныйрежим уÑтановитьбезопаÑныйрежимразделениÑданных уÑтановитьблокировкуÑеанÑов уÑтановитьвнешнююкомпоненту уÑтановитьвремÑзавершениÑÑпÑщегоÑеанÑа уÑтановитьвремÑзаÑыпаниÑпаÑÑивногоÑеанÑа уÑтановитьвремÑожиданиÑблокировкиданных уÑтановитьзаголовокклиентÑÐºÐ¾Ð³Ð¾Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÑƒÑтановитьзаголовокÑиÑтемы уÑтановитьиÑпользованиежурналарегиÑтрации уÑтановитьиÑпользованиеÑобытиÑжурналарегиÑтрации уÑÑ‚Ð°Ð½Ð¾Ð²Ð¸Ñ‚ÑŒÐºÑ€Ð°Ñ‚ÐºÐ¸Ð¹Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾ÐºÐ¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÑƒÑтановитьминимальнуюдлинупаролейпользователей уÑтановитьмонопольныйрежим уÑтановитьнаÑÑ‚Ñ€Ð¾Ð¹ÐºÐ¸ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð°Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑƒÑтановитьобновлениепредопределенныхданныхинформационнойбазы уÑтановитьотключениебезопаÑногорежима уÑтановитьпараметрыфункциональныхопцийинтерфейÑа уÑтановитьпривилегированныйрежим уÑтановитьпроверкуÑложноÑтипаролейпользователей уÑтановитьраÑширениеработыÑкриптографией уÑтановитьраÑширениеработыÑфайлами уÑтановитьÑоединениеÑвнешнимиÑточникомданных уÑтановитьÑоответÑтвиеобъектаиформы уÑтановитьÑоÑтавÑтандартногоинтерфейÑаodata уÑтановитьчаÑовойпоÑÑинформационнойбазы уÑтановитьчаÑовойпоÑÑÑеанÑа формат цел Ñ‡Ð°Ñ Ñ‡Ð°ÑовойпоÑÑ Ñ‡Ð°ÑовойпоÑÑÑеанÑа чиÑло чиÑлопропиÑью ÑтоадреÑвременногохранилища wsÑÑылки библиотекакартинок библиотекамакетовоформлениÑкомпоновкиданных библиотекаÑтилей бизнеÑпроцеÑÑÑ‹ внешниеиÑточникиданных внешниеобработки внешниеотчеты вÑтроенныепокупки Ð³Ð»Ð°Ð²Ð½Ñ‹Ð¹Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð³Ð»Ð°Ð²Ð½Ñ‹Ð¹Ñтиль документы доÑтавлÑÐµÐ¼Ñ‹ÐµÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¶ÑƒÑ€Ð½Ð°Ð»Ñ‹Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð¾Ð² задачи информациÑобинтернетÑоединении иÑпользованиерабочейдаты иÑториÑÑ€Ð°Ð±Ð¾Ñ‚Ñ‹Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ ÐºÐ¾Ð½Ñтанты критерииотбора метаданные обработки отображениерекламы отправкадоÑтавлÑемыхуведомлений отчеты Ð¿Ð°Ð½ÐµÐ»ÑŒÐ·Ð°Ð´Ð°Ñ‡Ð¾Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð·Ð°Ð¿ÑƒÑка параметрыÑеанÑа перечиÑÐ»ÐµÐ½Ð¸Ñ Ð¿Ð»Ð°Ð½Ñ‹Ð²Ð¸Ð´Ð¾Ð²Ñ€Ð°Ñчета планывидовхарактериÑтик планыобмена планыÑчетов полнотекÑтовыйпоиÑк пользователиинформационнойбазы поÑледовательноÑти проверкавÑтроенныхпокупок рабочаÑдата раÑширениÑконфигурации региÑтрыбухгалтерии региÑÑ‚Ñ€Ñ‹Ð½Ð°ÐºÐ¾Ð¿Ð»ÐµÐ½Ð¸Ñ Ñ€ÐµÐ³Ð¸ÑтрыраÑчета региÑтрыÑведений Ñ€ÐµÐ³Ð»Ð°Ð¼ÐµÐ½Ñ‚Ð½Ñ‹ÐµÐ·Ð°Ð´Ð°Ð½Ð¸Ñ Ñериализаторxdto Ñправочники ÑредÑÑ‚Ð²Ð°Ð³ÐµÐ¾Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ð¾Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑредÑтвакриптографии ÑредÑтвамультимедиа ÑредÑтваотображениÑрекламы ÑредÑтвапочты ÑредÑтвателефонии фабрикаxdto файловыепотоки Ñ„Ð¾Ð½Ð¾Ð²Ñ‹ÐµÐ·Ð°Ð´Ð°Ð½Ð¸Ñ Ñ…Ñ€Ð°Ð½Ð¸Ð»Ð¸Ñ‰Ð°Ð½Ð°Ñтроек хранилищевариантовотчетов хранилищенаÑтроекданныхформ хранилищеобщихнаÑтроек хранилищепользовательÑкихнаÑтроекдинамичеÑкихÑпиÑков хранилищепользовательÑкихнаÑтроекотчетов хранилищеÑиÑтемныхнаÑтроек ",class:"webцвета windowsцвета windowsшрифты библиотекакартинок рамкиÑÑ‚Ð¸Ð»Ñ Ñимволы цветаÑÑ‚Ð¸Ð»Ñ ÑˆÑ€Ð¸Ñ„Ñ‚Ñ‹ÑÑ‚Ð¸Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑкоеÑохранениеданныхформывнаÑтройках автонумерациÑвформе автораздвижениеÑерий анимациÑдиаграммы вариантвыравниваниÑÑлементовизаголовков вариантуправлениÑвыÑотойтаблицы вертикальнаÑпрокруткаформы вертикальноеположение вертикальноеположениеÑлемента видгруппыформы виддекорацииформы виддополнениÑÑлементаформы видизменениÑданных видкнопкиформы Ð²Ð¸Ð´Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡Ð°Ñ‚ÐµÐ»Ñ Ð²Ð¸Ð´Ð¿Ð¾Ð´Ð¿Ð¸Ñейкдиаграмме видполÑформы видфлажка влиÑниеразмеранапузырекдиаграммы горизонтальноеположение горизонтальноеположениеÑлемента группировкаколонок группировкаподчиненныхÑлементовформы группыиÑлементы дейÑтвиеперетаÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹Ñ€ÐµÐ¶Ð¸Ð¼Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿ÑƒÑтимыедейÑтвиÑперетаÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð²Ð°Ð»Ð¼ÐµÐ¶Ð´ÑƒÑлементамиформы иÑпользованиевывода иÑпользованиеполоÑыпрокрутки иÑпользуемоезначениеточкибиржевойдиаграммы иÑториÑвыборапривводе иÑточникзначенийоÑиточекдиаграммы иÑточникзначениÑразмерапузырькадиаграммы категориÑгруппыкоманд макÑимумÑерий начальноеотображениедерева начальноеотображениеÑпиÑка обновлениетекÑÑ‚Ð°Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ñ€Ð¸ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñдендрограммы ориентациÑдиаграммы ориентациÑметокдиаграммы ориентациÑметокÑводнойдиаграммы ориентациÑÑлементаформы отображениевдиаграмме отображениевлегендедиаграммы отображениегруппыкнопок отображениезаголовкашкалыдиаграммы отображениезначенийÑводнойдиаграммы отображениезначениÑизмерительнойдиаграммы отображениеинтерваладиаграммыганта отображениекнопки отображениекнопкивыбора отображениеобÑужденийформы отображениеобычнойгруппы отображениеотрицательныхзначенийпузырьковойдиаграммы отображениепанелипоиÑка отображениеподÑказки отображениепредупреждениÑприредактировании отображениеразметкиполоÑÑ‹Ñ€ÐµÐ³ÑƒÐ»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸ÐµÑтраницформы отображениетаблицы отображениетекÑтазначениÑдиаграммыганта отображениеуправлениÑобычнойгруппы отображениефигурыкнопки палитрацветовдиаграммы поведениеобычнойгруппы поддержкамаÑштабадендрограммы поддержкамаÑштабадиаграммыганта поддержкамаÑштабаÑводнойдиаграммы поиÑквтаблицепривводе положениезаголовкаÑлементаформы положениекартинкикнопкиформы положениекартинкиÑлементаграфичеÑкойÑхемы положениекоманднойпанелиформы положениекоманднойпанелиÑлементаформы положениеопорнойточкиотриÑовки положениеподпиÑейкдиаграмме положениеподпиÑейшкалызначенийизмерительнойдиаграммы положениеÑоÑтоÑниÑпроÑмотра положениеÑтрокипоиÑка положениетекÑтаÑоединительнойлинии положениеуправлениÑпоиÑком положениешкалывремени порÑдокотображениÑточекгоризонтальнойгиÑтограммы порÑдокÑерийвлегендедиаграммы размеркартинки раÑположениезаголовкашкалыдиаграммы раÑÑ‚Ñгиваниеповертикалидиаграммыганта режимавтоотображениÑÑоÑтоÑÐ½Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð²Ð²Ð¾Ð´Ð°Ñтроктаблицы режимвыборанезаполненного режимвыделениÑдаты режимвыделениÑÑтрокитаблицы режимвыделениÑтаблицы режимизменениÑразмера режимизменениÑÑвÑÐ·Ð°Ð½Ð½Ð¾Ð³Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð¸ÑпользованиÑдиалогапечати режимиÑпользованиÑпараметракоманды режиммаÑштабированиÑпроÑмотра режимоÑновногоокнаклиентÑÐºÐ¾Ð³Ð¾Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñокнаформы режимотображениÑÐ²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸ÑгеографичеÑкойÑхемы режимотображениÑзначенийÑерии режимотриÑовкиÑеткиграфичеÑкойÑхемы режимполупрозрачноÑтидиаграммы режимпробеловдиаграммы режимразмещениÑнаÑтранице режимредактированиÑколонки режимÑглаживаниÑдиаграммы режимÑглаживаниÑиндикатора режимÑпиÑказадач Ñквозноевыравнивание ÑохранениеданныхформывнаÑтройках ÑпоÑобзаполнениÑтекÑтазаголовкашкалыдиаграммы ÑпоÑобопределениÑограничивающегозначениÑдиаграммы ÑтандартнаÑгруппакоманд Ñтандартноеоформление ÑтатуÑоповещениÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ ÑтильÑтрелки типаппрокÑимациилиниитрендадиаграммы типдиаграммы типединицышкалывремени типимпортаÑерийÑлоÑгеографичеÑкойÑхемы типлиниигеографичеÑкойÑхемы типлиниидиаграммы типмаркерагеографичеÑкойÑхемы типмаркерадиаграммы типоблаÑÑ‚Ð¸Ð¾Ñ„Ð¾Ñ€Ð¼Ð»ÐµÐ½Ð¸Ñ Ñ‚Ð¸Ð¿Ð¾Ñ€Ð³Ð°Ð½Ð¸Ð·Ð°Ñ†Ð¸Ð¸Ð¸ÑточникаданныхгеографичеÑкойÑхемы типотображениÑÑерииÑлоÑгеографичеÑкойÑхемы типотображениÑточечногообъектагеографичеÑкойÑхемы типотображениÑшкалыÑлементалегендыгеографичеÑкойÑхемы типпоиÑкаобъектовгеографичеÑкойÑхемы типпроекциигеографичеÑкойÑхемы типразмещениÑизмерений типразмещениÑреквизитовизмерений типрамкиÑÐ»ÐµÐ¼ÐµÐ½Ñ‚Ð°ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‚Ð¸Ð¿Ñводнойдиаграммы типÑвÑзидиаграммыганта типÑоединениÑзначенийпоÑериÑмдиаграммы типÑоединениÑточекдиаграммы типÑоединительнойлинии типÑтороныÑлементаграфичеÑкойÑхемы типформыотчета типшкалырадарнойдиаграммы факторлиниитрендадиаграммы фигуракнопки фигурыграфичеÑкойÑхемы фикÑациÑвтаблице форматднÑшкалывремени форматкартинки ширинаподчиненныхÑлементовформы виддвижениÑбухгалтерии виддвижениÑÐ½Ð°ÐºÐ¾Ð¿Ð»ÐµÐ½Ð¸Ñ Ð²Ð¸Ð´Ð¿ÐµÑ€Ð¸Ð¾Ð´Ð°Ñ€ÐµÐ³Ð¸ÑтрараÑчета видÑчета видточкимаршрутабизнеÑпроцеÑÑа иÑпользованиеагрегатарегиÑÑ‚Ñ€Ð°Ð½Ð°ÐºÐ¾Ð¿Ð»ÐµÐ½Ð¸Ñ Ð¸ÑпользованиегруппиÑлементов иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸ÐµÑ€ÐµÐ¶Ð¸Ð¼Ð°Ð¿Ñ€Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¸ÑпользованиеÑреза периодичноÑтьагрегатарегиÑÑ‚Ñ€Ð°Ð½Ð°ÐºÐ¾Ð¿Ð»ÐµÐ½Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð°Ð²Ñ‚Ð¾Ð²Ñ€ÐµÐ¼Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð·Ð°Ð¿Ð¸Ñидокумента режимпроведениÑдокумента авторегиÑтрациÑизменений допуÑтимыйномерÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²ÐºÐ°Ñлементаданных получениеÑлементаданных иÑпользованиераÑшифровкитабличногодокумента ориентациÑÑтраницы положениеитоговколонокÑводнойтаблицы положениеитоговÑтрокÑводнойтаблицы положениетекÑтаотноÑительнокартинки раÑположениезаголовкагруппировкитабличногодокумента ÑпоÑобчтениÑзначенийтабличногодокумента типдвуÑтороннейпечати типзаполнениÑоблаÑтитабличногодокумента типкурÑоровтабличногодокумента типлиниириÑункатабличногодокумента типлинииÑчейкитабличногодокумента типнаправлениÑпереходатабличногодокумента типотображениÑвыделениÑтабличногодокумента типотображениÑлинийÑводнойтаблицы типразмещениÑтекÑтатабличногодокумента типриÑункатабличногодокумента типÑмещениÑтабличногодокумента типузоратабличногодокумента типфайлатабличногодокумента точноÑтьпечати чередованиераÑположениÑÑтраниц отображениевремениÑлементовпланировщика типфайлаформатированногодокумента обходрезультатазапроÑа типзапиÑизапроÑа видзаполнениÑраÑшифровкипоÑтроителÑотчета типдобавлениÑпредÑтавлений типизмерениÑпоÑтроителÑотчета типразмещениÑитогов доÑтупкфайлу режимдиалогавыборафайла режимоткрытиÑфайла типизмерениÑпоÑтроителÑзапроÑа видданныханализа методклаÑтеризации типединицыинтервалавременианализаданных типзаполнениÑтаблицырезультатаанализаданных типиÑпользованиÑчиÑловыхзначенийанализаданных типиÑточникаданныхпоиÑкааÑÑоциаций типколонкианализаданныхдереворешений типколонкианализаданныхклаÑÑ‚ÐµÑ€Ð¸Ð·Ð°Ñ†Ð¸Ñ Ñ‚Ð¸Ð¿ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸Ð°Ð½Ð°Ð»Ð¸Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ñ…Ð¾Ð±Ñ‰Ð°ÑÑтатиÑтика типколонкианализаданныхпоиÑкаÑÑоциаций типколонкианализаданныхпоиÑкпоÑледовательноÑтей типколонкимоделипрогноза типмерыраÑÑтоÑниÑанализаданных типотÑечениÑправилаÑÑоциации типполÑанализаданных типÑтандартизациианализаданных типупорÑдочиваниÑправилаÑÑоциациианализаданных типупорÑдочиваниÑшаблоновпоÑледовательноÑтейанализаданных типупрощениÑдереварешений wsнаправлениепараметра вариантxpathxs вариантзапиÑидатыjson вариантпроÑтоготипаxs видгруппымоделиxs видфаÑетаxdto дейÑтвиепоÑтроителÑdom завершенноÑтьпроÑтоготипаxs завершенноÑÑ‚ÑŒÑоÑтавноготипаxs завершенноÑÑ‚ÑŒÑхемыxs запрещенныеподÑтановкиxs иÑключениÑгруппподÑтановкиxs категориÑиÑпользованиÑатрибутаxs категориÑограничениÑидентичноÑтиxs категориÑограничениÑпроÑтранÑтвименxs методнаÑледованиÑxs модельÑодержимогоxs назначениетипаxml недопуÑтимыеподÑтановкиxs обработкапробельныхÑимволовxs обработкаÑодержимогоxs ограничениезначениÑxs параметрыотбораузловdom переноÑÑтрокjson позициÑвдокументеdom пробельныеÑимволыxml типатрибутаxml типзначениÑjson типканоничеÑкогоxml типкомпонентыxs типпроверкиxml типрезультатаdomxpath типузлаdom типузлаxml формаxml формапредÑтавлениÑxs форматдатыjson ÑкранированиеÑимволовjson видÑравнениÑкомпоновкиданных дейÑтвиеобработкираÑшифровкикомпоновкиданных направлениеÑортировкикомпоновкиданных раÑположениевложенныхÑлементоврезультатакомпоновкиданных раÑположениеитоговкомпоновкиданных раÑположениегруппировкикомпоновкиданных раÑположениеполейгруппировкикомпоновкиданных раÑположениеполÑкомпоновкиданных раÑположениереквизитовкомпоновкиданных раÑположениереÑурÑовкомпоновкиданных типбухгалтерÑкогооÑтаткакомпоновкиданных типвыводатекÑтакомпоновкиданных типгруппировкикомпоновкиданных типгруппыÑлементовотборакомпоновкиданных типдополнениÑпериодакомпоновкиданных типзаголовкаполейкомпоновкиданных типмакетагруппировкикомпоновкиданных типмакетаоблаÑтикомпоновкиданных типоÑтаткакомпоновкиданных типпериодакомпоновкиданных типразмещениÑтекÑтакомпоновкиданных типÑвÑзинаборовданныхкомпоновкиданных типÑлементарезультатакомпоновкиданных раÑположениелегендыдиаграммыкомпоновкиданных типприменениÑотборакомпоновкиданных режимотображениÑÑлементанаÑтройкикомпоновкиданных режимотображениÑнаÑтроеккомпоновкиданных ÑоÑтоÑниеÑлементанаÑтройкикомпоновкиданных ÑпоÑобвоÑÑтановлениÑнаÑтроеккомпоновкиданных режимкомпоновкирезультата иÑпользованиепараметракомпоновкиданных автопозициÑреÑурÑовкомпоновкиданных вариантиÑпользованиÑгруппировкикомпоновкиданных раÑположениереÑурÑоввдиаграммекомпоновкиданных фикÑациÑкомпоновкиданных иÑпользованиеуÑловногооформлениÑкомпоновкиданных важноÑтьинтернетпочтовогоÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ°Ñ‚ÐµÐºÑтаинтернетпочтовогоÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ ÑпоÑобкодированиÑÐ¸Ð½Ñ‚ÐµÑ€Ð½ÐµÑ‚Ð¿Ð¾Ñ‡Ñ‚Ð¾Ð²Ð¾Ð³Ð¾Ð²Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÑпоÑобкодированиÑнеasciiÑимволовинтернетпочтовогоÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ñ‚Ð¸Ð¿Ñ‚ÐµÐºÑтапочтовогоÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ‚Ð¾ÐºÐ¾Ð»Ð¸Ð½Ñ‚ÐµÑ€Ð½ÐµÑ‚Ð¿Ð¾Ñ‡Ñ‚Ñ‹ ÑтатуÑразборапочтовогоÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ñ‚Ñ€Ð°Ð½Ð·Ð°ÐºÑ†Ð¸Ð¸Ð·Ð°Ð¿Ð¸ÑижурналарегиÑтрации ÑтатуÑтранзакциизапиÑижурналарегиÑтрации уровеньжурналарегиÑтрации раÑположениехранилищаÑертификатовкриптографии режимвключениÑÑертификатовкриптографии режимпроверкиÑертификатакриптографии типхранилищаÑертификатовкриптографии кодировкаименфайловвzipфайле методÑжатиÑzip методшифрованиÑzip режимвоÑÑтановлениÑпутейфайловzip режимобработкиподкаталоговzip режимÑохранениÑпутейzip уровеньÑжатиÑzip звуковоеоповещение направлениепереходакÑтроке позициÑвпотоке порÑдокбайтов режимблокировкиданных режимуправлениÑблокировкойданных ÑервиÑвÑтроенныхпокупок ÑоÑтоÑÐ½Ð¸ÐµÑ„Ð¾Ð½Ð¾Ð²Ð¾Ð³Ð¾Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ñ‚Ð¸Ð¿Ð¿Ð¾Ð´Ð¿Ð¸ÑчикадоÑтавлÑемыхуведомлений уровеньиÑпользованиÑзащищенногоÑоединениÑftp направлениепорÑдкаÑхемызапроÑа типдополнениÑпериодамиÑхемызапроÑа типконтрольнойточкиÑхемызапроÑа типобъединениÑÑхемызапроÑа типпараметрадоÑтупнойтаблицыÑхемызапроÑа типÑоединениÑÑхемызапроÑа httpметод автоиÑпользованиеобщегореквизита автопрефикÑномеразадачи вариантвÑтроенногоÑзыка видиерархии видрегиÑÑ‚Ñ€Ð°Ð½Ð°ÐºÐ¾Ð¿Ð»ÐµÐ½Ð¸Ñ Ð²Ð¸Ð´Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹Ð²Ð½ÐµÑˆÐ½ÐµÐ³Ð¾Ð¸Ñточникаданных запиÑьдвиженийприпроведении заполнениепоÑледовательноÑтей индекÑирование иÑпользованиебазыпланавидовраÑчета иÑпользованиебыÑтроговыбора иÑпользованиеобщегореквизита иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸ÐµÐ¿Ð¾Ð´Ñ‡Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¸ÑпользованиеполнотекÑтовогопоиÑка иÑпользованиеразделÑемыхданныхобщегореквизита иÑпользованиереквизита назначениеиÑпользованиÑÐ¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸ÐµÑ€Ð°ÑширениÑконфигурации направлениепередачи обновлениепредопределенныхданных оперативноепроведение оÑновноепредÑтавлениевидараÑчета оÑновноепредÑтавлениевидахарактериÑтики оÑновноепредÑтавлениезадачи оÑновноепредÑтавлениепланаобмена оÑновноепредÑтавлениеÑправочника оÑновноепредÑтавлениеÑчета перемещениеграницыприпроведении периодичноÑтьномерабизнеÑпроцеÑÑа периодичноÑтьномерадокумента периодичноÑтьрегиÑтрараÑчета периодичноÑтьрегиÑтраÑведений повторноеиÑпользованиевозвращаемыхзначений полнотекÑтовыйпоиÑкпривводепоÑтроке принадлежноÑтьобъекта проведение разделениеаутентификацииобщегореквизита разделениеданныхобщегореквизита разделениераÑширенийконфигурацииобщегореквизита режимавтонумерацииобъектов режимзапиÑирегиÑтра режимиÑпользованиÑмодальноÑти режимиÑпользованиÑÑинхронныхвызововраÑширенийплатформыивнешнихкомпонент режимповторногоиÑпользованиÑÑеанÑов режимполучениÑданныхвыборапривводепоÑтроке режимÑовмеÑтимоÑти режимÑовмеÑтимоÑтиинтерфейÑа режимуправлениÑблокировкойданныхпоумолчанию ÑериикодовпланавидовхарактериÑтик ÑериикодовпланаÑчетов ÑериикодовÑправочника Ñозданиепривводе ÑпоÑобвыбора ÑпоÑобпоиÑкаÑтрокипривводепоÑтроке ÑпоÑÐ¾Ð±Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ‚Ð¸Ð¿Ð´Ð°Ð½Ð½Ñ‹Ñ…Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹Ð²Ð½ÐµÑˆÐ½ÐµÐ³Ð¾Ð¸Ñточникаданных типкодапланавидовраÑчета типкодаÑправочника типмакета типномерабизнеÑпроцеÑÑа типномерадокумента типномеразадачи типформы удалениедвижений важноÑтьпроблемыприменениÑраÑширениÑконфигурации вариантинтерфейÑаклиентÑÐºÐ¾Ð³Ð¾Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð²Ð°Ñ€Ð¸Ð°Ð½Ñ‚Ð¼Ð°ÑштабаформклиентÑÐºÐ¾Ð³Ð¾Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð²Ð°Ñ€Ð¸Ð°Ð½Ñ‚Ð¾ÑновногошрифтаклиентÑÐºÐ¾Ð³Ð¾Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð²Ð°Ñ€Ð¸Ð°Ð½Ñ‚Ñтандартногопериода вариантÑтандартнойдатыначала видграницы видкартинки видотображениÑполнотекÑтовогопоиÑка видрамки видÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ Ð²Ð¸Ð´Ñ†Ð²ÐµÑ‚Ð° видчиÑÐ»Ð¾Ð²Ð¾Ð³Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð²Ð¸Ð´ÑˆÑ€Ð¸Ñ„Ñ‚Ð° допуÑтимаÑдлина допуÑтимыйзнак иÑпользованиеbyteordermark иÑпользованиеметаданныхполнотекÑтовогопоиÑка иÑточникраÑширенийконфигурации клавиша кодвозвратадиалога кодировкаxbase кодировкатекÑта направлениепоиÑка направлениеÑортировки обновлениепредопределенныхданных обновлениеприизмененииданных отображениепанелиразделов Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ°Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð´Ð¸Ð°Ð»Ð¾Ð³Ð°Ð²Ð¾Ð¿Ñ€Ð¾Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð·Ð°Ð¿ÑƒÑкаклиентÑÐºÐ¾Ð³Ð¾Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð¾ÐºÑ€ÑƒÐ³Ð»ÐµÐ½Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸ÑÑ„Ð¾Ñ€Ð¼Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð¿Ð¾Ð»Ð½Ð¾Ñ‚ÐµÐºÑтовогопоиÑка ÑкороÑтьклиентÑкогоÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÑоÑтоÑниевнешнегоиÑточникаданных ÑоÑтоÑниеобновлениÑконфигурациибазыданных ÑпоÑобвыбораÑертификатаwindows ÑпоÑобкодированиÑÑтроки ÑтатуÑÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ñ‚Ð¸Ð¿Ð²Ð½ÐµÑˆÐ½ÐµÐ¹ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ñ‹ типплатформы типповедениÑклавишиenter типÑлементаинформацииовыполненииобновлениÑконфигурациибазыданных уровеньизолÑциитранзакций Ñ…ÐµÑˆÑ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ñ‡Ð°Ñтидаты",type:"comобъект ftpÑоединение httpÐ·Ð°Ð¿Ñ€Ð¾Ñ httpÑервиÑответ httpÑоединение wsÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ wsпрокÑи xbase анализданных аннотациÑxs блокировкаданных буфердвоичныхданных включениеxs выражениекомпоновкиданных генераторÑлучайныхчиÑел географичеÑкаÑÑхема географичеÑкиекоординаты графичеÑкаÑÑхема группамоделиxs данныераÑшифровкикомпоновкиданных двоичныеданные дендрограмма диаграмма диаграммаганта диалогвыборафайла диалогвыборацвета диалогвыборашрифта диалограÑпиÑаниÑÑ€ÐµÐ³Ð»Ð°Ð¼ÐµÐ½Ñ‚Ð½Ð¾Ð³Ð¾Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð´Ð¸Ð°Ð»Ð¾Ð³Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸ÑÑтандартногопериода диапазон документdom документhtml документациÑxs доÑтавлÑемоеуведомление запиÑÑŒdom запиÑÑŒfastinfoset запиÑÑŒhtml запиÑÑŒjson запиÑÑŒxml запиÑÑŒzipфайла запиÑьданных запиÑьтекÑта запиÑьузловdom Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð·Ð°Ñ‰Ð¸Ñ‰ÐµÐ½Ð½Ð¾ÐµÑоединениеopenssl значениÑполейраÑшифровкикомпоновкиданных извлечениетекÑта импортxs интернетпочта интернетпочтовоеÑообщение интернетпочтовыйпрофиль интернетпрокÑи интернетÑоединение информациÑдлÑприложениÑxs иÑпользованиеатрибутаxs иÑпользованиеÑобытиÑжурналарегиÑтрации иÑточникдоÑтупныхнаÑтроеккомпоновкиданных итераторузловdom картинка квалификаторыдаты квалификаторыдвоичныхданных квалификаторыÑтроки квалификаторычиÑла компоновщикмакетакомпоновкиданных компоновщикнаÑтроеккомпоновкиданных конÑтруктормакетаоформлениÑкомпоновкиданных конÑтрукторнаÑтроеккомпоновкиданных конÑтрукторформатнойÑтроки Ð»Ð¸Ð½Ð¸Ñ Ð¼Ð°ÐºÐµÑ‚ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸Ð´Ð°Ð½Ð½Ñ‹Ñ… макетоблаÑтикомпоновкиданных макетоформлениÑкомпоновкиданных маÑкаxs менеджеркриптографии наборÑхемxml наÑтройкикомпоновкиданных наÑтройкиÑериализацииjson обработкакартинок обработкараÑшифровкикомпоновкиданных обходдереваdom объÑвлениеатрибутаxs объÑвлениенотацииxs объÑвлениеÑлементаxs опиÑаниеиÑпользованиÑÑобытиÑдоÑтупжурналарегиÑтрации опиÑаниеиÑпользованиÑÑобытиÑотказвдоÑтупежурналарегиÑтрации опиÑаниеобработкираÑшифровкикомпоновкиданных опиÑаниепередаваемогофайла опиÑаниетипов определениегруппыатрибутовxs определениегруппымоделиxs определениеограничениÑидентичноÑтиxs определениепроÑтоготипаxs определениеÑоÑтавноготипаxs определениетипадокументаdom определениÑxpathxs отборкомпоновкиданных пакетотображаемыхдокументов параметрвыбора параметркомпоновкиданных параметрызапиÑиjson параметрызапиÑиxml параметрычтениÑxml переопределениеxs планировщик полеанализаданных полекомпоновкиданных поÑтроительdom поÑтроительзапроÑа поÑтроительотчета поÑтроительотчетаанализаданных поÑтроительÑхемxml поток потоквпамÑти почта почтовоеÑообщение преобразованиеxsl преобразованиекканоничеÑкомуxml процеÑÑорвыводарезультатакомпоновкиданныхвколлекциюзначений процеÑÑорвыводарезультатакомпоновкиданныхвтабличныйдокумент процеÑÑоркомпоновкиданных разыменовательпроÑтранÑтвименdom рамка раÑпиÑÐ°Ð½Ð¸ÐµÑ€ÐµÐ³Ð»Ð°Ð¼ÐµÐ½Ñ‚Ð½Ð¾Ð³Ð¾Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ñ€Ð°ÑширенноеимÑxml результатчтениÑданных ÑводнаÑдиаграмма ÑвÑзьпараметравыбора ÑвÑзьпотипу ÑвÑзьпотипукомпоновкиданных Ñериализаторxdto Ñертификатклиентаwindows Ñертификатклиентафайл Ñертификаткриптографии ÑертификатыудоÑтоверÑющихцентровwindows ÑертификатыудоÑтоверÑющихцентровфайл Ñжатиеданных ÑиÑтемнаÑÐ¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ñообщениепользователю Ñочетаниеклавиш Ñравнениезначений ÑтандартнаÑдатаначала Ñтандартныйпериод Ñхемаxml Ñхемакомпоновкиданных табличныйдокумент текÑтовыйдокумент теÑтируемоеприложение типданныхxml уникальныйидентификатор фабрикаxdto файл файловыйпоток фаÑетдлиныxs фаÑетколичеÑтваразрÑдовдробнойчаÑтиxs фаÑетмакÑимальноговключающегозначениÑxs фаÑетмакÑимальногоиÑключающегозначениÑxs фаÑетмакÑимальнойдлиныxs фаÑетминимальноговключающегозначениÑxs фаÑетминимальногоиÑключающегозначениÑxs фаÑетминимальнойдлиныxs фаÑетобразцаxs фаÑетобщегоколичеÑтваразрÑдовxs фаÑетперечиÑлениÑxs фаÑетпробельныхÑимволовxs фильтрузловdom форматированнаÑÑтрока форматированныйдокумент фрагментxs хешированиеданных Ñ…Ñ€Ð°Ð½Ð¸Ð»Ð¸Ñ‰ÐµÐ·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñ†Ð²ÐµÑ‚ чтениеfastinfoset чтениеhtml чтениеjson чтениеxml чтениеzipфайла чтениеданных чтениетекÑта чтениеузловdom шрифт Ñлементрезультатакомпоновкиданных comsafearray деревозначений маÑÑив ÑоответÑтвие ÑпиÑокзначений Ñтруктура таблицазначений фикÑированнаÑÑтруктура фикÑированноеÑоответÑтвие фикÑированныймаÑÑив ",literal:a},contains:[{className:"meta",lexemes:t,begin:"#|&",end:"$",keywords:{"meta-keyword":n+"загрузитьизфайла вебклиент вмеÑто внешнееÑоединение клиент конецоблаÑти мобильноеприложениеклиент мобильноеприложениеÑервер наклиенте наклиентенаÑервере наклиентенаÑерверебезконтекÑта наÑервере наÑерверебезконтекÑта облаÑÑ‚ÑŒ перед поÑле Ñервер толÑтыйклиентобычноеприложение толÑтыйклиентуправлÑемоеприложение тонкийклиент "},contains:[s]},{className:"function",lexemes:t,variants:[{begin:"процедура|функциÑ",end:"\\)",keywords:"процедура функциÑ"},{begin:"конецпроцедуры|конецфункции",keywords:"конецпроцедуры конецфункции"}],contains:[{begin:"\\(",end:"\\)",endsParent:!0,contains:[{className:"params",lexemes:t,begin:t,end:",",excludeEnd:!0,endsWithParent:!0,keywords:{keyword:"знач",literal:a},contains:[r,i,o]},s]},e.inherit(e.TITLE_MODE,{begin:t})]},s,{className:"symbol",begin:"~",end:";|:",excludeEnd:!0},r,i,o]}}},AIHI:function(e,t){e.exports=function(e){return{name:"STEP Part 21",aliases:["p21","step","stp"],case_insensitive:!0,lexemes:"[A-Z_][A-Z0-9_.]*",keywords:{keyword:"HEADER ENDSEC DATA"},contains:[{className:"meta",begin:"ISO-10303-21;",relevance:10},{className:"meta",begin:"END-ISO-10303-21;",relevance:10},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.COMMENT("/\\*\\*!","\\*/"),e.C_NUMBER_MODE,e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),{className:"string",begin:"'",end:"'"},{className:"symbol",variants:[{begin:"#",end:"\\d+",illegal:"\\W"}]}]}}},Aayt:function(e,t){e.exports=function(e){var t="[A-Za-z](_?[A-Za-z0-9.])*",n=e.COMMENT("--","$"),a={begin:"\\s+:\\s+",end:"\\s*(:=|;|\\)|=>|$)",illegal:"[]{}%#'\"",contains:[{beginKeywords:"loop for declare others",endsParent:!0},{className:"keyword",beginKeywords:"not null constant access function procedure in out aliased exception"},{className:"type",begin:t,endsParent:!0,relevance:0}]};return{name:"Ada",case_insensitive:!0,keywords:{keyword:"abort else new return abs elsif not reverse abstract end accept entry select access exception of separate aliased exit or some all others subtype and for out synchronized array function overriding at tagged generic package task begin goto pragma terminate body private then if procedure type case in protected constant interface is raise use declare range delay limited record when delta loop rem while digits renames with do mod requeue xor",literal:"True False"},contains:[n,{className:"string",begin:/"/,end:/"/,contains:[{begin:/""/,relevance:0}]},{className:"string",begin:/'.'/},{className:"number",begin:"\\b(\\d(_|\\d)*#\\w+(\\.\\w+)?#([eE][-+]?\\d(_|\\d)*)?|\\d(_|\\d)*(\\.\\d(_|\\d)*)?([eE][-+]?\\d(_|\\d)*)?)",relevance:0},{className:"symbol",begin:"'"+t},{className:"title",begin:"(\\bwith\\s+)?(\\bprivate\\s+)?\\bpackage\\s+(\\bbody\\s+)?",end:"(is|$)",keywords:"package body",excludeBegin:!0,excludeEnd:!0,illegal:"[]{}%#'\""},{begin:"(\\b(with|overriding)\\s+)?\\b(function|procedure)\\s+",end:"(\\bis|\\bwith|\\brenames|\\)\\s*;)",keywords:"overriding function procedure with is renames return",returnBegin:!0,contains:[n,{className:"title",begin:"(\\bwith\\s+)?\\b(function|procedure)\\s+",end:"(\\(|\\s+|$)",excludeBegin:!0,excludeEnd:!0,illegal:"[]{}%#'\""},a,{className:"type",begin:"\\breturn\\s+",end:"(\\s+|;|$)",keywords:"return",excludeBegin:!0,excludeEnd:!0,endsParent:!0,illegal:"[]{}%#'\""}]},{className:"type",begin:"\\b(sub)?type\\s+",end:"\\s+",keywords:"type",excludeBegin:!0,illegal:"[]{}%#'\""},a]}}},Agkw:function(e,t){e.exports=function(e){var t=e.getLanguage("c-like").rawDefinition();return t.disableAutodetect=!1,t.name="C++",t.aliases=["cc","c++","h++","hpp","hh","hxx","cxx"],t}},AhXs:function(e,t){e.exports=function(e){var t={begin:"<",end:">",contains:[e.inherit(e.TITLE_MODE,{begin:/'[a-zA-Z0-9_]+/})]};return{name:"F#",aliases:["fs"],keywords:"abstract and as assert base begin class default delegate do done downcast downto elif else end exception extern false finally for fun function global if in inherit inline interface internal lazy let match member module mutable namespace new null of open or override private public rec return sig static struct then to true try type upcast use val void when while with yield",illegal:/\/\*/,contains:[{className:"keyword",begin:/\b(yield|return|let|do)!/},{className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},{className:"string",begin:'"""',end:'"""'},e.COMMENT("\\(\\*","\\*\\)"),{className:"class",beginKeywords:"type",end:"\\(|=|$",excludeEnd:!0,contains:[e.UNDERSCORE_TITLE_MODE,t]},{className:"meta",begin:"\\[<",end:">\\]",relevance:10},{className:"symbol",begin:"\\B('[A-Za-z])\\b",contains:[e.BACKSLASH_ESCAPE]},e.C_LINE_COMMENT_MODE,e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),e.C_NUMBER_MODE]}}},ApBa:function(e,t){e.exports=function(e){return{name:"AsciiDoc",aliases:["adoc"],contains:[e.COMMENT("^/{4,}\\n","\\n/{4,}$",{relevance:10}),e.COMMENT("^//","$",{relevance:0}),{className:"title",begin:"^\\.\\w.*$"},{begin:"^[=\\*]{4,}\\n",end:"\\n^[=\\*]{4,}$",relevance:10},{className:"section",relevance:10,variants:[{begin:"^(={1,5}) .+?( \\1)?$"},{begin:"^[^\\[\\]\\n]+?\\n[=\\-~\\^\\+]{2,}$"}]},{className:"meta",begin:"^:.+?:",end:"\\s",excludeEnd:!0,relevance:10},{className:"meta",begin:"^\\[.+?\\]$",relevance:0},{className:"quote",begin:"^_{4,}\\n",end:"\\n_{4,}$",relevance:10},{className:"code",begin:"^[\\-\\.]{4,}\\n",end:"\\n[\\-\\.]{4,}$",relevance:10},{begin:"^\\+{4,}\\n",end:"\\n\\+{4,}$",contains:[{begin:"<",end:">",subLanguage:"xml",relevance:0}],relevance:10},{className:"bullet",begin:"^(\\*+|\\-+|\\.+|[^\\n]+?::)\\s+"},{className:"symbol",begin:"^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):\\s+",relevance:10},{className:"strong",begin:"\\B\\*(?![\\*\\s])",end:"(\\n{2}|\\*)",contains:[{begin:"\\\\*\\w",relevance:0}]},{className:"emphasis",begin:"\\B'(?!['\\s])",end:"(\\n{2}|')",contains:[{begin:"\\\\'\\w",relevance:0}],relevance:0},{className:"emphasis",begin:"_(?![_\\s])",end:"(\\n{2}|_)",relevance:0},{className:"string",variants:[{begin:"``.+?''"},{begin:"`.+?'"}]},{className:"code",begin:"(`.+?`|\\+.+?\\+)",relevance:0},{className:"code",begin:"^[ \\t]",end:"$",relevance:0},{begin:"^'{3,}[ \\t]*$",relevance:10},{begin:"(link:)?(http|https|ftp|file|irc|image:?):\\S+\\[.*?\\]",returnBegin:!0,contains:[{begin:"(link|image:?):",relevance:0},{className:"link",begin:"\\w",end:"[^\\[]+",relevance:0},{className:"string",begin:"\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0,relevance:0}],relevance:10}]}}},Aqyh:function(e,t){e.exports=function(e){return{name:"SubUnit",case_insensitive:!0,contains:[{className:"string",begin:"\\[\n(multipart)?",end:"\\]\n"},{className:"string",begin:"\\d{4}-\\d{2}-\\d{2}(\\s+)\\d{2}:\\d{2}:\\d{2}.\\d+Z"},{className:"string",begin:"(\\+|-)\\d+"},{className:"keyword",relevance:10,variants:[{begin:"^(test|testing|success|successful|failure|error|skip|xfail|uxsuccess)(:?)\\s+(test)?"},{begin:"^progress(:?)(\\s+)?(pop|push)?"},{begin:"^tags:"},{begin:"^time:"}]}]}}},AsRY:function(e,t){e.exports=function(e){var t={className:"keyword",begin:"\\$(f[asn]|t|vp[rtd]|children)"},n={className:"number",begin:"\\b\\d+(\\.\\d+)?(e-?\\d+)?",relevance:0},a=e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),r={className:"function",beginKeywords:"module function",end:"\\=|\\{",contains:[{className:"params",begin:"\\(",end:"\\)",contains:["self",n,a,t,{className:"literal",begin:"false|true|PI|undef"}]},e.UNDERSCORE_TITLE_MODE]};return{name:"OpenSCAD",aliases:["scad"],keywords:{keyword:"function module include use for intersection_for if else \\%",literal:"false true PI undef",built_in:"circle square polygon text sphere cube cylinder polyhedron translate rotate scale resize mirror multmatrix color offset hull minkowski union difference intersection abs sign sin cos tan acos asin atan atan2 floor round ceil ln log pow sqrt exp rands min max concat lookup str chr search version version_num norm cross parent_module echo import import_dxf dxf_linear_extrude linear_extrude rotate_extrude surface projection render children dxf_cross dxf_dim let assign"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,{className:"meta",keywords:{"meta-keyword":"include use"},begin:"include|use <",end:">"},a,t,{begin:"[*!#%]",relevance:0},r]}}},B05S:function(e,t){e.exports=function(e){return{name:"IRPF90",case_insensitive:!0,keywords:{literal:".False. .True.",keyword:"kind do while private call intrinsic where elsewhere type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. goto save else use module select case access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit continue format pause cycle exit c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg synchronous nopass non_overridable pass protected volatile abstract extends import non_intrinsic value deferred generic final enumerator class associate bind enum c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated c_f_pointer c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous recursive pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure integer real character complex logical dimension allocatable|10 parameter external implicit|10 none double precision assign intent optional pointer target in out common equivalence data begin_provider &begin_provider end_provider begin_shell end_shell begin_template end_template subst assert touch soft_touch provide no_dep free irp_if irp_else irp_endif irp_write irp_read",built_in:"alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_of acosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image IRP_ALIGN irp_here"},illegal:/\/\*/,contains:[e.inherit(e.APOS_STRING_MODE,{className:"string",relevance:0}),e.inherit(e.QUOTE_STRING_MODE,{className:"string",relevance:0}),{className:"function",beginKeywords:"subroutine function program",illegal:"[${=\\n]",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)"}]},e.COMMENT("!","$",{relevance:0}),e.COMMENT("begin_doc","end_doc",{relevance:10}),{className:"number",begin:"(?=\\b|\\+|\\-|\\.)(?:\\.|\\d+\\.?)\\d*([de][+-]?\\d+)?(_[a-z_\\d]+)?",relevance:0}]}}},BIHe:function(e,t){e.exports=function(e){var t={begin:"`[\\s\\S]"};return{name:"AutoHotkey",case_insensitive:!0,aliases:["ahk"],keywords:{keyword:"Break Continue Critical Exit ExitApp Gosub Goto New OnExit Pause return SetBatchLines SetTimer Suspend Thread Throw Until ahk_id ahk_class ahk_pid ahk_exe ahk_group",literal:"true false NOT AND OR",built_in:"ComSpec Clipboard ClipboardAll ErrorLevel"},contains:[t,e.inherit(e.QUOTE_STRING_MODE,{contains:[t]}),e.COMMENT(";","$",{relevance:0}),e.C_BLOCK_COMMENT_MODE,{className:"number",begin:e.NUMBER_RE,relevance:0},{className:"variable",begin:"%[a-zA-Z0-9#_$@]+%"},{className:"built_in",begin:"^\\s*\\w+\\s*(,|%)"},{className:"title",variants:[{begin:'^[^\\n";]+::(?!=)'},{begin:'^[^\\n";]+:(?!=)',relevance:0}]},{className:"meta",begin:"^\\s*#\\w+",end:"$",relevance:0},{className:"built_in",begin:"A_[a-zA-Z0-9]+"},{begin:",\\s*,"}]}}},BKhn:function(e,t){e.exports=function(e){var t={className:"params",begin:/\(/,end:/\)/,contains:[{begin:/[\w-]+ *=/,returnBegin:!0,relevance:0,contains:[{className:"attr",begin:/[\w-]+/}]}],relevance:0};return{name:"JBoss CLI",aliases:["wildfly-cli"],lexemes:"[a-z-]+",keywords:{keyword:"alias batch cd clear command connect connection-factory connection-info data-source deploy deployment-info deployment-overlay echo echo-dmr help history if jdbc-driver-info jms-queue|20 jms-topic|20 ls patch pwd quit read-attribute read-operation reload rollout-plan run-batch set shutdown try unalias undeploy unset version xa-data-source",literal:"true false"},contains:[e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,{className:"params",begin:/--[\w\-=\/]+/},{className:"function",begin:/:[\w\-.]+/,relevance:0},{className:"string",begin:/\B(([\/.])[\w\-.\/=]+)+/},t]}}},BLBw:function(e,t){e.exports=function(e){const t={begin:"<",end:">",subLanguage:"xml",relevance:0},n={begin:"\\[.+?\\][\\(\\[].*?[\\)\\]]",returnBegin:!0,contains:[{className:"string",begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0,relevance:0},{className:"link",begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}],relevance:10},a={className:"strong",contains:[],variants:[{begin:/_{2}/,end:/_{2}/},{begin:/\*{2}/,end:/\*{2}/}]},r={className:"emphasis",contains:[],variants:[{begin:/\*(?!\*)/,end:/\*/},{begin:/_(?!_)/,end:/_/,relevance:0}]};a.contains.push(r),r.contains.push(a);var i=[t,n];return a.contains=a.contains.concat(i),r.contains=r.contains.concat(i),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:i=i.concat(a,r)},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:i}]}]},t,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},a,r,{className:"quote",begin:"^>\\s+",contains:i,end:"$"},{className:"code",variants:[{begin:"(`{3,})(.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})(.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},{begin:"^[-\\*]{3,}",end:"$"},n,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}}},BrQc:function(e,t){e.exports=function(e){return{name:"Test Anything Protocol",case_insensitive:!0,contains:[e.HASH_COMMENT_MODE,{className:"meta",variants:[{begin:"^TAP version (\\d+)$"},{begin:"^1\\.\\.(\\d+)$"}]},{begin:"(s+)?---$",end:"\\.\\.\\.$",subLanguage:"yaml",relevance:0},{className:"number",begin:" (\\d+) "},{className:"symbol",variants:[{begin:"^ok"},{begin:"^not ok"}]}]}}},CgaS:function(e,t,n){"use strict";var a=n("xTJ+"),r=n("MLWZ"),i=n("9rSQ"),o=n("UnBK"),s=n("SntB");function l(e){this.defaults=e,this.interceptors={request:new i,response:new i}}l.prototype.request=function(e){"string"==typeof e?(e=arguments[1]||{}).url=arguments[0]:e=e||{},(e=s(this.defaults,e)).method?e.method=e.method.toLowerCase():this.defaults.method?e.method=this.defaults.method.toLowerCase():e.method="get";var t=[o,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach((function(e){t.unshift(e.fulfilled,e.rejected)})),this.interceptors.response.forEach((function(e){t.push(e.fulfilled,e.rejected)}));t.length;)n=n.then(t.shift(),t.shift());return n},l.prototype.getUri=function(e){return e=s(this.defaults,e),r(e.url,e.params,e.paramsSerializer).replace(/^\?/,"")},a.forEach(["delete","get","head","options"],(function(e){l.prototype[e]=function(t,n){return this.request(a.merge(n||{},{method:e,url:t}))}})),a.forEach(["post","put","patch"],(function(e){l.prototype[e]=function(t,n,r){return this.request(a.merge(r||{},{method:e,url:t,data:n}))}})),e.exports=l},CyL5:function(e,t){e.exports=function(e){var t={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",literal:"true false iota nil",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{name:"Go",aliases:["golang"],keywords:t,illegal:""),{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0}]}}},ECCn:function(e,t){function n(e){Object.freeze(e);var t="function"==typeof e;return Object.getOwnPropertyNames(e).forEach((function(a){!e.hasOwnProperty(a)||null===e[a]||"object"!=typeof e[a]&&"function"!=typeof e[a]||t&&("caller"===a||"callee"===a||"arguments"===a)||Object.isFrozen(e[a])||n(e[a])})),e}function a(e){return e.replace(/&/g,"&").replace(//g,">")}function r(e){var t,n={},a=Array.prototype.slice.call(arguments,1);for(t in e)n[t]=e[t];return a.forEach((function(e){for(t in e)n[t]=e[t]})),n}function i(e){return e.nodeName.toLowerCase()}var o=Object.freeze({__proto__:null,escapeHTML:a,inherit:r,nodeStream:function(e){var t=[];return function e(n,a){for(var r=n.firstChild;r;r=r.nextSibling)3===r.nodeType?a+=r.nodeValue.length:1===r.nodeType&&(t.push({event:"start",offset:a,node:r}),a=e(r,a),i(r).match(/br|hr|img|input/)||t.push({event:"stop",offset:a,node:r}));return a}(e,0),t},mergeStreams:function(e,t,n){var r=0,o="",s=[];function l(){return e.length&&t.length?e[0].offset!==t[0].offset?e[0].offset"}function _(e){o+=""}function d(e){("start"===e.event?c:_)(e.node)}for(;e.length||t.length;){var u=l();if(o+=a(n.substring(r,u[0].offset)),r=u[0].offset,u===e){s.reverse().forEach(_);do{d(u.splice(0,1)[0]),u=l()}while(u===e&&u.length&&u[0].offset===r);s.reverse().forEach(c)}else"start"===u[0].event?s.push(u[0].node):s.pop(),d(u.splice(0,1)[0])}return o+a(n.substr(r))}});const s=e=>!!e.kind;class l{constructor(e,t){this.buffer="",this.classPrefix=t.classPrefix,e.walk(this)}addText(e){this.buffer+=a(e)}openNode(e){if(!s(e))return;let t=e.kind;e.sublanguage||(t=`${this.classPrefix}${t}`),this.span(t)}closeNode(e){s(e)&&(this.buffer+="")}span(e){this.buffer+=``}value(){return this.buffer}}class c{constructor(){this.rootNode={children:[]},this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){let t={kind:e,children:[]};this.add(t),this.stack.push(t)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){return"string"==typeof t?e.addText(t):t.children&&(e.openNode(t),t.children.forEach(t=>this._walk(e,t)),e.closeNode(t)),e}static _collapse(e){e.children&&(e.children.every(e=>"string"==typeof e)?(e.text=e.children.join(""),delete e.children):e.children.forEach(e=>{"string"!=typeof e&&c._collapse(e)}))}}class _ extends c{constructor(e){super(),this.options=e}addKeyword(e,t){""!==e&&(this.openNode(t),this.addText(e),this.closeNode())}addText(e){""!==e&&this.add(e)}addSublanguage(e,t){let n=e.root;n.kind=t,n.sublanguage=!0,this.add(n)}toHTML(){return new l(this,this.options).value()}finalize(){}}function d(e){return e&&e.source||e}const u="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",p={begin:"\\\\[\\s\\S]",relevance:0},m={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[p]},E={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[p]},g={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},S=function(e,t,n){var a=r({className:"comment",begin:e,end:t,contains:[]},n||{});return a.contains.push(g),a.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|XXX):",relevance:0}),a},f=S("//","$"),T=S("/\\*","\\*/"),b=S("#","$"),C={className:"number",begin:"\\b\\d+(\\.\\d+)?",relevance:0},v={className:"number",begin:u,relevance:0},R={className:"number",begin:"\\b(0b[01]+)",relevance:0},N={className:"number",begin:"\\b\\d+(\\.\\d+)?(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},O={begin:/(?=\/[^\/\n]*\/)/,contains:[{className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[p,{begin:/\[/,end:/\]/,relevance:0,contains:[p]}]}]},h={className:"title",begin:"[a-zA-Z]\\w*",relevance:0},y={className:"title",begin:"[a-zA-Z_]\\w*",relevance:0},I={begin:"\\.\\s*[a-zA-Z_]\\w*",relevance:0};var A=Object.freeze({__proto__:null,IDENT_RE:"[a-zA-Z]\\w*",UNDERSCORE_IDENT_RE:"[a-zA-Z_]\\w*",NUMBER_RE:"\\b\\d+(\\.\\d+)?",C_NUMBER_RE:u,BINARY_NUMBER_RE:"\\b(0b[01]+)",RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",BACKSLASH_ESCAPE:p,APOS_STRING_MODE:m,QUOTE_STRING_MODE:E,PHRASAL_WORDS_MODE:g,COMMENT:S,C_LINE_COMMENT_MODE:f,C_BLOCK_COMMENT_MODE:T,HASH_COMMENT_MODE:b,NUMBER_MODE:C,C_NUMBER_MODE:v,BINARY_NUMBER_MODE:R,CSS_NUMBER_MODE:N,REGEXP_MODE:O,TITLE_MODE:h,UNDERSCORE_TITLE_MODE:y,METHOD_GUARD:I}),D="of and for in not or if then".split(" ");function x(e){function t(t,n){return new RegExp(d(t),"m"+(e.case_insensitive?"i":"")+(n?"g":""))}class n{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(e,t){t.position=this.position++,this.matchIndexes[this.matchAt]=t,this.regexes.push([t,e]),this.matchAt+=function(e){return new RegExp(e.toString()+"|").exec("").length-1}(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);let e=this.regexes.map(e=>e[1]);this.matcherRe=t(function(e,t){for(var n=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./,a=0,r="",i=0;i0&&(r+=t),r+="(";s.length>0;){var l=n.exec(s);if(null==l){r+=s;break}r+=s.substring(0,l.index),s=s.substring(l.index+l[0].length),"\\"==l[0][0]&&l[1]?r+="\\"+String(Number(l[1])+o):(r+=l[0],"("==l[0]&&a++)}r+=")"}return r}(e,"|"),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;let t=this.matcherRe.exec(e);if(!t)return null;let n=t.findIndex((e,t)=>t>0&&null!=e),a=this.matchIndexes[n];return Object.assign(t,a)}}class a{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];let t=new n;return this.rules.slice(e).forEach(([e,n])=>t.addRule(e,n)),t.compile(),this.multiRegexes[e]=t,t}considerAll(){this.regexIndex=0}addRule(e,t){this.rules.push([e,t]),"begin"===t.type&&this.count++}exec(e){let t=this.getMatcher(this.regexIndex);t.lastIndex=this.lastIndex;let n=t.exec(e);return n&&(this.regexIndex+=n.position+1,this.regexIndex===this.count&&(this.regexIndex=0)),n}}function i(e){let t=e.input[e.index-1],n=e.input[e.index+e[0].length];if("."===t||"."===n)return{ignoreMatch:!0}}if(e.contains&&e.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");!function n(o,s){o.compiled||(o.compiled=!0,o.__onBegin=null,o.keywords=o.keywords||o.beginKeywords,o.keywords&&(o.keywords=function(e,t){var n={};"string"==typeof e?a("keyword",e):Object.keys(e).forEach((function(t){a(t,e[t])}));return n;function a(e,a){t&&(a=a.toLowerCase()),a.split(" ").forEach((function(t){var a=t.split("|");n[a[0]]=[e,M(a[0],a[1])]}))}}(o.keywords,e.case_insensitive)),o.lexemesRe=t(o.lexemes||/\w+/,!0),s&&(o.beginKeywords&&(o.begin="\\b("+o.beginKeywords.split(" ").join("|")+")(?=\\b|\\s)",o.__onBegin=i),o.begin||(o.begin=/\B|\b/),o.beginRe=t(o.begin),o.endSameAsBegin&&(o.end=o.begin),o.end||o.endsWithParent||(o.end=/\B|\b/),o.end&&(o.endRe=t(o.end)),o.terminator_end=d(o.end)||"",o.endsWithParent&&s.terminator_end&&(o.terminator_end+=(o.end?"|":"")+s.terminator_end)),o.illegal&&(o.illegalRe=t(o.illegal)),null==o.relevance&&(o.relevance=1),o.contains||(o.contains=[]),o.contains=[].concat(...o.contains.map((function(e){return function(e){e.variants&&!e.cached_variants&&(e.cached_variants=e.variants.map((function(t){return r(e,{variants:null},t)})));return e.cached_variants?e.cached_variants:function e(t){return!!t&&(t.endsWithParent||e(t.starts))}(e)?r(e,{starts:e.starts?r(e.starts):null}):Object.isFrozen(e)?r(e):e}("self"===e?o:e)}))),o.contains.forEach((function(e){n(e,o)})),o.starts&&n(o.starts,s),o.matcher=function(e){let t=new a;return e.contains.forEach(e=>t.addRule(e.begin,{rule:e,type:"begin"})),e.terminator_end&&t.addRule(e.terminator_end,{type:"end"}),e.illegal&&t.addRule(e.illegal,{type:"illegal"}),t}(o))}(e)}function M(e,t){return t?Number(t):(n=e,D.includes(n.toLowerCase())?0:1);var n}const L=a,w=r,{nodeStream:P,mergeStreams:k}=o;var U=function(e){var t=[],a={},r={},i=[],o=!0,s=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,l="Could not find the language '{}', did you forget to load/include a language module?",c={noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0,__emitter:_};function d(e){return c.noHighlightRe.test(e)}function u(e,t,n,a){var r={code:t,language:e};C("before:highlight",r);var i=r.result?r.result:p(r.language,r.code,n,a);return i.code=r.code,C("after:highlight",i),i}function p(e,t,n,r){var i=t;function s(e,t){var n=f.case_insensitive?t[0].toLowerCase():t[0];return e.keywords.hasOwnProperty(n)&&e.keywords[n]}function _(){null!=C.subLanguage?function(){if(""!==h){var e="string"==typeof C.subLanguage;if(!e||a[C.subLanguage]){var t=e?p(C.subLanguage,h,!0,v[C.subLanguage]):m(h,C.subLanguage.length?C.subLanguage:void 0);C.relevance>0&&(y+=t.relevance),e&&(v[C.subLanguage]=t.top),R.addSublanguage(t.emitter,t.language)}else R.addText(h)}}():function(){var e,t,n,a;if(C.keywords){for(t=0,C.lexemesRe.lastIndex=0,n=C.lexemesRe.exec(h),a="";n;){a+=h.substring(t,n.index);var r=null;(e=s(C,n))?(R.addText(a),a="",y+=e[1],r=e[0],R.addKeyword(n[0],r)):a+=n[0],t=C.lexemesRe.lastIndex,n=C.lexemesRe.exec(h)}a+=h.substr(t),R.addText(a)}else R.addText(h)}(),h=""}function d(e){e.className&&R.openNode(e.className),C=Object.create(e,{parent:{value:C}})}function u(e){var t=e[0],n=e.rule;if(n.__onBegin){if((n.__onBegin(e)||{}).ignoreMatch)return function(e){return 0===C.matcher.regexIndex?(h+=e[0],1):(D=!0,0)}(t)}return n&&n.endSameAsBegin&&(n.endRe=new RegExp(t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")),n.skip?h+=t:(n.excludeBegin&&(h+=t),_(),n.returnBegin||n.excludeBegin||(h=t)),d(n),n.returnBegin?0:t.length}function E(e){var t=e[0],n=i.substr(e.index),a=function e(t,n){if(function(e,t){var n=e&&e.exec(t);return n&&0===n.index}(t.endRe,n)){for(;t.endsParent&&t.parent;)t=t.parent;return t}if(t.endsWithParent)return e(t.parent,n)}(C,n);if(a){var r=C;r.skip?h+=t:(r.returnEnd||r.excludeEnd||(h+=t),_(),r.excludeEnd&&(h=t));do{C.className&&R.closeNode(),C.skip||C.subLanguage||(y+=C.relevance),C=C.parent}while(C!==a.parent);return a.starts&&(a.endSameAsBegin&&(a.starts.endRe=a.endRe),d(a.starts)),r.returnEnd?0:t.length}}var g={};function S(t,a){var r,s=a&&a[0];if(h+=t,null==s)return _(),0;if("begin"==g.type&&"end"==a.type&&g.index==a.index&&""===s){if(h+=i.slice(a.index,a.index+1),!o)throw(r=new Error("0 width match regex")).languageName=e,r.badRule=g.rule,r;return 1}if(g=a,"begin"===a.type)return u(a);if("illegal"===a.type&&!n)throw(r=new Error('Illegal lexeme "'+s+'" for mode "'+(C.className||"")+'"')).mode=C,r;if("end"===a.type){var l=E(a);if(null!=l)return l}if("illegal"===a.type&&""===s)return 1;if(A>1e5&&A>3*a.index){throw new Error("potential infinite loop, way more iterations than matches")}return h+=s,s.length}var f=T(e);if(!f)throw console.error(l.replace("{}",e)),new Error('Unknown language: "'+e+'"');x(f);var b,C=r||f,v={},R=new c.__emitter(c);!function(){for(var e=[],t=C;t!==f;t=t.parent)t.className&&e.unshift(t.className);e.forEach(e=>R.openNode(e))}();var N,O,h="",y=0,I=0,A=0,D=!1;try{for(C.matcher.considerAll();A++,D?D=!1:(C.matcher.lastIndex=I,C.matcher.considerAll()),N=C.matcher.exec(i);){O=S(i.substring(I,N.index),N),I=N.index+O}return S(i.substr(I)),R.closeAllNodes(),R.finalize(),b=R.toHTML(),{relevance:y,value:b,language:e,illegal:!1,emitter:R,top:C}}catch(t){if(t.message&&t.message.includes("Illegal"))return{illegal:!0,illegalBy:{msg:t.message,context:i.slice(I-100,I+100),mode:t.mode},sofar:b,relevance:0,value:L(i),emitter:R};if(o)return{relevance:0,value:L(i),emitter:R,language:e,top:C,errorRaised:t};throw t}}function m(e,t){t=t||c.languages||Object.keys(a);var n=function(e){const t={relevance:0,emitter:new c.__emitter(c),value:L(e),illegal:!1,top:f};return t.emitter.addText(e),t}(e),r=n;return t.filter(T).filter(b).forEach((function(t){var a=p(t,e,!1);a.language=t,a.relevance>r.relevance&&(r=a),a.relevance>n.relevance&&(r=n,n=a)})),r.language&&(n.second_best=r),n}function E(e){return c.tabReplace||c.useBR?e.replace(s,(function(e,t){return c.useBR&&"\n"===e?"
":c.tabReplace?t.replace(/\t/g,c.tabReplace):""})):e}function g(e){var t,n,a,i,o,s=function(e){var t,n=e.className+" ";if(n+=e.parentNode?e.parentNode.className:"",t=c.languageDetectRe.exec(n)){var a=T(t[1]);return a||(console.warn(l.replace("{}",t[1])),console.warn("Falling back to no-highlight mode for this block.",e)),a?t[1]:"no-highlight"}return n.split(/\s+/).find(e=>d(e)||T(e))}(e);d(s)||(C("before:highlightBlock",{block:e,language:s}),c.useBR?(t=document.createElement("div")).innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n"):t=e,o=t.textContent,a=s?u(s,o,!0):m(o),(n=P(t)).length&&((i=document.createElement("div")).innerHTML=a.value,a.value=k(n,P(i),o)),a.value=E(a.value),C("after:highlightBlock",{block:e,result:a}),e.innerHTML=a.value,e.className=function(e,t,n){var a=t?r[t]:n,i=[e.trim()];return e.match(/\bhljs\b/)||i.push("hljs"),e.includes(a)||i.push(a),i.join(" ").trim()}(e.className,s,a.language),e.result={language:a.language,re:a.relevance},a.second_best&&(e.second_best={language:a.second_best.language,re:a.second_best.relevance}))}function S(){if(!S.called){S.called=!0;var e=document.querySelectorAll("pre code");t.forEach.call(e,g)}}const f={disableAutodetect:!0,name:"Plain text"};function T(e){return e=(e||"").toLowerCase(),a[e]||a[r[e]]}function b(e){var t=T(e);return t&&!t.disableAutodetect}function C(e,t){var n=e;i.forEach((function(e){e[n]&&e[n](t)}))}Object.assign(e,{highlight:u,highlightAuto:m,fixMarkup:E,highlightBlock:g,configure:function(e){c=w(c,e)},initHighlighting:S,initHighlightingOnLoad:function(){window.addEventListener("DOMContentLoaded",S,!1)},registerLanguage:function(t,n){var i;try{i=n(e)}catch(e){if(console.error("Language definition for '{}' could not be registered.".replace("{}",t)),!o)throw e;console.error(e),i=f}i.name||(i.name=t),a[t]=i,i.rawDefinition=n.bind(null,e),i.aliases&&i.aliases.forEach((function(e){r[e]=t}))},listLanguages:function(){return Object.keys(a)},getLanguage:T,requireLanguage:function(e){var t=T(e);if(t)return t;throw new Error("The '{}' language is required, but not loaded.".replace("{}",e))},autoDetection:b,inherit:w,addPlugin:function(e,t){i.push(e)}}),e.debugMode=function(){o=!1},e.safeMode=function(){o=!0},e.versionString="10.0.2";for(const e in A)"object"==typeof A[e]&&n(A[e]);return Object.assign(e,A),e}({});e.exports=U},EGmf:function(e,t){e.exports=function(e){return{name:"Awk",keywords:{keyword:"BEGIN END if else while do for in break continue delete next nextfile function func exit|10"},contains:[{className:"variable",variants:[{begin:/\$[\w\d#@][\w\d_]*/},{begin:/\$\{(.*?)}/}]},{className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/(u|b)?r?'''/,end:/'''/,relevance:10},{begin:/(u|b)?r?"""/,end:/"""/,relevance:10},{begin:/(u|r|ur)'/,end:/'/,relevance:10},{begin:/(u|r|ur)"/,end:/"/,relevance:10},{begin:/(b|br)'/,end:/'/},{begin:/(b|br)"/,end:/"/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},e.REGEXP_MODE,e.HASH_COMMENT_MODE,e.NUMBER_MODE]}}},FIf5:function(e,t,n){var a=n("ECCn");a.registerLanguage("1c",n("9xzc")),a.registerLanguage("abnf",n("tSgA")),a.registerLanguage("accesslog",n("mY11")),a.registerLanguage("actionscript",n("+fC4")),a.registerLanguage("ada",n("Aayt")),a.registerLanguage("angelscript",n("28xz")),a.registerLanguage("apache",n("8Kqh")),a.registerLanguage("applescript",n("e8E9")),a.registerLanguage("arcade",n("MF4s")),a.registerLanguage("c-like",n("r5rv")),a.registerLanguage("cpp",n("Agkw")),a.registerLanguage("arduino",n("lE5/")),a.registerLanguage("armasm",n("ozyK")),a.registerLanguage("xml",n("jctj")),a.registerLanguage("asciidoc",n("ApBa")),a.registerLanguage("aspectj",n("mBTZ")),a.registerLanguage("autohotkey",n("BIHe")),a.registerLanguage("autoit",n("75kF")),a.registerLanguage("avrasm",n("pvv5")),a.registerLanguage("awk",n("EGmf")),a.registerLanguage("axapta",n("qIW7")),a.registerLanguage("bash",n("8Pgg")),a.registerLanguage("basic",n("oVqn")),a.registerLanguage("bnf",n("ddo8")),a.registerLanguage("brainfuck",n("WSH0")),a.registerLanguage("c",n("H+UY")),a.registerLanguage("cal",n("d4EH")),a.registerLanguage("capnproto",n("Sl5E")),a.registerLanguage("ceylon",n("unZW")),a.registerLanguage("clean",n("Uasv")),a.registerLanguage("clojure",n("uIR8")),a.registerLanguage("clojure-repl",n("FJ32")),a.registerLanguage("cmake",n("6quq")),a.registerLanguage("coffeescript",n("qZUF")),a.registerLanguage("coq",n("gLO8")),a.registerLanguage("cos",n("gmEm")),a.registerLanguage("crmsh",n("yOV0")),a.registerLanguage("crystal",n("KUpP")),a.registerLanguage("csharp",n("mK8d")),a.registerLanguage("csp",n("QnJG")),a.registerLanguage("css",n("7oys")),a.registerLanguage("d",n("jW1C")),a.registerLanguage("markdown",n("BLBw")),a.registerLanguage("dart",n("fEaW")),a.registerLanguage("delphi",n("H4p3")),a.registerLanguage("diff",n("SLii")),a.registerLanguage("django",n("0kiY")),a.registerLanguage("dns",n("iobV")),a.registerLanguage("dockerfile",n("RLXu")),a.registerLanguage("dos",n("fP8y")),a.registerLanguage("dsconfig",n("uR4j")),a.registerLanguage("dts",n("sM9k")),a.registerLanguage("dust",n("9Nr/")),a.registerLanguage("ebnf",n("G01c")),a.registerLanguage("elixir",n("dycj")),a.registerLanguage("elm",n("UFGb")),a.registerLanguage("ruby",n("gst6")),a.registerLanguage("erb",n("E2cJ")),a.registerLanguage("erlang-repl",n("9JLW")),a.registerLanguage("erlang",n("s8Vx")),a.registerLanguage("excel",n("9c9R")),a.registerLanguage("fix",n("KyKy")),a.registerLanguage("flix",n("oU5B")),a.registerLanguage("fortran",n("SF9x")),a.registerLanguage("fsharp",n("AhXs")),a.registerLanguage("gams",n("fZ2E")),a.registerLanguage("gauss",n("rnof")),a.registerLanguage("gcode",n("lKKg")),a.registerLanguage("gherkin",n("NRrW")),a.registerLanguage("glsl",n("3wag")),a.registerLanguage("gml",n("5upZ")),a.registerLanguage("go",n("CyL5")),a.registerLanguage("golo",n("kZ3Q")),a.registerLanguage("gradle",n("lURu")),a.registerLanguage("groovy",n("H2RM")),a.registerLanguage("haml",n("T0rU")),a.registerLanguage("handlebars",n("5VxD")),a.registerLanguage("haskell",n("PziN")),a.registerLanguage("haxe",n("fHEK")),a.registerLanguage("hsp",n("wi1Z")),a.registerLanguage("htmlbars",n("ebWy")),a.registerLanguage("http",n("wB1n")),a.registerLanguage("hy",n("hmeD")),a.registerLanguage("inform7",n("Ll1m")),a.registerLanguage("ini",n("KpOm")),a.registerLanguage("irpf90",n("B05S")),a.registerLanguage("isbl",n("u0OR")),a.registerLanguage("java",n("My+Z")),a.registerLanguage("javascript",n("TdF3")),a.registerLanguage("jboss-cli",n("BKhn")),a.registerLanguage("json",n("WtIr")),a.registerLanguage("julia",n("ImXp")),a.registerLanguage("julia-repl",n("t6qC")),a.registerLanguage("kotlin",n("qUGr")),a.registerLanguage("lasso",n("Jb18")),a.registerLanguage("latex",n("FVXi")),a.registerLanguage("ldif",n("GgYO")),a.registerLanguage("leaf",n("LptB")),a.registerLanguage("less",n("GEZ5")),a.registerLanguage("lisp",n("mzJY")),a.registerLanguage("livecodeserver",n("G+vv")),a.registerLanguage("livescript",n("LhHj")),a.registerLanguage("llvm",n("fDA8")),a.registerLanguage("lsl",n("KK3C")),a.registerLanguage("lua",n("7P7d")),a.registerLanguage("makefile",n("el66")),a.registerLanguage("mathematica",n("73oX")),a.registerLanguage("matlab",n("jKVu")),a.registerLanguage("maxima",n("OZ3z")),a.registerLanguage("mel",n("u34i")),a.registerLanguage("mercury",n("JCUK")),a.registerLanguage("mipsasm",n("o0In")),a.registerLanguage("mizar",n("DxbC")),a.registerLanguage("perl",n("alHH")),a.registerLanguage("mojolicious",n("ZrqW")),a.registerLanguage("monkey",n("pxCe")),a.registerLanguage("moonscript",n("sbla")),a.registerLanguage("n1ql",n("9Mhc")),a.registerLanguage("nginx",n("9U8A")),a.registerLanguage("nim",n("hh0f")),a.registerLanguage("nix",n("Rq6a")),a.registerLanguage("nsis",n("syIQ")),a.registerLanguage("objectivec",n("m/If")),a.registerLanguage("ocaml",n("7mzT")),a.registerLanguage("openscad",n("AsRY")),a.registerLanguage("oxygene",n("beiO")),a.registerLanguage("parser3",n("NyhX")),a.registerLanguage("pf",n("dnrZ")),a.registerLanguage("pgsql",n("+FGM")),a.registerLanguage("php",n("KQfT")),a.registerLanguage("php-template",n("4Fr3")),a.registerLanguage("plaintext",n("ROUN")),a.registerLanguage("pony",n("ldBm")),a.registerLanguage("powershell",n("UI5O")),a.registerLanguage("processing",n("r7oX")),a.registerLanguage("profile",n("uQpx")),a.registerLanguage("prolog",n("Q5ZB")),a.registerLanguage("properties",n("VrLj")),a.registerLanguage("protobuf",n("Lo5G")),a.registerLanguage("puppet",n("UCcd")),a.registerLanguage("purebasic",n("GwJY")),a.registerLanguage("python",n("lRCX")),a.registerLanguage("python-repl",n("QWjE")),a.registerLanguage("q",n("Xfvt")),a.registerLanguage("qml",n("YSo5")),a.registerLanguage("r",n("Jrxr")),a.registerLanguage("reasonml",n("6ZBy")),a.registerLanguage("rib",n("D68y")),a.registerLanguage("roboconf",n("9Q8I")),a.registerLanguage("routeros",n("2Vkh")),a.registerLanguage("rsl",n("oKc0")),a.registerLanguage("ruleslanguage",n("irpp")),a.registerLanguage("rust",n("LOdI")),a.registerLanguage("sas",n("QPTg")),a.registerLanguage("scala",n("n3/M")),a.registerLanguage("scheme",n("QQjU")),a.registerLanguage("scilab",n("6k3J")),a.registerLanguage("scss",n("YROV")),a.registerLanguage("shell",n("tluB")),a.registerLanguage("smali",n("Gxxu")),a.registerLanguage("smalltalk",n("jU8F")),a.registerLanguage("sml",n("3EHr")),a.registerLanguage("sqf",n("4qfg")),a.registerLanguage("sql",n("3gkP")),a.registerLanguage("stan",n("iTGd")),a.registerLanguage("stata",n("1LUk")),a.registerLanguage("step21",n("AIHI")),a.registerLanguage("stylus",n("vYiF")),a.registerLanguage("subunit",n("Aqyh")),a.registerLanguage("swift",n("Kjk6")),a.registerLanguage("taggerscript",n("JGhL")),a.registerLanguage("yaml",n("Lns6")),a.registerLanguage("tap",n("BrQc")),a.registerLanguage("tcl",n("on2m")),a.registerLanguage("thrift",n("rfnV")),a.registerLanguage("tp",n("phP4")),a.registerLanguage("twig",n("9G73")),a.registerLanguage("typescript",n("r0Rl")),a.registerLanguage("vala",n("8SK+")),a.registerLanguage("vbnet",n("ieeH")),a.registerLanguage("vbscript",n("Wj43")),a.registerLanguage("vbscript-html",n("9Fqr")),a.registerLanguage("verilog",n("4Q+X")),a.registerLanguage("vhdl",n("MQ8/")),a.registerLanguage("vim",n("PGlF")),a.registerLanguage("x86asm",n("oVRe")),a.registerLanguage("xl",n("Jjkb")),a.registerLanguage("xquery",n("JopO")),a.registerLanguage("zephir",n("nwyE")),e.exports=a},FJ32:function(e,t){e.exports=function(e){return{name:"Clojure REPL",contains:[{className:"meta",begin:/^([\w.-]+|\s*#_)?=>/,starts:{end:/$/,subLanguage:"clojure"}}]}}},FVXi:function(e,t){e.exports=function(e){var t={className:"tag",begin:/\\/,relevance:0,contains:[{className:"name",variants:[{begin:/[a-zA-Z\u0430-\u044f\u0410-\u042f]+[*]?/},{begin:/[^a-zA-Z\u0430-\u044f\u0410-\u042f0-9]/}],starts:{endsWithParent:!0,relevance:0,contains:[{className:"string",variants:[{begin:/\[/,end:/\]/},{begin:/\{/,end:/\}/}]},{begin:/\s*=\s*/,endsWithParent:!0,relevance:0,contains:[{className:"number",begin:/-?\d*\.?\d+(pt|pc|mm|cm|in|dd|cc|ex|em)?/}]}]}}]};return{name:"LaTeX",aliases:["tex"],contains:[t,{className:"formula",contains:[t],relevance:0,variants:[{begin:/\$\$/,end:/\$\$/},{begin:/\$/,end:/\$/}]},e.COMMENT("%","$",{relevance:0})]}}},FdgN:function(e,t,n){window.Vue=n("XuX8"),Vue.component("file-info-modal",n("Gg4V").default);new Vue({el:"#app",data:function(){return{menuOpen:!1}},computed:{menuStyles:function(){return{hidden:!this.menuOpen}}},methods:{showFileInfo:function(e){this.$refs.fileInfoModal.show(e)},toggleMenuVisibility:function(){this.menuOpen=!this.menuOpen}},mounted:function(){var e=this;window.addEventListener("keyup",(function(t){return 191==t.keyCode&&e.$refs.searchInput.focus()}));var t=this.$refs.scrollToTop;window.addEventListener("scroll",(function(){window.scrollY>10?t.classList.remove("hidden"):t.classList.add("hidden")}))}});n("FIf5").initHighlightingOnLoad()},"G+vv":function(e,t){e.exports=function(e){var t={className:"variable",variants:[{begin:"\\b([gtps][A-Z]{1}[a-zA-Z0-9]*)(\\[.+\\])?(?:\\s*?)"},{begin:"\\$_[A-Z]+"}],relevance:0},n=[e.C_BLOCK_COMMENT_MODE,e.HASH_COMMENT_MODE,e.COMMENT("--","$"),e.COMMENT("[^:]//","$")],a=e.inherit(e.TITLE_MODE,{variants:[{begin:"\\b_*rig[A-Z]+[A-Za-z0-9_\\-]*"},{begin:"\\b_[a-z0-9\\-]+"}]}),r=e.inherit(e.TITLE_MODE,{begin:"\\b([A-Za-z0-9_\\-]+)\\b"});return{name:"LiveCode",case_insensitive:!1,keywords:{keyword:"$_COOKIE $_FILES $_GET $_GET_BINARY $_GET_RAW $_POST $_POST_BINARY $_POST_RAW $_SESSION $_SERVER codepoint codepoints segment segments codeunit codeunits sentence sentences trueWord trueWords paragraph after byte bytes english the until http forever descending using line real8 with seventh for stdout finally element word words fourth before black ninth sixth characters chars stderr uInt1 uInt1s uInt2 uInt2s stdin string lines relative rel any fifth items from middle mid at else of catch then third it file milliseconds seconds second secs sec int1 int1s int4 int4s internet int2 int2s normal text item last long detailed effective uInt4 uInt4s repeat end repeat URL in try into switch to words https token binfile each tenth as ticks tick system real4 by dateItems without char character ascending eighth whole dateTime numeric short first ftp integer abbreviated abbr abbrev private case while if div mod wrap and or bitAnd bitNot bitOr bitXor among not in a an within contains ends with begins the keys of keys",literal:"SIX TEN FORMFEED NINE ZERO NONE SPACE FOUR FALSE COLON CRLF PI COMMA ENDOFFILE EOF EIGHT FIVE QUOTE EMPTY ONE TRUE RETURN CR LINEFEED RIGHT BACKSLASH NULL SEVEN TAB THREE TWO six ten formfeed nine zero none space four false colon crlf pi comma endoffile eof eight five quote empty one true return cr linefeed right backslash null seven tab three two RIVERSION RISTATE FILE_READ_MODE FILE_WRITE_MODE FILE_WRITE_MODE DIR_WRITE_MODE FILE_READ_UMASK FILE_WRITE_UMASK DIR_READ_UMASK DIR_WRITE_UMASK",built_in:"put abs acos aliasReference annuity arrayDecode arrayEncode asin atan atan2 average avg avgDev base64Decode base64Encode baseConvert binaryDecode binaryEncode byteOffset byteToNum cachedURL cachedURLs charToNum cipherNames codepointOffset codepointProperty codepointToNum codeunitOffset commandNames compound compress constantNames cos date dateFormat decompress difference directories diskSpace DNSServers exp exp1 exp2 exp10 extents files flushEvents folders format functionNames geometricMean global globals hasMemory harmonicMean hostAddress hostAddressToName hostName hostNameToAddress isNumber ISOToMac itemOffset keys len length libURLErrorData libUrlFormData libURLftpCommand libURLLastHTTPHeaders libURLLastRHHeaders libUrlMultipartFormAddPart libUrlMultipartFormData libURLVersion lineOffset ln ln1 localNames log log2 log10 longFilePath lower macToISO matchChunk matchText matrixMultiply max md5Digest median merge messageAuthenticationCode messageDigest millisec millisecs millisecond milliseconds min monthNames nativeCharToNum normalizeText num number numToByte numToChar numToCodepoint numToNativeChar offset open openfiles openProcesses openProcessIDs openSockets paragraphOffset paramCount param params peerAddress pendingMessages platform popStdDev populationStandardDeviation populationVariance popVariance processID random randomBytes replaceText result revCreateXMLTree revCreateXMLTreeFromFile revCurrentRecord revCurrentRecordIsFirst revCurrentRecordIsLast revDatabaseColumnCount revDatabaseColumnIsNull revDatabaseColumnLengths revDatabaseColumnNames revDatabaseColumnNamed revDatabaseColumnNumbered revDatabaseColumnTypes revDatabaseConnectResult revDatabaseCursors revDatabaseID revDatabaseTableNames revDatabaseType revDataFromQuery revdb_closeCursor revdb_columnbynumber revdb_columncount revdb_columnisnull revdb_columnlengths revdb_columnnames revdb_columntypes revdb_commit revdb_connect revdb_connections revdb_connectionerr revdb_currentrecord revdb_cursorconnection revdb_cursorerr revdb_cursors revdb_dbtype revdb_disconnect revdb_execute revdb_iseof revdb_isbof revdb_movefirst revdb_movelast revdb_movenext revdb_moveprev revdb_query revdb_querylist revdb_recordcount revdb_rollback revdb_tablenames revGetDatabaseDriverPath revNumberOfRecords revOpenDatabase revOpenDatabases revQueryDatabase revQueryDatabaseBlob revQueryResult revQueryIsAtStart revQueryIsAtEnd revUnixFromMacPath revXMLAttribute revXMLAttributes revXMLAttributeValues revXMLChildContents revXMLChildNames revXMLCreateTreeFromFileWithNamespaces revXMLCreateTreeWithNamespaces revXMLDataFromXPathQuery revXMLEvaluateXPath revXMLFirstChild revXMLMatchingNode revXMLNextSibling revXMLNodeContents revXMLNumberOfChildren revXMLParent revXMLPreviousSibling revXMLRootNode revXMLRPC_CreateRequest revXMLRPC_Documents revXMLRPC_Error revXMLRPC_GetHost revXMLRPC_GetMethod revXMLRPC_GetParam revXMLText revXMLRPC_Execute revXMLRPC_GetParamCount revXMLRPC_GetParamNode revXMLRPC_GetParamType revXMLRPC_GetPath revXMLRPC_GetPort revXMLRPC_GetProtocol revXMLRPC_GetRequest revXMLRPC_GetResponse revXMLRPC_GetSocket revXMLTree revXMLTrees revXMLValidateDTD revZipDescribeItem revZipEnumerateItems revZipOpenArchives round sampVariance sec secs seconds sentenceOffset sha1Digest shell shortFilePath sin specialFolderPath sqrt standardDeviation statRound stdDev sum sysError systemVersion tan tempName textDecode textEncode tick ticks time to tokenOffset toLower toUpper transpose truewordOffset trunc uniDecode uniEncode upper URLDecode URLEncode URLStatus uuid value variableNames variance version waitDepth weekdayNames wordOffset xsltApplyStylesheet xsltApplyStylesheetFromFile xsltLoadStylesheet xsltLoadStylesheetFromFile add breakpoint cancel clear local variable file word line folder directory URL close socket process combine constant convert create new alias folder directory decrypt delete variable word line folder directory URL dispatch divide do encrypt filter get include intersect kill libURLDownloadToFile libURLFollowHttpRedirects libURLftpUpload libURLftpUploadFile libURLresetAll libUrlSetAuthCallback libURLSetDriver libURLSetCustomHTTPHeaders libUrlSetExpect100 libURLSetFTPListCommand libURLSetFTPMode libURLSetFTPStopTime libURLSetStatusCallback load extension loadedExtensions multiply socket prepare process post seek rel relative read from process rename replace require resetAll resolve revAddXMLNode revAppendXML revCloseCursor revCloseDatabase revCommitDatabase revCopyFile revCopyFolder revCopyXMLNode revDeleteFolder revDeleteXMLNode revDeleteAllXMLTrees revDeleteXMLTree revExecuteSQL revGoURL revInsertXMLNode revMoveFolder revMoveToFirstRecord revMoveToLastRecord revMoveToNextRecord revMoveToPreviousRecord revMoveToRecord revMoveXMLNode revPutIntoXMLNode revRollBackDatabase revSetDatabaseDriverPath revSetXMLAttribute revXMLRPC_AddParam revXMLRPC_DeleteAllDocuments revXMLAddDTD revXMLRPC_Free revXMLRPC_FreeAll revXMLRPC_DeleteDocument revXMLRPC_DeleteParam revXMLRPC_SetHost revXMLRPC_SetMethod revXMLRPC_SetPort revXMLRPC_SetProtocol revXMLRPC_SetSocket revZipAddItemWithData revZipAddItemWithFile revZipAddUncompressedItemWithData revZipAddUncompressedItemWithFile revZipCancel revZipCloseArchive revZipDeleteItem revZipExtractItemToFile revZipExtractItemToVariable revZipSetProgressCallback revZipRenameItem revZipReplaceItemWithData revZipReplaceItemWithFile revZipOpenArchive send set sort split start stop subtract symmetric union unload vectorDotProduct wait write"},contains:[t,{className:"keyword",begin:"\\bend\\sif\\b"},{className:"function",beginKeywords:"function",end:"$",contains:[t,r,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE,a]},{className:"function",begin:"\\bend\\s+",end:"$",keywords:"end",contains:[r,a],relevance:0},{beginKeywords:"command on",end:"$",contains:[t,r,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE,a]},{className:"meta",variants:[{begin:"<\\?(rev|lc|livecode)",relevance:10},{begin:"<\\?"},{begin:"\\?>"}]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE,a].concat(n),illegal:";$|^\\[|^=|&|{"}}},G01c:function(e,t){e.exports=function(e){var t=e.COMMENT(/\(\*/,/\*\)/);return{name:"Extended Backus-Naur Form",illegal:/\S/,contains:[t,{className:"attribute",begin:/^[ ]*[a-zA-Z][a-zA-Z-_]*([\s-_]+[a-zA-Z][a-zA-Z]*)*/},{begin:/=/,end:/[.;]/,contains:[t,{className:"meta",begin:/\?.*\?/},{className:"string",variants:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{begin:"`",end:"`"}]}]}]}}},GEZ5:function(e,t){e.exports=function(e){var t=[],n=[],a=function(e){return{className:"string",begin:"~?"+e+".*?"+e}},r=function(e,t,n){return{className:e,begin:t,relevance:n}},i={begin:"\\(",end:"\\)",contains:n,relevance:0};n.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a("'"),a('"'),e.CSS_NUMBER_MODE,{begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",excludeEnd:!0}},r("number","#[0-9A-Fa-f]+\\b"),i,r("variable","@@?[\\w-]+",10),r("variable","@{[\\w-]+}"),r("built_in","~?`[^`]*?`"),{className:"attribute",begin:"[\\w-]+\\s*:",end:":",returnBegin:!0,excludeEnd:!0},{className:"meta",begin:"!important"});var o=n.concat({begin:"{",end:"}",contains:t}),s={beginKeywords:"when",endsWithParent:!0,contains:[{beginKeywords:"and not"}].concat(n)},l={begin:"([\\w-]+|@{[\\w-]+})\\s*:",returnBegin:!0,end:"[;}]",relevance:0,contains:[{className:"attribute",begin:"([\\w-]+|@{[\\w-]+})",end:":",excludeEnd:!0,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:n}}]},c={className:"keyword",begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{end:"[;{}]",returnEnd:!0,contains:n,relevance:0}},_={className:"variable",variants:[{begin:"@[\\w-]+\\s*:",relevance:15},{begin:"@[\\w-]+"}],starts:{end:"[;}]",returnEnd:!0,contains:o}},d={variants:[{begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:"([\\w-]+|@{[\\w-]+})",end:"{"}],returnBegin:!0,returnEnd:!0,illegal:"[<='$\"]",relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s,r("keyword","all\\b"),r("variable","@{[\\w-]+}"),r("selector-tag","([\\w-]+|@{[\\w-]+})%?",0),r("selector-id","#([\\w-]+|@{[\\w-]+})"),r("selector-class","\\.([\\w-]+|@{[\\w-]+})",0),r("selector-tag","&",0),{className:"selector-attr",begin:"\\[",end:"\\]"},{className:"selector-pseudo",begin:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{begin:"\\(",end:"\\)",contains:o},{begin:"!important"}]};return t.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,c,_,l,d),{name:"Less",case_insensitive:!0,illegal:"[=>'/<($\"]",contains:t}}},Gg4V:function(e,t,n){"use strict";n.r(t);var a=n("o0o1"),r=n.n(a);function i(e,t,n,a,r,i,o){try{var s=e[i](o),l=s.value}catch(e){return void n(e)}s.done?t(l):Promise.resolve(l).then(a,r)}var o=n("vDqi").default;var s=function(e,t,n,a,r,i,o,s){var l,c="function"==typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),a&&(c.functional=!0),i&&(c._scopeId="data-v-"+i),o?(l=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(o)},c._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(c.functional){c._injectStyles=l;var _=c.render;c.render=function(e,t){return l.call(t),_(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}({data:function(){return{error:null,filePath:"file-info.txt",hashes:{md5:"••••••••••••••••••••••••••••••••",sha1:"••••••••••••••••••••••••••••••••••••••••",sha256:"••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••"},loading:!0,visible:!1}},computed:{styles:function(){return{hidden:!this.visible}},title:function(){return this.filePath.split("/").pop()}},methods:{show:function(e){var t,n=this;return(t=r.a.mark((function t(){return r.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n.filePath=e,n.visible=!0,t.next=4,o.get("?info="+e).then(function(e){this.hashes=e.data.hashes}.bind(n)).catch(function(e){this.error=e.response.request.statusText}.bind(n));case 4:n.loading=!1;case 5:case"end":return t.stop()}}),t)})),function(){var e=this,n=arguments;return new Promise((function(a,r){var o=t.apply(e,n);function s(e){i(o,a,r,s,l,"next",e)}function l(e){i(o,a,r,s,l,"throw",e)}s(void 0)}))})()},hide:function(){this.visible=!1,this.loading=!0,this.error=null}},mounted:function(){var e=this;window.addEventListener("keyup",(function(t){return 27==t.keyCode&&e.hide()}))}},(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"fixed top-0 flex justify-center items-center w-screen h-screen p-4 z-50",class:this.styles,staticStyle:{"background-color":"hsla(218, 23%, 23%, 0.5)"},attrs:{id:"file-info-modal"},on:{click:function(t){return t.target!==t.currentTarget?null:e.hide()}}},[n("div",{directives:[{name:"show",rawName:"v-show",value:!e.loading,expression:"! loading"}],staticClass:"transition duration-500 ease-in-out bg-white rounded-lg shadow-lg overflow-hidden",attrs:{id:"file-info-dialogue"}},[n("header",{staticClass:"flex justify-between items-center bg-blue-600 p-4"},[n("i",{staticClass:"fas fa-info-circle fa-lg text-white"}),e._v(" "),n("div",{staticClass:"items-center text-xl text-white font-mono mx-4"},[e._v("\n "+e._s(e.title)+"\n ")]),e._v(" "),n("button",{staticClass:"flex justify-center items-center rounded-full w-6 h-6 text-blue-900 text-sm hover:bg-red-700 hover:text-white hover:shadow",on:{click:function(t){return e.hide()}}},[n("i",{staticClass:"fas fa-times"})])]),e._v(" "),n("content",{staticClass:"flex justify-center items-center p-4"},[n("div",{staticClass:"overflow-x-auto"},[e.error?n("p",{staticClass:"font-thin text-2xl text-gray-600 m-4"},[e._v("\n "+e._s(e.error)+"\n ")]):n("table",{staticClass:"table-auto"},[n("tbody",e._l(this.hashes,(function(t,a){return n("tr",{key:t},[n("td",{staticClass:"border font-bold px-4 py-2"},[e._v(e._s(a))]),e._v(" "),n("td",{staticClass:"border font-mono px-4 py-2"},[e._v(e._s(t))])])})),0)])])])]),e._v(" "),n("i",{directives:[{name:"show",rawName:"v-show",value:e.loading,expression:"loading"}],staticClass:"fas fa-spinner fa-pulse fa-5x text-white"})])}),[],!1,null,null,null);t.default=s.exports},GgYO:function(e,t){e.exports=function(e){return{name:"LDIF",contains:[{className:"attribute",begin:"^dn",end:": ",excludeEnd:!0,starts:{end:"$",relevance:0},relevance:10},{className:"attribute",begin:"^\\w",end:": ",excludeEnd:!0,starts:{end:"$",relevance:0}},{className:"literal",begin:"^-",end:"$"},e.HASH_COMMENT_MODE]}}},GwJY:function(e,t){e.exports=function(e){return{name:"PureBASIC",aliases:["pb","pbi"],keywords:"Align And Array As Break CallDebugger Case CompilerCase CompilerDefault CompilerElse CompilerElseIf CompilerEndIf CompilerEndSelect CompilerError CompilerIf CompilerSelect CompilerWarning Continue Data DataSection Debug DebugLevel Declare DeclareC DeclareCDLL DeclareDLL DeclareModule Default Define Dim DisableASM DisableDebugger DisableExplicit Else ElseIf EnableASM EnableDebugger EnableExplicit End EndDataSection EndDeclareModule EndEnumeration EndIf EndImport EndInterface EndMacro EndModule EndProcedure EndSelect EndStructure EndStructureUnion EndWith Enumeration EnumerationBinary Extends FakeReturn For ForEach ForEver Global Gosub Goto If Import ImportC IncludeBinary IncludeFile IncludePath Interface List Macro MacroExpandedCount Map Module NewList NewMap Next Not Or Procedure ProcedureC ProcedureCDLL ProcedureDLL ProcedureReturn Protected Prototype PrototypeC ReDim Read Repeat Restore Return Runtime Select Shared Static Step Structure StructureUnion Swap Threaded To UndefineMacro Until Until UnuseModule UseModule Wend While With XIncludeFile XOr",contains:[e.COMMENT(";","$",{relevance:0}),{className:"function",begin:"\\b(Procedure|Declare)(C|CDLL|DLL)?\\b",end:"\\(",excludeEnd:!0,returnBegin:!0,contains:[{className:"keyword",begin:"(Procedure|Declare)(C|CDLL|DLL)?",excludeEnd:!0},{className:"type",begin:"\\.\\w*"},e.UNDERSCORE_TITLE_MODE]},{className:"string",begin:'(~)?"',end:'"',illegal:"\\n"},{className:"symbol",begin:"#[a-zA-Z_]\\w*\\$?"}]}}},Gxxu:function(e,t){e.exports=function(e){var t=["add","and","cmp","cmpg","cmpl","const","div","double","float","goto","if","int","long","move","mul","neg","new","nop","not","or","rem","return","shl","shr","sput","sub","throw","ushr","xor"];return{name:"Smali",aliases:["smali"],contains:[{className:"string",begin:'"',end:'"',relevance:0},e.COMMENT("#","$",{relevance:0}),{className:"keyword",variants:[{begin:"\\s*\\.end\\s[a-zA-Z0-9]*"},{begin:"^[ ]*\\.[a-zA-Z]*",relevance:0},{begin:"\\s:[a-zA-Z_0-9]*",relevance:0},{begin:"\\s("+["transient","constructor","abstract","final","synthetic","public","private","protected","static","bridge","system"].join("|")+")"}]},{className:"built_in",variants:[{begin:"\\s("+t.join("|")+")\\s"},{begin:"\\s("+t.join("|")+")((\\-|/)[a-zA-Z0-9]+)+\\s",relevance:10},{begin:"\\s("+["aget","aput","array","check","execute","fill","filled","goto/16","goto/32","iget","instance","invoke","iput","monitor","packed","sget","sparse"].join("|")+")((\\-|/)[a-zA-Z0-9]+)*\\s",relevance:10}]},{className:"class",begin:"L[^(;:\n]*;",relevance:0},{begin:"[vp][0-9]+"}]}}},"H+UY":function(e,t){e.exports=function(e){var t=e.getLanguage("c-like").rawDefinition();return t.name="C",t.aliases=["c","h"],t}},H2RM:function(e,t){e.exports=function(e){return{name:"Groovy",keywords:{literal:"true false null",keyword:"byte short char int long boolean float double void def as in assert trait super this abstract static volatile transient public private protected synchronized final class interface enum if else for while switch case break default continue throw throws try catch finally implements extends new import package return instanceof"},contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"string",begin:'"""',end:'"""'},{className:"string",begin:"'''",end:"'''"},{className:"string",begin:"\\$/",end:"/\\$",relevance:10},e.APOS_STRING_MODE,{className:"regexp",begin:/~?\/[^\/\n]+\//,contains:[e.BACKSLASH_ESCAPE]},e.QUOTE_STRING_MODE,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:"\n"},e.BINARY_NUMBER_MODE,{className:"class",beginKeywords:"class interface trait enum",end:"{",illegal:":",contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},e.C_NUMBER_MODE,{className:"meta",begin:"@[A-Za-z]+"},{className:"string",begin:/[^\?]{0}[A-Za-z0-9_$]+ *:/},{begin:/\?/,end:/\:/},{className:"symbol",begin:"^\\s*[A-Za-z0-9_$]+:",relevance:0}],illegal:/#|<\//}}},H4p3:function(e,t){e.exports=function(e){var t="exports register file shl array record property for mod while set ally label uses raise not stored class safecall var interface or private static exit index inherited to else stdcall override shr asm far resourcestring finalization packed virtual out and protected library do xorwrite goto near function end div overload object unit begin string on inline repeat until destructor write message program with read initialization except default nil if case cdecl in downto threadvar of try pascal const external constructor type public then implementation finally published procedure absolute reintroduce operator as is abstract alias assembler bitpacked break continue cppdecl cvar enumerator experimental platform deprecated unimplemented dynamic export far16 forward generic helper implements interrupt iochecks local name nodefault noreturn nostackframe oldfpccall otherwise saveregisters softfloat specialize strict unaligned varargs ",n=[e.C_LINE_COMMENT_MODE,e.COMMENT(/\{/,/\}/,{relevance:0}),e.COMMENT(/\(\*/,/\*\)/,{relevance:10})],a={className:"meta",variants:[{begin:/\{\$/,end:/\}/},{begin:/\(\*\$/,end:/\*\)/}]},r={className:"string",begin:/'/,end:/'/,contains:[{begin:/''/}]},i={className:"string",begin:/(#\d+)+/},o={begin:e.IDENT_RE+"\\s*=\\s*class\\s*\\(",returnBegin:!0,contains:[e.TITLE_MODE]},s={className:"function",beginKeywords:"function constructor destructor procedure",end:/[:;]/,keywords:"function constructor|10 destructor|10 procedure|10",contains:[e.TITLE_MODE,{className:"params",begin:/\(/,end:/\)/,keywords:t,contains:[r,i,a].concat(n)},a].concat(n)};return{name:"Delphi",aliases:["dpr","dfm","pas","pascal","freepascal","lazarus","lpr","lfm"],case_insensitive:!0,keywords:t,illegal:/"|\$[G-Zg-z]|\/\*|<\/|\|/,contains:[r,i,e.NUMBER_MODE,{className:"number",relevance:0,variants:[{begin:"\\$[0-9A-Fa-f]+"},{begin:"&[0-7]+"},{begin:"%[01]+"}]},o,s,a].concat(n)}}},HSsa:function(e,t,n){"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),a=0;a=0&&Math.floor(t)===t&&isFinite(e)}function u(e){return i(e)&&"function"==typeof e.then&&"function"==typeof e.catch}function p(e){return null==e?"":Array.isArray(e)||_(e)&&e.toString===c?JSON.stringify(e,null,2):String(e)}function m(e){var t=parseFloat(e);return isNaN(t)?e:t}function E(e,t){for(var n=Object.create(null),a=e.split(","),r=0;r-1)return e.splice(n,1)}}var T=Object.prototype.hasOwnProperty;function b(e,t){return T.call(e,t)}function C(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}var v=/-(\w)/g,R=C((function(e){return e.replace(v,(function(e,t){return t?t.toUpperCase():""}))})),N=C((function(e){return e.charAt(0).toUpperCase()+e.slice(1)})),O=/\B([A-Z])/g,h=C((function(e){return e.replace(O,"-$1").toLowerCase()})),y=Function.prototype.bind?function(e,t){return e.bind(t)}:function(e,t){function n(n){var a=arguments.length;return a?a>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n};function I(e,t){t=t||0;for(var n=e.length-t,a=new Array(n);n--;)a[n]=e[n+t];return a}function A(e,t){for(var n in t)e[n]=t[n];return e}function D(e){for(var t={},n=0;n0,Z=K&&K.indexOf("edge/")>0,J=(K&&K.indexOf("android"),K&&/iphone|ipad|ipod|ios/.test(K)||"ios"===Q),ee=(K&&/chrome\/\d+/.test(K),K&&/phantomjs/.test(K),K&&K.match(/firefox\/(\d+)/)),te={}.watch,ne=!1;if(z)try{var ae={};Object.defineProperty(ae,"passive",{get:function(){ne=!0}}),window.addEventListener("test-passive",null,ae)}catch(a){}var re=function(){return void 0===V&&(V=!z&&!W&&void 0!==t&&t.process&&"server"===t.process.env.VUE_ENV),V},ie=z&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function oe(e){return"function"==typeof e&&/native code/.test(e.toString())}var se,le="undefined"!=typeof Symbol&&oe(Symbol)&&"undefined"!=typeof Reflect&&oe(Reflect.ownKeys);se="undefined"!=typeof Set&&oe(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var ce=x,_e=0,de=function(){this.id=_e++,this.subs=[]};de.prototype.addSub=function(e){this.subs.push(e)},de.prototype.removeSub=function(e){f(this.subs,e)},de.prototype.depend=function(){de.target&&de.target.addDep(this)},de.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t-1)if(i&&!b(r,"default"))o=!1;else if(""===o||o===h(e)){var l=Ye(String,r.type);(l<0||s0&&(_t((l=e(l,(n||"")+"_"+a))[0])&&_t(_)&&(d[c]=fe(_.text+l[0].text),l.shift()),d.push.apply(d,l)):s(l)?_t(_)?d[c]=fe(_.text+l):""!==l&&d.push(fe(l)):_t(l)&&_t(_)?d[c]=fe(_.text+l.text):(o(t._isVList)&&i(l.tag)&&r(l.key)&&i(n)&&(l.key="__vlist"+n+"_"+a+"__"),d.push(l)));return d}(e):void 0}function _t(e){return i(e)&&i(e.text)&&!1===e.isComment}function dt(e,t){if(e){for(var n=Object.create(null),a=le?Reflect.ownKeys(e):Object.keys(e),r=0;r0,o=e?!!e.$stable:!i,s=e&&e.$key;if(e){if(e._normalized)return e._normalized;if(o&&n&&n!==a&&s===n.$key&&!i&&!n.$hasNormal)return n;for(var l in r={},e)e[l]&&"$"!==l[0]&&(r[l]=Et(t,l,e[l]))}else r={};for(var c in t)c in r||(r[c]=gt(t,c));return e&&Object.isExtensible(e)&&(e._normalized=r),H(r,"$stable",o),H(r,"$key",s),H(r,"$hasNormal",i),r}function Et(e,t,n){var a=function(){var e=arguments.length?n.apply(null,arguments):n({});return(e=e&&"object"==typeof e&&!Array.isArray(e)?[e]:ct(e))&&(0===e.length||1===e.length&&e[0].isComment)?void 0:e};return n.proxy&&Object.defineProperty(e,t,{get:a,enumerable:!0,configurable:!0}),a}function gt(e,t){return function(){return e[t]}}function St(e,t){var n,a,r,o,s;if(Array.isArray(e)||"string"==typeof e)for(n=new Array(e.length),a=0,r=e.length;adocument.createEvent("Event").timeStamp&&(ln=function(){return cn.now()})}function _n(){var e,t;for(sn=ln(),rn=!0,en.sort((function(e,t){return e.id-t.id})),on=0;onon&&en[n].id>e.id;)n--;en.splice(n+1,0,e)}else en.push(e);an||(an=!0,tt(_n))}}(this)},un.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||l(e)||this.deep){var t=this.value;if(this.value=e,this.user)try{this.cb.call(this.vm,e,t)}catch(e){He(e,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,e,t)}}},un.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},un.prototype.depend=function(){for(var e=this.deps.length;e--;)this.deps[e].depend()},un.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||f(this.vm._watchers,this);for(var e=this.deps.length;e--;)this.deps[e].removeSub(this);this.active=!1}};var pn={enumerable:!0,configurable:!0,get:x,set:x};function mn(e,t,n){pn.get=function(){return this[t][n]},pn.set=function(e){this[t][n]=e},Object.defineProperty(e,n,pn)}var En={lazy:!0};function gn(e,t,n){var a=!re();"function"==typeof n?(pn.get=a?Sn(t):fn(n),pn.set=x):(pn.get=n.get?a&&!1!==n.cache?Sn(t):fn(n.get):x,pn.set=n.set||x),Object.defineProperty(e,t,pn)}function Sn(e){return function(){var t=this._computedWatchers&&this._computedWatchers[e];if(t)return t.dirty&&t.evaluate(),de.target&&t.depend(),t.value}}function fn(e){return function(){return e.call(this,this)}}function Tn(e,t,n,a){return _(n)&&(a=n,n=n.handler),"string"==typeof n&&(n=e[n]),e.$watch(t,n,a)}var bn=0;function Cn(e){var t=e.options;if(e.super){var n=Cn(e.super);if(n!==e.superOptions){e.superOptions=n;var a=function(e){var t,n=e.options,a=e.sealedOptions;for(var r in n)n[r]!==a[r]&&(t||(t={}),t[r]=n[r]);return t}(e);a&&A(e.extendOptions,a),(t=e.options=ke(n,e.extendOptions)).name&&(t.components[t.name]=e)}}return t}function vn(e){this._init(e)}function Rn(e){return e&&(e.Ctor.options.name||e.tag)}function Nn(e,t){return Array.isArray(e)?e.indexOf(t)>-1:"string"==typeof e?e.split(",").indexOf(t)>-1:(n=e,"[object RegExp]"===c.call(n)&&e.test(t));var n}function On(e,t){var n=e.cache,a=e.keys,r=e._vnode;for(var i in n){var o=n[i];if(o){var s=Rn(o.componentOptions);s&&!t(s)&&hn(n,i,a,r)}}}function hn(e,t,n,a){var r=e[t];!r||a&&r.tag===a.tag||r.componentInstance.$destroy(),e[t]=null,f(n,t)}!function(e){e.prototype._init=function(e){var t=this;t._uid=bn++,t._isVue=!0,e&&e._isComponent?function(e,t){var n=e.$options=Object.create(e.constructor.options),a=t._parentVnode;n.parent=t.parent,n._parentVnode=a;var r=a.componentOptions;n.propsData=r.propsData,n._parentListeners=r.listeners,n._renderChildren=r.children,n._componentTag=r.tag,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}(t,e):t.$options=ke(Cn(t.constructor),e||{},t),t._renderProxy=t,t._self=t,function(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}(t),function(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&Qt(e,t)}(t),function(e){e._vnode=null,e._staticTrees=null;var t=e.$options,n=e.$vnode=t._parentVnode,r=n&&n.context;e.$slots=ut(t._renderChildren,r),e.$scopedSlots=a,e._c=function(t,n,a,r){return Bt(e,t,n,a,r,!1)},e.$createElement=function(t,n,a,r){return Bt(e,t,n,a,r,!0)};var i=n&&n.data;ye(e,"$attrs",i&&i.attrs||a,null,!0),ye(e,"$listeners",t._parentListeners||a,null,!0)}(t),Jt(t,"beforeCreate"),function(e){var t=dt(e.$options.inject,e);t&&(Ne(!1),Object.keys(t).forEach((function(n){ye(e,n,t[n])})),Ne(!0))}(t),function(e){e._watchers=[];var t=e.$options;t.props&&function(e,t){var n=e.$options.propsData||{},a=e._props={},r=e.$options._propKeys=[];e.$parent&&Ne(!1);var i=function(i){r.push(i);var o=Fe(i,t,n,e);ye(a,i,o),i in e||mn(e,"_props",i)};for(var o in t)i(o);Ne(!0)}(e,t.props),t.methods&&function(e,t){for(var n in e.$options.props,t)e[n]="function"!=typeof t[n]?x:y(t[n],e)}(e,t.methods),t.data?function(e){var t=e.$options.data;_(t=e._data="function"==typeof t?function(e,t){pe();try{return e.call(t,t)}catch(e){return He(e,t,"data()"),{}}finally{me()}}(t,e):t||{})||(t={});for(var n,a=Object.keys(t),r=e.$options.props,i=(e.$options.methods,a.length);i--;){var o=a[i];r&&b(r,o)||(void 0,36!==(n=(o+"").charCodeAt(0))&&95!==n&&mn(e,"_data",o))}he(t,!0)}(e):he(e._data={},!0),t.computed&&function(e,t){var n=e._computedWatchers=Object.create(null),a=re();for(var r in t){var i=t[r],o="function"==typeof i?i:i.get;a||(n[r]=new un(e,o||x,x,En)),r in e||gn(e,r,i)}}(e,t.computed),t.watch&&t.watch!==te&&function(e,t){for(var n in t){var a=t[n];if(Array.isArray(a))for(var r=0;r1?I(t):t;for(var n=I(arguments,1),a='event handler for "'+e+'"',r=0,i=t.length;rparseInt(this.max)&&hn(o,s[0],s,this._vnode)),t.data.keepAlive=!0}return t||e&&e[0]}}};!function(e){var t={get:function(){return G}};Object.defineProperty(e,"config",t),e.util={warn:ce,extend:A,mergeOptions:ke,defineReactive:ye},e.set=Ie,e.delete=Ae,e.nextTick=tt,e.observable=function(e){return he(e),e},e.options=Object.create(null),F.forEach((function(t){e.options[t+"s"]=Object.create(null)})),e.options._base=e,A(e.options.components,In),function(e){e.use=function(e){var t=this._installedPlugins||(this._installedPlugins=[]);if(t.indexOf(e)>-1)return this;var n=I(arguments,1);return n.unshift(this),"function"==typeof e.install?e.install.apply(e,n):"function"==typeof e&&e.apply(null,n),t.push(e),this}}(e),function(e){e.mixin=function(e){return this.options=ke(this.options,e),this}}(e),function(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,a=n.cid,r=e._Ctor||(e._Ctor={});if(r[a])return r[a];var i=e.name||n.options.name,o=function(e){this._init(e)};return(o.prototype=Object.create(n.prototype)).constructor=o,o.cid=t++,o.options=ke(n.options,e),o.super=n,o.options.props&&function(e){var t=e.options.props;for(var n in t)mn(e.prototype,"_props",n)}(o),o.options.computed&&function(e){var t=e.options.computed;for(var n in t)gn(e.prototype,n,t[n])}(o),o.extend=n.extend,o.mixin=n.mixin,o.use=n.use,F.forEach((function(e){o[e]=n[e]})),i&&(o.options.components[i]=o),o.superOptions=n.options,o.extendOptions=e,o.sealedOptions=A({},o.options),r[a]=o,o}}(e),function(e){F.forEach((function(t){e[t]=function(e,n){return n?("component"===t&&_(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&"function"==typeof n&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}}))}(e)}(vn),Object.defineProperty(vn.prototype,"$isServer",{get:re}),Object.defineProperty(vn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(vn,"FunctionalRenderContext",{value:Mt}),vn.version="2.6.11";var An=E("style,class"),Dn=E("input,textarea,option,select,progress"),xn=function(e,t,n){return"value"===n&&Dn(e)&&"button"!==t||"selected"===n&&"option"===e||"checked"===n&&"input"===e||"muted"===n&&"video"===e},Mn=E("contenteditable,draggable,spellcheck"),Ln=E("events,caret,typing,plaintext-only"),wn=E("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),Pn="http://www.w3.org/1999/xlink",kn=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},Un=function(e){return kn(e)?e.slice(6,e.length):""},Fn=function(e){return null==e||!1===e};function Bn(e,t){return{staticClass:Gn(e.staticClass,t.staticClass),class:i(e.class)?[e.class,t.class]:t.class}}function Gn(e,t){return e?t?e+" "+t:e:t||""}function Yn(e){return Array.isArray(e)?function(e){for(var t,n="",a=0,r=e.length;a-1?ua(e,t,n):wn(t)?Fn(n)?e.removeAttribute(t):(n="allowfullscreen"===t&&"EMBED"===e.tagName?"true":t,e.setAttribute(t,n)):Mn(t)?e.setAttribute(t,function(e,t){return Fn(t)||"false"===t?"false":"contenteditable"===e&&Ln(t)?t:"true"}(t,n)):kn(t)?Fn(n)?e.removeAttributeNS(Pn,Un(t)):e.setAttributeNS(Pn,t,n):ua(e,t,n)}function ua(e,t,n){if(Fn(n))e.removeAttribute(t);else{if(j&&!X&&"TEXTAREA"===e.tagName&&"placeholder"===t&&""!==n&&!e.__ieph){var a=function(t){t.stopImmediatePropagation(),e.removeEventListener("input",a)};e.addEventListener("input",a),e.__ieph=!0}e.setAttribute(t,n)}}var pa={create:_a,update:_a};function ma(e,t){var n=t.elm,a=t.data,o=e.data;if(!(r(a.staticClass)&&r(a.class)&&(r(o)||r(o.staticClass)&&r(o.class)))){var s=function(e){for(var t=e.data,n=e,a=e;i(a.componentInstance);)(a=a.componentInstance._vnode)&&a.data&&(t=Bn(a.data,t));for(;i(n=n.parent);)n&&n.data&&(t=Bn(t,n.data));return function(e,t){return i(e)||i(t)?Gn(e,Yn(t)):""}(t.staticClass,t.class)}(t),l=n._transitionClasses;i(l)&&(s=Gn(s,Yn(l))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}var Ea,ga,Sa,fa,Ta,ba,Ca={create:ma,update:ma},va=/[\w).+\-_$\]]/;function Ra(e){var t,n,a,r,i,o=!1,s=!1,l=!1,c=!1,_=0,d=0,u=0,p=0;for(a=0;a=0&&" "===(E=e.charAt(m));m--);E&&va.test(E)||(c=!0)}}else void 0===r?(p=a+1,r=e.slice(0,a).trim()):g();function g(){(i||(i=[])).push(e.slice(p,a).trim()),p=a+1}if(void 0===r?r=e.slice(0,a).trim():0!==p&&g(),i)for(a=0;a-1?{exp:e.slice(0,fa),key:'"'+e.slice(fa+1)+'"'}:{exp:e,key:null};for(ga=e,fa=Ta=ba=0;!Ga();)Ya(Sa=Ba())?Va(Sa):91===Sa&&Ha(Sa);return{exp:e.slice(0,Ta),key:e.slice(Ta+1,ba)}}(e);return null===n.key?e+"="+t:"$set("+n.exp+", "+n.key+", "+t+")"}function Ba(){return ga.charCodeAt(++fa)}function Ga(){return fa>=Ea}function Ya(e){return 34===e||39===e}function Ha(e){var t=1;for(Ta=fa;!Ga();)if(Ya(e=Ba()))Va(e);else if(91===e&&t++,93===e&&t--,0===t){ba=fa;break}}function Va(e){for(var t=e;!Ga()&&(e=Ba())!==t;);}var qa,$a="__r";function za(e,t,n){var a=qa;return function r(){null!==t.apply(null,arguments)&&Ka(e,r,n,a)}}var Wa=We&&!(ee&&Number(ee[1])<=53);function Qa(e,t,n,a){if(Wa){var r=sn,i=t;t=i._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=r||e.timeStamp<=0||e.target.ownerDocument!==document)return i.apply(this,arguments)}}qa.addEventListener(e,t,ne?{capture:n,passive:a}:n)}function Ka(e,t,n,a){(a||qa).removeEventListener(e,t._wrapper||t,n)}function ja(e,t){if(!r(e.data.on)||!r(t.data.on)){var n=t.data.on||{},a=e.data.on||{};qa=t.elm,function(e){if(i(e.__r)){var t=j?"change":"input";e[t]=[].concat(e.__r,e[t]||[]),delete e.__r}i(e.__c)&&(e.change=[].concat(e.__c,e.change||[]),delete e.__c)}(n),ot(n,a,Qa,Ka,za,t.context),qa=void 0}}var Xa,Za={create:ja,update:ja};function Ja(e,t){if(!r(e.data.domProps)||!r(t.data.domProps)){var n,a,o=t.elm,s=e.data.domProps||{},l=t.data.domProps||{};for(n in i(l.__ob__)&&(l=t.data.domProps=A({},l)),s)n in l||(o[n]="");for(n in l){if(a=l[n],"textContent"===n||"innerHTML"===n){if(t.children&&(t.children.length=0),a===s[n])continue;1===o.childNodes.length&&o.removeChild(o.childNodes[0])}if("value"===n&&"PROGRESS"!==o.tagName){o._value=a;var c=r(a)?"":String(a);er(o,c)&&(o.value=c)}else if("innerHTML"===n&&qn(o.tagName)&&r(o.innerHTML)){(Xa=Xa||document.createElement("div")).innerHTML=""+a+"";for(var _=Xa.firstChild;o.firstChild;)o.removeChild(o.firstChild);for(;_.firstChild;)o.appendChild(_.firstChild)}else if(a!==s[n])try{o[n]=a}catch(e){}}}}function er(e,t){return!e.composing&&("OPTION"===e.tagName||function(e,t){var n=!0;try{n=document.activeElement!==e}catch(e){}return n&&e.value!==t}(e,t)||function(e,t){var n=e.value,a=e._vModifiers;if(i(a)){if(a.number)return m(n)!==m(t);if(a.trim)return n.trim()!==t.trim()}return n!==t}(e,t))}var tr={create:Ja,update:Ja},nr=C((function(e){var t={},n=/:(.+)/;return e.split(/;(?![^(]*\))/g).forEach((function(e){if(e){var a=e.split(n);a.length>1&&(t[a[0].trim()]=a[1].trim())}})),t}));function ar(e){var t=rr(e.style);return e.staticStyle?A(e.staticStyle,t):t}function rr(e){return Array.isArray(e)?D(e):"string"==typeof e?nr(e):e}var ir,or=/^--/,sr=/\s*!important$/,lr=function(e,t,n){if(or.test(t))e.style.setProperty(t,n);else if(sr.test(n))e.style.setProperty(h(t),n.replace(sr,""),"important");else{var a=_r(t);if(Array.isArray(n))for(var r=0,i=n.length;r-1?t.split(pr).forEach((function(t){return e.classList.add(t)})):e.classList.add(t);else{var n=" "+(e.getAttribute("class")||"")+" ";n.indexOf(" "+t+" ")<0&&e.setAttribute("class",(n+t).trim())}}function Er(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(pr).forEach((function(t){return e.classList.remove(t)})):e.classList.remove(t),e.classList.length||e.removeAttribute("class");else{for(var n=" "+(e.getAttribute("class")||"")+" ",a=" "+t+" ";n.indexOf(a)>=0;)n=n.replace(a," ");(n=n.trim())?e.setAttribute("class",n):e.removeAttribute("class")}}function gr(e){if(e){if("object"==typeof e){var t={};return!1!==e.css&&A(t,Sr(e.name||"v")),A(t,e),t}return"string"==typeof e?Sr(e):void 0}}var Sr=C((function(e){return{enterClass:e+"-enter",enterToClass:e+"-enter-to",enterActiveClass:e+"-enter-active",leaveClass:e+"-leave",leaveToClass:e+"-leave-to",leaveActiveClass:e+"-leave-active"}})),fr=z&&!X,Tr="transition",br="animation",Cr="transition",vr="transitionend",Rr="animation",Nr="animationend";fr&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(Cr="WebkitTransition",vr="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Rr="WebkitAnimation",Nr="webkitAnimationEnd"));var Or=z?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function hr(e){Or((function(){Or(e)}))}function yr(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)<0&&(n.push(t),mr(e,t))}function Ir(e,t){e._transitionClasses&&f(e._transitionClasses,t),Er(e,t)}function Ar(e,t,n){var a=xr(e,t),r=a.type,i=a.timeout,o=a.propCount;if(!r)return n();var s=r===Tr?vr:Nr,l=0,c=function(){e.removeEventListener(s,_),n()},_=function(t){t.target===e&&++l>=o&&c()};setTimeout((function(){l0&&(n=Tr,_=o,d=i.length):t===br?c>0&&(n=br,_=c,d=l.length):d=(n=(_=Math.max(o,c))>0?o>c?Tr:br:null)?n===Tr?i.length:l.length:0,{type:n,timeout:_,propCount:d,hasTransform:n===Tr&&Dr.test(a[Cr+"Property"])}}function Mr(e,t){for(;e.length1}function Fr(e,t){!0!==t.data.show&&wr(t)}var Br=function(e){var t,n,a={},l=e.modules,c=e.nodeOps;for(t=0;tm?T(e,r(n[S+1])?null:n[S+1].elm,n,p,S,a):p>S&&C(t,u,m)}(u,E,S,n,_):i(S)?(i(e.text)&&c.setTextContent(u,""),T(u,null,S,0,S.length-1,n)):i(E)?C(E,0,E.length-1):i(e.text)&&c.setTextContent(u,""):e.text!==t.text&&c.setTextContent(u,t.text),i(m)&&i(p=m.hook)&&i(p=p.postpatch)&&p(e,t)}}}function O(e,t,n){if(o(n)&&i(e.parent))e.parent.data.pendingInsert=t;else for(var a=0;a-1,o.selected!==i&&(o.selected=i);else if(w(qr(o),a))return void(e.selectedIndex!==s&&(e.selectedIndex=s));r||(e.selectedIndex=-1)}}function Vr(e,t){return t.every((function(t){return!w(t,e)}))}function qr(e){return"_value"in e?e._value:e.value}function $r(e){e.target.composing=!0}function zr(e){e.target.composing&&(e.target.composing=!1,Wr(e.target,"input"))}function Wr(e,t){var n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function Qr(e){return!e.componentInstance||e.data&&e.data.transition?e:Qr(e.componentInstance._vnode)}var Kr={model:Gr,show:{bind:function(e,t,n){var a=t.value,r=(n=Qr(n)).data&&n.data.transition,i=e.__vOriginalDisplay="none"===e.style.display?"":e.style.display;a&&r?(n.data.show=!0,wr(n,(function(){e.style.display=i}))):e.style.display=a?i:"none"},update:function(e,t,n){var a=t.value;!a!=!t.oldValue&&((n=Qr(n)).data&&n.data.transition?(n.data.show=!0,a?wr(n,(function(){e.style.display=e.__vOriginalDisplay})):Pr(n,(function(){e.style.display="none"}))):e.style.display=a?e.__vOriginalDisplay:"none")},unbind:function(e,t,n,a,r){r||(e.style.display=e.__vOriginalDisplay)}}},jr={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Xr(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?Xr(qt(t.children)):e}function Zr(e){var t={},n=e.$options;for(var a in n.propsData)t[a]=e[a];var r=n._parentListeners;for(var i in r)t[R(i)]=r[i];return t}function Jr(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{props:t.componentOptions.propsData})}var ei=function(e){return e.tag||Vt(e)},ti=function(e){return"show"===e.name},ni={name:"transition",props:jr,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(ei)).length){var a=this.mode,r=n[0];if(function(e){for(;e=e.parent;)if(e.data.transition)return!0}(this.$vnode))return r;var i=Xr(r);if(!i)return r;if(this._leaving)return Jr(e,r);var o="__transition-"+this._uid+"-";i.key=null==i.key?i.isComment?o+"comment":o+i.tag:s(i.key)?0===String(i.key).indexOf(o)?i.key:o+i.key:i.key;var l=(i.data||(i.data={})).transition=Zr(this),c=this._vnode,_=Xr(c);if(i.data.directives&&i.data.directives.some(ti)&&(i.data.show=!0),_&&_.data&&!function(e,t){return t.key===e.key&&t.tag===e.tag}(i,_)&&!Vt(_)&&(!_.componentInstance||!_.componentInstance._vnode.isComment)){var d=_.data.transition=A({},l);if("out-in"===a)return this._leaving=!0,st(d,"afterLeave",(function(){t._leaving=!1,t.$forceUpdate()})),Jr(e,r);if("in-out"===a){if(Vt(i))return c;var u,p=function(){u()};st(l,"afterEnter",p),st(l,"enterCancelled",p),st(d,"delayLeave",(function(e){u=e}))}}return r}}},ai=A({tag:String,moveClass:String},jr);function ri(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._enterCb()}function ii(e){e.data.newPos=e.elm.getBoundingClientRect()}function oi(e){var t=e.data.pos,n=e.data.newPos,a=t.left-n.left,r=t.top-n.top;if(a||r){e.data.moved=!0;var i=e.elm.style;i.transform=i.WebkitTransform="translate("+a+"px,"+r+"px)",i.transitionDuration="0s"}}delete ai.mode;var si={Transition:ni,TransitionGroup:{props:ai,beforeMount:function(){var e=this,t=this._update;this._update=function(n,a){var r=jt(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,r(),t.call(e,n,a)}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),a=this.prevChildren=this.children,r=this.$slots.default||[],i=this.children=[],o=Zr(this),s=0;s-1?Wn[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:Wn[e]=/HTMLUnknownElement/.test(t.toString())},A(vn.options.directives,Kr),A(vn.options.components,si),vn.prototype.__patch__=z?Br:x,vn.prototype.$mount=function(e,t){return function(e,t,n){var a;return e.$el=t,e.$options.render||(e.$options.render=Se),Jt(e,"beforeMount"),a=function(){e._update(e._render(),n)},new un(e,a,x,{before:function(){e._isMounted&&!e._isDestroyed&&Jt(e,"beforeUpdate")}},!0),n=!1,null==e.$vnode&&(e._isMounted=!0,Jt(e,"mounted")),e}(this,e=e&&z?Kn(e):void 0,t)},z&&setTimeout((function(){G.devtools&&ie&&ie.emit("init",vn)}),0);var li,ci=/\{\{((?:.|\r?\n)+?)\}\}/g,_i=/[-.*+?^${}()|[\]\/\\]/g,di=C((function(e){var t=e[0].replace(_i,"\\$&"),n=e[1].replace(_i,"\\$&");return new RegExp(t+"((?:.|\\n)+?)"+n,"g")})),ui={staticKeys:["staticClass"],transformNode:function(e,t){t.warn;var n=wa(e,"class");n&&(e.staticClass=JSON.stringify(n));var a=La(e,"class",!1);a&&(e.classBinding=a)},genData:function(e){var t="";return e.staticClass&&(t+="staticClass:"+e.staticClass+","),e.classBinding&&(t+="class:"+e.classBinding+","),t}},pi={staticKeys:["staticStyle"],transformNode:function(e,t){t.warn;var n=wa(e,"style");n&&(e.staticStyle=JSON.stringify(nr(n)));var a=La(e,"style",!1);a&&(e.styleBinding=a)},genData:function(e){var t="";return e.staticStyle&&(t+="staticStyle:"+e.staticStyle+","),e.styleBinding&&(t+="style:("+e.styleBinding+"),"),t}},mi=E("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),Ei=E("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),gi=E("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),Si=/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,fi=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,Ti="[a-zA-Z_][\\-\\.0-9_a-zA-Z"+Y.source+"]*",bi="((?:"+Ti+"\\:)?"+Ti+")",Ci=new RegExp("^<"+bi),vi=/^\s*(\/?)>/,Ri=new RegExp("^<\\/"+bi+"[^>]*>"),Ni=/^]+>/i,Oi=/^",""":'"',"&":"&"," ":"\n"," ":"\t","'":"'"},Di=/&(?:lt|gt|quot|amp|#39);/g,xi=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,Mi=E("pre,textarea",!0),Li=function(e,t){return e&&Mi(e)&&"\n"===t[0]};function wi(e,t){var n=t?xi:Di;return e.replace(n,(function(e){return Ai[e]}))}var Pi,ki,Ui,Fi,Bi,Gi,Yi,Hi,Vi=/^@|^v-on:/,qi=/^v-|^@|^:|^#/,$i=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,zi=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,Wi=/^\(|\)$/g,Qi=/^\[.*\]$/,Ki=/:(.*)$/,ji=/^:|^\.|^v-bind:/,Xi=/\.[^.\]]+(?=[^\]]*$)/g,Zi=/^v-slot(:|$)|^#/,Ji=/[\r\n]/,eo=/\s+/g,to=C((function(e){return(li=li||document.createElement("div")).innerHTML=e,li.textContent})),no="_empty_";function ao(e,t,n){return{type:1,tag:e,attrsList:t,attrsMap:co(t),rawAttrsMap:{},parent:n,children:[]}}function ro(e,t){var n,a;(a=La(n=e,"key"))&&(n.key=a),e.plain=!e.key&&!e.scopedSlots&&!e.attrsList.length,function(e){var t=La(e,"ref");t&&(e.ref=t,e.refInFor=function(e){for(var t=e;t;){if(void 0!==t.for)return!0;t=t.parent}return!1}(e))}(e),function(e){var t;"template"===e.tag?(t=wa(e,"scope"),e.slotScope=t||wa(e,"slot-scope")):(t=wa(e,"slot-scope"))&&(e.slotScope=t);var n=La(e,"slot");if(n&&(e.slotTarget='""'===n?'"default"':n,e.slotTargetDynamic=!(!e.attrsMap[":slot"]&&!e.attrsMap["v-bind:slot"]),"template"===e.tag||e.slotScope||Ia(e,"slot",n,function(e,t){return e.rawAttrsMap[":"+t]||e.rawAttrsMap["v-bind:"+t]||e.rawAttrsMap[t]}(e,"slot"))),"template"===e.tag){var a=Pa(e,Zi);if(a){var r=so(a),i=r.name,o=r.dynamic;e.slotTarget=i,e.slotTargetDynamic=o,e.slotScope=a.value||no}}else{var s=Pa(e,Zi);if(s){var l=e.scopedSlots||(e.scopedSlots={}),c=so(s),_=c.name,d=c.dynamic,u=l[_]=ao("template",[],e);u.slotTarget=_,u.slotTargetDynamic=d,u.children=e.children.filter((function(e){if(!e.slotScope)return e.parent=u,!0})),u.slotScope=s.value||no,e.children=[],e.plain=!1}}}(e),function(e){"slot"===e.tag&&(e.slotName=La(e,"name"))}(e),function(e){var t;(t=La(e,"is"))&&(e.component=t),null!=wa(e,"inline-template")&&(e.inlineTemplate=!0)}(e);for(var r=0;r-1"+("true"===i?":("+t+")":":_q("+t+","+i+")")),Ma(e,"change","var $$a="+t+",$$el=$event.target,$$c=$$el.checked?("+i+"):("+o+");if(Array.isArray($$a)){var $$v="+(a?"_n("+r+")":r)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+Fa(t,"$$a.concat([$$v])")+")}else{$$i>-1&&("+Fa(t,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")+")}}else{"+Fa(t,"$$c")+"}",null,!0)}(e,a,r);else if("input"===i&&"radio"===o)!function(e,t,n){var a=n&&n.number,r=La(e,"value")||"null";ya(e,"checked","_q("+t+","+(r=a?"_n("+r+")":r)+")"),Ma(e,"change",Fa(t,r),null,!0)}(e,a,r);else if("input"===i||"textarea"===i)!function(e,t,n){var a=e.attrsMap.type,r=n||{},i=r.lazy,o=r.number,s=r.trim,l=!i&&"range"!==a,c=i?"change":"range"===a?$a:"input",_="$event.target.value";s&&(_="$event.target.value.trim()"),o&&(_="_n("+_+")");var d=Fa(t,_);l&&(d="if($event.target.composing)return;"+d),ya(e,"value","("+t+")"),Ma(e,c,d,null,!0),(s||o)&&Ma(e,"blur","$forceUpdate()")}(e,a,r);else if(!G.isReservedTag(i))return Ua(e,a,r),!1;return!0},text:function(e,t){t.value&&ya(e,"textContent","_s("+t.value+")",t)},html:function(e,t){t.value&&ya(e,"innerHTML","_s("+t.value+")",t)}},isPreTag:function(e){return"pre"===e},isUnaryTag:mi,mustUseProp:xn,canBeLeftOpenTag:Ei,isReservedTag:$n,getTagNamespace:zn,staticKeys:function(e){return e.reduce((function(e,t){return e.concat(t.staticKeys||[])}),[]).join(",")}(go)},fo=C((function(e){return E("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap"+(e?","+e:""))}));var To=/^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/,bo=/\([^)]*?\);*$/,Co=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,vo={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Ro={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},No=function(e){return"if("+e+")return null;"},Oo={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:No("$event.target !== $event.currentTarget"),ctrl:No("!$event.ctrlKey"),shift:No("!$event.shiftKey"),alt:No("!$event.altKey"),meta:No("!$event.metaKey"),left:No("'button' in $event && $event.button !== 0"),middle:No("'button' in $event && $event.button !== 1"),right:No("'button' in $event && $event.button !== 2")};function ho(e,t){var n=t?"nativeOn:":"on:",a="",r="";for(var i in e){var o=yo(e[i]);e[i]&&e[i].dynamic?r+=i+","+o+",":a+='"'+i+'":'+o+","}return a="{"+a.slice(0,-1)+"}",r?n+"_d("+a+",["+r.slice(0,-1)+"])":n+a}function yo(e){if(!e)return"function(){}";if(Array.isArray(e))return"["+e.map((function(e){return yo(e)})).join(",")+"]";var t=Co.test(e.value),n=To.test(e.value),a=Co.test(e.value.replace(bo,""));if(e.modifiers){var r="",i="",o=[];for(var s in e.modifiers)if(Oo[s])i+=Oo[s],vo[s]&&o.push(s);else if("exact"===s){var l=e.modifiers;i+=No(["ctrl","shift","alt","meta"].filter((function(e){return!l[e]})).map((function(e){return"$event."+e+"Key"})).join("||"))}else o.push(s);return o.length&&(r+=function(e){return"if(!$event.type.indexOf('key')&&"+e.map(Io).join("&&")+")return null;"}(o)),i&&(r+=i),"function($event){"+r+(t?"return "+e.value+"($event)":n?"return ("+e.value+")($event)":a?"return "+e.value:e.value)+"}"}return t||n?e.value:"function($event){"+(a?"return "+e.value:e.value)+"}"}function Io(e){var t=parseInt(e,10);if(t)return"$event.keyCode!=="+t;var n=vo[e],a=Ro[e];return"_k($event.keyCode,"+JSON.stringify(e)+","+JSON.stringify(n)+",$event.key,"+JSON.stringify(a)+")"}var Ao={on:function(e,t){e.wrapListeners=function(e){return"_g("+e+","+t.value+")"}},bind:function(e,t){e.wrapData=function(n){return"_b("+n+",'"+e.tag+"',"+t.value+","+(t.modifiers&&t.modifiers.prop?"true":"false")+(t.modifiers&&t.modifiers.sync?",true":"")+")"}},cloak:x},Do=function(e){this.options=e,this.warn=e.warn||Oa,this.transforms=ha(e.modules,"transformCode"),this.dataGenFns=ha(e.modules,"genData"),this.directives=A(A({},Ao),e.directives);var t=e.isReservedTag||M;this.maybeComponent=function(e){return!!e.component||!t(e.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function xo(e,t){var n=new Do(t);return{render:"with(this){return "+(e?Mo(e,n):'_c("div")')+"}",staticRenderFns:n.staticRenderFns}}function Mo(e,t){if(e.parent&&(e.pre=e.pre||e.parent.pre),e.staticRoot&&!e.staticProcessed)return Lo(e,t);if(e.once&&!e.onceProcessed)return wo(e,t);if(e.for&&!e.forProcessed)return ko(e,t);if(e.if&&!e.ifProcessed)return Po(e,t);if("template"!==e.tag||e.slotTarget||t.pre){if("slot"===e.tag)return function(e,t){var n=e.slotName||'"default"',a=Go(e,t),r="_t("+n+(a?","+a:""),i=e.attrs||e.dynamicAttrs?Vo((e.attrs||[]).concat(e.dynamicAttrs||[]).map((function(e){return{name:R(e.name),value:e.value,dynamic:e.dynamic}}))):null,o=e.attrsMap["v-bind"];return!i&&!o||a||(r+=",null"),i&&(r+=","+i),o&&(r+=(i?"":",null")+","+o),r+")"}(e,t);var n;if(e.component)n=function(e,t,n){var a=t.inlineTemplate?null:Go(t,n,!0);return"_c("+e+","+Uo(t,n)+(a?","+a:"")+")"}(e.component,e,t);else{var a;(!e.plain||e.pre&&t.maybeComponent(e))&&(a=Uo(e,t));var r=e.inlineTemplate?null:Go(e,t,!0);n="_c('"+e.tag+"'"+(a?","+a:"")+(r?","+r:"")+")"}for(var i=0;i>>0}(o):"")+")"}(e,e.scopedSlots,t)+","),e.model&&(n+="model:{value:"+e.model.value+",callback:"+e.model.callback+",expression:"+e.model.expression+"},"),e.inlineTemplate){var i=function(e,t){var n=e.children[0];if(n&&1===n.type){var a=xo(n,t.options);return"inlineTemplate:{render:function(){"+a.render+"},staticRenderFns:["+a.staticRenderFns.map((function(e){return"function(){"+e+"}"})).join(",")+"]}"}}(e,t);i&&(n+=i+",")}return n=n.replace(/,$/,"")+"}",e.dynamicAttrs&&(n="_b("+n+',"'+e.tag+'",'+Vo(e.dynamicAttrs)+")"),e.wrapData&&(n=e.wrapData(n)),e.wrapListeners&&(n=e.wrapListeners(n)),n}function Fo(e){return 1===e.type&&("slot"===e.tag||e.children.some(Fo))}function Bo(e,t){var n=e.attrsMap["slot-scope"];if(e.if&&!e.ifProcessed&&!n)return Po(e,t,Bo,"null");if(e.for&&!e.forProcessed)return ko(e,t,Bo);var a=e.slotScope===no?"":String(e.slotScope),r="function("+a+"){return "+("template"===e.tag?e.if&&n?"("+e.if+")?"+(Go(e,t)||"undefined")+":undefined":Go(e,t)||"undefined":Mo(e,t))+"}",i=a?"":",proxy:true";return"{key:"+(e.slotTarget||'"default"')+",fn:"+r+i+"}"}function Go(e,t,n,a,r){var i=e.children;if(i.length){var o=i[0];if(1===i.length&&o.for&&"template"!==o.tag&&"slot"!==o.tag){var s=n?t.maybeComponent(o)?",1":",0":"";return""+(a||Mo)(o,t)+s}var l=n?function(e,t){for(var n=0,a=0;a]*>)","i")),u=e.replace(d,(function(e,n,a){return c=a.length,yi(_)||"noscript"===_||(n=n.replace(//g,"$1").replace(//g,"$1")),Li(_,n)&&(n=n.slice(1)),t.chars&&t.chars(n),""}));l+=e.length-u.length,e=u,h(_,l-c,l)}else{var p=e.indexOf("<");if(0===p){if(Oi.test(e)){var m=e.indexOf("--\x3e");if(m>=0){t.shouldKeepComment&&t.comment(e.substring(4,m),l,l+m+3),R(m+3);continue}}if(hi.test(e)){var E=e.indexOf("]>");if(E>=0){R(E+2);continue}}var g=e.match(Ni);if(g){R(g[0].length);continue}var S=e.match(Ri);if(S){var f=l;R(S[0].length),h(S[1],f,l);continue}var T=N();if(T){O(T),Li(T.tagName,e)&&R(1);continue}}var b=void 0,C=void 0,v=void 0;if(p>=0){for(C=e.slice(p);!(Ri.test(C)||Ci.test(C)||Oi.test(C)||hi.test(C)||(v=C.indexOf("<",1))<0);)p+=v,C=e.slice(p);b=e.substring(0,p)}p<0&&(b=e),b&&R(b.length),t.chars&&b&&t.chars(b,l-b.length,l)}if(e===n){t.chars&&t.chars(e);break}}function R(t){l+=t,e=e.substring(t)}function N(){var t=e.match(Ci);if(t){var n,a,r={tagName:t[1],attrs:[],start:l};for(R(t[0].length);!(n=e.match(vi))&&(a=e.match(fi)||e.match(Si));)a.start=l,R(a[0].length),a.end=l,r.attrs.push(a);if(n)return r.unarySlash=n[1],R(n[0].length),r.end=l,r}}function O(e){var n=e.tagName,l=e.unarySlash;i&&("p"===a&&gi(n)&&h(a),s(n)&&a===n&&h(n));for(var c=o(n)||!!l,_=e.attrs.length,d=new Array(_),u=0;u<_;u++){var p=e.attrs[u],m=p[3]||p[4]||p[5]||"",E="a"===n&&"href"===p[1]?t.shouldDecodeNewlinesForHref:t.shouldDecodeNewlines;d[u]={name:p[1],value:wi(m,E)}}c||(r.push({tag:n,lowerCasedTag:n.toLowerCase(),attrs:d,start:e.start,end:e.end}),a=n),t.start&&t.start(n,d,c,e.start,e.end)}function h(e,n,i){var o,s;if(null==n&&(n=l),null==i&&(i=l),e)for(s=e.toLowerCase(),o=r.length-1;o>=0&&r[o].lowerCasedTag!==s;o--);else o=0;if(o>=0){for(var c=r.length-1;c>=o;c--)t.end&&t.end(r[c].tag,n,i);r.length=o,a=o&&r[o-1].tag}else"br"===s?t.start&&t.start(e,[],!0,n,i):"p"===s&&(t.start&&t.start(e,[],!1,n,i),t.end&&t.end(e,n,i))}h()}(e,{warn:Pi,expectHTML:t.expectHTML,isUnaryTag:t.isUnaryTag,canBeLeftOpenTag:t.canBeLeftOpenTag,shouldDecodeNewlines:t.shouldDecodeNewlines,shouldDecodeNewlinesForHref:t.shouldDecodeNewlinesForHref,shouldKeepComment:t.comments,outputSourceRange:t.outputSourceRange,start:function(e,i,o,_,d){var u=a&&a.ns||Hi(e);j&&"svg"===u&&(i=function(e){for(var t=[],n=0;nl&&(s.push(i=e.slice(l,r)),o.push(JSON.stringify(i)));var c=Ra(a[1].trim());o.push("_s("+c+")"),s.push({"@binding":c}),l=r+a[0].length}return l':'
',Qo.innerHTML.indexOf(" ")>0}var Zo=!!z&&Xo(!1),Jo=!!z&&Xo(!0),es=C((function(e){var t=Kn(e);return t&&t.innerHTML})),ts=vn.prototype.$mount;vn.prototype.$mount=function(e,t){if((e=e&&Kn(e))===document.body||e===document.documentElement)return this;var n=this.$options;if(!n.render){var a=n.template;if(a)if("string"==typeof a)"#"===a.charAt(0)&&(a=es(a));else{if(!a.nodeType)return this;a=a.innerHTML}else e&&(a=function(e){if(e.outerHTML)return e.outerHTML;var t=document.createElement("div");return t.appendChild(e.cloneNode(!0)),t.innerHTML}(e));if(a){var r=jo(a,{outputSourceRange:!1,shouldDecodeNewlines:Zo,shouldDecodeNewlinesForHref:Jo,delimiters:n.delimiters,comments:n.comments},this),i=r.render,o=r.staticRenderFns;n.render=i,n.staticRenderFns=o}}return ts.call(this,e,t)},vn.compile=jo,e.exports=vn}).call(this,n("yLpj"),n("URgk").setImmediate)},ImXp:function(e,t){e.exports=function(e){var t={keyword:"in isa where baremodule begin break catch ccall const continue do else elseif end export false finally for function global if import importall let local macro module quote return true try using while type immutable abstract bitstype typealias ",literal:"true false ARGS C_NULL DevNull ENDIAN_BOM ENV I Inf Inf16 Inf32 Inf64 InsertionSort JULIA_HOME LOAD_PATH MergeSort NaN NaN16 NaN32 NaN64 PROGRAM_FILE QuickSort RoundDown RoundFromZero RoundNearest RoundNearestTiesAway RoundNearestTiesUp RoundToZero RoundUp STDERR STDIN STDOUT VERSION catalan e|0 eu|0 eulergamma golden im nothing pi γ Ï€ φ ",built_in:"ANY AbstractArray AbstractChannel AbstractFloat AbstractMatrix AbstractRNG AbstractSerializer AbstractSet AbstractSparseArray AbstractSparseMatrix AbstractSparseVector AbstractString AbstractUnitRange AbstractVecOrMat AbstractVector Any ArgumentError Array AssertionError Associative Base64DecodePipe Base64EncodePipe Bidiagonal BigFloat BigInt BitArray BitMatrix BitVector Bool BoundsError BufferStream CachingPool CapturedException CartesianIndex CartesianRange Cchar Cdouble Cfloat Channel Char Cint Cintmax_t Clong Clonglong ClusterManager Cmd CodeInfo Colon Complex Complex128 Complex32 Complex64 CompositeException Condition ConjArray ConjMatrix ConjVector Cptrdiff_t Cshort Csize_t Cssize_t Cstring Cuchar Cuint Cuintmax_t Culong Culonglong Cushort Cwchar_t Cwstring DataType Date DateFormat DateTime DenseArray DenseMatrix DenseVecOrMat DenseVector Diagonal Dict DimensionMismatch Dims DirectIndexString Display DivideError DomainError EOFError EachLine Enum Enumerate ErrorException Exception ExponentialBackOff Expr Factorization FileMonitor Float16 Float32 Float64 Function Future GlobalRef GotoNode HTML Hermitian IO IOBuffer IOContext IOStream IPAddr IPv4 IPv6 IndexCartesian IndexLinear IndexStyle InexactError InitError Int Int128 Int16 Int32 Int64 Int8 IntSet Integer InterruptException InvalidStateException Irrational KeyError LabelNode LinSpace LineNumberNode LoadError LowerTriangular MIME Matrix MersenneTwister Method MethodError MethodTable Module NTuple NewvarNode NullException Nullable Number ObjectIdDict OrdinalRange OutOfMemoryError OverflowError Pair ParseError PartialQuickSort PermutedDimsArray Pipe PollingFileWatcher ProcessExitedException Ptr QuoteNode RandomDevice Range RangeIndex Rational RawFD ReadOnlyMemoryError Real ReentrantLock Ref Regex RegexMatch RemoteChannel RemoteException RevString RoundingMode RowVector SSAValue SegmentationFault SerializationState Set SharedArray SharedMatrix SharedVector Signed SimpleVector Slot SlotNumber SparseMatrixCSC SparseVector StackFrame StackOverflowError StackTrace StepRange StepRangeLen StridedArray StridedMatrix StridedVecOrMat StridedVector String SubArray SubString SymTridiagonal Symbol Symmetric SystemError TCPSocket Task Text TextDisplay Timer Tridiagonal Tuple Type TypeError TypeMapEntry TypeMapLevel TypeName TypeVar TypedSlot UDPSocket UInt UInt128 UInt16 UInt32 UInt64 UInt8 UndefRefError UndefVarError UnicodeError UniformScaling Union UnionAll UnitRange Unsigned UpperTriangular Val Vararg VecElement VecOrMat Vector VersionNumber Void WeakKeyDict WeakRef WorkerConfig WorkerPool "},n="[A-Za-z_\\u00A1-\\uFFFF][A-Za-z_0-9\\u00A1-\\uFFFF]*",a={lexemes:n,keywords:t,illegal:/<\//},r={className:"subst",begin:/\$\(/,end:/\)/,keywords:t},i={className:"variable",begin:"\\$"+n},o={className:"string",contains:[e.BACKSLASH_ESCAPE,r,i],variants:[{begin:/\w*"""/,end:/"""\w*/,relevance:10},{begin:/\w*"/,end:/"\w*/}]},s={className:"string",contains:[e.BACKSLASH_ESCAPE,r,i],begin:"`",end:"`"},l={className:"meta",begin:"@"+n};return a.name="Julia",a.contains=[{className:"number",begin:/(\b0x[\d_]*(\.[\d_]*)?|0x\.\d[\d_]*)p[-+]?\d+|\b0[box][a-fA-F0-9][a-fA-F0-9_]*|(\b\d[\d_]*(\.[\d_]*)?|\.\d[\d_]*)([eEfF][-+]?\d+)?/,relevance:0},{className:"string",begin:/'(.|\\[xXuU][a-zA-Z0-9]+)'/},o,s,l,{className:"comment",variants:[{begin:"#=",end:"=#",relevance:10},{begin:"#",end:"$"}]},e.HASH_COMMENT_MODE,{className:"keyword",begin:"\\b(((abstract|primitive)\\s+)type|(mutable\\s+)?struct)\\b"},{begin:/<:/}],r.contains=a.contains,a}},JCUK:function(e,t){e.exports=function(e){var t=e.COMMENT("%","$"),n=e.inherit(e.APOS_STRING_MODE,{relevance:0}),a=e.inherit(e.QUOTE_STRING_MODE,{relevance:0});return a.contains=a.contains.slice(),a.contains.push({className:"subst",begin:"\\\\[abfnrtv]\\|\\\\x[0-9a-fA-F]*\\\\\\|%[-+# *.0-9]*[dioxXucsfeEgGp]",relevance:0}),{name:"Mercury",aliases:["m","moo"],keywords:{keyword:"module use_module import_module include_module end_module initialise mutable initialize finalize finalise interface implementation pred mode func type inst solver any_pred any_func is semidet det nondet multi erroneous failure cc_nondet cc_multi typeclass instance where pragma promise external trace atomic or_else require_complete_switch require_det require_semidet require_multi require_nondet require_cc_multi require_cc_nondet require_erroneous require_failure",meta:"inline no_inline type_spec source_file fact_table obsolete memo loop_check minimal_model terminates does_not_terminate check_termination promise_equivalent_clauses foreign_proc foreign_decl foreign_code foreign_type foreign_import_module foreign_export_enum foreign_export foreign_enum may_call_mercury will_not_call_mercury thread_safe not_thread_safe maybe_thread_safe promise_pure promise_semipure tabled_for_io local untrailed trailed attach_to_io_state can_pass_as_mercury_type stable will_not_throw_exception may_modify_trail will_not_modify_trail may_duplicate may_not_duplicate affects_liveness does_not_affect_liveness doesnt_affect_liveness no_sharing unknown_sharing sharing",built_in:"some all not if then else true fail false try catch catch_any semidet_true semidet_false semidet_fail impure_true impure semipure"},contains:[{className:"built_in",variants:[{begin:"<=>"},{begin:"<=",relevance:0},{begin:"=>",relevance:0},{begin:"/\\\\"},{begin:"\\\\/"}]},{className:"built_in",variants:[{begin:":-\\|--\x3e"},{begin:"=",relevance:0}]},t,e.C_BLOCK_COMMENT_MODE,{className:"number",begin:"0'.\\|0[box][0-9a-fA-F]*"},e.NUMBER_MODE,n,a,{begin:/:-/},{begin:/\.$/}]}}},JEQr:function(e,t,n){"use strict";(function(t){var a=n("xTJ+"),r=n("yK9s"),i={"Content-Type":"application/x-www-form-urlencoded"};function o(e,t){!a.isUndefined(e)&&a.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}var s,l={adapter:(("undefined"!=typeof XMLHttpRequest||void 0!==t&&"[object process]"===Object.prototype.toString.call(t))&&(s=n("tQ2B")),s),transformRequest:[function(e,t){return r(t,"Accept"),r(t,"Content-Type"),a.isFormData(e)||a.isArrayBuffer(e)||a.isBuffer(e)||a.isStream(e)||a.isFile(e)||a.isBlob(e)?e:a.isArrayBufferView(e)?e.buffer:a.isURLSearchParams(e)?(o(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):a.isObject(e)?(o(t,"application/json;charset=utf-8"),JSON.stringify(e)):e}],transformResponse:[function(e){if("string"==typeof e)try{e=JSON.parse(e)}catch(e){}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(e){return e>=200&&e<300}};l.headers={common:{Accept:"application/json, text/plain, */*"}},a.forEach(["delete","get","head"],(function(e){l.headers[e]={}})),a.forEach(["post","put","patch"],(function(e){l.headers[e]=a.merge(i)})),e.exports=l}).call(this,n("8oxB"))},JGhL:function(e,t){e.exports=function(e){return{name:"Tagger Script",contains:[{className:"comment",begin:/\$noop\(/,end:/\)/,contains:[{begin:/\(/,end:/\)/,contains:["self",{begin:/\\./}]}],relevance:10},{className:"keyword",begin:/\$(?!noop)[a-zA-Z][_a-zA-Z0-9]*/,end:/\(/,excludeEnd:!0},{className:"variable",begin:/%[_a-zA-Z0-9:]*/,end:"%"},{className:"symbol",begin:/\\./}]}}},Jb18:function(e,t){e.exports=function(e){var t="\\]|\\?>",n={literal:"true false none minimal full all void and or not bw nbw ew new cn ncn lt lte gt gte eq neq rx nrx ft",built_in:"array date decimal duration integer map pair string tag xml null boolean bytes keyword list locale queue set stack staticarray local var variable global data self inherited currentcapture givenblock",keyword:"cache database_names database_schemanames database_tablenames define_tag define_type email_batch encode_set html_comment handle handle_error header if inline iterate ljax_target link link_currentaction link_currentgroup link_currentrecord link_detail link_firstgroup link_firstrecord link_lastgroup link_lastrecord link_nextgroup link_nextrecord link_prevgroup link_prevrecord log loop namespace_using output_none portal private protect records referer referrer repeating resultset rows search_args search_arguments select sort_args sort_arguments thread_atomic value_list while abort case else fail_if fail_ifnot fail if_empty if_false if_null if_true loop_abort loop_continue loop_count params params_up return return_value run_children soap_definetag soap_lastrequest soap_lastresponse tag_name ascending average by define descending do equals frozen group handle_failure import in into join let match max min on order parent protected provide public require returnhome skip split_thread sum take thread to trait type where with yield yieldhome"},a=e.COMMENT("\x3c!--","--\x3e",{relevance:0}),r={className:"meta",begin:"\\[noprocess\\]",starts:{end:"\\[/noprocess\\]",returnEnd:!0,contains:[a]}},i={className:"meta",begin:"\\[/noprocess|<\\?(lasso(script)?|=)"},o={className:"symbol",begin:"'[a-zA-Z_][\\w.]*'"},s=[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.inherit(e.C_NUMBER_MODE,{begin:e.C_NUMBER_RE+"|(-?infinity|NaN)\\b"}),e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),{className:"string",begin:"`",end:"`"},{variants:[{begin:"[#$][a-zA-Z_][\\w.]*"},{begin:"#",end:"\\d+",illegal:"\\W"}]},{className:"type",begin:"::\\s*",end:"[a-zA-Z_][\\w.]*",illegal:"\\W"},{className:"params",variants:[{begin:"-(?!infinity)[a-zA-Z_][\\w.]*",relevance:0},{begin:"(\\.\\.\\.)"}]},{begin:/(->|\.)\s*/,relevance:0,contains:[o]},{className:"class",beginKeywords:"define",returnEnd:!0,end:"\\(|=>",contains:[e.inherit(e.TITLE_MODE,{begin:"[a-zA-Z_][\\w.]*(=(?!>))?|[-+*/%](?!>)"})]}];return{name:"Lasso",aliases:["ls","lassoscript"],case_insensitive:!0,lexemes:"[a-zA-Z_][\\w.]*|&[lg]t;",keywords:n,contains:[{className:"meta",begin:t,relevance:0,starts:{end:"\\[|<\\?(lasso(script)?|=)",returnEnd:!0,relevance:0,contains:[a]}},r,i,{className:"meta",begin:"\\[no_square_brackets",starts:{end:"\\[/no_square_brackets\\]",lexemes:"[a-zA-Z_][\\w.]*|&[lg]t;",keywords:n,contains:[{className:"meta",begin:t,relevance:0,starts:{end:"\\[noprocess\\]|<\\?(lasso(script)?|=)",returnEnd:!0,contains:[a]}},r,i].concat(s)}},{className:"meta",begin:"\\[",relevance:0},{className:"meta",begin:"^#!",end:"lasso9$",relevance:10}].concat(s)}}},Jjkb:function(e,t){e.exports=function(e){var t={keyword:"if then else do while until for loop import with is as where when by data constant integer real text name boolean symbol infix prefix postfix block tree",literal:"true false nil",built_in:"in mod rem and or xor not abs sign floor ceil sqrt sin cos tan asin acos atan exp expm1 log log2 log10 log1p pi at text_length text_range text_find text_replace contains page slide basic_slide title_slide title subtitle fade_in fade_out fade_at clear_color color line_color line_width texture_wrap texture_transform texture scale_?x scale_?y scale_?z? translate_?x translate_?y translate_?z? rotate_?x rotate_?y rotate_?z? rectangle circle ellipse sphere path line_to move_to quad_to curve_to theme background contents locally time mouse_?x mouse_?y mouse_buttons ObjectLoader Animate MovieCredits Slides Filters Shading Materials LensFlare Mapping VLCAudioVideo StereoDecoder PointCloud NetworkAccess RemoteControl RegExp ChromaKey Snowfall NodeJS Speech Charts"},n={className:"string",begin:'"',end:'"',illegal:"\\n"},a={beginKeywords:"import",end:"$",keywords:t,contains:[n]},r={className:"function",begin:/[a-z][^\n]*->/,returnBegin:!0,end:/->/,contains:[e.inherit(e.TITLE_MODE,{starts:{endsWithParent:!0,keywords:t}})]};return{name:"XL",aliases:["tao"],lexemes:/[a-zA-Z][a-zA-Z0-9_?]*/,keywords:t,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,{className:"string",begin:"'",end:"'",illegal:"\\n"},{className:"string",begin:"<<",end:">>"},r,a,{className:"number",begin:"[0-9]+#[0-9A-Z_]+(\\.[0-9-A-Z_]+)?#?([Ee][+-]?[0-9]+)?"},e.NUMBER_MODE]}}},JopO:function(e,t){e.exports=function(e){return{name:"XQuery",aliases:["xpath","xq"],case_insensitive:!1,lexemes:/[a-zA-Z\$][a-zA-Z0-9_:\-]*/,illegal:/(proc)|(abstract)|(extends)|(until)|(#)/,keywords:{keyword:"module schema namespace boundary-space preserve no-preserve strip default collation base-uri ordering context decimal-format decimal-separator copy-namespaces empty-sequence except exponent-separator external grouping-separator inherit no-inherit lax minus-sign per-mille percent schema-attribute schema-element strict unordered zero-digit declare import option function validate variable for at in let where order group by return if then else tumbling sliding window start when only end previous next stable ascending descending allowing empty greatest least some every satisfies switch case typeswitch try catch and or to union intersect instance of treat as castable cast map array delete insert into replace value rename copy modify update",type:"item document-node node attribute document element comment namespace namespace-node processing-instruction text construction xs:anyAtomicType xs:untypedAtomic xs:duration xs:time xs:decimal xs:float xs:double xs:gYearMonth xs:gYear xs:gMonthDay xs:gMonth xs:gDay xs:boolean xs:base64Binary xs:hexBinary xs:anyURI xs:QName xs:NOTATION xs:dateTime xs:dateTimeStamp xs:date xs:string xs:normalizedString xs:token xs:language xs:NMTOKEN xs:Name xs:NCName xs:ID xs:IDREF xs:ENTITY xs:integer xs:nonPositiveInteger xs:negativeInteger xs:long xs:int xs:short xs:byte xs:nonNegativeInteger xs:unisignedLong xs:unsignedInt xs:unsignedShort xs:unsignedByte xs:positiveInteger xs:yearMonthDuration xs:dayTimeDuration",literal:"eq ne lt le gt ge is self:: child:: descendant:: descendant-or-self:: attribute:: following:: following-sibling:: parent:: ancestor:: ancestor-or-self:: preceding:: preceding-sibling:: NaN"},contains:[{className:"variable",begin:/[\$][\w-:]+/},{className:"built_in",variants:[{begin:/\barray\:/,end:/(?:append|filter|flatten|fold\-(?:left|right)|for-each(?:\-pair)?|get|head|insert\-before|join|put|remove|reverse|size|sort|subarray|tail)\b/},{begin:/\bmap\:/,end:/(?:contains|entry|find|for\-each|get|keys|merge|put|remove|size)\b/},{begin:/\bmath\:/,end:/(?:a(?:cos|sin|tan[2]?)|cos|exp(?:10)?|log(?:10)?|pi|pow|sin|sqrt|tan)\b/},{begin:/\bop\:/,end:/\(/,excludeEnd:!0},{begin:/\bfn\:/,end:/\(/,excludeEnd:!0},{begin:/[^<\/\$\:'"-]\b(?:abs|accumulator\-(?:after|before)|adjust\-(?:date(?:Time)?|time)\-to\-timezone|analyze\-string|apply|available\-(?:environment\-variables|system\-properties)|avg|base\-uri|boolean|ceiling|codepoints?\-(?:equal|to\-string)|collation\-key|collection|compare|concat|contains(?:\-token)?|copy\-of|count|current(?:\-)?(?:date(?:Time)?|time|group(?:ing\-key)?|output\-uri|merge\-(?:group|key))?data|dateTime|days?\-from\-(?:date(?:Time)?|duration)|deep\-equal|default\-(?:collation|language)|distinct\-values|document(?:\-uri)?|doc(?:\-available)?|element\-(?:available|with\-id)|empty|encode\-for\-uri|ends\-with|environment\-variable|error|escape\-html\-uri|exactly\-one|exists|false|filter|floor|fold\-(?:left|right)|for\-each(?:\-pair)?|format\-(?:date(?:Time)?|time|integer|number)|function\-(?:arity|available|lookup|name)|generate\-id|has\-children|head|hours\-from\-(?:dateTime|duration|time)|id(?:ref)?|implicit\-timezone|in\-scope\-prefixes|index\-of|innermost|insert\-before|iri\-to\-uri|json\-(?:doc|to\-xml)|key|lang|last|load\-xquery\-module|local\-name(?:\-from\-QName)?|(?:lower|upper)\-case|matches|max|minutes\-from\-(?:dateTime|duration|time)|min|months?\-from\-(?:date(?:Time)?|duration)|name(?:space\-uri\-?(?:for\-prefix|from\-QName)?)?|nilled|node\-name|normalize\-(?:space|unicode)|not|number|one\-or\-more|outermost|parse\-(?:ietf\-date|json)|path|position|(?:prefix\-from\-)?QName|random\-number\-generator|regex\-group|remove|replace|resolve\-(?:QName|uri)|reverse|root|round(?:\-half\-to\-even)?|seconds\-from\-(?:dateTime|duration|time)|snapshot|sort|starts\-with|static\-base\-uri|stream\-available|string\-?(?:join|length|to\-codepoints)?|subsequence|substring\-?(?:after|before)?|sum|system\-property|tail|timezone\-from\-(?:date(?:Time)?|time)|tokenize|trace|trans(?:form|late)|true|type\-available|unordered|unparsed\-(?:entity|text)?\-?(?:public\-id|uri|available|lines)?|uri\-collection|xml\-to\-json|years?\-from\-(?:date(?:Time)?|duration)|zero\-or\-one)\b/},{begin:/\blocal\:/,end:/\(/,excludeEnd:!0},{begin:/\bzip\:/,end:/(?:zip\-file|(?:xml|html|text|binary)\-entry| (?:update\-)?entries)\b/},{begin:/\b(?:util|db|functx|app|xdmp|xmldb)\:/,end:/\(/,excludeEnd:!0}]},{className:"string",variants:[{begin:/"/,end:/"/,contains:[{begin:/""/,relevance:0}]},{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{className:"comment",begin:"\\(:",end:":\\)",relevance:10,contains:[{className:"doctag",begin:"@\\w+"}]},{className:"meta",begin:/%[\w-:]+/},{className:"title",begin:/\bxquery version "[13]\.[01]"\s?(?:encoding ".+")?/,end:/;/},{beginKeywords:"element attribute comment document processing-instruction",end:"{",excludeEnd:!0},{begin:/<([\w\._:\-]+)((\s*.*)=('|").*('|"))?>/,end:/(\/[\w\._:\-]+>)/,subLanguage:"xml",contains:[{begin:"{",end:"}",subLanguage:"xquery"},"self"]}]}}},Jrxr:function(e,t){e.exports=function(e){var t="([a-zA-Z]|\\.[a-zA-Z.])[a-zA-Z0-9._]*";return{name:"R",contains:[e.HASH_COMMENT_MODE,{begin:t,lexemes:t,keywords:{keyword:"function if in break next repeat else for return switch while try tryCatch stop warning require library attach detach source setMethod setGeneric setGroupGeneric setClass ...",literal:"NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10"},relevance:0},{className:"number",begin:"0[xX][0-9a-fA-F]+[Li]?\\b",relevance:0},{className:"number",begin:"\\d+(?:[eE][+\\-]?\\d*)?L\\b",relevance:0},{className:"number",begin:"\\d+\\.(?!\\d)(?:i\\b)?",relevance:0},{className:"number",begin:"\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0},{className:"number",begin:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0},{begin:"`",end:"`",relevance:0},{className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:'"',end:'"'},{begin:"'",end:"'"}]}]}}},KK3C:function(e,t){e.exports=function(e){var t={className:"string",begin:'"',end:'"',contains:[{className:"subst",begin:/\\[tn"\\]/}]},n={className:"number",begin:e.C_NUMBER_RE};return{name:"LSL (Linden Scripting Language)",illegal:":",contains:[t,{className:"comment",variants:[e.COMMENT("//","$"),e.COMMENT("/\\*","\\*/")],relevance:0},n,{className:"section",variants:[{begin:"\\b(?:state|default)\\b"},{begin:"\\b(?:state_(?:entry|exit)|touch(?:_(?:start|end))?|(?:land_)?collision(?:_(?:start|end))?|timer|listen|(?:no_)?sensor|control|(?:not_)?at_(?:rot_)?target|money|email|experience_permissions(?:_denied)?|run_time_permissions|changed|attach|dataserver|moving_(?:start|end)|link_message|(?:on|object)_rez|remote_data|http_re(?:sponse|quest)|path_update|transaction_result)\\b"}]},{className:"built_in",begin:"\\b(?:ll(?:AgentInExperience|(?:Create|DataSize|Delete|KeyCount|Keys|Read|Update)KeyValue|GetExperience(?:Details|ErrorMessage)|ReturnObjectsBy(?:ID|Owner)|Json(?:2List|[GS]etValue|ValueType)|Sin|Cos|Tan|Atan2|Sqrt|Pow|Abs|Fabs|Frand|Floor|Ceil|Round|Vec(?:Mag|Norm|Dist)|Rot(?:Between|2(?:Euler|Fwd|Left|Up))|(?:Euler|Axes)2Rot|Whisper|(?:Region|Owner)?Say|Shout|Listen(?:Control|Remove)?|Sensor(?:Repeat|Remove)?|Detected(?:Name|Key|Owner|Type|Pos|Vel|Grab|Rot|Group|LinkNumber)|Die|Ground|Wind|(?:[GS]et)(?:AnimationOverride|MemoryLimit|PrimMediaParams|ParcelMusicURL|Object(?:Desc|Name)|PhysicsMaterial|Status|Scale|Color|Alpha|Texture|Pos|Rot|Force|Torque)|ResetAnimationOverride|(?:Scale|Offset|Rotate)Texture|(?:Rot)?Target(?:Remove)?|(?:Stop)?MoveToTarget|Apply(?:Rotational)?Impulse|Set(?:KeyframedMotion|ContentType|RegionPos|(?:Angular)?Velocity|Buoyancy|HoverHeight|ForceAndTorque|TimerEvent|ScriptState|Damage|TextureAnim|Sound(?:Queueing|Radius)|Vehicle(?:Type|(?:Float|Vector|Rotation)Param)|(?:Touch|Sit)?Text|Camera(?:Eye|At)Offset|PrimitiveParams|ClickAction|Link(?:Alpha|Color|PrimitiveParams(?:Fast)?|Texture(?:Anim)?|Camera|Media)|RemoteScriptAccessPin|PayPrice|LocalRot)|ScaleByFactor|Get(?:(?:Max|Min)ScaleFactor|ClosestNavPoint|StaticPath|SimStats|Env|PrimitiveParams|Link(?:PrimitiveParams|Number(?:OfSides)?|Key|Name|Media)|HTTPHeader|FreeURLs|Object(?:Details|PermMask|PrimCount)|Parcel(?:MaxPrims|Details|Prim(?:Count|Owners))|Attached(?:List)?|(?:SPMax|Free|Used)Memory|Region(?:Name|TimeDilation|FPS|Corner|AgentCount)|Root(?:Position|Rotation)|UnixTime|(?:Parcel|Region)Flags|(?:Wall|GMT)clock|SimulatorHostname|BoundingBox|GeometricCenter|Creator|NumberOf(?:Prims|NotecardLines|Sides)|Animation(?:List)?|(?:Camera|Local)(?:Pos|Rot)|Vel|Accel|Omega|Time(?:stamp|OfDay)|(?:Object|CenterOf)?Mass|MassMKS|Energy|Owner|(?:Owner)?Key|SunDirection|Texture(?:Offset|Scale|Rot)|Inventory(?:Number|Name|Key|Type|Creator|PermMask)|Permissions(?:Key)?|StartParameter|List(?:Length|EntryType)|Date|Agent(?:Size|Info|Language|List)|LandOwnerAt|NotecardLine|Script(?:Name|State))|(?:Get|Reset|GetAndReset)Time|PlaySound(?:Slave)?|LoopSound(?:Master|Slave)?|(?:Trigger|Stop|Preload)Sound|(?:(?:Get|Delete)Sub|Insert)String|To(?:Upper|Lower)|Give(?:InventoryList|Money)|RezObject|(?:Stop)?LookAt|Sleep|CollisionFilter|(?:Take|Release)Controls|DetachFromAvatar|AttachToAvatar(?:Temp)?|InstantMessage|(?:GetNext)?Email|StopHover|MinEventDelay|RotLookAt|String(?:Length|Trim)|(?:Start|Stop)Animation|TargetOmega|Request(?:Experience)?Permissions|(?:Create|Break)Link|BreakAllLinks|(?:Give|Remove)Inventory|Water|PassTouches|Request(?:Agent|Inventory)Data|TeleportAgent(?:Home|GlobalCoords)?|ModifyLand|CollisionSound|ResetScript|MessageLinked|PushObject|PassCollisions|AxisAngle2Rot|Rot2(?:Axis|Angle)|A(?:cos|sin)|AngleBetween|AllowInventoryDrop|SubStringIndex|List2(?:CSV|Integer|Json|Float|String|Key|Vector|Rot|List(?:Strided)?)|DeleteSubList|List(?:Statistics|Sort|Randomize|(?:Insert|Find|Replace)List)|EdgeOfWorld|AdjustSoundVolume|Key2Name|TriggerSoundLimited|EjectFromLand|(?:CSV|ParseString)2List|OverMyLand|SameGroup|UnSit|Ground(?:Slope|Normal|Contour)|GroundRepel|(?:Set|Remove)VehicleFlags|SitOnLink|(?:AvatarOn)?(?:Link)?SitTarget|Script(?:Danger|Profiler)|Dialog|VolumeDetect|ResetOtherScript|RemoteLoadScriptPin|(?:Open|Close)RemoteDataChannel|SendRemoteData|RemoteDataReply|(?:Integer|String)ToBase64|XorBase64|Log(?:10)?|Base64To(?:String|Integer)|ParseStringKeepNulls|RezAtRoot|RequestSimulatorData|ForceMouselook|(?:Load|Release|(?:E|Une)scape)URL|ParcelMedia(?:CommandList|Query)|ModPow|MapDestination|(?:RemoveFrom|AddTo|Reset)Land(?:Pass|Ban)List|(?:Set|Clear)CameraParams|HTTP(?:Request|Response)|TextBox|DetectedTouch(?:UV|Face|Pos|(?:N|Bin)ormal|ST)|(?:MD5|SHA1|DumpList2)String|Request(?:Secure)?URL|Clear(?:Prim|Link)Media|(?:Link)?ParticleSystem|(?:Get|Request)(?:Username|DisplayName)|RegionSayTo|CastRay|GenerateKey|TransferLindenDollars|ManageEstateAccess|(?:Create|Delete)Character|ExecCharacterCmd|Evade|FleeFrom|NavigateTo|PatrolPoints|Pursue|UpdateCharacter|WanderWithin))\\b"},{className:"literal",variants:[{begin:"\\b(?:PI|TWO_PI|PI_BY_TWO|DEG_TO_RAD|RAD_TO_DEG|SQRT2)\\b"},{begin:"\\b(?:XP_ERROR_(?:EXPERIENCES_DISABLED|EXPERIENCE_(?:DISABLED|SUSPENDED)|INVALID_(?:EXPERIENCE|PARAMETERS)|KEY_NOT_FOUND|MATURITY_EXCEEDED|NONE|NOT_(?:FOUND|PERMITTED(?:_LAND)?)|NO_EXPERIENCE|QUOTA_EXCEEDED|RETRY_UPDATE|STORAGE_EXCEPTION|STORE_DISABLED|THROTTLED|UNKNOWN_ERROR)|JSON_APPEND|STATUS_(?:PHYSICS|ROTATE_[XYZ]|PHANTOM|SANDBOX|BLOCK_GRAB(?:_OBJECT)?|(?:DIE|RETURN)_AT_EDGE|CAST_SHADOWS|OK|MALFORMED_PARAMS|TYPE_MISMATCH|BOUNDS_ERROR|NOT_(?:FOUND|SUPPORTED)|INTERNAL_ERROR|WHITELIST_FAILED)|AGENT(?:_(?:BY_(?:LEGACY_|USER)NAME|FLYING|ATTACHMENTS|SCRIPTED|MOUSELOOK|SITTING|ON_OBJECT|AWAY|WALKING|IN_AIR|TYPING|CROUCHING|BUSY|ALWAYS_RUN|AUTOPILOT|LIST_(?:PARCEL(?:_OWNER)?|REGION)))?|CAMERA_(?:PITCH|DISTANCE|BEHINDNESS_(?:ANGLE|LAG)|(?:FOCUS|POSITION)(?:_(?:THRESHOLD|LOCKED|LAG))?|FOCUS_OFFSET|ACTIVE)|ANIM_ON|LOOP|REVERSE|PING_PONG|SMOOTH|ROTATE|SCALE|ALL_SIDES|LINK_(?:ROOT|SET|ALL_(?:OTHERS|CHILDREN)|THIS)|ACTIVE|PASS(?:IVE|_(?:ALWAYS|IF_NOT_HANDLED|NEVER))|SCRIPTED|CONTROL_(?:FWD|BACK|(?:ROT_)?(?:LEFT|RIGHT)|UP|DOWN|(?:ML_)?LBUTTON)|PERMISSION_(?:RETURN_OBJECTS|DEBIT|OVERRIDE_ANIMATIONS|SILENT_ESTATE_MANAGEMENT|TAKE_CONTROLS|TRIGGER_ANIMATION|ATTACH|CHANGE_LINKS|(?:CONTROL|TRACK)_CAMERA|TELEPORT)|INVENTORY_(?:TEXTURE|SOUND|OBJECT|SCRIPT|LANDMARK|CLOTHING|NOTECARD|BODYPART|ANIMATION|GESTURE|ALL|NONE)|CHANGED_(?:INVENTORY|COLOR|SHAPE|SCALE|TEXTURE|LINK|ALLOWED_DROP|OWNER|REGION(?:_START)?|TELEPORT|MEDIA)|OBJECT_(?:CLICK_ACTION|HOVER_HEIGHT|LAST_OWNER_ID|(?:PHYSICS|SERVER|STREAMING)_COST|UNKNOWN_DETAIL|CHARACTER_TIME|PHANTOM|PHYSICS|TEMP_(?:ATTACHED|ON_REZ)|NAME|DESC|POS|PRIM_(?:COUNT|EQUIVALENCE)|RETURN_(?:PARCEL(?:_OWNER)?|REGION)|REZZER_KEY|ROO?T|VELOCITY|OMEGA|OWNER|GROUP(?:_TAG)?|CREATOR|ATTACHED_(?:POINT|SLOTS_AVAILABLE)|RENDER_WEIGHT|(?:BODY_SHAPE|PATHFINDING)_TYPE|(?:RUNNING|TOTAL)_SCRIPT_COUNT|TOTAL_INVENTORY_COUNT|SCRIPT_(?:MEMORY|TIME))|TYPE_(?:INTEGER|FLOAT|STRING|KEY|VECTOR|ROTATION|INVALID)|(?:DEBUG|PUBLIC)_CHANNEL|ATTACH_(?:AVATAR_CENTER|CHEST|HEAD|BACK|PELVIS|MOUTH|CHIN|NECK|NOSE|BELLY|[LR](?:SHOULDER|HAND|FOOT|EAR|EYE|[UL](?:ARM|LEG)|HIP)|(?:LEFT|RIGHT)_PEC|HUD_(?:CENTER_[12]|TOP_(?:RIGHT|CENTER|LEFT)|BOTTOM(?:_(?:RIGHT|LEFT))?)|[LR]HAND_RING1|TAIL_(?:BASE|TIP)|[LR]WING|FACE_(?:JAW|[LR]EAR|[LR]EYE|TOUNGE)|GROIN|HIND_[LR]FOOT)|LAND_(?:LEVEL|RAISE|LOWER|SMOOTH|NOISE|REVERT)|DATA_(?:ONLINE|NAME|BORN|SIM_(?:POS|STATUS|RATING)|PAYINFO)|PAYMENT_INFO_(?:ON_FILE|USED)|REMOTE_DATA_(?:CHANNEL|REQUEST|REPLY)|PSYS_(?:PART_(?:BF_(?:ZERO|ONE(?:_MINUS_(?:DEST_COLOR|SOURCE_(ALPHA|COLOR)))?|DEST_COLOR|SOURCE_(ALPHA|COLOR))|BLEND_FUNC_(DEST|SOURCE)|FLAGS|(?:START|END)_(?:COLOR|ALPHA|SCALE|GLOW)|MAX_AGE|(?:RIBBON|WIND|INTERP_(?:COLOR|SCALE)|BOUNCE|FOLLOW_(?:SRC|VELOCITY)|TARGET_(?:POS|LINEAR)|EMISSIVE)_MASK)|SRC_(?:MAX_AGE|PATTERN|ANGLE_(?:BEGIN|END)|BURST_(?:RATE|PART_COUNT|RADIUS|SPEED_(?:MIN|MAX))|ACCEL|TEXTURE|TARGET_KEY|OMEGA|PATTERN_(?:DROP|EXPLODE|ANGLE(?:_CONE(?:_EMPTY)?)?)))|VEHICLE_(?:REFERENCE_FRAME|TYPE_(?:NONE|SLED|CAR|BOAT|AIRPLANE|BALLOON)|(?:LINEAR|ANGULAR)_(?:FRICTION_TIMESCALE|MOTOR_DIRECTION)|LINEAR_MOTOR_OFFSET|HOVER_(?:HEIGHT|EFFICIENCY|TIMESCALE)|BUOYANCY|(?:LINEAR|ANGULAR)_(?:DEFLECTION_(?:EFFICIENCY|TIMESCALE)|MOTOR_(?:DECAY_)?TIMESCALE)|VERTICAL_ATTRACTION_(?:EFFICIENCY|TIMESCALE)|BANKING_(?:EFFICIENCY|MIX|TIMESCALE)|FLAG_(?:NO_DEFLECTION_UP|LIMIT_(?:ROLL_ONLY|MOTOR_UP)|HOVER_(?:(?:WATER|TERRAIN|UP)_ONLY|GLOBAL_HEIGHT)|MOUSELOOK_(?:STEER|BANK)|CAMERA_DECOUPLED))|PRIM_(?:ALLOW_UNSIT|ALPHA_MODE(?:_(?:BLEND|EMISSIVE|MASK|NONE))?|NORMAL|SPECULAR|TYPE(?:_(?:BOX|CYLINDER|PRISM|SPHERE|TORUS|TUBE|RING|SCULPT))?|HOLE_(?:DEFAULT|CIRCLE|SQUARE|TRIANGLE)|MATERIAL(?:_(?:STONE|METAL|GLASS|WOOD|FLESH|PLASTIC|RUBBER))?|SHINY_(?:NONE|LOW|MEDIUM|HIGH)|BUMP_(?:NONE|BRIGHT|DARK|WOOD|BARK|BRICKS|CHECKER|CONCRETE|TILE|STONE|DISKS|GRAVEL|BLOBS|SIDING|LARGETILE|STUCCO|SUCTION|WEAVE)|TEXGEN_(?:DEFAULT|PLANAR)|SCRIPTED_SIT_ONLY|SCULPT_(?:TYPE_(?:SPHERE|TORUS|PLANE|CYLINDER|MASK)|FLAG_(?:MIRROR|INVERT))|PHYSICS(?:_(?:SHAPE_(?:CONVEX|NONE|PRIM|TYPE)))?|(?:POS|ROT)_LOCAL|SLICE|TEXT|FLEXIBLE|POINT_LIGHT|TEMP_ON_REZ|PHANTOM|POSITION|SIT_TARGET|SIZE|ROTATION|TEXTURE|NAME|OMEGA|DESC|LINK_TARGET|COLOR|BUMP_SHINY|FULLBRIGHT|TEXGEN|GLOW|MEDIA_(?:ALT_IMAGE_ENABLE|CONTROLS|(?:CURRENT|HOME)_URL|AUTO_(?:LOOP|PLAY|SCALE|ZOOM)|FIRST_CLICK_INTERACT|(?:WIDTH|HEIGHT)_PIXELS|WHITELIST(?:_ENABLE)?|PERMS_(?:INTERACT|CONTROL)|PARAM_MAX|CONTROLS_(?:STANDARD|MINI)|PERM_(?:NONE|OWNER|GROUP|ANYONE)|MAX_(?:URL_LENGTH|WHITELIST_(?:SIZE|COUNT)|(?:WIDTH|HEIGHT)_PIXELS)))|MASK_(?:BASE|OWNER|GROUP|EVERYONE|NEXT)|PERM_(?:TRANSFER|MODIFY|COPY|MOVE|ALL)|PARCEL_(?:MEDIA_COMMAND_(?:STOP|PAUSE|PLAY|LOOP|TEXTURE|URL|TIME|AGENT|UNLOAD|AUTO_ALIGN|TYPE|SIZE|DESC|LOOP_SET)|FLAG_(?:ALLOW_(?:FLY|(?:GROUP_)?SCRIPTS|LANDMARK|TERRAFORM|DAMAGE|CREATE_(?:GROUP_)?OBJECTS)|USE_(?:ACCESS_(?:GROUP|LIST)|BAN_LIST|LAND_PASS_LIST)|LOCAL_SOUND_ONLY|RESTRICT_PUSHOBJECT|ALLOW_(?:GROUP|ALL)_OBJECT_ENTRY)|COUNT_(?:TOTAL|OWNER|GROUP|OTHER|SELECTED|TEMP)|DETAILS_(?:NAME|DESC|OWNER|GROUP|AREA|ID|SEE_AVATARS))|LIST_STAT_(?:MAX|MIN|MEAN|MEDIAN|STD_DEV|SUM(?:_SQUARES)?|NUM_COUNT|GEOMETRIC_MEAN|RANGE)|PAY_(?:HIDE|DEFAULT)|REGION_FLAG_(?:ALLOW_DAMAGE|FIXED_SUN|BLOCK_TERRAFORM|SANDBOX|DISABLE_(?:COLLISIONS|PHYSICS)|BLOCK_FLY|ALLOW_DIRECT_TELEPORT|RESTRICT_PUSHOBJECT)|HTTP_(?:METHOD|MIMETYPE|BODY_(?:MAXLENGTH|TRUNCATED)|CUSTOM_HEADER|PRAGMA_NO_CACHE|VERBOSE_THROTTLE|VERIFY_CERT)|SIT_(?:INVALID_(?:AGENT|LINK_OBJECT)|NO(?:T_EXPERIENCE|_(?:ACCESS|EXPERIENCE_PERMISSION|SIT_TARGET)))|STRING_(?:TRIM(?:_(?:HEAD|TAIL))?)|CLICK_ACTION_(?:NONE|TOUCH|SIT|BUY|PAY|OPEN(?:_MEDIA)?|PLAY|ZOOM)|TOUCH_INVALID_FACE|PROFILE_(?:NONE|SCRIPT_MEMORY)|RC_(?:DATA_FLAGS|DETECT_PHANTOM|GET_(?:LINK_NUM|NORMAL|ROOT_KEY)|MAX_HITS|REJECT_(?:TYPES|AGENTS|(?:NON)?PHYSICAL|LAND))|RCERR_(?:CAST_TIME_EXCEEDED|SIM_PERF_LOW|UNKNOWN)|ESTATE_ACCESS_(?:ALLOWED_(?:AGENT|GROUP)_(?:ADD|REMOVE)|BANNED_AGENT_(?:ADD|REMOVE))|DENSITY|FRICTION|RESTITUTION|GRAVITY_MULTIPLIER|KFM_(?:COMMAND|CMD_(?:PLAY|STOP|PAUSE)|MODE|FORWARD|LOOP|PING_PONG|REVERSE|DATA|ROTATION|TRANSLATION)|ERR_(?:GENERIC|PARCEL_PERMISSIONS|MALFORMED_PARAMS|RUNTIME_PERMISSIONS|THROTTLED)|CHARACTER_(?:CMD_(?:(?:SMOOTH_)?STOP|JUMP)|DESIRED_(?:TURN_)?SPEED|RADIUS|STAY_WITHIN_PARCEL|LENGTH|ORIENTATION|ACCOUNT_FOR_SKIPPED_FRAMES|AVOIDANCE_MODE|TYPE(?:_(?:[ABCD]|NONE))?|MAX_(?:DECEL|TURN_RADIUS|(?:ACCEL|SPEED)))|PURSUIT_(?:OFFSET|FUZZ_FACTOR|GOAL_TOLERANCE|INTERCEPT)|REQUIRE_LINE_OF_SIGHT|FORCE_DIRECT_PATH|VERTICAL|HORIZONTAL|AVOID_(?:CHARACTERS|DYNAMIC_OBSTACLES|NONE)|PU_(?:EVADE_(?:HIDDEN|SPOTTED)|FAILURE_(?:DYNAMIC_PATHFINDING_DISABLED|INVALID_(?:GOAL|START)|NO_(?:NAVMESH|VALID_DESTINATION)|OTHER|TARGET_GONE|(?:PARCEL_)?UNREACHABLE)|(?:GOAL|SLOWDOWN_DISTANCE)_REACHED)|TRAVERSAL_TYPE(?:_(?:FAST|NONE|SLOW))?|CONTENT_TYPE_(?:ATOM|FORM|HTML|JSON|LLSD|RSS|TEXT|XHTML|XML)|GCNP_(?:RADIUS|STATIC)|(?:PATROL|WANDER)_PAUSE_AT_WAYPOINTS|OPT_(?:AVATAR|CHARACTER|EXCLUSION_VOLUME|LEGACY_LINKSET|MATERIAL_VOLUME|OTHER|STATIC_OBSTACLE|WALKABLE)|SIM_STAT_PCT_CHARS_STEPPED)\\b"},{begin:"\\b(?:FALSE|TRUE)\\b"},{begin:"\\b(?:ZERO_ROTATION)\\b"},{begin:"\\b(?:EOF|JSON_(?:ARRAY|DELETE|FALSE|INVALID|NULL|NUMBER|OBJECT|STRING|TRUE)|NULL_KEY|TEXTURE_(?:BLANK|DEFAULT|MEDIA|PLYWOOD|TRANSPARENT)|URL_REQUEST_(?:GRANTED|DENIED))\\b"},{begin:"\\b(?:ZERO_VECTOR|TOUCH_INVALID_(?:TEXCOORD|VECTOR))\\b"}]},{className:"type",begin:"\\b(?:integer|float|string|key|vector|quaternion|rotation|list)\\b"}]}}},KQfT:function(e,t){e.exports=function(e){var t={begin:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},n={className:"meta",variants:[{begin:/<\?php/,relevance:10},{begin:/<\?[=]?/},{begin:/\?>/}]},a={className:"string",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:'b"',end:'"'},{begin:"b'",end:"'"},e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null})]},r={variants:[e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]},i={keyword:"__CLASS__ __DIR__ __FILE__ __FUNCTION__ __LINE__ __METHOD__ __NAMESPACE__ __TRAIT__ die echo exit include include_once print require require_once array abstract and as binary bool boolean break callable case catch class clone const continue declare default do double else elseif empty enddeclare endfor endforeach endif endswitch endwhile eval extends final finally float for foreach from global goto if implements instanceof insteadof int integer interface isset iterable list new object or private protected public real return string switch throw trait try unset use var void while xor yield",literal:"false null true",built_in:"Error|0 AppendIterator ArgumentCountError ArithmeticError ArrayIterator ArrayObject AssertionError BadFunctionCallException BadMethodCallException CachingIterator CallbackFilterIterator CompileError Countable DirectoryIterator DivisionByZeroError DomainException EmptyIterator ErrorException Exception FilesystemIterator FilterIterator GlobIterator InfiniteIterator InvalidArgumentException IteratorIterator LengthException LimitIterator LogicException MultipleIterator NoRewindIterator OutOfBoundsException OutOfRangeException OuterIterator OverflowException ParentIterator ParseError RangeException RecursiveArrayIterator RecursiveCachingIterator RecursiveCallbackFilterIterator RecursiveDirectoryIterator RecursiveFilterIterator RecursiveIterator RecursiveIteratorIterator RecursiveRegexIterator RecursiveTreeIterator RegexIterator RuntimeException SeekableIterator SplDoublyLinkedList SplFileInfo SplFileObject SplFixedArray SplHeap SplMaxHeap SplMinHeap SplObjectStorage SplObserver SplObserver SplPriorityQueue SplQueue SplStack SplSubject SplSubject SplTempFileObject TypeError UnderflowException UnexpectedValueException ArrayAccess Closure Generator Iterator IteratorAggregate Serializable Throwable Traversable WeakReference Directory __PHP_Incomplete_Class parent php_user_filter self static stdClass"};return{aliases:["php","php3","php4","php5","php6","php7"],case_insensitive:!0,keywords:i,contains:[e.HASH_COMMENT_MODE,e.COMMENT("//","$",{contains:[n]}),e.COMMENT("/\\*","\\*/",{contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.COMMENT("__halt_compiler.+?;",!1,{endsWithParent:!0,keywords:"__halt_compiler",lexemes:e.UNDERSCORE_IDENT_RE}),{className:"string",begin:/<<<['"]?\w+['"]?$/,end:/^\w+;?$/,contains:[e.BACKSLASH_ESCAPE,{className:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]}]},n,{className:"keyword",begin:/\$this\b/},t,{begin:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{className:"function",beginKeywords:"fn function",end:/[;{]/,excludeEnd:!0,illegal:"[$%\\[]",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:i,contains:["self",t,e.C_BLOCK_COMMENT_MODE,a,r]}]},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,illegal:/[:\(\$"]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",end:";",illegal:/[\.']/,contains:[e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"use",end:";",contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"=>"},a,r]}}},KUpP:function(e,t){e.exports=function(e){var t="(_*[ui](8|16|32|64|128))?",n="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|[=!]~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~|]|//|//=|&[-+*]=?|&\\*\\*|\\[\\][=?]?",a={keyword:"abstract alias annotation as as? asm begin break case class def do else elsif end ensure enum extend for fun if include instance_sizeof is_a? lib macro module next nil? of out pointerof private protected rescue responds_to? return require select self sizeof struct super then type typeof union uninitialized unless until verbatim when while with yield __DIR__ __END_LINE__ __FILE__ __LINE__",literal:"false nil true"},r={className:"subst",begin:"#{",end:"}",keywords:a},i={className:"template-variable",variants:[{begin:"\\{\\{",end:"\\}\\}"},{begin:"\\{%",end:"%\\}"}],keywords:a};function o(e,t){var n=[{begin:e,end:t}];return n[0].contains=n,n}var s={className:"string",contains:[e.BACKSLASH_ESCAPE,r],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:"%[Qwi]?\\(",end:"\\)",contains:o("\\(","\\)")},{begin:"%[Qwi]?\\[",end:"\\]",contains:o("\\[","\\]")},{begin:"%[Qwi]?{",end:"}",contains:o("{","}")},{begin:"%[Qwi]?<",end:">",contains:o("<",">")},{begin:"%[Qwi]?\\|",end:"\\|"},{begin:/<<-\w+$/,end:/^\s*\w+$/}],relevance:0},l={className:"string",variants:[{begin:"%q\\(",end:"\\)",contains:o("\\(","\\)")},{begin:"%q\\[",end:"\\]",contains:o("\\[","\\]")},{begin:"%q{",end:"}",contains:o("{","}")},{begin:"%q<",end:">",contains:o("<",">")},{begin:"%q\\|",end:"\\|"},{begin:/<<-'\w+'$/,end:/^\s*\w+$/}],relevance:0},c={begin:"(?!%})("+e.RE_STARTERS_RE+"|\\n|\\b(case|if|select|unless|until|when|while)\\b)\\s*",keywords:"case if select unless until when while",contains:[{className:"regexp",contains:[e.BACKSLASH_ESCAPE,r],variants:[{begin:"//[a-z]*",relevance:0},{begin:"/(?!\\/)",end:"/[a-z]*"}]}],relevance:0},_=[i,s,l,{className:"regexp",contains:[e.BACKSLASH_ESCAPE,r],variants:[{begin:"%r\\(",end:"\\)",contains:o("\\(","\\)")},{begin:"%r\\[",end:"\\]",contains:o("\\[","\\]")},{begin:"%r{",end:"}",contains:o("{","}")},{begin:"%r<",end:">",contains:o("<",">")},{begin:"%r\\|",end:"\\|"}],relevance:0},c,{className:"meta",begin:"@\\[",end:"\\]",contains:[e.inherit(e.QUOTE_STRING_MODE,{className:"meta-string"})]},e.HASH_COMMENT_MODE,{className:"class",beginKeywords:"class module struct",end:"$|;",illegal:/=/,contains:[e.HASH_COMMENT_MODE,e.inherit(e.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{begin:"<"}]},{className:"class",beginKeywords:"lib enum union",end:"$|;",illegal:/=/,contains:[e.HASH_COMMENT_MODE,e.inherit(e.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"})],relevance:10},{beginKeywords:"annotation",end:"$|;",illegal:/=/,contains:[e.HASH_COMMENT_MODE,e.inherit(e.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"})],relevance:10},{className:"function",beginKeywords:"def",end:/\B\b/,contains:[e.inherit(e.TITLE_MODE,{begin:n,endsParent:!0})]},{className:"function",beginKeywords:"fun macro",end:/\B\b/,contains:[e.inherit(e.TITLE_MODE,{begin:n,endsParent:!0})],relevance:5},{className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"(\\!|\\?)?:",relevance:0},{className:"symbol",begin:":",contains:[s,{begin:n}],relevance:0},{className:"number",variants:[{begin:"\\b0b([01_]+)"+t},{begin:"\\b0o([0-7_]+)"+t},{begin:"\\b0x([A-Fa-f0-9_]+)"+t},{begin:"\\b([1-9][0-9_]*[0-9]|[0-9])(\\.[0-9][0-9_]*)?([eE]_*[-+]?[0-9_]*)?(_*f(32|64))?(?!_)"},{begin:"\\b([1-9][0-9_]*|0)"+t}],relevance:0}];return r.contains=_,i.contains=_.slice(1),{name:"Crystal",aliases:["cr"],lexemes:"[a-zA-Z_]\\w*[!?=]?",keywords:a,contains:_}}},Kjk6:function(e,t){e.exports=function(e){var t={keyword:"#available #colorLiteral #column #else #elseif #endif #file #fileLiteral #function #if #imageLiteral #line #selector #sourceLocation _ __COLUMN__ __FILE__ __FUNCTION__ __LINE__ Any as as! as? associatedtype associativity break case catch class continue convenience default defer deinit didSet do dynamic dynamicType else enum extension fallthrough false fileprivate final for func get guard if import in indirect infix init inout internal is lazy left let mutating nil none nonmutating open operator optional override postfix precedence prefix private protocol Protocol public repeat required rethrows return right self Self set static struct subscript super switch throw throws true try try! try? Type typealias unowned var weak where while willSet",literal:"true false nil",built_in:"abs advance alignof alignofValue anyGenerator assert assertionFailure bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c compactMap contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal fatalError filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare map max maxElement min minElement numericCast overlaps partition posix precondition preconditionFailure print println quickSort readLine reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith stride strideof strideofValue swap toString transcode underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers withUnsafePointer withUnsafePointers withVaList zip"},n=e.COMMENT("/\\*","\\*/",{contains:["self"]}),a={className:"subst",begin:/\\\(/,end:"\\)",keywords:t,contains:[]},r={className:"string",contains:[e.BACKSLASH_ESCAPE,a],variants:[{begin:/"""/,end:/"""/},{begin:/"/,end:/"/}]},i={className:"number",begin:"\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b",relevance:0};return a.contains=[i],{name:"Swift",keywords:t,contains:[r,e.C_LINE_COMMENT_MODE,n,{className:"type",begin:"\\b[A-Z][\\wÀ-ʸ']*[!?]"},{className:"type",begin:"\\b[A-Z][\\wÀ-ʸ']*",relevance:0},i,{className:"function",beginKeywords:"func",end:"{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][0-9A-Za-z$_]*/}),{begin://},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:t,contains:["self",i,r,e.C_BLOCK_COMMENT_MODE,{begin:":"}],illegal:/["']/}],illegal:/\[|%/},{className:"class",beginKeywords:"struct protocol class extension enum",keywords:t,end:"\\{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/})]},{className:"meta",begin:"(@discardableResult|@warn_unused_result|@exported|@lazy|@noescape|@NSCopying|@NSManaged|@objc|@objcMembers|@convention|@required|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix|@autoclosure|@testable|@available|@nonobjc|@NSApplicationMain|@UIApplicationMain|@dynamicMemberLookup|@propertyWrapper)"},{beginKeywords:"import",end:/$/,contains:[e.C_LINE_COMMENT_MODE,n]}]}}},KpOm:function(e,t){e.exports=function(e){var t={className:"number",relevance:0,variants:[{begin:/([\+\-]+)?[\d]+_[\d_]+/},{begin:e.NUMBER_RE}]},n=e.COMMENT();n.variants=[{begin:/;/,end:/$/},{begin:/#/,end:/$/}];var a={className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{begin:/\$\{(.*?)}/}]},r={className:"literal",begin:/\bon|off|true|false|yes|no\b/},i={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}]};return{name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/,contains:[n,{className:"section",begin:/\[+/,end:/\]+/},{begin:/^[a-z0-9\[\]_\.-]+(?=\s*=\s*)/,className:"attr",starts:{end:/$/,contains:[n,{begin:/\[/,end:/\]/,contains:[n,r,a,i,t,"self"],relevance:0},r,a,i,t]}}]}}},KyKy:function(e,t){e.exports=function(e){return{name:"FIX",contains:[{begin:/[^\u2401\u0001]+/,end:/[\u2401\u0001]/,excludeEnd:!0,returnBegin:!0,returnEnd:!1,contains:[{begin:/([^\u2401\u0001=]+)/,end:/=([^\u2401\u0001=]+)/,returnEnd:!0,returnBegin:!1,className:"attr"},{begin:/=/,end:/([\u2401\u0001])/,excludeEnd:!0,excludeBegin:!0,className:"string"}]}],case_insensitive:!0}}},LOdI:function(e,t){e.exports=function(e){var t="([ui](8|16|32|64|128|size)|f(32|64))?",n="drop i8 i16 i32 i64 i128 isize u8 u16 u32 u64 u128 usize f32 f64 str char bool Box Option Result String Vec Copy Send Sized Sync Drop Fn FnMut FnOnce ToOwned Clone Debug PartialEq PartialOrd Eq Ord AsRef AsMut Into From Default Iterator Extend IntoIterator DoubleEndedIterator ExactSizeIterator SliceConcatExt ToString assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! debug_assert! debug_assert_eq! env! panic! file! format! format_args! include_bin! include_str! line! local_data_key! module_path! option_env! print! println! select! stringify! try! unimplemented! unreachable! vec! write! writeln! macro_rules! assert_ne! debug_assert_ne!";return{name:"Rust",aliases:["rs"],keywords:{keyword:"abstract as async await become box break const continue crate do dyn else enum extern false final fn for if impl in let loop macro match mod move mut override priv pub ref return self Self static struct super trait true try type typeof unsafe unsized use virtual where while yield",literal:"true false Some None Ok Err",built_in:n},lexemes:e.IDENT_RE+"!?",illegal:""}]}}},LYNF:function(e,t,n){"use strict";var a=n("OH9c");e.exports=function(e,t,n,r,i){var o=new Error(e);return a(o,t,n,r,i)}},LhHj:function(e,t){e.exports=function(e){var t={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger case default function var with then unless until loop of by when and or is isnt not it that otherwise from to til fallthrough super case default function var void const let enum export import native list map __hasProp __extends __slice __bind __indexOf",literal:"true false null undefined yes no on off it that void",built_in:"npm require console print module global window document"},n="[A-Za-z$_](?:-[0-9A-Za-z$_]|[0-9A-Za-z$_])*",a=e.inherit(e.TITLE_MODE,{begin:n}),r={className:"subst",begin:/#\{/,end:/}/,keywords:t},i={className:"subst",begin:/#[A-Za-z$_]/,end:/(?:\-[0-9A-Za-z$_]|[0-9A-Za-z$_])*/,keywords:t},o=[e.BINARY_NUMBER_MODE,{className:"number",begin:"(\\b0[xX][a-fA-F0-9_]+)|(\\b\\d(\\d|_\\d)*(\\.(\\d(\\d|_\\d)*)?)?(_*[eE]([-+]\\d(_\\d|\\d)*)?)?[_a-z]*)",relevance:0,starts:{end:"(\\s*/)?",relevance:0}},{className:"string",variants:[{begin:/'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE]},{begin:/'/,end:/'/,contains:[e.BACKSLASH_ESCAPE]},{begin:/"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,r,i]},{begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,r,i]},{begin:/\\/,end:/(\s|$)/,excludeEnd:!0}]},{className:"regexp",variants:[{begin:"//",end:"//[gim]*",contains:[r,e.HASH_COMMENT_MODE]},{begin:/\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W)/}]},{begin:"@"+n},{begin:"``",end:"``",excludeBegin:!0,excludeEnd:!0,subLanguage:"javascript"}];r.contains=o;var s={className:"params",begin:"\\(",returnBegin:!0,contains:[{begin:/\(/,end:/\)/,keywords:t,contains:["self"].concat(o)}]};return{name:"LiveScript",aliases:["ls"],keywords:t,illegal:/\/\*/,contains:o.concat([e.COMMENT("\\/\\*","\\*\\/"),e.HASH_COMMENT_MODE,{begin:"(#=>|=>|\\|>>|-?->|\\!->)"},{className:"function",contains:[a,s],returnBegin:!0,variants:[{begin:"("+n+"\\s*(?:=|:=)\\s*)?(\\(.*\\))?\\s*\\B\\->\\*?",end:"\\->\\*?"},{begin:"("+n+"\\s*(?:=|:=)\\s*)?!?(\\(.*\\))?\\s*\\B[-~]{1,2}>\\*?",end:"[-~]{1,2}>\\*?"},{begin:"("+n+"\\s*(?:=|:=)\\s*)?(\\(.*\\))?\\s*\\B!?[-~]{1,2}>\\*?",end:"!?[-~]{1,2}>\\*?"}]},{className:"class",beginKeywords:"class",end:"$",illegal:/[:="\[\]]/,contains:[{beginKeywords:"extends",endsWithParent:!0,illegal:/[:="\[\]]/,contains:[a]},a]},{begin:n+":",end:":",returnBegin:!0,returnEnd:!0,relevance:0}])}}},Ll1m:function(e,t){e.exports=function(e){return{name:"Inform 7",aliases:["i7"],case_insensitive:!0,keywords:{keyword:"thing room person man woman animal container supporter backdrop door scenery open closed locked inside gender is are say understand kind of rule"},contains:[{className:"string",begin:'"',end:'"',relevance:0,contains:[{className:"subst",begin:"\\[",end:"\\]"}]},{className:"section",begin:/^(Volume|Book|Part|Chapter|Section|Table)\b/,end:"$"},{begin:/^(Check|Carry out|Report|Instead of|To|Rule|When|Before|After)\b/,end:":",contains:[{begin:"\\(This",end:"\\)"}]},{className:"comment",begin:"\\[",end:"\\]",contains:["self"]}]}}},Lmem:function(e,t,n){"use strict";e.exports=function(e){return!(!e||!e.__CANCEL__)}},Lns6:function(e,t){e.exports=function(e){var t={className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{begin:"{{",end:"}}"},{begin:"%{",end:"}"}]}]},n={className:"number",begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b"};return{name:"YAML",case_insensitive:!0,aliases:["yml","YAML"],contains:[{className:"attr",variants:[{begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---s*$",relevance:10},{className:"string",begin:"[\\|>]([0-9]?[+-])?[ ]*\\n( *)[\\S ]+\\n(\\2[\\S ]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!"+e.UNDERSCORE_IDENT_RE},{className:"type",begin:"!!"+e.UNDERSCORE_IDENT_RE},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"\\-(?=[ ]|$)",relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:"true false yes no null",keywords:{literal:"true false yes no null"}},n,{className:"number",begin:e.C_NUMBER_RE+"\\b"},t]}}},Lo5G:function(e,t){e.exports=function(e){return{name:"Protocol Buffers",keywords:{keyword:"package import option optional required repeated group oneof",built_in:"double float int32 int64 uint32 uint64 sint32 sint64 fixed32 fixed64 sfixed32 sfixed64 bool string bytes",literal:"true false"},contains:[e.QUOTE_STRING_MODE,e.NUMBER_MODE,e.C_LINE_COMMENT_MODE,{className:"class",beginKeywords:"message enum service",end:/\{/,illegal:/\n/,contains:[e.inherit(e.TITLE_MODE,{starts:{endsWithParent:!0,excludeEnd:!0}})]},{className:"function",beginKeywords:"rpc",end:/[{;]/,excludeEnd:!0,keywords:"rpc returns"},{begin:/^\s*[A-Z_]+/,end:/\s*=/,excludeEnd:!0}]}}},LptB:function(e,t){e.exports=function(e){return{name:"Leaf",contains:[{className:"function",begin:"#+[A-Za-z_0-9]*\\(",end:" {",returnBegin:!0,excludeEnd:!0,contains:[{className:"keyword",begin:"#+"},{className:"title",begin:"[A-Za-z_][A-Za-z_0-9]*"},{className:"params",begin:"\\(",end:"\\)",endsParent:!0,contains:[{className:"string",begin:'"',end:'"'},{className:"variable",begin:"[A-Za-z_][A-Za-z_0-9]*"}]}]}]}}},MF4s:function(e,t){e.exports=function(e){var t="[A-Za-z_][0-9A-Za-z_]*",n={keyword:"if for while var new function do return void else break",literal:"BackSlash DoubleQuote false ForwardSlash Infinity NaN NewLine null PI SingleQuote Tab TextFormatting true undefined",built_in:"Abs Acos Angle Attachments Area AreaGeodetic Asin Atan Atan2 Average Bearing Boolean Buffer BufferGeodetic Ceil Centroid Clip Console Constrain Contains Cos Count Crosses Cut Date DateAdd DateDiff Day Decode DefaultValue Dictionary Difference Disjoint Distance DistanceGeodetic Distinct DomainCode DomainName Equals Exp Extent Feature FeatureSet FeatureSetByAssociation FeatureSetById FeatureSetByPortalItem FeatureSetByRelationshipName FeatureSetByTitle FeatureSetByUrl Filter First Floor Geometry GroupBy Guid HasKey Hour IIf IndexOf Intersection Intersects IsEmpty IsNan IsSelfIntersecting Length LengthGeodetic Log Max Mean Millisecond Min Minute Month MultiPartToSinglePart Multipoint NextSequenceValue Now Number OrderBy Overlaps Point Polygon Polyline Portal Pow Random Relate Reverse RingIsClockWise Round Second SetGeometry Sin Sort Sqrt Stdev Sum SymmetricDifference Tan Text Timestamp Today ToLocal Top Touches ToUTC TrackCurrentTime TrackGeometryWindow TrackIndex TrackStartTime TrackWindow TypeOf Union UrlEncode Variance Weekday When Within Year "},a={className:"number",variants:[{begin:"\\b(0[bB][01]+)"},{begin:"\\b(0[oO][0-7]+)"},{begin:e.C_NUMBER_RE}],relevance:0},r={className:"subst",begin:"\\$\\{",end:"\\}",keywords:n,contains:[]},i={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,r]};r.contains=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,i,a,e.REGEXP_MODE];var o=r.contains.concat([e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]);return{name:"ArcGIS Arcade",aliases:["arcade"],keywords:n,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,i,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"symbol",begin:"\\$[datastore|feature|layer|map|measure|sourcefeature|sourcelayer|targetfeature|targetlayer|value|view]+"},a,{begin:/[{,]\s*/,relevance:0,contains:[{begin:t+"\\s*:",returnBegin:!0,relevance:0,contains:[{className:"attr",begin:t,relevance:0}]}]},{begin:"("+e.RE_STARTERS_RE+"|\\b(return)\\b)\\s*",keywords:"return",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.REGEXP_MODE,{className:"function",begin:"(\\(.*?\\)|"+t+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:t},{begin:/\(\s*\)/},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,contains:o}]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:t}),{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:o}],illegal:/\[|%/},{begin:/\$[(.]/}],illegal:/#(?!!)/}}},MLWZ:function(e,t,n){"use strict";var a=n("xTJ+");function r(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}e.exports=function(e,t,n){if(!t)return e;var i;if(n)i=n(t);else if(a.isURLSearchParams(t))i=t.toString();else{var o=[];a.forEach(t,(function(e,t){null!=e&&(a.isArray(e)?t+="[]":e=[e],a.forEach(e,(function(e){a.isDate(e)?e=e.toISOString():a.isObject(e)&&(e=JSON.stringify(e)),o.push(r(t)+"="+r(e))})))})),i=o.join("&")}if(i){var s=e.indexOf("#");-1!==s&&(e=e.slice(0,s)),e+=(-1===e.indexOf("?")?"?":"&")+i}return e}},"MQ8/":function(e,t){e.exports=function(e){return{name:"VHDL",case_insensitive:!0,keywords:{keyword:"abs access after alias all and architecture array assert assume assume_guarantee attribute begin block body buffer bus case component configuration constant context cover disconnect downto default else elsif end entity exit fairness file for force function generate generic group guarded if impure in inertial inout is label library linkage literal loop map mod nand new next nor not null of on open or others out package parameter port postponed procedure process property protected pure range record register reject release rem report restrict restrict_guarantee return rol ror select sequence severity shared signal sla sll sra srl strong subtype then to transport type unaffected units until use variable view vmode vprop vunit wait when while with xnor xor",built_in:"boolean bit character integer time delay_length natural positive string bit_vector file_open_kind file_open_status std_logic std_logic_vector unsigned signed boolean_vector integer_vector std_ulogic std_ulogic_vector unresolved_unsigned u_unsigned unresolved_signed u_signed real_vector time_vector",literal:"false true note warning error failure line text side width"},illegal:"{",contains:[e.C_BLOCK_COMMENT_MODE,e.COMMENT("--","$"),e.QUOTE_STRING_MODE,{className:"number",begin:"\\b(\\d(_|\\d)*#\\w+(\\.\\w+)?#([eE][-+]?\\d(_|\\d)*)?|\\d(_|\\d)*(\\.\\d(_|\\d)*)?([eE][-+]?\\d(_|\\d)*)?)",relevance:0},{className:"string",begin:"'(U|X|0|1|Z|W|L|H|-)'",contains:[e.BACKSLASH_ESCAPE]},{className:"symbol",begin:"'[A-Za-z](_?[A-Za-z0-9])*",contains:[e.BACKSLASH_ESCAPE]}]}}},"My+Z":function(e,t){e.exports=function(e){var t="[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",n="false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",a={className:"meta",begin:"@"+t,contains:[{begin:/\(/,end:/\)/,contains:["self"]}]},r={className:"number",begin:"\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",relevance:0};return{name:"Java",aliases:["jsp"],keywords:n,illegal:/<\/|#/,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"class",beginKeywords:"class interface",end:/[{;=]/,excludeEnd:!0,keywords:"class interface",illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"new throw return else",relevance:0},{className:"function",begin:"([À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(<[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(\\s*,\\s*[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*)*>)?\\s+)+"+e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:n,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,keywords:n,relevance:0,contains:[a,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},r,a]}}},NRrW:function(e,t){e.exports=function(e){return{name:"Gherkin",aliases:["feature"],keywords:"Feature Background Ability Business Need Scenario Scenarios Scenario Outline Scenario Template Examples Given And Then But When",contains:[{className:"symbol",begin:"\\*",relevance:0},{className:"meta",begin:"@[^@\\s]+"},{begin:"\\|",end:"\\|\\w*$",contains:[{className:"string",begin:"[^|]+"}]},{className:"variable",begin:"<",end:">"},e.HASH_COMMENT_MODE,{className:"string",begin:'"""',end:'"""'},e.QUOTE_STRING_MODE]}}},NyhX:function(e,t){e.exports=function(e){var t=e.COMMENT("{","}",{contains:["self"]});return{name:"Parser3",subLanguage:"xml",relevance:0,contains:[e.COMMENT("^#","$"),e.COMMENT("\\^rem{","}",{relevance:10,contains:[t]}),{className:"meta",begin:"^@(?:BASE|USE|CLASS|OPTIONS)$",relevance:10},{className:"title",begin:"@[\\w\\-]+\\[[\\w^;\\-]*\\](?:\\[[\\w^;\\-]*\\])?(?:.*)$"},{className:"variable",begin:"\\$\\{?[\\w\\-\\.\\:]+\\}?"},{className:"keyword",begin:"\\^[\\w\\-\\.\\:]+"},{className:"number",begin:"\\^#[0-9a-fA-F]+"},e.C_NUMBER_MODE]}}},OH9c:function(e,t,n){"use strict";e.exports=function(e,t,n,a,r){return e.config=t,n&&(e.code=n),e.request=a,e.response=r,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},e}},OTTw:function(e,t,n){"use strict";var a=n("xTJ+");e.exports=a.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function r(e){var a=e;return t&&(n.setAttribute("href",a),a=n.href),n.setAttribute("href",a),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return e=r(window.location.href),function(t){var n=a.isString(t)?r(t):t;return n.protocol===e.protocol&&n.host===e.host}}():function(){return!0}},OZ3z:function(e,t){e.exports=function(e){return{name:"Maxima",lexemes:"[A-Za-z_%][0-9A-Za-z_%]*",keywords:{keyword:"if then else elseif for thru do while unless step in and or not",literal:"true false unknown inf minf ind und %e %i %pi %phi %gamma",built_in:" abasep abs absint absolute_real_time acos acosh acot acoth acsc acsch activate addcol add_edge add_edges addmatrices addrow add_vertex add_vertices adjacency_matrix adjoin adjoint af agd airy airy_ai airy_bi airy_dai airy_dbi algsys alg_type alias allroots alphacharp alphanumericp amortization %and annuity_fv annuity_pv antid antidiff AntiDifference append appendfile apply apply1 apply2 applyb1 apropos args arit_amortization arithmetic arithsum array arrayapply arrayinfo arraymake arraysetapply ascii asec asech asin asinh askinteger asksign assoc assoc_legendre_p assoc_legendre_q assume assume_external_byte_order asympa at atan atan2 atanh atensimp atom atvalue augcoefmatrix augmented_lagrangian_method av average_degree backtrace bars barsplot barsplot_description base64 base64_decode bashindices batch batchload bc2 bdvac belln benefit_cost bern bernpoly bernstein_approx bernstein_expand bernstein_poly bessel bessel_i bessel_j bessel_k bessel_simplify bessel_y beta beta_incomplete beta_incomplete_generalized beta_incomplete_regularized bezout bfallroots bffac bf_find_root bf_fmin_cobyla bfhzeta bfloat bfloatp bfpsi bfpsi0 bfzeta biconnected_components bimetric binomial bipartition block blockmatrixp bode_gain bode_phase bothcoef box boxplot boxplot_description break bug_report build_info|10 buildq build_sample burn cabs canform canten cardinality carg cartan cartesian_product catch cauchy_matrix cbffac cdf_bernoulli cdf_beta cdf_binomial cdf_cauchy cdf_chi2 cdf_continuous_uniform cdf_discrete_uniform cdf_exp cdf_f cdf_gamma cdf_general_finite_discrete cdf_geometric cdf_gumbel cdf_hypergeometric cdf_laplace cdf_logistic cdf_lognormal cdf_negative_binomial cdf_noncentral_chi2 cdf_noncentral_student_t cdf_normal cdf_pareto cdf_poisson cdf_rank_sum cdf_rayleigh cdf_signed_rank cdf_student_t cdf_weibull cdisplay ceiling central_moment cequal cequalignore cf cfdisrep cfexpand cgeodesic cgreaterp cgreaterpignore changename changevar chaosgame charat charfun charfun2 charlist charp charpoly chdir chebyshev_t chebyshev_u checkdiv check_overlaps chinese cholesky christof chromatic_index chromatic_number cint circulant_graph clear_edge_weight clear_rules clear_vertex_label clebsch_gordan clebsch_graph clessp clesspignore close closefile cmetric coeff coefmatrix cograd col collapse collectterms columnop columnspace columnswap columnvector combination combine comp2pui compare compfile compile compile_file complement_graph complete_bipartite_graph complete_graph complex_number_p components compose_functions concan concat conjugate conmetderiv connected_components connect_vertices cons constant constantp constituent constvalue cont2part content continuous_freq contortion contour_plot contract contract_edge contragrad contrib_ode convert coord copy copy_file copy_graph copylist copymatrix cor cos cosh cot coth cov cov1 covdiff covect covers crc24sum create_graph create_list csc csch csetup cspline ctaylor ct_coordsys ctransform ctranspose cube_graph cuboctahedron_graph cunlisp cv cycle_digraph cycle_graph cylindrical days360 dblint deactivate declare declare_constvalue declare_dimensions declare_fundamental_dimensions declare_fundamental_units declare_qty declare_translated declare_unit_conversion declare_units declare_weights decsym defcon define define_alt_display define_variable defint defmatch defrule defstruct deftaylor degree_sequence del delete deleten delta demo demoivre denom depends derivdegree derivlist describe desolve determinant dfloat dgauss_a dgauss_b dgeev dgemm dgeqrf dgesv dgesvd diag diagmatrix diag_matrix diagmatrixp diameter diff digitcharp dimacs_export dimacs_import dimension dimensionless dimensions dimensions_as_list direct directory discrete_freq disjoin disjointp disolate disp dispcon dispform dispfun dispJordan display disprule dispterms distrib divide divisors divsum dkummer_m dkummer_u dlange dodecahedron_graph dotproduct dotsimp dpart draw draw2d draw3d drawdf draw_file draw_graph dscalar echelon edge_coloring edge_connectivity edges eigens_by_jacobi eigenvalues eigenvectors eighth einstein eivals eivects elapsed_real_time elapsed_run_time ele2comp ele2polynome ele2pui elem elementp elevation_grid elim elim_allbut eliminate eliminate_using ellipse elliptic_e elliptic_ec elliptic_eu elliptic_f elliptic_kc elliptic_pi ematrix empty_graph emptyp endcons entermatrix entertensor entier equal equalp equiv_classes erf erfc erf_generalized erfi errcatch error errormsg errors euler ev eval_string evenp every evolution evolution2d evundiff example exp expand expandwrt expandwrt_factored expint expintegral_chi expintegral_ci expintegral_e expintegral_e1 expintegral_ei expintegral_e_simplify expintegral_li expintegral_shi expintegral_si explicit explose exponentialize express expt exsec extdiff extract_linear_equations extremal_subset ezgcd %f f90 facsum factcomb factor factorfacsum factorial factorout factorsum facts fast_central_elements fast_linsolve fasttimes featurep fernfale fft fib fibtophi fifth filename_merge file_search file_type fillarray findde find_root find_root_abs find_root_error find_root_rel first fix flatten flength float floatnump floor flower_snark flush flush1deriv flushd flushnd flush_output fmin_cobyla forget fortran fourcos fourexpand fourier fourier_elim fourint fourintcos fourintsin foursimp foursin fourth fposition frame_bracket freeof freshline fresnel_c fresnel_s from_adjacency_matrix frucht_graph full_listify fullmap fullmapl fullratsimp fullratsubst fullsetify funcsolve fundamental_dimensions fundamental_units fundef funmake funp fv g0 g1 gamma gamma_greek gamma_incomplete gamma_incomplete_generalized gamma_incomplete_regularized gauss gauss_a gauss_b gaussprob gcd gcdex gcdivide gcfac gcfactor gd generalized_lambert_w genfact gen_laguerre genmatrix gensym geo_amortization geo_annuity_fv geo_annuity_pv geomap geometric geometric_mean geosum get getcurrentdirectory get_edge_weight getenv get_lu_factors get_output_stream_string get_pixel get_plot_option get_tex_environment get_tex_environment_default get_vertex_label gfactor gfactorsum ggf girth global_variances gn gnuplot_close gnuplot_replot gnuplot_reset gnuplot_restart gnuplot_start go Gosper GosperSum gr2d gr3d gradef gramschmidt graph6_decode graph6_encode graph6_export graph6_import graph_center graph_charpoly graph_eigenvalues graph_flow graph_order graph_periphery graph_product graph_size graph_union great_rhombicosidodecahedron_graph great_rhombicuboctahedron_graph grid_graph grind grobner_basis grotzch_graph hamilton_cycle hamilton_path hankel hankel_1 hankel_2 harmonic harmonic_mean hav heawood_graph hermite hessian hgfred hilbertmap hilbert_matrix hipow histogram histogram_description hodge horner hypergeometric i0 i1 %ibes ic1 ic2 ic_convert ichr1 ichr2 icosahedron_graph icosidodecahedron_graph icurvature ident identfor identity idiff idim idummy ieqn %if ifactors iframes ifs igcdex igeodesic_coords ilt image imagpart imetric implicit implicit_derivative implicit_plot indexed_tensor indices induced_subgraph inferencep inference_result infix info_display init_atensor init_ctensor in_neighbors innerproduct inpart inprod inrt integerp integer_partitions integrate intersect intersection intervalp intopois intosum invariant1 invariant2 inverse_fft inverse_jacobi_cd inverse_jacobi_cn inverse_jacobi_cs inverse_jacobi_dc inverse_jacobi_dn inverse_jacobi_ds inverse_jacobi_nc inverse_jacobi_nd inverse_jacobi_ns inverse_jacobi_sc inverse_jacobi_sd inverse_jacobi_sn invert invert_by_adjoint invert_by_lu inv_mod irr is is_biconnected is_bipartite is_connected is_digraph is_edge_in_graph is_graph is_graph_or_digraph ishow is_isomorphic isolate isomorphism is_planar isqrt isreal_p is_sconnected is_tree is_vertex_in_graph items_inference %j j0 j1 jacobi jacobian jacobi_cd jacobi_cn jacobi_cs jacobi_dc jacobi_dn jacobi_ds jacobi_nc jacobi_nd jacobi_ns jacobi_p jacobi_sc jacobi_sd jacobi_sn JF jn join jordan julia julia_set julia_sin %k kdels kdelta kill killcontext kostka kron_delta kronecker_product kummer_m kummer_u kurtosis kurtosis_bernoulli kurtosis_beta kurtosis_binomial kurtosis_chi2 kurtosis_continuous_uniform kurtosis_discrete_uniform kurtosis_exp kurtosis_f kurtosis_gamma kurtosis_general_finite_discrete kurtosis_geometric kurtosis_gumbel kurtosis_hypergeometric kurtosis_laplace kurtosis_logistic kurtosis_lognormal kurtosis_negative_binomial kurtosis_noncentral_chi2 kurtosis_noncentral_student_t kurtosis_normal kurtosis_pareto kurtosis_poisson kurtosis_rayleigh kurtosis_student_t kurtosis_weibull label labels lagrange laguerre lambda lambert_w laplace laplacian_matrix last lbfgs lc2kdt lcharp lc_l lcm lc_u ldefint ldisp ldisplay legendre_p legendre_q leinstein length let letrules letsimp levi_civita lfreeof lgtreillis lhs li liediff limit Lindstedt linear linearinterpol linear_program linear_regression line_graph linsolve listarray list_correlations listify list_matrix_entries list_nc_monomials listoftens listofvars listp lmax lmin load loadfile local locate_matrix_entry log logcontract log_gamma lopow lorentz_gauge lowercasep lpart lratsubst lreduce lriemann lsquares_estimates lsquares_estimates_approximate lsquares_estimates_exact lsquares_mse lsquares_residual_mse lsquares_residuals lsum ltreillis lu_backsub lucas lu_factor %m macroexpand macroexpand1 make_array makebox makefact makegamma make_graph make_level_picture makelist makeOrders make_poly_continent make_poly_country make_polygon make_random_state make_rgb_picture makeset make_string_input_stream make_string_output_stream make_transform mandelbrot mandelbrot_set map mapatom maplist matchdeclare matchfix mat_cond mat_fullunblocker mat_function mathml_display mat_norm matrix matrixmap matrixp matrix_size mattrace mat_trace mat_unblocker max max_clique max_degree max_flow maximize_lp max_independent_set max_matching maybe md5sum mean mean_bernoulli mean_beta mean_binomial mean_chi2 mean_continuous_uniform mean_deviation mean_discrete_uniform mean_exp mean_f mean_gamma mean_general_finite_discrete mean_geometric mean_gumbel mean_hypergeometric mean_laplace mean_logistic mean_lognormal mean_negative_binomial mean_noncentral_chi2 mean_noncentral_student_t mean_normal mean_pareto mean_poisson mean_rayleigh mean_student_t mean_weibull median median_deviation member mesh metricexpandall mgf1_sha1 min min_degree min_edge_cut minfactorial minimalPoly minimize_lp minimum_spanning_tree minor minpack_lsquares minpack_solve min_vertex_cover min_vertex_cut mkdir mnewton mod mode_declare mode_identity ModeMatrix moebius mon2schur mono monomial_dimensions multibernstein_poly multi_display_for_texinfo multi_elem multinomial multinomial_coeff multi_orbit multiplot_mode multi_pui multsym multthru mycielski_graph nary natural_unit nc_degree ncexpt ncharpoly negative_picture neighbors new newcontext newdet new_graph newline newton new_variable next_prime nicedummies niceindices ninth nofix nonarray noncentral_moment nonmetricity nonnegintegerp nonscalarp nonzeroandfreeof notequal nounify nptetrad npv nroots nterms ntermst nthroot nullity nullspace num numbered_boundaries numberp number_to_octets num_distinct_partitions numerval numfactor num_partitions nusum nzeta nzetai nzetar octets_to_number octets_to_oid odd_girth oddp ode2 ode_check odelin oid_to_octets op opena opena_binary openr openr_binary openw openw_binary operatorp opsubst optimize %or orbit orbits ordergreat ordergreatp orderless orderlessp orthogonal_complement orthopoly_recur orthopoly_weight outermap out_neighbors outofpois pade parabolic_cylinder_d parametric parametric_surface parg parGosper parse_string parse_timedate part part2cont partfrac partition partition_set partpol path_digraph path_graph pathname_directory pathname_name pathname_type pdf_bernoulli pdf_beta pdf_binomial pdf_cauchy pdf_chi2 pdf_continuous_uniform pdf_discrete_uniform pdf_exp pdf_f pdf_gamma pdf_general_finite_discrete pdf_geometric pdf_gumbel pdf_hypergeometric pdf_laplace pdf_logistic pdf_lognormal pdf_negative_binomial pdf_noncentral_chi2 pdf_noncentral_student_t pdf_normal pdf_pareto pdf_poisson pdf_rank_sum pdf_rayleigh pdf_signed_rank pdf_student_t pdf_weibull pearson_skewness permanent permut permutation permutations petersen_graph petrov pickapart picture_equalp picturep piechart piechart_description planar_embedding playback plog plot2d plot3d plotdf ploteq plsquares pochhammer points poisdiff poisexpt poisint poismap poisplus poissimp poissubst poistimes poistrim polar polarform polartorect polar_to_xy poly_add poly_buchberger poly_buchberger_criterion poly_colon_ideal poly_content polydecomp poly_depends_p poly_elimination_ideal poly_exact_divide poly_expand poly_expt poly_gcd polygon poly_grobner poly_grobner_equal poly_grobner_member poly_grobner_subsetp poly_ideal_intersection poly_ideal_polysaturation poly_ideal_polysaturation1 poly_ideal_saturation poly_ideal_saturation1 poly_lcm poly_minimization polymod poly_multiply polynome2ele polynomialp poly_normal_form poly_normalize poly_normalize_list poly_polysaturation_extension poly_primitive_part poly_pseudo_divide poly_reduced_grobner poly_reduction poly_saturation_extension poly_s_polynomial poly_subtract polytocompanion pop postfix potential power_mod powerseries powerset prefix prev_prime primep primes principal_components print printf printfile print_graph printpois printprops prodrac product properties propvars psi psubst ptriangularize pui pui2comp pui2ele pui2polynome pui_direct puireduc push put pv qput qrange qty quad_control quad_qag quad_qagi quad_qagp quad_qags quad_qawc quad_qawf quad_qawo quad_qaws quadrilateral quantile quantile_bernoulli quantile_beta quantile_binomial quantile_cauchy quantile_chi2 quantile_continuous_uniform quantile_discrete_uniform quantile_exp quantile_f quantile_gamma quantile_general_finite_discrete quantile_geometric quantile_gumbel quantile_hypergeometric quantile_laplace quantile_logistic quantile_lognormal quantile_negative_binomial quantile_noncentral_chi2 quantile_noncentral_student_t quantile_normal quantile_pareto quantile_poisson quantile_rayleigh quantile_student_t quantile_weibull quartile_skewness quit qunit quotient racah_v racah_w radcan radius random random_bernoulli random_beta random_binomial random_bipartite_graph random_cauchy random_chi2 random_continuous_uniform random_digraph random_discrete_uniform random_exp random_f random_gamma random_general_finite_discrete random_geometric random_graph random_graph1 random_gumbel random_hypergeometric random_laplace random_logistic random_lognormal random_negative_binomial random_network random_noncentral_chi2 random_noncentral_student_t random_normal random_pareto random_permutation random_poisson random_rayleigh random_regular_graph random_student_t random_tournament random_tree random_weibull range rank rat ratcoef ratdenom ratdiff ratdisrep ratexpand ratinterpol rational rationalize ratnumer ratnump ratp ratsimp ratsubst ratvars ratweight read read_array read_binary_array read_binary_list read_binary_matrix readbyte readchar read_hashed_array readline read_list read_matrix read_nested_list readonly read_xpm real_imagpart_to_conjugate realpart realroots rearray rectangle rectform rectform_log_if_constant recttopolar rediff reduce_consts reduce_order region region_boundaries region_boundaries_plus rem remainder remarray rembox remcomps remcon remcoord remfun remfunction remlet remove remove_constvalue remove_dimensions remove_edge remove_fundamental_dimensions remove_fundamental_units remove_plot_option remove_vertex rempart remrule remsym remvalue rename rename_file reset reset_displays residue resolvante resolvante_alternee1 resolvante_bipartite resolvante_diedrale resolvante_klein resolvante_klein3 resolvante_produit_sym resolvante_unitaire resolvante_vierer rest resultant return reveal reverse revert revert2 rgb2level rhs ricci riemann rinvariant risch rk rmdir rncombine romberg room rootscontract round row rowop rowswap rreduce run_testsuite %s save saving scalarp scaled_bessel_i scaled_bessel_i0 scaled_bessel_i1 scalefactors scanmap scatterplot scatterplot_description scene schur2comp sconcat scopy scsimp scurvature sdowncase sec sech second sequal sequalignore set_alt_display setdifference set_draw_defaults set_edge_weight setelmx setequalp setify setp set_partitions set_plot_option set_prompt set_random_state set_tex_environment set_tex_environment_default setunits setup_autoload set_up_dot_simplifications set_vertex_label seventh sexplode sf sha1sum sha256sum shortest_path shortest_weighted_path show showcomps showratvars sierpinskiale sierpinskimap sign signum similaritytransform simp_inequality simplify_sum simplode simpmetderiv simtran sin sinh sinsert sinvertcase sixth skewness skewness_bernoulli skewness_beta skewness_binomial skewness_chi2 skewness_continuous_uniform skewness_discrete_uniform skewness_exp skewness_f skewness_gamma skewness_general_finite_discrete skewness_geometric skewness_gumbel skewness_hypergeometric skewness_laplace skewness_logistic skewness_lognormal skewness_negative_binomial skewness_noncentral_chi2 skewness_noncentral_student_t skewness_normal skewness_pareto skewness_poisson skewness_rayleigh skewness_student_t skewness_weibull slength smake small_rhombicosidodecahedron_graph small_rhombicuboctahedron_graph smax smin smismatch snowmap snub_cube_graph snub_dodecahedron_graph solve solve_rec solve_rec_rat some somrac sort sparse6_decode sparse6_encode sparse6_export sparse6_import specint spherical spherical_bessel_j spherical_bessel_y spherical_hankel1 spherical_hankel2 spherical_harmonic spherical_to_xyz splice split sposition sprint sqfr sqrt sqrtdenest sremove sremovefirst sreverse ssearch ssort sstatus ssubst ssubstfirst staircase standardize standardize_inverse_trig starplot starplot_description status std std1 std_bernoulli std_beta std_binomial std_chi2 std_continuous_uniform std_discrete_uniform std_exp std_f std_gamma std_general_finite_discrete std_geometric std_gumbel std_hypergeometric std_laplace std_logistic std_lognormal std_negative_binomial std_noncentral_chi2 std_noncentral_student_t std_normal std_pareto std_poisson std_rayleigh std_student_t std_weibull stemplot stirling stirling1 stirling2 strim striml strimr string stringout stringp strong_components struve_h struve_l sublis sublist sublist_indices submatrix subsample subset subsetp subst substinpart subst_parallel substpart substring subvar subvarp sum sumcontract summand_to_rec supcase supcontext symbolp symmdifference symmetricp system take_channel take_inference tan tanh taylor taylorinfo taylorp taylor_simplifier taytorat tcl_output tcontract tellrat tellsimp tellsimpafter tentex tenth test_mean test_means_difference test_normality test_proportion test_proportions_difference test_rank_sum test_sign test_signed_rank test_variance test_variance_ratio tex tex1 tex_display texput %th third throw time timedate timer timer_info tldefint tlimit todd_coxeter toeplitz tokens to_lisp topological_sort to_poly to_poly_solve totaldisrep totalfourier totient tpartpol trace tracematrix trace_options transform_sample translate translate_file transpose treefale tree_reduce treillis treinat triangle triangularize trigexpand trigrat trigreduce trigsimp trunc truncate truncated_cube_graph truncated_dodecahedron_graph truncated_icosahedron_graph truncated_tetrahedron_graph tr_warnings_get tube tutte_graph ueivects uforget ultraspherical underlying_graph undiff union unique uniteigenvectors unitp units unit_step unitvector unorder unsum untellrat untimer untrace uppercasep uricci uriemann uvect vandermonde_matrix var var1 var_bernoulli var_beta var_binomial var_chi2 var_continuous_uniform var_discrete_uniform var_exp var_f var_gamma var_general_finite_discrete var_geometric var_gumbel var_hypergeometric var_laplace var_logistic var_lognormal var_negative_binomial var_noncentral_chi2 var_noncentral_student_t var_normal var_pareto var_poisson var_rayleigh var_student_t var_weibull vector vectorpotential vectorsimp verbify vers vertex_coloring vertex_connectivity vertex_degree vertex_distance vertex_eccentricity vertex_in_degree vertex_out_degree vertices vertices_to_cycle vertices_to_path %w weyl wheel_graph wiener_index wigner_3j wigner_6j wigner_9j with_stdout write_binary_data writebyte write_data writefile wronskian xreduce xthru %y Zeilberger zeroequiv zerofor zeromatrix zeromatrixp zeta zgeev zheev zlange zn_add_table zn_carmichael_lambda zn_characteristic_factors zn_determinant zn_factor_generators zn_invert_by_lu zn_log zn_mult_table absboxchar activecontexts adapt_depth additive adim aform algebraic algepsilon algexact aliases allbut all_dotsimp_denoms allocation allsym alphabetic animation antisymmetric arrays askexp assume_pos assume_pos_pred assumescalar asymbol atomgrad atrig1 axes axis_3d axis_bottom axis_left axis_right axis_top azimuth background background_color backsubst berlefact bernstein_explicit besselexpand beta_args_sum_to_integer beta_expand bftorat bftrunc bindtest border boundaries_array box boxchar breakup %c capping cauchysum cbrange cbtics center cflength cframe_flag cnonmet_flag color color_bar color_bar_tics colorbox columns commutative complex cone context contexts contour contour_levels cosnpiflag ctaypov ctaypt ctayswitch ctayvar ct_coords ctorsion_flag ctrgsimp cube current_let_rule_package cylinder data_file_name debugmode decreasing default_let_rule_package delay dependencies derivabbrev derivsubst detout diagmetric diff dim dimensions dispflag display2d|10 display_format_internal distribute_over doallmxops domain domxexpt domxmxops domxnctimes dontfactor doscmxops doscmxplus dot0nscsimp dot0simp dot1simp dotassoc dotconstrules dotdistrib dotexptsimp dotident dotscrules draw_graph_program draw_realpart edge_color edge_coloring edge_partition edge_type edge_width %edispflag elevation %emode endphi endtheta engineering_format_floats enhanced3d %enumer epsilon_lp erfflag erf_representation errormsg error_size error_syms error_type %e_to_numlog eval even evenfun evflag evfun ev_point expandwrt_denom expintexpand expintrep expon expop exptdispflag exptisolate exptsubst facexpand facsum_combine factlim factorflag factorial_expand factors_only fb feature features file_name file_output_append file_search_demo file_search_lisp file_search_maxima|10 file_search_tests file_search_usage file_type_lisp file_type_maxima|10 fill_color fill_density filled_func fixed_vertices flipflag float2bf font font_size fortindent fortspaces fpprec fpprintprec functions gamma_expand gammalim gdet genindex gensumnum GGFCFMAX GGFINFINITY globalsolve gnuplot_command gnuplot_curve_styles gnuplot_curve_titles gnuplot_default_term_command gnuplot_dumb_term_command gnuplot_file_args gnuplot_file_name gnuplot_out_file gnuplot_pdf_term_command gnuplot_pm3d gnuplot_png_term_command gnuplot_postamble gnuplot_preamble gnuplot_ps_term_command gnuplot_svg_term_command gnuplot_term gnuplot_view_args Gosper_in_Zeilberger gradefs grid grid2d grind halfangles head_angle head_both head_length head_type height hypergeometric_representation %iargs ibase icc1 icc2 icounter idummyx ieqnprint ifb ifc1 ifc2 ifg ifgi ifr iframe_bracket_form ifri igeowedge_flag ikt1 ikt2 imaginary inchar increasing infeval infinity inflag infolists inm inmc1 inmc2 intanalysis integer integervalued integrate_use_rootsof integration_constant integration_constant_counter interpolate_color intfaclim ip_grid ip_grid_in irrational isolate_wrt_times iterations itr julia_parameter %k1 %k2 keepfloat key key_pos kinvariant kt label label_alignment label_orientation labels lassociative lbfgs_ncorrections lbfgs_nfeval_max leftjust legend letrat let_rule_packages lfg lg lhospitallim limsubst linear linear_solver linechar linel|10 linenum line_type linewidth line_width linsolve_params linsolvewarn lispdisp listarith listconstvars listdummyvars lmxchar load_pathname loadprint logabs logarc logcb logconcoeffp logexpand lognegint logsimp logx logx_secondary logy logy_secondary logz lriem m1pbranch macroexpansion macros mainvar manual_demo maperror mapprint matrix_element_add matrix_element_mult matrix_element_transpose maxapplydepth maxapplyheight maxima_tempdir|10 maxima_userdir|10 maxnegex MAX_ORD maxposex maxpsifracdenom maxpsifracnum maxpsinegint maxpsiposint maxtayorder mesh_lines_color method mod_big_prime mode_check_errorp mode_checkp mode_check_warnp mod_test mod_threshold modular_linear_solver modulus multiplicative multiplicities myoptions nary negdistrib negsumdispflag newline newtonepsilon newtonmaxiter nextlayerfactor niceindicespref nm nmc noeval nolabels nonegative_lp noninteger nonscalar noun noundisp nouns np npi nticks ntrig numer numer_pbranch obase odd oddfun opacity opproperties opsubst optimprefix optionset orientation origin orthopoly_returns_intervals outative outchar packagefile palette partswitch pdf_file pfeformat phiresolution %piargs piece pivot_count_sx pivot_max_sx plot_format plot_options plot_realpart png_file pochhammer_max_index points pointsize point_size points_joined point_type poislim poisson poly_coefficient_ring poly_elimination_order polyfactor poly_grobner_algorithm poly_grobner_debug poly_monomial_order poly_primary_elimination_order poly_return_term_list poly_secondary_elimination_order poly_top_reduction_only posfun position powerdisp pred prederror primep_number_of_tests product_use_gamma program programmode promote_float_to_bigfloat prompt proportional_axes props psexpand ps_file radexpand radius radsubstflag rassociative ratalgdenom ratchristof ratdenomdivide rateinstein ratepsilon ratfac rational ratmx ratprint ratriemann ratsimpexpons ratvarswitch ratweights ratweyl ratwtlvl real realonly redraw refcheck resolution restart resultant ric riem rmxchar %rnum_list rombergabs rombergit rombergmin rombergtol rootsconmode rootsepsilon run_viewer same_xy same_xyz savedef savefactors scalar scalarmatrixp scale scale_lp setcheck setcheckbreak setval show_edge_color show_edges show_edge_type show_edge_width show_id show_label showtime show_vertex_color show_vertex_size show_vertex_type show_vertices show_weight simp simplified_output simplify_products simpproduct simpsum sinnpiflag solvedecomposes solveexplicit solvefactors solvenullwarn solveradcan solvetrigwarn space sparse sphere spring_embedding_depth sqrtdispflag stardisp startphi starttheta stats_numer stringdisp structures style sublis_apply_lambda subnumsimp sumexpand sumsplitfact surface surface_hide svg_file symmetric tab taylordepth taylor_logexpand taylor_order_coefficients taylor_truncate_polynomials tensorkill terminal testsuite_files thetaresolution timer_devalue title tlimswitch tr track transcompile transform transform_xy translate_fast_arrays transparent transrun tr_array_as_ref tr_bound_function_applyp tr_file_tty_messagesp tr_float_can_branch_complex tr_function_call_default trigexpandplus trigexpandtimes triginverses trigsign trivial_solutions tr_numer tr_optimize_max_loop tr_semicompile tr_state_vars tr_warn_bad_function_calls tr_warn_fexpr tr_warn_meval tr_warn_mode tr_warn_undeclared tr_warn_undefined_variable tstep ttyoff tube_extremes ufg ug %unitexpand unit_vectors uric uriem use_fast_arrays user_preamble usersetunits values vect_cross verbose vertex_color vertex_coloring vertex_partition vertex_size vertex_type view warnings weyl width windowname windowtitle wired_surface wireframe xaxis xaxis_color xaxis_secondary xaxis_type xaxis_width xlabel xlabel_secondary xlength xrange xrange_secondary xtics xtics_axis xtics_rotate xtics_rotate_secondary xtics_secondary xtics_secondary_axis xu_grid x_voxel xy_file xyplane xy_scale yaxis yaxis_color yaxis_secondary yaxis_type yaxis_width ylabel ylabel_secondary ylength yrange yrange_secondary ytics ytics_axis ytics_rotate ytics_rotate_secondary ytics_secondary ytics_secondary_axis yv_grid y_voxel yx_ratio zaxis zaxis_color zaxis_type zaxis_width zeroa zerob zerobern zeta%pi zlabel zlabel_rotate zlength zmin zn_primroot_limit zn_primroot_pretest",symbol:"_ __ %|0 %%|0"},contains:[{className:"comment",begin:"/\\*",end:"\\*/",contains:["self"]},e.QUOTE_STRING_MODE,{className:"number",relevance:0,variants:[{begin:"\\b(\\d+|\\d+\\.|\\.\\d+|\\d+\\.\\d+)[Ee][-+]?\\d+\\b"},{begin:"\\b(\\d+|\\d+\\.|\\.\\d+|\\d+\\.\\d+)[Bb][-+]?\\d+\\b",relevance:10},{begin:"\\b(\\.\\d+|\\d+\\.\\d+)\\b"},{begin:"\\b(\\d+|0[0-9A-Za-z]+)\\.?\\b"}]}],illegal:/@/}}},PGlF:function(e,t){e.exports=function(e){return{name:"Vim Script",lexemes:/[!#@\w]+/,keywords:{keyword:"N|0 P|0 X|0 a|0 ab abc abo al am an|0 ar arga argd arge argdo argg argl argu as au aug aun b|0 bN ba bad bd be bel bf bl bm bn bo bp br brea breaka breakd breakl bro bufdo buffers bun bw c|0 cN cNf ca cabc caddb cad caddf cal cat cb cc ccl cd ce cex cf cfir cgetb cgete cg changes chd che checkt cl cla clo cm cmapc cme cn cnew cnf cno cnorea cnoreme co col colo com comc comp con conf cope cp cpf cq cr cs cst cu cuna cunme cw delm deb debugg delc delf dif diffg diffo diffp diffpu diffs diffthis dig di dl dell dj dli do doautoa dp dr ds dsp e|0 ea ec echoe echoh echom echon el elsei em en endfo endf endt endw ene ex exe exi exu f|0 files filet fin fina fini fir fix fo foldc foldd folddoc foldo for fu go gr grepa gu gv ha helpf helpg helpt hi hid his ia iabc if ij il im imapc ime ino inorea inoreme int is isp iu iuna iunme j|0 ju k|0 keepa kee keepj lN lNf l|0 lad laddb laddf la lan lat lb lc lch lcl lcs le lefta let lex lf lfir lgetb lgete lg lgr lgrepa lh ll lla lli lmak lm lmapc lne lnew lnf ln loadk lo loc lockv lol lope lp lpf lr ls lt lu lua luad luaf lv lvimgrepa lw m|0 ma mak map mapc marks mat me menut mes mk mks mksp mkv mkvie mod mz mzf nbc nb nbs new nm nmapc nme nn nnoreme noa no noh norea noreme norm nu nun nunme ol o|0 om omapc ome on ono onoreme opt ou ounme ow p|0 profd prof pro promptr pc ped pe perld po popu pp pre prev ps pt ptN ptf ptj ptl ptn ptp ptr pts pu pw py3 python3 py3d py3f py pyd pyf quita qa rec red redi redr redraws reg res ret retu rew ri rightb rub rubyd rubyf rund ru rv sN san sa sal sav sb sbN sba sbf sbl sbm sbn sbp sbr scrip scripte scs se setf setg setl sf sfir sh sim sig sil sl sla sm smap smapc sme sn sni sno snor snoreme sor so spelld spe spelli spellr spellu spellw sp spr sre st sta startg startr star stopi stj sts sun sunm sunme sus sv sw sy synti sync tN tabN tabc tabdo tabe tabf tabfir tabl tabm tabnew tabn tabo tabp tabr tabs tab ta tags tc tcld tclf te tf th tj tl tm tn to tp tr try ts tu u|0 undoj undol una unh unl unlo unm unme uns up ve verb vert vim vimgrepa vi viu vie vm vmapc vme vne vn vnoreme vs vu vunme windo w|0 wN wa wh wi winc winp wn wp wq wqa ws wu wv x|0 xa xmapc xm xme xn xnoreme xu xunme y|0 z|0 ~ Next Print append abbreviate abclear aboveleft all amenu anoremenu args argadd argdelete argedit argglobal arglocal argument ascii autocmd augroup aunmenu buffer bNext ball badd bdelete behave belowright bfirst blast bmodified bnext botright bprevious brewind break breakadd breakdel breaklist browse bunload bwipeout change cNext cNfile cabbrev cabclear caddbuffer caddexpr caddfile call catch cbuffer cclose center cexpr cfile cfirst cgetbuffer cgetexpr cgetfile chdir checkpath checktime clist clast close cmap cmapclear cmenu cnext cnewer cnfile cnoremap cnoreabbrev cnoremenu copy colder colorscheme command comclear compiler continue confirm copen cprevious cpfile cquit crewind cscope cstag cunmap cunabbrev cunmenu cwindow delete delmarks debug debuggreedy delcommand delfunction diffupdate diffget diffoff diffpatch diffput diffsplit digraphs display deletel djump dlist doautocmd doautoall deletep drop dsearch dsplit edit earlier echo echoerr echohl echomsg else elseif emenu endif endfor endfunction endtry endwhile enew execute exit exusage file filetype find finally finish first fixdel fold foldclose folddoopen folddoclosed foldopen function global goto grep grepadd gui gvim hardcopy help helpfind helpgrep helptags highlight hide history insert iabbrev iabclear ijump ilist imap imapclear imenu inoremap inoreabbrev inoremenu intro isearch isplit iunmap iunabbrev iunmenu join jumps keepalt keepmarks keepjumps lNext lNfile list laddexpr laddbuffer laddfile last language later lbuffer lcd lchdir lclose lcscope left leftabove lexpr lfile lfirst lgetbuffer lgetexpr lgetfile lgrep lgrepadd lhelpgrep llast llist lmake lmap lmapclear lnext lnewer lnfile lnoremap loadkeymap loadview lockmarks lockvar lolder lopen lprevious lpfile lrewind ltag lunmap luado luafile lvimgrep lvimgrepadd lwindow move mark make mapclear match menu menutranslate messages mkexrc mksession mkspell mkvimrc mkview mode mzscheme mzfile nbclose nbkey nbsart next nmap nmapclear nmenu nnoremap nnoremenu noautocmd noremap nohlsearch noreabbrev noremenu normal number nunmap nunmenu oldfiles open omap omapclear omenu only onoremap onoremenu options ounmap ounmenu ownsyntax print profdel profile promptfind promptrepl pclose pedit perl perldo pop popup ppop preserve previous psearch ptag ptNext ptfirst ptjump ptlast ptnext ptprevious ptrewind ptselect put pwd py3do py3file python pydo pyfile quit quitall qall read recover redo redir redraw redrawstatus registers resize retab return rewind right rightbelow ruby rubydo rubyfile rundo runtime rviminfo substitute sNext sandbox sargument sall saveas sbuffer sbNext sball sbfirst sblast sbmodified sbnext sbprevious sbrewind scriptnames scriptencoding scscope set setfiletype setglobal setlocal sfind sfirst shell simalt sign silent sleep slast smagic smapclear smenu snext sniff snomagic snoremap snoremenu sort source spelldump spellgood spellinfo spellrepall spellundo spellwrong split sprevious srewind stop stag startgreplace startreplace startinsert stopinsert stjump stselect sunhide sunmap sunmenu suspend sview swapname syntax syntime syncbind tNext tabNext tabclose tabedit tabfind tabfirst tablast tabmove tabnext tabonly tabprevious tabrewind tag tcl tcldo tclfile tearoff tfirst throw tjump tlast tmenu tnext topleft tprevious trewind tselect tunmenu undo undojoin undolist unabbreviate unhide unlet unlockvar unmap unmenu unsilent update vglobal version verbose vertical vimgrep vimgrepadd visual viusage view vmap vmapclear vmenu vnew vnoremap vnoremenu vsplit vunmap vunmenu write wNext wall while winsize wincmd winpos wnext wprevious wqall wsverb wundo wviminfo xit xall xmapclear xmap xmenu xnoremap xnoremenu xunmap xunmenu yank",built_in:"synIDtrans atan2 range matcharg did_filetype asin feedkeys xor argv complete_check add getwinposx getqflist getwinposy screencol clearmatches empty extend getcmdpos mzeval garbagecollect setreg ceil sqrt diff_hlID inputsecret get getfperm getpid filewritable shiftwidth max sinh isdirectory synID system inputrestore winline atan visualmode inputlist tabpagewinnr round getregtype mapcheck hasmapto histdel argidx findfile sha256 exists toupper getcmdline taglist string getmatches bufnr strftime winwidth bufexists strtrans tabpagebuflist setcmdpos remote_read printf setloclist getpos getline bufwinnr float2nr len getcmdtype diff_filler luaeval resolve libcallnr foldclosedend reverse filter has_key bufname str2float strlen setline getcharmod setbufvar index searchpos shellescape undofile foldclosed setqflist buflisted strchars str2nr virtcol floor remove undotree remote_expr winheight gettabwinvar reltime cursor tabpagenr finddir localtime acos getloclist search tanh matchend rename gettabvar strdisplaywidth type abs py3eval setwinvar tolower wildmenumode log10 spellsuggest bufloaded synconcealed nextnonblank server2client complete settabwinvar executable input wincol setmatches getftype hlID inputsave searchpair or screenrow line settabvar histadd deepcopy strpart remote_peek and eval getftime submatch screenchar winsaveview matchadd mkdir screenattr getfontname libcall reltimestr getfsize winnr invert pow getbufline byte2line soundfold repeat fnameescape tagfiles sin strwidth spellbadword trunc maparg log lispindent hostname setpos globpath remote_foreground getchar synIDattr fnamemodify cscope_connection stridx winbufnr indent min complete_add nr2char searchpairpos inputdialog values matchlist items hlexists strridx browsedir expand fmod pathshorten line2byte argc count getwinvar glob foldtextresult getreg foreground cosh matchdelete has char2nr simplify histget searchdecl iconv winrestcmd pumvisible writefile foldlevel haslocaldir keys cos matchstr foldtext histnr tan tempname getcwd byteidx getbufvar islocked escape eventhandler remote_send serverlist winrestview synstack pyeval prevnonblank readfile cindent filereadable changenr exp"},illegal:/;/,contains:[e.NUMBER_MODE,{className:"string",begin:"'",end:"'",illegal:"\\n"},{className:"string",begin:/"(\\"|\n\\|[^"\n])*"/},e.COMMENT('"',"$"),{className:"variable",begin:/[bwtglsav]:[\w\d_]*/},{className:"function",beginKeywords:"function function!",end:"$",relevance:0,contains:[e.TITLE_MODE,{className:"params",begin:"\\(",end:"\\)"}]},{className:"symbol",begin:/<[\w-]+>/}]}}},PziN:function(e,t){e.exports=function(e){var t={variants:[e.COMMENT("--","$"),e.COMMENT("{-","-}",{contains:["self"]})]},n={className:"meta",begin:"{-#",end:"#-}"},a={className:"meta",begin:"^#",end:"$"},r={className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},i={begin:"\\(",end:"\\)",illegal:'"',contains:[n,a,{className:"type",begin:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},e.inherit(e.TITLE_MODE,{begin:"[_a-z][\\w']*"}),t]};return{name:"Haskell",aliases:["hs"],keywords:"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec",contains:[{beginKeywords:"module",end:"where",keywords:"module where",contains:[i,t],illegal:"\\W\\.|;"},{begin:"\\bimport\\b",end:"$",keywords:"import qualified as hiding",contains:[i,t],illegal:"\\W\\.|;"},{className:"class",begin:"^(\\s*)?(class|instance)\\b",end:"where",keywords:"class family instance where",contains:[r,i,t]},{className:"class",begin:"\\b(data|(new)?type)\\b",end:"$",keywords:"data family type newtype deriving",contains:[n,r,i,{begin:"{",end:"}",contains:i.contains},t]},{beginKeywords:"default",end:"$",contains:[r,i,t]},{beginKeywords:"infix infixl infixr",end:"$",contains:[e.C_NUMBER_MODE,t]},{begin:"\\bforeign\\b",end:"$",keywords:"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe",contains:[r,e.QUOTE_STRING_MODE,t]},{className:"meta",begin:"#!\\/usr\\/bin\\/env runhaskell",end:"$"},n,a,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,r,e.inherit(e.TITLE_MODE,{begin:"^[_a-z][\\w']*"}),t,{begin:"->|<-"}]}}},Q5ZB:function(e,t){e.exports=function(e){var t={begin:/\(/,end:/\)/,relevance:0},n={begin:/\[/,end:/\]/},a={className:"comment",begin:/%/,end:/$/,contains:[e.PHRASAL_WORDS_MODE]},r={className:"string",begin:/`/,end:/`/,contains:[e.BACKSLASH_ESCAPE]},i=[{begin:/[a-z][A-Za-z0-9_]*/,relevance:0},{className:"symbol",variants:[{begin:/[A-Z][a-zA-Z0-9_]*/},{begin:/_[A-Za-z0-9_]*/}],relevance:0},t,{begin:/:-/},n,a,e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,r,{className:"string",begin:/0\'(\\\'|.)/},{className:"string",begin:/0\'\\s/},e.C_NUMBER_MODE];return t.contains=i,n.contains=i,{name:"Prolog",contains:i.concat([{begin:/\.$/}])}}},QPTg:function(e,t){e.exports=function(e){return{name:"SAS",aliases:["sas","SAS"],case_insensitive:!0,keywords:{literal:"null missing _all_ _automatic_ _character_ _infile_ _n_ _name_ _null_ _numeric_ _user_ _webout_",meta:"do if then else end until while abort array attrib by call cards cards4 catname continue datalines datalines4 delete delim delimiter display dm drop endsas error file filename footnote format goto in infile informat input keep label leave length libname link list lostcard merge missing modify options output out page put redirect remove rename replace retain return select set skip startsas stop title update waitsas where window x systask add and alter as cascade check create delete describe distinct drop foreign from group having index insert into in key like message modify msgtype not null on or order primary references reset restrict select set table unique update validate view where"},contains:[{className:"keyword",begin:/^\s*(proc [\w\d_]+|data|run|quit)[\s\;]/},{className:"variable",begin:/\&[a-zA-Z_\&][a-zA-Z0-9_]*\.?/},{className:"emphasis",begin:/^\s*datalines|cards.*;/,end:/^\s*;\s*$/},{className:"built_in",begin:"%(bquote|nrbquote|cmpres|qcmpres|compstor|datatyp|display|do|else|end|eval|global|goto|if|index|input|keydef|label|left|length|let|local|lowcase|macro|mend|nrbquote|nrquote|nrstr|put|qcmpres|qleft|qlowcase|qscan|qsubstr|qsysfunc|qtrim|quote|qupcase|scan|str|substr|superq|syscall|sysevalf|sysexec|sysfunc|sysget|syslput|sysprod|sysrc|sysrput|then|to|trim|unquote|until|upcase|verify|while|window)"},{className:"name",begin:/%[a-zA-Z_][a-zA-Z_0-9]*/},{className:"meta",begin:"[^%](abs|addr|airy|arcos|arsin|atan|attrc|attrn|band|betainv|blshift|bnot|bor|brshift|bxor|byte|cdf|ceil|cexist|cinv|close|cnonct|collate|compbl|compound|compress|cos|cosh|css|curobs|cv|daccdb|daccdbsl|daccsl|daccsyd|dacctab|dairy|date|datejul|datepart|datetime|day|dclose|depdb|depdbsl|depdbsl|depsl|depsl|depsyd|depsyd|deptab|deptab|dequote|dhms|dif|digamma|dim|dinfo|dnum|dopen|doptname|doptnum|dread|dropnote|dsname|erf|erfc|exist|exp|fappend|fclose|fcol|fdelete|fetch|fetchobs|fexist|fget|fileexist|filename|fileref|finfo|finv|fipname|fipnamel|fipstate|floor|fnonct|fnote|fopen|foptname|foptnum|fpoint|fpos|fput|fread|frewind|frlen|fsep|fuzz|fwrite|gaminv|gamma|getoption|getvarc|getvarn|hbound|hms|hosthelp|hour|ibessel|index|indexc|indexw|input|inputc|inputn|int|intck|intnx|intrr|irr|jbessel|juldate|kurtosis|lag|lbound|left|length|lgamma|libname|libref|log|log10|log2|logpdf|logpmf|logsdf|lowcase|max|mdy|mean|min|minute|mod|month|mopen|mort|n|netpv|nmiss|normal|note|npv|open|ordinal|pathname|pdf|peek|peekc|pmf|point|poisson|poke|probbeta|probbnml|probchi|probf|probgam|probhypr|probit|probnegb|probnorm|probt|put|putc|putn|qtr|quote|ranbin|rancau|ranexp|rangam|range|rank|rannor|ranpoi|rantbl|rantri|ranuni|repeat|resolve|reverse|rewind|right|round|saving|scan|sdf|second|sign|sin|sinh|skewness|soundex|spedis|sqrt|std|stderr|stfips|stname|stnamel|substr|sum|symget|sysget|sysmsg|sysprod|sysrc|system|tan|tanh|time|timepart|tinv|tnonct|today|translate|tranwrd|trigamma|trim|trimn|trunc|uniform|upcase|uss|var|varfmt|varinfmt|varlabel|varlen|varname|varnum|varray|varrayx|vartype|verify|vformat|vformatd|vformatdx|vformatn|vformatnx|vformatw|vformatwx|vformatx|vinarray|vinarrayx|vinformat|vinformatd|vinformatdx|vinformatn|vinformatnx|vinformatw|vinformatwx|vinformatx|vlabel|vlabelx|vlength|vlengthx|vname|vnamex|vtype|vtypex|weekday|year|yyq|zipfips|zipname|zipnamel|zipstate)[(]"},{className:"string",variants:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},e.COMMENT("\\*",";"),e.C_BLOCK_COMMENT_MODE]}}},QQjU:function(e,t){e.exports=function(e){var t="[^\\(\\)\\[\\]\\{\\}\",'`;#|\\\\\\s]+",n={className:"literal",begin:"(#t|#f|#\\\\"+t+"|#\\\\.)"},a={className:"number",variants:[{begin:"(\\-|\\+)?\\d+([./]\\d+)?",relevance:0},{begin:"(\\-|\\+)?\\d+([./]\\d+)?[+\\-](\\-|\\+)?\\d+([./]\\d+)?i",relevance:0},{begin:"#b[0-1]+(/[0-1]+)?"},{begin:"#o[0-7]+(/[0-7]+)?"},{begin:"#x[0-9a-f]+(/[0-9a-f]+)?"}]},r=e.QUOTE_STRING_MODE,i=[e.COMMENT(";","$",{relevance:0}),e.COMMENT("#\\|","\\|#")],o={begin:t,relevance:0},s={className:"symbol",begin:"'"+t},l={endsWithParent:!0,relevance:0},c={variants:[{begin:/'/},{begin:"`"}],contains:[{begin:"\\(",end:"\\)",contains:["self",n,r,a,o,s]}]},_={className:"name",begin:t,lexemes:t,keywords:{"builtin-name":"case-lambda call/cc class define-class exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules ' * + , ,@ - ... / ; < <= = => > >= ` abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string=? string>? string? substring symbol->string symbol? tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?"}},d={variants:[{begin:"\\(",end:"\\)"},{begin:"\\[",end:"\\]"}],contains:[{begin:/lambda/,endsWithParent:!0,returnBegin:!0,contains:[_,{begin:/\(/,end:/\)/,endsParent:!0,contains:[o]}]},_,l]};return l.contains=[n,a,r,o,s,c,d].concat(i),{name:"Scheme",illegal:/\S/,contains:[{className:"meta",begin:"^#!",end:"$"},a,r,s,c,d].concat(i)}}},QWjE:function(e,t){e.exports=function(e){return{aliases:["pycon"],contains:[{className:"meta",starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}}},QnJG:function(e,t){e.exports=function(e){return{name:"CSP",case_insensitive:!1,lexemes:"[a-zA-Z][a-zA-Z0-9_-]*",keywords:{keyword:"base-uri child-src connect-src default-src font-src form-action frame-ancestors frame-src img-src media-src object-src plugin-types report-uri sandbox script-src style-src"},contains:[{className:"string",begin:"'",end:"'"},{className:"attribute",begin:"^Content",end:":",excludeEnd:!0}]}}},RLXu:function(e,t){e.exports=function(e){return{name:"Dockerfile",aliases:["docker"],case_insensitive:!0,keywords:"from maintainer expose env arg user onbuild stopsignal",contains:[e.HASH_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{beginKeywords:"run cmd entrypoint volume add copy workdir label healthcheck shell",starts:{end:/[^\\]$/,subLanguage:"bash"}}],illegal:"",end:",\\s+",returnBegin:!0,endsWithParent:!0,contains:[{className:"attr",begin:":\\w+"},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{begin:"\\w+",relevance:0}]}]},{begin:"\\(\\s*",end:"\\s*\\)",excludeEnd:!0,contains:[{begin:"\\w+\\s*=",end:"\\s+",returnBegin:!0,endsWithParent:!0,contains:[{className:"attr",begin:"\\w+",relevance:0},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{begin:"\\w+",relevance:0}]}]}]},{begin:"^\\s*[=~]\\s*"},{begin:"#{",starts:{end:"}",subLanguage:"ruby"}}]}}},TdF3:function(e,t){e.exports=function(e){var t="<>",n="",a={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/},r="[A-Za-z$_][0-9A-Za-z$_]*",i={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},o={className:"number",variants:[{begin:"\\b(0[bB][01]+)n?"},{begin:"\\b(0[oO][0-7]+)n?"},{begin:e.C_NUMBER_RE+"n?"}],relevance:0},s={className:"subst",begin:"\\$\\{",end:"\\}",keywords:i,contains:[]},l={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,s],subLanguage:"xml"}},c={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,s],subLanguage:"css"}},_={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,s]};s.contains=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,l,c,_,o,e.REGEXP_MODE];var d=s.contains.concat([e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]),u={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:d};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:i,contains:[{className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},{className:"meta",begin:/^#!/,end:/$/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,l,c,_,e.C_LINE_COMMENT_MODE,e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+",contains:[{className:"type",begin:"\\{",end:"\\}",relevance:0},{className:"variable",begin:r+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),e.C_BLOCK_COMMENT_MODE,o,{begin:/[{,\n]\s*/,relevance:0,contains:[{begin:r+"\\s*:",returnBegin:!0,relevance:0,contains:[{className:"attr",begin:r,relevance:0}]}]},{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.REGEXP_MODE,{className:"function",begin:"(\\(.*?\\)|"+r+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:r},{begin:/\(\s*\)/},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:i,contains:d}]}]},{begin:/,/,relevance:0},{className:"",begin:/\s/,end:/\s*/,skip:!0},{variants:[{begin:t,end:n},{begin:a.begin,end:a.end}],subLanguage:"xml",contains:[{begin:a.begin,end:a.end,skip:!0,contains:["self"]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:r}),u],illegal:/\[|%/},{begin:/\$[(.]/},e.METHOD_GUARD,{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"constructor",end:/\{/,excludeEnd:!0},{begin:"(get|set)\\s*(?="+r+"\\()",end:/{/,keywords:"get set",contains:[e.inherit(e.TITLE_MODE,{begin:r}),{begin:/\(\)/},u]}],illegal:/#(?!!)/}}},UCcd:function(e,t){e.exports=function(e){var t=e.COMMENT("#","$"),n=e.inherit(e.TITLE_MODE,{begin:"([A-Za-z_]|::)(\\w|::)*"}),a={className:"variable",begin:"\\$([A-Za-z_]|::)(\\w|::)*"},r={className:"string",contains:[e.BACKSLASH_ESCAPE,a],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/}]};return{name:"Puppet",aliases:["pp"],contains:[t,a,r,{beginKeywords:"class",end:"\\{|;",illegal:/=/,contains:[n,t]},{beginKeywords:"define",end:/\{/,contains:[{className:"section",begin:e.IDENT_RE,endsParent:!0}]},{begin:e.IDENT_RE+"\\s+\\{",returnBegin:!0,end:/\S/,contains:[{className:"keyword",begin:e.IDENT_RE},{begin:/\{/,end:/\}/,keywords:{keyword:"and case default else elsif false if in import enherits node or true undef unless main settings $string ",literal:"alias audit before loglevel noop require subscribe tag owner ensure group mode name|0 changes context force incl lens load_path onlyif provider returns root show_diff type_check en_address ip_address realname command environment hour monute month monthday special target weekday creates cwd ogoutput refresh refreshonly tries try_sleep umask backup checksum content ctime force ignore links mtime purge recurse recurselimit replace selinux_ignore_defaults selrange selrole seltype seluser source souirce_permissions sourceselect validate_cmd validate_replacement allowdupe attribute_membership auth_membership forcelocal gid ia_load_module members system host_aliases ip allowed_trunk_vlans description device_url duplex encapsulation etherchannel native_vlan speed principals allow_root auth_class auth_type authenticate_user k_of_n mechanisms rule session_owner shared options device fstype enable hasrestart directory present absent link atboot blockdevice device dump pass remounts poller_tag use message withpath adminfile allow_virtual allowcdrom category configfiles flavor install_options instance package_settings platform responsefile status uninstall_options vendor unless_system_user unless_uid binary control flags hasstatus manifest pattern restart running start stop allowdupe auths expiry gid groups home iterations key_membership keys managehome membership password password_max_age password_min_age profile_membership profiles project purge_ssh_keys role_membership roles salt shell uid baseurl cost descr enabled enablegroups exclude failovermethod gpgcheck gpgkey http_caching include includepkgs keepalive metadata_expire metalink mirrorlist priority protect proxy proxy_password proxy_username repo_gpgcheck s3_enabled skip_if_unavailable sslcacert sslclientcert sslclientkey sslverify mounted",built_in:"architecture augeasversion blockdevices boardmanufacturer boardproductname boardserialnumber cfkey dhcp_servers domain ec2_ ec2_userdata facterversion filesystems ldom fqdn gid hardwareisa hardwaremodel hostname id|0 interfaces ipaddress ipaddress_ ipaddress6 ipaddress6_ iphostnumber is_virtual kernel kernelmajversion kernelrelease kernelversion kernelrelease kernelversion lsbdistcodename lsbdistdescription lsbdistid lsbdistrelease lsbmajdistrelease lsbminordistrelease lsbrelease macaddress macaddress_ macosx_buildversion macosx_productname macosx_productversion macosx_productverson_major macosx_productversion_minor manufacturer memoryfree memorysize netmask metmask_ network_ operatingsystem operatingsystemmajrelease operatingsystemrelease osfamily partitions path physicalprocessorcount processor processorcount productname ps puppetversion rubysitedir rubyversion selinux selinux_config_mode selinux_config_policy selinux_current_mode selinux_current_mode selinux_enforced selinux_policyversion serialnumber sp_ sshdsakey sshecdsakey sshrsakey swapencrypted swapfree swapsize timezone type uniqueid uptime uptime_days uptime_hours uptime_seconds uuid virtual vlans xendomains zfs_version zonenae zones zpool_version"},relevance:0,contains:[r,t,{begin:"[a-zA-Z_]+\\s*=>",returnBegin:!0,end:"=>",contains:[{className:"attr",begin:e.IDENT_RE}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},a]}],relevance:0}]}}},UFGb:function(e,t){e.exports=function(e){var t={variants:[e.COMMENT("--","$"),e.COMMENT("{-","-}",{contains:["self"]})]},n={className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},a={begin:"\\(",end:"\\)",illegal:'"',contains:[{className:"type",begin:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},t]};return{name:"Elm",keywords:"let in if then else case of where module import exposing type alias as infix infixl infixr port effect command subscription",contains:[{beginKeywords:"port effect module",end:"exposing",keywords:"port effect module where command subscription exposing",contains:[a,t],illegal:"\\W\\.|;"},{begin:"import",end:"$",keywords:"import as exposing",contains:[a,t],illegal:"\\W\\.|;"},{begin:"type",end:"$",keywords:"type alias",contains:[n,a,{begin:"{",end:"}",contains:a.contains},t]},{beginKeywords:"infix infixl infixr",end:"$",contains:[e.C_NUMBER_MODE,t]},{begin:"port",end:"$",keywords:"port",contains:[t]},{className:"string",begin:"'\\\\?.",end:"'",illegal:"."},e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,n,e.inherit(e.TITLE_MODE,{begin:"^[_a-z][\\w']*"}),t,{begin:"->|<-"}],illegal:/;/}}},UI5O:function(e,t){e.exports=function(e){var t={keyword:"if else foreach return do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch hidden static parameter",built_in:"ac asnp cat cd CFS chdir clc clear clhy cli clp cls clv cnsn compare copy cp cpi cpp curl cvpa dbp del diff dir dnsn ebp echo|0 epal epcsv epsn erase etsn exsn fc fhx fl ft fw gal gbp gc gcb gci gcm gcs gdr gerr ghy gi gin gjb gl gm gmo gp gps gpv group gsn gsnp gsv gtz gu gv gwmi h history icm iex ihy ii ipal ipcsv ipmo ipsn irm ise iwmi iwr kill lp ls man md measure mi mount move mp mv nal ndr ni nmo npssc nsn nv ogv oh popd ps pushd pwd r rbp rcjb rcsn rd rdr ren ri rjb rm rmdir rmo rni rnp rp rsn rsnp rujb rv rvpa rwmi sajb sal saps sasv sbp sc scb select set shcm si sl sleep sls sort sp spjb spps spsv start stz sujb sv swmi tee trcm type wget where wjb write"},n={begin:"`[\\s\\S]",relevance:0},a={className:"variable",variants:[{begin:/\$\B/},{className:"keyword",begin:/\$this/},{begin:/\$[\w\d][\w\d_:]*/}]},r={className:"string",variants:[{begin:/"/,end:/"/},{begin:/@"/,end:/^"@/}],contains:[n,a,{className:"variable",begin:/\$[A-z]/,end:/[^A-z]/}]},i={className:"string",variants:[{begin:/'/,end:/'/},{begin:/@'/,end:/^'@/}]},o=e.inherit(e.COMMENT(null,null),{variants:[{begin:/#/,end:/$/},{begin:/<#/,end:/#>/}],contains:[{className:"doctag",variants:[{begin:/\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/},{begin:/\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\s+\S+/}]}]}),s={className:"built_in",variants:[{begin:"(".concat("Add|Clear|Close|Copy|Enter|Exit|Find|Format|Get|Hide|Join|Lock|Move|New|Open|Optimize|Pop|Push|Redo|Remove|Rename|Reset|Resize|Search|Select|Set|Show|Skip|Split|Step|Switch|Undo|Unlock|Watch|Backup|Checkpoint|Compare|Compress|Convert|ConvertFrom|ConvertTo|Dismount|Edit|Expand|Export|Group|Import|Initialize|Limit|Merge|New|Out|Publish|Restore|Save|Sync|Unpublish|Update|Approve|Assert|Complete|Confirm|Deny|Disable|Enable|Install|Invoke|Register|Request|Restart|Resume|Start|Stop|Submit|Suspend|Uninstall|Unregister|Wait|Debug|Measure|Ping|Repair|Resolve|Test|Trace|Connect|Disconnect|Read|Receive|Send|Write|Block|Grant|Protect|Revoke|Unblock|Unprotect|Use|ForEach|Sort|Tee|Where",")+(-)[\\w\\d]+")}]},l={className:"class",beginKeywords:"class enum",end:/\s*[{]/,excludeEnd:!0,relevance:0,contains:[e.TITLE_MODE]},c={className:"function",begin:/function\s+/,end:/\s*\{|$/,excludeEnd:!0,returnBegin:!0,relevance:0,contains:[{begin:"function",relevance:0,className:"keyword"},{className:"title",begin:/\w[\w\d]*((-)[\w\d]+)*/,relevance:0},{begin:/\(/,end:/\)/,className:"params",relevance:0,contains:[a]}]},_={begin:/using\s/,end:/$/,returnBegin:!0,contains:[r,i,{className:"keyword",begin:/(using|assembly|command|module|namespace|type)/}]},d={variants:[{className:"operator",begin:"(".concat("-and|-as|-band|-bnot|-bor|-bxor|-casesensitive|-ccontains|-ceq|-cge|-cgt|-cle|-clike|-clt|-cmatch|-cne|-cnotcontains|-cnotlike|-cnotmatch|-contains|-creplace|-csplit|-eq|-exact|-f|-file|-ge|-gt|-icontains|-ieq|-ige|-igt|-ile|-ilike|-ilt|-imatch|-in|-ine|-inotcontains|-inotlike|-inotmatch|-ireplace|-is|-isnot|-isplit|-join|-le|-like|-lt|-match|-ne|-not|-notcontains|-notin|-notlike|-notmatch|-or|-regex|-replace|-shl|-shr|-split|-wildcard|-xor",")\\b")},{className:"literal",begin:/(-)[\w\d]+/,relevance:0}]},u={className:"function",begin:/\[.*\]\s*[\w]+[ ]??\(/,end:/$/,returnBegin:!0,relevance:0,contains:[{className:"keyword",begin:"(".concat(t.keyword.toString().replace(/\s/g,"|"),")\\b"),endsParent:!0,relevance:0},e.inherit(e.TITLE_MODE,{endsParent:!0})]},p=[u,o,n,e.NUMBER_MODE,r,i,s,a,{className:"literal",begin:/\$(null|true|false)\b/},{className:"selector-tag",begin:/\@\B/,relevance:0}],m={begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[].concat("self",p,{begin:"("+["string","char","byte","int","long","bool","decimal","single","double","DateTime","xml","array","hashtable","void"].join("|")+")",className:"built_in",relevance:0},{className:"type",begin:/[\.\w\d]+/,relevance:0})};return u.contains.unshift(m),{name:"PowerShell",aliases:["ps","ps1"],lexemes:/-?[A-z\.\-]+\b/,case_insensitive:!0,keywords:t,contains:p.concat(l,c,_,d,m)}}},URgk:function(e,t,n){(function(e){var a=void 0!==e&&e||"undefined"!=typeof self&&self||window,r=Function.prototype.apply;function i(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new i(r.call(setTimeout,a,arguments),clearTimeout)},t.setInterval=function(){return new i(r.call(setInterval,a,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},i.prototype.unref=i.prototype.ref=function(){},i.prototype.close=function(){this._clearFn.call(a,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},n("YBdB"),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,n("yLpj"))},Uasv:function(e,t){e.exports=function(e){return{name:"Clean",aliases:["clean","icl","dcl"],keywords:{keyword:"if let in with where case of class instance otherwise implementation definition system module from import qualified as special code inline foreign export ccall stdcall generic derive infix infixl infixr",built_in:"Int Real Char Bool",literal:"True False"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,{begin:"->|<-[|:]?|#!?|>>=|\\{\\||\\|\\}|:==|=:|<>"}]}}},UnBK:function(e,t,n){"use strict";var a=n("xTJ+"),r=n("xAGQ"),i=n("Lmem"),o=n("JEQr");function s(e){e.cancelToken&&e.cancelToken.throwIfRequested()}e.exports=function(e){return s(e),e.headers=e.headers||{},e.data=r(e.data,e.headers,e.transformRequest),e.headers=a.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),a.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete e.headers[t]})),(e.adapter||o.adapter)(e).then((function(t){return s(e),t.data=r(t.data,t.headers,e.transformResponse),t}),(function(t){return i(t)||(s(e),t&&t.response&&(t.response.data=r(t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)}))}},VrLj:function(e,t){e.exports=function(e){var t="[ \\t\\f]*",n="("+t+"[:=]"+t+"|[ \\t\\f]+)",a="([^\\\\:= \\t\\f\\n]|\\\\.)+",r={end:n,relevance:0,starts:{className:"string",end:/$/,relevance:0,contains:[{begin:"\\\\\\n"}]}};return{name:".properties",case_insensitive:!0,illegal:/\S/,contains:[e.COMMENT("^\\s*[!#]","$"),{begin:"([^\\\\\\W:= \\t\\f\\n]|\\\\.)+"+n,returnBegin:!0,contains:[{className:"attr",begin:"([^\\\\\\W:= \\t\\f\\n]|\\\\.)+",endsParent:!0,relevance:0}],starts:r},{begin:a+n,returnBegin:!0,relevance:0,contains:[{className:"meta",begin:a,endsParent:!0,relevance:0}],starts:r},{className:"attr",relevance:0,begin:a+t+"$"}]}}},WSH0:function(e,t){e.exports=function(e){var t={className:"literal",begin:"[\\+\\-]",relevance:0};return{name:"Brainfuck",aliases:["bf"],contains:[e.COMMENT("[^\\[\\]\\.,\\+\\-<> \r\n]","[\\[\\]\\.,\\+\\-<> \r\n]",{returnEnd:!0,relevance:0}),{className:"title",begin:"[\\[\\]]",relevance:0},{className:"string",begin:"[\\.,]",relevance:0},{begin:/(?:\+\+|\-\-)/,contains:[t]},t]}}},Wj43:function(e,t){e.exports=function(e){return{name:"VBScript",aliases:["vbs"],case_insensitive:!0,keywords:{keyword:"call class const dim do loop erase execute executeglobal exit for each next function if then else on error option explicit new private property let get public randomize redim rem select case set stop sub while wend with end to elseif is or xor and not class_initialize class_terminate default preserve in me byval byref step resume goto",built_in:"lcase month vartype instrrev ubound setlocale getobject rgb getref string weekdayname rnd dateadd monthname now day minute isarray cbool round formatcurrency conversions csng timevalue second year space abs clng timeserial fixs len asc isempty maths dateserial atn timer isobject filter weekday datevalue ccur isdate instr datediff formatdatetime replace isnull right sgn array snumeric log cdbl hex chr lbound msgbox ucase getlocale cos cdate cbyte rtrim join hour oct typename trim strcomp int createobject loadpicture tan formatnumber mid scriptenginebuildversion scriptengine split scriptengineminorversion cint sin datepart ltrim sqr scriptenginemajorversion time derived eval date formatpercent exp inputbox left ascw chrw regexp server response request cstr err",literal:"true false null nothing empty"},illegal:"//",contains:[e.inherit(e.QUOTE_STRING_MODE,{contains:[{begin:'""'}]}),e.COMMENT(/'/,/$/,{relevance:0}),e.C_NUMBER_MODE]}}},WtIr:function(e,t){e.exports=function(e){var t={literal:"true false null"},n=[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],a=[e.QUOTE_STRING_MODE,e.C_NUMBER_MODE],r={end:",",endsWithParent:!0,excludeEnd:!0,contains:a,keywords:t},i={begin:"{",end:"}",contains:[{className:"attr",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE],illegal:"\\n"},e.inherit(r,{begin:/:/})].concat(n),illegal:"\\S"},o={begin:"\\[",end:"\\]",contains:[e.inherit(r)],illegal:"\\S"};return a.push(i,o),n.forEach((function(e){a.push(e)})),{name:"JSON",contains:a,keywords:t,illegal:"\\S"}}},Xfvt:function(e,t){e.exports=function(e){return{name:"Q",aliases:["k","kdb"],keywords:{keyword:"do while select delete by update from",literal:"0b 1b",built_in:"neg not null string reciprocal floor ceiling signum mod xbar xlog and or each scan over prior mmu lsq inv md5 ltime gtime count first var dev med cov cor all any rand sums prds mins maxs fills deltas ratios avgs differ prev next rank reverse iasc idesc asc desc msum mcount mavg mdev xrank mmin mmax xprev rotate distinct group where flip type key til get value attr cut set upsert raze union inter except cross sv vs sublist enlist read0 read1 hopen hclose hdel hsym hcount peach system ltrim rtrim trim lower upper ssr view tables views cols xcols keys xkey xcol xasc xdesc fkeys meta lj aj aj0 ij pj asof uj ww wj wj1 fby xgroup ungroup ej save load rsave rload show csv parse eval min max avg wavg wsum sin cos tan sum",type:"`float `double int `timestamp `timespan `datetime `time `boolean `symbol `char `byte `short `long `real `month `date `minute `second `guid"},lexemes:/(`?)[A-Za-z0-9_]+\b/,contains:[e.C_LINE_COMMENT_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE]}}},XuX8:function(e,t,n){e.exports=n("INkZ")},YBdB:function(e,t,n){(function(e,t){!function(e,n){"use strict";if(!e.setImmediate){var a,r,i,o,s,l=1,c={},_=!1,d=e.document,u=Object.getPrototypeOf&&Object.getPrototypeOf(e);u=u&&u.setTimeout?u:e,"[object process]"==={}.toString.call(e.process)?a=function(e){t.nextTick((function(){m(e)}))}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,n=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=n,t}}()?e.MessageChannel?((i=new MessageChannel).port1.onmessage=function(e){m(e.data)},a=function(e){i.port2.postMessage(e)}):d&&"onreadystatechange"in d.createElement("script")?(r=d.documentElement,a=function(e){var t=d.createElement("script");t.onreadystatechange=function(){m(e),t.onreadystatechange=null,r.removeChild(t),t=null},r.appendChild(t)}):a=function(e){setTimeout(m,0,e)}:(o="setImmediate$"+Math.random()+"$",s=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(o)&&m(+t.data.slice(o.length))},e.addEventListener?e.addEventListener("message",s,!1):e.attachEvent("onmessage",s),a=function(t){e.postMessage(o+t,"*")}),u.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n\s*[);\]]/,relevance:0,subLanguage:"xml"}],relevance:0},{className:"keyword",begin:"\\bsignal\\b",starts:{className:"string",end:"(\\(|:|=|;|,|//|/\\*|$)",returnEnd:!0}},{className:"keyword",begin:"\\bproperty\\b",starts:{className:"string",end:"(:|=|;|,|//|/\\*|$)",returnEnd:!0}},{className:"function",beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][0-9A-Za-z$_]*/}),{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]}],illegal:/\[|%/},{begin:"\\."+e.IDENT_RE,relevance:0},n,a,r],illegal:/#/}}},ZrqW:function(e,t){e.exports=function(e){return{name:"Mojolicious",subLanguage:"xml",contains:[{className:"meta",begin:"^__(END|DATA)__$"},{begin:"^\\s*%{1,2}={0,2}",end:"$",subLanguage:"perl"},{begin:"<%{1,2}={0,2}",end:"={0,1}%>",subLanguage:"perl",excludeBegin:!0,excludeEnd:!0}]}}},alHH:function(e,t){e.exports=function(e){var t="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qq fileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmget sub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedir ioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",n={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:t},a={begin:"->{",end:"}"},r={variants:[{begin:/\$\d/},{begin:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{begin:/[\$%@][^\s\w{]/,relevance:0}]},i=[e.BACKSLASH_ESCAPE,n,r],o=[r,e.HASH_COMMENT_MODE,e.COMMENT("^\\=\\w","\\=cut",{endsWithParent:!0}),a,{className:"string",contains:i,variants:[{begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*\\<",end:"\\>",relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE]},{begin:"{\\w+}",contains:[],relevance:0},{begin:"-?\\w+\\s*\\=\\>",contains:[],relevance:0}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",keywords:"split return print reverse grep",relevance:0,contains:[e.HASH_COMMENT_MODE,{className:"regexp",begin:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",relevance:10},{className:"regexp",begin:"(m|qr)?/",end:"/[a-z]*",contains:[e.BACKSLASH_ESCAPE],relevance:0}]},{className:"function",beginKeywords:"sub",end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]}];return n.contains=o,a.contains=o,{name:"Perl",aliases:["pl","pm"],lexemes:/[\w\.]+/,keywords:t,contains:o}}},beiO:function(e,t){e.exports=function(e){var t="abstract add and array as asc aspect assembly async begin break block by case class concat const copy constructor continue create default delegate desc distinct div do downto dynamic each else empty end ensure enum equals event except exit extension external false final finalize finalizer finally flags for forward from function future global group has if implementation implements implies in index inherited inline interface into invariants is iterator join locked locking loop matching method mod module namespace nested new nil not notify nullable of old on operator or order out override parallel params partial pinned private procedure property protected public queryable raise read readonly record reintroduce remove repeat require result reverse sealed select self sequence set shl shr skip static step soft take then to true try tuple type union unit unsafe until uses using var virtual raises volatile where while with write xor yield await mapped deprecated stdcall cdecl pascal register safecall overload library platform reference packed strict published autoreleasepool selector strong weak unretained",n=e.COMMENT("{","}",{relevance:0}),a=e.COMMENT("\\(\\*","\\*\\)",{relevance:10}),r={className:"string",begin:"'",end:"'",contains:[{begin:"''"}]},i={className:"string",begin:"(#\\d+)+"},o={className:"function",beginKeywords:"function constructor destructor procedure method",end:"[:;]",keywords:"function constructor|10 destructor|10 procedure|10 method|10",contains:[e.TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",keywords:t,contains:[r,i]},n,a]};return{name:"Oxygene",case_insensitive:!0,lexemes:/\.?\w+/,keywords:t,illegal:'("|\\$[G-Zg-z]|\\/\\*||->)',contains:[n,a,e.C_LINE_COMMENT_MODE,r,i,e.NUMBER_MODE,o,{className:"class",begin:"=\\bclass\\b",end:"end;",keywords:t,contains:[r,i,n,a,e.C_LINE_COMMENT_MODE,o]}]}}},d4EH:function(e,t){e.exports=function(e){var t="div mod in and or not xor asserterror begin case do downto else end exit for if of repeat then to until while with var",n=[e.C_LINE_COMMENT_MODE,e.COMMENT(/\{/,/\}/,{relevance:0}),e.COMMENT(/\(\*/,/\*\)/,{relevance:10})],a={className:"string",begin:/'/,end:/'/,contains:[{begin:/''/}]},r={className:"string",begin:/(#\d+)+/},i={className:"function",beginKeywords:"procedure",end:/[:;]/,keywords:"procedure|10",contains:[e.TITLE_MODE,{className:"params",begin:/\(/,end:/\)/,keywords:t,contains:[a,r]}].concat(n)},o={className:"class",begin:"OBJECT (Table|Form|Report|Dataport|Codeunit|XMLport|MenuSuite|Page|Query) (\\d+) ([^\\r\\n]+)",returnBegin:!0,contains:[e.TITLE_MODE,i]};return{name:"C/AL",case_insensitive:!0,keywords:{keyword:t,literal:"false true"},illegal:/\/\*/,contains:[a,r,{className:"number",begin:"\\b\\d+(\\.\\d+)?(DT|D|T)",relevance:0},{className:"string",begin:'"',end:'"'},e.NUMBER_MODE,o,i]}}},ddo8:function(e,t){e.exports=function(e){return{name:"Backus–Naur Form",contains:[{className:"attribute",begin://},{begin:/::=/,end:/$/,contains:[{begin://},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]}]}}},dnrZ:function(e,t){e.exports=function(e){return{name:"Packet Filter config",aliases:["pf.conf"],lexemes:/[a-z0-9_<>-]+/,keywords:{built_in:"block match pass load anchor|5 antispoof|10 set table",keyword:"in out log quick on rdomain inet inet6 proto from port os to route allow-opts divert-packet divert-reply divert-to flags group icmp-type icmp6-type label once probability recieved-on rtable prio queue tos tag tagged user keep fragment for os drop af-to|10 binat-to|10 nat-to|10 rdr-to|10 bitmask least-stats random round-robin source-hash static-port dup-to reply-to route-to parent bandwidth default min max qlimit block-policy debug fingerprints hostid limit loginterface optimization reassemble ruleset-optimization basic none profile skip state-defaults state-policy timeout const counters persist no modulate synproxy state|5 floating if-bound no-sync pflow|10 sloppy source-track global rule max-src-nodes max-src-states max-src-conn max-src-conn-rate overload flush scrub|5 max-mss min-ttl no-df|10 random-id",literal:"all any no-route self urpf-failed egress|5 unknown"},contains:[e.HASH_COMMENT_MODE,e.NUMBER_MODE,e.QUOTE_STRING_MODE,{className:"variable",begin:/\$[\w\d#@][\w\d_]*/},{className:"variable",begin:/<(?!\/)/,end:/>/}]}}},dycj:function(e,t){e.exports=function(e){var t="[a-zA-Z_][a-zA-Z0-9_.]*(\\!|\\?)?",n="and false then defined module in return redo retry end for true self when next until do begin unless nil break not case cond alias while ensure or include use alias fn quote require import with|0",a={className:"subst",begin:"#\\{",end:"}",lexemes:t,keywords:n},r={className:"number",begin:"(\\b0o[0-7_]+)|(\\b0b[01_]+)|(\\b0x[0-9a-fA-F_]+)|(-?\\b[1-9][0-9_]*(.[0-9_]+([eE][-+]?[0-9]+)?)?)",relevance:0},i={className:"string",begin:"~[a-z](?=[/|([{<\"'])",contains:[{endsParent:!0,contains:[{contains:[e.BACKSLASH_ESCAPE,a],variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/},{begin:/\//,end:/\//},{begin:/\|/,end:/\|/},{begin:/\(/,end:/\)/},{begin:/\[/,end:/\]/},{begin:/\{/,end:/\}/},{begin://}]}]}]},o={className:"string",begin:"~[A-Z](?=[/|([{<\"'])",contains:[{begin:/"/,end:/"/},{begin:/'/,end:/'/},{begin:/\//,end:/\//},{begin:/\|/,end:/\|/},{begin:/\(/,end:/\)/},{begin:/\[/,end:/\]/},{begin:/\{/,end:/\}/},{begin:/\/}]},s={className:"string",contains:[e.BACKSLASH_ESCAPE,a],variants:[{begin:/"""/,end:/"""/},{begin:/'''/,end:/'''/},{begin:/~S"""/,end:/"""/,contains:[]},{begin:/~S"/,end:/"/,contains:[]},{begin:/~S'''/,end:/'''/,contains:[]},{begin:/~S'/,end:/'/,contains:[]},{begin:/'/,end:/'/},{begin:/"/,end:/"/}]},l={className:"function",beginKeywords:"def defp defmacro",end:/\B\b/,contains:[e.inherit(e.TITLE_MODE,{begin:t,endsParent:!0})]},c=e.inherit(l,{className:"class",beginKeywords:"defimpl defmodule defprotocol defrecord",end:/\bdo\b|$|;/}),_=[s,o,i,e.HASH_COMMENT_MODE,c,l,{begin:"::"},{className:"symbol",begin:":(?![\\s:])",contains:[s,{begin:"[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?"}],relevance:0},{className:"symbol",begin:t+":(?!:)",relevance:0},r,{className:"variable",begin:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{begin:"->"},{begin:"("+e.RE_STARTERS_RE+")\\s*",contains:[e.HASH_COMMENT_MODE,{begin:/\/: (?=\d+\s*[,\]])/,relevance:0,contains:[r]},{className:"regexp",illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,a],variants:[{begin:"/",end:"/[a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}],relevance:0}];return a.contains=_,{name:"Elixir",lexemes:t,keywords:n,contains:_}}},e8E9:function(e,t){e.exports=function(e){var t=e.inherit(e.QUOTE_STRING_MODE,{illegal:""}),n={className:"params",begin:"\\(",end:"\\)",contains:["self",e.C_NUMBER_MODE,t]},a=e.COMMENT("--","$"),r=[a,e.COMMENT("\\(\\*","\\*\\)",{contains:["self",a]}),e.HASH_COMMENT_MODE];return{name:"AppleScript",aliases:["osascript"],keywords:{keyword:"about above after against and around as at back before beginning behind below beneath beside between but by considering contain contains continue copy div does eighth else end equal equals error every exit fifth first for fourth from front get given global if ignoring in into is it its last local me middle mod my ninth not of on onto or over prop property put ref reference repeat returning script second set seventh since sixth some tell tenth that the|0 then third through thru timeout times to transaction try until where while whose with without",literal:"AppleScript false linefeed return pi quote result space tab true",built_in:"alias application boolean class constant date file integer list number real record string text activate beep count delay launch log offset read round run say summarize write character characters contents day frontmost id item length month name paragraph paragraphs rest reverse running time version weekday word words year"},contains:[t,e.C_NUMBER_MODE,{className:"built_in",begin:"\\b(clipboard info|the clipboard|info for|list (disks|folder)|mount volume|path to|(close|open for) access|(get|set) eof|current date|do shell script|get volume settings|random number|set volume|system attribute|system info|time to GMT|(load|run|store) script|scripting components|ASCII (character|number)|localized string|choose (application|color|file|file name|folder|from list|remote application|URL)|display (alert|dialog))\\b|^\\s*return\\b"},{className:"literal",begin:"\\b(text item delimiters|current application|missing value)\\b"},{className:"keyword",begin:"\\b(apart from|aside from|instead of|out of|greater than|isn't|(doesn't|does not) (equal|come before|come after|contain)|(greater|less) than( or equal)?|(starts?|ends|begins?) with|contained by|comes (before|after)|a (ref|reference)|POSIX file|POSIX path|(date|time) string|quoted form)\\b"},{beginKeywords:"on",illegal:"[${=;\\n]",contains:[e.UNDERSCORE_TITLE_MODE,n]}].concat(r),illegal:"//|->|=>|\\[\\["}}},ebWy:function(e,t){e.exports=function(e){e.requireLanguage("handlebars");var t="action collection component concat debugger each each-in else get hash if input link-to loc log mut outlet partial query-params render textarea unbound unless with yield view",n=(e.QUOTE_STRING_MODE,{endsWithParent:!0,relevance:0,keywords:{keyword:"as",built_in:t},contains:[e.QUOTE_STRING_MODE,{illegal:/\}\}/,begin:/[a-zA-Z0-9_]+=/,returnBegin:!0,relevance:0,contains:[{className:"attr",begin:/[a-zA-Z0-9_]+/}]},e.NUMBER_MODE]});return{name:"HTMLBars",case_insensitive:!0,subLanguage:"xml",contains:[e.COMMENT("{{!(--)?","(--)?}}"),{className:"template-tag",begin:/\{\{[#\/]/,end:/\}\}/,contains:[{className:"name",begin:/[a-zA-Z\.\-]+/,keywords:{"builtin-name":t},starts:n}]},{className:"template-variable",begin:/\{\{[a-zA-Z][a-zA-Z\-]+/,end:/\}\}/,keywords:{keyword:"as",built_in:t},contains:[e.QUOTE_STRING_MODE]}]}}},el66:function(e,t){e.exports=function(e){var t={className:"variable",variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)",contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%"}]}}},fHEK:function(e,t){e.exports=function(e){return{name:"Haxe",aliases:["hx"],keywords:{keyword:"break case cast catch continue default do dynamic else enum extern for function here if import in inline never new override package private get set public return static super switch this throw trace try typedef untyped using var while Int Float String Bool Dynamic Void Array ",built_in:"trace this",literal:"true false null _"},contains:[{className:"string",begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE,{className:"subst",begin:"\\$\\{",end:"\\}"},{className:"subst",begin:"\\$",end:"\\W}"}]},e.QUOTE_STRING_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.C_NUMBER_MODE,{className:"meta",begin:"@:",end:"$"},{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"if else elseif end error"}},{className:"type",begin:":[ \t]*",end:"[^A-Za-z0-9_ \t\\->]",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:":[ \t]*",end:"\\W",excludeBegin:!0,excludeEnd:!0},{className:"type",begin:"new *",end:"\\W",excludeBegin:!0,excludeEnd:!0},{className:"class",beginKeywords:"enum",end:"\\{",contains:[e.TITLE_MODE]},{className:"class",beginKeywords:"abstract",end:"[\\{$]",contains:[{className:"type",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"type",begin:"from +",end:"\\W",excludeBegin:!0,excludeEnd:!0},{className:"type",begin:"to +",end:"\\W",excludeBegin:!0,excludeEnd:!0},e.TITLE_MODE],keywords:{keyword:"abstract from to"}},{className:"class",begin:"\\b(class|interface) +",end:"[\\{$]",excludeEnd:!0,keywords:"class interface",contains:[{className:"keyword",begin:"\\b(extends|implements) +",keywords:"extends implements",contains:[{className:"type",begin:e.IDENT_RE,relevance:0}]},e.TITLE_MODE]},{className:"function",beginKeywords:"function",end:"\\(",excludeEnd:!0,illegal:"\\S",contains:[e.TITLE_MODE]}],illegal:/<\//}}},fP8y:function(e,t){e.exports=function(e){var t=e.COMMENT(/^\s*@?rem\b/,/$/,{relevance:10});return{name:"Batch file (DOS)",aliases:["bat","cmd"],case_insensitive:!0,illegal:/\/\*/,keywords:{keyword:"if else goto for in do call exit not exist errorlevel defined equ neq lss leq gtr geq",built_in:"prn nul lpt3 lpt2 lpt1 con com4 com3 com2 com1 aux shift cd dir echo setlocal endlocal set pause copy append assoc at attrib break cacls cd chcp chdir chkdsk chkntfs cls cmd color comp compact convert date dir diskcomp diskcopy doskey erase fs find findstr format ftype graftabl help keyb label md mkdir mode more move path pause print popd pushd promt rd recover rem rename replace restore rmdir shift sort start subst time title tree type ver verify vol ping net ipconfig taskkill xcopy ren del"},contains:[{className:"variable",begin:/%%[^ ]|%[^ ]+?%|![^ ]+?!/},{className:"function",begin:"^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)",end:"goto:eof",contains:[e.inherit(e.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),t]},{className:"number",begin:"\\b\\d+",relevance:0},t]}}},fZ2E:function(e,t){e.exports=function(e){var t={keyword:"abort acronym acronyms alias all and assign binary card diag display else eq file files for free ge gt if integer le loop lt maximizing minimizing model models ne negative no not option options or ord positive prod put putpage puttl repeat sameas semicont semiint smax smin solve sos1 sos2 sum system table then until using while xor yes",literal:"eps inf na","built-in":"abs arccos arcsin arctan arctan2 Beta betaReg binomial ceil centropy cos cosh cvPower div div0 eDist entropy errorf execSeed exp fact floor frac gamma gammaReg log logBeta logGamma log10 log2 mapVal max min mod ncpCM ncpF ncpVUpow ncpVUsin normal pi poly power randBinomial randLinear randTriangle round rPower sigmoid sign signPower sin sinh slexp sllog10 slrec sqexp sqlog10 sqr sqrec sqrt tan tanh trunc uniform uniformInt vcPower bool_and bool_eqv bool_imp bool_not bool_or bool_xor ifThen rel_eq rel_ge rel_gt rel_le rel_lt rel_ne gday gdow ghour gleap gmillisec gminute gmonth gsecond gyear jdate jnow jstart jtime errorLevel execError gamsRelease gamsVersion handleCollect handleDelete handleStatus handleSubmit heapFree heapLimit heapSize jobHandle jobKill jobStatus jobTerminate licenseLevel licenseStatus maxExecError sleep timeClose timeComp timeElapsed timeExec timeStart"},n={className:"symbol",variants:[{begin:/\=[lgenxc]=/},{begin:/\$/}]},a={className:"comment",variants:[{begin:"'",end:"'"},{begin:'"',end:'"'}],illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},r={begin:"/",end:"/",keywords:t,contains:[a,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_NUMBER_MODE]},i={begin:/[a-z][a-z0-9_]*(\([a-z0-9_, ]*\))?[ \t]+/,excludeBegin:!0,end:"$",endsWithParent:!0,contains:[a,r,{className:"comment",begin:/([ ]*[a-z0-9&#*=?@>\\<:\-,()$\[\]_.{}!+%^]+)+/,relevance:0}]};return{name:"GAMS",aliases:["gms"],case_insensitive:!0,keywords:t,contains:[e.COMMENT(/^\$ontext/,/^\$offtext/),{className:"meta",begin:"^\\$[a-z0-9]+",end:"$",returnBegin:!0,contains:[{className:"meta-keyword",begin:"^\\$[a-z0-9]+"}]},e.COMMENT("^\\*","$"),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{beginKeywords:"set sets parameter parameters variable variables scalar scalars equation equations",end:";",contains:[e.COMMENT("^\\*","$"),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,r,i]},{beginKeywords:"table",end:";",returnBegin:!0,contains:[{beginKeywords:"table",end:"$",contains:[i]},e.COMMENT("^\\*","$"),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_NUMBER_MODE]},{className:"function",begin:/^[a-z][a-z0-9_,\-+' ()$]+\.{2}/,returnBegin:!0,contains:[{className:"title",begin:/^[a-z0-9_]+/},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0},n]},e.C_NUMBER_MODE,n]}}},g7np:function(e,t,n){"use strict";var a=n("2SVd"),r=n("5oMp");e.exports=function(e,t){return e&&!a(t)?r(e,t):t}},gLO8:function(e,t){e.exports=function(e){return{name:"Coq",keywords:{keyword:"_|0 as at cofix else end exists exists2 fix for forall fun if IF in let match mod Prop return Set then Type using where with Abort About Add Admit Admitted All Arguments Assumptions Axiom Back BackTo Backtrack Bind Blacklist Canonical Cd Check Class Classes Close Coercion Coercions CoFixpoint CoInductive Collection Combined Compute Conjecture Conjectures Constant constr Constraint Constructors Context Corollary CreateHintDb Cut Declare Defined Definition Delimit Dependencies Dependent Derive Drop eauto End Equality Eval Example Existential Existentials Existing Export exporting Extern Extract Extraction Fact Field Fields File Fixpoint Focus for From Function Functional Generalizable Global Goal Grab Grammar Graph Guarded Heap Hint HintDb Hints Hypotheses Hypothesis ident Identity If Immediate Implicit Import Include Inductive Infix Info Initial Inline Inspect Instance Instances Intro Intros Inversion Inversion_clear Language Left Lemma Let Libraries Library Load LoadPath Local Locate Ltac ML Mode Module Modules Monomorphic Morphism Next NoInline Notation Obligation Obligations Opaque Open Optimize Options Parameter Parameters Parametric Path Paths pattern Polymorphic Preterm Print Printing Program Projections Proof Proposition Pwd Qed Quit Rec Record Recursive Redirect Relation Remark Remove Require Reserved Reset Resolve Restart Rewrite Right Ring Rings Save Scheme Scope Scopes Script Search SearchAbout SearchHead SearchPattern SearchRewrite Section Separate Set Setoid Show Solve Sorted Step Strategies Strategy Structure SubClass Table Tables Tactic Term Test Theorem Time Timeout Transparent Type Typeclasses Types Undelimit Undo Unfocus Unfocused Unfold Universe Universes Unset Unshelve using Variable Variables Variant Verbose Visibility where with",built_in:"abstract absurd admit after apply as assert assumption at auto autorewrite autounfold before bottom btauto by case case_eq cbn cbv change classical_left classical_right clear clearbody cofix compare compute congruence constr_eq constructor contradict contradiction cut cutrewrite cycle decide decompose dependent destruct destruction dintuition discriminate discrR do double dtauto eapply eassumption eauto ecase econstructor edestruct ediscriminate eelim eexact eexists einduction einjection eleft elim elimtype enough equality erewrite eright esimplify_eq esplit evar exact exactly_once exfalso exists f_equal fail field field_simplify field_simplify_eq first firstorder fix fold fourier functional generalize generalizing gfail give_up has_evar hnf idtac in induction injection instantiate intro intro_pattern intros intuition inversion inversion_clear is_evar is_var lapply lazy left lia lra move native_compute nia nsatz omega once pattern pose progress proof psatz quote record red refine reflexivity remember rename repeat replace revert revgoals rewrite rewrite_strat right ring ring_simplify rtauto set setoid_reflexivity setoid_replace setoid_rewrite setoid_symmetry setoid_transitivity shelve shelve_unifiable simpl simple simplify_eq solve specialize split split_Rabs split_Rmult stepl stepr subst sum swap symmetry tactic tauto time timeout top transitivity trivial try tryif unfold unify until using vm_compute with"},contains:[e.QUOTE_STRING_MODE,e.COMMENT("\\(\\*","\\*\\)"),e.C_NUMBER_MODE,{className:"type",excludeBegin:!0,begin:"\\|\\s*",end:"\\w+"},{begin:/[-=]>/}]}}},gmEm:function(e,t){e.exports=function(e){return{name:"Caché Object Script",case_insensitive:!0,aliases:["cos","cls"],keywords:"property parameter class classmethod clientmethod extends as break catch close continue do d|0 else elseif for goto halt hang h|0 if job j|0 kill k|0 lock l|0 merge new open quit q|0 read r|0 return set s|0 tcommit throw trollback try tstart use view while write w|0 xecute x|0 zkill znspace zn ztrap zwrite zw zzdump zzwrite print zbreak zinsert zload zprint zremove zsave zzprint mv mvcall mvcrt mvdim mvprint zquit zsync ascii",contains:[{className:"number",begin:"\\b(\\d+(\\.\\d*)?|\\.\\d+)",relevance:0},{className:"string",variants:[{begin:'"',end:'"',contains:[{begin:'""',relevance:0}]}]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"comment",begin:/;/,end:"$",relevance:0},{className:"built_in",begin:/(?:\$\$?|\.\.)\^?[a-zA-Z]+/},{className:"built_in",begin:/\$\$\$[a-zA-Z]+/},{className:"built_in",begin:/%[a-z]+(?:\.[a-z]+)*/},{className:"symbol",begin:/\^%?[a-zA-Z][\w]*/},{className:"keyword",begin:/##class|##super|#define|#dim/},{begin:/&sql\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,subLanguage:"sql"},{begin:/&(js|jscript|javascript)/,excludeBegin:!0,excludeEnd:!0,subLanguage:"javascript"},{begin:/&html<\s*\s*>/,subLanguage:"xml"}]}}},gst6:function(e,t){e.exports=function(e){var t="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",n={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},a={className:"doctag",begin:"@[A-Za-z]+"},r={begin:"#<",end:">"},i=[e.COMMENT("#","$",{contains:[a]}),e.COMMENT("^\\=begin","^\\=end",{contains:[a],relevance:10}),e.COMMENT("^__END__","\\n$")],o={className:"subst",begin:"#\\{",end:"}",keywords:n},s={className:"string",contains:[e.BACKSLASH_ESCAPE,o],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:"%[qQwWx]?\\(",end:"\\)"},{begin:"%[qQwWx]?\\[",end:"\\]"},{begin:"%[qQwWx]?{",end:"}"},{begin:"%[qQwWx]?<",end:">"},{begin:"%[qQwWx]?/",end:"/"},{begin:"%[qQwWx]?%",end:"%"},{begin:"%[qQwWx]?-",end:"-"},{begin:"%[qQwWx]?\\|",end:"\\|"},{begin:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{begin:/<<[-~]?'?(\w+)(?:.|\n)*?\n\s*\1\b/,returnBegin:!0,contains:[{begin:/<<[-~]?'?/},{begin:/\w+/,endSameAsBegin:!0,contains:[e.BACKSLASH_ESCAPE,o]}]}]},l={className:"params",begin:"\\(",end:"\\)",endsParent:!0,keywords:n},c=[s,r,{className:"class",beginKeywords:"class module",end:"$|;",illegal:/=/,contains:[e.inherit(e.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{begin:"<\\s*",contains:[{begin:"("+e.IDENT_RE+"::)?"+e.IDENT_RE}]}].concat(i)},{className:"function",beginKeywords:"def",end:"$|;",contains:[e.inherit(e.TITLE_MODE,{begin:t}),l].concat(i)},{begin:e.IDENT_RE+"::"},{className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"(\\!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[s,{begin:t}],relevance:0},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{className:"params",begin:/\|/,end:/\|/,keywords:n},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[r,{className:"regexp",contains:[e.BACKSLASH_ESCAPE,o],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:"%r{",end:"}[a-z]*"},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}].concat(i),relevance:0}].concat(i);o.contains=c,l.contains=c;var _=[{begin:/^\s*=>/,starts:{end:"$",contains:c}},{className:"meta",begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+>|(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>)",starts:{end:"$",contains:c}}];return{name:"Ruby",aliases:["rb","gemspec","podspec","thor","irb"],keywords:n,illegal:/\/\*/,contains:i.concat(_).concat(c)}}},hh0f:function(e,t){e.exports=function(e){return{name:"Nim",aliases:["nim"],keywords:{keyword:"addr and as asm bind block break case cast const continue converter discard distinct div do elif else end enum except export finally for from func generic if import in include interface is isnot iterator let macro method mixin mod nil not notin object of or out proc ptr raise ref return shl shr static template try tuple type using var when while with without xor yield",literal:"shared guarded stdin stdout stderr result true false",built_in:"int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 float float32 float64 bool char string cstring pointer expr stmt void auto any range array openarray varargs seq set clong culong cchar cschar cshort cint csize clonglong cfloat cdouble clongdouble cuchar cushort cuint culonglong cstringarray semistatic"},contains:[{className:"meta",begin:/{\./,end:/\.}/,relevance:10},{className:"string",begin:/[a-zA-Z]\w*"/,end:/"/,contains:[{begin:/""/}]},{className:"string",begin:/([a-zA-Z]\w*)?"""/,end:/"""/},e.QUOTE_STRING_MODE,{className:"type",begin:/\b[A-Z]\w+\b/,relevance:0},{className:"number",relevance:0,variants:[{begin:/\b(0[xX][0-9a-fA-F][_0-9a-fA-F]*)('?[iIuU](8|16|32|64))?/},{begin:/\b(0o[0-7][_0-7]*)('?[iIuUfF](8|16|32|64))?/},{begin:/\b(0(b|B)[01][_01]*)('?[iIuUfF](8|16|32|64))?/},{begin:/\b(\d[_\d]*)('?[iIuUfF](8|16|32|64))?/}]},e.HASH_COMMENT_MODE]}}},hmeD:function(e,t){e.exports=function(e){var t="[a-zA-Z_\\-!.?+*=<>&#'][a-zA-Z_\\-!.?+*=<>&#'0-9/;:]*",n={begin:t,relevance:0},a={className:"number",begin:"[-+]?\\d+(\\.\\d+)?",relevance:0},r=e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),i=e.COMMENT(";","$",{relevance:0}),o={className:"literal",begin:/\b([Tt]rue|[Ff]alse|nil|None)\b/},s={begin:"[\\[\\{]",end:"[\\]\\}]"},l={className:"comment",begin:"\\^"+t},c=e.COMMENT("\\^\\{","\\}"),_={className:"symbol",begin:"[:]{1,2}"+t},d={begin:"\\(",end:"\\)"},u={endsWithParent:!0,relevance:0},p={keywords:{"builtin-name":"!= % %= & &= * ** **= *= *map + += , --build-class-- --import-- -= . / // //= /= < << <<= <= = > >= >> >>= @ @= ^ ^= abs accumulate all and any ap-compose ap-dotimes ap-each ap-each-while ap-filter ap-first ap-if ap-last ap-map ap-map-when ap-pipe ap-reduce ap-reject apply as-> ascii assert assoc bin break butlast callable calling-module-name car case cdr chain chr coll? combinations compile compress cond cons cons? continue count curry cut cycle dec def default-method defclass defmacro defmacro-alias defmacro/g! defmain defmethod defmulti defn defn-alias defnc defnr defreader defseq del delattr delete-route dict-comp dir disassemble dispatch-reader-macro distinct divmod do doto drop drop-last drop-while empty? end-sequence eval eval-and-compile eval-when-compile even? every? except exec filter first flatten float? fn fnc fnr for for* format fraction genexpr gensym get getattr global globals group-by hasattr hash hex id identity if if* if-not if-python2 import in inc input instance? integer integer-char? integer? interleave interpose is is-coll is-cons is-empty is-even is-every is-float is-instance is-integer is-integer-char is-iterable is-iterator is-keyword is-neg is-none is-not is-numeric is-odd is-pos is-string is-symbol is-zero isinstance islice issubclass iter iterable? iterate iterator? keyword keyword? lambda last len let lif lif-not list* list-comp locals loop macro-error macroexpand macroexpand-1 macroexpand-all map max merge-with method-decorator min multi-decorator multicombinations name neg? next none? nonlocal not not-in not? nth numeric? oct odd? open or ord partition permutations pos? post-route postwalk pow prewalk print product profile/calls profile/cpu put-route quasiquote quote raise range read read-str recursive-replace reduce remove repeat repeatedly repr require rest round route route-with-methods rwm second seq set-comp setattr setv some sorted string string? sum switch symbol? take take-nth take-while tee try unless unquote unquote-splicing vars walk when while with with* with-decorator with-gensyms xi xor yield yield-from zero? zip zip-longest | |= ~"},lexemes:t,className:"name",begin:t,starts:u},m=[d,r,l,c,i,_,s,a,o,n];return d.contains=[e.COMMENT("comment",""),p,u],u.contains=m,s.contains=m,{name:"Hy",aliases:["hylang"],illegal:/\S/,contains:[{className:"meta",begin:"^#!",end:"$"},d,r,l,c,i,_,s,a,o]}}},iTGd:function(e,t){e.exports=function(e){return{name:"Stan",aliases:["stanfuncs"],keywords:{title:["functions","model","data","parameters","quantities","transformed","generated"].join(" "),keyword:["for","in","if","else","while","break","continue","return"].concat(["int","real","vector","ordered","positive_ordered","simplex","unit_vector","row_vector","matrix","cholesky_factor_corr|10","cholesky_factor_cov|10","corr_matrix|10","cov_matrix|10","void"]).concat(["print","reject","increment_log_prob|10","integrate_ode|10","integrate_ode_rk45|10","integrate_ode_bdf|10","algebra_solver"]).join(" "),built_in:["Phi","Phi_approx","abs","acos","acosh","algebra_solver","append_array","append_col","append_row","asin","asinh","atan","atan2","atanh","bernoulli_cdf","bernoulli_lccdf","bernoulli_lcdf","bernoulli_logit_lpmf","bernoulli_logit_rng","bernoulli_lpmf","bernoulli_rng","bessel_first_kind","bessel_second_kind","beta_binomial_cdf","beta_binomial_lccdf","beta_binomial_lcdf","beta_binomial_lpmf","beta_binomial_rng","beta_cdf","beta_lccdf","beta_lcdf","beta_lpdf","beta_rng","binary_log_loss","binomial_cdf","binomial_coefficient_log","binomial_lccdf","binomial_lcdf","binomial_logit_lpmf","binomial_lpmf","binomial_rng","block","categorical_logit_lpmf","categorical_logit_rng","categorical_lpmf","categorical_rng","cauchy_cdf","cauchy_lccdf","cauchy_lcdf","cauchy_lpdf","cauchy_rng","cbrt","ceil","chi_square_cdf","chi_square_lccdf","chi_square_lcdf","chi_square_lpdf","chi_square_rng","cholesky_decompose","choose","col","cols","columns_dot_product","columns_dot_self","cos","cosh","cov_exp_quad","crossprod","csr_extract_u","csr_extract_v","csr_extract_w","csr_matrix_times_vector","csr_to_dense_matrix","cumulative_sum","determinant","diag_matrix","diag_post_multiply","diag_pre_multiply","diagonal","digamma","dims","dirichlet_lpdf","dirichlet_rng","distance","dot_product","dot_self","double_exponential_cdf","double_exponential_lccdf","double_exponential_lcdf","double_exponential_lpdf","double_exponential_rng","e","eigenvalues_sym","eigenvectors_sym","erf","erfc","exp","exp2","exp_mod_normal_cdf","exp_mod_normal_lccdf","exp_mod_normal_lcdf","exp_mod_normal_lpdf","exp_mod_normal_rng","expm1","exponential_cdf","exponential_lccdf","exponential_lcdf","exponential_lpdf","exponential_rng","fabs","falling_factorial","fdim","floor","fma","fmax","fmin","fmod","frechet_cdf","frechet_lccdf","frechet_lcdf","frechet_lpdf","frechet_rng","gamma_cdf","gamma_lccdf","gamma_lcdf","gamma_lpdf","gamma_p","gamma_q","gamma_rng","gaussian_dlm_obs_lpdf","get_lp","gumbel_cdf","gumbel_lccdf","gumbel_lcdf","gumbel_lpdf","gumbel_rng","head","hypergeometric_lpmf","hypergeometric_rng","hypot","inc_beta","int_step","integrate_ode","integrate_ode_bdf","integrate_ode_rk45","inv","inv_Phi","inv_chi_square_cdf","inv_chi_square_lccdf","inv_chi_square_lcdf","inv_chi_square_lpdf","inv_chi_square_rng","inv_cloglog","inv_gamma_cdf","inv_gamma_lccdf","inv_gamma_lcdf","inv_gamma_lpdf","inv_gamma_rng","inv_logit","inv_sqrt","inv_square","inv_wishart_lpdf","inv_wishart_rng","inverse","inverse_spd","is_inf","is_nan","lbeta","lchoose","lgamma","lkj_corr_cholesky_lpdf","lkj_corr_cholesky_rng","lkj_corr_lpdf","lkj_corr_rng","lmgamma","lmultiply","log","log10","log1m","log1m_exp","log1m_inv_logit","log1p","log1p_exp","log2","log_determinant","log_diff_exp","log_falling_factorial","log_inv_logit","log_mix","log_rising_factorial","log_softmax","log_sum_exp","logistic_cdf","logistic_lccdf","logistic_lcdf","logistic_lpdf","logistic_rng","logit","lognormal_cdf","lognormal_lccdf","lognormal_lcdf","lognormal_lpdf","lognormal_rng","machine_precision","matrix_exp","max","mdivide_left_spd","mdivide_left_tri_low","mdivide_right_spd","mdivide_right_tri_low","mean","min","modified_bessel_first_kind","modified_bessel_second_kind","multi_gp_cholesky_lpdf","multi_gp_lpdf","multi_normal_cholesky_lpdf","multi_normal_cholesky_rng","multi_normal_lpdf","multi_normal_prec_lpdf","multi_normal_rng","multi_student_t_lpdf","multi_student_t_rng","multinomial_lpmf","multinomial_rng","multiply_log","multiply_lower_tri_self_transpose","neg_binomial_2_cdf","neg_binomial_2_lccdf","neg_binomial_2_lcdf","neg_binomial_2_log_lpmf","neg_binomial_2_log_rng","neg_binomial_2_lpmf","neg_binomial_2_rng","neg_binomial_cdf","neg_binomial_lccdf","neg_binomial_lcdf","neg_binomial_lpmf","neg_binomial_rng","negative_infinity","normal_cdf","normal_lccdf","normal_lcdf","normal_lpdf","normal_rng","not_a_number","num_elements","ordered_logistic_lpmf","ordered_logistic_rng","owens_t","pareto_cdf","pareto_lccdf","pareto_lcdf","pareto_lpdf","pareto_rng","pareto_type_2_cdf","pareto_type_2_lccdf","pareto_type_2_lcdf","pareto_type_2_lpdf","pareto_type_2_rng","pi","poisson_cdf","poisson_lccdf","poisson_lcdf","poisson_log_lpmf","poisson_log_rng","poisson_lpmf","poisson_rng","positive_infinity","pow","print","prod","qr_Q","qr_R","quad_form","quad_form_diag","quad_form_sym","rank","rayleigh_cdf","rayleigh_lccdf","rayleigh_lcdf","rayleigh_lpdf","rayleigh_rng","reject","rep_array","rep_matrix","rep_row_vector","rep_vector","rising_factorial","round","row","rows","rows_dot_product","rows_dot_self","scaled_inv_chi_square_cdf","scaled_inv_chi_square_lccdf","scaled_inv_chi_square_lcdf","scaled_inv_chi_square_lpdf","scaled_inv_chi_square_rng","sd","segment","sin","singular_values","sinh","size","skew_normal_cdf","skew_normal_lccdf","skew_normal_lcdf","skew_normal_lpdf","skew_normal_rng","softmax","sort_asc","sort_desc","sort_indices_asc","sort_indices_desc","sqrt","sqrt2","square","squared_distance","step","student_t_cdf","student_t_lccdf","student_t_lcdf","student_t_lpdf","student_t_rng","sub_col","sub_row","sum","tail","tan","tanh","target","tcrossprod","tgamma","to_array_1d","to_array_2d","to_matrix","to_row_vector","to_vector","trace","trace_gen_quad_form","trace_quad_form","trigamma","trunc","uniform_cdf","uniform_lccdf","uniform_lcdf","uniform_lpdf","uniform_rng","variance","von_mises_lpdf","von_mises_rng","weibull_cdf","weibull_lccdf","weibull_lcdf","weibull_lpdf","weibull_rng","wiener_lpdf","wishart_lpdf","wishart_rng"].join(" ")},lexemes:e.IDENT_RE,contains:[e.C_LINE_COMMENT_MODE,e.COMMENT(/#/,/$/,{relevance:0,keywords:{"meta-keyword":"include"}}),e.COMMENT(/\/\*/,/\*\//,{relevance:0,contains:[{className:"doctag",begin:/@(return|param)/}]}),{begin:/<\s*lower\s*=/,keywords:"lower"},{begin:/[<,]\s*upper\s*=/,keywords:"upper"},{className:"keyword",begin:/\btarget\s*\+=/,relevance:10},{begin:"~\\s*("+e.IDENT_RE+")\\s*\\(",keywords:["bernoulli","bernoulli_logit","beta","beta_binomial","binomial","binomial_logit","categorical","categorical_logit","cauchy","chi_square","dirichlet","double_exponential","exp_mod_normal","exponential","frechet","gamma","gaussian_dlm_obs","gumbel","hypergeometric","inv_chi_square","inv_gamma","inv_wishart","lkj_corr","lkj_corr_cholesky","logistic","lognormal","multi_gp","multi_gp_cholesky","multi_normal","multi_normal_cholesky","multi_normal_prec","multi_student_t","multinomial","neg_binomial","neg_binomial_2","neg_binomial_2_log","normal","ordered_logistic","pareto","pareto_type_2","poisson","poisson_log","rayleigh","scaled_inv_chi_square","skew_normal","student_t","uniform","von_mises","weibull","wiener","wishart"].join(" ")},{className:"number",variants:[{begin:/\b\d+(?:\.\d*)?(?:[eE][+-]?\d+)?/},{begin:/\.\d+(?:[eE][+-]?\d+)?\b/}],relevance:0},{className:"string",begin:'"',end:'"',relevance:0}]}}},ieeH:function(e,t){e.exports=function(e){return{name:"Visual Basic .NET",aliases:["vb"],case_insensitive:!0,keywords:{keyword:"addhandler addressof alias and andalso aggregate ansi as async assembly auto await binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into is isfalse isnot istrue iterator join key let lib like loop me mid mod module mustinherit mustoverride mybase myclass nameof namespace narrowing new next not notinheritable notoverridable of off on operator option optional or order orelse overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim rem removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly xor yield",built_in:"boolean byte cbool cbyte cchar cdate cdec cdbl char cint clng cobj csbyte cshort csng cstr ctype date decimal directcast double gettype getxmlnamespace iif integer long object sbyte short single string trycast typeof uinteger ulong ushort",literal:"true false nothing"},illegal:"//|{|}|endif|gosub|variant|wend|^\\$ ",contains:[e.inherit(e.QUOTE_STRING_MODE,{contains:[{begin:'""'}]}),e.COMMENT("'","$",{returnBegin:!0,contains:[{className:"doctag",begin:"'''|\x3c!--|--\x3e",contains:[e.PHRASAL_WORDS_MODE]},{className:"doctag",begin:"",contains:[e.PHRASAL_WORDS_MODE]}]}),e.C_NUMBER_MODE,{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"if else elseif end region externalsource"}}]}}},iobV:function(e,t){e.exports=function(e){return{name:"DNS Zone",aliases:["bind","zone"],keywords:{keyword:"IN A AAAA AFSDB APL CAA CDNSKEY CDS CERT CNAME DHCID DLV DNAME DNSKEY DS HIP IPSECKEY KEY KX LOC MX NAPTR NS NSEC NSEC3 NSEC3PARAM PTR RRSIG RP SIG SOA SRV SSHFP TA TKEY TLSA TSIG TXT"},contains:[e.COMMENT(";","$",{relevance:0}),{className:"meta",begin:/^\$(TTL|GENERATE|INCLUDE|ORIGIN)\b/},{className:"number",begin:"((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))\\b"},{className:"number",begin:"((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\b"},e.inherit(e.NUMBER_MODE,{begin:/\b\d+[dhwm]?/})]}}},irpp:function(e,t){e.exports=function(e){return{name:"Oracle Rules Language",keywords:{keyword:"BILL_PERIOD BILL_START BILL_STOP RS_EFFECTIVE_START RS_EFFECTIVE_STOP RS_JURIS_CODE RS_OPCO_CODE INTDADDATTRIBUTE|5 INTDADDVMSG|5 INTDBLOCKOP|5 INTDBLOCKOPNA|5 INTDCLOSE|5 INTDCOUNT|5 INTDCOUNTSTATUSCODE|5 INTDCREATEMASK|5 INTDCREATEDAYMASK|5 INTDCREATEFACTORMASK|5 INTDCREATEHANDLE|5 INTDCREATEOVERRIDEDAYMASK|5 INTDCREATEOVERRIDEMASK|5 INTDCREATESTATUSCODEMASK|5 INTDCREATETOUPERIOD|5 INTDDELETE|5 INTDDIPTEST|5 INTDEXPORT|5 INTDGETERRORCODE|5 INTDGETERRORMESSAGE|5 INTDISEQUAL|5 INTDJOIN|5 INTDLOAD|5 INTDLOADACTUALCUT|5 INTDLOADDATES|5 INTDLOADHIST|5 INTDLOADLIST|5 INTDLOADLISTDATES|5 INTDLOADLISTENERGY|5 INTDLOADLISTHIST|5 INTDLOADRELATEDCHANNEL|5 INTDLOADSP|5 INTDLOADSTAGING|5 INTDLOADUOM|5 INTDLOADUOMDATES|5 INTDLOADUOMHIST|5 INTDLOADVERSION|5 INTDOPEN|5 INTDREADFIRST|5 INTDREADNEXT|5 INTDRECCOUNT|5 INTDRELEASE|5 INTDREPLACE|5 INTDROLLAVG|5 INTDROLLPEAK|5 INTDSCALAROP|5 INTDSCALE|5 INTDSETATTRIBUTE|5 INTDSETDSTPARTICIPANT|5 INTDSETSTRING|5 INTDSETVALUE|5 INTDSETVALUESTATUS|5 INTDSHIFTSTARTTIME|5 INTDSMOOTH|5 INTDSORT|5 INTDSPIKETEST|5 INTDSUBSET|5 INTDTOU|5 INTDTOURELEASE|5 INTDTOUVALUE|5 INTDUPDATESTATS|5 INTDVALUE|5 STDEV INTDDELETEEX|5 INTDLOADEXACTUAL|5 INTDLOADEXCUT|5 INTDLOADEXDATES|5 INTDLOADEX|5 INTDLOADEXRELATEDCHANNEL|5 INTDSAVEEX|5 MVLOAD|5 MVLOADACCT|5 MVLOADACCTDATES|5 MVLOADACCTHIST|5 MVLOADDATES|5 MVLOADHIST|5 MVLOADLIST|5 MVLOADLISTDATES|5 MVLOADLISTHIST|5 IF FOR NEXT DONE SELECT END CALL ABORT CLEAR CHANNEL FACTOR LIST NUMBER OVERRIDE SET WEEK DISTRIBUTIONNODE ELSE WHEN THEN OTHERWISE IENUM CSV INCLUDE LEAVE RIDER SAVE DELETE NOVALUE SECTION WARN SAVE_UPDATE DETERMINANT LABEL REPORT REVENUE EACH IN FROM TOTAL CHARGE BLOCK AND OR CSV_FILE RATE_CODE AUXILIARY_DEMAND UIDACCOUNT RS BILL_PERIOD_SELECT HOURS_PER_MONTH INTD_ERROR_STOP SEASON_SCHEDULE_NAME ACCOUNTFACTOR ARRAYUPPERBOUND CALLSTOREDPROC GETADOCONNECTION GETCONNECT GETDATASOURCE GETQUALIFIER GETUSERID HASVALUE LISTCOUNT LISTOP LISTUPDATE LISTVALUE PRORATEFACTOR RSPRORATE SETBINPATH SETDBMONITOR WQ_OPEN BILLINGHOURS DATE DATEFROMFLOAT DATETIMEFROMSTRING DATETIMETOSTRING DATETOFLOAT DAY DAYDIFF DAYNAME DBDATETIME HOUR MINUTE MONTH MONTHDIFF MONTHHOURS MONTHNAME ROUNDDATE SAMEWEEKDAYLASTYEAR SECOND WEEKDAY WEEKDIFF YEAR YEARDAY YEARSTR COMPSUM HISTCOUNT HISTMAX HISTMIN HISTMINNZ HISTVALUE MAXNRANGE MAXRANGE MINRANGE COMPIKVA COMPKVA COMPKVARFROMKQKW COMPLF IDATTR FLAG LF2KW LF2KWH MAXKW POWERFACTOR READING2USAGE AVGSEASON MAXSEASON MONTHLYMERGE SEASONVALUE SUMSEASON ACCTREADDATES ACCTTABLELOAD CONFIGADD CONFIGGET CREATEOBJECT CREATEREPORT EMAILCLIENT EXPBLKMDMUSAGE EXPMDMUSAGE EXPORT_USAGE FACTORINEFFECT GETUSERSPECIFIEDSTOP INEFFECT ISHOLIDAY RUNRATE SAVE_PROFILE SETREPORTTITLE USEREXIT WATFORRUNRATE TO TABLE ACOS ASIN ATAN ATAN2 BITAND CEIL COS COSECANT COSH COTANGENT DIVQUOT DIVREM EXP FABS FLOOR FMOD FREPM FREXPN LOG LOG10 MAX MAXN MIN MINNZ MODF POW ROUND ROUND2VALUE ROUNDINT SECANT SIN SINH SQROOT TAN TANH FLOAT2STRING FLOAT2STRINGNC INSTR LEFT LEN LTRIM MID RIGHT RTRIM STRING STRINGNC TOLOWER TOUPPER TRIM NUMDAYS READ_DATE STAGING",built_in:"IDENTIFIER OPTIONS XML_ELEMENT XML_OP XML_ELEMENT_OF DOMDOCCREATE DOMDOCLOADFILE DOMDOCLOADXML DOMDOCSAVEFILE DOMDOCGETROOT DOMDOCADDPI DOMNODEGETNAME DOMNODEGETTYPE DOMNODEGETVALUE DOMNODEGETCHILDCT DOMNODEGETFIRSTCHILD DOMNODEGETSIBLING DOMNODECREATECHILDELEMENT DOMNODESETATTRIBUTE DOMNODEGETCHILDELEMENTCT DOMNODEGETFIRSTCHILDELEMENT DOMNODEGETSIBLINGELEMENT DOMNODEGETATTRIBUTECT DOMNODEGETATTRIBUTEI DOMNODEGETATTRIBUTEBYNAME DOMNODEGETBYNAME"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,{className:"literal",variants:[{begin:"#\\s+[a-zA-Z\\ \\.]*",relevance:0},{begin:"#[a-zA-Z\\ \\.]+"}]}]}}},jKVu:function(e,t){e.exports=function(e){var t={relevance:0,contains:[{begin:"('|\\.')+"}]};return{name:"Matlab",keywords:{keyword:"break case catch classdef continue else elseif end enumerated events for function global if methods otherwise parfor persistent properties return spmd switch try while",built_in:"sin sind sinh asin asind asinh cos cosd cosh acos acosd acosh tan tand tanh atan atand atan2 atanh sec secd sech asec asecd asech csc cscd csch acsc acscd acsch cot cotd coth acot acotd acoth hypot exp expm1 log log1p log10 log2 pow2 realpow reallog realsqrt sqrt nthroot nextpow2 abs angle complex conj imag real unwrap isreal cplxpair fix floor ceil round mod rem sign airy besselj bessely besselh besseli besselk beta betainc betaln ellipj ellipke erf erfc erfcx erfinv expint gamma gammainc gammaln psi legendre cross dot factor isprime primes gcd lcm rat rats perms nchoosek factorial cart2sph cart2pol pol2cart sph2cart hsv2rgb rgb2hsv zeros ones eye repmat rand randn linspace logspace freqspace meshgrid accumarray size length ndims numel disp isempty isequal isequalwithequalnans cat reshape diag blkdiag tril triu fliplr flipud flipdim rot90 find sub2ind ind2sub bsxfun ndgrid permute ipermute shiftdim circshift squeeze isscalar isvector ans eps realmax realmin pi i inf nan isnan isinf isfinite j why compan gallery hadamard hankel hilb invhilb magic pascal rosser toeplitz vander wilkinson max min nanmax nanmin mean nanmean type table readtable writetable sortrows sort figure plot plot3 scatter scatter3 cellfun legend intersect ismember procrustes hold num2cell "},illegal:'(//|"|#|/\\*|\\s+/\\w+)',contains:[{className:"function",beginKeywords:"function",end:"$",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",variants:[{begin:"\\(",end:"\\)"},{begin:"\\[",end:"\\]"}]}]},{className:"built_in",begin:/true|false/,relevance:0,starts:t},{begin:"[a-zA-Z][a-zA-Z_0-9]*('|\\.')+",relevance:0},{className:"number",begin:e.C_NUMBER_RE,relevance:0,starts:t},{className:"string",begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE,{begin:"''"}]},{begin:/\]|}|\)/,relevance:0,starts:t},{className:"string",begin:'"',end:'"',contains:[e.BACKSLASH_ESCAPE,{begin:'""'}],starts:t},e.COMMENT("^\\s*\\%\\{\\s*$","^\\s*\\%\\}\\s*$"),e.COMMENT("\\%","$")]}}},jU8F:function(e,t){e.exports=function(e){var t={className:"string",begin:"\\$.{1}"},n={className:"symbol",begin:"#"+e.UNDERSCORE_IDENT_RE};return{name:"Smalltalk",aliases:["st"],keywords:"self super nil true false thisContext",contains:[e.COMMENT('"','"'),e.APOS_STRING_MODE,{className:"type",begin:"\\b[A-Z][A-Za-z0-9_]*",relevance:0},{begin:"[a-z][a-zA-Z0-9_]*:",relevance:0},e.C_NUMBER_MODE,n,t,{begin:"\\|[ ]*[a-z][a-zA-Z0-9_]*([ ]+[a-z][a-zA-Z0-9_]*)*[ ]*\\|",returnBegin:!0,end:/\|/,illegal:/\S/,contains:[{begin:"(\\|[ ]*)?[a-z][a-zA-Z0-9_]*"}]},{begin:"\\#\\(",end:"\\)",contains:[e.APOS_STRING_MODE,t,e.C_NUMBER_MODE,n]}]}}},jW1C:function(e,t){e.exports=function(e){var t="((0|[1-9][\\d_]*)|0[bB][01_]+|0[xX]([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*))",n="\\\\(['\"\\?\\\\abfnrtv]|u[\\dA-Fa-f]{4}|[0-7]{1,3}|x[\\dA-Fa-f]{2}|U[\\dA-Fa-f]{8})|&[a-zA-Z\\d]{2,};",a={className:"number",begin:"\\b"+t+"(L|u|U|Lu|LU|uL|UL)?",relevance:0},r={className:"number",begin:"\\b(((0[xX](([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)\\.([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)|\\.?([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*))[pP][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))|((0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)(\\.\\d*|([eE][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)))|\\d+\\.(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)|\\.(0|[1-9][\\d_]*)([eE][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))?))([fF]|L|i|[fF]i|Li)?|"+t+"(i|[fF]i|Li))",relevance:0},i={className:"string",begin:"'("+n+"|.)",end:"'",illegal:"."},o={className:"string",begin:'"',contains:[{begin:n,relevance:0}],end:'"[cwd]?'},s=e.COMMENT("\\/\\+","\\+\\/",{contains:["self"],relevance:10});return{name:"D",lexemes:e.UNDERSCORE_IDENT_RE,keywords:{keyword:"abstract alias align asm assert auto body break byte case cast catch class const continue debug default delete deprecated do else enum export extern final finally for foreach foreach_reverse|10 goto if immutable import in inout int interface invariant is lazy macro mixin module new nothrow out override package pragma private protected public pure ref return scope shared static struct super switch synchronized template this throw try typedef typeid typeof union unittest version void volatile while with __FILE__ __LINE__ __gshared|10 __thread __traits __DATE__ __EOF__ __TIME__ __TIMESTAMP__ __VENDOR__ __VERSION__",built_in:"bool cdouble cent cfloat char creal dchar delegate double dstring float function idouble ifloat ireal long real short string ubyte ucent uint ulong ushort wchar wstring",literal:"false null true"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s,{className:"string",begin:'x"[\\da-fA-F\\s\\n\\r]*"[cwd]?',relevance:10},o,{className:"string",begin:'[rq]"',end:'"[cwd]?',relevance:5},{className:"string",begin:"`",end:"`[cwd]?"},{className:"string",begin:'q"\\{',end:'\\}"'},r,a,i,{className:"meta",begin:"^#!",end:"$",relevance:5},{className:"meta",begin:"#(line)",end:"$",relevance:5},{className:"keyword",begin:"@[a-zA-Z_][a-zA-Z_\\d]*"}]}}},jctj:function(e,t){e.exports=function(e){var t={className:"symbol",begin:"&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;"},n={begin:"\\s",contains:[{className:"meta-keyword",begin:"#?[a-z_][a-z1-9_-]+",illegal:"\\n"}]},a=e.inherit(n,{begin:"\\(",end:"\\)"}),r=e.inherit(e.APOS_STRING_MODE,{className:"meta-string"}),i=e.inherit(e.QUOTE_STRING_MODE,{className:"meta-string"}),o={endsWithParent:!0,illegal:/`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin:"",relevance:10,contains:[n,i,r,a,{begin:"\\[",end:"\\]",contains:[{className:"meta",begin:"",contains:[n,a,i,r]}]}]},e.COMMENT("\x3c!--","--\x3e",{relevance:10}),{begin:"<\\!\\[CDATA\\[",end:"\\]\\]>",relevance:10},t,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag",begin:")",end:">",keywords:{name:"style"},contains:[o],starts:{end:"",returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:")",end:">",keywords:{name:"script"},contains:[o],starts:{end:"<\/script>",returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:"",contains:[{className:"name",begin:/[^\/><\s]+/,relevance:0},o]}]}}},"jfS+":function(e,t,n){"use strict";var a=n("endd");function r(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var n=this;e((function(e){n.reason||(n.reason=new a(e),t(n.reason))}))}r.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},r.source=function(){var e;return{token:new r((function(t){e=t})),cancel:e}},e.exports=r},kZ3Q:function(e,t){e.exports=function(e){return{name:"Golo",keywords:{keyword:"println readln print import module function local return let var while for foreach times in case when match with break continue augment augmentation each find filter reduce if then else otherwise try catch finally raise throw orIfNull DynamicObject|10 DynamicVariable struct Observable map set vector list array",literal:"true false null"},contains:[e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,{className:"meta",begin:"@[A-Za-z]+"}]}}},"lE5/":function(e,t){e.exports=function(e){var t="boolean byte word String",n="setup loop KeyboardController MouseController SoftwareSerial EthernetServer EthernetClient LiquidCrystal RobotControl GSMVoiceCall EthernetUDP EsploraTFT HttpClient RobotMotor WiFiClient GSMScanner FileSystem Scheduler GSMServer YunClient YunServer IPAddress GSMClient GSMModem Keyboard Ethernet Console GSMBand Esplora Stepper Process WiFiUDP GSM_SMS Mailbox USBHost Firmata PImage Client Server GSMPIN FileIO Bridge Serial EEPROM Stream Mouse Audio Servo File Task GPRS WiFi Wire TFT GSM SPI SD runShellCommandAsynchronously analogWriteResolution retrieveCallingNumber printFirmwareVersion analogReadResolution sendDigitalPortPair noListenOnLocalhost readJoystickButton setFirmwareVersion readJoystickSwitch scrollDisplayRight getVoiceCallStatus scrollDisplayLeft writeMicroseconds delayMicroseconds beginTransmission getSignalStrength runAsynchronously getAsynchronously listenOnLocalhost getCurrentCarrier readAccelerometer messageAvailable sendDigitalPorts lineFollowConfig countryNameWrite runShellCommand readStringUntil rewindDirectory readTemperature setClockDivider readLightSensor endTransmission analogReference detachInterrupt countryNameRead attachInterrupt encryptionType readBytesUntil robotNameWrite readMicrophone robotNameRead cityNameWrite userNameWrite readJoystickY readJoystickX mouseReleased openNextFile scanNetworks noInterrupts digitalWrite beginSpeaker mousePressed isActionDone mouseDragged displayLogos noAutoscroll addParameter remoteNumber getModifiers keyboardRead userNameRead waitContinue processInput parseCommand printVersion readNetworks writeMessage blinkVersion cityNameRead readMessage setDataMode parsePacket isListening setBitOrder beginPacket isDirectory motorsWrite drawCompass digitalRead clearScreen serialEvent rightToLeft setTextSize leftToRight requestFrom keyReleased compassRead analogWrite interrupts WiFiServer disconnect playMelody parseFloat autoscroll getPINUsed setPINUsed setTimeout sendAnalog readSlider analogRead beginWrite createChar motorsStop keyPressed tempoWrite readButton subnetMask debugPrint macAddress writeGreen randomSeed attachGPRS readString sendString remotePort releaseAll mouseMoved background getXChange getYChange answerCall getResult voiceCall endPacket constrain getSocket writeJSON getButton available connected findUntil readBytes exitValue readGreen writeBlue startLoop IPAddress isPressed sendSysex pauseMode gatewayIP setCursor getOemKey tuneWrite noDisplay loadImage switchPIN onRequest onReceive changePIN playFile noBuffer parseInt overflow checkPIN knobRead beginTFT bitClear updateIR bitWrite position writeRGB highByte writeRed setSpeed readBlue noStroke remoteIP transfer shutdown hangCall beginSMS endWrite attached maintain noCursor checkReg checkPUK shiftOut isValid shiftIn pulseIn connect println localIP pinMode getIMEI display noBlink process getBand running beginSD drawBMP lowByte setBand release bitRead prepare pointTo readRed setMode noFill remove listen stroke detach attach noTone exists buffer height bitSet circle config cursor random IRread setDNS endSMS getKey micros millis begin print write ready flush width isPIN blink clear press mkdir rmdir close point yield image BSSID click delay read text move peek beep rect line open seek fill size turn stop home find step tone sqrt RSSI SSID end bit tan cos sin pow map abs max min get run put",a="DIGITAL_MESSAGE FIRMATA_STRING ANALOG_MESSAGE REPORT_DIGITAL REPORT_ANALOG INPUT_PULLUP SET_PIN_MODE INTERNAL2V56 SYSTEM_RESET LED_BUILTIN INTERNAL1V1 SYSEX_START INTERNAL EXTERNAL DEFAULT OUTPUT INPUT HIGH LOW",r=e.requireLanguage("cpp").rawDefinition(),i=r.keywords;return i.keyword+=" "+t,i.literal+=" "+a,i.built_in+=" "+n,r.name="Arduino",r}},lKKg:function(e,t){e.exports=function(e){var t=[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.COMMENT(/\(/,/\)/),e.inherit(e.C_NUMBER_MODE,{begin:"([-+]?([0-9]*\\.?[0-9]+\\.?))|"+e.C_NUMBER_RE}),e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),{className:"name",begin:"([G])([0-9]+\\.?[0-9]?)"},{className:"name",begin:"([M])([0-9]+\\.?[0-9]?)"},{className:"attr",begin:"(VC|VS|#)",end:"(\\d+)"},{className:"attr",begin:"(VZOFX|VZOFY|VZOFZ)"},{className:"built_in",begin:"(ATAN|ABS|ACOS|ASIN|SIN|COS|EXP|FIX|FUP|ROUND|LN|TAN)(\\[)",end:"([-+]?([0-9]*\\.?[0-9]+\\.?))(\\])"},{className:"symbol",variants:[{begin:"N",end:"\\d+",illegal:"\\W"}]}];return{name:"G-code (ISO 6983)",aliases:["nc"],case_insensitive:!0,lexemes:"[A-Z_][A-Z0-9_.]*",keywords:"IF DO WHILE ENDWHILE CALL ENDIF SUB ENDSUB GOTO REPEAT ENDREPEAT EQ LT GT NE GE LE OR XOR",contains:[{className:"meta",begin:"\\%"},{className:"meta",begin:"([O])([0-9]+)"}].concat(t)}}},lRCX:function(e,t){e.exports=function(e){var t={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10",built_in:"Ellipsis NotImplemented",literal:"False None True"},n={className:"meta",begin:/^(>>>|\.\.\.) /},a={className:"subst",begin:/\{/,end:/\}/,keywords:t,illegal:/#/},r={begin:/\{\{/,relevance:0},i={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/(u|b)?r?'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,n],relevance:10},{begin:/(u|b)?r?"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,n],relevance:10},{begin:/(fr|rf|f)'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,n,r,a]},{begin:/(fr|rf|f)"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,n,r,a]},{begin:/(u|r|ur)'/,end:/'/,relevance:10},{begin:/(u|r|ur)"/,end:/"/,relevance:10},{begin:/(b|br)'/,end:/'/},{begin:/(b|br)"/,end:/"/},{begin:/(fr|rf|f)'/,end:/'/,contains:[e.BACKSLASH_ESCAPE,r,a]},{begin:/(fr|rf|f)"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,r,a]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},o={className:"number",relevance:0,variants:[{begin:e.BINARY_NUMBER_RE+"[lLjJ]?"},{begin:"\\b(0o[0-7]+)[lLjJ]?"},{begin:e.C_NUMBER_RE+"[lLjJ]?"}]},s={className:"params",variants:[{begin:/\(\s*\)/,skip:!0,className:null},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:["self",n,o,i,e.HASH_COMMENT_MODE]}]};return a.contains=[i,o,n],{name:"Python",aliases:["py","gyp","ipython"],keywords:t,illegal:/(<\/|->|\?)|=>/,contains:[n,o,{beginKeywords:"if",relevance:0},i,e.HASH_COMMENT_MODE,{variants:[{className:"function",beginKeywords:"def"},{className:"class",beginKeywords:"class"}],end:/:/,illegal:/[${=;\n,]/,contains:[e.UNDERSCORE_TITLE_MODE,s,{begin:/->/,endsWithParent:!0,keywords:"None"}]},{className:"meta",begin:/^[\t ]*@/,end:/$/},{begin:/\b(print|exec)\(/}]}}},lURu:function(e,t){e.exports=function(e){return{name:"Gradle",case_insensitive:!0,keywords:{keyword:"task project allprojects subprojects artifacts buildscript configurations dependencies repositories sourceSets description delete from into include exclude source classpath destinationDir includes options sourceCompatibility targetCompatibility group flatDir doLast doFirst flatten todir fromdir ant def abstract break case catch continue default do else extends final finally for if implements instanceof native new private protected public return static switch synchronized throw throws transient try volatile while strictfp package import false null super this true antlrtask checkstyle codenarc copy boolean byte char class double float int interface long short void compile runTime file fileTree abs any append asList asWritable call collect compareTo count div dump each eachByte eachFile eachLine every find findAll flatten getAt getErr getIn getOut getText grep immutable inject inspect intersect invokeMethods isCase join leftShift minus multiply newInputStream newOutputStream newPrintWriter newReader newWriter next plus pop power previous print println push putAt read readBytes readLines reverse reverseEach round size sort splitEachLine step subMap times toInteger toList tokenize upto waitForOrKill withPrintWriter withReader withStream withWriter withWriterAppend write writeLine"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,e.REGEXP_MODE]}}},ldBm:function(e,t){e.exports=function(e){return{name:"Pony",keywords:{keyword:"actor addressof and as be break class compile_error compile_intrinsic consume continue delegate digestof do else elseif embed end error for fun if ifdef in interface is isnt lambda let match new not object or primitive recover repeat return struct then trait try type until use var where while with xor",meta:"iso val tag trn box ref",literal:"this false true"},contains:[{className:"type",begin:"\\b_?[A-Z][\\w]*",relevance:0},{className:"string",begin:'"""',end:'"""',relevance:10},{className:"string",begin:'"',end:'"',contains:[e.BACKSLASH_ESCAPE]},{className:"string",begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE],relevance:0},{begin:e.IDENT_RE+"'",relevance:0},{className:"number",begin:"(-?)(\\b0[xX][a-fA-F0-9]+|\\b0[bB][01]+|(\\b\\d+(_\\d+)?(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",relevance:0},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]}}},ls82:function(e,t,n){var a=function(e){"use strict";var t=Object.prototype,n=t.hasOwnProperty,a="function"==typeof Symbol?Symbol:{},r=a.iterator||"@@iterator",i=a.asyncIterator||"@@asyncIterator",o=a.toStringTag||"@@toStringTag";function s(e,t,n,a){var r=t&&t.prototype instanceof _?t:_,i=Object.create(r.prototype),o=new v(a||[]);return i._invoke=function(e,t,n){var a="suspendedStart";return function(r,i){if("executing"===a)throw new Error("Generator is already running");if("completed"===a){if("throw"===r)throw i;return N()}for(n.method=r,n.arg=i;;){var o=n.delegate;if(o){var s=T(o,n);if(s){if(s===c)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===a)throw a="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);a="executing";var _=l(e,t,n);if("normal"===_.type){if(a=n.done?"completed":"suspendedYield",_.arg===c)continue;return{value:_.arg,done:n.done}}"throw"===_.type&&(a="completed",n.method="throw",n.arg=_.arg)}}}(e,n,o),i}function l(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=s;var c={};function _(){}function d(){}function u(){}var p={};p[r]=function(){return this};var m=Object.getPrototypeOf,E=m&&m(m(R([])));E&&E!==t&&n.call(E,r)&&(p=E);var g=u.prototype=_.prototype=Object.create(p);function S(e){["next","throw","return"].forEach((function(t){e[t]=function(e){return this._invoke(t,e)}}))}function f(e,t){var a;this._invoke=function(r,i){function o(){return new t((function(a,o){!function a(r,i,o,s){var c=l(e[r],e,i);if("throw"!==c.type){var _=c.arg,d=_.value;return d&&"object"==typeof d&&n.call(d,"__await")?t.resolve(d.__await).then((function(e){a("next",e,o,s)}),(function(e){a("throw",e,o,s)})):t.resolve(d).then((function(e){_.value=e,o(_)}),(function(e){return a("throw",e,o,s)}))}s(c.arg)}(r,i,a,o)}))}return a=a?a.then(o,o):o()}}function T(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,T(e,t),"throw"===t.method))return c;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return c}var a=l(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,c;var r=a.arg;return r?r.done?(t[e.resultName]=r.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,c):r:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,c)}function b(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function C(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function v(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(b,this),this.reset(!0)}function R(e){if(e){var t=e[r];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var a=-1,i=function t(){for(;++a=0;--r){var i=this.tryEntries[r],o=i.completion;if("root"===i.tryLoc)return a("end");if(i.tryLoc<=this.prev){var s=n.call(i,"catchLoc"),l=n.call(i,"finallyLoc");if(s&&l){if(this.prev=0;--a){var r=this.tryEntries[a];if(r.tryLoc<=this.prev&&n.call(r,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),C(n),c}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var a=n.completion;if("throw"===a.type){var r=a.arg;C(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:R(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),c}},e}(e.exports);try{regeneratorRuntime=a}catch(e){Function("r","regeneratorRuntime = r")(a)}},"m/If":function(e,t){e.exports=function(e){var t=/[a-zA-Z@][a-zA-Z0-9_]*/,n="@interface @class @protocol @implementation";return{name:"Objective-C",aliases:["mm","objc","obj-c"],keywords:{keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},lexemes:t,illegal:"/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"class",begin:"("+n.split(" ").join("|")+")\\b",end:"({|$)",excludeEnd:!0,keywords:n,lexemes:t,contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE,relevance:0}]}}},mBTZ:function(e,t){e.exports=function(e){var t="false synchronized int abstract float private char boolean static null if const for true while long throw strictfp finally protected import native final return void enum else extends implements break transient new catch instanceof byte super volatile case assert short package default double public try this switch continue throws privileged aspectOf adviceexecution proceed cflowbelow cflow initialization preinitialization staticinitialization withincode target within execution getWithinTypeName handler thisJoinPoint thisJoinPointStaticPart thisEnclosingJoinPointStaticPart declare parents warning error soft precedence thisAspectInstance";return{name:"AspectJ",keywords:t,illegal:/<\/|#/,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"class",beginKeywords:"aspect",end:/[{;=]/,excludeEnd:!0,illegal:/[:;"\[\]]/,contains:[{beginKeywords:"extends implements pertypewithin perthis pertarget percflowbelow percflow issingleton"},e.UNDERSCORE_TITLE_MODE,{begin:/\([^\)]*/,end:/[)]+/,keywords:t+" get set args call",excludeEnd:!1}]},{className:"class",beginKeywords:"class interface",end:/[{;=]/,excludeEnd:!0,relevance:0,keywords:"class interface",illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"pointcut after before around throwing returning",end:/[)]/,excludeEnd:!1,illegal:/["\[\]]/,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,contains:[e.UNDERSCORE_TITLE_MODE]}]},{begin:/[:]/,returnBegin:!0,end:/[{;]/,relevance:0,excludeEnd:!1,keywords:t,illegal:/["\[\]]/,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",keywords:t+" get set args call",relevance:0},e.QUOTE_STRING_MODE]},{beginKeywords:"new throw",relevance:0},{className:"function",begin:/\w+ +\w+(\.)?\w+\s*\([^\)]*\)\s*((throws)[\w\s,]+)?[\{;]/,returnBegin:!0,end:/[{;=]/,keywords:t,excludeEnd:!0,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,relevance:0,keywords:t,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},e.C_NUMBER_MODE,{className:"meta",begin:"@[A-Za-z]+"}]}}},mK8d:function(e,t){e.exports=function(e){var t={keyword:"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let nameof on orderby partial remove select set value var when where yield",literal:"null false true"},n=e.inherit(e.TITLE_MODE,{begin:"[a-zA-Z](\\.?\\w)*"}),a={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},r={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},i=e.inherit(r,{illegal:/\n/}),o={className:"subst",begin:"{",end:"}",keywords:t},s=e.inherit(o,{illegal:/\n/}),l={className:"string",begin:/\$"/,end:'"',illegal:/\n/,contains:[{begin:"{{"},{begin:"}}"},e.BACKSLASH_ESCAPE,s]},c={className:"string",begin:/\$@"/,end:'"',contains:[{begin:"{{"},{begin:"}}"},{begin:'""'},o]},_=e.inherit(c,{illegal:/\n/,contains:[{begin:"{{"},{begin:"}}"},{begin:'""'},s]});o.contains=[c,l,r,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.C_BLOCK_COMMENT_MODE],s.contains=[_,l,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.inherit(e.C_BLOCK_COMMENT_MODE,{illegal:/\n/})];var d={variants:[c,l,r,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},u=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?",p={begin:"@"+e.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"],keywords:t,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0,contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{begin:"\x3c!--|--\x3e"},{begin:""}]}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},d,a,{beginKeywords:"class interface",end:/[{;=]/,illegal:/[^\s:,]/,contains:[{beginKeywords:"where class"},n,{begin:"<",end:">",keywords:"in out"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",end:/[{;=]/,illegal:/[^\s:]/,contains:[n,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta",begin:"^\\s*\\[",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{className:"meta-string",begin:/"/,end:/"/}]},{beginKeywords:"new return throw await else",relevance:0},{className:"function",begin:"("+u+"\\s+)+"+e.IDENT_RE+"\\s*\\(",returnBegin:!0,end:/\s*[{;=]/,excludeEnd:!0,keywords:t,contains:[{begin:e.IDENT_RE+"\\s*\\(",returnBegin:!0,contains:[e.TITLE_MODE],relevance:0},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,relevance:0,contains:[d,a,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},p]}}},mY11:function(e,t){e.exports=function(e){var t=["GET","POST","HEAD","PUT","DELETE","CONNECT","OPTIONS","PATCH","TRACE"];return{name:"Apache Access Log",contains:[{className:"number",begin:"^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b",relevance:5},{className:"number",begin:"\\b\\d+\\b",relevance:0},{className:"string",begin:'"('+t.join("|")+")",end:'"',keywords:t.join(" "),illegal:"\\n",relevance:5,contains:[{begin:"HTTP/[12]\\.\\d",relevance:5}]},{className:"string",begin:/\[\d[^\]\n]{8,}\]/,illegal:"\\n",relevance:1},{className:"string",begin:/\[/,end:/\]/,illegal:"\\n",relevance:0},{className:"string",begin:'"Mozilla/\\d\\.\\d \\(',end:'"',illegal:"\\n",relevance:3},{className:"string",begin:'"',end:'"',illegal:"\\n",relevance:0}]}}},mzJY:function(e,t){e.exports=function(e){var t="[a-zA-Z_\\-\\+\\*\\/\\<\\=\\>\\&\\#][a-zA-Z0-9_\\-\\+\\*\\/\\<\\=\\>\\&\\#!]*",n="(\\-|\\+)?\\d+(\\.\\d+|\\/\\d+)?((d|e|f|l|s|D|E|F|L|S)(\\+|\\-)?\\d+)?",a={className:"literal",begin:"\\b(t{1}|nil)\\b"},r={className:"number",variants:[{begin:n,relevance:0},{begin:"#(b|B)[0-1]+(/[0-1]+)?"},{begin:"#(o|O)[0-7]+(/[0-7]+)?"},{begin:"#(x|X)[0-9a-fA-F]+(/[0-9a-fA-F]+)?"},{begin:"#(c|C)\\("+n+" +"+n,end:"\\)"}]},i=e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),o=e.COMMENT(";","$",{relevance:0}),s={begin:"\\*",end:"\\*"},l={className:"symbol",begin:"[:&]"+t},c={begin:t,relevance:0},_={begin:"\\|[^]*?\\|"},d={contains:[r,i,s,l,{begin:"\\(",end:"\\)",contains:["self",a,i,r,c]},c],variants:[{begin:"['`]\\(",end:"\\)"},{begin:"\\(quote ",end:"\\)",keywords:{name:"quote"}},{begin:"'\\|[^]*?\\|"}]},u={variants:[{begin:"'"+t},{begin:"#'"+t+"(::"+t+")*"}]},p={begin:"\\(\\s*",end:"\\)"},m={endsWithParent:!0,relevance:0};return p.contains=[{className:"name",variants:[{begin:t},{begin:"\\|[^]*?\\|"}]},m],m.contains=[d,u,p,a,r,i,o,s,l,_,c],{name:"Lisp",illegal:/\S/,contains:[r,{className:"meta",begin:"^#!",end:"$"},a,i,o,d,u,p,c]}}},"n3/M":function(e,t){e.exports=function(e){var t={className:"subst",variants:[{begin:"\\$[A-Za-z0-9_]+"},{begin:"\\${",end:"}"}]},n={className:"string",variants:[{begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:'"""',end:'"""',relevance:10},{begin:'[a-z]+"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,t]},{className:"string",begin:'[a-z]+"""',end:'"""',contains:[t],relevance:10}]},a={className:"type",begin:"\\b[A-Z][A-Za-z0-9_]*",relevance:0},r={className:"title",begin:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,relevance:0},i={className:"class",beginKeywords:"class object trait type",end:/[:={\[\n;]/,excludeEnd:!0,contains:[{beginKeywords:"extends with",relevance:10},{begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[a]},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[a]},r]},o={className:"function",beginKeywords:"def",end:/[:={\[(\n;]/,excludeEnd:!0,contains:[r]};return{name:"Scala",keywords:{literal:"true false null",keyword:"type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,{className:"symbol",begin:"'\\w[\\w\\d_]*(?!')"},a,o,i,e.C_NUMBER_MODE,{className:"meta",begin:"@[A-Za-z]+"}]}}},nwyE:function(e,t){e.exports=function(e){var t={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null})]},n=e.UNDERSCORE_TITLE_MODE,a={variants:[e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]},r="namespace class interface use extends function return abstract final public protected private static deprecated throw try catch Exception echo empty isset instanceof unset let var new const self require if else elseif switch case default do while loop for continue break likely unlikely __LINE__ __FILE__ __DIR__ __FUNCTION__ __CLASS__ __TRAIT__ __METHOD__ __NAMESPACE__ array boolean float double integer object resource string char long unsigned bool int uint ulong uchar true false null undefined";return{name:"Zephir",aliases:["zep"],keywords:r,contains:[e.C_LINE_COMMENT_MODE,e.COMMENT("/\\*","\\*/",{contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),{className:"string",begin:"<<<['\"]?\\w+['\"]?$",end:"^\\w+;",contains:[e.BACKSLASH_ESCAPE]},{begin:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{className:"function",beginKeywords:"function fn",end:/[;{]/,excludeEnd:!0,illegal:"\\$|\\[|%",contains:[n,{className:"params",begin:"\\(",end:"\\)",keywords:r,contains:["self",e.C_BLOCK_COMMENT_MODE,t,a]}]},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,illegal:/[:\(\$"]/,contains:[{beginKeywords:"extends implements"},n]},{beginKeywords:"namespace",end:";",illegal:/[\.']/,contains:[n]},{beginKeywords:"use",end:";",contains:[n]},{begin:"=>"},t,a]}}},o0In:function(e,t){e.exports=function(e){return{name:"MIPS Assembly",case_insensitive:!0,aliases:["mips"],lexemes:"\\.?"+e.IDENT_RE,keywords:{meta:".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .ltorg ",built_in:"$0 $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 $16 $17 $18 $19 $20 $21 $22 $23 $24 $25 $26 $27 $28 $29 $30 $31 zero at v0 v1 a0 a1 a2 a3 a4 a5 a6 a7 t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 s0 s1 s2 s3 s4 s5 s6 s7 s8 k0 k1 gp sp fp ra $f0 $f1 $f2 $f2 $f4 $f5 $f6 $f7 $f8 $f9 $f10 $f11 $f12 $f13 $f14 $f15 $f16 $f17 $f18 $f19 $f20 $f21 $f22 $f23 $f24 $f25 $f26 $f27 $f28 $f29 $f30 $f31 Context Random EntryLo0 EntryLo1 Context PageMask Wired EntryHi HWREna BadVAddr Count Compare SR IntCtl SRSCtl SRSMap Cause EPC PRId EBase Config Config1 Config2 Config3 LLAddr Debug DEPC DESAVE CacheErr ECC ErrorEPC TagLo DataLo TagHi DataHi WatchLo WatchHi PerfCtl PerfCnt "},contains:[{className:"keyword",begin:"\\b(addi?u?|andi?|b(al)?|beql?|bgez(al)?l?|bgtzl?|blezl?|bltz(al)?l?|bnel?|cl[oz]|divu?|ext|ins|j(al)?|jalr(.hb)?|jr(.hb)?|lbu?|lhu?|ll|lui|lw[lr]?|maddu?|mfhi|mflo|movn|movz|move|msubu?|mthi|mtlo|mul|multu?|nop|nor|ori?|rotrv?|sb|sc|se[bh]|sh|sllv?|slti?u?|srav?|srlv?|subu?|sw[lr]?|xori?|wsbh|abs.[sd]|add.[sd]|alnv.ps|bc1[ft]l?|c.(s?f|un|u?eq|[ou]lt|[ou]le|ngle?|seq|l[et]|ng[et]).[sd]|(ceil|floor|round|trunc).[lw].[sd]|cfc1|cvt.d.[lsw]|cvt.l.[dsw]|cvt.ps.s|cvt.s.[dlw]|cvt.s.p[lu]|cvt.w.[dls]|div.[ds]|ldx?c1|luxc1|lwx?c1|madd.[sd]|mfc1|mov[fntz]?.[ds]|msub.[sd]|mth?c1|mul.[ds]|neg.[ds]|nmadd.[ds]|nmsub.[ds]|p[lu][lu].ps|recip.fmt|r?sqrt.[ds]|sdx?c1|sub.[ds]|suxc1|swx?c1|break|cache|d?eret|[de]i|ehb|mfc0|mtc0|pause|prefx?|rdhwr|rdpgpr|sdbbp|ssnop|synci?|syscall|teqi?|tgei?u?|tlb(p|r|w[ir])|tlti?u?|tnei?|wait|wrpgpr)",end:"\\s"},e.COMMENT("[;#](?!s*$)","$"),e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"[^\\\\]'",relevance:0},{className:"title",begin:"\\|",end:"\\|",illegal:"\\n",relevance:0},{className:"number",variants:[{begin:"0x[0-9a-f]+"},{begin:"\\b-?\\d+"}],relevance:0},{className:"symbol",variants:[{begin:"^\\s*[a-z_\\.\\$][a-z0-9_\\.\\$]+:"},{begin:"^\\s*[0-9]+:"},{begin:"[0-9]+[bf]"}],relevance:0}],illegal:"/"}}},o0o1:function(e,t,n){e.exports=n("ls82")},oKc0:function(e,t){e.exports=function(e){return{name:"RenderMan RSL",keywords:{keyword:"float color point normal vector matrix while for if do return else break extern continue",built_in:"abs acos ambient area asin atan atmosphere attribute calculatenormal ceil cellnoise clamp comp concat cos degrees depth Deriv diffuse distance Du Dv environment exp faceforward filterstep floor format fresnel incident length lightsource log match max min mod noise normalize ntransform opposite option phong pnoise pow printf ptlined radians random reflect refract renderinfo round setcomp setxcomp setycomp setzcomp shadow sign sin smoothstep specular specularbrdf spline sqrt step tan texture textureinfo trace transform vtransform xcomp ycomp zcomp"},illegal:")?[^\s\(]+(\s+[^\s\(]+)\s*=/,relevance:5,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin://,keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:t,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,endsWithParent:!0,contains:[_,e.C_LINE_COMMENT_MODE,c],relevance:0},e.C_LINE_COMMENT_MODE,c,o,s,i,e.C_NUMBER_MODE]},c]},{className:"class",beginKeywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[{beginKeywords:"public protected internal private constructor"},e.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,]|$/,excludeBegin:!0,returnEnd:!0},o,s]},i,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:"\n"},l]}}},qZUF:function(e,t){e.exports=function(e){var t={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super yield import export from as default await then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",built_in:"npm require console print module global window document"},n="[A-Za-z$_][0-9A-Za-z$_]*",a={className:"subst",begin:/#\{/,end:/}/,keywords:t},r=[e.BINARY_NUMBER_MODE,e.inherit(e.C_NUMBER_MODE,{starts:{end:"(\\s*/)?",relevance:0}}),{className:"string",variants:[{begin:/'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE]},{begin:/'/,end:/'/,contains:[e.BACKSLASH_ESCAPE]},{begin:/"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a]},{begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,a]}]},{className:"regexp",variants:[{begin:"///",end:"///",contains:[a,e.HASH_COMMENT_MODE]},{begin:"//[gim]{0,3}(?=\\W)",relevance:0},{begin:/\/(?![ *]).*?(?![\\]).\/[gim]{0,3}(?=\W)/}]},{begin:"@"+n},{subLanguage:"javascript",excludeBegin:!0,excludeEnd:!0,variants:[{begin:"```",end:"```"},{begin:"`",end:"`"}]}];a.contains=r;var i=e.inherit(e.TITLE_MODE,{begin:n}),o={className:"params",begin:"\\([^\\(]",returnBegin:!0,contains:[{begin:/\(/,end:/\)/,keywords:t,contains:["self"].concat(r)}]};return{name:"CoffeeScript",aliases:["coffee","cson","iced"],keywords:t,illegal:/\/\*/,contains:r.concat([e.COMMENT("###","###"),e.HASH_COMMENT_MODE,{className:"function",begin:"^\\s*"+n+"\\s*=\\s*(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[i,o]},{begin:/[:\(,=]\s*/,relevance:0,contains:[{className:"function",begin:"(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[o]}]},{className:"class",beginKeywords:"class",end:"$",illegal:/[:="\[\]]/,contains:[{beginKeywords:"extends",endsWithParent:!0,illegal:/[:="\[\]]/,contains:[i]},i]},{begin:n+":",end:":",returnBegin:!0,returnEnd:!0,relevance:0}])}}},r0Rl:function(e,t){e.exports=function(e){var t={keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class public private protected get set super static implements enum export import declare type namespace abstract as from extends async await",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document any number boolean string void Promise"},n={className:"meta",begin:"@[A-Za-z$_][0-9A-Za-z$_]*"},a={begin:"\\(",end:/\)/,keywords:t,contains:["self",e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.NUMBER_MODE]},r={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,a]},i={className:"number",variants:[{begin:"\\b(0[bB][01]+)n?"},{begin:"\\b(0[oO][0-7]+)n?"},{begin:e.C_NUMBER_RE+"n?"}],relevance:0},o={className:"subst",begin:"\\$\\{",end:"\\}",keywords:t,contains:[]},s={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,o],subLanguage:"xml"}},l={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,o],subLanguage:"css"}},c={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,o]};return o.contains=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,s,l,c,i,e.REGEXP_MODE],{name:"TypeScript",aliases:["ts"],keywords:t,contains:[{className:"meta",begin:/^\s*['"]use strict['"]/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,s,l,c,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,i,{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.REGEXP_MODE,{className:"function",begin:"(\\(.*?\\)|"+e.IDENT_RE+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:e.IDENT_RE},{begin:/\(\s*\)/},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,contains:["self",e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]}]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/[\{;]/,excludeEnd:!0,keywords:t,contains:["self",e.inherit(e.TITLE_MODE,{begin:"[A-Za-z$_][0-9A-Za-z$_]*"}),r],illegal:/%/,relevance:0},{beginKeywords:"constructor",end:/[\{;]/,excludeEnd:!0,contains:["self",r]},{begin:/module\./,keywords:{built_in:"module"},relevance:0},{beginKeywords:"module",end:/\{/,excludeEnd:!0},{beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:"interface extends"},{begin:/\$[(.]/},{begin:"\\."+e.IDENT_RE,relevance:0},n,a]}}},r5rv:function(e,t){e.exports=function(e){function t(e){return"(?:"+e+")?"}var n="(decltype\\(auto\\)|"+t("[a-zA-Z_]\\w*::")+"[a-zA-Z_]\\w*"+t("<.*?>")+")",a={className:"keyword",begin:"\\b[a-z\\d_]*_t\\b"},r={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},{begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\((?:.|\n)*?\)\1"/}]},i={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},o={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(r,{className:"meta-string"}),{className:"meta-string",begin:/<.*?>/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},s={className:"title",begin:t("[a-zA-Z_]\\w*::")+e.IDENT_RE,relevance:0},l=t("[a-zA-Z_]\\w*::")+e.IDENT_RE+"\\s*\\(",c={keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_t short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary",literal:"true false nullptr NULL"},_=[a,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,i,r],d={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:c,contains:_.concat([{begin:/\(/,end:/\)/,keywords:c,contains:_.concat(["self"]),relevance:0}]),relevance:0},u={className:"function",begin:"("+n+"[\\*&\\s]+)+"+l,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:c,illegal:/[^\w\s\*&:<>]/,contains:[{begin:"decltype\\(auto\\)",keywords:c,relevance:0},{begin:l,returnBegin:!0,contains:[s],relevance:0},{className:"params",begin:/\(/,end:/\)/,keywords:c,relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,r,i,a,{begin:/\(/,end:/\)/,keywords:c,relevance:0,contains:["self",e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,r,i,a]}]},a,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,o]};return{aliases:["c","cc","h","c++","h++","hpp","hh","hxx","cxx"],keywords:c,disableAutodetect:!0,illegal:"",keywords:c,contains:["self",a]},{begin:e.IDENT_RE+"::",keywords:c},{className:"class",beginKeywords:"class struct",end:/[{;:]/,contains:[{begin://,contains:["self"]},e.TITLE_MODE]}]),exports:{preprocessor:o,strings:r,keywords:c}}}},r7oX:function(e,t){e.exports=function(e){return{name:"Processing",keywords:{keyword:"BufferedReader PVector PFont PImage PGraphics HashMap boolean byte char color double float int long String Array FloatDict FloatList IntDict IntList JSONArray JSONObject Object StringDict StringList Table TableRow XML false synchronized int abstract float private char boolean static null if const for true while long throw strictfp finally protected import native final return void enum else break transient new catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private",literal:"P2D P3D HALF_PI PI QUARTER_PI TAU TWO_PI",title:"setup draw",built_in:"displayHeight displayWidth mouseY mouseX mousePressed pmouseX pmouseY key keyCode pixels focused frameCount frameRate height width size createGraphics beginDraw createShape loadShape PShape arc ellipse line point quad rect triangle bezier bezierDetail bezierPoint bezierTangent curve curveDetail curvePoint curveTangent curveTightness shape shapeMode beginContour beginShape bezierVertex curveVertex endContour endShape quadraticVertex vertex ellipseMode noSmooth rectMode smooth strokeCap strokeJoin strokeWeight mouseClicked mouseDragged mouseMoved mousePressed mouseReleased mouseWheel keyPressed keyPressedkeyReleased keyTyped print println save saveFrame day hour millis minute month second year background clear colorMode fill noFill noStroke stroke alpha blue brightness color green hue lerpColor red saturation modelX modelY modelZ screenX screenY screenZ ambient emissive shininess specular add createImage beginCamera camera endCamera frustum ortho perspective printCamera printProjection cursor frameRate noCursor exit loop noLoop popStyle pushStyle redraw binary boolean byte char float hex int str unbinary unhex join match matchAll nf nfc nfp nfs split splitTokens trim append arrayCopy concat expand reverse shorten sort splice subset box sphere sphereDetail createInput createReader loadBytes loadJSONArray loadJSONObject loadStrings loadTable loadXML open parseXML saveTable selectFolder selectInput beginRaw beginRecord createOutput createWriter endRaw endRecord PrintWritersaveBytes saveJSONArray saveJSONObject saveStream saveStrings saveXML selectOutput popMatrix printMatrix pushMatrix resetMatrix rotate rotateX rotateY rotateZ scale shearX shearY translate ambientLight directionalLight lightFalloff lights lightSpecular noLights normal pointLight spotLight image imageMode loadImage noTint requestImage tint texture textureMode textureWrap blend copy filter get loadPixels set updatePixels blendMode loadShader PShaderresetShader shader createFont loadFont text textFont textAlign textLeading textMode textSize textWidth textAscent textDescent abs ceil constrain dist exp floor lerp log mag map max min norm pow round sq sqrt acos asin atan atan2 cos degrees radians sin tan noise noiseDetail noiseSeed random randomGaussian randomSeed"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE]}}},rfnV:function(e,t){e.exports=function(e){return{name:"Thrift",keywords:{keyword:"namespace const typedef struct enum service exception void oneway set list map required optional",built_in:"bool byte i16 i32 i64 double string binary",literal:"true false"},contains:[e.QUOTE_STRING_MODE,e.NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"class",beginKeywords:"struct enum service exception",end:/\{/,illegal:/\n/,contains:[e.inherit(e.TITLE_MODE,{starts:{endsWithParent:!0,excludeEnd:!0}})]},{begin:"\\b(set|list|map)\\s*<",end:">",keywords:"bool byte i16 i32 i64 double string binary",contains:["self"]}]}}},rnof:function(e,t){e.exports=function(e){var t={keyword:"bool break call callexe checkinterrupt clear clearg closeall cls comlog compile continue create debug declare delete disable dlibrary dllcall do dos ed edit else elseif enable end endfor endif endp endo errorlog errorlogat expr external fn for format goto gosub graph if keyword let lib library line load loadarray loadexe loadf loadk loadm loadp loads loadx local locate loopnextindex lprint lpwidth lshow matrix msym ndpclex new open output outwidth plot plotsym pop prcsn print printdos proc push retp return rndcon rndmod rndmult rndseed run save saveall screen scroll setarray show sparse stop string struct system trace trap threadfor threadendfor threadbegin threadjoin threadstat threadend until use while winprint ne ge le gt lt and xor or not eq eqv",built_in:"abs acf aconcat aeye amax amean AmericanBinomCall AmericanBinomCall_Greeks AmericanBinomCall_ImpVol AmericanBinomPut AmericanBinomPut_Greeks AmericanBinomPut_ImpVol AmericanBSCall AmericanBSCall_Greeks AmericanBSCall_ImpVol AmericanBSPut AmericanBSPut_Greeks AmericanBSPut_ImpVol amin amult annotationGetDefaults annotationSetBkd annotationSetFont annotationSetLineColor annotationSetLineStyle annotationSetLineThickness annualTradingDays arccos arcsin areshape arrayalloc arrayindex arrayinit arraytomat asciiload asclabel astd astds asum atan atan2 atranspose axmargin balance band bandchol bandcholsol bandltsol bandrv bandsolpd bar base10 begwind besselj bessely beta box boxcox cdfBeta cdfBetaInv cdfBinomial cdfBinomialInv cdfBvn cdfBvn2 cdfBvn2e cdfCauchy cdfCauchyInv cdfChic cdfChii cdfChinc cdfChincInv cdfExp cdfExpInv cdfFc cdfFnc cdfFncInv cdfGam cdfGenPareto cdfHyperGeo cdfLaplace cdfLaplaceInv cdfLogistic cdfLogisticInv cdfmControlCreate cdfMvn cdfMvn2e cdfMvnce cdfMvne cdfMvt2e cdfMvtce cdfMvte cdfN cdfN2 cdfNc cdfNegBinomial cdfNegBinomialInv cdfNi cdfPoisson cdfPoissonInv cdfRayleigh cdfRayleighInv cdfTc cdfTci cdfTnc cdfTvn cdfWeibull cdfWeibullInv cdir ceil ChangeDir chdir chiBarSquare chol choldn cholsol cholup chrs close code cols colsf combinate combinated complex con cond conj cons ConScore contour conv convertsatostr convertstrtosa corrm corrms corrvc corrx corrxs cos cosh counts countwts crossprd crout croutp csrcol csrlin csvReadM csvReadSA cumprodc cumsumc curve cvtos datacreate datacreatecomplex datalist dataload dataloop dataopen datasave date datestr datestring datestrymd dayinyr dayofweek dbAddDatabase dbClose dbCommit dbCreateQuery dbExecQuery dbGetConnectOptions dbGetDatabaseName dbGetDriverName dbGetDrivers dbGetHostName dbGetLastErrorNum dbGetLastErrorText dbGetNumericalPrecPolicy dbGetPassword dbGetPort dbGetTableHeaders dbGetTables dbGetUserName dbHasFeature dbIsDriverAvailable dbIsOpen dbIsOpenError dbOpen dbQueryBindValue dbQueryClear dbQueryCols dbQueryExecPrepared dbQueryFetchAllM dbQueryFetchAllSA dbQueryFetchOneM dbQueryFetchOneSA dbQueryFinish dbQueryGetBoundValue dbQueryGetBoundValues dbQueryGetField dbQueryGetLastErrorNum dbQueryGetLastErrorText dbQueryGetLastInsertID dbQueryGetLastQuery dbQueryGetPosition dbQueryIsActive dbQueryIsForwardOnly dbQueryIsNull dbQueryIsSelect dbQueryIsValid dbQueryPrepare dbQueryRows dbQuerySeek dbQuerySeekFirst dbQuerySeekLast dbQuerySeekNext dbQuerySeekPrevious dbQuerySetForwardOnly dbRemoveDatabase dbRollback dbSetConnectOptions dbSetDatabaseName dbSetHostName dbSetNumericalPrecPolicy dbSetPort dbSetUserName dbTransaction DeleteFile delif delrows denseToSp denseToSpRE denToZero design det detl dfft dffti diag diagrv digamma doswin DOSWinCloseall DOSWinOpen dotfeq dotfeqmt dotfge dotfgemt dotfgt dotfgtmt dotfle dotflemt dotflt dotfltmt dotfne dotfnemt draw drop dsCreate dstat dstatmt dstatmtControlCreate dtdate dtday dttime dttodtv dttostr dttoutc dtvnormal dtvtodt dtvtoutc dummy dummybr dummydn eig eigh eighv eigv elapsedTradingDays endwind envget eof eqSolve eqSolvemt eqSolvemtControlCreate eqSolvemtOutCreate eqSolveset erf erfc erfccplx erfcplx error etdays ethsec etstr EuropeanBinomCall EuropeanBinomCall_Greeks EuropeanBinomCall_ImpVol EuropeanBinomPut EuropeanBinomPut_Greeks EuropeanBinomPut_ImpVol EuropeanBSCall EuropeanBSCall_Greeks EuropeanBSCall_ImpVol EuropeanBSPut EuropeanBSPut_Greeks EuropeanBSPut_ImpVol exctsmpl exec execbg exp extern eye fcheckerr fclearerr feq feqmt fflush fft ffti fftm fftmi fftn fge fgemt fgets fgetsa fgetsat fgetst fgt fgtmt fileinfo filesa fle flemt floor flt fltmt fmod fne fnemt fonts fopen formatcv formatnv fputs fputst fseek fstrerror ftell ftocv ftos ftostrC gamma gammacplx gammaii gausset gdaAppend gdaCreate gdaDStat gdaDStatMat gdaGetIndex gdaGetName gdaGetNames gdaGetOrders gdaGetType gdaGetTypes gdaGetVarInfo gdaIsCplx gdaLoad gdaPack gdaRead gdaReadByIndex gdaReadSome gdaReadSparse gdaReadStruct gdaReportVarInfo gdaSave gdaUpdate gdaUpdateAndPack gdaVars gdaWrite gdaWrite32 gdaWriteSome getarray getdims getf getGAUSShome getmatrix getmatrix4D getname getnamef getNextTradingDay getNextWeekDay getnr getorders getpath getPreviousTradingDay getPreviousWeekDay getRow getscalar3D getscalar4D getTrRow getwind glm gradcplx gradMT gradMTm gradMTT gradMTTm gradp graphprt graphset hasimag header headermt hess hessMT hessMTg hessMTgw hessMTm hessMTmw hessMTT hessMTTg hessMTTgw hessMTTm hessMTw hessp hist histf histp hsec imag indcv indexcat indices indices2 indicesf indicesfn indnv indsav integrate1d integrateControlCreate intgrat2 intgrat3 inthp1 inthp2 inthp3 inthp4 inthpControlCreate intquad1 intquad2 intquad3 intrleav intrleavsa intrsect intsimp inv invpd invswp iscplx iscplxf isden isinfnanmiss ismiss key keyav keyw lag lag1 lagn lapEighb lapEighi lapEighvb lapEighvi lapgEig lapgEigh lapgEighv lapgEigv lapgSchur lapgSvdcst lapgSvds lapgSvdst lapSvdcusv lapSvds lapSvdusv ldlp ldlsol linSolve listwise ln lncdfbvn lncdfbvn2 lncdfmvn lncdfn lncdfn2 lncdfnc lnfact lngammacplx lnpdfmvn lnpdfmvt lnpdfn lnpdft loadd loadstruct loadwind loess loessmt loessmtControlCreate log loglog logx logy lower lowmat lowmat1 ltrisol lu lusol machEpsilon make makevars makewind margin matalloc matinit mattoarray maxbytes maxc maxindc maxv maxvec mbesselei mbesselei0 mbesselei1 mbesseli mbesseli0 mbesseli1 meanc median mergeby mergevar minc minindc minv miss missex missrv moment momentd movingave movingaveExpwgt movingaveWgt nextindex nextn nextnevn nextwind ntos null null1 numCombinations ols olsmt olsmtControlCreate olsqr olsqr2 olsqrmt ones optn optnevn orth outtyp pacf packedToSp packr parse pause pdfCauchy pdfChi pdfExp pdfGenPareto pdfHyperGeo pdfLaplace pdfLogistic pdfn pdfPoisson pdfRayleigh pdfWeibull pi pinv pinvmt plotAddArrow plotAddBar plotAddBox plotAddHist plotAddHistF plotAddHistP plotAddPolar plotAddScatter plotAddShape plotAddTextbox plotAddTS plotAddXY plotArea plotBar plotBox plotClearLayout plotContour plotCustomLayout plotGetDefaults plotHist plotHistF plotHistP plotLayout plotLogLog plotLogX plotLogY plotOpenWindow plotPolar plotSave plotScatter plotSetAxesPen plotSetBar plotSetBarFill plotSetBarStacked plotSetBkdColor plotSetFill plotSetGrid plotSetLegend plotSetLineColor plotSetLineStyle plotSetLineSymbol plotSetLineThickness plotSetNewWindow plotSetTitle plotSetWhichYAxis plotSetXAxisShow plotSetXLabel plotSetXRange plotSetXTicInterval plotSetXTicLabel plotSetYAxisShow plotSetYLabel plotSetYRange plotSetZAxisShow plotSetZLabel plotSurface plotTS plotXY polar polychar polyeval polygamma polyint polymake polymat polymroot polymult polyroot pqgwin previousindex princomp printfm printfmt prodc psi putarray putf putvals pvCreate pvGetIndex pvGetParNames pvGetParVector pvLength pvList pvPack pvPacki pvPackm pvPackmi pvPacks pvPacksi pvPacksm pvPacksmi pvPutParVector pvTest pvUnpack QNewton QNewtonmt QNewtonmtControlCreate QNewtonmtOutCreate QNewtonSet QProg QProgmt QProgmtInCreate qqr qqre qqrep qr qre qrep qrsol qrtsol qtyr qtyre qtyrep quantile quantiled qyr qyre qyrep qz rank rankindx readr real reclassify reclassifyCuts recode recserar recsercp recserrc rerun rescale reshape rets rev rfft rffti rfftip rfftn rfftnp rfftp rndBernoulli rndBeta rndBinomial rndCauchy rndChiSquare rndCon rndCreateState rndExp rndGamma rndGeo rndGumbel rndHyperGeo rndi rndKMbeta rndKMgam rndKMi rndKMn rndKMnb rndKMp rndKMu rndKMvm rndLaplace rndLCbeta rndLCgam rndLCi rndLCn rndLCnb rndLCp rndLCu rndLCvm rndLogNorm rndMTu rndMVn rndMVt rndn rndnb rndNegBinomial rndp rndPoisson rndRayleigh rndStateSkip rndu rndvm rndWeibull rndWishart rotater round rows rowsf rref sampleData satostrC saved saveStruct savewind scale scale3d scalerr scalinfnanmiss scalmiss schtoc schur searchsourcepath seekr select selif seqa seqm setdif setdifsa setvars setvwrmode setwind shell shiftr sin singleindex sinh sleep solpd sortc sortcc sortd sorthc sorthcc sortind sortindc sortmc sortr sortrc spBiconjGradSol spChol spConjGradSol spCreate spDenseSubmat spDiagRvMat spEigv spEye spLDL spline spLU spNumNZE spOnes spreadSheetReadM spreadSheetReadSA spreadSheetWrite spScale spSubmat spToDense spTrTDense spTScalar spZeros sqpSolve sqpSolveMT sqpSolveMTControlCreate sqpSolveMTlagrangeCreate sqpSolveMToutCreate sqpSolveSet sqrt statements stdc stdsc stocv stof strcombine strindx strlen strput strrindx strsect strsplit strsplitPad strtodt strtof strtofcplx strtriml strtrimr strtrunc strtruncl strtruncpad strtruncr submat subscat substute subvec sumc sumr surface svd svd1 svd2 svdcusv svds svdusv sysstate tab tan tanh tempname time timedt timestr timeutc title tkf2eps tkf2ps tocart todaydt toeplitz token topolar trapchk trigamma trimr trunc type typecv typef union unionsa uniqindx uniqindxsa unique uniquesa upmat upmat1 upper utctodt utctodtv utrisol vals varCovMS varCovXS varget vargetl varmall varmares varput varputl vartypef vcm vcms vcx vcxs vec vech vecr vector vget view viewxyz vlist vnamecv volume vput vread vtypecv wait waitc walkindex where window writer xlabel xlsGetSheetCount xlsGetSheetSize xlsGetSheetTypes xlsMakeRange xlsReadM xlsReadSA xlsWrite xlsWriteM xlsWriteSA xpnd xtics xy xyz ylabel ytics zeros zeta zlabel ztics cdfEmpirical dot h5create h5open h5read h5readAttribute h5write h5writeAttribute ldl plotAddErrorBar plotAddSurface plotCDFEmpirical plotSetColormap plotSetContourLabels plotSetLegendFont plotSetTextInterpreter plotSetXTicCount plotSetYTicCount plotSetZLevels powerm strjoin sylvester strtrim",literal:"DB_AFTER_LAST_ROW DB_ALL_TABLES DB_BATCH_OPERATIONS DB_BEFORE_FIRST_ROW DB_BLOB DB_EVENT_NOTIFICATIONS DB_FINISH_QUERY DB_HIGH_PRECISION DB_LAST_INSERT_ID DB_LOW_PRECISION_DOUBLE DB_LOW_PRECISION_INT32 DB_LOW_PRECISION_INT64 DB_LOW_PRECISION_NUMBERS DB_MULTIPLE_RESULT_SETS DB_NAMED_PLACEHOLDERS DB_POSITIONAL_PLACEHOLDERS DB_PREPARED_QUERIES DB_QUERY_SIZE DB_SIMPLE_LOCKING DB_SYSTEM_TABLES DB_TABLES DB_TRANSACTIONS DB_UNICODE DB_VIEWS __STDIN __STDOUT __STDERR __FILE_DIR"},n=e.COMMENT("@","@"),a={className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"define definecs|10 undef ifdef ifndef iflight ifdllcall ifmac ifos2win ifunix else endif lineson linesoff srcfile srcline"},contains:[{begin:/\\\n/,relevance:0},{beginKeywords:"include",end:"$",keywords:{"meta-keyword":"include"},contains:[{className:"meta-string",begin:'"',end:'"',illegal:"\\n"}]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n]},r={begin:/\bstruct\s+/,end:/\s/,keywords:"struct",contains:[{className:"type",begin:e.UNDERSCORE_IDENT_RE,relevance:0}]},i=[{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,endsWithParent:!0,relevance:0,contains:[{className:"literal",begin:/\.\.\./},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,n,r]}],o={className:"title",begin:e.UNDERSCORE_IDENT_RE,relevance:0},s=function(t,a,r){var s=e.inherit({className:"function",beginKeywords:t,end:a,excludeEnd:!0,contains:[].concat(i)},r||{});return s.contains.push(o),s.contains.push(e.C_NUMBER_MODE),s.contains.push(e.C_BLOCK_COMMENT_MODE),s.contains.push(n),s},l={className:"built_in",begin:"\\b("+t.built_in.split(" ").join("|")+")\\b"},c={className:"string",begin:'"',end:'"',contains:[e.BACKSLASH_ESCAPE],relevance:0},_={begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,keywords:t,relevance:0,contains:[{beginKeywords:t.keyword},l,{className:"built_in",begin:e.UNDERSCORE_IDENT_RE,relevance:0}]},d={begin:/\(/,end:/\)/,relevance:0,keywords:{built_in:t.built_in,literal:t.literal},contains:[e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,n,l,_,c,"self"]};return _.contains.push(d),{name:"GAUSS",aliases:["gss"],case_insensitive:!0,keywords:t,illegal:/(\{[%#]|[%#]\}| <- )/,contains:[e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,c,a,{className:"keyword",begin:/\bexternal (matrix|string|array|sparse matrix|struct|proc|keyword|fn)/},s("proc keyword",";"),s("fn","="),{beginKeywords:"for threadfor",end:/;/,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE,n,d]},{variants:[{begin:e.UNDERSCORE_IDENT_RE+"\\."+e.UNDERSCORE_IDENT_RE},{begin:e.UNDERSCORE_IDENT_RE+"\\s*="}],relevance:0},_,r]}}},s8Vx:function(e,t){e.exports=function(e){var t="[a-z'][a-zA-Z0-9_']*",n="("+t+":"+t+"|"+t+")",a={keyword:"after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if let not of orelse|10 query receive rem try when xor",literal:"false true"},r=e.COMMENT("%","$"),i={className:"number",begin:"\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)",relevance:0},o={begin:"fun\\s+"+t+"/\\d+"},s={begin:n+"\\(",end:"\\)",returnBegin:!0,relevance:0,contains:[{begin:n,relevance:0},{begin:"\\(",end:"\\)",endsWithParent:!0,returnEnd:!0,relevance:0}]},l={begin:"{",end:"}",relevance:0},c={begin:"\\b_([A-Z][A-Za-z0-9_]*)?",relevance:0},_={begin:"[A-Z][a-zA-Z0-9_]*",relevance:0},d={begin:"#"+e.UNDERSCORE_IDENT_RE,relevance:0,returnBegin:!0,contains:[{begin:"#"+e.UNDERSCORE_IDENT_RE,relevance:0},{begin:"{",end:"}",relevance:0}]},u={beginKeywords:"fun receive if try case",end:"end",keywords:a};u.contains=[r,o,e.inherit(e.APOS_STRING_MODE,{className:""}),u,s,e.QUOTE_STRING_MODE,i,l,c,_,d];var p=[r,o,u,s,e.QUOTE_STRING_MODE,i,l,c,_,d];s.contains[1].contains=p,l.contains=p,d.contains[1].contains=p;var m={className:"params",begin:"\\(",end:"\\)",contains:p};return{name:"Erlang",aliases:["erl"],keywords:a,illegal:"(",returnBegin:!0,illegal:"\\(|#|//|/\\*|\\\\|:|;",contains:[m,e.inherit(e.TITLE_MODE,{begin:t})],starts:{end:";|\\.",keywords:a,contains:p}},r,{begin:"^-",end:"\\.",relevance:0,excludeEnd:!0,returnBegin:!0,lexemes:"-"+e.IDENT_RE,keywords:"-module -record -undef -export -ifdef -ifndef -author -copyright -doc -vsn -import -include -include_lib -compile -define -else -endif -file -behaviour -behavior -spec",contains:[m]},i,e.QUOTE_STRING_MODE,d,c,_,l,{begin:/\.$/}]}}},sM9k:function(e,t){e.exports=function(e){var t={className:"string",variants:[e.inherit(e.QUOTE_STRING_MODE,{begin:'((u8?|U)|L)?"'}),{begin:'(u8?|U)?R"',end:'"',contains:[e.BACKSLASH_ESCAPE]},{begin:"'\\\\?.",end:"'",illegal:"."}]},n={className:"number",variants:[{begin:"\\b(\\d+(\\.\\d*)?|\\.\\d+)(u|U|l|L|ul|UL|f|F)"},{begin:e.C_NUMBER_RE}],relevance:0},a={className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"if else elif endif define undef ifdef ifndef"},contains:[{begin:/\\\n/,relevance:0},{beginKeywords:"include",end:"$",keywords:{"meta-keyword":"include"},contains:[e.inherit(t,{className:"meta-string"}),{className:"meta-string",begin:"<",end:">",illegal:"\\n"}]},t,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},r={className:"variable",begin:"\\&[a-z\\d_]*\\b"},i={className:"meta-keyword",begin:"/[a-z][a-z\\d-]*/"},o={className:"symbol",begin:"^\\s*[a-zA-Z_][a-zA-Z\\d_]*:"},s={className:"params",begin:"<",end:">",contains:[n,r]},l={className:"class",begin:/[a-zA-Z_][a-zA-Z\d_@]*\s{/,end:/[{;=]/,returnBegin:!0,excludeEnd:!0};return{name:"Device Tree",keywords:"",contains:[{className:"class",begin:"/\\s*{",end:"};",relevance:10,contains:[r,i,o,l,s,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,t]},r,i,o,l,s,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,t,a,{begin:e.IDENT_RE+"::",keywords:""}]}}},sbla:function(e,t){e.exports=function(e){var t={keyword:"if then not for in while do return else elseif break continue switch and or unless when class extends super local import export from using",literal:"true false nil",built_in:"_G _VERSION assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall coroutine debug io math os package string table"},n="[A-Za-z$_][0-9A-Za-z$_]*",a={className:"subst",begin:/#\{/,end:/}/,keywords:t},r=[e.inherit(e.C_NUMBER_MODE,{starts:{end:"(\\s*/)?",relevance:0}}),{className:"string",variants:[{begin:/'/,end:/'/,contains:[e.BACKSLASH_ESCAPE]},{begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,a]}]},{className:"built_in",begin:"@__"+e.IDENT_RE},{begin:"@"+e.IDENT_RE},{begin:e.IDENT_RE+"\\\\"+e.IDENT_RE}];a.contains=r;var i=e.inherit(e.TITLE_MODE,{begin:n}),o={className:"params",begin:"\\([^\\(]",returnBegin:!0,contains:[{begin:/\(/,end:/\)/,keywords:t,contains:["self"].concat(r)}]};return{name:"MoonScript",aliases:["moon"],keywords:t,illegal:/\/\*/,contains:r.concat([e.COMMENT("--","$"),{className:"function",begin:"^\\s*"+n+"\\s*=\\s*(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[i,o]},{begin:/[\(,:=]\s*/,relevance:0,contains:[{className:"function",begin:"(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[o]}]},{className:"class",beginKeywords:"class",end:"$",illegal:/[:="\[\]]/,contains:[{beginKeywords:"extends",endsWithParent:!0,illegal:/[:="\[\]]/,contains:[i]},i]},{className:"name",begin:n+":",end:":",returnBegin:!0,returnEnd:!0,relevance:0}])}}},syIQ:function(e,t){e.exports=function(e){var t={className:"variable",begin:/\$+{[\w\.:-]+}/},n={className:"variable",begin:/\$+\w+/,illegal:/\(\){}/},a={className:"variable",begin:/\$+\([\w\^\.:-]+\)/},r={className:"string",variants:[{begin:'"',end:'"'},{begin:"'",end:"'"},{begin:"`",end:"`"}],illegal:/\n/,contains:[{className:"meta",begin:/\$(\\[nrt]|\$)/},{className:"variable",begin:/\$(ADMINTOOLS|APPDATA|CDBURN_AREA|CMDLINE|COMMONFILES32|COMMONFILES64|COMMONFILES|COOKIES|DESKTOP|DOCUMENTS|EXEDIR|EXEFILE|EXEPATH|FAVORITES|FONTS|HISTORY|HWNDPARENT|INSTDIR|INTERNET_CACHE|LANGUAGE|LOCALAPPDATA|MUSIC|NETHOOD|OUTDIR|PICTURES|PLUGINSDIR|PRINTHOOD|PROFILE|PROGRAMFILES32|PROGRAMFILES64|PROGRAMFILES|QUICKLAUNCH|RECENT|RESOURCES_LOCALIZED|RESOURCES|SENDTO|SMPROGRAMS|SMSTARTUP|STARTMENU|SYSDIR|TEMP|TEMPLATES|VIDEOS|WINDIR)/},t,n,a]};return{name:"NSIS",case_insensitive:!1,keywords:{keyword:"Abort AddBrandingImage AddSize AllowRootDirInstall AllowSkipFiles AutoCloseWindow BGFont BGGradient BrandingText BringToFront Call CallInstDLL Caption ChangeUI CheckBitmap ClearErrors CompletedText ComponentText CopyFiles CRCCheck CreateDirectory CreateFont CreateShortCut Delete DeleteINISec DeleteINIStr DeleteRegKey DeleteRegValue DetailPrint DetailsButtonText DirText DirVar DirVerify EnableWindow EnumRegKey EnumRegValue Exch Exec ExecShell ExecShellWait ExecWait ExpandEnvStrings File FileBufSize FileClose FileErrorText FileOpen FileRead FileReadByte FileReadUTF16LE FileReadWord FileSeek FileWrite FileWriteByte FileWriteUTF16LE FileWriteWord FindClose FindFirst FindNext FindWindow FlushINI FunctionEnd GetCurInstType GetCurrentAddress GetDlgItem GetDLLVersion GetDLLVersionLocal GetErrorLevel GetFileTime GetFileTimeLocal GetFullPathName GetFunctionAddress GetInstDirError GetLabelAddress GetTempFileName Goto HideWindow Icon IfAbort IfErrors IfFileExists IfRebootFlag IfSilent InitPluginsDir InstallButtonText InstallColors InstallDir InstallDirRegKey InstProgressFlags InstType InstTypeGetText InstTypeSetText Int64Cmp Int64CmpU Int64Fmt IntCmp IntCmpU IntFmt IntOp IntPtrCmp IntPtrCmpU IntPtrOp IsWindow LangString LicenseBkColor LicenseData LicenseForceSelection LicenseLangString LicenseText LoadLanguageFile LockWindow LogSet LogText ManifestDPIAware ManifestSupportedOS MessageBox MiscButtonText Name Nop OutFile Page PageCallbacks PageExEnd Pop Push Quit ReadEnvStr ReadINIStr ReadRegDWORD ReadRegStr Reboot RegDLL Rename RequestExecutionLevel ReserveFile Return RMDir SearchPath SectionEnd SectionGetFlags SectionGetInstTypes SectionGetSize SectionGetText SectionGroupEnd SectionIn SectionSetFlags SectionSetInstTypes SectionSetSize SectionSetText SendMessage SetAutoClose SetBrandingImage SetCompress SetCompressor SetCompressorDictSize SetCtlColors SetCurInstType SetDatablockOptimize SetDateSave SetDetailsPrint SetDetailsView SetErrorLevel SetErrors SetFileAttributes SetFont SetOutPath SetOverwrite SetRebootFlag SetRegView SetShellVarContext SetSilent ShowInstDetails ShowUninstDetails ShowWindow SilentInstall SilentUnInstall Sleep SpaceTexts StrCmp StrCmpS StrCpy StrLen SubCaption Unicode UninstallButtonText UninstallCaption UninstallIcon UninstallSubCaption UninstallText UninstPage UnRegDLL Var VIAddVersionKey VIFileVersion VIProductVersion WindowIcon WriteINIStr WriteRegBin WriteRegDWORD WriteRegExpandStr WriteRegMultiStr WriteRegNone WriteRegStr WriteUninstaller XPStyle",literal:"admin all auto both bottom bzip2 colored components current custom directory false force hide highest ifdiff ifnewer instfiles lastused leave left license listonly lzma nevershow none normal notset off on open print right show silent silentlog smooth textonly top true try un.components un.custom un.directory un.instfiles un.license uninstConfirm user Win10 Win7 Win8 WinVista zlib"},contains:[e.HASH_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.COMMENT(";","$",{relevance:0}),{className:"function",beginKeywords:"Function PageEx Section SectionGroup",end:"$"},r,{className:"keyword",begin:/\!(addincludedir|addplugindir|appendfile|cd|define|delfile|echo|else|endif|error|execute|finalize|getdllversion|gettlbversion|if|ifdef|ifmacrodef|ifmacrondef|ifndef|include|insertmacro|macro|macroend|makensis|packhdr|searchparse|searchreplace|system|tempfile|undef|verbose|warning)/},t,n,a,{className:"params",begin:"(ARCHIVE|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_OFFLINE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_TEMPORARY|HKCR|HKCU|HKDD|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_DYN_DATA|HKEY_LOCAL_MACHINE|HKEY_PERFORMANCE_DATA|HKEY_USERS|HKLM|HKPD|HKU|IDABORT|IDCANCEL|IDIGNORE|IDNO|IDOK|IDRETRY|IDYES|MB_ABORTRETRYIGNORE|MB_DEFBUTTON1|MB_DEFBUTTON2|MB_DEFBUTTON3|MB_DEFBUTTON4|MB_ICONEXCLAMATION|MB_ICONINFORMATION|MB_ICONQUESTION|MB_ICONSTOP|MB_OK|MB_OKCANCEL|MB_RETRYCANCEL|MB_RIGHT|MB_RTLREADING|MB_SETFOREGROUND|MB_TOPMOST|MB_USERICON|MB_YESNO|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SYSTEM|TEMPORARY)"},{className:"class",begin:/\w+\:\:\w+/},e.NUMBER_MODE]}}},t6qC:function(e,t){e.exports=function(e){return{name:"Julia REPL",contains:[{className:"meta",begin:/^julia>/,relevance:10,starts:{end:/^(?![ ]{6})/,subLanguage:"julia"},aliases:["jldoctest"]}]}}},tQ2B:function(e,t,n){"use strict";var a=n("xTJ+"),r=n("Rn+g"),i=n("MLWZ"),o=n("g7np"),s=n("w0Vi"),l=n("OTTw"),c=n("LYNF");e.exports=function(e){return new Promise((function(t,_){var d=e.data,u=e.headers;a.isFormData(d)&&delete u["Content-Type"];var p=new XMLHttpRequest;if(e.auth){var m=e.auth.username||"",E=e.auth.password||"";u.Authorization="Basic "+btoa(m+":"+E)}var g=o(e.baseURL,e.url);if(p.open(e.method.toUpperCase(),i(g,e.params,e.paramsSerializer),!0),p.timeout=e.timeout,p.onreadystatechange=function(){if(p&&4===p.readyState&&(0!==p.status||p.responseURL&&0===p.responseURL.indexOf("file:"))){var n="getAllResponseHeaders"in p?s(p.getAllResponseHeaders()):null,a={data:e.responseType&&"text"!==e.responseType?p.response:p.responseText,status:p.status,statusText:p.statusText,headers:n,config:e,request:p};r(t,_,a),p=null}},p.onabort=function(){p&&(_(c("Request aborted",e,"ECONNABORTED",p)),p=null)},p.onerror=function(){_(c("Network Error",e,null,p)),p=null},p.ontimeout=function(){var t="timeout of "+e.timeout+"ms exceeded";e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),_(c(t,e,"ECONNABORTED",p)),p=null},a.isStandardBrowserEnv()){var S=n("eqyj"),f=(e.withCredentials||l(g))&&e.xsrfCookieName?S.read(e.xsrfCookieName):void 0;f&&(u[e.xsrfHeaderName]=f)}if("setRequestHeader"in p&&a.forEach(u,(function(e,t){void 0===d&&"content-type"===t.toLowerCase()?delete u[t]:p.setRequestHeader(t,e)})),a.isUndefined(e.withCredentials)||(p.withCredentials=!!e.withCredentials),e.responseType)try{p.responseType=e.responseType}catch(t){if("json"!==e.responseType)throw t}"function"==typeof e.onDownloadProgress&&p.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&p.upload&&p.upload.addEventListener("progress",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then((function(e){p&&(p.abort(),_(e),p=null)})),void 0===d&&(d=null),p.send(d)}))}},tSgA:function(e,t){e.exports=function(e){var t="^[a-zA-Z][a-zA-Z0-9-]*",n="[!@#$^&',?+~`|:]",a=e.COMMENT(";","$"),r={className:"attribute",begin:t+"(?=\\s*=)"};return{name:"Augmented Backus-Naur Form",illegal:n,keywords:["ALPHA","BIT","CHAR","CR","CRLF","CTL","DIGIT","DQUOTE","HEXDIG","HTAB","LF","LWSP","OCTET","SP","VCHAR","WSP"].join(" "),contains:[r,a,{className:"symbol",begin:/%b[0-1]+(-[0-1]+|(\.[0-1]+)+){0,1}/},{className:"symbol",begin:/%d[0-9]+(-[0-9]+|(\.[0-9]+)+){0,1}/},{className:"symbol",begin:/%x[0-9A-F]+(-[0-9A-F]+|(\.[0-9A-F]+)+){0,1}/},{className:"symbol",begin:/%[si]/},e.QUOTE_STRING_MODE,e.NUMBER_MODE]}}},tluB:function(e,t){e.exports=function(e){return{name:"Shell Session",aliases:["console"],contains:[{className:"meta",begin:"^\\s{0,3}[/\\w\\d\\[\\]()@-]*[>%$#]",starts:{end:"$",subLanguage:"bash"}}]}}},u0OR:function(e,t){e.exports=function(e){var t="[A-Za-zÐ-Яа-ÑÑ‘Ð_!][A-Za-zÐ-Яа-ÑÑ‘Ð_0-9]*",n={className:"number",begin:e.NUMBER_RE,relevance:0},a={className:"string",variants:[{begin:'"',end:'"'},{begin:"'",end:"'"}]},r={className:"doctag",begin:"\\b(?:TODO|DONE|BEGIN|END|STUB|CHG|FIXME|NOTE|BUG|XXX)\\b",relevance:0},i={variants:[{className:"comment",begin:"//",end:"$",relevance:0,contains:[e.PHRASAL_WORDS_MODE,r]},{className:"comment",begin:"/\\*",end:"\\*/",relevance:0,contains:[e.PHRASAL_WORDS_MODE,r]}]},o={keyword:"and и else иначе endexcept endfinally endforeach конецвÑе endif конецеÑли endwhile конецпока except exitfor finally foreach вÑе if еÑли in в not не or или try while пока ",built_in:"SYSRES_CONST_ACCES_RIGHT_TYPE_EDIT SYSRES_CONST_ACCES_RIGHT_TYPE_FULL SYSRES_CONST_ACCES_RIGHT_TYPE_VIEW SYSRES_CONST_ACCESS_MODE_REQUISITE_CODE SYSRES_CONST_ACCESS_NO_ACCESS_VIEW SYSRES_CONST_ACCESS_NO_ACCESS_VIEW_CODE SYSRES_CONST_ACCESS_RIGHTS_ADD_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_ADD_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_RIGHTS_CHANGE_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_CHANGE_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_RIGHTS_DELETE_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_DELETE_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_RIGHTS_EXECUTE_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_EXECUTE_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_RIGHTS_NO_ACCESS_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_NO_ACCESS_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_RIGHTS_RATIFY_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_RATIFY_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_RIGHTS_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_VIEW SYSRES_CONST_ACCESS_RIGHTS_VIEW_CODE SYSRES_CONST_ACCESS_RIGHTS_VIEW_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_VIEW_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_TYPE_CHANGE SYSRES_CONST_ACCESS_TYPE_CHANGE_CODE SYSRES_CONST_ACCESS_TYPE_EXISTS SYSRES_CONST_ACCESS_TYPE_EXISTS_CODE SYSRES_CONST_ACCESS_TYPE_FULL SYSRES_CONST_ACCESS_TYPE_FULL_CODE SYSRES_CONST_ACCESS_TYPE_VIEW SYSRES_CONST_ACCESS_TYPE_VIEW_CODE SYSRES_CONST_ACTION_TYPE_ABORT SYSRES_CONST_ACTION_TYPE_ACCEPT SYSRES_CONST_ACTION_TYPE_ACCESS_RIGHTS SYSRES_CONST_ACTION_TYPE_ADD_ATTACHMENT SYSRES_CONST_ACTION_TYPE_CHANGE_CARD SYSRES_CONST_ACTION_TYPE_CHANGE_KIND SYSRES_CONST_ACTION_TYPE_CHANGE_STORAGE SYSRES_CONST_ACTION_TYPE_CONTINUE SYSRES_CONST_ACTION_TYPE_COPY SYSRES_CONST_ACTION_TYPE_CREATE SYSRES_CONST_ACTION_TYPE_CREATE_VERSION SYSRES_CONST_ACTION_TYPE_DELETE SYSRES_CONST_ACTION_TYPE_DELETE_ATTACHMENT SYSRES_CONST_ACTION_TYPE_DELETE_VERSION SYSRES_CONST_ACTION_TYPE_DISABLE_DELEGATE_ACCESS_RIGHTS SYSRES_CONST_ACTION_TYPE_ENABLE_DELEGATE_ACCESS_RIGHTS SYSRES_CONST_ACTION_TYPE_ENCRYPTION_BY_CERTIFICATE SYSRES_CONST_ACTION_TYPE_ENCRYPTION_BY_CERTIFICATE_AND_PASSWORD SYSRES_CONST_ACTION_TYPE_ENCRYPTION_BY_PASSWORD SYSRES_CONST_ACTION_TYPE_EXPORT_WITH_LOCK SYSRES_CONST_ACTION_TYPE_EXPORT_WITHOUT_LOCK SYSRES_CONST_ACTION_TYPE_IMPORT_WITH_UNLOCK SYSRES_CONST_ACTION_TYPE_IMPORT_WITHOUT_UNLOCK SYSRES_CONST_ACTION_TYPE_LIFE_CYCLE_STAGE SYSRES_CONST_ACTION_TYPE_LOCK SYSRES_CONST_ACTION_TYPE_LOCK_FOR_SERVER SYSRES_CONST_ACTION_TYPE_LOCK_MODIFY SYSRES_CONST_ACTION_TYPE_MARK_AS_READED SYSRES_CONST_ACTION_TYPE_MARK_AS_UNREADED SYSRES_CONST_ACTION_TYPE_MODIFY SYSRES_CONST_ACTION_TYPE_MODIFY_CARD SYSRES_CONST_ACTION_TYPE_MOVE_TO_ARCHIVE SYSRES_CONST_ACTION_TYPE_OFF_ENCRYPTION SYSRES_CONST_ACTION_TYPE_PASSWORD_CHANGE SYSRES_CONST_ACTION_TYPE_PERFORM SYSRES_CONST_ACTION_TYPE_RECOVER_FROM_LOCAL_COPY SYSRES_CONST_ACTION_TYPE_RESTART SYSRES_CONST_ACTION_TYPE_RESTORE_FROM_ARCHIVE SYSRES_CONST_ACTION_TYPE_REVISION SYSRES_CONST_ACTION_TYPE_SEND_BY_MAIL SYSRES_CONST_ACTION_TYPE_SIGN SYSRES_CONST_ACTION_TYPE_START SYSRES_CONST_ACTION_TYPE_UNLOCK SYSRES_CONST_ACTION_TYPE_UNLOCK_FROM_SERVER SYSRES_CONST_ACTION_TYPE_VERSION_STATE SYSRES_CONST_ACTION_TYPE_VERSION_VISIBILITY SYSRES_CONST_ACTION_TYPE_VIEW SYSRES_CONST_ACTION_TYPE_VIEW_SHADOW_COPY SYSRES_CONST_ACTION_TYPE_WORKFLOW_DESCRIPTION_MODIFY SYSRES_CONST_ACTION_TYPE_WRITE_HISTORY SYSRES_CONST_ACTIVE_VERSION_STATE_PICK_VALUE SYSRES_CONST_ADD_REFERENCE_MODE_NAME SYSRES_CONST_ADDITION_REQUISITE_CODE SYSRES_CONST_ADDITIONAL_PARAMS_REQUISITE_CODE SYSRES_CONST_ADITIONAL_JOB_END_DATE_REQUISITE_NAME SYSRES_CONST_ADITIONAL_JOB_READ_REQUISITE_NAME SYSRES_CONST_ADITIONAL_JOB_START_DATE_REQUISITE_NAME SYSRES_CONST_ADITIONAL_JOB_STATE_REQUISITE_NAME SYSRES_CONST_ADMINISTRATION_HISTORY_ADDING_USER_TO_GROUP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_ADDING_USER_TO_GROUP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_COMP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_COMP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_GROUP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_GROUP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_USER_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_USER_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_DATABASE_USER_CREATION SYSRES_CONST_ADMINISTRATION_HISTORY_DATABASE_USER_CREATION_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_DATABASE_USER_DELETION SYSRES_CONST_ADMINISTRATION_HISTORY_DATABASE_USER_DELETION_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_COMP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_COMP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_GROUP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_GROUP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_USER_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_USER_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_USER_FROM_GROUP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_USER_FROM_GROUP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_FILTERER_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_FILTERER_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_FILTERER_RESTRICTION_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_FILTERER_RESTRICTION_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_PRIVILEGE_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_PRIVILEGE_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_RIGHTS_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_RIGHTS_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_IS_MAIN_SERVER_CHANGED_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_IS_MAIN_SERVER_CHANGED_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_IS_PUBLIC_CHANGED_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_IS_PUBLIC_CHANGED_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_FILTERER_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_FILTERER_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_FILTERER_RESTRICTION_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_FILTERER_RESTRICTION_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_PRIVILEGE_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_PRIVILEGE_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_RIGHTS_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_RIGHTS_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_SERVER_LOGIN_CREATION SYSRES_CONST_ADMINISTRATION_HISTORY_SERVER_LOGIN_CREATION_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_SERVER_LOGIN_DELETION SYSRES_CONST_ADMINISTRATION_HISTORY_SERVER_LOGIN_DELETION_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_CATEGORY_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_CATEGORY_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_COMP_TITLE_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_COMP_TITLE_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_FULL_NAME_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_FULL_NAME_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_GROUP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_GROUP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_PARENT_GROUP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_PARENT_GROUP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_AUTH_TYPE_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_AUTH_TYPE_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_LOGIN_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_LOGIN_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_STATUS_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_STATUS_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_USER_PASSWORD_CHANGE SYSRES_CONST_ADMINISTRATION_HISTORY_USER_PASSWORD_CHANGE_ACTION SYSRES_CONST_ALL_ACCEPT_CONDITION_RUS SYSRES_CONST_ALL_USERS_GROUP SYSRES_CONST_ALL_USERS_GROUP_NAME SYSRES_CONST_ALL_USERS_SERVER_GROUP_NAME SYSRES_CONST_ALLOWED_ACCESS_TYPE_CODE SYSRES_CONST_ALLOWED_ACCESS_TYPE_NAME SYSRES_CONST_APP_VIEWER_TYPE_REQUISITE_CODE SYSRES_CONST_APPROVING_SIGNATURE_NAME SYSRES_CONST_APPROVING_SIGNATURE_REQUISITE_CODE SYSRES_CONST_ASSISTANT_SUBSTITUE_TYPE SYSRES_CONST_ASSISTANT_SUBSTITUE_TYPE_CODE SYSRES_CONST_ATTACH_TYPE_COMPONENT_TOKEN SYSRES_CONST_ATTACH_TYPE_DOC SYSRES_CONST_ATTACH_TYPE_EDOC SYSRES_CONST_ATTACH_TYPE_FOLDER SYSRES_CONST_ATTACH_TYPE_JOB SYSRES_CONST_ATTACH_TYPE_REFERENCE SYSRES_CONST_ATTACH_TYPE_TASK SYSRES_CONST_AUTH_ENCODED_PASSWORD SYSRES_CONST_AUTH_ENCODED_PASSWORD_CODE SYSRES_CONST_AUTH_NOVELL SYSRES_CONST_AUTH_PASSWORD SYSRES_CONST_AUTH_PASSWORD_CODE SYSRES_CONST_AUTH_WINDOWS SYSRES_CONST_AUTHENTICATING_SIGNATURE_NAME SYSRES_CONST_AUTHENTICATING_SIGNATURE_REQUISITE_CODE SYSRES_CONST_AUTO_ENUM_METHOD_FLAG SYSRES_CONST_AUTO_NUMERATION_CODE SYSRES_CONST_AUTO_STRONG_ENUM_METHOD_FLAG SYSRES_CONST_AUTOTEXT_NAME_REQUISITE_CODE SYSRES_CONST_AUTOTEXT_TEXT_REQUISITE_CODE SYSRES_CONST_AUTOTEXT_USAGE_ALL SYSRES_CONST_AUTOTEXT_USAGE_ALL_CODE SYSRES_CONST_AUTOTEXT_USAGE_SIGN SYSRES_CONST_AUTOTEXT_USAGE_SIGN_CODE SYSRES_CONST_AUTOTEXT_USAGE_WORK SYSRES_CONST_AUTOTEXT_USAGE_WORK_CODE SYSRES_CONST_AUTOTEXT_USE_ANYWHERE_CODE SYSRES_CONST_AUTOTEXT_USE_ON_SIGNING_CODE SYSRES_CONST_AUTOTEXT_USE_ON_WORK_CODE SYSRES_CONST_BEGIN_DATE_REQUISITE_CODE SYSRES_CONST_BLACK_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_BLUE_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_BTN_PART SYSRES_CONST_CALCULATED_ROLE_TYPE_CODE SYSRES_CONST_CALL_TYPE_VARIABLE_BUTTON_VALUE SYSRES_CONST_CALL_TYPE_VARIABLE_PROGRAM_VALUE SYSRES_CONST_CANCEL_MESSAGE_FUNCTION_RESULT SYSRES_CONST_CARD_PART SYSRES_CONST_CARD_REFERENCE_MODE_NAME SYSRES_CONST_CERTIFICATE_TYPE_REQUISITE_ENCRYPT_VALUE SYSRES_CONST_CERTIFICATE_TYPE_REQUISITE_SIGN_AND_ENCRYPT_VALUE SYSRES_CONST_CERTIFICATE_TYPE_REQUISITE_SIGN_VALUE SYSRES_CONST_CHECK_PARAM_VALUE_DATE_PARAM_TYPE SYSRES_CONST_CHECK_PARAM_VALUE_FLOAT_PARAM_TYPE SYSRES_CONST_CHECK_PARAM_VALUE_INTEGER_PARAM_TYPE SYSRES_CONST_CHECK_PARAM_VALUE_PICK_PARAM_TYPE SYSRES_CONST_CHECK_PARAM_VALUE_REEFRENCE_PARAM_TYPE SYSRES_CONST_CLOSED_RECORD_FLAG_VALUE_FEMININE SYSRES_CONST_CLOSED_RECORD_FLAG_VALUE_MASCULINE SYSRES_CONST_CODE_COMPONENT_TYPE_ADMIN SYSRES_CONST_CODE_COMPONENT_TYPE_DEVELOPER SYSRES_CONST_CODE_COMPONENT_TYPE_DOCS SYSRES_CONST_CODE_COMPONENT_TYPE_EDOC_CARDS SYSRES_CONST_CODE_COMPONENT_TYPE_EXTERNAL_EXECUTABLE SYSRES_CONST_CODE_COMPONENT_TYPE_OTHER SYSRES_CONST_CODE_COMPONENT_TYPE_REFERENCE SYSRES_CONST_CODE_COMPONENT_TYPE_REPORT SYSRES_CONST_CODE_COMPONENT_TYPE_SCRIPT SYSRES_CONST_CODE_COMPONENT_TYPE_URL SYSRES_CONST_CODE_REQUISITE_ACCESS SYSRES_CONST_CODE_REQUISITE_CODE SYSRES_CONST_CODE_REQUISITE_COMPONENT SYSRES_CONST_CODE_REQUISITE_DESCRIPTION SYSRES_CONST_CODE_REQUISITE_EXCLUDE_COMPONENT SYSRES_CONST_CODE_REQUISITE_RECORD SYSRES_CONST_COMMENT_REQ_CODE SYSRES_CONST_COMMON_SETTINGS_REQUISITE_CODE SYSRES_CONST_COMP_CODE_GRD SYSRES_CONST_COMPONENT_GROUP_TYPE_REQUISITE_CODE SYSRES_CONST_COMPONENT_TYPE_ADMIN_COMPONENTS SYSRES_CONST_COMPONENT_TYPE_DEVELOPER_COMPONENTS SYSRES_CONST_COMPONENT_TYPE_DOCS SYSRES_CONST_COMPONENT_TYPE_EDOC_CARDS SYSRES_CONST_COMPONENT_TYPE_EDOCS SYSRES_CONST_COMPONENT_TYPE_EXTERNAL_EXECUTABLE SYSRES_CONST_COMPONENT_TYPE_OTHER SYSRES_CONST_COMPONENT_TYPE_REFERENCE_TYPES SYSRES_CONST_COMPONENT_TYPE_REFERENCES SYSRES_CONST_COMPONENT_TYPE_REPORTS SYSRES_CONST_COMPONENT_TYPE_SCRIPTS SYSRES_CONST_COMPONENT_TYPE_URL SYSRES_CONST_COMPONENTS_REMOTE_SERVERS_VIEW_CODE SYSRES_CONST_CONDITION_BLOCK_DESCRIPTION SYSRES_CONST_CONST_FIRM_STATUS_COMMON SYSRES_CONST_CONST_FIRM_STATUS_INDIVIDUAL SYSRES_CONST_CONST_NEGATIVE_VALUE SYSRES_CONST_CONST_POSITIVE_VALUE SYSRES_CONST_CONST_SERVER_STATUS_DONT_REPLICATE SYSRES_CONST_CONST_SERVER_STATUS_REPLICATE SYSRES_CONST_CONTENTS_REQUISITE_CODE SYSRES_CONST_DATA_TYPE_BOOLEAN SYSRES_CONST_DATA_TYPE_DATE SYSRES_CONST_DATA_TYPE_FLOAT SYSRES_CONST_DATA_TYPE_INTEGER SYSRES_CONST_DATA_TYPE_PICK SYSRES_CONST_DATA_TYPE_REFERENCE SYSRES_CONST_DATA_TYPE_STRING SYSRES_CONST_DATA_TYPE_TEXT SYSRES_CONST_DATA_TYPE_VARIANT SYSRES_CONST_DATE_CLOSE_REQ_CODE SYSRES_CONST_DATE_FORMAT_DATE_ONLY_CHAR SYSRES_CONST_DATE_OPEN_REQ_CODE SYSRES_CONST_DATE_REQUISITE SYSRES_CONST_DATE_REQUISITE_CODE SYSRES_CONST_DATE_REQUISITE_NAME SYSRES_CONST_DATE_REQUISITE_TYPE SYSRES_CONST_DATE_TYPE_CHAR SYSRES_CONST_DATETIME_FORMAT_VALUE SYSRES_CONST_DEA_ACCESS_RIGHTS_ACTION_CODE SYSRES_CONST_DESCRIPTION_LOCALIZE_ID_REQUISITE_CODE SYSRES_CONST_DESCRIPTION_REQUISITE_CODE SYSRES_CONST_DET1_PART SYSRES_CONST_DET2_PART SYSRES_CONST_DET3_PART SYSRES_CONST_DET4_PART SYSRES_CONST_DET5_PART SYSRES_CONST_DET6_PART SYSRES_CONST_DETAIL_DATASET_KEY_REQUISITE_CODE SYSRES_CONST_DETAIL_PICK_REQUISITE_CODE SYSRES_CONST_DETAIL_REQ_CODE SYSRES_CONST_DO_NOT_USE_ACCESS_TYPE_CODE SYSRES_CONST_DO_NOT_USE_ACCESS_TYPE_NAME SYSRES_CONST_DO_NOT_USE_ON_VIEW_ACCESS_TYPE_CODE SYSRES_CONST_DO_NOT_USE_ON_VIEW_ACCESS_TYPE_NAME SYSRES_CONST_DOCUMENT_STORAGES_CODE SYSRES_CONST_DOCUMENT_TEMPLATES_TYPE_NAME SYSRES_CONST_DOUBLE_REQUISITE_CODE SYSRES_CONST_EDITOR_CLOSE_FILE_OBSERV_TYPE_CODE SYSRES_CONST_EDITOR_CLOSE_PROCESS_OBSERV_TYPE_CODE SYSRES_CONST_EDITOR_TYPE_REQUISITE_CODE SYSRES_CONST_EDITORS_APPLICATION_NAME_REQUISITE_CODE SYSRES_CONST_EDITORS_CREATE_SEVERAL_PROCESSES_REQUISITE_CODE SYSRES_CONST_EDITORS_EXTENSION_REQUISITE_CODE SYSRES_CONST_EDITORS_OBSERVER_BY_PROCESS_TYPE SYSRES_CONST_EDITORS_REFERENCE_CODE SYSRES_CONST_EDITORS_REPLACE_SPEC_CHARS_REQUISITE_CODE SYSRES_CONST_EDITORS_USE_PLUGINS_REQUISITE_CODE SYSRES_CONST_EDITORS_VIEW_DOCUMENT_OPENED_TO_EDIT_CODE SYSRES_CONST_EDOC_CARD_TYPE_REQUISITE_CODE SYSRES_CONST_EDOC_CARD_TYPES_LINK_REQUISITE_CODE SYSRES_CONST_EDOC_CERTIFICATE_AND_PASSWORD_ENCODE_CODE SYSRES_CONST_EDOC_CERTIFICATE_ENCODE_CODE SYSRES_CONST_EDOC_DATE_REQUISITE_CODE SYSRES_CONST_EDOC_KIND_REFERENCE_CODE SYSRES_CONST_EDOC_KINDS_BY_TEMPLATE_ACTION_CODE SYSRES_CONST_EDOC_MANAGE_ACCESS_CODE SYSRES_CONST_EDOC_NONE_ENCODE_CODE SYSRES_CONST_EDOC_NUMBER_REQUISITE_CODE SYSRES_CONST_EDOC_PASSWORD_ENCODE_CODE SYSRES_CONST_EDOC_READONLY_ACCESS_CODE SYSRES_CONST_EDOC_SHELL_LIFE_TYPE_VIEW_VALUE SYSRES_CONST_EDOC_SIZE_RESTRICTION_PRIORITY_REQUISITE_CODE SYSRES_CONST_EDOC_STORAGE_CHECK_ACCESS_RIGHTS_REQUISITE_CODE SYSRES_CONST_EDOC_STORAGE_COMPUTER_NAME_REQUISITE_CODE SYSRES_CONST_EDOC_STORAGE_DATABASE_NAME_REQUISITE_CODE SYSRES_CONST_EDOC_STORAGE_EDIT_IN_STORAGE_REQUISITE_CODE SYSRES_CONST_EDOC_STORAGE_LOCAL_PATH_REQUISITE_CODE SYSRES_CONST_EDOC_STORAGE_SHARED_SOURCE_NAME_REQUISITE_CODE SYSRES_CONST_EDOC_TEMPLATE_REQUISITE_CODE SYSRES_CONST_EDOC_TYPES_REFERENCE_CODE SYSRES_CONST_EDOC_VERSION_ACTIVE_STAGE_CODE SYSRES_CONST_EDOC_VERSION_DESIGN_STAGE_CODE SYSRES_CONST_EDOC_VERSION_OBSOLETE_STAGE_CODE SYSRES_CONST_EDOC_WRITE_ACCES_CODE SYSRES_CONST_EDOCUMENT_CARD_REQUISITES_REFERENCE_CODE_SELECTED_REQUISITE SYSRES_CONST_ENCODE_CERTIFICATE_TYPE_CODE SYSRES_CONST_END_DATE_REQUISITE_CODE SYSRES_CONST_ENUMERATION_TYPE_REQUISITE_CODE SYSRES_CONST_EXECUTE_ACCESS_RIGHTS_TYPE_CODE SYSRES_CONST_EXECUTIVE_FILE_STORAGE_TYPE SYSRES_CONST_EXIST_CONST SYSRES_CONST_EXIST_VALUE SYSRES_CONST_EXPORT_LOCK_TYPE_ASK SYSRES_CONST_EXPORT_LOCK_TYPE_WITH_LOCK SYSRES_CONST_EXPORT_LOCK_TYPE_WITHOUT_LOCK SYSRES_CONST_EXPORT_VERSION_TYPE_ASK SYSRES_CONST_EXPORT_VERSION_TYPE_LAST SYSRES_CONST_EXPORT_VERSION_TYPE_LAST_ACTIVE SYSRES_CONST_EXTENSION_REQUISITE_CODE SYSRES_CONST_FILTER_NAME_REQUISITE_CODE SYSRES_CONST_FILTER_REQUISITE_CODE SYSRES_CONST_FILTER_TYPE_COMMON_CODE SYSRES_CONST_FILTER_TYPE_COMMON_NAME SYSRES_CONST_FILTER_TYPE_USER_CODE SYSRES_CONST_FILTER_TYPE_USER_NAME SYSRES_CONST_FILTER_VALUE_REQUISITE_NAME SYSRES_CONST_FLOAT_NUMBER_FORMAT_CHAR SYSRES_CONST_FLOAT_REQUISITE_TYPE SYSRES_CONST_FOLDER_AUTHOR_VALUE SYSRES_CONST_FOLDER_KIND_ANY_OBJECTS SYSRES_CONST_FOLDER_KIND_COMPONENTS SYSRES_CONST_FOLDER_KIND_EDOCS SYSRES_CONST_FOLDER_KIND_JOBS SYSRES_CONST_FOLDER_KIND_TASKS SYSRES_CONST_FOLDER_TYPE_COMMON SYSRES_CONST_FOLDER_TYPE_COMPONENT SYSRES_CONST_FOLDER_TYPE_FAVORITES SYSRES_CONST_FOLDER_TYPE_INBOX SYSRES_CONST_FOLDER_TYPE_OUTBOX SYSRES_CONST_FOLDER_TYPE_QUICK_LAUNCH SYSRES_CONST_FOLDER_TYPE_SEARCH SYSRES_CONST_FOLDER_TYPE_SHORTCUTS SYSRES_CONST_FOLDER_TYPE_USER SYSRES_CONST_FROM_DICTIONARY_ENUM_METHOD_FLAG SYSRES_CONST_FULL_SUBSTITUTE_TYPE SYSRES_CONST_FULL_SUBSTITUTE_TYPE_CODE SYSRES_CONST_FUNCTION_CANCEL_RESULT SYSRES_CONST_FUNCTION_CATEGORY_SYSTEM SYSRES_CONST_FUNCTION_CATEGORY_USER SYSRES_CONST_FUNCTION_FAILURE_RESULT SYSRES_CONST_FUNCTION_SAVE_RESULT SYSRES_CONST_GENERATED_REQUISITE SYSRES_CONST_GREEN_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_GROUP_ACCOUNT_TYPE_VALUE_CODE SYSRES_CONST_GROUP_CATEGORY_NORMAL_CODE SYSRES_CONST_GROUP_CATEGORY_NORMAL_NAME SYSRES_CONST_GROUP_CATEGORY_SERVICE_CODE SYSRES_CONST_GROUP_CATEGORY_SERVICE_NAME SYSRES_CONST_GROUP_COMMON_CATEGORY_FIELD_VALUE SYSRES_CONST_GROUP_FULL_NAME_REQUISITE_CODE SYSRES_CONST_GROUP_NAME_REQUISITE_CODE SYSRES_CONST_GROUP_RIGHTS_T_REQUISITE_CODE SYSRES_CONST_GROUP_SERVER_CODES_REQUISITE_CODE SYSRES_CONST_GROUP_SERVER_NAME_REQUISITE_CODE SYSRES_CONST_GROUP_SERVICE_CATEGORY_FIELD_VALUE SYSRES_CONST_GROUP_USER_REQUISITE_CODE SYSRES_CONST_GROUPS_REFERENCE_CODE SYSRES_CONST_GROUPS_REQUISITE_CODE SYSRES_CONST_HIDDEN_MODE_NAME SYSRES_CONST_HIGH_LVL_REQUISITE_CODE SYSRES_CONST_HISTORY_ACTION_CREATE_CODE SYSRES_CONST_HISTORY_ACTION_DELETE_CODE SYSRES_CONST_HISTORY_ACTION_EDIT_CODE SYSRES_CONST_HOUR_CHAR SYSRES_CONST_ID_REQUISITE_CODE SYSRES_CONST_IDSPS_REQUISITE_CODE SYSRES_CONST_IMAGE_MODE_COLOR SYSRES_CONST_IMAGE_MODE_GREYSCALE SYSRES_CONST_IMAGE_MODE_MONOCHROME SYSRES_CONST_IMPORTANCE_HIGH SYSRES_CONST_IMPORTANCE_LOW SYSRES_CONST_IMPORTANCE_NORMAL SYSRES_CONST_IN_DESIGN_VERSION_STATE_PICK_VALUE SYSRES_CONST_INCOMING_WORK_RULE_TYPE_CODE SYSRES_CONST_INT_REQUISITE SYSRES_CONST_INT_REQUISITE_TYPE SYSRES_CONST_INTEGER_NUMBER_FORMAT_CHAR SYSRES_CONST_INTEGER_TYPE_CHAR SYSRES_CONST_IS_GENERATED_REQUISITE_NEGATIVE_VALUE SYSRES_CONST_IS_PUBLIC_ROLE_REQUISITE_CODE SYSRES_CONST_IS_REMOTE_USER_NEGATIVE_VALUE SYSRES_CONST_IS_REMOTE_USER_POSITIVE_VALUE SYSRES_CONST_IS_STORED_REQUISITE_NEGATIVE_VALUE SYSRES_CONST_IS_STORED_REQUISITE_STORED_VALUE SYSRES_CONST_ITALIC_LIFE_CYCLE_STAGE_DRAW_STYLE SYSRES_CONST_JOB_BLOCK_DESCRIPTION SYSRES_CONST_JOB_KIND_CONTROL_JOB SYSRES_CONST_JOB_KIND_JOB SYSRES_CONST_JOB_KIND_NOTICE SYSRES_CONST_JOB_STATE_ABORTED SYSRES_CONST_JOB_STATE_COMPLETE SYSRES_CONST_JOB_STATE_WORKING SYSRES_CONST_KIND_REQUISITE_CODE SYSRES_CONST_KIND_REQUISITE_NAME SYSRES_CONST_KINDS_CREATE_SHADOW_COPIES_REQUISITE_CODE SYSRES_CONST_KINDS_DEFAULT_EDOC_LIFE_STAGE_REQUISITE_CODE SYSRES_CONST_KINDS_EDOC_ALL_TEPLATES_ALLOWED_REQUISITE_CODE SYSRES_CONST_KINDS_EDOC_ALLOW_LIFE_CYCLE_STAGE_CHANGING_REQUISITE_CODE SYSRES_CONST_KINDS_EDOC_ALLOW_MULTIPLE_ACTIVE_VERSIONS_REQUISITE_CODE SYSRES_CONST_KINDS_EDOC_SHARE_ACCES_RIGHTS_BY_DEFAULT_CODE SYSRES_CONST_KINDS_EDOC_TEMPLATE_REQUISITE_CODE SYSRES_CONST_KINDS_EDOC_TYPE_REQUISITE_CODE SYSRES_CONST_KINDS_SIGNERS_REQUISITES_CODE SYSRES_CONST_KOD_INPUT_TYPE SYSRES_CONST_LAST_UPDATE_DATE_REQUISITE_CODE SYSRES_CONST_LIFE_CYCLE_START_STAGE_REQUISITE_CODE SYSRES_CONST_LILAC_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_LINK_OBJECT_KIND_COMPONENT SYSRES_CONST_LINK_OBJECT_KIND_DOCUMENT SYSRES_CONST_LINK_OBJECT_KIND_EDOC SYSRES_CONST_LINK_OBJECT_KIND_FOLDER SYSRES_CONST_LINK_OBJECT_KIND_JOB SYSRES_CONST_LINK_OBJECT_KIND_REFERENCE SYSRES_CONST_LINK_OBJECT_KIND_TASK SYSRES_CONST_LINK_REF_TYPE_REQUISITE_CODE SYSRES_CONST_LIST_REFERENCE_MODE_NAME SYSRES_CONST_LOCALIZATION_DICTIONARY_MAIN_VIEW_CODE SYSRES_CONST_MAIN_VIEW_CODE SYSRES_CONST_MANUAL_ENUM_METHOD_FLAG SYSRES_CONST_MASTER_COMP_TYPE_REQUISITE_CODE SYSRES_CONST_MASTER_TABLE_REC_ID_REQUISITE_CODE SYSRES_CONST_MAXIMIZED_MODE_NAME SYSRES_CONST_ME_VALUE SYSRES_CONST_MESSAGE_ATTENTION_CAPTION SYSRES_CONST_MESSAGE_CONFIRMATION_CAPTION SYSRES_CONST_MESSAGE_ERROR_CAPTION SYSRES_CONST_MESSAGE_INFORMATION_CAPTION SYSRES_CONST_MINIMIZED_MODE_NAME SYSRES_CONST_MINUTE_CHAR SYSRES_CONST_MODULE_REQUISITE_CODE SYSRES_CONST_MONITORING_BLOCK_DESCRIPTION SYSRES_CONST_MONTH_FORMAT_VALUE SYSRES_CONST_NAME_LOCALIZE_ID_REQUISITE_CODE SYSRES_CONST_NAME_REQUISITE_CODE SYSRES_CONST_NAME_SINGULAR_REQUISITE_CODE SYSRES_CONST_NAMEAN_INPUT_TYPE SYSRES_CONST_NEGATIVE_PICK_VALUE SYSRES_CONST_NEGATIVE_VALUE SYSRES_CONST_NO SYSRES_CONST_NO_PICK_VALUE SYSRES_CONST_NO_SIGNATURE_REQUISITE_CODE SYSRES_CONST_NO_VALUE SYSRES_CONST_NONE_ACCESS_RIGHTS_TYPE_CODE SYSRES_CONST_NONOPERATING_RECORD_FLAG_VALUE SYSRES_CONST_NONOPERATING_RECORD_FLAG_VALUE_MASCULINE SYSRES_CONST_NORMAL_ACCESS_RIGHTS_TYPE_CODE SYSRES_CONST_NORMAL_LIFE_CYCLE_STAGE_DRAW_STYLE SYSRES_CONST_NORMAL_MODE_NAME SYSRES_CONST_NOT_ALLOWED_ACCESS_TYPE_CODE SYSRES_CONST_NOT_ALLOWED_ACCESS_TYPE_NAME SYSRES_CONST_NOTE_REQUISITE_CODE SYSRES_CONST_NOTICE_BLOCK_DESCRIPTION SYSRES_CONST_NUM_REQUISITE SYSRES_CONST_NUM_STR_REQUISITE_CODE SYSRES_CONST_NUMERATION_AUTO_NOT_STRONG SYSRES_CONST_NUMERATION_AUTO_STRONG SYSRES_CONST_NUMERATION_FROM_DICTONARY SYSRES_CONST_NUMERATION_MANUAL SYSRES_CONST_NUMERIC_TYPE_CHAR SYSRES_CONST_NUMREQ_REQUISITE_CODE SYSRES_CONST_OBSOLETE_VERSION_STATE_PICK_VALUE SYSRES_CONST_OPERATING_RECORD_FLAG_VALUE SYSRES_CONST_OPERATING_RECORD_FLAG_VALUE_CODE SYSRES_CONST_OPERATING_RECORD_FLAG_VALUE_FEMININE SYSRES_CONST_OPERATING_RECORD_FLAG_VALUE_MASCULINE SYSRES_CONST_OPTIONAL_FORM_COMP_REQCODE_PREFIX SYSRES_CONST_ORANGE_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_ORIGINALREF_REQUISITE_CODE SYSRES_CONST_OURFIRM_REF_CODE SYSRES_CONST_OURFIRM_REQUISITE_CODE SYSRES_CONST_OURFIRM_VAR SYSRES_CONST_OUTGOING_WORK_RULE_TYPE_CODE SYSRES_CONST_PICK_NEGATIVE_RESULT SYSRES_CONST_PICK_POSITIVE_RESULT SYSRES_CONST_PICK_REQUISITE SYSRES_CONST_PICK_REQUISITE_TYPE SYSRES_CONST_PICK_TYPE_CHAR SYSRES_CONST_PLAN_STATUS_REQUISITE_CODE SYSRES_CONST_PLATFORM_VERSION_COMMENT SYSRES_CONST_PLUGINS_SETTINGS_DESCRIPTION_REQUISITE_CODE SYSRES_CONST_POSITIVE_PICK_VALUE SYSRES_CONST_POWER_TO_CREATE_ACTION_CODE SYSRES_CONST_POWER_TO_SIGN_ACTION_CODE SYSRES_CONST_PRIORITY_REQUISITE_CODE SYSRES_CONST_QUALIFIED_TASK_TYPE SYSRES_CONST_QUALIFIED_TASK_TYPE_CODE SYSRES_CONST_RECSTAT_REQUISITE_CODE SYSRES_CONST_RED_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_REF_ID_T_REF_TYPE_REQUISITE_CODE SYSRES_CONST_REF_REQUISITE SYSRES_CONST_REF_REQUISITE_TYPE SYSRES_CONST_REF_REQUISITES_REFERENCE_CODE_SELECTED_REQUISITE SYSRES_CONST_REFERENCE_RECORD_HISTORY_CREATE_ACTION_CODE SYSRES_CONST_REFERENCE_RECORD_HISTORY_DELETE_ACTION_CODE SYSRES_CONST_REFERENCE_RECORD_HISTORY_MODIFY_ACTION_CODE SYSRES_CONST_REFERENCE_TYPE_CHAR SYSRES_CONST_REFERENCE_TYPE_REQUISITE_NAME SYSRES_CONST_REFERENCES_ADD_PARAMS_REQUISITE_CODE SYSRES_CONST_REFERENCES_DISPLAY_REQUISITE_REQUISITE_CODE SYSRES_CONST_REMOTE_SERVER_STATUS_WORKING SYSRES_CONST_REMOTE_SERVER_TYPE_MAIN SYSRES_CONST_REMOTE_SERVER_TYPE_SECONDARY SYSRES_CONST_REMOTE_USER_FLAG_VALUE_CODE SYSRES_CONST_REPORT_APP_EDITOR_INTERNAL SYSRES_CONST_REPORT_BASE_REPORT_ID_REQUISITE_CODE SYSRES_CONST_REPORT_BASE_REPORT_REQUISITE_CODE SYSRES_CONST_REPORT_SCRIPT_REQUISITE_CODE SYSRES_CONST_REPORT_TEMPLATE_REQUISITE_CODE SYSRES_CONST_REPORT_VIEWER_CODE_REQUISITE_CODE SYSRES_CONST_REQ_ALLOW_COMPONENT_DEFAULT_VALUE SYSRES_CONST_REQ_ALLOW_RECORD_DEFAULT_VALUE SYSRES_CONST_REQ_ALLOW_SERVER_COMPONENT_DEFAULT_VALUE SYSRES_CONST_REQ_MODE_AVAILABLE_CODE SYSRES_CONST_REQ_MODE_EDIT_CODE SYSRES_CONST_REQ_MODE_HIDDEN_CODE SYSRES_CONST_REQ_MODE_NOT_AVAILABLE_CODE SYSRES_CONST_REQ_MODE_VIEW_CODE SYSRES_CONST_REQ_NUMBER_REQUISITE_CODE SYSRES_CONST_REQ_SECTION_VALUE SYSRES_CONST_REQ_TYPE_VALUE SYSRES_CONST_REQUISITE_FORMAT_BY_UNIT SYSRES_CONST_REQUISITE_FORMAT_DATE_FULL SYSRES_CONST_REQUISITE_FORMAT_DATE_TIME SYSRES_CONST_REQUISITE_FORMAT_LEFT SYSRES_CONST_REQUISITE_FORMAT_RIGHT SYSRES_CONST_REQUISITE_FORMAT_WITHOUT_UNIT SYSRES_CONST_REQUISITE_NUMBER_REQUISITE_CODE SYSRES_CONST_REQUISITE_SECTION_ACTIONS SYSRES_CONST_REQUISITE_SECTION_BUTTON SYSRES_CONST_REQUISITE_SECTION_BUTTONS SYSRES_CONST_REQUISITE_SECTION_CARD SYSRES_CONST_REQUISITE_SECTION_TABLE SYSRES_CONST_REQUISITE_SECTION_TABLE10 SYSRES_CONST_REQUISITE_SECTION_TABLE11 SYSRES_CONST_REQUISITE_SECTION_TABLE12 SYSRES_CONST_REQUISITE_SECTION_TABLE13 SYSRES_CONST_REQUISITE_SECTION_TABLE14 SYSRES_CONST_REQUISITE_SECTION_TABLE15 SYSRES_CONST_REQUISITE_SECTION_TABLE16 SYSRES_CONST_REQUISITE_SECTION_TABLE17 SYSRES_CONST_REQUISITE_SECTION_TABLE18 SYSRES_CONST_REQUISITE_SECTION_TABLE19 SYSRES_CONST_REQUISITE_SECTION_TABLE2 SYSRES_CONST_REQUISITE_SECTION_TABLE20 SYSRES_CONST_REQUISITE_SECTION_TABLE21 SYSRES_CONST_REQUISITE_SECTION_TABLE22 SYSRES_CONST_REQUISITE_SECTION_TABLE23 SYSRES_CONST_REQUISITE_SECTION_TABLE24 SYSRES_CONST_REQUISITE_SECTION_TABLE3 SYSRES_CONST_REQUISITE_SECTION_TABLE4 SYSRES_CONST_REQUISITE_SECTION_TABLE5 SYSRES_CONST_REQUISITE_SECTION_TABLE6 SYSRES_CONST_REQUISITE_SECTION_TABLE7 SYSRES_CONST_REQUISITE_SECTION_TABLE8 SYSRES_CONST_REQUISITE_SECTION_TABLE9 SYSRES_CONST_REQUISITES_PSEUDOREFERENCE_REQUISITE_NUMBER_REQUISITE_CODE SYSRES_CONST_RIGHT_ALIGNMENT_CODE SYSRES_CONST_ROLES_REFERENCE_CODE SYSRES_CONST_ROUTE_STEP_AFTER_RUS SYSRES_CONST_ROUTE_STEP_AND_CONDITION_RUS SYSRES_CONST_ROUTE_STEP_OR_CONDITION_RUS SYSRES_CONST_ROUTE_TYPE_COMPLEX SYSRES_CONST_ROUTE_TYPE_PARALLEL SYSRES_CONST_ROUTE_TYPE_SERIAL SYSRES_CONST_SBDATASETDESC_NEGATIVE_VALUE SYSRES_CONST_SBDATASETDESC_POSITIVE_VALUE SYSRES_CONST_SBVIEWSDESC_POSITIVE_VALUE SYSRES_CONST_SCRIPT_BLOCK_DESCRIPTION SYSRES_CONST_SEARCH_BY_TEXT_REQUISITE_CODE SYSRES_CONST_SEARCHES_COMPONENT_CONTENT SYSRES_CONST_SEARCHES_CRITERIA_ACTION_NAME SYSRES_CONST_SEARCHES_EDOC_CONTENT SYSRES_CONST_SEARCHES_FOLDER_CONTENT SYSRES_CONST_SEARCHES_JOB_CONTENT SYSRES_CONST_SEARCHES_REFERENCE_CODE SYSRES_CONST_SEARCHES_TASK_CONTENT SYSRES_CONST_SECOND_CHAR SYSRES_CONST_SECTION_REQUISITE_ACTIONS_VALUE SYSRES_CONST_SECTION_REQUISITE_CARD_VALUE SYSRES_CONST_SECTION_REQUISITE_CODE SYSRES_CONST_SECTION_REQUISITE_DETAIL_1_VALUE SYSRES_CONST_SECTION_REQUISITE_DETAIL_2_VALUE SYSRES_CONST_SECTION_REQUISITE_DETAIL_3_VALUE SYSRES_CONST_SECTION_REQUISITE_DETAIL_4_VALUE SYSRES_CONST_SECTION_REQUISITE_DETAIL_5_VALUE SYSRES_CONST_SECTION_REQUISITE_DETAIL_6_VALUE SYSRES_CONST_SELECT_REFERENCE_MODE_NAME SYSRES_CONST_SELECT_TYPE_SELECTABLE SYSRES_CONST_SELECT_TYPE_SELECTABLE_ONLY_CHILD SYSRES_CONST_SELECT_TYPE_SELECTABLE_WITH_CHILD SYSRES_CONST_SELECT_TYPE_UNSLECTABLE SYSRES_CONST_SERVER_TYPE_MAIN SYSRES_CONST_SERVICE_USER_CATEGORY_FIELD_VALUE SYSRES_CONST_SETTINGS_USER_REQUISITE_CODE SYSRES_CONST_SIGNATURE_AND_ENCODE_CERTIFICATE_TYPE_CODE SYSRES_CONST_SIGNATURE_CERTIFICATE_TYPE_CODE SYSRES_CONST_SINGULAR_TITLE_REQUISITE_CODE SYSRES_CONST_SQL_SERVER_AUTHENTIFICATION_FLAG_VALUE_CODE SYSRES_CONST_SQL_SERVER_ENCODE_AUTHENTIFICATION_FLAG_VALUE_CODE SYSRES_CONST_STANDART_ROUTE_REFERENCE_CODE SYSRES_CONST_STANDART_ROUTE_REFERENCE_COMMENT_REQUISITE_CODE SYSRES_CONST_STANDART_ROUTES_GROUPS_REFERENCE_CODE SYSRES_CONST_STATE_REQ_NAME SYSRES_CONST_STATE_REQUISITE_ACTIVE_VALUE SYSRES_CONST_STATE_REQUISITE_CLOSED_VALUE SYSRES_CONST_STATE_REQUISITE_CODE SYSRES_CONST_STATIC_ROLE_TYPE_CODE SYSRES_CONST_STATUS_PLAN_DEFAULT_VALUE SYSRES_CONST_STATUS_VALUE_AUTOCLEANING SYSRES_CONST_STATUS_VALUE_BLUE_SQUARE SYSRES_CONST_STATUS_VALUE_COMPLETE SYSRES_CONST_STATUS_VALUE_GREEN_SQUARE SYSRES_CONST_STATUS_VALUE_ORANGE_SQUARE SYSRES_CONST_STATUS_VALUE_PURPLE_SQUARE SYSRES_CONST_STATUS_VALUE_RED_SQUARE SYSRES_CONST_STATUS_VALUE_SUSPEND SYSRES_CONST_STATUS_VALUE_YELLOW_SQUARE SYSRES_CONST_STDROUTE_SHOW_TO_USERS_REQUISITE_CODE SYSRES_CONST_STORAGE_TYPE_FILE SYSRES_CONST_STORAGE_TYPE_SQL_SERVER SYSRES_CONST_STR_REQUISITE SYSRES_CONST_STRIKEOUT_LIFE_CYCLE_STAGE_DRAW_STYLE SYSRES_CONST_STRING_FORMAT_LEFT_ALIGN_CHAR SYSRES_CONST_STRING_FORMAT_RIGHT_ALIGN_CHAR SYSRES_CONST_STRING_REQUISITE_CODE SYSRES_CONST_STRING_REQUISITE_TYPE SYSRES_CONST_STRING_TYPE_CHAR SYSRES_CONST_SUBSTITUTES_PSEUDOREFERENCE_CODE SYSRES_CONST_SUBTASK_BLOCK_DESCRIPTION SYSRES_CONST_SYSTEM_SETTING_CURRENT_USER_PARAM_VALUE SYSRES_CONST_SYSTEM_SETTING_EMPTY_VALUE_PARAM_VALUE SYSRES_CONST_SYSTEM_VERSION_COMMENT SYSRES_CONST_TASK_ACCESS_TYPE_ALL SYSRES_CONST_TASK_ACCESS_TYPE_ALL_MEMBERS SYSRES_CONST_TASK_ACCESS_TYPE_MANUAL SYSRES_CONST_TASK_ENCODE_TYPE_CERTIFICATION SYSRES_CONST_TASK_ENCODE_TYPE_CERTIFICATION_AND_PASSWORD SYSRES_CONST_TASK_ENCODE_TYPE_NONE SYSRES_CONST_TASK_ENCODE_TYPE_PASSWORD SYSRES_CONST_TASK_ROUTE_ALL_CONDITION SYSRES_CONST_TASK_ROUTE_AND_CONDITION SYSRES_CONST_TASK_ROUTE_OR_CONDITION SYSRES_CONST_TASK_STATE_ABORTED SYSRES_CONST_TASK_STATE_COMPLETE SYSRES_CONST_TASK_STATE_CONTINUED SYSRES_CONST_TASK_STATE_CONTROL SYSRES_CONST_TASK_STATE_INIT SYSRES_CONST_TASK_STATE_WORKING SYSRES_CONST_TASK_TITLE SYSRES_CONST_TASK_TYPES_GROUPS_REFERENCE_CODE SYSRES_CONST_TASK_TYPES_REFERENCE_CODE SYSRES_CONST_TEMPLATES_REFERENCE_CODE SYSRES_CONST_TEST_DATE_REQUISITE_NAME SYSRES_CONST_TEST_DEV_DATABASE_NAME SYSRES_CONST_TEST_DEV_SYSTEM_CODE SYSRES_CONST_TEST_EDMS_DATABASE_NAME SYSRES_CONST_TEST_EDMS_MAIN_CODE SYSRES_CONST_TEST_EDMS_MAIN_DB_NAME SYSRES_CONST_TEST_EDMS_SECOND_CODE SYSRES_CONST_TEST_EDMS_SECOND_DB_NAME SYSRES_CONST_TEST_EDMS_SYSTEM_CODE SYSRES_CONST_TEST_NUMERIC_REQUISITE_NAME SYSRES_CONST_TEXT_REQUISITE SYSRES_CONST_TEXT_REQUISITE_CODE SYSRES_CONST_TEXT_REQUISITE_TYPE SYSRES_CONST_TEXT_TYPE_CHAR SYSRES_CONST_TYPE_CODE_REQUISITE_CODE SYSRES_CONST_TYPE_REQUISITE_CODE SYSRES_CONST_UNDEFINED_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_UNITS_SECTION_ID_REQUISITE_CODE SYSRES_CONST_UNITS_SECTION_REQUISITE_CODE SYSRES_CONST_UNOPERATING_RECORD_FLAG_VALUE_CODE SYSRES_CONST_UNSTORED_DATA_REQUISITE_CODE SYSRES_CONST_UNSTORED_DATA_REQUISITE_NAME SYSRES_CONST_USE_ACCESS_TYPE_CODE SYSRES_CONST_USE_ACCESS_TYPE_NAME SYSRES_CONST_USER_ACCOUNT_TYPE_VALUE_CODE SYSRES_CONST_USER_ADDITIONAL_INFORMATION_REQUISITE_CODE SYSRES_CONST_USER_AND_GROUP_ID_FROM_PSEUDOREFERENCE_REQUISITE_CODE SYSRES_CONST_USER_CATEGORY_NORMAL SYSRES_CONST_USER_CERTIFICATE_REQUISITE_CODE SYSRES_CONST_USER_CERTIFICATE_STATE_REQUISITE_CODE SYSRES_CONST_USER_CERTIFICATE_SUBJECT_NAME_REQUISITE_CODE SYSRES_CONST_USER_CERTIFICATE_THUMBPRINT_REQUISITE_CODE SYSRES_CONST_USER_COMMON_CATEGORY SYSRES_CONST_USER_COMMON_CATEGORY_CODE SYSRES_CONST_USER_FULL_NAME_REQUISITE_CODE SYSRES_CONST_USER_GROUP_TYPE_REQUISITE_CODE SYSRES_CONST_USER_LOGIN_REQUISITE_CODE SYSRES_CONST_USER_REMOTE_CONTROLLER_REQUISITE_CODE SYSRES_CONST_USER_REMOTE_SYSTEM_REQUISITE_CODE SYSRES_CONST_USER_RIGHTS_T_REQUISITE_CODE SYSRES_CONST_USER_SERVER_NAME_REQUISITE_CODE SYSRES_CONST_USER_SERVICE_CATEGORY SYSRES_CONST_USER_SERVICE_CATEGORY_CODE SYSRES_CONST_USER_STATUS_ADMINISTRATOR_CODE SYSRES_CONST_USER_STATUS_ADMINISTRATOR_NAME SYSRES_CONST_USER_STATUS_DEVELOPER_CODE SYSRES_CONST_USER_STATUS_DEVELOPER_NAME SYSRES_CONST_USER_STATUS_DISABLED_CODE SYSRES_CONST_USER_STATUS_DISABLED_NAME SYSRES_CONST_USER_STATUS_SYSTEM_DEVELOPER_CODE SYSRES_CONST_USER_STATUS_USER_CODE SYSRES_CONST_USER_STATUS_USER_NAME SYSRES_CONST_USER_STATUS_USER_NAME_DEPRECATED SYSRES_CONST_USER_TYPE_FIELD_VALUE_USER SYSRES_CONST_USER_TYPE_REQUISITE_CODE SYSRES_CONST_USERS_CONTROLLER_REQUISITE_CODE SYSRES_CONST_USERS_IS_MAIN_SERVER_REQUISITE_CODE SYSRES_CONST_USERS_REFERENCE_CODE SYSRES_CONST_USERS_REGISTRATION_CERTIFICATES_ACTION_NAME SYSRES_CONST_USERS_REQUISITE_CODE SYSRES_CONST_USERS_SYSTEM_REQUISITE_CODE SYSRES_CONST_USERS_USER_ACCESS_RIGHTS_TYPR_REQUISITE_CODE SYSRES_CONST_USERS_USER_AUTHENTICATION_REQUISITE_CODE SYSRES_CONST_USERS_USER_COMPONENT_REQUISITE_CODE SYSRES_CONST_USERS_USER_GROUP_REQUISITE_CODE SYSRES_CONST_USERS_VIEW_CERTIFICATES_ACTION_NAME SYSRES_CONST_VIEW_DEFAULT_CODE SYSRES_CONST_VIEW_DEFAULT_NAME SYSRES_CONST_VIEWER_REQUISITE_CODE SYSRES_CONST_WAITING_BLOCK_DESCRIPTION SYSRES_CONST_WIZARD_FORM_LABEL_TEST_STRING SYSRES_CONST_WIZARD_QUERY_PARAM_HEIGHT_ETALON_STRING SYSRES_CONST_WIZARD_REFERENCE_COMMENT_REQUISITE_CODE SYSRES_CONST_WORK_RULES_DESCRIPTION_REQUISITE_CODE SYSRES_CONST_WORK_TIME_CALENDAR_REFERENCE_CODE SYSRES_CONST_WORK_WORKFLOW_HARD_ROUTE_TYPE_VALUE SYSRES_CONST_WORK_WORKFLOW_HARD_ROUTE_TYPE_VALUE_CODE SYSRES_CONST_WORK_WORKFLOW_HARD_ROUTE_TYPE_VALUE_CODE_RUS SYSRES_CONST_WORK_WORKFLOW_SOFT_ROUTE_TYPE_VALUE_CODE_RUS SYSRES_CONST_WORKFLOW_ROUTE_TYPR_HARD SYSRES_CONST_WORKFLOW_ROUTE_TYPR_SOFT SYSRES_CONST_XML_ENCODING SYSRES_CONST_XREC_STAT_REQUISITE_CODE SYSRES_CONST_XRECID_FIELD_NAME SYSRES_CONST_YES SYSRES_CONST_YES_NO_2_REQUISITE_CODE SYSRES_CONST_YES_NO_REQUISITE_CODE SYSRES_CONST_YES_NO_T_REF_TYPE_REQUISITE_CODE SYSRES_CONST_YES_PICK_VALUE SYSRES_CONST_YES_VALUE CR FALSE nil NO_VALUE NULL TAB TRUE YES_VALUE ADMINISTRATORS_GROUP_NAME CUSTOMIZERS_GROUP_NAME DEVELOPERS_GROUP_NAME SERVICE_USERS_GROUP_NAME DECISION_BLOCK_FIRST_OPERAND_PROPERTY DECISION_BLOCK_NAME_PROPERTY DECISION_BLOCK_OPERATION_PROPERTY DECISION_BLOCK_RESULT_TYPE_PROPERTY DECISION_BLOCK_SECOND_OPERAND_PROPERTY ANY_FILE_EXTENTION COMPRESSED_DOCUMENT_EXTENSION EXTENDED_DOCUMENT_EXTENSION SHORT_COMPRESSED_DOCUMENT_EXTENSION SHORT_EXTENDED_DOCUMENT_EXTENSION JOB_BLOCK_ABORT_DEADLINE_PROPERTY JOB_BLOCK_AFTER_FINISH_EVENT JOB_BLOCK_AFTER_QUERY_PARAMETERS_EVENT JOB_BLOCK_ATTACHMENT_PROPERTY JOB_BLOCK_ATTACHMENTS_RIGHTS_GROUP_PROPERTY JOB_BLOCK_ATTACHMENTS_RIGHTS_TYPE_PROPERTY JOB_BLOCK_BEFORE_QUERY_PARAMETERS_EVENT JOB_BLOCK_BEFORE_START_EVENT JOB_BLOCK_CREATED_JOBS_PROPERTY JOB_BLOCK_DEADLINE_PROPERTY JOB_BLOCK_EXECUTION_RESULTS_PROPERTY JOB_BLOCK_IS_PARALLEL_PROPERTY JOB_BLOCK_IS_RELATIVE_ABORT_DEADLINE_PROPERTY JOB_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY JOB_BLOCK_JOB_TEXT_PROPERTY JOB_BLOCK_NAME_PROPERTY JOB_BLOCK_NEED_SIGN_ON_PERFORM_PROPERTY JOB_BLOCK_PERFORMER_PROPERTY JOB_BLOCK_RELATIVE_ABORT_DEADLINE_TYPE_PROPERTY JOB_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY JOB_BLOCK_SUBJECT_PROPERTY ENGLISH_LANGUAGE_CODE RUSSIAN_LANGUAGE_CODE smHidden smMaximized smMinimized smNormal wmNo wmYes COMPONENT_TOKEN_LINK_KIND DOCUMENT_LINK_KIND EDOCUMENT_LINK_KIND FOLDER_LINK_KIND JOB_LINK_KIND REFERENCE_LINK_KIND TASK_LINK_KIND COMPONENT_TOKEN_LOCK_TYPE EDOCUMENT_VERSION_LOCK_TYPE MONITOR_BLOCK_AFTER_FINISH_EVENT MONITOR_BLOCK_BEFORE_START_EVENT MONITOR_BLOCK_DEADLINE_PROPERTY MONITOR_BLOCK_INTERVAL_PROPERTY MONITOR_BLOCK_INTERVAL_TYPE_PROPERTY MONITOR_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY MONITOR_BLOCK_NAME_PROPERTY MONITOR_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY MONITOR_BLOCK_SEARCH_SCRIPT_PROPERTY NOTICE_BLOCK_AFTER_FINISH_EVENT NOTICE_BLOCK_ATTACHMENT_PROPERTY NOTICE_BLOCK_ATTACHMENTS_RIGHTS_GROUP_PROPERTY NOTICE_BLOCK_ATTACHMENTS_RIGHTS_TYPE_PROPERTY NOTICE_BLOCK_BEFORE_START_EVENT NOTICE_BLOCK_CREATED_NOTICES_PROPERTY NOTICE_BLOCK_DEADLINE_PROPERTY NOTICE_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY NOTICE_BLOCK_NAME_PROPERTY NOTICE_BLOCK_NOTICE_TEXT_PROPERTY NOTICE_BLOCK_PERFORMER_PROPERTY NOTICE_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY NOTICE_BLOCK_SUBJECT_PROPERTY dseAfterCancel dseAfterClose dseAfterDelete dseAfterDeleteOutOfTransaction dseAfterInsert dseAfterOpen dseAfterScroll dseAfterUpdate dseAfterUpdateOutOfTransaction dseBeforeCancel dseBeforeClose dseBeforeDelete dseBeforeDetailUpdate dseBeforeInsert dseBeforeOpen dseBeforeUpdate dseOnAnyRequisiteChange dseOnCloseRecord dseOnDeleteError dseOnOpenRecord dseOnPrepareUpdate dseOnUpdateError dseOnUpdateRatifiedRecord dseOnValidDelete dseOnValidUpdate reOnChange reOnChangeValues SELECTION_BEGIN_ROUTE_EVENT SELECTION_END_ROUTE_EVENT CURRENT_PERIOD_IS_REQUIRED PREVIOUS_CARD_TYPE_NAME SHOW_RECORD_PROPERTIES_FORM ACCESS_RIGHTS_SETTING_DIALOG_CODE ADMINISTRATOR_USER_CODE ANALYTIC_REPORT_TYPE asrtHideLocal asrtHideRemote CALCULATED_ROLE_TYPE_CODE COMPONENTS_REFERENCE_DEVELOPER_VIEW_CODE DCTS_TEST_PROTOCOLS_FOLDER_PATH E_EDOC_VERSION_ALREADY_APPROVINGLY_SIGNED E_EDOC_VERSION_ALREADY_APPROVINGLY_SIGNED_BY_USER E_EDOC_VERSION_ALREDY_SIGNED E_EDOC_VERSION_ALREDY_SIGNED_BY_USER EDOC_TYPES_CODE_REQUISITE_FIELD_NAME EDOCUMENTS_ALIAS_NAME FILES_FOLDER_PATH FILTER_OPERANDS_DELIMITER FILTER_OPERATIONS_DELIMITER FORMCARD_NAME FORMLIST_NAME GET_EXTENDED_DOCUMENT_EXTENSION_CREATION_MODE GET_EXTENDED_DOCUMENT_EXTENSION_IMPORT_MODE INTEGRATED_REPORT_TYPE IS_BUILDER_APPLICATION_ROLE IS_BUILDER_APPLICATION_ROLE2 IS_BUILDER_USERS ISBSYSDEV LOG_FOLDER_PATH mbCancel mbNo mbNoToAll mbOK mbYes mbYesToAll MEMORY_DATASET_DESRIPTIONS_FILENAME mrNo mrNoToAll mrYes mrYesToAll MULTIPLE_SELECT_DIALOG_CODE NONOPERATING_RECORD_FLAG_FEMININE NONOPERATING_RECORD_FLAG_MASCULINE OPERATING_RECORD_FLAG_FEMININE OPERATING_RECORD_FLAG_MASCULINE PROFILING_SETTINGS_COMMON_SETTINGS_CODE_VALUE PROGRAM_INITIATED_LOOKUP_ACTION ratDelete ratEdit ratInsert REPORT_TYPE REQUIRED_PICK_VALUES_VARIABLE rmCard rmList SBRTE_PROGID_DEV SBRTE_PROGID_RELEASE STATIC_ROLE_TYPE_CODE SUPPRESS_EMPTY_TEMPLATE_CREATION SYSTEM_USER_CODE UPDATE_DIALOG_DATASET USED_IN_OBJECT_HINT_PARAM USER_INITIATED_LOOKUP_ACTION USER_NAME_FORMAT USER_SELECTION_RESTRICTIONS WORKFLOW_TEST_PROTOCOLS_FOLDER_PATH ELS_SUBTYPE_CONTROL_NAME ELS_FOLDER_KIND_CONTROL_NAME REPEAT_PROCESS_CURRENT_OBJECT_EXCEPTION_NAME PRIVILEGE_COMPONENT_FULL_ACCESS PRIVILEGE_DEVELOPMENT_EXPORT PRIVILEGE_DEVELOPMENT_IMPORT PRIVILEGE_DOCUMENT_DELETE PRIVILEGE_ESD PRIVILEGE_FOLDER_DELETE PRIVILEGE_MANAGE_ACCESS_RIGHTS PRIVILEGE_MANAGE_REPLICATION PRIVILEGE_MANAGE_SESSION_SERVER PRIVILEGE_OBJECT_FULL_ACCESS PRIVILEGE_OBJECT_VIEW PRIVILEGE_RESERVE_LICENSE PRIVILEGE_SYSTEM_CUSTOMIZE PRIVILEGE_SYSTEM_DEVELOP PRIVILEGE_SYSTEM_INSTALL PRIVILEGE_TASK_DELETE PRIVILEGE_USER_PLUGIN_SETTINGS_CUSTOMIZE PRIVILEGES_PSEUDOREFERENCE_CODE ACCESS_TYPES_PSEUDOREFERENCE_CODE ALL_AVAILABLE_COMPONENTS_PSEUDOREFERENCE_CODE ALL_AVAILABLE_PRIVILEGES_PSEUDOREFERENCE_CODE ALL_REPLICATE_COMPONENTS_PSEUDOREFERENCE_CODE AVAILABLE_DEVELOPERS_COMPONENTS_PSEUDOREFERENCE_CODE COMPONENTS_PSEUDOREFERENCE_CODE FILTRATER_SETTINGS_CONFLICTS_PSEUDOREFERENCE_CODE GROUPS_PSEUDOREFERENCE_CODE RECEIVE_PROTOCOL_PSEUDOREFERENCE_CODE REFERENCE_REQUISITE_PSEUDOREFERENCE_CODE REFERENCE_REQUISITES_PSEUDOREFERENCE_CODE REFTYPES_PSEUDOREFERENCE_CODE REPLICATION_SEANCES_DIARY_PSEUDOREFERENCE_CODE SEND_PROTOCOL_PSEUDOREFERENCE_CODE SUBSTITUTES_PSEUDOREFERENCE_CODE SYSTEM_SETTINGS_PSEUDOREFERENCE_CODE UNITS_PSEUDOREFERENCE_CODE USERS_PSEUDOREFERENCE_CODE VIEWERS_PSEUDOREFERENCE_CODE CERTIFICATE_TYPE_ENCRYPT CERTIFICATE_TYPE_SIGN CERTIFICATE_TYPE_SIGN_AND_ENCRYPT STORAGE_TYPE_FILE STORAGE_TYPE_NAS_CIFS STORAGE_TYPE_SAPERION STORAGE_TYPE_SQL_SERVER COMPTYPE2_REQUISITE_DOCUMENTS_VALUE COMPTYPE2_REQUISITE_TASKS_VALUE COMPTYPE2_REQUISITE_FOLDERS_VALUE COMPTYPE2_REQUISITE_REFERENCES_VALUE SYSREQ_CODE SYSREQ_COMPTYPE2 SYSREQ_CONST_AVAILABLE_FOR_WEB SYSREQ_CONST_COMMON_CODE SYSREQ_CONST_COMMON_VALUE SYSREQ_CONST_FIRM_CODE SYSREQ_CONST_FIRM_STATUS SYSREQ_CONST_FIRM_VALUE SYSREQ_CONST_SERVER_STATUS SYSREQ_CONTENTS SYSREQ_DATE_OPEN SYSREQ_DATE_CLOSE SYSREQ_DESCRIPTION SYSREQ_DESCRIPTION_LOCALIZE_ID SYSREQ_DOUBLE SYSREQ_EDOC_ACCESS_TYPE SYSREQ_EDOC_AUTHOR SYSREQ_EDOC_CREATED SYSREQ_EDOC_DELEGATE_RIGHTS_REQUISITE_CODE SYSREQ_EDOC_EDITOR SYSREQ_EDOC_ENCODE_TYPE SYSREQ_EDOC_ENCRYPTION_PLUGIN_NAME SYSREQ_EDOC_ENCRYPTION_PLUGIN_VERSION SYSREQ_EDOC_EXPORT_DATE SYSREQ_EDOC_EXPORTER SYSREQ_EDOC_KIND SYSREQ_EDOC_LIFE_STAGE_NAME SYSREQ_EDOC_LOCKED_FOR_SERVER_CODE SYSREQ_EDOC_MODIFIED SYSREQ_EDOC_NAME SYSREQ_EDOC_NOTE SYSREQ_EDOC_QUALIFIED_ID SYSREQ_EDOC_SESSION_KEY SYSREQ_EDOC_SESSION_KEY_ENCRYPTION_PLUGIN_NAME SYSREQ_EDOC_SESSION_KEY_ENCRYPTION_PLUGIN_VERSION SYSREQ_EDOC_SIGNATURE_TYPE SYSREQ_EDOC_SIGNED SYSREQ_EDOC_STORAGE SYSREQ_EDOC_STORAGES_ARCHIVE_STORAGE SYSREQ_EDOC_STORAGES_CHECK_RIGHTS SYSREQ_EDOC_STORAGES_COMPUTER_NAME SYSREQ_EDOC_STORAGES_EDIT_IN_STORAGE SYSREQ_EDOC_STORAGES_EXECUTIVE_STORAGE SYSREQ_EDOC_STORAGES_FUNCTION SYSREQ_EDOC_STORAGES_INITIALIZED SYSREQ_EDOC_STORAGES_LOCAL_PATH SYSREQ_EDOC_STORAGES_SAPERION_DATABASE_NAME SYSREQ_EDOC_STORAGES_SEARCH_BY_TEXT SYSREQ_EDOC_STORAGES_SERVER_NAME SYSREQ_EDOC_STORAGES_SHARED_SOURCE_NAME SYSREQ_EDOC_STORAGES_TYPE SYSREQ_EDOC_TEXT_MODIFIED SYSREQ_EDOC_TYPE_ACT_CODE SYSREQ_EDOC_TYPE_ACT_DESCRIPTION SYSREQ_EDOC_TYPE_ACT_DESCRIPTION_LOCALIZE_ID SYSREQ_EDOC_TYPE_ACT_ON_EXECUTE SYSREQ_EDOC_TYPE_ACT_ON_EXECUTE_EXISTS SYSREQ_EDOC_TYPE_ACT_SECTION SYSREQ_EDOC_TYPE_ADD_PARAMS SYSREQ_EDOC_TYPE_COMMENT SYSREQ_EDOC_TYPE_EVENT_TEXT SYSREQ_EDOC_TYPE_NAME_IN_SINGULAR SYSREQ_EDOC_TYPE_NAME_IN_SINGULAR_LOCALIZE_ID SYSREQ_EDOC_TYPE_NAME_LOCALIZE_ID SYSREQ_EDOC_TYPE_NUMERATION_METHOD SYSREQ_EDOC_TYPE_PSEUDO_REQUISITE_CODE SYSREQ_EDOC_TYPE_REQ_CODE SYSREQ_EDOC_TYPE_REQ_DESCRIPTION SYSREQ_EDOC_TYPE_REQ_DESCRIPTION_LOCALIZE_ID SYSREQ_EDOC_TYPE_REQ_IS_LEADING SYSREQ_EDOC_TYPE_REQ_IS_REQUIRED SYSREQ_EDOC_TYPE_REQ_NUMBER SYSREQ_EDOC_TYPE_REQ_ON_CHANGE SYSREQ_EDOC_TYPE_REQ_ON_CHANGE_EXISTS SYSREQ_EDOC_TYPE_REQ_ON_SELECT SYSREQ_EDOC_TYPE_REQ_ON_SELECT_KIND SYSREQ_EDOC_TYPE_REQ_SECTION SYSREQ_EDOC_TYPE_VIEW_CARD SYSREQ_EDOC_TYPE_VIEW_CODE SYSREQ_EDOC_TYPE_VIEW_COMMENT SYSREQ_EDOC_TYPE_VIEW_IS_MAIN SYSREQ_EDOC_TYPE_VIEW_NAME SYSREQ_EDOC_TYPE_VIEW_NAME_LOCALIZE_ID SYSREQ_EDOC_VERSION_AUTHOR SYSREQ_EDOC_VERSION_CRC SYSREQ_EDOC_VERSION_DATA SYSREQ_EDOC_VERSION_EDITOR SYSREQ_EDOC_VERSION_EXPORT_DATE SYSREQ_EDOC_VERSION_EXPORTER SYSREQ_EDOC_VERSION_HIDDEN SYSREQ_EDOC_VERSION_LIFE_STAGE SYSREQ_EDOC_VERSION_MODIFIED SYSREQ_EDOC_VERSION_NOTE SYSREQ_EDOC_VERSION_SIGNATURE_TYPE SYSREQ_EDOC_VERSION_SIGNED SYSREQ_EDOC_VERSION_SIZE SYSREQ_EDOC_VERSION_SOURCE SYSREQ_EDOC_VERSION_TEXT_MODIFIED SYSREQ_EDOCKIND_DEFAULT_VERSION_STATE_CODE SYSREQ_FOLDER_KIND SYSREQ_FUNC_CATEGORY SYSREQ_FUNC_COMMENT SYSREQ_FUNC_GROUP SYSREQ_FUNC_GROUP_COMMENT SYSREQ_FUNC_GROUP_NUMBER SYSREQ_FUNC_HELP SYSREQ_FUNC_PARAM_DEF_VALUE SYSREQ_FUNC_PARAM_IDENT SYSREQ_FUNC_PARAM_NUMBER SYSREQ_FUNC_PARAM_TYPE SYSREQ_FUNC_TEXT SYSREQ_GROUP_CATEGORY SYSREQ_ID SYSREQ_LAST_UPDATE SYSREQ_LEADER_REFERENCE SYSREQ_LINE_NUMBER SYSREQ_MAIN_RECORD_ID SYSREQ_NAME SYSREQ_NAME_LOCALIZE_ID SYSREQ_NOTE SYSREQ_ORIGINAL_RECORD SYSREQ_OUR_FIRM SYSREQ_PROFILING_SETTINGS_BATCH_LOGING SYSREQ_PROFILING_SETTINGS_BATCH_SIZE SYSREQ_PROFILING_SETTINGS_PROFILING_ENABLED SYSREQ_PROFILING_SETTINGS_SQL_PROFILING_ENABLED SYSREQ_PROFILING_SETTINGS_START_LOGGED SYSREQ_RECORD_STATUS SYSREQ_REF_REQ_FIELD_NAME SYSREQ_REF_REQ_FORMAT SYSREQ_REF_REQ_GENERATED SYSREQ_REF_REQ_LENGTH SYSREQ_REF_REQ_PRECISION SYSREQ_REF_REQ_REFERENCE SYSREQ_REF_REQ_SECTION SYSREQ_REF_REQ_STORED SYSREQ_REF_REQ_TOKENS SYSREQ_REF_REQ_TYPE SYSREQ_REF_REQ_VIEW SYSREQ_REF_TYPE_ACT_CODE SYSREQ_REF_TYPE_ACT_DESCRIPTION SYSREQ_REF_TYPE_ACT_DESCRIPTION_LOCALIZE_ID SYSREQ_REF_TYPE_ACT_ON_EXECUTE SYSREQ_REF_TYPE_ACT_ON_EXECUTE_EXISTS SYSREQ_REF_TYPE_ACT_SECTION SYSREQ_REF_TYPE_ADD_PARAMS SYSREQ_REF_TYPE_COMMENT SYSREQ_REF_TYPE_COMMON_SETTINGS SYSREQ_REF_TYPE_DISPLAY_REQUISITE_NAME SYSREQ_REF_TYPE_EVENT_TEXT SYSREQ_REF_TYPE_MAIN_LEADING_REF SYSREQ_REF_TYPE_NAME_IN_SINGULAR SYSREQ_REF_TYPE_NAME_IN_SINGULAR_LOCALIZE_ID SYSREQ_REF_TYPE_NAME_LOCALIZE_ID SYSREQ_REF_TYPE_NUMERATION_METHOD SYSREQ_REF_TYPE_REQ_CODE SYSREQ_REF_TYPE_REQ_DESCRIPTION SYSREQ_REF_TYPE_REQ_DESCRIPTION_LOCALIZE_ID SYSREQ_REF_TYPE_REQ_IS_CONTROL SYSREQ_REF_TYPE_REQ_IS_FILTER SYSREQ_REF_TYPE_REQ_IS_LEADING SYSREQ_REF_TYPE_REQ_IS_REQUIRED SYSREQ_REF_TYPE_REQ_NUMBER SYSREQ_REF_TYPE_REQ_ON_CHANGE SYSREQ_REF_TYPE_REQ_ON_CHANGE_EXISTS SYSREQ_REF_TYPE_REQ_ON_SELECT SYSREQ_REF_TYPE_REQ_ON_SELECT_KIND SYSREQ_REF_TYPE_REQ_SECTION SYSREQ_REF_TYPE_VIEW_CARD SYSREQ_REF_TYPE_VIEW_CODE SYSREQ_REF_TYPE_VIEW_COMMENT SYSREQ_REF_TYPE_VIEW_IS_MAIN SYSREQ_REF_TYPE_VIEW_NAME SYSREQ_REF_TYPE_VIEW_NAME_LOCALIZE_ID SYSREQ_REFERENCE_TYPE_ID SYSREQ_STATE SYSREQ_STATЕ SYSREQ_SYSTEM_SETTINGS_VALUE SYSREQ_TYPE SYSREQ_UNIT SYSREQ_UNIT_ID SYSREQ_USER_GROUPS_GROUP_FULL_NAME SYSREQ_USER_GROUPS_GROUP_NAME SYSREQ_USER_GROUPS_GROUP_SERVER_NAME SYSREQ_USERS_ACCESS_RIGHTS SYSREQ_USERS_AUTHENTICATION SYSREQ_USERS_CATEGORY SYSREQ_USERS_COMPONENT SYSREQ_USERS_COMPONENT_USER_IS_PUBLIC SYSREQ_USERS_DOMAIN SYSREQ_USERS_FULL_USER_NAME SYSREQ_USERS_GROUP SYSREQ_USERS_IS_MAIN_SERVER SYSREQ_USERS_LOGIN SYSREQ_USERS_REFERENCE_USER_IS_PUBLIC SYSREQ_USERS_STATUS SYSREQ_USERS_USER_CERTIFICATE SYSREQ_USERS_USER_CERTIFICATE_INFO SYSREQ_USERS_USER_CERTIFICATE_PLUGIN_NAME SYSREQ_USERS_USER_CERTIFICATE_PLUGIN_VERSION SYSREQ_USERS_USER_CERTIFICATE_STATE SYSREQ_USERS_USER_CERTIFICATE_SUBJECT_NAME SYSREQ_USERS_USER_CERTIFICATE_THUMBPRINT SYSREQ_USERS_USER_DEFAULT_CERTIFICATE SYSREQ_USERS_USER_DESCRIPTION SYSREQ_USERS_USER_GLOBAL_NAME SYSREQ_USERS_USER_LOGIN SYSREQ_USERS_USER_MAIN_SERVER SYSREQ_USERS_USER_TYPE SYSREQ_WORK_RULES_FOLDER_ID RESULT_VAR_NAME RESULT_VAR_NAME_ENG AUTO_NUMERATION_RULE_ID CANT_CHANGE_ID_REQUISITE_RULE_ID CANT_CHANGE_OURFIRM_REQUISITE_RULE_ID CHECK_CHANGING_REFERENCE_RECORD_USE_RULE_ID CHECK_CODE_REQUISITE_RULE_ID CHECK_DELETING_REFERENCE_RECORD_USE_RULE_ID CHECK_FILTRATER_CHANGES_RULE_ID CHECK_RECORD_INTERVAL_RULE_ID CHECK_REFERENCE_INTERVAL_RULE_ID CHECK_REQUIRED_DATA_FULLNESS_RULE_ID CHECK_REQUIRED_REQUISITES_FULLNESS_RULE_ID MAKE_RECORD_UNRATIFIED_RULE_ID RESTORE_AUTO_NUMERATION_RULE_ID SET_FIRM_CONTEXT_FROM_RECORD_RULE_ID SET_FIRST_RECORD_IN_LIST_FORM_RULE_ID SET_IDSPS_VALUE_RULE_ID SET_NEXT_CODE_VALUE_RULE_ID SET_OURFIRM_BOUNDS_RULE_ID SET_OURFIRM_REQUISITE_RULE_ID SCRIPT_BLOCK_AFTER_FINISH_EVENT SCRIPT_BLOCK_BEFORE_START_EVENT SCRIPT_BLOCK_EXECUTION_RESULTS_PROPERTY SCRIPT_BLOCK_NAME_PROPERTY SCRIPT_BLOCK_SCRIPT_PROPERTY SUBTASK_BLOCK_ABORT_DEADLINE_PROPERTY SUBTASK_BLOCK_AFTER_FINISH_EVENT SUBTASK_BLOCK_ASSIGN_PARAMS_EVENT SUBTASK_BLOCK_ATTACHMENTS_PROPERTY SUBTASK_BLOCK_ATTACHMENTS_RIGHTS_GROUP_PROPERTY SUBTASK_BLOCK_ATTACHMENTS_RIGHTS_TYPE_PROPERTY SUBTASK_BLOCK_BEFORE_START_EVENT SUBTASK_BLOCK_CREATED_TASK_PROPERTY SUBTASK_BLOCK_CREATION_EVENT SUBTASK_BLOCK_DEADLINE_PROPERTY SUBTASK_BLOCK_IMPORTANCE_PROPERTY SUBTASK_BLOCK_INITIATOR_PROPERTY SUBTASK_BLOCK_IS_RELATIVE_ABORT_DEADLINE_PROPERTY SUBTASK_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY SUBTASK_BLOCK_JOBS_TYPE_PROPERTY SUBTASK_BLOCK_NAME_PROPERTY SUBTASK_BLOCK_PARALLEL_ROUTE_PROPERTY SUBTASK_BLOCK_PERFORMERS_PROPERTY SUBTASK_BLOCK_RELATIVE_ABORT_DEADLINE_TYPE_PROPERTY SUBTASK_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY SUBTASK_BLOCK_REQUIRE_SIGN_PROPERTY SUBTASK_BLOCK_STANDARD_ROUTE_PROPERTY SUBTASK_BLOCK_START_EVENT SUBTASK_BLOCK_STEP_CONTROL_PROPERTY SUBTASK_BLOCK_SUBJECT_PROPERTY SUBTASK_BLOCK_TASK_CONTROL_PROPERTY SUBTASK_BLOCK_TEXT_PROPERTY SUBTASK_BLOCK_UNLOCK_ATTACHMENTS_ON_STOP_PROPERTY SUBTASK_BLOCK_USE_STANDARD_ROUTE_PROPERTY SUBTASK_BLOCK_WAIT_FOR_TASK_COMPLETE_PROPERTY SYSCOMP_CONTROL_JOBS SYSCOMP_FOLDERS SYSCOMP_JOBS SYSCOMP_NOTICES SYSCOMP_TASKS SYSDLG_CREATE_EDOCUMENT SYSDLG_CREATE_EDOCUMENT_VERSION SYSDLG_CURRENT_PERIOD SYSDLG_EDIT_FUNCTION_HELP SYSDLG_EDOCUMENT_KINDS_FOR_TEMPLATE SYSDLG_EXPORT_MULTIPLE_EDOCUMENTS SYSDLG_EXPORT_SINGLE_EDOCUMENT SYSDLG_IMPORT_EDOCUMENT SYSDLG_MULTIPLE_SELECT SYSDLG_SETUP_ACCESS_RIGHTS SYSDLG_SETUP_DEFAULT_RIGHTS SYSDLG_SETUP_FILTER_CONDITION SYSDLG_SETUP_SIGN_RIGHTS SYSDLG_SETUP_TASK_OBSERVERS SYSDLG_SETUP_TASK_ROUTE SYSDLG_SETUP_USERS_LIST SYSDLG_SIGN_EDOCUMENT SYSDLG_SIGN_MULTIPLE_EDOCUMENTS SYSREF_ACCESS_RIGHTS_TYPES SYSREF_ADMINISTRATION_HISTORY SYSREF_ALL_AVAILABLE_COMPONENTS SYSREF_ALL_AVAILABLE_PRIVILEGES SYSREF_ALL_REPLICATING_COMPONENTS SYSREF_AVAILABLE_DEVELOPERS_COMPONENTS SYSREF_CALENDAR_EVENTS SYSREF_COMPONENT_TOKEN_HISTORY SYSREF_COMPONENT_TOKENS SYSREF_COMPONENTS SYSREF_CONSTANTS SYSREF_DATA_RECEIVE_PROTOCOL SYSREF_DATA_SEND_PROTOCOL SYSREF_DIALOGS SYSREF_DIALOGS_REQUISITES SYSREF_EDITORS SYSREF_EDOC_CARDS SYSREF_EDOC_TYPES SYSREF_EDOCUMENT_CARD_REQUISITES SYSREF_EDOCUMENT_CARD_TYPES SYSREF_EDOCUMENT_CARD_TYPES_REFERENCE SYSREF_EDOCUMENT_CARDS SYSREF_EDOCUMENT_HISTORY SYSREF_EDOCUMENT_KINDS SYSREF_EDOCUMENT_REQUISITES SYSREF_EDOCUMENT_SIGNATURES SYSREF_EDOCUMENT_TEMPLATES SYSREF_EDOCUMENT_TEXT_STORAGES SYSREF_EDOCUMENT_VIEWS SYSREF_FILTERER_SETUP_CONFLICTS SYSREF_FILTRATER_SETTING_CONFLICTS SYSREF_FOLDER_HISTORY SYSREF_FOLDERS SYSREF_FUNCTION_GROUPS SYSREF_FUNCTION_PARAMS SYSREF_FUNCTIONS SYSREF_JOB_HISTORY SYSREF_LINKS SYSREF_LOCALIZATION_DICTIONARY SYSREF_LOCALIZATION_LANGUAGES SYSREF_MODULES SYSREF_PRIVILEGES SYSREF_RECORD_HISTORY SYSREF_REFERENCE_REQUISITES SYSREF_REFERENCE_TYPE_VIEWS SYSREF_REFERENCE_TYPES SYSREF_REFERENCES SYSREF_REFERENCES_REQUISITES SYSREF_REMOTE_SERVERS SYSREF_REPLICATION_SESSIONS_LOG SYSREF_REPLICATION_SESSIONS_PROTOCOL SYSREF_REPORTS SYSREF_ROLES SYSREF_ROUTE_BLOCK_GROUPS SYSREF_ROUTE_BLOCKS SYSREF_SCRIPTS SYSREF_SEARCHES SYSREF_SERVER_EVENTS SYSREF_SERVER_EVENTS_HISTORY SYSREF_STANDARD_ROUTE_GROUPS SYSREF_STANDARD_ROUTES SYSREF_STATUSES SYSREF_SYSTEM_SETTINGS SYSREF_TASK_HISTORY SYSREF_TASK_KIND_GROUPS SYSREF_TASK_KINDS SYSREF_TASK_RIGHTS SYSREF_TASK_SIGNATURES SYSREF_TASKS SYSREF_UNITS SYSREF_USER_GROUPS SYSREF_USER_GROUPS_REFERENCE SYSREF_USER_SUBSTITUTION SYSREF_USERS SYSREF_USERS_REFERENCE SYSREF_VIEWERS SYSREF_WORKING_TIME_CALENDARS ACCESS_RIGHTS_TABLE_NAME EDMS_ACCESS_TABLE_NAME EDOC_TYPES_TABLE_NAME TEST_DEV_DB_NAME TEST_DEV_SYSTEM_CODE TEST_EDMS_DB_NAME TEST_EDMS_MAIN_CODE TEST_EDMS_MAIN_DB_NAME TEST_EDMS_SECOND_CODE TEST_EDMS_SECOND_DB_NAME TEST_EDMS_SYSTEM_CODE TEST_ISB5_MAIN_CODE TEST_ISB5_SECOND_CODE TEST_SQL_SERVER_2005_NAME TEST_SQL_SERVER_NAME ATTENTION_CAPTION cbsCommandLinks cbsDefault CONFIRMATION_CAPTION ERROR_CAPTION INFORMATION_CAPTION mrCancel mrOk EDOC_VERSION_ACTIVE_STAGE_CODE EDOC_VERSION_DESIGN_STAGE_CODE EDOC_VERSION_OBSOLETE_STAGE_CODE cpDataEnciphermentEnabled cpDigitalSignatureEnabled cpID cpIssuer cpPluginVersion cpSerial cpSubjectName cpSubjSimpleName cpValidFromDate cpValidToDate ISBL_SYNTAX NO_SYNTAX XML_SYNTAX WAIT_BLOCK_AFTER_FINISH_EVENT WAIT_BLOCK_BEFORE_START_EVENT WAIT_BLOCK_DEADLINE_PROPERTY WAIT_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY WAIT_BLOCK_NAME_PROPERTY WAIT_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY SYSRES_COMMON SYSRES_CONST SYSRES_MBFUNC SYSRES_SBDATA SYSRES_SBGUI SYSRES_SBINTF SYSRES_SBREFDSC SYSRES_SQLERRORS SYSRES_SYSCOMP atUser atGroup atRole aemEnabledAlways aemDisabledAlways aemEnabledOnBrowse aemEnabledOnEdit aemDisabledOnBrowseEmpty apBegin apEnd alLeft alRight asmNever asmNoButCustomize asmAsLastTime asmYesButCustomize asmAlways cirCommon cirRevoked ctSignature ctEncode ctSignatureEncode clbUnchecked clbChecked clbGrayed ceISB ceAlways ceNever ctDocument ctReference ctScript ctUnknown ctReport ctDialog ctFunction ctFolder ctEDocument ctTask ctJob ctNotice ctControlJob cfInternal cfDisplay ciUnspecified ciWrite ciRead ckFolder ckEDocument ckTask ckJob ckComponentToken ckAny ckReference ckScript ckReport ckDialog ctISBLEditor ctBevel ctButton ctCheckListBox ctComboBox ctComboEdit ctGrid ctDBCheckBox ctDBComboBox ctDBEdit ctDBEllipsis ctDBMemo ctDBNavigator ctDBRadioGroup ctDBStatusLabel ctEdit ctGroupBox ctInplaceHint ctMemo ctPanel ctListBox ctRadioButton ctRichEdit ctTabSheet ctWebBrowser ctImage ctHyperLink ctLabel ctDBMultiEllipsis ctRibbon ctRichView ctInnerPanel ctPanelGroup ctBitButton cctDate cctInteger cctNumeric cctPick cctReference cctString cctText cltInternal cltPrimary cltGUI dseBeforeOpen dseAfterOpen dseBeforeClose dseAfterClose dseOnValidDelete dseBeforeDelete dseAfterDelete dseAfterDeleteOutOfTransaction dseOnDeleteError dseBeforeInsert dseAfterInsert dseOnValidUpdate dseBeforeUpdate dseOnUpdateRatifiedRecord dseAfterUpdate dseAfterUpdateOutOfTransaction dseOnUpdateError dseAfterScroll dseOnOpenRecord dseOnCloseRecord dseBeforeCancel dseAfterCancel dseOnUpdateDeadlockError dseBeforeDetailUpdate dseOnPrepareUpdate dseOnAnyRequisiteChange dssEdit dssInsert dssBrowse dssInActive dftDate dftShortDate dftDateTime dftTimeStamp dotDays dotHours dotMinutes dotSeconds dtkndLocal dtkndUTC arNone arView arEdit arFull ddaView ddaEdit emLock emEdit emSign emExportWithLock emImportWithUnlock emChangeVersionNote emOpenForModify emChangeLifeStage emDelete emCreateVersion emImport emUnlockExportedWithLock emStart emAbort emReInit emMarkAsReaded emMarkAsUnreaded emPerform emAccept emResume emChangeRights emEditRoute emEditObserver emRecoveryFromLocalCopy emChangeWorkAccessType emChangeEncodeTypeToCertificate emChangeEncodeTypeToPassword emChangeEncodeTypeToNone emChangeEncodeTypeToCertificatePassword emChangeStandardRoute emGetText emOpenForView emMoveToStorage emCreateObject emChangeVersionHidden emDeleteVersion emChangeLifeCycleStage emApprovingSign emExport emContinue emLockFromEdit emUnLockForEdit emLockForServer emUnlockFromServer emDelegateAccessRights emReEncode ecotFile ecotProcess eaGet eaCopy eaCreate eaCreateStandardRoute edltAll edltNothing edltQuery essmText essmCard esvtLast esvtLastActive esvtSpecified edsfExecutive edsfArchive edstSQLServer edstFile edvstNone edvstEDocumentVersionCopy edvstFile edvstTemplate edvstScannedFile vsDefault vsDesign vsActive vsObsolete etNone etCertificate etPassword etCertificatePassword ecException ecWarning ecInformation estAll estApprovingOnly evtLast evtLastActive evtQuery fdtString fdtNumeric fdtInteger fdtDate fdtText fdtUnknown fdtWideString fdtLargeInteger ftInbox ftOutbox ftFavorites ftCommonFolder ftUserFolder ftComponents ftQuickLaunch ftShortcuts ftSearch grhAuto grhX1 grhX2 grhX3 hltText hltRTF hltHTML iffBMP iffJPEG iffMultiPageTIFF iffSinglePageTIFF iffTIFF iffPNG im8bGrayscale im24bRGB im1bMonochrome itBMP itJPEG itWMF itPNG ikhInformation ikhWarning ikhError ikhNoIcon icUnknown icScript icFunction icIntegratedReport icAnalyticReport icDataSetEventHandler icActionHandler icFormEventHandler icLookUpEventHandler icRequisiteChangeEventHandler icBeforeSearchEventHandler icRoleCalculation icSelectRouteEventHandler icBlockPropertyCalculation icBlockQueryParamsEventHandler icChangeSearchResultEventHandler icBlockEventHandler icSubTaskInitEventHandler icEDocDataSetEventHandler icEDocLookUpEventHandler icEDocActionHandler icEDocFormEventHandler icEDocRequisiteChangeEventHandler icStructuredConversionRule icStructuredConversionEventBefore icStructuredConversionEventAfter icWizardEventHandler icWizardFinishEventHandler icWizardStepEventHandler icWizardStepFinishEventHandler icWizardActionEnableEventHandler icWizardActionExecuteEventHandler icCreateJobsHandler icCreateNoticesHandler icBeforeLookUpEventHandler icAfterLookUpEventHandler icTaskAbortEventHandler icWorkflowBlockActionHandler icDialogDataSetEventHandler icDialogActionHandler icDialogLookUpEventHandler icDialogRequisiteChangeEventHandler icDialogFormEventHandler icDialogValidCloseEventHandler icBlockFormEventHandler icTaskFormEventHandler icReferenceMethod icEDocMethod icDialogMethod icProcessMessageHandler isShow isHide isByUserSettings jkJob jkNotice jkControlJob jtInner jtLeft jtRight jtFull jtCross lbpAbove lbpBelow lbpLeft lbpRight eltPerConnection eltPerUser sfcUndefined sfcBlack sfcGreen sfcRed sfcBlue sfcOrange sfcLilac sfsItalic sfsStrikeout sfsNormal ldctStandardRoute ldctWizard ldctScript ldctFunction ldctRouteBlock ldctIntegratedReport ldctAnalyticReport ldctReferenceType ldctEDocumentType ldctDialog ldctServerEvents mrcrtNone mrcrtUser mrcrtMaximal mrcrtCustom vtEqual vtGreaterOrEqual vtLessOrEqual vtRange rdYesterday rdToday rdTomorrow rdThisWeek rdThisMonth rdThisYear rdNextMonth rdNextWeek rdLastWeek rdLastMonth rdWindow rdFile rdPrinter rdtString rdtNumeric rdtInteger rdtDate rdtReference rdtAccount rdtText rdtPick rdtUnknown rdtLargeInteger rdtDocument reOnChange reOnChangeValues ttGlobal ttLocal ttUser ttSystem ssmBrowse ssmSelect ssmMultiSelect ssmBrowseModal smSelect smLike smCard stNone stAuthenticating stApproving sctString sctStream sstAnsiSort sstNaturalSort svtEqual svtContain soatString soatNumeric soatInteger soatDatetime soatReferenceRecord soatText soatPick soatBoolean soatEDocument soatAccount soatIntegerCollection soatNumericCollection soatStringCollection soatPickCollection soatDatetimeCollection soatBooleanCollection soatReferenceRecordCollection soatEDocumentCollection soatAccountCollection soatContents soatUnknown tarAbortByUser tarAbortByWorkflowException tvtAllWords tvtExactPhrase tvtAnyWord usNone usCompleted usRedSquare usBlueSquare usYellowSquare usGreenSquare usOrangeSquare usPurpleSquare usFollowUp utUnknown utUser utDeveloper utAdministrator utSystemDeveloper utDisconnected btAnd btDetailAnd btOr btNotOr btOnly vmView vmSelect vmNavigation vsmSingle vsmMultiple vsmMultipleCheck vsmNoSelection wfatPrevious wfatNext wfatCancel wfatFinish wfepUndefined wfepText3 wfepText6 wfepText9 wfepSpinEdit wfepDropDown wfepRadioGroup wfepFlag wfepText12 wfepText15 wfepText18 wfepText21 wfepText24 wfepText27 wfepText30 wfepRadioGroupColumn1 wfepRadioGroupColumn2 wfepRadioGroupColumn3 wfetQueryParameter wfetText wfetDelimiter wfetLabel wptString wptInteger wptNumeric wptBoolean wptDateTime wptPick wptText wptUser wptUserList wptEDocumentInfo wptEDocumentInfoList wptReferenceRecordInfo wptReferenceRecordInfoList wptFolderInfo wptTaskInfo wptContents wptFileName wptDate wsrComplete wsrGoNext wsrGoPrevious wsrCustom wsrCancel wsrGoFinal wstForm wstEDocument wstTaskCard wstReferenceRecordCard wstFinal waAll waPerformers waManual wsbStart wsbFinish wsbNotice wsbStep wsbDecision wsbWait wsbMonitor wsbScript wsbConnector wsbSubTask wsbLifeCycleStage wsbPause wdtInteger wdtFloat wdtString wdtPick wdtDateTime wdtBoolean wdtTask wdtJob wdtFolder wdtEDocument wdtReferenceRecord wdtUser wdtGroup wdtRole wdtIntegerCollection wdtFloatCollection wdtStringCollection wdtPickCollection wdtDateTimeCollection wdtBooleanCollection wdtTaskCollection wdtJobCollection wdtFolderCollection wdtEDocumentCollection wdtReferenceRecordCollection wdtUserCollection wdtGroupCollection wdtRoleCollection wdtContents wdtUserList wdtSearchDescription wdtDeadLine wdtPickSet wdtAccountCollection wiLow wiNormal wiHigh wrtSoft wrtHard wsInit wsRunning wsDone wsControlled wsAborted wsContinued wtmFull wtmFromCurrent wtmOnlyCurrent ",class:"AltState Application CallType ComponentTokens CreatedJobs CreatedNotices ControlState DialogResult Dialogs EDocuments EDocumentVersionSource Folders GlobalIDs Job Jobs InputValue LookUpReference LookUpRequisiteNames LookUpSearch Object ParentComponent Processes References Requisite ReportName Reports Result Scripts Searches SelectedAttachments SelectedItems SelectMode Sender ServerEvents ServiceFactory ShiftState SubTask SystemDialogs Tasks Wizard Wizards Work ВызовСпоÑоб ИмÑОтчета РеквЗнач ",literal:"null true false nil "},s={begin:"\\.\\s*"+e.UNDERSCORE_IDENT_RE,keywords:o,relevance:0},l={className:"type",begin:":[ \\t]*("+"IApplication IAccessRights IAccountRepository IAccountSelectionRestrictions IAction IActionList IAdministrationHistoryDescription IAnchors IApplication IArchiveInfo IAttachment IAttachmentList ICheckListBox ICheckPointedList IColumn IComponent IComponentDescription IComponentToken IComponentTokenFactory IComponentTokenInfo ICompRecordInfo IConnection IContents IControl IControlJob IControlJobInfo IControlList ICrypto ICrypto2 ICustomJob ICustomJobInfo ICustomListBox ICustomObjectWizardStep ICustomWork ICustomWorkInfo IDataSet IDataSetAccessInfo IDataSigner IDateCriterion IDateRequisite IDateRequisiteDescription IDateValue IDeaAccessRights IDeaObjectInfo IDevelopmentComponentLock IDialog IDialogFactory IDialogPickRequisiteItems IDialogsFactory IDICSFactory IDocRequisite IDocumentInfo IDualListDialog IECertificate IECertificateInfo IECertificates IEditControl IEditorForm IEdmsExplorer IEdmsObject IEdmsObjectDescription IEdmsObjectFactory IEdmsObjectInfo IEDocument IEDocumentAccessRights IEDocumentDescription IEDocumentEditor IEDocumentFactory IEDocumentInfo IEDocumentStorage IEDocumentVersion IEDocumentVersionListDialog IEDocumentVersionSource IEDocumentWizardStep IEDocVerSignature IEDocVersionState IEnabledMode IEncodeProvider IEncrypter IEvent IEventList IException IExternalEvents IExternalHandler IFactory IField IFileDialog IFolder IFolderDescription IFolderDialog IFolderFactory IFolderInfo IForEach IForm IFormTitle IFormWizardStep IGlobalIDFactory IGlobalIDInfo IGrid IHasher IHistoryDescription IHyperLinkControl IImageButton IImageControl IInnerPanel IInplaceHint IIntegerCriterion IIntegerList IIntegerRequisite IIntegerValue IISBLEditorForm IJob IJobDescription IJobFactory IJobForm IJobInfo ILabelControl ILargeIntegerCriterion ILargeIntegerRequisite ILargeIntegerValue ILicenseInfo ILifeCycleStage IList IListBox ILocalIDInfo ILocalization ILock IMemoryDataSet IMessagingFactory IMetadataRepository INotice INoticeInfo INumericCriterion INumericRequisite INumericValue IObject IObjectDescription IObjectImporter IObjectInfo IObserver IPanelGroup IPickCriterion IPickProperty IPickRequisite IPickRequisiteDescription IPickRequisiteItem IPickRequisiteItems IPickValue IPrivilege IPrivilegeList IProcess IProcessFactory IProcessMessage IProgress IProperty IPropertyChangeEvent IQuery IReference IReferenceCriterion IReferenceEnabledMode IReferenceFactory IReferenceHistoryDescription IReferenceInfo IReferenceRecordCardWizardStep IReferenceRequisiteDescription IReferencesFactory IReferenceValue IRefRequisite IReport IReportFactory IRequisite IRequisiteDescription IRequisiteDescriptionList IRequisiteFactory IRichEdit IRouteStep IRule IRuleList ISchemeBlock IScript IScriptFactory ISearchCriteria ISearchCriterion ISearchDescription ISearchFactory ISearchFolderInfo ISearchForObjectDescription ISearchResultRestrictions ISecuredContext ISelectDialog IServerEvent IServerEventFactory IServiceDialog IServiceFactory ISignature ISignProvider ISignProvider2 ISignProvider3 ISimpleCriterion IStringCriterion IStringList IStringRequisite IStringRequisiteDescription IStringValue ISystemDialogsFactory ISystemInfo ITabSheet ITask ITaskAbortReasonInfo ITaskCardWizardStep ITaskDescription ITaskFactory ITaskInfo ITaskRoute ITextCriterion ITextRequisite ITextValue ITreeListSelectDialog IUser IUserList IValue IView IWebBrowserControl IWizard IWizardAction IWizardFactory IWizardFormElement IWizardParam IWizardPickParam IWizardReferenceParam IWizardStep IWorkAccessRights IWorkDescription IWorkflowAskableParam IWorkflowAskableParams IWorkflowBlock IWorkflowBlockResult IWorkflowEnabledMode IWorkflowParam IWorkflowPickParam IWorkflowReferenceParam IWorkState IWorkTreeCustomNode IWorkTreeJobNode IWorkTreeTaskNode IXMLEditorForm SBCrypto ".trim().replace(/\s/g,"|")+")",end:"[ \\t]*=",excludeEnd:!0},c={className:"variable",lexemes:t,keywords:o,begin:t,relevance:0,contains:[l,s]};return{name:"ISBL",aliases:["isbl"],case_insensitive:!0,lexemes:t,keywords:o,illegal:"\\$|\\?|%|,|;$|~|#|@| <= >= == + / * - rem quot neg? pos? delay? symbol? keyword? true? false? integer? empty? coll? list? set? ifn? fn? associative? sequential? sorted? counted? reversible? number? decimal? class? distinct? isa? float? rational? reduced? ratio? odd? even? char? seq? vector? string? map? nil? contains? zero? instance? not-every? not-any? libspec? -> ->> .. . inc compare do dotimes mapcat take remove take-while drop letfn drop-last take-last drop-while while intern condp case reduced cycle split-at split-with repeat replicate iterate range merge zipmap declare line-seq sort comparator sort-by dorun doall nthnext nthrest partition eval doseq await await-for let agent atom send send-off release-pending-sends add-watch mapv filterv remove-watch agent-error restart-agent set-error-handler error-handler set-error-mode! error-mode shutdown-agents quote var fn loop recur throw try monitor-enter monitor-exit macroexpand macroexpand-1 for dosync and or when when-not when-let comp juxt partial sequence memoize constantly complement identity assert peek pop doto proxy first rest cons cast coll last butlast sigs reify second ffirst fnext nfirst nnext meta with-meta ns in-ns create-ns import refer keys select-keys vals key val rseq name namespace promise into transient persistent! conj! assoc! dissoc! pop! disj! use class type num float double short byte boolean bigint biginteger bigdec print-method print-dup throw-if printf format load compile get-in update-in pr pr-on newline flush read slurp read-line subvec with-open memfn time re-find re-groups rand-int rand mod locking assert-valid-fdecl alias resolve ref deref refset swap! reset! set-validator! compare-and-set! alter-meta! reset-meta! commute get-validator alter ref-set ref-history-count ref-min-history ref-max-history ensure sync io! new next conj set! to-array future future-call into-array aset gen-class reduce map filter find empty hash-map hash-set sorted-map sorted-map-by sorted-set sorted-set-by vec vector seq flatten reverse assoc dissoc list disj get union difference intersection extend extend-type extend-protocol int nth delay count concat chunk chunk-buffer chunk-append chunk-first chunk-rest max min dec unchecked-inc-int unchecked-inc unchecked-dec-inc unchecked-dec unchecked-negate unchecked-add-int unchecked-add unchecked-subtract-int unchecked-subtract chunk-next chunk-cons chunked-seq? prn vary-meta lazy-seq spread list* str find-keyword keyword symbol gensym force rationalize"},a="[a-zA-Z_\\-!.?+*=<>&#'][a-zA-Z_\\-!.?+*=<>&#'0-9/;:]*",r={begin:a,relevance:0},i={className:"number",begin:"[-+]?\\d+(\\.\\d+)?",relevance:0},o=e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),s=e.COMMENT(";","$",{relevance:0}),l={className:"literal",begin:/\b(true|false|nil)\b/},c={begin:"[\\[\\{]",end:"[\\]\\}]"},_={className:"comment",begin:"\\^"+a},d=e.COMMENT("\\^\\{","\\}"),u={className:"symbol",begin:"[:]{1,2}"+a},p={begin:"\\(",end:"\\)"},m={endsWithParent:!0,relevance:0},E={keywords:n,lexemes:a,className:"name",begin:a,starts:m},g=[p,o,_,d,s,u,c,i,l,r],S={beginKeywords:t,lexemes:a,end:'(\\[|\\#|\\d|"|:|\\{|\\)|\\(|$)',contains:[{className:"title",begin:a,relevance:0,excludeEnd:!0,endsParent:!0}].concat(g)};return p.contains=[e.COMMENT("comment",""),S,E,m],m.contains=g,c.contains=g,d.contains=[c],{name:"Clojure",aliases:["clj"],illegal:/\S/,contains:[p,o,_,d,s,u,c,i,l]}}},uQpx:function(e,t){e.exports=function(e){return{name:"Python profiler",contains:[e.C_NUMBER_MODE,{begin:"[a-zA-Z_][\\da-zA-Z_]+\\.[\\da-zA-Z_]{1,3}",end:":",excludeEnd:!0},{begin:"(ncalls|tottime|cumtime)",end:"$",keywords:"ncalls tottime|10 cumtime|10 filename",relevance:10},{begin:"function calls",end:"$",contains:[e.C_NUMBER_MODE],relevance:10},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:"\\(",end:"\\)$",excludeBegin:!0,excludeEnd:!0,relevance:0}]}}},uR4j:function(e,t){e.exports=function(e){return{keywords:"dsconfig",contains:[{className:"keyword",begin:"^dsconfig",end:"\\s",excludeEnd:!0,relevance:10},{className:"built_in",begin:"(list|create|get|set|delete)-(\\w+)",end:"\\s",excludeEnd:!0,illegal:"!@#$%^&*()",relevance:10},{className:"built_in",begin:"--(\\w+)",end:"\\s",excludeEnd:!0},{className:"string",begin:/"/,end:/"/},{className:"string",begin:/'/,end:/'/},{className:"string",begin:"[\\w-?]+:\\w+",end:"\\W",relevance:0},{className:"string",begin:"\\w+-?\\w+",end:"\\W",relevance:0},e.HASH_COMMENT_MODE]}}},unZW:function(e,t){e.exports=function(e){var t="assembly module package import alias class interface object given value assign void function new of extends satisfies abstracts in out return break continue throw assert dynamic if else switch case for while try catch finally then let this outer super is exists nonempty",n={className:"subst",excludeBegin:!0,excludeEnd:!0,begin:/``/,end:/``/,keywords:t,relevance:10},a=[{className:"string",begin:'"""',end:'"""',relevance:10},{className:"string",begin:'"',end:'"',contains:[n]},{className:"string",begin:"'",end:"'"},{className:"number",begin:"#[0-9a-fA-F_]+|\\$[01_]+|[0-9_]+(?:\\.[0-9_](?:[eE][+-]?\\d+)?)?[kMGTPmunpf]?",relevance:0}];return n.contains=a,{name:"Ceylon",keywords:{keyword:t+" shared abstract formal default actual variable late native deprecated final sealed annotation suppressWarnings small",meta:"doc by license see throws tagged"},illegal:"\\$[^01]|#[^0-9a-fA-F]",contains:[e.C_LINE_COMMENT_MODE,e.COMMENT("/\\*","\\*/",{contains:["self"]}),{className:"meta",begin:'@[a-z]\\w*(?:\\:"[^"]*")?'}].concat(a)}}},vDqi:function(e,t,n){e.exports=n("zuR4")},vYiF:function(e,t){e.exports=function(e){var t={className:"variable",begin:"\\$"+e.IDENT_RE},n={className:"number",begin:"#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})"};return{name:"Stylus",aliases:["styl"],case_insensitive:!1,keywords:"if else for in",illegal:"("+["\\?","(\\bReturn\\b)","(\\bEnd\\b)","(\\bend\\b)","(\\bdef\\b)",";","#\\s","\\*\\s","===\\s","\\|","%"].join("|")+")",contains:[e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,{begin:"\\.[a-zA-Z][a-zA-Z0-9_-]*(?=[\\.\\s\\n\\[\\:,])",className:"selector-class"},{begin:"\\#[a-zA-Z][a-zA-Z0-9_-]*(?=[\\.\\s\\n\\[\\:,])",className:"selector-id"},{begin:"\\b("+["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"].join("|")+")(?=[\\.\\s\\n\\[\\:,])",className:"selector-tag"},{begin:"&?:?:\\b("+["after","before","first-letter","first-line","active","first-child","focus","hover","lang","link","visited"].join("|")+")(?=[\\.\\s\\n\\[\\:,])"},{begin:"@("+["charset","css","debug","extend","font-face","for","import","include","media","mixin","page","warn","while"].join("|")+")\\b"},t,e.CSS_NUMBER_MODE,e.NUMBER_MODE,{className:"function",begin:"^[a-zA-Z][a-zA-Z0-9_-]*\\(.*\\)",illegal:"[\\n]",returnBegin:!0,contains:[{className:"title",begin:"\\b[a-zA-Z][a-zA-Z0-9_-]*"},{className:"params",begin:/\(/,end:/\)/,contains:[n,t,e.APOS_STRING_MODE,e.CSS_NUMBER_MODE,e.NUMBER_MODE,e.QUOTE_STRING_MODE]}]},{className:"attribute",begin:"\\b("+["align-content","align-items","align-self","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","auto","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","clip-path","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","font","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-variant-ligatures","font-weight","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inherit","initial","justify-content","left","letter-spacing","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","mask","max-height","max-width","min-height","min-width","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","perspective","perspective-origin","pointer-events","position","quotes","resize","right","tab-size","table-layout","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-indent","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","white-space","widows","width","word-break","word-spacing","word-wrap","z-index"].reverse().join("|")+")\\b",starts:{end:/;|$/,contains:[n,t,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE,e.NUMBER_MODE,e.C_BLOCK_COMMENT_MODE],illegal:/\./,relevance:0}}]}}},w0Vi:function(e,t,n){"use strict";var a=n("xTJ+"),r=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var t,n,i,o={};return e?(a.forEach(e.split("\n"),(function(e){if(i=e.indexOf(":"),t=a.trim(e.substr(0,i)).toLowerCase(),n=a.trim(e.substr(i+1)),t){if(o[t]&&r.indexOf(t)>=0)return;o[t]="set-cookie"===t?(o[t]?o[t]:[]).concat([n]):o[t]?o[t]+", "+n:n}})),o):o}},wB1n:function(e,t){e.exports=function(e){return{name:"HTTP",aliases:["https"],illegal:"\\S",contains:[{begin:"^HTTP/[0-9\\.]+",end:"$",contains:[{className:"number",begin:"\\b\\d{3}\\b"}]},{begin:"^[A-Z]+ (.*?) HTTP/[0-9\\.]+$",returnBegin:!0,end:"$",contains:[{className:"string",begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0},{begin:"HTTP/[0-9\\.]+"},{className:"keyword",begin:"[A-Z]+"}]},{className:"attribute",begin:"^\\w",end:": ",excludeEnd:!0,illegal:"\\n|\\s|=",starts:{end:"$",relevance:0}},{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}}]}}},wi1Z:function(e,t){e.exports=function(e){return{name:"HSP",case_insensitive:!0,lexemes:/[\w\._]+/,keywords:"goto gosub return break repeat loop continue wait await dim sdim foreach dimtype dup dupptr end stop newmod delmod mref run exgoto on mcall assert logmes newlab resume yield onexit onerror onkey onclick oncmd exist delete mkdir chdir dirlist bload bsave bcopy memfile if else poke wpoke lpoke getstr chdpm memexpand memcpy memset notesel noteadd notedel noteload notesave randomize noteunsel noteget split strrep setease button chgdisp exec dialog mmload mmplay mmstop mci pset pget syscolor mes print title pos circle cls font sysfont objsize picload color palcolor palette redraw width gsel gcopy gzoom gmode bmpsave hsvcolor getkey listbox chkbox combox input mesbox buffer screen bgscr mouse objsel groll line clrobj boxf objprm objmode stick grect grotate gsquare gradf objimage objskip objenable celload celdiv celput newcom querycom delcom cnvstow comres axobj winobj sendmsg comevent comevarg sarrayconv callfunc cnvwtos comevdisp libptr system hspstat hspver stat cnt err strsize looplev sublev iparam wparam lparam refstr refdval int rnd strlen length length2 length3 length4 vartype gettime peek wpeek lpeek varptr varuse noteinfo instr abs limit getease str strmid strf getpath strtrim sin cos tan atan sqrt double absf expf logf limitf powf geteasef mousex mousey mousew hwnd hinstance hdc ginfo objinfo dirinfo sysinfo thismod __hspver__ __hsp30__ __date__ __time__ __line__ __file__ _debug __hspdef__ and or xor not screen_normal screen_palette screen_hide screen_fixedsize screen_tool screen_frame gmode_gdi gmode_mem gmode_rgb0 gmode_alpha gmode_rgb0alpha gmode_add gmode_sub gmode_pixela ginfo_mx ginfo_my ginfo_act ginfo_sel ginfo_wx1 ginfo_wy1 ginfo_wx2 ginfo_wy2 ginfo_vx ginfo_vy ginfo_sizex ginfo_sizey ginfo_winx ginfo_winy ginfo_mesx ginfo_mesy ginfo_r ginfo_g ginfo_b ginfo_paluse ginfo_dispx ginfo_dispy ginfo_cx ginfo_cy ginfo_intid ginfo_newid ginfo_sx ginfo_sy objinfo_mode objinfo_bmscr objinfo_hwnd notemax notesize dir_cur dir_exe dir_win dir_sys dir_cmdline dir_desktop dir_mydoc dir_tv font_normal font_bold font_italic font_underline font_strikeout font_antialias objmode_normal objmode_guifont objmode_usefont gsquare_grad msgothic msmincho do until while wend for next _break _continue switch case default swbreak swend ddim ldim alloc m_pi rad2deg deg2rad ease_linear ease_quad_in ease_quad_out ease_quad_inout ease_cubic_in ease_cubic_out ease_cubic_inout ease_quartic_in ease_quartic_out ease_quartic_inout ease_bounce_in ease_bounce_out ease_bounce_inout ease_shake_in ease_shake_out ease_shake_inout ease_loop",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{className:"string",begin:'{"',end:'"}',contains:[e.BACKSLASH_ESCAPE]},e.COMMENT(";","$",{relevance:0}),{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"addion cfunc cmd cmpopt comfunc const defcfunc deffunc define else endif enum epack func global if ifdef ifndef include modcfunc modfunc modinit modterm module pack packopt regcmd runtime undef usecom uselib"},contains:[e.inherit(e.QUOTE_STRING_MODE,{className:"meta-string"}),e.NUMBER_MODE,e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"symbol",begin:"^\\*(\\w+|@)"},e.NUMBER_MODE,e.C_NUMBER_MODE]}}},xAGQ:function(e,t,n){"use strict";var a=n("xTJ+");e.exports=function(e,t,n){return a.forEach(n,(function(n){e=n(e,t)})),e}},"xTJ+":function(e,t,n){"use strict";var a=n("HSsa"),r=Object.prototype.toString;function i(e){return"[object Array]"===r.call(e)}function o(e){return void 0===e}function s(e){return null!==e&&"object"==typeof e}function l(e){return"[object Function]"===r.call(e)}function c(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),i(e))for(var n=0,a=e.length;n",relevance:0}]}}},zuR4:function(e,t,n){"use strict";var a=n("xTJ+"),r=n("HSsa"),i=n("CgaS"),o=n("SntB");function s(e){var t=new i(e),n=r(i.prototype.request,t);return a.extend(n,i.prototype,t),a.extend(n,t),n}var l=s(n("JEQr"));l.Axios=i,l.create=function(e){return s(o(l.defaults,e))},l.Cancel=n("endd"),l.CancelToken=n("jfS+"),l.isCancel=n("Lmem"),l.all=function(e){return Promise.all(e)},l.spread=n("DfZB"),e.exports=l,e.exports.default=l}}); \ No newline at end of file diff --git a/soc/2020/daily_report/archive/app/assets/app.js.LICENSE.txt b/soc/2020/daily_report/archive/app/assets/app.js.LICENSE.txt new file mode 100644 index 0000000..e56a96c --- /dev/null +++ b/soc/2020/daily_report/archive/app/assets/app.js.LICENSE.txt @@ -0,0 +1,5 @@ +/*! + * Vue.js v2.6.11 + * (c) 2014-2019 Evan You + * Released under the MIT License. + */ diff --git a/soc/2020/daily_report/archive/app/assets/images/favicon.dark.png b/soc/2020/daily_report/archive/app/assets/images/favicon.dark.png new file mode 100644 index 0000000000000000000000000000000000000000..b54f5dfa34e0be2c1779625e5547a0772d258dd9 GIT binary patch literal 1928 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℘oIO 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 |xk~oikk&D!xjeU;p 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 literal 0 HcmV?d00001 diff --git a/soc/2020/daily_report/archive/app/assets/webfonts/fa-brands-400.svg b/soc/2020/daily_report/archive/app/assets/webfonts/fa-brands-400.svg new file mode 100644 index 0000000..46ad237 --- /dev/null +++ b/soc/2020/daily_report/archive/app/assets/webfonts/fa-brands-400.svg @@ -0,0 +1,3570 @@ + + + + + +Created by FontForge 20190801 at Mon Mar 23 10:45:51 2020 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soc/2020/daily_report/archive/app/assets/webfonts/fa-brands-400.ttf b/soc/2020/daily_report/archive/app/assets/webfonts/fa-brands-400.ttf new file mode 100644 index 0000000000000000000000000000000000000000..948a2a6cc76a4d7cb692d0d08e352f126ec48a9d GIT binary patch literal 132728 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 A-~a#s literal 0 HcmV?d00001 diff --git a/soc/2020/daily_report/archive/app/assets/webfonts/fa-brands-400.woff b/soc/2020/daily_report/archive/app/assets/webfonts/fa-brands-400.woff new file mode 100644 index 0000000000000000000000000000000000000000..2a89d521e3fadb6ad3bc1738830a2c039bc57272 GIT binary patch literal 89824 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

3G|%UO|%AX>y_DrlqHm5G}x0qqtuK)rJSvbj0n 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 + + + + +Created by FontForge 20190801 at Mon Mar 23 10:45:51 2020 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soc/2020/daily_report/archive/app/assets/webfonts/fa-solid-900.ttf b/soc/2020/daily_report/archive/app/assets/webfonts/fa-solid-900.ttf new file mode 100644 index 0000000000000000000000000000000000000000..5b979039ab28aaae305074541fe39258753ba624 GIT binary patch literal 202616 zcmeFadth8u)i=EMnai2WnKLt)Tke_3y-k`-bMJjfOGz)#AO#E55}?omMFUhQP;h{% z6;WF#P!%vBO4Wi@D;7itcH~$_v6@x$(-)TfW(A~< zqUu`s@4NECExpz*aTek`kUsk13$MJS>e2E-QvO&>WUK4_$Tgd{Ke+ooQvT9K6hBI6 zn^>V}pS)y;?E>%o5ppZYM)bP}Zby0Y-8gY{V!v{?cmZAqDVzg;oG&$zB2tnQNAbMd z440Aou)N73mcNK@ipoGPSjbcf=_j&^e_FPY4Z$nLr3gFCe2-88Z9|!4vzRHTy}Bz(Gs}7&Sg#fll=xvq?H7DMJnT;`W8J?{Hl_q zeB|>X59fC%iHYN~9K)|lH=+8J8P9HpB>ahNxKTI4IGv0mqaM?rCy-VFNPlYTo9oDg za~kPS%C|%GWb-9*aml79GkuB@=&y0qQ^bI@j*|eF@5toG+s43U=Y&Z&!UAR)gnmh9 z+KfJ9|2u#Q&ck^z1`}o(MtPV~O2UlGyk$CsB{5#ei+FFgOc^)v9?E$yg9qXbJn&{W z;?hQ42u~Vd;+Ji!7%=N3ncf&nb|bya%lT3hBbhp;zm4)453_F0%Yb|g=v$S6QWOEm zIQTsoF!E=^jeKT5iJqxt%DziZylcFTJhBdyn}b(A-1#V<>t@=^mtgu8yt8@OO;f zmt`jLPRTf*0=EQ?Lzs*=`^CsFY15$bteJ+n=cZZrLsdCPoJ zPCxOkV&+2__miYI4l~lqesXZVGEZ`1#4MNl7;A_zu9CN9(xi|!f&4s=lBS#Bo(5c= zEHh=iGkzn?Sf50nj5BaDaLb)v28|>*4bLkBP>(0m&a69W)`d8fFWZ^(p3=v%eJE2T z(2oFx-N-L`I1J^$E$NHjB!TIZl!OUngkubhIiJf<5GTvvcM6cq@x#q!%YN%K%E

    $Vei8ad1XGtE2cZ^=P(AWE1CL5Kl&jXZpJ6gJ_m2h zq?2QS@|0Xia(Z(e;&(!}Bf|$}Te!_e`6$y!|1S91aoNwQOx)DBY?Dljwq(;7xJ>%Z zJcM^*YX02zOxACt;ru6qOg>o$ndO>qf%X}7o9#fIa*R=4rd^r*nYU36VH|mtQqYU{@PKIUkq!5-c>X&VZnr;qD=A_Rl zFOygHKc{0bct<)Dm&Kh>M#?M`ZkaBLH}@~zne@h3V!mhSI3d%HWcxKAe9}xW!(`qP$ zW$R`hN66b}mY?Fj@T##kb@IQ&vi&J<|c46WPC1*!}*;s-I9(>chY=w|4~jF4o?_yIsGB!72xQ> z_)Mc^%KTa2U??VL^5i-MAG?al>e`1A_b_g>XFwUS4d?@bfzUv~K=DB7z`}tg17{4J zKd^4#!vk9fk^`R@_|(8>26hhIJ+OP=fq@4H9vk@fz>5RF9C&@8f8fspe;XJcNDsOP z^+Eq&@nGp-`C!A~?7`N-xq}M_mkcf)TrqgY;JJhA1}_=BZE*YGU4wTI-aGjD!TSdv z8{9Yeox$%9{&eug!B+-)U_lJHk^z6`!L%$k&ZRpLRzYe`U^!K5m zq0ymthSJAu$FyUm$7+vt96SHmhmQ3eyXe@h$G&px>0{3vd+yjzkG*j0m&bm8tpC`X z$Nqlo-DB?^n;5na`-aPhD~DT#+lJ>3&mUeie9G|R;ZuiC8(uMd#&GxWS;K3FKQw&7 z@I}Ly4qrKZ_3-B5>xVx!eCzNhhd(|1+2LKo_YOZW{OIs^hMye%;qbG=2ZvuA{`K&y z!+#k5^N4d~=g9pd4~;xB@~x5mBL_x)F!J2U&qrPy`PInFBflGYZR8Ile;j#Z=(VHQk8U0P*yy&=PmSI)`o+-)M;{se+UTRB-y8k@=nqFzqX$QSG5X8VUyuG~ z^ySgtj=nzn=h456zBT&y(V@|IM~{!um^P-5g~lRdrDNq|GsYUn7K|mv7LT1acKX;^ zW9N*WKX$>`Wn)*2T{Cvm*ezq*#$p0WGJ`o}O*yjvXHR)!6UG{xWuS>>p!8Vegz@y79mpGN~UU>#5g ze4x~bq}15JDFa;t-JsN-fnHGRZ6>AO1xmedpl{&I1N#P21BVA*0;T?G;I9J%1LK1< z=o$14=7UnBgO!8v!REpC!3Bc}Q0nr*(+9f;&mZg=ymj#7gF8)1y>IXvpww><9vDmw zz91>}wZZ3Ws7t%|jhSiJ{Yn&IF}iHFUkC)E$yi?;q+LdSvLk zCZ#?z^pl~(L$78jb#Q1zQmS&yDJix6*cy{kZvmzL@c&Aw&7jmdC!y4}pwtUNsT+rT zL8;db-!y#7@HSBDXNGqS-(ynhf#Dwvr$DJMfKp!?etq~)!|#rSM(!H<(#XRjUmy9- z$m1hVjyyf`laUuj4x5zvdJd%?pF*h(pwxL&DD^B*>W4t7>qjrkQtFn`8$qeJjD8Z7 zx_h+Gq}0bvO8wCkO8x!lpCqLo9UWjw9i13+gHnSgrPhu$jLn-usppNYlazY(*w(S+ z*llB<0Hxj~DfLUB)Q88uHumV)cgLOpr9KTxJvjE$u|twlUmklShf?1iw}DcEHn^!~~FNADlJuX$hf{?7Yb?;-Ecy+85(*!!IKS?>?M-}gT0eZqUd`)%*H zy!*W0^giZ&)VtUFb??`_d%R!qKJ5Ln_aX0t-j92?dAE9R^xojT-g}+*a_?o{jo$U% z9`A>|tG#D=Kj1yndxrN^?-K7~?_7g zeOMpT2lapGf7bt~_v?SqU(;XFU)F!2|3v?>eo%i_e_H>6{(b#>`hNXedY^u;{we)( z{W5)neyQH2SL?d&(OtT#TXo?X^$dFkJpbkSz2{ZW?>t95KleQ8dBXDz&(}SBJdb$3 z;(6HfWzR#N2R#pX?(=-n^LfwRo;y7|Jv%&~@!a9L-Sa8WCq3Idw|Q>$e9UvR=O)iq z&$XV7o{K#fcs}G=>p9gcbk7RUGEcLo)>GrD_EdQ)JmsF4C+aEllzK`$#h!dm z*c0*uJpqs3KA@ectQW>EvA)eC0d~t(tMh(xizOo z?g{rh?m_oI-2d(VyZdeT8}2{5Uw6Oee%1Xu_bcv~-M@7I!u^8#ko)KEpSgeH{;~Tx z_d$2c{XO@$-TT~+x%axi;r^Pt&;3RB7u=tB-|N1|{R#K2?#=GY+#B7OxG#3EcCT6}v-SgZ{?pbb|>z}TFxPIn(&UL%%Dp#-TBZgGKlEMG}{cjKa|GEe4ii`1s@G2$Q z99)GIs5yXz=704!J?Fnl`@eDjAN7Fcr~eNXuS6c~XGA`r2k;b#0q3}u^*H?W;Rs?o zk)7cP)c;)ooTNH>iJVC99KgQlAd!0;pdV+)_d%75G@iXgdN^}f6Rkx4)Atdb;Q*lSRmFh&h`Q$k4gdy-&fG%u0pM`f zA)?j$iOyaNK)!QO&j&TYF2M7E<3wvv*BXScLArBM=D8h!jYQ}90Cy0b5C8c)h}I(P zL-hcZxo!>71uKbqDglVQ5NR(&+KYA*UA&cOJ?dVcBD!QfV1VdSye~aUv|$U;Mk`=D z;0V!W#Q>Ch**>DnqX6W;{4Js@Ism9=6Y^b&vaf6b93c8I-XBJqkIX0PeTwKRz}0a8 z(q4l$T+>Ii8F@d7vObFXu1x~)z7Anqf&jR$?;^S(A8>%^M#SGZPPBC|(M<@yX%ErO z4!}mhA)=3=yksq42cVzm7SwgiYecsq>{jHx73JNwg=ib_+J>~-juU-+HDDjnCwc+! ze{w(3_5|P+qED?Mx_vX?d7@8mBD$lS=rhRs*$77Otcrc zJc=}rt|xj7Wk1$W^v$hcU7G;MiN1||-$C4W5WfE@qVFRA?8U~ zKHxCX^P7l%+C%g+r2lyofVvLtCVHVBfb=gq0I25|tBH`D4(}!UWhDS{ze)lIh<@Dz zK;#jWeWVY7u-_ovOKXWUbY_%q_)!26B+h~7*9`Tz*~%UZx5qQ4^jTUNkf zqW|h4dK+o~2LIpSKMMH!QKEmqKd^&na4XT!KB8mWiH6}HSwl3c0bU~-TLO54X#612 zJHYYXdO$zXKX(xw2X5(n0Lq#ehJ>;NuoW;)Lg^x5Z2@c}VZ+?h%@1so^gx{rjr9!8HKHg|-8RNrVrQh^z)6UH*K)!z2oVBnmaaE&%crp{^p-U5s}L z;!2((QCdl&3}r-%NyJcgIqEL&CsDD9L}dc-28k-vQ~f-N8lHXopuL_2V5NBJF_ z0mCHbpq{x7z#$UzkbeHdBo-juLJhDBfHYWVL}DcX<#Ym{&V3{ncL4U2Skg`6RN%7I z3fN5Iv?z%#r0sf*#IijkmiGY0VNSJ##OW=7gCx$_26%4^{$@e@!ombL#;p|2)K$~S5|ncZ;xFAqVgu^Jx*<01C2<*WxNHZB%ew)G zNL+zBu7LlFVG^4*1CZy+l_Wl_0iGxEk=ID{wgC2%xN1G%4H8!a@2kg2T!ZvjFT_Wq zfVW6o+e6|yxVJ0;0PpL8&-F-m1M=N4Oyb5AiLJXx+=RMsCIIlh`8bJ>?ZZKY74R^L zTe?WxiZX6}io|U#0K7jwK;jeoNqjO+VtWv-6Zy)?60i`947Jg zEhN4XC$YB@fPQ-P4ib;;Bk@h-*@tq!1zf%j_|8)#_OBuF-IXLB?*a^y_}*Ta9tKG~ z0soUJ65oFqVlCW1Kv_RTx*r}S@pKZ07x1T${~46|Y(3x=5iHS)`uTPehw=fa?*)Xv2;5&pIltHjIF3WJ zw@CbQJpk`t^^y3s1Au%-P~LBzC-G7Tpr6Fc+ey4qOX9bP|1HY-E$aT=9VA{w{A(LY z{C+;*Ac@y^k@y43?oW{TQxtHR#GjG&jkP4++(ZJllj1LLk@)Ko5^wDw@n7)&7t*|q z_uB&`jw0XR50C)=7XLUzVrU78V`$4Uv}?GR#7HIJ6%u1xNQ|#1@y<2?%KPVT62}pC z{52Bqp`J8g;to=%n-oz?in5Co>wHpdU8L9#kfI{oQAvt(m=xDxQnU_I^f&{W_mWbS0PH8Fco!)p z50g@w4?tYmW>TW46Y{@O9s~ftiWX8TeSkhvs^PEMLrN|1nXw*#I_iJn0x7L#%s>gqySUE`!I-$=@edH~8@34BiPCgqGH zq^#OaO7~h)&fG`J2TwT2jt=g_I8h)&P%l5q=)pdp^>wT?5!l$~u&} z?he3FQZ7KA3kFEJFb+VTi#h;rkaF=#Qr7zbdr7%uGbxavl?}jkBXHcl=S0+0^8PWdRq5mK(L1Z*Vbx_ZD~QnqxF za=jJM0zkPp0QVamq- zDd2Moc%1Sn)O$PPZr@MJr}4f6_}_u}&m1A;vj<4|9O~GCbUV?WJJ*r|{-)gZ3Msqb z-*p^D!ocb7eWct2|GiOCb_1W?yGZ#w@cBYNDfjIm<$l!pz;05$gmB2V%7bxI9zvO4 zMtu(>&sP(qJc6?K6a!HA*O2z>Z;|p1)W7!-DUWU?<*}8dd^4YveaQ1Il>MDGm`CqU zq!c^OB_jj@C)C^&4h8E(d237CJkeTH-PRmy3X9Q~I{XpGfFt7Xc**CFh^Hcc@rjpG z5x>LXkECAm&74X2gT4l3fxS@_p0?(uQW5e8?d8=ia7S8gp{(2A($+3sve}%vv!lDC zqt@q}Ak*P-iXSQnPxlp7Rkc-FpIGs>;Se@go&|HBCZ3jc6i^Ji=5Wv}?B$K3dV#Q4 za7~QAit4JH+FGj1?LqO5surt3b-mirb4)iD9o9I_8;$dQ&@={^e($?MiUiXZv(Dh86y>Z4B)xlu( z72=lKt#!}4T+i2St*vm@1cNnB^oe)kNoBTp26mz7lcq9-%Zh~UjY73oFB0hCMM7Ad zwa!!S3~Ku21(vA)w%hzsOTp#37Q9nDmY26JtW@h8?hHhnOP09u19xuFtCcYKH}^$K z;2)_}L{w=sKd3f^OGMCK5i3Wh@Gyp(+C@mVxVn8+aWLH%EMC>_uUJ`;l8wD$Rr}0f zadB{F`zoK0%XJ!sizGGDJUWfeq6_E>x{hw6&!G+IU<_)VXl((Rl!%!5M(4L;Sm%jQ zaGq#dAY$e_lgn?{@tEE$TI5Iww;GiTP(|*FI zJ+Ebdz0+dh6-nKd-sjSTnigcxU7~x^mp&v*+?4Y?*rRDZ+J5=GBPZNQ1ClnVXd~zSej!iYE#@$ek{#6T=_--hl<*4sOZyO zee9d^NRMZOkS!A>$3BZ|l;YG$AE1lqYPyx~Bnn^#XE0{;B0*i``a|v0(5?vT%9I2q zZDzun)oB^3rnOU@=C7KT{%+lM2{#0f$5preQg-7JoeYjzRfjDT{-T*y=f28h6t`tV zGeIDL7i2;5A+}@ubr(P0MJ0yI=rb8%bK0$D;CAzk@B^7VuAD%OMW(Ec*?69A_V>}q zD$F`+pVs5k`ztU>BRtoe14e%_)0RAd!!mC0gVxBj_?-UBao)tJ$-ek5yF?K`xkpUb zn=UP_!Rw2ln3BVo(sRuBmQW#LQB(^CKKo z!Q&r$L{+QQkfV3N5rRWa|5gn)Bl}qUYQBjV;!Ey>{ zD#6qb7^qBJvbdqua?J`ii8xLnqX6^u)Auc5>(xEoz1`itf^w2+9qE^+uW0Ml;ESBF zI|oNMRnaUHM+3Ki52rmEj#>XTF2MR<;h>N@@e{!|t}|#3Fo1}FrK-FEowE?5jm0%= zS9MD$7;bKAYi+5nX%LIVLZMD&JRz|o-m!DT;;R=IHbk8vo6l-heFc8kMN3b;xH76* ztv*}m0^Jp5V#7n+UVg=b4LdupUNU3l!ie4GEOzACw370g(5V++bXv`6`L;YqvD5Yn zCm-Mk--5`8EVB`KW_b20(9*QoHl3SQW!6SxEo?@5W34=i{}t8gRO9^U&boy3%g4TK z;H0b1sirs>j~=Jm!%jR>PBq=nZV{E?>7?}Fi9~6HA*NsDbzLFf#4}<*JWcbV^@9AQ z+EvIRb`?^Sy#{Mhbq&93AevOSU>>$Z;wckt?X4~CZ4vO4aD?BHuvZ{wM#TE7)8enT zJL-zco$YO|@}iked$r%ZTatuc3BH5DrTX8#!j?pVghT{DOg`ixlNLBO!CbJUZU)i zi)|GIL`ZWLEHsv99IYn5kzy~8vdFhOtOuNGuj+&&!9574c+F}lu-a^vzaj8%7OUM_ zV6ncZmwV1rZ5=jM)GNyFhgGM`-h+6IjNRo_AD)e5mNJ{=Sw(r)Vk_fZhu!Yw%WSG@ z`!t3GW8#>29&_RV{>7a;U)(8HTkUh5Dn{13 z*lKrJ#Q_BFd~pxlwwXH^+xr3euzuLXV)y-uwhy8lAzUUvzA+| z`ixl(!Nu2f-g#-+vQvT>VUaQuH`-KNv|+=Y8w&F*NNKZMJo$bXxay^MMrK4lAZ#kr za%K-WlU4&uu28OelMLKMRF$G+YfI}w3>I*+G=bHyRLNMQCDk>N;B1-8*u|I*TS^?&L-#`y9Pu4ss>$XXEn3y# zL@UJyuR$x)-^}`&E4fLz2{8s}VpcwmK$@=sT`r;(STI<;!Ul*3nwdWFP=G<&r@g^R zF{v!z3WEQ!7qCS{{i^{f%e0FIh(vsbwDC-HDAd!?K*`m!cY0=G8e* zbFAe4ky}Doy>f`wm{}ZD0T#pzRP11!xcuT^{<$}w+dXss%>LqFiv4(WEjstyMO|H` zGiR1|F|9hJF5nsT5NH)EJIYphi(XNVwZ<5Ge>Em=1Y;k>m}BQI*2Pctmg@5sRc8V%2^Qxx6d5`Fhv z9(VYy>a0b&YoALmS5{qh)heZ2dKS%6t$s(GbqB!XIIeVWBR@D+n-%$~yMkD<8?Yv~wLm&rD00g?5-KPN zIf71`GZexjD7H*3KcLNs&(Lgkf54_SXtsbK`wq!xUsMv}+rYPm7DB6ff_kea>s_cA zg4sd{tUv|ALR)cAGC~3olq+GjC(e7WCPk?K!K!ZgV&TcCE6$ zp}tbH2mCgBLE8x$4tZ#zAN1b`$yg;fB)tH%U=`?tI-&)lIaCvBZf$Q4RkXKOghZ?1 zuYw=m3V8WnMGYX8Oe9lyr1>GD(Vl3cClQU}*Uuq|L<)dN=}ty_Qqg2I8YQW0!TOe* zQhyQVqJcvrcuPB0J?IN&`7WkxVE5Cy>kc z{rE}&dQY-_-qK`NYLgEZ2M-1HBf5S_uf=OyZEm8RlW2&}KmLJK8pf>ENYA_)hv6gV9VklFCtnXP_jnc%GK2})x+-yeS^-P7ps93*K z*7^`Ic&uo7(LqKBC>Sz`$s;SEyXgQH;A26Sg$*5Bmgz&k37(FYXZgF~4pg_tfxube^IM5=F{>#Gd`VXR)OJ>N>PT zR8<7AxrZBtok(v{Ri7t-be{BQdV2a167TCmGCe5Ax*z!UQ6VJNnZOQfC}YLlI}aLH zg++t1DRP~mPHs{Nt5Od)b&Y2ANcJj-owt!s=*kzGC#iAlG(-0AT+)A#JS1^ti*p0o}9P-5)S!FM4J zO;+m9t|Lv@fq_Hupj7zz34Mb&y{On~`#{?-x&A1&2Tt`Tb5`0dzy2V%K0g}G|KP7e ziz-`|%6+E*J{Yalb1ENA#In>S+3K4$5(vuLlj;7gW1#wr(}p zpLLk+_`O_5PS6fMQOO7z1}S0nFys#QHsdUSStK_Z!PwI9P82zK5*kE>+PCC0=1G3! zZ!s|w=TAok@}j9p@bylj-|ORS-N62zCvG*mz|>L8He~c2)ILpDXwHSKJ~3i6EOXAl zBa-2XvSl9L(+RA_4qN)&N%#GXP8z)lokZWHyT@Ux=0tcvcFej>a^azypvgu_zHH3b zEWXq0pYAtxqda9Lp1CuL1B~8&KW1xrqx9C42TvSeBpfg|` z{>$JgSu<10w0JqLMi)+Yqxkal{xBWPVgXGR+e?+EU*qzBle`G9$k|A zbj;1s%eH)aPnrJg?7pPOX6sRdL9s-(qer$$65C&x;wB$|o{T@c2W++nY&PX~%$h_u zhv;&hlL=1R9%hp*&`07#;D6elBD6(Cn?&m*zQ*L4Y>IT{w#R6SgPV2tB)Ykcn4C|^ z$ppq4fdwxCS>Ma@G3bhw1Q`LR*_PQQwu){kv>DRM>%Q^|?}tSa0!~(ZsdoE=6BP8j zS3H1nAtUobD$9*Pa-tbv(^-);M-QRKaGLMM*@st5RWE$GA%rRgd9GA>CN}Nf zWXKFD(S!4JKgF<5EyYm*EDUgZpx~?sIwS}~?8Po0X9zF&+UjFaSjA?w`qWtw9_d&k zj0-x&*IO=VTUNb%-E9}HSJkh%-Ic0}kV>Ua@4Jm3_i9qs zGs&x}XHq*ob@r-yLdv~@3QEhff`Vp}w zKR?|UncW=vFTG7atQQrFzS07n`-x@FKSIuVP_7dcVPcUx3}Zr8Wi(TAdl?SxKqnUm z`60|Vd&+W^ZSl-t6yxO5l$}$MX}$1Fo8`G0G|`tGdz3i6e+;`8qcy4_ATpW}F+8n< zerxuLNT8!L9V9)|#uNJ~@cIR8bs`^JTp26R`GJvE==~!qHm7&z4yi0RJET)-E~orV z(I{0UbBRvuO0O}gPGqSLV=^&@J|iRvCLkl*SBMmLok`wK3Ov)j zWd)&q`b>RasGuy7;9!0<&xxdbzElL~i@>pH;!RN{zR2gwMlq%Vj;WVusdyG<(T5j98;Yr z&P*xi=w#jC6=d%7EmNxwi*dO`Y&)Q7Vadd4a)Z|$~$fS%6ML5d~3d##~@J_Hz{#%n7%?gAUl)sse%g$OpV)M}pnYE3uw$(z{ zyN0zLXl|X*6=>!qlYlDMv{}HRylJ)oHN6U-8IBZYT3tXhBJ(4KOdD!3M~t~usoH!- z16a$_OWdXKxi492cpk4`SAd^wT^_&&- zKBZ4R(CcRV)Y>3a(Pk|b?ZR$S?ALp?w+K<4-idd5qS_?VP>;JhJ<(E(mk=%7Z?G!? zFG+!y;FQ*w{~0@#Fb*2Ps?ZH!T~N^rCBlqEat<{DzOqG>@tH;Xk6Tn>F*piGGrPG) z+9+HjS&Upi-o%j;?UFBui;B9Yk(#-M8d;q)rff0V}}WvD{j^e^kMf!}@~YarS& zX=`IFGmWfx<6S|kpO4{AQp^K6b%z~jUQXR;gKgpuD4%s$RF$>AF_!!?+;%aJ`TT4~ zdH+c&_)|^=)B8`31=jJ`a2EO%K5aF$%vjfS3ly_<^bO=e3kVkr=D5SLPb;3iq$%RD zhTIkL(x#Q&EybEp(D%Dt9`73AE|{69({x9{+4c3EGYXud+v|aJn!5+~LDp=d#kfg| zGNo9Ac_Qh*iq}pacR6n=%3C8m7q|n#JNR(AS>-6+x5#|WO(EU2Rnu03yhT*o>eAs@ zjn5UBp+~bpBI`OqWH#s|c$%k8W|hFm5Nu4G5Ddx7#Mr`r+@T%dY6C2LndN5%38O4Sb}$N%rEvcV3c!x`@5tGPd@LU5qLFQM8Lvew zF|nlq7J9=LsSGQ=q51V@ES9jRdfjQW1#Cgbr!7KvSG#p#`LrX55S#O}pPh_S-Rji1 zt8D>ixzlD}{g7MN-4CsXaZ)*s!p=A&8;&fw5x_Th9rN-W%dC)!xnAJp97EjNZWwKt zi`HtnG@a*wK;}?w30SL`3*}34Axdp`ySLj_6{SgC0`>uY(5iT-0d`uT{AL_@VT5dW zfybG8luYl=6WDUW#2_5u!+bu$k2SM30xV3VJpymauueo%7*Iiw;V__vVN$?T?`o+m zZ73>gD6MR9rQbNGB9`aQb4UK*k3{^MKU$FN3k3R-$d?Fsq`IXWln|WF;_`@EStaeZf1o6=KdfQCz>7H!D6yjBjJJKE)zFrgtBfwX2xq8GN_pwMAMH55 zs5M|K$amYE(ZrcIoyPmXuYFX3-CX0Ud|N;~-g(AtPr!(!s=h&Uy9%^WizG1inW1a>p>I=V8F?)6ej+WcqrB#JR)q%p2fIU>` zDi?c-o9dfRZ{#E8Gv;WT|Lmgbsv>{1u(*8Yf+{aKk_BT!Xj>9{-y*i(<2?_XN?mT&o4^ate!6u4Issw8jt2I4*E1J&;Ty5!@ouD!<%V2&$spnAMZ0J zZS9d##fHwu!c|dT!^8pkkWc2MgoPCWXsb1B-v^5oH3CNsQ%@)k$`J{Vr)5Uf`MY60 zrbjNb)Fi|Oc1sWjLDu)aV>*&~t?eP1!V?cI(^tZlQ3Fb=eBVjO$_F0{=J$pKmh z*i12{!%(Uza^g9r%=Hu%r=!J1o&mi>k4&Fxj{JB$U-V&D`uMcTCMMFRo?#~FmB*|O z498$R6&VM17$8<0eu44uIarwx{iU6qrB`2Ob9OqM%IpnwHWs->G%8r=w$*KzEriW( z?R45M6I9bwbHL$I_s+Fzj!l~!ntkqGi^Fbl96(#4`Zw z5Cyp5*pZ=DEEK>CYf07(5islicf#dL8Iw~l%j5Z+1BEcRPZ>L6X}OQJ!}v|H;Gg1Q zO<6io9E?jvo1t#QH=NP~*pR;>v)>_~n@{2voEN+II8XMt@sxD^s+21N(1O6?%-o5y z5pSbtk1)ECD$`~b`=6SaF-me3W&0(>vwo6~bXxiDNw>Rnp3S<>yFx2Mzoh z8^zcHyH^E|3wRL+#A#btaSpzJyDb)+U|T+|EJF@nDA?vaY>r_0FWz6) z;u98y{jvpL)w~IIJ274@r|u4LfX)(xLFT4RZ!_f!R>p9w#643lGP3r~xhDjZBOcnY@UyO0~Tr>w;0C)Wma(%6Q|WDn4r<{iR#B*RO5?djPL6WiaUHHq;f0XvNdBh z8fKdDPnO3!Vieg_3iVd5A^$=M$1Eb3iZ)v|+y6U4&>iBgrtYvgTy~#ZSgpeCv%BEc z^ISHE&-X853-hX-9>9ijzv_&6{H6J&nxnef=`PDJ@q3~!)gQClV|fl&RLd(VD0Mrl ztF5Ztf@DT)x&21JHCz!7%O}L4|2Zl`=uV5OsZL$KnPpsY0_=sh{v;?KYI?N}GsIUVS~qDN^aKCC*52CvLo2Lfdc=m-F)3<1NTr4_;fUm{Zr( zkg=4;?O4QbX0sV%l{z727F0)c*LIPwxRiXc-KEE?wV6_31~WU|HS=vPI;+5?Z&Z}H z)f!injk>FHe%`gZE6&k)NZBx@@R{IjNXe%F8M!v`4H|iI8Y~Zd(ctc_4GK>`)008O z7LHWcz|IFIb#@g~Q31PH7++Xc6)&pN(ywS$MRBWM$w9gc^$TE@{&FDV=1LQaI})hi z%c&h5v&z+$a93#|D|-t|yA)S-zFI!3qr>DswYPX2GiLcB5#OvC4o@NX8}@9H_oX1^ zH{v`KQeKtpBRn#vE0PiNjYH<{2IknlgSkVfV`eCMIoq@|Psbg#+V1HWDqhUor`R5g zbVp+7TF>!q2DNx%%*r4I`m82D1ShrWBvl|rbb*mTJ z!{|Y%q#M{k4i{6DNE7bIK&SXhxzp)TRK-=(xpeNlS#=(7-TOkGu&Wlg+HyJcG&YN( zXja!c@nm_O*HbrZ-rS{~H7?|LIGyhcxma;~FoiE~v8Xny(CXI#HvwEzkXH`MJM<8e zNXmQYR&00$*e_fW@%KP_AQiAeo6zgiX3smnXuht-9Rcx(HIPaV1U3d7aaEsRw03Tj z+uxhVvIVbKhQ7?p5*es1cj<*K3s%!cQC`8fm_orau<)8{(-Vq>a}OIEwtQVXMJO() zz3o*ME6QxD#j+IaYwA*(PJVrh29CDWg2t7tsHn1wQmac5r{L6p=UocA?`H@{7SnWV za?@joX}oa-CC#)4QRGu+Xa&E z!%cMFlY&>t`{a@?L7#@WfvT|HW!)mg8%v(=3gk1sT$9qaYxpI#E)740-b1ybKUnPB zw-1%Ck-I`;k12e-4=m=oS+DU2=-(eCzEh8T1a0P7M#NB4wnEopvKGF#Ab0AyVU}c7 zYjt(&Z=_+R{kqk5r%T=Z@V$oj=R4SY&i&UcoyUo)KBBsu_SM%x;=%4yeRwl_cl_M& zT28zAexoly2(0t*LepI>CG(sa%I&R*m8*Po1!tM4&Ky-4bF{4`(;G(HZS7h4Olpsoly3Y2nu<)J8rFsIw+OT<=R zamDJ9<$0fXh1DgkK3`qAufpFt*XOG$>M5#fU806vpFb!H3m5lbv&G+P_yNAvz_Jye zH{dJ=4{QpvJ40iM$sX21pCUivVD9y>;X@8^81eH4m&3Ct&l=Ph`YgrHS+ktQ7T-cW zXw6&Xakv_$$GVDgVpFpwy}HVYRXtNwk!#k}*v7`3ii)zjJ$zOPdP{>lGi~86EdQ{F znaL}fl$}676?ZX_TpsRE6Hv2l#%Gz!0%$Xv<3B%}g1N|CZ z@K4Uo>HtvZSl*8^gU&4AYyYEu3;gFJ1Dtd12&%x^Gv6qw!7h*&iaKD9MNHnr#S+F> zH``jo26=@4>dNo&NPlmoR9vXrRQ!U_VRXoIf6*m%23=AcqJA7PALn#1f0|Zj#j(Ze4DKoq;I6U_(t7~5jOAFLXM<-g03)v8 zGYET2dowir6;&10xU5-aR}spG0cr(qgQ>wt1x^T>?U80^533_>?RZx;hjDpTbnkP= z=f)qkJZZ5!DLOZKD_YM=zg?+s3ZEsea5}HHSl+W-&F@;7ZkLQne@Uhj(Iu-_A527X z=c;dQlW)cOO>3K1JP^fSY+)=>T8?MzV@R@`!*Avk+<)K$Pb)U@92HX~u;(ui2<)3d zqfi0hP8%-@UPB{Drr0ZvJA*}~-POMdv{nUvCYM$UQj=O^Mh@cAB2>{_9%<-rJajSt)`Nz z6wH_bOb@i1H^ryPWAC#Rw;6LkBi1+H;kQ_pd95yMqt%L+C6chXtbU8NYg*V^)?So| zKT4faKR@~V0?;qL-+iCY>a=$GES5Nm@>;FoMb`4up z#l$}$|Ksj4-;x7SL1`y%M=StM!xa84Xu_W;)Vf_yKqo3vrS2!v?|MCs4u|&Q6K+@p zNI9+_eam}Yd7rP!IJlHM8ysQENhxidr=3UeG$~zyXmKS`unXgoV)A1cE zuw+~_oIEw)iy&AWMb9d*v{h(c^CczPDpg&jm0Z&7^T2tc;BYpD=9Vcm&(w@lf(_d1 zSCZ%-)s!sfQWvCMlRszqbY|7ScDAi~Ce+ld%RA8*rm)=b#{^6<}pai6b*( z?f~+1uDxh+yo9$6CGo{RpT{@10_Vtu*p3+UnESknt=^5(7deTspv!Mn=#WL^%EEi{ zR_^(5n{h^C=*U=+#=9uUuaR(wKQ4fDtdSR|)z>enzxmwyYBeAPv_PJa2!-Z{7KcJM zoMvcYXZZ4e73t#aLY;LpUgzG7QXH&kjuC4Uq?G-5ojEE zhB0o~t{D0cp4OnB_7*%qI1zq?f=XdYL(z)X^p5$f+h(rotY03=FRAVLy{)pXv~|Vm z`HjoHHcRKa`bu9%Eh|=(iDAe@hcMrY(2JQ9&qW~I?3kMJ15STfuK_KFD!v=8otb`d zW^MSR4qmAb^TYA@-nczsudi6Ptl|gv$~9U(?!D{`hpVs8_)M9w1d|eA!|Wuq1OMyu7YX)c>-4 zT`U&+UN{jBiSXy}p$WHp2ec#V_q<-c*88i%=B|RhGIZ~(oAYLUY}U)=<>eQ|z8^t5 z7KQI}yJ1;*7t%YP^v(2oy)S{H3irX@(yi^AWsYMC#+eOG|6-Q;r8VA7v%Fj}-S3mjV4qwDdrs^Y^Kspf zqwwfEp>uNW-y!*LMD9dRqpX!;*j(8&@Beg#m+LHFtD;DZ{etyX3wA*cN)uH>W zxT9!+#~yJw=D2O*!IN}NPM7sL96pCbI22nxJCio$mDug&b7C_}1!oV#65WUF`PQNyO|#pZmjz;hObpJC ztc7{baHgFGUzXoeoOZ91wb;@Q;r%NYtMV3z>BJpJ_=IVpfBbhzet7+;p)FFU+niwn_^zb|1k-?^vT`}+F&M3NtU zS#}AAm`?We^ksf#Jt>TPD$7ftF%2~0YC;*dFUA`RUDFNm&G>dwOFOS8YI}{^?~6hs z7mfB6wYC-k#Hps^A}pZ0@J+n4olda{?|C0=K1cM(v_4;tOj}g+UGqJLFX$n)^K874 z+WG7`%^xHy`XB{4lXWe8?tm{BnRHnP?uw zW7$pud~%IQ1dHo~`g%QGFZrEVD__a=^*wUHu-4ZyU^PKXoZTa7a8qxVGZxqG*Vg0O zJMYIZiIP&+8pMhggH8)Q33{2btOc5(-)_Z(sK_X-Y^}I$hCvL5l^!-zeJ{mNU!tn0 zs4DRf`JpobwPhkvC6dNh6L8X=!2Okd_#i@6(Etk}-5Zg-KT!nX3*UL74~jVu_1qXo zEJRr3r2$EqQ1Jb#Tk!p=TbwRI1#rTJ>x4$09^`S#yHJo(Fm>hbLd4SP$xJ;{^YFTp z66eZ#jQtf)`EV+eN}Q6L*{Fw*=W9kD)`S-usf@p` z6u}5By^O!a1E=giStj*yU*wjUTS_(~_qT`oMT^8io}^{_JCdme)%IsaKgh0_-t}9~HqJj%x{;QVQ^-4q!hg`Ty zlBfAB*Z#^8(Tl_lEilhylM3hTn?#Ww!FPqNR(#t8pFpu%l!7%%p3`H8jg?cgoPCMg z89KLC)dCzH(A4VlLr%0@%2m&ccQ9W;`K+tOaw?Zs*h7@Ewi3#HG&O?dTwb-5I%pP@ zj^Kk@FfFdQux-N*v2()(r@5Tv4rfy*e_X6?dBH_6w#)do^D}(nXV~4DmQgjZabUSO$50AvE7!}>a+kn1cU!SGMpS%*?o7MW zd5yCOUmTGy`RLm3>)L}_ukNFAWBgSyP|!n4#TI0>u^#pq5`7*4tQsZXug&{ ztmSFXIy7~_?y?2kx1#?i`K1>&H>c9s7=_Fp+}MdVx8vhOtk6Bd)(kVD1mEl8&l8z; zM6B=SJ$Xi+&H9tfq9nKKibuRZt7WeYtNocb5>Lguvhjiqu8pKUnYSm<9iQusz$9B1 zfkz_Zog0tGyC*{?T}=AY&XsM;W=Z?FFq^4BdtF`=Z-CxFx@15#E3?r)Zb_-IvHW3Z zvDxSz@(Jj!RY?fVQP|pEVAVk3xRkAX^PFY1L5pTBXm2TUXd?8vwb;b1{apGtUcb-R z7%Q0RuxSMmo7Js4AAy)w?5Th`oa(^;>IlP>nsS)QRqDm6%W?4yt~_pTp6iA!x_)b{ zu_WJ<@6>cA=N>mwKrZ32lgnFj zBX9Q3%v+v!rc2)*iOrOn!#*7P%Pr$}{c7GLcB;bh7Iul<_@r@^HA}U%bj8z z)(S4Y8e7FqP^7_YpB6pXFM5c--AobId12ZB1&DL_rnJ-yfStrc6)m&DWQ?oU@~Sio zcx^p>Howci(C^H%^{ij9d_#Sex6fNuzmLVAhEBdAZLh9&ISO&~;tPzZ% z*dwSuhhiy;78H~gTNMYs-KZ*_nI-i$?tkNKl*F^t$rkZ~zkhF@kD5n!ylKZFEuT<= z7~~NMrUCPdG7vlWhgym|h-e#6gN%3~p3W=vM>i}xZG+Oj%P`%Z==PW7RpniE>ctlvlaei^m8m*|Ia6#QwdDVqg-6+7xm!_E~^<(Yg^LP(d+?c#!&buxM zMiwY9Baj_%+a1)!r<4YeDv3jPK3q@t@Ckb`9yQGpdPOoC?Z$TuibYRx`YEhi zaB?3?zWNO4#>Oj97{xUQ+j&=l%^%aT^-;7RdZuOzgJ;d>?&+Q0*KXI!s5+eTtD|5cZlbDNUiUzu3wz*g>t|$@ebOW zL|a*>Q3LKf$v?S~z$3u=SuB2m7}i4UFJn!ZQT7ynrAusYU9qAy+EI(f6;@Y=(-hOt z=N1KOa9g1x(NX)BOJ8yMirNklO+w9?PDb-p5h-z^X2ML#=$ndAGk@=tzr7Djd>h*~ zK+hz(e&#HX=Q6q+rnsORj0Lznwzzm=wj%_GU94w@)oxDwqyaxZ^lBPUn0az99mDV{ z!QZ`KBh7Q5nhI)$DgAzFGy#M9M2mEp_V}(s7+@CK@#9xLzM3znaTCtirx$lrW4sN3{uRNeO*1O^>SP?%T2Jqa%@SSva+4zJnd(4+T*922R zPHC>y*4h)5Q!v`kbI^yaQaT~`OFsG8FS#{}GrulBS6TA9dYogJZu-yJ#6VZE9sp|dNi4~~IqtW+z-iH_5JyF#fvDD}ucj3dH z_uiWisd#QqT178q??ec0+vXkO5T5_y$0qNkyx=ukEIhvIbmiTrLrel4_0(mGsK7SLBF z;T_GynK(L0K`Wof^i-!q8Dex+qY#|yEZ-~2<&Hda} zZ#8JETIuBa?z}|Tk&M@M9r~!+jy0lIXuYsDb&0MJ?P3N)1x@U~t0CWY$ripuV=lI8 z+^x%@gTvS*sy6p5XBUx`pZ#Xk9~_&beXs@072nRn7KHc zU=}(&A+=;!0gBBPlpAB!Ux$hB8*Ht?fhv9r`_q6`PvA>Z%v9-{r%i-hG`n&Y+x(|w zXj?cg{-D_JIf0T=wHeBH&pj;Oi_p14Qsp0W?X_g-%>{Yu)2iLLyo~3$7 zy7wWr^l^PaBjvZ61e8jii`;GiS6YTN0-cdh_X63h6{#Y)tybvgw_NFUl8!P@oToe% zEuE(17UlBIvLBIlxggQUNEBavQ|i5zlKC5VTC|c_xynWQ{HiPHBb?`x&+NRBJ>Os{ zUw>t7nNUYs-a0;uMGpgm$}qjYOdU6=Ozq+<(3j7xyF&W8E0%{#h#}O)d@b5)8AsIm zgqlve;C9@)Z|wp@&)&90-r~$ZAMp2G{$5Nl6IEp%>>qgBT;@wDJ`p?RwSSjqAC_kX zahk9GgZwEO#@@q+(nKb9@(E~18+)c@jq`CrWR3+X4@n;=Ss&2Mz{gDUCI7(tHd6yE zwy)d>gDFo>vG3ZW;uw#v-{I|tkRQR(%6FGF*om~!M|@|q3=duDdiyI-Tb8%@mFLvsJdKtmF_#l26#9#p1=DVL+qd6tyqNV zC!fTS|AiYr-tmk#)98TIhb)Z$l!hSRY$>r(CV&%Nw?JllZP(kn-qZEOdOSXG?PwV( zvax*f0**WLq&=VCc0NCNneQr5@|6d*T*0<^gOtjA;p~#T=7lRf6WoNv_cU4Z{WswC z{1I~b5x(Fj#lLmiqwB87=ht7yI1F+OnBe?pNJ30N6_6SeK&c|ycbR+x3S3D*T&AZ? z_|K+lgS0hRr>SOt8$(^s12M3EIJwj1p>Tdjf(a&PgpI(*4Ae;$@T(A5; z_N$S-p?Bia}$Z%o^(n(}nNmff2)_CYB_JS6EV2-|D`Yfy_Z>ELv9 z$rLcnFJTcC3dJvjJAD89C3pM>rg#AI&c#5ZcnP$!FVH=tQKGy^D&iPFue=q$_7Z2b zONS05L7phkfDe(y9qc{Mz}%-1%EsqxF`y?zW}By-Q9asfuea>8j&s(wHrVz{UIGJS zzIC{PZ#CkoC%)~e*fmGI`)uoNw*58>ig{~c!Lr9&N4S7HG!@Yv-^YCX4Inl``w8?U z3<5^tFbybb(7zI3*upYDsJm?jc z>sqfM%pd{`dXbhI-aEeWShp4SuD{kf3b3HZ&2+C1CltNW%(`yYyfG?4gvgKa^N4-^ zBhU!4`j{#qk?=Z<6qujSk9%LViiOOD?j8qeHN9~t%3@(77r!t#O6C}rt(O&3e2r}) z!HSOZ(y|VSCI)4hZ9^IRx`R}#4jG$LH=!p|GDl*SS%>%B`*aW`=AVCS3nQm(k+A?( z9tb_}!I`l53BJ<&(R&uRFwokTf1z?=`1wBckx`c!KZ*uBW)N`K%k5$A!YSK zd<-k=a0Sy1>O1K0#z==Zl@1Wj0zaX+zkZ0NLRO?gqs9DG)X_6}80O*a-`$6OUw3v> zHd`=V5z9qz-uw*h!g9ruiwXI(>4 zT|1Q3)5SQh5iY15ZoZv&qV6j{DOTW%z=QY__!jmy7-U-`k05SbiiE?E&&ZLFB?{u2 zJcfP&#|fA?{OJA+i-25P7O+PCqJKh0F5ArYi>^0!ShAFZs0dfGpm<}EhJ%e0N zK3ES0&mdf*7A)<5yz}nd;9w3aJtrLMOC);I8@m&|$%v7#Hdv}Lzjt%By16QruWuA5 zdy*;Fpn>G1`+Gb$l8U7Bp+pRimGJmWn(rLmG&~Hp+2_k)gI?z7CRkoqTeTq7bd;}E zmSi$%d7gFJ@_7F^PHJ06kdG#N)`OM~xBkN4<3yatjS)B=Q0}wkt_#eELIwyTyZl_6 zDb=4;7ci*Ccb*D6M4!XXPNaL1Cj5O)BtkBI0Q4hXn_h@_^+7jDyh&#{rExCsO~S3A z;Jzu1MEofdCEMJ2eaPp{Asn;P8zf30q9Kb&^W z$UA3sRo0&S>!tL!he$Z+dxVwPs!Yx>n9#{V)S@o_`CVs$iur+LcrlD57DyCwF5LX` z>lW_W{a@b&b_7?ebQxExldoUcg+?PC=ogg+#=`-U27T8z#6gAy))$!Xnc(?zi!2tH zdII{K*hD6ct00D?&rc$Rt^jM$JTe#*@z zi7?`sM7(jjIF!$o2U6vck$%^WC5G*(ClbA}p7H>4!OOlnM;2s!ST-Rc1|(dkof|& z^53%e4a1YisjLjwdO@Pbp@|r(kzFzY-dfq@XPm&J( zF-$Sq54cmTUzzJ_VE9UZ6f9hD9w>CK31EOn6hM13fLg6ip?zs{dZr#^-VvXoe0}Gg zYNRLOat^EEKCNJ6jkp=Ibu|&Uw8B=mRLJ*Ro1KT{^868D>GvVeLtcsYXz^@cls%vS zqcm&vD5~Lv5*|F16ZSQcp2^XkDBM=)XMS6u<^0%FiSC9ugRW=N2`fQ?nAypwJi zgyVr|P+ty(cgXIoQTJvYt5e#|+0(YLGN+K#SDng2h!VaBZtxi^wl!5?fBc|`R%vM`)>m@=$iKji!!)xj$0rk-d0GPudcXr-RphP z{&~DVh+jjdTK~1Jid6b#*xDuDA|uws`VUjzt!kejRt=cGe)M0fA^;Y6memE9_&@+z zxW46h-ST}*z9jAMu-r;n1QZHlAs7o#BdpBKjl%T6>}ZR@NP$tsC~EzJ)a^q-62FjT z=)2+R3v7;Z_}U4cMgyCw)%rjls8qnGnz%MxZa-6uzUyP}ii$2)cPvKaPa{K<#uqR- zb!V!tx=Dz+p}r{x85QA@^aW#bD0u3s6DO_`f!4B3A1Lk~Q2^_FdYOyvSe~)sK;uY; zE;eq#%GqhQ$-cNF3jZ{Z+zfP!=X?#{+F<<0;YX2)(dJ4zpFkIj)q(YPfn`$QXGpC=wT}A~-olo-zxPI5;e+qN>fjjT#m>+Z^ur0eDL@rdTOX}7TVGc23rnXs; zFAr3KVm~u=_c7Pk{A1qzHE;Pk@q)zi;eFZXzTS17bE~rE*Pl6C6J*@h zLs{ImP6BRxjxt-LJ&Df<-V45CZ5GWnaN_{AXul=@gEh$CMW~q;X(-b(H$TNv?PGgc zXgx*3G}$tOZ{^7nx%O*nM1cL81`R;-z(_-+6+9u%XI6dqGiMCdR5zW`w7Pz>Kq3|$ z!ScAO1Y+#WCOl@~u{q5yK#J4!x`wBce!Z8Gv-qo!dm3m@tX7AhQAF_3;kka&N zSVAIa;1avv$qa3&!ZSa6cz9%cC2jAA&n(uBZ(?;88btXQGY^4Qjq8!LpKF5Jv8{VX zv?ZBHX__iN1<-3_a5krPncA-YU8%_4$MMYK)tVW$&${|fBk5uHXRP2BI#UZoG9W5V zch7oB1G_cj13dd$+c{A5@P!JbC}XvWy!nCGS=Q@7um9aLRvE_6@pT6J>>PV|Hyg|# z>;#i}kaDHSOvs%BOWfLibF@9)^6eL|c`xQh>z(us=%s?$H*tyIubJi@^+0p5oUtMZ z!)Xsz1L)YKMx5DmM0n5=#;Y8&Jp~07AWRtc(#0__I!ONHqXKfe)oW06C~l$e;ORsG z{<}~Qrm-ufU%9`#N7EJIsj$ygw@2TBY|e(_yhl;qDv$25vV9fkNWK1zu4*0MYwCF~ z35{RDYb@wOGu4goORJV`qt{7fY$IcgM@LITe%AMb z9@ZiGII&RLC^$3yll!C)(Y|g+)s8j<0t+D8(WPid;P(?092FnK3r$KSq7`UGQ-m(U z;e<%^%vH7yb>6Ig&8A;LMAD0N^*6B89PJy@pYXhQCx?$=6bK-cFGgZ$uerU-JB^6? zK2@L9&0-I(^qBf6wJ^$(08PCc{ka)sp`qm$hQvcIm7gXc=v`t*Wk|A<)Sl&xGBa;tMgpMC@vAFI{Iz3juqqV2+e`i-@koAuJaR4j7eEHnN}44V3`OT^FyUeYT7 zY=d#)0;v+eer^dK(Knl74xzG7v6dP}i`N)SxaRu{`tR&TpU*ND&ARB^M28g&4UUn3 zL4kSFaT&^`*+e>A-R0&>`u)a$+bMMr`aEt=eZ9N9cUUeh|RvxnbDFdj)1$EyNy*ZORb|P zgl%?vs=iOt+-}nrTQqmX)n-KZjF}l8vi>;bHk2=B{Nx9!p$>v4U(ufHt zX<9YwIJ{&fb*dwlGKxJO45BpFcz{ep<9pejB?=^aa&43bC@2ObGkF-Epo>iZ8&t-| z`a1K?Wx9zv`x^w0;qW=$7X3aensy_oaL}vE?R%&@p5Tq>Y9Awu$MdMCddc1e%R}|} zdFr{czMiM4bjz(OF456t>IpaUH9gy|(B38Z6Q#>QuKU1`9?=adg1z4{UIB#A13t zs`|kCc32Gb_|V@6J=XY;J2~W*r}{$*U~nV4ZfV;p@xB`v>&glmBj|OWpR%qL!@_kP zykcE|c6Y^=7-E*AHLaxzWlCJVu3Du&u2%k1jqu+%7cW-|*=Q*{@8_>jt7k9O3|l%T zGu0ZjNcygkzK|sU-Arv)jmkh%L6%GOF@iP9KH?h8m>9dnI@3I*kR)JDB9dG=MGMaY zZ3+_W=enY}t-G8MmKHJ`&+wd)Qm;C(zZ`=co}7(_-Eh)Pbw{w4JVU?2Mh2^hhq~uY ztk{XzSS&dl&c(xFr5H8!Z|iF6U?j3}vmO~(R|jai{Y4_E$83#)ouTca(hd>mDANsa z_87XP*oGyR{!No{f%IUoJ1Bk)P>m{k{Rt(Ba)$GLQ80nA^8N`m)jg0!q5#h^LYgHK zcrHAgM6D8qOxc|8?jDGsGZavh z<*xrkUzp^p5a=Qj41W_43LZQZpq{RyJ2JO1EX0#)*h6Rq{14_3H#eb#EO&6w1)#WC zW>|>km%TXm%Bi@wY`U?SOAH{%V9RV*T=l&cy>0RNvWL-H>G~f2-f19CIMJ}vaKcds zFctWk|D~7blc+y80l1Pg$$Tuvm~7HMY)YTDpk_KpBr*)4bQ;AX$bK1Me964WHa;Q~ zJ{p@el8EDub7M)3IJZt{X?^@wC#schq)S@Fy>(mlazib^uKSp1lWh&(r9OEEp$_sv(h!1t17AP&8opi=I8N-t*X<*^H%{MU+`sqE$229X=WeXs_)uJl7=;noQl)N%*F?hX97Mhtc!A1=tP`lUp zV#rXBDS=*wrWAx5T|i9_ewt17VD{7SDnvM((v=L=!`tjc&Z$+W;TbkvtvR`by)9f1 zB@>~!alZ4nd~JLVvD@FeVdu&dp?I{|yOo}+7ylJ;EX6uKwzanyjfcXCEn|F#uZ?X< zh{Vn@;JEVG4D?Xof7fZDIKqt#SCv&-r$E85TFKO*jiA2m)U(6mBp8hv>4QNjeAB>w zHgWsrfHQ2}_RF=bDDZWVF`A(47@trTqV(Xl(Kzlm1AhxA{tV%nxb!~0Awbz=6aliQ{= zy}NJc*vP!GJ#U26l3{yqjk-V35CMm%w(e+eTq*H7QFP7MCKN4SAK!fPs``rwLwmY! zY-b(Lm{P~^FxGR(q!@9CA_Os~L<>Y5foaq_kj6BrS%aTU>wtqHr^S7s;jg`I!J9-F zah*31OdrO{+jz70W>a4_^;=JSUvlyCVMjrJJO5yh=S@?rA}$sR!NC&;_iG?dtRLbS zvuVadfL91OJ}g0Djbe9c$suWQdRA`11|r68s-R{d>Lb`}s)l6=^j|qLK0dRj`QJ_Z z8`Yf~M(X|1WWI?15bV=mAK9?8`VDYNg*~$o&x=^kq-WAu2j+``a(ZcLu&0r&W~2B6 z;K0&S8dojDIbE#+Zp5FZk%l|1!}Uk&A5*ak zQQw!)gq@1uH;I@PaUxa>oPi9lsfuj+DiO7#5&VzqSEb=`1d6*_|Mj;pJ(_xWwg_nM zu+v?%W3$3DY)u0KyO@o=i>}hRSK-^S0$jp#Sm_7JBO4=-r~+%3Sg7`85b3QTl}@$k zIyJ5T2mL^av;g863!&K$dRa?<8Zo0!>sdflHzzCrZ#U?_0k65}4Twe*gbDIpR9CJO z;yR`ICs;OMxO2kKEYp7;!r-{Cv3VGHLuJNrMqiUxoIy}mzP1Jn111+34A7?fAT18S z6$ZVkXVS{u@p$v^GMTR=lxR2yF#9=#Hs-=nxDCYPB9qBDkA{(HIs9k|=H!0km}PAZ zXPj8nx!3eO^Ij(!w{xk8yz?I$UqukRuiD7%g(VsOwM$~LO9ywf8#;>Hz#nDG^CC?% zhI>24{-ZuM^}`4a6Qlr%kO7niT45*r{fZizGb-aSTsooaJebEuJ_Xm z7$Vu`(@uDcPz)_&tM*p>p(M&C)h^oVUsNik)RG)uqVZsqnP6;EX$Lqtnr7lfwhh~_ zYr5f(hYjBDl*@NPrLc_t1^Z+7_1TW`Q48|`Qa=Fd^w~soc zoAyPlnUp(?6RrVsq=?t>%LHDA7loStC6FWRx3!KQY8|z&J;iNI*-0N@m~JfUA#RfpE(Dm&C!o{T$gu) z^^tWvNP>QUfz$9g%h_0))p(FiiGPx?ZvrYzC=uoDO~ff2zx}u)u4mih z0#0vi{u_1H>C?0o?v2DgoHzk@7jV!237vxu-_|(Vx{5f$d3fb?_!*HM0E=%00*pbb zYDlBlLu$d2O}M}^0iI%x0g|3LJ@qfIxnX;yzx$d*{9t!~WqWrtnGP2+x|Q7cYvZHw zWH!>*ZP@>qPDV#ICM`Wvcvm(VA01EHS}c`a*>zJTS3nSau5#0zGo!ldcE@s~POn$l zQ8%XX~ z770Afe~QH}hGRV!Q|XJjSojAZtAvL1Im0+)WFtQ)gig8csZikuk*pEjuN*q0G=I48 z)}3fBp1a=zKl&kjql9>q4dBkFC9Vj@4}Z(_zXyhZM14$Qtkbh*YKT5Qq~Zt|BN^S_ zi@(bxZ;eJzor*?pO=ez}xiu8JHPe6Wf!lAtJ$~#Mw&FPN{?P8eJMBza*367$O*!ei zyX}Fyy6uXtSM2V)#8m@(en|`uBirng2Zj#+>d?^0UVo1@4EBi6qs(6d9_<_>e@O8m zjmd&SW8$a-J2V4lnj z)a>~5u&ugxV?BMHJz&QTx8E`2`8)F?RXeVBE3R?3tJ>Ayj$}uB7Lj|*^N@mUF%frq zOb1VX&IuXaN1`Q6o{1g(M{;@!zcJ0LB9UIlNE=S?=;+RFBjns|no75t(sLik%x=iD zl<&GM_Lrg?9XQ}S&`mV4Rw`l%{j>v_i9ts|Y0*~zLP!1EwwY2(dLxDoHZRl+%zb@3 z0hNIr9W*IFF40zVv$CD&GBLkkNu+BleC*WCLi{UPvQ!%xv6wtQ*TuVNI%y+qnQ3f| z8L6IPY^i^f7i)f>@Co$p@KU&YlM*sq!&Lk8Sb`6QNSeBwZ zBa9`1tfW_H0jT^*YGw(C6mKLvw@|bErf7j@if^RzSO-uvzsALUI&E&~aT))`?b%>9 zf0Z3qW<@$C91R}$BE%QIp_MZe1Bu~w)rRAP6PdDhtf!xATI}!nGTVAzx(msEJ{83B zkPrM9#al40IX)cSiS!h_yh(gfR&3LT0tLvHjHyUw5q?O##_=L=FCeIO(YCe1+asQ{ z&=>LS!@Uv1aPC&&wxHgP3{a8Y!?qXc+w1mZC#^`tn#}gN*XP`qAgbbiB=}J8cSGTq zxDdA_e=FCm2xw55c}0*<>AXmAfoN(lVB18xNZ2#-NG!kkrQ1$!m7CAKd7qft_h#OS z2gV8;lBFbXUwg8!0a+|2U+M3e4oO>w(d8jdqk{fC0NsBVG=?(>f;Wkesv#FlSW8TI z@Yoc0P03?u?K6r3?O!_ML0iqjb0MYL z6-TK6*-<-uDJ#u$UCwR!2wwR&zs)ZKa8zQxO2XWQpBQ+um#Q)2z0Z&R8fIcR-7 zGVFU05rAJMazk!-ejQ{LKyxo${;is6mQ8hVP{q#Fw)*G&YAm72E0;8P{j=d2d&F*} zoOBL+zT*MQb0m=oo!_f&kauArOR zAB4h@P|vq`fYduJakJIZ5d~>;04fL&zR&me&spS)N0_>25x{~)NJ3uBGQb6)aHSBQ!+)kB9^!Ub`{#sCy51BNl@<_tTvCFw%)HWPO{*yRu9-JEWZ-2X&tY`5nljT!QN zXpNY4{elr4!Gg%M66D+;)u`cYFmTRw^uX5_3ob_ZX_5-CL271y>_GHykDex>&etpc zLt&>!L)@g2OJJL*@Bi&OoQkF$9r5%(B&i& z>PQD!Kdlqd7s~WR3qeqi&IxdDQYh7`0tXLp5<3+5mnrHjbQs&UJa2zrUc&wMW0#yI zKTcuE6axczkCGB%o1!V(#H98ukXBeacz2SoiPaCn@1gDI8-m>2gV8tC)pZgkoNk7eNJiO>+)CFlXp`~Q27gklQv+VEz4W}r^y(4$*yl23$8Ej88!eA*1HODlu#rvjoi52D&8h!;oZZz=fjttrkZ}%6+(1 zpS*52aEo0dVNNxu=vRSwS?;5VZZN0z-*R%mNLo7>tbN#03^DX)@2;CEJTCMq+F@$i zOxot7u4PW`X?_l|T+?g{IaS23(AI(e4JHPL0wX30Ya(&zHSnh7fJ0n-$F+9UVsHn9 zlyx9&kc6^WW^KedQWqCHk1u^$EOr7YFLfwII#W$_UZ-(V^!+kQIAPhMrG6>51$%Ns zCiy}@{UR}wimYfUQZ)H9aG^MhA~nxaLE&-8`_l*@w>xYjWzdF~vrd{?qTH5aTD5NV zSj(TFCF?+^Mr}D=YCVIMUAAcJnf31xC>b(#T;QTE(D4Ev%1p2FxOssKEl>EFi~P(* zx-1W&{z2`cbRpVtc&_8P!wfnm4SsIxgYU~msS^ANN zerAYyYLXH`a7|ETa2ueo8FK3*QnlK(^lUo1TTymLp^OK}pns5|i#RQk$gmkU zha+?YG1q*6OD6wP$_9}0mOC&p=9%{(TUL;G89k0xA*0p2AW*ITndu6t17IA;Q07dM z``MRWzK3r={Dz-pU;IJxzYd~6GUiYnvJUMGvyL5>JuG$U`VdqZHM&W} zi`<7_mYa|D4{Z-0I1t`GRF2N)D%P>V!uIWj!DCkC*}|bi1wTaO+4Sb4YAw+>GSZi* zsYf@bch2;?2jj_P{Gi)Equnq!cLU)!K)tO1l8S;gZh;H`ky$i0gJwPVRO>dn{4bLSk#Vyj6s>vat5R z8|7`{4d_wmn`ZRDY-9F7lnzhRMU)-|PW&Ph-eTTl<|P0?@-BeTnENC2o7A@P%{6x z^Ey8diyA#c8Ep}5P|cJ$Q+72Pg<1S@4}g%oo9jHmi-*N0pcBtgeinr9VpnDEr!{^umM7Vro{`|bW{;Fj&Wx86z@!rGBdo0@;mz9$cn zzqaGlYL0^&`Zd1Ih;1T4PWZ!JHxY*Cn)b%Tumh2e)BP z%nP3}CN_F~>cp{P)&`mR0> zsijv(>UKM2RKY(qFAn!5(!<4s*TW_05PSw{oWW|$&U8u7Eg~gkSRmUFJ8Mn9 zVd)Ktp3%8tQJkO49}Iz?14s1hau+(7znAV8i*utrVsUPP9!TN|Jit3V!0iW`wah$U zf+$u!Ga(zWGD`^n5RXF*3aQlRHnu}o@SE3(y_*{i#Y0vZ)zxz1&U7(+Y+=mt8i+`? zlF6aL`9l1iSDVUQC;r+tR~+-jOU=LifG&)!2Nut&>I2uC?m5?d(Pqc}wH>Cjf*H5; z{txI84N2?YzIekgdhq)oI^@?Wxh4+S_dp;MyChCNLM1PB{@6u1d^nLN9O#(#h_i^A za*K;j&bexgLnU|9;Z;TGv>HBjk}_iRB4LTV8oDpALiW{T98kFjM^_g))gtjXC>!w@ zF4_b(T@*yh`DhKPxUKYKzS9B+iB2pnoIbs{$@36cG`;|$CD^O)zAaxArM`auVcLkw{*#klx zn4LK=964@=X52j+XAfL6lSvjPoiO}ePMG#Rk!e~n8X@ygy7{f_2JPx>)jkpqTcef@ zaH6kVy_6j=e%e1ZUUHmKRfPc{q>d(q*eJRV&dy$qx6jN~vhQ?9Y6ogF2doJ=wjkAk z8O`DkkrA)AuCAnColAFnS1IuQTYRuuoLE#Q`b*==e!R)X8~0`V`Zh|vJkzHcw9_?| zN6H^oY)@fK|uA|DDOxSdJ?$keEU^k{Uth)8qinosDXgR{L`({CBeMxvJw9%^jzc*>RAc(tQsy*771Ito=jRsq=qb}) zm^<%;`Q&s4zLp}JDK*d0;1rKLVcg`y3Gg`Iom(J(EIMBS^A0JW=PKyqPOLA}Ktk*q zEWu+D3JQObgW0l7hnR9hgbW7odY_MiXa=Ip*8U-^KcE!kNQIe&nxxqnD(zAzIt?fB zKbzk(M92**MzNGl7lnxbZ?SSV)hCRQy>~B-qLaE~f)9K zb-A`6ARyTU)M_wNmr_3$I11Y}G|mx<6L zVZ9vs#B~)#sQ~-Yw<#_o|Hc%ei#L;$EBz)~{5lmGQPQ)R;xIE413=9UQ!U9D;L}k2 zh^UVvlMr?@fPRD$GBttN3G$#qjgjM}Kt5GsskbasjSLpLHOJZN!!u}NAT2#!UzTlmN-$<*}KOWhzjAa|^Appkf? zB4!SVYq0o?h7vhXh=_9(>s$>B-~Op|!iyH?sMqH9^u0g1lcv)`*i2VUca*MPTTC^7 zSuS|yu#OBeLYA6fir`1wn&R}1!;k&NV~2NGR%tp9Rq3{A z>mchDunOgqUaS)HlKDgk<35ylwFit)Xs`2Qo~>o{NW!JGGtnMEMSP1D3_pSjDw(&e zd~z|Az`q1^mW z|ICerO(*dpYKpqE^oAs17aC=D`P%C$n4gK!QpKgSc-RJhd5xAV8!8@vT+rIft zwsX9C#~>_+`QD)+DhIDaMfhBos2o^wE*JFe13(76peW8y4j_adTsG|{=Z`*kbVY_F zM5hnA6jJTqo^cONZ#{anCkRoHydZRGONd=5(g>$93XYdn73v+*l@qrc07{Dcyoeq< zlExQ~ZXGEv!~hBL842gNC|WGDHxtto2ieAiUeVNP*&ffVZ;o9XRJAy+ zTTUX9Ohyt&Uo~FTlnwo|iKtJOS=UIuW2@WeioJ8WhFjZHYZ`I6)rcr*9vw%p47B5p zyHuO5piLJDt9Mo3UAAn%2_@bf92nxKAW~uRp{51CtdDM*0a0Gv<$oc&d{xPd)4l0v z(zf!pok*agsn|v=nXs*1h|tmU(N#m^vb8d+Tlz=J(WHf+@rw-WFnui{uOy@C)m3Kt zvI2fu&Jl1#&wrNau$W?W6Uz=4%K2qeT zsHI+h4jPEVu%pK&f+;>pQ(VrhBc|TI*S}>zjR=LBB|Vrbl+-vqiR$_FYhcV)y7pt- zuBjjRgSDL@%dK&zTy|80V`9r9ER71FCHz`U4Xy5+kuq1K`N{{6t{Tjf^RJXG&{@B} z?jrY1U#>4rrEgFVt)r!nwCNk_Lh|qiaO$WPGkWMXMqX+49!bEGGJsFQBC?va>L!Lh z{9kQAH;3cYMMFD>M#}LBPmge{lh~rUX~yAcnuFmucga>fpN@wuya1P|b2{noiYSS% zKuZQspE?u@AnzcoZ3h85;!<%8slN_mwxolQ%6}h0iAD<5Bzc}Cv-muvZvxy&R$i$N z0q1pm{M#c~8y+0#wQ~%{mW{~A!rgqDv%kenHqL88*M#_ySb+ci1lC;;A)-eRgysB% z#)laMtO3&jP9w>ZL3zaYZF^3SWQjc5y}?(BT4p2qzi?T;9u&~?lGQ>`ew#%l~WW5t<_YnVCd66^MCQa zSZRWhLbSv(wy+8yp!pDQuX};l1?+$PCTy;g$xwLv_b=#jn`SJ5W{|ZHI)?SW94)!G zB{>C%k-!e1W@=j)z)r}d$5JZ?YbDe~te|WDh!tg(`eBLhb+{fYUsHaD?{z#T4<}d; z_VUB^5z;%1)DK5lpD+2}x1p>(C@qw2z?8zU1_AJwTsg&ftu?P$#zO!E%DC>>nCoUd zZ*BUPu>i=;2C5nr2kAX_OpGj6!VA3)--fCUq$^)00Kr0H>9h!LhoBrrW z5=-)9X?F3BH!Faa-~oMP=h!mq2UtrW7U}rnStvEQjeHvrWiF9kB#@@4ljcdw;%ipS zH8wcIAM0ZI(9FE18qJG_s?EisEvk0To-66$^MIpMGGeW`B>x_QtG?s(Q}vm%B8=7*TXjt`ZeTP{tA3a zk!QQ5R)-`&vks8@h8VkZPBqL)Go;R*u+s1q0&o7n8HBi{ku2xo7uzuH{#PIhH@|0P z_1$zV(WF}9S+<4=3u8RUF9o-$KfPCjN+gu_%kLWd$-tlW=co{D>a+yI3_%;U+ zHCRLgQ^LeJyD9QT%C_TY+@-^dB`jK4H=rI|X8mpo+LIZq9JgRjv9fCdizI0+NPj_o z7enT>4i5`Vfmyyqndw{iriT)1nUokH=mMn}9&FKVq?Cfv?#=^FA(sek4JC8E&eHy~ z;;H^ECa*e9Dhg0<|4#I5Q?f$5%8Q}sFdqPpjyQnfX!C!kHfifiMu?~P<)AXu zJ!pp2wVXy10ma|ff5Qj?-vxmcG3@M~o!!k{dO@C*>wR<}qT7yd6U(f;-u3c${N=m& zFgW+-4v+G2v$5saF#rimK7;s1DogDJm1c~B9TTSs5S2{$G2S+OIKQ&K{XMH?eO6Z}D|A0%` z*eAY=o#95U?|c$Qw%COeu`KuB3fl0)go=?yOOZ6srlepGFe|pu@J7aDGHvbuZYEYF zT=L>YrhlLEqN-*MB)-sX_lA%WCKf)U=?gKtKVt#l+ycKD-lHeGfz)Fj=<{^5p(mYZ z!fCaLAtcAqib88t1q6}tTxZ>wzl@aFB#L~ES7OM4Oh?V zMhriHy#W~LujqO#V}-51w5+G#3ajWn(cci3@!C*46N4xMyPH4Gmf=M`2?Rapod?N5 znnzkN(7>z(Lx0ttF6#&mA%s@?!+0&K>F~v*w6Wfg+-#88QLLP-yPe1r%@V&v2QZ zF~XkOFm@E==F9Sy1gMTj`4<`5aDbuq|YTyTevDMB!7kLA7_dLM(#S+@PC3CWiILroO>z z{#nRJ03g7t)Vb-E^PFjEO=r5QG+ zC3S8KKwv~~z5uJ*_t={s9!`}z_t}w%opHjsjb=C-4*$4!&KqK+@aDP0N_OhSVdrUD zO!vPil*PAs4PqXqOmSscuO(Cp_(kf|4!sEx6y~2e2krvVif1l#@E6a}6=Xl`Vzy}+ z*h$P7NG1V*-wm)(=QsEKD{<=OY@p`QkVVSRxsjZqURl)?pI}T8362XE5*wr?dNdBeH6smP?@3Ec|m3F zaP+=%8Bw~Y;3;>dqAin90i@`FzxjFFk-cza@Gr+%v+Z8`>0G&tA!J<3TlT~RYo4*| zIJ;uW&t2*l{_jy8pI-~=1GeM^wQ&&1Oi?>nX0BX^7o!4qj!@YD3+h=EttC5>#uz?{9TEn{F2*efM2hcuFr+spXvUp(!teCDMcxXBW!7jZ zw|wO~T-e>Ne-ZP-W&|K;>8I)`wnYbS_w}h6c2LGjRyz%k>a^x*={&2EkzlJ*%U0j4 zs{f^=>m~7*tWUPGwF)eVQa1!YamszT4DbE{wq_C)Y->jGPFZxUh$@L(Od%63LIAps zhGkDy@t>Zz0oncDNEJKJbNqc_`G((hu+r^FL&LIaEe+0Lq-%MYBx8X zK8+)h;fwZ0x?e1!5r{VYwbB4D=yZiqPT+GAEO(6b6Ll=1i5eKw7#PEdh+%Pf|g(WhCBS$yIIy!oX3S7IWZiR?%$I8n%!D*Txa7)elOi@~7D!Oge?N4}Ayn zC(ltMt=`c1=)@w-w7&>0i+HNm+TgpbU)O%cy7#tydkAZaERE!E&jemv(%V?1tQHyA>%DX!Z09_i-ord^z ztaY`non++%e}lmWm`oat43H=n1Td?_n@tDI1b7=R5taoMirQAz8weg9#|m7ateg@` zdCm96d(<2&9d^Ck%B3}H;U5+(EuFJoz6*gd5;`_~T9$4_?w$sF`J@Zik@%A=BE84e zqB-{!uW)lw&3#Y!bC}2N(Dt=Q+)vO8tcWjx2j0c28`TU;8FL)u6-!EPA86c%YQdzE zzOQt^lMr=o9k3Hs8ObLV=Wyl#qDL&@EJUPlL-^*XaE8H%L=IqM{>&#nm$@Y)9B0Ya ztIl!9*01Faovpj{sih^-aZpZ&uVB6exyHfo1(pIdKHHwszEvw2CkfORSU}8QiQ2E- zuyf}PJ8xh;^_x15PZi;g+kDjY`ooBaJZ-Mvshv06$O`SRbR3Hh=R8nQ_&{BBpsR1k zJWA`>J~X*sjv$#47*5GK`PVbsk!=EWlwcUhISu54Fc?Tf185W^2!zkFGFubJ5zqPY z*EIi#*`@RBJN@T{RH~4=7WhQ2x&NB|rVC`E*A6yhCv1h!+>jAHnC$|<9YFU_BA2D z?;gyIE*%QhaTJvN>4q|CPH`Cb?KIHcf^LB*m-`9BAO+WJ3StMo7O7#u{qg|Hh}S8K zuDssT-ynWGue;f9eLx$?js42bz&=il^gi7l{E0vhk;ihhVJ@Z&$F|kUw$MB;vRNyI*iCv7GgkSm%0ql z@B+9c^bxQS(cEdMgh_1)THe;dktq|2*Dzc#MG6YmpaA0#Zgt4_-bvg(Wan&v^PEq2 zkB7esRox(bG;$jA8TmUi3}Vc2ri()&>vVc)3CR*0Wi2gk=RDZ121cgj?E(g#S%pgzJ7>_ znFCmmRuoo4*Ud+50E%I}Ah1ZocyVtU9km?zJ`N6Aw(eAVdMv;$n#rUIWXCOy-}u}}Z*%{mqt_SDA zKDfTbo_kexR@d3{?^}G#9_R^qMaYxROPvqN>)+!aFY}4Gm*4uUeDaGg)0~u9um+9HDCc*L{^e61g=0*BB>V>k&ZwnVfUxpz;b4iY69}ycDQ2Umj6&t>!1~- z9(iUP<;fv1eAqjH6|5to>bub_c?@8S^=k6nCnKp;WPa3(M!j?))05tN>t5V?5jW8* zc#Ax}*{C?ua2-{#Y)?OOyJ)_zf1&^P={K}e(;l<;BPXxw*^q+|*XTTcP)K(VCMw-i zd-qP!{j1)>^?n6!|D3KM+H3bK(^|^aZA~aWj~rKj7cWJ-Xvk^)hsbIEIrt6l=(?}# zP2epM-a!UltP9YB4@tT;uYdv<2#(9d0SGgZWs_h<@DRfW$VfaO#aG}QqToTEdI)N# zP$2TTt&{6Jn1oEa4(eV*;1o`#;mQWH71S{R_=S>(LP$ipSlX5~qhWBM?uOiryI{`R zXhk*;JA18kSh13!{;C^C=6TP|q((P5rmm+3opdDWMD4U=#$w|1nx}0+dctt%d$?uaQH`XPkOKBsI;?Q*eLu}3-2LG?1XL8d#v|r8f3Zm zl2FFE#i8#afAx971<3>oP?l_1fe~D((*ec~`>d0qgSj&dAB-Z59>hK1uMV9cp&p^4 zW^ldrKd1?K`Aq-9TrQg!sl>b8q!;fF z>+$cpIrr#>%~ldZ9Wqqi23*}AE9&OoiX}c(y*-<4-`ek-_`RWNgxcgo$?mw9@Veu< zZ4k&MZT>0NttCh|MfjJ|nstICJ}^q)nd(6N1GkYPI)b5bh4`J2ja-E9&Ur{XqA!FH#2&iY4t;qM&QHUfr1z)G zi-{1_z4#|S>|hL7JxEPr_j&QyZ1N@Xx*a-tZCXhtx8QwCcKr`@_0?Ix7im`sM{&K9 zE3UU11Te|37#3YCp+tj^A?dgtUZ_<(&55Rr*tIKl`#^Fl0F;wGkQswDD#v-9TU-}9 zbArw8$|Q(n%B-N@C&)<8kmCUR!oozxOKoa9lFAac){xRA8Ls&7>+<1@Wo5$o*A2&a z0$*<*otx2ED6SwooMtQPz+NRC23SNY6HY682UI1>jGCDZ7q3s*u4|{RFNU)_4XtMy zr-o~X#dMEmgcU_ob5lwTD5wBAjVV((q}xU%+B!qxKX#)hA)NYt2Eo2nH-<M4`nw`VGlYA1&BdSWD@17$yCf7%X-BAMsu zZz5njWs>M3r(6A6B8w1l{1)Gpse-#b`8A$4Zhe>r>N#l!9dn z2?eQyEmHVw9ogd<2uUKcTHUCzF!Y_6dzduW*-$uym z*8Ywy>O+0d&Qsaf)<6WlPRbNeI1$Q1k`^jqvLN)R$nT$-*+28iPi+d%6jd!%O=)Uz zChRLECUI+KfAjmhdrHDIMF|1M8jV?&gDBpZz36?y`_v}1nA7i~=35(6N+RD}e&Bhh_ zPWEXqMkUxKL6rLA0GJGzH$Pp*C{r33q3C0=xTY&{`WV;ew-v|woCU$OKV@Om0+cjP z-5kXmny1A?^CAYwPda*3_O7hqN6e6CCAuxk1=m39=rVkImVpC8GEY|`MXYQY7<%Al zF(kp-s>D@|8G+U%451U@Z9eNOA3+j>mEwU}F?%)TRar!6tYRR4E7Fu#^8#5=R0CLe zgQ*>0#3?^>Q7rz+-~{4$XD0^!1VKE_Q{yGW18uN1Tl^Ib?!OWsb08J239s}80^c8u z{~h_N{$0GI%n_hpqReZHQeRhv6k&`^RE&>OF+Lif z=&V2$UNV<2KRig`nHzr~hTso4r-XkQluIg@5(5^|=zA6)0FxEnkl-1ql^ zw0XHby_4Pz{e{o*1HMDX_k+Thf%e!DC=Hg78AAxFz>K*75Q6vd=+1*XxhiLFl-;15lV#NJE3XmUba14HI<=16NGV7j^SLAQy@m2iH|G?WnrlAaB6k;sVlXGI~K&JT((%p;knS&7D!gvr$ z8!QiW48BlR*sGIhDmFMMfCewW^vvFhQ*e7%i z>2r(?+qWH4lp~vVY&4KhN7H+&!{_JA5#Jl1I3F4f)17Zw%qN-a!-jrG{Mj<54i4ZArNA=^zs5BT z73w6iVEg1IMQH>mtw;pdK!GA8^!oBJ>Dq7!1rtvhsv0%JC8X*$B1nIcn4e{Wp&{oG z2vHKj;-0S8<`c+)fn)>1EQQUe74FZ$Z%TuA&E7_1ujvX6>V{l@*pjb;H%>%D&iTZA z4aC-U0hvqhlGGpXLiQ@WOEKtOX6TadI;n>A9-v3%4CGK(Ok>}`p;<`-6B2zQA&Xf% zG_Via3k|Q#CCyMz$V!-8R8vU|4kqx+2;N{OEZoA|s8mpV8d~r^&s+6Aeb#>;-f^Y( zG0yQ9;ZXEPz!U`L9;GHgN0E9B9RhXKb|F@($%%pM2A8djJ#E?FNreU`-!9ILynS*Y zl=_Yhuegl0Jb2x}1YY2;HR2q6;zlSRT7ttlks>jO956=K`pp*$o+oI7mPp z#vb_onqI#c9V~_bJkW3=B9!WjMU{;Tv>-xL>A=LHvhksf{fUuHoK0-b#l2771SOjH zk4_}w{G-)7lIy=I5`CAVxcjzACop8Y& z*e9Oac`uNs8y220M{eG;?-s!OjJSoc^HyLl4eTL173LVNUzB5!FiZD9XV{Y5Pz)F} z@jZxVSg9|0yoNga*4sW&3?ONc!h|`N#Z^1e;MIANwgISJR4g|4_jl87*xZTy>eo zW)yAy8MJvn$9zf)NsYo#(bAwh&~;GEDGE)5MoCi)7zQqBL~vJJfQj|C0|<(L5MC{F z8++IXsaN!0;AjtMX3hdn_xQp4y?z|yU%x%j!wyPVS8je>vn=g#Y0^U9{{+~%zkr^f z1cl`WV5=!>h-r+alZ*(<%WhDxmS!d;eth07oFP|$GX?j&+5Eb9l#nNmBH0zmRY$!~ zoJUhEhMh$xyoi=NZzezH%~hAHb0}3Jv>Zyb%JHvkEA63jl!9j9aff=#MqyXHA*T5# zPG>PQg4qW7NiM<()9ff&>tj{<@jrsacXh!q<$&u>7=)jNR}ki3=Xe4A8LANE7Gde3 zNqn$D(RJ&-*2ox{*tzF6Azrq3eggR)Y-it1Cm(&cc&a@VMm7p@%f3A~kC?b^HJ}yp zbv(?gOt4+z8eZjS;*(kokpZ+JXc=CNNc%`UFhFHGwt?D7CJmudB9&ths{7?!d8E)h zTNo+ldPfT3bR`!pjYn*wih$)@1*y44n*Rq|$CiYyUC?x4ZJpaX$X5<))gCPRg`TRG zE*C};y}8PGsXL|2RU@%Vt~W7KD8GcwU=PA2NJ|xqi+slX@QTs^A1L`RFh=Cp5-6=0 zb!i%Qz2E{Tatktvnux-aE^MY)0spl`EJYN77#D&QflJM0c8}OC7U8pd29%E?_Q0og zF>|&M9Osj}+1+As;(g05d+?uFRr2ToyN8>AJ7SNb9DVq7EAOHOpiOgLLM zk-kg(^O$YD(zeHt;dpEKhkV@pU#~$5()0~U=lu@;2H-&15L08e{YneZ;jt?0J2-Cs zue1{PUQ_g+J2laOdn41WR(VXcSeMAiFSCR*#1dqAsrmQ!cu^4&KMIF8Ep5Wr#Vxpo z%uwDvVi>1%F^rcf{=2>eT3*7tXs+-(OaNb#v_XbJM!fLrEB-lnRg|BO=%JUd{6tcxuo6P1nDm&q0a_yv7%k zF?J<9;`uR5{^OW+$3YIpke=iA0#0#O5J3K;wZH2i)}U$rJw}UM^@(Dah!&RL+WGk7 zYhOmP0)GD`{2ojHAZ81(Y0M=egpH`jwAhR{=s+LEC!7B#Z*KzM)^*;A;@pe7V_yjn z1OYApcR~b7kP<~f)JAKiCE1o2*^F0t4IMj(w6b3yO1f%o`r>PH+H2D48v0jd!NLhhM5we_b(*6SHPRXziH47|%4=~$#k z7d@xEnRGJ~ijFap2~Lu1N|N8?#506_D3WG{X!MgayBR(+2^a);zOe?Ylu46WnI=}>H2GEWI&XOYwRs>??Xa|ILcBTrJm&BV z^lUiVv_O$epREZ^KL4VR+28!F<^j=ckG~-Ona|5Ij||&Xp^5Q?>yzzfm4EyIyi4vg z&HLbLasc)cH;4Qq_lGrV)x!6?v~SaMy=ZvOSBJji(V&7=vU`Zz*d?p|0W)k|*!oLb z`|A0Sq$$u5BY@QfPJ(N%N;k>&N4ge?U-ZmrSEp8ki#|ONT}=^g2N0W=?9|m4b)Lr5 zlb7?9kE4x`lu?P&=@yHxh&5e}%TvlC;EDxUG*wEC4C27xwnjYTS*po_Y;agD{{oDI z3JL#8>u1$6Ry~kp#<8&u=UdAAxJrxcUk%)uF#ZM0OZH2y;V>*O7uR>-Dd$49R27lA zl+D!~PSFA_e95x9P3ucYXd2p7z@ZN*Qom%G-43nK@U z9bE%6Z$~wl-R$4H8)aVZaGdXJebf1=Lnr6P4~8{$;rfxj$jm_Ob|ZlaK^FQ1-NWPY za{ICg0s)33uw1$??~^^aquHfP_vI+};SR4ygjb}WQysWc^%>ChMPbdPthDLgGIBlE zdaDL(u@KM7NZJkkADs6#~?B9dHpTl#o78A z{VV*3qAI=%jV~(7!hc*)pu!>?`2y-2?!)iFln>6FKprFl_IY_g`ZY|4*nY-Lm}hL{ z*FCAJl!xZaNP8Fw%&eH^iqj<`ek6y1kohU}m7lqeXMTa6>5?^;h=3IM(TpF{Vmm!9 zWPh2G+o;+}JkF+H5sOY26|M?vGky{2a_|#)46orjo(Z`XRqsI__>n+ZB!ZD9i`$5- zNP;&tDQvR#D{dGK?VdC>_6HUY7 z2p>cpFi8wC>UooTUwSS4VaLvFj}uhkd#VPVo-90`vI$PrG2MHrZz|Q3iBg*2Xr?DM z)dyF<^PH%|d;Ypu#+X-{mP}GmyRQJ^=e>d~>*!K!C~64@AT6=Hjvl#%t+(zIl>GRr z-7^H|jI3sMU&Sisg>ADZE#nN=rnMSPB$%1rpn<=MC4sYn zX9M`#Y#MHmbuga2TFfAy^|PR41`ip6={l>+ihaV_)kV@q`UnGYQtX zp1@ng*B~cgF#F+tEc=eNl4egBy)0_Ax9l;T`KxeXR*cYN{-6fG8Szy+mopY-)lIMJ1u z*5Qw@tvh zCrVxMpe9a*gZ2|fir$lSBcBoH0kc_J<6N*I1b_4Lmh<}lqJ8vvA_R=cO7)c zbN!;V(Hu_?{;)RC1|Wr`D$cf$)rWX-oI^2F#Hua+qUAyB!}Ws+!W+DV2;~Kt37aiI zP$?9l?3LJ31>Tq6;!f}3EksR$!lZUg-I?jN?y=H`?ISUK9FBIy-yFtuwB(81AxhCx##vFSn9wpkwJPe!hI2NT0F@|U1H1&m0{AI$ z7uAIL4!Vvb|UB2$O( zlX%dfsTxvXt#K&X{fDL)KjNaybwzyJ2A)fHuS={-lE0ZfCbb5*`6ky0KyJ5UiNkyL zSk{1LEiCYE)7fSdS>p$ny2p~=V7&Eh@ip;#kYUSIgJQE}Nuo97KMRL=%&S>L8 zCexit{uEW}lc|&C?*03_%b{X!?;pW)D_qLsv=l0K(rHiZ$Ps(bp0n64?8Uf%RdW5t z{D|rcgUjy(CM^-n#C6n*OH}q`QXzhqC=EgoS>A&&4V>8N$UE+FbYJ8cSK25iZPaLTo9r^RI{Wtn2dyWn%``$P9 zfn6t*ku444zte5#rqAE(rx)wgjOz2S%QTq*U=Z-mrH9*{j5MSc&`qlUDZWx>OmGcf ze%i$fFp}eUSHTTg4%TU#8 zn9tk2YZnA2Jo!KT$oq}2rEGtIe<<>+NjtPd<|LxLL`Y(uJib&Y;HD2VUL zK2ErM!!^+z7$V(>58xuP2sI+s1u45)5~e$<=7Aw6#K{UnPN{g8q68E}xw&&@eTGu= z!?}W9+gO`=8;VRjL_M6S+P(8G+!RohTjqxML`O!Vr(5P4;vU?2mvU4Xcq)yx&<*~y zjMXrXp4Ol{+Xer%16@vr#^ z+_hRqGyc&R*4;fGhDY;1{GLxf0}c3FM=M>%o(|V}>t1o;VI4FuOqqa~-bw)iVcp7@dE)DY`OPOt5NGQtYlQi2%vaOIM|ieyR=Mj!qJ?3Sl1Ng zL-ky7)y%pBg8eo>z6)!5nO*&a-BpL#9)(feyiJdk}!PVPSoyg8 zMmnDE;N{JWNiM04(0J$Y&Yi=Z<0zX^Ff46pcz8+U!;SXd@E9sS=4;X{JW%bJ;r`ZYVHBR$?yk-pw|cdNI;)J(tsx#tjKs6`ML;fQPww;A-ndFv>LUQa_aj?4AG> zmy)bh5;W=8bXAk`FMxwCwG^A>P4{1Pncl8?hFI5%9U>ADvK0uw*x{Tv(DdKHZ{s6Q=G=#+yWrk}htfWv>AB6%PPN_D zyz25O@F5}lNH4S+Grk3^_A1XL+2W;EqeS!CpFs7EUKbIdiW9^#=mJw|?BK}43re z3gu4MVCR1*jbyKBEEHARGZsj7eZUUq%faSyI}$GlwO3c zIA6K9=Pze=J+o`PZ!F(%+3<84ee%=g+ct-n&8 zoP6Z)iNS$De*dq|hsKXR@b<3LrLIF6`_C(fhDJtF*7O@)E0f{z_<>gyCXVHA+I9Ka zQujCX&gqBBA${WQR}2VYZyQWzhhsxm9ZzI>lHqajuISzyrl7$N?R%KO%Va$@@f6#! zIu1f_dX4W!-yJ?GY{!_GG!IuoTnErRnC$lLU$Zk37#I9qcG2-5x5%wniU*%gC6IkCA(PJ)|A|)N6G&P{ z`%jtX6Ylw9u<`%kaaQOm-agiLJjlnF@%A;mrExRxDZtjU3|l>Mzyy=y;Czwm1@w)> z@LcW&_AkmdxK;oHv^S((n`p0;C3-qJum7vU>q*Rv&7 zuYh6v5#M>7xA(Liqn|Av!(zDgiAoxLG1$d4c;e}8ganKtFbWhmr76)6|M*TP7E-_a zkH8I?$W30z973Dc;a^-_H=YQ`HqMi(#(Q=h@RNWAdLHXi(r-el1RyXf*3wfbCfPc1 zd8}SnceD9Ur9#x387as`4W{roSfW;D`n*e^_v_S%&2loi4DP@^;sbfwZ1eg_dY%k4 z+_TJ+v}>*@Z21OF@71Fn_tik%ZN_AM`k4u<;gaP^i}sw?z|bT@LGsXzVb(G+6(kC3nbrF*s& zeR=3<+FiTxHctw`H6XZ&5u3+b-{SY%mN0iT^boh4xi}Q=;#X@t(YB)H8h?gc8XsW$ z$eFe+<0i=H1XrX3s)7UG14;bame#c7${0vk0Mh)%4dcICmjeOh5WluHNwM$E|C6Sa+*ZFUxM z=~R~C9^QVGzbektdVXPzS2ZKr0~}X*z7sL`x}C^$qa@6uOp| zrO}|(FBdTmgr(vr?wP6;QORRkEh4$Gu7(N=qoWIjkSc7W01K5OX0QnrP})_o^Fv3r zjr6=Z=r42*%|`haIGC%AXWd)=YafCXey{QGR^WSq7ldX8zZ)1!j_l@OMuphGuGxAf)fG^p@xE(jvbciK6)WV3OroRXOe7L%oWn-0yFcYRi%CHEPT&Fx z>xYj+4UAG=fq@I0U5WWSFtuP%O6|oK({XZGO{JUFI6(@8?w>F2Ebde((aIcL;(t5c z!1k}i-qEgM%^bPzYMQK-v~lxj?s+|+G(O2Ld%wTtHw}@vDREO$2xKh(6C|LViVh<2 z(1DQ|Qya^mCYG;6U?o9A{S8+5DrEou84@ju`a%p1tf9n zBv)u9>MO|&eSt~H*-GUsb+tg76Dod8{VH!yxCJ1W4GRLI@L^Xd;OGL5Kt%X{LNcal z8QvaR6M3O=whh;ruy|2^W^hMDT;YzA0wdrORptufz!Wb+Q>MggDet#Y<7D8{Eb?r9 z3sJd>(uEsuLC!B&@ge%1!_l`|L0Vmg68WrioN+T1CS%s-c)6Bla8sbAps1??I<+kW zv_vyh5gPwI>odyS|@|RaC zO)@~O)axsR4OXR=O_FSRtSsX~)*ZY2PFU5bwn z^D^F87+a%8321@<%{UKuT*YYm2X3+~ifB@)M0syVPM_?UFMydF4FUYGD#C2wDwD)%O3VXg{vMyvQdVVdU{)5&e)Jm@Aw z7GEMak_g=#YK$<$B(CG#>dhm|%vzB8jz08iTmC9cN+tj?>p+@fvKQt}6oBpUANnDo#&_ z4U0UCPq;1%nW^OX)vZXsuk@eSAN@pUslLGK>ph0QGdshY>)NQ?zaUl4qnGKRKw9)s zlvk$x?5Naii|Fo0|0Jgwd-%46I#L6;(C)E8zW8{ca;XAS&486MjCVY-0`?hr<-uzC+g@hV$Bk&`g z5`{FJ-;3eQ{Q^@|j6)(HqkxfexBNW`X$cvvUa8|(e626k8QeYVXAGjCD!h=7~ zH++71xv}a>7X>&fY`NBs&m7k3?{?R=L{ZXOXyjiE!g*JbbD9w;=PGR>b8iNn*x zRfWL4lr^HId!!7_6PMtcC|v@pyFBVp<_rqlRGS_{YDEDxC-PUX(l(pD_XGE4Z+_(Z z>mRv(4YeFlv9?D+Ado6naSPul>eAcvptohCA z#NV?P~Du7-?BrG=|(P8uZPb2b@QtM{kne-XfOO& z3;g?adf=<3?q65R&%hN0;qudPOnIiPr0={ly@K4@Gk)iZ0+K(A!V`{vMhOv;qL{!9 z*vZzw=TgOXI6`sE3~&SR14!JwLZO&E;#;)uU@8+NliV>=-F+D3L@}Z{efB$sbf z55j4uZi#)R0s3{#uZ}pg%JxkT$G2a$e8+od&t-G}VaKbse{y*C>?Tj+<5RD@a&bH1 zM|^zHo2(+T0ov^v!ItD!0EJlYMUtQ4BP4k?M58p1q{|jTc9Hm-wNkb)Ga%{%GX=6U zh_!5~fa0R4j|selT>;lgaEb>vvgr8CKq*^aE@k`TuO*O`{#37x_hn0{QV+?Ay4At~ zhHt;`OiK?5a~T#tJ6HjGqFm&IBr^fz@=*uRHdR!&_9G+&QU{BOQw$sR^FZfNZ@lO~GdMGyK3|1Ka zGG$&*p9kE23Hp#hk~(0fhawV`KV7TJse&pWuMBG~wld`bj5Zh!50*vY=v1^|#1(sF zWu-Vi&sYOpVcBuFZxz}RvMFF{KsQ{qnx`z~tkyhPn3@S?3I^Tx#Zrx5 zCrGG`7lzitaYac4j?(!9Y50+KJZR^w*TN%a*|194bSMzU&xH;`SOxro&)AKzh>`pc z%_WTlDEhq2(*aWbvN|E+cc;~CdS}vcQgi7}wc~C*ByzvFV_$t$$0CB|Q-MHAOQaS% zUZpR-SXY~UU56Inl^810q$2v?vmaspu+k{%iFDYxMiw98fFoWWmUD1v7t`4;}Li{#dS;5`z&J`&IJmtz)NTArSnev z%mhcGYr**DnGqE&6Yc0%Vl-JX#X{0?RVY#2j|A%?tcKzaUBv3R`07)LDYCs;b;9wW zsx&9on^%%Y0O9c4mSBt*V@32YgetMPG;>0WXea*U7f<4Ptvs@#>nkJWH^12A$^H>(Wvcvz5XLOx|eG(a0{(q=s=nWbR!_6kF}MgZJG{%oAh2AB)s{I8+@A4*qw&C&=g?Jn?6hhp}e*eRaU0 zM2D1>2ron*m~Ze7z#bH^!)(@0!E2dOC~o5g4WOc&AE~qqJT&3mQp!Gdo0Bz`bi-Nd z-aRxoBu414nEn(Pu5d9DyNxajAFD3v!FaYbhwE>5viex1FJ68fWgeL6r_)@zc#2rB zH^r=^O*f(Ao=maMIu7z>H)s~T#W7h!_E3bnD>XgYn?~QJdRenZTB>xdcM|?DK$`IT zdrSfLSOp+IX2Ia%AKNoHpS#}>m6gk{zkH=4jQex*yG{{qenMAPaVr$6ivEOc^z9xA z?Y-+EW%c+y_Z(kU9=dC9@+6I?=8mVdn`NO7z6YFy%L{suy>ZXJx=TT74@x!*w;>E6 zq)zs5GwS=1zhi_wF38COW)1UHmIiXsn9xGiZ73=&m6sJ%z30&eErQO$wVW6JDQ z25lp?#}*cXrPLq_WvIbnRFa8Tb!W}dt1-if4hL0uhXqxER0j5*6x_S=U7dYFC&DK4 zh!gDX%;$|4{&rC5)H*VbCMd$f`)jNOGSIo~i;vx0$Q(XxqR2xcbX_96?LaafEcy{+ zQVhnE2eyS1*M(3TD{%U7rm$292Exg5j}0^qTyFQ2li@(H@bR(uzJOzA$eBmQSgtE| z$Wvr{WDSJ7()1P+(%WQ0kkCiYx$7&AFdFD}cVM9b2@(vz+1abyQtmM(i6tQ9xUJMH zJqES~W6YjNCI$Zf1DPIGiDp8`(FD7SqJ*7c=hXI9Bhoceh<5~UXPUT{?hsJYINAoQ z9b&=D>4l_%>GDvyk}YLI=>SyhnxzGzwab*A!>PPvtUpPKlZgKjAeF@XH7FWY4ilfAN~4|DjX2Mglnig_+WGNc9j8_jYz#>SX~vmC^&3X8V6U-%(BCOaA%!qxxKws)u%H?n_eAvXZ zACV1#(v=+pi`>FAc7u8PFmxj1o$2Cf;Aqg0et7X2@TpSkrypj~=Jdnxy1xI4$Z&XY zVux6M_%sxQ2qu5{bp6UzYv*`&D9^R_0FyK(UY$64W-n=aK>(o01PBrZX!8Yu9ylrO z(v7qHI~4{HK7_^>S+2UyM}R7;4ZU7&KIjK0qEI zGGUb9mx1=_5>zc5gHhu_`KXOa5`k#KPV}oHtlLiMvqntQM&B`NXYAg4WQ@M(6xbsAI0-G)FSy=h&W`k~}VyZk|mVg+=8` zK%_OR+aarIIvt~f_JZ%-54G?;sfq(6yLPrV+tQtpO1FQz~Tr2LLDUL5G? z7$}a%VOI*qOWAlshT1&NQzk0c4Qsl}$Ir#HR~nXSQfUhl|BB;<0ut#g@v@7*!0;di z&~H?RH5t-J^V*U@DN4~NWzKQIDp82yZ0AWM?K@l2js7Xg)+?`LsWbRYD zQTyP_#LCaB#kQ^SvqevJyNRnxAt;=Y;}!TZ+0k%_sJ@nUMd^7F<+ ziQF;yR$k=p?c+O7&UIEwfhtVJcI}wdr*nR_Jn-nW>mTW>d6$p z!>Qp@9gKv*m|e{e2n2pjKU}pFxjMlYZ0C0Mu-+|YK}iq^wxk^YOPE)R!9?WSOGRO} z)!LAb#K}7jq0(BZc1+sfkJX}x$`mI}>z$@`IXica-fo%exaZIvcOI(^k)30xb__vU zunL*hannK)w9zxB5S+_qA zVO*rA)dQflq?;!WfVdq*KeNn7dooQ>%3COeupCKhB(@M~#?!PX^F+$S99}=;5S7}* zBz}t&=wFh`d+2F$;=>n7^OjO>%xc2!@I#bK=*6O*h-Ni^8tK%L?KOidX}^~Bu4FWS zhb^?M|80ym|A1fiGDvQe%)uQ5pjFjx2T<_W3?POr7l_)HsT~TddLiRi!XYD%449~r zmN!CS#h)qYDi!j1sjC&nx%czHHJ-CI!*oXzzD7zgYoI!mW@Lh8RAu%9-gs<3&-BA! z-5%&?3+mGNsZGuvW-cEa$#pHU7?<^eDur0wK8#+7v*RPcyx(gQCjW zfBRZA?5*%n1YvP>BQ{G!ikHqZ<$WX5VT1&@IB^wgKg_sjtN$}46(Lb2aVe;frs8$N z?Z3{;Zwq!j&kU91DtX0h!i(~^nKnh(tM%epE>A-7J&~SQL7#|uDV6matSgkHL+qPG zf)<+A1CzI`4-aqaGCI0?<1|Yndjh%Jg7LL@@VB(XlM)e69@cLCTD7aIIuPlMIq1yP zV1C(6-bwiQv%E%Q7=v!|f``3{LQP}>Yyeu?pqvjLMuThIB`{h=SMG_$a(z8f$C+A+ z-RC$?afg5TyF4<5+K6ShVJ0Ns5g#>Tef9BD3P>Y)-_e*c>i7ST@X_t1D38^Bd++Y` zd&q@MK5e|wrFaL<8VjjH1AkJ}0CH1XSck{e-kIXmp-QRo)2?c_=x%(_`#bsPg$oXJ#J7eBei5w|NLMh@_i0`hJO`$p25!P7iye39qrHz<_wg zKJQS;pgbDFJ3ST-q_a9*Wm;P4)g>*hRbiVjnzu~+e;}-lPqW;#Hny<)^a7}jFfBV8 zNC$;-t9}8g$;Yi?FN#~DrXk3z=(UN;IuY^H{D8JVGD1Cj=Sx!5mql;cA7=l;72KQyVf5@w)X-xa*1H*#K``?D!zz3%nQ(%Uh9Jg4g0`& zLURdvFH(7tkpg2)IyzF^v$o!dBCw8_+^GsKp#UJOKhmjkwXBh=ITScddiW~oMvQ7% zi4Z>AFf2oV7hH;M6!2OV`>W zXXC-SThA`K2vl69`YVdAcjFPmrcxXqDB~;-hvboBsPXNyss1E{D>FS82xT&%Z1#6i zaqR3J15>jpOK=%rT$)6<%~^Lm-h%NMhTq9<#I{4X#WmWZ7z8g#IYxmgDLd0E#07df zhH~>&3DB7E0@g%(Yjap|VVR;@okt8^wUvPWKzgh=E>`JG7^eSSItB>?wQT1)6LJvn z?lWf>h0pHFQcFCWr{O>o233?p#SxT%%_G%#d0@P#n8SExH%Par_|?W!H0^OKM0wFPKM;F|X+9Erm1*7{MPZ2Bh`SKyqK(Th zclIOO6O-~nXTQu_A>IkYTHX6Bb8Jq1brqH3*c$MIBm*OV1EkQBmM$Pbe+I#ms*qlx21EjP#kY-W#R70%0C09Z}$3#g{426{|O zF-^rXZwQ3_X}@Ll+VFGoJH5y&WM=6=N8QGh77pN@^j_z+TfTPuArFN0Mgnsnq1@VKZ#azG2o1>$C-N8oU-+w;ZG1e&fxJ zuVOg{6-|HO0R-y@0gPgMB!P*+myTW~ITK^|aza+0ur3j)8X9bi zR5cZjRQ=PS^^6Qpoz@kN!&5!G5#=3*-XR|CbyYw~9K~BYGYQYgGO=7wN5%PQy1qo~ z%Jut+tc%sgns|^bB8^AkeIfOSjHT*zf*G!-#Jm*wLQld%#cEjAPcm|4y`U$-;u<5C zQkjxsRHMbDOvQ9=d^cBzKt*O1waQc}OvsR=|7qn9ufiF%yNFav3*&JpV#gOqij$&* zFuRhCFDJV|cB1vr$JL`;<5rSw`)V<;Y5#PE{T@)*SQh6~kiP*~-_g*iV+JMAh<7V%FZOWQS=`D|}e} zwiQ*!*Dd2MX7XmkTK9Y)2{&0-?cMNPqx{^ysZ;@q8Ip9o91GAMaT0mi+CN2M)gi^x zC1_-g$EBS@-wCH9@$L`Yi(SK)KeN5GIG>=VwOz$frnm8FF0(CuJy5x)S{uec@>CLa zCc59ubUGc;NopC~<#Y^Nk+AbPMM5uFJ!!3fIF@G~v85yC+=%SILi!BMIVI5Za4AU= zBvHtmJ*Tc;ICk$7EGV9k8bq10=eC9G3-=ydX3?-spZ*z!E9q$f$RRt7>kuhmr5eUE z0xBU)qLbhUqahJ3zX;jVzVf4o@E9OQ5=fsA~S zrQNs0Rvg%iod?gz-A+`X4O^l=30>wQhin0^TI(tdF3{sFnluD4$gFfVitI+?vT{(E zOJ>8PvV0~PhXzz!2;}(-C^ZtQw%Ax*)Kn0Sft-KQ>C}(Ma1=YPX9J5cWEbdGY!I%A zNXIXHfvUPec(sSYPro~yB3hFQzZ>{}*tWsTL$GFEXdNdAl{7tqG-6OnPFPY%;Fph4u;*dAx)ljajzJ!+2>PKQ6)B7AOjn6bxV+ftw6OCM={8PE7Jx4nzEuWH-M7Rj4~_g`bVwi(@w_v8>P z5|0Q0dP@4O-QW6pVwDzfW1Y5D233}$-CHE?zy&}zC^#EtA{Gy>yd=%R-az9H|@XrxLm%Q-u;4)pX>7(Bqwco zN2*@_qEGhT%iC|A4X?eu2i3NB<=>4zcTvkF$KVLxEw^$c+FP*18NY4r|3y9bdbo9e zaS!j~Udip|{zy=12NL`?>8#s-`xpN5#lI-W;ZnaPU$^Zyq%UdHkJQr$x&ez#tS0Mt z$truRq+V+9mdIiM^xyLK3P@nAp@Iut3rDi0uDF@ofEOwjA{vv?l8Z#7UP4RM z8fM#2-aC`|e6n$$9JCgFCw*ZLWIYcPBi@eU0r7B^SmvfC4!;Sbg~VC%=guy#Byv9r zXBtlvR$W4c8pcNw!LHW35{-|F&-)XRMo~81?Zni7VAvrT!8`g8uqT$-8}}kv!qxaS zN07{C-mrrI$1CZ>5T)Y!6DJh^qVI@lhBaL+? z)!&bg7d!i5@M~<8vT!#w`>5PNB8LKrRG9EL*4m)!zO`I0QE^}8hX@!H4OKMC)LCEsbuvr4svl$VIBMz>p)!AOLH(H)6#!1+Ka zG?6BYjTEp*!7&Xdsagq%6I=sd{}i2I(#YDU%qx2;{bLKN+NY`uWBrvq%Ba1kF9LB} zgKQIug(Lp*;NXth!P<_&!LmORjv8Aac@5i6qe}5eR62-)@I2=gDLdI|&=VBRg566!2W}{w*K%Fh=fk?v6mg;r>eHSnN z5oAnW*ND9)U$t?lo8gqy^3lR+8Q4fJ6;e%;5|6!BB~n5UQDz{GToFngIU{ZV!9d{f z;V4pRMktqG2VAXjFfy6zt7NT{`}Zu_WBXnMjAUylD|#lH{^3vIa{ZXt=2$yuEVl`L zn)U}XS5FS^E#+(_UK!hY2nfLsFIW5bZi-rr%U=)=yD-c;Hc{?pRT9EkT-~F%+lAW3 zHvr6{>H+gLF3`Sv3ov6)K!Yww7*3JzM2()&bT9}A?hNg1 z0q~DoP#fsb_U`p}1PPcI+M$>ESag8=Qab<-1?Y&wfXI{e-{FW$QLmA8V%PWi6DE0H)UldN}>Fo`91Q9w+(3VS2j zLS32xYoz3ET-1za_>3U31a9vslwt@$PM-^7R{o1GDgi zEb9uG2hVQt7U&Ym$7Td8Xgk&rXgh=s(sq-XftHOFk)X4K!(DYkOHNQ6ikeEp(lhO{ zPTCaA45`{wiJV&DDHJv}eR$jaPv>_{Va&bb7k=)bYL3#^neP$(*?;6>2&m1I_jjkW zc~KB=GgFN(;k!z3K4qrF&QJ_TH}5pzw5>FL?5NqkDC+`FZdW_w>JPWsYDcdN?;F6G z@;!c0|9u{}_oCfw{GIICCA-sD=PtCyZxuX|1>ZB7ec^!5x2+l73|y2ViYi$Oj#k4d z&Hxp-CgVGRv00z&wlmxmX^AL^O?hD*F)GjrEz>MwV=h-gB@dxCu8Uz~;yo<}qLp;0ys%FkjY|FO&^8qdq2SVK4;{ZT+NqWT1ky;2AvZW>ud0ud|Rp~0~j z!33(`F*FBvnGunVU81=_m)t)&T#Tdt6t!Q!M&3F7$iM3?YjTQ#4@^^8NEusb{a1_R z5CfFq-YM2@JoFKIyPut~f|;OQtD^b9I+scV(QvkV z{LIo|FnrHA3#L`xKHjz!e-_#K=A#HO?#b=YjG?7B?m2jO<1bn8xtq76ygk9&Hd!(( zGU0Jo?1@&@aK+!*=+&lMW8%9b?r8(5DPnU4V2tN8Ic>7Ieb zR>fOZLD*Izy}FO7H@*MG?89qNwxpG5L)~D_uF>kCwA6OAzUhkz3AuW z@5+1r3N5&dtGEI@?8+6ZELZfkRgd!UepO8(MRPLUV|Z2~tfABv$B(KM{Q$9WTHDyD z_r)(;reicn0gC_amKr&tP^4aTz(QB*nDB6q_$-OX(P zdu6vkrKjd%l^CiWE6HPVs~L-#rD@I9rg>A^a!#pGHvfsw>hO0c*p@yzs;csX7O~OZ z(s-6vom_J6!ULeU^psRbQ0C;`3F-3?cp40Ik#ju%$|L@UMd#*Yvql8(Z!vtD1W*Uz-h*0DD6l@07MA(h5?R+FQo zWt}H*{9c$v@YPr1!7{WLhikZV9fCB;E#E+_%g4yO1jc0mBH>oZWG@zlzO@~)oAL$( zpftjWOIbnz>wR;6BWU>NW^#V2$DXU<9Q(Oij`w_y>pS-0ev!eZ@k4y;txm=$-(o4-`&ihLDt-5OZjf>99xF7RDeC4|9cMdvNOBxJC1kmIG$}qB-HKLrXXeOzoj42~e zMh+U@v|syx!V!ftNGaid#Dg@Fjk==$)}Yxkg{}?$mad3(x<<@S(?ZH$S3c180GLTI zy!h0Wx~TJ5H+#Zpx|Mb0MSA7+mhu>(D?Zv*+JDqNro<%NBWzB|d_a^FsQHoofd2{U z9^myy!@yDq>78F<=)AD&Cr`cD^9yzAlN^rbP`JHf+P=rLqbIaBOu^lpo|qP_ zcdT^u0r_ZvoQeG=@`1UGZdURGT@mhv4h{He33i4vocrw1$BCs$`px zr3reo4Uk_jE`oZ7nKB3JcC_*KvxKJ4idRSNJ2mZpvH1wkY@8?CMH_rsB-JDIq}PB_ zsWxShxd==+n;&WjkXW8SVMLr0>#6zS)T^DmGvzpFT|MDMj1%*pObySY6^(gE;zNwX zmzWk52}8$;7+`o6-uCv;+d+GvQ{>zf*J9=jmdpW@NjPXXm3>%Kr2=oe~Zof#8_z|YWtO7WYw_(1(As^ zl)6Wfg@EO(MuLjpr5^+vL&z!s4@X$c$n%>Ew1kwV6EG%+(KE0f)HhIYw1QbYVvhLl z^iWq+g#p}es7GB$K+vkN)ab~>FSGm34`uMf`opJtc26gr_yS@PRBz!p#zNdFTr+w4 zvuyH13Mu?;wL?~?73e{ZSy~lP=yy0Pjn%gjS>o;p8r@HjI(3{HZ+tx<-+zsg&Jq#l(9M$Aw-aSPzK`;Kh!UU{tI|#AO55=%UE~gnrGy znQ*xAk4UHZ6|9<&^%WIvs5jpXxVZ4|=-V%&Z$a44`@wroRhyI!wI5_s6@UVFFG|-i zu*jkdbVS*k>f(RdvG@z?@tAXk6&3G|TK(Ys!9&&8=rZtzZ|$EWJw1`tP^f`?7_dzs@$i_?p zp-lWQW1y<&XB+GiuZZlZo^OXs)mrq;E&L}XT2}F=%TPoiHK$zU0A(DdfSn+_dq?7D zlv=X@YUggptYDRWv#LSsvDNieTI#{Lca`q^dn^usI7Cr&%Pk z|5A9@;ay>|tOoU0!PhAVkEsUzWW%!jIk-Z-N)M{b$!s=>CCB6US+NJdZGaM823o{o zQz`)z&AsrVfkPA+Onpr|3jJ;waB~x&^$$udg;)_H>8b`jQ*6A6G&~9k(yh;4sk{oe2E+`!qT5h z;8MssC&ggqKRln9KEz!eV+zlBD^204NSUx*Yy)|L-!ujk6o`TeA;QD=0#UUgkypu| z6taAIOrfDB(o=2b8j}7qkK)IW+X~5pKoXY_C`j3A{dxOIJqBOV8w*I(3;T+pCimY6 zQ;X0||B`{>3E(z-({^huUqyfc0_oQgo!9{b3?JCmlN51TDyf(t{D436LB%ory1*@t z;bUg?_6Es+NJoZ4-as1%+5sERI!2#7r&6Gxy?|({3*hTVWizO4 zO661;@ov4SW}q9r(wB z^h&>NVhx0QaBhx{nq}p%2&1H-DSl?dln{0rpB}8$2F3pDAIKnp#zrt63!UGV>>4Z# zb|v##tT&k-Qo07Wy)U_Ka4E_b})qF(&LmX%M3bMg{+oaimu|H`7&sQw>~hb(-!Y7}HVY0fZ0S z4ux~U9TULDci~PB-({tBI$D)(q#`-7W{~E!(9Q*{4l9teRXA%ahH9xPq%;eI0D=sLHRKD(n2H@u zCGBJiu2#tuvNoHl-F98IRYTRZCu>J*nc-~tiln`2s(MKYnJYFl+=_O!36nUa*;PA< zGb{+?x50OG9UjrB+lrJR_^+pvRwSBA*-7NovQl_GQ#kThBARBT!u}9`HJ!9msc6JX zron6qRrs~9!&Pk{JA!y_vWvU+j_BqL@mS0xL{(8mZ!;^>#yTj#7w{5#XEy#m%X(it zEAsR6NZb-|=I0&k0-MgnD%FRDYw>%bdwOrYajARUZ=hf8y4^CQzawNfW1m3o8Nuh~z&>qCx^ul<7g+nB9Ubt(QS2y1Uv5)0&h=}@hbi$b( zT2fJj)}~iX6pa4nWd$$6O-nhZqe-lCd)KnK({hlDF1yXEye|eo6z--?3aT zj#MYF&b%MUNVj?O{y-G><96InTWff1syb49AyqD?f}i+=M|;<~)_}#>O3oGA0aTdA zxT8chc4D=ayc)X#1JwZAQ6Si;V>kd$e=fZw))5&7B-4NtgaX7g;Pw6^(iNhOwxdY6n_~VHp;lf1R6}B^1zE zzl~lNg7IM7Br~J=&}SZMtV@f=PF6gxF-)E1?aF=Jgepb$k{$Y8CyX!R+j0xD9yeD| z%%`U^!`j5g(@cU-x4{!2gdRfUEpxX(nMCyj*hw7;P=G910z}aOsT`34AqBa@q|83; zHOgKIz7Z}JARiSR60*bziV!DZ7o!WnkO~akKeMd4%PcFPsfOQB)cyfT@8+~|wWaBlRJ7T3B{@QlzzpcC4Z zdd?B3G#pKJ<3iLbUfJtFwxw+SgIQHftqcSWLyL@6_7_!=9YldNO}CuhD~pm&!)8wT zy1oFqQN~cT)ZthKPzBTbprk_cL@taT@o$FF_!fdkpEQgC>|S|ZPZ*8ASqTJ2wV+me z0%7%|fxtOGr4hr0ZyC5Tfjf)OD*~vzIcMH z2HBC|WcZ*Pf&a#*0{ML4sW*yq2!l@c5r>gY4NnoCKu3IH6`zt-OjT z9KWYgzvnn(g=JzrBIjt^U^YbTbl!CG`~4E34C z2(=95siE;vUPD#hevG$Y7%K0x({ZgYZUoe1uof7O9k!kBu6^MiliKudYWgg%n|Jc| zao*Cf$#>Aee^7lqig$hKcK{zzO{6@o`l2_upvQalOTR&BNF1Cx*!cEE-CrLny;S!n z@vVC=+4q(%yMyw1K?f*#RmOef6zqBniYQweF3zbUG1&lnKdcd^-JtCNAu`#x%$K-9 zEH0B^CKel?!hxG^imtGY!}XsD1MinHio0OnxYlft^s$j9amhamnBNedw-x<61G4;o>A@Z-%jPwPg?&sAjP2JOJIF#ucyTDo_@xh<)MRDu+= zjZjKXHBPw!N#=#9L4+1OG9frZ=}9;Xia)-b;wdKQu$d#@$;Hb2@zMBf?H<2o`7PD> zw<}+lEN36k5OZ%S#%0-#D_=KrgV^6SyEaz1l~&$s!pa%ipHafEq5Z9ev97~(F#pZY(u6Ga2l*-16hw_thrfgZ>k|R&^b=6mu;!$LKS8f8KKGT1)ms2l1f z#Q5nQID^%Rs?!jCBVD-n?q$SYUE;mt(?F|D+zL1b!kVaE`c)2_rh|Ig;16~?rn#(z zw2xe(pN$V2i6wf8rG&ApY2vu-4);Yl0A9%iw?x(oxXbaH;%Fz53#O=UK^j><$+pRk zpwh(1icHvL^`uy(+B`QJe-;QV8;N=yT-x8l7qmIp82G1w)c524Z#2G)o2bWi>g^j0 z>rq-zG?F-gj?)_-#&J}S4}EI0%6pU9UOh;vQZebI=wd4)mE$u^e_TE*LQ zFIQ2WXRXe|_Q}n4gC6B!bbBdGS$hKga_3C-1>o04>v#bYj*qHkOMNiVQG2iCAiWp> zw-epwJWD8^5`}f-T-n@j>aFXN#2_nt^30MRDi9yn>-G0-evz%<>AFLlBPd|ba??7b z`b;J0*Y1|smzT^-zfarROvWh}vCCRw^#6CabnacJkrvNB(nYpzvWitAl{1-BGqrOtlW zy|c0-&#D0kDYU1r*9t&K@8z}VzMHZe>z|@l_mLjCM(+BTSm{QRba|ITx_P+8Pft*h zA$}h+qV>uYLnQKjM^6N>+T5aDzy+)Ni=f*SA={_qdo6!x?+5o$>Y?1;oRKs;oZvtk zq8NYkaiML+wa|#_Vt`-lzkhJ=hyKk>@|OvvyeynMK?sB+P3ZlZejr%U!#JB}$-}ga z$ry=jt@OpSvBtO-IFV;_>1Pt>60bvYGSwZ1A9X9=33wJ)V?^T?N3{mTvy*oM*gAvc z{vYI)a<9(iZn%=Qc~>5%Bq!TGv}1=A>$G-U9@3P*L(30xxMvABv91p{S&hH1&`q5& zYsc}R)*26`jy~AXs*|Kb&I%M!1Gcf{6!B6WQhcNuDgZ`*alcki_mZwCQtx>4%j==e z_9`L12s`yCIQQ$2YxY-s6gie;T?%w3NZtdfnv@~{OFBhv0z?9XW#QA(bcsrVKx+cG z2YCl6Tp;TvpojCCz%fEoJw}N~H5vhE!C*R}ea5s2KFe4&Nnqzf{m>#liOr&G`ZBiEcBMB{#?=P#idPSNHsM z<(0ytW~qs+Th&Kg5lWr++)LsWN3~8bve#~ zb&a0=i!w`fL&k+yfft*OEP({gB>3MIsN;;n2_VtKQ##Vfhc;qV_`J4Bw0~AR5u?5A~)gYc_v7MgBF+-|HzX zaIX*i#9tv>TRi)u6%^Xee0-os6+vs;LWd?nwj`0L~!XIm91@wG`Iq}NtmA!Pf$M%VBk39g-S9SuPd3wNdp=?vuqjfTyj z6Y?Y1n-Yiq(=;{6V}`20A{1AVG7kavG6%o`!`gn_O2YIPK#6r!W;c)|9x*ooHKM?t z<0K=Up>)AAy5cB{l8E3bDZiTWBS{AeUFu<2epKWFG5xlrE#4U2z&Wv9sMEj?@DR|n z-xqUm-9CKcM81UB|GHV8?Ib?Ym)p!?W8TEEES$0D|JZo3m=F&s$Mo6WE@KBTK!UJvP=Cevnb{AP&%^t3b(@1-0EAi?-F zMSA#tVZ>;7XdLB52A(vJHyR|=VT-S|1E~B;)m0nd+xVIszki4VA)^+n38bl3ySq=k zTAeqvxN0hCzl|V5l*Q3uyR)9w0x){RS_hLgEPbf0qbePWTGk1KFcK+MbxcI2gbio~ z+_A%Os($mR?bj7cE!nR=5su=?!aoW|9IAJI@~s_)9~tt4eu$e&P!mAC5oq2~DnQc( z9*C!5nS&a()?{;c)NVH0l*u7VqCY8f79(# zntu^E7JvUR4ZE2dMovytH`(;tN$8y6W8nQZtom4hWZZ^AjpF{=&R~1GL_cPb@G-0> zHM#rnrnBKob}W)A_9QLqqHW{cre1EQF_hO8b!@zT_Q80ONCB7${Z7N^zWIF2-_}{M zMDCbfi|p_L)ee+`mWq69&&S(Oh3SOCnP!hcn7ok`gLzn*VBe0y1eJ$dLF)_=mI0&j zBe&zARG@>b>v>lE9CjfGx*p=@kP!qqW}1~Q5XmXIPqu%N6AI?~Wxo#rf%x7)Zb&he zp^D`s=l!T-*>5Tde>4*6fO|tI zd;8|u2}MGhKLr0!#orN%ME(CSYwrOj$yuI@_Fp-6SI6o+-P3WxPU@NI+1#7+?yPpv z1|g{>B&|?DBMBiP3p9W%1V$hWj0gtLu?<%?!d^g!U@*)jnB=ey1lz}E9@|{-a|ml} zV`HP<`+k2__w;O#C7&bhRIci(KYaOnzZl?YJ!Ur$%1RMI+a1aXV%XLM$?p7TUmv|) z%7!o>K*sH`AZ9}N6{0o$GED;W0$M_MyvdyNfL-wbBc$tl(CkE|FZvpPsG$b$ycSf8 zMG;X#|6DApK@B+uICOIDH+b*64n%N54r%qeq$8jxQm<E;nM%LheXFU+^Zbio#d0i7N^4Qr;iq0-BsFvt;>4 zHwhFiMMhBk0~wfQ?*TD3o#1dT81DR{w>^{(hS|f#)PvOQA7fWDh~`u8dFevM=pgR6NGlJ?b%xIL}~R7 z8F?!H7hp=a@7_AGn}-y>X2+TRn-uxc+t0QL_7*|t}9o5TZDZ-&u6<73|@s9o)3Tc24U{=Xdr<6 zuk;a*U$z0h*(HUbfkX*y-J^v2uJ9%7j^}BLZ9Pf}3b}?(dVJUGTNN_mT%bkRq#Q8} znlUuw=lfjJRS~*H)RCkLB7Qv0&AoC1`nvS*UiPDx!RgkP<}e@Qo>KdYt;aO3bbt1F zzJ7jf4G(>Sdru#~LPO%?*U&=BAO%mmq~6HI->y~_Pz##!U=M35j(qykuR>@xQ%}+K zg+wv_t~E7BR7KbNN{;9^kbpEhTT_t91K%zIg%l89+U6KP-NYQBeHc6&B0Sf7-_iK%p4Q6{oxq z|C{}&nC>?>{Oph`?qAd<|K;`V-j`nP#aZC_PxpQF^VV+&c({Xp$qef3*(G{!$3qBR$yBi6(2=kH**jnhfuZ)n ztLNHCYQ~m`*IKlrxPrh>0A`6LKf(e}y?lW@L+^`&t7Ik+t@^&G-Q8yGr(XWS$_xi5Ooe|_xcb2duf`|hj_!LGAs>o}*oI{+-gMP& zHS8J!G-sxP{SPS|pv>;h9i`OJhf7Xkq|t8J0$U0Rq2KhRMG-hBDD<{o(c4-*_6)UWXOX&KBp$wN(F><(UvAa; zG{LV`Sg@WbZ&A(5t}yPG=vf$i_OVYc5U9kZ{}}lVDzko@QJmg7#Hmpv@ttU|HxR}- zQbl3E^u|fgr^b!%G?==Ds3?$+u917*nv30U-agEf2{dQd)~L9vo47sEZ~^!~s8o7C zwDxMcgzgq5ylfjU-tIgfV0@Sf6q?uhswP)u*c;a@7FYKhy^{@s`hWv>?WKGd@VD@R z<9YM+cx16*(=VdMx7YQaesgc@n%>sCRv)>DNX6AlR<~%Z^4JUHt}Y`YB@e&f&cIO` zrC=`jOnfbv9hM+5I3mM#kGP^)gbMYJ!S1_yu?U%&E+OCVl;0mjoyHma3{|wR^WyfM zzb_~6KK0b%Y4#^WV>s&M<2kH8p+z0#Ri|iqA7fXOgD-4nwO29IFK3_a*0+DRl6eG; zR?M83qiYxl^j;G^zGV9Z&Qg|?~h)Osf56dzwu`@7aa*5VgV?5dPcL7G4Frsj+ z*szwSppu&c>RSS0I>>~~hq(N@<{e$UVZUCMn4MXpbv)m@!bgd#;c)3HDX#a{e=1r+ ziR%@*UA1q$!rN~{zD^`%aoZ1F=YPk6HHMB)J@5B?0@uchk*?O!9b;c%KZjlsfsbi zU?idAsE(XX`A?y-NKsA*`Z3FOP)yd*1vz9MXWTM+W^7cf2&L@9yhnMjYeASnFWc>( z*YTe(u^KT;r{IFMysnMqV!J1(7Ss;PA;Sc1cwNl;&7O13qeSvMKS8xm^=Q-Y zNVQK{dT#HmYMSco-Zj6QLjP=9{ax7;`MtL7`m1`TMYuyDbI83HA=H1IRs^t|jv~)}zWYyWR%4t4? zzkJ!(o6&UCGQ=p;H7jN$sfJ`U{czuVtLOv7!fG>{$a)*u~2#K|q z0ka;&1y>K_*n zHTxfmWe9VufMLLSZTG#R7zZQZw=@!ZZ`S2TFX9dF989GKQ-Ak@-t#(KnHt>pg5H*D zw0;(jO|sMDbqA{pYTT!CnFYpu5Jm?lK}@d-BYgC(kgr&eZ87 zrfqT>uC}VqEMb;x;ea_TLg|0$gI7{1vr0K zkH@*Y|#;T!tt@7fMF21t8?cd-ezbr9v+5>fBBb;RD-_hA7I6?!F-7w468bMZr zP(?Z3s9&tWe6lvhgQQvNDkwX%zGMrESgO8$HP=`TA)q4!U6>~rM=0g^HhQ@ZSLhgT zxfN=@jXc-*w8d{Cq5m-FFFKgMmon@R8#$E6Smd$k*}#jB$RgyisP8rE3%AFW>lq z;>(VQuzxMh02L3D##fYc$V!j{p_*xh6Jsdd3G-rf1u?WQ9{**|#K-1Np#x=N9^ z{NYWw<+P5w00Sc6rU>1Hd+K@I6crrvc7zqt6*oURO4lgLmeqEn`c@%GiQU}$-dx}q zutW<6kiO`xX<{OBtx~OdxaS_sdd{}BnkHs%nXt8Ox_Hx#BiWo?ua0z9fUVF=vHyu_ z-;9borl9S}{-$P%03BM+n7RBULRSw{s13!Mfi}Den4BT9-TDgW>id9mcx{T-r7eoK zLAV}80s>|kQ=tE)wjDyeM;%aQdvARois){WkhJpGFB=&dOQzh>&ff%`*N0Z$?e=3z z1TIyfJbj}Yk&1$N)f8eqCTr!yJ5+Cc{Uv)N?3jeNL^ayDrsMO=S~uC%3koOpkJ2KP zfs;^C4w*(^iLE=#qdE^C=5d>c7m?!!G6`6#`rJhMxOcSkB~CEf{x$v`i}ReU1pshR zFVD)yy~7`EVJ=V~uId;W^x-U_6>tfpmsbNB$+ydqhX*gU*7)CLYlyMz_X*%SFuH9` z%<8e5#;|N|`}n05xYu)-jz3T@vi?J!1zS3^{qEwk^zL7ZM!!VsXNz}lKeMN+B>APe zzsjxpPl)~Hx-q@{xB~KB5gsF9F<^vtIcQgVf~$@KIuW}Ok9A3(hk{W;9N^R%H42a- zJcyvddG^B?GA#-c}+(u_i?4ZeybaTuHdkgai#^(IWl|oSFP~BG|dA-9E@$ z^<4W0d_D2x{PrK(;kyt>gZxzb1KYv%;kUIrXNfA+|DxSK?{9#aUHBOW>>}`?ksZo7 z14C?U5K(Wi^i-Reyx}*l}nxj~Fsi+VjZDLY5rh9<~U=U8(``H#js{H+Gap z+?0IiQNxZp@{MXLxB-b@5zTI9H&mnc@PYmDXdDq!f@vmZja{1=iT7}XBiSb@T1^s_jICF~a;cHKb!;5|-=U(m-6y<*XySFVaqj-c5z$hq0J_20<}v zjUi+k_G9KG@UM{f!V(&HJDDpCK{@2+?qOiG_`eO1z69aa;7#nSId+` z@?AMM6}@Y-s&2k3noeL0|I3AML2vkf;5nhXt{AF>VuR62gBIfeTSQ*5mB7kn->xWw zTe1l7+nb+F6?Rt}PS%c8<3qK*#rRn2pzf#xKeu*75Gk`|Fzwc(YDk|RSf5T#=hg%A zCo!H56*p&0PbTwolfrzKPjZQDAK6eT1A@zc@D_S;#}`$#?bQS7+UdJ`%_Z^5{{1V^ zid%N{pE*HVsn2=ouygeR4-)Zx{5WtvK#30V<-L7NhW-Q5@KAK^x%vuG5Ip2UfCD4~ zb&)P^@a4UHNzYlW)Z@wF0ptjXqzSmdix53=x65yRqdIBW#A6BO0Mc-xQ2=Tpy)5BY z&DD2UfV~2Kl3tn6h`ZlC*tn{ge9RlE`|rt^X$2(9l8x!jzLX*!yAC{91~Nwh3x3tx9N3# zTk5KNQf4D@OH@J>PBnPu$xuQ9*nA@NBS>TC>ct zGsvE>k&vrAY6&@_=l$w(b`GFH)`doY4m1v6Zlg`mQnl{rfW}ao@runkoX2}6e{Rb_ z=JWYgtlP5_o^gZ~c)2PrgZq$Q{J^)7(d1~i^5yw?4*+a_4UP0-<9l4O8;joMGF^`7 zu|Y4Id?GUH@l(3dlL1W`)iou|1A=+_{Fw4g7Yiwb*LWdqSt>x$w8bb9o$@B&b{fF&mVD z5}alUYU}|gkooP-RPFo{j93*G@beSXI27G~(Yn%^ z2|z7Uf=TwgfUr?OpB4BZD)9gKW+X_347|TKpX*%zSpm;q0`IvE6!X9Hg%vaq1Vu#E z^{Kp&TXLu%a=D`#?_$yjI_P-*DHv?zE$ePOK_j{Ryx&{UZRHF;*4r2p!iAq*_>}NQ(6=PnyVlfW0Q&;?iU>1ZWx6SoK(w~7!l%I@)+x^H zXpwdPN0f!9w(mQ$rhLLLZ)qhG)7Q`Lt14!=Uj6fRx2~C&WVh~%Gk(5!N}%#^WCDu9 zL1?cpv0l+|{gJB<$qaezL$4oF0p{Y*;OC2|T->rwF=fQviMFv0?ZPhnD{@`G&c4d? zfq4KO@m9~rM_wt~BM%>UY{NRp6&bYHI7N(s53tXKDtSdiplR4pEnOIt5?Kse(TRr< zVyY>5@b;;}Lg^+5iMpLL*u>D_6l-sptnWCseh}4c4E2}nNW}gn!?w-A^~ZM9r#25Z zG(FmqL^-H|gqKXM!P}EC4ZjGk9D!{F`e2mTgGE%M>QXo#>3vQ7#o%;8)A>;)tK6&U zs`tVuxbBfXwSAd^Vtd3k#*&%RhOGenx+SAYIhv{-MBESeZQ90~qNB`h6y4LC&4brV z;U};8i_zEb)pW6P?f!h{oqUk;#a9v^MLVw2$8oe|6C7kKsv&S&QlHs~RDv#fK`l#e zWg`NKD)dBds19WVoVPI(29+%0&*wBA2fRz zapQ)l{#uhvP%+bdtsY&5sICV)uLjKm4g2|p&#^D!JqJDBOA#g%@=B^4cp0q-evkgg zDJ*MrvU{j8KnfkZzLrX8s%Di(wmBFXP~x_Ylr0=dq-x3Gaw=6G9tgTlGz5o7ly3m| ziEUL&1LGqjdnPs*nr3X6*fTORK2TC6ll=H*#a3h%jFh9a4n-X|pkMd_+Vn5*t_G;z z2rLns5qoeDJefzi@j4Ua3U0zHOu3K5dMVbRNeP#rezORLCz7M!V+N~Kh6$4#C7(My-)sk(oSWHLP5+;X_;d2Dz4-kpm zS%ogG)~2E076*eIpTi>=gs{k?#`v^zQTzsa;}#i}k^C_$oKV$hVlSiKB9%0=?^fgo|1h-sjR_=Eqh6ckP{ewSZPHMQ$$V&+Y$(c3_871A`%jYgQR0vYSNHz4{qT-DwHt=&cF@kXj*DtI9$jQ#-VfgqA@Ww32ZR(J3#Wsq#}0c z*>Dh$hm(Bbb8?qJZNcHZTLn;BewZaPbuHrp4MtD~*`t{R8_vtBT6Oco)ifBpkgf`D zMys=BREc;jKg=&sRlS}XbHkAoAd%E`HJ<65!+G{Vrjm(Q(+DM~ry^lEqPVVt z0kgsu(WWzqbv}g=!`lx46h3{W*(z)iiN6f6idsagg9j<<1{{Pb&`Z-z6uDs% z?tY-?h#MIDLHWsC)4aw@nOOsyAe*pO9mFvx3b zvBM;d>aGJLld0H0P>ZpNWCTSTJw6n*XCujpSW(SRg)$MNT9`^tP1)h_?*f-ykwQfo zMhQG18*yA6$#(+dGCevG-%Gj~dXPBf8t52MWBNRgIeJ_Dni-rc#$swK*i(PV5g`<@2aEv0AG=#dljZ?f(W+{M)eq1&HAs^>H!%x>`x1i zz@|PNxFzsl;IY7app$@_slMfc!yfkx7+c^M;C2kMalr8jRAZj|Nw#IWvIb8Em&Jg1 z#Nh*=+W-&B|DTK>_AaR1i;Lcq$-CHS;8!7L{T^698h`-X0pP*Z%ZHsL8KMM25g9Q{|+Q5dmxT! z9ux#wwzQmXL<+KEg;XsR4m-aP4#tBBj1nCn|Gh@F4Gnw+5`YD&1f!ssWO0Rwdg2$5 zcj+pHXYR-jA)i+hQTtG!tC{roV@@=8$@{E**Ev-j399AyjfX8sgzwiusV3LX@1R%I zl(?c!%W@<nh@_94244@H`aYt6u9F(4>DZzgsz?4S^< z8(FPq7^dRl7*n8rWC_Lq%fu(tV)UDKPP?=75Vrw8aH#qlA3SvGS-wN|m3dGR-x`cy zUeKBcBME?Sbj`r+u4&l!`3gh}L$G4q+OtY_<>W?}g%BY0nM778Y>0#}G;+QCo+odY3bY`NYBH7KIk`piu4^9$K-3a_$Old#u z*K;u>rjRPij|l$p?wIomJ69rq7O7+^g#s4dCj7TGO{=laN=Q3bWz>$WdQJV9z6&sRqp8}aFEr_S_t;_7lgTN4J~)k8|nx8HQf??yj>w;2UCIQP0FL~I2vY_O~i995@WCX5{v zO7u2N?*x+Yb+F|?x~i)`j@c+1$Ufge;dr(b%eFd;zqipe@ei;%bQh0%@iyov{sE}h zp^ys+LKoe9ESFBnoRE)n(zT= zTG9 zO^QHYtzSFf{Lqf>Hba=#qWI>yIeM!lTFk8v z1*ba86YO6ThB=Zdr&s~ZF(QiJG@|ynB}A<20olb;6TIvAVnR)A+p2B3));Y|Ep8;0 z;^S+Xw>ic>q}A2d>mwDz ziRqu9D9p}J{8Km&I~!sd*x!N2ASRIeut<>WjW0-pnCj>f^dG$epFn7iJlrBp?$yGC zW8YRpv4AohkMS|~7%XZ90Cqn1Sl?lY&|>ezJ%Cf51Ft#qKI+H!9RUZLgQ9l$aNlth z_z+jm_&%>iyk`hjHo_g)gIvm&1?~?ruc;g2KEsi`4)zz;loUzROb2BbS9gm`;v5DZ!6S0OYN>A*7Vc7 z295$h{48WE@&>^h0^JK(0F?SqE^E)uO%Py&xlWEDbr^!4IuV0Wkq5-W-}YTm^*`h7?#(8c1U4F1msMzaWmV93Jx0wb*snY!O;w%xr}RqWbQa?$+~_R<=z4 zc(uZolZ(ECPj7FMdrKCulCiKYRpXV6GP-{Ks6JJw8j}O`SKvB)3@559{OX(fmKYPB zjh^Nr`7Ymx`L`1IKB#e*)O#@_C7z1|!P}E(xM_he$b7;@oeBkGaMDaHRe_MhB{kTf zyXKc_%?}1c!He#LW)Y>v{g5ai(QTiE%iSp<=sg@!Gi!EBOcLd)AH+@F3bW_EDbX?Hgqj)iP~=1i9X9EPRkD-drXvfXk?0&&W4*3Amea%+hwyC>X&uc}3P$_TRC;vTHP*j{sqAnV)zUop=}D z+&HuC$dPR`8_y2rlj~zvvF;!)+S5&V-KhkxHWjGAXLFfKQeGNtFW0q);nm~xXwY7j zsbyf5^;eMUoP&Xhcl89dKyUMhoxi7=Ql~Ge8TBemss*}qq5rPVSG^iiWCQc`c9N;d z|G9k?ozd;Hz4FMILABUVQ(-nDiicnWpp;Q$Hgqh{z|vsPK5!hBHqIGU!!nFbMyom2 zxi1%;&qbG_x%p^L|HR@O)oAB$qPbS6L5Xher}m2FWd>32`z6KG@dYmoh7SoUG#79 zqJ8XM=BhP^sPshV--*>S{M?Dt2Zw3SfIMHCR;7;ROl_(EH zJb%i}P(8}q<{H}$YDn?SDeGC%%>msnJf-LbCc|5XR8bDFg;op!(#JogtUbe)09O!g zXrd@VV_d)g>Su*YGMoY;oC@SEJi`)ofoG>gSS0IQ_6(o%E5desYXm4DXYlph`saP? zEZ2{xL~kr{c`sCP1V^izaWF+{q z$JzS5Z2KeErBY}OcVMWo{W>b*;Q(t}L)^cBd{Iafk|>#~3}dc$CX|%dfOEfP00@k! z)a_S*tI;lW2Nf5?ev74dfDWpOuAod$QdCsi!;=3(g8f)E3^lBkfgTC4 z(x7aPZv^^S9`>e<;{YF)5|V6}wQ%n$9Jta&Uz9@jNd8nMKVpaOh$}5oKd8hfb#Vtj zKE)$7HuRmfT6Fq5|IJ^!^pzgQFHXi4{+syUad*_yyL)LRWFYG4 z^dvK}bE~q_Qmd`2%k-;Quoe#=^<<#d)4iAB@=otJD3;T2w~K$H_d}io1QJ@m*s=C^ zPZ~Dh1AU#QNqEXfVbqN&?^^C^q-S|Tsy-)vh}KsTFIGrJ`oDX*$PbduYTmZ z>mIr8Y$SCtp#$}UQxL$!>wvH;3v0+COFL(F99<7Q-Az{PSHBjj)k1H^Q?7gD$;(t2 z;5J;#0XHF@IRu?{eA}mKmISp`Tt!l zb5*p$R##TJ?3y2>MJ)~~hCdVXiT`ZW(m?;sQz%$ro?CYOZ9bIIt@JMl@nZE4osNJ1 zKEa2&7sQECxTxw&i|zK}(ma2lx6KbPaNrXxaRY8#yIjDJL)tvc{dJ%421{T2Od`5& z584O39o-6A3>ko8b^UMl9gy+XHDSWcW|(s|S{euvh-V;GOp`rKjx z9~Lk3P3Yx7Paz)4vjl@Xj{~V5ESj7wRo@yE_>-j?E|;=GM3n1*J$LXv{c=i9Uew{Bk^blV|N1l^B3_|6fpxk3i6r|zJ#u6P{JxVvB9oS zLOxmcx#k3O93&HTAAKiZPW>Yp>Trx9Fd=WD zzqzak@4W;DT!BFJTf0W4@;mdac8p>ZZ}Z0|iOo!GT88k1$i7#g`gi6|*R zUZ&D}Mr2KuE6sH~^=%OZ4B&@~ItZFx1oSG4vjXaqti%~=*RCF?mx*jsXDXH*DiweR ziZqEmnIyn8QNuCS9v%v((+E%Gbi&sW^MNI__vJLia7-<7rMf6`Yi2w~4ac$V(B_kV zqi!HSA%3j!{4aJijPGl(4#S0^W{ag-9quNLssNP_N5>(Q_jiU5`e_|wzpP0c#MFRFD{+>{zHllolwsKaPM??$$o>1D@z#qFqbtmUl zb$-$ai$`SnPD#4zyC{w|D+sfQ;r;HQBgrhmpx9s~tiwu3V-GV$&xRDy)gdA@*RV^MG#dYa{df`m@iP=~g#aTm*fqWwbf zponJN$l&Q-=&L zKV*egXNA@+Akn0&g~Y_8boSAS#1bkBE0JP8p*t)$7?B-2itF&eM^nWD?4zw#n;s7> zv)X4%B3zRkzH18KwHK&>*FlebWdQjBFb?4LcmqG*R%4cI!5|CWDe!-^NfZXsF7MAP z#j}&9>R*%Sw{T6(KEbU=i+s7#xBVK-5KSxG`+`>}B1ru|S6@C$HRX zDqo{9DVFOA{OqO60;&rXENhHUoB#IKpL@@)&*69Q%Y4zAt9wU*Ny*;}xeij#HmDQ&YP$u!a)d<1=i}&c>AO5z>c|*8N-+vncFe2 ziD$*N=*rgKcv(e(`)Yizx9=s)wNN@MUW^n9*$KF!Nyoatb&M|sf{6Zm1a!f(QGknZ zQ99ub7tA|QVvHY(|KV7Q6wBuUMDcTU2BD=K&HxDz;6*fy2-^Um`q+aoM#ZfY$Ou7z zDh#3k@JGLB5)m=IeE$GE8jGsz8WLoioL^L82Ocu}(!N;r)q5E{bx23wnsc@=hwx{^gq9o0{M#Fh}eM4bA`|8#lJr7Kvfb)8RvD_w{BP5j)1&WDckf9`E;c>q%6nz8bUY z@*da_=qBmDjj2Y{ooY-$Lk6ZJzGtxJ`?6t{C{2(d2V{K%n*^1fE>*ASlzqFILVR$9 zQnXkiK^m?U0bYK}WYWg*ojb?lQPehL1d%}r2#ONB?@Hd<2NJL zj`j{!kd?W^b13}XdEE2cdO8Bbm`b6RAM)~6Bi}dkPW8D7tSYdZ5qvIr>6@O0#l32% zkH~{syaLP=BuqRA(Wh|95xg)&B#Z-|YEM=l_A`|DRAcH*>fBxccR%yssDsqB3lAKx zZLe)Q{-Gd@udud;f$3mD9aXc4%~%(VSW)ZZqcR?nRq-6d8O38Bym~Lf$Bu8R?Wi7q zV3(W>Mbe&w$&^)8_>wf)5N#YrMQrYO>N|`s_vO8AJ4|>Ppk2e_^RxseAephaB?W-3 zL}Gaf^5^}^ySI$&fF!bGKX_a$s94YUDZe^0P(C7xN6G^;xR&dW{C#03U*@s24sdZQ zlndHK%^DII&>b`l8}S*g7NHYdg=NfL2_8ydU|o8PJ@67h5)HD*V``4dY^m_>r3 zLCjo+G`gIR--~nW=-iv~*A0cEsCKhAvF+^A3Z(=KK}rw9M(6z5bLq{Y6W(chKaWoA z!MMtJZAl477zbqC#QY#jALl?25&653U@elSk8-(PJ2sgBF^+_dkow0sR@T@U$I9y4 z6G=??!i`G78Hk)j8Oxw?G-_;ki4ZZrWSN&*PFlaFJN;5LKlxyq1vMKRXFS0Z0V~!kP^m@LscIcyA2NJu~C#- zvQ^>4Ll2!0)Zb7=sfm&ik|6HfNrDoyo06y=97K7+!HBM)geTn6j*PU>hkoZFASzqZ z>_J>rE~CcG!CA>-<}O9qMQyCn7+~MTyXIh9s)8bqLIRkgu>d?WG$?mS;@$asAv=T+ zIw1drSjkmu1T2JnY1M5aY1(a;V4!91oIz~!?Q`a^Id^+JVa}}G-CmCsW)@~<7UtZs zPsU>PdhBs`?1_48`Bb!gT_kc{IeMzM#fr_7Cr`3qb*@-ETYMO+?i^bL&H(AiHOlPZ zuN20>Y!*TKOJVH0usO!*P!*ORI!2<33;QDk1zrFi%}+EJswz*C07u@9oYU%}D%_(k zR(B$W22Av* zPfGF+_t*i05L`k=CJFdk!*;S>51p&_`i@vsN-^J!3<31ZoBFcnnY2MzX) zfC{DO^IChUO;DU|n11**=jrnE-jW|^@ssTq{f9Xua(qFOsao*G>?Qt3Cdt(oy37_- zH%uwm9WgSo1hM6^4x)v@Fkp;o%*e%=qVQ_Kf@@9wqf33uCLKQ2)b;x_sI2*kPpAMu zyI$-C9GOgI1p*AwD8ZPU;inn z>=!X6f$b5U<>Rl9sLEF$!%zm)Z&A7NQ@0Qmy@k!Mvn&Ajf`*!|WvyGY$6jq(PUoy+ znWuPIQTuWi`L}rUzN-&WMnPp&8-f7H!-6?nghy9>sTOl)+Jip%-#q$2L#lUueqmw0 zK6i{C@KvMlK@yCn??js9!qURr{3rP?ev{icT98vSK)@l?fq);4rIx(ttKPa8E~<=p z6NNBC$wo_XMy0?^>|SgN?Y=O3Ow-;Ud5fk!61hjyULNkOu*Gm^LAGiTM|TUmwUk-2 zU3oO)8>x=uZyovYJ%wtrnB_@0Xdi zfbe&cRuTT*_CL>yW9Bld3hi=&qbdODsH+pWmzP%+j(gg3-GkPUMcfA(<=%6mK;X}y zGgTD;V4TxM{4QZGS96yxiX{Bq?c)WmQx(1-s(bceJd4_mH^Lw;s=Igh_Wr|@RPX1H zU~^nu{@x`)hWTo`5VdK}0z^0cI!(;yMHm6ZkrBS~_lAc>?Z+g)`p?04d-4Y9!39Ka zc5(JRV=}2l(Vo1)yEj@<8(z$;2UnW<@r-V#Y-4B$$)~nH^W)Axz7pXZAToTx_V2g# zsBX{A@zws$$CsA6{4BthFw>fzH=2<-Y_(JlEMHvhA>|A)8&$3b(4j3Nk3%6zrx*3z z8(JmFEe^Y6;>YhVqU&KQO;@SsZGfyb8rcuEFx*=q-jt`j1`Q;tnUM6y^uABDQDcWP z8Cd|MCJjKgt8=xW)NVaWITVk!=DVf}*ep1n$TG(hamho_L$o7q495v1NQ4&5z?-A2 z0-vptYZ5Ius^!AOftl9Kfr&b>+3W1EjH(HJ6xxX?hUT){T#dCB7b*X3adFK3(z$bA zayvf{WfthI7rbRAR7fOx{kfgXVaTTTvc-5a!p}2J268m5ON)36x}ypk9#!{%Y=#Z* zG>9@J2n=?1Vqkc@c)mVY&at_AX4H=A&`s4bCTz`>k!gePn69wxV}r9n zCz7tR&Q+m!NI$6CV(yrx9m|QfesV~T$U`S_C?7@<=i*DZXD3nV$k?b^cCPjy(j;gk zRA*6=SY%_{%XtHXMM^kYD4JSxd+&*-1SMt{x4(3(G?{VBJE2X%)MS8newOF6$*?55 zn0Yl&q79Ji4j_gx&~$4wJ``>j0F^=P4jh+C4W>^L=@JlUxcGm&X@|& zK{O5Qo11}xjDe@t8fxwKJI+C)RhS|Phql3G`-iG@&rv~m3dmQR@4O!0d;Mz=Y{?Ef z^Mas?PoXR#F8Tt(YlQo5gZ_Iib<<5Z{o`j7nly*wzYa)=vF`~=Vmq9d?9?Pm3f?H{ z^1Gkbw5MSbqx0f}nYY2?F5D;I6;-Kw}0nXB`xu#vuAmK|32vN*C7eIL~*$7 z-21Wtd>p=rx)&i!1e1)<22q`1AC#m&_ybA$V4?7=q!r$!Ip;O$i;niL0=o(oH1EG3 zi<@JyCq-HQgKG3zL=&vsDa+z3R}4eGHd@6n!|xWL_Z8T0fa*_E6^{zFDNT&cY;}hE zR$zGKEBq`)xZyPjnTcxv3TL{BDK-ocs}{m@_%d7OG=?pK2rojpo>5F)q|*zWVyw*m z)#^n3CI%6wE(b?RW)0Jusb^XbX0 zZ9JNny1P3UptE8mP+$)w!H`afY3w#Bc()m`bp5{YaO8o|ckrXvu!jpJLEJmhv0+@^ z^ODb;Uf0+pNt?DHF7=0waX=A6Vptmp>e-fK2F0Kmm6svu+!qwA6C=YzF?H8=XH#js z1yi$#&|EQp{p_77bVF)NGVGV>FcxPuLw74yO8Fft468EwfbqFbH4K11jE5oH3#vEN zK+?F#Aw=eYrb1*0>MM^*gMtHK*Qo^ilZG&`H=Sqs+yDw7)kC^enu@sEU?SpVAxE3! zqx=D6+rj;mjEYa>EEQcsbF{`w{dmXlco_5eq`uFGWLUb z21)`9Bmd|azeFx0e|C7^+S~clmXKsXBAFG#axq3Wr{`4L4hHcmVdy ziY*{?$Fn5U3|U;=WLZlCQjgk@f=W3l%IY_RLEFZzq>PNI#&0M=sezO_MYB#Lbt?J2 z)jRth@*_d${FSCX7qL3u)ijo|BF||W^|efTCy#?B`Thv}cXxwpQ^B$|U^pVr4(OWI z(SzNNAZrlW@rWFeea<_@^-&C5Tm{0_Xwv1_fPT$W`n^3BF=<>Zz>r=+W)M;U&XTI| zm3FsW3xJoZDWE5dvhQF9a;tP!>0lx z4pS2vS`kXyW`-v7QjMA(E9Ox&q>3Z6z;70kBj`plUUr`$_pDQVfR`E89hDz$oRUnok&5}{^z1r>G4CR-yat=v zoq-1eZvZuYZ{X>`#{!=Xd^PY*v|0n!Z3xLFe~ppC_q%JC%&*uf`sa&Xl6ZMkK_as> z*f8%fH2vX5nNj3$n(dDYkyZmlDj?{%bSp7SO2X}KyQ`Z)HnqBwxa{Vdt1$};bNHk6 zUi`HS7*rkF5}X$j!J(_^SkO|G?+=N+gU{JdiB@b;hdR#O+9MR?=` znCqAM!;HB&fP)Wr0Pif*AYVqUPyi`9rjjv?TF`WQTPXaZbq`MTj`q$Y@8!~ieYf{t z=*j%c+y) zB<1RJPODWYv=$498OEPa0dQHX@E^{ge*13$cGmh@0hhE2%ls0j;MqGq$N7Q@i^qQQ z&AC83C5t*@r{Ed@>*lx?q!ocVlU35=37++uyWYr9NkSNThe>jQtcU^C;A$%zjYmt< zDFgsYl7>iV!Bktwv}I{+Ls3lW(56 z*|eEpIe(<6h{IGg>BfOUgw-k|U0A5|x;u~i)5pl-aqMctmZaNbsqi?SO<)9+eM-8% zmrLvAq5HsrtK#qK79_Ercucw!qTBsRh8;vrY!SLS*TSxFCPc_BXlaiTHy&(o8oV&S zuZgGyBNz_FN@-0UNH2OicRMx^ektq}^y!7OwA|ymduV-r`*lN;#MgpKC=(V#x~Fr4 zzIb+uZIIOtAT}%jX_)83qRLf#0-lE6%XWRboKGX)2O+pkV&{IR;alSP5bt9k+K~+A zo6>|9N|zN;KOyRXqqJ20(PSE_vfC{&B}nN32D1X%a=M%wSvoND0Ae_$2eXY?{yC={54#hm>Kn3-?8b| z%C8_WL1I6(%(!WN*EGLt84!tq1CY0F=HJK;{l853l&UvdZ@Ry=Pgg%Bu)QWwkj$?c z#@G19-xgOAcr{$URBLC19f+eYEE6f`SWIT9`9^o%=9r=RDl>{QUZ z=$t1VWN^KO>U4sZ)L>LenyxeE8N)AsKArSWqg$Yp{S!LpSJ)!@g(}m*CQlwMa&O`N z={xY1B;G3!`#72`e7@Z+w(VQ{rv@@xa|2teX{%qT0y$<@up zJNKQ~o44nx;c#{CvHA9B_Fo_;4E6odIH5SS*I_P1@J7Jn=B~CPIWVCwQCKwGYt4r6 z3$mm~pIg@8`IlM27&J1sR9i0zX}YEYZyGT@8e0y94*puT)wRhj^7(ZHGwcL7t#d@CVAhS=bDeX2 zJGWBDvgBSmvrLP<3@9a?#l^)|n=Q9L39vpMoW~dS{%t-z*B*EP=wmJX$NP}x7JVPl zzQfdqe5^tB^pe*2JX;;oWWXh(-Kp-lxG+?O`9 zWObZB@GC7^uh7SUxkl|f@)NR}uP@Bcy*q?(S~z6ZbHd?-Pz~n(;4S2P0aVM>E4T^r ziFv+)^#JUk0??-Fm@vO^Qo~VhQ8*C^Zp=1G9wowvaY?omsI;i*L!^%P03y<0F~C^B zY?GmnR0rSwS8s=hl+7!y4@&6dz+Y9Joijvw<4+A3x_*NS=M4Dvg9D^WB$*N%yGf>nD95{<_gO>$5M=L~XN!dM;UZdd}F1oa$pe7Jp{NOz3XaKI!bq<3grL$5XM8@r7owM~h3SF89F^zQ| zPF5wkmSYR)#9aMC0F-5H`yBW#uW80UkKZkI?cFfqkd21?-#!iGtwnYoZY3ZZiX$NF z{586PO3hh++>w!!)Cz`@!YJ8j%b)%<661mhCVcB#FFEq|0zx~ER|^WTIA5z7!aKP3 z;JH&|sPtLfar!jw%|iX(wd;~2Zx3%6B;)hohH%;lg^Z`rEa4EXHnT6oOJM1p^|T_o>hZhJ!>fH4#nZys;E7OFZ~`<8jZos% z24Kjd5GQXkLeiqHA&I=X%J?CAmHZG15GfAVN@GrFAW9Q>GZ4wVA&B9Ka)48=&w0qO zho^;v5^OL}WgwRcmf|Rikc^QTguO+F8AG2K-wfysu>bu+^Qxw>pKr^X$0v|DX6w^N z`0y@6g(n16wWl_h4M7cM%h`}B80F1V{OF8o>^dAa?oA^2$U)Imq<4s!G?{A{;iSs) zVf>_wpWa(nl=O##u*leZZ_xC^L_zl5pSSCqH`jx?`?>Muu&&*(*TyBmBf+Gk&-1Gf z#-FGV@HtVOS`*JZi4`Vob z$~NT9fG<=cI0P>EAMBl;-aCDm!?N58#?VM*HkOYDErMX-3Qbr%(ilN&V@bu}un<&mH#v)O>Ve1WR zLb>weF8xK@dV4I3niFrRkChcUX&B)INEnA)|I>CGxCuL`y5nU|i~o|?Vwfbesn zb3W+YxHvz7wC(@}c-q5vH;;h8I^)IN!)obZi9NfsJUTxW|DyvlA^?hK?pMXXofzIc zw4B`uI^AA8(j1Ou6Y1i3+ks8O=aGxxk={5bzVGXB9RC8+8#k4E80Fo;(Srv9TPHEa z4WroF20Nn_qDyq-W*!*I{M8~n)XV7Bu(dgt+Z>L2IWgz?XvBczV-mdj!e0so`%Sdl zwg5a|Xb!Uf@~ATi8eSYaNPbt)>Xx`5z)ZyOV3c|?HSFQgzi=m%QK+flAMkzT1V zh2zcqm|~37Frbp?6%@?%^fwiL<_v5@u>OM%1Em49xI4RG{U&@`unwfFvH#?8Yloar z_WjYB=;>(m{n^7M1XjZo)%p2@rypeZ^X-GB!?*zFXK+EtImAs`o$GJ``d*?j%k2zA z2iB2H+oe+o590Ky2DceRc}OhKcxi0;lLH_E z`(9KP;i*$xCdsnTaN!2ptQN7tKm(bwR3&UhG#n@=v6m|S+FX4^(c}5}Cj9Bj2;l#6 z!uGMkOfXp~jw6V*?#VYEVpN#!3EQIUigv_%0Dsnd=jSXVj{o3VuMbQarZKj?n9Yp? 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“gU2Ebm7^-Pz)Op! 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
    Bi7ET==w0ED@om}nElpl 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 D#gX8w literal 0 HcmV?d00001 diff --git a/soc/2020/daily_report/archive/app/assets/webfonts/fa-solid-900.woff2 b/soc/2020/daily_report/archive/app/assets/webfonts/fa-solid-900.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..978a681a10ff0478581436eaca5c5695c97445d4 GIT binary patch literal 79444 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
    + env, ($context["search"] ?? null), "html", null, true); + echo "\" name=\"search\" placeholder=\""; + echo twig_escape_filter($this->env, call_user_func_array($this->env->getFunction('translate')->getCallable(), ["search"]), "html", null, true); + echo "...\" + class=\"bg-transparent placeholder-gray-900 text-white w-full px-10 py-2\" + ref=\"searchInput\" v-on:focus=\"\$event.target.select()\" + > + +
    +
    + +
    +
    + + + "; + // line 14 + if (($context["search"] ?? null)) { + // line 15 + echo "
    + "; + } + // line 21 + echo " +"; + } + + public function getTemplateName() + { + return "components/search.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 67 => 21, 59 => 15, 57 => 14, 40 => 2, 37 => 1,); + } + + public function getSourceContext() + { + return new Source("", "components/search.twig", "/var/www/www.diogo.site/public/projects/GNU-social/soc/2020/daily_report/archive/May/app/views/components/search.twig"); + } +} diff --git a/soc/2020/daily_report/archive/app/cache/views/40/40e67e6a946cfab36c9ee6915982fd118473075a75ef12278c55369a8e4b38bf.php b/soc/2020/daily_report/archive/app/cache/views/40/40e67e6a946cfab36c9ee6915982fd118473075a75ef12278c55369a8e4b38bf.php new file mode 100644 index 0000000..baebff8 --- /dev/null +++ b/soc/2020/daily_report/archive/app/cache/views/40/40e67e6a946cfab36c9ee6915982fd118473075a75ef12278c55369a8e4b38bf.php @@ -0,0 +1,128 @@ +source = $this->getSourceContext(); + + $this->parent = false; + + $this->blocks = [ + ]; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + // line 1 + echo "
    +
    +
    + + "; + // line 5 + echo twig_escape_filter($this->env, call_user_func_array($this->env->getFunction('translate')->getCallable(), ["home"]), "html", null, true); + echo " + + + "; + // line 8 + if ( !(null === ($context["path"] ?? null))) { + // line 9 + echo " "; + $context['_parent'] = $context; + $context['_seq'] = twig_ensure_traversable(call_user_func_array($this->env->getFunction('breadcrumbs')->getCallable(), [$context["path"]])); + foreach ($context['_seq'] as $context["name"] => $context["path"]) { + // line 10 + echo " / env, $context["path"], "html", null, true); + echo "\" class=\"inline-block hover:underline\">"; + echo twig_escape_filter($this->env, $context["name"], "html", null, true); + echo " + "; + } + $_parent = $context['_parent']; + unset($context['_seq'], $context['_iterated'], $context['name'], $context['path'], $context['_parent'], $context['loop']); + $context = array_intersect_key($context, $_parent) + $_parent; + // line 12 + echo " "; + } + // line 13 + echo "
    + + + +
    + "; + // line 25 + if (((($context["path"] ?? null) && !twig_test_empty(($context["files"] ?? null))) && call_user_func_array($this->env->getFunction('config')->getCallable(), ["zip_downloads"]))) { + // line 26 + echo " env, call_user_func_array($this->env->getFunction('zip_url')->getCallable(), [($context["path"] ?? null)]), "html", null, true); + echo "\" title=\""; + echo twig_escape_filter($this->env, call_user_func_array($this->env->getFunction('translate')->getCallable(), ["download"]), "html", null, true); + echo "\" class=\"inline-block text-white p-1 hover:text-gray-400\"> + + + "; + } + // line 30 + echo " +
    + "; + // line 32 + $this->loadTemplate("components/search.twig", "components/header.twig", 32)->display($context); + // line 33 + echo "
    +
    +
    +
    +"; + } + + public function getTemplateName() + { + return "components/header.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 102 => 33, 100 => 32, 96 => 30, 86 => 26, 84 => 25, 70 => 13, 67 => 12, 56 => 10, 51 => 9, 49 => 8, 43 => 5, 37 => 1,); + } + + public function getSourceContext() + { + return new Source("", "components/header.twig", "/var/www/www.diogo.site/public/projects/GNU-social/soc/2020/daily_report/archive/May/app/views/components/header.twig"); + } +} diff --git a/soc/2020/daily_report/archive/app/cache/views/44/448a9f26a9e40294fedf15482816de7334c463807d0704e2d8e1092ff8cbac65.php b/soc/2020/daily_report/archive/app/cache/views/44/448a9f26a9e40294fedf15482816de7334c463807d0704e2d8e1092ff8cbac65.php new file mode 100644 index 0000000..1155874 --- /dev/null +++ b/soc/2020/daily_report/archive/app/cache/views/44/448a9f26a9e40294fedf15482816de7334c463807d0704e2d8e1092ff8cbac65.php @@ -0,0 +1,90 @@ +source = $this->getSourceContext(); + + $this->parent = false; + + $this->blocks = [ + ]; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + // line 1 + echo "
    env->getFunction('config')->getCallable(), ["readmes_first"])) ? ("order-first") : (null)); + echo "\"> +
    +
    + README.md +
    + +
    env, $this->source, ($context["readme"] ?? null), "getExtension", [], "any", false, false, false, 7), "md")) ? ("markdown") : ("font-mono")); + echo "\" v-pre> + "; + // line 8 + if (0 === twig_compare(twig_get_attribute($this->env, $this->source, ($context["readme"] ?? null), "getExtension", [], "any", false, false, false, 8), "md")) { + // line 9 + echo " "; + echo call_user_func_array($this->env->getFunction('markdown')->getCallable(), [twig_get_attribute($this->env, $this->source, ($context["readme"] ?? null), "getContents", [], "any", false, false, false, 9)]); + echo " + "; + } else { + // line 11 + echo " "; + echo nl2br(twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["readme"] ?? null), "getContents", [], "any", false, false, false, 11), "html", null, true)); + echo " + "; + } + // line 13 + echo "
    +
    +
    +"; + } + + public function getTemplateName() + { + return "components/readme.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 65 => 13, 59 => 11, 53 => 9, 51 => 8, 47 => 7, 37 => 1,); + } + + public function getSourceContext() + { + return new Source("", "components/readme.twig", "/var/www/www.diogo.site/public/projects/GNU-social/soc/2020/daily_report/archive/May/app/views/components/readme.twig"); + } +} diff --git a/soc/2020/daily_report/archive/app/cache/views/57/5736dc431428062df671acad860b3b03fea1bd3237763d072ac904e32bb48984.php b/soc/2020/daily_report/archive/app/cache/views/57/5736dc431428062df671acad860b3b03fea1bd3237763d072ac904e32bb48984.php new file mode 100644 index 0000000..e223d2b --- /dev/null +++ b/soc/2020/daily_report/archive/app/cache/views/57/5736dc431428062df671acad860b3b03fea1bd3237763d072ac904e32bb48984.php @@ -0,0 +1,139 @@ +source = $this->getSourceContext(); + + $this->parent = false; + + $this->blocks = [ + ]; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + // line 1 + echo "env, ((($context["parentDir"] ?? null)) ? (call_user_func_array($this->env->getFunction('parent_url')->getCallable(), [($context["path"] ?? null)])) : (call_user_func_array($this->env->getFunction('file_url')->getCallable(), [twig_get_attribute($this->env, $this->source, ($context["file"] ?? null), "getPathname", [], "any", false, false, false, 2)]))), "html", null, true); + echo "\" + class=\"flex flex-col items-center rounded-lg font-mono group hover:bg-gray-200 hover:shadow\" +> +
    +
    + "; + // line 7 + if (($context["parentDir"] ?? null)) { + // line 8 + echo " + "; + } else { + // line 10 + echo " "; + echo call_user_func_array($this->env->getFunction('icon')->getCallable(), [($context["file"] ?? null)]); + echo " + "; + } + // line 12 + echo "
    + +
    + "; + // line 15 + ((($context["parentDir"] ?? null)) ? (print ("..")) : (print (twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["file"] ?? null), "getRelativePathname", [], "any", false, false, false, 15), "html", null, true)))); + echo " +
    + + "; + // line 18 + if (twig_get_attribute($this->env, $this->source, ($context["file"] ?? null), "isFile", [], "any", false, false, false, 18)) { + // line 19 + echo "
    + +
    + "; + } + // line 29 + echo " +
    + "; + // line 31 + if ((($context["parentDir"] ?? null) || twig_get_attribute($this->env, $this->source, ($context["file"] ?? null), "isDir", [], "any", false, false, false, 31))) { + // line 32 + echo " — + "; + } else { + // line 34 + echo " "; + echo twig_escape_filter($this->env, call_user_func_array($this->env->getFunction('size_for_humans')->getCallable(), [($context["file"] ?? null)]), "html", null, true); + echo " + "; + } + // line 36 + echo "
    + +
    + "; + // line 39 + ((($context["parentDir"] ?? null)) ? (print ("—")) : (print (twig_escape_filter($this->env, twig_date_format_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["file"] ?? null), "getMTime", [], "any", false, false, false, 39)), "html", null, true)))); + echo " +
    +
    +
    +"; + } + + public function getTemplateName() + { + return "components/file.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 112 => 39, 107 => 36, 101 => 34, 97 => 32, 95 => 31, 91 => 29, 82 => 23, 77 => 21, 73 => 19, 71 => 18, 65 => 15, 60 => 12, 54 => 10, 50 => 8, 48 => 7, 40 => 2, 37 => 1,); + } + + public function getSourceContext() + { + return new Source("", "components/file.twig", "/var/www/www.diogo.site/public/projects/GNU-social/soc/2020/daily_report/archive/May/app/views/components/file.twig"); + } +} diff --git a/soc/2020/daily_report/archive/app/cache/views/5e/5e8a7c454c2113cd665884ede2b1c94c3590153d8b909d7542ea308009ce39b4.php b/soc/2020/daily_report/archive/app/cache/views/5e/5e8a7c454c2113cd665884ede2b1c94c3590153d8b909d7542ea308009ce39b4.php new file mode 100644 index 0000000..691eb7e --- /dev/null +++ b/soc/2020/daily_report/archive/app/cache/views/5e/5e8a7c454c2113cd665884ede2b1c94c3590153d8b909d7542ea308009ce39b4.php @@ -0,0 +1,178 @@ +source = $this->getSourceContext(); + + $this->blocks = [ + 'content' => [$this, 'block_content'], + ]; + } + + protected function doGetParent(array $context) + { + // line 1 + return "layouts/app.twig"; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + $this->parent = $this->loadTemplate("layouts/app.twig", "index.twig", 1); + $this->parent->display($context, array_merge($this->blocks, $blocks)); + } + + // line 3 + public function block_content($context, array $blocks = []) + { + $macros = $this->macros; + // line 4 + echo " "; + $this->loadTemplate("components/header.twig", "index.twig", 4)->display($context); + // line 5 + echo " +
    +
    +
    +
    + "; + // line 10 + echo twig_escape_filter($this->env, call_user_func_array($this->env->getFunction('translate')->getCallable(), ["file.name"]), "html", null, true); + echo " +
    + + + + +
    + +
      +
    • + "; + // line 24 + if ((($context["path"] ?? null) && 0 !== twig_compare(($context["path"] ?? null), "."))) { + // line 25 + echo " "; + echo twig_include($this->env, $context, "components/file.twig", ["parentDir" => true]); + echo " + "; + } + // line 27 + echo "
    • + +
    • + "; + // line 30 + $context['_parent'] = $context; + $context['_seq'] = twig_ensure_traversable(($context["files"] ?? null)); + $context['loop'] = [ + 'parent' => $context['_parent'], + 'index0' => 0, + 'index' => 1, + 'first' => true, + ]; + if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof \Countable)) { + $length = count($context['_seq']); + $context['loop']['revindex0'] = $length - 1; + $context['loop']['revindex'] = $length; + $context['loop']['length'] = $length; + $context['loop']['last'] = 1 === $length; + } + foreach ($context['_seq'] as $context["_key"] => $context["file"]) { + // line 31 + echo " "; + echo twig_include($this->env, $context, "components/file.twig"); + echo " + "; + ++$context['loop']['index0']; + ++$context['loop']['index']; + $context['loop']['first'] = false; + if (isset($context['loop']['length'])) { + --$context['loop']['revindex0']; + --$context['loop']['revindex']; + $context['loop']['last'] = 0 === $context['loop']['revindex0']; + } + } + $_parent = $context['_parent']; + unset($context['_seq'], $context['_iterated'], $context['_key'], $context['file'], $context['_parent'], $context['loop']); + $context = array_intersect_key($context, $_parent) + $_parent; + // line 33 + echo "
    • +
    +
    + + "; + // line 37 + if (($context["readme"] ?? null)) { + // line 38 + echo " "; + $this->loadTemplate("components/readme.twig", "index.twig", 38)->display($context); + // line 39 + echo " "; + } + // line 40 + echo "
    + + "; + // line 42 + $this->loadTemplate("components/footer.twig", "index.twig", 42)->display($context); + // line 43 + echo " + "; + // line 44 + $this->loadTemplate("components/scroll-to-top.twig", "index.twig", 44)->display($context); + // line 45 + echo " +"; + } + + public function getTemplateName() + { + return "index.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 155 => 45, 153 => 44, 150 => 43, 148 => 42, 144 => 40, 141 => 39, 138 => 38, 136 => 37, 130 => 33, 113 => 31, 96 => 30, 91 => 27, 85 => 25, 83 => 24, 74 => 18, 67 => 14, 60 => 10, 53 => 5, 50 => 4, 46 => 3, 35 => 1,); + } + + public function getSourceContext() + { + return new Source("", "index.twig", "/var/www/www.diogo.site/public/projects/GNU-social/soc/2020/daily_report/archive/May/app/views/index.twig"); + } +} diff --git a/soc/2020/daily_report/archive/app/cache/views/9f/9f068c31a5b3f0c7c23661a38434ec1b2f9e4f032b3abbe68ababebc8d244f5c.php b/soc/2020/daily_report/archive/app/cache/views/9f/9f068c31a5b3f0c7c23661a38434ec1b2f9e4f032b3abbe68ababebc8d244f5c.php new file mode 100644 index 0000000..901ce9a --- /dev/null +++ b/soc/2020/daily_report/archive/app/cache/views/9f/9f068c31a5b3f0c7c23661a38434ec1b2f9e4f032b3abbe68ababebc8d244f5c.php @@ -0,0 +1,108 @@ +source = $this->getSourceContext(); + + $this->parent = false; + + $this->blocks = [ + 'content' => [$this, 'block_content'], + ]; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + // line 1 + echo " + + + + +env, ((call_user_func_array($this->env->getFunction('config')->getCallable(), ["dark_mode"])) ? (call_user_func_array($this->env->getFunction('asset')->getCallable(), ["images/favicon.dark.png"])) : (call_user_func_array($this->env->getFunction('asset')->getCallable(), ["images/favicon.light.png"]))), "html", null, true); + echo "\"> +env, call_user_func_array($this->env->getFunction('asset')->getCallable(), ["app.css"]), "html", null, true); + echo "\"> + +"; + // line 9 + if (call_user_func_array($this->env->getFunction('config')->getCallable(), ["google_analytics_id", false])) { + // line 10 + echo " "; + $this->loadTemplate("components/google-analytics.twig", "layouts/app.twig", 10)->display($context); + } + // line 12 + echo " +"; + // line 13 + echo twig_escape_filter($this->env, ($context["title"] ?? null), "html", null, true); + echo " • Directory Lister + +
    env->getFunction('config')->getCallable(), ["dark_mode"])) ? ("dark-mode") : ("light-mode")); + echo "\"> + "; + // line 16 + $this->displayBlock('content', $context, $blocks); + // line 17 + echo "
    + + +"; + } + + // line 16 + public function block_content($context, array $blocks = []) + { + $macros = $this->macros; + } + + public function getTemplateName() + { + return "layouts/app.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 84 => 16, 78 => 19, 74 => 17, 72 => 16, 68 => 15, 63 => 13, 60 => 12, 56 => 10, 54 => 9, 49 => 7, 45 => 6, 38 => 1,); + } + + public function getSourceContext() + { + return new Source("", "layouts/app.twig", "/var/www/www.diogo.site/public/projects/GNU-social/soc/2020/daily_report/archive/May/app/views/layouts/app.twig"); + } +} diff --git a/soc/2020/daily_report/archive/app/cache/views/a6/a626095674c1d84dd8c6169b3c5b157a86f3b5f0659a0e4d3b0905b33989590c.php b/soc/2020/daily_report/archive/app/cache/views/a6/a626095674c1d84dd8c6169b3c5b157a86f3b5f0659a0e4d3b0905b33989590c.php new file mode 100644 index 0000000..0396740 --- /dev/null +++ b/soc/2020/daily_report/archive/app/cache/views/a6/a626095674c1d84dd8c6169b3c5b157a86f3b5f0659a0e4d3b0905b33989590c.php @@ -0,0 +1,72 @@ +source = $this->getSourceContext(); + + $this->parent = false; + + $this->blocks = [ + ]; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + // line 1 + echo "
    +
    + +
    +
    +"; + } + + public function getTemplateName() + { + return "components/scroll-to-top.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 41 => 3, 37 => 1,); + } + + public function getSourceContext() + { + return new Source("", "components/scroll-to-top.twig", "/var/www/www.diogo.site/public/projects/GNU-social/soc/2020/daily_report/archive/May/app/views/components/scroll-to-top.twig"); + } +} diff --git a/soc/2020/daily_report/archive/app/cache/views/eb/eb091b9a4910b8725055283794cd0d6488ad4a6dcc632e5f14937ed5c84c1ffa.php b/soc/2020/daily_report/archive/app/cache/views/eb/eb091b9a4910b8725055283794cd0d6488ad4a6dcc632e5f14937ed5c84c1ffa.php new file mode 100644 index 0000000..f849d5d --- /dev/null +++ b/soc/2020/daily_report/archive/app/cache/views/eb/eb091b9a4910b8725055283794cd0d6488ad4a6dcc632e5f14937ed5c84c1ffa.php @@ -0,0 +1,83 @@ +source = $this->getSourceContext(); + + $this->parent = false; + + $this->blocks = [ + ]; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + // line 1 + echo "
    +
    +

    + "; + // line 4 + echo twig_escape_filter($this->env, call_user_func_array($this->env->getFunction('translate')->getCallable(), ["powered_by"]), "html", null, true); + echo " Directory Lister +

    + +
    + + + + + + + + + + + +
    +
    +
    +"; + } + + public function getTemplateName() + { + return "components/footer.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 42 => 4, 37 => 1,); + } + + public function getSourceContext() + { + return new Source("", "components/footer.twig", "/var/www/www.diogo.site/public/projects/GNU-social/soc/2020/daily_report/archive/May/app/views/components/footer.twig"); + } +} diff --git a/soc/2020/daily_report/archive/app/config/app.php b/soc/2020/daily_report/archive/app/config/app.php new file mode 100644 index 0000000..5f7d122 --- /dev/null +++ b/soc/2020/daily_report/archive/app/config/app.php @@ -0,0 +1,170 @@ + Helpers::env('APP_DEBUG', false), + + /** + * The application interface language. + * + * Possible values: See 'app/translations' folder for available translations. + * + * Defualt value: en + */ + 'language' => Helpers::env('APP_LANGUAGE', 'en'), + + /** + * Enable dark mode? + * + * Default value: false + */ + 'dark_mode' => Helpers::env('DARK_MODE', false), + + /** + * Parse and render README files on the page. + * + * Default value: true + */ + 'display_readmes' => Helpers::env('DISPLAY_READMES', true), + + /** + * Show READMEs before the file listing. + * + * Default value: false + */ + 'readmes_first' => Helpers::env('READMES_FIRST', false), + + /** + * Enable downloading of directories as a zip archive. + * + * Default value: true + */ + 'zip_downloads' => Helpers::env('ZIP_DOWNLOADS', true), + + /** + * Your Google analytics tracking ID. + * + * Expected format: 'UA-123456789-0' + * Default value: false + */ + 'google_analytics_id' => Helpers::env('GOOGLE_ANALYTICS_ID', false), + + /** + * Sorting order of files and folders. + * + * Possible values: type, natural, name, accessed, changed, modified + * Default value: type + */ + 'sort_order' => Helpers::env('SORT_ORDER', 'type'), + + /** + * When enabled, reverses the order of files (after sorting is applied). + * + * Default value: false + */ + 'reverse_sort' => Helpers::env('REVERSE_SORT', false), + + /** + * File containing hidden file definitions. Will be merged with definitions + * from the 'hidden_files' configuration option. + * + * Default value: '.hidden' + */ + 'hidden_files_list' => Helpers::env('HIDDEN_FILES_LIST', '.hidden'), + + /** + * Array of hidden file definitions. Will be merged with definitions in the + * file definned in the 'hidden_files_list' configuration option. Supports + * glob patterns (e.g. *.txt, file.{yml,yaml}, etc.). + * + * Default value: [] + */ + 'hidden_files' => [ + // ... + ], + + /** + * Whether or not to hide application files/directories form the listing. + * + * Default value: true + */ + 'hide_app_files' => Helpers::env('HIDE_APP_FILES', true), + + /** + * Hide the files Version Control System (i.e. Git and Mercurial) use to + * store their metadata. + * + * Default value: true + */ + 'hide_vcs_files' => Helpers::env('HIDE_VSC_FILES', true), + + /** + * Default date format. For additional info on date formatting see: + * https://www.php.net/manual/en/function.date.php. + * + * Default value: 'Y-m-d H:i:s' + */ + 'date_format' => Helpers::env('DATE_FORMAT', 'Y-m-d H:i:s'), + + /** + * Timezone used for date formatting. For a list of supported timezones see: + * https://www.php.net/manual/en/timezones.php. + * + * Default value: The server's timezone + */ + 'timezone' => Helpers::env('TIMEZONE', date_default_timezone_get()), + + /** + * The maximum file size (in bytes) that can be hashed. This helps to + * prevent timeouts for excessively large files. + * + * Default value: 1000000000 + */ + 'max_hash_size' => Helpers::env('MAX_HASH_SIZE', 1000000000), + + /** + * Path to the view cache directory. + * Set to 'false' to disable view caching entirely. + * + * Default value: 'app/cache/views' + */ + 'view_cache' => Helpers::env('VIEW_CACHE', 'app/cache/views'), + + /** + * HTTP expires values. + * + * Possible values: An array of mime types mapped to their cache duration + * as a relative datetime string. + * + * Default value: [ + * 'application/zip' => '+1 hour', + * 'text/json' => '+1 hour', + * ] + */ + 'http_expires' => [ + 'application/zip' => '+1 hour', + 'text/json' => '+1 hour', + ], + + /** + * Array of icon definitions where the array key is the file extension + * (without a preceding dot) and the array value is the desired Font Awesome + * class names. + * + * Default value: Array loaded from 'icons.php' config file + */ + 'icons' => static function (ContainerInterface $container): array { + return require $container->get('icons_config'); + }, +]; diff --git a/soc/2020/daily_report/archive/app/config/container.php b/soc/2020/daily_report/archive/app/config/container.php new file mode 100644 index 0000000..2eeddfd --- /dev/null +++ b/soc/2020/daily_report/archive/app/config/container.php @@ -0,0 +1,21 @@ + dirname(__DIR__, 2), + 'app_path' => dirname(__DIR__), + 'asset_path' => DI\string('{app_path}/assets'), + 'cache_path' => DI\string('{app_path}/cache'), + 'config_path' => DI\string('{app_path}/config'), + 'translations_path' => DI\string('{app_path}/translations'), + 'views_path' => DI\string('{app_path}/views'), + 'icons_config' => DI\string('{config_path}/icons.php'), + + /** Container definitions */ + Symfony\Component\Finder\Finder::class => DI\factory(Factories\FinderFactory::class), + Symfony\Contracts\Translation\TranslatorInterface::class => DI\factory(Factories\TranslationFactory::class), + Slim\Views\Twig::class => DI\factory(Factories\TwigFactory::class), + Whoops\RunInterface::class => DI\create(Whoops\Run::class), +]; diff --git a/soc/2020/daily_report/archive/app/config/icons.php b/soc/2020/daily_report/archive/app/config/icons.php new file mode 100644 index 0000000..ac3d863 --- /dev/null +++ b/soc/2020/daily_report/archive/app/config/icons.php @@ -0,0 +1,138 @@ + 'fas fa-image', + 'bmp' => 'fas fa-image', + 'eps' => 'fas fa-image', + 'gif' => 'fas fa-image', + 'ico' => 'fas fa-image', + 'jpeg' => 'fas fa-image', + 'jpg' => 'fas fa-image', + 'png' => 'fas fa-image', + 'ps' => 'fas fa-image', + 'psd' => 'fas fa-image', + 'svg' => 'fas fa-image', + 'tga' => 'fas fa-image', + 'tif' => 'fas fa-image', + 'tiff' => 'fas fa-image', + 'drw' => 'fas fa-image', + + // Data + 'csv' => 'fas fa-file-csv', + 'json' => 'fas fa-file-alt', + 'yaml' => 'fas fa-file-alt', + + // Code + 'c' => 'fas fa-code', + 'class' => 'fas fa-code', + 'cpp' => 'fas fa-code', + 'css' => 'fab fab fa-css3', + 'erb' => 'fas fa-code', + 'htm' => 'fab fa-html5', + 'html' => 'fab fa-html5', + 'java' => 'fab fa-java', + 'js' => 'fab fa-js', + 'php' => 'fab fa-php', + 'pl' => 'fas fa-code', + 'py' => 'fab fa-python', + 'rb' => 'fas fa-code', + 'xhtml' => 'fas fa-code', + 'xml' => 'fas fa-code', + + // Text and Markup + 'cfg' => 'fas fa-file-alt', + 'ini' => 'fas fa-file-alt', + 'log' => 'fas fa-file-alt', + 'md' => 'fab fa-markdown', + 'rtf' => 'fas fa-file-alt', + 'txt' => 'fas fa-file-alt', + + // Documents + 'doc' => 'fas fa-file-word', + 'docx' => 'fas fa-file-word', + 'odt' => 'fas fa-file-alt', + 'pdf' => 'fas fa-file-pdf', + 'ppt' => 'fas fa-file-powerpoint', + 'pptx' => 'fas fa-file-powerpoint', + 'xls' => 'fas fa-file-excel', + 'xlsx' => 'fas fa-file-excel', + + // Archives + '7z' => 'fas fa-file-archive', + 'bz' => 'fas fa-file-archive', + 'gz' => 'fas fa-file-archive', + 'rar' => 'fas fa-file-archive', + 'tar' => 'fas fa-file-archive', + 'xz' => 'fas fa-file-archive', + 'zip' => 'fas fa-file-archive', + + // Audio + 'aac' => 'fas fa-music', + 'aif' => 'fas fa-music', + 'flac' => 'fas fa-music', + 'mid' => 'fas fa-music', + 'midi' => 'fas fa-music', + 'mpa' => 'fas fa-music', + 'mp3' => 'fas fa-music', + 'ogg' => 'fas fa-music', + 'wma' => 'fas fa-music', + 'wav' => 'fas fa-music', + + // Databases + 'accdb' => 'fas fa-database', + 'db' => 'fas fa-database', + 'dbf' => 'fas fa-database', + 'mdb' => 'fas fa-database', + 'pdb' => 'fas fa-database', + 'sql' => 'fas fa-database', + + // Executables + 'apk' => 'fab fa-android', + 'app' => 'fas fa-window', + 'com' => 'fas fa-window', + 'exe' => 'fas fa-window', + 'jar' => 'fas fa-window', + 'msi' => 'fas fa-window', + 'vb' => 'fas fa-window', + + // Fonts + 'eot' => 'fas fa-font-case', + 'otf' => 'fas fa-font-case', + 'ttf' => 'fas fa-font-case', + 'woff' => 'fas fa-font-case', + + // Game Files + 'gam' => 'fas fa-gamepad', + 'nes' => 'fas fa-gamepad', + 'rom' => 'fas fa-gamepad', + 'sav' => 'fas fa-save', + + // Package Files + 'box' => 'fas fa-archive', + 'deb' => 'fas fa-archive', + 'rpm' => 'fas fa-archive', + + // Scripts + 'bat' => 'fas fa-terminal', + 'cmd' => 'fas fa-terminal', + 'sh' => 'fas fa-terminal', + + // Video + 'avi' => 'fas fa-video', + 'flv' => 'fas fa-video', + 'mkv' => 'fas fa-video', + 'mov' => 'fas fa-video', + 'mp4' => 'fas fa-video', + 'mpg' => 'fas fa-video', + 'ogv' => 'fas fa-video', + 'swf' => 'fas fa-video', + 'webm' => 'fas fa-video', + 'wmv' => 'fas fa-video', + + // Miscellaneous + 'bak' => 'fas fa-save', + 'iso' => 'fas fa-compact-disc', + 'lock' => 'fas fa-lock', + 'msg' => 'fas fa-envelope', +]; diff --git a/soc/2020/daily_report/archive/app/src/Bootstrap/AppManager.php b/soc/2020/daily_report/archive/app/src/Bootstrap/AppManager.php new file mode 100644 index 0000000..1dba29b --- /dev/null +++ b/soc/2020/daily_report/archive/app/src/Bootstrap/AppManager.php @@ -0,0 +1,38 @@ +container = $container; + } + + /** + * Setup and configure the application. + * + * @return \Slim\App + */ + public function __invoke(): App + { + $app = Bridge::create($this->container); + $this->container->call(MiddlewareManager::class); + $this->container->call(ExceptionManager::class); + $this->container->call(RouteManager::class); + + return $app; + } +} diff --git a/soc/2020/daily_report/archive/app/src/Bootstrap/ExceptionManager.php b/soc/2020/daily_report/archive/app/src/Bootstrap/ExceptionManager.php new file mode 100644 index 0000000..ef703ad --- /dev/null +++ b/soc/2020/daily_report/archive/app/src/Bootstrap/ExceptionManager.php @@ -0,0 +1,43 @@ +app = $app; + $this->container = $container; + } + + /** + * Set up and configure exception handling. + * + * @return void + */ + public function __invoke(): void + { + if ($this->container->get('debug')) { + return; + } + + $errorMiddleware = $this->app->addErrorMiddleware(true, true, true); + $errorMiddleware->setDefaultErrorHandler(ErrorHandler::class); + } +} diff --git a/soc/2020/daily_report/archive/app/src/Bootstrap/MiddlewareManager.php b/soc/2020/daily_report/archive/app/src/Bootstrap/MiddlewareManager.php new file mode 100644 index 0000000..1f62a8d --- /dev/null +++ b/soc/2020/daily_report/archive/app/src/Bootstrap/MiddlewareManager.php @@ -0,0 +1,53 @@ +app = $app; + $this->container = $container; + } + + /** + * Register application middlewares. + * + * @return void + */ + public function __invoke() + { + Collection::make(self::MIDDLEWARES)->each( + function (string $middleware): void { + $this->app->add($middleware); + } + ); + + $this->app->add(new HttpMiddlewares\Expires( + $this->container->get('http_expires') + )); + } +} diff --git a/soc/2020/daily_report/archive/app/src/Bootstrap/RouteManager.php b/soc/2020/daily_report/archive/app/src/Bootstrap/RouteManager.php new file mode 100644 index 0000000..1f55416 --- /dev/null +++ b/soc/2020/daily_report/archive/app/src/Bootstrap/RouteManager.php @@ -0,0 +1,32 @@ +app = $app; + } + + /** + * Register the application routes. + * + * @return void + */ + public function __invoke(): void + { + $this->app->get('/[{path:.*}]', Controllers\IndexController::class); + } +} diff --git a/soc/2020/daily_report/archive/app/src/Controllers/DirectoryController.php b/soc/2020/daily_report/archive/app/src/Controllers/DirectoryController.php new file mode 100644 index 0000000..3cd5e7c --- /dev/null +++ b/soc/2020/daily_report/archive/app/src/Controllers/DirectoryController.php @@ -0,0 +1,104 @@ +container = $container; + $this->finder = $finder; + $this->view = $view; + $this->translator = $translator; + } + + /** + * Invoke the IndexController. + * + * @param \Slim\Psr7\Request $request + * @param \Slim\Psr7\Response $response + * + * @return \Psr\Http\Message\ResponseInterface + */ + public function __invoke(Request $request, Response $response): ResponseInterface + { + $path = $request->getQueryParams()['dir'] ?? '.'; + + try { + $files = $this->finder->in($path)->depth(0); + } catch (Exception $exception) { + return $this->view->render($response->withStatus(404), 'error.twig', [ + 'message' => $this->translator->trans('error.directory_not_found') + ]); + } + + return $this->view->render($response, 'index.twig', [ + 'files' => $files, + 'path' => $path, + 'readme' => $this->readme($files), + 'title' => $path == '.' ? 'Home' : $path, + ]); + } + + /** + * Return the README file within a finder object. + * + * @param \Symfony\Component\Finder\Finder $files + * + * @return \Symfony\Component\Finder\SplFileInfo|null + */ + protected function readme(Finder $files): ?SplFileInfo + { + if (! $this->container->get('display_readmes')) { + return null; + } + + $readmes = (clone $files)->name('/^README(?:\..+)?$/i'); + + $readmes->filter(static function (SplFileInfo $file) { + return (bool) preg_match('/text\/.+/', mime_content_type($file->getPathname())); + })->sort(static function (SplFileInfo $file1, SplFileInfo $file2) { + return $file1->getExtension() <=> $file2->getExtension(); + }); + + if (! $readmes->hasResults()) { + return null; + } + + return $readmes->getIterator()->current(); + } +} diff --git a/soc/2020/daily_report/archive/app/src/Controllers/FileInfoController.php b/soc/2020/daily_report/archive/app/src/Controllers/FileInfoController.php new file mode 100644 index 0000000..f4d4fe1 --- /dev/null +++ b/soc/2020/daily_report/archive/app/src/Controllers/FileInfoController.php @@ -0,0 +1,68 @@ +container = $container; + $this->translator = $translator; + } + + /** + * Invoke the FileInfoHandler. + * + * @param \Slim\Psr7\Request $request + * @param \Slim\Psr7\Response $response + * + * @return \Psr\Http\Message\ResponseInterface + */ + public function __invoke(Request $request, Response $response): ResponseInterface + { + $path = $request->getQueryParams()['info']; + + $file = new SplFileInfo( + realpath($this->container->get('base_path') . '/' . $path) + ); + + if (! $file->isFile()) { + return $response->withStatus(404, $this->translator->trans('error.file_not_found')); + } + + if ($file->getSize() >= $this->container->get('max_hash_size')) { + return $response->withStatus(500, $this->translator->trans('error.file_size_exceeded')); + } + + $response->getBody()->write(json_encode([ + 'hashes' => [ + 'md5' => hash('md5', file_get_contents($file->getPathname())), + 'sha1' => hash('sha1', file_get_contents($file->getPathname())), + 'sha256' => hash('sha256', file_get_contents($file->getPathname())), + ] + ])); + + return $response->withHeader('Content-Type', 'application/json'); + } +} diff --git a/soc/2020/daily_report/archive/app/src/Controllers/IndexController.php b/soc/2020/daily_report/archive/app/src/Controllers/IndexController.php new file mode 100644 index 0000000..6f85825 --- /dev/null +++ b/soc/2020/daily_report/archive/app/src/Controllers/IndexController.php @@ -0,0 +1,48 @@ +container = $container; + } + + /** + * Invoke the IndexController. + * + * @param \Slim\Psr7\Request $request + * @param \Slim\Psr7\Response $response + * + * @return \Psr\Http\Message\ResponseInterface + */ + public function __invoke(Request $request, Response $response) + { + switch (true) { + case array_key_exists('info', $request->getQueryParams()): + return $this->container->call(FileInfoController::class, [$request, $response]); + + case array_key_exists('search', $request->getQueryParams()): + return $this->container->call(SearchController::class, [$request, $response]); + + case array_key_exists('zip', $request->getQueryParams()): + return $this->container->call(ZipController::class, [$request, $response]); + + default: + return $this->container->call(DirectoryController::class, [$request, $response]); + } + } +} diff --git a/soc/2020/daily_report/archive/app/src/Controllers/SearchController.php b/soc/2020/daily_report/archive/app/src/Controllers/SearchController.php new file mode 100644 index 0000000..ab503a9 --- /dev/null +++ b/soc/2020/daily_report/archive/app/src/Controllers/SearchController.php @@ -0,0 +1,66 @@ +finder = $finder; + $this->view = $view; + $this->translator = $translator; + } + + /** + * Invoke the SearchHandler. + * + * @param \Slim\Psr7\Request $request + * @param \Slim\Psr7\Response $response + * + * @return \Psr\Http\Message\ResponseInterface + */ + public function __invoke(Request $request, Response $response): ResponseInterface + { + $search = $request->getQueryParams()['search']; + + $files = $this->finder->in('.')->name( + $search ? sprintf('/(?:.*)%s(?:.*)/i', preg_quote($search, '/')) : '' + ); + + if ($files->count() === 0) { + return $this->view->render($response, 'error.twig', [ + 'message' => $this->translator->trans('error.no_results_found'), + 'search' => $search, + ]); + } + + return $this->view->render($response, 'index.twig', [ + 'files' => $files, + 'search' => $search, + 'title' => $search, + ]); + } +} diff --git a/soc/2020/daily_report/archive/app/src/Controllers/ZipController.php b/soc/2020/daily_report/archive/app/src/Controllers/ZipController.php new file mode 100644 index 0000000..d4e48ed --- /dev/null +++ b/soc/2020/daily_report/archive/app/src/Controllers/ZipController.php @@ -0,0 +1,122 @@ +container = $container; + $this->finder = $finder; + $this->translator = $translator; + } + + /** + * Invoke the ZipHandler. + * + * @param \Slim\Psr7\Request $request + * @param \Slim\Psr7\Response $response + * + * @return \Psr\Http\Message\ResponseInterface + */ + public function __invoke(Request $request, Response $response): ResponseInterface + { + $path = $request->getQueryParams()['zip']; + + if (! $this->container->get('zip_downloads') || ! realpath($path)) { + return $response->withStatus(404, $this->translator->trans('error.file_not_found')); + } + + $response->getBody()->write($this->createZip($path)->getContents()); + + return $response->withHeader('Content-Type', 'application/zip') + ->withHeader('Content-Disposition', sprintf( + 'attachment; filename="%s.zip"', + $this->generateFileName($path) + )); + } + + /** + * Create a zip file from a directory. + * + * @param string $path + * + * @return \App\TemporaryFile + */ + protected function createZip(string $path): TemporaryFile + { + $zip = new ZipArchive; + $zip->open((string) $tempFile = new TemporaryFile( + $this->container->get('cache_path') + ), ZipArchive::CREATE | ZipArchive::OVERWRITE); + + foreach ($this->finder->in($path)->files() as $file) { + $zip->addFile($file->getRealPath(), $this->stripPath($file, $path)); + } + + $zip->close(); + + return $tempFile; + } + + /** + * Return the path to a file with the preceding root path stripped. + * + * @param \Symfony\Component\Finder\SplFileInfo $file + * @param string $path + * + * @return string + */ + protected function stripPath(SplFileInfo $file, string $path): string + { + $pattern = sprintf( + '/^%s%s?/', preg_quote($path, '/'), preg_quote(DIRECTORY_SEPARATOR, '/') + ); + + return preg_replace($pattern, '', $file->getPathname()); + } + + /** + * Generate the file name for a path. + * + * @param string $path + * + * @return string + */ + protected function generateFileName(string $path): string + { + $filename = Str::explode($path, DIRECTORY_SEPARATOR)->last(); + + return $filename == '.' ? 'Home' : $filename; + } +} diff --git a/soc/2020/daily_report/archive/app/src/Exceptions/ErrorHandler.php b/soc/2020/daily_report/archive/app/src/Exceptions/ErrorHandler.php new file mode 100644 index 0000000..d93bd76 --- /dev/null +++ b/soc/2020/daily_report/archive/app/src/Exceptions/ErrorHandler.php @@ -0,0 +1,66 @@ +view = $view; + $this->translator = $translator; + } + + /** + * Invoke the ErrorHandler class. + * + * @param \Psr\Http\Message\ServerRequestInterface $request + * @param \Throwable $exception + * @param bool $displayErrorDetails + * @param bool $logErrors + * @param bool $logErrorDetails + * + * @return \Psr\Http\Message\ResponseInterface + */ + public function __invoke( + ServerRequestInterface $request, + Throwable $exception, + bool $displayErrorDetails, + bool $logErrors, + bool $logErrorDetails + ): ResponseInterface { + $response = (new Response)->withStatus(500); + + if (in_array('application/json', explode(',', $request->getHeaderLine('Accept')))) { + $response->getBody()->write(json_encode([ + 'error' => ['message' => $this->translator->trans('error.unexpected')] + ])); + + return $response->withHeader('Content-Type', 'application/json'); + } + + return $this->view->render($response, 'error.twig', [ + 'message' => $this->translator->trans('error.unexpected'), + 'subtext' => $this->translator->trans('enable_debugging'), + ]); + } +} diff --git a/soc/2020/daily_report/archive/app/src/Factories/FinderFactory.php b/soc/2020/daily_report/archive/app/src/Factories/FinderFactory.php new file mode 100644 index 0000000..9e1da31 --- /dev/null +++ b/soc/2020/daily_report/archive/app/src/Factories/FinderFactory.php @@ -0,0 +1,109 @@ + SortMethods\Accessed::class, + 'changed' => SortMethods\Changed::class, + 'modified' => SortMethods\Modified::class, + 'name' => SortMethods\Name::class, + 'natural' => SortMethods\Natural::class, + 'type' => SortMethods\Type::class, + ]; + + /** @var Container The application container */ + protected $container; + + /** + * Create a new FinderFactory object. + * + * @param \DI\Container $container + */ + public function __construct(Container $container) + { + $this->container = $container; + } + + /** + * Initialize and return the Finder component. + * + * @return \Symfony\Component\Finder\Finder + */ + public function __invoke(): Finder + { + $finder = Finder::create()->followLinks(); + $finder->ignoreVCS($this->container->get('hide_vcs_files')); + + if ($this->hiddenFiles()->isNotEmpty()) { + $finder->filter(function (SplFileInfo $file): bool { + return ! $this->isHidden($file); + }); + } + + $sortOrder = $this->container->get('sort_order'); + if ($sortOrder instanceof Closure) { + $finder->sort($sortOrder); + } else { + if (! array_key_exists($sortOrder, self::SORT_METHODS)) { + throw new RuntimeException("Invalid sort option '{$sortOrder}'"); + } + + $this->container->call(self::SORT_METHODS[$sortOrder], [$finder]); + } + + if ($this->container->get('reverse_sort')) { + $finder->reverseSorting(); + } + + return $finder; + } + + /** + * Get a collection of hidden file paths. + * + * @return \Tightenco\Collect\Support\Collection + */ + protected function hiddenFiles(): Collection + { + return Collection::make( + $this->container->get('hidden_files') + )->when(is_readable($this->container->get('hidden_files_list')), function (Collection $collection) { + return $collection->merge( + file($this->container->get('hidden_files_list'), FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) + ); + })->when($this->container->get('hide_app_files'), static function (Collection $collection) { + return $collection->merge(self::APP_FILES); + })->unique(); + } + + /** + * Determine if a file should be hidden. + * + * @param \Symfony\Component\Finder\SplFileInfo $file + * + * @return bool + */ + protected function isHidden(SplFileInfo $file): bool + { + return Glob::pattern( + Glob::escape( + $this->container->get('base_path') . DIRECTORY_SEPARATOR + ) . sprintf('{%s}', $this->hiddenFiles()->implode(',')) + )->matchStart($file->getRealPath()); + } +} diff --git a/soc/2020/daily_report/archive/app/src/Factories/TranslationFactory.php b/soc/2020/daily_report/archive/app/src/Factories/TranslationFactory.php new file mode 100644 index 0000000..3d9fea6 --- /dev/null +++ b/soc/2020/daily_report/archive/app/src/Factories/TranslationFactory.php @@ -0,0 +1,58 @@ +container = $container; + } + + /** + * Initialize and return the translation component. + * + * @return \Symfony\Contracts\Translation\TranslatorInterface + */ + public function __invoke(): TranslatorInterface + { + $language = $this->container->get('language'); + + if (! in_array($language, self::LANGUAGES)) { + throw new RuntimeException("Invalid language option '{$language}'"); + } + + $translator = new Translator($language); + $translator->addLoader('yaml', new YamlFileLoader()); + + Collection::make(self::LANGUAGES)->each( + function (string $language) use ($translator): void { + $resource = sprintf($this->container->get('translations_path') . '/%s.yaml', $language); + $translator->addResource('yaml', $resource, $language); + } + ); + + return $translator; + } +} diff --git a/soc/2020/daily_report/archive/app/src/Factories/TwigFactory.php b/soc/2020/daily_report/archive/app/src/Factories/TwigFactory.php new file mode 100644 index 0000000..feef4d9 --- /dev/null +++ b/soc/2020/daily_report/archive/app/src/Factories/TwigFactory.php @@ -0,0 +1,83 @@ +container = $container; + $this->callableResolver = $callableResolver; + } + + /** + * Initialize and return the Twig component. + * + * @return \Slim\Views\Twig + */ + public function __invoke(): Twig + { + $twig = new Twig(new FilesystemLoader( + $this->container->get('views_path') + )); + + $twig->getEnvironment()->setCache( + $this->container->get('view_cache') + ); + + $twig->getEnvironment()->getExtension(CoreExtension::class)->setDateFormat( + $this->container->get('date_format'), '%d days' + ); + + $twig->getEnvironment()->getExtension(CoreExtension::class)->setTimezone( + $this->container->get('timezone') + ); + + foreach (self::VIEW_FUNCTIONS as $function) { + $function = $this->callableResolver->resolve($function); + + $twig->getEnvironment()->addFunction( + new TwigFunction($function->name(), $function) + ); + } + + return $twig; + } +} diff --git a/soc/2020/daily_report/archive/app/src/Middlewares/WhoopsMiddleware.php b/soc/2020/daily_report/archive/app/src/Middlewares/WhoopsMiddleware.php new file mode 100644 index 0000000..d0157f0 --- /dev/null +++ b/soc/2020/daily_report/archive/app/src/Middlewares/WhoopsMiddleware.php @@ -0,0 +1,64 @@ +whoops = $whoops; + $this->pageHandler = $pageHandler; + $this->jsonHandler = $jsonHandler; + } + + /** + * Invoke the WhoopseMiddleware class. + * + * @param \Psr\Http\Message\ServerRequestInterface $request + * @param \Psr\Http\Server\RequestHandlerInterface $handler + * + * @return \Psr\Http\Message\ResponseInterface + */ + public function __invoke(Request $request, RequestHandler $handler): ResponseInterface + { + $this->pageHandler->setPageTitle( + sprintf('%s • Directory Lister', $this->pageHandler->getPageTitle()) + ); + + $this->whoops->pushHandler($this->pageHandler); + + if (in_array('application/json', explode(',', $request->getHeaderLine('Accept')))) { + $this->whoops->pushHandler($this->jsonHandler); + } + + $this->whoops->register(); + + return $handler->handle($request); + } +} diff --git a/soc/2020/daily_report/archive/app/src/SortMethods/Accessed.php b/soc/2020/daily_report/archive/app/src/SortMethods/Accessed.php new file mode 100644 index 0000000..13bf928 --- /dev/null +++ b/soc/2020/daily_report/archive/app/src/SortMethods/Accessed.php @@ -0,0 +1,20 @@ +sortByAccessedTime(); + } +} diff --git a/soc/2020/daily_report/archive/app/src/SortMethods/Changed.php b/soc/2020/daily_report/archive/app/src/SortMethods/Changed.php new file mode 100644 index 0000000..03bb960 --- /dev/null +++ b/soc/2020/daily_report/archive/app/src/SortMethods/Changed.php @@ -0,0 +1,20 @@ +sortByChangedTime(); + } +} diff --git a/soc/2020/daily_report/archive/app/src/SortMethods/Modified.php b/soc/2020/daily_report/archive/app/src/SortMethods/Modified.php new file mode 100644 index 0000000..3cc43a9 --- /dev/null +++ b/soc/2020/daily_report/archive/app/src/SortMethods/Modified.php @@ -0,0 +1,20 @@ +sortByModifiedTime(); + } +} diff --git a/soc/2020/daily_report/archive/app/src/SortMethods/Name.php b/soc/2020/daily_report/archive/app/src/SortMethods/Name.php new file mode 100644 index 0000000..aa430d9 --- /dev/null +++ b/soc/2020/daily_report/archive/app/src/SortMethods/Name.php @@ -0,0 +1,20 @@ +sortByName(); + } +} diff --git a/soc/2020/daily_report/archive/app/src/SortMethods/Natural.php b/soc/2020/daily_report/archive/app/src/SortMethods/Natural.php new file mode 100644 index 0000000..4d8c328 --- /dev/null +++ b/soc/2020/daily_report/archive/app/src/SortMethods/Natural.php @@ -0,0 +1,20 @@ +sortByName(true); + } +} diff --git a/soc/2020/daily_report/archive/app/src/SortMethods/SortMethod.php b/soc/2020/daily_report/archive/app/src/SortMethods/SortMethod.php new file mode 100644 index 0000000..a1ca583 --- /dev/null +++ b/soc/2020/daily_report/archive/app/src/SortMethods/SortMethod.php @@ -0,0 +1,17 @@ +sortByType(); + } +} diff --git a/soc/2020/daily_report/archive/app/src/Support/Helpers.php b/soc/2020/daily_report/archive/app/src/Support/Helpers.php new file mode 100644 index 0000000..f085209 --- /dev/null +++ b/soc/2020/daily_report/archive/app/src/Support/Helpers.php @@ -0,0 +1,34 @@ +path = tempnam($dir, $prefix); + } + + /** Destroy this TemporaryFile object. */ + public function __destruct() + { + unlink($this->path); + } + + /** + * Get the path to the temporary file. + * + * @return string + */ + public function __toString(): string + { + return $this->path; + } + + /** + * Get the raw contents of the file. + * + * @return string + */ + public function getContents(): string + { + return file_get_contents($this->path); + } +} diff --git a/soc/2020/daily_report/archive/app/src/ViewFunctions/Asset.php b/soc/2020/daily_report/archive/app/src/ViewFunctions/Asset.php new file mode 100644 index 0000000..ffc31c9 --- /dev/null +++ b/soc/2020/daily_report/archive/app/src/ViewFunctions/Asset.php @@ -0,0 +1,61 @@ +container = $container; + } + + /** + * Return the path to an asset. + * + * @param string $path + * + * @return string + */ + public function __invoke(string $path): string + { + $path = '/' . ltrim($path, '/'); + + if ($this->mixManifest()->has($path)) { + $path = $this->mixManifest()->get($path); + } + + return 'app/assets/' . ltrim($path, '/'); + } + + /** + * Return the mix manifest collection. + * + * @return \Tightenco\Collect\Support\Collection + */ + protected function mixManifest(): Collection + { + $mixManifest = $this->container->get('asset_path') . '/mix-manifest.json'; + + if (! is_file($mixManifest)) { + return new Collection; + } + + return Collection::make( + json_decode(file_get_contents($mixManifest), true) ?? [] + ); + } +} diff --git a/soc/2020/daily_report/archive/app/src/ViewFunctions/Breadcrumbs.php b/soc/2020/daily_report/archive/app/src/ViewFunctions/Breadcrumbs.php new file mode 100644 index 0000000..a069b8b --- /dev/null +++ b/soc/2020/daily_report/archive/app/src/ViewFunctions/Breadcrumbs.php @@ -0,0 +1,54 @@ +container = $container; + $this->directorySeparator = $directorySeparator; + } + + /** + * Build an array of breadcrumbs for a given path. + * + * @param string $path + * + * @return array + */ + public function __invoke(string $path) + { + return Str::explode($path, $this->directorySeparator)->diff( + explode($this->directorySeparator, $this->container->get('base_path')) + )->filter(static function (string $crumb): bool { + return ! in_array($crumb, [null, '.']); + })->reduce(function (Collection $carry, string $crumb): Collection { + return $carry->put($crumb, ltrim( + $carry->last() . $this->directorySeparator . rawurlencode($crumb), $this->directorySeparator + )); + }, new Collection)->map(static function (string $path): string { + return sprintf('?dir=%s', $path); + }); + } +} diff --git a/soc/2020/daily_report/archive/app/src/ViewFunctions/Config.php b/soc/2020/daily_report/archive/app/src/ViewFunctions/Config.php new file mode 100644 index 0000000..69c5d6b --- /dev/null +++ b/soc/2020/daily_report/archive/app/src/ViewFunctions/Config.php @@ -0,0 +1,40 @@ +container = $container; + } + + /** + * Retrieve an item from the view config. + * + * @param string $key + * @param mixed $default + * + * @return mixed + */ + public function __invoke(string $key, $default = null) + { + try { + return $this->container->get($key); + } catch (NotFoundException $exception) { + return $default; + } + } +} diff --git a/soc/2020/daily_report/archive/app/src/ViewFunctions/FileUrl.php b/soc/2020/daily_report/archive/app/src/ViewFunctions/FileUrl.php new file mode 100644 index 0000000..85c5252 --- /dev/null +++ b/soc/2020/daily_report/archive/app/src/ViewFunctions/FileUrl.php @@ -0,0 +1,31 @@ +stripLeadingSlashes($path); + + if (is_file($path)) { + return $this->escape($path); + } + + if ($path === '') { + return ''; + } + + return sprintf('?dir=%s', $this->escape($path)); + } +} diff --git a/soc/2020/daily_report/archive/app/src/ViewFunctions/Icon.php b/soc/2020/daily_report/archive/app/src/ViewFunctions/Icon.php new file mode 100644 index 0000000..3222d29 --- /dev/null +++ b/soc/2020/daily_report/archive/app/src/ViewFunctions/Icon.php @@ -0,0 +1,42 @@ +container = $container; + } + + /** + * Retrieve the icon markup for a file. + * + * @param \Symfony\Component\Finder\SplFileInfo $file + * + * @return string + */ + public function __invoke(SplFileInfo $file): string + { + $icons = $this->container->get('icons'); + + $icon = $file->isDir() ? 'fas fa-folder' + : $icons[$file->getExtension()] ?? 'fas fa-file'; + + return ""; + } +} diff --git a/soc/2020/daily_report/archive/app/src/ViewFunctions/Markdown.php b/soc/2020/daily_report/archive/app/src/ViewFunctions/Markdown.php new file mode 100644 index 0000000..50ce376 --- /dev/null +++ b/soc/2020/daily_report/archive/app/src/ViewFunctions/Markdown.php @@ -0,0 +1,23 @@ +parse($string); + } +} diff --git a/soc/2020/daily_report/archive/app/src/ViewFunctions/ParentUrl.php b/soc/2020/daily_report/archive/app/src/ViewFunctions/ParentUrl.php new file mode 100644 index 0000000..cc3e7c9 --- /dev/null +++ b/soc/2020/daily_report/archive/app/src/ViewFunctions/ParentUrl.php @@ -0,0 +1,48 @@ +directorySeparator = $directorySeparator; + } + + /** + * Get the parent directory for a given path. + * + * @param string $path + * + * @return string + */ + public function __invoke(string $path) + { + $parentDir = Str::explode($path, $this->directorySeparator)->map( + static function (string $segment): string { + return rawurlencode($segment); + } + )->filter(static function (?string $value): bool { + return $value !== null; + })->slice(0, -1)->implode($this->directorySeparator); + + if ($parentDir === '') { + return '.'; + } + + return sprintf('?dir=%s', $parentDir); + } +} diff --git a/soc/2020/daily_report/archive/app/src/ViewFunctions/SizeForHumans.php b/soc/2020/daily_report/archive/app/src/ViewFunctions/SizeForHumans.php new file mode 100644 index 0000000..24a2cdb --- /dev/null +++ b/soc/2020/daily_report/archive/app/src/ViewFunctions/SizeForHumans.php @@ -0,0 +1,26 @@ +getSize()) - 1) / 3); + + return sprintf('%.2f', $file->getSize() / pow(1024, $factor)) . $sizes[$factor]; + } +} diff --git a/soc/2020/daily_report/archive/app/src/ViewFunctions/Translate.php b/soc/2020/daily_report/archive/app/src/ViewFunctions/Translate.php new file mode 100644 index 0000000..9998991 --- /dev/null +++ b/soc/2020/daily_report/archive/app/src/ViewFunctions/Translate.php @@ -0,0 +1,36 @@ +translator = $translator; + } + + /** + * Retrieve a translated string by ID. + * + * @param string $id + * + * @return string + */ + public function __invoke(string $id): string + { + return $this->translator->trans($id); + } +} diff --git a/soc/2020/daily_report/archive/app/src/ViewFunctions/Url.php b/soc/2020/daily_report/archive/app/src/ViewFunctions/Url.php new file mode 100644 index 0000000..20cdfab --- /dev/null +++ b/soc/2020/daily_report/archive/app/src/ViewFunctions/Url.php @@ -0,0 +1,64 @@ +directorySeparator = $directorySeparator; + } + + /** + * Return the URL for a given path. + * + * @param string $path + * + * @return string + */ + public function __invoke(string $path = '/'): string + { + return $this->escape($this->stripLeadingSlashes($path)); + } + + /** + * Strip all leading slashes (and a single dot) from a path. + * + * @param string $path + * + * @return string + */ + protected function stripLeadingSlashes(string $path): string + { + return preg_replace('/^\.?(\/|\\\)+/', '', $path); + } + + /** + * Escape URL characters in path segments. + * + * @param string $path + * + * @return string + */ + protected function escape(string $path): string + { + return Str::explode($path, $this->directorySeparator)->map( + static function (string $segment): string { + return rawurlencode($segment); + } + )->implode($this->directorySeparator); + } +} diff --git a/soc/2020/daily_report/archive/app/src/ViewFunctions/ViewFunction.php b/soc/2020/daily_report/archive/app/src/ViewFunctions/ViewFunction.php new file mode 100644 index 0000000..99dd404 --- /dev/null +++ b/soc/2020/daily_report/archive/app/src/ViewFunctions/ViewFunction.php @@ -0,0 +1,19 @@ +name; + } +} diff --git a/soc/2020/daily_report/archive/app/src/ViewFunctions/ZipUrl.php b/soc/2020/daily_report/archive/app/src/ViewFunctions/ZipUrl.php new file mode 100644 index 0000000..0487b51 --- /dev/null +++ b/soc/2020/daily_report/archive/app/src/ViewFunctions/ZipUrl.php @@ -0,0 +1,27 @@ +stripLeadingSlashes($path); + + if ($path === '') { + return '?zip=.'; + } + + return sprintf('?zip=%s', $this->escape($path)); + } +} diff --git a/soc/2020/daily_report/archive/app/translations/de.yaml b/soc/2020/daily_report/archive/app/translations/de.yaml new file mode 100644 index 0000000..8748ca7 --- /dev/null +++ b/soc/2020/daily_report/archive/app/translations/de.yaml @@ -0,0 +1,19 @@ +home: Hauptverzeichnis +download: Laden Sie dieses Verzeichnis herunter +search: Suche +file: + name: Dateiname + size: Größe + date: Datum + info: Dateiinformation +powered_by: Unterstützt von +scroll_to_top: Nach oben Scrollen + +error: + directory_not_found: Verzeichnis existiert nicht + file_not_found: Datei nicht gefunden + file_size_exceeded: Dateigröße zu groß + no_results_found: Keine ergebnisse gefunden + unexpected: Ein unerwarteter fehler ist aufgetreten + +enable_debugging: Aktivieren sie das "debugging" für zusätzliche informationen diff --git a/soc/2020/daily_report/archive/app/translations/en.yaml b/soc/2020/daily_report/archive/app/translations/en.yaml new file mode 100644 index 0000000..fe1b3cb --- /dev/null +++ b/soc/2020/daily_report/archive/app/translations/en.yaml @@ -0,0 +1,19 @@ +home: Home +download: Download this Directory +search: Search +file: + name: File Name + size: Size + date: Date + info: File Info +powered_by: Powered by +scroll_to_top: Scroll to Top + +error: + directory_not_found: Directory does not exist + file_not_found: File not found + file_size_exceeded: File size too large + no_results_found: No results found + unexpected: An unexpected error occurred + +enable_debugging: Enable debugging for additional information diff --git a/soc/2020/daily_report/archive/app/translations/es.yaml b/soc/2020/daily_report/archive/app/translations/es.yaml new file mode 100644 index 0000000..32bcfa4 --- /dev/null +++ b/soc/2020/daily_report/archive/app/translations/es.yaml @@ -0,0 +1,19 @@ +home: Hogar +download: Descargar este Directorio +search: Buscar +file: + name: Nombre del Archivo + size: Tamaño + date: Fecha + info: Información del Archivo +powered_by: Desarrollado por +scroll_to_top: Vuelve al Comienzo + +error: + directory_not_found: El directorio no existe + file_not_found: Archivo no encontrado + file_size_exceeded: Tamaño de archivo demasiado grande + no_results_found: No se han encontrado resultados + unexpected: Ocurrió un error inesperado + +enable_debugging: Habilite la "debugging" para obtener información adicional diff --git a/soc/2020/daily_report/archive/app/translations/fr.yaml b/soc/2020/daily_report/archive/app/translations/fr.yaml new file mode 100644 index 0000000..8dbcad3 --- /dev/null +++ b/soc/2020/daily_report/archive/app/translations/fr.yaml @@ -0,0 +1,19 @@ +home: Accueil +download: Télécharger ce Répertoire +search: Chercher +file: + name: Nom de Fichier + size: Taille + date: Date + info: Informations sur le Fichier +powered_by: Alimenté par +scroll_to_top: Retour en Haut + +error: + directory_not_found: Le répertoire n'existe pas + file_not_found: Fichier introuvable + file_size_exceeded: Fichier trop gros + no_results_found: Aucun résultat trouvé + unexpected: Une erreur inattendue s'est produite + +enable_debugging: Activer le "debugging" pour des informations supplémentaires diff --git a/soc/2020/daily_report/archive/app/translations/id.yaml b/soc/2020/daily_report/archive/app/translations/id.yaml new file mode 100644 index 0000000..8ad8e21 --- /dev/null +++ b/soc/2020/daily_report/archive/app/translations/id.yaml @@ -0,0 +1,19 @@ +home: Beranda +download: Unduh Direktori Ini +search: Cari +file: + name: Nama Berkas + size: Ukuran + date: Tanggal + info: Info Berkas +powered_by: Diberdayakan oleh +scroll_to_top: Skrol ke atas + +error: + directory_not_found: Direktori tidak ditemukan + file_not_found: Berkas tidak ditemukan + file_size_exceeded: Ukuran berkas terlalu besar + no_results_found: Tidak ada hasil ditemukan + unexpected: Terjadi galat + +enable_debugging: Aktifkan debugging untuk informasi lainnya diff --git a/soc/2020/daily_report/archive/app/translations/it.yaml b/soc/2020/daily_report/archive/app/translations/it.yaml new file mode 100644 index 0000000..9845961 --- /dev/null +++ b/soc/2020/daily_report/archive/app/translations/it.yaml @@ -0,0 +1,19 @@ +home: Home +download: Scarica questa cartella +search: Cerca +file: + name: Nome + size: Peso + date: Data + info: Info +powered_by: Powered by +scroll_to_top: Torna su + +error: + directory_not_found: La cartella non esiste + file_not_found: File non trovato + file_size_exceeded: Il file è troppo largo + no_results_found: Nessun risultato trovato + unexpected: Si è verificato un errore inaspettato + +enable_debugging: Abilita il debugging per altre informazioni diff --git a/soc/2020/daily_report/archive/app/translations/kr.yaml b/soc/2020/daily_report/archive/app/translations/kr.yaml new file mode 100644 index 0000000..1e907e1 --- /dev/null +++ b/soc/2020/daily_report/archive/app/translations/kr.yaml @@ -0,0 +1,19 @@ +home: 홈 +download: ì´ í´ë” 다운로드 +search: 검색 +file: + name: íŒŒì¼ ì´ë¦„ + size: í¬ê¸° + date: 날짜 + info: íŒŒì¼ ì •ë³´ +powered_by: Powered by +scroll_to_top: 맨위로 스í¬ë¡¤ + +error: + directory_not_found: 디렉토리 ì°¾ì„ ìˆ˜ 없습니다 + file_not_found: íŒŒì¼ ì°¾ì„ ìˆ˜ 없습니다 + file_size_exceeded: íŒŒì¼ í¬ê¸° 매우 í½ë‹ˆë‹¤ + no_results_found: 검색 결과를 없습니다 + unexpected: 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤ + +enable_debugging: ë” ë§Žì€ ì •ë³´ 받아기 위해서 디버깅 활성화하세요 \ No newline at end of file diff --git a/soc/2020/daily_report/archive/app/translations/nl.yaml b/soc/2020/daily_report/archive/app/translations/nl.yaml new file mode 100644 index 0000000..6c6d62a --- /dev/null +++ b/soc/2020/daily_report/archive/app/translations/nl.yaml @@ -0,0 +1,19 @@ +home: Home +download: Download this Directory +search: Zoeken +file: + name: Bestandsnaam + size: Grootte + date: Datum + info: Bestandsinformatie +powered_by: Mogelijk gemaakt door +scroll_to_top: Ga naar boven + +error: + directory_not_found: Map bestaat niet + file_not_found: Bestand niet gevonden + file_size_exceeded: Bestand is te groot + no_results_found: Geen resultaten gevonden + unexpected: Een onverwachtse fout is opgetreden + +enable_debugging: Zet foutopsporing aan voor gedetailleerde informatie diff --git a/soc/2020/daily_report/archive/app/translations/pl.yaml b/soc/2020/daily_report/archive/app/translations/pl.yaml new file mode 100644 index 0000000..cb953ac --- /dev/null +++ b/soc/2020/daily_report/archive/app/translations/pl.yaml @@ -0,0 +1,19 @@ +home: Home +download: Pobierz folder +search: Szukaj +file: + name: Nazwa pliku + size: Rozmiar + date: Data + info: Szczegóły +powered_by: Wspierane przez +scroll_to_top: PrzewiÅ„ na górÄ™ + +error: + directory_not_found: Nie znaleziono Å›cieżki + file_not_found: Nie znaleziono pliku + file_size_exceeded: Plik jest za duży + no_results_found: Brak wyników + unexpected: WystÄ…piÅ‚ nieznany bÅ‚Ä…d + +enable_debugging: WÅ‚Ä…cz debugowanie dla dodatkowych informacji diff --git a/soc/2020/daily_report/archive/app/translations/pt-BR.yaml b/soc/2020/daily_report/archive/app/translations/pt-BR.yaml new file mode 100644 index 0000000..0778561 --- /dev/null +++ b/soc/2020/daily_report/archive/app/translations/pt-BR.yaml @@ -0,0 +1,19 @@ +home: Início +download: Baixar este Diretório +search: Busca +file: + name: Nome do arquivo + size: Tamanho + date: Data + info: Informação do arquivo +powered_by: Desenvolvido por +scroll_to_top: Voltar ao início + +error: + directory_not_found: Diretório não existe + file_not_found: Arquivo não encontrado + file_size_exceeded: Tamanho do arquivo muito grande + no_results_found: Nenhum resultado encontrado + unexpected: Ocorreu um erro inesperado + +enable_debugging: Habilitar depuração para obter informações adicionais diff --git a/soc/2020/daily_report/archive/app/translations/ro.yaml b/soc/2020/daily_report/archive/app/translations/ro.yaml new file mode 100644 index 0000000..fc3d9b4 --- /dev/null +++ b/soc/2020/daily_report/archive/app/translations/ro.yaml @@ -0,0 +1,19 @@ +home: Acasă +download: Descarcă acest Director +search: Căutare +file: + name: Nume FiÈ™ier + size: Dimensiune + date: Data + info: Info FiÈ™ier +powered_by: Cu suport de la +scroll_to_top: DerulaÈ›i la început + +error: + directory_not_found: Directorul nu există + file_not_found: FiÈ™ierul nu a fost găsit + file_size_exceeded: Dimensiunea fiÈ™ierului este prea mare + no_results_found: Nici un rezultat gasit + unexpected: A apărut o eroare neprevăzută + +enable_debugging: ActivaÈ›i depanarea pentru informaÈ›ii suplimentare diff --git a/soc/2020/daily_report/archive/app/translations/ru.yaml b/soc/2020/daily_report/archive/app/translations/ru.yaml new file mode 100644 index 0000000..813b5db --- /dev/null +++ b/soc/2020/daily_report/archive/app/translations/ru.yaml @@ -0,0 +1,19 @@ +home: Дом +download: Скачать Ñтот каталог +search: ПоиÑк +file: + name: Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° + size: Размер + date: Дата + info: Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ файле +powered_by: ПитатьÑÑ Ð¾Ñ‚ +scroll_to_top: ПролиÑтать наверх + +error: + directory_not_found: Каталог не ÑущеÑтвует + file_not_found: Файл не найден + file_size_exceeded: Размер файла Ñлишком велик + no_results_found: результаты не найдены + unexpected: произошла Ð½ÐµÐ¿Ñ€ÐµÐ´Ð²Ð¸Ð´ÐµÐ½Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° + +enable_debugging: Включить "debugging" Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации diff --git a/soc/2020/daily_report/archive/app/translations/zh-CN.yaml b/soc/2020/daily_report/archive/app/translations/zh-CN.yaml new file mode 100644 index 0000000..8e5394b --- /dev/null +++ b/soc/2020/daily_report/archive/app/translations/zh-CN.yaml @@ -0,0 +1,19 @@ +home: 目录起始页 +download: 下载 +search: æœç´¢ +file: + name: 文件å + size: å¤§å° + date: 日期 + info: æ–‡ä»¶ä¿¡æ¯ +powered_by: 基于 +scroll_to_top: 回到顶部 + +error: + directory_not_found: 目录ä¸å­˜åœ¨ + file_not_found: 文件未找到 + file_size_exceeded: 文件过大 + no_results_found: 未找到结果 + unexpected: 一个æ„料之外的问题å‘生了 + +enable_debugging: å¯ç”¨è°ƒè¯•ä»¥èŽ·å–æ›´å¤šä¿¡æ¯ diff --git a/soc/2020/daily_report/archive/app/translations/zh-TW.yaml b/soc/2020/daily_report/archive/app/translations/zh-TW.yaml new file mode 100644 index 0000000..b49d838 --- /dev/null +++ b/soc/2020/daily_report/archive/app/translations/zh-TW.yaml @@ -0,0 +1,19 @@ +home: ç›®éŒ„èµ·å§‹é  +download: 下載 +search: 檢索 +file: + name: 文件å + size: å¤§å° + date: 日期 + info: 文件資訊 +powered_by: 基於 +scroll_to_top: 回到頂部 + +error: + directory_not_found: 目錄ä¸å­˜åœ¨ + file_not_found: 文件未找到 + file_size_exceeded: 文件éŽå¤§ + no_results_found: 未找到çµæžœ + unexpected: 一個æ„料之外的å•é¡Œç™¼ç”Ÿäº† + +enable_debugging: 啓用調試以ç²å¾—更多資訊 diff --git a/soc/2020/daily_report/archive/app/vendor/autoload.php b/soc/2020/daily_report/archive/app/vendor/autoload.php new file mode 100644 index 0000000..526ebd8 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/autoload.php @@ -0,0 +1,7 @@ + [ + 'startLine', 'endLine', 'startFilePos', 'endFilePos', 'comments' +]]); +$parser = (new PhpParser\ParserFactory)->create( + PhpParser\ParserFactory::PREFER_PHP7, + $lexer +); +$dumper = new PhpParser\NodeDumper([ + 'dumpComments' => true, + 'dumpPositions' => $attributes['with-positions'], +]); +$prettyPrinter = new PhpParser\PrettyPrinter\Standard; + +$traverser = new PhpParser\NodeTraverser(); +$traverser->addVisitor(new PhpParser\NodeVisitor\NameResolver); + +foreach ($files as $file) { + if (strpos($file, ' Code $code\n"); + } else { + if (!file_exists($file)) { + fwrite(STDERR, "File $file does not exist.\n"); + exit(1); + } + + $code = file_get_contents($file); + fwrite(STDERR, "====> File $file:\n"); + } + + if ($attributes['with-recovery']) { + $errorHandler = new PhpParser\ErrorHandler\Collecting; + $stmts = $parser->parse($code, $errorHandler); + foreach ($errorHandler->getErrors() as $error) { + $message = formatErrorMessage($error, $code, $attributes['with-column-info']); + fwrite(STDERR, $message . "\n"); + } + if (null === $stmts) { + continue; + } + } else { + try { + $stmts = $parser->parse($code); + } catch (PhpParser\Error $error) { + $message = formatErrorMessage($error, $code, $attributes['with-column-info']); + fwrite(STDERR, $message . "\n"); + exit(1); + } + } + + foreach ($operations as $operation) { + if ('dump' === $operation) { + fwrite(STDERR, "==> Node dump:\n"); + echo $dumper->dump($stmts, $code), "\n"; + } elseif ('pretty-print' === $operation) { + fwrite(STDERR, "==> Pretty print:\n"); + echo $prettyPrinter->prettyPrintFile($stmts), "\n"; + } elseif ('json-dump' === $operation) { + fwrite(STDERR, "==> JSON dump:\n"); + echo json_encode($stmts, JSON_PRETTY_PRINT), "\n"; + } elseif ('var-dump' === $operation) { + fwrite(STDERR, "==> var_dump():\n"); + var_dump($stmts); + } elseif ('resolve-names' === $operation) { + fwrite(STDERR, "==> Resolved names.\n"); + $stmts = $traverser->traverse($stmts); + } + } +} + +function formatErrorMessage(PhpParser\Error $e, $code, $withColumnInfo) { + if ($withColumnInfo && $e->hasColumnInfo()) { + return $e->getMessageWithColumnInfo($code); + } else { + return $e->getMessage(); + } +} + +function showHelp($error = '') { + if ($error) { + fwrite(STDERR, $error . "\n\n"); + } + fwrite($error ? STDERR : STDOUT, << false, + 'with-positions' => false, + 'with-recovery' => false, + ]; + + array_shift($args); + $parseOptions = true; + foreach ($args as $arg) { + if (!$parseOptions) { + $files[] = $arg; + continue; + } + + switch ($arg) { + case '--dump': + case '-d': + $operations[] = 'dump'; + break; + case '--pretty-print': + case '-p': + $operations[] = 'pretty-print'; + break; + case '--json-dump': + case '-j': + $operations[] = 'json-dump'; + break; + case '--var-dump': + $operations[] = 'var-dump'; + break; + case '--resolve-names': + case '-N'; + $operations[] = 'resolve-names'; + break; + case '--with-column-info': + case '-c'; + $attributes['with-column-info'] = true; + break; + case '--with-positions': + case '-P': + $attributes['with-positions'] = true; + break; + case '--with-recovery': + case '-r': + $attributes['with-recovery'] = true; + break; + case '--help': + case '-h'; + showHelp(); + break; + case '--': + $parseOptions = false; + break; + default: + if ($arg[0] === '-') { + showHelp("Invalid operation $arg."); + } else { + $files[] = $arg; + } + } + } + + return [$operations, $files, $attributes]; +} diff --git a/soc/2020/daily_report/archive/app/vendor/bin/var-dump-server b/soc/2020/daily_report/archive/app/vendor/bin/var-dump-server new file mode 100644 index 0000000..98c813a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/bin/var-dump-server @@ -0,0 +1,63 @@ +#!/usr/bin/env php + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +/** + * Starts a dump server to collect and output dumps on a single place with multiple formats support. + * + * @author Maxime Steinhausser + */ + +use Psr\Log\LoggerInterface; +use Symfony\Component\Console\Application; +use Symfony\Component\Console\Input\ArgvInput; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Logger\ConsoleLogger; +use Symfony\Component\Console\Output\ConsoleOutput; +use Symfony\Component\VarDumper\Command\ServerDumpCommand; +use Symfony\Component\VarDumper\Server\DumpServer; + +function includeIfExists(string $file): bool +{ + return file_exists($file) && include $file; +} + +if ( + !includeIfExists(__DIR__ . '/../../../../autoload.php') && + !includeIfExists(__DIR__ . '/../../vendor/autoload.php') && + !includeIfExists(__DIR__ . '/../../../../../../vendor/autoload.php') +) { + fwrite(STDERR, 'Install dependencies using Composer.'.PHP_EOL); + exit(1); +} + +if (!class_exists(Application::class)) { + fwrite(STDERR, 'You need the "symfony/console" component in order to run the VarDumper server.'.PHP_EOL); + exit(1); +} + +$input = new ArgvInput(); +$output = new ConsoleOutput(); +$defaultHost = '127.0.0.1:9912'; +$host = $input->getParameterOption(['--host'], $_SERVER['VAR_DUMPER_SERVER'] ?? $defaultHost, true); +$logger = interface_exists(LoggerInterface::class) ? new ConsoleLogger($output->getErrorOutput()) : null; + +$app = new Application(); + +$app->getDefinition()->addOption( + new InputOption('--host', null, InputOption::VALUE_REQUIRED, 'The address the server should listen to', $defaultHost) +); + +$app->add($command = new ServerDumpCommand(new DumpServer($host, $logger))) + ->getApplication() + ->setDefaultCommand($command->getName(), true) + ->run($input, $output) +; diff --git a/soc/2020/daily_report/archive/app/vendor/composer/ClassLoader.php b/soc/2020/daily_report/archive/app/vendor/composer/ClassLoader.php new file mode 100644 index 0000000..fce8549 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/composer/ClassLoader.php @@ -0,0 +1,445 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Autoload; + +/** + * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. + * + * $loader = new \Composer\Autoload\ClassLoader(); + * + * // register classes with namespaces + * $loader->add('Symfony\Component', __DIR__.'/component'); + * $loader->add('Symfony', __DIR__.'/framework'); + * + * // activate the autoloader + * $loader->register(); + * + * // to enable searching the include path (eg. for PEAR packages) + * $loader->setUseIncludePath(true); + * + * In this example, if you try to use a class in the Symfony\Component + * namespace or one of its children (Symfony\Component\Console for instance), + * the autoloader will first look for the class under the component/ + * directory, and it will then fallback to the framework/ directory if not + * found before giving up. + * + * This class is loosely based on the Symfony UniversalClassLoader. + * + * @author Fabien Potencier + * @author Jordi Boggiano + * @see http://www.php-fig.org/psr/psr-0/ + * @see http://www.php-fig.org/psr/psr-4/ + */ +class ClassLoader +{ + // PSR-4 + private $prefixLengthsPsr4 = array(); + private $prefixDirsPsr4 = array(); + private $fallbackDirsPsr4 = array(); + + // PSR-0 + private $prefixesPsr0 = array(); + private $fallbackDirsPsr0 = array(); + + private $useIncludePath = false; + private $classMap = array(); + private $classMapAuthoritative = false; + private $missingClasses = array(); + private $apcuPrefix; + + public function getPrefixes() + { + if (!empty($this->prefixesPsr0)) { + return call_user_func_array('array_merge', $this->prefixesPsr0); + } + + return array(); + } + + public function getPrefixesPsr4() + { + return $this->prefixDirsPsr4; + } + + public function getFallbackDirs() + { + return $this->fallbackDirsPsr0; + } + + public function getFallbackDirsPsr4() + { + return $this->fallbackDirsPsr4; + } + + public function getClassMap() + { + return $this->classMap; + } + + /** + * @param array $classMap Class to filename map + */ + public function addClassMap(array $classMap) + { + if ($this->classMap) { + $this->classMap = array_merge($this->classMap, $classMap); + } else { + $this->classMap = $classMap; + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, either + * appending or prepending to the ones previously set for this prefix. + * + * @param string $prefix The prefix + * @param array|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories + */ + public function add($prefix, $paths, $prepend = false) + { + if (!$prefix) { + if ($prepend) { + $this->fallbackDirsPsr0 = array_merge( + (array) $paths, + $this->fallbackDirsPsr0 + ); + } else { + $this->fallbackDirsPsr0 = array_merge( + $this->fallbackDirsPsr0, + (array) $paths + ); + } + + return; + } + + $first = $prefix[0]; + if (!isset($this->prefixesPsr0[$first][$prefix])) { + $this->prefixesPsr0[$first][$prefix] = (array) $paths; + + return; + } + if ($prepend) { + $this->prefixesPsr0[$first][$prefix] = array_merge( + (array) $paths, + $this->prefixesPsr0[$first][$prefix] + ); + } else { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $this->prefixesPsr0[$first][$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, either + * appending or prepending to the ones previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param array|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories + * + * @throws \InvalidArgumentException + */ + public function addPsr4($prefix, $paths, $prepend = false) + { + if (!$prefix) { + // Register directories for the root namespace. + if ($prepend) { + $this->fallbackDirsPsr4 = array_merge( + (array) $paths, + $this->fallbackDirsPsr4 + ); + } else { + $this->fallbackDirsPsr4 = array_merge( + $this->fallbackDirsPsr4, + (array) $paths + ); + } + } elseif (!isset($this->prefixDirsPsr4[$prefix])) { + // Register directories for a new namespace. + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } elseif ($prepend) { + // Prepend directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + (array) $paths, + $this->prefixDirsPsr4[$prefix] + ); + } else { + // Append directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $this->prefixDirsPsr4[$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, + * replacing any others previously set for this prefix. + * + * @param string $prefix The prefix + * @param array|string $paths The PSR-0 base directories + */ + public function set($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr0 = (array) $paths; + } else { + $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, + * replacing any others previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param array|string $paths The PSR-4 base directories + * + * @throws \InvalidArgumentException + */ + public function setPsr4($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr4 = (array) $paths; + } else { + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } + } + + /** + * Turns on searching the include path for class files. + * + * @param bool $useIncludePath + */ + public function setUseIncludePath($useIncludePath) + { + $this->useIncludePath = $useIncludePath; + } + + /** + * Can be used to check if the autoloader uses the include path to check + * for classes. + * + * @return bool + */ + public function getUseIncludePath() + { + return $this->useIncludePath; + } + + /** + * Turns off searching the prefix and fallback directories for classes + * that have not been registered with the class map. + * + * @param bool $classMapAuthoritative + */ + public function setClassMapAuthoritative($classMapAuthoritative) + { + $this->classMapAuthoritative = $classMapAuthoritative; + } + + /** + * Should class lookup fail if not found in the current class map? + * + * @return bool + */ + public function isClassMapAuthoritative() + { + return $this->classMapAuthoritative; + } + + /** + * APCu prefix to use to cache found/not-found classes, if the extension is enabled. + * + * @param string|null $apcuPrefix + */ + public function setApcuPrefix($apcuPrefix) + { + $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; + } + + /** + * The APCu prefix in use, or null if APCu caching is not enabled. + * + * @return string|null + */ + public function getApcuPrefix() + { + return $this->apcuPrefix; + } + + /** + * Registers this instance as an autoloader. + * + * @param bool $prepend Whether to prepend the autoloader or not + */ + public function register($prepend = false) + { + spl_autoload_register(array($this, 'loadClass'), true, $prepend); + } + + /** + * Unregisters this instance as an autoloader. + */ + public function unregister() + { + spl_autoload_unregister(array($this, 'loadClass')); + } + + /** + * Loads the given class or interface. + * + * @param string $class The name of the class + * @return bool|null True if loaded, null otherwise + */ + public function loadClass($class) + { + if ($file = $this->findFile($class)) { + includeFile($file); + + return true; + } + } + + /** + * Finds the path to the file where the class is defined. + * + * @param string $class The name of the class + * + * @return string|false The path if found, false otherwise + */ + public function findFile($class) + { + // class map lookup + if (isset($this->classMap[$class])) { + return $this->classMap[$class]; + } + if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { + return false; + } + if (null !== $this->apcuPrefix) { + $file = apcu_fetch($this->apcuPrefix.$class, $hit); + if ($hit) { + return $file; + } + } + + $file = $this->findFileWithExtension($class, '.php'); + + // Search for Hack files if we are running on HHVM + if (false === $file && defined('HHVM_VERSION')) { + $file = $this->findFileWithExtension($class, '.hh'); + } + + if (null !== $this->apcuPrefix) { + apcu_add($this->apcuPrefix.$class, $file); + } + + if (false === $file) { + // Remember that this class does not exist. + $this->missingClasses[$class] = true; + } + + return $file; + } + + private function findFileWithExtension($class, $ext) + { + // PSR-4 lookup + $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; + + $first = $class[0]; + if (isset($this->prefixLengthsPsr4[$first])) { + $subPath = $class; + while (false !== $lastPos = strrpos($subPath, '\\')) { + $subPath = substr($subPath, 0, $lastPos); + $search = $subPath . '\\'; + if (isset($this->prefixDirsPsr4[$search])) { + $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); + foreach ($this->prefixDirsPsr4[$search] as $dir) { + if (file_exists($file = $dir . $pathEnd)) { + return $file; + } + } + } + } + } + + // PSR-4 fallback dirs + foreach ($this->fallbackDirsPsr4 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { + return $file; + } + } + + // PSR-0 lookup + if (false !== $pos = strrpos($class, '\\')) { + // namespaced class name + $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) + . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); + } else { + // PEAR-like class name + $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; + } + + if (isset($this->prefixesPsr0[$first])) { + foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { + if (0 === strpos($class, $prefix)) { + foreach ($dirs as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + } + } + } + + // PSR-0 fallback dirs + foreach ($this->fallbackDirsPsr0 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + + // PSR-0 include paths. + if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { + return $file; + } + + return false; + } +} + +/** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + */ +function includeFile($file) +{ + include $file; +} diff --git a/soc/2020/daily_report/archive/app/vendor/composer/LICENSE b/soc/2020/daily_report/archive/app/vendor/composer/LICENSE new file mode 100644 index 0000000..f27399a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/composer/LICENSE @@ -0,0 +1,21 @@ + +Copyright (c) Nils Adermann, Jordi Boggiano + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/soc/2020/daily_report/archive/app/vendor/composer/autoload_classmap.php b/soc/2020/daily_report/archive/app/vendor/composer/autoload_classmap.php new file mode 100644 index 0000000..1ac4754 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/composer/autoload_classmap.php @@ -0,0 +1,935 @@ + $baseDir . '/app/src/Bootstrap/AppManager.php', + 'App\\Bootstrap\\ExceptionManager' => $baseDir . '/app/src/Bootstrap/ExceptionManager.php', + 'App\\Bootstrap\\MiddlewareManager' => $baseDir . '/app/src/Bootstrap/MiddlewareManager.php', + 'App\\Bootstrap\\RouteManager' => $baseDir . '/app/src/Bootstrap/RouteManager.php', + 'App\\Controllers\\DirectoryController' => $baseDir . '/app/src/Controllers/DirectoryController.php', + 'App\\Controllers\\FileInfoController' => $baseDir . '/app/src/Controllers/FileInfoController.php', + 'App\\Controllers\\IndexController' => $baseDir . '/app/src/Controllers/IndexController.php', + 'App\\Controllers\\SearchController' => $baseDir . '/app/src/Controllers/SearchController.php', + 'App\\Controllers\\ZipController' => $baseDir . '/app/src/Controllers/ZipController.php', + 'App\\Exceptions\\ErrorHandler' => $baseDir . '/app/src/Exceptions/ErrorHandler.php', + 'App\\Factories\\FinderFactory' => $baseDir . '/app/src/Factories/FinderFactory.php', + 'App\\Factories\\TranslationFactory' => $baseDir . '/app/src/Factories/TranslationFactory.php', + 'App\\Factories\\TwigFactory' => $baseDir . '/app/src/Factories/TwigFactory.php', + 'App\\Middlewares\\WhoopsMiddleware' => $baseDir . '/app/src/Middlewares/WhoopsMiddleware.php', + 'App\\SortMethods\\Accessed' => $baseDir . '/app/src/SortMethods/Accessed.php', + 'App\\SortMethods\\Changed' => $baseDir . '/app/src/SortMethods/Changed.php', + 'App\\SortMethods\\Modified' => $baseDir . '/app/src/SortMethods/Modified.php', + 'App\\SortMethods\\Name' => $baseDir . '/app/src/SortMethods/Name.php', + 'App\\SortMethods\\Natural' => $baseDir . '/app/src/SortMethods/Natural.php', + 'App\\SortMethods\\SortMethod' => $baseDir . '/app/src/SortMethods/SortMethod.php', + 'App\\SortMethods\\Type' => $baseDir . '/app/src/SortMethods/Type.php', + 'App\\Support\\Helpers' => $baseDir . '/app/src/Support/Helpers.php', + 'App\\Support\\Str' => $baseDir . '/app/src/Support/Str.php', + 'App\\TemporaryFile' => $baseDir . '/app/src/TemporaryFile.php', + 'App\\ViewFunctions\\Asset' => $baseDir . '/app/src/ViewFunctions/Asset.php', + 'App\\ViewFunctions\\Breadcrumbs' => $baseDir . '/app/src/ViewFunctions/Breadcrumbs.php', + 'App\\ViewFunctions\\Config' => $baseDir . '/app/src/ViewFunctions/Config.php', + 'App\\ViewFunctions\\FileUrl' => $baseDir . '/app/src/ViewFunctions/FileUrl.php', + 'App\\ViewFunctions\\Icon' => $baseDir . '/app/src/ViewFunctions/Icon.php', + 'App\\ViewFunctions\\Markdown' => $baseDir . '/app/src/ViewFunctions/Markdown.php', + 'App\\ViewFunctions\\ParentUrl' => $baseDir . '/app/src/ViewFunctions/ParentUrl.php', + 'App\\ViewFunctions\\SizeForHumans' => $baseDir . '/app/src/ViewFunctions/SizeForHumans.php', + 'App\\ViewFunctions\\Translate' => $baseDir . '/app/src/ViewFunctions/Translate.php', + 'App\\ViewFunctions\\Url' => $baseDir . '/app/src/ViewFunctions/Url.php', + 'App\\ViewFunctions\\ViewFunction' => $baseDir . '/app/src/ViewFunctions/ViewFunction.php', + 'App\\ViewFunctions\\ZipUrl' => $baseDir . '/app/src/ViewFunctions/ZipUrl.php', + 'DI\\Annotation\\Inject' => $vendorDir . '/php-di/php-di/src/Annotation/Inject.php', + 'DI\\Annotation\\Injectable' => $vendorDir . '/php-di/php-di/src/Annotation/Injectable.php', + 'DI\\Bridge\\Slim\\Bridge' => $vendorDir . '/php-di/slim-bridge/src/Bridge.php', + 'DI\\Bridge\\Slim\\CallableResolver' => $vendorDir . '/php-di/slim-bridge/src/CallableResolver.php', + 'DI\\Bridge\\Slim\\ControllerInvoker' => $vendorDir . '/php-di/slim-bridge/src/ControllerInvoker.php', + 'DI\\CompiledContainer' => $vendorDir . '/php-di/php-di/src/CompiledContainer.php', + 'DI\\Compiler\\Compiler' => $vendorDir . '/php-di/php-di/src/Compiler/Compiler.php', + 'DI\\Compiler\\ObjectCreationCompiler' => $vendorDir . '/php-di/php-di/src/Compiler/ObjectCreationCompiler.php', + 'DI\\Compiler\\RequestedEntryHolder' => $vendorDir . '/php-di/php-di/src/Compiler/RequestedEntryHolder.php', + 'DI\\Container' => $vendorDir . '/php-di/php-di/src/Container.php', + 'DI\\ContainerBuilder' => $vendorDir . '/php-di/php-di/src/ContainerBuilder.php', + 'DI\\Definition\\ArrayDefinition' => $vendorDir . '/php-di/php-di/src/Definition/ArrayDefinition.php', + 'DI\\Definition\\ArrayDefinitionExtension' => $vendorDir . '/php-di/php-di/src/Definition/ArrayDefinitionExtension.php', + 'DI\\Definition\\AutowireDefinition' => $vendorDir . '/php-di/php-di/src/Definition/AutowireDefinition.php', + 'DI\\Definition\\DecoratorDefinition' => $vendorDir . '/php-di/php-di/src/Definition/DecoratorDefinition.php', + 'DI\\Definition\\Definition' => $vendorDir . '/php-di/php-di/src/Definition/Definition.php', + 'DI\\Definition\\Dumper\\ObjectDefinitionDumper' => $vendorDir . '/php-di/php-di/src/Definition/Dumper/ObjectDefinitionDumper.php', + 'DI\\Definition\\EnvironmentVariableDefinition' => $vendorDir . '/php-di/php-di/src/Definition/EnvironmentVariableDefinition.php', + 'DI\\Definition\\Exception\\InvalidAnnotation' => $vendorDir . '/php-di/php-di/src/Definition/Exception/InvalidAnnotation.php', + 'DI\\Definition\\Exception\\InvalidDefinition' => $vendorDir . '/php-di/php-di/src/Definition/Exception/InvalidDefinition.php', + 'DI\\Definition\\ExtendsPreviousDefinition' => $vendorDir . '/php-di/php-di/src/Definition/ExtendsPreviousDefinition.php', + 'DI\\Definition\\FactoryDefinition' => $vendorDir . '/php-di/php-di/src/Definition/FactoryDefinition.php', + 'DI\\Definition\\Helper\\AutowireDefinitionHelper' => $vendorDir . '/php-di/php-di/src/Definition/Helper/AutowireDefinitionHelper.php', + 'DI\\Definition\\Helper\\CreateDefinitionHelper' => $vendorDir . '/php-di/php-di/src/Definition/Helper/CreateDefinitionHelper.php', + 'DI\\Definition\\Helper\\DefinitionHelper' => $vendorDir . '/php-di/php-di/src/Definition/Helper/DefinitionHelper.php', + 'DI\\Definition\\Helper\\FactoryDefinitionHelper' => $vendorDir . '/php-di/php-di/src/Definition/Helper/FactoryDefinitionHelper.php', + 'DI\\Definition\\InstanceDefinition' => $vendorDir . '/php-di/php-di/src/Definition/InstanceDefinition.php', + 'DI\\Definition\\ObjectDefinition' => $vendorDir . '/php-di/php-di/src/Definition/ObjectDefinition.php', + 'DI\\Definition\\ObjectDefinition\\MethodInjection' => $vendorDir . '/php-di/php-di/src/Definition/ObjectDefinition/MethodInjection.php', + 'DI\\Definition\\ObjectDefinition\\PropertyInjection' => $vendorDir . '/php-di/php-di/src/Definition/ObjectDefinition/PropertyInjection.php', + 'DI\\Definition\\Reference' => $vendorDir . '/php-di/php-di/src/Definition/Reference.php', + 'DI\\Definition\\Resolver\\ArrayResolver' => $vendorDir . '/php-di/php-di/src/Definition/Resolver/ArrayResolver.php', + 'DI\\Definition\\Resolver\\DecoratorResolver' => $vendorDir . '/php-di/php-di/src/Definition/Resolver/DecoratorResolver.php', + 'DI\\Definition\\Resolver\\DefinitionResolver' => $vendorDir . '/php-di/php-di/src/Definition/Resolver/DefinitionResolver.php', + 'DI\\Definition\\Resolver\\EnvironmentVariableResolver' => $vendorDir . '/php-di/php-di/src/Definition/Resolver/EnvironmentVariableResolver.php', + 'DI\\Definition\\Resolver\\FactoryResolver' => $vendorDir . '/php-di/php-di/src/Definition/Resolver/FactoryResolver.php', + 'DI\\Definition\\Resolver\\InstanceInjector' => $vendorDir . '/php-di/php-di/src/Definition/Resolver/InstanceInjector.php', + 'DI\\Definition\\Resolver\\ObjectCreator' => $vendorDir . '/php-di/php-di/src/Definition/Resolver/ObjectCreator.php', + 'DI\\Definition\\Resolver\\ParameterResolver' => $vendorDir . '/php-di/php-di/src/Definition/Resolver/ParameterResolver.php', + 'DI\\Definition\\Resolver\\ResolverDispatcher' => $vendorDir . '/php-di/php-di/src/Definition/Resolver/ResolverDispatcher.php', + 'DI\\Definition\\SelfResolvingDefinition' => $vendorDir . '/php-di/php-di/src/Definition/SelfResolvingDefinition.php', + 'DI\\Definition\\Source\\AnnotationBasedAutowiring' => $vendorDir . '/php-di/php-di/src/Definition/Source/AnnotationBasedAutowiring.php', + 'DI\\Definition\\Source\\Autowiring' => $vendorDir . '/php-di/php-di/src/Definition/Source/Autowiring.php', + 'DI\\Definition\\Source\\DefinitionArray' => $vendorDir . '/php-di/php-di/src/Definition/Source/DefinitionArray.php', + 'DI\\Definition\\Source\\DefinitionFile' => $vendorDir . '/php-di/php-di/src/Definition/Source/DefinitionFile.php', + 'DI\\Definition\\Source\\DefinitionNormalizer' => $vendorDir . '/php-di/php-di/src/Definition/Source/DefinitionNormalizer.php', + 'DI\\Definition\\Source\\DefinitionSource' => $vendorDir . '/php-di/php-di/src/Definition/Source/DefinitionSource.php', + 'DI\\Definition\\Source\\MutableDefinitionSource' => $vendorDir . '/php-di/php-di/src/Definition/Source/MutableDefinitionSource.php', + 'DI\\Definition\\Source\\NoAutowiring' => $vendorDir . '/php-di/php-di/src/Definition/Source/NoAutowiring.php', + 'DI\\Definition\\Source\\ReflectionBasedAutowiring' => $vendorDir . '/php-di/php-di/src/Definition/Source/ReflectionBasedAutowiring.php', + 'DI\\Definition\\Source\\SourceCache' => $vendorDir . '/php-di/php-di/src/Definition/Source/SourceCache.php', + 'DI\\Definition\\Source\\SourceChain' => $vendorDir . '/php-di/php-di/src/Definition/Source/SourceChain.php', + 'DI\\Definition\\StringDefinition' => $vendorDir . '/php-di/php-di/src/Definition/StringDefinition.php', + 'DI\\Definition\\ValueDefinition' => $vendorDir . '/php-di/php-di/src/Definition/ValueDefinition.php', + 'DI\\DependencyException' => $vendorDir . '/php-di/php-di/src/DependencyException.php', + 'DI\\FactoryInterface' => $vendorDir . '/php-di/php-di/src/FactoryInterface.php', + 'DI\\Factory\\RequestedEntry' => $vendorDir . '/php-di/php-di/src/Factory/RequestedEntry.php', + 'DI\\Invoker\\DefinitionParameterResolver' => $vendorDir . '/php-di/php-di/src/Invoker/DefinitionParameterResolver.php', + 'DI\\Invoker\\FactoryParameterResolver' => $vendorDir . '/php-di/php-di/src/Invoker/FactoryParameterResolver.php', + 'DI\\NotFoundException' => $vendorDir . '/php-di/php-di/src/NotFoundException.php', + 'DI\\Proxy\\ProxyFactory' => $vendorDir . '/php-di/php-di/src/Proxy/ProxyFactory.php', + 'Dotenv\\Dotenv' => $vendorDir . '/vlucas/phpdotenv/src/Dotenv.php', + 'Dotenv\\Exception\\ExceptionInterface' => $vendorDir . '/vlucas/phpdotenv/src/Exception/ExceptionInterface.php', + 'Dotenv\\Exception\\InvalidFileException' => $vendorDir . '/vlucas/phpdotenv/src/Exception/InvalidFileException.php', + 'Dotenv\\Exception\\InvalidPathException' => $vendorDir . '/vlucas/phpdotenv/src/Exception/InvalidPathException.php', + 'Dotenv\\Exception\\ValidationException' => $vendorDir . '/vlucas/phpdotenv/src/Exception/ValidationException.php', + 'Dotenv\\Loader\\Lines' => $vendorDir . '/vlucas/phpdotenv/src/Loader/Lines.php', + 'Dotenv\\Loader\\Loader' => $vendorDir . '/vlucas/phpdotenv/src/Loader/Loader.php', + 'Dotenv\\Loader\\LoaderInterface' => $vendorDir . '/vlucas/phpdotenv/src/Loader/LoaderInterface.php', + 'Dotenv\\Loader\\Parser' => $vendorDir . '/vlucas/phpdotenv/src/Loader/Parser.php', + 'Dotenv\\Loader\\Value' => $vendorDir . '/vlucas/phpdotenv/src/Loader/Value.php', + 'Dotenv\\Regex\\Regex' => $vendorDir . '/vlucas/phpdotenv/src/Regex/Regex.php', + 'Dotenv\\Repository\\AbstractRepository' => $vendorDir . '/vlucas/phpdotenv/src/Repository/AbstractRepository.php', + 'Dotenv\\Repository\\AdapterRepository' => $vendorDir . '/vlucas/phpdotenv/src/Repository/AdapterRepository.php', + 'Dotenv\\Repository\\Adapter\\ApacheAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/ApacheAdapter.php', + 'Dotenv\\Repository\\Adapter\\ArrayAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/ArrayAdapter.php', + 'Dotenv\\Repository\\Adapter\\AvailabilityInterface' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/AvailabilityInterface.php', + 'Dotenv\\Repository\\Adapter\\EnvConstAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/EnvConstAdapter.php', + 'Dotenv\\Repository\\Adapter\\PutenvAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/PutenvAdapter.php', + 'Dotenv\\Repository\\Adapter\\ReaderInterface' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/ReaderInterface.php', + 'Dotenv\\Repository\\Adapter\\ServerConstAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/ServerConstAdapter.php', + 'Dotenv\\Repository\\Adapter\\WriterInterface' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/WriterInterface.php', + 'Dotenv\\Repository\\RepositoryBuilder' => $vendorDir . '/vlucas/phpdotenv/src/Repository/RepositoryBuilder.php', + 'Dotenv\\Repository\\RepositoryInterface' => $vendorDir . '/vlucas/phpdotenv/src/Repository/RepositoryInterface.php', + 'Dotenv\\Result\\Error' => $vendorDir . '/vlucas/phpdotenv/src/Result/Error.php', + 'Dotenv\\Result\\Result' => $vendorDir . '/vlucas/phpdotenv/src/Result/Result.php', + 'Dotenv\\Result\\Success' => $vendorDir . '/vlucas/phpdotenv/src/Result/Success.php', + 'Dotenv\\Store\\FileStore' => $vendorDir . '/vlucas/phpdotenv/src/Store/FileStore.php', + 'Dotenv\\Store\\File\\Paths' => $vendorDir . '/vlucas/phpdotenv/src/Store/File/Paths.php', + 'Dotenv\\Store\\File\\Reader' => $vendorDir . '/vlucas/phpdotenv/src/Store/File/Reader.php', + 'Dotenv\\Store\\StoreBuilder' => $vendorDir . '/vlucas/phpdotenv/src/Store/StoreBuilder.php', + 'Dotenv\\Store\\StoreInterface' => $vendorDir . '/vlucas/phpdotenv/src/Store/StoreInterface.php', + 'Dotenv\\Validator' => $vendorDir . '/vlucas/phpdotenv/src/Validator.php', + 'FastRoute\\BadRouteException' => $vendorDir . '/nikic/fast-route/src/BadRouteException.php', + 'FastRoute\\DataGenerator' => $vendorDir . '/nikic/fast-route/src/DataGenerator.php', + 'FastRoute\\DataGenerator\\CharCountBased' => $vendorDir . '/nikic/fast-route/src/DataGenerator/CharCountBased.php', + 'FastRoute\\DataGenerator\\GroupCountBased' => $vendorDir . '/nikic/fast-route/src/DataGenerator/GroupCountBased.php', + 'FastRoute\\DataGenerator\\GroupPosBased' => $vendorDir . '/nikic/fast-route/src/DataGenerator/GroupPosBased.php', + 'FastRoute\\DataGenerator\\MarkBased' => $vendorDir . '/nikic/fast-route/src/DataGenerator/MarkBased.php', + 'FastRoute\\DataGenerator\\RegexBasedAbstract' => $vendorDir . '/nikic/fast-route/src/DataGenerator/RegexBasedAbstract.php', + 'FastRoute\\Dispatcher' => $vendorDir . '/nikic/fast-route/src/Dispatcher.php', + 'FastRoute\\Dispatcher\\CharCountBased' => $vendorDir . '/nikic/fast-route/src/Dispatcher/CharCountBased.php', + 'FastRoute\\Dispatcher\\GroupCountBased' => $vendorDir . '/nikic/fast-route/src/Dispatcher/GroupCountBased.php', + 'FastRoute\\Dispatcher\\GroupPosBased' => $vendorDir . '/nikic/fast-route/src/Dispatcher/GroupPosBased.php', + 'FastRoute\\Dispatcher\\MarkBased' => $vendorDir . '/nikic/fast-route/src/Dispatcher/MarkBased.php', + 'FastRoute\\Dispatcher\\RegexBasedAbstract' => $vendorDir . '/nikic/fast-route/src/Dispatcher/RegexBasedAbstract.php', + 'FastRoute\\Route' => $vendorDir . '/nikic/fast-route/src/Route.php', + 'FastRoute\\RouteCollector' => $vendorDir . '/nikic/fast-route/src/RouteCollector.php', + 'FastRoute\\RouteParser' => $vendorDir . '/nikic/fast-route/src/RouteParser.php', + 'FastRoute\\RouteParser\\Std' => $vendorDir . '/nikic/fast-route/src/RouteParser/Std.php', + 'Fig\\Http\\Message\\RequestMethodInterface' => $vendorDir . '/fig/http-message-util/src/RequestMethodInterface.php', + 'Fig\\Http\\Message\\StatusCodeInterface' => $vendorDir . '/fig/http-message-util/src/StatusCodeInterface.php', + 'Invoker\\CallableResolver' => $vendorDir . '/php-di/invoker/src/CallableResolver.php', + 'Invoker\\Exception\\InvocationException' => $vendorDir . '/php-di/invoker/src/Exception/InvocationException.php', + 'Invoker\\Exception\\NotCallableException' => $vendorDir . '/php-di/invoker/src/Exception/NotCallableException.php', + 'Invoker\\Exception\\NotEnoughParametersException' => $vendorDir . '/php-di/invoker/src/Exception/NotEnoughParametersException.php', + 'Invoker\\Invoker' => $vendorDir . '/php-di/invoker/src/Invoker.php', + 'Invoker\\InvokerInterface' => $vendorDir . '/php-di/invoker/src/InvokerInterface.php', + 'Invoker\\ParameterResolver\\AssociativeArrayResolver' => $vendorDir . '/php-di/invoker/src/ParameterResolver/AssociativeArrayResolver.php', + 'Invoker\\ParameterResolver\\Container\\ParameterNameContainerResolver' => $vendorDir . '/php-di/invoker/src/ParameterResolver/Container/ParameterNameContainerResolver.php', + 'Invoker\\ParameterResolver\\Container\\TypeHintContainerResolver' => $vendorDir . '/php-di/invoker/src/ParameterResolver/Container/TypeHintContainerResolver.php', + 'Invoker\\ParameterResolver\\DefaultValueResolver' => $vendorDir . '/php-di/invoker/src/ParameterResolver/DefaultValueResolver.php', + 'Invoker\\ParameterResolver\\NumericArrayResolver' => $vendorDir . '/php-di/invoker/src/ParameterResolver/NumericArrayResolver.php', + 'Invoker\\ParameterResolver\\ParameterResolver' => $vendorDir . '/php-di/invoker/src/ParameterResolver/ParameterResolver.php', + 'Invoker\\ParameterResolver\\ResolverChain' => $vendorDir . '/php-di/invoker/src/ParameterResolver/ResolverChain.php', + 'Invoker\\ParameterResolver\\TypeHintResolver' => $vendorDir . '/php-di/invoker/src/ParameterResolver/TypeHintResolver.php', + 'Invoker\\Reflection\\CallableReflection' => $vendorDir . '/php-di/invoker/src/Reflection/CallableReflection.php', + 'Micheh\\Cache\\CacheUtil' => $vendorDir . '/micheh/psr7-cache/src/CacheUtil.php', + 'Micheh\\Cache\\Header\\CacheControl' => $vendorDir . '/micheh/psr7-cache/src/Header/CacheControl.php', + 'Micheh\\Cache\\Header\\RequestCacheControl' => $vendorDir . '/micheh/psr7-cache/src/Header/RequestCacheControl.php', + 'Micheh\\Cache\\Header\\ResponseCacheControl' => $vendorDir . '/micheh/psr7-cache/src/Header/ResponseCacheControl.php', + 'Middlewares\\Cache' => $vendorDir . '/middlewares/cache/src/Cache.php', + 'Middlewares\\CachePrevention' => $vendorDir . '/middlewares/cache/src/CachePrevention.php', + 'Middlewares\\Expires' => $vendorDir . '/middlewares/cache/src/Expires.php', + 'Middlewares\\Utils\\CallableHandler' => $vendorDir . '/middlewares/utils/src/CallableHandler.php', + 'Middlewares\\Utils\\Dispatcher' => $vendorDir . '/middlewares/utils/src/Dispatcher.php', + 'Middlewares\\Utils\\Factory' => $vendorDir . '/middlewares/utils/src/Factory.php', + 'Middlewares\\Utils\\FactoryDiscovery' => $vendorDir . '/middlewares/utils/src/FactoryDiscovery.php', + 'Middlewares\\Utils\\FactoryInterface' => $vendorDir . '/middlewares/utils/src/FactoryInterface.php', + 'Middlewares\\Utils\\HttpErrorException' => $vendorDir . '/middlewares/utils/src/HttpErrorException.php', + 'Middlewares\\Utils\\RequestHandler' => $vendorDir . '/middlewares/utils/src/RequestHandler.php', + 'Middlewares\\Utils\\RequestHandlerContainer' => $vendorDir . '/middlewares/utils/src/RequestHandlerContainer.php', + 'PHLAK\\Utilities\\Glob' => $vendorDir . '/phlak/glob/src/Glob.php', + 'Parsedown' => $vendorDir . '/erusev/parsedown/Parsedown.php', + 'ParsedownExtra' => $vendorDir . '/erusev/parsedown-extra/ParsedownExtra.php', + 'ParsedownExtraTest' => $vendorDir . '/erusev/parsedown-extra/test/ParsedownExtraTest.php', + 'PhpDocReader\\AnnotationException' => $vendorDir . '/php-di/phpdoc-reader/src/PhpDocReader/AnnotationException.php', + 'PhpDocReader\\PhpDocReader' => $vendorDir . '/php-di/phpdoc-reader/src/PhpDocReader/PhpDocReader.php', + 'PhpDocReader\\PhpParser\\TokenParser' => $vendorDir . '/php-di/phpdoc-reader/src/PhpDocReader/PhpParser/TokenParser.php', + 'PhpDocReader\\PhpParser\\UseStatementParser' => $vendorDir . '/php-di/phpdoc-reader/src/PhpDocReader/PhpParser/UseStatementParser.php', + 'PhpOption\\LazyOption' => $vendorDir . '/phpoption/phpoption/src/PhpOption/LazyOption.php', + 'PhpOption\\None' => $vendorDir . '/phpoption/phpoption/src/PhpOption/None.php', + 'PhpOption\\Option' => $vendorDir . '/phpoption/phpoption/src/PhpOption/Option.php', + 'PhpOption\\Some' => $vendorDir . '/phpoption/phpoption/src/PhpOption/Some.php', + 'PhpParser\\Builder' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder.php', + 'PhpParser\\BuilderFactory' => $vendorDir . '/nikic/php-parser/lib/PhpParser/BuilderFactory.php', + 'PhpParser\\BuilderHelpers' => $vendorDir . '/nikic/php-parser/lib/PhpParser/BuilderHelpers.php', + 'PhpParser\\Builder\\Class_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Class_.php', + 'PhpParser\\Builder\\Declaration' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Declaration.php', + 'PhpParser\\Builder\\FunctionLike' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php', + 'PhpParser\\Builder\\Function_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Function_.php', + 'PhpParser\\Builder\\Interface_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Interface_.php', + 'PhpParser\\Builder\\Method' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Method.php', + 'PhpParser\\Builder\\Namespace_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php', + 'PhpParser\\Builder\\Param' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Param.php', + 'PhpParser\\Builder\\Property' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Property.php', + 'PhpParser\\Builder\\TraitUse' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php', + 'PhpParser\\Builder\\TraitUseAdaptation' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php', + 'PhpParser\\Builder\\Trait_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Trait_.php', + 'PhpParser\\Builder\\Use_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Use_.php', + 'PhpParser\\Comment' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Comment.php', + 'PhpParser\\Comment\\Doc' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Comment/Doc.php', + 'PhpParser\\ConstExprEvaluationException' => $vendorDir . '/nikic/php-parser/lib/PhpParser/ConstExprEvaluationException.php', + 'PhpParser\\ConstExprEvaluator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/ConstExprEvaluator.php', + 'PhpParser\\Error' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Error.php', + 'PhpParser\\ErrorHandler' => $vendorDir . '/nikic/php-parser/lib/PhpParser/ErrorHandler.php', + 'PhpParser\\ErrorHandler\\Collecting' => $vendorDir . '/nikic/php-parser/lib/PhpParser/ErrorHandler/Collecting.php', + 'PhpParser\\ErrorHandler\\Throwing' => $vendorDir . '/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php', + 'PhpParser\\Internal\\DiffElem' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Internal/DiffElem.php', + 'PhpParser\\Internal\\Differ' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Internal/Differ.php', + 'PhpParser\\Internal\\PrintableNewAnonClassNode' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php', + 'PhpParser\\Internal\\TokenStream' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php', + 'PhpParser\\JsonDecoder' => $vendorDir . '/nikic/php-parser/lib/PhpParser/JsonDecoder.php', + 'PhpParser\\Lexer' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer.php', + 'PhpParser\\Lexer\\Emulative' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php', + 'PhpParser\\Lexer\\TokenEmulator\\CoaleseEqualTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php', + 'PhpParser\\Lexer\\TokenEmulator\\FnTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php', + 'PhpParser\\Lexer\\TokenEmulator\\NumericLiteralSeparatorEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.php', + 'PhpParser\\Lexer\\TokenEmulator\\TokenEmulatorInterface' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulatorInterface.php', + 'PhpParser\\NameContext' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NameContext.php', + 'PhpParser\\Node' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node.php', + 'PhpParser\\NodeAbstract' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeAbstract.php', + 'PhpParser\\NodeDumper' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeDumper.php', + 'PhpParser\\NodeFinder' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeFinder.php', + 'PhpParser\\NodeTraverser' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeTraverser.php', + 'PhpParser\\NodeTraverserInterface' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php', + 'PhpParser\\NodeVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor.php', + 'PhpParser\\NodeVisitorAbstract' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php', + 'PhpParser\\NodeVisitor\\CloningVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php', + 'PhpParser\\NodeVisitor\\FindingVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php', + 'PhpParser\\NodeVisitor\\FirstFindingVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php', + 'PhpParser\\NodeVisitor\\NameResolver' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php', + 'PhpParser\\Node\\Arg' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Arg.php', + 'PhpParser\\Node\\Const_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Const_.php', + 'PhpParser\\Node\\Expr' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr.php', + 'PhpParser\\Node\\Expr\\ArrayDimFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php', + 'PhpParser\\Node\\Expr\\ArrayItem' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php', + 'PhpParser\\Node\\Expr\\Array_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php', + 'PhpParser\\Node\\Expr\\ArrowFunction' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php', + 'PhpParser\\Node\\Expr\\Assign' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php', + 'PhpParser\\Node\\Expr\\AssignOp' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php', + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseAnd' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php', + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseOr' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.php', + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseXor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.php', + 'PhpParser\\Node\\Expr\\AssignOp\\Coalesce' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Coalesce.php', + 'PhpParser\\Node\\Expr\\AssignOp\\Concat' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Concat.php', + 'PhpParser\\Node\\Expr\\AssignOp\\Div' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Div.php', + 'PhpParser\\Node\\Expr\\AssignOp\\Minus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Minus.php', + 'PhpParser\\Node\\Expr\\AssignOp\\Mod' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mod.php', + 'PhpParser\\Node\\Expr\\AssignOp\\Mul' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mul.php', + 'PhpParser\\Node\\Expr\\AssignOp\\Plus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Plus.php', + 'PhpParser\\Node\\Expr\\AssignOp\\Pow' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Pow.php', + 'PhpParser\\Node\\Expr\\AssignOp\\ShiftLeft' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.php', + 'PhpParser\\Node\\Expr\\AssignOp\\ShiftRight' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.php', + 'PhpParser\\Node\\Expr\\AssignRef' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignRef.php', + 'PhpParser\\Node\\Expr\\BinaryOp' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseAnd' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseOr' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseXor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseXor.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanAnd' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanOr' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Coalesce' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Coalesce.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Concat' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Concat.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Div' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Div.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Equal' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Equal.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Greater' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Greater.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\GreaterOrEqual' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Identical' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalAnd' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalOr' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalXor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Minus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Minus.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Mod' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mod.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Mul' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mul.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\NotEqual' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\NotIdentical' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Plus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Plus.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Pow' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pow.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftLeft' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftRight' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Smaller' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\SmallerOrEqual' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Spaceship' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.php', + 'PhpParser\\Node\\Expr\\BitwiseNot' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php', + 'PhpParser\\Node\\Expr\\BooleanNot' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php', + 'PhpParser\\Node\\Expr\\Cast' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php', + 'PhpParser\\Node\\Expr\\Cast\\Array_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php', + 'PhpParser\\Node\\Expr\\Cast\\Bool_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Bool_.php', + 'PhpParser\\Node\\Expr\\Cast\\Double' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Double.php', + 'PhpParser\\Node\\Expr\\Cast\\Int_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Int_.php', + 'PhpParser\\Node\\Expr\\Cast\\Object_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Object_.php', + 'PhpParser\\Node\\Expr\\Cast\\String_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/String_.php', + 'PhpParser\\Node\\Expr\\Cast\\Unset_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Unset_.php', + 'PhpParser\\Node\\Expr\\ClassConstFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ClassConstFetch.php', + 'PhpParser\\Node\\Expr\\Clone_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php', + 'PhpParser\\Node\\Expr\\Closure' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php', + 'PhpParser\\Node\\Expr\\ClosureUse' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php', + 'PhpParser\\Node\\Expr\\ConstFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php', + 'PhpParser\\Node\\Expr\\Empty_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php', + 'PhpParser\\Node\\Expr\\Error' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php', + 'PhpParser\\Node\\Expr\\ErrorSuppress' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php', + 'PhpParser\\Node\\Expr\\Eval_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php', + 'PhpParser\\Node\\Expr\\Exit_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php', + 'PhpParser\\Node\\Expr\\FuncCall' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php', + 'PhpParser\\Node\\Expr\\Include_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php', + 'PhpParser\\Node\\Expr\\Instanceof_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php', + 'PhpParser\\Node\\Expr\\Isset_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php', + 'PhpParser\\Node\\Expr\\List_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php', + 'PhpParser\\Node\\Expr\\MethodCall' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php', + 'PhpParser\\Node\\Expr\\New_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php', + 'PhpParser\\Node\\Expr\\PostDec' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php', + 'PhpParser\\Node\\Expr\\PostInc' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php', + 'PhpParser\\Node\\Expr\\PreDec' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php', + 'PhpParser\\Node\\Expr\\PreInc' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php', + 'PhpParser\\Node\\Expr\\Print_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php', + 'PhpParser\\Node\\Expr\\PropertyFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php', + 'PhpParser\\Node\\Expr\\ShellExec' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php', + 'PhpParser\\Node\\Expr\\StaticCall' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php', + 'PhpParser\\Node\\Expr\\StaticPropertyFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php', + 'PhpParser\\Node\\Expr\\Ternary' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php', + 'PhpParser\\Node\\Expr\\UnaryMinus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php', + 'PhpParser\\Node\\Expr\\UnaryPlus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php', + 'PhpParser\\Node\\Expr\\Variable' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php', + 'PhpParser\\Node\\Expr\\YieldFrom' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php', + 'PhpParser\\Node\\Expr\\Yield_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php', + 'PhpParser\\Node\\FunctionLike' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php', + 'PhpParser\\Node\\Identifier' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Identifier.php', + 'PhpParser\\Node\\Name' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Name.php', + 'PhpParser\\Node\\Name\\FullyQualified' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php', + 'PhpParser\\Node\\Name\\Relative' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php', + 'PhpParser\\Node\\NullableType' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/NullableType.php', + 'PhpParser\\Node\\Param' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Param.php', + 'PhpParser\\Node\\Scalar' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar.php', + 'PhpParser\\Node\\Scalar\\DNumber' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php', + 'PhpParser\\Node\\Scalar\\Encapsed' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php', + 'PhpParser\\Node\\Scalar\\EncapsedStringPart' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/EncapsedStringPart.php', + 'PhpParser\\Node\\Scalar\\LNumber' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php', + 'PhpParser\\Node\\Scalar\\MagicConst' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php', + 'PhpParser\\Node\\Scalar\\MagicConst\\Class_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php', + 'PhpParser\\Node\\Scalar\\MagicConst\\Dir' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Dir.php', + 'PhpParser\\Node\\Scalar\\MagicConst\\File' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/File.php', + 'PhpParser\\Node\\Scalar\\MagicConst\\Function_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Function_.php', + 'PhpParser\\Node\\Scalar\\MagicConst\\Line' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Line.php', + 'PhpParser\\Node\\Scalar\\MagicConst\\Method' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Method.php', + 'PhpParser\\Node\\Scalar\\MagicConst\\Namespace_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.php', + 'PhpParser\\Node\\Scalar\\MagicConst\\Trait_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Trait_.php', + 'PhpParser\\Node\\Scalar\\String_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php', + 'PhpParser\\Node\\Stmt' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt.php', + 'PhpParser\\Node\\Stmt\\Break_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.php', + 'PhpParser\\Node\\Stmt\\Case_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php', + 'PhpParser\\Node\\Stmt\\Catch_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php', + 'PhpParser\\Node\\Stmt\\ClassConst' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php', + 'PhpParser\\Node\\Stmt\\ClassLike' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php', + 'PhpParser\\Node\\Stmt\\ClassMethod' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php', + 'PhpParser\\Node\\Stmt\\Class_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php', + 'PhpParser\\Node\\Stmt\\Const_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php', + 'PhpParser\\Node\\Stmt\\Continue_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php', + 'PhpParser\\Node\\Stmt\\DeclareDeclare' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php', + 'PhpParser\\Node\\Stmt\\Declare_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php', + 'PhpParser\\Node\\Stmt\\Do_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php', + 'PhpParser\\Node\\Stmt\\Echo_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php', + 'PhpParser\\Node\\Stmt\\ElseIf_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php', + 'PhpParser\\Node\\Stmt\\Else_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php', + 'PhpParser\\Node\\Stmt\\Expression' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php', + 'PhpParser\\Node\\Stmt\\Finally_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php', + 'PhpParser\\Node\\Stmt\\For_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php', + 'PhpParser\\Node\\Stmt\\Foreach_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php', + 'PhpParser\\Node\\Stmt\\Function_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php', + 'PhpParser\\Node\\Stmt\\Global_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php', + 'PhpParser\\Node\\Stmt\\Goto_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php', + 'PhpParser\\Node\\Stmt\\GroupUse' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php', + 'PhpParser\\Node\\Stmt\\HaltCompiler' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php', + 'PhpParser\\Node\\Stmt\\If_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php', + 'PhpParser\\Node\\Stmt\\InlineHTML' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php', + 'PhpParser\\Node\\Stmt\\Interface_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php', + 'PhpParser\\Node\\Stmt\\Label' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php', + 'PhpParser\\Node\\Stmt\\Namespace_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php', + 'PhpParser\\Node\\Stmt\\Nop' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php', + 'PhpParser\\Node\\Stmt\\Property' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php', + 'PhpParser\\Node\\Stmt\\PropertyProperty' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php', + 'PhpParser\\Node\\Stmt\\Return_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.php', + 'PhpParser\\Node\\Stmt\\StaticVar' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php', + 'PhpParser\\Node\\Stmt\\Static_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php', + 'PhpParser\\Node\\Stmt\\Switch_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php', + 'PhpParser\\Node\\Stmt\\Throw_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Throw_.php', + 'PhpParser\\Node\\Stmt\\TraitUse' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php', + 'PhpParser\\Node\\Stmt\\TraitUseAdaptation' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php', + 'PhpParser\\Node\\Stmt\\TraitUseAdaptation\\Alias' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php', + 'PhpParser\\Node\\Stmt\\TraitUseAdaptation\\Precedence' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php', + 'PhpParser\\Node\\Stmt\\Trait_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php', + 'PhpParser\\Node\\Stmt\\TryCatch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php', + 'PhpParser\\Node\\Stmt\\Unset_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php', + 'PhpParser\\Node\\Stmt\\UseUse' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php', + 'PhpParser\\Node\\Stmt\\Use_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php', + 'PhpParser\\Node\\Stmt\\While_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php', + 'PhpParser\\Node\\UnionType' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/UnionType.php', + 'PhpParser\\Node\\VarLikeIdentifier' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php', + 'PhpParser\\Parser' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Parser.php', + 'PhpParser\\ParserAbstract' => $vendorDir . '/nikic/php-parser/lib/PhpParser/ParserAbstract.php', + 'PhpParser\\ParserFactory' => $vendorDir . '/nikic/php-parser/lib/PhpParser/ParserFactory.php', + 'PhpParser\\Parser\\Multiple' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Parser/Multiple.php', + 'PhpParser\\Parser\\Php5' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Parser/Php5.php', + 'PhpParser\\Parser\\Php7' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Parser/Php7.php', + 'PhpParser\\Parser\\Tokens' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Parser/Tokens.php', + 'PhpParser\\PrettyPrinterAbstract' => $vendorDir . '/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php', + 'PhpParser\\PrettyPrinter\\Standard' => $vendorDir . '/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php', + 'Psr\\Cache\\CacheException' => $vendorDir . '/psr/cache/src/CacheException.php', + 'Psr\\Cache\\CacheItemInterface' => $vendorDir . '/psr/cache/src/CacheItemInterface.php', + 'Psr\\Cache\\CacheItemPoolInterface' => $vendorDir . '/psr/cache/src/CacheItemPoolInterface.php', + 'Psr\\Cache\\InvalidArgumentException' => $vendorDir . '/psr/cache/src/InvalidArgumentException.php', + 'Psr\\Container\\ContainerExceptionInterface' => $vendorDir . '/psr/container/src/ContainerExceptionInterface.php', + 'Psr\\Container\\ContainerInterface' => $vendorDir . '/psr/container/src/ContainerInterface.php', + 'Psr\\Container\\NotFoundExceptionInterface' => $vendorDir . '/psr/container/src/NotFoundExceptionInterface.php', + 'Psr\\Http\\Message\\MessageInterface' => $vendorDir . '/psr/http-message/src/MessageInterface.php', + 'Psr\\Http\\Message\\RequestFactoryInterface' => $vendorDir . '/psr/http-factory/src/RequestFactoryInterface.php', + 'Psr\\Http\\Message\\RequestInterface' => $vendorDir . '/psr/http-message/src/RequestInterface.php', + 'Psr\\Http\\Message\\ResponseFactoryInterface' => $vendorDir . '/psr/http-factory/src/ResponseFactoryInterface.php', + 'Psr\\Http\\Message\\ResponseInterface' => $vendorDir . '/psr/http-message/src/ResponseInterface.php', + 'Psr\\Http\\Message\\ServerRequestFactoryInterface' => $vendorDir . '/psr/http-factory/src/ServerRequestFactoryInterface.php', + 'Psr\\Http\\Message\\ServerRequestInterface' => $vendorDir . '/psr/http-message/src/ServerRequestInterface.php', + 'Psr\\Http\\Message\\StreamFactoryInterface' => $vendorDir . '/psr/http-factory/src/StreamFactoryInterface.php', + 'Psr\\Http\\Message\\StreamInterface' => $vendorDir . '/psr/http-message/src/StreamInterface.php', + 'Psr\\Http\\Message\\UploadedFileFactoryInterface' => $vendorDir . '/psr/http-factory/src/UploadedFileFactoryInterface.php', + 'Psr\\Http\\Message\\UploadedFileInterface' => $vendorDir . '/psr/http-message/src/UploadedFileInterface.php', + 'Psr\\Http\\Message\\UriFactoryInterface' => $vendorDir . '/psr/http-factory/src/UriFactoryInterface.php', + 'Psr\\Http\\Message\\UriInterface' => $vendorDir . '/psr/http-message/src/UriInterface.php', + 'Psr\\Http\\Server\\MiddlewareInterface' => $vendorDir . '/psr/http-server-middleware/src/MiddlewareInterface.php', + 'Psr\\Http\\Server\\RequestHandlerInterface' => $vendorDir . '/psr/http-server-handler/src/RequestHandlerInterface.php', + 'Psr\\Log\\AbstractLogger' => $vendorDir . '/psr/log/Psr/Log/AbstractLogger.php', + 'Psr\\Log\\InvalidArgumentException' => $vendorDir . '/psr/log/Psr/Log/InvalidArgumentException.php', + 'Psr\\Log\\LogLevel' => $vendorDir . '/psr/log/Psr/Log/LogLevel.php', + 'Psr\\Log\\LoggerAwareInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerAwareInterface.php', + 'Psr\\Log\\LoggerAwareTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerAwareTrait.php', + 'Psr\\Log\\LoggerInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerInterface.php', + 'Psr\\Log\\LoggerTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerTrait.php', + 'Psr\\Log\\NullLogger' => $vendorDir . '/psr/log/Psr/Log/NullLogger.php', + 'Psr\\Log\\Test\\DummyTest' => $vendorDir . '/psr/log/Psr/Log/Test/DummyTest.php', + 'Psr\\Log\\Test\\LoggerInterfaceTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php', + 'Psr\\Log\\Test\\TestLogger' => $vendorDir . '/psr/log/Psr/Log/Test/TestLogger.php', + 'Slim\\App' => $vendorDir . '/slim/slim/Slim/App.php', + 'Slim\\CallableResolver' => $vendorDir . '/slim/slim/Slim/CallableResolver.php', + 'Slim\\Error\\AbstractErrorRenderer' => $vendorDir . '/slim/slim/Slim/Error/AbstractErrorRenderer.php', + 'Slim\\Error\\Renderers\\HtmlErrorRenderer' => $vendorDir . '/slim/slim/Slim/Error/Renderers/HtmlErrorRenderer.php', + 'Slim\\Error\\Renderers\\JsonErrorRenderer' => $vendorDir . '/slim/slim/Slim/Error/Renderers/JsonErrorRenderer.php', + 'Slim\\Error\\Renderers\\PlainTextErrorRenderer' => $vendorDir . '/slim/slim/Slim/Error/Renderers/PlainTextErrorRenderer.php', + 'Slim\\Error\\Renderers\\XmlErrorRenderer' => $vendorDir . '/slim/slim/Slim/Error/Renderers/XmlErrorRenderer.php', + 'Slim\\Exception\\HttpBadRequestException' => $vendorDir . '/slim/slim/Slim/Exception/HttpBadRequestException.php', + 'Slim\\Exception\\HttpException' => $vendorDir . '/slim/slim/Slim/Exception/HttpException.php', + 'Slim\\Exception\\HttpForbiddenException' => $vendorDir . '/slim/slim/Slim/Exception/HttpForbiddenException.php', + 'Slim\\Exception\\HttpInternalServerErrorException' => $vendorDir . '/slim/slim/Slim/Exception/HttpInternalServerErrorException.php', + 'Slim\\Exception\\HttpMethodNotAllowedException' => $vendorDir . '/slim/slim/Slim/Exception/HttpMethodNotAllowedException.php', + 'Slim\\Exception\\HttpNotFoundException' => $vendorDir . '/slim/slim/Slim/Exception/HttpNotFoundException.php', + 'Slim\\Exception\\HttpNotImplementedException' => $vendorDir . '/slim/slim/Slim/Exception/HttpNotImplementedException.php', + 'Slim\\Exception\\HttpSpecializedException' => $vendorDir . '/slim/slim/Slim/Exception/HttpSpecializedException.php', + 'Slim\\Exception\\HttpUnauthorizedException' => $vendorDir . '/slim/slim/Slim/Exception/HttpUnauthorizedException.php', + 'Slim\\Factory\\AppFactory' => $vendorDir . '/slim/slim/Slim/Factory/AppFactory.php', + 'Slim\\Factory\\Psr17\\GuzzlePsr17Factory' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/GuzzlePsr17Factory.php', + 'Slim\\Factory\\Psr17\\LaminasDiactorosPsr17Factory' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/LaminasDiactorosPsr17Factory.php', + 'Slim\\Factory\\Psr17\\NyholmPsr17Factory' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/NyholmPsr17Factory.php', + 'Slim\\Factory\\Psr17\\Psr17Factory' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/Psr17Factory.php', + 'Slim\\Factory\\Psr17\\Psr17FactoryProvider' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/Psr17FactoryProvider.php', + 'Slim\\Factory\\Psr17\\ServerRequestCreator' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/ServerRequestCreator.php', + 'Slim\\Factory\\Psr17\\SlimHttpPsr17Factory' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/SlimHttpPsr17Factory.php', + 'Slim\\Factory\\Psr17\\SlimHttpServerRequestCreator' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/SlimHttpServerRequestCreator.php', + 'Slim\\Factory\\Psr17\\SlimPsr17Factory' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/SlimPsr17Factory.php', + 'Slim\\Factory\\Psr17\\ZendDiactorosPsr17Factory' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/ZendDiactorosPsr17Factory.php', + 'Slim\\Factory\\ServerRequestCreatorFactory' => $vendorDir . '/slim/slim/Slim/Factory/ServerRequestCreatorFactory.php', + 'Slim\\Handlers\\ErrorHandler' => $vendorDir . '/slim/slim/Slim/Handlers/ErrorHandler.php', + 'Slim\\Handlers\\Strategies\\RequestHandler' => $vendorDir . '/slim/slim/Slim/Handlers/Strategies/RequestHandler.php', + 'Slim\\Handlers\\Strategies\\RequestResponse' => $vendorDir . '/slim/slim/Slim/Handlers/Strategies/RequestResponse.php', + 'Slim\\Handlers\\Strategies\\RequestResponseArgs' => $vendorDir . '/slim/slim/Slim/Handlers/Strategies/RequestResponseArgs.php', + 'Slim\\Interfaces\\AdvancedCallableResolverInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/AdvancedCallableResolverInterface.php', + 'Slim\\Interfaces\\CallableResolverInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/CallableResolverInterface.php', + 'Slim\\Interfaces\\DispatcherInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/DispatcherInterface.php', + 'Slim\\Interfaces\\ErrorHandlerInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/ErrorHandlerInterface.php', + 'Slim\\Interfaces\\ErrorRendererInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/ErrorRendererInterface.php', + 'Slim\\Interfaces\\InvocationStrategyInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/InvocationStrategyInterface.php', + 'Slim\\Interfaces\\MiddlewareDispatcherInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/MiddlewareDispatcherInterface.php', + 'Slim\\Interfaces\\Psr17FactoryInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/Psr17FactoryInterface.php', + 'Slim\\Interfaces\\Psr17FactoryProviderInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/Psr17FactoryProviderInterface.php', + 'Slim\\Interfaces\\RequestHandlerInvocationStrategyInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RequestHandlerInvocationStrategyInterface.php', + 'Slim\\Interfaces\\RouteCollectorInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RouteCollectorInterface.php', + 'Slim\\Interfaces\\RouteCollectorProxyInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RouteCollectorProxyInterface.php', + 'Slim\\Interfaces\\RouteGroupInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RouteGroupInterface.php', + 'Slim\\Interfaces\\RouteInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RouteInterface.php', + 'Slim\\Interfaces\\RouteParserInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RouteParserInterface.php', + 'Slim\\Interfaces\\RouteResolverInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RouteResolverInterface.php', + 'Slim\\Interfaces\\ServerRequestCreatorInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/ServerRequestCreatorInterface.php', + 'Slim\\Logger' => $vendorDir . '/slim/slim/Slim/Logger.php', + 'Slim\\MiddlewareDispatcher' => $vendorDir . '/slim/slim/Slim/MiddlewareDispatcher.php', + 'Slim\\Middleware\\BodyParsingMiddleware' => $vendorDir . '/slim/slim/Slim/Middleware/BodyParsingMiddleware.php', + 'Slim\\Middleware\\ContentLengthMiddleware' => $vendorDir . '/slim/slim/Slim/Middleware/ContentLengthMiddleware.php', + 'Slim\\Middleware\\ErrorMiddleware' => $vendorDir . '/slim/slim/Slim/Middleware/ErrorMiddleware.php', + 'Slim\\Middleware\\MethodOverrideMiddleware' => $vendorDir . '/slim/slim/Slim/Middleware/MethodOverrideMiddleware.php', + 'Slim\\Middleware\\OutputBufferingMiddleware' => $vendorDir . '/slim/slim/Slim/Middleware/OutputBufferingMiddleware.php', + 'Slim\\Middleware\\RoutingMiddleware' => $vendorDir . '/slim/slim/Slim/Middleware/RoutingMiddleware.php', + 'Slim\\Psr7\\Cookies' => $vendorDir . '/slim/psr7/src/Cookies.php', + 'Slim\\Psr7\\Environment' => $vendorDir . '/slim/psr7/src/Environment.php', + 'Slim\\Psr7\\Factory\\RequestFactory' => $vendorDir . '/slim/psr7/src/Factory/RequestFactory.php', + 'Slim\\Psr7\\Factory\\ResponseFactory' => $vendorDir . '/slim/psr7/src/Factory/ResponseFactory.php', + 'Slim\\Psr7\\Factory\\ServerRequestFactory' => $vendorDir . '/slim/psr7/src/Factory/ServerRequestFactory.php', + 'Slim\\Psr7\\Factory\\StreamFactory' => $vendorDir . '/slim/psr7/src/Factory/StreamFactory.php', + 'Slim\\Psr7\\Factory\\UploadedFileFactory' => $vendorDir . '/slim/psr7/src/Factory/UploadedFileFactory.php', + 'Slim\\Psr7\\Factory\\UriFactory' => $vendorDir . '/slim/psr7/src/Factory/UriFactory.php', + 'Slim\\Psr7\\Header' => $vendorDir . '/slim/psr7/src/Header.php', + 'Slim\\Psr7\\Headers' => $vendorDir . '/slim/psr7/src/Headers.php', + 'Slim\\Psr7\\Interfaces\\HeadersInterface' => $vendorDir . '/slim/psr7/src/Interfaces/HeadersInterface.php', + 'Slim\\Psr7\\Message' => $vendorDir . '/slim/psr7/src/Message.php', + 'Slim\\Psr7\\NonBufferedBody' => $vendorDir . '/slim/psr7/src/NonBufferedBody.php', + 'Slim\\Psr7\\Request' => $vendorDir . '/slim/psr7/src/Request.php', + 'Slim\\Psr7\\Response' => $vendorDir . '/slim/psr7/src/Response.php', + 'Slim\\Psr7\\Stream' => $vendorDir . '/slim/psr7/src/Stream.php', + 'Slim\\Psr7\\UploadedFile' => $vendorDir . '/slim/psr7/src/UploadedFile.php', + 'Slim\\Psr7\\Uri' => $vendorDir . '/slim/psr7/src/Uri.php', + 'Slim\\ResponseEmitter' => $vendorDir . '/slim/slim/Slim/ResponseEmitter.php', + 'Slim\\Routing\\Dispatcher' => $vendorDir . '/slim/slim/Slim/Routing/Dispatcher.php', + 'Slim\\Routing\\FastRouteDispatcher' => $vendorDir . '/slim/slim/Slim/Routing/FastRouteDispatcher.php', + 'Slim\\Routing\\Route' => $vendorDir . '/slim/slim/Slim/Routing/Route.php', + 'Slim\\Routing\\RouteCollector' => $vendorDir . '/slim/slim/Slim/Routing/RouteCollector.php', + 'Slim\\Routing\\RouteCollectorProxy' => $vendorDir . '/slim/slim/Slim/Routing/RouteCollectorProxy.php', + 'Slim\\Routing\\RouteContext' => $vendorDir . '/slim/slim/Slim/Routing/RouteContext.php', + 'Slim\\Routing\\RouteGroup' => $vendorDir . '/slim/slim/Slim/Routing/RouteGroup.php', + 'Slim\\Routing\\RouteParser' => $vendorDir . '/slim/slim/Slim/Routing/RouteParser.php', + 'Slim\\Routing\\RouteResolver' => $vendorDir . '/slim/slim/Slim/Routing/RouteResolver.php', + 'Slim\\Routing\\RouteRunner' => $vendorDir . '/slim/slim/Slim/Routing/RouteRunner.php', + 'Slim\\Routing\\RoutingResults' => $vendorDir . '/slim/slim/Slim/Routing/RoutingResults.php', + 'Slim\\Views\\Twig' => $vendorDir . '/slim/twig-view/src/Twig.php', + 'Slim\\Views\\TwigExtension' => $vendorDir . '/slim/twig-view/src/TwigExtension.php', + 'Slim\\Views\\TwigMiddleware' => $vendorDir . '/slim/twig-view/src/TwigMiddleware.php', + 'Slim\\Views\\TwigRuntimeExtension' => $vendorDir . '/slim/twig-view/src/TwigRuntimeExtension.php', + 'Slim\\Views\\TwigRuntimeLoader' => $vendorDir . '/slim/twig-view/src/TwigRuntimeLoader.php', + 'SuperClosure\\Analyzer\\AstAnalyzer' => $vendorDir . '/jeremeamia/superclosure/src/Analyzer/AstAnalyzer.php', + 'SuperClosure\\Analyzer\\ClosureAnalyzer' => $vendorDir . '/jeremeamia/superclosure/src/Analyzer/ClosureAnalyzer.php', + 'SuperClosure\\Analyzer\\Token' => $vendorDir . '/jeremeamia/superclosure/src/Analyzer/Token.php', + 'SuperClosure\\Analyzer\\TokenAnalyzer' => $vendorDir . '/jeremeamia/superclosure/src/Analyzer/TokenAnalyzer.php', + 'SuperClosure\\Analyzer\\Visitor\\ClosureLocatorVisitor' => $vendorDir . '/jeremeamia/superclosure/src/Analyzer/Visitor/ClosureLocatorVisitor.php', + 'SuperClosure\\Analyzer\\Visitor\\MagicConstantVisitor' => $vendorDir . '/jeremeamia/superclosure/src/Analyzer/Visitor/MagicConstantVisitor.php', + 'SuperClosure\\Analyzer\\Visitor\\ThisDetectorVisitor' => $vendorDir . '/jeremeamia/superclosure/src/Analyzer/Visitor/ThisDetectorVisitor.php', + 'SuperClosure\\Exception\\ClosureAnalysisException' => $vendorDir . '/jeremeamia/superclosure/src/Exception/ClosureAnalysisException.php', + 'SuperClosure\\Exception\\ClosureSerializationException' => $vendorDir . '/jeremeamia/superclosure/src/Exception/ClosureSerializationException.php', + 'SuperClosure\\Exception\\ClosureUnserializationException' => $vendorDir . '/jeremeamia/superclosure/src/Exception/ClosureUnserializationException.php', + 'SuperClosure\\Exception\\SuperClosureException' => $vendorDir . '/jeremeamia/superclosure/src/Exception/SuperClosureException.php', + 'SuperClosure\\SerializableClosure' => $vendorDir . '/jeremeamia/superclosure/src/SerializableClosure.php', + 'SuperClosure\\Serializer' => $vendorDir . '/jeremeamia/superclosure/src/Serializer.php', + 'SuperClosure\\SerializerInterface' => $vendorDir . '/jeremeamia/superclosure/src/SerializerInterface.php', + 'Symfony\\Component\\Finder\\Comparator\\Comparator' => $vendorDir . '/symfony/finder/Comparator/Comparator.php', + 'Symfony\\Component\\Finder\\Comparator\\DateComparator' => $vendorDir . '/symfony/finder/Comparator/DateComparator.php', + 'Symfony\\Component\\Finder\\Comparator\\NumberComparator' => $vendorDir . '/symfony/finder/Comparator/NumberComparator.php', + 'Symfony\\Component\\Finder\\Exception\\AccessDeniedException' => $vendorDir . '/symfony/finder/Exception/AccessDeniedException.php', + 'Symfony\\Component\\Finder\\Exception\\DirectoryNotFoundException' => $vendorDir . '/symfony/finder/Exception/DirectoryNotFoundException.php', + 'Symfony\\Component\\Finder\\Finder' => $vendorDir . '/symfony/finder/Finder.php', + 'Symfony\\Component\\Finder\\Gitignore' => $vendorDir . '/symfony/finder/Gitignore.php', + 'Symfony\\Component\\Finder\\Glob' => $vendorDir . '/symfony/finder/Glob.php', + 'Symfony\\Component\\Finder\\Iterator\\CustomFilterIterator' => $vendorDir . '/symfony/finder/Iterator/CustomFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\DateRangeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/DateRangeFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\DepthRangeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/DepthRangeFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\ExcludeDirectoryFilterIterator' => $vendorDir . '/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\FileTypeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/FileTypeFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\FilecontentFilterIterator' => $vendorDir . '/symfony/finder/Iterator/FilecontentFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\FilenameFilterIterator' => $vendorDir . '/symfony/finder/Iterator/FilenameFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\MultiplePcreFilterIterator' => $vendorDir . '/symfony/finder/Iterator/MultiplePcreFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\PathFilterIterator' => $vendorDir . '/symfony/finder/Iterator/PathFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\RecursiveDirectoryIterator' => $vendorDir . '/symfony/finder/Iterator/RecursiveDirectoryIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\SizeRangeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/SizeRangeFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\SortableIterator' => $vendorDir . '/symfony/finder/Iterator/SortableIterator.php', + 'Symfony\\Component\\Finder\\SplFileInfo' => $vendorDir . '/symfony/finder/SplFileInfo.php', + 'Symfony\\Component\\Translation\\Catalogue\\AbstractOperation' => $vendorDir . '/symfony/translation/Catalogue/AbstractOperation.php', + 'Symfony\\Component\\Translation\\Catalogue\\MergeOperation' => $vendorDir . '/symfony/translation/Catalogue/MergeOperation.php', + 'Symfony\\Component\\Translation\\Catalogue\\OperationInterface' => $vendorDir . '/symfony/translation/Catalogue/OperationInterface.php', + 'Symfony\\Component\\Translation\\Catalogue\\TargetOperation' => $vendorDir . '/symfony/translation/Catalogue/TargetOperation.php', + 'Symfony\\Component\\Translation\\Command\\XliffLintCommand' => $vendorDir . '/symfony/translation/Command/XliffLintCommand.php', + 'Symfony\\Component\\Translation\\DataCollectorTranslator' => $vendorDir . '/symfony/translation/DataCollectorTranslator.php', + 'Symfony\\Component\\Translation\\DataCollector\\TranslationDataCollector' => $vendorDir . '/symfony/translation/DataCollector/TranslationDataCollector.php', + 'Symfony\\Component\\Translation\\DependencyInjection\\TranslationDumperPass' => $vendorDir . '/symfony/translation/DependencyInjection/TranslationDumperPass.php', + 'Symfony\\Component\\Translation\\DependencyInjection\\TranslationExtractorPass' => $vendorDir . '/symfony/translation/DependencyInjection/TranslationExtractorPass.php', + 'Symfony\\Component\\Translation\\DependencyInjection\\TranslatorPass' => $vendorDir . '/symfony/translation/DependencyInjection/TranslatorPass.php', + 'Symfony\\Component\\Translation\\DependencyInjection\\TranslatorPathsPass' => $vendorDir . '/symfony/translation/DependencyInjection/TranslatorPathsPass.php', + 'Symfony\\Component\\Translation\\Dumper\\CsvFileDumper' => $vendorDir . '/symfony/translation/Dumper/CsvFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\DumperInterface' => $vendorDir . '/symfony/translation/Dumper/DumperInterface.php', + 'Symfony\\Component\\Translation\\Dumper\\FileDumper' => $vendorDir . '/symfony/translation/Dumper/FileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\IcuResFileDumper' => $vendorDir . '/symfony/translation/Dumper/IcuResFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\IniFileDumper' => $vendorDir . '/symfony/translation/Dumper/IniFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\JsonFileDumper' => $vendorDir . '/symfony/translation/Dumper/JsonFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\MoFileDumper' => $vendorDir . '/symfony/translation/Dumper/MoFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\PhpFileDumper' => $vendorDir . '/symfony/translation/Dumper/PhpFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\PoFileDumper' => $vendorDir . '/symfony/translation/Dumper/PoFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\QtFileDumper' => $vendorDir . '/symfony/translation/Dumper/QtFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\XliffFileDumper' => $vendorDir . '/symfony/translation/Dumper/XliffFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\YamlFileDumper' => $vendorDir . '/symfony/translation/Dumper/YamlFileDumper.php', + 'Symfony\\Component\\Translation\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/translation/Exception/ExceptionInterface.php', + 'Symfony\\Component\\Translation\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/translation/Exception/InvalidArgumentException.php', + 'Symfony\\Component\\Translation\\Exception\\InvalidResourceException' => $vendorDir . '/symfony/translation/Exception/InvalidResourceException.php', + 'Symfony\\Component\\Translation\\Exception\\LogicException' => $vendorDir . '/symfony/translation/Exception/LogicException.php', + 'Symfony\\Component\\Translation\\Exception\\NotFoundResourceException' => $vendorDir . '/symfony/translation/Exception/NotFoundResourceException.php', + 'Symfony\\Component\\Translation\\Exception\\RuntimeException' => $vendorDir . '/symfony/translation/Exception/RuntimeException.php', + 'Symfony\\Component\\Translation\\Extractor\\AbstractFileExtractor' => $vendorDir . '/symfony/translation/Extractor/AbstractFileExtractor.php', + 'Symfony\\Component\\Translation\\Extractor\\ChainExtractor' => $vendorDir . '/symfony/translation/Extractor/ChainExtractor.php', + 'Symfony\\Component\\Translation\\Extractor\\ExtractorInterface' => $vendorDir . '/symfony/translation/Extractor/ExtractorInterface.php', + 'Symfony\\Component\\Translation\\Extractor\\PhpExtractor' => $vendorDir . '/symfony/translation/Extractor/PhpExtractor.php', + 'Symfony\\Component\\Translation\\Extractor\\PhpStringTokenParser' => $vendorDir . '/symfony/translation/Extractor/PhpStringTokenParser.php', + 'Symfony\\Component\\Translation\\Formatter\\IntlFormatter' => $vendorDir . '/symfony/translation/Formatter/IntlFormatter.php', + 'Symfony\\Component\\Translation\\Formatter\\IntlFormatterInterface' => $vendorDir . '/symfony/translation/Formatter/IntlFormatterInterface.php', + 'Symfony\\Component\\Translation\\Formatter\\MessageFormatter' => $vendorDir . '/symfony/translation/Formatter/MessageFormatter.php', + 'Symfony\\Component\\Translation\\Formatter\\MessageFormatterInterface' => $vendorDir . '/symfony/translation/Formatter/MessageFormatterInterface.php', + 'Symfony\\Component\\Translation\\IdentityTranslator' => $vendorDir . '/symfony/translation/IdentityTranslator.php', + 'Symfony\\Component\\Translation\\Loader\\ArrayLoader' => $vendorDir . '/symfony/translation/Loader/ArrayLoader.php', + 'Symfony\\Component\\Translation\\Loader\\CsvFileLoader' => $vendorDir . '/symfony/translation/Loader/CsvFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\FileLoader' => $vendorDir . '/symfony/translation/Loader/FileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\IcuDatFileLoader' => $vendorDir . '/symfony/translation/Loader/IcuDatFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\IcuResFileLoader' => $vendorDir . '/symfony/translation/Loader/IcuResFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\IniFileLoader' => $vendorDir . '/symfony/translation/Loader/IniFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\JsonFileLoader' => $vendorDir . '/symfony/translation/Loader/JsonFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\LoaderInterface' => $vendorDir . '/symfony/translation/Loader/LoaderInterface.php', + 'Symfony\\Component\\Translation\\Loader\\MoFileLoader' => $vendorDir . '/symfony/translation/Loader/MoFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\PhpFileLoader' => $vendorDir . '/symfony/translation/Loader/PhpFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\PoFileLoader' => $vendorDir . '/symfony/translation/Loader/PoFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\QtFileLoader' => $vendorDir . '/symfony/translation/Loader/QtFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\XliffFileLoader' => $vendorDir . '/symfony/translation/Loader/XliffFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\YamlFileLoader' => $vendorDir . '/symfony/translation/Loader/YamlFileLoader.php', + 'Symfony\\Component\\Translation\\LoggingTranslator' => $vendorDir . '/symfony/translation/LoggingTranslator.php', + 'Symfony\\Component\\Translation\\MessageCatalogue' => $vendorDir . '/symfony/translation/MessageCatalogue.php', + 'Symfony\\Component\\Translation\\MessageCatalogueInterface' => $vendorDir . '/symfony/translation/MessageCatalogueInterface.php', + 'Symfony\\Component\\Translation\\MetadataAwareInterface' => $vendorDir . '/symfony/translation/MetadataAwareInterface.php', + 'Symfony\\Component\\Translation\\Reader\\TranslationReader' => $vendorDir . '/symfony/translation/Reader/TranslationReader.php', + 'Symfony\\Component\\Translation\\Reader\\TranslationReaderInterface' => $vendorDir . '/symfony/translation/Reader/TranslationReaderInterface.php', + 'Symfony\\Component\\Translation\\Translator' => $vendorDir . '/symfony/translation/Translator.php', + 'Symfony\\Component\\Translation\\TranslatorBagInterface' => $vendorDir . '/symfony/translation/TranslatorBagInterface.php', + 'Symfony\\Component\\Translation\\Util\\ArrayConverter' => $vendorDir . '/symfony/translation/Util/ArrayConverter.php', + 'Symfony\\Component\\Translation\\Util\\XliffUtils' => $vendorDir . '/symfony/translation/Util/XliffUtils.php', + 'Symfony\\Component\\Translation\\Writer\\TranslationWriter' => $vendorDir . '/symfony/translation/Writer/TranslationWriter.php', + 'Symfony\\Component\\Translation\\Writer\\TranslationWriterInterface' => $vendorDir . '/symfony/translation/Writer/TranslationWriterInterface.php', + 'Symfony\\Component\\VarDumper\\Caster\\AmqpCaster' => $vendorDir . '/symfony/var-dumper/Caster/AmqpCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\ArgsStub' => $vendorDir . '/symfony/var-dumper/Caster/ArgsStub.php', + 'Symfony\\Component\\VarDumper\\Caster\\Caster' => $vendorDir . '/symfony/var-dumper/Caster/Caster.php', + 'Symfony\\Component\\VarDumper\\Caster\\ClassStub' => $vendorDir . '/symfony/var-dumper/Caster/ClassStub.php', + 'Symfony\\Component\\VarDumper\\Caster\\ConstStub' => $vendorDir . '/symfony/var-dumper/Caster/ConstStub.php', + 'Symfony\\Component\\VarDumper\\Caster\\CutArrayStub' => $vendorDir . '/symfony/var-dumper/Caster/CutArrayStub.php', + 'Symfony\\Component\\VarDumper\\Caster\\CutStub' => $vendorDir . '/symfony/var-dumper/Caster/CutStub.php', + 'Symfony\\Component\\VarDumper\\Caster\\DOMCaster' => $vendorDir . '/symfony/var-dumper/Caster/DOMCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\DateCaster' => $vendorDir . '/symfony/var-dumper/Caster/DateCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\DoctrineCaster' => $vendorDir . '/symfony/var-dumper/Caster/DoctrineCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\DsCaster' => $vendorDir . '/symfony/var-dumper/Caster/DsCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\DsPairStub' => $vendorDir . '/symfony/var-dumper/Caster/DsPairStub.php', + 'Symfony\\Component\\VarDumper\\Caster\\EnumStub' => $vendorDir . '/symfony/var-dumper/Caster/EnumStub.php', + 'Symfony\\Component\\VarDumper\\Caster\\ExceptionCaster' => $vendorDir . '/symfony/var-dumper/Caster/ExceptionCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\FrameStub' => $vendorDir . '/symfony/var-dumper/Caster/FrameStub.php', + 'Symfony\\Component\\VarDumper\\Caster\\GmpCaster' => $vendorDir . '/symfony/var-dumper/Caster/GmpCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\ImagineCaster' => $vendorDir . '/symfony/var-dumper/Caster/ImagineCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\ImgStub' => $vendorDir . '/symfony/var-dumper/Caster/ImgStub.php', + 'Symfony\\Component\\VarDumper\\Caster\\IntlCaster' => $vendorDir . '/symfony/var-dumper/Caster/IntlCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\LinkStub' => $vendorDir . '/symfony/var-dumper/Caster/LinkStub.php', + 'Symfony\\Component\\VarDumper\\Caster\\MemcachedCaster' => $vendorDir . '/symfony/var-dumper/Caster/MemcachedCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\PdoCaster' => $vendorDir . '/symfony/var-dumper/Caster/PdoCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\PgSqlCaster' => $vendorDir . '/symfony/var-dumper/Caster/PgSqlCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\ProxyManagerCaster' => $vendorDir . '/symfony/var-dumper/Caster/ProxyManagerCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\RedisCaster' => $vendorDir . '/symfony/var-dumper/Caster/RedisCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\ReflectionCaster' => $vendorDir . '/symfony/var-dumper/Caster/ReflectionCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\ResourceCaster' => $vendorDir . '/symfony/var-dumper/Caster/ResourceCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\SplCaster' => $vendorDir . '/symfony/var-dumper/Caster/SplCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\StubCaster' => $vendorDir . '/symfony/var-dumper/Caster/StubCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\SymfonyCaster' => $vendorDir . '/symfony/var-dumper/Caster/SymfonyCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\TraceStub' => $vendorDir . '/symfony/var-dumper/Caster/TraceStub.php', + 'Symfony\\Component\\VarDumper\\Caster\\UuidCaster' => $vendorDir . '/symfony/var-dumper/Caster/UuidCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\XmlReaderCaster' => $vendorDir . '/symfony/var-dumper/Caster/XmlReaderCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\XmlResourceCaster' => $vendorDir . '/symfony/var-dumper/Caster/XmlResourceCaster.php', + 'Symfony\\Component\\VarDumper\\Cloner\\AbstractCloner' => $vendorDir . '/symfony/var-dumper/Cloner/AbstractCloner.php', + 'Symfony\\Component\\VarDumper\\Cloner\\ClonerInterface' => $vendorDir . '/symfony/var-dumper/Cloner/ClonerInterface.php', + 'Symfony\\Component\\VarDumper\\Cloner\\Cursor' => $vendorDir . '/symfony/var-dumper/Cloner/Cursor.php', + 'Symfony\\Component\\VarDumper\\Cloner\\Data' => $vendorDir . '/symfony/var-dumper/Cloner/Data.php', + 'Symfony\\Component\\VarDumper\\Cloner\\DumperInterface' => $vendorDir . '/symfony/var-dumper/Cloner/DumperInterface.php', + 'Symfony\\Component\\VarDumper\\Cloner\\Stub' => $vendorDir . '/symfony/var-dumper/Cloner/Stub.php', + 'Symfony\\Component\\VarDumper\\Cloner\\VarCloner' => $vendorDir . '/symfony/var-dumper/Cloner/VarCloner.php', + 'Symfony\\Component\\VarDumper\\Command\\Descriptor\\CliDescriptor' => $vendorDir . '/symfony/var-dumper/Command/Descriptor/CliDescriptor.php', + 'Symfony\\Component\\VarDumper\\Command\\Descriptor\\DumpDescriptorInterface' => $vendorDir . '/symfony/var-dumper/Command/Descriptor/DumpDescriptorInterface.php', + 'Symfony\\Component\\VarDumper\\Command\\Descriptor\\HtmlDescriptor' => $vendorDir . '/symfony/var-dumper/Command/Descriptor/HtmlDescriptor.php', + 'Symfony\\Component\\VarDumper\\Command\\ServerDumpCommand' => $vendorDir . '/symfony/var-dumper/Command/ServerDumpCommand.php', + 'Symfony\\Component\\VarDumper\\Dumper\\AbstractDumper' => $vendorDir . '/symfony/var-dumper/Dumper/AbstractDumper.php', + 'Symfony\\Component\\VarDumper\\Dumper\\CliDumper' => $vendorDir . '/symfony/var-dumper/Dumper/CliDumper.php', + 'Symfony\\Component\\VarDumper\\Dumper\\ContextProvider\\CliContextProvider' => $vendorDir . '/symfony/var-dumper/Dumper/ContextProvider/CliContextProvider.php', + 'Symfony\\Component\\VarDumper\\Dumper\\ContextProvider\\ContextProviderInterface' => $vendorDir . '/symfony/var-dumper/Dumper/ContextProvider/ContextProviderInterface.php', + 'Symfony\\Component\\VarDumper\\Dumper\\ContextProvider\\RequestContextProvider' => $vendorDir . '/symfony/var-dumper/Dumper/ContextProvider/RequestContextProvider.php', + 'Symfony\\Component\\VarDumper\\Dumper\\ContextProvider\\SourceContextProvider' => $vendorDir . '/symfony/var-dumper/Dumper/ContextProvider/SourceContextProvider.php', + 'Symfony\\Component\\VarDumper\\Dumper\\ContextualizedDumper' => $vendorDir . '/symfony/var-dumper/Dumper/ContextualizedDumper.php', + 'Symfony\\Component\\VarDumper\\Dumper\\DataDumperInterface' => $vendorDir . '/symfony/var-dumper/Dumper/DataDumperInterface.php', + 'Symfony\\Component\\VarDumper\\Dumper\\HtmlDumper' => $vendorDir . '/symfony/var-dumper/Dumper/HtmlDumper.php', + 'Symfony\\Component\\VarDumper\\Dumper\\ServerDumper' => $vendorDir . '/symfony/var-dumper/Dumper/ServerDumper.php', + 'Symfony\\Component\\VarDumper\\Exception\\ThrowingCasterException' => $vendorDir . '/symfony/var-dumper/Exception/ThrowingCasterException.php', + 'Symfony\\Component\\VarDumper\\Server\\Connection' => $vendorDir . '/symfony/var-dumper/Server/Connection.php', + 'Symfony\\Component\\VarDumper\\Server\\DumpServer' => $vendorDir . '/symfony/var-dumper/Server/DumpServer.php', + 'Symfony\\Component\\VarDumper\\Test\\VarDumperTestTrait' => $vendorDir . '/symfony/var-dumper/Test/VarDumperTestTrait.php', + 'Symfony\\Component\\VarDumper\\VarDumper' => $vendorDir . '/symfony/var-dumper/VarDumper.php', + 'Symfony\\Component\\Yaml\\Command\\LintCommand' => $vendorDir . '/symfony/yaml/Command/LintCommand.php', + 'Symfony\\Component\\Yaml\\Dumper' => $vendorDir . '/symfony/yaml/Dumper.php', + 'Symfony\\Component\\Yaml\\Escaper' => $vendorDir . '/symfony/yaml/Escaper.php', + 'Symfony\\Component\\Yaml\\Exception\\DumpException' => $vendorDir . '/symfony/yaml/Exception/DumpException.php', + 'Symfony\\Component\\Yaml\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/yaml/Exception/ExceptionInterface.php', + 'Symfony\\Component\\Yaml\\Exception\\ParseException' => $vendorDir . '/symfony/yaml/Exception/ParseException.php', + 'Symfony\\Component\\Yaml\\Exception\\RuntimeException' => $vendorDir . '/symfony/yaml/Exception/RuntimeException.php', + 'Symfony\\Component\\Yaml\\Inline' => $vendorDir . '/symfony/yaml/Inline.php', + 'Symfony\\Component\\Yaml\\Parser' => $vendorDir . '/symfony/yaml/Parser.php', + 'Symfony\\Component\\Yaml\\Tag\\TaggedValue' => $vendorDir . '/symfony/yaml/Tag/TaggedValue.php', + 'Symfony\\Component\\Yaml\\Unescaper' => $vendorDir . '/symfony/yaml/Unescaper.php', + 'Symfony\\Component\\Yaml\\Yaml' => $vendorDir . '/symfony/yaml/Yaml.php', + 'Symfony\\Contracts\\Translation\\LocaleAwareInterface' => $vendorDir . '/symfony/translation-contracts/LocaleAwareInterface.php', + 'Symfony\\Contracts\\Translation\\Test\\TranslatorTest' => $vendorDir . '/symfony/translation-contracts/Test/TranslatorTest.php', + 'Symfony\\Contracts\\Translation\\TranslatorInterface' => $vendorDir . '/symfony/translation-contracts/TranslatorInterface.php', + 'Symfony\\Contracts\\Translation\\TranslatorTrait' => $vendorDir . '/symfony/translation-contracts/TranslatorTrait.php', + 'Symfony\\Polyfill\\Ctype\\Ctype' => $vendorDir . '/symfony/polyfill-ctype/Ctype.php', + 'Symfony\\Polyfill\\Mbstring\\Mbstring' => $vendorDir . '/symfony/polyfill-mbstring/Mbstring.php', + 'Symfony\\Polyfill\\Php56\\Php56' => $vendorDir . '/symfony/polyfill-php56/Php56.php', + 'Symfony\\Polyfill\\Util\\Binary' => $vendorDir . '/symfony/polyfill-util/Binary.php', + 'Symfony\\Polyfill\\Util\\BinaryNoFuncOverload' => $vendorDir . '/symfony/polyfill-util/BinaryNoFuncOverload.php', + 'Symfony\\Polyfill\\Util\\BinaryOnFuncOverload' => $vendorDir . '/symfony/polyfill-util/BinaryOnFuncOverload.php', + 'Symfony\\Polyfill\\Util\\TestListener' => $vendorDir . '/symfony/polyfill-util/TestListener.php', + 'Symfony\\Polyfill\\Util\\TestListenerForV5' => $vendorDir . '/symfony/polyfill-util/TestListenerForV5.php', + 'Symfony\\Polyfill\\Util\\TestListenerForV6' => $vendorDir . '/symfony/polyfill-util/TestListenerForV6.php', + 'Symfony\\Polyfill\\Util\\TestListenerForV7' => $vendorDir . '/symfony/polyfill-util/TestListenerForV7.php', + 'Symfony\\Polyfill\\Util\\TestListenerTrait' => $vendorDir . '/symfony/polyfill-util/TestListenerTrait.php', + 'Tightenco\\Collect\\Contracts\\Support\\Arrayable' => $vendorDir . '/tightenco/collect/src/Collect/Contracts/Support/Arrayable.php', + 'Tightenco\\Collect\\Contracts\\Support\\Htmlable' => $vendorDir . '/tightenco/collect/src/Collect/Contracts/Support/Htmlable.php', + 'Tightenco\\Collect\\Contracts\\Support\\Jsonable' => $vendorDir . '/tightenco/collect/src/Collect/Contracts/Support/Jsonable.php', + 'Tightenco\\Collect\\Support\\Arr' => $vendorDir . '/tightenco/collect/src/Collect/Support/Arr.php', + 'Tightenco\\Collect\\Support\\Collection' => $vendorDir . '/tightenco/collect/src/Collect/Support/Collection.php', + 'Tightenco\\Collect\\Support\\Enumerable' => $vendorDir . '/tightenco/collect/src/Collect/Support/Enumerable.php', + 'Tightenco\\Collect\\Support\\HigherOrderCollectionProxy' => $vendorDir . '/tightenco/collect/src/Collect/Support/HigherOrderCollectionProxy.php', + 'Tightenco\\Collect\\Support\\HtmlString' => $vendorDir . '/tightenco/collect/src/Collect/Support/HtmlString.php', + 'Tightenco\\Collect\\Support\\LazyCollection' => $vendorDir . '/tightenco/collect/src/Collect/Support/LazyCollection.php', + 'Tightenco\\Collect\\Support\\Traits\\EnumeratesValues' => $vendorDir . '/tightenco/collect/src/Collect/Support/Traits/EnumeratesValues.php', + 'Tightenco\\Collect\\Support\\Traits\\Macroable' => $vendorDir . '/tightenco/collect/src/Collect/Support/Traits/Macroable.php', + 'Twig\\Cache\\CacheInterface' => $vendorDir . '/twig/twig/src/Cache/CacheInterface.php', + 'Twig\\Cache\\FilesystemCache' => $vendorDir . '/twig/twig/src/Cache/FilesystemCache.php', + 'Twig\\Cache\\NullCache' => $vendorDir . '/twig/twig/src/Cache/NullCache.php', + 'Twig\\Compiler' => $vendorDir . '/twig/twig/src/Compiler.php', + 'Twig\\Environment' => $vendorDir . '/twig/twig/src/Environment.php', + 'Twig\\Error\\Error' => $vendorDir . '/twig/twig/src/Error/Error.php', + 'Twig\\Error\\LoaderError' => $vendorDir . '/twig/twig/src/Error/LoaderError.php', + 'Twig\\Error\\RuntimeError' => $vendorDir . '/twig/twig/src/Error/RuntimeError.php', + 'Twig\\Error\\SyntaxError' => $vendorDir . '/twig/twig/src/Error/SyntaxError.php', + 'Twig\\ExpressionParser' => $vendorDir . '/twig/twig/src/ExpressionParser.php', + 'Twig\\ExtensionSet' => $vendorDir . '/twig/twig/src/ExtensionSet.php', + 'Twig\\Extension\\AbstractExtension' => $vendorDir . '/twig/twig/src/Extension/AbstractExtension.php', + 'Twig\\Extension\\CoreExtension' => $vendorDir . '/twig/twig/src/Extension/CoreExtension.php', + 'Twig\\Extension\\DebugExtension' => $vendorDir . '/twig/twig/src/Extension/DebugExtension.php', + 'Twig\\Extension\\EscaperExtension' => $vendorDir . '/twig/twig/src/Extension/EscaperExtension.php', + 'Twig\\Extension\\ExtensionInterface' => $vendorDir . '/twig/twig/src/Extension/ExtensionInterface.php', + 'Twig\\Extension\\GlobalsInterface' => $vendorDir . '/twig/twig/src/Extension/GlobalsInterface.php', + 'Twig\\Extension\\OptimizerExtension' => $vendorDir . '/twig/twig/src/Extension/OptimizerExtension.php', + 'Twig\\Extension\\ProfilerExtension' => $vendorDir . '/twig/twig/src/Extension/ProfilerExtension.php', + 'Twig\\Extension\\RuntimeExtensionInterface' => $vendorDir . '/twig/twig/src/Extension/RuntimeExtensionInterface.php', + 'Twig\\Extension\\SandboxExtension' => $vendorDir . '/twig/twig/src/Extension/SandboxExtension.php', + 'Twig\\Extension\\StagingExtension' => $vendorDir . '/twig/twig/src/Extension/StagingExtension.php', + 'Twig\\Extension\\StringLoaderExtension' => $vendorDir . '/twig/twig/src/Extension/StringLoaderExtension.php', + 'Twig\\FileExtensionEscapingStrategy' => $vendorDir . '/twig/twig/src/FileExtensionEscapingStrategy.php', + 'Twig\\Lexer' => $vendorDir . '/twig/twig/src/Lexer.php', + 'Twig\\Loader\\ArrayLoader' => $vendorDir . '/twig/twig/src/Loader/ArrayLoader.php', + 'Twig\\Loader\\ChainLoader' => $vendorDir . '/twig/twig/src/Loader/ChainLoader.php', + 'Twig\\Loader\\FilesystemLoader' => $vendorDir . '/twig/twig/src/Loader/FilesystemLoader.php', + 'Twig\\Loader\\LoaderInterface' => $vendorDir . '/twig/twig/src/Loader/LoaderInterface.php', + 'Twig\\Markup' => $vendorDir . '/twig/twig/src/Markup.php', + 'Twig\\NodeTraverser' => $vendorDir . '/twig/twig/src/NodeTraverser.php', + 'Twig\\NodeVisitor\\AbstractNodeVisitor' => $vendorDir . '/twig/twig/src/NodeVisitor/AbstractNodeVisitor.php', + 'Twig\\NodeVisitor\\EscaperNodeVisitor' => $vendorDir . '/twig/twig/src/NodeVisitor/EscaperNodeVisitor.php', + 'Twig\\NodeVisitor\\MacroAutoImportNodeVisitor' => $vendorDir . '/twig/twig/src/NodeVisitor/MacroAutoImportNodeVisitor.php', + 'Twig\\NodeVisitor\\NodeVisitorInterface' => $vendorDir . '/twig/twig/src/NodeVisitor/NodeVisitorInterface.php', + 'Twig\\NodeVisitor\\OptimizerNodeVisitor' => $vendorDir . '/twig/twig/src/NodeVisitor/OptimizerNodeVisitor.php', + 'Twig\\NodeVisitor\\SafeAnalysisNodeVisitor' => $vendorDir . '/twig/twig/src/NodeVisitor/SafeAnalysisNodeVisitor.php', + 'Twig\\NodeVisitor\\SandboxNodeVisitor' => $vendorDir . '/twig/twig/src/NodeVisitor/SandboxNodeVisitor.php', + 'Twig\\Node\\AutoEscapeNode' => $vendorDir . '/twig/twig/src/Node/AutoEscapeNode.php', + 'Twig\\Node\\BlockNode' => $vendorDir . '/twig/twig/src/Node/BlockNode.php', + 'Twig\\Node\\BlockReferenceNode' => $vendorDir . '/twig/twig/src/Node/BlockReferenceNode.php', + 'Twig\\Node\\BodyNode' => $vendorDir . '/twig/twig/src/Node/BodyNode.php', + 'Twig\\Node\\CheckSecurityNode' => $vendorDir . '/twig/twig/src/Node/CheckSecurityNode.php', + 'Twig\\Node\\CheckToStringNode' => $vendorDir . '/twig/twig/src/Node/CheckToStringNode.php', + 'Twig\\Node\\DeprecatedNode' => $vendorDir . '/twig/twig/src/Node/DeprecatedNode.php', + 'Twig\\Node\\DoNode' => $vendorDir . '/twig/twig/src/Node/DoNode.php', + 'Twig\\Node\\EmbedNode' => $vendorDir . '/twig/twig/src/Node/EmbedNode.php', + 'Twig\\Node\\Expression\\AbstractExpression' => $vendorDir . '/twig/twig/src/Node/Expression/AbstractExpression.php', + 'Twig\\Node\\Expression\\ArrayExpression' => $vendorDir . '/twig/twig/src/Node/Expression/ArrayExpression.php', + 'Twig\\Node\\Expression\\ArrowFunctionExpression' => $vendorDir . '/twig/twig/src/Node/Expression/ArrowFunctionExpression.php', + 'Twig\\Node\\Expression\\AssignNameExpression' => $vendorDir . '/twig/twig/src/Node/Expression/AssignNameExpression.php', + 'Twig\\Node\\Expression\\Binary\\AbstractBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/AbstractBinary.php', + 'Twig\\Node\\Expression\\Binary\\AddBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/AddBinary.php', + 'Twig\\Node\\Expression\\Binary\\AndBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/AndBinary.php', + 'Twig\\Node\\Expression\\Binary\\BitwiseAndBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/BitwiseAndBinary.php', + 'Twig\\Node\\Expression\\Binary\\BitwiseOrBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/BitwiseOrBinary.php', + 'Twig\\Node\\Expression\\Binary\\BitwiseXorBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/BitwiseXorBinary.php', + 'Twig\\Node\\Expression\\Binary\\ConcatBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/ConcatBinary.php', + 'Twig\\Node\\Expression\\Binary\\DivBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/DivBinary.php', + 'Twig\\Node\\Expression\\Binary\\EndsWithBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/EndsWithBinary.php', + 'Twig\\Node\\Expression\\Binary\\EqualBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/EqualBinary.php', + 'Twig\\Node\\Expression\\Binary\\FloorDivBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/FloorDivBinary.php', + 'Twig\\Node\\Expression\\Binary\\GreaterBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/GreaterBinary.php', + 'Twig\\Node\\Expression\\Binary\\GreaterEqualBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/GreaterEqualBinary.php', + 'Twig\\Node\\Expression\\Binary\\InBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/InBinary.php', + 'Twig\\Node\\Expression\\Binary\\LessBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/LessBinary.php', + 'Twig\\Node\\Expression\\Binary\\LessEqualBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/LessEqualBinary.php', + 'Twig\\Node\\Expression\\Binary\\MatchesBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/MatchesBinary.php', + 'Twig\\Node\\Expression\\Binary\\ModBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/ModBinary.php', + 'Twig\\Node\\Expression\\Binary\\MulBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/MulBinary.php', + 'Twig\\Node\\Expression\\Binary\\NotEqualBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/NotEqualBinary.php', + 'Twig\\Node\\Expression\\Binary\\NotInBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/NotInBinary.php', + 'Twig\\Node\\Expression\\Binary\\OrBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/OrBinary.php', + 'Twig\\Node\\Expression\\Binary\\PowerBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/PowerBinary.php', + 'Twig\\Node\\Expression\\Binary\\RangeBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/RangeBinary.php', + 'Twig\\Node\\Expression\\Binary\\SpaceshipBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/SpaceshipBinary.php', + 'Twig\\Node\\Expression\\Binary\\StartsWithBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/StartsWithBinary.php', + 'Twig\\Node\\Expression\\Binary\\SubBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/SubBinary.php', + 'Twig\\Node\\Expression\\BlockReferenceExpression' => $vendorDir . '/twig/twig/src/Node/Expression/BlockReferenceExpression.php', + 'Twig\\Node\\Expression\\CallExpression' => $vendorDir . '/twig/twig/src/Node/Expression/CallExpression.php', + 'Twig\\Node\\Expression\\ConditionalExpression' => $vendorDir . '/twig/twig/src/Node/Expression/ConditionalExpression.php', + 'Twig\\Node\\Expression\\ConstantExpression' => $vendorDir . '/twig/twig/src/Node/Expression/ConstantExpression.php', + 'Twig\\Node\\Expression\\FilterExpression' => $vendorDir . '/twig/twig/src/Node/Expression/FilterExpression.php', + 'Twig\\Node\\Expression\\Filter\\DefaultFilter' => $vendorDir . '/twig/twig/src/Node/Expression/Filter/DefaultFilter.php', + 'Twig\\Node\\Expression\\FunctionExpression' => $vendorDir . '/twig/twig/src/Node/Expression/FunctionExpression.php', + 'Twig\\Node\\Expression\\GetAttrExpression' => $vendorDir . '/twig/twig/src/Node/Expression/GetAttrExpression.php', + 'Twig\\Node\\Expression\\InlinePrint' => $vendorDir . '/twig/twig/src/Node/Expression/InlinePrint.php', + 'Twig\\Node\\Expression\\MethodCallExpression' => $vendorDir . '/twig/twig/src/Node/Expression/MethodCallExpression.php', + 'Twig\\Node\\Expression\\NameExpression' => $vendorDir . '/twig/twig/src/Node/Expression/NameExpression.php', + 'Twig\\Node\\Expression\\NullCoalesceExpression' => $vendorDir . '/twig/twig/src/Node/Expression/NullCoalesceExpression.php', + 'Twig\\Node\\Expression\\ParentExpression' => $vendorDir . '/twig/twig/src/Node/Expression/ParentExpression.php', + 'Twig\\Node\\Expression\\TempNameExpression' => $vendorDir . '/twig/twig/src/Node/Expression/TempNameExpression.php', + 'Twig\\Node\\Expression\\TestExpression' => $vendorDir . '/twig/twig/src/Node/Expression/TestExpression.php', + 'Twig\\Node\\Expression\\Test\\ConstantTest' => $vendorDir . '/twig/twig/src/Node/Expression/Test/ConstantTest.php', + 'Twig\\Node\\Expression\\Test\\DefinedTest' => $vendorDir . '/twig/twig/src/Node/Expression/Test/DefinedTest.php', + 'Twig\\Node\\Expression\\Test\\DivisiblebyTest' => $vendorDir . '/twig/twig/src/Node/Expression/Test/DivisiblebyTest.php', + 'Twig\\Node\\Expression\\Test\\EvenTest' => $vendorDir . '/twig/twig/src/Node/Expression/Test/EvenTest.php', + 'Twig\\Node\\Expression\\Test\\NullTest' => $vendorDir . '/twig/twig/src/Node/Expression/Test/NullTest.php', + 'Twig\\Node\\Expression\\Test\\OddTest' => $vendorDir . '/twig/twig/src/Node/Expression/Test/OddTest.php', + 'Twig\\Node\\Expression\\Test\\SameasTest' => $vendorDir . '/twig/twig/src/Node/Expression/Test/SameasTest.php', + 'Twig\\Node\\Expression\\Unary\\AbstractUnary' => $vendorDir . '/twig/twig/src/Node/Expression/Unary/AbstractUnary.php', + 'Twig\\Node\\Expression\\Unary\\NegUnary' => $vendorDir . '/twig/twig/src/Node/Expression/Unary/NegUnary.php', + 'Twig\\Node\\Expression\\Unary\\NotUnary' => $vendorDir . '/twig/twig/src/Node/Expression/Unary/NotUnary.php', + 'Twig\\Node\\Expression\\Unary\\PosUnary' => $vendorDir . '/twig/twig/src/Node/Expression/Unary/PosUnary.php', + 'Twig\\Node\\Expression\\VariadicExpression' => $vendorDir . '/twig/twig/src/Node/Expression/VariadicExpression.php', + 'Twig\\Node\\FlushNode' => $vendorDir . '/twig/twig/src/Node/FlushNode.php', + 'Twig\\Node\\ForLoopNode' => $vendorDir . '/twig/twig/src/Node/ForLoopNode.php', + 'Twig\\Node\\ForNode' => $vendorDir . '/twig/twig/src/Node/ForNode.php', + 'Twig\\Node\\IfNode' => $vendorDir . '/twig/twig/src/Node/IfNode.php', + 'Twig\\Node\\ImportNode' => $vendorDir . '/twig/twig/src/Node/ImportNode.php', + 'Twig\\Node\\IncludeNode' => $vendorDir . '/twig/twig/src/Node/IncludeNode.php', + 'Twig\\Node\\MacroNode' => $vendorDir . '/twig/twig/src/Node/MacroNode.php', + 'Twig\\Node\\ModuleNode' => $vendorDir . '/twig/twig/src/Node/ModuleNode.php', + 'Twig\\Node\\Node' => $vendorDir . '/twig/twig/src/Node/Node.php', + 'Twig\\Node\\NodeCaptureInterface' => $vendorDir . '/twig/twig/src/Node/NodeCaptureInterface.php', + 'Twig\\Node\\NodeOutputInterface' => $vendorDir . '/twig/twig/src/Node/NodeOutputInterface.php', + 'Twig\\Node\\PrintNode' => $vendorDir . '/twig/twig/src/Node/PrintNode.php', + 'Twig\\Node\\SandboxNode' => $vendorDir . '/twig/twig/src/Node/SandboxNode.php', + 'Twig\\Node\\SetNode' => $vendorDir . '/twig/twig/src/Node/SetNode.php', + 'Twig\\Node\\TextNode' => $vendorDir . '/twig/twig/src/Node/TextNode.php', + 'Twig\\Node\\WithNode' => $vendorDir . '/twig/twig/src/Node/WithNode.php', + 'Twig\\Parser' => $vendorDir . '/twig/twig/src/Parser.php', + 'Twig\\Profiler\\Dumper\\BaseDumper' => $vendorDir . '/twig/twig/src/Profiler/Dumper/BaseDumper.php', + 'Twig\\Profiler\\Dumper\\BlackfireDumper' => $vendorDir . '/twig/twig/src/Profiler/Dumper/BlackfireDumper.php', + 'Twig\\Profiler\\Dumper\\HtmlDumper' => $vendorDir . '/twig/twig/src/Profiler/Dumper/HtmlDumper.php', + 'Twig\\Profiler\\Dumper\\TextDumper' => $vendorDir . '/twig/twig/src/Profiler/Dumper/TextDumper.php', + 'Twig\\Profiler\\NodeVisitor\\ProfilerNodeVisitor' => $vendorDir . '/twig/twig/src/Profiler/NodeVisitor/ProfilerNodeVisitor.php', + 'Twig\\Profiler\\Node\\EnterProfileNode' => $vendorDir . '/twig/twig/src/Profiler/Node/EnterProfileNode.php', + 'Twig\\Profiler\\Node\\LeaveProfileNode' => $vendorDir . '/twig/twig/src/Profiler/Node/LeaveProfileNode.php', + 'Twig\\Profiler\\Profile' => $vendorDir . '/twig/twig/src/Profiler/Profile.php', + 'Twig\\RuntimeLoader\\ContainerRuntimeLoader' => $vendorDir . '/twig/twig/src/RuntimeLoader/ContainerRuntimeLoader.php', + 'Twig\\RuntimeLoader\\FactoryRuntimeLoader' => $vendorDir . '/twig/twig/src/RuntimeLoader/FactoryRuntimeLoader.php', + 'Twig\\RuntimeLoader\\RuntimeLoaderInterface' => $vendorDir . '/twig/twig/src/RuntimeLoader/RuntimeLoaderInterface.php', + 'Twig\\Sandbox\\SecurityError' => $vendorDir . '/twig/twig/src/Sandbox/SecurityError.php', + 'Twig\\Sandbox\\SecurityNotAllowedFilterError' => $vendorDir . '/twig/twig/src/Sandbox/SecurityNotAllowedFilterError.php', + 'Twig\\Sandbox\\SecurityNotAllowedFunctionError' => $vendorDir . '/twig/twig/src/Sandbox/SecurityNotAllowedFunctionError.php', + 'Twig\\Sandbox\\SecurityNotAllowedMethodError' => $vendorDir . '/twig/twig/src/Sandbox/SecurityNotAllowedMethodError.php', + 'Twig\\Sandbox\\SecurityNotAllowedPropertyError' => $vendorDir . '/twig/twig/src/Sandbox/SecurityNotAllowedPropertyError.php', + 'Twig\\Sandbox\\SecurityNotAllowedTagError' => $vendorDir . '/twig/twig/src/Sandbox/SecurityNotAllowedTagError.php', + 'Twig\\Sandbox\\SecurityPolicy' => $vendorDir . '/twig/twig/src/Sandbox/SecurityPolicy.php', + 'Twig\\Sandbox\\SecurityPolicyInterface' => $vendorDir . '/twig/twig/src/Sandbox/SecurityPolicyInterface.php', + 'Twig\\Source' => $vendorDir . '/twig/twig/src/Source.php', + 'Twig\\Template' => $vendorDir . '/twig/twig/src/Template.php', + 'Twig\\TemplateWrapper' => $vendorDir . '/twig/twig/src/TemplateWrapper.php', + 'Twig\\Test\\IntegrationTestCase' => $vendorDir . '/twig/twig/src/Test/IntegrationTestCase.php', + 'Twig\\Test\\NodeTestCase' => $vendorDir . '/twig/twig/src/Test/NodeTestCase.php', + 'Twig\\Token' => $vendorDir . '/twig/twig/src/Token.php', + 'Twig\\TokenParser\\AbstractTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/AbstractTokenParser.php', + 'Twig\\TokenParser\\ApplyTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/ApplyTokenParser.php', + 'Twig\\TokenParser\\AutoEscapeTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/AutoEscapeTokenParser.php', + 'Twig\\TokenParser\\BlockTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/BlockTokenParser.php', + 'Twig\\TokenParser\\DeprecatedTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/DeprecatedTokenParser.php', + 'Twig\\TokenParser\\DoTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/DoTokenParser.php', + 'Twig\\TokenParser\\EmbedTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/EmbedTokenParser.php', + 'Twig\\TokenParser\\ExtendsTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/ExtendsTokenParser.php', + 'Twig\\TokenParser\\FlushTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/FlushTokenParser.php', + 'Twig\\TokenParser\\ForTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/ForTokenParser.php', + 'Twig\\TokenParser\\FromTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/FromTokenParser.php', + 'Twig\\TokenParser\\IfTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/IfTokenParser.php', + 'Twig\\TokenParser\\ImportTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/ImportTokenParser.php', + 'Twig\\TokenParser\\IncludeTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/IncludeTokenParser.php', + 'Twig\\TokenParser\\MacroTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/MacroTokenParser.php', + 'Twig\\TokenParser\\SandboxTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/SandboxTokenParser.php', + 'Twig\\TokenParser\\SetTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/SetTokenParser.php', + 'Twig\\TokenParser\\TokenParserInterface' => $vendorDir . '/twig/twig/src/TokenParser/TokenParserInterface.php', + 'Twig\\TokenParser\\UseTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/UseTokenParser.php', + 'Twig\\TokenParser\\WithTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/WithTokenParser.php', + 'Twig\\TokenStream' => $vendorDir . '/twig/twig/src/TokenStream.php', + 'Twig\\TwigFilter' => $vendorDir . '/twig/twig/src/TwigFilter.php', + 'Twig\\TwigFunction' => $vendorDir . '/twig/twig/src/TwigFunction.php', + 'Twig\\TwigTest' => $vendorDir . '/twig/twig/src/TwigTest.php', + 'Twig\\Util\\DeprecationCollector' => $vendorDir . '/twig/twig/src/Util/DeprecationCollector.php', + 'Twig\\Util\\TemplateDirIterator' => $vendorDir . '/twig/twig/src/Util/TemplateDirIterator.php', + 'Whoops\\Exception\\ErrorException' => $vendorDir . '/filp/whoops/src/Whoops/Exception/ErrorException.php', + 'Whoops\\Exception\\Formatter' => $vendorDir . '/filp/whoops/src/Whoops/Exception/Formatter.php', + 'Whoops\\Exception\\Frame' => $vendorDir . '/filp/whoops/src/Whoops/Exception/Frame.php', + 'Whoops\\Exception\\FrameCollection' => $vendorDir . '/filp/whoops/src/Whoops/Exception/FrameCollection.php', + 'Whoops\\Exception\\Inspector' => $vendorDir . '/filp/whoops/src/Whoops/Exception/Inspector.php', + 'Whoops\\Handler\\CallbackHandler' => $vendorDir . '/filp/whoops/src/Whoops/Handler/CallbackHandler.php', + 'Whoops\\Handler\\Handler' => $vendorDir . '/filp/whoops/src/Whoops/Handler/Handler.php', + 'Whoops\\Handler\\HandlerInterface' => $vendorDir . '/filp/whoops/src/Whoops/Handler/HandlerInterface.php', + 'Whoops\\Handler\\JsonResponseHandler' => $vendorDir . '/filp/whoops/src/Whoops/Handler/JsonResponseHandler.php', + 'Whoops\\Handler\\PlainTextHandler' => $vendorDir . '/filp/whoops/src/Whoops/Handler/PlainTextHandler.php', + 'Whoops\\Handler\\PrettyPageHandler' => $vendorDir . '/filp/whoops/src/Whoops/Handler/PrettyPageHandler.php', + 'Whoops\\Handler\\XmlResponseHandler' => $vendorDir . '/filp/whoops/src/Whoops/Handler/XmlResponseHandler.php', + 'Whoops\\Run' => $vendorDir . '/filp/whoops/src/Whoops/Run.php', + 'Whoops\\RunInterface' => $vendorDir . '/filp/whoops/src/Whoops/RunInterface.php', + 'Whoops\\Util\\HtmlDumperOutput' => $vendorDir . '/filp/whoops/src/Whoops/Util/HtmlDumperOutput.php', + 'Whoops\\Util\\Misc' => $vendorDir . '/filp/whoops/src/Whoops/Util/Misc.php', + 'Whoops\\Util\\SystemFacade' => $vendorDir . '/filp/whoops/src/Whoops/Util/SystemFacade.php', + 'Whoops\\Util\\TemplateHelper' => $vendorDir . '/filp/whoops/src/Whoops/Util/TemplateHelper.php', +); diff --git a/soc/2020/daily_report/archive/app/vendor/composer/autoload_files.php b/soc/2020/daily_report/archive/app/vendor/composer/autoload_files.php new file mode 100644 index 0000000..deff3dc --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/composer/autoload_files.php @@ -0,0 +1,18 @@ + $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', + '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php', + '7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php', + '253c157292f75eb38082b5acb06f3f01' => $vendorDir . '/nikic/fast-route/src/functions.php', + 'bd9634f2d41831496de0d3dfe4c94881' => $vendorDir . '/symfony/polyfill-php56/bootstrap.php', + '667aeda72477189d0494fecd327c3641' => $vendorDir . '/symfony/var-dumper/Resources/functions/dump.php', + 'b33e3d135e5d9e47d845c576147bda89' => $vendorDir . '/php-di/php-di/src/functions.php', + 'fe62ba7e10580d903cc46d808b5961a4' => $vendorDir . '/tightenco/collect/src/Collect/Support/helpers.php', + 'caf31cc6ec7cf2241cb6f12c226c3846' => $vendorDir . '/tightenco/collect/src/Collect/Support/alias.php', +); diff --git a/soc/2020/daily_report/archive/app/vendor/composer/autoload_namespaces.php b/soc/2020/daily_report/archive/app/vendor/composer/autoload_namespaces.php new file mode 100644 index 0000000..50d4a72 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/composer/autoload_namespaces.php @@ -0,0 +1,11 @@ + array($vendorDir . '/erusev/parsedown-extra'), + 'Parsedown' => array($vendorDir . '/erusev/parsedown'), +); diff --git a/soc/2020/daily_report/archive/app/vendor/composer/autoload_psr4.php b/soc/2020/daily_report/archive/app/vendor/composer/autoload_psr4.php new file mode 100644 index 0000000..24c3226 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/composer/autoload_psr4.php @@ -0,0 +1,44 @@ + array($vendorDir . '/filp/whoops/src/Whoops'), + 'Twig\\' => array($vendorDir . '/twig/twig/src'), + 'Tightenco\\Collect\\' => array($vendorDir . '/tightenco/collect/src/Collect'), + 'Symfony\\Polyfill\\Util\\' => array($vendorDir . '/symfony/polyfill-util'), + 'Symfony\\Polyfill\\Php56\\' => array($vendorDir . '/symfony/polyfill-php56'), + 'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'), + 'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'), + 'Symfony\\Contracts\\Translation\\' => array($vendorDir . '/symfony/translation-contracts'), + 'Symfony\\Component\\Yaml\\' => array($vendorDir . '/symfony/yaml'), + 'Symfony\\Component\\VarDumper\\' => array($vendorDir . '/symfony/var-dumper'), + 'Symfony\\Component\\Translation\\' => array($vendorDir . '/symfony/translation'), + 'Symfony\\Component\\Finder\\' => array($vendorDir . '/symfony/finder'), + 'SuperClosure\\' => array($vendorDir . '/jeremeamia/superclosure/src'), + 'Slim\\Views\\' => array($vendorDir . '/slim/twig-view/src'), + 'Slim\\Psr7\\' => array($vendorDir . '/slim/psr7/src'), + 'Slim\\' => array($vendorDir . '/slim/slim/Slim'), + 'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'), + 'Psr\\Http\\Server\\' => array($vendorDir . '/psr/http-server-handler/src', $vendorDir . '/psr/http-server-middleware/src'), + 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-factory/src', $vendorDir . '/psr/http-message/src'), + 'Psr\\Container\\' => array($vendorDir . '/psr/container/src'), + 'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'), + 'PhpParser\\' => array($vendorDir . '/nikic/php-parser/lib/PhpParser'), + 'PhpOption\\' => array($vendorDir . '/phpoption/phpoption/src/PhpOption'), + 'PhpDocReader\\' => array($vendorDir . '/php-di/phpdoc-reader/src/PhpDocReader'), + 'PHLAK\\Utilities\\' => array($vendorDir . '/phlak/glob/src'), + 'Middlewares\\Utils\\' => array($vendorDir . '/middlewares/utils/src'), + 'Middlewares\\' => array($vendorDir . '/middlewares/cache/src'), + 'Micheh\\Cache\\' => array($vendorDir . '/micheh/psr7-cache/src'), + 'Invoker\\' => array($vendorDir . '/php-di/invoker/src'), + 'Fig\\Http\\Message\\' => array($vendorDir . '/fig/http-message-util/src'), + 'FastRoute\\' => array($vendorDir . '/nikic/fast-route/src'), + 'Dotenv\\' => array($vendorDir . '/vlucas/phpdotenv/src'), + 'DI\\Bridge\\Slim\\' => array($vendorDir . '/php-di/slim-bridge/src'), + 'DI\\' => array($vendorDir . '/php-di/php-di/src'), + 'App\\' => array($baseDir . '/app/src'), +); diff --git a/soc/2020/daily_report/archive/app/vendor/composer/autoload_real.php b/soc/2020/daily_report/archive/app/vendor/composer/autoload_real.php new file mode 100644 index 0000000..1baea5f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/composer/autoload_real.php @@ -0,0 +1,73 @@ += 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); + if ($useStaticLoader) { + require_once __DIR__ . '/autoload_static.php'; + + call_user_func(\Composer\Autoload\ComposerStaticInitfabb7156af7a34291af2e3692e1864d3::getInitializer($loader)); + } else { + $map = require __DIR__ . '/autoload_namespaces.php'; + foreach ($map as $namespace => $path) { + $loader->set($namespace, $path); + } + + $map = require __DIR__ . '/autoload_psr4.php'; + foreach ($map as $namespace => $path) { + $loader->setPsr4($namespace, $path); + } + + $classMap = require __DIR__ . '/autoload_classmap.php'; + if ($classMap) { + $loader->addClassMap($classMap); + } + } + + $loader->register(true); + + if ($useStaticLoader) { + $includeFiles = Composer\Autoload\ComposerStaticInitfabb7156af7a34291af2e3692e1864d3::$files; + } else { + $includeFiles = require __DIR__ . '/autoload_files.php'; + } + foreach ($includeFiles as $fileIdentifier => $file) { + composerRequirefabb7156af7a34291af2e3692e1864d3($fileIdentifier, $file); + } + + return $loader; + } +} + +function composerRequirefabb7156af7a34291af2e3692e1864d3($fileIdentifier, $file) +{ + if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { + require $file; + + $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/composer/autoload_static.php b/soc/2020/daily_report/archive/app/vendor/composer/autoload_static.php new file mode 100644 index 0000000..0cd164a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/composer/autoload_static.php @@ -0,0 +1,1184 @@ + __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', + '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', + '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php', + '253c157292f75eb38082b5acb06f3f01' => __DIR__ . '/..' . '/nikic/fast-route/src/functions.php', + 'bd9634f2d41831496de0d3dfe4c94881' => __DIR__ . '/..' . '/symfony/polyfill-php56/bootstrap.php', + '667aeda72477189d0494fecd327c3641' => __DIR__ . '/..' . '/symfony/var-dumper/Resources/functions/dump.php', + 'b33e3d135e5d9e47d845c576147bda89' => __DIR__ . '/..' . '/php-di/php-di/src/functions.php', + 'fe62ba7e10580d903cc46d808b5961a4' => __DIR__ . '/..' . '/tightenco/collect/src/Collect/Support/helpers.php', + 'caf31cc6ec7cf2241cb6f12c226c3846' => __DIR__ . '/..' . '/tightenco/collect/src/Collect/Support/alias.php', + ); + + public static $prefixLengthsPsr4 = array ( + 'W' => + array ( + 'Whoops\\' => 7, + ), + 'T' => + array ( + 'Twig\\' => 5, + 'Tightenco\\Collect\\' => 18, + ), + 'S' => + array ( + 'Symfony\\Polyfill\\Util\\' => 22, + 'Symfony\\Polyfill\\Php56\\' => 23, + 'Symfony\\Polyfill\\Mbstring\\' => 26, + 'Symfony\\Polyfill\\Ctype\\' => 23, + 'Symfony\\Contracts\\Translation\\' => 30, + 'Symfony\\Component\\Yaml\\' => 23, + 'Symfony\\Component\\VarDumper\\' => 28, + 'Symfony\\Component\\Translation\\' => 30, + 'Symfony\\Component\\Finder\\' => 25, + 'SuperClosure\\' => 13, + 'Slim\\Views\\' => 11, + 'Slim\\Psr7\\' => 10, + 'Slim\\' => 5, + ), + 'P' => + array ( + 'Psr\\Log\\' => 8, + 'Psr\\Http\\Server\\' => 16, + 'Psr\\Http\\Message\\' => 17, + 'Psr\\Container\\' => 14, + 'Psr\\Cache\\' => 10, + 'PhpParser\\' => 10, + 'PhpOption\\' => 10, + 'PhpDocReader\\' => 13, + 'PHLAK\\Utilities\\' => 16, + ), + 'M' => + array ( + 'Middlewares\\Utils\\' => 18, + 'Middlewares\\' => 12, + 'Micheh\\Cache\\' => 13, + ), + 'I' => + array ( + 'Invoker\\' => 8, + ), + 'F' => + array ( + 'Fig\\Http\\Message\\' => 17, + 'FastRoute\\' => 10, + ), + 'D' => + array ( + 'Dotenv\\' => 7, + 'DI\\Bridge\\Slim\\' => 15, + 'DI\\' => 3, + ), + 'A' => + array ( + 'App\\' => 4, + ), + ); + + public static $prefixDirsPsr4 = array ( + 'Whoops\\' => + array ( + 0 => __DIR__ . '/..' . '/filp/whoops/src/Whoops', + ), + 'Twig\\' => + array ( + 0 => __DIR__ . '/..' . '/twig/twig/src', + ), + 'Tightenco\\Collect\\' => + array ( + 0 => __DIR__ . '/..' . '/tightenco/collect/src/Collect', + ), + 'Symfony\\Polyfill\\Util\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-util', + ), + 'Symfony\\Polyfill\\Php56\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-php56', + ), + 'Symfony\\Polyfill\\Mbstring\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring', + ), + 'Symfony\\Polyfill\\Ctype\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-ctype', + ), + 'Symfony\\Contracts\\Translation\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/translation-contracts', + ), + 'Symfony\\Component\\Yaml\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/yaml', + ), + 'Symfony\\Component\\VarDumper\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/var-dumper', + ), + 'Symfony\\Component\\Translation\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/translation', + ), + 'Symfony\\Component\\Finder\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/finder', + ), + 'SuperClosure\\' => + array ( + 0 => __DIR__ . '/..' . '/jeremeamia/superclosure/src', + ), + 'Slim\\Views\\' => + array ( + 0 => __DIR__ . '/..' . '/slim/twig-view/src', + ), + 'Slim\\Psr7\\' => + array ( + 0 => __DIR__ . '/..' . '/slim/psr7/src', + ), + 'Slim\\' => + array ( + 0 => __DIR__ . '/..' . '/slim/slim/Slim', + ), + 'Psr\\Log\\' => + array ( + 0 => __DIR__ . '/..' . '/psr/log/Psr/Log', + ), + 'Psr\\Http\\Server\\' => + array ( + 0 => __DIR__ . '/..' . '/psr/http-server-handler/src', + 1 => __DIR__ . '/..' . '/psr/http-server-middleware/src', + ), + 'Psr\\Http\\Message\\' => + array ( + 0 => __DIR__ . '/..' . '/psr/http-factory/src', + 1 => __DIR__ . '/..' . '/psr/http-message/src', + ), + 'Psr\\Container\\' => + array ( + 0 => __DIR__ . '/..' . '/psr/container/src', + ), + 'Psr\\Cache\\' => + array ( + 0 => __DIR__ . '/..' . '/psr/cache/src', + ), + 'PhpParser\\' => + array ( + 0 => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser', + ), + 'PhpOption\\' => + array ( + 0 => __DIR__ . '/..' . '/phpoption/phpoption/src/PhpOption', + ), + 'PhpDocReader\\' => + array ( + 0 => __DIR__ . '/..' . '/php-di/phpdoc-reader/src/PhpDocReader', + ), + 'PHLAK\\Utilities\\' => + array ( + 0 => __DIR__ . '/..' . '/phlak/glob/src', + ), + 'Middlewares\\Utils\\' => + array ( + 0 => __DIR__ . '/..' . '/middlewares/utils/src', + ), + 'Middlewares\\' => + array ( + 0 => __DIR__ . '/..' . '/middlewares/cache/src', + ), + 'Micheh\\Cache\\' => + array ( + 0 => __DIR__ . '/..' . '/micheh/psr7-cache/src', + ), + 'Invoker\\' => + array ( + 0 => __DIR__ . '/..' . '/php-di/invoker/src', + ), + 'Fig\\Http\\Message\\' => + array ( + 0 => __DIR__ . '/..' . '/fig/http-message-util/src', + ), + 'FastRoute\\' => + array ( + 0 => __DIR__ . '/..' . '/nikic/fast-route/src', + ), + 'Dotenv\\' => + array ( + 0 => __DIR__ . '/..' . '/vlucas/phpdotenv/src', + ), + 'DI\\Bridge\\Slim\\' => + array ( + 0 => __DIR__ . '/..' . '/php-di/slim-bridge/src', + ), + 'DI\\' => + array ( + 0 => __DIR__ . '/..' . '/php-di/php-di/src', + ), + 'App\\' => + array ( + 0 => __DIR__ . '/../../..' . '/app/src', + ), + ); + + public static $prefixesPsr0 = array ( + 'P' => + array ( + 'ParsedownExtra' => + array ( + 0 => __DIR__ . '/..' . '/erusev/parsedown-extra', + ), + 'Parsedown' => + array ( + 0 => __DIR__ . '/..' . '/erusev/parsedown', + ), + ), + ); + + public static $classMap = array ( + 'App\\Bootstrap\\AppManager' => __DIR__ . '/../../..' . '/app/src/Bootstrap/AppManager.php', + 'App\\Bootstrap\\ExceptionManager' => __DIR__ . '/../../..' . '/app/src/Bootstrap/ExceptionManager.php', + 'App\\Bootstrap\\MiddlewareManager' => __DIR__ . '/../../..' . '/app/src/Bootstrap/MiddlewareManager.php', + 'App\\Bootstrap\\RouteManager' => __DIR__ . '/../../..' . '/app/src/Bootstrap/RouteManager.php', + 'App\\Controllers\\DirectoryController' => __DIR__ . '/../../..' . '/app/src/Controllers/DirectoryController.php', + 'App\\Controllers\\FileInfoController' => __DIR__ . '/../../..' . '/app/src/Controllers/FileInfoController.php', + 'App\\Controllers\\IndexController' => __DIR__ . '/../../..' . '/app/src/Controllers/IndexController.php', + 'App\\Controllers\\SearchController' => __DIR__ . '/../../..' . '/app/src/Controllers/SearchController.php', + 'App\\Controllers\\ZipController' => __DIR__ . '/../../..' . '/app/src/Controllers/ZipController.php', + 'App\\Exceptions\\ErrorHandler' => __DIR__ . '/../../..' . '/app/src/Exceptions/ErrorHandler.php', + 'App\\Factories\\FinderFactory' => __DIR__ . '/../../..' . '/app/src/Factories/FinderFactory.php', + 'App\\Factories\\TranslationFactory' => __DIR__ . '/../../..' . '/app/src/Factories/TranslationFactory.php', + 'App\\Factories\\TwigFactory' => __DIR__ . '/../../..' . '/app/src/Factories/TwigFactory.php', + 'App\\Middlewares\\WhoopsMiddleware' => __DIR__ . '/../../..' . '/app/src/Middlewares/WhoopsMiddleware.php', + 'App\\SortMethods\\Accessed' => __DIR__ . '/../../..' . '/app/src/SortMethods/Accessed.php', + 'App\\SortMethods\\Changed' => __DIR__ . '/../../..' . '/app/src/SortMethods/Changed.php', + 'App\\SortMethods\\Modified' => __DIR__ . '/../../..' . '/app/src/SortMethods/Modified.php', + 'App\\SortMethods\\Name' => __DIR__ . '/../../..' . '/app/src/SortMethods/Name.php', + 'App\\SortMethods\\Natural' => __DIR__ . '/../../..' . '/app/src/SortMethods/Natural.php', + 'App\\SortMethods\\SortMethod' => __DIR__ . '/../../..' . '/app/src/SortMethods/SortMethod.php', + 'App\\SortMethods\\Type' => __DIR__ . '/../../..' . '/app/src/SortMethods/Type.php', + 'App\\Support\\Helpers' => __DIR__ . '/../../..' . '/app/src/Support/Helpers.php', + 'App\\Support\\Str' => __DIR__ . '/../../..' . '/app/src/Support/Str.php', + 'App\\TemporaryFile' => __DIR__ . '/../../..' . '/app/src/TemporaryFile.php', + 'App\\ViewFunctions\\Asset' => __DIR__ . '/../../..' . '/app/src/ViewFunctions/Asset.php', + 'App\\ViewFunctions\\Breadcrumbs' => __DIR__ . '/../../..' . '/app/src/ViewFunctions/Breadcrumbs.php', + 'App\\ViewFunctions\\Config' => __DIR__ . '/../../..' . '/app/src/ViewFunctions/Config.php', + 'App\\ViewFunctions\\FileUrl' => __DIR__ . '/../../..' . '/app/src/ViewFunctions/FileUrl.php', + 'App\\ViewFunctions\\Icon' => __DIR__ . '/../../..' . '/app/src/ViewFunctions/Icon.php', + 'App\\ViewFunctions\\Markdown' => __DIR__ . '/../../..' . '/app/src/ViewFunctions/Markdown.php', + 'App\\ViewFunctions\\ParentUrl' => __DIR__ . '/../../..' . '/app/src/ViewFunctions/ParentUrl.php', + 'App\\ViewFunctions\\SizeForHumans' => __DIR__ . '/../../..' . '/app/src/ViewFunctions/SizeForHumans.php', + 'App\\ViewFunctions\\Translate' => __DIR__ . '/../../..' . '/app/src/ViewFunctions/Translate.php', + 'App\\ViewFunctions\\Url' => __DIR__ . '/../../..' . '/app/src/ViewFunctions/Url.php', + 'App\\ViewFunctions\\ViewFunction' => __DIR__ . '/../../..' . '/app/src/ViewFunctions/ViewFunction.php', + 'App\\ViewFunctions\\ZipUrl' => __DIR__ . '/../../..' . '/app/src/ViewFunctions/ZipUrl.php', + 'DI\\Annotation\\Inject' => __DIR__ . '/..' . '/php-di/php-di/src/Annotation/Inject.php', + 'DI\\Annotation\\Injectable' => __DIR__ . '/..' . '/php-di/php-di/src/Annotation/Injectable.php', + 'DI\\Bridge\\Slim\\Bridge' => __DIR__ . '/..' . '/php-di/slim-bridge/src/Bridge.php', + 'DI\\Bridge\\Slim\\CallableResolver' => __DIR__ . '/..' . '/php-di/slim-bridge/src/CallableResolver.php', + 'DI\\Bridge\\Slim\\ControllerInvoker' => __DIR__ . '/..' . '/php-di/slim-bridge/src/ControllerInvoker.php', + 'DI\\CompiledContainer' => __DIR__ . '/..' . '/php-di/php-di/src/CompiledContainer.php', + 'DI\\Compiler\\Compiler' => __DIR__ . '/..' . '/php-di/php-di/src/Compiler/Compiler.php', + 'DI\\Compiler\\ObjectCreationCompiler' => __DIR__ . '/..' . '/php-di/php-di/src/Compiler/ObjectCreationCompiler.php', + 'DI\\Compiler\\RequestedEntryHolder' => __DIR__ . '/..' . '/php-di/php-di/src/Compiler/RequestedEntryHolder.php', + 'DI\\Container' => __DIR__ . '/..' . '/php-di/php-di/src/Container.php', + 'DI\\ContainerBuilder' => __DIR__ . '/..' . '/php-di/php-di/src/ContainerBuilder.php', + 'DI\\Definition\\ArrayDefinition' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/ArrayDefinition.php', + 'DI\\Definition\\ArrayDefinitionExtension' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/ArrayDefinitionExtension.php', + 'DI\\Definition\\AutowireDefinition' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/AutowireDefinition.php', + 'DI\\Definition\\DecoratorDefinition' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/DecoratorDefinition.php', + 'DI\\Definition\\Definition' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Definition.php', + 'DI\\Definition\\Dumper\\ObjectDefinitionDumper' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Dumper/ObjectDefinitionDumper.php', + 'DI\\Definition\\EnvironmentVariableDefinition' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/EnvironmentVariableDefinition.php', + 'DI\\Definition\\Exception\\InvalidAnnotation' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Exception/InvalidAnnotation.php', + 'DI\\Definition\\Exception\\InvalidDefinition' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Exception/InvalidDefinition.php', + 'DI\\Definition\\ExtendsPreviousDefinition' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/ExtendsPreviousDefinition.php', + 'DI\\Definition\\FactoryDefinition' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/FactoryDefinition.php', + 'DI\\Definition\\Helper\\AutowireDefinitionHelper' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Helper/AutowireDefinitionHelper.php', + 'DI\\Definition\\Helper\\CreateDefinitionHelper' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Helper/CreateDefinitionHelper.php', + 'DI\\Definition\\Helper\\DefinitionHelper' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Helper/DefinitionHelper.php', + 'DI\\Definition\\Helper\\FactoryDefinitionHelper' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Helper/FactoryDefinitionHelper.php', + 'DI\\Definition\\InstanceDefinition' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/InstanceDefinition.php', + 'DI\\Definition\\ObjectDefinition' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/ObjectDefinition.php', + 'DI\\Definition\\ObjectDefinition\\MethodInjection' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/ObjectDefinition/MethodInjection.php', + 'DI\\Definition\\ObjectDefinition\\PropertyInjection' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/ObjectDefinition/PropertyInjection.php', + 'DI\\Definition\\Reference' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Reference.php', + 'DI\\Definition\\Resolver\\ArrayResolver' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Resolver/ArrayResolver.php', + 'DI\\Definition\\Resolver\\DecoratorResolver' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Resolver/DecoratorResolver.php', + 'DI\\Definition\\Resolver\\DefinitionResolver' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Resolver/DefinitionResolver.php', + 'DI\\Definition\\Resolver\\EnvironmentVariableResolver' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Resolver/EnvironmentVariableResolver.php', + 'DI\\Definition\\Resolver\\FactoryResolver' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Resolver/FactoryResolver.php', + 'DI\\Definition\\Resolver\\InstanceInjector' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Resolver/InstanceInjector.php', + 'DI\\Definition\\Resolver\\ObjectCreator' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Resolver/ObjectCreator.php', + 'DI\\Definition\\Resolver\\ParameterResolver' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Resolver/ParameterResolver.php', + 'DI\\Definition\\Resolver\\ResolverDispatcher' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Resolver/ResolverDispatcher.php', + 'DI\\Definition\\SelfResolvingDefinition' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/SelfResolvingDefinition.php', + 'DI\\Definition\\Source\\AnnotationBasedAutowiring' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Source/AnnotationBasedAutowiring.php', + 'DI\\Definition\\Source\\Autowiring' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Source/Autowiring.php', + 'DI\\Definition\\Source\\DefinitionArray' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Source/DefinitionArray.php', + 'DI\\Definition\\Source\\DefinitionFile' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Source/DefinitionFile.php', + 'DI\\Definition\\Source\\DefinitionNormalizer' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Source/DefinitionNormalizer.php', + 'DI\\Definition\\Source\\DefinitionSource' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Source/DefinitionSource.php', + 'DI\\Definition\\Source\\MutableDefinitionSource' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Source/MutableDefinitionSource.php', + 'DI\\Definition\\Source\\NoAutowiring' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Source/NoAutowiring.php', + 'DI\\Definition\\Source\\ReflectionBasedAutowiring' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Source/ReflectionBasedAutowiring.php', + 'DI\\Definition\\Source\\SourceCache' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Source/SourceCache.php', + 'DI\\Definition\\Source\\SourceChain' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Source/SourceChain.php', + 'DI\\Definition\\StringDefinition' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/StringDefinition.php', + 'DI\\Definition\\ValueDefinition' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/ValueDefinition.php', + 'DI\\DependencyException' => __DIR__ . '/..' . '/php-di/php-di/src/DependencyException.php', + 'DI\\FactoryInterface' => __DIR__ . '/..' . '/php-di/php-di/src/FactoryInterface.php', + 'DI\\Factory\\RequestedEntry' => __DIR__ . '/..' . '/php-di/php-di/src/Factory/RequestedEntry.php', + 'DI\\Invoker\\DefinitionParameterResolver' => __DIR__ . '/..' . '/php-di/php-di/src/Invoker/DefinitionParameterResolver.php', + 'DI\\Invoker\\FactoryParameterResolver' => __DIR__ . '/..' . '/php-di/php-di/src/Invoker/FactoryParameterResolver.php', + 'DI\\NotFoundException' => __DIR__ . '/..' . '/php-di/php-di/src/NotFoundException.php', + 'DI\\Proxy\\ProxyFactory' => __DIR__ . '/..' . '/php-di/php-di/src/Proxy/ProxyFactory.php', + 'Dotenv\\Dotenv' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Dotenv.php', + 'Dotenv\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Exception/ExceptionInterface.php', + 'Dotenv\\Exception\\InvalidFileException' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Exception/InvalidFileException.php', + 'Dotenv\\Exception\\InvalidPathException' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Exception/InvalidPathException.php', + 'Dotenv\\Exception\\ValidationException' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Exception/ValidationException.php', + 'Dotenv\\Loader\\Lines' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Loader/Lines.php', + 'Dotenv\\Loader\\Loader' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Loader/Loader.php', + 'Dotenv\\Loader\\LoaderInterface' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Loader/LoaderInterface.php', + 'Dotenv\\Loader\\Parser' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Loader/Parser.php', + 'Dotenv\\Loader\\Value' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Loader/Value.php', + 'Dotenv\\Regex\\Regex' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Regex/Regex.php', + 'Dotenv\\Repository\\AbstractRepository' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/AbstractRepository.php', + 'Dotenv\\Repository\\AdapterRepository' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/AdapterRepository.php', + 'Dotenv\\Repository\\Adapter\\ApacheAdapter' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/ApacheAdapter.php', + 'Dotenv\\Repository\\Adapter\\ArrayAdapter' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/ArrayAdapter.php', + 'Dotenv\\Repository\\Adapter\\AvailabilityInterface' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/AvailabilityInterface.php', + 'Dotenv\\Repository\\Adapter\\EnvConstAdapter' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/EnvConstAdapter.php', + 'Dotenv\\Repository\\Adapter\\PutenvAdapter' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/PutenvAdapter.php', + 'Dotenv\\Repository\\Adapter\\ReaderInterface' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/ReaderInterface.php', + 'Dotenv\\Repository\\Adapter\\ServerConstAdapter' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/ServerConstAdapter.php', + 'Dotenv\\Repository\\Adapter\\WriterInterface' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/WriterInterface.php', + 'Dotenv\\Repository\\RepositoryBuilder' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/RepositoryBuilder.php', + 'Dotenv\\Repository\\RepositoryInterface' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/RepositoryInterface.php', + 'Dotenv\\Result\\Error' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Result/Error.php', + 'Dotenv\\Result\\Result' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Result/Result.php', + 'Dotenv\\Result\\Success' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Result/Success.php', + 'Dotenv\\Store\\FileStore' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Store/FileStore.php', + 'Dotenv\\Store\\File\\Paths' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Store/File/Paths.php', + 'Dotenv\\Store\\File\\Reader' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Store/File/Reader.php', + 'Dotenv\\Store\\StoreBuilder' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Store/StoreBuilder.php', + 'Dotenv\\Store\\StoreInterface' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Store/StoreInterface.php', + 'Dotenv\\Validator' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Validator.php', + 'FastRoute\\BadRouteException' => __DIR__ . '/..' . '/nikic/fast-route/src/BadRouteException.php', + 'FastRoute\\DataGenerator' => __DIR__ . '/..' . '/nikic/fast-route/src/DataGenerator.php', + 'FastRoute\\DataGenerator\\CharCountBased' => __DIR__ . '/..' . '/nikic/fast-route/src/DataGenerator/CharCountBased.php', + 'FastRoute\\DataGenerator\\GroupCountBased' => __DIR__ . '/..' . '/nikic/fast-route/src/DataGenerator/GroupCountBased.php', + 'FastRoute\\DataGenerator\\GroupPosBased' => __DIR__ . '/..' . '/nikic/fast-route/src/DataGenerator/GroupPosBased.php', + 'FastRoute\\DataGenerator\\MarkBased' => __DIR__ . '/..' . '/nikic/fast-route/src/DataGenerator/MarkBased.php', + 'FastRoute\\DataGenerator\\RegexBasedAbstract' => __DIR__ . '/..' . '/nikic/fast-route/src/DataGenerator/RegexBasedAbstract.php', + 'FastRoute\\Dispatcher' => __DIR__ . '/..' . '/nikic/fast-route/src/Dispatcher.php', + 'FastRoute\\Dispatcher\\CharCountBased' => __DIR__ . '/..' . '/nikic/fast-route/src/Dispatcher/CharCountBased.php', + 'FastRoute\\Dispatcher\\GroupCountBased' => __DIR__ . '/..' . '/nikic/fast-route/src/Dispatcher/GroupCountBased.php', + 'FastRoute\\Dispatcher\\GroupPosBased' => __DIR__ . '/..' . '/nikic/fast-route/src/Dispatcher/GroupPosBased.php', + 'FastRoute\\Dispatcher\\MarkBased' => __DIR__ . '/..' . '/nikic/fast-route/src/Dispatcher/MarkBased.php', + 'FastRoute\\Dispatcher\\RegexBasedAbstract' => __DIR__ . '/..' . '/nikic/fast-route/src/Dispatcher/RegexBasedAbstract.php', + 'FastRoute\\Route' => __DIR__ . '/..' . '/nikic/fast-route/src/Route.php', + 'FastRoute\\RouteCollector' => __DIR__ . '/..' . '/nikic/fast-route/src/RouteCollector.php', + 'FastRoute\\RouteParser' => __DIR__ . '/..' . '/nikic/fast-route/src/RouteParser.php', + 'FastRoute\\RouteParser\\Std' => __DIR__ . '/..' . '/nikic/fast-route/src/RouteParser/Std.php', + 'Fig\\Http\\Message\\RequestMethodInterface' => __DIR__ . '/..' . '/fig/http-message-util/src/RequestMethodInterface.php', + 'Fig\\Http\\Message\\StatusCodeInterface' => __DIR__ . '/..' . '/fig/http-message-util/src/StatusCodeInterface.php', + 'Invoker\\CallableResolver' => __DIR__ . '/..' . '/php-di/invoker/src/CallableResolver.php', + 'Invoker\\Exception\\InvocationException' => __DIR__ . '/..' . '/php-di/invoker/src/Exception/InvocationException.php', + 'Invoker\\Exception\\NotCallableException' => __DIR__ . '/..' . '/php-di/invoker/src/Exception/NotCallableException.php', + 'Invoker\\Exception\\NotEnoughParametersException' => __DIR__ . '/..' . '/php-di/invoker/src/Exception/NotEnoughParametersException.php', + 'Invoker\\Invoker' => __DIR__ . '/..' . '/php-di/invoker/src/Invoker.php', + 'Invoker\\InvokerInterface' => __DIR__ . '/..' . '/php-di/invoker/src/InvokerInterface.php', + 'Invoker\\ParameterResolver\\AssociativeArrayResolver' => __DIR__ . '/..' . '/php-di/invoker/src/ParameterResolver/AssociativeArrayResolver.php', + 'Invoker\\ParameterResolver\\Container\\ParameterNameContainerResolver' => __DIR__ . '/..' . '/php-di/invoker/src/ParameterResolver/Container/ParameterNameContainerResolver.php', + 'Invoker\\ParameterResolver\\Container\\TypeHintContainerResolver' => __DIR__ . '/..' . '/php-di/invoker/src/ParameterResolver/Container/TypeHintContainerResolver.php', + 'Invoker\\ParameterResolver\\DefaultValueResolver' => __DIR__ . '/..' . '/php-di/invoker/src/ParameterResolver/DefaultValueResolver.php', + 'Invoker\\ParameterResolver\\NumericArrayResolver' => __DIR__ . '/..' . '/php-di/invoker/src/ParameterResolver/NumericArrayResolver.php', + 'Invoker\\ParameterResolver\\ParameterResolver' => __DIR__ . '/..' . '/php-di/invoker/src/ParameterResolver/ParameterResolver.php', + 'Invoker\\ParameterResolver\\ResolverChain' => __DIR__ . '/..' . '/php-di/invoker/src/ParameterResolver/ResolverChain.php', + 'Invoker\\ParameterResolver\\TypeHintResolver' => __DIR__ . '/..' . '/php-di/invoker/src/ParameterResolver/TypeHintResolver.php', + 'Invoker\\Reflection\\CallableReflection' => __DIR__ . '/..' . '/php-di/invoker/src/Reflection/CallableReflection.php', + 'Micheh\\Cache\\CacheUtil' => __DIR__ . '/..' . '/micheh/psr7-cache/src/CacheUtil.php', + 'Micheh\\Cache\\Header\\CacheControl' => __DIR__ . '/..' . '/micheh/psr7-cache/src/Header/CacheControl.php', + 'Micheh\\Cache\\Header\\RequestCacheControl' => __DIR__ . '/..' . '/micheh/psr7-cache/src/Header/RequestCacheControl.php', + 'Micheh\\Cache\\Header\\ResponseCacheControl' => __DIR__ . '/..' . '/micheh/psr7-cache/src/Header/ResponseCacheControl.php', + 'Middlewares\\Cache' => __DIR__ . '/..' . '/middlewares/cache/src/Cache.php', + 'Middlewares\\CachePrevention' => __DIR__ . '/..' . '/middlewares/cache/src/CachePrevention.php', + 'Middlewares\\Expires' => __DIR__ . '/..' . '/middlewares/cache/src/Expires.php', + 'Middlewares\\Utils\\CallableHandler' => __DIR__ . '/..' . '/middlewares/utils/src/CallableHandler.php', + 'Middlewares\\Utils\\Dispatcher' => __DIR__ . '/..' . '/middlewares/utils/src/Dispatcher.php', + 'Middlewares\\Utils\\Factory' => __DIR__ . '/..' . '/middlewares/utils/src/Factory.php', + 'Middlewares\\Utils\\FactoryDiscovery' => __DIR__ . '/..' . '/middlewares/utils/src/FactoryDiscovery.php', + 'Middlewares\\Utils\\FactoryInterface' => __DIR__ . '/..' . '/middlewares/utils/src/FactoryInterface.php', + 'Middlewares\\Utils\\HttpErrorException' => __DIR__ . '/..' . '/middlewares/utils/src/HttpErrorException.php', + 'Middlewares\\Utils\\RequestHandler' => __DIR__ . '/..' . '/middlewares/utils/src/RequestHandler.php', + 'Middlewares\\Utils\\RequestHandlerContainer' => __DIR__ . '/..' . '/middlewares/utils/src/RequestHandlerContainer.php', + 'PHLAK\\Utilities\\Glob' => __DIR__ . '/..' . '/phlak/glob/src/Glob.php', + 'Parsedown' => __DIR__ . '/..' . '/erusev/parsedown/Parsedown.php', + 'ParsedownExtra' => __DIR__ . '/..' . '/erusev/parsedown-extra/ParsedownExtra.php', + 'ParsedownExtraTest' => __DIR__ . '/..' . '/erusev/parsedown-extra/test/ParsedownExtraTest.php', + 'PhpDocReader\\AnnotationException' => __DIR__ . '/..' . '/php-di/phpdoc-reader/src/PhpDocReader/AnnotationException.php', + 'PhpDocReader\\PhpDocReader' => __DIR__ . '/..' . '/php-di/phpdoc-reader/src/PhpDocReader/PhpDocReader.php', + 'PhpDocReader\\PhpParser\\TokenParser' => __DIR__ . '/..' . '/php-di/phpdoc-reader/src/PhpDocReader/PhpParser/TokenParser.php', + 'PhpDocReader\\PhpParser\\UseStatementParser' => __DIR__ . '/..' . '/php-di/phpdoc-reader/src/PhpDocReader/PhpParser/UseStatementParser.php', + 'PhpOption\\LazyOption' => __DIR__ . '/..' . '/phpoption/phpoption/src/PhpOption/LazyOption.php', + 'PhpOption\\None' => __DIR__ . '/..' . '/phpoption/phpoption/src/PhpOption/None.php', + 'PhpOption\\Option' => __DIR__ . '/..' . '/phpoption/phpoption/src/PhpOption/Option.php', + 'PhpOption\\Some' => __DIR__ . '/..' . '/phpoption/phpoption/src/PhpOption/Some.php', + 'PhpParser\\Builder' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder.php', + 'PhpParser\\BuilderFactory' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/BuilderFactory.php', + 'PhpParser\\BuilderHelpers' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/BuilderHelpers.php', + 'PhpParser\\Builder\\Class_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Class_.php', + 'PhpParser\\Builder\\Declaration' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Declaration.php', + 'PhpParser\\Builder\\FunctionLike' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php', + 'PhpParser\\Builder\\Function_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Function_.php', + 'PhpParser\\Builder\\Interface_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Interface_.php', + 'PhpParser\\Builder\\Method' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Method.php', + 'PhpParser\\Builder\\Namespace_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php', + 'PhpParser\\Builder\\Param' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Param.php', + 'PhpParser\\Builder\\Property' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Property.php', + 'PhpParser\\Builder\\TraitUse' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php', + 'PhpParser\\Builder\\TraitUseAdaptation' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php', + 'PhpParser\\Builder\\Trait_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Trait_.php', + 'PhpParser\\Builder\\Use_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Use_.php', + 'PhpParser\\Comment' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Comment.php', + 'PhpParser\\Comment\\Doc' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Comment/Doc.php', + 'PhpParser\\ConstExprEvaluationException' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/ConstExprEvaluationException.php', + 'PhpParser\\ConstExprEvaluator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/ConstExprEvaluator.php', + 'PhpParser\\Error' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Error.php', + 'PhpParser\\ErrorHandler' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/ErrorHandler.php', + 'PhpParser\\ErrorHandler\\Collecting' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/ErrorHandler/Collecting.php', + 'PhpParser\\ErrorHandler\\Throwing' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php', + 'PhpParser\\Internal\\DiffElem' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Internal/DiffElem.php', + 'PhpParser\\Internal\\Differ' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Internal/Differ.php', + 'PhpParser\\Internal\\PrintableNewAnonClassNode' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php', + 'PhpParser\\Internal\\TokenStream' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php', + 'PhpParser\\JsonDecoder' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/JsonDecoder.php', + 'PhpParser\\Lexer' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer.php', + 'PhpParser\\Lexer\\Emulative' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php', + 'PhpParser\\Lexer\\TokenEmulator\\CoaleseEqualTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php', + 'PhpParser\\Lexer\\TokenEmulator\\FnTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php', + 'PhpParser\\Lexer\\TokenEmulator\\NumericLiteralSeparatorEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.php', + 'PhpParser\\Lexer\\TokenEmulator\\TokenEmulatorInterface' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulatorInterface.php', + 'PhpParser\\NameContext' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NameContext.php', + 'PhpParser\\Node' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node.php', + 'PhpParser\\NodeAbstract' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeAbstract.php', + 'PhpParser\\NodeDumper' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeDumper.php', + 'PhpParser\\NodeFinder' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeFinder.php', + 'PhpParser\\NodeTraverser' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeTraverser.php', + 'PhpParser\\NodeTraverserInterface' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php', + 'PhpParser\\NodeVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor.php', + 'PhpParser\\NodeVisitorAbstract' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php', + 'PhpParser\\NodeVisitor\\CloningVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php', + 'PhpParser\\NodeVisitor\\FindingVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php', + 'PhpParser\\NodeVisitor\\FirstFindingVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php', + 'PhpParser\\NodeVisitor\\NameResolver' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php', + 'PhpParser\\Node\\Arg' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Arg.php', + 'PhpParser\\Node\\Const_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Const_.php', + 'PhpParser\\Node\\Expr' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr.php', + 'PhpParser\\Node\\Expr\\ArrayDimFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php', + 'PhpParser\\Node\\Expr\\ArrayItem' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php', + 'PhpParser\\Node\\Expr\\Array_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php', + 'PhpParser\\Node\\Expr\\ArrowFunction' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php', + 'PhpParser\\Node\\Expr\\Assign' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php', + 'PhpParser\\Node\\Expr\\AssignOp' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php', + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseAnd' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php', + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseOr' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.php', + 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseXor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.php', + 'PhpParser\\Node\\Expr\\AssignOp\\Coalesce' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Coalesce.php', + 'PhpParser\\Node\\Expr\\AssignOp\\Concat' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Concat.php', + 'PhpParser\\Node\\Expr\\AssignOp\\Div' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Div.php', + 'PhpParser\\Node\\Expr\\AssignOp\\Minus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Minus.php', + 'PhpParser\\Node\\Expr\\AssignOp\\Mod' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mod.php', + 'PhpParser\\Node\\Expr\\AssignOp\\Mul' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mul.php', + 'PhpParser\\Node\\Expr\\AssignOp\\Plus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Plus.php', + 'PhpParser\\Node\\Expr\\AssignOp\\Pow' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Pow.php', + 'PhpParser\\Node\\Expr\\AssignOp\\ShiftLeft' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.php', + 'PhpParser\\Node\\Expr\\AssignOp\\ShiftRight' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.php', + 'PhpParser\\Node\\Expr\\AssignRef' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignRef.php', + 'PhpParser\\Node\\Expr\\BinaryOp' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseAnd' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseOr' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseXor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseXor.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanAnd' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanOr' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Coalesce' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Coalesce.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Concat' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Concat.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Div' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Div.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Equal' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Equal.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Greater' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Greater.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\GreaterOrEqual' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Identical' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalAnd' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalOr' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalXor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Minus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Minus.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Mod' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mod.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Mul' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mul.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\NotEqual' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\NotIdentical' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Plus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Plus.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Pow' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pow.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftLeft' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftRight' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Smaller' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\SmallerOrEqual' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.php', + 'PhpParser\\Node\\Expr\\BinaryOp\\Spaceship' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.php', + 'PhpParser\\Node\\Expr\\BitwiseNot' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php', + 'PhpParser\\Node\\Expr\\BooleanNot' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php', + 'PhpParser\\Node\\Expr\\Cast' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php', + 'PhpParser\\Node\\Expr\\Cast\\Array_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php', + 'PhpParser\\Node\\Expr\\Cast\\Bool_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Bool_.php', + 'PhpParser\\Node\\Expr\\Cast\\Double' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Double.php', + 'PhpParser\\Node\\Expr\\Cast\\Int_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Int_.php', + 'PhpParser\\Node\\Expr\\Cast\\Object_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Object_.php', + 'PhpParser\\Node\\Expr\\Cast\\String_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/String_.php', + 'PhpParser\\Node\\Expr\\Cast\\Unset_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Unset_.php', + 'PhpParser\\Node\\Expr\\ClassConstFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ClassConstFetch.php', + 'PhpParser\\Node\\Expr\\Clone_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php', + 'PhpParser\\Node\\Expr\\Closure' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php', + 'PhpParser\\Node\\Expr\\ClosureUse' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php', + 'PhpParser\\Node\\Expr\\ConstFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php', + 'PhpParser\\Node\\Expr\\Empty_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php', + 'PhpParser\\Node\\Expr\\Error' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php', + 'PhpParser\\Node\\Expr\\ErrorSuppress' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php', + 'PhpParser\\Node\\Expr\\Eval_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php', + 'PhpParser\\Node\\Expr\\Exit_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php', + 'PhpParser\\Node\\Expr\\FuncCall' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php', + 'PhpParser\\Node\\Expr\\Include_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php', + 'PhpParser\\Node\\Expr\\Instanceof_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php', + 'PhpParser\\Node\\Expr\\Isset_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php', + 'PhpParser\\Node\\Expr\\List_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php', + 'PhpParser\\Node\\Expr\\MethodCall' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php', + 'PhpParser\\Node\\Expr\\New_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php', + 'PhpParser\\Node\\Expr\\PostDec' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php', + 'PhpParser\\Node\\Expr\\PostInc' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php', + 'PhpParser\\Node\\Expr\\PreDec' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php', + 'PhpParser\\Node\\Expr\\PreInc' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php', + 'PhpParser\\Node\\Expr\\Print_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php', + 'PhpParser\\Node\\Expr\\PropertyFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php', + 'PhpParser\\Node\\Expr\\ShellExec' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php', + 'PhpParser\\Node\\Expr\\StaticCall' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php', + 'PhpParser\\Node\\Expr\\StaticPropertyFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php', + 'PhpParser\\Node\\Expr\\Ternary' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php', + 'PhpParser\\Node\\Expr\\UnaryMinus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php', + 'PhpParser\\Node\\Expr\\UnaryPlus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php', + 'PhpParser\\Node\\Expr\\Variable' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php', + 'PhpParser\\Node\\Expr\\YieldFrom' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php', + 'PhpParser\\Node\\Expr\\Yield_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php', + 'PhpParser\\Node\\FunctionLike' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php', + 'PhpParser\\Node\\Identifier' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Identifier.php', + 'PhpParser\\Node\\Name' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Name.php', + 'PhpParser\\Node\\Name\\FullyQualified' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php', + 'PhpParser\\Node\\Name\\Relative' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php', + 'PhpParser\\Node\\NullableType' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/NullableType.php', + 'PhpParser\\Node\\Param' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Param.php', + 'PhpParser\\Node\\Scalar' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar.php', + 'PhpParser\\Node\\Scalar\\DNumber' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php', + 'PhpParser\\Node\\Scalar\\Encapsed' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php', + 'PhpParser\\Node\\Scalar\\EncapsedStringPart' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/EncapsedStringPart.php', + 'PhpParser\\Node\\Scalar\\LNumber' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php', + 'PhpParser\\Node\\Scalar\\MagicConst' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php', + 'PhpParser\\Node\\Scalar\\MagicConst\\Class_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php', + 'PhpParser\\Node\\Scalar\\MagicConst\\Dir' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Dir.php', + 'PhpParser\\Node\\Scalar\\MagicConst\\File' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/File.php', + 'PhpParser\\Node\\Scalar\\MagicConst\\Function_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Function_.php', + 'PhpParser\\Node\\Scalar\\MagicConst\\Line' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Line.php', + 'PhpParser\\Node\\Scalar\\MagicConst\\Method' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Method.php', + 'PhpParser\\Node\\Scalar\\MagicConst\\Namespace_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.php', + 'PhpParser\\Node\\Scalar\\MagicConst\\Trait_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Trait_.php', + 'PhpParser\\Node\\Scalar\\String_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php', + 'PhpParser\\Node\\Stmt' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt.php', + 'PhpParser\\Node\\Stmt\\Break_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.php', + 'PhpParser\\Node\\Stmt\\Case_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php', + 'PhpParser\\Node\\Stmt\\Catch_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php', + 'PhpParser\\Node\\Stmt\\ClassConst' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php', + 'PhpParser\\Node\\Stmt\\ClassLike' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php', + 'PhpParser\\Node\\Stmt\\ClassMethod' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php', + 'PhpParser\\Node\\Stmt\\Class_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php', + 'PhpParser\\Node\\Stmt\\Const_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php', + 'PhpParser\\Node\\Stmt\\Continue_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php', + 'PhpParser\\Node\\Stmt\\DeclareDeclare' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php', + 'PhpParser\\Node\\Stmt\\Declare_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php', + 'PhpParser\\Node\\Stmt\\Do_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php', + 'PhpParser\\Node\\Stmt\\Echo_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php', + 'PhpParser\\Node\\Stmt\\ElseIf_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php', + 'PhpParser\\Node\\Stmt\\Else_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php', + 'PhpParser\\Node\\Stmt\\Expression' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php', + 'PhpParser\\Node\\Stmt\\Finally_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php', + 'PhpParser\\Node\\Stmt\\For_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php', + 'PhpParser\\Node\\Stmt\\Foreach_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php', + 'PhpParser\\Node\\Stmt\\Function_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php', + 'PhpParser\\Node\\Stmt\\Global_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php', + 'PhpParser\\Node\\Stmt\\Goto_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php', + 'PhpParser\\Node\\Stmt\\GroupUse' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php', + 'PhpParser\\Node\\Stmt\\HaltCompiler' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php', + 'PhpParser\\Node\\Stmt\\If_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php', + 'PhpParser\\Node\\Stmt\\InlineHTML' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php', + 'PhpParser\\Node\\Stmt\\Interface_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php', + 'PhpParser\\Node\\Stmt\\Label' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php', + 'PhpParser\\Node\\Stmt\\Namespace_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php', + 'PhpParser\\Node\\Stmt\\Nop' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php', + 'PhpParser\\Node\\Stmt\\Property' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php', + 'PhpParser\\Node\\Stmt\\PropertyProperty' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php', + 'PhpParser\\Node\\Stmt\\Return_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.php', + 'PhpParser\\Node\\Stmt\\StaticVar' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php', + 'PhpParser\\Node\\Stmt\\Static_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php', + 'PhpParser\\Node\\Stmt\\Switch_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php', + 'PhpParser\\Node\\Stmt\\Throw_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Throw_.php', + 'PhpParser\\Node\\Stmt\\TraitUse' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php', + 'PhpParser\\Node\\Stmt\\TraitUseAdaptation' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php', + 'PhpParser\\Node\\Stmt\\TraitUseAdaptation\\Alias' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php', + 'PhpParser\\Node\\Stmt\\TraitUseAdaptation\\Precedence' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php', + 'PhpParser\\Node\\Stmt\\Trait_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php', + 'PhpParser\\Node\\Stmt\\TryCatch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php', + 'PhpParser\\Node\\Stmt\\Unset_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php', + 'PhpParser\\Node\\Stmt\\UseUse' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php', + 'PhpParser\\Node\\Stmt\\Use_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php', + 'PhpParser\\Node\\Stmt\\While_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php', + 'PhpParser\\Node\\UnionType' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/UnionType.php', + 'PhpParser\\Node\\VarLikeIdentifier' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php', + 'PhpParser\\Parser' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Parser.php', + 'PhpParser\\ParserAbstract' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/ParserAbstract.php', + 'PhpParser\\ParserFactory' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/ParserFactory.php', + 'PhpParser\\Parser\\Multiple' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Parser/Multiple.php', + 'PhpParser\\Parser\\Php5' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Parser/Php5.php', + 'PhpParser\\Parser\\Php7' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Parser/Php7.php', + 'PhpParser\\Parser\\Tokens' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Parser/Tokens.php', + 'PhpParser\\PrettyPrinterAbstract' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php', + 'PhpParser\\PrettyPrinter\\Standard' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php', + 'Psr\\Cache\\CacheException' => __DIR__ . '/..' . '/psr/cache/src/CacheException.php', + 'Psr\\Cache\\CacheItemInterface' => __DIR__ . '/..' . '/psr/cache/src/CacheItemInterface.php', + 'Psr\\Cache\\CacheItemPoolInterface' => __DIR__ . '/..' . '/psr/cache/src/CacheItemPoolInterface.php', + 'Psr\\Cache\\InvalidArgumentException' => __DIR__ . '/..' . '/psr/cache/src/InvalidArgumentException.php', + 'Psr\\Container\\ContainerExceptionInterface' => __DIR__ . '/..' . '/psr/container/src/ContainerExceptionInterface.php', + 'Psr\\Container\\ContainerInterface' => __DIR__ . '/..' . '/psr/container/src/ContainerInterface.php', + 'Psr\\Container\\NotFoundExceptionInterface' => __DIR__ . '/..' . '/psr/container/src/NotFoundExceptionInterface.php', + 'Psr\\Http\\Message\\MessageInterface' => __DIR__ . '/..' . '/psr/http-message/src/MessageInterface.php', + 'Psr\\Http\\Message\\RequestFactoryInterface' => __DIR__ . '/..' . '/psr/http-factory/src/RequestFactoryInterface.php', + 'Psr\\Http\\Message\\RequestInterface' => __DIR__ . '/..' . '/psr/http-message/src/RequestInterface.php', + 'Psr\\Http\\Message\\ResponseFactoryInterface' => __DIR__ . '/..' . '/psr/http-factory/src/ResponseFactoryInterface.php', + 'Psr\\Http\\Message\\ResponseInterface' => __DIR__ . '/..' . '/psr/http-message/src/ResponseInterface.php', + 'Psr\\Http\\Message\\ServerRequestFactoryInterface' => __DIR__ . '/..' . '/psr/http-factory/src/ServerRequestFactoryInterface.php', + 'Psr\\Http\\Message\\ServerRequestInterface' => __DIR__ . '/..' . '/psr/http-message/src/ServerRequestInterface.php', + 'Psr\\Http\\Message\\StreamFactoryInterface' => __DIR__ . '/..' . '/psr/http-factory/src/StreamFactoryInterface.php', + 'Psr\\Http\\Message\\StreamInterface' => __DIR__ . '/..' . '/psr/http-message/src/StreamInterface.php', + 'Psr\\Http\\Message\\UploadedFileFactoryInterface' => __DIR__ . '/..' . '/psr/http-factory/src/UploadedFileFactoryInterface.php', + 'Psr\\Http\\Message\\UploadedFileInterface' => __DIR__ . '/..' . '/psr/http-message/src/UploadedFileInterface.php', + 'Psr\\Http\\Message\\UriFactoryInterface' => __DIR__ . '/..' . '/psr/http-factory/src/UriFactoryInterface.php', + 'Psr\\Http\\Message\\UriInterface' => __DIR__ . '/..' . '/psr/http-message/src/UriInterface.php', + 'Psr\\Http\\Server\\MiddlewareInterface' => __DIR__ . '/..' . '/psr/http-server-middleware/src/MiddlewareInterface.php', + 'Psr\\Http\\Server\\RequestHandlerInterface' => __DIR__ . '/..' . '/psr/http-server-handler/src/RequestHandlerInterface.php', + 'Psr\\Log\\AbstractLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/AbstractLogger.php', + 'Psr\\Log\\InvalidArgumentException' => __DIR__ . '/..' . '/psr/log/Psr/Log/InvalidArgumentException.php', + 'Psr\\Log\\LogLevel' => __DIR__ . '/..' . '/psr/log/Psr/Log/LogLevel.php', + 'Psr\\Log\\LoggerAwareInterface' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerAwareInterface.php', + 'Psr\\Log\\LoggerAwareTrait' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerAwareTrait.php', + 'Psr\\Log\\LoggerInterface' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerInterface.php', + 'Psr\\Log\\LoggerTrait' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerTrait.php', + 'Psr\\Log\\NullLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/NullLogger.php', + 'Psr\\Log\\Test\\DummyTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/DummyTest.php', + 'Psr\\Log\\Test\\LoggerInterfaceTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php', + 'Psr\\Log\\Test\\TestLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/TestLogger.php', + 'Slim\\App' => __DIR__ . '/..' . '/slim/slim/Slim/App.php', + 'Slim\\CallableResolver' => __DIR__ . '/..' . '/slim/slim/Slim/CallableResolver.php', + 'Slim\\Error\\AbstractErrorRenderer' => __DIR__ . '/..' . '/slim/slim/Slim/Error/AbstractErrorRenderer.php', + 'Slim\\Error\\Renderers\\HtmlErrorRenderer' => __DIR__ . '/..' . '/slim/slim/Slim/Error/Renderers/HtmlErrorRenderer.php', + 'Slim\\Error\\Renderers\\JsonErrorRenderer' => __DIR__ . '/..' . '/slim/slim/Slim/Error/Renderers/JsonErrorRenderer.php', + 'Slim\\Error\\Renderers\\PlainTextErrorRenderer' => __DIR__ . '/..' . '/slim/slim/Slim/Error/Renderers/PlainTextErrorRenderer.php', + 'Slim\\Error\\Renderers\\XmlErrorRenderer' => __DIR__ . '/..' . '/slim/slim/Slim/Error/Renderers/XmlErrorRenderer.php', + 'Slim\\Exception\\HttpBadRequestException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpBadRequestException.php', + 'Slim\\Exception\\HttpException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpException.php', + 'Slim\\Exception\\HttpForbiddenException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpForbiddenException.php', + 'Slim\\Exception\\HttpInternalServerErrorException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpInternalServerErrorException.php', + 'Slim\\Exception\\HttpMethodNotAllowedException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpMethodNotAllowedException.php', + 'Slim\\Exception\\HttpNotFoundException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpNotFoundException.php', + 'Slim\\Exception\\HttpNotImplementedException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpNotImplementedException.php', + 'Slim\\Exception\\HttpSpecializedException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpSpecializedException.php', + 'Slim\\Exception\\HttpUnauthorizedException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpUnauthorizedException.php', + 'Slim\\Factory\\AppFactory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/AppFactory.php', + 'Slim\\Factory\\Psr17\\GuzzlePsr17Factory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/GuzzlePsr17Factory.php', + 'Slim\\Factory\\Psr17\\LaminasDiactorosPsr17Factory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/LaminasDiactorosPsr17Factory.php', + 'Slim\\Factory\\Psr17\\NyholmPsr17Factory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/NyholmPsr17Factory.php', + 'Slim\\Factory\\Psr17\\Psr17Factory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/Psr17Factory.php', + 'Slim\\Factory\\Psr17\\Psr17FactoryProvider' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/Psr17FactoryProvider.php', + 'Slim\\Factory\\Psr17\\ServerRequestCreator' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/ServerRequestCreator.php', + 'Slim\\Factory\\Psr17\\SlimHttpPsr17Factory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/SlimHttpPsr17Factory.php', + 'Slim\\Factory\\Psr17\\SlimHttpServerRequestCreator' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/SlimHttpServerRequestCreator.php', + 'Slim\\Factory\\Psr17\\SlimPsr17Factory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/SlimPsr17Factory.php', + 'Slim\\Factory\\Psr17\\ZendDiactorosPsr17Factory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/ZendDiactorosPsr17Factory.php', + 'Slim\\Factory\\ServerRequestCreatorFactory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/ServerRequestCreatorFactory.php', + 'Slim\\Handlers\\ErrorHandler' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/ErrorHandler.php', + 'Slim\\Handlers\\Strategies\\RequestHandler' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/Strategies/RequestHandler.php', + 'Slim\\Handlers\\Strategies\\RequestResponse' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/Strategies/RequestResponse.php', + 'Slim\\Handlers\\Strategies\\RequestResponseArgs' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/Strategies/RequestResponseArgs.php', + 'Slim\\Interfaces\\AdvancedCallableResolverInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/AdvancedCallableResolverInterface.php', + 'Slim\\Interfaces\\CallableResolverInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/CallableResolverInterface.php', + 'Slim\\Interfaces\\DispatcherInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/DispatcherInterface.php', + 'Slim\\Interfaces\\ErrorHandlerInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/ErrorHandlerInterface.php', + 'Slim\\Interfaces\\ErrorRendererInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/ErrorRendererInterface.php', + 'Slim\\Interfaces\\InvocationStrategyInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/InvocationStrategyInterface.php', + 'Slim\\Interfaces\\MiddlewareDispatcherInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/MiddlewareDispatcherInterface.php', + 'Slim\\Interfaces\\Psr17FactoryInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/Psr17FactoryInterface.php', + 'Slim\\Interfaces\\Psr17FactoryProviderInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/Psr17FactoryProviderInterface.php', + 'Slim\\Interfaces\\RequestHandlerInvocationStrategyInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RequestHandlerInvocationStrategyInterface.php', + 'Slim\\Interfaces\\RouteCollectorInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RouteCollectorInterface.php', + 'Slim\\Interfaces\\RouteCollectorProxyInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RouteCollectorProxyInterface.php', + 'Slim\\Interfaces\\RouteGroupInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RouteGroupInterface.php', + 'Slim\\Interfaces\\RouteInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RouteInterface.php', + 'Slim\\Interfaces\\RouteParserInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RouteParserInterface.php', + 'Slim\\Interfaces\\RouteResolverInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RouteResolverInterface.php', + 'Slim\\Interfaces\\ServerRequestCreatorInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/ServerRequestCreatorInterface.php', + 'Slim\\Logger' => __DIR__ . '/..' . '/slim/slim/Slim/Logger.php', + 'Slim\\MiddlewareDispatcher' => __DIR__ . '/..' . '/slim/slim/Slim/MiddlewareDispatcher.php', + 'Slim\\Middleware\\BodyParsingMiddleware' => __DIR__ . '/..' . '/slim/slim/Slim/Middleware/BodyParsingMiddleware.php', + 'Slim\\Middleware\\ContentLengthMiddleware' => __DIR__ . '/..' . '/slim/slim/Slim/Middleware/ContentLengthMiddleware.php', + 'Slim\\Middleware\\ErrorMiddleware' => __DIR__ . '/..' . '/slim/slim/Slim/Middleware/ErrorMiddleware.php', + 'Slim\\Middleware\\MethodOverrideMiddleware' => __DIR__ . '/..' . '/slim/slim/Slim/Middleware/MethodOverrideMiddleware.php', + 'Slim\\Middleware\\OutputBufferingMiddleware' => __DIR__ . '/..' . '/slim/slim/Slim/Middleware/OutputBufferingMiddleware.php', + 'Slim\\Middleware\\RoutingMiddleware' => __DIR__ . '/..' . '/slim/slim/Slim/Middleware/RoutingMiddleware.php', + 'Slim\\Psr7\\Cookies' => __DIR__ . '/..' . '/slim/psr7/src/Cookies.php', + 'Slim\\Psr7\\Environment' => __DIR__ . '/..' . '/slim/psr7/src/Environment.php', + 'Slim\\Psr7\\Factory\\RequestFactory' => __DIR__ . '/..' . '/slim/psr7/src/Factory/RequestFactory.php', + 'Slim\\Psr7\\Factory\\ResponseFactory' => __DIR__ . '/..' . '/slim/psr7/src/Factory/ResponseFactory.php', + 'Slim\\Psr7\\Factory\\ServerRequestFactory' => __DIR__ . '/..' . '/slim/psr7/src/Factory/ServerRequestFactory.php', + 'Slim\\Psr7\\Factory\\StreamFactory' => __DIR__ . '/..' . '/slim/psr7/src/Factory/StreamFactory.php', + 'Slim\\Psr7\\Factory\\UploadedFileFactory' => __DIR__ . '/..' . '/slim/psr7/src/Factory/UploadedFileFactory.php', + 'Slim\\Psr7\\Factory\\UriFactory' => __DIR__ . '/..' . '/slim/psr7/src/Factory/UriFactory.php', + 'Slim\\Psr7\\Header' => __DIR__ . '/..' . '/slim/psr7/src/Header.php', + 'Slim\\Psr7\\Headers' => __DIR__ . '/..' . '/slim/psr7/src/Headers.php', + 'Slim\\Psr7\\Interfaces\\HeadersInterface' => __DIR__ . '/..' . '/slim/psr7/src/Interfaces/HeadersInterface.php', + 'Slim\\Psr7\\Message' => __DIR__ . '/..' . '/slim/psr7/src/Message.php', + 'Slim\\Psr7\\NonBufferedBody' => __DIR__ . '/..' . '/slim/psr7/src/NonBufferedBody.php', + 'Slim\\Psr7\\Request' => __DIR__ . '/..' . '/slim/psr7/src/Request.php', + 'Slim\\Psr7\\Response' => __DIR__ . '/..' . '/slim/psr7/src/Response.php', + 'Slim\\Psr7\\Stream' => __DIR__ . '/..' . '/slim/psr7/src/Stream.php', + 'Slim\\Psr7\\UploadedFile' => __DIR__ . '/..' . '/slim/psr7/src/UploadedFile.php', + 'Slim\\Psr7\\Uri' => __DIR__ . '/..' . '/slim/psr7/src/Uri.php', + 'Slim\\ResponseEmitter' => __DIR__ . '/..' . '/slim/slim/Slim/ResponseEmitter.php', + 'Slim\\Routing\\Dispatcher' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/Dispatcher.php', + 'Slim\\Routing\\FastRouteDispatcher' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/FastRouteDispatcher.php', + 'Slim\\Routing\\Route' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/Route.php', + 'Slim\\Routing\\RouteCollector' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/RouteCollector.php', + 'Slim\\Routing\\RouteCollectorProxy' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/RouteCollectorProxy.php', + 'Slim\\Routing\\RouteContext' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/RouteContext.php', + 'Slim\\Routing\\RouteGroup' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/RouteGroup.php', + 'Slim\\Routing\\RouteParser' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/RouteParser.php', + 'Slim\\Routing\\RouteResolver' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/RouteResolver.php', + 'Slim\\Routing\\RouteRunner' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/RouteRunner.php', + 'Slim\\Routing\\RoutingResults' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/RoutingResults.php', + 'Slim\\Views\\Twig' => __DIR__ . '/..' . '/slim/twig-view/src/Twig.php', + 'Slim\\Views\\TwigExtension' => __DIR__ . '/..' . '/slim/twig-view/src/TwigExtension.php', + 'Slim\\Views\\TwigMiddleware' => __DIR__ . '/..' . '/slim/twig-view/src/TwigMiddleware.php', + 'Slim\\Views\\TwigRuntimeExtension' => __DIR__ . '/..' . '/slim/twig-view/src/TwigRuntimeExtension.php', + 'Slim\\Views\\TwigRuntimeLoader' => __DIR__ . '/..' . '/slim/twig-view/src/TwigRuntimeLoader.php', + 'SuperClosure\\Analyzer\\AstAnalyzer' => __DIR__ . '/..' . '/jeremeamia/superclosure/src/Analyzer/AstAnalyzer.php', + 'SuperClosure\\Analyzer\\ClosureAnalyzer' => __DIR__ . '/..' . '/jeremeamia/superclosure/src/Analyzer/ClosureAnalyzer.php', + 'SuperClosure\\Analyzer\\Token' => __DIR__ . '/..' . '/jeremeamia/superclosure/src/Analyzer/Token.php', + 'SuperClosure\\Analyzer\\TokenAnalyzer' => __DIR__ . '/..' . '/jeremeamia/superclosure/src/Analyzer/TokenAnalyzer.php', + 'SuperClosure\\Analyzer\\Visitor\\ClosureLocatorVisitor' => __DIR__ . '/..' . '/jeremeamia/superclosure/src/Analyzer/Visitor/ClosureLocatorVisitor.php', + 'SuperClosure\\Analyzer\\Visitor\\MagicConstantVisitor' => __DIR__ . '/..' . '/jeremeamia/superclosure/src/Analyzer/Visitor/MagicConstantVisitor.php', + 'SuperClosure\\Analyzer\\Visitor\\ThisDetectorVisitor' => __DIR__ . '/..' . '/jeremeamia/superclosure/src/Analyzer/Visitor/ThisDetectorVisitor.php', + 'SuperClosure\\Exception\\ClosureAnalysisException' => __DIR__ . '/..' . '/jeremeamia/superclosure/src/Exception/ClosureAnalysisException.php', + 'SuperClosure\\Exception\\ClosureSerializationException' => __DIR__ . '/..' . '/jeremeamia/superclosure/src/Exception/ClosureSerializationException.php', + 'SuperClosure\\Exception\\ClosureUnserializationException' => __DIR__ . '/..' . '/jeremeamia/superclosure/src/Exception/ClosureUnserializationException.php', + 'SuperClosure\\Exception\\SuperClosureException' => __DIR__ . '/..' . '/jeremeamia/superclosure/src/Exception/SuperClosureException.php', + 'SuperClosure\\SerializableClosure' => __DIR__ . '/..' . '/jeremeamia/superclosure/src/SerializableClosure.php', + 'SuperClosure\\Serializer' => __DIR__ . '/..' . '/jeremeamia/superclosure/src/Serializer.php', + 'SuperClosure\\SerializerInterface' => __DIR__ . '/..' . '/jeremeamia/superclosure/src/SerializerInterface.php', + 'Symfony\\Component\\Finder\\Comparator\\Comparator' => __DIR__ . '/..' . '/symfony/finder/Comparator/Comparator.php', + 'Symfony\\Component\\Finder\\Comparator\\DateComparator' => __DIR__ . '/..' . '/symfony/finder/Comparator/DateComparator.php', + 'Symfony\\Component\\Finder\\Comparator\\NumberComparator' => __DIR__ . '/..' . '/symfony/finder/Comparator/NumberComparator.php', + 'Symfony\\Component\\Finder\\Exception\\AccessDeniedException' => __DIR__ . '/..' . '/symfony/finder/Exception/AccessDeniedException.php', + 'Symfony\\Component\\Finder\\Exception\\DirectoryNotFoundException' => __DIR__ . '/..' . '/symfony/finder/Exception/DirectoryNotFoundException.php', + 'Symfony\\Component\\Finder\\Finder' => __DIR__ . '/..' . '/symfony/finder/Finder.php', + 'Symfony\\Component\\Finder\\Gitignore' => __DIR__ . '/..' . '/symfony/finder/Gitignore.php', + 'Symfony\\Component\\Finder\\Glob' => __DIR__ . '/..' . '/symfony/finder/Glob.php', + 'Symfony\\Component\\Finder\\Iterator\\CustomFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/CustomFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\DateRangeFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/DateRangeFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\DepthRangeFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/DepthRangeFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\ExcludeDirectoryFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\FileTypeFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/FileTypeFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\FilecontentFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/FilecontentFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\FilenameFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/FilenameFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\MultiplePcreFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/MultiplePcreFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\PathFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/PathFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\RecursiveDirectoryIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/RecursiveDirectoryIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\SizeRangeFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/SizeRangeFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\SortableIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/SortableIterator.php', + 'Symfony\\Component\\Finder\\SplFileInfo' => __DIR__ . '/..' . '/symfony/finder/SplFileInfo.php', + 'Symfony\\Component\\Translation\\Catalogue\\AbstractOperation' => __DIR__ . '/..' . '/symfony/translation/Catalogue/AbstractOperation.php', + 'Symfony\\Component\\Translation\\Catalogue\\MergeOperation' => __DIR__ . '/..' . '/symfony/translation/Catalogue/MergeOperation.php', + 'Symfony\\Component\\Translation\\Catalogue\\OperationInterface' => __DIR__ . '/..' . '/symfony/translation/Catalogue/OperationInterface.php', + 'Symfony\\Component\\Translation\\Catalogue\\TargetOperation' => __DIR__ . '/..' . '/symfony/translation/Catalogue/TargetOperation.php', + 'Symfony\\Component\\Translation\\Command\\XliffLintCommand' => __DIR__ . '/..' . '/symfony/translation/Command/XliffLintCommand.php', + 'Symfony\\Component\\Translation\\DataCollectorTranslator' => __DIR__ . '/..' . '/symfony/translation/DataCollectorTranslator.php', + 'Symfony\\Component\\Translation\\DataCollector\\TranslationDataCollector' => __DIR__ . '/..' . '/symfony/translation/DataCollector/TranslationDataCollector.php', + 'Symfony\\Component\\Translation\\DependencyInjection\\TranslationDumperPass' => __DIR__ . '/..' . '/symfony/translation/DependencyInjection/TranslationDumperPass.php', + 'Symfony\\Component\\Translation\\DependencyInjection\\TranslationExtractorPass' => __DIR__ . '/..' . '/symfony/translation/DependencyInjection/TranslationExtractorPass.php', + 'Symfony\\Component\\Translation\\DependencyInjection\\TranslatorPass' => __DIR__ . '/..' . '/symfony/translation/DependencyInjection/TranslatorPass.php', + 'Symfony\\Component\\Translation\\DependencyInjection\\TranslatorPathsPass' => __DIR__ . '/..' . '/symfony/translation/DependencyInjection/TranslatorPathsPass.php', + 'Symfony\\Component\\Translation\\Dumper\\CsvFileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/CsvFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\DumperInterface' => __DIR__ . '/..' . '/symfony/translation/Dumper/DumperInterface.php', + 'Symfony\\Component\\Translation\\Dumper\\FileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/FileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\IcuResFileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/IcuResFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\IniFileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/IniFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\JsonFileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/JsonFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\MoFileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/MoFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\PhpFileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/PhpFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\PoFileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/PoFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\QtFileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/QtFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\XliffFileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/XliffFileDumper.php', + 'Symfony\\Component\\Translation\\Dumper\\YamlFileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/YamlFileDumper.php', + 'Symfony\\Component\\Translation\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/translation/Exception/ExceptionInterface.php', + 'Symfony\\Component\\Translation\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/translation/Exception/InvalidArgumentException.php', + 'Symfony\\Component\\Translation\\Exception\\InvalidResourceException' => __DIR__ . '/..' . '/symfony/translation/Exception/InvalidResourceException.php', + 'Symfony\\Component\\Translation\\Exception\\LogicException' => __DIR__ . '/..' . '/symfony/translation/Exception/LogicException.php', + 'Symfony\\Component\\Translation\\Exception\\NotFoundResourceException' => __DIR__ . '/..' . '/symfony/translation/Exception/NotFoundResourceException.php', + 'Symfony\\Component\\Translation\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/translation/Exception/RuntimeException.php', + 'Symfony\\Component\\Translation\\Extractor\\AbstractFileExtractor' => __DIR__ . '/..' . '/symfony/translation/Extractor/AbstractFileExtractor.php', + 'Symfony\\Component\\Translation\\Extractor\\ChainExtractor' => __DIR__ . '/..' . '/symfony/translation/Extractor/ChainExtractor.php', + 'Symfony\\Component\\Translation\\Extractor\\ExtractorInterface' => __DIR__ . '/..' . '/symfony/translation/Extractor/ExtractorInterface.php', + 'Symfony\\Component\\Translation\\Extractor\\PhpExtractor' => __DIR__ . '/..' . '/symfony/translation/Extractor/PhpExtractor.php', + 'Symfony\\Component\\Translation\\Extractor\\PhpStringTokenParser' => __DIR__ . '/..' . '/symfony/translation/Extractor/PhpStringTokenParser.php', + 'Symfony\\Component\\Translation\\Formatter\\IntlFormatter' => __DIR__ . '/..' . '/symfony/translation/Formatter/IntlFormatter.php', + 'Symfony\\Component\\Translation\\Formatter\\IntlFormatterInterface' => __DIR__ . '/..' . '/symfony/translation/Formatter/IntlFormatterInterface.php', + 'Symfony\\Component\\Translation\\Formatter\\MessageFormatter' => __DIR__ . '/..' . '/symfony/translation/Formatter/MessageFormatter.php', + 'Symfony\\Component\\Translation\\Formatter\\MessageFormatterInterface' => __DIR__ . '/..' . '/symfony/translation/Formatter/MessageFormatterInterface.php', + 'Symfony\\Component\\Translation\\IdentityTranslator' => __DIR__ . '/..' . '/symfony/translation/IdentityTranslator.php', + 'Symfony\\Component\\Translation\\Loader\\ArrayLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/ArrayLoader.php', + 'Symfony\\Component\\Translation\\Loader\\CsvFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/CsvFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\FileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/FileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\IcuDatFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/IcuDatFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\IcuResFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/IcuResFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\IniFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/IniFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\JsonFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/JsonFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\LoaderInterface' => __DIR__ . '/..' . '/symfony/translation/Loader/LoaderInterface.php', + 'Symfony\\Component\\Translation\\Loader\\MoFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/MoFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\PhpFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/PhpFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\PoFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/PoFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\QtFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/QtFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\XliffFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/XliffFileLoader.php', + 'Symfony\\Component\\Translation\\Loader\\YamlFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/YamlFileLoader.php', + 'Symfony\\Component\\Translation\\LoggingTranslator' => __DIR__ . '/..' . '/symfony/translation/LoggingTranslator.php', + 'Symfony\\Component\\Translation\\MessageCatalogue' => __DIR__ . '/..' . '/symfony/translation/MessageCatalogue.php', + 'Symfony\\Component\\Translation\\MessageCatalogueInterface' => __DIR__ . '/..' . '/symfony/translation/MessageCatalogueInterface.php', + 'Symfony\\Component\\Translation\\MetadataAwareInterface' => __DIR__ . '/..' . '/symfony/translation/MetadataAwareInterface.php', + 'Symfony\\Component\\Translation\\Reader\\TranslationReader' => __DIR__ . '/..' . '/symfony/translation/Reader/TranslationReader.php', + 'Symfony\\Component\\Translation\\Reader\\TranslationReaderInterface' => __DIR__ . '/..' . '/symfony/translation/Reader/TranslationReaderInterface.php', + 'Symfony\\Component\\Translation\\Translator' => __DIR__ . '/..' . '/symfony/translation/Translator.php', + 'Symfony\\Component\\Translation\\TranslatorBagInterface' => __DIR__ . '/..' . '/symfony/translation/TranslatorBagInterface.php', + 'Symfony\\Component\\Translation\\Util\\ArrayConverter' => __DIR__ . '/..' . '/symfony/translation/Util/ArrayConverter.php', + 'Symfony\\Component\\Translation\\Util\\XliffUtils' => __DIR__ . '/..' . '/symfony/translation/Util/XliffUtils.php', + 'Symfony\\Component\\Translation\\Writer\\TranslationWriter' => __DIR__ . '/..' . '/symfony/translation/Writer/TranslationWriter.php', + 'Symfony\\Component\\Translation\\Writer\\TranslationWriterInterface' => __DIR__ . '/..' . '/symfony/translation/Writer/TranslationWriterInterface.php', + 'Symfony\\Component\\VarDumper\\Caster\\AmqpCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/AmqpCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\ArgsStub' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/ArgsStub.php', + 'Symfony\\Component\\VarDumper\\Caster\\Caster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/Caster.php', + 'Symfony\\Component\\VarDumper\\Caster\\ClassStub' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/ClassStub.php', + 'Symfony\\Component\\VarDumper\\Caster\\ConstStub' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/ConstStub.php', + 'Symfony\\Component\\VarDumper\\Caster\\CutArrayStub' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/CutArrayStub.php', + 'Symfony\\Component\\VarDumper\\Caster\\CutStub' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/CutStub.php', + 'Symfony\\Component\\VarDumper\\Caster\\DOMCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/DOMCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\DateCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/DateCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\DoctrineCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/DoctrineCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\DsCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/DsCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\DsPairStub' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/DsPairStub.php', + 'Symfony\\Component\\VarDumper\\Caster\\EnumStub' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/EnumStub.php', + 'Symfony\\Component\\VarDumper\\Caster\\ExceptionCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/ExceptionCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\FrameStub' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/FrameStub.php', + 'Symfony\\Component\\VarDumper\\Caster\\GmpCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/GmpCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\ImagineCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/ImagineCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\ImgStub' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/ImgStub.php', + 'Symfony\\Component\\VarDumper\\Caster\\IntlCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/IntlCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\LinkStub' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/LinkStub.php', + 'Symfony\\Component\\VarDumper\\Caster\\MemcachedCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/MemcachedCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\PdoCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/PdoCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\PgSqlCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/PgSqlCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\ProxyManagerCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/ProxyManagerCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\RedisCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/RedisCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\ReflectionCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/ReflectionCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\ResourceCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/ResourceCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\SplCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/SplCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\StubCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/StubCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\SymfonyCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/SymfonyCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\TraceStub' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/TraceStub.php', + 'Symfony\\Component\\VarDumper\\Caster\\UuidCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/UuidCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\XmlReaderCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/XmlReaderCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\XmlResourceCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/XmlResourceCaster.php', + 'Symfony\\Component\\VarDumper\\Cloner\\AbstractCloner' => __DIR__ . '/..' . '/symfony/var-dumper/Cloner/AbstractCloner.php', + 'Symfony\\Component\\VarDumper\\Cloner\\ClonerInterface' => __DIR__ . '/..' . '/symfony/var-dumper/Cloner/ClonerInterface.php', + 'Symfony\\Component\\VarDumper\\Cloner\\Cursor' => __DIR__ . '/..' . '/symfony/var-dumper/Cloner/Cursor.php', + 'Symfony\\Component\\VarDumper\\Cloner\\Data' => __DIR__ . '/..' . '/symfony/var-dumper/Cloner/Data.php', + 'Symfony\\Component\\VarDumper\\Cloner\\DumperInterface' => __DIR__ . '/..' . '/symfony/var-dumper/Cloner/DumperInterface.php', + 'Symfony\\Component\\VarDumper\\Cloner\\Stub' => __DIR__ . '/..' . '/symfony/var-dumper/Cloner/Stub.php', + 'Symfony\\Component\\VarDumper\\Cloner\\VarCloner' => __DIR__ . '/..' . '/symfony/var-dumper/Cloner/VarCloner.php', + 'Symfony\\Component\\VarDumper\\Command\\Descriptor\\CliDescriptor' => __DIR__ . '/..' . '/symfony/var-dumper/Command/Descriptor/CliDescriptor.php', + 'Symfony\\Component\\VarDumper\\Command\\Descriptor\\DumpDescriptorInterface' => __DIR__ . '/..' . '/symfony/var-dumper/Command/Descriptor/DumpDescriptorInterface.php', + 'Symfony\\Component\\VarDumper\\Command\\Descriptor\\HtmlDescriptor' => __DIR__ . '/..' . '/symfony/var-dumper/Command/Descriptor/HtmlDescriptor.php', + 'Symfony\\Component\\VarDumper\\Command\\ServerDumpCommand' => __DIR__ . '/..' . '/symfony/var-dumper/Command/ServerDumpCommand.php', + 'Symfony\\Component\\VarDumper\\Dumper\\AbstractDumper' => __DIR__ . '/..' . '/symfony/var-dumper/Dumper/AbstractDumper.php', + 'Symfony\\Component\\VarDumper\\Dumper\\CliDumper' => __DIR__ . '/..' . '/symfony/var-dumper/Dumper/CliDumper.php', + 'Symfony\\Component\\VarDumper\\Dumper\\ContextProvider\\CliContextProvider' => __DIR__ . '/..' . '/symfony/var-dumper/Dumper/ContextProvider/CliContextProvider.php', + 'Symfony\\Component\\VarDumper\\Dumper\\ContextProvider\\ContextProviderInterface' => __DIR__ . '/..' . '/symfony/var-dumper/Dumper/ContextProvider/ContextProviderInterface.php', + 'Symfony\\Component\\VarDumper\\Dumper\\ContextProvider\\RequestContextProvider' => __DIR__ . '/..' . '/symfony/var-dumper/Dumper/ContextProvider/RequestContextProvider.php', + 'Symfony\\Component\\VarDumper\\Dumper\\ContextProvider\\SourceContextProvider' => __DIR__ . '/..' . '/symfony/var-dumper/Dumper/ContextProvider/SourceContextProvider.php', + 'Symfony\\Component\\VarDumper\\Dumper\\ContextualizedDumper' => __DIR__ . '/..' . '/symfony/var-dumper/Dumper/ContextualizedDumper.php', + 'Symfony\\Component\\VarDumper\\Dumper\\DataDumperInterface' => __DIR__ . '/..' . '/symfony/var-dumper/Dumper/DataDumperInterface.php', + 'Symfony\\Component\\VarDumper\\Dumper\\HtmlDumper' => __DIR__ . '/..' . '/symfony/var-dumper/Dumper/HtmlDumper.php', + 'Symfony\\Component\\VarDumper\\Dumper\\ServerDumper' => __DIR__ . '/..' . '/symfony/var-dumper/Dumper/ServerDumper.php', + 'Symfony\\Component\\VarDumper\\Exception\\ThrowingCasterException' => __DIR__ . '/..' . '/symfony/var-dumper/Exception/ThrowingCasterException.php', + 'Symfony\\Component\\VarDumper\\Server\\Connection' => __DIR__ . '/..' . '/symfony/var-dumper/Server/Connection.php', + 'Symfony\\Component\\VarDumper\\Server\\DumpServer' => __DIR__ . '/..' . '/symfony/var-dumper/Server/DumpServer.php', + 'Symfony\\Component\\VarDumper\\Test\\VarDumperTestTrait' => __DIR__ . '/..' . '/symfony/var-dumper/Test/VarDumperTestTrait.php', + 'Symfony\\Component\\VarDumper\\VarDumper' => __DIR__ . '/..' . '/symfony/var-dumper/VarDumper.php', + 'Symfony\\Component\\Yaml\\Command\\LintCommand' => __DIR__ . '/..' . '/symfony/yaml/Command/LintCommand.php', + 'Symfony\\Component\\Yaml\\Dumper' => __DIR__ . '/..' . '/symfony/yaml/Dumper.php', + 'Symfony\\Component\\Yaml\\Escaper' => __DIR__ . '/..' . '/symfony/yaml/Escaper.php', + 'Symfony\\Component\\Yaml\\Exception\\DumpException' => __DIR__ . '/..' . '/symfony/yaml/Exception/DumpException.php', + 'Symfony\\Component\\Yaml\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/yaml/Exception/ExceptionInterface.php', + 'Symfony\\Component\\Yaml\\Exception\\ParseException' => __DIR__ . '/..' . '/symfony/yaml/Exception/ParseException.php', + 'Symfony\\Component\\Yaml\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/yaml/Exception/RuntimeException.php', + 'Symfony\\Component\\Yaml\\Inline' => __DIR__ . '/..' . '/symfony/yaml/Inline.php', + 'Symfony\\Component\\Yaml\\Parser' => __DIR__ . '/..' . '/symfony/yaml/Parser.php', + 'Symfony\\Component\\Yaml\\Tag\\TaggedValue' => __DIR__ . '/..' . '/symfony/yaml/Tag/TaggedValue.php', + 'Symfony\\Component\\Yaml\\Unescaper' => __DIR__ . '/..' . '/symfony/yaml/Unescaper.php', + 'Symfony\\Component\\Yaml\\Yaml' => __DIR__ . '/..' . '/symfony/yaml/Yaml.php', + 'Symfony\\Contracts\\Translation\\LocaleAwareInterface' => __DIR__ . '/..' . '/symfony/translation-contracts/LocaleAwareInterface.php', + 'Symfony\\Contracts\\Translation\\Test\\TranslatorTest' => __DIR__ . '/..' . '/symfony/translation-contracts/Test/TranslatorTest.php', + 'Symfony\\Contracts\\Translation\\TranslatorInterface' => __DIR__ . '/..' . '/symfony/translation-contracts/TranslatorInterface.php', + 'Symfony\\Contracts\\Translation\\TranslatorTrait' => __DIR__ . '/..' . '/symfony/translation-contracts/TranslatorTrait.php', + 'Symfony\\Polyfill\\Ctype\\Ctype' => __DIR__ . '/..' . '/symfony/polyfill-ctype/Ctype.php', + 'Symfony\\Polyfill\\Mbstring\\Mbstring' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/Mbstring.php', + 'Symfony\\Polyfill\\Php56\\Php56' => __DIR__ . '/..' . '/symfony/polyfill-php56/Php56.php', + 'Symfony\\Polyfill\\Util\\Binary' => __DIR__ . '/..' . '/symfony/polyfill-util/Binary.php', + 'Symfony\\Polyfill\\Util\\BinaryNoFuncOverload' => __DIR__ . '/..' . '/symfony/polyfill-util/BinaryNoFuncOverload.php', + 'Symfony\\Polyfill\\Util\\BinaryOnFuncOverload' => __DIR__ . '/..' . '/symfony/polyfill-util/BinaryOnFuncOverload.php', + 'Symfony\\Polyfill\\Util\\TestListener' => __DIR__ . '/..' . '/symfony/polyfill-util/TestListener.php', + 'Symfony\\Polyfill\\Util\\TestListenerForV5' => __DIR__ . '/..' . '/symfony/polyfill-util/TestListenerForV5.php', + 'Symfony\\Polyfill\\Util\\TestListenerForV6' => __DIR__ . '/..' . '/symfony/polyfill-util/TestListenerForV6.php', + 'Symfony\\Polyfill\\Util\\TestListenerForV7' => __DIR__ . '/..' . '/symfony/polyfill-util/TestListenerForV7.php', + 'Symfony\\Polyfill\\Util\\TestListenerTrait' => __DIR__ . '/..' . '/symfony/polyfill-util/TestListenerTrait.php', + 'Tightenco\\Collect\\Contracts\\Support\\Arrayable' => __DIR__ . '/..' . '/tightenco/collect/src/Collect/Contracts/Support/Arrayable.php', + 'Tightenco\\Collect\\Contracts\\Support\\Htmlable' => __DIR__ . '/..' . '/tightenco/collect/src/Collect/Contracts/Support/Htmlable.php', + 'Tightenco\\Collect\\Contracts\\Support\\Jsonable' => __DIR__ . '/..' . '/tightenco/collect/src/Collect/Contracts/Support/Jsonable.php', + 'Tightenco\\Collect\\Support\\Arr' => __DIR__ . '/..' . '/tightenco/collect/src/Collect/Support/Arr.php', + 'Tightenco\\Collect\\Support\\Collection' => __DIR__ . '/..' . '/tightenco/collect/src/Collect/Support/Collection.php', + 'Tightenco\\Collect\\Support\\Enumerable' => __DIR__ . '/..' . '/tightenco/collect/src/Collect/Support/Enumerable.php', + 'Tightenco\\Collect\\Support\\HigherOrderCollectionProxy' => __DIR__ . '/..' . '/tightenco/collect/src/Collect/Support/HigherOrderCollectionProxy.php', + 'Tightenco\\Collect\\Support\\HtmlString' => __DIR__ . '/..' . '/tightenco/collect/src/Collect/Support/HtmlString.php', + 'Tightenco\\Collect\\Support\\LazyCollection' => __DIR__ . '/..' . '/tightenco/collect/src/Collect/Support/LazyCollection.php', + 'Tightenco\\Collect\\Support\\Traits\\EnumeratesValues' => __DIR__ . '/..' . '/tightenco/collect/src/Collect/Support/Traits/EnumeratesValues.php', + 'Tightenco\\Collect\\Support\\Traits\\Macroable' => __DIR__ . '/..' . '/tightenco/collect/src/Collect/Support/Traits/Macroable.php', + 'Twig\\Cache\\CacheInterface' => __DIR__ . '/..' . '/twig/twig/src/Cache/CacheInterface.php', + 'Twig\\Cache\\FilesystemCache' => __DIR__ . '/..' . '/twig/twig/src/Cache/FilesystemCache.php', + 'Twig\\Cache\\NullCache' => __DIR__ . '/..' . '/twig/twig/src/Cache/NullCache.php', + 'Twig\\Compiler' => __DIR__ . '/..' . '/twig/twig/src/Compiler.php', + 'Twig\\Environment' => __DIR__ . '/..' . '/twig/twig/src/Environment.php', + 'Twig\\Error\\Error' => __DIR__ . '/..' . '/twig/twig/src/Error/Error.php', + 'Twig\\Error\\LoaderError' => __DIR__ . '/..' . '/twig/twig/src/Error/LoaderError.php', + 'Twig\\Error\\RuntimeError' => __DIR__ . '/..' . '/twig/twig/src/Error/RuntimeError.php', + 'Twig\\Error\\SyntaxError' => __DIR__ . '/..' . '/twig/twig/src/Error/SyntaxError.php', + 'Twig\\ExpressionParser' => __DIR__ . '/..' . '/twig/twig/src/ExpressionParser.php', + 'Twig\\ExtensionSet' => __DIR__ . '/..' . '/twig/twig/src/ExtensionSet.php', + 'Twig\\Extension\\AbstractExtension' => __DIR__ . '/..' . '/twig/twig/src/Extension/AbstractExtension.php', + 'Twig\\Extension\\CoreExtension' => __DIR__ . '/..' . '/twig/twig/src/Extension/CoreExtension.php', + 'Twig\\Extension\\DebugExtension' => __DIR__ . '/..' . '/twig/twig/src/Extension/DebugExtension.php', + 'Twig\\Extension\\EscaperExtension' => __DIR__ . '/..' . '/twig/twig/src/Extension/EscaperExtension.php', + 'Twig\\Extension\\ExtensionInterface' => __DIR__ . '/..' . '/twig/twig/src/Extension/ExtensionInterface.php', + 'Twig\\Extension\\GlobalsInterface' => __DIR__ . '/..' . '/twig/twig/src/Extension/GlobalsInterface.php', + 'Twig\\Extension\\OptimizerExtension' => __DIR__ . '/..' . '/twig/twig/src/Extension/OptimizerExtension.php', + 'Twig\\Extension\\ProfilerExtension' => __DIR__ . '/..' . '/twig/twig/src/Extension/ProfilerExtension.php', + 'Twig\\Extension\\RuntimeExtensionInterface' => __DIR__ . '/..' . '/twig/twig/src/Extension/RuntimeExtensionInterface.php', + 'Twig\\Extension\\SandboxExtension' => __DIR__ . '/..' . '/twig/twig/src/Extension/SandboxExtension.php', + 'Twig\\Extension\\StagingExtension' => __DIR__ . '/..' . '/twig/twig/src/Extension/StagingExtension.php', + 'Twig\\Extension\\StringLoaderExtension' => __DIR__ . '/..' . '/twig/twig/src/Extension/StringLoaderExtension.php', + 'Twig\\FileExtensionEscapingStrategy' => __DIR__ . '/..' . '/twig/twig/src/FileExtensionEscapingStrategy.php', + 'Twig\\Lexer' => __DIR__ . '/..' . '/twig/twig/src/Lexer.php', + 'Twig\\Loader\\ArrayLoader' => __DIR__ . '/..' . '/twig/twig/src/Loader/ArrayLoader.php', + 'Twig\\Loader\\ChainLoader' => __DIR__ . '/..' . '/twig/twig/src/Loader/ChainLoader.php', + 'Twig\\Loader\\FilesystemLoader' => __DIR__ . '/..' . '/twig/twig/src/Loader/FilesystemLoader.php', + 'Twig\\Loader\\LoaderInterface' => __DIR__ . '/..' . '/twig/twig/src/Loader/LoaderInterface.php', + 'Twig\\Markup' => __DIR__ . '/..' . '/twig/twig/src/Markup.php', + 'Twig\\NodeTraverser' => __DIR__ . '/..' . '/twig/twig/src/NodeTraverser.php', + 'Twig\\NodeVisitor\\AbstractNodeVisitor' => __DIR__ . '/..' . '/twig/twig/src/NodeVisitor/AbstractNodeVisitor.php', + 'Twig\\NodeVisitor\\EscaperNodeVisitor' => __DIR__ . '/..' . '/twig/twig/src/NodeVisitor/EscaperNodeVisitor.php', + 'Twig\\NodeVisitor\\MacroAutoImportNodeVisitor' => __DIR__ . '/..' . '/twig/twig/src/NodeVisitor/MacroAutoImportNodeVisitor.php', + 'Twig\\NodeVisitor\\NodeVisitorInterface' => __DIR__ . '/..' . '/twig/twig/src/NodeVisitor/NodeVisitorInterface.php', + 'Twig\\NodeVisitor\\OptimizerNodeVisitor' => __DIR__ . '/..' . '/twig/twig/src/NodeVisitor/OptimizerNodeVisitor.php', + 'Twig\\NodeVisitor\\SafeAnalysisNodeVisitor' => __DIR__ . '/..' . '/twig/twig/src/NodeVisitor/SafeAnalysisNodeVisitor.php', + 'Twig\\NodeVisitor\\SandboxNodeVisitor' => __DIR__ . '/..' . '/twig/twig/src/NodeVisitor/SandboxNodeVisitor.php', + 'Twig\\Node\\AutoEscapeNode' => __DIR__ . '/..' . '/twig/twig/src/Node/AutoEscapeNode.php', + 'Twig\\Node\\BlockNode' => __DIR__ . '/..' . '/twig/twig/src/Node/BlockNode.php', + 'Twig\\Node\\BlockReferenceNode' => __DIR__ . '/..' . '/twig/twig/src/Node/BlockReferenceNode.php', + 'Twig\\Node\\BodyNode' => __DIR__ . '/..' . '/twig/twig/src/Node/BodyNode.php', + 'Twig\\Node\\CheckSecurityNode' => __DIR__ . '/..' . '/twig/twig/src/Node/CheckSecurityNode.php', + 'Twig\\Node\\CheckToStringNode' => __DIR__ . '/..' . '/twig/twig/src/Node/CheckToStringNode.php', + 'Twig\\Node\\DeprecatedNode' => __DIR__ . '/..' . '/twig/twig/src/Node/DeprecatedNode.php', + 'Twig\\Node\\DoNode' => __DIR__ . '/..' . '/twig/twig/src/Node/DoNode.php', + 'Twig\\Node\\EmbedNode' => __DIR__ . '/..' . '/twig/twig/src/Node/EmbedNode.php', + 'Twig\\Node\\Expression\\AbstractExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/AbstractExpression.php', + 'Twig\\Node\\Expression\\ArrayExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/ArrayExpression.php', + 'Twig\\Node\\Expression\\ArrowFunctionExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/ArrowFunctionExpression.php', + 'Twig\\Node\\Expression\\AssignNameExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/AssignNameExpression.php', + 'Twig\\Node\\Expression\\Binary\\AbstractBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/AbstractBinary.php', + 'Twig\\Node\\Expression\\Binary\\AddBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/AddBinary.php', + 'Twig\\Node\\Expression\\Binary\\AndBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/AndBinary.php', + 'Twig\\Node\\Expression\\Binary\\BitwiseAndBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/BitwiseAndBinary.php', + 'Twig\\Node\\Expression\\Binary\\BitwiseOrBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/BitwiseOrBinary.php', + 'Twig\\Node\\Expression\\Binary\\BitwiseXorBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/BitwiseXorBinary.php', + 'Twig\\Node\\Expression\\Binary\\ConcatBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/ConcatBinary.php', + 'Twig\\Node\\Expression\\Binary\\DivBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/DivBinary.php', + 'Twig\\Node\\Expression\\Binary\\EndsWithBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/EndsWithBinary.php', + 'Twig\\Node\\Expression\\Binary\\EqualBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/EqualBinary.php', + 'Twig\\Node\\Expression\\Binary\\FloorDivBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/FloorDivBinary.php', + 'Twig\\Node\\Expression\\Binary\\GreaterBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/GreaterBinary.php', + 'Twig\\Node\\Expression\\Binary\\GreaterEqualBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/GreaterEqualBinary.php', + 'Twig\\Node\\Expression\\Binary\\InBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/InBinary.php', + 'Twig\\Node\\Expression\\Binary\\LessBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/LessBinary.php', + 'Twig\\Node\\Expression\\Binary\\LessEqualBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/LessEqualBinary.php', + 'Twig\\Node\\Expression\\Binary\\MatchesBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/MatchesBinary.php', + 'Twig\\Node\\Expression\\Binary\\ModBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/ModBinary.php', + 'Twig\\Node\\Expression\\Binary\\MulBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/MulBinary.php', + 'Twig\\Node\\Expression\\Binary\\NotEqualBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/NotEqualBinary.php', + 'Twig\\Node\\Expression\\Binary\\NotInBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/NotInBinary.php', + 'Twig\\Node\\Expression\\Binary\\OrBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/OrBinary.php', + 'Twig\\Node\\Expression\\Binary\\PowerBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/PowerBinary.php', + 'Twig\\Node\\Expression\\Binary\\RangeBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/RangeBinary.php', + 'Twig\\Node\\Expression\\Binary\\SpaceshipBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/SpaceshipBinary.php', + 'Twig\\Node\\Expression\\Binary\\StartsWithBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/StartsWithBinary.php', + 'Twig\\Node\\Expression\\Binary\\SubBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/SubBinary.php', + 'Twig\\Node\\Expression\\BlockReferenceExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/BlockReferenceExpression.php', + 'Twig\\Node\\Expression\\CallExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/CallExpression.php', + 'Twig\\Node\\Expression\\ConditionalExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/ConditionalExpression.php', + 'Twig\\Node\\Expression\\ConstantExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/ConstantExpression.php', + 'Twig\\Node\\Expression\\FilterExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/FilterExpression.php', + 'Twig\\Node\\Expression\\Filter\\DefaultFilter' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Filter/DefaultFilter.php', + 'Twig\\Node\\Expression\\FunctionExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/FunctionExpression.php', + 'Twig\\Node\\Expression\\GetAttrExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/GetAttrExpression.php', + 'Twig\\Node\\Expression\\InlinePrint' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/InlinePrint.php', + 'Twig\\Node\\Expression\\MethodCallExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/MethodCallExpression.php', + 'Twig\\Node\\Expression\\NameExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/NameExpression.php', + 'Twig\\Node\\Expression\\NullCoalesceExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/NullCoalesceExpression.php', + 'Twig\\Node\\Expression\\ParentExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/ParentExpression.php', + 'Twig\\Node\\Expression\\TempNameExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/TempNameExpression.php', + 'Twig\\Node\\Expression\\TestExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/TestExpression.php', + 'Twig\\Node\\Expression\\Test\\ConstantTest' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Test/ConstantTest.php', + 'Twig\\Node\\Expression\\Test\\DefinedTest' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Test/DefinedTest.php', + 'Twig\\Node\\Expression\\Test\\DivisiblebyTest' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Test/DivisiblebyTest.php', + 'Twig\\Node\\Expression\\Test\\EvenTest' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Test/EvenTest.php', + 'Twig\\Node\\Expression\\Test\\NullTest' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Test/NullTest.php', + 'Twig\\Node\\Expression\\Test\\OddTest' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Test/OddTest.php', + 'Twig\\Node\\Expression\\Test\\SameasTest' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Test/SameasTest.php', + 'Twig\\Node\\Expression\\Unary\\AbstractUnary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Unary/AbstractUnary.php', + 'Twig\\Node\\Expression\\Unary\\NegUnary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Unary/NegUnary.php', + 'Twig\\Node\\Expression\\Unary\\NotUnary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Unary/NotUnary.php', + 'Twig\\Node\\Expression\\Unary\\PosUnary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Unary/PosUnary.php', + 'Twig\\Node\\Expression\\VariadicExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/VariadicExpression.php', + 'Twig\\Node\\FlushNode' => __DIR__ . '/..' . '/twig/twig/src/Node/FlushNode.php', + 'Twig\\Node\\ForLoopNode' => __DIR__ . '/..' . '/twig/twig/src/Node/ForLoopNode.php', + 'Twig\\Node\\ForNode' => __DIR__ . '/..' . '/twig/twig/src/Node/ForNode.php', + 'Twig\\Node\\IfNode' => __DIR__ . '/..' . '/twig/twig/src/Node/IfNode.php', + 'Twig\\Node\\ImportNode' => __DIR__ . '/..' . '/twig/twig/src/Node/ImportNode.php', + 'Twig\\Node\\IncludeNode' => __DIR__ . '/..' . '/twig/twig/src/Node/IncludeNode.php', + 'Twig\\Node\\MacroNode' => __DIR__ . '/..' . '/twig/twig/src/Node/MacroNode.php', + 'Twig\\Node\\ModuleNode' => __DIR__ . '/..' . '/twig/twig/src/Node/ModuleNode.php', + 'Twig\\Node\\Node' => __DIR__ . '/..' . '/twig/twig/src/Node/Node.php', + 'Twig\\Node\\NodeCaptureInterface' => __DIR__ . '/..' . '/twig/twig/src/Node/NodeCaptureInterface.php', + 'Twig\\Node\\NodeOutputInterface' => __DIR__ . '/..' . '/twig/twig/src/Node/NodeOutputInterface.php', + 'Twig\\Node\\PrintNode' => __DIR__ . '/..' . '/twig/twig/src/Node/PrintNode.php', + 'Twig\\Node\\SandboxNode' => __DIR__ . '/..' . '/twig/twig/src/Node/SandboxNode.php', + 'Twig\\Node\\SetNode' => __DIR__ . '/..' . '/twig/twig/src/Node/SetNode.php', + 'Twig\\Node\\TextNode' => __DIR__ . '/..' . '/twig/twig/src/Node/TextNode.php', + 'Twig\\Node\\WithNode' => __DIR__ . '/..' . '/twig/twig/src/Node/WithNode.php', + 'Twig\\Parser' => __DIR__ . '/..' . '/twig/twig/src/Parser.php', + 'Twig\\Profiler\\Dumper\\BaseDumper' => __DIR__ . '/..' . '/twig/twig/src/Profiler/Dumper/BaseDumper.php', + 'Twig\\Profiler\\Dumper\\BlackfireDumper' => __DIR__ . '/..' . '/twig/twig/src/Profiler/Dumper/BlackfireDumper.php', + 'Twig\\Profiler\\Dumper\\HtmlDumper' => __DIR__ . '/..' . '/twig/twig/src/Profiler/Dumper/HtmlDumper.php', + 'Twig\\Profiler\\Dumper\\TextDumper' => __DIR__ . '/..' . '/twig/twig/src/Profiler/Dumper/TextDumper.php', + 'Twig\\Profiler\\NodeVisitor\\ProfilerNodeVisitor' => __DIR__ . '/..' . '/twig/twig/src/Profiler/NodeVisitor/ProfilerNodeVisitor.php', + 'Twig\\Profiler\\Node\\EnterProfileNode' => __DIR__ . '/..' . '/twig/twig/src/Profiler/Node/EnterProfileNode.php', + 'Twig\\Profiler\\Node\\LeaveProfileNode' => __DIR__ . '/..' . '/twig/twig/src/Profiler/Node/LeaveProfileNode.php', + 'Twig\\Profiler\\Profile' => __DIR__ . '/..' . '/twig/twig/src/Profiler/Profile.php', + 'Twig\\RuntimeLoader\\ContainerRuntimeLoader' => __DIR__ . '/..' . '/twig/twig/src/RuntimeLoader/ContainerRuntimeLoader.php', + 'Twig\\RuntimeLoader\\FactoryRuntimeLoader' => __DIR__ . '/..' . '/twig/twig/src/RuntimeLoader/FactoryRuntimeLoader.php', + 'Twig\\RuntimeLoader\\RuntimeLoaderInterface' => __DIR__ . '/..' . '/twig/twig/src/RuntimeLoader/RuntimeLoaderInterface.php', + 'Twig\\Sandbox\\SecurityError' => __DIR__ . '/..' . '/twig/twig/src/Sandbox/SecurityError.php', + 'Twig\\Sandbox\\SecurityNotAllowedFilterError' => __DIR__ . '/..' . '/twig/twig/src/Sandbox/SecurityNotAllowedFilterError.php', + 'Twig\\Sandbox\\SecurityNotAllowedFunctionError' => __DIR__ . '/..' . '/twig/twig/src/Sandbox/SecurityNotAllowedFunctionError.php', + 'Twig\\Sandbox\\SecurityNotAllowedMethodError' => __DIR__ . '/..' . '/twig/twig/src/Sandbox/SecurityNotAllowedMethodError.php', + 'Twig\\Sandbox\\SecurityNotAllowedPropertyError' => __DIR__ . '/..' . '/twig/twig/src/Sandbox/SecurityNotAllowedPropertyError.php', + 'Twig\\Sandbox\\SecurityNotAllowedTagError' => __DIR__ . '/..' . '/twig/twig/src/Sandbox/SecurityNotAllowedTagError.php', + 'Twig\\Sandbox\\SecurityPolicy' => __DIR__ . '/..' . '/twig/twig/src/Sandbox/SecurityPolicy.php', + 'Twig\\Sandbox\\SecurityPolicyInterface' => __DIR__ . '/..' . '/twig/twig/src/Sandbox/SecurityPolicyInterface.php', + 'Twig\\Source' => __DIR__ . '/..' . '/twig/twig/src/Source.php', + 'Twig\\Template' => __DIR__ . '/..' . '/twig/twig/src/Template.php', + 'Twig\\TemplateWrapper' => __DIR__ . '/..' . '/twig/twig/src/TemplateWrapper.php', + 'Twig\\Test\\IntegrationTestCase' => __DIR__ . '/..' . '/twig/twig/src/Test/IntegrationTestCase.php', + 'Twig\\Test\\NodeTestCase' => __DIR__ . '/..' . '/twig/twig/src/Test/NodeTestCase.php', + 'Twig\\Token' => __DIR__ . '/..' . '/twig/twig/src/Token.php', + 'Twig\\TokenParser\\AbstractTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/AbstractTokenParser.php', + 'Twig\\TokenParser\\ApplyTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/ApplyTokenParser.php', + 'Twig\\TokenParser\\AutoEscapeTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/AutoEscapeTokenParser.php', + 'Twig\\TokenParser\\BlockTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/BlockTokenParser.php', + 'Twig\\TokenParser\\DeprecatedTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/DeprecatedTokenParser.php', + 'Twig\\TokenParser\\DoTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/DoTokenParser.php', + 'Twig\\TokenParser\\EmbedTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/EmbedTokenParser.php', + 'Twig\\TokenParser\\ExtendsTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/ExtendsTokenParser.php', + 'Twig\\TokenParser\\FlushTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/FlushTokenParser.php', + 'Twig\\TokenParser\\ForTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/ForTokenParser.php', + 'Twig\\TokenParser\\FromTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/FromTokenParser.php', + 'Twig\\TokenParser\\IfTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/IfTokenParser.php', + 'Twig\\TokenParser\\ImportTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/ImportTokenParser.php', + 'Twig\\TokenParser\\IncludeTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/IncludeTokenParser.php', + 'Twig\\TokenParser\\MacroTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/MacroTokenParser.php', + 'Twig\\TokenParser\\SandboxTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/SandboxTokenParser.php', + 'Twig\\TokenParser\\SetTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/SetTokenParser.php', + 'Twig\\TokenParser\\TokenParserInterface' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/TokenParserInterface.php', + 'Twig\\TokenParser\\UseTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/UseTokenParser.php', + 'Twig\\TokenParser\\WithTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/WithTokenParser.php', + 'Twig\\TokenStream' => __DIR__ . '/..' . '/twig/twig/src/TokenStream.php', + 'Twig\\TwigFilter' => __DIR__ . '/..' . '/twig/twig/src/TwigFilter.php', + 'Twig\\TwigFunction' => __DIR__ . '/..' . '/twig/twig/src/TwigFunction.php', + 'Twig\\TwigTest' => __DIR__ . '/..' . '/twig/twig/src/TwigTest.php', + 'Twig\\Util\\DeprecationCollector' => __DIR__ . '/..' . '/twig/twig/src/Util/DeprecationCollector.php', + 'Twig\\Util\\TemplateDirIterator' => __DIR__ . '/..' . '/twig/twig/src/Util/TemplateDirIterator.php', + 'Whoops\\Exception\\ErrorException' => __DIR__ . '/..' . '/filp/whoops/src/Whoops/Exception/ErrorException.php', + 'Whoops\\Exception\\Formatter' => __DIR__ . '/..' . '/filp/whoops/src/Whoops/Exception/Formatter.php', + 'Whoops\\Exception\\Frame' => __DIR__ . '/..' . '/filp/whoops/src/Whoops/Exception/Frame.php', + 'Whoops\\Exception\\FrameCollection' => __DIR__ . '/..' . '/filp/whoops/src/Whoops/Exception/FrameCollection.php', + 'Whoops\\Exception\\Inspector' => __DIR__ . '/..' . '/filp/whoops/src/Whoops/Exception/Inspector.php', + 'Whoops\\Handler\\CallbackHandler' => __DIR__ . '/..' . '/filp/whoops/src/Whoops/Handler/CallbackHandler.php', + 'Whoops\\Handler\\Handler' => __DIR__ . '/..' . '/filp/whoops/src/Whoops/Handler/Handler.php', + 'Whoops\\Handler\\HandlerInterface' => __DIR__ . '/..' . '/filp/whoops/src/Whoops/Handler/HandlerInterface.php', + 'Whoops\\Handler\\JsonResponseHandler' => __DIR__ . '/..' . '/filp/whoops/src/Whoops/Handler/JsonResponseHandler.php', + 'Whoops\\Handler\\PlainTextHandler' => __DIR__ . '/..' . '/filp/whoops/src/Whoops/Handler/PlainTextHandler.php', + 'Whoops\\Handler\\PrettyPageHandler' => __DIR__ . '/..' . '/filp/whoops/src/Whoops/Handler/PrettyPageHandler.php', + 'Whoops\\Handler\\XmlResponseHandler' => __DIR__ . '/..' . '/filp/whoops/src/Whoops/Handler/XmlResponseHandler.php', + 'Whoops\\Run' => __DIR__ . '/..' . '/filp/whoops/src/Whoops/Run.php', + 'Whoops\\RunInterface' => __DIR__ . '/..' . '/filp/whoops/src/Whoops/RunInterface.php', + 'Whoops\\Util\\HtmlDumperOutput' => __DIR__ . '/..' . '/filp/whoops/src/Whoops/Util/HtmlDumperOutput.php', + 'Whoops\\Util\\Misc' => __DIR__ . '/..' . '/filp/whoops/src/Whoops/Util/Misc.php', + 'Whoops\\Util\\SystemFacade' => __DIR__ . '/..' . '/filp/whoops/src/Whoops/Util/SystemFacade.php', + 'Whoops\\Util\\TemplateHelper' => __DIR__ . '/..' . '/filp/whoops/src/Whoops/Util/TemplateHelper.php', + ); + + public static function getInitializer(ClassLoader $loader) + { + return \Closure::bind(function () use ($loader) { + $loader->prefixLengthsPsr4 = ComposerStaticInitfabb7156af7a34291af2e3692e1864d3::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInitfabb7156af7a34291af2e3692e1864d3::$prefixDirsPsr4; + $loader->prefixesPsr0 = ComposerStaticInitfabb7156af7a34291af2e3692e1864d3::$prefixesPsr0; + $loader->classMap = ComposerStaticInitfabb7156af7a34291af2e3692e1864d3::$classMap; + + }, null, ClassLoader::class); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/composer/installed.json b/soc/2020/daily_report/archive/app/vendor/composer/installed.json new file mode 100644 index 0000000..e37fee2 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/composer/installed.json @@ -0,0 +1,2287 @@ +[ + { + "name": "erusev/parsedown", + "version": "1.7.4", + "version_normalized": "1.7.4.0", + "source": { + "type": "git", + "url": "https://github.com/erusev/parsedown.git", + "reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/erusev/parsedown/zipball/cb17b6477dfff935958ba01325f2e8a2bfa6dab3", + "reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35" + }, + "time": "2019-12-30T22:54:17+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "Parsedown": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Emanuil Rusev", + "email": "hello@erusev.com", + "homepage": "http://erusev.com" + } + ], + "description": "Parser for Markdown.", + "homepage": "http://parsedown.org", + "keywords": [ + "markdown", + "parser" + ] + }, + { + "name": "erusev/parsedown-extra", + "version": "0.8.1", + "version_normalized": "0.8.1.0", + "source": { + "type": "git", + "url": "https://github.com/erusev/parsedown-extra.git", + "reference": "91ac3ff98f0cea243bdccc688df43810f044dcef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/erusev/parsedown-extra/zipball/91ac3ff98f0cea243bdccc688df43810f044dcef", + "reference": "91ac3ff98f0cea243bdccc688df43810f044dcef", + "shasum": "" + }, + "require": { + "erusev/parsedown": "^1.7.4" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35" + }, + "time": "2019-12-30T23:20:37+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "ParsedownExtra": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Emanuil Rusev", + "email": "hello@erusev.com", + "homepage": "http://erusev.com" + } + ], + "description": "An extension of Parsedown that adds support for Markdown Extra.", + "homepage": "https://github.com/erusev/parsedown-extra", + "keywords": [ + "markdown", + "markdown extra", + "parsedown", + "parser" + ] + }, + { + "name": "fig/http-message-util", + "version": "1.1.4", + "version_normalized": "1.1.4.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message-util.git", + "reference": "3242caa9da7221a304b8f84eb9eaddae0a7cf422" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message-util/zipball/3242caa9da7221a304b8f84eb9eaddae0a7cf422", + "reference": "3242caa9da7221a304b8f84eb9eaddae0a7cf422", + "shasum": "" + }, + "require": { + "php": "^5.3 || ^7.0" + }, + "suggest": { + "psr/http-message": "The package containing the PSR-7 interfaces" + }, + "time": "2020-02-05T20:36:27+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Fig\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Utility classes and constants for use with PSR-7 (psr/http-message)", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ] + }, + { + "name": "filp/whoops", + "version": "2.7.2", + "version_normalized": "2.7.2.0", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "17d0d3f266c8f925ebd035cd36f83cf802b47d4a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/17d0d3f266c8f925ebd035cd36f83cf802b47d4a", + "reference": "17d0d3f266c8f925ebd035cd36f83cf802b47d4a", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0", + "psr/log": "^1.0.1" + }, + "require-dev": { + "mockery/mockery": "^0.9 || ^1.0", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0", + "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "time": "2020-05-05T12:28:07+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ] + }, + { + "name": "jeremeamia/superclosure", + "version": "2.4.0", + "version_normalized": "2.4.0.0", + "source": { + "type": "git", + "url": "https://github.com/jeremeamia/super_closure.git", + "reference": "5707d5821b30b9a07acfb4d76949784aaa0e9ce9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jeremeamia/super_closure/zipball/5707d5821b30b9a07acfb4d76949784aaa0e9ce9", + "reference": "5707d5821b30b9a07acfb4d76949784aaa0e9ce9", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^1.2|^2.0|^3.0|^4.0", + "php": ">=5.4", + "symfony/polyfill-php56": "^1.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0|^5.0" + }, + "time": "2018-03-21T22:21:57+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "SuperClosure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia", + "role": "Developer" + } + ], + "description": "Serialize Closure objects, including their context and binding", + "homepage": "https://github.com/jeremeamia/super_closure", + "keywords": [ + "closure", + "function", + "lambda", + "parser", + "serializable", + "serialize", + "tokenizer" + ], + "abandoned": "opis/closure" + }, + { + "name": "micheh/psr7-cache", + "version": "0.5", + "version_normalized": "0.5.0.0", + "source": { + "type": "git", + "url": "https://github.com/micheh/psr7-cache.git", + "reference": "b99e8ae6d024d8c70945084b5b979a62cfd05df4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/micheh/psr7-cache/zipball/b99e8ae6d024d8c70945084b5b979a62cfd05df4", + "reference": "b99e8ae6d024d8c70945084b5b979a62cfd05df4", + "shasum": "" + }, + "require": { + "php": ">=5.4", + "psr/http-message": "~1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0||~5.0" + }, + "time": "2016-04-15T16:31:14+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Micheh\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Cache and conditional request helpers for PSR-7 HTTP Messages", + "keywords": [ + "cache", + "conditional", + "http", + "http-message", + "if-match", + "if-modified-since", + "if-none-match", + "if-unmodified-since", + "psr", + "psr-7", + "request", + "response" + ] + }, + { + "name": "middlewares/cache", + "version": "v2.0.0", + "version_normalized": "2.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/middlewares/cache.git", + "reference": "75090ac75abdfd0756c07eef18cd002f5faf0fc0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/middlewares/cache/zipball/75090ac75abdfd0756c07eef18cd002f5faf0fc0", + "reference": "75090ac75abdfd0756c07eef18cd002f5faf0fc0", + "shasum": "" + }, + "require": { + "micheh/psr7-cache": "^0.5.0", + "middlewares/utils": "^3.0", + "php": "^7.2", + "psr/cache": "^1.0", + "psr/http-server-middleware": "^1.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.0", + "matthiasmullie/scrapbook": "^1.4", + "oscarotero/php-cs-fixer-config": "^1.0", + "phpunit/phpunit": "^8.1", + "squizlabs/php_codesniffer": "^3.0", + "zendframework/zend-diactoros": "^2.2" + }, + "time": "2019-12-01T00:39:05+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Middlewares\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Middleware with various cache utilities", + "homepage": "https://github.com/middlewares/cache", + "keywords": [ + "http", + "middleware", + "psr-15", + "psr-7" + ] + }, + { + "name": "middlewares/utils", + "version": "v3.1.0", + "version_normalized": "3.1.0.0", + "source": { + "type": "git", + "url": "https://github.com/middlewares/utils.git", + "reference": "13689487e8f3bba10b6cc66ed206efc8b874163e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/middlewares/utils/zipball/13689487e8f3bba10b6cc66ed206efc8b874163e", + "reference": "13689487e8f3bba10b6cc66ed206efc8b874163e", + "shasum": "" + }, + "require": { + "php": "^7.2", + "psr/container": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "psr/http-server-middleware": "^1.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.0", + "guzzlehttp/psr7": "dev-master", + "laminas/laminas-diactoros": "^2.2", + "nyholm/psr7": "^1.0", + "oscarotero/php-cs-fixer-config": "^1.0", + "phpunit/phpunit": "^8.1", + "slim/psr7": "~0.3", + "squizlabs/php_codesniffer": "^3.0", + "sunrise/http-message": "^1.0", + "sunrise/http-server-request": "^1.0", + "sunrise/stream": "^1.0", + "sunrise/uri": "^1.0" + }, + "time": "2020-01-19T00:30:41+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Middlewares\\Utils\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Common utils for PSR-15 middleware packages", + "homepage": "https://github.com/middlewares/utils", + "keywords": [ + "PSR-11", + "http", + "middleware", + "psr-15", + "psr-17", + "psr-7" + ] + }, + { + "name": "nikic/fast-route", + "version": "v1.3.0", + "version_normalized": "1.3.0.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/FastRoute.git", + "reference": "181d480e08d9476e61381e04a71b34dc0432e812" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/FastRoute/zipball/181d480e08d9476e61381e04a71b34dc0432e812", + "reference": "181d480e08d9476e61381e04a71b34dc0432e812", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35|~5.7" + }, + "time": "2018-02-13T20:26:39+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "FastRoute\\": "src/" + }, + "files": [ + "src/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov", + "email": "nikic@php.net" + } + ], + "description": "Fast request router for PHP", + "keywords": [ + "router", + "routing" + ] + }, + { + "name": "nikic/php-parser", + "version": "v4.4.0", + "version_normalized": "4.4.0.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "bd43ec7152eaaab3bd8c6d0aa95ceeb1df8ee120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/bd43ec7152eaaab3bd8c6d0aa95ceeb1df8ee120", + "reference": "bd43ec7152eaaab3bd8c6d0aa95ceeb1df8ee120", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "0.0.5", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0" + }, + "time": "2020-04-10T16:34:50+00:00", + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ] + }, + { + "name": "phlak/glob", + "version": "2.0.0", + "version_normalized": "2.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/PHLAK/Glob.git", + "reference": "95c93ae915771fde0001e2beb1682006f9aaf43c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHLAK/Glob/zipball/95c93ae915771fde0001e2beb1682006f9aaf43c", + "reference": "95c93ae915771fde0001e2beb1682006f9aaf43c", + "shasum": "" + }, + "require": { + "php": ">=7.0", + "symfony/finder": "^5.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.10", + "php": ">=7.2", + "phpunit/phpunit": "^8.0 || ^9.0", + "psy/psysh": "^0.10", + "symfony/var-dumper": "^5.0", + "vimeo/psalm": "^3.8" + }, + "time": "2020-05-07T22:15:41+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "PHLAK\\Utilities\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Kankiewicz", + "email": "Chris@ChrisKankiewicz.com" + } + ], + "description": "Glob-like pattern matching and utilities", + "funding": [ + { + "url": "https://github.com/sponsors/PHLAK", + "type": "github" + }, + { + "url": "https://paypal.me/ChrisKankiewicz", + "type": "paypal" + } + ] + }, + { + "name": "php-di/invoker", + "version": "2.0.0", + "version_normalized": "2.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/PHP-DI/Invoker.git", + "reference": "540c27c86f663e20fe39a24cd72fa76cdb21d41a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-DI/Invoker/zipball/540c27c86f663e20fe39a24cd72fa76cdb21d41a", + "reference": "540c27c86f663e20fe39a24cd72fa76cdb21d41a", + "shasum": "" + }, + "require": { + "psr/container": "~1.0" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "phpunit/phpunit": "~4.5" + }, + "time": "2017-03-20T19:28:22+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Invoker\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Generic and extensible callable invoker", + "homepage": "https://github.com/PHP-DI/Invoker", + "keywords": [ + "callable", + "dependency", + "dependency-injection", + "injection", + "invoke", + "invoker" + ] + }, + { + "name": "php-di/php-di", + "version": "6.1.0", + "version_normalized": "6.1.0.0", + "source": { + "type": "git", + "url": "https://github.com/PHP-DI/PHP-DI.git", + "reference": "69238bd49acc0eb6a967029311eeadc3f7c5d538" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/69238bd49acc0eb6a967029311eeadc3f7c5d538", + "reference": "69238bd49acc0eb6a967029311eeadc3f7c5d538", + "shasum": "" + }, + "require": { + "jeremeamia/superclosure": "^2.0", + "nikic/php-parser": "^2.0|^3.0|^4.0", + "php": ">=7.2.0", + "php-di/invoker": "^2.0", + "php-di/phpdoc-reader": "^2.0.1", + "psr/container": "^1.0" + }, + "provide": { + "psr/container-implementation": "^1.0" + }, + "require-dev": { + "doctrine/annotations": "~1.2", + "friendsofphp/php-cs-fixer": "^2.4", + "mnapoli/phpunit-easymock": "^1.2", + "ocramius/proxy-manager": "~2.0.2", + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^8.5" + }, + "suggest": { + "doctrine/annotations": "Install it if you want to use annotations (version ~1.2)", + "ocramius/proxy-manager": "Install it if you want to use lazy injection (version ~2.0)" + }, + "time": "2020-04-06T09:54:49+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "DI\\": "src/" + }, + "files": [ + "src/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "The dependency injection container for humans", + "homepage": "http://php-di.org/", + "keywords": [ + "PSR-11", + "container", + "container-interop", + "dependency injection", + "di", + "ioc", + "psr11" + ] + }, + { + "name": "php-di/phpdoc-reader", + "version": "2.1.1", + "version_normalized": "2.1.1.0", + "source": { + "type": "git", + "url": "https://github.com/PHP-DI/PhpDocReader.git", + "reference": "15678f7451c020226807f520efb867ad26fbbfcf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-DI/PhpDocReader/zipball/15678f7451c020226807f520efb867ad26fbbfcf", + "reference": "15678f7451c020226807f520efb867ad26fbbfcf", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.6" + }, + "time": "2019-09-26T11:24:58+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "PhpDocReader\\": "src/PhpDocReader" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PhpDocReader parses @var and @param values in PHP docblocks (supports namespaced class names with the same resolution rules as PHP)", + "keywords": [ + "phpdoc", + "reflection" + ] + }, + { + "name": "php-di/slim-bridge", + "version": "3.0.1", + "version_normalized": "3.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/PHP-DI/Slim-Bridge.git", + "reference": "e7a568c00ecf6b0128f2a751990e06e77bedec68" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-DI/Slim-Bridge/zipball/e7a568c00ecf6b0128f2a751990e06e77bedec68", + "reference": "e7a568c00ecf6b0128f2a751990e06e77bedec68", + "shasum": "" + }, + "require": { + "php": "~7.1", + "php-di/invoker": "^2.0.0", + "php-di/php-di": "^6.0.0", + "slim/slim": "^4.2.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.0", + "zendframework/zend-diactoros": "^2.1" + }, + "time": "2020-01-13T19:11:12+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "DI\\Bridge\\Slim\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHP-DI integration in Slim" + }, + { + "name": "phpoption/phpoption", + "version": "1.7.3", + "version_normalized": "1.7.3.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "4acfd6a4b33a509d8c88f50e5222f734b6aeebae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/4acfd6a4b33a509d8c88f50e5222f734b6aeebae", + "reference": "4acfd6a4b33a509d8c88f50e5222f734b6aeebae", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.3", + "phpunit/phpunit": "^4.8.35 || ^5.0 || ^6.0 || ^7.0" + }, + "time": "2020-03-21T18:07:53+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ] + }, + { + "name": "psr/cache", + "version": "1.0.1", + "version_normalized": "1.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "time": "2016-08-06T20:24:11+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ] + }, + { + "name": "psr/container", + "version": "1.0.0", + "version_normalized": "1.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "time": "2017-02-14T16:28:37+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ] + }, + { + "name": "psr/http-factory", + "version": "1.0.1", + "version_normalized": "1.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0" + }, + "time": "2019-04-30T12:38:16+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ] + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "version_normalized": "1.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "time": "2016-08-06T14:39:51+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ] + }, + { + "name": "psr/http-server-handler", + "version": "1.0.1", + "version_normalized": "1.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-server-handler.git", + "reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-server-handler/zipball/aff2f80e33b7f026ec96bb42f63242dc50ffcae7", + "reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7", + "shasum": "" + }, + "require": { + "php": ">=7.0", + "psr/http-message": "^1.0" + }, + "time": "2018-10-30T16:46:14+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Http\\Server\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP server-side request handler", + "keywords": [ + "handler", + "http", + "http-interop", + "psr", + "psr-15", + "psr-7", + "request", + "response", + "server" + ] + }, + { + "name": "psr/http-server-middleware", + "version": "1.0.1", + "version_normalized": "1.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-server-middleware.git", + "reference": "2296f45510945530b9dceb8bcedb5cb84d40c5f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-server-middleware/zipball/2296f45510945530b9dceb8bcedb5cb84d40c5f5", + "reference": "2296f45510945530b9dceb8bcedb5cb84d40c5f5", + "shasum": "" + }, + "require": { + "php": ">=7.0", + "psr/http-message": "^1.0", + "psr/http-server-handler": "^1.0" + }, + "time": "2018-10-30T17:12:04+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Http\\Server\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP server-side middleware", + "keywords": [ + "http", + "http-interop", + "middleware", + "psr", + "psr-15", + "psr-7", + "request", + "response" + ] + }, + { + "name": "psr/log", + "version": "1.1.3", + "version_normalized": "1.1.3.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "time": "2020-03-23T09:12:05+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ] + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "version_normalized": "3.0.3.0", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "time": "2019-03-08T08:55:37+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders." + }, + { + "name": "slim/psr7", + "version": "1.1.0", + "version_normalized": "1.1.0.0", + "source": { + "type": "git", + "url": "https://github.com/slimphp/Slim-Psr7.git", + "reference": "3c76899e707910779f13d7af95fde12310b0a5ae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/slimphp/Slim-Psr7/zipball/3c76899e707910779f13d7af95fde12310b0a5ae", + "reference": "3c76899e707910779f13d7af95fde12310b0a5ae", + "shasum": "" + }, + "require": { + "fig/http-message-util": "^1.1.2", + "php": "^7.2", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "ralouphie/getallheaders": "^3" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "adriansuter/php-autoload-override": "^1.0", + "ext-json": "*", + "http-interop/http-factory-tests": "^0.6.0", + "php-http/psr7-integration-tests": "dev-master", + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^8.5", + "squizlabs/php_codesniffer": "^3.5" + }, + "time": "2020-05-01T14:24:20+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Slim\\Psr7\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Josh Lockhart", + "email": "hello@joshlockhart.com", + "homepage": "http://joshlockhart.com" + }, + { + "name": "Andrew Smith", + "email": "a.smith@silentworks.co.uk", + "homepage": "http://silentworks.co.uk" + }, + { + "name": "Rob Allen", + "email": "rob@akrabat.com", + "homepage": "http://akrabat.com" + }, + { + "name": "Pierre Berube", + "email": "pierre@lgse.com", + "homepage": "http://www.lgse.com" + } + ], + "description": "Strict PSR-7 implementation", + "homepage": "https://www.slimframework.com", + "keywords": [ + "http", + "psr-7", + "psr7" + ] + }, + { + "name": "slim/slim", + "version": "4.5.0", + "version_normalized": "4.5.0.0", + "source": { + "type": "git", + "url": "https://github.com/slimphp/Slim.git", + "reference": "5613cbb521081ed676d5d7eb3e44f2b80a818c24" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/slimphp/Slim/zipball/5613cbb521081ed676d5d7eb3e44f2b80a818c24", + "reference": "5613cbb521081ed676d5d7eb3e44f2b80a818c24", + "shasum": "" + }, + "require": { + "ext-json": "*", + "nikic/fast-route": "^1.3", + "php": "^7.2", + "psr/container": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "^1.1" + }, + "require-dev": { + "adriansuter/php-autoload-override": "^1.0", + "ext-simplexml": "*", + "guzzlehttp/psr7": "^1.5", + "http-interop/http-factory-guzzle": "^1.0", + "laminas/laminas-diactoros": "^2.1", + "nyholm/psr7": "^1.1", + "nyholm/psr7-server": "^0.3.0", + "phpspec/prophecy": "^1.10", + "phpstan/phpstan": "^0.11.5", + "phpunit/phpunit": "^8.5", + "slim/http": "^1.0", + "slim/psr7": "^1.0", + "squizlabs/php_codesniffer": "^3.5" + }, + "suggest": { + "ext-simplexml": "Needed to support XML format in BodyParsingMiddleware", + "ext-xml": "Needed to support XML format in BodyParsingMiddleware", + "php-di/php-di": "PHP-DI is the recommended container library to be used with Slim", + "slim/psr7": "Slim PSR-7 implementation. See https://www.slimframework.com/docs/v4/start/installation.html for more information." + }, + "time": "2020-04-14T20:49:48+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Slim\\": "Slim" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Josh Lockhart", + "email": "hello@joshlockhart.com", + "homepage": "https://joshlockhart.com" + }, + { + "name": "Andrew Smith", + "email": "a.smith@silentworks.co.uk", + "homepage": "http://silentworks.co.uk" + }, + { + "name": "Rob Allen", + "email": "rob@akrabat.com", + "homepage": "http://akrabat.com" + }, + { + "name": "Pierre Berube", + "email": "pierre@lgse.com", + "homepage": "http://www.lgse.com" + }, + { + "name": "Gabriel Manricks", + "email": "gmanricks@me.com", + "homepage": "http://gabrielmanricks.com" + } + ], + "description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs", + "homepage": "https://www.slimframework.com", + "keywords": [ + "api", + "framework", + "micro", + "router" + ] + }, + { + "name": "slim/twig-view", + "version": "3.1.0", + "version_normalized": "3.1.0.0", + "source": { + "type": "git", + "url": "https://github.com/slimphp/Twig-View.git", + "reference": "36f7a04ca9e58ef926dc25cd0110f629668cb3f0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/slimphp/Twig-View/zipball/36f7a04ca9e58ef926dc25cd0110f629668cb3f0", + "reference": "36f7a04ca9e58ef926dc25cd0110f629668cb3f0", + "shasum": "" + }, + "require": { + "php": "^7.2", + "psr/http-message": "^1.0", + "slim/slim": "^4.0", + "twig/twig": "^3.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.11.15", + "phpunit/phpunit": "^8.5", + "psr/http-factory": "^1.0", + "squizlabs/php_codesniffer": "^3.5" + }, + "time": "2020-03-13T18:08:36+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Slim\\Views\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Josh Lockhart", + "email": "hello@joshlockhart.com", + "homepage": "http://joshlockhart.com" + }, + { + "name": "Pierre Berube", + "email": "pierre@lgse.com", + "homepage": "http://www.lgse.com" + } + ], + "description": "Slim Framework 4 view helper built on top of the Twig 3 templating component", + "homepage": "https://www.slimframework.com", + "keywords": [ + "framework", + "slim", + "template", + "twig", + "view" + ] + }, + { + "name": "symfony/finder", + "version": "v5.0.8", + "version_normalized": "5.0.8.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "600a52c29afc0d1caa74acbec8d3095ca7e9910d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/600a52c29afc0d1caa74acbec8d3095ca7e9910d", + "reference": "600a52c29afc0d1caa74acbec8d3095ca7e9910d", + "shasum": "" + }, + "require": { + "php": "^7.2.5" + }, + "time": "2020-03-27T16:56:45+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ] + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.15.0", + "version_normalized": "1.15.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/4719fa9c18b0464d399f1a63bf624b42b6fa8d14", + "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "time": "2020-02-27T09:26:54+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.15-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ] + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.15.0", + "version_normalized": "1.15.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/81ffd3a9c6d707be22e3012b827de1c9775fc5ac", + "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "time": "2020-03-09T19:04:49+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.15-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ] + }, + { + "name": "symfony/polyfill-php56", + "version": "v1.15.0", + "version_normalized": "1.15.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php56.git", + "reference": "d51ec491c8ddceae7dca8dd6c7e30428f543f37d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/d51ec491c8ddceae7dca8dd6c7e30428f543f37d", + "reference": "d51ec491c8ddceae7dca8dd6c7e30428f543f37d", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-util": "~1.0" + }, + "time": "2020-03-09T19:04:49+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.15-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php56\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ] + }, + { + "name": "symfony/polyfill-util", + "version": "v1.15.0", + "version_normalized": "1.15.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-util.git", + "reference": "d8e76c104127675d0ea3df3be0f2ae24a8619027" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/d8e76c104127675d0ea3df3be0f2ae24a8619027", + "reference": "d8e76c104127675d0ea3df3be0f2ae24a8619027", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "time": "2020-03-02T11:55:35+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.15-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Util\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony utilities for portability of PHP codes", + "homepage": "https://symfony.com", + "keywords": [ + "compat", + "compatibility", + "polyfill", + "shim" + ] + }, + { + "name": "symfony/translation", + "version": "v5.0.8", + "version_normalized": "5.0.8.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "c3879db7a68fe3e12b41263b05879412c87b27fd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/c3879db7a68fe3e12b41263b05879412c87b27fd", + "reference": "c3879db7a68fe3e12b41263b05879412c87b27fd", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2" + }, + "conflict": { + "symfony/config": "<4.4", + "symfony/dependency-injection": "<5.0", + "symfony/http-kernel": "<5.0", + "symfony/twig-bundle": "<5.0", + "symfony/yaml": "<4.4" + }, + "provide": { + "symfony/translation-implementation": "2.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/dependency-injection": "^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/http-kernel": "^5.0", + "symfony/intl": "^4.4|^5.0", + "symfony/service-contracts": "^1.1.2|^2", + "symfony/yaml": "^4.4|^5.0" + }, + "suggest": { + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "time": "2020-04-12T16:45:47+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Translation Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ] + }, + { + "name": "symfony/translation-contracts", + "version": "v2.0.1", + "version_normalized": "2.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "8cc682ac458d75557203b2f2f14b0b92e1c744ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/8cc682ac458d75557203b2f2f14b0b92e1c744ed", + "reference": "8cc682ac458d75557203b2f2f14b0b92e1c744ed", + "shasum": "" + }, + "require": { + "php": "^7.2.5" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "time": "2019-11-18T17:27:11+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ] + }, + { + "name": "symfony/var-dumper", + "version": "v5.0.8", + "version_normalized": "5.0.8.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "09de28632f16f81058a85fcf318397218272a07b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/09de28632f16f81058a85fcf318397218272a07b", + "reference": "09de28632f16f81058a85fcf318397218272a07b", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "phpunit/phpunit": "<5.4.3", + "symfony/console": "<4.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "twig/twig": "^2.4|^3.0" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "time": "2020-04-12T16:45:47+00:00", + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony mechanism for exploring and dumping PHP variables", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ] + }, + { + "name": "symfony/yaml", + "version": "v5.0.8", + "version_normalized": "5.0.8.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "482fb4e710e5af3e0e78015f19aa716ad953392f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/482fb4e710e5af3e0e78015f19aa716ad953392f", + "reference": "482fb4e710e5af3e0e78015f19aa716ad953392f", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/console": "<4.4" + }, + "require-dev": { + "symfony/console": "^4.4|^5.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "time": "2020-04-28T17:58:55+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ] + }, + { + "name": "tightenco/collect", + "version": "v7.9.2", + "version_normalized": "7.9.2.0", + "source": { + "type": "git", + "url": "https://github.com/tightenco/collect.git", + "reference": "372230e88129364638d2d9809143fafbb993d7d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tightenco/collect/zipball/372230e88129364638d2d9809143fafbb993d7d4", + "reference": "372230e88129364638d2d9809143fafbb993d7d4", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/var-dumper": "^3.4 || ^4.0 || ^5.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "nesbot/carbon": "^2.23.0", + "phpunit/phpunit": "^7.0" + }, + "time": "2020-04-29T16:33:30+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "files": [ + "src/Collect/Support/helpers.php", + "src/Collect/Support/alias.php" + ], + "psr-4": { + "Tightenco\\Collect\\": "src/Collect" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylorotwell@gmail.com" + } + ], + "description": "Collect - Illuminate Collections as a separate package.", + "keywords": [ + "collection", + "laravel" + ] + }, + { + "name": "twig/twig", + "version": "v3.0.3", + "version_normalized": "3.0.3.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "3b88ccd180a6b61ebb517aea3b1a8906762a1dc2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/3b88ccd180a6b61ebb517aea3b1a8906762a1dc2", + "reference": "3b88ccd180a6b61ebb517aea3b1a8906762a1dc2", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-mbstring": "^1.3" + }, + "require-dev": { + "psr/container": "^1.0", + "symfony/phpunit-bridge": "^4.4|^5.0" + }, + "time": "2020-02-11T15:33:47+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Twig\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Twig Team", + "role": "Contributors" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "https://twig.symfony.com", + "keywords": [ + "templating" + ] + }, + { + "name": "vlucas/phpdotenv", + "version": "v4.1.5", + "version_normalized": "4.1.5.0", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "539bb6927c101a5605d31d11a2d17185a2ce2bf1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/539bb6927c101a5605d31d11a2d17185a2ce2bf1", + "reference": "539bb6927c101a5605d31d11a2d17185a2ce2bf1", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0", + "phpoption/phpoption": "^1.7.2", + "symfony/polyfill-ctype": "^1.9" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.3", + "ext-filter": "*", + "ext-pcre": "*", + "phpunit/phpunit": "^4.8.35 || ^5.0 || ^6.0 || ^7.0" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator.", + "ext-pcre": "Required to use most of the library." + }, + "time": "2020-05-02T14:08:57+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "homepage": "https://gjcampbell.co.uk/" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://vancelucas.com/" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ] + } +] diff --git a/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/.travis.yml b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/.travis.yml new file mode 100644 index 0000000..d0b48f8 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/.travis.yml @@ -0,0 +1,30 @@ +language: php + +dist: trusty +sudo: false + +matrix: + include: + - php: 5.3 + dist: precise + - php: 5.4 + - php: 5.5 + - php: 5.6 + - php: 7.0 + - php: 7.1 + - php: 7.2 + - php: 7.3 + - php: 7.4 + - php: nightly + fast_finish: true + allow_failures: + - php: nightly + - php: hhvm-nightly + +install: + - composer install --prefer-source + +script: + - vendor/bin/phpunit + - vendor/bin/phpunit vendor/erusev/parsedown/test/CommonMarkTestWeak.php || true + - '[ -z "$TRAVIS_TAG" ] || [ "$TRAVIS_TAG" == "$(php -r "require(\"ParsedownExtra.php\"); echo ParsedownExtra::version;")" ]' diff --git a/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/LICENSE.txt b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/LICENSE.txt new file mode 100644 index 0000000..baca86f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/LICENSE.txt @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013 Emanuil Rusev, erusev.com + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/ParsedownExtra.php b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/ParsedownExtra.php new file mode 100644 index 0000000..632ba84 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/ParsedownExtra.php @@ -0,0 +1,538 @@ +BlockTypes[':'] []= 'DefinitionList'; + $this->BlockTypes['*'] []= 'Abbreviation'; + + # identify footnote definitions before reference definitions + array_unshift($this->BlockTypes['['], 'Footnote'); + + # identify footnote markers before before links + array_unshift($this->InlineTypes['['], 'FootnoteMarker'); + } + + # + # ~ + + function text($text) + { + $markup = parent::text($text); + + # merge consecutive dl elements + + $markup = preg_replace('/<\/dl>\s+
    \s+/', '', $markup); + + # add footnotes + + if (isset($this->DefinitionData['Footnote'])) + { + $Element = $this->buildFootnoteElement(); + + $markup .= "\n" . $this->element($Element); + } + + return $markup; + } + + # + # Blocks + # + + # + # Abbreviation + + protected function blockAbbreviation($Line) + { + if (preg_match('/^\*\[(.+?)\]:[ ]*(.+?)[ ]*$/', $Line['text'], $matches)) + { + $this->DefinitionData['Abbreviation'][$matches[1]] = $matches[2]; + + $Block = array( + 'hidden' => true, + ); + + return $Block; + } + } + + # + # Footnote + + protected function blockFootnote($Line) + { + if (preg_match('/^\[\^(.+?)\]:[ ]?(.*)$/', $Line['text'], $matches)) + { + $Block = array( + 'label' => $matches[1], + 'text' => $matches[2], + 'hidden' => true, + ); + + return $Block; + } + } + + protected function blockFootnoteContinue($Line, $Block) + { + if ($Line['text'][0] === '[' and preg_match('/^\[\^(.+?)\]:/', $Line['text'])) + { + return; + } + + if (isset($Block['interrupted'])) + { + if ($Line['indent'] >= 4) + { + $Block['text'] .= "\n\n" . $Line['text']; + + return $Block; + } + } + else + { + $Block['text'] .= "\n" . $Line['text']; + + return $Block; + } + } + + protected function blockFootnoteComplete($Block) + { + $this->DefinitionData['Footnote'][$Block['label']] = array( + 'text' => $Block['text'], + 'count' => null, + 'number' => null, + ); + + return $Block; + } + + # + # Definition List + + protected function blockDefinitionList($Line, $Block) + { + if ( ! isset($Block) or isset($Block['type'])) + { + return; + } + + $Element = array( + 'name' => 'dl', + 'handler' => 'elements', + 'text' => array(), + ); + + $terms = explode("\n", $Block['element']['text']); + + foreach ($terms as $term) + { + $Element['text'] []= array( + 'name' => 'dt', + 'handler' => 'line', + 'text' => $term, + ); + } + + $Block['element'] = $Element; + + $Block = $this->addDdElement($Line, $Block); + + return $Block; + } + + protected function blockDefinitionListContinue($Line, array $Block) + { + if ($Line['text'][0] === ':') + { + $Block = $this->addDdElement($Line, $Block); + + return $Block; + } + else + { + if (isset($Block['interrupted']) and $Line['indent'] === 0) + { + return; + } + + if (isset($Block['interrupted'])) + { + $Block['dd']['handler'] = 'text'; + $Block['dd']['text'] .= "\n\n"; + + unset($Block['interrupted']); + } + + $text = substr($Line['body'], min($Line['indent'], 4)); + + $Block['dd']['text'] .= "\n" . $text; + + return $Block; + } + } + + # + # Header + + protected function blockHeader($Line) + { + $Block = parent::blockHeader($Line); + + if (! isset($Block)) { + return null; + } + + if (preg_match('/[ #]*{('.$this->regexAttribute.'+)}[ ]*$/', $Block['element']['text'], $matches, PREG_OFFSET_CAPTURE)) + { + $attributeString = $matches[1][0]; + + $Block['element']['attributes'] = $this->parseAttributeData($attributeString); + + $Block['element']['text'] = substr($Block['element']['text'], 0, $matches[0][1]); + } + + return $Block; + } + + # + # Markup + + protected function blockMarkupComplete($Block) + { + if ( ! isset($Block['void'])) + { + $Block['markup'] = $this->processTag($Block['markup']); + } + + return $Block; + } + + # + # Setext + + protected function blockSetextHeader($Line, array $Block = null) + { + $Block = parent::blockSetextHeader($Line, $Block); + + if (! isset($Block)) { + return null; + } + + if (preg_match('/[ ]*{('.$this->regexAttribute.'+)}[ ]*$/', $Block['element']['text'], $matches, PREG_OFFSET_CAPTURE)) + { + $attributeString = $matches[1][0]; + + $Block['element']['attributes'] = $this->parseAttributeData($attributeString); + + $Block['element']['text'] = substr($Block['element']['text'], 0, $matches[0][1]); + } + + return $Block; + } + + # + # Inline Elements + # + + # + # Footnote Marker + + protected function inlineFootnoteMarker($Excerpt) + { + if (preg_match('/^\[\^(.+?)\]/', $Excerpt['text'], $matches)) + { + $name = $matches[1]; + + if ( ! isset($this->DefinitionData['Footnote'][$name])) + { + return; + } + + $this->DefinitionData['Footnote'][$name]['count'] ++; + + if ( ! isset($this->DefinitionData['Footnote'][$name]['number'])) + { + $this->DefinitionData['Footnote'][$name]['number'] = ++ $this->footnoteCount; # » & + } + + $Element = array( + 'name' => 'sup', + 'attributes' => array('id' => 'fnref'.$this->DefinitionData['Footnote'][$name]['count'].':'.$name), + 'handler' => 'element', + 'text' => array( + 'name' => 'a', + 'attributes' => array('href' => '#fn:'.$name, 'class' => 'footnote-ref'), + 'text' => $this->DefinitionData['Footnote'][$name]['number'], + ), + ); + + return array( + 'extent' => strlen($matches[0]), + 'element' => $Element, + ); + } + } + + private $footnoteCount = 0; + + # + # Link + + protected function inlineLink($Excerpt) + { + $Link = parent::inlineLink($Excerpt); + + if (! isset($Link)) { + return null; + } + + $remainder = substr($Excerpt['text'], $Link['extent']); + + if (preg_match('/^[ ]*{('.$this->regexAttribute.'+)}/', $remainder, $matches)) + { + $Link['element']['attributes'] += $this->parseAttributeData($matches[1]); + + $Link['extent'] += strlen($matches[0]); + } + + return $Link; + } + + # + # ~ + # + + protected function unmarkedText($text) + { + $text = parent::unmarkedText($text); + + if (isset($this->DefinitionData['Abbreviation'])) + { + foreach ($this->DefinitionData['Abbreviation'] as $abbreviation => $meaning) + { + $pattern = '/\b'.preg_quote($abbreviation, '/').'\b/'; + + $text = preg_replace($pattern, ''.$abbreviation.'', $text); + } + } + + return $text; + } + + # + # Util Methods + # + + protected function addDdElement(array $Line, array $Block) + { + $text = substr($Line['text'], 1); + $text = trim($text); + + unset($Block['dd']); + + $Block['dd'] = array( + 'name' => 'dd', + 'handler' => 'line', + 'text' => $text, + ); + + if (isset($Block['interrupted'])) + { + $Block['dd']['handler'] = 'text'; + + unset($Block['interrupted']); + } + + $Block['element']['text'] []= & $Block['dd']; + + return $Block; + } + + protected function buildFootnoteElement() + { + $Element = array( + 'name' => 'div', + 'attributes' => array('class' => 'footnotes'), + 'handler' => 'elements', + 'text' => array( + array( + 'name' => 'hr', + ), + array( + 'name' => 'ol', + 'handler' => 'elements', + 'text' => array(), + ), + ), + ); + + uasort($this->DefinitionData['Footnote'], 'self::sortFootnotes'); + + foreach ($this->DefinitionData['Footnote'] as $definitionId => $DefinitionData) + { + if ( ! isset($DefinitionData['number'])) + { + continue; + } + + $text = $DefinitionData['text']; + + $text = parent::text($text); + + $numbers = range(1, $DefinitionData['count']); + + $backLinksMarkup = ''; + + foreach ($numbers as $number) + { + $backLinksMarkup .= ' '; + } + + $backLinksMarkup = substr($backLinksMarkup, 1); + + if (substr($text, - 4) === '

    ') + { + $backLinksMarkup = ' '.$backLinksMarkup; + + $text = substr_replace($text, $backLinksMarkup.'

    ', - 4); + } + else + { + $text .= "\n".'

    '.$backLinksMarkup.'

    '; + } + + $Element['text'][1]['text'] []= array( + 'name' => 'li', + 'attributes' => array('id' => 'fn:'.$definitionId), + 'rawHtml' => "\n".$text."\n", + ); + } + + return $Element; + } + + # ~ + + protected function parseAttributeData($attributeString) + { + $Data = array(); + + $attributes = preg_split('/[ ]+/', $attributeString, - 1, PREG_SPLIT_NO_EMPTY); + + foreach ($attributes as $attribute) + { + if ($attribute[0] === '#') + { + $Data['id'] = substr($attribute, 1); + } + else # "." + { + $classes []= substr($attribute, 1); + } + } + + if (isset($classes)) + { + $Data['class'] = implode(' ', $classes); + } + + return $Data; + } + + # ~ + + protected function processTag($elementMarkup) # recursive + { + # http://stackoverflow.com/q/1148928/200145 + libxml_use_internal_errors(true); + + $DOMDocument = new DOMDocument; + + # http://stackoverflow.com/q/11309194/200145 + $elementMarkup = mb_convert_encoding($elementMarkup, 'HTML-ENTITIES', 'UTF-8'); + + # http://stackoverflow.com/q/4879946/200145 + $DOMDocument->loadHTML($elementMarkup); + $DOMDocument->removeChild($DOMDocument->doctype); + $DOMDocument->replaceChild($DOMDocument->firstChild->firstChild->firstChild, $DOMDocument->firstChild); + + $elementText = ''; + + if ($DOMDocument->documentElement->getAttribute('markdown') === '1') + { + foreach ($DOMDocument->documentElement->childNodes as $Node) + { + $elementText .= $DOMDocument->saveHTML($Node); + } + + $DOMDocument->documentElement->removeAttribute('markdown'); + + $elementText = "\n".$this->text($elementText)."\n"; + } + else + { + foreach ($DOMDocument->documentElement->childNodes as $Node) + { + $nodeMarkup = $DOMDocument->saveHTML($Node); + + if ($Node instanceof DOMElement and ! in_array($Node->nodeName, $this->textLevelElements)) + { + $elementText .= $this->processTag($nodeMarkup); + } + else + { + $elementText .= $nodeMarkup; + } + } + } + + # because we don't want for markup to get encoded + $DOMDocument->documentElement->nodeValue = 'placeholder\x1A'; + + $markup = $DOMDocument->saveHTML($DOMDocument->documentElement); + $markup = str_replace('placeholder\x1A', $elementText, $markup); + + return $markup; + } + + # ~ + + protected function sortFootnotes($A, $B) # callback + { + return $A['number'] - $B['number']; + } + + # + # Fields + # + + protected $regexAttribute = '(?:[#.][-\w]+[ ]*)'; +} diff --git a/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/README.md b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/README.md new file mode 100644 index 0000000..cee4b54 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/README.md @@ -0,0 +1,31 @@ +> You might also like [Caret](http://caret.io?ref=parsedown) - our Markdown editor for the Desktop. + +## Parsedown Extra + +[![Build Status](https://img.shields.io/travis/erusev/parsedown-extra/master.svg?style=flat-square)](https://travis-ci.org/erusev/parsedown-extra) + +An extension of [Parsedown](http://parsedown.org) that adds support for [Markdown Extra](https://michelf.ca/projects/php-markdown/extra/). + +[See Demo](http://parsedown.org/extra/) + +### Installation + +Include both `Parsedown.php` and `ParsedownExtra.php` or install [the composer package](https://packagist.org/packages/erusev/parsedown-extra). + +### Example + +``` php +$Extra = new ParsedownExtra(); + +echo $Extra->text('# Header {.sth}'); # prints:

    Header

    +``` + +### Questions + +**Who uses Parsedown Extra?** + +[October CMS](http://octobercms.com/), [Bolt CMS](http://bolt.cm/), [Kirby CMS](http://getkirby.com/), [Grav CMS](http://getgrav.org/), [Statamic CMS](http://www.statamic.com/) and [more](https://www.versioneye.com/php/erusev:parsedown-extra/references). + +**How can I help?** + +Use it, star it, share it and in case you feel generous, [donate some money](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=528P3NZQMP8N2). diff --git a/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/composer.json b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/composer.json new file mode 100644 index 0000000..317d147 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/composer.json @@ -0,0 +1,33 @@ +{ + "name": "erusev/parsedown-extra", + "description": "An extension of Parsedown that adds support for Markdown Extra.", + "keywords": ["markdown", "markdown extra", "parser", "parsedown"], + "homepage": "https://github.com/erusev/parsedown-extra", + "type": "library", + "license": "MIT", + "authors": [ + { + "name": "Emanuil Rusev", + "email": "hello@erusev.com", + "homepage": "http://erusev.com" + } + ], + "require": { + "erusev/parsedown": "^1.7.4" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35" + }, + "autoload": { + "psr-0": {"ParsedownExtra": ""} + }, + "autoload-dev": { + "psr-0": { + "TestParsedown": "test/", + "ParsedownExtraTest": "test/", + "ParsedownTest": "vendor/erusev/parsedown/test/", + "CommonMarkTest": "vendor/erusev/parsedown/test/", + "CommonMarkTestWeak": "vendor/erusev/parsedown/test/" + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/phpunit.xml.dist b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/phpunit.xml.dist new file mode 100644 index 0000000..29880b5 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/phpunit.xml.dist @@ -0,0 +1,8 @@ + + + + + test/ParsedownExtraTest.php + + + diff --git a/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/ParsedownExtraTest.php b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/ParsedownExtraTest.php new file mode 100644 index 0000000..d2a6d23 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/ParsedownExtraTest.php @@ -0,0 +1,11 @@ +textLevelElements; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/abbreviation.html b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/abbreviation.html new file mode 100644 index 0000000..9b3a45c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/abbreviation.html @@ -0,0 +1,3 @@ +

    The HTML specification +is maintained by the W3C. +The abbreviation ML is contained in the abbreviation HTML.

    \ No newline at end of file diff --git a/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/abbreviation.md b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/abbreviation.md new file mode 100644 index 0000000..4ac8f88 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/abbreviation.md @@ -0,0 +1,7 @@ +The HTML specification +is maintained by the W3C. +The abbreviation ML is contained in the abbreviation HTML. + +*[HTML]: Hyper Text Markup Language +*[W3C]: World Wide Web Consortium +*[ML]: Markup Language \ No newline at end of file diff --git a/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/compound_footnote.html b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/compound_footnote.html new file mode 100644 index 0000000..1a3848f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/compound_footnote.html @@ -0,0 +1,18 @@ +

    footnote 1 and another one 2

    +
    +
    +
      +
    1. +

      line 1 +line 2

      +
      +

      quote

      +
      +

      another paragraph 

      +
    2. +
    3. +

      paragraph

      +

      another paragraph 

      +
    4. +
    +
    \ No newline at end of file diff --git a/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/compound_footnote.md b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/compound_footnote.md new file mode 100644 index 0000000..5bca3c7 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/compound_footnote.md @@ -0,0 +1,14 @@ +footnote [^1] and another one [^2] + +[^1]: line 1 + line 2 + + > quote + + another paragraph + +[^2]: + paragraph + + another paragraph + \ No newline at end of file diff --git a/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/definition_list.html b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/definition_list.html new file mode 100644 index 0000000..2567dc1 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/definition_list.html @@ -0,0 +1,17 @@ +
    +
    Term 1
    +
    one
    +
    two +extra line
    +
    Term 2
    +

    lazy +line

    +

    multiple

    +

    paragraphs

    +

    nested

    +
    code block
    +
    +

    quote +block

    +
    +
    \ No newline at end of file diff --git a/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/definition_list.md b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/definition_list.md new file mode 100644 index 0000000..ec0ee03 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/definition_list.md @@ -0,0 +1,20 @@ +Term 1 +: one +: two + extra line + +Term 2 + +: lazy +line + +: multiple + + paragraphs + +: nested + + code block + + > quote + > block \ No newline at end of file diff --git a/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/footnote.html b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/footnote.html new file mode 100644 index 0000000..d0ba76c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/footnote.html @@ -0,0 +1,20 @@ +

    first 1 second 2.

    +

    first 3 second 4.

    +

    second time 1

    +
    +
    +
      +
    1. +

      one 

      +
    2. +
    3. +

      two 

      +
    4. +
    5. +

      one 

      +
    6. +
    7. +

      two 

      +
    8. +
    +
    \ No newline at end of file diff --git a/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/footnote.md b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/footnote.md new file mode 100644 index 0000000..07d7010 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/footnote.md @@ -0,0 +1,11 @@ +first [^1] second [^2]. + +[^1]: one +[^2]: two + +first [^a] second [^b]. + +[^a]: one +[^b]: two + +second time [^1] \ No newline at end of file diff --git a/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/markdown_inside_markup.html b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/markdown_inside_markup.html new file mode 100644 index 0000000..27da259 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/markdown_inside_markup.html @@ -0,0 +1,25 @@ +
    +

    markdown

    +

    This is another paragraph. It contains inline markup.

    +
    +_no markdown_ +
    +
    +
    +
    +

    markdown

    +
    +

    markdown

    +
    +
    +
    +
    +_no markdown_ +
    +

    markdown

    +
    +
    +
    +
    +_no markdown_ +
    \ No newline at end of file diff --git a/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/markdown_inside_markup.md b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/markdown_inside_markup.md new file mode 100644 index 0000000..dbb85d6 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/markdown_inside_markup.md @@ -0,0 +1,32 @@ +
    +_markdown_ + +This is another paragraph. It contains inline markup. +
    +_no markdown_ +
    +
    + +--- + +
    +_markdown_ +
    +_markdown_ +
    +
    + +--- + +
    +_no markdown_ +
    +_markdown_ +
    +
    + +--- + +
    +_no markdown_ +
    \ No newline at end of file diff --git a/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/special_attributes.html b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/special_attributes.html new file mode 100644 index 0000000..cafa311 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/special_attributes.html @@ -0,0 +1,6 @@ +

    Header 1

    +

    Header 2

    +

    The Site

    +

    The Site

    +

    link

    +

    \ No newline at end of file diff --git a/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/special_attributes.md b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/special_attributes.md new file mode 100644 index 0000000..01f29fc --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown-extra/test/data/special_attributes.md @@ -0,0 +1,12 @@ +Header 1 {#header1} +======== + +## Header 2 ## {#header2} + +## The Site ## {.main} + +## The Site ## {.main .shine #the-site} + +[link](http://parsedown.org) {.primary #link .upper-case} + +![logo](/md.png) {#logo .big} \ No newline at end of file diff --git a/soc/2020/daily_report/archive/app/vendor/erusev/parsedown/LICENSE.txt b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown/LICENSE.txt new file mode 100644 index 0000000..8e7c764 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown/LICENSE.txt @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013-2018 Emanuil Rusev, erusev.com + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/soc/2020/daily_report/archive/app/vendor/erusev/parsedown/Parsedown.php b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown/Parsedown.php new file mode 100644 index 0000000..1b9d6d5 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown/Parsedown.php @@ -0,0 +1,1712 @@ +DefinitionData = array(); + + # standardize line breaks + $text = str_replace(array("\r\n", "\r"), "\n", $text); + + # remove surrounding line breaks + $text = trim($text, "\n"); + + # split text into lines + $lines = explode("\n", $text); + + # iterate through lines to identify blocks + $markup = $this->lines($lines); + + # trim line breaks + $markup = trim($markup, "\n"); + + return $markup; + } + + # + # Setters + # + + function setBreaksEnabled($breaksEnabled) + { + $this->breaksEnabled = $breaksEnabled; + + return $this; + } + + protected $breaksEnabled; + + function setMarkupEscaped($markupEscaped) + { + $this->markupEscaped = $markupEscaped; + + return $this; + } + + protected $markupEscaped; + + function setUrlsLinked($urlsLinked) + { + $this->urlsLinked = $urlsLinked; + + return $this; + } + + protected $urlsLinked = true; + + function setSafeMode($safeMode) + { + $this->safeMode = (bool) $safeMode; + + return $this; + } + + protected $safeMode; + + protected $safeLinksWhitelist = array( + 'http://', + 'https://', + 'ftp://', + 'ftps://', + 'mailto:', + 'data:image/png;base64,', + 'data:image/gif;base64,', + 'data:image/jpeg;base64,', + 'irc:', + 'ircs:', + 'git:', + 'ssh:', + 'news:', + 'steam:', + ); + + # + # Lines + # + + protected $BlockTypes = array( + '#' => array('Header'), + '*' => array('Rule', 'List'), + '+' => array('List'), + '-' => array('SetextHeader', 'Table', 'Rule', 'List'), + '0' => array('List'), + '1' => array('List'), + '2' => array('List'), + '3' => array('List'), + '4' => array('List'), + '5' => array('List'), + '6' => array('List'), + '7' => array('List'), + '8' => array('List'), + '9' => array('List'), + ':' => array('Table'), + '<' => array('Comment', 'Markup'), + '=' => array('SetextHeader'), + '>' => array('Quote'), + '[' => array('Reference'), + '_' => array('Rule'), + '`' => array('FencedCode'), + '|' => array('Table'), + '~' => array('FencedCode'), + ); + + # ~ + + protected $unmarkedBlockTypes = array( + 'Code', + ); + + # + # Blocks + # + + protected function lines(array $lines) + { + $CurrentBlock = null; + + foreach ($lines as $line) + { + if (chop($line) === '') + { + if (isset($CurrentBlock)) + { + $CurrentBlock['interrupted'] = true; + } + + continue; + } + + if (strpos($line, "\t") !== false) + { + $parts = explode("\t", $line); + + $line = $parts[0]; + + unset($parts[0]); + + foreach ($parts as $part) + { + $shortage = 4 - mb_strlen($line, 'utf-8') % 4; + + $line .= str_repeat(' ', $shortage); + $line .= $part; + } + } + + $indent = 0; + + while (isset($line[$indent]) and $line[$indent] === ' ') + { + $indent ++; + } + + $text = $indent > 0 ? substr($line, $indent) : $line; + + # ~ + + $Line = array('body' => $line, 'indent' => $indent, 'text' => $text); + + # ~ + + if (isset($CurrentBlock['continuable'])) + { + $Block = $this->{'block'.$CurrentBlock['type'].'Continue'}($Line, $CurrentBlock); + + if (isset($Block)) + { + $CurrentBlock = $Block; + + continue; + } + else + { + if ($this->isBlockCompletable($CurrentBlock['type'])) + { + $CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock); + } + } + } + + # ~ + + $marker = $text[0]; + + # ~ + + $blockTypes = $this->unmarkedBlockTypes; + + if (isset($this->BlockTypes[$marker])) + { + foreach ($this->BlockTypes[$marker] as $blockType) + { + $blockTypes []= $blockType; + } + } + + # + # ~ + + foreach ($blockTypes as $blockType) + { + $Block = $this->{'block'.$blockType}($Line, $CurrentBlock); + + if (isset($Block)) + { + $Block['type'] = $blockType; + + if ( ! isset($Block['identified'])) + { + $Blocks []= $CurrentBlock; + + $Block['identified'] = true; + } + + if ($this->isBlockContinuable($blockType)) + { + $Block['continuable'] = true; + } + + $CurrentBlock = $Block; + + continue 2; + } + } + + # ~ + + if (isset($CurrentBlock) and ! isset($CurrentBlock['type']) and ! isset($CurrentBlock['interrupted'])) + { + $CurrentBlock['element']['text'] .= "\n".$text; + } + else + { + $Blocks []= $CurrentBlock; + + $CurrentBlock = $this->paragraph($Line); + + $CurrentBlock['identified'] = true; + } + } + + # ~ + + if (isset($CurrentBlock['continuable']) and $this->isBlockCompletable($CurrentBlock['type'])) + { + $CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock); + } + + # ~ + + $Blocks []= $CurrentBlock; + + unset($Blocks[0]); + + # ~ + + $markup = ''; + + foreach ($Blocks as $Block) + { + if (isset($Block['hidden'])) + { + continue; + } + + $markup .= "\n"; + $markup .= isset($Block['markup']) ? $Block['markup'] : $this->element($Block['element']); + } + + $markup .= "\n"; + + # ~ + + return $markup; + } + + protected function isBlockContinuable($Type) + { + return method_exists($this, 'block'.$Type.'Continue'); + } + + protected function isBlockCompletable($Type) + { + return method_exists($this, 'block'.$Type.'Complete'); + } + + # + # Code + + protected function blockCode($Line, $Block = null) + { + if (isset($Block) and ! isset($Block['type']) and ! isset($Block['interrupted'])) + { + return; + } + + if ($Line['indent'] >= 4) + { + $text = substr($Line['body'], 4); + + $Block = array( + 'element' => array( + 'name' => 'pre', + 'handler' => 'element', + 'text' => array( + 'name' => 'code', + 'text' => $text, + ), + ), + ); + + return $Block; + } + } + + protected function blockCodeContinue($Line, $Block) + { + if ($Line['indent'] >= 4) + { + if (isset($Block['interrupted'])) + { + $Block['element']['text']['text'] .= "\n"; + + unset($Block['interrupted']); + } + + $Block['element']['text']['text'] .= "\n"; + + $text = substr($Line['body'], 4); + + $Block['element']['text']['text'] .= $text; + + return $Block; + } + } + + protected function blockCodeComplete($Block) + { + $text = $Block['element']['text']['text']; + + $Block['element']['text']['text'] = $text; + + return $Block; + } + + # + # Comment + + protected function blockComment($Line) + { + if ($this->markupEscaped or $this->safeMode) + { + return; + } + + if (isset($Line['text'][3]) and $Line['text'][3] === '-' and $Line['text'][2] === '-' and $Line['text'][1] === '!') + { + $Block = array( + 'markup' => $Line['body'], + ); + + if (preg_match('/-->$/', $Line['text'])) + { + $Block['closed'] = true; + } + + return $Block; + } + } + + protected function blockCommentContinue($Line, array $Block) + { + if (isset($Block['closed'])) + { + return; + } + + $Block['markup'] .= "\n" . $Line['body']; + + if (preg_match('/-->$/', $Line['text'])) + { + $Block['closed'] = true; + } + + return $Block; + } + + # + # Fenced Code + + protected function blockFencedCode($Line) + { + if (preg_match('/^['.$Line['text'][0].']{3,}[ ]*([^`]+)?[ ]*$/', $Line['text'], $matches)) + { + $Element = array( + 'name' => 'code', + 'text' => '', + ); + + if (isset($matches[1])) + { + /** + * https://www.w3.org/TR/2011/WD-html5-20110525/elements.html#classes + * Every HTML element may have a class attribute specified. + * The attribute, if specified, must have a value that is a set + * of space-separated tokens representing the various classes + * that the element belongs to. + * [...] + * The space characters, for the purposes of this specification, + * are U+0020 SPACE, U+0009 CHARACTER TABULATION (tab), + * U+000A LINE FEED (LF), U+000C FORM FEED (FF), and + * U+000D CARRIAGE RETURN (CR). + */ + $language = substr($matches[1], 0, strcspn($matches[1], " \t\n\f\r")); + + $class = 'language-'.$language; + + $Element['attributes'] = array( + 'class' => $class, + ); + } + + $Block = array( + 'char' => $Line['text'][0], + 'element' => array( + 'name' => 'pre', + 'handler' => 'element', + 'text' => $Element, + ), + ); + + return $Block; + } + } + + protected function blockFencedCodeContinue($Line, $Block) + { + if (isset($Block['complete'])) + { + return; + } + + if (isset($Block['interrupted'])) + { + $Block['element']['text']['text'] .= "\n"; + + unset($Block['interrupted']); + } + + if (preg_match('/^'.$Block['char'].'{3,}[ ]*$/', $Line['text'])) + { + $Block['element']['text']['text'] = substr($Block['element']['text']['text'], 1); + + $Block['complete'] = true; + + return $Block; + } + + $Block['element']['text']['text'] .= "\n".$Line['body']; + + return $Block; + } + + protected function blockFencedCodeComplete($Block) + { + $text = $Block['element']['text']['text']; + + $Block['element']['text']['text'] = $text; + + return $Block; + } + + # + # Header + + protected function blockHeader($Line) + { + if (isset($Line['text'][1])) + { + $level = 1; + + while (isset($Line['text'][$level]) and $Line['text'][$level] === '#') + { + $level ++; + } + + if ($level > 6) + { + return; + } + + $text = trim($Line['text'], '# '); + + $Block = array( + 'element' => array( + 'name' => 'h' . min(6, $level), + 'text' => $text, + 'handler' => 'line', + ), + ); + + return $Block; + } + } + + # + # List + + protected function blockList($Line) + { + list($name, $pattern) = $Line['text'][0] <= '-' ? array('ul', '[*+-]') : array('ol', '[0-9]+[.]'); + + if (preg_match('/^('.$pattern.'[ ]+)(.*)/', $Line['text'], $matches)) + { + $Block = array( + 'indent' => $Line['indent'], + 'pattern' => $pattern, + 'element' => array( + 'name' => $name, + 'handler' => 'elements', + ), + ); + + if($name === 'ol') + { + $listStart = stristr($matches[0], '.', true); + + if($listStart !== '1') + { + $Block['element']['attributes'] = array('start' => $listStart); + } + } + + $Block['li'] = array( + 'name' => 'li', + 'handler' => 'li', + 'text' => array( + $matches[2], + ), + ); + + $Block['element']['text'] []= & $Block['li']; + + return $Block; + } + } + + protected function blockListContinue($Line, array $Block) + { + if ($Block['indent'] === $Line['indent'] and preg_match('/^'.$Block['pattern'].'(?:[ ]+(.*)|$)/', $Line['text'], $matches)) + { + if (isset($Block['interrupted'])) + { + $Block['li']['text'] []= ''; + + $Block['loose'] = true; + + unset($Block['interrupted']); + } + + unset($Block['li']); + + $text = isset($matches[1]) ? $matches[1] : ''; + + $Block['li'] = array( + 'name' => 'li', + 'handler' => 'li', + 'text' => array( + $text, + ), + ); + + $Block['element']['text'] []= & $Block['li']; + + return $Block; + } + + if ($Line['text'][0] === '[' and $this->blockReference($Line)) + { + return $Block; + } + + if ( ! isset($Block['interrupted'])) + { + $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']); + + $Block['li']['text'] []= $text; + + return $Block; + } + + if ($Line['indent'] > 0) + { + $Block['li']['text'] []= ''; + + $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']); + + $Block['li']['text'] []= $text; + + unset($Block['interrupted']); + + return $Block; + } + } + + protected function blockListComplete(array $Block) + { + if (isset($Block['loose'])) + { + foreach ($Block['element']['text'] as &$li) + { + if (end($li['text']) !== '') + { + $li['text'] []= ''; + } + } + } + + return $Block; + } + + # + # Quote + + protected function blockQuote($Line) + { + if (preg_match('/^>[ ]?(.*)/', $Line['text'], $matches)) + { + $Block = array( + 'element' => array( + 'name' => 'blockquote', + 'handler' => 'lines', + 'text' => (array) $matches[1], + ), + ); + + return $Block; + } + } + + protected function blockQuoteContinue($Line, array $Block) + { + if ($Line['text'][0] === '>' and preg_match('/^>[ ]?(.*)/', $Line['text'], $matches)) + { + if (isset($Block['interrupted'])) + { + $Block['element']['text'] []= ''; + + unset($Block['interrupted']); + } + + $Block['element']['text'] []= $matches[1]; + + return $Block; + } + + if ( ! isset($Block['interrupted'])) + { + $Block['element']['text'] []= $Line['text']; + + return $Block; + } + } + + # + # Rule + + protected function blockRule($Line) + { + if (preg_match('/^(['.$Line['text'][0].'])([ ]*\1){2,}[ ]*$/', $Line['text'])) + { + $Block = array( + 'element' => array( + 'name' => 'hr' + ), + ); + + return $Block; + } + } + + # + # Setext + + protected function blockSetextHeader($Line, array $Block = null) + { + if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted'])) + { + return; + } + + if (chop($Line['text'], $Line['text'][0]) === '') + { + $Block['element']['name'] = $Line['text'][0] === '=' ? 'h1' : 'h2'; + + return $Block; + } + } + + # + # Markup + + protected function blockMarkup($Line) + { + if ($this->markupEscaped or $this->safeMode) + { + return; + } + + if (preg_match('/^<(\w[\w-]*)(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*(\/)?>/', $Line['text'], $matches)) + { + $element = strtolower($matches[1]); + + if (in_array($element, $this->textLevelElements)) + { + return; + } + + $Block = array( + 'name' => $matches[1], + 'depth' => 0, + 'markup' => $Line['text'], + ); + + $length = strlen($matches[0]); + + $remainder = substr($Line['text'], $length); + + if (trim($remainder) === '') + { + if (isset($matches[2]) or in_array($matches[1], $this->voidElements)) + { + $Block['closed'] = true; + + $Block['void'] = true; + } + } + else + { + if (isset($matches[2]) or in_array($matches[1], $this->voidElements)) + { + return; + } + + if (preg_match('/<\/'.$matches[1].'>[ ]*$/i', $remainder)) + { + $Block['closed'] = true; + } + } + + return $Block; + } + } + + protected function blockMarkupContinue($Line, array $Block) + { + if (isset($Block['closed'])) + { + return; + } + + if (preg_match('/^<'.$Block['name'].'(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*>/i', $Line['text'])) # open + { + $Block['depth'] ++; + } + + if (preg_match('/(.*?)<\/'.$Block['name'].'>[ ]*$/i', $Line['text'], $matches)) # close + { + if ($Block['depth'] > 0) + { + $Block['depth'] --; + } + else + { + $Block['closed'] = true; + } + } + + if (isset($Block['interrupted'])) + { + $Block['markup'] .= "\n"; + + unset($Block['interrupted']); + } + + $Block['markup'] .= "\n".$Line['body']; + + return $Block; + } + + # + # Reference + + protected function blockReference($Line) + { + if (preg_match('/^\[(.+?)\]:[ ]*?(?:[ ]+["\'(](.+)["\')])?[ ]*$/', $Line['text'], $matches)) + { + $id = strtolower($matches[1]); + + $Data = array( + 'url' => $matches[2], + 'title' => null, + ); + + if (isset($matches[3])) + { + $Data['title'] = $matches[3]; + } + + $this->DefinitionData['Reference'][$id] = $Data; + + $Block = array( + 'hidden' => true, + ); + + return $Block; + } + } + + # + # Table + + protected function blockTable($Line, array $Block = null) + { + if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted'])) + { + return; + } + + if (strpos($Block['element']['text'], '|') !== false and chop($Line['text'], ' -:|') === '') + { + $alignments = array(); + + $divider = $Line['text']; + + $divider = trim($divider); + $divider = trim($divider, '|'); + + $dividerCells = explode('|', $divider); + + foreach ($dividerCells as $dividerCell) + { + $dividerCell = trim($dividerCell); + + if ($dividerCell === '') + { + continue; + } + + $alignment = null; + + if ($dividerCell[0] === ':') + { + $alignment = 'left'; + } + + if (substr($dividerCell, - 1) === ':') + { + $alignment = $alignment === 'left' ? 'center' : 'right'; + } + + $alignments []= $alignment; + } + + # ~ + + $HeaderElements = array(); + + $header = $Block['element']['text']; + + $header = trim($header); + $header = trim($header, '|'); + + $headerCells = explode('|', $header); + + foreach ($headerCells as $index => $headerCell) + { + $headerCell = trim($headerCell); + + $HeaderElement = array( + 'name' => 'th', + 'text' => $headerCell, + 'handler' => 'line', + ); + + if (isset($alignments[$index])) + { + $alignment = $alignments[$index]; + + $HeaderElement['attributes'] = array( + 'style' => 'text-align: '.$alignment.';', + ); + } + + $HeaderElements []= $HeaderElement; + } + + # ~ + + $Block = array( + 'alignments' => $alignments, + 'identified' => true, + 'element' => array( + 'name' => 'table', + 'handler' => 'elements', + ), + ); + + $Block['element']['text'] []= array( + 'name' => 'thead', + 'handler' => 'elements', + ); + + $Block['element']['text'] []= array( + 'name' => 'tbody', + 'handler' => 'elements', + 'text' => array(), + ); + + $Block['element']['text'][0]['text'] []= array( + 'name' => 'tr', + 'handler' => 'elements', + 'text' => $HeaderElements, + ); + + return $Block; + } + } + + protected function blockTableContinue($Line, array $Block) + { + if (isset($Block['interrupted'])) + { + return; + } + + if ($Line['text'][0] === '|' or strpos($Line['text'], '|')) + { + $Elements = array(); + + $row = $Line['text']; + + $row = trim($row); + $row = trim($row, '|'); + + preg_match_all('/(?:(\\\\[|])|[^|`]|`[^`]+`|`)+/', $row, $matches); + + foreach ($matches[0] as $index => $cell) + { + $cell = trim($cell); + + $Element = array( + 'name' => 'td', + 'handler' => 'line', + 'text' => $cell, + ); + + if (isset($Block['alignments'][$index])) + { + $Element['attributes'] = array( + 'style' => 'text-align: '.$Block['alignments'][$index].';', + ); + } + + $Elements []= $Element; + } + + $Element = array( + 'name' => 'tr', + 'handler' => 'elements', + 'text' => $Elements, + ); + + $Block['element']['text'][1]['text'] []= $Element; + + return $Block; + } + } + + # + # ~ + # + + protected function paragraph($Line) + { + $Block = array( + 'element' => array( + 'name' => 'p', + 'text' => $Line['text'], + 'handler' => 'line', + ), + ); + + return $Block; + } + + # + # Inline Elements + # + + protected $InlineTypes = array( + '"' => array('SpecialCharacter'), + '!' => array('Image'), + '&' => array('SpecialCharacter'), + '*' => array('Emphasis'), + ':' => array('Url'), + '<' => array('UrlTag', 'EmailTag', 'Markup', 'SpecialCharacter'), + '>' => array('SpecialCharacter'), + '[' => array('Link'), + '_' => array('Emphasis'), + '`' => array('Code'), + '~' => array('Strikethrough'), + '\\' => array('EscapeSequence'), + ); + + # ~ + + protected $inlineMarkerList = '!"*_&[:<>`~\\'; + + # + # ~ + # + + public function line($text, $nonNestables=array()) + { + $markup = ''; + + # $excerpt is based on the first occurrence of a marker + + while ($excerpt = strpbrk($text, $this->inlineMarkerList)) + { + $marker = $excerpt[0]; + + $markerPosition = strpos($text, $marker); + + $Excerpt = array('text' => $excerpt, 'context' => $text); + + foreach ($this->InlineTypes[$marker] as $inlineType) + { + # check to see if the current inline type is nestable in the current context + + if ( ! empty($nonNestables) and in_array($inlineType, $nonNestables)) + { + continue; + } + + $Inline = $this->{'inline'.$inlineType}($Excerpt); + + if ( ! isset($Inline)) + { + continue; + } + + # makes sure that the inline belongs to "our" marker + + if (isset($Inline['position']) and $Inline['position'] > $markerPosition) + { + continue; + } + + # sets a default inline position + + if ( ! isset($Inline['position'])) + { + $Inline['position'] = $markerPosition; + } + + # cause the new element to 'inherit' our non nestables + + foreach ($nonNestables as $non_nestable) + { + $Inline['element']['nonNestables'][] = $non_nestable; + } + + # the text that comes before the inline + $unmarkedText = substr($text, 0, $Inline['position']); + + # compile the unmarked text + $markup .= $this->unmarkedText($unmarkedText); + + # compile the inline + $markup .= isset($Inline['markup']) ? $Inline['markup'] : $this->element($Inline['element']); + + # remove the examined text + $text = substr($text, $Inline['position'] + $Inline['extent']); + + continue 2; + } + + # the marker does not belong to an inline + + $unmarkedText = substr($text, 0, $markerPosition + 1); + + $markup .= $this->unmarkedText($unmarkedText); + + $text = substr($text, $markerPosition + 1); + } + + $markup .= $this->unmarkedText($text); + + return $markup; + } + + # + # ~ + # + + protected function inlineCode($Excerpt) + { + $marker = $Excerpt['text'][0]; + + if (preg_match('/^('.$marker.'+)[ ]*(.+?)[ ]*(? strlen($matches[0]), + 'element' => array( + 'name' => 'code', + 'text' => $text, + ), + ); + } + } + + protected function inlineEmailTag($Excerpt) + { + if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<((mailto:)?\S+?@\S+?)>/i', $Excerpt['text'], $matches)) + { + $url = $matches[1]; + + if ( ! isset($matches[2])) + { + $url = 'mailto:' . $url; + } + + return array( + 'extent' => strlen($matches[0]), + 'element' => array( + 'name' => 'a', + 'text' => $matches[1], + 'attributes' => array( + 'href' => $url, + ), + ), + ); + } + } + + protected function inlineEmphasis($Excerpt) + { + if ( ! isset($Excerpt['text'][1])) + { + return; + } + + $marker = $Excerpt['text'][0]; + + if ($Excerpt['text'][1] === $marker and preg_match($this->StrongRegex[$marker], $Excerpt['text'], $matches)) + { + $emphasis = 'strong'; + } + elseif (preg_match($this->EmRegex[$marker], $Excerpt['text'], $matches)) + { + $emphasis = 'em'; + } + else + { + return; + } + + return array( + 'extent' => strlen($matches[0]), + 'element' => array( + 'name' => $emphasis, + 'handler' => 'line', + 'text' => $matches[1], + ), + ); + } + + protected function inlineEscapeSequence($Excerpt) + { + if (isset($Excerpt['text'][1]) and in_array($Excerpt['text'][1], $this->specialCharacters)) + { + return array( + 'markup' => $Excerpt['text'][1], + 'extent' => 2, + ); + } + } + + protected function inlineImage($Excerpt) + { + if ( ! isset($Excerpt['text'][1]) or $Excerpt['text'][1] !== '[') + { + return; + } + + $Excerpt['text']= substr($Excerpt['text'], 1); + + $Link = $this->inlineLink($Excerpt); + + if ($Link === null) + { + return; + } + + $Inline = array( + 'extent' => $Link['extent'] + 1, + 'element' => array( + 'name' => 'img', + 'attributes' => array( + 'src' => $Link['element']['attributes']['href'], + 'alt' => $Link['element']['text'], + ), + ), + ); + + $Inline['element']['attributes'] += $Link['element']['attributes']; + + unset($Inline['element']['attributes']['href']); + + return $Inline; + } + + protected function inlineLink($Excerpt) + { + $Element = array( + 'name' => 'a', + 'handler' => 'line', + 'nonNestables' => array('Url', 'Link'), + 'text' => null, + 'attributes' => array( + 'href' => null, + 'title' => null, + ), + ); + + $extent = 0; + + $remainder = $Excerpt['text']; + + if (preg_match('/\[((?:[^][]++|(?R))*+)\]/', $remainder, $matches)) + { + $Element['text'] = $matches[1]; + + $extent += strlen($matches[0]); + + $remainder = substr($remainder, $extent); + } + else + { + return; + } + + if (preg_match('/^[(]\s*+((?:[^ ()]++|[(][^ )]+[)])++)(?:[ ]+("[^"]*"|\'[^\']*\'))?\s*[)]/', $remainder, $matches)) + { + $Element['attributes']['href'] = $matches[1]; + + if (isset($matches[2])) + { + $Element['attributes']['title'] = substr($matches[2], 1, - 1); + } + + $extent += strlen($matches[0]); + } + else + { + if (preg_match('/^\s*\[(.*?)\]/', $remainder, $matches)) + { + $definition = strlen($matches[1]) ? $matches[1] : $Element['text']; + $definition = strtolower($definition); + + $extent += strlen($matches[0]); + } + else + { + $definition = strtolower($Element['text']); + } + + if ( ! isset($this->DefinitionData['Reference'][$definition])) + { + return; + } + + $Definition = $this->DefinitionData['Reference'][$definition]; + + $Element['attributes']['href'] = $Definition['url']; + $Element['attributes']['title'] = $Definition['title']; + } + + return array( + 'extent' => $extent, + 'element' => $Element, + ); + } + + protected function inlineMarkup($Excerpt) + { + if ($this->markupEscaped or $this->safeMode or strpos($Excerpt['text'], '>') === false) + { + return; + } + + if ($Excerpt['text'][1] === '/' and preg_match('/^<\/\w[\w-]*[ ]*>/s', $Excerpt['text'], $matches)) + { + return array( + 'markup' => $matches[0], + 'extent' => strlen($matches[0]), + ); + } + + if ($Excerpt['text'][1] === '!' and preg_match('/^/s', $Excerpt['text'], $matches)) + { + return array( + 'markup' => $matches[0], + 'extent' => strlen($matches[0]), + ); + } + + if ($Excerpt['text'][1] !== ' ' and preg_match('/^<\w[\w-]*(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*\/?>/s', $Excerpt['text'], $matches)) + { + return array( + 'markup' => $matches[0], + 'extent' => strlen($matches[0]), + ); + } + } + + protected function inlineSpecialCharacter($Excerpt) + { + if ($Excerpt['text'][0] === '&' and ! preg_match('/^&#?\w+;/', $Excerpt['text'])) + { + return array( + 'markup' => '&', + 'extent' => 1, + ); + } + + $SpecialCharacter = array('>' => 'gt', '<' => 'lt', '"' => 'quot'); + + if (isset($SpecialCharacter[$Excerpt['text'][0]])) + { + return array( + 'markup' => '&'.$SpecialCharacter[$Excerpt['text'][0]].';', + 'extent' => 1, + ); + } + } + + protected function inlineStrikethrough($Excerpt) + { + if ( ! isset($Excerpt['text'][1])) + { + return; + } + + if ($Excerpt['text'][1] === '~' and preg_match('/^~~(?=\S)(.+?)(?<=\S)~~/', $Excerpt['text'], $matches)) + { + return array( + 'extent' => strlen($matches[0]), + 'element' => array( + 'name' => 'del', + 'text' => $matches[1], + 'handler' => 'line', + ), + ); + } + } + + protected function inlineUrl($Excerpt) + { + if ($this->urlsLinked !== true or ! isset($Excerpt['text'][2]) or $Excerpt['text'][2] !== '/') + { + return; + } + + if (preg_match('/\bhttps?:[\/]{2}[^\s<]+\b\/*/ui', $Excerpt['context'], $matches, PREG_OFFSET_CAPTURE)) + { + $url = $matches[0][0]; + + $Inline = array( + 'extent' => strlen($matches[0][0]), + 'position' => $matches[0][1], + 'element' => array( + 'name' => 'a', + 'text' => $url, + 'attributes' => array( + 'href' => $url, + ), + ), + ); + + return $Inline; + } + } + + protected function inlineUrlTag($Excerpt) + { + if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<(\w+:\/{2}[^ >]+)>/i', $Excerpt['text'], $matches)) + { + $url = $matches[1]; + + return array( + 'extent' => strlen($matches[0]), + 'element' => array( + 'name' => 'a', + 'text' => $url, + 'attributes' => array( + 'href' => $url, + ), + ), + ); + } + } + + # ~ + + protected function unmarkedText($text) + { + if ($this->breaksEnabled) + { + $text = preg_replace('/[ ]*\n/', "
    \n", $text); + } + else + { + $text = preg_replace('/(?:[ ][ ]+|[ ]*\\\\)\n/', "
    \n", $text); + $text = str_replace(" \n", "\n", $text); + } + + return $text; + } + + # + # Handlers + # + + protected function element(array $Element) + { + if ($this->safeMode) + { + $Element = $this->sanitiseElement($Element); + } + + $markup = '<'.$Element['name']; + + if (isset($Element['attributes'])) + { + foreach ($Element['attributes'] as $name => $value) + { + if ($value === null) + { + continue; + } + + $markup .= ' '.$name.'="'.self::escape($value).'"'; + } + } + + $permitRawHtml = false; + + if (isset($Element['text'])) + { + $text = $Element['text']; + } + // very strongly consider an alternative if you're writing an + // extension + elseif (isset($Element['rawHtml'])) + { + $text = $Element['rawHtml']; + $allowRawHtmlInSafeMode = isset($Element['allowRawHtmlInSafeMode']) && $Element['allowRawHtmlInSafeMode']; + $permitRawHtml = !$this->safeMode || $allowRawHtmlInSafeMode; + } + + if (isset($text)) + { + $markup .= '>'; + + if (!isset($Element['nonNestables'])) + { + $Element['nonNestables'] = array(); + } + + if (isset($Element['handler'])) + { + $markup .= $this->{$Element['handler']}($text, $Element['nonNestables']); + } + elseif (!$permitRawHtml) + { + $markup .= self::escape($text, true); + } + else + { + $markup .= $text; + } + + $markup .= ''; + } + else + { + $markup .= ' />'; + } + + return $markup; + } + + protected function elements(array $Elements) + { + $markup = ''; + + foreach ($Elements as $Element) + { + $markup .= "\n" . $this->element($Element); + } + + $markup .= "\n"; + + return $markup; + } + + # ~ + + protected function li($lines) + { + $markup = $this->lines($lines); + + $trimmedMarkup = trim($markup); + + if ( ! in_array('', $lines) and substr($trimmedMarkup, 0, 3) === '

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

    "); + + $markup = substr_replace($markup, '', $position, 4); + } + + return $markup; + } + + # + # Deprecated Methods + # + + function parse($text) + { + $markup = $this->text($text); + + return $markup; + } + + protected function sanitiseElement(array $Element) + { + static $goodAttribute = '/^[a-zA-Z0-9][a-zA-Z0-9-_]*+$/'; + static $safeUrlNameToAtt = array( + 'a' => 'href', + 'img' => 'src', + ); + + if (isset($safeUrlNameToAtt[$Element['name']])) + { + $Element = $this->filterUnsafeUrlInAttribute($Element, $safeUrlNameToAtt[$Element['name']]); + } + + if ( ! empty($Element['attributes'])) + { + foreach ($Element['attributes'] as $att => $val) + { + # filter out badly parsed attribute + if ( ! preg_match($goodAttribute, $att)) + { + unset($Element['attributes'][$att]); + } + # dump onevent attribute + elseif (self::striAtStart($att, 'on')) + { + unset($Element['attributes'][$att]); + } + } + } + + return $Element; + } + + protected function filterUnsafeUrlInAttribute(array $Element, $attribute) + { + foreach ($this->safeLinksWhitelist as $scheme) + { + if (self::striAtStart($Element['attributes'][$attribute], $scheme)) + { + return $Element; + } + } + + $Element['attributes'][$attribute] = str_replace(':', '%3A', $Element['attributes'][$attribute]); + + return $Element; + } + + # + # Static Methods + # + + protected static function escape($text, $allowQuotes = false) + { + return htmlspecialchars($text, $allowQuotes ? ENT_NOQUOTES : ENT_QUOTES, 'UTF-8'); + } + + protected static function striAtStart($string, $needle) + { + $len = strlen($needle); + + if ($len > strlen($string)) + { + return false; + } + else + { + return strtolower(substr($string, 0, $len)) === strtolower($needle); + } + } + + static function instance($name = 'default') + { + if (isset(self::$instances[$name])) + { + return self::$instances[$name]; + } + + $instance = new static(); + + self::$instances[$name] = $instance; + + return $instance; + } + + private static $instances = array(); + + # + # Fields + # + + protected $DefinitionData; + + # + # Read-Only + + protected $specialCharacters = array( + '\\', '`', '*', '_', '{', '}', '[', ']', '(', ')', '>', '#', '+', '-', '.', '!', '|', + ); + + protected $StrongRegex = array( + '*' => '/^[*]{2}((?:\\\\\*|[^*]|[*][^*]*[*])+?)[*]{2}(?![*])/s', + '_' => '/^__((?:\\\\_|[^_]|_[^_]*_)+?)__(?!_)/us', + ); + + protected $EmRegex = array( + '*' => '/^[*]((?:\\\\\*|[^*]|[*][*][^*]+?[*][*])+?)[*](?![*])/s', + '_' => '/^_((?:\\\\_|[^_]|__[^_]*__)+?)_(?!_)\b/us', + ); + + protected $regexHtmlAttribute = '[a-zA-Z_:][\w:.-]*(?:\s*=\s*(?:[^"\'=<>`\s]+|"[^"]*"|\'[^\']*\'))?'; + + protected $voidElements = array( + 'area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', + ); + + protected $textLevelElements = array( + 'a', 'br', 'bdo', 'abbr', 'blink', 'nextid', 'acronym', 'basefont', + 'b', 'em', 'big', 'cite', 'small', 'spacer', 'listing', + 'i', 'rp', 'del', 'code', 'strike', 'marquee', + 'q', 'rt', 'ins', 'font', 'strong', + 's', 'tt', 'kbd', 'mark', + 'u', 'xm', 'sub', 'nobr', + 'sup', 'ruby', + 'var', 'span', + 'wbr', 'time', + ); +} diff --git a/soc/2020/daily_report/archive/app/vendor/erusev/parsedown/README.md b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown/README.md new file mode 100644 index 0000000..b5d9ed2 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown/README.md @@ -0,0 +1,86 @@ +> I also make [Caret](https://caret.io?ref=parsedown) - a Markdown editor for Mac and PC. + +## Parsedown + +[![Build Status](https://img.shields.io/travis/erusev/parsedown/master.svg?style=flat-square)](https://travis-ci.org/erusev/parsedown) + + +Better Markdown Parser in PHP + +[Demo](http://parsedown.org/demo) | +[Benchmarks](http://parsedown.org/speed) | +[Tests](http://parsedown.org/tests/) | +[Documentation](https://github.com/erusev/parsedown/wiki/) + +### Features + +* One File +* No Dependencies +* Super Fast +* Extensible +* [GitHub flavored](https://help.github.com/articles/github-flavored-markdown) +* Tested in 5.3 to 7.1 and in HHVM +* [Markdown Extra extension](https://github.com/erusev/parsedown-extra) + +### Installation + +Include `Parsedown.php` or install [the composer package](https://packagist.org/packages/erusev/parsedown). + +### Example + +``` php +$Parsedown = new Parsedown(); + +echo $Parsedown->text('Hello _Parsedown_!'); # prints:

    Hello Parsedown!

    +``` + +More examples in [the wiki](https://github.com/erusev/parsedown/wiki/) and in [this video tutorial](http://youtu.be/wYZBY8DEikI). + +### Security + +Parsedown is capable of escaping user-input within the HTML that it generates. Additionally Parsedown will apply sanitisation to additional scripting vectors (such as scripting link destinations) that are introduced by the markdown syntax itself. + +To tell Parsedown that it is processing untrusted user-input, use the following: +```php +$parsedown = new Parsedown; +$parsedown->setSafeMode(true); +``` + +If instead, you wish to allow HTML within untrusted user-input, but still want output to be free from XSS it is recommended that you make use of a HTML sanitiser that allows HTML tags to be whitelisted, like [HTML Purifier](http://htmlpurifier.org/). + +In both cases you should strongly consider employing defence-in-depth measures, like [deploying a Content-Security-Policy](https://scotthelme.co.uk/content-security-policy-an-introduction/) (a browser security feature) so that your page is likely to be safe even if an attacker finds a vulnerability in one of the first lines of defence above. + +#### Security of Parsedown Extensions + +Safe mode does not necessarily yield safe results when using extensions to Parsedown. Extensions should be evaluated on their own to determine their specific safety against XSS. + +### Escaping HTML +> âš ï¸Â Â **WARNING:** This method isn't safe from XSS! + +If you wish to escape HTML **in trusted input**, you can use the following: +```php +$parsedown = new Parsedown; +$parsedown->setMarkupEscaped(true); +``` + +Beware that this still allows users to insert unsafe scripting vectors, such as links like `[xss](javascript:alert%281%29)`. + +### Questions + +**How does Parsedown work?** + +It tries to read Markdown like a human. First, it looks at the lines. It’s interested in how the lines start. This helps it recognise blocks. It knows, for example, that if a line starts with a `-` then perhaps it belongs to a list. Once it recognises the blocks, it continues to the content. As it reads, it watches out for special characters. This helps it recognise inline elements (or inlines). + +We call this approach "line based". We believe that Parsedown is the first Markdown parser to use it. Since the release of Parsedown, other developers have used the same approach to develop other Markdown parsers in PHP and in other languages. + +**Is it compliant with CommonMark?** + +It passes most of the CommonMark tests. Most of the tests that don't pass deal with cases that are quite uncommon. Still, as CommonMark matures, compliance should improve. + +**Who uses it?** + +[Laravel Framework](https://laravel.com/), [Bolt CMS](http://bolt.cm/), [Grav CMS](http://getgrav.org/), [Herbie CMS](http://www.getherbie.org/), [Kirby CMS](http://getkirby.com/), [October CMS](http://octobercms.com/), [Pico CMS](http://picocms.org), [Statamic CMS](http://www.statamic.com/), [phpDocumentor](http://www.phpdoc.org/), [RaspberryPi.org](http://www.raspberrypi.org/), [Symfony demo](https://github.com/symfony/symfony-demo) and [more](https://packagist.org/packages/erusev/parsedown/dependents). + +**How can I help?** + +Use it, star it, share it and if you feel generous, [donate](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=528P3NZQMP8N2). diff --git a/soc/2020/daily_report/archive/app/vendor/erusev/parsedown/composer.json b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown/composer.json new file mode 100644 index 0000000..f8b40f8 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/erusev/parsedown/composer.json @@ -0,0 +1,33 @@ +{ + "name": "erusev/parsedown", + "description": "Parser for Markdown.", + "keywords": ["markdown", "parser"], + "homepage": "http://parsedown.org", + "type": "library", + "license": "MIT", + "authors": [ + { + "name": "Emanuil Rusev", + "email": "hello@erusev.com", + "homepage": "http://erusev.com" + } + ], + "require": { + "php": ">=5.3.0", + "ext-mbstring": "*" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35" + }, + "autoload": { + "psr-0": {"Parsedown": ""} + }, + "autoload-dev": { + "psr-0": { + "TestParsedown": "test/", + "ParsedownTest": "test/", + "CommonMarkTest": "test/", + "CommonMarkTestWeak": "test/" + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/fig/http-message-util/CHANGELOG.md b/soc/2020/daily_report/archive/app/vendor/fig/http-message-util/CHANGELOG.md new file mode 100644 index 0000000..7815030 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/fig/http-message-util/CHANGELOG.md @@ -0,0 +1,125 @@ +# Changelog + +All notable changes to this project will be documented in this file, in reverse chronological order by release. + +## 1.1.4 - 2020-02-05 + +### Added + +- Nothing. + +### Changed + +- Nothing. + +### Deprecated + +- Nothing. + +### Removed + +- [#15](https://github.com/php-fig/http-message-util/pull/15) removes the dependency on psr/http-message, as it is not technically necessary for usage of this package. + +### Fixed + +- Nothing. + +## 1.1.3 - 2018-11-19 + +### Added + +- [#10](https://github.com/php-fig/http-message-util/pull/10) adds the constants `StatusCodeInterface::STATUS_EARLY_HINTS` (103) and + `StatusCodeInterface::STATUS_TOO_EARLY` (425). + +### Changed + +- Nothing. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- Nothing. + +## 1.1.2 - 2017-02-09 + +### Added + +- [#4](https://github.com/php-fig/http-message-util/pull/4) adds the constant + `StatusCodeInterface::STATUS_MISDIRECTED_REQUEST` (421). + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- Nothing. + +## 1.1.1 - 2017-02-06 + +### Added + +- [#3](https://github.com/php-fig/http-message-util/pull/3) adds the constant + `StatusCodeInterface::STATUS_IM_A_TEAPOT` (418). + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- Nothing. + +## 1.1.0 - 2016-09-19 + +### Added + +- [#1](https://github.com/php-fig/http-message-util/pull/1) adds + `Fig\Http\Message\StatusCodeInterface`, with constants named after common + status reason phrases, with values indicating the status codes themselves. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- Nothing. + +## 1.0.0 - 2017-08-05 + +### Added + +- Adds `Fig\Http\Message\RequestMethodInterface`, with constants covering the + most common HTTP request methods as specified by the IETF. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- Nothing. diff --git a/soc/2020/daily_report/archive/app/vendor/fig/http-message-util/LICENSE b/soc/2020/daily_report/archive/app/vendor/fig/http-message-util/LICENSE new file mode 100644 index 0000000..e2fa347 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/fig/http-message-util/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2016 PHP Framework Interoperability Group + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/soc/2020/daily_report/archive/app/vendor/fig/http-message-util/README.md b/soc/2020/daily_report/archive/app/vendor/fig/http-message-util/README.md new file mode 100644 index 0000000..56cee17 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/fig/http-message-util/README.md @@ -0,0 +1,17 @@ +# PSR Http Message Util + +This repository holds utility classes and constants to facilitate common +operations of [PSR-7](http://www.php-fig.org/psr/psr-7/); the primary purpose is +to provide constants for referring to request methods, response status codes and +messages, and potentially common headers. + +Implementation of PSR-7 interfaces is **not** within the scope of this package. + +## Installation + +Install by adding the package as a [Composer](https://getcomposer.org) +requirement: + +```bash +$ composer require fig/http-message-util +``` diff --git a/soc/2020/daily_report/archive/app/vendor/fig/http-message-util/composer.json b/soc/2020/daily_report/archive/app/vendor/fig/http-message-util/composer.json new file mode 100644 index 0000000..11758fe --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/fig/http-message-util/composer.json @@ -0,0 +1,28 @@ +{ + "name": "fig/http-message-util", + "description": "Utility classes and constants for use with PSR-7 (psr/http-message)", + "keywords": ["psr", "psr-7", "http", "http-message", "request", "response"], + "license": "MIT", + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "require": { + "php": "^5.3 || ^7.0" + }, + "suggest": { + "psr/http-message": "The package containing the PSR-7 interfaces" + }, + "autoload": { + "psr-4": { + "Fig\\Http\\Message\\": "src/" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/fig/http-message-util/src/RequestMethodInterface.php b/soc/2020/daily_report/archive/app/vendor/fig/http-message-util/src/RequestMethodInterface.php new file mode 100644 index 0000000..97d9a93 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/fig/http-message-util/src/RequestMethodInterface.php @@ -0,0 +1,34 @@ + + * class RequestFactory implements RequestMethodInterface + * { + * public static function factory( + * $uri = '/', + * $method = self::METHOD_GET, + * $data = [] + * ) { + * } + * } + * + */ +interface RequestMethodInterface +{ + const METHOD_HEAD = 'HEAD'; + const METHOD_GET = 'GET'; + const METHOD_POST = 'POST'; + const METHOD_PUT = 'PUT'; + const METHOD_PATCH = 'PATCH'; + const METHOD_DELETE = 'DELETE'; + const METHOD_PURGE = 'PURGE'; + const METHOD_OPTIONS = 'OPTIONS'; + const METHOD_TRACE = 'TRACE'; + const METHOD_CONNECT = 'CONNECT'; +} diff --git a/soc/2020/daily_report/archive/app/vendor/fig/http-message-util/src/StatusCodeInterface.php b/soc/2020/daily_report/archive/app/vendor/fig/http-message-util/src/StatusCodeInterface.php new file mode 100644 index 0000000..99b7e78 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/fig/http-message-util/src/StatusCodeInterface.php @@ -0,0 +1,107 @@ + + * class ResponseFactory implements StatusCodeInterface + * { + * public function createResponse($code = self::STATUS_OK) + * { + * } + * } + * + */ +interface StatusCodeInterface +{ + // Informational 1xx + const STATUS_CONTINUE = 100; + const STATUS_SWITCHING_PROTOCOLS = 101; + const STATUS_PROCESSING = 102; + const STATUS_EARLY_HINTS = 103; + // Successful 2xx + const STATUS_OK = 200; + const STATUS_CREATED = 201; + const STATUS_ACCEPTED = 202; + const STATUS_NON_AUTHORITATIVE_INFORMATION = 203; + const STATUS_NO_CONTENT = 204; + const STATUS_RESET_CONTENT = 205; + const STATUS_PARTIAL_CONTENT = 206; + const STATUS_MULTI_STATUS = 207; + const STATUS_ALREADY_REPORTED = 208; + const STATUS_IM_USED = 226; + // Redirection 3xx + const STATUS_MULTIPLE_CHOICES = 300; + const STATUS_MOVED_PERMANENTLY = 301; + const STATUS_FOUND = 302; + const STATUS_SEE_OTHER = 303; + const STATUS_NOT_MODIFIED = 304; + const STATUS_USE_PROXY = 305; + const STATUS_RESERVED = 306; + const STATUS_TEMPORARY_REDIRECT = 307; + const STATUS_PERMANENT_REDIRECT = 308; + // Client Errors 4xx + const STATUS_BAD_REQUEST = 400; + const STATUS_UNAUTHORIZED = 401; + const STATUS_PAYMENT_REQUIRED = 402; + const STATUS_FORBIDDEN = 403; + const STATUS_NOT_FOUND = 404; + const STATUS_METHOD_NOT_ALLOWED = 405; + const STATUS_NOT_ACCEPTABLE = 406; + const STATUS_PROXY_AUTHENTICATION_REQUIRED = 407; + const STATUS_REQUEST_TIMEOUT = 408; + const STATUS_CONFLICT = 409; + const STATUS_GONE = 410; + const STATUS_LENGTH_REQUIRED = 411; + const STATUS_PRECONDITION_FAILED = 412; + const STATUS_PAYLOAD_TOO_LARGE = 413; + const STATUS_URI_TOO_LONG = 414; + const STATUS_UNSUPPORTED_MEDIA_TYPE = 415; + const STATUS_RANGE_NOT_SATISFIABLE = 416; + const STATUS_EXPECTATION_FAILED = 417; + const STATUS_IM_A_TEAPOT = 418; + const STATUS_MISDIRECTED_REQUEST = 421; + const STATUS_UNPROCESSABLE_ENTITY = 422; + const STATUS_LOCKED = 423; + const STATUS_FAILED_DEPENDENCY = 424; + const STATUS_TOO_EARLY = 425; + const STATUS_UPGRADE_REQUIRED = 426; + const STATUS_PRECONDITION_REQUIRED = 428; + const STATUS_TOO_MANY_REQUESTS = 429; + const STATUS_REQUEST_HEADER_FIELDS_TOO_LARGE = 431; + const STATUS_UNAVAILABLE_FOR_LEGAL_REASONS = 451; + // Server Errors 5xx + const STATUS_INTERNAL_SERVER_ERROR = 500; + const STATUS_NOT_IMPLEMENTED = 501; + const STATUS_BAD_GATEWAY = 502; + const STATUS_SERVICE_UNAVAILABLE = 503; + const STATUS_GATEWAY_TIMEOUT = 504; + const STATUS_VERSION_NOT_SUPPORTED = 505; + const STATUS_VARIANT_ALSO_NEGOTIATES = 506; + const STATUS_INSUFFICIENT_STORAGE = 507; + const STATUS_LOOP_DETECTED = 508; + const STATUS_NOT_EXTENDED = 510; + const STATUS_NETWORK_AUTHENTICATION_REQUIRED = 511; +} diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/CHANGELOG.md b/soc/2020/daily_report/archive/app/vendor/filp/whoops/CHANGELOG.md new file mode 100644 index 0000000..7a273a2 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/CHANGELOG.md @@ -0,0 +1,57 @@ +# 2.7.1 + +* Fix a PHP warning in some cases with anonymous classes. + +# 2.7.0 + +* removeFirstHandler and removeLastHandler. + +# 2.6.0 + +* Fix 2.4.0 pushHandler changing the order of handlers. + +# 2.5.1 + +* Fix error messaging in a rare case. + +# 2.5.0 + +* Automatically configure xdebug if available. + +# 2.4.1 + +* Try harder to close all output buffers + +# 2.4.0 + +* Allow to prepend and append handlers. + +# 2.3.2 + +* Various fixes from the community. + +# 2.3.1 + +* Prevent exception in Whoops when caught exception frame is not related to real file + +# 2.3.0 + +* Show previous exception messages. + +# 2.2.0 + +* Support PHP 7.2 + +# 2.1.0 + +* Add a `SystemFacade` to allow clients to override Whoops behavior. +* Show frame arguments in `PrettyPageHandler`. +* Highlight the line with the error. +* Add icons to search on Google and Stack Overflow. + +# 2.0.0 + +Backwards compatibility breaking changes: + +* `Run` class is now `final`. If you inherited from `Run`, please now instead use a custom `SystemFacade` injected into the `Run` constructor, or contribute your changes to our core. +* PHP < 5.5 support dropped. diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/LICENSE.md b/soc/2020/daily_report/archive/app/vendor/filp/whoops/LICENSE.md new file mode 100644 index 0000000..80407e7 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/LICENSE.md @@ -0,0 +1,19 @@ +# The MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/composer.json b/soc/2020/daily_report/archive/app/vendor/filp/whoops/composer.json new file mode 100644 index 0000000..7b6ed46 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/composer.json @@ -0,0 +1,42 @@ +{ + "name": "filp/whoops", + "license": "MIT", + "description": "php error handling for cool kids", + "keywords": ["library", "error", "handling", "exception", "whoops", "throwable"], + "homepage": "https://filp.github.io/whoops/", + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "require": { + "php": "^5.5.9 || ^7.0", + "psr/log": "^1.0.1" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0", + "mockery/mockery": "^0.9 || ^1.0", + "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "autoload-dev": { + "psr-4": { + "Whoops\\": "tests/Whoops/" + } + }, + "extra": { + "branch-alias": { + "dev-master": "2.6-dev" + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Exception/ErrorException.php b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Exception/ErrorException.php new file mode 100644 index 0000000..d74e823 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Exception/ErrorException.php @@ -0,0 +1,17 @@ + + */ + +namespace Whoops\Exception; + +use ErrorException as BaseErrorException; + +/** + * Wraps ErrorException; mostly used for typing (at least now) + * to easily cleanup the stack trace of redundant info. + */ +class ErrorException extends BaseErrorException +{ +} diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Exception/Formatter.php b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Exception/Formatter.php new file mode 100644 index 0000000..e467559 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Exception/Formatter.php @@ -0,0 +1,73 @@ + + */ + +namespace Whoops\Exception; + +class Formatter +{ + /** + * Returns all basic information about the exception in a simple array + * for further convertion to other languages + * @param Inspector $inspector + * @param bool $shouldAddTrace + * @return array + */ + public static function formatExceptionAsDataArray(Inspector $inspector, $shouldAddTrace) + { + $exception = $inspector->getException(); + $response = [ + 'type' => get_class($exception), + 'message' => $exception->getMessage(), + 'file' => $exception->getFile(), + 'line' => $exception->getLine(), + ]; + + if ($shouldAddTrace) { + $frames = $inspector->getFrames(); + $frameData = []; + + foreach ($frames as $frame) { + /** @var Frame $frame */ + $frameData[] = [ + 'file' => $frame->getFile(), + 'line' => $frame->getLine(), + 'function' => $frame->getFunction(), + 'class' => $frame->getClass(), + 'args' => $frame->getArgs(), + ]; + } + + $response['trace'] = $frameData; + } + + return $response; + } + + public static function formatExceptionPlain(Inspector $inspector) + { + $message = $inspector->getException()->getMessage(); + $frames = $inspector->getFrames(); + + $plain = $inspector->getExceptionName(); + $plain .= ' thrown with message "'; + $plain .= $message; + $plain .= '"'."\n\n"; + + $plain .= "Stacktrace:\n"; + foreach ($frames as $i => $frame) { + $plain .= "#". (count($frames) - $i - 1). " "; + $plain .= $frame->getClass() ?: ''; + $plain .= $frame->getClass() && $frame->getFunction() ? ":" : ""; + $plain .= $frame->getFunction() ?: ''; + $plain .= ' in '; + $plain .= ($frame->getFile() ?: '<#unknown>'); + $plain .= ':'; + $plain .= (int) $frame->getLine(). "\n"; + } + + return $plain; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Exception/Frame.php b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Exception/Frame.php new file mode 100644 index 0000000..8403209 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Exception/Frame.php @@ -0,0 +1,295 @@ + + */ + +namespace Whoops\Exception; + +use InvalidArgumentException; +use Serializable; + +class Frame implements Serializable +{ + /** + * @var array + */ + protected $frame; + + /** + * @var string + */ + protected $fileContentsCache; + + /** + * @var array[] + */ + protected $comments = []; + + /** + * @var bool + */ + protected $application; + + /** + * @param array[] + */ + public function __construct(array $frame) + { + $this->frame = $frame; + } + + /** + * @param bool $shortened + * @return string|null + */ + public function getFile($shortened = false) + { + if (empty($this->frame['file'])) { + return null; + } + + $file = $this->frame['file']; + + // Check if this frame occurred within an eval(). + // @todo: This can be made more reliable by checking if we've entered + // eval() in a previous trace, but will need some more work on the upper + // trace collector(s). + if (preg_match('/^(.*)\((\d+)\) : (?:eval\(\)\'d|assert) code$/', $file, $matches)) { + $file = $this->frame['file'] = $matches[1]; + $this->frame['line'] = (int) $matches[2]; + } + + if ($shortened && is_string($file)) { + // Replace the part of the path that all frames have in common, and add 'soft hyphens' for smoother line-breaks. + $dirname = dirname(dirname(dirname(dirname(dirname(dirname(__DIR__)))))); + if ($dirname !== '/') { + $file = str_replace($dirname, "…", $file); + } + $file = str_replace("/", "/­", $file); + } + + return $file; + } + + /** + * @return int|null + */ + public function getLine() + { + return isset($this->frame['line']) ? $this->frame['line'] : null; + } + + /** + * @return string|null + */ + public function getClass() + { + return isset($this->frame['class']) ? $this->frame['class'] : null; + } + + /** + * @return string|null + */ + public function getFunction() + { + return isset($this->frame['function']) ? $this->frame['function'] : null; + } + + /** + * @return array + */ + public function getArgs() + { + return isset($this->frame['args']) ? (array) $this->frame['args'] : []; + } + + /** + * Returns the full contents of the file for this frame, + * if it's known. + * @return string|null + */ + public function getFileContents() + { + if ($this->fileContentsCache === null && $filePath = $this->getFile()) { + // Leave the stage early when 'Unknown' or '[internal]' is passed + // this would otherwise raise an exception when + // open_basedir is enabled. + if ($filePath === "Unknown" || $filePath === '[internal]') { + return null; + } + + try { + $this->fileContentsCache = file_get_contents($filePath); + } catch (ErrorException $exception) { + // Internal file paths of PHP extensions cannot be opened + } + } + + return $this->fileContentsCache; + } + + /** + * Adds a comment to this frame, that can be received and + * used by other handlers. For example, the PrettyPage handler + * can attach these comments under the code for each frame. + * + * An interesting use for this would be, for example, code analysis + * & annotations. + * + * @param string $comment + * @param string $context Optional string identifying the origin of the comment + */ + public function addComment($comment, $context = 'global') + { + $this->comments[] = [ + 'comment' => $comment, + 'context' => $context, + ]; + } + + /** + * Returns all comments for this frame. Optionally allows + * a filter to only retrieve comments from a specific + * context. + * + * @param string $filter + * @return array[] + */ + public function getComments($filter = null) + { + $comments = $this->comments; + + if ($filter !== null) { + $comments = array_filter($comments, function ($c) use ($filter) { + return $c['context'] == $filter; + }); + } + + return $comments; + } + + /** + * Returns the array containing the raw frame data from which + * this Frame object was built + * + * @return array + */ + public function getRawFrame() + { + return $this->frame; + } + + /** + * Returns the contents of the file for this frame as an + * array of lines, and optionally as a clamped range of lines. + * + * NOTE: lines are 0-indexed + * + * @example + * Get all lines for this file + * $frame->getFileLines(); // => array( 0 => ' '...', ...) + * @example + * Get one line for this file, starting at line 10 (zero-indexed, remember!) + * $frame->getFileLines(9, 1); // array( 9 => '...' ) + * + * @throws InvalidArgumentException if $length is less than or equal to 0 + * @param int $start + * @param int $length + * @return string[]|null + */ + public function getFileLines($start = 0, $length = null) + { + if (null !== ($contents = $this->getFileContents())) { + $lines = explode("\n", $contents); + + // Get a subset of lines from $start to $end + if ($length !== null) { + $start = (int) $start; + $length = (int) $length; + if ($start < 0) { + $start = 0; + } + + if ($length <= 0) { + throw new InvalidArgumentException( + "\$length($length) cannot be lower or equal to 0" + ); + } + + $lines = array_slice($lines, $start, $length, true); + } + + return $lines; + } + } + + /** + * Implements the Serializable interface, with special + * steps to also save the existing comments. + * + * @see Serializable::serialize + * @return string + */ + public function serialize() + { + $frame = $this->frame; + if (!empty($this->comments)) { + $frame['_comments'] = $this->comments; + } + + return serialize($frame); + } + + /** + * Unserializes the frame data, while also preserving + * any existing comment data. + * + * @see Serializable::unserialize + * @param string $serializedFrame + */ + public function unserialize($serializedFrame) + { + $frame = unserialize($serializedFrame); + + if (!empty($frame['_comments'])) { + $this->comments = $frame['_comments']; + unset($frame['_comments']); + } + + $this->frame = $frame; + } + + /** + * Compares Frame against one another + * @param Frame $frame + * @return bool + */ + public function equals(Frame $frame) + { + if (!$this->getFile() || $this->getFile() === 'Unknown' || !$this->getLine()) { + return false; + } + return $frame->getFile() === $this->getFile() && $frame->getLine() === $this->getLine(); + } + + /** + * Returns whether this frame belongs to the application or not. + * + * @return boolean + */ + public function isApplication() + { + return $this->application; + } + + /** + * Mark as an frame belonging to the application. + * + * @param boolean $application + */ + public function setApplication($application) + { + $this->application = $application; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Exception/FrameCollection.php b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Exception/FrameCollection.php new file mode 100644 index 0000000..6cf4073 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Exception/FrameCollection.php @@ -0,0 +1,203 @@ + + */ + +namespace Whoops\Exception; + +use ArrayAccess; +use ArrayIterator; +use Countable; +use IteratorAggregate; +use Serializable; +use UnexpectedValueException; + +/** + * Exposes a fluent interface for dealing with an ordered list + * of stack-trace frames. + */ +class FrameCollection implements ArrayAccess, IteratorAggregate, Serializable, Countable +{ + /** + * @var array[] + */ + private $frames; + + /** + * @param array $frames + */ + public function __construct(array $frames) + { + $this->frames = array_map(function ($frame) { + return new Frame($frame); + }, $frames); + } + + /** + * Filters frames using a callable, returns the same FrameCollection + * + * @param callable $callable + * @return FrameCollection + */ + public function filter($callable) + { + $this->frames = array_values(array_filter($this->frames, $callable)); + return $this; + } + + /** + * Map the collection of frames + * + * @param callable $callable + * @return FrameCollection + */ + public function map($callable) + { + // Contain the map within a higher-order callable + // that enforces type-correctness for the $callable + $this->frames = array_map(function ($frame) use ($callable) { + $frame = call_user_func($callable, $frame); + + if (!$frame instanceof Frame) { + throw new UnexpectedValueException( + "Callable to " . __CLASS__ . "::map must return a Frame object" + ); + } + + return $frame; + }, $this->frames); + + return $this; + } + + /** + * Returns an array with all frames, does not affect + * the internal array. + * + * @todo If this gets any more complex than this, + * have getIterator use this method. + * @see FrameCollection::getIterator + * @return array + */ + public function getArray() + { + return $this->frames; + } + + /** + * @see IteratorAggregate::getIterator + * @return ArrayIterator + */ + public function getIterator() + { + return new ArrayIterator($this->frames); + } + + /** + * @see ArrayAccess::offsetExists + * @param int $offset + */ + public function offsetExists($offset) + { + return isset($this->frames[$offset]); + } + + /** + * @see ArrayAccess::offsetGet + * @param int $offset + */ + public function offsetGet($offset) + { + return $this->frames[$offset]; + } + + /** + * @see ArrayAccess::offsetSet + * @param int $offset + */ + public function offsetSet($offset, $value) + { + throw new \Exception(__CLASS__ . ' is read only'); + } + + /** + * @see ArrayAccess::offsetUnset + * @param int $offset + */ + public function offsetUnset($offset) + { + throw new \Exception(__CLASS__ . ' is read only'); + } + + /** + * @see Countable::count + * @return int + */ + public function count() + { + return count($this->frames); + } + + /** + * Count the frames that belongs to the application. + * + * @return int + */ + public function countIsApplication() + { + return count(array_filter($this->frames, function (Frame $f) { + return $f->isApplication(); + })); + } + + /** + * @see Serializable::serialize + * @return string + */ + public function serialize() + { + return serialize($this->frames); + } + + /** + * @see Serializable::unserialize + * @param string $serializedFrames + */ + public function unserialize($serializedFrames) + { + $this->frames = unserialize($serializedFrames); + } + + /** + * @param Frame[] $frames Array of Frame instances, usually from $e->getPrevious() + */ + public function prependFrames(array $frames) + { + $this->frames = array_merge($frames, $this->frames); + } + + /** + * Gets the innermost part of stack trace that is not the same as that of outer exception + * + * @param FrameCollection $parentFrames Outer exception frames to compare tail against + * @return Frame[] + */ + public function topDiff(FrameCollection $parentFrames) + { + $diff = $this->frames; + + $parentFrames = $parentFrames->getArray(); + $p = count($parentFrames)-1; + + for ($i = count($diff)-1; $i >= 0 && $p >= 0; $i--) { + /** @var Frame $tailFrame */ + $tailFrame = $diff[$i]; + if ($tailFrame->equals($parentFrames[$p])) { + unset($diff[$i]); + } + $p--; + } + return $diff; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Exception/Inspector.php b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Exception/Inspector.php new file mode 100644 index 0000000..04f72df --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Exception/Inspector.php @@ -0,0 +1,323 @@ + + */ + +namespace Whoops\Exception; + +use Whoops\Util\Misc; + +class Inspector +{ + /** + * @var \Throwable + */ + private $exception; + + /** + * @var \Whoops\Exception\FrameCollection + */ + private $frames; + + /** + * @var \Whoops\Exception\Inspector + */ + private $previousExceptionInspector; + + /** + * @var \Throwable[] + */ + private $previousExceptions; + + /** + * @param \Throwable $exception The exception to inspect + */ + public function __construct($exception) + { + $this->exception = $exception; + } + + /** + * @return \Throwable + */ + public function getException() + { + return $this->exception; + } + + /** + * @return string + */ + public function getExceptionName() + { + return get_class($this->exception); + } + + /** + * @return string + */ + public function getExceptionMessage() + { + return $this->extractDocrefUrl($this->exception->getMessage())['message']; + } + + /** + * @return string[] + */ + public function getPreviousExceptionMessages() + { + return array_map(function ($prev) { + /** @var \Throwable $prev */ + return $this->extractDocrefUrl($prev->getMessage())['message']; + }, $this->getPreviousExceptions()); + } + + /** + * @return int[] + */ + public function getPreviousExceptionCodes() + { + return array_map(function ($prev) { + /** @var \Throwable $prev */ + return $prev->getCode(); + }, $this->getPreviousExceptions()); + } + + /** + * Returns a url to the php-manual related to the underlying error - when available. + * + * @return string|null + */ + public function getExceptionDocrefUrl() + { + return $this->extractDocrefUrl($this->exception->getMessage())['url']; + } + + private function extractDocrefUrl($message) + { + $docref = [ + 'message' => $message, + 'url' => null, + ]; + + // php embbeds urls to the manual into the Exception message with the following ini-settings defined + // http://php.net/manual/en/errorfunc.configuration.php#ini.docref-root + if (!ini_get('html_errors') || !ini_get('docref_root')) { + return $docref; + } + + $pattern = "/\[(?:[^<]+)<\/a>\]/"; + if (preg_match($pattern, $message, $matches)) { + // -> strip those automatically generated links from the exception message + $docref['message'] = preg_replace($pattern, '', $message, 1); + $docref['url'] = $matches[1]; + } + + return $docref; + } + + /** + * Does the wrapped Exception has a previous Exception? + * @return bool + */ + public function hasPreviousException() + { + return $this->previousExceptionInspector || $this->exception->getPrevious(); + } + + /** + * Returns an Inspector for a previous Exception, if any. + * @todo Clean this up a bit, cache stuff a bit better. + * @return Inspector + */ + public function getPreviousExceptionInspector() + { + if ($this->previousExceptionInspector === null) { + $previousException = $this->exception->getPrevious(); + + if ($previousException) { + $this->previousExceptionInspector = new Inspector($previousException); + } + } + + return $this->previousExceptionInspector; + } + + + /** + * Returns an array of all previous exceptions for this inspector's exception + * @return \Throwable[] + */ + public function getPreviousExceptions() + { + if ($this->previousExceptions === null) { + $this->previousExceptions = []; + + $prev = $this->exception->getPrevious(); + while ($prev !== null) { + $this->previousExceptions[] = $prev; + $prev = $prev->getPrevious(); + } + } + + return $this->previousExceptions; + } + + /** + * Returns an iterator for the inspected exception's + * frames. + * @return \Whoops\Exception\FrameCollection + */ + public function getFrames() + { + if ($this->frames === null) { + $frames = $this->getTrace($this->exception); + + // Fill empty line/file info for call_user_func_array usages (PHP Bug #44428) + foreach ($frames as $k => $frame) { + if (empty($frame['file'])) { + // Default values when file and line are missing + $file = '[internal]'; + $line = 0; + + $next_frame = !empty($frames[$k + 1]) ? $frames[$k + 1] : []; + + if ($this->isValidNextFrame($next_frame)) { + $file = $next_frame['file']; + $line = $next_frame['line']; + } + + $frames[$k]['file'] = $file; + $frames[$k]['line'] = $line; + } + } + + // Find latest non-error handling frame index ($i) used to remove error handling frames + $i = 0; + foreach ($frames as $k => $frame) { + if ($frame['file'] == $this->exception->getFile() && $frame['line'] == $this->exception->getLine()) { + $i = $k; + } + } + + // Remove error handling frames + if ($i > 0) { + array_splice($frames, 0, $i); + } + + $firstFrame = $this->getFrameFromException($this->exception); + array_unshift($frames, $firstFrame); + + $this->frames = new FrameCollection($frames); + + if ($previousInspector = $this->getPreviousExceptionInspector()) { + // Keep outer frame on top of the inner one + $outerFrames = $this->frames; + $newFrames = clone $previousInspector->getFrames(); + // I assume it will always be set, but let's be safe + if (isset($newFrames[0])) { + $newFrames[0]->addComment( + $previousInspector->getExceptionMessage(), + 'Exception message:' + ); + } + $newFrames->prependFrames($outerFrames->topDiff($newFrames)); + $this->frames = $newFrames; + } + } + + return $this->frames; + } + + /** + * Gets the backtrace from an exception. + * + * If xdebug is installed + * + * @param \Throwable $e + * @return array + */ + protected function getTrace($e) + { + $traces = $e->getTrace(); + + // Get trace from xdebug if enabled, failure exceptions only trace to the shutdown handler by default + if (!$e instanceof \ErrorException) { + return $traces; + } + + if (!Misc::isLevelFatal($e->getSeverity())) { + return $traces; + } + + if (!extension_loaded('xdebug') || !xdebug_is_enabled()) { + return $traces; + } + + // Use xdebug to get the full stack trace and remove the shutdown handler stack trace + $stack = array_reverse(xdebug_get_function_stack()); + $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); + $traces = array_diff_key($stack, $trace); + + return $traces; + } + + /** + * Given an exception, generates an array in the format + * generated by Exception::getTrace() + * @param \Throwable $exception + * @return array + */ + protected function getFrameFromException($exception) + { + return [ + 'file' => $exception->getFile(), + 'line' => $exception->getLine(), + 'class' => get_class($exception), + 'args' => [ + $exception->getMessage(), + ], + ]; + } + + /** + * Given an error, generates an array in the format + * generated by ErrorException + * @param ErrorException $exception + * @return array + */ + protected function getFrameFromError(ErrorException $exception) + { + return [ + 'file' => $exception->getFile(), + 'line' => $exception->getLine(), + 'class' => null, + 'args' => [], + ]; + } + + /** + * Determine if the frame can be used to fill in previous frame's missing info + * happens for call_user_func and call_user_func_array usages (PHP Bug #44428) + * + * @param array $frame + * @return bool + */ + protected function isValidNextFrame(array $frame) + { + if (empty($frame['file'])) { + return false; + } + + if (empty($frame['line'])) { + return false; + } + + if (empty($frame['function']) || !stristr($frame['function'], 'call_user_func')) { + return false; + } + + return true; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Handler/CallbackHandler.php b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Handler/CallbackHandler.php new file mode 100644 index 0000000..cc46e70 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Handler/CallbackHandler.php @@ -0,0 +1,52 @@ + + */ + +namespace Whoops\Handler; + +use InvalidArgumentException; + +/** + * Wrapper for Closures passed as handlers. Can be used + * directly, or will be instantiated automagically by Whoops\Run + * if passed to Run::pushHandler + */ +class CallbackHandler extends Handler +{ + /** + * @var callable + */ + protected $callable; + + /** + * @throws InvalidArgumentException If argument is not callable + * @param callable $callable + */ + public function __construct($callable) + { + if (!is_callable($callable)) { + throw new InvalidArgumentException( + 'Argument to ' . __METHOD__ . ' must be valid callable' + ); + } + + $this->callable = $callable; + } + + /** + * @return int|null + */ + public function handle() + { + $exception = $this->getException(); + $inspector = $this->getInspector(); + $run = $this->getRun(); + $callable = $this->callable; + + // invoke the callable directly, to get simpler stacktraces (in comparison to call_user_func). + // this assumes that $callable is a properly typed php-callable, which we check in __construct(). + return $callable($exception, $inspector, $run); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Handler/Handler.php b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Handler/Handler.php new file mode 100644 index 0000000..cf1f708 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Handler/Handler.php @@ -0,0 +1,95 @@ + + */ + +namespace Whoops\Handler; + +use Whoops\Exception\Inspector; +use Whoops\RunInterface; + +/** + * Abstract implementation of a Handler. + */ +abstract class Handler implements HandlerInterface +{ + /* + Return constants that can be returned from Handler::handle + to message the handler walker. + */ + const DONE = 0x10; // returning this is optional, only exists for + // semantic purposes + /** + * The Handler has handled the Throwable in some way, and wishes to skip any other Handler. + * Execution will continue. + */ + const LAST_HANDLER = 0x20; + /** + * The Handler has handled the Throwable in some way, and wishes to quit/stop execution + */ + const QUIT = 0x30; + + /** + * @var RunInterface + */ + private $run; + + /** + * @var Inspector $inspector + */ + private $inspector; + + /** + * @var \Throwable $exception + */ + private $exception; + + /** + * @param RunInterface $run + */ + public function setRun(RunInterface $run) + { + $this->run = $run; + } + + /** + * @return RunInterface + */ + protected function getRun() + { + return $this->run; + } + + /** + * @param Inspector $inspector + */ + public function setInspector(Inspector $inspector) + { + $this->inspector = $inspector; + } + + /** + * @return Inspector + */ + protected function getInspector() + { + return $this->inspector; + } + + /** + * @param \Throwable $exception + */ + public function setException($exception) + { + $this->exception = $exception; + } + + /** + * @return \Throwable + */ + protected function getException() + { + return $this->exception; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Handler/HandlerInterface.php b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Handler/HandlerInterface.php new file mode 100644 index 0000000..0265a85 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Handler/HandlerInterface.php @@ -0,0 +1,36 @@ + + */ + +namespace Whoops\Handler; + +use Whoops\Exception\Inspector; +use Whoops\RunInterface; + +interface HandlerInterface +{ + /** + * @return int|null A handler may return nothing, or a Handler::HANDLE_* constant + */ + public function handle(); + + /** + * @param RunInterface $run + * @return void + */ + public function setRun(RunInterface $run); + + /** + * @param \Throwable $exception + * @return void + */ + public function setException($exception); + + /** + * @param Inspector $inspector + * @return void + */ + public function setInspector(Inspector $inspector); +} diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Handler/JsonResponseHandler.php b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Handler/JsonResponseHandler.php new file mode 100644 index 0000000..fdd7ead --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Handler/JsonResponseHandler.php @@ -0,0 +1,88 @@ + + */ + +namespace Whoops\Handler; + +use Whoops\Exception\Formatter; + +/** + * Catches an exception and converts it to a JSON + * response. Additionally can also return exception + * frames for consumption by an API. + */ +class JsonResponseHandler extends Handler +{ + /** + * @var bool + */ + private $returnFrames = false; + + /** + * @var bool + */ + private $jsonApi = false; + + /** + * Returns errors[[]] instead of error[] to be in compliance with the json:api spec + * @param bool $jsonApi Default is false + * @return $this + */ + public function setJsonApi($jsonApi = false) + { + $this->jsonApi = (bool) $jsonApi; + return $this; + } + + /** + * @param bool|null $returnFrames + * @return bool|$this + */ + public function addTraceToOutput($returnFrames = null) + { + if (func_num_args() == 0) { + return $this->returnFrames; + } + + $this->returnFrames = (bool) $returnFrames; + return $this; + } + + /** + * @return int + */ + public function handle() + { + if ($this->jsonApi === true) { + $response = [ + 'errors' => [ + Formatter::formatExceptionAsDataArray( + $this->getInspector(), + $this->addTraceToOutput() + ), + ] + ]; + } else { + $response = [ + 'error' => Formatter::formatExceptionAsDataArray( + $this->getInspector(), + $this->addTraceToOutput() + ), + ]; + } + + echo json_encode($response, defined('JSON_PARTIAL_OUTPUT_ON_ERROR') ? JSON_PARTIAL_OUTPUT_ON_ERROR : 0); + + return Handler::QUIT; + } + + /** + * @return string + */ + public function contentType() + { + return 'application/json'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Handler/PlainTextHandler.php b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Handler/PlainTextHandler.php new file mode 100644 index 0000000..192d0ff --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Handler/PlainTextHandler.php @@ -0,0 +1,354 @@ + +* Plaintext handler for command line and logs. +* @author Pierre-Yves Landuré +*/ + +namespace Whoops\Handler; + +use InvalidArgumentException; +use Psr\Log\LoggerInterface; +use Whoops\Exception\Frame; + +/** +* Handler outputing plaintext error messages. Can be used +* directly, or will be instantiated automagically by Whoops\Run +* if passed to Run::pushHandler +*/ +class PlainTextHandler extends Handler +{ + const VAR_DUMP_PREFIX = ' | '; + + /** + * @var \Psr\Log\LoggerInterface + */ + protected $logger; + + /** + * @var callable + */ + protected $dumper; + + /** + * @var bool + */ + private $addTraceToOutput = true; + + /** + * @var bool|integer + */ + private $addTraceFunctionArgsToOutput = false; + + /** + * @var integer + */ + private $traceFunctionArgsOutputLimit = 1024; + + /** + * @var bool + */ + private $addPreviousToOutput = true; + + /** + * @var bool + */ + private $loggerOnly = false; + + /** + * Constructor. + * @throws InvalidArgumentException If argument is not null or a LoggerInterface + * @param \Psr\Log\LoggerInterface|null $logger + */ + public function __construct($logger = null) + { + $this->setLogger($logger); + } + + /** + * Set the output logger interface. + * @throws InvalidArgumentException If argument is not null or a LoggerInterface + * @param \Psr\Log\LoggerInterface|null $logger + */ + public function setLogger($logger = null) + { + if (! (is_null($logger) + || $logger instanceof LoggerInterface)) { + throw new InvalidArgumentException( + 'Argument to ' . __METHOD__ . + " must be a valid Logger Interface (aka. Monolog), " . + get_class($logger) . ' given.' + ); + } + + $this->logger = $logger; + } + + /** + * @return \Psr\Log\LoggerInterface|null + */ + public function getLogger() + { + return $this->logger; + } + + /** + * Set var dumper callback function. + * + * @param callable $dumper + * @return void + */ + public function setDumper(callable $dumper) + { + $this->dumper = $dumper; + } + + /** + * Add error trace to output. + * @param bool|null $addTraceToOutput + * @return bool|$this + */ + public function addTraceToOutput($addTraceToOutput = null) + { + if (func_num_args() == 0) { + return $this->addTraceToOutput; + } + + $this->addTraceToOutput = (bool) $addTraceToOutput; + return $this; + } + + /** + * Add previous exceptions to output. + * @param bool|null $addPreviousToOutput + * @return bool|$this + */ + public function addPreviousToOutput($addPreviousToOutput = null) + { + if (func_num_args() == 0) { + return $this->addPreviousToOutput; + } + + $this->addPreviousToOutput = (bool) $addPreviousToOutput; + return $this; + } + + /** + * Add error trace function arguments to output. + * Set to True for all frame args, or integer for the n first frame args. + * @param bool|integer|null $addTraceFunctionArgsToOutput + * @return null|bool|integer + */ + public function addTraceFunctionArgsToOutput($addTraceFunctionArgsToOutput = null) + { + if (func_num_args() == 0) { + return $this->addTraceFunctionArgsToOutput; + } + + if (! is_integer($addTraceFunctionArgsToOutput)) { + $this->addTraceFunctionArgsToOutput = (bool) $addTraceFunctionArgsToOutput; + } else { + $this->addTraceFunctionArgsToOutput = $addTraceFunctionArgsToOutput; + } + } + + /** + * Set the size limit in bytes of frame arguments var_dump output. + * If the limit is reached, the var_dump output is discarded. + * Prevent memory limit errors. + * @var integer + */ + public function setTraceFunctionArgsOutputLimit($traceFunctionArgsOutputLimit) + { + $this->traceFunctionArgsOutputLimit = (integer) $traceFunctionArgsOutputLimit; + } + + /** + * Create plain text response and return it as a string + * @return string + */ + public function generateResponse() + { + $exception = $this->getException(); + $message = $this->getExceptionOutput($exception); + + if ($this->addPreviousToOutput) { + $previous = $exception->getPrevious(); + while ($previous) { + $message .= "\n\nCaused by\n" . $this->getExceptionOutput($previous); + $previous = $previous->getPrevious(); + } + } + + + return $message . $this->getTraceOutput() . "\n"; + } + + /** + * Get the size limit in bytes of frame arguments var_dump output. + * If the limit is reached, the var_dump output is discarded. + * Prevent memory limit errors. + * @return integer + */ + public function getTraceFunctionArgsOutputLimit() + { + return $this->traceFunctionArgsOutputLimit; + } + + /** + * Only output to logger. + * @param bool|null $loggerOnly + * @return null|bool + */ + public function loggerOnly($loggerOnly = null) + { + if (func_num_args() == 0) { + return $this->loggerOnly; + } + + $this->loggerOnly = (bool) $loggerOnly; + } + + /** + * Test if handler can output to stdout. + * @return bool + */ + private function canOutput() + { + return !$this->loggerOnly(); + } + + /** + * Get the frame args var_dump. + * @param \Whoops\Exception\Frame $frame [description] + * @param integer $line [description] + * @return string + */ + private function getFrameArgsOutput(Frame $frame, $line) + { + if ($this->addTraceFunctionArgsToOutput() === false + || $this->addTraceFunctionArgsToOutput() < $line) { + return ''; + } + + // Dump the arguments: + ob_start(); + $this->dump($frame->getArgs()); + if (ob_get_length() > $this->getTraceFunctionArgsOutputLimit()) { + // The argument var_dump is to big. + // Discarded to limit memory usage. + ob_clean(); + return sprintf( + "\n%sArguments dump length greater than %d Bytes. Discarded.", + self::VAR_DUMP_PREFIX, + $this->getTraceFunctionArgsOutputLimit() + ); + } + + return sprintf( + "\n%s", + preg_replace('/^/m', self::VAR_DUMP_PREFIX, ob_get_clean()) + ); + } + + /** + * Dump variable. + * + * @param mixed $var + * @return void + */ + protected function dump($var) + { + if ($this->dumper) { + call_user_func($this->dumper, $var); + } else { + var_dump($var); + } + } + + /** + * Get the exception trace as plain text. + * @return string + */ + private function getTraceOutput() + { + if (! $this->addTraceToOutput()) { + return ''; + } + $inspector = $this->getInspector(); + $frames = $inspector->getFrames(); + + $response = "\nStack trace:"; + + $line = 1; + foreach ($frames as $frame) { + /** @var Frame $frame */ + $class = $frame->getClass(); + + $template = "\n%3d. %s->%s() %s:%d%s"; + if (! $class) { + // Remove method arrow (->) from output. + $template = "\n%3d. %s%s() %s:%d%s"; + } + + $response .= sprintf( + $template, + $line, + $class, + $frame->getFunction(), + $frame->getFile(), + $frame->getLine(), + $this->getFrameArgsOutput($frame, $line) + ); + + $line++; + } + + return $response; + } + + /** + * Get the exception as plain text. + * @param \Throwable $exception + * @return string + */ + private function getExceptionOutput($exception) + { + return sprintf( + "%s: %s in file %s on line %d", + get_class($exception), + $exception->getMessage(), + $exception->getFile(), + $exception->getLine() + ); + } + + /** + * @return int + */ + public function handle() + { + $response = $this->generateResponse(); + + if ($this->getLogger()) { + $this->getLogger()->error($response); + } + + if (! $this->canOutput()) { + return Handler::DONE; + } + + echo $response; + + return Handler::QUIT; + } + + /** + * @return string + */ + public function contentType() + { + return 'text/plain'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Handler/PrettyPageHandler.php b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Handler/PrettyPageHandler.php new file mode 100644 index 0000000..8f98e66 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Handler/PrettyPageHandler.php @@ -0,0 +1,800 @@ + + */ + +namespace Whoops\Handler; + +use InvalidArgumentException; +use RuntimeException; +use Symfony\Component\VarDumper\Cloner\AbstractCloner; +use Symfony\Component\VarDumper\Cloner\VarCloner; +use UnexpectedValueException; +use Whoops\Exception\Formatter; +use Whoops\Util\Misc; +use Whoops\Util\TemplateHelper; + +class PrettyPageHandler extends Handler +{ + const EDITOR_SUBLIME = "sublime"; + const EDITOR_TEXTMATE = "textmate"; + const EDITOR_EMACS = "emacs"; + const EDITOR_MACVIM = "macvim"; + const EDITOR_PHPSTORM = "phpstorm"; + const EDITOR_IDEA = "idea"; + const EDITOR_VSCODE = "vscode"; + const EDITOR_ATOM = "atom"; + const EDITOR_ESPRESSO = "espresso"; + const EDITOR_XDEBUG = "xdebug"; + + /** + * Search paths to be scanned for resources. + * + * Stored in the reverse order they're declared. + * + * @var array + */ + private $searchPaths = []; + + /** + * Fast lookup cache for known resource locations. + * + * @var array + */ + private $resourceCache = []; + + /** + * The name of the custom css file. + * + * @var string + */ + private $customCss = null; + + /** + * The name of the custom js file. + * + * @var string + */ + private $customJs = null; + + /** + * @var array[] + */ + private $extraTables = []; + + /** + * @var bool + */ + private $handleUnconditionally = false; + + /** + * @var string + */ + private $pageTitle = "Whoops! There was an error."; + + /** + * @var array[] + */ + private $applicationPaths; + + /** + * @var array[] + */ + private $blacklist = [ + '_GET' => [], + '_POST' => [], + '_FILES' => [], + '_COOKIE' => [], + '_SESSION' => [], + '_SERVER' => [], + '_ENV' => [], + ]; + + /** + * An identifier for a known IDE/text editor. + * + * Either a string, or a calalble that resolves a string, that can be used + * to open a given file in an editor. If the string contains the special + * substrings %file or %line, they will be replaced with the correct data. + * + * @example + * "txmt://open?url=%file&line=%line" + * + * @var callable|string $editor + */ + protected $editor; + + /** + * A list of known editor strings. + * + * @var array + */ + protected $editors = [ + "sublime" => "subl://open?url=file://%file&line=%line", + "textmate" => "txmt://open?url=file://%file&line=%line", + "emacs" => "emacs://open?url=file://%file&line=%line", + "macvim" => "mvim://open/?url=file://%file&line=%line", + "phpstorm" => "phpstorm://open?file=%file&line=%line", + "idea" => "idea://open?file=%file&line=%line", + "vscode" => "vscode://file/%file:%line", + "atom" => "atom://core/open/file?filename=%file&line=%line", + "espresso" => "x-espresso://open?filepath=%file&lines=%line", + ]; + + /** + * @var TemplateHelper + */ + protected $templateHelper; + + /** + * Constructor. + * + * @return void + */ + public function __construct() + { + if (ini_get('xdebug.file_link_format') || extension_loaded('xdebug')) { + // Register editor using xdebug's file_link_format option. + $this->editors['xdebug'] = function ($file, $line) { + return str_replace(['%f', '%l'], [$file, $line], ini_get('xdebug.file_link_format')); + }; + + // If xdebug is available, use it as default editor. + $this->setEditor('xdebug'); + } + + // Add the default, local resource search path: + $this->searchPaths[] = __DIR__ . "/../Resources"; + + // blacklist php provided auth based values + $this->blacklist('_SERVER', 'PHP_AUTH_PW'); + + $this->templateHelper = new TemplateHelper(); + + if (class_exists('Symfony\Component\VarDumper\Cloner\VarCloner')) { + $cloner = new VarCloner(); + // Only dump object internals if a custom caster exists for performance reasons + // https://github.com/filp/whoops/pull/404 + $cloner->addCasters(['*' => function ($obj, $a, $stub, $isNested, $filter = 0) { + $class = $stub->class; + $classes = [$class => $class] + class_parents($obj) + class_implements($obj); + + foreach ($classes as $class) { + if (isset(AbstractCloner::$defaultCasters[$class])) { + return $a; + } + } + + // Remove all internals + return []; + }]); + $this->templateHelper->setCloner($cloner); + } + } + + /** + * @return int|null + */ + public function handle() + { + if (!$this->handleUnconditionally()) { + // Check conditions for outputting HTML: + // @todo: Make this more robust + if (PHP_SAPI === 'cli') { + // Help users who have been relying on an internal test value + // fix their code to the proper method + if (isset($_ENV['whoops-test'])) { + throw new \Exception( + 'Use handleUnconditionally instead of whoops-test' + .' environment variable' + ); + } + + return Handler::DONE; + } + } + + $templateFile = $this->getResource("views/layout.html.php"); + $cssFile = $this->getResource("css/whoops.base.css"); + $zeptoFile = $this->getResource("js/zepto.min.js"); + $prettifyFile = $this->getResource("js/prettify.min.js"); + $clipboard = $this->getResource("js/clipboard.min.js"); + $jsFile = $this->getResource("js/whoops.base.js"); + + if ($this->customCss) { + $customCssFile = $this->getResource($this->customCss); + } + + if ($this->customJs) { + $customJsFile = $this->getResource($this->customJs); + } + + $inspector = $this->getInspector(); + $frames = $this->getExceptionFrames(); + $code = $this->getExceptionCode(); + + // List of variables that will be passed to the layout template. + $vars = [ + "page_title" => $this->getPageTitle(), + + // @todo: Asset compiler + "stylesheet" => file_get_contents($cssFile), + "zepto" => file_get_contents($zeptoFile), + "prettify" => file_get_contents($prettifyFile), + "clipboard" => file_get_contents($clipboard), + "javascript" => file_get_contents($jsFile), + + // Template paths: + "header" => $this->getResource("views/header.html.php"), + "header_outer" => $this->getResource("views/header_outer.html.php"), + "frame_list" => $this->getResource("views/frame_list.html.php"), + "frames_description" => $this->getResource("views/frames_description.html.php"), + "frames_container" => $this->getResource("views/frames_container.html.php"), + "panel_details" => $this->getResource("views/panel_details.html.php"), + "panel_details_outer" => $this->getResource("views/panel_details_outer.html.php"), + "panel_left" => $this->getResource("views/panel_left.html.php"), + "panel_left_outer" => $this->getResource("views/panel_left_outer.html.php"), + "frame_code" => $this->getResource("views/frame_code.html.php"), + "env_details" => $this->getResource("views/env_details.html.php"), + + "title" => $this->getPageTitle(), + "name" => explode("\\", $inspector->getExceptionName()), + "message" => $inspector->getExceptionMessage(), + "previousMessages" => $inspector->getPreviousExceptionMessages(), + "docref_url" => $inspector->getExceptionDocrefUrl(), + "code" => $code, + "previousCodes" => $inspector->getPreviousExceptionCodes(), + "plain_exception" => Formatter::formatExceptionPlain($inspector), + "frames" => $frames, + "has_frames" => !!count($frames), + "handler" => $this, + "handlers" => $this->getRun()->getHandlers(), + + "active_frames_tab" => count($frames) && $frames->offsetGet(0)->isApplication() ? 'application' : 'all', + "has_frames_tabs" => $this->getApplicationPaths(), + + "tables" => [ + "GET Data" => $this->masked($_GET, '_GET'), + "POST Data" => $this->masked($_POST, '_POST'), + "Files" => isset($_FILES) ? $this->masked($_FILES, '_FILES') : [], + "Cookies" => $this->masked($_COOKIE, '_COOKIE'), + "Session" => isset($_SESSION) ? $this->masked($_SESSION, '_SESSION') : [], + "Server/Request Data" => $this->masked($_SERVER, '_SERVER'), + "Environment Variables" => $this->masked($_ENV, '_ENV'), + ], + ]; + + if (isset($customCssFile)) { + $vars["stylesheet"] .= file_get_contents($customCssFile); + } + + if (isset($customJsFile)) { + $vars["javascript"] .= file_get_contents($customJsFile); + } + + // Add extra entries list of data tables: + // @todo: Consolidate addDataTable and addDataTableCallback + $extraTables = array_map(function ($table) use ($inspector) { + return $table instanceof \Closure ? $table($inspector) : $table; + }, $this->getDataTables()); + $vars["tables"] = array_merge($extraTables, $vars["tables"]); + + $plainTextHandler = new PlainTextHandler(); + $plainTextHandler->setException($this->getException()); + $plainTextHandler->setInspector($this->getInspector()); + $vars["preface"] = ""; + + $this->templateHelper->setVariables($vars); + $this->templateHelper->render($templateFile); + + return Handler::QUIT; + } + + /** + * Get the stack trace frames of the exception currently being handled. + * + * @return \Whoops\Exception\FrameCollection + */ + protected function getExceptionFrames() + { + $frames = $this->getInspector()->getFrames(); + + if ($this->getApplicationPaths()) { + foreach ($frames as $frame) { + foreach ($this->getApplicationPaths() as $path) { + if (strpos($frame->getFile(), $path) === 0) { + $frame->setApplication(true); + break; + } + } + } + } + + return $frames; + } + + /** + * Get the code of the exception currently being handled. + * + * @return string + */ + protected function getExceptionCode() + { + $exception = $this->getException(); + + $code = $exception->getCode(); + if ($exception instanceof \ErrorException) { + // ErrorExceptions wrap the php-error types within the 'severity' property + $code = Misc::translateErrorCode($exception->getSeverity()); + } + + return (string) $code; + } + + /** + * @return string + */ + public function contentType() + { + return 'text/html'; + } + + /** + * Adds an entry to the list of tables displayed in the template. + * + * The expected data is a simple associative array. Any nested arrays + * will be flattened with `print_r`. + * + * @param string $label + * @param array $data + * + * @return void + */ + public function addDataTable($label, array $data) + { + $this->extraTables[$label] = $data; + } + + /** + * Lazily adds an entry to the list of tables displayed in the table. + * + * The supplied callback argument will be called when the error is + * rendered, it should produce a simple associative array. Any nested + * arrays will be flattened with `print_r`. + * + * @param string $label + * @param callable $callback Callable returning an associative array + * + * @throws InvalidArgumentException If $callback is not callable + * + * @return void + */ + public function addDataTableCallback($label, /* callable */ $callback) + { + if (!is_callable($callback)) { + throw new InvalidArgumentException('Expecting callback argument to be callable'); + } + + $this->extraTables[$label] = function (\Whoops\Exception\Inspector $inspector = null) use ($callback) { + try { + $result = call_user_func($callback, $inspector); + + // Only return the result if it can be iterated over by foreach(). + return is_array($result) || $result instanceof \Traversable ? $result : []; + } catch (\Exception $e) { + // Don't allow failure to break the rendering of the original exception. + return []; + } + }; + } + + /** + * Returns all the extra data tables registered with this handler. + * + * Optionally accepts a 'label' parameter, to only return the data table + * under that label. + * + * @param string|null $label + * + * @return array[]|callable + */ + public function getDataTables($label = null) + { + if ($label !== null) { + return isset($this->extraTables[$label]) ? + $this->extraTables[$label] : []; + } + + return $this->extraTables; + } + + /** + * Set whether to handle unconditionally. + * + * Allows to disable all attempts to dynamically decide whether to handle + * or return prematurely. Set this to ensure that the handler will perform, + * no matter what. + * + * @param bool|null $value + * + * @return bool|null + */ + public function handleUnconditionally($value = null) + { + if (func_num_args() == 0) { + return $this->handleUnconditionally; + } + + $this->handleUnconditionally = (bool) $value; + } + + /** + * Adds an editor resolver. + * + * Either a string, or a closure that resolves a string, that can be used + * to open a given file in an editor. If the string contains the special + * substrings %file or %line, they will be replaced with the correct data. + * + * @example + * $run->addEditor('macvim', "mvim://open?url=file://%file&line=%line") + * @example + * $run->addEditor('remove-it', function($file, $line) { + * unlink($file); + * return "http://stackoverflow.com"; + * }); + * + * @param string $identifier + * @param string|callable $resolver + * + * @return void + */ + public function addEditor($identifier, $resolver) + { + $this->editors[$identifier] = $resolver; + } + + /** + * Set the editor to use to open referenced files. + * + * Pass either the name of a configured editor, or a closure that directly + * resolves an editor string. + * + * @example + * $run->setEditor(function($file, $line) { return "file:///{$file}"; }); + * @example + * $run->setEditor('sublime'); + * + * @param string|callable $editor + * + * @throws InvalidArgumentException If invalid argument identifier provided + * + * @return void + */ + public function setEditor($editor) + { + if (!is_callable($editor) && !isset($this->editors[$editor])) { + throw new InvalidArgumentException( + "Unknown editor identifier: $editor. Known editors:" . + implode(",", array_keys($this->editors)) + ); + } + + $this->editor = $editor; + } + + /** + * Get the editor href for a given file and line, if available. + * + * @param string $filePath + * @param int $line + * + * @throws InvalidArgumentException If editor resolver does not return a string + * + * @return string|bool + */ + public function getEditorHref($filePath, $line) + { + $editor = $this->getEditor($filePath, $line); + + if (empty($editor)) { + return false; + } + + // Check that the editor is a string, and replace the + // %line and %file placeholders: + if (!isset($editor['url']) || !is_string($editor['url'])) { + throw new UnexpectedValueException( + __METHOD__ . " should always resolve to a string or a valid editor array; got something else instead." + ); + } + + $editor['url'] = str_replace("%line", rawurlencode($line), $editor['url']); + $editor['url'] = str_replace("%file", rawurlencode($filePath), $editor['url']); + + return $editor['url']; + } + + /** + * Determine if the editor link should act as an Ajax request. + * + * @param string $filePath + * @param int $line + * + * @throws UnexpectedValueException If editor resolver does not return a boolean + * + * @return bool + */ + public function getEditorAjax($filePath, $line) + { + $editor = $this->getEditor($filePath, $line); + + // Check that the ajax is a bool + if (!isset($editor['ajax']) || !is_bool($editor['ajax'])) { + throw new UnexpectedValueException( + __METHOD__ . " should always resolve to a bool; got something else instead." + ); + } + return $editor['ajax']; + } + + /** + * Determines both the editor and if ajax should be used. + * + * @param string $filePath + * @param int $line + * + * @return array + */ + protected function getEditor($filePath, $line) + { + if (!$this->editor || (!is_string($this->editor) && !is_callable($this->editor))) { + return []; + } + + if (is_string($this->editor) && isset($this->editors[$this->editor]) && !is_callable($this->editors[$this->editor])) { + return [ + 'ajax' => false, + 'url' => $this->editors[$this->editor], + ]; + } + + if (is_callable($this->editor) || (isset($this->editors[$this->editor]) && is_callable($this->editors[$this->editor]))) { + if (is_callable($this->editor)) { + $callback = call_user_func($this->editor, $filePath, $line); + } else { + $callback = call_user_func($this->editors[$this->editor], $filePath, $line); + } + + if (empty($callback)) { + return []; + } + + if (is_string($callback)) { + return [ + 'ajax' => false, + 'url' => $callback, + ]; + } + + return [ + 'ajax' => isset($callback['ajax']) ? $callback['ajax'] : false, + 'url' => isset($callback['url']) ? $callback['url'] : $callback, + ]; + } + + return []; + } + + /** + * Set the page title. + * + * @param string $title + * + * @return void + */ + public function setPageTitle($title) + { + $this->pageTitle = (string) $title; + } + + /** + * Get the page title. + * + * @return string + */ + public function getPageTitle() + { + return $this->pageTitle; + } + + /** + * Adds a path to the list of paths to be searched for resources. + * + * @param string $path + * + * @throws InvalidArgumentException If $path is not a valid directory + * + * @return void + */ + public function addResourcePath($path) + { + if (!is_dir($path)) { + throw new InvalidArgumentException( + "'$path' is not a valid directory" + ); + } + + array_unshift($this->searchPaths, $path); + } + + /** + * Adds a custom css file to be loaded. + * + * @param string $name + * + * @return void + */ + public function addCustomCss($name) + { + $this->customCss = $name; + } + + /** + * Adds a custom js file to be loaded. + * + * @param string $name + * @return void + */ + public function addCustomJs($name) + { + $this->customJs = $name; + } + + /** + * @return array + */ + public function getResourcePaths() + { + return $this->searchPaths; + } + + /** + * Finds a resource, by its relative path, in all available search paths. + * + * The search is performed starting at the last search path, and all the + * way back to the first, enabling a cascading-type system of overrides for + * all resources. + * + * @param string $resource + * + * @throws RuntimeException If resource cannot be found in any of the available paths + * + * @return string + */ + protected function getResource($resource) + { + // If the resource was found before, we can speed things up + // by caching its absolute, resolved path: + if (isset($this->resourceCache[$resource])) { + return $this->resourceCache[$resource]; + } + + // Search through available search paths, until we find the + // resource we're after: + foreach ($this->searchPaths as $path) { + $fullPath = $path . "/$resource"; + + if (is_file($fullPath)) { + // Cache the result: + $this->resourceCache[$resource] = $fullPath; + return $fullPath; + } + } + + // If we got this far, nothing was found. + throw new RuntimeException( + "Could not find resource '$resource' in any resource paths." + . "(searched: " . join(", ", $this->searchPaths). ")" + ); + } + + /** + * @deprecated + * + * @return string + */ + public function getResourcesPath() + { + $allPaths = $this->getResourcePaths(); + + // Compat: return only the first path added + return end($allPaths) ?: null; + } + + /** + * @deprecated + * + * @param string $resourcesPath + * + * @return void + */ + public function setResourcesPath($resourcesPath) + { + $this->addResourcePath($resourcesPath); + } + + /** + * Return the application paths. + * + * @return array + */ + public function getApplicationPaths() + { + return $this->applicationPaths; + } + + /** + * Set the application paths. + * + * @param array $applicationPaths + * + * @return void + */ + public function setApplicationPaths($applicationPaths) + { + $this->applicationPaths = $applicationPaths; + } + + /** + * Set the application root path. + * + * @param string $applicationRootPath + * + * @return void + */ + public function setApplicationRootPath($applicationRootPath) + { + $this->templateHelper->setApplicationRootPath($applicationRootPath); + } + + /** + * blacklist a sensitive value within one of the superglobal arrays. + * + * @param string $superGlobalName The name of the superglobal array, e.g. '_GET' + * @param string $key The key within the superglobal + * + * @return void + */ + public function blacklist($superGlobalName, $key) + { + $this->blacklist[$superGlobalName][] = $key; + } + + /** + * Checks all values within the given superGlobal array. + * + * Blacklisted values will be replaced by a equal length string cointaining + * only '*' characters. We intentionally dont rely on $GLOBALS as it + * depends on the 'auto_globals_jit' php.ini setting. + * + * @param array $superGlobal One of the superglobal arrays + * @param string $superGlobalName The name of the superglobal array, e.g. '_GET' + * + * @return array $values without sensitive data + */ + private function masked(array $superGlobal, $superGlobalName) + { + $blacklisted = $this->blacklist[$superGlobalName]; + + $values = $superGlobal; + + foreach ($blacklisted as $key) { + if (isset($superGlobal[$key]) && is_string($superGlobal[$key])) { + $values[$key] = str_repeat('*', strlen($superGlobal[$key])); + } + } + + return $values; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Handler/XmlResponseHandler.php b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Handler/XmlResponseHandler.php new file mode 100644 index 0000000..decbbfa --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Handler/XmlResponseHandler.php @@ -0,0 +1,107 @@ + + */ + +namespace Whoops\Handler; + +use SimpleXMLElement; +use Whoops\Exception\Formatter; + +/** + * Catches an exception and converts it to an XML + * response. Additionally can also return exception + * frames for consumption by an API. + */ +class XmlResponseHandler extends Handler +{ + /** + * @var bool + */ + private $returnFrames = false; + + /** + * @param bool|null $returnFrames + * @return bool|$this + */ + public function addTraceToOutput($returnFrames = null) + { + if (func_num_args() == 0) { + return $this->returnFrames; + } + + $this->returnFrames = (bool) $returnFrames; + return $this; + } + + /** + * @return int + */ + public function handle() + { + $response = [ + 'error' => Formatter::formatExceptionAsDataArray( + $this->getInspector(), + $this->addTraceToOutput() + ), + ]; + + echo self::toXml($response); + + return Handler::QUIT; + } + + /** + * @return string + */ + public function contentType() + { + return 'application/xml'; + } + + /** + * @param SimpleXMLElement $node Node to append data to, will be modified in place + * @param array|\Traversable $data + * @return SimpleXMLElement The modified node, for chaining + */ + private static function addDataToNode(\SimpleXMLElement $node, $data) + { + assert(is_array($data) || $data instanceof Traversable); + + foreach ($data as $key => $value) { + if (is_numeric($key)) { + // Convert the key to a valid string + $key = "unknownNode_". (string) $key; + } + + // Delete any char not allowed in XML element names + $key = preg_replace('/[^a-z0-9\-\_\.\:]/i', '', $key); + + if (is_array($value)) { + $child = $node->addChild($key); + self::addDataToNode($child, $value); + } else { + $value = str_replace('&', '&', print_r($value, true)); + $node->addChild($key, $value); + } + } + + return $node; + } + + /** + * The main function for converting to an XML document. + * + * @param array|\Traversable $data + * @return string XML + */ + private static function toXml($data) + { + assert(is_array($data) || $data instanceof Traversable); + + $node = simplexml_load_string(""); + + return self::addDataToNode($node, $data)->asXML(); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/css/whoops.base.css b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/css/whoops.base.css new file mode 100644 index 0000000..d67499e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/css/whoops.base.css @@ -0,0 +1,604 @@ +body { + font: 12px "Helvetica Neue", helvetica, arial, sans-serif; + color: #131313; + background: #eeeeee; + padding:0; + margin: 0; + max-height: 100%; + + text-rendering: optimizeLegibility; +} + a { + text-decoration: none; + } + +.Whoops.container { + position: relative; + z-index: 9999999999; +} + +.panel { + overflow-y: scroll; + height: 100%; + position: fixed; + margin: 0; + left: 0; + top: 0; +} + +.branding { + position: absolute; + top: 10px; + right: 20px; + color: #777777; + font-size: 10px; + z-index: 100; +} + .branding a { + color: #e95353; + } + +header { + color: white; + box-sizing: border-box; + background-color: #2a2a2a; + padding: 35px 40px; + max-height: 180px; + overflow: hidden; + transition: 0.5s; +} + + header.header-expand { + max-height: 1000px; + } + + .exc-title { + margin: 0; + color: #bebebe; + font-size: 14px; + } + .exc-title-primary, .exc-title-secondary { + color: #e95353; + } + + .exc-message { + font-size: 20px; + word-wrap: break-word; + margin: 4px 0 0 0; + color: white; + } + .exc-message span { + display: block; + } + .exc-message-empty-notice { + color: #a29d9d; + font-weight: 300; + } + +.prev-exc-title { + margin: 10px 0; +} + +.prev-exc-title + ul { + margin: 0; + padding: 0 0 0 20px; + line-height: 12px; +} + +.prev-exc-title + ul li { + font: 12px "Helvetica Neue", helvetica, arial, sans-serif; +} + +.prev-exc-title + ul li .prev-exc-code { + display: inline-block; + color: #bebebe; +} + +.details-container { + left: 30%; + width: 70%; + background: #fafafa; +} + .details { + padding: 5px; + } + + .details-heading { + color: #4288CE; + font-weight: 300; + padding-bottom: 10px; + margin-bottom: 10px; + border-bottom: 1px solid rgba(0, 0, 0, .1); + } + + .details pre.sf-dump { + white-space: pre; + word-wrap: inherit; + } + + .details pre.sf-dump, + .details pre.sf-dump .sf-dump-num, + .details pre.sf-dump .sf-dump-const, + .details pre.sf-dump .sf-dump-str, + .details pre.sf-dump .sf-dump-note, + .details pre.sf-dump .sf-dump-ref, + .details pre.sf-dump .sf-dump-public, + .details pre.sf-dump .sf-dump-protected, + .details pre.sf-dump .sf-dump-private, + .details pre.sf-dump .sf-dump-meta, + .details pre.sf-dump .sf-dump-key, + .details pre.sf-dump .sf-dump-index { + color: #463C54; + } + +.left-panel { + width: 30%; + background: #ded8d8; +} + + .frames-description { + background: rgba(0, 0, 0, .05); + padding: 8px 15px; + color: #a29d9d; + font-size: 11px; + } + + .frames-description.frames-description-application { + text-align: center; + font-size: 12px; + } + .frames-container.frames-container-application .frame:not(.frame-application) { + display: none; + } + + .frames-tab { + color: #a29d9d; + display: inline-block; + padding: 4px 8px; + margin: 0 2px; + border-radius: 3px; + } + + .frames-tab.frames-tab-active { + background-color: #2a2a2a; + color: #bebebe; + } + + .frame { + padding: 14px; + cursor: pointer; + transition: all 0.1s ease; + background: #eeeeee; + } + .frame:not(:last-child) { + border-bottom: 1px solid rgba(0, 0, 0, .05); + } + + .frame.active { + box-shadow: inset -5px 0 0 0 #4288CE; + color: #4288CE; + } + + .frame:not(.active):hover { + background: #BEE9EA; + } + + .frame-method-info { + margin-bottom: 10px; + } + + .frame-class, .frame-function, .frame-index { + font-size: 14px; + } + + .frame-index { + float: left; + } + + .frame-method-info { + margin-left: 24px; + } + + .frame-index { + font-size: 11px; + color: #a29d9d; + background-color: rgba(0, 0, 0, .05); + height: 18px; + width: 18px; + line-height: 18px; + border-radius: 5px; + padding: 0 1px 0 1px; + text-align: center; + display: inline-block; + } + + .frame-application .frame-index { + background-color: #2a2a2a; + color: #bebebe; + } + + .frame-file { + font-family: "Inconsolata", "Fira Mono", "Source Code Pro", Monaco, Consolas, "Lucida Console", monospace; + color: #a29d9d; + } + + .frame-file .editor-link { + color: #a29d9d; + } + + .frame-line { + font-weight: bold; + } + + .frame-line:before { + content: ":"; + } + + .frame-code { + padding: 5px; + background: #303030; + display: none; + } + + .frame-code.active { + display: block; + } + + .frame-code .frame-file { + color: #a29d9d; + padding: 12px 6px; + + border-bottom: none; + } + + .code-block { + padding: 10px; + margin: 0; + border-radius: 6px; + box-shadow: 0 3px 0 rgba(0, 0, 0, .05), + 0 10px 30px rgba(0, 0, 0, .05), + inset 0 0 1px 0 rgba(255, 255, 255, .07); + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + } + + .linenums { + margin: 0; + margin-left: 10px; + } + + .frame-comments { + border-top: none; + margin-top: 15px; + + font-size: 12px; + } + + .frame-comments.empty { + } + + .frame-comments.empty:before { + content: "No comments for this stack frame."; + font-weight: 300; + color: #a29d9d; + } + + .frame-comment { + padding: 10px; + color: #e3e3e3; + border-radius: 6px; + background-color: rgba(255, 255, 255, .05); + } + .frame-comment a { + font-weight: bold; + text-decoration: none; + } + .frame-comment a:hover { + color: #4bb1b1; + } + + .frame-comment:not(:last-child) { + border-bottom: 1px dotted rgba(0, 0, 0, .3); + } + + .frame-comment-context { + font-size: 10px; + color: white; + } + +.delimiter { + display: inline-block; +} + +.data-table-container label { + font-size: 16px; + color: #303030; + font-weight: bold; + margin: 10px 0; + + display: block; + + margin-bottom: 5px; + padding-bottom: 5px; +} + .data-table { + width: 100%; + margin-bottom: 10px; + } + + .data-table tbody { + font: 13px "Inconsolata", "Fira Mono", "Source Code Pro", Monaco, Consolas, "Lucida Console", monospace; + } + + .data-table thead { + display: none; + } + + .data-table tr { + padding: 5px 0; + } + + .data-table td:first-child { + width: 20%; + min-width: 130px; + overflow: hidden; + font-weight: bold; + color: #463C54; + padding-right: 5px; + + } + + .data-table td:last-child { + width: 80%; + -ms-word-break: break-all; + word-break: break-all; + word-break: break-word; + -webkit-hyphens: auto; + -moz-hyphens: auto; + hyphens: auto; + } + + .data-table span.empty { + color: rgba(0, 0, 0, .3); + font-weight: 300; + } + .data-table label.empty { + display: inline; + } + +.handler { + padding: 4px 0; + font: 14px "Inconsolata", "Fira Mono", "Source Code Pro", Monaco, Consolas, "Lucida Console", monospace; +} + +/* prettify code style +Uses the Doxy theme as a base */ +pre .str, code .str { color: #BCD42A; } /* string */ +pre .kwd, code .kwd { color: #4bb1b1; font-weight: bold; } /* keyword*/ +pre .com, code .com { color: #888; font-weight: bold; } /* comment */ +pre .typ, code .typ { color: #ef7c61; } /* type */ +pre .lit, code .lit { color: #BCD42A; } /* literal */ +pre .pun, code .pun { color: #fff; font-weight: bold; } /* punctuation */ +pre .pln, code .pln { color: #e9e4e5; } /* plaintext */ +pre .tag, code .tag { color: #4bb1b1; } /* html/xml tag */ +pre .htm, code .htm { color: #dda0dd; } /* html tag */ +pre .xsl, code .xsl { color: #d0a0d0; } /* xslt tag */ +pre .atn, code .atn { color: #ef7c61; font-weight: normal;} /* html/xml attribute name */ +pre .atv, code .atv { color: #bcd42a; } /* html/xml attribute value */ +pre .dec, code .dec { color: #606; } /* decimal */ +pre.code-block, code.code-block, .frame-args.code-block, .frame-args.code-block samp { + font-family: "Inconsolata", "Fira Mono", "Source Code Pro", Monaco, Consolas, "Lucida Console", monospace; + background: #333; + color: #e9e4e5; +} + pre.code-block { + white-space: pre-wrap; + } + + pre.code-block a, code.code-block a { + text-decoration:none; + } + + .linenums li { + color: #A5A5A5; + } + + .linenums li.current{ + background: rgba(255, 100, 100, .07); + } + .linenums li.current.active { + background: rgba(255, 100, 100, .17); + } + +pre:not(.prettyprinted) { + padding-left: 60px; +} + +#plain-exception { + display: none; +} + +.rightButton { + cursor: pointer; + border: 0; + opacity: .8; + background: none; + + color: rgba(255, 255, 255, 0.1); + box-shadow: inset 0 0 0 2px rgba(255, 255, 255, 0.1); + + border-radius: 3px; + + outline: none !important; +} + + .rightButton:hover { + box-shadow: inset 0 0 0 2px rgba(255, 255, 255, 0.3); + color: rgba(255, 255, 255, 0.3); + } + +/* inspired by githubs kbd styles */ +kbd { + -moz-border-bottom-colors: none; + -moz-border-left-colors: none; + -moz-border-right-colors: none; + -moz-border-top-colors: none; + background-color: #fcfcfc; + border-color: #ccc #ccc #bbb; + border-image: none; + border-style: solid; + border-width: 1px; + color: #555; + display: inline-block; + font-size: 11px; + line-height: 10px; + padding: 3px 5px; + vertical-align: middle; +} + + +/* == Media queries */ + +/* Expand the spacing in the details section */ +@media (min-width: 1000px) { + .details, .frame-code { + padding: 20px 40px; + } + + .details-container { + left: 32%; + width: 68%; + } + + .frames-container { + margin: 5px; + } + + .left-panel { + width: 32%; + } +} + +/* Stack panels */ +@media (max-width: 600px) { + .panel { + position: static; + width: 100%; + } +} + +/* Stack details tables */ +@media (max-width: 400px) { + .data-table, + .data-table tbody, + .data-table tbody tr, + .data-table tbody td { + display: block; + width: 100%; + } + + .data-table tbody tr:first-child { + padding-top: 0; + } + + .data-table tbody td:first-child, + .data-table tbody td:last-child { + padding-left: 0; + padding-right: 0; + } + + .data-table tbody td:last-child { + padding-top: 3px; + } +} + +.tooltipped { + position: relative +} +.tooltipped:after { + position: absolute; + z-index: 1000000; + display: none; + padding: 5px 8px; + color: #fff; + text-align: center; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-wrap: break-word; + white-space: pre; + pointer-events: none; + content: attr(aria-label); + background: rgba(0, 0, 0, 0.8); + border-radius: 3px; + -webkit-font-smoothing: subpixel-antialiased +} +.tooltipped:before { + position: absolute; + z-index: 1000001; + display: none; + width: 0; + height: 0; + color: rgba(0, 0, 0, 0.8); + pointer-events: none; + content: ""; + border: 5px solid transparent +} +.tooltipped:hover:before, +.tooltipped:hover:after, +.tooltipped:active:before, +.tooltipped:active:after, +.tooltipped:focus:before, +.tooltipped:focus:after { + display: inline-block; + text-decoration: none +} +.tooltipped-s:after { + top: 100%; + right: 50%; + margin-top: 5px +} +.tooltipped-s:before { + top: auto; + right: 50%; + bottom: -5px; + margin-right: -5px; + border-bottom-color: rgba(0, 0, 0, 0.8) +} + +pre.sf-dump { + padding: 0px !important; + margin: 0px !important; +} + +.search-for-help { + width: 85%; + padding: 0; + margin: 10px 0; + list-style-type: none; + display: inline-block; +} + .search-for-help li { + display: inline-block; + margin-right: 5px; + } + .search-for-help li:last-child { + margin-right: 0; + } + .search-for-help li a { + + } + .search-for-help li a i { + width: 16px; + height: 16px; + overflow: hidden; + display: block; + } + .search-for-help li a svg { + fill: #fff; + } + .search-for-help li a svg path { + background-size: contain; + } diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/js/clipboard.min.js b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/js/clipboard.min.js new file mode 100644 index 0000000..36a75a4 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/js/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v1.5.3 + * https://zenorocha.github.io/clipboard.js + * + * Licensed MIT © Zeno Rocha + */ +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Clipboard=t()}}(function(){var t,e,n;return function t(e,n,r){function o(a,c){if(!n[a]){if(!e[a]){var s="function"==typeof require&&require;if(!c&&s)return s(a,!0);if(i)return i(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var l=n[a]={exports:{}};e[a][0].call(l.exports,function(t){var n=e[a][1][t];return o(n?n:t)},l,l.exports,t,e,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;ar;r++)n[r].fn.apply(n[r].ctx,e);return this},off:function(t,e){var n=this.e||(this.e={}),r=n[t],o=[];if(r&&e)for(var i=0,a=r.length;a>i;i++)r[i].fn!==e&&r[i].fn._!==e&&o.push(r[i]);return o.length?n[t]=o:delete n[t],this}},e.exports=r},{}],8:[function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}n.__esModule=!0;var i=function(){function t(t,e){for(var n=0;n122||(e<65||h>90||d.push([Math.max(65,h)|32,Math.min(e,90)|32]),e<97||h>122||d.push([Math.max(97,h)&-33,Math.min(e,122)&-33]))}}d.sort(function(d,a){return d[0]-a[0]||a[1]-d[1]});a=[];c=[];for(f=0;fh[0]&&(h[1]+1>h[0]&&b.push("-"),b.push(g(h[1])));b.push("]");return b.join("")}function t(d){for(var a=d.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=a.length,i=[],c=0,h=0;c=2&&d==="["?a[c]=j(e):d!=="\\"&&(a[c]=e.replace(/[A-Za-z]/g,function(d){d=d.charCodeAt(0);return"["+String.fromCharCode(d&-33,d|32)+"]"}));return a.join("")}for(var z=0,w=!1,k=!1,m=0,b=a.length;m=5&&"lang-"===f.substring(0, +5))&&!(u&&typeof u[1]==="string"))c=!1,f="src";c||(s[v]=f)}h=b;b+=v.length;if(c){c=u[1];var e=v.indexOf(c),p=e+c.length;u[2]&&(p=v.length-u[2].length,e=p-c.length);f=f.substring(5);E(k+h,v.substring(0,e),g,m);E(k+h+e,c,F(f,c),m);E(k+h+p,v.substring(p),g,m)}else m.push(k+h,f)}a.g=m}var j={},t;(function(){for(var g=a.concat(i),k=[],m={},b=0,o=g.length;b=0;)j[q.charAt(d)]=s;s=s[1];q=""+s;m.hasOwnProperty(q)||(k.push(s),m[q]=r)}k.push(/[\S\s]/);t= +O(k)})();var z=i.length;return g}function l(a){var i=[],g=[];a.tripleQuotedStrings?i.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,r,"'\""]):a.multiLineStrings?i.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,r,"'\"`"]):i.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,r,"\"'"]);a.verbatimStrings&& +g.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,r]);var j=a.hashComments;j&&(a.cStyleComments?(j>1?i.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,r,"#"]):i.push(["com",/^#(?:(?:define|e(?:l|nd)if|else|error|ifn?def|include|line|pragma|undef|warning)\b|[^\n\r]*)/,r,"#"]),g.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h(?:h|pp|\+\+)?|[a-z]\w*)>/,r])):i.push(["com",/^#[^\n\r]*/,r,"#"]));a.cStyleComments&&(g.push(["com",/^\/\/[^\n\r]*/,r]),g.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/, +r]));a.regexLiterals&&g.push(["lang-regex",/^(?:^^\.?|[+-]|[!=]={0,2}|#|%=?|&&?=?|\(|\*=?|[+-]=|->|\/=?|::?|<{1,3}=?|[,;?@[{~]|\^\^?=?|\|\|?=?|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(j=a.types)&&g.push(["typ",j]);a=(""+a.keywords).replace(/^ | $/g,"");a.length&&g.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),r]);i.push(["pln",/^\s+/,r," \r\n\t\u00a0"]);g.push(["lit", +/^@[$_a-z][\w$@]*/i,r],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,r],["pln",/^[$_a-z][\w$@]*/i,r],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,r,"0123456789"],["pln",/^\\[\S\s]?/,r],["pun",/^.[^\s\w"$'./@\\`]*/,r]);return x(i,g)}function G(a,i,g){function j(a){switch(a.nodeType){case 1:if(z.test(a.className))break;if("br"===a.nodeName)t(a),a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)j(a);break;case 3:case 4:if(g){var b= +a.nodeValue,f=b.match(n);if(f){var i=b.substring(0,f.index);a.nodeValue=i;(b=b.substring(f.index+f[0].length))&&a.parentNode.insertBefore(k.createTextNode(b),a.nextSibling);t(a);i||a.parentNode.removeChild(a)}}}}function t(a){function i(a,b){var d=b?a.cloneNode(!1):a,e=a.parentNode;if(e){var e=i(e,1),f=a.nextSibling;e.appendChild(d);for(var g=f;g;g=f)f=g.nextSibling,e.appendChild(g)}return d}for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=i(a.nextSibling,0),f;(f=a.parentNode)&&f.nodeType=== +1;)a=f;b.push(a)}for(var z=/(?:^|\s)nocode(?:\s|$)/,n=/\r\n?|\n/,k=a.ownerDocument,m=k.createElement("li");a.firstChild;)m.appendChild(a.firstChild);for(var b=[m],o=0;o=0;){var j= +i[g];A.hasOwnProperty(j)?C.console&&console.warn("cannot override language handler %s",j):A[j]=a}}function F(a,i){if(!a||!A.hasOwnProperty(a))a=/^\s*=e&&(j+=2);g>=p&&(s+=2)}}finally{if(c)c.style.display=h}}catch(A){C.console&&console.log(A&&A.stack?A.stack:A)}}var C=window,y=["break,continue,do,else,for,if,return,while"],B=[[y,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],I=[B,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"], +J=[B,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"],K=[J,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,let,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var,virtual,where"],B=[B,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"], +L=[y,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],M=[y,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],y=[y,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],N=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)\b/, +Q=/\S/,R=l({keywords:[I,K,B,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+L,M,y],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};n(R,["default-code"]);n(x([],[["pln",/^[^]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-", +/^]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);n(x([["pln",/^\s+/,r," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,r,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/], +["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);n(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);n(l({keywords:I,hashComments:!0,cStyleComments:!0,types:N}),["c","cc","cpp","cxx","cyc","m"]);n(l({keywords:"null,true,false"}),["json"]);n(l({keywords:K,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:N}), +["cs"]);n(l({keywords:J,cStyleComments:!0}),["java"]);n(l({keywords:y,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);n(l({keywords:L,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),["cv","py"]);n(l({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);n(l({keywords:M,hashComments:!0, +multiLineStrings:!0,regexLiterals:!0}),["rb"]);n(l({keywords:B,cStyleComments:!0,regexLiterals:!0}),["js"]);n(l({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,throw,true,try,unless,until,when,while,yes",hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);n(x([],[["str",/^[\S\s]+/]]),["regex"]);var S=C.PR={createSimpleLexer:x,registerLangHandler:n,sourceDecorator:l, +PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ",prettyPrintOne:C.prettyPrintOne=function(a,i,g){var j=document.createElement("pre");j.innerHTML=a;g&&G(j,g,!0);H({h:i,j:g,c:j,i:1});return j.innerHTML},prettyPrint:C.prettyPrint=function(a){function i(){var u;for(var g=C.PR_SHOULD_USE_CONTINUATION?k.now()+250:Infinity;m= 145) { + $header.addClass('header-expand'); + } + }); + $header.on('mouseleave', function () { + $header.removeClass('header-expand'); + }); + + /* + * add prettyprint classes to our current active codeblock + * run prettyPrint() to highlight the active code + * scroll to the line when prettyprint is done + * highlight the current line + */ + var renderCurrentCodeblock = function(id) { + + // remove previous codeblocks so we only render the active one + $('.code-block').removeClass('prettyprint'); + + // pass the id in when we can for speed + if (typeof(id) === 'undefined' || typeof(id) === 'object') { + var id = /frame\-line\-([\d]*)/.exec($activeLine.attr('id'))[1]; + } + + $('#frame-code-linenums-' + id).addClass('prettyprint'); + $('#frame-code-args-' + id).addClass('prettyprint'); + + prettyPrint(highlightCurrentLine); + + } + + /* + * Highlight the active and neighboring lines for the current frame + * Adjust the offset to make sure that line is veritcally centered + */ + + var highlightCurrentLine = function() { + var activeLineNumber = +($activeLine.find('.frame-line').text()); + var $lines = $activeFrame.find('.linenums li'); + var firstLine = +($lines.first().val()); + + // We show more code than needed, purely for proper syntax highlighting + // Let’s hide a big chunk of that code and then scroll the remaining block + $activeFrame.find('.code-block').first().css({ + maxHeight: 345, + overflow: 'hidden', + }); + + var $offset = $($lines[activeLineNumber - firstLine - 10]); + if ($offset.length > 0) { + $offset[0].scrollIntoView(); + } + + $($lines[activeLineNumber - firstLine - 1]).addClass('current'); + $($lines[activeLineNumber - firstLine]).addClass('current active'); + $($lines[activeLineNumber - firstLine + 1]).addClass('current'); + + $container.scrollTop(0); + + } + + /* + * click handler for loading codeblocks + */ + + $frameContainer.on('click', '.frame', function() { + + var $this = $(this); + var id = /frame\-line\-([\d]*)/.exec($this.attr('id'))[1]; + var $codeFrame = $('#frame-code-' + id); + + if ($codeFrame) { + + $activeLine.removeClass('active'); + $activeFrame.removeClass('active'); + + $this.addClass('active'); + $codeFrame.addClass('active'); + + $activeLine = $this; + $activeFrame = $codeFrame; + + renderCurrentCodeblock(id); + + } + + }); + + var clipboard = new Clipboard('.clipboard'); + var showTooltip = function(elem, msg) { + elem.setAttribute('class', 'clipboard tooltipped tooltipped-s'); + elem.setAttribute('aria-label', msg); + }; + + clipboard.on('success', function(e) { + e.clearSelection(); + + showTooltip(e.trigger, 'Copied!'); + }); + + clipboard.on('error', function(e) { + showTooltip(e.trigger, fallbackMessage(e.action)); + }); + + var btn = document.querySelector('.clipboard'); + + btn.addEventListener('mouseleave', function(e) { + e.currentTarget.setAttribute('class', 'clipboard'); + e.currentTarget.removeAttribute('aria-label'); + }); + + function fallbackMessage(action) { + var actionMsg = ''; + var actionKey = (action === 'cut' ? 'X' : 'C'); + + if (/Mac/i.test(navigator.userAgent)) { + actionMsg = 'Press ⌘-' + actionKey + ' to ' + action; + } else { + actionMsg = 'Press Ctrl-' + actionKey + ' to ' + action; + } + + return actionMsg; + } + + function scrollIntoView($node, $parent) { + var nodeOffset = $node.offset(); + var nodeTop = nodeOffset.top; + var nodeBottom = nodeTop + nodeOffset.height; + var parentScrollTop = $parent.scrollTop(); + var parentHeight = $parent.height(); + + if (nodeTop < 0) { + $parent.scrollTop(parentScrollTop + nodeTop); + } else if (nodeBottom > parentHeight) { + $parent.scrollTop(parentScrollTop + nodeBottom - parentHeight); + } + } + + $(document).on('keydown', function(e) { + var applicationFrames = $frameContainer.hasClass('frames-container-application'), + frameClass = applicationFrames ? '.frame.frame-application' : '.frame'; + + if(e.ctrlKey || e.which === 74 || e.which === 75) { + // CTRL+Arrow-UP/k and Arrow-Down/j support: + // 1) select the next/prev element + // 2) make sure the newly selected element is within the view-scope + // 3) focus the (right) container, so arrow-up/down (without ctrl) scroll the details + if (e.which === 38 /* arrow up */ || e.which === 75 /* k */) { + $activeLine.prev(frameClass).click(); + scrollIntoView($activeLine, $leftPanel); + $container.focus(); + e.preventDefault(); + } else if (e.which === 40 /* arrow down */ || e.which === 74 /* j */) { + $activeLine.next(frameClass).click(); + scrollIntoView($activeLine, $leftPanel); + $container.focus(); + e.preventDefault(); + } + } else if (e.which == 78 /* n */) { + if ($appFramesTab.length) { + setActiveFramesTab($('.frames-tab:not(.frames-tab-active)')); + } + } + }); + + // Render late enough for highlightCurrentLine to be ready + renderCurrentCodeblock(); + + // Avoid to quit the page with some protocol (e.g. IntelliJ Platform REST API) + $ajaxEditors.on('click', function(e){ + e.preventDefault(); + $.get(this.href); + }); + + // Symfony VarDumper: Close the by default expanded objects + $('.sf-dump-expanded') + .removeClass('sf-dump-expanded') + .addClass('sf-dump-compact'); + $('.sf-dump-toggle span').html('▶'); + + // Make the given frames-tab active + function setActiveFramesTab($tab) { + $tab.addClass('frames-tab-active'); + + if ($tab.attr('id') == 'application-frames-tab') { + $frameContainer.addClass('frames-container-application'); + $allFramesTab.removeClass('frames-tab-active'); + } else { + $frameContainer.removeClass('frames-container-application'); + $appFramesTab.removeClass('frames-tab-active'); + } + } + + $('a.frames-tab').on('click', function(e) { + e.preventDefault(); + setActiveFramesTab($(this)); + }); +}); diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/js/zepto.min.js b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/js/zepto.min.js new file mode 100644 index 0000000..0b2f97a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/js/zepto.min.js @@ -0,0 +1,2 @@ +/* Zepto v1.1.3 - zepto event ajax form ie - zeptojs.com/license */ +var Zepto=function(){function L(t){return null==t?String(t):j[T.call(t)]||"object"}function Z(t){return"function"==L(t)}function $(t){return null!=t&&t==t.window}function _(t){return null!=t&&t.nodeType==t.DOCUMENT_NODE}function D(t){return"object"==L(t)}function R(t){return D(t)&&!$(t)&&Object.getPrototypeOf(t)==Object.prototype}function M(t){return"number"==typeof t.length}function k(t){return s.call(t,function(t){return null!=t})}function z(t){return t.length>0?n.fn.concat.apply([],t):t}function F(t){return t.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function q(t){return t in f?f[t]:f[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}function H(t,e){return"number"!=typeof e||c[F(t)]?e:e+"px"}function I(t){var e,n;return u[t]||(e=a.createElement(t),a.body.appendChild(e),n=getComputedStyle(e,"").getPropertyValue("display"),e.parentNode.removeChild(e),"none"==n&&(n="block"),u[t]=n),u[t]}function V(t){return"children"in t?o.call(t.children):n.map(t.childNodes,function(t){return 1==t.nodeType?t:void 0})}function U(n,i,r){for(e in i)r&&(R(i[e])||A(i[e]))?(R(i[e])&&!R(n[e])&&(n[e]={}),A(i[e])&&!A(n[e])&&(n[e]=[]),U(n[e],i[e],r)):i[e]!==t&&(n[e]=i[e])}function B(t,e){return null==e?n(t):n(t).filter(e)}function J(t,e,n,i){return Z(e)?e.call(t,n,i):e}function X(t,e,n){null==n?t.removeAttribute(e):t.setAttribute(e,n)}function W(e,n){var i=e.className,r=i&&i.baseVal!==t;return n===t?r?i.baseVal:i:void(r?i.baseVal=n:e.className=n)}function Y(t){var e;try{return t?"true"==t||("false"==t?!1:"null"==t?null:/^0/.test(t)||isNaN(e=Number(t))?/^[\[\{]/.test(t)?n.parseJSON(t):t:e):t}catch(i){return t}}function G(t,e){e(t);for(var n in t.childNodes)G(t.childNodes[n],e)}var t,e,n,i,C,N,r=[],o=r.slice,s=r.filter,a=window.document,u={},f={},c={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},l=/^\s*<(\w+|!)[^>]*>/,h=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,p=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,d=/^(?:body|html)$/i,m=/([A-Z])/g,g=["val","css","html","text","data","width","height","offset"],v=["after","prepend","before","append"],y=a.createElement("table"),x=a.createElement("tr"),b={tr:a.createElement("tbody"),tbody:y,thead:y,tfoot:y,td:x,th:x,"*":a.createElement("div")},w=/complete|loaded|interactive/,E=/^[\w-]*$/,j={},T=j.toString,S={},O=a.createElement("div"),P={tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},A=Array.isArray||function(t){return t instanceof Array};return S.matches=function(t,e){if(!e||!t||1!==t.nodeType)return!1;var n=t.webkitMatchesSelector||t.mozMatchesSelector||t.oMatchesSelector||t.matchesSelector;if(n)return n.call(t,e);var i,r=t.parentNode,o=!r;return o&&(r=O).appendChild(t),i=~S.qsa(r,e).indexOf(t),o&&O.removeChild(t),i},C=function(t){return t.replace(/-+(.)?/g,function(t,e){return e?e.toUpperCase():""})},N=function(t){return s.call(t,function(e,n){return t.indexOf(e)==n})},S.fragment=function(e,i,r){var s,u,f;return h.test(e)&&(s=n(a.createElement(RegExp.$1))),s||(e.replace&&(e=e.replace(p,"<$1>")),i===t&&(i=l.test(e)&&RegExp.$1),i in b||(i="*"),f=b[i],f.innerHTML=""+e,s=n.each(o.call(f.childNodes),function(){f.removeChild(this)})),R(r)&&(u=n(s),n.each(r,function(t,e){g.indexOf(t)>-1?u[t](e):u.attr(t,e)})),s},S.Z=function(t,e){return t=t||[],t.__proto__=n.fn,t.selector=e||"",t},S.isZ=function(t){return t instanceof S.Z},S.init=function(e,i){var r;if(!e)return S.Z();if("string"==typeof e)if(e=e.trim(),"<"==e[0]&&l.test(e))r=S.fragment(e,RegExp.$1,i),e=null;else{if(i!==t)return n(i).find(e);r=S.qsa(a,e)}else{if(Z(e))return n(a).ready(e);if(S.isZ(e))return e;if(A(e))r=k(e);else if(D(e))r=[e],e=null;else if(l.test(e))r=S.fragment(e.trim(),RegExp.$1,i),e=null;else{if(i!==t)return n(i).find(e);r=S.qsa(a,e)}}return S.Z(r,e)},n=function(t,e){return S.init(t,e)},n.extend=function(t){var e,n=o.call(arguments,1);return"boolean"==typeof t&&(e=t,t=n.shift()),n.forEach(function(n){U(t,n,e)}),t},S.qsa=function(t,e){var n,i="#"==e[0],r=!i&&"."==e[0],s=i||r?e.slice(1):e,a=E.test(s);return _(t)&&a&&i?(n=t.getElementById(s))?[n]:[]:1!==t.nodeType&&9!==t.nodeType?[]:o.call(a&&!i?r?t.getElementsByClassName(s):t.getElementsByTagName(e):t.querySelectorAll(e))},n.contains=function(t,e){return t!==e&&t.contains(e)},n.type=L,n.isFunction=Z,n.isWindow=$,n.isArray=A,n.isPlainObject=R,n.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},n.inArray=function(t,e,n){return r.indexOf.call(e,t,n)},n.camelCase=C,n.trim=function(t){return null==t?"":String.prototype.trim.call(t)},n.uuid=0,n.support={},n.expr={},n.map=function(t,e){var n,r,o,i=[];if(M(t))for(r=0;r=0?e:e+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each(function(){null!=this.parentNode&&this.parentNode.removeChild(this)})},each:function(t){return r.every.call(this,function(e,n){return t.call(e,n,e)!==!1}),this},filter:function(t){return Z(t)?this.not(this.not(t)):n(s.call(this,function(e){return S.matches(e,t)}))},add:function(t,e){return n(N(this.concat(n(t,e))))},is:function(t){return this.length>0&&S.matches(this[0],t)},not:function(e){var i=[];if(Z(e)&&e.call!==t)this.each(function(t){e.call(this,t)||i.push(this)});else{var r="string"==typeof e?this.filter(e):M(e)&&Z(e.item)?o.call(e):n(e);this.forEach(function(t){r.indexOf(t)<0&&i.push(t)})}return n(i)},has:function(t){return this.filter(function(){return D(t)?n.contains(this,t):n(this).find(t).size()})},eq:function(t){return-1===t?this.slice(t):this.slice(t,+t+1)},first:function(){var t=this[0];return t&&!D(t)?t:n(t)},last:function(){var t=this[this.length-1];return t&&!D(t)?t:n(t)},find:function(t){var e,i=this;return e="object"==typeof t?n(t).filter(function(){var t=this;return r.some.call(i,function(e){return n.contains(e,t)})}):1==this.length?n(S.qsa(this[0],t)):this.map(function(){return S.qsa(this,t)})},closest:function(t,e){var i=this[0],r=!1;for("object"==typeof t&&(r=n(t));i&&!(r?r.indexOf(i)>=0:S.matches(i,t));)i=i!==e&&!_(i)&&i.parentNode;return n(i)},parents:function(t){for(var e=[],i=this;i.length>0;)i=n.map(i,function(t){return(t=t.parentNode)&&!_(t)&&e.indexOf(t)<0?(e.push(t),t):void 0});return B(e,t)},parent:function(t){return B(N(this.pluck("parentNode")),t)},children:function(t){return B(this.map(function(){return V(this)}),t)},contents:function(){return this.map(function(){return o.call(this.childNodes)})},siblings:function(t){return B(this.map(function(t,e){return s.call(V(e.parentNode),function(t){return t!==e})}),t)},empty:function(){return this.each(function(){this.innerHTML=""})},pluck:function(t){return n.map(this,function(e){return e[t]})},show:function(){return this.each(function(){"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=I(this.nodeName))})},replaceWith:function(t){return this.before(t).remove()},wrap:function(t){var e=Z(t);if(this[0]&&!e)var i=n(t).get(0),r=i.parentNode||this.length>1;return this.each(function(o){n(this).wrapAll(e?t.call(this,o):r?i.cloneNode(!0):i)})},wrapAll:function(t){if(this[0]){n(this[0]).before(t=n(t));for(var e;(e=t.children()).length;)t=e.first();n(t).append(this)}return this},wrapInner:function(t){var e=Z(t);return this.each(function(i){var r=n(this),o=r.contents(),s=e?t.call(this,i):t;o.length?o.wrapAll(s):r.append(s)})},unwrap:function(){return this.parent().each(function(){n(this).replaceWith(n(this).children())}),this},clone:function(){return this.map(function(){return this.cloneNode(!0)})},hide:function(){return this.css("display","none")},toggle:function(e){return this.each(function(){var i=n(this);(e===t?"none"==i.css("display"):e)?i.show():i.hide()})},prev:function(t){return n(this.pluck("previousElementSibling")).filter(t||"*")},next:function(t){return n(this.pluck("nextElementSibling")).filter(t||"*")},html:function(t){return 0===arguments.length?this.length>0?this[0].innerHTML:null:this.each(function(e){var i=this.innerHTML;n(this).empty().append(J(this,t,e,i))})},text:function(e){return 0===arguments.length?this.length>0?this[0].textContent:null:this.each(function(){this.textContent=e===t?"":""+e})},attr:function(n,i){var r;return"string"==typeof n&&i===t?0==this.length||1!==this[0].nodeType?t:"value"==n&&"INPUT"==this[0].nodeName?this.val():!(r=this[0].getAttribute(n))&&n in this[0]?this[0][n]:r:this.each(function(t){if(1===this.nodeType)if(D(n))for(e in n)X(this,e,n[e]);else X(this,n,J(this,i,t,this.getAttribute(n)))})},removeAttr:function(t){return this.each(function(){1===this.nodeType&&X(this,t)})},prop:function(e,n){return e=P[e]||e,n===t?this[0]&&this[0][e]:this.each(function(t){this[e]=J(this,n,t,this[e])})},data:function(e,n){var i=this.attr("data-"+e.replace(m,"-$1").toLowerCase(),n);return null!==i?Y(i):t},val:function(t){return 0===arguments.length?this[0]&&(this[0].multiple?n(this[0]).find("option").filter(function(){return this.selected}).pluck("value"):this[0].value):this.each(function(e){this.value=J(this,t,e,this.value)})},offset:function(t){if(t)return this.each(function(e){var i=n(this),r=J(this,t,e,i.offset()),o=i.offsetParent().offset(),s={top:r.top-o.top,left:r.left-o.left};"static"==i.css("position")&&(s.position="relative"),i.css(s)});if(0==this.length)return null;var e=this[0].getBoundingClientRect();return{left:e.left+window.pageXOffset,top:e.top+window.pageYOffset,width:Math.round(e.width),height:Math.round(e.height)}},css:function(t,i){if(arguments.length<2){var r=this[0],o=getComputedStyle(r,"");if(!r)return;if("string"==typeof t)return r.style[C(t)]||o.getPropertyValue(t);if(A(t)){var s={};return n.each(A(t)?t:[t],function(t,e){s[e]=r.style[C(e)]||o.getPropertyValue(e)}),s}}var a="";if("string"==L(t))i||0===i?a=F(t)+":"+H(t,i):this.each(function(){this.style.removeProperty(F(t))});else for(e in t)t[e]||0===t[e]?a+=F(e)+":"+H(e,t[e])+";":this.each(function(){this.style.removeProperty(F(e))});return this.each(function(){this.style.cssText+=";"+a})},index:function(t){return t?this.indexOf(n(t)[0]):this.parent().children().indexOf(this[0])},hasClass:function(t){return t?r.some.call(this,function(t){return this.test(W(t))},q(t)):!1},addClass:function(t){return t?this.each(function(e){i=[];var r=W(this),o=J(this,t,e,r);o.split(/\s+/g).forEach(function(t){n(this).hasClass(t)||i.push(t)},this),i.length&&W(this,r+(r?" ":"")+i.join(" "))}):this},removeClass:function(e){return this.each(function(n){return e===t?W(this,""):(i=W(this),J(this,e,n,i).split(/\s+/g).forEach(function(t){i=i.replace(q(t)," ")}),void W(this,i.trim()))})},toggleClass:function(e,i){return e?this.each(function(r){var o=n(this),s=J(this,e,r,W(this));s.split(/\s+/g).forEach(function(e){(i===t?!o.hasClass(e):i)?o.addClass(e):o.removeClass(e)})}):this},scrollTop:function(e){if(this.length){var n="scrollTop"in this[0];return e===t?n?this[0].scrollTop:this[0].pageYOffset:this.each(n?function(){this.scrollTop=e}:function(){this.scrollTo(this.scrollX,e)})}},scrollLeft:function(e){if(this.length){var n="scrollLeft"in this[0];return e===t?n?this[0].scrollLeft:this[0].pageXOffset:this.each(n?function(){this.scrollLeft=e}:function(){this.scrollTo(e,this.scrollY)})}},position:function(){if(this.length){var t=this[0],e=this.offsetParent(),i=this.offset(),r=d.test(e[0].nodeName)?{top:0,left:0}:e.offset();return i.top-=parseFloat(n(t).css("margin-top"))||0,i.left-=parseFloat(n(t).css("margin-left"))||0,r.top+=parseFloat(n(e[0]).css("border-top-width"))||0,r.left+=parseFloat(n(e[0]).css("border-left-width"))||0,{top:i.top-r.top,left:i.left-r.left}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent||a.body;t&&!d.test(t.nodeName)&&"static"==n(t).css("position");)t=t.offsetParent;return t})}},n.fn.detach=n.fn.remove,["width","height"].forEach(function(e){var i=e.replace(/./,function(t){return t[0].toUpperCase()});n.fn[e]=function(r){var o,s=this[0];return r===t?$(s)?s["inner"+i]:_(s)?s.documentElement["scroll"+i]:(o=this.offset())&&o[e]:this.each(function(t){s=n(this),s.css(e,J(this,r,t,s[e]()))})}}),v.forEach(function(t,e){var i=e%2;n.fn[t]=function(){var t,o,r=n.map(arguments,function(e){return t=L(e),"object"==t||"array"==t||null==e?e:S.fragment(e)}),s=this.length>1;return r.length<1?this:this.each(function(t,a){o=i?a:a.parentNode,a=0==e?a.nextSibling:1==e?a.firstChild:2==e?a:null,r.forEach(function(t){if(s)t=t.cloneNode(!0);else if(!o)return n(t).remove();G(o.insertBefore(t,a),function(t){null==t.nodeName||"SCRIPT"!==t.nodeName.toUpperCase()||t.type&&"text/javascript"!==t.type||t.src||window.eval.call(window,t.innerHTML)})})})},n.fn[i?t+"To":"insert"+(e?"Before":"After")]=function(e){return n(e)[t](this),this}}),S.Z.prototype=n.fn,S.uniq=N,S.deserializeValue=Y,n.zepto=S,n}();window.Zepto=Zepto,void 0===window.$&&(window.$=Zepto),function(t){function l(t){return t._zid||(t._zid=e++)}function h(t,e,n,i){if(e=p(e),e.ns)var r=d(e.ns);return(s[l(t)]||[]).filter(function(t){return!(!t||e.e&&t.e!=e.e||e.ns&&!r.test(t.ns)||n&&l(t.fn)!==l(n)||i&&t.sel!=i)})}function p(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort().join(" ")}}function d(t){return new RegExp("(?:^| )"+t.replace(" "," .* ?")+"(?: |$)")}function m(t,e){return t.del&&!u&&t.e in f||!!e}function g(t){return c[t]||u&&f[t]||t}function v(e,i,r,o,a,u,f){var h=l(e),d=s[h]||(s[h]=[]);i.split(/\s/).forEach(function(i){if("ready"==i)return t(document).ready(r);var s=p(i);s.fn=r,s.sel=a,s.e in c&&(r=function(e){var n=e.relatedTarget;return!n||n!==this&&!t.contains(this,n)?s.fn.apply(this,arguments):void 0}),s.del=u;var l=u||r;s.proxy=function(t){if(t=j(t),!t.isImmediatePropagationStopped()){t.data=o;var i=l.apply(e,t._args==n?[t]:[t].concat(t._args));return i===!1&&(t.preventDefault(),t.stopPropagation()),i}},s.i=d.length,d.push(s),"addEventListener"in e&&e.addEventListener(g(s.e),s.proxy,m(s,f))})}function y(t,e,n,i,r){var o=l(t);(e||"").split(/\s/).forEach(function(e){h(t,e,n,i).forEach(function(e){delete s[o][e.i],"removeEventListener"in t&&t.removeEventListener(g(e.e),e.proxy,m(e,r))})})}function j(e,i){return(i||!e.isDefaultPrevented)&&(i||(i=e),t.each(E,function(t,n){var r=i[t];e[t]=function(){return this[n]=x,r&&r.apply(i,arguments)},e[n]=b}),(i.defaultPrevented!==n?i.defaultPrevented:"returnValue"in i?i.returnValue===!1:i.getPreventDefault&&i.getPreventDefault())&&(e.isDefaultPrevented=x)),e}function T(t){var e,i={originalEvent:t};for(e in t)w.test(e)||t[e]===n||(i[e]=t[e]);return j(i,t)}var n,e=1,i=Array.prototype.slice,r=t.isFunction,o=function(t){return"string"==typeof t},s={},a={},u="onfocusin"in window,f={focus:"focusin",blur:"focusout"},c={mouseenter:"mouseover",mouseleave:"mouseout"};a.click=a.mousedown=a.mouseup=a.mousemove="MouseEvents",t.event={add:v,remove:y},t.proxy=function(e,n){if(r(e)){var i=function(){return e.apply(n,arguments)};return i._zid=l(e),i}if(o(n))return t.proxy(e[n],e);throw new TypeError("expected function")},t.fn.bind=function(t,e,n){return this.on(t,e,n)},t.fn.unbind=function(t,e){return this.off(t,e)},t.fn.one=function(t,e,n,i){return this.on(t,e,n,i,1)};var x=function(){return!0},b=function(){return!1},w=/^([A-Z]|returnValue$|layer[XY]$)/,E={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};t.fn.delegate=function(t,e,n){return this.on(e,t,n)},t.fn.undelegate=function(t,e,n){return this.off(e,t,n)},t.fn.live=function(e,n){return t(document.body).delegate(this.selector,e,n),this},t.fn.die=function(e,n){return t(document.body).undelegate(this.selector,e,n),this},t.fn.on=function(e,s,a,u,f){var c,l,h=this;return e&&!o(e)?(t.each(e,function(t,e){h.on(t,s,a,e,f)}),h):(o(s)||r(u)||u===!1||(u=a,a=s,s=n),(r(a)||a===!1)&&(u=a,a=n),u===!1&&(u=b),h.each(function(n,r){f&&(c=function(t){return y(r,t.type,u),u.apply(this,arguments)}),s&&(l=function(e){var n,o=t(e.target).closest(s,r).get(0);return o&&o!==r?(n=t.extend(T(e),{currentTarget:o,liveFired:r}),(c||u).apply(o,[n].concat(i.call(arguments,1)))):void 0}),v(r,e,u,a,s,l||c)}))},t.fn.off=function(e,i,s){var a=this;return e&&!o(e)?(t.each(e,function(t,e){a.off(t,i,e)}),a):(o(i)||r(s)||s===!1||(s=i,i=n),s===!1&&(s=b),a.each(function(){y(this,e,s,i)}))},t.fn.trigger=function(e,n){return e=o(e)||t.isPlainObject(e)?t.Event(e):j(e),e._args=n,this.each(function(){"dispatchEvent"in this?this.dispatchEvent(e):t(this).triggerHandler(e,n)})},t.fn.triggerHandler=function(e,n){var i,r;return this.each(function(s,a){i=T(o(e)?t.Event(e):e),i._args=n,i.target=a,t.each(h(a,e.type||e),function(t,e){return r=e.proxy(i),i.isImmediatePropagationStopped()?!1:void 0})}),r},"focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach(function(e){t.fn[e]=function(t){return t?this.bind(e,t):this.trigger(e)}}),["focus","blur"].forEach(function(e){t.fn[e]=function(t){return t?this.bind(e,t):this.each(function(){try{this[e]()}catch(t){}}),this}}),t.Event=function(t,e){o(t)||(e=t,t=e.type);var n=document.createEvent(a[t]||"Events"),i=!0;if(e)for(var r in e)"bubbles"==r?i=!!e[r]:n[r]=e[r];return n.initEvent(t,i,!0),j(n)}}(Zepto),function(t){function l(e,n,i){var r=t.Event(n);return t(e).trigger(r,i),!r.isDefaultPrevented()}function h(t,e,i,r){return t.global?l(e||n,i,r):void 0}function p(e){e.global&&0===t.active++&&h(e,null,"ajaxStart")}function d(e){e.global&&!--t.active&&h(e,null,"ajaxStop")}function m(t,e){var n=e.context;return e.beforeSend.call(n,t,e)===!1||h(e,n,"ajaxBeforeSend",[t,e])===!1?!1:void h(e,n,"ajaxSend",[t,e])}function g(t,e,n,i){var r=n.context,o="success";n.success.call(r,t,o,e),i&&i.resolveWith(r,[t,o,e]),h(n,r,"ajaxSuccess",[e,n,t]),y(o,e,n)}function v(t,e,n,i,r){var o=i.context;i.error.call(o,n,e,t),r&&r.rejectWith(o,[n,e,t]),h(i,o,"ajaxError",[n,i,t||e]),y(e,n,i)}function y(t,e,n){var i=n.context;n.complete.call(i,e,t),h(n,i,"ajaxComplete",[e,n]),d(n)}function x(){}function b(t){return t&&(t=t.split(";",2)[0]),t&&(t==f?"html":t==u?"json":s.test(t)?"script":a.test(t)&&"xml")||"text"}function w(t,e){return""==e?t:(t+"&"+e).replace(/[&?]{1,2}/,"?")}function E(e){e.processData&&e.data&&"string"!=t.type(e.data)&&(e.data=t.param(e.data,e.traditional)),!e.data||e.type&&"GET"!=e.type.toUpperCase()||(e.url=w(e.url,e.data),e.data=void 0)}function j(e,n,i,r){return t.isFunction(n)&&(r=i,i=n,n=void 0),t.isFunction(i)||(r=i,i=void 0),{url:e,data:n,success:i,dataType:r}}function S(e,n,i,r){var o,s=t.isArray(n),a=t.isPlainObject(n);t.each(n,function(n,u){o=t.type(u),r&&(n=i?r:r+"["+(a||"object"==o||"array"==o?n:"")+"]"),!r&&s?e.add(u.name,u.value):"array"==o||!i&&"object"==o?S(e,u,i,n):e.add(n,u)})}var i,r,e=0,n=window.document,o=/)<[^<]*)*<\/script>/gi,s=/^(?:text|application)\/javascript/i,a=/^(?:text|application)\/xml/i,u="application/json",f="text/html",c=/^\s*$/;t.active=0,t.ajaxJSONP=function(i,r){if(!("type"in i))return t.ajax(i);var f,h,o=i.jsonpCallback,s=(t.isFunction(o)?o():o)||"jsonp"+ ++e,a=n.createElement("script"),u=window[s],c=function(e){t(a).triggerHandler("error",e||"abort")},l={abort:c};return r&&r.promise(l),t(a).on("load error",function(e,n){clearTimeout(h),t(a).off().remove(),"error"!=e.type&&f?g(f[0],l,i,r):v(null,n||"error",l,i,r),window[s]=u,f&&t.isFunction(u)&&u(f[0]),u=f=void 0}),m(l,i)===!1?(c("abort"),l):(window[s]=function(){f=arguments},a.src=i.url.replace(/\?(.+)=\?/,"?$1="+s),n.head.appendChild(a),i.timeout>0&&(h=setTimeout(function(){c("timeout")},i.timeout)),l)},t.ajaxSettings={type:"GET",beforeSend:x,success:x,error:x,complete:x,context:null,global:!0,xhr:function(){return new window.XMLHttpRequest},accepts:{script:"text/javascript, application/javascript, application/x-javascript",json:u,xml:"application/xml, text/xml",html:f,text:"text/plain"},crossDomain:!1,timeout:0,processData:!0,cache:!0},t.ajax=function(e){var n=t.extend({},e||{}),o=t.Deferred&&t.Deferred();for(i in t.ajaxSettings)void 0===n[i]&&(n[i]=t.ajaxSettings[i]);p(n),n.crossDomain||(n.crossDomain=/^([\w-]+:)?\/\/([^\/]+)/.test(n.url)&&RegExp.$2!=window.location.host),n.url||(n.url=window.location.toString()),E(n),n.cache===!1&&(n.url=w(n.url,"_="+Date.now()));var s=n.dataType,a=/\?.+=\?/.test(n.url);if("jsonp"==s||a)return a||(n.url=w(n.url,n.jsonp?n.jsonp+"=?":n.jsonp===!1?"":"callback=?")),t.ajaxJSONP(n,o);var j,u=n.accepts[s],f={},l=function(t,e){f[t.toLowerCase()]=[t,e]},h=/^([\w-]+:)\/\//.test(n.url)?RegExp.$1:window.location.protocol,d=n.xhr(),y=d.setRequestHeader;if(o&&o.promise(d),n.crossDomain||l("X-Requested-With","XMLHttpRequest"),l("Accept",u||"*/*"),(u=n.mimeType||u)&&(u.indexOf(",")>-1&&(u=u.split(",",2)[0]),d.overrideMimeType&&d.overrideMimeType(u)),(n.contentType||n.contentType!==!1&&n.data&&"GET"!=n.type.toUpperCase())&&l("Content-Type",n.contentType||"application/x-www-form-urlencoded"),n.headers)for(r in n.headers)l(r,n.headers[r]);if(d.setRequestHeader=l,d.onreadystatechange=function(){if(4==d.readyState){d.onreadystatechange=x,clearTimeout(j);var e,i=!1;if(d.status>=200&&d.status<300||304==d.status||0==d.status&&"file:"==h){s=s||b(n.mimeType||d.getResponseHeader("content-type")),e=d.responseText;try{"script"==s?(1,eval)(e):"xml"==s?e=d.responseXML:"json"==s&&(e=c.test(e)?null:t.parseJSON(e))}catch(r){i=r}i?v(i,"parsererror",d,n,o):g(e,d,n,o)}else v(d.statusText||null,d.status?"error":"abort",d,n,o)}},m(d,n)===!1)return d.abort(),v(null,"abort",d,n,o),d;if(n.xhrFields)for(r in n.xhrFields)d[r]=n.xhrFields[r];var T="async"in n?n.async:!0;d.open(n.type,n.url,T,n.username,n.password);for(r in f)y.apply(d,f[r]);return n.timeout>0&&(j=setTimeout(function(){d.onreadystatechange=x,d.abort(),v(null,"timeout",d,n,o)},n.timeout)),d.send(n.data?n.data:null),d},t.get=function(){return t.ajax(j.apply(null,arguments))},t.post=function(){var e=j.apply(null,arguments);return e.type="POST",t.ajax(e)},t.getJSON=function(){var e=j.apply(null,arguments);return e.dataType="json",t.ajax(e)},t.fn.load=function(e,n,i){if(!this.length)return this;var a,r=this,s=e.split(/\s/),u=j(e,n,i),f=u.success;return s.length>1&&(u.url=s[0],a=s[1]),u.success=function(e){r.html(a?t("
    ").html(e.replace(o,"")).find(a):e),f&&f.apply(r,arguments)},t.ajax(u),this};var T=encodeURIComponent;t.param=function(t,e){var n=[];return n.add=function(t,e){this.push(T(t)+"="+T(e))},S(n,t,e),n.join("&").replace(/%20/g,"+")}}(Zepto),function(t){t.fn.serializeArray=function(){var n,e=[];return t([].slice.call(this.get(0).elements)).each(function(){n=t(this);var i=n.attr("type");"fieldset"!=this.nodeName.toLowerCase()&&!this.disabled&&"submit"!=i&&"reset"!=i&&"button"!=i&&("radio"!=i&&"checkbox"!=i||this.checked)&&e.push({name:n.attr("name"),value:n.val()})}),e},t.fn.serialize=function(){var t=[];return this.serializeArray().forEach(function(e){t.push(encodeURIComponent(e.name)+"="+encodeURIComponent(e.value))}),t.join("&")},t.fn.submit=function(e){if(e)this.bind("submit",e);else if(this.length){var n=t.Event("submit");this.eq(0).trigger(n),n.isDefaultPrevented()||this.get(0).submit()}return this}}(Zepto),function(t){"__proto__"in{}||t.extend(t.zepto,{Z:function(e,n){return e=e||[],t.extend(e,t.fn),e.selector=n||"",e.__Z=!0,e},isZ:function(e){return"array"===t.type(e)&&"__Z"in e}});try{getComputedStyle(void 0)}catch(e){var n=getComputedStyle;window.getComputedStyle=function(t){try{return n(t)}catch(e){return null}}}}(Zepto); diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/env_details.html.php b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/env_details.html.php new file mode 100644 index 0000000..30fcb9c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/env_details.html.php @@ -0,0 +1,42 @@ + +
    +

    Environment & details:

    + +
    + $data): ?> +
    + + + + + + + + + + $value): ?> + + + + + +
    KeyValue
    escape($k) ?>dump($value) ?>
    + + + empty + +
    + +
    + + +
    + + $h): ?> +
    + . escape(get_class($h)) ?> +
    + +
    + +
    diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/frame_code.html.php b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/frame_code.html.php new file mode 100644 index 0000000..b7717d7 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/frame_code.html.php @@ -0,0 +1,63 @@ + +
    + $frame): ?> + getLine(); ?> +
    + + getFileLines($line - 20, 40); + + // getFileLines can return null if there is no source code + if ($range): + $range = array_map(function ($line) { return empty($line) ? ' ' : $line;}, $range); + $start = key($range) + 1; + $code = join("\n", $range); + ?> +
    escape($code) ?>
    + + + + + dumpArgs($frame); ?> + +
    + Arguments +
    +
    + +
    + + + getComments(); + ?> +
    + $comment): ?> + +
    + escape($context) ?> + escapeButPreserveUris($comment) ?> +
    + +
    + +
    + +
    diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/frame_list.html.php b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/frame_list.html.php new file mode 100644 index 0000000..a4bc338 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/frame_list.html.php @@ -0,0 +1,17 @@ + + $frame): ?> +
    + +
    + breakOnDelimiter('\\', $tpl->escape($frame->getClass() ?: '')) ?> + breakOnDelimiter('\\', $tpl->escape($frame->getFunction() ?: '')) ?> +
    + +
    + getFile() ? $tpl->breakOnDelimiter('/', $tpl->shorten($tpl->escape($frame->getFile()))) : '<#unknown>' ?>getLine() ?> +
    +
    +"> + render($frame_list) ?> +
    \ No newline at end of file diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/frames_description.html.php b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/frames_description.html.php new file mode 100644 index 0000000..5d32f71 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/frames_description.html.php @@ -0,0 +1,14 @@ + diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/header.html.php b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/header.html.php new file mode 100644 index 0000000..2f2d90f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/header.html.php @@ -0,0 +1,96 @@ +
    +
    + $nameSection): ?> + + escape($nameSection) ?> + + escape($nameSection) . ' \\' ?> + + + + (escape($code) ?>) + +
    + +
    + + escape($message) ?> + + + +
    + Previous exceptions +
    + +
      + $previousMessage): ?> +
    • + escape($previousMessage) ?> + () +
    • + +
    + + + + + + No message + + + + + escape($plain_exception) ?> + + +
    +
    diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/header_outer.html.php b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/header_outer.html.php new file mode 100644 index 0000000..f682cbb --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/header_outer.html.php @@ -0,0 +1,3 @@ +
    + render($header) ?> +
    diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/layout.html.php b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/layout.html.php new file mode 100644 index 0000000..6b676cc --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/layout.html.php @@ -0,0 +1,33 @@ + + + + + + + + <?php echo $tpl->escape($page_title) ?> + + + + + +
    +
    + + render($panel_left_outer) ?> + + render($panel_details_outer) ?> + +
    +
    + + + + + + + diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/panel_details.html.php b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/panel_details.html.php new file mode 100644 index 0000000..a85e451 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/panel_details.html.php @@ -0,0 +1,2 @@ +render($frame_code) ?> +render($env_details) ?> \ No newline at end of file diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/panel_details_outer.html.php b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/panel_details_outer.html.php new file mode 100644 index 0000000..8162d8c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/panel_details_outer.html.php @@ -0,0 +1,3 @@ +
    + render($panel_details) ?> +
    \ No newline at end of file diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/panel_left.html.php b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/panel_left.html.php new file mode 100644 index 0000000..7e652e4 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/panel_left.html.php @@ -0,0 +1,4 @@ +render($header_outer); +$tpl->render($frames_description); +$tpl->render($frames_container); diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/panel_left_outer.html.php b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/panel_left_outer.html.php new file mode 100644 index 0000000..77b575c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Resources/views/panel_left_outer.html.php @@ -0,0 +1,3 @@ +
    + render($panel_left) ?> +
    \ No newline at end of file diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Run.php b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Run.php new file mode 100644 index 0000000..1484736 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Run.php @@ -0,0 +1,452 @@ + + */ + +namespace Whoops; + +use InvalidArgumentException; +use Whoops\Exception\ErrorException; +use Whoops\Exception\Inspector; +use Whoops\Handler\CallbackHandler; +use Whoops\Handler\Handler; +use Whoops\Handler\HandlerInterface; +use Whoops\Util\Misc; +use Whoops\Util\SystemFacade; + +final class Run implements RunInterface +{ + private $isRegistered; + private $allowQuit = true; + private $sendOutput = true; + + /** + * @var integer|false + */ + private $sendHttpCode = 500; + + /** + * @var HandlerInterface[] + */ + private $handlerStack = []; + + private $silencedPatterns = []; + + private $system; + + public function __construct(SystemFacade $system = null) + { + $this->system = $system ?: new SystemFacade; + } + + /** + * Explicitly request your handler runs as the last of all currently registered handlers + */ + public function appendHandler($handler) + { + array_unshift($this->handlerStack, $this->resolveHandler($handler)); + return $this; + } + + /** + * Explicitly request your handler runs as the first of all currently registered handlers + */ + public function prependHandler($handler) + { + return $this->pushHandler($handler); + } + + /** + * Register your handler as the last of all currently registered handlers. + * Prefer using appendHandler and prependHandler for clarity. + * + * @throws InvalidArgumentException If argument is not callable or instance of HandlerInterface + * @param Callable|HandlerInterface $handler + * @return Run + */ + public function pushHandler($handler) + { + $this->handlerStack[] = $this->resolveHandler($handler); + return $this; + } + + /** + * See removeFirstHandler and removeLastHandler + * @return null|HandlerInterface + */ + public function popHandler() + { + return array_pop($this->handlerStack); + } + + + /** + * Removes the first handler + */ + public function removeFirstHandler() + { + array_pop($this->handlerStack); + } + + /** + * Removes the last handler + */ + public function removeLastHandler() + { + array_shift($this->handlerStack); + } + + /** + * Returns an array with all handlers, in the + * order they were added to the stack. + * @return array + */ + public function getHandlers() + { + return $this->handlerStack; + } + + /** + * Clears all handlers in the handlerStack, including + * the default PrettyPage handler. + * @return Run + */ + public function clearHandlers() + { + $this->handlerStack = []; + return $this; + } + + /** + * @param \Throwable $exception + * @return Inspector + */ + private function getInspector($exception) + { + return new Inspector($exception); + } + + /** + * Registers this instance as an error handler. + * @return Run + */ + public function register() + { + if (!$this->isRegistered) { + // Workaround PHP bug 42098 + // https://bugs.php.net/bug.php?id=42098 + class_exists("\\Whoops\\Exception\\ErrorException"); + class_exists("\\Whoops\\Exception\\FrameCollection"); + class_exists("\\Whoops\\Exception\\Frame"); + class_exists("\\Whoops\\Exception\\Inspector"); + + $this->system->setErrorHandler([$this, self::ERROR_HANDLER]); + $this->system->setExceptionHandler([$this, self::EXCEPTION_HANDLER]); + $this->system->registerShutdownFunction([$this, self::SHUTDOWN_HANDLER]); + + $this->isRegistered = true; + } + + return $this; + } + + /** + * Unregisters all handlers registered by this Whoops\Run instance + * @return Run + */ + public function unregister() + { + if ($this->isRegistered) { + $this->system->restoreExceptionHandler(); + $this->system->restoreErrorHandler(); + + $this->isRegistered = false; + } + + return $this; + } + + /** + * Should Whoops allow Handlers to force the script to quit? + * @param bool|int $exit + * @return bool + */ + public function allowQuit($exit = null) + { + if (func_num_args() == 0) { + return $this->allowQuit; + } + + return $this->allowQuit = (bool) $exit; + } + + /** + * Silence particular errors in particular files + * @param array|string $patterns List or a single regex pattern to match + * @param int $levels Defaults to E_STRICT | E_DEPRECATED + * @return \Whoops\Run + */ + public function silenceErrorsInPaths($patterns, $levels = 10240) + { + $this->silencedPatterns = array_merge( + $this->silencedPatterns, + array_map( + function ($pattern) use ($levels) { + return [ + "pattern" => $pattern, + "levels" => $levels, + ]; + }, + (array) $patterns + ) + ); + return $this; + } + + + /** + * Returns an array with silent errors in path configuration + * + * @return array + */ + public function getSilenceErrorsInPaths() + { + return $this->silencedPatterns; + } + + /* + * Should Whoops send HTTP error code to the browser if possible? + * Whoops will by default send HTTP code 500, but you may wish to + * use 502, 503, or another 5xx family code. + * + * @param bool|int $code + * @return int|false + */ + public function sendHttpCode($code = null) + { + if (func_num_args() == 0) { + return $this->sendHttpCode; + } + + if (!$code) { + return $this->sendHttpCode = false; + } + + if ($code === true) { + $code = 500; + } + + if ($code < 400 || 600 <= $code) { + throw new InvalidArgumentException( + "Invalid status code '$code', must be 4xx or 5xx" + ); + } + + return $this->sendHttpCode = $code; + } + + /** + * Should Whoops push output directly to the client? + * If this is false, output will be returned by handleException + * @param bool|int $send + * @return bool + */ + public function writeToOutput($send = null) + { + if (func_num_args() == 0) { + return $this->sendOutput; + } + + return $this->sendOutput = (bool) $send; + } + + /** + * Handles an exception, ultimately generating a Whoops error + * page. + * + * @param \Throwable $exception + * @return string Output generated by handlers + */ + public function handleException($exception) + { + // Walk the registered handlers in the reverse order + // they were registered, and pass off the exception + $inspector = $this->getInspector($exception); + + // Capture output produced while handling the exception, + // we might want to send it straight away to the client, + // or return it silently. + $this->system->startOutputBuffering(); + + // Just in case there are no handlers: + $handlerResponse = null; + $handlerContentType = null; + + try { + foreach (array_reverse($this->handlerStack) as $handler) { + $handler->setRun($this); + $handler->setInspector($inspector); + $handler->setException($exception); + + // The HandlerInterface does not require an Exception passed to handle() + // and neither of our bundled handlers use it. + // However, 3rd party handlers may have already relied on this parameter, + // and removing it would be possibly breaking for users. + $handlerResponse = $handler->handle($exception); + + // Collect the content type for possible sending in the headers. + $handlerContentType = method_exists($handler, 'contentType') ? $handler->contentType() : null; + + if (in_array($handlerResponse, [Handler::LAST_HANDLER, Handler::QUIT])) { + // The Handler has handled the exception in some way, and + // wishes to quit execution (Handler::QUIT), or skip any + // other handlers (Handler::LAST_HANDLER). If $this->allowQuit + // is false, Handler::QUIT behaves like Handler::LAST_HANDLER + break; + } + } + + $willQuit = $handlerResponse == Handler::QUIT && $this->allowQuit(); + } finally { + $output = $this->system->cleanOutputBuffer(); + } + + // If we're allowed to, send output generated by handlers directly + // to the output, otherwise, and if the script doesn't quit, return + // it so that it may be used by the caller + if ($this->writeToOutput()) { + // @todo Might be able to clean this up a bit better + if ($willQuit) { + // Cleanup all other output buffers before sending our output: + while ($this->system->getOutputBufferLevel() > 0) { + $this->system->endOutputBuffering(); + } + + // Send any headers if needed: + if (Misc::canSendHeaders() && $handlerContentType) { + header("Content-Type: {$handlerContentType}"); + } + } + + $this->writeToOutputNow($output); + } + + if ($willQuit) { + // HHVM fix for https://github.com/facebook/hhvm/issues/4055 + $this->system->flushOutputBuffer(); + + $this->system->stopExecution(1); + } + + return $output; + } + + /** + * Converts generic PHP errors to \ErrorException + * instances, before passing them off to be handled. + * + * This method MUST be compatible with set_error_handler. + * + * @param int $level + * @param string $message + * @param string $file + * @param int $line + * + * @return bool + * @throws ErrorException + */ + public function handleError($level, $message, $file = null, $line = null) + { + if ($level & $this->system->getErrorReportingLevel()) { + foreach ($this->silencedPatterns as $entry) { + $pathMatches = (bool) preg_match($entry["pattern"], $file); + $levelMatches = $level & $entry["levels"]; + if ($pathMatches && $levelMatches) { + // Ignore the error, abort handling + // See https://github.com/filp/whoops/issues/418 + return true; + } + } + + // XXX we pass $level for the "code" param only for BC reasons. + // see https://github.com/filp/whoops/issues/267 + $exception = new ErrorException($message, /*code*/ $level, /*severity*/ $level, $file, $line); + if ($this->canThrowExceptions) { + throw $exception; + } else { + $this->handleException($exception); + } + // Do not propagate errors which were already handled by Whoops. + return true; + } + + // Propagate error to the next handler, allows error_get_last() to + // work on silenced errors. + return false; + } + + /** + * Special case to deal with Fatal errors and the like. + */ + public function handleShutdown() + { + // If we reached this step, we are in shutdown handler. + // An exception thrown in a shutdown handler will not be propagated + // to the exception handler. Pass that information along. + $this->canThrowExceptions = false; + + $error = $this->system->getLastError(); + if ($error && Misc::isLevelFatal($error['type'])) { + // If there was a fatal error, + // it was not handled in handleError yet. + $this->allowQuit = false; + $this->handleError( + $error['type'], + $error['message'], + $error['file'], + $error['line'] + ); + } + } + + /** + * In certain scenarios, like in shutdown handler, we can not throw exceptions + * @var bool + */ + private $canThrowExceptions = true; + + private function resolveHandler($handler) + { + if (is_callable($handler)) { + $handler = new CallbackHandler($handler); + } + + if (!$handler instanceof HandlerInterface) { + throw new InvalidArgumentException( + "Handler must be a callable, or instance of " + . "Whoops\\Handler\\HandlerInterface" + ); + } + + return $handler; + } + + /** + * Echo something to the browser + * @param string $output + * @return $this + */ + private function writeToOutputNow($output) + { + if ($this->sendHttpCode() && \Whoops\Util\Misc::canSendHeaders()) { + $this->system->setHttpResponseCode( + $this->sendHttpCode() + ); + } + + echo $output; + + return $this; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/RunInterface.php b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/RunInterface.php new file mode 100644 index 0000000..67ba90d --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/RunInterface.php @@ -0,0 +1,131 @@ + + */ + +namespace Whoops; + +use InvalidArgumentException; +use Whoops\Exception\ErrorException; +use Whoops\Handler\HandlerInterface; + +interface RunInterface +{ + const EXCEPTION_HANDLER = "handleException"; + const ERROR_HANDLER = "handleError"; + const SHUTDOWN_HANDLER = "handleShutdown"; + + /** + * Pushes a handler to the end of the stack + * + * @throws InvalidArgumentException If argument is not callable or instance of HandlerInterface + * @param Callable|HandlerInterface $handler + * @return Run + */ + public function pushHandler($handler); + + /** + * Removes the last handler in the stack and returns it. + * Returns null if there"s nothing else to pop. + * + * @return null|HandlerInterface + */ + public function popHandler(); + + /** + * Returns an array with all handlers, in the + * order they were added to the stack. + * + * @return array + */ + public function getHandlers(); + + /** + * Clears all handlers in the handlerStack, including + * the default PrettyPage handler. + * + * @return Run + */ + public function clearHandlers(); + + /** + * Registers this instance as an error handler. + * + * @return Run + */ + public function register(); + + /** + * Unregisters all handlers registered by this Whoops\Run instance + * + * @return Run + */ + public function unregister(); + + /** + * Should Whoops allow Handlers to force the script to quit? + * + * @param bool|int $exit + * @return bool + */ + public function allowQuit($exit = null); + + /** + * Silence particular errors in particular files + * + * @param array|string $patterns List or a single regex pattern to match + * @param int $levels Defaults to E_STRICT | E_DEPRECATED + * @return \Whoops\Run + */ + public function silenceErrorsInPaths($patterns, $levels = 10240); + + /** + * Should Whoops send HTTP error code to the browser if possible? + * Whoops will by default send HTTP code 500, but you may wish to + * use 502, 503, or another 5xx family code. + * + * @param bool|int $code + * @return int|false + */ + public function sendHttpCode($code = null); + + /** + * Should Whoops push output directly to the client? + * If this is false, output will be returned by handleException + * + * @param bool|int $send + * @return bool + */ + public function writeToOutput($send = null); + + /** + * Handles an exception, ultimately generating a Whoops error + * page. + * + * @param \Throwable $exception + * @return string Output generated by handlers + */ + public function handleException($exception); + + /** + * Converts generic PHP errors to \ErrorException + * instances, before passing them off to be handled. + * + * This method MUST be compatible with set_error_handler. + * + * @param int $level + * @param string $message + * @param string $file + * @param int $line + * + * @return bool + * @throws ErrorException + */ + public function handleError($level, $message, $file = null, $line = null); + + /** + * Special case to deal with Fatal errors and the like. + */ + public function handleShutdown(); +} diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Util/HtmlDumperOutput.php b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Util/HtmlDumperOutput.php new file mode 100644 index 0000000..8c828fd --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Util/HtmlDumperOutput.php @@ -0,0 +1,36 @@ + + */ + +namespace Whoops\Util; + +/** + * Used as output callable for Symfony\Component\VarDumper\Dumper\HtmlDumper::dump() + * + * @see TemplateHelper::dump() + */ +class HtmlDumperOutput +{ + private $output; + + public function __invoke($line, $depth) + { + // A negative depth means "end of dump" + if ($depth >= 0) { + // Adds a two spaces indentation to the line + $this->output .= str_repeat(' ', $depth) . $line . "\n"; + } + } + + public function getOutput() + { + return $this->output; + } + + public function clear() + { + $this->output = null; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Util/Misc.php b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Util/Misc.php new file mode 100644 index 0000000..001a687 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Util/Misc.php @@ -0,0 +1,77 @@ + + */ + +namespace Whoops\Util; + +class Misc +{ + /** + * Can we at this point in time send HTTP headers? + * + * Currently this checks if we are even serving an HTTP request, + * as opposed to running from a command line. + * + * If we are serving an HTTP request, we check if it's not too late. + * + * @return bool + */ + public static function canSendHeaders() + { + return isset($_SERVER["REQUEST_URI"]) && !headers_sent(); + } + + public static function isAjaxRequest() + { + return ( + !empty($_SERVER['HTTP_X_REQUESTED_WITH']) + && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'); + } + + /** + * Check, if possible, that this execution was triggered by a command line. + * @return bool + */ + public static function isCommandLine() + { + return PHP_SAPI == 'cli'; + } + + /** + * Translate ErrorException code into the represented constant. + * + * @param int $error_code + * @return string + */ + public static function translateErrorCode($error_code) + { + $constants = get_defined_constants(true); + if (array_key_exists('Core', $constants)) { + foreach ($constants['Core'] as $constant => $value) { + if (substr($constant, 0, 2) == 'E_' && $value == $error_code) { + return $constant; + } + } + } + return "E_UNKNOWN"; + } + + /** + * Determine if an error level is fatal (halts execution) + * + * @param int $level + * @return bool + */ + public static function isLevelFatal($level) + { + $errors = E_ERROR; + $errors |= E_PARSE; + $errors |= E_CORE_ERROR; + $errors |= E_CORE_WARNING; + $errors |= E_COMPILE_ERROR; + $errors |= E_COMPILE_WARNING; + return ($level & $errors) > 0; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Util/SystemFacade.php b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Util/SystemFacade.php new file mode 100644 index 0000000..fb1bc28 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Util/SystemFacade.php @@ -0,0 +1,137 @@ + + */ + +namespace Whoops\Util; + +class SystemFacade +{ + /** + * Turns on output buffering. + * + * @return bool + */ + public function startOutputBuffering() + { + return ob_start(); + } + + /** + * @param callable $handler + * @param int $types + * + * @return callable|null + */ + public function setErrorHandler(callable $handler, $types = 'use-php-defaults') + { + // Since PHP 5.4 the constant E_ALL contains all errors (even E_STRICT) + if ($types === 'use-php-defaults') { + $types = E_ALL; + } + return set_error_handler($handler, $types); + } + + /** + * @param callable $handler + * + * @return callable|null + */ + public function setExceptionHandler(callable $handler) + { + return set_exception_handler($handler); + } + + /** + * @return void + */ + public function restoreExceptionHandler() + { + restore_exception_handler(); + } + + /** + * @return void + */ + public function restoreErrorHandler() + { + restore_error_handler(); + } + + /** + * @param callable $function + * + * @return void + */ + public function registerShutdownFunction(callable $function) + { + register_shutdown_function($function); + } + + /** + * @return string|false + */ + public function cleanOutputBuffer() + { + return ob_get_clean(); + } + + /** + * @return int + */ + public function getOutputBufferLevel() + { + return ob_get_level(); + } + + /** + * @return bool + */ + public function endOutputBuffering() + { + return ob_end_clean(); + } + + /** + * @return void + */ + public function flushOutputBuffer() + { + flush(); + } + + /** + * @return int + */ + public function getErrorReportingLevel() + { + return error_reporting(); + } + + /** + * @return array|null + */ + public function getLastError() + { + return error_get_last(); + } + + /** + * @param int $httpCode + * + * @return int + */ + public function setHttpResponseCode($httpCode) + { + return http_response_code($httpCode); + } + + /** + * @param int $exitStatus + */ + public function stopExecution($exitStatus) + { + exit($exitStatus); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Util/TemplateHelper.php b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Util/TemplateHelper.php new file mode 100644 index 0000000..9c7cec2 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/filp/whoops/src/Whoops/Util/TemplateHelper.php @@ -0,0 +1,352 @@ + + */ + +namespace Whoops\Util; + +use Symfony\Component\VarDumper\Caster\Caster; +use Symfony\Component\VarDumper\Cloner\AbstractCloner; +use Symfony\Component\VarDumper\Cloner\VarCloner; +use Symfony\Component\VarDumper\Dumper\HtmlDumper; +use Whoops\Exception\Frame; + +/** + * Exposes useful tools for working with/in templates + */ +class TemplateHelper +{ + /** + * An array of variables to be passed to all templates + * @var array + */ + private $variables = []; + + /** + * @var HtmlDumper + */ + private $htmlDumper; + + /** + * @var HtmlDumperOutput + */ + private $htmlDumperOutput; + + /** + * @var AbstractCloner + */ + private $cloner; + + /** + * @var string + */ + private $applicationRootPath; + + public function __construct() + { + // root path for ordinary composer projects + $this->applicationRootPath = dirname(dirname(dirname(dirname(dirname(dirname(__DIR__)))))); + } + + /** + * Escapes a string for output in an HTML document + * + * @param string $raw + * @return string + */ + public function escape($raw) + { + $flags = ENT_QUOTES; + + // HHVM has all constants defined, but only ENT_IGNORE + // works at the moment + if (defined("ENT_SUBSTITUTE") && !defined("HHVM_VERSION")) { + $flags |= ENT_SUBSTITUTE; + } else { + // This is for 5.3. + // The documentation warns of a potential security issue, + // but it seems it does not apply in our case, because + // we do not blacklist anything anywhere. + $flags |= ENT_IGNORE; + } + + $raw = str_replace(chr(9), ' ', $raw); + + return htmlspecialchars($raw, $flags, "UTF-8"); + } + + /** + * Escapes a string for output in an HTML document, but preserves + * URIs within it, and converts them to clickable anchor elements. + * + * @param string $raw + * @return string + */ + public function escapeButPreserveUris($raw) + { + $escaped = $this->escape($raw); + return preg_replace( + "@([A-z]+?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)@", + "$1", + $escaped + ); + } + + /** + * Makes sure that the given string breaks on the delimiter. + * + * @param string $delimiter + * @param string $s + * @return string + */ + public function breakOnDelimiter($delimiter, $s) + { + $parts = explode($delimiter, $s); + foreach ($parts as &$part) { + $part = '' . $part . ''; + } + + return implode($delimiter, $parts); + } + + /** + * Replace the part of the path that all files have in common. + * + * @param string $path + * @return string + */ + public function shorten($path) + { + if ($this->applicationRootPath != "/") { + $path = str_replace($this->applicationRootPath, '…', $path); + } + + return $path; + } + + private function getDumper() + { + if (!$this->htmlDumper && class_exists('Symfony\Component\VarDumper\Cloner\VarCloner')) { + $this->htmlDumperOutput = new HtmlDumperOutput(); + // re-use the same var-dumper instance, so it won't re-render the global styles/scripts on each dump. + $this->htmlDumper = new HtmlDumper($this->htmlDumperOutput); + + $styles = [ + 'default' => 'color:#FFFFFF; line-height:normal; font:12px "Inconsolata", "Fira Mono", "Source Code Pro", Monaco, Consolas, "Lucida Console", monospace !important; word-wrap: break-word; white-space: pre-wrap; position:relative; z-index:99999; word-break: normal', + 'num' => 'color:#BCD42A', + 'const' => 'color: #4bb1b1;', + 'str' => 'color:#BCD42A', + 'note' => 'color:#ef7c61', + 'ref' => 'color:#A0A0A0', + 'public' => 'color:#FFFFFF', + 'protected' => 'color:#FFFFFF', + 'private' => 'color:#FFFFFF', + 'meta' => 'color:#FFFFFF', + 'key' => 'color:#BCD42A', + 'index' => 'color:#ef7c61', + ]; + $this->htmlDumper->setStyles($styles); + } + + return $this->htmlDumper; + } + + /** + * Format the given value into a human readable string. + * + * @param mixed $value + * @return string + */ + public function dump($value) + { + $dumper = $this->getDumper(); + + if ($dumper) { + // re-use the same DumpOutput instance, so it won't re-render the global styles/scripts on each dump. + // exclude verbose information (e.g. exception stack traces) + if (class_exists('Symfony\Component\VarDumper\Caster\Caster')) { + $cloneVar = $this->getCloner()->cloneVar($value, Caster::EXCLUDE_VERBOSE); + // Symfony VarDumper 2.6 Caster class dont exist. + } else { + $cloneVar = $this->getCloner()->cloneVar($value); + } + + $dumper->dump( + $cloneVar, + $this->htmlDumperOutput + ); + + $output = $this->htmlDumperOutput->getOutput(); + $this->htmlDumperOutput->clear(); + + return $output; + } + + return htmlspecialchars(print_r($value, true)); + } + + /** + * Format the args of the given Frame as a human readable html string + * + * @param Frame $frame + * @return string the rendered html + */ + public function dumpArgs(Frame $frame) + { + // we support frame args only when the optional dumper is available + if (!$this->getDumper()) { + return ''; + } + + $html = ''; + $numFrames = count($frame->getArgs()); + + if ($numFrames > 0) { + $html = '
      '; + foreach ($frame->getArgs() as $j => $frameArg) { + $html .= '
    1. '. $this->dump($frameArg) .'
    2. '; + } + $html .= '
    '; + } + + return $html; + } + + /** + * Convert a string to a slug version of itself + * + * @param string $original + * @return string + */ + public function slug($original) + { + $slug = str_replace(" ", "-", $original); + $slug = preg_replace('/[^\w\d\-\_]/i', '', $slug); + return strtolower($slug); + } + + /** + * Given a template path, render it within its own scope. This + * method also accepts an array of additional variables to be + * passed to the template. + * + * @param string $template + * @param array $additionalVariables + */ + public function render($template, array $additionalVariables = null) + { + $variables = $this->getVariables(); + + // Pass the helper to the template: + $variables["tpl"] = $this; + + if ($additionalVariables !== null) { + $variables = array_replace($variables, $additionalVariables); + } + + call_user_func(function () { + extract(func_get_arg(1)); + require func_get_arg(0); + }, $template, $variables); + } + + /** + * Sets the variables to be passed to all templates rendered + * by this template helper. + * + * @param array $variables + */ + public function setVariables(array $variables) + { + $this->variables = $variables; + } + + /** + * Sets a single template variable, by its name: + * + * @param string $variableName + * @param mixed $variableValue + */ + public function setVariable($variableName, $variableValue) + { + $this->variables[$variableName] = $variableValue; + } + + /** + * Gets a single template variable, by its name, or + * $defaultValue if the variable does not exist + * + * @param string $variableName + * @param mixed $defaultValue + * @return mixed + */ + public function getVariable($variableName, $defaultValue = null) + { + return isset($this->variables[$variableName]) ? + $this->variables[$variableName] : $defaultValue; + } + + /** + * Unsets a single template variable, by its name + * + * @param string $variableName + */ + public function delVariable($variableName) + { + unset($this->variables[$variableName]); + } + + /** + * Returns all variables for this helper + * + * @return array + */ + public function getVariables() + { + return $this->variables; + } + + /** + * Set the cloner used for dumping variables. + * + * @param AbstractCloner $cloner + */ + public function setCloner($cloner) + { + $this->cloner = $cloner; + } + + /** + * Get the cloner used for dumping variables. + * + * @return AbstractCloner + */ + public function getCloner() + { + if (!$this->cloner) { + $this->cloner = new VarCloner(); + } + return $this->cloner; + } + + /** + * Set the application root path. + * + * @param string $applicationRootPath + */ + public function setApplicationRootPath($applicationRootPath) + { + $this->applicationRootPath = $applicationRootPath; + } + + /** + * Return the application root path. + * + * @return string + */ + public function getApplicationRootPath() + { + return $this->applicationRootPath; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/LICENSE.md b/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/LICENSE.md new file mode 100644 index 0000000..1cde13d --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/LICENSE.md @@ -0,0 +1,18 @@ +# MIT License + +Copyright (c) 2010-2015 Jeremy Lindblom + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and +associated documentation files (the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, +sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial +portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT +NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT +OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.** diff --git a/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/composer.json b/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/composer.json new file mode 100644 index 0000000..2ffab22 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/composer.json @@ -0,0 +1,39 @@ +{ + "name": "jeremeamia/superclosure", + "type": "library", + "description": "Serialize Closure objects, including their context and binding", + "keywords": ["closure", "serialize", "serializable", "function", "parser", "tokenizer", "lambda"], + "homepage": "https://github.com/jeremeamia/super_closure", + "license": "MIT", + "authors": [ + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia", + "role": "Developer" + } + ], + "require": { + "php": ">=5.4", + "nikic/php-parser": "^1.2|^2.0|^3.0|^4.0", + "symfony/polyfill-php56": "^1.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0|^5.0" + }, + "autoload": { + "psr-4": { + "SuperClosure\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "SuperClosure\\Test\\": "tests/" + } + }, + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Analyzer/AstAnalyzer.php b/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Analyzer/AstAnalyzer.php new file mode 100644 index 0000000..c15f83c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Analyzer/AstAnalyzer.php @@ -0,0 +1,148 @@ +locateClosure($data); + + // Make a second pass through the AST, but only through the closure's + // nodes, to resolve any magic constants to literal values. + $traverser = new NodeTraverser; + $traverser->addVisitor(new MagicConstantVisitor($data['location'])); + $traverser->addVisitor($thisDetector = new ThisDetectorVisitor); + $data['ast'] = $traverser->traverse([$data['ast']])[0]; + $data['hasThis'] = $thisDetector->detected; + + // Bounce the updated AST down to a string representation of the code. + $data['code'] = (new NodePrinter)->prettyPrint([$data['ast']]); + } + + /** + * Parses the closure's code and produces an abstract syntax tree (AST). + * + * @param array $data + * + * @throws ClosureAnalysisException if there is an issue finding the closure + */ + private function locateClosure(array &$data) + { + try { + $locator = new ClosureLocatorVisitor($data['reflection']); + $fileAst = $this->getFileAst($data['reflection']); + + $fileTraverser = new NodeTraverser; + $fileTraverser->addVisitor(new NameResolver); + $fileTraverser->addVisitor($locator); + $fileTraverser->traverse($fileAst); + } catch (ParserError $e) { + // @codeCoverageIgnoreStart + throw new ClosureAnalysisException( + 'There was an error analyzing the closure code.', 0, $e + ); + // @codeCoverageIgnoreEnd + } + + $data['ast'] = $locator->closureNode; + if (!$data['ast']) { + // @codeCoverageIgnoreStart + throw new ClosureAnalysisException( + 'The closure was not found within the abstract syntax tree.' + ); + // @codeCoverageIgnoreEnd + } + + $data['location'] = $locator->location; + } + + /** + * Returns the variables that in the "use" clause of the closure definition. + * These are referred to as the "used variables", "static variables", or + * "closed upon variables", "context" of the closure. + * + * @param array $data + */ + protected function determineContext(array &$data) + { + // Get the variable names defined in the AST + $refs = 0; + $vars = array_map(function ($node) use (&$refs) { + if ($node->byRef) { + $refs++; + } + if ($node->var instanceof VariableNode) { + // For PHP-Parser >=4.0 + return $node->var->name; + } else { + // For PHP-Parser <4.0 + return $node->var; + } + }, $data['ast']->uses); + $data['hasRefs'] = ($refs > 0); + + // Get the variable names and values using reflection + $values = $data['reflection']->getStaticVariables(); + + // Combine the names and values to create the canonical context. + foreach ($vars as $name) { + if (isset($values[$name])) { + $data['context'][$name] = $values[$name]; + } + } + } + + /** + * @param \ReflectionFunction $reflection + * + * @throws ClosureAnalysisException + * + * @return \PhpParser\Node[] + */ + private function getFileAst(\ReflectionFunction $reflection) + { + $fileName = $reflection->getFileName(); + if (!file_exists($fileName)) { + throw new ClosureAnalysisException( + "The file containing the closure, \"{$fileName}\" did not exist." + ); + } + + + return $this->getParser()->parse(file_get_contents($fileName)); + } + + /** + * @return CodeParser + */ + private function getParser() + { + if (class_exists('PhpParser\ParserFactory')) { + return (new ParserFactory)->create(ParserFactory::PREFER_PHP7); + } + + return new CodeParser(new EmulativeLexer); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Analyzer/ClosureAnalyzer.php b/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Analyzer/ClosureAnalyzer.php new file mode 100644 index 0000000..6ba92a3 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Analyzer/ClosureAnalyzer.php @@ -0,0 +1,68 @@ + new \ReflectionFunction($closure), + 'code' => null, + 'hasThis' => false, + 'context' => [], + 'hasRefs' => false, + 'binding' => null, + 'scope' => null, + 'isStatic' => $this->isClosureStatic($closure), + ]; + + $this->determineCode($data); + $this->determineContext($data); + $this->determineBinding($data); + + return $data; + } + + abstract protected function determineCode(array &$data); + + /** + * Returns the variables that are in the "use" clause of the closure. + * + * These variables are referred to as the "used variables", "static + * variables", "closed upon variables", or "context" of the closure. + * + * @param array $data + */ + abstract protected function determineContext(array &$data); + + private function determineBinding(array &$data) + { + $data['binding'] = $data['reflection']->getClosureThis(); + if ($scope = $data['reflection']->getClosureScopeClass()) { + $data['scope'] = $scope->getName(); + } + } + + private function isClosureStatic(\Closure $closure) + { + $closure = @$closure->bindTo(new \stdClass); + + if ($closure === null) { + return true; + } + + $rebound = new \ReflectionFunction($closure); + + return $rebound->getClosureThis() === null; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Analyzer/Token.php b/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Analyzer/Token.php new file mode 100644 index 0000000..cab8efa --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Analyzer/Token.php @@ -0,0 +1,70 @@ +code = $code; + $this->value = $value; + $this->line = $line; + $this->name = $value ? token_name($value) : null; + } + + /** + * Determines if the token's value/code is equal to the specified value. + * + * @param mixed $value The value to check. + * + * @return bool True if the token is equal to the value. + */ + public function is($value) + { + return ($this->code === $value || $this->value === $value); + } + + public function __toString() + { + return $this->code; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Analyzer/TokenAnalyzer.php b/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Analyzer/TokenAnalyzer.php new file mode 100644 index 0000000..2928ba0 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Analyzer/TokenAnalyzer.php @@ -0,0 +1,118 @@ +determineTokens($data); + $data['code'] = implode('', $data['tokens']); + $data['hasThis'] = (strpos($data['code'], '$this') !== false); + } + + private function determineTokens(array &$data) + { + $potential = $this->determinePotentialTokens($data['reflection']); + $braceLevel = $index = $step = $insideUse = 0; + $data['tokens'] = $data['context'] = []; + + foreach ($potential as $token) { + $token = new Token($token); + switch ($step) { + // Handle tokens before the function declaration. + case 0: + if ($token->is(T_FUNCTION)) { + $data['tokens'][] = $token; + $step++; + } + break; + // Handle tokens inside the function signature. + case 1: + $data['tokens'][] = $token; + if ($insideUse) { + if ($token->is(T_VARIABLE)) { + $varName = trim($token, '$ '); + $data['context'][$varName] = null; + } elseif ($token->is('&')) { + $data['hasRefs'] = true; + } + } elseif ($token->is(T_USE)) { + $insideUse++; + } + if ($token->is('{')) { + $step++; + $braceLevel++; + } + break; + // Handle tokens inside the function body. + case 2: + $data['tokens'][] = $token; + if ($token->is('{')) { + $braceLevel++; + } elseif ($token->is('}')) { + $braceLevel--; + if ($braceLevel === 0) { + $step++; + } + } + break; + // Handle tokens after the function declaration. + case 3: + if ($token->is(T_FUNCTION)) { + throw new ClosureAnalysisException('Multiple closures ' + . 'were declared on the same line of code. Could not ' + . 'determine which closure was the intended target.' + ); + } + break; + } + } + } + + private function determinePotentialTokens(\ReflectionFunction $reflection) + { + // Load the file containing the code for the function. + $fileName = $reflection->getFileName(); + if (!is_readable($fileName)) { + throw new ClosureAnalysisException( + "Cannot read the file containing the closure: \"{$fileName}\"." + ); + } + + $code = ''; + $file = new \SplFileObject($fileName); + $file->seek($reflection->getStartLine() - 1); + while ($file->key() < $reflection->getEndLine()) { + $code .= $file->current(); + $file->next(); + } + + $code = trim($code); + if (strpos($code, 'getStaticVariables(); + + // Construct the context by combining the variable names and values. + foreach ($data['context'] as $name => &$value) { + if (isset($values[$name])) { + $value = $values[$name]; + } + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Analyzer/Visitor/ClosureLocatorVisitor.php b/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Analyzer/Visitor/ClosureLocatorVisitor.php new file mode 100644 index 0000000..69f92ed --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Analyzer/Visitor/ClosureLocatorVisitor.php @@ -0,0 +1,120 @@ +reflection = $reflection; + $this->location = [ + 'class' => null, + 'directory' => dirname($this->reflection->getFileName()), + 'file' => $this->reflection->getFileName(), + 'function' => $this->reflection->getName(), + 'line' => $this->reflection->getStartLine(), + 'method' => null, + 'namespace' => null, + 'trait' => null, + ]; + } + + public function enterNode(AstNode $node) + { + // Determine information about the closure's location + if (!$this->closureNode) { + if ($node instanceof NamespaceNode) { + $namespace = $node->name !== null + ? $node->name->toString() + : null; + $this->location['namespace'] = $namespace; + } + if ($node instanceof TraitNode) { + $this->location['trait'] = (string) $node->name; + $this->location['class'] = null; + } elseif ($node instanceof ClassNode) { + $this->location['class'] = (string) $node->name; + $this->location['trait'] = null; + } + } + + // Locate the node of the closure + if ($node instanceof ClosureNode) { + if ($node->getAttribute('startLine') == $this->location['line']) { + if ($this->closureNode) { + $line = $this->location['file'] . ':' . $node->getAttribute('startLine'); + throw new ClosureAnalysisException("Two closures were " + . "declared on the same line ({$line}) of code. Cannot " + . "determine which closure was the intended target."); + } else { + $this->closureNode = $node; + } + } + } + } + + public function leaveNode(AstNode $node) + { + // Determine information about the closure's location + if (!$this->closureNode) { + if ($node instanceof NamespaceNode) { + $this->location['namespace'] = null; + } + if ($node instanceof TraitNode) { + $this->location['trait'] = null; + } elseif ($node instanceof ClassNode) { + $this->location['class'] = null; + } + } + } + + public function afterTraverse(array $nodes) + { + if ($this->location['class']) { + $this->location['class'] = $this->location['namespace'] . '\\' . $this->location['class']; + $this->location['method'] = "{$this->location['class']}::{$this->location['function']}"; + } elseif ($this->location['trait']) { + $this->location['trait'] = $this->location['namespace'] . '\\' . $this->location['trait']; + $this->location['method'] = "{$this->location['trait']}::{$this->location['function']}"; + + // If the closure was declared in a trait, then we will do a best + // effort guess on the name of the class that used the trait. It's + // actually impossible at this point to know for sure what it is. + if ($closureScope = $this->reflection->getClosureScopeClass()) { + $this->location['class'] = $closureScope ? $closureScope->getName() : null; + } elseif ($closureThis = $this->reflection->getClosureThis()) { + $this->location['class'] = get_class($closureThis); + } + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Analyzer/Visitor/MagicConstantVisitor.php b/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Analyzer/Visitor/MagicConstantVisitor.php new file mode 100644 index 0000000..219654f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Analyzer/Visitor/MagicConstantVisitor.php @@ -0,0 +1,50 @@ +location = $location; + } + + public function leaveNode(AstNode $node) + { + switch ($node->getType()) { + case 'Scalar_MagicConst_Class' : + return new StringNode($this->location['class'] ?: ''); + case 'Scalar_MagicConst_Dir' : + return new StringNode($this->location['directory'] ?: ''); + case 'Scalar_MagicConst_File' : + return new StringNode($this->location['file'] ?: ''); + case 'Scalar_MagicConst_Function' : + return new StringNode($this->location['function'] ?: ''); + case 'Scalar_MagicConst_Line' : + return new NumberNode($node->getAttribute('startLine') ?: 0); + case 'Scalar_MagicConst_Method' : + return new StringNode($this->location['method'] ?: ''); + case 'Scalar_MagicConst_Namespace' : + return new StringNode($this->location['namespace'] ?: ''); + case 'Scalar_MagicConst_Trait' : + return new StringNode($this->location['trait'] ?: ''); + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Analyzer/Visitor/ThisDetectorVisitor.php b/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Analyzer/Visitor/ThisDetectorVisitor.php new file mode 100644 index 0000000..e2997ff --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Analyzer/Visitor/ThisDetectorVisitor.php @@ -0,0 +1,27 @@ +name === 'this') { + $this->detected = true; + } + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Exception/ClosureAnalysisException.php b/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Exception/ClosureAnalysisException.php new file mode 100644 index 0000000..d1b0b5c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Exception/ClosureAnalysisException.php @@ -0,0 +1,9 @@ +closure = $closure; + $this->serializer = $serializer ?: new Serializer; + } + + /** + * Return the original closure object. + * + * @return Closure + */ + public function getClosure() + { + return $this->closure; + } + + /** + * Delegates the closure invocation to the actual closure object. + * + * Important Notes: + * + * - `ReflectionFunction::invokeArgs()` should not be used here, because it + * does not work with closure bindings. + * - Args passed-by-reference lose their references when proxied through + * `__invoke()`. This is an unfortunate, but understandable, limitation + * of PHP that will probably never change. + * + * @return mixed + */ + public function __invoke() + { + return call_user_func_array($this->closure, func_get_args()); + } + + /** + * Clones the SerializableClosure with a new bound object and class scope. + * + * The method is essentially a wrapped proxy to the Closure::bindTo method. + * + * @param mixed $newthis The object to which the closure should be bound, + * or NULL for the closure to be unbound. + * @param mixed $newscope The class scope to which the closure is to be + * associated, or 'static' to keep the current one. + * If an object is given, the type of the object will + * be used instead. This determines the visibility of + * protected and private methods of the bound object. + * + * @return SerializableClosure + * @link http://www.php.net/manual/en/closure.bindto.php + */ + public function bindTo($newthis, $newscope = 'static') + { + return new self( + $this->closure->bindTo($newthis, $newscope), + $this->serializer + ); + } + + /** + * Serializes the code, context, and binding of the closure. + * + * @return string|null + * @link http://php.net/manual/en/serializable.serialize.php + */ + public function serialize() + { + try { + $this->data = $this->data ?: $this->serializer->getData($this->closure, true); + return serialize($this->data); + } catch (\Exception $e) { + trigger_error( + 'Serialization of closure failed: ' . $e->getMessage(), + E_USER_NOTICE + ); + // Note: The serialize() method of Serializable must return a string + // or null and cannot throw exceptions. + return null; + } + } + + /** + * Unserializes the closure. + * + * Unserializes the closure's data and recreates the closure using a + * simulation of its original context. The used variables (context) are + * extracted into a fresh scope prior to redefining the closure. The + * closure is also rebound to its former object and scope. + * + * @param string $serialized + * + * @throws ClosureUnserializationException + * @link http://php.net/manual/en/serializable.unserialize.php + */ + public function unserialize($serialized) + { + // Unserialize the closure data and reconstruct the closure object. + $this->data = unserialize($serialized); + $this->closure = __reconstruct_closure($this->data); + + // Throw an exception if the closure could not be reconstructed. + if (!$this->closure instanceof Closure) { + throw new ClosureUnserializationException( + 'The closure is corrupted and cannot be unserialized.' + ); + } + + // Rebind the closure to its former binding and scope. + if ($this->data['binding'] || $this->data['isStatic']) { + $this->closure = $this->closure->bindTo( + $this->data['binding'], + $this->data['scope'] + ); + } + } + + /** + * Returns closure data for `var_dump()`. + * + * @return array + */ + public function __debugInfo() + { + return $this->data ?: $this->serializer->getData($this->closure, true); + } +} + +/** + * Reconstruct a closure. + * + * HERE BE DRAGONS! + * + * The infamous `eval()` is used in this method, along with the error + * suppression operator, and variable variables (i.e., double dollar signs) to + * perform the unserialization logic. I'm sorry, world! + * + * This is also done inside a plain function instead of a method so that the + * binding and scope of the closure are null. + * + * @param array $__data Unserialized closure data. + * + * @return Closure|null + * @internal + */ +function __reconstruct_closure(array $__data) +{ + // Simulate the original context the closure was created in. + foreach ($__data['context'] as $__var_name => &$__value) { + if ($__value instanceof SerializableClosure) { + // Unbox any SerializableClosures in the context. + $__value = $__value->getClosure(); + } elseif ($__value === Serializer::RECURSION) { + // Track recursive references (there should only be one). + $__recursive_reference = $__var_name; + } + + // Import the variable into this scope. + ${$__var_name} = $__value; + } + + // Evaluate the code to recreate the closure. + try { + if (isset($__recursive_reference)) { + // Special handling for recursive closures. + @eval("\${$__recursive_reference} = {$__data['code']};"); + $__closure = ${$__recursive_reference}; + } else { + @eval("\$__closure = {$__data['code']};"); + } + } catch (\ParseError $e) { + // Discard the parse error. + } + + return isset($__closure) ? $__closure : null; +} diff --git a/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Serializer.php b/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Serializer.php new file mode 100644 index 0000000..732ee81 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/Serializer.php @@ -0,0 +1,221 @@ + true, + 'context' => true, + 'binding' => true, + 'scope' => true, + 'isStatic' => true, + ]; + + /** + * The closure analyzer instance. + * + * @var ClosureAnalyzer + */ + private $analyzer; + + /** + * The HMAC key to sign serialized closures. + * + * @var string + */ + private $signingKey; + + /** + * Create a new serializer instance. + * + * @param ClosureAnalyzer|null $analyzer Closure analyzer instance. + * @param string|null $signingKey HMAC key to sign closure data. + */ + public function __construct( + ClosureAnalyzer $analyzer = null, + $signingKey = null + ) { + $this->analyzer = $analyzer ?: new DefaultAnalyzer; + $this->signingKey = $signingKey; + } + + /** + * @inheritDoc + */ + public function serialize(\Closure $closure) + { + $serialized = serialize(new SerializableClosure($closure, $this)); + + if ($serialized === null) { + throw new ClosureSerializationException( + 'The closure could not be serialized.' + ); + } + + if ($this->signingKey) { + $signature = $this->calculateSignature($serialized); + $serialized = '%' . base64_encode($signature) . $serialized; + } + + return $serialized; + } + + /** + * @inheritDoc + */ + public function unserialize($serialized) + { + // Strip off the signature from the front of the string. + $signature = null; + if ($serialized[0] === '%') { + $signature = base64_decode(substr($serialized, 1, 44)); + $serialized = substr($serialized, 45); + } + + // If a key was provided, then verify the signature. + if ($this->signingKey) { + $this->verifySignature($signature, $serialized); + } + + set_error_handler(function () {}); + $unserialized = unserialize($serialized); + restore_error_handler(); + if ($unserialized === false) { + throw new ClosureUnserializationException( + 'The closure could not be unserialized.' + ); + } elseif (!$unserialized instanceof SerializableClosure) { + throw new ClosureUnserializationException( + 'The closure did not unserialize to a SuperClosure.' + ); + } + + return $unserialized->getClosure(); + } + + /** + * @inheritDoc + */ + public function getData(\Closure $closure, $forSerialization = false) + { + // Use the closure analyzer to get data about the closure. + $data = $this->analyzer->analyze($closure); + + // If the closure data is getting retrieved solely for the purpose of + // serializing the closure, then make some modifications to the data. + if ($forSerialization) { + // If there is no reference to the binding, don't serialize it. + if (!$data['hasThis']) { + $data['binding'] = null; + } + + // Remove data about the closure that does not get serialized. + $data = array_intersect_key($data, self::$dataToKeep); + + // Wrap any other closures within the context. + foreach ($data['context'] as &$value) { + if ($value instanceof \Closure) { + $value = ($value === $closure) + ? self::RECURSION + : new SerializableClosure($value, $this); + } + } + } + + return $data; + } + + /** + * Recursively traverses and wraps all Closure objects within the value. + * + * NOTE: THIS MAY NOT WORK IN ALL USE CASES, SO USE AT YOUR OWN RISK. + * + * @param mixed $data Any variable that contains closures. + * @param SerializerInterface $serializer The serializer to use. + */ + public static function wrapClosures(&$data, SerializerInterface $serializer) + { + if ($data instanceof \Closure) { + // Handle and wrap closure objects. + $reflection = new \ReflectionFunction($data); + if ($binding = $reflection->getClosureThis()) { + self::wrapClosures($binding, $serializer); + $scope = $reflection->getClosureScopeClass(); + $scope = $scope ? $scope->getName() : 'static'; + $data = $data->bindTo($binding, $scope); + } + $data = new SerializableClosure($data, $serializer); + } elseif (is_array($data) || $data instanceof \stdClass || $data instanceof \Traversable) { + // Handle members of traversable values. + foreach ($data as &$value) { + self::wrapClosures($value, $serializer); + } + } elseif (is_object($data) && !$data instanceof \Serializable) { + // Handle objects that are not already explicitly serializable. + $reflection = new \ReflectionObject($data); + if (!$reflection->hasMethod('__sleep')) { + foreach ($reflection->getProperties() as $property) { + if ($property->isPrivate() || $property->isProtected()) { + $property->setAccessible(true); + } + $value = $property->getValue($data); + self::wrapClosures($value, $serializer); + $property->setValue($data, $value); + } + } + } + } + + /** + * Calculates a signature for a closure's serialized data. + * + * @param string $data Serialized closure data. + * + * @return string Signature of the closure's data. + */ + private function calculateSignature($data) + { + return hash_hmac('sha256', $data, $this->signingKey, true); + } + + /** + * Verifies the signature for a closure's serialized data. + * + * @param string $signature The provided signature of the data. + * @param string $data The data for which to verify the signature. + * + * @throws ClosureUnserializationException if the signature is invalid. + */ + private function verifySignature($signature, $data) + { + // Verify that the provided signature matches the calculated signature. + if (!hash_equals($signature, $this->calculateSignature($data))) { + throw new ClosureUnserializationException('The signature of the' + . ' closure\'s data is invalid, which means the serialized ' + . 'closure has been modified and is unsafe to unserialize.' + ); + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/SerializerInterface.php b/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/SerializerInterface.php new file mode 100644 index 0000000..2c1a300 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/jeremeamia/superclosure/src/SerializerInterface.php @@ -0,0 +1,45 @@ +. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of Michel Hunziker nor the names of his + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/soc/2020/daily_report/archive/app/vendor/micheh/psr7-cache/README.md b/soc/2020/daily_report/archive/app/vendor/micheh/psr7-cache/README.md new file mode 100644 index 0000000..8de8bb5 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/micheh/psr7-cache/README.md @@ -0,0 +1,142 @@ +# Cache helpers for PSR-7 HTTP Messages + +[![Build Status](https://secure.travis-ci.org/micheh/psr7-cache.svg?branch=master)](https://secure.travis-ci.org/micheh/psr7-cache) +[![Code Coverage](https://scrutinizer-ci.com/g/micheh/psr7-cache/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/micheh/psr7-cache/?branch=master) +[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/micheh/psr7-cache/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/micheh/psr7-cache/?branch=master) + +This library provides an easy way to either add cache relevant headers to a PSR-7 HTTP message implementation, or to extract cache and conditional request information from a PSR-7 message (e.g. if a response is cacheable). +It also provides a `Cache-Control` value object to provide an object oriented interface for the manipulation of the `Cache-Control` header. + + +## Installation + +Install this library using [Composer](https://getcomposer.org/): + +```console +$ composer require micheh/psr7-cache +``` + +## Quickstart + +To enable caching of HTTP responses, create an instance of `CacheUtil`, call the method `withCache` and provide your PSR-7 response. + +```php +/** @var \Psr\Http\Message\ResponseInterface $response */ + +$util = new \Micheh\Cache\CacheUtil(); +$response = $util->withCache($response); +``` + +This will add the header `Cache-Control: private, max-age=600` to your response. +With this header the response will only be cached by the client who sent the request and will be cached for 600 seconds (10 min). +During this time the client should use the response from the cache and should not make a new request to the application. + +### Cache Validators +The application should also add Cache Validators to the response: An `ETag` header (and `Last-Modified` header if you know when the resource was last modified). +This way the client will also include the `ETag` and `Last-Modified` information in the request and the application can check if the client still has the current state. + +```php +/** @var \Psr\Http\Message\ResponseInterface $response */ + +$util = new \Micheh\Cache\CacheUtil(); +$response = $util->withCache($response); +$response = $util->withETag($response, 'my-etag'); +$response = $util->withLastModified($response, new \DateTime()); +``` + +### Revalidate a response +To determine if the client still has a current copy of the page and the response is not modified, you can use the `isNotModified` method. +Simply add the cache headers to the response and then call the method with both the request and the response. +The method will automatically compare the `If-None-Match` header of the request with the `ETag` header of the response (and/or the `If-Modified-Since` header of the request with the `Last-Modified` header of the response if available). +If the response is not modified, return the empty response with the cache headers and a status code `304` (Not Modified). +This will instruct the client to use the cached copy from the previous request, saving you CPU/memory usage and bandwidth. +Therefore it is important to keep the code before the `isNotModified` call as lightweight as possible to increase performance. +Don't create the complete response before this method. + +```php +/** @var \Psr\Http\Message\RequestInterface $request */ +/** @var \Psr\Http\Message\ResponseInterface $response */ + +$util = new \Micheh\Cache\CacheUtil(); +$response = $util->withCache($response); +$response = $util->withETag($response, 'my-etag'); +$response = $util->withLastModified($response, new \DateTime()); + +if ($util->isNotModified($request, $response)) { + return $response->withStatus(304); +} + +// create the body of the response +``` + + +### Conditional request with unsafe method +While the procedure described above is usually optional and for safe methods (GET and HEAD), it is also possible to enforce that the client has the current resource state. +This is useful for unsafe methods (e.g. POST, PUT, PATCH or DELETE), because it can prevent lost updates (e.g. if another client updates the resource before your request). +It is a good idea to initially check if the request includes the appropriate headers (`If-Match` for an `ETag` and/or `If-Unmodified-Since` for a `Last-Modified` date) with the `hasStateValidator` method. +If the request does not include this information, abort the execution and return status code `428` (Precondition Required) or status code `403` (Forbidden) if you only want to use the original status codes. + +```php +/** @var \Psr\Http\Message\RequestInterface $request */ + +$util = new \Micheh\Cache\CacheUtil(); +if (!$util->hasStateValidator($request)) { + return $response->withStatus(428); +} +``` + +If the state validators are included in the request, you can check if the request has the current resource state and not an outdated version with the method `hasCurrentState`. +If the request has an outdated resource state (another `ETag` or an older `Last-Modified` date), abort the execution and return status code `412` (Precondition Failed). +Otherwise you can continue to process the request and update/delete the resource. +Once the resource is updated, it is a good idea to include the updated `ETag` (and `Last-Modified` date if available) in the response. + +```php +/** @var \Psr\Http\Message\RequestInterface $request */ +/** @var \Psr\Http\Message\ResponseInterface $response */ + +$util = new \Micheh\Cache\CacheUtil(); +if (!$util->hasStateValidator($request)) { + return $response->withStatus(428); +} + +$eTag = 'my-etag' +$lastModified = new \DateTime(); +if (!$util->hasCurrentState($request, $eTag, $lastModified)) { + return $response->withStatus(412); +} + +// process the request +``` + + +## Available helper methods + +Method | Description (see the phpDoc for more information) +--------------------- | ------------------------------------------------------------------------ +`withCache` | Convenience method to add a `Cache-Control` header, which allows caching +`withCachePrevention` | Convenience method to prevent caching +`withExpires` | Adds an `Expires` header from a timestamp, string or DateTime +`withRelativeExpires` | Adds an `Expires` header with a specific lifetime +`withETag` | Adds an `ETag` header +`withLastModified` | Adds a `Last-Modified` header from a timestamp, string or DateTime +`withCacheControl` | Adds a `Cache-Control` header from a string or value object +`hasStateValidator` | Checks if it is possible to determine the resource state +`hasCurrentState` | Checks if a request has the current resource state +`isNotModified` | Checks if a response is not modified +`isCacheable` | Checks if a response is cacheable by a public cache +`isFresh` | Checks if a response is fresh (age smaller than lifetime) +`getLifetime` | Returns the lifetime of a response (how long it should be cached) +`getAge` | Returns the age of a response (how long it was in the cache) + + +## References + +- [RFC7234: Caching](https://tools.ietf.org/html/rfc7234) +- [RFC7232: Conditional Requests](https://tools.ietf.org/html/rfc7232) (Cache Validation) +- [RFC5861: Cache-Control Extensions for Stale Content](https://tools.ietf.org/html/rfc5861) + + +## License + +The files in this archive are licensed under the BSD-3-Clause license. +You can find a copy of this license in [LICENSE.md](LICENSE.md). diff --git a/soc/2020/daily_report/archive/app/vendor/micheh/psr7-cache/composer.json b/soc/2020/daily_report/archive/app/vendor/micheh/psr7-cache/composer.json new file mode 100644 index 0000000..42ece35 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/micheh/psr7-cache/composer.json @@ -0,0 +1,37 @@ +{ + "name": "micheh/psr7-cache", + "description": "Cache and conditional request helpers for PSR-7 HTTP Messages", + "type": "library", + "license": "BSD-3-Clause", + "keywords": [ + "cache", + "http", + "psr", + "psr-7", + "http-message", + "request", + "response", + "conditional", + "if-match", + "if-none-match", + "if-modified-since", + "if-unmodified-since" + ], + "require": { + "php": ">=5.4", + "psr/http-message": "~1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0||~5.0" + }, + "autoload": { + "psr-4": { + "Micheh\\Cache\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "MichehTest\\Cache\\": "test/" + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/micheh/psr7-cache/src/CacheUtil.php b/soc/2020/daily_report/archive/app/vendor/micheh/psr7-cache/src/CacheUtil.php new file mode 100644 index 0000000..ae28797 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/micheh/psr7-cache/src/CacheUtil.php @@ -0,0 +1,501 @@ + + * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD-3-Clause License + */ + +namespace Micheh\Cache; + +use DateTime; +use DateTimeZone; +use Exception; +use InvalidArgumentException; +use Micheh\Cache\Header\CacheControl; +use Micheh\Cache\Header\ResponseCacheControl; +use Psr\Http\Message\MessageInterface; +use Psr\Http\Message\RequestInterface; +use Psr\Http\Message\ResponseInterface; + +/** + * Util class to add cache headers to PSR-7 HTTP messages and to parse PSR-7 cache headers. + */ +class CacheUtil +{ + /** + * Method to add a Cache-Control header to a PSR-7 response, which should enable caching. + * Set the `private` parameter to false to enable shared caches to cache the response (for + * example when the response is usable by everyone and does not contain individual information). + * With the `$maxAge` parameter you can specify how many seconds a response should be cached. + * + * By default this method specifies a `private` cache, which caches for 10 minutes. For more + * options use the `withCacheControl` method. + * + * @see withCacheControl + * + * @param ResponseInterface $response PSR-7 response to add the header to + * @param bool $public True for public, false for private + * @param int $maxAge How many seconds the response should be cached. Default: 600 (10 min) + * @return ResponseInterface + * @throws InvalidArgumentException If the type is invalid + */ + public function withCache(ResponseInterface $response, $public = false, $maxAge = 600) + { + $control = new ResponseCacheControl(); + $control = $public ? $control->withPublic() : $control->withPrivate(); + $control = $control->withMaxAge($maxAge); + + return $this->withCacheControl($response, $control); + } + + /** + * Method to add a Cache-Control header to a PSR-7 response, which should prevent caching. + * Adds `no-cache, no-store, must-revalidate`. Use the `withCacheControl` method for more + * options. + * + * @see withCacheControl + * + * @param ResponseInterface $response PSR-7 response to prevent caching + * @return ResponseInterface + */ + public function withCachePrevention(ResponseInterface $response) + { + $control = new ResponseCacheControl(); + $control = $control->withCachePrevention(); + + return $this->withCacheControl($response, $control); + } + + /** + * Method to add an Expires header to a PSR-7 response. Use this header if you have a specific + * time when the representation will expire, otherwise use the more fine-tuned `Cache-Control` + * header with the `max-age` directive. If you need to support the old HTTP/1.0 protocol and + * want to set a relative expiration, use the `withRelativeExpires` method. + * + * @see withCache + * @see withCacheControl + * @see withRelativeExpires + * @link https://tools.ietf.org/html/rfc7234#section-5.3 + * + * @param ResponseInterface $response PSR-7 response to add the header to + * @param int|string|DateTime $time UNIX timestamp, date string or DateTime object + * @return ResponseInterface + * @throws InvalidArgumentException If the time could not be parsed + */ + public function withExpires(ResponseInterface $response, $time) + { + return $response->withHeader('Expires', $this->getTimeFromValue($time)); + } + + /** + * Method to add a relative `Expires` header to a PSR-7 response. Use this header if want to + * support the old HTTP/1.0 protocol and have a relative expiration time. Otherwise use the + * `Cache-Control` header with the `max-age` directive. + * + * @see withCache + * @see withCacheControl + * @see withExpires + * @link https://tools.ietf.org/html/rfc7234#section-5.3 + * + * @param ResponseInterface $response PSR-7 response to add the header to + * @param int $seconds Number of seconds the response should be cached + * @return ResponseInterface + * @throws InvalidArgumentException If the seconds parameter is not an integer + */ + public function withRelativeExpires(ResponseInterface $response, $seconds) + { + if (!is_int($seconds)) { + throw new InvalidArgumentException( + 'Expected an integer with the number of seconds, received ' . gettype($seconds) . '.' + ); + } + + return $response->withHeader('Expires', $this->getTimeFromValue(time() + $seconds)); + } + + /** + * Method to add an ETag header to a PSR-7 response. If possible, always add an ETag to a + * response you want to cache. If the last modified time is easily accessible, use both the + * ETag and Last-Modified header. Use a weak ETag if you want to compare if a resource is only + * semantically the same. + * + * @see withLastModified + * @link https://tools.ietf.org/html/rfc7232#section-2.3 + * + * @param ResponseInterface $response PSR-7 response to add the header to + * @param string $eTag ETag to add + * @param bool $weak If the provided ETag is weak + * @return ResponseInterface + * @throws InvalidArgumentException if the ETag value is not valid + */ + public function withETag(ResponseInterface $response, $eTag, $weak = false) + { + $eTag = '"' . trim($eTag, '"') . '"'; + if ($weak) { + $eTag = 'W/' . $eTag; + } + + return $response->withHeader('ETag', $eTag); + } + + /** + * Method to add a Last-Modified header to a PSR-7 response. Add a Last-Modified header if you + * have an easy access to the last modified time, otherwise use only an ETag. + * + * The provided time can be an UNIX timestamp, a parseable string or a DateTime instance. + * + * @see withETag + * @see getTimeFromValue + * @link https://tools.ietf.org/html/rfc7232#section-2.2 + * + * @param ResponseInterface $response PSR-7 response to add the header to + * @param int|string|DateTime $time UNIX timestamp, date string or DateTime object + * @return ResponseInterface + * @throws InvalidArgumentException If the time could not be parsed + */ + public function withLastModified(ResponseInterface $response, $time) + { + return $response->withHeader('Last-Modified', $this->getTimeFromValue($time)); + } + + /** + * Method to add a Cache-Control header to the provided PSR-7 message. + * + * @link https://tools.ietf.org/html/rfc7234#section-5.2 + * + * @param MessageInterface $message PSR-7 message to add the Cache-Control header to + * @param CacheControl $cacheControl Cache-Control object to add to the message + * @return MessageInterface The PSR-7 message with the added Cache-Control header + * @throws InvalidArgumentException If the Cache-Control header is invalid + */ + public function withCacheControl(MessageInterface $message, CacheControl $cacheControl) + { + return $message->withHeader('Cache-Control', (string) $cacheControl); + } + + /** + * Checks if a request has included validators (`ETag` and/or `Last-Modified` Date) which allow + * to determine if the client has the current resource state. The method will check if the + * `If-Match` and/or `If-Unmodified-Since` header is present. + * + * This method can be used for unsafe conditional requests (neither GET nor HEAD). If the + * request did not include a state validator (method returns `false`), abort the execution and + * return a `428` http status code (or `403` if you only want to use the original status + * codes). If the requests includes state validators (method returns `true`), you can continue + * and check if the client has the current state with the `hasCurrentState` method. + * + * @see hasCurrentState + * @link https://tools.ietf.org/html/rfc7232#section-6 + * + * @param RequestInterface $request PSR-7 request to check + * @return bool True if the request includes state validators, false if it has no validators + */ + public function hasStateValidator(RequestInterface $request) + { + return $request->hasHeader('If-Match') || $request->hasHeader('If-Unmodified-Since'); + } + + /** + * Checks if the provided PSR-7 request has the current resource state. The method will check + * the `If-Match` and `If-Modified-Since` headers with the current ETag (and/or the Last-Modified + * date if provided). In addition, for a request which is not GET or HEAD, the method will check + * the `If-None-Match` header. + * + * Use this method to check conditional unsafe requests and to prevent lost updates. If the + * request does not have the current resource state (method returns `false`), abort and return + * status code `412`. In contrast, if the client has the current version of the resource (method + * returns `true`) you can safely continue the execution and update/delete the resource. + * + * @link https://tools.ietf.org/html/rfc7232#section-6 + * + * @param RequestInterface $request PSR-7 request to check + * @param string $eTag Current ETag of the resource + * @param null|int|string|DateTime $lastModified Current Last-Modified date (optional) + * @return bool True if the request has the current resource state, false if the state is outdated + * @throws InvalidArgumentException If the Last-Modified date could not be parsed + */ + public function hasCurrentState(RequestInterface $request, $eTag, $lastModified = null) + { + $ifMatch = $request->getHeaderLine('If-Match'); + if ($ifMatch) { + if (!$this->matchesETag($eTag, $ifMatch, false)) { + return false; + } + } else { + $ifUnmodified = $request->getHeaderLine('If-Unmodified-Since'); + if ($ifUnmodified && !$this->matchesModified($lastModified, $ifUnmodified)) { + return false; + } + } + + if (in_array($request->getMethod(), ['GET', 'HEAD'], true)) { + return true; + } + + $ifNoneMatch = $request->getHeaderLine('If-None-Match'); + if ($ifNoneMatch && $this->matchesETag($eTag, $ifNoneMatch, true)) { + return false; + } + + return true; + } + + /** + * Method to check if the response is not modified and the request still has a valid cache, by + * comparing the `ETag` headers. If no `ETag` is available and the method is GET or HEAD, the + * `Last-Modified` header is used for comparison. + * + * Returns `true` if the request is not modified and the cache is still valid. In this case the + * application should return an empty response with the status code `304`. If the returned + * value is `false`, the client either has no cached representation or has an outdated cache. + * + * @link https://tools.ietf.org/html/rfc7232#section-6 + * + * @param RequestInterface $request Request to check against + * @param ResponseInterface $response Response with ETag and/or Last-Modified header + * @return bool True if not modified, false if invalid cache + * @throws InvalidArgumentException If the current Last-Modified date could not be parsed + */ + public function isNotModified(RequestInterface $request, ResponseInterface $response) + { + $noneMatch = $request->getHeaderLine('If-None-Match'); + if ($noneMatch) { + return $this->matchesETag($response->getHeaderLine('ETag'), $noneMatch, true); + } + + if (!in_array($request->getMethod(), ['GET', 'HEAD'], true)) { + return false; + } + + $lastModified = $response->getHeaderLine('Last-Modified'); + $modifiedSince = $request->getHeaderLine('If-Modified-Since'); + + return $this->matchesModified($lastModified, $modifiedSince); + } + + /** + * Method to check if a response can be cached by a shared cache. The method will check if the + * response status is cacheable and if the Cache-Control header explicitly disallows caching. + * The method does NOT check if the response is fresh. If you want to store the response on the + * application side, check both `isCacheable` and `isFresh`. + * + * @see isFresh + * @link https://tools.ietf.org/html/rfc7234#section-3 + * + * @param ResponseInterface $response Response to check if it is cacheable + * @return bool True if the response is cacheable by a shared cache and false otherwise + */ + public function isCacheable(ResponseInterface $response) + { + if (!in_array($response->getStatusCode(), [200, 203, 204, /*206,*/ 300, 301, 404, 405, 410, 414, 501], true)) { + return false; + } + + if (!$response->hasHeader('Cache-Control')) { + return true; + } + + $cacheControl = $this->getCacheControl($response); + return !$cacheControl->hasNoStore() && !$cacheControl->isPrivate(); + } + + /** + * Method to check if a response is still fresh. This is useful if you want to know if can still + * serve a saved response or if you have to create a new response. The method returns true if the + * lifetime of the response is available and is greater than the age of the response. If the + * method returns false, the response is outdated and should be renewed. In case no lifetime + * information is available (no Cache-Control and Expires header), the method returns `null`. + * + * @see getLifetime + * @see getAge + * @link https://tools.ietf.org/html/rfc7234#section-4.2 + * + * @param ResponseInterface $response Response to check + * @return bool|null True if the response is still fresh and false otherwise. Null if unknown + */ + public function isFresh(ResponseInterface $response) + { + $lifetime = $this->getLifetime($response); + if ($lifetime !== null) { + return $lifetime > $this->getAge($response); + } + + return null; + } + + /** + * Returns the lifetime of the provided response (how long the response should be cached once it + * is created). The method will lookup the `s-maxage` Cache-Control directive first and fallback + * to the `max-age` directive. If both Cache-Control directives are not available, the `Expires` + * header is used to compute the lifetime. Returns the lifetime in seconds if available and + * `null` if the lifetime cannot be calculated. + * + * @param ResponseInterface $response Response to get the lifetime from + * @return int|null Lifetime in seconds or null if not available + */ + public function getLifetime(ResponseInterface $response) + { + if ($response->hasHeader('Cache-Control')) { + $lifetime = $this->getCacheControl($response)->getLifetime(); + + if ($lifetime !== null) { + return $lifetime; + } + } + + $expires = $response->getHeaderLine('Expires'); + if ($expires) { + $now = $response->getHeaderLine('Date'); + $now = $now ? strtotime($now) : time(); + return max(0, strtotime($expires) - $now); + } + + return null; + } + + /** + * Returns the age of the response (how long the response is already cached). Uses the `Age` + * header to determine the age. If the header is not available, the `Date` header is used + * instead. The method will return the age in seconds or `null` if the age cannot be calculated. + * + * @param ResponseInterface $response Response to get the age from + * @return int|null Age in seconds or null if not available + */ + public function getAge(ResponseInterface $response) + { + $age = $response->getHeaderLine('Age'); + if ($age !== '') { + return (int) $age; + } + + $date = $response->getHeaderLine('Date'); + if ($date) { + return max(0, time() - strtotime($date)); + } + + return null; + } + + /** + * Returns a formatted timestamp of the time parameter, to use in the HTTP headers. The time + * parameter can be an UNIX timestamp, a parseable string or a DateTime object. + * + * @link https://secure.php.net/manual/en/datetime.formats.php + * + * @param int|string|DateTime $time Timestamp, date string or DateTime object + * @return string Formatted timestamp + * @throws InvalidArgumentException If the time could not be parsed + */ + protected function getTimeFromValue($time) + { + $format = 'D, d M Y H:i:s \G\M\T'; + + if (is_int($time)) { + return gmdate($format, $time); + } + + if (is_string($time)) { + try { + $time = new DateTime($time); + } catch (Exception $exception) { + // if it is an invalid date string an exception is thrown below + } + } + + if ($time instanceof DateTime) { + $time = clone $time; + $time->setTimezone(new DateTimeZone('UTC')); + return $time->format($format); + } + + throw new InvalidArgumentException('Could not create a valid date from ' . gettype($time) . '.'); + } + + /** + * Returns the Unix timestamp of the time parameter. The parameter can be an Unix timestamp, + * string or a DateTime object. + * + * @param int|string|DateTime $time + * @return int Unix timestamp + * @throws InvalidArgumentException If the time could not be parsed + */ + protected function getTimestampFromValue($time) + { + if (is_int($time)) { + return $time; + } + + if ($time instanceof DateTime) { + return $time->getTimestamp(); + } + + if (is_string($time)) { + return strtotime($time); + } + + throw new InvalidArgumentException('Could not create timestamp from ' . gettype($time) . '.'); + } + + /** + * Parses the Cache-Control header of a response and returns the Cache-Control object. + * + * @param ResponseInterface $response + * @return ResponseCacheControl + */ + protected function getCacheControl(ResponseInterface $response) + { + return ResponseCacheControl::fromString($response->getHeaderLine('Cache-Control')); + } + + /** + * Method to check if the current ETag matches the ETag of the request. + * + * @link https://tools.ietf.org/html/rfc7232#section-2.3.2 + * + * @param string $currentETag The current ETag + * @param string $requestETags The ETags from the request + * @param bool $weak Whether to do a weak comparison (default: strong) + * @return bool True if the current ETag matches the ETags of the request, false otherwise + */ + private function matchesETag($currentETag, $requestETags, $weak = false) + { + if ($requestETags === '*') { + return (bool) $currentETag; + } + + if (strpos($currentETag, 'W/"') === 0) { + if (!$weak) { + return false; + } + } else { + $currentETag = '"' . trim($currentETag, '"') . '"'; + } + + $eTags = preg_split('/\s*,\s*/', $requestETags); + $match = in_array($currentETag, $eTags, true); + if (!$match && $weak) { + $other = strpos($currentETag, '"') === 0 ? 'W/' . $currentETag : substr($currentETag, 2); + $match = in_array($other, $eTags, true); + } + + return $match; + } + + /** + * Method to check if the current Last-Modified date matches the date of the request. + * + * @param int|string|DateTime $currentModified Current Last-Modified date + * @param string $requestModified Last-Modified date of the request + * @return bool True if the current date matches the date of the request, false otherwise + * @throws InvalidArgumentException If the current date could not be parsed + */ + private function matchesModified($currentModified, $requestModified) + { + if (!$currentModified) { + return false; + } + + return $this->getTimestampFromValue($currentModified) <= strtotime($requestModified); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/micheh/psr7-cache/src/Header/CacheControl.php b/soc/2020/daily_report/archive/app/vendor/micheh/psr7-cache/src/Header/CacheControl.php new file mode 100644 index 0000000..ca2cec5 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/micheh/psr7-cache/src/Header/CacheControl.php @@ -0,0 +1,271 @@ + + * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD-3-Clause License + */ + +namespace Micheh\Cache\Header; + +use InvalidArgumentException; + +/** + * Base class for the Cache-Control header. + */ +abstract class CacheControl +{ + /** + * @var array + */ + private $directives = []; + + /** + * @var array + */ + private static $commonMethods = [ + 'max-age' => 'withMaxAge', + 'no-cache' => 'withNoCache', + 'no-store' => 'withNoStore', + 'no-transform' => 'withNoTransform', + ]; + + /** + * @var array Maps the directive names to the methods + */ + protected static $directiveMethods = []; + + /** + * Create a new Cache-Control object from a header string. + * + * @param string $string + * @return static + */ + protected static function createFromString($string) + { + $cacheControl = new static(); + + $parts = explode(',', $string); + foreach ($parts as $part) { + $index = strpos($part, '='); + if ($index !== false) { + $directive = substr($part, 0, $index); + $value = trim(substr($part, $index + 1)); + } else { + $directive = $part; + $value = true; + } + + $directive = trim($directive); + $method = self::getMethod($directive); + + if ($method === null && $value === true) { + // Ignore unknown flag + continue; + } + + $cacheControl = $method + ? $cacheControl->$method($value) + : $cacheControl->withExtension($directive, $value); + } + + return $cacheControl; + } + + /** + * Set how many seconds to cache. + * + * @param int $seconds + * @return static + */ + public function withMaxAge($seconds) + { + return $this->withDirective('max-age', (int) $seconds); + } + + /** + * @return int|null + */ + public function getMaxAge() + { + return $this->getDirective('max-age'); + } + + /** + * Set whether a representation should be cached. + * + * @param bool $flag + * @return static + */ + public function withNoCache($flag = true) + { + return $this->withDirective('no-cache', (bool) $flag); + } + + /** + * @return bool + */ + public function hasNoCache() + { + return $this->hasDirective('no-cache'); + } + + /** + * Set whether a representation should be stored. + * + * @param bool $flag + * @return static + */ + public function withNoStore($flag = true) + { + return $this->withDirective('no-store', (bool) $flag); + } + + /** + * @return bool + */ + public function hasNoStore() + { + return $this->hasDirective('no-store'); + } + + /** + * Set whether the payload can be transformed. + * + * @param bool $flag + * @return static + */ + public function withNoTransform($flag = true) + { + return $this->withDirective('no-transform', (bool) $flag); + } + + /** + * @return bool + */ + public function hasNoTransform() + { + return $this->hasDirective('no-transform'); + } + + /** + * Add a custom extension directive to the Cache-Control. + * + * @param string $name Name of the directive + * @param string $value Value of the directive as a string + * @return static + * @throws InvalidArgumentException If the name or the value of the directive is not a string + */ + public function withExtension($name, $value) + { + if (!is_string($name) || !is_string($value)) { + throw new InvalidArgumentException('Name and value of the extension have to be a string.'); + } + + return $this->withDirective($name, trim($value, '" ')); + } + + /** + * @param string $name + * @return string|null + */ + public function getExtension($name) + { + return $this->getDirective($name); + } + + /** + * @return string Header string, which can added to the response. + */ + public function __toString() + { + $parts = []; + foreach ($this->directives as $directive => $value) { + if ($value === true) { + $parts[] = $directive; + continue; + } + + if (is_string($value)) { + $value = '"' . $value . '"'; + } + + $parts[] = $directive . '=' . $value; + } + + return implode(', ', $parts); + } + + /** + * Set a directive with the provided name and value. + * + * @param string $name Name of the directive + * @param string|int|bool|null $value Value of the directive + * @return static + */ + protected function withDirective($name, $value) + { + $clone = clone($this); + + if (is_numeric($value)) { + $value = max(0, (int) $value); + } + + if ($value !== null && $value !== false) { + $clone->directives[$name] = $value; + return $clone; + } + + if ($clone->hasDirective($name)) { + unset($clone->directives[$name]); + } + + return $clone; + } + + /** + * Returns true if the Cache-Control has a directive and false otherwise. + * + * @param string $name Name of the directive + * @return bool + */ + protected function hasDirective($name) + { + return array_key_exists($name, $this->directives); + } + + /** + * Returns the directive value if available, or `null` if not available. + * + * @param string $name Name of the directive + * @return string|int|null + */ + protected function getDirective($name) + { + if ($this->hasDirective($name)) { + return $this->directives[$name]; + } + + return null; + } + + /** + * Returns the method name to set the provided directive. If the directive cannot be set, the + * method returns `null`. + * + * @param string $directive Name of the directive + * @return string|null + */ + private static function getMethod($directive) + { + if (isset(static::$directiveMethods[$directive])) { + return static::$directiveMethods[$directive]; + } + + if (isset(self::$commonMethods[$directive])) { + return self::$commonMethods[$directive]; + } + + return null; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/micheh/psr7-cache/src/Header/RequestCacheControl.php b/soc/2020/daily_report/archive/app/vendor/micheh/psr7-cache/src/Header/RequestCacheControl.php new file mode 100644 index 0000000..0c60d86 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/micheh/psr7-cache/src/Header/RequestCacheControl.php @@ -0,0 +1,92 @@ + + * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD-3-Clause License + */ + +namespace Micheh\Cache\Header; + +/** + * Cache-Control header for a request. + */ +class RequestCacheControl extends CacheControl +{ + /** + * {@inheritdoc} + */ + protected static $directiveMethods = [ + 'max-stale' => 'withMaxStale', + 'min-fresh' => 'withMinFresh', + 'only-if-cached' => 'withOnlyIfCached', + ]; + + /** + * Create a new Request Cache-Control object from a header string. + * + * @param string $string + * @return static + */ + public static function fromString($string) + { + return static::createFromString($string); + } + + /** + * Set how many seconds a stale representation is acceptable. + * + * @param int $seconds + * @return static + */ + public function withMaxStale($seconds) + { + return $this->withDirective('max-stale', (int) $seconds); + } + + /** + * @return int|null + */ + public function getMaxStale() + { + return $this->getDirective('max-stale'); + } + + /** + * Set how many seconds the representation should still be fresh. + * + * @param int $seconds + * @return static + */ + public function withMinFresh($seconds) + { + return $this->withDirective('min-fresh', (int) $seconds); + } + + /** + * @return int|null + */ + public function getMinFresh() + { + return $this->getDirective('min-fresh'); + } + + /** + * Set whether only a stored response should be returned. + * + * @param bool $flag + * @return static + */ + public function withOnlyIfCached($flag = true) + { + return $this->withDirective('only-if-cached', (bool) $flag); + } + + /** + * @return bool + */ + public function hasOnlyIfCached() + { + return $this->hasDirective('only-if-cached'); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/micheh/psr7-cache/src/Header/ResponseCacheControl.php b/soc/2020/daily_report/archive/app/vendor/micheh/psr7-cache/src/Header/ResponseCacheControl.php new file mode 100644 index 0000000..65ccc21 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/micheh/psr7-cache/src/Header/ResponseCacheControl.php @@ -0,0 +1,223 @@ + + * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD-3-Clause License + */ + +namespace Micheh\Cache\Header; + +/** + * Cache-Control header for a response. + */ +class ResponseCacheControl extends CacheControl +{ + /** + * {@inheritdoc} + */ + protected static $directiveMethods = [ + 'public' => 'withPublic', + 'private' => 'withPrivate', + 's-maxage' => 'withSharedMaxAge', + 'stale-while-revalidate' => 'withStaleWhileRevalidate', + 'stale-if-error' => 'withStaleIfError', + 'must-revalidate' => 'withMustRevalidate', + 'proxy-revalidate' => 'withProxyRevalidate', + ]; + + /** + * Create a new Response Cache-Control object from a header string. + * + * @param string $string + * @return static + */ + public static function fromString($string) + { + return static::createFromString($string); + } + + /** + * Set whether a response should be cached by shared caches. The method will automatically + * remove the private flag if it is set. + * + * @param bool $flag + * @return static + */ + public function withPublic($flag = true) + { + return $this->withPublicPrivate(true, $flag); + } + + /** + * @return bool + */ + public function isPublic() + { + return $this->hasDirective('public'); + } + + /** + * Set whether a response should be private (only cacheable by the client who made the request. + * The method will automatically remove the public flag if it is set. + * + * @param bool $flag + * @return static + */ + public function withPrivate($flag = true) + { + return $this->withPublicPrivate(false, $flag); + } + + /** + * @return bool + */ + public function isPrivate() + { + return $this->hasDirective('private'); + } + + /** + * Set how many seconds shared caches should cache the response. Use this directive only if it + * is different than the max age value. + * + * @param int $seconds + * @return static + */ + public function withSharedMaxAge($seconds) + { + return $this->withDirective('s-maxage', (int) $seconds); + } + + /** + * @return int|null + */ + public function getSharedMaxAge() + { + return $this->getDirective('s-maxage'); + } + + /** + * Returns the number of seconds the response should be cached. The method returns the shared + * max age if available and the normal max age otherwise. If both directives are not available, + * the method returns `null`. + * + * @return int|null Lifetime in seconds if available, null otherwise + */ + public function getLifetime() + { + $lifetime = $this->getSharedMaxAge(); + if ($lifetime === null) { + $lifetime = $this->getMaxAge(); + } + + return $lifetime; + } + + /** + * Set how many seconds a stale representation can be used while revalidating in the background. + * + * @param int $seconds + * @return static + */ + public function withStaleWhileRevalidate($seconds) + { + return $this->withDirective('stale-while-revalidate', (int) $seconds); + } + + /** + * @return int|null + */ + public function getStaleWhileRevalidate() + { + return $this->getDirective('stale-while-revalidate'); + } + + /** + * Set how many seconds a stale representation can be used in the case of a server error. + * + * @param int $seconds + * @return static + */ + public function withStaleIfError($seconds) + { + return $this->withDirective('stale-if-error', (int) $seconds); + } + + /** + * @return int|null + */ + public function getStaleIfError() + { + return $this->getDirective('stale-if-error'); + } + + /** + * Set whether a stale representation should be validated. + * + * @param bool $flag + * @return static + */ + public function withMustRevalidate($flag = true) + { + return $this->withDirective('must-revalidate', (bool) $flag); + } + + /** + * @return bool + */ + public function hasMustRevalidate() + { + return $this->hasDirective('must-revalidate'); + } + + /** + * Set whether a public cache should validate a stale representation. + * + * @param bool $flag + * @return static + */ + public function withProxyRevalidate($flag = true) + { + return $this->withDirective('proxy-revalidate', (bool) $flag); + } + + /** + * @return bool + */ + public function hasProxyRevalidate() + { + return $this->hasDirective('proxy-revalidate'); + } + + /** + * Convenience method to set flags which should prevent the client from caching. + * Adds `no-cache, no-store, must-revalidate`. + * + * @return static + */ + public function withCachePrevention() + { + return $this->withNoCache()->withNoStore()->withMustRevalidate(); + } + + /** + * Sets the flag for the public and private directives. + * + * @param bool $isPublic + * @param bool $flag + * @return static + */ + private function withPublicPrivate($isPublic, $flag) + { + $type = $isPublic ? 'public' : 'private'; + $otherType = $isPublic ? 'private' : 'public'; + + $clone = $this->withDirective($type, (bool) $flag); + if ($flag && $clone->hasDirective($otherType)) { + $clone = $clone->withDirective($otherType, false); + } + + return $clone; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/middlewares/cache/CHANGELOG.md b/soc/2020/daily_report/archive/app/vendor/middlewares/cache/CHANGELOG.md new file mode 100644 index 0000000..01652cd --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/middlewares/cache/CHANGELOG.md @@ -0,0 +1,70 @@ +# Change Log + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/) +and this project adheres to [Semantic Versioning](http://semver.org/). + +## [2.0.0] - 2019-12-01 +### Added +- Added a second argument to `Cache` constructor to define a `ResponseFactoryInterface` + +### Removed +- Support for PHP 7.0 and 7.1 +- The `responseFactory()` option in `Cache` middleware. Use the constructor argument. + +## [1.1.0] - 2018-08-04 +### Added +- PSR-17 support +- New option `responseFactory` + +## [1.0.0] - 2018-01-25 +### Added +- Improved testing and added code coverage reporting +- Added tests for PHP 7.2 + +### Changed +- Upgraded to the final version of PSR-15 `psr/http-server-middleware` + +### Fixed +- Updated license year + +## [0.5.0] - 2017-11-13 +### Changed +- Replaced `http-interop/http-middleware` with `http-interop/http-server-middleware`. + +### Removed +- Removed support for PHP 5.x. + +## [0.4.0] - 2017-09-21 +### Changed +- Append `.dist` suffix to phpcs.xml and phpunit.xml files +- Changed the configuration of phpcs and php_cs +- Upgraded phpunit to the latest version and improved its config file +- Updated to `http-interop/http-middleware#0.5` + +## [0.3.1] - 2017-03-30 +### Fixed +- `Middlewares\Cache` is executed only with `GET` and `HEAD` requests. + +## [0.3.0] - 2016-12-26 +### Changed +- Updated tests +- Updated to `http-interop/http-middleware#0.4` +- Updated `friendsofphp/php-cs-fixer#2.0` + +## [0.2.0] - 2016-11-22 +### Changed +- Updated to `http-interop/http-middleware#0.3` + +## 0.1.0 - 2016-10-03 +First version + +[2.0.0]: https://github.com/middlewares/cache/compare/v1.1.0...v2.0.0 +[1.1.0]: https://github.com/middlewares/cache/compare/v1.0.0...v1.1.0 +[1.0.0]: https://github.com/middlewares/cache/compare/v0.5.0...v1.0.0 +[0.5.0]: https://github.com/middlewares/cache/compare/v0.4.0...v0.5.0 +[0.4.0]: https://github.com/middlewares/cache/compare/v0.3.1...v0.4.0 +[0.3.1]: https://github.com/middlewares/cache/compare/v0.3.0...v0.3.1 +[0.3.0]: https://github.com/middlewares/cache/compare/v0.2.0...v0.3.0 +[0.2.0]: https://github.com/middlewares/cache/compare/v0.1.0...v0.2.0 diff --git a/soc/2020/daily_report/archive/app/vendor/middlewares/cache/CONTRIBUTING.md b/soc/2020/daily_report/archive/app/vendor/middlewares/cache/CONTRIBUTING.md new file mode 100644 index 0000000..df4cef1 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/middlewares/cache/CONTRIBUTING.md @@ -0,0 +1,55 @@ +# Contributing Guide + +This project adheres to [The Code Manifesto](http://codemanifesto.com) as its guidelines for contributor interactions. + +## The Code Manifesto + +We want to work in an ecosystem that empowers developers to reach their potential--one that encourages growth and effective collaboration. A space that is safe for all. + +A space such as this benefits everyone that participates in it. It encourages new developers to enter our field. It is through discussion and collaboration that we grow, and through growth that we improve. + +In the effort to create such a place, we hold to these values: + +1. **Discrimination limits us.** This includes discrimination on the basis of race, gender, sexual orientation, gender identity, age, nationality, technology and any other arbitrary exclusion of a group of people. +2. **Boundaries honor us.** Your comfort levels are not everyone’s comfort levels. Remember that, and if brought to your attention, heed it. +3. **We are our biggest assets.** None of us were born masters of our trade. Each of us has been helped along the way. Return that favor, when and where you can. +4. **We are resources for the future.** As an extension of #3, share what you know. Make yourself a resource to help those that come after you. +5. **Respect defines us.** Treat others as you wish to be treated. Make your discussions, criticisms and debates from a position of respectfulness. Ask yourself, is it true? Is it necessary? Is it constructive? Anything less is unacceptable. +6. **Reactions require grace.** Angry responses are valid, but abusive language and vindictive actions are toxic. When something happens that offends you, handle it assertively, but be respectful. Escalate reasonably, and try to allow the offender an opportunity to explain themselves, and possibly correct the issue. +7. **Opinions are just that: opinions.** Each and every one of us, due to our background and upbringing, have varying opinions. That is perfectly acceptable. Remember this: if you respect your own opinions, you should respect the opinions of others. +8. **To err is human.** You might not intend it, but mistakes do happen and contribute to build experience. Tolerate honest mistakes, and don't hesitate to apologize if you make one yourself. + +## How to contribute + +This is a collaborative effort. We welcome all contributions submitted as pull requests. + +(Contributions on wording & style are also welcome.) + +### Bugs + +A bug is a demonstrable problem that is caused by the code in the repository. Good bug reports are extremely helpful – thank you! + +Please try to be as detailed as possible in your report. Include specific information about the environment – version of PHP, etc, and steps required to reproduce the issue. + +### Pull Requests + +Good pull requests – patches, improvements, new features – are a fantastic help. Before create a pull request, please follow these instructions: + +* The code must follow the [PSR-2 Coding Standard](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md). Run `composer cs-fix` to fix your code before commit. +* Write tests +* Document any change in `README.md` and `CHANGELOG.md` +* One pull request per feature. If you want to do more than one thing, send multiple pull request + +### Runing tests + +```sh +composer test +``` + +To get code coverage information execute the following comand: + +```sh +composer coverage +``` + +Then, open the `./coverage/index.html` file in your browser. diff --git a/soc/2020/daily_report/archive/app/vendor/middlewares/cache/LICENSE b/soc/2020/daily_report/archive/app/vendor/middlewares/cache/LICENSE new file mode 100644 index 0000000..017c0cd --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/middlewares/cache/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2019 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/soc/2020/daily_report/archive/app/vendor/middlewares/cache/README.md b/soc/2020/daily_report/archive/app/vendor/middlewares/cache/README.md new file mode 100644 index 0000000..e775eba --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/middlewares/cache/README.md @@ -0,0 +1,108 @@ +# middlewares/cache + +[![Latest Version on Packagist][ico-version]][link-packagist] +[![Software License][ico-license]](LICENSE) +[![Build Status][ico-travis]][link-travis] +[![Quality Score][ico-scrutinizer]][link-scrutinizer] +[![Total Downloads][ico-downloads]][link-downloads] + +Middleware components with the following cache utilities: + +* [CachePrevention](#cacheprevention) +* [Expires](#expires) +* [Cache](#cache) + +## Requirements + +* PHP >= 7.2 +* A [PSR-7 http library](https://github.com/middlewares/awesome-psr15-middlewares#psr-7-implementations) +* A [PSR-15 middleware dispatcher](https://github.com/middlewares/awesome-psr15-middlewares#dispatcher) + +## Installation + +This package is installable and autoloadable via Composer as [middlewares/cache](https://packagist.org/packages/middlewares/cache). + +```sh +composer require middlewares/cache +``` + +## CachePrevention + +To add the response headers for cache prevention. Useful in development environments: + +```php +Dispatcher::run([ + new Middlewares\CachePrevention() +]); +``` + +## Expires + +This middleware adds the `Expires` and `Cache-Control: max-age` headers to the response. You can configure the cache duration for each mimetype. If it's not defined, [use the defaults](src/expires_defaults.php). + +```php +// Use the default configuration +$expires = new Middlewares\Expires(); + +// Custom durations +$expires = new Middlewares\Expires([ + 'text/css' => '+1 year', + 'text/js' => '+1 week', +]); +``` + +### defaultExpires + +Set the default expires value if the request mimetype is not configured. By default is 1 month. Example: + +```php +//set 1 year lifetime to css and js +$durations = [ + 'text/css' => '+1 year', + 'text/javascript' => '+1 year', +]; + +//and 1 hour to everything else +$default = '+1 hour'; + +$expires = (new Middlewares\Expires($durations))->defaultExpires($default); +``` + +## Cache + +Saves the response headers in a [PSR-6 cache pool](http://www.php-fig.org/psr/psr-6/) and returns `304` responses (Not modified) if the response is still valid. This saves server resources and bandwidth because the body is returned empty. It's recomended to combine it with `Expires` to set the lifetime of the responses. + +```php +$cachePool = new Psr6CachePool(); + +Dispatcher::run([ + new Middlewares\Cache($cachePool), + new Middlewares\Expires() +]); +``` + +Optionally, you can provide a `Psr\Http\Message\ResponseFactoryInterface` as the second argument to create the `304` empty responses. If it's not defined, [Middleware\Utils\Factory](https://github.com/middlewares/utils#factory) will be used to detect it automatically. + +```php +$cachePool = new Psr6CachePool(); +$responseFactory = new MyOwnResponseFactory(); + +$cache = new Middlewares\Cache($cachePool, $responseFactory); +``` + +--- + +Please see [CHANGELOG](CHANGELOG.md) for more information about recent changes and [CONTRIBUTING](CONTRIBUTING.md) for contributing details. + +The MIT License (MIT). Please see [LICENSE](LICENSE) for more information. + +[ico-version]: https://img.shields.io/packagist/v/middlewares/cache.svg?style=flat-square +[ico-license]: https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square +[ico-travis]: https://img.shields.io/travis/middlewares/cache/master.svg?style=flat-square +[ico-scrutinizer]: https://img.shields.io/scrutinizer/g/middlewares/cache.svg?style=flat-square +[ico-downloads]: https://img.shields.io/packagist/dt/middlewares/cache.svg?style=flat-square + +[link-packagist]: https://packagist.org/packages/middlewares/cache +[link-travis]: https://travis-ci.org/middlewares/cache +[link-scrutinizer]: https://scrutinizer-ci.com/g/middlewares/cache +[link-downloads]: https://packagist.org/packages/middlewares/cache diff --git a/soc/2020/daily_report/archive/app/vendor/middlewares/cache/composer.json b/soc/2020/daily_report/archive/app/vendor/middlewares/cache/composer.json new file mode 100644 index 0000000..60c7073 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/middlewares/cache/composer.json @@ -0,0 +1,49 @@ +{ + "name": "middlewares/cache", + "type": "library", + "description": "Middleware with various cache utilities", + "license": "MIT", + "keywords": [ + "psr-7", + "psr-15", + "middleware", + "http" + ], + "homepage": "https://github.com/middlewares/cache", + "support": { + "issues": "https://github.com/middlewares/cache/issues" + }, + "require": { + "php": "^7.2", + "middlewares/utils": "^3.0", + "micheh/psr7-cache": "^0.5.0", + "psr/cache": "^1.0", + "psr/http-server-middleware": "^1.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.1", + "zendframework/zend-diactoros": "^2.2", + "friendsofphp/php-cs-fixer": "^2.0", + "squizlabs/php_codesniffer": "^3.0", + "oscarotero/php-cs-fixer-config": "^1.0", + "matthiasmullie/scrapbook": "^1.4" + }, + "autoload": { + "psr-4": { + "Middlewares\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "Middlewares\\Tests\\": "tests/" + } + }, + "scripts": { + "test": [ + "phpunit --coverage-text", + "phpcs" + ], + "cs-fix": "php-cs-fixer fix", + "coverage": "phpunit --coverage-html=coverage" + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/middlewares/cache/src/Cache.php b/soc/2020/daily_report/archive/app/vendor/middlewares/cache/src/Cache.php new file mode 100644 index 0000000..3bf47ba --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/middlewares/cache/src/Cache.php @@ -0,0 +1,82 @@ +cache = $cache; + $this->responseFactory = $responseFactory ?: Factory::getResponseFactory(); + } + + /** + * Process a request and return a response. + */ + public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface + { + //Only GET & HEAD request + if (!in_array($request->getMethod(), ['GET', 'HEAD'], true)) { + return $handler->handle($request); + } + + $util = new CacheUtil(); + $key = $request->getMethod().md5((string) $request->getUri()); + $item = $this->cache->getItem($key); + + //It's cached + if ($item->isHit()) { + $headers = $item->get(); + $response = $this->responseFactory->createResponse(304); + + foreach ($headers as $name => $header) { + $response = $response->withHeader($name, $header); + } + + if ($util->isNotModified($request, $response)) { + return $response; + } + + $this->cache->deleteItem($key); + } + + $response = $handler->handle($request); + + if (!$response->hasHeader('Last-Modified')) { + $response = $util->withLastModified($response, time()); + } + + //Save in the cache + if ($util->isCacheable($response)) { + $item->set($response->getHeaders()); + $item->expiresAfter($util->getLifetime($response)); + + $this->cache->save($item); + } + + return $response; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/middlewares/cache/src/CachePrevention.php b/soc/2020/daily_report/archive/app/vendor/middlewares/cache/src/CachePrevention.php new file mode 100644 index 0000000..b096434 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/middlewares/cache/src/CachePrevention.php @@ -0,0 +1,25 @@ +handle($request); + + $util = new CacheUtil(); + + return $util->withCachePrevention($response); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/middlewares/cache/src/Expires.php b/soc/2020/daily_report/archive/app/vendor/middlewares/cache/src/Expires.php new file mode 100644 index 0000000..daff30a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/middlewares/cache/src/Expires.php @@ -0,0 +1,103 @@ +expires = $expires ?: require __DIR__.'/expires_defaults.php'; + } + + /** + * Set the default expires value. + */ + public function defaultExpires(string $expires): self + { + $this->default = $expires; + + return $this; + } + + /** + * Process a request and return a response. + */ + public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface + { + $response = $handler->handle($request); + + //Only GET & HEAD request + if (!in_array($request->getMethod(), ['GET', 'HEAD'], true)) { + return $response; + } + + $util = new CacheUtil(); + + //Only cacheable responses + if (!$util->isCacheable($response)) { + return $response; + } + + //Check if a lifetime is defined + $lifetime = $util->getLifetime($response); + + if ($lifetime !== null) { + return self::withExpires($response, $util, '@'.(time() + $lifetime)); + } + + //Check the content type + $contentType = $response->getHeaderLine('Content-Type'); + + if ($contentType !== '') { + foreach ($this->expires as $mime => $time) { + if (stripos($contentType, $mime) !== false) { + return self::withExpires($response, $util, $time); + } + } + } + + //Add default value + return self::withExpires($response, $util, $this->default); + } + + /** + * Add the Expires and Cache-Control headers. + */ + private static function withExpires( + ResponseInterface $response, + CacheUtil $util, + string $expires + ): ResponseInterface { + $expires = new DateTime($expires); + $cacheControl = ResponseCacheControl::fromString($response->getHeaderLine('Cache-Control')) + ->withMaxAge($expires->getTimestamp() - time()); + + $response = $util->withExpires($response, $expires); + + return $util->withCacheControl($response, $cacheControl); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/middlewares/cache/src/expires_defaults.php b/soc/2020/daily_report/archive/app/vendor/middlewares/cache/src/expires_defaults.php new file mode 100644 index 0000000..8527486 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/middlewares/cache/src/expires_defaults.php @@ -0,0 +1,43 @@ + '+1 year', + 'application/atom+xml' => '+1 hour', + 'application/rdf+xml' => '+1 hour', + 'application/rss+xml' => '+1 hour', + 'application/json' => '+0 seconds', + 'application/ld+json' => '+0 seconds', + 'application/schema+json' => '+0 seconds', + 'application/vnd.geo+json' => '+0 seconds', + 'application/xml' => '+0 seconds', + 'text/xml' => '+0 seconds', + 'image/vnd.microsoft.icon' => '+1 week', + 'image/x-icon' => '+1 week', + 'text/html' => '+0 seconds', + 'application/javascript' => '+1 year', + 'application/x-javascript' => '+1 year', + 'text/javascript' => '+1 year', + 'application/manifest+json' => '+1 week', + 'application/x-web-app-manifest+json' => '+0 seconds', + 'text/cache-manifest' => '+0 seconds', + 'audio/ogg' => '+1 month', + 'image/bmp' => '+1 month', + 'image/gif' => '+1 month', + 'image/jpeg' => '+1 month', + 'image/png' => '+1 month', + 'image/svg+xml' => '+1 month', + 'image/webp' => '+1 month', + 'video/mp4' => '+1 month', + 'video/ogg' => '+1 month', + 'video/webm' => '+1 month', + 'application/vnd.ms-fontobject' => '+1 month', + 'font/eot' => '+1 month', + 'font/opentype' => '+1 month', + 'application/x-font-ttf' => '+1 month', + 'application/font-woff' => '+1 month', + 'application/x-font-woff' => '+1 month', + 'font/woff' => '+1 month', + 'application/font-woff2' => '+1 month', + 'text/x-cross-domain-policy' => '+1 week', +]; diff --git a/soc/2020/daily_report/archive/app/vendor/middlewares/utils/CHANGELOG.md b/soc/2020/daily_report/archive/app/vendor/middlewares/utils/CHANGELOG.md new file mode 100644 index 0000000..9ae123e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/middlewares/utils/CHANGELOG.md @@ -0,0 +1,228 @@ +# Change Log + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/) +and this project adheres to [Semantic Versioning](http://semver.org/). + +## [3.1.0] - 2020-01-19 +### Changed +- Zend Diactoros is deprecated, switched to Laminas Diactoros [#20], [#21]. + THIS IS A BREAKING CHANGE, so, if you want to keep using Zend Diactoros, you should configure the `Factory` as follows: + ```php + Factory::setFactory( + new FactoryDiscovery([ + 'request' => 'Zend\Diactoros\RequestFactory', + 'response' => 'Zend\Diactoros\ResponseFactory', + 'serverRequest' => 'Zend\Diactoros\ServerRequestFactory', + 'stream' => 'Zend\Diactoros\StreamFactory', + 'uploadedFile' => 'Zend\Diactoros\UploadedFileFactory', + 'uri' => 'Zend\Diactoros\UriFactory', + ]) + ); + ``` + +## [3.0.1] - 2019-11-29 +### Fixed +- Moved a dependency to dev +- Updated docs + +## [3.0.0] - 2019-11-29 +### Added +- Added `FactoryInterface` that returns all PSR-17 factories +- Added `FactoryDiscovery` class to discover automatically PSR-17 implementation libraries +- Added `Factory::getFactory()` and `Factory::setFactory()` to set manually PSR-17 factories +- Added `Factory::getResponseFactory()` +- Added `Factory::getRequestFactory()` +- Added `Factory::getServerRequestFactory()` +- Added `Factory::getStreamFactory()` +- Added `Factory::getUriFactory()` +- Added `Factory::getUploadedFileFactory()` +- Added `Sunrise` to the list of factories detected automatically + +### Removed +- Support for PHP 7.0 and 7.1 +- `Factory::setStrategy` +- `HttpErrorException::setContext` method, to make the exception class inmutable +- Traits `HasResponseFactory` and `HasStreamFactory` + +## [2.2.0] - 2019-03-05 +### Added +- `Middlewares\Utils\Dispatcher` implements `RequestHandlerInterface` [#16], [#17] + +## [2.1.1] - 2018-08-11 +### Added +- Added `Nyholm\Psr7` to the list of factories detected automatically + +## [2.1.0] - 2018-08-02 +### Added +- New trait `HasResponseFactory` used by many middlewares that need to configure the PSR-17 response factory. +- New trait `HasStreamFactory` used by many middlewares that need to configure the PSR-17 stream factory. + +## [2.0.0] - 2018-08-01 +### Added +- New methods added to `Factory` to return PSR-17 factories: `getResponseFactory`, `getServerRequestFactory`, `getStreamFactory` and `getUriFactory`. +- New method `Factory::setStrategies()` to configure the priority order of the Diactoros, Guzzle and Slim factories or register new classes. +- Added a second argument to `Callablehandler` constructor to pass a response factory + +### Changed +- Exchanged abandoned `http-interop/http-factory` with `psr/http-factory` +- Changed the signature of `Factory::createServerRequest()` to be aligned with PSR-17 +- Changed the signature of `Factory::createStream()` to be aligned with PSR-17 +- Changed the signature of `Factory::createResponse()` to be aligned with PSR-17 + +## [1.2.0] - 2018-07-17 +### Changed +- Updated `http-interop/http-factory` to `0.4` + +## [1.1.0] - 2018-06-25 +### Added +- Imported `HttpErrorException` from error handler middleware + +## [1.0.0] - 2018-01-24 +### Changed +- Replaced `http-interop/http-server-middleware` with `psr/http-server-middleware`. + +### Removed +- Removed `Middlewares\Utils\Helpers` because contains just one helper and it's no longer needed. + +## [0.14.0] - 2017-12-16 +### Added +- New class `RequestHandlerContainer` implementing PSR-11 to resolve handlers in any format (classes, callables) and return PSR-15 `RequestHandlerInterface` instances. This can be used to resolve router handlers, for example. + +### Changed +- The signature of `CallableHandler` was simplified. Removed `$resolver` and `$arguments` in the constructor. + +### Removed +- Deleted all callable resolvers classes. Use the `RequestHandlerContainer`, or any other PSR-11 implementation. + +## [0.13.0] - 2017-11-16 +### Changed +- The minimum PHP version supported is 7.0 +- Replaced `http-interop/http-middleware` with `http-interop/http-server-middleware`. +- Changed `Middlewares\Utils\CallableHandler` signature. Now it is instantiable and can be used as middleware and server request handler. + +### Removed +- `Middlewares\Utils\CallableMiddleware`. Use `Middlewares\Utils\CallableHandler` instead. + +## [0.12.0] - 2017-09-18 +### Changed +- Append `.dist` suffix to phpcs.xml and phpunit.xml files +- Changed the configuration of phpcs and php_cs +- Upgraded phpunit to the latest version and improved its config file +- Updated `http-interop/http-middleware` to `0.5` + +## [0.11.1] - 2017-05-06 +### Changed +- `Middlewares\Utils\CallableHandler` expects one of the following values returned by the callable: + * A `Psr\Http\Message\ResponseInterface` + * `null` or scalar + * an object with `__toString` method implemented + Otherwise, throws an `UnexpectedValueException` +- `Middlewares\Helpers::fixContentLength` only modifies or removes the `Content-Length` header, but does not add it if didn't exist previously. + +## [0.11.0] - 2017-03-25 +### Added +- New class `Middlewares\Utils\Helpers` with common helpers to manipulate PSR-7 messages +- New helper `Middlewares\Utils\Helpers::fixContentLength` used to add/modify/remove the `Content-Length` header of a http message. + +### Changed +- Updated `http-interop/http-factory` to `0.3` + +## [0.10.1] - 2017-02-27 +### Fixed +- Fixed changelog file + +## [0.10.0] - 2017-02-27 +### Changed +- Replaced deprecated `container-interop` by `psr/contaienr` (PSR-11). +- `Middlewares\Utils\Dispatcher` throws exceptions if the middlewares does not implement `Interop\Http\ServerMiddleware\MiddlewareInterface` or does not return an instance of `Psr\Http\Message\ResponseInterface`. +- Moved the default factories to `Middlewares\Utils\Factory` namespace. +- Minor code improvements. + +## [0.9.0] - 2017-02-05 +### Added +- Callable resolves to create callables from various representations + +### Removed +- `Middlewares\Utils\CallableHandler::resolve` + +## [0.8.0] - 2016-12-22 +### Changed +- Updated `http-interop/http-middleware` to `0.4` +- Updated `friendsofphp/php-cs-fixer` to `2.0` + +## [0.7.0] - 2016-12-06 +### Added +- New static helper `Middlewares\Utils\Dispatcher::run` to create and dispatch a request easily + +## [0.6.1] - 2016-12-06 +### Fixed +- Ensure that the body of the serverRequest is writable and seekable. + +## [0.6.0] - 2016-12-06 +### Added +- ServerRequest factory +- `Middlewares\Utils\Dispatcher` accepts `Closure` as middleware components + +### Changed +- `Middlewares\Utils\Dispatcher` creates automatically a response if the stack is exhausted + +## [0.5.0] - 2016-11-22 +### Added +- `Middlewares\Utils\CallableMiddleware` class, to create middlewares from callables +- `Middlewares\Utils\Dispatcher` class, to execute the middleware stack and return a response. + +## [0.4.0] - 2016-11-13 +### Changed +- Updated `http-interop/http-factory` to `0.2` + +## [0.3.1] - 2016-10-03 +### Fixed +- Bug in CallableHandler that resolve to the declaring class of a method instead the final class. + +## [0.3.0] - 2016-10-03 +### Added +- `Middlewares\Utils\CallableHandler` class, allowing to resolve and execute callables safely. + +## [0.2.0] - 2016-10-01 +### Added +- Uri factory + +## 0.1.0 - 2016-09-30 +### Added +- Response factory +- Stream factory + +[#16]: https://github.com/middlewares/utils/issues/16 +[#17]: https://github.com/middlewares/utils/issues/17 +[#20]: https://github.com/middlewares/utils/issues/20 +[#21]: https://github.com/middlewares/utils/issues/21 + +[3.1.0]: https://github.com/middlewares/utils/compare/v3.0.1...v3.1.0 +[3.0.1]: https://github.com/middlewares/utils/compare/v3.0.0...v3.0.1 +[3.0.0]: https://github.com/middlewares/utils/compare/v2.2.0...v3.0.0 +[2.2.0]: https://github.com/middlewares/utils/compare/v2.1.1...v2.2.0 +[2.1.1]: https://github.com/middlewares/utils/compare/v2.1.0...v2.1.1 +[2.1.0]: https://github.com/middlewares/utils/compare/v2.0.0...v2.1.0 +[2.0.0]: https://github.com/middlewares/utils/compare/v1.2.0...v2.0.0 +[1.2.0]: https://github.com/middlewares/utils/compare/v1.1.0...v1.2.0 +[1.1.0]: https://github.com/middlewares/utils/compare/v1.0.0...v1.1.0 +[1.0.0]: https://github.com/middlewares/utils/compare/v0.14.0...v1.0.0 +[0.14.0]: https://github.com/middlewares/utils/compare/v0.13.0...v0.14.0 +[0.13.0]: https://github.com/middlewares/utils/compare/v0.12.0...v0.13.0 +[0.12.0]: https://github.com/middlewares/utils/compare/v0.11.1...v0.12.0 +[0.11.1]: https://github.com/middlewares/utils/compare/v0.11.0...v0.11.1 +[0.11.0]: https://github.com/middlewares/utils/compare/v0.10.1...v0.11.0 +[0.10.1]: https://github.com/middlewares/utils/compare/v0.10.0...v0.10.1 +[0.10.0]: https://github.com/middlewares/utils/compare/v0.9.0...v0.10.0 +[0.9.0]: https://github.com/middlewares/utils/compare/v0.8.0...v0.9.0 +[0.8.0]: https://github.com/middlewares/utils/compare/v0.7.0...v0.8.0 +[0.7.0]: https://github.com/middlewares/utils/compare/v0.6.1...v0.7.0 +[0.6.1]: https://github.com/middlewares/utils/compare/v0.6.0...v0.6.1 +[0.6.0]: https://github.com/middlewares/utils/compare/v0.5.0...v0.6.0 +[0.5.0]: https://github.com/middlewares/utils/compare/v0.4.0...v0.5.0 +[0.4.0]: https://github.com/middlewares/utils/compare/v0.3.1...v0.4.0 +[0.3.1]: https://github.com/middlewares/utils/compare/v0.3.0...v0.3.1 +[0.3.0]: https://github.com/middlewares/utils/compare/v0.2.0...v0.3.0 +[0.2.0]: https://github.com/middlewares/utils/compare/v0.1.0...v0.2.0 diff --git a/soc/2020/daily_report/archive/app/vendor/middlewares/utils/CONTRIBUTING.md b/soc/2020/daily_report/archive/app/vendor/middlewares/utils/CONTRIBUTING.md new file mode 100644 index 0000000..df4cef1 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/middlewares/utils/CONTRIBUTING.md @@ -0,0 +1,55 @@ +# Contributing Guide + +This project adheres to [The Code Manifesto](http://codemanifesto.com) as its guidelines for contributor interactions. + +## The Code Manifesto + +We want to work in an ecosystem that empowers developers to reach their potential--one that encourages growth and effective collaboration. A space that is safe for all. + +A space such as this benefits everyone that participates in it. It encourages new developers to enter our field. It is through discussion and collaboration that we grow, and through growth that we improve. + +In the effort to create such a place, we hold to these values: + +1. **Discrimination limits us.** This includes discrimination on the basis of race, gender, sexual orientation, gender identity, age, nationality, technology and any other arbitrary exclusion of a group of people. +2. **Boundaries honor us.** Your comfort levels are not everyone’s comfort levels. Remember that, and if brought to your attention, heed it. +3. **We are our biggest assets.** None of us were born masters of our trade. Each of us has been helped along the way. Return that favor, when and where you can. +4. **We are resources for the future.** As an extension of #3, share what you know. Make yourself a resource to help those that come after you. +5. **Respect defines us.** Treat others as you wish to be treated. Make your discussions, criticisms and debates from a position of respectfulness. Ask yourself, is it true? Is it necessary? Is it constructive? Anything less is unacceptable. +6. **Reactions require grace.** Angry responses are valid, but abusive language and vindictive actions are toxic. When something happens that offends you, handle it assertively, but be respectful. Escalate reasonably, and try to allow the offender an opportunity to explain themselves, and possibly correct the issue. +7. **Opinions are just that: opinions.** Each and every one of us, due to our background and upbringing, have varying opinions. That is perfectly acceptable. Remember this: if you respect your own opinions, you should respect the opinions of others. +8. **To err is human.** You might not intend it, but mistakes do happen and contribute to build experience. Tolerate honest mistakes, and don't hesitate to apologize if you make one yourself. + +## How to contribute + +This is a collaborative effort. We welcome all contributions submitted as pull requests. + +(Contributions on wording & style are also welcome.) + +### Bugs + +A bug is a demonstrable problem that is caused by the code in the repository. Good bug reports are extremely helpful – thank you! + +Please try to be as detailed as possible in your report. Include specific information about the environment – version of PHP, etc, and steps required to reproduce the issue. + +### Pull Requests + +Good pull requests – patches, improvements, new features – are a fantastic help. Before create a pull request, please follow these instructions: + +* The code must follow the [PSR-2 Coding Standard](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md). Run `composer cs-fix` to fix your code before commit. +* Write tests +* Document any change in `README.md` and `CHANGELOG.md` +* One pull request per feature. If you want to do more than one thing, send multiple pull request + +### Runing tests + +```sh +composer test +``` + +To get code coverage information execute the following comand: + +```sh +composer coverage +``` + +Then, open the `./coverage/index.html` file in your browser. diff --git a/soc/2020/daily_report/archive/app/vendor/middlewares/utils/LICENSE b/soc/2020/daily_report/archive/app/vendor/middlewares/utils/LICENSE new file mode 100644 index 0000000..017c0cd --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/middlewares/utils/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2019 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/soc/2020/daily_report/archive/app/vendor/middlewares/utils/README.md b/soc/2020/daily_report/archive/app/vendor/middlewares/utils/README.md new file mode 100644 index 0000000..f30712f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/middlewares/utils/README.md @@ -0,0 +1,129 @@ +# middlewares/utils + +[![Latest Version on Packagist][ico-version]][link-packagist] +[![Software License][ico-license]](LICENSE) +[![Build Status][ico-travis]][link-travis] +[![Quality Score][ico-scrutinizer]][link-scrutinizer] +[![Total Downloads][ico-downloads]][link-downloads] + +Common utilities used by the middlewares' packages: + +* [Factory](#factory) +* [Dispatcher](#dispatcher) +* [CallableHandler](#callablehandler) +* [HttpErrorException](#httperrorexception) + +## Installation + +This package is installable and autoloadable via Composer as [middlewares/utils](https://packagist.org/packages/middlewares/utils). + +```sh +composer require middlewares/utils +``` + +## Factory + +Used to create PSR-7 and PSR-17 instances. +Detects automatically [Diactoros](https://github.com/laminas/laminas-diactoros), [Guzzle](https://github.com/guzzle/psr7), [Slim](https://github.com/slimphp/Slim), [Nyholm/psr7](https://github.com/Nyholm/psr7) and [Sunrise](https://github.com/sunrise-php) but you can register a different factory using the [psr/http-factory](https://github.com/php-fig/http-factory) interface. + +```php +use Middlewares\Utils\Factory; +use Middlewares\Utils\FactoryDiscovery; + +// Create PSR-7 instances +$request = Factory::createRequest('GET', '/'); +$serverRequest = Factory::createServerRequest('GET', '/'); +$response = Factory::createResponse(200); +$stream = Factory::createStream('Hello world'); +$uri = Factory::createUri('http://example.com'); +$uploadedFile = Factory::createUploadedFile($stream); + +// Get PSR-17 instances (factories) +$requestFactory = Factory::getRequestFactory(); +$serverRequestFactory = Factory::getServerRequestFactory(); +$responseFactory = Factory::getResponseFactory(); +$streamFactory = Factory::getStreamFactory(); +$uriFactory = Factory::getUriFactory(); +$uploadedFileFactory = Factory::getUploadedFileFactory(); + +// By default, use the FactoryDiscovery class that detects diactoros, guzzle, slim, nyholm and sunrise (in this order of priority), +// but you can change it and add other libraries + +Factory::setFactory(new FactoryDiscovery( + 'MyApp\Psr17Factory', + FactoryDiscovery::SLIM, + FactoryDiscovery::GUZZLE, + FactoryDiscovery::DIACTOROS +)); + +//And also register directly an initialized factory +Factory::getFactory()->setResponseFactory(new FooResponseFactory()); + +$fooResponse = Factory::createResponse(); +``` + +## Dispatcher + +Minimalist PSR-15 compatible dispatcher. Used for testing purposes. + +```php +use Middlewares\Utils\Dispatcher; + +$response = Dispatcher::run([ + new Middleware1(), + new Middleware2(), + new Middleware3(), + function ($request, $next) { + $response = $next->handle($request); + return $response->withHeader('X-Foo', 'Bar'); + } +]); +``` + +## CallableHandler + +To resolve and execute a callable. It can be used as a middleware, server request handler or a callable: + +```php +use Middlewares\Utils\CallableHandler; + +$callable = new CallableHandler(function () { + return 'Hello world'; +}); + +$response = $callable(); + +echo $response->getBody(); //Hello world +``` + +## HttpErrorException + +General purpose exception used to represent HTTP errors. + +```php +use Middlewares\Utils\HttpErrorException; + +try { + $context = ['problem' => 'Something bad happened']; + throw HttpErrorException::create(500, $context); +} catch (HttpErrorException $exception) { + $context = $exception->getContext(); +} +``` + +--- + +Please see [CHANGELOG](CHANGELOG.md) for more information about recent changes and [CONTRIBUTING](CONTRIBUTING.md) for contributing details. + +The MIT License (MIT). Please see [LICENSE](LICENSE) for more information. + +[ico-version]: https://img.shields.io/packagist/v/middlewares/utils.svg?style=flat-square +[ico-license]: https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square +[ico-travis]: https://img.shields.io/travis/middlewares/utils/master.svg?style=flat-square +[ico-scrutinizer]: https://img.shields.io/scrutinizer/g/middlewares/utils.svg?style=flat-square +[ico-downloads]: https://img.shields.io/packagist/dt/middlewares/utils.svg?style=flat-square + +[link-packagist]: https://packagist.org/packages/middlewares/utils +[link-travis]: https://travis-ci.org/middlewares/utils +[link-scrutinizer]: https://scrutinizer-ci.com/g/middlewares/utils +[link-downloads]: https://packagist.org/packages/middlewares/utils diff --git a/soc/2020/daily_report/archive/app/vendor/middlewares/utils/composer.json b/soc/2020/daily_report/archive/app/vendor/middlewares/utils/composer.json new file mode 100644 index 0000000..d5b770c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/middlewares/utils/composer.json @@ -0,0 +1,57 @@ +{ + "name": "middlewares/utils", + "type": "library", + "description": "Common utils for PSR-15 middleware packages", + "license": "MIT", + "keywords": [ + "psr-7", + "psr-15", + "psr-11", + "psr-17", + "middleware", + "http" + ], + "homepage": "https://github.com/middlewares/utils", + "support": { + "issues": "https://github.com/middlewares/utils/issues" + }, + "require": { + "php": "^7.2", + "psr/http-message": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/container": "^1.0", + "psr/http-factory": "^1.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.1", + "laminas/laminas-diactoros": "^2.2", + "friendsofphp/php-cs-fixer": "^2.0", + "oscarotero/php-cs-fixer-config": "^1.0", + "squizlabs/php_codesniffer": "^3.0", + "slim/psr7": "~0.3", + "guzzlehttp/psr7": "dev-master", + "sunrise/stream": "^1.0", + "sunrise/uri": "^1.0", + "sunrise/http-message": "^1.0", + "sunrise/http-server-request": "^1.0", + "nyholm/psr7": "^1.0" + }, + "autoload": { + "psr-4": { + "Middlewares\\Utils\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "Middlewares\\Tests\\": "tests/" + } + }, + "scripts": { + "test": [ + "phpunit --coverage-text", + "phpcs" + ], + "cs-fix": "php-cs-fixer fix", + "coverage": "phpunit --coverage-html=coverage" + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/middlewares/utils/src/CallableHandler.php b/soc/2020/daily_report/archive/app/vendor/middlewares/utils/src/CallableHandler.php new file mode 100644 index 0000000..020e723 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/middlewares/utils/src/CallableHandler.php @@ -0,0 +1,101 @@ +callable = $callable; + $this->responseFactory = $responseFactory; + } + + /** + * Process a server request and return a response. + * + * @see RequestHandlerInterface + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + return $this->execute([$request]); + } + + /** + * Process a server request and return a response. + * + * @see MiddlewareInterface + */ + public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface + { + return $this->execute([$request, $handler]); + } + + /** + * Magic method to invoke the callable directly + */ + public function __invoke(): ResponseInterface + { + return $this->execute(func_get_args()); + } + + /** + * Execute the callable. + */ + private function execute(array $arguments = []): ResponseInterface + { + ob_start(); + $level = ob_get_level(); + + try { + $return = call_user_func_array($this->callable, $arguments); + + if ($return instanceof ResponseInterface) { + $response = $return; + $return = ''; + } elseif (is_null($return) + || is_scalar($return) + || (is_object($return) && method_exists($return, '__toString')) + ) { + $responseFactory = $this->responseFactory ?: Factory::getResponseFactory(); + $response = $responseFactory->createResponse(); + } else { + throw new UnexpectedValueException( + 'The value returned must be scalar or an object with __toString method' + ); + } + + while (ob_get_level() >= $level) { + $return = ob_get_clean().$return; + } + + $body = $response->getBody(); + + if ($return !== '' && $body->isWritable()) { + $body->write($return); + } + + return $response; + } catch (Exception $exception) { + while (ob_get_level() >= $level) { + ob_end_clean(); + } + + throw $exception; + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/middlewares/utils/src/Dispatcher.php b/soc/2020/daily_report/archive/app/vendor/middlewares/utils/src/Dispatcher.php new file mode 100644 index 0000000..c196441 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/middlewares/utils/src/Dispatcher.php @@ -0,0 +1,68 @@ +dispatch($request); + } + + public function __construct(array $stack) + { + $this->stack = $stack; + } + + public function handle(ServerRequestInterface $request): ResponseInterface + { + return $this->dispatch($request); + } + + /** + * Dispatches the middleware stack and returns the resulting `ResponseInterface`. + */ + public function dispatch(ServerRequestInterface $request): ResponseInterface + { + $resolved = $this->resolve(0); + + return $resolved->handle($request); + } + + private function resolve(int $index): RequestHandlerInterface + { + return new RequestHandler(function (ServerRequestInterface $request) use ($index) { + $middleware = isset($this->stack[$index]) ? $this->stack[$index] : new CallableHandler(function () { + }); + + if ($middleware instanceof Closure) { + $middleware = new CallableHandler($middleware); + } + + if (!($middleware instanceof MiddlewareInterface)) { + throw new UnexpectedValueException( + sprintf('The middleware must be an instance of %s', MiddlewareInterface::class) + ); + } + + return $middleware->process($request, $this->resolve($index + 1)); + }); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/middlewares/utils/src/Factory.php b/soc/2020/daily_report/archive/app/vendor/middlewares/utils/src/Factory.php new file mode 100644 index 0000000..a009ceb --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/middlewares/utils/src/Factory.php @@ -0,0 +1,104 @@ +getRequestFactory(); + } + + public static function createRequest(string $method, $uri): RequestInterface + { + return self::getRequestFactory()->createRequest($method, $uri); + } + + public static function getResponseFactory(): ResponseFactoryInterface + { + return self::getFactory()->getResponseFactory(); + } + + public static function createResponse(int $code = 200, string $reasonPhrase = ''): ResponseInterface + { + return self::getResponseFactory()->createResponse($code, $reasonPhrase); + } + + public static function getServerRequestFactory(): ServerRequestFactoryInterface + { + return self::getFactory()->getServerRequestFactory(); + } + + public static function createServerRequest(string $method, $uri, array $serverParams = []): ServerRequestInterface + { + return self::getServerRequestFactory()->createServerRequest($method, $uri, $serverParams); + } + + public static function getStreamFactory(): StreamFactoryInterface + { + return self::getFactory()->getStreamFactory(); + } + + public static function createStream(string $content = ''): StreamInterface + { + return self::getStreamFactory()->createStream($content); + } + + public static function getUploadedFileFactory(): UploadedFileFactoryInterface + { + return self::getFactory()->getUploadedFileFactory(); + } + + public static function createUploadedFile( + StreamInterface $stream, + int $size = null, + int $error = \UPLOAD_ERR_OK, + string $filename = null, + string $mediaType = null + ): UploadedFileInterface { + return self::getUploadedFileFactory()->createUploadedFile($stream, $size, $error, $filename, $mediaType); + } + + public static function getUriFactory(): UriFactoryInterface + { + return self::getFactory()->getUriFactory(); + } + + public static function createUri(string $uri = ''): UriInterface + { + return self::getUriFactory()->createUri($uri); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/middlewares/utils/src/FactoryDiscovery.php b/soc/2020/daily_report/archive/app/vendor/middlewares/utils/src/FactoryDiscovery.php new file mode 100644 index 0000000..321effa --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/middlewares/utils/src/FactoryDiscovery.php @@ -0,0 +1,166 @@ + 'Laminas\Diactoros\RequestFactory', + 'response' => 'Laminas\Diactoros\ResponseFactory', + 'serverRequest' => 'Laminas\Diactoros\ServerRequestFactory', + 'stream' => 'Laminas\Diactoros\StreamFactory', + 'uploadedFile' => 'Laminas\Diactoros\UploadedFileFactory', + 'uri' => 'Laminas\Diactoros\UriFactory', + ]; + const GUZZLE = 'GuzzleHttp\Psr7\HttpFactory'; + const SLIM = [ + 'request' => 'Slim\Psr7\Factory\RequestFactory', + 'response' => 'Slim\Psr7\Factory\ResponseFactory', + 'serverRequest' => 'Slim\Psr7\Factory\ServerRequestFactory', + 'stream' => 'Slim\Psr7\Factory\StreamFactory', + 'uploadedFile' => 'Slim\Psr7\Factory\UploadedFileFactory', + 'uri' => 'Slim\Psr7\Factory\UriFactory', + ]; + const NYHOLM = 'Nyholm\Psr7\Factory\Psr17Factory'; + const SUNRISE = [ + 'request' => 'Sunrise\Http\Message\RequestFactory', + 'response' => 'Sunrise\Http\Message\ResponseFactory', + 'serverRequest' => 'Sunrise\Http\ServerRequest\ServerRequestFactory', + 'stream' => 'Sunrise\Stream\StreamFactory', + 'uploadedFile' => 'Sunrise\Http\ServerRequest\UploadedFileFactory', + 'uri' => 'Sunrise\Uri\UriFactory', + ]; + + private $strategies = [ + self::DIACTOROS, + self::GUZZLE, + self::SLIM, + self::NYHOLM, + self::SUNRISE, + ]; + + private $factory; + + private $factories = []; + + public function __construct(...$strategies) + { + if (!empty($strategies)) { + $this->strategies = $strategies; + } + } + + /** + * Get the strategies + */ + public function getStrategies(): array + { + return $this->strategies; + } + + public function setRequestFactory(RequestFactoryInterface $requestFactory) + { + $this->factories['request'] = $requestFactory; + } + + public function getRequestFactory(): RequestFactoryInterface + { + return $this->getFactory('request'); + } + + public function setResponseFactory(ResponseFactoryInterface $responseFactory) + { + $this->factories['response'] = $responseFactory; + } + + public function getResponseFactory(): ResponseFactoryInterface + { + return $this->getFactory('response'); + } + + public function setServerRequestFactory(ServerRequestFactoryInterface $serverRequestFactory) + { + $this->factories['serverRequest'] = $serverRequestFactory; + } + + public function getServerRequestFactory(): ServerRequestFactoryInterface + { + return $this->getFactory('serverRequest'); + } + + public function setStreamFactory(StreamFactoryInterface $streamFactory) + { + $this->factories['stream'] = $streamFactory; + } + + public function getStreamFactory(): StreamFactoryInterface + { + return $this->getFactory('stream'); + } + + public function setUploadedFileFactory(UploadedFileFactoryInterface $uploadedFileFactory) + { + $this->factories['uploadedFile'] = $uploadedFileFactory; + } + + public function getUploadedFileFactory(): UploadedFileFactoryInterface + { + return $this->getFactory('uploadedFile'); + } + + public function setUriFactory(UriFactoryInterface $uriFactory) + { + $this->factories['uri'] = $uriFactory; + } + + public function getUriFactory(): UriFactoryInterface + { + return $this->getFactory('uri'); + } + + /** + * Create the PSR-17 factories or throw an exception + */ + private function getFactory(string $type) + { + if (!empty($this->factories[$type])) { + return $this->factories[$type]; + } + + if (!empty($this->factory)) { + return $this->factories[$type] = $this->factory; + } + + foreach ($this->strategies as $className) { + if (is_array($className) && isset($className[$type])) { + $className = $className[$type]; + + if (class_exists($className)) { + return $this->factories[$type] = new $className(); + } + + continue; + } + + if (!class_exists($className)) { + continue; + } + + return $this->factories[$type] = $this->factory = new $className(); + } + + throw new RuntimeException(sprintf('No PSR-17 factory detected to create a %s', $type)); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/middlewares/utils/src/FactoryInterface.php b/soc/2020/daily_report/archive/app/vendor/middlewares/utils/src/FactoryInterface.php new file mode 100644 index 0000000..6c6dcea --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/middlewares/utils/src/FactoryInterface.php @@ -0,0 +1,26 @@ + 'Bad Request', + 401 => 'Unauthorized', + 402 => 'Payment Required', + 403 => 'Forbidden', + 404 => 'Not Found', + 405 => 'Method Not Allowed', + 406 => 'Not Acceptable', + 407 => 'Proxy Authentication Required', + 408 => 'Request Time-out', + 409 => 'Conflict', + 410 => 'Gone', + 411 => 'Length Required', + 412 => 'Precondition Failed', + 413 => 'Request Entity Too Large', + 414 => 'Request-URI Too Large', + 415 => 'Unsupported Media Type', + 416 => 'Requested range not satisfiable', + 417 => 'Expectation Failed', + 418 => 'I\'m a teapot', + 421 => 'Misdirected Request', + 422 => 'Unprocessable Entity', + 423 => 'Locked', + 424 => 'Failed Dependency', + 425 => 'Unordered Collection', + 426 => 'Upgrade Required', + 428 => 'Precondition Required', + 429 => 'Too Many Requests', + 431 => 'Request Header Fields Too Large', + 444 => 'Connection Closed Without Response', + 451 => 'Unavailable For Legal Reasons', + // SERVER ERROR + 499 => 'Client Closed Request', + 500 => 'Internal Server Error', + 501 => 'Not Implemented', + 502 => 'Bad Gateway', + 503 => 'Service Unavailable', + 504 => 'Gateway Time-out', + 505 => 'HTTP Version not supported', + 506 => 'Variant Also Negotiates', + 507 => 'Insufficient Storage', + 508 => 'Loop Detected', + 510 => 'Not Extended', + 511 => 'Network Authentication Required', + 599 => 'Network Connect Timeout Error', + ]; + + private $context = []; + + /** + * Create and returns a new instance + * + * @param int $code A valid http error code + */ + public static function create(int $code = 500, array $context = [], Throwable $previous = null): self + { + if (!isset(self::$phrases[$code])) { + throw new RuntimeException("Http error not valid ({$code})"); + } + + $exception = new static(self::$phrases[$code], $code, $previous); + $exception->context = $context; + + return $exception; + } + + public function getContext(): array + { + return $this->context; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/middlewares/utils/src/RequestHandler.php b/soc/2020/daily_report/archive/app/vendor/middlewares/utils/src/RequestHandler.php new file mode 100644 index 0000000..08c1c0f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/middlewares/utils/src/RequestHandler.php @@ -0,0 +1,29 @@ +callback = $callback; + } + + public function handle(ServerRequestInterface $request): ResponseInterface + { + return call_user_func($this->callback, $request); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/middlewares/utils/src/RequestHandlerContainer.php b/soc/2020/daily_report/archive/app/vendor/middlewares/utils/src/RequestHandlerContainer.php new file mode 100644 index 0000000..3e739a9 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/middlewares/utils/src/RequestHandlerContainer.php @@ -0,0 +1,111 @@ +constructorArguments = $constructorArguments; + } + + public function has($id) + { + $id = $this->split($id); + + if (is_string($id)) { + return function_exists($id) || class_exists($id); + } + + return class_exists($id[0]) && method_exists($id[0], $id[1]); + } + + /** + * @param mixed $id + * @return RequestHandlerInterface + */ + public function get($id) + { + try { + $handler = $this->resolve($id); + + if ($handler instanceof RequestHandlerInterface) { + return $handler; + } + + return new CallableHandler($handler); + } catch (NotFoundExceptionInterface $exception) { + throw $exception; + } catch (Exception $exception) { + $message = sprintf('Error getting the handler %s', $id); + throw new class($message, 0, $exception) extends Exception implements ContainerExceptionInterface { + }; + } + } + + protected function resolve(string $handler) + { + $handler = $this->split($handler); + + if (is_string($handler)) { + return function_exists($handler) ? $handler : $this->createClass($handler); + } + + list($class, $method) = $handler; + + if ((new ReflectionMethod($class, $method))->isStatic()) { + return $handler; + } + + return [$this->createClass($class), $method]; + } + + /** + * Returns the instance of a class. + */ + protected function createClass(string $className): object + { + if (!class_exists($className)) { + $message = sprintf('The class %s does not exists', $className); + throw new class($message) extends Exception implements NotFoundExceptionInterface { + }; + } + + $reflection = new ReflectionClass($className); + + if ($reflection->hasMethod('__construct')) { + return $reflection->newInstanceArgs($this->constructorArguments); + } + + return $reflection->newInstance(); + } + + /** + * Slit a string to an array + * + * @return string|string[] + */ + protected function split(string $string) + { + //ClassName/Service::method + if (strpos($string, '::') === false) { + return $string; + } + + return explode('::', $string, 2); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/.hhconfig b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/.hhconfig new file mode 100644 index 0000000..0c2153c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/.hhconfig @@ -0,0 +1 @@ +assume_php=false diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/.travis.yml b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/.travis.yml new file mode 100644 index 0000000..10f8381 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/.travis.yml @@ -0,0 +1,20 @@ +sudo: false +language: php + +php: + - 5.4 + - 5.5 + - 5.6 + - 7.0 + - 7.1 + - 7.2 + - hhvm + +script: + - ./vendor/bin/phpunit + +before_install: + - travis_retry composer self-update + +install: + - composer install diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/FastRoute.hhi b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/FastRoute.hhi new file mode 100644 index 0000000..8d50738 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/FastRoute.hhi @@ -0,0 +1,126 @@ +; + } + + class RouteCollector { + public function __construct(RouteParser $routeParser, DataGenerator $dataGenerator); + public function addRoute(mixed $httpMethod, string $route, mixed $handler): void; + public function getData(): array; + } + + class Route { + public function __construct(string $httpMethod, mixed $handler, string $regex, array $variables); + public function matches(string $str): bool; + } + + interface DataGenerator { + public function addRoute(string $httpMethod, array $routeData, mixed $handler); + public function getData(): array; + } + + interface Dispatcher { + const int NOT_FOUND = 0; + const int FOUND = 1; + const int METHOD_NOT_ALLOWED = 2; + public function dispatch(string $httpMethod, string $uri): array; + } + + function simpleDispatcher( + (function(RouteCollector): void) $routeDefinitionCallback, + shape( + ?'routeParser' => classname, + ?'dataGenerator' => classname, + ?'dispatcher' => classname, + ?'routeCollector' => classname, + ) $options = shape()): Dispatcher; + + function cachedDispatcher( + (function(RouteCollector): void) $routeDefinitionCallback, + shape( + ?'routeParser' => classname, + ?'dataGenerator' => classname, + ?'dispatcher' => classname, + ?'routeCollector' => classname, + ?'cacheDisabled' => bool, + ?'cacheFile' => string, + ) $options = shape()): Dispatcher; +} + +namespace FastRoute\DataGenerator { + abstract class RegexBasedAbstract implements \FastRoute\DataGenerator { + protected abstract function getApproxChunkSize(); + protected abstract function processChunk($regexToRoutesMap); + + public function addRoute(string $httpMethod, array $routeData, mixed $handler): void; + public function getData(): array; + } + + class CharCountBased extends RegexBasedAbstract { + protected function getApproxChunkSize(): int; + protected function processChunk(array $regexToRoutesMap): array; + } + + class GroupCountBased extends RegexBasedAbstract { + protected function getApproxChunkSize(): int; + protected function processChunk(array $regexToRoutesMap): array; + } + + class GroupPosBased extends RegexBasedAbstract { + protected function getApproxChunkSize(): int; + protected function processChunk(array $regexToRoutesMap): array; + } + + class MarkBased extends RegexBasedAbstract { + protected function getApproxChunkSize(): int; + protected function processChunk(array $regexToRoutesMap): array; + } +} + +namespace FastRoute\Dispatcher { + abstract class RegexBasedAbstract implements \FastRoute\Dispatcher { + protected abstract function dispatchVariableRoute(array $routeData, string $uri): array; + + public function dispatch(string $httpMethod, string $uri): array; + } + + class GroupPosBased extends RegexBasedAbstract { + public function __construct(array $data); + protected function dispatchVariableRoute(array $routeData, string $uri): array; + } + + class GroupCountBased extends RegexBasedAbstract { + public function __construct(array $data); + protected function dispatchVariableRoute(array $routeData, string $uri): array; + } + + class CharCountBased extends RegexBasedAbstract { + public function __construct(array $data); + protected function dispatchVariableRoute(array $routeData, string $uri): array; + } + + class MarkBased extends RegexBasedAbstract { + public function __construct(array $data); + protected function dispatchVariableRoute(array $routeData, string $uri): array; + } +} + +namespace FastRoute\RouteParser { + class Std implements \FastRoute\RouteParser { + const string VARIABLE_REGEX = <<<'REGEX' +\{ + \s* ([a-zA-Z][a-zA-Z0-9_]*) \s* + (?: + : \s* ([^{}]*(?:\{(?-1)\}[^{}]*)*) + )? +\} +REGEX; + const string DEFAULT_DISPATCH_REGEX = '[^/]+'; + public function parse(string $route): array; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/LICENSE b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/LICENSE new file mode 100644 index 0000000..478e764 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/LICENSE @@ -0,0 +1,31 @@ +Copyright (c) 2013 by Nikita Popov. + +Some rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * The names of the contributors may not be used to endorse or + promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/README.md b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/README.md new file mode 100644 index 0000000..91bd466 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/README.md @@ -0,0 +1,313 @@ +FastRoute - Fast request router for PHP +======================================= + +This library provides a fast implementation of a regular expression based router. [Blog post explaining how the +implementation works and why it is fast.][blog_post] + +Install +------- + +To install with composer: + +```sh +composer require nikic/fast-route +``` + +Requires PHP 5.4 or newer. + +Usage +----- + +Here's a basic usage example: + +```php +addRoute('GET', '/users', 'get_all_users_handler'); + // {id} must be a number (\d+) + $r->addRoute('GET', '/user/{id:\d+}', 'get_user_handler'); + // The /{title} suffix is optional + $r->addRoute('GET', '/articles/{id:\d+}[/{title}]', 'get_article_handler'); +}); + +// Fetch method and URI from somewhere +$httpMethod = $_SERVER['REQUEST_METHOD']; +$uri = $_SERVER['REQUEST_URI']; + +// Strip query string (?foo=bar) and decode URI +if (false !== $pos = strpos($uri, '?')) { + $uri = substr($uri, 0, $pos); +} +$uri = rawurldecode($uri); + +$routeInfo = $dispatcher->dispatch($httpMethod, $uri); +switch ($routeInfo[0]) { + case FastRoute\Dispatcher::NOT_FOUND: + // ... 404 Not Found + break; + case FastRoute\Dispatcher::METHOD_NOT_ALLOWED: + $allowedMethods = $routeInfo[1]; + // ... 405 Method Not Allowed + break; + case FastRoute\Dispatcher::FOUND: + $handler = $routeInfo[1]; + $vars = $routeInfo[2]; + // ... call $handler with $vars + break; +} +``` + +### Defining routes + +The routes are defined by calling the `FastRoute\simpleDispatcher()` function, which accepts +a callable taking a `FastRoute\RouteCollector` instance. The routes are added by calling +`addRoute()` on the collector instance: + +```php +$r->addRoute($method, $routePattern, $handler); +``` + +The `$method` is an uppercase HTTP method string for which a certain route should match. It +is possible to specify multiple valid methods using an array: + +```php +// These two calls +$r->addRoute('GET', '/test', 'handler'); +$r->addRoute('POST', '/test', 'handler'); +// Are equivalent to this one call +$r->addRoute(['GET', 'POST'], '/test', 'handler'); +``` + +By default the `$routePattern` uses a syntax where `{foo}` specifies a placeholder with name `foo` +and matching the regex `[^/]+`. To adjust the pattern the placeholder matches, you can specify +a custom pattern by writing `{bar:[0-9]+}`. Some examples: + +```php +// Matches /user/42, but not /user/xyz +$r->addRoute('GET', '/user/{id:\d+}', 'handler'); + +// Matches /user/foobar, but not /user/foo/bar +$r->addRoute('GET', '/user/{name}', 'handler'); + +// Matches /user/foo/bar as well +$r->addRoute('GET', '/user/{name:.+}', 'handler'); +``` + +Custom patterns for route placeholders cannot use capturing groups. For example `{lang:(en|de)}` +is not a valid placeholder, because `()` is a capturing group. Instead you can use either +`{lang:en|de}` or `{lang:(?:en|de)}`. + +Furthermore parts of the route enclosed in `[...]` are considered optional, so that `/foo[bar]` +will match both `/foo` and `/foobar`. Optional parts are only supported in a trailing position, +not in the middle of a route. + +```php +// This route +$r->addRoute('GET', '/user/{id:\d+}[/{name}]', 'handler'); +// Is equivalent to these two routes +$r->addRoute('GET', '/user/{id:\d+}', 'handler'); +$r->addRoute('GET', '/user/{id:\d+}/{name}', 'handler'); + +// Multiple nested optional parts are possible as well +$r->addRoute('GET', '/user[/{id:\d+}[/{name}]]', 'handler'); + +// This route is NOT valid, because optional parts can only occur at the end +$r->addRoute('GET', '/user[/{id:\d+}]/{name}', 'handler'); +``` + +The `$handler` parameter does not necessarily have to be a callback, it could also be a controller +class name or any other kind of data you wish to associate with the route. FastRoute only tells you +which handler corresponds to your URI, how you interpret it is up to you. + +#### Shorcut methods for common request methods + +For the `GET`, `POST`, `PUT`, `PATCH`, `DELETE` and `HEAD` request methods shortcut methods are available. For example: + +```php +$r->get('/get-route', 'get_handler'); +$r->post('/post-route', 'post_handler'); +``` + +Is equivalent to: + +```php +$r->addRoute('GET', '/get-route', 'get_handler'); +$r->addRoute('POST', '/post-route', 'post_handler'); +``` + +#### Route Groups + +Additionally, you can specify routes inside of a group. All routes defined inside a group will have a common prefix. + +For example, defining your routes as: + +```php +$r->addGroup('/admin', function (RouteCollector $r) { + $r->addRoute('GET', '/do-something', 'handler'); + $r->addRoute('GET', '/do-another-thing', 'handler'); + $r->addRoute('GET', '/do-something-else', 'handler'); +}); +``` + +Will have the same result as: + + ```php +$r->addRoute('GET', '/admin/do-something', 'handler'); +$r->addRoute('GET', '/admin/do-another-thing', 'handler'); +$r->addRoute('GET', '/admin/do-something-else', 'handler'); + ``` + +Nested groups are also supported, in which case the prefixes of all the nested groups are combined. + +### Caching + +The reason `simpleDispatcher` accepts a callback for defining the routes is to allow seamless +caching. By using `cachedDispatcher` instead of `simpleDispatcher` you can cache the generated +routing data and construct the dispatcher from the cached information: + +```php +addRoute('GET', '/user/{name}/{id:[0-9]+}', 'handler0'); + $r->addRoute('GET', '/user/{id:[0-9]+}', 'handler1'); + $r->addRoute('GET', '/user/{name}', 'handler2'); +}, [ + 'cacheFile' => __DIR__ . '/route.cache', /* required */ + 'cacheDisabled' => IS_DEBUG_ENABLED, /* optional, enabled by default */ +]); +``` + +The second parameter to the function is an options array, which can be used to specify the cache +file location, among other things. + +### Dispatching a URI + +A URI is dispatched by calling the `dispatch()` method of the created dispatcher. This method +accepts the HTTP method and a URI. Getting those two bits of information (and normalizing them +appropriately) is your job - this library is not bound to the PHP web SAPIs. + +The `dispatch()` method returns an array whose first element contains a status code. It is one +of `Dispatcher::NOT_FOUND`, `Dispatcher::METHOD_NOT_ALLOWED` and `Dispatcher::FOUND`. For the +method not allowed status the second array element contains a list of HTTP methods allowed for +the supplied URI. For example: + + [FastRoute\Dispatcher::METHOD_NOT_ALLOWED, ['GET', 'POST']] + +> **NOTE:** The HTTP specification requires that a `405 Method Not Allowed` response include the +`Allow:` header to detail available methods for the requested resource. Applications using FastRoute +should use the second array element to add this header when relaying a 405 response. + +For the found status the second array element is the handler that was associated with the route +and the third array element is a dictionary of placeholder names to their values. For example: + + /* Routing against GET /user/nikic/42 */ + + [FastRoute\Dispatcher::FOUND, 'handler0', ['name' => 'nikic', 'id' => '42']] + +### Overriding the route parser and dispatcher + +The routing process makes use of three components: A route parser, a data generator and a +dispatcher. The three components adhere to the following interfaces: + +```php + 'FastRoute\\RouteParser\\Std', + 'dataGenerator' => 'FastRoute\\DataGenerator\\GroupCountBased', + 'dispatcher' => 'FastRoute\\Dispatcher\\GroupCountBased', +]); +``` + +The above options array corresponds to the defaults. By replacing `GroupCountBased` by +`GroupPosBased` you could switch to a different dispatching strategy. + +### A Note on HEAD Requests + +The HTTP spec requires servers to [support both GET and HEAD methods][2616-511]: + +> The methods GET and HEAD MUST be supported by all general-purpose servers + +To avoid forcing users to manually register HEAD routes for each resource we fallback to matching an +available GET route for a given resource. The PHP web SAPI transparently removes the entity body +from HEAD responses so this behavior has no effect on the vast majority of users. + +However, implementers using FastRoute outside the web SAPI environment (e.g. a custom server) MUST +NOT send entity bodies generated in response to HEAD requests. If you are a non-SAPI user this is +*your responsibility*; FastRoute has no purview to prevent you from breaking HTTP in such cases. + +Finally, note that applications MAY always specify their own HEAD method route for a given +resource to bypass this behavior entirely. + +### Credits + +This library is based on a router that [Levi Morrison][levi] implemented for the Aerys server. + +A large number of tests, as well as HTTP compliance considerations, were provided by [Daniel Lowrey][rdlowrey]. + + +[2616-511]: http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html#sec5.1.1 "RFC 2616 Section 5.1.1" +[blog_post]: http://nikic.github.io/2014/02/18/Fast-request-routing-using-regular-expressions.html +[levi]: https://github.com/morrisonlevi +[rdlowrey]: https://github.com/rdlowrey diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/composer.json b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/composer.json new file mode 100644 index 0000000..fb446a2 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/composer.json @@ -0,0 +1,24 @@ +{ + "name": "nikic/fast-route", + "description": "Fast request router for PHP", + "keywords": ["routing", "router"], + "license": "BSD-3-Clause", + "authors": [ + { + "name": "Nikita Popov", + "email": "nikic@php.net" + } + ], + "autoload": { + "psr-4": { + "FastRoute\\": "src/" + }, + "files": ["src/functions.php"] + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35|~5.7" + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/phpunit.xml b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/phpunit.xml new file mode 100644 index 0000000..3c807b6 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/phpunit.xml @@ -0,0 +1,24 @@ + + + + + + ./test/ + + + + + + ./src/ + + + diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/psalm.xml b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/psalm.xml new file mode 100644 index 0000000..0dca5d7 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/psalm.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/BadRouteException.php b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/BadRouteException.php new file mode 100644 index 0000000..62262ec --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/BadRouteException.php @@ -0,0 +1,7 @@ + $route) { + $suffixLen++; + $suffix .= "\t"; + + $regexes[] = '(?:' . $regex . '/(\t{' . $suffixLen . '})\t{' . ($count - $suffixLen) . '})'; + $routeMap[$suffix] = [$route->handler, $route->variables]; + } + + $regex = '~^(?|' . implode('|', $regexes) . ')$~'; + return ['regex' => $regex, 'suffix' => '/' . $suffix, 'routeMap' => $routeMap]; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/DataGenerator/GroupCountBased.php b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/DataGenerator/GroupCountBased.php new file mode 100644 index 0000000..54d9a05 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/DataGenerator/GroupCountBased.php @@ -0,0 +1,30 @@ + $route) { + $numVariables = count($route->variables); + $numGroups = max($numGroups, $numVariables); + + $regexes[] = $regex . str_repeat('()', $numGroups - $numVariables); + $routeMap[$numGroups + 1] = [$route->handler, $route->variables]; + + ++$numGroups; + } + + $regex = '~^(?|' . implode('|', $regexes) . ')$~'; + return ['regex' => $regex, 'routeMap' => $routeMap]; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/DataGenerator/GroupPosBased.php b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/DataGenerator/GroupPosBased.php new file mode 100644 index 0000000..fc4dc0a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/DataGenerator/GroupPosBased.php @@ -0,0 +1,27 @@ + $route) { + $regexes[] = $regex; + $routeMap[$offset] = [$route->handler, $route->variables]; + + $offset += count($route->variables); + } + + $regex = '~^(?:' . implode('|', $regexes) . ')$~'; + return ['regex' => $regex, 'routeMap' => $routeMap]; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/DataGenerator/MarkBased.php b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/DataGenerator/MarkBased.php new file mode 100644 index 0000000..0aebed9 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/DataGenerator/MarkBased.php @@ -0,0 +1,27 @@ + $route) { + $regexes[] = $regex . '(*MARK:' . $markName . ')'; + $routeMap[$markName] = [$route->handler, $route->variables]; + + ++$markName; + } + + $regex = '~^(?|' . implode('|', $regexes) . ')$~'; + return ['regex' => $regex, 'routeMap' => $routeMap]; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/DataGenerator/RegexBasedAbstract.php b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/DataGenerator/RegexBasedAbstract.php new file mode 100644 index 0000000..6457290 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/DataGenerator/RegexBasedAbstract.php @@ -0,0 +1,186 @@ +isStaticRoute($routeData)) { + $this->addStaticRoute($httpMethod, $routeData, $handler); + } else { + $this->addVariableRoute($httpMethod, $routeData, $handler); + } + } + + /** + * @return mixed[] + */ + public function getData() + { + if (empty($this->methodToRegexToRoutesMap)) { + return [$this->staticRoutes, []]; + } + + return [$this->staticRoutes, $this->generateVariableRouteData()]; + } + + /** + * @return mixed[] + */ + private function generateVariableRouteData() + { + $data = []; + foreach ($this->methodToRegexToRoutesMap as $method => $regexToRoutesMap) { + $chunkSize = $this->computeChunkSize(count($regexToRoutesMap)); + $chunks = array_chunk($regexToRoutesMap, $chunkSize, true); + $data[$method] = array_map([$this, 'processChunk'], $chunks); + } + return $data; + } + + /** + * @param int + * @return int + */ + private function computeChunkSize($count) + { + $numParts = max(1, round($count / $this->getApproxChunkSize())); + return (int) ceil($count / $numParts); + } + + /** + * @param mixed[] + * @return bool + */ + private function isStaticRoute($routeData) + { + return count($routeData) === 1 && is_string($routeData[0]); + } + + private function addStaticRoute($httpMethod, $routeData, $handler) + { + $routeStr = $routeData[0]; + + if (isset($this->staticRoutes[$httpMethod][$routeStr])) { + throw new BadRouteException(sprintf( + 'Cannot register two routes matching "%s" for method "%s"', + $routeStr, $httpMethod + )); + } + + if (isset($this->methodToRegexToRoutesMap[$httpMethod])) { + foreach ($this->methodToRegexToRoutesMap[$httpMethod] as $route) { + if ($route->matches($routeStr)) { + throw new BadRouteException(sprintf( + 'Static route "%s" is shadowed by previously defined variable route "%s" for method "%s"', + $routeStr, $route->regex, $httpMethod + )); + } + } + } + + $this->staticRoutes[$httpMethod][$routeStr] = $handler; + } + + private function addVariableRoute($httpMethod, $routeData, $handler) + { + list($regex, $variables) = $this->buildRegexForRoute($routeData); + + if (isset($this->methodToRegexToRoutesMap[$httpMethod][$regex])) { + throw new BadRouteException(sprintf( + 'Cannot register two routes matching "%s" for method "%s"', + $regex, $httpMethod + )); + } + + $this->methodToRegexToRoutesMap[$httpMethod][$regex] = new Route( + $httpMethod, $handler, $regex, $variables + ); + } + + /** + * @param mixed[] + * @return mixed[] + */ + private function buildRegexForRoute($routeData) + { + $regex = ''; + $variables = []; + foreach ($routeData as $part) { + if (is_string($part)) { + $regex .= preg_quote($part, '~'); + continue; + } + + list($varName, $regexPart) = $part; + + if (isset($variables[$varName])) { + throw new BadRouteException(sprintf( + 'Cannot use the same placeholder "%s" twice', $varName + )); + } + + if ($this->regexHasCapturingGroups($regexPart)) { + throw new BadRouteException(sprintf( + 'Regex "%s" for parameter "%s" contains a capturing group', + $regexPart, $varName + )); + } + + $variables[$varName] = $varName; + $regex .= '(' . $regexPart . ')'; + } + + return [$regex, $variables]; + } + + /** + * @param string + * @return bool + */ + private function regexHasCapturingGroups($regex) + { + if (false === strpos($regex, '(')) { + // Needs to have at least a ( to contain a capturing group + return false; + } + + // Semi-accurate detection for capturing groups + return (bool) preg_match( + '~ + (?: + \(\?\( + | \[ [^\]\\\\]* (?: \\\\ . [^\]\\\\]* )* \] + | \\\\ . + ) (*SKIP)(*FAIL) | + \( + (?! + \? (?! <(?![!=]) | P< | \' ) + | \* + ) + ~x', + $regex + ); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/Dispatcher.php b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/Dispatcher.php new file mode 100644 index 0000000..4ae72a3 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/Dispatcher.php @@ -0,0 +1,26 @@ + 'value', ...]] + * + * @param string $httpMethod + * @param string $uri + * + * @return array + */ + public function dispatch($httpMethod, $uri); +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/Dispatcher/CharCountBased.php b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/Dispatcher/CharCountBased.php new file mode 100644 index 0000000..ef1eec1 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/Dispatcher/CharCountBased.php @@ -0,0 +1,31 @@ +staticRouteMap, $this->variableRouteData) = $data; + } + + protected function dispatchVariableRoute($routeData, $uri) + { + foreach ($routeData as $data) { + if (!preg_match($data['regex'], $uri . $data['suffix'], $matches)) { + continue; + } + + list($handler, $varNames) = $data['routeMap'][end($matches)]; + + $vars = []; + $i = 0; + foreach ($varNames as $varName) { + $vars[$varName] = $matches[++$i]; + } + return [self::FOUND, $handler, $vars]; + } + + return [self::NOT_FOUND]; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/Dispatcher/GroupCountBased.php b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/Dispatcher/GroupCountBased.php new file mode 100644 index 0000000..493e7a9 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/Dispatcher/GroupCountBased.php @@ -0,0 +1,31 @@ +staticRouteMap, $this->variableRouteData) = $data; + } + + protected function dispatchVariableRoute($routeData, $uri) + { + foreach ($routeData as $data) { + if (!preg_match($data['regex'], $uri, $matches)) { + continue; + } + + list($handler, $varNames) = $data['routeMap'][count($matches)]; + + $vars = []; + $i = 0; + foreach ($varNames as $varName) { + $vars[$varName] = $matches[++$i]; + } + return [self::FOUND, $handler, $vars]; + } + + return [self::NOT_FOUND]; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/Dispatcher/GroupPosBased.php b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/Dispatcher/GroupPosBased.php new file mode 100644 index 0000000..498220e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/Dispatcher/GroupPosBased.php @@ -0,0 +1,33 @@ +staticRouteMap, $this->variableRouteData) = $data; + } + + protected function dispatchVariableRoute($routeData, $uri) + { + foreach ($routeData as $data) { + if (!preg_match($data['regex'], $uri, $matches)) { + continue; + } + + // find first non-empty match + for ($i = 1; '' === $matches[$i]; ++$i); + + list($handler, $varNames) = $data['routeMap'][$i]; + + $vars = []; + foreach ($varNames as $varName) { + $vars[$varName] = $matches[$i++]; + } + return [self::FOUND, $handler, $vars]; + } + + return [self::NOT_FOUND]; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/Dispatcher/MarkBased.php b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/Dispatcher/MarkBased.php new file mode 100644 index 0000000..22eb09b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/Dispatcher/MarkBased.php @@ -0,0 +1,31 @@ +staticRouteMap, $this->variableRouteData) = $data; + } + + protected function dispatchVariableRoute($routeData, $uri) + { + foreach ($routeData as $data) { + if (!preg_match($data['regex'], $uri, $matches)) { + continue; + } + + list($handler, $varNames) = $data['routeMap'][$matches['MARK']]; + + $vars = []; + $i = 0; + foreach ($varNames as $varName) { + $vars[$varName] = $matches[++$i]; + } + return [self::FOUND, $handler, $vars]; + } + + return [self::NOT_FOUND]; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/Dispatcher/RegexBasedAbstract.php b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/Dispatcher/RegexBasedAbstract.php new file mode 100644 index 0000000..206e879 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/Dispatcher/RegexBasedAbstract.php @@ -0,0 +1,88 @@ +staticRouteMap[$httpMethod][$uri])) { + $handler = $this->staticRouteMap[$httpMethod][$uri]; + return [self::FOUND, $handler, []]; + } + + $varRouteData = $this->variableRouteData; + if (isset($varRouteData[$httpMethod])) { + $result = $this->dispatchVariableRoute($varRouteData[$httpMethod], $uri); + if ($result[0] === self::FOUND) { + return $result; + } + } + + // For HEAD requests, attempt fallback to GET + if ($httpMethod === 'HEAD') { + if (isset($this->staticRouteMap['GET'][$uri])) { + $handler = $this->staticRouteMap['GET'][$uri]; + return [self::FOUND, $handler, []]; + } + if (isset($varRouteData['GET'])) { + $result = $this->dispatchVariableRoute($varRouteData['GET'], $uri); + if ($result[0] === self::FOUND) { + return $result; + } + } + } + + // If nothing else matches, try fallback routes + if (isset($this->staticRouteMap['*'][$uri])) { + $handler = $this->staticRouteMap['*'][$uri]; + return [self::FOUND, $handler, []]; + } + if (isset($varRouteData['*'])) { + $result = $this->dispatchVariableRoute($varRouteData['*'], $uri); + if ($result[0] === self::FOUND) { + return $result; + } + } + + // Find allowed methods for this URI by matching against all other HTTP methods as well + $allowedMethods = []; + + foreach ($this->staticRouteMap as $method => $uriMap) { + if ($method !== $httpMethod && isset($uriMap[$uri])) { + $allowedMethods[] = $method; + } + } + + foreach ($varRouteData as $method => $routeData) { + if ($method === $httpMethod) { + continue; + } + + $result = $this->dispatchVariableRoute($routeData, $uri); + if ($result[0] === self::FOUND) { + $allowedMethods[] = $method; + } + } + + // If there are no allowed methods the route simply does not exist + if ($allowedMethods) { + return [self::METHOD_NOT_ALLOWED, $allowedMethods]; + } + + return [self::NOT_FOUND]; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/Route.php b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/Route.php new file mode 100644 index 0000000..e1bf7dd --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/Route.php @@ -0,0 +1,47 @@ +httpMethod = $httpMethod; + $this->handler = $handler; + $this->regex = $regex; + $this->variables = $variables; + } + + /** + * Tests whether this route matches the given string. + * + * @param string $str + * + * @return bool + */ + public function matches($str) + { + $regex = '~^' . $this->regex . '$~'; + return (bool) preg_match($regex, $str); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/RouteCollector.php b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/RouteCollector.php new file mode 100644 index 0000000..c1c1762 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/RouteCollector.php @@ -0,0 +1,152 @@ +routeParser = $routeParser; + $this->dataGenerator = $dataGenerator; + $this->currentGroupPrefix = ''; + } + + /** + * Adds a route to the collection. + * + * The syntax used in the $route string depends on the used route parser. + * + * @param string|string[] $httpMethod + * @param string $route + * @param mixed $handler + */ + public function addRoute($httpMethod, $route, $handler) + { + $route = $this->currentGroupPrefix . $route; + $routeDatas = $this->routeParser->parse($route); + foreach ((array) $httpMethod as $method) { + foreach ($routeDatas as $routeData) { + $this->dataGenerator->addRoute($method, $routeData, $handler); + } + } + } + + /** + * Create a route group with a common prefix. + * + * All routes created in the passed callback will have the given group prefix prepended. + * + * @param string $prefix + * @param callable $callback + */ + public function addGroup($prefix, callable $callback) + { + $previousGroupPrefix = $this->currentGroupPrefix; + $this->currentGroupPrefix = $previousGroupPrefix . $prefix; + $callback($this); + $this->currentGroupPrefix = $previousGroupPrefix; + } + + /** + * Adds a GET route to the collection + * + * This is simply an alias of $this->addRoute('GET', $route, $handler) + * + * @param string $route + * @param mixed $handler + */ + public function get($route, $handler) + { + $this->addRoute('GET', $route, $handler); + } + + /** + * Adds a POST route to the collection + * + * This is simply an alias of $this->addRoute('POST', $route, $handler) + * + * @param string $route + * @param mixed $handler + */ + public function post($route, $handler) + { + $this->addRoute('POST', $route, $handler); + } + + /** + * Adds a PUT route to the collection + * + * This is simply an alias of $this->addRoute('PUT', $route, $handler) + * + * @param string $route + * @param mixed $handler + */ + public function put($route, $handler) + { + $this->addRoute('PUT', $route, $handler); + } + + /** + * Adds a DELETE route to the collection + * + * This is simply an alias of $this->addRoute('DELETE', $route, $handler) + * + * @param string $route + * @param mixed $handler + */ + public function delete($route, $handler) + { + $this->addRoute('DELETE', $route, $handler); + } + + /** + * Adds a PATCH route to the collection + * + * This is simply an alias of $this->addRoute('PATCH', $route, $handler) + * + * @param string $route + * @param mixed $handler + */ + public function patch($route, $handler) + { + $this->addRoute('PATCH', $route, $handler); + } + + /** + * Adds a HEAD route to the collection + * + * This is simply an alias of $this->addRoute('HEAD', $route, $handler) + * + * @param string $route + * @param mixed $handler + */ + public function head($route, $handler) + { + $this->addRoute('HEAD', $route, $handler); + } + + /** + * Returns the collected route data, as provided by the data generator. + * + * @return array + */ + public function getData() + { + return $this->dataGenerator->getData(); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/RouteParser.php b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/RouteParser.php new file mode 100644 index 0000000..6a7685c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/RouteParser.php @@ -0,0 +1,37 @@ + $segment) { + if ($segment === '' && $n !== 0) { + throw new BadRouteException('Empty optional part'); + } + + $currentRoute .= $segment; + $routeDatas[] = $this->parsePlaceholders($currentRoute); + } + return $routeDatas; + } + + /** + * Parses a route string that does not contain optional segments. + * + * @param string + * @return mixed[] + */ + private function parsePlaceholders($route) + { + if (!preg_match_all( + '~' . self::VARIABLE_REGEX . '~x', $route, $matches, + PREG_OFFSET_CAPTURE | PREG_SET_ORDER + )) { + return [$route]; + } + + $offset = 0; + $routeData = []; + foreach ($matches as $set) { + if ($set[0][1] > $offset) { + $routeData[] = substr($route, $offset, $set[0][1] - $offset); + } + $routeData[] = [ + $set[1][0], + isset($set[2]) ? trim($set[2][0]) : self::DEFAULT_DISPATCH_REGEX + ]; + $offset = $set[0][1] + strlen($set[0][0]); + } + + if ($offset !== strlen($route)) { + $routeData[] = substr($route, $offset); + } + + return $routeData; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/bootstrap.php b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/bootstrap.php new file mode 100644 index 0000000..0bce3a4 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/src/bootstrap.php @@ -0,0 +1,12 @@ + 'FastRoute\\RouteParser\\Std', + 'dataGenerator' => 'FastRoute\\DataGenerator\\GroupCountBased', + 'dispatcher' => 'FastRoute\\Dispatcher\\GroupCountBased', + 'routeCollector' => 'FastRoute\\RouteCollector', + ]; + + /** @var RouteCollector $routeCollector */ + $routeCollector = new $options['routeCollector']( + new $options['routeParser'], new $options['dataGenerator'] + ); + $routeDefinitionCallback($routeCollector); + + return new $options['dispatcher']($routeCollector->getData()); + } + + /** + * @param callable $routeDefinitionCallback + * @param array $options + * + * @return Dispatcher + */ + function cachedDispatcher(callable $routeDefinitionCallback, array $options = []) + { + $options += [ + 'routeParser' => 'FastRoute\\RouteParser\\Std', + 'dataGenerator' => 'FastRoute\\DataGenerator\\GroupCountBased', + 'dispatcher' => 'FastRoute\\Dispatcher\\GroupCountBased', + 'routeCollector' => 'FastRoute\\RouteCollector', + 'cacheDisabled' => false, + ]; + + if (!isset($options['cacheFile'])) { + throw new \LogicException('Must specify "cacheFile" option'); + } + + if (!$options['cacheDisabled'] && file_exists($options['cacheFile'])) { + $dispatchData = require $options['cacheFile']; + if (!is_array($dispatchData)) { + throw new \RuntimeException('Invalid cache file "' . $options['cacheFile'] . '"'); + } + return new $options['dispatcher']($dispatchData); + } + + $routeCollector = new $options['routeCollector']( + new $options['routeParser'], new $options['dataGenerator'] + ); + $routeDefinitionCallback($routeCollector); + + /** @var RouteCollector $routeCollector */ + $dispatchData = $routeCollector->getData(); + if (!$options['cacheDisabled']) { + file_put_contents( + $options['cacheFile'], + ' $this->getDataGeneratorClass(), + 'dispatcher' => $this->getDispatcherClass() + ]; + } + + /** + * @dataProvider provideFoundDispatchCases + */ + public function testFoundDispatches($method, $uri, $callback, $handler, $argDict) + { + $dispatcher = \FastRoute\simpleDispatcher($callback, $this->generateDispatcherOptions()); + $info = $dispatcher->dispatch($method, $uri); + $this->assertSame($dispatcher::FOUND, $info[0]); + $this->assertSame($handler, $info[1]); + $this->assertSame($argDict, $info[2]); + } + + /** + * @dataProvider provideNotFoundDispatchCases + */ + public function testNotFoundDispatches($method, $uri, $callback) + { + $dispatcher = \FastRoute\simpleDispatcher($callback, $this->generateDispatcherOptions()); + $routeInfo = $dispatcher->dispatch($method, $uri); + $this->assertArrayNotHasKey(1, $routeInfo, + 'NOT_FOUND result must only contain a single element in the returned info array' + ); + $this->assertSame($dispatcher::NOT_FOUND, $routeInfo[0]); + } + + /** + * @dataProvider provideMethodNotAllowedDispatchCases + */ + public function testMethodNotAllowedDispatches($method, $uri, $callback, $availableMethods) + { + $dispatcher = \FastRoute\simpleDispatcher($callback, $this->generateDispatcherOptions()); + $routeInfo = $dispatcher->dispatch($method, $uri); + $this->assertArrayHasKey(1, $routeInfo, + 'METHOD_NOT_ALLOWED result must return an array of allowed methods at index 1' + ); + + list($routedStatus, $methodArray) = $dispatcher->dispatch($method, $uri); + $this->assertSame($dispatcher::METHOD_NOT_ALLOWED, $routedStatus); + $this->assertSame($availableMethods, $methodArray); + } + + /** + * @expectedException \FastRoute\BadRouteException + * @expectedExceptionMessage Cannot use the same placeholder "test" twice + */ + public function testDuplicateVariableNameError() + { + \FastRoute\simpleDispatcher(function (RouteCollector $r) { + $r->addRoute('GET', '/foo/{test}/{test:\d+}', 'handler0'); + }, $this->generateDispatcherOptions()); + } + + /** + * @expectedException \FastRoute\BadRouteException + * @expectedExceptionMessage Cannot register two routes matching "/user/([^/]+)" for method "GET" + */ + public function testDuplicateVariableRoute() + { + \FastRoute\simpleDispatcher(function (RouteCollector $r) { + $r->addRoute('GET', '/user/{id}', 'handler0'); // oops, forgot \d+ restriction ;) + $r->addRoute('GET', '/user/{name}', 'handler1'); + }, $this->generateDispatcherOptions()); + } + + /** + * @expectedException \FastRoute\BadRouteException + * @expectedExceptionMessage Cannot register two routes matching "/user" for method "GET" + */ + public function testDuplicateStaticRoute() + { + \FastRoute\simpleDispatcher(function (RouteCollector $r) { + $r->addRoute('GET', '/user', 'handler0'); + $r->addRoute('GET', '/user', 'handler1'); + }, $this->generateDispatcherOptions()); + } + + /** + * @expectedException \FastRoute\BadRouteException + * @expectedExceptionMessage Static route "/user/nikic" is shadowed by previously defined variable route "/user/([^/]+)" for method "GET" + */ + public function testShadowedStaticRoute() + { + \FastRoute\simpleDispatcher(function (RouteCollector $r) { + $r->addRoute('GET', '/user/{name}', 'handler0'); + $r->addRoute('GET', '/user/nikic', 'handler1'); + }, $this->generateDispatcherOptions()); + } + + /** + * @expectedException \FastRoute\BadRouteException + * @expectedExceptionMessage Regex "(en|de)" for parameter "lang" contains a capturing group + */ + public function testCapturing() + { + \FastRoute\simpleDispatcher(function (RouteCollector $r) { + $r->addRoute('GET', '/{lang:(en|de)}', 'handler0'); + }, $this->generateDispatcherOptions()); + } + + public function provideFoundDispatchCases() + { + $cases = []; + + // 0 --------------------------------------------------------------------------------------> + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '/resource/123/456', 'handler0'); + }; + + $method = 'GET'; + $uri = '/resource/123/456'; + $handler = 'handler0'; + $argDict = []; + + $cases[] = [$method, $uri, $callback, $handler, $argDict]; + + // 1 --------------------------------------------------------------------------------------> + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '/handler0', 'handler0'); + $r->addRoute('GET', '/handler1', 'handler1'); + $r->addRoute('GET', '/handler2', 'handler2'); + }; + + $method = 'GET'; + $uri = '/handler2'; + $handler = 'handler2'; + $argDict = []; + + $cases[] = [$method, $uri, $callback, $handler, $argDict]; + + // 2 --------------------------------------------------------------------------------------> + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '/user/{name}/{id:[0-9]+}', 'handler0'); + $r->addRoute('GET', '/user/{id:[0-9]+}', 'handler1'); + $r->addRoute('GET', '/user/{name}', 'handler2'); + }; + + $method = 'GET'; + $uri = '/user/rdlowrey'; + $handler = 'handler2'; + $argDict = ['name' => 'rdlowrey']; + + $cases[] = [$method, $uri, $callback, $handler, $argDict]; + + // 3 --------------------------------------------------------------------------------------> + + // reuse $callback from #2 + + $method = 'GET'; + $uri = '/user/12345'; + $handler = 'handler1'; + $argDict = ['id' => '12345']; + + $cases[] = [$method, $uri, $callback, $handler, $argDict]; + + // 4 --------------------------------------------------------------------------------------> + + // reuse $callback from #3 + + $method = 'GET'; + $uri = '/user/NaN'; + $handler = 'handler2'; + $argDict = ['name' => 'NaN']; + + $cases[] = [$method, $uri, $callback, $handler, $argDict]; + + // 5 --------------------------------------------------------------------------------------> + + // reuse $callback from #4 + + $method = 'GET'; + $uri = '/user/rdlowrey/12345'; + $handler = 'handler0'; + $argDict = ['name' => 'rdlowrey', 'id' => '12345']; + + $cases[] = [$method, $uri, $callback, $handler, $argDict]; + + // 6 --------------------------------------------------------------------------------------> + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '/user/{id:[0-9]+}', 'handler0'); + $r->addRoute('GET', '/user/12345/extension', 'handler1'); + $r->addRoute('GET', '/user/{id:[0-9]+}.{extension}', 'handler2'); + }; + + $method = 'GET'; + $uri = '/user/12345.svg'; + $handler = 'handler2'; + $argDict = ['id' => '12345', 'extension' => 'svg']; + + $cases[] = [$method, $uri, $callback, $handler, $argDict]; + + // 7 ----- Test GET method fallback on HEAD route miss ------------------------------------> + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '/user/{name}', 'handler0'); + $r->addRoute('GET', '/user/{name}/{id:[0-9]+}', 'handler1'); + $r->addRoute('GET', '/static0', 'handler2'); + $r->addRoute('GET', '/static1', 'handler3'); + $r->addRoute('HEAD', '/static1', 'handler4'); + }; + + $method = 'HEAD'; + $uri = '/user/rdlowrey'; + $handler = 'handler0'; + $argDict = ['name' => 'rdlowrey']; + + $cases[] = [$method, $uri, $callback, $handler, $argDict]; + + // 8 ----- Test GET method fallback on HEAD route miss ------------------------------------> + + // reuse $callback from #7 + + $method = 'HEAD'; + $uri = '/user/rdlowrey/1234'; + $handler = 'handler1'; + $argDict = ['name' => 'rdlowrey', 'id' => '1234']; + + $cases[] = [$method, $uri, $callback, $handler, $argDict]; + + // 9 ----- Test GET method fallback on HEAD route miss ------------------------------------> + + // reuse $callback from #8 + + $method = 'HEAD'; + $uri = '/static0'; + $handler = 'handler2'; + $argDict = []; + + $cases[] = [$method, $uri, $callback, $handler, $argDict]; + + // 10 ---- Test existing HEAD route used if available (no fallback) -----------------------> + + // reuse $callback from #9 + + $method = 'HEAD'; + $uri = '/static1'; + $handler = 'handler4'; + $argDict = []; + + $cases[] = [$method, $uri, $callback, $handler, $argDict]; + + // 11 ---- More specified routes are not shadowed by less specific of another method ------> + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '/user/{name}', 'handler0'); + $r->addRoute('POST', '/user/{name:[a-z]+}', 'handler1'); + }; + + $method = 'POST'; + $uri = '/user/rdlowrey'; + $handler = 'handler1'; + $argDict = ['name' => 'rdlowrey']; + + $cases[] = [$method, $uri, $callback, $handler, $argDict]; + + // 12 ---- Handler of more specific routes is used, if it occurs first --------------------> + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '/user/{name}', 'handler0'); + $r->addRoute('POST', '/user/{name:[a-z]+}', 'handler1'); + $r->addRoute('POST', '/user/{name}', 'handler2'); + }; + + $method = 'POST'; + $uri = '/user/rdlowrey'; + $handler = 'handler1'; + $argDict = ['name' => 'rdlowrey']; + + $cases[] = [$method, $uri, $callback, $handler, $argDict]; + + // 13 ---- Route with constant suffix -----------------------------------------------------> + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '/user/{name}', 'handler0'); + $r->addRoute('GET', '/user/{name}/edit', 'handler1'); + }; + + $method = 'GET'; + $uri = '/user/rdlowrey/edit'; + $handler = 'handler1'; + $argDict = ['name' => 'rdlowrey']; + + $cases[] = [$method, $uri, $callback, $handler, $argDict]; + + // 14 ---- Handle multiple methods with the same handler ----------------------------------> + + $callback = function (RouteCollector $r) { + $r->addRoute(['GET', 'POST'], '/user', 'handlerGetPost'); + $r->addRoute(['DELETE'], '/user', 'handlerDelete'); + $r->addRoute([], '/user', 'handlerNone'); + }; + + $argDict = []; + $cases[] = ['GET', '/user', $callback, 'handlerGetPost', $argDict]; + $cases[] = ['POST', '/user', $callback, 'handlerGetPost', $argDict]; + $cases[] = ['DELETE', '/user', $callback, 'handlerDelete', $argDict]; + + // 17 ---- + + $callback = function (RouteCollector $r) { + $r->addRoute('POST', '/user.json', 'handler0'); + $r->addRoute('GET', '/{entity}.json', 'handler1'); + }; + + $cases[] = ['GET', '/user.json', $callback, 'handler1', ['entity' => 'user']]; + + // 18 ---- + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '', 'handler0'); + }; + + $cases[] = ['GET', '', $callback, 'handler0', []]; + + // 19 ---- + + $callback = function (RouteCollector $r) { + $r->addRoute('HEAD', '/a/{foo}', 'handler0'); + $r->addRoute('GET', '/b/{foo}', 'handler1'); + }; + + $cases[] = ['HEAD', '/b/bar', $callback, 'handler1', ['foo' => 'bar']]; + + // 20 ---- + + $callback = function (RouteCollector $r) { + $r->addRoute('HEAD', '/a', 'handler0'); + $r->addRoute('GET', '/b', 'handler1'); + }; + + $cases[] = ['HEAD', '/b', $callback, 'handler1', []]; + + // 21 ---- + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '/foo', 'handler0'); + $r->addRoute('HEAD', '/{bar}', 'handler1'); + }; + + $cases[] = ['HEAD', '/foo', $callback, 'handler1', ['bar' => 'foo']]; + + // 22 ---- + + $callback = function (RouteCollector $r) { + $r->addRoute('*', '/user', 'handler0'); + $r->addRoute('*', '/{user}', 'handler1'); + $r->addRoute('GET', '/user', 'handler2'); + }; + + $cases[] = ['GET', '/user', $callback, 'handler2', []]; + + // 23 ---- + + $callback = function (RouteCollector $r) { + $r->addRoute('*', '/user', 'handler0'); + $r->addRoute('GET', '/user', 'handler1'); + }; + + $cases[] = ['POST', '/user', $callback, 'handler0', []]; + + // 24 ---- + + $cases[] = ['HEAD', '/user', $callback, 'handler1', []]; + + // 25 ---- + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '/{bar}', 'handler0'); + $r->addRoute('*', '/foo', 'handler1'); + }; + + $cases[] = ['GET', '/foo', $callback, 'handler0', ['bar' => 'foo']]; + + // 26 ---- + + $callback = function(RouteCollector $r) { + $r->addRoute('GET', '/user', 'handler0'); + $r->addRoute('*', '/{foo:.*}', 'handler1'); + }; + + $cases[] = ['POST', '/bar', $callback, 'handler1', ['foo' => 'bar']]; + + // x --------------------------------------------------------------------------------------> + + return $cases; + } + + public function provideNotFoundDispatchCases() + { + $cases = []; + + // 0 --------------------------------------------------------------------------------------> + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '/resource/123/456', 'handler0'); + }; + + $method = 'GET'; + $uri = '/not-found'; + + $cases[] = [$method, $uri, $callback]; + + // 1 --------------------------------------------------------------------------------------> + + // reuse callback from #0 + $method = 'POST'; + $uri = '/not-found'; + + $cases[] = [$method, $uri, $callback]; + + // 2 --------------------------------------------------------------------------------------> + + // reuse callback from #1 + $method = 'PUT'; + $uri = '/not-found'; + + $cases[] = [$method, $uri, $callback]; + + // 3 --------------------------------------------------------------------------------------> + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '/handler0', 'handler0'); + $r->addRoute('GET', '/handler1', 'handler1'); + $r->addRoute('GET', '/handler2', 'handler2'); + }; + + $method = 'GET'; + $uri = '/not-found'; + + $cases[] = [$method, $uri, $callback]; + + // 4 --------------------------------------------------------------------------------------> + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '/user/{name}/{id:[0-9]+}', 'handler0'); + $r->addRoute('GET', '/user/{id:[0-9]+}', 'handler1'); + $r->addRoute('GET', '/user/{name}', 'handler2'); + }; + + $method = 'GET'; + $uri = '/not-found'; + + $cases[] = [$method, $uri, $callback]; + + // 5 --------------------------------------------------------------------------------------> + + // reuse callback from #4 + $method = 'GET'; + $uri = '/user/rdlowrey/12345/not-found'; + + $cases[] = [$method, $uri, $callback]; + + // 6 --------------------------------------------------------------------------------------> + + // reuse callback from #5 + $method = 'HEAD'; + + $cases[] = [$method, $uri, $callback]; + + // x --------------------------------------------------------------------------------------> + + return $cases; + } + + public function provideMethodNotAllowedDispatchCases() + { + $cases = []; + + // 0 --------------------------------------------------------------------------------------> + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '/resource/123/456', 'handler0'); + }; + + $method = 'POST'; + $uri = '/resource/123/456'; + $allowedMethods = ['GET']; + + $cases[] = [$method, $uri, $callback, $allowedMethods]; + + // 1 --------------------------------------------------------------------------------------> + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '/resource/123/456', 'handler0'); + $r->addRoute('POST', '/resource/123/456', 'handler1'); + $r->addRoute('PUT', '/resource/123/456', 'handler2'); + $r->addRoute('*', '/', 'handler3'); + }; + + $method = 'DELETE'; + $uri = '/resource/123/456'; + $allowedMethods = ['GET', 'POST', 'PUT']; + + $cases[] = [$method, $uri, $callback, $allowedMethods]; + + // 2 --------------------------------------------------------------------------------------> + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '/user/{name}/{id:[0-9]+}', 'handler0'); + $r->addRoute('POST', '/user/{name}/{id:[0-9]+}', 'handler1'); + $r->addRoute('PUT', '/user/{name}/{id:[0-9]+}', 'handler2'); + $r->addRoute('PATCH', '/user/{name}/{id:[0-9]+}', 'handler3'); + }; + + $method = 'DELETE'; + $uri = '/user/rdlowrey/42'; + $allowedMethods = ['GET', 'POST', 'PUT', 'PATCH']; + + $cases[] = [$method, $uri, $callback, $allowedMethods]; + + // 3 --------------------------------------------------------------------------------------> + + $callback = function (RouteCollector $r) { + $r->addRoute('POST', '/user/{name}', 'handler1'); + $r->addRoute('PUT', '/user/{name:[a-z]+}', 'handler2'); + $r->addRoute('PATCH', '/user/{name:[a-z]+}', 'handler3'); + }; + + $method = 'GET'; + $uri = '/user/rdlowrey'; + $allowedMethods = ['POST', 'PUT', 'PATCH']; + + $cases[] = [$method, $uri, $callback, $allowedMethods]; + + // 4 --------------------------------------------------------------------------------------> + + $callback = function (RouteCollector $r) { + $r->addRoute(['GET', 'POST'], '/user', 'handlerGetPost'); + $r->addRoute(['DELETE'], '/user', 'handlerDelete'); + $r->addRoute([], '/user', 'handlerNone'); + }; + + $cases[] = ['PUT', '/user', $callback, ['GET', 'POST', 'DELETE']]; + + // 5 + + $callback = function (RouteCollector $r) { + $r->addRoute('POST', '/user.json', 'handler0'); + $r->addRoute('GET', '/{entity}.json', 'handler1'); + }; + + $cases[] = ['PUT', '/user.json', $callback, ['POST', 'GET']]; + + // x --------------------------------------------------------------------------------------> + + return $cases; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/Dispatcher/GroupCountBasedTest.php b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/Dispatcher/GroupCountBasedTest.php new file mode 100644 index 0000000..f821ef5 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/Dispatcher/GroupCountBasedTest.php @@ -0,0 +1,16 @@ +markTestSkipped('PHP 5.6 required for MARK support'); + } + } + + protected function getDispatcherClass() + { + return 'FastRoute\\Dispatcher\\MarkBased'; + } + + protected function getDataGeneratorClass() + { + return 'FastRoute\\DataGenerator\\MarkBased'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/HackTypechecker/HackTypecheckerTest.php b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/HackTypechecker/HackTypecheckerTest.php new file mode 100644 index 0000000..b6fc53f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/HackTypechecker/HackTypecheckerTest.php @@ -0,0 +1,44 @@ +markTestSkipped('HHVM only'); + } + if (!version_compare(HHVM_VERSION, '3.9.0', '>=')) { + $this->markTestSkipped('classname requires HHVM 3.9+'); + } + + // The typechecker recurses the whole tree, so it makes sure + // that everything in fixtures/ is valid when this runs. + + $output = []; + $exit_code = null; + exec( + 'hh_server --check ' . escapeshellarg(__DIR__ . '/../../') . ' 2>&1', + $output, + $exit_code + ); + if ($exit_code === self::SERVER_ALREADY_RUNNING_CODE) { + $this->assertTrue( + $recurse, + 'Typechecker still running after running hh_client stop' + ); + // Server already running - 3.10 => 3.11 regression: + // https://github.com/facebook/hhvm/issues/6646 + exec('hh_client stop 2>/dev/null'); + $this->testTypechecks(/* recurse = */ false); + return; + + } + $this->assertSame(0, $exit_code, implode("\n", $output)); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/HackTypechecker/fixtures/all_options.php b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/HackTypechecker/fixtures/all_options.php new file mode 100644 index 0000000..05a9af2 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/HackTypechecker/fixtures/all_options.php @@ -0,0 +1,29 @@ + {}, + shape( + 'routeParser' => \FastRoute\RouteParser\Std::class, + 'dataGenerator' => \FastRoute\DataGenerator\GroupCountBased::class, + 'dispatcher' => \FastRoute\Dispatcher\GroupCountBased::class, + 'routeCollector' => \FastRoute\RouteCollector::class, + ), + ); +} + +function all_options_cached(): \FastRoute\Dispatcher { + return \FastRoute\cachedDispatcher( + $collector ==> {}, + shape( + 'routeParser' => \FastRoute\RouteParser\Std::class, + 'dataGenerator' => \FastRoute\DataGenerator\GroupCountBased::class, + 'dispatcher' => \FastRoute\Dispatcher\GroupCountBased::class, + 'routeCollector' => \FastRoute\RouteCollector::class, + 'cacheFile' => '/dev/null', + 'cacheDisabled' => false, + ), + ); +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/HackTypechecker/fixtures/empty_options.php b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/HackTypechecker/fixtures/empty_options.php new file mode 100644 index 0000000..61eb541 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/HackTypechecker/fixtures/empty_options.php @@ -0,0 +1,11 @@ + {}, shape()); +} + +function empty_options_cached(): \FastRoute\Dispatcher { + return \FastRoute\cachedDispatcher($collector ==> {}, shape()); +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/HackTypechecker/fixtures/no_options.php b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/HackTypechecker/fixtures/no_options.php new file mode 100644 index 0000000..44b5422 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/HackTypechecker/fixtures/no_options.php @@ -0,0 +1,11 @@ + {}); +} + +function no_options_cached(): \FastRoute\Dispatcher { + return \FastRoute\cachedDispatcher($collector ==> {}); +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/RouteCollectorTest.php b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/RouteCollectorTest.php new file mode 100644 index 0000000..cc54407 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/RouteCollectorTest.php @@ -0,0 +1,108 @@ +delete('/delete', 'delete'); + $r->get('/get', 'get'); + $r->head('/head', 'head'); + $r->patch('/patch', 'patch'); + $r->post('/post', 'post'); + $r->put('/put', 'put'); + + $expected = [ + ['DELETE', '/delete', 'delete'], + ['GET', '/get', 'get'], + ['HEAD', '/head', 'head'], + ['PATCH', '/patch', 'patch'], + ['POST', '/post', 'post'], + ['PUT', '/put', 'put'], + ]; + + $this->assertSame($expected, $r->routes); + } + + public function testGroups() + { + $r = new DummyRouteCollector(); + + $r->delete('/delete', 'delete'); + $r->get('/get', 'get'); + $r->head('/head', 'head'); + $r->patch('/patch', 'patch'); + $r->post('/post', 'post'); + $r->put('/put', 'put'); + + $r->addGroup('/group-one', function (DummyRouteCollector $r) { + $r->delete('/delete', 'delete'); + $r->get('/get', 'get'); + $r->head('/head', 'head'); + $r->patch('/patch', 'patch'); + $r->post('/post', 'post'); + $r->put('/put', 'put'); + + $r->addGroup('/group-two', function (DummyRouteCollector $r) { + $r->delete('/delete', 'delete'); + $r->get('/get', 'get'); + $r->head('/head', 'head'); + $r->patch('/patch', 'patch'); + $r->post('/post', 'post'); + $r->put('/put', 'put'); + }); + }); + + $r->addGroup('/admin', function (DummyRouteCollector $r) { + $r->get('-some-info', 'admin-some-info'); + }); + $r->addGroup('/admin-', function (DummyRouteCollector $r) { + $r->get('more-info', 'admin-more-info'); + }); + + $expected = [ + ['DELETE', '/delete', 'delete'], + ['GET', '/get', 'get'], + ['HEAD', '/head', 'head'], + ['PATCH', '/patch', 'patch'], + ['POST', '/post', 'post'], + ['PUT', '/put', 'put'], + ['DELETE', '/group-one/delete', 'delete'], + ['GET', '/group-one/get', 'get'], + ['HEAD', '/group-one/head', 'head'], + ['PATCH', '/group-one/patch', 'patch'], + ['POST', '/group-one/post', 'post'], + ['PUT', '/group-one/put', 'put'], + ['DELETE', '/group-one/group-two/delete', 'delete'], + ['GET', '/group-one/group-two/get', 'get'], + ['HEAD', '/group-one/group-two/head', 'head'], + ['PATCH', '/group-one/group-two/patch', 'patch'], + ['POST', '/group-one/group-two/post', 'post'], + ['PUT', '/group-one/group-two/put', 'put'], + ['GET', '/admin-some-info', 'admin-some-info'], + ['GET', '/admin-more-info', 'admin-more-info'], + ]; + + $this->assertSame($expected, $r->routes); + } +} + +class DummyRouteCollector extends RouteCollector +{ + public $routes = []; + + public function __construct() + { + } + + public function addRoute($method, $route, $handler) + { + $route = $this->currentGroupPrefix . $route; + $this->routes[] = [$method, $route, $handler]; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/RouteParser/StdTest.php b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/RouteParser/StdTest.php new file mode 100644 index 0000000..e13e4de --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/RouteParser/StdTest.php @@ -0,0 +1,154 @@ +parse($routeString); + $this->assertSame($expectedRouteDatas, $routeDatas); + } + + /** @dataProvider provideTestParseError */ + public function testParseError($routeString, $expectedExceptionMessage) + { + $parser = new Std(); + $this->setExpectedException('FastRoute\\BadRouteException', $expectedExceptionMessage); + $parser->parse($routeString); + } + + public function provideTestParse() + { + return [ + [ + '/test', + [ + ['/test'], + ] + ], + [ + '/test/{param}', + [ + ['/test/', ['param', '[^/]+']], + ] + ], + [ + '/te{ param }st', + [ + ['/te', ['param', '[^/]+'], 'st'] + ] + ], + [ + '/test/{param1}/test2/{param2}', + [ + ['/test/', ['param1', '[^/]+'], '/test2/', ['param2', '[^/]+']] + ] + ], + [ + '/test/{param:\d+}', + [ + ['/test/', ['param', '\d+']] + ] + ], + [ + '/test/{ param : \d{1,9} }', + [ + ['/test/', ['param', '\d{1,9}']] + ] + ], + [ + '/test[opt]', + [ + ['/test'], + ['/testopt'], + ] + ], + [ + '/test[/{param}]', + [ + ['/test'], + ['/test/', ['param', '[^/]+']], + ] + ], + [ + '/{param}[opt]', + [ + ['/', ['param', '[^/]+']], + ['/', ['param', '[^/]+'], 'opt'] + ] + ], + [ + '/test[/{name}[/{id:[0-9]+}]]', + [ + ['/test'], + ['/test/', ['name', '[^/]+']], + ['/test/', ['name', '[^/]+'], '/', ['id', '[0-9]+']], + ] + ], + [ + '', + [ + [''], + ] + ], + [ + '[test]', + [ + [''], + ['test'], + ] + ], + [ + '/{foo-bar}', + [ + ['/', ['foo-bar', '[^/]+']] + ] + ], + [ + '/{_foo:.*}', + [ + ['/', ['_foo', '.*']] + ] + ], + ]; + } + + public function provideTestParseError() + { + return [ + [ + '/test[opt', + "Number of opening '[' and closing ']' does not match" + ], + [ + '/test[opt[opt2]', + "Number of opening '[' and closing ']' does not match" + ], + [ + '/testopt]', + "Number of opening '[' and closing ']' does not match" + ], + [ + '/test[]', + 'Empty optional part' + ], + [ + '/test[[opt]]', + 'Empty optional part' + ], + [ + '[[test]]', + 'Empty optional part' + ], + [ + '/test[/opt]/required', + 'Optional segments can only occur at the end of a route' + ], + ]; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/bootstrap.php b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/bootstrap.php new file mode 100644 index 0000000..3023f41 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/fast-route/test/bootstrap.php @@ -0,0 +1,11 @@ += 7.0; for parsing PHP 5.2 to PHP 7.4). + +[Documentation for version 3.x][doc_3_x] (unsupported; for running on PHP >= 5.5; for parsing PHP 5.2 to PHP 7.2). + +Features +-------- + +The main features provided by this library are: + + * Parsing PHP 5 and PHP 7 code into an abstract syntax tree (AST). + * Invalid code can be parsed into a partial AST. + * The AST contains accurate location information. + * Dumping the AST in human-readable form. + * Converting an AST back to PHP code. + * Experimental: Formatting can be preserved for partially changed ASTs. + * Infrastructure to traverse and modify ASTs. + * Resolution of namespaced names. + * Evaluation of constant expressions. + * Builders to simplify AST construction for code generation. + * Converting an AST into JSON and back. + +Quick Start +----------- + +Install the library using [composer](https://getcomposer.org): + + php composer.phar require nikic/php-parser + +Parse some PHP code into an AST and dump the result in human-readable form: + +```php +create(ParserFactory::PREFER_PHP7); +try { + $ast = $parser->parse($code); +} catch (Error $error) { + echo "Parse error: {$error->getMessage()}\n"; + return; +} + +$dumper = new NodeDumper; +echo $dumper->dump($ast) . "\n"; +``` + +This dumps an AST looking something like this: + +``` +array( + 0: Stmt_Function( + byRef: false + name: Identifier( + name: test + ) + params: array( + 0: Param( + type: null + byRef: false + variadic: false + var: Expr_Variable( + name: foo + ) + default: null + ) + ) + returnType: null + stmts: array( + 0: Stmt_Expression( + expr: Expr_FuncCall( + name: Name( + parts: array( + 0: var_dump + ) + ) + args: array( + 0: Arg( + value: Expr_Variable( + name: foo + ) + byRef: false + unpack: false + ) + ) + ) + ) + ) + ) +) +``` + +Let's traverse the AST and perform some kind of modification. For example, drop all function bodies: + +```php +use PhpParser\Node; +use PhpParser\Node\Stmt\Function_; +use PhpParser\NodeTraverser; +use PhpParser\NodeVisitorAbstract; + +$traverser = new NodeTraverser(); +$traverser->addVisitor(new class extends NodeVisitorAbstract { + public function enterNode(Node $node) { + if ($node instanceof Function_) { + // Clean out the function body + $node->stmts = []; + } + } +}); + +$ast = $traverser->traverse($ast); +echo $dumper->dump($ast) . "\n"; +``` + +This gives us an AST where the `Function_::$stmts` are empty: + +``` +array( + 0: Stmt_Function( + byRef: false + name: Identifier( + name: test + ) + params: array( + 0: Param( + type: null + byRef: false + variadic: false + var: Expr_Variable( + name: foo + ) + default: null + ) + ) + returnType: null + stmts: array( + ) + ) +) +``` + +Finally, we can convert the new AST back to PHP code: + +```php +use PhpParser\PrettyPrinter; + +$prettyPrinter = new PrettyPrinter\Standard; +echo $prettyPrinter->prettyPrintFile($ast); +``` + +This gives us our original code, minus the `var_dump()` call inside the function: + +```php + [ + 'startLine', 'endLine', 'startFilePos', 'endFilePos', 'comments' +]]); +$parser = (new PhpParser\ParserFactory)->create( + PhpParser\ParserFactory::PREFER_PHP7, + $lexer +); +$dumper = new PhpParser\NodeDumper([ + 'dumpComments' => true, + 'dumpPositions' => $attributes['with-positions'], +]); +$prettyPrinter = new PhpParser\PrettyPrinter\Standard; + +$traverser = new PhpParser\NodeTraverser(); +$traverser->addVisitor(new PhpParser\NodeVisitor\NameResolver); + +foreach ($files as $file) { + if (strpos($file, ' Code $code\n"); + } else { + if (!file_exists($file)) { + fwrite(STDERR, "File $file does not exist.\n"); + exit(1); + } + + $code = file_get_contents($file); + fwrite(STDERR, "====> File $file:\n"); + } + + if ($attributes['with-recovery']) { + $errorHandler = new PhpParser\ErrorHandler\Collecting; + $stmts = $parser->parse($code, $errorHandler); + foreach ($errorHandler->getErrors() as $error) { + $message = formatErrorMessage($error, $code, $attributes['with-column-info']); + fwrite(STDERR, $message . "\n"); + } + if (null === $stmts) { + continue; + } + } else { + try { + $stmts = $parser->parse($code); + } catch (PhpParser\Error $error) { + $message = formatErrorMessage($error, $code, $attributes['with-column-info']); + fwrite(STDERR, $message . "\n"); + exit(1); + } + } + + foreach ($operations as $operation) { + if ('dump' === $operation) { + fwrite(STDERR, "==> Node dump:\n"); + echo $dumper->dump($stmts, $code), "\n"; + } elseif ('pretty-print' === $operation) { + fwrite(STDERR, "==> Pretty print:\n"); + echo $prettyPrinter->prettyPrintFile($stmts), "\n"; + } elseif ('json-dump' === $operation) { + fwrite(STDERR, "==> JSON dump:\n"); + echo json_encode($stmts, JSON_PRETTY_PRINT), "\n"; + } elseif ('var-dump' === $operation) { + fwrite(STDERR, "==> var_dump():\n"); + var_dump($stmts); + } elseif ('resolve-names' === $operation) { + fwrite(STDERR, "==> Resolved names.\n"); + $stmts = $traverser->traverse($stmts); + } + } +} + +function formatErrorMessage(PhpParser\Error $e, $code, $withColumnInfo) { + if ($withColumnInfo && $e->hasColumnInfo()) { + return $e->getMessageWithColumnInfo($code); + } else { + return $e->getMessage(); + } +} + +function showHelp($error = '') { + if ($error) { + fwrite(STDERR, $error . "\n\n"); + } + fwrite($error ? STDERR : STDOUT, << false, + 'with-positions' => false, + 'with-recovery' => false, + ]; + + array_shift($args); + $parseOptions = true; + foreach ($args as $arg) { + if (!$parseOptions) { + $files[] = $arg; + continue; + } + + switch ($arg) { + case '--dump': + case '-d': + $operations[] = 'dump'; + break; + case '--pretty-print': + case '-p': + $operations[] = 'pretty-print'; + break; + case '--json-dump': + case '-j': + $operations[] = 'json-dump'; + break; + case '--var-dump': + $operations[] = 'var-dump'; + break; + case '--resolve-names': + case '-N'; + $operations[] = 'resolve-names'; + break; + case '--with-column-info': + case '-c'; + $attributes['with-column-info'] = true; + break; + case '--with-positions': + case '-P': + $attributes['with-positions'] = true; + break; + case '--with-recovery': + case '-r': + $attributes['with-recovery'] = true; + break; + case '--help': + case '-h'; + showHelp(); + break; + case '--': + $parseOptions = false; + break; + default: + if ($arg[0] === '-') { + showHelp("Invalid operation $arg."); + } else { + $files[] = $arg; + } + } + } + + return [$operations, $files, $attributes]; +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/composer.json b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/composer.json new file mode 100644 index 0000000..e7d0d18 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/composer.json @@ -0,0 +1,41 @@ +{ + "name": "nikic/php-parser", + "type": "library", + "description": "A PHP parser written in PHP", + "keywords": [ + "php", + "parser" + ], + "license": "BSD-3-Clause", + "authors": [ + { + "name": "Nikita Popov" + } + ], + "require": { + "php": ">=7.0", + "ext-tokenizer": "*" + }, + "require-dev": { + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0", + "ircmaxell/php-yacc": "0.0.5" + }, + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "autoload-dev": { + "psr-4": { + "PhpParser\\": "test/PhpParser/" + } + }, + "bin": [ + "bin/php-parse" + ] +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/grammar/README.md b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/grammar/README.md new file mode 100644 index 0000000..4bae11d --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/grammar/README.md @@ -0,0 +1,30 @@ +What do all those files mean? +============================= + + * `php5.y`: PHP 5 grammar written in a pseudo language + * `php7.y`: PHP 7 grammar written in a pseudo language + * `tokens.y`: Tokens definition shared between PHP 5 and PHP 7 grammars + * `parser.template`: A `kmyacc` parser prototype file for PHP + * `tokens.template`: A `kmyacc` prototype file for the `Tokens` class + * `rebuildParsers.php`: Preprocesses the grammar and builds the parser using `kmyacc` + +.phpy pseudo language +===================== + +The `.y` file is a normal grammar in `kmyacc` (`yacc`) style, with some transformations +applied to it: + + * Nodes are created using the syntax `Name[..., ...]`. This is transformed into + `new Name(..., ..., attributes())` + * Some function-like constructs are resolved (see `rebuildParsers.php` for a list) + +Building the parser +=================== + +Run `php grammar/rebuildParsers.php` to rebuild the parsers. Additional options: + + * The `KMYACC` environment variable can be used to specify an alternative `kmyacc` binary. + By default the `phpyacc` dev dependency will be used. To use the original `kmyacc`, you + need to compile [moriyoshi's fork](https://github.com/moriyoshi/kmyacc-forked). + * The `--debug` option enables emission of debug symbols and creates the `y.output` file. + * The `--keep-tmp-grammar` option preserves the preprocessed grammar file. diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/grammar/parser.template b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/grammar/parser.template new file mode 100644 index 0000000..6166607 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/grammar/parser.template @@ -0,0 +1,106 @@ +semValue +#semval($,%t) $this->semValue +#semval(%n) $stackPos-(%l-%n) +#semval(%n,%t) $stackPos-(%l-%n) + +namespace PhpParser\Parser; + +use PhpParser\Error; +use PhpParser\Node; +use PhpParser\Node\Expr; +use PhpParser\Node\Name; +use PhpParser\Node\Scalar; +use PhpParser\Node\Stmt; +#include; + +/* This is an automatically GENERATED file, which should not be manually edited. + * Instead edit one of the following: + * * the grammar files grammar/php5.y or grammar/php7.y + * * the skeleton file grammar/parser.template + * * the preprocessing script grammar/rebuildParsers.php + */ +class #(-p) extends \PhpParser\ParserAbstract +{ + protected $tokenToSymbolMapSize = #(YYMAXLEX); + protected $actionTableSize = #(YYLAST); + protected $gotoTableSize = #(YYGLAST); + + protected $invalidSymbol = #(YYBADCH); + protected $errorSymbol = #(YYINTERRTOK); + protected $defaultAction = #(YYDEFAULT); + protected $unexpectedTokenRule = #(YYUNEXPECTED); + + protected $YY2TBLSTATE = #(YY2TBLSTATE); + protected $numNonLeafStates = #(YYNLSTATES); + + protected $symbolToName = array( + #listvar terminals + ); + + protected $tokenToSymbol = array( + #listvar yytranslate + ); + + protected $action = array( + #listvar yyaction + ); + + protected $actionCheck = array( + #listvar yycheck + ); + + protected $actionBase = array( + #listvar yybase + ); + + protected $actionDefault = array( + #listvar yydefault + ); + + protected $goto = array( + #listvar yygoto + ); + + protected $gotoCheck = array( + #listvar yygcheck + ); + + protected $gotoBase = array( + #listvar yygbase + ); + + protected $gotoDefault = array( + #listvar yygdefault + ); + + protected $ruleToNonTerminal = array( + #listvar yylhs + ); + + protected $ruleToLength = array( + #listvar yylen + ); +#if -t + + protected $productions = array( + #production-strings; + ); +#endif + + protected function initReduceCallbacks() { + $this->reduceCallbacks = [ +#reduce + %n => function ($stackPos) { + %b + }, +#noact + %n => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, +#endreduce + ]; + } +} +#tailcode; diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/grammar/php5.y b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/grammar/php5.y new file mode 100644 index 0000000..e775f2c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/grammar/php5.y @@ -0,0 +1,1026 @@ +%pure_parser +%expect 6 + +%tokens + +%% + +start: + top_statement_list { $$ = $this->handleNamespaces($1); } +; + +top_statement_list_ex: + top_statement_list_ex top_statement { pushNormalizing($1, $2); } + | /* empty */ { init(); } +; + +top_statement_list: + top_statement_list_ex + { makeZeroLengthNop($nop, $this->lookaheadStartAttributes); + if ($nop !== null) { $1[] = $nop; } $$ = $1; } +; + +reserved_non_modifiers: + T_INCLUDE | T_INCLUDE_ONCE | T_EVAL | T_REQUIRE | T_REQUIRE_ONCE | T_LOGICAL_OR | T_LOGICAL_XOR | T_LOGICAL_AND + | T_INSTANCEOF | T_NEW | T_CLONE | T_EXIT | T_IF | T_ELSEIF | T_ELSE | T_ENDIF | T_ECHO | T_DO | T_WHILE + | T_ENDWHILE | T_FOR | T_ENDFOR | T_FOREACH | T_ENDFOREACH | T_DECLARE | T_ENDDECLARE | T_AS | T_TRY | T_CATCH + | T_FINALLY | T_THROW | T_USE | T_INSTEADOF | T_GLOBAL | T_VAR | T_UNSET | T_ISSET | T_EMPTY | T_CONTINUE | T_GOTO + | T_FUNCTION | T_CONST | T_RETURN | T_PRINT | T_YIELD | T_LIST | T_SWITCH | T_ENDSWITCH | T_CASE | T_DEFAULT + | T_BREAK | T_ARRAY | T_CALLABLE | T_EXTENDS | T_IMPLEMENTS | T_NAMESPACE | T_TRAIT | T_INTERFACE | T_CLASS + | T_CLASS_C | T_TRAIT_C | T_FUNC_C | T_METHOD_C | T_LINE | T_FILE | T_DIR | T_NS_C | T_HALT_COMPILER | T_FN +; + +semi_reserved: + reserved_non_modifiers + | T_STATIC | T_ABSTRACT | T_FINAL | T_PRIVATE | T_PROTECTED | T_PUBLIC +; + +identifier_ex: + T_STRING { $$ = Node\Identifier[$1]; } + | semi_reserved { $$ = Node\Identifier[$1]; } +; + +identifier: + T_STRING { $$ = Node\Identifier[$1]; } +; + +reserved_non_modifiers_identifier: + reserved_non_modifiers { $$ = Node\Identifier[$1]; } +; + +namespace_name_parts: + T_STRING { init($1); } + | namespace_name_parts T_NS_SEPARATOR T_STRING { push($1, $3); } +; + +namespace_name: + namespace_name_parts { $$ = Name[$1]; } +; + +plain_variable: + T_VARIABLE { $$ = Expr\Variable[parseVar($1)]; } +; + +top_statement: + statement { $$ = $1; } + | function_declaration_statement { $$ = $1; } + | class_declaration_statement { $$ = $1; } + | T_HALT_COMPILER + { $$ = Stmt\HaltCompiler[$this->lexer->handleHaltCompiler()]; } + | T_NAMESPACE namespace_name ';' + { $$ = Stmt\Namespace_[$2, null]; + $$->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON); + $this->checkNamespace($$); } + | T_NAMESPACE namespace_name '{' top_statement_list '}' + { $$ = Stmt\Namespace_[$2, $4]; + $$->setAttribute('kind', Stmt\Namespace_::KIND_BRACED); + $this->checkNamespace($$); } + | T_NAMESPACE '{' top_statement_list '}' + { $$ = Stmt\Namespace_[null, $3]; + $$->setAttribute('kind', Stmt\Namespace_::KIND_BRACED); + $this->checkNamespace($$); } + | T_USE use_declarations ';' { $$ = Stmt\Use_[$2, Stmt\Use_::TYPE_NORMAL]; } + | T_USE use_type use_declarations ';' { $$ = Stmt\Use_[$3, $2]; } + | group_use_declaration ';' { $$ = $1; } + | T_CONST constant_declaration_list ';' { $$ = Stmt\Const_[$2]; } +; + +use_type: + T_FUNCTION { $$ = Stmt\Use_::TYPE_FUNCTION; } + | T_CONST { $$ = Stmt\Use_::TYPE_CONSTANT; } +; + +/* Using namespace_name_parts here to avoid s/r conflict on T_NS_SEPARATOR */ +group_use_declaration: + T_USE use_type namespace_name_parts T_NS_SEPARATOR '{' unprefixed_use_declarations '}' + { $$ = Stmt\GroupUse[new Name($3, stackAttributes(#3)), $6, $2]; } + | T_USE use_type T_NS_SEPARATOR namespace_name_parts T_NS_SEPARATOR '{' unprefixed_use_declarations '}' + { $$ = Stmt\GroupUse[new Name($4, stackAttributes(#4)), $7, $2]; } + | T_USE namespace_name_parts T_NS_SEPARATOR '{' inline_use_declarations '}' + { $$ = Stmt\GroupUse[new Name($2, stackAttributes(#2)), $5, Stmt\Use_::TYPE_UNKNOWN]; } + | T_USE T_NS_SEPARATOR namespace_name_parts T_NS_SEPARATOR '{' inline_use_declarations '}' + { $$ = Stmt\GroupUse[new Name($3, stackAttributes(#3)), $6, Stmt\Use_::TYPE_UNKNOWN]; } +; + +unprefixed_use_declarations: + unprefixed_use_declarations ',' unprefixed_use_declaration + { push($1, $3); } + | unprefixed_use_declaration { init($1); } +; + +use_declarations: + use_declarations ',' use_declaration { push($1, $3); } + | use_declaration { init($1); } +; + +inline_use_declarations: + inline_use_declarations ',' inline_use_declaration { push($1, $3); } + | inline_use_declaration { init($1); } +; + +unprefixed_use_declaration: + namespace_name + { $$ = Stmt\UseUse[$1, null, Stmt\Use_::TYPE_UNKNOWN]; $this->checkUseUse($$, #1); } + | namespace_name T_AS identifier + { $$ = Stmt\UseUse[$1, $3, Stmt\Use_::TYPE_UNKNOWN]; $this->checkUseUse($$, #3); } +; + +use_declaration: + unprefixed_use_declaration { $$ = $1; } + | T_NS_SEPARATOR unprefixed_use_declaration { $$ = $2; } +; + +inline_use_declaration: + unprefixed_use_declaration { $$ = $1; $$->type = Stmt\Use_::TYPE_NORMAL; } + | use_type unprefixed_use_declaration { $$ = $2; $$->type = $1; } +; + +constant_declaration_list: + constant_declaration_list ',' constant_declaration { push($1, $3); } + | constant_declaration { init($1); } +; + +constant_declaration: + identifier '=' static_scalar { $$ = Node\Const_[$1, $3]; } +; + +class_const_list: + class_const_list ',' class_const { push($1, $3); } + | class_const { init($1); } +; + +class_const: + identifier_ex '=' static_scalar { $$ = Node\Const_[$1, $3]; } +; + +inner_statement_list_ex: + inner_statement_list_ex inner_statement { pushNormalizing($1, $2); } + | /* empty */ { init(); } +; + +inner_statement_list: + inner_statement_list_ex + { makeZeroLengthNop($nop, $this->lookaheadStartAttributes); + if ($nop !== null) { $1[] = $nop; } $$ = $1; } +; + +inner_statement: + statement { $$ = $1; } + | function_declaration_statement { $$ = $1; } + | class_declaration_statement { $$ = $1; } + | T_HALT_COMPILER + { throw new Error('__HALT_COMPILER() can only be used from the outermost scope', attributes()); } +; + +non_empty_statement: + '{' inner_statement_list '}' + { + if ($2) { + $$ = $2; prependLeadingComments($$); + } else { + makeNop($$, $this->startAttributeStack[#1], $this->endAttributes); + if (null === $$) { $$ = array(); } + } + } + | T_IF parentheses_expr statement elseif_list else_single + { $$ = Stmt\If_[$2, ['stmts' => toArray($3), 'elseifs' => $4, 'else' => $5]]; } + | T_IF parentheses_expr ':' inner_statement_list new_elseif_list new_else_single T_ENDIF ';' + { $$ = Stmt\If_[$2, ['stmts' => $4, 'elseifs' => $5, 'else' => $6]]; } + | T_WHILE parentheses_expr while_statement { $$ = Stmt\While_[$2, $3]; } + | T_DO statement T_WHILE parentheses_expr ';' { $$ = Stmt\Do_ [$4, toArray($2)]; } + | T_FOR '(' for_expr ';' for_expr ';' for_expr ')' for_statement + { $$ = Stmt\For_[['init' => $3, 'cond' => $5, 'loop' => $7, 'stmts' => $9]]; } + | T_SWITCH parentheses_expr switch_case_list { $$ = Stmt\Switch_[$2, $3]; } + | T_BREAK ';' { $$ = Stmt\Break_[null]; } + | T_BREAK expr ';' { $$ = Stmt\Break_[$2]; } + | T_CONTINUE ';' { $$ = Stmt\Continue_[null]; } + | T_CONTINUE expr ';' { $$ = Stmt\Continue_[$2]; } + | T_RETURN ';' { $$ = Stmt\Return_[null]; } + | T_RETURN expr ';' { $$ = Stmt\Return_[$2]; } + | T_GLOBAL global_var_list ';' { $$ = Stmt\Global_[$2]; } + | T_STATIC static_var_list ';' { $$ = Stmt\Static_[$2]; } + | T_ECHO expr_list ';' { $$ = Stmt\Echo_[$2]; } + | T_INLINE_HTML { $$ = Stmt\InlineHTML[$1]; } + | yield_expr ';' { $$ = Stmt\Expression[$1]; } + | expr ';' { $$ = Stmt\Expression[$1]; } + | T_UNSET '(' variables_list ')' ';' { $$ = Stmt\Unset_[$3]; } + | T_FOREACH '(' expr T_AS foreach_variable ')' foreach_statement + { $$ = Stmt\Foreach_[$3, $5[0], ['keyVar' => null, 'byRef' => $5[1], 'stmts' => $7]]; } + | T_FOREACH '(' expr T_AS variable T_DOUBLE_ARROW foreach_variable ')' foreach_statement + { $$ = Stmt\Foreach_[$3, $7[0], ['keyVar' => $5, 'byRef' => $7[1], 'stmts' => $9]]; } + | T_DECLARE '(' declare_list ')' declare_statement { $$ = Stmt\Declare_[$3, $5]; } + | T_TRY '{' inner_statement_list '}' catches optional_finally + { $$ = Stmt\TryCatch[$3, $5, $6]; $this->checkTryCatch($$); } + | T_THROW expr ';' { $$ = Stmt\Throw_[$2]; } + | T_GOTO identifier ';' { $$ = Stmt\Goto_[$2]; } + | identifier ':' { $$ = Stmt\Label[$1]; } + | expr error { $$ = Stmt\Expression[$1]; } + | error { $$ = array(); /* means: no statement */ } +; + +statement: + non_empty_statement { $$ = $1; } + | ';' + { makeNop($$, $this->startAttributeStack[#1], $this->endAttributes); + if ($$ === null) $$ = array(); /* means: no statement */ } +; + +catches: + /* empty */ { init(); } + | catches catch { push($1, $2); } +; + +catch: + T_CATCH '(' name plain_variable ')' '{' inner_statement_list '}' + { $$ = Stmt\Catch_[array($3), $4, $7]; } +; + +optional_finally: + /* empty */ { $$ = null; } + | T_FINALLY '{' inner_statement_list '}' { $$ = Stmt\Finally_[$3]; } +; + +variables_list: + variable { init($1); } + | variables_list ',' variable { push($1, $3); } +; + +optional_ref: + /* empty */ { $$ = false; } + | '&' { $$ = true; } +; + +optional_ellipsis: + /* empty */ { $$ = false; } + | T_ELLIPSIS { $$ = true; } +; + +function_declaration_statement: + T_FUNCTION optional_ref identifier '(' parameter_list ')' optional_return_type '{' inner_statement_list '}' + { $$ = Stmt\Function_[$3, ['byRef' => $2, 'params' => $5, 'returnType' => $7, 'stmts' => $9]]; } +; + +class_declaration_statement: + class_entry_type identifier extends_from implements_list '{' class_statement_list '}' + { $$ = Stmt\Class_[$2, ['type' => $1, 'extends' => $3, 'implements' => $4, 'stmts' => $6]]; + $this->checkClass($$, #2); } + | T_INTERFACE identifier interface_extends_list '{' class_statement_list '}' + { $$ = Stmt\Interface_[$2, ['extends' => $3, 'stmts' => $5]]; + $this->checkInterface($$, #2); } + | T_TRAIT identifier '{' class_statement_list '}' + { $$ = Stmt\Trait_[$2, ['stmts' => $4]]; } +; + +class_entry_type: + T_CLASS { $$ = 0; } + | T_ABSTRACT T_CLASS { $$ = Stmt\Class_::MODIFIER_ABSTRACT; } + | T_FINAL T_CLASS { $$ = Stmt\Class_::MODIFIER_FINAL; } +; + +extends_from: + /* empty */ { $$ = null; } + | T_EXTENDS class_name { $$ = $2; } +; + +interface_extends_list: + /* empty */ { $$ = array(); } + | T_EXTENDS class_name_list { $$ = $2; } +; + +implements_list: + /* empty */ { $$ = array(); } + | T_IMPLEMENTS class_name_list { $$ = $2; } +; + +class_name_list: + class_name { init($1); } + | class_name_list ',' class_name { push($1, $3); } +; + +for_statement: + statement { $$ = toArray($1); } + | ':' inner_statement_list T_ENDFOR ';' { $$ = $2; } +; + +foreach_statement: + statement { $$ = toArray($1); } + | ':' inner_statement_list T_ENDFOREACH ';' { $$ = $2; } +; + +declare_statement: + non_empty_statement { $$ = toArray($1); } + | ';' { $$ = null; } + | ':' inner_statement_list T_ENDDECLARE ';' { $$ = $2; } +; + +declare_list: + declare_list_element { init($1); } + | declare_list ',' declare_list_element { push($1, $3); } +; + +declare_list_element: + identifier '=' static_scalar { $$ = Stmt\DeclareDeclare[$1, $3]; } +; + +switch_case_list: + '{' case_list '}' { $$ = $2; } + | '{' ';' case_list '}' { $$ = $3; } + | ':' case_list T_ENDSWITCH ';' { $$ = $2; } + | ':' ';' case_list T_ENDSWITCH ';' { $$ = $3; } +; + +case_list: + /* empty */ { init(); } + | case_list case { push($1, $2); } +; + +case: + T_CASE expr case_separator inner_statement_list_ex { $$ = Stmt\Case_[$2, $4]; } + | T_DEFAULT case_separator inner_statement_list_ex { $$ = Stmt\Case_[null, $3]; } +; + +case_separator: + ':' + | ';' +; + +while_statement: + statement { $$ = toArray($1); } + | ':' inner_statement_list T_ENDWHILE ';' { $$ = $2; } +; + +elseif_list: + /* empty */ { init(); } + | elseif_list elseif { push($1, $2); } +; + +elseif: + T_ELSEIF parentheses_expr statement { $$ = Stmt\ElseIf_[$2, toArray($3)]; } +; + +new_elseif_list: + /* empty */ { init(); } + | new_elseif_list new_elseif { push($1, $2); } +; + +new_elseif: + T_ELSEIF parentheses_expr ':' inner_statement_list { $$ = Stmt\ElseIf_[$2, $4]; } +; + +else_single: + /* empty */ { $$ = null; } + | T_ELSE statement { $$ = Stmt\Else_[toArray($2)]; } +; + +new_else_single: + /* empty */ { $$ = null; } + | T_ELSE ':' inner_statement_list { $$ = Stmt\Else_[$3]; } +; + +foreach_variable: + variable { $$ = array($1, false); } + | '&' variable { $$ = array($2, true); } + | list_expr { $$ = array($1, false); } +; + +parameter_list: + non_empty_parameter_list { $$ = $1; } + | /* empty */ { $$ = array(); } +; + +non_empty_parameter_list: + parameter { init($1); } + | non_empty_parameter_list ',' parameter { push($1, $3); } +; + +parameter: + optional_param_type optional_ref optional_ellipsis plain_variable + { $$ = Node\Param[$4, null, $1, $2, $3]; $this->checkParam($$); } + | optional_param_type optional_ref optional_ellipsis plain_variable '=' static_scalar + { $$ = Node\Param[$4, $6, $1, $2, $3]; $this->checkParam($$); } +; + +type: + name { $$ = $1; } + | T_ARRAY { $$ = Node\Identifier['array']; } + | T_CALLABLE { $$ = Node\Identifier['callable']; } +; + +optional_param_type: + /* empty */ { $$ = null; } + | type { $$ = $1; } +; + +optional_return_type: + /* empty */ { $$ = null; } + | ':' type { $$ = $2; } +; + +argument_list: + '(' ')' { $$ = array(); } + | '(' non_empty_argument_list ')' { $$ = $2; } + | '(' yield_expr ')' { $$ = array(Node\Arg[$2, false, false]); } +; + +non_empty_argument_list: + argument { init($1); } + | non_empty_argument_list ',' argument { push($1, $3); } +; + +argument: + expr { $$ = Node\Arg[$1, false, false]; } + | '&' variable { $$ = Node\Arg[$2, true, false]; } + | T_ELLIPSIS expr { $$ = Node\Arg[$2, false, true]; } +; + +global_var_list: + global_var_list ',' global_var { push($1, $3); } + | global_var { init($1); } +; + +global_var: + plain_variable { $$ = $1; } + | '$' variable { $$ = Expr\Variable[$2]; } + | '$' '{' expr '}' { $$ = Expr\Variable[$3]; } +; + +static_var_list: + static_var_list ',' static_var { push($1, $3); } + | static_var { init($1); } +; + +static_var: + plain_variable { $$ = Stmt\StaticVar[$1, null]; } + | plain_variable '=' static_scalar { $$ = Stmt\StaticVar[$1, $3]; } +; + +class_statement_list_ex: + class_statement_list_ex class_statement { if ($2 !== null) { push($1, $2); } } + | /* empty */ { init(); } +; + +class_statement_list: + class_statement_list_ex + { makeZeroLengthNop($nop, $this->lookaheadStartAttributes); + if ($nop !== null) { $1[] = $nop; } $$ = $1; } +; + +class_statement: + variable_modifiers property_declaration_list ';' + { $$ = Stmt\Property[$1, $2]; $this->checkProperty($$, #1); } + | T_CONST class_const_list ';' { $$ = Stmt\ClassConst[$2, 0]; } + | method_modifiers T_FUNCTION optional_ref identifier_ex '(' parameter_list ')' optional_return_type method_body + { $$ = Stmt\ClassMethod[$4, ['type' => $1, 'byRef' => $3, 'params' => $6, 'returnType' => $8, 'stmts' => $9]]; + $this->checkClassMethod($$, #1); } + | T_USE class_name_list trait_adaptations { $$ = Stmt\TraitUse[$2, $3]; } +; + +trait_adaptations: + ';' { $$ = array(); } + | '{' trait_adaptation_list '}' { $$ = $2; } +; + +trait_adaptation_list: + /* empty */ { init(); } + | trait_adaptation_list trait_adaptation { push($1, $2); } +; + +trait_adaptation: + trait_method_reference_fully_qualified T_INSTEADOF class_name_list ';' + { $$ = Stmt\TraitUseAdaptation\Precedence[$1[0], $1[1], $3]; } + | trait_method_reference T_AS member_modifier identifier_ex ';' + { $$ = Stmt\TraitUseAdaptation\Alias[$1[0], $1[1], $3, $4]; } + | trait_method_reference T_AS member_modifier ';' + { $$ = Stmt\TraitUseAdaptation\Alias[$1[0], $1[1], $3, null]; } + | trait_method_reference T_AS identifier ';' + { $$ = Stmt\TraitUseAdaptation\Alias[$1[0], $1[1], null, $3]; } + | trait_method_reference T_AS reserved_non_modifiers_identifier ';' + { $$ = Stmt\TraitUseAdaptation\Alias[$1[0], $1[1], null, $3]; } +; + +trait_method_reference_fully_qualified: + name T_PAAMAYIM_NEKUDOTAYIM identifier_ex { $$ = array($1, $3); } +; +trait_method_reference: + trait_method_reference_fully_qualified { $$ = $1; } + | identifier_ex { $$ = array(null, $1); } +; + +method_body: + ';' /* abstract method */ { $$ = null; } + | '{' inner_statement_list '}' { $$ = $2; } +; + +variable_modifiers: + non_empty_member_modifiers { $$ = $1; } + | T_VAR { $$ = 0; } +; + +method_modifiers: + /* empty */ { $$ = 0; } + | non_empty_member_modifiers { $$ = $1; } +; + +non_empty_member_modifiers: + member_modifier { $$ = $1; } + | non_empty_member_modifiers member_modifier { $this->checkModifier($1, $2, #2); $$ = $1 | $2; } +; + +member_modifier: + T_PUBLIC { $$ = Stmt\Class_::MODIFIER_PUBLIC; } + | T_PROTECTED { $$ = Stmt\Class_::MODIFIER_PROTECTED; } + | T_PRIVATE { $$ = Stmt\Class_::MODIFIER_PRIVATE; } + | T_STATIC { $$ = Stmt\Class_::MODIFIER_STATIC; } + | T_ABSTRACT { $$ = Stmt\Class_::MODIFIER_ABSTRACT; } + | T_FINAL { $$ = Stmt\Class_::MODIFIER_FINAL; } +; + +property_declaration_list: + property_declaration { init($1); } + | property_declaration_list ',' property_declaration { push($1, $3); } +; + +property_decl_name: + T_VARIABLE { $$ = Node\VarLikeIdentifier[parseVar($1)]; } +; + +property_declaration: + property_decl_name { $$ = Stmt\PropertyProperty[$1, null]; } + | property_decl_name '=' static_scalar { $$ = Stmt\PropertyProperty[$1, $3]; } +; + +expr_list: + expr_list ',' expr { push($1, $3); } + | expr { init($1); } +; + +for_expr: + /* empty */ { $$ = array(); } + | expr_list { $$ = $1; } +; + +expr: + variable { $$ = $1; } + | list_expr '=' expr { $$ = Expr\Assign[$1, $3]; } + | variable '=' expr { $$ = Expr\Assign[$1, $3]; } + | variable '=' '&' variable { $$ = Expr\AssignRef[$1, $4]; } + | variable '=' '&' new_expr { $$ = Expr\AssignRef[$1, $4]; } + | new_expr { $$ = $1; } + | T_CLONE expr { $$ = Expr\Clone_[$2]; } + | variable T_PLUS_EQUAL expr { $$ = Expr\AssignOp\Plus [$1, $3]; } + | variable T_MINUS_EQUAL expr { $$ = Expr\AssignOp\Minus [$1, $3]; } + | variable T_MUL_EQUAL expr { $$ = Expr\AssignOp\Mul [$1, $3]; } + | variable T_DIV_EQUAL expr { $$ = Expr\AssignOp\Div [$1, $3]; } + | variable T_CONCAT_EQUAL expr { $$ = Expr\AssignOp\Concat [$1, $3]; } + | variable T_MOD_EQUAL expr { $$ = Expr\AssignOp\Mod [$1, $3]; } + | variable T_AND_EQUAL expr { $$ = Expr\AssignOp\BitwiseAnd[$1, $3]; } + | variable T_OR_EQUAL expr { $$ = Expr\AssignOp\BitwiseOr [$1, $3]; } + | variable T_XOR_EQUAL expr { $$ = Expr\AssignOp\BitwiseXor[$1, $3]; } + | variable T_SL_EQUAL expr { $$ = Expr\AssignOp\ShiftLeft [$1, $3]; } + | variable T_SR_EQUAL expr { $$ = Expr\AssignOp\ShiftRight[$1, $3]; } + | variable T_POW_EQUAL expr { $$ = Expr\AssignOp\Pow [$1, $3]; } + | variable T_COALESCE_EQUAL expr { $$ = Expr\AssignOp\Coalesce [$1, $3]; } + | variable T_INC { $$ = Expr\PostInc[$1]; } + | T_INC variable { $$ = Expr\PreInc [$2]; } + | variable T_DEC { $$ = Expr\PostDec[$1]; } + | T_DEC variable { $$ = Expr\PreDec [$2]; } + | expr T_BOOLEAN_OR expr { $$ = Expr\BinaryOp\BooleanOr [$1, $3]; } + | expr T_BOOLEAN_AND expr { $$ = Expr\BinaryOp\BooleanAnd[$1, $3]; } + | expr T_LOGICAL_OR expr { $$ = Expr\BinaryOp\LogicalOr [$1, $3]; } + | expr T_LOGICAL_AND expr { $$ = Expr\BinaryOp\LogicalAnd[$1, $3]; } + | expr T_LOGICAL_XOR expr { $$ = Expr\BinaryOp\LogicalXor[$1, $3]; } + | expr '|' expr { $$ = Expr\BinaryOp\BitwiseOr [$1, $3]; } + | expr '&' expr { $$ = Expr\BinaryOp\BitwiseAnd[$1, $3]; } + | expr '^' expr { $$ = Expr\BinaryOp\BitwiseXor[$1, $3]; } + | expr '.' expr { $$ = Expr\BinaryOp\Concat [$1, $3]; } + | expr '+' expr { $$ = Expr\BinaryOp\Plus [$1, $3]; } + | expr '-' expr { $$ = Expr\BinaryOp\Minus [$1, $3]; } + | expr '*' expr { $$ = Expr\BinaryOp\Mul [$1, $3]; } + | expr '/' expr { $$ = Expr\BinaryOp\Div [$1, $3]; } + | expr '%' expr { $$ = Expr\BinaryOp\Mod [$1, $3]; } + | expr T_SL expr { $$ = Expr\BinaryOp\ShiftLeft [$1, $3]; } + | expr T_SR expr { $$ = Expr\BinaryOp\ShiftRight[$1, $3]; } + | expr T_POW expr { $$ = Expr\BinaryOp\Pow [$1, $3]; } + | '+' expr %prec T_INC { $$ = Expr\UnaryPlus [$2]; } + | '-' expr %prec T_INC { $$ = Expr\UnaryMinus[$2]; } + | '!' expr { $$ = Expr\BooleanNot[$2]; } + | '~' expr { $$ = Expr\BitwiseNot[$2]; } + | expr T_IS_IDENTICAL expr { $$ = Expr\BinaryOp\Identical [$1, $3]; } + | expr T_IS_NOT_IDENTICAL expr { $$ = Expr\BinaryOp\NotIdentical [$1, $3]; } + | expr T_IS_EQUAL expr { $$ = Expr\BinaryOp\Equal [$1, $3]; } + | expr T_IS_NOT_EQUAL expr { $$ = Expr\BinaryOp\NotEqual [$1, $3]; } + | expr T_SPACESHIP expr { $$ = Expr\BinaryOp\Spaceship [$1, $3]; } + | expr '<' expr { $$ = Expr\BinaryOp\Smaller [$1, $3]; } + | expr T_IS_SMALLER_OR_EQUAL expr { $$ = Expr\BinaryOp\SmallerOrEqual[$1, $3]; } + | expr '>' expr { $$ = Expr\BinaryOp\Greater [$1, $3]; } + | expr T_IS_GREATER_OR_EQUAL expr { $$ = Expr\BinaryOp\GreaterOrEqual[$1, $3]; } + | expr T_INSTANCEOF class_name_reference { $$ = Expr\Instanceof_[$1, $3]; } + | parentheses_expr { $$ = $1; } + /* we need a separate '(' new_expr ')' rule to avoid problems caused by a s/r conflict */ + | '(' new_expr ')' { $$ = $2; } + | expr '?' expr ':' expr { $$ = Expr\Ternary[$1, $3, $5]; } + | expr '?' ':' expr { $$ = Expr\Ternary[$1, null, $4]; } + | expr T_COALESCE expr { $$ = Expr\BinaryOp\Coalesce[$1, $3]; } + | T_ISSET '(' variables_list ')' { $$ = Expr\Isset_[$3]; } + | T_EMPTY '(' expr ')' { $$ = Expr\Empty_[$3]; } + | T_INCLUDE expr { $$ = Expr\Include_[$2, Expr\Include_::TYPE_INCLUDE]; } + | T_INCLUDE_ONCE expr { $$ = Expr\Include_[$2, Expr\Include_::TYPE_INCLUDE_ONCE]; } + | T_EVAL parentheses_expr { $$ = Expr\Eval_[$2]; } + | T_REQUIRE expr { $$ = Expr\Include_[$2, Expr\Include_::TYPE_REQUIRE]; } + | T_REQUIRE_ONCE expr { $$ = Expr\Include_[$2, Expr\Include_::TYPE_REQUIRE_ONCE]; } + | T_INT_CAST expr { $$ = Expr\Cast\Int_ [$2]; } + | T_DOUBLE_CAST expr + { $attrs = attributes(); + $attrs['kind'] = $this->getFloatCastKind($1); + $$ = new Expr\Cast\Double($2, $attrs); } + | T_STRING_CAST expr { $$ = Expr\Cast\String_ [$2]; } + | T_ARRAY_CAST expr { $$ = Expr\Cast\Array_ [$2]; } + | T_OBJECT_CAST expr { $$ = Expr\Cast\Object_ [$2]; } + | T_BOOL_CAST expr { $$ = Expr\Cast\Bool_ [$2]; } + | T_UNSET_CAST expr { $$ = Expr\Cast\Unset_ [$2]; } + | T_EXIT exit_expr + { $attrs = attributes(); + $attrs['kind'] = strtolower($1) === 'exit' ? Expr\Exit_::KIND_EXIT : Expr\Exit_::KIND_DIE; + $$ = new Expr\Exit_($2, $attrs); } + | '@' expr { $$ = Expr\ErrorSuppress[$2]; } + | scalar { $$ = $1; } + | array_expr { $$ = $1; } + | scalar_dereference { $$ = $1; } + | '`' backticks_expr '`' { $$ = Expr\ShellExec[$2]; } + | T_PRINT expr { $$ = Expr\Print_[$2]; } + | T_YIELD { $$ = Expr\Yield_[null, null]; } + | T_YIELD_FROM expr { $$ = Expr\YieldFrom[$2]; } + | T_FUNCTION optional_ref '(' parameter_list ')' lexical_vars optional_return_type + '{' inner_statement_list '}' + { $$ = Expr\Closure[['static' => false, 'byRef' => $2, 'params' => $4, 'uses' => $6, 'returnType' => $7, 'stmts' => $9]]; } + | T_STATIC T_FUNCTION optional_ref '(' parameter_list ')' lexical_vars optional_return_type + '{' inner_statement_list '}' + { $$ = Expr\Closure[['static' => true, 'byRef' => $3, 'params' => $5, 'uses' => $7, 'returnType' => $8, 'stmts' => $10]]; } +; + +parentheses_expr: + '(' expr ')' { $$ = $2; } + | '(' yield_expr ')' { $$ = $2; } +; + +yield_expr: + T_YIELD expr { $$ = Expr\Yield_[$2, null]; } + | T_YIELD expr T_DOUBLE_ARROW expr { $$ = Expr\Yield_[$4, $2]; } +; + +array_expr: + T_ARRAY '(' array_pair_list ')' + { $attrs = attributes(); $attrs['kind'] = Expr\Array_::KIND_LONG; + $$ = new Expr\Array_($3, $attrs); } + | '[' array_pair_list ']' + { $attrs = attributes(); $attrs['kind'] = Expr\Array_::KIND_SHORT; + $$ = new Expr\Array_($2, $attrs); } +; + +scalar_dereference: + array_expr '[' dim_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; } + | T_CONSTANT_ENCAPSED_STRING '[' dim_offset ']' + { $attrs = attributes(); $attrs['kind'] = strKind($1); + $$ = Expr\ArrayDimFetch[new Scalar\String_(Scalar\String_::parse($1), $attrs), $3]; } + | constant '[' dim_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; } + | scalar_dereference '[' dim_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; } + /* alternative array syntax missing intentionally */ +; + +anonymous_class: + T_CLASS ctor_arguments extends_from implements_list '{' class_statement_list '}' + { $$ = array(Stmt\Class_[null, ['type' => 0, 'extends' => $3, 'implements' => $4, 'stmts' => $6]], $2); + $this->checkClass($$[0], -1); } +; + +new_expr: + T_NEW class_name_reference ctor_arguments { $$ = Expr\New_[$2, $3]; } + | T_NEW anonymous_class + { list($class, $ctorArgs) = $2; $$ = Expr\New_[$class, $ctorArgs]; } +; + +lexical_vars: + /* empty */ { $$ = array(); } + | T_USE '(' lexical_var_list ')' { $$ = $3; } +; + +lexical_var_list: + lexical_var { init($1); } + | lexical_var_list ',' lexical_var { push($1, $3); } +; + +lexical_var: + optional_ref plain_variable { $$ = Expr\ClosureUse[$2, $1]; } +; + +function_call: + name argument_list { $$ = Expr\FuncCall[$1, $2]; } + | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM identifier_ex argument_list + { $$ = Expr\StaticCall[$1, $3, $4]; } + | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM '{' expr '}' argument_list + { $$ = Expr\StaticCall[$1, $4, $6]; } + | static_property argument_list + { $$ = $this->fixupPhp5StaticPropCall($1, $2, attributes()); } + | variable_without_objects argument_list + { $$ = Expr\FuncCall[$1, $2]; } + | function_call '[' dim_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; } + /* alternative array syntax missing intentionally */ +; + +class_name: + T_STATIC { $$ = Name[$1]; } + | name { $$ = $1; } +; + +name: + namespace_name_parts { $$ = Name[$1]; } + | T_NS_SEPARATOR namespace_name_parts { $$ = Name\FullyQualified[$2]; } + | T_NAMESPACE T_NS_SEPARATOR namespace_name_parts { $$ = Name\Relative[$3]; } +; + +class_name_reference: + class_name { $$ = $1; } + | dynamic_class_name_reference { $$ = $1; } +; + +dynamic_class_name_reference: + object_access_for_dcnr { $$ = $1; } + | base_variable { $$ = $1; } +; + +class_name_or_var: + class_name { $$ = $1; } + | reference_variable { $$ = $1; } +; + +object_access_for_dcnr: + base_variable T_OBJECT_OPERATOR object_property + { $$ = Expr\PropertyFetch[$1, $3]; } + | object_access_for_dcnr T_OBJECT_OPERATOR object_property + { $$ = Expr\PropertyFetch[$1, $3]; } + | object_access_for_dcnr '[' dim_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; } + | object_access_for_dcnr '{' expr '}' { $$ = Expr\ArrayDimFetch[$1, $3]; } +; + +exit_expr: + /* empty */ { $$ = null; } + | '(' ')' { $$ = null; } + | parentheses_expr { $$ = $1; } +; + +backticks_expr: + /* empty */ { $$ = array(); } + | T_ENCAPSED_AND_WHITESPACE + { $$ = array(Scalar\EncapsedStringPart[Scalar\String_::parseEscapeSequences($1, '`', false)]); } + | encaps_list { parseEncapsed($1, '`', false); $$ = $1; } +; + +ctor_arguments: + /* empty */ { $$ = array(); } + | argument_list { $$ = $1; } +; + +common_scalar: + T_LNUMBER { $$ = $this->parseLNumber($1, attributes(), true); } + | T_DNUMBER { $$ = Scalar\DNumber[Scalar\DNumber::parse($1)]; } + | T_CONSTANT_ENCAPSED_STRING + { $attrs = attributes(); $attrs['kind'] = strKind($1); + $$ = new Scalar\String_(Scalar\String_::parse($1, false), $attrs); } + | T_LINE { $$ = Scalar\MagicConst\Line[]; } + | T_FILE { $$ = Scalar\MagicConst\File[]; } + | T_DIR { $$ = Scalar\MagicConst\Dir[]; } + | T_CLASS_C { $$ = Scalar\MagicConst\Class_[]; } + | T_TRAIT_C { $$ = Scalar\MagicConst\Trait_[]; } + | T_METHOD_C { $$ = Scalar\MagicConst\Method[]; } + | T_FUNC_C { $$ = Scalar\MagicConst\Function_[]; } + | T_NS_C { $$ = Scalar\MagicConst\Namespace_[]; } + | T_START_HEREDOC T_ENCAPSED_AND_WHITESPACE T_END_HEREDOC + { $$ = $this->parseDocString($1, $2, $3, attributes(), stackAttributes(#3), false); } + | T_START_HEREDOC T_END_HEREDOC + { $$ = $this->parseDocString($1, '', $2, attributes(), stackAttributes(#2), false); } +; + +static_scalar: + common_scalar { $$ = $1; } + | class_name T_PAAMAYIM_NEKUDOTAYIM identifier_ex { $$ = Expr\ClassConstFetch[$1, $3]; } + | name { $$ = Expr\ConstFetch[$1]; } + | T_ARRAY '(' static_array_pair_list ')' { $$ = Expr\Array_[$3]; } + | '[' static_array_pair_list ']' { $$ = Expr\Array_[$2]; } + | static_operation { $$ = $1; } +; + +static_operation: + static_scalar T_BOOLEAN_OR static_scalar { $$ = Expr\BinaryOp\BooleanOr [$1, $3]; } + | static_scalar T_BOOLEAN_AND static_scalar { $$ = Expr\BinaryOp\BooleanAnd[$1, $3]; } + | static_scalar T_LOGICAL_OR static_scalar { $$ = Expr\BinaryOp\LogicalOr [$1, $3]; } + | static_scalar T_LOGICAL_AND static_scalar { $$ = Expr\BinaryOp\LogicalAnd[$1, $3]; } + | static_scalar T_LOGICAL_XOR static_scalar { $$ = Expr\BinaryOp\LogicalXor[$1, $3]; } + | static_scalar '|' static_scalar { $$ = Expr\BinaryOp\BitwiseOr [$1, $3]; } + | static_scalar '&' static_scalar { $$ = Expr\BinaryOp\BitwiseAnd[$1, $3]; } + | static_scalar '^' static_scalar { $$ = Expr\BinaryOp\BitwiseXor[$1, $3]; } + | static_scalar '.' static_scalar { $$ = Expr\BinaryOp\Concat [$1, $3]; } + | static_scalar '+' static_scalar { $$ = Expr\BinaryOp\Plus [$1, $3]; } + | static_scalar '-' static_scalar { $$ = Expr\BinaryOp\Minus [$1, $3]; } + | static_scalar '*' static_scalar { $$ = Expr\BinaryOp\Mul [$1, $3]; } + | static_scalar '/' static_scalar { $$ = Expr\BinaryOp\Div [$1, $3]; } + | static_scalar '%' static_scalar { $$ = Expr\BinaryOp\Mod [$1, $3]; } + | static_scalar T_SL static_scalar { $$ = Expr\BinaryOp\ShiftLeft [$1, $3]; } + | static_scalar T_SR static_scalar { $$ = Expr\BinaryOp\ShiftRight[$1, $3]; } + | static_scalar T_POW static_scalar { $$ = Expr\BinaryOp\Pow [$1, $3]; } + | '+' static_scalar %prec T_INC { $$ = Expr\UnaryPlus [$2]; } + | '-' static_scalar %prec T_INC { $$ = Expr\UnaryMinus[$2]; } + | '!' static_scalar { $$ = Expr\BooleanNot[$2]; } + | '~' static_scalar { $$ = Expr\BitwiseNot[$2]; } + | static_scalar T_IS_IDENTICAL static_scalar { $$ = Expr\BinaryOp\Identical [$1, $3]; } + | static_scalar T_IS_NOT_IDENTICAL static_scalar { $$ = Expr\BinaryOp\NotIdentical [$1, $3]; } + | static_scalar T_IS_EQUAL static_scalar { $$ = Expr\BinaryOp\Equal [$1, $3]; } + | static_scalar T_IS_NOT_EQUAL static_scalar { $$ = Expr\BinaryOp\NotEqual [$1, $3]; } + | static_scalar '<' static_scalar { $$ = Expr\BinaryOp\Smaller [$1, $3]; } + | static_scalar T_IS_SMALLER_OR_EQUAL static_scalar { $$ = Expr\BinaryOp\SmallerOrEqual[$1, $3]; } + | static_scalar '>' static_scalar { $$ = Expr\BinaryOp\Greater [$1, $3]; } + | static_scalar T_IS_GREATER_OR_EQUAL static_scalar { $$ = Expr\BinaryOp\GreaterOrEqual[$1, $3]; } + | static_scalar '?' static_scalar ':' static_scalar { $$ = Expr\Ternary[$1, $3, $5]; } + | static_scalar '?' ':' static_scalar { $$ = Expr\Ternary[$1, null, $4]; } + | static_scalar '[' static_scalar ']' { $$ = Expr\ArrayDimFetch[$1, $3]; } + | '(' static_scalar ')' { $$ = $2; } +; + +constant: + name { $$ = Expr\ConstFetch[$1]; } + | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM identifier_ex + { $$ = Expr\ClassConstFetch[$1, $3]; } +; + +scalar: + common_scalar { $$ = $1; } + | constant { $$ = $1; } + | '"' encaps_list '"' + { $attrs = attributes(); $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED; + parseEncapsed($2, '"', true); $$ = new Scalar\Encapsed($2, $attrs); } + | T_START_HEREDOC encaps_list T_END_HEREDOC + { $$ = $this->parseDocString($1, $2, $3, attributes(), stackAttributes(#3), true); } +; + +static_array_pair_list: + /* empty */ { $$ = array(); } + | non_empty_static_array_pair_list optional_comma { $$ = $1; } +; + +optional_comma: + /* empty */ + | ',' +; + +non_empty_static_array_pair_list: + non_empty_static_array_pair_list ',' static_array_pair { push($1, $3); } + | static_array_pair { init($1); } +; + +static_array_pair: + static_scalar T_DOUBLE_ARROW static_scalar { $$ = Expr\ArrayItem[$3, $1, false]; } + | static_scalar { $$ = Expr\ArrayItem[$1, null, false]; } +; + +variable: + object_access { $$ = $1; } + | base_variable { $$ = $1; } + | function_call { $$ = $1; } + | new_expr_array_deref { $$ = $1; } +; + +new_expr_array_deref: + '(' new_expr ')' '[' dim_offset ']' { $$ = Expr\ArrayDimFetch[$2, $5]; } + | new_expr_array_deref '[' dim_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; } + /* alternative array syntax missing intentionally */ +; + +object_access: + variable_or_new_expr T_OBJECT_OPERATOR object_property + { $$ = Expr\PropertyFetch[$1, $3]; } + | variable_or_new_expr T_OBJECT_OPERATOR object_property argument_list + { $$ = Expr\MethodCall[$1, $3, $4]; } + | object_access argument_list { $$ = Expr\FuncCall[$1, $2]; } + | object_access '[' dim_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; } + | object_access '{' expr '}' { $$ = Expr\ArrayDimFetch[$1, $3]; } +; + +variable_or_new_expr: + variable { $$ = $1; } + | '(' new_expr ')' { $$ = $2; } +; + +variable_without_objects: + reference_variable { $$ = $1; } + | '$' variable_without_objects { $$ = Expr\Variable[$2]; } +; + +base_variable: + variable_without_objects { $$ = $1; } + | static_property { $$ = $1; } +; + +static_property: + class_name_or_var T_PAAMAYIM_NEKUDOTAYIM '$' reference_variable + { $$ = Expr\StaticPropertyFetch[$1, $4]; } + | static_property_with_arrays { $$ = $1; } +; + +static_property_simple_name: + T_VARIABLE + { $var = parseVar($1); $$ = \is_string($var) ? Node\VarLikeIdentifier[$var] : $var; } +; + +static_property_with_arrays: + class_name_or_var T_PAAMAYIM_NEKUDOTAYIM static_property_simple_name + { $$ = Expr\StaticPropertyFetch[$1, $3]; } + | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM '$' '{' expr '}' + { $$ = Expr\StaticPropertyFetch[$1, $5]; } + | static_property_with_arrays '[' dim_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; } + | static_property_with_arrays '{' expr '}' { $$ = Expr\ArrayDimFetch[$1, $3]; } +; + +reference_variable: + reference_variable '[' dim_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; } + | reference_variable '{' expr '}' { $$ = Expr\ArrayDimFetch[$1, $3]; } + | plain_variable { $$ = $1; } + | '$' '{' expr '}' { $$ = Expr\Variable[$3]; } +; + +dim_offset: + /* empty */ { $$ = null; } + | expr { $$ = $1; } +; + +object_property: + identifier { $$ = $1; } + | '{' expr '}' { $$ = $2; } + | variable_without_objects { $$ = $1; } + | error { $$ = Expr\Error[]; $this->errorState = 2; } +; + +list_expr: + T_LIST '(' list_expr_elements ')' { $$ = Expr\List_[$3]; } +; + +list_expr_elements: + list_expr_elements ',' list_expr_element { push($1, $3); } + | list_expr_element { init($1); } +; + +list_expr_element: + variable { $$ = Expr\ArrayItem[$1, null, false]; } + | list_expr { $$ = Expr\ArrayItem[$1, null, false]; } + | /* empty */ { $$ = null; } +; + +array_pair_list: + /* empty */ { $$ = array(); } + | non_empty_array_pair_list optional_comma { $$ = $1; } +; + +non_empty_array_pair_list: + non_empty_array_pair_list ',' array_pair { push($1, $3); } + | array_pair { init($1); } +; + +array_pair: + expr T_DOUBLE_ARROW expr { $$ = Expr\ArrayItem[$3, $1, false]; } + | expr { $$ = Expr\ArrayItem[$1, null, false]; } + | expr T_DOUBLE_ARROW '&' variable { $$ = Expr\ArrayItem[$4, $1, true]; } + | '&' variable { $$ = Expr\ArrayItem[$2, null, true]; } + | T_ELLIPSIS expr { $$ = Expr\ArrayItem[$2, null, false, attributes(), true]; } +; + +encaps_list: + encaps_list encaps_var { push($1, $2); } + | encaps_list encaps_string_part { push($1, $2); } + | encaps_var { init($1); } + | encaps_string_part encaps_var { init($1, $2); } +; + +encaps_string_part: + T_ENCAPSED_AND_WHITESPACE { $$ = Scalar\EncapsedStringPart[$1]; } +; + +encaps_str_varname: + T_STRING_VARNAME { $$ = Expr\Variable[$1]; } +; + +encaps_var: + plain_variable { $$ = $1; } + | plain_variable '[' encaps_var_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; } + | plain_variable T_OBJECT_OPERATOR identifier { $$ = Expr\PropertyFetch[$1, $3]; } + | T_DOLLAR_OPEN_CURLY_BRACES expr '}' { $$ = Expr\Variable[$2]; } + | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '}' { $$ = Expr\Variable[$2]; } + | T_DOLLAR_OPEN_CURLY_BRACES encaps_str_varname '[' expr ']' '}' + { $$ = Expr\ArrayDimFetch[$2, $4]; } + | T_CURLY_OPEN variable '}' { $$ = $2; } +; + +encaps_var_offset: + T_STRING { $$ = Scalar\String_[$1]; } + | T_NUM_STRING { $$ = $this->parseNumString($1, attributes()); } + | plain_variable { $$ = $1; } +; + +%% diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/grammar/php7.y b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/grammar/php7.y new file mode 100644 index 0000000..a90c969 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/grammar/php7.y @@ -0,0 +1,1031 @@ +%pure_parser +%expect 2 + +%tokens + +%% + +start: + top_statement_list { $$ = $this->handleNamespaces($1); } +; + +top_statement_list_ex: + top_statement_list_ex top_statement { pushNormalizing($1, $2); } + | /* empty */ { init(); } +; + +top_statement_list: + top_statement_list_ex + { makeZeroLengthNop($nop, $this->lookaheadStartAttributes); + if ($nop !== null) { $1[] = $nop; } $$ = $1; } +; + +reserved_non_modifiers: + T_INCLUDE | T_INCLUDE_ONCE | T_EVAL | T_REQUIRE | T_REQUIRE_ONCE | T_LOGICAL_OR | T_LOGICAL_XOR | T_LOGICAL_AND + | T_INSTANCEOF | T_NEW | T_CLONE | T_EXIT | T_IF | T_ELSEIF | T_ELSE | T_ENDIF | T_ECHO | T_DO | T_WHILE + | T_ENDWHILE | T_FOR | T_ENDFOR | T_FOREACH | T_ENDFOREACH | T_DECLARE | T_ENDDECLARE | T_AS | T_TRY | T_CATCH + | T_FINALLY | T_THROW | T_USE | T_INSTEADOF | T_GLOBAL | T_VAR | T_UNSET | T_ISSET | T_EMPTY | T_CONTINUE | T_GOTO + | T_FUNCTION | T_CONST | T_RETURN | T_PRINT | T_YIELD | T_LIST | T_SWITCH | T_ENDSWITCH | T_CASE | T_DEFAULT + | T_BREAK | T_ARRAY | T_CALLABLE | T_EXTENDS | T_IMPLEMENTS | T_NAMESPACE | T_TRAIT | T_INTERFACE | T_CLASS + | T_CLASS_C | T_TRAIT_C | T_FUNC_C | T_METHOD_C | T_LINE | T_FILE | T_DIR | T_NS_C | T_HALT_COMPILER | T_FN +; + +semi_reserved: + reserved_non_modifiers + | T_STATIC | T_ABSTRACT | T_FINAL | T_PRIVATE | T_PROTECTED | T_PUBLIC +; + +identifier_ex: + T_STRING { $$ = Node\Identifier[$1]; } + | semi_reserved { $$ = Node\Identifier[$1]; } +; + +identifier: + T_STRING { $$ = Node\Identifier[$1]; } +; + +reserved_non_modifiers_identifier: + reserved_non_modifiers { $$ = Node\Identifier[$1]; } +; + +namespace_name_parts: + T_STRING { init($1); } + | namespace_name_parts T_NS_SEPARATOR T_STRING { push($1, $3); } +; + +namespace_name: + namespace_name_parts { $$ = Name[$1]; } +; + +plain_variable: + T_VARIABLE { $$ = Expr\Variable[parseVar($1)]; } +; + +semi: + ';' { /* nothing */ } + | error { /* nothing */ } +; + +no_comma: + /* empty */ { /* nothing */ } + | ',' { $this->emitError(new Error('A trailing comma is not allowed here', attributes())); } +; + +optional_comma: + /* empty */ + | ',' + +top_statement: + statement { $$ = $1; } + | function_declaration_statement { $$ = $1; } + | class_declaration_statement { $$ = $1; } + | T_HALT_COMPILER + { $$ = Stmt\HaltCompiler[$this->lexer->handleHaltCompiler()]; } + | T_NAMESPACE namespace_name semi + { $$ = Stmt\Namespace_[$2, null]; + $$->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON); + $this->checkNamespace($$); } + | T_NAMESPACE namespace_name '{' top_statement_list '}' + { $$ = Stmt\Namespace_[$2, $4]; + $$->setAttribute('kind', Stmt\Namespace_::KIND_BRACED); + $this->checkNamespace($$); } + | T_NAMESPACE '{' top_statement_list '}' + { $$ = Stmt\Namespace_[null, $3]; + $$->setAttribute('kind', Stmt\Namespace_::KIND_BRACED); + $this->checkNamespace($$); } + | T_USE use_declarations semi { $$ = Stmt\Use_[$2, Stmt\Use_::TYPE_NORMAL]; } + | T_USE use_type use_declarations semi { $$ = Stmt\Use_[$3, $2]; } + | group_use_declaration semi { $$ = $1; } + | T_CONST constant_declaration_list semi { $$ = Stmt\Const_[$2]; } +; + +use_type: + T_FUNCTION { $$ = Stmt\Use_::TYPE_FUNCTION; } + | T_CONST { $$ = Stmt\Use_::TYPE_CONSTANT; } +; + +/* Using namespace_name_parts here to avoid s/r conflict on T_NS_SEPARATOR */ +group_use_declaration: + T_USE use_type namespace_name_parts T_NS_SEPARATOR '{' unprefixed_use_declarations '}' + { $$ = Stmt\GroupUse[new Name($3, stackAttributes(#3)), $6, $2]; } + | T_USE use_type T_NS_SEPARATOR namespace_name_parts T_NS_SEPARATOR '{' unprefixed_use_declarations '}' + { $$ = Stmt\GroupUse[new Name($4, stackAttributes(#4)), $7, $2]; } + | T_USE namespace_name_parts T_NS_SEPARATOR '{' inline_use_declarations '}' + { $$ = Stmt\GroupUse[new Name($2, stackAttributes(#2)), $5, Stmt\Use_::TYPE_UNKNOWN]; } + | T_USE T_NS_SEPARATOR namespace_name_parts T_NS_SEPARATOR '{' inline_use_declarations '}' + { $$ = Stmt\GroupUse[new Name($3, stackAttributes(#3)), $6, Stmt\Use_::TYPE_UNKNOWN]; } +; + +unprefixed_use_declarations: + non_empty_unprefixed_use_declarations optional_comma { $$ = $1; } +; + +non_empty_unprefixed_use_declarations: + non_empty_unprefixed_use_declarations ',' unprefixed_use_declaration + { push($1, $3); } + | unprefixed_use_declaration { init($1); } +; + +use_declarations: + non_empty_use_declarations no_comma { $$ = $1; } +; + +non_empty_use_declarations: + non_empty_use_declarations ',' use_declaration { push($1, $3); } + | use_declaration { init($1); } +; + +inline_use_declarations: + non_empty_inline_use_declarations optional_comma { $$ = $1; } +; + +non_empty_inline_use_declarations: + non_empty_inline_use_declarations ',' inline_use_declaration + { push($1, $3); } + | inline_use_declaration { init($1); } +; + +unprefixed_use_declaration: + namespace_name + { $$ = Stmt\UseUse[$1, null, Stmt\Use_::TYPE_UNKNOWN]; $this->checkUseUse($$, #1); } + | namespace_name T_AS identifier + { $$ = Stmt\UseUse[$1, $3, Stmt\Use_::TYPE_UNKNOWN]; $this->checkUseUse($$, #3); } +; + +use_declaration: + unprefixed_use_declaration { $$ = $1; } + | T_NS_SEPARATOR unprefixed_use_declaration { $$ = $2; } +; + +inline_use_declaration: + unprefixed_use_declaration { $$ = $1; $$->type = Stmt\Use_::TYPE_NORMAL; } + | use_type unprefixed_use_declaration { $$ = $2; $$->type = $1; } +; + +constant_declaration_list: + non_empty_constant_declaration_list no_comma { $$ = $1; } +; + +non_empty_constant_declaration_list: + non_empty_constant_declaration_list ',' constant_declaration + { push($1, $3); } + | constant_declaration { init($1); } +; + +constant_declaration: + identifier '=' expr { $$ = Node\Const_[$1, $3]; } +; + +class_const_list: + non_empty_class_const_list no_comma { $$ = $1; } +; + +non_empty_class_const_list: + non_empty_class_const_list ',' class_const { push($1, $3); } + | class_const { init($1); } +; + +class_const: + identifier_ex '=' expr { $$ = Node\Const_[$1, $3]; } +; + +inner_statement_list_ex: + inner_statement_list_ex inner_statement { pushNormalizing($1, $2); } + | /* empty */ { init(); } +; + +inner_statement_list: + inner_statement_list_ex + { makeZeroLengthNop($nop, $this->lookaheadStartAttributes); + if ($nop !== null) { $1[] = $nop; } $$ = $1; } +; + +inner_statement: + statement { $$ = $1; } + | function_declaration_statement { $$ = $1; } + | class_declaration_statement { $$ = $1; } + | T_HALT_COMPILER + { throw new Error('__HALT_COMPILER() can only be used from the outermost scope', attributes()); } +; + +non_empty_statement: + '{' inner_statement_list '}' + { + if ($2) { + $$ = $2; prependLeadingComments($$); + } else { + makeNop($$, $this->startAttributeStack[#1], $this->endAttributes); + if (null === $$) { $$ = array(); } + } + } + | T_IF '(' expr ')' statement elseif_list else_single + { $$ = Stmt\If_[$3, ['stmts' => toArray($5), 'elseifs' => $6, 'else' => $7]]; } + | T_IF '(' expr ')' ':' inner_statement_list new_elseif_list new_else_single T_ENDIF ';' + { $$ = Stmt\If_[$3, ['stmts' => $6, 'elseifs' => $7, 'else' => $8]]; } + | T_WHILE '(' expr ')' while_statement { $$ = Stmt\While_[$3, $5]; } + | T_DO statement T_WHILE '(' expr ')' ';' { $$ = Stmt\Do_ [$5, toArray($2)]; } + | T_FOR '(' for_expr ';' for_expr ';' for_expr ')' for_statement + { $$ = Stmt\For_[['init' => $3, 'cond' => $5, 'loop' => $7, 'stmts' => $9]]; } + | T_SWITCH '(' expr ')' switch_case_list { $$ = Stmt\Switch_[$3, $5]; } + | T_BREAK optional_expr semi { $$ = Stmt\Break_[$2]; } + | T_CONTINUE optional_expr semi { $$ = Stmt\Continue_[$2]; } + | T_RETURN optional_expr semi { $$ = Stmt\Return_[$2]; } + | T_GLOBAL global_var_list semi { $$ = Stmt\Global_[$2]; } + | T_STATIC static_var_list semi { $$ = Stmt\Static_[$2]; } + | T_ECHO expr_list_forbid_comma semi { $$ = Stmt\Echo_[$2]; } + | T_INLINE_HTML { $$ = Stmt\InlineHTML[$1]; } + | expr semi { $$ = Stmt\Expression[$1]; } + | T_UNSET '(' variables_list ')' semi { $$ = Stmt\Unset_[$3]; } + | T_FOREACH '(' expr T_AS foreach_variable ')' foreach_statement + { $$ = Stmt\Foreach_[$3, $5[0], ['keyVar' => null, 'byRef' => $5[1], 'stmts' => $7]]; } + | T_FOREACH '(' expr T_AS variable T_DOUBLE_ARROW foreach_variable ')' foreach_statement + { $$ = Stmt\Foreach_[$3, $7[0], ['keyVar' => $5, 'byRef' => $7[1], 'stmts' => $9]]; } + | T_FOREACH '(' expr error ')' foreach_statement + { $$ = Stmt\Foreach_[$3, new Expr\Error(stackAttributes(#4)), ['stmts' => $6]]; } + | T_DECLARE '(' declare_list ')' declare_statement { $$ = Stmt\Declare_[$3, $5]; } + | T_TRY '{' inner_statement_list '}' catches optional_finally + { $$ = Stmt\TryCatch[$3, $5, $6]; $this->checkTryCatch($$); } + | T_THROW expr semi { $$ = Stmt\Throw_[$2]; } + | T_GOTO identifier semi { $$ = Stmt\Goto_[$2]; } + | identifier ':' { $$ = Stmt\Label[$1]; } + | error { $$ = array(); /* means: no statement */ } +; + +statement: + non_empty_statement { $$ = $1; } + | ';' + { makeNop($$, $this->startAttributeStack[#1], $this->endAttributes); + if ($$ === null) $$ = array(); /* means: no statement */ } +; + +catches: + /* empty */ { init(); } + | catches catch { push($1, $2); } +; + +name_union: + name { init($1); } + | name_union '|' name { push($1, $3); } +; + +catch: + T_CATCH '(' name_union plain_variable ')' '{' inner_statement_list '}' + { $$ = Stmt\Catch_[$3, $4, $7]; } +; + +optional_finally: + /* empty */ { $$ = null; } + | T_FINALLY '{' inner_statement_list '}' { $$ = Stmt\Finally_[$3]; } +; + +variables_list: + non_empty_variables_list optional_comma { $$ = $1; } +; + +non_empty_variables_list: + variable { init($1); } + | non_empty_variables_list ',' variable { push($1, $3); } +; + +optional_ref: + /* empty */ { $$ = false; } + | '&' { $$ = true; } +; + +optional_ellipsis: + /* empty */ { $$ = false; } + | T_ELLIPSIS { $$ = true; } +; + +block_or_error: + '{' inner_statement_list '}' { $$ = $2; } + | error { $$ = []; } +; + +function_declaration_statement: + T_FUNCTION optional_ref identifier '(' parameter_list ')' optional_return_type block_or_error + { $$ = Stmt\Function_[$3, ['byRef' => $2, 'params' => $5, 'returnType' => $7, 'stmts' => $8]]; } +; + +class_declaration_statement: + class_entry_type identifier extends_from implements_list '{' class_statement_list '}' + { $$ = Stmt\Class_[$2, ['type' => $1, 'extends' => $3, 'implements' => $4, 'stmts' => $6]]; + $this->checkClass($$, #2); } + | T_INTERFACE identifier interface_extends_list '{' class_statement_list '}' + { $$ = Stmt\Interface_[$2, ['extends' => $3, 'stmts' => $5]]; + $this->checkInterface($$, #2); } + | T_TRAIT identifier '{' class_statement_list '}' + { $$ = Stmt\Trait_[$2, ['stmts' => $4]]; } +; + +class_entry_type: + T_CLASS { $$ = 0; } + | T_ABSTRACT T_CLASS { $$ = Stmt\Class_::MODIFIER_ABSTRACT; } + | T_FINAL T_CLASS { $$ = Stmt\Class_::MODIFIER_FINAL; } +; + +extends_from: + /* empty */ { $$ = null; } + | T_EXTENDS class_name { $$ = $2; } +; + +interface_extends_list: + /* empty */ { $$ = array(); } + | T_EXTENDS class_name_list { $$ = $2; } +; + +implements_list: + /* empty */ { $$ = array(); } + | T_IMPLEMENTS class_name_list { $$ = $2; } +; + +class_name_list: + non_empty_class_name_list no_comma { $$ = $1; } +; + +non_empty_class_name_list: + class_name { init($1); } + | non_empty_class_name_list ',' class_name { push($1, $3); } +; + +for_statement: + statement { $$ = toArray($1); } + | ':' inner_statement_list T_ENDFOR ';' { $$ = $2; } +; + +foreach_statement: + statement { $$ = toArray($1); } + | ':' inner_statement_list T_ENDFOREACH ';' { $$ = $2; } +; + +declare_statement: + non_empty_statement { $$ = toArray($1); } + | ';' { $$ = null; } + | ':' inner_statement_list T_ENDDECLARE ';' { $$ = $2; } +; + +declare_list: + non_empty_declare_list no_comma { $$ = $1; } +; + +non_empty_declare_list: + declare_list_element { init($1); } + | non_empty_declare_list ',' declare_list_element { push($1, $3); } +; + +declare_list_element: + identifier '=' expr { $$ = Stmt\DeclareDeclare[$1, $3]; } +; + +switch_case_list: + '{' case_list '}' { $$ = $2; } + | '{' ';' case_list '}' { $$ = $3; } + | ':' case_list T_ENDSWITCH ';' { $$ = $2; } + | ':' ';' case_list T_ENDSWITCH ';' { $$ = $3; } +; + +case_list: + /* empty */ { init(); } + | case_list case { push($1, $2); } +; + +case: + T_CASE expr case_separator inner_statement_list_ex { $$ = Stmt\Case_[$2, $4]; } + | T_DEFAULT case_separator inner_statement_list_ex { $$ = Stmt\Case_[null, $3]; } +; + +case_separator: + ':' + | ';' +; + +while_statement: + statement { $$ = toArray($1); } + | ':' inner_statement_list T_ENDWHILE ';' { $$ = $2; } +; + +elseif_list: + /* empty */ { init(); } + | elseif_list elseif { push($1, $2); } +; + +elseif: + T_ELSEIF '(' expr ')' statement { $$ = Stmt\ElseIf_[$3, toArray($5)]; } +; + +new_elseif_list: + /* empty */ { init(); } + | new_elseif_list new_elseif { push($1, $2); } +; + +new_elseif: + T_ELSEIF '(' expr ')' ':' inner_statement_list { $$ = Stmt\ElseIf_[$3, $6]; } +; + +else_single: + /* empty */ { $$ = null; } + | T_ELSE statement { $$ = Stmt\Else_[toArray($2)]; } +; + +new_else_single: + /* empty */ { $$ = null; } + | T_ELSE ':' inner_statement_list { $$ = Stmt\Else_[$3]; } +; + +foreach_variable: + variable { $$ = array($1, false); } + | '&' variable { $$ = array($2, true); } + | list_expr { $$ = array($1, false); } + | array_short_syntax { $$ = array($1, false); } +; + +parameter_list: + non_empty_parameter_list no_comma { $$ = $1; } + | /* empty */ { $$ = array(); } +; + +non_empty_parameter_list: + parameter { init($1); } + | non_empty_parameter_list ',' parameter { push($1, $3); } +; + +parameter: + optional_type optional_ref optional_ellipsis plain_variable + { $$ = Node\Param[$4, null, $1, $2, $3]; $this->checkParam($$); } + | optional_type optional_ref optional_ellipsis plain_variable '=' expr + { $$ = Node\Param[$4, $6, $1, $2, $3]; $this->checkParam($$); } + | optional_type optional_ref optional_ellipsis error + { $$ = Node\Param[Expr\Error[], null, $1, $2, $3]; } +; + +type_expr: + type { $$ = $1; } + | '?' type { $$ = Node\NullableType[$2]; } + | union_type { $$ = Node\UnionType[$1]; } +; + +type: + name { $$ = $this->handleBuiltinTypes($1); } + | T_ARRAY { $$ = Node\Identifier['array']; } + | T_CALLABLE { $$ = Node\Identifier['callable']; } +; + +union_type: + type '|' type { init($1, $3); } + | union_type '|' type { push($1, $3); } +; + +optional_type: + /* empty */ { $$ = null; } + | type_expr { $$ = $1; } +; + +optional_return_type: + /* empty */ { $$ = null; } + | ':' type_expr { $$ = $2; } + | ':' error { $$ = null; } +; + +argument_list: + '(' ')' { $$ = array(); } + | '(' non_empty_argument_list optional_comma ')' { $$ = $2; } +; + +non_empty_argument_list: + argument { init($1); } + | non_empty_argument_list ',' argument { push($1, $3); } +; + +argument: + expr { $$ = Node\Arg[$1, false, false]; } + | '&' variable { $$ = Node\Arg[$2, true, false]; } + | T_ELLIPSIS expr { $$ = Node\Arg[$2, false, true]; } +; + +global_var_list: + non_empty_global_var_list no_comma { $$ = $1; } +; + +non_empty_global_var_list: + non_empty_global_var_list ',' global_var { push($1, $3); } + | global_var { init($1); } +; + +global_var: + simple_variable { $$ = Expr\Variable[$1]; } +; + +static_var_list: + non_empty_static_var_list no_comma { $$ = $1; } +; + +non_empty_static_var_list: + non_empty_static_var_list ',' static_var { push($1, $3); } + | static_var { init($1); } +; + +static_var: + plain_variable { $$ = Stmt\StaticVar[$1, null]; } + | plain_variable '=' expr { $$ = Stmt\StaticVar[$1, $3]; } +; + +class_statement_list_ex: + class_statement_list_ex class_statement { if ($2 !== null) { push($1, $2); } } + | /* empty */ { init(); } +; + +class_statement_list: + class_statement_list_ex + { makeZeroLengthNop($nop, $this->lookaheadStartAttributes); + if ($nop !== null) { $1[] = $nop; } $$ = $1; } +; + +class_statement: + variable_modifiers optional_type property_declaration_list ';' + { $attrs = attributes(); + $$ = new Stmt\Property($1, $3, $attrs, $2); $this->checkProperty($$, #1); } + | method_modifiers T_CONST class_const_list ';' + { $$ = Stmt\ClassConst[$3, $1]; $this->checkClassConst($$, #1); } + | method_modifiers T_FUNCTION optional_ref identifier_ex '(' parameter_list ')' optional_return_type method_body + { $$ = Stmt\ClassMethod[$4, ['type' => $1, 'byRef' => $3, 'params' => $6, 'returnType' => $8, 'stmts' => $9]]; + $this->checkClassMethod($$, #1); } + | T_USE class_name_list trait_adaptations { $$ = Stmt\TraitUse[$2, $3]; } + | error { $$ = null; /* will be skipped */ } +; + +trait_adaptations: + ';' { $$ = array(); } + | '{' trait_adaptation_list '}' { $$ = $2; } +; + +trait_adaptation_list: + /* empty */ { init(); } + | trait_adaptation_list trait_adaptation { push($1, $2); } +; + +trait_adaptation: + trait_method_reference_fully_qualified T_INSTEADOF class_name_list ';' + { $$ = Stmt\TraitUseAdaptation\Precedence[$1[0], $1[1], $3]; } + | trait_method_reference T_AS member_modifier identifier_ex ';' + { $$ = Stmt\TraitUseAdaptation\Alias[$1[0], $1[1], $3, $4]; } + | trait_method_reference T_AS member_modifier ';' + { $$ = Stmt\TraitUseAdaptation\Alias[$1[0], $1[1], $3, null]; } + | trait_method_reference T_AS identifier ';' + { $$ = Stmt\TraitUseAdaptation\Alias[$1[0], $1[1], null, $3]; } + | trait_method_reference T_AS reserved_non_modifiers_identifier ';' + { $$ = Stmt\TraitUseAdaptation\Alias[$1[0], $1[1], null, $3]; } +; + +trait_method_reference_fully_qualified: + name T_PAAMAYIM_NEKUDOTAYIM identifier_ex { $$ = array($1, $3); } +; +trait_method_reference: + trait_method_reference_fully_qualified { $$ = $1; } + | identifier_ex { $$ = array(null, $1); } +; + +method_body: + ';' /* abstract method */ { $$ = null; } + | block_or_error { $$ = $1; } +; + +variable_modifiers: + non_empty_member_modifiers { $$ = $1; } + | T_VAR { $$ = 0; } +; + +method_modifiers: + /* empty */ { $$ = 0; } + | non_empty_member_modifiers { $$ = $1; } +; + +non_empty_member_modifiers: + member_modifier { $$ = $1; } + | non_empty_member_modifiers member_modifier { $this->checkModifier($1, $2, #2); $$ = $1 | $2; } +; + +member_modifier: + T_PUBLIC { $$ = Stmt\Class_::MODIFIER_PUBLIC; } + | T_PROTECTED { $$ = Stmt\Class_::MODIFIER_PROTECTED; } + | T_PRIVATE { $$ = Stmt\Class_::MODIFIER_PRIVATE; } + | T_STATIC { $$ = Stmt\Class_::MODIFIER_STATIC; } + | T_ABSTRACT { $$ = Stmt\Class_::MODIFIER_ABSTRACT; } + | T_FINAL { $$ = Stmt\Class_::MODIFIER_FINAL; } +; + +property_declaration_list: + non_empty_property_declaration_list no_comma { $$ = $1; } +; + +non_empty_property_declaration_list: + property_declaration { init($1); } + | non_empty_property_declaration_list ',' property_declaration + { push($1, $3); } +; + +property_decl_name: + T_VARIABLE { $$ = Node\VarLikeIdentifier[parseVar($1)]; } +; + +property_declaration: + property_decl_name { $$ = Stmt\PropertyProperty[$1, null]; } + | property_decl_name '=' expr { $$ = Stmt\PropertyProperty[$1, $3]; } +; + +expr_list_forbid_comma: + non_empty_expr_list no_comma { $$ = $1; } +; + +expr_list_allow_comma: + non_empty_expr_list optional_comma { $$ = $1; } +; + +non_empty_expr_list: + non_empty_expr_list ',' expr { push($1, $3); } + | expr { init($1); } +; + +for_expr: + /* empty */ { $$ = array(); } + | expr_list_forbid_comma { $$ = $1; } +; + +expr: + variable { $$ = $1; } + | list_expr '=' expr { $$ = Expr\Assign[$1, $3]; } + | array_short_syntax '=' expr { $$ = Expr\Assign[$1, $3]; } + | variable '=' expr { $$ = Expr\Assign[$1, $3]; } + | variable '=' '&' variable { $$ = Expr\AssignRef[$1, $4]; } + | new_expr { $$ = $1; } + | T_CLONE expr { $$ = Expr\Clone_[$2]; } + | variable T_PLUS_EQUAL expr { $$ = Expr\AssignOp\Plus [$1, $3]; } + | variable T_MINUS_EQUAL expr { $$ = Expr\AssignOp\Minus [$1, $3]; } + | variable T_MUL_EQUAL expr { $$ = Expr\AssignOp\Mul [$1, $3]; } + | variable T_DIV_EQUAL expr { $$ = Expr\AssignOp\Div [$1, $3]; } + | variable T_CONCAT_EQUAL expr { $$ = Expr\AssignOp\Concat [$1, $3]; } + | variable T_MOD_EQUAL expr { $$ = Expr\AssignOp\Mod [$1, $3]; } + | variable T_AND_EQUAL expr { $$ = Expr\AssignOp\BitwiseAnd[$1, $3]; } + | variable T_OR_EQUAL expr { $$ = Expr\AssignOp\BitwiseOr [$1, $3]; } + | variable T_XOR_EQUAL expr { $$ = Expr\AssignOp\BitwiseXor[$1, $3]; } + | variable T_SL_EQUAL expr { $$ = Expr\AssignOp\ShiftLeft [$1, $3]; } + | variable T_SR_EQUAL expr { $$ = Expr\AssignOp\ShiftRight[$1, $3]; } + | variable T_POW_EQUAL expr { $$ = Expr\AssignOp\Pow [$1, $3]; } + | variable T_COALESCE_EQUAL expr { $$ = Expr\AssignOp\Coalesce [$1, $3]; } + | variable T_INC { $$ = Expr\PostInc[$1]; } + | T_INC variable { $$ = Expr\PreInc [$2]; } + | variable T_DEC { $$ = Expr\PostDec[$1]; } + | T_DEC variable { $$ = Expr\PreDec [$2]; } + | expr T_BOOLEAN_OR expr { $$ = Expr\BinaryOp\BooleanOr [$1, $3]; } + | expr T_BOOLEAN_AND expr { $$ = Expr\BinaryOp\BooleanAnd[$1, $3]; } + | expr T_LOGICAL_OR expr { $$ = Expr\BinaryOp\LogicalOr [$1, $3]; } + | expr T_LOGICAL_AND expr { $$ = Expr\BinaryOp\LogicalAnd[$1, $3]; } + | expr T_LOGICAL_XOR expr { $$ = Expr\BinaryOp\LogicalXor[$1, $3]; } + | expr '|' expr { $$ = Expr\BinaryOp\BitwiseOr [$1, $3]; } + | expr '&' expr { $$ = Expr\BinaryOp\BitwiseAnd[$1, $3]; } + | expr '^' expr { $$ = Expr\BinaryOp\BitwiseXor[$1, $3]; } + | expr '.' expr { $$ = Expr\BinaryOp\Concat [$1, $3]; } + | expr '+' expr { $$ = Expr\BinaryOp\Plus [$1, $3]; } + | expr '-' expr { $$ = Expr\BinaryOp\Minus [$1, $3]; } + | expr '*' expr { $$ = Expr\BinaryOp\Mul [$1, $3]; } + | expr '/' expr { $$ = Expr\BinaryOp\Div [$1, $3]; } + | expr '%' expr { $$ = Expr\BinaryOp\Mod [$1, $3]; } + | expr T_SL expr { $$ = Expr\BinaryOp\ShiftLeft [$1, $3]; } + | expr T_SR expr { $$ = Expr\BinaryOp\ShiftRight[$1, $3]; } + | expr T_POW expr { $$ = Expr\BinaryOp\Pow [$1, $3]; } + | '+' expr %prec T_INC { $$ = Expr\UnaryPlus [$2]; } + | '-' expr %prec T_INC { $$ = Expr\UnaryMinus[$2]; } + | '!' expr { $$ = Expr\BooleanNot[$2]; } + | '~' expr { $$ = Expr\BitwiseNot[$2]; } + | expr T_IS_IDENTICAL expr { $$ = Expr\BinaryOp\Identical [$1, $3]; } + | expr T_IS_NOT_IDENTICAL expr { $$ = Expr\BinaryOp\NotIdentical [$1, $3]; } + | expr T_IS_EQUAL expr { $$ = Expr\BinaryOp\Equal [$1, $3]; } + | expr T_IS_NOT_EQUAL expr { $$ = Expr\BinaryOp\NotEqual [$1, $3]; } + | expr T_SPACESHIP expr { $$ = Expr\BinaryOp\Spaceship [$1, $3]; } + | expr '<' expr { $$ = Expr\BinaryOp\Smaller [$1, $3]; } + | expr T_IS_SMALLER_OR_EQUAL expr { $$ = Expr\BinaryOp\SmallerOrEqual[$1, $3]; } + | expr '>' expr { $$ = Expr\BinaryOp\Greater [$1, $3]; } + | expr T_IS_GREATER_OR_EQUAL expr { $$ = Expr\BinaryOp\GreaterOrEqual[$1, $3]; } + | expr T_INSTANCEOF class_name_reference { $$ = Expr\Instanceof_[$1, $3]; } + | '(' expr ')' { $$ = $2; } + | expr '?' expr ':' expr { $$ = Expr\Ternary[$1, $3, $5]; } + | expr '?' ':' expr { $$ = Expr\Ternary[$1, null, $4]; } + | expr T_COALESCE expr { $$ = Expr\BinaryOp\Coalesce[$1, $3]; } + | T_ISSET '(' expr_list_allow_comma ')' { $$ = Expr\Isset_[$3]; } + | T_EMPTY '(' expr ')' { $$ = Expr\Empty_[$3]; } + | T_INCLUDE expr { $$ = Expr\Include_[$2, Expr\Include_::TYPE_INCLUDE]; } + | T_INCLUDE_ONCE expr { $$ = Expr\Include_[$2, Expr\Include_::TYPE_INCLUDE_ONCE]; } + | T_EVAL '(' expr ')' { $$ = Expr\Eval_[$3]; } + | T_REQUIRE expr { $$ = Expr\Include_[$2, Expr\Include_::TYPE_REQUIRE]; } + | T_REQUIRE_ONCE expr { $$ = Expr\Include_[$2, Expr\Include_::TYPE_REQUIRE_ONCE]; } + | T_INT_CAST expr { $$ = Expr\Cast\Int_ [$2]; } + | T_DOUBLE_CAST expr + { $attrs = attributes(); + $attrs['kind'] = $this->getFloatCastKind($1); + $$ = new Expr\Cast\Double($2, $attrs); } + | T_STRING_CAST expr { $$ = Expr\Cast\String_ [$2]; } + | T_ARRAY_CAST expr { $$ = Expr\Cast\Array_ [$2]; } + | T_OBJECT_CAST expr { $$ = Expr\Cast\Object_ [$2]; } + | T_BOOL_CAST expr { $$ = Expr\Cast\Bool_ [$2]; } + | T_UNSET_CAST expr { $$ = Expr\Cast\Unset_ [$2]; } + | T_EXIT exit_expr + { $attrs = attributes(); + $attrs['kind'] = strtolower($1) === 'exit' ? Expr\Exit_::KIND_EXIT : Expr\Exit_::KIND_DIE; + $$ = new Expr\Exit_($2, $attrs); } + | '@' expr { $$ = Expr\ErrorSuppress[$2]; } + | scalar { $$ = $1; } + | '`' backticks_expr '`' { $$ = Expr\ShellExec[$2]; } + | T_PRINT expr { $$ = Expr\Print_[$2]; } + | T_YIELD { $$ = Expr\Yield_[null, null]; } + | T_YIELD expr { $$ = Expr\Yield_[$2, null]; } + | T_YIELD expr T_DOUBLE_ARROW expr { $$ = Expr\Yield_[$4, $2]; } + | T_YIELD_FROM expr { $$ = Expr\YieldFrom[$2]; } + + | T_FN optional_ref '(' parameter_list ')' optional_return_type T_DOUBLE_ARROW expr + { $$ = Expr\ArrowFunction[['static' => false, 'byRef' => $2, 'params' => $4, 'returnType' => $6, 'expr' => $8]]; } + | T_STATIC T_FN optional_ref '(' parameter_list ')' optional_return_type T_DOUBLE_ARROW expr + { $$ = Expr\ArrowFunction[['static' => true, 'byRef' => $3, 'params' => $5, 'returnType' => $7, 'expr' => $9]]; } + + | T_FUNCTION optional_ref '(' parameter_list ')' lexical_vars optional_return_type + block_or_error + { $$ = Expr\Closure[['static' => false, 'byRef' => $2, 'params' => $4, 'uses' => $6, 'returnType' => $7, 'stmts' => $8]]; } + | T_STATIC T_FUNCTION optional_ref '(' parameter_list ')' lexical_vars optional_return_type + block_or_error + { $$ = Expr\Closure[['static' => true, 'byRef' => $3, 'params' => $5, 'uses' => $7, 'returnType' => $8, 'stmts' => $9]]; } +; + +anonymous_class: + T_CLASS ctor_arguments extends_from implements_list '{' class_statement_list '}' + { $$ = array(Stmt\Class_[null, ['type' => 0, 'extends' => $3, 'implements' => $4, 'stmts' => $6]], $2); + $this->checkClass($$[0], -1); } +; + +new_expr: + T_NEW class_name_reference ctor_arguments { $$ = Expr\New_[$2, $3]; } + | T_NEW anonymous_class + { list($class, $ctorArgs) = $2; $$ = Expr\New_[$class, $ctorArgs]; } +; + +lexical_vars: + /* empty */ { $$ = array(); } + | T_USE '(' lexical_var_list ')' { $$ = $3; } +; + +lexical_var_list: + non_empty_lexical_var_list no_comma { $$ = $1; } +; + +non_empty_lexical_var_list: + lexical_var { init($1); } + | non_empty_lexical_var_list ',' lexical_var { push($1, $3); } +; + +lexical_var: + optional_ref plain_variable { $$ = Expr\ClosureUse[$2, $1]; } +; + +function_call: + name argument_list { $$ = Expr\FuncCall[$1, $2]; } + | callable_expr argument_list { $$ = Expr\FuncCall[$1, $2]; } + | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM member_name argument_list + { $$ = Expr\StaticCall[$1, $3, $4]; } +; + +class_name: + T_STATIC { $$ = Name[$1]; } + | name { $$ = $1; } +; + +name: + namespace_name_parts { $$ = Name[$1]; } + | T_NS_SEPARATOR namespace_name_parts { $$ = Name\FullyQualified[$2]; } + | T_NAMESPACE T_NS_SEPARATOR namespace_name_parts { $$ = Name\Relative[$3]; } +; + +class_name_reference: + class_name { $$ = $1; } + | new_variable { $$ = $1; } + | '(' expr ')' { $$ = $2; } + | error { $$ = Expr\Error[]; $this->errorState = 2; } +; + +class_name_or_var: + class_name { $$ = $1; } + | fully_dereferencable { $$ = $1; } +; + +exit_expr: + /* empty */ { $$ = null; } + | '(' optional_expr ')' { $$ = $2; } +; + +backticks_expr: + /* empty */ { $$ = array(); } + | T_ENCAPSED_AND_WHITESPACE + { $$ = array(Scalar\EncapsedStringPart[Scalar\String_::parseEscapeSequences($1, '`')]); } + | encaps_list { parseEncapsed($1, '`', true); $$ = $1; } +; + +ctor_arguments: + /* empty */ { $$ = array(); } + | argument_list { $$ = $1; } +; + +constant: + name { $$ = Expr\ConstFetch[$1]; } + | T_LINE { $$ = Scalar\MagicConst\Line[]; } + | T_FILE { $$ = Scalar\MagicConst\File[]; } + | T_DIR { $$ = Scalar\MagicConst\Dir[]; } + | T_CLASS_C { $$ = Scalar\MagicConst\Class_[]; } + | T_TRAIT_C { $$ = Scalar\MagicConst\Trait_[]; } + | T_METHOD_C { $$ = Scalar\MagicConst\Method[]; } + | T_FUNC_C { $$ = Scalar\MagicConst\Function_[]; } + | T_NS_C { $$ = Scalar\MagicConst\Namespace_[]; } +; + +class_constant: + class_name_or_var T_PAAMAYIM_NEKUDOTAYIM identifier_ex + { $$ = Expr\ClassConstFetch[$1, $3]; } + /* We interpret an isolated FOO:: as an unfinished class constant fetch. It could also be + an unfinished static property fetch or unfinished scoped call. */ + | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM error + { $$ = Expr\ClassConstFetch[$1, new Expr\Error(stackAttributes(#3))]; $this->errorState = 2; } +; + +array_short_syntax: + '[' array_pair_list ']' + { $attrs = attributes(); $attrs['kind'] = Expr\Array_::KIND_SHORT; + $$ = new Expr\Array_($2, $attrs); } +; + +dereferencable_scalar: + T_ARRAY '(' array_pair_list ')' + { $attrs = attributes(); $attrs['kind'] = Expr\Array_::KIND_LONG; + $$ = new Expr\Array_($3, $attrs); } + | array_short_syntax { $$ = $1; } + | T_CONSTANT_ENCAPSED_STRING + { $attrs = attributes(); $attrs['kind'] = strKind($1); + $$ = new Scalar\String_(Scalar\String_::parse($1), $attrs); } + | '"' encaps_list '"' + { $attrs = attributes(); $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED; + parseEncapsed($2, '"', true); $$ = new Scalar\Encapsed($2, $attrs); } +; + +scalar: + T_LNUMBER { $$ = $this->parseLNumber($1, attributes()); } + | T_DNUMBER { $$ = Scalar\DNumber[Scalar\DNumber::parse($1)]; } + | dereferencable_scalar { $$ = $1; } + | constant { $$ = $1; } + | class_constant { $$ = $1; } + | T_START_HEREDOC T_ENCAPSED_AND_WHITESPACE T_END_HEREDOC + { $$ = $this->parseDocString($1, $2, $3, attributes(), stackAttributes(#3), true); } + | T_START_HEREDOC T_END_HEREDOC + { $$ = $this->parseDocString($1, '', $2, attributes(), stackAttributes(#2), true); } + | T_START_HEREDOC encaps_list T_END_HEREDOC + { $$ = $this->parseDocString($1, $2, $3, attributes(), stackAttributes(#3), true); } +; + +optional_expr: + /* empty */ { $$ = null; } + | expr { $$ = $1; } +; + +fully_dereferencable: + variable { $$ = $1; } + | '(' expr ')' { $$ = $2; } + | dereferencable_scalar { $$ = $1; } + | class_constant { $$ = $1; } +; + +array_object_dereferencable: + fully_dereferencable { $$ = $1; } + | constant { $$ = $1; } +; + +callable_expr: + callable_variable { $$ = $1; } + | '(' expr ')' { $$ = $2; } + | dereferencable_scalar { $$ = $1; } +; + +callable_variable: + simple_variable { $$ = Expr\Variable[$1]; } + | array_object_dereferencable '[' optional_expr ']' { $$ = Expr\ArrayDimFetch[$1, $3]; } + | array_object_dereferencable '{' expr '}' { $$ = Expr\ArrayDimFetch[$1, $3]; } + | function_call { $$ = $1; } + | array_object_dereferencable T_OBJECT_OPERATOR property_name argument_list + { $$ = Expr\MethodCall[$1, $3, $4]; } +; + +variable: + callable_variable { $$ = $1; } + | static_member { $$ = $1; } + | array_object_dereferencable T_OBJECT_OPERATOR property_name + { $$ = Expr\PropertyFetch[$1, $3]; } +; + +simple_variable: + T_VARIABLE { $$ = parseVar($1); } + | '$' '{' expr '}' { $$ = $3; } + | '$' simple_variable { $$ = Expr\Variable[$2]; } + | '$' error { $$ = Expr\Error[]; $this->errorState = 2; } +; + +static_member_prop_name: + simple_variable + { $var = $1; $$ = \is_string($var) ? Node\VarLikeIdentifier[$var] : $var; } +; + +static_member: + class_name_or_var T_PAAMAYIM_NEKUDOTAYIM static_member_prop_name + { $$ = Expr\StaticPropertyFetch[$1, $3]; } +; + +new_variable: + simple_variable { $$ = Expr\Variable[$1]; } + | new_variable '[' optional_expr ']' { $$ = Expr\ArrayDimFetch[$1, $3]; } + | new_variable '{' expr '}' { $$ = Expr\ArrayDimFetch[$1, $3]; } + | new_variable T_OBJECT_OPERATOR property_name { $$ = Expr\PropertyFetch[$1, $3]; } + | class_name T_PAAMAYIM_NEKUDOTAYIM static_member_prop_name + { $$ = Expr\StaticPropertyFetch[$1, $3]; } + | new_variable T_PAAMAYIM_NEKUDOTAYIM static_member_prop_name + { $$ = Expr\StaticPropertyFetch[$1, $3]; } +; + +member_name: + identifier_ex { $$ = $1; } + | '{' expr '}' { $$ = $2; } + | simple_variable { $$ = Expr\Variable[$1]; } +; + +property_name: + identifier { $$ = $1; } + | '{' expr '}' { $$ = $2; } + | simple_variable { $$ = Expr\Variable[$1]; } + | error { $$ = Expr\Error[]; $this->errorState = 2; } +; + +list_expr: + T_LIST '(' inner_array_pair_list ')' { $$ = Expr\List_[$3]; } +; + +array_pair_list: + inner_array_pair_list + { $$ = $1; $end = count($$)-1; if ($$[$end] === null) array_pop($$); } +; + +comma_or_error: + ',' + | error + { /* do nothing -- prevent default action of $$=$1. See #551. */ } +; + +inner_array_pair_list: + inner_array_pair_list comma_or_error array_pair { push($1, $3); } + | array_pair { init($1); } +; + +array_pair: + expr { $$ = Expr\ArrayItem[$1, null, false]; } + | '&' variable { $$ = Expr\ArrayItem[$2, null, true]; } + | list_expr { $$ = Expr\ArrayItem[$1, null, false]; } + | expr T_DOUBLE_ARROW expr { $$ = Expr\ArrayItem[$3, $1, false]; } + | expr T_DOUBLE_ARROW '&' variable { $$ = Expr\ArrayItem[$4, $1, true]; } + | expr T_DOUBLE_ARROW list_expr { $$ = Expr\ArrayItem[$3, $1, false]; } + | T_ELLIPSIS expr { $$ = Expr\ArrayItem[$2, null, false, attributes(), true]; } + | /* empty */ { $$ = null; } +; + +encaps_list: + encaps_list encaps_var { push($1, $2); } + | encaps_list encaps_string_part { push($1, $2); } + | encaps_var { init($1); } + | encaps_string_part encaps_var { init($1, $2); } +; + +encaps_string_part: + T_ENCAPSED_AND_WHITESPACE { $$ = Scalar\EncapsedStringPart[$1]; } +; + +encaps_str_varname: + T_STRING_VARNAME { $$ = Expr\Variable[$1]; } +; + +encaps_var: + plain_variable { $$ = $1; } + | plain_variable '[' encaps_var_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; } + | plain_variable T_OBJECT_OPERATOR identifier { $$ = Expr\PropertyFetch[$1, $3]; } + | T_DOLLAR_OPEN_CURLY_BRACES expr '}' { $$ = Expr\Variable[$2]; } + | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '}' { $$ = Expr\Variable[$2]; } + | T_DOLLAR_OPEN_CURLY_BRACES encaps_str_varname '[' expr ']' '}' + { $$ = Expr\ArrayDimFetch[$2, $4]; } + | T_CURLY_OPEN variable '}' { $$ = $2; } +; + +encaps_var_offset: + T_STRING { $$ = Scalar\String_[$1]; } + | T_NUM_STRING { $$ = $this->parseNumString($1, attributes()); } + | '-' T_NUM_STRING { $$ = $this->parseNumString('-' . $2, attributes()); } + | plain_variable { $$ = $1; } +; + +%% diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/grammar/rebuildParsers.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/grammar/rebuildParsers.php new file mode 100644 index 0000000..66bf705 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/grammar/rebuildParsers.php @@ -0,0 +1,261 @@ + 'Php5', + __DIR__ . '/php7.y' => 'Php7', +]; + +$tokensFile = __DIR__ . '/tokens.y'; +$tokensTemplate = __DIR__ . '/tokens.template'; +$skeletonFile = __DIR__ . '/parser.template'; +$tmpGrammarFile = __DIR__ . '/tmp_parser.phpy'; +$tmpResultFile = __DIR__ . '/tmp_parser.php'; +$resultDir = __DIR__ . '/../lib/PhpParser/Parser'; +$tokensResultsFile = $resultDir . '/Tokens.php'; + +$kmyacc = getenv('KMYACC'); +if (!$kmyacc) { + // Use phpyacc from dev dependencies by default. + $kmyacc = PHP_BINARY . ' ' . __DIR__ . '/../vendor/bin/phpyacc'; +} + +$options = array_flip($argv); +$optionDebug = isset($options['--debug']); +$optionKeepTmpGrammar = isset($options['--keep-tmp-grammar']); + +/////////////////////////////// +/// Utility regex constants /// +/////////////////////////////// + +const LIB = '(?(DEFINE) + (?\'[^\\\\\']*+(?:\\\\.[^\\\\\']*+)*+\') + (?"[^\\\\"]*+(?:\\\\.[^\\\\"]*+)*+") + (?(?&singleQuotedString)|(?&doubleQuotedString)) + (?/\*[^*]*+(?:\*(?!/)[^*]*+)*+\*/) + (?\{[^\'"/{}]*+(?:(?:(?&string)|(?&comment)|(?&code)|/)[^\'"/{}]*+)*+}) +)'; + +const PARAMS = '\[(?[^[\]]*+(?:\[(?¶ms)\][^[\]]*+)*+)\]'; +const ARGS = '\((?[^()]*+(?:\((?&args)\)[^()]*+)*+)\)'; + +/////////////////// +/// Main script /// +/////////////////// + +$tokens = file_get_contents($tokensFile); + +foreach ($grammarFileToName as $grammarFile => $name) { + echo "Building temporary $name grammar file.\n"; + + $grammarCode = file_get_contents($grammarFile); + $grammarCode = str_replace('%tokens', $tokens, $grammarCode); + + $grammarCode = resolveNodes($grammarCode); + $grammarCode = resolveMacros($grammarCode); + $grammarCode = resolveStackAccess($grammarCode); + + file_put_contents($tmpGrammarFile, $grammarCode); + + $additionalArgs = $optionDebug ? '-t -v' : ''; + + echo "Building $name parser.\n"; + $output = execCmd("$kmyacc $additionalArgs -m $skeletonFile -p $name $tmpGrammarFile"); + + $resultCode = file_get_contents($tmpResultFile); + $resultCode = removeTrailingWhitespace($resultCode); + + ensureDirExists($resultDir); + file_put_contents("$resultDir/$name.php", $resultCode); + unlink($tmpResultFile); + + echo "Building token definition.\n"; + $output = execCmd("$kmyacc -m $tokensTemplate $tmpGrammarFile"); + rename($tmpResultFile, $tokensResultsFile); + + if (!$optionKeepTmpGrammar) { + unlink($tmpGrammarFile); + } +} + +/////////////////////////////// +/// Preprocessing functions /// +/////////////////////////////// + +function resolveNodes($code) { + return preg_replace_callback( + '~\b(?[A-Z][a-zA-Z_\\\\]++)\s*' . PARAMS . '~', + function($matches) { + // recurse + $matches['params'] = resolveNodes($matches['params']); + + $params = magicSplit( + '(?:' . PARAMS . '|' . ARGS . ')(*SKIP)(*FAIL)|,', + $matches['params'] + ); + + $paramCode = ''; + foreach ($params as $param) { + $paramCode .= $param . ', '; + } + + return 'new ' . $matches['name'] . '(' . $paramCode . 'attributes())'; + }, + $code + ); +} + +function resolveMacros($code) { + return preg_replace_callback( + '~\b(?)(?!array\()(?[a-z][A-Za-z]++)' . ARGS . '~', + function($matches) { + // recurse + $matches['args'] = resolveMacros($matches['args']); + + $name = $matches['name']; + $args = magicSplit( + '(?:' . PARAMS . '|' . ARGS . ')(*SKIP)(*FAIL)|,', + $matches['args'] + ); + + if ('attributes' == $name) { + assertArgs(0, $args, $name); + return '$this->startAttributeStack[#1] + $this->endAttributes'; + } + + if ('stackAttributes' == $name) { + assertArgs(1, $args, $name); + return '$this->startAttributeStack[' . $args[0] . ']' + . ' + $this->endAttributeStack[' . $args[0] . ']'; + } + + if ('init' == $name) { + return '$$ = array(' . implode(', ', $args) . ')'; + } + + if ('push' == $name) { + assertArgs(2, $args, $name); + + return $args[0] . '[] = ' . $args[1] . '; $$ = ' . $args[0]; + } + + if ('pushNormalizing' == $name) { + assertArgs(2, $args, $name); + + return 'if (is_array(' . $args[1] . ')) { $$ = array_merge(' . $args[0] . ', ' . $args[1] . '); }' + . ' else { ' . $args[0] . '[] = ' . $args[1] . '; $$ = ' . $args[0] . '; }'; + } + + if ('toArray' == $name) { + assertArgs(1, $args, $name); + + return 'is_array(' . $args[0] . ') ? ' . $args[0] . ' : array(' . $args[0] . ')'; + } + + if ('parseVar' == $name) { + assertArgs(1, $args, $name); + + return 'substr(' . $args[0] . ', 1)'; + } + + if ('parseEncapsed' == $name) { + assertArgs(3, $args, $name); + + return 'foreach (' . $args[0] . ' as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) {' + . ' $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, ' . $args[1] . ', ' . $args[2] . '); } }'; + } + + if ('makeNop' == $name) { + assertArgs(3, $args, $name); + + return '$startAttributes = ' . $args[1] . ';' + . ' if (isset($startAttributes[\'comments\']))' + . ' { ' . $args[0] . ' = new Stmt\Nop($startAttributes + ' . $args[2] . '); }' + . ' else { ' . $args[0] . ' = null; }'; + } + + if ('makeZeroLengthNop' == $name) { + assertArgs(2, $args, $name); + + return '$startAttributes = ' . $args[1] . ';' + . ' if (isset($startAttributes[\'comments\']))' + . ' { ' . $args[0] . ' = new Stmt\Nop($this->createCommentNopAttributes($startAttributes[\'comments\'])); }' + . ' else { ' . $args[0] . ' = null; }'; + } + + if ('strKind' == $name) { + assertArgs(1, $args, $name); + + return '(' . $args[0] . '[0] === "\'" || (' . $args[0] . '[1] === "\'" && ' + . '(' . $args[0] . '[0] === \'b\' || ' . $args[0] . '[0] === \'B\')) ' + . '? Scalar\String_::KIND_SINGLE_QUOTED : Scalar\String_::KIND_DOUBLE_QUOTED)'; + } + + if ('prependLeadingComments' == $name) { + assertArgs(1, $args, $name); + + return '$attrs = $this->startAttributeStack[#1]; $stmts = ' . $args[0] . '; ' + . 'if (!empty($attrs[\'comments\'])) {' + . '$stmts[0]->setAttribute(\'comments\', ' + . 'array_merge($attrs[\'comments\'], $stmts[0]->getAttribute(\'comments\', []))); }'; + } + + return $matches[0]; + }, + $code + ); +} + +function assertArgs($num, $args, $name) { + if ($num != count($args)) { + die('Wrong argument count for ' . $name . '().'); + } +} + +function resolveStackAccess($code) { + $code = preg_replace('/\$\d+/', '$this->semStack[$0]', $code); + $code = preg_replace('/#(\d+)/', '$$1', $code); + return $code; +} + +function removeTrailingWhitespace($code) { + $lines = explode("\n", $code); + $lines = array_map('rtrim', $lines); + return implode("\n", $lines); +} + +function ensureDirExists($dir) { + if (!is_dir($dir)) { + mkdir($dir, 0777, true); + } +} + +function execCmd($cmd) { + $output = trim(shell_exec("$cmd 2>&1")); + if ($output !== "") { + echo "> " . $cmd . "\n"; + echo $output; + } + return $output; +} + +////////////////////////////// +/// Regex helper functions /// +////////////////////////////// + +function regex($regex) { + return '~' . LIB . '(?:' . str_replace('~', '\~', $regex) . ')~'; +} + +function magicSplit($regex, $string) { + $pieces = preg_split(regex('(?:(?&string)|(?&comment)|(?&code))(*SKIP)(*FAIL)|' . $regex), $string); + + foreach ($pieces as &$piece) { + $piece = trim($piece); + } + + if ($pieces === ['']) { + return []; + } + + return $pieces; +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/grammar/tokens.template b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/grammar/tokens.template new file mode 100644 index 0000000..ba4e490 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/grammar/tokens.template @@ -0,0 +1,17 @@ +semValue +#semval($,%t) $this->semValue +#semval(%n) $this->stackPos-(%l-%n) +#semval(%n,%t) $this->stackPos-(%l-%n) + +namespace PhpParser\Parser; +#include; + +/* GENERATED file based on grammar/tokens.y */ +final class Tokens +{ +#tokenval + const %s = %n; +#endtokenval +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/grammar/tokens.y b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/grammar/tokens.y new file mode 100644 index 0000000..dd83a6f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/grammar/tokens.y @@ -0,0 +1,114 @@ +/* We currently rely on the token ID mapping to be the same between PHP 5 and PHP 7 - so the same lexer can be used for + * both. This is enforced by sharing this token file. */ + +%left T_INCLUDE T_INCLUDE_ONCE T_EVAL T_REQUIRE T_REQUIRE_ONCE +%left ',' +%left T_LOGICAL_OR +%left T_LOGICAL_XOR +%left T_LOGICAL_AND +%right T_PRINT +%right T_YIELD +%right T_DOUBLE_ARROW +%right T_YIELD_FROM +%left '=' T_PLUS_EQUAL T_MINUS_EQUAL T_MUL_EQUAL T_DIV_EQUAL T_CONCAT_EQUAL T_MOD_EQUAL T_AND_EQUAL T_OR_EQUAL T_XOR_EQUAL T_SL_EQUAL T_SR_EQUAL T_POW_EQUAL T_COALESCE_EQUAL +%left '?' ':' +%right T_COALESCE +%left T_BOOLEAN_OR +%left T_BOOLEAN_AND +%left '|' +%left '^' +%left '&' +%nonassoc T_IS_EQUAL T_IS_NOT_EQUAL T_IS_IDENTICAL T_IS_NOT_IDENTICAL T_SPACESHIP +%nonassoc '<' T_IS_SMALLER_OR_EQUAL '>' T_IS_GREATER_OR_EQUAL +%left T_SL T_SR +%left '+' '-' '.' +%left '*' '/' '%' +%right '!' +%nonassoc T_INSTANCEOF +%right '~' T_INC T_DEC T_INT_CAST T_DOUBLE_CAST T_STRING_CAST T_ARRAY_CAST T_OBJECT_CAST T_BOOL_CAST T_UNSET_CAST '@' +%right T_POW +%right '[' +%nonassoc T_NEW T_CLONE +%token T_EXIT +%token T_IF +%left T_ELSEIF +%left T_ELSE +%left T_ENDIF +%token T_LNUMBER +%token T_DNUMBER +%token T_STRING +%token T_STRING_VARNAME +%token T_VARIABLE +%token T_NUM_STRING +%token T_INLINE_HTML +%token T_CHARACTER +%token T_BAD_CHARACTER +%token T_ENCAPSED_AND_WHITESPACE +%token T_CONSTANT_ENCAPSED_STRING +%token T_ECHO +%token T_DO +%token T_WHILE +%token T_ENDWHILE +%token T_FOR +%token T_ENDFOR +%token T_FOREACH +%token T_ENDFOREACH +%token T_DECLARE +%token T_ENDDECLARE +%token T_AS +%token T_SWITCH +%token T_ENDSWITCH +%token T_CASE +%token T_DEFAULT +%token T_BREAK +%token T_CONTINUE +%token T_GOTO +%token T_FUNCTION +%token T_FN +%token T_CONST +%token T_RETURN +%token T_TRY +%token T_CATCH +%token T_FINALLY +%token T_THROW +%token T_USE +%token T_INSTEADOF +%token T_GLOBAL +%right T_STATIC T_ABSTRACT T_FINAL T_PRIVATE T_PROTECTED T_PUBLIC +%token T_VAR +%token T_UNSET +%token T_ISSET +%token T_EMPTY +%token T_HALT_COMPILER +%token T_CLASS +%token T_TRAIT +%token T_INTERFACE +%token T_EXTENDS +%token T_IMPLEMENTS +%token T_OBJECT_OPERATOR +%token T_DOUBLE_ARROW +%token T_LIST +%token T_ARRAY +%token T_CALLABLE +%token T_CLASS_C +%token T_TRAIT_C +%token T_METHOD_C +%token T_FUNC_C +%token T_LINE +%token T_FILE +%token T_COMMENT +%token T_DOC_COMMENT +%token T_OPEN_TAG +%token T_OPEN_TAG_WITH_ECHO +%token T_CLOSE_TAG +%token T_WHITESPACE +%token T_START_HEREDOC +%token T_END_HEREDOC +%token T_DOLLAR_OPEN_CURLY_BRACES +%token T_CURLY_OPEN +%token T_PAAMAYIM_NEKUDOTAYIM +%token T_NAMESPACE +%token T_NS_C +%token T_DIR +%token T_NS_SEPARATOR +%token T_ELLIPSIS diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder.php new file mode 100644 index 0000000..26d8921 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder.php @@ -0,0 +1,13 @@ +name = $name; + } + + /** + * Extends a class. + * + * @param Name|string $class Name of class to extend + * + * @return $this The builder instance (for fluid interface) + */ + public function extend($class) { + $this->extends = BuilderHelpers::normalizeName($class); + + return $this; + } + + /** + * Implements one or more interfaces. + * + * @param Name|string ...$interfaces Names of interfaces to implement + * + * @return $this The builder instance (for fluid interface) + */ + public function implement(...$interfaces) { + foreach ($interfaces as $interface) { + $this->implements[] = BuilderHelpers::normalizeName($interface); + } + + return $this; + } + + /** + * Makes the class abstract. + * + * @return $this The builder instance (for fluid interface) + */ + public function makeAbstract() { + $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_ABSTRACT); + + return $this; + } + + /** + * Makes the class final. + * + * @return $this The builder instance (for fluid interface) + */ + public function makeFinal() { + $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_FINAL); + + return $this; + } + + /** + * Adds a statement. + * + * @param Stmt|PhpParser\Builder $stmt The statement to add + * + * @return $this The builder instance (for fluid interface) + */ + public function addStmt($stmt) { + $stmt = BuilderHelpers::normalizeNode($stmt); + + $targets = [ + Stmt\TraitUse::class => &$this->uses, + Stmt\ClassConst::class => &$this->constants, + Stmt\Property::class => &$this->properties, + Stmt\ClassMethod::class => &$this->methods, + ]; + + $class = \get_class($stmt); + if (!isset($targets[$class])) { + throw new \LogicException(sprintf('Unexpected node of type "%s"', $stmt->getType())); + } + + $targets[$class][] = $stmt; + + return $this; + } + + /** + * Returns the built class node. + * + * @return Stmt\Class_ The built class node + */ + public function getNode() : PhpParser\Node { + return new Stmt\Class_($this->name, [ + 'flags' => $this->flags, + 'extends' => $this->extends, + 'implements' => $this->implements, + 'stmts' => array_merge($this->uses, $this->constants, $this->properties, $this->methods), + ], $this->attributes); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Declaration.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Declaration.php new file mode 100644 index 0000000..8309499 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Declaration.php @@ -0,0 +1,43 @@ +addStmt($stmt); + } + + return $this; + } + + /** + * Sets doc comment for the declaration. + * + * @param PhpParser\Comment\Doc|string $docComment Doc comment to set + * + * @return $this The builder instance (for fluid interface) + */ + public function setDocComment($docComment) { + $this->attributes['comments'] = [ + BuilderHelpers::normalizeDocComment($docComment) + ]; + + return $this; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php new file mode 100644 index 0000000..8e7db39 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php @@ -0,0 +1,74 @@ +returnByRef = true; + + return $this; + } + + /** + * Adds a parameter. + * + * @param Node\Param|Param $param The parameter to add + * + * @return $this The builder instance (for fluid interface) + */ + public function addParam($param) { + $param = BuilderHelpers::normalizeNode($param); + + if (!$param instanceof Node\Param) { + throw new \LogicException(sprintf('Expected parameter node, got "%s"', $param->getType())); + } + + $this->params[] = $param; + + return $this; + } + + /** + * Adds multiple parameters. + * + * @param array $params The parameters to add + * + * @return $this The builder instance (for fluid interface) + */ + public function addParams(array $params) { + foreach ($params as $param) { + $this->addParam($param); + } + + return $this; + } + + /** + * Sets the return type for PHP 7. + * + * @param string|Node\Name|Node\NullableType $type One of array, callable, string, int, float, + * bool, iterable, or a class/interface name. + * + * @return $this The builder instance (for fluid interface) + */ + public function setReturnType($type) { + $this->returnType = BuilderHelpers::normalizeType($type); + + return $this; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Function_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Function_.php new file mode 100644 index 0000000..56eda2a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Function_.php @@ -0,0 +1,50 @@ +name = $name; + } + + /** + * Adds a statement. + * + * @param Node|PhpParser\Builder $stmt The statement to add + * + * @return $this The builder instance (for fluid interface) + */ + public function addStmt($stmt) { + $this->stmts[] = BuilderHelpers::normalizeStmt($stmt); + + return $this; + } + + /** + * Returns the built function node. + * + * @return Stmt\Function_ The built function node + */ + public function getNode() : Node { + return new Stmt\Function_($this->name, [ + 'byRef' => $this->returnByRef, + 'params' => $this->params, + 'returnType' => $this->returnType, + 'stmts' => $this->stmts, + ], $this->attributes); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Interface_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Interface_.php new file mode 100644 index 0000000..87e5b93 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Interface_.php @@ -0,0 +1,75 @@ +name = $name; + } + + /** + * Extends one or more interfaces. + * + * @param Name|string ...$interfaces Names of interfaces to extend + * + * @return $this The builder instance (for fluid interface) + */ + public function extend(...$interfaces) { + foreach ($interfaces as $interface) { + $this->extends[] = BuilderHelpers::normalizeName($interface); + } + + return $this; + } + + /** + * Adds a statement. + * + * @param Stmt|PhpParser\Builder $stmt The statement to add + * + * @return $this The builder instance (for fluid interface) + */ + public function addStmt($stmt) { + $stmt = BuilderHelpers::normalizeNode($stmt); + + if ($stmt instanceof Stmt\ClassConst) { + $this->constants[] = $stmt; + } elseif ($stmt instanceof Stmt\ClassMethod) { + // we erase all statements in the body of an interface method + $stmt->stmts = null; + $this->methods[] = $stmt; + } else { + throw new \LogicException(sprintf('Unexpected node of type "%s"', $stmt->getType())); + } + + return $this; + } + + /** + * Returns the built interface node. + * + * @return Stmt\Interface_ The built interface node + */ + public function getNode() : PhpParser\Node { + return new Stmt\Interface_($this->name, [ + 'extends' => $this->extends, + 'stmts' => array_merge($this->constants, $this->methods), + ], $this->attributes); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Method.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Method.php new file mode 100644 index 0000000..a3e8676 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Method.php @@ -0,0 +1,129 @@ +name = $name; + } + + /** + * Makes the method public. + * + * @return $this The builder instance (for fluid interface) + */ + public function makePublic() { + $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PUBLIC); + + return $this; + } + + /** + * Makes the method protected. + * + * @return $this The builder instance (for fluid interface) + */ + public function makeProtected() { + $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PROTECTED); + + return $this; + } + + /** + * Makes the method private. + * + * @return $this The builder instance (for fluid interface) + */ + public function makePrivate() { + $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PRIVATE); + + return $this; + } + + /** + * Makes the method static. + * + * @return $this The builder instance (for fluid interface) + */ + public function makeStatic() { + $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_STATIC); + + return $this; + } + + /** + * Makes the method abstract. + * + * @return $this The builder instance (for fluid interface) + */ + public function makeAbstract() { + if (!empty($this->stmts)) { + throw new \LogicException('Cannot make method with statements abstract'); + } + + $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_ABSTRACT); + $this->stmts = null; // abstract methods don't have statements + + return $this; + } + + /** + * Makes the method final. + * + * @return $this The builder instance (for fluid interface) + */ + public function makeFinal() { + $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_FINAL); + + return $this; + } + + /** + * Adds a statement. + * + * @param Node|PhpParser\Builder $stmt The statement to add + * + * @return $this The builder instance (for fluid interface) + */ + public function addStmt($stmt) { + if (null === $this->stmts) { + throw new \LogicException('Cannot add statements to an abstract method'); + } + + $this->stmts[] = BuilderHelpers::normalizeStmt($stmt); + + return $this; + } + + /** + * Returns the built method node. + * + * @return Stmt\ClassMethod The built method node + */ + public function getNode() : Node { + return new Stmt\ClassMethod($this->name, [ + 'flags' => $this->flags, + 'byRef' => $this->returnByRef, + 'params' => $this->params, + 'returnType' => $this->returnType, + 'stmts' => $this->stmts, + ], $this->attributes); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php new file mode 100644 index 0000000..b9ccab3 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php @@ -0,0 +1,45 @@ +name = null !== $name ? BuilderHelpers::normalizeName($name) : null; + } + + /** + * Adds a statement. + * + * @param Node|PhpParser\Builder $stmt The statement to add + * + * @return $this The builder instance (for fluid interface) + */ + public function addStmt($stmt) { + $this->stmts[] = BuilderHelpers::normalizeStmt($stmt); + + return $this; + } + + /** + * Returns the built node. + * + * @return Node The built node + */ + public function getNode() : Node { + return new Stmt\Namespace_($this->name, $this->stmts, $this->attributes); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php new file mode 100644 index 0000000..c649178 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php @@ -0,0 +1,106 @@ +name = $name; + } + + /** + * Sets default value for the parameter. + * + * @param mixed $value Default value to use + * + * @return $this The builder instance (for fluid interface) + */ + public function setDefault($value) { + $this->default = BuilderHelpers::normalizeValue($value); + + return $this; + } + + /** + * Sets type for the parameter. + * + * @param string|Node\Name|Node\NullableType|Node\UnionType $type Parameter type + * + * @return $this The builder instance (for fluid interface) + */ + public function setType($type) { + $this->type = BuilderHelpers::normalizeType($type); + if ($this->type == 'void') { + throw new \LogicException('Parameter type cannot be void'); + } + + return $this; + } + + /** + * Sets type for the parameter. + * + * @param string|Node\Name|Node\NullableType|Node\UnionType $type Parameter type + * + * @return $this The builder instance (for fluid interface) + * + * @deprecated Use setType() instead + */ + public function setTypeHint($type) { + return $this->setType($type); + } + + /** + * Make the parameter accept the value by reference. + * + * @return $this The builder instance (for fluid interface) + */ + public function makeByRef() { + $this->byRef = true; + + return $this; + } + + /** + * Make the parameter variadic + * + * @return $this The builder instance (for fluid interface) + */ + public function makeVariadic() { + $this->variadic = true; + + return $this; + } + + /** + * Returns the built parameter node. + * + * @return Node\Param The built parameter node + */ + public function getNode() : Node { + return new Node\Param( + new Node\Expr\Variable($this->name), + $this->default, $this->type, $this->byRef, $this->variadic + ); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Property.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Property.php new file mode 100644 index 0000000..1f3bdb2 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Property.php @@ -0,0 +1,132 @@ +name = $name; + } + + /** + * Makes the property public. + * + * @return $this The builder instance (for fluid interface) + */ + public function makePublic() { + $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PUBLIC); + + return $this; + } + + /** + * Makes the property protected. + * + * @return $this The builder instance (for fluid interface) + */ + public function makeProtected() { + $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PROTECTED); + + return $this; + } + + /** + * Makes the property private. + * + * @return $this The builder instance (for fluid interface) + */ + public function makePrivate() { + $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PRIVATE); + + return $this; + } + + /** + * Makes the property static. + * + * @return $this The builder instance (for fluid interface) + */ + public function makeStatic() { + $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_STATIC); + + return $this; + } + + /** + * Sets default value for the property. + * + * @param mixed $value Default value to use + * + * @return $this The builder instance (for fluid interface) + */ + public function setDefault($value) { + $this->default = BuilderHelpers::normalizeValue($value); + + return $this; + } + + /** + * Sets doc comment for the property. + * + * @param PhpParser\Comment\Doc|string $docComment Doc comment to set + * + * @return $this The builder instance (for fluid interface) + */ + public function setDocComment($docComment) { + $this->attributes = [ + 'comments' => [BuilderHelpers::normalizeDocComment($docComment)] + ]; + + return $this; + } + + /** + * Sets the property type for PHP 7.4+. + * + * @param string|Name|NullableType|Identifier $type + * + * @return $this + */ + public function setType($type) { + $this->type = BuilderHelpers::normalizeType($type); + + return $this; + } + + /** + * Returns the built class node. + * + * @return Stmt\Property The built property node + */ + public function getNode() : PhpParser\Node { + return new Stmt\Property( + $this->flags !== 0 ? $this->flags : Stmt\Class_::MODIFIER_PUBLIC, + [ + new Stmt\PropertyProperty($this->name, $this->default) + ], + $this->attributes, + $this->type + ); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php new file mode 100644 index 0000000..311e8cd --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php @@ -0,0 +1,64 @@ +and($trait); + } + } + + /** + * Adds used trait. + * + * @param Node\Name|string $trait Trait name + * + * @return $this The builder instance (for fluid interface) + */ + public function and($trait) { + $this->traits[] = BuilderHelpers::normalizeName($trait); + return $this; + } + + /** + * Adds trait adaptation. + * + * @param Stmt\TraitUseAdaptation|Builder\TraitUseAdaptation $adaptation Trait adaptation + * + * @return $this The builder instance (for fluid interface) + */ + public function with($adaptation) { + $adaptation = BuilderHelpers::normalizeNode($adaptation); + + if (!$adaptation instanceof Stmt\TraitUseAdaptation) { + throw new \LogicException('Adaptation must have type TraitUseAdaptation'); + } + + $this->adaptations[] = $adaptation; + return $this; + } + + /** + * Returns the built node. + * + * @return Node The built node + */ + public function getNode() : Node { + return new Stmt\TraitUse($this->traits, $this->adaptations); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php new file mode 100644 index 0000000..eb6c0b6 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php @@ -0,0 +1,148 @@ +type = self::TYPE_UNDEFINED; + + $this->trait = is_null($trait)? null: BuilderHelpers::normalizeName($trait); + $this->method = BuilderHelpers::normalizeIdentifier($method); + } + + /** + * Sets alias of method. + * + * @param Node\Identifier|string $alias Alias for adaptated method + * + * @return $this The builder instance (for fluid interface) + */ + public function as($alias) { + if ($this->type === self::TYPE_UNDEFINED) { + $this->type = self::TYPE_ALIAS; + } + + if ($this->type !== self::TYPE_ALIAS) { + throw new \LogicException('Cannot set alias for not alias adaptation buider'); + } + + $this->alias = $alias; + return $this; + } + + /** + * Sets adaptated method public. + * + * @return $this The builder instance (for fluid interface) + */ + public function makePublic() { + $this->setModifier(Stmt\Class_::MODIFIER_PUBLIC); + return $this; + } + + /** + * Sets adaptated method protected. + * + * @return $this The builder instance (for fluid interface) + */ + public function makeProtected() { + $this->setModifier(Stmt\Class_::MODIFIER_PROTECTED); + return $this; + } + + /** + * Sets adaptated method private. + * + * @return $this The builder instance (for fluid interface) + */ + public function makePrivate() { + $this->setModifier(Stmt\Class_::MODIFIER_PRIVATE); + return $this; + } + + /** + * Adds overwritten traits. + * + * @param Node\Name|string ...$traits Traits for overwrite + * + * @return $this The builder instance (for fluid interface) + */ + public function insteadof(...$traits) { + if ($this->type === self::TYPE_UNDEFINED) { + if (is_null($this->trait)) { + throw new \LogicException('Precedence adaptation must have trait'); + } + + $this->type = self::TYPE_PRECEDENCE; + } + + if ($this->type !== self::TYPE_PRECEDENCE) { + throw new \LogicException('Cannot add overwritten traits for not precedence adaptation buider'); + } + + foreach ($traits as $trait) { + $this->insteadof[] = BuilderHelpers::normalizeName($trait); + } + + return $this; + } + + protected function setModifier(int $modifier) { + if ($this->type === self::TYPE_UNDEFINED) { + $this->type = self::TYPE_ALIAS; + } + + if ($this->type !== self::TYPE_ALIAS) { + throw new \LogicException('Cannot set access modifier for not alias adaptation buider'); + } + + if (is_null($this->modifier)) { + $this->modifier = $modifier; + } else { + throw new \LogicException('Multiple access type modifiers are not allowed'); + } + } + + /** + * Returns the built node. + * + * @return Node The built node + */ + public function getNode() : Node { + switch ($this->type) { + case self::TYPE_ALIAS: + return new Stmt\TraitUseAdaptation\Alias($this->trait, $this->method, $this->modifier, $this->alias); + case self::TYPE_PRECEDENCE: + return new Stmt\TraitUseAdaptation\Precedence($this->trait, $this->method, $this->insteadof); + default: + throw new \LogicException('Type of adaptation is not defined'); + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Trait_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Trait_.php new file mode 100644 index 0000000..a836d40 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Trait_.php @@ -0,0 +1,60 @@ +name = $name; + } + + /** + * Adds a statement. + * + * @param Stmt|PhpParser\Builder $stmt The statement to add + * + * @return $this The builder instance (for fluid interface) + */ + public function addStmt($stmt) { + $stmt = BuilderHelpers::normalizeNode($stmt); + + if ($stmt instanceof Stmt\Property) { + $this->properties[] = $stmt; + } elseif ($stmt instanceof Stmt\ClassMethod) { + $this->methods[] = $stmt; + } elseif ($stmt instanceof Stmt\TraitUse) { + $this->uses[] = $stmt; + } else { + throw new \LogicException(sprintf('Unexpected node of type "%s"', $stmt->getType())); + } + + return $this; + } + + /** + * Returns the built trait node. + * + * @return Stmt\Trait_ The built interface node + */ + public function getNode() : PhpParser\Node { + return new Stmt\Trait_( + $this->name, [ + 'stmts' => array_merge($this->uses, $this->properties, $this->methods) + ], $this->attributes + ); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Use_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Use_.php new file mode 100644 index 0000000..2026a17 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Builder/Use_.php @@ -0,0 +1,49 @@ +name = BuilderHelpers::normalizeName($name); + $this->type = $type; + } + + /** + * Sets alias for used name. + * + * @param string $alias Alias to use (last component of full name by default) + * + * @return $this The builder instance (for fluid interface) + */ + public function as(string $alias) { + $this->alias = $alias; + return $this; + } + + /** + * Returns the built node. + * + * @return Node The built node + */ + public function getNode() : Node { + return new Stmt\Use_([ + new Stmt\UseUse($this->name, $this->alias) + ], $this->type); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/BuilderFactory.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/BuilderFactory.php new file mode 100644 index 0000000..18bd1cd --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/BuilderFactory.php @@ -0,0 +1,348 @@ +args($args) + ); + } + + /** + * Creates a method call node. + * + * @param Expr $var Variable the method is called on + * @param string|Identifier|Expr $name Method name + * @param array $args Method arguments + * + * @return Expr\MethodCall + */ + public function methodCall(Expr $var, $name, array $args = []) : Expr\MethodCall { + return new Expr\MethodCall( + $var, + BuilderHelpers::normalizeIdentifierOrExpr($name), + $this->args($args) + ); + } + + /** + * Creates a static method call node. + * + * @param string|Name|Expr $class Class name + * @param string|Identifier|Expr $name Method name + * @param array $args Method arguments + * + * @return Expr\StaticCall + */ + public function staticCall($class, $name, array $args = []) : Expr\StaticCall { + return new Expr\StaticCall( + BuilderHelpers::normalizeNameOrExpr($class), + BuilderHelpers::normalizeIdentifierOrExpr($name), + $this->args($args) + ); + } + + /** + * Creates an object creation node. + * + * @param string|Name|Expr $class Class name + * @param array $args Constructor arguments + * + * @return Expr\New_ + */ + public function new($class, array $args = []) : Expr\New_ { + return new Expr\New_( + BuilderHelpers::normalizeNameOrExpr($class), + $this->args($args) + ); + } + + /** + * Creates a constant fetch node. + * + * @param string|Name $name Constant name + * + * @return Expr\ConstFetch + */ + public function constFetch($name) : Expr\ConstFetch { + return new Expr\ConstFetch(BuilderHelpers::normalizeName($name)); + } + + /** + * Creates a property fetch node. + * + * @param Expr $var Variable holding object + * @param string|Identifier|Expr $name Property name + * + * @return Expr\PropertyFetch + */ + public function propertyFetch(Expr $var, $name) : Expr\PropertyFetch { + return new Expr\PropertyFetch($var, BuilderHelpers::normalizeIdentifierOrExpr($name)); + } + + /** + * Creates a class constant fetch node. + * + * @param string|Name|Expr $class Class name + * @param string|Identifier $name Constant name + * + * @return Expr\ClassConstFetch + */ + public function classConstFetch($class, $name): Expr\ClassConstFetch { + return new Expr\ClassConstFetch( + BuilderHelpers::normalizeNameOrExpr($class), + BuilderHelpers::normalizeIdentifier($name) + ); + } + + /** + * Creates nested Concat nodes from a list of expressions. + * + * @param Expr|string ...$exprs Expressions or literal strings + * + * @return Concat + */ + public function concat(...$exprs) : Concat { + $numExprs = count($exprs); + if ($numExprs < 2) { + throw new \LogicException('Expected at least two expressions'); + } + + $lastConcat = $this->normalizeStringExpr($exprs[0]); + for ($i = 1; $i < $numExprs; $i++) { + $lastConcat = new Concat($lastConcat, $this->normalizeStringExpr($exprs[$i])); + } + return $lastConcat; + } + + /** + * @param string|Expr $expr + * @return Expr + */ + private function normalizeStringExpr($expr) : Expr { + if ($expr instanceof Expr) { + return $expr; + } + + if (\is_string($expr)) { + return new String_($expr); + } + + throw new \LogicException('Expected string or Expr'); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.php new file mode 100644 index 0000000..b745441 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.php @@ -0,0 +1,281 @@ +getNode(); + } elseif ($node instanceof Node) { + return $node; + } + + throw new \LogicException('Expected node or builder object'); + } + + /** + * Normalizes a node to a statement. + * + * Expressions are wrapped in a Stmt\Expression node. + * + * @param Node|Builder $node The node to normalize + * + * @return Stmt The normalized statement node + */ + public static function normalizeStmt($node) : Stmt { + $node = self::normalizeNode($node); + if ($node instanceof Stmt) { + return $node; + } + + if ($node instanceof Expr) { + return new Stmt\Expression($node); + } + + throw new \LogicException('Expected statement or expression node'); + } + + /** + * Normalizes strings to Identifier. + * + * @param string|Identifier $name The identifier to normalize + * + * @return Identifier The normalized identifier + */ + public static function normalizeIdentifier($name) : Identifier { + if ($name instanceof Identifier) { + return $name; + } + + if (\is_string($name)) { + return new Identifier($name); + } + + throw new \LogicException('Expected string or instance of Node\Identifier'); + } + + /** + * Normalizes strings to Identifier, also allowing expressions. + * + * @param string|Identifier|Expr $name The identifier to normalize + * + * @return Identifier|Expr The normalized identifier or expression + */ + public static function normalizeIdentifierOrExpr($name) { + if ($name instanceof Identifier || $name instanceof Expr) { + return $name; + } + + if (\is_string($name)) { + return new Identifier($name); + } + + throw new \LogicException('Expected string or instance of Node\Identifier or Node\Expr'); + } + + /** + * Normalizes a name: Converts string names to Name nodes. + * + * @param Name|string $name The name to normalize + * + * @return Name The normalized name + */ + public static function normalizeName($name) : Name { + return self::normalizeNameCommon($name, false); + } + + /** + * Normalizes a name: Converts string names to Name nodes, while also allowing expressions. + * + * @param Expr|Name|string $name The name to normalize + * + * @return Name|Expr The normalized name or expression + */ + public static function normalizeNameOrExpr($name) { + return self::normalizeNameCommon($name, true); + } + + /** + * Normalizes a name: Converts string names to Name nodes, optionally allowing expressions. + * + * @param Expr|Name|string $name The name to normalize + * @param bool $allowExpr Whether to also allow expressions + * + * @return Name|Expr The normalized name, or expression (if allowed) + */ + private static function normalizeNameCommon($name, bool $allowExpr) { + if ($name instanceof Name) { + return $name; + } elseif (is_string($name)) { + if (!$name) { + throw new \LogicException('Name cannot be empty'); + } + + if ($name[0] === '\\') { + return new Name\FullyQualified(substr($name, 1)); + } elseif (0 === strpos($name, 'namespace\\')) { + return new Name\Relative(substr($name, strlen('namespace\\'))); + } else { + return new Name($name); + } + } + + if ($allowExpr) { + if ($name instanceof Expr) { + return $name; + } + throw new \LogicException( + 'Name must be a string or an instance of Node\Name or Node\Expr' + ); + } else { + throw new \LogicException('Name must be a string or an instance of Node\Name'); + } + } + + /** + * Normalizes a type: Converts plain-text type names into proper AST representation. + * + * In particular, builtin types become Identifiers, custom types become Names and nullables + * are wrapped in NullableType nodes. + * + * @param string|Name|Identifier|NullableType|UnionType $type The type to normalize + * + * @return Name|Identifier|NullableType|UnionType The normalized type + */ + public static function normalizeType($type) { + if (!is_string($type)) { + if ( + !$type instanceof Name && !$type instanceof Identifier && + !$type instanceof NullableType && !$type instanceof UnionType + ) { + throw new \LogicException( + 'Type must be a string, or an instance of Name, Identifier, NullableType or UnionType' + ); + } + return $type; + } + + $nullable = false; + if (strlen($type) > 0 && $type[0] === '?') { + $nullable = true; + $type = substr($type, 1); + } + + $builtinTypes = [ + 'array', 'callable', 'string', 'int', 'float', 'bool', 'iterable', 'void', 'object' + ]; + + $lowerType = strtolower($type); + if (in_array($lowerType, $builtinTypes)) { + $type = new Identifier($lowerType); + } else { + $type = self::normalizeName($type); + } + + if ($nullable && (string) $type === 'void') { + throw new \LogicException('void type cannot be nullable'); + } + + return $nullable ? new NullableType($type) : $type; + } + + /** + * Normalizes a value: Converts nulls, booleans, integers, + * floats, strings and arrays into their respective nodes + * + * @param Node\Expr|bool|null|int|float|string|array $value The value to normalize + * + * @return Expr The normalized value + */ + public static function normalizeValue($value) : Expr { + if ($value instanceof Node\Expr) { + return $value; + } elseif (is_null($value)) { + return new Expr\ConstFetch( + new Name('null') + ); + } elseif (is_bool($value)) { + return new Expr\ConstFetch( + new Name($value ? 'true' : 'false') + ); + } elseif (is_int($value)) { + return new Scalar\LNumber($value); + } elseif (is_float($value)) { + return new Scalar\DNumber($value); + } elseif (is_string($value)) { + return new Scalar\String_($value); + } elseif (is_array($value)) { + $items = []; + $lastKey = -1; + foreach ($value as $itemKey => $itemValue) { + // for consecutive, numeric keys don't generate keys + if (null !== $lastKey && ++$lastKey === $itemKey) { + $items[] = new Expr\ArrayItem( + self::normalizeValue($itemValue) + ); + } else { + $lastKey = null; + $items[] = new Expr\ArrayItem( + self::normalizeValue($itemValue), + self::normalizeValue($itemKey) + ); + } + } + + return new Expr\Array_($items); + } else { + throw new \LogicException('Invalid value'); + } + } + + /** + * Normalizes a doc comment: Converts plain strings to PhpParser\Comment\Doc. + * + * @param Comment\Doc|string $docComment The doc comment to normalize + * + * @return Comment\Doc The normalized doc comment + */ + public static function normalizeDocComment($docComment) : Comment\Doc { + if ($docComment instanceof Comment\Doc) { + return $docComment; + } elseif (is_string($docComment)) { + return new Comment\Doc($docComment); + } else { + throw new \LogicException('Doc comment must be a string or an instance of PhpParser\Comment\Doc'); + } + } + + /** + * Adds a modifier and returns new modifier bitmask. + * + * @param int $modifiers Existing modifiers + * @param int $modifier Modifier to set + * + * @return int New modifiers + */ + public static function addModifier(int $modifiers, int $modifier) : int { + Stmt\Class_::verifyModifier($modifiers, $modifier); + return $modifiers | $modifier; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Comment.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Comment.php new file mode 100644 index 0000000..61e98d3 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Comment.php @@ -0,0 +1,239 @@ +text = $text; + $this->startLine = $startLine; + $this->startFilePos = $startFilePos; + $this->startTokenPos = $startTokenPos; + $this->endLine = $endLine; + $this->endFilePos = $endFilePos; + $this->endTokenPos = $endTokenPos; + } + + /** + * Gets the comment text. + * + * @return string The comment text (including comment delimiters like /*) + */ + public function getText() : string { + return $this->text; + } + + /** + * Gets the line number the comment started on. + * + * @return int Line number (or -1 if not available) + */ + public function getStartLine() : int { + return $this->startLine; + } + + /** + * Gets the file offset the comment started on. + * + * @return int File offset (or -1 if not available) + */ + public function getStartFilePos() : int { + return $this->startFilePos; + } + + /** + * Gets the token offset the comment started on. + * + * @return int Token offset (or -1 if not available) + */ + public function getStartTokenPos() : int { + return $this->startTokenPos; + } + + /** + * Gets the line number the comment ends on. + * + * @return int Line number (or -1 if not available) + */ + public function getEndLine() : int { + return $this->endLine; + } + + /** + * Gets the file offset the comment ends on. + * + * @return int File offset (or -1 if not available) + */ + public function getEndFilePos() : int { + return $this->endFilePos; + } + + /** + * Gets the token offset the comment ends on. + * + * @return int Token offset (or -1 if not available) + */ + public function getEndTokenPos() : int { + return $this->endTokenPos; + } + + /** + * Gets the line number the comment started on. + * + * @deprecated Use getStartLine() instead + * + * @return int Line number + */ + public function getLine() : int { + return $this->startLine; + } + + /** + * Gets the file offset the comment started on. + * + * @deprecated Use getStartFilePos() instead + * + * @return int File offset + */ + public function getFilePos() : int { + return $this->startFilePos; + } + + /** + * Gets the token offset the comment started on. + * + * @deprecated Use getStartTokenPos() instead + * + * @return int Token offset + */ + public function getTokenPos() : int { + return $this->startTokenPos; + } + + /** + * Gets the comment text. + * + * @return string The comment text (including comment delimiters like /*) + */ + public function __toString() : string { + return $this->text; + } + + /** + * Gets the reformatted comment text. + * + * "Reformatted" here means that we try to clean up the whitespace at the + * starts of the lines. This is necessary because we receive the comments + * without trailing whitespace on the first line, but with trailing whitespace + * on all subsequent lines. + * + * @return mixed|string + */ + public function getReformattedText() { + $text = trim($this->text); + $newlinePos = strpos($text, "\n"); + if (false === $newlinePos) { + // Single line comments don't need further processing + return $text; + } elseif (preg_match('((*BSR_ANYCRLF)(*ANYCRLF)^.*(?:\R\s+\*.*)+$)', $text)) { + // Multi line comment of the type + // + // /* + // * Some text. + // * Some more text. + // */ + // + // is handled by replacing the whitespace sequences before the * by a single space + return preg_replace('(^\s+\*)m', ' *', $this->text); + } elseif (preg_match('(^/\*\*?\s*[\r\n])', $text) && preg_match('(\n(\s*)\*/$)', $text, $matches)) { + // Multi line comment of the type + // + // /* + // Some text. + // Some more text. + // */ + // + // is handled by removing the whitespace sequence on the line before the closing + // */ on all lines. So if the last line is " */", then " " is removed at the + // start of all lines. + return preg_replace('(^' . preg_quote($matches[1]) . ')m', '', $text); + } elseif (preg_match('(^/\*\*?\s*(?!\s))', $text, $matches)) { + // Multi line comment of the type + // + // /* Some text. + // Some more text. + // Indented text. + // Even more text. */ + // + // is handled by removing the difference between the shortest whitespace prefix on all + // lines and the length of the "/* " opening sequence. + $prefixLen = $this->getShortestWhitespacePrefixLen(substr($text, $newlinePos + 1)); + $removeLen = $prefixLen - strlen($matches[0]); + return preg_replace('(^\s{' . $removeLen . '})m', '', $text); + } + + // No idea how to format this comment, so simply return as is + return $text; + } + + /** + * Get length of shortest whitespace prefix (at the start of a line). + * + * If there is a line with no prefix whitespace, 0 is a valid return value. + * + * @param string $str String to check + * @return int Length in characters. Tabs count as single characters. + */ + private function getShortestWhitespacePrefixLen(string $str) : int { + $lines = explode("\n", $str); + $shortestPrefixLen = \INF; + foreach ($lines as $line) { + preg_match('(^\s*)', $line, $matches); + $prefixLen = strlen($matches[0]); + if ($prefixLen < $shortestPrefixLen) { + $shortestPrefixLen = $prefixLen; + } + } + return $shortestPrefixLen; + } + + /** + * @return array + * @psalm-return array{nodeType:string, text:mixed, line:mixed, filePos:mixed} + */ + public function jsonSerialize() : array { + // Technically not a node, but we make it look like one anyway + $type = $this instanceof Comment\Doc ? 'Comment_Doc' : 'Comment'; + return [ + 'nodeType' => $type, + 'text' => $this->text, + // TODO: Rename these to include "start". + 'line' => $this->startLine, + 'filePos' => $this->startFilePos, + 'tokenPos' => $this->startTokenPos, + 'endLine' => $this->endLine, + 'endFilePos' => $this->endFilePos, + 'endTokenPos' => $this->endTokenPos, + ]; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Comment/Doc.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Comment/Doc.php new file mode 100644 index 0000000..a9db612 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Comment/Doc.php @@ -0,0 +1,7 @@ +fallbackEvaluator = $fallbackEvaluator ?? function(Expr $expr) { + throw new ConstExprEvaluationException( + "Expression of type {$expr->getType()} cannot be evaluated" + ); + }; + } + + /** + * Silently evaluates a constant expression into a PHP value. + * + * Thrown Errors, warnings or notices will be converted into a ConstExprEvaluationException. + * The original source of the exception is available through getPrevious(). + * + * If some part of the expression cannot be evaluated, the fallback evaluator passed to the + * constructor will be invoked. By default, if no fallback is provided, an exception of type + * ConstExprEvaluationException is thrown. + * + * See class doc comment for caveats and limitations. + * + * @param Expr $expr Constant expression to evaluate + * @return mixed Result of evaluation + * + * @throws ConstExprEvaluationException if the expression cannot be evaluated or an error occurred + */ + public function evaluateSilently(Expr $expr) { + set_error_handler(function($num, $str, $file, $line) { + throw new \ErrorException($str, 0, $num, $file, $line); + }); + + try { + return $this->evaluate($expr); + } catch (\Throwable $e) { + if (!$e instanceof ConstExprEvaluationException) { + $e = new ConstExprEvaluationException( + "An error occurred during constant expression evaluation", 0, $e); + } + throw $e; + } finally { + restore_error_handler(); + } + } + + /** + * Directly evaluates a constant expression into a PHP value. + * + * May generate Error exceptions, warnings or notices. Use evaluateSilently() to convert these + * into a ConstExprEvaluationException. + * + * If some part of the expression cannot be evaluated, the fallback evaluator passed to the + * constructor will be invoked. By default, if no fallback is provided, an exception of type + * ConstExprEvaluationException is thrown. + * + * See class doc comment for caveats and limitations. + * + * @param Expr $expr Constant expression to evaluate + * @return mixed Result of evaluation + * + * @throws ConstExprEvaluationException if the expression cannot be evaluated + */ + public function evaluateDirectly(Expr $expr) { + return $this->evaluate($expr); + } + + private function evaluate(Expr $expr) { + if ($expr instanceof Scalar\LNumber + || $expr instanceof Scalar\DNumber + || $expr instanceof Scalar\String_ + ) { + return $expr->value; + } + + if ($expr instanceof Expr\Array_) { + return $this->evaluateArray($expr); + } + + // Unary operators + if ($expr instanceof Expr\UnaryPlus) { + return +$this->evaluate($expr->expr); + } + if ($expr instanceof Expr\UnaryMinus) { + return -$this->evaluate($expr->expr); + } + if ($expr instanceof Expr\BooleanNot) { + return !$this->evaluate($expr->expr); + } + if ($expr instanceof Expr\BitwiseNot) { + return ~$this->evaluate($expr->expr); + } + + if ($expr instanceof Expr\BinaryOp) { + return $this->evaluateBinaryOp($expr); + } + + if ($expr instanceof Expr\Ternary) { + return $this->evaluateTernary($expr); + } + + if ($expr instanceof Expr\ArrayDimFetch && null !== $expr->dim) { + return $this->evaluate($expr->var)[$this->evaluate($expr->dim)]; + } + + if ($expr instanceof Expr\ConstFetch) { + return $this->evaluateConstFetch($expr); + } + + return ($this->fallbackEvaluator)($expr); + } + + private function evaluateArray(Expr\Array_ $expr) { + $array = []; + foreach ($expr->items as $item) { + if (null !== $item->key) { + $array[$this->evaluate($item->key)] = $this->evaluate($item->value); + } else { + $array[] = $this->evaluate($item->value); + } + } + return $array; + } + + private function evaluateTernary(Expr\Ternary $expr) { + if (null === $expr->if) { + return $this->evaluate($expr->cond) ?: $this->evaluate($expr->else); + } + + return $this->evaluate($expr->cond) + ? $this->evaluate($expr->if) + : $this->evaluate($expr->else); + } + + private function evaluateBinaryOp(Expr\BinaryOp $expr) { + if ($expr instanceof Expr\BinaryOp\Coalesce + && $expr->left instanceof Expr\ArrayDimFetch + ) { + // This needs to be special cased to respect BP_VAR_IS fetch semantics + return $this->evaluate($expr->left->var)[$this->evaluate($expr->left->dim)] + ?? $this->evaluate($expr->right); + } + + // The evaluate() calls are repeated in each branch, because some of the operators are + // short-circuiting and evaluating the RHS in advance may be illegal in that case + $l = $expr->left; + $r = $expr->right; + switch ($expr->getOperatorSigil()) { + case '&': return $this->evaluate($l) & $this->evaluate($r); + case '|': return $this->evaluate($l) | $this->evaluate($r); + case '^': return $this->evaluate($l) ^ $this->evaluate($r); + case '&&': return $this->evaluate($l) && $this->evaluate($r); + case '||': return $this->evaluate($l) || $this->evaluate($r); + case '??': return $this->evaluate($l) ?? $this->evaluate($r); + case '.': return $this->evaluate($l) . $this->evaluate($r); + case '/': return $this->evaluate($l) / $this->evaluate($r); + case '==': return $this->evaluate($l) == $this->evaluate($r); + case '>': return $this->evaluate($l) > $this->evaluate($r); + case '>=': return $this->evaluate($l) >= $this->evaluate($r); + case '===': return $this->evaluate($l) === $this->evaluate($r); + case 'and': return $this->evaluate($l) and $this->evaluate($r); + case 'or': return $this->evaluate($l) or $this->evaluate($r); + case 'xor': return $this->evaluate($l) xor $this->evaluate($r); + case '-': return $this->evaluate($l) - $this->evaluate($r); + case '%': return $this->evaluate($l) % $this->evaluate($r); + case '*': return $this->evaluate($l) * $this->evaluate($r); + case '!=': return $this->evaluate($l) != $this->evaluate($r); + case '!==': return $this->evaluate($l) !== $this->evaluate($r); + case '+': return $this->evaluate($l) + $this->evaluate($r); + case '**': return $this->evaluate($l) ** $this->evaluate($r); + case '<<': return $this->evaluate($l) << $this->evaluate($r); + case '>>': return $this->evaluate($l) >> $this->evaluate($r); + case '<': return $this->evaluate($l) < $this->evaluate($r); + case '<=': return $this->evaluate($l) <= $this->evaluate($r); + case '<=>': return $this->evaluate($l) <=> $this->evaluate($r); + } + + throw new \Exception('Should not happen'); + } + + private function evaluateConstFetch(Expr\ConstFetch $expr) { + $name = $expr->name->toLowerString(); + switch ($name) { + case 'null': return null; + case 'false': return false; + case 'true': return true; + } + + return ($this->fallbackEvaluator)($expr); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Error.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Error.php new file mode 100644 index 0000000..d1fb959 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Error.php @@ -0,0 +1,180 @@ +rawMessage = $message; + if (is_array($attributes)) { + $this->attributes = $attributes; + } else { + $this->attributes = ['startLine' => $attributes]; + } + $this->updateMessage(); + } + + /** + * Gets the error message + * + * @return string Error message + */ + public function getRawMessage() : string { + return $this->rawMessage; + } + + /** + * Gets the line the error starts in. + * + * @return int Error start line + */ + public function getStartLine() : int { + return $this->attributes['startLine'] ?? -1; + } + + /** + * Gets the line the error ends in. + * + * @return int Error end line + */ + public function getEndLine() : int { + return $this->attributes['endLine'] ?? -1; + } + + /** + * Gets the attributes of the node/token the error occurred at. + * + * @return array + */ + public function getAttributes() : array { + return $this->attributes; + } + + /** + * Sets the attributes of the node/token the error occurred at. + * + * @param array $attributes + */ + public function setAttributes(array $attributes) { + $this->attributes = $attributes; + $this->updateMessage(); + } + + /** + * Sets the line of the PHP file the error occurred in. + * + * @param string $message Error message + */ + public function setRawMessage(string $message) { + $this->rawMessage = $message; + $this->updateMessage(); + } + + /** + * Sets the line the error starts in. + * + * @param int $line Error start line + */ + public function setStartLine(int $line) { + $this->attributes['startLine'] = $line; + $this->updateMessage(); + } + + /** + * Returns whether the error has start and end column information. + * + * For column information enable the startFilePos and endFilePos in the lexer options. + * + * @return bool + */ + public function hasColumnInfo() : bool { + return isset($this->attributes['startFilePos'], $this->attributes['endFilePos']); + } + + /** + * Gets the start column (1-based) into the line where the error started. + * + * @param string $code Source code of the file + * @return int + */ + public function getStartColumn(string $code) : int { + if (!$this->hasColumnInfo()) { + throw new \RuntimeException('Error does not have column information'); + } + + return $this->toColumn($code, $this->attributes['startFilePos']); + } + + /** + * Gets the end column (1-based) into the line where the error ended. + * + * @param string $code Source code of the file + * @return int + */ + public function getEndColumn(string $code) : int { + if (!$this->hasColumnInfo()) { + throw new \RuntimeException('Error does not have column information'); + } + + return $this->toColumn($code, $this->attributes['endFilePos']); + } + + /** + * Formats message including line and column information. + * + * @param string $code Source code associated with the error, for calculation of the columns + * + * @return string Formatted message + */ + public function getMessageWithColumnInfo(string $code) : string { + return sprintf( + '%s from %d:%d to %d:%d', $this->getRawMessage(), + $this->getStartLine(), $this->getStartColumn($code), + $this->getEndLine(), $this->getEndColumn($code) + ); + } + + /** + * Converts a file offset into a column. + * + * @param string $code Source code that $pos indexes into + * @param int $pos 0-based position in $code + * + * @return int 1-based column (relative to start of line) + */ + private function toColumn(string $code, int $pos) : int { + if ($pos > strlen($code)) { + throw new \RuntimeException('Invalid position information'); + } + + $lineStartPos = strrpos($code, "\n", $pos - strlen($code)); + if (false === $lineStartPos) { + $lineStartPos = -1; + } + + return $pos - $lineStartPos; + } + + /** + * Updates the exception message after a change to rawMessage or rawLine. + */ + protected function updateMessage() { + $this->message = $this->rawMessage; + + if (-1 === $this->getStartLine()) { + $this->message .= ' on unknown line'; + } else { + $this->message .= ' on line ' . $this->getStartLine(); + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler.php new file mode 100644 index 0000000..d620e74 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler.php @@ -0,0 +1,13 @@ +errors[] = $error; + } + + /** + * Get collected errors. + * + * @return Error[] + */ + public function getErrors() : array { + return $this->errors; + } + + /** + * Check whether there are any errors. + * + * @return bool + */ + public function hasErrors() : bool { + return !empty($this->errors); + } + + /** + * Reset/clear collected errors. + */ + public function clearErrors() { + $this->errors = []; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php new file mode 100644 index 0000000..aeee989 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php @@ -0,0 +1,18 @@ +type = $type; + $this->old = $old; + $this->new = $new; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Internal/Differ.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Internal/Differ.php new file mode 100644 index 0000000..7f218c7 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Internal/Differ.php @@ -0,0 +1,164 @@ +isEqual = $isEqual; + } + + /** + * Calculate diff (edit script) from $old to $new. + * + * @param array $old Original array + * @param array $new New array + * + * @return DiffElem[] Diff (edit script) + */ + public function diff(array $old, array $new) { + list($trace, $x, $y) = $this->calculateTrace($old, $new); + return $this->extractDiff($trace, $x, $y, $old, $new); + } + + /** + * Calculate diff, including "replace" operations. + * + * If a sequence of remove operations is followed by the same number of add operations, these + * will be coalesced into replace operations. + * + * @param array $old Original array + * @param array $new New array + * + * @return DiffElem[] Diff (edit script), including replace operations + */ + public function diffWithReplacements(array $old, array $new) { + return $this->coalesceReplacements($this->diff($old, $new)); + } + + private function calculateTrace(array $a, array $b) { + $n = \count($a); + $m = \count($b); + $max = $n + $m; + $v = [1 => 0]; + $trace = []; + for ($d = 0; $d <= $max; $d++) { + $trace[] = $v; + for ($k = -$d; $k <= $d; $k += 2) { + if ($k === -$d || ($k !== $d && $v[$k-1] < $v[$k+1])) { + $x = $v[$k+1]; + } else { + $x = $v[$k-1] + 1; + } + + $y = $x - $k; + while ($x < $n && $y < $m && ($this->isEqual)($a[$x], $b[$y])) { + $x++; + $y++; + } + + $v[$k] = $x; + if ($x >= $n && $y >= $m) { + return [$trace, $x, $y]; + } + } + } + throw new \Exception('Should not happen'); + } + + private function extractDiff(array $trace, int $x, int $y, array $a, array $b) { + $result = []; + for ($d = \count($trace) - 1; $d >= 0; $d--) { + $v = $trace[$d]; + $k = $x - $y; + + if ($k === -$d || ($k !== $d && $v[$k-1] < $v[$k+1])) { + $prevK = $k + 1; + } else { + $prevK = $k - 1; + } + + $prevX = $v[$prevK]; + $prevY = $prevX - $prevK; + + while ($x > $prevX && $y > $prevY) { + $result[] = new DiffElem(DiffElem::TYPE_KEEP, $a[$x-1], $b[$y-1]); + $x--; + $y--; + } + + if ($d === 0) { + break; + } + + while ($x > $prevX) { + $result[] = new DiffElem(DiffElem::TYPE_REMOVE, $a[$x-1], null); + $x--; + } + + while ($y > $prevY) { + $result[] = new DiffElem(DiffElem::TYPE_ADD, null, $b[$y-1]); + $y--; + } + } + return array_reverse($result); + } + + /** + * Coalesce equal-length sequences of remove+add into a replace operation. + * + * @param DiffElem[] $diff + * @return DiffElem[] + */ + private function coalesceReplacements(array $diff) { + $newDiff = []; + $c = \count($diff); + for ($i = 0; $i < $c; $i++) { + $diffType = $diff[$i]->type; + if ($diffType !== DiffElem::TYPE_REMOVE) { + $newDiff[] = $diff[$i]; + continue; + } + + $j = $i; + while ($j < $c && $diff[$j]->type === DiffElem::TYPE_REMOVE) { + $j++; + } + + $k = $j; + while ($k < $c && $diff[$k]->type === DiffElem::TYPE_ADD) { + $k++; + } + + if ($j - $i === $k - $j) { + $len = $j - $i; + for ($n = 0; $n < $len; $n++) { + $newDiff[] = new DiffElem( + DiffElem::TYPE_REPLACE, $diff[$i + $n]->old, $diff[$j + $n]->new + ); + } + } else { + for (; $i < $k; $i++) { + $newDiff[] = $diff[$i]; + } + } + $i = $k - 1; + } + return $newDiff; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php new file mode 100644 index 0000000..7b019db --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php @@ -0,0 +1,57 @@ +args = $args; + $this->extends = $extends; + $this->implements = $implements; + $this->stmts = $stmts; + } + + public static function fromNewNode(Expr\New_ $newNode) { + $class = $newNode->class; + assert($class instanceof Node\Stmt\Class_); + // We don't assert that $class->name is null here, to allow consumers to assign unique names + // to anonymous classes for their own purposes. We simplify ignore the name here. + return new self( + $newNode->args, $class->extends, $class->implements, + $class->stmts, $newNode->getAttributes() + ); + } + + public function getType() : string { + return 'Expr_PrintableNewAnonClass'; + } + + public function getSubNodeNames() : array { + return ['args', 'extends', 'implements', 'stmts']; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php new file mode 100644 index 0000000..cf9e00a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php @@ -0,0 +1,256 @@ +tokens = $tokens; + $this->indentMap = $this->calcIndentMap(); + } + + /** + * Whether the given position is immediately surrounded by parenthesis. + * + * @param int $startPos Start position + * @param int $endPos End position + * + * @return bool + */ + public function haveParens(int $startPos, int $endPos) : bool { + return $this->haveTokenImmediativelyBefore($startPos, '(') + && $this->haveTokenImmediatelyAfter($endPos, ')'); + } + + /** + * Whether the given position is immediately surrounded by braces. + * + * @param int $startPos Start position + * @param int $endPos End position + * + * @return bool + */ + public function haveBraces(int $startPos, int $endPos) : bool { + return $this->haveTokenImmediativelyBefore($startPos, '{') + && $this->haveTokenImmediatelyAfter($endPos, '}'); + } + + /** + * Check whether the position is directly preceded by a certain token type. + * + * During this check whitespace and comments are skipped. + * + * @param int $pos Position before which the token should occur + * @param int|string $expectedTokenType Token to check for + * + * @return bool Whether the expected token was found + */ + public function haveTokenImmediativelyBefore(int $pos, $expectedTokenType) : bool { + $tokens = $this->tokens; + $pos--; + for (; $pos >= 0; $pos--) { + $tokenType = $tokens[$pos][0]; + if ($tokenType === $expectedTokenType) { + return true; + } + if ($tokenType !== \T_WHITESPACE + && $tokenType !== \T_COMMENT && $tokenType !== \T_DOC_COMMENT) { + break; + } + } + return false; + } + + /** + * Check whether the position is directly followed by a certain token type. + * + * During this check whitespace and comments are skipped. + * + * @param int $pos Position after which the token should occur + * @param int|string $expectedTokenType Token to check for + * + * @return bool Whether the expected token was found + */ + public function haveTokenImmediatelyAfter(int $pos, $expectedTokenType) : bool { + $tokens = $this->tokens; + $pos++; + for (; $pos < \count($tokens); $pos++) { + $tokenType = $tokens[$pos][0]; + if ($tokenType === $expectedTokenType) { + return true; + } + if ($tokenType !== \T_WHITESPACE + && $tokenType !== \T_COMMENT && $tokenType !== \T_DOC_COMMENT) { + break; + } + } + return false; + } + + public function skipLeft(int $pos, $skipTokenType) { + $tokens = $this->tokens; + + $pos = $this->skipLeftWhitespace($pos); + if ($skipTokenType === \T_WHITESPACE) { + return $pos; + } + + if ($tokens[$pos][0] !== $skipTokenType) { + // Shouldn't happen. The skip token MUST be there + throw new \Exception('Encountered unexpected token'); + } + $pos--; + + return $this->skipLeftWhitespace($pos); + } + + public function skipRight(int $pos, $skipTokenType) { + $tokens = $this->tokens; + + $pos = $this->skipRightWhitespace($pos); + if ($skipTokenType === \T_WHITESPACE) { + return $pos; + } + + if ($tokens[$pos][0] !== $skipTokenType) { + // Shouldn't happen. The skip token MUST be there + throw new \Exception('Encountered unexpected token'); + } + $pos++; + + return $this->skipRightWhitespace($pos); + } + + /** + * Return first non-whitespace token position smaller or equal to passed position. + * + * @param int $pos Token position + * @return int Non-whitespace token position + */ + public function skipLeftWhitespace(int $pos) { + $tokens = $this->tokens; + for (; $pos >= 0; $pos--) { + $type = $tokens[$pos][0]; + if ($type !== \T_WHITESPACE && $type !== \T_COMMENT && $type !== \T_DOC_COMMENT) { + break; + } + } + return $pos; + } + + /** + * Return first non-whitespace position greater or equal to passed position. + * + * @param int $pos Token position + * @return int Non-whitespace token position + */ + public function skipRightWhitespace(int $pos) { + $tokens = $this->tokens; + for ($count = \count($tokens); $pos < $count; $pos++) { + $type = $tokens[$pos][0]; + if ($type !== \T_WHITESPACE && $type !== \T_COMMENT && $type !== \T_DOC_COMMENT) { + break; + } + } + return $pos; + } + + public function findRight($pos, $findTokenType) { + $tokens = $this->tokens; + for ($count = \count($tokens); $pos < $count; $pos++) { + $type = $tokens[$pos][0]; + if ($type === $findTokenType) { + return $pos; + } + } + return -1; + } + + /** + * Get indentation before token position. + * + * @param int $pos Token position + * + * @return int Indentation depth (in spaces) + */ + public function getIndentationBefore(int $pos) : int { + return $this->indentMap[$pos]; + } + + /** + * Get the code corresponding to a token offset range, optionally adjusted for indentation. + * + * @param int $from Token start position (inclusive) + * @param int $to Token end position (exclusive) + * @param int $indent By how much the code should be indented (can be negative as well) + * + * @return string Code corresponding to token range, adjusted for indentation + */ + public function getTokenCode(int $from, int $to, int $indent) : string { + $tokens = $this->tokens; + $result = ''; + for ($pos = $from; $pos < $to; $pos++) { + $token = $tokens[$pos]; + if (\is_array($token)) { + $type = $token[0]; + $content = $token[1]; + if ($type === \T_CONSTANT_ENCAPSED_STRING || $type === \T_ENCAPSED_AND_WHITESPACE) { + $result .= $content; + } else { + // TODO Handle non-space indentation + if ($indent < 0) { + $result .= str_replace("\n" . str_repeat(" ", -$indent), "\n", $content); + } elseif ($indent > 0) { + $result .= str_replace("\n", "\n" . str_repeat(" ", $indent), $content); + } else { + $result .= $content; + } + } + } else { + $result .= $token; + } + } + return $result; + } + + /** + * Precalculate the indentation at every token position. + * + * @return int[] Token position to indentation map + */ + private function calcIndentMap() { + $indentMap = []; + $indent = 0; + foreach ($this->tokens as $token) { + $indentMap[] = $indent; + + if ($token[0] === \T_WHITESPACE) { + $content = $token[1]; + $newlinePos = \strrpos($content, "\n"); + if (false !== $newlinePos) { + $indent = \strlen($content) - $newlinePos - 1; + } + } + } + + // Add a sentinel for one past end of the file + $indentMap[] = $indent; + + return $indentMap; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php new file mode 100644 index 0000000..47d2003 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php @@ -0,0 +1,103 @@ +decodeRecursive($value); + } + + private function decodeRecursive($value) { + if (\is_array($value)) { + if (isset($value['nodeType'])) { + if ($value['nodeType'] === 'Comment' || $value['nodeType'] === 'Comment_Doc') { + return $this->decodeComment($value); + } + return $this->decodeNode($value); + } + return $this->decodeArray($value); + } + return $value; + } + + private function decodeArray(array $array) : array { + $decodedArray = []; + foreach ($array as $key => $value) { + $decodedArray[$key] = $this->decodeRecursive($value); + } + return $decodedArray; + } + + private function decodeNode(array $value) : Node { + $nodeType = $value['nodeType']; + if (!\is_string($nodeType)) { + throw new \RuntimeException('Node type must be a string'); + } + + $reflectionClass = $this->reflectionClassFromNodeType($nodeType); + /** @var Node $node */ + $node = $reflectionClass->newInstanceWithoutConstructor(); + + if (isset($value['attributes'])) { + if (!\is_array($value['attributes'])) { + throw new \RuntimeException('Attributes must be an array'); + } + + $node->setAttributes($this->decodeArray($value['attributes'])); + } + + foreach ($value as $name => $subNode) { + if ($name === 'nodeType' || $name === 'attributes') { + continue; + } + + $node->$name = $this->decodeRecursive($subNode); + } + + return $node; + } + + private function decodeComment(array $value) : Comment { + $className = $value['nodeType'] === 'Comment' ? Comment::class : Comment\Doc::class; + if (!isset($value['text'])) { + throw new \RuntimeException('Comment must have text'); + } + + return new $className( + $value['text'], + $value['line'] ?? -1, $value['filePos'] ?? -1, $value['tokenPos'] ?? -1, + $value['endLine'] ?? -1, $value['endFilePos'] ?? -1, $value['endTokenPos'] ?? -1 + ); + } + + private function reflectionClassFromNodeType(string $nodeType) : \ReflectionClass { + if (!isset($this->reflectionClassCache[$nodeType])) { + $className = $this->classNameFromNodeType($nodeType); + $this->reflectionClassCache[$nodeType] = new \ReflectionClass($className); + } + return $this->reflectionClassCache[$nodeType]; + } + + private function classNameFromNodeType(string $nodeType) : string { + $className = 'PhpParser\\Node\\' . strtr($nodeType, '_', '\\'); + if (class_exists($className)) { + return $className; + } + + $className .= '_'; + if (class_exists($className)) { + return $className; + } + + throw new \RuntimeException("Unknown node type \"$nodeType\""); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Lexer.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Lexer.php new file mode 100644 index 0000000..694a848 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Lexer.php @@ -0,0 +1,422 @@ +tokenMap = $this->createTokenMap(); + + // Compatibility define for PHP < 7.4 + if (!defined('T_BAD_CHARACTER')) { + \define('T_BAD_CHARACTER', -1); + } + + // map of tokens to drop while lexing (the map is only used for isset lookup, + // that's why the value is simply set to 1; the value is never actually used.) + $this->dropTokens = array_fill_keys( + [\T_WHITESPACE, \T_OPEN_TAG, \T_COMMENT, \T_DOC_COMMENT, \T_BAD_CHARACTER], 1 + ); + + $defaultAttributes = ['comments', 'startLine', 'endLine']; + $usedAttributes = array_fill_keys($options['usedAttributes'] ?? $defaultAttributes, true); + + // Create individual boolean properties to make these checks faster. + $this->attributeStartLineUsed = isset($usedAttributes['startLine']); + $this->attributeEndLineUsed = isset($usedAttributes['endLine']); + $this->attributeStartTokenPosUsed = isset($usedAttributes['startTokenPos']); + $this->attributeEndTokenPosUsed = isset($usedAttributes['endTokenPos']); + $this->attributeStartFilePosUsed = isset($usedAttributes['startFilePos']); + $this->attributeEndFilePosUsed = isset($usedAttributes['endFilePos']); + $this->attributeCommentsUsed = isset($usedAttributes['comments']); + } + + /** + * Initializes the lexer for lexing the provided source code. + * + * This function does not throw if lexing errors occur. Instead, errors may be retrieved using + * the getErrors() method. + * + * @param string $code The source code to lex + * @param ErrorHandler|null $errorHandler Error handler to use for lexing errors. Defaults to + * ErrorHandler\Throwing + */ + public function startLexing(string $code, ErrorHandler $errorHandler = null) { + if (null === $errorHandler) { + $errorHandler = new ErrorHandler\Throwing(); + } + + $this->code = $code; // keep the code around for __halt_compiler() handling + $this->pos = -1; + $this->line = 1; + $this->filePos = 0; + + // If inline HTML occurs without preceding code, treat it as if it had a leading newline. + // This ensures proper composability, because having a newline is the "safe" assumption. + $this->prevCloseTagHasNewline = true; + + $scream = ini_set('xdebug.scream', '0'); + + error_clear_last(); + $this->tokens = @token_get_all($code); + $this->handleErrors($errorHandler); + + if (false !== $scream) { + ini_set('xdebug.scream', $scream); + } + } + + private function handleInvalidCharacterRange($start, $end, $line, ErrorHandler $errorHandler) { + $tokens = []; + for ($i = $start; $i < $end; $i++) { + $chr = $this->code[$i]; + if ($chr === "\0") { + // PHP cuts error message after null byte, so need special case + $errorMsg = 'Unexpected null byte'; + } else { + $errorMsg = sprintf( + 'Unexpected character "%s" (ASCII %d)', $chr, ord($chr) + ); + } + + $tokens[] = [\T_BAD_CHARACTER, $chr, $line]; + $errorHandler->handleError(new Error($errorMsg, [ + 'startLine' => $line, + 'endLine' => $line, + 'startFilePos' => $i, + 'endFilePos' => $i, + ])); + } + return $tokens; + } + + /** + * Check whether comment token is unterminated. + * + * @return bool + */ + private function isUnterminatedComment($token) : bool { + return ($token[0] === \T_COMMENT || $token[0] === \T_DOC_COMMENT) + && substr($token[1], 0, 2) === '/*' + && substr($token[1], -2) !== '*/'; + } + + /** + * Check whether an error *may* have occurred during tokenization. + * + * @return bool + */ + private function errorMayHaveOccurred() : bool { + if (defined('HHVM_VERSION')) { + // In HHVM token_get_all() does not throw warnings, so we need to conservatively + // assume that an error occurred + return true; + } + + if (PHP_VERSION_ID >= 80000) { + // PHP 8 converts the "bad character" case into a parse error, rather than treating + // it as a lexing warning. To preserve previous behavior, we need to assume that an + // error occurred. + // TODO: We should handle this the same way as PHP 8: Only generate T_BAD_CHARACTER + // token here (for older PHP versions) and leave generationg of the actual parse error + // to the parser. This will also save the full token scan on PHP 8 here. + return true; + } + + return null !== error_get_last(); + } + + protected function handleErrors(ErrorHandler $errorHandler) { + if (!$this->errorMayHaveOccurred()) { + return; + } + + // PHP's error handling for token_get_all() is rather bad, so if we want detailed + // error information we need to compute it ourselves. Invalid character errors are + // detected by finding "gaps" in the token array. Unterminated comments are detected + // by checking if a trailing comment has a "*/" at the end. + + $filePos = 0; + $line = 1; + $numTokens = \count($this->tokens); + for ($i = 0; $i < $numTokens; $i++) { + $token = $this->tokens[$i]; + + // Since PHP 7.4 invalid characters are represented by a T_BAD_CHARACTER token. + // In this case we only need to emit an error. + if ($token[0] === \T_BAD_CHARACTER) { + $this->handleInvalidCharacterRange($filePos, $filePos + 1, $line, $errorHandler); + } + + $tokenValue = \is_string($token) ? $token : $token[1]; + $tokenLen = \strlen($tokenValue); + + if (substr($this->code, $filePos, $tokenLen) !== $tokenValue) { + // Something is missing, must be an invalid character + $nextFilePos = strpos($this->code, $tokenValue, $filePos); + $badCharTokens = $this->handleInvalidCharacterRange( + $filePos, $nextFilePos, $line, $errorHandler); + $filePos = (int) $nextFilePos; + + array_splice($this->tokens, $i, 0, $badCharTokens); + $numTokens += \count($badCharTokens); + $i += \count($badCharTokens); + } + + $filePos += $tokenLen; + $line += substr_count($tokenValue, "\n"); + } + + if ($filePos !== \strlen($this->code)) { + if (substr($this->code, $filePos, 2) === '/*') { + // Unlike PHP, HHVM will drop unterminated comments entirely + $comment = substr($this->code, $filePos); + $errorHandler->handleError(new Error('Unterminated comment', [ + 'startLine' => $line, + 'endLine' => $line + substr_count($comment, "\n"), + 'startFilePos' => $filePos, + 'endFilePos' => $filePos + \strlen($comment), + ])); + + // Emulate the PHP behavior + $isDocComment = isset($comment[3]) && $comment[3] === '*'; + $this->tokens[] = [$isDocComment ? \T_DOC_COMMENT : \T_COMMENT, $comment, $line]; + } else { + // Invalid characters at the end of the input + $badCharTokens = $this->handleInvalidCharacterRange( + $filePos, \strlen($this->code), $line, $errorHandler); + $this->tokens = array_merge($this->tokens, $badCharTokens); + } + return; + } + + if (count($this->tokens) > 0) { + // Check for unterminated comment + $lastToken = $this->tokens[count($this->tokens) - 1]; + if ($this->isUnterminatedComment($lastToken)) { + $errorHandler->handleError(new Error('Unterminated comment', [ + 'startLine' => $line - substr_count($lastToken[1], "\n"), + 'endLine' => $line, + 'startFilePos' => $filePos - \strlen($lastToken[1]), + 'endFilePos' => $filePos, + ])); + } + } + } + + /** + * Fetches the next token. + * + * The available attributes are determined by the 'usedAttributes' option, which can + * be specified in the constructor. The following attributes are supported: + * + * * 'comments' => Array of PhpParser\Comment or PhpParser\Comment\Doc instances, + * representing all comments that occurred between the previous + * non-discarded token and the current one. + * * 'startLine' => Line in which the node starts. + * * 'endLine' => Line in which the node ends. + * * 'startTokenPos' => Offset into the token array of the first token in the node. + * * 'endTokenPos' => Offset into the token array of the last token in the node. + * * 'startFilePos' => Offset into the code string of the first character that is part of the node. + * * 'endFilePos' => Offset into the code string of the last character that is part of the node. + * + * @param mixed $value Variable to store token content in + * @param mixed $startAttributes Variable to store start attributes in + * @param mixed $endAttributes Variable to store end attributes in + * + * @return int Token id + */ + public function getNextToken(&$value = null, &$startAttributes = null, &$endAttributes = null) : int { + $startAttributes = []; + $endAttributes = []; + + while (1) { + if (isset($this->tokens[++$this->pos])) { + $token = $this->tokens[$this->pos]; + } else { + // EOF token with ID 0 + $token = "\0"; + } + + if ($this->attributeStartLineUsed) { + $startAttributes['startLine'] = $this->line; + } + if ($this->attributeStartTokenPosUsed) { + $startAttributes['startTokenPos'] = $this->pos; + } + if ($this->attributeStartFilePosUsed) { + $startAttributes['startFilePos'] = $this->filePos; + } + + if (\is_string($token)) { + $value = $token; + if (isset($token[1])) { + // bug in token_get_all + $this->filePos += 2; + $id = ord('"'); + } else { + $this->filePos += 1; + $id = ord($token); + } + } elseif (!isset($this->dropTokens[$token[0]])) { + $value = $token[1]; + $id = $this->tokenMap[$token[0]]; + if (\T_CLOSE_TAG === $token[0]) { + $this->prevCloseTagHasNewline = false !== strpos($token[1], "\n"); + } elseif (\T_INLINE_HTML === $token[0]) { + $startAttributes['hasLeadingNewline'] = $this->prevCloseTagHasNewline; + } + + $this->line += substr_count($value, "\n"); + $this->filePos += \strlen($value); + } else { + $origLine = $this->line; + $origFilePos = $this->filePos; + $this->line += substr_count($token[1], "\n"); + $this->filePos += \strlen($token[1]); + + if (\T_COMMENT === $token[0] || \T_DOC_COMMENT === $token[0]) { + if ($this->attributeCommentsUsed) { + $comment = \T_DOC_COMMENT === $token[0] + ? new Comment\Doc($token[1], + $origLine, $origFilePos, $this->pos, + $this->line, $this->filePos - 1, $this->pos) + : new Comment($token[1], + $origLine, $origFilePos, $this->pos, + $this->line, $this->filePos - 1, $this->pos); + $startAttributes['comments'][] = $comment; + } + } + continue; + } + + if ($this->attributeEndLineUsed) { + $endAttributes['endLine'] = $this->line; + } + if ($this->attributeEndTokenPosUsed) { + $endAttributes['endTokenPos'] = $this->pos; + } + if ($this->attributeEndFilePosUsed) { + $endAttributes['endFilePos'] = $this->filePos - 1; + } + + return $id; + } + + throw new \RuntimeException('Reached end of lexer loop'); + } + + /** + * Returns the token array for current code. + * + * The token array is in the same format as provided by the + * token_get_all() function and does not discard tokens (i.e. + * whitespace and comments are included). The token position + * attributes are against this token array. + * + * @return array Array of tokens in token_get_all() format + */ + public function getTokens() : array { + return $this->tokens; + } + + /** + * Handles __halt_compiler() by returning the text after it. + * + * @return string Remaining text + */ + public function handleHaltCompiler() : string { + // text after T_HALT_COMPILER, still including (); + $textAfter = substr($this->code, $this->filePos); + + // ensure that it is followed by (); + // this simplifies the situation, by not allowing any comments + // in between of the tokens. + if (!preg_match('~^\s*\(\s*\)\s*(?:;|\?>\r?\n?)~', $textAfter, $matches)) { + throw new Error('__HALT_COMPILER must be followed by "();"'); + } + + // prevent the lexer from returning any further tokens + $this->pos = count($this->tokens); + + // return with (); removed + return substr($textAfter, strlen($matches[0])); + } + + /** + * Creates the token map. + * + * The token map maps the PHP internal token identifiers + * to the identifiers used by the Parser. Additionally it + * maps T_OPEN_TAG_WITH_ECHO to T_ECHO and T_CLOSE_TAG to ';'. + * + * @return array The token map + */ + protected function createTokenMap() : array { + $tokenMap = []; + + // 256 is the minimum possible token number, as everything below + // it is an ASCII value + for ($i = 256; $i < 1000; ++$i) { + if (\T_DOUBLE_COLON === $i) { + // T_DOUBLE_COLON is equivalent to T_PAAMAYIM_NEKUDOTAYIM + $tokenMap[$i] = Tokens::T_PAAMAYIM_NEKUDOTAYIM; + } elseif(\T_OPEN_TAG_WITH_ECHO === $i) { + // T_OPEN_TAG_WITH_ECHO with dropped T_OPEN_TAG results in T_ECHO + $tokenMap[$i] = Tokens::T_ECHO; + } elseif(\T_CLOSE_TAG === $i) { + // T_CLOSE_TAG is equivalent to ';' + $tokenMap[$i] = ord(';'); + } elseif ('UNKNOWN' !== $name = token_name($i)) { + if ('T_HASHBANG' === $name) { + // HHVM uses a special token for #! hashbang lines + $tokenMap[$i] = Tokens::T_INLINE_HTML; + } elseif (defined($name = Tokens::class . '::' . $name)) { + // Other tokens can be mapped directly + $tokenMap[$i] = constant($name); + } + } + } + + // HHVM uses a special token for numbers that overflow to double + if (defined('T_ONUMBER')) { + $tokenMap[\T_ONUMBER] = Tokens::T_DNUMBER; + } + // HHVM also has a separate token for the __COMPILER_HALT_OFFSET__ constant + if (defined('T_COMPILER_HALT_OFFSET')) { + $tokenMap[\T_COMPILER_HALT_OFFSET] = Tokens::T_STRING; + } + + return $tokenMap; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php new file mode 100644 index 0000000..0e14541 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php @@ -0,0 +1,250 @@ +\h*)\2(?![a-zA-Z0-9_\x80-\xff])(?(?:;?[\r\n])?)/x +REGEX; + + /** @var mixed[] Patches used to reverse changes introduced in the code */ + private $patches = []; + + /** @var TokenEmulatorInterface[] */ + private $tokenEmulators = []; + + /** + * @param mixed[] $options + */ + public function __construct(array $options = []) + { + parent::__construct($options); + + $this->tokenEmulators[] = new FnTokenEmulator(); + $this->tokenEmulators[] = new CoaleseEqualTokenEmulator(); + $this->tokenEmulators[] = new NumericLiteralSeparatorEmulator(); + + $this->tokenMap[self::T_COALESCE_EQUAL] = Tokens::T_COALESCE_EQUAL; + $this->tokenMap[self::T_FN] = Tokens::T_FN; + } + + public function startLexing(string $code, ErrorHandler $errorHandler = null) { + $this->patches = []; + + if ($this->isEmulationNeeded($code) === false) { + // Nothing to emulate, yay + parent::startLexing($code, $errorHandler); + return; + } + + $collector = new ErrorHandler\Collecting(); + + // 1. emulation of heredoc and nowdoc new syntax + $preparedCode = $this->processHeredocNowdoc($code); + parent::startLexing($preparedCode, $collector); + $this->fixupTokens(); + + $errors = $collector->getErrors(); + if (!empty($errors)) { + $this->fixupErrors($errors); + foreach ($errors as $error) { + $errorHandler->handleError($error); + } + } + + // add token emulation + foreach ($this->tokenEmulators as $emulativeToken) { + if ($emulativeToken->isEmulationNeeded($code)) { + $this->tokens = $emulativeToken->emulate($code, $this->tokens); + } + } + } + + private function isHeredocNowdocEmulationNeeded(string $code): bool + { + // skip version where this works without emulation + if (version_compare(\PHP_VERSION, self::PHP_7_3, '>=')) { + return false; + } + + return strpos($code, '<<<') !== false; + } + + private function processHeredocNowdoc(string $code): string + { + if ($this->isHeredocNowdocEmulationNeeded($code) === false) { + return $code; + } + + if (!preg_match_all(self::FLEXIBLE_DOC_STRING_REGEX, $code, $matches, PREG_SET_ORDER|PREG_OFFSET_CAPTURE)) { + // No heredoc/nowdoc found + return $code; + } + + // Keep track of how much we need to adjust string offsets due to the modifications we + // already made + $posDelta = 0; + foreach ($matches as $match) { + $indentation = $match['indentation'][0]; + $indentationStart = $match['indentation'][1]; + + $separator = $match['separator'][0]; + $separatorStart = $match['separator'][1]; + + if ($indentation === '' && $separator !== '') { + // Ordinary heredoc/nowdoc + continue; + } + + if ($indentation !== '') { + // Remove indentation + $indentationLen = strlen($indentation); + $code = substr_replace($code, '', $indentationStart + $posDelta, $indentationLen); + $this->patches[] = [$indentationStart + $posDelta, 'add', $indentation]; + $posDelta -= $indentationLen; + } + + if ($separator === '') { + // Insert newline as separator + $code = substr_replace($code, "\n", $separatorStart + $posDelta, 0); + $this->patches[] = [$separatorStart + $posDelta, 'remove', "\n"]; + $posDelta += 1; + } + } + + return $code; + } + + private function isEmulationNeeded(string $code): bool + { + foreach ($this->tokenEmulators as $emulativeToken) { + if ($emulativeToken->isEmulationNeeded($code)) { + return true; + } + } + + return $this->isHeredocNowdocEmulationNeeded($code); + } + + private function fixupTokens() + { + if (\count($this->patches) === 0) { + return; + } + + // Load first patch + $patchIdx = 0; + + list($patchPos, $patchType, $patchText) = $this->patches[$patchIdx]; + + // We use a manual loop over the tokens, because we modify the array on the fly + $pos = 0; + for ($i = 0, $c = \count($this->tokens); $i < $c; $i++) { + $token = $this->tokens[$i]; + if (\is_string($token)) { + // We assume that patches don't apply to string tokens + $pos += \strlen($token); + continue; + } + + $len = \strlen($token[1]); + $posDelta = 0; + while ($patchPos >= $pos && $patchPos < $pos + $len) { + $patchTextLen = \strlen($patchText); + if ($patchType === 'remove') { + if ($patchPos === $pos && $patchTextLen === $len) { + // Remove token entirely + array_splice($this->tokens, $i, 1, []); + $i--; + $c--; + } else { + // Remove from token string + $this->tokens[$i][1] = substr_replace( + $token[1], '', $patchPos - $pos + $posDelta, $patchTextLen + ); + $posDelta -= $patchTextLen; + } + } elseif ($patchType === 'add') { + // Insert into the token string + $this->tokens[$i][1] = substr_replace( + $token[1], $patchText, $patchPos - $pos + $posDelta, 0 + ); + $posDelta += $patchTextLen; + } else { + assert(false); + } + + // Fetch the next patch + $patchIdx++; + if ($patchIdx >= \count($this->patches)) { + // No more patches, we're done + return; + } + + list($patchPos, $patchType, $patchText) = $this->patches[$patchIdx]; + + // Multiple patches may apply to the same token. Reload the current one to check + // If the new patch applies + $token = $this->tokens[$i]; + } + + $pos += $len; + } + + // A patch did not apply + assert(false); + } + + /** + * Fixup line and position information in errors. + * + * @param Error[] $errors + */ + private function fixupErrors(array $errors) { + foreach ($errors as $error) { + $attrs = $error->getAttributes(); + + $posDelta = 0; + $lineDelta = 0; + foreach ($this->patches as $patch) { + list($patchPos, $patchType, $patchText) = $patch; + if ($patchPos >= $attrs['startFilePos']) { + // No longer relevant + break; + } + + if ($patchType === 'add') { + $posDelta += strlen($patchText); + $lineDelta += substr_count($patchText, "\n"); + } else { + $posDelta -= strlen($patchText); + $lineDelta -= substr_count($patchText, "\n"); + } + } + + $attrs['startFilePos'] += $posDelta; + $attrs['endFilePos'] += $posDelta; + $attrs['startLine'] += $lineDelta; + $attrs['endLine'] += $lineDelta; + $error->setAttributes($attrs); + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php new file mode 100644 index 0000000..10f7e1e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php @@ -0,0 +1,41 @@ +=')) { + return false; + } + + return strpos($code, '??=') !== false; + } + + public function emulate(string $code, array $tokens): array + { + // We need to manually iterate and manage a count because we'll change + // the tokens array on the way + $line = 1; + for ($i = 0, $c = count($tokens); $i < $c; ++$i) { + if (isset($tokens[$i + 1])) { + if ($tokens[$i][0] === T_COALESCE && $tokens[$i + 1] === '=') { + array_splice($tokens, $i, 2, [ + [Emulative::T_COALESCE_EQUAL, '??=', $line] + ]); + $c--; + continue; + } + } + if (\is_array($tokens[$i])) { + $line += substr_count($tokens[$i][1], "\n"); + } + } + + return $tokens; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php new file mode 100644 index 0000000..0939dd4 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php @@ -0,0 +1,53 @@ +=')) { + return false; + } + + return strpos($code, 'fn') !== false; + } + + public function emulate(string $code, array $tokens): array + { + // We need to manually iterate and manage a count because we'll change + // the tokens array on the way + foreach ($tokens as $i => $token) { + if ($token[0] === T_STRING && $token[1] === 'fn') { + $previousNonSpaceToken = $this->getPreviousNonSpaceToken($tokens, $i); + if ($previousNonSpaceToken !== null && $previousNonSpaceToken[0] === T_OBJECT_OPERATOR) { + continue; + } + + $tokens[$i][0] = Emulative::T_FN; + } + } + + return $tokens; + } + + /** + * @param mixed[] $tokens + * @return mixed[]|null + */ + private function getPreviousNonSpaceToken(array $tokens, int $start) + { + for ($i = $start - 1; $i >= 0; --$i) { + if ($tokens[$i][0] === T_WHITESPACE) { + continue; + } + + return $tokens[$i]; + } + + return null; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.php new file mode 100644 index 0000000..082805f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.php @@ -0,0 +1,99 @@ +=')) { + return false; + } + + return preg_match('~[0-9]_[0-9]~', $code) + || preg_match('~0x[0-9a-f]+_[0-9a-f]~i', $code); + } + + public function emulate(string $code, array $tokens): array + { + // We need to manually iterate and manage a count because we'll change + // the tokens array on the way + $codeOffset = 0; + for ($i = 0, $c = count($tokens); $i < $c; ++$i) { + $token = $tokens[$i]; + $tokenLen = \strlen(\is_array($token) ? $token[1] : $token); + + if ($token[0] !== T_LNUMBER && $token[0] !== T_DNUMBER) { + $codeOffset += $tokenLen; + continue; + } + + $res = preg_match(self::NUMBER, $code, $matches, 0, $codeOffset); + assert($res, "No number at number token position"); + + $match = $matches[0]; + $matchLen = \strlen($match); + if ($matchLen === $tokenLen) { + // Original token already holds the full number. + $codeOffset += $tokenLen; + continue; + } + + $tokenKind = $this->resolveIntegerOrFloatToken($match); + $newTokens = [[$tokenKind, $match, $token[2]]]; + + $numTokens = 1; + $len = $tokenLen; + while ($matchLen > $len) { + $nextToken = $tokens[$i + $numTokens]; + $nextTokenText = \is_array($nextToken) ? $nextToken[1] : $nextToken; + $nextTokenLen = \strlen($nextTokenText); + + $numTokens++; + if ($matchLen < $len + $nextTokenLen) { + // Split trailing characters into a partial token. + assert(is_array($nextToken), "Partial token should be an array token"); + $partialText = substr($nextTokenText, $matchLen - $len); + $newTokens[] = [$nextToken[0], $partialText, $nextToken[2]]; + break; + } + + $len += $nextTokenLen; + } + + array_splice($tokens, $i, $numTokens, $newTokens); + $c -= $numTokens - \count($newTokens); + $codeOffset += $matchLen; + } + + return $tokens; + } + + private function resolveIntegerOrFloatToken(string $str): int + { + $str = str_replace('_', '', $str); + + if (stripos($str, '0b') === 0) { + $num = bindec($str); + } elseif (stripos($str, '0x') === 0) { + $num = hexdec($str); + } elseif (stripos($str, '0') === 0 && ctype_digit($str)) { + $num = octdec($str); + } else { + $num = +$str; + } + + return is_float($num) ? T_DNUMBER : T_LNUMBER; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulatorInterface.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulatorInterface.php new file mode 100644 index 0000000..e03ccc6 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulatorInterface.php @@ -0,0 +1,14 @@ + [aliasName => originalName]] */ + protected $aliases = []; + + /** @var Name[][] Same as $aliases but preserving original case */ + protected $origAliases = []; + + /** @var ErrorHandler Error handler */ + protected $errorHandler; + + /** + * Create a name context. + * + * @param ErrorHandler $errorHandler Error handling used to report errors + */ + public function __construct(ErrorHandler $errorHandler) { + $this->errorHandler = $errorHandler; + } + + /** + * Start a new namespace. + * + * This also resets the alias table. + * + * @param Name|null $namespace Null is the global namespace + */ + public function startNamespace(Name $namespace = null) { + $this->namespace = $namespace; + $this->origAliases = $this->aliases = [ + Stmt\Use_::TYPE_NORMAL => [], + Stmt\Use_::TYPE_FUNCTION => [], + Stmt\Use_::TYPE_CONSTANT => [], + ]; + } + + /** + * Add an alias / import. + * + * @param Name $name Original name + * @param string $aliasName Aliased name + * @param int $type One of Stmt\Use_::TYPE_* + * @param array $errorAttrs Attributes to use to report an error + */ + public function addAlias(Name $name, string $aliasName, int $type, array $errorAttrs = []) { + // Constant names are case sensitive, everything else case insensitive + if ($type === Stmt\Use_::TYPE_CONSTANT) { + $aliasLookupName = $aliasName; + } else { + $aliasLookupName = strtolower($aliasName); + } + + if (isset($this->aliases[$type][$aliasLookupName])) { + $typeStringMap = [ + Stmt\Use_::TYPE_NORMAL => '', + Stmt\Use_::TYPE_FUNCTION => 'function ', + Stmt\Use_::TYPE_CONSTANT => 'const ', + ]; + + $this->errorHandler->handleError(new Error( + sprintf( + 'Cannot use %s%s as %s because the name is already in use', + $typeStringMap[$type], $name, $aliasName + ), + $errorAttrs + )); + return; + } + + $this->aliases[$type][$aliasLookupName] = $name; + $this->origAliases[$type][$aliasName] = $name; + } + + /** + * Get current namespace. + * + * @return null|Name Namespace (or null if global namespace) + */ + public function getNamespace() { + return $this->namespace; + } + + /** + * Get resolved name. + * + * @param Name $name Name to resolve + * @param int $type One of Stmt\Use_::TYPE_{FUNCTION|CONSTANT} + * + * @return null|Name Resolved name, or null if static resolution is not possible + */ + public function getResolvedName(Name $name, int $type) { + // don't resolve special class names + if ($type === Stmt\Use_::TYPE_NORMAL && $name->isSpecialClassName()) { + if (!$name->isUnqualified()) { + $this->errorHandler->handleError(new Error( + sprintf("'\\%s' is an invalid class name", $name->toString()), + $name->getAttributes() + )); + } + return $name; + } + + // fully qualified names are already resolved + if ($name->isFullyQualified()) { + return $name; + } + + // Try to resolve aliases + if (null !== $resolvedName = $this->resolveAlias($name, $type)) { + return $resolvedName; + } + + if ($type !== Stmt\Use_::TYPE_NORMAL && $name->isUnqualified()) { + if (null === $this->namespace) { + // outside of a namespace unaliased unqualified is same as fully qualified + return new FullyQualified($name, $name->getAttributes()); + } + + // Cannot resolve statically + return null; + } + + // if no alias exists prepend current namespace + return FullyQualified::concat($this->namespace, $name, $name->getAttributes()); + } + + /** + * Get resolved class name. + * + * @param Name $name Class ame to resolve + * + * @return Name Resolved name + */ + public function getResolvedClassName(Name $name) : Name { + return $this->getResolvedName($name, Stmt\Use_::TYPE_NORMAL); + } + + /** + * Get possible ways of writing a fully qualified name (e.g., by making use of aliases). + * + * @param string $name Fully-qualified name (without leading namespace separator) + * @param int $type One of Stmt\Use_::TYPE_* + * + * @return Name[] Possible representations of the name + */ + public function getPossibleNames(string $name, int $type) : array { + $lcName = strtolower($name); + + if ($type === Stmt\Use_::TYPE_NORMAL) { + // self, parent and static must always be unqualified + if ($lcName === "self" || $lcName === "parent" || $lcName === "static") { + return [new Name($name)]; + } + } + + // Collect possible ways to write this name, starting with the fully-qualified name + $possibleNames = [new FullyQualified($name)]; + + if (null !== $nsRelativeName = $this->getNamespaceRelativeName($name, $lcName, $type)) { + // Make sure there is no alias that makes the normally namespace-relative name + // into something else + if (null === $this->resolveAlias($nsRelativeName, $type)) { + $possibleNames[] = $nsRelativeName; + } + } + + // Check for relevant namespace use statements + foreach ($this->origAliases[Stmt\Use_::TYPE_NORMAL] as $alias => $orig) { + $lcOrig = $orig->toLowerString(); + if (0 === strpos($lcName, $lcOrig . '\\')) { + $possibleNames[] = new Name($alias . substr($name, strlen($lcOrig))); + } + } + + // Check for relevant type-specific use statements + foreach ($this->origAliases[$type] as $alias => $orig) { + if ($type === Stmt\Use_::TYPE_CONSTANT) { + // Constants are are complicated-sensitive + $normalizedOrig = $this->normalizeConstName($orig->toString()); + if ($normalizedOrig === $this->normalizeConstName($name)) { + $possibleNames[] = new Name($alias); + } + } else { + // Everything else is case-insensitive + if ($orig->toLowerString() === $lcName) { + $possibleNames[] = new Name($alias); + } + } + } + + return $possibleNames; + } + + /** + * Get shortest representation of this fully-qualified name. + * + * @param string $name Fully-qualified name (without leading namespace separator) + * @param int $type One of Stmt\Use_::TYPE_* + * + * @return Name Shortest representation + */ + public function getShortName(string $name, int $type) : Name { + $possibleNames = $this->getPossibleNames($name, $type); + + // Find shortest name + $shortestName = null; + $shortestLength = \INF; + foreach ($possibleNames as $possibleName) { + $length = strlen($possibleName->toCodeString()); + if ($length < $shortestLength) { + $shortestName = $possibleName; + $shortestLength = $length; + } + } + + return $shortestName; + } + + private function resolveAlias(Name $name, $type) { + $firstPart = $name->getFirst(); + + if ($name->isQualified()) { + // resolve aliases for qualified names, always against class alias table + $checkName = strtolower($firstPart); + if (isset($this->aliases[Stmt\Use_::TYPE_NORMAL][$checkName])) { + $alias = $this->aliases[Stmt\Use_::TYPE_NORMAL][$checkName]; + return FullyQualified::concat($alias, $name->slice(1), $name->getAttributes()); + } + } elseif ($name->isUnqualified()) { + // constant aliases are case-sensitive, function aliases case-insensitive + $checkName = $type === Stmt\Use_::TYPE_CONSTANT ? $firstPart : strtolower($firstPart); + if (isset($this->aliases[$type][$checkName])) { + // resolve unqualified aliases + return new FullyQualified($this->aliases[$type][$checkName], $name->getAttributes()); + } + } + + // No applicable aliases + return null; + } + + private function getNamespaceRelativeName(string $name, string $lcName, int $type) { + if (null === $this->namespace) { + return new Name($name); + } + + if ($type === Stmt\Use_::TYPE_CONSTANT) { + // The constants true/false/null always resolve to the global symbols, even inside a + // namespace, so they may be used without qualification + if ($lcName === "true" || $lcName === "false" || $lcName === "null") { + return new Name($name); + } + } + + $namespacePrefix = strtolower($this->namespace . '\\'); + if (0 === strpos($lcName, $namespacePrefix)) { + return new Name(substr($name, strlen($namespacePrefix))); + } + + return null; + } + + private function normalizeConstName(string $name) { + $nsSep = strrpos($name, '\\'); + if (false === $nsSep) { + return $name; + } + + // Constants have case-insensitive namespace and case-sensitive short-name + $ns = substr($name, 0, $nsSep); + $shortName = substr($name, $nsSep + 1); + return strtolower($ns) . '\\' . $shortName; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node.php new file mode 100644 index 0000000..befb256 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node.php @@ -0,0 +1,151 @@ +attributes = $attributes; + $this->value = $value; + $this->byRef = $byRef; + $this->unpack = $unpack; + } + + public function getSubNodeNames() : array { + return ['value', 'byRef', 'unpack']; + } + + public function getType() : string { + return 'Arg'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Const_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Const_.php new file mode 100644 index 0000000..4094a65 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Const_.php @@ -0,0 +1,37 @@ +attributes = $attributes; + $this->name = \is_string($name) ? new Identifier($name) : $name; + $this->value = $value; + } + + public function getSubNodeNames() : array { + return ['name', 'value']; + } + + public function getType() : string { + return 'Const'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr.php new file mode 100644 index 0000000..6cf4df2 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr.php @@ -0,0 +1,9 @@ +attributes = $attributes; + $this->var = $var; + $this->dim = $dim; + } + + public function getSubNodeNames() : array { + return ['var', 'dim']; + } + + public function getType() : string { + return 'Expr_ArrayDimFetch'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php new file mode 100644 index 0000000..1b078f8 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php @@ -0,0 +1,41 @@ +attributes = $attributes; + $this->key = $key; + $this->value = $value; + $this->byRef = $byRef; + $this->unpack = $unpack; + } + + public function getSubNodeNames() : array { + return ['key', 'value', 'byRef', 'unpack']; + } + + public function getType() : string { + return 'Expr_ArrayItem'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php new file mode 100644 index 0000000..fbe207e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php @@ -0,0 +1,34 @@ +attributes = $attributes; + $this->items = $items; + } + + public function getSubNodeNames() : array { + return ['items']; + } + + public function getType() : string { + return 'Expr_Array'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php new file mode 100644 index 0000000..608055f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php @@ -0,0 +1,71 @@ + false : Whether the closure is static + * 'byRef' => false : Whether to return by reference + * 'params' => array() : Parameters + * 'returnType' => null : Return type + * 'expr' => Expr : Expression body + * @param array $attributes Additional attributes + */ + public function __construct(array $subNodes = [], array $attributes = []) { + $this->attributes = $attributes; + $this->static = $subNodes['static'] ?? false; + $this->byRef = $subNodes['byRef'] ?? false; + $this->params = $subNodes['params'] ?? []; + $returnType = $subNodes['returnType'] ?? null; + $this->returnType = \is_string($returnType) ? new Node\Identifier($returnType) : $returnType; + $this->expr = $subNodes['expr'] ?? null; + } + + public function getSubNodeNames() : array { + return ['static', 'byRef', 'params', 'returnType', 'expr']; + } + + public function returnsByRef() : bool { + return $this->byRef; + } + + public function getParams() : array { + return $this->params; + } + + public function getReturnType() { + return $this->returnType; + } + + /** + * @return Node\Stmt\Return_[] + */ + public function getStmts() : array { + return [new Node\Stmt\Return_($this->expr)]; + } + + public function getType() : string { + return 'Expr_ArrowFunction'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php new file mode 100644 index 0000000..cf9e6e8 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php @@ -0,0 +1,34 @@ +attributes = $attributes; + $this->var = $var; + $this->expr = $expr; + } + + public function getSubNodeNames() : array { + return ['var', 'expr']; + } + + public function getType() : string { + return 'Expr_Assign'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php new file mode 100644 index 0000000..bce8604 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->var = $var; + $this->expr = $expr; + } + + public function getSubNodeNames() : array { + return ['var', 'expr']; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php new file mode 100644 index 0000000..420284c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php @@ -0,0 +1,12 @@ +attributes = $attributes; + $this->var = $var; + $this->expr = $expr; + } + + public function getSubNodeNames() : array { + return ['var', 'expr']; + } + + public function getType() : string { + return 'Expr_AssignRef'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php new file mode 100644 index 0000000..d9c582b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php @@ -0,0 +1,40 @@ +attributes = $attributes; + $this->left = $left; + $this->right = $right; + } + + public function getSubNodeNames() : array { + return ['left', 'right']; + } + + /** + * Get the operator sigil for this binary operation. + * + * In the case there are multiple possible sigils for an operator, this method does not + * necessarily return the one used in the parsed code. + * + * @return string + */ + abstract public function getOperatorSigil() : string; +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php new file mode 100644 index 0000000..d907393 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php @@ -0,0 +1,16 @@ +'; + } + + public function getType() : string { + return 'Expr_BinaryOp_Greater'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php new file mode 100644 index 0000000..d677502 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php @@ -0,0 +1,16 @@ +='; + } + + public function getType() : string { + return 'Expr_BinaryOp_GreaterOrEqual'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php new file mode 100644 index 0000000..3d96285 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php @@ -0,0 +1,16 @@ +>'; + } + + public function getType() : string { + return 'Expr_BinaryOp_ShiftRight'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php new file mode 100644 index 0000000..3cb8e7e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php @@ -0,0 +1,16 @@ +'; + } + + public function getType() : string { + return 'Expr_BinaryOp_Spaceship'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php new file mode 100644 index 0000000..ed44984 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->expr = $expr; + } + + public function getSubNodeNames() : array { + return ['expr']; + } + + public function getType() : string { + return 'Expr_BitwiseNot'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php new file mode 100644 index 0000000..bf27e9f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->expr = $expr; + } + + public function getSubNodeNames() : array { + return ['expr']; + } + + public function getType() : string { + return 'Expr_BooleanNot'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php new file mode 100644 index 0000000..36769d4 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php @@ -0,0 +1,26 @@ +attributes = $attributes; + $this->expr = $expr; + } + + public function getSubNodeNames() : array { + return ['expr']; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php new file mode 100644 index 0000000..57cc473 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php @@ -0,0 +1,12 @@ +attributes = $attributes; + $this->class = $class; + $this->name = \is_string($name) ? new Identifier($name) : $name; + } + + public function getSubNodeNames() : array { + return ['class', 'name']; + } + + public function getType() : string { + return 'Expr_ClassConstFetch'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php new file mode 100644 index 0000000..db216b8 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->expr = $expr; + } + + public function getSubNodeNames() : array { + return ['expr']; + } + + public function getType() : string { + return 'Expr_Clone'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php new file mode 100644 index 0000000..9a5fee2 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php @@ -0,0 +1,71 @@ + false : Whether the closure is static + * 'byRef' => false : Whether to return by reference + * 'params' => array(): Parameters + * 'uses' => array(): use()s + * 'returnType' => null : Return type + * 'stmts' => array(): Statements + * @param array $attributes Additional attributes + */ + public function __construct(array $subNodes = [], array $attributes = []) { + $this->attributes = $attributes; + $this->static = $subNodes['static'] ?? false; + $this->byRef = $subNodes['byRef'] ?? false; + $this->params = $subNodes['params'] ?? []; + $this->uses = $subNodes['uses'] ?? []; + $returnType = $subNodes['returnType'] ?? null; + $this->returnType = \is_string($returnType) ? new Node\Identifier($returnType) : $returnType; + $this->stmts = $subNodes['stmts'] ?? []; + } + + public function getSubNodeNames() : array { + return ['static', 'byRef', 'params', 'uses', 'returnType', 'stmts']; + } + + public function returnsByRef() : bool { + return $this->byRef; + } + + public function getParams() : array { + return $this->params; + } + + public function getReturnType() { + return $this->returnType; + } + + /** @return Node\Stmt[] */ + public function getStmts() : array { + return $this->stmts; + } + + public function getType() : string { + return 'Expr_Closure'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php new file mode 100644 index 0000000..2b8a096 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php @@ -0,0 +1,34 @@ +attributes = $attributes; + $this->var = $var; + $this->byRef = $byRef; + } + + public function getSubNodeNames() : array { + return ['var', 'byRef']; + } + + public function getType() : string { + return 'Expr_ClosureUse'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php new file mode 100644 index 0000000..14ebd16 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php @@ -0,0 +1,31 @@ +attributes = $attributes; + $this->name = $name; + } + + public function getSubNodeNames() : array { + return ['name']; + } + + public function getType() : string { + return 'Expr_ConstFetch'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php new file mode 100644 index 0000000..4042ec9 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->expr = $expr; + } + + public function getSubNodeNames() : array { + return ['expr']; + } + + public function getType() : string { + return 'Expr_Empty'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php new file mode 100644 index 0000000..1637f3a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php @@ -0,0 +1,31 @@ +attributes = $attributes; + } + + public function getSubNodeNames() : array { + return []; + } + + public function getType() : string { + return 'Expr_Error'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php new file mode 100644 index 0000000..c44ff6f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->expr = $expr; + } + + public function getSubNodeNames() : array { + return ['expr']; + } + + public function getType() : string { + return 'Expr_ErrorSuppress'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php new file mode 100644 index 0000000..8568547 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->expr = $expr; + } + + public function getSubNodeNames() : array { + return ['expr']; + } + + public function getType() : string { + return 'Expr_Eval'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php new file mode 100644 index 0000000..b88a8f7 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php @@ -0,0 +1,34 @@ +attributes = $attributes; + $this->expr = $expr; + } + + public function getSubNodeNames() : array { + return ['expr']; + } + + public function getType() : string { + return 'Expr_Exit'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php new file mode 100644 index 0000000..1e8afa5 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php @@ -0,0 +1,35 @@ +attributes = $attributes; + $this->name = $name; + $this->args = $args; + } + + public function getSubNodeNames() : array { + return ['name', 'args']; + } + + public function getType() : string { + return 'Expr_FuncCall'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php new file mode 100644 index 0000000..07ce596 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php @@ -0,0 +1,39 @@ +attributes = $attributes; + $this->expr = $expr; + $this->type = $type; + } + + public function getSubNodeNames() : array { + return ['expr', 'type']; + } + + public function getType() : string { + return 'Expr_Include'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php new file mode 100644 index 0000000..9000d47 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php @@ -0,0 +1,35 @@ +attributes = $attributes; + $this->expr = $expr; + $this->class = $class; + } + + public function getSubNodeNames() : array { + return ['expr', 'class']; + } + + public function getType() : string { + return 'Expr_Instanceof'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php new file mode 100644 index 0000000..76b7387 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->vars = $vars; + } + + public function getSubNodeNames() : array { + return ['vars']; + } + + public function getType() : string { + return 'Expr_Isset'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php new file mode 100644 index 0000000..c27a27b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->items = $items; + } + + public function getSubNodeNames() : array { + return ['items']; + } + + public function getType() : string { + return 'Expr_List'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php new file mode 100644 index 0000000..bd81bb4 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php @@ -0,0 +1,40 @@ +attributes = $attributes; + $this->var = $var; + $this->name = \is_string($name) ? new Identifier($name) : $name; + $this->args = $args; + } + + public function getSubNodeNames() : array { + return ['var', 'name', 'args']; + } + + public function getType() : string { + return 'Expr_MethodCall'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php new file mode 100644 index 0000000..c86f0c6 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php @@ -0,0 +1,35 @@ +attributes = $attributes; + $this->class = $class; + $this->args = $args; + } + + public function getSubNodeNames() : array { + return ['class', 'args']; + } + + public function getType() : string { + return 'Expr_New'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php new file mode 100644 index 0000000..94d6c29 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->var = $var; + } + + public function getSubNodeNames() : array { + return ['var']; + } + + public function getType() : string { + return 'Expr_PostDec'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php new file mode 100644 index 0000000..005c443 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->var = $var; + } + + public function getSubNodeNames() : array { + return ['var']; + } + + public function getType() : string { + return 'Expr_PostInc'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php new file mode 100644 index 0000000..a5ca685 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->var = $var; + } + + public function getSubNodeNames() : array { + return ['var']; + } + + public function getType() : string { + return 'Expr_PreDec'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php new file mode 100644 index 0000000..0986c44 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->var = $var; + } + + public function getSubNodeNames() : array { + return ['var']; + } + + public function getType() : string { + return 'Expr_PreInc'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php new file mode 100644 index 0000000..2d43c2a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->expr = $expr; + } + + public function getSubNodeNames() : array { + return ['expr']; + } + + public function getType() : string { + return 'Expr_Print'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php new file mode 100644 index 0000000..4281f31 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php @@ -0,0 +1,35 @@ +attributes = $attributes; + $this->var = $var; + $this->name = \is_string($name) ? new Identifier($name) : $name; + } + + public function getSubNodeNames() : array { + return ['var', 'name']; + } + + public function getType() : string { + return 'Expr_PropertyFetch'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php new file mode 100644 index 0000000..537a7cc --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->parts = $parts; + } + + public function getSubNodeNames() : array { + return ['parts']; + } + + public function getType() : string { + return 'Expr_ShellExec'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php new file mode 100644 index 0000000..9883f5a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php @@ -0,0 +1,40 @@ +attributes = $attributes; + $this->class = $class; + $this->name = \is_string($name) ? new Identifier($name) : $name; + $this->args = $args; + } + + public function getSubNodeNames() : array { + return ['class', 'name', 'args']; + } + + public function getType() : string { + return 'Expr_StaticCall'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php new file mode 100644 index 0000000..1ee1a25 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php @@ -0,0 +1,36 @@ +attributes = $attributes; + $this->class = $class; + $this->name = \is_string($name) ? new VarLikeIdentifier($name) : $name; + } + + public function getSubNodeNames() : array { + return ['class', 'name']; + } + + public function getType() : string { + return 'Expr_StaticPropertyFetch'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php new file mode 100644 index 0000000..9316f47 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php @@ -0,0 +1,38 @@ +attributes = $attributes; + $this->cond = $cond; + $this->if = $if; + $this->else = $else; + } + + public function getSubNodeNames() : array { + return ['cond', 'if', 'else']; + } + + public function getType() : string { + return 'Expr_Ternary'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php new file mode 100644 index 0000000..ce8808b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->expr = $expr; + } + + public function getSubNodeNames() : array { + return ['expr']; + } + + public function getType() : string { + return 'Expr_UnaryMinus'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php new file mode 100644 index 0000000..d23047e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->expr = $expr; + } + + public function getSubNodeNames() : array { + return ['expr']; + } + + public function getType() : string { + return 'Expr_UnaryPlus'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php new file mode 100644 index 0000000..1f2b231 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->name = $name; + } + + public function getSubNodeNames() : array { + return ['name']; + } + + public function getType() : string { + return 'Expr_Variable'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php new file mode 100644 index 0000000..a3efce6 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->expr = $expr; + } + + public function getSubNodeNames() : array { + return ['expr']; + } + + public function getType() : string { + return 'Expr_YieldFrom'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php new file mode 100644 index 0000000..aef8fc3 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php @@ -0,0 +1,34 @@ +attributes = $attributes; + $this->key = $key; + $this->value = $value; + } + + public function getSubNodeNames() : array { + return ['key', 'value']; + } + + public function getType() : string { + return 'Expr_Yield'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php new file mode 100644 index 0000000..110da6e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php @@ -0,0 +1,36 @@ + true, + 'parent' => true, + 'static' => true, + ]; + + /** + * Constructs an identifier node. + * + * @param string $name Identifier as string + * @param array $attributes Additional attributes + */ + public function __construct(string $name, array $attributes = []) { + $this->attributes = $attributes; + $this->name = $name; + } + + public function getSubNodeNames() : array { + return ['name']; + } + + /** + * Get identifier as string. + * + * @return string Identifier as string. + */ + public function toString() : string { + return $this->name; + } + + /** + * Get lowercased identifier as string. + * + * @return string Lowercased identifier as string + */ + public function toLowerString() : string { + return strtolower($this->name); + } + + /** + * Checks whether the identifier is a special class name (self, parent or static). + * + * @return bool Whether identifier is a special class name + */ + public function isSpecialClassName() : bool { + return isset(self::$specialClassNames[strtolower($this->name)]); + } + + /** + * Get identifier as string. + * + * @return string Identifier as string + */ + public function __toString() : string { + return $this->name; + } + + public function getType() : string { + return 'Identifier'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Name.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Name.php new file mode 100644 index 0000000..7ebdd57 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Name.php @@ -0,0 +1,242 @@ + true, + 'parent' => true, + 'static' => true, + ]; + + /** + * Constructs a name node. + * + * @param string|string[]|self $name Name as string, part array or Name instance (copy ctor) + * @param array $attributes Additional attributes + */ + public function __construct($name, array $attributes = []) { + $this->attributes = $attributes; + $this->parts = self::prepareName($name); + } + + public function getSubNodeNames() : array { + return ['parts']; + } + + /** + * Gets the first part of the name, i.e. everything before the first namespace separator. + * + * @return string First part of the name + */ + public function getFirst() : string { + return $this->parts[0]; + } + + /** + * Gets the last part of the name, i.e. everything after the last namespace separator. + * + * @return string Last part of the name + */ + public function getLast() : string { + return $this->parts[count($this->parts) - 1]; + } + + /** + * Checks whether the name is unqualified. (E.g. Name) + * + * @return bool Whether the name is unqualified + */ + public function isUnqualified() : bool { + return 1 === count($this->parts); + } + + /** + * Checks whether the name is qualified. (E.g. Name\Name) + * + * @return bool Whether the name is qualified + */ + public function isQualified() : bool { + return 1 < count($this->parts); + } + + /** + * Checks whether the name is fully qualified. (E.g. \Name) + * + * @return bool Whether the name is fully qualified + */ + public function isFullyQualified() : bool { + return false; + } + + /** + * Checks whether the name is explicitly relative to the current namespace. (E.g. namespace\Name) + * + * @return bool Whether the name is relative + */ + public function isRelative() : bool { + return false; + } + + /** + * Returns a string representation of the name itself, without taking taking the name type into + * account (e.g., not including a leading backslash for fully qualified names). + * + * @return string String representation + */ + public function toString() : string { + return implode('\\', $this->parts); + } + + /** + * Returns a string representation of the name as it would occur in code (e.g., including + * leading backslash for fully qualified names. + * + * @return string String representation + */ + public function toCodeString() : string { + return $this->toString(); + } + + /** + * Returns lowercased string representation of the name, without taking the name type into + * account (e.g., no leading backslash for fully qualified names). + * + * @return string Lowercased string representation + */ + public function toLowerString() : string { + return strtolower(implode('\\', $this->parts)); + } + + /** + * Checks whether the identifier is a special class name (self, parent or static). + * + * @return bool Whether identifier is a special class name + */ + public function isSpecialClassName() : bool { + return count($this->parts) === 1 + && isset(self::$specialClassNames[strtolower($this->parts[0])]); + } + + /** + * Returns a string representation of the name by imploding the namespace parts with the + * namespace separator. + * + * @return string String representation + */ + public function __toString() : string { + return implode('\\', $this->parts); + } + + /** + * Gets a slice of a name (similar to array_slice). + * + * This method returns a new instance of the same type as the original and with the same + * attributes. + * + * If the slice is empty, null is returned. The null value will be correctly handled in + * concatenations using concat(). + * + * Offset and length have the same meaning as in array_slice(). + * + * @param int $offset Offset to start the slice at (may be negative) + * @param int|null $length Length of the slice (may be negative) + * + * @return static|null Sliced name + */ + public function slice(int $offset, int $length = null) { + $numParts = count($this->parts); + + $realOffset = $offset < 0 ? $offset + $numParts : $offset; + if ($realOffset < 0 || $realOffset > $numParts) { + throw new \OutOfBoundsException(sprintf('Offset %d is out of bounds', $offset)); + } + + if (null === $length) { + $realLength = $numParts - $realOffset; + } else { + $realLength = $length < 0 ? $length + $numParts - $realOffset : $length; + if ($realLength < 0 || $realLength > $numParts) { + throw new \OutOfBoundsException(sprintf('Length %d is out of bounds', $length)); + } + } + + if ($realLength === 0) { + // Empty slice is represented as null + return null; + } + + return new static(array_slice($this->parts, $realOffset, $realLength), $this->attributes); + } + + /** + * Concatenate two names, yielding a new Name instance. + * + * The type of the generated instance depends on which class this method is called on, for + * example Name\FullyQualified::concat() will yield a Name\FullyQualified instance. + * + * If one of the arguments is null, a new instance of the other name will be returned. If both + * arguments are null, null will be returned. As such, writing + * Name::concat($namespace, $shortName) + * where $namespace is a Name node or null will work as expected. + * + * @param string|string[]|self|null $name1 The first name + * @param string|string[]|self|null $name2 The second name + * @param array $attributes Attributes to assign to concatenated name + * + * @return static|null Concatenated name + */ + public static function concat($name1, $name2, array $attributes = []) { + if (null === $name1 && null === $name2) { + return null; + } elseif (null === $name1) { + return new static(self::prepareName($name2), $attributes); + } elseif (null === $name2) { + return new static(self::prepareName($name1), $attributes); + } else { + return new static( + array_merge(self::prepareName($name1), self::prepareName($name2)), $attributes + ); + } + } + + /** + * Prepares a (string, array or Name node) name for use in name changing methods by converting + * it to an array. + * + * @param string|string[]|self $name Name to prepare + * + * @return string[] Prepared name + */ + private static function prepareName($name) : array { + if (\is_string($name)) { + if ('' === $name) { + throw new \InvalidArgumentException('Name cannot be empty'); + } + + return explode('\\', $name); + } elseif (\is_array($name)) { + if (empty($name)) { + throw new \InvalidArgumentException('Name cannot be empty'); + } + + return $name; + } elseif ($name instanceof self) { + return $name->parts; + } + + throw new \InvalidArgumentException( + 'Expected string, array of parts or Name instance' + ); + } + + public function getType() : string { + return 'Name'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php new file mode 100644 index 0000000..1df93a5 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php @@ -0,0 +1,50 @@ +toString(); + } + + public function getType() : string { + return 'Name_FullyQualified'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php new file mode 100644 index 0000000..57bf7af --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php @@ -0,0 +1,50 @@ +toString(); + } + + public function getType() : string { + return 'Name_Relative'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/NullableType.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/NullableType.php new file mode 100644 index 0000000..3646365 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/NullableType.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->type = \is_string($type) ? new Identifier($type) : $type; + } + + public function getSubNodeNames() : array { + return ['type']; + } + + public function getType() : string { + return 'NullableType'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Param.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Param.php new file mode 100644 index 0000000..76db718 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Param.php @@ -0,0 +1,49 @@ +attributes = $attributes; + $this->type = \is_string($type) ? new Identifier($type) : $type; + $this->byRef = $byRef; + $this->variadic = $variadic; + $this->var = $var; + $this->default = $default; + } + + public function getSubNodeNames() : array { + return ['type', 'byRef', 'variadic', 'var', 'default']; + } + + public function getType() : string { + return 'Param'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar.php new file mode 100644 index 0000000..8117909 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar.php @@ -0,0 +1,7 @@ +attributes = $attributes; + $this->value = $value; + } + + public function getSubNodeNames() : array { + return ['value']; + } + + /** + * @internal + * + * Parses a DNUMBER token like PHP would. + * + * @param string $str A string number + * + * @return float The parsed number + */ + public static function parse(string $str) : float { + $str = str_replace('_', '', $str); + + // if string contains any of .eE just cast it to float + if (false !== strpbrk($str, '.eE')) { + return (float) $str; + } + + // otherwise it's an integer notation that overflowed into a float + // if it starts with 0 it's one of the special integer notations + if ('0' === $str[0]) { + // hex + if ('x' === $str[1] || 'X' === $str[1]) { + return hexdec($str); + } + + // bin + if ('b' === $str[1] || 'B' === $str[1]) { + return bindec($str); + } + + // oct + // substr($str, 0, strcspn($str, '89')) cuts the string at the first invalid digit (8 or 9) + // so that only the digits before that are used + return octdec(substr($str, 0, strcspn($str, '89'))); + } + + // dec + return (float) $str; + } + + public function getType() : string { + return 'Scalar_DNumber'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php new file mode 100644 index 0000000..fa5d2e2 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php @@ -0,0 +1,31 @@ +attributes = $attributes; + $this->parts = $parts; + } + + public function getSubNodeNames() : array { + return ['parts']; + } + + public function getType() : string { + return 'Scalar_Encapsed'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/EncapsedStringPart.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/EncapsedStringPart.php new file mode 100644 index 0000000..bb3194c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/EncapsedStringPart.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->value = $value; + } + + public function getSubNodeNames() : array { + return ['value']; + } + + public function getType() : string { + return 'Scalar_EncapsedStringPart'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php new file mode 100644 index 0000000..b339435 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php @@ -0,0 +1,73 @@ +attributes = $attributes; + $this->value = $value; + } + + public function getSubNodeNames() : array { + return ['value']; + } + + /** + * Constructs an LNumber node from a string number literal. + * + * @param string $str String number literal (decimal, octal, hex or binary) + * @param array $attributes Additional attributes + * @param bool $allowInvalidOctal Whether to allow invalid octal numbers (PHP 5) + * + * @return LNumber The constructed LNumber, including kind attribute + */ + public static function fromString(string $str, array $attributes = [], bool $allowInvalidOctal = false) : LNumber { + $str = str_replace('_', '', $str); + + if ('0' !== $str[0] || '0' === $str) { + $attributes['kind'] = LNumber::KIND_DEC; + return new LNumber((int) $str, $attributes); + } + + if ('x' === $str[1] || 'X' === $str[1]) { + $attributes['kind'] = LNumber::KIND_HEX; + return new LNumber(hexdec($str), $attributes); + } + + if ('b' === $str[1] || 'B' === $str[1]) { + $attributes['kind'] = LNumber::KIND_BIN; + return new LNumber(bindec($str), $attributes); + } + + if (!$allowInvalidOctal && strpbrk($str, '89')) { + throw new Error('Invalid numeric literal', $attributes); + } + + // use intval instead of octdec to get proper cutting behavior with malformed numbers + $attributes['kind'] = LNumber::KIND_OCT; + return new LNumber(intval($str, 8), $attributes); + } + + public function getType() : string { + return 'Scalar_LNumber'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php new file mode 100644 index 0000000..941f0c7 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php @@ -0,0 +1,28 @@ +attributes = $attributes; + } + + public function getSubNodeNames() : array { + return []; + } + + /** + * Get name of magic constant. + * + * @return string Name of magic constant + */ + abstract public function getName() : string; +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php new file mode 100644 index 0000000..2443284 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php @@ -0,0 +1,16 @@ + '\\', + '$' => '$', + 'n' => "\n", + 'r' => "\r", + 't' => "\t", + 'f' => "\f", + 'v' => "\v", + 'e' => "\x1B", + ]; + + /** + * Constructs a string scalar node. + * + * @param string $value Value of the string + * @param array $attributes Additional attributes + */ + public function __construct(string $value, array $attributes = []) { + $this->attributes = $attributes; + $this->value = $value; + } + + public function getSubNodeNames() : array { + return ['value']; + } + + /** + * @internal + * + * Parses a string token. + * + * @param string $str String token content + * @param bool $parseUnicodeEscape Whether to parse PHP 7 \u escapes + * + * @return string The parsed string + */ + public static function parse(string $str, bool $parseUnicodeEscape = true) : string { + $bLength = 0; + if ('b' === $str[0] || 'B' === $str[0]) { + $bLength = 1; + } + + if ('\'' === $str[$bLength]) { + return str_replace( + ['\\\\', '\\\''], + ['\\', '\''], + substr($str, $bLength + 1, -1) + ); + } else { + return self::parseEscapeSequences( + substr($str, $bLength + 1, -1), '"', $parseUnicodeEscape + ); + } + } + + /** + * @internal + * + * Parses escape sequences in strings (all string types apart from single quoted). + * + * @param string $str String without quotes + * @param null|string $quote Quote type + * @param bool $parseUnicodeEscape Whether to parse PHP 7 \u escapes + * + * @return string String with escape sequences parsed + */ + public static function parseEscapeSequences(string $str, $quote, bool $parseUnicodeEscape = true) : string { + if (null !== $quote) { + $str = str_replace('\\' . $quote, $quote, $str); + } + + $extra = ''; + if ($parseUnicodeEscape) { + $extra = '|u\{([0-9a-fA-F]+)\}'; + } + + return preg_replace_callback( + '~\\\\([\\\\$nrtfve]|[xX][0-9a-fA-F]{1,2}|[0-7]{1,3}' . $extra . ')~', + function($matches) { + $str = $matches[1]; + + if (isset(self::$replacements[$str])) { + return self::$replacements[$str]; + } elseif ('x' === $str[0] || 'X' === $str[0]) { + return chr(hexdec(substr($str, 1))); + } elseif ('u' === $str[0]) { + return self::codePointToUtf8(hexdec($matches[2])); + } else { + return chr(octdec($str)); + } + }, + $str + ); + } + + /** + * Converts a Unicode code point to its UTF-8 encoded representation. + * + * @param int $num Code point + * + * @return string UTF-8 representation of code point + */ + private static function codePointToUtf8(int $num) : string { + if ($num <= 0x7F) { + return chr($num); + } + if ($num <= 0x7FF) { + return chr(($num>>6) + 0xC0) . chr(($num&0x3F) + 0x80); + } + if ($num <= 0xFFFF) { + return chr(($num>>12) + 0xE0) . chr((($num>>6)&0x3F) + 0x80) . chr(($num&0x3F) + 0x80); + } + if ($num <= 0x1FFFFF) { + return chr(($num>>18) + 0xF0) . chr((($num>>12)&0x3F) + 0x80) + . chr((($num>>6)&0x3F) + 0x80) . chr(($num&0x3F) + 0x80); + } + throw new Error('Invalid UTF-8 codepoint escape sequence: Codepoint too large'); + } + + public function getType() : string { + return 'Scalar_String'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt.php new file mode 100644 index 0000000..69d33e5 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt.php @@ -0,0 +1,9 @@ +attributes = $attributes; + $this->num = $num; + } + + public function getSubNodeNames() : array { + return ['num']; + } + + public function getType() : string { + return 'Stmt_Break'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php new file mode 100644 index 0000000..2bf044c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php @@ -0,0 +1,34 @@ +attributes = $attributes; + $this->cond = $cond; + $this->stmts = $stmts; + } + + public function getSubNodeNames() : array { + return ['cond', 'stmts']; + } + + public function getType() : string { + return 'Stmt_Case'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php new file mode 100644 index 0000000..7d4a703 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php @@ -0,0 +1,41 @@ +attributes = $attributes; + $this->types = $types; + $this->var = $var; + $this->stmts = $stmts; + } + + public function getSubNodeNames() : array { + return ['types', 'var', 'stmts']; + } + + public function getType() : string { + return 'Stmt_Catch'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php new file mode 100644 index 0000000..73a5010 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php @@ -0,0 +1,62 @@ +attributes = $attributes; + $this->flags = $flags; + $this->consts = $consts; + } + + public function getSubNodeNames() : array { + return ['flags', 'consts']; + } + + /** + * Whether constant is explicitly or implicitly public. + * + * @return bool + */ + public function isPublic() : bool { + return ($this->flags & Class_::MODIFIER_PUBLIC) !== 0 + || ($this->flags & Class_::VISIBILITY_MODIFIER_MASK) === 0; + } + + /** + * Whether constant is protected. + * + * @return bool + */ + public function isProtected() : bool { + return (bool) ($this->flags & Class_::MODIFIER_PROTECTED); + } + + /** + * Whether constant is private. + * + * @return bool + */ + public function isPrivate() : bool { + return (bool) ($this->flags & Class_::MODIFIER_PRIVATE); + } + + public function getType() : string { + return 'Stmt_ClassConst'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php new file mode 100644 index 0000000..e5c7622 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php @@ -0,0 +1,107 @@ +stmts as $stmt) { + if ($stmt instanceof TraitUse) { + $traitUses[] = $stmt; + } + } + return $traitUses; + } + + /** + * @return ClassConst[] + */ + public function getConstants() : array { + $constants = []; + foreach ($this->stmts as $stmt) { + if ($stmt instanceof ClassConst) { + $constants[] = $stmt; + } + } + return $constants; + } + + /** + * @return Property[] + */ + public function getProperties() : array { + $properties = []; + foreach ($this->stmts as $stmt) { + if ($stmt instanceof Property) { + $properties[] = $stmt; + } + } + return $properties; + } + + /** + * Gets property with the given name defined directly in this class/interface/trait. + * + * @param string $name Name of the property + * + * @return Property|null Property node or null if the property does not exist + */ + public function getProperty(string $name) { + foreach ($this->stmts as $stmt) { + if ($stmt instanceof Property) { + foreach ($stmt->props as $prop) { + if ($prop instanceof PropertyProperty && $name === $prop->name->toString()) { + return $stmt; + } + } + } + } + return null; + } + + /** + * Gets all methods defined directly in this class/interface/trait + * + * @return ClassMethod[] + */ + public function getMethods() : array { + $methods = []; + foreach ($this->stmts as $stmt) { + if ($stmt instanceof ClassMethod) { + $methods[] = $stmt; + } + } + return $methods; + } + + /** + * Gets method with the given name defined directly in this class/interface/trait. + * + * @param string $name Name of the method (compared case-insensitively) + * + * @return ClassMethod|null Method node or null if the method does not exist + */ + public function getMethod(string $name) { + $lowerName = strtolower($name); + foreach ($this->stmts as $stmt) { + if ($stmt instanceof ClassMethod && $lowerName === $stmt->name->toLowerString()) { + return $stmt; + } + } + return null; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php new file mode 100644 index 0000000..31cb4f1 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php @@ -0,0 +1,151 @@ + true, + '__destruct' => true, + '__call' => true, + '__callstatic' => true, + '__get' => true, + '__set' => true, + '__isset' => true, + '__unset' => true, + '__sleep' => true, + '__wakeup' => true, + '__tostring' => true, + '__set_state' => true, + '__clone' => true, + '__invoke' => true, + '__debuginfo' => true, + ]; + + /** + * Constructs a class method node. + * + * @param string|Node\Identifier $name Name + * @param array $subNodes Array of the following optional subnodes: + * 'flags => MODIFIER_PUBLIC: Flags + * 'byRef' => false : Whether to return by reference + * 'params' => array() : Parameters + * 'returnType' => null : Return type + * 'stmts' => array() : Statements + * @param array $attributes Additional attributes + */ + public function __construct($name, array $subNodes = [], array $attributes = []) { + $this->attributes = $attributes; + $this->flags = $subNodes['flags'] ?? $subNodes['type'] ?? 0; + $this->byRef = $subNodes['byRef'] ?? false; + $this->name = \is_string($name) ? new Node\Identifier($name) : $name; + $this->params = $subNodes['params'] ?? []; + $returnType = $subNodes['returnType'] ?? null; + $this->returnType = \is_string($returnType) ? new Node\Identifier($returnType) : $returnType; + $this->stmts = array_key_exists('stmts', $subNodes) ? $subNodes['stmts'] : []; + } + + public function getSubNodeNames() : array { + return ['flags', 'byRef', 'name', 'params', 'returnType', 'stmts']; + } + + public function returnsByRef() : bool { + return $this->byRef; + } + + public function getParams() : array { + return $this->params; + } + + public function getReturnType() { + return $this->returnType; + } + + public function getStmts() { + return $this->stmts; + } + + /** + * Whether the method is explicitly or implicitly public. + * + * @return bool + */ + public function isPublic() : bool { + return ($this->flags & Class_::MODIFIER_PUBLIC) !== 0 + || ($this->flags & Class_::VISIBILITY_MODIFIER_MASK) === 0; + } + + /** + * Whether the method is protected. + * + * @return bool + */ + public function isProtected() : bool { + return (bool) ($this->flags & Class_::MODIFIER_PROTECTED); + } + + /** + * Whether the method is private. + * + * @return bool + */ + public function isPrivate() : bool { + return (bool) ($this->flags & Class_::MODIFIER_PRIVATE); + } + + /** + * Whether the method is abstract. + * + * @return bool + */ + public function isAbstract() : bool { + return (bool) ($this->flags & Class_::MODIFIER_ABSTRACT); + } + + /** + * Whether the method is final. + * + * @return bool + */ + public function isFinal() : bool { + return (bool) ($this->flags & Class_::MODIFIER_FINAL); + } + + /** + * Whether the method is static. + * + * @return bool + */ + public function isStatic() : bool { + return (bool) ($this->flags & Class_::MODIFIER_STATIC); + } + + /** + * Whether the method is magic. + * + * @return bool + */ + public function isMagic() : bool { + return isset(self::$magicNames[$this->name->toLowerString()]); + } + + public function getType() : string { + return 'Stmt_ClassMethod'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php new file mode 100644 index 0000000..e2a92e9 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php @@ -0,0 +1,105 @@ + 0 : Flags + * 'extends' => null : Name of extended class + * 'implements' => array(): Names of implemented interfaces + * 'stmts' => array(): Statements + * @param array $attributes Additional attributes + */ + public function __construct($name, array $subNodes = [], array $attributes = []) { + $this->attributes = $attributes; + $this->flags = $subNodes['flags'] ?? $subNodes['type'] ?? 0; + $this->name = \is_string($name) ? new Node\Identifier($name) : $name; + $this->extends = $subNodes['extends'] ?? null; + $this->implements = $subNodes['implements'] ?? []; + $this->stmts = $subNodes['stmts'] ?? []; + } + + public function getSubNodeNames() : array { + return ['flags', 'name', 'extends', 'implements', 'stmts']; + } + + /** + * Whether the class is explicitly abstract. + * + * @return bool + */ + public function isAbstract() : bool { + return (bool) ($this->flags & self::MODIFIER_ABSTRACT); + } + + /** + * Whether the class is final. + * + * @return bool + */ + public function isFinal() : bool { + return (bool) ($this->flags & self::MODIFIER_FINAL); + } + + /** + * Whether the class is anonymous. + * + * @return bool + */ + public function isAnonymous() : bool { + return null === $this->name; + } + + /** + * @internal + */ + public static function verifyModifier($a, $b) { + if ($a & self::VISIBILITY_MODIFIER_MASK && $b & self::VISIBILITY_MODIFIER_MASK) { + throw new Error('Multiple access type modifiers are not allowed'); + } + + if ($a & self::MODIFIER_ABSTRACT && $b & self::MODIFIER_ABSTRACT) { + throw new Error('Multiple abstract modifiers are not allowed'); + } + + if ($a & self::MODIFIER_STATIC && $b & self::MODIFIER_STATIC) { + throw new Error('Multiple static modifiers are not allowed'); + } + + if ($a & self::MODIFIER_FINAL && $b & self::MODIFIER_FINAL) { + throw new Error('Multiple final modifiers are not allowed'); + } + + if ($a & 48 && $b & 48) { + throw new Error('Cannot use the final modifier on an abstract class member'); + } + } + + public function getType() : string { + return 'Stmt_Class'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php new file mode 100644 index 0000000..e631634 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->consts = $consts; + } + + public function getSubNodeNames() : array { + return ['consts']; + } + + public function getType() : string { + return 'Stmt_Const'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php new file mode 100644 index 0000000..2488268 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->num = $num; + } + + public function getSubNodeNames() : array { + return ['num']; + } + + public function getType() : string { + return 'Stmt_Continue'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php new file mode 100644 index 0000000..ac07f30 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php @@ -0,0 +1,34 @@ +value pair node. + * + * @param string|Node\Identifier $key Key + * @param Node\Expr $value Value + * @param array $attributes Additional attributes + */ + public function __construct($key, Node\Expr $value, array $attributes = []) { + $this->attributes = $attributes; + $this->key = \is_string($key) ? new Node\Identifier($key) : $key; + $this->value = $value; + } + + public function getSubNodeNames() : array { + return ['key', 'value']; + } + + public function getType() : string { + return 'Stmt_DeclareDeclare'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php new file mode 100644 index 0000000..f46ff0b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php @@ -0,0 +1,34 @@ +attributes = $attributes; + $this->declares = $declares; + $this->stmts = $stmts; + } + + public function getSubNodeNames() : array { + return ['declares', 'stmts']; + } + + public function getType() : string { + return 'Stmt_Declare'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php new file mode 100644 index 0000000..78e90da --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php @@ -0,0 +1,34 @@ +attributes = $attributes; + $this->cond = $cond; + $this->stmts = $stmts; + } + + public function getSubNodeNames() : array { + return ['stmts', 'cond']; + } + + public function getType() : string { + return 'Stmt_Do'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php new file mode 100644 index 0000000..7cc50d5 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->exprs = $exprs; + } + + public function getSubNodeNames() : array { + return ['exprs']; + } + + public function getType() : string { + return 'Stmt_Echo'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php new file mode 100644 index 0000000..eef1ece --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php @@ -0,0 +1,34 @@ +attributes = $attributes; + $this->cond = $cond; + $this->stmts = $stmts; + } + + public function getSubNodeNames() : array { + return ['cond', 'stmts']; + } + + public function getType() : string { + return 'Stmt_ElseIf'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php new file mode 100644 index 0000000..0e61778 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->stmts = $stmts; + } + + public function getSubNodeNames() : array { + return ['stmts']; + } + + public function getType() : string { + return 'Stmt_Else'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php new file mode 100644 index 0000000..99d1687 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php @@ -0,0 +1,33 @@ +attributes = $attributes; + $this->expr = $expr; + } + + public function getSubNodeNames() : array { + return ['expr']; + } + + public function getType() : string { + return 'Stmt_Expression'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php new file mode 100644 index 0000000..d55b8b6 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->stmts = $stmts; + } + + public function getSubNodeNames() : array { + return ['stmts']; + } + + public function getType() : string { + return 'Stmt_Finally'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php new file mode 100644 index 0000000..1323d37 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php @@ -0,0 +1,43 @@ + array(): Init expressions + * 'cond' => array(): Loop conditions + * 'loop' => array(): Loop expressions + * 'stmts' => array(): Statements + * @param array $attributes Additional attributes + */ + public function __construct(array $subNodes = [], array $attributes = []) { + $this->attributes = $attributes; + $this->init = $subNodes['init'] ?? []; + $this->cond = $subNodes['cond'] ?? []; + $this->loop = $subNodes['loop'] ?? []; + $this->stmts = $subNodes['stmts'] ?? []; + } + + public function getSubNodeNames() : array { + return ['init', 'cond', 'loop', 'stmts']; + } + + public function getType() : string { + return 'Stmt_For'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php new file mode 100644 index 0000000..0556a7c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php @@ -0,0 +1,47 @@ + null : Variable to assign key to + * 'byRef' => false : Whether to assign value by reference + * 'stmts' => array(): Statements + * @param array $attributes Additional attributes + */ + public function __construct(Node\Expr $expr, Node\Expr $valueVar, array $subNodes = [], array $attributes = []) { + $this->attributes = $attributes; + $this->expr = $expr; + $this->keyVar = $subNodes['keyVar'] ?? null; + $this->byRef = $subNodes['byRef'] ?? false; + $this->valueVar = $valueVar; + $this->stmts = $subNodes['stmts'] ?? []; + } + + public function getSubNodeNames() : array { + return ['expr', 'keyVar', 'byRef', 'valueVar', 'stmts']; + } + + public function getType() : string { + return 'Stmt_Foreach'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php new file mode 100644 index 0000000..30e1557 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php @@ -0,0 +1,69 @@ + false : Whether to return by reference + * 'params' => array(): Parameters + * 'returnType' => null : Return type + * 'stmts' => array(): Statements + * @param array $attributes Additional attributes + */ + public function __construct($name, array $subNodes = [], array $attributes = []) { + $this->attributes = $attributes; + $this->byRef = $subNodes['byRef'] ?? false; + $this->name = \is_string($name) ? new Node\Identifier($name) : $name; + $this->params = $subNodes['params'] ?? []; + $returnType = $subNodes['returnType'] ?? null; + $this->returnType = \is_string($returnType) ? new Node\Identifier($returnType) : $returnType; + $this->stmts = $subNodes['stmts'] ?? []; + } + + public function getSubNodeNames() : array { + return ['byRef', 'name', 'params', 'returnType', 'stmts']; + } + + public function returnsByRef() : bool { + return $this->byRef; + } + + public function getParams() : array { + return $this->params; + } + + public function getReturnType() { + return $this->returnType; + } + + /** @return Node\Stmt[] */ + public function getStmts() : array { + return $this->stmts; + } + + public function getType() : string { + return 'Stmt_Function'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php new file mode 100644 index 0000000..a0022ad --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->vars = $vars; + } + + public function getSubNodeNames() : array { + return ['vars']; + } + + public function getType() : string { + return 'Stmt_Global'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php new file mode 100644 index 0000000..24a57f7 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php @@ -0,0 +1,31 @@ +attributes = $attributes; + $this->name = \is_string($name) ? new Identifier($name) : $name; + } + + public function getSubNodeNames() : array { + return ['name']; + } + + public function getType() : string { + return 'Stmt_Goto'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php new file mode 100644 index 0000000..24520d2 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php @@ -0,0 +1,39 @@ +attributes = $attributes; + $this->type = $type; + $this->prefix = $prefix; + $this->uses = $uses; + } + + public function getSubNodeNames() : array { + return ['type', 'prefix', 'uses']; + } + + public function getType() : string { + return 'Stmt_GroupUse'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php new file mode 100644 index 0000000..8e624e0 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->remaining = $remaining; + } + + public function getSubNodeNames() : array { + return ['remaining']; + } + + public function getType() : string { + return 'Stmt_HaltCompiler'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php new file mode 100644 index 0000000..a1bae4b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php @@ -0,0 +1,43 @@ + array(): Statements + * 'elseifs' => array(): Elseif clauses + * 'else' => null : Else clause + * @param array $attributes Additional attributes + */ + public function __construct(Node\Expr $cond, array $subNodes = [], array $attributes = []) { + $this->attributes = $attributes; + $this->cond = $cond; + $this->stmts = $subNodes['stmts'] ?? []; + $this->elseifs = $subNodes['elseifs'] ?? []; + $this->else = $subNodes['else'] ?? null; + } + + public function getSubNodeNames() : array { + return ['cond', 'stmts', 'elseifs', 'else']; + } + + public function getType() : string { + return 'Stmt_If'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php new file mode 100644 index 0000000..0711d28 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->value = $value; + } + + public function getSubNodeNames() : array { + return ['value']; + } + + public function getType() : string { + return 'Stmt_InlineHTML'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php new file mode 100644 index 0000000..cf5d62a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php @@ -0,0 +1,35 @@ + array(): Name of extended interfaces + * 'stmts' => array(): Statements + * @param array $attributes Additional attributes + */ + public function __construct($name, array $subNodes = [], array $attributes = []) { + $this->attributes = $attributes; + $this->name = \is_string($name) ? new Node\Identifier($name) : $name; + $this->extends = $subNodes['extends'] ?? []; + $this->stmts = $subNodes['stmts'] ?? []; + } + + public function getSubNodeNames() : array { + return ['name', 'extends', 'stmts']; + } + + public function getType() : string { + return 'Stmt_Interface'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php new file mode 100644 index 0000000..3edcb3b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php @@ -0,0 +1,31 @@ +attributes = $attributes; + $this->name = \is_string($name) ? new Identifier($name) : $name; + } + + public function getSubNodeNames() : array { + return ['name']; + } + + public function getType() : string { + return 'Stmt_Label'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php new file mode 100644 index 0000000..c632045 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php @@ -0,0 +1,38 @@ +attributes = $attributes; + $this->name = $name; + $this->stmts = $stmts; + } + + public function getSubNodeNames() : array { + return ['name', 'stmts']; + } + + public function getType() : string { + return 'Stmt_Namespace'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php new file mode 100644 index 0000000..f86f8df --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php @@ -0,0 +1,17 @@ +attributes = $attributes; + $this->flags = $flags; + $this->props = $props; + $this->type = \is_string($type) ? new Identifier($type) : $type; + } + + public function getSubNodeNames() : array { + return ['flags', 'type', 'props']; + } + + /** + * Whether the property is explicitly or implicitly public. + * + * @return bool + */ + public function isPublic() : bool { + return ($this->flags & Class_::MODIFIER_PUBLIC) !== 0 + || ($this->flags & Class_::VISIBILITY_MODIFIER_MASK) === 0; + } + + /** + * Whether the property is protected. + * + * @return bool + */ + public function isProtected() : bool { + return (bool) ($this->flags & Class_::MODIFIER_PROTECTED); + } + + /** + * Whether the property is private. + * + * @return bool + */ + public function isPrivate() : bool { + return (bool) ($this->flags & Class_::MODIFIER_PRIVATE); + } + + /** + * Whether the property is static. + * + * @return bool + */ + public function isStatic() : bool { + return (bool) ($this->flags & Class_::MODIFIER_STATIC); + } + + public function getType() : string { + return 'Stmt_Property'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php new file mode 100644 index 0000000..205731e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php @@ -0,0 +1,34 @@ +attributes = $attributes; + $this->name = \is_string($name) ? new Node\VarLikeIdentifier($name) : $name; + $this->default = $default; + } + + public function getSubNodeNames() : array { + return ['name', 'default']; + } + + public function getType() : string { + return 'Stmt_PropertyProperty'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.php new file mode 100644 index 0000000..efc578c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->expr = $expr; + } + + public function getSubNodeNames() : array { + return ['expr']; + } + + public function getType() : string { + return 'Stmt_Return'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php new file mode 100644 index 0000000..2958456 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php @@ -0,0 +1,37 @@ +attributes = $attributes; + $this->var = $var; + $this->default = $default; + } + + public function getSubNodeNames() : array { + return ['var', 'default']; + } + + public function getType() : string { + return 'Stmt_StaticVar'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php new file mode 100644 index 0000000..464898f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->vars = $vars; + } + + public function getSubNodeNames() : array { + return ['vars']; + } + + public function getType() : string { + return 'Stmt_Static'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php new file mode 100644 index 0000000..2c8dae0 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php @@ -0,0 +1,34 @@ +attributes = $attributes; + $this->cond = $cond; + $this->cases = $cases; + } + + public function getSubNodeNames() : array { + return ['cond', 'cases']; + } + + public function getType() : string { + return 'Stmt_Switch'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Throw_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Throw_.php new file mode 100644 index 0000000..f97f567 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Throw_.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->expr = $expr; + } + + public function getSubNodeNames() : array { + return ['expr']; + } + + public function getType() : string { + return 'Stmt_Throw'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php new file mode 100644 index 0000000..9e97053 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php @@ -0,0 +1,34 @@ +attributes = $attributes; + $this->traits = $traits; + $this->adaptations = $adaptations; + } + + public function getSubNodeNames() : array { + return ['traits', 'adaptations']; + } + + public function getType() : string { + return 'Stmt_TraitUse'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php new file mode 100644 index 0000000..8bdd2c0 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php @@ -0,0 +1,13 @@ +attributes = $attributes; + $this->trait = $trait; + $this->method = \is_string($method) ? new Node\Identifier($method) : $method; + $this->newModifier = $newModifier; + $this->newName = \is_string($newName) ? new Node\Identifier($newName) : $newName; + } + + public function getSubNodeNames() : array { + return ['trait', 'method', 'newModifier', 'newName']; + } + + public function getType() : string { + return 'Stmt_TraitUseAdaptation_Alias'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php new file mode 100644 index 0000000..80385f6 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php @@ -0,0 +1,34 @@ +attributes = $attributes; + $this->trait = $trait; + $this->method = \is_string($method) ? new Node\Identifier($method) : $method; + $this->insteadof = $insteadof; + } + + public function getSubNodeNames() : array { + return ['trait', 'method', 'insteadof']; + } + + public function getType() : string { + return 'Stmt_TraitUseAdaptation_Precedence'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php new file mode 100644 index 0000000..c2e8cca --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php @@ -0,0 +1,30 @@ + array(): Statements + * @param array $attributes Additional attributes + */ + public function __construct($name, array $subNodes = [], array $attributes = []) { + $this->attributes = $attributes; + $this->name = \is_string($name) ? new Node\Identifier($name) : $name; + $this->stmts = $subNodes['stmts'] ?? []; + } + + public function getSubNodeNames() : array { + return ['name', 'stmts']; + } + + public function getType() : string { + return 'Stmt_Trait'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php new file mode 100644 index 0000000..7fc158c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php @@ -0,0 +1,38 @@ +attributes = $attributes; + $this->stmts = $stmts; + $this->catches = $catches; + $this->finally = $finally; + } + + public function getSubNodeNames() : array { + return ['stmts', 'catches', 'finally']; + } + + public function getType() : string { + return 'Stmt_TryCatch'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php new file mode 100644 index 0000000..310e427 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->vars = $vars; + } + + public function getSubNodeNames() : array { + return ['vars']; + } + + public function getType() : string { + return 'Stmt_Unset'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php new file mode 100644 index 0000000..32bd784 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php @@ -0,0 +1,52 @@ +attributes = $attributes; + $this->type = $type; + $this->name = $name; + $this->alias = \is_string($alias) ? new Identifier($alias) : $alias; + } + + public function getSubNodeNames() : array { + return ['type', 'name', 'alias']; + } + + /** + * Get alias. If not explicitly given this is the last component of the used name. + * + * @return Identifier + */ + public function getAlias() : Identifier { + if (null !== $this->alias) { + return $this->alias; + } + + return new Identifier($this->name->getLast()); + } + + public function getType() : string { + return 'Stmt_UseUse'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php new file mode 100644 index 0000000..8753da3 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php @@ -0,0 +1,47 @@ +attributes = $attributes; + $this->type = $type; + $this->uses = $uses; + } + + public function getSubNodeNames() : array { + return ['type', 'uses']; + } + + public function getType() : string { + return 'Stmt_Use'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php new file mode 100644 index 0000000..f41034f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php @@ -0,0 +1,34 @@ +attributes = $attributes; + $this->cond = $cond; + $this->stmts = $stmts; + } + + public function getSubNodeNames() : array { + return ['cond', 'stmts']; + } + + public function getType() : string { + return 'Stmt_While'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.php new file mode 100644 index 0000000..c8f4523 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.php @@ -0,0 +1,30 @@ +attributes = $attributes; + $this->types = $types; + } + + public function getSubNodeNames() : array { + return ['types']; + } + + public function getType() : string { + return 'UnionType'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php new file mode 100644 index 0000000..a30807a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php @@ -0,0 +1,17 @@ +attributes = $attributes; + } + + /** + * Gets line the node started in (alias of getStartLine). + * + * @return int Start line (or -1 if not available) + */ + public function getLine() : int { + return $this->attributes['startLine'] ?? -1; + } + + /** + * Gets line the node started in. + * + * Requires the 'startLine' attribute to be enabled in the lexer (enabled by default). + * + * @return int Start line (or -1 if not available) + */ + public function getStartLine() : int { + return $this->attributes['startLine'] ?? -1; + } + + /** + * Gets the line the node ended in. + * + * Requires the 'endLine' attribute to be enabled in the lexer (enabled by default). + * + * @return int End line (or -1 if not available) + */ + public function getEndLine() : int { + return $this->attributes['endLine'] ?? -1; + } + + /** + * Gets the token offset of the first token that is part of this node. + * + * The offset is an index into the array returned by Lexer::getTokens(). + * + * Requires the 'startTokenPos' attribute to be enabled in the lexer (DISABLED by default). + * + * @return int Token start position (or -1 if not available) + */ + public function getStartTokenPos() : int { + return $this->attributes['startTokenPos'] ?? -1; + } + + /** + * Gets the token offset of the last token that is part of this node. + * + * The offset is an index into the array returned by Lexer::getTokens(). + * + * Requires the 'endTokenPos' attribute to be enabled in the lexer (DISABLED by default). + * + * @return int Token end position (or -1 if not available) + */ + public function getEndTokenPos() : int { + return $this->attributes['endTokenPos'] ?? -1; + } + + /** + * Gets the file offset of the first character that is part of this node. + * + * Requires the 'startFilePos' attribute to be enabled in the lexer (DISABLED by default). + * + * @return int File start position (or -1 if not available) + */ + public function getStartFilePos() : int { + return $this->attributes['startFilePos'] ?? -1; + } + + /** + * Gets the file offset of the last character that is part of this node. + * + * Requires the 'endFilePos' attribute to be enabled in the lexer (DISABLED by default). + * + * @return int File end position (or -1 if not available) + */ + public function getEndFilePos() : int { + return $this->attributes['endFilePos'] ?? -1; + } + + /** + * Gets all comments directly preceding this node. + * + * The comments are also available through the "comments" attribute. + * + * @return Comment[] + */ + public function getComments() : array { + return $this->attributes['comments'] ?? []; + } + + /** + * Gets the doc comment of the node. + * + * @return null|Comment\Doc Doc comment object or null + */ + public function getDocComment() { + $comments = $this->getComments(); + for ($i = count($comments) - 1; $i >= 0; $i--) { + $comment = $comments[$i]; + if ($comment instanceof Comment\Doc) { + return $comment; + } + } + + return null; + } + + /** + * Sets the doc comment of the node. + * + * This will either replace an existing doc comment or add it to the comments array. + * + * @param Comment\Doc $docComment Doc comment to set + */ + public function setDocComment(Comment\Doc $docComment) { + $comments = $this->getComments(); + for ($i = count($comments) - 1; $i >= 0; $i--) { + if ($comments[$i] instanceof Comment\Doc) { + // Replace existing doc comment. + $comments[$i] = $docComment; + $this->setAttribute('comments', $comments); + return; + } + } + + // Append new doc comment. + $comments[] = $docComment; + $this->setAttribute('comments', $comments); + } + + public function setAttribute(string $key, $value) { + $this->attributes[$key] = $value; + } + + public function hasAttribute(string $key) : bool { + return array_key_exists($key, $this->attributes); + } + + public function getAttribute(string $key, $default = null) { + if (array_key_exists($key, $this->attributes)) { + return $this->attributes[$key]; + } + + return $default; + } + + public function getAttributes() : array { + return $this->attributes; + } + + public function setAttributes(array $attributes) { + $this->attributes = $attributes; + } + + /** + * @return array + */ + public function jsonSerialize() : array { + return ['nodeType' => $this->getType()] + get_object_vars($this); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeDumper.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeDumper.php new file mode 100644 index 0000000..197ebc1 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeDumper.php @@ -0,0 +1,203 @@ +dumpComments = !empty($options['dumpComments']); + $this->dumpPositions = !empty($options['dumpPositions']); + } + + /** + * Dumps a node or array. + * + * @param array|Node $node Node or array to dump + * @param string|null $code Code corresponding to dumped AST. This only needs to be passed if + * the dumpPositions option is enabled and the dumping of node offsets + * is desired. + * + * @return string Dumped value + */ + public function dump($node, string $code = null) : string { + $this->code = $code; + return $this->dumpRecursive($node); + } + + protected function dumpRecursive($node) { + if ($node instanceof Node) { + $r = $node->getType(); + if ($this->dumpPositions && null !== $p = $this->dumpPosition($node)) { + $r .= $p; + } + $r .= '('; + + foreach ($node->getSubNodeNames() as $key) { + $r .= "\n " . $key . ': '; + + $value = $node->$key; + if (null === $value) { + $r .= 'null'; + } elseif (false === $value) { + $r .= 'false'; + } elseif (true === $value) { + $r .= 'true'; + } elseif (is_scalar($value)) { + if ('flags' === $key || 'newModifier' === $key) { + $r .= $this->dumpFlags($value); + } elseif ('type' === $key && $node instanceof Include_) { + $r .= $this->dumpIncludeType($value); + } elseif ('type' === $key + && ($node instanceof Use_ || $node instanceof UseUse || $node instanceof GroupUse)) { + $r .= $this->dumpUseType($value); + } else { + $r .= $value; + } + } else { + $r .= str_replace("\n", "\n ", $this->dumpRecursive($value)); + } + } + + if ($this->dumpComments && $comments = $node->getComments()) { + $r .= "\n comments: " . str_replace("\n", "\n ", $this->dumpRecursive($comments)); + } + } elseif (is_array($node)) { + $r = 'array('; + + foreach ($node as $key => $value) { + $r .= "\n " . $key . ': '; + + if (null === $value) { + $r .= 'null'; + } elseif (false === $value) { + $r .= 'false'; + } elseif (true === $value) { + $r .= 'true'; + } elseif (is_scalar($value)) { + $r .= $value; + } else { + $r .= str_replace("\n", "\n ", $this->dumpRecursive($value)); + } + } + } elseif ($node instanceof Comment) { + return $node->getReformattedText(); + } else { + throw new \InvalidArgumentException('Can only dump nodes and arrays.'); + } + + return $r . "\n)"; + } + + protected function dumpFlags($flags) { + $strs = []; + if ($flags & Class_::MODIFIER_PUBLIC) { + $strs[] = 'MODIFIER_PUBLIC'; + } + if ($flags & Class_::MODIFIER_PROTECTED) { + $strs[] = 'MODIFIER_PROTECTED'; + } + if ($flags & Class_::MODIFIER_PRIVATE) { + $strs[] = 'MODIFIER_PRIVATE'; + } + if ($flags & Class_::MODIFIER_ABSTRACT) { + $strs[] = 'MODIFIER_ABSTRACT'; + } + if ($flags & Class_::MODIFIER_STATIC) { + $strs[] = 'MODIFIER_STATIC'; + } + if ($flags & Class_::MODIFIER_FINAL) { + $strs[] = 'MODIFIER_FINAL'; + } + + if ($strs) { + return implode(' | ', $strs) . ' (' . $flags . ')'; + } else { + return $flags; + } + } + + protected function dumpIncludeType($type) { + $map = [ + Include_::TYPE_INCLUDE => 'TYPE_INCLUDE', + Include_::TYPE_INCLUDE_ONCE => 'TYPE_INCLUDE_ONCE', + Include_::TYPE_REQUIRE => 'TYPE_REQUIRE', + Include_::TYPE_REQUIRE_ONCE => 'TYPE_REQUIRE_ONCE', + ]; + + if (!isset($map[$type])) { + return $type; + } + return $map[$type] . ' (' . $type . ')'; + } + + protected function dumpUseType($type) { + $map = [ + Use_::TYPE_UNKNOWN => 'TYPE_UNKNOWN', + Use_::TYPE_NORMAL => 'TYPE_NORMAL', + Use_::TYPE_FUNCTION => 'TYPE_FUNCTION', + Use_::TYPE_CONSTANT => 'TYPE_CONSTANT', + ]; + + if (!isset($map[$type])) { + return $type; + } + return $map[$type] . ' (' . $type . ')'; + } + + /** + * Dump node position, if possible. + * + * @param Node $node Node for which to dump position + * + * @return string|null Dump of position, or null if position information not available + */ + protected function dumpPosition(Node $node) { + if (!$node->hasAttribute('startLine') || !$node->hasAttribute('endLine')) { + return null; + } + + $start = $node->getStartLine(); + $end = $node->getEndLine(); + if ($node->hasAttribute('startFilePos') && $node->hasAttribute('endFilePos') + && null !== $this->code + ) { + $start .= ':' . $this->toColumn($this->code, $node->getStartFilePos()); + $end .= ':' . $this->toColumn($this->code, $node->getEndFilePos()); + } + return "[$start - $end]"; + } + + // Copied from Error class + private function toColumn($code, $pos) { + if ($pos > strlen($code)) { + throw new \RuntimeException('Invalid position information'); + } + + $lineStartPos = strrpos($code, "\n", $pos - strlen($code)); + if (false === $lineStartPos) { + $lineStartPos = -1; + } + + return $pos - $lineStartPos; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeFinder.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeFinder.php new file mode 100644 index 0000000..2e7cfda --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeFinder.php @@ -0,0 +1,81 @@ +addVisitor($visitor); + $traverser->traverse($nodes); + + return $visitor->getFoundNodes(); + } + + /** + * Find all nodes that are instances of a certain class. + * + * @param Node|Node[] $nodes Single node or array of nodes to search in + * @param string $class Class name + * + * @return Node[] Found nodes (all instances of $class) + */ + public function findInstanceOf($nodes, string $class) : array { + return $this->find($nodes, function ($node) use ($class) { + return $node instanceof $class; + }); + } + + /** + * Find first node satisfying a filter callback. + * + * @param Node|Node[] $nodes Single node or array of nodes to search in + * @param callable $filter Filter callback: function(Node $node) : bool + * + * @return null|Node Found node (or null if none found) + */ + public function findFirst($nodes, callable $filter) { + if (!is_array($nodes)) { + $nodes = [$nodes]; + } + + $visitor = new FirstFindingVisitor($filter); + + $traverser = new NodeTraverser; + $traverser->addVisitor($visitor); + $traverser->traverse($nodes); + + return $visitor->getFoundNode(); + } + + /** + * Find first node that is an instance of a certain class. + * + * @param Node|Node[] $nodes Single node or array of nodes to search in + * @param string $class Class name + * + * @return null|Node Found node, which is an instance of $class (or null if none found) + */ + public function findFirstInstanceOf($nodes, string $class) { + return $this->findFirst($nodes, function ($node) use ($class) { + return $node instanceof $class; + }); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php new file mode 100644 index 0000000..97d45bd --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php @@ -0,0 +1,291 @@ +visitors[] = $visitor; + } + + /** + * Removes an added visitor. + * + * @param NodeVisitor $visitor + */ + public function removeVisitor(NodeVisitor $visitor) { + foreach ($this->visitors as $index => $storedVisitor) { + if ($storedVisitor === $visitor) { + unset($this->visitors[$index]); + break; + } + } + } + + /** + * Traverses an array of nodes using the registered visitors. + * + * @param Node[] $nodes Array of nodes + * + * @return Node[] Traversed array of nodes + */ + public function traverse(array $nodes) : array { + $this->stopTraversal = false; + + foreach ($this->visitors as $visitor) { + if (null !== $return = $visitor->beforeTraverse($nodes)) { + $nodes = $return; + } + } + + $nodes = $this->traverseArray($nodes); + + foreach ($this->visitors as $visitor) { + if (null !== $return = $visitor->afterTraverse($nodes)) { + $nodes = $return; + } + } + + return $nodes; + } + + /** + * Recursively traverse a node. + * + * @param Node $node Node to traverse. + * + * @return Node Result of traversal (may be original node or new one) + */ + protected function traverseNode(Node $node) : Node { + foreach ($node->getSubNodeNames() as $name) { + $subNode =& $node->$name; + + if (\is_array($subNode)) { + $subNode = $this->traverseArray($subNode); + if ($this->stopTraversal) { + break; + } + } elseif ($subNode instanceof Node) { + $traverseChildren = true; + $breakVisitorIndex = null; + + foreach ($this->visitors as $visitorIndex => $visitor) { + $return = $visitor->enterNode($subNode); + if (null !== $return) { + if ($return instanceof Node) { + $this->ensureReplacementReasonable($subNode, $return); + $subNode = $return; + } elseif (self::DONT_TRAVERSE_CHILDREN === $return) { + $traverseChildren = false; + } elseif (self::DONT_TRAVERSE_CURRENT_AND_CHILDREN === $return) { + $traverseChildren = false; + $breakVisitorIndex = $visitorIndex; + break; + } elseif (self::STOP_TRAVERSAL === $return) { + $this->stopTraversal = true; + break 2; + } else { + throw new \LogicException( + 'enterNode() returned invalid value of type ' . gettype($return) + ); + } + } + } + + if ($traverseChildren) { + $subNode = $this->traverseNode($subNode); + if ($this->stopTraversal) { + break; + } + } + + foreach ($this->visitors as $visitorIndex => $visitor) { + $return = $visitor->leaveNode($subNode); + + if (null !== $return) { + if ($return instanceof Node) { + $this->ensureReplacementReasonable($subNode, $return); + $subNode = $return; + } elseif (self::STOP_TRAVERSAL === $return) { + $this->stopTraversal = true; + break 2; + } elseif (\is_array($return)) { + throw new \LogicException( + 'leaveNode() may only return an array ' . + 'if the parent structure is an array' + ); + } else { + throw new \LogicException( + 'leaveNode() returned invalid value of type ' . gettype($return) + ); + } + } + + if ($breakVisitorIndex === $visitorIndex) { + break; + } + } + } + } + + return $node; + } + + /** + * Recursively traverse array (usually of nodes). + * + * @param array $nodes Array to traverse + * + * @return array Result of traversal (may be original array or changed one) + */ + protected function traverseArray(array $nodes) : array { + $doNodes = []; + + foreach ($nodes as $i => &$node) { + if ($node instanceof Node) { + $traverseChildren = true; + $breakVisitorIndex = null; + + foreach ($this->visitors as $visitorIndex => $visitor) { + $return = $visitor->enterNode($node); + if (null !== $return) { + if ($return instanceof Node) { + $this->ensureReplacementReasonable($node, $return); + $node = $return; + } elseif (self::DONT_TRAVERSE_CHILDREN === $return) { + $traverseChildren = false; + } elseif (self::DONT_TRAVERSE_CURRENT_AND_CHILDREN === $return) { + $traverseChildren = false; + $breakVisitorIndex = $visitorIndex; + break; + } elseif (self::STOP_TRAVERSAL === $return) { + $this->stopTraversal = true; + break 2; + } else { + throw new \LogicException( + 'enterNode() returned invalid value of type ' . gettype($return) + ); + } + } + } + + if ($traverseChildren) { + $node = $this->traverseNode($node); + if ($this->stopTraversal) { + break; + } + } + + foreach ($this->visitors as $visitorIndex => $visitor) { + $return = $visitor->leaveNode($node); + + if (null !== $return) { + if ($return instanceof Node) { + $this->ensureReplacementReasonable($node, $return); + $node = $return; + } elseif (\is_array($return)) { + $doNodes[] = [$i, $return]; + break; + } elseif (self::REMOVE_NODE === $return) { + $doNodes[] = [$i, []]; + break; + } elseif (self::STOP_TRAVERSAL === $return) { + $this->stopTraversal = true; + break 2; + } elseif (false === $return) { + throw new \LogicException( + 'bool(false) return from leaveNode() no longer supported. ' . + 'Return NodeTraverser::REMOVE_NODE instead' + ); + } else { + throw new \LogicException( + 'leaveNode() returned invalid value of type ' . gettype($return) + ); + } + } + + if ($breakVisitorIndex === $visitorIndex) { + break; + } + } + } elseif (\is_array($node)) { + throw new \LogicException('Invalid node structure: Contains nested arrays'); + } + } + + if (!empty($doNodes)) { + while (list($i, $replace) = array_pop($doNodes)) { + array_splice($nodes, $i, 1, $replace); + } + } + + return $nodes; + } + + private function ensureReplacementReasonable($old, $new) { + if ($old instanceof Node\Stmt && $new instanceof Node\Expr) { + throw new \LogicException( + "Trying to replace statement ({$old->getType()}) " . + "with expression ({$new->getType()}). Are you missing a " . + "Stmt_Expression wrapper?" + ); + } + + if ($old instanceof Node\Expr && $new instanceof Node\Stmt) { + throw new \LogicException( + "Trying to replace expression ({$old->getType()}) " . + "with statement ({$new->getType()})" + ); + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php new file mode 100644 index 0000000..77ff3d2 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php @@ -0,0 +1,29 @@ + $node stays as-is + * * NodeTraverser::DONT_TRAVERSE_CHILDREN + * => Children of $node are not traversed. $node stays as-is + * * NodeTraverser::STOP_TRAVERSAL + * => Traversal is aborted. $node stays as-is + * * otherwise + * => $node is set to the return value + * + * @param Node $node Node + * + * @return null|int|Node Replacement node (or special return value) + */ + public function enterNode(Node $node); + + /** + * Called when leaving a node. + * + * Return value semantics: + * * null + * => $node stays as-is + * * NodeTraverser::REMOVE_NODE + * => $node is removed from the parent array + * * NodeTraverser::STOP_TRAVERSAL + * => Traversal is aborted. $node stays as-is + * * array (of Nodes) + * => The return value is merged into the parent array (at the position of the $node) + * * otherwise + * => $node is set to the return value + * + * @param Node $node Node + * + * @return null|int|Node|Node[] Replacement node (or special return value) + */ + public function leaveNode(Node $node); + + /** + * Called once after traversal. + * + * Return value semantics: + * * null: $nodes stays as-is + * * otherwise: $nodes is set to the return value + * + * @param Node[] $nodes Array of nodes + * + * @return null|Node[] Array of nodes + */ + public function afterTraverse(array $nodes); +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php new file mode 100644 index 0000000..a85fa49 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php @@ -0,0 +1,20 @@ +setAttribute('origNode', $origNode); + return $node; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php new file mode 100644 index 0000000..9531edb --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php @@ -0,0 +1,48 @@ +filterCallback = $filterCallback; + } + + /** + * Get found nodes satisfying the filter callback. + * + * Nodes are returned in pre-order. + * + * @return Node[] Found nodes + */ + public function getFoundNodes() : array { + return $this->foundNodes; + } + + public function beforeTraverse(array $nodes) { + $this->foundNodes = []; + + return null; + } + + public function enterNode(Node $node) { + $filterCallback = $this->filterCallback; + if ($filterCallback($node)) { + $this->foundNodes[] = $node; + } + + return null; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php new file mode 100644 index 0000000..596a7d7 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php @@ -0,0 +1,50 @@ +filterCallback = $filterCallback; + } + + /** + * Get found node satisfying the filter callback. + * + * Returns null if no node satisfies the filter callback. + * + * @return null|Node Found node (or null if not found) + */ + public function getFoundNode() { + return $this->foundNode; + } + + public function beforeTraverse(array $nodes) { + $this->foundNode = null; + + return null; + } + + public function enterNode(Node $node) { + $filterCallback = $this->filterCallback; + if ($filterCallback($node)) { + $this->foundNode = $node; + return NodeTraverser::STOP_TRAVERSAL; + } + + return null; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php new file mode 100644 index 0000000..a7fd953 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php @@ -0,0 +1,228 @@ +nameContext = new NameContext($errorHandler ?? new ErrorHandler\Throwing); + $this->preserveOriginalNames = $options['preserveOriginalNames'] ?? false; + $this->replaceNodes = $options['replaceNodes'] ?? true; + } + + /** + * Get name resolution context. + * + * @return NameContext + */ + public function getNameContext() : NameContext { + return $this->nameContext; + } + + public function beforeTraverse(array $nodes) { + $this->nameContext->startNamespace(); + return null; + } + + public function enterNode(Node $node) { + if ($node instanceof Stmt\Namespace_) { + $this->nameContext->startNamespace($node->name); + } elseif ($node instanceof Stmt\Use_) { + foreach ($node->uses as $use) { + $this->addAlias($use, $node->type, null); + } + } elseif ($node instanceof Stmt\GroupUse) { + foreach ($node->uses as $use) { + $this->addAlias($use, $node->type, $node->prefix); + } + } elseif ($node instanceof Stmt\Class_) { + if (null !== $node->extends) { + $node->extends = $this->resolveClassName($node->extends); + } + + foreach ($node->implements as &$interface) { + $interface = $this->resolveClassName($interface); + } + + if (null !== $node->name) { + $this->addNamespacedName($node); + } + } elseif ($node instanceof Stmt\Interface_) { + foreach ($node->extends as &$interface) { + $interface = $this->resolveClassName($interface); + } + + $this->addNamespacedName($node); + } elseif ($node instanceof Stmt\Trait_) { + $this->addNamespacedName($node); + } elseif ($node instanceof Stmt\Function_) { + $this->addNamespacedName($node); + $this->resolveSignature($node); + } elseif ($node instanceof Stmt\ClassMethod + || $node instanceof Expr\Closure + || $node instanceof Expr\ArrowFunction + ) { + $this->resolveSignature($node); + } elseif ($node instanceof Stmt\Property) { + if (null !== $node->type) { + $node->type = $this->resolveType($node->type); + } + } elseif ($node instanceof Stmt\Const_) { + foreach ($node->consts as $const) { + $this->addNamespacedName($const); + } + } elseif ($node instanceof Expr\StaticCall + || $node instanceof Expr\StaticPropertyFetch + || $node instanceof Expr\ClassConstFetch + || $node instanceof Expr\New_ + || $node instanceof Expr\Instanceof_ + ) { + if ($node->class instanceof Name) { + $node->class = $this->resolveClassName($node->class); + } + } elseif ($node instanceof Stmt\Catch_) { + foreach ($node->types as &$type) { + $type = $this->resolveClassName($type); + } + } elseif ($node instanceof Expr\FuncCall) { + if ($node->name instanceof Name) { + $node->name = $this->resolveName($node->name, Stmt\Use_::TYPE_FUNCTION); + } + } elseif ($node instanceof Expr\ConstFetch) { + $node->name = $this->resolveName($node->name, Stmt\Use_::TYPE_CONSTANT); + } elseif ($node instanceof Stmt\TraitUse) { + foreach ($node->traits as &$trait) { + $trait = $this->resolveClassName($trait); + } + + foreach ($node->adaptations as $adaptation) { + if (null !== $adaptation->trait) { + $adaptation->trait = $this->resolveClassName($adaptation->trait); + } + + if ($adaptation instanceof Stmt\TraitUseAdaptation\Precedence) { + foreach ($adaptation->insteadof as &$insteadof) { + $insteadof = $this->resolveClassName($insteadof); + } + } + } + } + + return null; + } + + private function addAlias(Stmt\UseUse $use, $type, Name $prefix = null) { + // Add prefix for group uses + $name = $prefix ? Name::concat($prefix, $use->name) : $use->name; + // Type is determined either by individual element or whole use declaration + $type |= $use->type; + + $this->nameContext->addAlias( + $name, (string) $use->getAlias(), $type, $use->getAttributes() + ); + } + + /** @param Stmt\Function_|Stmt\ClassMethod|Expr\Closure $node */ + private function resolveSignature($node) { + foreach ($node->params as $param) { + $param->type = $this->resolveType($param->type); + } + $node->returnType = $this->resolveType($node->returnType); + } + + private function resolveType($node) { + if ($node instanceof Name) { + return $this->resolveClassName($node); + } + if ($node instanceof Node\NullableType) { + $node->type = $this->resolveType($node->type); + return $node; + } + if ($node instanceof Node\UnionType) { + foreach ($node->types as &$type) { + $type = $this->resolveType($type); + } + return $node; + } + return $node; + } + + /** + * Resolve name, according to name resolver options. + * + * @param Name $name Function or constant name to resolve + * @param int $type One of Stmt\Use_::TYPE_* + * + * @return Name Resolved name, or original name with attribute + */ + protected function resolveName(Name $name, int $type) : Name { + if (!$this->replaceNodes) { + $resolvedName = $this->nameContext->getResolvedName($name, $type); + if (null !== $resolvedName) { + $name->setAttribute('resolvedName', $resolvedName); + } else { + $name->setAttribute('namespacedName', FullyQualified::concat( + $this->nameContext->getNamespace(), $name, $name->getAttributes())); + } + return $name; + } + + if ($this->preserveOriginalNames) { + // Save the original name + $originalName = $name; + $name = clone $originalName; + $name->setAttribute('originalName', $originalName); + } + + $resolvedName = $this->nameContext->getResolvedName($name, $type); + if (null !== $resolvedName) { + return $resolvedName; + } + + // unqualified names inside a namespace cannot be resolved at compile-time + // add the namespaced version of the name as an attribute + $name->setAttribute('namespacedName', FullyQualified::concat( + $this->nameContext->getNamespace(), $name, $name->getAttributes())); + return $name; + } + + protected function resolveClassName(Name $name) { + return $this->resolveName($name, Stmt\Use_::TYPE_NORMAL); + } + + protected function addNamespacedName(Node $node) { + $node->namespacedName = Name::concat( + $this->nameContext->getNamespace(), (string) $node->name); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php new file mode 100644 index 0000000..d378d67 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php @@ -0,0 +1,25 @@ +parsers = $parsers; + } + + public function parse(string $code, ErrorHandler $errorHandler = null) { + if (null === $errorHandler) { + $errorHandler = new ErrorHandler\Throwing; + } + + list($firstStmts, $firstError) = $this->tryParse($this->parsers[0], $errorHandler, $code); + if ($firstError === null) { + return $firstStmts; + } + + for ($i = 1, $c = count($this->parsers); $i < $c; ++$i) { + list($stmts, $error) = $this->tryParse($this->parsers[$i], $errorHandler, $code); + if ($error === null) { + return $stmts; + } + } + + throw $firstError; + } + + private function tryParse(Parser $parser, ErrorHandler $errorHandler, $code) { + $stmts = null; + $error = null; + try { + $stmts = $parser->parse($code, $errorHandler); + } catch (Error $error) {} + return [$stmts, $error]; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Parser/Php5.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Parser/Php5.php new file mode 100644 index 0000000..397e605 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Parser/Php5.php @@ -0,0 +1,2640 @@ +'", + "T_IS_GREATER_OR_EQUAL", + "T_SL", + "T_SR", + "'+'", + "'-'", + "'.'", + "'*'", + "'/'", + "'%'", + "'!'", + "T_INSTANCEOF", + "'~'", + "T_INC", + "T_DEC", + "T_INT_CAST", + "T_DOUBLE_CAST", + "T_STRING_CAST", + "T_ARRAY_CAST", + "T_OBJECT_CAST", + "T_BOOL_CAST", + "T_UNSET_CAST", + "'@'", + "T_POW", + "'['", + "T_NEW", + "T_CLONE", + "T_EXIT", + "T_IF", + "T_ELSEIF", + "T_ELSE", + "T_ENDIF", + "T_LNUMBER", + "T_DNUMBER", + "T_STRING", + "T_STRING_VARNAME", + "T_VARIABLE", + "T_NUM_STRING", + "T_INLINE_HTML", + "T_ENCAPSED_AND_WHITESPACE", + "T_CONSTANT_ENCAPSED_STRING", + "T_ECHO", + "T_DO", + "T_WHILE", + "T_ENDWHILE", + "T_FOR", + "T_ENDFOR", + "T_FOREACH", + "T_ENDFOREACH", + "T_DECLARE", + "T_ENDDECLARE", + "T_AS", + "T_SWITCH", + "T_ENDSWITCH", + "T_CASE", + "T_DEFAULT", + "T_BREAK", + "T_CONTINUE", + "T_GOTO", + "T_FUNCTION", + "T_FN", + "T_CONST", + "T_RETURN", + "T_TRY", + "T_CATCH", + "T_FINALLY", + "T_THROW", + "T_USE", + "T_INSTEADOF", + "T_GLOBAL", + "T_STATIC", + "T_ABSTRACT", + "T_FINAL", + "T_PRIVATE", + "T_PROTECTED", + "T_PUBLIC", + "T_VAR", + "T_UNSET", + "T_ISSET", + "T_EMPTY", + "T_HALT_COMPILER", + "T_CLASS", + "T_TRAIT", + "T_INTERFACE", + "T_EXTENDS", + "T_IMPLEMENTS", + "T_OBJECT_OPERATOR", + "T_LIST", + "T_ARRAY", + "T_CALLABLE", + "T_CLASS_C", + "T_TRAIT_C", + "T_METHOD_C", + "T_FUNC_C", + "T_LINE", + "T_FILE", + "T_START_HEREDOC", + "T_END_HEREDOC", + "T_DOLLAR_OPEN_CURLY_BRACES", + "T_CURLY_OPEN", + "T_PAAMAYIM_NEKUDOTAYIM", + "T_NAMESPACE", + "T_NS_C", + "T_DIR", + "T_NS_SEPARATOR", + "T_ELLIPSIS", + "';'", + "'{'", + "'}'", + "'('", + "')'", + "'$'", + "'`'", + "']'", + "'\"'" + ); + + protected $tokenToSymbol = array( + 0, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 54, 158, 159, 155, 53, 36, 159, + 153, 154, 51, 48, 7, 49, 50, 52, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 30, 150, + 42, 15, 44, 29, 66, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 68, 159, 157, 35, 159, 156, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 151, 34, 152, 56, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 1, 2, 3, 4, + 5, 6, 8, 9, 10, 11, 12, 13, 14, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 31, 32, 33, 37, 38, 39, 40, 41, + 43, 45, 46, 47, 55, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 67, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 159, + 159, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 159, 159, + 159, 159, 159, 159, 140, 141, 142, 143, 144, 145, + 146, 147, 148, 149 + ); + + protected $action = array( + 681, 682, 683, 684, 685, 283, 686, 687, 688, 724, + 725, 222, 223, 224, 225, 226, 227, 228, 229, 230, + 0, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242,-32766,-32766,-32766,-32766,-32766,-32766,-32766, + -32766,-32767,-32767,-32767,-32767, 1052, 243, 244,-32766,-32766, + -32766,-32766,-32766, 689,-32766,-32766,-32766,-32766,-32766,-32766, + -32766,-32766,-32767,-32767,-32767,-32767,-32767, 690, 691, 692, + 693, 694, 695, 696, 834, 27, 757, 959, 960, 961, + 958, 957, 956, 697, 698, 699, 700, 701, 702, 703, + 704, 705, 706, 707, 727, 728, 729, 730, 731, 719, + 720, 721, 749, 722, 723, 708, 709, 710, 711, 712, + 713, 714, 751, 752, 753, 754, 755, 756, 715, 716, + 717, 718, 748, 739, 737, 738, 734, 735, 1188, 726, + 732, 733, 740, 741, 743, 742, 744, 745, 54, 55, + 426, 56, 57, 736, 747, 746, -220, 58, 59, 419, + 60,-32766,-32766,-32766,-32766,-32766,-32766,-32766,-32766,-32766, + 28,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767, 97, + 98, 99, 100, 101, 9, 906, 907,-32766, 1202, 761, + 328, 764, 1188, 814, 61, 62, 52, 285, 500, 951, + 63, 434, 64, 294, 295, 65, 66, 67, 68, 69, + 70, 71, 72, 340, 25, 302, 73, 418,-32766,-32766, + -32766, 882, 1103, 1104, 761, 1080, 764,-32766,-32766,-32766, + 475, -255, 298, 825, 835, 759, 219, 220, 221,-32766, + 36,-32766,-32766,-32766,-32766,-32766,-32766, 125,-32766, 438, + -32766,-32766,-32766,-32766,-32766, 1052, 500, 206, 310, 434, + 499, 423, 1052, 129, 439, 759, 336, 340, 483, 484, + 10, 959, 960, 961, 958, 957, 956, 485, 486, 124, + 1109, 1110, 1111, 1112, 1106, 1107, 313,-32766,-32766,-32766, + -32766, 500, 1113, 1108, 434, 219, 220, 221, 425, 41, + 764, 336, 324, 1222, 325, 427, -126, -126, -126, -4, + 835, 474,-32766,-32766,-32766, 823, 206, 913, 40, 21, + 428, -126, 476, -126, 477, -126, 478, -126, 123, 429, + 219, 220, 221, 31, 32, 430, 431, 354, 130, 33, + 479, 883, 336, 74, 1203, 128, 352, 353, 480, 481, + 912, 206, 247, 301, 482, 210, 1052, 806, 853, 432, + 433, 312, 30, 297, 35, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 421, 1052, + 296, 427, 1154, 837, 647, -126, 835, 474, 102, 103, + 104, 823, 304, 816, 40, 21, 428, 332, 476, 632, + 477, 422, 478, 298, 105, 429, 991, 993, 20, 31, + 32, 430, 431, 933, 409, 33, 479, 220, 221, 74, + 323,-32766, 352, 353, 480, 481,-32766,-32766,-32766, 424, + 482, 1052, 448, 768, 853, 432, 433, 206,-32766,-32766, + -32766, 48, 906, 907, 1153, 1070, 339,-32766, 485,-32766, + -32766,-32766,-32766, 1231, 337, 500, 1232, 427, 434, 837, + 647, -4, 835, 474, -224, 1052, 633, 823, 49, 434, + 40, 21, 428, 937, 476, 776, 477, 777, 478, -504, + 820, 429, -205, -205, -205, 31, 32, 430, 431,-32766, + -32766, 33, 479, 75,-32766, 74,-32766, 594, 352, 353, + 480, 481,-32766,-32766,-32766, 119, 482, 526, 451, 806, + 853, 432, 433, 240, 241, 242, 128,-32766,-32766,-32766, + 411, 775, 51,-32766, 120,-32766,-32766,-32766, 500, 243, + 244, 434, 552, 427, 417, 837, 647, -205,-32766, 474, + -32766,-32766, 1052, 823, 821, 351, 40, 21, 428, 1052, + 476, 121, 477, 449, 478, 1115, 211, 429, -204, -204, + -204, 31, 32, 430, 431, 1115, 286, 33, 479, 818, + 835, 74, 932, 299, 352, 353, 480, 481, 212, 219, + 220, 221, 482, 335, 245, 806, 853, 432, 433,-32766, + -32766,-32766, 213, 79, 80, 81, 99, 100, 101, 650, + 206, 237, 238, 239, 444, 122, 776, 649, 777, 300, + -32766, 837, 647, -204, 34, 248, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 1052, + 304, 427, 221, 249, 835, 250, 78, 474, 206, 133, + 336, 823, 105, 585, 40, 21, 428, 127, 476, -83, + 477, 206, 478,-32766,-32766, 429, 219, 220, 221, 31, + 32, 430, 316, 651, 658, 33, 479, 835, 661, 74, + 243, 244, 352, 353, 458, 22, 833, 206, 463, 601, + 482, 134, 362, 132, 608, 609, 769, 653,-32766, 948, + 667, 936, 675, 846, 304, 105, 655, 43, 44, 45, + 616, 761, 759, 46, 47, 427, 302, -274, 50, 837, + 647, 474, 53, 131, 588, 823, 442, 468, 40, 21, + 428, 762, 476, 606, 477,-32766, 478, 764, 447, 429, + 964, 854, 532, 31, 32, 430, 855, 327, 427, 33, + 479, 835, 641, 74, 474, 620, 352, 353, 823, -81, + 628, 40, 21, 428, 482, 476, 11, 477, 450, 478, + 282, 591, 429, 375, 605, 848, 31, 32, 430, 0, + 659, 329, 33, 479, 835, 0, 74, 0, 0, 352, + 353, 0, 0, 837, 647, -504, 0, 482, 326, 0, + 331, 0, 0, 0, 0, 0, 0, 0, 309, 311, + -505, 0, 485, 664, 0, 0, 0, 0, 0, 0, + 0, 0, 427, 1114, 1160, 0, 869, 647, 474, -413, + -405, 835, 823, 5, 6, 40, 21, 428, 12, 476, + 14, 477, 361, 478, -414, 386, 429, 387, 24, 395, + 31, 32, 430, 444, 534, 427, 33, 479, 412, 413, + 74, 474, 38, 352, 353, 823, 39, 670, 40, 21, + 428, 482, 476, 671, 477, 774, 478, 824, 832, 429, + 811, 826, 885, 31, 32, 430, 876, 877, 809, 33, + 479, 870, 867, 74, 865, 943, 352, 353, 944, 941, + 837, 647, 427, 815, 482, 817, 819, 831, 474, 822, + 940, 772, 823, 773, 942, 40, 21, 428, 78, 476, + 648, 477, 652, 478, 654, 656, 429, 657, 246, 660, + 31, 32, 430, 837, 647, 662, 33, 479, 663, 665, + 74, 666, 126, 352, 353, 333, 214, 215, 334, 407, + 408, 482, 216, 672, 217, 807, 1228, 1230, 771, 852, + 770, 851, 1229, 850, 1066, 842, 208, 1054, 849, 1055, + 840, 214, 215, 949, 1103, 1104, 874, 216,-32766, 217, + 837, 647, 1105, 875, 462, 1227, 1196, 1194, 1179, 1192, + 1094, 208, 924, 1200, 1190, 780, 781, 778, 779, 1103, + 1104, 26, 29,-32766, 37, 42, 76, 1105, 77, 209, + 284, 292, 293, 305, 306, 307, 308, 341, 410, 416, + -32766, 0, -221, -220, 16, 17, 18, 380, 459, 466, + 573, 467, 1109, 1110, 1111, 1112, 1106, 1107, 385, 472, + 567, 638, 1057, 1060, 1113, 1108, 914, 1119, 1056, 1032, + 577, 218, 287,-32766, 1031, 573, 1096, 1109, 1110, 1111, + 1112, 1106, 1107, 385, -423, 1050, 0, 1061, 1063, 1113, + 1108, 1062, 1065, 1064, 1079, 1193, 218, 1178,-32766, 1174, + 0, 1191, 1093, 1225, 1120, 1173, 612, 0, 1159 + ); + + protected $actionCheck = array( + 2, 3, 4, 5, 6, 13, 8, 9, 10, 11, + 12, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 0, 42, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 8, 9, 10, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 12, 67, 68, 32, 33, + 34, 35, 36, 55, 29, 8, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 69, 70, 71, + 72, 73, 74, 75, 1, 7, 78, 114, 115, 116, + 117, 118, 119, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 80, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 2, 3, + 4, 5, 6, 145, 146, 147, 154, 11, 12, 125, + 14, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 7, 42, 43, 44, 45, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 105, 132, 133, 153, 1, 78, + 111, 80, 80, 150, 48, 49, 68, 7, 145, 120, + 54, 148, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 155, 68, 69, 70, 71, 8, 9, + 10, 30, 76, 77, 78, 114, 80, 8, 9, 10, + 84, 152, 36, 150, 1, 78, 8, 9, 10, 29, + 13, 31, 32, 33, 34, 35, 36, 7, 29, 103, + 31, 32, 33, 34, 35, 12, 145, 29, 130, 148, + 114, 7, 12, 151, 153, 78, 155, 155, 122, 123, + 7, 114, 115, 116, 117, 118, 119, 131, 132, 151, + 134, 135, 136, 137, 138, 139, 140, 32, 33, 34, + 35, 145, 146, 147, 148, 8, 9, 10, 7, 153, + 80, 155, 156, 83, 158, 72, 73, 74, 75, 0, + 1, 78, 8, 9, 10, 82, 29, 154, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 13, 96, + 8, 9, 10, 100, 101, 102, 103, 7, 151, 106, + 107, 150, 155, 110, 154, 149, 113, 114, 115, 116, + 154, 29, 30, 36, 121, 7, 12, 124, 125, 126, + 127, 7, 142, 143, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 7, 12, + 36, 72, 154, 150, 151, 152, 1, 78, 51, 52, + 53, 82, 55, 150, 85, 86, 87, 7, 89, 78, + 91, 7, 93, 36, 67, 96, 57, 58, 154, 100, + 101, 102, 103, 150, 105, 106, 107, 9, 10, 110, + 111, 80, 113, 114, 115, 116, 8, 9, 10, 7, + 121, 12, 30, 124, 125, 126, 127, 29, 32, 33, + 34, 68, 132, 133, 157, 154, 68, 29, 131, 31, + 32, 33, 34, 78, 145, 145, 81, 72, 148, 150, + 151, 152, 1, 78, 154, 12, 145, 82, 68, 148, + 85, 86, 87, 152, 89, 103, 91, 105, 93, 130, + 150, 96, 97, 98, 99, 100, 101, 102, 103, 8, + 9, 106, 107, 149, 153, 110, 155, 83, 113, 114, + 115, 116, 8, 9, 10, 15, 121, 83, 130, 124, + 125, 126, 127, 51, 52, 53, 149, 8, 9, 10, + 148, 150, 68, 29, 151, 31, 32, 33, 145, 67, + 68, 148, 79, 72, 7, 150, 151, 152, 29, 78, + 31, 32, 12, 82, 150, 7, 85, 86, 87, 12, + 89, 151, 91, 151, 93, 141, 15, 96, 97, 98, + 99, 100, 101, 102, 103, 141, 36, 106, 107, 150, + 1, 110, 150, 36, 113, 114, 115, 116, 15, 8, + 9, 10, 121, 7, 13, 124, 125, 126, 127, 8, + 9, 10, 15, 8, 9, 10, 48, 49, 50, 30, + 29, 48, 49, 50, 148, 151, 103, 151, 105, 7, + 29, 150, 151, 152, 29, 15, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 12, + 55, 72, 10, 15, 1, 15, 151, 78, 29, 151, + 155, 82, 67, 155, 85, 86, 87, 30, 89, 30, + 91, 29, 93, 32, 33, 96, 8, 9, 10, 100, + 101, 102, 30, 30, 30, 106, 107, 1, 30, 110, + 67, 68, 113, 114, 73, 74, 30, 29, 73, 74, + 121, 98, 99, 30, 108, 109, 150, 151, 32, 150, + 151, 150, 151, 36, 55, 67, 30, 68, 68, 68, + 75, 78, 78, 68, 68, 72, 69, 80, 68, 150, + 151, 78, 68, 68, 88, 82, 103, 103, 85, 86, + 87, 78, 89, 111, 91, 83, 93, 80, 87, 96, + 80, 125, 83, 100, 101, 102, 125, 129, 72, 106, + 107, 1, 90, 110, 78, 94, 113, 114, 82, 95, + 92, 85, 86, 87, 121, 89, 95, 91, 95, 93, + 95, 97, 96, 148, 97, 149, 100, 101, 102, -1, + 30, 112, 106, 107, 1, -1, 110, -1, -1, 113, + 114, -1, -1, 150, 151, 130, -1, 121, 128, -1, + 128, -1, -1, -1, -1, -1, -1, -1, 130, 130, + 130, -1, 131, 30, -1, -1, -1, -1, -1, -1, + -1, -1, 72, 141, 141, -1, 150, 151, 78, 144, + 144, 1, 82, 144, 144, 85, 86, 87, 144, 89, + 144, 91, 144, 93, 144, 148, 96, 148, 153, 148, + 100, 101, 102, 148, 148, 72, 106, 107, 148, 148, + 110, 78, 150, 113, 114, 82, 150, 150, 85, 86, + 87, 121, 89, 150, 91, 150, 93, 150, 150, 96, + 150, 150, 150, 100, 101, 102, 150, 150, 150, 106, + 107, 150, 150, 110, 150, 150, 113, 114, 150, 150, + 150, 151, 72, 150, 121, 150, 150, 150, 78, 150, + 150, 150, 82, 150, 150, 85, 86, 87, 151, 89, + 151, 91, 151, 93, 151, 151, 96, 151, 30, 151, + 100, 101, 102, 150, 151, 151, 106, 107, 151, 151, + 110, 151, 151, 113, 114, 151, 48, 49, 151, 151, + 151, 121, 54, 152, 56, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 68, 152, 152, 152, + 152, 48, 49, 152, 76, 77, 152, 54, 80, 56, + 150, 151, 84, 152, 152, 152, 152, 152, 152, 152, + 152, 68, 152, 152, 152, 152, 152, 152, 152, 76, + 77, 153, 153, 80, 153, 153, 153, 84, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, -1, 154, 154, 154, 154, 154, 154, 154, 154, + 132, 154, 134, 135, 136, 137, 138, 139, 140, 154, + 154, 154, 154, 154, 146, 147, 154, 154, 154, 154, + 154, 153, 155, 155, 154, 132, 154, 134, 135, 136, + 137, 138, 139, 140, 156, 156, -1, 157, 157, 146, + 147, 157, 157, 157, 157, 157, 153, 157, 155, 157, + -1, 157, 157, 157, 157, 157, 157, -1, 158 + ); + + protected $actionBase = array( + 0, 223, 299, 375, 451, 102, 102, 311, 754, -2, + -2, 147, -2, -2, -2, 633, 740, 773, 740, 559, + 666, 820, 820, 820, 186, 334, 334, 334, 357, 892, + 443, 33, 233, 409, 617, 520, 527, 240, 240, 240, + 240, 136, 136, 240, 240, 240, 240, 240, 240, 240, + 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, + 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, + 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, + 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, + 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, + 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, + 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, + 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, + 240, 240, 240, 240, 240, 181, 73, 305, 217, 743, + 745, 746, 747, 884, 665, 885, 823, 824, 653, 825, + 826, 827, 828, 830, 822, 831, 919, 832, 575, 575, + 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, + 47, 561, 218, 312, 277, 471, 648, 648, 648, 648, + 648, 648, 648, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 398, 571, 571, 571, 622, 888, 609, 913, 913, + 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, + 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, + 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, + 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, + 913, 499, -21, -21, 484, 656, 408, 621, 209, 396, + 200, 25, 25, 25, 25, 25, 245, 16, 4, 4, + 4, 4, 339, 123, 123, 123, 123, 119, 119, 119, + 119, 69, 307, 307, 671, 671, 637, 781, 538, 538, + 543, 543, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 24, 627, 857, 300, 300, 300, 300, 177, + 177, 177, 43, 414, 673, 920, 43, 327, 327, 327, + 452, 452, 452, 362, 649, 210, 331, 331, 331, 331, + 210, 331, 331, 493, 493, 493, 485, 446, 642, 365, + 488, 373, 390, 664, 814, 667, 821, 541, 690, 118, + 700, 701, 887, 613, 887, 601, 605, 576, 676, 392, + 850, 48, 181, 539, 444, 639, 749, 361, 751, 320, + 384, 368, 536, 363, 244, 784, 753, 886, 890, 180, + 670, 639, 639, 639, 153, 404, 787, 788, 363, -8, + 603, 603, 603, 603, 833, 789, 603, 603, 603, 603, + 834, 835, 253, 412, 836, 281, 750, 623, 623, 624, + 624, 623, 623, 623, 623, 650, 657, 623, 839, 685, + 685, 624, 647, 624, 650, 657, 842, 842, 842, 842, + 624, 657, 624, 624, 623, 624, 685, 685, 657, 637, + 685, 68, 657, 660, 623, 662, 662, 842, 707, 713, + 624, 624, 608, 685, 685, 685, 608, 657, 842, 612, + 616, 338, 685, 842, 632, 647, 632, 612, 657, 632, + 647, 647, 632, 20, 619, 629, 841, 843, 855, 759, + 606, 611, 848, 849, 845, 847, 838, 646, 696, 715, + 717, 480, 630, 631, 635, 636, 679, 640, 668, 613, + 695, 628, 628, 628, 655, 680, 655, 628, 628, 628, + 628, 628, 628, 628, 628, 900, 675, 688, 669, 641, + 718, 531, 615, 663, 553, 761, 672, 696, 696, 793, + 878, 863, 898, 899, 643, 850, 876, 655, 901, 702, + 230, 567, 851, 791, 687, 689, 655, 852, 655, 763, + 655, 879, 794, 645, 795, 696, 796, 628, 882, 904, + 905, 906, 907, 908, 910, 912, 914, 644, 915, 720, + 626, 864, 344, 846, 676, 684, 691, 721, 797, 380, + 916, 798, 655, 655, 764, 757, 655, 766, 722, 706, + 860, 726, 865, 917, 672, 867, 655, 614, 799, 918, + 380, 634, 625, 858, 651, 727, 856, 883, 854, 768, + 590, 618, 800, 801, 802, 638, 728, 861, 862, 859, + 731, 774, 620, 777, 658, 803, 778, 853, 732, 805, + 806, 877, 654, 695, 686, 659, 661, 652, 780, 807, + 875, 734, 735, 738, 808, 739, 811, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 136, 136, 136, + 136, -2, -2, -2, -2, 0, 0, -2, 0, 0, + 0, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 0, 0, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 575, 575, 575, 575, 575, 575, 575, 575, 575, + 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, + 575, 575, 575, 575, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 575, -21, -21, -21, + -21, 575, -21, -21, -21, -21, -21, -21, -21, 575, + 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, + 575, 575, 575, 575, 575, 575, 575, -21, 575, 575, + 575, -21, 101, -21, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 575, 0, 0, + 575, -21, 575, -21, 575, -21, 575, 575, 575, 575, + 575, 575, -21, -21, -21, -21, -21, -21, 0, 327, + 327, 327, 327, -21, -21, -21, -21, -37, 101, 101, + 101, 101, 101, 101, 327, 327, 452, 452, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 101, -37, + 101, 623, 623, 623, 623, 647, 647, 647, 623, 210, + 210, 210, 623, 0, 0, 0, 0, 0, 0, 623, + 210, 0, 101, 101, 101, 101, 0, 101, 101, 623, + 623, 623, 647, 623, 210, 647, 647, 623, 685, 583, + 583, 583, 583, 380, 363, 0, 623, 623, 647, 647, + 647, 0, 0, 0, 685, 0, 624, 0, 0, 0, + 0, 628, 230, 0, 528, 0, 0, 0, 0, 0, + 0, 643, 528, 592, 592, 0, 644, 628, 628, 628, + 0, 0, 643, 643, 0, 0, 0, 0, 0, 0, + 566, 643, 0, 0, 0, 0, 566, 517, 0, 0, + 517, 0, 380 + ); + + protected $actionDefault = array( + 3,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767,32767, 533, 533, 488,32767,32767, + 32767,32767,32767,32767,32767,32767,32767, 293, 293, 293, + 32767,32767,32767, 521, 521, 521, 521, 521, 521, 521, + 521, 521, 521, 521,32767,32767,32767,32767,32767, 376, + 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767,32767, 382, 538,32767, + 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767,32767,32767, 357, 358, + 360, 361, 292, 541, 522, 241, 383, 537, 291, 243, + 321, 492,32767,32767,32767, 323, 120, 252, 197, 491, + 123, 290, 228, 375, 377, 322, 297, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 296, 448, 354, 353, 352, 450,32767, 449, 485, 485, + 488,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 32767, 319, 476, 475, 320, 446, 324, 447, 326, 451, + 325, 342, 343, 340, 341, 344, 453, 452, 469, 470, + 467, 468, 295, 345, 346, 347, 348, 471, 472, 473, + 474, 276,32767,32767, 532, 532,32767,32767, 333, 334, + 460, 461,32767,32767,32767,32767,32767,32767,32767,32767, + 32767,32767,32767, 277,32767, 232, 232, 232, 232,32767, + 32767,32767, 232,32767,32767,32767,32767, 328, 329, 327, + 455, 456, 454,32767, 422,32767,32767,32767,32767,32767, + 424,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 32767,32767, 493,32767,32767,32767,32767,32767, 506, 411, + 32767,32767,32767, 404,32767, 216, 218, 165, 479,32767, + 32767,32767,32767,32767, 511, 338,32767,32767,32767,32767, + 32767, 548,32767, 506,32767,32767,32767,32767,32767,32767, + 351, 330, 331, 332,32767,32767,32767,32767, 510, 504, + 463, 464, 465, 466,32767,32767, 457, 458, 459, 462, + 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767, 169,32767, 419, 425, + 425,32767,32767,32767,32767, 169,32767,32767,32767,32767, + 32767, 169,32767,32767,32767,32767, 509, 508, 169,32767, + 405, 487, 169, 182,32767, 180, 180,32767, 202, 202, + 32767,32767, 184, 480, 499,32767, 184, 169,32767, 393, + 171, 487,32767,32767, 234,32767, 234, 393, 169, 234, + 32767,32767, 234,32767, 85, 429,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767,32767,32767, 406,32767, + 32767,32767, 372, 373, 482, 495,32767, 496,32767, 404, + 32767, 336, 337, 339, 316,32767, 318, 362, 363, 364, + 365, 366, 367, 368, 370,32767, 409,32767, 412,32767, + 32767,32767, 87, 112, 251,32767, 546, 87, 407,32767, + 32767, 300, 546,32767,32767,32767,32767, 540,32767,32767, + 294,32767,32767,32767, 87, 87, 247,32767, 167,32767, + 530,32767, 547,32767, 504, 408,32767, 335,32767,32767, + 32767,32767,32767,32767,32767,32767,32767, 505,32767,32767, + 32767,32767, 223,32767, 442,32767, 87,32767,32767, 183, + 32767,32767, 298, 242,32767,32767, 539,32767,32767,32767, + 32767,32767,32767,32767,32767,32767, 168,32767,32767,32767, + 185,32767,32767, 504,32767,32767,32767,32767,32767,32767, + 32767, 289,32767,32767,32767,32767,32767,32767,32767, 504, + 32767,32767, 227,32767,32767,32767,32767,32767,32767,32767, + 32767,32767, 85, 60,32767, 270,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767,32767, 125, 125, 3, + 125, 125, 254, 3, 254, 125, 254, 254, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 210, 213, + 202, 202, 162, 125, 125, 262 + ); + + protected $goto = array( + 165, 138, 138, 138, 165, 143, 146, 139, 140, 141, + 148, 186, 167, 162, 162, 162, 162, 143, 143, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 158, 159, 160, 161, 183, 137, 184, 501, 502, 365, + 503, 507, 508, 509, 510, 511, 512, 513, 514, 977, + 142, 163, 144, 145, 147, 170, 175, 185, 202, 251, + 254, 256, 258, 260, 261, 262, 263, 264, 265, 273, + 274, 275, 276, 288, 289, 317, 318, 319, 381, 382, + 383, 557, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 149, 150, 151, 166, + 152, 168, 153, 203, 169, 154, 155, 156, 204, 157, + 135, 634, 575, 760, 575, 575, 575, 575, 575, 575, + 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, + 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, + 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, + 575, 575, 575, 575, 575, 575, 575, 1116, 766, 1116, + 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, + 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, + 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, + 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, + 1116, 1116, 505, 505, 505, 505, 505, 505, 516, 642, + 516, 767, 505, 505, 505, 505, 505, 505, 505, 505, + 505, 505, 517, 797, 517, 898, 898, 1207, 1207, 531, + 589, 617, 862, 862, 862, 862, 173, 857, 863, 1092, + 1091, 176, 177, 178, 390, 391, 392, 393, 172, 201, + 205, 207, 255, 257, 259, 266, 267, 268, 269, 270, + 271, 277, 278, 279, 280, 290, 291, 320, 321, 322, + 396, 397, 398, 399, 174, 179, 252, 253, 180, 181, + 182, 389, 619, 550, 550, 582, 546, 598, 765, 613, + 614, 548, 548, 504, 506, 537, 554, 583, 586, 596, + 603, 884, 866, 864, 866, 668, 828, 519, 893, 888, + 574, 344, 574, 574, 574, 574, 574, 574, 574, 574, + 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, + 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, + 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, + 574, 574, 574, 574, 574, 559, 560, 561, 562, 563, + 564, 565, 566, 568, 599, 522, 558, 330, 315, 1219, + 1219, 530, 592, 595, 640, 527, 527, 527, 868, 527, + 600, 347, 406, 530, 530, 1219, 440, 440, 440, 440, + 440, 440, 545, 527, 551, 954, 440, 440, 440, 440, + 440, 440, 440, 440, 440, 440, 1081, 1211, 1081, 905, + 905, 905, 905, 3, 4, 623, 905, 955, 626, 556, + 905, 363, 1185, 581, 1185, 916, 371, 371, 371, 366, + 1081, 1081, 1081, 1081, 790, 1081, 1081, 371, 371, 1184, + 607, 1184, 1177, 371, 1165, 471, 1201, 1201, 1201, 527, + 527, 371, 1233, 544, 576, 527, 527, 618, 1074, 527, + 1204, 790, 790, 378, 1025, 922, 524, 922, 518, 902, + 518, 911, 350, 1183, 975, 400, 528, 543, 786, 669, + 570, 372, 376, 920, 604, 784, 555, 895, 624, 625, + 891, 629, 630, 637, 639, 644, 646, 453, 455, 947, + 645, 673, 1097, 404, 1117, 627, 945, 1199, 1199, 1199, + 1035, 19, 15, 359, 1218, 1218, 1067, 872, 783, 783, + 794, 963, 791, 791, 791, 793, 1072, 925, 782, 456, + 1218, 569, 345, 346, 360, 524, 1077, 1078, 1221, 1162, + 1074, 535, 23, 587, 469, 547, 0, 615, 373, 373, + 373, 0, 0, 1075, 1176, 1075, 0, 0, 542, 0, + 460, 0, 1076, 0, 0, 0, 0, 0, 0, 0, + 0, 13, 0, 0, 0, 373, 0, 0, 622, 388, + 0, 0, 0, 1073, 631, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 521, 541, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, + 0, 541, 0, 0, 0, 0, 0, 536, 520, 0, + 525, 443, 0, 445, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 789, 1226 + ); + + protected $gotoCheck = array( + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 56, 66, 5, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 124, 14, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 115, 115, 115, 115, 115, 115, 66, 8, + 66, 15, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 28, 115, 74, 74, 74, 74, 99, + 39, 39, 66, 66, 66, 66, 26, 66, 66, 122, + 122, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 50, 50, 50, 50, 50, 50, 64, 13, 64, + 64, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 13, 13, 13, 13, 13, 49, 13, 13, 13, + 56, 69, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 10, 46, 123, 123, 140, + 140, 46, 59, 59, 59, 10, 10, 10, 32, 10, + 67, 67, 67, 46, 46, 140, 56, 56, 56, 56, + 56, 56, 10, 10, 107, 95, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 138, 56, 56, + 56, 56, 56, 29, 29, 60, 56, 95, 60, 2, + 56, 60, 116, 2, 116, 81, 12, 12, 12, 45, + 56, 56, 56, 56, 22, 56, 56, 12, 12, 117, + 125, 117, 79, 12, 129, 56, 117, 117, 117, 10, + 10, 12, 12, 10, 10, 10, 10, 48, 79, 10, + 136, 22, 22, 47, 100, 12, 12, 12, 120, 76, + 120, 78, 17, 117, 99, 21, 10, 31, 24, 31, + 31, 11, 16, 82, 31, 23, 10, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 7, 7, 7, + 7, 71, 33, 20, 7, 7, 7, 8, 8, 8, + 33, 33, 33, 33, 139, 139, 111, 68, 22, 22, + 25, 97, 22, 22, 22, 22, 113, 83, 22, 62, + 139, 33, 69, 69, 57, 12, 79, 79, 139, 128, + 79, 57, 33, 63, 106, 57, -1, 33, 121, 121, + 121, -1, -1, 79, 79, 79, -1, -1, 8, -1, + 57, -1, 79, -1, -1, -1, -1, -1, -1, -1, + -1, 57, -1, -1, -1, 121, -1, -1, 12, 121, + -1, -1, -1, 12, 12, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 8, 8, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 8, + -1, 8, -1, -1, -1, -1, -1, 99, 8, -1, + 8, 8, -1, 8, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 8, 8 + ); + + protected $gotoBase = array( + 0, 0, -230, 0, 0, 102, 0, 492, 198, 0, + 42, 144, 113, 286, 156, 209, 132, 149, 0, 0, + 95, 141, 111, 134, 143, 99, 30, 0, 213, -260, + 0, -171, 358, 84, 0, 0, 0, 0, 0, 192, + 0, 0, -24, 0, 0, 389, 342, 170, 174, 288, + -1, 0, 0, 0, 0, 0, 104, 103, 0, 66, + -51, 0, 83, 87, -367, 0, -94, 53, 94, -138, + 0, 139, 0, 0, -57, 0, 157, 0, 155, 100, + 0, 397, 129, 105, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 114, 0, 97, 0, 188, + 160, 0, 0, 0, 0, 0, 77, 368, 311, 0, + 0, 96, 0, 101, 0, -80, 120, 137, 0, 0, + 166, 239, -71, 43, -49, 231, 0, 0, 78, 234, + 0, 0, 0, 0, 0, 0, 175, 0, 380, 200, + 55, 0, 0 + ); + + protected $gotoDefault = array( + -32768, 473, 677, 2, 678, 750, 758, 610, 487, 643, + 488, 523, 1195, 803, 804, 805, 368, 414, 489, 367, + 401, 394, 792, 785, 787, 795, 171, 402, 798, 1, + 800, 529, 836, 1026, 355, 808, 356, 602, 810, 539, + 812, 813, 136, 369, 370, 540, 490, 377, 590, 827, + 272, 374, 829, 357, 830, 839, 358, 470, 465, 571, + 621, 435, 452, 584, 578, 549, 1089, 579, 871, 343, + 879, 674, 887, 890, 491, 572, 901, 457, 909, 1102, + 384, 915, 921, 926, 281, 929, 415, 403, 597, 934, + 935, 7, 939, 635, 636, 8, 303, 962, 611, 976, + 420, 1045, 1047, 492, 493, 533, 464, 515, 538, 494, + 1068, 446, 405, 1071, 495, 496, 436, 437, 1086, 349, + 1170, 348, 454, 314, 1157, 593, 1121, 461, 1210, 1166, + 342, 497, 498, 364, 1189, 379, 1205, 441, 1212, 1220, + 338, 553, 580 + ); + + protected $ruleToNonTerminal = array( + 0, 1, 3, 3, 2, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, + 6, 7, 7, 8, 9, 10, 10, 11, 12, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 17, 17, 18, 18, 18, 18, 20, 20, 16, 16, + 21, 21, 22, 22, 23, 23, 24, 24, 19, 19, + 25, 27, 27, 28, 29, 29, 31, 30, 30, 30, + 30, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 13, 13, 53, 53, 55, 54, 54, 47, 47, 57, + 57, 58, 58, 14, 15, 15, 15, 61, 61, 61, + 62, 62, 65, 65, 63, 63, 67, 67, 40, 40, + 49, 49, 52, 52, 52, 51, 51, 68, 41, 41, + 41, 41, 69, 69, 70, 70, 71, 71, 38, 38, + 34, 34, 72, 36, 36, 73, 35, 35, 37, 37, + 48, 48, 48, 59, 59, 75, 75, 76, 76, 78, + 78, 78, 77, 77, 60, 60, 79, 79, 79, 80, + 80, 81, 81, 81, 43, 43, 82, 82, 82, 44, + 44, 83, 83, 84, 84, 64, 85, 85, 85, 85, + 90, 90, 91, 91, 92, 92, 92, 92, 92, 93, + 94, 94, 89, 89, 86, 86, 88, 88, 96, 96, + 95, 95, 95, 95, 95, 95, 87, 87, 98, 97, + 97, 45, 45, 39, 39, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 33, 33, 46, 46, 103, 103, 104, 104, 104, 104, + 110, 99, 99, 106, 106, 112, 112, 113, 114, 114, + 114, 114, 114, 114, 66, 66, 56, 56, 56, 100, + 100, 118, 118, 115, 115, 119, 119, 119, 119, 101, + 101, 101, 105, 105, 105, 111, 111, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 26, 26, 26, 26, 26, 26, 126, 126, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 109, + 109, 102, 102, 102, 102, 125, 125, 128, 128, 127, + 127, 129, 129, 50, 50, 50, 50, 131, 131, 130, + 130, 130, 130, 130, 132, 132, 117, 117, 120, 120, + 116, 116, 134, 133, 133, 133, 133, 121, 121, 121, + 121, 108, 108, 122, 122, 122, 122, 74, 135, 135, + 136, 136, 136, 107, 107, 137, 137, 138, 138, 138, + 138, 138, 123, 123, 123, 123, 140, 141, 139, 139, + 139, 139, 139, 139, 139, 142, 142, 142 + ); + + protected $ruleToLength = array( + 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, + 1, 1, 1, 3, 5, 4, 3, 4, 2, 3, + 1, 1, 7, 8, 6, 7, 3, 1, 3, 1, + 3, 1, 1, 3, 1, 2, 1, 2, 3, 1, + 3, 3, 1, 3, 2, 0, 1, 1, 1, 1, + 1, 3, 5, 8, 3, 5, 9, 3, 2, 3, + 2, 3, 2, 3, 3, 3, 3, 1, 2, 2, + 5, 7, 9, 5, 6, 3, 3, 2, 2, 1, + 1, 1, 0, 2, 8, 0, 4, 1, 3, 0, + 1, 0, 1, 10, 7, 6, 5, 1, 2, 2, + 0, 2, 0, 2, 0, 2, 1, 3, 1, 4, + 1, 4, 1, 1, 4, 1, 3, 3, 3, 4, + 4, 5, 0, 2, 4, 3, 1, 1, 1, 4, + 0, 2, 3, 0, 2, 4, 0, 2, 0, 3, + 1, 2, 1, 1, 0, 1, 3, 4, 6, 1, + 1, 1, 0, 1, 0, 2, 2, 3, 3, 1, + 3, 1, 2, 2, 3, 1, 1, 2, 4, 3, + 1, 1, 3, 2, 0, 1, 3, 3, 9, 3, + 1, 3, 0, 2, 4, 5, 4, 4, 4, 3, + 1, 1, 1, 3, 1, 1, 0, 1, 1, 2, + 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, + 3, 3, 1, 0, 1, 1, 3, 3, 4, 4, + 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 1, 3, 5, 4, 3, 4, 4, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 1, 1, 1, 3, 2, 1, 2, 10, 11, + 3, 3, 2, 4, 4, 3, 4, 4, 4, 4, + 7, 3, 2, 0, 4, 1, 3, 2, 2, 4, + 6, 2, 2, 4, 1, 1, 1, 2, 3, 1, + 1, 1, 1, 1, 1, 3, 3, 4, 4, 0, + 2, 1, 0, 1, 1, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 3, 2, + 1, 3, 1, 4, 3, 1, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, + 3, 3, 3, 3, 3, 5, 4, 4, 3, 1, + 3, 1, 1, 3, 3, 0, 2, 0, 1, 3, + 1, 3, 1, 1, 1, 1, 1, 6, 4, 3, + 4, 2, 4, 4, 1, 3, 1, 2, 1, 1, + 4, 1, 1, 3, 6, 4, 4, 4, 4, 1, + 4, 0, 1, 1, 3, 1, 1, 4, 3, 1, + 1, 1, 0, 0, 2, 3, 1, 3, 1, 4, + 2, 2, 2, 2, 1, 2, 1, 1, 1, 4, + 3, 3, 3, 6, 3, 1, 1, 1 + ); + + protected function initReduceCallbacks() { + $this->reduceCallbacks = [ + 0 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 1 => function ($stackPos) { + $this->semValue = $this->handleNamespaces($this->semStack[$stackPos-(1-1)]); + }, + 2 => function ($stackPos) { + if (is_array($this->semStack[$stackPos-(2-2)])) { $this->semValue = array_merge($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]); } else { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; }; + }, + 3 => function ($stackPos) { + $this->semValue = array(); + }, + 4 => function ($stackPos) { + $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; }; + if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 5 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 6 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 7 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 8 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 9 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 10 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 11 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 12 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 13 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 14 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 15 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 16 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 17 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 18 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 19 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 20 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 21 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 22 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 23 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 24 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 25 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 26 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 27 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 28 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 29 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 30 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 31 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 32 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 33 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 34 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 35 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 36 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 37 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 38 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 39 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 40 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 41 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 42 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 43 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 44 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 45 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 46 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 47 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 48 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 49 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 50 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 51 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 52 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 53 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 54 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 55 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 56 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 57 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 58 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 59 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 60 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 61 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 62 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 63 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 64 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 65 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 66 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 67 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 68 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 69 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 70 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 71 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 72 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 73 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 74 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 75 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 76 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 77 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 78 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 79 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 80 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 81 => function ($stackPos) { + $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 82 => function ($stackPos) { + $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 83 => function ($stackPos) { + $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 84 => function ($stackPos) { + $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 85 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 86 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 87 => function ($stackPos) { + $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 88 => function ($stackPos) { + $this->semValue = new Expr\Variable(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 89 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 90 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 91 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 92 => function ($stackPos) { + $this->semValue = new Stmt\HaltCompiler($this->lexer->handleHaltCompiler(), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 93 => function ($stackPos) { + $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos-(3-2)], null, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON); + $this->checkNamespace($this->semValue); + }, + 94 => function ($stackPos) { + $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos-(5-2)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes); + $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED); + $this->checkNamespace($this->semValue); + }, + 95 => function ($stackPos) { + $this->semValue = new Stmt\Namespace_(null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED); + $this->checkNamespace($this->semValue); + }, + 96 => function ($stackPos) { + $this->semValue = new Stmt\Use_($this->semStack[$stackPos-(3-2)], Stmt\Use_::TYPE_NORMAL, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 97 => function ($stackPos) { + $this->semValue = new Stmt\Use_($this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 98 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 99 => function ($stackPos) { + $this->semValue = new Stmt\Const_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 100 => function ($stackPos) { + $this->semValue = Stmt\Use_::TYPE_FUNCTION; + }, + 101 => function ($stackPos) { + $this->semValue = Stmt\Use_::TYPE_CONSTANT; + }, + 102 => function ($stackPos) { + $this->semValue = new Stmt\GroupUse(new Name($this->semStack[$stackPos-(7-3)], $this->startAttributeStack[$stackPos-(7-3)] + $this->endAttributeStack[$stackPos-(7-3)]), $this->semStack[$stackPos-(7-6)], $this->semStack[$stackPos-(7-2)], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes); + }, + 103 => function ($stackPos) { + $this->semValue = new Stmt\GroupUse(new Name($this->semStack[$stackPos-(8-4)], $this->startAttributeStack[$stackPos-(8-4)] + $this->endAttributeStack[$stackPos-(8-4)]), $this->semStack[$stackPos-(8-7)], $this->semStack[$stackPos-(8-2)], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes); + }, + 104 => function ($stackPos) { + $this->semValue = new Stmt\GroupUse(new Name($this->semStack[$stackPos-(6-2)], $this->startAttributeStack[$stackPos-(6-2)] + $this->endAttributeStack[$stackPos-(6-2)]), $this->semStack[$stackPos-(6-5)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); + }, + 105 => function ($stackPos) { + $this->semValue = new Stmt\GroupUse(new Name($this->semStack[$stackPos-(7-3)], $this->startAttributeStack[$stackPos-(7-3)] + $this->endAttributeStack[$stackPos-(7-3)]), $this->semStack[$stackPos-(7-6)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes); + }, + 106 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 107 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 108 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 109 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 110 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 111 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 112 => function ($stackPos) { + $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(1-1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(1-1)); + }, + 113 => function ($stackPos) { + $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(3-3)); + }, + 114 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 115 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(2-2)]; + }, + 116 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; $this->semValue->type = Stmt\Use_::TYPE_NORMAL; + }, + 117 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(2-2)]; $this->semValue->type = $this->semStack[$stackPos-(2-1)]; + }, + 118 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 119 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 120 => function ($stackPos) { + $this->semValue = new Node\Const_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 121 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 122 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 123 => function ($stackPos) { + $this->semValue = new Node\Const_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 124 => function ($stackPos) { + if (is_array($this->semStack[$stackPos-(2-2)])) { $this->semValue = array_merge($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]); } else { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; }; + }, + 125 => function ($stackPos) { + $this->semValue = array(); + }, + 126 => function ($stackPos) { + $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; }; + if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 127 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 128 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 129 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 130 => function ($stackPos) { + throw new Error('__HALT_COMPILER() can only be used from the outermost scope', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 131 => function ($stackPos) { + + if ($this->semStack[$stackPos-(3-2)]) { + $this->semValue = $this->semStack[$stackPos-(3-2)]; $attrs = $this->startAttributeStack[$stackPos-(3-1)]; $stmts = $this->semValue; if (!empty($attrs['comments'])) {$stmts[0]->setAttribute('comments', array_merge($attrs['comments'], $stmts[0]->getAttribute('comments', []))); }; + } else { + $startAttributes = $this->startAttributeStack[$stackPos-(3-1)]; if (isset($startAttributes['comments'])) { $this->semValue = new Stmt\Nop($startAttributes + $this->endAttributes); } else { $this->semValue = null; }; + if (null === $this->semValue) { $this->semValue = array(); } + } + + }, + 132 => function ($stackPos) { + $this->semValue = new Stmt\If_($this->semStack[$stackPos-(5-2)], ['stmts' => is_array($this->semStack[$stackPos-(5-3)]) ? $this->semStack[$stackPos-(5-3)] : array($this->semStack[$stackPos-(5-3)]), 'elseifs' => $this->semStack[$stackPos-(5-4)], 'else' => $this->semStack[$stackPos-(5-5)]], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes); + }, + 133 => function ($stackPos) { + $this->semValue = new Stmt\If_($this->semStack[$stackPos-(8-2)], ['stmts' => $this->semStack[$stackPos-(8-4)], 'elseifs' => $this->semStack[$stackPos-(8-5)], 'else' => $this->semStack[$stackPos-(8-6)]], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes); + }, + 134 => function ($stackPos) { + $this->semValue = new Stmt\While_($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 135 => function ($stackPos) { + $this->semValue = new Stmt\Do_($this->semStack[$stackPos-(5-4)], is_array($this->semStack[$stackPos-(5-2)]) ? $this->semStack[$stackPos-(5-2)] : array($this->semStack[$stackPos-(5-2)]), $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes); + }, + 136 => function ($stackPos) { + $this->semValue = new Stmt\For_(['init' => $this->semStack[$stackPos-(9-3)], 'cond' => $this->semStack[$stackPos-(9-5)], 'loop' => $this->semStack[$stackPos-(9-7)], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes); + }, + 137 => function ($stackPos) { + $this->semValue = new Stmt\Switch_($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 138 => function ($stackPos) { + $this->semValue = new Stmt\Break_(null, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 139 => function ($stackPos) { + $this->semValue = new Stmt\Break_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 140 => function ($stackPos) { + $this->semValue = new Stmt\Continue_(null, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 141 => function ($stackPos) { + $this->semValue = new Stmt\Continue_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 142 => function ($stackPos) { + $this->semValue = new Stmt\Return_(null, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 143 => function ($stackPos) { + $this->semValue = new Stmt\Return_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 144 => function ($stackPos) { + $this->semValue = new Stmt\Global_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 145 => function ($stackPos) { + $this->semValue = new Stmt\Static_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 146 => function ($stackPos) { + $this->semValue = new Stmt\Echo_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 147 => function ($stackPos) { + $this->semValue = new Stmt\InlineHTML($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 148 => function ($stackPos) { + $this->semValue = new Stmt\Expression($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 149 => function ($stackPos) { + $this->semValue = new Stmt\Expression($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 150 => function ($stackPos) { + $this->semValue = new Stmt\Unset_($this->semStack[$stackPos-(5-3)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes); + }, + 151 => function ($stackPos) { + $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-5)][0], ['keyVar' => null, 'byRef' => $this->semStack[$stackPos-(7-5)][1], 'stmts' => $this->semStack[$stackPos-(7-7)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes); + }, + 152 => function ($stackPos) { + $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(9-3)], $this->semStack[$stackPos-(9-7)][0], ['keyVar' => $this->semStack[$stackPos-(9-5)], 'byRef' => $this->semStack[$stackPos-(9-7)][1], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes); + }, + 153 => function ($stackPos) { + $this->semValue = new Stmt\Declare_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes); + }, + 154 => function ($stackPos) { + $this->semValue = new Stmt\TryCatch($this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-5)], $this->semStack[$stackPos-(6-6)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); $this->checkTryCatch($this->semValue); + }, + 155 => function ($stackPos) { + $this->semValue = new Stmt\Throw_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 156 => function ($stackPos) { + $this->semValue = new Stmt\Goto_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 157 => function ($stackPos) { + $this->semValue = new Stmt\Label($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 158 => function ($stackPos) { + $this->semValue = new Stmt\Expression($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 159 => function ($stackPos) { + $this->semValue = array(); /* means: no statement */ + }, + 160 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 161 => function ($stackPos) { + $startAttributes = $this->startAttributeStack[$stackPos-(1-1)]; if (isset($startAttributes['comments'])) { $this->semValue = new Stmt\Nop($startAttributes + $this->endAttributes); } else { $this->semValue = null; }; + if ($this->semValue === null) $this->semValue = array(); /* means: no statement */ + }, + 162 => function ($stackPos) { + $this->semValue = array(); + }, + 163 => function ($stackPos) { + $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 164 => function ($stackPos) { + $this->semValue = new Stmt\Catch_(array($this->semStack[$stackPos-(8-3)]), $this->semStack[$stackPos-(8-4)], $this->semStack[$stackPos-(8-7)], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes); + }, + 165 => function ($stackPos) { + $this->semValue = null; + }, + 166 => function ($stackPos) { + $this->semValue = new Stmt\Finally_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 167 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 168 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 169 => function ($stackPos) { + $this->semValue = false; + }, + 170 => function ($stackPos) { + $this->semValue = true; + }, + 171 => function ($stackPos) { + $this->semValue = false; + }, + 172 => function ($stackPos) { + $this->semValue = true; + }, + 173 => function ($stackPos) { + $this->semValue = new Stmt\Function_($this->semStack[$stackPos-(10-3)], ['byRef' => $this->semStack[$stackPos-(10-2)], 'params' => $this->semStack[$stackPos-(10-5)], 'returnType' => $this->semStack[$stackPos-(10-7)], 'stmts' => $this->semStack[$stackPos-(10-9)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes); + }, + 174 => function ($stackPos) { + $this->semValue = new Stmt\Class_($this->semStack[$stackPos-(7-2)], ['type' => $this->semStack[$stackPos-(7-1)], 'extends' => $this->semStack[$stackPos-(7-3)], 'implements' => $this->semStack[$stackPos-(7-4)], 'stmts' => $this->semStack[$stackPos-(7-6)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes); + $this->checkClass($this->semValue, $stackPos-(7-2)); + }, + 175 => function ($stackPos) { + $this->semValue = new Stmt\Interface_($this->semStack[$stackPos-(6-2)], ['extends' => $this->semStack[$stackPos-(6-3)], 'stmts' => $this->semStack[$stackPos-(6-5)]], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); + $this->checkInterface($this->semValue, $stackPos-(6-2)); + }, + 176 => function ($stackPos) { + $this->semValue = new Stmt\Trait_($this->semStack[$stackPos-(5-2)], ['stmts' => $this->semStack[$stackPos-(5-4)]], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes); + }, + 177 => function ($stackPos) { + $this->semValue = 0; + }, + 178 => function ($stackPos) { + $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT; + }, + 179 => function ($stackPos) { + $this->semValue = Stmt\Class_::MODIFIER_FINAL; + }, + 180 => function ($stackPos) { + $this->semValue = null; + }, + 181 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(2-2)]; + }, + 182 => function ($stackPos) { + $this->semValue = array(); + }, + 183 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(2-2)]; + }, + 184 => function ($stackPos) { + $this->semValue = array(); + }, + 185 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(2-2)]; + }, + 186 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 187 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 188 => function ($stackPos) { + $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]); + }, + 189 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(4-2)]; + }, + 190 => function ($stackPos) { + $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]); + }, + 191 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(4-2)]; + }, + 192 => function ($stackPos) { + $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]); + }, + 193 => function ($stackPos) { + $this->semValue = null; + }, + 194 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(4-2)]; + }, + 195 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 196 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 197 => function ($stackPos) { + $this->semValue = new Stmt\DeclareDeclare($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 198 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(3-2)]; + }, + 199 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(4-3)]; + }, + 200 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(4-2)]; + }, + 201 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(5-3)]; + }, + 202 => function ($stackPos) { + $this->semValue = array(); + }, + 203 => function ($stackPos) { + $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 204 => function ($stackPos) { + $this->semValue = new Stmt\Case_($this->semStack[$stackPos-(4-2)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 205 => function ($stackPos) { + $this->semValue = new Stmt\Case_(null, $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 206 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 207 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 208 => function ($stackPos) { + $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]); + }, + 209 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(4-2)]; + }, + 210 => function ($stackPos) { + $this->semValue = array(); + }, + 211 => function ($stackPos) { + $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 212 => function ($stackPos) { + $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(3-2)], is_array($this->semStack[$stackPos-(3-3)]) ? $this->semStack[$stackPos-(3-3)] : array($this->semStack[$stackPos-(3-3)]), $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 213 => function ($stackPos) { + $this->semValue = array(); + }, + 214 => function ($stackPos) { + $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 215 => function ($stackPos) { + $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(4-2)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 216 => function ($stackPos) { + $this->semValue = null; + }, + 217 => function ($stackPos) { + $this->semValue = new Stmt\Else_(is_array($this->semStack[$stackPos-(2-2)]) ? $this->semStack[$stackPos-(2-2)] : array($this->semStack[$stackPos-(2-2)]), $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 218 => function ($stackPos) { + $this->semValue = null; + }, + 219 => function ($stackPos) { + $this->semValue = new Stmt\Else_($this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 220 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)], false); + }, + 221 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(2-2)], true); + }, + 222 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)], false); + }, + 223 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 224 => function ($stackPos) { + $this->semValue = array(); + }, + 225 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 226 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 227 => function ($stackPos) { + $this->semValue = new Node\Param($this->semStack[$stackPos-(4-4)], null, $this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-2)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); $this->checkParam($this->semValue); + }, + 228 => function ($stackPos) { + $this->semValue = new Node\Param($this->semStack[$stackPos-(6-4)], $this->semStack[$stackPos-(6-6)], $this->semStack[$stackPos-(6-1)], $this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-3)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); $this->checkParam($this->semValue); + }, + 229 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 230 => function ($stackPos) { + $this->semValue = new Node\Identifier('array', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 231 => function ($stackPos) { + $this->semValue = new Node\Identifier('callable', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 232 => function ($stackPos) { + $this->semValue = null; + }, + 233 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 234 => function ($stackPos) { + $this->semValue = null; + }, + 235 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(2-2)]; + }, + 236 => function ($stackPos) { + $this->semValue = array(); + }, + 237 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(3-2)]; + }, + 238 => function ($stackPos) { + $this->semValue = array(new Node\Arg($this->semStack[$stackPos-(3-2)], false, false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes)); + }, + 239 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 240 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 241 => function ($stackPos) { + $this->semValue = new Node\Arg($this->semStack[$stackPos-(1-1)], false, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 242 => function ($stackPos) { + $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], true, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 243 => function ($stackPos) { + $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], false, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 244 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 245 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 246 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 247 => function ($stackPos) { + $this->semValue = new Expr\Variable($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 248 => function ($stackPos) { + $this->semValue = new Expr\Variable($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 249 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 250 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 251 => function ($stackPos) { + $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 252 => function ($stackPos) { + $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 253 => function ($stackPos) { + if ($this->semStack[$stackPos-(2-2)] !== null) { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; } + }, + 254 => function ($stackPos) { + $this->semValue = array(); + }, + 255 => function ($stackPos) { + $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; }; + if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 256 => function ($stackPos) { + $this->semValue = new Stmt\Property($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->checkProperty($this->semValue, $stackPos-(3-1)); + }, + 257 => function ($stackPos) { + $this->semValue = new Stmt\ClassConst($this->semStack[$stackPos-(3-2)], 0, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 258 => function ($stackPos) { + $this->semValue = new Stmt\ClassMethod($this->semStack[$stackPos-(9-4)], ['type' => $this->semStack[$stackPos-(9-1)], 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-6)], 'returnType' => $this->semStack[$stackPos-(9-8)], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes); + $this->checkClassMethod($this->semValue, $stackPos-(9-1)); + }, + 259 => function ($stackPos) { + $this->semValue = new Stmt\TraitUse($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 260 => function ($stackPos) { + $this->semValue = array(); + }, + 261 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(3-2)]; + }, + 262 => function ($stackPos) { + $this->semValue = array(); + }, + 263 => function ($stackPos) { + $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 264 => function ($stackPos) { + $this->semValue = new Stmt\TraitUseAdaptation\Precedence($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 265 => function ($stackPos) { + $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(5-1)][0], $this->semStack[$stackPos-(5-1)][1], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes); + }, + 266 => function ($stackPos) { + $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], $this->semStack[$stackPos-(4-3)], null, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 267 => function ($stackPos) { + $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 268 => function ($stackPos) { + $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 269 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]); + }, + 270 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 271 => function ($stackPos) { + $this->semValue = array(null, $this->semStack[$stackPos-(1-1)]); + }, + 272 => function ($stackPos) { + $this->semValue = null; + }, + 273 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(3-2)]; + }, + 274 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 275 => function ($stackPos) { + $this->semValue = 0; + }, + 276 => function ($stackPos) { + $this->semValue = 0; + }, + 277 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 278 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 279 => function ($stackPos) { + $this->checkModifier($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $this->semValue = $this->semStack[$stackPos-(2-1)] | $this->semStack[$stackPos-(2-2)]; + }, + 280 => function ($stackPos) { + $this->semValue = Stmt\Class_::MODIFIER_PUBLIC; + }, + 281 => function ($stackPos) { + $this->semValue = Stmt\Class_::MODIFIER_PROTECTED; + }, + 282 => function ($stackPos) { + $this->semValue = Stmt\Class_::MODIFIER_PRIVATE; + }, + 283 => function ($stackPos) { + $this->semValue = Stmt\Class_::MODIFIER_STATIC; + }, + 284 => function ($stackPos) { + $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT; + }, + 285 => function ($stackPos) { + $this->semValue = Stmt\Class_::MODIFIER_FINAL; + }, + 286 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 287 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 288 => function ($stackPos) { + $this->semValue = new Node\VarLikeIdentifier(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 289 => function ($stackPos) { + $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 290 => function ($stackPos) { + $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 291 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 292 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 293 => function ($stackPos) { + $this->semValue = array(); + }, + 294 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 295 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 296 => function ($stackPos) { + $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 297 => function ($stackPos) { + $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 298 => function ($stackPos) { + $this->semValue = new Expr\AssignRef($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 299 => function ($stackPos) { + $this->semValue = new Expr\AssignRef($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 300 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 301 => function ($stackPos) { + $this->semValue = new Expr\Clone_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 302 => function ($stackPos) { + $this->semValue = new Expr\AssignOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 303 => function ($stackPos) { + $this->semValue = new Expr\AssignOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 304 => function ($stackPos) { + $this->semValue = new Expr\AssignOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 305 => function ($stackPos) { + $this->semValue = new Expr\AssignOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 306 => function ($stackPos) { + $this->semValue = new Expr\AssignOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 307 => function ($stackPos) { + $this->semValue = new Expr\AssignOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 308 => function ($stackPos) { + $this->semValue = new Expr\AssignOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 309 => function ($stackPos) { + $this->semValue = new Expr\AssignOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 310 => function ($stackPos) { + $this->semValue = new Expr\AssignOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 311 => function ($stackPos) { + $this->semValue = new Expr\AssignOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 312 => function ($stackPos) { + $this->semValue = new Expr\AssignOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 313 => function ($stackPos) { + $this->semValue = new Expr\AssignOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 314 => function ($stackPos) { + $this->semValue = new Expr\AssignOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 315 => function ($stackPos) { + $this->semValue = new Expr\PostInc($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 316 => function ($stackPos) { + $this->semValue = new Expr\PreInc($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 317 => function ($stackPos) { + $this->semValue = new Expr\PostDec($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 318 => function ($stackPos) { + $this->semValue = new Expr\PreDec($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 319 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 320 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 321 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 322 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 323 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 324 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 325 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 326 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 327 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 328 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 329 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 330 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 331 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 332 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 333 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 334 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 335 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 336 => function ($stackPos) { + $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 337 => function ($stackPos) { + $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 338 => function ($stackPos) { + $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 339 => function ($stackPos) { + $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 340 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 341 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 342 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 343 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 344 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Spaceship($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 345 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 346 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 347 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 348 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 349 => function ($stackPos) { + $this->semValue = new Expr\Instanceof_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 350 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 351 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(3-2)]; + }, + 352 => function ($stackPos) { + $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(5-1)], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes); + }, + 353 => function ($stackPos) { + $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(4-1)], null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 354 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 355 => function ($stackPos) { + $this->semValue = new Expr\Isset_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 356 => function ($stackPos) { + $this->semValue = new Expr\Empty_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 357 => function ($stackPos) { + $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 358 => function ($stackPos) { + $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 359 => function ($stackPos) { + $this->semValue = new Expr\Eval_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 360 => function ($stackPos) { + $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 361 => function ($stackPos) { + $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 362 => function ($stackPos) { + $this->semValue = new Expr\Cast\Int_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 363 => function ($stackPos) { + $attrs = $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes; + $attrs['kind'] = $this->getFloatCastKind($this->semStack[$stackPos-(2-1)]); + $this->semValue = new Expr\Cast\Double($this->semStack[$stackPos-(2-2)], $attrs); + }, + 364 => function ($stackPos) { + $this->semValue = new Expr\Cast\String_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 365 => function ($stackPos) { + $this->semValue = new Expr\Cast\Array_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 366 => function ($stackPos) { + $this->semValue = new Expr\Cast\Object_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 367 => function ($stackPos) { + $this->semValue = new Expr\Cast\Bool_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 368 => function ($stackPos) { + $this->semValue = new Expr\Cast\Unset_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 369 => function ($stackPos) { + $attrs = $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes; + $attrs['kind'] = strtolower($this->semStack[$stackPos-(2-1)]) === 'exit' ? Expr\Exit_::KIND_EXIT : Expr\Exit_::KIND_DIE; + $this->semValue = new Expr\Exit_($this->semStack[$stackPos-(2-2)], $attrs); + }, + 370 => function ($stackPos) { + $this->semValue = new Expr\ErrorSuppress($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 371 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 372 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 373 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 374 => function ($stackPos) { + $this->semValue = new Expr\ShellExec($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 375 => function ($stackPos) { + $this->semValue = new Expr\Print_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 376 => function ($stackPos) { + $this->semValue = new Expr\Yield_(null, null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 377 => function ($stackPos) { + $this->semValue = new Expr\YieldFrom($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 378 => function ($stackPos) { + $this->semValue = new Expr\Closure(['static' => false, 'byRef' => $this->semStack[$stackPos-(10-2)], 'params' => $this->semStack[$stackPos-(10-4)], 'uses' => $this->semStack[$stackPos-(10-6)], 'returnType' => $this->semStack[$stackPos-(10-7)], 'stmts' => $this->semStack[$stackPos-(10-9)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes); + }, + 379 => function ($stackPos) { + $this->semValue = new Expr\Closure(['static' => true, 'byRef' => $this->semStack[$stackPos-(11-3)], 'params' => $this->semStack[$stackPos-(11-5)], 'uses' => $this->semStack[$stackPos-(11-7)], 'returnType' => $this->semStack[$stackPos-(11-8)], 'stmts' => $this->semStack[$stackPos-(11-10)]], $this->startAttributeStack[$stackPos-(11-1)] + $this->endAttributes); + }, + 380 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(3-2)]; + }, + 381 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(3-2)]; + }, + 382 => function ($stackPos) { + $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(2-2)], null, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 383 => function ($stackPos) { + $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 384 => function ($stackPos) { + $attrs = $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes; $attrs['kind'] = Expr\Array_::KIND_LONG; + $this->semValue = new Expr\Array_($this->semStack[$stackPos-(4-3)], $attrs); + }, + 385 => function ($stackPos) { + $attrs = $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes; $attrs['kind'] = Expr\Array_::KIND_SHORT; + $this->semValue = new Expr\Array_($this->semStack[$stackPos-(3-2)], $attrs); + }, + 386 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 387 => function ($stackPos) { + $attrs = $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes; $attrs['kind'] = ($this->semStack[$stackPos-(4-1)][0] === "'" || ($this->semStack[$stackPos-(4-1)][1] === "'" && ($this->semStack[$stackPos-(4-1)][0] === 'b' || $this->semStack[$stackPos-(4-1)][0] === 'B')) ? Scalar\String_::KIND_SINGLE_QUOTED : Scalar\String_::KIND_DOUBLE_QUOTED); + $this->semValue = new Expr\ArrayDimFetch(new Scalar\String_(Scalar\String_::parse($this->semStack[$stackPos-(4-1)]), $attrs), $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 388 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 389 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 390 => function ($stackPos) { + $this->semValue = array(new Stmt\Class_(null, ['type' => 0, 'extends' => $this->semStack[$stackPos-(7-3)], 'implements' => $this->semStack[$stackPos-(7-4)], 'stmts' => $this->semStack[$stackPos-(7-6)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes), $this->semStack[$stackPos-(7-2)]); + $this->checkClass($this->semValue[0], -1); + }, + 391 => function ($stackPos) { + $this->semValue = new Expr\New_($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 392 => function ($stackPos) { + list($class, $ctorArgs) = $this->semStack[$stackPos-(2-2)]; $this->semValue = new Expr\New_($class, $ctorArgs, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 393 => function ($stackPos) { + $this->semValue = array(); + }, + 394 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(4-3)]; + }, + 395 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 396 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 397 => function ($stackPos) { + $this->semValue = new Expr\ClosureUse($this->semStack[$stackPos-(2-2)], $this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 398 => function ($stackPos) { + $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 399 => function ($stackPos) { + $this->semValue = new Expr\StaticCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 400 => function ($stackPos) { + $this->semValue = new Expr\StaticCall($this->semStack[$stackPos-(6-1)], $this->semStack[$stackPos-(6-4)], $this->semStack[$stackPos-(6-6)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); + }, + 401 => function ($stackPos) { + $this->semValue = $this->fixupPhp5StaticPropCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 402 => function ($stackPos) { + $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 403 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 404 => function ($stackPos) { + $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 405 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 406 => function ($stackPos) { + $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 407 => function ($stackPos) { + $this->semValue = new Name\FullyQualified($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 408 => function ($stackPos) { + $this->semValue = new Name\Relative($this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 409 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 410 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 411 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 412 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 413 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 414 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 415 => function ($stackPos) { + $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 416 => function ($stackPos) { + $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 417 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 418 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 419 => function ($stackPos) { + $this->semValue = null; + }, + 420 => function ($stackPos) { + $this->semValue = null; + }, + 421 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 422 => function ($stackPos) { + $this->semValue = array(); + }, + 423 => function ($stackPos) { + $this->semValue = array(new Scalar\EncapsedStringPart(Scalar\String_::parseEscapeSequences($this->semStack[$stackPos-(1-1)], '`', false), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes)); + }, + 424 => function ($stackPos) { + foreach ($this->semStack[$stackPos-(1-1)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', false); } }; $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 425 => function ($stackPos) { + $this->semValue = array(); + }, + 426 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 427 => function ($stackPos) { + $this->semValue = $this->parseLNumber($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes, true); + }, + 428 => function ($stackPos) { + $this->semValue = new Scalar\DNumber(Scalar\DNumber::parse($this->semStack[$stackPos-(1-1)]), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 429 => function ($stackPos) { + $attrs = $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes; $attrs['kind'] = ($this->semStack[$stackPos-(1-1)][0] === "'" || ($this->semStack[$stackPos-(1-1)][1] === "'" && ($this->semStack[$stackPos-(1-1)][0] === 'b' || $this->semStack[$stackPos-(1-1)][0] === 'B')) ? Scalar\String_::KIND_SINGLE_QUOTED : Scalar\String_::KIND_DOUBLE_QUOTED); + $this->semValue = new Scalar\String_(Scalar\String_::parse($this->semStack[$stackPos-(1-1)], false), $attrs); + }, + 430 => function ($stackPos) { + $this->semValue = new Scalar\MagicConst\Line($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 431 => function ($stackPos) { + $this->semValue = new Scalar\MagicConst\File($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 432 => function ($stackPos) { + $this->semValue = new Scalar\MagicConst\Dir($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 433 => function ($stackPos) { + $this->semValue = new Scalar\MagicConst\Class_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 434 => function ($stackPos) { + $this->semValue = new Scalar\MagicConst\Trait_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 435 => function ($stackPos) { + $this->semValue = new Scalar\MagicConst\Method($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 436 => function ($stackPos) { + $this->semValue = new Scalar\MagicConst\Function_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 437 => function ($stackPos) { + $this->semValue = new Scalar\MagicConst\Namespace_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 438 => function ($stackPos) { + $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], false); + }, + 439 => function ($stackPos) { + $this->semValue = $this->parseDocString($this->semStack[$stackPos-(2-1)], '', $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(2-2)] + $this->endAttributeStack[$stackPos-(2-2)], false); + }, + 440 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 441 => function ($stackPos) { + $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 442 => function ($stackPos) { + $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 443 => function ($stackPos) { + $this->semValue = new Expr\Array_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 444 => function ($stackPos) { + $this->semValue = new Expr\Array_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 445 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 446 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 447 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 448 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 449 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 450 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 451 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 452 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 453 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 454 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 455 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 456 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 457 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 458 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 459 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 460 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 461 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 462 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 463 => function ($stackPos) { + $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 464 => function ($stackPos) { + $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 465 => function ($stackPos) { + $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 466 => function ($stackPos) { + $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 467 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 468 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 469 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 470 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 471 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 472 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 473 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 474 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 475 => function ($stackPos) { + $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(5-1)], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes); + }, + 476 => function ($stackPos) { + $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(4-1)], null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 477 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 478 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(3-2)]; + }, + 479 => function ($stackPos) { + $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 480 => function ($stackPos) { + $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 481 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 482 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 483 => function ($stackPos) { + $attrs = $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes; $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED; + foreach ($this->semStack[$stackPos-(3-2)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', true); } }; $this->semValue = new Scalar\Encapsed($this->semStack[$stackPos-(3-2)], $attrs); + }, + 484 => function ($stackPos) { + $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], true); + }, + 485 => function ($stackPos) { + $this->semValue = array(); + }, + 486 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 487 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 488 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 489 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 490 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 491 => function ($stackPos) { + $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 492 => function ($stackPos) { + $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 493 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 494 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 495 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 496 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 497 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); + }, + 498 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 499 => function ($stackPos) { + $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 500 => function ($stackPos) { + $this->semValue = new Expr\MethodCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 501 => function ($stackPos) { + $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 502 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 503 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 504 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 505 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(3-2)]; + }, + 506 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 507 => function ($stackPos) { + $this->semValue = new Expr\Variable($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 508 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 509 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 510 => function ($stackPos) { + $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 511 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 512 => function ($stackPos) { + $var = substr($this->semStack[$stackPos-(1-1)], 1); $this->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes) : $var; + }, + 513 => function ($stackPos) { + $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 514 => function ($stackPos) { + $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(6-1)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); + }, + 515 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 516 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 517 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 518 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 519 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 520 => function ($stackPos) { + $this->semValue = new Expr\Variable($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 521 => function ($stackPos) { + $this->semValue = null; + }, + 522 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 523 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 524 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(3-2)]; + }, + 525 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 526 => function ($stackPos) { + $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2; + }, + 527 => function ($stackPos) { + $this->semValue = new Expr\List_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 528 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 529 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 530 => function ($stackPos) { + $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 531 => function ($stackPos) { + $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 532 => function ($stackPos) { + $this->semValue = null; + }, + 533 => function ($stackPos) { + $this->semValue = array(); + }, + 534 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 535 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 536 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 537 => function ($stackPos) { + $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 538 => function ($stackPos) { + $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 539 => function ($stackPos) { + $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-1)], true, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 540 => function ($stackPos) { + $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 541 => function ($stackPos) { + $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 542 => function ($stackPos) { + $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 543 => function ($stackPos) { + $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 544 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 545 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]); + }, + 546 => function ($stackPos) { + $this->semValue = new Scalar\EncapsedStringPart($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 547 => function ($stackPos) { + $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 548 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 549 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 550 => function ($stackPos) { + $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 551 => function ($stackPos) { + $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 552 => function ($stackPos) { + $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 553 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-4)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); + }, + 554 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(3-2)]; + }, + 555 => function ($stackPos) { + $this->semValue = new Scalar\String_($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 556 => function ($stackPos) { + $this->semValue = $this->parseNumString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 557 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + ]; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php new file mode 100644 index 0000000..db988a4 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php @@ -0,0 +1,2472 @@ +'", + "T_IS_GREATER_OR_EQUAL", + "T_SL", + "T_SR", + "'+'", + "'-'", + "'.'", + "'*'", + "'/'", + "'%'", + "'!'", + "T_INSTANCEOF", + "'~'", + "T_INC", + "T_DEC", + "T_INT_CAST", + "T_DOUBLE_CAST", + "T_STRING_CAST", + "T_ARRAY_CAST", + "T_OBJECT_CAST", + "T_BOOL_CAST", + "T_UNSET_CAST", + "'@'", + "T_POW", + "'['", + "T_NEW", + "T_CLONE", + "T_EXIT", + "T_IF", + "T_ELSEIF", + "T_ELSE", + "T_ENDIF", + "T_LNUMBER", + "T_DNUMBER", + "T_STRING", + "T_STRING_VARNAME", + "T_VARIABLE", + "T_NUM_STRING", + "T_INLINE_HTML", + "T_ENCAPSED_AND_WHITESPACE", + "T_CONSTANT_ENCAPSED_STRING", + "T_ECHO", + "T_DO", + "T_WHILE", + "T_ENDWHILE", + "T_FOR", + "T_ENDFOR", + "T_FOREACH", + "T_ENDFOREACH", + "T_DECLARE", + "T_ENDDECLARE", + "T_AS", + "T_SWITCH", + "T_ENDSWITCH", + "T_CASE", + "T_DEFAULT", + "T_BREAK", + "T_CONTINUE", + "T_GOTO", + "T_FUNCTION", + "T_FN", + "T_CONST", + "T_RETURN", + "T_TRY", + "T_CATCH", + "T_FINALLY", + "T_THROW", + "T_USE", + "T_INSTEADOF", + "T_GLOBAL", + "T_STATIC", + "T_ABSTRACT", + "T_FINAL", + "T_PRIVATE", + "T_PROTECTED", + "T_PUBLIC", + "T_VAR", + "T_UNSET", + "T_ISSET", + "T_EMPTY", + "T_HALT_COMPILER", + "T_CLASS", + "T_TRAIT", + "T_INTERFACE", + "T_EXTENDS", + "T_IMPLEMENTS", + "T_OBJECT_OPERATOR", + "T_LIST", + "T_ARRAY", + "T_CALLABLE", + "T_CLASS_C", + "T_TRAIT_C", + "T_METHOD_C", + "T_FUNC_C", + "T_LINE", + "T_FILE", + "T_START_HEREDOC", + "T_END_HEREDOC", + "T_DOLLAR_OPEN_CURLY_BRACES", + "T_CURLY_OPEN", + "T_PAAMAYIM_NEKUDOTAYIM", + "T_NAMESPACE", + "T_NS_C", + "T_DIR", + "T_NS_SEPARATOR", + "T_ELLIPSIS", + "';'", + "'{'", + "'}'", + "'('", + "')'", + "'`'", + "']'", + "'\"'", + "'$'" + ); + + protected $tokenToSymbol = array( + 0, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 54, 157, 159, 158, 53, 36, 159, + 153, 154, 51, 48, 7, 49, 50, 52, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 30, 150, + 42, 15, 44, 29, 66, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 68, 159, 156, 35, 159, 155, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 151, 34, 152, 56, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 1, 2, 3, 4, + 5, 6, 8, 9, 10, 11, 12, 13, 14, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 31, 32, 33, 37, 38, 39, 40, 41, + 43, 45, 46, 47, 55, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 67, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 159, + 159, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 159, 159, + 159, 159, 159, 159, 140, 141, 142, 143, 144, 145, + 146, 147, 148, 149 + ); + + protected $action = array( + 606, 607, 608, 609, 610, 1083, 611, 612, 613, 649, + 650,-32766,-32766,-32766,-32767,-32767,-32767,-32767, 94, 95, + 96, 97, 98, 684,-32766,-32766,-32766, -219, -219, -219, + -32766,-32766,-32766, 368,-32766,-32766,-32766,-32766,-32766,-32766, + -32767,-32767,-32767,-32767,-32767, 428, 429, 906, 907, 908, + 905, 904, 903, 614, 742, 790, 370, 371, 845, 906, + 907, 908, 905, 904, 903, -263, 0, 615, 616, 617, + 618, 619, 620, 621, 9, 400, 682, 96, 97, 98, + 769, 28, -219, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 631, 632, 652, 653, 654, 655, 656, 644, + 645, 646, 674, 647, 648, 633, 634, 635, 636, 637, + 638, 639, 676, 677, 678, 679, 680, 681, 640, 641, + 642, 643, 673, 664, 662, 663, 659, 660, 275, 651, + 657, 658, 665, 666, 668, 667, 669, 670, 785, 76, + 77, 78, -178, 661, 672, 671, 767, 44, 45, 419, + 46, 47, 691, 257, 1047, 75, 48, 49, 1027, 50, + 30, 257, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 1098, 239,-32766,-32766,-32766, + 391, 257, 119, 51, 52, 1027, 401, 821, 102, 53, + 121, 54, 218, 219, 55, 56, 57, 58, 59, 60, + 61, 62, -263, 24, 238, 63, 366, 420,-32766,-32766, + -32766, 1053, 1054, 421, 707, 1080, 708, 756,-32766, 1051, + 36, 20, 422, 1080, 423, 130, 424, 1080, 425,-32766, + 225, 426, 581, -177, 249, 38, 39, 367, 375, 369, + 582, 40, 427, 213, 274, 64, 850, 851, 303, 288, + 534, 21, 684, 223, 850, 851, 430, 431, 432, 355, + 384, 1019, 1080, 577, 1080, 583, 433, 434, -239, 1041, + 1042, 1043, 1044, 1038, 1039, 252, -92,-32766, 588, -178, + 442, 1045, 1040, 372, 850, 851, 575, 287, 65,-32766, + 266, 690, 271, 276, 126, 686, 304, 882, 1019,-32766, + 69, 276,-32766,-32766,-32766, 276,-32766, 822,-32766, 360, + -32766, -464, 220,-32766, -299, 307, -299,-32766,-32766,-32766, + -32766,-32766,-32766,-32766,-32766, 127, -463,-32766, 686,-32766, + -32766, 334,-32766,-32766,-32766, 465, 311, 69,-32766, 359, + 276,-32766, 276,-32766,-32766,-32766,-32766,-32766,-32766, 586, + -465, 858, 769,-32766, 686,-32766,-32766,-32766,-32766, 362, + 769,-32766,-32766,-32766, 223,-32766, 125,-32766,-32766,-32766, + 560, 859,-32766, -464, 590,-32766,-32766,-32766,-32766, 257, + -177, -467,-32766,-32766, -234, 807,-32766, -464, -463,-32766, + 334, 507, 363, 1059, -464, 442, -470,-32766, 372, -298, + -32766, -298, -463, 500, 549, 550, 686, 269, 364, -463, + -32766, -469, -465,-32766,-32766,-32766, 898,-32766, 365,-32766, + 1126,-32766,-32766, 1127,-32766, 68, -465,-32766,-32766,-32766, + -32766, 133, 329, -465,-32766,-32766, 42, 561,-32766, 1102, + 372,-32766, 334, -467, 884, 1101,-32766,-32766, -276,-32766, + 380, 381, 686, 488, 134,-32766,-32766, 222, 137,-32766, + -32766,-32766, 116,-32766, -467,-32766, 32,-32766, -462, 769, + -32766, -499, 117, -499,-32766,-32766,-32766, 125, 122,-32766, + -32766,-32766, 850, 851,-32766, 123, 43,-32766, 334, 411, + 224, 8, 129,-32766, 769,-32766, 136, 212, 255, 686, + 99, 100, 101,-32766, 239, 138,-32766,-32766,-32766,-32766, + -32766, 707,-32766, 708,-32766, 689, 102,-32766, 1117, 118, + 139,-32766,-32766,-32766, -83,-32766,-32766,-32766,-32766, 250, + -462,-32766, 686, 589,-32766, 334,-32766, 592, 124,-32766, + -32766,-32766,-32766,-32766, -462,-32766, 766,-32766, 256,-32766, + -32766, -462, 527, 528,-32766,-32766,-32766, 850, 851, 132, + -32766,-32766, 306, 781,-32766, 883, 598,-32766, 334, 120, + 258, 259,-32766, 292, 239,-32766, 102, 29, 221, 131, + -32766, 557, 686, 1128,-32766, 474, 686, 569, 684, 540, + -32766, 687, 689,-32766,-32766,-32766, 525,-32766, 912,-32766, + 469,-32766, 535, 270,-32766,-32766, 1019, 552,-32766,-32766, + -32766, 791, 792, 268,-32766,-32766, -81, 10,-32766, 226, + -32766,-32766, 334, 388, 267, 783, 686, 541, 553,-32766, + -32766, 337, -428,-32766,-32766,-32766, -237,-32766, 0,-32766, + 576,-32766, 0, 34,-32766, 0, 0, 0,-32766,-32766, + -32766, 24, 273, -493,-32766,-32766, 0, 0,-32766,-32766, + 0,-32766, 334, 1080, 1058, 0, 1060, 1051, 342,-32766, + 31, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, -419, 5, 24, -4, 12, 305, + 343, 346, -235, 0, 384, 471, 0, 1019, 1080,-32766, + 356, 357, 1051,-32766,-32766,-32766, 35, 596, 597, 747, + 824, 808, 941, 943, 433, 434, 815, 1041, 1042, 1043, + 1044, 1038, 1039, -462,-32766, 878,-32766,-32766, 879, 1045, + 1040, 805, 1019, 578, 816, 745, 67,-32766,-32766,-32766, + 271, 276, 803, 887, 890, 891, 888, 889, 769, 895, + 434, 580, 1041, 1042, 1043, 1044, 1038, 1039,-32766, 584, + -32766,-32766,-32766,-32766, 1045, 1040, 585, -137, -137, -137, + 587, 67, 591, 285, 286, 271, 276, 349, 350, 579, + -432, 593, -137, 743, -137, -462, -137, 1123, -137, 1125, + 368, 702, 351, 789, 701, 711, 788, 368, 265, -462, + 712, 709, 428, 429, 1124, 787, -462, -491, 1007, 428, + 429, 699, 790, 370, 371, 710, 776, 784, 742, 790, + 370, 371, -218, -218, -218, 774, 813, 814, 368, 1122, + 1081, 1074, 290,-32766,-32766,-32766, 1088, 769, 1093, -4, + 428, 429, 1096, -234, 769, -470, -137, 14, 1052, 742, + 790, 370, 371, -469,-32766, -468,-32766,-32766,-32766,-32766, + -32766,-32766, 23, 25, 26, 33, 37, 41, 66, 70, + 71, 72, 73, 74, 128, 769, 135, -218, 15, 140, + 217, 243, 0, 244, 245, 246, 247, 248, 289, 352, + 354, 0, 16, 17, 19, 326, 402, 404, 407, 409, + 410, 417, 566, 1031, 980, 1049, 860, 1011, -92, 13, + 18, 22, 261, 325, 497, 521, 568, 984, 1026, 981, + 1099, 0, 997, 0, 1048, 1073, 1087, 1120, 531 + ); + + protected $actionCheck = array( + 2, 3, 4, 5, 6, 1, 8, 9, 10, 11, + 12, 8, 9, 10, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 78, 8, 9, 10, 97, 98, 99, + 8, 9, 29, 103, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 115, 116, 114, 115, 116, + 117, 118, 119, 55, 124, 125, 126, 127, 1, 114, + 115, 116, 117, 118, 119, 7, 0, 69, 70, 71, + 72, 73, 74, 75, 7, 30, 78, 48, 49, 50, + 150, 7, 152, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 68, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 1, 8, + 9, 10, 7, 145, 146, 147, 1, 2, 3, 4, + 5, 6, 1, 29, 1, 151, 11, 12, 1, 14, + 29, 29, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 1, 55, 8, 9, 10, + 130, 29, 13, 48, 49, 1, 151, 30, 67, 54, + 7, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 154, 68, 69, 70, 71, 72, 8, 9, + 10, 76, 77, 78, 103, 80, 105, 82, 1, 84, + 85, 86, 87, 80, 89, 7, 91, 80, 93, 29, + 7, 96, 30, 7, 7, 100, 101, 102, 103, 104, + 30, 106, 107, 13, 7, 110, 132, 133, 113, 114, + 73, 74, 78, 36, 132, 133, 121, 122, 123, 148, + 148, 114, 80, 151, 80, 30, 131, 132, 154, 134, + 135, 136, 137, 138, 139, 140, 154, 1, 151, 154, + 145, 146, 147, 148, 132, 133, 151, 7, 153, 72, + 155, 150, 157, 158, 151, 78, 7, 1, 114, 82, + 153, 158, 85, 86, 87, 158, 89, 150, 91, 125, + 93, 68, 36, 96, 103, 7, 105, 100, 101, 102, + 8, 9, 10, 106, 107, 151, 68, 110, 78, 1, + 113, 114, 8, 9, 10, 83, 7, 153, 121, 7, + 158, 29, 158, 31, 32, 33, 34, 35, 72, 30, + 68, 1, 150, 29, 78, 31, 32, 33, 82, 7, + 150, 85, 86, 87, 36, 89, 149, 91, 151, 93, + 78, 154, 96, 130, 30, 1, 100, 101, 102, 29, + 154, 68, 106, 107, 154, 150, 110, 144, 130, 113, + 114, 49, 7, 141, 151, 145, 153, 121, 148, 103, + 72, 105, 144, 1, 73, 74, 78, 111, 7, 151, + 82, 153, 130, 85, 86, 87, 120, 89, 7, 91, + 78, 93, 1, 81, 96, 149, 144, 151, 100, 101, + 102, 98, 99, 151, 106, 107, 68, 145, 110, 1, + 148, 113, 114, 130, 152, 7, 72, 8, 152, 121, + 103, 104, 78, 79, 13, 1, 82, 36, 13, 85, + 86, 87, 15, 89, 151, 91, 13, 93, 68, 150, + 96, 154, 15, 156, 100, 101, 102, 149, 15, 151, + 106, 107, 132, 133, 110, 15, 68, 113, 114, 103, + 36, 105, 15, 72, 150, 121, 15, 95, 130, 78, + 51, 52, 53, 82, 55, 15, 85, 86, 87, 1, + 89, 103, 91, 105, 93, 80, 67, 96, 83, 151, + 15, 100, 101, 102, 30, 151, 72, 106, 107, 30, + 130, 110, 78, 30, 113, 114, 82, 30, 30, 85, + 86, 87, 121, 89, 144, 91, 30, 93, 130, 1, + 96, 151, 108, 109, 100, 101, 102, 132, 133, 30, + 106, 107, 144, 36, 110, 150, 151, 113, 114, 151, + 34, 34, 151, 34, 55, 121, 67, 142, 143, 68, + 72, 75, 78, 81, 83, 87, 78, 90, 78, 94, + 82, 78, 80, 85, 86, 87, 111, 89, 80, 91, + 83, 93, 88, 112, 96, 151, 114, 92, 100, 101, + 102, 125, 125, 129, 106, 107, 95, 95, 110, 36, + 72, 113, 114, 95, 128, 149, 78, 97, 97, 121, + 82, 148, 144, 85, 86, 87, 154, 89, -1, 91, + 151, 93, -1, 150, 96, -1, -1, -1, 100, 101, + 102, 68, 128, 153, 106, 107, -1, -1, 110, 151, + -1, 113, 114, 80, 141, -1, 141, 84, 148, 121, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 144, 144, 68, 0, 144, 144, + 148, 148, 154, -1, 148, 148, -1, 114, 80, 151, + 148, 148, 84, 8, 9, 10, 150, 150, 150, 150, + 150, 150, 57, 58, 131, 132, 150, 134, 135, 136, + 137, 138, 139, 68, 29, 150, 31, 32, 150, 146, + 147, 150, 114, 151, 150, 150, 153, 8, 9, 10, + 157, 158, 150, 150, 150, 150, 150, 150, 150, 150, + 132, 151, 134, 135, 136, 137, 138, 139, 29, 151, + 31, 32, 33, 34, 146, 147, 151, 73, 74, 75, + 151, 153, 151, 151, 151, 157, 158, 151, 151, 151, + 155, 152, 88, 152, 90, 130, 92, 152, 94, 152, + 103, 152, 105, 152, 152, 152, 152, 103, 111, 144, + 152, 152, 115, 116, 152, 152, 151, 153, 152, 115, + 116, 124, 125, 126, 127, 152, 152, 152, 124, 125, + 126, 127, 97, 98, 99, 152, 152, 152, 103, 152, + 152, 152, 145, 8, 9, 10, 152, 150, 152, 152, + 115, 116, 152, 154, 150, 153, 152, 154, 157, 124, + 125, 126, 127, 153, 29, 153, 31, 32, 33, 34, + 35, 36, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 150, 153, 152, 154, 153, + 153, 153, -1, 153, 153, 153, 153, 153, 153, 153, + 153, -1, 154, 154, 154, 154, 154, 154, 154, 154, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, + 154, -1, 155, -1, 156, 156, 156, 156, 156 + ); + + protected $actionBase = array( + 0, 704, 697, -70, 735, 153, 302, 607, -2, -2, + -55, -2, -2, 220, 329, 329, 354, 329, 212, 245, + 608, 608, 608, 227, 286, 286, 286, 286, 338, 384, + 518, 431, 464, 558, 558, 558, 558, 558, 558, 558, + 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, + 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, + 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, + 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, + 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, + 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, + 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, + 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, + 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, + 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, + 558, 151, 151, 167, 412, 463, 768, 773, 770, 774, + 766, 765, 769, 775, 687, 688, 539, 689, 694, 696, + 700, 771, 782, 767, 772, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 449, 179, 22, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 210, 210, 210, + 705, 334, 593, 593, 739, 665, 322, 628, 628, 628, + 628, 628, 628, 628, 628, 628, 628, 835, 3, 3, + 3, 3, 3, -28, -28, -28, -28, 306, 194, 157, + 221, 29, 29, 124, 124, 124, 124, 124, 124, 132, + 360, 162, 262, 535, 701, 184, 184, 435, 435, 435, + 253, 268, 459, 459, 459, 121, 527, 502, 502, 502, + 502, 445, 445, 502, 502, 352, 4, 327, 292, 410, + 410, 428, 410, 410, 410, 418, 418, 418, 357, 260, + 122, 511, 260, 609, 638, 776, 540, 684, 541, 685, + 323, 378, 562, 192, 563, 192, 192, 192, 454, 187, + 341, 764, 151, 550, 151, 151, 151, 151, 738, 151, + 151, 151, 151, 151, 151, 45, 151, 57, 425, 167, + 137, 137, 549, 137, 357, 529, 60, 632, 236, 529, + 529, 529, 633, 636, 58, 240, 637, 135, 396, 514, + 514, 520, 520, 528, 537, 514, 514, 514, 514, 514, + 719, 719, 520, 522, 520, 528, 724, 520, 537, 537, + 520, 520, 514, 520, 719, 537, 193, 362, 299, 318, + 537, 537, 395, 506, 514, 534, 534, 411, 520, 233, + 228, 520, 74, 494, 719, 719, 494, 237, 537, 247, + 567, 568, 495, 486, 509, 290, 509, 509, 342, 495, + 509, 537, 509, 421, 67, 522, 339, 509, 66, 725, + 726, 504, 727, 722, 728, 746, 729, 499, 496, 497, + 737, 723, 730, 721, 720, 526, 557, 457, 467, 551, + 498, 712, 556, 519, 519, 519, 702, 519, 519, 519, + 519, 519, 519, 519, 519, 457, 778, 555, 508, 740, + 473, 493, 538, 480, 592, 533, 557, 557, 641, 635, + 777, 523, 738, 759, 731, 503, 487, 750, 741, 639, + 530, 552, 742, 743, 751, 760, 610, 761, 645, 521, + 647, 557, 649, 519, 664, 510, 779, 710, 457, 780, + 703, 752, 546, 547, 753, 553, 651, 512, 781, 652, + 762, 618, 625, 566, 734, 492, 754, 653, 755, 756, + 654, 569, 524, 548, 505, 747, 451, 745, 629, 658, + 659, 662, 663, 666, 733, 570, 748, 525, 749, 699, + 571, 576, 491, 673, 455, 585, 500, 515, 588, 736, + 513, 516, 591, 594, 763, 674, 744, 595, 675, 758, + 531, 556, 554, 501, 532, 507, 631, 757, 517, 602, + 603, 604, 605, 683, 606, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 145, 145, 145, 145, -2, -2, -2, 0, + 0, -2, 0, 0, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 260, 260, 131, 0, 131, 260, 260, + 260, 260, 260, 260, 260, 260, 260, 260, 131, 131, + 131, 131, 131, 131, 459, 459, 459, 459, -67, 260, + 260, -67, 459, 459, 260, 260, 260, 260, 260, 260, + 260, 260, 260, 445, 445, 445, 192, 192, 260, 260, + 260, 0, 0, 0, 0, 0, 514, 445, 260, 260, + 260, 260, 0, 0, 260, 260, 522, 192, 448, 0, + 0, 0, 0, 0, 0, 0, 514, 514, 514, 522, + 0, 514, 445, 0, 137, 151, 448, 343, 343, 343, + 343, 0, 0, 514, 0, 514, 0, 0, 0, 0, + 0, 0, 537, 0, 719, 0, 0, 0, 0, 520, + 0, 0, 0, 0, 0, 0, 0, 0, 522, 0, + 0, 0, 0, 522, 0, 0, 519, 0, 523, 0, + 519, 519, 519, 523, 523, 0, 0, 523 + ); + + protected $actionDefault = array( + 3,32767,32767,32767,32767,32767,32767,32767,32767, 92, + 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767, 511, 511, 511, 511, 94,32767, + 32767,32767,32767, 318, 318, 318,32767,32767, 460, 460, + 460, 460, 460, 460,32767,32767,32767,32767,32767, 398, + 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 32767, 92,32767,32767,32767,32767,32767,32767,32767,32767, + 94,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767,32767, 504,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767,32767, 381, 382, 384, 385, 317, + 461, 510, 262, 507, 316, 130, 273, 264, 211, 243, + 313, 134, 346, 399, 348, 397, 401, 347, 323, 327, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 321, 322, 400, 402, 403, 378, 377, 376, + 344, 345,32767,32767, 349, 320, 351,32767,32767,32767, + 32767,32767,32767,32767,32767, 94,32767, 350, 367, 368, + 365, 366, 369, 370, 371, 372, 373,32767,32767,32767, + 296, 358, 359, 253, 253, 253, 253, 253, 253, 253, + 32767, 253,32767,32767,32767,32767,32767,32767,32767,32767, + 454, 375, 353, 354, 352,32767, 431,32767,32767,32767, + 32767,32767, 433,32767, 92,32767,32767,32767, 456, 341, + 343, 424, 505, 324, 508,32767,32767, 94, 418,32767, + 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 455,32767,32767,32767, 92,32767,32767, 92, 174, 230, + 232, 179,32767, 436,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767, 418, 363, 518,32767, 462, 355, + 356, 357,32767,32767, 462, 462,32767, 462,32767,32767, + 32767,32767,32767,32767, 179,32767,32767,32767,32767, 94, + 434, 434, 92, 92, 92, 92, 429,32767, 179, 179, + 32767,32767,32767,32767,32767, 179, 91, 91, 91, 91, + 179, 179, 91, 194,32767, 192, 192, 91,32767, 93, + 93,32767, 93, 196,32767, 478, 196, 91, 179, 91, + 216, 216, 409, 181, 255, 93, 255, 255, 93, 409, + 255, 179, 255, 91, 91,32767, 91, 255,32767,32767, + 32767, 85,32767,32767,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767, 420,32767, 449,32767, + 466, 476,32767, 361, 362, 364, 464, 386, 387, 388, + 389, 390, 391, 392, 394, 506,32767, 423,32767,32767, + 32767, 87, 121, 272,32767, 516, 87, 421,32767, 516, + 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 87, 87,32767,32767,32767,32767,32767,32767, 517,32767, + 462, 422,32767, 360, 445, 483,32767, 463, 509,32767, + 32767,32767, 245, 247,32767, 87,32767,32767,32767,32767, + 32767,32767,32767,32767,32767, 449,32767,32767,32767,32767, + 32767,32767,32767, 462,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767,32767,32767,32767, 462, + 32767,32767, 242,32767,32767,32767, 312,32767,32767,32767, + 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 85, 60,32767, 292,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767,32767, 136, 136, 3, 275, 3, + 275, 136, 136, 136, 275, 275, 136, 136, 136, 136, + 136, 136, 136, 169, 224, 227, 216, 216, 284, 136, + 136 + ); + + protected $goto = array( + 172, 145, 145, 145, 145, 172, 154, 156, 188, 173, + 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, + 170, 165, 166, 167, 168, 185, 183, 186, 443, 444, + 335, 445, 447, 448, 449, 450, 451, 452, 453, 454, + 927, 142, 146, 147, 148, 171, 149, 150, 151, 144, + 152, 153, 155, 182, 184, 187, 207, 210, 211, 214, + 216, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 241, 242, 262, 263, 264, 339, 340, 341, 493, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 157, 204, 158, 174, 175, + 176, 208, 177, 159, 160, 161, 178, 174, 162, 209, + 143, 205, 163, 179, 206, 180, 181, 164, 562, 461, + 571, 764, 345, 539, 1114, 1114, 1016, 338, 279, 280, + 282, 490, 283, 344, 284, 347, 523, 513, 536, 466, + 466, 466, 495, 1114, 466, 455, 455, 455, 455, 297, + 847, 852, 853, 498, 515, 515, 481, 697, 466, 1050, + 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1068, + 1068, 798, 328, 570, 1068, 1068, 1068, 1068, 1068, 1068, + 1068, 1068, 1068, 1068, 1066, 1066, 759, 1017, 760, 1066, + 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 494, + 894, 574, 698, 466, 466, 556, 892, 1018, 1076, 480, + 505, 466, 466, 466, 330, 331, 1005, 786, 544, 1006, + 333, 733, 446, 446, 724, 293, 467, 446, 446, 446, + 446, 446, 446, 446, 446, 446, 446, 479, 491, 492, + 272, 509, 595, 522, 524, 254, 685, 537, 555, 558, + 834, 565, 573, 830, 457, 457, 696, 1090, 1091, 901, + 520, 724, 902, 724, 532, 533, 806, 823, 804, 804, + 802, 804, 594, 700, 458, 832, 827, 316, 320, 473, + 496, 499, 487, 800, 800, 800, 800, 3, 4, 794, + 801, 705, 295, 755, 750, 751, 765, 1103, 706, 752, + 703, 753, 754, 704, 862, 758, 390, 314, 715, 715, + 1113, 1113, 538, 975, 725, 725, 725, 727, 714, 504, + 516, 518, 519, 567, 318, 459, 1129, 842, 916, 1113, + 510, 472, 857, 837, 837, 353, 482, 483, 302, 463, + 529, 1089, 720, 719, 298, 299, 713, 324, 1116, 294, + 1020, 1020, 717, 867, 403, 849, 849, 849, 849, 849, + 849, 849, 849, 849, 599, 1095, 1095, 11, 1013, 849, + 849, 849, 1008, 543, 729, 1086, 1086, 811, 542, 1020, + 1020, 1020, 1020, 559, 871, 1020, 1020, 396, 512, 911, + 412, 0, 1097, 1097, 0, 728, 716, 866, 0, 0, + 870, 772, 0, 0, 773, 809, 0, 0, 0, 0, + 0, 0, 0, 1082, 463, 839, 0, 799, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 478, 0, + 0, 909, 732, 0, 1012, 0, 0, 0, 0, 0, + 869, 0, 1084, 1084, 869, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 460, 476, 0, 0, 0, 1015, 0, 0, 0, + 0, 0, 460, 0, 476, 0, 0, 317, 0, 0, + 464, 383, 0, 385, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 723, 0, + 0, 1121 + ); + + protected $gotoCheck = array( + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 63, 10, + 8, 13, 56, 56, 150, 150, 93, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 46, 46, 10, + 10, 10, 98, 150, 10, 85, 85, 85, 85, 80, + 91, 91, 91, 85, 86, 86, 10, 17, 10, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 137, + 137, 76, 76, 76, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 138, 138, 55, 93, 55, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 7, + 7, 7, 18, 10, 10, 7, 7, 93, 93, 10, + 10, 10, 10, 10, 69, 69, 67, 67, 69, 67, + 69, 36, 140, 140, 26, 69, 10, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 39, 10, 2, + 136, 2, 39, 39, 39, 136, 5, 39, 39, 39, + 39, 39, 39, 39, 75, 75, 16, 145, 145, 112, + 73, 26, 112, 26, 73, 73, 40, 16, 16, 16, + 16, 16, 16, 13, 16, 16, 16, 49, 49, 49, + 49, 49, 139, 75, 75, 75, 75, 37, 37, 75, + 75, 13, 146, 13, 13, 13, 13, 148, 13, 13, + 13, 13, 13, 13, 95, 13, 117, 52, 26, 26, + 149, 149, 54, 120, 26, 26, 26, 26, 26, 68, + 68, 68, 68, 68, 65, 65, 12, 88, 15, 149, + 15, 65, 90, 85, 85, 89, 65, 65, 20, 12, + 24, 143, 30, 15, 80, 80, 15, 19, 149, 11, + 63, 63, 28, 97, 65, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 82, 8, 8, 65, 129, 63, + 63, 63, 126, 23, 32, 98, 98, 79, 12, 63, + 63, 63, 63, 12, 100, 63, 63, 71, 72, 115, + 124, -1, 98, 98, -1, 14, 14, 14, -1, -1, + 14, 63, -1, -1, 63, 14, -1, -1, -1, -1, + -1, -1, -1, 98, 12, 14, -1, 14, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 8, -1, + -1, 14, 14, -1, 14, -1, -1, -1, -1, -1, + 98, -1, 98, 98, 98, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 8, 8, -1, -1, -1, 12, -1, -1, -1, + -1, -1, 8, -1, 8, -1, -1, 8, -1, -1, + 8, 8, -1, 8, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 8, -1, + -1, 8 + ); + + protected $gotoBase = array( + 0, 0, -338, 0, 0, 236, 0, 194, 110, 0, + -146, 59, 51, -21, 18, -62, 254, 155, 200, 45, + 73, 0, 0, 23, 54, 0, -41, 0, 48, 0, + 55, 0, 12, -23, 0, 0, 212, -312, 0, -339, + 247, 0, 0, 0, 0, 0, 103, 0, 0, 238, + 0, 0, 271, 0, 99, 171, -90, 0, 0, 0, + 0, 0, 0, 112, 0, -44, 0, -114, 75, -192, + 0, 1, -8, -320, 0, 16, -97, 0, 0, 13, + -252, 0, 35, 0, 0, 121, -58, 0, 78, 84, + 82, -107, 0, -187, 0, 276, 0, 46, 137, 0, + 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 22, 0, 0, 24, 0, 269, 0, 0, + 74, 0, 0, 0, -19, 0, 11, 0, 0, 14, + 0, 0, 0, 0, 0, 0, -26, -43, -28, 257, + 10, 0, 0, 85, 0, -48, 266, 0, 270, 57, + -129, 0, 0 + ); + + protected $gotoDefault = array( + -32768, 418, 602, 2, 603, 675, 683, 547, 435, 572, + 436, 462, 336, 757, 915, 777, 739, 740, 741, 321, + 358, 312, 319, 530, 517, 408, 726, 378, 718, 405, + 721, 377, 730, 141, 548, 414, 734, 1, 736, 468, + 768, 309, 744, 310, 551, 746, 475, 748, 749, 315, + 322, 323, 920, 484, 514, 761, 215, 477, 762, 308, + 763, 771, 332, 313, 389, 415, 327, 896, 501, 526, + 373, 393, 511, 506, 486, 1028, 796, 399, 387, 810, + 296, 818, 600, 826, 829, 437, 438, 397, 841, 398, + 855, 502, 503, 1036, 392, 861, 379, 868, 1072, 382, + 872, 237, 875, 251, 545, 348, 880, 881, 6, 886, + 563, 564, 7, 240, 413, 910, 546, 376, 485, 926, + 361, 994, 996, 470, 406, 1009, 386, 554, 416, 1014, + 1075, 374, 439, 394, 281, 440, 253, 300, 278, 456, + 260, 301, 441, 395, 1078, 1085, 277, 27, 1104, 1115, + 291, 489, 508 + ); + + protected $ruleToNonTerminal = array( + 0, 1, 3, 3, 2, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, + 6, 7, 7, 8, 9, 10, 10, 11, 12, 13, + 13, 14, 14, 15, 15, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 20, 20, 21, 21, + 21, 21, 23, 25, 25, 19, 27, 27, 24, 29, + 29, 26, 26, 28, 28, 30, 30, 22, 31, 31, + 32, 34, 35, 35, 36, 37, 37, 39, 38, 38, + 38, 38, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 16, 16, 59, + 59, 62, 62, 61, 60, 60, 53, 64, 64, 65, + 65, 66, 66, 67, 67, 17, 18, 18, 18, 70, + 70, 70, 71, 71, 74, 74, 72, 72, 76, 77, + 77, 47, 47, 55, 55, 58, 58, 58, 57, 78, + 78, 79, 48, 48, 48, 48, 80, 80, 81, 81, + 82, 82, 45, 45, 41, 41, 83, 43, 43, 84, + 42, 42, 44, 44, 54, 54, 54, 54, 68, 68, + 87, 87, 88, 88, 88, 90, 90, 90, 91, 91, + 91, 92, 92, 89, 89, 69, 69, 69, 93, 93, + 94, 94, 95, 95, 95, 50, 96, 96, 97, 51, + 99, 99, 100, 100, 101, 101, 73, 102, 102, 102, + 102, 102, 107, 107, 108, 108, 109, 109, 109, 109, + 109, 110, 111, 111, 106, 106, 103, 103, 105, 105, + 113, 113, 112, 112, 112, 112, 112, 112, 104, 114, + 114, 116, 115, 115, 52, 118, 117, 117, 46, 46, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 125, 119, 119, 124, + 124, 127, 128, 128, 129, 130, 130, 130, 75, 75, + 63, 63, 63, 120, 120, 120, 120, 132, 132, 121, + 121, 123, 123, 123, 126, 126, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 138, 138, 86, 140, 140, + 140, 140, 122, 122, 122, 122, 122, 122, 122, 122, + 49, 49, 135, 135, 135, 135, 141, 141, 131, 131, + 131, 142, 142, 142, 142, 142, 56, 56, 56, 98, + 98, 98, 98, 145, 144, 134, 134, 134, 134, 134, + 134, 133, 133, 133, 143, 143, 143, 143, 85, 139, + 147, 147, 146, 146, 148, 148, 148, 148, 148, 148, + 148, 148, 136, 136, 136, 136, 150, 151, 149, 149, + 149, 149, 149, 149, 149, 152, 152, 152, 152 + ); + + protected $ruleToLength = array( + 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, + 1, 0, 1, 0, 1, 1, 1, 1, 1, 3, + 5, 4, 3, 4, 2, 3, 1, 1, 7, 8, + 6, 7, 2, 3, 1, 2, 3, 1, 2, 3, + 1, 1, 3, 1, 2, 1, 2, 2, 3, 1, + 3, 2, 3, 1, 3, 2, 0, 1, 1, 1, + 1, 1, 3, 7, 10, 5, 7, 9, 5, 3, + 3, 3, 3, 3, 3, 1, 2, 5, 7, 9, + 6, 5, 6, 3, 3, 2, 1, 1, 1, 0, + 2, 1, 3, 8, 0, 4, 2, 1, 3, 0, + 1, 0, 1, 3, 1, 8, 7, 6, 5, 1, + 2, 2, 0, 2, 0, 2, 0, 2, 2, 1, + 3, 1, 4, 1, 4, 1, 1, 4, 2, 1, + 3, 3, 3, 4, 4, 5, 0, 2, 4, 3, + 1, 1, 1, 4, 0, 2, 5, 0, 2, 6, + 0, 2, 0, 3, 1, 2, 1, 1, 2, 0, + 1, 3, 4, 6, 4, 1, 2, 1, 1, 1, + 1, 3, 3, 0, 1, 0, 2, 2, 2, 4, + 1, 3, 1, 2, 2, 2, 3, 1, 1, 2, + 3, 1, 1, 3, 2, 0, 1, 4, 4, 9, + 3, 1, 1, 3, 0, 2, 4, 5, 4, 4, + 4, 3, 1, 1, 1, 1, 1, 1, 0, 1, + 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, + 3, 1, 1, 3, 2, 2, 3, 1, 0, 1, + 1, 3, 3, 3, 4, 1, 2, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 5, 4, 3, 4, + 4, 2, 2, 4, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 1, 3, 2, 1, 2, + 4, 2, 8, 9, 8, 9, 7, 3, 2, 0, + 4, 2, 1, 3, 2, 2, 2, 4, 1, 1, + 1, 2, 3, 1, 1, 3, 1, 1, 1, 0, + 3, 0, 1, 1, 0, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 3, 3, 3, 4, 1, + 1, 3, 1, 1, 1, 1, 1, 3, 2, 3, + 0, 1, 1, 3, 1, 1, 1, 1, 1, 3, + 1, 1, 4, 4, 1, 4, 1, 1, 3, 1, + 4, 2, 2, 1, 3, 1, 4, 4, 3, 3, + 3, 1, 3, 1, 1, 3, 1, 1, 4, 1, + 1, 1, 3, 1, 1, 2, 1, 3, 4, 3, + 2, 0, 2, 2, 1, 2, 1, 1, 1, 4, + 3, 3, 3, 6, 3, 1, 1, 2, 1 + ); + + protected function initReduceCallbacks() { + $this->reduceCallbacks = [ + 0 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 1 => function ($stackPos) { + $this->semValue = $this->handleNamespaces($this->semStack[$stackPos-(1-1)]); + }, + 2 => function ($stackPos) { + if (is_array($this->semStack[$stackPos-(2-2)])) { $this->semValue = array_merge($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]); } else { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; }; + }, + 3 => function ($stackPos) { + $this->semValue = array(); + }, + 4 => function ($stackPos) { + $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; }; + if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 5 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 6 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 7 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 8 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 9 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 10 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 11 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 12 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 13 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 14 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 15 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 16 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 17 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 18 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 19 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 20 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 21 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 22 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 23 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 24 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 25 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 26 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 27 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 28 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 29 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 30 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 31 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 32 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 33 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 34 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 35 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 36 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 37 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 38 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 39 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 40 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 41 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 42 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 43 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 44 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 45 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 46 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 47 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 48 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 49 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 50 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 51 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 52 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 53 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 54 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 55 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 56 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 57 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 58 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 59 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 60 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 61 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 62 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 63 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 64 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 65 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 66 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 67 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 68 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 69 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 70 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 71 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 72 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 73 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 74 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 75 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 76 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 77 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 78 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 79 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 80 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 81 => function ($stackPos) { + $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 82 => function ($stackPos) { + $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 83 => function ($stackPos) { + $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 84 => function ($stackPos) { + $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 85 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 86 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 87 => function ($stackPos) { + $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 88 => function ($stackPos) { + $this->semValue = new Expr\Variable(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 89 => function ($stackPos) { + /* nothing */ + }, + 90 => function ($stackPos) { + /* nothing */ + }, + 91 => function ($stackPos) { + /* nothing */ + }, + 92 => function ($stackPos) { + $this->emitError(new Error('A trailing comma is not allowed here', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes)); + }, + 93 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 94 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 95 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 96 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 97 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 98 => function ($stackPos) { + $this->semValue = new Stmt\HaltCompiler($this->lexer->handleHaltCompiler(), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 99 => function ($stackPos) { + $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos-(3-2)], null, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON); + $this->checkNamespace($this->semValue); + }, + 100 => function ($stackPos) { + $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos-(5-2)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes); + $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED); + $this->checkNamespace($this->semValue); + }, + 101 => function ($stackPos) { + $this->semValue = new Stmt\Namespace_(null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED); + $this->checkNamespace($this->semValue); + }, + 102 => function ($stackPos) { + $this->semValue = new Stmt\Use_($this->semStack[$stackPos-(3-2)], Stmt\Use_::TYPE_NORMAL, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 103 => function ($stackPos) { + $this->semValue = new Stmt\Use_($this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 104 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 105 => function ($stackPos) { + $this->semValue = new Stmt\Const_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 106 => function ($stackPos) { + $this->semValue = Stmt\Use_::TYPE_FUNCTION; + }, + 107 => function ($stackPos) { + $this->semValue = Stmt\Use_::TYPE_CONSTANT; + }, + 108 => function ($stackPos) { + $this->semValue = new Stmt\GroupUse(new Name($this->semStack[$stackPos-(7-3)], $this->startAttributeStack[$stackPos-(7-3)] + $this->endAttributeStack[$stackPos-(7-3)]), $this->semStack[$stackPos-(7-6)], $this->semStack[$stackPos-(7-2)], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes); + }, + 109 => function ($stackPos) { + $this->semValue = new Stmt\GroupUse(new Name($this->semStack[$stackPos-(8-4)], $this->startAttributeStack[$stackPos-(8-4)] + $this->endAttributeStack[$stackPos-(8-4)]), $this->semStack[$stackPos-(8-7)], $this->semStack[$stackPos-(8-2)], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes); + }, + 110 => function ($stackPos) { + $this->semValue = new Stmt\GroupUse(new Name($this->semStack[$stackPos-(6-2)], $this->startAttributeStack[$stackPos-(6-2)] + $this->endAttributeStack[$stackPos-(6-2)]), $this->semStack[$stackPos-(6-5)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); + }, + 111 => function ($stackPos) { + $this->semValue = new Stmt\GroupUse(new Name($this->semStack[$stackPos-(7-3)], $this->startAttributeStack[$stackPos-(7-3)] + $this->endAttributeStack[$stackPos-(7-3)]), $this->semStack[$stackPos-(7-6)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes); + }, + 112 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 113 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 114 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 115 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 116 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 117 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 118 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 119 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 120 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 121 => function ($stackPos) { + $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(1-1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(1-1)); + }, + 122 => function ($stackPos) { + $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(3-3)); + }, + 123 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 124 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(2-2)]; + }, + 125 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; $this->semValue->type = Stmt\Use_::TYPE_NORMAL; + }, + 126 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(2-2)]; $this->semValue->type = $this->semStack[$stackPos-(2-1)]; + }, + 127 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 128 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 129 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 130 => function ($stackPos) { + $this->semValue = new Node\Const_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 131 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 132 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 133 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 134 => function ($stackPos) { + $this->semValue = new Node\Const_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 135 => function ($stackPos) { + if (is_array($this->semStack[$stackPos-(2-2)])) { $this->semValue = array_merge($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]); } else { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; }; + }, + 136 => function ($stackPos) { + $this->semValue = array(); + }, + 137 => function ($stackPos) { + $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; }; + if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 138 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 139 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 140 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 141 => function ($stackPos) { + throw new Error('__HALT_COMPILER() can only be used from the outermost scope', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 142 => function ($stackPos) { + + if ($this->semStack[$stackPos-(3-2)]) { + $this->semValue = $this->semStack[$stackPos-(3-2)]; $attrs = $this->startAttributeStack[$stackPos-(3-1)]; $stmts = $this->semValue; if (!empty($attrs['comments'])) {$stmts[0]->setAttribute('comments', array_merge($attrs['comments'], $stmts[0]->getAttribute('comments', []))); }; + } else { + $startAttributes = $this->startAttributeStack[$stackPos-(3-1)]; if (isset($startAttributes['comments'])) { $this->semValue = new Stmt\Nop($startAttributes + $this->endAttributes); } else { $this->semValue = null; }; + if (null === $this->semValue) { $this->semValue = array(); } + } + + }, + 143 => function ($stackPos) { + $this->semValue = new Stmt\If_($this->semStack[$stackPos-(7-3)], ['stmts' => is_array($this->semStack[$stackPos-(7-5)]) ? $this->semStack[$stackPos-(7-5)] : array($this->semStack[$stackPos-(7-5)]), 'elseifs' => $this->semStack[$stackPos-(7-6)], 'else' => $this->semStack[$stackPos-(7-7)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes); + }, + 144 => function ($stackPos) { + $this->semValue = new Stmt\If_($this->semStack[$stackPos-(10-3)], ['stmts' => $this->semStack[$stackPos-(10-6)], 'elseifs' => $this->semStack[$stackPos-(10-7)], 'else' => $this->semStack[$stackPos-(10-8)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes); + }, + 145 => function ($stackPos) { + $this->semValue = new Stmt\While_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes); + }, + 146 => function ($stackPos) { + $this->semValue = new Stmt\Do_($this->semStack[$stackPos-(7-5)], is_array($this->semStack[$stackPos-(7-2)]) ? $this->semStack[$stackPos-(7-2)] : array($this->semStack[$stackPos-(7-2)]), $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes); + }, + 147 => function ($stackPos) { + $this->semValue = new Stmt\For_(['init' => $this->semStack[$stackPos-(9-3)], 'cond' => $this->semStack[$stackPos-(9-5)], 'loop' => $this->semStack[$stackPos-(9-7)], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes); + }, + 148 => function ($stackPos) { + $this->semValue = new Stmt\Switch_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes); + }, + 149 => function ($stackPos) { + $this->semValue = new Stmt\Break_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 150 => function ($stackPos) { + $this->semValue = new Stmt\Continue_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 151 => function ($stackPos) { + $this->semValue = new Stmt\Return_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 152 => function ($stackPos) { + $this->semValue = new Stmt\Global_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 153 => function ($stackPos) { + $this->semValue = new Stmt\Static_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 154 => function ($stackPos) { + $this->semValue = new Stmt\Echo_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 155 => function ($stackPos) { + $this->semValue = new Stmt\InlineHTML($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 156 => function ($stackPos) { + $this->semValue = new Stmt\Expression($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 157 => function ($stackPos) { + $this->semValue = new Stmt\Unset_($this->semStack[$stackPos-(5-3)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes); + }, + 158 => function ($stackPos) { + $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-5)][0], ['keyVar' => null, 'byRef' => $this->semStack[$stackPos-(7-5)][1], 'stmts' => $this->semStack[$stackPos-(7-7)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes); + }, + 159 => function ($stackPos) { + $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(9-3)], $this->semStack[$stackPos-(9-7)][0], ['keyVar' => $this->semStack[$stackPos-(9-5)], 'byRef' => $this->semStack[$stackPos-(9-7)][1], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes); + }, + 160 => function ($stackPos) { + $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(6-3)], new Expr\Error($this->startAttributeStack[$stackPos-(6-4)] + $this->endAttributeStack[$stackPos-(6-4)]), ['stmts' => $this->semStack[$stackPos-(6-6)]], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); + }, + 161 => function ($stackPos) { + $this->semValue = new Stmt\Declare_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes); + }, + 162 => function ($stackPos) { + $this->semValue = new Stmt\TryCatch($this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-5)], $this->semStack[$stackPos-(6-6)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); $this->checkTryCatch($this->semValue); + }, + 163 => function ($stackPos) { + $this->semValue = new Stmt\Throw_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 164 => function ($stackPos) { + $this->semValue = new Stmt\Goto_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 165 => function ($stackPos) { + $this->semValue = new Stmt\Label($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 166 => function ($stackPos) { + $this->semValue = array(); /* means: no statement */ + }, + 167 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 168 => function ($stackPos) { + $startAttributes = $this->startAttributeStack[$stackPos-(1-1)]; if (isset($startAttributes['comments'])) { $this->semValue = new Stmt\Nop($startAttributes + $this->endAttributes); } else { $this->semValue = null; }; + if ($this->semValue === null) $this->semValue = array(); /* means: no statement */ + }, + 169 => function ($stackPos) { + $this->semValue = array(); + }, + 170 => function ($stackPos) { + $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 171 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 172 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 173 => function ($stackPos) { + $this->semValue = new Stmt\Catch_($this->semStack[$stackPos-(8-3)], $this->semStack[$stackPos-(8-4)], $this->semStack[$stackPos-(8-7)], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes); + }, + 174 => function ($stackPos) { + $this->semValue = null; + }, + 175 => function ($stackPos) { + $this->semValue = new Stmt\Finally_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 176 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 177 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 178 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 179 => function ($stackPos) { + $this->semValue = false; + }, + 180 => function ($stackPos) { + $this->semValue = true; + }, + 181 => function ($stackPos) { + $this->semValue = false; + }, + 182 => function ($stackPos) { + $this->semValue = true; + }, + 183 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(3-2)]; + }, + 184 => function ($stackPos) { + $this->semValue = []; + }, + 185 => function ($stackPos) { + $this->semValue = new Stmt\Function_($this->semStack[$stackPos-(8-3)], ['byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-5)], 'returnType' => $this->semStack[$stackPos-(8-7)], 'stmts' => $this->semStack[$stackPos-(8-8)]], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes); + }, + 186 => function ($stackPos) { + $this->semValue = new Stmt\Class_($this->semStack[$stackPos-(7-2)], ['type' => $this->semStack[$stackPos-(7-1)], 'extends' => $this->semStack[$stackPos-(7-3)], 'implements' => $this->semStack[$stackPos-(7-4)], 'stmts' => $this->semStack[$stackPos-(7-6)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes); + $this->checkClass($this->semValue, $stackPos-(7-2)); + }, + 187 => function ($stackPos) { + $this->semValue = new Stmt\Interface_($this->semStack[$stackPos-(6-2)], ['extends' => $this->semStack[$stackPos-(6-3)], 'stmts' => $this->semStack[$stackPos-(6-5)]], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); + $this->checkInterface($this->semValue, $stackPos-(6-2)); + }, + 188 => function ($stackPos) { + $this->semValue = new Stmt\Trait_($this->semStack[$stackPos-(5-2)], ['stmts' => $this->semStack[$stackPos-(5-4)]], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes); + }, + 189 => function ($stackPos) { + $this->semValue = 0; + }, + 190 => function ($stackPos) { + $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT; + }, + 191 => function ($stackPos) { + $this->semValue = Stmt\Class_::MODIFIER_FINAL; + }, + 192 => function ($stackPos) { + $this->semValue = null; + }, + 193 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(2-2)]; + }, + 194 => function ($stackPos) { + $this->semValue = array(); + }, + 195 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(2-2)]; + }, + 196 => function ($stackPos) { + $this->semValue = array(); + }, + 197 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(2-2)]; + }, + 198 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 199 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 200 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 201 => function ($stackPos) { + $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]); + }, + 202 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(4-2)]; + }, + 203 => function ($stackPos) { + $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]); + }, + 204 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(4-2)]; + }, + 205 => function ($stackPos) { + $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]); + }, + 206 => function ($stackPos) { + $this->semValue = null; + }, + 207 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(4-2)]; + }, + 208 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 209 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 210 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 211 => function ($stackPos) { + $this->semValue = new Stmt\DeclareDeclare($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 212 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(3-2)]; + }, + 213 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(4-3)]; + }, + 214 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(4-2)]; + }, + 215 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(5-3)]; + }, + 216 => function ($stackPos) { + $this->semValue = array(); + }, + 217 => function ($stackPos) { + $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 218 => function ($stackPos) { + $this->semValue = new Stmt\Case_($this->semStack[$stackPos-(4-2)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 219 => function ($stackPos) { + $this->semValue = new Stmt\Case_(null, $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 220 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 221 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 222 => function ($stackPos) { + $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]); + }, + 223 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(4-2)]; + }, + 224 => function ($stackPos) { + $this->semValue = array(); + }, + 225 => function ($stackPos) { + $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 226 => function ($stackPos) { + $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(5-3)], is_array($this->semStack[$stackPos-(5-5)]) ? $this->semStack[$stackPos-(5-5)] : array($this->semStack[$stackPos-(5-5)]), $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes); + }, + 227 => function ($stackPos) { + $this->semValue = array(); + }, + 228 => function ($stackPos) { + $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 229 => function ($stackPos) { + $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-6)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); + }, + 230 => function ($stackPos) { + $this->semValue = null; + }, + 231 => function ($stackPos) { + $this->semValue = new Stmt\Else_(is_array($this->semStack[$stackPos-(2-2)]) ? $this->semStack[$stackPos-(2-2)] : array($this->semStack[$stackPos-(2-2)]), $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 232 => function ($stackPos) { + $this->semValue = null; + }, + 233 => function ($stackPos) { + $this->semValue = new Stmt\Else_($this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 234 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)], false); + }, + 235 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(2-2)], true); + }, + 236 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)], false); + }, + 237 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)], false); + }, + 238 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 239 => function ($stackPos) { + $this->semValue = array(); + }, + 240 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 241 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 242 => function ($stackPos) { + $this->semValue = new Node\Param($this->semStack[$stackPos-(4-4)], null, $this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-2)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); $this->checkParam($this->semValue); + }, + 243 => function ($stackPos) { + $this->semValue = new Node\Param($this->semStack[$stackPos-(6-4)], $this->semStack[$stackPos-(6-6)], $this->semStack[$stackPos-(6-1)], $this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-3)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); $this->checkParam($this->semValue); + }, + 244 => function ($stackPos) { + $this->semValue = new Node\Param(new Expr\Error($this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes), null, $this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-2)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 245 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 246 => function ($stackPos) { + $this->semValue = new Node\NullableType($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 247 => function ($stackPos) { + $this->semValue = new Node\UnionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 248 => function ($stackPos) { + $this->semValue = $this->handleBuiltinTypes($this->semStack[$stackPos-(1-1)]); + }, + 249 => function ($stackPos) { + $this->semValue = new Node\Identifier('array', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 250 => function ($stackPos) { + $this->semValue = new Node\Identifier('callable', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 251 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]); + }, + 252 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 253 => function ($stackPos) { + $this->semValue = null; + }, + 254 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 255 => function ($stackPos) { + $this->semValue = null; + }, + 256 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(2-2)]; + }, + 257 => function ($stackPos) { + $this->semValue = null; + }, + 258 => function ($stackPos) { + $this->semValue = array(); + }, + 259 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(4-2)]; + }, + 260 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 261 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 262 => function ($stackPos) { + $this->semValue = new Node\Arg($this->semStack[$stackPos-(1-1)], false, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 263 => function ($stackPos) { + $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], true, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 264 => function ($stackPos) { + $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], false, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 265 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 266 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 267 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 268 => function ($stackPos) { + $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 269 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 270 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 271 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 272 => function ($stackPos) { + $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 273 => function ($stackPos) { + $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 274 => function ($stackPos) { + if ($this->semStack[$stackPos-(2-2)] !== null) { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; } + }, + 275 => function ($stackPos) { + $this->semValue = array(); + }, + 276 => function ($stackPos) { + $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; }; + if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 277 => function ($stackPos) { + $attrs = $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes; + $this->semValue = new Stmt\Property($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $attrs, $this->semStack[$stackPos-(4-2)]); $this->checkProperty($this->semValue, $stackPos-(4-1)); + }, + 278 => function ($stackPos) { + $this->semValue = new Stmt\ClassConst($this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-1)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); $this->checkClassConst($this->semValue, $stackPos-(4-1)); + }, + 279 => function ($stackPos) { + $this->semValue = new Stmt\ClassMethod($this->semStack[$stackPos-(9-4)], ['type' => $this->semStack[$stackPos-(9-1)], 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-6)], 'returnType' => $this->semStack[$stackPos-(9-8)], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes); + $this->checkClassMethod($this->semValue, $stackPos-(9-1)); + }, + 280 => function ($stackPos) { + $this->semValue = new Stmt\TraitUse($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 281 => function ($stackPos) { + $this->semValue = null; /* will be skipped */ + }, + 282 => function ($stackPos) { + $this->semValue = array(); + }, + 283 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(3-2)]; + }, + 284 => function ($stackPos) { + $this->semValue = array(); + }, + 285 => function ($stackPos) { + $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 286 => function ($stackPos) { + $this->semValue = new Stmt\TraitUseAdaptation\Precedence($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 287 => function ($stackPos) { + $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(5-1)][0], $this->semStack[$stackPos-(5-1)][1], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes); + }, + 288 => function ($stackPos) { + $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], $this->semStack[$stackPos-(4-3)], null, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 289 => function ($stackPos) { + $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 290 => function ($stackPos) { + $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 291 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]); + }, + 292 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 293 => function ($stackPos) { + $this->semValue = array(null, $this->semStack[$stackPos-(1-1)]); + }, + 294 => function ($stackPos) { + $this->semValue = null; + }, + 295 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 296 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 297 => function ($stackPos) { + $this->semValue = 0; + }, + 298 => function ($stackPos) { + $this->semValue = 0; + }, + 299 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 300 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 301 => function ($stackPos) { + $this->checkModifier($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $this->semValue = $this->semStack[$stackPos-(2-1)] | $this->semStack[$stackPos-(2-2)]; + }, + 302 => function ($stackPos) { + $this->semValue = Stmt\Class_::MODIFIER_PUBLIC; + }, + 303 => function ($stackPos) { + $this->semValue = Stmt\Class_::MODIFIER_PROTECTED; + }, + 304 => function ($stackPos) { + $this->semValue = Stmt\Class_::MODIFIER_PRIVATE; + }, + 305 => function ($stackPos) { + $this->semValue = Stmt\Class_::MODIFIER_STATIC; + }, + 306 => function ($stackPos) { + $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT; + }, + 307 => function ($stackPos) { + $this->semValue = Stmt\Class_::MODIFIER_FINAL; + }, + 308 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 309 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 310 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 311 => function ($stackPos) { + $this->semValue = new Node\VarLikeIdentifier(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 312 => function ($stackPos) { + $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 313 => function ($stackPos) { + $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 314 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 315 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 316 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 317 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 318 => function ($stackPos) { + $this->semValue = array(); + }, + 319 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 320 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 321 => function ($stackPos) { + $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 322 => function ($stackPos) { + $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 323 => function ($stackPos) { + $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 324 => function ($stackPos) { + $this->semValue = new Expr\AssignRef($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 325 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 326 => function ($stackPos) { + $this->semValue = new Expr\Clone_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 327 => function ($stackPos) { + $this->semValue = new Expr\AssignOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 328 => function ($stackPos) { + $this->semValue = new Expr\AssignOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 329 => function ($stackPos) { + $this->semValue = new Expr\AssignOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 330 => function ($stackPos) { + $this->semValue = new Expr\AssignOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 331 => function ($stackPos) { + $this->semValue = new Expr\AssignOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 332 => function ($stackPos) { + $this->semValue = new Expr\AssignOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 333 => function ($stackPos) { + $this->semValue = new Expr\AssignOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 334 => function ($stackPos) { + $this->semValue = new Expr\AssignOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 335 => function ($stackPos) { + $this->semValue = new Expr\AssignOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 336 => function ($stackPos) { + $this->semValue = new Expr\AssignOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 337 => function ($stackPos) { + $this->semValue = new Expr\AssignOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 338 => function ($stackPos) { + $this->semValue = new Expr\AssignOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 339 => function ($stackPos) { + $this->semValue = new Expr\AssignOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 340 => function ($stackPos) { + $this->semValue = new Expr\PostInc($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 341 => function ($stackPos) { + $this->semValue = new Expr\PreInc($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 342 => function ($stackPos) { + $this->semValue = new Expr\PostDec($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 343 => function ($stackPos) { + $this->semValue = new Expr\PreDec($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 344 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 345 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 346 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 347 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 348 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 349 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 350 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 351 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 352 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 353 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 354 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 355 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 356 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 357 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 358 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 359 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 360 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 361 => function ($stackPos) { + $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 362 => function ($stackPos) { + $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 363 => function ($stackPos) { + $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 364 => function ($stackPos) { + $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 365 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 366 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 367 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 368 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 369 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Spaceship($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 370 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 371 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 372 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 373 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 374 => function ($stackPos) { + $this->semValue = new Expr\Instanceof_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 375 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(3-2)]; + }, + 376 => function ($stackPos) { + $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(5-1)], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes); + }, + 377 => function ($stackPos) { + $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(4-1)], null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 378 => function ($stackPos) { + $this->semValue = new Expr\BinaryOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 379 => function ($stackPos) { + $this->semValue = new Expr\Isset_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 380 => function ($stackPos) { + $this->semValue = new Expr\Empty_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 381 => function ($stackPos) { + $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 382 => function ($stackPos) { + $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 383 => function ($stackPos) { + $this->semValue = new Expr\Eval_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 384 => function ($stackPos) { + $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 385 => function ($stackPos) { + $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 386 => function ($stackPos) { + $this->semValue = new Expr\Cast\Int_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 387 => function ($stackPos) { + $attrs = $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes; + $attrs['kind'] = $this->getFloatCastKind($this->semStack[$stackPos-(2-1)]); + $this->semValue = new Expr\Cast\Double($this->semStack[$stackPos-(2-2)], $attrs); + }, + 388 => function ($stackPos) { + $this->semValue = new Expr\Cast\String_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 389 => function ($stackPos) { + $this->semValue = new Expr\Cast\Array_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 390 => function ($stackPos) { + $this->semValue = new Expr\Cast\Object_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 391 => function ($stackPos) { + $this->semValue = new Expr\Cast\Bool_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 392 => function ($stackPos) { + $this->semValue = new Expr\Cast\Unset_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 393 => function ($stackPos) { + $attrs = $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes; + $attrs['kind'] = strtolower($this->semStack[$stackPos-(2-1)]) === 'exit' ? Expr\Exit_::KIND_EXIT : Expr\Exit_::KIND_DIE; + $this->semValue = new Expr\Exit_($this->semStack[$stackPos-(2-2)], $attrs); + }, + 394 => function ($stackPos) { + $this->semValue = new Expr\ErrorSuppress($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 395 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 396 => function ($stackPos) { + $this->semValue = new Expr\ShellExec($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 397 => function ($stackPos) { + $this->semValue = new Expr\Print_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 398 => function ($stackPos) { + $this->semValue = new Expr\Yield_(null, null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 399 => function ($stackPos) { + $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(2-2)], null, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 400 => function ($stackPos) { + $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 401 => function ($stackPos) { + $this->semValue = new Expr\YieldFrom($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 402 => function ($stackPos) { + $this->semValue = new Expr\ArrowFunction(['static' => false, 'byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-4)], 'returnType' => $this->semStack[$stackPos-(8-6)], 'expr' => $this->semStack[$stackPos-(8-8)]], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes); + }, + 403 => function ($stackPos) { + $this->semValue = new Expr\ArrowFunction(['static' => true, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'returnType' => $this->semStack[$stackPos-(9-7)], 'expr' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes); + }, + 404 => function ($stackPos) { + $this->semValue = new Expr\Closure(['static' => false, 'byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-4)], 'uses' => $this->semStack[$stackPos-(8-6)], 'returnType' => $this->semStack[$stackPos-(8-7)], 'stmts' => $this->semStack[$stackPos-(8-8)]], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes); + }, + 405 => function ($stackPos) { + $this->semValue = new Expr\Closure(['static' => true, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'uses' => $this->semStack[$stackPos-(9-7)], 'returnType' => $this->semStack[$stackPos-(9-8)], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes); + }, + 406 => function ($stackPos) { + $this->semValue = array(new Stmt\Class_(null, ['type' => 0, 'extends' => $this->semStack[$stackPos-(7-3)], 'implements' => $this->semStack[$stackPos-(7-4)], 'stmts' => $this->semStack[$stackPos-(7-6)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes), $this->semStack[$stackPos-(7-2)]); + $this->checkClass($this->semValue[0], -1); + }, + 407 => function ($stackPos) { + $this->semValue = new Expr\New_($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 408 => function ($stackPos) { + list($class, $ctorArgs) = $this->semStack[$stackPos-(2-2)]; $this->semValue = new Expr\New_($class, $ctorArgs, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 409 => function ($stackPos) { + $this->semValue = array(); + }, + 410 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(4-3)]; + }, + 411 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 412 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 413 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 414 => function ($stackPos) { + $this->semValue = new Expr\ClosureUse($this->semStack[$stackPos-(2-2)], $this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 415 => function ($stackPos) { + $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 416 => function ($stackPos) { + $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 417 => function ($stackPos) { + $this->semValue = new Expr\StaticCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 418 => function ($stackPos) { + $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 419 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 420 => function ($stackPos) { + $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 421 => function ($stackPos) { + $this->semValue = new Name\FullyQualified($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 422 => function ($stackPos) { + $this->semValue = new Name\Relative($this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 423 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 424 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 425 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(3-2)]; + }, + 426 => function ($stackPos) { + $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2; + }, + 427 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 428 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 429 => function ($stackPos) { + $this->semValue = null; + }, + 430 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(3-2)]; + }, + 431 => function ($stackPos) { + $this->semValue = array(); + }, + 432 => function ($stackPos) { + $this->semValue = array(new Scalar\EncapsedStringPart(Scalar\String_::parseEscapeSequences($this->semStack[$stackPos-(1-1)], '`'), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes)); + }, + 433 => function ($stackPos) { + foreach ($this->semStack[$stackPos-(1-1)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', true); } }; $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 434 => function ($stackPos) { + $this->semValue = array(); + }, + 435 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 436 => function ($stackPos) { + $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 437 => function ($stackPos) { + $this->semValue = new Scalar\MagicConst\Line($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 438 => function ($stackPos) { + $this->semValue = new Scalar\MagicConst\File($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 439 => function ($stackPos) { + $this->semValue = new Scalar\MagicConst\Dir($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 440 => function ($stackPos) { + $this->semValue = new Scalar\MagicConst\Class_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 441 => function ($stackPos) { + $this->semValue = new Scalar\MagicConst\Trait_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 442 => function ($stackPos) { + $this->semValue = new Scalar\MagicConst\Method($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 443 => function ($stackPos) { + $this->semValue = new Scalar\MagicConst\Function_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 444 => function ($stackPos) { + $this->semValue = new Scalar\MagicConst\Namespace_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 445 => function ($stackPos) { + $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 446 => function ($stackPos) { + $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], new Expr\Error($this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)]), $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->errorState = 2; + }, + 447 => function ($stackPos) { + $attrs = $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes; $attrs['kind'] = Expr\Array_::KIND_SHORT; + $this->semValue = new Expr\Array_($this->semStack[$stackPos-(3-2)], $attrs); + }, + 448 => function ($stackPos) { + $attrs = $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes; $attrs['kind'] = Expr\Array_::KIND_LONG; + $this->semValue = new Expr\Array_($this->semStack[$stackPos-(4-3)], $attrs); + }, + 449 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 450 => function ($stackPos) { + $attrs = $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes; $attrs['kind'] = ($this->semStack[$stackPos-(1-1)][0] === "'" || ($this->semStack[$stackPos-(1-1)][1] === "'" && ($this->semStack[$stackPos-(1-1)][0] === 'b' || $this->semStack[$stackPos-(1-1)][0] === 'B')) ? Scalar\String_::KIND_SINGLE_QUOTED : Scalar\String_::KIND_DOUBLE_QUOTED); + $this->semValue = new Scalar\String_(Scalar\String_::parse($this->semStack[$stackPos-(1-1)]), $attrs); + }, + 451 => function ($stackPos) { + $attrs = $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes; $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED; + foreach ($this->semStack[$stackPos-(3-2)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', true); } }; $this->semValue = new Scalar\Encapsed($this->semStack[$stackPos-(3-2)], $attrs); + }, + 452 => function ($stackPos) { + $this->semValue = $this->parseLNumber($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 453 => function ($stackPos) { + $this->semValue = new Scalar\DNumber(Scalar\DNumber::parse($this->semStack[$stackPos-(1-1)]), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 454 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 455 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 456 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 457 => function ($stackPos) { + $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], true); + }, + 458 => function ($stackPos) { + $this->semValue = $this->parseDocString($this->semStack[$stackPos-(2-1)], '', $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(2-2)] + $this->endAttributeStack[$stackPos-(2-2)], true); + }, + 459 => function ($stackPos) { + $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], true); + }, + 460 => function ($stackPos) { + $this->semValue = null; + }, + 461 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 462 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 463 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(3-2)]; + }, + 464 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 465 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 466 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 467 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 468 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 469 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(3-2)]; + }, + 470 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 471 => function ($stackPos) { + $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 472 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 473 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 474 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 475 => function ($stackPos) { + $this->semValue = new Expr\MethodCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 476 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 477 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 478 => function ($stackPos) { + $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 479 => function ($stackPos) { + $this->semValue = substr($this->semStack[$stackPos-(1-1)], 1); + }, + 480 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(4-3)]; + }, + 481 => function ($stackPos) { + $this->semValue = new Expr\Variable($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 482 => function ($stackPos) { + $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); $this->errorState = 2; + }, + 483 => function ($stackPos) { + $var = $this->semStack[$stackPos-(1-1)]; $this->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes) : $var; + }, + 484 => function ($stackPos) { + $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 485 => function ($stackPos) { + $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 486 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 487 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 488 => function ($stackPos) { + $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 489 => function ($stackPos) { + $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 490 => function ($stackPos) { + $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 491 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 492 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(3-2)]; + }, + 493 => function ($stackPos) { + $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 494 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 495 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(3-2)]; + }, + 496 => function ($stackPos) { + $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 497 => function ($stackPos) { + $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2; + }, + 498 => function ($stackPos) { + $this->semValue = new Expr\List_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 499 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; $end = count($this->semValue)-1; if ($this->semValue[$end] === null) array_pop($this->semValue); + }, + 500 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 501 => function ($stackPos) { + /* do nothing -- prevent default action of $$=$this->semStack[$1]. See $551. */ + }, + 502 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 503 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 504 => function ($stackPos) { + $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 505 => function ($stackPos) { + $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 506 => function ($stackPos) { + $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 507 => function ($stackPos) { + $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 508 => function ($stackPos) { + $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-1)], true, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 509 => function ($stackPos) { + $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 510 => function ($stackPos) { + $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 511 => function ($stackPos) { + $this->semValue = null; + }, + 512 => function ($stackPos) { + $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 513 => function ($stackPos) { + $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 514 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 515 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]); + }, + 516 => function ($stackPos) { + $this->semValue = new Scalar\EncapsedStringPart($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 517 => function ($stackPos) { + $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 518 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 519 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 520 => function ($stackPos) { + $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 521 => function ($stackPos) { + $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 522 => function ($stackPos) { + $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 523 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-4)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); + }, + 524 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(3-2)]; + }, + 525 => function ($stackPos) { + $this->semValue = new Scalar\String_($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 526 => function ($stackPos) { + $this->semValue = $this->parseNumString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 527 => function ($stackPos) { + $this->semValue = $this->parseNumString('-' . $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 528 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + ]; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Parser/Tokens.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Parser/Tokens.php new file mode 100644 index 0000000..50c5bf5 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/Parser/Tokens.php @@ -0,0 +1,146 @@ +lexer = $lexer; + + if (isset($options['throwOnError'])) { + throw new \LogicException( + '"throwOnError" is no longer supported, use "errorHandler" instead'); + } + + $this->initReduceCallbacks(); + } + + /** + * Parses PHP code into a node tree. + * + * If a non-throwing error handler is used, the parser will continue parsing after an error + * occurred and attempt to build a partial AST. + * + * @param string $code The source code to parse + * @param ErrorHandler|null $errorHandler Error handler to use for lexer/parser errors, defaults + * to ErrorHandler\Throwing. + * + * @return Node\Stmt[]|null Array of statements (or null non-throwing error handler is used and + * the parser was unable to recover from an error). + */ + public function parse(string $code, ErrorHandler $errorHandler = null) { + $this->errorHandler = $errorHandler ?: new ErrorHandler\Throwing; + + $this->lexer->startLexing($code, $this->errorHandler); + $result = $this->doParse(); + + // Clear out some of the interior state, so we don't hold onto unnecessary + // memory between uses of the parser + $this->startAttributeStack = []; + $this->endAttributeStack = []; + $this->semStack = []; + $this->semValue = null; + + return $result; + } + + protected function doParse() { + // We start off with no lookahead-token + $symbol = self::SYMBOL_NONE; + + // The attributes for a node are taken from the first and last token of the node. + // From the first token only the startAttributes are taken and from the last only + // the endAttributes. Both are merged using the array union operator (+). + $startAttributes = []; + $endAttributes = []; + $this->endAttributes = $endAttributes; + + // Keep stack of start and end attributes + $this->startAttributeStack = []; + $this->endAttributeStack = [$endAttributes]; + + // Start off in the initial state and keep a stack of previous states + $state = 0; + $stateStack = [$state]; + + // Semantic value stack (contains values of tokens and semantic action results) + $this->semStack = []; + + // Current position in the stack(s) + $stackPos = 0; + + $this->errorState = 0; + + for (;;) { + //$this->traceNewState($state, $symbol); + + if ($this->actionBase[$state] === 0) { + $rule = $this->actionDefault[$state]; + } else { + if ($symbol === self::SYMBOL_NONE) { + // Fetch the next token id from the lexer and fetch additional info by-ref. + // The end attributes are fetched into a temporary variable and only set once the token is really + // shifted (not during read). Otherwise you would sometimes get off-by-one errors, when a rule is + // reduced after a token was read but not yet shifted. + $tokenId = $this->lexer->getNextToken($tokenValue, $startAttributes, $endAttributes); + + // map the lexer token id to the internally used symbols + $symbol = $tokenId >= 0 && $tokenId < $this->tokenToSymbolMapSize + ? $this->tokenToSymbol[$tokenId] + : $this->invalidSymbol; + + if ($symbol === $this->invalidSymbol) { + throw new \RangeException(sprintf( + 'The lexer returned an invalid token (id=%d, value=%s)', + $tokenId, $tokenValue + )); + } + + // This is necessary to assign some meaningful attributes to /* empty */ productions. They'll get + // the attributes of the next token, even though they don't contain it themselves. + $this->startAttributeStack[$stackPos+1] = $startAttributes; + $this->endAttributeStack[$stackPos+1] = $endAttributes; + $this->lookaheadStartAttributes = $startAttributes; + + //$this->traceRead($symbol); + } + + $idx = $this->actionBase[$state] + $symbol; + if ((($idx >= 0 && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $symbol) + || ($state < $this->YY2TBLSTATE + && ($idx = $this->actionBase[$state + $this->numNonLeafStates] + $symbol) >= 0 + && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $symbol)) + && ($action = $this->action[$idx]) !== $this->defaultAction) { + /* + * >= numNonLeafStates: shift and reduce + * > 0: shift + * = 0: accept + * < 0: reduce + * = -YYUNEXPECTED: error + */ + if ($action > 0) { + /* shift */ + //$this->traceShift($symbol); + + ++$stackPos; + $stateStack[$stackPos] = $state = $action; + $this->semStack[$stackPos] = $tokenValue; + $this->startAttributeStack[$stackPos] = $startAttributes; + $this->endAttributeStack[$stackPos] = $endAttributes; + $this->endAttributes = $endAttributes; + $symbol = self::SYMBOL_NONE; + + if ($this->errorState) { + --$this->errorState; + } + + if ($action < $this->numNonLeafStates) { + continue; + } + + /* $yyn >= numNonLeafStates means shift-and-reduce */ + $rule = $action - $this->numNonLeafStates; + } else { + $rule = -$action; + } + } else { + $rule = $this->actionDefault[$state]; + } + } + + for (;;) { + if ($rule === 0) { + /* accept */ + //$this->traceAccept(); + return $this->semValue; + } elseif ($rule !== $this->unexpectedTokenRule) { + /* reduce */ + //$this->traceReduce($rule); + + try { + $this->reduceCallbacks[$rule]($stackPos); + } catch (Error $e) { + if (-1 === $e->getStartLine() && isset($startAttributes['startLine'])) { + $e->setStartLine($startAttributes['startLine']); + } + + $this->emitError($e); + // Can't recover from this type of error + return null; + } + + /* Goto - shift nonterminal */ + $lastEndAttributes = $this->endAttributeStack[$stackPos]; + $stackPos -= $this->ruleToLength[$rule]; + $nonTerminal = $this->ruleToNonTerminal[$rule]; + $idx = $this->gotoBase[$nonTerminal] + $stateStack[$stackPos]; + if ($idx >= 0 && $idx < $this->gotoTableSize && $this->gotoCheck[$idx] === $nonTerminal) { + $state = $this->goto[$idx]; + } else { + $state = $this->gotoDefault[$nonTerminal]; + } + + ++$stackPos; + $stateStack[$stackPos] = $state; + $this->semStack[$stackPos] = $this->semValue; + $this->endAttributeStack[$stackPos] = $lastEndAttributes; + } else { + /* error */ + switch ($this->errorState) { + case 0: + $msg = $this->getErrorMessage($symbol, $state); + $this->emitError(new Error($msg, $startAttributes + $endAttributes)); + // Break missing intentionally + case 1: + case 2: + $this->errorState = 3; + + // Pop until error-expecting state uncovered + while (!( + (($idx = $this->actionBase[$state] + $this->errorSymbol) >= 0 + && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $this->errorSymbol) + || ($state < $this->YY2TBLSTATE + && ($idx = $this->actionBase[$state + $this->numNonLeafStates] + $this->errorSymbol) >= 0 + && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $this->errorSymbol) + ) || ($action = $this->action[$idx]) === $this->defaultAction) { // Not totally sure about this + if ($stackPos <= 0) { + // Could not recover from error + return null; + } + $state = $stateStack[--$stackPos]; + //$this->tracePop($state); + } + + //$this->traceShift($this->errorSymbol); + ++$stackPos; + $stateStack[$stackPos] = $state = $action; + + // We treat the error symbol as being empty, so we reset the end attributes + // to the end attributes of the last non-error symbol + $this->endAttributeStack[$stackPos] = $this->endAttributeStack[$stackPos - 1]; + $this->endAttributes = $this->endAttributeStack[$stackPos - 1]; + break; + + case 3: + if ($symbol === 0) { + // Reached EOF without recovering from error + return null; + } + + //$this->traceDiscard($symbol); + $symbol = self::SYMBOL_NONE; + break 2; + } + } + + if ($state < $this->numNonLeafStates) { + break; + } + + /* >= numNonLeafStates means shift-and-reduce */ + $rule = $state - $this->numNonLeafStates; + } + } + + throw new \RuntimeException('Reached end of parser loop'); + } + + protected function emitError(Error $error) { + $this->errorHandler->handleError($error); + } + + /** + * Format error message including expected tokens. + * + * @param int $symbol Unexpected symbol + * @param int $state State at time of error + * + * @return string Formatted error message + */ + protected function getErrorMessage(int $symbol, int $state) : string { + $expectedString = ''; + if ($expected = $this->getExpectedTokens($state)) { + $expectedString = ', expecting ' . implode(' or ', $expected); + } + + return 'Syntax error, unexpected ' . $this->symbolToName[$symbol] . $expectedString; + } + + /** + * Get limited number of expected tokens in given state. + * + * @param int $state State + * + * @return string[] Expected tokens. If too many, an empty array is returned. + */ + protected function getExpectedTokens(int $state) : array { + $expected = []; + + $base = $this->actionBase[$state]; + foreach ($this->symbolToName as $symbol => $name) { + $idx = $base + $symbol; + if ($idx >= 0 && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $symbol + || $state < $this->YY2TBLSTATE + && ($idx = $this->actionBase[$state + $this->numNonLeafStates] + $symbol) >= 0 + && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $symbol + ) { + if ($this->action[$idx] !== $this->unexpectedTokenRule + && $this->action[$idx] !== $this->defaultAction + && $symbol !== $this->errorSymbol + ) { + if (count($expected) === 4) { + /* Too many expected tokens */ + return []; + } + + $expected[] = $name; + } + } + } + + return $expected; + } + + /* + * Tracing functions used for debugging the parser. + */ + + /* + protected function traceNewState($state, $symbol) { + echo '% State ' . $state + . ', Lookahead ' . ($symbol == self::SYMBOL_NONE ? '--none--' : $this->symbolToName[$symbol]) . "\n"; + } + + protected function traceRead($symbol) { + echo '% Reading ' . $this->symbolToName[$symbol] . "\n"; + } + + protected function traceShift($symbol) { + echo '% Shift ' . $this->symbolToName[$symbol] . "\n"; + } + + protected function traceAccept() { + echo "% Accepted.\n"; + } + + protected function traceReduce($n) { + echo '% Reduce by (' . $n . ') ' . $this->productions[$n] . "\n"; + } + + protected function tracePop($state) { + echo '% Recovering, uncovered state ' . $state . "\n"; + } + + protected function traceDiscard($symbol) { + echo '% Discard ' . $this->symbolToName[$symbol] . "\n"; + } + */ + + /* + * Helper functions invoked by semantic actions + */ + + /** + * Moves statements of semicolon-style namespaces into $ns->stmts and checks various error conditions. + * + * @param Node\Stmt[] $stmts + * @return Node\Stmt[] + */ + protected function handleNamespaces(array $stmts) : array { + $hasErrored = false; + $style = $this->getNamespacingStyle($stmts); + if (null === $style) { + // not namespaced, nothing to do + return $stmts; + } elseif ('brace' === $style) { + // For braced namespaces we only have to check that there are no invalid statements between the namespaces + $afterFirstNamespace = false; + foreach ($stmts as $stmt) { + if ($stmt instanceof Node\Stmt\Namespace_) { + $afterFirstNamespace = true; + } elseif (!$stmt instanceof Node\Stmt\HaltCompiler + && !$stmt instanceof Node\Stmt\Nop + && $afterFirstNamespace && !$hasErrored) { + $this->emitError(new Error( + 'No code may exist outside of namespace {}', $stmt->getAttributes())); + $hasErrored = true; // Avoid one error for every statement + } + } + return $stmts; + } else { + // For semicolon namespaces we have to move the statements after a namespace declaration into ->stmts + $resultStmts = []; + $targetStmts =& $resultStmts; + $lastNs = null; + foreach ($stmts as $stmt) { + if ($stmt instanceof Node\Stmt\Namespace_) { + if ($lastNs !== null) { + $this->fixupNamespaceAttributes($lastNs); + } + if ($stmt->stmts === null) { + $stmt->stmts = []; + $targetStmts =& $stmt->stmts; + $resultStmts[] = $stmt; + } else { + // This handles the invalid case of mixed style namespaces + $resultStmts[] = $stmt; + $targetStmts =& $resultStmts; + } + $lastNs = $stmt; + } elseif ($stmt instanceof Node\Stmt\HaltCompiler) { + // __halt_compiler() is not moved into the namespace + $resultStmts[] = $stmt; + } else { + $targetStmts[] = $stmt; + } + } + if ($lastNs !== null) { + $this->fixupNamespaceAttributes($lastNs); + } + return $resultStmts; + } + } + + private function fixupNamespaceAttributes(Node\Stmt\Namespace_ $stmt) { + // We moved the statements into the namespace node, as such the end of the namespace node + // needs to be extended to the end of the statements. + if (empty($stmt->stmts)) { + return; + } + + // We only move the builtin end attributes here. This is the best we can do with the + // knowledge we have. + $endAttributes = ['endLine', 'endFilePos', 'endTokenPos']; + $lastStmt = $stmt->stmts[count($stmt->stmts) - 1]; + foreach ($endAttributes as $endAttribute) { + if ($lastStmt->hasAttribute($endAttribute)) { + $stmt->setAttribute($endAttribute, $lastStmt->getAttribute($endAttribute)); + } + } + } + + /** + * Determine namespacing style (semicolon or brace) + * + * @param Node[] $stmts Top-level statements. + * + * @return null|string One of "semicolon", "brace" or null (no namespaces) + */ + private function getNamespacingStyle(array $stmts) { + $style = null; + $hasNotAllowedStmts = false; + foreach ($stmts as $i => $stmt) { + if ($stmt instanceof Node\Stmt\Namespace_) { + $currentStyle = null === $stmt->stmts ? 'semicolon' : 'brace'; + if (null === $style) { + $style = $currentStyle; + if ($hasNotAllowedStmts) { + $this->emitError(new Error( + 'Namespace declaration statement has to be the very first statement in the script', + $stmt->getLine() // Avoid marking the entire namespace as an error + )); + } + } elseif ($style !== $currentStyle) { + $this->emitError(new Error( + 'Cannot mix bracketed namespace declarations with unbracketed namespace declarations', + $stmt->getLine() // Avoid marking the entire namespace as an error + )); + // Treat like semicolon style for namespace normalization + return 'semicolon'; + } + continue; + } + + /* declare(), __halt_compiler() and nops can be used before a namespace declaration */ + if ($stmt instanceof Node\Stmt\Declare_ + || $stmt instanceof Node\Stmt\HaltCompiler + || $stmt instanceof Node\Stmt\Nop) { + continue; + } + + /* There may be a hashbang line at the very start of the file */ + if ($i === 0 && $stmt instanceof Node\Stmt\InlineHTML && preg_match('/\A#!.*\r?\n\z/', $stmt->value)) { + continue; + } + + /* Everything else if forbidden before namespace declarations */ + $hasNotAllowedStmts = true; + } + return $style; + } + + /** + * Fix up parsing of static property calls in PHP 5. + * + * In PHP 5 A::$b[c][d] and A::$b[c][d]() have very different interpretation. The former is + * interpreted as (A::$b)[c][d], while the latter is the same as A::{$b[c][d]}(). We parse the + * latter as the former initially and this method fixes the AST into the correct form when we + * encounter the "()". + * + * @param Node\Expr\StaticPropertyFetch|Node\Expr\ArrayDimFetch $prop + * @param Node\Arg[] $args + * @param array $attributes + * + * @return Expr\StaticCall + */ + protected function fixupPhp5StaticPropCall($prop, array $args, array $attributes) : Expr\StaticCall { + if ($prop instanceof Node\Expr\StaticPropertyFetch) { + $name = $prop->name instanceof VarLikeIdentifier + ? $prop->name->toString() : $prop->name; + $var = new Expr\Variable($name, $prop->name->getAttributes()); + return new Expr\StaticCall($prop->class, $var, $args, $attributes); + } elseif ($prop instanceof Node\Expr\ArrayDimFetch) { + $tmp = $prop; + while ($tmp->var instanceof Node\Expr\ArrayDimFetch) { + $tmp = $tmp->var; + } + + /** @var Expr\StaticPropertyFetch $staticProp */ + $staticProp = $tmp->var; + + // Set start attributes to attributes of innermost node + $tmp = $prop; + $this->fixupStartAttributes($tmp, $staticProp->name); + while ($tmp->var instanceof Node\Expr\ArrayDimFetch) { + $tmp = $tmp->var; + $this->fixupStartAttributes($tmp, $staticProp->name); + } + + $name = $staticProp->name instanceof VarLikeIdentifier + ? $staticProp->name->toString() : $staticProp->name; + $tmp->var = new Expr\Variable($name, $staticProp->name->getAttributes()); + return new Expr\StaticCall($staticProp->class, $prop, $args, $attributes); + } else { + throw new \Exception; + } + } + + protected function fixupStartAttributes(Node $to, Node $from) { + $startAttributes = ['startLine', 'startFilePos', 'startTokenPos']; + foreach ($startAttributes as $startAttribute) { + if ($from->hasAttribute($startAttribute)) { + $to->setAttribute($startAttribute, $from->getAttribute($startAttribute)); + } + } + } + + protected function handleBuiltinTypes(Name $name) { + $scalarTypes = [ + 'bool' => true, + 'int' => true, + 'float' => true, + 'string' => true, + 'iterable' => true, + 'void' => true, + 'object' => true, + 'null' => true, + 'false' => true, + ]; + + if (!$name->isUnqualified()) { + return $name; + } + + $lowerName = $name->toLowerString(); + if (!isset($scalarTypes[$lowerName])) { + return $name; + } + + return new Node\Identifier($lowerName, $name->getAttributes()); + } + + /** + * Get combined start and end attributes at a stack location + * + * @param int $pos Stack location + * + * @return array Combined start and end attributes + */ + protected function getAttributesAt(int $pos) : array { + return $this->startAttributeStack[$pos] + $this->endAttributeStack[$pos]; + } + + protected function getFloatCastKind(string $cast): int + { + $cast = strtolower($cast); + if (strpos($cast, 'float') !== false) { + return Double::KIND_FLOAT; + } + + if (strpos($cast, 'real') !== false) { + return Double::KIND_REAL; + } + + return Double::KIND_DOUBLE; + } + + protected function parseLNumber($str, $attributes, $allowInvalidOctal = false) { + try { + return LNumber::fromString($str, $attributes, $allowInvalidOctal); + } catch (Error $error) { + $this->emitError($error); + // Use dummy value + return new LNumber(0, $attributes); + } + } + + /** + * Parse a T_NUM_STRING token into either an integer or string node. + * + * @param string $str Number string + * @param array $attributes Attributes + * + * @return LNumber|String_ Integer or string node. + */ + protected function parseNumString(string $str, array $attributes) { + if (!preg_match('/^(?:0|-?[1-9][0-9]*)$/', $str)) { + return new String_($str, $attributes); + } + + $num = +$str; + if (!is_int($num)) { + return new String_($str, $attributes); + } + + return new LNumber($num, $attributes); + } + + protected function stripIndentation( + string $string, int $indentLen, string $indentChar, + bool $newlineAtStart, bool $newlineAtEnd, array $attributes + ) { + if ($indentLen === 0) { + return $string; + } + + $start = $newlineAtStart ? '(?:(?<=\n)|\A)' : '(?<=\n)'; + $end = $newlineAtEnd ? '(?:(?=[\r\n])|\z)' : '(?=[\r\n])'; + $regex = '/' . $start . '([ \t]*)(' . $end . ')?/'; + return preg_replace_callback( + $regex, + function ($matches) use ($indentLen, $indentChar, $attributes) { + $prefix = substr($matches[1], 0, $indentLen); + if (false !== strpos($prefix, $indentChar === " " ? "\t" : " ")) { + $this->emitError(new Error( + 'Invalid indentation - tabs and spaces cannot be mixed', $attributes + )); + } elseif (strlen($prefix) < $indentLen && !isset($matches[2])) { + $this->emitError(new Error( + 'Invalid body indentation level ' . + '(expecting an indentation level of at least ' . $indentLen . ')', + $attributes + )); + } + return substr($matches[0], strlen($prefix)); + }, + $string + ); + } + + protected function parseDocString( + string $startToken, $contents, string $endToken, + array $attributes, array $endTokenAttributes, bool $parseUnicodeEscape + ) { + $kind = strpos($startToken, "'") === false + ? String_::KIND_HEREDOC : String_::KIND_NOWDOC; + + $regex = '/\A[bB]?<<<[ \t]*[\'"]?([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)[\'"]?(?:\r\n|\n|\r)\z/'; + $result = preg_match($regex, $startToken, $matches); + assert($result === 1); + $label = $matches[1]; + + $result = preg_match('/\A[ \t]*/', $endToken, $matches); + assert($result === 1); + $indentation = $matches[0]; + + $attributes['kind'] = $kind; + $attributes['docLabel'] = $label; + $attributes['docIndentation'] = $indentation; + + $indentHasSpaces = false !== strpos($indentation, " "); + $indentHasTabs = false !== strpos($indentation, "\t"); + if ($indentHasSpaces && $indentHasTabs) { + $this->emitError(new Error( + 'Invalid indentation - tabs and spaces cannot be mixed', + $endTokenAttributes + )); + + // Proceed processing as if this doc string is not indented + $indentation = ''; + } + + $indentLen = \strlen($indentation); + $indentChar = $indentHasSpaces ? " " : "\t"; + + if (\is_string($contents)) { + if ($contents === '') { + return new String_('', $attributes); + } + + $contents = $this->stripIndentation( + $contents, $indentLen, $indentChar, true, true, $attributes + ); + $contents = preg_replace('~(\r\n|\n|\r)\z~', '', $contents); + + if ($kind === String_::KIND_HEREDOC) { + $contents = String_::parseEscapeSequences($contents, null, $parseUnicodeEscape); + } + + return new String_($contents, $attributes); + } else { + assert(count($contents) > 0); + if (!$contents[0] instanceof Node\Scalar\EncapsedStringPart) { + // If there is no leading encapsed string part, pretend there is an empty one + $this->stripIndentation( + '', $indentLen, $indentChar, true, false, $contents[0]->getAttributes() + ); + } + + $newContents = []; + foreach ($contents as $i => $part) { + if ($part instanceof Node\Scalar\EncapsedStringPart) { + $isLast = $i === \count($contents) - 1; + $part->value = $this->stripIndentation( + $part->value, $indentLen, $indentChar, + $i === 0, $isLast, $part->getAttributes() + ); + $part->value = String_::parseEscapeSequences($part->value, null, $parseUnicodeEscape); + if ($isLast) { + $part->value = preg_replace('~(\r\n|\n|\r)\z~', '', $part->value); + } + if ('' === $part->value) { + continue; + } + } + $newContents[] = $part; + } + return new Encapsed($newContents, $attributes); + } + } + + /** + * Create attributes for a zero-length common-capturing nop. + * + * @param Comment[] $comments + * @return array + */ + protected function createCommentNopAttributes(array $comments) { + $comment = $comments[count($comments) - 1]; + $commentEndLine = $comment->getEndLine(); + $commentEndFilePos = $comment->getEndFilePos(); + $commentEndTokenPos = $comment->getEndTokenPos(); + + $attributes = ['comments' => $comments]; + if (-1 !== $commentEndLine) { + $attributes['startLine'] = $commentEndLine; + $attributes['endLine'] = $commentEndLine; + } + if (-1 !== $commentEndFilePos) { + $attributes['startFilePos'] = $commentEndFilePos + 1; + $attributes['endFilePos'] = $commentEndFilePos; + } + if (-1 !== $commentEndTokenPos) { + $attributes['startTokenPos'] = $commentEndTokenPos + 1; + $attributes['endTokenPos'] = $commentEndTokenPos; + } + return $attributes; + } + + protected function checkModifier($a, $b, $modifierPos) { + // Jumping through some hoops here because verifyModifier() is also used elsewhere + try { + Class_::verifyModifier($a, $b); + } catch (Error $error) { + $error->setAttributes($this->getAttributesAt($modifierPos)); + $this->emitError($error); + } + } + + protected function checkParam(Param $node) { + if ($node->variadic && null !== $node->default) { + $this->emitError(new Error( + 'Variadic parameter cannot have a default value', + $node->default->getAttributes() + )); + } + } + + protected function checkTryCatch(TryCatch $node) { + if (empty($node->catches) && null === $node->finally) { + $this->emitError(new Error( + 'Cannot use try without catch or finally', $node->getAttributes() + )); + } + } + + protected function checkNamespace(Namespace_ $node) { + if ($node->name && $node->name->isSpecialClassName()) { + $this->emitError(new Error( + sprintf('Cannot use \'%s\' as namespace name', $node->name), + $node->name->getAttributes() + )); + } + + if (null !== $node->stmts) { + foreach ($node->stmts as $stmt) { + if ($stmt instanceof Namespace_) { + $this->emitError(new Error( + 'Namespace declarations cannot be nested', $stmt->getAttributes() + )); + } + } + } + } + + protected function checkClass(Class_ $node, $namePos) { + if (null !== $node->name && $node->name->isSpecialClassName()) { + $this->emitError(new Error( + sprintf('Cannot use \'%s\' as class name as it is reserved', $node->name), + $this->getAttributesAt($namePos) + )); + } + + if ($node->extends && $node->extends->isSpecialClassName()) { + $this->emitError(new Error( + sprintf('Cannot use \'%s\' as class name as it is reserved', $node->extends), + $node->extends->getAttributes() + )); + } + + foreach ($node->implements as $interface) { + if ($interface->isSpecialClassName()) { + $this->emitError(new Error( + sprintf('Cannot use \'%s\' as interface name as it is reserved', $interface), + $interface->getAttributes() + )); + } + } + } + + protected function checkInterface(Interface_ $node, $namePos) { + if (null !== $node->name && $node->name->isSpecialClassName()) { + $this->emitError(new Error( + sprintf('Cannot use \'%s\' as class name as it is reserved', $node->name), + $this->getAttributesAt($namePos) + )); + } + + foreach ($node->extends as $interface) { + if ($interface->isSpecialClassName()) { + $this->emitError(new Error( + sprintf('Cannot use \'%s\' as interface name as it is reserved', $interface), + $interface->getAttributes() + )); + } + } + } + + protected function checkClassMethod(ClassMethod $node, $modifierPos) { + if ($node->flags & Class_::MODIFIER_STATIC) { + switch ($node->name->toLowerString()) { + case '__construct': + $this->emitError(new Error( + sprintf('Constructor %s() cannot be static', $node->name), + $this->getAttributesAt($modifierPos))); + break; + case '__destruct': + $this->emitError(new Error( + sprintf('Destructor %s() cannot be static', $node->name), + $this->getAttributesAt($modifierPos))); + break; + case '__clone': + $this->emitError(new Error( + sprintf('Clone method %s() cannot be static', $node->name), + $this->getAttributesAt($modifierPos))); + break; + } + } + } + + protected function checkClassConst(ClassConst $node, $modifierPos) { + if ($node->flags & Class_::MODIFIER_STATIC) { + $this->emitError(new Error( + "Cannot use 'static' as constant modifier", + $this->getAttributesAt($modifierPos))); + } + if ($node->flags & Class_::MODIFIER_ABSTRACT) { + $this->emitError(new Error( + "Cannot use 'abstract' as constant modifier", + $this->getAttributesAt($modifierPos))); + } + if ($node->flags & Class_::MODIFIER_FINAL) { + $this->emitError(new Error( + "Cannot use 'final' as constant modifier", + $this->getAttributesAt($modifierPos))); + } + } + + protected function checkProperty(Property $node, $modifierPos) { + if ($node->flags & Class_::MODIFIER_ABSTRACT) { + $this->emitError(new Error('Properties cannot be declared abstract', + $this->getAttributesAt($modifierPos))); + } + + if ($node->flags & Class_::MODIFIER_FINAL) { + $this->emitError(new Error('Properties cannot be declared final', + $this->getAttributesAt($modifierPos))); + } + } + + protected function checkUseUse(UseUse $node, $namePos) { + if ($node->alias && $node->alias->isSpecialClassName()) { + $this->emitError(new Error( + sprintf( + 'Cannot use %s as %s because \'%2$s\' is a special class name', + $node->name, $node->alias + ), + $this->getAttributesAt($namePos) + )); + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/ParserFactory.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/ParserFactory.php new file mode 100644 index 0000000..f041e7f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/ParserFactory.php @@ -0,0 +1,44 @@ +type ? $this->p($node->type) . ' ' : '') + . ($node->byRef ? '&' : '') + . ($node->variadic ? '...' : '') + . $this->p($node->var) + . ($node->default ? ' = ' . $this->p($node->default) : ''); + } + + protected function pArg(Node\Arg $node) { + return ($node->byRef ? '&' : '') . ($node->unpack ? '...' : '') . $this->p($node->value); + } + + protected function pConst(Node\Const_ $node) { + return $node->name . ' = ' . $this->p($node->value); + } + + protected function pNullableType(Node\NullableType $node) { + return '?' . $this->p($node->type); + } + + protected function pUnionType(Node\UnionType $node) { + return $this->pImplode($node->types, '|'); + } + + protected function pIdentifier(Node\Identifier $node) { + return $node->name; + } + + protected function pVarLikeIdentifier(Node\VarLikeIdentifier $node) { + return '$' . $node->name; + } + + // Names + + protected function pName(Name $node) { + return implode('\\', $node->parts); + } + + protected function pName_FullyQualified(Name\FullyQualified $node) { + return '\\' . implode('\\', $node->parts); + } + + protected function pName_Relative(Name\Relative $node) { + return 'namespace\\' . implode('\\', $node->parts); + } + + // Magic Constants + + protected function pScalar_MagicConst_Class(MagicConst\Class_ $node) { + return '__CLASS__'; + } + + protected function pScalar_MagicConst_Dir(MagicConst\Dir $node) { + return '__DIR__'; + } + + protected function pScalar_MagicConst_File(MagicConst\File $node) { + return '__FILE__'; + } + + protected function pScalar_MagicConst_Function(MagicConst\Function_ $node) { + return '__FUNCTION__'; + } + + protected function pScalar_MagicConst_Line(MagicConst\Line $node) { + return '__LINE__'; + } + + protected function pScalar_MagicConst_Method(MagicConst\Method $node) { + return '__METHOD__'; + } + + protected function pScalar_MagicConst_Namespace(MagicConst\Namespace_ $node) { + return '__NAMESPACE__'; + } + + protected function pScalar_MagicConst_Trait(MagicConst\Trait_ $node) { + return '__TRAIT__'; + } + + // Scalars + + protected function pScalar_String(Scalar\String_ $node) { + $kind = $node->getAttribute('kind', Scalar\String_::KIND_SINGLE_QUOTED); + switch ($kind) { + case Scalar\String_::KIND_NOWDOC: + $label = $node->getAttribute('docLabel'); + if ($label && !$this->containsEndLabel($node->value, $label)) { + if ($node->value === '') { + return "<<<'$label'\n$label" . $this->docStringEndToken; + } + + return "<<<'$label'\n$node->value\n$label" + . $this->docStringEndToken; + } + /* break missing intentionally */ + case Scalar\String_::KIND_SINGLE_QUOTED: + return $this->pSingleQuotedString($node->value); + case Scalar\String_::KIND_HEREDOC: + $label = $node->getAttribute('docLabel'); + if ($label && !$this->containsEndLabel($node->value, $label)) { + if ($node->value === '') { + return "<<<$label\n$label" . $this->docStringEndToken; + } + + $escaped = $this->escapeString($node->value, null); + return "<<<$label\n" . $escaped . "\n$label" + . $this->docStringEndToken; + } + /* break missing intentionally */ + case Scalar\String_::KIND_DOUBLE_QUOTED: + return '"' . $this->escapeString($node->value, '"') . '"'; + } + throw new \Exception('Invalid string kind'); + } + + protected function pScalar_Encapsed(Scalar\Encapsed $node) { + if ($node->getAttribute('kind') === Scalar\String_::KIND_HEREDOC) { + $label = $node->getAttribute('docLabel'); + if ($label && !$this->encapsedContainsEndLabel($node->parts, $label)) { + if (count($node->parts) === 1 + && $node->parts[0] instanceof Scalar\EncapsedStringPart + && $node->parts[0]->value === '' + ) { + return "<<<$label\n$label" . $this->docStringEndToken; + } + + return "<<<$label\n" . $this->pEncapsList($node->parts, null) . "\n$label" + . $this->docStringEndToken; + } + } + return '"' . $this->pEncapsList($node->parts, '"') . '"'; + } + + protected function pScalar_LNumber(Scalar\LNumber $node) { + if ($node->value === -\PHP_INT_MAX-1) { + // PHP_INT_MIN cannot be represented as a literal, + // because the sign is not part of the literal + return '(-' . \PHP_INT_MAX . '-1)'; + } + + $kind = $node->getAttribute('kind', Scalar\LNumber::KIND_DEC); + if (Scalar\LNumber::KIND_DEC === $kind) { + return (string) $node->value; + } + + if ($node->value < 0) { + $sign = '-'; + $str = (string) -$node->value; + } else { + $sign = ''; + $str = (string) $node->value; + } + switch ($kind) { + case Scalar\LNumber::KIND_BIN: + return $sign . '0b' . base_convert($str, 10, 2); + case Scalar\LNumber::KIND_OCT: + return $sign . '0' . base_convert($str, 10, 8); + case Scalar\LNumber::KIND_HEX: + return $sign . '0x' . base_convert($str, 10, 16); + } + throw new \Exception('Invalid number kind'); + } + + protected function pScalar_DNumber(Scalar\DNumber $node) { + if (!is_finite($node->value)) { + if ($node->value === \INF) { + return '\INF'; + } elseif ($node->value === -\INF) { + return '-\INF'; + } else { + return '\NAN'; + } + } + + // Try to find a short full-precision representation + $stringValue = sprintf('%.16G', $node->value); + if ($node->value !== (double) $stringValue) { + $stringValue = sprintf('%.17G', $node->value); + } + + // %G is locale dependent and there exists no locale-independent alternative. We don't want + // mess with switching locales here, so let's assume that a comma is the only non-standard + // decimal separator we may encounter... + $stringValue = str_replace(',', '.', $stringValue); + + // ensure that number is really printed as float + return preg_match('/^-?[0-9]+$/', $stringValue) ? $stringValue . '.0' : $stringValue; + } + + protected function pScalar_EncapsedStringPart(Scalar\EncapsedStringPart $node) { + throw new \LogicException('Cannot directly print EncapsedStringPart'); + } + + // Assignments + + protected function pExpr_Assign(Expr\Assign $node) { + return $this->pInfixOp(Expr\Assign::class, $node->var, ' = ', $node->expr); + } + + protected function pExpr_AssignRef(Expr\AssignRef $node) { + return $this->pInfixOp(Expr\AssignRef::class, $node->var, ' =& ', $node->expr); + } + + protected function pExpr_AssignOp_Plus(AssignOp\Plus $node) { + return $this->pInfixOp(AssignOp\Plus::class, $node->var, ' += ', $node->expr); + } + + protected function pExpr_AssignOp_Minus(AssignOp\Minus $node) { + return $this->pInfixOp(AssignOp\Minus::class, $node->var, ' -= ', $node->expr); + } + + protected function pExpr_AssignOp_Mul(AssignOp\Mul $node) { + return $this->pInfixOp(AssignOp\Mul::class, $node->var, ' *= ', $node->expr); + } + + protected function pExpr_AssignOp_Div(AssignOp\Div $node) { + return $this->pInfixOp(AssignOp\Div::class, $node->var, ' /= ', $node->expr); + } + + protected function pExpr_AssignOp_Concat(AssignOp\Concat $node) { + return $this->pInfixOp(AssignOp\Concat::class, $node->var, ' .= ', $node->expr); + } + + protected function pExpr_AssignOp_Mod(AssignOp\Mod $node) { + return $this->pInfixOp(AssignOp\Mod::class, $node->var, ' %= ', $node->expr); + } + + protected function pExpr_AssignOp_BitwiseAnd(AssignOp\BitwiseAnd $node) { + return $this->pInfixOp(AssignOp\BitwiseAnd::class, $node->var, ' &= ', $node->expr); + } + + protected function pExpr_AssignOp_BitwiseOr(AssignOp\BitwiseOr $node) { + return $this->pInfixOp(AssignOp\BitwiseOr::class, $node->var, ' |= ', $node->expr); + } + + protected function pExpr_AssignOp_BitwiseXor(AssignOp\BitwiseXor $node) { + return $this->pInfixOp(AssignOp\BitwiseXor::class, $node->var, ' ^= ', $node->expr); + } + + protected function pExpr_AssignOp_ShiftLeft(AssignOp\ShiftLeft $node) { + return $this->pInfixOp(AssignOp\ShiftLeft::class, $node->var, ' <<= ', $node->expr); + } + + protected function pExpr_AssignOp_ShiftRight(AssignOp\ShiftRight $node) { + return $this->pInfixOp(AssignOp\ShiftRight::class, $node->var, ' >>= ', $node->expr); + } + + protected function pExpr_AssignOp_Pow(AssignOp\Pow $node) { + return $this->pInfixOp(AssignOp\Pow::class, $node->var, ' **= ', $node->expr); + } + + protected function pExpr_AssignOp_Coalesce(AssignOp\Coalesce $node) { + return $this->pInfixOp(AssignOp\Coalesce::class, $node->var, ' ??= ', $node->expr); + } + + // Binary expressions + + protected function pExpr_BinaryOp_Plus(BinaryOp\Plus $node) { + return $this->pInfixOp(BinaryOp\Plus::class, $node->left, ' + ', $node->right); + } + + protected function pExpr_BinaryOp_Minus(BinaryOp\Minus $node) { + return $this->pInfixOp(BinaryOp\Minus::class, $node->left, ' - ', $node->right); + } + + protected function pExpr_BinaryOp_Mul(BinaryOp\Mul $node) { + return $this->pInfixOp(BinaryOp\Mul::class, $node->left, ' * ', $node->right); + } + + protected function pExpr_BinaryOp_Div(BinaryOp\Div $node) { + return $this->pInfixOp(BinaryOp\Div::class, $node->left, ' / ', $node->right); + } + + protected function pExpr_BinaryOp_Concat(BinaryOp\Concat $node) { + return $this->pInfixOp(BinaryOp\Concat::class, $node->left, ' . ', $node->right); + } + + protected function pExpr_BinaryOp_Mod(BinaryOp\Mod $node) { + return $this->pInfixOp(BinaryOp\Mod::class, $node->left, ' % ', $node->right); + } + + protected function pExpr_BinaryOp_BooleanAnd(BinaryOp\BooleanAnd $node) { + return $this->pInfixOp(BinaryOp\BooleanAnd::class, $node->left, ' && ', $node->right); + } + + protected function pExpr_BinaryOp_BooleanOr(BinaryOp\BooleanOr $node) { + return $this->pInfixOp(BinaryOp\BooleanOr::class, $node->left, ' || ', $node->right); + } + + protected function pExpr_BinaryOp_BitwiseAnd(BinaryOp\BitwiseAnd $node) { + return $this->pInfixOp(BinaryOp\BitwiseAnd::class, $node->left, ' & ', $node->right); + } + + protected function pExpr_BinaryOp_BitwiseOr(BinaryOp\BitwiseOr $node) { + return $this->pInfixOp(BinaryOp\BitwiseOr::class, $node->left, ' | ', $node->right); + } + + protected function pExpr_BinaryOp_BitwiseXor(BinaryOp\BitwiseXor $node) { + return $this->pInfixOp(BinaryOp\BitwiseXor::class, $node->left, ' ^ ', $node->right); + } + + protected function pExpr_BinaryOp_ShiftLeft(BinaryOp\ShiftLeft $node) { + return $this->pInfixOp(BinaryOp\ShiftLeft::class, $node->left, ' << ', $node->right); + } + + protected function pExpr_BinaryOp_ShiftRight(BinaryOp\ShiftRight $node) { + return $this->pInfixOp(BinaryOp\ShiftRight::class, $node->left, ' >> ', $node->right); + } + + protected function pExpr_BinaryOp_Pow(BinaryOp\Pow $node) { + return $this->pInfixOp(BinaryOp\Pow::class, $node->left, ' ** ', $node->right); + } + + protected function pExpr_BinaryOp_LogicalAnd(BinaryOp\LogicalAnd $node) { + return $this->pInfixOp(BinaryOp\LogicalAnd::class, $node->left, ' and ', $node->right); + } + + protected function pExpr_BinaryOp_LogicalOr(BinaryOp\LogicalOr $node) { + return $this->pInfixOp(BinaryOp\LogicalOr::class, $node->left, ' or ', $node->right); + } + + protected function pExpr_BinaryOp_LogicalXor(BinaryOp\LogicalXor $node) { + return $this->pInfixOp(BinaryOp\LogicalXor::class, $node->left, ' xor ', $node->right); + } + + protected function pExpr_BinaryOp_Equal(BinaryOp\Equal $node) { + return $this->pInfixOp(BinaryOp\Equal::class, $node->left, ' == ', $node->right); + } + + protected function pExpr_BinaryOp_NotEqual(BinaryOp\NotEqual $node) { + return $this->pInfixOp(BinaryOp\NotEqual::class, $node->left, ' != ', $node->right); + } + + protected function pExpr_BinaryOp_Identical(BinaryOp\Identical $node) { + return $this->pInfixOp(BinaryOp\Identical::class, $node->left, ' === ', $node->right); + } + + protected function pExpr_BinaryOp_NotIdentical(BinaryOp\NotIdentical $node) { + return $this->pInfixOp(BinaryOp\NotIdentical::class, $node->left, ' !== ', $node->right); + } + + protected function pExpr_BinaryOp_Spaceship(BinaryOp\Spaceship $node) { + return $this->pInfixOp(BinaryOp\Spaceship::class, $node->left, ' <=> ', $node->right); + } + + protected function pExpr_BinaryOp_Greater(BinaryOp\Greater $node) { + return $this->pInfixOp(BinaryOp\Greater::class, $node->left, ' > ', $node->right); + } + + protected function pExpr_BinaryOp_GreaterOrEqual(BinaryOp\GreaterOrEqual $node) { + return $this->pInfixOp(BinaryOp\GreaterOrEqual::class, $node->left, ' >= ', $node->right); + } + + protected function pExpr_BinaryOp_Smaller(BinaryOp\Smaller $node) { + return $this->pInfixOp(BinaryOp\Smaller::class, $node->left, ' < ', $node->right); + } + + protected function pExpr_BinaryOp_SmallerOrEqual(BinaryOp\SmallerOrEqual $node) { + return $this->pInfixOp(BinaryOp\SmallerOrEqual::class, $node->left, ' <= ', $node->right); + } + + protected function pExpr_BinaryOp_Coalesce(BinaryOp\Coalesce $node) { + return $this->pInfixOp(BinaryOp\Coalesce::class, $node->left, ' ?? ', $node->right); + } + + protected function pExpr_Instanceof(Expr\Instanceof_ $node) { + return $this->pInfixOp(Expr\Instanceof_::class, $node->expr, ' instanceof ', $node->class); + } + + // Unary expressions + + protected function pExpr_BooleanNot(Expr\BooleanNot $node) { + return $this->pPrefixOp(Expr\BooleanNot::class, '!', $node->expr); + } + + protected function pExpr_BitwiseNot(Expr\BitwiseNot $node) { + return $this->pPrefixOp(Expr\BitwiseNot::class, '~', $node->expr); + } + + protected function pExpr_UnaryMinus(Expr\UnaryMinus $node) { + if ($node->expr instanceof Expr\UnaryMinus || $node->expr instanceof Expr\PreDec) { + // Enforce -(-$expr) instead of --$expr + return '-(' . $this->p($node->expr) . ')'; + } + return $this->pPrefixOp(Expr\UnaryMinus::class, '-', $node->expr); + } + + protected function pExpr_UnaryPlus(Expr\UnaryPlus $node) { + if ($node->expr instanceof Expr\UnaryPlus || $node->expr instanceof Expr\PreInc) { + // Enforce +(+$expr) instead of ++$expr + return '+(' . $this->p($node->expr) . ')'; + } + return $this->pPrefixOp(Expr\UnaryPlus::class, '+', $node->expr); + } + + protected function pExpr_PreInc(Expr\PreInc $node) { + return $this->pPrefixOp(Expr\PreInc::class, '++', $node->var); + } + + protected function pExpr_PreDec(Expr\PreDec $node) { + return $this->pPrefixOp(Expr\PreDec::class, '--', $node->var); + } + + protected function pExpr_PostInc(Expr\PostInc $node) { + return $this->pPostfixOp(Expr\PostInc::class, $node->var, '++'); + } + + protected function pExpr_PostDec(Expr\PostDec $node) { + return $this->pPostfixOp(Expr\PostDec::class, $node->var, '--'); + } + + protected function pExpr_ErrorSuppress(Expr\ErrorSuppress $node) { + return $this->pPrefixOp(Expr\ErrorSuppress::class, '@', $node->expr); + } + + protected function pExpr_YieldFrom(Expr\YieldFrom $node) { + return $this->pPrefixOp(Expr\YieldFrom::class, 'yield from ', $node->expr); + } + + protected function pExpr_Print(Expr\Print_ $node) { + return $this->pPrefixOp(Expr\Print_::class, 'print ', $node->expr); + } + + // Casts + + protected function pExpr_Cast_Int(Cast\Int_ $node) { + return $this->pPrefixOp(Cast\Int_::class, '(int) ', $node->expr); + } + + protected function pExpr_Cast_Double(Cast\Double $node) { + $kind = $node->getAttribute('kind', Cast\Double::KIND_DOUBLE); + if ($kind === Cast\Double::KIND_DOUBLE) { + $cast = '(double)'; + } elseif ($kind === Cast\Double::KIND_FLOAT) { + $cast = '(float)'; + } elseif ($kind === Cast\Double::KIND_REAL) { + $cast = '(real)'; + } + return $this->pPrefixOp(Cast\Double::class, $cast . ' ', $node->expr); + } + + protected function pExpr_Cast_String(Cast\String_ $node) { + return $this->pPrefixOp(Cast\String_::class, '(string) ', $node->expr); + } + + protected function pExpr_Cast_Array(Cast\Array_ $node) { + return $this->pPrefixOp(Cast\Array_::class, '(array) ', $node->expr); + } + + protected function pExpr_Cast_Object(Cast\Object_ $node) { + return $this->pPrefixOp(Cast\Object_::class, '(object) ', $node->expr); + } + + protected function pExpr_Cast_Bool(Cast\Bool_ $node) { + return $this->pPrefixOp(Cast\Bool_::class, '(bool) ', $node->expr); + } + + protected function pExpr_Cast_Unset(Cast\Unset_ $node) { + return $this->pPrefixOp(Cast\Unset_::class, '(unset) ', $node->expr); + } + + // Function calls and similar constructs + + protected function pExpr_FuncCall(Expr\FuncCall $node) { + return $this->pCallLhs($node->name) + . '(' . $this->pMaybeMultiline($node->args) . ')'; + } + + protected function pExpr_MethodCall(Expr\MethodCall $node) { + return $this->pDereferenceLhs($node->var) . '->' . $this->pObjectProperty($node->name) + . '(' . $this->pMaybeMultiline($node->args) . ')'; + } + + protected function pExpr_StaticCall(Expr\StaticCall $node) { + return $this->pDereferenceLhs($node->class) . '::' + . ($node->name instanceof Expr + ? ($node->name instanceof Expr\Variable + ? $this->p($node->name) + : '{' . $this->p($node->name) . '}') + : $node->name) + . '(' . $this->pMaybeMultiline($node->args) . ')'; + } + + protected function pExpr_Empty(Expr\Empty_ $node) { + return 'empty(' . $this->p($node->expr) . ')'; + } + + protected function pExpr_Isset(Expr\Isset_ $node) { + return 'isset(' . $this->pCommaSeparated($node->vars) . ')'; + } + + protected function pExpr_Eval(Expr\Eval_ $node) { + return 'eval(' . $this->p($node->expr) . ')'; + } + + protected function pExpr_Include(Expr\Include_ $node) { + static $map = [ + Expr\Include_::TYPE_INCLUDE => 'include', + Expr\Include_::TYPE_INCLUDE_ONCE => 'include_once', + Expr\Include_::TYPE_REQUIRE => 'require', + Expr\Include_::TYPE_REQUIRE_ONCE => 'require_once', + ]; + + return $map[$node->type] . ' ' . $this->p($node->expr); + } + + protected function pExpr_List(Expr\List_ $node) { + return 'list(' . $this->pCommaSeparated($node->items) . ')'; + } + + // Other + + protected function pExpr_Error(Expr\Error $node) { + throw new \LogicException('Cannot pretty-print AST with Error nodes'); + } + + protected function pExpr_Variable(Expr\Variable $node) { + if ($node->name instanceof Expr) { + return '${' . $this->p($node->name) . '}'; + } else { + return '$' . $node->name; + } + } + + protected function pExpr_Array(Expr\Array_ $node) { + $syntax = $node->getAttribute('kind', + $this->options['shortArraySyntax'] ? Expr\Array_::KIND_SHORT : Expr\Array_::KIND_LONG); + if ($syntax === Expr\Array_::KIND_SHORT) { + return '[' . $this->pMaybeMultiline($node->items, true) . ']'; + } else { + return 'array(' . $this->pMaybeMultiline($node->items, true) . ')'; + } + } + + protected function pExpr_ArrayItem(Expr\ArrayItem $node) { + return (null !== $node->key ? $this->p($node->key) . ' => ' : '') + . ($node->byRef ? '&' : '') + . ($node->unpack ? '...' : '') + . $this->p($node->value); + } + + protected function pExpr_ArrayDimFetch(Expr\ArrayDimFetch $node) { + return $this->pDereferenceLhs($node->var) + . '[' . (null !== $node->dim ? $this->p($node->dim) : '') . ']'; + } + + protected function pExpr_ConstFetch(Expr\ConstFetch $node) { + return $this->p($node->name); + } + + protected function pExpr_ClassConstFetch(Expr\ClassConstFetch $node) { + return $this->p($node->class) . '::' . $this->p($node->name); + } + + protected function pExpr_PropertyFetch(Expr\PropertyFetch $node) { + return $this->pDereferenceLhs($node->var) . '->' . $this->pObjectProperty($node->name); + } + + protected function pExpr_StaticPropertyFetch(Expr\StaticPropertyFetch $node) { + return $this->pDereferenceLhs($node->class) . '::$' . $this->pObjectProperty($node->name); + } + + protected function pExpr_ShellExec(Expr\ShellExec $node) { + return '`' . $this->pEncapsList($node->parts, '`') . '`'; + } + + protected function pExpr_Closure(Expr\Closure $node) { + return ($node->static ? 'static ' : '') + . 'function ' . ($node->byRef ? '&' : '') + . '(' . $this->pCommaSeparated($node->params) . ')' + . (!empty($node->uses) ? ' use(' . $this->pCommaSeparated($node->uses) . ')' : '') + . (null !== $node->returnType ? ' : ' . $this->p($node->returnType) : '') + . ' {' . $this->pStmts($node->stmts) . $this->nl . '}'; + } + + protected function pExpr_ArrowFunction(Expr\ArrowFunction $node) { + return ($node->static ? 'static ' : '') + . 'fn' . ($node->byRef ? '&' : '') + . '(' . $this->pCommaSeparated($node->params) . ')' + . (null !== $node->returnType ? ': ' . $this->p($node->returnType) : '') + . ' => ' + . $this->p($node->expr); + } + + protected function pExpr_ClosureUse(Expr\ClosureUse $node) { + return ($node->byRef ? '&' : '') . $this->p($node->var); + } + + protected function pExpr_New(Expr\New_ $node) { + if ($node->class instanceof Stmt\Class_) { + $args = $node->args ? '(' . $this->pMaybeMultiline($node->args) . ')' : ''; + return 'new ' . $this->pClassCommon($node->class, $args); + } + return 'new ' . $this->p($node->class) . '(' . $this->pMaybeMultiline($node->args) . ')'; + } + + protected function pExpr_Clone(Expr\Clone_ $node) { + return 'clone ' . $this->p($node->expr); + } + + protected function pExpr_Ternary(Expr\Ternary $node) { + // a bit of cheating: we treat the ternary as a binary op where the ?...: part is the operator. + // this is okay because the part between ? and : never needs parentheses. + return $this->pInfixOp(Expr\Ternary::class, + $node->cond, ' ?' . (null !== $node->if ? ' ' . $this->p($node->if) . ' ' : '') . ': ', $node->else + ); + } + + protected function pExpr_Exit(Expr\Exit_ $node) { + $kind = $node->getAttribute('kind', Expr\Exit_::KIND_DIE); + return ($kind === Expr\Exit_::KIND_EXIT ? 'exit' : 'die') + . (null !== $node->expr ? '(' . $this->p($node->expr) . ')' : ''); + } + + protected function pExpr_Yield(Expr\Yield_ $node) { + if ($node->value === null) { + return 'yield'; + } else { + // this is a bit ugly, but currently there is no way to detect whether the parentheses are necessary + return '(yield ' + . ($node->key !== null ? $this->p($node->key) . ' => ' : '') + . $this->p($node->value) + . ')'; + } + } + + // Declarations + + protected function pStmt_Namespace(Stmt\Namespace_ $node) { + if ($this->canUseSemicolonNamespaces) { + return 'namespace ' . $this->p($node->name) . ';' + . $this->nl . $this->pStmts($node->stmts, false); + } else { + return 'namespace' . (null !== $node->name ? ' ' . $this->p($node->name) : '') + . ' {' . $this->pStmts($node->stmts) . $this->nl . '}'; + } + } + + protected function pStmt_Use(Stmt\Use_ $node) { + return 'use ' . $this->pUseType($node->type) + . $this->pCommaSeparated($node->uses) . ';'; + } + + protected function pStmt_GroupUse(Stmt\GroupUse $node) { + return 'use ' . $this->pUseType($node->type) . $this->pName($node->prefix) + . '\{' . $this->pCommaSeparated($node->uses) . '};'; + } + + protected function pStmt_UseUse(Stmt\UseUse $node) { + return $this->pUseType($node->type) . $this->p($node->name) + . (null !== $node->alias ? ' as ' . $node->alias : ''); + } + + protected function pUseType($type) { + return $type === Stmt\Use_::TYPE_FUNCTION ? 'function ' + : ($type === Stmt\Use_::TYPE_CONSTANT ? 'const ' : ''); + } + + protected function pStmt_Interface(Stmt\Interface_ $node) { + return 'interface ' . $node->name + . (!empty($node->extends) ? ' extends ' . $this->pCommaSeparated($node->extends) : '') + . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}'; + } + + protected function pStmt_Class(Stmt\Class_ $node) { + return $this->pClassCommon($node, ' ' . $node->name); + } + + protected function pStmt_Trait(Stmt\Trait_ $node) { + return 'trait ' . $node->name + . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}'; + } + + protected function pStmt_TraitUse(Stmt\TraitUse $node) { + return 'use ' . $this->pCommaSeparated($node->traits) + . (empty($node->adaptations) + ? ';' + : ' {' . $this->pStmts($node->adaptations) . $this->nl . '}'); + } + + protected function pStmt_TraitUseAdaptation_Precedence(Stmt\TraitUseAdaptation\Precedence $node) { + return $this->p($node->trait) . '::' . $node->method + . ' insteadof ' . $this->pCommaSeparated($node->insteadof) . ';'; + } + + protected function pStmt_TraitUseAdaptation_Alias(Stmt\TraitUseAdaptation\Alias $node) { + return (null !== $node->trait ? $this->p($node->trait) . '::' : '') + . $node->method . ' as' + . (null !== $node->newModifier ? ' ' . rtrim($this->pModifiers($node->newModifier), ' ') : '') + . (null !== $node->newName ? ' ' . $node->newName : '') + . ';'; + } + + protected function pStmt_Property(Stmt\Property $node) { + return (0 === $node->flags ? 'var ' : $this->pModifiers($node->flags)) + . ($node->type ? $this->p($node->type) . ' ' : '') + . $this->pCommaSeparated($node->props) . ';'; + } + + protected function pStmt_PropertyProperty(Stmt\PropertyProperty $node) { + return '$' . $node->name + . (null !== $node->default ? ' = ' . $this->p($node->default) : ''); + } + + protected function pStmt_ClassMethod(Stmt\ClassMethod $node) { + return $this->pModifiers($node->flags) + . 'function ' . ($node->byRef ? '&' : '') . $node->name + . '(' . $this->pCommaSeparated($node->params) . ')' + . (null !== $node->returnType ? ' : ' . $this->p($node->returnType) : '') + . (null !== $node->stmts + ? $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}' + : ';'); + } + + protected function pStmt_ClassConst(Stmt\ClassConst $node) { + return $this->pModifiers($node->flags) + . 'const ' . $this->pCommaSeparated($node->consts) . ';'; + } + + protected function pStmt_Function(Stmt\Function_ $node) { + return 'function ' . ($node->byRef ? '&' : '') . $node->name + . '(' . $this->pCommaSeparated($node->params) . ')' + . (null !== $node->returnType ? ' : ' . $this->p($node->returnType) : '') + . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}'; + } + + protected function pStmt_Const(Stmt\Const_ $node) { + return 'const ' . $this->pCommaSeparated($node->consts) . ';'; + } + + protected function pStmt_Declare(Stmt\Declare_ $node) { + return 'declare (' . $this->pCommaSeparated($node->declares) . ')' + . (null !== $node->stmts ? ' {' . $this->pStmts($node->stmts) . $this->nl . '}' : ';'); + } + + protected function pStmt_DeclareDeclare(Stmt\DeclareDeclare $node) { + return $node->key . '=' . $this->p($node->value); + } + + // Control flow + + protected function pStmt_If(Stmt\If_ $node) { + return 'if (' . $this->p($node->cond) . ') {' + . $this->pStmts($node->stmts) . $this->nl . '}' + . ($node->elseifs ? ' ' . $this->pImplode($node->elseifs, ' ') : '') + . (null !== $node->else ? ' ' . $this->p($node->else) : ''); + } + + protected function pStmt_ElseIf(Stmt\ElseIf_ $node) { + return 'elseif (' . $this->p($node->cond) . ') {' + . $this->pStmts($node->stmts) . $this->nl . '}'; + } + + protected function pStmt_Else(Stmt\Else_ $node) { + return 'else {' . $this->pStmts($node->stmts) . $this->nl . '}'; + } + + protected function pStmt_For(Stmt\For_ $node) { + return 'for (' + . $this->pCommaSeparated($node->init) . ';' . (!empty($node->cond) ? ' ' : '') + . $this->pCommaSeparated($node->cond) . ';' . (!empty($node->loop) ? ' ' : '') + . $this->pCommaSeparated($node->loop) + . ') {' . $this->pStmts($node->stmts) . $this->nl . '}'; + } + + protected function pStmt_Foreach(Stmt\Foreach_ $node) { + return 'foreach (' . $this->p($node->expr) . ' as ' + . (null !== $node->keyVar ? $this->p($node->keyVar) . ' => ' : '') + . ($node->byRef ? '&' : '') . $this->p($node->valueVar) . ') {' + . $this->pStmts($node->stmts) . $this->nl . '}'; + } + + protected function pStmt_While(Stmt\While_ $node) { + return 'while (' . $this->p($node->cond) . ') {' + . $this->pStmts($node->stmts) . $this->nl . '}'; + } + + protected function pStmt_Do(Stmt\Do_ $node) { + return 'do {' . $this->pStmts($node->stmts) . $this->nl + . '} while (' . $this->p($node->cond) . ');'; + } + + protected function pStmt_Switch(Stmt\Switch_ $node) { + return 'switch (' . $this->p($node->cond) . ') {' + . $this->pStmts($node->cases) . $this->nl . '}'; + } + + protected function pStmt_Case(Stmt\Case_ $node) { + return (null !== $node->cond ? 'case ' . $this->p($node->cond) : 'default') . ':' + . $this->pStmts($node->stmts); + } + + protected function pStmt_TryCatch(Stmt\TryCatch $node) { + return 'try {' . $this->pStmts($node->stmts) . $this->nl . '}' + . ($node->catches ? ' ' . $this->pImplode($node->catches, ' ') : '') + . ($node->finally !== null ? ' ' . $this->p($node->finally) : ''); + } + + protected function pStmt_Catch(Stmt\Catch_ $node) { + return 'catch (' . $this->pImplode($node->types, '|') . ' ' + . $this->p($node->var) + . ') {' . $this->pStmts($node->stmts) . $this->nl . '}'; + } + + protected function pStmt_Finally(Stmt\Finally_ $node) { + return 'finally {' . $this->pStmts($node->stmts) . $this->nl . '}'; + } + + protected function pStmt_Break(Stmt\Break_ $node) { + return 'break' . ($node->num !== null ? ' ' . $this->p($node->num) : '') . ';'; + } + + protected function pStmt_Continue(Stmt\Continue_ $node) { + return 'continue' . ($node->num !== null ? ' ' . $this->p($node->num) : '') . ';'; + } + + protected function pStmt_Return(Stmt\Return_ $node) { + return 'return' . (null !== $node->expr ? ' ' . $this->p($node->expr) : '') . ';'; + } + + protected function pStmt_Throw(Stmt\Throw_ $node) { + return 'throw ' . $this->p($node->expr) . ';'; + } + + protected function pStmt_Label(Stmt\Label $node) { + return $node->name . ':'; + } + + protected function pStmt_Goto(Stmt\Goto_ $node) { + return 'goto ' . $node->name . ';'; + } + + // Other + + protected function pStmt_Expression(Stmt\Expression $node) { + return $this->p($node->expr) . ';'; + } + + protected function pStmt_Echo(Stmt\Echo_ $node) { + return 'echo ' . $this->pCommaSeparated($node->exprs) . ';'; + } + + protected function pStmt_Static(Stmt\Static_ $node) { + return 'static ' . $this->pCommaSeparated($node->vars) . ';'; + } + + protected function pStmt_Global(Stmt\Global_ $node) { + return 'global ' . $this->pCommaSeparated($node->vars) . ';'; + } + + protected function pStmt_StaticVar(Stmt\StaticVar $node) { + return $this->p($node->var) + . (null !== $node->default ? ' = ' . $this->p($node->default) : ''); + } + + protected function pStmt_Unset(Stmt\Unset_ $node) { + return 'unset(' . $this->pCommaSeparated($node->vars) . ');'; + } + + protected function pStmt_InlineHTML(Stmt\InlineHTML $node) { + $newline = $node->getAttribute('hasLeadingNewline', true) ? "\n" : ''; + return '?>' . $newline . $node->value . 'remaining; + } + + protected function pStmt_Nop(Stmt\Nop $node) { + return ''; + } + + // Helpers + + protected function pClassCommon(Stmt\Class_ $node, $afterClassToken) { + return $this->pModifiers($node->flags) + . 'class' . $afterClassToken + . (null !== $node->extends ? ' extends ' . $this->p($node->extends) : '') + . (!empty($node->implements) ? ' implements ' . $this->pCommaSeparated($node->implements) : '') + . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}'; + } + + protected function pObjectProperty($node) { + if ($node instanceof Expr) { + return '{' . $this->p($node) . '}'; + } else { + return $node; + } + } + + protected function pEncapsList(array $encapsList, $quote) { + $return = ''; + foreach ($encapsList as $element) { + if ($element instanceof Scalar\EncapsedStringPart) { + $return .= $this->escapeString($element->value, $quote); + } else { + $return .= '{' . $this->p($element) . '}'; + } + } + + return $return; + } + + protected function pSingleQuotedString(string $string) { + return '\'' . addcslashes($string, '\'\\') . '\''; + } + + protected function escapeString($string, $quote) { + if (null === $quote) { + // For doc strings, don't escape newlines + $escaped = addcslashes($string, "\t\f\v$\\"); + } else { + $escaped = addcslashes($string, "\n\r\t\f\v$" . $quote . "\\"); + } + + // Escape other control characters + return preg_replace_callback('/([\0-\10\16-\37])(?=([0-7]?))/', function ($matches) { + $oct = decoct(ord($matches[1])); + if ($matches[2] !== '') { + // If there is a trailing digit, use the full three character form + return '\\' . str_pad($oct, 3, '0', \STR_PAD_LEFT); + } + return '\\' . $oct; + }, $escaped); + } + + protected function containsEndLabel($string, $label, $atStart = true, $atEnd = true) { + $start = $atStart ? '(?:^|[\r\n])' : '[\r\n]'; + $end = $atEnd ? '(?:$|[;\r\n])' : '[;\r\n]'; + return false !== strpos($string, $label) + && preg_match('/' . $start . $label . $end . '/', $string); + } + + protected function encapsedContainsEndLabel(array $parts, $label) { + foreach ($parts as $i => $part) { + $atStart = $i === 0; + $atEnd = $i === count($parts) - 1; + if ($part instanceof Scalar\EncapsedStringPart + && $this->containsEndLabel($part->value, $label, $atStart, $atEnd) + ) { + return true; + } + } + return false; + } + + protected function pDereferenceLhs(Node $node) { + if (!$this->dereferenceLhsRequiresParens($node)) { + return $this->p($node); + } else { + return '(' . $this->p($node) . ')'; + } + } + + protected function pCallLhs(Node $node) { + if (!$this->callLhsRequiresParens($node)) { + return $this->p($node); + } else { + return '(' . $this->p($node) . ')'; + } + } + + /** + * @param Node[] $nodes + * @return bool + */ + private function hasNodeWithComments(array $nodes) { + foreach ($nodes as $node) { + if ($node && $node->getComments()) { + return true; + } + } + return false; + } + + private function pMaybeMultiline(array $nodes, $trailingComma = false) { + if (!$this->hasNodeWithComments($nodes)) { + return $this->pCommaSeparated($nodes); + } else { + return $this->pCommaSeparatedMultiline($nodes, $trailingComma) . $this->nl; + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php new file mode 100644 index 0000000..05d9ba1 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php @@ -0,0 +1,1425 @@ + [ 0, 1], + Expr\BitwiseNot::class => [ 10, 1], + Expr\PreInc::class => [ 10, 1], + Expr\PreDec::class => [ 10, 1], + Expr\PostInc::class => [ 10, -1], + Expr\PostDec::class => [ 10, -1], + Expr\UnaryPlus::class => [ 10, 1], + Expr\UnaryMinus::class => [ 10, 1], + Cast\Int_::class => [ 10, 1], + Cast\Double::class => [ 10, 1], + Cast\String_::class => [ 10, 1], + Cast\Array_::class => [ 10, 1], + Cast\Object_::class => [ 10, 1], + Cast\Bool_::class => [ 10, 1], + Cast\Unset_::class => [ 10, 1], + Expr\ErrorSuppress::class => [ 10, 1], + Expr\Instanceof_::class => [ 20, 0], + Expr\BooleanNot::class => [ 30, 1], + BinaryOp\Mul::class => [ 40, -1], + BinaryOp\Div::class => [ 40, -1], + BinaryOp\Mod::class => [ 40, -1], + BinaryOp\Plus::class => [ 50, -1], + BinaryOp\Minus::class => [ 50, -1], + BinaryOp\Concat::class => [ 50, -1], + BinaryOp\ShiftLeft::class => [ 60, -1], + BinaryOp\ShiftRight::class => [ 60, -1], + BinaryOp\Smaller::class => [ 70, 0], + BinaryOp\SmallerOrEqual::class => [ 70, 0], + BinaryOp\Greater::class => [ 70, 0], + BinaryOp\GreaterOrEqual::class => [ 70, 0], + BinaryOp\Equal::class => [ 80, 0], + BinaryOp\NotEqual::class => [ 80, 0], + BinaryOp\Identical::class => [ 80, 0], + BinaryOp\NotIdentical::class => [ 80, 0], + BinaryOp\Spaceship::class => [ 80, 0], + BinaryOp\BitwiseAnd::class => [ 90, -1], + BinaryOp\BitwiseXor::class => [100, -1], + BinaryOp\BitwiseOr::class => [110, -1], + BinaryOp\BooleanAnd::class => [120, -1], + BinaryOp\BooleanOr::class => [130, -1], + BinaryOp\Coalesce::class => [140, 1], + Expr\Ternary::class => [150, -1], + // parser uses %left for assignments, but they really behave as %right + Expr\Assign::class => [160, 1], + Expr\AssignRef::class => [160, 1], + AssignOp\Plus::class => [160, 1], + AssignOp\Minus::class => [160, 1], + AssignOp\Mul::class => [160, 1], + AssignOp\Div::class => [160, 1], + AssignOp\Concat::class => [160, 1], + AssignOp\Mod::class => [160, 1], + AssignOp\BitwiseAnd::class => [160, 1], + AssignOp\BitwiseOr::class => [160, 1], + AssignOp\BitwiseXor::class => [160, 1], + AssignOp\ShiftLeft::class => [160, 1], + AssignOp\ShiftRight::class => [160, 1], + AssignOp\Pow::class => [160, 1], + AssignOp\Coalesce::class => [160, 1], + Expr\YieldFrom::class => [165, 1], + Expr\Print_::class => [168, 1], + BinaryOp\LogicalAnd::class => [170, -1], + BinaryOp\LogicalXor::class => [180, -1], + BinaryOp\LogicalOr::class => [190, -1], + Expr\Include_::class => [200, -1], + ]; + + /** @var int Current indentation level. */ + protected $indentLevel; + /** @var string Newline including current indentation. */ + protected $nl; + /** @var string Token placed at end of doc string to ensure it is followed by a newline. */ + protected $docStringEndToken; + /** @var bool Whether semicolon namespaces can be used (i.e. no global namespace is used) */ + protected $canUseSemicolonNamespaces; + /** @var array Pretty printer options */ + protected $options; + + /** @var TokenStream Original tokens for use in format-preserving pretty print */ + protected $origTokens; + /** @var Internal\Differ Differ for node lists */ + protected $nodeListDiffer; + /** @var bool[] Map determining whether a certain character is a label character */ + protected $labelCharMap; + /** + * @var int[][] Map from token classes and subnode names to FIXUP_* constants. This is used + * during format-preserving prints to place additional parens/braces if necessary. + */ + protected $fixupMap; + /** + * @var int[][] Map from "{$node->getType()}->{$subNode}" to ['left' => $l, 'right' => $r], + * where $l and $r specify the token type that needs to be stripped when removing + * this node. + */ + protected $removalMap; + /** + * @var mixed[] Map from "{$node->getType()}->{$subNode}" to [$find, $beforeToken, $extraLeft, $extraRight]. + * $find is an optional token after which the insertion occurs. $extraLeft/Right + * are optionally added before/after the main insertions. + */ + protected $insertionMap; + /** + * @var string[] Map From "{$node->getType()}->{$subNode}" to string that should be inserted + * between elements of this list subnode. + */ + protected $listInsertionMap; + protected $emptyListInsertionMap; + /** @var int[] Map from "{$node->getType()}->{$subNode}" to token before which the modifiers + * should be reprinted. */ + protected $modifierChangeMap; + + /** + * Creates a pretty printer instance using the given options. + * + * Supported options: + * * bool $shortArraySyntax = false: Whether to use [] instead of array() as the default array + * syntax, if the node does not specify a format. + * + * @param array $options Dictionary of formatting options + */ + public function __construct(array $options = []) { + $this->docStringEndToken = '_DOC_STRING_END_' . mt_rand(); + + $defaultOptions = ['shortArraySyntax' => false]; + $this->options = $options + $defaultOptions; + } + + /** + * Reset pretty printing state. + */ + protected function resetState() { + $this->indentLevel = 0; + $this->nl = "\n"; + $this->origTokens = null; + } + + /** + * Set indentation level + * + * @param int $level Level in number of spaces + */ + protected function setIndentLevel(int $level) { + $this->indentLevel = $level; + $this->nl = "\n" . \str_repeat(' ', $level); + } + + /** + * Increase indentation level. + */ + protected function indent() { + $this->indentLevel += 4; + $this->nl .= ' '; + } + + /** + * Decrease indentation level. + */ + protected function outdent() { + assert($this->indentLevel >= 4); + $this->indentLevel -= 4; + $this->nl = "\n" . str_repeat(' ', $this->indentLevel); + } + + /** + * Pretty prints an array of statements. + * + * @param Node[] $stmts Array of statements + * + * @return string Pretty printed statements + */ + public function prettyPrint(array $stmts) : string { + $this->resetState(); + $this->preprocessNodes($stmts); + + return ltrim($this->handleMagicTokens($this->pStmts($stmts, false))); + } + + /** + * Pretty prints an expression. + * + * @param Expr $node Expression node + * + * @return string Pretty printed node + */ + public function prettyPrintExpr(Expr $node) : string { + $this->resetState(); + return $this->handleMagicTokens($this->p($node)); + } + + /** + * Pretty prints a file of statements (includes the opening prettyPrint($stmts); + + if ($stmts[0] instanceof Stmt\InlineHTML) { + $p = preg_replace('/^<\?php\s+\?>\n?/', '', $p); + } + if ($stmts[count($stmts) - 1] instanceof Stmt\InlineHTML) { + $p = preg_replace('/<\?php$/', '', rtrim($p)); + } + + return $p; + } + + /** + * Preprocesses the top-level nodes to initialize pretty printer state. + * + * @param Node[] $nodes Array of nodes + */ + protected function preprocessNodes(array $nodes) { + /* We can use semicolon-namespaces unless there is a global namespace declaration */ + $this->canUseSemicolonNamespaces = true; + foreach ($nodes as $node) { + if ($node instanceof Stmt\Namespace_ && null === $node->name) { + $this->canUseSemicolonNamespaces = false; + break; + } + } + } + + /** + * Handles (and removes) no-indent and doc-string-end tokens. + * + * @param string $str + * @return string + */ + protected function handleMagicTokens(string $str) : string { + // Replace doc-string-end tokens with nothing or a newline + $str = str_replace($this->docStringEndToken . ";\n", ";\n", $str); + $str = str_replace($this->docStringEndToken, "\n", $str); + + return $str; + } + + /** + * Pretty prints an array of nodes (statements) and indents them optionally. + * + * @param Node[] $nodes Array of nodes + * @param bool $indent Whether to indent the printed nodes + * + * @return string Pretty printed statements + */ + protected function pStmts(array $nodes, bool $indent = true) : string { + if ($indent) { + $this->indent(); + } + + $result = ''; + foreach ($nodes as $node) { + $comments = $node->getComments(); + if ($comments) { + $result .= $this->nl . $this->pComments($comments); + if ($node instanceof Stmt\Nop) { + continue; + } + } + + $result .= $this->nl . $this->p($node); + } + + if ($indent) { + $this->outdent(); + } + + return $result; + } + + /** + * Pretty-print an infix operation while taking precedence into account. + * + * @param string $class Node class of operator + * @param Node $leftNode Left-hand side node + * @param string $operatorString String representation of the operator + * @param Node $rightNode Right-hand side node + * + * @return string Pretty printed infix operation + */ + protected function pInfixOp(string $class, Node $leftNode, string $operatorString, Node $rightNode) : string { + list($precedence, $associativity) = $this->precedenceMap[$class]; + + return $this->pPrec($leftNode, $precedence, $associativity, -1) + . $operatorString + . $this->pPrec($rightNode, $precedence, $associativity, 1); + } + + /** + * Pretty-print a prefix operation while taking precedence into account. + * + * @param string $class Node class of operator + * @param string $operatorString String representation of the operator + * @param Node $node Node + * + * @return string Pretty printed prefix operation + */ + protected function pPrefixOp(string $class, string $operatorString, Node $node) : string { + list($precedence, $associativity) = $this->precedenceMap[$class]; + return $operatorString . $this->pPrec($node, $precedence, $associativity, 1); + } + + /** + * Pretty-print a postfix operation while taking precedence into account. + * + * @param string $class Node class of operator + * @param string $operatorString String representation of the operator + * @param Node $node Node + * + * @return string Pretty printed postfix operation + */ + protected function pPostfixOp(string $class, Node $node, string $operatorString) : string { + list($precedence, $associativity) = $this->precedenceMap[$class]; + return $this->pPrec($node, $precedence, $associativity, -1) . $operatorString; + } + + /** + * Prints an expression node with the least amount of parentheses necessary to preserve the meaning. + * + * @param Node $node Node to pretty print + * @param int $parentPrecedence Precedence of the parent operator + * @param int $parentAssociativity Associativity of parent operator + * (-1 is left, 0 is nonassoc, 1 is right) + * @param int $childPosition Position of the node relative to the operator + * (-1 is left, 1 is right) + * + * @return string The pretty printed node + */ + protected function pPrec(Node $node, int $parentPrecedence, int $parentAssociativity, int $childPosition) : string { + $class = \get_class($node); + if (isset($this->precedenceMap[$class])) { + $childPrecedence = $this->precedenceMap[$class][0]; + if ($childPrecedence > $parentPrecedence + || ($parentPrecedence === $childPrecedence && $parentAssociativity !== $childPosition) + ) { + return '(' . $this->p($node) . ')'; + } + } + + return $this->p($node); + } + + /** + * Pretty prints an array of nodes and implodes the printed values. + * + * @param Node[] $nodes Array of Nodes to be printed + * @param string $glue Character to implode with + * + * @return string Imploded pretty printed nodes + */ + protected function pImplode(array $nodes, string $glue = '') : string { + $pNodes = []; + foreach ($nodes as $node) { + if (null === $node) { + $pNodes[] = ''; + } else { + $pNodes[] = $this->p($node); + } + } + + return implode($glue, $pNodes); + } + + /** + * Pretty prints an array of nodes and implodes the printed values with commas. + * + * @param Node[] $nodes Array of Nodes to be printed + * + * @return string Comma separated pretty printed nodes + */ + protected function pCommaSeparated(array $nodes) : string { + return $this->pImplode($nodes, ', '); + } + + /** + * Pretty prints a comma-separated list of nodes in multiline style, including comments. + * + * The result includes a leading newline and one level of indentation (same as pStmts). + * + * @param Node[] $nodes Array of Nodes to be printed + * @param bool $trailingComma Whether to use a trailing comma + * + * @return string Comma separated pretty printed nodes in multiline style + */ + protected function pCommaSeparatedMultiline(array $nodes, bool $trailingComma) : string { + $this->indent(); + + $result = ''; + $lastIdx = count($nodes) - 1; + foreach ($nodes as $idx => $node) { + if ($node !== null) { + $comments = $node->getComments(); + if ($comments) { + $result .= $this->nl . $this->pComments($comments); + } + + $result .= $this->nl . $this->p($node); + } else { + $result .= $this->nl; + } + if ($trailingComma || $idx !== $lastIdx) { + $result .= ','; + } + } + + $this->outdent(); + return $result; + } + + /** + * Prints reformatted text of the passed comments. + * + * @param Comment[] $comments List of comments + * + * @return string Reformatted text of comments + */ + protected function pComments(array $comments) : string { + $formattedComments = []; + + foreach ($comments as $comment) { + $formattedComments[] = str_replace("\n", $this->nl, $comment->getReformattedText()); + } + + return implode($this->nl, $formattedComments); + } + + /** + * Perform a format-preserving pretty print of an AST. + * + * The format preservation is best effort. For some changes to the AST the formatting will not + * be preserved (at least not locally). + * + * In order to use this method a number of prerequisites must be satisfied: + * * The startTokenPos and endTokenPos attributes in the lexer must be enabled. + * * The CloningVisitor must be run on the AST prior to modification. + * * The original tokens must be provided, using the getTokens() method on the lexer. + * + * @param Node[] $stmts Modified AST with links to original AST + * @param Node[] $origStmts Original AST with token offset information + * @param array $origTokens Tokens of the original code + * + * @return string + */ + public function printFormatPreserving(array $stmts, array $origStmts, array $origTokens) : string { + $this->initializeNodeListDiffer(); + $this->initializeLabelCharMap(); + $this->initializeFixupMap(); + $this->initializeRemovalMap(); + $this->initializeInsertionMap(); + $this->initializeListInsertionMap(); + $this->initializeEmptyListInsertionMap(); + $this->initializeModifierChangeMap(); + + $this->resetState(); + $this->origTokens = new TokenStream($origTokens); + + $this->preprocessNodes($stmts); + + $pos = 0; + $result = $this->pArray($stmts, $origStmts, $pos, 0, 'File', 'stmts', null); + if (null !== $result) { + $result .= $this->origTokens->getTokenCode($pos, count($origTokens), 0); + } else { + // Fallback + // TODO Add pStmts($stmts, false); + } + + return ltrim($this->handleMagicTokens($result)); + } + + protected function pFallback(Node $node) { + return $this->{'p' . $node->getType()}($node); + } + + /** + * Pretty prints a node. + * + * This method also handles formatting preservation for nodes. + * + * @param Node $node Node to be pretty printed + * @param bool $parentFormatPreserved Whether parent node has preserved formatting + * + * @return string Pretty printed node + */ + protected function p(Node $node, $parentFormatPreserved = false) : string { + // No orig tokens means this is a normal pretty print without preservation of formatting + if (!$this->origTokens) { + return $this->{'p' . $node->getType()}($node); + } + + /** @var Node $origNode */ + $origNode = $node->getAttribute('origNode'); + if (null === $origNode) { + return $this->pFallback($node); + } + + $class = \get_class($node); + \assert($class === \get_class($origNode)); + + $startPos = $origNode->getStartTokenPos(); + $endPos = $origNode->getEndTokenPos(); + \assert($startPos >= 0 && $endPos >= 0); + + $fallbackNode = $node; + if ($node instanceof Expr\New_ && $node->class instanceof Stmt\Class_) { + // Normalize node structure of anonymous classes + $node = PrintableNewAnonClassNode::fromNewNode($node); + $origNode = PrintableNewAnonClassNode::fromNewNode($origNode); + } + + // InlineHTML node does not contain closing and opening PHP tags. If the parent formatting + // is not preserved, then we need to use the fallback code to make sure the tags are + // printed. + if ($node instanceof Stmt\InlineHTML && !$parentFormatPreserved) { + return $this->pFallback($fallbackNode); + } + + $indentAdjustment = $this->indentLevel - $this->origTokens->getIndentationBefore($startPos); + + $type = $node->getType(); + $fixupInfo = $this->fixupMap[$class] ?? null; + + $result = ''; + $pos = $startPos; + foreach ($node->getSubNodeNames() as $subNodeName) { + $subNode = $node->$subNodeName; + $origSubNode = $origNode->$subNodeName; + + if ((!$subNode instanceof Node && $subNode !== null) + || (!$origSubNode instanceof Node && $origSubNode !== null) + ) { + if ($subNode === $origSubNode) { + // Unchanged, can reuse old code + continue; + } + + if (is_array($subNode) && is_array($origSubNode)) { + // Array subnode changed, we might be able to reconstruct it + $listResult = $this->pArray( + $subNode, $origSubNode, $pos, $indentAdjustment, $type, $subNodeName, + $fixupInfo[$subNodeName] ?? null + ); + if (null === $listResult) { + return $this->pFallback($fallbackNode); + } + + $result .= $listResult; + continue; + } + + if (is_int($subNode) && is_int($origSubNode)) { + // Check if this is a modifier change + $key = $type . '->' . $subNodeName; + if (!isset($this->modifierChangeMap[$key])) { + return $this->pFallback($fallbackNode); + } + + $findToken = $this->modifierChangeMap[$key]; + $result .= $this->pModifiers($subNode); + $pos = $this->origTokens->findRight($pos, $findToken); + continue; + } + + // If a non-node, non-array subnode changed, we don't be able to do a partial + // reconstructions, as we don't have enough offset information. Pretty print the + // whole node instead. + return $this->pFallback($fallbackNode); + } + + $extraLeft = ''; + $extraRight = ''; + if ($origSubNode !== null) { + $subStartPos = $origSubNode->getStartTokenPos(); + $subEndPos = $origSubNode->getEndTokenPos(); + \assert($subStartPos >= 0 && $subEndPos >= 0); + } else { + if ($subNode === null) { + // Both null, nothing to do + continue; + } + + // A node has been inserted, check if we have insertion information for it + $key = $type . '->' . $subNodeName; + if (!isset($this->insertionMap[$key])) { + return $this->pFallback($fallbackNode); + } + + list($findToken, $beforeToken, $extraLeft, $extraRight) = $this->insertionMap[$key]; + if (null !== $findToken) { + $subStartPos = $this->origTokens->findRight($pos, $findToken) + + (int) !$beforeToken; + } else { + $subStartPos = $pos; + } + + if (null === $extraLeft && null !== $extraRight) { + // If inserting on the right only, skipping whitespace looks better + $subStartPos = $this->origTokens->skipRightWhitespace($subStartPos); + } + $subEndPos = $subStartPos - 1; + } + + if (null === $subNode) { + // A node has been removed, check if we have removal information for it + $key = $type . '->' . $subNodeName; + if (!isset($this->removalMap[$key])) { + return $this->pFallback($fallbackNode); + } + + // Adjust positions to account for additional tokens that must be skipped + $removalInfo = $this->removalMap[$key]; + if (isset($removalInfo['left'])) { + $subStartPos = $this->origTokens->skipLeft($subStartPos - 1, $removalInfo['left']) + 1; + } + if (isset($removalInfo['right'])) { + $subEndPos = $this->origTokens->skipRight($subEndPos + 1, $removalInfo['right']) - 1; + } + } + + $result .= $this->origTokens->getTokenCode($pos, $subStartPos, $indentAdjustment); + + if (null !== $subNode) { + $result .= $extraLeft; + + $origIndentLevel = $this->indentLevel; + $this->setIndentLevel($this->origTokens->getIndentationBefore($subStartPos) + $indentAdjustment); + + // If it's the same node that was previously in this position, it certainly doesn't + // need fixup. It's important to check this here, because our fixup checks are more + // conservative than strictly necessary. + if (isset($fixupInfo[$subNodeName]) + && $subNode->getAttribute('origNode') !== $origSubNode + ) { + $fixup = $fixupInfo[$subNodeName]; + $res = $this->pFixup($fixup, $subNode, $class, $subStartPos, $subEndPos); + } else { + $res = $this->p($subNode, true); + } + + $this->safeAppend($result, $res); + $this->setIndentLevel($origIndentLevel); + + $result .= $extraRight; + } + + $pos = $subEndPos + 1; + } + + $result .= $this->origTokens->getTokenCode($pos, $endPos + 1, $indentAdjustment); + return $result; + } + + /** + * Perform a format-preserving pretty print of an array. + * + * @param array $nodes New nodes + * @param array $origNodes Original nodes + * @param int $pos Current token position (updated by reference) + * @param int $indentAdjustment Adjustment for indentation + * @param string $parentNodeType Type of the containing node. + * @param string $subNodeName Name of array subnode. + * @param null|int $fixup Fixup information for array item nodes + * + * @return null|string Result of pretty print or null if cannot preserve formatting + */ + protected function pArray( + array $nodes, array $origNodes, int &$pos, int $indentAdjustment, + string $parentNodeType, string $subNodeName, $fixup + ) { + $diff = $this->nodeListDiffer->diffWithReplacements($origNodes, $nodes); + + $mapKey = $parentNodeType . '->' . $subNodeName; + $insertStr = $this->listInsertionMap[$mapKey] ?? null; + + $beforeFirstKeepOrReplace = true; + $delayedAdd = []; + $lastElemIndentLevel = $this->indentLevel; + + $insertNewline = false; + if ($insertStr === "\n") { + $insertStr = ''; + $insertNewline = true; + } + + if ($subNodeName === 'stmts' && \count($origNodes) === 1 && \count($nodes) !== 1) { + $startPos = $origNodes[0]->getStartTokenPos(); + $endPos = $origNodes[0]->getEndTokenPos(); + \assert($startPos >= 0 && $endPos >= 0); + if (!$this->origTokens->haveBraces($startPos, $endPos)) { + // This was a single statement without braces, but either additional statements + // have been added, or the single statement has been removed. This requires the + // addition of braces. For now fall back. + // TODO: Try to preserve formatting + return null; + } + } + + $result = ''; + foreach ($diff as $i => $diffElem) { + $diffType = $diffElem->type; + /** @var Node|null $arrItem */ + $arrItem = $diffElem->new; + /** @var Node|null $origArrItem */ + $origArrItem = $diffElem->old; + + if ($diffType === DiffElem::TYPE_KEEP || $diffType === DiffElem::TYPE_REPLACE) { + $beforeFirstKeepOrReplace = false; + + if ($origArrItem === null || $arrItem === null) { + // We can only handle the case where both are null + if ($origArrItem === $arrItem) { + continue; + } + return null; + } + + if (!$arrItem instanceof Node || !$origArrItem instanceof Node) { + // We can only deal with nodes. This can occur for Names, which use string arrays. + return null; + } + + $itemStartPos = $origArrItem->getStartTokenPos(); + $itemEndPos = $origArrItem->getEndTokenPos(); + \assert($itemStartPos >= 0 && $itemEndPos >= 0); + + $origIndentLevel = $this->indentLevel; + $lastElemIndentLevel = $this->origTokens->getIndentationBefore($itemStartPos) + $indentAdjustment; + $this->setIndentLevel($lastElemIndentLevel); + + $comments = $arrItem->getComments(); + $origComments = $origArrItem->getComments(); + $commentStartPos = $origComments ? $origComments[0]->getStartTokenPos() : $itemStartPos; + \assert($commentStartPos >= 0); + + $commentsChanged = $comments !== $origComments; + if ($commentsChanged) { + // Remove old comments + $itemStartPos = $commentStartPos; + } + + if (!empty($delayedAdd)) { + $result .= $this->origTokens->getTokenCode( + $pos, $commentStartPos, $indentAdjustment); + + /** @var Node $delayedAddNode */ + foreach ($delayedAdd as $delayedAddNode) { + if ($insertNewline) { + $delayedAddComments = $delayedAddNode->getComments(); + if ($delayedAddComments) { + $result .= $this->pComments($delayedAddComments) . $this->nl; + } + } + + $this->safeAppend($result, $this->p($delayedAddNode, true)); + + if ($insertNewline) { + $result .= $insertStr . $this->nl; + } else { + $result .= $insertStr; + } + } + + $result .= $this->origTokens->getTokenCode( + $commentStartPos, $itemStartPos, $indentAdjustment); + + $delayedAdd = []; + } else { + $result .= $this->origTokens->getTokenCode( + $pos, $itemStartPos, $indentAdjustment); + } + + if ($commentsChanged && $comments) { + // Add new comments + $result .= $this->pComments($comments) . $this->nl; + } + } elseif ($diffType === DiffElem::TYPE_ADD) { + if (null === $insertStr) { + // We don't have insertion information for this list type + return null; + } + + if ($insertStr === ', ' && $this->isMultiline($origNodes)) { + $insertStr = ','; + $insertNewline = true; + } + + if ($beforeFirstKeepOrReplace) { + // Will be inserted at the next "replace" or "keep" element + $delayedAdd[] = $arrItem; + continue; + } + + $itemStartPos = $pos; + $itemEndPos = $pos - 1; + + $origIndentLevel = $this->indentLevel; + $this->setIndentLevel($lastElemIndentLevel); + + if ($insertNewline) { + $comments = $arrItem->getComments(); + if ($comments) { + $result .= $this->nl . $this->pComments($comments); + } + $result .= $insertStr . $this->nl; + } else { + $result .= $insertStr; + } + } elseif ($diffType === DiffElem::TYPE_REMOVE) { + if ($i === 0) { + // TODO Handle removal at the start + return null; + } + + if (!$origArrItem instanceof Node) { + // We only support removal for nodes + return null; + } + + $itemEndPos = $origArrItem->getEndTokenPos(); + \assert($itemEndPos >= 0); + + $pos = $itemEndPos + 1; + continue; + } else { + throw new \Exception("Shouldn't happen"); + } + + if (null !== $fixup && $arrItem->getAttribute('origNode') !== $origArrItem) { + $res = $this->pFixup($fixup, $arrItem, null, $itemStartPos, $itemEndPos); + } else { + $res = $this->p($arrItem, true); + } + $this->safeAppend($result, $res); + + $this->setIndentLevel($origIndentLevel); + $pos = $itemEndPos + 1; + } + + if (!empty($delayedAdd)) { + if (!isset($this->emptyListInsertionMap[$mapKey])) { + return null; + } + + list($findToken, $extraLeft, $extraRight) = $this->emptyListInsertionMap[$mapKey]; + if (null !== $findToken) { + $insertPos = $this->origTokens->findRight($pos, $findToken) + 1; + $result .= $this->origTokens->getTokenCode($pos, $insertPos, $indentAdjustment); + $pos = $insertPos; + } + + $first = true; + $result .= $extraLeft; + foreach ($delayedAdd as $delayedAddNode) { + if (!$first) { + $result .= $insertStr; + } + $result .= $this->p($delayedAddNode, true); + $first = false; + } + $result .= $extraRight; + } + + return $result; + } + + /** + * Print node with fixups. + * + * Fixups here refer to the addition of extra parentheses, braces or other characters, that + * are required to preserve program semantics in a certain context (e.g. to maintain precedence + * or because only certain expressions are allowed in certain places). + * + * @param int $fixup Fixup type + * @param Node $subNode Subnode to print + * @param string|null $parentClass Class of parent node + * @param int $subStartPos Original start pos of subnode + * @param int $subEndPos Original end pos of subnode + * + * @return string Result of fixed-up print of subnode + */ + protected function pFixup(int $fixup, Node $subNode, $parentClass, int $subStartPos, int $subEndPos) : string { + switch ($fixup) { + case self::FIXUP_PREC_LEFT: + case self::FIXUP_PREC_RIGHT: + if (!$this->origTokens->haveParens($subStartPos, $subEndPos)) { + list($precedence, $associativity) = $this->precedenceMap[$parentClass]; + return $this->pPrec($subNode, $precedence, $associativity, + $fixup === self::FIXUP_PREC_LEFT ? -1 : 1); + } + break; + case self::FIXUP_CALL_LHS: + if ($this->callLhsRequiresParens($subNode) + && !$this->origTokens->haveParens($subStartPos, $subEndPos) + ) { + return '(' . $this->p($subNode) . ')'; + } + break; + case self::FIXUP_DEREF_LHS: + if ($this->dereferenceLhsRequiresParens($subNode) + && !$this->origTokens->haveParens($subStartPos, $subEndPos) + ) { + return '(' . $this->p($subNode) . ')'; + } + break; + case self::FIXUP_BRACED_NAME: + case self::FIXUP_VAR_BRACED_NAME: + if ($subNode instanceof Expr + && !$this->origTokens->haveBraces($subStartPos, $subEndPos) + ) { + return ($fixup === self::FIXUP_VAR_BRACED_NAME ? '$' : '') + . '{' . $this->p($subNode) . '}'; + } + break; + case self::FIXUP_ENCAPSED: + if (!$subNode instanceof Scalar\EncapsedStringPart + && !$this->origTokens->haveBraces($subStartPos, $subEndPos) + ) { + return '{' . $this->p($subNode) . '}'; + } + break; + default: + throw new \Exception('Cannot happen'); + } + + // Nothing special to do + return $this->p($subNode); + } + + /** + * Appends to a string, ensuring whitespace between label characters. + * + * Example: "echo" and "$x" result in "echo$x", but "echo" and "x" result in "echo x". + * Without safeAppend the result would be "echox", which does not preserve semantics. + * + * @param string $str + * @param string $append + */ + protected function safeAppend(string &$str, string $append) { + if ($str === "") { + $str = $append; + return; + } + + if ($append === "") { + return; + } + + if (!$this->labelCharMap[$append[0]] + || !$this->labelCharMap[$str[\strlen($str) - 1]]) { + $str .= $append; + } else { + $str .= " " . $append; + } + } + + /** + * Determines whether the LHS of a call must be wrapped in parenthesis. + * + * @param Node $node LHS of a call + * + * @return bool Whether parentheses are required + */ + protected function callLhsRequiresParens(Node $node) : bool { + return !($node instanceof Node\Name + || $node instanceof Expr\Variable + || $node instanceof Expr\ArrayDimFetch + || $node instanceof Expr\FuncCall + || $node instanceof Expr\MethodCall + || $node instanceof Expr\StaticCall + || $node instanceof Expr\Array_); + } + + /** + * Determines whether the LHS of a dereferencing operation must be wrapped in parenthesis. + * + * @param Node $node LHS of dereferencing operation + * + * @return bool Whether parentheses are required + */ + protected function dereferenceLhsRequiresParens(Node $node) : bool { + return !($node instanceof Expr\Variable + || $node instanceof Node\Name + || $node instanceof Expr\ArrayDimFetch + || $node instanceof Expr\PropertyFetch + || $node instanceof Expr\StaticPropertyFetch + || $node instanceof Expr\FuncCall + || $node instanceof Expr\MethodCall + || $node instanceof Expr\StaticCall + || $node instanceof Expr\Array_ + || $node instanceof Scalar\String_ + || $node instanceof Expr\ConstFetch + || $node instanceof Expr\ClassConstFetch); + } + + /** + * Print modifiers, including trailing whitespace. + * + * @param int $modifiers Modifier mask to print + * + * @return string Printed modifiers + */ + protected function pModifiers(int $modifiers) { + return ($modifiers & Stmt\Class_::MODIFIER_PUBLIC ? 'public ' : '') + . ($modifiers & Stmt\Class_::MODIFIER_PROTECTED ? 'protected ' : '') + . ($modifiers & Stmt\Class_::MODIFIER_PRIVATE ? 'private ' : '') + . ($modifiers & Stmt\Class_::MODIFIER_STATIC ? 'static ' : '') + . ($modifiers & Stmt\Class_::MODIFIER_ABSTRACT ? 'abstract ' : '') + . ($modifiers & Stmt\Class_::MODIFIER_FINAL ? 'final ' : ''); + } + + /** + * Determine whether a list of nodes uses multiline formatting. + * + * @param (Node|null)[] $nodes Node list + * + * @return bool Whether multiline formatting is used + */ + protected function isMultiline(array $nodes) : bool { + if (\count($nodes) < 2) { + return false; + } + + $pos = -1; + foreach ($nodes as $node) { + if (null === $node) { + continue; + } + + $endPos = $node->getEndTokenPos() + 1; + if ($pos >= 0) { + $text = $this->origTokens->getTokenCode($pos, $endPos, 0); + if (false === strpos($text, "\n")) { + // We require that a newline is present between *every* item. If the formatting + // is inconsistent, with only some items having newlines, we don't consider it + // as multiline + return false; + } + } + $pos = $endPos; + } + + return true; + } + + /** + * Lazily initializes label char map. + * + * The label char map determines whether a certain character may occur in a label. + */ + protected function initializeLabelCharMap() { + if ($this->labelCharMap) return; + + $this->labelCharMap = []; + for ($i = 0; $i < 256; $i++) { + // Since PHP 7.1 The lower range is 0x80. However, we also want to support code for + // older versions. + $this->labelCharMap[chr($i)] = $i >= 0x7f || ctype_alnum($i); + } + } + + /** + * Lazily initializes node list differ. + * + * The node list differ is used to determine differences between two array subnodes. + */ + protected function initializeNodeListDiffer() { + if ($this->nodeListDiffer) return; + + $this->nodeListDiffer = new Internal\Differ(function ($a, $b) { + if ($a instanceof Node && $b instanceof Node) { + return $a === $b->getAttribute('origNode'); + } + // Can happen for array destructuring + return $a === null && $b === null; + }); + } + + /** + * Lazily initializes fixup map. + * + * The fixup map is used to determine whether a certain subnode of a certain node may require + * some kind of "fixup" operation, e.g. the addition of parenthesis or braces. + */ + protected function initializeFixupMap() { + if ($this->fixupMap) return; + + $this->fixupMap = [ + Expr\PreInc::class => ['var' => self::FIXUP_PREC_RIGHT], + Expr\PreDec::class => ['var' => self::FIXUP_PREC_RIGHT], + Expr\PostInc::class => ['var' => self::FIXUP_PREC_LEFT], + Expr\PostDec::class => ['var' => self::FIXUP_PREC_LEFT], + Expr\Instanceof_::class => [ + 'expr' => self::FIXUP_PREC_LEFT, + 'class' => self::FIXUP_PREC_RIGHT, + ], + Expr\Ternary::class => [ + 'cond' => self::FIXUP_PREC_LEFT, + 'else' => self::FIXUP_PREC_RIGHT, + ], + + Expr\FuncCall::class => ['name' => self::FIXUP_CALL_LHS], + Expr\StaticCall::class => ['class' => self::FIXUP_DEREF_LHS], + Expr\ArrayDimFetch::class => ['var' => self::FIXUP_DEREF_LHS], + Expr\MethodCall::class => [ + 'var' => self::FIXUP_DEREF_LHS, + 'name' => self::FIXUP_BRACED_NAME, + ], + Expr\StaticPropertyFetch::class => [ + 'class' => self::FIXUP_DEREF_LHS, + 'name' => self::FIXUP_VAR_BRACED_NAME, + ], + Expr\PropertyFetch::class => [ + 'var' => self::FIXUP_DEREF_LHS, + 'name' => self::FIXUP_BRACED_NAME, + ], + Scalar\Encapsed::class => [ + 'parts' => self::FIXUP_ENCAPSED, + ], + ]; + + $binaryOps = [ + BinaryOp\Pow::class, BinaryOp\Mul::class, BinaryOp\Div::class, BinaryOp\Mod::class, + BinaryOp\Plus::class, BinaryOp\Minus::class, BinaryOp\Concat::class, + BinaryOp\ShiftLeft::class, BinaryOp\ShiftRight::class, BinaryOp\Smaller::class, + BinaryOp\SmallerOrEqual::class, BinaryOp\Greater::class, BinaryOp\GreaterOrEqual::class, + BinaryOp\Equal::class, BinaryOp\NotEqual::class, BinaryOp\Identical::class, + BinaryOp\NotIdentical::class, BinaryOp\Spaceship::class, BinaryOp\BitwiseAnd::class, + BinaryOp\BitwiseXor::class, BinaryOp\BitwiseOr::class, BinaryOp\BooleanAnd::class, + BinaryOp\BooleanOr::class, BinaryOp\Coalesce::class, BinaryOp\LogicalAnd::class, + BinaryOp\LogicalXor::class, BinaryOp\LogicalOr::class, + ]; + foreach ($binaryOps as $binaryOp) { + $this->fixupMap[$binaryOp] = [ + 'left' => self::FIXUP_PREC_LEFT, + 'right' => self::FIXUP_PREC_RIGHT + ]; + } + + $assignOps = [ + Expr\Assign::class, Expr\AssignRef::class, AssignOp\Plus::class, AssignOp\Minus::class, + AssignOp\Mul::class, AssignOp\Div::class, AssignOp\Concat::class, AssignOp\Mod::class, + AssignOp\BitwiseAnd::class, AssignOp\BitwiseOr::class, AssignOp\BitwiseXor::class, + AssignOp\ShiftLeft::class, AssignOp\ShiftRight::class, AssignOp\Pow::class, AssignOp\Coalesce::class + ]; + foreach ($assignOps as $assignOp) { + $this->fixupMap[$assignOp] = [ + 'var' => self::FIXUP_PREC_LEFT, + 'expr' => self::FIXUP_PREC_RIGHT, + ]; + } + + $prefixOps = [ + Expr\BitwiseNot::class, Expr\BooleanNot::class, Expr\UnaryPlus::class, Expr\UnaryMinus::class, + Cast\Int_::class, Cast\Double::class, Cast\String_::class, Cast\Array_::class, + Cast\Object_::class, Cast\Bool_::class, Cast\Unset_::class, Expr\ErrorSuppress::class, + Expr\YieldFrom::class, Expr\Print_::class, Expr\Include_::class, + ]; + foreach ($prefixOps as $prefixOp) { + $this->fixupMap[$prefixOp] = ['expr' => self::FIXUP_PREC_RIGHT]; + } + } + + /** + * Lazily initializes the removal map. + * + * The removal map is used to determine which additional tokens should be returned when a + * certain node is replaced by null. + */ + protected function initializeRemovalMap() { + if ($this->removalMap) return; + + $stripBoth = ['left' => \T_WHITESPACE, 'right' => \T_WHITESPACE]; + $stripLeft = ['left' => \T_WHITESPACE]; + $stripRight = ['right' => \T_WHITESPACE]; + $stripDoubleArrow = ['right' => \T_DOUBLE_ARROW]; + $stripColon = ['left' => ':']; + $stripEquals = ['left' => '=']; + $this->removalMap = [ + 'Expr_ArrayDimFetch->dim' => $stripBoth, + 'Expr_ArrayItem->key' => $stripDoubleArrow, + 'Expr_ArrowFunction->returnType' => $stripColon, + 'Expr_Closure->returnType' => $stripColon, + 'Expr_Exit->expr' => $stripBoth, + 'Expr_Ternary->if' => $stripBoth, + 'Expr_Yield->key' => $stripDoubleArrow, + 'Expr_Yield->value' => $stripBoth, + 'Param->type' => $stripRight, + 'Param->default' => $stripEquals, + 'Stmt_Break->num' => $stripBoth, + 'Stmt_ClassMethod->returnType' => $stripColon, + 'Stmt_Class->extends' => ['left' => \T_EXTENDS], + 'Expr_PrintableNewAnonClass->extends' => ['left' => \T_EXTENDS], + 'Stmt_Continue->num' => $stripBoth, + 'Stmt_Foreach->keyVar' => $stripDoubleArrow, + 'Stmt_Function->returnType' => $stripColon, + 'Stmt_If->else' => $stripLeft, + 'Stmt_Namespace->name' => $stripLeft, + 'Stmt_Property->type' => $stripRight, + 'Stmt_PropertyProperty->default' => $stripEquals, + 'Stmt_Return->expr' => $stripBoth, + 'Stmt_StaticVar->default' => $stripEquals, + 'Stmt_TraitUseAdaptation_Alias->newName' => $stripLeft, + 'Stmt_TryCatch->finally' => $stripLeft, + // 'Stmt_Case->cond': Replace with "default" + // 'Stmt_Class->name': Unclear what to do + // 'Stmt_Declare->stmts': Not a plain node + // 'Stmt_TraitUseAdaptation_Alias->newModifier': Not a plain node + ]; + } + + protected function initializeInsertionMap() { + if ($this->insertionMap) return; + + // TODO: "yield" where both key and value are inserted doesn't work + // [$find, $beforeToken, $extraLeft, $extraRight] + $this->insertionMap = [ + 'Expr_ArrayDimFetch->dim' => ['[', false, null, null], + 'Expr_ArrayItem->key' => [null, false, null, ' => '], + 'Expr_ArrowFunction->returnType' => [')', false, ' : ', null], + 'Expr_Closure->returnType' => [')', false, ' : ', null], + 'Expr_Ternary->if' => ['?', false, ' ', ' '], + 'Expr_Yield->key' => [\T_YIELD, false, null, ' => '], + 'Expr_Yield->value' => [\T_YIELD, false, ' ', null], + 'Param->type' => [null, false, null, ' '], + 'Param->default' => [null, false, ' = ', null], + 'Stmt_Break->num' => [\T_BREAK, false, ' ', null], + 'Stmt_ClassMethod->returnType' => [')', false, ' : ', null], + 'Stmt_Class->extends' => [null, false, ' extends ', null], + 'Expr_PrintableNewAnonClass->extends' => [null, ' extends ', null], + 'Stmt_Continue->num' => [\T_CONTINUE, false, ' ', null], + 'Stmt_Foreach->keyVar' => [\T_AS, false, null, ' => '], + 'Stmt_Function->returnType' => [')', false, ' : ', null], + 'Stmt_If->else' => [null, false, ' ', null], + 'Stmt_Namespace->name' => [\T_NAMESPACE, false, ' ', null], + 'Stmt_Property->type' => [\T_VARIABLE, true, null, ' '], + 'Stmt_PropertyProperty->default' => [null, false, ' = ', null], + 'Stmt_Return->expr' => [\T_RETURN, false, ' ', null], + 'Stmt_StaticVar->default' => [null, false, ' = ', null], + //'Stmt_TraitUseAdaptation_Alias->newName' => [T_AS, false, ' ', null], // TODO + 'Stmt_TryCatch->finally' => [null, false, ' ', null], + + // 'Expr_Exit->expr': Complicated due to optional () + // 'Stmt_Case->cond': Conversion from default to case + // 'Stmt_Class->name': Unclear + // 'Stmt_Declare->stmts': Not a proper node + // 'Stmt_TraitUseAdaptation_Alias->newModifier': Not a proper node + ]; + } + + protected function initializeListInsertionMap() { + if ($this->listInsertionMap) return; + + $this->listInsertionMap = [ + // special + //'Expr_ShellExec->parts' => '', // TODO These need to be treated more carefully + //'Scalar_Encapsed->parts' => '', + 'Stmt_Catch->types' => '|', + 'UnionType->types' => '|', + 'Stmt_If->elseifs' => ' ', + 'Stmt_TryCatch->catches' => ' ', + + // comma-separated lists + 'Expr_Array->items' => ', ', + 'Expr_ArrowFunction->params' => ', ', + 'Expr_Closure->params' => ', ', + 'Expr_Closure->uses' => ', ', + 'Expr_FuncCall->args' => ', ', + 'Expr_Isset->vars' => ', ', + 'Expr_List->items' => ', ', + 'Expr_MethodCall->args' => ', ', + 'Expr_New->args' => ', ', + 'Expr_PrintableNewAnonClass->args' => ', ', + 'Expr_StaticCall->args' => ', ', + 'Stmt_ClassConst->consts' => ', ', + 'Stmt_ClassMethod->params' => ', ', + 'Stmt_Class->implements' => ', ', + 'Expr_PrintableNewAnonClass->implements' => ', ', + 'Stmt_Const->consts' => ', ', + 'Stmt_Declare->declares' => ', ', + 'Stmt_Echo->exprs' => ', ', + 'Stmt_For->init' => ', ', + 'Stmt_For->cond' => ', ', + 'Stmt_For->loop' => ', ', + 'Stmt_Function->params' => ', ', + 'Stmt_Global->vars' => ', ', + 'Stmt_GroupUse->uses' => ', ', + 'Stmt_Interface->extends' => ', ', + 'Stmt_Property->props' => ', ', + 'Stmt_StaticVar->vars' => ', ', + 'Stmt_TraitUse->traits' => ', ', + 'Stmt_TraitUseAdaptation_Precedence->insteadof' => ', ', + 'Stmt_Unset->vars' => ', ', + 'Stmt_Use->uses' => ', ', + + // statement lists + 'Expr_Closure->stmts' => "\n", + 'Stmt_Case->stmts' => "\n", + 'Stmt_Catch->stmts' => "\n", + 'Stmt_Class->stmts' => "\n", + 'Expr_PrintableNewAnonClass->stmts' => "\n", + 'Stmt_Interface->stmts' => "\n", + 'Stmt_Trait->stmts' => "\n", + 'Stmt_ClassMethod->stmts' => "\n", + 'Stmt_Declare->stmts' => "\n", + 'Stmt_Do->stmts' => "\n", + 'Stmt_ElseIf->stmts' => "\n", + 'Stmt_Else->stmts' => "\n", + 'Stmt_Finally->stmts' => "\n", + 'Stmt_Foreach->stmts' => "\n", + 'Stmt_For->stmts' => "\n", + 'Stmt_Function->stmts' => "\n", + 'Stmt_If->stmts' => "\n", + 'Stmt_Namespace->stmts' => "\n", + 'Stmt_Switch->cases' => "\n", + 'Stmt_TraitUse->adaptations' => "\n", + 'Stmt_TryCatch->stmts' => "\n", + 'Stmt_While->stmts' => "\n", + + // dummy for top-level context + 'File->stmts' => "\n", + ]; + } + + protected function initializeEmptyListInsertionMap() { + if ($this->emptyListInsertionMap) return; + + // TODO Insertion into empty statement lists. + + // [$find, $extraLeft, $extraRight] + $this->emptyListInsertionMap = [ + 'Expr_ArrowFunction->params' => ['(', '', ''], + 'Expr_Closure->uses' => [')', ' use(', ')'], + 'Expr_Closure->params' => ['(', '', ''], + 'Expr_FuncCall->args' => ['(', '', ''], + 'Expr_MethodCall->args' => ['(', '', ''], + 'Expr_New->args' => ['(', '', ''], + 'Expr_PrintableNewAnonClass->args' => ['(', '', ''], + 'Expr_PrintableNewAnonClass->implements' => [null, ' implements ', ''], + 'Expr_StaticCall->args' => ['(', '', ''], + 'Stmt_Class->implements' => [null, ' implements ', ''], + 'Stmt_ClassMethod->params' => ['(', '', ''], + 'Stmt_Interface->extends' => [null, ' extends ', ''], + 'Stmt_Function->params' => ['(', '', ''], + + /* These cannot be empty to start with: + * Expr_Isset->vars + * Stmt_Catch->types + * Stmt_Const->consts + * Stmt_ClassConst->consts + * Stmt_Declare->declares + * Stmt_Echo->exprs + * Stmt_Global->vars + * Stmt_GroupUse->uses + * Stmt_Property->props + * Stmt_StaticVar->vars + * Stmt_TraitUse->traits + * Stmt_TraitUseAdaptation_Precedence->insteadof + * Stmt_Unset->vars + * Stmt_Use->uses + * UnionType->types + */ + + /* TODO + * Stmt_If->elseifs + * Stmt_TryCatch->catches + * Expr_Array->items + * Expr_List->items + * Stmt_For->init + * Stmt_For->cond + * Stmt_For->loop + */ + ]; + } + + protected function initializeModifierChangeMap() { + if ($this->modifierChangeMap) return; + + $this->modifierChangeMap = [ + 'Stmt_ClassConst->flags' => \T_CONST, + 'Stmt_ClassMethod->flags' => \T_FUNCTION, + 'Stmt_Class->flags' => \T_CLASS, + 'Stmt_Property->flags' => \T_VARIABLE, + //'Stmt_TraitUseAdaptation_Alias->newModifier' => 0, // TODO + ]; + + // List of integer subnodes that are not modifiers: + // Expr_Include->type + // Stmt_GroupUse->type + // Stmt_Use->type + // Stmt_UseUse->type + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/phlak/glob/LICENSE b/soc/2020/daily_report/archive/app/vendor/phlak/glob/LICENSE new file mode 100644 index 0000000..4d19b88 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/phlak/glob/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Chris Kankiewicz + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/soc/2020/daily_report/archive/app/vendor/phlak/glob/Makefile b/soc/2020/daily_report/archive/app/vendor/phlak/glob/Makefile new file mode 100644 index 0000000..a7b9288 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/phlak/glob/Makefile @@ -0,0 +1,13 @@ +dev development: # Install dev dependencies + @composer install --no-interaction + +prod production: # Install non-dev dependencies only + @composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader + +test: # Run coding standards/static analysis checks and tests + @vendor/bin/php-cs-fixer fix --diff --dry-run \ + && vendor/bin/psalm --show-info=true\ + && vendor/bin/phpunit --coverage-text + +coverage: # Generate an HTML coverage report + @vendor/bin/phpunit --coverage-html .coverage diff --git a/soc/2020/daily_report/archive/app/vendor/phlak/glob/README.md b/soc/2020/daily_report/archive/app/vendor/phlak/glob/README.md new file mode 100644 index 0000000..593a43a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/phlak/glob/README.md @@ -0,0 +1,180 @@ +

    + Glob +

    + +

    + License + Join our Community + Become a Sponsor + One-time Donation + Build Status + StyleCI +

    + +--- + +Glob-like file and pattern matching utility. + +Requirements +------------ + + - [PHP](https://www.php.net/) >= 7.0 + +Installation +------------ + + composer require phlak/glob + +Usage +------------- + +### Initialization + + ```php + use PHLAK\Utilities\Glob; + + new Glob($pattern); + // or + Glob::pattern($pattern); + ``` + +When instantiating a `Glob` object you must supply a `$pattern` string that may +contain one or more of the following special matching expressions. + +#### Matching Expressions + + - `?` matches any single character + - `*` matches zero or more characters excluding `/` (`\` on Windows) + - `**` matches zero or more characters including `/` (`\` on Windows) + - `[abc]` matches a single character from the set (i.e. `a`, `b` or `c`) + - `[a-c]` matches a single character in the range (i.e. `a`, `b` or `c`) + - `[^abc]` matches any character not in the set (i.e. not `a`, `b` or `c`) + - `[^a-c]` matches any character not in the range (i.e. not `a`, `b` or `c`) + - `{foo,bar,baz}` matches any pattern in the set (i.e. `foo`, `bar` or `baz`) + +--- + +### Files In + +Get a list of files in a directory by a glob pattern. + + ```php + Glob::pattern('**.txt')->in('some/file/path'); + ``` + +Returns a [Symfony Finder Component](https://symfony.com/doc/current/components/finder.html) +containing the files matching the glob pattern within the specified directory +(e.g. `foo.txt`, `foo/bar.txt`, `foo/bar/baz.txt`, etc.). + +--- + +### Exact Match + +Test if a string matches the glob pattern. + + ```php + Glob::pattern('*.txt')->match('foo.txt'); // true + Glob::pattern('*.txt')->match('foo.log'); // false + ``` + +--- + +### Match Start + +Test if a string starts with the glob pattern. + + ```php + Glob::pattern('foo/*')->matchStart('foo/bar.txt'); // true + Glob::pattern('foo/*')->matchStart('bar/foo.txt'); // false + ``` + +--- + +### Match End + +Test if a string ends with the glob pattern. + + ```php + Glob::pattern('**.txt')->matchEnd('foo/bar.txt'); // true + Glob::pattern('**.txt')->matchEnd('foo/bar.log'); // false + ``` + +--- + +### Match Within + +Test if a string contains the glob pattern. + + ```php + Glob::pattern('bar')->matchWithin('foo/bar/baz.txt'); // true + Glob::pattern('bar')->matchWithin('foo/baz/qux.txt'); // false + ``` + +--- + +### Filter an Array (of Strings) + +Filter an array of strings to values matching the glob pattern. + + ```php + Glob::pattern('**.txt')->filter([ + 'foo', 'foo.txt', 'bar.zip', 'foo/bar.png', 'foo/bar.txt', + ]); + + // Returns ['foo.txt', 'foo/bar.txt'] + ``` + +--- + +### Reject an Array (of Strings) + +Filter an array of strings to values *not* matching the glob pattern. + + ```php + Glob::pattern('**.txt')->reject([ + 'foo', 'foo.txt', 'bar.zip', 'foo/bar.png', 'foo/bar.txt', + ]); + + // Returns ['foo', 'bar.zip', 'foo/bar.png'] + ``` + +--- + +### To Regular Expression + +Convet the glob-like pattern to a regular expression pattern. + + ```php + Glob::pattern('foo')->toRegex(); // Returns '#^foo$#' + Glob::pattern('foo/bar.txt')->toRegex(); // Returns '#^foo/bar\.txt$#' + Glob::pattern('file.{yml,yaml}')->toRegex(); // Returns '#^file\.(yml|yaml)$#' + ``` + + You can also control line anchors via the `$options` parameter. + + ```php + Glob::pattern('foo')->toRegex(Glob::NO_ANCHORS); // Returns '#foo#' + Glob::pattern('foo')->toRegex(Glob::START_ANCHOR); // Returns '#^foo#' + Glob::pattern('foo')->toRegex(Glob::END_ANCHOR); // Returns '#foo$#' + Glob::pattern('foo')->toRegex(Glob::BOTH_ANCHORS); // Returns '#^foo$#' + Glob::pattern('foo')->toRegex(Glob::START_ANCHOR | Glob::END_ANCHOR); // Returns '#^foo$#' + ``` + +Changelog +--------- + +A list of changes can be found on the [GitHub Releases](https://github.com/PHLAK/Glob/releases) page. + +Troubleshooting +--------------- + +See the [Common Issues](https://github.com/PHLAK/Glob/wiki/Common-Issues) page for a list of common issues and help in solving them. + +For general help and support join our [Spectrum Community](https://spectrum.chat/phlaknet) or reach out on [Twitter](https://twitter.com/PHLAK). + +Please report bugs to the [GitHub Issue Tracker](https://github.com/PHLAK/Glob/issues). + +Copyright +--------- + +This project is licensed under the [MIT License](https://github.com/PHLAK/Glob/blob/master/LICENSE). diff --git a/soc/2020/daily_report/archive/app/vendor/phlak/glob/composer.json b/soc/2020/daily_report/archive/app/vendor/phlak/glob/composer.json new file mode 100644 index 0000000..45a5032 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/phlak/glob/composer.json @@ -0,0 +1,48 @@ +{ + "name": "phlak/glob", + "description": "Glob-like pattern matching and utilities", + "type": "library", + "license": "MIT", + "authors": [ + { + "name": "Chris Kankiewicz", + "email": "Chris@ChrisKankiewicz.com" + } + ], + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/PHLAK" + }, + { + "type": "paypal", + "url": "https://paypal.me/ChrisKankiewicz" + } + ], + "require": { + "php": ">=7.0", + "symfony/finder": "^5.0" + }, + "require-dev": { + "php": ">=7.2", + "phpunit/phpunit": "^8.0 || ^9.0", + "vimeo/psalm": "^3.8", + "friendsofphp/php-cs-fixer": "^2.10", + "psy/psysh": "^0.10", + "symfony/var-dumper": "^5.0" + }, + "autoload": { + "psr-4": { + "PHLAK\\Utilities\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "Tests\\": "tests/" + } + }, + "config": { + "sort-packages": true, + "optimize-autoloader": true + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/phlak/glob/psalm-baseline.xml b/soc/2020/daily_report/archive/app/vendor/phlak/glob/psalm-baseline.xml new file mode 100644 index 0000000..a349ce0 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/phlak/glob/psalm-baseline.xml @@ -0,0 +1,8 @@ + + + + + void + + + diff --git a/soc/2020/daily_report/archive/app/vendor/phlak/glob/src/Glob.php b/soc/2020/daily_report/archive/app/vendor/phlak/glob/src/Glob.php new file mode 100644 index 0000000..6a6c97e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/phlak/glob/src/Glob.php @@ -0,0 +1,205 @@ +pattern = $pattern; + } + + /** Create a new object from a glob pattern. */ + public static function pattern(string $pattern): self + { + return new static($pattern); + } + + /** Set the directory separator string. */ + public static function directorySeparator(string $separator): void + { + self::$directorySeparator = $separator; + } + + /** Escape glob pattern characters from a string */ + public static function escape(string $string): string + { + return str_replace([ + '\\', '?', '*', '[', ']', '^', '{', '}', ',' + ], [ + '\\\\', '\\?', '\\*', '\\[', '\\]', '\\^', '\\{', '\\}', '\\,' + ], $string); + } + + /** Get a list of files in a directory by a glob pattern. */ + public function in(string $path): Finder + { + return Finder::create()->in($path)->filter(function (SplFileInfo $file): bool { + return $this->match($file->getRelativePathname()); + }); + } + + /** Test if a string matches the glob pattern. */ + public function match(string $string): bool + { + return (bool) preg_match($this->toRegex(), $string); + } + + /** Test if a string starts with the glob pattern. */ + public function matchStart(string $string): bool + { + return (bool) preg_match($this->toRegex(self::START_ANCHOR), $string); + } + + /** Test if a string ends with the glob pattern. */ + public function matchEnd(string $string): bool + { + return (bool) preg_match($this->toRegex(self::END_ANCHOR), $string); + } + + /** Test if any part of a string matches the glob pattern. */ + public function matchWithin(string $string): bool + { + return (bool) preg_match($this->toRegex(self::NO_ANCHORS), $string); + } + + /** Filter an array of strings to values matching the glob pattern. */ + public function filter(array $array): array + { + return array_filter($array, function (string $string): bool { + return $this->match($string); + }); + } + + /** Filter an array of strings to values not matching the glob pattern. */ + public function reject(array $array): array + { + return array_filter($array, function (string $string): bool { + return ! $this->match($string); + }); + } + + /** Convert the glob a regular expression pattern. */ + public function toRegex(int $options = self::BOTH_ANCHORS): string + { + $pattern = ''; + $characterGroup = 0; + $patternGroup = 0; + + for ($i = 0; $i < strlen($this->pattern); ++$i) { + $char = $this->pattern[$i]; + + switch ($char) { + case '\\': + $pattern .= '\\' . $this->pattern[++$i]; + break; + + case '?': + $pattern .= '.'; + break; + + case '*': + if (isset($this->pattern[$i + 1]) && $this->pattern[$i + 1] === '*') { + $pattern .= '.*'; + ++$i; + } else { + $pattern .= sprintf('[^%s]*', addslashes(self::$directorySeparator)); + } + break; + + case '#': + $pattern .= '\#'; + break; + + case '[': + $pattern .= $char; + ++$characterGroup; + break; + + case ']': + if ($characterGroup > 0) { + --$characterGroup; + } + + $pattern .= $char; + break; + + case '^': + if ($characterGroup > 0) { + $pattern .= $char; + } else { + $pattern .= '\\' . $char; + } + break; + + case '{': + $pattern .= '('; + ++$patternGroup; + break; + + case '}': + if ($patternGroup > 0) { + $pattern .= ')'; + --$patternGroup; + } else { + $pattern .= $char; + } + break; + + case ',': + if ($patternGroup > 0) { + $pattern .= '|'; + } else { + $pattern .= $char; + } + break; + + default: + if (in_array($char, ['.', '(', ')', '|', '+', '$'])) { + $pattern .= '\\' . $char; + } else { + $pattern .= $char; + } + break; + } + } + + if ($options & self::START_ANCHOR) { + $pattern = '^' . $pattern; + } + + if ($options & self::END_ANCHOR) { + $pattern = $pattern . '$'; + } + + return sprintf('#%s#', $pattern); + } + + /** Return the glob pattern as a string. */ + public function __toString(): string + { + return $this->pattern; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/invoker/CONTRIBUTING.md b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/CONTRIBUTING.md new file mode 100644 index 0000000..852fd1a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/CONTRIBUTING.md @@ -0,0 +1,15 @@ +# Contributing + +First of all, **thank you** for contributing! + +Here are a few rules to follow in order to ease code reviews and merging: + +- follow [PSR-1](http://www.php-fig.org/psr/1/) and [PSR-2](http://www.php-fig.org/psr/2/) +- run the test suite +- write (or update) unit tests when applicable +- write documentation for new features +- use [commit messages that make sense](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) + +One may ask you to [squash your commits](http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html) too. This is used to "clean" your pull request before merging it (we don't want commits such as `fix tests`, `fix 2`, `fix 3`, etc.). + +When creating your pull request on GitHub, please write a description which gives the context and/or explains why you are creating it. diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/invoker/LICENSE b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/LICENSE new file mode 100644 index 0000000..b2b0416 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Matthieu Napoli + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/invoker/README.md b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/README.md new file mode 100644 index 0000000..6454835 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/README.md @@ -0,0 +1,234 @@ +# Invoker + +Generic and extensible callable invoker. + +[![Build Status](https://img.shields.io/travis/PHP-DI/Invoker.svg?style=flat-square)](https://travis-ci.org/PHP-DI/Invoker) +[![Coverage Status](https://img.shields.io/coveralls/PHP-DI/Invoker/master.svg?style=flat-square)](https://coveralls.io/r/PHP-DI/Invoker?branch=master) +[![Scrutinizer Code Quality](https://img.shields.io/scrutinizer/g/PHP-DI/Invoker.svg?style=flat-square)](https://scrutinizer-ci.com/g/PHP-DI/Invoker/?branch=master) +[![Latest Version](https://img.shields.io/github/release/PHP-DI/invoker.svg?style=flat-square)](https://packagist.org/packages/PHP-DI/invoker) + +## Why? + +Who doesn't need an over-engineered `call_user_func()`? + +### Named parameters + +Does this [Silex](http://silex.sensiolabs.org) example look familiar: + +```php +$app->get('/project/{project}/issue/{issue}', function ($project, $issue) { + // ... +}); +``` + +Or this command defined with [Silly](https://github.com/mnapoli/silly#usage): + +```php +$app->command('greet [name] [--yell]', function ($name, $yell) { + // ... +}); +``` + +Same pattern in [Slim](http://www.slimframework.com): + +```php +$app->get('/hello/:name', function ($name) { + // ... +}); +``` + +You get the point. These frameworks invoke the controller/command/handler using something akin to named parameters: whatever the order of the parameters, they are matched by their name. + +**This library allows to invoke callables with named parameters in a generic and extensible way.** + +### Dependency injection + +Anyone familiar with AngularJS is familiar with how dependency injection is performed: + +```js +angular.controller('MyController', ['dep1', 'dep2', function(dep1, dep2) { + // ... +}]); +``` + +In PHP we find this pattern again in some frameworks and DI containers with partial to full support. For example in Silex you can type-hint the application to get it injected, but it only works with `Silex\Application`: + +```php +$app->get('/hello/{name}', function (Silex\Application $app, $name) { + // ... +}); +``` + +In Silly, it only works with `OutputInterface` to inject the application output: + +```php +$app->command('greet [name]', function ($name, OutputInterface $output) { + // ... +}); +``` + +[PHP-DI](http://php-di.org/doc/container.html) provides a way to invoke a callable and resolve all dependencies from the container using type-hints: + +```php +$container->call(function (Logger $logger, EntityManager $em) { + // ... +}); +``` + +**This library provides clear extension points to let frameworks implement any kind of dependency injection support they want.** + +### TL/DR + +In short, this library is meant to be a base building block for calling a function with named parameters and/or dependency injection. + +## Installation + +```sh +$ composer require PHP-DI/invoker +``` + +## Usage + +### Default behavior + +By default the `Invoker` can call using named parameters: + +```php +$invoker = new Invoker\Invoker; + +$invoker->call(function () { + echo 'Hello world!'; +}); + +// Simple parameter array +$invoker->call(function ($name) { + echo 'Hello ' . $name; +}, ['John']); + +// Named parameters +$invoker->call(function ($name) { + echo 'Hello ' . $name; +}, [ + 'name' => 'John' +]); + +// Use the default value +$invoker->call(function ($name = 'world') { + echo 'Hello ' . $name; +}); + +// Invoke any PHP callable +$invoker->call(['MyClass', 'myStaticMethod']); + +// Using Class::method syntax +$invoker->call('MyClass::myStaticMethod'); +``` + +Dependency injection in parameters is supported but needs to be configured with your container. Read on or jump to [*Built-in support for dependency injection*](#built-in-support-for-dependency-injection) if you are impatient. + +Additionally, callables can also be resolved from your container. Read on or jump to [*Resolving callables from a container*](#resolving-callables-from-a-container) if you are impatient. + +### Parameter resolvers + +Extending the behavior of the `Invoker` is easy and is done by implementing a [`ParameterResolver`](https://github.com/PHP-DI/Invoker/blob/master/src/ParameterResolver/ParameterResolver.php). + +This is explained in details the [Parameter resolvers documentation](doc/parameter-resolvers.md). + +#### Built-in support for dependency injection + +Rather than have you re-implement support for dependency injection with different containers every time, this package ships with 2 optional resolvers: + +- [`TypeHintContainerResolver`](https://github.com/PHP-DI/Invoker/blob/master/src/ParameterResolver/Container/TypeHintContainerResolver.php) + + This resolver will inject container entries by searching for the class name using the type-hint: + + ```php + $invoker->call(function (Psr\Logger\LoggerInterface $logger) { + // ... + }); + ``` + + In this example it will `->get('Psr\Logger\LoggerInterface')` from the container and inject it. + + This resolver is only useful if you store objects in your container using the class (or interface) name. Silex or Symfony for example store services under a custom name (e.g. `twig`, `db`, etc.) instead of the class name: in that case use the resolver shown below. + +- [`ParameterNameContainerResolver`](https://github.com/PHP-DI/Invoker/blob/master/src/ParameterResolver/Container/ParameterNameContainerResolver.php) + + This resolver will inject container entries by searching for the name of the parameter: + + ```php + $invoker->call(function ($twig) { + // ... + }); + ``` + + In this example it will `->get('twig')` from the container and inject it. + +These resolvers can work with any dependency injection container compliant with [PSR-11](http://www.php-fig.org/psr/psr-11/). + +Setting up those resolvers is simple: + +```php +// $container must be an instance of Psr\Container\ContainerInterface +$container = ... + +$containerResolver = new TypeHintContainerResolver($container); +// or +$containerResolver = new ParameterNameContainerResolver($container); + +$invoker = new Invoker\Invoker; +// Register it before all the other parameter resolvers +$invoker->getParameterResolver()->prependResolver($containerResolver); +``` + +You can also register both resolvers at the same time if you wish by prepending both. Implementing support for more tricky things is easy and up to you! + +### Resolving callables from a container + +The `Invoker` can be wired to your DI container to resolve the callables. + +For example with an invokable class: + +```php +class MyHandler +{ + public function __invoke() + { + // ... + } +} + +// By default this doesn't work: an instance of the class should be provided +$invoker->call('MyHandler'); + +// If we set up the container to use +$invoker = new Invoker\Invoker(null, $container); +// Now 'MyHandler' is resolved using the container! +$invoker->call('MyHandler'); +``` + +The same works for a class method: + +```php +class WelcomeController +{ + public function home() + { + // ... + } +} + +// By default this doesn't work: home() is not a static method +$invoker->call(['WelcomeController', 'home']); + +// If we set up the container to use +$invoker = new Invoker\Invoker(null, $container); +// Now 'WelcomeController' is resolved using the container! +$invoker->call(['WelcomeController', 'home']); +// Alternatively we can use the Class::method syntax +$invoker->call('WelcomeController::home'); +``` + +That feature can be used as the base building block for a framework's dispatcher. + +Again, any [PSR-11](http://www.php-fig.org/psr/psr-11/) compliant container can be provided. diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/invoker/composer.json b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/composer.json new file mode 100644 index 0000000..36b9f0b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/composer.json @@ -0,0 +1,25 @@ +{ + "name": "php-di/invoker", + "description": "Generic and extensible callable invoker", + "keywords": ["invoker", "dependency-injection", "dependency", "injection", "callable", "invoke"], + "homepage": "https://github.com/PHP-DI/Invoker", + "license": "MIT", + "type": "library", + "autoload": { + "psr-4": { + "Invoker\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "Invoker\\Test\\": "tests/" + } + }, + "require": { + "psr/container": "~1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.5", + "athletic/athletic": "~0.1.8" + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/invoker/doc/parameter-resolvers.md b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/doc/parameter-resolvers.md new file mode 100644 index 0000000..bfccb7f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/doc/parameter-resolvers.md @@ -0,0 +1,109 @@ +# Parameter resolvers + +Extending the behavior of the `Invoker` is easy and is done by implementing a [`ParameterResolver`](https://github.com/PHP-DI/Invoker/blob/master/src/ParameterResolver/ParameterResolver.php): + +```php +interface ParameterResolver +{ + public function getParameters( + ReflectionFunctionAbstract $reflection, + array $providedParameters, + array $resolvedParameters + ); +} +``` + +- `$providedParameters` contains the parameters provided by the user when calling `$invoker->call($callable, $parameters)` +- `$resolvedParameters` contains parameters that have already been resolved by other parameter resolvers + +An `Invoker` can chain multiple parameter resolvers to mix behaviors, e.g. you can mix "named parameters" support with "dependency injection" support. This is why a `ParameterResolver` should skip parameters that are already resolved in `$resolvedParameters`. + +Here is an implementation example for dumb dependency injection that creates a new instance of the classes type-hinted: + +```php +class MyParameterResolver implements ParameterResolver +{ + public function getParameters( + ReflectionFunctionAbstract $reflection, + array $providedParameters, + array $resolvedParameters + ) { + foreach ($reflection->getParameters() as $index => $parameter) { + if (array_key_exists($index, $resolvedParameters)) { + // Skip already resolved parameters + continue; + } + + $class = $parameter->getClass(); + + if ($class) { + $resolvedParameters[$index] = $class->newInstance(); + } + } + + return $resolvedParameters; + } +} +``` + +To use it: + +```php +$invoker = new Invoker\Invoker(new MyParameterResolver); + +$invoker->call(function (ArticleManager $articleManager) { + $articleManager->publishArticle('Hello world', 'This is the article content.'); +}); +``` + +A new instance of `ArticleManager` will be created by our parameter resolver. + +## Chaining parameter resolvers + +The fun starts to happen when we want to add support for many things: + +- named parameters +- dependency injection for type-hinted parameters +- ... + +This is where we should use the [`ResolverChain`](https://github.com/PHP-DI/Invoker/blob/master/src/ParameterResolver/ResolverChain.php). This resolver implements the [Chain of responsibility](http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern) design pattern. + +For example the default chain is: + +```php +$parameterResolver = new ResolverChain([ + new NumericArrayResolver, + new AssociativeArrayResolver, + new DefaultValueResolver, +]); +``` + +It allows to support even the weirdest use cases like: + +```php +$parameters = []; + +// First parameter will receive "Welcome" +$parameters[] = 'Welcome'; + +// Parameter named "content" will receive "Hello world!" +$parameters['content'] = 'Hello world!'; + +// $published is not defined so it will use its default value +$invoker->call(function ($title, $content, $published = true) { + // ... +}, $parameters); +``` + +We can put our custom parameter resolver in the list and created a super-duper invoker that also supports basic dependency injection: + +```php +$parameterResolver = new ResolverChain([ + new MyParameterResolver, // Our resolver is at the top for highest priority + new NumericArrayResolver, + new AssociativeArrayResolver, + new DefaultValueResolver, +]); + +$invoker = new Invoker\Invoker($parameterResolver); +``` diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/CallableResolver.php b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/CallableResolver.php new file mode 100644 index 0000000..61dc28f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/CallableResolver.php @@ -0,0 +1,133 @@ + + */ +class CallableResolver +{ + /** + * @var ContainerInterface + */ + private $container; + + public function __construct(ContainerInterface $container) + { + $this->container = $container; + } + + /** + * Resolve the given callable into a real PHP callable. + * + * @param callable|string|array $callable + * + * @return callable Real PHP callable. + * + * @throws NotCallableException + */ + public function resolve($callable) + { + if (is_string($callable) && strpos($callable, '::') !== false) { + $callable = explode('::', $callable, 2); + } + + $callable = $this->resolveFromContainer($callable); + + if (! is_callable($callable)) { + throw NotCallableException::fromInvalidCallable($callable, true); + } + + return $callable; + } + + /** + * @param callable|string|array $callable + * @return callable + * @throws NotCallableException + */ + private function resolveFromContainer($callable) + { + // Shortcut for a very common use case + if ($callable instanceof \Closure) { + return $callable; + } + + $isStaticCallToNonStaticMethod = false; + + // If it's already a callable there is nothing to do + if (is_callable($callable)) { + $isStaticCallToNonStaticMethod = $this->isStaticCallToNonStaticMethod($callable); + if (! $isStaticCallToNonStaticMethod) { + return $callable; + } + } + + // The callable is a container entry name + if (is_string($callable)) { + try { + return $this->container->get($callable); + } catch (NotFoundExceptionInterface $e) { + if ($this->container->has($callable)) { + throw $e; + } + throw NotCallableException::fromInvalidCallable($callable, true); + } + } + + // The callable is an array whose first item is a container entry name + // e.g. ['some-container-entry', 'methodToCall'] + if (is_array($callable) && is_string($callable[0])) { + try { + // Replace the container entry name by the actual object + $callable[0] = $this->container->get($callable[0]); + return $callable; + } catch (NotFoundExceptionInterface $e) { + if ($this->container->has($callable[0])) { + throw $e; + } + if ($isStaticCallToNonStaticMethod) { + throw new NotCallableException(sprintf( + 'Cannot call %s::%s() because %s() is not a static method and "%s" is not a container entry', + $callable[0], + $callable[1], + $callable[1], + $callable[0] + )); + } + throw new NotCallableException(sprintf( + 'Cannot call %s on %s because it is not a class nor a valid container entry', + $callable[1], + $callable[0] + )); + } + } + + // Unrecognized stuff, we let it fail later + return $callable; + } + + /** + * Check if the callable represents a static call to a non-static method. + * + * @param mixed $callable + * @return bool + */ + private function isStaticCallToNonStaticMethod($callable) + { + if (is_array($callable) && is_string($callable[0])) { + list($class, $method) = $callable; + $reflection = new \ReflectionMethod($class, $method); + + return ! $reflection->isStatic(); + } + + return false; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/Exception/InvocationException.php b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/Exception/InvocationException.php new file mode 100644 index 0000000..a5f6ffc --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/Exception/InvocationException.php @@ -0,0 +1,12 @@ + + */ +class InvocationException extends \Exception +{ +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/Exception/NotCallableException.php b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/Exception/NotCallableException.php new file mode 100644 index 0000000..6fd5d2e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/Exception/NotCallableException.php @@ -0,0 +1,35 @@ + + */ +class NotCallableException extends InvocationException +{ + /** + * @param string $value + * @param bool $containerEntry + * @return self + */ + public static function fromInvalidCallable($value, $containerEntry = false) + { + if (is_object($value)) { + $message = sprintf('Instance of %s is not a callable', get_class($value)); + } elseif (is_array($value) && isset($value[0]) && isset($value[1])) { + $class = is_object($value[0]) ? get_class($value[0]) : $value[0]; + $extra = method_exists($class, '__call') ? ' A __call() method exists but magic methods are not supported.' : ''; + $message = sprintf('%s::%s() is not a callable.%s', $class, $value[1], $extra); + } else { + if ($containerEntry) { + $message = var_export($value, true) . ' is neither a callable nor a valid container entry'; + } else { + $message = var_export($value, true) . ' is not a callable'; + } + } + + return new self($message); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/Exception/NotEnoughParametersException.php b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/Exception/NotEnoughParametersException.php new file mode 100644 index 0000000..1be4eb9 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/Exception/NotEnoughParametersException.php @@ -0,0 +1,12 @@ + + */ +class NotEnoughParametersException extends InvocationException +{ +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/Invoker.php b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/Invoker.php new file mode 100644 index 0000000..6238157 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/Invoker.php @@ -0,0 +1,122 @@ + + */ +class Invoker implements InvokerInterface +{ + /** + * @var CallableResolver|null + */ + private $callableResolver; + + /** + * @var ParameterResolver + */ + private $parameterResolver; + + /** + * @var ContainerInterface|null + */ + private $container; + + public function __construct(ParameterResolver $parameterResolver = null, ContainerInterface $container = null) + { + $this->parameterResolver = $parameterResolver ?: $this->createParameterResolver(); + $this->container = $container; + + if ($container) { + $this->callableResolver = new CallableResolver($container); + } + } + + /** + * {@inheritdoc} + */ + public function call($callable, array $parameters = array()) + { + if ($this->callableResolver) { + $callable = $this->callableResolver->resolve($callable); + } + + if (! is_callable($callable)) { + throw new NotCallableException(sprintf( + '%s is not a callable', + is_object($callable) ? 'Instance of ' . get_class($callable) : var_export($callable, true) + )); + } + + $callableReflection = CallableReflection::create($callable); + + $args = $this->parameterResolver->getParameters($callableReflection, $parameters, array()); + + // Sort by array key because call_user_func_array ignores numeric keys + ksort($args); + + // Check all parameters are resolved + $diff = array_diff_key($callableReflection->getParameters(), $args); + if (! empty($diff)) { + /** @var \ReflectionParameter $parameter */ + $parameter = reset($diff); + throw new NotEnoughParametersException(sprintf( + 'Unable to invoke the callable because no value was given for parameter %d ($%s)', + $parameter->getPosition() + 1, + $parameter->name + )); + } + + return call_user_func_array($callable, $args); + } + + /** + * Create the default parameter resolver. + * + * @return ParameterResolver + */ + private function createParameterResolver() + { + return new ResolverChain(array( + new NumericArrayResolver, + new AssociativeArrayResolver, + new DefaultValueResolver, + )); + } + + /** + * @return ParameterResolver By default it's a ResolverChain + */ + public function getParameterResolver() + { + return $this->parameterResolver; + } + + /** + * @return ContainerInterface|null + */ + public function getContainer() + { + return $this->container; + } + + /** + * @return CallableResolver|null Returns null if no container was given in the constructor. + */ + public function getCallableResolver() + { + return $this->callableResolver; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/InvokerInterface.php b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/InvokerInterface.php new file mode 100644 index 0000000..cd6980e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/InvokerInterface.php @@ -0,0 +1,29 @@ + + */ +interface InvokerInterface +{ + /** + * Call the given function using the given parameters. + * + * @param callable $callable Function to call. + * @param array $parameters Parameters to use. + * + * @return mixed Result of the function. + * + * @throws InvocationException Base exception class for all the sub-exceptions below. + * @throws NotCallableException + * @throws NotEnoughParametersException + */ + public function call($callable, array $parameters = array()); +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/ParameterResolver/AssociativeArrayResolver.php b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/ParameterResolver/AssociativeArrayResolver.php new file mode 100644 index 0000000..d51f2c7 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/ParameterResolver/AssociativeArrayResolver.php @@ -0,0 +1,39 @@ +call($callable, ['foo' => 'bar'])` will inject the string `'bar'` + * in the parameter named `$foo`. + * + * Parameters that are not indexed by a string are ignored. + * + * @author Matthieu Napoli + */ +class AssociativeArrayResolver implements ParameterResolver +{ + public function getParameters( + ReflectionFunctionAbstract $reflection, + array $providedParameters, + array $resolvedParameters + ) { + $parameters = $reflection->getParameters(); + + // Skip parameters already resolved + if (! empty($resolvedParameters)) { + $parameters = array_diff_key($parameters, $resolvedParameters); + } + + foreach ($parameters as $index => $parameter) { + if (array_key_exists($parameter->name, $providedParameters)) { + $resolvedParameters[$index] = $providedParameters[$parameter->name]; + } + } + + return $resolvedParameters; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/ParameterResolver/Container/ParameterNameContainerResolver.php b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/ParameterResolver/Container/ParameterNameContainerResolver.php new file mode 100644 index 0000000..1259327 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/ParameterResolver/Container/ParameterNameContainerResolver.php @@ -0,0 +1,51 @@ + + */ +class ParameterNameContainerResolver implements ParameterResolver +{ + /** + * @var ContainerInterface + */ + private $container; + + /** + * @param ContainerInterface $container The container to get entries from. + */ + public function __construct(ContainerInterface $container) + { + $this->container = $container; + } + + public function getParameters( + ReflectionFunctionAbstract $reflection, + array $providedParameters, + array $resolvedParameters + ) { + $parameters = $reflection->getParameters(); + + // Skip parameters already resolved + if (! empty($resolvedParameters)) { + $parameters = array_diff_key($parameters, $resolvedParameters); + } + + foreach ($parameters as $index => $parameter) { + $name = $parameter->name; + + if ($name && $this->container->has($name)) { + $resolvedParameters[$index] = $this->container->get($name); + } + } + + return $resolvedParameters; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/ParameterResolver/Container/TypeHintContainerResolver.php b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/ParameterResolver/Container/TypeHintContainerResolver.php new file mode 100644 index 0000000..3a6b0d8 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/ParameterResolver/Container/TypeHintContainerResolver.php @@ -0,0 +1,51 @@ + + */ +class TypeHintContainerResolver implements ParameterResolver +{ + /** + * @var ContainerInterface + */ + private $container; + + /** + * @param ContainerInterface $container The container to get entries from. + */ + public function __construct(ContainerInterface $container) + { + $this->container = $container; + } + + public function getParameters( + ReflectionFunctionAbstract $reflection, + array $providedParameters, + array $resolvedParameters + ) { + $parameters = $reflection->getParameters(); + + // Skip parameters already resolved + if (! empty($resolvedParameters)) { + $parameters = array_diff_key($parameters, $resolvedParameters); + } + + foreach ($parameters as $index => $parameter) { + $parameterClass = $parameter->getClass(); + + if ($parameterClass && $this->container->has($parameterClass->name)) { + $resolvedParameters[$index] = $this->container->get($parameterClass->name); + } + } + + return $resolvedParameters; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/ParameterResolver/DefaultValueResolver.php b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/ParameterResolver/DefaultValueResolver.php new file mode 100644 index 0000000..6fa8f8c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/ParameterResolver/DefaultValueResolver.php @@ -0,0 +1,40 @@ + + */ +class DefaultValueResolver implements ParameterResolver +{ + public function getParameters( + ReflectionFunctionAbstract $reflection, + array $providedParameters, + array $resolvedParameters + ) { + $parameters = $reflection->getParameters(); + + // Skip parameters already resolved + if (! empty($resolvedParameters)) { + $parameters = array_diff_key($parameters, $resolvedParameters); + } + + foreach ($parameters as $index => $parameter) { + /** @var \ReflectionParameter $parameter */ + if ($parameter->isOptional()) { + try { + $resolvedParameters[$index] = $parameter->getDefaultValue(); + } catch (ReflectionException $e) { + // Can't get default values from PHP internal classes and functions + } + } + } + + return $resolvedParameters; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/ParameterResolver/NumericArrayResolver.php b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/ParameterResolver/NumericArrayResolver.php new file mode 100644 index 0000000..dc5f02c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/ParameterResolver/NumericArrayResolver.php @@ -0,0 +1,39 @@ +call($callable, ['foo', 'bar'])` will simply resolve the parameters + * to `['foo', 'bar']`. + * + * Parameters that are not indexed by a number (i.e. parameter position) + * will be ignored. + * + * @author Matthieu Napoli + */ +class NumericArrayResolver implements ParameterResolver +{ + public function getParameters( + ReflectionFunctionAbstract $reflection, + array $providedParameters, + array $resolvedParameters + ) { + // Skip parameters already resolved + if (! empty($resolvedParameters)) { + $providedParameters = array_diff_key($providedParameters, $resolvedParameters); + } + + foreach ($providedParameters as $key => $value) { + if (is_int($key)) { + $resolvedParameters[$key] = $value; + } + } + + return $resolvedParameters; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/ParameterResolver/ParameterResolver.php b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/ParameterResolver/ParameterResolver.php new file mode 100644 index 0000000..39c7abc --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/ParameterResolver/ParameterResolver.php @@ -0,0 +1,33 @@ + + */ +interface ParameterResolver +{ + /** + * Resolves the parameters to use to call the callable. + * + * `$resolvedParameters` contains parameters that have already been resolved. + * + * Each ParameterResolver must resolve parameters that are not already + * in `$resolvedParameters`. That allows to chain multiple ParameterResolver. + * + * @param ReflectionFunctionAbstract $reflection Reflection object for the callable. + * @param array $providedParameters Parameters provided by the caller. + * @param array $resolvedParameters Parameters resolved (indexed by parameter position). + * + * @return array + */ + public function getParameters( + ReflectionFunctionAbstract $reflection, + array $providedParameters, + array $resolvedParameters + ); +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/ParameterResolver/ResolverChain.php b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/ParameterResolver/ResolverChain.php new file mode 100644 index 0000000..d524746 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/ParameterResolver/ResolverChain.php @@ -0,0 +1,69 @@ + + */ +class ResolverChain implements ParameterResolver +{ + /** + * @var ParameterResolver[] + */ + private $resolvers = array(); + + public function __construct(array $resolvers = array()) + { + $this->resolvers = $resolvers; + } + + public function getParameters( + ReflectionFunctionAbstract $reflection, + array $providedParameters, + array $resolvedParameters + ) { + $reflectionParameters = $reflection->getParameters(); + + foreach ($this->resolvers as $resolver) { + $resolvedParameters = $resolver->getParameters( + $reflection, + $providedParameters, + $resolvedParameters + ); + + $diff = array_diff_key($reflectionParameters, $resolvedParameters); + if (empty($diff)) { + // Stop traversing: all parameters are resolved + return $resolvedParameters; + } + } + + return $resolvedParameters; + } + + /** + * Push a parameter resolver after the ones already registered. + * + * @param ParameterResolver $resolver + */ + public function appendResolver(ParameterResolver $resolver) + { + $this->resolvers[] = $resolver; + } + + /** + * Insert a parameter resolver before the ones already registered. + * + * @param ParameterResolver $resolver + */ + public function prependResolver(ParameterResolver $resolver) + { + array_unshift($this->resolvers, $resolver); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/ParameterResolver/TypeHintResolver.php b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/ParameterResolver/TypeHintResolver.php new file mode 100644 index 0000000..d2fcc28 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/ParameterResolver/TypeHintResolver.php @@ -0,0 +1,39 @@ + + */ +class TypeHintResolver implements ParameterResolver +{ + public function getParameters( + ReflectionFunctionAbstract $reflection, + array $providedParameters, + array $resolvedParameters + ) { + $parameters = $reflection->getParameters(); + + // Skip parameters already resolved + if (! empty($resolvedParameters)) { + $parameters = array_diff_key($parameters, $resolvedParameters); + } + + foreach ($parameters as $index => $parameter) { + $parameterClass = $parameter->getClass(); + + if ($parameterClass && array_key_exists($parameterClass->name, $providedParameters)) { + $resolvedParameters[$index] = $providedParameters[$parameterClass->name]; + } + } + + return $resolvedParameters; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/Reflection/CallableReflection.php b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/Reflection/CallableReflection.php new file mode 100644 index 0000000..f65f6e1 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/invoker/src/Reflection/CallableReflection.php @@ -0,0 +1,61 @@ + + */ +class CallableReflection +{ + /** + * @param callable $callable + * + * @return \ReflectionFunctionAbstract + * + * @throws NotCallableException + * + * TODO Use the `callable` type-hint once support for PHP 5.4 and up. + */ + public static function create($callable) + { + // Closure + if ($callable instanceof \Closure) { + return new \ReflectionFunction($callable); + } + + // Array callable + if (is_array($callable)) { + list($class, $method) = $callable; + + if (! method_exists($class, $method)) { + throw NotCallableException::fromInvalidCallable($callable); + } + + return new \ReflectionMethod($class, $method); + } + + // Callable object (i.e. implementing __invoke()) + if (is_object($callable) && method_exists($callable, '__invoke')) { + return new \ReflectionMethod($callable, '__invoke'); + } + + // Callable class (i.e. implementing __invoke()) + if (is_string($callable) && class_exists($callable) && method_exists($callable, '__invoke')) { + return new \ReflectionMethod($callable, '__invoke'); + } + + // Standard function + if (is_string($callable) && function_exists($callable)) { + return new \ReflectionFunction($callable); + } + + throw new NotCallableException(sprintf( + '%s is not a callable', + is_string($callable) ? $callable : 'Instance of ' . get_class($callable) + )); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/.coveralls.yml b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/.coveralls.yml new file mode 100644 index 0000000..bc71b62 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/.coveralls.yml @@ -0,0 +1,2 @@ +coverage_clover: clover.xml +json_path: coveralls-upload.json diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/.php_cs b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/.php_cs new file mode 100644 index 0000000..62965f4 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/.php_cs @@ -0,0 +1,52 @@ +in(__DIR__ . '/src'); + +return PhpCsFixer\Config::create() + ->setRules([ + '@PSR2' => true, + '@PHP70Migration' => true, + '@Symfony' => true, + '@Symfony:risky' => true, + 'array_syntax' => ['syntax' => 'short'], + 'braces' => [ + 'allow_single_line_closure' => true, + ], + 'concat_space' => [ + 'spacing' => 'one', + ], + //'declare_strict_types' => true, + 'heredoc_to_nowdoc' => true, + 'is_null' => [ + 'use_yoda_style' => false, + ], + 'linebreak_after_opening_tag' => true, + 'new_with_braces' => false, + 'no_multiline_whitespace_before_semicolons' => true, + 'no_php4_constructor' => true, + 'no_unreachable_default_argument_value' => true, + 'no_useless_else' => true, + 'no_useless_return' => true, + 'ordered_imports' => true, + 'php_unit_strict' => true, + 'phpdoc_add_missing_param_annotation' => false, + 'phpdoc_align' => false, + 'phpdoc_annotation_without_dot' => false, + 'phpdoc_separation' => false, + 'phpdoc_to_comment' => false, + 'phpdoc_var_without_name' => true, + 'pow_to_exponentiation' => true, + 'unary_operator_spaces' => false, + 'return_type_declaration' => [ + 'space_before' => 'one', + ], + 'semicolon_after_instruction' => true, + 'strict_comparison' => true, + 'strict_param' => true, + 'yoda_style' => false, + 'native_function_invocation' => false, + 'single_line_throw' => false, + ]) + ->setRiskyAllowed(true) + ->setFinder($finder); diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/.phpstorm.meta.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/.phpstorm.meta.php new file mode 100644 index 0000000..87c1f76 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/.phpstorm.meta.php @@ -0,0 +1,18 @@ + [ + "" == "@", + ], + \DI\Container::get('') => [ + "" == "@", + ], + \EasyMock\EasyMock::easyMock('') => [ + "" == "@", + ], + \EasyMock\EasyMock::easySpy('') => [ + "" == "@", + ], + ]; +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/.styleci.yml b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/.styleci.yml new file mode 100644 index 0000000..df06116 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/.styleci.yml @@ -0,0 +1,17 @@ +preset: recommended + +enabled: + - phpdoc_no_empty_return + - concat_with_spaces + - declare_strict_types + +disabled: + - phpdoc_to_comment + - unary_operators_spaces + - concat_without_spaces + - empty_return + - new_with_braces + - phpdoc_align + - phpdoc_separation + - align_double_arrow + - no_unreachable_default_argument_value diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/.travis.yml b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/.travis.yml new file mode 100644 index 0000000..103e3e6 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/.travis.yml @@ -0,0 +1,40 @@ +language: php + +sudo: false + +notifications: + email: + on_success: never + +php: + - 7.2 + - 7.3 + - 7.4 + - nightly + +matrix: + fast_finish: true + allow_failures: + - php: nightly + include: + - php: 7.2 + env: dependencies=lowest + +cache: + directories: + - $HOME/.composer/cache + +before_script: + - if [[ $(phpenv version-name) == '7.2' ]]; then composer require satooshi/php-coveralls '~1.0' -n ; fi + - if [[ $(phpenv version-name) != '7.2' ]]; then composer install -n ; fi + - if [ "$dependencies" = "lowest" ]; then composer update --prefer-lowest --prefer-stable -n; fi; + - echo "extension = apcu.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini + - echo 'apc.enable_cli = 1' >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini + +script: + - if [[ $(phpenv version-name) == '7.2' ]]; then vendor/bin/phpunit --coverage-clover clover.xml ; fi + - if [[ $(phpenv version-name) != '7.2' ]]; then vendor/bin/phpunit ; fi + - if [[ $(phpenv version-name) == '7.4' ]]; then vendor/bin/phpstan analyse -c phpstan.neon ; fi + +after_script: + - if [[ $(phpenv version-name) == '7.2' ]]; then php vendor/bin/coveralls -v ; fi diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/404.md b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/404.md new file mode 100644 index 0000000..c4e870f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/404.md @@ -0,0 +1,3 @@ +--- +layout: 404 +--- diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/CONTRIBUTING.md b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/CONTRIBUTING.md new file mode 100644 index 0000000..6e3bd24 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/CONTRIBUTING.md @@ -0,0 +1,52 @@ +# Contributing + +[![Build Status](https://travis-ci.org/PHP-DI/PHP-DI.png?branch=master)](https://travis-ci.org/PHP-DI/PHP-DI) [![Coverage Status](https://coveralls.io/repos/PHP-DI/PHP-DI/badge.png?branch=master)](https://coveralls.io/r/PHP-DI/PHP-DI?branch=master) + +PHP-DI is licensed under the MIT License. + + +## Set up + +* Check out the sources using git or download them + +```bash +$ git clone https://github.com/PHP-DI/PHP-DI.git +``` + +* Install the libraries using composer: + +```bash +$ curl -s http://getcomposer.org/installer | php +$ php composer.phar install +``` + +If you are running Windows or are having trouble, read [the official documentation](http://getcomposer.org/doc/00-intro.md#installation). + + +## Run the tests + +The tests are run with [PHPUnit](http://www.phpunit.de/manual/current/en/installation.html): + +```bash +$ phpunit +``` + + +## Learning the internals + +Read the [How it works](doc/how-it-works.md) documentation. + + +## What to do? + +- Add tests: pick up uncovered situations in the [code coverage report](https://coveralls.io/r/PHP-DI/PHP-DI) +- Resolve issues: [issue list](https://github.com/PHP-DI/PHP-DI/issues) +- Improve the documentation +- … + + +## Coding style + +The code follows PSR0, PSR1 and [PSR2](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md). + +Also, do not hesitate to add your name to the author list of a class in the docblock if you improve it. diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/LICENSE b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/LICENSE new file mode 100644 index 0000000..c2b9aa4 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/LICENSE @@ -0,0 +1,18 @@ +The MIT License (MIT) + +Copyright (c) Matthieu Napoli + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and +associated documentation files (the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial +portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT +NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/README.md b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/README.md new file mode 100644 index 0000000..80c4e5a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/README.md @@ -0,0 +1,27 @@ +--- +layout: home +--- + +[![](doc/img.png)](http://php-di.org/) + +[![Build Status](https://img.shields.io/travis/PHP-DI/PHP-DI/master.svg?style=flat-square)](https://travis-ci.org/PHP-DI/PHP-DI) +[![Coverage Status](https://img.shields.io/coveralls/PHP-DI/PHP-DI/master.svg?style=flat-square)](https://coveralls.io/r/PHP-DI/PHP-DI?branch=master) +[![Downloads per months](https://img.shields.io/packagist/dm/PHP-DI/PHP-DI.svg?style=flat-square)](https://packagist.org/packages/PHP-DI/PHP-DI) +[![Total downloads](https://img.shields.io/packagist/dt/PHP-DI/PHP-DI.svg?style=flat-square)](https://packagist.org/packages/PHP-DI/PHP-DI) + +[![PrettyCI Status](https://hc4rcprbe1.execute-api.eu-west-1.amazonaws.com/dev?name=php-di/php-di)](https://prettyci.com/) + +[![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/PHP-DI/PHP-DI.svg)](http://isitmaintained.com/project/PHP-DI/PHP-DI "Average time to resolve an issue") +[![Percentage of issues still open](http://isitmaintained.com/badge/open/PHP-DI/PHP-DI.svg)](http://isitmaintained.com/project/PHP-DI/PHP-DI "Percentage of issues still open") + +PHP-DI is a dependency injection container meant to be practical, powerful, and framework-agnostic. + +Read more on the website: **[php-di.org](http://php-di.org)** + +Get community support in the Gitter chat room: [![Gitter chat](https://badges.gitter.im/PHP-DI/PHP-DI.png)](https://gitter.im/PHP-DI/PHP-DI) + +## For Enterprise + +*Available as part of the Tidelift Subscription* + +The maintainers of php-di/php-di and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/packagist-php-di-php-di?utm_source=packagist-php-di-php-di&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/SECURITY.md b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/SECURITY.md new file mode 100644 index 0000000..84fd4e3 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/SECURITY.md @@ -0,0 +1,11 @@ +# Security Policy + +## Supported Versions + +Only the latest stable release is supported. + +## Reporting a Vulnerability + +To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). + +Tidelift will coordinate the fix and disclosure. diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/change-log.md b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/change-log.md new file mode 100644 index 0000000..3182feb --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/change-log.md @@ -0,0 +1,436 @@ +# Change log + +## 6.0.2 + +- Fix potential regression introduced when fixing [#582](https://github.com/PHP-DI/PHP-DI/issues/582) + +## 6.0.1 + +- Fix [#526](https://github.com/PHP-DI/PHP-DI/issues/526): Support optional parameters in factories +- [#585](https://github.com/PHP-DI/PHP-DI/issues/585) Add support for PHP-Parser 4.0 +- [#582](https://github.com/PHP-DI/PHP-DI/issues/582) Register `ContainerInterface` to point to the wrapper container if it was defined + +## 6.0 + +This is the complete change log. You can also read the [migration guide](doc/migration/6.0.md) for upgrading or the [blog article](news/22-php-di-6-0-released.md) to see what's new. + +Improvements: + +- [#494](https://github.com/PHP-DI/PHP-DI/pull/494) The container can now be compiled for optimum performances in production +- [#294](https://github.com/PHP-DI/PHP-DI/issues/294), [#349](https://github.com/PHP-DI/PHP-DI/issues/349), [#449](https://github.com/PHP-DI/PHP-DI/pull/449): `DI\object()` has been replaced by more specific and less ambiguous helpers: + - `DI\create()` creates an object, overrides autowiring and previous definitions + - `DI\autowire()` autowires an object and allows to override specific constructor and method parameters +- The container can now be built without parameters: `new Container()` +- Definitions can be nested: + - [#490](https://github.com/PHP-DI/PHP-DI/issues/490) Definitions can be nested in arrays (by [@yuloh](https://github.com/yuloh)) + - [#501](https://github.com/PHP-DI/PHP-DI/issues/501) & [#540](https://github.com/PHP-DI/PHP-DI/issues/540) Autowire definitions can be nested in other definitions + - [#487](https://github.com/PHP-DI/PHP-DI/issues/487) & [#540](https://github.com/PHP-DI/PHP-DI/issues/540) Closures are now handled as factories when they are nested in other definitions +- [#487](https://github.com/PHP-DI/PHP-DI/issues/487) Closures in the config are now always interpreted as factories, even when nested inside other definitions +- [#242](https://github.com/PHP-DI/PHP-DI/issues/242) Error in case a definition is not indexed by a string +- [#505](https://github.com/PHP-DI/PHP-DI/pull/505) Debug container entries +- [#564](https://github.com/PHP-DI/PHP-DI/pull/564) Caching was made almost entirely obsolete by the container compilation, however there is still a caching system entirely rebuilt over APCu for covering the last cases that compilation could not address (see [php-di.org/doc/performances.html](http://php-di.org/doc/performances.html)) + +Fixes: + +- [#499](https://github.com/PHP-DI/PHP-DI/issues/499) & [#488](https://github.com/PHP-DI/PHP-DI/issues/488) Standardize resolution of nested definitions everywhere. + In PHP-DI 5, definitions could be nested in some places (e.g. use a get() in an object definition, etc.). However it did not behave everywhere the same, for example it didn't work for sub-definitions in arrays. + Now in PHP-DI 6 all nested definitions will all be recognized and resolved correctly everywhere. Since #494 (compiled container) performance will not be affected so we can implement a more robust behavior. +- [#343](https://github.com/PHP-DI/PHP-DI/issues/343) Autowiring and Annotations do not work for `object()` inside arrays: it now works with the new `create()` and `autowire()` helpers + +BC breaks: + +- PHP 7 or greater is required and HHVM is no longer supported +- `DI\object()` has been removed, use `DI\create()` or `DI\autowire()` instead +- [#409](https://github.com/PHP-DI/PHP-DI/issues/409): Scopes are removed, read more in the [scopes](doc/scopes.md) documentation. +- Caching was replaced by compiling the container: `ContainerBuilder::setDefinitionCache()` was removed, use `ContainerBuilder::enableCompilation()` instead. +- [#463](https://github.com/PHP-DI/PHP-DI/issues/463) & [#485](https://github.com/PHP-DI/PHP-DI/issues/485): Container-interop support was removed, PSR-11 is used instead (by [@juliangut](https://github.com/juliangut)) +- The deprecated `DI\link()` helper was removed, used `DI\get()` instead +- [#484](https://github.com/PHP-DI/PHP-DI/pull/484) The deprecated `\DI\Debug` class has been removed. Definitions can be cast to string directly +- The exception `DI\Definition\Exception\DefinitionException` was renamed to `DI\Definition\Exception\InvalidDefinition` +- The exception `DI\Definition\Exception\AnnotationException` was renamed to `DI\Definition\Exception\InvalidAnnotation` +- [#516](https://github.com/PHP-DI/PHP-DI/issues/516) `DI\InvokerInterface` was removed in favor of `Invoker\InvokerInterface`. + +Be also aware that internal classes or interfaces may have changed. + +## 5.4.6 + +- Fix [#554](https://github.com/PHP-DI/PHP-DI/issues/554): `Container::make()` fails when combined with `decorate()`. + +## 5.4.5 + +Fixup of 5.4.4. + +- [#531](https://github.com/PHP-DI/PHP-DI/issues/531): performance improvement. + +## 5.4.4 + +This release was broken because it was tagged against the wrong branch. + +- [#531](https://github.com/PHP-DI/PHP-DI/issues/531): performance improvement. + +## 5.4.3 + +- [#467](https://github.com/PHP-DI/PHP-DI/issues/467): register the container against the PSR ContainerInterface + +## 5.4.2 + +- Minor patch to add the `provide: psr/container-implementation` to `composer.json`. + +## 5.4.1 + +- [PSR-11](http://www.php-fig.org/psr/) compliance + +Note that PHP-DI was already compliant with PSR-11 because it was implementing container-interop, and container-interop 1.2 extends PSR-11. This new version just makes it more explicit and will allow to drop container-interop support in the next major versions. + +## 5.4 + +Read the [news entry](news/20-php-di-5-4-released.md). + +New features: + +- [#362](https://github.com/PHP-DI/PHP-DI/issues/362) implemented in [#428](https://github.com/PHP-DI/PHP-DI/pull/428), [#430](https://github.com/PHP-DI/PHP-DI/pull/430), [#431](https://github.com/PHP-DI/PHP-DI/pull/431) and [#432](https://github.com/PHP-DI/PHP-DI/pull/432): factory parameters can now be configured, for example: + ```php + return [ + 'Database' => DI\factory(function ($host) {...}) + ->parameter('host', DI\get('db.host')), + ]; + ``` + Read the [factories documentation](http://php-di.org/doc/php-definitions.html#factories) to learn more. Feature implemented by [@predakanga](https://github.com/predakanga). + +Improvements: + +- [#429](https://github.com/PHP-DI/PHP-DI/pull/429): performance improvements in definition resolution (by [@mnapoli](https://github.com/mnapoli)) +- [#421](https://github.com/PHP-DI/PHP-DI/issues/421): once a `ContainerBuilder` has built a container, it is locked to prevent confusion when adding new definitions to it (by [@mnapoli](https://github.com/mnapoli)) +- [#423](https://github.com/PHP-DI/PHP-DI/pull/423): improved exception messages (by [@mnapoli](https://github.com/mnapoli)) + +## 5.3 + +Read the [news entry](news/19-php-di-5-3-released.md). + +- release of the [2.0 version](https://github.com/PHP-DI/Symfony-Bridge/releases/tag/2.0.0) of the Symfony bridge (by [@mnapoli](https://github.com/mnapoli)) +- PHP 5.5 or above is now required +- a lot of documentation improvements by 9 different contributors +- [#389](https://github.com/PHP-DI/PHP-DI/pull/389): exception message improvement by [@mopahle](https://github.com/mopahle) +- [#359](https://github.com/PHP-DI/PHP-DI/issues/359), [#411](https://github.com/PHP-DI/PHP-DI/issues/411), [#414](https://github.com/PHP-DI/PHP-DI/pull/414), [#412](https://github.com/PHP-DI/PHP-DI/pull/412): compatibility with ProxyManager 1.* and 2.* (by [@holtkamp](https://github.com/holtkamp) and [@mnapoli](https://github.com/mnapoli)) +- [#416](https://github.com/PHP-DI/PHP-DI/pull/416): dumping definitions was refactored into a more lightweight and simple solution; definition "dumpers" have been removed (internal classes), definitions can now be cast to string directly (by [@mnapoli](https://github.com/mnapoli)) + +## 5.2 + +Read the [news entry](news/17-php-di-5-2-released.md). + +Improvements: + +- [#347](https://github.com/PHP-DI/PHP-DI/pull/347) (includes [#333](https://github.com/PHP-DI/PHP-DI/pull/333) and [#345](https://github.com/PHP-DI/PHP-DI/pull/345)): by [@jdreesen](https://github.com/jdreesen), [@quimcalpe](https://github.com/quimcalpe) and [@mnapoli](https://github.com/mnapoli) + - Allow injection of any container object as factory parameter via type hinting + - Allow injection of a `DI\Factory\RequestedEntry` object to get the requested entry name +- [#272](https://github.com/PHP-DI/PHP-DI/issues/272): Support `"Class::method""` syntax for callables (by [@jdreesen](https://github.com/jdreesen)) +- [#332](https://github.com/PHP-DI/PHP-DI/issues/332): IDE support (plugin and documentation) (by [@pulyaevskiy](https://github.com/pulyaevskiy), [@avant1](https://github.com/avant1) and [@mnapoli](https://github.com/mnapoli)) +- [#326](https://github.com/PHP-DI/PHP-DI/pull/326): Exception messages are simpler and more consistent (by [@mnapoli](https://github.com/mnapoli)) +- [#325](https://github.com/PHP-DI/PHP-DI/pull/325): Add a "Edit this page" button in the website to encourage users to improve the documentation (by [@jdreesen](https://github.com/jdreesen)) + +Bugfixes: + +- [#321](https://github.com/PHP-DI/PHP-DI/pull/321): Allow factory definitions to reference arbitrary container entries as callables (by [@jdreesen](https://github.com/jdreesen)) +- [#335](https://github.com/PHP-DI/PHP-DI/issues/335): Class imports in traits are now considered when parsing annotations (by [@thebigb](https://github.com/thebigb)) + +## 5.1 + +Read the [news entry](news/16-php-di-5-1-released.md). + +Improvements: + +- [Zend Framework 2 integration](https://github.com/PHP-DI/ZF2-Bridge) (by @Rastusik) +- [#308](https://github.com/PHP-DI/PHP-DI/pull/308): Instantiate factories using the container (`DI\factory(['FooFactory', 'create'])`) +- Many performances improvements - some benchmarks show up to 35% performance improvements, real results may vary of course +- Many documentation improvements (@jdreesen, @mindplay-dk, @mnapoli, @holtkamp, @Rastusik) +- [#296](https://github.com/PHP-DI/PHP-DI/issues/296): Provide a faster `ArrayCache` implementation, mostly useful in micro-benchmarks + +Bugfixes: + +- [#257](https://github.com/PHP-DI/PHP-DI/issues/257) & [#274](https://github.com/PHP-DI/PHP-DI/issues/274): Private properties of parent classes are not injected when using annotations +- [#300](https://github.com/PHP-DI/PHP-DI/pull/300): Exception if object definition extends an incompatible definition +- [#306](https://github.com/PHP-DI/PHP-DI/issues/306): Errors when using parameters passed by reference (fixed by @bradynpoulsen) +- [#318](https://github.com/PHP-DI/PHP-DI/issues/318): `Container::call()` ignores parameter's default value + +Internal changes: + +- [#276](https://github.com/PHP-DI/PHP-DI/pull/276): Tests now pass on Windows (@bgaillard) + +## 5.0 + +This is the complete change log. You can also read the [migration guide](doc/migration/5.0.md) for upgrading, or [the news article](news/15-php-di-5-0-released.md) for a nicer introduction to this new version. + +Improvements: + +- Moved to an organization on GitHub: [github.com/PHP-DI/PHP-DI](https://github.com/PHP-DI/PHP-DI) +- The package has been renamed to: from `mnapoli/php-di` to [`php-di/php-di`](https://packagist.org/packages/php-di/php-di) +- New [Silex integration](doc/frameworks/silex.md) +- Lighter package: from 10 to 3 Composer dependencies! +- [#235](https://github.com/PHP-DI/PHP-DI/issues/235): `DI\link()` is now deprecated in favor of `DI\get()`. There is no BC break as `DI\link()` still works. +- [#207](https://github.com/PHP-DI/PHP-DI/issues/207): Support for `DI\link()` in arrays +- [#203](https://github.com/PHP-DI/PHP-DI/issues/203): New `DI\string()` helper ([documentation](doc/php-definitions.md)) +- [#208](https://github.com/PHP-DI/PHP-DI/issues/208): Support for nested definitions +- [#226](https://github.com/PHP-DI/PHP-DI/pull/226): `DI\factory()` can now be omitted with closures: + + ```php + // before + 'My\Class' => DI\factory(function () { ... }) + // now (optional shortcut) + 'My\Class' => function () { ... } + ``` +- [#193](https://github.com/PHP-DI/PHP-DI/issues/193): `DI\object()->method()` now supports calling the same method twice (or more). +- [#248](https://github.com/PHP-DI/PHP-DI/issues/248): New `DI\decorate()` helper to decorate a previously defined entry ([documentation](doc/definition-overriding.md)) +- [#215](https://github.com/PHP-DI/PHP-DI/pull/215): New `DI\add()` helper to add entries to an existing array ([documentation](doc/definition-overriding.md)) +- [#218](https://github.com/PHP-DI/PHP-DI/issues/218): `ContainerBuilder::addDefinitions()` can now take an array of definitions +- [#211](https://github.com/PHP-DI/PHP-DI/pull/211): `ContainerBuilder::addDefinitions()` is now fluent (return `$this`) +- [#250](https://github.com/PHP-DI/PHP-DI/issues/250): `Container::call()` now also accepts parameters not indexed by name as well as embedded definitions ([documentation](doc/container.md)) +- Various performance improvements, e.g. lower the number of files loaded, simpler architecture, … + +BC breaks: + +- PHP-DI now requires a version of PHP >= 5.4.0 +- The package is lighter by default: + - [#251](https://github.com/PHP-DI/PHP-DI/issues/251): Annotations are disabled by default, if you use annotations enable them with `$containerBuilder->useAnnotations(true)`. Additionally the `doctrine/annotations` package isn't required by default anymore, so you also need to run `composer require doctrine/annotations`. + - `doctrine/cache` is not installed by default anymore, you need to require it in `composer.json` (`~1.0`) if you want to configure a cache for PHP-DI + - [#198](https://github.com/PHP-DI/PHP-DI/issues/198): `ocramius/proxy-manager` is not installed by default anymore, you need to require it in `composer.json` (`~1.0`) if you want to use **lazy injection** +- Closures are now converted into factory definitions automatically. If you ever defined a closure as a value (e.g. to have the closure injected in a class), you need to wrap the closure with the new `DI\value()` helper. +- [#223](https://github.com/PHP-DI/PHP-DI/issues/223): `DI\ContainerInterface` was deprecated since v4.1 and has been removed + +Internal changes in case you were replacing/extending some parts: + +- the definition sources architecture has been refactored, if you defined custom definition sources you will need to update your code (it should be much easier now) +- [#252](https://github.com/PHP-DI/PHP-DI/pull/252): `DI\Scope` internal implementation has changed. You are encouraged to use the constants (`DI\Scope::SINGLETON` and `DI\Scope::PROTOTYPE`) instead of the static methods, but backward compatibility is kept (static methods still work). +- [#241](https://github.com/PHP-DI/PHP-DI/issues/241): `Container::call()` now uses the *Invoker* external library + +## 4.4 + +Read the [news entry](news/13-php-di-4-4-released.md). + +- [#185](https://github.com/PHP-DI/PHP-DI/issues/185) Support for invokable objects in `Container::call()` +- [#192](https://github.com/PHP-DI/PHP-DI/pull/192) Support for invokable classes in `Container::call()` (will instantiate the class) +- [#184](https://github.com/PHP-DI/PHP-DI/pull/184) Option to ignore phpdoc errors + +## 4.3 + +Read the [news entry](news/11-php-di-4-3-released.md). + +- [#176](https://github.com/PHP-DI/PHP-DI/pull/176) New definition type for reading environment variables: `DI\env()` +- [#181](https://github.com/PHP-DI/PHP-DI/pull/181) `DI\FactoryInterface` and `DI\InvokerInterface` are now auto-registered inside the container so that you can inject them without any configuration needed +- [#173](https://github.com/PHP-DI/PHP-DI/pull/173) `$container->call(['MyClass', 'method]);` will get `MyClass` from the container if `method()` is not a static method + +## 4.2.2 + +- Fixed [#180](https://github.com/PHP-DI/PHP-DI/pull/180): `Container::call()` with object methods (`[$object, 'method']`) is now supported + +## 4.2.1 + +- Support for PHP 5.3.3, which was previously incomplete because of a bug in the reflection (there is now a workaround for this bug) + +But if you can, seriously avoid this (really old) PHP version and upgrade. + +## 4.2 + +Read the [news entry](news/10-php-di-4-2-released.md). + +**Minor BC-break**: Optional parameters (that were not configured) were injected, they are now ignored, which is what naturally makes sense since they are optional. +Example: + +```php + public function __construct(Bar $bar = null) + { + $this->bar = $bar ?: $this->createDefaultBar(); + } +``` + +Before 4.2, PHP-DI would try to inject a `Bar` instance. From 4.2 and onwards, it will inject `null`. + +Of course, you can still explicitly define an injection for the optional parameters and that will work. + +All changes: + +* [#162](https://github.com/PHP-DI/PHP-DI/pull/162) Added `Container::call()` to call functions with dependency injection +* [#156](https://github.com/PHP-DI/PHP-DI/issues/156) Wildcards (`*`) in definitions +* [#164](https://github.com/PHP-DI/PHP-DI/issues/164) Prototype scope is now available for `factory()` definitions too +* FIXED [#168](https://github.com/PHP-DI/PHP-DI/pull/168) `Container::has()` now returns false for interfaces and abstract classes that are not mapped in the definitions +* FIXED [#171](https://github.com/PHP-DI/PHP-DI/issues/171) Optional parameters are now ignored (not injected) if not set in the definitions (see the BC-break warning above) + +## 4.1 + +Read the [news entry](news/09-php-di-4-1-released.md). + +BC-breaks: None. + +* [#138](https://github.com/PHP-DI/PHP-DI/issues/138) [Container-interop](https://github.com/container-interop/container-interop) compliance +* [#143](https://github.com/PHP-DI/PHP-DI/issues/143) Much more explicit exception messages +* [#157](https://github.com/PHP-DI/PHP-DI/issues/157) HHVM support +* [#158](https://github.com/PHP-DI/PHP-DI/issues/158) Improved the documentation for [Symfony 2 integration](http://php-di.org/doc/frameworks/symfony2.html) + +## 4.0 + +Major changes: + +* The configuration format has changed ([read more here to understand why](news/06-php-di-4-0-new-definitions.md)) + +Read the migration guide if you are using 3.x: [Migration guide from 3.x to 4.0](doc/migration/4.0.md). + +BC-breaks: + +* YAML, XML and JSON definitions have been removed, and the PHP definition format has changed (see above) +* `ContainerSingleton` has been removed +* You cannot configure an injection as lazy anymore, you can only configure a container entry as lazy +* The Container constructor now takes mandatory parameters. Use the ContainerBuilder to create a Container. +* Removed `ContainerBuilder::setDefinitionsValidation()` (no definition validation anymore) +* `ContainerBuilder::useReflection()` is now named: `ContainerBuilder::useAutowiring()` +* `ContainerBuilder::addDefinitionsFromFile()` is now named: `ContainerBuilder::addDefinitions()` +* The `$proxy` parameter in `Container::get($name, $proxy = true)` hase been removed. To get a proxy, you now need to define an entry as "lazy". + +Other changes: + +* Added `ContainerInterface` and `FactoryInterface`, both implemented by the container. +* [#115](https://github.com/PHP-DI/PHP-DI/issues/115) Added `Container::has()` +* [#142](https://github.com/PHP-DI/PHP-DI/issues/142) Added `Container::make()` to resolve an entry +* [#127](https://github.com/PHP-DI/PHP-DI/issues/127) Added support for cases where PHP-DI is wrapped by another container (like Acclimate): PHP-DI can now use the wrapping container to perform injections +* [#128](https://github.com/PHP-DI/PHP-DI/issues/128) Configure entry aliases +* [#110](https://github.com/PHP-DI/PHP-DI/issues/110) XML definitions are not supported anymore +* [#122](https://github.com/PHP-DI/PHP-DI/issues/122) JSON definitions are not supported anymore +* `ContainerSingleton` has finally been removed +* Added `ContainerBuilder::buildDevContainer()` to get started with a default container very easily. +* [#99](https://github.com/PHP-DI/PHP-DI/issues/99) Fixed "`@param` with PHP internal type throws exception" + +## 3.5.1 + +* FIXED [#126](https://github.com/PHP-DI/PHP-DI/issues/126): `Container::set` without effect if a value has already been set and retrieved + +## 3.5 + +Read the [news entry](news/05-php-di-3-5.md). + +* Importing `@Inject` and `@Injectable` annotations is now optional! It means that you don't have to write `use DI\Annotation\Inject` anymore +* FIXED [#124](https://github.com/PHP-DI/PHP-DI/issues/124): `@Injects` annotation conflicts with other annotations + +## 3.4 + +Read the [news entry](news/04-php-di-3-4.md). + +* [#106](https://github.com/PHP-DI/PHP-DI/pull/106) You can now define arrays of values (in YAML, PHP, …) thanks to [@unkind](https://github.com/unkind) +* [#98](https://github.com/PHP-DI/PHP-DI/issues/98) `ContainerBuilder` is now fluent thanks to [@drdamour](https://github.com/drdamour) +* [#101](https://github.com/PHP-DI/PHP-DI/pull/101) Optional parameters are now supported: if you don't define a value to inject, their default value will be used +* XML definitions have been deprecated, there weren't even documented and were not maintained. They will be removed in 4.0. +* FIXED [#100](https://github.com/PHP-DI/PHP-DI/issues/100): bug for lazy injection in constructors + +## 3.3 + +Read the [news entry](news/03-php-di-3-3.md). + +* Inject dependencies on an existing instance with `Container::injectOn` (work from [Jeff Flitton](https://github.com/jflitton): [#89](https://github.com/PHP-DI/PHP-DI/pull/89)). +* [#86](https://github.com/PHP-DI/PHP-DI/issues/86): Optimized definition lookup (faster) +* FIXED [#87](https://github.com/PHP-DI/PHP-DI/issues/87): Rare bug in the `PhpDocParser`, fixed by [drdamour](https://github.com/drdamour) + +## 3.2 + +Read the [news entry](news/02-php-di-3-2.md). + +Small BC-break: PHP-DI 3.0 and 3.1 injected properties before calling the constructor. This was confusing and [not supported for internal classes](https://github.com/PHP-DI/PHP-DI/issues/74). +From 3.2 and on, properties are injected after calling the constructor. + +* **[Lazy injection](doc/lazy-injection.md)**: it is now possible to use lazy injection on properties and methods (setters and constructors). +* Lazy dependencies are now proxies that extend the class they proxy, so type-hinting works. +* Addition of the **`ContainerBuilder`** object, that helps to [create and configure a `Container`](doc/container-configuration.md). +* Some methods for configuring the Container have gone **deprecated** in favor of the `ContainerBuilder`. Fear not, these deprecated methods will remain until next major version (4.0). + * `Container::useReflection`, use ContainerBuilder::useReflection instead + * `Container::useAnnotations`, use ContainerBuilder::useAnnotations instead + * `Container::setDefinitionCache`, use ContainerBuilder::setDefinitionCache instead + * `Container::setDefinitionsValidation`, use ContainerBuilder::setDefinitionsValidation instead +* The container is now auto-registered (as 'DI\Container'). You can now inject the container without registering it. + +## 3.1.1 + +* Value definitions (`$container->set('foo', 80)`) are not cached anymore +* FIXED [#82](https://github.com/PHP-DI/PHP-DI/issues/82): Serialization error when using a cache + +## 3.1 + +Read the [news entry](news/01-php-di-3-1.md). + +* Zend Framework 1 integration through the [PHP-DI-ZF1 project](https://github.com/PHP-DI/PHP-DI-ZF1) +* Fixed the order of priorities when you mix different definition sources (reflection, annotations, files, …). See [Definition overriding](doc/definition-overriding.md) +* Now possible to define null values with `$container->set('foo', null)` (see [#79](https://github.com/PHP-DI/PHP-DI/issues/79)). +* Deprecated usage of `ContainerSingleton`, will be removed in next major version (4.0) + +## 3.0.6 + +* FIXED [#76](https://github.com/PHP-DI/PHP-DI/issues/76): Definition conflict when setting a closure for a class name + +## 3.0.5 + +* FIXED [#70](https://github.com/PHP-DI/PHP-DI/issues/70): Definition conflict when setting a value for a class name + +## 3.0.4 + +* FIXED [#69](https://github.com/PHP-DI/PHP-DI/issues/69): YamlDefinitionFileLoader crashes if YAML file is empty + +## 3.0.3 + +* Fixed over-restrictive dependencies in composer.json + +## 3.0.2 + +* [#64](https://github.com/PHP-DI/PHP-DI/issues/64): Non PHP-DI exceptions are not captured-rethrown anymore when injecting dependencies (cleaner stack trace) + +## 3.0.1 + +* [#62](https://github.com/PHP-DI/PHP-DI/issues/62): When using aliases, definitions are now merged + +## 3.0 + +Major compatibility breaks with 2.x. + +* The container is no longer a Singleton (but `ContainerSingleton::getInstance()` is available for fools who like it) +* Setter injection +* Constructor injection +* Scopes: singleton (share the same instance of the class) or prototype (create a new instance each time it is fetched). Defined at class level. +* Configuration is reworked from scratch. Now every configuration backend can do 100% of the job. +* Provided configuration backends: + * Reflection + * Annotations: @Inject, @Injectable + * PHP code (`Container::set()`) + * PHP array + * YAML file +* As a consequence, annotations are not mandatory anymore, all functionalities can be used with or without annotations. +* Renamed `DI\Annotations\` to `DI\Annotation\` +* `Container` no longer implements ArrayAccess, use only `$container->get($key)` now +* ZF1 integration broken and removed (work in progress for next releases) +* Code now follows PSR1 and PSR2 coding styles +* FIXED: [#58](https://github.com/PHP-DI/PHP-DI/issues/58) Getting a proxy of an alias didn't work + +## 2.1 + +* `use` statements to import classes from other namespaces are now taken into account with the `@var` annotation +* Updated and lightened the dependencies : `doctrine/common` has been replaced with more specific `doctrine/annotations` and `doctrine/cache` + +## 2.0 + +Major compatibility breaks with 1.x. + +* `Container::resolveDependencies()` has been renamed to `Container::injectAll()` +* Dependencies are now injected **before** the constructor is called, and thus are available in the constructor +* Merged `@Value` annotation with `@Inject`: no difference between value and bean injection anymore +* Container implements ArrayAccess for get() and set() (`$container['db.host'] = 'localhost';`) +* Ini configuration files removed: configuration is done in PHP +* Allow to define beans within closures for lazy-loading +* Switched to MIT License + +Warning: + +* If you use PHP 5.3 and __wakeup() methods, they will be called when PHP-DI creates new instances of those classes. + +## 1.1 + +* Caching of annotations based on Doctrine caches + +## 1.0 + +* DependencyManager renamed to Container +* Refactored basic Container usage with `get` and `set` +* Allow named injection `@Inject(name="")` +* Zend Framework integration diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/composer.json b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/composer.json new file mode 100644 index 0000000..0a1fbfb --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/composer.json @@ -0,0 +1,50 @@ +{ + "name": "php-di/php-di", + "type": "library", + "description": "The dependency injection container for humans", + "keywords": ["di", "dependency injection", "container", "ioc", "psr-11", "psr11", "container-interop"], + "homepage": "http://php-di.org/", + "license": "MIT", + "autoload": { + "psr-4": { + "DI\\": "src/" + }, + "files": [ + "src/functions.php" + ] + }, + "autoload-dev": { + "psr-4": { + "DI\\Test\\IntegrationTest\\": "tests/IntegrationTest/", + "DI\\Test\\UnitTest\\": "tests/UnitTest/" + } + }, + "scripts": { + "test": "phpunit", + "format-code": "php-cs-fixer fix --allow-risky=yes", + "phpstan": "phpstan analyse -l 5 -c phpstan.neon src" + }, + "require": { + "php": ">=7.2.0", + "psr/container": "^1.0", + "php-di/invoker": "^2.0", + "php-di/phpdoc-reader": "^2.0.1", + "jeremeamia/superclosure": "^2.0", + "nikic/php-parser": "^2.0|^3.0|^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5", + "mnapoli/phpunit-easymock": "^1.2", + "doctrine/annotations": "~1.2", + "ocramius/proxy-manager": "~2.0.2", + "friendsofphp/php-cs-fixer": "^2.4", + "phpstan/phpstan": "^0.12" + }, + "provide": { + "psr/container-implementation": "^1.0" + }, + "suggest": { + "doctrine/annotations": "Install it if you want to use annotations (version ~1.2)", + "ocramius/proxy-manager": "Install it if you want to use lazy injection (version ~2.0)" + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/couscous.yml b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/couscous.yml new file mode 100644 index 0000000..461712c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/couscous.yml @@ -0,0 +1,147 @@ +baseUrl: http://php-di.org + +scripts: + before: + - lessc --clean-css website/less/main.less website/css/all.min.css + +exclude: + - vendor + - website + - src + - tests + - logo + +menu: + items: + introduction: + section: Introduction + items: + getting-started: + text: Getting started + url: doc/getting-started.html + understanding-di: + text: Understanding dependency injection + url: doc/understanding-di.html + best-practices: + text: "\"Best practices\" guide" + url: doc/best-practices.html + usage: + section: Usage + items: + container-configuration: + text: Configuring the container + url: doc/container-configuration.html + container: + text: Using the container + url: doc/container.html + definition: + section: Definitions + items: + definition-introduction: + text: Introduction + url: doc/definition.html + autowiring: + text: Autowiring + url: doc/autowiring.html + php-definitions: + text: PHP definitions + url: doc/php-definitions.html + annotations: + text: Annotations + url: doc/annotations.html + definition-overriding: + text: Definition extensions and overriding + url: doc/definition-overriding.html + frameworks: + section: Frameworks + items: + slim: + text: Slim + url: doc/frameworks/slim.html + symfony: + text: Symfony + url: doc/frameworks/symfony2.html + zf2: + text: Zend Framework 2 + url: doc/frameworks/zf2.html + zf1: + text: Zend Framework 1 + url: doc/frameworks/zf1.html + ze: + text: Zend Expressive + url: doc/frameworks/zend-expressive.html + silly: + text: Silly + url: doc/frameworks/silly.html + silex: + text: Silex + url: doc/frameworks/silex.html + demo: + text: Demo application + absoluteUrl: https://github.com/PHP-DI/demo + advanced: + section: Advanced topics + items: + performances: + text: Performances + url: doc/performances.html + lazy-injection: + text: Lazy injection + url: doc/lazy-injection.html + inject-on-instance: + text: Inject on an existing instance + url: doc/inject-on-instance.html + environments: + text: Injections depending on the environment + url: doc/environments.html + ide-integration: + text: IDE integration + url: doc/ide-integration.html + migration: + section: Migration guides + items: + v4: + text: From PHP-DI 3.x to 4.0 + url: doc/migration/4.0.html + v5: + text: From PHP-DI 4.x to 5.0 + url: doc/migration/5.0.html + v6: + text: From PHP-DI 5.x to 6.0 + url: doc/migration/6.0.html + support: + section: Support + items: + enterprise-support: + text: Enterprise support + url: support.html + internals: + section: Internals + items: + contributing: + text: Contributing + url: contributing.html + how-it-works: + text: How PHP-DI works + url: doc/how-it-works.html + versions: + section: Old documentation + items: + docv3: + text: PHP-DI 3.x + absoluteUrl: https://github.com/PHP-DI/PHP-DI/tree/3.x/doc + docv4: + text: PHP-DI 4.x + absoluteUrl: https://github.com/PHP-DI/PHP-DI/tree/4.x/doc + docv5: + text: PHP-DI 5.x + absoluteUrl: https://github.com/PHP-DI/PHP-DI/tree/5.4/doc + +frameworks: + zf1: Zend Framework 1 + zf2: Zend Framework 2 + ze: Zend Expressive + symfony2: Symfony + silex: Silex + slim: Slim + silly: Silly diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/phpstan-baseline.neon b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/phpstan-baseline.neon new file mode 100644 index 0000000..aca40e3 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/phpstan-baseline.neon @@ -0,0 +1,62 @@ +parameters: + ignoreErrors: + - + message: "#^Else branch is unreachable because ternary operator condition is always true\\.$#" + count: 1 + path: src\CompiledContainer.php + + - + message: "#^Negated boolean expression is always false\\.$#" + count: 1 + path: src\CompiledContainer.php + + - + message: "#^Negated boolean expression is always false\\.$#" + count: 2 + path: src\Compiler\Compiler.php + + - + message: "#^If condition is always false\\.$#" + count: 1 + path: src\Compiler\Compiler.php + + - + message: "#^Else branch is unreachable because ternary operator condition is always true\\.$#" + count: 2 + path: src\Container.php + + - + message: "#^Negated boolean expression is always false\\.$#" + count: 1 + path: src\Container.php + + - + message: "#^Result of && is always false\\.$#" + count: 1 + path: src\ContainerBuilder.php + + - + message: "#^Else branch is unreachable because ternary operator condition is always true\\.$#" + count: 1 + path: src\ContainerBuilder.php + + - + message: "#^Negated boolean expression is always false\\.$#" + count: 1 + path: src\Definition\ArrayDefinitionExtension.php + + - + message: "#^Parameter \\#1 \\$definition \\(DI\\\\Definition\\\\InstanceDefinition\\) of method DI\\\\Definition\\\\Resolver\\\\InstanceInjector\\:\\:resolve\\(\\) should be compatible with parameter \\$definition \\(DI\\\\Definition\\\\ObjectDefinition\\) of method DI\\\\Definition\\\\Resolver\\\\ObjectCreator\\:\\:resolve\\(\\)$#" + count: 1 + path: src\Definition\Resolver\InstanceInjector.php + + - + message: "#^Instanceof between DI\\\\Definition\\\\Definition and DI\\\\Definition\\\\AutowireDefinition will always evaluate to false\\.$#" + count: 1 + path: src\Definition\Source\SourceCache.php + + - + message: "#^Parameter \\#1 \\$autoload_function of function spl_autoload_register expects callable\\(string\\)\\: void, ProxyManager\\\\Autoloader\\\\AutoloaderInterface given\\.$#" + count: 1 + path: src\Proxy\ProxyFactory.php + diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/phpstan.neon b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/phpstan.neon new file mode 100644 index 0000000..ec549c6 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/phpstan.neon @@ -0,0 +1,14 @@ +includes: + - phpstan-baseline.neon + +parameters: + level: 5 + paths: + - src + excludes_analyse: + - src/Compiler/Template.php + ignoreErrors: + - '#Access to undefined constant DI\\CompiledContainer::METHOD_MAPPING.#' + - '#Function apcu_.* not found.#' + reportUnmatchedIgnoredErrors: false + inferPrivatePropertyTypeFromConstructor: true diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/phpunit.xml.dist b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/phpunit.xml.dist new file mode 100644 index 0000000..3658c5e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/phpunit.xml.dist @@ -0,0 +1,33 @@ + + + + + + + ./tests/UnitTest/ + + + ./tests/IntegrationTest/ + + + + + + src + + src/Compiler/Template.php + + + + + diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Annotation/Inject.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Annotation/Inject.php new file mode 100644 index 0000000..c0eef19 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Annotation/Inject.php @@ -0,0 +1,93 @@ + + */ +final class Inject +{ + /** + * Entry name. + * @var string + */ + private $name; + + /** + * Parameters, indexed by the parameter number (index) or name. + * + * Used if the annotation is set on a method + * @var array + */ + private $parameters = []; + + /** + * @throws InvalidAnnotation + */ + public function __construct(array $values) + { + // Process the parameters as a list AND as a parameter array (we don't know on what the annotation is) + + // @Inject(name="foo") + if (isset($values['name']) && is_string($values['name'])) { + $this->name = $values['name']; + + return; + } + + // @Inject + if (! isset($values['value'])) { + return; + } + + $values = $values['value']; + + // @Inject("foo") + if (is_string($values)) { + $this->name = $values; + } + + // @Inject({...}) on a method + if (is_array($values)) { + foreach ($values as $key => $value) { + if (! is_string($value)) { + throw new InvalidAnnotation(sprintf( + '@Inject({"param" = "value"}) expects "value" to be a string, %s given.', + json_encode($value) + )); + } + + $this->parameters[$key] = $value; + } + } + } + + /** + * @return string|null Name of the entry to inject + */ + public function getName() + { + return $this->name; + } + + /** + * @return array Parameters, indexed by the parameter number (index) or name + */ + public function getParameters() : array + { + return $this->parameters; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Annotation/Injectable.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Annotation/Injectable.php new file mode 100644 index 0000000..ea15944 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Annotation/Injectable.php @@ -0,0 +1,42 @@ + + * @author Matthieu Napoli + */ +final class Injectable +{ + /** + * Should the object be lazy-loaded. + * @var bool|null + */ + private $lazy; + + public function __construct(array $values) + { + if (isset($values['lazy'])) { + $this->lazy = (bool) $values['lazy']; + } + } + + /** + * @return bool|null + */ + public function isLazy() + { + return $this->lazy; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/CompiledContainer.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/CompiledContainer.php new file mode 100644 index 0000000..88438d7 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/CompiledContainer.php @@ -0,0 +1,123 @@ + + */ +abstract class CompiledContainer extends Container +{ + /** + * @var InvokerInterface + */ + private $factoryInvoker; + + /** + * {@inheritdoc} + */ + public function get($name) + { + // Try to find the entry in the singleton map + if (isset($this->resolvedEntries[$name]) || array_key_exists($name, $this->resolvedEntries)) { + return $this->resolvedEntries[$name]; + } + + $method = static::METHOD_MAPPING[$name] ?? null; + + // If it's a compiled entry, then there is a method in this class + if ($method !== null) { + // Check if we are already getting this entry -> circular dependency + if (isset($this->entriesBeingResolved[$name])) { + throw new DependencyException("Circular dependency detected while trying to resolve entry '$name'"); + } + $this->entriesBeingResolved[$name] = true; + + try { + $value = $this->$method(); + } finally { + unset($this->entriesBeingResolved[$name]); + } + + // Store the entry to always return it without recomputing it + $this->resolvedEntries[$name] = $value; + + return $value; + } + + return parent::get($name); + } + + /** + * {@inheritdoc} + */ + public function has($name) + { + if (! is_string($name)) { + throw new \InvalidArgumentException(sprintf( + 'The name parameter must be of type string, %s given', + is_object($name) ? get_class($name) : gettype($name) + )); + } + + // The parent method is overridden to check in our array, it avoids resolving definitions + if (isset(static::METHOD_MAPPING[$name])) { + return true; + } + + return parent::has($name); + } + + protected function setDefinition(string $name, Definition $definition) + { + // It needs to be forbidden because that would mean get() must go through the definitions + // every time, which kinds of defeats the performance gains of the compiled container + throw new \LogicException('You cannot set a definition at runtime on a compiled container. You can either put your definitions in a file, disable compilation or ->set() a raw value directly (PHP object, string, int, ...) instead of a PHP-DI definition.'); + } + + /** + * Invoke the given callable. + */ + protected function resolveFactory($callable, $entryName, array $extraParameters = []) + { + // Initialize the factory resolver + if (! $this->factoryInvoker) { + $parameterResolver = new ResolverChain([ + new AssociativeArrayResolver, + new FactoryParameterResolver($this->delegateContainer), + new NumericArrayResolver, + new DefaultValueResolver, + ]); + + $this->factoryInvoker = new Invoker($parameterResolver, $this->delegateContainer); + } + + $parameters = [$this->delegateContainer, new RequestedEntryHolder($entryName)]; + + $parameters = array_merge($parameters, $extraParameters); + + try { + return $this->factoryInvoker->call($callable, $parameters); + } catch (NotCallableException $e) { + throw new InvalidDefinition("Entry \"$entryName\" cannot be resolved: factory " . $e->getMessage()); + } catch (NotEnoughParametersException $e) { + throw new InvalidDefinition("Entry \"$entryName\" cannot be resolved: " . $e->getMessage()); + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Compiler/Compiler.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Compiler/Compiler.php new file mode 100644 index 0000000..97b692f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Compiler/Compiler.php @@ -0,0 +1,401 @@ + + */ +class Compiler +{ + /** + * @var string + */ + private $containerClass; + + /** + * @var string + */ + private $containerParentClass; + + /** + * Definitions indexed by the entry name. The value can be null if the definition needs to be fetched. + * + * Keys are strings, values are `Definition` objects or null. + * + * @var \ArrayIterator + */ + private $entriesToCompile; + + /** + * Progressive counter for definitions. + * + * Each key in $entriesToCompile is defined as 'SubEntry' + counter + * and each definition has always the same key in the CompiledContainer + * if PHP-DI configuration does not change. + * + * @var int + */ + private $subEntryCounter; + + /** + * Progressive counter for CompiledContainer get methods. + * + * Each CompiledContainer method name is defined as 'get' + counter + * and remains the same after each recompilation + * if PHP-DI configuration does not change. + * + * @var int + */ + private $methodMappingCounter; + + /** + * Map of entry names to method names. + * + * @var string[] + */ + private $entryToMethodMapping = []; + + /** + * @var string[] + */ + private $methods = []; + + /** + * @var bool + */ + private $autowiringEnabled; + + /** + * @var ProxyFactory + */ + private $proxyFactory; + + public function __construct(ProxyFactory $proxyFactory) + { + $this->proxyFactory = $proxyFactory; + } + + public function getProxyFactory() : ProxyFactory + { + return $this->proxyFactory; + } + + /** + * Compile the container. + * + * @return string The compiled container file name. + */ + public function compile( + DefinitionSource $definitionSource, + string $directory, + string $className, + string $parentClassName, + bool $autowiringEnabled + ) : string { + $fileName = rtrim($directory, '/') . '/' . $className . '.php'; + + if (file_exists($fileName)) { + // The container is already compiled + return $fileName; + } + + $this->autowiringEnabled = $autowiringEnabled; + + // Validate that a valid class name was provided + $validClassName = preg_match('/^[a-zA-Z_][a-zA-Z0-9_]*$/', $className); + if (!$validClassName) { + throw new InvalidArgumentException("The container cannot be compiled: `$className` is not a valid PHP class name"); + } + + $this->entriesToCompile = new \ArrayIterator($definitionSource->getDefinitions()); + + // We use an ArrayIterator so that we can keep adding new items to the list while we compile entries + foreach ($this->entriesToCompile as $entryName => $definition) { + $silenceErrors = false; + // This is an entry found by reference during autowiring + if (!$definition) { + $definition = $definitionSource->getDefinition($entryName); + // We silence errors for those entries because type-hints may reference interfaces/abstract classes + // which could later be defined, or even not used (we don't want to block the compilation for those) + $silenceErrors = true; + } + if (!$definition) { + // We do not throw a `NotFound` exception here because the dependency + // could be defined at runtime + continue; + } + // Check that the definition can be compiled + $errorMessage = $this->isCompilable($definition); + if ($errorMessage !== true) { + continue; + } + try { + $this->compileDefinition($entryName, $definition); + } catch (InvalidDefinition $e) { + if ($silenceErrors) { + // forget the entry + unset($this->entryToMethodMapping[$entryName]); + } else { + throw $e; + } + } + } + + $this->containerClass = $className; + $this->containerParentClass = $parentClassName; + + ob_start(); + require __DIR__ . '/Template.php'; + $fileContent = ob_get_contents(); + ob_end_clean(); + + $fileContent = "createCompilationDirectory(dirname($fileName)); + file_put_contents($fileName, $fileContent); + + return $fileName; + } + + /** + * @throws DependencyException + * @throws InvalidDefinition + * @return string The method name + */ + private function compileDefinition(string $entryName, Definition $definition) : string + { + // Generate a unique method name + $methodName = 'get' . (++$this->methodMappingCounter); + $this->entryToMethodMapping[$entryName] = $methodName; + + switch (true) { + case $definition instanceof ValueDefinition: + $value = $definition->getValue(); + $code = 'return ' . $this->compileValue($value) . ';'; + break; + case $definition instanceof Reference: + $targetEntryName = $definition->getTargetEntryName(); + $code = 'return $this->delegateContainer->get(' . $this->compileValue($targetEntryName) . ');'; + // If this method is not yet compiled we store it for compilation + if (!isset($this->entriesToCompile[$targetEntryName])) { + $this->entriesToCompile[$targetEntryName] = null; + } + break; + case $definition instanceof StringDefinition: + $entryName = $this->compileValue($definition->getName()); + $expression = $this->compileValue($definition->getExpression()); + $code = 'return \DI\Definition\StringDefinition::resolveExpression(' . $entryName . ', ' . $expression . ', $this->delegateContainer);'; + break; + case $definition instanceof EnvironmentVariableDefinition: + $variableName = $this->compileValue($definition->getVariableName()); + $isOptional = $this->compileValue($definition->isOptional()); + $defaultValue = $this->compileValue($definition->getDefaultValue()); + $code = <<getVariableName()}' has not been defined"); + } + return $defaultValue; +PHP; + break; + case $definition instanceof ArrayDefinition: + try { + $code = 'return ' . $this->compileValue($definition->getValues()) . ';'; + } catch (\Exception $e) { + throw new DependencyException(sprintf( + 'Error while compiling %s. %s', + $definition->getName(), + $e->getMessage() + ), 0, $e); + } + break; + case $definition instanceof ObjectDefinition: + $compiler = new ObjectCreationCompiler($this); + $code = $compiler->compile($definition); + $code .= "\n return \$object;"; + break; + case $definition instanceof DecoratorDefinition: + $decoratedDefinition = $definition->getDecoratedDefinition(); + if (! $decoratedDefinition instanceof Definition) { + if (! $definition->getName()) { + throw new InvalidDefinition('Decorators cannot be nested in another definition'); + } + throw new InvalidDefinition(sprintf( + 'Entry "%s" decorates nothing: no previous definition with the same name was found', + $definition->getName() + )); + } + $code = sprintf( + 'return call_user_func(%s, %s, $this->delegateContainer);', + $this->compileValue($definition->getCallable()), + $this->compileValue($decoratedDefinition) + ); + break; + case $definition instanceof FactoryDefinition: + $value = $definition->getCallable(); + + // Custom error message to help debugging + $isInvokableClass = is_string($value) && class_exists($value) && method_exists($value, '__invoke'); + if ($isInvokableClass && !$this->autowiringEnabled) { + throw new InvalidDefinition(sprintf( + 'Entry "%s" cannot be compiled. Invokable classes cannot be automatically resolved if autowiring is disabled on the container, you need to enable autowiring or define the entry manually.', + $entryName + )); + } + + $definitionParameters = ''; + if (!empty($definition->getParameters())) { + $definitionParameters = ', ' . $this->compileValue($definition->getParameters()); + } + + $code = sprintf( + 'return $this->resolveFactory(%s, %s%s);', + $this->compileValue($value), + var_export($entryName, true), + $definitionParameters + ); + + break; + default: + // This case should not happen (so it cannot be tested) + throw new \Exception('Cannot compile definition of type ' . get_class($definition)); + } + + $this->methods[$methodName] = $code; + + return $methodName; + } + + public function compileValue($value) : string + { + // Check that the value can be compiled + $errorMessage = $this->isCompilable($value); + if ($errorMessage !== true) { + throw new InvalidDefinition($errorMessage); + } + + if ($value instanceof Definition) { + // Give it an arbitrary unique name + $subEntryName = 'subEntry' . (++$this->subEntryCounter); + // Compile the sub-definition in another method + $methodName = $this->compileDefinition($subEntryName, $value); + // The value is now a method call to that method (which returns the value) + return "\$this->$methodName()"; + } + + if (is_array($value)) { + $value = array_map(function ($value, $key) { + $compiledValue = $this->compileValue($value); + $key = var_export($key, true); + + return " $key => $compiledValue,\n"; + }, $value, array_keys($value)); + $value = implode('', $value); + + return "[\n$value ]"; + } + + if ($value instanceof \Closure) { + return $this->compileClosure($value); + } + + return var_export($value, true); + } + + private function createCompilationDirectory(string $directory) + { + if (!is_dir($directory) && !@mkdir($directory, 0777, true)) { + throw new InvalidArgumentException(sprintf('Compilation directory does not exist and cannot be created: %s.', $directory)); + } + if (!is_writable($directory)) { + throw new InvalidArgumentException(sprintf('Compilation directory is not writable: %s.', $directory)); + } + } + + /** + * @return string|true If true is returned that means that the value is compilable. + */ + private function isCompilable($value) + { + if ($value instanceof ValueDefinition) { + return $this->isCompilable($value->getValue()); + } + if ($value instanceof DecoratorDefinition) { + if (empty($value->getName())) { + return 'Decorators cannot be nested in another definition'; + } + } + // All other definitions are compilable + if ($value instanceof Definition) { + return true; + } + if ($value instanceof \Closure) { + return true; + } + if (is_object($value)) { + return 'An object was found but objects cannot be compiled'; + } + if (is_resource($value)) { + return 'A resource was found but resources cannot be compiled'; + } + + return true; + } + + private function compileClosure(\Closure $closure) : string + { + $closureAnalyzer = new AstAnalyzer; + + try { + $closureData = $closureAnalyzer->analyze($closure); + } catch (ClosureAnalysisException $e) { + if (stripos($e->getMessage(), 'Two closures were declared on the same line') !== false) { + throw new InvalidDefinition('Cannot compile closures when two closures are defined on the same line', 0, $e); + } + + throw $e; + } + + /** @var Closure $ast */ + $ast = $closureData['ast']; + + // Force all closures to be static (add the `static` keyword), i.e. they can't use + // $this, which makes sense since their code is copied into another class. + $ast->static = true; + + // Check if the closure imports variables with `use` + if (! empty($ast->uses)) { + throw new InvalidDefinition('Cannot compile closures which import variables using the `use` keyword'); + } + + $code = (new \PhpParser\PrettyPrinter\Standard)->prettyPrint([$ast]); + + // Trim spaces and the last `;` + $code = trim($code, "\t\n\r;"); + + return $code; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Compiler/ObjectCreationCompiler.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Compiler/ObjectCreationCompiler.php new file mode 100644 index 0000000..9f19d4c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Compiler/ObjectCreationCompiler.php @@ -0,0 +1,201 @@ + + */ +class ObjectCreationCompiler +{ + /** + * @var Compiler + */ + private $compiler; + + public function __construct(Compiler $compiler) + { + $this->compiler = $compiler; + } + + public function compile(ObjectDefinition $definition) : string + { + $this->assertClassIsNotAnonymous($definition); + $this->assertClassIsInstantiable($definition); + + // Lazy? + if ($definition->isLazy()) { + return $this->compileLazyDefinition($definition); + } + + try { + $classReflection = new ReflectionClass($definition->getClassName()); + $constructorArguments = $this->resolveParameters($definition->getConstructorInjection(), $classReflection->getConstructor()); + $dumpedConstructorArguments = array_map(function ($value) { + return $this->compiler->compileValue($value); + }, $constructorArguments); + + $code = []; + $code[] = sprintf( + '$object = new %s(%s);', + $definition->getClassName(), + implode(', ', $dumpedConstructorArguments) + ); + + // Property injections + foreach ($definition->getPropertyInjections() as $propertyInjection) { + $value = $propertyInjection->getValue(); + $value = $this->compiler->compileValue($value); + + $className = $propertyInjection->getClassName() ?: $definition->getClassName(); + $property = new ReflectionProperty($className, $propertyInjection->getPropertyName()); + if ($property->isPublic()) { + $code[] = sprintf('$object->%s = %s;', $propertyInjection->getPropertyName(), $value); + } else { + // Private/protected property + $code[] = sprintf( + '\DI\Definition\Resolver\ObjectCreator::setPrivatePropertyValue(%s, $object, \'%s\', %s);', + var_export($propertyInjection->getClassName(), true), + $propertyInjection->getPropertyName(), + $value + ); + } + } + + // Method injections + foreach ($definition->getMethodInjections() as $methodInjection) { + $methodReflection = new \ReflectionMethod($definition->getClassName(), $methodInjection->getMethodName()); + $parameters = $this->resolveParameters($methodInjection, $methodReflection); + + $dumpedParameters = array_map(function ($value) { + return $this->compiler->compileValue($value); + }, $parameters); + + $code[] = sprintf( + '$object->%s(%s);', + $methodInjection->getMethodName(), + implode(', ', $dumpedParameters) + ); + } + } catch (InvalidDefinition $e) { + throw InvalidDefinition::create($definition, sprintf( + 'Entry "%s" cannot be compiled: %s', + $definition->getName(), + $e->getMessage() + )); + } + + return implode("\n ", $code); + } + + public function resolveParameters(MethodInjection $definition = null, ReflectionMethod $method = null) : array + { + $args = []; + + if (! $method) { + return $args; + } + + $definitionParameters = $definition ? $definition->getParameters() : []; + + foreach ($method->getParameters() as $index => $parameter) { + if (array_key_exists($index, $definitionParameters)) { + // Look in the definition + $value = &$definitionParameters[$index]; + } elseif ($parameter->isOptional()) { + // If the parameter is optional and wasn't specified, we take its default value + $args[] = $this->getParameterDefaultValue($parameter, $method); + continue; + } else { + throw new InvalidDefinition(sprintf( + 'Parameter $%s of %s has no value defined or guessable', + $parameter->getName(), + $this->getFunctionName($method) + )); + } + + $args[] = &$value; + } + + return $args; + } + + private function compileLazyDefinition(ObjectDefinition $definition) : string + { + $subDefinition = clone $definition; + $subDefinition->setLazy(false); + $subDefinition = $this->compiler->compileValue($subDefinition); + + $this->compiler->getProxyFactory()->generateProxyClass($definition->getClassName()); + + return <<proxyFactory->createProxy( + '{$definition->getClassName()}', + function (&\$wrappedObject, \$proxy, \$method, \$params, &\$initializer) { + \$wrappedObject = $subDefinition; + \$initializer = null; // turning off further lazy initialization + return true; + } + ); +PHP; + } + + /** + * Returns the default value of a function parameter. + * + * @throws InvalidDefinition Can't get default values from PHP internal classes and functions + * @return mixed + */ + private function getParameterDefaultValue(ReflectionParameter $parameter, ReflectionMethod $function) + { + try { + return $parameter->getDefaultValue(); + } catch (\ReflectionException $e) { + throw new InvalidDefinition(sprintf( + 'The parameter "%s" of %s has no type defined or guessable. It has a default value, ' + . 'but the default value can\'t be read through Reflection because it is a PHP internal class.', + $parameter->getName(), + $this->getFunctionName($function) + )); + } + } + + private function getFunctionName(ReflectionMethod $method) : string + { + return $method->getName() . '()'; + } + + private function assertClassIsNotAnonymous(ObjectDefinition $definition) + { + if (strpos($definition->getClassName(), '@') !== false) { + throw InvalidDefinition::create($definition, sprintf( + 'Entry "%s" cannot be compiled: anonymous classes cannot be compiled', + $definition->getName() + )); + } + } + + private function assertClassIsInstantiable(ObjectDefinition $definition) + { + if ($definition->isInstantiable()) { + return; + } + + $message = ! $definition->classExists() + ? 'Entry "%s" cannot be compiled: the class doesn\'t exist' + : 'Entry "%s" cannot be compiled: the class is not instantiable'; + + throw InvalidDefinition::create($definition, sprintf($message, $definition->getName())); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Compiler/RequestedEntryHolder.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Compiler/RequestedEntryHolder.php new file mode 100644 index 0000000..68b5bc2 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Compiler/RequestedEntryHolder.php @@ -0,0 +1,28 @@ + + */ +class RequestedEntryHolder implements RequestedEntry +{ + /** + * @var string + */ + private $name; + + public function __construct(string $name) + { + $this->name = $name; + } + + public function getName() : string + { + return $this->name; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Compiler/Template.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Compiler/Template.php new file mode 100644 index 0000000..e053639 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Compiler/Template.php @@ -0,0 +1,16 @@ +/** + * This class has been auto-generated by PHP-DI. + */ +class containerClass; ?> extends containerParentClass; ?> +{ + const METHOD_MAPPING = entryToMethodMapping); ?>; + +methods as $methodName => $methodContent) : ?> + protected function () + { + + + } + + +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Container.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Container.php new file mode 100644 index 0000000..c3a33ee --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Container.php @@ -0,0 +1,430 @@ + + */ +class Container implements ContainerInterface, FactoryInterface, InvokerInterface +{ + /** + * Map of entries that are already resolved. + * @var array + */ + protected $resolvedEntries = []; + + /** + * @var MutableDefinitionSource + */ + private $definitionSource; + + /** + * @var DefinitionResolver + */ + private $definitionResolver; + + /** + * Map of definitions that are already fetched (local cache). + * + * @var (Definition|null)[] + */ + private $fetchedDefinitions = []; + + /** + * Array of entries being resolved. Used to avoid circular dependencies and infinite loops. + * @var array + */ + protected $entriesBeingResolved = []; + + /** + * @var InvokerInterface|null + */ + private $invoker; + + /** + * Container that wraps this container. If none, points to $this. + * + * @var ContainerInterface + */ + protected $delegateContainer; + + /** + * @var ProxyFactory + */ + protected $proxyFactory; + + /** + * Use `$container = new Container()` if you want a container with the default configuration. + * + * If you want to customize the container's behavior, you are discouraged to create and pass the + * dependencies yourself, the ContainerBuilder class is here to help you instead. + * + * @see ContainerBuilder + * + * @param ContainerInterface $wrapperContainer If the container is wrapped by another container. + */ + public function __construct( + MutableDefinitionSource $definitionSource = null, + ProxyFactory $proxyFactory = null, + ContainerInterface $wrapperContainer = null + ) { + $this->delegateContainer = $wrapperContainer ?: $this; + + $this->definitionSource = $definitionSource ?: $this->createDefaultDefinitionSource(); + $this->proxyFactory = $proxyFactory ?: new ProxyFactory(false); + $this->definitionResolver = new ResolverDispatcher($this->delegateContainer, $this->proxyFactory); + + // Auto-register the container + $this->resolvedEntries = [ + self::class => $this, + ContainerInterface::class => $this->delegateContainer, + FactoryInterface::class => $this, + InvokerInterface::class => $this, + ]; + } + + /** + * Returns an entry of the container by its name. + * + * @param string $name Entry name or a class name. + * + * @throws DependencyException Error while resolving the entry. + * @throws NotFoundException No entry found for the given name. + * @return mixed + */ + public function get($name) + { + // If the entry is already resolved we return it + if (isset($this->resolvedEntries[$name]) || array_key_exists($name, $this->resolvedEntries)) { + return $this->resolvedEntries[$name]; + } + + $definition = $this->getDefinition($name); + if (! $definition) { + throw new NotFoundException("No entry or class found for '$name'"); + } + + $value = $this->resolveDefinition($definition); + + $this->resolvedEntries[$name] = $value; + + return $value; + } + + /** + * @param string $name + * + * @return Definition|null + */ + private function getDefinition($name) + { + // Local cache that avoids fetching the same definition twice + if (!array_key_exists($name, $this->fetchedDefinitions)) { + $this->fetchedDefinitions[$name] = $this->definitionSource->getDefinition($name); + } + + return $this->fetchedDefinitions[$name]; + } + + /** + * Build an entry of the container by its name. + * + * This method behave like get() except resolves the entry again every time. + * For example if the entry is a class then a new instance will be created each time. + * + * This method makes the container behave like a factory. + * + * @param string $name Entry name or a class name. + * @param array $parameters Optional parameters to use to build the entry. Use this to force specific parameters + * to specific values. Parameters not defined in this array will be resolved using + * the container. + * + * @throws InvalidArgumentException The name parameter must be of type string. + * @throws DependencyException Error while resolving the entry. + * @throws NotFoundException No entry found for the given name. + * @return mixed + */ + public function make($name, array $parameters = []) + { + if (! is_string($name)) { + throw new InvalidArgumentException(sprintf( + 'The name parameter must be of type string, %s given', + is_object($name) ? get_class($name) : gettype($name) + )); + } + + $definition = $this->getDefinition($name); + if (! $definition) { + // If the entry is already resolved we return it + if (array_key_exists($name, $this->resolvedEntries)) { + return $this->resolvedEntries[$name]; + } + + throw new NotFoundException("No entry or class found for '$name'"); + } + + return $this->resolveDefinition($definition, $parameters); + } + + /** + * Test if the container can provide something for the given name. + * + * @param string $name Entry name or a class name. + * + * @throws InvalidArgumentException The name parameter must be of type string. + * @return bool + */ + public function has($name) + { + if (! is_string($name)) { + throw new InvalidArgumentException(sprintf( + 'The name parameter must be of type string, %s given', + is_object($name) ? get_class($name) : gettype($name) + )); + } + + if (array_key_exists($name, $this->resolvedEntries)) { + return true; + } + + $definition = $this->getDefinition($name); + if ($definition === null) { + return false; + } + + return $this->definitionResolver->isResolvable($definition); + } + + /** + * Inject all dependencies on an existing instance. + * + * @param object $instance Object to perform injection upon + * @throws InvalidArgumentException + * @throws DependencyException Error while injecting dependencies + * @return object $instance Returns the same instance + */ + public function injectOn($instance) + { + if (!$instance) { + return $instance; + } + + $className = get_class($instance); + + // If the class is anonymous, don't cache its definition + // Checking for anonymous classes is cleaner via Reflection, but also slower + $objectDefinition = false !== strpos($className, '@anonymous') + ? $this->definitionSource->getDefinition($className) + : $this->getDefinition($className); + + if (! $objectDefinition instanceof ObjectDefinition) { + return $instance; + } + + $definition = new InstanceDefinition($instance, $objectDefinition); + + $this->definitionResolver->resolve($definition); + + return $instance; + } + + /** + * Call the given function using the given parameters. + * + * Missing parameters will be resolved from the container. + * + * @param callable $callable Function to call. + * @param array $parameters Parameters to use. Can be indexed by the parameter names + * or not indexed (same order as the parameters). + * The array can also contain DI definitions, e.g. DI\get(). + * + * @return mixed Result of the function. + */ + public function call($callable, array $parameters = []) + { + return $this->getInvoker()->call($callable, $parameters); + } + + /** + * Define an object or a value in the container. + * + * @param string $name Entry name + * @param mixed|DefinitionHelper $value Value, use definition helpers to define objects + */ + public function set(string $name, $value) + { + if ($value instanceof DefinitionHelper) { + $value = $value->getDefinition($name); + } elseif ($value instanceof \Closure) { + $value = new FactoryDefinition($name, $value); + } + + if ($value instanceof ValueDefinition) { + $this->resolvedEntries[$name] = $value->getValue(); + } elseif ($value instanceof Definition) { + $value->setName($name); + $this->setDefinition($name, $value); + } else { + $this->resolvedEntries[$name] = $value; + } + } + + /** + * Get defined container entries. + * + * @return string[] + */ + public function getKnownEntryNames() : array + { + $entries = array_unique(array_merge( + array_keys($this->definitionSource->getDefinitions()), + array_keys($this->resolvedEntries) + )); + sort($entries); + + return $entries; + } + + /** + * Get entry debug information. + * + * @param string $name Entry name + * + * @throws InvalidDefinition + * @throws NotFoundException + */ + public function debugEntry(string $name) : string + { + $definition = $this->definitionSource->getDefinition($name); + if ($definition instanceof Definition) { + return (string) $definition; + } + + if (array_key_exists($name, $this->resolvedEntries)) { + return $this->getEntryType($this->resolvedEntries[$name]); + } + + throw new NotFoundException("No entry or class found for '$name'"); + } + + /** + * Get formatted entry type. + * + * @param mixed $entry + */ + private function getEntryType($entry) : string + { + if (is_object($entry)) { + return sprintf("Object (\n class = %s\n)", get_class($entry)); + } + + if (is_array($entry)) { + return preg_replace(['/^array \(/', '/\)$/'], ['[', ']'], var_export($entry, true)); + } + + if (is_string($entry)) { + return sprintf('Value (\'%s\')', $entry); + } + + if (is_bool($entry)) { + return sprintf('Value (%s)', $entry === true ? 'true' : 'false'); + } + + return sprintf('Value (%s)', is_scalar($entry) ? $entry : ucfirst(gettype($entry))); + } + + /** + * Resolves a definition. + * + * Checks for circular dependencies while resolving the definition. + * + * @throws DependencyException Error while resolving the entry. + * @return mixed + */ + private function resolveDefinition(Definition $definition, array $parameters = []) + { + $entryName = $definition->getName(); + + // Check if we are already getting this entry -> circular dependency + if (isset($this->entriesBeingResolved[$entryName])) { + throw new DependencyException("Circular dependency detected while trying to resolve entry '$entryName'"); + } + $this->entriesBeingResolved[$entryName] = true; + + // Resolve the definition + try { + $value = $this->definitionResolver->resolve($definition, $parameters); + } finally { + unset($this->entriesBeingResolved[$entryName]); + } + + return $value; + } + + protected function setDefinition(string $name, Definition $definition) + { + // Clear existing entry if it exists + if (array_key_exists($name, $this->resolvedEntries)) { + unset($this->resolvedEntries[$name]); + } + $this->fetchedDefinitions = []; // Completely clear this local cache + + $this->definitionSource->addDefinition($definition); + } + + private function getInvoker() : InvokerInterface + { + if (! $this->invoker) { + $parameterResolver = new ResolverChain([ + new DefinitionParameterResolver($this->definitionResolver), + new NumericArrayResolver, + new AssociativeArrayResolver, + new DefaultValueResolver, + new TypeHintContainerResolver($this->delegateContainer), + ]); + + $this->invoker = new Invoker($parameterResolver, $this); + } + + return $this->invoker; + } + + private function createDefaultDefinitionSource() : SourceChain + { + $source = new SourceChain([new ReflectionBasedAutowiring]); + $source->setMutableDefinitionSource(new DefinitionArray([], new ReflectionBasedAutowiring)); + + return $source; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/ContainerBuilder.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/ContainerBuilder.php new file mode 100644 index 0000000..cc8ad90 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/ContainerBuilder.php @@ -0,0 +1,385 @@ +build(); + * + * @api + * + * @since 3.2 + * @author Matthieu Napoli + */ +class ContainerBuilder +{ + /** + * Name of the container class, used to create the container. + * @var string + */ + private $containerClass; + + /** + * Name of the container parent class, used on compiled container. + * @var string + */ + private $containerParentClass; + + /** + * @var bool + */ + private $useAutowiring = true; + + /** + * @var bool + */ + private $useAnnotations = false; + + /** + * @var bool + */ + private $ignorePhpDocErrors = false; + + /** + * If true, write the proxies to disk to improve performances. + * @var bool + */ + private $writeProxiesToFile = false; + + /** + * Directory where to write the proxies (if $writeProxiesToFile is enabled). + * @var string|null + */ + private $proxyDirectory; + + /** + * If PHP-DI is wrapped in another container, this references the wrapper. + * @var ContainerInterface + */ + private $wrapperContainer; + + /** + * @var DefinitionSource[]|string[]|array[] + */ + private $definitionSources = []; + + /** + * Whether the container has already been built. + * @var bool + */ + private $locked = false; + + /** + * @var string|null + */ + private $compileToDirectory; + + /** + * @var bool + */ + private $sourceCache = false; + + /** + * @var string + */ + protected $sourceCacheNamespace; + + /** + * Build a container configured for the dev environment. + */ + public static function buildDevContainer() : Container + { + return new Container; + } + + /** + * @param string $containerClass Name of the container class, used to create the container. + */ + public function __construct(string $containerClass = Container::class) + { + $this->containerClass = $containerClass; + } + + /** + * Build and return a container. + * + * @return Container + */ + public function build() + { + $sources = array_reverse($this->definitionSources); + + if ($this->useAnnotations) { + $autowiring = new AnnotationBasedAutowiring($this->ignorePhpDocErrors); + $sources[] = $autowiring; + } elseif ($this->useAutowiring) { + $autowiring = new ReflectionBasedAutowiring; + $sources[] = $autowiring; + } else { + $autowiring = new NoAutowiring; + } + + $sources = array_map(function ($definitions) use ($autowiring) { + if (is_string($definitions)) { + // File + return new DefinitionFile($definitions, $autowiring); + } elseif (is_array($definitions)) { + return new DefinitionArray($definitions, $autowiring); + } + + return $definitions; + }, $sources); + $source = new SourceChain($sources); + + // Mutable definition source + $source->setMutableDefinitionSource(new DefinitionArray([], $autowiring)); + + if ($this->sourceCache) { + if (!SourceCache::isSupported()) { + throw new \Exception('APCu is not enabled, PHP-DI cannot use it as a cache'); + } + // Wrap the source with the cache decorator + $source = new SourceCache($source, $this->sourceCacheNamespace); + } + + $proxyFactory = new ProxyFactory( + $this->writeProxiesToFile, + $this->proxyDirectory + ); + + $this->locked = true; + + $containerClass = $this->containerClass; + + if ($this->compileToDirectory) { + $compiler = new Compiler($proxyFactory); + $compiledContainerFile = $compiler->compile( + $source, + $this->compileToDirectory, + $containerClass, + $this->containerParentClass, + $this->useAutowiring || $this->useAnnotations + ); + // Only load the file if it hasn't been already loaded + // (the container can be created multiple times in the same process) + if (!class_exists($containerClass, false)) { + require $compiledContainerFile; + } + } + + return new $containerClass($source, $proxyFactory, $this->wrapperContainer); + } + + /** + * Compile the container for optimum performances. + * + * Be aware that the container is compiled once and never updated! + * + * Therefore: + * + * - in production you should clear that directory every time you deploy + * - in development you should not compile the container + * + * @see http://php-di.org/doc/performances.html + * + * @param string $directory Directory in which to put the compiled container. + * @param string $containerClass Name of the compiled class. Customize only if necessary. + * @param string $containerParentClass Name of the compiled container parent class. Customize only if necessary. + */ + public function enableCompilation( + string $directory, + string $containerClass = 'CompiledContainer', + string $containerParentClass = CompiledContainer::class + ) : self { + $this->ensureNotLocked(); + + $this->compileToDirectory = $directory; + $this->containerClass = $containerClass; + $this->containerParentClass = $containerParentClass; + + return $this; + } + + /** + * Enable or disable the use of autowiring to guess injections. + * + * Enabled by default. + * + * @return $this + */ + public function useAutowiring(bool $bool) : self + { + $this->ensureNotLocked(); + + $this->useAutowiring = $bool; + + return $this; + } + + /** + * Enable or disable the use of annotations to guess injections. + * + * Disabled by default. + * + * @return $this + */ + public function useAnnotations(bool $bool) : self + { + $this->ensureNotLocked(); + + $this->useAnnotations = $bool; + + return $this; + } + + /** + * Enable or disable ignoring phpdoc errors (non-existent classes in `@param` or `@var`). + * + * @return $this + */ + public function ignorePhpDocErrors(bool $bool) : self + { + $this->ensureNotLocked(); + + $this->ignorePhpDocErrors = $bool; + + return $this; + } + + /** + * Configure the proxy generation. + * + * For dev environment, use `writeProxiesToFile(false)` (default configuration) + * For production environment, use `writeProxiesToFile(true, 'tmp/proxies')` + * + * @see http://php-di.org/doc/lazy-injection.html + * + * @param bool $writeToFile If true, write the proxies to disk to improve performances + * @param string|null $proxyDirectory Directory where to write the proxies + * @throws InvalidArgumentException when writeToFile is set to true and the proxy directory is null + * @return $this + */ + public function writeProxiesToFile(bool $writeToFile, string $proxyDirectory = null) : self + { + $this->ensureNotLocked(); + + $this->writeProxiesToFile = $writeToFile; + + if ($writeToFile && $proxyDirectory === null) { + throw new InvalidArgumentException( + 'The proxy directory must be specified if you want to write proxies on disk' + ); + } + $this->proxyDirectory = $proxyDirectory; + + return $this; + } + + /** + * If PHP-DI's container is wrapped by another container, we can + * set this so that PHP-DI will use the wrapper rather than itself for building objects. + * + * @return $this + */ + public function wrapContainer(ContainerInterface $otherContainer) : self + { + $this->ensureNotLocked(); + + $this->wrapperContainer = $otherContainer; + + return $this; + } + + /** + * Add definitions to the container. + * + * @param string|array|DefinitionSource ...$definitions Can be an array of definitions, the + * name of a file containing definitions + * or a DefinitionSource object. + * @return $this + */ + public function addDefinitions(...$definitions) : self + { + $this->ensureNotLocked(); + + foreach ($definitions as $definition) { + if (!is_string($definition) && !is_array($definition) && !($definition instanceof DefinitionSource)) { + throw new InvalidArgumentException(sprintf( + '%s parameter must be a string, an array or a DefinitionSource object, %s given', + 'ContainerBuilder::addDefinitions()', + is_object($definition) ? get_class($definition) : gettype($definition) + )); + } + + $this->definitionSources[] = $definition; + } + + return $this; + } + + /** + * Enables the use of APCu to cache definitions. + * + * You must have APCu enabled to use it. + * + * Before using this feature, you should try these steps first: + * - enable compilation if not already done (see `enableCompilation()`) + * - if you use autowiring or annotations, add all the classes you are using into your configuration so that + * PHP-DI knows about them and compiles them + * Once this is done, you can try to optimize performances further with APCu. It can also be useful if you use + * `Container::make()` instead of `get()` (`make()` calls cannot be compiled so they are not optimized). + * + * Remember to clear APCu on each deploy else your application will have a stale cache. Do not enable the cache + * in development environment: any change you will make to the code will be ignored because of the cache. + * + * @see http://php-di.org/doc/performances.html + * + * @param string $cacheNamespace use unique namespace per container when sharing a single APC memory pool to prevent cache collisions + * @return $this + */ + public function enableDefinitionCache(string $cacheNamespace = '') : self + { + $this->ensureNotLocked(); + + $this->sourceCache = true; + $this->sourceCacheNamespace = $cacheNamespace; + + return $this; + } + + /** + * Are we building a compiled container? + */ + public function isCompilationEnabled() : bool + { + return (bool) $this->compileToDirectory; + } + + private function ensureNotLocked() + { + if ($this->locked) { + throw new \LogicException('The ContainerBuilder cannot be modified after the container has been built'); + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/ArrayDefinition.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/ArrayDefinition.php new file mode 100644 index 0000000..8b06fed --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/ArrayDefinition.php @@ -0,0 +1,73 @@ + + */ +class ArrayDefinition implements Definition +{ + /** + * Entry name. + * @var string + */ + private $name = ''; + + /** + * @var array + */ + private $values; + + public function __construct(array $values) + { + $this->values = $values; + } + + public function getName() : string + { + return $this->name; + } + + public function setName(string $name) + { + $this->name = $name; + } + + public function getValues() : array + { + return $this->values; + } + + public function replaceNestedDefinitions(callable $replacer) + { + $this->values = array_map($replacer, $this->values); + } + + public function __toString() + { + $str = '[' . PHP_EOL; + + foreach ($this->values as $key => $value) { + if (is_string($key)) { + $key = "'" . $key . "'"; + } + + $str .= ' ' . $key . ' => '; + + if ($value instanceof Definition) { + $str .= str_replace(PHP_EOL, PHP_EOL . ' ', (string) $value); + } else { + $str .= var_export($value, true); + } + + $str .= ',' . PHP_EOL; + } + + return $str . ']'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/ArrayDefinitionExtension.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/ArrayDefinitionExtension.php new file mode 100644 index 0000000..b494873 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/ArrayDefinitionExtension.php @@ -0,0 +1,42 @@ + + */ +class ArrayDefinitionExtension extends ArrayDefinition implements ExtendsPreviousDefinition +{ + /** + * @var ArrayDefinition + */ + private $subDefinition; + + public function getValues() : array + { + if (! $this->subDefinition) { + return parent::getValues(); + } + + return array_merge($this->subDefinition->getValues(), parent::getValues()); + } + + public function setExtendedDefinition(Definition $definition) + { + if (! $definition instanceof ArrayDefinition) { + throw new InvalidDefinition(sprintf( + 'Definition %s tries to add array entries but the previous definition is not an array', + $this->getName() + )); + } + + $this->subDefinition = $definition; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/AutowireDefinition.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/AutowireDefinition.php new file mode 100644 index 0000000..25dc3ec --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/AutowireDefinition.php @@ -0,0 +1,12 @@ + + */ +class AutowireDefinition extends ObjectDefinition +{ +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/DecoratorDefinition.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/DecoratorDefinition.php new file mode 100644 index 0000000..4489485 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/DecoratorDefinition.php @@ -0,0 +1,42 @@ + + */ +class DecoratorDefinition extends FactoryDefinition implements Definition, ExtendsPreviousDefinition +{ + /** + * @var Definition|null + */ + private $decorated; + + public function setExtendedDefinition(Definition $definition) + { + $this->decorated = $definition; + } + + /** + * @return Definition|null + */ + public function getDecoratedDefinition() + { + return $this->decorated; + } + + public function replaceNestedDefinitions(callable $replacer) + { + // no nested definitions + } + + public function __toString() + { + return 'Decorate(' . $this->getName() . ')'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Definition.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Definition.php new file mode 100644 index 0000000..696838d --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Definition.php @@ -0,0 +1,37 @@ + + */ +interface Definition extends RequestedEntry +{ + /** + * Returns the name of the entry in the container. + */ + public function getName() : string; + + /** + * Set the name of the entry in the container. + */ + public function setName(string $name); + + /** + * Apply a callable that replaces the definitions nested in this definition. + */ + public function replaceNestedDefinitions(callable $replacer); + + /** + * Definitions can be cast to string for debugging information. + */ + public function __toString(); +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Dumper/ObjectDefinitionDumper.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Dumper/ObjectDefinitionDumper.php new file mode 100644 index 0000000..7e19999 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Dumper/ObjectDefinitionDumper.php @@ -0,0 +1,135 @@ + + */ +class ObjectDefinitionDumper +{ + /** + * Returns the definition as string representation. + */ + public function dump(ObjectDefinition $definition) : string + { + $className = $definition->getClassName(); + $classExist = class_exists($className) || interface_exists($className); + + // Class + if (! $classExist) { + $warning = '#UNKNOWN# '; + } else { + $class = new \ReflectionClass($className); + $warning = $class->isInstantiable() ? '' : '#NOT INSTANTIABLE# '; + } + $str = sprintf(' class = %s%s', $warning, $className); + + // Lazy + $str .= PHP_EOL . ' lazy = ' . var_export($definition->isLazy(), true); + + if ($classExist) { + // Constructor + $str .= $this->dumpConstructor($className, $definition); + + // Properties + $str .= $this->dumpProperties($definition); + + // Methods + $str .= $this->dumpMethods($className, $definition); + } + + return sprintf('Object (' . PHP_EOL . '%s' . PHP_EOL . ')', $str); + } + + private function dumpConstructor(string $className, ObjectDefinition $definition) : string + { + $str = ''; + + $constructorInjection = $definition->getConstructorInjection(); + + if ($constructorInjection !== null) { + $parameters = $this->dumpMethodParameters($className, $constructorInjection); + + $str .= sprintf(PHP_EOL . ' __construct(' . PHP_EOL . ' %s' . PHP_EOL . ' )', $parameters); + } + + return $str; + } + + private function dumpProperties(ObjectDefinition $definition) : string + { + $str = ''; + + foreach ($definition->getPropertyInjections() as $propertyInjection) { + $value = $propertyInjection->getValue(); + $valueStr = $value instanceof Definition ? (string) $value : var_export($value, true); + + $str .= sprintf(PHP_EOL . ' $%s = %s', $propertyInjection->getPropertyName(), $valueStr); + } + + return $str; + } + + private function dumpMethods(string $className, ObjectDefinition $definition) : string + { + $str = ''; + + foreach ($definition->getMethodInjections() as $methodInjection) { + $parameters = $this->dumpMethodParameters($className, $methodInjection); + + $str .= sprintf(PHP_EOL . ' %s(' . PHP_EOL . ' %s' . PHP_EOL . ' )', $methodInjection->getMethodName(), $parameters); + } + + return $str; + } + + private function dumpMethodParameters(string $className, MethodInjection $methodInjection) : string + { + $methodReflection = new \ReflectionMethod($className, $methodInjection->getMethodName()); + + $args = []; + + $definitionParameters = $methodInjection->getParameters(); + + foreach ($methodReflection->getParameters() as $index => $parameter) { + if (array_key_exists($index, $definitionParameters)) { + $value = $definitionParameters[$index]; + $valueStr = $value instanceof Definition ? (string) $value : var_export($value, true); + + $args[] = sprintf('$%s = %s', $parameter->getName(), $valueStr); + + continue; + } + + // If the parameter is optional and wasn't specified, we take its default value + if ($parameter->isOptional()) { + try { + $value = $parameter->getDefaultValue(); + + $args[] = sprintf( + '$%s = (default value) %s', + $parameter->getName(), + var_export($value, true) + ); + continue; + } catch (ReflectionException $e) { + // The default value can't be read through Reflection because it is a PHP internal class + } + } + + $args[] = sprintf('$%s = #UNDEFINED#', $parameter->getName()); + } + + return implode(PHP_EOL . ' ', $args); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/EnvironmentVariableDefinition.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/EnvironmentVariableDefinition.php new file mode 100644 index 0000000..73e0e29 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/EnvironmentVariableDefinition.php @@ -0,0 +1,112 @@ + + */ +class EnvironmentVariableDefinition implements Definition +{ + /** + * Entry name. + * @var string + */ + private $name = ''; + + /** + * The name of the environment variable. + * @var string + */ + private $variableName; + + /** + * Whether or not the environment variable definition is optional. + * + * If true and the environment variable given by $variableName has not been + * defined, $defaultValue is used. + * + * @var bool + */ + private $isOptional; + + /** + * The default value to use if the environment variable is optional and not provided. + * @var mixed + */ + private $defaultValue; + + /** + * @param string $variableName The name of the environment variable + * @param bool $isOptional Whether or not the environment variable definition is optional + * @param mixed $defaultValue The default value to use if the environment variable is optional and not provided + */ + public function __construct(string $variableName, bool $isOptional = false, $defaultValue = null) + { + $this->variableName = $variableName; + $this->isOptional = $isOptional; + $this->defaultValue = $defaultValue; + } + + public function getName() : string + { + return $this->name; + } + + public function setName(string $name) + { + $this->name = $name; + } + + /** + * @return string The name of the environment variable + */ + public function getVariableName() : string + { + return $this->variableName; + } + + /** + * @return bool Whether or not the environment variable definition is optional + */ + public function isOptional() : bool + { + return $this->isOptional; + } + + /** + * @return mixed The default value to use if the environment variable is optional and not provided + */ + public function getDefaultValue() + { + return $this->defaultValue; + } + + public function replaceNestedDefinitions(callable $replacer) + { + $this->defaultValue = $replacer($this->defaultValue); + } + + public function __toString() + { + $str = ' variable = ' . $this->variableName . PHP_EOL + . ' optional = ' . ($this->isOptional ? 'yes' : 'no'); + + if ($this->isOptional) { + if ($this->defaultValue instanceof Definition) { + $nestedDefinition = (string) $this->defaultValue; + $defaultValueStr = str_replace(PHP_EOL, PHP_EOL . ' ', $nestedDefinition); + } else { + $defaultValueStr = var_export($this->defaultValue, true); + } + + $str .= PHP_EOL . ' default = ' . $defaultValueStr; + } + + return sprintf('Environment variable (' . PHP_EOL . '%s' . PHP_EOL . ')', $str); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Exception/InvalidAnnotation.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Exception/InvalidAnnotation.php new file mode 100644 index 0000000..630c34a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Exception/InvalidAnnotation.php @@ -0,0 +1,14 @@ + + */ +class InvalidAnnotation extends InvalidDefinition +{ +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Exception/InvalidDefinition.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Exception/InvalidDefinition.php new file mode 100644 index 0000000..54e602b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Exception/InvalidDefinition.php @@ -0,0 +1,24 @@ + + */ +class InvalidDefinition extends \Exception +{ + public static function create(Definition $definition, string $message, \Exception $previous = null) : self + { + return new self(sprintf( + '%s' . PHP_EOL . 'Full definition:' . PHP_EOL . '%s', + $message, + (string) $definition + ), 0, $previous); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/ExtendsPreviousDefinition.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/ExtendsPreviousDefinition.php new file mode 100644 index 0000000..0b26933 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/ExtendsPreviousDefinition.php @@ -0,0 +1,15 @@ + + */ +interface ExtendsPreviousDefinition extends Definition +{ + public function setExtendedDefinition(Definition $definition); +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/FactoryDefinition.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/FactoryDefinition.php new file mode 100644 index 0000000..ed0936f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/FactoryDefinition.php @@ -0,0 +1,79 @@ + + */ +class FactoryDefinition implements Definition +{ + /** + * Entry name. + * @var string + */ + private $name; + + /** + * Callable that returns the value. + * @var callable + */ + private $factory; + + /** + * Factory parameters. + * @var mixed[] + */ + private $parameters = []; + + /** + * @param string $name Entry name + * @param callable $factory Callable that returns the value associated to the entry name. + * @param array $parameters Parameters to be passed to the callable + */ + public function __construct(string $name, $factory, array $parameters = []) + { + $this->name = $name; + $this->factory = $factory; + $this->parameters = $parameters; + } + + public function getName() : string + { + return $this->name; + } + + public function setName(string $name) + { + $this->name = $name; + } + + /** + * @return callable Callable that returns the value associated to the entry name. + */ + public function getCallable() + { + return $this->factory; + } + + /** + * @return array Array containing the parameters to be passed to the callable, indexed by name. + */ + public function getParameters() : array + { + return $this->parameters; + } + + public function replaceNestedDefinitions(callable $replacer) + { + $this->parameters = array_map($replacer, $this->parameters); + } + + public function __toString() + { + return 'Factory'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Helper/AutowireDefinitionHelper.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Helper/AutowireDefinitionHelper.php new file mode 100644 index 0000000..8dfa4e2 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Helper/AutowireDefinitionHelper.php @@ -0,0 +1,72 @@ + + */ +class AutowireDefinitionHelper extends CreateDefinitionHelper +{ + const DEFINITION_CLASS = AutowireDefinition::class; + + /** + * Defines a value for a specific argument of the constructor. + * + * This method is usually used together with annotations or autowiring, when a parameter + * is not (or cannot be) type-hinted. Using this method instead of constructor() allows to + * avoid defining all the parameters (letting them being resolved using annotations or autowiring) + * and only define one. + * + * @param string|int $parameter Parameter name of position for which the value will be given. + * @param mixed $value Value to give to this parameter. + * + * @return $this + */ + public function constructorParameter($parameter, $value) + { + $this->constructor[$parameter] = $value; + + return $this; + } + + /** + * Defines a method to call and a value for a specific argument. + * + * This method is usually used together with annotations or autowiring, when a parameter + * is not (or cannot be) type-hinted. Using this method instead of method() allows to + * avoid defining all the parameters (letting them being resolved using annotations or + * autowiring) and only define one. + * + * If multiple calls to the method have been configured already (e.g. in a previous definition) + * then this method only overrides the parameter for the *first* call. + * + * @param string $method Name of the method to call. + * @param string|int $parameter Parameter name of position for which the value will be given. + * @param mixed $value Value to give to this parameter. + * + * @return $this + */ + public function methodParameter(string $method, $parameter, $value) + { + // Special case for the constructor + if ($method === '__construct') { + $this->constructor[$parameter] = $value; + + return $this; + } + + if (! isset($this->methods[$method])) { + $this->methods[$method] = [0 => []]; + } + + $this->methods[$method][0][$parameter] = $value; + + return $this; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Helper/CreateDefinitionHelper.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Helper/CreateDefinitionHelper.php new file mode 100644 index 0000000..aeae071 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Helper/CreateDefinitionHelper.php @@ -0,0 +1,202 @@ + + */ +class CreateDefinitionHelper implements DefinitionHelper +{ + const DEFINITION_CLASS = ObjectDefinition::class; + + /** + * @var string|null + */ + private $className; + + /** + * @var bool|null + */ + private $lazy; + + /** + * Array of constructor parameters. + * @var array + */ + protected $constructor = []; + + /** + * Array of properties and their value. + * @var array + */ + private $properties = []; + + /** + * Array of methods and their parameters. + * @var array + */ + protected $methods = []; + + /** + * Helper for defining an object. + * + * @param string|null $className Class name of the object. + * If null, the name of the entry (in the container) will be used as class name. + */ + public function __construct(string $className = null) + { + $this->className = $className; + } + + /** + * Define the entry as lazy. + * + * A lazy entry is created only when it is used, a proxy is injected instead. + * + * @return $this + */ + public function lazy() + { + $this->lazy = true; + + return $this; + } + + /** + * Defines the arguments to use to call the constructor. + * + * This method takes a variable number of arguments, example: + * ->constructor($param1, $param2, $param3) + * + * @param mixed... $parameters Parameters to use for calling the constructor of the class. + * + * @return $this + */ + public function constructor(...$parameters) + { + $this->constructor = $parameters; + + return $this; + } + + /** + * Defines a value to inject in a property of the object. + * + * @param string $property Entry in which to inject the value. + * @param mixed $value Value to inject in the property. + * + * @return $this + */ + public function property(string $property, $value) + { + $this->properties[$property] = $value; + + return $this; + } + + /** + * Defines a method to call and the arguments to use. + * + * This method takes a variable number of arguments after the method name, example: + * + * ->method('myMethod', $param1, $param2) + * + * Can be used multiple times to declare multiple calls. + * + * @param string $method Name of the method to call. + * @param mixed... $parameters Parameters to use for calling the method. + * + * @return $this + */ + public function method(string $method, ...$parameters) + { + if (! isset($this->methods[$method])) { + $this->methods[$method] = []; + } + + $this->methods[$method][] = $parameters; + + return $this; + } + + /** + * @return ObjectDefinition + */ + public function getDefinition(string $entryName) : Definition + { + $class = $this::DEFINITION_CLASS; + /** @var ObjectDefinition $definition */ + $definition = new $class($entryName, $this->className); + + if ($this->lazy !== null) { + $definition->setLazy($this->lazy); + } + + if (! empty($this->constructor)) { + $parameters = $this->fixParameters($definition, '__construct', $this->constructor); + $constructorInjection = MethodInjection::constructor($parameters); + $definition->setConstructorInjection($constructorInjection); + } + + if (! empty($this->properties)) { + foreach ($this->properties as $property => $value) { + $definition->addPropertyInjection( + new PropertyInjection($property, $value) + ); + } + } + + if (! empty($this->methods)) { + foreach ($this->methods as $method => $calls) { + foreach ($calls as $parameters) { + $parameters = $this->fixParameters($definition, $method, $parameters); + $methodInjection = new MethodInjection($method, $parameters); + $definition->addMethodInjection($methodInjection); + } + } + } + + return $definition; + } + + /** + * Fixes parameters indexed by the parameter name -> reindex by position. + * + * This is necessary so that merging definitions between sources is possible. + * + * @throws InvalidDefinition + */ + private function fixParameters(ObjectDefinition $definition, string $method, array $parameters) : array + { + $fixedParameters = []; + + foreach ($parameters as $index => $parameter) { + // Parameter indexed by the parameter name, we reindex it with its position + if (is_string($index)) { + $callable = [$definition->getClassName(), $method]; + + try { + $reflectionParameter = new \ReflectionParameter($callable, $index); + } catch (\ReflectionException $e) { + throw InvalidDefinition::create($definition, sprintf("Parameter with name '%s' could not be found. %s.", $index, $e->getMessage())); + } + + $index = $reflectionParameter->getPosition(); + } + + $fixedParameters[$index] = $parameter; + } + + return $fixedParameters; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Helper/DefinitionHelper.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Helper/DefinitionHelper.php new file mode 100644 index 0000000..327167e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Helper/DefinitionHelper.php @@ -0,0 +1,20 @@ + + */ +interface DefinitionHelper +{ + /** + * @param string $entryName Container entry name + */ + public function getDefinition(string $entryName) : Definition; +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Helper/FactoryDefinitionHelper.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Helper/FactoryDefinitionHelper.php new file mode 100644 index 0000000..0a22319 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Helper/FactoryDefinitionHelper.php @@ -0,0 +1,75 @@ + + */ +class FactoryDefinitionHelper implements DefinitionHelper +{ + /** + * @var callable + */ + private $factory; + + /** + * @var bool + */ + private $decorate; + + /** + * @var array + */ + private $parameters = []; + + /** + * @param callable $factory + * @param bool $decorate Is the factory decorating a previous definition? + */ + public function __construct($factory, bool $decorate = false) + { + $this->factory = $factory; + $this->decorate = $decorate; + } + + /** + * @param string $entryName Container entry name + * @return FactoryDefinition + */ + public function getDefinition(string $entryName) : Definition + { + if ($this->decorate) { + return new DecoratorDefinition($entryName, $this->factory, $this->parameters); + } + + return new FactoryDefinition($entryName, $this->factory, $this->parameters); + } + + /** + * Defines arguments to pass to the factory. + * + * Because factory methods do not yet support annotations or autowiring, this method + * should be used to define all parameters except the ContainerInterface and RequestedEntry. + * + * Multiple calls can be made to the method to override individual values. + * + * @param string $parameter Name or index of the parameter for which the value will be given. + * @param mixed $value Value to give to this parameter. + * + * @return $this + */ + public function parameter(string $parameter, $value) + { + $this->parameters[$parameter] = $value; + + return $this; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/InstanceDefinition.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/InstanceDefinition.php new file mode 100644 index 0000000..4c281c6 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/InstanceDefinition.php @@ -0,0 +1,69 @@ + + */ +class InstanceDefinition implements Definition +{ + /** + * Instance on which to inject dependencies. + * + * @var object + */ + private $instance; + + /** + * @var ObjectDefinition + */ + private $objectDefinition; + + /** + * @param object $instance + */ + public function __construct($instance, ObjectDefinition $objectDefinition) + { + $this->instance = $instance; + $this->objectDefinition = $objectDefinition; + } + + public function getName() : string + { + // Name are superfluous for instance definitions + return ''; + } + + public function setName(string $name) + { + // Name are superfluous for instance definitions + } + + /** + * @return object + */ + public function getInstance() + { + return $this->instance; + } + + public function getObjectDefinition() : ObjectDefinition + { + return $this->objectDefinition; + } + + public function replaceNestedDefinitions(callable $replacer) + { + $this->objectDefinition->replaceNestedDefinitions($replacer); + } + + public function __toString() + { + return 'Instance'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/ObjectDefinition.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/ObjectDefinition.php new file mode 100644 index 0000000..8d8d5b6 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/ObjectDefinition.php @@ -0,0 +1,266 @@ + + */ +class ObjectDefinition implements Definition +{ + /** + * Entry name (most of the time, same as $classname). + * @var string + */ + private $name; + + /** + * Class name (if null, then the class name is $name). + * @var string|null + */ + protected $className; + + /** + * Constructor parameter injection. + * @var MethodInjection|null + */ + protected $constructorInjection; + + /** + * Property injections. + * @var PropertyInjection[] + */ + protected $propertyInjections = []; + + /** + * Method calls. + * @var MethodInjection[][] + */ + protected $methodInjections = []; + + /** + * @var bool|null + */ + protected $lazy; + + /** + * Store if the class exists. Storing it (in cache) avoids recomputing this. + * + * @var bool + */ + private $classExists; + + /** + * Store if the class is instantiable. Storing it (in cache) avoids recomputing this. + * + * @var bool + */ + private $isInstantiable; + + /** + * @param string $name Entry name + */ + public function __construct(string $name, string $className = null) + { + $this->name = $name; + $this->setClassName($className); + } + + public function getName() : string + { + return $this->name; + } + + public function setName(string $name) + { + $this->name = $name; + } + + public function setClassName(string $className = null) + { + $this->className = $className; + + $this->updateCache(); + } + + public function getClassName() : string + { + if ($this->className !== null) { + return $this->className; + } + + return $this->name; + } + + /** + * @return MethodInjection|null + */ + public function getConstructorInjection() + { + return $this->constructorInjection; + } + + public function setConstructorInjection(MethodInjection $constructorInjection) + { + $this->constructorInjection = $constructorInjection; + } + + public function completeConstructorInjection(MethodInjection $injection) + { + if ($this->constructorInjection !== null) { + // Merge + $this->constructorInjection->merge($injection); + } else { + // Set + $this->constructorInjection = $injection; + } + } + + /** + * @return PropertyInjection[] Property injections + */ + public function getPropertyInjections() : array + { + return $this->propertyInjections; + } + + public function addPropertyInjection(PropertyInjection $propertyInjection) + { + $className = $propertyInjection->getClassName(); + if ($className) { + // Index with the class name to avoid collisions between parent and + // child private properties with the same name + $key = $className . '::' . $propertyInjection->getPropertyName(); + } else { + $key = $propertyInjection->getPropertyName(); + } + + $this->propertyInjections[$key] = $propertyInjection; + } + + /** + * @return MethodInjection[] Method injections + */ + public function getMethodInjections() : array + { + // Return array leafs + $injections = []; + array_walk_recursive($this->methodInjections, function ($injection) use (&$injections) { + $injections[] = $injection; + }); + + return $injections; + } + + public function addMethodInjection(MethodInjection $methodInjection) + { + $method = $methodInjection->getMethodName(); + if (! isset($this->methodInjections[$method])) { + $this->methodInjections[$method] = []; + } + $this->methodInjections[$method][] = $methodInjection; + } + + public function completeFirstMethodInjection(MethodInjection $injection) + { + $method = $injection->getMethodName(); + + if (isset($this->methodInjections[$method][0])) { + // Merge + $this->methodInjections[$method][0]->merge($injection); + } else { + // Set + $this->addMethodInjection($injection); + } + } + + public function setLazy(bool $lazy = null) + { + $this->lazy = $lazy; + } + + public function isLazy() : bool + { + if ($this->lazy !== null) { + return $this->lazy; + } + // Default value + return false; + } + + public function classExists() : bool + { + return $this->classExists; + } + + public function isInstantiable() : bool + { + return $this->isInstantiable; + } + + public function replaceNestedDefinitions(callable $replacer) + { + array_walk($this->propertyInjections, function (PropertyInjection $propertyInjection) use ($replacer) { + $propertyInjection->replaceNestedDefinition($replacer); + }); + + if ($this->constructorInjection) { + $this->constructorInjection->replaceNestedDefinitions($replacer); + } + + array_walk($this->methodInjections, function ($injectionArray) use ($replacer) { + array_walk($injectionArray, function (MethodInjection $methodInjection) use ($replacer) { + $methodInjection->replaceNestedDefinitions($replacer); + }); + }); + } + + /** + * Replaces all the wildcards in the string with the given replacements. + * + * @param string[] $replacements + */ + public function replaceWildcards(array $replacements) + { + $className = $this->getClassName(); + + foreach ($replacements as $replacement) { + $pos = strpos($className, DefinitionArray::WILDCARD); + if ($pos !== false) { + $className = substr_replace($className, $replacement, $pos, 1); + } + } + + $this->setClassName($className); + } + + public function __toString() + { + return (new ObjectDefinitionDumper)->dump($this); + } + + private function updateCache() + { + $className = $this->getClassName(); + + $this->classExists = class_exists($className) || interface_exists($className); + + if (! $this->classExists) { + $this->isInstantiable = false; + + return; + } + + $class = new ReflectionClass($className); + $this->isInstantiable = $class->isInstantiable(); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/ObjectDefinition/MethodInjection.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/ObjectDefinition/MethodInjection.php new file mode 100644 index 0000000..5fb67ce --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/ObjectDefinition/MethodInjection.php @@ -0,0 +1,86 @@ + + */ +class MethodInjection implements Definition +{ + /** + * @var string + */ + private $methodName; + + /** + * @var mixed[] + */ + private $parameters = []; + + public function __construct(string $methodName, array $parameters = []) + { + $this->methodName = $methodName; + $this->parameters = $parameters; + } + + public static function constructor(array $parameters = []) : self + { + return new self('__construct', $parameters); + } + + public function getMethodName() : string + { + return $this->methodName; + } + + /** + * @return mixed[] + */ + public function getParameters() : array + { + return $this->parameters; + } + + /** + * Replace the parameters of the definition by a new array of parameters. + */ + public function replaceParameters(array $parameters) + { + $this->parameters = $parameters; + } + + public function merge(self $definition) + { + // In case of conflicts, the current definition prevails. + $this->parameters = $this->parameters + $definition->parameters; + } + + public function getName() : string + { + return ''; + } + + public function setName(string $name) + { + // The name does not matter for method injections + } + + public function replaceNestedDefinitions(callable $replacer) + { + $this->parameters = array_map($replacer, $this->parameters); + } + + /** + * {@inheritdoc} + */ + public function __toString() + { + return sprintf('method(%s)', $this->methodName); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/ObjectDefinition/PropertyInjection.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/ObjectDefinition/PropertyInjection.php new file mode 100644 index 0000000..307ba64 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/ObjectDefinition/PropertyInjection.php @@ -0,0 +1,70 @@ + + */ +class PropertyInjection +{ + /** + * Property name. + * @var string + */ + private $propertyName; + + /** + * Value that should be injected in the property. + * @var mixed + */ + private $value; + + /** + * Use for injecting in properties of parent classes: the class name + * must be the name of the parent class because private properties + * can be attached to the parent classes, not the one we are resolving. + * @var string|null + */ + private $className; + + /** + * @param string $propertyName Property name + * @param mixed $value Value that should be injected in the property + */ + public function __construct(string $propertyName, $value, string $className = null) + { + $this->propertyName = $propertyName; + $this->value = $value; + $this->className = $className; + } + + public function getPropertyName() : string + { + return $this->propertyName; + } + + /** + * @return mixed Value that should be injected in the property + */ + public function getValue() + { + return $this->value; + } + + /** + * @return string|null + */ + public function getClassName() + { + return $this->className; + } + + public function replaceNestedDefinition(callable $replacer) + { + $this->value = $replacer($this->value); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Reference.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Reference.php new file mode 100644 index 0000000..5b4597a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Reference.php @@ -0,0 +1,73 @@ + + */ +class Reference implements Definition, SelfResolvingDefinition +{ + /** + * Entry name. + * @var string + */ + private $name = ''; + + /** + * Name of the target entry. + * @var string + */ + private $targetEntryName; + + /** + * @param string $targetEntryName Name of the target entry + */ + public function __construct(string $targetEntryName) + { + $this->targetEntryName = $targetEntryName; + } + + public function getName() : string + { + return $this->name; + } + + public function setName(string $name) + { + $this->name = $name; + } + + public function getTargetEntryName() : string + { + return $this->targetEntryName; + } + + public function resolve(ContainerInterface $container) + { + return $container->get($this->getTargetEntryName()); + } + + public function isResolvable(ContainerInterface $container) : bool + { + return $container->has($this->getTargetEntryName()); + } + + public function replaceNestedDefinitions(callable $replacer) + { + // no nested definitions + } + + public function __toString() + { + return sprintf( + 'get(%s)', + $this->targetEntryName + ); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/ArrayResolver.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/ArrayResolver.php new file mode 100644 index 0000000..72d5ed4 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/ArrayResolver.php @@ -0,0 +1,74 @@ + + */ +class ArrayResolver implements DefinitionResolver +{ + /** + * @var DefinitionResolver + */ + private $definitionResolver; + + /** + * @param DefinitionResolver $definitionResolver Used to resolve nested definitions. + */ + public function __construct(DefinitionResolver $definitionResolver) + { + $this->definitionResolver = $definitionResolver; + } + + /** + * Resolve an array definition to a value. + * + * An array definition can contain simple values or references to other entries. + * + * @param ArrayDefinition $definition + */ + public function resolve(Definition $definition, array $parameters = []) : array + { + $values = $definition->getValues(); + + // Resolve nested definitions + array_walk_recursive($values, function (&$value, $key) use ($definition) { + if ($value instanceof Definition) { + $value = $this->resolveDefinition($value, $definition, $key); + } + }); + + return $values; + } + + public function isResolvable(Definition $definition, array $parameters = []) : bool + { + return true; + } + + private function resolveDefinition(Definition $value, ArrayDefinition $definition, $key) + { + try { + return $this->definitionResolver->resolve($value); + } catch (DependencyException $e) { + throw $e; + } catch (Exception $e) { + throw new DependencyException(sprintf( + 'Error while resolving %s[%s]. %s', + $definition->getName(), + $key, + $e->getMessage() + ), 0, $e); + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/DecoratorResolver.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/DecoratorResolver.php new file mode 100644 index 0000000..03585ea --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/DecoratorResolver.php @@ -0,0 +1,82 @@ + + */ +class DecoratorResolver implements DefinitionResolver +{ + /** + * @var ContainerInterface + */ + private $container; + + /** + * @var DefinitionResolver + */ + private $definitionResolver; + + /** + * The resolver needs a container. This container will be passed to the factory as a parameter + * so that the factory can access other entries of the container. + * + * @param DefinitionResolver $definitionResolver Used to resolve nested definitions. + */ + public function __construct(ContainerInterface $container, DefinitionResolver $definitionResolver) + { + $this->container = $container; + $this->definitionResolver = $definitionResolver; + } + + /** + * Resolve a decorator definition to a value. + * + * This will call the callable of the definition and pass it the decorated entry. + * + * @param DecoratorDefinition $definition + */ + public function resolve(Definition $definition, array $parameters = []) + { + $callable = $definition->getCallable(); + + if (! is_callable($callable)) { + throw new InvalidDefinition(sprintf( + 'The decorator "%s" is not callable', + $definition->getName() + )); + } + + $decoratedDefinition = $definition->getDecoratedDefinition(); + + if (! $decoratedDefinition instanceof Definition) { + if (! $definition->getName()) { + throw new InvalidDefinition('Decorators cannot be nested in another definition'); + } + + throw new InvalidDefinition(sprintf( + 'Entry "%s" decorates nothing: no previous definition with the same name was found', + $definition->getName() + )); + } + + $decorated = $this->definitionResolver->resolve($decoratedDefinition, $parameters); + + return call_user_func($callable, $decorated, $this->container); + } + + public function isResolvable(Definition $definition, array $parameters = []) : bool + { + return true; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/DefinitionResolver.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/DefinitionResolver.php new file mode 100644 index 0000000..56b5383 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/DefinitionResolver.php @@ -0,0 +1,37 @@ + + */ +interface DefinitionResolver +{ + /** + * Resolve a definition to a value. + * + * @param Definition $definition Object that defines how the value should be obtained. + * @param array $parameters Optional parameters to use to build the entry. + * + * @throws InvalidDefinition If the definition cannot be resolved. + * + * @return mixed Value obtained from the definition. + */ + public function resolve(Definition $definition, array $parameters = []); + + /** + * Check if a definition can be resolved. + * + * @param Definition $definition Object that defines how the value should be obtained. + * @param array $parameters Optional parameters to use to build the entry. + */ + public function isResolvable(Definition $definition, array $parameters = []) : bool; +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/EnvironmentVariableResolver.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/EnvironmentVariableResolver.php new file mode 100644 index 0000000..4ba0b3e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/EnvironmentVariableResolver.php @@ -0,0 +1,68 @@ + + */ +class EnvironmentVariableResolver implements DefinitionResolver +{ + /** + * @var DefinitionResolver + */ + private $definitionResolver; + + /** + * @var callable + */ + private $variableReader; + + public function __construct(DefinitionResolver $definitionResolver, $variableReader = 'getenv') + { + $this->definitionResolver = $definitionResolver; + $this->variableReader = $variableReader; + } + + /** + * Resolve an environment variable definition to a value. + * + * @param EnvironmentVariableDefinition $definition + */ + public function resolve(Definition $definition, array $parameters = []) + { + $value = call_user_func($this->variableReader, $definition->getVariableName()); + + if (false !== $value) { + return $value; + } + + if (!$definition->isOptional()) { + throw new InvalidDefinition(sprintf( + "The environment variable '%s' has not been defined", + $definition->getVariableName() + )); + } + + $value = $definition->getDefaultValue(); + + // Nested definition + if ($value instanceof Definition) { + return $this->definitionResolver->resolve($value); + } + + return $value; + } + + public function isResolvable(Definition $definition, array $parameters = []) : bool + { + return true; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/FactoryResolver.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/FactoryResolver.php new file mode 100644 index 0000000..c36a1aa --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/FactoryResolver.php @@ -0,0 +1,123 @@ + + */ +class FactoryResolver implements DefinitionResolver +{ + /** + * @var ContainerInterface + */ + private $container; + + /** + * @var Invoker|null + */ + private $invoker; + + /** + * @var DefinitionResolver + */ + private $resolver; + + /** + * The resolver needs a container. This container will be passed to the factory as a parameter + * so that the factory can access other entries of the container. + */ + public function __construct(ContainerInterface $container, DefinitionResolver $resolver) + { + $this->container = $container; + $this->resolver = $resolver; + } + + /** + * Resolve a factory definition to a value. + * + * This will call the callable of the definition. + * + * @param FactoryDefinition $definition + */ + public function resolve(Definition $definition, array $parameters = []) + { + if (! $this->invoker) { + $parameterResolver = new ResolverChain([ + new AssociativeArrayResolver, + new FactoryParameterResolver($this->container), + new NumericArrayResolver, + new DefaultValueResolver, + ]); + + $this->invoker = new Invoker($parameterResolver, $this->container); + } + + $callable = $definition->getCallable(); + + try { + $providedParams = [$this->container, $definition]; + $extraParams = $this->resolveExtraParams($definition->getParameters()); + $providedParams = array_merge($providedParams, $extraParams, $parameters); + + return $this->invoker->call($callable, $providedParams); + } catch (NotCallableException $e) { + // Custom error message to help debugging + if (is_string($callable) && class_exists($callable) && method_exists($callable, '__invoke')) { + throw new InvalidDefinition(sprintf( + 'Entry "%s" cannot be resolved: factory %s. Invokable classes cannot be automatically resolved if autowiring is disabled on the container, you need to enable autowiring or define the entry manually.', + $definition->getName(), + $e->getMessage() + )); + } + + throw new InvalidDefinition(sprintf( + 'Entry "%s" cannot be resolved: factory %s', + $definition->getName(), + $e->getMessage() + )); + } catch (NotEnoughParametersException $e) { + throw new InvalidDefinition(sprintf( + 'Entry "%s" cannot be resolved: %s', + $definition->getName(), + $e->getMessage() + )); + } + } + + public function isResolvable(Definition $definition, array $parameters = []) : bool + { + return true; + } + + private function resolveExtraParams(array $params) : array + { + $resolved = []; + foreach ($params as $key => $value) { + // Nested definitions + if ($value instanceof Definition) { + $value = $this->resolver->resolve($value); + } + $resolved[$key] = $value; + } + + return $resolved; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/InstanceInjector.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/InstanceInjector.php new file mode 100644 index 0000000..2afbc65 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/InstanceInjector.php @@ -0,0 +1,44 @@ + + */ +class InstanceInjector extends ObjectCreator +{ + /** + * Injects dependencies on an existing instance. + * + * @param InstanceDefinition $definition + */ + public function resolve(Definition $definition, array $parameters = []) + { + try { + $this->injectMethodsAndProperties($definition->getInstance(), $definition->getObjectDefinition()); + } catch (NotFoundExceptionInterface $e) { + $message = sprintf( + 'Error while injecting dependencies into %s: %s', + get_class($definition->getInstance()), + $e->getMessage() + ); + + throw new DependencyException($message, 0, $e); + } + } + + public function isResolvable(Definition $definition, array $parameters = []) : bool + { + return true; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/ObjectCreator.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/ObjectCreator.php new file mode 100644 index 0000000..97b9def --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/ObjectCreator.php @@ -0,0 +1,221 @@ + + */ +class ObjectCreator implements DefinitionResolver +{ + /** + * @var ProxyFactory + */ + private $proxyFactory; + + /** + * @var ParameterResolver + */ + private $parameterResolver; + + /** + * @var DefinitionResolver + */ + private $definitionResolver; + + /** + * @param DefinitionResolver $definitionResolver Used to resolve nested definitions. + * @param ProxyFactory $proxyFactory Used to create proxies for lazy injections. + */ + public function __construct( + DefinitionResolver $definitionResolver, + ProxyFactory $proxyFactory + ) { + $this->definitionResolver = $definitionResolver; + $this->proxyFactory = $proxyFactory; + $this->parameterResolver = new ParameterResolver($definitionResolver); + } + + /** + * Resolve a class definition to a value. + * + * This will create a new instance of the class using the injections points defined. + * + * @param ObjectDefinition $definition + * + * @return object|null + */ + public function resolve(Definition $definition, array $parameters = []) + { + // Lazy? + if ($definition->isLazy()) { + return $this->createProxy($definition, $parameters); + } + + return $this->createInstance($definition, $parameters); + } + + /** + * The definition is not resolvable if the class is not instantiable (interface or abstract) + * or if the class doesn't exist. + * + * @param ObjectDefinition $definition + */ + public function isResolvable(Definition $definition, array $parameters = []) : bool + { + return $definition->isInstantiable(); + } + + /** + * Returns a proxy instance. + */ + private function createProxy(ObjectDefinition $definition, array $parameters) : LazyLoadingInterface + { + /** @noinspection PhpUnusedParameterInspection */ + $proxy = $this->proxyFactory->createProxy( + $definition->getClassName(), + function (& $wrappedObject, $proxy, $method, $params, & $initializer) use ($definition, $parameters) { + $wrappedObject = $this->createInstance($definition, $parameters); + $initializer = null; // turning off further lazy initialization + return true; + } + ); + + return $proxy; + } + + /** + * Creates an instance of the class and injects dependencies.. + * + * @param array $parameters Optional parameters to use to create the instance. + * + * @throws InvalidDefinition + * @throws DependencyException + * @return object + */ + private function createInstance(ObjectDefinition $definition, array $parameters) + { + // Check that the class is instantiable + if (! $definition->isInstantiable()) { + // Check that the class exists + if (! $definition->classExists()) { + throw InvalidDefinition::create($definition, sprintf( + 'Entry "%s" cannot be resolved: the class doesn\'t exist', + $definition->getName() + )); + } + + throw InvalidDefinition::create($definition, sprintf( + 'Entry "%s" cannot be resolved: the class is not instantiable', + $definition->getName() + )); + } + + $classname = $definition->getClassName(); + $classReflection = new ReflectionClass($classname); + + $constructorInjection = $definition->getConstructorInjection(); + + try { + $args = $this->parameterResolver->resolveParameters( + $constructorInjection, + $classReflection->getConstructor(), + $parameters + ); + + $object = new $classname(...$args); + + $this->injectMethodsAndProperties($object, $definition); + } catch (NotFoundExceptionInterface $e) { + throw new DependencyException(sprintf( + 'Error while injecting dependencies into %s: %s', + $classReflection->getName(), + $e->getMessage() + ), 0, $e); + } catch (InvalidDefinition $e) { + throw InvalidDefinition::create($definition, sprintf( + 'Entry "%s" cannot be resolved: %s', + $definition->getName(), + $e->getMessage() + )); + } + + return $object; + } + + protected function injectMethodsAndProperties($object, ObjectDefinition $objectDefinition) + { + // Property injections + foreach ($objectDefinition->getPropertyInjections() as $propertyInjection) { + $this->injectProperty($object, $propertyInjection); + } + + // Method injections + foreach ($objectDefinition->getMethodInjections() as $methodInjection) { + $methodReflection = new \ReflectionMethod($object, $methodInjection->getMethodName()); + $args = $this->parameterResolver->resolveParameters($methodInjection, $methodReflection); + + $methodReflection->invokeArgs($object, $args); + } + } + + /** + * Inject dependencies into properties. + * + * @param object $object Object to inject dependencies into + * @param PropertyInjection $propertyInjection Property injection definition + * + * @throws DependencyException + * @throws InvalidDefinition + */ + private function injectProperty($object, PropertyInjection $propertyInjection) + { + $propertyName = $propertyInjection->getPropertyName(); + + $value = $propertyInjection->getValue(); + + if ($value instanceof Definition) { + try { + $value = $this->definitionResolver->resolve($value); + } catch (DependencyException $e) { + throw $e; + } catch (Exception $e) { + throw new DependencyException(sprintf( + 'Error while injecting in %s::%s. %s', + get_class($object), + $propertyName, + $e->getMessage() + ), 0, $e); + } + } + + self::setPrivatePropertyValue($propertyInjection->getClassName(), $object, $propertyName, $value); + } + + public static function setPrivatePropertyValue(string $className = null, $object, string $propertyName, $propertyValue) + { + $className = $className ?: get_class($object); + + $property = new ReflectionProperty($className, $propertyName); + if (! $property->isPublic()) { + $property->setAccessible(true); + } + $property->setValue($object, $propertyValue); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/ParameterResolver.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/ParameterResolver.php new file mode 100644 index 0000000..c9a4640 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/ParameterResolver.php @@ -0,0 +1,112 @@ + + */ +class ParameterResolver +{ + /** + * @var DefinitionResolver + */ + private $definitionResolver; + + /** + * @param DefinitionResolver $definitionResolver Will be used to resolve nested definitions. + */ + public function __construct(DefinitionResolver $definitionResolver) + { + $this->definitionResolver = $definitionResolver; + } + + /** + * @throws InvalidDefinition A parameter has no value defined or guessable. + * @return array Parameters to use to call the function. + */ + public function resolveParameters( + MethodInjection $definition = null, + ReflectionMethod $method = null, + array $parameters = [] + ) { + $args = []; + + if (! $method) { + return $args; + } + + $definitionParameters = $definition ? $definition->getParameters() : []; + + foreach ($method->getParameters() as $index => $parameter) { + if (array_key_exists($parameter->getName(), $parameters)) { + // Look in the $parameters array + $value = &$parameters[$parameter->getName()]; + } elseif (array_key_exists($index, $definitionParameters)) { + // Look in the definition + $value = &$definitionParameters[$index]; + } else { + // If the parameter is optional and wasn't specified, we take its default value + if ($parameter->isDefaultValueAvailable() || $parameter->isOptional()) { + $args[] = $this->getParameterDefaultValue($parameter, $method); + continue; + } + + throw new InvalidDefinition(sprintf( + 'Parameter $%s of %s has no value defined or guessable', + $parameter->getName(), + $this->getFunctionName($method) + )); + } + + // Nested definitions + if ($value instanceof Definition) { + // If the container cannot produce the entry, we can use the default parameter value + if ($parameter->isOptional() && ! $this->definitionResolver->isResolvable($value)) { + $value = $this->getParameterDefaultValue($parameter, $method); + } else { + $value = $this->definitionResolver->resolve($value); + } + } + + $args[] = &$value; + } + + return $args; + } + + /** + * Returns the default value of a function parameter. + * + * @throws InvalidDefinition Can't get default values from PHP internal classes and functions + * @return mixed + */ + private function getParameterDefaultValue(ReflectionParameter $parameter, ReflectionMethod $function) + { + try { + return $parameter->getDefaultValue(); + } catch (\ReflectionException $e) { + throw new InvalidDefinition(sprintf( + 'The parameter "%s" of %s has no type defined or guessable. It has a default value, ' + . 'but the default value can\'t be read through Reflection because it is a PHP internal class.', + $parameter->getName(), + $this->getFunctionName($function) + )); + } + } + + private function getFunctionName(ReflectionMethod $method) : string + { + return $method->getName() . '()'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/ResolverDispatcher.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/ResolverDispatcher.php new file mode 100644 index 0000000..03bf189 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Resolver/ResolverDispatcher.php @@ -0,0 +1,127 @@ + + */ +class ResolverDispatcher implements DefinitionResolver +{ + /** + * @var ContainerInterface + */ + private $container; + + /** + * @var ProxyFactory + */ + private $proxyFactory; + + private $arrayResolver; + private $factoryResolver; + private $decoratorResolver; + private $objectResolver; + private $instanceResolver; + private $envVariableResolver; + + public function __construct(ContainerInterface $container, ProxyFactory $proxyFactory) + { + $this->container = $container; + $this->proxyFactory = $proxyFactory; + } + + /** + * Resolve a definition to a value. + * + * @param Definition $definition Object that defines how the value should be obtained. + * @param array $parameters Optional parameters to use to build the entry. + * + * @throws InvalidDefinition If the definition cannot be resolved. + * + * @return mixed Value obtained from the definition. + */ + public function resolve(Definition $definition, array $parameters = []) + { + // Special case, tested early for speed + if ($definition instanceof \DI\Definition\SelfResolvingDefinition) { + return $definition->resolve($this->container); + } + + $definitionResolver = $this->getDefinitionResolver($definition); + + return $definitionResolver->resolve($definition, $parameters); + } + + public function isResolvable(Definition $definition, array $parameters = []) : bool + { + // Special case, tested early for speed + if ($definition instanceof \DI\Definition\SelfResolvingDefinition) { + return $definition->isResolvable($this->container); + } + + $definitionResolver = $this->getDefinitionResolver($definition); + + return $definitionResolver->isResolvable($definition, $parameters); + } + + /** + * Returns a resolver capable of handling the given definition. + * + * @throws \RuntimeException No definition resolver was found for this type of definition. + */ + private function getDefinitionResolver(Definition $definition) : DefinitionResolver + { + switch (true) { + case $definition instanceof \DI\Definition\ObjectDefinition: + if (! $this->objectResolver) { + $this->objectResolver = new ObjectCreator($this, $this->proxyFactory); + } + + return $this->objectResolver; + case $definition instanceof \DI\Definition\DecoratorDefinition: + if (! $this->decoratorResolver) { + $this->decoratorResolver = new DecoratorResolver($this->container, $this); + } + + return $this->decoratorResolver; + case $definition instanceof \DI\Definition\FactoryDefinition: + if (! $this->factoryResolver) { + $this->factoryResolver = new FactoryResolver($this->container, $this); + } + + return $this->factoryResolver; + case $definition instanceof \DI\Definition\ArrayDefinition: + if (! $this->arrayResolver) { + $this->arrayResolver = new ArrayResolver($this); + } + + return $this->arrayResolver; + case $definition instanceof \DI\Definition\EnvironmentVariableDefinition: + if (! $this->envVariableResolver) { + $this->envVariableResolver = new EnvironmentVariableResolver($this); + } + + return $this->envVariableResolver; + case $definition instanceof \DI\Definition\InstanceDefinition: + if (! $this->instanceResolver) { + $this->instanceResolver = new InstanceInjector($this, $this->proxyFactory); + } + + return $this->instanceResolver; + default: + throw new \RuntimeException('No definition resolver was configured for definition of type ' . get_class($definition)); + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/SelfResolvingDefinition.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/SelfResolvingDefinition.php new file mode 100644 index 0000000..7452403 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/SelfResolvingDefinition.php @@ -0,0 +1,27 @@ + + */ +interface SelfResolvingDefinition +{ + /** + * Resolve the definition and return the resulting value. + * + * @return mixed + */ + public function resolve(ContainerInterface $container); + + /** + * Check if a definition can be resolved. + */ + public function isResolvable(ContainerInterface $container) : bool; +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/AnnotationBasedAutowiring.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/AnnotationBasedAutowiring.php new file mode 100644 index 0000000..e576734 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/AnnotationBasedAutowiring.php @@ -0,0 +1,297 @@ + + */ +class AnnotationBasedAutowiring implements DefinitionSource, Autowiring +{ + /** + * @var Reader + */ + private $annotationReader; + + /** + * @var PhpDocReader + */ + private $phpDocReader; + + /** + * @var bool + */ + private $ignorePhpDocErrors; + + public function __construct($ignorePhpDocErrors = false) + { + $this->ignorePhpDocErrors = (bool) $ignorePhpDocErrors; + } + + public function autowire(string $name, ObjectDefinition $definition = null) + { + $className = $definition ? $definition->getClassName() : $name; + + if (!class_exists($className) && !interface_exists($className)) { + return $definition; + } + + $definition = $definition ?: new ObjectDefinition($name); + + $class = new ReflectionClass($className); + + $this->readInjectableAnnotation($class, $definition); + + // Browse the class properties looking for annotated properties + $this->readProperties($class, $definition); + + // Browse the object's methods looking for annotated methods + $this->readMethods($class, $definition); + + return $definition; + } + + /** + * {@inheritdoc} + * @throws InvalidAnnotation + * @throws InvalidArgumentException The class doesn't exist + */ + public function getDefinition(string $name) + { + return $this->autowire($name); + } + + /** + * Autowiring cannot guess all existing definitions. + */ + public function getDefinitions() : array + { + return []; + } + + /** + * Browse the class properties looking for annotated properties. + */ + private function readProperties(ReflectionClass $class, ObjectDefinition $definition) + { + foreach ($class->getProperties() as $property) { + if ($property->isStatic()) { + continue; + } + $this->readProperty($property, $definition); + } + + // Read also the *private* properties of the parent classes + /** @noinspection PhpAssignmentInConditionInspection */ + while ($class = $class->getParentClass()) { + foreach ($class->getProperties(ReflectionProperty::IS_PRIVATE) as $property) { + if ($property->isStatic()) { + continue; + } + $this->readProperty($property, $definition, $class->getName()); + } + } + } + + private function readProperty(ReflectionProperty $property, ObjectDefinition $definition, $classname = null) + { + // Look for @Inject annotation + $annotation = $this->getAnnotationReader()->getPropertyAnnotation($property, 'DI\Annotation\Inject'); + if (!$annotation instanceof Inject) { + return; + } + + // Try to @Inject("name") or look for @var content + $entryName = $annotation->getName() ?: $this->getPhpDocReader()->getPropertyClass($property); + + // Try using PHP7.4 typed properties + if (\PHP_VERSION_ID > 70400 + && $entryName === null + && $property->getType() instanceof ReflectionNamedType + && (class_exists($property->getType()->getName()) || interface_exists($property->getType()->getName())) + ) { + $entryName = $property->getType()->getName(); + } + + if ($entryName === null) { + throw new InvalidAnnotation(sprintf( + '@Inject found on property %s::%s but unable to guess what to inject, use a @var annotation', + $property->getDeclaringClass()->getName(), + $property->getName() + )); + } + + $definition->addPropertyInjection( + new PropertyInjection($property->getName(), new Reference($entryName), $classname) + ); + } + + /** + * Browse the object's methods looking for annotated methods. + */ + private function readMethods(ReflectionClass $class, ObjectDefinition $objectDefinition) + { + // This will look in all the methods, including those of the parent classes + foreach ($class->getMethods(ReflectionMethod::IS_PUBLIC) as $method) { + if ($method->isStatic()) { + continue; + } + + $methodInjection = $this->getMethodInjection($method); + + if (! $methodInjection) { + continue; + } + + if ($method->isConstructor()) { + $objectDefinition->completeConstructorInjection($methodInjection); + } else { + $objectDefinition->completeFirstMethodInjection($methodInjection); + } + } + } + + /** + * @return MethodInjection|null + */ + private function getMethodInjection(ReflectionMethod $method) + { + // Look for @Inject annotation + try { + $annotation = $this->getAnnotationReader()->getMethodAnnotation($method, 'DI\Annotation\Inject'); + } catch (InvalidAnnotation $e) { + throw new InvalidAnnotation(sprintf( + '@Inject annotation on %s::%s is malformed. %s', + $method->getDeclaringClass()->getName(), + $method->getName(), + $e->getMessage() + ), 0, $e); + } + + // @Inject on constructor is implicit + if (! ($annotation || $method->isConstructor())) { + return null; + } + + $annotationParameters = $annotation instanceof Inject ? $annotation->getParameters() : []; + + $parameters = []; + foreach ($method->getParameters() as $index => $parameter) { + $entryName = $this->getMethodParameter($index, $parameter, $annotationParameters); + + if ($entryName !== null) { + $parameters[$index] = new Reference($entryName); + } + } + + if ($method->isConstructor()) { + return MethodInjection::constructor($parameters); + } + + return new MethodInjection($method->getName(), $parameters); + } + + /** + * @param int $parameterIndex + * + * @return string|null Entry name or null if not found. + */ + private function getMethodParameter($parameterIndex, ReflectionParameter $parameter, array $annotationParameters) + { + // @Inject has definition for this parameter (by index, or by name) + if (isset($annotationParameters[$parameterIndex])) { + return $annotationParameters[$parameterIndex]; + } + if (isset($annotationParameters[$parameter->getName()])) { + return $annotationParameters[$parameter->getName()]; + } + + // Skip optional parameters if not explicitly defined + if ($parameter->isOptional()) { + return null; + } + + // Try to use the type-hinting + $parameterClass = $parameter->getClass(); + if ($parameterClass) { + return $parameterClass->getName(); + } + + // Last resort, look for @param tag + return $this->getPhpDocReader()->getParameterClass($parameter); + } + + /** + * @return Reader The annotation reader + */ + public function getAnnotationReader() + { + if ($this->annotationReader === null) { + AnnotationRegistry::registerLoader('class_exists'); + $this->annotationReader = new SimpleAnnotationReader(); + $this->annotationReader->addNamespace('DI\Annotation'); + } + + return $this->annotationReader; + } + + /** + * @return PhpDocReader + */ + private function getPhpDocReader() + { + if ($this->phpDocReader === null) { + $this->phpDocReader = new PhpDocReader($this->ignorePhpDocErrors); + } + + return $this->phpDocReader; + } + + private function readInjectableAnnotation(ReflectionClass $class, ObjectDefinition $definition) + { + try { + /** @var Injectable|null $annotation */ + $annotation = $this->getAnnotationReader() + ->getClassAnnotation($class, 'DI\Annotation\Injectable'); + } catch (UnexpectedValueException $e) { + throw new InvalidAnnotation(sprintf( + 'Error while reading @Injectable on %s: %s', + $class->getName(), + $e->getMessage() + ), 0, $e); + } + + if (! $annotation) { + return; + } + + if ($annotation->isLazy() !== null) { + $definition->setLazy($annotation->isLazy()); + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/Autowiring.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/Autowiring.php new file mode 100644 index 0000000..ae7682a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/Autowiring.php @@ -0,0 +1,24 @@ + + */ +interface Autowiring +{ + /** + * Autowire the given definition. + * + * @throws InvalidDefinition An invalid definition was found. + * @return ObjectDefinition|null + */ + public function autowire(string $name, ObjectDefinition $definition = null); +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/DefinitionArray.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/DefinitionArray.php new file mode 100644 index 0000000..88f2cac --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/DefinitionArray.php @@ -0,0 +1,127 @@ + + */ +class DefinitionArray implements DefinitionSource, MutableDefinitionSource +{ + const WILDCARD = '*'; + /** + * Matches anything except "\". + */ + const WILDCARD_PATTERN = '([^\\\\]+)'; + + /** + * DI definitions in a PHP array. + * @var array + */ + private $definitions = []; + + /** + * Cache of wildcard definitions. + * @var array|null + */ + private $wildcardDefinitions; + + /** + * @var DefinitionNormalizer + */ + private $normalizer; + + public function __construct(array $definitions = [], Autowiring $autowiring = null) + { + if (isset($definitions[0])) { + throw new \Exception('The PHP-DI definition is not indexed by an entry name in the definition array'); + } + + $this->definitions = $definitions; + + $autowiring = $autowiring ?: new NoAutowiring; + $this->normalizer = new DefinitionNormalizer($autowiring); + } + + /** + * @param array $definitions DI definitions in a PHP array indexed by the definition name. + */ + public function addDefinitions(array $definitions) + { + if (isset($definitions[0])) { + throw new \Exception('The PHP-DI definition is not indexed by an entry name in the definition array'); + } + + // The newly added data prevails + // "for keys that exist in both arrays, the elements from the left-hand array will be used" + $this->definitions = $definitions + $this->definitions; + + // Clear cache + $this->wildcardDefinitions = null; + } + + /** + * {@inheritdoc} + */ + public function addDefinition(Definition $definition) + { + $this->definitions[$definition->getName()] = $definition; + + // Clear cache + $this->wildcardDefinitions = null; + } + + public function getDefinition(string $name) + { + // Look for the definition by name + if (array_key_exists($name, $this->definitions)) { + $definition = $this->definitions[$name]; + $definition = $this->normalizer->normalizeRootDefinition($definition, $name); + + return $definition; + } + + // Build the cache of wildcard definitions + if ($this->wildcardDefinitions === null) { + $this->wildcardDefinitions = []; + foreach ($this->definitions as $key => $definition) { + if (strpos($key, self::WILDCARD) !== false) { + $this->wildcardDefinitions[$key] = $definition; + } + } + } + + // Look in wildcards definitions + foreach ($this->wildcardDefinitions as $key => $definition) { + // Turn the pattern into a regex + $key = preg_quote($key); + $key = '#' . str_replace('\\' . self::WILDCARD, self::WILDCARD_PATTERN, $key) . '#'; + if (preg_match($key, $name, $matches) === 1) { + array_shift($matches); + $definition = $this->normalizer->normalizeRootDefinition($definition, $name, $matches); + + return $definition; + } + } + + return null; + } + + public function getDefinitions() : array + { + // Return all definitions except wildcard definitions + $definitions = []; + foreach ($this->definitions as $key => $definition) { + if (strpos($key, self::WILDCARD) === false) { + $definitions[$key] = $definition; + } + } + + return $definitions; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/DefinitionFile.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/DefinitionFile.php new file mode 100644 index 0000000..0c6caff --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/DefinitionFile.php @@ -0,0 +1,69 @@ + + */ +class DefinitionFile extends DefinitionArray +{ + /** + * @var bool + */ + private $initialized = false; + + /** + * File containing definitions, or null if the definitions are given as a PHP array. + * @var string|null + */ + private $file; + + /** + * @param string $file File in which the definitions are returned as an array. + */ + public function __construct($file, Autowiring $autowiring = null) + { + // Lazy-loading to improve performances + $this->file = $file; + + parent::__construct([], $autowiring); + } + + public function getDefinition(string $name) + { + $this->initialize(); + + return parent::getDefinition($name); + } + + public function getDefinitions() : array + { + $this->initialize(); + + return parent::getDefinitions(); + } + + /** + * Lazy-loading of the definitions. + */ + private function initialize() + { + if ($this->initialized === true) { + return; + } + + $definitions = require $this->file; + + if (! is_array($definitions)) { + throw new \Exception("File {$this->file} should return an array of definitions"); + } + + $this->addDefinitions($definitions); + + $this->initialized = true; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/DefinitionNormalizer.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/DefinitionNormalizer.php new file mode 100644 index 0000000..99ea36b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/DefinitionNormalizer.php @@ -0,0 +1,120 @@ + + */ +class DefinitionNormalizer +{ + /** + * @var Autowiring + */ + private $autowiring; + + public function __construct(Autowiring $autowiring) + { + $this->autowiring = $autowiring; + } + + /** + * Normalize a definition that is *not* nested in another one. + * + * This is usually a definition declared at the root of a definition array. + * + * @param mixed $definition + * @param string $name The definition name. + * @param string[] $wildcardsReplacements Replacements for wildcard definitions. + * + * @throws InvalidDefinition + */ + public function normalizeRootDefinition($definition, string $name, array $wildcardsReplacements = null) : Definition + { + if ($definition instanceof DefinitionHelper) { + $definition = $definition->getDefinition($name); + } elseif (is_array($definition)) { + $definition = new ArrayDefinition($definition); + } elseif ($definition instanceof \Closure) { + $definition = new FactoryDefinition($name, $definition); + } elseif (! $definition instanceof Definition) { + $definition = new ValueDefinition($definition); + } + + // For a class definition, we replace * in the class name with the matches + // *Interface -> *Impl => FooInterface -> FooImpl + if ($wildcardsReplacements && $definition instanceof ObjectDefinition) { + $definition->replaceWildcards($wildcardsReplacements); + } + + if ($definition instanceof AutowireDefinition) { + $definition = $this->autowiring->autowire($name, $definition); + } + + $definition->setName($name); + + try { + $definition->replaceNestedDefinitions([$this, 'normalizeNestedDefinition']); + } catch (InvalidDefinition $e) { + throw InvalidDefinition::create($definition, sprintf( + 'Definition "%s" contains an error: %s', + $definition->getName(), + $e->getMessage() + ), $e); + } + + return $definition; + } + + /** + * Normalize a definition that is nested in another one. + * + * @param mixed $definition + * @return mixed + * + * @throws InvalidDefinition + */ + public function normalizeNestedDefinition($definition) + { + $name = ''; + + if ($definition instanceof DefinitionHelper) { + $definition = $definition->getDefinition($name); + } elseif (is_array($definition)) { + $definition = new ArrayDefinition($definition); + } elseif ($definition instanceof \Closure) { + $definition = new FactoryDefinition($name, $definition); + } + + if ($definition instanceof DecoratorDefinition) { + throw new InvalidDefinition('Decorators cannot be nested in another definition'); + } + + if ($definition instanceof AutowireDefinition) { + $definition = $this->autowiring->autowire($name, $definition); + } + + if ($definition instanceof Definition) { + $definition->setName($name); + + // Recursively traverse nested definitions + $definition->replaceNestedDefinitions([$this, 'normalizeNestedDefinition']); + } + + return $definition; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/DefinitionSource.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/DefinitionSource.php new file mode 100644 index 0000000..5aa95dd --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/DefinitionSource.php @@ -0,0 +1,29 @@ + + */ +interface DefinitionSource +{ + /** + * Returns the DI definition for the entry name. + * + * @throws InvalidDefinition An invalid definition was found. + * @return Definition|null + */ + public function getDefinition(string $name); + + /** + * @return Definition[] Definitions indexed by their name. + */ + public function getDefinitions() : array; +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/MutableDefinitionSource.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/MutableDefinitionSource.php new file mode 100644 index 0000000..0422174 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/MutableDefinitionSource.php @@ -0,0 +1,17 @@ + + */ +interface MutableDefinitionSource extends DefinitionSource +{ + public function addDefinition(Definition $definition); +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/NoAutowiring.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/NoAutowiring.php new file mode 100644 index 0000000..dda3e30 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/NoAutowiring.php @@ -0,0 +1,24 @@ + + */ +class NoAutowiring implements Autowiring +{ + public function autowire(string $name, ObjectDefinition $definition = null) + { + throw new InvalidDefinition(sprintf( + 'Cannot autowire entry "%s" because autowiring is disabled', + $name + )); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/ReflectionBasedAutowiring.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/ReflectionBasedAutowiring.php new file mode 100644 index 0000000..04a3e41 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/ReflectionBasedAutowiring.php @@ -0,0 +1,74 @@ + + */ +class ReflectionBasedAutowiring implements DefinitionSource, Autowiring +{ + public function autowire(string $name, ObjectDefinition $definition = null) + { + $className = $definition ? $definition->getClassName() : $name; + + if (!class_exists($className) && !interface_exists($className)) { + return $definition; + } + + $definition = $definition ?: new ObjectDefinition($name); + + // Constructor + $class = new \ReflectionClass($className); + $constructor = $class->getConstructor(); + if ($constructor && $constructor->isPublic()) { + $constructorInjection = MethodInjection::constructor($this->getParametersDefinition($constructor)); + $definition->completeConstructorInjection($constructorInjection); + } + + return $definition; + } + + public function getDefinition(string $name) + { + return $this->autowire($name); + } + + /** + * Autowiring cannot guess all existing definitions. + */ + public function getDefinitions() : array + { + return []; + } + + /** + * Read the type-hinting from the parameters of the function. + */ + private function getParametersDefinition(\ReflectionFunctionAbstract $constructor) : array + { + $parameters = []; + + foreach ($constructor->getParameters() as $index => $parameter) { + // Skip optional parameters + if ($parameter->isOptional()) { + continue; + } + + $parameterClass = $parameter->getClass(); + + if ($parameterClass) { + $parameters[$index] = new Reference($parameterClass->getName()); + } + } + + return $parameters; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/SourceCache.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/SourceCache.php new file mode 100644 index 0000000..6487c2c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/SourceCache.php @@ -0,0 +1,88 @@ + + */ +class SourceCache implements DefinitionSource, MutableDefinitionSource +{ + /** + * @var string + */ + const CACHE_KEY = 'php-di.definitions.'; + + /** + * @var DefinitionSource + */ + private $cachedSource; + + /** + * @var string + */ + private $cacheNamespace; + + public function __construct(DefinitionSource $cachedSource, string $cacheNamespace = '') + { + $this->cachedSource = $cachedSource; + $this->cacheNamespace = $cacheNamespace; + } + + public function getDefinition(string $name) + { + $definition = apcu_fetch($this->getCacheKey($name)); + + if ($definition === false) { + $definition = $this->cachedSource->getDefinition($name); + + // Update the cache + if ($this->shouldBeCached($definition)) { + apcu_store($this->getCacheKey($name), $definition); + } + } + + return $definition; + } + + /** + * Used only for the compilation so we can skip the cache safely. + */ + public function getDefinitions() : array + { + return $this->cachedSource->getDefinitions(); + } + + public static function isSupported() : bool + { + return function_exists('apcu_fetch') + && ini_get('apc.enabled') + && ! ('cli' === \PHP_SAPI && ! ini_get('apc.enable_cli')); + } + + public function getCacheKey(string $name) : string + { + return self::CACHE_KEY . $this->cacheNamespace . $name; + } + + public function addDefinition(Definition $definition) + { + throw new \LogicException('You cannot set a definition at runtime on a container that has caching enabled. Doing so would risk caching the definition for the next execution, where it might be different. You can either put your definitions in a file, remove the cache or ->set() a raw value directly (PHP object, string, int, ...) instead of a PHP-DI definition.'); + } + + private function shouldBeCached(Definition $definition = null) : bool + { + return + // Cache missing definitions + ($definition === null) + // Object definitions are used with `make()` + || ($definition instanceof ObjectDefinition) + // Autowired definitions cannot be all compiled and are used with `make()` + || ($definition instanceof AutowireDefinition); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/SourceChain.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/SourceChain.php new file mode 100644 index 0000000..b82d618 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/Source/SourceChain.php @@ -0,0 +1,110 @@ + + */ +class SourceChain implements DefinitionSource, MutableDefinitionSource +{ + /** + * @var DefinitionSource[] + */ + private $sources; + + /** + * @var DefinitionSource + */ + private $rootSource; + + /** + * @var MutableDefinitionSource|null + */ + private $mutableSource; + + /** + * @param DefinitionSource[] $sources + */ + public function __construct(array $sources) + { + // We want a numerically indexed array to ease the traversal later + $this->sources = array_values($sources); + $this->rootSource = $this; + } + + /** + * {@inheritdoc} + * + * @param int $startIndex Use this parameter to start looking from a specific + * point in the source chain. + */ + public function getDefinition(string $name, int $startIndex = 0) + { + $count = count($this->sources); + for ($i = $startIndex; $i < $count; ++$i) { + $source = $this->sources[$i]; + + $definition = $source->getDefinition($name); + + if ($definition) { + if ($definition instanceof ExtendsPreviousDefinition) { + $this->resolveExtendedDefinition($definition, $i); + } + + return $definition; + } + } + + return null; + } + + public function getDefinitions() : array + { + $names = []; + foreach ($this->sources as $source) { + $names = array_merge($names, $source->getDefinitions()); + } + $names = array_keys($names); + + $definitions = array_combine($names, array_map(function (string $name) { + return $this->getDefinition($name); + }, $names)); + + return $definitions; + } + + public function addDefinition(Definition $definition) + { + if (! $this->mutableSource) { + throw new \LogicException("The container's definition source has not been initialized correctly"); + } + + $this->mutableSource->addDefinition($definition); + } + + private function resolveExtendedDefinition(ExtendsPreviousDefinition $definition, int $currentIndex) + { + // Look in the next sources only (else infinite recursion, and we can only extend + // entries defined in the previous definition files - a previous == next here because + // the array was reversed ;) ) + $subDefinition = $this->getDefinition($definition->getName(), $currentIndex + 1); + + if ($subDefinition) { + $definition->setExtendedDefinition($subDefinition); + } + } + + public function setMutableDefinitionSource(MutableDefinitionSource $mutableSource) + { + $this->mutableSource = $mutableSource; + + array_unshift($this->sources, $mutableSource); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/StringDefinition.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/StringDefinition.php new file mode 100644 index 0000000..52207e7 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/StringDefinition.php @@ -0,0 +1,97 @@ + + */ +class StringDefinition implements Definition, SelfResolvingDefinition +{ + /** + * Entry name. + * @var string + */ + private $name = ''; + + /** + * @var string + */ + private $expression; + + public function __construct(string $expression) + { + $this->expression = $expression; + } + + public function getName() : string + { + return $this->name; + } + + public function setName(string $name) + { + $this->name = $name; + } + + public function getExpression() : string + { + return $this->expression; + } + + public function resolve(ContainerInterface $container) : string + { + return self::resolveExpression($this->name, $this->expression, $container); + } + + public function isResolvable(ContainerInterface $container) : bool + { + return true; + } + + public function replaceNestedDefinitions(callable $replacer) + { + // no nested definitions + } + + public function __toString() + { + return $this->expression; + } + + /** + * Resolve a string expression. + */ + public static function resolveExpression( + string $entryName, + string $expression, + ContainerInterface $container + ) : string { + $callback = function (array $matches) use ($entryName, $container) { + try { + return $container->get($matches[1]); + } catch (NotFoundExceptionInterface $e) { + throw new DependencyException(sprintf( + "Error while parsing string expression for entry '%s': %s", + $entryName, + $e->getMessage() + ), 0, $e); + } + }; + + $result = preg_replace_callback('#\{([^\{\}]+)\}#', $callback, $expression); + if ($result === null) { + throw new \RuntimeException(sprintf('An unknown error occurred while parsing the string definition: \'%s\'', $expression)); + } + + return $result; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/ValueDefinition.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/ValueDefinition.php new file mode 100644 index 0000000..d647582 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Definition/ValueDefinition.php @@ -0,0 +1,72 @@ + + */ +class ValueDefinition implements Definition, SelfResolvingDefinition +{ + /** + * Entry name. + * @var string + */ + private $name = ''; + + /** + * @var mixed + */ + private $value; + + /** + * @param mixed $value + */ + public function __construct($value) + { + $this->value = $value; + } + + public function getName() : string + { + return $this->name; + } + + public function setName(string $name) + { + $this->name = $name; + } + + /** + * @return mixed + */ + public function getValue() + { + return $this->value; + } + + public function resolve(ContainerInterface $container) + { + return $this->getValue(); + } + + public function isResolvable(ContainerInterface $container) : bool + { + return true; + } + + public function replaceNestedDefinitions(callable $replacer) + { + // no nested definitions + } + + public function __toString() + { + return sprintf('Value (%s)', var_export($this->value, true)); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/DependencyException.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/DependencyException.php new file mode 100644 index 0000000..63b5fdd --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/DependencyException.php @@ -0,0 +1,14 @@ + + */ +interface RequestedEntry +{ + /** + * Returns the name of the entry that was requested by the container. + */ + public function getName() : string; +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/FactoryInterface.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/FactoryInterface.php new file mode 100644 index 0000000..59b410f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/FactoryInterface.php @@ -0,0 +1,31 @@ + + */ +interface FactoryInterface +{ + /** + * Resolves an entry by its name. If given a class name, it will return a new instance of that class. + * + * @param string $name Entry name or a class name. + * @param array $parameters Optional parameters to use to build the entry. Use this to force specific + * parameters to specific values. Parameters not defined in this array will + * be automatically resolved. + * + * @throws \InvalidArgumentException The name parameter must be of type string. + * @throws DependencyException Error while resolving the entry. + * @throws NotFoundException No entry or class found for the given name. + * @return mixed + */ + public function make($name, array $parameters = []); +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Invoker/DefinitionParameterResolver.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Invoker/DefinitionParameterResolver.php new file mode 100644 index 0000000..b17ebd9 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Invoker/DefinitionParameterResolver.php @@ -0,0 +1,69 @@ + + */ +class DefinitionParameterResolver implements ParameterResolver +{ + /** + * @var DefinitionResolver + */ + private $definitionResolver; + + public function __construct(DefinitionResolver $definitionResolver) + { + $this->definitionResolver = $definitionResolver; + } + + public function getParameters( + ReflectionFunctionAbstract $reflection, + array $providedParameters, + array $resolvedParameters + ) : array { + // Skip parameters already resolved + if (! empty($resolvedParameters)) { + $providedParameters = array_diff_key($providedParameters, $resolvedParameters); + } + + foreach ($providedParameters as $key => $value) { + if ($value instanceof DefinitionHelper) { + $value = $value->getDefinition(''); + } + + if (! $value instanceof Definition) { + continue; + } + + $value = $this->definitionResolver->resolve($value); + + if (is_int($key)) { + // Indexed by position + $resolvedParameters[$key] = $value; + } else { + // Indexed by parameter name + // TODO optimize? + $reflectionParameters = $reflection->getParameters(); + foreach ($reflectionParameters as $reflectionParameter) { + if ($key === $reflectionParameter->name) { + $resolvedParameters[$reflectionParameter->getPosition()] = $value; + } + } + } + } + + return $resolvedParameters; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Invoker/FactoryParameterResolver.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Invoker/FactoryParameterResolver.php new file mode 100644 index 0000000..da4eff9 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/Invoker/FactoryParameterResolver.php @@ -0,0 +1,63 @@ + + * @author Matthieu Napoli + */ +class FactoryParameterResolver implements ParameterResolver +{ + /** + * @var ContainerInterface + */ + private $container; + + public function __construct(ContainerInterface $container) + { + $this->container = $container; + } + + public function getParameters( + ReflectionFunctionAbstract $reflection, + array $providedParameters, + array $resolvedParameters + ) : array { + $parameters = $reflection->getParameters(); + + // Skip parameters already resolved + if (! empty($resolvedParameters)) { + $parameters = array_diff_key($parameters, $resolvedParameters); + } + + foreach ($parameters as $index => $parameter) { + $parameterClass = $parameter->getClass(); + + if (!$parameterClass) { + continue; + } + + if ($parameterClass->name === 'Psr\Container\ContainerInterface') { + $resolvedParameters[$index] = $this->container; + } elseif ($parameterClass->name === 'DI\Factory\RequestedEntry') { + // By convention the second parameter is the definition + $resolvedParameters[$index] = $providedParameters[1]; + } elseif ($this->container->has($parameterClass->name)) { + $resolvedParameters[$index] = $this->container->get($parameterClass->name); + } + } + + return $resolvedParameters; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/NotFoundException.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/NotFoundException.php new file mode 100644 index 0000000..67dbacd --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/NotFoundException.php @@ -0,0 +1,14 @@ + + */ +class ProxyFactory +{ + /** + * If true, write the proxies to disk to improve performances. + * @var bool + */ + private $writeProxiesToFile; + + /** + * Directory where to write the proxies (if $writeProxiesToFile is enabled). + * @var string|null + */ + private $proxyDirectory; + + /** + * @var LazyLoadingValueHolderFactory|null + */ + private $proxyManager; + + public function __construct(bool $writeProxiesToFile = false, string $proxyDirectory = null) + { + $this->writeProxiesToFile = $writeProxiesToFile; + $this->proxyDirectory = $proxyDirectory; + } + + /** + * Creates a new lazy proxy instance of the given class with + * the given initializer. + * + * @param string $className name of the class to be proxied + * @param \Closure $initializer initializer to be passed to the proxy + */ + public function createProxy(string $className, \Closure $initializer) : LazyLoadingInterface + { + $this->createProxyManager(); + + return $this->proxyManager->createProxy($className, $initializer); + } + + /** + * Generates and writes the proxy class to file. + * + * @param string $className name of the class to be proxied + */ + public function generateProxyClass(string $className) + { + // If proxy classes a written to file then we pre-generate the class + // If they are not written to file then there is no point to do this + if ($this->writeProxiesToFile) { + $this->createProxyManager(); + $this->createProxy($className, function () {}); + } + } + + private function createProxyManager() + { + if ($this->proxyManager !== null) { + return; + } + + if (! class_exists(Configuration::class)) { + throw new \RuntimeException('The ocramius/proxy-manager library is not installed. Lazy injection requires that library to be installed with Composer in order to work. Run "composer require ocramius/proxy-manager:~2.0".'); + } + + $config = new Configuration(); + + if ($this->writeProxiesToFile) { + $config->setProxiesTargetDir($this->proxyDirectory); + $config->setGeneratorStrategy(new FileWriterGeneratorStrategy(new FileLocator($this->proxyDirectory))); + spl_autoload_register($config->getProxyAutoloader()); + } else { + $config->setGeneratorStrategy(new EvaluatingGeneratorStrategy()); + } + + $this->proxyManager = new LazyLoadingValueHolderFactory($config); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/functions.php b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/functions.php new file mode 100644 index 0000000..0504edb --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/src/functions.php @@ -0,0 +1,156 @@ + decorate(function ($foo, $container) { + * return new CachedFoo($foo, $container->get('cache')); + * }) + * + * @param callable $callable The callable takes the decorated object as first parameter and + * the container as second. + */ + function decorate($callable) : FactoryDefinitionHelper + { + return new FactoryDefinitionHelper($callable, true); + } +} + +if (! function_exists('DI\get')) { + /** + * Helper for referencing another container entry in an object definition. + */ + function get(string $entryName) : Reference + { + return new Reference($entryName); + } +} + +if (! function_exists('DI\env')) { + /** + * Helper for referencing environment variables. + * + * @param string $variableName The name of the environment variable. + * @param mixed $defaultValue The default value to be used if the environment variable is not defined. + */ + function env(string $variableName, $defaultValue = null) : EnvironmentVariableDefinition + { + // Only mark as optional if the default value was *explicitly* provided. + $isOptional = 2 === func_num_args(); + + return new EnvironmentVariableDefinition($variableName, $isOptional, $defaultValue); + } +} + +if (! function_exists('DI\add')) { + /** + * Helper for extending another definition. + * + * Example: + * + * 'log.backends' => DI\add(DI\get('My\Custom\LogBackend')) + * + * or: + * + * 'log.backends' => DI\add([ + * DI\get('My\Custom\LogBackend') + * ]) + * + * @param mixed|array $values A value or an array of values to add to the array. + * + * @since 5.0 + */ + function add($values) : ArrayDefinitionExtension + { + if (! is_array($values)) { + $values = [$values]; + } + + return new ArrayDefinitionExtension($values); + } +} + +if (! function_exists('DI\string')) { + /** + * Helper for concatenating strings. + * + * Example: + * + * 'log.filename' => DI\string('{app.path}/app.log') + * + * @param string $expression A string expression. Use the `{}` placeholders to reference other container entries. + * + * @since 5.0 + */ + function string(string $expression) : StringDefinition + { + return new StringDefinition($expression); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/php-di/support.md b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/support.md new file mode 100644 index 0000000..22dd39a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/php-di/support.md @@ -0,0 +1,42 @@ +--- +layout: documentation +current_menu: enterprise-support +title: Enterprise support for PHP-DI +--- + +# PHP-DI for Enterprise + +> *Available as part of the Tidelift Subscription* + +Tidelift is working with the maintainers of PHP-DI and thousands of other +open source projects to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. + +#### [Learn more](https://tidelift.com/subscription/pkg/packagist-php-di-php-di?utm_source=packagist-php-di-php-di&utm_medium=referral&utm_campaign=enterprise) | [**Request a demo**](https://tidelift.com/subscription/request-a-demo?utm_source=packagist-php-di-php-di&utm_medium=referral&utm_campaign=enterprise) + +## Enterprise-ready open source software—managed for you + +The Tidelift Subscription is a managed open source subscription for application dependencies covering millions of open source projects across JavaScript, Python, Java, PHP, Ruby, .NET, and more. + +Your subscription includes: + +- **Security updates** + Tidelift’s security response team coordinates patches for new breaking security vulnerabilities and alerts immediately through a private channel, so your software supply chain is always secure. + +- **Licensing verification and indemnification** + Tidelift verifies license information to enable easy policy enforcement and adds intellectual property indemnification to cover creators and users in case something goes wrong. You always have a 100% up-to-date bill of materials for your dependencies to share with your legal team, customers, or partners. + +- **Maintenance and code improvement** + Tidelift ensures the software you rely on keeps working as long as you need it to work. Your managed dependencies are actively maintained and we recruit additional maintainers where required. + +- **Package selection and version guidance** + We help you choose the best open source packages from the start—and then guide you through updates to stay on the best releases as new issues arise. + +- **Roadmap input** + Take a seat at the table with the creators behind the software you use. Tidelift’s participating maintainers earn more income as their software is used by more subscribers, so they’re interested in knowing what you need. + +- **Tooling and cloud integration** + Tidelift works with GitHub, GitLab, BitBucket, and more. We support every cloud platform (and other deployment targets, too). + +The end result? All of the capabilities you expect from commercial-grade software, for the full breadth of open source you use. That means less time grappling with esoteric open source trivia, and more time building your own applications—and your business. + +[Learn more](https://tidelift.com/subscription/pkg/packagist-php-di-php-di?utm_source=packagist-php-di-php-di&utm_medium=referral&utm_campaign=enterprise) | [**Request a demo**](https://tidelift.com/subscription/request-a-demo?utm_source=packagist-php-di-php-di&utm_medium=referral&utm_campaign=enterprise) diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/phpdoc-reader/LICENSE b/soc/2020/daily_report/archive/app/vendor/php-di/phpdoc-reader/LICENSE new file mode 100644 index 0000000..f859a31 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/phpdoc-reader/LICENSE @@ -0,0 +1,16 @@ +Copyright (C) 2015 Matthieu Napoli + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and +associated documentation files (the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial +portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT +NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/phpdoc-reader/README.md b/soc/2020/daily_report/archive/app/vendor/php-di/phpdoc-reader/README.md new file mode 100644 index 0000000..cbcf3a8 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/phpdoc-reader/README.md @@ -0,0 +1,58 @@ +# PhpDocReader + +[![Build Status](https://img.shields.io/travis/PHP-DI/PhpDocReader.svg)](https://travis-ci.org/mnapoli/PhpDocReader) +![](https://img.shields.io/packagist/dt/PHP-DI/phpdoc-reader.svg) + +This project is used by: + +- [PHP-DI](http://php-di.org/) +- [phockito-unit-php-di](https://github.com/balihoo/phockito-unit-php-di) + +Fork the README to add your project here. + +## Features + +PhpDocReader parses `@var` and `@param` values in PHP docblocks: + +```php + +use My\Cache\Backend; + +class Cache +{ + /** + * @var Backend + */ + protected $backend; + + /** + * @param Backend $backend + */ + public function __construct($backend) + { + } +} +``` + +It supports namespaced class names with the same resolution rules as PHP: + +- fully qualified name (starting with `\`) +- imported class name (eg. `use My\Cache\Backend;`) +- relative class name (from the current namespace, like `SubNamespace\MyClass`) +- aliased class name (eg. `use My\Cache\Backend as FooBar;`) + +Primitive types (`@var string`) are ignored (returns null), only valid class names are returned. + +## Usage + +```php +$reader = new PhpDocReader(); + +// Read a property type (@var phpdoc) +$property = new ReflectionProperty($className, $propertyName); +$propertyClass = $reader->getPropertyClass($property); + +// Read a parameter type (@param phpdoc) +$parameter = new ReflectionParameter(array($className, $methodName), $parameterName); +$parameterClass = $reader->getParameterClass($parameter); +``` diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/phpdoc-reader/composer.json b/soc/2020/daily_report/archive/app/vendor/php-di/phpdoc-reader/composer.json new file mode 100644 index 0000000..6771307 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/phpdoc-reader/composer.json @@ -0,0 +1,23 @@ +{ + "name": "php-di/phpdoc-reader", + "type": "library", + "description": "PhpDocReader parses @var and @param values in PHP docblocks (supports namespaced class names with the same resolution rules as PHP)", + "keywords": ["phpdoc", "reflection"], + "license": "MIT", + "autoload": { + "psr-4": { + "PhpDocReader\\": "src/PhpDocReader" + } + }, + "autoload-dev": { + "psr-4": { + "UnitTest\\PhpDocReader\\": "tests/" + } + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.6" + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/phpdoc-reader/src/PhpDocReader/AnnotationException.php b/soc/2020/daily_report/archive/app/vendor/php-di/phpdoc-reader/src/PhpDocReader/AnnotationException.php new file mode 100644 index 0000000..577d73f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/phpdoc-reader/src/PhpDocReader/AnnotationException.php @@ -0,0 +1,10 @@ + + */ +class AnnotationException extends \Exception +{ +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/phpdoc-reader/src/PhpDocReader/PhpDocReader.php b/soc/2020/daily_report/archive/app/vendor/php-di/phpdoc-reader/src/PhpDocReader/PhpDocReader.php new file mode 100644 index 0000000..f582324 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/phpdoc-reader/src/PhpDocReader/PhpDocReader.php @@ -0,0 +1,312 @@ + + */ +class PhpDocReader +{ + /** + * @var UseStatementParser + */ + private $parser; + + private $ignoredTypes = array( + 'bool', + 'boolean', + 'string', + 'int', + 'integer', + 'float', + 'double', + 'array', + 'object', + 'callable', + 'resource', + 'mixed', + 'iterable', + ); + + /** + * Enable or disable throwing errors when PhpDoc Errors occur (when parsing annotations) + * + * @var bool + */ + private $ignorePhpDocErrors; + + /** + * + * @param bool $ignorePhpDocErrors + */ + public function __construct($ignorePhpDocErrors = false) + { + $this->parser = new UseStatementParser(); + $this->ignorePhpDocErrors = $ignorePhpDocErrors; + } + + /** + * Parse the docblock of the property to get the class of the var annotation. + * + * @param ReflectionProperty $property + * + * @throws AnnotationException + * @return string|null Type of the property (content of var annotation) + * + * @deprecated Use getPropertyClass instead. + */ + public function getPropertyType(ReflectionProperty $property) + { + return $this->getPropertyClass($property); + } + + /** + * Parse the docblock of the property to get the class of the var annotation. + * + * @param ReflectionProperty $property + * + * @throws AnnotationException + * @return string|null Type of the property (content of var annotation) + */ + public function getPropertyClass(ReflectionProperty $property) + { + // Get the content of the @var annotation + if (preg_match('/@var\s+([^\s]+)/', $property->getDocComment(), $matches)) { + list(, $type) = $matches; + } else { + return null; + } + + // Ignore primitive types + if (in_array($type, $this->ignoredTypes)) { + return null; + } + + // Ignore types containing special characters ([], <> ...) + if (! preg_match('/^[a-zA-Z0-9\\\\_]+$/', $type)) { + return null; + } + + $class = $property->getDeclaringClass(); + + // If the class name is not fully qualified (i.e. doesn't start with a \) + if ($type[0] !== '\\') { + // Try to resolve the FQN using the class context + $resolvedType = $this->tryResolveFqn($type, $class, $property); + + if (!$resolvedType && !$this->ignorePhpDocErrors) { + throw new AnnotationException(sprintf( + 'The @var annotation on %s::%s contains a non existent class "%s". ' + . 'Did you maybe forget to add a "use" statement for this annotation?', + $class->name, + $property->getName(), + $type + )); + } + + $type = $resolvedType; + } + + if (!$this->classExists($type) && !$this->ignorePhpDocErrors) { + throw new AnnotationException(sprintf( + 'The @var annotation on %s::%s contains a non existent class "%s"', + $class->name, + $property->getName(), + $type + )); + } + + // Remove the leading \ (FQN shouldn't contain it) + $type = ltrim($type, '\\'); + + return $type; + } + + /** + * Parse the docblock of the property to get the class of the param annotation. + * + * @param ReflectionParameter $parameter + * + * @throws AnnotationException + * @return string|null Type of the property (content of var annotation) + * + * @deprecated Use getParameterClass instead. + */ + public function getParameterType(ReflectionParameter $parameter) + { + return $this->getParameterClass($parameter); + } + + /** + * Parse the docblock of the property to get the class of the param annotation. + * + * @param ReflectionParameter $parameter + * + * @throws AnnotationException + * @return string|null Type of the property (content of var annotation) + */ + public function getParameterClass(ReflectionParameter $parameter) + { + // Use reflection + $parameterClass = $parameter->getClass(); + if ($parameterClass !== null) { + return $parameterClass->name; + } + + $parameterName = $parameter->name; + // Get the content of the @param annotation + $method = $parameter->getDeclaringFunction(); + if (preg_match('/@param\s+([^\s]+)\s+\$' . $parameterName . '/', $method->getDocComment(), $matches)) { + list(, $type) = $matches; + } else { + return null; + } + + // Ignore primitive types + if (in_array($type, $this->ignoredTypes)) { + return null; + } + + // Ignore types containing special characters ([], <> ...) + if (! preg_match('/^[a-zA-Z0-9\\\\_]+$/', $type)) { + return null; + } + + $class = $parameter->getDeclaringClass(); + + // If the class name is not fully qualified (i.e. doesn't start with a \) + if ($type[0] !== '\\') { + // Try to resolve the FQN using the class context + $resolvedType = $this->tryResolveFqn($type, $class, $parameter); + + if (!$resolvedType && !$this->ignorePhpDocErrors) { + throw new AnnotationException(sprintf( + 'The @param annotation for parameter "%s" of %s::%s contains a non existent class "%s". ' + . 'Did you maybe forget to add a "use" statement for this annotation?', + $parameterName, + $class->name, + $method->name, + $type + )); + } + + $type = $resolvedType; + } + + if (!$this->classExists($type) && !$this->ignorePhpDocErrors) { + throw new AnnotationException(sprintf( + 'The @param annotation for parameter "%s" of %s::%s contains a non existent class "%s"', + $parameterName, + $class->name, + $method->name, + $type + )); + } + + // Remove the leading \ (FQN shouldn't contain it) + $type = ltrim($type, '\\'); + + return $type; + } + + /** + * Attempts to resolve the FQN of the provided $type based on the $class and $member context. + * + * @param string $type + * @param ReflectionClass $class + * @param Reflector $member + * + * @return string|null Fully qualified name of the type, or null if it could not be resolved + */ + private function tryResolveFqn($type, ReflectionClass $class, Reflector $member) + { + $alias = ($pos = strpos($type, '\\')) === false ? $type : substr($type, 0, $pos); + $loweredAlias = strtolower($alias); + + // Retrieve "use" statements + $uses = $this->parser->parseUseStatements($class); + + if (isset($uses[$loweredAlias])) { + // Imported classes + if ($pos !== false) { + return $uses[$loweredAlias] . substr($type, $pos); + } else { + return $uses[$loweredAlias]; + } + } elseif ($this->classExists($class->getNamespaceName() . '\\' . $type)) { + return $class->getNamespaceName() . '\\' . $type; + } elseif (isset($uses['__NAMESPACE__']) && $this->classExists($uses['__NAMESPACE__'] . '\\' . $type)) { + // Class namespace + return $uses['__NAMESPACE__'] . '\\' . $type; + } elseif ($this->classExists($type)) { + // No namespace + return $type; + } + + if (version_compare(phpversion(), '5.4.0', '<')) { + return null; + } else { + // If all fail, try resolving through related traits + return $this->tryResolveFqnInTraits($type, $class, $member); + } + } + + /** + * Attempts to resolve the FQN of the provided $type based on the $class and $member context, specifically searching + * through the traits that are used by the provided $class. + * + * @param string $type + * @param ReflectionClass $class + * @param Reflector $member + * + * @return string|null Fully qualified name of the type, or null if it could not be resolved + */ + private function tryResolveFqnInTraits($type, ReflectionClass $class, Reflector $member) + { + /** @var ReflectionClass[] $traits */ + $traits = array(); + + // Get traits for the class and its parents + while ($class) { + $traits = array_merge($traits, $class->getTraits()); + $class = $class->getParentClass(); + } + + foreach ($traits as $trait) { + // Eliminate traits that don't have the property/method/parameter + if ($member instanceof ReflectionProperty && !$trait->hasProperty($member->name)) { + continue; + } elseif ($member instanceof ReflectionMethod && !$trait->hasMethod($member->name)) { + continue; + } elseif ($member instanceof ReflectionParameter && !$trait->hasMethod($member->getDeclaringFunction()->name)) { + continue; + } + + // Run the resolver again with the ReflectionClass instance for the trait + $resolvedType = $this->tryResolveFqn($type, $trait, $member); + + if ($resolvedType) { + return $resolvedType; + } + } + return null; + } + + /** + * @param string $class + * @return bool + */ + private function classExists($class) + { + return class_exists($class) || interface_exists($class); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/phpdoc-reader/src/PhpDocReader/PhpParser/TokenParser.php b/soc/2020/daily_report/archive/app/vendor/php-di/phpdoc-reader/src/PhpDocReader/PhpParser/TokenParser.php new file mode 100644 index 0000000..d3965d7 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/phpdoc-reader/src/PhpDocReader/PhpParser/TokenParser.php @@ -0,0 +1,159 @@ + + * @author Christian Kaps + */ +class TokenParser +{ + /** + * The token list. + * + * @var array + */ + private $tokens; + + /** + * The number of tokens. + * + * @var int + */ + private $numTokens; + + /** + * The current array pointer. + * + * @var int + */ + private $pointer = 0; + + /** + * @param string $contents + */ + public function __construct($contents) + { + $this->tokens = token_get_all($contents); + + // The PHP parser sets internal compiler globals for certain things. Annoyingly, the last docblock comment it + // saw gets stored in doc_comment. When it comes to compile the next thing to be include()d this stored + // doc_comment becomes owned by the first thing the compiler sees in the file that it considers might have a + // docblock. If the first thing in the file is a class without a doc block this would cause calls to + // getDocBlock() on said class to return our long lost doc_comment. Argh. + // To workaround, cause the parser to parse an empty docblock. Sure getDocBlock() will return this, but at least + // it's harmless to us. + token_get_all("numTokens = count($this->tokens); + } + + /** + * Gets all use statements. + * + * @param string $namespaceName The namespace name of the reflected class. + * + * @return array A list with all found use statements. + */ + public function parseUseStatements($namespaceName) + { + $statements = array(); + while (($token = $this->next())) { + if ($token[0] === T_USE) { + $statements = array_merge($statements, $this->parseUseStatement()); + continue; + } + if ($token[0] !== T_NAMESPACE || $this->parseNamespace() != $namespaceName) { + continue; + } + + // Get fresh array for new namespace. This is to prevent the parser to collect the use statements + // for a previous namespace with the same name. This is the case if a namespace is defined twice + // or if a namespace with the same name is commented out. + $statements = array(); + } + + return $statements; + } + + /** + * Gets the next non whitespace and non comment token. + * + * @param boolean $docCommentIsComment If TRUE then a doc comment is considered a comment and skipped. + * If FALSE then only whitespace and normal comments are skipped. + * + * @return array|null The token if exists, null otherwise. + */ + private function next($docCommentIsComment = true) + { + for ($i = $this->pointer; $i < $this->numTokens; $i++) { + $this->pointer++; + if ($this->tokens[$i][0] === T_WHITESPACE || + $this->tokens[$i][0] === T_COMMENT || + ($docCommentIsComment && $this->tokens[$i][0] === T_DOC_COMMENT)) { + + continue; + } + + return $this->tokens[$i]; + } + + return null; + } + + /** + * Parses a single use statement. + * + * @return array A list with all found class names for a use statement. + */ + private function parseUseStatement() + { + $class = ''; + $alias = ''; + $statements = array(); + $explicitAlias = false; + while (($token = $this->next())) { + $isNameToken = $token[0] === T_STRING || $token[0] === T_NS_SEPARATOR; + if (!$explicitAlias && $isNameToken) { + $class .= $token[1]; + $alias = $token[1]; + } elseif ($explicitAlias && $isNameToken) { + $alias .= $token[1]; + } elseif ($token[0] === T_AS) { + $explicitAlias = true; + $alias = ''; + } elseif ($token === ',') { + $statements[strtolower($alias)] = $class; + $class = ''; + $alias = ''; + $explicitAlias = false; + } elseif ($token === ';') { + $statements[strtolower($alias)] = $class; + break; + } else { + break; + } + } + + return $statements; + } + + /** + * Gets the namespace. + * + * @return string The found namespace. + */ + private function parseNamespace() + { + $name = ''; + while (($token = $this->next()) && ($token[0] === T_STRING || $token[0] === T_NS_SEPARATOR)) { + $name .= $token[1]; + } + + return $name; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/phpdoc-reader/src/PhpDocReader/PhpParser/UseStatementParser.php b/soc/2020/daily_report/archive/app/vendor/php-di/phpdoc-reader/src/PhpDocReader/PhpParser/UseStatementParser.php new file mode 100644 index 0000000..1b0d63d --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/phpdoc-reader/src/PhpDocReader/PhpParser/UseStatementParser.php @@ -0,0 +1,68 @@ + + * @author Christian Kaps + */ +class UseStatementParser +{ + /** + * @return array A list with use statements in the form (Alias => FQN). + */ + public function parseUseStatements(\ReflectionClass $class) + { + if (false === $filename = $class->getFilename()) { + return array(); + } + + $content = $this->getFileContent($filename, $class->getStartLine()); + + if (null === $content) { + return array(); + } + + $namespace = preg_quote($class->getNamespaceName()); + $content = preg_replace('/^.*?(\bnamespace\s+' . $namespace . '\s*[;{].*)$/s', '\\1', $content); + $tokenizer = new TokenParser('parseUseStatements($class->getNamespaceName()); + + return $statements; + } + + /** + * Gets the content of the file right up to the given line number. + * + * @param string $filename The name of the file to load. + * @param integer $lineNumber The number of lines to read from file. + * + * @return string The content of the file. + */ + private function getFileContent($filename, $lineNumber) + { + if ( ! is_file($filename)) { + return null; + } + + $content = ''; + $lineCnt = 0; + $file = new SplFileObject($filename); + while (!$file->eof()) { + if ($lineCnt++ == $lineNumber) { + break; + } + + $content .= $file->fgets(); + } + + return $content; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/slim-bridge/CONTRIBUTING.md b/soc/2020/daily_report/archive/app/vendor/php-di/slim-bridge/CONTRIBUTING.md new file mode 100644 index 0000000..852fd1a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/slim-bridge/CONTRIBUTING.md @@ -0,0 +1,15 @@ +# Contributing + +First of all, **thank you** for contributing! + +Here are a few rules to follow in order to ease code reviews and merging: + +- follow [PSR-1](http://www.php-fig.org/psr/1/) and [PSR-2](http://www.php-fig.org/psr/2/) +- run the test suite +- write (or update) unit tests when applicable +- write documentation for new features +- use [commit messages that make sense](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) + +One may ask you to [squash your commits](http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html) too. This is used to "clean" your pull request before merging it (we don't want commits such as `fix tests`, `fix 2`, `fix 3`, etc.). + +When creating your pull request on GitHub, please write a description which gives the context and/or explains why you are creating it. diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/slim-bridge/LICENSE b/soc/2020/daily_report/archive/app/vendor/php-di/slim-bridge/LICENSE new file mode 100644 index 0000000..b2b0416 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/slim-bridge/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Matthieu Napoli + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/slim-bridge/README.md b/soc/2020/daily_report/archive/app/vendor/php-di/slim-bridge/README.md new file mode 100644 index 0000000..cf9c8ab --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/slim-bridge/README.md @@ -0,0 +1,119 @@ +# PHP-DI integration with Slim + +This package configures Slim to work with the [PHP-DI container](http://php-di.org/). + +[![Build Status](https://travis-ci.org/PHP-DI/Slim-Bridge.svg?branch=master)](https://travis-ci.org/PHP-DI/Slim-Bridge) +[![](https://img.shields.io/packagist/dt/php-di/slim-bridge.svg)](https://packagist.org/packages/php-di/slim-bridge) + +The full documentation is here: **http://php-di.org/doc/frameworks/slim.html** + +## Why? + +### PHP-DI as a container + +The most obvious difference with the default Slim installation is that you will be using PHP-DI as the container, which has the following benefits: + +- [autowiring](http://php-di.org/doc/autowiring.html) +- powerful [configuration format](http://php-di.org/doc/php-definitions.html) +- support for [modular systems](http://php-di.org/doc/definition-overriding.html) +- ... + +If you want to learn more about all that PHP-DI can offer [have a look at its introduction](http://php-di.org/). + +### Controllers as services + +While your controllers can be simple closures, you can also **write them as classes and have PHP-DI instantiate them only when they are called**: + +```php +class UserController +{ + private $userRepository; + + public function __construct(UserRepository $userRepository) + { + $this->userRepository = $userRepository; + } + + public function delete($request, $response) + { + $this->userRepository->remove($request->getAttribute('id')); + + $response->getBody()->write('User deleted'); + return $response; + } +} + +$app->delete('/user/{id}', ['UserController', 'delete']); +``` + +Dependencies can then be injected in your controller using [autowiring, PHP-DI config files or even annotations](http://php-di.org/doc/definition.html). + +### Controller parameters + +By default, Slim controllers have a strict signature: `$request, $response, $args`. The PHP-DI bridge offers a more flexible and developer friendly alternative. + +Controller parameters can be any of these things: + +- the request or response (parameters must be named `$request` or `$response`) +- route placeholders +- request attributes +- services (injected by type-hint) + +You can mix all these types of parameters together too. They will be matched by priority in the order of the list above. + +#### Request or response injection + +You can inject the request or response in the controller parameters by name: + +```php +$app->get('/', function (ResponseInterface $response, ServerRequestInterface $request) { + // ... +}); +``` + +As you can see, the order of the parameters doesn't matter. That allows to skip injecting the `$request` if it's not needed for example. + +#### Route placeholder injection + +```php +$app->get('/hello/{name}', function ($name, ResponseInterface $response) { + $response->getBody()->write('Hello ' . $name); + return $response; +}); +``` + +As you can see above, the route's URL contains a `name` placeholder. By simply adding a parameter **with the same name** to the controller, PHP-DI will directly inject it. + +#### Request attribute injection + +```php +$app->add(function ($request, $response, $next) { + $request = $request->withAttribute('name', 'Bob'); + return $next($request, $response); +}); + +$app->get('/', function ($name, ResponseInterface $response) { + $response->getBody()->write('Hello ' . $name); + return $response; +}); +``` + +As you can see above, a middleware sets a `name` attribute. By simply adding a parameter **with the same name** to the controller, PHP-DI will directly inject it. + +#### Service injection + +To inject services into your controllers, you can write them as classes. But if you want to write a micro-application using closures, you don't have to give up dependency injection either. + +You can inject services by type-hinting them: + +```php +$app->get('/', function (ResponseInterface $response, Twig $twig) { + return $twig->render($response, 'home.twig'); +}); +``` + +> Note: you can only inject services that you can type-hint and that PHP-DI can provide. Type-hint injection is simple, it simply injects the result of `$container->get(/* the type-hinted class */)`. + +## Documentation + +The documentation can be read here: **http://php-di.org/doc/frameworks/slim.html** diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/slim-bridge/composer.json b/soc/2020/daily_report/archive/app/vendor/php-di/slim-bridge/composer.json new file mode 100644 index 0000000..f24b650 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/slim-bridge/composer.json @@ -0,0 +1,26 @@ +{ + "name": "php-di/slim-bridge", + "description": "PHP-DI integration in Slim", + "license": "MIT", + "type": "library", + "autoload": { + "psr-4": { + "DI\\Bridge\\Slim\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "DI\\Bridge\\Slim\\Test\\": "tests/" + } + }, + "require": { + "php": "~7.1", + "php-di/php-di": "^6.0.0", + "php-di/invoker": "^2.0.0", + "slim/slim": "^4.2.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.0", + "zendframework/zend-diactoros": "^2.1" + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/slim-bridge/src/Bridge.php b/soc/2020/daily_report/archive/app/vendor/php-di/slim-bridge/src/Bridge.php new file mode 100644 index 0000000..cd18bbc --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/slim-bridge/src/Bridge.php @@ -0,0 +1,57 @@ +set(CallableResolverInterface::class, new CallableResolver($callableResolver)); + $app = AppFactory::createFromContainer($container); + + $container->set(App::class, $app); + + $controllerInvoker = self::createControllerInvoker($container); + $app->getRouteCollector()->setDefaultInvocationStrategy($controllerInvoker); + + return $app; + } + + private static function createControllerInvoker(ContainerInterface $container): ControllerInvoker + { + $resolvers = [ + // Inject parameters by name first + new AssociativeArrayResolver(), + // Then inject services by type-hints for those that weren't resolved + new TypeHintContainerResolver($container), + // Then fall back on parameters default values for optional route parameters + new DefaultValueResolver(), + ]; + + $invoker = new Invoker(new ResolverChain($resolvers), $container); + + return new ControllerInvoker($invoker); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/slim-bridge/src/CallableResolver.php b/soc/2020/daily_report/archive/app/vendor/php-di/slim-bridge/src/CallableResolver.php new file mode 100644 index 0000000..1321124 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/slim-bridge/src/CallableResolver.php @@ -0,0 +1,28 @@ +callableResolver = $callableResolver; + } + /** + * {@inheritdoc} + */ + public function resolve($toResolve): callable + { + return $this->callableResolver->resolve($toResolve); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/php-di/slim-bridge/src/ControllerInvoker.php b/soc/2020/daily_report/archive/app/vendor/php-di/slim-bridge/src/ControllerInvoker.php new file mode 100644 index 0000000..8817b81 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/php-di/slim-bridge/src/ControllerInvoker.php @@ -0,0 +1,49 @@ +invoker = $invoker; + } + /** + * Invoke a route callable. + * + * @param callable $callable The callable to invoke using the strategy. + * @param ServerRequestInterface $request The request object. + * @param ResponseInterface $response The response object. + * @param array $routeArguments The route's placeholder arguments + * + * @return ResponseInterface|string The response from the callable. + */ + public function __invoke( + callable $callable, + ServerRequestInterface $request, + ResponseInterface $response, + array $routeArguments + ): ResponseInterface { + // Inject the request and response by parameter name + $parameters = [ + 'request' => $request, + 'response' => $response, + ]; + // Inject the route arguments by name + $parameters += $routeArguments; + // Inject the attributes defined on the request + $parameters += $request->getAttributes(); + + return $this->invoker->call($callable, $parameters); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/phpoption/phpoption/LICENSE b/soc/2020/daily_report/archive/app/vendor/phpoption/phpoption/LICENSE new file mode 100644 index 0000000..f49a4e1 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/phpoption/phpoption/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/soc/2020/daily_report/archive/app/vendor/phpoption/phpoption/composer.json b/soc/2020/daily_report/archive/app/vendor/phpoption/phpoption/composer.json new file mode 100644 index 0000000..77868bd --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/phpoption/phpoption/composer.json @@ -0,0 +1,38 @@ +{ + "name": "phpoption/phpoption", + "description": "Option Type for PHP", + "keywords": ["php", "option", "language", "type"], + "license": "Apache-2.0", + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com" + } + ], + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.0 || ^6.0 || ^7.0", + "bamarni/composer-bin-plugin": "^1.3" + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "autoload-dev": { + "psr-4": { + "PhpOption\\Tests\\": "tests/PhpOption/Tests/" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/phpoption/phpoption/src/PhpOption/LazyOption.php b/soc/2020/daily_report/archive/app/vendor/phpoption/phpoption/src/PhpOption/LazyOption.php new file mode 100644 index 0000000..e192b11 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/phpoption/phpoption/src/PhpOption/LazyOption.php @@ -0,0 +1,169 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace PhpOption; + +/** + * @template T + * + * @extends Option + */ +final class LazyOption extends Option +{ + /** @var callable(mixed...):(Option) */ + private $callback; + + /** @var array */ + private $arguments; + + /** @var Option|null */ + private $option; + + /** + * @template S + * @param callable(mixed...):(Option) $callback + * @param array $arguments + * + * @return LazyOption + */ + public static function create($callback, array $arguments = []) + { + return new self($callback, $arguments); + } + + /** + * @param callable(mixed...):(Option) $callback + * @param array $arguments + */ + public function __construct($callback, array $arguments = []) + { + if (!is_callable($callback)) { + throw new \InvalidArgumentException('Invalid callback given'); + } + + $this->callback = $callback; + $this->arguments = $arguments; + } + + public function isDefined() + { + return $this->option()->isDefined(); + } + + public function isEmpty() + { + return $this->option()->isEmpty(); + } + + public function get() + { + return $this->option()->get(); + } + + public function getOrElse($default) + { + return $this->option()->getOrElse($default); + } + + public function getOrCall($callable) + { + return $this->option()->getOrCall($callable); + } + + public function getOrThrow(\Exception $ex) + { + return $this->option()->getOrThrow($ex); + } + + public function orElse(Option $else) + { + return $this->option()->orElse($else); + } + + public function ifDefined($callable) + { + $this->option()->ifDefined($callable); + } + + public function forAll($callable) + { + return $this->option()->forAll($callable); + } + + public function map($callable) + { + return $this->option()->map($callable); + } + + public function flatMap($callable) + { + return $this->option()->flatMap($callable); + } + + public function filter($callable) + { + return $this->option()->filter($callable); + } + + public function filterNot($callable) + { + return $this->option()->filterNot($callable); + } + + public function select($value) + { + return $this->option()->select($value); + } + + public function reject($value) + { + return $this->option()->reject($value); + } + + public function getIterator() + { + return $this->option()->getIterator(); + } + + public function foldLeft($initialValue, $callable) + { + return $this->option()->foldLeft($initialValue, $callable); + } + + public function foldRight($initialValue, $callable) + { + return $this->option()->foldRight($initialValue, $callable); + } + + /** + * @return Option + */ + private function option() + { + if (null === $this->option) { + $this->option = call_user_func_array($this->callback, $this->arguments); + if (!$this->option instanceof Option) { + $this->option = null; + + throw new \RuntimeException(sprintf('Expected instance of \%s', Option::class)); + } + } + + return $this->option; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/phpoption/phpoption/src/PhpOption/None.php b/soc/2020/daily_report/archive/app/vendor/phpoption/phpoption/src/PhpOption/None.php new file mode 100644 index 0000000..13b2b4e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/phpoption/phpoption/src/PhpOption/None.php @@ -0,0 +1,136 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace PhpOption; + +use EmptyIterator; + +/** + * @extends Option + */ +final class None extends Option +{ + /** @var None|null */ + private static $instance; + + /** + * @return None + */ + public static function create() + { + if (null === self::$instance) { + self::$instance = new self(); + } + + return self::$instance; + } + + public function get() + { + throw new \RuntimeException('None has no value.'); + } + + public function getOrCall($callable) + { + return $callable(); + } + + public function getOrElse($default) + { + return $default; + } + + public function getOrThrow(\Exception $ex) + { + throw $ex; + } + + public function isEmpty() + { + return true; + } + + public function isDefined() + { + return false; + } + + public function orElse(Option $else) + { + return $else; + } + + public function ifDefined($callable) + { + // Just do nothing in that case. + } + + public function forAll($callable) + { + return $this; + } + + public function map($callable) + { + return $this; + } + + public function flatMap($callable) + { + return $this; + } + + public function filter($callable) + { + return $this; + } + + public function filterNot($callable) + { + return $this; + } + + public function select($value) + { + return $this; + } + + public function reject($value) + { + return $this; + } + + public function getIterator() + { + return new EmptyIterator(); + } + + public function foldLeft($initialValue, $callable) + { + return $initialValue; + } + + public function foldRight($initialValue, $callable) + { + return $initialValue; + } + + private function __construct() + { + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/phpoption/phpoption/src/PhpOption/Option.php b/soc/2020/daily_report/archive/app/vendor/phpoption/phpoption/src/PhpOption/Option.php new file mode 100644 index 0000000..bdc215f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/phpoption/phpoption/src/PhpOption/Option.php @@ -0,0 +1,434 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace PhpOption; + +use ArrayAccess; +use IteratorAggregate; + +/** + * @template T + * + * @implements IteratorAggregate + */ +abstract class Option implements IteratorAggregate +{ + /** + * Creates an option given a return value. + * + * This is intended for consuming existing APIs and allows you to easily + * convert them to an option. By default, we treat ``null`` as the None + * case, and everything else as Some. + * + * @template S + * + * @param S $value The actual return value. + * @param S $noneValue The value which should be considered "None"; null by + * default. + * + * @return Option + */ + public static function fromValue($value, $noneValue = null) + { + if ($value === $noneValue) { + return None::create(); + } + + return new Some($value); + } + + /** + * Creates an option from an array's value. + * + * If the key does not exist in the array, the array is not actually an + * array, or the array's value at the given key is null, None is returned. + * Otherwise, Some is returned wrapping the value at the given key. + * + * @template S + * + * @param array|ArrayAccess|null $array A potential array or \ArrayAccess value. + * @param string $key The key to check. + * + * @return Option + */ + public static function fromArraysValue($array, $key) + { + if (!(is_array($array) || $array instanceof ArrayAccess) || !isset($array[$key])) { + return None::create(); + } + + return new Some($array[$key]); + } + + /** + * Creates a lazy-option with the given callback. + * + * This is also a helper constructor for lazy-consuming existing APIs where + * the return value is not yet an option. By default, we treat ``null`` as + * None case, and everything else as Some. + * + * @template S + * + * @param callable $callback The callback to evaluate. + * @param array $arguments The arguments for the callback. + * @param S $noneValue The value which should be considered "None"; + * null by default. + * + * @return LazyOption + */ + public static function fromReturn($callback, array $arguments = [], $noneValue = null) + { + return new LazyOption(function () use ($callback, $arguments, $noneValue) { + /** @var mixed */ + $return = call_user_func_array($callback, $arguments); + + if ($return === $noneValue) { + return None::create(); + } + + return new Some($return); + }); + } + + /** + * Option factory, which creates new option based on passed value. + * + * If value is already an option, it simply returns. If value is callable, + * LazyOption with passed callback created and returned. If Option + * returned from callback, it returns directly. On other case value passed + * to Option::fromValue() method. + * + * @template S + * + * @param Option|callable|S $value + * @param S $noneValue Used when $value is mixed or + * callable, for None-check. + * + * @return Option|LazyOption + */ + public static function ensure($value, $noneValue = null) + { + if ($value instanceof self) { + return $value; + } elseif (is_callable($value)) { + return new LazyOption(function () use ($value, $noneValue) { + /** @var mixed */ + $return = $value(); + + if ($return instanceof self) { + return $return; + } else { + return self::fromValue($return, $noneValue); + } + }); + } else { + return self::fromValue($value, $noneValue); + } + } + + /** + * Lift a function so that it accepts Option as parameters. + * + * We return a new closure that wraps the original callback. If any of the + * parameters passed to the lifted function is empty, the function will + * return a value of None. Otherwise, we will pass all parameters to the + * original callback and return the value inside a new Option, unless an + * Option is returned from the function, in which case, we use that. + * + * @template S + * + * @param callable $callback + * @param mixed $noneValue + * + * @return callable + */ + public static function lift($callback, $noneValue = null) + { + return function () use ($callback, $noneValue) { + /** @var array */ + $args = func_get_args(); + + $reduced_args = array_reduce( + $args, + /** @param bool $status */ + function ($status, self $o) { + return $o->isEmpty() ? true : $status; + }, + false + ); + // if at least one parameter is empty, return None + if ($reduced_args) { + return None::create(); + } + + $args = array_map( + /** @return T */ + function (self $o) { + // it is safe to do so because the fold above checked + // that all arguments are of type Some + /** @var T */ + return $o->get(); + }, + $args + ); + + return self::ensure(call_user_func_array($callback, $args), $noneValue); + }; + } + + /** + * Returns the value if available, or throws an exception otherwise. + * + * @throws \RuntimeException If value is not available. + * + * @return T + */ + abstract public function get(); + + /** + * Returns the value if available, or the default value if not. + * + * @template S + * + * @param S $default + * + * @return T|S + */ + abstract public function getOrElse($default); + + /** + * Returns the value if available, or the results of the callable. + * + * This is preferable over ``getOrElse`` if the computation of the default + * value is expensive. + * + * @template S + * + * @param callable():S $callable + * + * @return T|S + */ + abstract public function getOrCall($callable); + + /** + * Returns the value if available, or throws the passed exception. + * + * @param \Exception $ex + * + * @return T + */ + abstract public function getOrThrow(\Exception $ex); + + /** + * Returns true if no value is available, false otherwise. + * + * @return bool + */ + abstract public function isEmpty(); + + /** + * Returns true if a value is available, false otherwise. + * + * @return bool + */ + abstract public function isDefined(); + + /** + * Returns this option if non-empty, or the passed option otherwise. + * + * This can be used to try multiple alternatives, and is especially useful + * with lazy evaluating options: + * + * ```php + * $repo->findSomething() + * ->orElse(new LazyOption(array($repo, 'findSomethingElse'))) + * ->orElse(new LazyOption(array($repo, 'createSomething'))); + * ``` + * + * @param Option $else + * + * @return Option + */ + abstract public function orElse(self $else); + + /** + * This is similar to map() below except that the return value has no meaning; + * the passed callable is simply executed if the option is non-empty, and + * ignored if the option is empty. + * + * In all cases, the return value of the callable is discarded. + * + * ```php + * $comment->getMaybeFile()->ifDefined(function($file) { + * // Do something with $file here. + * }); + * ``` + * + * If you're looking for something like ``ifEmpty``, you can use ``getOrCall`` + * and ``getOrElse`` in these cases. + * + * @deprecated Use forAll() instead. + * + * @param callable(T):mixed $callable + * + * @return void + */ + abstract public function ifDefined($callable); + + /** + * This is similar to map() except that the return value of the callable has no meaning. + * + * The passed callable is simply executed if the option is non-empty, and ignored if the + * option is empty. This method is preferred for callables with side-effects, while map() + * is intended for callables without side-effects. + * + * @param callable(T):mixed $callable + * + * @return Option + */ + abstract public function forAll($callable); + + /** + * Applies the callable to the value of the option if it is non-empty, + * and returns the return value of the callable wrapped in Some(). + * + * If the option is empty, then the callable is not applied. + * + * ```php + * (new Some("foo"))->map('strtoupper')->get(); // "FOO" + * ``` + * + * @template S + * + * @param callable(T):S $callable + * + * @return Option + */ + abstract public function map($callable); + + /** + * Applies the callable to the value of the option if it is non-empty, and + * returns the return value of the callable directly. + * + * In contrast to ``map``, the return value of the callable is expected to + * be an Option itself; it is not automatically wrapped in Some(). + * + * @template S + * + * @param callable(T):Option $callable must return an Option + * + * @return Option + */ + abstract public function flatMap($callable); + + /** + * If the option is empty, it is returned immediately without applying the callable. + * + * If the option is non-empty, the callable is applied, and if it returns true, + * the option itself is returned; otherwise, None is returned. + * + * @param callable(T):bool $callable + * + * @return Option + */ + abstract public function filter($callable); + + /** + * If the option is empty, it is returned immediately without applying the callable. + * + * If the option is non-empty, the callable is applied, and if it returns false, + * the option itself is returned; otherwise, None is returned. + * + * @param callable(T):bool $callable + * + * @return Option + */ + abstract public function filterNot($callable); + + /** + * If the option is empty, it is returned immediately. + * + * If the option is non-empty, and its value does not equal the passed value + * (via a shallow comparison ===), then None is returned. Otherwise, the + * Option is returned. + * + * In other words, this will filter all but the passed value. + * + * @param T $value + * + * @return Option + */ + abstract public function select($value); + + /** + * If the option is empty, it is returned immediately. + * + * If the option is non-empty, and its value does equal the passed value (via + * a shallow comparison ===), then None is returned; otherwise, the Option is + * returned. + * + * In other words, this will let all values through except the passed value. + * + * @param T $value + * + * @return Option + */ + abstract public function reject($value); + + /** + * Binary operator for the initial value and the option's value. + * + * If empty, the initial value is returned. If non-empty, the callable + * receives the initial value and the option's value as arguments. + * + * ```php + * + * $some = new Some(5); + * $none = None::create(); + * $result = $some->foldLeft(1, function($a, $b) { return $a + $b; }); // int(6) + * $result = $none->foldLeft(1, function($a, $b) { return $a + $b; }); // int(1) + * + * // This can be used instead of something like the following: + * $option = Option::fromValue($integerOrNull); + * $result = 1; + * if ( ! $option->isEmpty()) { + * $result += $option->get(); + * } + * ``` + * + * @template S + * + * @param S $initialValue + * @param callable(S, T):S $callable + * + * @return S + */ + abstract public function foldLeft($initialValue, $callable); + + /** + * foldLeft() but with reversed arguments for the callable. + * + * @template S + * + * @param S $initialValue + * @param callable(T, S):S $callable + * + * @return S + */ + abstract public function foldRight($initialValue, $callable); +} diff --git a/soc/2020/daily_report/archive/app/vendor/phpoption/phpoption/src/PhpOption/Some.php b/soc/2020/daily_report/archive/app/vendor/phpoption/phpoption/src/PhpOption/Some.php new file mode 100644 index 0000000..2961576 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/phpoption/phpoption/src/PhpOption/Some.php @@ -0,0 +1,165 @@ + + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace PhpOption; + +use ArrayIterator; + +/** + * @template T + * + * @extends Option + */ +final class Some extends Option +{ + /** @var T */ + private $value; + + /** + * @param T $value + */ + public function __construct($value) + { + $this->value = $value; + } + + /** + * @template U + * + * @param U $value + * + * @return Some + */ + public static function create($value) + { + return new self($value); + } + + public function isDefined() + { + return true; + } + + public function isEmpty() + { + return false; + } + + public function get() + { + return $this->value; + } + + public function getOrElse($default) + { + return $this->value; + } + + public function getOrCall($callable) + { + return $this->value; + } + + public function getOrThrow(\Exception $ex) + { + return $this->value; + } + + public function orElse(Option $else) + { + return $this; + } + + public function ifDefined($callable) + { + $callable($this->value); + } + + public function forAll($callable) + { + $callable($this->value); + + return $this; + } + + public function map($callable) + { + return new self($callable($this->value)); + } + + public function flatMap($callable) + { + $rs = $callable($this->value); + if (!$rs instanceof Option) { + throw new \RuntimeException('Callables passed to flatMap() must return an Option. Maybe you should use map() instead?'); + } + + return $rs; + } + + public function filter($callable) + { + if (true === $callable($this->value)) { + return $this; + } + + return None::create(); + } + + public function filterNot($callable) + { + if (false === $callable($this->value)) { + return $this; + } + + return None::create(); + } + + public function select($value) + { + if ($this->value === $value) { + return $this; + } + + return None::create(); + } + + public function reject($value) + { + if ($this->value === $value) { + return None::create(); + } + + return $this; + } + + public function getIterator() + { + return new ArrayIterator([$this->value]); + } + + public function foldLeft($initialValue, $callable) + { + return $callable($initialValue, $this->value); + } + + public function foldRight($initialValue, $callable) + { + return $callable($this->value, $initialValue); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/psr/cache/CHANGELOG.md b/soc/2020/daily_report/archive/app/vendor/psr/cache/CHANGELOG.md new file mode 100644 index 0000000..58ddab0 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/psr/cache/CHANGELOG.md @@ -0,0 +1,16 @@ +# Changelog + +All notable changes to this project will be documented in this file, in reverse chronological order by release. + +## 1.0.1 - 2016-08-06 + +### Fixed + +- Make spacing consistent in phpdoc annotations php-fig/cache#9 - chalasr +- Fix grammar in phpdoc annotations php-fig/cache#10 - chalasr +- Be more specific in docblocks that `getItems()` and `deleteItems()` take an array of strings (`string[]`) compared to just `array` php-fig/cache#8 - GrahamCampbell +- For `expiresAt()` and `expiresAfter()` in CacheItemInterface fix docblock to specify null as a valid parameters as well as an implementation of DateTimeInterface php-fig/cache#7 - GrahamCampbell + +## 1.0.0 - 2015-12-11 + +Initial stable release; reflects accepted PSR-6 specification diff --git a/soc/2020/daily_report/archive/app/vendor/psr/cache/LICENSE.txt b/soc/2020/daily_report/archive/app/vendor/psr/cache/LICENSE.txt new file mode 100644 index 0000000..b1c2c97 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/psr/cache/LICENSE.txt @@ -0,0 +1,19 @@ +Copyright (c) 2015 PHP Framework Interoperability Group + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/soc/2020/daily_report/archive/app/vendor/psr/cache/README.md b/soc/2020/daily_report/archive/app/vendor/psr/cache/README.md new file mode 100644 index 0000000..c8706ce --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/psr/cache/README.md @@ -0,0 +1,9 @@ +PSR Cache +========= + +This repository holds all interfaces defined by +[PSR-6](http://www.php-fig.org/psr/psr-6/). + +Note that this is not a Cache implementation of its own. It is merely an +interface that describes a Cache implementation. See the specification for more +details. diff --git a/soc/2020/daily_report/archive/app/vendor/psr/cache/composer.json b/soc/2020/daily_report/archive/app/vendor/psr/cache/composer.json new file mode 100644 index 0000000..e828fec --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/psr/cache/composer.json @@ -0,0 +1,25 @@ +{ + "name": "psr/cache", + "description": "Common interface for caching libraries", + "keywords": ["psr", "psr-6", "cache"], + "license": "MIT", + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "require": { + "php": ">=5.3.0" + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/psr/cache/src/CacheException.php b/soc/2020/daily_report/archive/app/vendor/psr/cache/src/CacheException.php new file mode 100644 index 0000000..e27f22f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/psr/cache/src/CacheException.php @@ -0,0 +1,10 @@ +=5.3.0" + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/psr/container/src/ContainerExceptionInterface.php b/soc/2020/daily_report/archive/app/vendor/psr/container/src/ContainerExceptionInterface.php new file mode 100644 index 0000000..d35c6b4 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/psr/container/src/ContainerExceptionInterface.php @@ -0,0 +1,13 @@ +=7.0.0", + "psr/http-message": "^1.0" + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/psr/http-factory/src/RequestFactoryInterface.php b/soc/2020/daily_report/archive/app/vendor/psr/http-factory/src/RequestFactoryInterface.php new file mode 100644 index 0000000..cb39a08 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/psr/http-factory/src/RequestFactoryInterface.php @@ -0,0 +1,18 @@ +=5.3.0" + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/psr/http-message/src/MessageInterface.php b/soc/2020/daily_report/archive/app/vendor/psr/http-message/src/MessageInterface.php new file mode 100644 index 0000000..dd46e5e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/psr/http-message/src/MessageInterface.php @@ -0,0 +1,187 @@ +getHeaders() as $name => $values) { + * echo $name . ": " . implode(", ", $values); + * } + * + * // Emit headers iteratively: + * foreach ($message->getHeaders() as $name => $values) { + * foreach ($values as $value) { + * header(sprintf('%s: %s', $name, $value), false); + * } + * } + * + * While header names are not case-sensitive, getHeaders() will preserve the + * exact case in which headers were originally specified. + * + * @return string[][] Returns an associative array of the message's headers. Each + * key MUST be a header name, and each value MUST be an array of strings + * for that header. + */ + public function getHeaders(); + + /** + * Checks if a header exists by the given case-insensitive name. + * + * @param string $name Case-insensitive header field name. + * @return bool Returns true if any header names match the given header + * name using a case-insensitive string comparison. Returns false if + * no matching header name is found in the message. + */ + public function hasHeader($name); + + /** + * Retrieves a message header value by the given case-insensitive name. + * + * This method returns an array of all the header values of the given + * case-insensitive header name. + * + * If the header does not appear in the message, this method MUST return an + * empty array. + * + * @param string $name Case-insensitive header field name. + * @return string[] An array of string values as provided for the given + * header. If the header does not appear in the message, this method MUST + * return an empty array. + */ + public function getHeader($name); + + /** + * Retrieves a comma-separated string of the values for a single header. + * + * This method returns all of the header values of the given + * case-insensitive header name as a string concatenated together using + * a comma. + * + * NOTE: Not all header values may be appropriately represented using + * comma concatenation. For such headers, use getHeader() instead + * and supply your own delimiter when concatenating. + * + * If the header does not appear in the message, this method MUST return + * an empty string. + * + * @param string $name Case-insensitive header field name. + * @return string A string of values as provided for the given header + * concatenated together using a comma. If the header does not appear in + * the message, this method MUST return an empty string. + */ + public function getHeaderLine($name); + + /** + * Return an instance with the provided value replacing the specified header. + * + * While header names are case-insensitive, the casing of the header will + * be preserved by this function, and returned from getHeaders(). + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * new and/or updated header and value. + * + * @param string $name Case-insensitive header field name. + * @param string|string[] $value Header value(s). + * @return static + * @throws \InvalidArgumentException for invalid header names or values. + */ + public function withHeader($name, $value); + + /** + * Return an instance with the specified header appended with the given value. + * + * Existing values for the specified header will be maintained. The new + * value(s) will be appended to the existing list. If the header did not + * exist previously, it will be added. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * new header and/or value. + * + * @param string $name Case-insensitive header field name to add. + * @param string|string[] $value Header value(s). + * @return static + * @throws \InvalidArgumentException for invalid header names or values. + */ + public function withAddedHeader($name, $value); + + /** + * Return an instance without the specified header. + * + * Header resolution MUST be done without case-sensitivity. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that removes + * the named header. + * + * @param string $name Case-insensitive header field name to remove. + * @return static + */ + public function withoutHeader($name); + + /** + * Gets the body of the message. + * + * @return StreamInterface Returns the body as a stream. + */ + public function getBody(); + + /** + * Return an instance with the specified message body. + * + * The body MUST be a StreamInterface object. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return a new instance that has the + * new body stream. + * + * @param StreamInterface $body Body. + * @return static + * @throws \InvalidArgumentException When the body is not valid. + */ + public function withBody(StreamInterface $body); +} diff --git a/soc/2020/daily_report/archive/app/vendor/psr/http-message/src/RequestInterface.php b/soc/2020/daily_report/archive/app/vendor/psr/http-message/src/RequestInterface.php new file mode 100644 index 0000000..a96d4fd --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/psr/http-message/src/RequestInterface.php @@ -0,0 +1,129 @@ +getQuery()` + * or from the `QUERY_STRING` server param. + * + * @return array + */ + public function getQueryParams(); + + /** + * Return an instance with the specified query string arguments. + * + * These values SHOULD remain immutable over the course of the incoming + * request. They MAY be injected during instantiation, such as from PHP's + * $_GET superglobal, or MAY be derived from some other value such as the + * URI. In cases where the arguments are parsed from the URI, the data + * MUST be compatible with what PHP's parse_str() would return for + * purposes of how duplicate query parameters are handled, and how nested + * sets are handled. + * + * Setting query string arguments MUST NOT change the URI stored by the + * request, nor the values in the server params. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * updated query string arguments. + * + * @param array $query Array of query string arguments, typically from + * $_GET. + * @return static + */ + public function withQueryParams(array $query); + + /** + * Retrieve normalized file upload data. + * + * This method returns upload metadata in a normalized tree, with each leaf + * an instance of Psr\Http\Message\UploadedFileInterface. + * + * These values MAY be prepared from $_FILES or the message body during + * instantiation, or MAY be injected via withUploadedFiles(). + * + * @return array An array tree of UploadedFileInterface instances; an empty + * array MUST be returned if no data is present. + */ + public function getUploadedFiles(); + + /** + * Create a new instance with the specified uploaded files. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * updated body parameters. + * + * @param array $uploadedFiles An array tree of UploadedFileInterface instances. + * @return static + * @throws \InvalidArgumentException if an invalid structure is provided. + */ + public function withUploadedFiles(array $uploadedFiles); + + /** + * Retrieve any parameters provided in the request body. + * + * If the request Content-Type is either application/x-www-form-urlencoded + * or multipart/form-data, and the request method is POST, this method MUST + * return the contents of $_POST. + * + * Otherwise, this method may return any results of deserializing + * the request body content; as parsing returns structured content, the + * potential types MUST be arrays or objects only. A null value indicates + * the absence of body content. + * + * @return null|array|object The deserialized body parameters, if any. + * These will typically be an array or object. + */ + public function getParsedBody(); + + /** + * Return an instance with the specified body parameters. + * + * These MAY be injected during instantiation. + * + * If the request Content-Type is either application/x-www-form-urlencoded + * or multipart/form-data, and the request method is POST, use this method + * ONLY to inject the contents of $_POST. + * + * The data IS NOT REQUIRED to come from $_POST, but MUST be the results of + * deserializing the request body content. Deserialization/parsing returns + * structured data, and, as such, this method ONLY accepts arrays or objects, + * or a null value if nothing was available to parse. + * + * As an example, if content negotiation determines that the request data + * is a JSON payload, this method could be used to create a request + * instance with the deserialized parameters. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * updated body parameters. + * + * @param null|array|object $data The deserialized body data. This will + * typically be in an array or object. + * @return static + * @throws \InvalidArgumentException if an unsupported argument type is + * provided. + */ + public function withParsedBody($data); + + /** + * Retrieve attributes derived from the request. + * + * The request "attributes" may be used to allow injection of any + * parameters derived from the request: e.g., the results of path + * match operations; the results of decrypting cookies; the results of + * deserializing non-form-encoded message bodies; etc. Attributes + * will be application and request specific, and CAN be mutable. + * + * @return array Attributes derived from the request. + */ + public function getAttributes(); + + /** + * Retrieve a single derived request attribute. + * + * Retrieves a single derived request attribute as described in + * getAttributes(). If the attribute has not been previously set, returns + * the default value as provided. + * + * This method obviates the need for a hasAttribute() method, as it allows + * specifying a default value to return if the attribute is not found. + * + * @see getAttributes() + * @param string $name The attribute name. + * @param mixed $default Default value to return if the attribute does not exist. + * @return mixed + */ + public function getAttribute($name, $default = null); + + /** + * Return an instance with the specified derived request attribute. + * + * This method allows setting a single derived request attribute as + * described in getAttributes(). + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * updated attribute. + * + * @see getAttributes() + * @param string $name The attribute name. + * @param mixed $value The value of the attribute. + * @return static + */ + public function withAttribute($name, $value); + + /** + * Return an instance that removes the specified derived request attribute. + * + * This method allows removing a single derived request attribute as + * described in getAttributes(). + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that removes + * the attribute. + * + * @see getAttributes() + * @param string $name The attribute name. + * @return static + */ + public function withoutAttribute($name); +} diff --git a/soc/2020/daily_report/archive/app/vendor/psr/http-message/src/StreamInterface.php b/soc/2020/daily_report/archive/app/vendor/psr/http-message/src/StreamInterface.php new file mode 100644 index 0000000..f68f391 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/psr/http-message/src/StreamInterface.php @@ -0,0 +1,158 @@ + + * [user-info@]host[:port] + * + * + * If the port component is not set or is the standard port for the current + * scheme, it SHOULD NOT be included. + * + * @see https://tools.ietf.org/html/rfc3986#section-3.2 + * @return string The URI authority, in "[user-info@]host[:port]" format. + */ + public function getAuthority(); + + /** + * Retrieve the user information component of the URI. + * + * If no user information is present, this method MUST return an empty + * string. + * + * If a user is present in the URI, this will return that value; + * additionally, if the password is also present, it will be appended to the + * user value, with a colon (":") separating the values. + * + * The trailing "@" character is not part of the user information and MUST + * NOT be added. + * + * @return string The URI user information, in "username[:password]" format. + */ + public function getUserInfo(); + + /** + * Retrieve the host component of the URI. + * + * If no host is present, this method MUST return an empty string. + * + * The value returned MUST be normalized to lowercase, per RFC 3986 + * Section 3.2.2. + * + * @see http://tools.ietf.org/html/rfc3986#section-3.2.2 + * @return string The URI host. + */ + public function getHost(); + + /** + * Retrieve the port component of the URI. + * + * If a port is present, and it is non-standard for the current scheme, + * this method MUST return it as an integer. If the port is the standard port + * used with the current scheme, this method SHOULD return null. + * + * If no port is present, and no scheme is present, this method MUST return + * a null value. + * + * If no port is present, but a scheme is present, this method MAY return + * the standard port for that scheme, but SHOULD return null. + * + * @return null|int The URI port. + */ + public function getPort(); + + /** + * Retrieve the path component of the URI. + * + * The path can either be empty or absolute (starting with a slash) or + * rootless (not starting with a slash). Implementations MUST support all + * three syntaxes. + * + * Normally, the empty path "" and absolute path "/" are considered equal as + * defined in RFC 7230 Section 2.7.3. But this method MUST NOT automatically + * do this normalization because in contexts with a trimmed base path, e.g. + * the front controller, this difference becomes significant. It's the task + * of the user to handle both "" and "/". + * + * The value returned MUST be percent-encoded, but MUST NOT double-encode + * any characters. To determine what characters to encode, please refer to + * RFC 3986, Sections 2 and 3.3. + * + * As an example, if the value should include a slash ("/") not intended as + * delimiter between path segments, that value MUST be passed in encoded + * form (e.g., "%2F") to the instance. + * + * @see https://tools.ietf.org/html/rfc3986#section-2 + * @see https://tools.ietf.org/html/rfc3986#section-3.3 + * @return string The URI path. + */ + public function getPath(); + + /** + * Retrieve the query string of the URI. + * + * If no query string is present, this method MUST return an empty string. + * + * The leading "?" character is not part of the query and MUST NOT be + * added. + * + * The value returned MUST be percent-encoded, but MUST NOT double-encode + * any characters. To determine what characters to encode, please refer to + * RFC 3986, Sections 2 and 3.4. + * + * As an example, if a value in a key/value pair of the query string should + * include an ampersand ("&") not intended as a delimiter between values, + * that value MUST be passed in encoded form (e.g., "%26") to the instance. + * + * @see https://tools.ietf.org/html/rfc3986#section-2 + * @see https://tools.ietf.org/html/rfc3986#section-3.4 + * @return string The URI query string. + */ + public function getQuery(); + + /** + * Retrieve the fragment component of the URI. + * + * If no fragment is present, this method MUST return an empty string. + * + * The leading "#" character is not part of the fragment and MUST NOT be + * added. + * + * The value returned MUST be percent-encoded, but MUST NOT double-encode + * any characters. To determine what characters to encode, please refer to + * RFC 3986, Sections 2 and 3.5. + * + * @see https://tools.ietf.org/html/rfc3986#section-2 + * @see https://tools.ietf.org/html/rfc3986#section-3.5 + * @return string The URI fragment. + */ + public function getFragment(); + + /** + * Return an instance with the specified scheme. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified scheme. + * + * Implementations MUST support the schemes "http" and "https" case + * insensitively, and MAY accommodate other schemes if required. + * + * An empty scheme is equivalent to removing the scheme. + * + * @param string $scheme The scheme to use with the new instance. + * @return static A new instance with the specified scheme. + * @throws \InvalidArgumentException for invalid or unsupported schemes. + */ + public function withScheme($scheme); + + /** + * Return an instance with the specified user information. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified user information. + * + * Password is optional, but the user information MUST include the + * user; an empty string for the user is equivalent to removing user + * information. + * + * @param string $user The user name to use for authority. + * @param null|string $password The password associated with $user. + * @return static A new instance with the specified user information. + */ + public function withUserInfo($user, $password = null); + + /** + * Return an instance with the specified host. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified host. + * + * An empty host value is equivalent to removing the host. + * + * @param string $host The hostname to use with the new instance. + * @return static A new instance with the specified host. + * @throws \InvalidArgumentException for invalid hostnames. + */ + public function withHost($host); + + /** + * Return an instance with the specified port. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified port. + * + * Implementations MUST raise an exception for ports outside the + * established TCP and UDP port ranges. + * + * A null value provided for the port is equivalent to removing the port + * information. + * + * @param null|int $port The port to use with the new instance; a null value + * removes the port information. + * @return static A new instance with the specified port. + * @throws \InvalidArgumentException for invalid ports. + */ + public function withPort($port); + + /** + * Return an instance with the specified path. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified path. + * + * The path can either be empty or absolute (starting with a slash) or + * rootless (not starting with a slash). Implementations MUST support all + * three syntaxes. + * + * If the path is intended to be domain-relative rather than path relative then + * it must begin with a slash ("/"). Paths not starting with a slash ("/") + * are assumed to be relative to some base path known to the application or + * consumer. + * + * Users can provide both encoded and decoded path characters. + * Implementations ensure the correct encoding as outlined in getPath(). + * + * @param string $path The path to use with the new instance. + * @return static A new instance with the specified path. + * @throws \InvalidArgumentException for invalid paths. + */ + public function withPath($path); + + /** + * Return an instance with the specified query string. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified query string. + * + * Users can provide both encoded and decoded query characters. + * Implementations ensure the correct encoding as outlined in getQuery(). + * + * An empty query string value is equivalent to removing the query string. + * + * @param string $query The query string to use with the new instance. + * @return static A new instance with the specified query string. + * @throws \InvalidArgumentException for invalid query strings. + */ + public function withQuery($query); + + /** + * Return an instance with the specified URI fragment. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified URI fragment. + * + * Users can provide both encoded and decoded fragment characters. + * Implementations ensure the correct encoding as outlined in getFragment(). + * + * An empty fragment value is equivalent to removing the fragment. + * + * @param string $fragment The fragment to use with the new instance. + * @return static A new instance with the specified fragment. + */ + public function withFragment($fragment); + + /** + * Return the string representation as a URI reference. + * + * Depending on which components of the URI are present, the resulting + * string is either a full URI or relative reference according to RFC 3986, + * Section 4.1. The method concatenates the various components of the URI, + * using the appropriate delimiters: + * + * - If a scheme is present, it MUST be suffixed by ":". + * - If an authority is present, it MUST be prefixed by "//". + * - The path can be concatenated without delimiters. But there are two + * cases where the path has to be adjusted to make the URI reference + * valid as PHP does not allow to throw an exception in __toString(): + * - If the path is rootless and an authority is present, the path MUST + * be prefixed by "/". + * - If the path is starting with more than one "/" and no authority is + * present, the starting slashes MUST be reduced to one. + * - If a query is present, it MUST be prefixed by "?". + * - If a fragment is present, it MUST be prefixed by "#". + * + * @see http://tools.ietf.org/html/rfc3986#section-4.1 + * @return string + */ + public function __toString(); +} diff --git a/soc/2020/daily_report/archive/app/vendor/psr/http-server-handler/LICENSE b/soc/2020/daily_report/archive/app/vendor/psr/http-server-handler/LICENSE new file mode 100644 index 0000000..b71ec5d --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/psr/http-server-handler/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 PHP Framework Interoperability Group + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/soc/2020/daily_report/archive/app/vendor/psr/http-server-handler/README.md b/soc/2020/daily_report/archive/app/vendor/psr/http-server-handler/README.md new file mode 100644 index 0000000..1b7b486 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/psr/http-server-handler/README.md @@ -0,0 +1,6 @@ +HTTP Server Handler +=================== + +Provides the `RequestHandlerInterface` of [PSR-15][psr-15]. + +[psr-15]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-15-request-handlers.md diff --git a/soc/2020/daily_report/archive/app/vendor/psr/http-server-handler/composer.json b/soc/2020/daily_report/archive/app/vendor/psr/http-server-handler/composer.json new file mode 100644 index 0000000..9e8b51d --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/psr/http-server-handler/composer.json @@ -0,0 +1,36 @@ +{ + "name": "psr/http-server-handler", + "description": "Common interface for HTTP server-side request handler", + "keywords": [ + "psr", + "psr-7", + "psr-15", + "http-interop", + "http", + "server", + "handler", + "request", + "response" + ], + "license": "MIT", + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "require": { + "php": ">=7.0", + "psr/http-message": "^1.0" + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Server\\": "src/" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/psr/http-server-handler/src/RequestHandlerInterface.php b/soc/2020/daily_report/archive/app/vendor/psr/http-server-handler/src/RequestHandlerInterface.php new file mode 100644 index 0000000..83911e2 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/psr/http-server-handler/src/RequestHandlerInterface.php @@ -0,0 +1,22 @@ +=7.0", + "psr/http-message": "^1.0", + "psr/http-server-handler": "^1.0" + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Server\\": "src/" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/psr/http-server-middleware/src/MiddlewareInterface.php b/soc/2020/daily_report/archive/app/vendor/psr/http-server-middleware/src/MiddlewareInterface.php new file mode 100644 index 0000000..a6c14f8 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/psr/http-server-middleware/src/MiddlewareInterface.php @@ -0,0 +1,25 @@ +log(LogLevel::EMERGENCY, $message, $context); + } + + /** + * Action must be taken immediately. + * + * Example: Entire website down, database unavailable, etc. This should + * trigger the SMS alerts and wake you up. + * + * @param string $message + * @param array $context + * + * @return void + */ + public function alert($message, array $context = array()) + { + $this->log(LogLevel::ALERT, $message, $context); + } + + /** + * Critical conditions. + * + * Example: Application component unavailable, unexpected exception. + * + * @param string $message + * @param array $context + * + * @return void + */ + public function critical($message, array $context = array()) + { + $this->log(LogLevel::CRITICAL, $message, $context); + } + + /** + * Runtime errors that do not require immediate action but should typically + * be logged and monitored. + * + * @param string $message + * @param array $context + * + * @return void + */ + public function error($message, array $context = array()) + { + $this->log(LogLevel::ERROR, $message, $context); + } + + /** + * Exceptional occurrences that are not errors. + * + * Example: Use of deprecated APIs, poor use of an API, undesirable things + * that are not necessarily wrong. + * + * @param string $message + * @param array $context + * + * @return void + */ + public function warning($message, array $context = array()) + { + $this->log(LogLevel::WARNING, $message, $context); + } + + /** + * Normal but significant events. + * + * @param string $message + * @param array $context + * + * @return void + */ + public function notice($message, array $context = array()) + { + $this->log(LogLevel::NOTICE, $message, $context); + } + + /** + * Interesting events. + * + * Example: User logs in, SQL logs. + * + * @param string $message + * @param array $context + * + * @return void + */ + public function info($message, array $context = array()) + { + $this->log(LogLevel::INFO, $message, $context); + } + + /** + * Detailed debug information. + * + * @param string $message + * @param array $context + * + * @return void + */ + public function debug($message, array $context = array()) + { + $this->log(LogLevel::DEBUG, $message, $context); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/psr/log/Psr/Log/InvalidArgumentException.php b/soc/2020/daily_report/archive/app/vendor/psr/log/Psr/Log/InvalidArgumentException.php new file mode 100644 index 0000000..67f852d --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/psr/log/Psr/Log/InvalidArgumentException.php @@ -0,0 +1,7 @@ +logger = $logger; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/psr/log/Psr/Log/LoggerInterface.php b/soc/2020/daily_report/archive/app/vendor/psr/log/Psr/Log/LoggerInterface.php new file mode 100644 index 0000000..2206cfd --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/psr/log/Psr/Log/LoggerInterface.php @@ -0,0 +1,125 @@ +log(LogLevel::EMERGENCY, $message, $context); + } + + /** + * Action must be taken immediately. + * + * Example: Entire website down, database unavailable, etc. This should + * trigger the SMS alerts and wake you up. + * + * @param string $message + * @param array $context + * + * @return void + */ + public function alert($message, array $context = array()) + { + $this->log(LogLevel::ALERT, $message, $context); + } + + /** + * Critical conditions. + * + * Example: Application component unavailable, unexpected exception. + * + * @param string $message + * @param array $context + * + * @return void + */ + public function critical($message, array $context = array()) + { + $this->log(LogLevel::CRITICAL, $message, $context); + } + + /** + * Runtime errors that do not require immediate action but should typically + * be logged and monitored. + * + * @param string $message + * @param array $context + * + * @return void + */ + public function error($message, array $context = array()) + { + $this->log(LogLevel::ERROR, $message, $context); + } + + /** + * Exceptional occurrences that are not errors. + * + * Example: Use of deprecated APIs, poor use of an API, undesirable things + * that are not necessarily wrong. + * + * @param string $message + * @param array $context + * + * @return void + */ + public function warning($message, array $context = array()) + { + $this->log(LogLevel::WARNING, $message, $context); + } + + /** + * Normal but significant events. + * + * @param string $message + * @param array $context + * + * @return void + */ + public function notice($message, array $context = array()) + { + $this->log(LogLevel::NOTICE, $message, $context); + } + + /** + * Interesting events. + * + * Example: User logs in, SQL logs. + * + * @param string $message + * @param array $context + * + * @return void + */ + public function info($message, array $context = array()) + { + $this->log(LogLevel::INFO, $message, $context); + } + + /** + * Detailed debug information. + * + * @param string $message + * @param array $context + * + * @return void + */ + public function debug($message, array $context = array()) + { + $this->log(LogLevel::DEBUG, $message, $context); + } + + /** + * Logs with an arbitrary level. + * + * @param mixed $level + * @param string $message + * @param array $context + * + * @return void + * + * @throws \Psr\Log\InvalidArgumentException + */ + abstract public function log($level, $message, array $context = array()); +} diff --git a/soc/2020/daily_report/archive/app/vendor/psr/log/Psr/Log/NullLogger.php b/soc/2020/daily_report/archive/app/vendor/psr/log/Psr/Log/NullLogger.php new file mode 100644 index 0000000..c8f7293 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/psr/log/Psr/Log/NullLogger.php @@ -0,0 +1,30 @@ +logger) { }` + * blocks. + */ +class NullLogger extends AbstractLogger +{ + /** + * Logs with an arbitrary level. + * + * @param mixed $level + * @param string $message + * @param array $context + * + * @return void + * + * @throws \Psr\Log\InvalidArgumentException + */ + public function log($level, $message, array $context = array()) + { + // noop + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/psr/log/Psr/Log/Test/DummyTest.php b/soc/2020/daily_report/archive/app/vendor/psr/log/Psr/Log/Test/DummyTest.php new file mode 100644 index 0000000..9638c11 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/psr/log/Psr/Log/Test/DummyTest.php @@ -0,0 +1,18 @@ + ". + * + * Example ->error('Foo') would yield "error Foo". + * + * @return string[] + */ + abstract public function getLogs(); + + public function testImplements() + { + $this->assertInstanceOf('Psr\Log\LoggerInterface', $this->getLogger()); + } + + /** + * @dataProvider provideLevelsAndMessages + */ + public function testLogsAtAllLevels($level, $message) + { + $logger = $this->getLogger(); + $logger->{$level}($message, array('user' => 'Bob')); + $logger->log($level, $message, array('user' => 'Bob')); + + $expected = array( + $level.' message of level '.$level.' with context: Bob', + $level.' message of level '.$level.' with context: Bob', + ); + $this->assertEquals($expected, $this->getLogs()); + } + + public function provideLevelsAndMessages() + { + return array( + LogLevel::EMERGENCY => array(LogLevel::EMERGENCY, 'message of level emergency with context: {user}'), + LogLevel::ALERT => array(LogLevel::ALERT, 'message of level alert with context: {user}'), + LogLevel::CRITICAL => array(LogLevel::CRITICAL, 'message of level critical with context: {user}'), + LogLevel::ERROR => array(LogLevel::ERROR, 'message of level error with context: {user}'), + LogLevel::WARNING => array(LogLevel::WARNING, 'message of level warning with context: {user}'), + LogLevel::NOTICE => array(LogLevel::NOTICE, 'message of level notice with context: {user}'), + LogLevel::INFO => array(LogLevel::INFO, 'message of level info with context: {user}'), + LogLevel::DEBUG => array(LogLevel::DEBUG, 'message of level debug with context: {user}'), + ); + } + + /** + * @expectedException \Psr\Log\InvalidArgumentException + */ + public function testThrowsOnInvalidLevel() + { + $logger = $this->getLogger(); + $logger->log('invalid level', 'Foo'); + } + + public function testContextReplacement() + { + $logger = $this->getLogger(); + $logger->info('{Message {nothing} {user} {foo.bar} a}', array('user' => 'Bob', 'foo.bar' => 'Bar')); + + $expected = array('info {Message {nothing} Bob Bar a}'); + $this->assertEquals($expected, $this->getLogs()); + } + + public function testObjectCastToString() + { + if (method_exists($this, 'createPartialMock')) { + $dummy = $this->createPartialMock('Psr\Log\Test\DummyTest', array('__toString')); + } else { + $dummy = $this->getMock('Psr\Log\Test\DummyTest', array('__toString')); + } + $dummy->expects($this->once()) + ->method('__toString') + ->will($this->returnValue('DUMMY')); + + $this->getLogger()->warning($dummy); + + $expected = array('warning DUMMY'); + $this->assertEquals($expected, $this->getLogs()); + } + + public function testContextCanContainAnything() + { + $closed = fopen('php://memory', 'r'); + fclose($closed); + + $context = array( + 'bool' => true, + 'null' => null, + 'string' => 'Foo', + 'int' => 0, + 'float' => 0.5, + 'nested' => array('with object' => new DummyTest), + 'object' => new \DateTime, + 'resource' => fopen('php://memory', 'r'), + 'closed' => $closed, + ); + + $this->getLogger()->warning('Crazy context data', $context); + + $expected = array('warning Crazy context data'); + $this->assertEquals($expected, $this->getLogs()); + } + + public function testContextExceptionKeyCanBeExceptionOrOtherValues() + { + $logger = $this->getLogger(); + $logger->warning('Random message', array('exception' => 'oops')); + $logger->critical('Uncaught Exception!', array('exception' => new \LogicException('Fail'))); + + $expected = array( + 'warning Random message', + 'critical Uncaught Exception!' + ); + $this->assertEquals($expected, $this->getLogs()); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/psr/log/Psr/Log/Test/TestLogger.php b/soc/2020/daily_report/archive/app/vendor/psr/log/Psr/Log/Test/TestLogger.php new file mode 100644 index 0000000..1be3230 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/psr/log/Psr/Log/Test/TestLogger.php @@ -0,0 +1,147 @@ + $level, + 'message' => $message, + 'context' => $context, + ]; + + $this->recordsByLevel[$record['level']][] = $record; + $this->records[] = $record; + } + + public function hasRecords($level) + { + return isset($this->recordsByLevel[$level]); + } + + public function hasRecord($record, $level) + { + if (is_string($record)) { + $record = ['message' => $record]; + } + return $this->hasRecordThatPasses(function ($rec) use ($record) { + if ($rec['message'] !== $record['message']) { + return false; + } + if (isset($record['context']) && $rec['context'] !== $record['context']) { + return false; + } + return true; + }, $level); + } + + public function hasRecordThatContains($message, $level) + { + return $this->hasRecordThatPasses(function ($rec) use ($message) { + return strpos($rec['message'], $message) !== false; + }, $level); + } + + public function hasRecordThatMatches($regex, $level) + { + return $this->hasRecordThatPasses(function ($rec) use ($regex) { + return preg_match($regex, $rec['message']) > 0; + }, $level); + } + + public function hasRecordThatPasses(callable $predicate, $level) + { + if (!isset($this->recordsByLevel[$level])) { + return false; + } + foreach ($this->recordsByLevel[$level] as $i => $rec) { + if (call_user_func($predicate, $rec, $i)) { + return true; + } + } + return false; + } + + public function __call($method, $args) + { + if (preg_match('/(.*)(Debug|Info|Notice|Warning|Error|Critical|Alert|Emergency)(.*)/', $method, $matches) > 0) { + $genericMethod = $matches[1] . ('Records' !== $matches[3] ? 'Record' : '') . $matches[3]; + $level = strtolower($matches[2]); + if (method_exists($this, $genericMethod)) { + $args[] = $level; + return call_user_func_array([$this, $genericMethod], $args); + } + } + throw new \BadMethodCallException('Call to undefined method ' . get_class($this) . '::' . $method . '()'); + } + + public function reset() + { + $this->records = []; + $this->recordsByLevel = []; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/psr/log/README.md b/soc/2020/daily_report/archive/app/vendor/psr/log/README.md new file mode 100644 index 0000000..a9f20c4 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/psr/log/README.md @@ -0,0 +1,58 @@ +PSR Log +======= + +This repository holds all interfaces/classes/traits related to +[PSR-3](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md). + +Note that this is not a logger of its own. It is merely an interface that +describes a logger. See the specification for more details. + +Installation +------------ + +```bash +composer require psr/log +``` + +Usage +----- + +If you need a logger, you can use the interface like this: + +```php +logger = $logger; + } + + public function doSomething() + { + if ($this->logger) { + $this->logger->info('Doing work'); + } + + try { + $this->doSomethingElse(); + } catch (Exception $exception) { + $this->logger->error('Oh no!', array('exception' => $exception)); + } + + // do something useful + } +} +``` + +You can then pick one of the implementations of the interface to get a logger. + +If you want to implement the interface, you can require this package and +implement `Psr\Log\LoggerInterface` in your code. Please read the +[specification text](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md) +for details. diff --git a/soc/2020/daily_report/archive/app/vendor/psr/log/composer.json b/soc/2020/daily_report/archive/app/vendor/psr/log/composer.json new file mode 100644 index 0000000..3f6d4ee --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/psr/log/composer.json @@ -0,0 +1,26 @@ +{ + "name": "psr/log", + "description": "Common interface for logging libraries", + "keywords": ["psr", "psr-3", "log"], + "homepage": "https://github.com/php-fig/log", + "license": "MIT", + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "require": { + "php": ">=5.3.0" + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/ralouphie/getallheaders/LICENSE b/soc/2020/daily_report/archive/app/vendor/ralouphie/getallheaders/LICENSE new file mode 100644 index 0000000..be5540c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/ralouphie/getallheaders/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Ralph Khattar + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/soc/2020/daily_report/archive/app/vendor/ralouphie/getallheaders/README.md b/soc/2020/daily_report/archive/app/vendor/ralouphie/getallheaders/README.md new file mode 100644 index 0000000..9430d76 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/ralouphie/getallheaders/README.md @@ -0,0 +1,27 @@ +getallheaders +============= + +PHP `getallheaders()` polyfill. Compatible with PHP >= 5.3. + +[![Build Status](https://travis-ci.org/ralouphie/getallheaders.svg?branch=master)](https://travis-ci.org/ralouphie/getallheaders) +[![Coverage Status](https://coveralls.io/repos/ralouphie/getallheaders/badge.png?branch=master)](https://coveralls.io/r/ralouphie/getallheaders?branch=master) +[![Latest Stable Version](https://poser.pugx.org/ralouphie/getallheaders/v/stable.png)](https://packagist.org/packages/ralouphie/getallheaders) +[![Latest Unstable Version](https://poser.pugx.org/ralouphie/getallheaders/v/unstable.png)](https://packagist.org/packages/ralouphie/getallheaders) +[![License](https://poser.pugx.org/ralouphie/getallheaders/license.png)](https://packagist.org/packages/ralouphie/getallheaders) + + +This is a simple polyfill for [`getallheaders()`](http://www.php.net/manual/en/function.getallheaders.php). + +## Install + +For PHP version **`>= 5.6`**: + +``` +composer require ralouphie/getallheaders +``` + +For PHP version **`< 5.6`**: + +``` +composer require ralouphie/getallheaders "^2" +``` diff --git a/soc/2020/daily_report/archive/app/vendor/ralouphie/getallheaders/composer.json b/soc/2020/daily_report/archive/app/vendor/ralouphie/getallheaders/composer.json new file mode 100644 index 0000000..de8ce62 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/ralouphie/getallheaders/composer.json @@ -0,0 +1,26 @@ +{ + "name": "ralouphie/getallheaders", + "description": "A polyfill for getallheaders.", + "license": "MIT", + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "require": { + "php": ">=5.6" + }, + "require-dev": { + "phpunit/phpunit": "^5 || ^6.5", + "php-coveralls/php-coveralls": "^2.1" + }, + "autoload": { + "files": ["src/getallheaders.php"] + }, + "autoload-dev": { + "psr-4": { + "getallheaders\\Tests\\": "tests/" + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/ralouphie/getallheaders/src/getallheaders.php b/soc/2020/daily_report/archive/app/vendor/ralouphie/getallheaders/src/getallheaders.php new file mode 100644 index 0000000..c7285a5 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/ralouphie/getallheaders/src/getallheaders.php @@ -0,0 +1,46 @@ + 'Content-Type', + 'CONTENT_LENGTH' => 'Content-Length', + 'CONTENT_MD5' => 'Content-Md5', + ); + + foreach ($_SERVER as $key => $value) { + if (substr($key, 0, 5) === 'HTTP_') { + $key = substr($key, 5); + if (!isset($copy_server[$key]) || !isset($_SERVER[$key])) { + $key = str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', $key)))); + $headers[$key] = $value; + } + } elseif (isset($copy_server[$key])) { + $headers[$copy_server[$key]] = $value; + } + } + + if (!isset($headers['Authorization'])) { + if (isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION'])) { + $headers['Authorization'] = $_SERVER['REDIRECT_HTTP_AUTHORIZATION']; + } elseif (isset($_SERVER['PHP_AUTH_USER'])) { + $basic_pass = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : ''; + $headers['Authorization'] = 'Basic ' . base64_encode($_SERVER['PHP_AUTH_USER'] . ':' . $basic_pass); + } elseif (isset($_SERVER['PHP_AUTH_DIGEST'])) { + $headers['Authorization'] = $_SERVER['PHP_AUTH_DIGEST']; + } + } + + return $headers; + } + +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/psr7/LICENSE.md b/soc/2020/daily_report/archive/app/vendor/slim/psr7/LICENSE.md new file mode 100644 index 0000000..2bd2d5a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/psr7/LICENSE.md @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Slim Framework + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/soc/2020/daily_report/archive/app/vendor/slim/psr7/MAINTAINERS.md b/soc/2020/daily_report/archive/app/vendor/slim/psr7/MAINTAINERS.md new file mode 100644 index 0000000..5c2496e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/psr7/MAINTAINERS.md @@ -0,0 +1,17 @@ +# Maintainers + +There aren't many rules for maintainers of Slim-Psr7 to remember; what we have is listed here. + +## We don't merge our own PRs + +Our code is better if more than one set of eyes looks at it. Therefore we do not merge our own pull requests unless there is an exceptional circumstance. This helps to spot errors in the patch and also enables us to share information about the project around the maintainer team. + +## PRs tagged `[WIP]` are not ready to be merged + +Sometimes it's helpful to collaborate on a patch before it's ready to be merged. We use the `[WIP]` tag (for _Work in Progress_) in the title to mark these PRs. + +If a PR has `[WIP]` in its title, then it is not to be merged. The person who raised the PR will remove the `[WIP]` tag when they are ready for a full review and merge. + +## Assign a merged PR to a milestone + +By ensuring that all merged PRs are assigned to a milestone, we can easily find which PRs were in which release. diff --git a/soc/2020/daily_report/archive/app/vendor/slim/psr7/composer.json b/soc/2020/daily_report/archive/app/vendor/slim/psr7/composer.json new file mode 100644 index 0000000..bbe4ce1 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/psr7/composer.json @@ -0,0 +1,72 @@ +{ + "name": "slim/psr7", + "type": "library", + "description": "Strict PSR-7 implementation", + "keywords": ["psr7","psr-7","http"], + "homepage": "https://www.slimframework.com", + "license": "MIT", + "authors": [ + { + "name": "Josh Lockhart", + "email": "hello@joshlockhart.com", + "homepage": "http://joshlockhart.com" + }, + { + "name": "Andrew Smith", + "email": "a.smith@silentworks.co.uk", + "homepage": "http://silentworks.co.uk" + }, + { + "name": "Rob Allen", + "email": "rob@akrabat.com", + "homepage": "http://akrabat.com" + }, + { + "name": "Pierre Berube", + "email": "pierre@lgse.com", + "homepage": "http://www.lgse.com" + } + ], + "require": { + "php": "^7.2", + "fig/http-message-util": "^1.1.2", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "ralouphie/getallheaders": "^3" + }, + "require-dev": { + "ext-json": "*", + "adriansuter/php-autoload-override": "^1.0", + "http-interop/http-factory-tests": "^0.6.0", + "php-http/psr7-integration-tests": "dev-master", + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^8.5", + "squizlabs/php_codesniffer": "^3.5" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "autoload": { + "psr-4": { + "Slim\\Psr7\\": "src" + } + }, + "autoload-dev": { + "psr-4": { + "Slim\\Tests\\Psr7\\": "tests" + } + }, + "scripts": { + "test": [ + "@phpunit", + "@phpcs", + "@phpstan" + ], + "phpunit": "phpunit", + "phpcs": "phpcs", + "phpstan": "phpstan analyse src --memory-limit=-1" + }, + "config": { + "sort-packages": true + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Cookies.php b/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Cookies.php new file mode 100644 index 0000000..db8174f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Cookies.php @@ -0,0 +1,221 @@ + '', + 'domain' => null, + 'hostonly' => null, + 'path' => null, + 'expires' => null, + 'secure' => false, + 'httponly' => false, + 'samesite' => null + ]; + + /** + * @param array $cookies + */ + public function __construct(array $cookies = []) + { + $this->requestCookies = $cookies; + } + + /** + * Set default cookie properties + * + * @param array $settings + * + * @return static + */ + public function setDefaults(array $settings): self + { + $this->defaults = array_replace($this->defaults, $settings); + + return $this; + } + + /** + * Get cookie + * + * @param string $name + * @param string|array|null $default + * @return mixed|null + */ + public function get(string $name, $default = null) + { + return array_key_exists($name, $this->requestCookies) ? $this->requestCookies[$name] : $default; + } + + /** + * Set cookie + * + * @param string $name + * @param string|array $value + * @return static + */ + public function set(string $name, $value): self + { + if (!is_array($value)) { + $value = ['value' => $value]; + } + + $this->responseCookies[$name] = array_replace($this->defaults, $value); + + return $this; + } + + /** + * Convert all response cookies into an associate array of header values + * + * @return array + */ + public function toHeaders(): array + { + $headers = []; + + foreach ($this->responseCookies as $name => $properties) { + $headers[] = $this->toHeader($name, $properties); + } + + return $headers; + } + + /** + * Convert to `Set-Cookie` header + * + * @param string $name Cookie name + * @param array $properties Cookie properties + * + * @return string + */ + protected function toHeader(string $name, array $properties): string + { + $result = urlencode($name) . '=' . urlencode($properties['value']); + + if (isset($properties['domain'])) { + $result .= '; domain=' . $properties['domain']; + } + + if (isset($properties['path'])) { + $result .= '; path=' . $properties['path']; + } + + if (isset($properties['expires'])) { + if (is_string($properties['expires'])) { + $timestamp = strtotime($properties['expires']); + } else { + $timestamp = (int) $properties['expires']; + } + if ($timestamp && $timestamp !== 0) { + $result .= '; expires=' . gmdate('D, d-M-Y H:i:s e', $timestamp); + } + } + + if (isset($properties['secure']) && $properties['secure']) { + $result .= '; secure'; + } + + if (isset($properties['hostonly']) && $properties['hostonly']) { + $result .= '; HostOnly'; + } + + if (isset($properties['httponly']) && $properties['httponly']) { + $result .= '; HttpOnly'; + } + + if (isset($properties['samesite']) && in_array(strtolower($properties['samesite']), ['lax', 'strict'], true)) { + // While strtolower is needed for correct comparison, the RFC doesn't care about case + $result .= '; SameSite=' . $properties['samesite']; + } + + return $result; + } + + /** + * Parse cookie values from header value + * + * Returns an associative array of cookie names and values + * + * @param string|array $header + * + * @return array + */ + public static function parseHeader($header): array + { + if (is_array($header)) { + $header = isset($header[0]) ? $header[0] : ''; + } + + if (!is_string($header)) { + throw new InvalidArgumentException('Cannot parse Cookie data. Header value must be a string.'); + } + + $header = rtrim($header, "\r\n"); + $pieces = preg_split('@[;]\s*@', $header); + $cookies = []; + + if (is_array($pieces)) { + foreach ($pieces as $cookie) { + $cookie = explode('=', $cookie, 2); + + if (count($cookie) === 2) { + $key = urldecode($cookie[0]); + $value = urldecode($cookie[1]); + + if (!isset($cookies[$key])) { + $cookies[$key] = $value; + } + } + } + } + + return $cookies; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Environment.php b/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Environment.php new file mode 100644 index 0000000..55f187b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Environment.php @@ -0,0 +1,55 @@ + 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', + 'HTTP_ACCEPT_CHARSET' => 'ISO-8859-1,utf-8;q=0.7,*;q=0.3', + 'HTTP_ACCEPT_LANGUAGE' => 'en-US,en;q=0.8', + 'HTTP_USER_AGENT' => 'Slim Framework', + 'QUERY_STRING' => '', + 'REMOTE_ADDR' => '127.0.0.1', + 'REQUEST_METHOD' => 'GET', + 'REQUEST_SCHEME' => $scheme, + 'REQUEST_TIME' => time(), + 'REQUEST_TIME_FLOAT' => microtime(true), + 'REQUEST_URI' => '', + 'SCRIPT_NAME' => '', + 'SERVER_NAME' => 'localhost', + 'SERVER_PORT' => $port, + 'SERVER_PROTOCOL' => 'HTTP/1.1', + ], $data); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Factory/RequestFactory.php b/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Factory/RequestFactory.php new file mode 100644 index 0000000..333af40 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Factory/RequestFactory.php @@ -0,0 +1,73 @@ +streamFactory = $streamFactory; + $this->uriFactory = $uriFactory; + } + + /** + * {@inheritdoc} + */ + public function createRequest(string $method, $uri): RequestInterface + { + if (is_string($uri)) { + $uri = $this->uriFactory->createUri($uri); + } + + if (!$uri instanceof UriInterface) { + throw new InvalidArgumentException( + 'Parameter 2 of RequestFactory::createRequest() must be a string or a compatible UriInterface.' + ); + } + + $body = $this->streamFactory->createStream(); + + return new Request($method, $uri, new Headers(), [], [], $body); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Factory/ResponseFactory.php b/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Factory/ResponseFactory.php new file mode 100644 index 0000000..c1a23a7 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Factory/ResponseFactory.php @@ -0,0 +1,35 @@ +withStatus($code, $reasonPhrase); + } + + return $res; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Factory/ServerRequestFactory.php b/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Factory/ServerRequestFactory.php new file mode 100644 index 0000000..55ffd8f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Factory/ServerRequestFactory.php @@ -0,0 +1,124 @@ +streamFactory = $streamFactory; + $this->uriFactory = $uriFactory; + } + + /** + * {@inheritdoc} + */ + public function createServerRequest(string $method, $uri, array $serverParams = []): ServerRequestInterface + { + if (is_string($uri)) { + $uri = $this->uriFactory->createUri($uri); + } + + if (!$uri instanceof UriInterface) { + throw new InvalidArgumentException('URI must either be string or instance of ' . UriInterface::class); + } + + $body = $this->streamFactory->createStream(); + $headers = new Headers(); + $cookies = []; + + if (!empty($serverParams)) { + $headers = Headers::createFromGlobals(); + $cookies = Cookies::parseHeader($headers->getHeader('Cookie', [])); + } + + return new Request($method, $uri, $headers, $cookies, $serverParams, $body); + } + + /** + * Create new ServerRequest from environment. + * + * @internal This method is not part of PSR-17 + * + * @return Request + */ + public static function createFromGlobals(): Request + { + $method = isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : 'GET'; + $uri = (new UriFactory())->createFromGlobals($_SERVER); + + $headers = Headers::createFromGlobals(); + $cookies = Cookies::parseHeader($headers->getHeader('Cookie', [])); + + // Cache the php://input stream as it cannot be re-read + $cacheResource = fopen('php://temp', 'wb+'); + $cache = $cacheResource ? new Stream($cacheResource) : null; + + $body = (new StreamFactory())->createStreamFromFile('php://input', 'r', $cache); + $uploadedFiles = UploadedFile::createFromGlobals($_SERVER); + + $request = new Request($method, $uri, $headers, $cookies, $_SERVER, $body, $uploadedFiles); + $contentTypes = $request->getHeader('Content-Type') ?? []; + + $parsedContentType = ''; + foreach ($contentTypes as $contentType) { + $fragments = explode(';', $contentType); + $parsedContentType = current($fragments); + } + + $contentTypesWithParsedBodies = ['application/x-www-form-urlencoded', 'multipart/form-data']; + if ($method === 'POST' && in_array($parsedContentType, $contentTypesWithParsedBodies)) { + return $request->withParsedBody($_POST); + } + + return $request; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Factory/StreamFactory.php b/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Factory/StreamFactory.php new file mode 100644 index 0000000..dd1d1b1 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Factory/StreamFactory.php @@ -0,0 +1,99 @@ +createStreamFromResource($resource); + } + + /** + * {@inheritdoc} + */ + public function createStreamFromFile( + string $filename, + string $mode = 'r', + StreamInterface $cache = null + ): StreamInterface { + // When fopen fails, PHP normally raises a warning. Add an error + // handler to check for errors and throw an exception instead. + $exc = null; + + set_error_handler(function (int $errno, string $errstr) use ($filename, $mode, &$exc) { + $exc = new RuntimeException(sprintf( + 'Unable to open %s using mode %s: %s', + $filename, + $mode, + $errstr + )); + }); + + $resource = fopen($filename, $mode); + restore_error_handler(); + + if ($exc) { + /** @var RuntimeException $exc */ + throw $exc; + } + + if (!is_resource($resource)) { + throw new RuntimeException( + "StreamFactory::createStreamFromFile() could not create resource from file `$filename`" + ); + } + + return new Stream($resource, $cache); + } + + /** + * {@inheritdoc} + */ + public function createStreamFromResource($resource, StreamInterface $cache = null): StreamInterface + { + if (!is_resource($resource)) { + throw new InvalidArgumentException( + 'Parameter 1 of StreamFactory::createStreamFromResource() must be a resource.' + ); + } + + return new Stream($resource, $cache); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Factory/UploadedFileFactory.php b/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Factory/UploadedFileFactory.php new file mode 100644 index 0000000..5699e96 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Factory/UploadedFileFactory.php @@ -0,0 +1,47 @@ +getMetadata('uri'); + + if (!is_string($file) || !$stream->isReadable()) { + throw new InvalidArgumentException('File is not readable.'); + } + + if ($size === null) { + $size = $stream->getSize(); + } + + return new UploadedFile($stream, $clientFilename, $clientMediaType, $size, $error); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Factory/UriFactory.php b/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Factory/UriFactory.php new file mode 100644 index 0000000..7f0a216 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Factory/UriFactory.php @@ -0,0 +1,116 @@ + 1) { + $queryString = parse_url('http://www.example.com' . $globals['REQUEST_URI'], PHP_URL_QUERY) ?? ''; + } + } + + // Build Uri and return + return new Uri($scheme, $host, $port, $requestUri, $queryString, '', $username, $password); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Header.php b/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Header.php new file mode 100644 index 0000000..70b3f04 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Header.php @@ -0,0 +1,105 @@ +originalName = $originalName; + $this->normalizedName = $normalizedName; + $this->values = $values; + } + + /** + * @return string + */ + public function getOriginalName(): string + { + return $this->originalName; + } + + /** + * @return string + */ + public function getNormalizedName(): string + { + return $this->normalizedName; + } + + /** + * @param string $value + * + * @return self + */ + public function addValue(string $value): self + { + $this->values[] = $value; + + return $this; + } + + /** + * @param array|string $values + * + * @return self + */ + public function addValues($values): self + { + if (is_string($values)) { + return $this->addValue($values); + } + + if (!is_array($values)) { + throw new InvalidArgumentException('Parameter 1 of Header::addValues() should be a string or an array.'); + } + + $this->values = array_merge($this->values, $values); + + return $this; + } + + /** + * @return array + */ + public function getValues(): array + { + return $this->values; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Headers.php b/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Headers.php new file mode 100644 index 0000000..d90f893 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Headers.php @@ -0,0 +1,313 @@ +globals = $globals ?? $_SERVER; + $this->setHeaders($headers); + } + + /** + * {@inheritdoc} + */ + public function addHeader($name, $value): HeadersInterface + { + [$values, $originalName, $normalizedName] = $this->prepareHeader($name, $value); + + if (isset($this->headers[$normalizedName])) { + $header = $this->headers[$normalizedName]; + $header->addValues($values); + } else { + $this->headers[$normalizedName] = new Header($originalName, $normalizedName, $values); + } + + return $this; + } + + /** + * {@inheritdoc} + */ + public function removeHeader(string $name): HeadersInterface + { + $name = $this->normalizeHeaderName($name); + unset($this->headers[$name]); + return $this; + } + + /** + * {@inheritdoc} + */ + public function getHeader(string $name, $default = []): array + { + $name = $this->normalizeHeaderName($name); + + if (isset($this->headers[$name])) { + $header = $this->headers[$name]; + return $header->getValues(); + } + + if (empty($default)) { + return $default; + } + + $this->validateHeader($name, $default); + return $this->trimHeaderValue($default); + } + + /** + * {@inheritdoc} + */ + public function setHeader($name, $value): HeadersInterface + { + [$values, $originalName, $normalizedName] = $this->prepareHeader($name, $value); + + // Ensure we preserve original case if the header already exists in the stack + if (isset($this->headers[$normalizedName])) { + $existingHeader = $this->headers[$normalizedName]; + $originalName = $existingHeader->getOriginalName(); + } + + $this->headers[$normalizedName] = new Header($originalName, $normalizedName, $values); + + return $this; + } + + /** + * {@inheritdoc} + */ + public function setHeaders(array $headers): HeadersInterface + { + $this->headers = []; + + foreach ($this->parseAuthorizationHeader($headers) as $name => $value) { + $this->addHeader($name, $value); + } + + return $this; + } + + /** + * {@inheritdoc} + */ + public function hasHeader(string $name): bool + { + $name = $this->normalizeHeaderName($name); + return isset($this->headers[$name]); + } + + /** + * {@inheritdoc} + */ + public function getHeaders(bool $originalCase = false): array + { + $headers = []; + + foreach ($this->headers as $header) { + $name = $originalCase ? $header->getOriginalName() : $header->getNormalizedName(); + $headers[$name] = $header->getValues(); + } + + return $headers; + } + + /** + * @param string $name + * @param bool $preserveCase + * @return string + */ + protected function normalizeHeaderName(string $name, bool $preserveCase = false): string + { + $name = strtr($name, '_', '-'); + + if (!$preserveCase) { + $name = strtolower($name); + } + + if (strpos(strtolower($name), 'http-') === 0) { + $name = substr($name, 5); + } + + return $name; + } + + /** + * Parse incoming headers and determine Authorization header from original headers + * + * @param array $headers + * @return array + */ + protected function parseAuthorizationHeader(array $headers): array + { + if (!isset($headers['Authorization'])) { + if (isset($this->globals['REDIRECT_HTTP_AUTHORIZATION'])) { + $headers['Authorization'] = $this->globals['REDIRECT_HTTP_AUTHORIZATION']; + } elseif (isset($this->globals['PHP_AUTH_USER'])) { + $pw = isset($this->globals['PHP_AUTH_PW']) ? $this->globals['PHP_AUTH_PW'] : ''; + $headers['Authorization'] = 'Basic ' . base64_encode($this->globals['PHP_AUTH_USER'] . ':' . $pw); + } elseif (isset($this->globals['PHP_AUTH_DIGEST'])) { + $headers['Authorization'] = $this->globals['PHP_AUTH_DIGEST']; + } + } + + return $headers; + } + + /** + * @param array|string $value + * + * @return array + */ + protected function trimHeaderValue($value): array + { + $items = is_array($value) ? $value : [$value]; + $result = []; + foreach ($items as $item) { + $result[] = trim((string) $item, " \t"); + } + return $result; + } + + /** + * @param string $name + * @param array|string $value + * + * @throws InvalidArgumentException + * + * @return array + */ + protected function prepareHeader($name, $value): array + { + $this->validateHeader($name, $value); + $values = $this->trimHeaderValue($value); + $originalName = $this->normalizeHeaderName($name, true); + $normalizedName = $this->normalizeHeaderName($name); + return [$values, $originalName, $normalizedName]; + } + + /** + * Make sure the header complies with RFC 7230. + * + * Header names must be a non-empty string consisting of token characters. + * + * Header values must be strings consisting of visible characters with all optional + * leading and trailing whitespace stripped. This method will always strip such + * optional whitespace. Note that the method does not allow folding whitespace within + * the values as this was deprecated for almost all instances by the RFC. + * + * header-field = field-name ":" OWS field-value OWS + * field-name = 1*( "!" / "#" / "$" / "%" / "&" / "'" / "*" / "+" / "-" / "." / "^" + * / "_" / "`" / "|" / "~" / %x30-39 / ( %x41-5A / %x61-7A ) ) + * OWS = *( SP / HTAB ) + * field-value = *( ( %x21-7E / %x80-FF ) [ 1*( SP / HTAB ) ( %x21-7E / %x80-FF ) ] ) + * + * @see https://tools.ietf.org/html/rfc7230#section-3.2.4 + * + * @param string $name + * @param array|string $value + * + * @throws InvalidArgumentException; + */ + protected function validateHeader($name, $value): void + { + $this->validateHeaderName($name); + $this->validateHeaderValue($value); + } + + /** + * @param mixed $name + * + * @throws InvalidArgumentException + */ + protected function validateHeaderName($name): void + { + if (!is_string($name) || preg_match("@^[!#$%&'*+.^_`|~0-9A-Za-z-]+$@", $name) !== 1) { + throw new InvalidArgumentException('Header name must be an RFC 7230 compatible string.'); + } + } + + /** + * @param mixed $value + * + * @throws InvalidArgumentException + */ + protected function validateHeaderValue($value): void + { + $items = is_array($value) ? $value : [$value]; + + if (empty($items)) { + throw new InvalidArgumentException( + 'Header values must be a string or an array of strings, empty array given.' + ); + } + + $pattern = "@^[ \t\x21-\x7E\x80-\xFF]*$@"; + foreach ($items as $item) { + $hasInvalidType = !is_numeric($item) && !is_string($item); + $rejected = $hasInvalidType || preg_match($pattern, (string) $item) !== 1; + if ($rejected) { + throw new InvalidArgumentException( + 'Header values must be RFC 7230 compatible strings.' + ); + } + } + } + + /** + * @return static + */ + public static function createFromGlobals() + { + $headers = null; + + if (function_exists('getallheaders')) { + $headers = getallheaders(); + } + + if (!is_array($headers)) { + $headers = []; + } + + return new static($headers); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Interfaces/HeadersInterface.php b/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Interfaces/HeadersInterface.php new file mode 100644 index 0000000..3f486f1 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Interfaces/HeadersInterface.php @@ -0,0 +1,90 @@ + true, + '1.1' => true, + '2.0' => true, + '2' => true, + ]; + + /** + * @var HeadersInterface + */ + protected $headers; + + /** + * @var StreamInterface + */ + protected $body; + + /** + * Disable magic setter to ensure immutability + * + * @param string $name The property name + * @param mixed $value The property value + * + * @return void + */ + public function __set($name, $value): void + { + // Do nothing + } + + /** + * {@inheritdoc} + */ + public function getProtocolVersion(): string + { + return $this->protocolVersion; + } + + /** + * {@inheritdoc} + */ + public function withProtocolVersion($version) + { + if (!isset(self::$validProtocolVersions[$version])) { + throw new InvalidArgumentException( + 'Invalid HTTP version. Must be one of: ' + . implode(', ', array_keys(self::$validProtocolVersions)) + ); + } + + $clone = clone $this; + $clone->protocolVersion = $version; + + return $clone; + } + + /** + * {@inheritdoc} + */ + public function getHeaders(): array + { + return $this->headers->getHeaders(true); + } + + /** + * {@inheritdoc} + */ + public function hasHeader($name): bool + { + return $this->headers->hasHeader($name); + } + + /** + * {@inheritdoc} + */ + public function getHeader($name): array + { + return $this->headers->getHeader($name); + } + + /** + * {@inheritdoc} + */ + public function getHeaderLine($name): string + { + $values = $this->headers->getHeader($name); + return implode(',', $values); + } + + /** + * {@inheritdoc} + */ + public function withHeader($name, $value) + { + $clone = clone $this; + $clone->headers->setHeader($name, $value); + + if ($this instanceof Response && $this->body instanceof NonBufferedBody) { + header(sprintf('%s: %s', $name, $clone->getHeaderLine($name))); + } + + return $clone; + } + + /** + * {@inheritdoc} + */ + public function withAddedHeader($name, $value) + { + $clone = clone $this; + $clone->headers->addHeader($name, $value); + + if ($this instanceof Response && $this->body instanceof NonBufferedBody) { + header(sprintf('%s: %s', $name, $clone->getHeaderLine($name))); + } + + return $clone; + } + + /** + * {@inheritdoc} + */ + public function withoutHeader($name) + { + $clone = clone $this; + $clone->headers->removeHeader($name); + + if ($this instanceof Response && $this->body instanceof NonBufferedBody) { + header_remove($name); + } + + return $clone; + } + + /** + * {@inheritdoc} + */ + public function getBody(): StreamInterface + { + return $this->body; + } + + /** + * {@inheritdoc} + */ + public function withBody(StreamInterface $body) + { + $clone = clone $this; + $clone->body = $body; + + return $clone; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/NonBufferedBody.php b/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/NonBufferedBody.php new file mode 100644 index 0000000..ad22c2d --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/NonBufferedBody.php @@ -0,0 +1,153 @@ +method = $this->filterMethod($method); + $this->uri = $uri; + $this->headers = $headers; + $this->cookies = $cookies; + $this->serverParams = $serverParams; + $this->attributes = []; + $this->body = $body; + $this->uploadedFiles = $uploadedFiles; + + if (isset($serverParams['SERVER_PROTOCOL'])) { + $this->protocolVersion = str_replace('HTTP/', '', $serverParams['SERVER_PROTOCOL']); + } + + if (!$this->headers->hasHeader('Host') || $this->uri->getHost() !== '') { + $this->headers->setHeader('Host', $this->uri->getHost()); + } + } + + /** + * This method is applied to the cloned object after PHP performs an initial shallow-copy. + * This method completes a deep-copy by creating new objects for the cloned object's internal reference pointers. + */ + public function __clone() + { + $this->headers = clone $this->headers; + $this->body = clone $this->body; + } + + /** + * {@inheritdoc} + */ + public function getMethod(): string + { + return $this->method; + } + + /** + * {@inheritdoc} + */ + public function withMethod($method) + { + $method = $this->filterMethod($method); + $clone = clone $this; + $clone->method = $method; + + return $clone; + } + + /** + * Validate the HTTP method + * + * @param string $method + * + * @return string + * + * @throws InvalidArgumentException on invalid HTTP method. + */ + protected function filterMethod($method): string + { + /** @var mixed $method */ + if (!is_string($method)) { + throw new InvalidArgumentException(sprintf( + 'Unsupported HTTP method; must be a string, received %s', + (is_object($method) ? get_class($method) : gettype($method)) + )); + } + + if (preg_match("/^[!#$%&'*+.^_`|~0-9a-z-]+$/i", $method) !== 1) { + throw new InvalidArgumentException(sprintf( + 'Unsupported HTTP method "%s" provided', + $method + )); + } + + return $method; + } + + /** + * {@inheritdoc} + */ + public function getRequestTarget(): string + { + if ($this->requestTarget) { + return $this->requestTarget; + } + + if ($this->uri === null) { + return '/'; + } + + $path = $this->uri->getPath(); + $path = '/' . ltrim($path, '/'); + + $query = $this->uri->getQuery(); + if ($query) { + $path .= '?' . $query; + } + + return $path; + } + + /** + * {@inheritdoc} + */ + public function withRequestTarget($requestTarget) + { + if (preg_match('#\s#', $requestTarget)) { + throw new InvalidArgumentException( + 'Invalid request target provided; must be a string and cannot contain whitespace' + ); + } + + $clone = clone $this; + $clone->requestTarget = $requestTarget; + + return $clone; + } + + /** + * {@inheritdoc} + */ + public function getUri(): UriInterface + { + return $this->uri; + } + + /** + * {@inheritdoc} + */ + public function withUri(UriInterface $uri, $preserveHost = false) + { + $clone = clone $this; + $clone->uri = $uri; + + if (!$preserveHost && $uri->getHost() !== '') { + $clone->headers->setHeader('Host', $uri->getHost()); + return $clone; + } + + if (($uri->getHost() !== '' && !$this->hasHeader('Host') || $this->getHeaderLine('Host') === '')) { + $clone->headers->setHeader('Host', $uri->getHost()); + return $clone; + } + + return $clone; + } + + /** + * {@inheritdoc} + */ + public function getCookieParams(): array + { + return $this->cookies; + } + + /** + * {@inheritdoc} + */ + public function withCookieParams(array $cookies) + { + $clone = clone $this; + $clone->cookies = $cookies; + + return $clone; + } + + /** + * {@inheritdoc} + */ + public function getQueryParams(): array + { + if (is_array($this->queryParams)) { + return $this->queryParams; + } + + if ($this->uri === null) { + return []; + } + + parse_str($this->uri->getQuery(), $this->queryParams); // <-- URL decodes data + assert(is_array($this->queryParams)); + + return $this->queryParams; + } + + /** + * {@inheritdoc} + */ + public function withQueryParams(array $query) + { + $clone = clone $this; + $clone->queryParams = $query; + + return $clone; + } + + /** + * {@inheritdoc} + */ + public function getUploadedFiles(): array + { + return $this->uploadedFiles; + } + + /** + * {@inheritdoc} + */ + public function withUploadedFiles(array $uploadedFiles) + { + $clone = clone $this; + $clone->uploadedFiles = $uploadedFiles; + + return $clone; + } + + /** + * {@inheritdoc} + */ + public function getServerParams(): array + { + return $this->serverParams; + } + + /** + * {@inheritdoc} + */ + public function getAttributes(): array + { + return $this->attributes; + } + + /** + * {@inheritdoc} + */ + public function getAttribute($name, $default = null) + { + return isset($this->attributes[$name]) ? $this->attributes[$name] : $default; + } + + /** + * {@inheritdoc} + */ + public function withAttribute($name, $value) + { + $clone = clone $this; + $clone->attributes[$name] = $value; + + return $clone; + } + + /** + * {@inheritdoc} + */ + public function withoutAttribute($name) + { + $clone = clone $this; + + unset($clone->attributes[$name]); + + return $clone; + } + + /** + * {@inheritdoc} + */ + public function getParsedBody() + { + return $this->parsedBody; + } + + /** + * {@inheritdoc} + */ + public function withParsedBody($data) + { + /** @var mixed $data */ + if (!is_null($data) && !is_object($data) && !is_array($data)) { + throw new InvalidArgumentException('Parsed body value must be an array, an object, or null'); + } + + $clone = clone $this; + $clone->parsedBody = $data; + + return $clone; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Response.php b/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Response.php new file mode 100644 index 0000000..131add1 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Response.php @@ -0,0 +1,218 @@ + 'Continue', + StatusCodeInterface::STATUS_SWITCHING_PROTOCOLS => 'Switching Protocols', + StatusCodeInterface::STATUS_PROCESSING => 'Processing', + + // Successful 2xx + StatusCodeInterface::STATUS_OK => 'OK', + StatusCodeInterface::STATUS_CREATED => 'Created', + StatusCodeInterface::STATUS_ACCEPTED => 'Accepted', + StatusCodeInterface::STATUS_NON_AUTHORITATIVE_INFORMATION => 'Non-Authoritative Information', + StatusCodeInterface::STATUS_NO_CONTENT => 'No Content', + StatusCodeInterface::STATUS_RESET_CONTENT => 'Reset Content', + StatusCodeInterface::STATUS_PARTIAL_CONTENT => 'Partial Content', + StatusCodeInterface::STATUS_MULTI_STATUS => 'Multi-Status', + StatusCodeInterface::STATUS_ALREADY_REPORTED => 'Already Reported', + StatusCodeInterface::STATUS_IM_USED => 'IM Used', + + // Redirection 3xx + StatusCodeInterface::STATUS_MULTIPLE_CHOICES => 'Multiple Choices', + StatusCodeInterface::STATUS_MOVED_PERMANENTLY => 'Moved Permanently', + StatusCodeInterface::STATUS_FOUND => 'Found', + StatusCodeInterface::STATUS_SEE_OTHER => 'See Other', + StatusCodeInterface::STATUS_NOT_MODIFIED => 'Not Modified', + StatusCodeInterface::STATUS_USE_PROXY => 'Use Proxy', + StatusCodeInterface::STATUS_RESERVED => '(Unused)', + StatusCodeInterface::STATUS_TEMPORARY_REDIRECT => 'Temporary Redirect', + StatusCodeInterface::STATUS_PERMANENT_REDIRECT => 'Permanent Redirect', + + // Client Error 4xx + StatusCodeInterface::STATUS_BAD_REQUEST => 'Bad Request', + StatusCodeInterface::STATUS_UNAUTHORIZED => 'Unauthorized', + StatusCodeInterface::STATUS_PAYMENT_REQUIRED => 'Payment Required', + StatusCodeInterface::STATUS_FORBIDDEN => 'Forbidden', + StatusCodeInterface::STATUS_NOT_FOUND => 'Not Found', + StatusCodeInterface::STATUS_METHOD_NOT_ALLOWED => 'Method Not Allowed', + StatusCodeInterface::STATUS_NOT_ACCEPTABLE => 'Not Acceptable', + StatusCodeInterface::STATUS_PROXY_AUTHENTICATION_REQUIRED => 'Proxy Authentication Required', + StatusCodeInterface::STATUS_REQUEST_TIMEOUT => 'Request Timeout', + StatusCodeInterface::STATUS_CONFLICT => 'Conflict', + StatusCodeInterface::STATUS_GONE => 'Gone', + StatusCodeInterface::STATUS_LENGTH_REQUIRED => 'Length Required', + StatusCodeInterface::STATUS_PRECONDITION_FAILED => 'Precondition Failed', + StatusCodeInterface::STATUS_PAYLOAD_TOO_LARGE => 'Request Entity Too Large', + StatusCodeInterface::STATUS_URI_TOO_LONG => 'Request-URI Too Long', + StatusCodeInterface::STATUS_UNSUPPORTED_MEDIA_TYPE => 'Unsupported Media Type', + StatusCodeInterface::STATUS_RANGE_NOT_SATISFIABLE => 'Requested Range Not Satisfiable', + StatusCodeInterface::STATUS_EXPECTATION_FAILED => 'Expectation Failed', + StatusCodeInterface::STATUS_IM_A_TEAPOT => 'I\'m a teapot', + StatusCodeInterface::STATUS_MISDIRECTED_REQUEST => 'Misdirected Request', + StatusCodeInterface::STATUS_UNPROCESSABLE_ENTITY => 'Unprocessable Entity', + StatusCodeInterface::STATUS_LOCKED => 'Locked', + StatusCodeInterface::STATUS_FAILED_DEPENDENCY => 'Failed Dependency', + StatusCodeInterface::STATUS_UPGRADE_REQUIRED => 'Upgrade Required', + StatusCodeInterface::STATUS_PRECONDITION_REQUIRED => 'Precondition Required', + StatusCodeInterface::STATUS_TOO_MANY_REQUESTS => 'Too Many Requests', + StatusCodeInterface::STATUS_REQUEST_HEADER_FIELDS_TOO_LARGE => 'Request Header Fields Too Large', + 444 => 'Connection Closed Without Response', + StatusCodeInterface::STATUS_UNAVAILABLE_FOR_LEGAL_REASONS => 'Unavailable For Legal Reasons', + 499 => 'Client Closed Request', + + // Server Error 5xx + StatusCodeInterface::STATUS_INTERNAL_SERVER_ERROR => 'Internal Server Error', + StatusCodeInterface::STATUS_NOT_IMPLEMENTED => 'Not Implemented', + StatusCodeInterface::STATUS_BAD_GATEWAY => 'Bad Gateway', + StatusCodeInterface::STATUS_SERVICE_UNAVAILABLE => 'Service Unavailable', + StatusCodeInterface::STATUS_GATEWAY_TIMEOUT => 'Gateway Timeout', + StatusCodeInterface::STATUS_VERSION_NOT_SUPPORTED => 'HTTP Version Not Supported', + StatusCodeInterface::STATUS_VARIANT_ALSO_NEGOTIATES => 'Variant Also Negotiates', + StatusCodeInterface::STATUS_INSUFFICIENT_STORAGE => 'Insufficient Storage', + StatusCodeInterface::STATUS_LOOP_DETECTED => 'Loop Detected', + StatusCodeInterface::STATUS_NOT_EXTENDED => 'Not Extended', + StatusCodeInterface::STATUS_NETWORK_AUTHENTICATION_REQUIRED => 'Network Authentication Required', + 599 => 'Network Connect Timeout Error', + ]; + + /** + * @param int $status The response status code. + * @param HeadersInterface|null $headers The response headers. + * @param StreamInterface|null $body The response body. + */ + public function __construct( + int $status = StatusCodeInterface::STATUS_OK, + ?HeadersInterface $headers = null, + ?StreamInterface $body = null + ) { + $this->status = $this->filterStatus($status); + $this->headers = $headers ? $headers : new Headers([], []); + $this->body = $body ? $body : (new StreamFactory())->createStream(); + } + + /** + * This method is applied to the cloned object after PHP performs an initial shallow-copy. + * This method completes a deep-copy by creating new objects for the cloned object's internal reference pointers. + */ + public function __clone() + { + $this->headers = clone $this->headers; + } + + /** + * {@inheritdoc} + */ + public function getStatusCode(): int + { + return $this->status; + } + + /** + * {@inheritdoc} + */ + public function withStatus($code, $reasonPhrase = '') + { + $code = $this->filterStatus($code); + $reasonPhrase = $this->filterReasonPhrase($reasonPhrase); + + $clone = clone $this; + $clone->status = $code; + $clone->reasonPhrase = $reasonPhrase; + + return $clone; + } + + /** + * {@inheritdoc} + */ + public function getReasonPhrase(): string + { + if ($this->reasonPhrase !== '') { + return $this->reasonPhrase; + } + + if (isset(static::$messages[$this->status])) { + return static::$messages[$this->status]; + } + + return ''; + } + + /** + * Filter HTTP status code. + * + * @param int $status HTTP status code. + * + * @return int + * + * @throws InvalidArgumentException If an invalid HTTP status code is provided. + */ + protected function filterStatus($status): int + { + if (!is_integer($status) || $status < StatusCodeInterface::STATUS_CONTINUE || $status > 599) { + throw new InvalidArgumentException('Invalid HTTP status code.'); + } + + return $status; + } + + /** + * Filter Reason Phrase + * + * @param mixed $reasonPhrase + * + * @return string + * + * @throws InvalidArgumentException + */ + protected function filterReasonPhrase($reasonPhrase = ''): string + { + if (is_object($reasonPhrase) && method_exists($reasonPhrase, '__toString')) { + $reasonPhrase = (string) $reasonPhrase; + } + + if (!is_string($reasonPhrase)) { + throw new InvalidArgumentException('Response reason phrase must be a string.'); + } + + return $reasonPhrase; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Stream.php b/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Stream.php new file mode 100644 index 0000000..8616989 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Stream.php @@ -0,0 +1,420 @@ +attach($stream); + + if ($cache && (!$cache->isSeekable() || !$cache->isWritable())) { + throw new RuntimeException('Cache stream must be seekable and writable'); + } + $this->cache = $cache; + } + + /** + * {@inheritdoc} + */ + public function getMetadata($key = null) + { + if (!$this->stream) { + return null; + } + + $this->meta = stream_get_meta_data($this->stream); + + if (!$key) { + return $this->meta; + } + + return isset($this->meta[$key]) ? $this->meta[$key] : null; + } + + /** + * Attach new resource to this object. + * + * @internal This method is not part of the PSR-7 standard. + * + * @param resource $stream A PHP resource handle. + * + * @throws InvalidArgumentException If argument is not a valid PHP resource. + * + * @return void + */ + protected function attach($stream): void + { + if (!is_resource($stream)) { + throw new InvalidArgumentException(__METHOD__ . ' argument must be a valid PHP resource'); + } + + if ($this->stream) { + $this->detach(); + } + + $this->stream = $stream; + } + + /** + * {@inheritdoc} + */ + public function detach() + { + $oldResource = $this->stream; + $this->stream = null; + $this->meta = null; + $this->readable = null; + $this->writable = null; + $this->seekable = null; + $this->size = null; + $this->isPipe = null; + + $this->cache = null; + $this->finished = false; + + return $oldResource; + } + + /** + * {@inheritdoc} + */ + public function __toString(): string + { + if (!$this->stream) { + return ''; + } + if ($this->cache && $this->finished) { + $this->cache->rewind(); + return $this->cache->getContents(); + } + if ($this->isSeekable()) { + $this->rewind(); + } + return $this->getContents(); + } + + /** + * {@inheritdoc} + */ + public function close(): void + { + if ($this->stream) { + if ($this->isPipe()) { + pclose($this->stream); + } else { + fclose($this->stream); + } + } + + $this->detach(); + } + + /** + * {@inheritdoc} + */ + public function getSize(): ?int + { + if ($this->stream && !$this->size) { + $stats = fstat($this->stream); + + if ($stats) { + $this->size = isset($stats['size']) && !$this->isPipe() ? $stats['size'] : null; + } + } + + return $this->size; + } + + /** + * {@inheritdoc} + */ + public function tell(): int + { + $position = false; + + if ($this->stream) { + $position = ftell($this->stream); + } + + if ($position === false || $this->isPipe()) { + throw new RuntimeException('Could not get the position of the pointer in stream.'); + } + + return $position; + } + + /** + * {@inheritdoc} + */ + public function eof(): bool + { + return $this->stream ? feof($this->stream) : true; + } + + /** + * {@inheritdoc} + */ + public function isReadable(): bool + { + if ($this->readable === null) { + if ($this->isPipe()) { + $this->readable = true; + } else { + $this->readable = false; + + if ($this->stream) { + $mode = $this->getMetadata('mode'); + + if (strstr($mode, 'r') !== false || strstr($mode, '+') !== false) { + $this->readable = true; + } + } + } + } + + return $this->readable; + } + + /** + * {@inheritdoc} + */ + public function isWritable(): bool + { + if ($this->writable === null) { + $this->writable = false; + + if ($this->stream) { + $mode = $this->getMetadata('mode'); + + if (strstr($mode, 'w') !== false || strstr($mode, '+') !== false) { + $this->writable = true; + } + } + } + + return $this->writable; + } + + /** + * {@inheritdoc} + */ + public function isSeekable(): bool + { + if ($this->seekable === null) { + $this->seekable = false; + + if ($this->stream) { + $this->seekable = !$this->isPipe() && $this->getMetadata('seekable'); + } + } + + return $this->seekable; + } + + /** + * {@inheritdoc} + */ + public function seek($offset, $whence = SEEK_SET): void + { + if (!$this->isSeekable() || $this->stream && fseek($this->stream, $offset, $whence) === -1) { + throw new RuntimeException('Could not seek in stream.'); + } + } + + /** + * {@inheritdoc} + */ + public function rewind(): void + { + if (!$this->isSeekable() || $this->stream && rewind($this->stream) === false) { + throw new RuntimeException('Could not rewind stream.'); + } + } + + /** + * {@inheritdoc} + */ + public function read($length): string + { + $data = false; + + if ($this->isReadable() && $this->stream) { + $data = fread($this->stream, $length); + } + + if (is_string($data)) { + if ($this->cache) { + $this->cache->write($data); + } + if ($this->eof()) { + $this->finished = true; + } + return $data; + } + + throw new RuntimeException('Could not read from stream.'); + } + + /** + * {@inheritdoc} + */ + public function write($string) + { + $written = false; + + if ($this->isWritable() && $this->stream) { + $written = fwrite($this->stream, $string); + } + + if ($written !== false) { + $this->size = null; + return $written; + } + + throw new RuntimeException('Could not write to stream.'); + } + + /** + * {@inheritdoc} + */ + public function getContents(): string + { + if ($this->cache && $this->finished) { + $this->cache->rewind(); + return $this->cache->getContents(); + } + + $contents = false; + + if ($this->stream) { + $contents = stream_get_contents($this->stream); + } + + if (is_string($contents)) { + if ($this->cache) { + $this->cache->write($contents); + } + if ($this->eof()) { + $this->finished = true; + } + return $contents; + } + + throw new RuntimeException('Could not get contents of stream.'); + } + + /** + * Returns whether or not the stream is a pipe. + * + * @internal This method is not part of the PSR-7 standard. + * + * @return bool + */ + public function isPipe(): bool + { + if ($this->isPipe === null) { + $this->isPipe = false; + + if ($this->stream) { + $stats = fstat($this->stream); + + if (is_array($stats)) { + $this->isPipe = isset($stats['mode']) && ($stats['mode'] & self::FSTAT_MODE_S_IFIFO) !== 0; + } + } + } + + return $this->isPipe; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/UploadedFile.php b/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/UploadedFile.php new file mode 100644 index 0000000..5c3f438 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/UploadedFile.php @@ -0,0 +1,281 @@ +getMetadata('uri'); + if (!is_string($file)) { + throw new InvalidArgumentException('No URI associated with the stream.'); + } + $this->file = $file; + $this->stream = $fileNameOrStream; + } elseif (is_string($fileNameOrStream)) { + $this->file = $fileNameOrStream; + } else { + throw new InvalidArgumentException( + 'Please provide a string (full path to the uploaded file) or an instance of StreamInterface.' + ); + } + $this->name = $name; + $this->type = $type; + $this->size = $size; + $this->error = $error; + $this->sapi = $sapi; + } + + /** + * {@inheritdoc} + */ + public function getStream() + { + if ($this->moved) { + throw new RuntimeException(sprintf('Uploaded file %s has already been moved', $this->name)); + } + + if (!$this->stream) { + $this->stream = (new StreamFactory())->createStreamFromFile($this->file); + } + + return $this->stream; + } + + /** + * {@inheritdoc} + */ + public function moveTo($targetPath): void + { + if ($this->moved) { + throw new RuntimeException('Uploaded file already moved'); + } + + $targetIsStream = strpos($targetPath, '://') > 0; + if (!$targetIsStream && !is_writable(dirname($targetPath))) { + throw new InvalidArgumentException('Upload target path is not writable'); + } + + if ($targetIsStream) { + if (!copy($this->file, $targetPath)) { + throw new RuntimeException(sprintf('Error moving uploaded file %s to %s', $this->name, $targetPath)); + } + + if (!unlink($this->file)) { + throw new RuntimeException(sprintf('Error removing uploaded file %s', $this->name)); + } + } elseif ($this->sapi) { + if (!is_uploaded_file($this->file)) { + throw new RuntimeException(sprintf('%s is not a valid uploaded file', $this->file)); + } + + if (!move_uploaded_file($this->file, $targetPath)) { + throw new RuntimeException(sprintf('Error moving uploaded file %s to %s', $this->name, $targetPath)); + } + } else { + if (!rename($this->file, $targetPath)) { + throw new RuntimeException(sprintf('Error moving uploaded file %s to %s', $this->name, $targetPath)); + } + } + + $this->moved = true; + } + + /** + * {@inheritdoc} + */ + public function getError(): int + { + return $this->error; + } + + /** + * {@inheritdoc} + */ + public function getClientFilename(): ?string + { + return $this->name; + } + + /** + * {@inheritdoc} + */ + public function getClientMediaType(): ?string + { + return $this->type; + } + + /** + * {@inheritdoc} + */ + public function getSize(): ?int + { + return $this->size; + } + + /** + * Create a normalized tree of UploadedFile instances from the Environment. + * + * @internal This method is not part of the PSR-7 standard. + * + * @param array $globals The global server variables. + * + * @return array A normalized tree of UploadedFile instances or null if none are provided. + */ + public static function createFromGlobals(array $globals): array + { + if (isset($globals['slim.files']) && is_array($globals['slim.files'])) { + return $globals['slim.files']; + } + + if (!empty($_FILES)) { + return static::parseUploadedFiles($_FILES); + } + + return []; + } + + /** + * Parse a non-normalized, i.e. $_FILES superglobal, tree of uploaded file data. + * + * @internal This method is not part of the PSR-7 standard. + * + * @param array $uploadedFiles The non-normalized tree of uploaded file data. + * + * @return array A normalized tree of UploadedFile instances. + */ + private static function parseUploadedFiles(array $uploadedFiles): array + { + $parsed = []; + foreach ($uploadedFiles as $field => $uploadedFile) { + if (!isset($uploadedFile['error'])) { + if (is_array($uploadedFile)) { + $parsed[$field] = static::parseUploadedFiles($uploadedFile); + } + continue; + } + + $parsed[$field] = []; + if (!is_array($uploadedFile['error'])) { + $parsed[$field] = new static( + $uploadedFile['tmp_name'], + isset($uploadedFile['name']) ? $uploadedFile['name'] : null, + isset($uploadedFile['type']) ? $uploadedFile['type'] : null, + isset($uploadedFile['size']) ? $uploadedFile['size'] : null, + $uploadedFile['error'], + true + ); + } else { + $subArray = []; + foreach ($uploadedFile['error'] as $fileIdx => $error) { + // Normalize sub array and re-parse to move the input's key name up a level + $subArray[$fileIdx]['name'] = $uploadedFile['name'][$fileIdx]; + $subArray[$fileIdx]['type'] = $uploadedFile['type'][$fileIdx]; + $subArray[$fileIdx]['tmp_name'] = $uploadedFile['tmp_name'][$fileIdx]; + $subArray[$fileIdx]['error'] = $uploadedFile['error'][$fileIdx]; + $subArray[$fileIdx]['size'] = $uploadedFile['size'][$fileIdx]; + + $parsed[$field] = static::parseUploadedFiles($subArray); + } + } + } + + return $parsed; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Uri.php b/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Uri.php new file mode 100644 index 0000000..cc3ce45 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/psr7/src/Uri.php @@ -0,0 +1,493 @@ +scheme = $this->filterScheme($scheme); + $this->host = $this->filterHost($host); + $this->port = $this->filterPort($port); + $this->path = $this->filterPath($path); + $this->query = $this->filterQuery($query); + $this->fragment = $this->filterFragment($fragment); + $this->user = $user; + $this->password = $password; + } + + /** + * {@inheritdoc} + */ + public function getScheme(): string + { + return $this->scheme; + } + + /** + * {@inheritdoc} + */ + public function withScheme($scheme) + { + $scheme = $this->filterScheme($scheme); + $clone = clone $this; + $clone->scheme = $scheme; + + return $clone; + } + + /** + * Filter Uri scheme. + * + * @param mixed $scheme Raw Uri scheme. + * + * @return string + * + * @throws InvalidArgumentException If the Uri scheme is not a string. + * @throws InvalidArgumentException If Uri scheme is not "", "https", or "http". + */ + protected function filterScheme($scheme): string + { + if (!is_string($scheme)) { + throw new InvalidArgumentException('Uri scheme must be a string.'); + } + + static $valid = [ + '' => true, + 'https' => true, + 'http' => true, + ]; + + $scheme = str_replace('://', '', strtolower($scheme)); + if (!isset($valid[$scheme])) { + throw new InvalidArgumentException('Uri scheme must be one of: "", "https", "http"'); + } + + return $scheme; + } + + /** + * {@inheritdoc} + */ + public function getAuthority(): string + { + $userInfo = $this->getUserInfo(); + $host = $this->getHost(); + $port = $this->getPort(); + + return ($userInfo !== '' ? $userInfo . '@' : '') . $host . ($port !== null ? ':' . $port : ''); + } + + /** + * {@inheritdoc} + */ + public function getUserInfo(): string + { + $info = $this->user; + + if (isset($this->password) && $this->password !== '') { + $info .= ':' . $this->password; + } + + return $info; + } + + /** + * {@inheritdoc} + */ + public function withUserInfo($user, $password = null) + { + $clone = clone $this; + $clone->user = $this->filterUserInfo($user); + + if ($clone->user !== '') { + $clone->password = $this->filterUserInfo($password); + } else { + $clone->password = ''; + } + + return $clone; + } + + /** + * Filters the user info string. + * + * Returns the percent-encoded query string. + * + * @param string|null $info The raw uri query string. + * + * @return string + */ + protected function filterUserInfo(?string $info = null): string + { + if (!is_string($info)) { + return ''; + } + + $match = preg_replace_callback( + '/(?:[^a-zA-Z0-9_\-\.~!\$&\'\(\)\*\+,;=]+|%(?![A-Fa-f0-9]{2}))/u', + function ($match) { + return rawurlencode($match[0]); + }, + $info + ); + + return is_string($match) ? $match : ''; + } + + /** + * {@inheritdoc} + */ + public function getHost(): string + { + return $this->host; + } + + /** + * {@inheritdoc} + */ + public function withHost($host) + { + $clone = clone $this; + $clone->host = $this->filterHost($host); + + return $clone; + } + + /** + * Filter Uri host. + * + * If the supplied host is an IPv6 address, then it is converted to a reference + * as per RFC 2373. + * + * @param mixed $host The host to filter. + * + * @return string + * + * @throws InvalidArgumentException for invalid host names. + */ + protected function filterHost($host): string + { + if (is_object($host) && method_exists($host, '__toString')) { + $host = (string) $host; + } + + if (!is_string($host)) { + throw new InvalidArgumentException('Uri host must be a string'); + } + + if (filter_var($host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) { + $host = '[' . $host . ']'; + } + + return strtolower($host); + } + + /** + * {@inheritdoc} + */ + public function getPort(): ?int + { + return $this->port && !$this->hasStandardPort() ? $this->port : null; + } + + /** + * {@inheritdoc} + */ + public function withPort($port) + { + $port = $this->filterPort($port); + $clone = clone $this; + $clone->port = $port; + + return $clone; + } + + /** + * Does this Uri use a standard port? + * + * @return bool + */ + protected function hasStandardPort(): bool + { + return ($this->scheme === 'http' && $this->port === 80) || ($this->scheme === 'https' && $this->port === 443); + } + + /** + * Filter Uri port. + * + * @param null|int $port The Uri port number. + * + * @return null|int + * + * @throws InvalidArgumentException If the port is invalid. + */ + protected function filterPort($port): ?int + { + if (is_null($port) || (is_integer($port) && ($port >= 1 && $port <= 65535))) { + return $port; + } + + throw new InvalidArgumentException('Uri port must be null or an integer between 1 and 65535 (inclusive)'); + } + + /** + * {@inheritdoc} + */ + public function getPath(): string + { + return $this->path; + } + + /** + * {@inheritdoc} + */ + public function withPath($path) + { + if (!is_string($path)) { + throw new InvalidArgumentException('Uri path must be a string'); + } + + $clone = clone $this; + $clone->path = $this->filterPath($path); + + return $clone; + } + + /** + * Filter Uri path. + * + * This method percent-encodes all reserved characters in the provided path string. + * This method will NOT double-encode characters that are already percent-encoded. + * + * @param string $path The raw uri path. + * + * @return string The RFC 3986 percent-encoded uri path. + * + * @link http://www.faqs.org/rfcs/rfc3986.html + */ + protected function filterPath($path): string + { + $match = preg_replace_callback( + '/(?:[^a-zA-Z0-9_\-\.~:@&=\+\$,\/;%]+|%(?![A-Fa-f0-9]{2}))/', + function ($match) { + return rawurlencode($match[0]); + }, + $path + ); + + return is_string($match) ? $match : ''; + } + + /** + * {@inheritdoc} + */ + public function getQuery(): string + { + return $this->query; + } + + /** + * {@inheritdoc} + */ + public function withQuery($query) + { + $query = ltrim($this->filterQuery($query), '?'); + $clone = clone $this; + $clone->query = $query; + + return $clone; + } + + /** + * Filters the query string of a URI. + * + * Returns the percent-encoded query string. + * + * @param mixed $query The raw uri query string. + * + * @return string + */ + protected function filterQuery($query): string + { + if (is_object($query) && method_exists($query, '__toString')) { + $query = (string) $query; + } + + if (!is_string($query)) { + throw new InvalidArgumentException('Uri query must be a string.'); + } + + $match = preg_replace_callback( + '/(?:[^a-zA-Z0-9_\-\.~!\$&\'\(\)\*\+,;=%:@\/\?]+|%(?![A-Fa-f0-9]{2}))/', + function ($match) { + return rawurlencode($match[0]); + }, + $query + ); + + return is_string($match) ? $match : ''; + } + + /** + * {@inheritdoc} + */ + public function getFragment(): string + { + return $this->fragment; + } + + /** + * {@inheritdoc} + */ + public function withFragment($fragment) + { + $fragment = $this->filterFragment($fragment); + $clone = clone $this; + $clone->fragment = $fragment; + + return $clone; + } + + /** + * Filters fragment of a URI. + * + * Returns the percent-encoded fragment. + * + * @param mixed $fragment The raw uri query string. + * + * @return string + */ + protected function filterFragment($fragment): string + { + if (is_object($fragment) && method_exists($fragment, '__toString')) { + $fragment = (string) $fragment; + } + + if (!is_string($fragment)) { + throw new InvalidArgumentException('Uri fragment must be a string.'); + } + + $fragment = ltrim($fragment, '#'); + + $match = preg_replace_callback( + '/(?:[^a-zA-Z0-9_\-\.~!\$&\'\(\)\*\+,;=%:@\/\?]+|%(?![A-Fa-f0-9]{2}))/', + function ($match) { + return rawurlencode($match[0]); + }, + $fragment + ); + + return is_string($match) ? $match : ''; + } + + /** + * {@inheritdoc} + */ + public function __toString(): string + { + $scheme = $this->getScheme(); + $authority = $this->getAuthority(); + $path = $this->getPath(); + $query = $this->getQuery(); + $fragment = $this->getFragment(); + + $path = '/' . ltrim($path, '/'); + + return ($scheme !== '' ? $scheme . ':' : '') + . ($authority !== '' ? '//' . $authority : '') + . $path + . ($query !== '' ? '?' . $query : '') + . ($fragment !== '' ? '#' . $fragment : ''); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/CHANGELOG.md b/soc/2020/daily_report/archive/app/vendor/slim/slim/CHANGELOG.md new file mode 100644 index 0000000..88c6c7d --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/CHANGELOG.md @@ -0,0 +1,96 @@ +# Changelog + +## 4.5.0 - 2020-04-14 + +### Added +- [2928](https://github.com/slimphp/Slim/pull/2928) Test against PHP 7.4 +- [2937](https://github.com/slimphp/Slim/pull/2937) Add support for PSR-3 + +### Fixed +- [2916](https://github.com/slimphp/Slim/pull/2916) Rename phpcs.xml to phpcs.xml.dist +- [2917](https://github.com/slimphp/Slim/pull/2917) Update .editorconfig +- [2925](https://github.com/slimphp/Slim/pull/2925) ResponseEmitter: Don't remove Content-Type and Content-Length when body is empt +- [2932](https://github.com/slimphp/Slim/pull/2932) Update the Tidelift enterprise language +- [2938](https://github.com/slimphp/Slim/pull/2938) Modify usage of deprecated expectExceptionMessageRegExp() method + +## 4.4.0 - 2020-01-04 + +### Added +- [2862](https://github.com/slimphp/Slim/pull/2862) Optionally handle subclasses of exceptions in custom error handler +- [2869](https://github.com/slimphp/Slim/pull/2869) php-di/php-di added in composer suggestion +- [2874](https://github.com/slimphp/Slim/pull/2874) Add `null` to param type-hints +- [2889](https://github.com/slimphp/Slim/pull/2889) Make `RouteContext` attributes customizable and change default to use private names +- [2907](https://github.com/slimphp/Slim/pull/2907) Migrate to PSR-12 convention +- [2910](https://github.com/slimphp/Slim/pull/2910) Migrate Zend to Laminas +- [2912](https://github.com/slimphp/Slim/pull/2912) Add Laminas PSR17 Factory +- [2913](https://github.com/slimphp/Slim/pull/2913) Update php-autoload-override version +- [2914](https://github.com/slimphp/Slim/pull/2914) Added ability to add handled exceptions as an array + +### Fixed +- [2864](https://github.com/slimphp/Slim/pull/2864) Optimize error message in error handling if displayErrorDetails was not set +- [2876](https://github.com/slimphp/Slim/pull/2876) Update links from http to https +- [2877](https://github.com/slimphp/Slim/pull/2877) Fix docblock for `Slim\Routing\RouteCollector::cacheFile` +- [2878](https://github.com/slimphp/Slim/pull/2878) check body is writable only on ouput buffering append +- [2896](https://github.com/slimphp/Slim/pull/2896) Render errors uniformly +- [2902](https://github.com/slimphp/Slim/pull/2902) Fix prophecies +- [2908](https://github.com/slimphp/Slim/pull/2908) Use autoload-dev for `Slim\Tests` namespace + +### Removed +- [2871](https://github.com/slimphp/Slim/pull/2871) Remove explicit type-hint +- [2872](https://github.com/slimphp/Slim/pull/2872) Remove type-hint + +## 4.3.0 - 2019-10-05 + +### Added +- [2819](https://github.com/slimphp/Slim/pull/2819) Added description to addRoutingMiddleware() +- [2820](https://github.com/slimphp/Slim/pull/2820) Update link to homepage in composer.json +- [2828](https://github.com/slimphp/Slim/pull/2828) Allow URIs with leading multi-slashes +- [2832](https://github.com/slimphp/Slim/pull/2832) Refactor `FastRouteDispatcher` +- [2835](https://github.com/slimphp/Slim/pull/2835) Rename `pathFor` to `urlFor` in docblock +- [2846](https://github.com/slimphp/Slim/pull/2846) Correcting the branch name as per issue-2843 +- [2849](https://github.com/slimphp/Slim/pull/2849) Create class alias for FastRoute\RouteCollector +- [2855](https://github.com/slimphp/Slim/pull/2855) Add list of allowed methods to HttpMethodNotAllowedException +- [2860](https://github.com/slimphp/Slim/pull/2860) Add base path to `$request` and use `RouteContext` to read + +### Fixed +- [2839](https://github.com/slimphp/Slim/pull/2839) Fix description for handler signature in phpdocs +- [2844](https://github.com/slimphp/Slim/pull/2844) Handle base path by routeCollector instead of RouteCollectorProxy +- [2845](https://github.com/slimphp/Slim/pull/2845) Fix composer scripts +- [2851](https://github.com/slimphp/Slim/pull/2851) Fix example of 'Hello World' app +- [2854](https://github.com/slimphp/Slim/pull/2854) Fix undefined property in tests + +### Removed +- [2853](https://github.com/slimphp/Slim/pull/2853) Remove unused classes + +## 4.2.0 - 2019-08-20 + +### Added +- [2787](https://github.com/slimphp/Slim/pull/2787) Add an advanced callable resolver +- [2791](https://github.com/slimphp/Slim/pull/2791) Add `inferPrivatePropertyTypeFromConstructor` to phpstan +- [2793](https://github.com/slimphp/Slim/pull/2793) Add ability to configure application via a container in `AppFactory` +- [2798](https://github.com/slimphp/Slim/pull/2798) Add PSR-7 Agnostic Body Parsing Middleware +- [2801](https://github.com/slimphp/Slim/pull/2801) Add `setLogErrorRenderer()` method to `ErrorHandler` +- [2807](https://github.com/slimphp/Slim/pull/2807) Add check for Slim callable notation if no resolver given +- [2803](https://github.com/slimphp/Slim/pull/2803) Add ability to emit non seekable streams in `ResponseEmitter` +- [2817](https://github.com/slimphp/Slim/pull/2817) Add the ability to pass in a custom `MiddlewareDispatcherInterface` to the `App` + +### Fixed +- [2789](https://github.com/slimphp/Slim/pull/2789) Fix Cookie header detection in `ResponseEmitter` +- [2796](https://github.com/slimphp/Slim/pull/2796) Fix http message format +- [2800](https://github.com/slimphp/Slim/pull/2800) Fix null comparisons more clear in `ErrorHandler` +- [2802](https://github.com/slimphp/Slim/pull/2802) Fix incorrect search of a header in stack +- [2806](https://github.com/slimphp/Slim/pull/2806) Simplify `Route::prepare()` method argument preparation +- [2809](https://github.com/slimphp/Slim/pull/2809) Eliminate a duplicate code via HOF in `MiddlewareDispatcher` +- [2816](https://github.com/slimphp/Slim/pull/2816) Fix RouteCollectorProxy::redirect() bug + +### Removed +- [2811](https://github.com/slimphp/Slim/pull/2811) Remove `DeferredCallable` + +## 4.1.0 - 2019-08-06 + +### Added +- [#2779](https://github.com/slimphp/Slim/pull/2774) Add support for Slim callables `Class:method` resolution & Container Closure auto-binding in `MiddlewareDispatcher` +- [#2774](https://github.com/slimphp/Slim/pull/2774) Add possibility for custom `RequestHandler` invocation strategies + +### Fixed +- [#2776](https://github.com/slimphp/Slim/pull/2774) Fix group middleware on multiple nested groups diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/LICENSE.md b/soc/2020/daily_report/archive/app/vendor/slim/slim/LICENSE.md new file mode 100644 index 0000000..682c21d --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/LICENSE.md @@ -0,0 +1,19 @@ +Copyright (c) 2011-2017 Josh Lockhart + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/MAINTAINERS.md b/soc/2020/daily_report/archive/app/vendor/slim/slim/MAINTAINERS.md new file mode 100644 index 0000000..2b8ad04 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/MAINTAINERS.md @@ -0,0 +1,17 @@ +# Maintainers + +There aren't many rules for maintainers of Slim to remember; what we have is listed here. + +## We don't merge our own PRs + +Our code is better if more than one set of eyes looks at it. Therefore we do not merge our own pull requests unless there is an exceptional circumstance. This helps to spot errors in the patch and also enables us to share information about the project around the maintainer team. + +## PRs tagged `WIP` are not ready to be merged + +Sometimes it's helpful to collaborate on a patch before it's ready to be merged. We use the text `WIP` (for _Work in Progress_) in the title to mark these PRs. + +If a PR has `WIP` in its title, then it is not to be merged. The person who raised the PR will remove the `WIP` text when they are ready for a full review and merge. + +## Assign a merged PR to a milestone + +By ensuring that all merged PRs are assigned to a milestone, we can easily find which PRs were in which release. diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/App.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/App.php new file mode 100644 index 0000000..7f3e166 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/App.php @@ -0,0 +1,232 @@ +routeResolver = $routeResolver ?? new RouteResolver($this->routeCollector); + $routeRunner = new RouteRunner($this->routeResolver, $this->routeCollector->getRouteParser(), $this); + + if (!$middlewareDispatcher) { + $middlewareDispatcher = new MiddlewareDispatcher($routeRunner, $this->callableResolver, $container); + } else { + $middlewareDispatcher->seedMiddlewareStack($routeRunner); + } + + $this->middlewareDispatcher = $middlewareDispatcher; + } + + /** + * @return RouteResolverInterface + */ + public function getRouteResolver(): RouteResolverInterface + { + return $this->routeResolver; + } + + /** + * @return MiddlewareDispatcherInterface + */ + public function getMiddlewareDispatcher(): MiddlewareDispatcherInterface + { + return $this->middlewareDispatcher; + } + + /** + * @param MiddlewareInterface|string|callable $middleware + * @return self + */ + public function add($middleware): self + { + $this->middlewareDispatcher->add($middleware); + return $this; + } + + /** + * @param MiddlewareInterface $middleware + * @return self + */ + public function addMiddleware(MiddlewareInterface $middleware): self + { + $this->middlewareDispatcher->addMiddleware($middleware); + return $this; + } + + /** + * Add the Slim built-in routing middleware to the app middleware stack + * + * This method can be used to control middleware order and is not required for default routing operation. + * + * @return RoutingMiddleware + */ + public function addRoutingMiddleware(): RoutingMiddleware + { + $routingMiddleware = new RoutingMiddleware( + $this->getRouteResolver(), + $this->getRouteCollector()->getRouteParser() + ); + $this->add($routingMiddleware); + return $routingMiddleware; + } + + /** + * Add the Slim built-in error middleware to the app middleware stack + * + * @param bool $displayErrorDetails + * @param bool $logErrors + * @param bool $logErrorDetails + * @param LoggerInterface|null $logger + * + * @return ErrorMiddleware + */ + public function addErrorMiddleware( + bool $displayErrorDetails, + bool $logErrors, + bool $logErrorDetails, + ?LoggerInterface $logger = null + ): ErrorMiddleware { + $errorMiddleware = new ErrorMiddleware( + $this->getCallableResolver(), + $this->getResponseFactory(), + $displayErrorDetails, + $logErrors, + $logErrorDetails, + $logger + ); + $this->add($errorMiddleware); + return $errorMiddleware; + } + + /** + * Add the Slim body parsing middleware to the app middleware stack + * + * @param callable[] $bodyParsers + * + * @return BodyParsingMiddleware + */ + public function addBodyParsingMiddleware(array $bodyParsers = []): BodyParsingMiddleware + { + $bodyParsingMiddleware = new BodyParsingMiddleware($bodyParsers); + $this->add($bodyParsingMiddleware); + return $bodyParsingMiddleware; + } + + /** + * Run application + * + * This method traverses the application middleware stack and then sends the + * resultant Response object to the HTTP client. + * + * @param ServerRequestInterface|null $request + * @return void + */ + public function run(?ServerRequestInterface $request = null): void + { + if (!$request) { + $serverRequestCreator = ServerRequestCreatorFactory::create(); + $request = $serverRequestCreator->createServerRequestFromGlobals(); + } + + $response = $this->handle($request); + $responseEmitter = new ResponseEmitter(); + $responseEmitter->emit($response); + } + + /** + * Handle a request + * + * This method traverses the application middleware stack and then returns the + * resultant Response object. + * + * @param ServerRequestInterface $request + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + $response = $this->middlewareDispatcher->handle($request); + + /** + * This is to be in compliance with RFC 2616, Section 9. + * If the incoming request method is HEAD, we need to ensure that the response body + * is empty as the request may fall back on a GET route handler due to FastRoute's + * routing logic which could potentially append content to the response body + * https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.4 + */ + $method = strtoupper($request->getMethod()); + if ($method === 'HEAD') { + $emptyBody = $this->responseFactory->createResponse()->getBody(); + return $response->withBody($emptyBody); + } + + return $response; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/CallableResolver.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/CallableResolver.php new file mode 100644 index 0000000..91a1285 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/CallableResolver.php @@ -0,0 +1,189 @@ +container = $container; + } + + /** + * {@inheritdoc} + */ + public function resolve($toResolve): callable + { + if (is_callable($toResolve)) { + return $this->bindToContainer($toResolve); + } + $resolved = $toResolve; + if (is_string($toResolve)) { + $resolved = $this->resolveSlimNotation($toResolve); + $resolved[1] = $resolved[1] ?? '__invoke'; + } + $callable = $this->assertCallable($resolved, $toResolve); + return $this->bindToContainer($callable); + } + + /** + * {@inheritdoc} + */ + public function resolveRoute($toResolve): callable + { + return $this->resolveByPredicate($toResolve, [$this, 'isRoute'], 'handle'); + } + + /** + * {@inheritdoc} + */ + public function resolveMiddleware($toResolve): callable + { + return $this->resolveByPredicate($toResolve, [$this, 'isMiddleware'], 'process'); + } + + /** + * @param string|callable $toResolve + * @param callable $predicate + * @param string $defaultMethod + * + * @throws RuntimeException + * + * @return callable + */ + private function resolveByPredicate($toResolve, callable $predicate, string $defaultMethod): callable + { + if (is_callable($toResolve)) { + return $this->bindToContainer($toResolve); + } + $resolved = $toResolve; + if ($predicate($toResolve)) { + $resolved = [$toResolve, $defaultMethod]; + } + if (is_string($toResolve)) { + [$instance, $method] = $this->resolveSlimNotation($toResolve); + if ($predicate($instance) && $method === null) { + $method = $defaultMethod; + } + $resolved = [$instance, $method ?? '__invoke']; + } + $callable = $this->assertCallable($resolved, $toResolve); + return $this->bindToContainer($callable); + } + + /** + * @param mixed $toResolve + * + * @return bool + */ + private function isRoute($toResolve): bool + { + return $toResolve instanceof RequestHandlerInterface; + } + + /** + * @param mixed $toResolve + * + * @return bool + */ + private function isMiddleware($toResolve): bool + { + return $toResolve instanceof MiddlewareInterface; + } + + /** + * @param string $toResolve + * + * @throws RuntimeException + * + * @return array [Instance, Method Name] + */ + private function resolveSlimNotation(string $toResolve): array + { + preg_match(CallableResolver::$callablePattern, $toResolve, $matches); + [$class, $method] = $matches ? [$matches[1], $matches[2]] : [$toResolve, null]; + + if ($this->container && $this->container->has($class)) { + $instance = $this->container->get($class); + } else { + if (!class_exists($class)) { + throw new RuntimeException(sprintf('Callable %s does not exist', $class)); + } + $instance = new $class($this->container); + } + return [$instance, $method]; + } + + /** + * @param mixed $resolved + * @param mixed $toResolve + * + * @throws RuntimeException + * + * @return callable + */ + private function assertCallable($resolved, $toResolve): callable + { + if (!is_callable($resolved)) { + throw new RuntimeException(sprintf( + '%s is not resolvable', + is_callable($toResolve) || is_object($toResolve) || is_array($toResolve) ? + json_encode($toResolve) : $toResolve + )); + } + return $resolved; + } + + /** + * @param callable $callable + * + * @return callable + */ + private function bindToContainer(callable $callable): callable + { + if (is_array($callable) && $callable[0] instanceof Closure) { + $callable = $callable[0]; + } + if ($this->container && $callable instanceof Closure) { + $callable = $callable->bindTo($this->container); + } + return $callable; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Error/AbstractErrorRenderer.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Error/AbstractErrorRenderer.php new file mode 100644 index 0000000..1f60830 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Error/AbstractErrorRenderer.php @@ -0,0 +1,52 @@ +getTitle(); + } + + return $this->defaultErrorTitle; + } + + protected function getErrorDescription(Throwable $exception): string + { + if ($exception instanceof HttpException) { + return $exception->getDescription(); + } + + return $this->defaultErrorDescription; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Error/Renderers/HtmlErrorRenderer.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Error/Renderers/HtmlErrorRenderer.php new file mode 100644 index 0000000..971a06b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Error/Renderers/HtmlErrorRenderer.php @@ -0,0 +1,109 @@ +The application could not run because of the following error:

    '; + $html .= '

    Details

    '; + $html .= $this->renderExceptionFragment($exception); + } else { + $html = "

    {$this->getErrorDescription($exception)}

    "; + } + + return $this->renderHtmlBody($this->getErrorTitle($exception), $html); + } + + /** + * @param Throwable $exception + * @return string + */ + private function renderExceptionFragment(Throwable $exception): string + { + $html = sprintf('
    Type: %s
    ', get_class($exception)); + + $code = $exception->getCode(); + if ($code !== null) { + $html .= sprintf('
    Code: %s
    ', $code); + } + + $message = $exception->getMessage(); + if ($message !== null) { + $html .= sprintf('
    Message: %s
    ', htmlentities($message)); + } + + $file = $exception->getFile(); + if ($file !== null) { + $html .= sprintf('
    File: %s
    ', $file); + } + + $line = $exception->getLine(); + if ($line !== null) { + $html .= sprintf('
    Line: %s
    ', $line); + } + + $trace = $exception->getTraceAsString(); + if ($trace !== null) { + $html .= '

    Trace

    '; + $html .= sprintf('
    %s
    ', htmlentities($trace)); + } + + return $html; + } + + /** + * @param string $title + * @param string $html + * @return string + */ + public function renderHtmlBody(string $title = '', string $html = ''): string + { + return sprintf( + '' . + ' ' . + " " . + ' %s' . + ' ' . + ' ' . + ' ' . + '

    %s

    ' . + '
    %s
    ' . + ' Go Back' . + ' ' . + '', + $title, + $title, + $html + ); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Error/Renderers/JsonErrorRenderer.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Error/Renderers/JsonErrorRenderer.php new file mode 100644 index 0000000..5ceb359 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Error/Renderers/JsonErrorRenderer.php @@ -0,0 +1,60 @@ + $this->getErrorTitle($exception)]; + + if ($displayErrorDetails) { + $error['exception'] = []; + do { + $error['exception'][] = $this->formatExceptionFragment($exception); + } while ($exception = $exception->getPrevious()); + } + + return (string) json_encode($error, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); + } + + /** + * @param Throwable $exception + * @return array + */ + private function formatExceptionFragment(Throwable $exception): array + { + return [ + 'type' => get_class($exception), + 'code' => $exception->getCode(), + 'message' => $exception->getMessage(), + 'file' => $exception->getFile(), + 'line' => $exception->getLine(), + ]; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Error/Renderers/PlainTextErrorRenderer.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Error/Renderers/PlainTextErrorRenderer.php new file mode 100644 index 0000000..0b961cd --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Error/Renderers/PlainTextErrorRenderer.php @@ -0,0 +1,81 @@ +getErrorTitle($exception)}\n"; + + if ($displayErrorDetails) { + $text .= $this->formatExceptionFragment($exception); + + while ($exception = $exception->getPrevious()) { + $text .= "\nPrevious Error:\n"; + $text .= $this->formatExceptionFragment($exception); + } + } + + return $text; + } + + /** + * @param Throwable $exception + * @return string + */ + private function formatExceptionFragment(Throwable $exception): string + { + $text = sprintf("Type: %s\n", get_class($exception)); + + $code = $exception->getCode(); + if ($code !== null) { + $text .= sprintf("Code: %s\n", $code); + } + + $message = $exception->getMessage(); + if ($message !== null) { + $text .= sprintf("Message: %s\n", htmlentities($message)); + } + + $file = $exception->getFile(); + if ($file !== null) { + $text .= sprintf("File: %s\n", $file); + } + + $line = $exception->getLine(); + if ($line !== null) { + $text .= sprintf("Line: %s\n", $line); + } + + $trace = $exception->getTraceAsString(); + if ($trace !== null) { + $text .= sprintf('Trace: %s', $trace); + } + + return $text; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Error/Renderers/XmlErrorRenderer.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Error/Renderers/XmlErrorRenderer.php new file mode 100644 index 0000000..80cd8f9 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Error/Renderers/XmlErrorRenderer.php @@ -0,0 +1,62 @@ +\n"; + $xml .= "\n " . $this->createCdataSection($this->getErrorTitle($exception)) . "\n"; + + if ($displayErrorDetails) { + do { + $xml .= " \n"; + $xml .= ' ' . get_class($exception) . "\n"; + $xml .= ' ' . $exception->getCode() . "\n"; + $xml .= ' ' . $this->createCdataSection($exception->getMessage()) . "\n"; + $xml .= ' ' . $exception->getFile() . "\n"; + $xml .= ' ' . $exception->getLine() . "\n"; + $xml .= " \n"; + } while ($exception = $exception->getPrevious()); + } + + $xml .= ''; + + return $xml; + } + + /** + * Returns a CDATA section with the given content. + * + * @param string $content + * @return string + */ + private function createCdataSection(string $content): string + { + return sprintf('', str_replace(']]>', ']]]]>', $content)); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Exception/HttpBadRequestException.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Exception/HttpBadRequestException.php new file mode 100644 index 0000000..a9b6f50 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Exception/HttpBadRequestException.php @@ -0,0 +1,19 @@ +request = $request; + } + + /** + * @return ServerRequestInterface + */ + public function getRequest(): ServerRequestInterface + { + return $this->request; + } + + /** + * @return string + */ + public function getTitle(): string + { + return $this->title; + } + + /** + * @param string $title + * @return self + */ + public function setTitle(string $title): self + { + $this->title = $title; + return $this; + } + + /** + * @return string + */ + public function getDescription(): string + { + return $this->description; + } + + /** + * @param string $description + * @return self + */ + public function setDescription(string $description): self + { + $this->description = $description; + return $this; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Exception/HttpForbiddenException.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Exception/HttpForbiddenException.php new file mode 100644 index 0000000..9a9141e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Exception/HttpForbiddenException.php @@ -0,0 +1,19 @@ +allowedMethods; + } + + /** + * @param array $methods + * @return self + */ + public function setAllowedMethods(array $methods): HttpMethodNotAllowedException + { + $this->allowedMethods = $methods; + $this->message = 'Method not allowed. Must be one of: ' . implode(', ', $methods); + return $this; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Exception/HttpNotFoundException.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Exception/HttpNotFoundException.php new file mode 100644 index 0000000..c4b7c9d --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Exception/HttpNotFoundException.php @@ -0,0 +1,19 @@ +message = $message; + } + + parent::__construct($request, $this->message, $this->code, $previous); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Exception/HttpUnauthorizedException.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Exception/HttpUnauthorizedException.php new file mode 100644 index 0000000..5f143fe --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Exception/HttpUnauthorizedException.php @@ -0,0 +1,19 @@ +has(ResponseFactoryInterface::class) + ? $container->get(ResponseFactoryInterface::class) + : self::determineResponseFactory(); + + $callableResolver = $container->has(CallableResolverInterface::class) + ? $container->get(CallableResolverInterface::class) + : null; + + $routeCollector = $container->has(RouteCollectorInterface::class) + ? $container->get(RouteCollectorInterface::class) + : null; + + $routeResolver = $container->has(RouteResolverInterface::class) + ? $container->get(RouteResolverInterface::class) + : null; + + $middlewareDispatcher = $container->has(MiddlewareDispatcherInterface::class) + ? $container->get(MiddlewareDispatcherInterface::class) + : null; + + return new App( + $responseFactory, + $container, + $callableResolver, + $routeCollector, + $routeResolver, + $middlewareDispatcher + ); + } + + /** + * @return ResponseFactoryInterface + * @throws RuntimeException + */ + public static function determineResponseFactory(): ResponseFactoryInterface + { + if (static::$responseFactory) { + if (static::$streamFactory) { + return static::attemptResponseFactoryDecoration(static::$responseFactory, static::$streamFactory); + } + return static::$responseFactory; + } + + $psr17FactoryProvider = static::$psr17FactoryProvider ?? new Psr17FactoryProvider(); + + /** @var Psr17Factory $psr17factory */ + foreach ($psr17FactoryProvider->getFactories() as $psr17factory) { + if ($psr17factory::isResponseFactoryAvailable()) { + $responseFactory = $psr17factory::getResponseFactory(); + + if ($psr17factory::isStreamFactoryAvailable() || static::$streamFactory) { + $streamFactory = static::$streamFactory ?? $psr17factory::getStreamFactory(); + return static::attemptResponseFactoryDecoration($responseFactory, $streamFactory); + } + + return $responseFactory; + } + } + + throw new RuntimeException( + "Could not detect any PSR-17 ResponseFactory implementations. " . + "Please install a supported implementation in order to use `AppFactory::create()`. " . + "See https://github.com/slimphp/Slim/blob/4.x/README.md for a list of supported implementations." + ); + } + + /** + * @param ResponseFactoryInterface $responseFactory + * @param StreamFactoryInterface $streamFactory + * @return ResponseFactoryInterface + */ + protected static function attemptResponseFactoryDecoration( + ResponseFactoryInterface $responseFactory, + StreamFactoryInterface $streamFactory + ): ResponseFactoryInterface { + if ( + static::$slimHttpDecoratorsAutomaticDetectionEnabled + && SlimHttpPsr17Factory::isResponseFactoryAvailable() + ) { + return SlimHttpPsr17Factory::createDecoratedResponseFactory($responseFactory, $streamFactory); + } + + return $responseFactory; + } + + /** + * @param Psr17FactoryProviderInterface $psr17FactoryProvider + */ + public static function setPsr17FactoryProvider(Psr17FactoryProviderInterface $psr17FactoryProvider): void + { + static::$psr17FactoryProvider = $psr17FactoryProvider; + } + + /** + * @param ResponseFactoryInterface $responseFactory + */ + public static function setResponseFactory(ResponseFactoryInterface $responseFactory): void + { + static::$responseFactory = $responseFactory; + } + + /** + * @param StreamFactoryInterface $streamFactory + */ + public static function setStreamFactory(StreamFactoryInterface $streamFactory): void + { + static::$streamFactory = $streamFactory; + } + + /** + * @param ContainerInterface $container + */ + public static function setContainer(ContainerInterface $container): void + { + static::$container = $container; + } + + /** + * @param CallableResolverInterface $callableResolver + */ + public static function setCallableResolver(CallableResolverInterface $callableResolver): void + { + static::$callableResolver = $callableResolver; + } + + /** + * @param RouteCollectorInterface $routeCollector + */ + public static function setRouteCollector(RouteCollectorInterface $routeCollector): void + { + static::$routeCollector = $routeCollector; + } + + /** + * @param RouteResolverInterface $routeResolver + */ + public static function setRouteResolver(RouteResolverInterface $routeResolver): void + { + static::$routeResolver = $routeResolver; + } + + /** + * @param MiddlewareDispatcherInterface $middlewareDispatcher + */ + public static function setMiddlewareDispatcher(MiddlewareDispatcherInterface $middlewareDispatcher): void + { + static::$middlewareDispatcher = $middlewareDispatcher; + } + + /** + * @param bool $enabled + */ + public static function setSlimHttpDecoratorsAutomaticDetection(bool $enabled): void + { + static::$slimHttpDecoratorsAutomaticDetectionEnabled = $enabled; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Factory/Psr17/GuzzlePsr17Factory.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Factory/Psr17/GuzzlePsr17Factory.php new file mode 100644 index 0000000..8ac7702 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Factory/Psr17/GuzzlePsr17Factory.php @@ -0,0 +1,19 @@ +serverRequestCreator = $serverRequestCreator; + $this->serverRequestCreatorMethod = $serverRequestCreatorMethod; + } + + /** + * {@inheritdoc} + */ + public function createServerRequestFromGlobals(): ServerRequestInterface + { + /** @var callable $callable */ + $callable = [$this->serverRequestCreator, $this->serverRequestCreatorMethod]; + return (Closure::fromCallable($callable))(); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Factory/Psr17/SlimHttpPsr17Factory.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Factory/Psr17/SlimHttpPsr17Factory.php new file mode 100644 index 0000000..193b866 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Factory/Psr17/SlimHttpPsr17Factory.php @@ -0,0 +1,31 @@ +serverRequestCreator = $serverRequestCreator; + } + + /** + * {@inheritdoc} + */ + public function createServerRequestFromGlobals(): ServerRequestInterface + { + if (!static::isServerRequestDecoratorAvailable()) { + throw new RuntimeException('The Slim-Http ServerRequest decorator is not available.'); + } + + $request = $this->serverRequestCreator->createServerRequestFromGlobals(); + + return new static::$serverRequestDecoratorClass($request); + } + + /** + * @return bool + */ + public static function isServerRequestDecoratorAvailable(): bool + { + return class_exists(static::$serverRequestDecoratorClass); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Factory/Psr17/SlimPsr17Factory.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Factory/Psr17/SlimPsr17Factory.php new file mode 100644 index 0000000..8de6de9 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Factory/Psr17/SlimPsr17Factory.php @@ -0,0 +1,19 @@ +getFactories() as $psr17Factory) { + if ($psr17Factory::isServerRequestCreatorAvailable()) { + $serverRequestCreator = $psr17Factory::getServerRequestCreator(); + return static::attemptServerRequestCreatorDecoration($serverRequestCreator); + } + } + + throw new RuntimeException( + "Could not detect any ServerRequest creator implementations. " . + "Please install a supported implementation in order to use `App::run()` " . + "without having to pass in a `ServerRequest` object. " . + "See https://github.com/slimphp/Slim/blob/4.x/README.md for a list of supported implementations." + ); + } + + /** + * @param ServerRequestCreatorInterface $serverRequestCreator + * @return ServerRequestCreatorInterface + */ + protected static function attemptServerRequestCreatorDecoration( + ServerRequestCreatorInterface $serverRequestCreator + ): ServerRequestCreatorInterface { + if ( + static::$slimHttpDecoratorsAutomaticDetectionEnabled + && SlimHttpServerRequestCreator::isServerRequestDecoratorAvailable() + ) { + return new SlimHttpServerRequestCreator($serverRequestCreator); + } + + return $serverRequestCreator; + } + + /** + * @param Psr17FactoryProviderInterface $psr17FactoryProvider + */ + public static function setPsr17FactoryProvider(Psr17FactoryProviderInterface $psr17FactoryProvider): void + { + static::$psr17FactoryProvider = $psr17FactoryProvider; + } + + /** + * @param ServerRequestCreatorInterface $serverRequestCreator + */ + public static function setServerRequestCreator(ServerRequestCreatorInterface $serverRequestCreator): void + { + self::$serverRequestCreator = $serverRequestCreator; + } + + /** + * @param bool $enabled + */ + public static function setSlimHttpDecoratorsAutomaticDetection(bool $enabled): void + { + static::$slimHttpDecoratorsAutomaticDetectionEnabled = $enabled; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Handlers/ErrorHandler.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Handlers/ErrorHandler.php new file mode 100644 index 0000000..0ac33c1 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Handlers/ErrorHandler.php @@ -0,0 +1,362 @@ + JsonErrorRenderer::class, + 'application/xml' => XmlErrorRenderer::class, + 'text/xml' => XmlErrorRenderer::class, + 'text/html' => HtmlErrorRenderer::class, + 'text/plain' => PlainTextErrorRenderer::class, + ]; + + /** + * @var bool + */ + protected $displayErrorDetails; + + /** + * @var bool + */ + protected $logErrors; + + /** + * @var bool + */ + protected $logErrorDetails; + + /** + * @var string|null + */ + protected $contentType; + + /** + * @var string + */ + protected $method; + + /** + * @var ServerRequestInterface + */ + protected $request; + + /** + * @var Throwable + */ + protected $exception; + + /** + * @var int + */ + protected $statusCode; + + /** + * @var CallableResolverInterface + */ + protected $callableResolver; + + /** + * @var ResponseFactoryInterface + */ + protected $responseFactory; + + /* + * @var LoggerInterface + */ + protected $logger; + + /** + * @param CallableResolverInterface $callableResolver + * @param ResponseFactoryInterface $responseFactory + * @param LoggerInterface|null $logger + */ + public function __construct( + CallableResolverInterface $callableResolver, + ResponseFactoryInterface $responseFactory, + ?LoggerInterface $logger = null + ) { + $this->callableResolver = $callableResolver; + $this->responseFactory = $responseFactory; + $this->logger = $logger ?: $this->getDefaultLogger(); + } + + /** + * Invoke error handler + * + * @param ServerRequestInterface $request The most recent Request object + * @param Throwable $exception The caught Exception object + * @param bool $displayErrorDetails Whether or not to display the error details + * @param bool $logErrors Whether or not to log errors + * @param bool $logErrorDetails Whether or not to log error details + * + * @return ResponseInterface + */ + public function __invoke( + ServerRequestInterface $request, + Throwable $exception, + bool $displayErrorDetails, + bool $logErrors, + bool $logErrorDetails + ): ResponseInterface { + $this->displayErrorDetails = $displayErrorDetails; + $this->logErrors = $logErrors; + $this->logErrorDetails = $logErrorDetails; + $this->request = $request; + $this->exception = $exception; + $this->method = $request->getMethod(); + $this->statusCode = $this->determineStatusCode(); + if ($this->contentType === null) { + $this->contentType = $this->determineContentType($request); + } + + if ($logErrors) { + $this->writeToErrorLog(); + } + + return $this->respond(); + } + + /** + * Force the content type for all error handler responses. + * + * @param string|null $contentType The content type + */ + public function forceContentType(?string $contentType): void + { + $this->contentType = $contentType; + } + + /** + * @return int + */ + protected function determineStatusCode(): int + { + if ($this->method === 'OPTIONS') { + return 200; + } + + if ($this->exception instanceof HttpException) { + return $this->exception->getCode(); + } + + return 500; + } + + /** + * Determine which content type we know about is wanted using Accept header + * + * Note: This method is a bare-bones implementation designed specifically for + * Slim's error handling requirements. Consider a fully-feature solution such + * as willdurand/negotiation for any other situation. + * + * @param ServerRequestInterface $request + * @return string + */ + protected function determineContentType(ServerRequestInterface $request): ?string + { + $acceptHeader = $request->getHeaderLine('Accept'); + $selectedContentTypes = array_intersect( + explode(',', $acceptHeader), + array_keys($this->errorRenderers) + ); + $count = count($selectedContentTypes); + + if ($count) { + $current = current($selectedContentTypes); + + /** + * Ensure other supported content types take precedence over text/plain + * when multiple content types are provided via Accept header. + */ + if ($current === 'text/plain' && $count > 1) { + return next($selectedContentTypes); + } + + return $current; + } + + if (preg_match('/\+(json|xml)/', $acceptHeader, $matches)) { + $mediaType = 'application/' . $matches[1]; + if (array_key_exists($mediaType, $this->errorRenderers)) { + return $mediaType; + } + } + + return null; + } + + /** + * Determine which renderer to use based on content type + * + * @return callable + * + * @throws RuntimeException + */ + protected function determineRenderer(): callable + { + if ($this->contentType !== null && array_key_exists($this->contentType, $this->errorRenderers)) { + $renderer = $this->errorRenderers[$this->contentType]; + } else { + $renderer = $this->defaultErrorRenderer; + } + + return $this->callableResolver->resolve($renderer); + } + + /** + * Register an error renderer for a specific content-type + * + * @param string $contentType The content-type this renderer should be registered to + * @param ErrorRendererInterface|string|callable $errorRenderer The error renderer + */ + public function registerErrorRenderer(string $contentType, $errorRenderer): void + { + $this->errorRenderers[$contentType] = $errorRenderer; + } + + /** + * Set the default error renderer + * + * @param string $contentType The content type of the default error renderer + * @param ErrorRendererInterface|string|callable $errorRenderer The default error renderer + */ + public function setDefaultErrorRenderer(string $contentType, $errorRenderer): void + { + $this->defaultErrorRendererContentType = $contentType; + $this->defaultErrorRenderer = $errorRenderer; + } + + /** + * Set the renderer for the error logger + * + * @param ErrorRendererInterface|string|callable $logErrorRenderer + */ + public function setLogErrorRenderer($logErrorRenderer): void + { + $this->logErrorRenderer = $logErrorRenderer; + } + + /** + * Write to the error log if $logErrors has been set to true + * + * @return void + */ + protected function writeToErrorLog(): void + { + $renderer = $this->callableResolver->resolve($this->logErrorRenderer); + $error = $renderer($this->exception, $this->logErrorDetails); + if (!$this->displayErrorDetails) { + $error .= "\nTips: To display error details in HTTP response "; + $error .= 'set "displayErrorDetails" to true in the ErrorHandler constructor.'; + } + $this->logError($error); + } + + /** + * Wraps the error_log function so that this can be easily tested + * + * @param string $error + * @return void + */ + protected function logError(string $error): void + { + $this->logger->error($error); + } + + /** + * Returns a default logger implementation. + * + * @return LoggerInterface + */ + protected function getDefaultLogger(): LoggerInterface + { + return new Logger(); + } + + /** + * @return ResponseInterface + */ + protected function respond(): ResponseInterface + { + $response = $this->responseFactory->createResponse($this->statusCode); + if ($this->contentType !== null && array_key_exists($this->contentType, $this->errorRenderers)) { + $response = $response->withHeader('Content-type', $this->contentType); + } else { + $response = $response->withHeader('Content-type', $this->defaultErrorRendererContentType); + } + + if ($this->exception instanceof HttpMethodNotAllowedException) { + $allowedMethods = implode(', ', $this->exception->getAllowedMethods()); + $response = $response->withHeader('Allow', $allowedMethods); + } + + $renderer = $this->determineRenderer(); + $body = call_user_func($renderer, $this->exception, $this->displayErrorDetails); + $response->getBody()->write($body); + + return $response; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Handlers/Strategies/RequestHandler.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Handlers/Strategies/RequestHandler.php new file mode 100644 index 0000000..dd11817 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Handlers/Strategies/RequestHandler.php @@ -0,0 +1,59 @@ +appendRouteArgumentsToRequestAttributes = $appendRouteArgumentsToRequestAttributes; + } + + /** + * Invoke a route callable that implements RequestHandlerInterface + * + * @param callable $callable + * @param ServerRequestInterface $request + * @param ResponseInterface $response + * @param array $routeArguments + * + * @return ResponseInterface + */ + public function __invoke( + callable $callable, + ServerRequestInterface $request, + ResponseInterface $response, + array $routeArguments + ): ResponseInterface { + if ($this->appendRouteArgumentsToRequestAttributes) { + foreach ($routeArguments as $k => $v) { + $request = $request->withAttribute($k, $v); + } + } + + return $callable($request); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponse.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponse.php new file mode 100644 index 0000000..9de0d9f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponse.php @@ -0,0 +1,45 @@ + $v) { + $request = $request->withAttribute($k, $v); + } + + return $callable($request, $response, $routeArguments); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponseArgs.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponseArgs.php new file mode 100644 index 0000000..0cff745 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponseArgs.php @@ -0,0 +1,43 @@ +getPath() + * @param string $method + * @return RoutingResults + */ + public function computeRoutingResults(string $uri, string $method): RoutingResults; + + /** + * @param string $identifier + * @return RouteInterface + */ + public function resolveRoute(string $identifier): RouteInterface; +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Interfaces/ServerRequestCreatorInterface.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Interfaces/ServerRequestCreatorInterface.php new file mode 100644 index 0000000..37ffb01 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Interfaces/ServerRequestCreatorInterface.php @@ -0,0 +1,21 @@ + callable + */ + public function __construct(array $bodyParsers = []) + { + $this->registerDefaultBodyParsers(); + + foreach ($bodyParsers as $mediaType => $parser) { + $this->registerBodyParser($mediaType, $parser); + } + } + + /** + * @param ServerRequestInterface $request + * @param RequestHandlerInterface $handler + * @return ResponseInterface + */ + public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface + { + $parsedBody = $request->getParsedBody(); + if ($parsedBody === null || empty($parsedBody)) { + $parsedBody = $this->parseBody($request); + $request = $request->withParsedBody($parsedBody); + } + + return $handler->handle($request); + } + + /** + * @param string $mediaType A HTTP media type (excluding content-type params). + * @param callable $callable A callable that returns parsed contents for media type. + * @return self + */ + public function registerBodyParser(string $mediaType, callable $callable): self + { + $this->bodyParsers[$mediaType] = $callable; + return $this; + } + + /** + * @param string $mediaType A HTTP media type (excluding content-type params). + * @return boolean + */ + public function hasBodyParser(string $mediaType): bool + { + return isset($this->bodyParsers[$mediaType]); + } + + /** + * @param string $mediaType A HTTP media type (excluding content-type params). + * @return callable + * @throws RuntimeException + */ + public function getBodyParser(string $mediaType): callable + { + if (!isset($this->bodyParsers[$mediaType])) { + throw new RuntimeException('No parser for type ' . $mediaType); + } + return $this->bodyParsers[$mediaType]; + } + + + protected function registerDefaultBodyParsers(): void + { + $this->registerBodyParser('application/json', function ($input) { + $result = json_decode($input, true); + + if (!is_array($result)) { + return null; + } + + return $result; + }); + + $this->registerBodyParser('application/x-www-form-urlencoded', function ($input) { + parse_str($input, $data); + return $data; + }); + + $xmlCallable = function ($input) { + $backup = libxml_disable_entity_loader(true); + $backup_errors = libxml_use_internal_errors(true); + $result = simplexml_load_string($input); + + libxml_disable_entity_loader($backup); + libxml_clear_errors(); + libxml_use_internal_errors($backup_errors); + + if ($result === false) { + return null; + } + + return $result; + }; + + $this->registerBodyParser('application/xml', $xmlCallable); + $this->registerBodyParser('text/xml', $xmlCallable); + } + + /** + * @param ServerRequestInterface $request + * @return null|array|object + */ + protected function parseBody(ServerRequestInterface $request) + { + $mediaType = $this->getMediaType($request); + if ($mediaType === null) { + return null; + } + + // Check if this specific media type has a parser registered first + if (!isset($this->bodyParsers[$mediaType])) { + // If not, look for a media type with a structured syntax suffix (RFC 6839) + $parts = explode('+', $mediaType); + if (count($parts) >= 2) { + $mediaType = 'application/' . $parts[count($parts) - 1]; + } + } + + if (isset($this->bodyParsers[$mediaType])) { + $body = (string)$request->getBody(); + $parsed = $this->bodyParsers[$mediaType]($body); + + if (!is_null($parsed) && !is_object($parsed) && !is_array($parsed)) { + throw new RuntimeException( + 'Request body media type parser return value must be an array, an object, or null' + ); + } + + return $parsed; + } + + return null; + } + + /** + * @param ServerRequestInterface $request + * @return string|null The serverRequest media type, minus content-type params + */ + protected function getMediaType(ServerRequestInterface $request): ?string + { + $contentType = $request->getHeader('Content-Type')[0] ?? null; + + if (is_string($contentType) && trim($contentType) != '') { + $contentTypeParts = explode(';', $contentType); + return strtolower(trim($contentTypeParts[0])); + } + + return null; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Middleware/ContentLengthMiddleware.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Middleware/ContentLengthMiddleware.php new file mode 100644 index 0000000..b742398 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Middleware/ContentLengthMiddleware.php @@ -0,0 +1,37 @@ +handle($request); + + // Add Content-Length header if not already added + $size = $response->getBody()->getSize(); + if ($size !== null && !$response->hasHeader('Content-Length')) { + $response = $response->withHeader('Content-Length', (string) $size); + } + + return $response; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Middleware/ErrorMiddleware.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Middleware/ErrorMiddleware.php new file mode 100644 index 0000000..0ce3240 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Middleware/ErrorMiddleware.php @@ -0,0 +1,252 @@ +callableResolver = $callableResolver; + $this->responseFactory = $responseFactory; + $this->displayErrorDetails = $displayErrorDetails; + $this->logErrors = $logErrors; + $this->logErrorDetails = $logErrorDetails; + $this->logger = $logger; + } + + /** + * @param ServerRequestInterface $request + * @param RequestHandlerInterface $handler + * @return ResponseInterface + */ + public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface + { + try { + return $handler->handle($request); + } catch (Throwable $e) { + return $this->handleException($request, $e); + } + } + + /** + * @param ServerRequestInterface $request + * @param Throwable $exception + * @return ResponseInterface + */ + public function handleException(ServerRequestInterface $request, Throwable $exception): ResponseInterface + { + if ($exception instanceof HttpException) { + $request = $exception->getRequest(); + } + + $exceptionType = get_class($exception); + $handler = $this->getErrorHandler($exceptionType); + + return $handler($request, $exception, $this->displayErrorDetails, $this->logErrors, $this->logErrorDetails); + } + + /** + * Get callable to handle scenarios where an error + * occurs when processing the current request. + * + * @param string $type Exception/Throwable name. ie: RuntimeException::class + * @return callable|ErrorHandler + */ + public function getErrorHandler(string $type) + { + if (isset($this->handlers[$type])) { + return $this->callableResolver->resolve($this->handlers[$type]); + } elseif (isset($this->subClassHandlers[$type])) { + return $this->callableResolver->resolve($this->subClassHandlers[$type]); + } else { + foreach ($this->subClassHandlers as $class => $handler) { + if (is_subclass_of($type, $class)) { + return $this->callableResolver->resolve($handler); + } + } + } + + return $this->getDefaultErrorHandler(); + } + + /** + * Get default error handler + * + * @return ErrorHandler|callable + */ + public function getDefaultErrorHandler() + { + if ($this->defaultErrorHandler === null) { + $this->defaultErrorHandler = new ErrorHandler( + $this->callableResolver, + $this->responseFactory, + $this->logger + ); + } + + return $this->callableResolver->resolve($this->defaultErrorHandler); + } + + /** + * Set callable as the default Slim application error handler. + * + * The callable signature MUST match the ErrorHandlerInterface + * + * @see \Slim\Interfaces\ErrorHandlerInterface + * + * 1. Instance of \Psr\Http\Message\ServerRequestInterface + * 2. Instance of \Throwable + * 3. Boolean displayErrorDetails + * 4. Boolean $logErrors + * 5. Boolean $logErrorDetails + * + * The callable MUST return an instance of + * \Psr\Http\Message\ResponseInterface. + * + * @param callable|ErrorHandler $handler + * @return self + */ + public function setDefaultErrorHandler($handler): self + { + $this->defaultErrorHandler = $handler; + return $this; + } + + /** + * Set callable to handle scenarios where an error + * occurs when processing the current request. + * + * The callable signature MUST match the ErrorHandlerInterface + * + * Pass true to $handleSubclasses to make the handler handle all subclasses of + * the type as well. Pass an array of classes to make the same function handle multiple exceptions. + * + * @see \Slim\Interfaces\ErrorHandlerInterface + * + * 1. Instance of \Psr\Http\Message\ServerRequestInterface + * 2. Instance of \Throwable + * 3. Boolean displayErrorDetails + * 4. Boolean $logErrors + * 5. Boolean $logErrorDetails + * + * The callable MUST return an instance of + * \Psr\Http\Message\ResponseInterface. + * + * @param string|string[] $typeOrTypes Exception/Throwable name. + * ie: RuntimeException::class or an array of classes + * ie: [HttpNotFoundException::class, HttpMethodNotAllowedException::class] + * @param callable|ErrorHandlerInterface $handler + * @param bool $handleSubclasses + * @return self + */ + public function setErrorHandler($typeOrTypes, $handler, bool $handleSubclasses = false): self + { + if (is_array($typeOrTypes)) { + foreach ($typeOrTypes as $type) { + $this->addErrorHandler($type, $handler, $handleSubclasses); + } + } else { + $this->addErrorHandler($typeOrTypes, $handler, $handleSubclasses); + } + + return $this; + } + + /** + * Used internally to avoid code repetition when passing multiple exceptions to setErrorHandler(). + * @param string $type + * @param callable|ErrorHandlerInterface $handler + * @param bool $handleSubclasses + * @return void + */ + private function addErrorHandler(string $type, $handler, bool $handleSubclasses): void + { + if ($handleSubclasses) { + $this->subClassHandlers[$type] = $handler; + } else { + $this->handlers[$type] = $handler; + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Middleware/MethodOverrideMiddleware.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Middleware/MethodOverrideMiddleware.php new file mode 100644 index 0000000..39388aa --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Middleware/MethodOverrideMiddleware.php @@ -0,0 +1,48 @@ +getHeaderLine('X-Http-Method-Override'); + + if ($methodHeader) { + $request = $request->withMethod($methodHeader); + } elseif (strtoupper($request->getMethod()) === 'POST') { + $body = $request->getParsedBody(); + + if (is_array($body) && !empty($body['_METHOD'])) { + $request = $request->withMethod($body['_METHOD']); + } + + if ($request->getBody()->eof()) { + $request->getBody()->rewind(); + } + } + + return $handler->handle($request); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Middleware/OutputBufferingMiddleware.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Middleware/OutputBufferingMiddleware.php new file mode 100644 index 0000000..198ee8f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Middleware/OutputBufferingMiddleware.php @@ -0,0 +1,84 @@ +streamFactory = $streamFactory; + $this->style = $style; + + if (!in_array($style, [static::APPEND, static::PREPEND], true)) { + throw new InvalidArgumentException("Invalid style `{$style}`. Must be `append` or `prepend`"); + } + } + + /** + * @param ServerRequestInterface $request + * @param RequestHandlerInterface $handler + * @return ResponseInterface + * @throws Throwable + */ + public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface + { + try { + ob_start(); + $response = $handler->handle($request); + $output = ob_get_clean(); + } catch (Throwable $e) { + ob_end_clean(); + throw $e; + } + + if (!empty($output)) { + if ($this->style === static::PREPEND) { + $body = $this->streamFactory->createStream(); + $body->write($output . $response->getBody()); + $response = $response->withBody($body); + } elseif ($this->style === static::APPEND && $response->getBody()->isWritable()) { + $response->getBody()->write($output); + } + } + + return $response; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Middleware/RoutingMiddleware.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Middleware/RoutingMiddleware.php new file mode 100644 index 0000000..4c24e3b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Middleware/RoutingMiddleware.php @@ -0,0 +1,104 @@ +routeResolver = $routeResolver; + $this->routeParser = $routeParser; + } + + /** + * @param ServerRequestInterface $request + * @param RequestHandlerInterface $handler + * @return ResponseInterface + * + * @throws HttpNotFoundException + * @throws HttpMethodNotAllowedException + * @throws RuntimeException + */ + public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface + { + $request = $request->withAttribute(RouteContext::ROUTE_PARSER, $this->routeParser); + $request = $this->performRouting($request); + return $handler->handle($request); + } + + /** + * Perform routing + * + * @param ServerRequestInterface $request PSR7 Server Request + * @return ServerRequestInterface + * + * @throws HttpNotFoundException + * @throws HttpMethodNotAllowedException + * @throws RuntimeException + */ + public function performRouting(ServerRequestInterface $request): ServerRequestInterface + { + $routingResults = $this->routeResolver->computeRoutingResults( + $request->getUri()->getPath(), + $request->getMethod() + ); + $routeStatus = $routingResults->getRouteStatus(); + + $request = $request->withAttribute(RouteContext::ROUTING_RESULTS, $routingResults); + + switch ($routeStatus) { + case RoutingResults::FOUND: + $routeArguments = $routingResults->getRouteArguments(); + $routeIdentifier = $routingResults->getRouteIdentifier() ?? ''; + $route = $this->routeResolver + ->resolveRoute($routeIdentifier) + ->prepare($routeArguments); + return $request->withAttribute(RouteContext::ROUTE, $route); + + case RoutingResults::NOT_FOUND: + throw new HttpNotFoundException($request); + + case RoutingResults::METHOD_NOT_ALLOWED: + $exception = new HttpMethodNotAllowedException($request); + $exception->setAllowedMethods($routingResults->getAllowedMethods()); + throw $exception; + + default: + throw new RuntimeException('An unexpected error occurred while performing routing.'); + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/MiddlewareDispatcher.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/MiddlewareDispatcher.php new file mode 100644 index 0000000..08b1c53 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/MiddlewareDispatcher.php @@ -0,0 +1,289 @@ +seedMiddlewareStack($kernel); + $this->callableResolver = $callableResolver; + $this->container = $container; + } + + /** + * {@inheritdoc} + */ + public function seedMiddlewareStack(RequestHandlerInterface $kernel): void + { + $this->tip = $kernel; + } + + /** + * Invoke the middleware stack + * + * @param ServerRequestInterface $request + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + return $this->tip->handle($request); + } + + /** + * Add a new middleware to the stack + * + * Middleware are organized as a stack. That means middleware + * that have been added before will be executed after the newly + * added one (last in, first out). + * + * @param MiddlewareInterface|string|callable $middleware + * @return MiddlewareDispatcherInterface + */ + public function add($middleware): MiddlewareDispatcherInterface + { + if ($middleware instanceof MiddlewareInterface) { + return $this->addMiddleware($middleware); + } + + if (is_string($middleware)) { + return $this->addDeferred($middleware); + } + + if (is_callable($middleware)) { + return $this->addCallable($middleware); + } + + throw new RuntimeException( + 'A middleware must be an object/class name referencing an implementation of ' . + 'MiddlewareInterface or a callable with a matching signature.' + ); + } + + /** + * Add a new middleware to the stack + * + * Middleware are organized as a stack. That means middleware + * that have been added before will be executed after the newly + * added one (last in, first out). + * + * @param MiddlewareInterface $middleware + * @return MiddlewareDispatcherInterface + */ + public function addMiddleware(MiddlewareInterface $middleware): MiddlewareDispatcherInterface + { + $next = $this->tip; + $this->tip = new class ($middleware, $next) implements RequestHandlerInterface + { + private $middleware; + private $next; + + public function __construct(MiddlewareInterface $middleware, RequestHandlerInterface $next) + { + $this->middleware = $middleware; + $this->next = $next; + } + + public function handle(ServerRequestInterface $request): ResponseInterface + { + return $this->middleware->process($request, $this->next); + } + }; + + return $this; + } + + /** + * Add a new middleware by class name + * + * Middleware are organized as a stack. That means middleware + * that have been added before will be executed after the newly + * added one (last in, first out). + * + * @param string $middleware + * @return self + */ + public function addDeferred(string $middleware): self + { + $next = $this->tip; + $this->tip = new class ( + $middleware, + $next, + $this->container, + $this->callableResolver + ) implements RequestHandlerInterface + { + private $middleware; + private $next; + private $container; + private $callableResolver; + + public function __construct( + string $middleware, + RequestHandlerInterface $next, + ?ContainerInterface $container = null, + ?CallableResolverInterface $callableResolver = null + ) { + $this->middleware = $middleware; + $this->next = $next; + $this->container = $container; + $this->callableResolver = $callableResolver; + } + + public function handle(ServerRequestInterface $request): ResponseInterface + { + if ($this->callableResolver instanceof AdvancedCallableResolverInterface) { + $callable = $this->callableResolver->resolveMiddleware($this->middleware); + return $callable($request, $this->next); + } + + $callable = null; + + if ($this->callableResolver instanceof CallableResolverInterface) { + try { + $callable = $this->callableResolver->resolve($this->middleware); + } catch (RuntimeException $e) { + // Do Nothing + } + } + + if (!$callable) { + $resolved = $this->middleware; + $instance = null; + $method = null; + + // Check for Slim callable as `class:method` + if (preg_match(CallableResolver::$callablePattern, $resolved, $matches)) { + $resolved = $matches[1]; + $method = $matches[2]; + } + + if ($this->container && $this->container->has($resolved)) { + $instance = $this->container->get($resolved); + if ($instance instanceof MiddlewareInterface) { + return $instance->process($request, $this->next); + } + } elseif (!function_exists($resolved)) { + if (!class_exists($resolved)) { + throw new RuntimeException(sprintf('Middleware %s does not exist', $resolved)); + } + $instance = new $resolved($this->container); + } + + if ($instance && $instance instanceof MiddlewareInterface) { + return $instance->process($request, $this->next); + } + + $callable = $instance ?? $resolved; + if ($instance && $method) { + $callable = [$instance, $method]; + } + + if ($this->container && $callable instanceof Closure) { + $callable = $callable->bindTo($this->container); + } + } + + if (!is_callable($callable)) { + throw new RuntimeException(sprintf( + 'Middleware %s is not resolvable', + $this->middleware + )); + } + + return $callable($request, $this->next); + } + }; + + return $this; + } + + /** + * Add a (non standard) callable middleware to the stack + * + * Middleware are organized as a stack. That means middleware + * that have been added before will be executed after the newly + * added one (last in, first out). + * + * @param callable $middleware + * @return self + */ + public function addCallable(callable $middleware): self + { + $next = $this->tip; + + if ($this->container && $middleware instanceof Closure) { + $middleware = $middleware->bindTo($this->container); + } + + $this->tip = new class ($middleware, $next) implements RequestHandlerInterface + { + private $middleware; + private $next; + + public function __construct(callable $middleware, RequestHandlerInterface $next) + { + $this->middleware = $middleware; + $this->next = $next; + } + + public function handle(ServerRequestInterface $request): ResponseInterface + { + return ($this->middleware)($request, $this->next); + } + }; + + return $this; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/ResponseEmitter.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/ResponseEmitter.php new file mode 100644 index 0000000..88ccac7 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/ResponseEmitter.php @@ -0,0 +1,150 @@ +responseChunkSize = $responseChunkSize; + } + + /** + * Send the response the client + * + * @param ResponseInterface $response + * @return void + */ + public function emit(ResponseInterface $response): void + { + $isEmpty = $this->isResponseEmpty($response); + if (headers_sent() === false) { + $this->emitStatusLine($response); + $this->emitHeaders($response); + } + + if (!$isEmpty) { + $this->emitBody($response); + } + } + + /** + * Emit Response Headers + * + * @param ResponseInterface $response + */ + private function emitHeaders(ResponseInterface $response): void + { + foreach ($response->getHeaders() as $name => $values) { + $first = strtolower($name) !== 'set-cookie'; + foreach ($values as $value) { + $header = sprintf('%s: %s', $name, $value); + header($header, $first); + $first = false; + } + } + } + + /** + * Emit Status Line + * + * @param ResponseInterface $response + */ + private function emitStatusLine(ResponseInterface $response): void + { + $statusLine = sprintf( + 'HTTP/%s %s %s', + $response->getProtocolVersion(), + $response->getStatusCode(), + $response->getReasonPhrase() + ); + header($statusLine, true, $response->getStatusCode()); + } + + /** + * Emit Body + * + * @param ResponseInterface $response + */ + private function emitBody(ResponseInterface $response): void + { + $body = $response->getBody(); + if ($body->isSeekable()) { + $body->rewind(); + } + + $amountToRead = (int) $response->getHeaderLine('Content-Length'); + if (!$amountToRead) { + $amountToRead = $body->getSize(); + } + + if ($amountToRead) { + while ($amountToRead > 0 && !$body->eof()) { + $length = min($this->responseChunkSize, $amountToRead); + $data = $body->read($length); + echo $data; + + $amountToRead -= strlen($data); + + if (connection_status() !== CONNECTION_NORMAL) { + break; + } + } + } else { + while (!$body->eof()) { + echo $body->read($this->responseChunkSize); + if (connection_status() !== CONNECTION_NORMAL) { + break; + } + } + } + } + + /** + * Asserts response body is empty or status code is 204, 205 or 304 + * + * @param ResponseInterface $response + * @return bool + */ + public function isResponseEmpty(ResponseInterface $response): bool + { + if (in_array($response->getStatusCode(), [204, 205, 304], true)) { + return true; + } + $stream = $response->getBody(); + $seekable = $stream->isSeekable(); + if ($seekable) { + $stream->rewind(); + } + return $seekable ? $stream->read(1) === '' : $stream->eof(); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/Dispatcher.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/Dispatcher.php new file mode 100644 index 0000000..070af20 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/Dispatcher.php @@ -0,0 +1,87 @@ +routeCollector = $routeCollector; + } + + /** + * @return FastRouteDispatcher + */ + protected function createDispatcher(): FastRouteDispatcher + { + if ($this->dispatcher) { + return $this->dispatcher; + } + + $routeDefinitionCallback = function (FastRouteCollector $r) { + $basePath = $this->routeCollector->getBasePath(); + + foreach ($this->routeCollector->getRoutes() as $route) { + $r->addRoute($route->getMethods(), $basePath . $route->getPattern(), $route->getIdentifier()); + } + }; + + $cacheFile = $this->routeCollector->getCacheFile(); + if ($cacheFile) { + /** @var FastRouteDispatcher $dispatcher */ + $dispatcher = \FastRoute\cachedDispatcher($routeDefinitionCallback, [ + 'dispatcher' => FastRouteDispatcher::class, + 'routeParser' => new Std(), + 'cacheFile' => $cacheFile, + ]); + } else { + /** @var FastRouteDispatcher $dispatcher */ + $dispatcher = \FastRoute\simpleDispatcher($routeDefinitionCallback, [ + 'dispatcher' => FastRouteDispatcher::class, + 'routeParser' => new Std(), + ]); + } + + $this->dispatcher = $dispatcher; + return $this->dispatcher; + } + + /** + * {@inheritdoc} + */ + public function dispatch(string $method, string $uri): RoutingResults + { + $dispatcher = $this->createDispatcher(); + $results = $dispatcher->dispatch($method, $uri); + return new RoutingResults($this, $method, $uri, $results[0], $results[1], $results[2]); + } + + /** + * {@inheritdoc} + */ + public function getAllowedMethods(string $uri): array + { + $dispatcher = $this->createDispatcher(); + return $dispatcher->getAllowedMethods($uri); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/FastRouteDispatcher.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/FastRouteDispatcher.php new file mode 100644 index 0000000..522af85 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/FastRouteDispatcher.php @@ -0,0 +1,99 @@ +routingResults($httpMethod, $uri); + if ($routingResults[0] === self::FOUND) { + return $routingResults; + } + + // For HEAD requests, attempt fallback to GET + if ($httpMethod === 'HEAD') { + $routingResults = $this->routingResults('GET', $uri); + if ($routingResults[0] === self::FOUND) { + return $routingResults; + } + } + + // If nothing else matches, try fallback routes + $routingResults = $this->routingResults('*', $uri); + if ($routingResults[0] === self::FOUND) { + return $routingResults; + } + + if (!empty($this->getAllowedMethods($uri))) { + return [self::METHOD_NOT_ALLOWED, null, []]; + } + + return [self::NOT_FOUND, null, []]; + } + + private function routingResults(string $httpMethod, string $uri): array + { + if (isset($this->staticRouteMap[$httpMethod][$uri])) { + return [self::FOUND, $this->staticRouteMap[$httpMethod][$uri], []]; + } + + if (isset($this->variableRouteData[$httpMethod])) { + $result = $this->dispatchVariableRoute($this->variableRouteData[$httpMethod], $uri); + if ($result[0] === self::FOUND) { + return [self::FOUND, $result[1], $result[2]]; + } + } + + return [self::NOT_FOUND, null, []]; + } + + /** + * @param string $uri + * + * @return array + */ + public function getAllowedMethods(string $uri): array + { + if (isset($this->allowedMethods[$uri])) { + return $this->allowedMethods[$uri]; + } + + $this->allowedMethods[$uri] = []; + foreach ($this->staticRouteMap as $method => $uriMap) { + if (isset($uriMap[$uri])) { + $this->allowedMethods[$uri][] = $method; + } + } + + foreach ($this->variableRouteData as $method => $routeData) { + $result = $this->dispatchVariableRoute($routeData, $uri); + if ($result[0] === self::FOUND) { + $this->allowedMethods[$uri][] = $method; + } + } + + return $this->allowedMethods[$uri]; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/Route.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/Route.php new file mode 100644 index 0000000..47badf8 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/Route.php @@ -0,0 +1,383 @@ +methods = $methods; + $this->pattern = $pattern; + $this->callable = $callable; + $this->responseFactory = $responseFactory; + $this->callableResolver = $callableResolver; + $this->container = $container; + $this->invocationStrategy = $invocationStrategy ?? new RequestResponse(); + $this->groups = $groups; + $this->identifier = 'route' . $identifier; + $this->middlewareDispatcher = new MiddlewareDispatcher($this, $callableResolver, $container); + } + + /** + * @return CallableResolverInterface + */ + public function getCallableResolver(): CallableResolverInterface + { + return $this->callableResolver; + } + + /** + * {@inheritdoc} + */ + public function getInvocationStrategy(): InvocationStrategyInterface + { + return $this->invocationStrategy; + } + + /** + * {@inheritdoc} + */ + public function setInvocationStrategy(InvocationStrategyInterface $invocationStrategy): RouteInterface + { + $this->invocationStrategy = $invocationStrategy; + return $this; + } + + /** + * {@inheritdoc} + */ + public function getMethods(): array + { + return $this->methods; + } + + /** + * {@inheritdoc} + */ + public function getPattern(): string + { + return $this->pattern; + } + + /** + * {@inheritdoc} + */ + public function setPattern(string $pattern): RouteInterface + { + $this->pattern = $pattern; + return $this; + } + + /** + * {@inheritdoc} + */ + public function getCallable() + { + return $this->callable; + } + + /** + * {@inheritdoc} + */ + public function setCallable($callable): RouteInterface + { + $this->callable = $callable; + return $this; + } + + /** + * {@inheritdoc} + */ + public function getName(): ?string + { + return $this->name; + } + + /** + * {@inheritdoc} + */ + public function setName(string $name): RouteInterface + { + $this->name = $name; + return $this; + } + + /** + * {@inheritdoc} + */ + public function getIdentifier(): string + { + return $this->identifier; + } + + /** + * {@inheritdoc} + */ + public function getArgument(string $name, ?string $default = null): ?string + { + if (array_key_exists($name, $this->arguments)) { + return $this->arguments[$name]; + } + return $default; + } + + /** + * {@inheritdoc} + */ + public function getArguments(): array + { + return $this->arguments; + } + + /** + * {@inheritdoc} + */ + public function setArguments(array $arguments, bool $includeInSavedArguments = true): RouteInterface + { + if ($includeInSavedArguments) { + $this->savedArguments = $arguments; + } + + $this->arguments = $arguments; + return $this; + } + + /** + * @return RouteGroupInterface[] + */ + public function getGroups(): array + { + return $this->groups; + } + + /** + * {@inheritdoc} + */ + public function add($middleware): RouteInterface + { + $this->middlewareDispatcher->add($middleware); + return $this; + } + + /** + * {@inheritdoc} + */ + public function addMiddleware(MiddlewareInterface $middleware): RouteInterface + { + $this->middlewareDispatcher->addMiddleware($middleware); + return $this; + } + + /** + * {@inheritdoc} + */ + public function prepare(array $arguments): RouteInterface + { + $this->arguments = array_replace($this->savedArguments, $arguments) ?? []; + return $this; + } + + /** + * {@inheritdoc} + */ + public function setArgument(string $name, string $value, bool $includeInSavedArguments = true): RouteInterface + { + if ($includeInSavedArguments) { + $this->savedArguments[$name] = $value; + } + + $this->arguments[$name] = $value; + return $this; + } + + /** + * {@inheritdoc} + */ + public function run(ServerRequestInterface $request): ResponseInterface + { + if (!$this->groupMiddlewareAppended) { + $this->appendGroupMiddlewareToRoute(); + } + + return $this->middlewareDispatcher->handle($request); + } + + /** + * @return void + */ + protected function appendGroupMiddlewareToRoute(): void + { + $inner = $this->middlewareDispatcher; + $this->middlewareDispatcher = new MiddlewareDispatcher($inner, $this->callableResolver, $this->container); + + /** @var RouteGroupInterface $group */ + foreach (array_reverse($this->groups) as $group) { + $group->appendMiddlewareToDispatcher($this->middlewareDispatcher); + } + + $this->groupMiddlewareAppended = true; + } + + /** + * {@inheritdoc} + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + if ($this->callableResolver instanceof AdvancedCallableResolverInterface) { + $callable = $this->callableResolver->resolveRoute($this->callable); + } else { + $callable = $this->callableResolver->resolve($this->callable); + } + $strategy = $this->invocationStrategy; + + if ( + is_array($callable) + && $callable[0] instanceof RequestHandlerInterface + && !in_array(RequestHandlerInvocationStrategyInterface::class, class_implements($strategy)) + ) { + $strategy = new RequestHandler(); + } + + $response = $this->responseFactory->createResponse(); + return $strategy($callable, $request, $response, $this->arguments); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/RouteCollector.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/RouteCollector.php new file mode 100644 index 0000000..0508c94 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/RouteCollector.php @@ -0,0 +1,296 @@ +responseFactory = $responseFactory; + $this->callableResolver = $callableResolver; + $this->container = $container; + $this->defaultInvocationStrategy = $defaultInvocationStrategy ?? new RequestResponse(); + $this->routeParser = $routeParser ?? new RouteParser($this); + + if ($cacheFile) { + $this->setCacheFile($cacheFile); + } + } + + /** + * @return RouteParserInterface + */ + public function getRouteParser(): RouteParserInterface + { + return $this->routeParser; + } + + /** + * Get default route invocation strategy + * + * @return InvocationStrategyInterface + */ + public function getDefaultInvocationStrategy(): InvocationStrategyInterface + { + return $this->defaultInvocationStrategy; + } + + /** + * @param InvocationStrategyInterface $strategy + * @return self + */ + public function setDefaultInvocationStrategy(InvocationStrategyInterface $strategy): RouteCollectorInterface + { + $this->defaultInvocationStrategy = $strategy; + return $this; + } + + /** + * {@inheritdoc} + */ + public function getCacheFile(): ?string + { + return $this->cacheFile; + } + + /** + * {@inheritdoc} + */ + public function setCacheFile(string $cacheFile): RouteCollectorInterface + { + if (file_exists($cacheFile) && !is_readable($cacheFile)) { + throw new RuntimeException( + sprintf('Route collector cache file `%s` is not readable', $cacheFile) + ); + } + + if (!file_exists($cacheFile) && !is_writable(dirname($cacheFile))) { + throw new RuntimeException( + sprintf('Route collector cache file directory `%s` is not writable', dirname($cacheFile)) + ); + } + + $this->cacheFile = $cacheFile; + return $this; + } + + /** + * {@inheritdoc} + */ + public function getBasePath(): string + { + return $this->basePath; + } + + /** + * Set the base path used in urlFor() + * + * @param string $basePath + * + * @return self + */ + public function setBasePath(string $basePath): RouteCollectorInterface + { + $this->basePath = $basePath; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function getRoutes(): array + { + return $this->routes; + } + + /** + * {@inheritdoc} + */ + public function removeNamedRoute(string $name): RouteCollectorInterface + { + $route = $this->getNamedRoute($name); + unset($this->routes[$route->getIdentifier()]); + return $this; + } + + /** + * {@inheritdoc} + */ + public function getNamedRoute(string $name): RouteInterface + { + foreach ($this->routes as $route) { + if ($name === $route->getName()) { + return $route; + } + } + throw new RuntimeException('Named route does not exist for name: ' . $name); + } + + /** + * {@inheritdoc} + */ + public function lookupRoute(string $identifier): RouteInterface + { + if (!isset($this->routes[$identifier])) { + throw new RuntimeException('Route not found, looks like your route cache is stale.'); + } + return $this->routes[$identifier]; + } + + /** + * {@inheritdoc} + */ + public function group(string $pattern, $callable): RouteGroupInterface + { + $routeCollectorProxy = new RouteCollectorProxy( + $this->responseFactory, + $this->callableResolver, + $this->container, + $this, + $pattern + ); + + $routeGroup = new RouteGroup($pattern, $callable, $this->callableResolver, $routeCollectorProxy); + $this->routeGroups[] = $routeGroup; + + $routeGroup->collectRoutes(); + array_pop($this->routeGroups); + + return $routeGroup; + } + + /** + * {@inheritdoc} + */ + public function map(array $methods, string $pattern, $handler): RouteInterface + { + $route = $this->createRoute($methods, $pattern, $handler); + $this->routes[$route->getIdentifier()] = $route; + $this->routeCounter++; + + return $route; + } + + /** + * {@inheritdoc} + */ + protected function createRoute(array $methods, string $pattern, $callable): RouteInterface + { + return new Route( + $methods, + $pattern, + $callable, + $this->responseFactory, + $this->callableResolver, + $this->container, + $this->defaultInvocationStrategy, + $this->routeGroups, + $this->routeCounter + ); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/RouteCollectorProxy.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/RouteCollectorProxy.php new file mode 100644 index 0000000..293740e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/RouteCollectorProxy.php @@ -0,0 +1,209 @@ +responseFactory = $responseFactory; + $this->callableResolver = $callableResolver; + $this->container = $container; + $this->routeCollector = $routeCollector ?? new RouteCollector($responseFactory, $callableResolver, $container); + $this->groupPattern = $groupPattern; + } + + /** + * {@inheritdoc} + */ + public function getResponseFactory(): ResponseFactoryInterface + { + return $this->responseFactory; + } + + /** + * {@inheritdoc} + */ + public function getCallableResolver(): CallableResolverInterface + { + return $this->callableResolver; + } + + /** + * {@inheritdoc} + */ + public function getContainer(): ?ContainerInterface + { + return $this->container; + } + + /** + * {@inheritdoc} + */ + public function getRouteCollector(): RouteCollectorInterface + { + return $this->routeCollector; + } + + /** + * {@inheritdoc} + */ + public function getBasePath(): string + { + return $this->routeCollector->getBasePath(); + } + + /** + * {@inheritdoc} + */ + public function setBasePath(string $basePath): RouteCollectorProxyInterface + { + $this->routeCollector->setBasePath($basePath); + + return $this; + } + + /** + * {@inheritdoc} + */ + public function get(string $pattern, $callable): RouteInterface + { + return $this->map(['GET'], $pattern, $callable); + } + + /** + * {@inheritdoc} + */ + public function post(string $pattern, $callable): RouteInterface + { + return $this->map(['POST'], $pattern, $callable); + } + + /** + * {@inheritdoc} + */ + public function put(string $pattern, $callable): RouteInterface + { + return $this->map(['PUT'], $pattern, $callable); + } + + /** + * {@inheritdoc} + */ + public function patch(string $pattern, $callable): RouteInterface + { + return $this->map(['PATCH'], $pattern, $callable); + } + + /** + * {@inheritdoc} + */ + public function delete(string $pattern, $callable): RouteInterface + { + return $this->map(['DELETE'], $pattern, $callable); + } + + /** + * {@inheritdoc} + */ + public function options(string $pattern, $callable): RouteInterface + { + return $this->map(['OPTIONS'], $pattern, $callable); + } + + /** + * {@inheritdoc} + */ + public function any(string $pattern, $callable): RouteInterface + { + return $this->map(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'], $pattern, $callable); + } + + /** + * {@inheritdoc} + */ + public function map(array $methods, string $pattern, $callable): RouteInterface + { + $pattern = $this->groupPattern . $pattern; + + return $this->routeCollector->map($methods, $pattern, $callable); + } + + /** + * {@inheritdoc} + */ + public function group(string $pattern, $callable): RouteGroupInterface + { + $pattern = $this->groupPattern . $pattern; + + return $this->routeCollector->group($pattern, $callable); + } + + /** + * {@inheritdoc} + */ + public function redirect(string $from, $to, int $status = 302): RouteInterface + { + $responseFactory = $this->responseFactory; + + $handler = function () use ($to, $status, $responseFactory) { + $response = $responseFactory->createResponse($status); + return $response->withHeader('Location', (string) $to); + }; + + return $this->get($from, $handler); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/RouteContext.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/RouteContext.php new file mode 100644 index 0000000..40b9892 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/RouteContext.php @@ -0,0 +1,118 @@ +getAttribute(self::ROUTE); + $routeParser = $serverRequest->getAttribute(self::ROUTE_PARSER); + $routingResults = $serverRequest->getAttribute(self::ROUTING_RESULTS); + $basePath = $serverRequest->getAttribute(self::BASE_PATH); + + if ($routeParser === null || $routingResults === null) { + throw new RuntimeException('Cannot create RouteContext before routing has been completed'); + } + + return new self($route, $routeParser, $routingResults, $basePath); + } + + /** + * @var RouteInterface|null + */ + private $route; + + /** + * @var RouteParserInterface + */ + private $routeParser; + + /** + * @var RoutingResults + */ + private $routingResults; + + /** + * @var string|null + */ + private $basePath; + + /** + * @param RouteInterface|null $route + * @param RouteParserInterface $routeParser + * @param RoutingResults $routingResults + * @param string|null $basePath + */ + private function __construct( + ?RouteInterface $route, + RouteParserInterface $routeParser, + RoutingResults $routingResults, + ?string $basePath = null + ) { + $this->route = $route; + $this->routeParser = $routeParser; + $this->routingResults = $routingResults; + $this->basePath = $basePath; + } + + /** + * @return RouteInterface|null + */ + public function getRoute(): ?RouteInterface + { + return $this->route; + } + + /** + * @return RouteParserInterface + */ + public function getRouteParser(): RouteParserInterface + { + return $this->routeParser; + } + + /** + * @return RoutingResults + */ + public function getRoutingResults(): RoutingResults + { + return $this->routingResults; + } + + /** + * @return string + */ + public function getBasePath(): string + { + if ($this->basePath === null) { + throw new RuntimeException('No base path defined.'); + } + return $this->basePath; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/RouteGroup.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/RouteGroup.php new file mode 100644 index 0000000..c73d5ff --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/RouteGroup.php @@ -0,0 +1,116 @@ +pattern = $pattern; + $this->callable = $callable; + $this->callableResolver = $callableResolver; + $this->routeCollectorProxy = $routeCollectorProxy; + } + + /** + * {@inheritdoc} + */ + public function collectRoutes(): RouteGroupInterface + { + if ($this->callableResolver instanceof AdvancedCallableResolverInterface) { + $callable = $this->callableResolver->resolveRoute($this->callable); + } else { + $callable = $this->callableResolver->resolve($this->callable); + } + $callable($this->routeCollectorProxy); + return $this; + } + + /** + * {@inheritdoc} + */ + public function add($middleware): RouteGroupInterface + { + $this->middleware[] = $middleware; + return $this; + } + + /** + * {@inheritdoc} + */ + public function addMiddleware(MiddlewareInterface $middleware): RouteGroupInterface + { + $this->middleware[] = $middleware; + return $this; + } + + /** + * {@inheritdoc} + */ + public function appendMiddlewareToDispatcher(MiddlewareDispatcher $dispatcher): RouteGroupInterface + { + foreach ($this->middleware as $middleware) { + $dispatcher->add($middleware); + } + + return $this; + } + + /** + * {@inheritdoc} + */ + public function getPattern(): string + { + return $this->pattern; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/RouteParser.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/RouteParser.php new file mode 100644 index 0000000..a2b7927 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/RouteParser.php @@ -0,0 +1,135 @@ +routeCollector = $routeCollector; + $this->routeParser = new Std(); + } + + /** + * {@inheritdoc} + */ + public function relativeUrlFor(string $routeName, array $data = [], array $queryParams = []): string + { + $route = $this->routeCollector->getNamedRoute($routeName); + $pattern = $route->getPattern(); + + $segments = []; + $segmentName = ''; + + /* + * $routes is an associative array of expressions representing a route as multiple segments + * There is an expression for each optional parameter plus one without the optional parameters + * The most specific is last, hence why we reverse the array before iterating over it + */ + $expressions = array_reverse($this->routeParser->parse($pattern)); + foreach ($expressions as $expression) { + foreach ($expression as $segment) { + /* + * Each $segment is either a string or an array of strings + * containing optional parameters of an expression + */ + if (is_string($segment)) { + $segments[] = $segment; + continue; + } + + /* + * If we don't have a data element for this segment in the provided $data + * we cancel testing to move onto the next expression with a less specific item + */ + if (!array_key_exists($segment[0], $data)) { + $segments = []; + $segmentName = $segment[0]; + break; + } + + $segments[] = $data[$segment[0]]; + } + + /* + * If we get to this logic block we have found all the parameters + * for the provided $data which means we don't need to continue testing + * less specific expressions + */ + if (!empty($segments)) { + break; + } + } + + if (empty($segments)) { + throw new InvalidArgumentException('Missing data for URL segment: ' . $segmentName); + } + + $url = implode('', $segments); + if ($queryParams) { + $url .= '?' . http_build_query($queryParams); + } + + return $url; + } + + /** + * {@inheritdoc} + */ + public function urlFor(string $routeName, array $data = [], array $queryParams = []): string + { + $basePath = $this->routeCollector->getBasePath(); + $url = $this->relativeUrlFor($routeName, $data, $queryParams); + + if ($basePath) { + $url = $basePath . $url; + } + + return $url; + } + + /** + * {@inheritdoc} + */ + public function fullUrlFor(UriInterface $uri, string $routeName, array $data = [], array $queryParams = []): string + { + $path = $this->urlFor($routeName, $data, $queryParams); + $scheme = $uri->getScheme(); + $authority = $uri->getAuthority(); + $protocol = ($scheme ? $scheme . ':' : '') . ($authority ? '//' . $authority : ''); + return $protocol . $path; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/RouteResolver.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/RouteResolver.php new file mode 100644 index 0000000..30f07d5 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/RouteResolver.php @@ -0,0 +1,70 @@ +routeCollector = $routeCollector; + $this->dispatcher = $dispatcher ?? new Dispatcher($routeCollector); + } + + /** + * @param string $uri Should be $request->getUri()->getPath() + * @param string $method + * @return RoutingResults + */ + public function computeRoutingResults(string $uri, string $method): RoutingResults + { + $uri = rawurldecode($uri); + if ($uri === '' || $uri[0] !== '/') { + $uri = '/' . $uri; + } + return $this->dispatcher->dispatch($method, $uri); + } + + /** + * @param string $identifier + * @return RouteInterface + * @throws RuntimeException + */ + public function resolveRoute(string $identifier): RouteInterface + { + return $this->routeCollector->lookupRoute($identifier); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/RouteRunner.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/RouteRunner.php new file mode 100644 index 0000000..50c11f2 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/RouteRunner.php @@ -0,0 +1,86 @@ +routeResolver = $routeResolver; + $this->routeParser = $routeParser; + $this->routeCollectorProxy = $routeCollectorProxy; + } + + /** + * This request handler is instantiated automatically in App::__construct() + * It is at the very tip of the middleware queue meaning it will be executed + * last and it detects whether or not routing has been performed in the user + * defined middleware stack. In the event that the user did not perform routing + * it is done here + * + * @param ServerRequestInterface $request + * @return ResponseInterface + * @throws HttpNotFoundException + * @throws HttpMethodNotAllowedException + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + // If routing hasn't been done, then do it now so we can dispatch + if ($request->getAttribute(RouteContext::ROUTING_RESULTS) === null) { + $routingMiddleware = new RoutingMiddleware($this->routeResolver, $this->routeParser); + $request = $routingMiddleware->performRouting($request); + } + + if ($this->routeCollectorProxy !== null) { + $request = $request->withAttribute( + RouteContext::BASE_PATH, + $this->routeCollectorProxy->getBasePath() + ); + } + + /** @var Route $route */ + $route = $request->getAttribute(RouteContext::ROUTE); + return $route->run($request); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/RoutingResults.php b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/RoutingResults.php new file mode 100644 index 0000000..b67abe2 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/Slim/Routing/RoutingResults.php @@ -0,0 +1,146 @@ +dispatcher = $dispatcher; + $this->method = $method; + $this->uri = $uri; + $this->routeStatus = $routeStatus; + $this->routeIdentifier = $routeIdentifier; + $this->routeArguments = $routeArguments; + } + + /** + * @return DispatcherInterface + */ + public function getDispatcher(): DispatcherInterface + { + return $this->dispatcher; + } + + /** + * @return string + */ + public function getMethod(): string + { + return $this->method; + } + + /** + * @return string + */ + public function getUri(): string + { + return $this->uri; + } + + /** + * @return int + */ + public function getRouteStatus(): int + { + return $this->routeStatus; + } + + /** + * @return null|string + */ + public function getRouteIdentifier(): ?string + { + return $this->routeIdentifier; + } + + /** + * @param bool $urlDecode + * @return array + */ + public function getRouteArguments(bool $urlDecode = true): array + { + if (!$urlDecode) { + return $this->routeArguments; + } + + $routeArguments = []; + foreach ($this->routeArguments as $key => $value) { + $routeArguments[$key] = rawurldecode($value); + } + + return $routeArguments; + } + + /** + * @return array + */ + public function getAllowedMethods(): array + { + return $this->dispatcher->getAllowedMethods($this->uri); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/slim/composer.json b/soc/2020/daily_report/archive/app/vendor/slim/slim/composer.json new file mode 100644 index 0000000..a341551 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/slim/composer.json @@ -0,0 +1,90 @@ +{ + "name": "slim/slim", + "type": "library", + "description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs", + "keywords": ["framework","micro","api","router"], + "homepage": "https://www.slimframework.com", + "license": "MIT", + "authors": [ + { + "name": "Josh Lockhart", + "email": "hello@joshlockhart.com", + "homepage": "https://joshlockhart.com" + }, + { + "name": "Andrew Smith", + "email": "a.smith@silentworks.co.uk", + "homepage": "http://silentworks.co.uk" + }, + { + "name": "Rob Allen", + "email": "rob@akrabat.com", + "homepage": "http://akrabat.com" + }, + { + "name": "Pierre Berube", + "email": "pierre@lgse.com", + "homepage": "http://www.lgse.com" + }, + { + "name": "Gabriel Manricks", + "email": "gmanricks@me.com", + "homepage": "http://gabrielmanricks.com" + } + ], + "require": { + "php": "^7.2", + "ext-json": "*", + "nikic/fast-route": "^1.3", + "psr/container": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "^1.1" + }, + "require-dev": { + "ext-simplexml": "*", + "adriansuter/php-autoload-override": "^1.0", + "guzzlehttp/psr7": "^1.5", + "http-interop/http-factory-guzzle": "^1.0", + "laminas/laminas-diactoros": "^2.1", + "nyholm/psr7": "^1.1", + "nyholm/psr7-server": "^0.3.0", + "phpspec/prophecy": "^1.10", + "phpstan/phpstan": "^0.11.5", + "phpunit/phpunit": "^8.5", + "slim/http": "^1.0", + "slim/psr7": "^1.0", + "squizlabs/php_codesniffer": "^3.5" + }, + "autoload": { + "psr-4": { + "Slim\\": "Slim" + } + }, + "autoload-dev": { + "psr-4": { + "Slim\\Tests\\": "tests" + } + }, + "scripts": { + "test": [ + "@phpunit", + "@phpcs", + "@phpstan" + ], + "phpunit": "phpunit", + "phpcs": "phpcs", + "phpstan": "phpstan analyse Slim --memory-limit=-1" + }, + "suggest": { + "ext-simplexml": "Needed to support XML format in BodyParsingMiddleware", + "ext-xml": "Needed to support XML format in BodyParsingMiddleware", + "slim/psr7": "Slim PSR-7 implementation. See https://www.slimframework.com/docs/v4/start/installation.html for more information.", + "php-di/php-di": "PHP-DI is the recommended container library to be used with Slim" + }, + "config": { + "sort-packages": true + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/twig-view/.coveralls.yml b/soc/2020/daily_report/archive/app/vendor/slim/twig-view/.coveralls.yml new file mode 100644 index 0000000..a8172fe --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/twig-view/.coveralls.yml @@ -0,0 +1 @@ +json_path: coveralls-upload.json diff --git a/soc/2020/daily_report/archive/app/vendor/slim/twig-view/.editorconfig b/soc/2020/daily_report/archive/app/vendor/slim/twig-view/.editorconfig new file mode 100644 index 0000000..7eb147b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/twig-view/.editorconfig @@ -0,0 +1,23 @@ +# This file is for unifying the coding style for different editors and IDEs +# editorconfig.org + +# PHP PSR-2 Coding Standards +# http://www.php-fig.org/psr/psr-2/ + +root = true + +[*.{php,json,md}] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +indent_style = space +indent_size = 4 + +[*.yml] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +indent_style = space +indent_size = 2 diff --git a/soc/2020/daily_report/archive/app/vendor/slim/twig-view/LICENSE.md b/soc/2020/daily_report/archive/app/vendor/slim/twig-view/LICENSE.md new file mode 100644 index 0000000..6df4c84 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/twig-view/LICENSE.md @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Josh Lockhart + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/soc/2020/daily_report/archive/app/vendor/slim/twig-view/composer.json b/soc/2020/daily_report/archive/app/vendor/slim/twig-view/composer.json new file mode 100644 index 0000000..2a74722 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/twig-view/composer.json @@ -0,0 +1,52 @@ +{ + "name": "slim/twig-view", + "type": "library", + "description": "Slim Framework 4 view helper built on top of the Twig 3 templating component", + "keywords": ["slim","framework","view","template","twig"], + "homepage": "https://www.slimframework.com", + "license": "MIT", + "authors": [ + { + "name": "Josh Lockhart", + "email": "hello@joshlockhart.com", + "homepage": "http://joshlockhart.com" + }, + { + "name": "Pierre Berube", + "email": "pierre@lgse.com", + "homepage": "http://www.lgse.com" + } + ], + "require": { + "php": "^7.2", + "psr/http-message": "^1.0", + "slim/slim": "^4.0", + "twig/twig": "^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5", + "psr/http-factory": "^1.0", + "squizlabs/php_codesniffer": "^3.5", + "phpstan/phpstan": "^0.11.15" + }, + "autoload": { + "psr-4": { + "Slim\\Views\\": "src" + } + }, + "autoload-dev": { + "psr-4": { + "Slim\\Tests\\": "tests" + } + }, + "scripts": { + "test": [ + "@phpunit", + "@phpcs", + "@phpstan" + ], + "phpunit": "phpunit", + "phpcs": "phpcs", + "phpstan": "phpstan analyse src --memory-limit=-1" + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/twig-view/src/Twig.php b/soc/2020/daily_report/archive/app/vendor/slim/twig-view/src/Twig.php new file mode 100644 index 0000000..f2c60ca --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/twig-view/src/Twig.php @@ -0,0 +1,294 @@ +getAttribute($attributeName); + if ($twig === null || !($twig instanceof self)) { + throw new RuntimeException( + 'Twig could not be found in the server request attributes using the key "'. $attributeName .'".' + ); + } + + return $twig; + } + + /** + * @param string|array $path Path(s) to templates directory + * @param array $settings Twig environment settings + * + * @throws LoaderError When the template cannot be found + * + * @return Twig + */ + public static function create($path, array $settings = []): self + { + $loader = new FilesystemLoader(); + + $paths = is_array($path) ? $path : [$path]; + foreach ($paths as $namespace => $path) { + if (is_string($namespace)) { + $loader->setPaths($path, $namespace); + } else { + $loader->addPath($path); + } + } + + return new self($loader, $settings); + } + + /** + * @param LoaderInterface $loader Twig loader + * @param array $settings Twig environment settings + */ + public function __construct(LoaderInterface $loader, array $settings = []) + { + $this->loader = $loader; + $this->environment = new Environment($this->loader, $settings); + } + + /** + * Proxy method to add an extension to the Twig environment + * + * @param ExtensionInterface $extension A single extension instance or an array of instances + */ + public function addExtension(ExtensionInterface $extension): void + { + $this->environment->addExtension($extension); + } + + /** + * Proxy method to add a runtime loader to the Twig environment + * + * @param RuntimeLoaderInterface $runtimeLoader + */ + public function addRuntimeLoader(RuntimeLoaderInterface $runtimeLoader): void + { + $this->environment->addRuntimeLoader($runtimeLoader); + } + + /** + * Fetch rendered template + * + * @param string $template Template pathname relative to templates directory + * @param array $data Associative array of template variables + * + * @throws LoaderError When the template cannot be found + * @throws SyntaxError When an error occurred during compilation + * @throws RuntimeError When an error occurred during rendering + * + * @return string + */ + public function fetch(string $template, array $data = []): string + { + $data = array_merge($this->defaultVariables, $data); + + return $this->environment->render($template, $data); + } + + /** + * Fetch rendered block + * + * @param string $template Template pathname relative to templates directory + * @param string $block Name of the block within the template + * @param array $data Associative array of template variables + * + * @throws Throwable When an error occurred during rendering + * @throws LoaderError When the template cannot be found + * @throws SyntaxError When an error occurred during compilation + * + * @return string + */ + public function fetchBlock(string $template, string $block, array $data = []): string + { + $data = array_merge($this->defaultVariables, $data); + + return $this->environment->resolveTemplate($template)->renderBlock($block, $data); + } + + /** + * Fetch rendered string + * + * @param string $string String + * @param array $data Associative array of template variables + * + * @throws LoaderError When the template cannot be found + * @throws SyntaxError When an error occurred during compilation + * + * @return string + */ + public function fetchFromString(string $string = '', array $data = []): string + { + $data = array_merge($this->defaultVariables, $data); + + return $this->environment->createTemplate($string)->render($data); + } + + /** + * Output rendered template + * + * @param ResponseInterface $response + * @param string $template Template pathname relative to templates directory + * @param array $data Associative array of template variables + * + * @throws LoaderError When the template cannot be found + * @throws SyntaxError When an error occurred during compilation + * @throws RuntimeError When an error occurred during rendering + * + * @return ResponseInterface + */ + public function render(ResponseInterface $response, string $template, array $data = []): ResponseInterface + { + $response->getBody()->write($this->fetch($template, $data)); + + return $response; + } + + /** + * Return Twig loader + * + * @return LoaderInterface + */ + public function getLoader(): LoaderInterface + { + return $this->loader; + } + + /** + * Return Twig environment + * + * @return Environment + */ + public function getEnvironment(): Environment + { + return $this->environment; + } + + /** + * Does this collection have a given key? + * + * @param string $key The data key + * + * @return bool + */ + public function offsetExists($key): bool + { + return array_key_exists($key, $this->defaultVariables); + } + + /** + * Get collection item for key + * + * @param string $key The data key + * + * @return mixed The key's value, or the default value + */ + public function offsetGet($key) + { + if (!$this->offsetExists($key)) { + return null; + } + return $this->defaultVariables[$key]; + } + + /** + * Set collection item + * + * @param string $key The data key + * @param mixed $value The data value + */ + public function offsetSet($key, $value): void + { + $this->defaultVariables[$key] = $value; + } + + /** + * Remove item from collection + * + * @param string $key The data key + */ + public function offsetUnset($key): void + { + unset($this->defaultVariables[$key]); + } + + /** + * Get number of items in collection + * + * @return int + */ + public function count(): int + { + return count($this->defaultVariables); + } + + /** + * Get collection iterator + * + * @return ArrayIterator + */ + public function getIterator(): ArrayIterator + { + return new ArrayIterator($this->defaultVariables); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/twig-view/src/TwigExtension.php b/soc/2020/daily_report/archive/app/vendor/slim/twig-view/src/TwigExtension.php new file mode 100644 index 0000000..661d921 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/twig-view/src/TwigExtension.php @@ -0,0 +1,39 @@ +getContainer(); + if ($container === null) { + throw new RuntimeException('The app does not have a container.'); + } + if (!$container->has($containerKey)) { + throw new RuntimeException( + "The specified container key does not exist: $containerKey" + ); + } + + $twig = $container->get($containerKey); + if (!($twig instanceof Twig)) { + throw new RuntimeException( + "Twig instance could not be resolved via container key: $containerKey" + ); + } + + return new self( + $twig, + $app->getRouteCollector()->getRouteParser(), + $app->getBasePath() + ); + } + + /** + * @param App $app + * @param Twig $twig + * @param string $attributeName + * + * @return TwigMiddleware + */ + public static function create(App $app, Twig $twig, string $attributeName = 'view'): self + { + return new self( + $twig, + $app->getRouteCollector()->getRouteParser(), + $app->getBasePath(), + $attributeName + ); + } + + /** + * @param Twig $twig + * @param RouteParserInterface $routeParser + * @param string $basePath + * @param string|null $attributeName + */ + public function __construct( + Twig $twig, + RouteParserInterface $routeParser, + string $basePath = '', + ?string $attributeName = null + ) { + $this->twig = $twig; + $this->routeParser = $routeParser; + $this->basePath = $basePath; + $this->attributeName = $attributeName; + } + + /** + * {@inheritdoc} + */ + public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface + { + $runtimeLoader = new TwigRuntimeLoader($this->routeParser, $request->getUri(), $this->basePath); + $this->twig->addRuntimeLoader($runtimeLoader); + + $extension = new TwigExtension(); + $this->twig->addExtension($extension); + + if ($this->attributeName !== null) { + $request = $request->withAttribute($this->attributeName, $this->twig); + } + + return $handler->handle($request); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/twig-view/src/TwigRuntimeExtension.php b/soc/2020/daily_report/archive/app/vendor/slim/twig-view/src/TwigRuntimeExtension.php new file mode 100644 index 0000000..fd6aab3 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/twig-view/src/TwigRuntimeExtension.php @@ -0,0 +1,152 @@ +routeParser = $routeParser; + $this->uri = $uri; + $this->basePath = $basePath; + } + + /** + * Get the url for a named route + * + * @param string $routeName Route name + * @param array $data Route placeholders + * @param array $queryParams Query parameters + * + * @return string + */ + public function urlFor(string $routeName, array $data = [], array $queryParams = []): string + { + return $this->routeParser->urlFor($routeName, $data, $queryParams); + } + + /** + * Get the full url for a named route + * + * @param string $routeName Route name + * @param array $data Route placeholders + * @param array $queryParams Query parameters + * + * @return string + */ + public function fullUrlFor(string $routeName, array $data = [], array $queryParams = []): string + { + return $this->routeParser->fullUrlFor($this->uri, $routeName, $data, $queryParams); + } + + /** + * @param string $routeName Route name + * @param array $data Route placeholders + * + * @return bool + */ + public function isCurrentUrl(string $routeName, array $data = []): bool + { + $currentUrl = $this->basePath.$this->uri->getPath(); + $result = $this->routeParser->urlFor($routeName, $data); + + return $result === $currentUrl; + } + + /** + * Get current path on given Uri + * + * @param bool $withQueryString + * + * @return string + */ + public function getCurrentUrl(bool $withQueryString = false): string + { + $currentUrl = $this->basePath.$this->uri->getPath(); + $query = $this->uri->getQuery(); + + if ($withQueryString && !empty($query)) { + $currentUrl .= '?'.$query; + } + + return $currentUrl; + } + + /** + * Get the uri + * + * @return UriInterface + */ + public function getUri(): UriInterface + { + return $this->uri; + } + + /** + * Set the uri + * + * @param UriInterface $uri + * + * @return self + */ + public function setUri(UriInterface $uri): self + { + $this->uri = $uri; + + return $this; + } + + /** + * Get the base path + * + * @return string + */ + public function getBasePath(): string + { + return $this->basePath; + } + + /** + * Set the base path + * + * @param string $basePath + * + * @return self + */ + public function setBasePath(string $basePath): self + { + $this->basePath = $basePath; + + return $this; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/slim/twig-view/src/TwigRuntimeLoader.php b/soc/2020/daily_report/archive/app/vendor/slim/twig-view/src/TwigRuntimeLoader.php new file mode 100644 index 0000000..cb02f57 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/slim/twig-view/src/TwigRuntimeLoader.php @@ -0,0 +1,58 @@ +routeParser = $routeParser; + $this->uri = $uri; + $this->basePath = $basePath; + } + + /** + * {@inheritdoc} + */ + public function load(string $class) + { + if (TwigRuntimeExtension::class === $class) { + return new $class($this->routeParser, $this->uri, $this->basePath); + } + + return null; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/finder/CHANGELOG.md b/soc/2020/daily_report/archive/app/vendor/symfony/finder/CHANGELOG.md new file mode 100644 index 0000000..33f5bd5 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/finder/CHANGELOG.md @@ -0,0 +1,79 @@ +CHANGELOG +========= + +5.0.0 +----- + + * added `$useNaturalSort` argument to `Finder::sortByName()` + +4.3.0 +----- + + * added Finder::ignoreVCSIgnored() to ignore files based on rules listed in .gitignore + +4.2.0 +----- + + * added $useNaturalSort option to Finder::sortByName() method + * the `Finder::sortByName()` method will have a new `$useNaturalSort` + argument in version 5.0, not defining it is deprecated + * added `Finder::reverseSorting()` to reverse the sorting + +4.0.0 +----- + + * removed `ExceptionInterface` + * removed `Symfony\Component\Finder\Iterator\FilterIterator` + +3.4.0 +----- + + * deprecated `Symfony\Component\Finder\Iterator\FilterIterator` + * added Finder::hasResults() method to check if any results were found + +3.3.0 +----- + + * added double-star matching to Glob::toRegex() + +3.0.0 +----- + + * removed deprecated classes + +2.8.0 +----- + + * deprecated adapters and related classes + +2.5.0 +----- + * added support for GLOB_BRACE in the paths passed to Finder::in() + +2.3.0 +----- + + * added a way to ignore unreadable directories (via Finder::ignoreUnreadableDirs()) + * unified the way subfolders that are not executable are handled by always throwing an AccessDeniedException exception + +2.2.0 +----- + + * added Finder::path() and Finder::notPath() methods + * added finder adapters to improve performance on specific platforms + * added support for wildcard characters (glob patterns) in the paths passed + to Finder::in() + +2.1.0 +----- + + * added Finder::sortByAccessedTime(), Finder::sortByChangedTime(), and + Finder::sortByModifiedTime() + * added Countable to Finder + * added support for an array of directories as an argument to + Finder::exclude() + * added searching based on the file content via Finder::contains() and + Finder::notContains() + * added support for the != operator in the Comparator + * [BC BREAK] filter expressions (used for file name and content) are no more + considered as regexps but glob patterns when they are enclosed in '*' or '?' diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/finder/Comparator/Comparator.php b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Comparator/Comparator.php new file mode 100644 index 0000000..cfe3965 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Comparator/Comparator.php @@ -0,0 +1,91 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Comparator; + +/** + * Comparator. + * + * @author Fabien Potencier + */ +class Comparator +{ + private $target; + private $operator = '=='; + + /** + * Gets the target value. + * + * @return string The target value + */ + public function getTarget() + { + return $this->target; + } + + public function setTarget(string $target) + { + $this->target = $target; + } + + /** + * Gets the comparison operator. + * + * @return string The operator + */ + public function getOperator() + { + return $this->operator; + } + + /** + * Sets the comparison operator. + * + * @throws \InvalidArgumentException + */ + public function setOperator(string $operator) + { + if ('' === $operator) { + $operator = '=='; + } + + if (!\in_array($operator, ['>', '<', '>=', '<=', '==', '!='])) { + throw new \InvalidArgumentException(sprintf('Invalid operator "%s".', $operator)); + } + + $this->operator = $operator; + } + + /** + * Tests against the target. + * + * @param mixed $test A test value + * + * @return bool + */ + public function test($test) + { + switch ($this->operator) { + case '>': + return $test > $this->target; + case '>=': + return $test >= $this->target; + case '<': + return $test < $this->target; + case '<=': + return $test <= $this->target; + case '!=': + return $test != $this->target; + } + + return $test == $this->target; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/finder/Comparator/DateComparator.php b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Comparator/DateComparator.php new file mode 100644 index 0000000..d17c77a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Comparator/DateComparator.php @@ -0,0 +1,51 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Comparator; + +/** + * DateCompare compiles date comparisons. + * + * @author Fabien Potencier + */ +class DateComparator extends Comparator +{ + /** + * @param string $test A comparison string + * + * @throws \InvalidArgumentException If the test is not understood + */ + public function __construct(string $test) + { + if (!preg_match('#^\s*(==|!=|[<>]=?|after|since|before|until)?\s*(.+?)\s*$#i', $test, $matches)) { + throw new \InvalidArgumentException(sprintf('Don\'t understand "%s" as a date test.', $test)); + } + + try { + $date = new \DateTime($matches[2]); + $target = $date->format('U'); + } catch (\Exception $e) { + throw new \InvalidArgumentException(sprintf('"%s" is not a valid date.', $matches[2])); + } + + $operator = isset($matches[1]) ? $matches[1] : '=='; + if ('since' === $operator || 'after' === $operator) { + $operator = '>'; + } + + if ('until' === $operator || 'before' === $operator) { + $operator = '<'; + } + + $this->setOperator($operator); + $this->setTarget($target); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/finder/Comparator/NumberComparator.php b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Comparator/NumberComparator.php new file mode 100644 index 0000000..80667c9 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Comparator/NumberComparator.php @@ -0,0 +1,79 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Comparator; + +/** + * NumberComparator compiles a simple comparison to an anonymous + * subroutine, which you can call with a value to be tested again. + * + * Now this would be very pointless, if NumberCompare didn't understand + * magnitudes. + * + * The target value may use magnitudes of kilobytes (k, ki), + * megabytes (m, mi), or gigabytes (g, gi). Those suffixed + * with an i use the appropriate 2**n version in accordance with the + * IEC standard: http://physics.nist.gov/cuu/Units/binary.html + * + * Based on the Perl Number::Compare module. + * + * @author Fabien Potencier PHP port + * @author Richard Clamp Perl version + * @copyright 2004-2005 Fabien Potencier + * @copyright 2002 Richard Clamp + * + * @see http://physics.nist.gov/cuu/Units/binary.html + */ +class NumberComparator extends Comparator +{ + /** + * @param string|int $test A comparison string or an integer + * + * @throws \InvalidArgumentException If the test is not understood + */ + public function __construct(?string $test) + { + if (!preg_match('#^\s*(==|!=|[<>]=?)?\s*([0-9\.]+)\s*([kmg]i?)?\s*$#i', $test, $matches)) { + throw new \InvalidArgumentException(sprintf('Don\'t understand "%s" as a number test.', $test)); + } + + $target = $matches[2]; + if (!is_numeric($target)) { + throw new \InvalidArgumentException(sprintf('Invalid number "%s".', $target)); + } + if (isset($matches[3])) { + // magnitude + switch (strtolower($matches[3])) { + case 'k': + $target *= 1000; + break; + case 'ki': + $target *= 1024; + break; + case 'm': + $target *= 1000000; + break; + case 'mi': + $target *= 1024 * 1024; + break; + case 'g': + $target *= 1000000000; + break; + case 'gi': + $target *= 1024 * 1024 * 1024; + break; + } + } + + $this->setTarget($target); + $this->setOperator(isset($matches[1]) ? $matches[1] : '=='); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/finder/Exception/AccessDeniedException.php b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Exception/AccessDeniedException.php new file mode 100644 index 0000000..ee195ea --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Exception/AccessDeniedException.php @@ -0,0 +1,19 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Exception; + +/** + * @author Jean-François Simon + */ +class AccessDeniedException extends \UnexpectedValueException +{ +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/finder/Exception/DirectoryNotFoundException.php b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Exception/DirectoryNotFoundException.php new file mode 100644 index 0000000..c6cc0f2 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Exception/DirectoryNotFoundException.php @@ -0,0 +1,19 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Exception; + +/** + * @author Andreas Erhard + */ +class DirectoryNotFoundException extends \InvalidArgumentException +{ +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/finder/Finder.php b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Finder.php new file mode 100644 index 0000000..e1bcea3 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Finder.php @@ -0,0 +1,797 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder; + +use Symfony\Component\Finder\Comparator\DateComparator; +use Symfony\Component\Finder\Comparator\NumberComparator; +use Symfony\Component\Finder\Exception\DirectoryNotFoundException; +use Symfony\Component\Finder\Iterator\CustomFilterIterator; +use Symfony\Component\Finder\Iterator\DateRangeFilterIterator; +use Symfony\Component\Finder\Iterator\DepthRangeFilterIterator; +use Symfony\Component\Finder\Iterator\ExcludeDirectoryFilterIterator; +use Symfony\Component\Finder\Iterator\FilecontentFilterIterator; +use Symfony\Component\Finder\Iterator\FilenameFilterIterator; +use Symfony\Component\Finder\Iterator\SizeRangeFilterIterator; +use Symfony\Component\Finder\Iterator\SortableIterator; + +/** + * Finder allows to build rules to find files and directories. + * + * It is a thin wrapper around several specialized iterator classes. + * + * All rules may be invoked several times. + * + * All methods return the current Finder object to allow chaining: + * + * $finder = Finder::create()->files()->name('*.php')->in(__DIR__); + * + * @author Fabien Potencier + */ +class Finder implements \IteratorAggregate, \Countable +{ + const IGNORE_VCS_FILES = 1; + const IGNORE_DOT_FILES = 2; + const IGNORE_VCS_IGNORED_FILES = 4; + + private $mode = 0; + private $names = []; + private $notNames = []; + private $exclude = []; + private $filters = []; + private $depths = []; + private $sizes = []; + private $followLinks = false; + private $reverseSorting = false; + private $sort = false; + private $ignore = 0; + private $dirs = []; + private $dates = []; + private $iterators = []; + private $contains = []; + private $notContains = []; + private $paths = []; + private $notPaths = []; + private $ignoreUnreadableDirs = false; + + private static $vcsPatterns = ['.svn', '_svn', 'CVS', '_darcs', '.arch-params', '.monotone', '.bzr', '.git', '.hg']; + + public function __construct() + { + $this->ignore = static::IGNORE_VCS_FILES | static::IGNORE_DOT_FILES; + } + + /** + * Creates a new Finder. + * + * @return static + */ + public static function create() + { + return new static(); + } + + /** + * Restricts the matching to directories only. + * + * @return $this + */ + public function directories() + { + $this->mode = Iterator\FileTypeFilterIterator::ONLY_DIRECTORIES; + + return $this; + } + + /** + * Restricts the matching to files only. + * + * @return $this + */ + public function files() + { + $this->mode = Iterator\FileTypeFilterIterator::ONLY_FILES; + + return $this; + } + + /** + * Adds tests for the directory depth. + * + * Usage: + * + * $finder->depth('> 1') // the Finder will start matching at level 1. + * $finder->depth('< 3') // the Finder will descend at most 3 levels of directories below the starting point. + * $finder->depth(['>= 1', '< 3']) + * + * @param string|int|string[]|int[] $levels The depth level expression or an array of depth levels + * + * @return $this + * + * @see DepthRangeFilterIterator + * @see NumberComparator + */ + public function depth($levels) + { + foreach ((array) $levels as $level) { + $this->depths[] = new Comparator\NumberComparator($level); + } + + return $this; + } + + /** + * Adds tests for file dates (last modified). + * + * The date must be something that strtotime() is able to parse: + * + * $finder->date('since yesterday'); + * $finder->date('until 2 days ago'); + * $finder->date('> now - 2 hours'); + * $finder->date('>= 2005-10-15'); + * $finder->date(['>= 2005-10-15', '<= 2006-05-27']); + * + * @param string|string[] $dates A date range string or an array of date ranges + * + * @return $this + * + * @see strtotime + * @see DateRangeFilterIterator + * @see DateComparator + */ + public function date($dates) + { + foreach ((array) $dates as $date) { + $this->dates[] = new Comparator\DateComparator($date); + } + + return $this; + } + + /** + * Adds rules that files must match. + * + * You can use patterns (delimited with / sign), globs or simple strings. + * + * $finder->name('*.php') + * $finder->name('/\.php$/') // same as above + * $finder->name('test.php') + * $finder->name(['test.py', 'test.php']) + * + * @param string|string[] $patterns A pattern (a regexp, a glob, or a string) or an array of patterns + * + * @return $this + * + * @see FilenameFilterIterator + */ + public function name($patterns) + { + $this->names = array_merge($this->names, (array) $patterns); + + return $this; + } + + /** + * Adds rules that files must not match. + * + * @param string|string[] $patterns A pattern (a regexp, a glob, or a string) or an array of patterns + * + * @return $this + * + * @see FilenameFilterIterator + */ + public function notName($patterns) + { + $this->notNames = array_merge($this->notNames, (array) $patterns); + + return $this; + } + + /** + * Adds tests that file contents must match. + * + * Strings or PCRE patterns can be used: + * + * $finder->contains('Lorem ipsum') + * $finder->contains('/Lorem ipsum/i') + * $finder->contains(['dolor', '/ipsum/i']) + * + * @param string|string[] $patterns A pattern (string or regexp) or an array of patterns + * + * @return $this + * + * @see FilecontentFilterIterator + */ + public function contains($patterns) + { + $this->contains = array_merge($this->contains, (array) $patterns); + + return $this; + } + + /** + * Adds tests that file contents must not match. + * + * Strings or PCRE patterns can be used: + * + * $finder->notContains('Lorem ipsum') + * $finder->notContains('/Lorem ipsum/i') + * $finder->notContains(['lorem', '/dolor/i']) + * + * @param string|string[] $patterns A pattern (string or regexp) or an array of patterns + * + * @return $this + * + * @see FilecontentFilterIterator + */ + public function notContains($patterns) + { + $this->notContains = array_merge($this->notContains, (array) $patterns); + + return $this; + } + + /** + * Adds rules that filenames must match. + * + * You can use patterns (delimited with / sign) or simple strings. + * + * $finder->path('some/special/dir') + * $finder->path('/some\/special\/dir/') // same as above + * $finder->path(['some dir', 'another/dir']) + * + * Use only / as dirname separator. + * + * @param string|string[] $patterns A pattern (a regexp or a string) or an array of patterns + * + * @return $this + * + * @see FilenameFilterIterator + */ + public function path($patterns) + { + $this->paths = array_merge($this->paths, (array) $patterns); + + return $this; + } + + /** + * Adds rules that filenames must not match. + * + * You can use patterns (delimited with / sign) or simple strings. + * + * $finder->notPath('some/special/dir') + * $finder->notPath('/some\/special\/dir/') // same as above + * $finder->notPath(['some/file.txt', 'another/file.log']) + * + * Use only / as dirname separator. + * + * @param string|string[] $patterns A pattern (a regexp or a string) or an array of patterns + * + * @return $this + * + * @see FilenameFilterIterator + */ + public function notPath($patterns) + { + $this->notPaths = array_merge($this->notPaths, (array) $patterns); + + return $this; + } + + /** + * Adds tests for file sizes. + * + * $finder->size('> 10K'); + * $finder->size('<= 1Ki'); + * $finder->size(4); + * $finder->size(['> 10K', '< 20K']) + * + * @param string|int|string[]|int[] $sizes A size range string or an integer or an array of size ranges + * + * @return $this + * + * @see SizeRangeFilterIterator + * @see NumberComparator + */ + public function size($sizes) + { + foreach ((array) $sizes as $size) { + $this->sizes[] = new Comparator\NumberComparator($size); + } + + return $this; + } + + /** + * Excludes directories. + * + * Directories passed as argument must be relative to the ones defined with the `in()` method. For example: + * + * $finder->in(__DIR__)->exclude('ruby'); + * + * @param string|array $dirs A directory path or an array of directories + * + * @return $this + * + * @see ExcludeDirectoryFilterIterator + */ + public function exclude($dirs) + { + $this->exclude = array_merge($this->exclude, (array) $dirs); + + return $this; + } + + /** + * Excludes "hidden" directories and files (starting with a dot). + * + * This option is enabled by default. + * + * @return $this + * + * @see ExcludeDirectoryFilterIterator + */ + public function ignoreDotFiles(bool $ignoreDotFiles) + { + if ($ignoreDotFiles) { + $this->ignore |= static::IGNORE_DOT_FILES; + } else { + $this->ignore &= ~static::IGNORE_DOT_FILES; + } + + return $this; + } + + /** + * Forces the finder to ignore version control directories. + * + * This option is enabled by default. + * + * @return $this + * + * @see ExcludeDirectoryFilterIterator + */ + public function ignoreVCS(bool $ignoreVCS) + { + if ($ignoreVCS) { + $this->ignore |= static::IGNORE_VCS_FILES; + } else { + $this->ignore &= ~static::IGNORE_VCS_FILES; + } + + return $this; + } + + /** + * Forces Finder to obey .gitignore and ignore files based on rules listed there. + * + * This option is disabled by default. + * + * @return $this + */ + public function ignoreVCSIgnored(bool $ignoreVCSIgnored) + { + if ($ignoreVCSIgnored) { + $this->ignore |= static::IGNORE_VCS_IGNORED_FILES; + } else { + $this->ignore &= ~static::IGNORE_VCS_IGNORED_FILES; + } + + return $this; + } + + /** + * Adds VCS patterns. + * + * @see ignoreVCS() + * + * @param string|string[] $pattern VCS patterns to ignore + */ + public static function addVCSPattern($pattern) + { + foreach ((array) $pattern as $p) { + self::$vcsPatterns[] = $p; + } + + self::$vcsPatterns = array_unique(self::$vcsPatterns); + } + + /** + * Sorts files and directories by an anonymous function. + * + * The anonymous function receives two \SplFileInfo instances to compare. + * + * This can be slow as all the matching files and directories must be retrieved for comparison. + * + * @return $this + * + * @see SortableIterator + */ + public function sort(\Closure $closure) + { + $this->sort = $closure; + + return $this; + } + + /** + * Sorts files and directories by name. + * + * This can be slow as all the matching files and directories must be retrieved for comparison. + * + * @return $this + * + * @see SortableIterator + */ + public function sortByName(bool $useNaturalSort = false) + { + $this->sort = $useNaturalSort ? Iterator\SortableIterator::SORT_BY_NAME_NATURAL : Iterator\SortableIterator::SORT_BY_NAME; + + return $this; + } + + /** + * Sorts files and directories by type (directories before files), then by name. + * + * This can be slow as all the matching files and directories must be retrieved for comparison. + * + * @return $this + * + * @see SortableIterator + */ + public function sortByType() + { + $this->sort = Iterator\SortableIterator::SORT_BY_TYPE; + + return $this; + } + + /** + * Sorts files and directories by the last accessed time. + * + * This is the time that the file was last accessed, read or written to. + * + * This can be slow as all the matching files and directories must be retrieved for comparison. + * + * @return $this + * + * @see SortableIterator + */ + public function sortByAccessedTime() + { + $this->sort = Iterator\SortableIterator::SORT_BY_ACCESSED_TIME; + + return $this; + } + + /** + * Reverses the sorting. + * + * @return $this + */ + public function reverseSorting() + { + $this->reverseSorting = true; + + return $this; + } + + /** + * Sorts files and directories by the last inode changed time. + * + * This is the time that the inode information was last modified (permissions, owner, group or other metadata). + * + * On Windows, since inode is not available, changed time is actually the file creation time. + * + * This can be slow as all the matching files and directories must be retrieved for comparison. + * + * @return $this + * + * @see SortableIterator + */ + public function sortByChangedTime() + { + $this->sort = Iterator\SortableIterator::SORT_BY_CHANGED_TIME; + + return $this; + } + + /** + * Sorts files and directories by the last modified time. + * + * This is the last time the actual contents of the file were last modified. + * + * This can be slow as all the matching files and directories must be retrieved for comparison. + * + * @return $this + * + * @see SortableIterator + */ + public function sortByModifiedTime() + { + $this->sort = Iterator\SortableIterator::SORT_BY_MODIFIED_TIME; + + return $this; + } + + /** + * Filters the iterator with an anonymous function. + * + * The anonymous function receives a \SplFileInfo and must return false + * to remove files. + * + * @return $this + * + * @see CustomFilterIterator + */ + public function filter(\Closure $closure) + { + $this->filters[] = $closure; + + return $this; + } + + /** + * Forces the following of symlinks. + * + * @return $this + */ + public function followLinks() + { + $this->followLinks = true; + + return $this; + } + + /** + * Tells finder to ignore unreadable directories. + * + * By default, scanning unreadable directories content throws an AccessDeniedException. + * + * @return $this + */ + public function ignoreUnreadableDirs(bool $ignore = true) + { + $this->ignoreUnreadableDirs = $ignore; + + return $this; + } + + /** + * Searches files and directories which match defined rules. + * + * @param string|string[] $dirs A directory path or an array of directories + * + * @return $this + * + * @throws DirectoryNotFoundException if one of the directories does not exist + */ + public function in($dirs) + { + $resolvedDirs = []; + + foreach ((array) $dirs as $dir) { + if (is_dir($dir)) { + $resolvedDirs[] = $this->normalizeDir($dir); + } elseif ($glob = glob($dir, (\defined('GLOB_BRACE') ? GLOB_BRACE : 0) | GLOB_ONLYDIR | GLOB_NOSORT)) { + sort($glob); + $resolvedDirs = array_merge($resolvedDirs, array_map([$this, 'normalizeDir'], $glob)); + } else { + throw new DirectoryNotFoundException(sprintf('The "%s" directory does not exist.', $dir)); + } + } + + $this->dirs = array_merge($this->dirs, $resolvedDirs); + + return $this; + } + + /** + * Returns an Iterator for the current Finder configuration. + * + * This method implements the IteratorAggregate interface. + * + * @return \Iterator|SplFileInfo[] An iterator + * + * @throws \LogicException if the in() method has not been called + */ + public function getIterator() + { + if (0 === \count($this->dirs) && 0 === \count($this->iterators)) { + throw new \LogicException('You must call one of in() or append() methods before iterating over a Finder.'); + } + + if (1 === \count($this->dirs) && 0 === \count($this->iterators)) { + return $this->searchInDirectory($this->dirs[0]); + } + + $iterator = new \AppendIterator(); + foreach ($this->dirs as $dir) { + $iterator->append($this->searchInDirectory($dir)); + } + + foreach ($this->iterators as $it) { + $iterator->append($it); + } + + return $iterator; + } + + /** + * Appends an existing set of files/directories to the finder. + * + * The set can be another Finder, an Iterator, an IteratorAggregate, or even a plain array. + * + * @return $this + * + * @throws \InvalidArgumentException when the given argument is not iterable + */ + public function append(iterable $iterator) + { + if ($iterator instanceof \IteratorAggregate) { + $this->iterators[] = $iterator->getIterator(); + } elseif ($iterator instanceof \Iterator) { + $this->iterators[] = $iterator; + } elseif ($iterator instanceof \Traversable || \is_array($iterator)) { + $it = new \ArrayIterator(); + foreach ($iterator as $file) { + $it->append($file instanceof \SplFileInfo ? $file : new \SplFileInfo($file)); + } + $this->iterators[] = $it; + } else { + throw new \InvalidArgumentException('Finder::append() method wrong argument type.'); + } + + return $this; + } + + /** + * Check if the any results were found. + * + * @return bool + */ + public function hasResults() + { + foreach ($this->getIterator() as $_) { + return true; + } + + return false; + } + + /** + * Counts all the results collected by the iterators. + * + * @return int + */ + public function count() + { + return iterator_count($this->getIterator()); + } + + private function searchInDirectory(string $dir): \Iterator + { + $exclude = $this->exclude; + $notPaths = $this->notPaths; + + if (static::IGNORE_VCS_FILES === (static::IGNORE_VCS_FILES & $this->ignore)) { + $exclude = array_merge($exclude, self::$vcsPatterns); + } + + if (static::IGNORE_DOT_FILES === (static::IGNORE_DOT_FILES & $this->ignore)) { + $notPaths[] = '#(^|/)\..+(/|$)#'; + } + + if (static::IGNORE_VCS_IGNORED_FILES === (static::IGNORE_VCS_IGNORED_FILES & $this->ignore)) { + $gitignoreFilePath = sprintf('%s/.gitignore', $dir); + if (!is_readable($gitignoreFilePath)) { + throw new \RuntimeException(sprintf('The "ignoreVCSIgnored" option cannot be used by the Finder as the "%s" file is not readable.', $gitignoreFilePath)); + } + $notPaths = array_merge($notPaths, [Gitignore::toRegex(file_get_contents($gitignoreFilePath))]); + } + + $minDepth = 0; + $maxDepth = PHP_INT_MAX; + + foreach ($this->depths as $comparator) { + switch ($comparator->getOperator()) { + case '>': + $minDepth = $comparator->getTarget() + 1; + break; + case '>=': + $minDepth = $comparator->getTarget(); + break; + case '<': + $maxDepth = $comparator->getTarget() - 1; + break; + case '<=': + $maxDepth = $comparator->getTarget(); + break; + default: + $minDepth = $maxDepth = $comparator->getTarget(); + } + } + + $flags = \RecursiveDirectoryIterator::SKIP_DOTS; + + if ($this->followLinks) { + $flags |= \RecursiveDirectoryIterator::FOLLOW_SYMLINKS; + } + + $iterator = new Iterator\RecursiveDirectoryIterator($dir, $flags, $this->ignoreUnreadableDirs); + + if ($exclude) { + $iterator = new Iterator\ExcludeDirectoryFilterIterator($iterator, $exclude); + } + + $iterator = new \RecursiveIteratorIterator($iterator, \RecursiveIteratorIterator::SELF_FIRST); + + if ($minDepth > 0 || $maxDepth < PHP_INT_MAX) { + $iterator = new Iterator\DepthRangeFilterIterator($iterator, $minDepth, $maxDepth); + } + + if ($this->mode) { + $iterator = new Iterator\FileTypeFilterIterator($iterator, $this->mode); + } + + if ($this->names || $this->notNames) { + $iterator = new Iterator\FilenameFilterIterator($iterator, $this->names, $this->notNames); + } + + if ($this->contains || $this->notContains) { + $iterator = new Iterator\FilecontentFilterIterator($iterator, $this->contains, $this->notContains); + } + + if ($this->sizes) { + $iterator = new Iterator\SizeRangeFilterIterator($iterator, $this->sizes); + } + + if ($this->dates) { + $iterator = new Iterator\DateRangeFilterIterator($iterator, $this->dates); + } + + if ($this->filters) { + $iterator = new Iterator\CustomFilterIterator($iterator, $this->filters); + } + + if ($this->paths || $notPaths) { + $iterator = new Iterator\PathFilterIterator($iterator, $this->paths, $notPaths); + } + + if ($this->sort || $this->reverseSorting) { + $iteratorAggregate = new Iterator\SortableIterator($iterator, $this->sort, $this->reverseSorting); + $iterator = $iteratorAggregate->getIterator(); + } + + return $iterator; + } + + /** + * Normalizes given directory names by removing trailing slashes. + * + * Excluding: (s)ftp:// or ssh2.(s)ftp:// wrapper + */ + private function normalizeDir(string $dir): string + { + if ('/' === $dir) { + return $dir; + } + + $dir = rtrim($dir, '/'.\DIRECTORY_SEPARATOR); + + if (preg_match('#^(ssh2\.)?s?ftp://#', $dir)) { + $dir .= '/'; + } + + return $dir; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/finder/Gitignore.php b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Gitignore.php new file mode 100644 index 0000000..5ffe585 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Gitignore.php @@ -0,0 +1,105 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder; + +/** + * Gitignore matches against text. + * + * @author Ahmed Abdou + */ +class Gitignore +{ + /** + * Returns a regexp which is the equivalent of the gitignore pattern. + * + * @return string The regexp + */ + public static function toRegex(string $gitignoreFileContent): string + { + $gitignoreFileContent = preg_replace('/^[^\\\r\n]*#.*/m', '', $gitignoreFileContent); + $gitignoreLines = preg_split('/\r\n|\r|\n/', $gitignoreFileContent); + $gitignoreLines = array_map('trim', $gitignoreLines); + $gitignoreLines = array_filter($gitignoreLines); + + $ignoreLinesPositive = array_filter($gitignoreLines, function (string $line) { + return !preg_match('/^!/', $line); + }); + + $ignoreLinesNegative = array_filter($gitignoreLines, function (string $line) { + return preg_match('/^!/', $line); + }); + + $ignoreLinesNegative = array_map(function (string $line) { + return preg_replace('/^!(.*)/', '${1}', $line); + }, $ignoreLinesNegative); + $ignoreLinesNegative = array_map([__CLASS__, 'getRegexFromGitignore'], $ignoreLinesNegative); + + $ignoreLinesPositive = array_map([__CLASS__, 'getRegexFromGitignore'], $ignoreLinesPositive); + if (empty($ignoreLinesPositive)) { + return '/^$/'; + } + + if (empty($ignoreLinesNegative)) { + return sprintf('/%s/', implode('|', $ignoreLinesPositive)); + } + + return sprintf('/(?=^(?:(?!(%s)).)*$)(%s)/', implode('|', $ignoreLinesNegative), implode('|', $ignoreLinesPositive)); + } + + private static function getRegexFromGitignore(string $gitignorePattern): string + { + $regex = '('; + if (0 === strpos($gitignorePattern, '/')) { + $gitignorePattern = substr($gitignorePattern, 1); + $regex .= '^'; + } else { + $regex .= '(^|\/)'; + } + + if ('/' === $gitignorePattern[\strlen($gitignorePattern) - 1]) { + $gitignorePattern = substr($gitignorePattern, 0, -1); + } + + $iMax = \strlen($gitignorePattern); + for ($i = 0; $i < $iMax; ++$i) { + $doubleChars = substr($gitignorePattern, $i, 2); + if ('**' === $doubleChars) { + $regex .= '.+'; + ++$i; + continue; + } + + $c = $gitignorePattern[$i]; + switch ($c) { + case '*': + $regex .= '[^\/]+'; + break; + case '/': + case '.': + case ':': + case '(': + case ')': + case '{': + case '}': + $regex .= '\\'.$c; + break; + default: + $regex .= $c; + } + } + + $regex .= '($|\/)'; + $regex .= ')'; + + return $regex; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/finder/Glob.php b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Glob.php new file mode 100644 index 0000000..8447932 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Glob.php @@ -0,0 +1,111 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder; + +/** + * Glob matches globbing patterns against text. + * + * if match_glob("foo.*", "foo.bar") echo "matched\n"; + * + * // prints foo.bar and foo.baz + * $regex = glob_to_regex("foo.*"); + * for (['foo.bar', 'foo.baz', 'foo', 'bar'] as $t) + * { + * if (/$regex/) echo "matched: $car\n"; + * } + * + * Glob implements glob(3) style matching that can be used to match + * against text, rather than fetching names from a filesystem. + * + * Based on the Perl Text::Glob module. + * + * @author Fabien Potencier PHP port + * @author Richard Clamp Perl version + * @copyright 2004-2005 Fabien Potencier + * @copyright 2002 Richard Clamp + */ +class Glob +{ + /** + * Returns a regexp which is the equivalent of the glob pattern. + * + * @return string + */ + public static function toRegex(string $glob, bool $strictLeadingDot = true, bool $strictWildcardSlash = true, string $delimiter = '#') + { + $firstByte = true; + $escaping = false; + $inCurlies = 0; + $regex = ''; + $sizeGlob = \strlen($glob); + for ($i = 0; $i < $sizeGlob; ++$i) { + $car = $glob[$i]; + if ($firstByte && $strictLeadingDot && '.' !== $car) { + $regex .= '(?=[^\.])'; + } + + $firstByte = '/' === $car; + + if ($firstByte && $strictWildcardSlash && isset($glob[$i + 2]) && '**' === $glob[$i + 1].$glob[$i + 2] && (!isset($glob[$i + 3]) || '/' === $glob[$i + 3])) { + $car = '[^/]++/'; + if (!isset($glob[$i + 3])) { + $car .= '?'; + } + + if ($strictLeadingDot) { + $car = '(?=[^\.])'.$car; + } + + $car = '/(?:'.$car.')*'; + $i += 2 + isset($glob[$i + 3]); + + if ('/' === $delimiter) { + $car = str_replace('/', '\\/', $car); + } + } + + if ($delimiter === $car || '.' === $car || '(' === $car || ')' === $car || '|' === $car || '+' === $car || '^' === $car || '$' === $car) { + $regex .= "\\$car"; + } elseif ('*' === $car) { + $regex .= $escaping ? '\\*' : ($strictWildcardSlash ? '[^/]*' : '.*'); + } elseif ('?' === $car) { + $regex .= $escaping ? '\\?' : ($strictWildcardSlash ? '[^/]' : '.'); + } elseif ('{' === $car) { + $regex .= $escaping ? '\\{' : '('; + if (!$escaping) { + ++$inCurlies; + } + } elseif ('}' === $car && $inCurlies) { + $regex .= $escaping ? '}' : ')'; + if (!$escaping) { + --$inCurlies; + } + } elseif (',' === $car && $inCurlies) { + $regex .= $escaping ? ',' : '|'; + } elseif ('\\' === $car) { + if ($escaping) { + $regex .= '\\\\'; + $escaping = false; + } else { + $escaping = true; + } + + continue; + } else { + $regex .= $car; + } + $escaping = false; + } + + return $delimiter.'^'.$regex.'$'.$delimiter; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/CustomFilterIterator.php b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/CustomFilterIterator.php new file mode 100644 index 0000000..a30bbd0 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/CustomFilterIterator.php @@ -0,0 +1,61 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * CustomFilterIterator filters files by applying anonymous functions. + * + * The anonymous function receives a \SplFileInfo and must return false + * to remove files. + * + * @author Fabien Potencier + */ +class CustomFilterIterator extends \FilterIterator +{ + private $filters = []; + + /** + * @param \Iterator $iterator The Iterator to filter + * @param callable[] $filters An array of PHP callbacks + * + * @throws \InvalidArgumentException + */ + public function __construct(\Iterator $iterator, array $filters) + { + foreach ($filters as $filter) { + if (!\is_callable($filter)) { + throw new \InvalidArgumentException('Invalid PHP callback.'); + } + } + $this->filters = $filters; + + parent::__construct($iterator); + } + + /** + * Filters the iterator values. + * + * @return bool true if the value should be kept, false otherwise + */ + public function accept() + { + $fileinfo = $this->current(); + + foreach ($this->filters as $filter) { + if (false === $filter($fileinfo)) { + return false; + } + } + + return true; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php new file mode 100644 index 0000000..2e97e00 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php @@ -0,0 +1,58 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +use Symfony\Component\Finder\Comparator\DateComparator; + +/** + * DateRangeFilterIterator filters out files that are not in the given date range (last modified dates). + * + * @author Fabien Potencier + */ +class DateRangeFilterIterator extends \FilterIterator +{ + private $comparators = []; + + /** + * @param \Iterator $iterator The Iterator to filter + * @param DateComparator[] $comparators An array of DateComparator instances + */ + public function __construct(\Iterator $iterator, array $comparators) + { + $this->comparators = $comparators; + + parent::__construct($iterator); + } + + /** + * Filters the iterator values. + * + * @return bool true if the value should be kept, false otherwise + */ + public function accept() + { + $fileinfo = $this->current(); + + if (!file_exists($fileinfo->getPathname())) { + return false; + } + + $filedate = $fileinfo->getMTime(); + foreach ($this->comparators as $compare) { + if (!$compare->test($filedate)) { + return false; + } + } + + return true; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php new file mode 100644 index 0000000..436a66d --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php @@ -0,0 +1,45 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * DepthRangeFilterIterator limits the directory depth. + * + * @author Fabien Potencier + */ +class DepthRangeFilterIterator extends \FilterIterator +{ + private $minDepth = 0; + + /** + * @param \RecursiveIteratorIterator $iterator The Iterator to filter + * @param int $minDepth The min depth + * @param int $maxDepth The max depth + */ + public function __construct(\RecursiveIteratorIterator $iterator, int $minDepth = 0, int $maxDepth = PHP_INT_MAX) + { + $this->minDepth = $minDepth; + $iterator->setMaxDepth(PHP_INT_MAX === $maxDepth ? -1 : $maxDepth); + + parent::__construct($iterator); + } + + /** + * Filters the iterator values. + * + * @return bool true if the value should be kept, false otherwise + */ + public function accept() + { + return $this->getInnerIterator()->getDepth() >= $this->minDepth; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php new file mode 100644 index 0000000..6a1b291 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php @@ -0,0 +1,87 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * ExcludeDirectoryFilterIterator filters out directories. + * + * @author Fabien Potencier + */ +class ExcludeDirectoryFilterIterator extends \FilterIterator implements \RecursiveIterator +{ + private $iterator; + private $isRecursive; + private $excludedDirs = []; + private $excludedPattern; + + /** + * @param \Iterator $iterator The Iterator to filter + * @param string[] $directories An array of directories to exclude + */ + public function __construct(\Iterator $iterator, array $directories) + { + $this->iterator = $iterator; + $this->isRecursive = $iterator instanceof \RecursiveIterator; + $patterns = []; + foreach ($directories as $directory) { + $directory = rtrim($directory, '/'); + if (!$this->isRecursive || false !== strpos($directory, '/')) { + $patterns[] = preg_quote($directory, '#'); + } else { + $this->excludedDirs[$directory] = true; + } + } + if ($patterns) { + $this->excludedPattern = '#(?:^|/)(?:'.implode('|', $patterns).')(?:/|$)#'; + } + + parent::__construct($iterator); + } + + /** + * Filters the iterator values. + * + * @return bool True if the value should be kept, false otherwise + */ + public function accept() + { + if ($this->isRecursive && isset($this->excludedDirs[$this->getFilename()]) && $this->isDir()) { + return false; + } + + if ($this->excludedPattern) { + $path = $this->isDir() ? $this->current()->getRelativePathname() : $this->current()->getRelativePath(); + $path = str_replace('\\', '/', $path); + + return !preg_match($this->excludedPattern, $path); + } + + return true; + } + + /** + * @return bool + */ + public function hasChildren() + { + return $this->isRecursive && $this->iterator->hasChildren(); + } + + public function getChildren() + { + $children = new self($this->iterator->getChildren(), []); + $children->excludedDirs = $this->excludedDirs; + $children->excludedPattern = $this->excludedPattern; + + return $children; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php new file mode 100644 index 0000000..a4c4eec --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php @@ -0,0 +1,53 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * FileTypeFilterIterator only keeps files, directories, or both. + * + * @author Fabien Potencier + */ +class FileTypeFilterIterator extends \FilterIterator +{ + const ONLY_FILES = 1; + const ONLY_DIRECTORIES = 2; + + private $mode; + + /** + * @param \Iterator $iterator The Iterator to filter + * @param int $mode The mode (self::ONLY_FILES or self::ONLY_DIRECTORIES) + */ + public function __construct(\Iterator $iterator, int $mode) + { + $this->mode = $mode; + + parent::__construct($iterator); + } + + /** + * Filters the iterator values. + * + * @return bool true if the value should be kept, false otherwise + */ + public function accept() + { + $fileinfo = $this->current(); + if (self::ONLY_DIRECTORIES === (self::ONLY_DIRECTORIES & $this->mode) && $fileinfo->isFile()) { + return false; + } elseif (self::ONLY_FILES === (self::ONLY_FILES & $this->mode) && $fileinfo->isDir()) { + return false; + } + + return true; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php new file mode 100644 index 0000000..b26a368 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php @@ -0,0 +1,58 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * FilecontentFilterIterator filters files by their contents using patterns (regexps or strings). + * + * @author Fabien Potencier + * @author WÅ‚odzimierz Gajda + */ +class FilecontentFilterIterator extends MultiplePcreFilterIterator +{ + /** + * Filters the iterator values. + * + * @return bool true if the value should be kept, false otherwise + */ + public function accept() + { + if (!$this->matchRegexps && !$this->noMatchRegexps) { + return true; + } + + $fileinfo = $this->current(); + + if ($fileinfo->isDir() || !$fileinfo->isReadable()) { + return false; + } + + $content = $fileinfo->getContents(); + if (!$content) { + return false; + } + + return $this->isAccepted($content); + } + + /** + * Converts string to regexp if necessary. + * + * @param string $str Pattern: string or regexp + * + * @return string regexp corresponding to a given string or regexp + */ + protected function toRegex(string $str) + { + return $this->isRegex($str) ? $str : '/'.preg_quote($str, '/').'/'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/FilenameFilterIterator.php b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/FilenameFilterIterator.php new file mode 100644 index 0000000..dedd1ca --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/FilenameFilterIterator.php @@ -0,0 +1,47 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +use Symfony\Component\Finder\Glob; + +/** + * FilenameFilterIterator filters files by patterns (a regexp, a glob, or a string). + * + * @author Fabien Potencier + */ +class FilenameFilterIterator extends MultiplePcreFilterIterator +{ + /** + * Filters the iterator values. + * + * @return bool true if the value should be kept, false otherwise + */ + public function accept() + { + return $this->isAccepted($this->current()->getFilename()); + } + + /** + * Converts glob to regexp. + * + * PCRE patterns are left unchanged. + * Glob strings are transformed with Glob::toRegex(). + * + * @param string $str Pattern: glob or regexp + * + * @return string regexp corresponding to a given glob or regexp + */ + protected function toRegex(string $str) + { + return $this->isRegex($str) ? $str : Glob::toRegex($str); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php new file mode 100644 index 0000000..78a34ab --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php @@ -0,0 +1,106 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * MultiplePcreFilterIterator filters files using patterns (regexps, globs or strings). + * + * @author Fabien Potencier + */ +abstract class MultiplePcreFilterIterator extends \FilterIterator +{ + protected $matchRegexps = []; + protected $noMatchRegexps = []; + + /** + * @param \Iterator $iterator The Iterator to filter + * @param string[] $matchPatterns An array of patterns that need to match + * @param string[] $noMatchPatterns An array of patterns that need to not match + */ + public function __construct(\Iterator $iterator, array $matchPatterns, array $noMatchPatterns) + { + foreach ($matchPatterns as $pattern) { + $this->matchRegexps[] = $this->toRegex($pattern); + } + + foreach ($noMatchPatterns as $pattern) { + $this->noMatchRegexps[] = $this->toRegex($pattern); + } + + parent::__construct($iterator); + } + + /** + * Checks whether the string is accepted by the regex filters. + * + * If there is no regexps defined in the class, this method will accept the string. + * Such case can be handled by child classes before calling the method if they want to + * apply a different behavior. + * + * @return bool + */ + protected function isAccepted(string $string) + { + // should at least not match one rule to exclude + foreach ($this->noMatchRegexps as $regex) { + if (preg_match($regex, $string)) { + return false; + } + } + + // should at least match one rule + if ($this->matchRegexps) { + foreach ($this->matchRegexps as $regex) { + if (preg_match($regex, $string)) { + return true; + } + } + + return false; + } + + // If there is no match rules, the file is accepted + return true; + } + + /** + * Checks whether the string is a regex. + * + * @return bool + */ + protected function isRegex(string $str) + { + if (preg_match('/^(.{3,}?)[imsxuADU]*$/', $str, $m)) { + $start = substr($m[1], 0, 1); + $end = substr($m[1], -1); + + if ($start === $end) { + return !preg_match('/[*?[:alnum:] \\\\]/', $start); + } + + foreach ([['{', '}'], ['(', ')'], ['[', ']'], ['<', '>']] as $delimiters) { + if ($start === $delimiters[0] && $end === $delimiters[1]) { + return true; + } + } + } + + return false; + } + + /** + * Converts string into regexp. + * + * @return string + */ + abstract protected function toRegex(string $str); +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/PathFilterIterator.php b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/PathFilterIterator.php new file mode 100644 index 0000000..67b71f4 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/PathFilterIterator.php @@ -0,0 +1,56 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * PathFilterIterator filters files by path patterns (e.g. some/special/dir). + * + * @author Fabien Potencier + * @author WÅ‚odzimierz Gajda + */ +class PathFilterIterator extends MultiplePcreFilterIterator +{ + /** + * Filters the iterator values. + * + * @return bool true if the value should be kept, false otherwise + */ + public function accept() + { + $filename = $this->current()->getRelativePathname(); + + if ('\\' === \DIRECTORY_SEPARATOR) { + $filename = str_replace('\\', '/', $filename); + } + + return $this->isAccepted($filename); + } + + /** + * Converts strings to regexp. + * + * PCRE patterns are left unchanged. + * + * Default conversion: + * 'lorem/ipsum/dolor' ==> 'lorem\/ipsum\/dolor/' + * + * Use only / as directory separator (on Windows also). + * + * @param string $str Pattern: regexp or dirname + * + * @return string regexp corresponding to a given string or regexp + */ + protected function toRegex(string $str) + { + return $this->isRegex($str) ? $str : '/'.preg_quote($str, '/').'/'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php new file mode 100644 index 0000000..7616b14 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php @@ -0,0 +1,144 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +use Symfony\Component\Finder\Exception\AccessDeniedException; +use Symfony\Component\Finder\SplFileInfo; + +/** + * Extends the \RecursiveDirectoryIterator to support relative paths. + * + * @author Victor Berchet + */ +class RecursiveDirectoryIterator extends \RecursiveDirectoryIterator +{ + /** + * @var bool + */ + private $ignoreUnreadableDirs; + + /** + * @var bool + */ + private $rewindable; + + // these 3 properties take part of the performance optimization to avoid redoing the same work in all iterations + private $rootPath; + private $subPath; + private $directorySeparator = '/'; + + /** + * @throws \RuntimeException + */ + public function __construct(string $path, int $flags, bool $ignoreUnreadableDirs = false) + { + if ($flags & (self::CURRENT_AS_PATHNAME | self::CURRENT_AS_SELF)) { + throw new \RuntimeException('This iterator only support returning current as fileinfo.'); + } + + parent::__construct($path, $flags); + $this->ignoreUnreadableDirs = $ignoreUnreadableDirs; + $this->rootPath = $path; + if ('/' !== \DIRECTORY_SEPARATOR && !($flags & self::UNIX_PATHS)) { + $this->directorySeparator = \DIRECTORY_SEPARATOR; + } + } + + /** + * Return an instance of SplFileInfo with support for relative paths. + * + * @return SplFileInfo File information + */ + public function current() + { + // the logic here avoids redoing the same work in all iterations + + if (null === $subPathname = $this->subPath) { + $subPathname = $this->subPath = (string) $this->getSubPath(); + } + if ('' !== $subPathname) { + $subPathname .= $this->directorySeparator; + } + $subPathname .= $this->getFilename(); + + if ('/' !== $basePath = $this->rootPath) { + $basePath .= $this->directorySeparator; + } + + return new SplFileInfo($basePath.$subPathname, $this->subPath, $subPathname); + } + + /** + * @return \RecursiveIterator + * + * @throws AccessDeniedException + */ + public function getChildren() + { + try { + $children = parent::getChildren(); + + if ($children instanceof self) { + // parent method will call the constructor with default arguments, so unreadable dirs won't be ignored anymore + $children->ignoreUnreadableDirs = $this->ignoreUnreadableDirs; + + // performance optimization to avoid redoing the same work in all children + $children->rewindable = &$this->rewindable; + $children->rootPath = $this->rootPath; + } + + return $children; + } catch (\UnexpectedValueException $e) { + if ($this->ignoreUnreadableDirs) { + // If directory is unreadable and finder is set to ignore it, a fake empty content is returned. + return new \RecursiveArrayIterator([]); + } else { + throw new AccessDeniedException($e->getMessage(), $e->getCode(), $e); + } + } + } + + /** + * Do nothing for non rewindable stream. + */ + public function rewind() + { + if (false === $this->isRewindable()) { + return; + } + + parent::rewind(); + } + + /** + * Checks if the stream is rewindable. + * + * @return bool true when the stream is rewindable, false otherwise + */ + public function isRewindable() + { + if (null !== $this->rewindable) { + return $this->rewindable; + } + + if (false !== $stream = @opendir($this->getPath())) { + $infos = stream_get_meta_data($stream); + closedir($stream); + + if ($infos['seekable']) { + return $this->rewindable = true; + } + } + + return $this->rewindable = false; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php new file mode 100644 index 0000000..2aeef67 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php @@ -0,0 +1,57 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +use Symfony\Component\Finder\Comparator\NumberComparator; + +/** + * SizeRangeFilterIterator filters out files that are not in the given size range. + * + * @author Fabien Potencier + */ +class SizeRangeFilterIterator extends \FilterIterator +{ + private $comparators = []; + + /** + * @param \Iterator $iterator The Iterator to filter + * @param NumberComparator[] $comparators An array of NumberComparator instances + */ + public function __construct(\Iterator $iterator, array $comparators) + { + $this->comparators = $comparators; + + parent::__construct($iterator); + } + + /** + * Filters the iterator values. + * + * @return bool true if the value should be kept, false otherwise + */ + public function accept() + { + $fileinfo = $this->current(); + if (!$fileinfo->isFile()) { + return true; + } + + $filesize = $fileinfo->getSize(); + foreach ($this->comparators as $compare) { + if (!$compare->test($filesize)) { + return false; + } + } + + return true; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/SortableIterator.php b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/SortableIterator.php new file mode 100644 index 0000000..2aca397 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/finder/Iterator/SortableIterator.php @@ -0,0 +1,101 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * SortableIterator applies a sort on a given Iterator. + * + * @author Fabien Potencier + */ +class SortableIterator implements \IteratorAggregate +{ + const SORT_BY_NONE = 0; + const SORT_BY_NAME = 1; + const SORT_BY_TYPE = 2; + const SORT_BY_ACCESSED_TIME = 3; + const SORT_BY_CHANGED_TIME = 4; + const SORT_BY_MODIFIED_TIME = 5; + const SORT_BY_NAME_NATURAL = 6; + + private $iterator; + private $sort; + + /** + * @param \Traversable $iterator The Iterator to filter + * @param int|callable $sort The sort type (SORT_BY_NAME, SORT_BY_TYPE, or a PHP callback) + * + * @throws \InvalidArgumentException + */ + public function __construct(\Traversable $iterator, $sort, bool $reverseOrder = false) + { + $this->iterator = $iterator; + $order = $reverseOrder ? -1 : 1; + + if (self::SORT_BY_NAME === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + return $order * strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); + }; + } elseif (self::SORT_BY_NAME_NATURAL === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + return $order * strnatcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); + }; + } elseif (self::SORT_BY_TYPE === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + if ($a->isDir() && $b->isFile()) { + return -$order; + } elseif ($a->isFile() && $b->isDir()) { + return $order; + } + + return $order * strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); + }; + } elseif (self::SORT_BY_ACCESSED_TIME === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + return $order * ($a->getATime() - $b->getATime()); + }; + } elseif (self::SORT_BY_CHANGED_TIME === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + return $order * ($a->getCTime() - $b->getCTime()); + }; + } elseif (self::SORT_BY_MODIFIED_TIME === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + return $order * ($a->getMTime() - $b->getMTime()); + }; + } elseif (self::SORT_BY_NONE === $sort) { + $this->sort = $order; + } elseif (\is_callable($sort)) { + $this->sort = $reverseOrder ? static function (\SplFileInfo $a, \SplFileInfo $b) use ($sort) { return -$sort($a, $b); } : $sort; + } else { + throw new \InvalidArgumentException('The SortableIterator takes a PHP callable or a valid built-in sort algorithm as an argument.'); + } + } + + /** + * @return \Traversable + */ + public function getIterator() + { + if (1 === $this->sort) { + return $this->iterator; + } + + $array = iterator_to_array($this->iterator, true); + + if (-1 === $this->sort) { + $array = array_reverse($array); + } else { + uasort($array, $this->sort); + } + + return new \ArrayIterator($array); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/finder/LICENSE b/soc/2020/daily_report/archive/app/vendor/symfony/finder/LICENSE new file mode 100644 index 0000000..9e936ec --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/finder/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2004-2020 Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/finder/README.md b/soc/2020/daily_report/archive/app/vendor/symfony/finder/README.md new file mode 100644 index 0000000..0b19c75 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/finder/README.md @@ -0,0 +1,14 @@ +Finder Component +================ + +The Finder component finds files and directories via an intuitive fluent +interface. + +Resources +--------- + + * [Documentation](https://symfony.com/doc/current/components/finder.html) + * [Contributing](https://symfony.com/doc/current/contributing/index.html) + * [Report issues](https://github.com/symfony/symfony/issues) and + [send Pull Requests](https://github.com/symfony/symfony/pulls) + in the [main Symfony repository](https://github.com/symfony/symfony) diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/finder/SplFileInfo.php b/soc/2020/daily_report/archive/app/vendor/symfony/finder/SplFileInfo.php new file mode 100644 index 0000000..65d7423 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/finder/SplFileInfo.php @@ -0,0 +1,85 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder; + +/** + * Extends \SplFileInfo to support relative paths. + * + * @author Fabien Potencier + */ +class SplFileInfo extends \SplFileInfo +{ + private $relativePath; + private $relativePathname; + + /** + * @param string $file The file name + * @param string $relativePath The relative path + * @param string $relativePathname The relative path name + */ + public function __construct(string $file, string $relativePath, string $relativePathname) + { + parent::__construct($file); + $this->relativePath = $relativePath; + $this->relativePathname = $relativePathname; + } + + /** + * Returns the relative path. + * + * This path does not contain the file name. + * + * @return string the relative path + */ + public function getRelativePath() + { + return $this->relativePath; + } + + /** + * Returns the relative path name. + * + * This path contains the file name. + * + * @return string the relative path name + */ + public function getRelativePathname() + { + return $this->relativePathname; + } + + public function getFilenameWithoutExtension(): string + { + $filename = $this->getFilename(); + + return pathinfo($filename, PATHINFO_FILENAME); + } + + /** + * Returns the contents of the file. + * + * @return string the contents of the file + * + * @throws \RuntimeException + */ + public function getContents() + { + set_error_handler(function ($type, $msg) use (&$error) { $error = $msg; }); + $content = file_get_contents($this->getPathname()); + restore_error_handler(); + if (false === $content) { + throw new \RuntimeException($error); + } + + return $content; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/finder/composer.json b/soc/2020/daily_report/archive/app/vendor/symfony/finder/composer.json new file mode 100644 index 0000000..65a1988 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/finder/composer.json @@ -0,0 +1,33 @@ +{ + "name": "symfony/finder", + "type": "library", + "description": "Symfony Finder Component", + "keywords": [], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": "^7.2.5" + }, + "autoload": { + "psr-4": { "Symfony\\Component\\Finder\\": "" }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-ctype/Ctype.php b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-ctype/Ctype.php new file mode 100644 index 0000000..58414dc --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-ctype/Ctype.php @@ -0,0 +1,227 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Ctype; + +/** + * Ctype implementation through regex. + * + * @internal + * + * @author Gert de Pagter + */ +final class Ctype +{ + /** + * Returns TRUE if every character in text is either a letter or a digit, FALSE otherwise. + * + * @see https://php.net/ctype-alnum + * + * @param string|int $text + * + * @return bool + */ + public static function ctype_alnum($text) + { + $text = self::convert_int_to_char_for_ctype($text); + + return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z0-9]/', $text); + } + + /** + * Returns TRUE if every character in text is a letter, FALSE otherwise. + * + * @see https://php.net/ctype-alpha + * + * @param string|int $text + * + * @return bool + */ + public static function ctype_alpha($text) + { + $text = self::convert_int_to_char_for_ctype($text); + + return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z]/', $text); + } + + /** + * Returns TRUE if every character in text is a control character from the current locale, FALSE otherwise. + * + * @see https://php.net/ctype-cntrl + * + * @param string|int $text + * + * @return bool + */ + public static function ctype_cntrl($text) + { + $text = self::convert_int_to_char_for_ctype($text); + + return \is_string($text) && '' !== $text && !preg_match('/[^\x00-\x1f\x7f]/', $text); + } + + /** + * Returns TRUE if every character in the string text is a decimal digit, FALSE otherwise. + * + * @see https://php.net/ctype-digit + * + * @param string|int $text + * + * @return bool + */ + public static function ctype_digit($text) + { + $text = self::convert_int_to_char_for_ctype($text); + + return \is_string($text) && '' !== $text && !preg_match('/[^0-9]/', $text); + } + + /** + * Returns TRUE if every character in text is printable and actually creates visible output (no white space), FALSE otherwise. + * + * @see https://php.net/ctype-graph + * + * @param string|int $text + * + * @return bool + */ + public static function ctype_graph($text) + { + $text = self::convert_int_to_char_for_ctype($text); + + return \is_string($text) && '' !== $text && !preg_match('/[^!-~]/', $text); + } + + /** + * Returns TRUE if every character in text is a lowercase letter. + * + * @see https://php.net/ctype-lower + * + * @param string|int $text + * + * @return bool + */ + public static function ctype_lower($text) + { + $text = self::convert_int_to_char_for_ctype($text); + + return \is_string($text) && '' !== $text && !preg_match('/[^a-z]/', $text); + } + + /** + * Returns TRUE if every character in text will actually create output (including blanks). Returns FALSE if text contains control characters or characters that do not have any output or control function at all. + * + * @see https://php.net/ctype-print + * + * @param string|int $text + * + * @return bool + */ + public static function ctype_print($text) + { + $text = self::convert_int_to_char_for_ctype($text); + + return \is_string($text) && '' !== $text && !preg_match('/[^ -~]/', $text); + } + + /** + * Returns TRUE if every character in text is printable, but neither letter, digit or blank, FALSE otherwise. + * + * @see https://php.net/ctype-punct + * + * @param string|int $text + * + * @return bool + */ + public static function ctype_punct($text) + { + $text = self::convert_int_to_char_for_ctype($text); + + return \is_string($text) && '' !== $text && !preg_match('/[^!-\/\:-@\[-`\{-~]/', $text); + } + + /** + * Returns TRUE if every character in text creates some sort of white space, FALSE otherwise. Besides the blank character this also includes tab, vertical tab, line feed, carriage return and form feed characters. + * + * @see https://php.net/ctype-space + * + * @param string|int $text + * + * @return bool + */ + public static function ctype_space($text) + { + $text = self::convert_int_to_char_for_ctype($text); + + return \is_string($text) && '' !== $text && !preg_match('/[^\s]/', $text); + } + + /** + * Returns TRUE if every character in text is an uppercase letter. + * + * @see https://php.net/ctype-upper + * + * @param string|int $text + * + * @return bool + */ + public static function ctype_upper($text) + { + $text = self::convert_int_to_char_for_ctype($text); + + return \is_string($text) && '' !== $text && !preg_match('/[^A-Z]/', $text); + } + + /** + * Returns TRUE if every character in text is a hexadecimal 'digit', that is a decimal digit or a character from [A-Fa-f] , FALSE otherwise. + * + * @see https://php.net/ctype-xdigit + * + * @param string|int $text + * + * @return bool + */ + public static function ctype_xdigit($text) + { + $text = self::convert_int_to_char_for_ctype($text); + + return \is_string($text) && '' !== $text && !preg_match('/[^A-Fa-f0-9]/', $text); + } + + /** + * Converts integers to their char versions according to normal ctype behaviour, if needed. + * + * If an integer between -128 and 255 inclusive is provided, + * it is interpreted as the ASCII value of a single character + * (negative values have 256 added in order to allow characters in the Extended ASCII range). + * Any other integer is interpreted as a string containing the decimal digits of the integer. + * + * @param string|int $int + * + * @return mixed + */ + private static function convert_int_to_char_for_ctype($int) + { + if (!\is_int($int)) { + return $int; + } + + if ($int < -128 || $int > 255) { + return (string) $int; + } + + if ($int < 0) { + $int += 256; + } + + return \chr($int); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-ctype/LICENSE b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-ctype/LICENSE new file mode 100644 index 0000000..3f853aa --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-ctype/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2018-2019 Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-ctype/README.md b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-ctype/README.md new file mode 100644 index 0000000..8add1ab --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-ctype/README.md @@ -0,0 +1,12 @@ +Symfony Polyfill / Ctype +======================== + +This component provides `ctype_*` functions to users who run php versions without the ctype extension. + +More information can be found in the +[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). + +License +======= + +This library is released under the [MIT license](LICENSE). diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-ctype/bootstrap.php b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-ctype/bootstrap.php new file mode 100644 index 0000000..14d1d0f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-ctype/bootstrap.php @@ -0,0 +1,26 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Polyfill\Ctype as p; + +if (!function_exists('ctype_alnum')) { + function ctype_alnum($text) { return p\Ctype::ctype_alnum($text); } + function ctype_alpha($text) { return p\Ctype::ctype_alpha($text); } + function ctype_cntrl($text) { return p\Ctype::ctype_cntrl($text); } + function ctype_digit($text) { return p\Ctype::ctype_digit($text); } + function ctype_graph($text) { return p\Ctype::ctype_graph($text); } + function ctype_lower($text) { return p\Ctype::ctype_lower($text); } + function ctype_print($text) { return p\Ctype::ctype_print($text); } + function ctype_punct($text) { return p\Ctype::ctype_punct($text); } + function ctype_space($text) { return p\Ctype::ctype_space($text); } + function ctype_upper($text) { return p\Ctype::ctype_upper($text); } + function ctype_xdigit($text) { return p\Ctype::ctype_xdigit($text); } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-ctype/composer.json b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-ctype/composer.json new file mode 100644 index 0000000..71d436e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-ctype/composer.json @@ -0,0 +1,34 @@ +{ + "name": "symfony/polyfill-ctype", + "type": "library", + "description": "Symfony polyfill for ctype functions", + "keywords": ["polyfill", "compatibility", "portable", "ctype"], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=5.3.3" + }, + "autoload": { + "psr-4": { "Symfony\\Polyfill\\Ctype\\": "" }, + "files": [ "bootstrap.php" ] + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-master": "1.15-dev" + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-mbstring/LICENSE b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-mbstring/LICENSE new file mode 100644 index 0000000..4cd8bdd --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-mbstring/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2015-2019 Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-mbstring/Mbstring.php b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-mbstring/Mbstring.php new file mode 100644 index 0000000..15503bc --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-mbstring/Mbstring.php @@ -0,0 +1,847 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Mbstring; + +/** + * Partial mbstring implementation in PHP, iconv based, UTF-8 centric. + * + * Implemented: + * - mb_chr - Returns a specific character from its Unicode code point + * - mb_convert_encoding - Convert character encoding + * - mb_convert_variables - Convert character code in variable(s) + * - mb_decode_mimeheader - Decode string in MIME header field + * - mb_encode_mimeheader - Encode string for MIME header XXX NATIVE IMPLEMENTATION IS REALLY BUGGED + * - mb_decode_numericentity - Decode HTML numeric string reference to character + * - mb_encode_numericentity - Encode character to HTML numeric string reference + * - mb_convert_case - Perform case folding on a string + * - mb_detect_encoding - Detect character encoding + * - mb_get_info - Get internal settings of mbstring + * - mb_http_input - Detect HTTP input character encoding + * - mb_http_output - Set/Get HTTP output character encoding + * - mb_internal_encoding - Set/Get internal character encoding + * - mb_list_encodings - Returns an array of all supported encodings + * - mb_ord - Returns the Unicode code point of a character + * - mb_output_handler - Callback function converts character encoding in output buffer + * - mb_scrub - Replaces ill-formed byte sequences with substitute characters + * - mb_strlen - Get string length + * - mb_strpos - Find position of first occurrence of string in a string + * - mb_strrpos - Find position of last occurrence of a string in a string + * - mb_str_split - Convert a string to an array + * - mb_strtolower - Make a string lowercase + * - mb_strtoupper - Make a string uppercase + * - mb_substitute_character - Set/Get substitution character + * - mb_substr - Get part of string + * - mb_stripos - Finds position of first occurrence of a string within another, case insensitive + * - mb_stristr - Finds first occurrence of a string within another, case insensitive + * - mb_strrchr - Finds the last occurrence of a character in a string within another + * - mb_strrichr - Finds the last occurrence of a character in a string within another, case insensitive + * - mb_strripos - Finds position of last occurrence of a string within another, case insensitive + * - mb_strstr - Finds first occurrence of a string within another + * - mb_strwidth - Return width of string + * - mb_substr_count - Count the number of substring occurrences + * + * Not implemented: + * - mb_convert_kana - Convert "kana" one from another ("zen-kaku", "han-kaku" and more) + * - mb_ereg_* - Regular expression with multibyte support + * - mb_parse_str - Parse GET/POST/COOKIE data and set global variable + * - mb_preferred_mime_name - Get MIME charset string + * - mb_regex_encoding - Returns current encoding for multibyte regex as string + * - mb_regex_set_options - Set/Get the default options for mbregex functions + * - mb_send_mail - Send encoded mail + * - mb_split - Split multibyte string using regular expression + * - mb_strcut - Get part of string + * - mb_strimwidth - Get truncated string with specified width + * + * @author Nicolas Grekas + * + * @internal + */ +final class Mbstring +{ + const MB_CASE_FOLD = PHP_INT_MAX; + + private static $encodingList = array('ASCII', 'UTF-8'); + private static $language = 'neutral'; + private static $internalEncoding = 'UTF-8'; + private static $caseFold = array( + array('µ', 'Å¿', "\xCD\x85", 'Ï‚', "\xCF\x90", "\xCF\x91", "\xCF\x95", "\xCF\x96", "\xCF\xB0", "\xCF\xB1", "\xCF\xB5", "\xE1\xBA\x9B", "\xE1\xBE\xBE"), + array('μ', 's', 'ι', 'σ', 'β', 'θ', 'φ', 'Ï€', 'κ', 'Ï', 'ε', "\xE1\xB9\xA1", 'ι'), + ); + + public static function mb_convert_encoding($s, $toEncoding, $fromEncoding = null) + { + if (\is_array($fromEncoding) || false !== strpos($fromEncoding, ',')) { + $fromEncoding = self::mb_detect_encoding($s, $fromEncoding); + } else { + $fromEncoding = self::getEncoding($fromEncoding); + } + + $toEncoding = self::getEncoding($toEncoding); + + if ('BASE64' === $fromEncoding) { + $s = base64_decode($s); + $fromEncoding = $toEncoding; + } + + if ('BASE64' === $toEncoding) { + return base64_encode($s); + } + + if ('HTML-ENTITIES' === $toEncoding || 'HTML' === $toEncoding) { + if ('HTML-ENTITIES' === $fromEncoding || 'HTML' === $fromEncoding) { + $fromEncoding = 'Windows-1252'; + } + if ('UTF-8' !== $fromEncoding) { + $s = iconv($fromEncoding, 'UTF-8//IGNORE', $s); + } + + return preg_replace_callback('/[\x80-\xFF]+/', array(__CLASS__, 'html_encoding_callback'), $s); + } + + if ('HTML-ENTITIES' === $fromEncoding) { + $s = html_entity_decode($s, ENT_COMPAT, 'UTF-8'); + $fromEncoding = 'UTF-8'; + } + + return iconv($fromEncoding, $toEncoding.'//IGNORE', $s); + } + + public static function mb_convert_variables($toEncoding, $fromEncoding, &$a = null, &$b = null, &$c = null, &$d = null, &$e = null, &$f = null) + { + $vars = array(&$a, &$b, &$c, &$d, &$e, &$f); + + $ok = true; + array_walk_recursive($vars, function (&$v) use (&$ok, $toEncoding, $fromEncoding) { + if (false === $v = Mbstring::mb_convert_encoding($v, $toEncoding, $fromEncoding)) { + $ok = false; + } + }); + + return $ok ? $fromEncoding : false; + } + + public static function mb_decode_mimeheader($s) + { + return iconv_mime_decode($s, 2, self::$internalEncoding); + } + + public static function mb_encode_mimeheader($s, $charset = null, $transferEncoding = null, $linefeed = null, $indent = null) + { + trigger_error('mb_encode_mimeheader() is bugged. Please use iconv_mime_encode() instead', E_USER_WARNING); + } + + public static function mb_decode_numericentity($s, $convmap, $encoding = null) + { + if (null !== $s && !\is_scalar($s) && !(\is_object($s) && \method_exists($s, '__toString'))) { + trigger_error('mb_decode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', E_USER_WARNING); + + return null; + } + + if (!\is_array($convmap) || !$convmap) { + return false; + } + + if (null !== $encoding && !\is_scalar($encoding)) { + trigger_error('mb_decode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', E_USER_WARNING); + + return ''; // Instead of null (cf. mb_encode_numericentity). + } + + $s = (string) $s; + if ('' === $s) { + return ''; + } + + $encoding = self::getEncoding($encoding); + + if ('UTF-8' === $encoding) { + $encoding = null; + if (!preg_match('//u', $s)) { + $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s); + } + } else { + $s = iconv($encoding, 'UTF-8//IGNORE', $s); + } + + $cnt = floor(\count($convmap) / 4) * 4; + + for ($i = 0; $i < $cnt; $i += 4) { + // collector_decode_htmlnumericentity ignores $convmap[$i + 3] + $convmap[$i] += $convmap[$i + 2]; + $convmap[$i + 1] += $convmap[$i + 2]; + } + + $s = preg_replace_callback('/&#(?:0*([0-9]+)|x0*([0-9a-fA-F]+))(?!&);?/', function (array $m) use ($cnt, $convmap) { + $c = isset($m[2]) ? (int) hexdec($m[2]) : $m[1]; + for ($i = 0; $i < $cnt; $i += 4) { + if ($c >= $convmap[$i] && $c <= $convmap[$i + 1]) { + return Mbstring::mb_chr($c - $convmap[$i + 2]); + } + } + + return $m[0]; + }, $s); + + if (null === $encoding) { + return $s; + } + + return iconv('UTF-8', $encoding.'//IGNORE', $s); + } + + public static function mb_encode_numericentity($s, $convmap, $encoding = null, $is_hex = false) + { + if (null !== $s && !\is_scalar($s) && !(\is_object($s) && \method_exists($s, '__toString'))) { + trigger_error('mb_encode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', E_USER_WARNING); + + return null; + } + + if (!\is_array($convmap) || !$convmap) { + return false; + } + + if (null !== $encoding && !\is_scalar($encoding)) { + trigger_error('mb_encode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', E_USER_WARNING); + + return null; // Instead of '' (cf. mb_decode_numericentity). + } + + if (null !== $is_hex && !\is_scalar($is_hex)) { + trigger_error('mb_encode_numericentity() expects parameter 4 to be boolean, '.\gettype($s).' given', E_USER_WARNING); + + return null; + } + + $s = (string) $s; + if ('' === $s) { + return ''; + } + + $encoding = self::getEncoding($encoding); + + if ('UTF-8' === $encoding) { + $encoding = null; + if (!preg_match('//u', $s)) { + $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s); + } + } else { + $s = iconv($encoding, 'UTF-8//IGNORE', $s); + } + + static $ulenMask = array("\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4); + + $cnt = floor(\count($convmap) / 4) * 4; + $i = 0; + $len = \strlen($s); + $result = ''; + + while ($i < $len) { + $ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"]; + $uchr = substr($s, $i, $ulen); + $i += $ulen; + $c = self::mb_ord($uchr); + + for ($j = 0; $j < $cnt; $j += 4) { + if ($c >= $convmap[$j] && $c <= $convmap[$j + 1]) { + $cOffset = ($c + $convmap[$j + 2]) & $convmap[$j + 3]; + $result .= $is_hex ? sprintf('&#x%X;', $cOffset) : '&#'.$cOffset.';'; + continue 2; + } + } + $result .= $uchr; + } + + if (null === $encoding) { + return $result; + } + + return iconv('UTF-8', $encoding.'//IGNORE', $result); + } + + public static function mb_convert_case($s, $mode, $encoding = null) + { + $s = (string) $s; + if ('' === $s) { + return ''; + } + + $encoding = self::getEncoding($encoding); + + if ('UTF-8' === $encoding) { + $encoding = null; + if (!preg_match('//u', $s)) { + $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s); + } + } else { + $s = iconv($encoding, 'UTF-8//IGNORE', $s); + } + + if (MB_CASE_TITLE == $mode) { + static $titleRegexp = null; + if (null === $titleRegexp) { + $titleRegexp = self::getData('titleCaseRegexp'); + } + $s = preg_replace_callback($titleRegexp, array(__CLASS__, 'title_case'), $s); + } else { + if (MB_CASE_UPPER == $mode) { + static $upper = null; + if (null === $upper) { + $upper = self::getData('upperCase'); + } + $map = $upper; + } else { + if (self::MB_CASE_FOLD === $mode) { + $s = str_replace(self::$caseFold[0], self::$caseFold[1], $s); + } + + static $lower = null; + if (null === $lower) { + $lower = self::getData('lowerCase'); + } + $map = $lower; + } + + static $ulenMask = array("\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4); + + $i = 0; + $len = \strlen($s); + + while ($i < $len) { + $ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"]; + $uchr = substr($s, $i, $ulen); + $i += $ulen; + + if (isset($map[$uchr])) { + $uchr = $map[$uchr]; + $nlen = \strlen($uchr); + + if ($nlen == $ulen) { + $nlen = $i; + do { + $s[--$nlen] = $uchr[--$ulen]; + } while ($ulen); + } else { + $s = substr_replace($s, $uchr, $i - $ulen, $ulen); + $len += $nlen - $ulen; + $i += $nlen - $ulen; + } + } + } + } + + if (null === $encoding) { + return $s; + } + + return iconv('UTF-8', $encoding.'//IGNORE', $s); + } + + public static function mb_internal_encoding($encoding = null) + { + if (null === $encoding) { + return self::$internalEncoding; + } + + $encoding = self::getEncoding($encoding); + + if ('UTF-8' === $encoding || false !== @iconv($encoding, $encoding, ' ')) { + self::$internalEncoding = $encoding; + + return true; + } + + return false; + } + + public static function mb_language($lang = null) + { + if (null === $lang) { + return self::$language; + } + + switch ($lang = strtolower($lang)) { + case 'uni': + case 'neutral': + self::$language = $lang; + + return true; + } + + return false; + } + + public static function mb_list_encodings() + { + return array('UTF-8'); + } + + public static function mb_encoding_aliases($encoding) + { + switch (strtoupper($encoding)) { + case 'UTF8': + case 'UTF-8': + return array('utf8'); + } + + return false; + } + + public static function mb_check_encoding($var = null, $encoding = null) + { + if (null === $encoding) { + if (null === $var) { + return false; + } + $encoding = self::$internalEncoding; + } + + return self::mb_detect_encoding($var, array($encoding)) || false !== @iconv($encoding, $encoding, $var); + } + + public static function mb_detect_encoding($str, $encodingList = null, $strict = false) + { + if (null === $encodingList) { + $encodingList = self::$encodingList; + } else { + if (!\is_array($encodingList)) { + $encodingList = array_map('trim', explode(',', $encodingList)); + } + $encodingList = array_map('strtoupper', $encodingList); + } + + foreach ($encodingList as $enc) { + switch ($enc) { + case 'ASCII': + if (!preg_match('/[\x80-\xFF]/', $str)) { + return $enc; + } + break; + + case 'UTF8': + case 'UTF-8': + if (preg_match('//u', $str)) { + return 'UTF-8'; + } + break; + + default: + if (0 === strncmp($enc, 'ISO-8859-', 9)) { + return $enc; + } + } + } + + return false; + } + + public static function mb_detect_order($encodingList = null) + { + if (null === $encodingList) { + return self::$encodingList; + } + + if (!\is_array($encodingList)) { + $encodingList = array_map('trim', explode(',', $encodingList)); + } + $encodingList = array_map('strtoupper', $encodingList); + + foreach ($encodingList as $enc) { + switch ($enc) { + default: + if (strncmp($enc, 'ISO-8859-', 9)) { + return false; + } + // no break + case 'ASCII': + case 'UTF8': + case 'UTF-8': + } + } + + self::$encodingList = $encodingList; + + return true; + } + + public static function mb_strlen($s, $encoding = null) + { + $encoding = self::getEncoding($encoding); + if ('CP850' === $encoding || 'ASCII' === $encoding) { + return \strlen($s); + } + + return @iconv_strlen($s, $encoding); + } + + public static function mb_strpos($haystack, $needle, $offset = 0, $encoding = null) + { + $encoding = self::getEncoding($encoding); + if ('CP850' === $encoding || 'ASCII' === $encoding) { + return strpos($haystack, $needle, $offset); + } + + $needle = (string) $needle; + if ('' === $needle) { + trigger_error(__METHOD__.': Empty delimiter', E_USER_WARNING); + + return false; + } + + return iconv_strpos($haystack, $needle, $offset, $encoding); + } + + public static function mb_strrpos($haystack, $needle, $offset = 0, $encoding = null) + { + $encoding = self::getEncoding($encoding); + if ('CP850' === $encoding || 'ASCII' === $encoding) { + return strrpos($haystack, $needle, $offset); + } + + if ($offset != (int) $offset) { + $offset = 0; + } elseif ($offset = (int) $offset) { + if ($offset < 0) { + if (0 > $offset += self::mb_strlen($needle)) { + $haystack = self::mb_substr($haystack, 0, $offset, $encoding); + } + $offset = 0; + } else { + $haystack = self::mb_substr($haystack, $offset, 2147483647, $encoding); + } + } + + $pos = iconv_strrpos($haystack, $needle, $encoding); + + return false !== $pos ? $offset + $pos : false; + } + + public static function mb_str_split($string, $split_length = 1, $encoding = null) + { + if (null !== $string && !\is_scalar($string) && !(\is_object($string) && \method_exists($string, '__toString'))) { + trigger_error('mb_str_split() expects parameter 1 to be string, '.\gettype($string).' given', E_USER_WARNING); + + return null; + } + + if (1 > $split_length = (int) $split_length) { + trigger_error('The length of each segment must be greater than zero', E_USER_WARNING); + + return false; + } + + if (null === $encoding) { + $encoding = mb_internal_encoding(); + } + + if ('UTF-8' === $encoding = self::getEncoding($encoding)) { + $rx = '/('; + while (65535 < $split_length) { + $rx .= '.{65535}'; + $split_length -= 65535; + } + $rx .= '.{'.$split_length.'})/us'; + + return preg_split($rx, $string, null, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); + } + + $result = array(); + $length = mb_strlen($string, $encoding); + + for ($i = 0; $i < $length; $i += $split_length) { + $result[] = mb_substr($string, $i, $split_length, $encoding); + } + + return $result; + } + + public static function mb_strtolower($s, $encoding = null) + { + return self::mb_convert_case($s, MB_CASE_LOWER, $encoding); + } + + public static function mb_strtoupper($s, $encoding = null) + { + return self::mb_convert_case($s, MB_CASE_UPPER, $encoding); + } + + public static function mb_substitute_character($c = null) + { + if (0 === strcasecmp($c, 'none')) { + return true; + } + + return null !== $c ? false : 'none'; + } + + public static function mb_substr($s, $start, $length = null, $encoding = null) + { + $encoding = self::getEncoding($encoding); + if ('CP850' === $encoding || 'ASCII' === $encoding) { + return (string) substr($s, $start, null === $length ? 2147483647 : $length); + } + + if ($start < 0) { + $start = iconv_strlen($s, $encoding) + $start; + if ($start < 0) { + $start = 0; + } + } + + if (null === $length) { + $length = 2147483647; + } elseif ($length < 0) { + $length = iconv_strlen($s, $encoding) + $length - $start; + if ($length < 0) { + return ''; + } + } + + return (string) iconv_substr($s, $start, $length, $encoding); + } + + public static function mb_stripos($haystack, $needle, $offset = 0, $encoding = null) + { + $haystack = self::mb_convert_case($haystack, self::MB_CASE_FOLD, $encoding); + $needle = self::mb_convert_case($needle, self::MB_CASE_FOLD, $encoding); + + return self::mb_strpos($haystack, $needle, $offset, $encoding); + } + + public static function mb_stristr($haystack, $needle, $part = false, $encoding = null) + { + $pos = self::mb_stripos($haystack, $needle, 0, $encoding); + + return self::getSubpart($pos, $part, $haystack, $encoding); + } + + public static function mb_strrchr($haystack, $needle, $part = false, $encoding = null) + { + $encoding = self::getEncoding($encoding); + if ('CP850' === $encoding || 'ASCII' === $encoding) { + return strrchr($haystack, $needle, $part); + } + $needle = self::mb_substr($needle, 0, 1, $encoding); + $pos = iconv_strrpos($haystack, $needle, $encoding); + + return self::getSubpart($pos, $part, $haystack, $encoding); + } + + public static function mb_strrichr($haystack, $needle, $part = false, $encoding = null) + { + $needle = self::mb_substr($needle, 0, 1, $encoding); + $pos = self::mb_strripos($haystack, $needle, $encoding); + + return self::getSubpart($pos, $part, $haystack, $encoding); + } + + public static function mb_strripos($haystack, $needle, $offset = 0, $encoding = null) + { + $haystack = self::mb_convert_case($haystack, self::MB_CASE_FOLD, $encoding); + $needle = self::mb_convert_case($needle, self::MB_CASE_FOLD, $encoding); + + return self::mb_strrpos($haystack, $needle, $offset, $encoding); + } + + public static function mb_strstr($haystack, $needle, $part = false, $encoding = null) + { + $pos = strpos($haystack, $needle); + if (false === $pos) { + return false; + } + if ($part) { + return substr($haystack, 0, $pos); + } + + return substr($haystack, $pos); + } + + public static function mb_get_info($type = 'all') + { + $info = array( + 'internal_encoding' => self::$internalEncoding, + 'http_output' => 'pass', + 'http_output_conv_mimetypes' => '^(text/|application/xhtml\+xml)', + 'func_overload' => 0, + 'func_overload_list' => 'no overload', + 'mail_charset' => 'UTF-8', + 'mail_header_encoding' => 'BASE64', + 'mail_body_encoding' => 'BASE64', + 'illegal_chars' => 0, + 'encoding_translation' => 'Off', + 'language' => self::$language, + 'detect_order' => self::$encodingList, + 'substitute_character' => 'none', + 'strict_detection' => 'Off', + ); + + if ('all' === $type) { + return $info; + } + if (isset($info[$type])) { + return $info[$type]; + } + + return false; + } + + public static function mb_http_input($type = '') + { + return false; + } + + public static function mb_http_output($encoding = null) + { + return null !== $encoding ? 'pass' === $encoding : 'pass'; + } + + public static function mb_strwidth($s, $encoding = null) + { + $encoding = self::getEncoding($encoding); + + if ('UTF-8' !== $encoding) { + $s = iconv($encoding, 'UTF-8//IGNORE', $s); + } + + $s = preg_replace('/[\x{1100}-\x{115F}\x{2329}\x{232A}\x{2E80}-\x{303E}\x{3040}-\x{A4CF}\x{AC00}-\x{D7A3}\x{F900}-\x{FAFF}\x{FE10}-\x{FE19}\x{FE30}-\x{FE6F}\x{FF00}-\x{FF60}\x{FFE0}-\x{FFE6}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}]/u', '', $s, -1, $wide); + + return ($wide << 1) + iconv_strlen($s, 'UTF-8'); + } + + public static function mb_substr_count($haystack, $needle, $encoding = null) + { + return substr_count($haystack, $needle); + } + + public static function mb_output_handler($contents, $status) + { + return $contents; + } + + public static function mb_chr($code, $encoding = null) + { + if (0x80 > $code %= 0x200000) { + $s = \chr($code); + } elseif (0x800 > $code) { + $s = \chr(0xC0 | $code >> 6).\chr(0x80 | $code & 0x3F); + } elseif (0x10000 > $code) { + $s = \chr(0xE0 | $code >> 12).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F); + } else { + $s = \chr(0xF0 | $code >> 18).\chr(0x80 | $code >> 12 & 0x3F).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F); + } + + if ('UTF-8' !== $encoding = self::getEncoding($encoding)) { + $s = mb_convert_encoding($s, $encoding, 'UTF-8'); + } + + return $s; + } + + public static function mb_ord($s, $encoding = null) + { + if ('UTF-8' !== $encoding = self::getEncoding($encoding)) { + $s = mb_convert_encoding($s, 'UTF-8', $encoding); + } + + if (1 === \strlen($s)) { + return \ord($s); + } + + $code = ($s = unpack('C*', substr($s, 0, 4))) ? $s[1] : 0; + if (0xF0 <= $code) { + return (($code - 0xF0) << 18) + (($s[2] - 0x80) << 12) + (($s[3] - 0x80) << 6) + $s[4] - 0x80; + } + if (0xE0 <= $code) { + return (($code - 0xE0) << 12) + (($s[2] - 0x80) << 6) + $s[3] - 0x80; + } + if (0xC0 <= $code) { + return (($code - 0xC0) << 6) + $s[2] - 0x80; + } + + return $code; + } + + private static function getSubpart($pos, $part, $haystack, $encoding) + { + if (false === $pos) { + return false; + } + if ($part) { + return self::mb_substr($haystack, 0, $pos, $encoding); + } + + return self::mb_substr($haystack, $pos, null, $encoding); + } + + private static function html_encoding_callback(array $m) + { + $i = 1; + $entities = ''; + $m = unpack('C*', htmlentities($m[0], ENT_COMPAT, 'UTF-8')); + + while (isset($m[$i])) { + if (0x80 > $m[$i]) { + $entities .= \chr($m[$i++]); + continue; + } + if (0xF0 <= $m[$i]) { + $c = (($m[$i++] - 0xF0) << 18) + (($m[$i++] - 0x80) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80; + } elseif (0xE0 <= $m[$i]) { + $c = (($m[$i++] - 0xE0) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80; + } else { + $c = (($m[$i++] - 0xC0) << 6) + $m[$i++] - 0x80; + } + + $entities .= '&#'.$c.';'; + } + + return $entities; + } + + private static function title_case(array $s) + { + return self::mb_convert_case($s[1], MB_CASE_UPPER, 'UTF-8').self::mb_convert_case($s[2], MB_CASE_LOWER, 'UTF-8'); + } + + private static function getData($file) + { + if (file_exists($file = __DIR__.'/Resources/unidata/'.$file.'.php')) { + return require $file; + } + + return false; + } + + private static function getEncoding($encoding) + { + if (null === $encoding) { + return self::$internalEncoding; + } + + if ('UTF-8' === $encoding) { + return 'UTF-8'; + } + + $encoding = strtoupper($encoding); + + if ('8BIT' === $encoding || 'BINARY' === $encoding) { + return 'CP850'; + } + + if ('UTF8' === $encoding) { + return 'UTF-8'; + } + + return $encoding; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-mbstring/README.md b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-mbstring/README.md new file mode 100644 index 0000000..4efb599 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-mbstring/README.md @@ -0,0 +1,13 @@ +Symfony Polyfill / Mbstring +=========================== + +This component provides a partial, native PHP implementation for the +[Mbstring](https://php.net/mbstring) extension. + +More information can be found in the +[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). + +License +======= + +This library is released under the [MIT license](LICENSE). diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php new file mode 100644 index 0000000..e6fbfa6 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php @@ -0,0 +1,1096 @@ + 'a', + 'B' => 'b', + 'C' => 'c', + 'D' => 'd', + 'E' => 'e', + 'F' => 'f', + 'G' => 'g', + 'H' => 'h', + 'I' => 'i', + 'J' => 'j', + 'K' => 'k', + 'L' => 'l', + 'M' => 'm', + 'N' => 'n', + 'O' => 'o', + 'P' => 'p', + 'Q' => 'q', + 'R' => 'r', + 'S' => 's', + 'T' => 't', + 'U' => 'u', + 'V' => 'v', + 'W' => 'w', + 'X' => 'x', + 'Y' => 'y', + 'Z' => 'z', + 'À' => 'à', + 'Ã' => 'á', + 'Â' => 'â', + 'Ã' => 'ã', + 'Ä' => 'ä', + 'Ã…' => 'Ã¥', + 'Æ' => 'æ', + 'Ç' => 'ç', + 'È' => 'è', + 'É' => 'é', + 'Ê' => 'ê', + 'Ë' => 'ë', + 'ÃŒ' => 'ì', + 'Ã' => 'í', + 'ÃŽ' => 'î', + 'Ã' => 'ï', + 'Ã' => 'ð', + 'Ñ' => 'ñ', + 'Ã’' => 'ò', + 'Ó' => 'ó', + 'Ô' => 'ô', + 'Õ' => 'õ', + 'Ö' => 'ö', + 'Ø' => 'ø', + 'Ù' => 'ù', + 'Ú' => 'ú', + 'Û' => 'û', + 'Ãœ' => 'ü', + 'Ã' => 'ý', + 'Þ' => 'þ', + 'Ä€' => 'Ä', + 'Ä‚' => 'ă', + 'Ä„' => 'Ä…', + 'Ć' => 'ć', + 'Ĉ' => 'ĉ', + 'ÄŠ' => 'Ä‹', + 'ÄŒ' => 'Ä', + 'ÄŽ' => 'Ä', + 'Ä' => 'Ä‘', + 'Ä’' => 'Ä“', + 'Ä”' => 'Ä•', + 'Ä–' => 'Ä—', + 'Ę' => 'Ä™', + 'Äš' => 'Ä›', + 'Äœ' => 'Ä', + 'Äž' => 'ÄŸ', + 'Ä ' => 'Ä¡', + 'Ä¢' => 'Ä£', + 'Ĥ' => 'Ä¥', + 'Ħ' => 'ħ', + 'Ĩ' => 'Ä©', + 'Ī' => 'Ä«', + 'Ĭ' => 'Ä­', + 'Ä®' => 'į', + 'Ä°' => 'i', + 'IJ' => 'ij', + 'Ä´' => 'ĵ', + 'Ķ' => 'Ä·', + 'Ĺ' => 'ĺ', + 'Ä»' => 'ļ', + 'Ľ' => 'ľ', + 'Ä¿' => 'Å€', + 'Å' => 'Å‚', + 'Ń' => 'Å„', + 'Å…' => 'ņ', + 'Ň' => 'ň', + 'ÅŠ' => 'Å‹', + 'ÅŒ' => 'Å', + 'ÅŽ' => 'Å', + 'Å' => 'Å‘', + 'Å’' => 'Å“', + 'Å”' => 'Å•', + 'Å–' => 'Å—', + 'Ř' => 'Å™', + 'Åš' => 'Å›', + 'Åœ' => 'Å', + 'Åž' => 'ÅŸ', + 'Å ' => 'Å¡', + 'Å¢' => 'Å£', + 'Ť' => 'Å¥', + 'Ŧ' => 'ŧ', + 'Ũ' => 'Å©', + 'Ū' => 'Å«', + 'Ŭ' => 'Å­', + 'Å®' => 'ů', + 'Å°' => 'ű', + 'Ų' => 'ų', + 'Å´' => 'ŵ', + 'Ŷ' => 'Å·', + 'Ÿ' => 'ÿ', + 'Ź' => 'ź', + 'Å»' => 'ż', + 'Ž' => 'ž', + 'Æ' => 'É“', + 'Æ‚' => 'ƃ', + 'Æ„' => 'Æ…', + 'Ɔ' => 'É”', + 'Ƈ' => 'ƈ', + 'Ɖ' => 'É–', + 'ÆŠ' => 'É—', + 'Æ‹' => 'ÆŒ', + 'ÆŽ' => 'Ç', + 'Æ' => 'É™', + 'Æ' => 'É›', + 'Æ‘' => 'Æ’', + 'Æ“' => 'É ', + 'Æ”' => 'É£', + 'Æ–' => 'É©', + 'Æ—' => 'ɨ', + 'Ƙ' => 'Æ™', + 'Æœ' => 'ɯ', + 'Æ' => 'ɲ', + 'ÆŸ' => 'ɵ', + 'Æ ' => 'Æ¡', + 'Æ¢' => 'Æ£', + 'Ƥ' => 'Æ¥', + 'Ʀ' => 'Ê€', + 'Ƨ' => 'ƨ', + 'Æ©' => 'ʃ', + 'Ƭ' => 'Æ­', + 'Æ®' => 'ʈ', + 'Ư' => 'Æ°', + 'Ʊ' => 'ÊŠ', + 'Ʋ' => 'Ê‹', + 'Ƴ' => 'Æ´', + 'Ƶ' => 'ƶ', + 'Æ·' => 'Ê’', + 'Ƹ' => 'ƹ', + 'Ƽ' => 'ƽ', + 'Ç„' => 'dž', + 'Ç…' => 'dž', + 'LJ' => 'lj', + 'Lj' => 'lj', + 'ÇŠ' => 'ÇŒ', + 'Ç‹' => 'ÇŒ', + 'Ç' => 'ÇŽ', + 'Ç' => 'Ç', + 'Ç‘' => 'Ç’', + 'Ç“' => 'Ç”', + 'Ç•' => 'Ç–', + 'Ç—' => 'ǘ', + 'Ç™' => 'Çš', + 'Ç›' => 'Çœ', + 'Çž' => 'ÇŸ', + 'Ç ' => 'Ç¡', + 'Ç¢' => 'Ç£', + 'Ǥ' => 'Ç¥', + 'Ǧ' => 'ǧ', + 'Ǩ' => 'Ç©', + 'Ǫ' => 'Ç«', + 'Ǭ' => 'Ç­', + 'Ç®' => 'ǯ', + 'DZ' => 'dz', + 'Dz' => 'dz', + 'Ç´' => 'ǵ', + 'Ƕ' => 'Æ•', + 'Ç·' => 'Æ¿', + 'Ǹ' => 'ǹ', + 'Ǻ' => 'Ç»', + 'Ǽ' => 'ǽ', + 'Ǿ' => 'Ç¿', + 'È€' => 'È', + 'È‚' => 'ȃ', + 'È„' => 'È…', + 'Ȇ' => 'ȇ', + 'Ȉ' => 'ȉ', + 'ÈŠ' => 'È‹', + 'ÈŒ' => 'È', + 'ÈŽ' => 'È', + 'È' => 'È‘', + 'È’' => 'È“', + 'È”' => 'È•', + 'È–' => 'È—', + 'Ș' => 'È™', + 'Èš' => 'È›', + 'Èœ' => 'È', + 'Èž' => 'ÈŸ', + 'È ' => 'Æž', + 'È¢' => 'È£', + 'Ȥ' => 'È¥', + 'Ȧ' => 'ȧ', + 'Ȩ' => 'È©', + 'Ȫ' => 'È«', + 'Ȭ' => 'È­', + 'È®' => 'ȯ', + 'È°' => 'ȱ', + 'Ȳ' => 'ȳ', + 'Ⱥ' => 'â±¥', + 'È»' => 'ȼ', + 'Ƚ' => 'Æš', + 'Ⱦ' => 'ⱦ', + 'É' => 'É‚', + 'Ƀ' => 'Æ€', + 'É„' => 'ʉ', + 'É…' => 'ÊŒ', + 'Ɇ' => 'ɇ', + 'Ɉ' => 'ɉ', + 'ÉŠ' => 'É‹', + 'ÉŒ' => 'É', + 'ÉŽ' => 'É', + 'Í°' => 'ͱ', + 'Ͳ' => 'ͳ', + 'Ͷ' => 'Í·', + 'Í¿' => 'ϳ', + 'Ά' => 'ά', + 'Έ' => 'έ', + 'Ή' => 'ή', + 'Ί' => 'ί', + 'ÎŒ' => 'ÏŒ', + 'ÎŽ' => 'Ï', + 'Î' => 'ÏŽ', + 'Α' => 'α', + 'Î’' => 'β', + 'Γ' => 'γ', + 'Δ' => 'δ', + 'Ε' => 'ε', + 'Ζ' => 'ζ', + 'Η' => 'η', + 'Θ' => 'θ', + 'Ι' => 'ι', + 'Κ' => 'κ', + 'Λ' => 'λ', + 'Îœ' => 'μ', + 'Î' => 'ν', + 'Ξ' => 'ξ', + 'Ο' => 'ο', + 'Π' => 'Ï€', + 'Ρ' => 'Ï', + 'Σ' => 'σ', + 'Τ' => 'Ï„', + 'Î¥' => 'Ï…', + 'Φ' => 'φ', + 'Χ' => 'χ', + 'Ψ' => 'ψ', + 'Ω' => 'ω', + 'Ϊ' => 'ÏŠ', + 'Ϋ' => 'Ï‹', + 'Ï' => 'Ï—', + 'Ϙ' => 'Ï™', + 'Ïš' => 'Ï›', + 'Ïœ' => 'Ï', + 'Ïž' => 'ÏŸ', + 'Ï ' => 'Ï¡', + 'Ï¢' => 'Ï£', + 'Ϥ' => 'Ï¥', + 'Ϧ' => 'ϧ', + 'Ϩ' => 'Ï©', + 'Ϫ' => 'Ï«', + 'Ϭ' => 'Ï­', + 'Ï®' => 'ϯ', + 'Ï´' => 'θ', + 'Ï·' => 'ϸ', + 'Ϲ' => 'ϲ', + 'Ϻ' => 'Ï»', + 'Ͻ' => 'Í»', + 'Ͼ' => 'ͼ', + 'Ï¿' => 'ͽ', + 'Ѐ' => 'Ñ', + 'Ð' => 'Ñ‘', + 'Ђ' => 'Ñ’', + 'Ѓ' => 'Ñ“', + 'Є' => 'Ñ”', + 'Ð…' => 'Ñ•', + 'І' => 'Ñ–', + 'Ї' => 'Ñ—', + 'Ј' => 'ј', + 'Љ' => 'Ñ™', + 'Њ' => 'Ñš', + 'Ћ' => 'Ñ›', + 'ÐŒ' => 'Ñœ', + 'Ð' => 'Ñ', + 'ÐŽ' => 'Ñž', + 'Ð' => 'ÑŸ', + 'Ð' => 'а', + 'Б' => 'б', + 'Ð’' => 'в', + 'Г' => 'г', + 'Д' => 'д', + 'Е' => 'е', + 'Ж' => 'ж', + 'З' => 'з', + 'И' => 'и', + 'Й' => 'й', + 'К' => 'к', + 'Л' => 'л', + 'Ðœ' => 'м', + 'Ð' => 'н', + 'О' => 'о', + 'П' => 'п', + 'Р' => 'Ñ€', + 'С' => 'Ñ', + 'Т' => 'Ñ‚', + 'У' => 'у', + 'Ф' => 'Ñ„', + 'Ð¥' => 'Ñ…', + 'Ц' => 'ц', + 'Ч' => 'ч', + 'Ш' => 'ш', + 'Щ' => 'щ', + 'Ъ' => 'ÑŠ', + 'Ы' => 'Ñ‹', + 'Ь' => 'ÑŒ', + 'Э' => 'Ñ', + 'Ю' => 'ÑŽ', + 'Я' => 'Ñ', + 'Ñ ' => 'Ñ¡', + 'Ñ¢' => 'Ñ£', + 'Ѥ' => 'Ñ¥', + 'Ѧ' => 'ѧ', + 'Ѩ' => 'Ñ©', + 'Ѫ' => 'Ñ«', + 'Ѭ' => 'Ñ­', + 'Ñ®' => 'ѯ', + 'Ñ°' => 'ѱ', + 'Ѳ' => 'ѳ', + 'Ñ´' => 'ѵ', + 'Ѷ' => 'Ñ·', + 'Ѹ' => 'ѹ', + 'Ѻ' => 'Ñ»', + 'Ѽ' => 'ѽ', + 'Ѿ' => 'Ñ¿', + 'Ò€' => 'Ò', + 'ÒŠ' => 'Ò‹', + 'ÒŒ' => 'Ò', + 'ÒŽ' => 'Ò', + 'Ò' => 'Ò‘', + 'Ò’' => 'Ò“', + 'Ò”' => 'Ò•', + 'Ò–' => 'Ò—', + 'Ò˜' => 'Ò™', + 'Òš' => 'Ò›', + 'Òœ' => 'Ò', + 'Òž' => 'ÒŸ', + 'Ò ' => 'Ò¡', + 'Ò¢' => 'Ò£', + 'Ò¤' => 'Ò¥', + 'Ò¦' => 'Ò§', + 'Ò¨' => 'Ò©', + 'Òª' => 'Ò«', + 'Ò¬' => 'Ò­', + 'Ò®' => 'Ò¯', + 'Ò°' => 'Ò±', + 'Ò²' => 'Ò³', + 'Ò´' => 'Òµ', + 'Ò¶' => 'Ò·', + 'Ò¸' => 'Ò¹', + 'Òº' => 'Ò»', + 'Ò¼' => 'Ò½', + 'Ò¾' => 'Ò¿', + 'Ó€' => 'Ó', + 'Ó' => 'Ó‚', + 'Óƒ' => 'Ó„', + 'Ó…' => 'Ó†', + 'Ó‡' => 'Óˆ', + 'Ó‰' => 'ÓŠ', + 'Ó‹' => 'ÓŒ', + 'Ó' => 'ÓŽ', + 'Ó' => 'Ó‘', + 'Ó’' => 'Ó“', + 'Ó”' => 'Ó•', + 'Ó–' => 'Ó—', + 'Ó˜' => 'Ó™', + 'Óš' => 'Ó›', + 'Óœ' => 'Ó', + 'Óž' => 'ÓŸ', + 'Ó ' => 'Ó¡', + 'Ó¢' => 'Ó£', + 'Ó¤' => 'Ó¥', + 'Ó¦' => 'Ó§', + 'Ó¨' => 'Ó©', + 'Óª' => 'Ó«', + 'Ó¬' => 'Ó­', + 'Ó®' => 'Ó¯', + 'Ó°' => 'Ó±', + 'Ó²' => 'Ó³', + 'Ó´' => 'Óµ', + 'Ó¶' => 'Ó·', + 'Ó¸' => 'Ó¹', + 'Óº' => 'Ó»', + 'Ó¼' => 'Ó½', + 'Ó¾' => 'Ó¿', + 'Ô€' => 'Ô', + 'Ô‚' => 'Ôƒ', + 'Ô„' => 'Ô…', + 'Ô†' => 'Ô‡', + 'Ôˆ' => 'Ô‰', + 'ÔŠ' => 'Ô‹', + 'ÔŒ' => 'Ô', + 'ÔŽ' => 'Ô', + 'Ô' => 'Ô‘', + 'Ô’' => 'Ô“', + 'Ô”' => 'Ô•', + 'Ô–' => 'Ô—', + 'Ô˜' => 'Ô™', + 'Ôš' => 'Ô›', + 'Ôœ' => 'Ô', + 'Ôž' => 'ÔŸ', + 'Ô ' => 'Ô¡', + 'Ô¢' => 'Ô£', + 'Ô¤' => 'Ô¥', + 'Ô¦' => 'Ô§', + 'Ô¨' => 'Ô©', + 'Ôª' => 'Ô«', + 'Ô¬' => 'Ô­', + 'Ô®' => 'Ô¯', + 'Ô±' => 'Õ¡', + 'Ô²' => 'Õ¢', + 'Ô³' => 'Õ£', + 'Ô´' => 'Õ¤', + 'Ôµ' => 'Õ¥', + 'Ô¶' => 'Õ¦', + 'Ô·' => 'Õ§', + 'Ô¸' => 'Õ¨', + 'Ô¹' => 'Õ©', + 'Ôº' => 'Õª', + 'Ô»' => 'Õ«', + 'Ô¼' => 'Õ¬', + 'Ô½' => 'Õ­', + 'Ô¾' => 'Õ®', + 'Ô¿' => 'Õ¯', + 'Õ€' => 'Õ°', + 'Õ' => 'Õ±', + 'Õ‚' => 'Õ²', + 'Õƒ' => 'Õ³', + 'Õ„' => 'Õ´', + 'Õ…' => 'Õµ', + 'Õ†' => 'Õ¶', + 'Õ‡' => 'Õ·', + 'Õˆ' => 'Õ¸', + 'Õ‰' => 'Õ¹', + 'ÕŠ' => 'Õº', + 'Õ‹' => 'Õ»', + 'ÕŒ' => 'Õ¼', + 'Õ' => 'Õ½', + 'ÕŽ' => 'Õ¾', + 'Õ' => 'Õ¿', + 'Õ' => 'Ö€', + 'Õ‘' => 'Ö', + 'Õ’' => 'Ö‚', + 'Õ“' => 'Öƒ', + 'Õ”' => 'Ö„', + 'Õ•' => 'Ö…', + 'Õ–' => 'Ö†', + 'á‚ ' => 'â´€', + 'á‚¡' => 'â´', + 'á‚¢' => 'â´‚', + 'á‚£' => 'â´ƒ', + 'Ⴄ' => 'â´„', + 'á‚¥' => 'â´…', + 'Ⴆ' => 'â´†', + 'Ⴇ' => 'â´‡', + 'Ⴈ' => 'â´ˆ', + 'á‚©' => 'â´‰', + 'Ⴊ' => 'â´Š', + 'á‚«' => 'â´‹', + 'Ⴌ' => 'â´Œ', + 'á‚­' => 'â´', + 'á‚®' => 'â´Ž', + 'Ⴏ' => 'â´', + 'á‚°' => 'â´', + 'Ⴑ' => 'â´‘', + 'Ⴒ' => 'â´’', + 'Ⴓ' => 'â´“', + 'á‚´' => 'â´”', + 'Ⴕ' => 'â´•', + 'Ⴖ' => 'â´–', + 'á‚·' => 'â´—', + 'Ⴘ' => 'â´˜', + 'Ⴙ' => 'â´™', + 'Ⴚ' => 'â´š', + 'á‚»' => 'â´›', + 'Ⴜ' => 'â´œ', + 'Ⴝ' => 'â´', + 'Ⴞ' => 'â´ž', + 'á‚¿' => 'â´Ÿ', + 'Ⴠ' => 'â´ ', + 'áƒ' => 'â´¡', + 'Ⴢ' => 'â´¢', + 'Ⴣ' => 'â´£', + 'Ⴤ' => 'â´¤', + 'Ⴥ' => 'â´¥', + 'Ⴧ' => 'â´§', + 'áƒ' => 'â´­', + 'Ḁ' => 'á¸', + 'Ḃ' => 'ḃ', + 'Ḅ' => 'ḅ', + 'Ḇ' => 'ḇ', + 'Ḉ' => 'ḉ', + 'Ḋ' => 'ḋ', + 'Ḍ' => 'á¸', + 'Ḏ' => 'á¸', + 'á¸' => 'ḑ', + 'Ḓ' => 'ḓ', + 'Ḕ' => 'ḕ', + 'Ḗ' => 'ḗ', + 'Ḙ' => 'ḙ', + 'Ḛ' => 'ḛ', + 'Ḝ' => 'á¸', + 'Ḟ' => 'ḟ', + 'Ḡ' => 'ḡ', + 'Ḣ' => 'ḣ', + 'Ḥ' => 'ḥ', + 'Ḧ' => 'ḧ', + 'Ḩ' => 'ḩ', + 'Ḫ' => 'ḫ', + 'Ḭ' => 'ḭ', + 'Ḯ' => 'ḯ', + 'Ḱ' => 'ḱ', + 'Ḳ' => 'ḳ', + 'Ḵ' => 'ḵ', + 'Ḷ' => 'ḷ', + 'Ḹ' => 'ḹ', + 'Ḻ' => 'ḻ', + 'Ḽ' => 'ḽ', + 'Ḿ' => 'ḿ', + 'á¹€' => 'á¹', + 'Ṃ' => 'ṃ', + 'Ṅ' => 'á¹…', + 'Ṇ' => 'ṇ', + 'Ṉ' => 'ṉ', + 'Ṋ' => 'ṋ', + 'Ṍ' => 'á¹', + 'Ṏ' => 'á¹', + 'á¹' => 'ṑ', + 'á¹’' => 'ṓ', + 'á¹”' => 'ṕ', + 'á¹–' => 'á¹—', + 'Ṙ' => 'á¹™', + 'Ṛ' => 'á¹›', + 'Ṝ' => 'á¹', + 'Ṟ' => 'ṟ', + 'á¹ ' => 'ṡ', + 'á¹¢' => 'á¹£', + 'Ṥ' => 'á¹¥', + 'Ṧ' => 'ṧ', + 'Ṩ' => 'ṩ', + 'Ṫ' => 'ṫ', + 'Ṭ' => 'á¹­', + 'á¹®' => 'ṯ', + 'á¹°' => 'á¹±', + 'á¹²' => 'á¹³', + 'á¹´' => 'á¹µ', + 'Ṷ' => 'á¹·', + 'Ṹ' => 'á¹¹', + 'Ṻ' => 'á¹»', + 'á¹¼' => 'á¹½', + 'á¹¾' => 'ṿ', + 'Ẁ' => 'áº', + 'Ẃ' => 'ẃ', + 'Ẅ' => 'ẅ', + 'Ẇ' => 'ẇ', + 'Ẉ' => 'ẉ', + 'Ẋ' => 'ẋ', + 'Ẍ' => 'áº', + 'Ẏ' => 'áº', + 'áº' => 'ẑ', + 'Ẓ' => 'ẓ', + 'Ẕ' => 'ẕ', + 'ẞ' => 'ß', + 'Ạ' => 'ạ', + 'Ả' => 'ả', + 'Ấ' => 'ấ', + 'Ầ' => 'ầ', + 'Ẩ' => 'ẩ', + 'Ẫ' => 'ẫ', + 'Ậ' => 'ậ', + 'Ắ' => 'ắ', + 'Ằ' => 'ằ', + 'Ẳ' => 'ẳ', + 'Ẵ' => 'ẵ', + 'Ặ' => 'ặ', + 'Ẹ' => 'ẹ', + 'Ẻ' => 'ẻ', + 'Ẽ' => 'ẽ', + 'Ế' => 'ế', + 'Ề' => 'á»', + 'Ể' => 'ể', + 'Ễ' => 'á»…', + 'Ệ' => 'ệ', + 'Ỉ' => 'ỉ', + 'Ị' => 'ị', + 'Ọ' => 'á»', + 'Ỏ' => 'á»', + 'á»' => 'ố', + 'á»’' => 'ồ', + 'á»”' => 'ổ', + 'á»–' => 'á»—', + 'Ộ' => 'á»™', + 'Ớ' => 'á»›', + 'Ờ' => 'á»', + 'Ở' => 'ở', + 'á» ' => 'ỡ', + 'Ợ' => 'ợ', + 'Ụ' => 'ụ', + 'Ủ' => 'ủ', + 'Ứ' => 'ứ', + 'Ừ' => 'ừ', + 'Ử' => 'á»­', + 'á»®' => 'ữ', + 'á»°' => 'á»±', + 'Ỳ' => 'ỳ', + 'á»´' => 'ỵ', + 'Ỷ' => 'á»·', + 'Ỹ' => 'ỹ', + 'Ỻ' => 'á»»', + 'Ỽ' => 'ỽ', + 'Ỿ' => 'ỿ', + 'Ἀ' => 'á¼€', + 'Ἁ' => 'á¼', + 'Ἂ' => 'ἂ', + 'Ἃ' => 'ἃ', + 'Ἄ' => 'ἄ', + 'á¼' => 'á¼…', + 'Ἆ' => 'ἆ', + 'á¼' => 'ἇ', + 'Ἐ' => 'á¼', + 'á¼™' => 'ἑ', + 'Ἒ' => 'á¼’', + 'á¼›' => 'ἓ', + 'Ἔ' => 'á¼”', + 'á¼' => 'ἕ', + 'Ἠ' => 'á¼ ', + 'Ἡ' => 'ἡ', + 'Ἢ' => 'á¼¢', + 'Ἣ' => 'á¼£', + 'Ἤ' => 'ἤ', + 'á¼­' => 'á¼¥', + 'á¼®' => 'ἦ', + 'Ἧ' => 'ἧ', + 'Ἰ' => 'á¼°', + 'á¼¹' => 'á¼±', + 'Ἲ' => 'á¼²', + 'á¼»' => 'á¼³', + 'á¼¼' => 'á¼´', + 'á¼½' => 'á¼µ', + 'á¼¾' => 'ἶ', + 'Ἷ' => 'á¼·', + 'Ὀ' => 'á½€', + 'Ὁ' => 'á½', + 'Ὂ' => 'ὂ', + 'Ὃ' => 'ὃ', + 'Ὄ' => 'ὄ', + 'á½' => 'á½…', + 'á½™' => 'ὑ', + 'á½›' => 'ὓ', + 'á½' => 'ὕ', + 'Ὗ' => 'á½—', + 'Ὠ' => 'á½ ', + 'Ὡ' => 'ὡ', + 'Ὢ' => 'á½¢', + 'Ὣ' => 'á½£', + 'Ὤ' => 'ὤ', + 'á½­' => 'á½¥', + 'á½®' => 'ὦ', + 'Ὧ' => 'ὧ', + 'ᾈ' => 'á¾€', + 'ᾉ' => 'á¾', + 'ᾊ' => 'ᾂ', + 'ᾋ' => 'ᾃ', + 'ᾌ' => 'ᾄ', + 'á¾' => 'á¾…', + 'ᾎ' => 'ᾆ', + 'á¾' => 'ᾇ', + 'ᾘ' => 'á¾', + 'á¾™' => 'ᾑ', + 'ᾚ' => 'á¾’', + 'á¾›' => 'ᾓ', + 'ᾜ' => 'á¾”', + 'á¾' => 'ᾕ', + 'ᾞ' => 'á¾–', + 'ᾟ' => 'á¾—', + 'ᾨ' => 'á¾ ', + 'ᾩ' => 'ᾡ', + 'ᾪ' => 'á¾¢', + 'ᾫ' => 'á¾£', + 'ᾬ' => 'ᾤ', + 'á¾­' => 'á¾¥', + 'á¾®' => 'ᾦ', + 'ᾯ' => 'ᾧ', + 'Ᾰ' => 'á¾°', + 'á¾¹' => 'á¾±', + 'Ὰ' => 'á½°', + 'á¾»' => 'á½±', + 'á¾¼' => 'á¾³', + 'Ὲ' => 'á½²', + 'Έ' => 'á½³', + 'á¿Š' => 'á½´', + 'á¿‹' => 'á½µ', + 'á¿Œ' => 'ῃ', + 'Ῐ' => 'á¿', + 'á¿™' => 'á¿‘', + 'á¿š' => 'ὶ', + 'á¿›' => 'á½·', + 'Ῠ' => 'á¿ ', + 'á¿©' => 'á¿¡', + 'Ὺ' => 'ὺ', + 'á¿«' => 'á½»', + 'Ῥ' => 'á¿¥', + 'Ὸ' => 'ὸ', + 'Ό' => 'á½¹', + 'Ὼ' => 'á½¼', + 'á¿»' => 'á½½', + 'ῼ' => 'ῳ', + 'Ω' => 'ω', + 'K' => 'k', + 'â„«' => 'Ã¥', + 'Ⅎ' => 'â…Ž', + 'â… ' => 'â…°', + 'â…¡' => 'â…±', + 'â…¢' => 'â…²', + 'â…£' => 'â…³', + 'â…¤' => 'â…´', + 'â…¥' => 'â…µ', + 'â…¦' => 'â…¶', + 'â…§' => 'â…·', + 'â…¨' => 'â…¸', + 'â…©' => 'â…¹', + 'â…ª' => 'â…º', + 'â…«' => 'â…»', + 'â…¬' => 'â…¼', + 'â…­' => 'â…½', + 'â…®' => 'â…¾', + 'â…¯' => 'â…¿', + 'Ↄ' => 'ↄ', + 'â’¶' => 'â“', + 'â’·' => 'â“‘', + 'â’¸' => 'â“’', + 'â’¹' => 'â““', + 'â’º' => 'â“”', + 'â’»' => 'â“•', + 'â’¼' => 'â“–', + 'â’½' => 'â“—', + 'â’¾' => 'ⓘ', + 'â’¿' => 'â“™', + 'â“€' => 'â“š', + 'â“' => 'â“›', + 'â“‚' => 'â“œ', + 'Ⓝ' => 'â“', + 'â“„' => 'â“ž', + 'â“…' => 'â“Ÿ', + 'Ⓠ' => 'â“ ', + 'Ⓡ' => 'â“¡', + 'Ⓢ' => 'â“¢', + 'Ⓣ' => 'â“£', + 'â“Š' => 'ⓤ', + 'â“‹' => 'â“¥', + 'â“Œ' => 'ⓦ', + 'â“' => 'ⓧ', + 'â“Ž' => 'ⓨ', + 'â“' => 'â“©', + 'â°€' => 'â°°', + 'â°' => 'â°±', + 'â°‚' => 'â°²', + 'â°ƒ' => 'â°³', + 'â°„' => 'â°´', + 'â°…' => 'â°µ', + 'â°†' => 'â°¶', + 'â°‡' => 'â°·', + 'â°ˆ' => 'â°¸', + 'â°‰' => 'â°¹', + 'â°Š' => 'â°º', + 'â°‹' => 'â°»', + 'â°Œ' => 'â°¼', + 'â°' => 'â°½', + 'â°Ž' => 'â°¾', + 'â°' => 'â°¿', + 'â°' => 'â±€', + 'â°‘' => 'â±', + 'â°’' => 'ⱂ', + 'â°“' => 'ⱃ', + 'â°”' => 'ⱄ', + 'â°•' => 'â±…', + 'â°–' => 'ⱆ', + 'â°—' => 'ⱇ', + 'â°˜' => 'ⱈ', + 'â°™' => 'ⱉ', + 'â°š' => 'ⱊ', + 'â°›' => 'ⱋ', + 'â°œ' => 'ⱌ', + 'â°' => 'â±', + 'â°ž' => 'ⱎ', + 'â°Ÿ' => 'â±', + 'â° ' => 'â±', + 'â°¡' => 'ⱑ', + 'â°¢' => 'â±’', + 'â°£' => 'ⱓ', + 'â°¤' => 'â±”', + 'â°¥' => 'ⱕ', + 'â°¦' => 'â±–', + 'â°§' => 'â±—', + 'â°¨' => 'ⱘ', + 'â°©' => 'â±™', + 'â°ª' => 'ⱚ', + 'â°«' => 'â±›', + 'â°¬' => 'ⱜ', + 'â°­' => 'â±', + 'â°®' => 'ⱞ', + 'â± ' => 'ⱡ', + 'â±¢' => 'É«', + 'â±£' => 'áµ½', + 'Ɽ' => 'ɽ', + 'Ⱨ' => 'ⱨ', + 'Ⱪ' => 'ⱪ', + 'Ⱬ' => 'ⱬ', + 'â±­' => 'É‘', + 'â±®' => 'ɱ', + 'Ɐ' => 'É', + 'â±°' => 'É’', + 'â±²' => 'â±³', + 'â±µ' => 'ⱶ', + 'â±¾' => 'È¿', + 'Ɀ' => 'É€', + 'â²€' => 'â²', + 'Ⲃ' => 'ⲃ', + 'Ⲅ' => 'â²…', + 'Ⲇ' => 'ⲇ', + 'Ⲉ' => 'ⲉ', + 'Ⲋ' => 'ⲋ', + 'Ⲍ' => 'â²', + 'Ⲏ' => 'â²', + 'â²' => 'ⲑ', + 'â²’' => 'ⲓ', + 'â²”' => 'ⲕ', + 'â²–' => 'â²—', + 'Ⲙ' => 'â²™', + 'Ⲛ' => 'â²›', + 'Ⲝ' => 'â²', + 'Ⲟ' => 'ⲟ', + 'â² ' => 'ⲡ', + 'â²¢' => 'â²£', + 'Ⲥ' => 'â²¥', + 'Ⲧ' => 'ⲧ', + 'Ⲩ' => 'ⲩ', + 'Ⲫ' => 'ⲫ', + 'Ⲭ' => 'â²­', + 'â²®' => 'ⲯ', + 'â²°' => 'â²±', + 'â²²' => 'â²³', + 'â²´' => 'â²µ', + 'Ⲷ' => 'â²·', + 'Ⲹ' => 'â²¹', + 'Ⲻ' => 'â²»', + 'â²¼' => 'â²½', + 'â²¾' => 'ⲿ', + 'â³€' => 'â³', + 'Ⳃ' => 'ⳃ', + 'Ⳅ' => 'â³…', + 'Ⳇ' => 'ⳇ', + 'Ⳉ' => 'ⳉ', + 'Ⳋ' => 'ⳋ', + 'Ⳍ' => 'â³', + 'Ⳏ' => 'â³', + 'â³' => 'ⳑ', + 'â³’' => 'ⳓ', + 'â³”' => 'ⳕ', + 'â³–' => 'â³—', + 'Ⳙ' => 'â³™', + 'Ⳛ' => 'â³›', + 'Ⳝ' => 'â³', + 'Ⳟ' => 'ⳟ', + 'â³ ' => 'ⳡ', + 'â³¢' => 'â³£', + 'Ⳬ' => 'ⳬ', + 'â³­' => 'â³®', + 'â³²' => 'â³³', + 'Ꙁ' => 'ê™', + 'Ꙃ' => 'ꙃ', + 'Ꙅ' => 'ê™…', + 'Ꙇ' => 'ꙇ', + 'Ꙉ' => 'ꙉ', + 'Ꙋ' => 'ꙋ', + 'Ꙍ' => 'ê™', + 'Ꙏ' => 'ê™', + 'ê™' => 'ꙑ', + 'ê™’' => 'ꙓ', + 'ê™”' => 'ꙕ', + 'ê™–' => 'ê™—', + 'Ꙙ' => 'ê™™', + 'Ꙛ' => 'ê™›', + 'Ꙝ' => 'ê™', + 'Ꙟ' => 'ꙟ', + 'ê™ ' => 'ꙡ', + 'Ꙣ' => 'ꙣ', + 'Ꙥ' => 'ꙥ', + 'Ꙧ' => 'ꙧ', + 'Ꙩ' => 'ꙩ', + 'Ꙫ' => 'ꙫ', + 'Ꙭ' => 'ê™­', + 'Ꚁ' => 'êš', + 'êš‚' => 'ꚃ', + 'êš„' => 'êš…', + 'Ꚇ' => 'ꚇ', + 'Ꚉ' => 'ꚉ', + 'Ꚋ' => 'êš‹', + 'Ꚍ' => 'êš', + 'Ꚏ' => 'êš', + 'êš' => 'êš‘', + 'êš’' => 'êš“', + 'êš”' => 'êš•', + 'êš–' => 'êš—', + 'Ꚙ' => 'êš™', + 'êšš' => 'êš›', + 'Ꜣ' => 'ꜣ', + 'Ꜥ' => 'ꜥ', + 'Ꜧ' => 'ꜧ', + 'Ꜩ' => 'ꜩ', + 'Ꜫ' => 'ꜫ', + 'Ꜭ' => 'ꜭ', + 'Ꜯ' => 'ꜯ', + 'Ꜳ' => 'ꜳ', + 'Ꜵ' => 'ꜵ', + 'Ꜷ' => 'ꜷ', + 'Ꜹ' => 'ꜹ', + 'Ꜻ' => 'ꜻ', + 'Ꜽ' => 'ꜽ', + 'Ꜿ' => 'ꜿ', + 'ê€' => 'ê', + 'ê‚' => 'êƒ', + 'ê„' => 'ê…', + 'ê†' => 'ê‡', + 'êˆ' => 'ê‰', + 'êŠ' => 'ê‹', + 'êŒ' => 'ê', + 'êŽ' => 'ê', + 'ê' => 'ê‘', + 'ê’' => 'ê“', + 'ê”' => 'ê•', + 'ê–' => 'ê—', + 'ê˜' => 'ê™', + 'êš' => 'ê›', + 'êœ' => 'ê', + 'êž' => 'êŸ', + 'ê ' => 'ê¡', + 'ê¢' => 'ê£', + 'ê¤' => 'ê¥', + 'ê¦' => 'ê§', + 'ê¨' => 'ê©', + 'êª' => 'ê«', + 'ê¬' => 'ê­', + 'ê®' => 'ê¯', + 'ê¹' => 'êº', + 'ê»' => 'ê¼', + 'ê½' => 'áµ¹', + 'ê¾' => 'ê¿', + 'Ꞁ' => 'êž', + 'êž‚' => 'ꞃ', + 'êž„' => 'êž…', + 'Ꞇ' => 'ꞇ', + 'êž‹' => 'ꞌ', + 'êž' => 'É¥', + 'êž' => 'êž‘', + 'êž’' => 'êž“', + 'êž–' => 'êž—', + 'Ꞙ' => 'êž™', + 'êžš' => 'êž›', + 'êžœ' => 'êž', + 'êžž' => 'ꞟ', + 'êž ' => 'êž¡', + 'Ꞣ' => 'ꞣ', + 'Ꞥ' => 'ꞥ', + 'Ꞧ' => 'ꞧ', + 'Ꞩ' => 'êž©', + 'Ɦ' => 'ɦ', + 'êž«' => 'Éœ', + 'Ɡ' => 'É¡', + 'êž­' => 'ɬ', + 'êž°' => 'Êž', + 'êž±' => 'ʇ', + 'A' => 'ï½', + 'ï¼¢' => 'b', + 'ï¼£' => 'c', + 'D' => 'd', + 'ï¼¥' => 'ï½…', + 'F' => 'f', + 'G' => 'g', + 'H' => 'h', + 'I' => 'i', + 'J' => 'j', + 'K' => 'k', + 'L' => 'l', + 'ï¼­' => 'ï½', + 'ï¼®' => 'n', + 'O' => 'ï½', + 'ï¼°' => 'ï½', + 'ï¼±' => 'q', + 'ï¼²' => 'ï½’', + 'ï¼³' => 's', + 'ï¼´' => 'ï½”', + 'ï¼µ' => 'u', + 'V' => 'ï½–', + 'ï¼·' => 'ï½—', + 'X' => 'x', + 'ï¼¹' => 'ï½™', + 'Z' => 'z', + 'ð€' => 'ð¨', + 'ð' => 'ð©', + 'ð‚' => 'ðª', + 'ðƒ' => 'ð«', + 'ð„' => 'ð¬', + 'ð…' => 'ð­', + 'ð†' => 'ð®', + 'ð‡' => 'ð¯', + 'ðˆ' => 'ð°', + 'ð‰' => 'ð±', + 'ðŠ' => 'ð²', + 'ð‹' => 'ð³', + 'ðŒ' => 'ð´', + 'ð' => 'ðµ', + 'ðŽ' => 'ð¶', + 'ð' => 'ð·', + 'ð' => 'ð¸', + 'ð‘' => 'ð¹', + 'ð’' => 'ðº', + 'ð“' => 'ð»', + 'ð”' => 'ð¼', + 'ð•' => 'ð½', + 'ð–' => 'ð¾', + 'ð—' => 'ð¿', + 'ð˜' => 'ð‘€', + 'ð™' => 'ð‘', + 'ðš' => 'ð‘‚', + 'ð›' => 'ð‘ƒ', + 'ðœ' => 'ð‘„', + 'ð' => 'ð‘…', + 'ðž' => 'ð‘†', + 'ðŸ' => 'ð‘‡', + 'ð ' => 'ð‘ˆ', + 'ð¡' => 'ð‘‰', + 'ð¢' => 'ð‘Š', + 'ð£' => 'ð‘‹', + 'ð¤' => 'ð‘Œ', + 'ð¥' => 'ð‘', + 'ð¦' => 'ð‘Ž', + 'ð§' => 'ð‘', + 'ð‘¢ ' => 'ð‘£€', + '𑢡' => 'ð‘£', + 'ð‘¢¢' => '𑣂', + 'ð‘¢£' => '𑣃', + '𑢤' => '𑣄', + 'ð‘¢¥' => 'ð‘£…', + '𑢦' => '𑣆', + '𑢧' => '𑣇', + '𑢨' => '𑣈', + '𑢩' => '𑣉', + '𑢪' => '𑣊', + '𑢫' => '𑣋', + '𑢬' => '𑣌', + 'ð‘¢­' => 'ð‘£', + 'ð‘¢®' => '𑣎', + '𑢯' => 'ð‘£', + 'ð‘¢°' => 'ð‘£', + 'ð‘¢±' => '𑣑', + 'ð‘¢²' => 'ð‘£’', + 'ð‘¢³' => '𑣓', + 'ð‘¢´' => 'ð‘£”', + 'ð‘¢µ' => '𑣕', + '𑢶' => 'ð‘£–', + 'ð‘¢·' => 'ð‘£—', + '𑢸' => '𑣘', + 'ð‘¢¹' => 'ð‘£™', + '𑢺' => '𑣚', + 'ð‘¢»' => 'ð‘£›', + 'ð‘¢¼' => '𑣜', + 'ð‘¢½' => 'ð‘£', + 'ð‘¢¾' => '𑣞', + '𑢿' => '𑣟', +); diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php new file mode 100644 index 0000000..2a8f6e7 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php @@ -0,0 +1,5 @@ + 'A', + 'b' => 'B', + 'c' => 'C', + 'd' => 'D', + 'e' => 'E', + 'f' => 'F', + 'g' => 'G', + 'h' => 'H', + 'i' => 'I', + 'j' => 'J', + 'k' => 'K', + 'l' => 'L', + 'm' => 'M', + 'n' => 'N', + 'o' => 'O', + 'p' => 'P', + 'q' => 'Q', + 'r' => 'R', + 's' => 'S', + 't' => 'T', + 'u' => 'U', + 'v' => 'V', + 'w' => 'W', + 'x' => 'X', + 'y' => 'Y', + 'z' => 'Z', + 'µ' => 'Îœ', + 'à' => 'À', + 'á' => 'Ã', + 'â' => 'Â', + 'ã' => 'Ã', + 'ä' => 'Ä', + 'Ã¥' => 'Ã…', + 'æ' => 'Æ', + 'ç' => 'Ç', + 'è' => 'È', + 'é' => 'É', + 'ê' => 'Ê', + 'ë' => 'Ë', + 'ì' => 'ÃŒ', + 'í' => 'Ã', + 'î' => 'ÃŽ', + 'ï' => 'Ã', + 'ð' => 'Ã', + 'ñ' => 'Ñ', + 'ò' => 'Ã’', + 'ó' => 'Ó', + 'ô' => 'Ô', + 'õ' => 'Õ', + 'ö' => 'Ö', + 'ø' => 'Ø', + 'ù' => 'Ù', + 'ú' => 'Ú', + 'û' => 'Û', + 'ü' => 'Ãœ', + 'ý' => 'Ã', + 'þ' => 'Þ', + 'ÿ' => 'Ÿ', + 'Ä' => 'Ä€', + 'ă' => 'Ä‚', + 'Ä…' => 'Ä„', + 'ć' => 'Ć', + 'ĉ' => 'Ĉ', + 'Ä‹' => 'ÄŠ', + 'Ä' => 'ÄŒ', + 'Ä' => 'ÄŽ', + 'Ä‘' => 'Ä', + 'Ä“' => 'Ä’', + 'Ä•' => 'Ä”', + 'Ä—' => 'Ä–', + 'Ä™' => 'Ę', + 'Ä›' => 'Äš', + 'Ä' => 'Äœ', + 'ÄŸ' => 'Äž', + 'Ä¡' => 'Ä ', + 'Ä£' => 'Ä¢', + 'Ä¥' => 'Ĥ', + 'ħ' => 'Ħ', + 'Ä©' => 'Ĩ', + 'Ä«' => 'Ī', + 'Ä­' => 'Ĭ', + 'į' => 'Ä®', + 'ı' => 'I', + 'ij' => 'IJ', + 'ĵ' => 'Ä´', + 'Ä·' => 'Ķ', + 'ĺ' => 'Ĺ', + 'ļ' => 'Ä»', + 'ľ' => 'Ľ', + 'Å€' => 'Ä¿', + 'Å‚' => 'Å', + 'Å„' => 'Ń', + 'ņ' => 'Å…', + 'ň' => 'Ň', + 'Å‹' => 'ÅŠ', + 'Å' => 'ÅŒ', + 'Å' => 'ÅŽ', + 'Å‘' => 'Å', + 'Å“' => 'Å’', + 'Å•' => 'Å”', + 'Å—' => 'Å–', + 'Å™' => 'Ř', + 'Å›' => 'Åš', + 'Å' => 'Åœ', + 'ÅŸ' => 'Åž', + 'Å¡' => 'Å ', + 'Å£' => 'Å¢', + 'Å¥' => 'Ť', + 'ŧ' => 'Ŧ', + 'Å©' => 'Ũ', + 'Å«' => 'Ū', + 'Å­' => 'Ŭ', + 'ů' => 'Å®', + 'ű' => 'Å°', + 'ų' => 'Ų', + 'ŵ' => 'Å´', + 'Å·' => 'Ŷ', + 'ź' => 'Ź', + 'ż' => 'Å»', + 'ž' => 'Ž', + 'Å¿' => 'S', + 'Æ€' => 'Ƀ', + 'ƃ' => 'Æ‚', + 'Æ…' => 'Æ„', + 'ƈ' => 'Ƈ', + 'ÆŒ' => 'Æ‹', + 'Æ’' => 'Æ‘', + 'Æ•' => 'Ƕ', + 'Æ™' => 'Ƙ', + 'Æš' => 'Ƚ', + 'Æž' => 'È ', + 'Æ¡' => 'Æ ', + 'Æ£' => 'Æ¢', + 'Æ¥' => 'Ƥ', + 'ƨ' => 'Ƨ', + 'Æ­' => 'Ƭ', + 'Æ°' => 'Ư', + 'Æ´' => 'Ƴ', + 'ƶ' => 'Ƶ', + 'ƹ' => 'Ƹ', + 'ƽ' => 'Ƽ', + 'Æ¿' => 'Ç·', + 'Ç…' => 'Ç„', + 'dž' => 'Ç„', + 'Lj' => 'LJ', + 'lj' => 'LJ', + 'Ç‹' => 'ÇŠ', + 'ÇŒ' => 'ÇŠ', + 'ÇŽ' => 'Ç', + 'Ç' => 'Ç', + 'Ç’' => 'Ç‘', + 'Ç”' => 'Ç“', + 'Ç–' => 'Ç•', + 'ǘ' => 'Ç—', + 'Çš' => 'Ç™', + 'Çœ' => 'Ç›', + 'Ç' => 'ÆŽ', + 'ÇŸ' => 'Çž', + 'Ç¡' => 'Ç ', + 'Ç£' => 'Ç¢', + 'Ç¥' => 'Ǥ', + 'ǧ' => 'Ǧ', + 'Ç©' => 'Ǩ', + 'Ç«' => 'Ǫ', + 'Ç­' => 'Ǭ', + 'ǯ' => 'Ç®', + 'Dz' => 'DZ', + 'dz' => 'DZ', + 'ǵ' => 'Ç´', + 'ǹ' => 'Ǹ', + 'Ç»' => 'Ǻ', + 'ǽ' => 'Ǽ', + 'Ç¿' => 'Ǿ', + 'È' => 'È€', + 'ȃ' => 'È‚', + 'È…' => 'È„', + 'ȇ' => 'Ȇ', + 'ȉ' => 'Ȉ', + 'È‹' => 'ÈŠ', + 'È' => 'ÈŒ', + 'È' => 'ÈŽ', + 'È‘' => 'È', + 'È“' => 'È’', + 'È•' => 'È”', + 'È—' => 'È–', + 'È™' => 'Ș', + 'È›' => 'Èš', + 'È' => 'Èœ', + 'ÈŸ' => 'Èž', + 'È£' => 'È¢', + 'È¥' => 'Ȥ', + 'ȧ' => 'Ȧ', + 'È©' => 'Ȩ', + 'È«' => 'Ȫ', + 'È­' => 'Ȭ', + 'ȯ' => 'È®', + 'ȱ' => 'È°', + 'ȳ' => 'Ȳ', + 'ȼ' => 'È»', + 'È¿' => 'â±¾', + 'É€' => 'Ɀ', + 'É‚' => 'É', + 'ɇ' => 'Ɇ', + 'ɉ' => 'Ɉ', + 'É‹' => 'ÉŠ', + 'É' => 'ÉŒ', + 'É' => 'ÉŽ', + 'É' => 'Ɐ', + 'É‘' => 'â±­', + 'É’' => 'â±°', + 'É“' => 'Æ', + 'É”' => 'Ɔ', + 'É–' => 'Ɖ', + 'É—' => 'ÆŠ', + 'É™' => 'Æ', + 'É›' => 'Æ', + 'Éœ' => 'êž«', + 'É ' => 'Æ“', + 'É¡' => 'Ɡ', + 'É£' => 'Æ”', + 'É¥' => 'êž', + 'ɦ' => 'Ɦ', + 'ɨ' => 'Æ—', + 'É©' => 'Æ–', + 'É«' => 'â±¢', + 'ɬ' => 'êž­', + 'ɯ' => 'Æœ', + 'ɱ' => 'â±®', + 'ɲ' => 'Æ', + 'ɵ' => 'ÆŸ', + 'ɽ' => 'Ɽ', + 'Ê€' => 'Ʀ', + 'ʃ' => 'Æ©', + 'ʇ' => 'êž±', + 'ʈ' => 'Æ®', + 'ʉ' => 'É„', + 'ÊŠ' => 'Ʊ', + 'Ê‹' => 'Ʋ', + 'ÊŒ' => 'É…', + 'Ê’' => 'Æ·', + 'Êž' => 'êž°', + 'Í…' => 'Ι', + 'ͱ' => 'Í°', + 'ͳ' => 'Ͳ', + 'Í·' => 'Ͷ', + 'Í»' => 'Ͻ', + 'ͼ' => 'Ͼ', + 'ͽ' => 'Ï¿', + 'ά' => 'Ά', + 'έ' => 'Έ', + 'ή' => 'Ή', + 'ί' => 'Ί', + 'α' => 'Α', + 'β' => 'Î’', + 'γ' => 'Γ', + 'δ' => 'Δ', + 'ε' => 'Ε', + 'ζ' => 'Ζ', + 'η' => 'Η', + 'θ' => 'Θ', + 'ι' => 'Ι', + 'κ' => 'Κ', + 'λ' => 'Λ', + 'μ' => 'Îœ', + 'ν' => 'Î', + 'ξ' => 'Ξ', + 'ο' => 'Ο', + 'Ï€' => 'Π', + 'Ï' => 'Ρ', + 'Ï‚' => 'Σ', + 'σ' => 'Σ', + 'Ï„' => 'Τ', + 'Ï…' => 'Î¥', + 'φ' => 'Φ', + 'χ' => 'Χ', + 'ψ' => 'Ψ', + 'ω' => 'Ω', + 'ÏŠ' => 'Ϊ', + 'Ï‹' => 'Ϋ', + 'ÏŒ' => 'ÎŒ', + 'Ï' => 'ÎŽ', + 'ÏŽ' => 'Î', + 'Ï' => 'Î’', + 'Ï‘' => 'Θ', + 'Ï•' => 'Φ', + 'Ï–' => 'Π', + 'Ï—' => 'Ï', + 'Ï™' => 'Ϙ', + 'Ï›' => 'Ïš', + 'Ï' => 'Ïœ', + 'ÏŸ' => 'Ïž', + 'Ï¡' => 'Ï ', + 'Ï£' => 'Ï¢', + 'Ï¥' => 'Ϥ', + 'ϧ' => 'Ϧ', + 'Ï©' => 'Ϩ', + 'Ï«' => 'Ϫ', + 'Ï­' => 'Ϭ', + 'ϯ' => 'Ï®', + 'Ï°' => 'Κ', + 'ϱ' => 'Ρ', + 'ϲ' => 'Ϲ', + 'ϳ' => 'Í¿', + 'ϵ' => 'Ε', + 'ϸ' => 'Ï·', + 'Ï»' => 'Ϻ', + 'а' => 'Ð', + 'б' => 'Б', + 'в' => 'Ð’', + 'г' => 'Г', + 'д' => 'Д', + 'е' => 'Е', + 'ж' => 'Ж', + 'з' => 'З', + 'и' => 'И', + 'й' => 'Й', + 'к' => 'К', + 'л' => 'Л', + 'м' => 'Ðœ', + 'н' => 'Ð', + 'о' => 'О', + 'п' => 'П', + 'Ñ€' => 'Р', + 'Ñ' => 'С', + 'Ñ‚' => 'Т', + 'у' => 'У', + 'Ñ„' => 'Ф', + 'Ñ…' => 'Ð¥', + 'ц' => 'Ц', + 'ч' => 'Ч', + 'ш' => 'Ш', + 'щ' => 'Щ', + 'ÑŠ' => 'Ъ', + 'Ñ‹' => 'Ы', + 'ÑŒ' => 'Ь', + 'Ñ' => 'Э', + 'ÑŽ' => 'Ю', + 'Ñ' => 'Я', + 'Ñ' => 'Ѐ', + 'Ñ‘' => 'Ð', + 'Ñ’' => 'Ђ', + 'Ñ“' => 'Ѓ', + 'Ñ”' => 'Є', + 'Ñ•' => 'Ð…', + 'Ñ–' => 'І', + 'Ñ—' => 'Ї', + 'ј' => 'Ј', + 'Ñ™' => 'Љ', + 'Ñš' => 'Њ', + 'Ñ›' => 'Ћ', + 'Ñœ' => 'ÐŒ', + 'Ñ' => 'Ð', + 'Ñž' => 'ÐŽ', + 'ÑŸ' => 'Ð', + 'Ñ¡' => 'Ñ ', + 'Ñ£' => 'Ñ¢', + 'Ñ¥' => 'Ѥ', + 'ѧ' => 'Ѧ', + 'Ñ©' => 'Ѩ', + 'Ñ«' => 'Ѫ', + 'Ñ­' => 'Ѭ', + 'ѯ' => 'Ñ®', + 'ѱ' => 'Ñ°', + 'ѳ' => 'Ѳ', + 'ѵ' => 'Ñ´', + 'Ñ·' => 'Ѷ', + 'ѹ' => 'Ѹ', + 'Ñ»' => 'Ѻ', + 'ѽ' => 'Ѽ', + 'Ñ¿' => 'Ѿ', + 'Ò' => 'Ò€', + 'Ò‹' => 'ÒŠ', + 'Ò' => 'ÒŒ', + 'Ò' => 'ÒŽ', + 'Ò‘' => 'Ò', + 'Ò“' => 'Ò’', + 'Ò•' => 'Ò”', + 'Ò—' => 'Ò–', + 'Ò™' => 'Ò˜', + 'Ò›' => 'Òš', + 'Ò' => 'Òœ', + 'ÒŸ' => 'Òž', + 'Ò¡' => 'Ò ', + 'Ò£' => 'Ò¢', + 'Ò¥' => 'Ò¤', + 'Ò§' => 'Ò¦', + 'Ò©' => 'Ò¨', + 'Ò«' => 'Òª', + 'Ò­' => 'Ò¬', + 'Ò¯' => 'Ò®', + 'Ò±' => 'Ò°', + 'Ò³' => 'Ò²', + 'Òµ' => 'Ò´', + 'Ò·' => 'Ò¶', + 'Ò¹' => 'Ò¸', + 'Ò»' => 'Òº', + 'Ò½' => 'Ò¼', + 'Ò¿' => 'Ò¾', + 'Ó‚' => 'Ó', + 'Ó„' => 'Óƒ', + 'Ó†' => 'Ó…', + 'Óˆ' => 'Ó‡', + 'ÓŠ' => 'Ó‰', + 'ÓŒ' => 'Ó‹', + 'ÓŽ' => 'Ó', + 'Ó' => 'Ó€', + 'Ó‘' => 'Ó', + 'Ó“' => 'Ó’', + 'Ó•' => 'Ó”', + 'Ó—' => 'Ó–', + 'Ó™' => 'Ó˜', + 'Ó›' => 'Óš', + 'Ó' => 'Óœ', + 'ÓŸ' => 'Óž', + 'Ó¡' => 'Ó ', + 'Ó£' => 'Ó¢', + 'Ó¥' => 'Ó¤', + 'Ó§' => 'Ó¦', + 'Ó©' => 'Ó¨', + 'Ó«' => 'Óª', + 'Ó­' => 'Ó¬', + 'Ó¯' => 'Ó®', + 'Ó±' => 'Ó°', + 'Ó³' => 'Ó²', + 'Óµ' => 'Ó´', + 'Ó·' => 'Ó¶', + 'Ó¹' => 'Ó¸', + 'Ó»' => 'Óº', + 'Ó½' => 'Ó¼', + 'Ó¿' => 'Ó¾', + 'Ô' => 'Ô€', + 'Ôƒ' => 'Ô‚', + 'Ô…' => 'Ô„', + 'Ô‡' => 'Ô†', + 'Ô‰' => 'Ôˆ', + 'Ô‹' => 'ÔŠ', + 'Ô' => 'ÔŒ', + 'Ô' => 'ÔŽ', + 'Ô‘' => 'Ô', + 'Ô“' => 'Ô’', + 'Ô•' => 'Ô”', + 'Ô—' => 'Ô–', + 'Ô™' => 'Ô˜', + 'Ô›' => 'Ôš', + 'Ô' => 'Ôœ', + 'ÔŸ' => 'Ôž', + 'Ô¡' => 'Ô ', + 'Ô£' => 'Ô¢', + 'Ô¥' => 'Ô¤', + 'Ô§' => 'Ô¦', + 'Ô©' => 'Ô¨', + 'Ô«' => 'Ôª', + 'Ô­' => 'Ô¬', + 'Ô¯' => 'Ô®', + 'Õ¡' => 'Ô±', + 'Õ¢' => 'Ô²', + 'Õ£' => 'Ô³', + 'Õ¤' => 'Ô´', + 'Õ¥' => 'Ôµ', + 'Õ¦' => 'Ô¶', + 'Õ§' => 'Ô·', + 'Õ¨' => 'Ô¸', + 'Õ©' => 'Ô¹', + 'Õª' => 'Ôº', + 'Õ«' => 'Ô»', + 'Õ¬' => 'Ô¼', + 'Õ­' => 'Ô½', + 'Õ®' => 'Ô¾', + 'Õ¯' => 'Ô¿', + 'Õ°' => 'Õ€', + 'Õ±' => 'Õ', + 'Õ²' => 'Õ‚', + 'Õ³' => 'Õƒ', + 'Õ´' => 'Õ„', + 'Õµ' => 'Õ…', + 'Õ¶' => 'Õ†', + 'Õ·' => 'Õ‡', + 'Õ¸' => 'Õˆ', + 'Õ¹' => 'Õ‰', + 'Õº' => 'ÕŠ', + 'Õ»' => 'Õ‹', + 'Õ¼' => 'ÕŒ', + 'Õ½' => 'Õ', + 'Õ¾' => 'ÕŽ', + 'Õ¿' => 'Õ', + 'Ö€' => 'Õ', + 'Ö' => 'Õ‘', + 'Ö‚' => 'Õ’', + 'Öƒ' => 'Õ“', + 'Ö„' => 'Õ”', + 'Ö…' => 'Õ•', + 'Ö†' => 'Õ–', + 'áµ¹' => 'ê½', + 'áµ½' => 'â±£', + 'á¸' => 'Ḁ', + 'ḃ' => 'Ḃ', + 'ḅ' => 'Ḅ', + 'ḇ' => 'Ḇ', + 'ḉ' => 'Ḉ', + 'ḋ' => 'Ḋ', + 'á¸' => 'Ḍ', + 'á¸' => 'Ḏ', + 'ḑ' => 'á¸', + 'ḓ' => 'Ḓ', + 'ḕ' => 'Ḕ', + 'ḗ' => 'Ḗ', + 'ḙ' => 'Ḙ', + 'ḛ' => 'Ḛ', + 'á¸' => 'Ḝ', + 'ḟ' => 'Ḟ', + 'ḡ' => 'Ḡ', + 'ḣ' => 'Ḣ', + 'ḥ' => 'Ḥ', + 'ḧ' => 'Ḧ', + 'ḩ' => 'Ḩ', + 'ḫ' => 'Ḫ', + 'ḭ' => 'Ḭ', + 'ḯ' => 'Ḯ', + 'ḱ' => 'Ḱ', + 'ḳ' => 'Ḳ', + 'ḵ' => 'Ḵ', + 'ḷ' => 'Ḷ', + 'ḹ' => 'Ḹ', + 'ḻ' => 'Ḻ', + 'ḽ' => 'Ḽ', + 'ḿ' => 'Ḿ', + 'á¹' => 'á¹€', + 'ṃ' => 'Ṃ', + 'á¹…' => 'Ṅ', + 'ṇ' => 'Ṇ', + 'ṉ' => 'Ṉ', + 'ṋ' => 'Ṋ', + 'á¹' => 'Ṍ', + 'á¹' => 'Ṏ', + 'ṑ' => 'á¹', + 'ṓ' => 'á¹’', + 'ṕ' => 'á¹”', + 'á¹—' => 'á¹–', + 'á¹™' => 'Ṙ', + 'á¹›' => 'Ṛ', + 'á¹' => 'Ṝ', + 'ṟ' => 'Ṟ', + 'ṡ' => 'á¹ ', + 'á¹£' => 'á¹¢', + 'á¹¥' => 'Ṥ', + 'ṧ' => 'Ṧ', + 'ṩ' => 'Ṩ', + 'ṫ' => 'Ṫ', + 'á¹­' => 'Ṭ', + 'ṯ' => 'á¹®', + 'á¹±' => 'á¹°', + 'á¹³' => 'á¹²', + 'á¹µ' => 'á¹´', + 'á¹·' => 'Ṷ', + 'á¹¹' => 'Ṹ', + 'á¹»' => 'Ṻ', + 'á¹½' => 'á¹¼', + 'ṿ' => 'á¹¾', + 'áº' => 'Ẁ', + 'ẃ' => 'Ẃ', + 'ẅ' => 'Ẅ', + 'ẇ' => 'Ẇ', + 'ẉ' => 'Ẉ', + 'ẋ' => 'Ẋ', + 'áº' => 'Ẍ', + 'áº' => 'Ẏ', + 'ẑ' => 'áº', + 'ẓ' => 'Ẓ', + 'ẕ' => 'Ẕ', + 'ẛ' => 'á¹ ', + 'ạ' => 'Ạ', + 'ả' => 'Ả', + 'ấ' => 'Ấ', + 'ầ' => 'Ầ', + 'ẩ' => 'Ẩ', + 'ẫ' => 'Ẫ', + 'ậ' => 'Ậ', + 'ắ' => 'Ắ', + 'ằ' => 'Ằ', + 'ẳ' => 'Ẳ', + 'ẵ' => 'Ẵ', + 'ặ' => 'Ặ', + 'ẹ' => 'Ẹ', + 'ẻ' => 'Ẻ', + 'ẽ' => 'Ẽ', + 'ế' => 'Ế', + 'á»' => 'Ề', + 'ể' => 'Ể', + 'á»…' => 'Ễ', + 'ệ' => 'Ệ', + 'ỉ' => 'Ỉ', + 'ị' => 'Ị', + 'á»' => 'Ọ', + 'á»' => 'Ỏ', + 'ố' => 'á»', + 'ồ' => 'á»’', + 'ổ' => 'á»”', + 'á»—' => 'á»–', + 'á»™' => 'Ộ', + 'á»›' => 'Ớ', + 'á»' => 'Ờ', + 'ở' => 'Ở', + 'ỡ' => 'á» ', + 'ợ' => 'Ợ', + 'ụ' => 'Ụ', + 'ủ' => 'Ủ', + 'ứ' => 'Ứ', + 'ừ' => 'Ừ', + 'á»­' => 'Ử', + 'ữ' => 'á»®', + 'á»±' => 'á»°', + 'ỳ' => 'Ỳ', + 'ỵ' => 'á»´', + 'á»·' => 'Ỷ', + 'ỹ' => 'Ỹ', + 'á»»' => 'Ỻ', + 'ỽ' => 'Ỽ', + 'ỿ' => 'Ỿ', + 'á¼€' => 'Ἀ', + 'á¼' => 'Ἁ', + 'ἂ' => 'Ἂ', + 'ἃ' => 'Ἃ', + 'ἄ' => 'Ἄ', + 'á¼…' => 'á¼', + 'ἆ' => 'Ἆ', + 'ἇ' => 'á¼', + 'á¼' => 'Ἐ', + 'ἑ' => 'á¼™', + 'á¼’' => 'Ἒ', + 'ἓ' => 'á¼›', + 'á¼”' => 'Ἔ', + 'ἕ' => 'á¼', + 'á¼ ' => 'Ἠ', + 'ἡ' => 'Ἡ', + 'á¼¢' => 'Ἢ', + 'á¼£' => 'Ἣ', + 'ἤ' => 'Ἤ', + 'á¼¥' => 'á¼­', + 'ἦ' => 'á¼®', + 'ἧ' => 'Ἧ', + 'á¼°' => 'Ἰ', + 'á¼±' => 'á¼¹', + 'á¼²' => 'Ἲ', + 'á¼³' => 'á¼»', + 'á¼´' => 'á¼¼', + 'á¼µ' => 'á¼½', + 'ἶ' => 'á¼¾', + 'á¼·' => 'Ἷ', + 'á½€' => 'Ὀ', + 'á½' => 'Ὁ', + 'ὂ' => 'Ὂ', + 'ὃ' => 'Ὃ', + 'ὄ' => 'Ὄ', + 'á½…' => 'á½', + 'ὑ' => 'á½™', + 'ὓ' => 'á½›', + 'ὕ' => 'á½', + 'á½—' => 'Ὗ', + 'á½ ' => 'Ὠ', + 'ὡ' => 'Ὡ', + 'á½¢' => 'Ὢ', + 'á½£' => 'Ὣ', + 'ὤ' => 'Ὤ', + 'á½¥' => 'á½­', + 'ὦ' => 'á½®', + 'ὧ' => 'Ὧ', + 'á½°' => 'Ὰ', + 'á½±' => 'á¾»', + 'á½²' => 'Ὲ', + 'á½³' => 'Έ', + 'á½´' => 'á¿Š', + 'á½µ' => 'á¿‹', + 'ὶ' => 'á¿š', + 'á½·' => 'á¿›', + 'ὸ' => 'Ὸ', + 'á½¹' => 'Ό', + 'ὺ' => 'Ὺ', + 'á½»' => 'á¿«', + 'á½¼' => 'Ὼ', + 'á½½' => 'á¿»', + 'á¾€' => 'ᾈ', + 'á¾' => 'ᾉ', + 'ᾂ' => 'ᾊ', + 'ᾃ' => 'ᾋ', + 'ᾄ' => 'ᾌ', + 'á¾…' => 'á¾', + 'ᾆ' => 'ᾎ', + 'ᾇ' => 'á¾', + 'á¾' => 'ᾘ', + 'ᾑ' => 'á¾™', + 'á¾’' => 'ᾚ', + 'ᾓ' => 'á¾›', + 'á¾”' => 'ᾜ', + 'ᾕ' => 'á¾', + 'á¾–' => 'ᾞ', + 'á¾—' => 'ᾟ', + 'á¾ ' => 'ᾨ', + 'ᾡ' => 'ᾩ', + 'á¾¢' => 'ᾪ', + 'á¾£' => 'ᾫ', + 'ᾤ' => 'ᾬ', + 'á¾¥' => 'á¾­', + 'ᾦ' => 'á¾®', + 'ᾧ' => 'ᾯ', + 'á¾°' => 'Ᾰ', + 'á¾±' => 'á¾¹', + 'á¾³' => 'á¾¼', + 'á¾¾' => 'Ι', + 'ῃ' => 'á¿Œ', + 'á¿' => 'Ῐ', + 'á¿‘' => 'á¿™', + 'á¿ ' => 'Ῠ', + 'á¿¡' => 'á¿©', + 'á¿¥' => 'Ῥ', + 'ῳ' => 'ῼ', + 'â…Ž' => 'Ⅎ', + 'â…°' => 'â… ', + 'â…±' => 'â…¡', + 'â…²' => 'â…¢', + 'â…³' => 'â…£', + 'â…´' => 'â…¤', + 'â…µ' => 'â…¥', + 'â…¶' => 'â…¦', + 'â…·' => 'â…§', + 'â…¸' => 'â…¨', + 'â…¹' => 'â…©', + 'â…º' => 'â…ª', + 'â…»' => 'â…«', + 'â…¼' => 'â…¬', + 'â…½' => 'â…­', + 'â…¾' => 'â…®', + 'â…¿' => 'â…¯', + 'ↄ' => 'Ↄ', + 'â“' => 'â’¶', + 'â“‘' => 'â’·', + 'â“’' => 'â’¸', + 'â““' => 'â’¹', + 'â“”' => 'â’º', + 'â“•' => 'â’»', + 'â“–' => 'â’¼', + 'â“—' => 'â’½', + 'ⓘ' => 'â’¾', + 'â“™' => 'â’¿', + 'â“š' => 'â“€', + 'â“›' => 'â“', + 'â“œ' => 'â“‚', + 'â“' => 'Ⓝ', + 'â“ž' => 'â“„', + 'â“Ÿ' => 'â“…', + 'â“ ' => 'Ⓠ', + 'â“¡' => 'Ⓡ', + 'â“¢' => 'Ⓢ', + 'â“£' => 'Ⓣ', + 'ⓤ' => 'â“Š', + 'â“¥' => 'â“‹', + 'ⓦ' => 'â“Œ', + 'ⓧ' => 'â“', + 'ⓨ' => 'â“Ž', + 'â“©' => 'â“', + 'â°°' => 'â°€', + 'â°±' => 'â°', + 'â°²' => 'â°‚', + 'â°³' => 'â°ƒ', + 'â°´' => 'â°„', + 'â°µ' => 'â°…', + 'â°¶' => 'â°†', + 'â°·' => 'â°‡', + 'â°¸' => 'â°ˆ', + 'â°¹' => 'â°‰', + 'â°º' => 'â°Š', + 'â°»' => 'â°‹', + 'â°¼' => 'â°Œ', + 'â°½' => 'â°', + 'â°¾' => 'â°Ž', + 'â°¿' => 'â°', + 'â±€' => 'â°', + 'â±' => 'â°‘', + 'ⱂ' => 'â°’', + 'ⱃ' => 'â°“', + 'ⱄ' => 'â°”', + 'â±…' => 'â°•', + 'ⱆ' => 'â°–', + 'ⱇ' => 'â°—', + 'ⱈ' => 'â°˜', + 'ⱉ' => 'â°™', + 'ⱊ' => 'â°š', + 'ⱋ' => 'â°›', + 'ⱌ' => 'â°œ', + 'â±' => 'â°', + 'ⱎ' => 'â°ž', + 'â±' => 'â°Ÿ', + 'â±' => 'â° ', + 'ⱑ' => 'â°¡', + 'â±’' => 'â°¢', + 'ⱓ' => 'â°£', + 'â±”' => 'â°¤', + 'ⱕ' => 'â°¥', + 'â±–' => 'â°¦', + 'â±—' => 'â°§', + 'ⱘ' => 'â°¨', + 'â±™' => 'â°©', + 'ⱚ' => 'â°ª', + 'â±›' => 'â°«', + 'ⱜ' => 'â°¬', + 'â±' => 'â°­', + 'ⱞ' => 'â°®', + 'ⱡ' => 'â± ', + 'â±¥' => 'Ⱥ', + 'ⱦ' => 'Ⱦ', + 'ⱨ' => 'Ⱨ', + 'ⱪ' => 'Ⱪ', + 'ⱬ' => 'Ⱬ', + 'â±³' => 'â±²', + 'ⱶ' => 'â±µ', + 'â²' => 'â²€', + 'ⲃ' => 'Ⲃ', + 'â²…' => 'Ⲅ', + 'ⲇ' => 'Ⲇ', + 'ⲉ' => 'Ⲉ', + 'ⲋ' => 'Ⲋ', + 'â²' => 'Ⲍ', + 'â²' => 'Ⲏ', + 'ⲑ' => 'â²', + 'ⲓ' => 'â²’', + 'ⲕ' => 'â²”', + 'â²—' => 'â²–', + 'â²™' => 'Ⲙ', + 'â²›' => 'Ⲛ', + 'â²' => 'Ⲝ', + 'ⲟ' => 'Ⲟ', + 'ⲡ' => 'â² ', + 'â²£' => 'â²¢', + 'â²¥' => 'Ⲥ', + 'ⲧ' => 'Ⲧ', + 'ⲩ' => 'Ⲩ', + 'ⲫ' => 'Ⲫ', + 'â²­' => 'Ⲭ', + 'ⲯ' => 'â²®', + 'â²±' => 'â²°', + 'â²³' => 'â²²', + 'â²µ' => 'â²´', + 'â²·' => 'Ⲷ', + 'â²¹' => 'Ⲹ', + 'â²»' => 'Ⲻ', + 'â²½' => 'â²¼', + 'ⲿ' => 'â²¾', + 'â³' => 'â³€', + 'ⳃ' => 'Ⳃ', + 'â³…' => 'Ⳅ', + 'ⳇ' => 'Ⳇ', + 'ⳉ' => 'Ⳉ', + 'ⳋ' => 'Ⳋ', + 'â³' => 'Ⳍ', + 'â³' => 'Ⳏ', + 'ⳑ' => 'â³', + 'ⳓ' => 'â³’', + 'ⳕ' => 'â³”', + 'â³—' => 'â³–', + 'â³™' => 'Ⳙ', + 'â³›' => 'Ⳛ', + 'â³' => 'Ⳝ', + 'ⳟ' => 'Ⳟ', + 'ⳡ' => 'â³ ', + 'â³£' => 'â³¢', + 'ⳬ' => 'Ⳬ', + 'â³®' => 'â³­', + 'â³³' => 'â³²', + 'â´€' => 'á‚ ', + 'â´' => 'á‚¡', + 'â´‚' => 'á‚¢', + 'â´ƒ' => 'á‚£', + 'â´„' => 'Ⴄ', + 'â´…' => 'á‚¥', + 'â´†' => 'Ⴆ', + 'â´‡' => 'Ⴇ', + 'â´ˆ' => 'Ⴈ', + 'â´‰' => 'á‚©', + 'â´Š' => 'Ⴊ', + 'â´‹' => 'á‚«', + 'â´Œ' => 'Ⴌ', + 'â´' => 'á‚­', + 'â´Ž' => 'á‚®', + 'â´' => 'Ⴏ', + 'â´' => 'á‚°', + 'â´‘' => 'Ⴑ', + 'â´’' => 'Ⴒ', + 'â´“' => 'Ⴓ', + 'â´”' => 'á‚´', + 'â´•' => 'Ⴕ', + 'â´–' => 'Ⴖ', + 'â´—' => 'á‚·', + 'â´˜' => 'Ⴘ', + 'â´™' => 'Ⴙ', + 'â´š' => 'Ⴚ', + 'â´›' => 'á‚»', + 'â´œ' => 'Ⴜ', + 'â´' => 'Ⴝ', + 'â´ž' => 'Ⴞ', + 'â´Ÿ' => 'á‚¿', + 'â´ ' => 'Ⴠ', + 'â´¡' => 'áƒ', + 'â´¢' => 'Ⴢ', + 'â´£' => 'Ⴣ', + 'â´¤' => 'Ⴤ', + 'â´¥' => 'Ⴥ', + 'â´§' => 'Ⴧ', + 'â´­' => 'áƒ', + 'ê™' => 'Ꙁ', + 'ꙃ' => 'Ꙃ', + 'ê™…' => 'Ꙅ', + 'ꙇ' => 'Ꙇ', + 'ꙉ' => 'Ꙉ', + 'ꙋ' => 'Ꙋ', + 'ê™' => 'Ꙍ', + 'ê™' => 'Ꙏ', + 'ꙑ' => 'ê™', + 'ꙓ' => 'ê™’', + 'ꙕ' => 'ê™”', + 'ê™—' => 'ê™–', + 'ê™™' => 'Ꙙ', + 'ê™›' => 'Ꙛ', + 'ê™' => 'Ꙝ', + 'ꙟ' => 'Ꙟ', + 'ꙡ' => 'ê™ ', + 'ꙣ' => 'Ꙣ', + 'ꙥ' => 'Ꙥ', + 'ꙧ' => 'Ꙧ', + 'ꙩ' => 'Ꙩ', + 'ꙫ' => 'Ꙫ', + 'ê™­' => 'Ꙭ', + 'êš' => 'Ꚁ', + 'ꚃ' => 'êš‚', + 'êš…' => 'êš„', + 'ꚇ' => 'Ꚇ', + 'ꚉ' => 'Ꚉ', + 'êš‹' => 'Ꚋ', + 'êš' => 'Ꚍ', + 'êš' => 'Ꚏ', + 'êš‘' => 'êš', + 'êš“' => 'êš’', + 'êš•' => 'êš”', + 'êš—' => 'êš–', + 'êš™' => 'Ꚙ', + 'êš›' => 'êšš', + 'ꜣ' => 'Ꜣ', + 'ꜥ' => 'Ꜥ', + 'ꜧ' => 'Ꜧ', + 'ꜩ' => 'Ꜩ', + 'ꜫ' => 'Ꜫ', + 'ꜭ' => 'Ꜭ', + 'ꜯ' => 'Ꜯ', + 'ꜳ' => 'Ꜳ', + 'ꜵ' => 'Ꜵ', + 'ꜷ' => 'Ꜷ', + 'ꜹ' => 'Ꜹ', + 'ꜻ' => 'Ꜻ', + 'ꜽ' => 'Ꜽ', + 'ꜿ' => 'Ꜿ', + 'ê' => 'ê€', + 'êƒ' => 'ê‚', + 'ê…' => 'ê„', + 'ê‡' => 'ê†', + 'ê‰' => 'êˆ', + 'ê‹' => 'êŠ', + 'ê' => 'êŒ', + 'ê' => 'êŽ', + 'ê‘' => 'ê', + 'ê“' => 'ê’', + 'ê•' => 'ê”', + 'ê—' => 'ê–', + 'ê™' => 'ê˜', + 'ê›' => 'êš', + 'ê' => 'êœ', + 'êŸ' => 'êž', + 'ê¡' => 'ê ', + 'ê£' => 'ê¢', + 'ê¥' => 'ê¤', + 'ê§' => 'ê¦', + 'ê©' => 'ê¨', + 'ê«' => 'êª', + 'ê­' => 'ê¬', + 'ê¯' => 'ê®', + 'êº' => 'ê¹', + 'ê¼' => 'ê»', + 'ê¿' => 'ê¾', + 'êž' => 'Ꞁ', + 'ꞃ' => 'êž‚', + 'êž…' => 'êž„', + 'ꞇ' => 'Ꞇ', + 'ꞌ' => 'êž‹', + 'êž‘' => 'êž', + 'êž“' => 'êž’', + 'êž—' => 'êž–', + 'êž™' => 'Ꞙ', + 'êž›' => 'êžš', + 'êž' => 'êžœ', + 'ꞟ' => 'êžž', + 'êž¡' => 'êž ', + 'ꞣ' => 'Ꞣ', + 'ꞥ' => 'Ꞥ', + 'ꞧ' => 'Ꞧ', + 'êž©' => 'Ꞩ', + 'ï½' => 'A', + 'b' => 'ï¼¢', + 'c' => 'ï¼£', + 'd' => 'D', + 'ï½…' => 'ï¼¥', + 'f' => 'F', + 'g' => 'G', + 'h' => 'H', + 'i' => 'I', + 'j' => 'J', + 'k' => 'K', + 'l' => 'L', + 'ï½' => 'ï¼­', + 'n' => 'ï¼®', + 'ï½' => 'O', + 'ï½' => 'ï¼°', + 'q' => 'ï¼±', + 'ï½’' => 'ï¼²', + 's' => 'ï¼³', + 'ï½”' => 'ï¼´', + 'u' => 'ï¼µ', + 'ï½–' => 'V', + 'ï½—' => 'ï¼·', + 'x' => 'X', + 'ï½™' => 'ï¼¹', + 'z' => 'Z', + 'ð¨' => 'ð€', + 'ð©' => 'ð', + 'ðª' => 'ð‚', + 'ð«' => 'ðƒ', + 'ð¬' => 'ð„', + 'ð­' => 'ð…', + 'ð®' => 'ð†', + 'ð¯' => 'ð‡', + 'ð°' => 'ðˆ', + 'ð±' => 'ð‰', + 'ð²' => 'ðŠ', + 'ð³' => 'ð‹', + 'ð´' => 'ðŒ', + 'ðµ' => 'ð', + 'ð¶' => 'ðŽ', + 'ð·' => 'ð', + 'ð¸' => 'ð', + 'ð¹' => 'ð‘', + 'ðº' => 'ð’', + 'ð»' => 'ð“', + 'ð¼' => 'ð”', + 'ð½' => 'ð•', + 'ð¾' => 'ð–', + 'ð¿' => 'ð—', + 'ð‘€' => 'ð˜', + 'ð‘' => 'ð™', + 'ð‘‚' => 'ðš', + 'ð‘ƒ' => 'ð›', + 'ð‘„' => 'ðœ', + 'ð‘…' => 'ð', + 'ð‘†' => 'ðž', + 'ð‘‡' => 'ðŸ', + 'ð‘ˆ' => 'ð ', + 'ð‘‰' => 'ð¡', + 'ð‘Š' => 'ð¢', + 'ð‘‹' => 'ð£', + 'ð‘Œ' => 'ð¤', + 'ð‘' => 'ð¥', + 'ð‘Ž' => 'ð¦', + 'ð‘' => 'ð§', + 'ð‘£€' => 'ð‘¢ ', + 'ð‘£' => '𑢡', + '𑣂' => 'ð‘¢¢', + '𑣃' => 'ð‘¢£', + '𑣄' => '𑢤', + 'ð‘£…' => 'ð‘¢¥', + '𑣆' => '𑢦', + '𑣇' => '𑢧', + '𑣈' => '𑢨', + '𑣉' => '𑢩', + '𑣊' => '𑢪', + '𑣋' => '𑢫', + '𑣌' => '𑢬', + 'ð‘£' => 'ð‘¢­', + '𑣎' => 'ð‘¢®', + 'ð‘£' => '𑢯', + 'ð‘£' => 'ð‘¢°', + '𑣑' => 'ð‘¢±', + 'ð‘£’' => 'ð‘¢²', + '𑣓' => 'ð‘¢³', + 'ð‘£”' => 'ð‘¢´', + '𑣕' => 'ð‘¢µ', + 'ð‘£–' => '𑢶', + 'ð‘£—' => 'ð‘¢·', + '𑣘' => '𑢸', + 'ð‘£™' => 'ð‘¢¹', + '𑣚' => '𑢺', + 'ð‘£›' => 'ð‘¢»', + '𑣜' => 'ð‘¢¼', + 'ð‘£' => 'ð‘¢½', + '𑣞' => 'ð‘¢¾', + '𑣟' => '𑢿', +); diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-mbstring/bootstrap.php b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-mbstring/bootstrap.php new file mode 100644 index 0000000..8c8225c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-mbstring/bootstrap.php @@ -0,0 +1,64 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Polyfill\Mbstring as p; + +if (!defined('MB_CASE_UPPER')) { + define('MB_CASE_UPPER', 0); + define('MB_CASE_LOWER', 1); + define('MB_CASE_TITLE', 2); +} + +if (!function_exists('mb_strlen')) { + function mb_convert_encoding($s, $to, $from = null) { return p\Mbstring::mb_convert_encoding($s, $to, $from); } + function mb_decode_mimeheader($s) { return p\Mbstring::mb_decode_mimeheader($s); } + function mb_encode_mimeheader($s, $charset = null, $transferEnc = null, $lf = null, $indent = null) { return p\Mbstring::mb_encode_mimeheader($s, $charset, $transferEnc, $lf, $indent); } + function mb_decode_numericentity($s, $convmap, $enc = null) { return p\Mbstring::mb_decode_numericentity($s, $convmap, $enc); } + function mb_encode_numericentity($s, $convmap, $enc = null, $is_hex = false) { return p\Mbstring::mb_encode_numericentity($s, $convmap, $enc, $is_hex); } + function mb_convert_case($s, $mode, $enc = null) { return p\Mbstring::mb_convert_case($s, $mode, $enc); } + function mb_internal_encoding($enc = null) { return p\Mbstring::mb_internal_encoding($enc); } + function mb_language($lang = null) { return p\Mbstring::mb_language($lang); } + function mb_list_encodings() { return p\Mbstring::mb_list_encodings(); } + function mb_encoding_aliases($encoding) { return p\Mbstring::mb_encoding_aliases($encoding); } + function mb_check_encoding($var = null, $encoding = null) { return p\Mbstring::mb_check_encoding($var, $encoding); } + function mb_detect_encoding($str, $encodingList = null, $strict = false) { return p\Mbstring::mb_detect_encoding($str, $encodingList, $strict); } + function mb_detect_order($encodingList = null) { return p\Mbstring::mb_detect_order($encodingList); } + function mb_parse_str($s, &$result = array()) { parse_str($s, $result); } + function mb_strlen($s, $enc = null) { return p\Mbstring::mb_strlen($s, $enc); } + function mb_strpos($s, $needle, $offset = 0, $enc = null) { return p\Mbstring::mb_strpos($s, $needle, $offset, $enc); } + function mb_strtolower($s, $enc = null) { return p\Mbstring::mb_strtolower($s, $enc); } + function mb_strtoupper($s, $enc = null) { return p\Mbstring::mb_strtoupper($s, $enc); } + function mb_substitute_character($char = null) { return p\Mbstring::mb_substitute_character($char); } + function mb_substr($s, $start, $length = 2147483647, $enc = null) { return p\Mbstring::mb_substr($s, $start, $length, $enc); } + function mb_stripos($s, $needle, $offset = 0, $enc = null) { return p\Mbstring::mb_stripos($s, $needle, $offset, $enc); } + function mb_stristr($s, $needle, $part = false, $enc = null) { return p\Mbstring::mb_stristr($s, $needle, $part, $enc); } + function mb_strrchr($s, $needle, $part = false, $enc = null) { return p\Mbstring::mb_strrchr($s, $needle, $part, $enc); } + function mb_strrichr($s, $needle, $part = false, $enc = null) { return p\Mbstring::mb_strrichr($s, $needle, $part, $enc); } + function mb_strripos($s, $needle, $offset = 0, $enc = null) { return p\Mbstring::mb_strripos($s, $needle, $offset, $enc); } + function mb_strrpos($s, $needle, $offset = 0, $enc = null) { return p\Mbstring::mb_strrpos($s, $needle, $offset, $enc); } + function mb_strstr($s, $needle, $part = false, $enc = null) { return p\Mbstring::mb_strstr($s, $needle, $part, $enc); } + function mb_get_info($type = 'all') { return p\Mbstring::mb_get_info($type); } + function mb_http_output($enc = null) { return p\Mbstring::mb_http_output($enc); } + function mb_strwidth($s, $enc = null) { return p\Mbstring::mb_strwidth($s, $enc); } + function mb_substr_count($haystack, $needle, $enc = null) { return p\Mbstring::mb_substr_count($haystack, $needle, $enc); } + function mb_output_handler($contents, $status) { return p\Mbstring::mb_output_handler($contents, $status); } + function mb_http_input($type = '') { return p\Mbstring::mb_http_input($type); } + function mb_convert_variables($toEncoding, $fromEncoding, &$a = null, &$b = null, &$c = null, &$d = null, &$e = null, &$f = null) { return p\Mbstring::mb_convert_variables($toEncoding, $fromEncoding, $a, $b, $c, $d, $e, $f); } +} +if (!function_exists('mb_chr')) { + function mb_ord($s, $enc = null) { return p\Mbstring::mb_ord($s, $enc); } + function mb_chr($code, $enc = null) { return p\Mbstring::mb_chr($code, $enc); } + function mb_scrub($s, $enc = null) { $enc = null === $enc ? mb_internal_encoding() : $enc; return mb_convert_encoding($s, $enc, $enc); } +} + +if (!function_exists('mb_str_split')) { + function mb_str_split($string, $split_length = 1, $encoding = null) { return p\Mbstring::mb_str_split($string, $split_length, $encoding); } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-mbstring/composer.json b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-mbstring/composer.json new file mode 100644 index 0000000..02b8896 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-mbstring/composer.json @@ -0,0 +1,34 @@ +{ + "name": "symfony/polyfill-mbstring", + "type": "library", + "description": "Symfony polyfill for the Mbstring extension", + "keywords": ["polyfill", "shim", "compatibility", "portable", "mbstring"], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=5.3.3" + }, + "autoload": { + "psr-4": { "Symfony\\Polyfill\\Mbstring\\": "" }, + "files": [ "bootstrap.php" ] + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-master": "1.15-dev" + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-php56/LICENSE b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-php56/LICENSE new file mode 100644 index 0000000..4cd8bdd --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-php56/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2015-2019 Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-php56/Php56.php b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-php56/Php56.php new file mode 100644 index 0000000..dbbc0e1 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-php56/Php56.php @@ -0,0 +1,138 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Php56; + +use Symfony\Polyfill\Util\Binary; + +/** + * @internal + */ +final class Php56 +{ + const LDAP_ESCAPE_FILTER = 1; + const LDAP_ESCAPE_DN = 2; + + public static function hash_equals($knownString, $userInput) + { + if (!\is_string($knownString)) { + trigger_error('Expected known_string to be a string, '.\gettype($knownString).' given', E_USER_WARNING); + + return false; + } + + if (!\is_string($userInput)) { + trigger_error('Expected user_input to be a string, '.\gettype($userInput).' given', E_USER_WARNING); + + return false; + } + + $knownLen = Binary::strlen($knownString); + $userLen = Binary::strlen($userInput); + + if ($knownLen !== $userLen) { + return false; + } + + $result = 0; + + for ($i = 0; $i < $knownLen; ++$i) { + $result |= \ord($knownString[$i]) ^ \ord($userInput[$i]); + } + + return 0 === $result; + } + + /** + * Stub implementation of the {@link ldap_escape()} function of the ldap + * extension. + * + * Escape strings for safe use in LDAP filters and DNs. + * + * @author Chris Wright + * + * @param string $subject + * @param string $ignore + * @param int $flags + * + * @return string + * + * @see http://stackoverflow.com/a/8561604 + */ + public static function ldap_escape($subject, $ignore = '', $flags = 0) + { + static $charMaps = null; + + if (null === $charMaps) { + $charMaps = array( + self::LDAP_ESCAPE_FILTER => array('\\', '*', '(', ')', "\x00"), + self::LDAP_ESCAPE_DN => array('\\', ',', '=', '+', '<', '>', ';', '"', '#', "\r"), + ); + + $charMaps[0] = array(); + + for ($i = 0; $i < 256; ++$i) { + $charMaps[0][\chr($i)] = sprintf('\\%02x', $i); + } + + for ($i = 0, $l = \count($charMaps[self::LDAP_ESCAPE_FILTER]); $i < $l; ++$i) { + $chr = $charMaps[self::LDAP_ESCAPE_FILTER][$i]; + unset($charMaps[self::LDAP_ESCAPE_FILTER][$i]); + $charMaps[self::LDAP_ESCAPE_FILTER][$chr] = $charMaps[0][$chr]; + } + + for ($i = 0, $l = \count($charMaps[self::LDAP_ESCAPE_DN]); $i < $l; ++$i) { + $chr = $charMaps[self::LDAP_ESCAPE_DN][$i]; + unset($charMaps[self::LDAP_ESCAPE_DN][$i]); + $charMaps[self::LDAP_ESCAPE_DN][$chr] = $charMaps[0][$chr]; + } + } + + // Create the base char map to escape + $flags = (int) $flags; + $charMap = array(); + + if ($flags & self::LDAP_ESCAPE_FILTER) { + $charMap += $charMaps[self::LDAP_ESCAPE_FILTER]; + } + + if ($flags & self::LDAP_ESCAPE_DN) { + $charMap += $charMaps[self::LDAP_ESCAPE_DN]; + } + + if (!$charMap) { + $charMap = $charMaps[0]; + } + + // Remove any chars to ignore from the list + $ignore = (string) $ignore; + + for ($i = 0, $l = \strlen($ignore); $i < $l; ++$i) { + unset($charMap[$ignore[$i]]); + } + + // Do the main replacement + $result = strtr($subject, $charMap); + + // Encode leading/trailing spaces if self::LDAP_ESCAPE_DN is passed + if ($flags & self::LDAP_ESCAPE_DN) { + if (' ' === $result[0]) { + $result = '\\20'.substr($result, 1); + } + + if (' ' === $result[\strlen($result) - 1]) { + $result = substr($result, 0, -1).'\\20'; + } + } + + return $result; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-php56/README.md b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-php56/README.md new file mode 100644 index 0000000..5ad570b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-php56/README.md @@ -0,0 +1,15 @@ +Symfony Polyfill / Php56 +======================== + +This component provides functions unavailable in releases prior to PHP 5.6: + +- [`hash_equals`](https://php.net/hash_equals) (part of [hash](https://php.net/hash) extension) +- [`ldap_escape`](https://php.net/ldap_escape) (part of [ldap](https://php.net/ldap) extension) + +More information can be found in the +[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). + +License +======= + +This library is released under the [MIT license](LICENSE). diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-php56/bootstrap.php b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-php56/bootstrap.php new file mode 100644 index 0000000..94d34e9 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-php56/bootstrap.php @@ -0,0 +1,40 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Polyfill\Php56 as p; + +if (PHP_VERSION_ID < 50600) { + if (!function_exists('hash_equals')) { + function hash_equals($knownString, $userInput) { return p\Php56::hash_equals($knownString, $userInput); } + } + if (extension_loaded('ldap') && !defined('LDAP_ESCAPE_FILTER')) { + define('LDAP_ESCAPE_FILTER', 1); + define('LDAP_ESCAPE_DN', 2); + } + + if (extension_loaded('ldap') && !function_exists('ldap_escape')) { + function ldap_escape($subject, $ignore = '', $flags = 0) { return p\Php56::ldap_escape($subject, $ignore, $flags); } + } + + if (50509 === PHP_VERSION_ID && 4 === PHP_INT_SIZE) { + // Missing functions in PHP 5.5.9 - affects 32 bit builds of Ubuntu 14.04LTS + // See https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1315888 + if (!function_exists('gzopen') && function_exists('gzopen64')) { + function gzopen($filename, $mode, $use_include_path = 0) { return gzopen64($filename, $mode, $use_include_path); } + } + if (!function_exists('gzseek') && function_exists('gzseek64')) { + function gzseek($zp, $offset, $whence = SEEK_SET) { return gzseek64($zp, $offset, $whence); } + } + if (!function_exists('gztell') && function_exists('gztell64')) { + function gztell($zp) { return gztell64($zp); } + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-php56/composer.json b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-php56/composer.json new file mode 100644 index 0000000..a7daed1 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-php56/composer.json @@ -0,0 +1,32 @@ +{ + "name": "symfony/polyfill-php56", + "type": "library", + "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", + "keywords": ["polyfill", "shim", "compatibility", "portable"], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=5.3.3", + "symfony/polyfill-util": "~1.0" + }, + "autoload": { + "psr-4": { "Symfony\\Polyfill\\Php56\\": "" }, + "files": [ "bootstrap.php" ] + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-master": "1.15-dev" + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/Binary.php b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/Binary.php new file mode 100644 index 0000000..23ff974 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/Binary.php @@ -0,0 +1,22 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Util; + +if (\extension_loaded('mbstring')) { + class Binary extends BinaryOnFuncOverload + { + } +} else { + class Binary extends BinaryNoFuncOverload + { + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/BinaryNoFuncOverload.php b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/BinaryNoFuncOverload.php new file mode 100644 index 0000000..800ad75 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/BinaryNoFuncOverload.php @@ -0,0 +1,65 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Util; + +/** + * @author Nicolas Grekas + * + * @internal + */ +class BinaryNoFuncOverload +{ + public static function strlen($s) + { + return \strlen($s); + } + + public static function strpos($haystack, $needle, $offset = 0) + { + return strpos($haystack, $needle, $offset); + } + + public static function strrpos($haystack, $needle, $offset = 0) + { + return strrpos($haystack, $needle, $offset); + } + + public static function substr($string, $start, $length = PHP_INT_MAX) + { + return substr($string, $start, $length); + } + + public static function stripos($s, $needle, $offset = 0) + { + return stripos($s, $needle, $offset); + } + + public static function stristr($s, $needle, $part = false) + { + return stristr($s, $needle, $part); + } + + public static function strrchr($s, $needle, $part = false) + { + return strrchr($s, $needle, $part); + } + + public static function strripos($s, $needle, $offset = 0) + { + return strripos($s, $needle, $offset); + } + + public static function strstr($s, $needle, $part = false) + { + return strstr($s, $needle, $part); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/BinaryOnFuncOverload.php b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/BinaryOnFuncOverload.php new file mode 100644 index 0000000..e1b886e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/BinaryOnFuncOverload.php @@ -0,0 +1,67 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Util; + +/** + * Binary safe version of string functions overloaded when MB_OVERLOAD_STRING is enabled. + * + * @author Nicolas Grekas + * + * @internal + */ +class BinaryOnFuncOverload +{ + public static function strlen($s) + { + return mb_strlen($s, '8bit'); + } + + public static function strpos($haystack, $needle, $offset = 0) + { + return mb_strpos($haystack, $needle, $offset, '8bit'); + } + + public static function strrpos($haystack, $needle, $offset = 0) + { + return mb_strrpos($haystack, $needle, $offset, '8bit'); + } + + public static function substr($string, $start, $length = 2147483647) + { + return mb_substr($string, $start, $length, '8bit'); + } + + public static function stripos($s, $needle, $offset = 0) + { + return mb_stripos($s, $needle, $offset, '8bit'); + } + + public static function stristr($s, $needle, $part = false) + { + return mb_stristr($s, $needle, $part, '8bit'); + } + + public static function strrchr($s, $needle, $part = false) + { + return mb_strrchr($s, $needle, $part, '8bit'); + } + + public static function strripos($s, $needle, $offset = 0) + { + return mb_strripos($s, $needle, $offset, '8bit'); + } + + public static function strstr($s, $needle, $part = false) + { + return mb_strstr($s, $needle, $part, '8bit'); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/LICENSE b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/LICENSE new file mode 100644 index 0000000..4cd8bdd --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2015-2019 Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/README.md b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/README.md new file mode 100644 index 0000000..1c655fc --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/README.md @@ -0,0 +1,13 @@ +Symfony Polyfill / Util +======================= + +This component provides binary-safe string functions, using the +[mbstring](https://php.net/mbstring) extension when available. + +More information can be found in the +[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). + +License +======= + +This library is released under the [MIT license](LICENSE). diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/TestListener.php b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/TestListener.php new file mode 100644 index 0000000..6b17d45 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/TestListener.php @@ -0,0 +1,28 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Util; + +if (class_exists('PHPUnit_Runner_Version') && version_compare(\PHPUnit_Runner_Version::id(), '6.0.0', '<')) { + class_alias('Symfony\Polyfill\Util\TestListenerForV5', 'Symfony\Polyfill\Util\TestListener'); +// Using an early return instead of a else does not work when using the PHPUnit phar due to some weird PHP behavior (the class +// gets defined without executing the code before it and so the definition is not properly conditional) +} elseif (version_compare(\PHPUnit\Runner\Version::id(), '7.0.0', '<')) { + class_alias('Symfony\Polyfill\Util\TestListenerForV6', 'Symfony\Polyfill\Util\TestListener'); +} else { + class_alias('Symfony\Polyfill\Util\TestListenerForV7', 'Symfony\Polyfill\Util\TestListener'); +} + +if (false) { + class TestListener + { + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/TestListenerForV5.php b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/TestListenerForV5.php new file mode 100644 index 0000000..501053d --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/TestListenerForV5.php @@ -0,0 +1,89 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Util; + +/** + * @author Nicolas Grekas + */ +class TestListenerForV5 extends \PHPUnit_Framework_TestSuite implements \PHPUnit_Framework_TestListener +{ + private $suite; + private $trait; + + public function __construct(\PHPUnit_Framework_TestSuite $suite = null) + { + if ($suite) { + $this->suite = $suite; + $this->setName($suite->getName().' with polyfills enabled'); + $this->addTest($suite); + } + $this->trait = new TestListenerTrait(); + } + + public function startTestSuite(\PHPUnit_Framework_TestSuite $suite) + { + $this->trait->startTestSuite($suite); + } + + public function addError(\PHPUnit_Framework_Test $test, \Exception $e, $time) + { + $this->trait->addError($test, $e, $time); + } + + public function addWarning(\PHPUnit_Framework_Test $test, \PHPUnit_Framework_Warning $e, $time) + { + } + + public function addFailure(\PHPUnit_Framework_Test $test, \PHPUnit_Framework_AssertionFailedError $e, $time) + { + $this->trait->addError($test, $e, $time); + } + + public function addIncompleteTest(\PHPUnit_Framework_Test $test, \Exception $e, $time) + { + } + + public function addRiskyTest(\PHPUnit_Framework_Test $test, \Exception $e, $time) + { + } + + public function addSkippedTest(\PHPUnit_Framework_Test $test, \Exception $e, $time) + { + } + + public function endTestSuite(\PHPUnit_Framework_TestSuite $suite) + { + } + + public function startTest(\PHPUnit_Framework_Test $test) + { + } + + public function endTest(\PHPUnit_Framework_Test $test, $time) + { + } + + public static function warning($message) + { + return parent::warning($message); + } + + protected function setUp() + { + TestListenerTrait::$enabledPolyfills = $this->suite->getName(); + } + + protected function tearDown() + { + TestListenerTrait::$enabledPolyfills = false; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/TestListenerForV6.php b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/TestListenerForV6.php new file mode 100644 index 0000000..e9e87cb --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/TestListenerForV6.php @@ -0,0 +1,95 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Util; + +use PHPUnit\Framework\AssertionFailedError; +use PHPUnit\Framework\Test; +use PHPUnit\Framework\TestListener as TestListenerInterface; +use PHPUnit\Framework\TestSuite; +use PHPUnit\Framework\Warning; + +/** + * @author Nicolas Grekas + */ +class TestListenerForV6 extends TestSuite implements TestListenerInterface +{ + private $suite; + private $trait; + + public function __construct(TestSuite $suite = null) + { + if ($suite) { + $this->suite = $suite; + $this->setName($suite->getName().' with polyfills enabled'); + $this->addTest($suite); + } + $this->trait = new TestListenerTrait(); + } + + public function startTestSuite(TestSuite $suite) + { + $this->trait->startTestSuite($suite); + } + + public function addError(Test $test, \Exception $e, $time) + { + $this->trait->addError($test, $e, $time); + } + + public function addWarning(Test $test, Warning $e, $time) + { + } + + public function addFailure(Test $test, AssertionFailedError $e, $time) + { + $this->trait->addError($test, $e, $time); + } + + public function addIncompleteTest(Test $test, \Exception $e, $time) + { + } + + public function addRiskyTest(Test $test, \Exception $e, $time) + { + } + + public function addSkippedTest(Test $test, \Exception $e, $time) + { + } + + public function endTestSuite(TestSuite $suite) + { + } + + public function startTest(Test $test) + { + } + + public function endTest(Test $test, $time) + { + } + + public static function warning($message) + { + return parent::warning($message); + } + + protected function setUp() + { + TestListenerTrait::$enabledPolyfills = $this->suite->getName(); + } + + protected function tearDown() + { + TestListenerTrait::$enabledPolyfills = false; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/TestListenerForV7.php b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/TestListenerForV7.php new file mode 100644 index 0000000..a5c3759 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/TestListenerForV7.php @@ -0,0 +1,96 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Util; + +use PHPUnit\Framework\AssertionFailedError; +use PHPUnit\Framework\Test; +use PHPUnit\Framework\TestListener as TestListenerInterface; +use PHPUnit\Framework\TestSuite; +use PHPUnit\Framework\Warning; +use PHPUnit\Framework\WarningTestCase; + +/** + * @author Ion Bazan + */ +class TestListenerForV7 extends TestSuite implements TestListenerInterface +{ + private $suite; + private $trait; + + public function __construct(TestSuite $suite = null) + { + if ($suite) { + $this->suite = $suite; + $this->setName($suite->getName().' with polyfills enabled'); + $this->addTest($suite); + } + $this->trait = new TestListenerTrait(); + } + + public function startTestSuite(TestSuite $suite): void + { + $this->trait->startTestSuite($suite); + } + + public function addError(Test $test, \Throwable $t, float $time): void + { + $this->trait->addError($test, $t, $time); + } + + public function addWarning(Test $test, Warning $e, float $time): void + { + } + + public function addFailure(Test $test, AssertionFailedError $e, float $time): void + { + $this->trait->addError($test, $e, $time); + } + + public function addIncompleteTest(Test $test, \Throwable $t, float $time): void + { + } + + public function addRiskyTest(Test $test, \Throwable $t, float $time): void + { + } + + public function addSkippedTest(Test $test, \Throwable $t, float $time): void + { + } + + public function endTestSuite(TestSuite $suite): void + { + } + + public function startTest(Test $test): void + { + } + + public function endTest(Test $test, float $time): void + { + } + + public static function warning($message): WarningTestCase + { + return new WarningTestCase($message); + } + + protected function setUp(): void + { + TestListenerTrait::$enabledPolyfills = $this->suite->getName(); + } + + protected function tearDown(): void + { + TestListenerTrait::$enabledPolyfills = false; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/TestListenerTrait.php b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/TestListenerTrait.php new file mode 100644 index 0000000..777fb48 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/TestListenerTrait.php @@ -0,0 +1,129 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Util; + +/** + * @author Nicolas Grekas + */ +class TestListenerTrait +{ + public static $enabledPolyfills; + + public function startTestSuite($mainSuite) + { + if (null !== self::$enabledPolyfills) { + return; + } + self::$enabledPolyfills = false; + $SkippedTestError = class_exists('PHPUnit\Framework\SkippedTestError') ? 'PHPUnit\Framework\SkippedTestError' : 'PHPUnit_Framework_SkippedTestError'; + + foreach ($mainSuite->tests() as $suite) { + $testClass = $suite->getName(); + if (!$tests = $suite->tests()) { + continue; + } + $testedClass = new \ReflectionClass($testClass); + if (preg_match('{^ \* @requires PHP (.*)}mi', $testedClass->getDocComment(), $m) && version_compare($m[1], \PHP_VERSION, '>')) { + continue; + } + if (!preg_match('/^(.+)\\\\Tests(\\\\.*)Test$/', $testClass, $m)) { + $mainSuite->addTest(TestListener::warning('Unknown naming convention for '.$testClass)); + continue; + } + if (!class_exists($m[1].$m[2])) { + continue; + } + $testedClass = new \ReflectionClass($m[1].$m[2]); + $bootstrap = new \SplFileObject(\dirname($testedClass->getFileName()).'/bootstrap.php'); + $warnings = array(); + $defLine = null; + + foreach (new \RegexIterator($bootstrap, '/define\(\'/') as $defLine) { + preg_match('/define\(\'(?P.+)\'/', $defLine, $matches); + if (\defined($matches['name'])) { + continue; + } + + try { + eval($defLine); + } catch (\PHPUnit_Framework_Exception $ex){ + $warnings[] = TestListener::warning($ex->getMessage()); + } catch (\PHPUnit\Framework\Exception $ex) { + $warnings[] = TestListener::warning($ex->getMessage()); + } + } + + $bootstrap->rewind(); + + foreach (new \RegexIterator($bootstrap, '/return p\\\\'.$testedClass->getShortName().'::/') as $defLine) { + if (!preg_match('/^\s*function (?P[^\(]++)(?P\(.*\)(?: ?: [^ ]++)?) \{ (?return p\\\\'.$testedClass->getShortName().'::[^\(]++)(?P\([^\)]*+\)); \}$/', $defLine, $f)) { + $warnings[] = TestListener::warning('Invalid line in bootstrap.php: '.trim($defLine)); + continue; + } + $testNamespace = substr($testClass, 0, strrpos($testClass, '\\')); + if (\function_exists($testNamespace.'\\'.$f['name'])) { + continue; + } + + try { + $r = new \ReflectionFunction($f['name']); + if ($r->isUserDefined()) { + throw new \ReflectionException(); + } + if ('idn_to_ascii' === $f['name'] || 'idn_to_utf8' === $f['name']) { + $defLine = sprintf('return INTL_IDNA_VARIANT_2003 === $variant ? \\%s($domain, $options, $variant) : \\%1$s%s', $f['name'], $f['args']); + } elseif (false !== strpos($f['signature'], '&') && 'idn_to_ascii' !== $f['name'] && 'idn_to_utf8' !== $f['name']) { + $defLine = sprintf('return \\%s%s', $f['name'], $f['args']); + } else { + $defLine = sprintf("return \\call_user_func_array('%s', \\func_get_args())", $f['name']); + } + } catch (\ReflectionException $e) { + $defLine = sprintf("throw new \\{$SkippedTestError}('Internal function not found: %s')", $f['name']); + } + + eval(<<getNamespaceName()} as p; + +function {$f['name']}{$f['signature']} +{ + if ('{$testClass}' === TestListenerTrait::\$enabledPolyfills) { + {$f['return']}{$f['args']}; + } + + {$defLine}; +} +EOPHP + ); + } + if (!$warnings && null === $defLine) { + $warnings[] = new $SkippedTestError('No Polyfills found in bootstrap.php for '.$testClass); + } else { + $mainSuite->addTest(new TestListener($suite)); + } + } + foreach ($warnings as $w) { + $mainSuite->addTest($w); + } + } + + public function addError($test, \Exception $e, $time) + { + if (false !== self::$enabledPolyfills) { + $r = new \ReflectionProperty('Exception', 'message'); + $r->setAccessible(true); + $r->setValue($e, 'Polyfills enabled, '.$r->getValue($e)); + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/composer.json b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/composer.json new file mode 100644 index 0000000..f5527d6 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/polyfill-util/composer.json @@ -0,0 +1,30 @@ +{ + "name": "symfony/polyfill-util", + "type": "library", + "description": "Symfony utilities for portability of PHP codes", + "keywords": ["polyfill", "shim", "compat", "compatibility"], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=5.3.3" + }, + "autoload": { + "psr-4": { "Symfony\\Polyfill\\Util\\": "" } + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-master": "1.15-dev" + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation-contracts/LICENSE b/soc/2020/daily_report/archive/app/vendor/symfony/translation-contracts/LICENSE new file mode 100644 index 0000000..3f853aa --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation-contracts/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2018-2019 Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation-contracts/LocaleAwareInterface.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation-contracts/LocaleAwareInterface.php new file mode 100644 index 0000000..922ec1d --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation-contracts/LocaleAwareInterface.php @@ -0,0 +1,31 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Contracts\Translation; + +interface LocaleAwareInterface +{ + /** + * Sets the current locale. + * + * @param string $locale The locale + * + * @throws \InvalidArgumentException If the locale contains invalid characters + */ + public function setLocale(string $locale); + + /** + * Returns the current locale. + * + * @return string The locale + */ + public function getLocale(); +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation-contracts/README.md b/soc/2020/daily_report/archive/app/vendor/symfony/translation-contracts/README.md new file mode 100644 index 0000000..6c693ce --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation-contracts/README.md @@ -0,0 +1,9 @@ +Symfony Translation Contracts +============================= + +A set of abstractions extracted out of the Symfony components. + +Can be used to build on semantics that the Symfony components proved useful - and +that already have battle tested implementations. + +See https://github.com/symfony/contracts/blob/master/README.md for more information. diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation-contracts/Test/TranslatorTest.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation-contracts/Test/TranslatorTest.php new file mode 100644 index 0000000..5bfb0f8 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation-contracts/Test/TranslatorTest.php @@ -0,0 +1,353 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Contracts\Translation\Test; + +use PHPUnit\Framework\TestCase; +use Symfony\Contracts\Translation\TranslatorInterface; +use Symfony\Contracts\Translation\TranslatorTrait; + +/** + * Test should cover all languages mentioned on http://translate.sourceforge.net/wiki/l10n/pluralforms + * and Plural forms mentioned on http://www.gnu.org/software/gettext/manual/gettext.html#Plural-forms. + * + * See also https://developer.mozilla.org/en/Localization_and_Plurals which mentions 15 rules having a maximum of 6 forms. + * The mozilla code is also interesting to check for. + * + * As mentioned by chx http://drupal.org/node/1273968 we can cover all by testing number from 0 to 199 + * + * The goal to cover all languages is to far fetched so this test case is smaller. + * + * @author Clemens Tolboom clemens@build2be.nl + */ +class TranslatorTest extends TestCase +{ + public function getTranslator() + { + return new class() implements TranslatorInterface { + use TranslatorTrait; + }; + } + + /** + * @dataProvider getTransTests + */ + public function testTrans($expected, $id, $parameters) + { + $translator = $this->getTranslator(); + + $this->assertEquals($expected, $translator->trans($id, $parameters)); + } + + /** + * @dataProvider getTransChoiceTests + */ + public function testTransChoiceWithExplicitLocale($expected, $id, $number) + { + $translator = $this->getTranslator(); + $translator->setLocale('en'); + + $this->assertEquals($expected, $translator->trans($id, ['%count%' => $number])); + } + + /** + * @dataProvider getTransChoiceTests + */ + public function testTransChoiceWithDefaultLocale($expected, $id, $number) + { + \Locale::setDefault('en'); + + $translator = $this->getTranslator(); + + $this->assertEquals($expected, $translator->trans($id, ['%count%' => $number])); + } + + public function testGetSetLocale() + { + $translator = $this->getTranslator(); + $translator->setLocale('en'); + + $this->assertEquals('en', $translator->getLocale()); + } + + /** + * @requires extension intl + */ + public function testGetLocaleReturnsDefaultLocaleIfNotSet() + { + $translator = $this->getTranslator(); + + \Locale::setDefault('pt_BR'); + $this->assertEquals('pt_BR', $translator->getLocale()); + + \Locale::setDefault('en'); + $this->assertEquals('en', $translator->getLocale()); + } + + public function getTransTests() + { + return [ + ['Symfony is great!', 'Symfony is great!', []], + ['Symfony is awesome!', 'Symfony is %what%!', ['%what%' => 'awesome']], + ]; + } + + public function getTransChoiceTests() + { + return [ + ['There are no apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 0], + ['There is one apple', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 1], + ['There are 10 apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 10], + ['There are 0 apples', 'There is 1 apple|There are %count% apples', 0], + ['There is 1 apple', 'There is 1 apple|There are %count% apples', 1], + ['There are 10 apples', 'There is 1 apple|There are %count% apples', 10], + // custom validation messages may be coded with a fixed value + ['There are 2 apples', 'There are 2 apples', 2], + ]; + } + + /** + * @dataProvider getInternal + */ + public function testInterval($expected, $number, $interval) + { + $translator = $this->getTranslator(); + + $this->assertEquals($expected, $translator->trans($interval.' foo|[1,Inf[ bar', ['%count%' => $number])); + } + + public function getInternal() + { + return [ + ['foo', 3, '{1,2, 3 ,4}'], + ['bar', 10, '{1,2, 3 ,4}'], + ['bar', 3, '[1,2]'], + ['foo', 1, '[1,2]'], + ['foo', 2, '[1,2]'], + ['bar', 1, ']1,2['], + ['bar', 2, ']1,2['], + ['foo', log(0), '[-Inf,2['], + ['foo', -log(0), '[-2,+Inf]'], + ]; + } + + /** + * @dataProvider getChooseTests + */ + public function testChoose($expected, $id, $number) + { + $translator = $this->getTranslator(); + + $this->assertEquals($expected, $translator->trans($id, ['%count%' => $number])); + } + + public function testReturnMessageIfExactlyOneStandardRuleIsGiven() + { + $translator = $this->getTranslator(); + + $this->assertEquals('There are two apples', $translator->trans('There are two apples', ['%count%' => 2])); + } + + /** + * @dataProvider getNonMatchingMessages + */ + public function testThrowExceptionIfMatchingMessageCannotBeFound($id, $number) + { + $this->expectException('InvalidArgumentException'); + $translator = $this->getTranslator(); + + $translator->trans($id, ['%count%' => $number]); + } + + public function getNonMatchingMessages() + { + return [ + ['{0} There are no apples|{1} There is one apple', 2], + ['{1} There is one apple|]1,Inf] There are %count% apples', 0], + ['{1} There is one apple|]2,Inf] There are %count% apples', 2], + ['{0} There are no apples|There is one apple', 2], + ]; + } + + public function getChooseTests() + { + return [ + ['There are no apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 0], + ['There are no apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 0], + ['There are no apples', '{0}There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 0], + + ['There is one apple', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 1], + + ['There are 10 apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 10], + ['There are 10 apples', '{0} There are no apples|{1} There is one apple|]1,Inf]There are %count% apples', 10], + ['There are 10 apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 10], + + ['There are 0 apples', 'There is one apple|There are %count% apples', 0], + ['There is one apple', 'There is one apple|There are %count% apples', 1], + ['There are 10 apples', 'There is one apple|There are %count% apples', 10], + + ['There are 0 apples', 'one: There is one apple|more: There are %count% apples', 0], + ['There is one apple', 'one: There is one apple|more: There are %count% apples', 1], + ['There are 10 apples', 'one: There is one apple|more: There are %count% apples', 10], + + ['There are no apples', '{0} There are no apples|one: There is one apple|more: There are %count% apples', 0], + ['There is one apple', '{0} There are no apples|one: There is one apple|more: There are %count% apples', 1], + ['There are 10 apples', '{0} There are no apples|one: There is one apple|more: There are %count% apples', 10], + + ['', '{0}|{1} There is one apple|]1,Inf] There are %count% apples', 0], + ['', '{0} There are no apples|{1}|]1,Inf] There are %count% apples', 1], + + // Indexed only tests which are Gettext PoFile* compatible strings. + ['There are 0 apples', 'There is one apple|There are %count% apples', 0], + ['There is one apple', 'There is one apple|There are %count% apples', 1], + ['There are 2 apples', 'There is one apple|There are %count% apples', 2], + + // Tests for float numbers + ['There is almost one apple', '{0} There are no apples|]0,1[ There is almost one apple|{1} There is one apple|[1,Inf] There is more than one apple', 0.7], + ['There is one apple', '{0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 1], + ['There is more than one apple', '{0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 1.7], + ['There are no apples', '{0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 0], + ['There are no apples', '{0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 0.0], + ['There are no apples', '{0.0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 0], + + // Test texts with new-lines + // with double-quotes and \n in id & double-quotes and actual newlines in text + ["This is a text with a\n new-line in it. Selector = 0.", '{0}This is a text with a + new-line in it. Selector = 0.|{1}This is a text with a + new-line in it. Selector = 1.|[1,Inf]This is a text with a + new-line in it. Selector > 1.', 0], + // with double-quotes and \n in id and single-quotes and actual newlines in text + ["This is a text with a\n new-line in it. Selector = 1.", '{0}This is a text with a + new-line in it. Selector = 0.|{1}This is a text with a + new-line in it. Selector = 1.|[1,Inf]This is a text with a + new-line in it. Selector > 1.', 1], + ["This is a text with a\n new-line in it. Selector > 1.", '{0}This is a text with a + new-line in it. Selector = 0.|{1}This is a text with a + new-line in it. Selector = 1.|[1,Inf]This is a text with a + new-line in it. Selector > 1.', 5], + // with double-quotes and id split accros lines + ['This is a text with a + new-line in it. Selector = 1.', '{0}This is a text with a + new-line in it. Selector = 0.|{1}This is a text with a + new-line in it. Selector = 1.|[1,Inf]This is a text with a + new-line in it. Selector > 1.', 1], + // with single-quotes and id split accros lines + ['This is a text with a + new-line in it. Selector > 1.', '{0}This is a text with a + new-line in it. Selector = 0.|{1}This is a text with a + new-line in it. Selector = 1.|[1,Inf]This is a text with a + new-line in it. Selector > 1.', 5], + // with single-quotes and \n in text + ['This is a text with a\nnew-line in it. Selector = 0.', '{0}This is a text with a\nnew-line in it. Selector = 0.|{1}This is a text with a\nnew-line in it. Selector = 1.|[1,Inf]This is a text with a\nnew-line in it. Selector > 1.', 0], + // with double-quotes and id split accros lines + ["This is a text with a\nnew-line in it. Selector = 1.", "{0}This is a text with a\nnew-line in it. Selector = 0.|{1}This is a text with a\nnew-line in it. Selector = 1.|[1,Inf]This is a text with a\nnew-line in it. Selector > 1.", 1], + // esacape pipe + ['This is a text with | in it. Selector = 0.', '{0}This is a text with || in it. Selector = 0.|{1}This is a text with || in it. Selector = 1.', 0], + // Empty plural set (2 plural forms) from a .PO file + ['', '|', 1], + // Empty plural set (3 plural forms) from a .PO file + ['', '||', 1], + ]; + } + + /** + * @dataProvider failingLangcodes + */ + public function testFailedLangcodes($nplural, $langCodes) + { + $matrix = $this->generateTestData($langCodes); + $this->validateMatrix($nplural, $matrix, false); + } + + /** + * @dataProvider successLangcodes + */ + public function testLangcodes($nplural, $langCodes) + { + $matrix = $this->generateTestData($langCodes); + $this->validateMatrix($nplural, $matrix); + } + + /** + * This array should contain all currently known langcodes. + * + * As it is impossible to have this ever complete we should try as hard as possible to have it almost complete. + * + * @return array + */ + public function successLangcodes() + { + return [ + ['1', ['ay', 'bo', 'cgg', 'dz', 'id', 'ja', 'jbo', 'ka', 'kk', 'km', 'ko', 'ky']], + ['2', ['nl', 'fr', 'en', 'de', 'de_GE', 'hy', 'hy_AM']], + ['3', ['be', 'bs', 'cs', 'hr']], + ['4', ['cy', 'mt', 'sl']], + ['6', ['ar']], + ]; + } + + /** + * This array should be at least empty within the near future. + * + * This both depends on a complete list trying to add above as understanding + * the plural rules of the current failing languages. + * + * @return array with nplural together with langcodes + */ + public function failingLangcodes() + { + return [ + ['1', ['fa']], + ['2', ['jbo']], + ['3', ['cbs']], + ['4', ['gd', 'kw']], + ['5', ['ga']], + ]; + } + + /** + * We validate only on the plural coverage. Thus the real rules is not tested. + * + * @param string $nplural Plural expected + * @param array $matrix Containing langcodes and their plural index values + * @param bool $expectSuccess + */ + protected function validateMatrix($nplural, $matrix, $expectSuccess = true) + { + foreach ($matrix as $langCode => $data) { + $indexes = array_flip($data); + if ($expectSuccess) { + $this->assertEquals($nplural, \count($indexes), "Langcode '$langCode' has '$nplural' plural forms."); + } else { + $this->assertNotEquals((int) $nplural, \count($indexes), "Langcode '$langCode' has '$nplural' plural forms."); + } + } + } + + protected function generateTestData($langCodes) + { + $translator = new class() { + use TranslatorTrait { + getPluralizationRule as public; + } + }; + + $matrix = []; + foreach ($langCodes as $langCode) { + for ($count = 0; $count < 200; ++$count) { + $plural = $translator->getPluralizationRule($count, $langCode); + $matrix[$langCode][$count] = $plural; + } + } + + return $matrix; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation-contracts/TranslatorInterface.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation-contracts/TranslatorInterface.php new file mode 100644 index 0000000..b62df5e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation-contracts/TranslatorInterface.php @@ -0,0 +1,65 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Contracts\Translation; + +/** + * @author Fabien Potencier + */ +interface TranslatorInterface +{ + /** + * Translates the given message. + * + * When a number is provided as a parameter named "%count%", the message is parsed for plural + * forms and a translation is chosen according to this number using the following rules: + * + * Given a message with different plural translations separated by a + * pipe (|), this method returns the correct portion of the message based + * on the given number, locale and the pluralization rules in the message + * itself. + * + * The message supports two different types of pluralization rules: + * + * interval: {0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples + * indexed: There is one apple|There are %count% apples + * + * The indexed solution can also contain labels (e.g. one: There is one apple). + * This is purely for making the translations more clear - it does not + * affect the functionality. + * + * The two methods can also be mixed: + * {0} There are no apples|one: There is one apple|more: There are %count% apples + * + * An interval can represent a finite set of numbers: + * {1,2,3,4} + * + * An interval can represent numbers between two numbers: + * [1, +Inf] + * ]-1,2[ + * + * The left delimiter can be [ (inclusive) or ] (exclusive). + * The right delimiter can be [ (exclusive) or ] (inclusive). + * Beside numbers, you can use -Inf and +Inf for the infinite. + * + * @see https://en.wikipedia.org/wiki/ISO_31-11 + * + * @param string $id The message id (may also be an object that can be cast to string) + * @param array $parameters An array of parameters for the message + * @param string|null $domain The domain for the message or null to use the default + * @param string|null $locale The locale or null to use the default + * + * @return string The translated string + * + * @throws \InvalidArgumentException If the locale contains invalid characters + */ + public function trans(string $id, array $parameters = [], string $domain = null, string $locale = null); +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation-contracts/TranslatorTrait.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation-contracts/TranslatorTrait.php new file mode 100644 index 0000000..f81637a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation-contracts/TranslatorTrait.php @@ -0,0 +1,257 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Contracts\Translation; + +use Symfony\Component\Translation\Exception\InvalidArgumentException; + +/** + * A trait to help implement TranslatorInterface and LocaleAwareInterface. + * + * @author Fabien Potencier + */ +trait TranslatorTrait +{ + private $locale; + + /** + * {@inheritdoc} + */ + public function setLocale(string $locale) + { + $this->locale = $locale; + } + + /** + * {@inheritdoc} + */ + public function getLocale() + { + return $this->locale ?: \Locale::getDefault(); + } + + /** + * {@inheritdoc} + */ + public function trans(?string $id, array $parameters = [], string $domain = null, string $locale = null): string + { + if (null === $id || '' === $id) { + return ''; + } + + if (!isset($parameters['%count%']) || !is_numeric($parameters['%count%'])) { + return strtr($id, $parameters); + } + + $number = (float) $parameters['%count%']; + $locale = $locale ?: $this->getLocale(); + + $parts = []; + if (preg_match('/^\|++$/', $id)) { + $parts = explode('|', $id); + } elseif (preg_match_all('/(?:\|\||[^\|])++/', $id, $matches)) { + $parts = $matches[0]; + } + + $intervalRegexp = <<<'EOF' +/^(?P + ({\s* + (\-?\d+(\.\d+)?[\s*,\s*\-?\d+(\.\d+)?]*) + \s*}) + + | + + (?P[\[\]]) + \s* + (?P-Inf|\-?\d+(\.\d+)?) + \s*,\s* + (?P\+?Inf|\-?\d+(\.\d+)?) + \s* + (?P[\[\]]) +)\s*(?P.*?)$/xs +EOF; + + $standardRules = []; + foreach ($parts as $part) { + $part = trim(str_replace('||', '|', $part)); + + // try to match an explicit rule, then fallback to the standard ones + if (preg_match($intervalRegexp, $part, $matches)) { + if ($matches[2]) { + foreach (explode(',', $matches[3]) as $n) { + if ($number == $n) { + return strtr($matches['message'], $parameters); + } + } + } else { + $leftNumber = '-Inf' === $matches['left'] ? -INF : (float) $matches['left']; + $rightNumber = is_numeric($matches['right']) ? (float) $matches['right'] : INF; + + if (('[' === $matches['left_delimiter'] ? $number >= $leftNumber : $number > $leftNumber) + && (']' === $matches['right_delimiter'] ? $number <= $rightNumber : $number < $rightNumber) + ) { + return strtr($matches['message'], $parameters); + } + } + } elseif (preg_match('/^\w+\:\s*(.*?)$/', $part, $matches)) { + $standardRules[] = $matches[1]; + } else { + $standardRules[] = $part; + } + } + + $position = $this->getPluralizationRule($number, $locale); + + if (!isset($standardRules[$position])) { + // when there's exactly one rule given, and that rule is a standard + // rule, use this rule + if (1 === \count($parts) && isset($standardRules[0])) { + return strtr($standardRules[0], $parameters); + } + + $message = sprintf('Unable to choose a translation for "%s" with locale "%s" for value "%d". Double check that this translation has the correct plural options (e.g. "There is one apple|There are %%count%% apples").', $id, $locale, $number); + + if (class_exists(InvalidArgumentException::class)) { + throw new InvalidArgumentException($message); + } + + throw new \InvalidArgumentException($message); + } + + return strtr($standardRules[$position], $parameters); + } + + /** + * Returns the plural position to use for the given locale and number. + * + * The plural rules are derived from code of the Zend Framework (2010-09-25), + * which is subject to the new BSD license (http://framework.zend.com/license/new-bsd). + * Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) + */ + private function getPluralizationRule(int $number, string $locale): int + { + switch ('pt_BR' !== $locale && \strlen($locale) > 3 ? substr($locale, 0, strrpos($locale, '_')) : $locale) { + case 'af': + case 'bn': + case 'bg': + case 'ca': + case 'da': + case 'de': + case 'el': + case 'en': + case 'eo': + case 'es': + case 'et': + case 'eu': + case 'fa': + case 'fi': + case 'fo': + case 'fur': + case 'fy': + case 'gl': + case 'gu': + case 'ha': + case 'he': + case 'hu': + case 'is': + case 'it': + case 'ku': + case 'lb': + case 'ml': + case 'mn': + case 'mr': + case 'nah': + case 'nb': + case 'ne': + case 'nl': + case 'nn': + case 'no': + case 'oc': + case 'om': + case 'or': + case 'pa': + case 'pap': + case 'ps': + case 'pt': + case 'so': + case 'sq': + case 'sv': + case 'sw': + case 'ta': + case 'te': + case 'tk': + case 'ur': + case 'zu': + return (1 == $number) ? 0 : 1; + + case 'am': + case 'bh': + case 'fil': + case 'fr': + case 'gun': + case 'hi': + case 'hy': + case 'ln': + case 'mg': + case 'nso': + case 'pt_BR': + case 'ti': + case 'wa': + return ((0 == $number) || (1 == $number)) ? 0 : 1; + + case 'be': + case 'bs': + case 'hr': + case 'ru': + case 'sh': + case 'sr': + case 'uk': + return ((1 == $number % 10) && (11 != $number % 100)) ? 0 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 10) || ($number % 100 >= 20))) ? 1 : 2); + + case 'cs': + case 'sk': + return (1 == $number) ? 0 : ((($number >= 2) && ($number <= 4)) ? 1 : 2); + + case 'ga': + return (1 == $number) ? 0 : ((2 == $number) ? 1 : 2); + + case 'lt': + return ((1 == $number % 10) && (11 != $number % 100)) ? 0 : ((($number % 10 >= 2) && (($number % 100 < 10) || ($number % 100 >= 20))) ? 1 : 2); + + case 'sl': + return (1 == $number % 100) ? 0 : ((2 == $number % 100) ? 1 : (((3 == $number % 100) || (4 == $number % 100)) ? 2 : 3)); + + case 'mk': + return (1 == $number % 10) ? 0 : 1; + + case 'mt': + return (1 == $number) ? 0 : (((0 == $number) || (($number % 100 > 1) && ($number % 100 < 11))) ? 1 : ((($number % 100 > 10) && ($number % 100 < 20)) ? 2 : 3)); + + case 'lv': + return (0 == $number) ? 0 : (((1 == $number % 10) && (11 != $number % 100)) ? 1 : 2); + + case 'pl': + return (1 == $number) ? 0 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 12) || ($number % 100 > 14))) ? 1 : 2); + + case 'cy': + return (1 == $number) ? 0 : ((2 == $number) ? 1 : (((8 == $number) || (11 == $number)) ? 2 : 3)); + + case 'ro': + return (1 == $number) ? 0 : (((0 == $number) || (($number % 100 > 0) && ($number % 100 < 20))) ? 1 : 2); + + case 'ar': + return (0 == $number) ? 0 : ((1 == $number) ? 1 : ((2 == $number) ? 2 : ((($number % 100 >= 3) && ($number % 100 <= 10)) ? 3 : ((($number % 100 >= 11) && ($number % 100 <= 99)) ? 4 : 5)))); + + default: + return 0; + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation-contracts/composer.json b/soc/2020/daily_report/archive/app/vendor/symfony/translation-contracts/composer.json new file mode 100644 index 0000000..d185b3a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation-contracts/composer.json @@ -0,0 +1,33 @@ +{ + "name": "symfony/translation-contracts", + "type": "library", + "description": "Generic abstractions related to translation", + "keywords": ["abstractions", "contracts", "decoupling", "interfaces", "interoperability", "standards"], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": "^7.2.5" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "autoload": { + "psr-4": { "Symfony\\Contracts\\Translation\\": "" } + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/CHANGELOG.md b/soc/2020/daily_report/archive/app/vendor/symfony/translation/CHANGELOG.md new file mode 100644 index 0000000..b1de62a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/CHANGELOG.md @@ -0,0 +1,148 @@ +CHANGELOG +========= + +5.0.0 +----- + + * removed support for using `null` as the locale in `Translator` + * removed `TranslatorInterface` + * removed `MessageSelector` + * removed `ChoiceMessageFormatterInterface` + * removed `PluralizationRule` + * removed `Interval` + * removed `transChoice()` methods, use the trans() method instead with a %count% parameter + * removed `FileDumper::setBackup()` and `TranslationWriter::disableBackup()` + * removed `MessageFormatter::choiceFormat()` + * added argument `$filename` to `PhpExtractor::parseTokens()` + * removed support for implicit STDIN usage in the `lint:xliff` command, use `lint:xliff -` (append a dash) instead to make it explicit. + +4.4.0 +----- + + * deprecated support for using `null` as the locale in `Translator` + * deprecated accepting STDIN implicitly when using the `lint:xliff` command, use `lint:xliff -` (append a dash) instead to make it explicit. + * Marked the `TranslationDataCollector` class as `@final`. + +4.3.0 +----- + + * Improved Xliff 1.2 loader to load the original file's metadata + * Added `TranslatorPathsPass` + +4.2.0 +----- + + * Started using ICU parent locales as fallback locales. + * allow using the ICU message format using domains with the "+intl-icu" suffix + * deprecated `Translator::transChoice()` in favor of using `Translator::trans()` with a `%count%` parameter + * deprecated `TranslatorInterface` in favor of `Symfony\Contracts\Translation\TranslatorInterface` + * deprecated `MessageSelector`, `Interval` and `PluralizationRules`; use `IdentityTranslator` instead + * Added `IntlFormatter` and `IntlFormatterInterface` + * added support for multiple files and directories in `XliffLintCommand` + * Marked `Translator::getFallbackLocales()` and `TranslationDataCollector::getFallbackLocales()` as internal + +4.1.0 +----- + + * The `FileDumper::setBackup()` method is deprecated. + * The `TranslationWriter::disableBackup()` method is deprecated. + * The `XliffFileDumper` will write "name" on the "unit" node when dumping XLIFF 2.0. + +4.0.0 +----- + + * removed the backup feature of the `FileDumper` class + * removed `TranslationWriter::writeTranslations()` method + * removed support for passing `MessageSelector` instances to the constructor of the `Translator` class + +3.4.0 +----- + + * Added `TranslationDumperPass` + * Added `TranslationExtractorPass` + * Added `TranslatorPass` + * Added `TranslationReader` and `TranslationReaderInterface` + * Added `` section to the Xliff 2.0 dumper. + * Improved Xliff 2.0 loader to load `` section. + * Added `TranslationWriterInterface` + * Deprecated `TranslationWriter::writeTranslations` in favor of `TranslationWriter::write` + * added support for adding custom message formatter and decoupling the default one. + * Added `PhpExtractor` + * Added `PhpStringTokenParser` + +3.2.0 +----- + + * Added support for escaping `|` in plural translations with double pipe. + +3.1.0 +----- + + * Deprecated the backup feature of the file dumper classes. + +3.0.0 +----- + + * removed `FileDumper::format()` method. + * Changed the visibility of the locale property in `Translator` from protected to private. + +2.8.0 +----- + + * deprecated FileDumper::format(), overwrite FileDumper::formatCatalogue() instead. + * deprecated Translator::getMessages(), rely on TranslatorBagInterface::getCatalogue() instead. + * added `FileDumper::formatCatalogue` which allows format the catalogue without dumping it into file. + * added option `json_encoding` to JsonFileDumper + * added options `as_tree`, `inline` to YamlFileDumper + * added support for XLIFF 2.0. + * added support for XLIFF target and tool attributes. + * added message parameters to DataCollectorTranslator. + * [DEPRECATION] The `DiffOperation` class has been deprecated and + will be removed in Symfony 3.0, since its operation has nothing to do with 'diff', + so the class name is misleading. The `TargetOperation` class should be used for + this use-case instead. + +2.7.0 +----- + + * added DataCollectorTranslator for collecting the translated messages. + +2.6.0 +----- + + * added possibility to cache catalogues + * added TranslatorBagInterface + * added LoggingTranslator + * added Translator::getMessages() for retrieving the message catalogue as an array + +2.5.0 +----- + + * added relative file path template to the file dumpers + * added optional backup to the file dumpers + * changed IcuResFileDumper to extend FileDumper + +2.3.0 +----- + + * added classes to make operations on catalogues (like making a diff or a merge on 2 catalogues) + * added Translator::getFallbackLocales() + * deprecated Translator::setFallbackLocale() in favor of the new Translator::setFallbackLocales() method + +2.2.0 +----- + + * QtTranslationsLoader class renamed to QtFileLoader. QtTranslationsLoader is deprecated and will be removed in 2.3. + * [BC BREAK] uniformized the exception thrown by the load() method when an error occurs. The load() method now + throws Symfony\Component\Translation\Exception\NotFoundResourceException when a resource cannot be found + and Symfony\Component\Translation\Exception\InvalidResourceException when a resource is invalid. + * changed the exception class thrown by some load() methods from \RuntimeException to \InvalidArgumentException + (IcuDatFileLoader, IcuResFileLoader and QtFileLoader) + +2.1.0 +----- + + * added support for more than one fallback locale + * added support for extracting translation messages from templates (Twig and PHP) + * added dumpers for translation catalogs + * added support for QT, gettext, and ResourceBundles diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Catalogue/AbstractOperation.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Catalogue/AbstractOperation.php new file mode 100644 index 0000000..17c257f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Catalogue/AbstractOperation.php @@ -0,0 +1,157 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Catalogue; + +use Symfony\Component\Translation\Exception\InvalidArgumentException; +use Symfony\Component\Translation\Exception\LogicException; +use Symfony\Component\Translation\MessageCatalogue; +use Symfony\Component\Translation\MessageCatalogueInterface; + +/** + * Base catalogues binary operation class. + * + * A catalogue binary operation performs operation on + * source (the left argument) and target (the right argument) catalogues. + * + * @author Jean-François Simon + */ +abstract class AbstractOperation implements OperationInterface +{ + protected $source; + protected $target; + protected $result; + + /** + * @var array|null The domains affected by this operation + */ + private $domains; + + /** + * This array stores 'all', 'new' and 'obsolete' messages for all valid domains. + * + * The data structure of this array is as follows: + * + * [ + * 'domain 1' => [ + * 'all' => [...], + * 'new' => [...], + * 'obsolete' => [...] + * ], + * 'domain 2' => [ + * 'all' => [...], + * 'new' => [...], + * 'obsolete' => [...] + * ], + * ... + * ] + * + * @var array The array that stores 'all', 'new' and 'obsolete' messages + */ + protected $messages; + + /** + * @throws LogicException + */ + public function __construct(MessageCatalogueInterface $source, MessageCatalogueInterface $target) + { + if ($source->getLocale() !== $target->getLocale()) { + throw new LogicException('Operated catalogues must belong to the same locale.'); + } + + $this->source = $source; + $this->target = $target; + $this->result = new MessageCatalogue($source->getLocale()); + $this->messages = []; + } + + /** + * {@inheritdoc} + */ + public function getDomains() + { + if (null === $this->domains) { + $this->domains = array_values(array_unique(array_merge($this->source->getDomains(), $this->target->getDomains()))); + } + + return $this->domains; + } + + /** + * {@inheritdoc} + */ + public function getMessages(string $domain) + { + if (!\in_array($domain, $this->getDomains())) { + throw new InvalidArgumentException(sprintf('Invalid domain: "%s".', $domain)); + } + + if (!isset($this->messages[$domain]['all'])) { + $this->processDomain($domain); + } + + return $this->messages[$domain]['all']; + } + + /** + * {@inheritdoc} + */ + public function getNewMessages(string $domain) + { + if (!\in_array($domain, $this->getDomains())) { + throw new InvalidArgumentException(sprintf('Invalid domain: "%s".', $domain)); + } + + if (!isset($this->messages[$domain]['new'])) { + $this->processDomain($domain); + } + + return $this->messages[$domain]['new']; + } + + /** + * {@inheritdoc} + */ + public function getObsoleteMessages(string $domain) + { + if (!\in_array($domain, $this->getDomains())) { + throw new InvalidArgumentException(sprintf('Invalid domain: "%s".', $domain)); + } + + if (!isset($this->messages[$domain]['obsolete'])) { + $this->processDomain($domain); + } + + return $this->messages[$domain]['obsolete']; + } + + /** + * {@inheritdoc} + */ + public function getResult() + { + foreach ($this->getDomains() as $domain) { + if (!isset($this->messages[$domain])) { + $this->processDomain($domain); + } + } + + return $this->result; + } + + /** + * Performs operation on source and target catalogues for the given domain and + * stores the results. + * + * @param string $domain The domain which the operation will be performed for + */ + abstract protected function processDomain(string $domain); +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Catalogue/MergeOperation.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Catalogue/MergeOperation.php new file mode 100644 index 0000000..2a23e85 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Catalogue/MergeOperation.php @@ -0,0 +1,58 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Catalogue; + +use Symfony\Component\Translation\MessageCatalogueInterface; + +/** + * Merge operation between two catalogues as follows: + * all = source ∪ target = {x: x ∈ source ∨ x ∈ target} + * new = all ∖ source = {x: x ∈ target ∧ x ∉ source} + * obsolete = source ∖ all = {x: x ∈ source ∧ x ∉ source ∧ x ∉ target} = ∅ + * Basically, the result contains messages from both catalogues. + * + * @author Jean-François Simon + */ +class MergeOperation extends AbstractOperation +{ + /** + * {@inheritdoc} + */ + protected function processDomain(string $domain) + { + $this->messages[$domain] = [ + 'all' => [], + 'new' => [], + 'obsolete' => [], + ]; + $intlDomain = $domain.MessageCatalogueInterface::INTL_DOMAIN_SUFFIX; + + foreach ($this->source->all($domain) as $id => $message) { + $this->messages[$domain]['all'][$id] = $message; + $this->result->add([$id => $message], $this->source->defines($id, $intlDomain) ? $intlDomain : $domain); + if (null !== $keyMetadata = $this->source->getMetadata($id, $domain)) { + $this->result->setMetadata($id, $keyMetadata, $domain); + } + } + + foreach ($this->target->all($domain) as $id => $message) { + if (!$this->source->has($id, $domain)) { + $this->messages[$domain]['all'][$id] = $message; + $this->messages[$domain]['new'][$id] = $message; + $this->result->add([$id => $message], $this->target->defines($id, $intlDomain) ? $intlDomain : $domain); + if (null !== $keyMetadata = $this->target->getMetadata($id, $domain)) { + $this->result->setMetadata($id, $keyMetadata, $domain); + } + } + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Catalogue/OperationInterface.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Catalogue/OperationInterface.php new file mode 100644 index 0000000..9ffac88 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Catalogue/OperationInterface.php @@ -0,0 +1,71 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Catalogue; + +use Symfony\Component\Translation\MessageCatalogueInterface; + +/** + * Represents an operation on catalogue(s). + * + * An instance of this interface performs an operation on one or more catalogues and + * stores intermediate and final results of the operation. + * + * The first catalogue in its argument(s) is called the 'source catalogue' or 'source' and + * the following results are stored: + * + * Messages: also called 'all', are valid messages for the given domain after the operation is performed. + * + * New Messages: also called 'new' (new = all ∖ source = {x: x ∈ all ∧ x ∉ source}). + * + * Obsolete Messages: also called 'obsolete' (obsolete = source ∖ all = {x: x ∈ source ∧ x ∉ all}). + * + * Result: also called 'result', is the resulting catalogue for the given domain that holds the same messages as 'all'. + * + * @author Jean-François Simon + */ +interface OperationInterface +{ + /** + * Returns domains affected by operation. + * + * @return array + */ + public function getDomains(); + + /** + * Returns all valid messages ('all') after operation. + * + * @return array + */ + public function getMessages(string $domain); + + /** + * Returns new messages ('new') after operation. + * + * @return array + */ + public function getNewMessages(string $domain); + + /** + * Returns obsolete messages ('obsolete') after operation. + * + * @return array + */ + public function getObsoleteMessages(string $domain); + + /** + * Returns resulting catalogue ('result'). + * + * @return MessageCatalogueInterface + */ + public function getResult(); +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Catalogue/TargetOperation.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Catalogue/TargetOperation.php new file mode 100644 index 0000000..249a521 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Catalogue/TargetOperation.php @@ -0,0 +1,72 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Catalogue; + +use Symfony\Component\Translation\MessageCatalogueInterface; + +/** + * Target operation between two catalogues: + * intersection = source ∩ target = {x: x ∈ source ∧ x ∈ target} + * all = intersection ∪ (target ∖ intersection) = target + * new = all ∖ source = {x: x ∈ target ∧ x ∉ source} + * obsolete = source ∖ all = source ∖ target = {x: x ∈ source ∧ x ∉ target} + * Basically, the result contains messages from the target catalogue. + * + * @author Michael Lee + */ +class TargetOperation extends AbstractOperation +{ + /** + * {@inheritdoc} + */ + protected function processDomain(string $domain) + { + $this->messages[$domain] = [ + 'all' => [], + 'new' => [], + 'obsolete' => [], + ]; + $intlDomain = $domain.MessageCatalogueInterface::INTL_DOMAIN_SUFFIX; + + // For 'all' messages, the code can't be simplified as ``$this->messages[$domain]['all'] = $target->all($domain);``, + // because doing so will drop messages like {x: x ∈ source ∧ x ∉ target.all ∧ x ∈ target.fallback} + // + // For 'new' messages, the code can't be simplified as ``array_diff_assoc($this->target->all($domain), $this->source->all($domain));`` + // because doing so will not exclude messages like {x: x ∈ target ∧ x ∉ source.all ∧ x ∈ source.fallback} + // + // For 'obsolete' messages, the code can't be simplified as ``array_diff_assoc($this->source->all($domain), $this->target->all($domain))`` + // because doing so will not exclude messages like {x: x ∈ source ∧ x ∉ target.all ∧ x ∈ target.fallback} + + foreach ($this->source->all($domain) as $id => $message) { + if ($this->target->has($id, $domain)) { + $this->messages[$domain]['all'][$id] = $message; + $this->result->add([$id => $message], $this->target->defines($id, $intlDomain) ? $intlDomain : $domain); + if (null !== $keyMetadata = $this->source->getMetadata($id, $domain)) { + $this->result->setMetadata($id, $keyMetadata, $domain); + } + } else { + $this->messages[$domain]['obsolete'][$id] = $message; + } + } + + foreach ($this->target->all($domain) as $id => $message) { + if (!$this->source->has($id, $domain)) { + $this->messages[$domain]['all'][$id] = $message; + $this->messages[$domain]['new'][$id] = $message; + $this->result->add([$id => $message], $this->target->defines($id, $intlDomain) ? $intlDomain : $domain); + if (null !== $keyMetadata = $this->target->getMetadata($id, $domain)) { + $this->result->setMetadata($id, $keyMetadata, $domain); + } + } + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Command/XliffLintCommand.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Command/XliffLintCommand.php new file mode 100644 index 0000000..4376804 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Command/XliffLintCommand.php @@ -0,0 +1,266 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Command; + +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Exception\RuntimeException; +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\Console\Style\SymfonyStyle; +use Symfony\Component\Translation\Exception\InvalidArgumentException; +use Symfony\Component\Translation\Util\XliffUtils; + +/** + * Validates XLIFF files syntax and outputs encountered errors. + * + * @author Grégoire Pineau + * @author Robin Chalas + * @author Javier Eguiluz + */ +class XliffLintCommand extends Command +{ + protected static $defaultName = 'lint:xliff'; + + private $format; + private $displayCorrectFiles; + private $directoryIteratorProvider; + private $isReadableProvider; + private $requireStrictFileNames; + + public function __construct(string $name = null, callable $directoryIteratorProvider = null, callable $isReadableProvider = null, bool $requireStrictFileNames = true) + { + parent::__construct($name); + + $this->directoryIteratorProvider = $directoryIteratorProvider; + $this->isReadableProvider = $isReadableProvider; + $this->requireStrictFileNames = $requireStrictFileNames; + } + + /** + * {@inheritdoc} + */ + protected function configure() + { + $this + ->setDescription('Lints a XLIFF file and outputs encountered errors') + ->addArgument('filename', InputArgument::IS_ARRAY, 'A file, a directory or "-" for reading from STDIN') + ->addOption('format', null, InputOption::VALUE_REQUIRED, 'The output format', 'txt') + ->setHelp(<<%command.name% command lints a XLIFF file and outputs to STDOUT +the first encountered syntax error. + +You can validates XLIFF contents passed from STDIN: + + cat filename | php %command.full_name% - + +You can also validate the syntax of a file: + + php %command.full_name% filename + +Or of a whole directory: + + php %command.full_name% dirname + php %command.full_name% dirname --format=json + +EOF + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $io = new SymfonyStyle($input, $output); + $filenames = (array) $input->getArgument('filename'); + $this->format = $input->getOption('format'); + $this->displayCorrectFiles = $output->isVerbose(); + + if (['-'] === $filenames) { + return $this->display($io, [$this->validate(file_get_contents('php://stdin'))]); + } + + if (!$filenames) { + throw new RuntimeException('Please provide a filename or pipe file content to STDIN.'); + } + + $filesInfo = []; + foreach ($filenames as $filename) { + if (!$this->isReadable($filename)) { + throw new RuntimeException(sprintf('File or directory "%s" is not readable.', $filename)); + } + + foreach ($this->getFiles($filename) as $file) { + $filesInfo[] = $this->validate(file_get_contents($file), $file); + } + } + + return $this->display($io, $filesInfo); + } + + private function validate(string $content, string $file = null): array + { + $errors = []; + + // Avoid: Warning DOMDocument::loadXML(): Empty string supplied as input + if ('' === trim($content)) { + return ['file' => $file, 'valid' => true]; + } + + $internal = libxml_use_internal_errors(true); + + $document = new \DOMDocument(); + $document->loadXML($content); + + if (null !== $targetLanguage = $this->getTargetLanguageFromFile($document)) { + $normalizedLocale = preg_quote(str_replace('-', '_', $targetLanguage), '/'); + // strict file names require translation files to be named '____.locale.xlf' + // otherwise, both '____.locale.xlf' and 'locale.____.xlf' are allowed + // also, the regexp matching must be case-insensitive, as defined for 'target-language' values + // http://docs.oasis-open.org/xliff/v1.2/os/xliff-core.html#target-language + $expectedFilenamePattern = $this->requireStrictFileNames ? sprintf('/^.*\.(?i:%s)\.(?:xlf|xliff)/', $normalizedLocale) : sprintf('/^(?:.*\.(?i:%s)|(?i:%s)\..*)\.(?:xlf|xliff)/', $normalizedLocale, $normalizedLocale); + + if (0 === preg_match($expectedFilenamePattern, basename($file))) { + $errors[] = [ + 'line' => -1, + 'column' => -1, + 'message' => sprintf('There is a mismatch between the language included in the file name ("%s") and the "%s" value used in the "target-language" attribute of the file.', basename($file), $targetLanguage), + ]; + } + } + + foreach (XliffUtils::validateSchema($document) as $xmlError) { + $errors[] = [ + 'line' => $xmlError['line'], + 'column' => $xmlError['column'], + 'message' => $xmlError['message'], + ]; + } + + libxml_clear_errors(); + libxml_use_internal_errors($internal); + + return ['file' => $file, 'valid' => 0 === \count($errors), 'messages' => $errors]; + } + + private function display(SymfonyStyle $io, array $files) + { + switch ($this->format) { + case 'txt': + return $this->displayTxt($io, $files); + case 'json': + return $this->displayJson($io, $files); + default: + throw new InvalidArgumentException(sprintf('The format "%s" is not supported.', $this->format)); + } + } + + private function displayTxt(SymfonyStyle $io, array $filesInfo) + { + $countFiles = \count($filesInfo); + $erroredFiles = 0; + + foreach ($filesInfo as $info) { + if ($info['valid'] && $this->displayCorrectFiles) { + $io->comment('OK'.($info['file'] ? sprintf(' in %s', $info['file']) : '')); + } elseif (!$info['valid']) { + ++$erroredFiles; + $io->text(' ERROR '.($info['file'] ? sprintf(' in %s', $info['file']) : '')); + $io->listing(array_map(function ($error) { + // general document errors have a '-1' line number + return -1 === $error['line'] ? $error['message'] : sprintf('Line %d, Column %d: %s', $error['line'], $error['column'], $error['message']); + }, $info['messages'])); + } + } + + if (0 === $erroredFiles) { + $io->success(sprintf('All %d XLIFF files contain valid syntax.', $countFiles)); + } else { + $io->warning(sprintf('%d XLIFF files have valid syntax and %d contain errors.', $countFiles - $erroredFiles, $erroredFiles)); + } + + return min($erroredFiles, 1); + } + + private function displayJson(SymfonyStyle $io, array $filesInfo) + { + $errors = 0; + + array_walk($filesInfo, function (&$v) use (&$errors) { + $v['file'] = (string) $v['file']; + if (!$v['valid']) { + ++$errors; + } + }); + + $io->writeln(json_encode($filesInfo, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)); + + return min($errors, 1); + } + + private function getFiles(string $fileOrDirectory) + { + if (is_file($fileOrDirectory)) { + yield new \SplFileInfo($fileOrDirectory); + + return; + } + + foreach ($this->getDirectoryIterator($fileOrDirectory) as $file) { + if (!\in_array($file->getExtension(), ['xlf', 'xliff'])) { + continue; + } + + yield $file; + } + } + + private function getDirectoryIterator(string $directory) + { + $default = function ($directory) { + return new \RecursiveIteratorIterator( + new \RecursiveDirectoryIterator($directory, \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::FOLLOW_SYMLINKS), + \RecursiveIteratorIterator::LEAVES_ONLY + ); + }; + + if (null !== $this->directoryIteratorProvider) { + return ($this->directoryIteratorProvider)($directory, $default); + } + + return $default($directory); + } + + private function isReadable(string $fileOrDirectory) + { + $default = function ($fileOrDirectory) { + return is_readable($fileOrDirectory); + }; + + if (null !== $this->isReadableProvider) { + return ($this->isReadableProvider)($fileOrDirectory, $default); + } + + return $default($fileOrDirectory); + } + + private function getTargetLanguageFromFile(\DOMDocument $xliffContents): ?string + { + foreach ($xliffContents->getElementsByTagName('file')[0]->attributes ?? [] as $attribute) { + if ('target-language' === $attribute->nodeName) { + return $attribute->nodeValue; + } + } + + return null; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/DataCollector/TranslationDataCollector.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/DataCollector/TranslationDataCollector.php new file mode 100644 index 0000000..3b00429 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/DataCollector/TranslationDataCollector.php @@ -0,0 +1,172 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\DataCollector; + +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpKernel\DataCollector\DataCollector; +use Symfony\Component\HttpKernel\DataCollector\LateDataCollectorInterface; +use Symfony\Component\Translation\DataCollectorTranslator; +use Symfony\Component\VarDumper\Cloner\Data; + +/** + * @author Abdellatif Ait boudad + * + * @final + */ +class TranslationDataCollector extends DataCollector implements LateDataCollectorInterface +{ + private $translator; + + public function __construct(DataCollectorTranslator $translator) + { + $this->translator = $translator; + } + + /** + * {@inheritdoc} + */ + public function lateCollect() + { + $messages = $this->sanitizeCollectedMessages($this->translator->getCollectedMessages()); + + $this->data += $this->computeCount($messages); + $this->data['messages'] = $messages; + + $this->data = $this->cloneVar($this->data); + } + + /** + * {@inheritdoc} + */ + public function collect(Request $request, Response $response, \Throwable $exception = null) + { + $this->data['locale'] = $this->translator->getLocale(); + $this->data['fallback_locales'] = $this->translator->getFallbackLocales(); + } + + /** + * {@inheritdoc} + */ + public function reset() + { + $this->data = []; + } + + /** + * @return array|Data + */ + public function getMessages() + { + return isset($this->data['messages']) ? $this->data['messages'] : []; + } + + /** + * @return int + */ + public function getCountMissings() + { + return isset($this->data[DataCollectorTranslator::MESSAGE_MISSING]) ? $this->data[DataCollectorTranslator::MESSAGE_MISSING] : 0; + } + + /** + * @return int + */ + public function getCountFallbacks() + { + return isset($this->data[DataCollectorTranslator::MESSAGE_EQUALS_FALLBACK]) ? $this->data[DataCollectorTranslator::MESSAGE_EQUALS_FALLBACK] : 0; + } + + /** + * @return int + */ + public function getCountDefines() + { + return isset($this->data[DataCollectorTranslator::MESSAGE_DEFINED]) ? $this->data[DataCollectorTranslator::MESSAGE_DEFINED] : 0; + } + + public function getLocale() + { + return !empty($this->data['locale']) ? $this->data['locale'] : null; + } + + /** + * @internal + */ + public function getFallbackLocales() + { + return (isset($this->data['fallback_locales']) && \count($this->data['fallback_locales']) > 0) ? $this->data['fallback_locales'] : []; + } + + /** + * {@inheritdoc} + */ + public function getName() + { + return 'translation'; + } + + private function sanitizeCollectedMessages(array $messages) + { + $result = []; + foreach ($messages as $key => $message) { + $messageId = $message['locale'].$message['domain'].$message['id']; + + if (!isset($result[$messageId])) { + $message['count'] = 1; + $message['parameters'] = !empty($message['parameters']) ? [$message['parameters']] : []; + $messages[$key]['translation'] = $this->sanitizeString($message['translation']); + $result[$messageId] = $message; + } else { + if (!empty($message['parameters'])) { + $result[$messageId]['parameters'][] = $message['parameters']; + } + + ++$result[$messageId]['count']; + } + + unset($messages[$key]); + } + + return $result; + } + + private function computeCount(array $messages) + { + $count = [ + DataCollectorTranslator::MESSAGE_DEFINED => 0, + DataCollectorTranslator::MESSAGE_MISSING => 0, + DataCollectorTranslator::MESSAGE_EQUALS_FALLBACK => 0, + ]; + + foreach ($messages as $message) { + ++$count[$message['state']]; + } + + return $count; + } + + private function sanitizeString(string $string, int $length = 80) + { + $string = trim(preg_replace('/\s+/', ' ', $string)); + + if (false !== $encoding = mb_detect_encoding($string, null, true)) { + if (mb_strlen($string, $encoding) > $length) { + return mb_substr($string, 0, $length - 3, $encoding).'...'; + } + } elseif (\strlen($string) > $length) { + return substr($string, 0, $length - 3).'...'; + } + + return $string; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/DataCollectorTranslator.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/DataCollectorTranslator.php new file mode 100644 index 0000000..87ad168 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/DataCollectorTranslator.php @@ -0,0 +1,159 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation; + +use Symfony\Component\HttpKernel\CacheWarmer\WarmableInterface; +use Symfony\Component\Translation\Exception\InvalidArgumentException; +use Symfony\Contracts\Translation\LocaleAwareInterface; +use Symfony\Contracts\Translation\TranslatorInterface; + +/** + * @author Abdellatif Ait boudad + */ +class DataCollectorTranslator implements TranslatorInterface, TranslatorBagInterface, LocaleAwareInterface, WarmableInterface +{ + const MESSAGE_DEFINED = 0; + const MESSAGE_MISSING = 1; + const MESSAGE_EQUALS_FALLBACK = 2; + + /** + * @var TranslatorInterface|TranslatorBagInterface + */ + private $translator; + + private $messages = []; + + /** + * @param TranslatorInterface $translator The translator must implement TranslatorBagInterface + */ + public function __construct(TranslatorInterface $translator) + { + if (!$translator instanceof TranslatorBagInterface || !$translator instanceof LocaleAwareInterface) { + throw new InvalidArgumentException(sprintf('The Translator "%s" must implement TranslatorInterface, TranslatorBagInterface and LocaleAwareInterface.', \get_class($translator))); + } + + $this->translator = $translator; + } + + /** + * {@inheritdoc} + */ + public function trans(?string $id, array $parameters = [], string $domain = null, string $locale = null) + { + $trans = $this->translator->trans($id = (string) $id, $parameters, $domain, $locale); + $this->collectMessage($locale, $domain, $id, $trans, $parameters); + + return $trans; + } + + /** + * {@inheritdoc} + */ + public function setLocale(string $locale) + { + $this->translator->setLocale($locale); + } + + /** + * {@inheritdoc} + */ + public function getLocale() + { + return $this->translator->getLocale(); + } + + /** + * {@inheritdoc} + */ + public function getCatalogue(string $locale = null) + { + return $this->translator->getCatalogue($locale); + } + + /** + * {@inheritdoc} + */ + public function warmUp(string $cacheDir) + { + if ($this->translator instanceof WarmableInterface) { + $this->translator->warmUp($cacheDir); + } + } + + /** + * Gets the fallback locales. + * + * @return array The fallback locales + */ + public function getFallbackLocales() + { + if ($this->translator instanceof Translator || method_exists($this->translator, 'getFallbackLocales')) { + return $this->translator->getFallbackLocales(); + } + + return []; + } + + /** + * Passes through all unknown calls onto the translator object. + */ + public function __call(string $method, array $args) + { + return $this->translator->{$method}(...$args); + } + + /** + * @return array + */ + public function getCollectedMessages() + { + return $this->messages; + } + + private function collectMessage(?string $locale, ?string $domain, string $id, string $translation, ?array $parameters = []) + { + if (null === $domain) { + $domain = 'messages'; + } + + $catalogue = $this->translator->getCatalogue($locale); + $locale = $catalogue->getLocale(); + $fallbackLocale = null; + if ($catalogue->defines($id, $domain)) { + $state = self::MESSAGE_DEFINED; + } elseif ($catalogue->has($id, $domain)) { + $state = self::MESSAGE_EQUALS_FALLBACK; + + $fallbackCatalogue = $catalogue->getFallbackCatalogue(); + while ($fallbackCatalogue) { + if ($fallbackCatalogue->defines($id, $domain)) { + $fallbackLocale = $fallbackCatalogue->getLocale(); + break; + } + $fallbackCatalogue = $fallbackCatalogue->getFallbackCatalogue(); + } + } else { + $state = self::MESSAGE_MISSING; + } + + $this->messages[] = [ + 'locale' => $locale, + 'fallbackLocale' => $fallbackLocale, + 'domain' => $domain, + 'id' => $id, + 'translation' => $translation, + 'parameters' => $parameters, + 'state' => $state, + 'transChoiceNumber' => isset($parameters['%count%']) && is_numeric($parameters['%count%']) ? $parameters['%count%'] : null, + ]; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/DependencyInjection/TranslationDumperPass.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/DependencyInjection/TranslationDumperPass.php new file mode 100644 index 0000000..930f36d --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/DependencyInjection/TranslationDumperPass.php @@ -0,0 +1,44 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\DependencyInjection; + +use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Reference; + +/** + * Adds tagged translation.formatter services to translation writer. + */ +class TranslationDumperPass implements CompilerPassInterface +{ + private $writerServiceId; + private $dumperTag; + + public function __construct(string $writerServiceId = 'translation.writer', string $dumperTag = 'translation.dumper') + { + $this->writerServiceId = $writerServiceId; + $this->dumperTag = $dumperTag; + } + + public function process(ContainerBuilder $container) + { + if (!$container->hasDefinition($this->writerServiceId)) { + return; + } + + $definition = $container->getDefinition($this->writerServiceId); + + foreach ($container->findTaggedServiceIds($this->dumperTag, true) as $id => $attributes) { + $definition->addMethodCall('addDumper', [$attributes[0]['alias'], new Reference($id)]); + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/DependencyInjection/TranslationExtractorPass.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/DependencyInjection/TranslationExtractorPass.php new file mode 100644 index 0000000..d08b2ba --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/DependencyInjection/TranslationExtractorPass.php @@ -0,0 +1,49 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\DependencyInjection; + +use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Exception\RuntimeException; +use Symfony\Component\DependencyInjection\Reference; + +/** + * Adds tagged translation.extractor services to translation extractor. + */ +class TranslationExtractorPass implements CompilerPassInterface +{ + private $extractorServiceId; + private $extractorTag; + + public function __construct(string $extractorServiceId = 'translation.extractor', string $extractorTag = 'translation.extractor') + { + $this->extractorServiceId = $extractorServiceId; + $this->extractorTag = $extractorTag; + } + + public function process(ContainerBuilder $container) + { + if (!$container->hasDefinition($this->extractorServiceId)) { + return; + } + + $definition = $container->getDefinition($this->extractorServiceId); + + foreach ($container->findTaggedServiceIds($this->extractorTag, true) as $id => $attributes) { + if (!isset($attributes[0]['alias'])) { + throw new RuntimeException(sprintf('The alias for the tag "translation.extractor" of service "%s" must be set.', $id)); + } + + $definition->addMethodCall('addExtractor', [$attributes[0]['alias'], new Reference($id)]); + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/DependencyInjection/TranslatorPass.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/DependencyInjection/TranslatorPass.php new file mode 100644 index 0000000..27315f6 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/DependencyInjection/TranslatorPass.php @@ -0,0 +1,89 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\DependencyInjection; + +use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; +use Symfony\Component\DependencyInjection\Compiler\ServiceLocatorTagPass; +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Reference; + +class TranslatorPass implements CompilerPassInterface +{ + private $translatorServiceId; + private $readerServiceId; + private $loaderTag; + private $debugCommandServiceId; + private $updateCommandServiceId; + + public function __construct(string $translatorServiceId = 'translator.default', string $readerServiceId = 'translation.reader', string $loaderTag = 'translation.loader', string $debugCommandServiceId = 'console.command.translation_debug', string $updateCommandServiceId = 'console.command.translation_update') + { + $this->translatorServiceId = $translatorServiceId; + $this->readerServiceId = $readerServiceId; + $this->loaderTag = $loaderTag; + $this->debugCommandServiceId = $debugCommandServiceId; + $this->updateCommandServiceId = $updateCommandServiceId; + } + + public function process(ContainerBuilder $container) + { + if (!$container->hasDefinition($this->translatorServiceId)) { + return; + } + + $loaders = []; + $loaderRefs = []; + foreach ($container->findTaggedServiceIds($this->loaderTag, true) as $id => $attributes) { + $loaderRefs[$id] = new Reference($id); + $loaders[$id][] = $attributes[0]['alias']; + if (isset($attributes[0]['legacy-alias'])) { + $loaders[$id][] = $attributes[0]['legacy-alias']; + } + } + + if ($container->hasDefinition($this->readerServiceId)) { + $definition = $container->getDefinition($this->readerServiceId); + foreach ($loaders as $id => $formats) { + foreach ($formats as $format) { + $definition->addMethodCall('addLoader', [$format, $loaderRefs[$id]]); + } + } + } + + $container + ->findDefinition($this->translatorServiceId) + ->replaceArgument(0, ServiceLocatorTagPass::register($container, $loaderRefs)) + ->replaceArgument(3, $loaders) + ; + + if (!$container->hasParameter('twig.default_path')) { + return; + } + + $paths = array_keys($container->getDefinition('twig.template_iterator')->getArgument(1)); + if ($container->hasDefinition($this->debugCommandServiceId)) { + $definition = $container->getDefinition($this->debugCommandServiceId); + $definition->replaceArgument(4, $container->getParameter('twig.default_path')); + + if (\count($definition->getArguments()) > 6) { + $definition->replaceArgument(6, $paths); + } + } + if ($container->hasDefinition($this->updateCommandServiceId)) { + $definition = $container->getDefinition($this->updateCommandServiceId); + $definition->replaceArgument(5, $container->getParameter('twig.default_path')); + + if (\count($definition->getArguments()) > 7) { + $definition->replaceArgument(7, $paths); + } + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/DependencyInjection/TranslatorPathsPass.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/DependencyInjection/TranslatorPathsPass.php new file mode 100644 index 0000000..04975b1 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/DependencyInjection/TranslatorPathsPass.php @@ -0,0 +1,144 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\DependencyInjection; + +use Symfony\Component\DependencyInjection\Compiler\AbstractRecursivePass; +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Definition; +use Symfony\Component\DependencyInjection\Reference; +use Symfony\Component\DependencyInjection\ServiceLocator; + +/** + * @author Yonel Ceruto + */ +class TranslatorPathsPass extends AbstractRecursivePass +{ + private $translatorServiceId; + private $debugCommandServiceId; + private $updateCommandServiceId; + private $resolverServiceId; + private $level = 0; + private $paths = []; + private $definitions = []; + private $controllers = []; + + public function __construct(string $translatorServiceId = 'translator', string $debugCommandServiceId = 'console.command.translation_debug', string $updateCommandServiceId = 'console.command.translation_update', string $resolverServiceId = 'argument_resolver.service') + { + $this->translatorServiceId = $translatorServiceId; + $this->debugCommandServiceId = $debugCommandServiceId; + $this->updateCommandServiceId = $updateCommandServiceId; + $this->resolverServiceId = $resolverServiceId; + } + + public function process(ContainerBuilder $container) + { + if (!$container->hasDefinition($this->translatorServiceId)) { + return; + } + + foreach ($this->findControllerArguments($container) as $controller => $argument) { + $id = substr($controller, 0, strpos($controller, ':') ?: \strlen($controller)); + if ($container->hasDefinition($id)) { + list($locatorRef) = $argument->getValues(); + $this->controllers[(string) $locatorRef][$container->getDefinition($id)->getClass()] = true; + } + } + + try { + parent::process($container); + + $paths = []; + foreach ($this->paths as $class => $_) { + if (($r = $container->getReflectionClass($class)) && !$r->isInterface()) { + $paths[] = $r->getFileName(); + } + } + if ($paths) { + if ($container->hasDefinition($this->debugCommandServiceId)) { + $definition = $container->getDefinition($this->debugCommandServiceId); + $definition->replaceArgument(6, array_merge($definition->getArgument(6), $paths)); + } + if ($container->hasDefinition($this->updateCommandServiceId)) { + $definition = $container->getDefinition($this->updateCommandServiceId); + $definition->replaceArgument(7, array_merge($definition->getArgument(7), $paths)); + } + } + } finally { + $this->level = 0; + $this->paths = []; + $this->definitions = []; + } + } + + protected function processValue($value, bool $isRoot = false) + { + if ($value instanceof Reference) { + if ((string) $value === $this->translatorServiceId) { + for ($i = $this->level - 1; $i >= 0; --$i) { + $class = $this->definitions[$i]->getClass(); + + if (ServiceLocator::class === $class) { + if (!isset($this->controllers[$this->currentId])) { + continue; + } + foreach ($this->controllers[$this->currentId] as $class => $_) { + $this->paths[$class] = true; + } + } else { + $this->paths[$class] = true; + } + + break; + } + } + + return $value; + } + + if ($value instanceof Definition) { + $this->definitions[$this->level++] = $value; + $value = parent::processValue($value, $isRoot); + unset($this->definitions[--$this->level]); + + return $value; + } + + return parent::processValue($value, $isRoot); + } + + private function findControllerArguments(ContainerBuilder $container): array + { + if ($container->hasDefinition($this->resolverServiceId)) { + $argument = $container->getDefinition($this->resolverServiceId)->getArgument(0); + if ($argument instanceof Reference) { + $argument = $container->getDefinition($argument); + } + + return $argument->getArgument(0); + } + + if ($container->hasDefinition('debug.'.$this->resolverServiceId)) { + $argument = $container->getDefinition('debug.'.$this->resolverServiceId)->getArgument(0); + if ($argument instanceof Reference) { + $argument = $container->getDefinition($argument); + } + $argument = $argument->getArgument(0); + if ($argument instanceof Reference) { + $argument = $container->getDefinition($argument); + } + + return $argument->getArgument(0); + } + + return []; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/CsvFileDumper.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/CsvFileDumper.php new file mode 100644 index 0000000..32accb6 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/CsvFileDumper.php @@ -0,0 +1,60 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Dumper; + +use Symfony\Component\Translation\MessageCatalogue; + +/** + * CsvFileDumper generates a csv formatted string representation of a message catalogue. + * + * @author Stealth35 + */ +class CsvFileDumper extends FileDumper +{ + private $delimiter = ';'; + private $enclosure = '"'; + + /** + * {@inheritdoc} + */ + public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []) + { + $handle = fopen('php://memory', 'r+b'); + + foreach ($messages->all($domain) as $source => $target) { + fputcsv($handle, [$source, $target], $this->delimiter, $this->enclosure); + } + + rewind($handle); + $output = stream_get_contents($handle); + fclose($handle); + + return $output; + } + + /** + * Sets the delimiter and escape character for CSV. + */ + public function setCsvControl(string $delimiter = ';', string $enclosure = '"') + { + $this->delimiter = $delimiter; + $this->enclosure = $enclosure; + } + + /** + * {@inheritdoc} + */ + protected function getExtension() + { + return 'csv'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/DumperInterface.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/DumperInterface.php new file mode 100644 index 0000000..7cdaef5 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/DumperInterface.php @@ -0,0 +1,30 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Dumper; + +use Symfony\Component\Translation\MessageCatalogue; + +/** + * DumperInterface is the interface implemented by all translation dumpers. + * There is no common option. + * + * @author Michel Salib + */ +interface DumperInterface +{ + /** + * Dumps the message catalogue. + * + * @param array $options Options that are used by the dumper + */ + public function dump(MessageCatalogue $messages, array $options = []); +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/FileDumper.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/FileDumper.php new file mode 100644 index 0000000..e257e72 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/FileDumper.php @@ -0,0 +1,112 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Dumper; + +use Symfony\Component\Translation\Exception\InvalidArgumentException; +use Symfony\Component\Translation\Exception\RuntimeException; +use Symfony\Component\Translation\MessageCatalogue; + +/** + * FileDumper is an implementation of DumperInterface that dump a message catalogue to file(s). + * + * Options: + * - path (mandatory): the directory where the files should be saved + * + * @author Michel Salib + */ +abstract class FileDumper implements DumperInterface +{ + /** + * A template for the relative paths to files. + * + * @var string + */ + protected $relativePathTemplate = '%domain%.%locale%.%extension%'; + + /** + * Sets the template for the relative paths to files. + * + * @param string $relativePathTemplate A template for the relative paths to files + */ + public function setRelativePathTemplate(string $relativePathTemplate) + { + $this->relativePathTemplate = $relativePathTemplate; + } + + /** + * {@inheritdoc} + */ + public function dump(MessageCatalogue $messages, array $options = []) + { + if (!\array_key_exists('path', $options)) { + throw new InvalidArgumentException('The file dumper needs a path option.'); + } + + // save a file for each domain + foreach ($messages->getDomains() as $domain) { + $fullpath = $options['path'].'/'.$this->getRelativePath($domain, $messages->getLocale()); + if (!file_exists($fullpath)) { + $directory = \dirname($fullpath); + if (!file_exists($directory) && !@mkdir($directory, 0777, true)) { + throw new RuntimeException(sprintf('Unable to create directory "%s".', $directory)); + } + } + + $intlDomain = $domain.MessageCatalogue::INTL_DOMAIN_SUFFIX; + $intlMessages = $messages->all($intlDomain); + + if ($intlMessages) { + $intlPath = $options['path'].'/'.$this->getRelativePath($intlDomain, $messages->getLocale()); + file_put_contents($intlPath, $this->formatCatalogue($messages, $intlDomain, $options)); + + $messages->replace([], $intlDomain); + + try { + if ($messages->all($domain)) { + file_put_contents($fullpath, $this->formatCatalogue($messages, $domain, $options)); + } + continue; + } finally { + $messages->replace($intlMessages, $intlDomain); + } + } + + file_put_contents($fullpath, $this->formatCatalogue($messages, $domain, $options)); + } + } + + /** + * Transforms a domain of a message catalogue to its string representation. + * + * @return string representation + */ + abstract public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []); + + /** + * Gets the file extension of the dumper. + * + * @return string file extension + */ + abstract protected function getExtension(); + + /** + * Gets the relative file path using the template. + */ + private function getRelativePath(string $domain, string $locale): string + { + return strtr($this->relativePathTemplate, [ + '%domain%' => $domain, + '%locale%' => $locale, + '%extension%' => $this->getExtension(), + ]); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/IcuResFileDumper.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/IcuResFileDumper.php new file mode 100644 index 0000000..cdc5991 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/IcuResFileDumper.php @@ -0,0 +1,104 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Dumper; + +use Symfony\Component\Translation\MessageCatalogue; + +/** + * IcuResDumper generates an ICU ResourceBundle formatted string representation of a message catalogue. + * + * @author Stealth35 + */ +class IcuResFileDumper extends FileDumper +{ + /** + * {@inheritdoc} + */ + protected $relativePathTemplate = '%domain%/%locale%.%extension%'; + + /** + * {@inheritdoc} + */ + public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []) + { + $data = $indexes = $resources = ''; + + foreach ($messages->all($domain) as $source => $target) { + $indexes .= pack('v', \strlen($data) + 28); + $data .= $source."\0"; + } + + $data .= $this->writePadding($data); + + $keyTop = $this->getPosition($data); + + foreach ($messages->all($domain) as $source => $target) { + $resources .= pack('V', $this->getPosition($data)); + + $data .= pack('V', \strlen($target)) + .mb_convert_encoding($target."\0", 'UTF-16LE', 'UTF-8') + .$this->writePadding($data) + ; + } + + $resOffset = $this->getPosition($data); + + $data .= pack('v', \count($messages->all($domain))) + .$indexes + .$this->writePadding($data) + .$resources + ; + + $bundleTop = $this->getPosition($data); + + $root = pack('V7', + $resOffset + (2 << 28), // Resource Offset + Resource Type + 6, // Index length + $keyTop, // Index keys top + $bundleTop, // Index resources top + $bundleTop, // Index bundle top + \count($messages->all($domain)), // Index max table length + 0 // Index attributes + ); + + $header = pack('vC2v4C12@32', + 32, // Header size + 0xDA, 0x27, // Magic number 1 and 2 + 20, 0, 0, 2, // Rest of the header, ..., Size of a char + 0x52, 0x65, 0x73, 0x42, // Data format identifier + 1, 2, 0, 0, // Data version + 1, 4, 0, 0 // Unicode version + ); + + return $header.$root.$data; + } + + private function writePadding(string $data): ?string + { + $padding = \strlen($data) % 4; + + return $padding ? str_repeat("\xAA", 4 - $padding) : null; + } + + private function getPosition(string $data) + { + return (\strlen($data) + 28) / 4; + } + + /** + * {@inheritdoc} + */ + protected function getExtension() + { + return 'res'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/IniFileDumper.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/IniFileDumper.php new file mode 100644 index 0000000..93c900a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/IniFileDumper.php @@ -0,0 +1,45 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Dumper; + +use Symfony\Component\Translation\MessageCatalogue; + +/** + * IniFileDumper generates an ini formatted string representation of a message catalogue. + * + * @author Stealth35 + */ +class IniFileDumper extends FileDumper +{ + /** + * {@inheritdoc} + */ + public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []) + { + $output = ''; + + foreach ($messages->all($domain) as $source => $target) { + $escapeTarget = str_replace('"', '\"', $target); + $output .= $source.'="'.$escapeTarget."\"\n"; + } + + return $output; + } + + /** + * {@inheritdoc} + */ + protected function getExtension() + { + return 'ini'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/JsonFileDumper.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/JsonFileDumper.php new file mode 100644 index 0000000..c6700ae --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/JsonFileDumper.php @@ -0,0 +1,40 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Dumper; + +use Symfony\Component\Translation\MessageCatalogue; + +/** + * JsonFileDumper generates an json formatted string representation of a message catalogue. + * + * @author singles + */ +class JsonFileDumper extends FileDumper +{ + /** + * {@inheritdoc} + */ + public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []) + { + $flags = $options['json_encoding'] ?? JSON_PRETTY_PRINT; + + return json_encode($messages->all($domain), $flags); + } + + /** + * {@inheritdoc} + */ + protected function getExtension() + { + return 'json'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/MoFileDumper.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/MoFileDumper.php new file mode 100644 index 0000000..54d0da8 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/MoFileDumper.php @@ -0,0 +1,82 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Dumper; + +use Symfony\Component\Translation\Loader\MoFileLoader; +use Symfony\Component\Translation\MessageCatalogue; + +/** + * MoFileDumper generates a gettext formatted string representation of a message catalogue. + * + * @author Stealth35 + */ +class MoFileDumper extends FileDumper +{ + /** + * {@inheritdoc} + */ + public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []) + { + $sources = $targets = $sourceOffsets = $targetOffsets = ''; + $offsets = []; + $size = 0; + + foreach ($messages->all($domain) as $source => $target) { + $offsets[] = array_map('strlen', [$sources, $source, $targets, $target]); + $sources .= "\0".$source; + $targets .= "\0".$target; + ++$size; + } + + $header = [ + 'magicNumber' => MoFileLoader::MO_LITTLE_ENDIAN_MAGIC, + 'formatRevision' => 0, + 'count' => $size, + 'offsetId' => MoFileLoader::MO_HEADER_SIZE, + 'offsetTranslated' => MoFileLoader::MO_HEADER_SIZE + (8 * $size), + 'sizeHashes' => 0, + 'offsetHashes' => MoFileLoader::MO_HEADER_SIZE + (16 * $size), + ]; + + $sourcesSize = \strlen($sources); + $sourcesStart = $header['offsetHashes'] + 1; + + foreach ($offsets as $offset) { + $sourceOffsets .= $this->writeLong($offset[1]) + .$this->writeLong($offset[0] + $sourcesStart); + $targetOffsets .= $this->writeLong($offset[3]) + .$this->writeLong($offset[2] + $sourcesStart + $sourcesSize); + } + + $output = implode('', array_map([$this, 'writeLong'], $header)) + .$sourceOffsets + .$targetOffsets + .$sources + .$targets + ; + + return $output; + } + + /** + * {@inheritdoc} + */ + protected function getExtension() + { + return 'mo'; + } + + private function writeLong($str): string + { + return pack('V*', $str); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/PhpFileDumper.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/PhpFileDumper.php new file mode 100644 index 0000000..6163b52 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/PhpFileDumper.php @@ -0,0 +1,38 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Dumper; + +use Symfony\Component\Translation\MessageCatalogue; + +/** + * PhpFileDumper generates PHP files from a message catalogue. + * + * @author Michel Salib + */ +class PhpFileDumper extends FileDumper +{ + /** + * {@inheritdoc} + */ + public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []) + { + return "all($domain), true).";\n"; + } + + /** + * {@inheritdoc} + */ + protected function getExtension() + { + return 'php'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/PoFileDumper.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/PoFileDumper.php new file mode 100644 index 0000000..3b18138 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/PoFileDumper.php @@ -0,0 +1,137 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Dumper; + +use Symfony\Component\Translation\MessageCatalogue; + +/** + * PoFileDumper generates a gettext formatted string representation of a message catalogue. + * + * @author Stealth35 + */ +class PoFileDumper extends FileDumper +{ + /** + * {@inheritdoc} + */ + public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []) + { + $output = 'msgid ""'."\n"; + $output .= 'msgstr ""'."\n"; + $output .= '"Content-Type: text/plain; charset=UTF-8\n"'."\n"; + $output .= '"Content-Transfer-Encoding: 8bit\n"'."\n"; + $output .= '"Language: '.$messages->getLocale().'\n"'."\n"; + $output .= "\n"; + + $newLine = false; + foreach ($messages->all($domain) as $source => $target) { + if ($newLine) { + $output .= "\n"; + } else { + $newLine = true; + } + $metadata = $messages->getMetadata($source, $domain); + + if (isset($metadata['comments'])) { + $output .= $this->formatComments($metadata['comments']); + } + if (isset($metadata['flags'])) { + $output .= $this->formatComments(implode(',', (array) $metadata['flags']), ','); + } + if (isset($metadata['sources'])) { + $output .= $this->formatComments(implode(' ', (array) $metadata['sources']), ':'); + } + + $sourceRules = $this->getStandardRules($source); + $targetRules = $this->getStandardRules($target); + if (2 == \count($sourceRules) && $targetRules !== []) { + $output .= sprintf('msgid "%s"'."\n", $this->escape($sourceRules[0])); + $output .= sprintf('msgid_plural "%s"'."\n", $this->escape($sourceRules[1])); + foreach ($targetRules as $i => $targetRule) { + $output .= sprintf('msgstr[%d] "%s"'."\n", $i, $this->escape($targetRule)); + } + } else { + $output .= sprintf('msgid "%s"'."\n", $this->escape($source)); + $output .= sprintf('msgstr "%s"'."\n", $this->escape($target)); + } + } + + return $output; + } + + private function getStandardRules(string $id) + { + // Partly copied from TranslatorTrait::trans. + $parts = []; + if (preg_match('/^\|++$/', $id)) { + $parts = explode('|', $id); + } elseif (preg_match_all('/(?:\|\||[^\|])++/', $id, $matches)) { + $parts = $matches[0]; + } + + $intervalRegexp = <<<'EOF' +/^(?P + ({\s* + (\-?\d+(\.\d+)?[\s*,\s*\-?\d+(\.\d+)?]*) + \s*}) + + | + + (?P[\[\]]) + \s* + (?P-Inf|\-?\d+(\.\d+)?) + \s*,\s* + (?P\+?Inf|\-?\d+(\.\d+)?) + \s* + (?P[\[\]]) +)\s*(?P.*?)$/xs +EOF; + + $standardRules = []; + foreach ($parts as $part) { + $part = trim(str_replace('||', '|', $part)); + + if (preg_match($intervalRegexp, $part)) { + // Explicit rule is not a standard rule. + return []; + } else { + $standardRules[] = $part; + } + } + + return $standardRules; + } + + /** + * {@inheritdoc} + */ + protected function getExtension() + { + return 'po'; + } + + private function escape(string $str): string + { + return addcslashes($str, "\0..\37\42\134"); + } + + private function formatComments($comments, string $prefix = ''): ?string + { + $output = null; + + foreach ((array) $comments as $comment) { + $output .= sprintf('#%s %s'."\n", $prefix, $comment); + } + + return $output; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/QtFileDumper.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/QtFileDumper.php new file mode 100644 index 0000000..406e9f0 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/QtFileDumper.php @@ -0,0 +1,61 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Dumper; + +use Symfony\Component\Translation\MessageCatalogue; + +/** + * QtFileDumper generates ts files from a message catalogue. + * + * @author Benjamin Eberlei + */ +class QtFileDumper extends FileDumper +{ + /** + * {@inheritdoc} + */ + public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []) + { + $dom = new \DOMDocument('1.0', 'utf-8'); + $dom->formatOutput = true; + $ts = $dom->appendChild($dom->createElement('TS')); + $context = $ts->appendChild($dom->createElement('context')); + $context->appendChild($dom->createElement('name', $domain)); + + foreach ($messages->all($domain) as $source => $target) { + $message = $context->appendChild($dom->createElement('message')); + $metadata = $messages->getMetadata($source, $domain); + if (isset($metadata['sources'])) { + foreach ((array) $metadata['sources'] as $location) { + $loc = explode(':', $location, 2); + $location = $message->appendChild($dom->createElement('location')); + $location->setAttribute('filename', $loc[0]); + if (isset($loc[1])) { + $location->setAttribute('line', $loc[1]); + } + } + } + $message->appendChild($dom->createElement('source', $source)); + $message->appendChild($dom->createElement('translation', $target)); + } + + return $dom->saveXML(); + } + + /** + * {@inheritdoc} + */ + protected function getExtension() + { + return 'ts'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/XliffFileDumper.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/XliffFileDumper.php new file mode 100644 index 0000000..d9dfd43 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/XliffFileDumper.php @@ -0,0 +1,203 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Dumper; + +use Symfony\Component\Translation\Exception\InvalidArgumentException; +use Symfony\Component\Translation\MessageCatalogue; + +/** + * XliffFileDumper generates xliff files from a message catalogue. + * + * @author Michel Salib + */ +class XliffFileDumper extends FileDumper +{ + /** + * {@inheritdoc} + */ + public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []) + { + $xliffVersion = '1.2'; + if (\array_key_exists('xliff_version', $options)) { + $xliffVersion = $options['xliff_version']; + } + + if (\array_key_exists('default_locale', $options)) { + $defaultLocale = $options['default_locale']; + } else { + $defaultLocale = \Locale::getDefault(); + } + + if ('1.2' === $xliffVersion) { + return $this->dumpXliff1($defaultLocale, $messages, $domain, $options); + } + if ('2.0' === $xliffVersion) { + return $this->dumpXliff2($defaultLocale, $messages, $domain); + } + + throw new InvalidArgumentException(sprintf('No support implemented for dumping XLIFF version "%s".', $xliffVersion)); + } + + /** + * {@inheritdoc} + */ + protected function getExtension() + { + return 'xlf'; + } + + private function dumpXliff1(string $defaultLocale, MessageCatalogue $messages, ?string $domain, array $options = []) + { + $toolInfo = ['tool-id' => 'symfony', 'tool-name' => 'Symfony']; + if (\array_key_exists('tool_info', $options)) { + $toolInfo = array_merge($toolInfo, $options['tool_info']); + } + + $dom = new \DOMDocument('1.0', 'utf-8'); + $dom->formatOutput = true; + + $xliff = $dom->appendChild($dom->createElement('xliff')); + $xliff->setAttribute('version', '1.2'); + $xliff->setAttribute('xmlns', 'urn:oasis:names:tc:xliff:document:1.2'); + + $xliffFile = $xliff->appendChild($dom->createElement('file')); + $xliffFile->setAttribute('source-language', str_replace('_', '-', $defaultLocale)); + $xliffFile->setAttribute('target-language', str_replace('_', '-', $messages->getLocale())); + $xliffFile->setAttribute('datatype', 'plaintext'); + $xliffFile->setAttribute('original', 'file.ext'); + + $xliffHead = $xliffFile->appendChild($dom->createElement('header')); + $xliffTool = $xliffHead->appendChild($dom->createElement('tool')); + foreach ($toolInfo as $id => $value) { + $xliffTool->setAttribute($id, $value); + } + + $xliffBody = $xliffFile->appendChild($dom->createElement('body')); + foreach ($messages->all($domain) as $source => $target) { + $translation = $dom->createElement('trans-unit'); + + $translation->setAttribute('id', strtr(substr(base64_encode(hash('sha256', $source, true)), 0, 7), '/+', '._')); + $translation->setAttribute('resname', $source); + + $s = $translation->appendChild($dom->createElement('source')); + $s->appendChild($dom->createTextNode($source)); + + // Does the target contain characters requiring a CDATA section? + $text = 1 === preg_match('/[&<>]/', $target) ? $dom->createCDATASection($target) : $dom->createTextNode($target); + + $targetElement = $dom->createElement('target'); + $metadata = $messages->getMetadata($source, $domain); + if ($this->hasMetadataArrayInfo('target-attributes', $metadata)) { + foreach ($metadata['target-attributes'] as $name => $value) { + $targetElement->setAttribute($name, $value); + } + } + $t = $translation->appendChild($targetElement); + $t->appendChild($text); + + if ($this->hasMetadataArrayInfo('notes', $metadata)) { + foreach ($metadata['notes'] as $note) { + if (!isset($note['content'])) { + continue; + } + + $n = $translation->appendChild($dom->createElement('note')); + $n->appendChild($dom->createTextNode($note['content'])); + + if (isset($note['priority'])) { + $n->setAttribute('priority', $note['priority']); + } + + if (isset($note['from'])) { + $n->setAttribute('from', $note['from']); + } + } + } + + $xliffBody->appendChild($translation); + } + + return $dom->saveXML(); + } + + private function dumpXliff2(string $defaultLocale, MessageCatalogue $messages, ?string $domain) + { + $dom = new \DOMDocument('1.0', 'utf-8'); + $dom->formatOutput = true; + + $xliff = $dom->appendChild($dom->createElement('xliff')); + $xliff->setAttribute('xmlns', 'urn:oasis:names:tc:xliff:document:2.0'); + $xliff->setAttribute('version', '2.0'); + $xliff->setAttribute('srcLang', str_replace('_', '-', $defaultLocale)); + $xliff->setAttribute('trgLang', str_replace('_', '-', $messages->getLocale())); + + $xliffFile = $xliff->appendChild($dom->createElement('file')); + if (MessageCatalogue::INTL_DOMAIN_SUFFIX === substr($domain, -($suffixLength = \strlen(MessageCatalogue::INTL_DOMAIN_SUFFIX)))) { + $xliffFile->setAttribute('id', substr($domain, 0, -$suffixLength).'.'.$messages->getLocale()); + } else { + $xliffFile->setAttribute('id', $domain.'.'.$messages->getLocale()); + } + + foreach ($messages->all($domain) as $source => $target) { + $translation = $dom->createElement('unit'); + $translation->setAttribute('id', strtr(substr(base64_encode(hash('sha256', $source, true)), 0, 7), '/+', '._')); + $name = $source; + if (\strlen($source) > 80) { + $name = substr(md5($source), -7); + } + $translation->setAttribute('name', $name); + $metadata = $messages->getMetadata($source, $domain); + + // Add notes section + if ($this->hasMetadataArrayInfo('notes', $metadata)) { + $notesElement = $dom->createElement('notes'); + foreach ($metadata['notes'] as $note) { + $n = $dom->createElement('note'); + $n->appendChild($dom->createTextNode(isset($note['content']) ? $note['content'] : '')); + unset($note['content']); + + foreach ($note as $name => $value) { + $n->setAttribute($name, $value); + } + $notesElement->appendChild($n); + } + $translation->appendChild($notesElement); + } + + $segment = $translation->appendChild($dom->createElement('segment')); + + $s = $segment->appendChild($dom->createElement('source')); + $s->appendChild($dom->createTextNode($source)); + + // Does the target contain characters requiring a CDATA section? + $text = 1 === preg_match('/[&<>]/', $target) ? $dom->createCDATASection($target) : $dom->createTextNode($target); + + $targetElement = $dom->createElement('target'); + if ($this->hasMetadataArrayInfo('target-attributes', $metadata)) { + foreach ($metadata['target-attributes'] as $name => $value) { + $targetElement->setAttribute($name, $value); + } + } + $t = $segment->appendChild($targetElement); + $t->appendChild($text); + + $xliffFile->appendChild($translation); + } + + return $dom->saveXML(); + } + + private function hasMetadataArrayInfo(string $key, array $metadata = null): bool + { + return null !== $metadata && \array_key_exists($key, $metadata) && ($metadata[$key] instanceof \Traversable || \is_array($metadata[$key])); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/YamlFileDumper.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/YamlFileDumper.php new file mode 100644 index 0000000..ac589c9 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Dumper/YamlFileDumper.php @@ -0,0 +1,62 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Dumper; + +use Symfony\Component\Translation\Exception\LogicException; +use Symfony\Component\Translation\MessageCatalogue; +use Symfony\Component\Translation\Util\ArrayConverter; +use Symfony\Component\Yaml\Yaml; + +/** + * YamlFileDumper generates yaml files from a message catalogue. + * + * @author Michel Salib + */ +class YamlFileDumper extends FileDumper +{ + private $extension; + + public function __construct(string $extension = 'yml') + { + $this->extension = $extension; + } + + /** + * {@inheritdoc} + */ + public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []) + { + if (!class_exists('Symfony\Component\Yaml\Yaml')) { + throw new LogicException('Dumping translations in the YAML format requires the Symfony Yaml component.'); + } + + $data = $messages->all($domain); + + if (isset($options['as_tree']) && $options['as_tree']) { + $data = ArrayConverter::expandToTree($data); + } + + if (isset($options['inline']) && ($inline = (int) $options['inline']) > 0) { + return Yaml::dump($data, $inline); + } + + return Yaml::dump($data); + } + + /** + * {@inheritdoc} + */ + protected function getExtension() + { + return $this->extension; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Exception/ExceptionInterface.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Exception/ExceptionInterface.php new file mode 100644 index 0000000..8f9c54e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Exception/ExceptionInterface.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Exception; + +/** + * Exception interface for all exceptions thrown by the component. + * + * @author Fabien Potencier + */ +interface ExceptionInterface extends \Throwable +{ +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Exception/InvalidArgumentException.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Exception/InvalidArgumentException.php new file mode 100644 index 0000000..90d0669 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Exception/InvalidArgumentException.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Exception; + +/** + * Base InvalidArgumentException for the Translation component. + * + * @author Abdellatif Ait boudad + */ +class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface +{ +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Exception/InvalidResourceException.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Exception/InvalidResourceException.php new file mode 100644 index 0000000..cf07943 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Exception/InvalidResourceException.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Exception; + +/** + * Thrown when a resource cannot be loaded. + * + * @author Fabien Potencier + */ +class InvalidResourceException extends \InvalidArgumentException implements ExceptionInterface +{ +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Exception/LogicException.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Exception/LogicException.php new file mode 100644 index 0000000..9019c7e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Exception/LogicException.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Exception; + +/** + * Base LogicException for Translation component. + * + * @author Abdellatif Ait boudad + */ +class LogicException extends \LogicException implements ExceptionInterface +{ +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Exception/NotFoundResourceException.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Exception/NotFoundResourceException.php new file mode 100644 index 0000000..cff73ae --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Exception/NotFoundResourceException.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Exception; + +/** + * Thrown when a resource does not exist. + * + * @author Fabien Potencier + */ +class NotFoundResourceException extends \InvalidArgumentException implements ExceptionInterface +{ +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Exception/RuntimeException.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Exception/RuntimeException.php new file mode 100644 index 0000000..dcd7940 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Exception/RuntimeException.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Exception; + +/** + * Base RuntimeException for the Translation component. + * + * @author Abdellatif Ait boudad + */ +class RuntimeException extends \RuntimeException implements ExceptionInterface +{ +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Extractor/AbstractFileExtractor.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Extractor/AbstractFileExtractor.php new file mode 100644 index 0000000..729dd17 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Extractor/AbstractFileExtractor.php @@ -0,0 +1,76 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Extractor; + +use Symfony\Component\Translation\Exception\InvalidArgumentException; + +/** + * Base class used by classes that extract translation messages from files. + * + * @author Marcos D. Sánchez + */ +abstract class AbstractFileExtractor +{ + /** + * @param string|iterable $resource Files, a file or a directory + * + * @return iterable + */ + protected function extractFiles($resource) + { + if (is_iterable($resource)) { + $files = []; + foreach ($resource as $file) { + if ($this->canBeExtracted($file)) { + $files[] = $this->toSplFileInfo($file); + } + } + } elseif (is_file($resource)) { + $files = $this->canBeExtracted($resource) ? [$this->toSplFileInfo($resource)] : []; + } else { + $files = $this->extractFromDirectory($resource); + } + + return $files; + } + + private function toSplFileInfo(string $file): \SplFileInfo + { + return new \SplFileInfo($file); + } + + /** + * @return bool + * + * @throws InvalidArgumentException + */ + protected function isFile(string $file) + { + if (!is_file($file)) { + throw new InvalidArgumentException(sprintf('The "%s" file does not exist.', $file)); + } + + return true; + } + + /** + * @return bool + */ + abstract protected function canBeExtracted(string $file); + + /** + * @param string|array $resource Files, a file or a directory + * + * @return iterable files to be extracted + */ + abstract protected function extractFromDirectory($resource); +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Extractor/ChainExtractor.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Extractor/ChainExtractor.php new file mode 100644 index 0000000..6b6e182 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Extractor/ChainExtractor.php @@ -0,0 +1,59 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Extractor; + +use Symfony\Component\Translation\MessageCatalogue; + +/** + * ChainExtractor extracts translation messages from template files. + * + * @author Michel Salib + */ +class ChainExtractor implements ExtractorInterface +{ + /** + * The extractors. + * + * @var ExtractorInterface[] + */ + private $extractors = []; + + /** + * Adds a loader to the translation extractor. + * + * @param string $format The format of the loader + */ + public function addExtractor(string $format, ExtractorInterface $extractor) + { + $this->extractors[$format] = $extractor; + } + + /** + * {@inheritdoc} + */ + public function setPrefix(string $prefix) + { + foreach ($this->extractors as $extractor) { + $extractor->setPrefix($prefix); + } + } + + /** + * {@inheritdoc} + */ + public function extract($directory, MessageCatalogue $catalogue) + { + foreach ($this->extractors as $extractor) { + $extractor->extract($directory, $catalogue); + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Extractor/ExtractorInterface.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Extractor/ExtractorInterface.php new file mode 100644 index 0000000..39cc006 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Extractor/ExtractorInterface.php @@ -0,0 +1,37 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Extractor; + +use Symfony\Component\Translation\MessageCatalogue; + +/** + * Extracts translation messages from a directory or files to the catalogue. + * New found messages are injected to the catalogue using the prefix. + * + * @author Michel Salib + */ +interface ExtractorInterface +{ + /** + * Extracts translation messages from files, a file or a directory to the catalogue. + * + * @param string|array $resource Files, a file or a directory + */ + public function extract($resource, MessageCatalogue $catalogue); + + /** + * Sets the prefix that should be used for new found messages. + * + * @param string $prefix The prefix + */ + public function setPrefix(string $prefix); +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Extractor/PhpExtractor.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Extractor/PhpExtractor.php new file mode 100644 index 0000000..549754a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Extractor/PhpExtractor.php @@ -0,0 +1,247 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Extractor; + +use Symfony\Component\Finder\Finder; +use Symfony\Component\Translation\MessageCatalogue; + +/** + * PhpExtractor extracts translation messages from a PHP template. + * + * @author Michel Salib + */ +class PhpExtractor extends AbstractFileExtractor implements ExtractorInterface +{ + const MESSAGE_TOKEN = 300; + const METHOD_ARGUMENTS_TOKEN = 1000; + const DOMAIN_TOKEN = 1001; + + /** + * Prefix for new found message. + * + * @var string + */ + private $prefix = ''; + + /** + * The sequence that captures translation messages. + * + * @var array + */ + protected $sequences = [ + [ + '->', + 'trans', + '(', + self::MESSAGE_TOKEN, + ',', + self::METHOD_ARGUMENTS_TOKEN, + ',', + self::DOMAIN_TOKEN, + ], + [ + '->', + 'trans', + '(', + self::MESSAGE_TOKEN, + ], + ]; + + /** + * {@inheritdoc} + */ + public function extract($resource, MessageCatalogue $catalog) + { + $files = $this->extractFiles($resource); + foreach ($files as $file) { + $this->parseTokens(token_get_all(file_get_contents($file)), $catalog, $file); + + gc_mem_caches(); + } + } + + /** + * {@inheritdoc} + */ + public function setPrefix(string $prefix) + { + $this->prefix = $prefix; + } + + /** + * Normalizes a token. + * + * @param mixed $token + * + * @return string|null + */ + protected function normalizeToken($token) + { + if (isset($token[1]) && 'b"' !== $token) { + return $token[1]; + } + + return $token; + } + + /** + * Seeks to a non-whitespace token. + */ + private function seekToNextRelevantToken(\Iterator $tokenIterator) + { + for (; $tokenIterator->valid(); $tokenIterator->next()) { + $t = $tokenIterator->current(); + if (T_WHITESPACE !== $t[0]) { + break; + } + } + } + + private function skipMethodArgument(\Iterator $tokenIterator) + { + $openBraces = 0; + + for (; $tokenIterator->valid(); $tokenIterator->next()) { + $t = $tokenIterator->current(); + + if ('[' === $t[0] || '(' === $t[0]) { + ++$openBraces; + } + + if (']' === $t[0] || ')' === $t[0]) { + --$openBraces; + } + + if ((0 === $openBraces && ',' === $t[0]) || (-1 === $openBraces && ')' === $t[0])) { + break; + } + } + } + + /** + * Extracts the message from the iterator while the tokens + * match allowed message tokens. + */ + private function getValue(\Iterator $tokenIterator) + { + $message = ''; + $docToken = ''; + $docPart = ''; + + for (; $tokenIterator->valid(); $tokenIterator->next()) { + $t = $tokenIterator->current(); + if ('.' === $t) { + // Concatenate with next token + continue; + } + if (!isset($t[1])) { + break; + } + + switch ($t[0]) { + case T_START_HEREDOC: + $docToken = $t[1]; + break; + case T_ENCAPSED_AND_WHITESPACE: + case T_CONSTANT_ENCAPSED_STRING: + if ('' === $docToken) { + $message .= PhpStringTokenParser::parse($t[1]); + } else { + $docPart = $t[1]; + } + break; + case T_END_HEREDOC: + $message .= PhpStringTokenParser::parseDocString($docToken, $docPart); + $docToken = ''; + $docPart = ''; + break; + case T_WHITESPACE: + break; + default: + break 2; + } + } + + return $message; + } + + /** + * Extracts trans message from PHP tokens. + */ + protected function parseTokens(array $tokens, MessageCatalogue $catalog, string $filename) + { + $tokenIterator = new \ArrayIterator($tokens); + + for ($key = 0; $key < $tokenIterator->count(); ++$key) { + foreach ($this->sequences as $sequence) { + $message = ''; + $domain = 'messages'; + $tokenIterator->seek($key); + + foreach ($sequence as $sequenceKey => $item) { + $this->seekToNextRelevantToken($tokenIterator); + + if ($this->normalizeToken($tokenIterator->current()) === $item) { + $tokenIterator->next(); + continue; + } elseif (self::MESSAGE_TOKEN === $item) { + $message = $this->getValue($tokenIterator); + + if (\count($sequence) === ($sequenceKey + 1)) { + break; + } + } elseif (self::METHOD_ARGUMENTS_TOKEN === $item) { + $this->skipMethodArgument($tokenIterator); + } elseif (self::DOMAIN_TOKEN === $item) { + $domainToken = $this->getValue($tokenIterator); + if ('' !== $domainToken) { + $domain = $domainToken; + } + + break; + } else { + break; + } + } + + if ($message) { + $catalog->set($message, $this->prefix.$message, $domain); + $metadata = $catalog->getMetadata($message, $domain) ?? []; + $normalizedFilename = preg_replace('{[\\\\/]+}', '/', $filename); + $metadata['sources'][] = $normalizedFilename.':'.$tokens[$key][2]; + $catalog->setMetadata($message, $metadata, $domain); + break; + } + } + } + } + + /** + * @return bool + * + * @throws \InvalidArgumentException + */ + protected function canBeExtracted(string $file) + { + return $this->isFile($file) && 'php' === pathinfo($file, PATHINFO_EXTENSION); + } + + /** + * {@inheritdoc} + */ + protected function extractFromDirectory($directory) + { + $finder = new Finder(); + + return $finder->files()->name('*.php')->in($directory); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Extractor/PhpStringTokenParser.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Extractor/PhpStringTokenParser.php new file mode 100644 index 0000000..e68b0e5 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Extractor/PhpStringTokenParser.php @@ -0,0 +1,142 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Extractor; + +/* + * The following is derived from code at http://github.com/nikic/PHP-Parser + * + * Copyright (c) 2011 by Nikita Popov + * + * Some rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * + * * The names of the contributors may not be used to endorse or + * promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +class PhpStringTokenParser +{ + protected static $replacements = [ + '\\' => '\\', + '$' => '$', + 'n' => "\n", + 'r' => "\r", + 't' => "\t", + 'f' => "\f", + 'v' => "\v", + 'e' => "\x1B", + ]; + + /** + * Parses a string token. + * + * @param string $str String token content + * + * @return string The parsed string + */ + public static function parse(string $str) + { + $bLength = 0; + if ('b' === $str[0]) { + $bLength = 1; + } + + if ('\'' === $str[$bLength]) { + return str_replace( + ['\\\\', '\\\''], + ['\\', '\''], + substr($str, $bLength + 1, -1) + ); + } else { + return self::parseEscapeSequences(substr($str, $bLength + 1, -1), '"'); + } + } + + /** + * Parses escape sequences in strings (all string types apart from single quoted). + * + * @param string $str String without quotes + * @param string|null $quote Quote type + * + * @return string String with escape sequences parsed + */ + public static function parseEscapeSequences(string $str, string $quote = null) + { + if (null !== $quote) { + $str = str_replace('\\'.$quote, $quote, $str); + } + + return preg_replace_callback( + '~\\\\([\\\\$nrtfve]|[xX][0-9a-fA-F]{1,2}|[0-7]{1,3})~', + [__CLASS__, 'parseCallback'], + $str + ); + } + + private static function parseCallback(array $matches): string + { + $str = $matches[1]; + + if (isset(self::$replacements[$str])) { + return self::$replacements[$str]; + } elseif ('x' === $str[0] || 'X' === $str[0]) { + return \chr(hexdec($str)); + } else { + return \chr(octdec($str)); + } + } + + /** + * Parses a constant doc string. + * + * @param string $startToken Doc string start token content (<< + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Formatter; + +use Symfony\Component\Translation\Exception\InvalidArgumentException; +use Symfony\Component\Translation\Exception\LogicException; + +/** + * @author Guilherme Blanco + * @author Abdellatif Ait boudad + */ +class IntlFormatter implements IntlFormatterInterface +{ + private $hasMessageFormatter; + private $cache = []; + + /** + * {@inheritdoc} + */ + public function formatIntl(string $message, string $locale, array $parameters = []): string + { + // MessageFormatter constructor throws an exception if the message is empty + if ('' === $message) { + return ''; + } + + if (!$formatter = $this->cache[$locale][$message] ?? null) { + if (!($this->hasMessageFormatter ?? $this->hasMessageFormatter = class_exists(\MessageFormatter::class))) { + throw new LogicException('Cannot parse message translation: please install the "intl" PHP extension or the "symfony/polyfill-intl-messageformatter" package.'); + } + try { + $this->cache[$locale][$message] = $formatter = new \MessageFormatter($locale, $message); + } catch (\IntlException $e) { + throw new InvalidArgumentException(sprintf('Invalid message format (error #%d): '.intl_get_error_message(), intl_get_error_code()), 0, $e); + } + } + + foreach ($parameters as $key => $value) { + if (\in_array($key[0] ?? null, ['%', '{'], true)) { + unset($parameters[$key]); + $parameters[trim($key, '%{ }')] = $value; + } + } + + if (false === $message = $formatter->format($parameters)) { + throw new InvalidArgumentException(sprintf('Unable to format message (error #%s): '.$formatter->getErrorMessage(), $formatter->getErrorCode())); + } + + return $message; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Formatter/IntlFormatterInterface.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Formatter/IntlFormatterInterface.php new file mode 100644 index 0000000..02fc6ac --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Formatter/IntlFormatterInterface.php @@ -0,0 +1,27 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Formatter; + +/** + * Formats ICU message patterns. + * + * @author Nicolas Grekas + */ +interface IntlFormatterInterface +{ + /** + * Formats a localized message using rules defined by ICU MessageFormat. + * + * @see http://icu-project.org/apiref/icu4c/classMessageFormat.html#details + */ + public function formatIntl(string $message, string $locale, array $parameters = []): string; +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Formatter/MessageFormatter.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Formatter/MessageFormatter.php new file mode 100644 index 0000000..0407964 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Formatter/MessageFormatter.php @@ -0,0 +1,56 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Formatter; + +use Symfony\Component\Translation\IdentityTranslator; +use Symfony\Contracts\Translation\TranslatorInterface; + +// Help opcache.preload discover always-needed symbols +class_exists(IntlFormatter::class); + +/** + * @author Abdellatif Ait boudad + */ +class MessageFormatter implements MessageFormatterInterface, IntlFormatterInterface +{ + private $translator; + private $intlFormatter; + + /** + * @param TranslatorInterface|null $translator An identity translator to use as selector for pluralization + */ + public function __construct(TranslatorInterface $translator = null, IntlFormatterInterface $intlFormatter = null) + { + $this->translator = $translator ?? new IdentityTranslator(); + $this->intlFormatter = $intlFormatter ?? new IntlFormatter(); + } + + /** + * {@inheritdoc} + */ + public function format(string $message, string $locale, array $parameters = []) + { + if ($this->translator instanceof TranslatorInterface) { + return $this->translator->trans($message, $parameters, null, $locale); + } + + return strtr($message, $parameters); + } + + /** + * {@inheritdoc} + */ + public function formatIntl(string $message, string $locale, array $parameters = []): string + { + return $this->intlFormatter->formatIntl($message, $locale, $parameters); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Formatter/MessageFormatterInterface.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Formatter/MessageFormatterInterface.php new file mode 100644 index 0000000..b85dbfd --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Formatter/MessageFormatterInterface.php @@ -0,0 +1,30 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Formatter; + +/** + * @author Guilherme Blanco + * @author Abdellatif Ait boudad + */ +interface MessageFormatterInterface +{ + /** + * Formats a localized message pattern with given arguments. + * + * @param string $message The message (may also be an object that can be cast to string) + * @param string $locale The message locale + * @param array $parameters An array of parameters for the message + * + * @return string + */ + public function format(string $message, string $locale, array $parameters = []); +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/IdentityTranslator.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/IdentityTranslator.php new file mode 100644 index 0000000..46875ed --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/IdentityTranslator.php @@ -0,0 +1,26 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation; + +use Symfony\Contracts\Translation\LocaleAwareInterface; +use Symfony\Contracts\Translation\TranslatorInterface; +use Symfony\Contracts\Translation\TranslatorTrait; + +/** + * IdentityTranslator does not translate anything. + * + * @author Fabien Potencier + */ +class IdentityTranslator implements TranslatorInterface, LocaleAwareInterface +{ + use TranslatorTrait; +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/LICENSE b/soc/2020/daily_report/archive/app/vendor/symfony/translation/LICENSE new file mode 100644 index 0000000..9e936ec --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2004-2020 Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/ArrayLoader.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/ArrayLoader.php new file mode 100644 index 0000000..0758da8 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/ArrayLoader.php @@ -0,0 +1,58 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Loader; + +use Symfony\Component\Translation\MessageCatalogue; + +/** + * ArrayLoader loads translations from a PHP array. + * + * @author Fabien Potencier + */ +class ArrayLoader implements LoaderInterface +{ + /** + * {@inheritdoc} + */ + public function load($resource, string $locale, string $domain = 'messages') + { + $resource = $this->flatten($resource); + $catalogue = new MessageCatalogue($locale); + $catalogue->add($resource, $domain); + + return $catalogue; + } + + /** + * Flattens an nested array of translations. + * + * The scheme used is: + * 'key' => ['key2' => ['key3' => 'value']] + * Becomes: + * 'key.key2.key3' => 'value' + */ + private function flatten(array $messages): array + { + $result = []; + foreach ($messages as $key => $value) { + if (\is_array($value)) { + foreach ($this->flatten($value) as $k => $v) { + $result[$key.'.'.$k] = $v; + } + } else { + $result[$key] = $value; + } + } + + return $result; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/CsvFileLoader.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/CsvFileLoader.php new file mode 100644 index 0000000..25ac2f5 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/CsvFileLoader.php @@ -0,0 +1,65 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Loader; + +use Symfony\Component\Translation\Exception\NotFoundResourceException; + +/** + * CsvFileLoader loads translations from CSV files. + * + * @author SaÅ¡a Stamenković + */ +class CsvFileLoader extends FileLoader +{ + private $delimiter = ';'; + private $enclosure = '"'; + private $escape = '\\'; + + /** + * {@inheritdoc} + */ + protected function loadResource($resource) + { + $messages = []; + + try { + $file = new \SplFileObject($resource, 'rb'); + } catch (\RuntimeException $e) { + throw new NotFoundResourceException(sprintf('Error opening file "%s".', $resource), 0, $e); + } + + $file->setFlags(\SplFileObject::READ_CSV | \SplFileObject::SKIP_EMPTY); + $file->setCsvControl($this->delimiter, $this->enclosure, $this->escape); + + foreach ($file as $data) { + if (false === $data) { + continue; + } + + if ('#' !== substr($data[0], 0, 1) && isset($data[1]) && 2 === \count($data)) { + $messages[$data[0]] = $data[1]; + } + } + + return $messages; + } + + /** + * Sets the delimiter, enclosure, and escape character for CSV. + */ + public function setCsvControl(string $delimiter = ';', string $enclosure = '"', string $escape = '\\') + { + $this->delimiter = $delimiter; + $this->enclosure = $enclosure; + $this->escape = $escape; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/FileLoader.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/FileLoader.php new file mode 100644 index 0000000..60c5b34 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/FileLoader.php @@ -0,0 +1,65 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Loader; + +use Symfony\Component\Config\Resource\FileResource; +use Symfony\Component\Translation\Exception\InvalidResourceException; +use Symfony\Component\Translation\Exception\NotFoundResourceException; + +/** + * @author Abdellatif Ait boudad + */ +abstract class FileLoader extends ArrayLoader +{ + /** + * {@inheritdoc} + */ + public function load($resource, string $locale, string $domain = 'messages') + { + if (!stream_is_local($resource)) { + throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource)); + } + + if (!file_exists($resource)) { + throw new NotFoundResourceException(sprintf('File "%s" not found.', $resource)); + } + + $messages = $this->loadResource($resource); + + // empty resource + if (null === $messages) { + $messages = []; + } + + // not an array + if (!\is_array($messages)) { + throw new InvalidResourceException(sprintf('Unable to load file "%s".', $resource)); + } + + $catalogue = parent::load($messages, $locale, $domain); + + if (class_exists('Symfony\Component\Config\Resource\FileResource')) { + $catalogue->addResource(new FileResource($resource)); + } + + return $catalogue; + } + + /** + * @param string $resource + * + * @return array + * + * @throws InvalidResourceException if stream content has an invalid format + */ + abstract protected function loadResource($resource); +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/IcuDatFileLoader.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/IcuDatFileLoader.php new file mode 100644 index 0000000..0b71681 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/IcuDatFileLoader.php @@ -0,0 +1,61 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Loader; + +use Symfony\Component\Config\Resource\FileResource; +use Symfony\Component\Translation\Exception\InvalidResourceException; +use Symfony\Component\Translation\Exception\NotFoundResourceException; +use Symfony\Component\Translation\MessageCatalogue; + +/** + * IcuResFileLoader loads translations from a resource bundle. + * + * @author stealth35 + */ +class IcuDatFileLoader extends IcuResFileLoader +{ + /** + * {@inheritdoc} + */ + public function load($resource, string $locale, string $domain = 'messages') + { + if (!stream_is_local($resource.'.dat')) { + throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource)); + } + + if (!file_exists($resource.'.dat')) { + throw new NotFoundResourceException(sprintf('File "%s" not found.', $resource)); + } + + try { + $rb = new \ResourceBundle($locale, $resource); + } catch (\Exception $e) { + $rb = null; + } + + if (!$rb) { + throw new InvalidResourceException(sprintf('Cannot load resource "%s".', $resource)); + } elseif (intl_is_failure($rb->getErrorCode())) { + throw new InvalidResourceException($rb->getErrorMessage(), $rb->getErrorCode()); + } + + $messages = $this->flatten($rb); + $catalogue = new MessageCatalogue($locale); + $catalogue->add($messages, $domain); + + if (class_exists('Symfony\Component\Config\Resource\FileResource')) { + $catalogue->addResource(new FileResource($resource.'.dat')); + } + + return $catalogue; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/IcuResFileLoader.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/IcuResFileLoader.php new file mode 100644 index 0000000..9aa30bd --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/IcuResFileLoader.php @@ -0,0 +1,91 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Loader; + +use Symfony\Component\Config\Resource\DirectoryResource; +use Symfony\Component\Translation\Exception\InvalidResourceException; +use Symfony\Component\Translation\Exception\NotFoundResourceException; +use Symfony\Component\Translation\MessageCatalogue; + +/** + * IcuResFileLoader loads translations from a resource bundle. + * + * @author stealth35 + */ +class IcuResFileLoader implements LoaderInterface +{ + /** + * {@inheritdoc} + */ + public function load($resource, string $locale, string $domain = 'messages') + { + if (!stream_is_local($resource)) { + throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource)); + } + + if (!is_dir($resource)) { + throw new NotFoundResourceException(sprintf('File "%s" not found.', $resource)); + } + + try { + $rb = new \ResourceBundle($locale, $resource); + } catch (\Exception $e) { + $rb = null; + } + + if (!$rb) { + throw new InvalidResourceException(sprintf('Cannot load resource "%s".', $resource)); + } elseif (intl_is_failure($rb->getErrorCode())) { + throw new InvalidResourceException($rb->getErrorMessage(), $rb->getErrorCode()); + } + + $messages = $this->flatten($rb); + $catalogue = new MessageCatalogue($locale); + $catalogue->add($messages, $domain); + + if (class_exists('Symfony\Component\Config\Resource\DirectoryResource')) { + $catalogue->addResource(new DirectoryResource($resource)); + } + + return $catalogue; + } + + /** + * Flattens an ResourceBundle. + * + * The scheme used is: + * key { key2 { key3 { "value" } } } + * Becomes: + * 'key.key2.key3' => 'value' + * + * This function takes an array by reference and will modify it + * + * @param \ResourceBundle $rb The ResourceBundle that will be flattened + * @param array $messages Used internally for recursive calls + * @param string $path Current path being parsed, used internally for recursive calls + * + * @return array the flattened ResourceBundle + */ + protected function flatten(\ResourceBundle $rb, array &$messages = [], string $path = null) + { + foreach ($rb as $key => $value) { + $nodePath = $path ? $path.'.'.$key : $key; + if ($value instanceof \ResourceBundle) { + $this->flatten($value, $messages, $nodePath); + } else { + $messages[$nodePath] = $value; + } + } + + return $messages; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/IniFileLoader.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/IniFileLoader.php new file mode 100644 index 0000000..11d9b27 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/IniFileLoader.php @@ -0,0 +1,28 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Loader; + +/** + * IniFileLoader loads translations from an ini file. + * + * @author stealth35 + */ +class IniFileLoader extends FileLoader +{ + /** + * {@inheritdoc} + */ + protected function loadResource($resource) + { + return parse_ini_file($resource, true); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/JsonFileLoader.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/JsonFileLoader.php new file mode 100644 index 0000000..9f15dbc --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/JsonFileLoader.php @@ -0,0 +1,60 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Loader; + +use Symfony\Component\Translation\Exception\InvalidResourceException; + +/** + * JsonFileLoader loads translations from an json file. + * + * @author singles + */ +class JsonFileLoader extends FileLoader +{ + /** + * {@inheritdoc} + */ + protected function loadResource($resource) + { + $messages = []; + if ($data = file_get_contents($resource)) { + $messages = json_decode($data, true); + + if (0 < $errorCode = json_last_error()) { + throw new InvalidResourceException('Error parsing JSON: '.$this->getJSONErrorMessage($errorCode)); + } + } + + return $messages; + } + + /** + * Translates JSON_ERROR_* constant into meaningful message. + */ + private function getJSONErrorMessage(int $errorCode): string + { + switch ($errorCode) { + case JSON_ERROR_DEPTH: + return 'Maximum stack depth exceeded'; + case JSON_ERROR_STATE_MISMATCH: + return 'Underflow or the modes mismatch'; + case JSON_ERROR_CTRL_CHAR: + return 'Unexpected control character found'; + case JSON_ERROR_SYNTAX: + return 'Syntax error, malformed JSON'; + case JSON_ERROR_UTF8: + return 'Malformed UTF-8 characters, possibly incorrectly encoded'; + default: + return 'Unknown error'; + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/LoaderInterface.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/LoaderInterface.php new file mode 100644 index 0000000..2073f2b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/LoaderInterface.php @@ -0,0 +1,38 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Loader; + +use Symfony\Component\Translation\Exception\InvalidResourceException; +use Symfony\Component\Translation\Exception\NotFoundResourceException; +use Symfony\Component\Translation\MessageCatalogue; + +/** + * LoaderInterface is the interface implemented by all translation loaders. + * + * @author Fabien Potencier + */ +interface LoaderInterface +{ + /** + * Loads a locale. + * + * @param mixed $resource A resource + * @param string $locale A locale + * @param string $domain The domain + * + * @return MessageCatalogue A MessageCatalogue instance + * + * @throws NotFoundResourceException when the resource cannot be found + * @throws InvalidResourceException when the resource cannot be loaded + */ + public function load($resource, string $locale, string $domain = 'messages'); +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/MoFileLoader.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/MoFileLoader.php new file mode 100644 index 0000000..d344c6e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/MoFileLoader.php @@ -0,0 +1,140 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Loader; + +use Symfony\Component\Translation\Exception\InvalidResourceException; + +/** + * @copyright Copyright (c) 2010, Union of RAD http://union-of-rad.org (http://lithify.me/) + */ +class MoFileLoader extends FileLoader +{ + /** + * Magic used for validating the format of a MO file as well as + * detecting if the machine used to create that file was little endian. + */ + const MO_LITTLE_ENDIAN_MAGIC = 0x950412de; + + /** + * Magic used for validating the format of a MO file as well as + * detecting if the machine used to create that file was big endian. + */ + const MO_BIG_ENDIAN_MAGIC = 0xde120495; + + /** + * The size of the header of a MO file in bytes. + */ + const MO_HEADER_SIZE = 28; + + /** + * Parses machine object (MO) format, independent of the machine's endian it + * was created on. Both 32bit and 64bit systems are supported. + * + * {@inheritdoc} + */ + protected function loadResource($resource) + { + $stream = fopen($resource, 'r'); + + $stat = fstat($stream); + + if ($stat['size'] < self::MO_HEADER_SIZE) { + throw new InvalidResourceException('MO stream content has an invalid format.'); + } + $magic = unpack('V1', fread($stream, 4)); + $magic = hexdec(substr(dechex(current($magic)), -8)); + + if (self::MO_LITTLE_ENDIAN_MAGIC == $magic) { + $isBigEndian = false; + } elseif (self::MO_BIG_ENDIAN_MAGIC == $magic) { + $isBigEndian = true; + } else { + throw new InvalidResourceException('MO stream content has an invalid format.'); + } + + // formatRevision + $this->readLong($stream, $isBigEndian); + $count = $this->readLong($stream, $isBigEndian); + $offsetId = $this->readLong($stream, $isBigEndian); + $offsetTranslated = $this->readLong($stream, $isBigEndian); + // sizeHashes + $this->readLong($stream, $isBigEndian); + // offsetHashes + $this->readLong($stream, $isBigEndian); + + $messages = []; + + for ($i = 0; $i < $count; ++$i) { + $pluralId = null; + $translated = null; + + fseek($stream, $offsetId + $i * 8); + + $length = $this->readLong($stream, $isBigEndian); + $offset = $this->readLong($stream, $isBigEndian); + + if ($length < 1) { + continue; + } + + fseek($stream, $offset); + $singularId = fread($stream, $length); + + if (false !== strpos($singularId, "\000")) { + list($singularId, $pluralId) = explode("\000", $singularId); + } + + fseek($stream, $offsetTranslated + $i * 8); + $length = $this->readLong($stream, $isBigEndian); + $offset = $this->readLong($stream, $isBigEndian); + + if ($length < 1) { + continue; + } + + fseek($stream, $offset); + $translated = fread($stream, $length); + + if (false !== strpos($translated, "\000")) { + $translated = explode("\000", $translated); + } + + $ids = ['singular' => $singularId, 'plural' => $pluralId]; + $item = compact('ids', 'translated'); + + if (!empty($item['ids']['singular'])) { + $id = $item['ids']['singular']; + if (isset($item['ids']['plural'])) { + $id .= '|'.$item['ids']['plural']; + } + $messages[$id] = stripcslashes(implode('|', (array) $item['translated'])); + } + } + + fclose($stream); + + return array_filter($messages); + } + + /** + * Reads an unsigned long from stream respecting endianness. + * + * @param resource $stream + */ + private function readLong($stream, bool $isBigEndian): int + { + $result = unpack($isBigEndian ? 'N1' : 'V1', fread($stream, 4)); + $result = current($result); + + return (int) substr($result, -8); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/PhpFileLoader.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/PhpFileLoader.php new file mode 100644 index 0000000..0991c3d --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/PhpFileLoader.php @@ -0,0 +1,42 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Loader; + +/** + * PhpFileLoader loads translations from PHP files returning an array of translations. + * + * @author Fabien Potencier + */ +class PhpFileLoader extends FileLoader +{ + private static $cache = []; + + /** + * {@inheritdoc} + */ + protected function loadResource($resource) + { + if ([] === self::$cache && \function_exists('opcache_invalidate') && filter_var(ini_get('opcache.enable'), FILTER_VALIDATE_BOOLEAN) && (!\in_array(\PHP_SAPI, ['cli', 'phpdbg'], true) || filter_var(ini_get('opcache.enable_cli'), FILTER_VALIDATE_BOOLEAN))) { + self::$cache = null; + } + + if (null === self::$cache) { + return require $resource; + } + + if (isset(self::$cache[$resource])) { + return self::$cache[$resource]; + } + + return self::$cache[$resource] = require $resource; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/PoFileLoader.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/PoFileLoader.php new file mode 100644 index 0000000..5e460fb --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/PoFileLoader.php @@ -0,0 +1,149 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Loader; + +/** + * @copyright Copyright (c) 2010, Union of RAD https://github.com/UnionOfRAD/lithium + * @copyright Copyright (c) 2012, Clemens Tolboom + */ +class PoFileLoader extends FileLoader +{ + /** + * Parses portable object (PO) format. + * + * From https://www.gnu.org/software/gettext/manual/gettext.html#PO-Files + * we should be able to parse files having: + * + * white-space + * # translator-comments + * #. extracted-comments + * #: reference... + * #, flag... + * #| msgid previous-untranslated-string + * msgid untranslated-string + * msgstr translated-string + * + * extra or different lines are: + * + * #| msgctxt previous-context + * #| msgid previous-untranslated-string + * msgctxt context + * + * #| msgid previous-untranslated-string-singular + * #| msgid_plural previous-untranslated-string-plural + * msgid untranslated-string-singular + * msgid_plural untranslated-string-plural + * msgstr[0] translated-string-case-0 + * ... + * msgstr[N] translated-string-case-n + * + * The definition states: + * - white-space and comments are optional. + * - msgid "" that an empty singleline defines a header. + * + * This parser sacrifices some features of the reference implementation the + * differences to that implementation are as follows. + * - No support for comments spanning multiple lines. + * - Translator and extracted comments are treated as being the same type. + * - Message IDs are allowed to have other encodings as just US-ASCII. + * + * Items with an empty id are ignored. + * + * {@inheritdoc} + */ + protected function loadResource($resource) + { + $stream = fopen($resource, 'r'); + + $defaults = [ + 'ids' => [], + 'translated' => null, + ]; + + $messages = []; + $item = $defaults; + $flags = []; + + while ($line = fgets($stream)) { + $line = trim($line); + + if ('' === $line) { + // Whitespace indicated current item is done + if (!\in_array('fuzzy', $flags)) { + $this->addMessage($messages, $item); + } + $item = $defaults; + $flags = []; + } elseif ('#,' === substr($line, 0, 2)) { + $flags = array_map('trim', explode(',', substr($line, 2))); + } elseif ('msgid "' === substr($line, 0, 7)) { + // We start a new msg so save previous + // TODO: this fails when comments or contexts are added + $this->addMessage($messages, $item); + $item = $defaults; + $item['ids']['singular'] = substr($line, 7, -1); + } elseif ('msgstr "' === substr($line, 0, 8)) { + $item['translated'] = substr($line, 8, -1); + } elseif ('"' === $line[0]) { + $continues = isset($item['translated']) ? 'translated' : 'ids'; + + if (\is_array($item[$continues])) { + end($item[$continues]); + $item[$continues][key($item[$continues])] .= substr($line, 1, -1); + } else { + $item[$continues] .= substr($line, 1, -1); + } + } elseif ('msgid_plural "' === substr($line, 0, 14)) { + $item['ids']['plural'] = substr($line, 14, -1); + } elseif ('msgstr[' === substr($line, 0, 7)) { + $size = strpos($line, ']'); + $item['translated'][(int) substr($line, 7, 1)] = substr($line, $size + 3, -1); + } + } + // save last item + if (!\in_array('fuzzy', $flags)) { + $this->addMessage($messages, $item); + } + fclose($stream); + + return $messages; + } + + /** + * Save a translation item to the messages. + * + * A .po file could contain by error missing plural indexes. We need to + * fix these before saving them. + */ + private function addMessage(array &$messages, array $item) + { + if (!empty($item['ids']['singular'])) { + $id = stripcslashes($item['ids']['singular']); + if (isset($item['ids']['plural'])) { + $id .= '|'.stripcslashes($item['ids']['plural']); + } + + $translated = (array) $item['translated']; + // PO are by definition indexed so sort by index. + ksort($translated); + // Make sure every index is filled. + end($translated); + $count = key($translated); + // Fill missing spots with '-'. + $empties = array_fill(0, $count + 1, '-'); + $translated += $empties; + ksort($translated); + + $messages[$id] = stripcslashes(implode('|', $translated)); + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/QtFileLoader.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/QtFileLoader.php new file mode 100644 index 0000000..f5cdec6 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/QtFileLoader.php @@ -0,0 +1,77 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Loader; + +use Symfony\Component\Config\Resource\FileResource; +use Symfony\Component\Config\Util\XmlUtils; +use Symfony\Component\Translation\Exception\InvalidResourceException; +use Symfony\Component\Translation\Exception\NotFoundResourceException; +use Symfony\Component\Translation\MessageCatalogue; + +/** + * QtFileLoader loads translations from QT Translations XML files. + * + * @author Benjamin Eberlei + */ +class QtFileLoader implements LoaderInterface +{ + /** + * {@inheritdoc} + */ + public function load($resource, string $locale, string $domain = 'messages') + { + if (!stream_is_local($resource)) { + throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource)); + } + + if (!file_exists($resource)) { + throw new NotFoundResourceException(sprintf('File "%s" not found.', $resource)); + } + + try { + $dom = XmlUtils::loadFile($resource); + } catch (\InvalidArgumentException $e) { + throw new InvalidResourceException(sprintf('Unable to load "%s".', $resource), $e->getCode(), $e); + } + + $internalErrors = libxml_use_internal_errors(true); + libxml_clear_errors(); + + $xpath = new \DOMXPath($dom); + $nodes = $xpath->evaluate('//TS/context/name[text()="'.$domain.'"]'); + + $catalogue = new MessageCatalogue($locale); + if (1 == $nodes->length) { + $translations = $nodes->item(0)->nextSibling->parentNode->parentNode->getElementsByTagName('message'); + foreach ($translations as $translation) { + $translationValue = (string) $translation->getElementsByTagName('translation')->item(0)->nodeValue; + + if (!empty($translationValue)) { + $catalogue->set( + (string) $translation->getElementsByTagName('source')->item(0)->nodeValue, + $translationValue, + $domain + ); + } + $translation = $translation->nextSibling; + } + + if (class_exists('Symfony\Component\Config\Resource\FileResource')) { + $catalogue->addResource(new FileResource($resource)); + } + } + + libxml_use_internal_errors($internalErrors); + + return $catalogue; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/XliffFileLoader.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/XliffFileLoader.php new file mode 100644 index 0000000..248974b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/XliffFileLoader.php @@ -0,0 +1,208 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Loader; + +use Symfony\Component\Config\Resource\FileResource; +use Symfony\Component\Config\Util\XmlUtils; +use Symfony\Component\Translation\Exception\InvalidResourceException; +use Symfony\Component\Translation\Exception\NotFoundResourceException; +use Symfony\Component\Translation\MessageCatalogue; +use Symfony\Component\Translation\Util\XliffUtils; + +/** + * XliffFileLoader loads translations from XLIFF files. + * + * @author Fabien Potencier + */ +class XliffFileLoader implements LoaderInterface +{ + /** + * {@inheritdoc} + */ + public function load($resource, string $locale, string $domain = 'messages') + { + if (!stream_is_local($resource)) { + throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource)); + } + + if (!file_exists($resource)) { + throw new NotFoundResourceException(sprintf('File "%s" not found.', $resource)); + } + + $catalogue = new MessageCatalogue($locale); + $this->extract($resource, $catalogue, $domain); + + if (class_exists('Symfony\Component\Config\Resource\FileResource')) { + $catalogue->addResource(new FileResource($resource)); + } + + return $catalogue; + } + + private function extract($resource, MessageCatalogue $catalogue, string $domain) + { + try { + $dom = XmlUtils::loadFile($resource); + } catch (\InvalidArgumentException $e) { + throw new InvalidResourceException(sprintf('Unable to load "%s": '.$e->getMessage(), $resource), $e->getCode(), $e); + } + + $xliffVersion = XliffUtils::getVersionNumber($dom); + if ($errors = XliffUtils::validateSchema($dom)) { + throw new InvalidResourceException(sprintf('Invalid resource provided: "%s"; Errors: '.XliffUtils::getErrorsAsString($errors), $resource)); + } + + if ('1.2' === $xliffVersion) { + $this->extractXliff1($dom, $catalogue, $domain); + } + + if ('2.0' === $xliffVersion) { + $this->extractXliff2($dom, $catalogue, $domain); + } + } + + /** + * Extract messages and metadata from DOMDocument into a MessageCatalogue. + */ + private function extractXliff1(\DOMDocument $dom, MessageCatalogue $catalogue, string $domain) + { + $xml = simplexml_import_dom($dom); + $encoding = strtoupper($dom->encoding); + + $namespace = 'urn:oasis:names:tc:xliff:document:1.2'; + $xml->registerXPathNamespace('xliff', $namespace); + + foreach ($xml->xpath('//xliff:file') as $file) { + $fileAttributes = $file->attributes(); + + $file->registerXPathNamespace('xliff', $namespace); + + foreach ($file->xpath('.//xliff:trans-unit') as $translation) { + $attributes = $translation->attributes(); + + if (!(isset($attributes['resname']) || isset($translation->source))) { + continue; + } + + $source = isset($attributes['resname']) && $attributes['resname'] ? $attributes['resname'] : $translation->source; + // If the xlf file has another encoding specified, try to convert it because + // simple_xml will always return utf-8 encoded values + $target = $this->utf8ToCharset((string) ($translation->target ?? $translation->source), $encoding); + + $catalogue->set((string) $source, $target, $domain); + + $metadata = [ + 'source' => (string) $translation->source, + 'file' => [ + 'original' => (string) $fileAttributes['original'], + ], + ]; + if ($notes = $this->parseNotesMetadata($translation->note, $encoding)) { + $metadata['notes'] = $notes; + } + + if (isset($translation->target) && $translation->target->attributes()) { + $metadata['target-attributes'] = []; + foreach ($translation->target->attributes() as $key => $value) { + $metadata['target-attributes'][$key] = (string) $value; + } + } + + if (isset($attributes['id'])) { + $metadata['id'] = (string) $attributes['id']; + } + + $catalogue->setMetadata((string) $source, $metadata, $domain); + } + } + } + + private function extractXliff2(\DOMDocument $dom, MessageCatalogue $catalogue, string $domain) + { + $xml = simplexml_import_dom($dom); + $encoding = strtoupper($dom->encoding); + + $xml->registerXPathNamespace('xliff', 'urn:oasis:names:tc:xliff:document:2.0'); + + foreach ($xml->xpath('//xliff:unit') as $unit) { + foreach ($unit->segment as $segment) { + $source = $segment->source; + + // If the xlf file has another encoding specified, try to convert it because + // simple_xml will always return utf-8 encoded values + $target = $this->utf8ToCharset((string) (isset($segment->target) ? $segment->target : $source), $encoding); + + $catalogue->set((string) $source, $target, $domain); + + $metadata = []; + if (isset($segment->target) && $segment->target->attributes()) { + $metadata['target-attributes'] = []; + foreach ($segment->target->attributes() as $key => $value) { + $metadata['target-attributes'][$key] = (string) $value; + } + } + + if (isset($unit->notes)) { + $metadata['notes'] = []; + foreach ($unit->notes->note as $noteNode) { + $note = []; + foreach ($noteNode->attributes() as $key => $value) { + $note[$key] = (string) $value; + } + $note['content'] = (string) $noteNode; + $metadata['notes'][] = $note; + } + } + + $catalogue->setMetadata((string) $source, $metadata, $domain); + } + } + } + + /** + * Convert a UTF8 string to the specified encoding. + */ + private function utf8ToCharset(string $content, string $encoding = null): string + { + if ('UTF-8' !== $encoding && !empty($encoding)) { + return mb_convert_encoding($content, $encoding, 'UTF-8'); + } + + return $content; + } + + private function parseNotesMetadata(\SimpleXMLElement $noteElement = null, string $encoding = null): array + { + $notes = []; + + if (null === $noteElement) { + return $notes; + } + + /** @var \SimpleXMLElement $xmlNote */ + foreach ($noteElement as $xmlNote) { + $noteAttributes = $xmlNote->attributes(); + $note = ['content' => $this->utf8ToCharset((string) $xmlNote, $encoding)]; + if (isset($noteAttributes['priority'])) { + $note['priority'] = (int) $noteAttributes['priority']; + } + + if (isset($noteAttributes['from'])) { + $note['from'] = (string) $noteAttributes['from']; + } + + $notes[] = $note; + } + + return $notes; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/YamlFileLoader.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/YamlFileLoader.php new file mode 100644 index 0000000..9502e16 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Loader/YamlFileLoader.php @@ -0,0 +1,54 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Loader; + +use Symfony\Component\Translation\Exception\InvalidResourceException; +use Symfony\Component\Translation\Exception\LogicException; +use Symfony\Component\Yaml\Exception\ParseException; +use Symfony\Component\Yaml\Parser as YamlParser; +use Symfony\Component\Yaml\Yaml; + +/** + * YamlFileLoader loads translations from Yaml files. + * + * @author Fabien Potencier + */ +class YamlFileLoader extends FileLoader +{ + private $yamlParser; + + /** + * {@inheritdoc} + */ + protected function loadResource($resource) + { + if (null === $this->yamlParser) { + if (!class_exists('Symfony\Component\Yaml\Parser')) { + throw new LogicException('Loading translations from the YAML format requires the Symfony Yaml component.'); + } + + $this->yamlParser = new YamlParser(); + } + + try { + $messages = $this->yamlParser->parseFile($resource, Yaml::PARSE_CONSTANT); + } catch (ParseException $e) { + throw new InvalidResourceException(sprintf('Error parsing YAML, invalid file "%s".', $resource), 0, $e); + } + + if (null !== $messages && !\is_array($messages)) { + throw new InvalidResourceException(sprintf('Unable to load file "%s".', $resource)); + } + + return $messages ?: []; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/LoggingTranslator.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/LoggingTranslator.php new file mode 100644 index 0000000..c6e8078 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/LoggingTranslator.php @@ -0,0 +1,127 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation; + +use Psr\Log\LoggerInterface; +use Symfony\Component\Translation\Exception\InvalidArgumentException; +use Symfony\Contracts\Translation\LocaleAwareInterface; +use Symfony\Contracts\Translation\TranslatorInterface; + +/** + * @author Abdellatif Ait boudad + */ +class LoggingTranslator implements TranslatorInterface, TranslatorBagInterface, LocaleAwareInterface +{ + /** + * @var TranslatorInterface|TranslatorBagInterface + */ + private $translator; + + private $logger; + + /** + * @param TranslatorInterface $translator The translator must implement TranslatorBagInterface + */ + public function __construct(TranslatorInterface $translator, LoggerInterface $logger) + { + if (!$translator instanceof TranslatorBagInterface || !$translator instanceof LocaleAwareInterface) { + throw new InvalidArgumentException(sprintf('The Translator "%s" must implement TranslatorInterface, TranslatorBagInterface and LocaleAwareInterface.', \get_class($translator))); + } + + $this->translator = $translator; + $this->logger = $logger; + } + + /** + * {@inheritdoc} + */ + public function trans(?string $id, array $parameters = [], string $domain = null, string $locale = null) + { + $trans = $this->translator->trans($id = (string) $id, $parameters, $domain, $locale); + $this->log($id, $domain, $locale); + + return $trans; + } + + /** + * {@inheritdoc} + */ + public function setLocale(string $locale) + { + $prev = $this->translator->getLocale(); + $this->translator->setLocale($locale); + if ($prev === $locale) { + return; + } + + $this->logger->debug(sprintf('The locale of the translator has changed from "%s" to "%s".', $prev, $locale)); + } + + /** + * {@inheritdoc} + */ + public function getLocale() + { + return $this->translator->getLocale(); + } + + /** + * {@inheritdoc} + */ + public function getCatalogue(string $locale = null) + { + return $this->translator->getCatalogue($locale); + } + + /** + * Gets the fallback locales. + * + * @return array The fallback locales + */ + public function getFallbackLocales() + { + if ($this->translator instanceof Translator || method_exists($this->translator, 'getFallbackLocales')) { + return $this->translator->getFallbackLocales(); + } + + return []; + } + + /** + * Passes through all unknown calls onto the translator object. + */ + public function __call(string $method, array $args) + { + return $this->translator->{$method}(...$args); + } + + /** + * Logs for missing translations. + */ + private function log(string $id, ?string $domain, ?string $locale) + { + if (null === $domain) { + $domain = 'messages'; + } + + $catalogue = $this->translator->getCatalogue($locale); + if ($catalogue->defines($id, $domain)) { + return; + } + + if ($catalogue->has($id, $domain)) { + $this->logger->debug('Translation use fallback catalogue.', ['id' => $id, 'domain' => $domain, 'locale' => $catalogue->getLocale()]); + } else { + $this->logger->warning('Translation not found.', ['id' => $id, 'domain' => $domain, 'locale' => $catalogue->getLocale()]); + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/MessageCatalogue.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/MessageCatalogue.php new file mode 100644 index 0000000..becc4a6 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/MessageCatalogue.php @@ -0,0 +1,313 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation; + +use Symfony\Component\Config\Resource\ResourceInterface; +use Symfony\Component\Translation\Exception\LogicException; + +/** + * @author Fabien Potencier + */ +class MessageCatalogue implements MessageCatalogueInterface, MetadataAwareInterface +{ + private $messages = []; + private $metadata = []; + private $resources = []; + private $locale; + private $fallbackCatalogue; + private $parent; + + /** + * @param string $locale The locale + * @param array $messages An array of messages classified by domain + */ + public function __construct(string $locale, array $messages = []) + { + $this->locale = $locale; + $this->messages = $messages; + } + + /** + * {@inheritdoc} + */ + public function getLocale() + { + return $this->locale; + } + + /** + * {@inheritdoc} + */ + public function getDomains() + { + $domains = []; + $suffixLength = \strlen(self::INTL_DOMAIN_SUFFIX); + + foreach ($this->messages as $domain => $messages) { + if (\strlen($domain) > $suffixLength && false !== $i = strpos($domain, self::INTL_DOMAIN_SUFFIX, -$suffixLength)) { + $domain = substr($domain, 0, $i); + } + $domains[$domain] = $domain; + } + + return array_values($domains); + } + + /** + * {@inheritdoc} + */ + public function all(string $domain = null) + { + if (null !== $domain) { + return ($this->messages[$domain.self::INTL_DOMAIN_SUFFIX] ?? []) + ($this->messages[$domain] ?? []); + } + + $allMessages = []; + $suffixLength = \strlen(self::INTL_DOMAIN_SUFFIX); + + foreach ($this->messages as $domain => $messages) { + if (\strlen($domain) > $suffixLength && false !== $i = strpos($domain, self::INTL_DOMAIN_SUFFIX, -$suffixLength)) { + $domain = substr($domain, 0, $i); + $allMessages[$domain] = $messages + ($allMessages[$domain] ?? []); + } else { + $allMessages[$domain] = ($allMessages[$domain] ?? []) + $messages; + } + } + + return $allMessages; + } + + /** + * {@inheritdoc} + */ + public function set(string $id, string $translation, string $domain = 'messages') + { + $this->add([$id => $translation], $domain); + } + + /** + * {@inheritdoc} + */ + public function has(string $id, string $domain = 'messages') + { + if (isset($this->messages[$domain][$id]) || isset($this->messages[$domain.self::INTL_DOMAIN_SUFFIX][$id])) { + return true; + } + + if (null !== $this->fallbackCatalogue) { + return $this->fallbackCatalogue->has($id, $domain); + } + + return false; + } + + /** + * {@inheritdoc} + */ + public function defines(string $id, string $domain = 'messages') + { + return isset($this->messages[$domain][$id]) || isset($this->messages[$domain.self::INTL_DOMAIN_SUFFIX][$id]); + } + + /** + * {@inheritdoc} + */ + public function get(string $id, string $domain = 'messages') + { + if (isset($this->messages[$domain.self::INTL_DOMAIN_SUFFIX][$id])) { + return $this->messages[$domain.self::INTL_DOMAIN_SUFFIX][$id]; + } + + if (isset($this->messages[$domain][$id])) { + return $this->messages[$domain][$id]; + } + + if (null !== $this->fallbackCatalogue) { + return $this->fallbackCatalogue->get($id, $domain); + } + + return $id; + } + + /** + * {@inheritdoc} + */ + public function replace(array $messages, string $domain = 'messages') + { + unset($this->messages[$domain], $this->messages[$domain.self::INTL_DOMAIN_SUFFIX]); + + $this->add($messages, $domain); + } + + /** + * {@inheritdoc} + */ + public function add(array $messages, string $domain = 'messages') + { + if (!isset($this->messages[$domain])) { + $this->messages[$domain] = []; + } + $intlDomain = $domain; + $suffixLength = \strlen(self::INTL_DOMAIN_SUFFIX); + if (\strlen($domain) > $suffixLength && false !== strpos($domain, self::INTL_DOMAIN_SUFFIX, -$suffixLength)) { + $intlDomain .= self::INTL_DOMAIN_SUFFIX; + } + foreach ($messages as $id => $message) { + if (isset($this->messages[$intlDomain]) && \array_key_exists($id, $this->messages[$intlDomain])) { + $this->messages[$intlDomain][$id] = $message; + } else { + $this->messages[$domain][$id] = $message; + } + } + } + + /** + * {@inheritdoc} + */ + public function addCatalogue(MessageCatalogueInterface $catalogue) + { + if ($catalogue->getLocale() !== $this->locale) { + throw new LogicException(sprintf('Cannot add a catalogue for locale "%s" as the current locale for this catalogue is "%s".', $catalogue->getLocale(), $this->locale)); + } + + foreach ($catalogue->all() as $domain => $messages) { + if ($intlMessages = $catalogue->all($domain.self::INTL_DOMAIN_SUFFIX)) { + $this->add($intlMessages, $domain.self::INTL_DOMAIN_SUFFIX); + $messages = array_diff_key($messages, $intlMessages); + } + $this->add($messages, $domain); + } + + foreach ($catalogue->getResources() as $resource) { + $this->addResource($resource); + } + + if ($catalogue instanceof MetadataAwareInterface) { + $metadata = $catalogue->getMetadata('', ''); + $this->addMetadata($metadata); + } + } + + /** + * {@inheritdoc} + */ + public function addFallbackCatalogue(MessageCatalogueInterface $catalogue) + { + // detect circular references + $c = $catalogue; + while ($c = $c->getFallbackCatalogue()) { + if ($c->getLocale() === $this->getLocale()) { + throw new LogicException(sprintf('Circular reference detected when adding a fallback catalogue for locale "%s".', $catalogue->getLocale())); + } + } + + $c = $this; + do { + if ($c->getLocale() === $catalogue->getLocale()) { + throw new LogicException(sprintf('Circular reference detected when adding a fallback catalogue for locale "%s".', $catalogue->getLocale())); + } + + foreach ($catalogue->getResources() as $resource) { + $c->addResource($resource); + } + } while ($c = $c->parent); + + $catalogue->parent = $this; + $this->fallbackCatalogue = $catalogue; + + foreach ($catalogue->getResources() as $resource) { + $this->addResource($resource); + } + } + + /** + * {@inheritdoc} + */ + public function getFallbackCatalogue() + { + return $this->fallbackCatalogue; + } + + /** + * {@inheritdoc} + */ + public function getResources() + { + return array_values($this->resources); + } + + /** + * {@inheritdoc} + */ + public function addResource(ResourceInterface $resource) + { + $this->resources[$resource->__toString()] = $resource; + } + + /** + * {@inheritdoc} + */ + public function getMetadata(string $key = '', string $domain = 'messages') + { + if ('' == $domain) { + return $this->metadata; + } + + if (isset($this->metadata[$domain])) { + if ('' == $key) { + return $this->metadata[$domain]; + } + + if (isset($this->metadata[$domain][$key])) { + return $this->metadata[$domain][$key]; + } + } + + return null; + } + + /** + * {@inheritdoc} + */ + public function setMetadata(string $key, $value, string $domain = 'messages') + { + $this->metadata[$domain][$key] = $value; + } + + /** + * {@inheritdoc} + */ + public function deleteMetadata(string $key = '', string $domain = 'messages') + { + if ('' == $domain) { + $this->metadata = []; + } elseif ('' == $key) { + unset($this->metadata[$domain]); + } else { + unset($this->metadata[$domain][$key]); + } + } + + /** + * Adds current values with the new values. + * + * @param array $values Values to add + */ + private function addMetadata(array $values) + { + foreach ($values as $domain => $keys) { + foreach ($keys as $key => $value) { + $this->setMetadata($key, $value, $domain); + } + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/MessageCatalogueInterface.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/MessageCatalogueInterface.php new file mode 100644 index 0000000..6683eeb --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/MessageCatalogueInterface.php @@ -0,0 +1,138 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation; + +use Symfony\Component\Config\Resource\ResourceInterface; + +/** + * MessageCatalogueInterface. + * + * @author Fabien Potencier + */ +interface MessageCatalogueInterface +{ + const INTL_DOMAIN_SUFFIX = '+intl-icu'; + + /** + * Gets the catalogue locale. + * + * @return string The locale + */ + public function getLocale(); + + /** + * Gets the domains. + * + * @return array An array of domains + */ + public function getDomains(); + + /** + * Gets the messages within a given domain. + * + * If $domain is null, it returns all messages. + * + * @param string $domain The domain name + * + * @return array An array of messages + */ + public function all(string $domain = null); + + /** + * Sets a message translation. + * + * @param string $id The message id + * @param string $translation The messages translation + * @param string $domain The domain name + */ + public function set(string $id, string $translation, string $domain = 'messages'); + + /** + * Checks if a message has a translation. + * + * @param string $id The message id + * @param string $domain The domain name + * + * @return bool true if the message has a translation, false otherwise + */ + public function has(string $id, string $domain = 'messages'); + + /** + * Checks if a message has a translation (it does not take into account the fallback mechanism). + * + * @param string $id The message id + * @param string $domain The domain name + * + * @return bool true if the message has a translation, false otherwise + */ + public function defines(string $id, string $domain = 'messages'); + + /** + * Gets a message translation. + * + * @param string $id The message id + * @param string $domain The domain name + * + * @return string The message translation + */ + public function get(string $id, string $domain = 'messages'); + + /** + * Sets translations for a given domain. + * + * @param array $messages An array of translations + * @param string $domain The domain name + */ + public function replace(array $messages, string $domain = 'messages'); + + /** + * Adds translations for a given domain. + * + * @param array $messages An array of translations + * @param string $domain The domain name + */ + public function add(array $messages, string $domain = 'messages'); + + /** + * Merges translations from the given Catalogue into the current one. + * + * The two catalogues must have the same locale. + */ + public function addCatalogue(self $catalogue); + + /** + * Merges translations from the given Catalogue into the current one + * only when the translation does not exist. + * + * This is used to provide default translations when they do not exist for the current locale. + */ + public function addFallbackCatalogue(self $catalogue); + + /** + * Gets the fallback catalogue. + * + * @return self|null A MessageCatalogueInterface instance or null when no fallback has been set + */ + public function getFallbackCatalogue(); + + /** + * Returns an array of resources loaded to build this collection. + * + * @return ResourceInterface[] An array of resources + */ + public function getResources(); + + /** + * Adds a resource for this collection. + */ + public function addResource(ResourceInterface $resource); +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/MetadataAwareInterface.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/MetadataAwareInterface.php new file mode 100644 index 0000000..d157a07 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/MetadataAwareInterface.php @@ -0,0 +1,54 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation; + +/** + * MetadataAwareInterface. + * + * @author Fabien Potencier + */ +interface MetadataAwareInterface +{ + /** + * Gets metadata for the given domain and key. + * + * Passing an empty domain will return an array with all metadata indexed by + * domain and then by key. Passing an empty key will return an array with all + * metadata for the given domain. + * + * @param string $key The key + * @param string $domain The domain name + * + * @return mixed The value that was set or an array with the domains/keys or null + */ + public function getMetadata(string $key = '', string $domain = 'messages'); + + /** + * Adds metadata to a message domain. + * + * @param string $key The key + * @param mixed $value The value + * @param string $domain The domain name + */ + public function setMetadata(string $key, $value, string $domain = 'messages'); + + /** + * Deletes metadata for the given key and domain. + * + * Passing an empty domain will delete all metadata. Passing an empty key will + * delete all metadata for the given domain. + * + * @param string $key The key + * @param string $domain The domain name + */ + public function deleteMetadata(string $key = '', string $domain = 'messages'); +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/README.md b/soc/2020/daily_report/archive/app/vendor/symfony/translation/README.md new file mode 100644 index 0000000..f4f1706 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/README.md @@ -0,0 +1,31 @@ +Translation Component +===================== + +The Translation component provides tools to internationalize your application. + +Getting Started +--------------- + +``` +$ composer require symfony/translation +``` + +```php +use Symfony\Component\Translation\Translator; + +$translator = new Translator('fr_FR'); +$translator->addResource('array', [ + 'Hello World!' => 'Bonjour !', +], 'fr_FR'); + +echo $translator->trans('Hello World!'); // outputs « Bonjour ! » +``` + +Resources +--------- + + * [Documentation](https://symfony.com/doc/current/translation.html) + * [Contributing](https://symfony.com/doc/current/contributing/index.html) + * [Report issues](https://github.com/symfony/symfony/issues) and + [send Pull Requests](https://github.com/symfony/symfony/pulls) + in the [main Symfony repository](https://github.com/symfony/symfony) diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Reader/TranslationReader.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Reader/TranslationReader.php new file mode 100644 index 0000000..9e51b15 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Reader/TranslationReader.php @@ -0,0 +1,62 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Reader; + +use Symfony\Component\Finder\Finder; +use Symfony\Component\Translation\Loader\LoaderInterface; +use Symfony\Component\Translation\MessageCatalogue; + +/** + * TranslationReader reads translation messages from translation files. + * + * @author Michel Salib + */ +class TranslationReader implements TranslationReaderInterface +{ + /** + * Loaders used for import. + * + * @var array + */ + private $loaders = []; + + /** + * Adds a loader to the translation extractor. + * + * @param string $format The format of the loader + */ + public function addLoader(string $format, LoaderInterface $loader) + { + $this->loaders[$format] = $loader; + } + + /** + * {@inheritdoc} + */ + public function read(string $directory, MessageCatalogue $catalogue) + { + if (!is_dir($directory)) { + return; + } + + foreach ($this->loaders as $format => $loader) { + // load any existing translation files + $finder = new Finder(); + $extension = $catalogue->getLocale().'.'.$format; + $files = $finder->files()->name('*.'.$extension)->in($directory); + foreach ($files as $file) { + $domain = substr($file->getFilename(), 0, -1 * \strlen($extension) - 1); + $catalogue->addCatalogue($loader->load($file->getPathname(), $catalogue->getLocale(), $domain)); + } + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Reader/TranslationReaderInterface.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Reader/TranslationReaderInterface.php new file mode 100644 index 0000000..bc37204 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Reader/TranslationReaderInterface.php @@ -0,0 +1,27 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Reader; + +use Symfony\Component\Translation\MessageCatalogue; + +/** + * TranslationReader reads translation messages from translation files. + * + * @author Tobias Nyholm + */ +interface TranslationReaderInterface +{ + /** + * Reads translation messages from a directory to the catalogue. + */ + public function read(string $directory, MessageCatalogue $catalogue); +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Resources/bin/translation-status.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Resources/bin/translation-status.php new file mode 100644 index 0000000..44918c9 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Resources/bin/translation-status.php @@ -0,0 +1,207 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +$usageInstructions = << false, + // NULL = analyze all locales + 'locale_to_analyze' => null, + // the reference files all the other translations are compared to + 'original_files' => [ + 'src/Symfony/Component/Form/Resources/translations/validators.en.xlf', + 'src/Symfony/Component/Security/Core/Resources/translations/security.en.xlf', + 'src/Symfony/Component/Validator/Resources/translations/validators.en.xlf', + ], +]; + +$argc = $_SERVER['argc']; +$argv = $_SERVER['argv']; + +if ($argc > 3) { + echo str_replace('translation-status.php', $argv[0], $usageInstructions); + exit(1); +} + +foreach (array_slice($argv, 1) as $argumentOrOption) { + if (0 === strpos($argumentOrOption, '-')) { + $config['verbose_output'] = true; + } else { + $config['locale_to_analyze'] = $argumentOrOption; + } +} + +foreach ($config['original_files'] as $originalFilePath) { + if (!file_exists($originalFilePath)) { + echo sprintf('The following file does not exist. Make sure that you execute this command at the root dir of the Symfony code repository.%s %s', PHP_EOL, $originalFilePath); + exit(1); + } +} + +$totalMissingTranslations = 0; + +foreach ($config['original_files'] as $originalFilePath) { + $translationFilePaths = findTranslationFiles($originalFilePath, $config['locale_to_analyze']); + $translationStatus = calculateTranslationStatus($originalFilePath, $translationFilePaths); + + $totalMissingTranslations += array_sum(array_map(function ($translation) { + return count($translation['missingKeys']); + }, array_values($translationStatus))); + + printTranslationStatus($originalFilePath, $translationStatus, $config['verbose_output']); +} + +exit($totalMissingTranslations > 0 ? 1 : 0); + +function findTranslationFiles($originalFilePath, $localeToAnalyze) +{ + $translations = []; + + $translationsDir = dirname($originalFilePath); + $originalFileName = basename($originalFilePath); + $translationFileNamePattern = str_replace('.en.', '.*.', $originalFileName); + + $translationFiles = glob($translationsDir.'/'.$translationFileNamePattern, GLOB_NOSORT); + sort($translationFiles); + foreach ($translationFiles as $filePath) { + $locale = extractLocaleFromFilePath($filePath); + + if (null !== $localeToAnalyze && $locale !== $localeToAnalyze) { + continue; + } + + $translations[$locale] = $filePath; + } + + return $translations; +} + +function calculateTranslationStatus($originalFilePath, $translationFilePaths) +{ + $translationStatus = []; + $allTranslationKeys = extractTranslationKeys($originalFilePath); + + foreach ($translationFilePaths as $locale => $translationPath) { + $translatedKeys = extractTranslationKeys($translationPath); + $missingKeys = array_diff_key($allTranslationKeys, $translatedKeys); + + $translationStatus[$locale] = [ + 'total' => count($allTranslationKeys), + 'translated' => count($translatedKeys), + 'missingKeys' => $missingKeys, + ]; + } + + return $translationStatus; +} + +function printTranslationStatus($originalFilePath, $translationStatus, $verboseOutput) +{ + printTitle($originalFilePath); + printTable($translationStatus, $verboseOutput); + echo PHP_EOL.PHP_EOL; +} + +function extractLocaleFromFilePath($filePath) +{ + $parts = explode('.', $filePath); + + return $parts[count($parts) - 2]; +} + +function extractTranslationKeys($filePath) +{ + $translationKeys = []; + $contents = new \SimpleXMLElement(file_get_contents($filePath)); + + foreach ($contents->file->body->{'trans-unit'} as $translationKey) { + $translationId = (string) $translationKey['id']; + $translationKey = (string) $translationKey->source; + + $translationKeys[$translationId] = $translationKey; + } + + return $translationKeys; +} + +function printTitle($title) +{ + echo $title.PHP_EOL; + echo str_repeat('=', strlen($title)).PHP_EOL.PHP_EOL; +} + +function printTable($translations, $verboseOutput) +{ + if (0 === count($translations)) { + echo 'No translations found'; + + return; + } + $longestLocaleNameLength = max(array_map('strlen', array_keys($translations))); + + foreach ($translations as $locale => $translation) { + if ($translation['translated'] > $translation['total']) { + textColorRed(); + } elseif ($translation['translated'] === $translation['total']) { + textColorGreen(); + } + + echo sprintf('| Locale: %-'.$longestLocaleNameLength.'s | Translated: %d/%d', $locale, $translation['translated'], $translation['total']).PHP_EOL; + + textColorNormal(); + + if (true === $verboseOutput && count($translation['missingKeys']) > 0) { + echo str_repeat('-', 80).PHP_EOL; + echo '| Missing Translations:'.PHP_EOL; + + foreach ($translation['missingKeys'] as $id => $content) { + echo sprintf('| (id=%s) %s', $id, $content).PHP_EOL; + } + + echo str_repeat('-', 80).PHP_EOL; + } + } +} + +function textColorGreen() +{ + echo "\033[32m"; +} + +function textColorRed() +{ + echo "\033[31m"; +} + +function textColorNormal() +{ + echo "\033[0m"; +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Resources/data/parents.json b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Resources/data/parents.json new file mode 100644 index 0000000..6e45d9f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Resources/data/parents.json @@ -0,0 +1,136 @@ +{ + "az_Cyrl": "root", + "bs_Cyrl": "root", + "en_150": "en_001", + "en_AG": "en_001", + "en_AI": "en_001", + "en_AT": "en_150", + "en_AU": "en_001", + "en_BB": "en_001", + "en_BE": "en_150", + "en_BM": "en_001", + "en_BS": "en_001", + "en_BW": "en_001", + "en_BZ": "en_001", + "en_CA": "en_001", + "en_CC": "en_001", + "en_CH": "en_150", + "en_CK": "en_001", + "en_CM": "en_001", + "en_CX": "en_001", + "en_CY": "en_001", + "en_DE": "en_150", + "en_DG": "en_001", + "en_DK": "en_150", + "en_DM": "en_001", + "en_ER": "en_001", + "en_FI": "en_150", + "en_FJ": "en_001", + "en_FK": "en_001", + "en_FM": "en_001", + "en_GB": "en_001", + "en_GD": "en_001", + "en_GG": "en_001", + "en_GH": "en_001", + "en_GI": "en_001", + "en_GM": "en_001", + "en_GY": "en_001", + "en_HK": "en_001", + "en_IE": "en_001", + "en_IL": "en_001", + "en_IM": "en_001", + "en_IN": "en_001", + "en_IO": "en_001", + "en_JE": "en_001", + "en_JM": "en_001", + "en_KE": "en_001", + "en_KI": "en_001", + "en_KN": "en_001", + "en_KY": "en_001", + "en_LC": "en_001", + "en_LR": "en_001", + "en_LS": "en_001", + "en_MG": "en_001", + "en_MO": "en_001", + "en_MS": "en_001", + "en_MT": "en_001", + "en_MU": "en_001", + "en_MW": "en_001", + "en_MY": "en_001", + "en_NA": "en_001", + "en_NF": "en_001", + "en_NG": "en_001", + "en_NL": "en_150", + "en_NR": "en_001", + "en_NU": "en_001", + "en_NZ": "en_001", + "en_PG": "en_001", + "en_PH": "en_001", + "en_PK": "en_001", + "en_PN": "en_001", + "en_PW": "en_001", + "en_RW": "en_001", + "en_SB": "en_001", + "en_SC": "en_001", + "en_SD": "en_001", + "en_SE": "en_150", + "en_SG": "en_001", + "en_SH": "en_001", + "en_SI": "en_150", + "en_SL": "en_001", + "en_SS": "en_001", + "en_SX": "en_001", + "en_SZ": "en_001", + "en_TC": "en_001", + "en_TK": "en_001", + "en_TO": "en_001", + "en_TT": "en_001", + "en_TV": "en_001", + "en_TZ": "en_001", + "en_UG": "en_001", + "en_VC": "en_001", + "en_VG": "en_001", + "en_VU": "en_001", + "en_WS": "en_001", + "en_ZA": "en_001", + "en_ZM": "en_001", + "en_ZW": "en_001", + "es_AR": "es_419", + "es_BO": "es_419", + "es_BR": "es_419", + "es_BZ": "es_419", + "es_CL": "es_419", + "es_CO": "es_419", + "es_CR": "es_419", + "es_CU": "es_419", + "es_DO": "es_419", + "es_EC": "es_419", + "es_GT": "es_419", + "es_HN": "es_419", + "es_MX": "es_419", + "es_NI": "es_419", + "es_PA": "es_419", + "es_PE": "es_419", + "es_PR": "es_419", + "es_PY": "es_419", + "es_SV": "es_419", + "es_US": "es_419", + "es_UY": "es_419", + "es_VE": "es_419", + "pa_Arab": "root", + "pt_AO": "pt_PT", + "pt_CH": "pt_PT", + "pt_CV": "pt_PT", + "pt_GQ": "pt_PT", + "pt_GW": "pt_PT", + "pt_LU": "pt_PT", + "pt_MO": "pt_PT", + "pt_MZ": "pt_PT", + "pt_ST": "pt_PT", + "pt_TL": "pt_PT", + "sr_Latn": "root", + "uz_Arab": "root", + "uz_Cyrl": "root", + "zh_Hant": "root", + "zh_Hant_MO": "zh_Hant_HK" +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Resources/schemas/xliff-core-1.2-strict.xsd b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Resources/schemas/xliff-core-1.2-strict.xsd new file mode 100644 index 0000000..dface62 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Resources/schemas/xliff-core-1.2-strict.xsd @@ -0,0 +1,2223 @@ + + + + + + + + + + + + + + + Values for the attribute 'context-type'. + + + + + Indicates a database content. + + + + + Indicates the content of an element within an XML document. + + + + + Indicates the name of an element within an XML document. + + + + + Indicates the line number from the sourcefile (see context-type="sourcefile") where the <source> is found. + + + + + Indicates a the number of parameters contained within the <source>. + + + + + Indicates notes pertaining to the parameters in the <source>. + + + + + Indicates the content of a record within a database. + + + + + Indicates the name of a record within a database. + + + + + Indicates the original source file in the case that multiple files are merged to form the original file from which the XLIFF file is created. This differs from the original <file> attribute in that this sourcefile is one of many that make up that file. + + + + + + + Values for the attribute 'count-type'. + + + + + Indicates the count units are items that are used X times in a certain context; example: this is a reusable text unit which is used 42 times in other texts. + + + + + Indicates the count units are translation units existing already in the same document. + + + + + Indicates a total count. + + + + + + + Values for the attribute 'ctype' when used other elements than <ph> or <x>. + + + + + Indicates a run of bolded text. + + + + + Indicates a run of text in italics. + + + + + Indicates a run of underlined text. + + + + + Indicates a run of hyper-text. + + + + + + + Values for the attribute 'ctype' when used with <ph> or <x>. + + + + + Indicates a inline image. + + + + + Indicates a page break. + + + + + Indicates a line break. + + + + + + + + + + + + Values for the attribute 'datatype'. + + + + + Indicates Active Server Page data. + + + + + Indicates C source file data. + + + + + Indicates Channel Definition Format (CDF) data. + + + + + Indicates ColdFusion data. + + + + + Indicates C++ source file data. + + + + + Indicates C-Sharp data. + + + + + Indicates strings from C, ASM, and driver files data. + + + + + Indicates comma-separated values data. + + + + + Indicates database data. + + + + + Indicates portions of document that follows data and contains metadata. + + + + + Indicates portions of document that precedes data and contains metadata. + + + + + Indicates data from standard UI file operations dialogs (e.g., Open, Save, Save As, Export, Import). + + + + + Indicates standard user input screen data. + + + + + Indicates HyperText Markup Language (HTML) data - document instance. + + + + + Indicates content within an HTML document’s <body> element. + + + + + Indicates Windows INI file data. + + + + + Indicates Interleaf data. + + + + + Indicates Java source file data (extension '.java'). + + + + + Indicates Java property resource bundle data. + + + + + Indicates Java list resource bundle data. + + + + + Indicates JavaScript source file data. + + + + + Indicates JScript source file data. + + + + + Indicates information relating to formatting. + + + + + Indicates LISP source file data. + + + + + Indicates information relating to margin formats. + + + + + Indicates a file containing menu. + + + + + Indicates numerically identified string table. + + + + + Indicates Maker Interchange Format (MIF) data. + + + + + Indicates that the datatype attribute value is a MIME Type value and is defined in the mime-type attribute. + + + + + Indicates GNU Machine Object data. + + + + + Indicates Message Librarian strings created by Novell's Message Librarian Tool. + + + + + Indicates information to be displayed at the bottom of each page of a document. + + + + + Indicates information to be displayed at the top of each page of a document. + + + + + Indicates a list of property values (e.g., settings within INI files or preferences dialog). + + + + + Indicates Pascal source file data. + + + + + Indicates Hypertext Preprocessor data. + + + + + Indicates plain text file (no formatting other than, possibly, wrapping). + + + + + Indicates GNU Portable Object file. + + + + + Indicates dynamically generated user defined document. e.g. Oracle Report, Crystal Report, etc. + + + + + Indicates Windows .NET binary resources. + + + + + Indicates Windows .NET Resources. + + + + + Indicates Rich Text Format (RTF) data. + + + + + Indicates Standard Generalized Markup Language (SGML) data - document instance. + + + + + Indicates Standard Generalized Markup Language (SGML) data - Document Type Definition (DTD). + + + + + Indicates Scalable Vector Graphic (SVG) data. + + + + + Indicates VisualBasic Script source file. + + + + + Indicates warning message. + + + + + Indicates Windows (Win32) resources (i.e. resources extracted from an RC script, a message file, or a compiled file). + + + + + Indicates Extensible HyperText Markup Language (XHTML) data - document instance. + + + + + Indicates Extensible Markup Language (XML) data - document instance. + + + + + Indicates Extensible Markup Language (XML) data - Document Type Definition (DTD). + + + + + Indicates Extensible Stylesheet Language (XSL) data. + + + + + Indicates XUL elements. + + + + + + + Values for the attribute 'mtype'. + + + + + Indicates the marked text is an abbreviation. + + + + + ISO-12620 2.1.8: A term resulting from the omission of any part of the full term while designating the same concept. + + + + + ISO-12620 2.1.8.1: An abbreviated form of a simple term resulting from the omission of some of its letters (e.g. 'adj.' for 'adjective'). + + + + + ISO-12620 2.1.8.4: An abbreviated form of a term made up of letters from the full form of a multiword term strung together into a sequence pronounced only syllabically (e.g. 'radar' for 'radio detecting and ranging'). + + + + + ISO-12620: A proper-name term, such as the name of an agency or other proper entity. + + + + + ISO-12620 2.1.18.1: A recurrent word combination characterized by cohesion in that the components of the collocation must co-occur within an utterance or series of utterances, even though they do not necessarily have to maintain immediate proximity to one another. + + + + + ISO-12620 2.1.5: A synonym for an international scientific term that is used in general discourse in a given language. + + + + + Indicates the marked text is a date and/or time. + + + + + ISO-12620 2.1.15: An expression used to represent a concept based on a statement that two mathematical expressions are, for instance, equal as identified by the equal sign (=), or assigned to one another by a similar sign. + + + + + ISO-12620 2.1.7: The complete representation of a term for which there is an abbreviated form. + + + + + ISO-12620 2.1.14: Figures, symbols or the like used to express a concept briefly, such as a mathematical or chemical formula. + + + + + ISO-12620 2.1.1: The concept designation that has been chosen to head a terminological record. + + + + + ISO-12620 2.1.8.3: An abbreviated form of a term consisting of some of the initial letters of the words making up a multiword term or the term elements making up a compound term when these letters are pronounced individually (e.g. 'BSE' for 'bovine spongiform encephalopathy'). + + + + + ISO-12620 2.1.4: A term that is part of an international scientific nomenclature as adopted by an appropriate scientific body. + + + + + ISO-12620 2.1.6: A term that has the same or nearly identical orthographic or phonemic form in many languages. + + + + + ISO-12620 2.1.16: An expression used to represent a concept based on mathematical or logical relations, such as statements of inequality, set relationships, Boolean operations, and the like. + + + + + ISO-12620 2.1.17: A unit to track object. + + + + + Indicates the marked text is a name. + + + + + ISO-12620 2.1.3: A term that represents the same or a very similar concept as another term in the same language, but for which interchangeability is limited to some contexts and inapplicable in others. + + + + + ISO-12620 2.1.17.2: A unique alphanumeric designation assigned to an object in a manufacturing system. + + + + + Indicates the marked text is a phrase. + + + + + ISO-12620 2.1.18: Any group of two or more words that form a unit, the meaning of which frequently cannot be deduced based on the combined sense of the words making up the phrase. + + + + + Indicates the marked text should not be translated. + + + + + ISO-12620 2.1.12: A form of a term resulting from an operation whereby non-Latin writing systems are converted to the Latin alphabet. + + + + + Indicates that the marked text represents a segment. + + + + + ISO-12620 2.1.18.2: A fixed, lexicalized phrase. + + + + + ISO-12620 2.1.8.2: A variant of a multiword term that includes fewer words than the full form of the term (e.g. 'Group of Twenty-four' for 'Intergovernmental Group of Twenty-four on International Monetary Affairs'). + + + + + ISO-12620 2.1.17.1: Stock keeping unit, an inventory item identified by a unique alphanumeric designation assigned to an object in an inventory control system. + + + + + ISO-12620 2.1.19: A fixed chunk of recurring text. + + + + + ISO-12620 2.1.13: A designation of a concept by letters, numerals, pictograms or any combination thereof. + + + + + ISO-12620 2.1.2: Any term that represents the same or a very similar concept as the main entry term in a term entry. + + + + + ISO-12620 2.1.18.3: Phraseological unit in a language that expresses the same semantic content as another phrase in that same language. + + + + + Indicates the marked text is a term. + + + + + ISO-12620 2.1.11: A form of a term resulting from an operation whereby the characters of one writing system are represented by characters from another writing system, taking into account the pronunciation of the characters converted. + + + + + ISO-12620 2.1.10: A form of a term resulting from an operation whereby the characters of an alphabetic writing system are represented by characters from another alphabetic writing system. + + + + + ISO-12620 2.1.8.5: An abbreviated form of a term resulting from the omission of one or more term elements or syllables (e.g. 'flu' for 'influenza'). + + + + + ISO-12620 2.1.9: One of the alternate forms of a term. + + + + + + + Values for the attribute 'restype'. + + + + + Indicates a Windows RC AUTO3STATE control. + + + + + Indicates a Windows RC AUTOCHECKBOX control. + + + + + Indicates a Windows RC AUTORADIOBUTTON control. + + + + + Indicates a Windows RC BEDIT control. + + + + + Indicates a bitmap, for example a BITMAP resource in Windows. + + + + + Indicates a button object, for example a BUTTON control Windows. + + + + + Indicates a caption, such as the caption of a dialog box. + + + + + Indicates the cell in a table, for example the content of the <td> element in HTML. + + + + + Indicates check box object, for example a CHECKBOX control in Windows. + + + + + Indicates a menu item with an associated checkbox. + + + + + Indicates a list box, but with a check-box for each item. + + + + + Indicates a color selection dialog. + + + + + Indicates a combination of edit box and listbox object, for example a COMBOBOX control in Windows. + + + + + Indicates an initialization entry of an extended combobox DLGINIT resource block. (code 0x1234). + + + + + Indicates an initialization entry of a combobox DLGINIT resource block (code 0x0403). + + + + + Indicates a UI base class element that cannot be represented by any other element. + + + + + Indicates a context menu. + + + + + Indicates a Windows RC CTEXT control. + + + + + Indicates a cursor, for example a CURSOR resource in Windows. + + + + + Indicates a date/time picker. + + + + + Indicates a Windows RC DEFPUSHBUTTON control. + + + + + Indicates a dialog box. + + + + + Indicates a Windows RC DLGINIT resource block. + + + + + Indicates an edit box object, for example an EDIT control in Windows. + + + + + Indicates a filename. + + + + + Indicates a file dialog. + + + + + Indicates a footnote. + + + + + Indicates a font name. + + + + + Indicates a footer. + + + + + Indicates a frame object. + + + + + Indicates a XUL grid element. + + + + + Indicates a groupbox object, for example a GROUPBOX control in Windows. + + + + + Indicates a header item. + + + + + Indicates a heading, such has the content of <h1>, <h2>, etc. in HTML. + + + + + Indicates a Windows RC HEDIT control. + + + + + Indicates a horizontal scrollbar. + + + + + Indicates an icon, for example an ICON resource in Windows. + + + + + Indicates a Windows RC IEDIT control. + + + + + Indicates keyword list, such as the content of the Keywords meta-data in HTML, or a K footnote in WinHelp RTF. + + + + + Indicates a label object. + + + + + Indicates a label that is also a HTML link (not necessarily a URL). + + + + + Indicates a list (a group of list-items, for example an <ol> or <ul> element in HTML). + + + + + Indicates a listbox object, for example an LISTBOX control in Windows. + + + + + Indicates an list item (an entry in a list). + + + + + Indicates a Windows RC LTEXT control. + + + + + Indicates a menu (a group of menu-items). + + + + + Indicates a toolbar containing one or more tope level menus. + + + + + Indicates a menu item (an entry in a menu). + + + + + Indicates a XUL menuseparator element. + + + + + Indicates a message, for example an entry in a MESSAGETABLE resource in Windows. + + + + + Indicates a calendar control. + + + + + Indicates an edit box beside a spin control. + + + + + Indicates a catch all for rectangular areas. + + + + + Indicates a standalone menu not necessarily associated with a menubar. + + + + + Indicates a pushbox object, for example a PUSHBOX control in Windows. + + + + + Indicates a Windows RC PUSHBUTTON control. + + + + + Indicates a radio button object. + + + + + Indicates a menuitem with associated radio button. + + + + + Indicates raw data resources for an application. + + + + + Indicates a row in a table. + + + + + Indicates a Windows RC RTEXT control. + + + + + Indicates a user navigable container used to show a portion of a document. + + + + + Indicates a generic divider object (e.g. menu group separator). + + + + + Windows accelerators, shortcuts in resource or property files. + + + + + Indicates a UI control to indicate process activity but not progress. + + + + + Indicates a splitter bar. + + + + + Indicates a Windows RC STATE3 control. + + + + + Indicates a window for providing feedback to the users, like 'read-only', etc. + + + + + Indicates a string, for example an entry in a STRINGTABLE resource in Windows. + + + + + Indicates a layers of controls with a tab to select layers. + + + + + Indicates a display and edits regular two-dimensional tables of cells. + + + + + Indicates a XUL textbox element. + + + + + Indicates a UI button that can be toggled to on or off state. + + + + + Indicates an array of controls, usually buttons. + + + + + Indicates a pop up tool tip text. + + + + + Indicates a bar with a pointer indicating a position within a certain range. + + + + + Indicates a control that displays a set of hierarchical data. + + + + + Indicates a URI (URN or URL). + + + + + Indicates a Windows RC USERBUTTON control. + + + + + Indicates a user-defined control like CONTROL control in Windows. + + + + + Indicates the text of a variable. + + + + + Indicates version information about a resource like VERSIONINFO in Windows. + + + + + Indicates a vertical scrollbar. + + + + + Indicates a graphical window. + + + + + + + Values for the attribute 'size-unit'. + + + + + Indicates a size in 8-bit bytes. + + + + + Indicates a size in Unicode characters. + + + + + Indicates a size in columns. Used for HTML text area. + + + + + Indicates a size in centimeters. + + + + + Indicates a size in dialog units, as defined in Windows resources. + + + + + Indicates a size in 'font-size' units (as defined in CSS). + + + + + Indicates a size in 'x-height' units (as defined in CSS). + + + + + Indicates a size in glyphs. A glyph is considered to be one or more combined Unicode characters that represent a single displayable text character. Sometimes referred to as a 'grapheme cluster' + + + + + Indicates a size in inches. + + + + + Indicates a size in millimeters. + + + + + Indicates a size in percentage. + + + + + Indicates a size in pixels. + + + + + Indicates a size in point. + + + + + Indicates a size in rows. Used for HTML text area. + + + + + + + Values for the attribute 'state'. + + + + + Indicates the terminating state. + + + + + Indicates only non-textual information needs adaptation. + + + + + Indicates both text and non-textual information needs adaptation. + + + + + Indicates only non-textual information needs review. + + + + + Indicates both text and non-textual information needs review. + + + + + Indicates that only the text of the item needs to be reviewed. + + + + + Indicates that the item needs to be translated. + + + + + Indicates that the item is new. For example, translation units that were not in a previous version of the document. + + + + + Indicates that changes are reviewed and approved. + + + + + Indicates that the item has been translated. + + + + + + + Values for the attribute 'state-qualifier'. + + + + + Indicates an exact match. An exact match occurs when a source text of a segment is exactly the same as the source text of a segment that was translated previously. + + + + + Indicates a fuzzy match. A fuzzy match occurs when a source text of a segment is very similar to the source text of a segment that was translated previously (e.g. when the difference is casing, a few changed words, white-space discripancy, etc.). + + + + + Indicates a match based on matching IDs (in addition to matching text). + + + + + Indicates a translation derived from a glossary. + + + + + Indicates a translation derived from existing translation. + + + + + Indicates a translation derived from machine translation. + + + + + Indicates a translation derived from a translation repository. + + + + + Indicates a translation derived from a translation memory. + + + + + Indicates the translation is suggested by machine translation. + + + + + Indicates that the item has been rejected because of incorrect grammar. + + + + + Indicates that the item has been rejected because it is incorrect. + + + + + Indicates that the item has been rejected because it is too long or too short. + + + + + Indicates that the item has been rejected because of incorrect spelling. + + + + + Indicates the translation is suggested by translation memory. + + + + + + + Values for the attribute 'unit'. + + + + + Refers to words. + + + + + Refers to pages. + + + + + Refers to <trans-unit> elements. + + + + + Refers to <bin-unit> elements. + + + + + Refers to glyphs. + + + + + Refers to <trans-unit> and/or <bin-unit> elements. + + + + + Refers to the occurrences of instances defined by the count-type value. + + + + + Refers to characters. + + + + + Refers to lines. + + + + + Refers to sentences. + + + + + Refers to paragraphs. + + + + + Refers to segments. + + + + + Refers to placeables (inline elements). + + + + + + + Values for the attribute 'priority'. + + + + + Highest priority. + + + + + High priority. + + + + + High priority, but not as important as 2. + + + + + High priority, but not as important as 3. + + + + + Medium priority, but more important than 6. + + + + + Medium priority, but less important than 5. + + + + + Low priority, but more important than 8. + + + + + Low priority, but more important than 9. + + + + + Low priority. + + + + + Lowest priority. + + + + + + + + + This value indicates that all properties can be reformatted. This value must be used alone. + + + + + This value indicates that no properties should be reformatted. This value must be used alone. + + + + + + + + + + + + + This value indicates that all information in the coord attribute can be modified. + + + + + This value indicates that the x information in the coord attribute can be modified. + + + + + This value indicates that the y information in the coord attribute can be modified. + + + + + This value indicates that the cx information in the coord attribute can be modified. + + + + + This value indicates that the cy information in the coord attribute can be modified. + + + + + This value indicates that all the information in the font attribute can be modified. + + + + + This value indicates that the name information in the font attribute can be modified. + + + + + This value indicates that the size information in the font attribute can be modified. + + + + + This value indicates that the weight information in the font attribute can be modified. + + + + + This value indicates that the information in the css-style attribute can be modified. + + + + + This value indicates that the information in the style attribute can be modified. + + + + + This value indicates that the information in the exstyle attribute can be modified. + + + + + + + + + + + + + Indicates that the context is informational in nature, specifying for example, how a term should be translated. Thus, should be displayed to anyone editing the XLIFF document. + + + + + Indicates that the context-group is used to specify where the term was found in the translatable source. Thus, it is not displayed. + + + + + Indicates that the context information should be used during translation memory lookups. Thus, it is not displayed. + + + + + + + + + Represents a translation proposal from a translation memory or other resource. + + + + + Represents a previous version of the target element. + + + + + Represents a rejected version of the target element. + + + + + Represents a translation to be used for reference purposes only, for example from a related product or a different language. + + + + + Represents a proposed translation that was used for the translation of the trans-unit, possibly modified. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Values for the attribute 'coord'. + + + + + + + + Version values: 1.0 and 1.1 are allowed for backward compatibility. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Resources/schemas/xliff-core-2.0.xsd b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Resources/schemas/xliff-core-2.0.xsd new file mode 100644 index 0000000..963232f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Resources/schemas/xliff-core-2.0.xsd @@ -0,0 +1,411 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Resources/schemas/xml.xsd b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Resources/schemas/xml.xsd new file mode 100644 index 0000000..a46162a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Resources/schemas/xml.xsd @@ -0,0 +1,309 @@ + + + + + + +
    +

    About the XML namespace

    + +
    +

    + + This schema document describes the XML namespace, in a form + suitable for import by other schema documents. +

    +

    + See + http://www.w3.org/XML/1998/namespace.html and + + http://www.w3.org/TR/REC-xml for information + about this namespace. +

    + +

    + Note that local names in this namespace are intended to be + defined only by the World Wide Web Consortium or its subgroups. + The names currently defined in this namespace are listed below. + They should not be used with conflicting semantics by any Working + Group, specification, or document instance. +

    +

    + See further below in this document for more information about how to refer to this schema document from your own + XSD schema documents and about the + namespace-versioning policy governing this schema document. +

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

    lang (as an attribute name)

    +

    + + denotes an attribute whose value + is a language code for the natural language of the content of + any element; its value is inherited. This name is reserved + by virtue of its definition in the XML specification.

    + +
    +
    +

    Notes

    +

    + Attempting to install the relevant ISO 2- and 3-letter + codes as the enumerated possible values is probably never + going to be a realistic possibility. +

    +

    + + See BCP 47 at + http://www.rfc-editor.org/rfc/bcp/bcp47.txt + and the IANA language subtag registry at + + http://www.iana.org/assignments/language-subtag-registry + for further information. +

    +

    + + The union allows for the 'un-declaration' of xml:lang with + the empty string. +

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

    space (as an attribute name)

    +

    + denotes an attribute whose + value is a keyword indicating what whitespace processing + discipline is intended for the content of the element; its + value is inherited. This name is reserved by virtue of its + definition in the XML specification.

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

    base (as an attribute name)

    +

    + denotes an attribute whose value + provides a URI to be used as the base for interpreting any + relative URIs in the scope of the element on which it + appears; its value is inherited. This name is reserved + by virtue of its definition in the XML Base specification.

    + +

    + See http://www.w3.org/TR/xmlbase/ + for information about this attribute. +

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

    id (as an attribute name)

    +

    + + denotes an attribute whose value + should be interpreted as if declared to be of type ID. + This name is reserved by virtue of its definition in the + xml:id specification.

    + +

    + See http://www.w3.org/TR/xml-id/ + for information about this attribute. +

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

    Father (in any context at all)

    + +
    +

    + denotes Jon Bosak, the chair of + the original XML Working Group. This name is reserved by + the following decision of the W3C XML Plenary and + XML Coordination groups: +

    +
    +

    + + In appreciation for his vision, leadership and + dedication the W3C XML Plenary on this 10th day of + February, 2000, reserves for Jon Bosak in perpetuity + the XML name "xml:Father". +

    +
    +
    +
    +
    +
    + + + + +
    +

    About this schema document

    + +
    +

    + This schema defines attributes and an attribute group suitable + for use by schemas wishing to allow xml:base, + xml:lang, xml:space or + xml:id attributes on elements they define. +

    + +

    + To enable this, such a schema must import this schema for + the XML namespace, e.g. as follows: +

    +
    +          <schema.. .>
    +          .. .
    +           <import namespace="http://www.w3.org/XML/1998/namespace"
    +                      schemaLocation="http://www.w3.org/2001/xml.xsd"/>
    +     
    +

    + or +

    +
    +
    +           <import namespace="http://www.w3.org/XML/1998/namespace"
    +                      schemaLocation="http://www.w3.org/2009/01/xml.xsd"/>
    +     
    +

    + Subsequently, qualified reference to any of the attributes or the + group defined below will have the desired effect, e.g. +

    +
    +          <type.. .>
    +          .. .
    +           <attributeGroup ref="xml:specialAttrs"/>
    +     
    +

    + will define a type which will schema-validate an instance element + with any of those attributes. +

    + +
    +
    +
    +
    + + + +
    +

    Versioning policy for this schema document

    + +
    +

    + In keeping with the XML Schema WG's standard versioning + policy, this schema document will persist at + + http://www.w3.org/2009/01/xml.xsd. +

    +

    + At the date of issue it can also be found at + + http://www.w3.org/2001/xml.xsd. +

    + +

    + The schema document at that URI may however change in the future, + in order to remain compatible with the latest version of XML + Schema itself, or with the XML namespace itself. In other words, + if the XML Schema or XML namespaces change, the version of this + document at + http://www.w3.org/2001/xml.xsd + + will change accordingly; the version at + + http://www.w3.org/2009/01/xml.xsd + + will not change. +

    +

    + + Previous dated (and unchanging) versions of this schema + document are at: +

    + +
    +
    +
    +
    + +
    diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Translator.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Translator.php new file mode 100644 index 0000000..24910f0 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Translator.php @@ -0,0 +1,472 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation; + +use Symfony\Component\Config\ConfigCacheFactory; +use Symfony\Component\Config\ConfigCacheFactoryInterface; +use Symfony\Component\Config\ConfigCacheInterface; +use Symfony\Component\Translation\Exception\InvalidArgumentException; +use Symfony\Component\Translation\Exception\NotFoundResourceException; +use Symfony\Component\Translation\Exception\RuntimeException; +use Symfony\Component\Translation\Formatter\IntlFormatterInterface; +use Symfony\Component\Translation\Formatter\MessageFormatter; +use Symfony\Component\Translation\Formatter\MessageFormatterInterface; +use Symfony\Component\Translation\Loader\LoaderInterface; +use Symfony\Contracts\Translation\LocaleAwareInterface; +use Symfony\Contracts\Translation\TranslatorInterface; + +/** + * @author Fabien Potencier + */ +class Translator implements TranslatorInterface, TranslatorBagInterface, LocaleAwareInterface +{ + /** + * @var MessageCatalogueInterface[] + */ + protected $catalogues = []; + + /** + * @var string + */ + private $locale; + + /** + * @var array + */ + private $fallbackLocales = []; + + /** + * @var LoaderInterface[] + */ + private $loaders = []; + + /** + * @var array + */ + private $resources = []; + + /** + * @var MessageFormatterInterface + */ + private $formatter; + + /** + * @var string + */ + private $cacheDir; + + /** + * @var bool + */ + private $debug; + + private $cacheVary; + + /** + * @var ConfigCacheFactoryInterface|null + */ + private $configCacheFactory; + + /** + * @var array|null + */ + private $parentLocales; + + private $hasIntlFormatter; + + /** + * @throws InvalidArgumentException If a locale contains invalid characters + */ + public function __construct(string $locale, MessageFormatterInterface $formatter = null, string $cacheDir = null, bool $debug = false, array $cacheVary = []) + { + $this->setLocale($locale); + + if (null === $formatter) { + $formatter = new MessageFormatter(); + } + + $this->formatter = $formatter; + $this->cacheDir = $cacheDir; + $this->debug = $debug; + $this->cacheVary = $cacheVary; + $this->hasIntlFormatter = $formatter instanceof IntlFormatterInterface; + } + + public function setConfigCacheFactory(ConfigCacheFactoryInterface $configCacheFactory) + { + $this->configCacheFactory = $configCacheFactory; + } + + /** + * Adds a Loader. + * + * @param string $format The name of the loader (@see addResource()) + */ + public function addLoader(string $format, LoaderInterface $loader) + { + $this->loaders[$format] = $loader; + } + + /** + * Adds a Resource. + * + * @param string $format The name of the loader (@see addLoader()) + * @param mixed $resource The resource name + * + * @throws InvalidArgumentException If the locale contains invalid characters + */ + public function addResource(string $format, $resource, string $locale, string $domain = null) + { + if (null === $domain) { + $domain = 'messages'; + } + + $this->assertValidLocale($locale); + + $this->resources[$locale][] = [$format, $resource, $domain]; + + if (\in_array($locale, $this->fallbackLocales)) { + $this->catalogues = []; + } else { + unset($this->catalogues[$locale]); + } + } + + /** + * {@inheritdoc} + */ + public function setLocale(string $locale) + { + $this->assertValidLocale($locale); + $this->locale = $locale; + } + + /** + * {@inheritdoc} + */ + public function getLocale() + { + return $this->locale; + } + + /** + * Sets the fallback locales. + * + * @param array $locales The fallback locales + * + * @throws InvalidArgumentException If a locale contains invalid characters + */ + public function setFallbackLocales(array $locales) + { + // needed as the fallback locales are linked to the already loaded catalogues + $this->catalogues = []; + + foreach ($locales as $locale) { + $this->assertValidLocale($locale); + } + + $this->fallbackLocales = $this->cacheVary['fallback_locales'] = $locales; + } + + /** + * Gets the fallback locales. + * + * @internal + */ + public function getFallbackLocales(): array + { + return $this->fallbackLocales; + } + + /** + * {@inheritdoc} + */ + public function trans(?string $id, array $parameters = [], string $domain = null, string $locale = null) + { + if (null === $id || '' === $id) { + return ''; + } + + if (null === $domain) { + $domain = 'messages'; + } + + $catalogue = $this->getCatalogue($locale); + $locale = $catalogue->getLocale(); + while (!$catalogue->defines($id, $domain)) { + if ($cat = $catalogue->getFallbackCatalogue()) { + $catalogue = $cat; + $locale = $catalogue->getLocale(); + } else { + break; + } + } + + if ($this->hasIntlFormatter && $catalogue->defines($id, $domain.MessageCatalogue::INTL_DOMAIN_SUFFIX)) { + return $this->formatter->formatIntl($catalogue->get($id, $domain), $locale, $parameters); + } + + return $this->formatter->format($catalogue->get($id, $domain), $locale, $parameters); + } + + /** + * {@inheritdoc} + */ + public function getCatalogue(string $locale = null) + { + if (null === $locale) { + $locale = $this->getLocale(); + } else { + $this->assertValidLocale($locale); + } + + if (!isset($this->catalogues[$locale])) { + $this->loadCatalogue($locale); + } + + return $this->catalogues[$locale]; + } + + /** + * Gets the loaders. + * + * @return array LoaderInterface[] + */ + protected function getLoaders() + { + return $this->loaders; + } + + protected function loadCatalogue(string $locale) + { + if (null === $this->cacheDir) { + $this->initializeCatalogue($locale); + } else { + $this->initializeCacheCatalogue($locale); + } + } + + protected function initializeCatalogue(string $locale) + { + $this->assertValidLocale($locale); + + try { + $this->doLoadCatalogue($locale); + } catch (NotFoundResourceException $e) { + if (!$this->computeFallbackLocales($locale)) { + throw $e; + } + } + $this->loadFallbackCatalogues($locale); + } + + private function initializeCacheCatalogue(string $locale): void + { + if (isset($this->catalogues[$locale])) { + /* Catalogue already initialized. */ + return; + } + + $this->assertValidLocale($locale); + $cache = $this->getConfigCacheFactory()->cache($this->getCatalogueCachePath($locale), + function (ConfigCacheInterface $cache) use ($locale) { + $this->dumpCatalogue($locale, $cache); + } + ); + + if (isset($this->catalogues[$locale])) { + /* Catalogue has been initialized as it was written out to cache. */ + return; + } + + /* Read catalogue from cache. */ + $this->catalogues[$locale] = include $cache->getPath(); + } + + private function dumpCatalogue(string $locale, ConfigCacheInterface $cache): void + { + $this->initializeCatalogue($locale); + $fallbackContent = $this->getFallbackContent($this->catalogues[$locale]); + + $content = sprintf(<<getAllMessages($this->catalogues[$locale]), true), + $fallbackContent + ); + + $cache->write($content, $this->catalogues[$locale]->getResources()); + } + + private function getFallbackContent(MessageCatalogue $catalogue): string + { + $fallbackContent = ''; + $current = ''; + $replacementPattern = '/[^a-z0-9_]/i'; + $fallbackCatalogue = $catalogue->getFallbackCatalogue(); + while ($fallbackCatalogue) { + $fallback = $fallbackCatalogue->getLocale(); + $fallbackSuffix = ucfirst(preg_replace($replacementPattern, '_', $fallback)); + $currentSuffix = ucfirst(preg_replace($replacementPattern, '_', $current)); + + $fallbackContent .= sprintf(<<<'EOF' +$catalogue%s = new MessageCatalogue('%s', %s); +$catalogue%s->addFallbackCatalogue($catalogue%s); + +EOF + , + $fallbackSuffix, + $fallback, + var_export($this->getAllMessages($fallbackCatalogue), true), + $currentSuffix, + $fallbackSuffix + ); + $current = $fallbackCatalogue->getLocale(); + $fallbackCatalogue = $fallbackCatalogue->getFallbackCatalogue(); + } + + return $fallbackContent; + } + + private function getCatalogueCachePath(string $locale): string + { + return $this->cacheDir.'/catalogue.'.$locale.'.'.strtr(substr(base64_encode(hash('sha256', serialize($this->cacheVary), true)), 0, 7), '/', '_').'.php'; + } + + /** + * @internal + */ + protected function doLoadCatalogue(string $locale): void + { + $this->catalogues[$locale] = new MessageCatalogue($locale); + + if (isset($this->resources[$locale])) { + foreach ($this->resources[$locale] as $resource) { + if (!isset($this->loaders[$resource[0]])) { + throw new RuntimeException(sprintf('The "%s" translation loader is not registered.', $resource[0])); + } + $this->catalogues[$locale]->addCatalogue($this->loaders[$resource[0]]->load($resource[1], $locale, $resource[2])); + } + } + } + + private function loadFallbackCatalogues(string $locale): void + { + $current = $this->catalogues[$locale]; + + foreach ($this->computeFallbackLocales($locale) as $fallback) { + if (!isset($this->catalogues[$fallback])) { + $this->initializeCatalogue($fallback); + } + + $fallbackCatalogue = new MessageCatalogue($fallback, $this->getAllMessages($this->catalogues[$fallback])); + foreach ($this->catalogues[$fallback]->getResources() as $resource) { + $fallbackCatalogue->addResource($resource); + } + $current->addFallbackCatalogue($fallbackCatalogue); + $current = $fallbackCatalogue; + } + } + + protected function computeFallbackLocales(string $locale) + { + if (null === $this->parentLocales) { + $parentLocales = json_decode(file_get_contents(__DIR__.'/Resources/data/parents.json'), true); + } + + $locales = []; + foreach ($this->fallbackLocales as $fallback) { + if ($fallback === $locale) { + continue; + } + + $locales[] = $fallback; + } + + while ($locale) { + $parent = $parentLocales[$locale] ?? null; + + if ($parent) { + $locale = 'root' !== $parent ? $parent : null; + } elseif (\function_exists('locale_parse')) { + $localeSubTags = locale_parse($locale); + $locale = null; + if (1 < \count($localeSubTags)) { + array_pop($localeSubTags); + $locale = locale_compose($localeSubTags) ?: null; + } + } elseif ($i = strrpos($locale, '_') ?: strrpos($locale, '-')) { + $locale = substr($locale, 0, $i); + } else { + $locale = null; + } + + if (null !== $locale) { + array_unshift($locales, $locale); + } + } + + return array_unique($locales); + } + + /** + * Asserts that the locale is valid, throws an Exception if not. + * + * @throws InvalidArgumentException If the locale contains invalid characters + */ + protected function assertValidLocale(string $locale) + { + if (1 !== preg_match('/^[a-z0-9@_\\.\\-]*$/i', $locale)) { + throw new InvalidArgumentException(sprintf('Invalid "%s" locale.', $locale)); + } + } + + /** + * Provides the ConfigCache factory implementation, falling back to a + * default implementation if necessary. + */ + private function getConfigCacheFactory(): ConfigCacheFactoryInterface + { + if (!$this->configCacheFactory) { + $this->configCacheFactory = new ConfigCacheFactory($this->debug); + } + + return $this->configCacheFactory; + } + + private function getAllMessages(MessageCatalogueInterface $catalogue): array + { + $allMessages = []; + + foreach ($catalogue->all() as $domain => $messages) { + if ($intlMessages = $catalogue->all($domain.MessageCatalogue::INTL_DOMAIN_SUFFIX)) { + $allMessages[$domain.MessageCatalogue::INTL_DOMAIN_SUFFIX] = $intlMessages; + $messages = array_diff_key($messages, $intlMessages); + } + if ($messages) { + $allMessages[$domain] = $messages; + } + } + + return $allMessages; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/TranslatorBagInterface.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/TranslatorBagInterface.php new file mode 100644 index 0000000..e40ca8a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/TranslatorBagInterface.php @@ -0,0 +1,33 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation; + +use Symfony\Component\Translation\Exception\InvalidArgumentException; + +/** + * TranslatorBagInterface. + * + * @author Abdellatif Ait boudad + */ +interface TranslatorBagInterface +{ + /** + * Gets the catalogue by locale. + * + * @param string|null $locale The locale or null to use the default + * + * @return MessageCatalogueInterface + * + * @throws InvalidArgumentException If the locale contains invalid characters + */ + public function getCatalogue(string $locale = null); +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Util/ArrayConverter.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Util/ArrayConverter.php new file mode 100644 index 0000000..acfbfc3 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Util/ArrayConverter.php @@ -0,0 +1,99 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Util; + +/** + * ArrayConverter generates tree like structure from a message catalogue. + * e.g. this + * 'foo.bar1' => 'test1', + * 'foo.bar2' => 'test2' + * converts to follows: + * foo: + * bar1: test1 + * bar2: test2. + * + * @author Gennady Telegin + */ +class ArrayConverter +{ + /** + * Converts linear messages array to tree-like array. + * For example this array('foo.bar' => 'value') will be converted to ['foo' => ['bar' => 'value']]. + * + * @param array $messages Linear messages array + * + * @return array Tree-like messages array + */ + public static function expandToTree(array $messages) + { + $tree = []; + + foreach ($messages as $id => $value) { + $referenceToElement = &self::getElementByPath($tree, explode('.', $id)); + + $referenceToElement = $value; + + unset($referenceToElement); + } + + return $tree; + } + + private static function &getElementByPath(array &$tree, array $parts) + { + $elem = &$tree; + $parentOfElem = null; + + foreach ($parts as $i => $part) { + if (isset($elem[$part]) && \is_string($elem[$part])) { + /* Process next case: + * 'foo': 'test1', + * 'foo.bar': 'test2' + * + * $tree['foo'] was string before we found array {bar: test2}. + * Treat new element as string too, e.g. add $tree['foo.bar'] = 'test2'; + */ + $elem = &$elem[implode('.', \array_slice($parts, $i))]; + break; + } + $parentOfElem = &$elem; + $elem = &$elem[$part]; + } + + if ($elem && \is_array($elem) && $parentOfElem) { + /* Process next case: + * 'foo.bar': 'test1' + * 'foo': 'test2' + * + * $tree['foo'] was array = {bar: 'test1'} before we found string constant `foo`. + * Cancel treating $tree['foo'] as array and cancel back it expansion, + * e.g. make it $tree['foo.bar'] = 'test1' again. + */ + self::cancelExpand($parentOfElem, $part, $elem); + } + + return $elem; + } + + private static function cancelExpand(array &$tree, string $prefix, array $node) + { + $prefix .= '.'; + + foreach ($node as $id => $value) { + if (\is_string($value)) { + $tree[$prefix.$id] = $value; + } else { + self::cancelExpand($tree, $prefix.$id, $value); + } + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Util/XliffUtils.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Util/XliffUtils.php new file mode 100644 index 0000000..b5ff4ef --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Util/XliffUtils.php @@ -0,0 +1,163 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Util; + +use Symfony\Component\Translation\Exception\InvalidArgumentException; +use Symfony\Component\Translation\Exception\InvalidResourceException; + +/** + * Provides some utility methods for XLIFF translation files, such as validating + * their contents according to the XSD schema. + * + * @author Fabien Potencier + */ +class XliffUtils +{ + /** + * Gets xliff file version based on the root "version" attribute. + * + * Defaults to 1.2 for backwards compatibility. + * + * @throws InvalidArgumentException + */ + public static function getVersionNumber(\DOMDocument $dom): string + { + /** @var \DOMNode $xliff */ + foreach ($dom->getElementsByTagName('xliff') as $xliff) { + $version = $xliff->attributes->getNamedItem('version'); + if ($version) { + return $version->nodeValue; + } + + $namespace = $xliff->attributes->getNamedItem('xmlns'); + if ($namespace) { + if (0 !== substr_compare('urn:oasis:names:tc:xliff:document:', $namespace->nodeValue, 0, 34)) { + throw new InvalidArgumentException(sprintf('Not a valid XLIFF namespace "%s".', $namespace)); + } + + return substr($namespace, 34); + } + } + + // Falls back to v1.2 + return '1.2'; + } + + /** + * Validates and parses the given file into a DOMDocument. + * + * @throws InvalidResourceException + */ + public static function validateSchema(\DOMDocument $dom): array + { + $xliffVersion = static::getVersionNumber($dom); + $internalErrors = libxml_use_internal_errors(true); + $disableEntities = libxml_disable_entity_loader(false); + + $isValid = @$dom->schemaValidateSource(self::getSchema($xliffVersion)); + if (!$isValid) { + libxml_disable_entity_loader($disableEntities); + + return self::getXmlErrors($internalErrors); + } + + libxml_disable_entity_loader($disableEntities); + + $dom->normalizeDocument(); + + libxml_clear_errors(); + libxml_use_internal_errors($internalErrors); + + return []; + } + + public static function getErrorsAsString(array $xmlErrors): string + { + $errorsAsString = ''; + + foreach ($xmlErrors as $error) { + $errorsAsString .= sprintf("[%s %s] %s (in %s - line %d, column %d)\n", + LIBXML_ERR_WARNING === $error['level'] ? 'WARNING' : 'ERROR', + $error['code'], + $error['message'], + $error['file'], + $error['line'], + $error['column'] + ); + } + + return $errorsAsString; + } + + private static function getSchema(string $xliffVersion): string + { + if ('1.2' === $xliffVersion) { + $schemaSource = file_get_contents(__DIR__.'/../Resources/schemas/xliff-core-1.2-strict.xsd'); + $xmlUri = 'http://www.w3.org/2001/xml.xsd'; + } elseif ('2.0' === $xliffVersion) { + $schemaSource = file_get_contents(__DIR__.'/../Resources/schemas/xliff-core-2.0.xsd'); + $xmlUri = 'informativeCopiesOf3rdPartySchemas/w3c/xml.xsd'; + } else { + throw new InvalidArgumentException(sprintf('No support implemented for loading XLIFF version "%s".', $xliffVersion)); + } + + return self::fixXmlLocation($schemaSource, $xmlUri); + } + + /** + * Internally changes the URI of a dependent xsd to be loaded locally. + */ + private static function fixXmlLocation(string $schemaSource, string $xmlUri): string + { + $newPath = str_replace('\\', '/', __DIR__).'/../Resources/schemas/xml.xsd'; + $parts = explode('/', $newPath); + $locationstart = 'file:///'; + if (0 === stripos($newPath, 'phar://')) { + $tmpfile = tempnam(sys_get_temp_dir(), 'symfony'); + if ($tmpfile) { + copy($newPath, $tmpfile); + $parts = explode('/', str_replace('\\', '/', $tmpfile)); + } else { + array_shift($parts); + $locationstart = 'phar:///'; + } + } + + $drive = '\\' === \DIRECTORY_SEPARATOR ? array_shift($parts).'/' : ''; + $newPath = $locationstart.$drive.implode('/', array_map('rawurlencode', $parts)); + + return str_replace($xmlUri, $newPath, $schemaSource); + } + + /** + * Returns the XML errors of the internal XML parser. + */ + private static function getXmlErrors(bool $internalErrors): array + { + $errors = []; + foreach (libxml_get_errors() as $error) { + $errors[] = [ + 'level' => LIBXML_ERR_WARNING == $error->level ? 'WARNING' : 'ERROR', + 'code' => $error->code, + 'message' => trim($error->message), + 'file' => $error->file ?: 'n/a', + 'line' => $error->line, + 'column' => $error->column, + ]; + } + + libxml_clear_errors(); + libxml_use_internal_errors($internalErrors); + + return $errors; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Writer/TranslationWriter.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Writer/TranslationWriter.php new file mode 100644 index 0000000..e0260b7 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Writer/TranslationWriter.php @@ -0,0 +1,72 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Writer; + +use Symfony\Component\Translation\Dumper\DumperInterface; +use Symfony\Component\Translation\Exception\InvalidArgumentException; +use Symfony\Component\Translation\Exception\RuntimeException; +use Symfony\Component\Translation\MessageCatalogue; + +/** + * TranslationWriter writes translation messages. + * + * @author Michel Salib + */ +class TranslationWriter implements TranslationWriterInterface +{ + private $dumpers = []; + + /** + * Adds a dumper to the writer. + * + * @param string $format The format of the dumper + */ + public function addDumper($format, DumperInterface $dumper) + { + $this->dumpers[$format] = $dumper; + } + + /** + * Obtains the list of supported formats. + * + * @return array + */ + public function getFormats() + { + return array_keys($this->dumpers); + } + + /** + * Writes translation from the catalogue according to the selected format. + * + * @param string $format The format to use to dump the messages + * @param array $options Options that are passed to the dumper + * + * @throws InvalidArgumentException + */ + public function write(MessageCatalogue $catalogue, string $format, array $options = []) + { + if (!isset($this->dumpers[$format])) { + throw new InvalidArgumentException(sprintf('There is no dumper associated with format "%s".', $format)); + } + + // get the right dumper + $dumper = $this->dumpers[$format]; + + if (isset($options['path']) && !is_dir($options['path']) && !@mkdir($options['path'], 0777, true) && !is_dir($options['path'])) { + throw new RuntimeException(sprintf('Translation Writer was not able to create directory "%s".', $options['path'])); + } + + // save + $dumper->dump($catalogue, $options); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/Writer/TranslationWriterInterface.php b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Writer/TranslationWriterInterface.php new file mode 100644 index 0000000..4321309 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/Writer/TranslationWriterInterface.php @@ -0,0 +1,33 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Writer; + +use Symfony\Component\Translation\Exception\InvalidArgumentException; +use Symfony\Component\Translation\MessageCatalogue; + +/** + * TranslationWriter writes translation messages. + * + * @author Michel Salib + */ +interface TranslationWriterInterface +{ + /** + * Writes translation from the catalogue according to the selected format. + * + * @param string $format The format to use to dump the messages + * @param array $options Options that are passed to the dumper + * + * @throws InvalidArgumentException + */ + public function write(MessageCatalogue $catalogue, string $format, array $options = []); +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/translation/composer.json b/soc/2020/daily_report/archive/app/vendor/symfony/translation/composer.json new file mode 100644 index 0000000..d38c33a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/translation/composer.json @@ -0,0 +1,61 @@ +{ + "name": "symfony/translation", + "type": "library", + "description": "Symfony Translation Component", + "keywords": [], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": "^7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2" + }, + "require-dev": { + "symfony/config": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/dependency-injection": "^5.0", + "symfony/http-kernel": "^5.0", + "symfony/intl": "^4.4|^5.0", + "symfony/service-contracts": "^1.1.2|^2", + "symfony/yaml": "^4.4|^5.0", + "symfony/finder": "^4.4|^5.0", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/config": "<4.4", + "symfony/dependency-injection": "<5.0", + "symfony/http-kernel": "<5.0", + "symfony/twig-bundle": "<5.0", + "symfony/yaml": "<4.4" + }, + "provide": { + "symfony/translation-implementation": "2.0" + }, + "suggest": { + "symfony/config": "", + "symfony/yaml": "", + "psr/log-implementation": "To use logging capability in translator" + }, + "autoload": { + "psr-4": { "Symfony\\Component\\Translation\\": "" }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/CHANGELOG.md b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/CHANGELOG.md new file mode 100644 index 0000000..94b1c17 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/CHANGELOG.md @@ -0,0 +1,53 @@ +CHANGELOG +========= + +4.4.0 +----- + + * added `VarDumperTestTrait::setUpVarDumper()` and `VarDumperTestTrait::tearDownVarDumper()` + to configure casters & flags to use in tests + * added `ImagineCaster` and infrastructure to dump images + * added the stamps of a message after it is dispatched in `TraceableMessageBus` and `MessengerDataCollector` collected data + * added `UuidCaster` + * made all casters final + * added support for the `NO_COLOR` env var (https://no-color.org/) + +4.3.0 +----- + + * added `DsCaster` to support dumping the contents of data structures from the Ds extension + +4.2.0 +----- + + * support selecting the format to use by setting the environment variable `VAR_DUMPER_FORMAT` to `html` or `cli` + +4.1.0 +----- + + * added a `ServerDumper` to send serialized Data clones to a server + * added a `ServerDumpCommand` and `DumpServer` to run a server collecting + and displaying dumps on a single place with multiple formats support + * added `CliDescriptor` and `HtmlDescriptor` descriptors for `server:dump` CLI and HTML formats support + +4.0.0 +----- + + * support for passing `\ReflectionClass` instances to the `Caster::castObject()` + method has been dropped, pass class names as strings instead + * the `Data::getRawData()` method has been removed + * the `VarDumperTestTrait::assertDumpEquals()` method expects a 3rd `$filter = 0` + argument and moves `$message = ''` argument at 4th position. + * the `VarDumperTestTrait::assertDumpMatchesFormat()` method expects a 3rd `$filter = 0` + argument and moves `$message = ''` argument at 4th position. + +3.4.0 +----- + + * added `AbstractCloner::setMinDepth()` function to ensure minimum tree depth + * deprecated `MongoCaster` + +2.7.0 +----- + + * deprecated `Cloner\Data::getLimitedClone()`. Use `withMaxDepth`, `withMaxItemsPerDepth` or `withRefHandles` instead. diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/AmqpCaster.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/AmqpCaster.php new file mode 100644 index 0000000..883d02b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/AmqpCaster.php @@ -0,0 +1,212 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * Casts Amqp related classes to array representation. + * + * @author Grégoire Pineau + * + * @final + */ +class AmqpCaster +{ + private static $flags = [ + AMQP_DURABLE => 'AMQP_DURABLE', + AMQP_PASSIVE => 'AMQP_PASSIVE', + AMQP_EXCLUSIVE => 'AMQP_EXCLUSIVE', + AMQP_AUTODELETE => 'AMQP_AUTODELETE', + AMQP_INTERNAL => 'AMQP_INTERNAL', + AMQP_NOLOCAL => 'AMQP_NOLOCAL', + AMQP_AUTOACK => 'AMQP_AUTOACK', + AMQP_IFEMPTY => 'AMQP_IFEMPTY', + AMQP_IFUNUSED => 'AMQP_IFUNUSED', + AMQP_MANDATORY => 'AMQP_MANDATORY', + AMQP_IMMEDIATE => 'AMQP_IMMEDIATE', + AMQP_MULTIPLE => 'AMQP_MULTIPLE', + AMQP_NOWAIT => 'AMQP_NOWAIT', + AMQP_REQUEUE => 'AMQP_REQUEUE', + ]; + + private static $exchangeTypes = [ + AMQP_EX_TYPE_DIRECT => 'AMQP_EX_TYPE_DIRECT', + AMQP_EX_TYPE_FANOUT => 'AMQP_EX_TYPE_FANOUT', + AMQP_EX_TYPE_TOPIC => 'AMQP_EX_TYPE_TOPIC', + AMQP_EX_TYPE_HEADERS => 'AMQP_EX_TYPE_HEADERS', + ]; + + public static function castConnection(\AMQPConnection $c, array $a, Stub $stub, bool $isNested) + { + $prefix = Caster::PREFIX_VIRTUAL; + + $a += [ + $prefix.'is_connected' => $c->isConnected(), + ]; + + // Recent version of the extension already expose private properties + if (isset($a["\x00AMQPConnection\x00login"])) { + return $a; + } + + // BC layer in the amqp lib + if (method_exists($c, 'getReadTimeout')) { + $timeout = $c->getReadTimeout(); + } else { + $timeout = $c->getTimeout(); + } + + $a += [ + $prefix.'is_connected' => $c->isConnected(), + $prefix.'login' => $c->getLogin(), + $prefix.'password' => $c->getPassword(), + $prefix.'host' => $c->getHost(), + $prefix.'vhost' => $c->getVhost(), + $prefix.'port' => $c->getPort(), + $prefix.'read_timeout' => $timeout, + ]; + + return $a; + } + + public static function castChannel(\AMQPChannel $c, array $a, Stub $stub, bool $isNested) + { + $prefix = Caster::PREFIX_VIRTUAL; + + $a += [ + $prefix.'is_connected' => $c->isConnected(), + $prefix.'channel_id' => $c->getChannelId(), + ]; + + // Recent version of the extension already expose private properties + if (isset($a["\x00AMQPChannel\x00connection"])) { + return $a; + } + + $a += [ + $prefix.'connection' => $c->getConnection(), + $prefix.'prefetch_size' => $c->getPrefetchSize(), + $prefix.'prefetch_count' => $c->getPrefetchCount(), + ]; + + return $a; + } + + public static function castQueue(\AMQPQueue $c, array $a, Stub $stub, bool $isNested) + { + $prefix = Caster::PREFIX_VIRTUAL; + + $a += [ + $prefix.'flags' => self::extractFlags($c->getFlags()), + ]; + + // Recent version of the extension already expose private properties + if (isset($a["\x00AMQPQueue\x00name"])) { + return $a; + } + + $a += [ + $prefix.'connection' => $c->getConnection(), + $prefix.'channel' => $c->getChannel(), + $prefix.'name' => $c->getName(), + $prefix.'arguments' => $c->getArguments(), + ]; + + return $a; + } + + public static function castExchange(\AMQPExchange $c, array $a, Stub $stub, bool $isNested) + { + $prefix = Caster::PREFIX_VIRTUAL; + + $a += [ + $prefix.'flags' => self::extractFlags($c->getFlags()), + ]; + + $type = isset(self::$exchangeTypes[$c->getType()]) ? new ConstStub(self::$exchangeTypes[$c->getType()], $c->getType()) : $c->getType(); + + // Recent version of the extension already expose private properties + if (isset($a["\x00AMQPExchange\x00name"])) { + $a["\x00AMQPExchange\x00type"] = $type; + + return $a; + } + + $a += [ + $prefix.'connection' => $c->getConnection(), + $prefix.'channel' => $c->getChannel(), + $prefix.'name' => $c->getName(), + $prefix.'type' => $type, + $prefix.'arguments' => $c->getArguments(), + ]; + + return $a; + } + + public static function castEnvelope(\AMQPEnvelope $c, array $a, Stub $stub, bool $isNested, int $filter = 0) + { + $prefix = Caster::PREFIX_VIRTUAL; + + $deliveryMode = new ConstStub($c->getDeliveryMode().(2 === $c->getDeliveryMode() ? ' (persistent)' : ' (non-persistent)'), $c->getDeliveryMode()); + + // Recent version of the extension already expose private properties + if (isset($a["\x00AMQPEnvelope\x00body"])) { + $a["\0AMQPEnvelope\0delivery_mode"] = $deliveryMode; + + return $a; + } + + if (!($filter & Caster::EXCLUDE_VERBOSE)) { + $a += [$prefix.'body' => $c->getBody()]; + } + + $a += [ + $prefix.'delivery_tag' => $c->getDeliveryTag(), + $prefix.'is_redelivery' => $c->isRedelivery(), + $prefix.'exchange_name' => $c->getExchangeName(), + $prefix.'routing_key' => $c->getRoutingKey(), + $prefix.'content_type' => $c->getContentType(), + $prefix.'content_encoding' => $c->getContentEncoding(), + $prefix.'headers' => $c->getHeaders(), + $prefix.'delivery_mode' => $deliveryMode, + $prefix.'priority' => $c->getPriority(), + $prefix.'correlation_id' => $c->getCorrelationId(), + $prefix.'reply_to' => $c->getReplyTo(), + $prefix.'expiration' => $c->getExpiration(), + $prefix.'message_id' => $c->getMessageId(), + $prefix.'timestamp' => $c->getTimeStamp(), + $prefix.'type' => $c->getType(), + $prefix.'user_id' => $c->getUserId(), + $prefix.'app_id' => $c->getAppId(), + ]; + + return $a; + } + + private static function extractFlags(int $flags): ConstStub + { + $flagsArray = []; + + foreach (self::$flags as $value => $name) { + if ($flags & $value) { + $flagsArray[] = $name; + } + } + + if (!$flagsArray) { + $flagsArray = ['AMQP_NOPARAM']; + } + + return new ConstStub(implode('|', $flagsArray), $flags); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ArgsStub.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ArgsStub.php new file mode 100644 index 0000000..591c7e2 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ArgsStub.php @@ -0,0 +1,80 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * Represents a list of function arguments. + * + * @author Nicolas Grekas + */ +class ArgsStub extends EnumStub +{ + private static $parameters = []; + + public function __construct(array $args, string $function, ?string $class) + { + list($variadic, $params) = self::getParameters($function, $class); + + $values = []; + foreach ($args as $k => $v) { + $values[$k] = !is_scalar($v) && !$v instanceof Stub ? new CutStub($v) : $v; + } + if (null === $params) { + parent::__construct($values, false); + + return; + } + if (\count($values) < \count($params)) { + $params = \array_slice($params, 0, \count($values)); + } elseif (\count($values) > \count($params)) { + $values[] = new EnumStub(array_splice($values, \count($params)), false); + $params[] = $variadic; + } + if (['...'] === $params) { + $this->dumpKeys = false; + $this->value = $values[0]->value; + } else { + $this->value = array_combine($params, $values); + } + } + + private static function getParameters(string $function, ?string $class): array + { + if (isset(self::$parameters[$k = $class.'::'.$function])) { + return self::$parameters[$k]; + } + + try { + $r = null !== $class ? new \ReflectionMethod($class, $function) : new \ReflectionFunction($function); + } catch (\ReflectionException $e) { + return [null, null]; + } + + $variadic = '...'; + $params = []; + foreach ($r->getParameters() as $v) { + $k = '$'.$v->name; + if ($v->isPassedByReference()) { + $k = '&'.$k; + } + if ($v->isVariadic()) { + $variadic .= $k; + } else { + $params[] = $k; + } + } + + return self::$parameters[$k] = [$variadic, $params]; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/Caster.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/Caster.php new file mode 100644 index 0000000..5f3550f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/Caster.php @@ -0,0 +1,170 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * Helper for filtering out properties in casters. + * + * @author Nicolas Grekas + * + * @final + */ +class Caster +{ + const EXCLUDE_VERBOSE = 1; + const EXCLUDE_VIRTUAL = 2; + const EXCLUDE_DYNAMIC = 4; + const EXCLUDE_PUBLIC = 8; + const EXCLUDE_PROTECTED = 16; + const EXCLUDE_PRIVATE = 32; + const EXCLUDE_NULL = 64; + const EXCLUDE_EMPTY = 128; + const EXCLUDE_NOT_IMPORTANT = 256; + const EXCLUDE_STRICT = 512; + + const PREFIX_VIRTUAL = "\0~\0"; + const PREFIX_DYNAMIC = "\0+\0"; + const PREFIX_PROTECTED = "\0*\0"; + + /** + * Casts objects to arrays and adds the dynamic property prefix. + * + * @param bool $hasDebugInfo Whether the __debugInfo method exists on $obj or not + * + * @return array The array-cast of the object, with prefixed dynamic properties + */ + public static function castObject(object $obj, string $class, bool $hasDebugInfo = false): array + { + if ($hasDebugInfo) { + try { + $debugInfo = $obj->__debugInfo(); + } catch (\Exception $e) { + // ignore failing __debugInfo() + $hasDebugInfo = false; + } + } + + $a = $obj instanceof \Closure ? [] : (array) $obj; + + if ($obj instanceof \__PHP_Incomplete_Class) { + return $a; + } + + if ($a) { + static $publicProperties = []; + + $i = 0; + $prefixedKeys = []; + foreach ($a as $k => $v) { + if ("\0" !== ($k[0] ?? '')) { + if (!isset($publicProperties[$class])) { + foreach ((new \ReflectionClass($class))->getProperties(\ReflectionProperty::IS_PUBLIC) as $prop) { + $publicProperties[$class][$prop->name] = true; + } + } + if (!isset($publicProperties[$class][$k])) { + $prefixedKeys[$i] = self::PREFIX_DYNAMIC.$k; + } + } elseif (isset($k[16]) && "\0" === $k[16] && 0 === strpos($k, "\0class@anonymous\0")) { + $prefixedKeys[$i] = "\0".get_parent_class($class).'@anonymous'.strrchr($k, "\0"); + } + ++$i; + } + if ($prefixedKeys) { + $keys = array_keys($a); + foreach ($prefixedKeys as $i => $k) { + $keys[$i] = $k; + } + $a = array_combine($keys, $a); + } + } + + if ($hasDebugInfo && \is_array($debugInfo)) { + foreach ($debugInfo as $k => $v) { + if (!isset($k[0]) || "\0" !== $k[0]) { + $k = self::PREFIX_VIRTUAL.$k; + } + + unset($a[$k]); + $a[$k] = $v; + } + } + + return $a; + } + + /** + * Filters out the specified properties. + * + * By default, a single match in the $filter bit field filters properties out, following an "or" logic. + * When EXCLUDE_STRICT is set, an "and" logic is applied: all bits must match for a property to be removed. + * + * @param array $a The array containing the properties to filter + * @param int $filter A bit field of Caster::EXCLUDE_* constants specifying which properties to filter out + * @param string[] $listedProperties List of properties to exclude when Caster::EXCLUDE_VERBOSE is set, and to preserve when Caster::EXCLUDE_NOT_IMPORTANT is set + * @param int &$count Set to the number of removed properties + * + * @return array The filtered array + */ + public static function filter(array $a, int $filter, array $listedProperties = [], ?int &$count = 0): array + { + $count = 0; + + foreach ($a as $k => $v) { + $type = self::EXCLUDE_STRICT & $filter; + + if (null === $v) { + $type |= self::EXCLUDE_NULL & $filter; + $type |= self::EXCLUDE_EMPTY & $filter; + } elseif (false === $v || '' === $v || '0' === $v || 0 === $v || 0.0 === $v || [] === $v) { + $type |= self::EXCLUDE_EMPTY & $filter; + } + if ((self::EXCLUDE_NOT_IMPORTANT & $filter) && !\in_array($k, $listedProperties, true)) { + $type |= self::EXCLUDE_NOT_IMPORTANT; + } + if ((self::EXCLUDE_VERBOSE & $filter) && \in_array($k, $listedProperties, true)) { + $type |= self::EXCLUDE_VERBOSE; + } + + if (!isset($k[1]) || "\0" !== $k[0]) { + $type |= self::EXCLUDE_PUBLIC & $filter; + } elseif ('~' === $k[1]) { + $type |= self::EXCLUDE_VIRTUAL & $filter; + } elseif ('+' === $k[1]) { + $type |= self::EXCLUDE_DYNAMIC & $filter; + } elseif ('*' === $k[1]) { + $type |= self::EXCLUDE_PROTECTED & $filter; + } else { + $type |= self::EXCLUDE_PRIVATE & $filter; + } + + if ((self::EXCLUDE_STRICT & $filter) ? $type === $filter : $type) { + unset($a[$k]); + ++$count; + } + } + + return $a; + } + + public static function castPhpIncompleteClass(\__PHP_Incomplete_Class $c, array $a, Stub $stub, bool $isNested): array + { + if (isset($a['__PHP_Incomplete_Class_Name'])) { + $stub->class .= '('.$a['__PHP_Incomplete_Class_Name'].')'; + unset($a['__PHP_Incomplete_Class_Name']); + } + + return $a; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ClassStub.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ClassStub.php new file mode 100644 index 0000000..c998b49 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ClassStub.php @@ -0,0 +1,106 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * Represents a PHP class identifier. + * + * @author Nicolas Grekas + */ +class ClassStub extends ConstStub +{ + /** + * @param string $identifier A PHP identifier, e.g. a class, method, interface, etc. name + * @param callable $callable The callable targeted by the identifier when it is ambiguous or not a real PHP identifier + */ + public function __construct(string $identifier, $callable = null) + { + $this->value = $identifier; + + try { + if (null !== $callable) { + if ($callable instanceof \Closure) { + $r = new \ReflectionFunction($callable); + } elseif (\is_object($callable)) { + $r = [$callable, '__invoke']; + } elseif (\is_array($callable)) { + $r = $callable; + } elseif (false !== $i = strpos($callable, '::')) { + $r = [substr($callable, 0, $i), substr($callable, 2 + $i)]; + } else { + $r = new \ReflectionFunction($callable); + } + } elseif (0 < $i = strpos($identifier, '::') ?: strpos($identifier, '->')) { + $r = [substr($identifier, 0, $i), substr($identifier, 2 + $i)]; + } else { + $r = new \ReflectionClass($identifier); + } + + if (\is_array($r)) { + try { + $r = new \ReflectionMethod($r[0], $r[1]); + } catch (\ReflectionException $e) { + $r = new \ReflectionClass($r[0]); + } + } + + if (false !== strpos($identifier, "class@anonymous\0")) { + $this->value = $identifier = preg_replace_callback('/class@anonymous\x00.*?\.php(?:0x?|:[0-9]++\$)[0-9a-fA-F]++/', function ($m) { + return class_exists($m[0], false) ? get_parent_class($m[0]).'@anonymous' : $m[0]; + }, $identifier); + } + + if (null !== $callable && $r instanceof \ReflectionFunctionAbstract) { + $s = ReflectionCaster::castFunctionAbstract($r, [], new Stub(), true, Caster::EXCLUDE_VERBOSE); + $s = ReflectionCaster::getSignature($s); + + if ('()' === substr($identifier, -2)) { + $this->value = substr_replace($identifier, $s, -2); + } else { + $this->value .= $s; + } + } + } catch (\ReflectionException $e) { + return; + } finally { + if (0 < $i = strrpos($this->value, '\\')) { + $this->attr['ellipsis'] = \strlen($this->value) - $i; + $this->attr['ellipsis-type'] = 'class'; + $this->attr['ellipsis-tail'] = 1; + } + } + + if ($f = $r->getFileName()) { + $this->attr['file'] = $f; + $this->attr['line'] = $r->getStartLine(); + } + } + + public static function wrapCallable($callable) + { + if (\is_object($callable) || !\is_callable($callable)) { + return $callable; + } + + if (!\is_array($callable)) { + $callable = new static($callable, $callable); + } elseif (\is_string($callable[0])) { + $callable[0] = new static($callable[0], $callable); + } else { + $callable[1] = new static($callable[1], $callable); + } + + return $callable; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ConstStub.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ConstStub.php new file mode 100644 index 0000000..8b01797 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ConstStub.php @@ -0,0 +1,36 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * Represents a PHP constant and its value. + * + * @author Nicolas Grekas + */ +class ConstStub extends Stub +{ + public function __construct(string $name, $value = null) + { + $this->class = $name; + $this->value = 1 < \func_num_args() ? $value : $name; + } + + /** + * @return string + */ + public function __toString() + { + return (string) $this->value; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/CutArrayStub.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/CutArrayStub.php new file mode 100644 index 0000000..0e4fb36 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/CutArrayStub.php @@ -0,0 +1,30 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +/** + * Represents a cut array. + * + * @author Nicolas Grekas + */ +class CutArrayStub extends CutStub +{ + public $preservedSubset; + + public function __construct(array $value, array $preservedKeys) + { + parent::__construct($value); + + $this->preservedSubset = array_intersect_key($value, array_flip($preservedKeys)); + $this->cut -= \count($this->preservedSubset); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/CutStub.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/CutStub.php new file mode 100644 index 0000000..464c6db --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/CutStub.php @@ -0,0 +1,64 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * Represents the main properties of a PHP variable, pre-casted by a caster. + * + * @author Nicolas Grekas + */ +class CutStub extends Stub +{ + public function __construct($value) + { + $this->value = $value; + + switch (\gettype($value)) { + case 'object': + $this->type = self::TYPE_OBJECT; + $this->class = \get_class($value); + + if ($value instanceof \Closure) { + ReflectionCaster::castClosure($value, [], $this, true, Caster::EXCLUDE_VERBOSE); + } + + $this->cut = -1; + break; + + case 'array': + $this->type = self::TYPE_ARRAY; + $this->class = self::ARRAY_ASSOC; + $this->cut = $this->value = \count($value); + break; + + case 'resource': + case 'unknown type': + case 'resource (closed)': + $this->type = self::TYPE_RESOURCE; + $this->handle = (int) $value; + if ('Unknown' === $this->class = @get_resource_type($value)) { + $this->class = 'Closed'; + } + $this->cut = -1; + break; + + case 'string': + $this->type = self::TYPE_STRING; + $this->class = preg_match('//u', $value) ? self::STRING_UTF8 : self::STRING_BINARY; + $this->cut = self::STRING_BINARY === $this->class ? \strlen($value) : mb_strlen($value, 'UTF-8'); + $this->value = ''; + break; + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/DOMCaster.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/DOMCaster.php new file mode 100644 index 0000000..98359ff --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/DOMCaster.php @@ -0,0 +1,304 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * Casts DOM related classes to array representation. + * + * @author Nicolas Grekas + * + * @final + */ +class DOMCaster +{ + private static $errorCodes = [ + DOM_PHP_ERR => 'DOM_PHP_ERR', + DOM_INDEX_SIZE_ERR => 'DOM_INDEX_SIZE_ERR', + DOMSTRING_SIZE_ERR => 'DOMSTRING_SIZE_ERR', + DOM_HIERARCHY_REQUEST_ERR => 'DOM_HIERARCHY_REQUEST_ERR', + DOM_WRONG_DOCUMENT_ERR => 'DOM_WRONG_DOCUMENT_ERR', + DOM_INVALID_CHARACTER_ERR => 'DOM_INVALID_CHARACTER_ERR', + DOM_NO_DATA_ALLOWED_ERR => 'DOM_NO_DATA_ALLOWED_ERR', + DOM_NO_MODIFICATION_ALLOWED_ERR => 'DOM_NO_MODIFICATION_ALLOWED_ERR', + DOM_NOT_FOUND_ERR => 'DOM_NOT_FOUND_ERR', + DOM_NOT_SUPPORTED_ERR => 'DOM_NOT_SUPPORTED_ERR', + DOM_INUSE_ATTRIBUTE_ERR => 'DOM_INUSE_ATTRIBUTE_ERR', + DOM_INVALID_STATE_ERR => 'DOM_INVALID_STATE_ERR', + DOM_SYNTAX_ERR => 'DOM_SYNTAX_ERR', + DOM_INVALID_MODIFICATION_ERR => 'DOM_INVALID_MODIFICATION_ERR', + DOM_NAMESPACE_ERR => 'DOM_NAMESPACE_ERR', + DOM_INVALID_ACCESS_ERR => 'DOM_INVALID_ACCESS_ERR', + DOM_VALIDATION_ERR => 'DOM_VALIDATION_ERR', + ]; + + private static $nodeTypes = [ + XML_ELEMENT_NODE => 'XML_ELEMENT_NODE', + XML_ATTRIBUTE_NODE => 'XML_ATTRIBUTE_NODE', + XML_TEXT_NODE => 'XML_TEXT_NODE', + XML_CDATA_SECTION_NODE => 'XML_CDATA_SECTION_NODE', + XML_ENTITY_REF_NODE => 'XML_ENTITY_REF_NODE', + XML_ENTITY_NODE => 'XML_ENTITY_NODE', + XML_PI_NODE => 'XML_PI_NODE', + XML_COMMENT_NODE => 'XML_COMMENT_NODE', + XML_DOCUMENT_NODE => 'XML_DOCUMENT_NODE', + XML_DOCUMENT_TYPE_NODE => 'XML_DOCUMENT_TYPE_NODE', + XML_DOCUMENT_FRAG_NODE => 'XML_DOCUMENT_FRAG_NODE', + XML_NOTATION_NODE => 'XML_NOTATION_NODE', + XML_HTML_DOCUMENT_NODE => 'XML_HTML_DOCUMENT_NODE', + XML_DTD_NODE => 'XML_DTD_NODE', + XML_ELEMENT_DECL_NODE => 'XML_ELEMENT_DECL_NODE', + XML_ATTRIBUTE_DECL_NODE => 'XML_ATTRIBUTE_DECL_NODE', + XML_ENTITY_DECL_NODE => 'XML_ENTITY_DECL_NODE', + XML_NAMESPACE_DECL_NODE => 'XML_NAMESPACE_DECL_NODE', + ]; + + public static function castException(\DOMException $e, array $a, Stub $stub, bool $isNested) + { + $k = Caster::PREFIX_PROTECTED.'code'; + if (isset($a[$k], self::$errorCodes[$a[$k]])) { + $a[$k] = new ConstStub(self::$errorCodes[$a[$k]], $a[$k]); + } + + return $a; + } + + public static function castLength($dom, array $a, Stub $stub, bool $isNested) + { + $a += [ + 'length' => $dom->length, + ]; + + return $a; + } + + public static function castImplementation($dom, array $a, Stub $stub, bool $isNested) + { + $a += [ + Caster::PREFIX_VIRTUAL.'Core' => '1.0', + Caster::PREFIX_VIRTUAL.'XML' => '2.0', + ]; + + return $a; + } + + public static function castNode(\DOMNode $dom, array $a, Stub $stub, bool $isNested) + { + $a += [ + 'nodeName' => $dom->nodeName, + 'nodeValue' => new CutStub($dom->nodeValue), + 'nodeType' => new ConstStub(self::$nodeTypes[$dom->nodeType], $dom->nodeType), + 'parentNode' => new CutStub($dom->parentNode), + 'childNodes' => $dom->childNodes, + 'firstChild' => new CutStub($dom->firstChild), + 'lastChild' => new CutStub($dom->lastChild), + 'previousSibling' => new CutStub($dom->previousSibling), + 'nextSibling' => new CutStub($dom->nextSibling), + 'attributes' => $dom->attributes, + 'ownerDocument' => new CutStub($dom->ownerDocument), + 'namespaceURI' => $dom->namespaceURI, + 'prefix' => $dom->prefix, + 'localName' => $dom->localName, + 'baseURI' => $dom->baseURI ? new LinkStub($dom->baseURI) : $dom->baseURI, + 'textContent' => new CutStub($dom->textContent), + ]; + + return $a; + } + + public static function castNameSpaceNode(\DOMNameSpaceNode $dom, array $a, Stub $stub, bool $isNested) + { + $a += [ + 'nodeName' => $dom->nodeName, + 'nodeValue' => new CutStub($dom->nodeValue), + 'nodeType' => new ConstStub(self::$nodeTypes[$dom->nodeType], $dom->nodeType), + 'prefix' => $dom->prefix, + 'localName' => $dom->localName, + 'namespaceURI' => $dom->namespaceURI, + 'ownerDocument' => new CutStub($dom->ownerDocument), + 'parentNode' => new CutStub($dom->parentNode), + ]; + + return $a; + } + + public static function castDocument(\DOMDocument $dom, array $a, Stub $stub, bool $isNested, int $filter = 0) + { + $a += [ + 'doctype' => $dom->doctype, + 'implementation' => $dom->implementation, + 'documentElement' => new CutStub($dom->documentElement), + 'actualEncoding' => $dom->actualEncoding, + 'encoding' => $dom->encoding, + 'xmlEncoding' => $dom->xmlEncoding, + 'standalone' => $dom->standalone, + 'xmlStandalone' => $dom->xmlStandalone, + 'version' => $dom->version, + 'xmlVersion' => $dom->xmlVersion, + 'strictErrorChecking' => $dom->strictErrorChecking, + 'documentURI' => $dom->documentURI ? new LinkStub($dom->documentURI) : $dom->documentURI, + 'config' => $dom->config, + 'formatOutput' => $dom->formatOutput, + 'validateOnParse' => $dom->validateOnParse, + 'resolveExternals' => $dom->resolveExternals, + 'preserveWhiteSpace' => $dom->preserveWhiteSpace, + 'recover' => $dom->recover, + 'substituteEntities' => $dom->substituteEntities, + ]; + + if (!($filter & Caster::EXCLUDE_VERBOSE)) { + $formatOutput = $dom->formatOutput; + $dom->formatOutput = true; + $a += [Caster::PREFIX_VIRTUAL.'xml' => $dom->saveXML()]; + $dom->formatOutput = $formatOutput; + } + + return $a; + } + + public static function castCharacterData(\DOMCharacterData $dom, array $a, Stub $stub, bool $isNested) + { + $a += [ + 'data' => $dom->data, + 'length' => $dom->length, + ]; + + return $a; + } + + public static function castAttr(\DOMAttr $dom, array $a, Stub $stub, bool $isNested) + { + $a += [ + 'name' => $dom->name, + 'specified' => $dom->specified, + 'value' => $dom->value, + 'ownerElement' => $dom->ownerElement, + 'schemaTypeInfo' => $dom->schemaTypeInfo, + ]; + + return $a; + } + + public static function castElement(\DOMElement $dom, array $a, Stub $stub, bool $isNested) + { + $a += [ + 'tagName' => $dom->tagName, + 'schemaTypeInfo' => $dom->schemaTypeInfo, + ]; + + return $a; + } + + public static function castText(\DOMText $dom, array $a, Stub $stub, bool $isNested) + { + $a += [ + 'wholeText' => $dom->wholeText, + ]; + + return $a; + } + + public static function castTypeinfo(\DOMTypeinfo $dom, array $a, Stub $stub, bool $isNested) + { + $a += [ + 'typeName' => $dom->typeName, + 'typeNamespace' => $dom->typeNamespace, + ]; + + return $a; + } + + public static function castDomError(\DOMDomError $dom, array $a, Stub $stub, bool $isNested) + { + $a += [ + 'severity' => $dom->severity, + 'message' => $dom->message, + 'type' => $dom->type, + 'relatedException' => $dom->relatedException, + 'related_data' => $dom->related_data, + 'location' => $dom->location, + ]; + + return $a; + } + + public static function castLocator(\DOMLocator $dom, array $a, Stub $stub, bool $isNested) + { + $a += [ + 'lineNumber' => $dom->lineNumber, + 'columnNumber' => $dom->columnNumber, + 'offset' => $dom->offset, + 'relatedNode' => $dom->relatedNode, + 'uri' => $dom->uri ? new LinkStub($dom->uri, $dom->lineNumber) : $dom->uri, + ]; + + return $a; + } + + public static function castDocumentType(\DOMDocumentType $dom, array $a, Stub $stub, bool $isNested) + { + $a += [ + 'name' => $dom->name, + 'entities' => $dom->entities, + 'notations' => $dom->notations, + 'publicId' => $dom->publicId, + 'systemId' => $dom->systemId, + 'internalSubset' => $dom->internalSubset, + ]; + + return $a; + } + + public static function castNotation(\DOMNotation $dom, array $a, Stub $stub, bool $isNested) + { + $a += [ + 'publicId' => $dom->publicId, + 'systemId' => $dom->systemId, + ]; + + return $a; + } + + public static function castEntity(\DOMEntity $dom, array $a, Stub $stub, bool $isNested) + { + $a += [ + 'publicId' => $dom->publicId, + 'systemId' => $dom->systemId, + 'notationName' => $dom->notationName, + 'actualEncoding' => $dom->actualEncoding, + 'encoding' => $dom->encoding, + 'version' => $dom->version, + ]; + + return $a; + } + + public static function castProcessingInstruction(\DOMProcessingInstruction $dom, array $a, Stub $stub, bool $isNested) + { + $a += [ + 'target' => $dom->target, + 'data' => $dom->data, + ]; + + return $a; + } + + public static function castXPath(\DOMXPath $dom, array $a, Stub $stub, bool $isNested) + { + $a += [ + 'document' => $dom->document, + ]; + + return $a; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/DateCaster.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/DateCaster.php new file mode 100644 index 0000000..e3708b7 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/DateCaster.php @@ -0,0 +1,126 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * Casts DateTimeInterface related classes to array representation. + * + * @author Dany Maillard + * + * @final + */ +class DateCaster +{ + private const PERIOD_LIMIT = 3; + + public static function castDateTime(\DateTimeInterface $d, array $a, Stub $stub, bool $isNested, int $filter) + { + $prefix = Caster::PREFIX_VIRTUAL; + $location = $d->getTimezone()->getLocation(); + $fromNow = (new \DateTime())->diff($d); + + $title = $d->format('l, F j, Y') + ."\n".self::formatInterval($fromNow).' from now' + .($location ? ($d->format('I') ? "\nDST On" : "\nDST Off") : '') + ; + + unset( + $a[Caster::PREFIX_DYNAMIC.'date'], + $a[Caster::PREFIX_DYNAMIC.'timezone'], + $a[Caster::PREFIX_DYNAMIC.'timezone_type'] + ); + $a[$prefix.'date'] = new ConstStub(self::formatDateTime($d, $location ? ' e (P)' : ' P'), $title); + + $stub->class .= $d->format(' @U'); + + return $a; + } + + public static function castInterval(\DateInterval $interval, array $a, Stub $stub, bool $isNested, int $filter) + { + $now = new \DateTimeImmutable(); + $numberOfSeconds = $now->add($interval)->getTimestamp() - $now->getTimestamp(); + $title = number_format($numberOfSeconds, 0, '.', ' ').'s'; + + $i = [Caster::PREFIX_VIRTUAL.'interval' => new ConstStub(self::formatInterval($interval), $title)]; + + return $filter & Caster::EXCLUDE_VERBOSE ? $i : $i + $a; + } + + private static function formatInterval(\DateInterval $i): string + { + $format = '%R '; + + if (0 === $i->y && 0 === $i->m && ($i->h >= 24 || $i->i >= 60 || $i->s >= 60)) { + $i = date_diff($d = new \DateTime(), date_add(clone $d, $i)); // recalculate carry over points + $format .= 0 < $i->days ? '%ad ' : ''; + } else { + $format .= ($i->y ? '%yy ' : '').($i->m ? '%mm ' : '').($i->d ? '%dd ' : ''); + } + + $format .= $i->h || $i->i || $i->s || $i->f ? '%H:%I:'.self::formatSeconds($i->s, substr($i->f, 2)) : ''; + $format = '%R ' === $format ? '0s' : $format; + + return $i->format(rtrim($format)); + } + + public static function castTimeZone(\DateTimeZone $timeZone, array $a, Stub $stub, bool $isNested, int $filter) + { + $location = $timeZone->getLocation(); + $formatted = (new \DateTime('now', $timeZone))->format($location ? 'e (P)' : 'P'); + $title = $location && \extension_loaded('intl') ? \Locale::getDisplayRegion('-'.$location['country_code']) : ''; + + $z = [Caster::PREFIX_VIRTUAL.'timezone' => new ConstStub($formatted, $title)]; + + return $filter & Caster::EXCLUDE_VERBOSE ? $z : $z + $a; + } + + public static function castPeriod(\DatePeriod $p, array $a, Stub $stub, bool $isNested, int $filter) + { + $dates = []; + foreach (clone $p as $i => $d) { + if (self::PERIOD_LIMIT === $i) { + $now = new \DateTimeImmutable(); + $dates[] = sprintf('%s more', ($end = $p->getEndDate()) + ? ceil(($end->format('U.u') - $d->format('U.u')) / ((int) $now->add($p->getDateInterval())->format('U.u') - (int) $now->format('U.u'))) + : $p->recurrences - $i + ); + break; + } + $dates[] = sprintf('%s) %s', $i + 1, self::formatDateTime($d)); + } + + $period = sprintf( + 'every %s, from %s (%s) %s', + self::formatInterval($p->getDateInterval()), + self::formatDateTime($p->getStartDate()), + $p->include_start_date ? 'included' : 'excluded', + ($end = $p->getEndDate()) ? 'to '.self::formatDateTime($end) : 'recurring '.$p->recurrences.' time/s' + ); + + $p = [Caster::PREFIX_VIRTUAL.'period' => new ConstStub($period, implode("\n", $dates))]; + + return $filter & Caster::EXCLUDE_VERBOSE ? $p : $p + $a; + } + + private static function formatDateTime(\DateTimeInterface $d, string $extra = ''): string + { + return $d->format('Y-m-d H:i:'.self::formatSeconds($d->format('s'), $d->format('u')).$extra); + } + + private static function formatSeconds(string $s, string $us): string + { + return sprintf('%02d.%s', $s, 0 === ($len = \strlen($t = rtrim($us, '0'))) ? '0' : ($len <= 3 ? str_pad($t, 3, '0') : $us)); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/DoctrineCaster.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/DoctrineCaster.php new file mode 100644 index 0000000..129b2cb --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/DoctrineCaster.php @@ -0,0 +1,62 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use Doctrine\Common\Proxy\Proxy as CommonProxy; +use Doctrine\ORM\PersistentCollection; +use Doctrine\ORM\Proxy\Proxy as OrmProxy; +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * Casts Doctrine related classes to array representation. + * + * @author Nicolas Grekas + * + * @final + */ +class DoctrineCaster +{ + public static function castCommonProxy(CommonProxy $proxy, array $a, Stub $stub, bool $isNested) + { + foreach (['__cloner__', '__initializer__'] as $k) { + if (\array_key_exists($k, $a)) { + unset($a[$k]); + ++$stub->cut; + } + } + + return $a; + } + + public static function castOrmProxy(OrmProxy $proxy, array $a, Stub $stub, bool $isNested) + { + foreach (['_entityPersister', '_identifier'] as $k) { + if (\array_key_exists($k = "\0Doctrine\\ORM\\Proxy\\Proxy\0".$k, $a)) { + unset($a[$k]); + ++$stub->cut; + } + } + + return $a; + } + + public static function castPersistentCollection(PersistentCollection $coll, array $a, Stub $stub, bool $isNested) + { + foreach (['snapshot', 'association', 'typeClass'] as $k) { + if (\array_key_exists($k = "\0Doctrine\\ORM\\PersistentCollection\0".$k, $a)) { + $a[$k] = new CutStub($a[$k]); + } + } + + return $a; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/DsCaster.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/DsCaster.php new file mode 100644 index 0000000..b34b670 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/DsCaster.php @@ -0,0 +1,70 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use Ds\Collection; +use Ds\Map; +use Ds\Pair; +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * Casts Ds extension classes to array representation. + * + * @author Jáchym Toušek + * + * @final + */ +class DsCaster +{ + public static function castCollection(Collection $c, array $a, Stub $stub, bool $isNested): array + { + $a[Caster::PREFIX_VIRTUAL.'count'] = $c->count(); + $a[Caster::PREFIX_VIRTUAL.'capacity'] = $c->capacity(); + + if (!$c instanceof Map) { + $a += $c->toArray(); + } + + return $a; + } + + public static function castMap(Map $c, array $a, Stub $stub, bool $isNested): array + { + foreach ($c as $k => $v) { + $a[] = new DsPairStub($k, $v); + } + + return $a; + } + + public static function castPair(Pair $c, array $a, Stub $stub, bool $isNested): array + { + foreach ($c->toArray() as $k => $v) { + $a[Caster::PREFIX_VIRTUAL.$k] = $v; + } + + return $a; + } + + public static function castPairStub(DsPairStub $c, array $a, Stub $stub, bool $isNested): array + { + if ($isNested) { + $stub->class = Pair::class; + $stub->value = null; + $stub->handle = 0; + + $a = $c->value; + } + + return $a; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/DsPairStub.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/DsPairStub.php new file mode 100644 index 0000000..a1dcc15 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/DsPairStub.php @@ -0,0 +1,28 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * @author Nicolas Grekas + */ +class DsPairStub extends Stub +{ + public function __construct($key, $value) + { + $this->value = [ + Caster::PREFIX_VIRTUAL.'key' => $key, + Caster::PREFIX_VIRTUAL.'value' => $value, + ]; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/EnumStub.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/EnumStub.php new file mode 100644 index 0000000..7a4e98a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/EnumStub.php @@ -0,0 +1,30 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * Represents an enumeration of values. + * + * @author Nicolas Grekas + */ +class EnumStub extends Stub +{ + public $dumpKeys = true; + + public function __construct(array $values, bool $dumpKeys = true) + { + $this->value = $values; + $this->dumpKeys = $dumpKeys; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ExceptionCaster.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ExceptionCaster.php new file mode 100644 index 0000000..9229bdd --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ExceptionCaster.php @@ -0,0 +1,383 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use Symfony\Component\ErrorHandler\Exception\SilencedErrorContext; +use Symfony\Component\VarDumper\Cloner\Stub; +use Symfony\Component\VarDumper\Exception\ThrowingCasterException; + +/** + * Casts common Exception classes to array representation. + * + * @author Nicolas Grekas + * + * @final + */ +class ExceptionCaster +{ + public static $srcContext = 1; + public static $traceArgs = true; + public static $errorTypes = [ + E_DEPRECATED => 'E_DEPRECATED', + E_USER_DEPRECATED => 'E_USER_DEPRECATED', + E_RECOVERABLE_ERROR => 'E_RECOVERABLE_ERROR', + E_ERROR => 'E_ERROR', + E_WARNING => 'E_WARNING', + E_PARSE => 'E_PARSE', + E_NOTICE => 'E_NOTICE', + E_CORE_ERROR => 'E_CORE_ERROR', + E_CORE_WARNING => 'E_CORE_WARNING', + E_COMPILE_ERROR => 'E_COMPILE_ERROR', + E_COMPILE_WARNING => 'E_COMPILE_WARNING', + E_USER_ERROR => 'E_USER_ERROR', + E_USER_WARNING => 'E_USER_WARNING', + E_USER_NOTICE => 'E_USER_NOTICE', + E_STRICT => 'E_STRICT', + ]; + + private static $framesCache = []; + + public static function castError(\Error $e, array $a, Stub $stub, bool $isNested, int $filter = 0) + { + return self::filterExceptionArray($stub->class, $a, "\0Error\0", $filter); + } + + public static function castException(\Exception $e, array $a, Stub $stub, bool $isNested, int $filter = 0) + { + return self::filterExceptionArray($stub->class, $a, "\0Exception\0", $filter); + } + + public static function castErrorException(\ErrorException $e, array $a, Stub $stub, bool $isNested) + { + if (isset($a[$s = Caster::PREFIX_PROTECTED.'severity'], self::$errorTypes[$a[$s]])) { + $a[$s] = new ConstStub(self::$errorTypes[$a[$s]], $a[$s]); + } + + return $a; + } + + public static function castThrowingCasterException(ThrowingCasterException $e, array $a, Stub $stub, bool $isNested) + { + $trace = Caster::PREFIX_VIRTUAL.'trace'; + $prefix = Caster::PREFIX_PROTECTED; + $xPrefix = "\0Exception\0"; + + if (isset($a[$xPrefix.'previous'], $a[$trace]) && $a[$xPrefix.'previous'] instanceof \Exception) { + $b = (array) $a[$xPrefix.'previous']; + $class = \get_class($a[$xPrefix.'previous']); + $class = 'c' === $class[0] && 0 === strpos($class, "class@anonymous\0") ? get_parent_class($class).'@anonymous' : $class; + self::traceUnshift($b[$xPrefix.'trace'], $class, $b[$prefix.'file'], $b[$prefix.'line']); + $a[$trace] = new TraceStub($b[$xPrefix.'trace'], false, 0, -\count($a[$trace]->value)); + } + + unset($a[$xPrefix.'previous'], $a[$prefix.'code'], $a[$prefix.'file'], $a[$prefix.'line']); + + return $a; + } + + public static function castSilencedErrorContext(SilencedErrorContext $e, array $a, Stub $stub, bool $isNested) + { + $sPrefix = "\0".SilencedErrorContext::class."\0"; + + if (!isset($a[$s = $sPrefix.'severity'])) { + return $a; + } + + if (isset(self::$errorTypes[$a[$s]])) { + $a[$s] = new ConstStub(self::$errorTypes[$a[$s]], $a[$s]); + } + + $trace = [[ + 'file' => $a[$sPrefix.'file'], + 'line' => $a[$sPrefix.'line'], + ]]; + + if (isset($a[$sPrefix.'trace'])) { + $trace = array_merge($trace, $a[$sPrefix.'trace']); + } + + unset($a[$sPrefix.'file'], $a[$sPrefix.'line'], $a[$sPrefix.'trace']); + $a[Caster::PREFIX_VIRTUAL.'trace'] = new TraceStub($trace, self::$traceArgs); + + return $a; + } + + public static function castTraceStub(TraceStub $trace, array $a, Stub $stub, bool $isNested) + { + if (!$isNested) { + return $a; + } + $stub->class = ''; + $stub->handle = 0; + $frames = $trace->value; + $prefix = Caster::PREFIX_VIRTUAL; + + $a = []; + $j = \count($frames); + if (0 > $i = $trace->sliceOffset) { + $i = max(0, $j + $i); + } + if (!isset($trace->value[$i])) { + return []; + } + $lastCall = isset($frames[$i]['function']) ? (isset($frames[$i]['class']) ? $frames[0]['class'].$frames[$i]['type'] : '').$frames[$i]['function'].'()' : ''; + $frames[] = ['function' => '']; + $collapse = false; + + for ($j += $trace->numberingOffset - $i++; isset($frames[$i]); ++$i, --$j) { + $f = $frames[$i]; + $call = isset($f['function']) ? (isset($f['class']) ? $f['class'].$f['type'] : '').$f['function'] : '???'; + + $frame = new FrameStub( + [ + 'object' => isset($f['object']) ? $f['object'] : null, + 'class' => isset($f['class']) ? $f['class'] : null, + 'type' => isset($f['type']) ? $f['type'] : null, + 'function' => isset($f['function']) ? $f['function'] : null, + ] + $frames[$i - 1], + false, + true + ); + $f = self::castFrameStub($frame, [], $frame, true); + if (isset($f[$prefix.'src'])) { + foreach ($f[$prefix.'src']->value as $label => $frame) { + if (0 === strpos($label, "\0~collapse=0")) { + if ($collapse) { + $label = substr_replace($label, '1', 11, 1); + } else { + $collapse = true; + } + } + $label = substr_replace($label, "title=Stack level $j.&", 2, 0); + } + $f = $frames[$i - 1]; + if ($trace->keepArgs && !empty($f['args']) && $frame instanceof EnumStub) { + $frame->value['arguments'] = new ArgsStub($f['args'], isset($f['function']) ? $f['function'] : null, isset($f['class']) ? $f['class'] : null); + } + } elseif ('???' !== $lastCall) { + $label = new ClassStub($lastCall); + if (isset($label->attr['ellipsis'])) { + $label->attr['ellipsis'] += 2; + $label = substr_replace($prefix, "ellipsis-type=class&ellipsis={$label->attr['ellipsis']}&ellipsis-tail=1&title=Stack level $j.", 2, 0).$label->value.'()'; + } else { + $label = substr_replace($prefix, "title=Stack level $j.", 2, 0).$label->value.'()'; + } + } else { + $label = substr_replace($prefix, "title=Stack level $j.", 2, 0).$lastCall; + } + $a[substr_replace($label, sprintf('separator=%s&', $frame instanceof EnumStub ? ' ' : ':'), 2, 0)] = $frame; + + $lastCall = $call; + } + if (null !== $trace->sliceLength) { + $a = \array_slice($a, 0, $trace->sliceLength, true); + } + + return $a; + } + + public static function castFrameStub(FrameStub $frame, array $a, Stub $stub, bool $isNested) + { + if (!$isNested) { + return $a; + } + $f = $frame->value; + $prefix = Caster::PREFIX_VIRTUAL; + + if (isset($f['file'], $f['line'])) { + $cacheKey = $f; + unset($cacheKey['object'], $cacheKey['args']); + $cacheKey[] = self::$srcContext; + $cacheKey = implode('-', $cacheKey); + + if (isset(self::$framesCache[$cacheKey])) { + $a[$prefix.'src'] = self::$framesCache[$cacheKey]; + } else { + if (preg_match('/\((\d+)\)(?:\([\da-f]{32}\))? : (?:eval\(\)\'d code|runtime-created function)$/', $f['file'], $match)) { + $f['file'] = substr($f['file'], 0, -\strlen($match[0])); + $f['line'] = (int) $match[1]; + } + $src = $f['line']; + $srcKey = $f['file']; + $ellipsis = new LinkStub($srcKey, 0); + $srcAttr = 'collapse='.(int) $ellipsis->inVendor; + $ellipsisTail = isset($ellipsis->attr['ellipsis-tail']) ? $ellipsis->attr['ellipsis-tail'] : 0; + $ellipsis = isset($ellipsis->attr['ellipsis']) ? $ellipsis->attr['ellipsis'] : 0; + + if (file_exists($f['file']) && 0 <= self::$srcContext) { + if (!empty($f['class']) && (is_subclass_of($f['class'], 'Twig\Template') || is_subclass_of($f['class'], 'Twig_Template')) && method_exists($f['class'], 'getDebugInfo')) { + $template = isset($f['object']) ? $f['object'] : unserialize(sprintf('O:%d:"%s":0:{}', \strlen($f['class']), $f['class'])); + + $ellipsis = 0; + $templateSrc = method_exists($template, 'getSourceContext') ? $template->getSourceContext()->getCode() : (method_exists($template, 'getSource') ? $template->getSource() : ''); + $templateInfo = $template->getDebugInfo(); + if (isset($templateInfo[$f['line']])) { + if (!method_exists($template, 'getSourceContext') || !file_exists($templatePath = $template->getSourceContext()->getPath())) { + $templatePath = null; + } + if ($templateSrc) { + $src = self::extractSource($templateSrc, $templateInfo[$f['line']], self::$srcContext, 'twig', $templatePath, $f); + $srcKey = ($templatePath ?: $template->getTemplateName()).':'.$templateInfo[$f['line']]; + } + } + } + if ($srcKey == $f['file']) { + $src = self::extractSource(file_get_contents($f['file']), $f['line'], self::$srcContext, 'php', $f['file'], $f); + $srcKey .= ':'.$f['line']; + if ($ellipsis) { + $ellipsis += 1 + \strlen($f['line']); + } + } + $srcAttr .= sprintf('&separator= &file=%s&line=%d', rawurlencode($f['file']), $f['line']); + } else { + $srcAttr .= '&separator=:'; + } + $srcAttr .= $ellipsis ? '&ellipsis-type=path&ellipsis='.$ellipsis.'&ellipsis-tail='.$ellipsisTail : ''; + self::$framesCache[$cacheKey] = $a[$prefix.'src'] = new EnumStub(["\0~$srcAttr\0$srcKey" => $src]); + } + } + + unset($a[$prefix.'args'], $a[$prefix.'line'], $a[$prefix.'file']); + if ($frame->inTraceStub) { + unset($a[$prefix.'class'], $a[$prefix.'type'], $a[$prefix.'function']); + } + foreach ($a as $k => $v) { + if (!$v) { + unset($a[$k]); + } + } + if ($frame->keepArgs && !empty($f['args'])) { + $a[$prefix.'arguments'] = new ArgsStub($f['args'], $f['function'], $f['class']); + } + + return $a; + } + + private static function filterExceptionArray(string $xClass, array $a, string $xPrefix, int $filter): array + { + if (isset($a[$xPrefix.'trace'])) { + $trace = $a[$xPrefix.'trace']; + unset($a[$xPrefix.'trace']); // Ensures the trace is always last + } else { + $trace = []; + } + + if (!($filter & Caster::EXCLUDE_VERBOSE) && $trace) { + if (isset($a[Caster::PREFIX_PROTECTED.'file'], $a[Caster::PREFIX_PROTECTED.'line'])) { + self::traceUnshift($trace, $xClass, $a[Caster::PREFIX_PROTECTED.'file'], $a[Caster::PREFIX_PROTECTED.'line']); + } + $a[Caster::PREFIX_VIRTUAL.'trace'] = new TraceStub($trace, self::$traceArgs); + } + if (empty($a[$xPrefix.'previous'])) { + unset($a[$xPrefix.'previous']); + } + unset($a[$xPrefix.'string'], $a[Caster::PREFIX_DYNAMIC.'xdebug_message'], $a[Caster::PREFIX_DYNAMIC.'__destructorException']); + + if (isset($a[Caster::PREFIX_PROTECTED.'message']) && false !== strpos($a[Caster::PREFIX_PROTECTED.'message'], "class@anonymous\0")) { + $a[Caster::PREFIX_PROTECTED.'message'] = preg_replace_callback('/class@anonymous\x00.*?\.php(?:0x?|:[0-9]++\$)[0-9a-fA-F]++/', function ($m) { + return class_exists($m[0], false) ? get_parent_class($m[0]).'@anonymous' : $m[0]; + }, $a[Caster::PREFIX_PROTECTED.'message']); + } + + if (isset($a[Caster::PREFIX_PROTECTED.'file'], $a[Caster::PREFIX_PROTECTED.'line'])) { + $a[Caster::PREFIX_PROTECTED.'file'] = new LinkStub($a[Caster::PREFIX_PROTECTED.'file'], $a[Caster::PREFIX_PROTECTED.'line']); + } + + return $a; + } + + private static function traceUnshift(array &$trace, ?string $class, string $file, int $line): void + { + if (isset($trace[0]['file'], $trace[0]['line']) && $trace[0]['file'] === $file && $trace[0]['line'] === $line) { + return; + } + array_unshift($trace, [ + 'function' => $class ? 'new '.$class : null, + 'file' => $file, + 'line' => $line, + ]); + } + + private static function extractSource(string $srcLines, int $line, int $srcContext, string $lang, ?string $file, array $frame): EnumStub + { + $srcLines = explode("\n", $srcLines); + $src = []; + + for ($i = $line - 1 - $srcContext; $i <= $line - 1 + $srcContext; ++$i) { + $src[] = (isset($srcLines[$i]) ? $srcLines[$i] : '')."\n"; + } + + if ($frame['function'] ?? false) { + $stub = new CutStub(new \stdClass()); + $stub->class = (isset($frame['class']) ? $frame['class'].$frame['type'] : '').$frame['function']; + $stub->type = Stub::TYPE_OBJECT; + $stub->attr['cut_hash'] = true; + $stub->attr['file'] = $frame['file']; + $stub->attr['line'] = $frame['line']; + + try { + $caller = isset($frame['class']) ? new \ReflectionMethod($frame['class'], $frame['function']) : new \ReflectionFunction($frame['function']); + $stub->class .= ReflectionCaster::getSignature(ReflectionCaster::castFunctionAbstract($caller, [], $stub, true, Caster::EXCLUDE_VERBOSE)); + + if ($f = $caller->getFileName()) { + $stub->attr['file'] = $f; + $stub->attr['line'] = $caller->getStartLine(); + } + } catch (\ReflectionException $e) { + // ignore fake class/function + } + + $srcLines = ["\0~separator=\0" => $stub]; + } else { + $stub = null; + $srcLines = []; + } + + $ltrim = 0; + do { + $pad = null; + for ($i = $srcContext << 1; $i >= 0; --$i) { + if (isset($src[$i][$ltrim]) && "\r" !== ($c = $src[$i][$ltrim]) && "\n" !== $c) { + if (null === $pad) { + $pad = $c; + } + if ((' ' !== $c && "\t" !== $c) || $pad !== $c) { + break; + } + } + } + ++$ltrim; + } while (0 > $i && null !== $pad); + + --$ltrim; + + foreach ($src as $i => $c) { + if ($ltrim) { + $c = isset($c[$ltrim]) && "\r" !== $c[$ltrim] ? substr($c, $ltrim) : ltrim($c, " \t"); + } + $c = substr($c, 0, -1); + if ($i !== $srcContext) { + $c = new ConstStub('default', $c); + } else { + $c = new ConstStub($c, $stub ? 'in '.$stub->class : ''); + if (null !== $file) { + $c->attr['file'] = $file; + $c->attr['line'] = $line; + } + } + $c->attr['lang'] = $lang; + $srcLines[sprintf("\0~separator=› &%d\0", $i + $line - $srcContext)] = $c; + } + + return new EnumStub($srcLines); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/FrameStub.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/FrameStub.php new file mode 100644 index 0000000..8786755 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/FrameStub.php @@ -0,0 +1,30 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +/** + * Represents a single backtrace frame as returned by debug_backtrace() or Exception->getTrace(). + * + * @author Nicolas Grekas + */ +class FrameStub extends EnumStub +{ + public $keepArgs; + public $inTraceStub; + + public function __construct(array $frame, bool $keepArgs = true, bool $inTraceStub = false) + { + $this->value = $frame; + $this->keepArgs = $keepArgs; + $this->inTraceStub = $inTraceStub; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/GmpCaster.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/GmpCaster.php new file mode 100644 index 0000000..b018cc7 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/GmpCaster.php @@ -0,0 +1,32 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * Casts GMP objects to array representation. + * + * @author Hamza Amrouche + * @author Nicolas Grekas + * + * @final + */ +class GmpCaster +{ + public static function castGmp(\GMP $gmp, array $a, Stub $stub, bool $isNested, int $filter): array + { + $a[Caster::PREFIX_VIRTUAL.'value'] = new ConstStub(gmp_strval($gmp), gmp_strval($gmp)); + + return $a; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ImagineCaster.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ImagineCaster.php new file mode 100644 index 0000000..d1289da --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ImagineCaster.php @@ -0,0 +1,37 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use Imagine\Image\ImageInterface; +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * @author Grégoire Pineau + */ +final class ImagineCaster +{ + public static function castImage(ImageInterface $c, array $a, Stub $stub, bool $isNested): array + { + $imgData = $c->get('png'); + if (\strlen($imgData) > 1 * 1000 * 1000) { + $a += [ + Caster::PREFIX_VIRTUAL.'image' => new ConstStub($c->getSize()), + ]; + } else { + $a += [ + Caster::PREFIX_VIRTUAL.'image' => new ImgStub($imgData, 'image/png', $c->getSize()), + ]; + } + + return $a; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ImgStub.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ImgStub.php new file mode 100644 index 0000000..05789fe --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ImgStub.php @@ -0,0 +1,26 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +/** + * @author Grégoire Pineau + */ +class ImgStub extends ConstStub +{ + public function __construct(string $data, string $contentType, string $size) + { + $this->value = ''; + $this->attr['img-data'] = $data; + $this->attr['img-size'] = $size; + $this->attr['content-type'] = $contentType; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/IntlCaster.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/IntlCaster.php new file mode 100644 index 0000000..23b9d5d --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/IntlCaster.php @@ -0,0 +1,172 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * @author Nicolas Grekas + * @author Jan Schädlich + * + * @final + */ +class IntlCaster +{ + public static function castMessageFormatter(\MessageFormatter $c, array $a, Stub $stub, bool $isNested) + { + $a += [ + Caster::PREFIX_VIRTUAL.'locale' => $c->getLocale(), + Caster::PREFIX_VIRTUAL.'pattern' => $c->getPattern(), + ]; + + return self::castError($c, $a); + } + + public static function castNumberFormatter(\NumberFormatter $c, array $a, Stub $stub, bool $isNested, int $filter = 0) + { + $a += [ + Caster::PREFIX_VIRTUAL.'locale' => $c->getLocale(), + Caster::PREFIX_VIRTUAL.'pattern' => $c->getPattern(), + ]; + + if ($filter & Caster::EXCLUDE_VERBOSE) { + $stub->cut += 3; + + return self::castError($c, $a); + } + + $a += [ + Caster::PREFIX_VIRTUAL.'attributes' => new EnumStub( + [ + 'PARSE_INT_ONLY' => $c->getAttribute(\NumberFormatter::PARSE_INT_ONLY), + 'GROUPING_USED' => $c->getAttribute(\NumberFormatter::GROUPING_USED), + 'DECIMAL_ALWAYS_SHOWN' => $c->getAttribute(\NumberFormatter::DECIMAL_ALWAYS_SHOWN), + 'MAX_INTEGER_DIGITS' => $c->getAttribute(\NumberFormatter::MAX_INTEGER_DIGITS), + 'MIN_INTEGER_DIGITS' => $c->getAttribute(\NumberFormatter::MIN_INTEGER_DIGITS), + 'INTEGER_DIGITS' => $c->getAttribute(\NumberFormatter::INTEGER_DIGITS), + 'MAX_FRACTION_DIGITS' => $c->getAttribute(\NumberFormatter::MAX_FRACTION_DIGITS), + 'MIN_FRACTION_DIGITS' => $c->getAttribute(\NumberFormatter::MIN_FRACTION_DIGITS), + 'FRACTION_DIGITS' => $c->getAttribute(\NumberFormatter::FRACTION_DIGITS), + 'MULTIPLIER' => $c->getAttribute(\NumberFormatter::MULTIPLIER), + 'GROUPING_SIZE' => $c->getAttribute(\NumberFormatter::GROUPING_SIZE), + 'ROUNDING_MODE' => $c->getAttribute(\NumberFormatter::ROUNDING_MODE), + 'ROUNDING_INCREMENT' => $c->getAttribute(\NumberFormatter::ROUNDING_INCREMENT), + 'FORMAT_WIDTH' => $c->getAttribute(\NumberFormatter::FORMAT_WIDTH), + 'PADDING_POSITION' => $c->getAttribute(\NumberFormatter::PADDING_POSITION), + 'SECONDARY_GROUPING_SIZE' => $c->getAttribute(\NumberFormatter::SECONDARY_GROUPING_SIZE), + 'SIGNIFICANT_DIGITS_USED' => $c->getAttribute(\NumberFormatter::SIGNIFICANT_DIGITS_USED), + 'MIN_SIGNIFICANT_DIGITS' => $c->getAttribute(\NumberFormatter::MIN_SIGNIFICANT_DIGITS), + 'MAX_SIGNIFICANT_DIGITS' => $c->getAttribute(\NumberFormatter::MAX_SIGNIFICANT_DIGITS), + 'LENIENT_PARSE' => $c->getAttribute(\NumberFormatter::LENIENT_PARSE), + ] + ), + Caster::PREFIX_VIRTUAL.'text_attributes' => new EnumStub( + [ + 'POSITIVE_PREFIX' => $c->getTextAttribute(\NumberFormatter::POSITIVE_PREFIX), + 'POSITIVE_SUFFIX' => $c->getTextAttribute(\NumberFormatter::POSITIVE_SUFFIX), + 'NEGATIVE_PREFIX' => $c->getTextAttribute(\NumberFormatter::NEGATIVE_PREFIX), + 'NEGATIVE_SUFFIX' => $c->getTextAttribute(\NumberFormatter::NEGATIVE_SUFFIX), + 'PADDING_CHARACTER' => $c->getTextAttribute(\NumberFormatter::PADDING_CHARACTER), + 'CURRENCY_CODE' => $c->getTextAttribute(\NumberFormatter::CURRENCY_CODE), + 'DEFAULT_RULESET' => $c->getTextAttribute(\NumberFormatter::DEFAULT_RULESET), + 'PUBLIC_RULESETS' => $c->getTextAttribute(\NumberFormatter::PUBLIC_RULESETS), + ] + ), + Caster::PREFIX_VIRTUAL.'symbols' => new EnumStub( + [ + 'DECIMAL_SEPARATOR_SYMBOL' => $c->getSymbol(\NumberFormatter::DECIMAL_SEPARATOR_SYMBOL), + 'GROUPING_SEPARATOR_SYMBOL' => $c->getSymbol(\NumberFormatter::GROUPING_SEPARATOR_SYMBOL), + 'PATTERN_SEPARATOR_SYMBOL' => $c->getSymbol(\NumberFormatter::PATTERN_SEPARATOR_SYMBOL), + 'PERCENT_SYMBOL' => $c->getSymbol(\NumberFormatter::PERCENT_SYMBOL), + 'ZERO_DIGIT_SYMBOL' => $c->getSymbol(\NumberFormatter::ZERO_DIGIT_SYMBOL), + 'DIGIT_SYMBOL' => $c->getSymbol(\NumberFormatter::DIGIT_SYMBOL), + 'MINUS_SIGN_SYMBOL' => $c->getSymbol(\NumberFormatter::MINUS_SIGN_SYMBOL), + 'PLUS_SIGN_SYMBOL' => $c->getSymbol(\NumberFormatter::PLUS_SIGN_SYMBOL), + 'CURRENCY_SYMBOL' => $c->getSymbol(\NumberFormatter::CURRENCY_SYMBOL), + 'INTL_CURRENCY_SYMBOL' => $c->getSymbol(\NumberFormatter::INTL_CURRENCY_SYMBOL), + 'MONETARY_SEPARATOR_SYMBOL' => $c->getSymbol(\NumberFormatter::MONETARY_SEPARATOR_SYMBOL), + 'EXPONENTIAL_SYMBOL' => $c->getSymbol(\NumberFormatter::EXPONENTIAL_SYMBOL), + 'PERMILL_SYMBOL' => $c->getSymbol(\NumberFormatter::PERMILL_SYMBOL), + 'PAD_ESCAPE_SYMBOL' => $c->getSymbol(\NumberFormatter::PAD_ESCAPE_SYMBOL), + 'INFINITY_SYMBOL' => $c->getSymbol(\NumberFormatter::INFINITY_SYMBOL), + 'NAN_SYMBOL' => $c->getSymbol(\NumberFormatter::NAN_SYMBOL), + 'SIGNIFICANT_DIGIT_SYMBOL' => $c->getSymbol(\NumberFormatter::SIGNIFICANT_DIGIT_SYMBOL), + 'MONETARY_GROUPING_SEPARATOR_SYMBOL' => $c->getSymbol(\NumberFormatter::MONETARY_GROUPING_SEPARATOR_SYMBOL), + ] + ), + ]; + + return self::castError($c, $a); + } + + public static function castIntlTimeZone(\IntlTimeZone $c, array $a, Stub $stub, bool $isNested) + { + $a += [ + Caster::PREFIX_VIRTUAL.'display_name' => $c->getDisplayName(), + Caster::PREFIX_VIRTUAL.'id' => $c->getID(), + Caster::PREFIX_VIRTUAL.'raw_offset' => $c->getRawOffset(), + ]; + + if ($c->useDaylightTime()) { + $a += [ + Caster::PREFIX_VIRTUAL.'dst_savings' => $c->getDSTSavings(), + ]; + } + + return self::castError($c, $a); + } + + public static function castIntlCalendar(\IntlCalendar $c, array $a, Stub $stub, bool $isNested, int $filter = 0) + { + $a += [ + Caster::PREFIX_VIRTUAL.'type' => $c->getType(), + Caster::PREFIX_VIRTUAL.'first_day_of_week' => $c->getFirstDayOfWeek(), + Caster::PREFIX_VIRTUAL.'minimal_days_in_first_week' => $c->getMinimalDaysInFirstWeek(), + Caster::PREFIX_VIRTUAL.'repeated_wall_time_option' => $c->getRepeatedWallTimeOption(), + Caster::PREFIX_VIRTUAL.'skipped_wall_time_option' => $c->getSkippedWallTimeOption(), + Caster::PREFIX_VIRTUAL.'time' => $c->getTime(), + Caster::PREFIX_VIRTUAL.'in_daylight_time' => $c->inDaylightTime(), + Caster::PREFIX_VIRTUAL.'is_lenient' => $c->isLenient(), + Caster::PREFIX_VIRTUAL.'time_zone' => ($filter & Caster::EXCLUDE_VERBOSE) ? new CutStub($c->getTimeZone()) : $c->getTimeZone(), + ]; + + return self::castError($c, $a); + } + + public static function castIntlDateFormatter(\IntlDateFormatter $c, array $a, Stub $stub, bool $isNested, int $filter = 0) + { + $a += [ + Caster::PREFIX_VIRTUAL.'locale' => $c->getLocale(), + Caster::PREFIX_VIRTUAL.'pattern' => $c->getPattern(), + Caster::PREFIX_VIRTUAL.'calendar' => $c->getCalendar(), + Caster::PREFIX_VIRTUAL.'time_zone_id' => $c->getTimeZoneId(), + Caster::PREFIX_VIRTUAL.'time_type' => $c->getTimeType(), + Caster::PREFIX_VIRTUAL.'date_type' => $c->getDateType(), + Caster::PREFIX_VIRTUAL.'calendar_object' => ($filter & Caster::EXCLUDE_VERBOSE) ? new CutStub($c->getCalendarObject()) : $c->getCalendarObject(), + Caster::PREFIX_VIRTUAL.'time_zone' => ($filter & Caster::EXCLUDE_VERBOSE) ? new CutStub($c->getTimeZone()) : $c->getTimeZone(), + ]; + + return self::castError($c, $a); + } + + private static function castError(object $c, array $a): array + { + if ($errorCode = $c->getErrorCode()) { + $a += [ + Caster::PREFIX_VIRTUAL.'error_code' => $errorCode, + Caster::PREFIX_VIRTUAL.'error_message' => $c->getErrorMessage(), + ]; + } + + return $a; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/LinkStub.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/LinkStub.php new file mode 100644 index 0000000..6360716 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/LinkStub.php @@ -0,0 +1,108 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +/** + * Represents a file or a URL. + * + * @author Nicolas Grekas + */ +class LinkStub extends ConstStub +{ + public $inVendor = false; + + private static $vendorRoots; + private static $composerRoots; + + public function __construct($label, int $line = 0, $href = null) + { + $this->value = $label; + + if (null === $href) { + $href = $label; + } + if (!\is_string($href)) { + return; + } + if (0 === strpos($href, 'file://')) { + if ($href === $label) { + $label = substr($label, 7); + } + $href = substr($href, 7); + } elseif (false !== strpos($href, '://')) { + $this->attr['href'] = $href; + + return; + } + if (!file_exists($href)) { + return; + } + if ($line) { + $this->attr['line'] = $line; + } + if ($label !== $this->attr['file'] = realpath($href) ?: $href) { + return; + } + if ($composerRoot = $this->getComposerRoot($href, $this->inVendor)) { + $this->attr['ellipsis'] = \strlen($href) - \strlen($composerRoot) + 1; + $this->attr['ellipsis-type'] = 'path'; + $this->attr['ellipsis-tail'] = 1 + ($this->inVendor ? 2 + \strlen(implode('', \array_slice(explode(\DIRECTORY_SEPARATOR, substr($href, 1 - $this->attr['ellipsis'])), 0, 2))) : 0); + } elseif (3 < \count($ellipsis = explode(\DIRECTORY_SEPARATOR, $href))) { + $this->attr['ellipsis'] = 2 + \strlen(implode('', \array_slice($ellipsis, -2))); + $this->attr['ellipsis-type'] = 'path'; + $this->attr['ellipsis-tail'] = 1; + } + } + + private function getComposerRoot(string $file, bool &$inVendor) + { + if (null === self::$vendorRoots) { + self::$vendorRoots = []; + + foreach (get_declared_classes() as $class) { + if ('C' === $class[0] && 0 === strpos($class, 'ComposerAutoloaderInit')) { + $r = new \ReflectionClass($class); + $v = \dirname($r->getFileName(), 2); + if (file_exists($v.'/composer/installed.json')) { + self::$vendorRoots[] = $v.\DIRECTORY_SEPARATOR; + } + } + } + } + $inVendor = false; + + if (isset(self::$composerRoots[$dir = \dirname($file)])) { + return self::$composerRoots[$dir]; + } + + foreach (self::$vendorRoots as $root) { + if ($inVendor = 0 === strpos($file, $root)) { + return $root; + } + } + + $parent = $dir; + while (!@file_exists($parent.'/composer.json')) { + if (!@file_exists($parent)) { + // open_basedir restriction in effect + break; + } + if ($parent === \dirname($parent)) { + return self::$composerRoots[$dir] = false; + } + + $parent = \dirname($parent); + } + + return self::$composerRoots[$dir] = $parent.\DIRECTORY_SEPARATOR; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/MemcachedCaster.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/MemcachedCaster.php new file mode 100644 index 0000000..111b060 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/MemcachedCaster.php @@ -0,0 +1,81 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * @author Jan Schädlich + * + * @final + */ +class MemcachedCaster +{ + private static $optionConstants; + private static $defaultOptions; + + public static function castMemcached(\Memcached $c, array $a, Stub $stub, bool $isNested) + { + $a += [ + Caster::PREFIX_VIRTUAL.'servers' => $c->getServerList(), + Caster::PREFIX_VIRTUAL.'options' => new EnumStub( + self::getNonDefaultOptions($c) + ), + ]; + + return $a; + } + + private static function getNonDefaultOptions(\Memcached $c): array + { + self::$defaultOptions = self::$defaultOptions ?? self::discoverDefaultOptions(); + self::$optionConstants = self::$optionConstants ?? self::getOptionConstants(); + + $nonDefaultOptions = []; + foreach (self::$optionConstants as $constantKey => $value) { + if (self::$defaultOptions[$constantKey] !== $option = $c->getOption($value)) { + $nonDefaultOptions[$constantKey] = $option; + } + } + + return $nonDefaultOptions; + } + + private static function discoverDefaultOptions(): array + { + $defaultMemcached = new \Memcached(); + $defaultMemcached->addServer('127.0.0.1', 11211); + + $defaultOptions = []; + self::$optionConstants = self::$optionConstants ?? self::getOptionConstants(); + + foreach (self::$optionConstants as $constantKey => $value) { + $defaultOptions[$constantKey] = $defaultMemcached->getOption($value); + } + + return $defaultOptions; + } + + private static function getOptionConstants(): array + { + $reflectedMemcached = new \ReflectionClass(\Memcached::class); + + $optionConstants = []; + foreach ($reflectedMemcached->getConstants() as $constantKey => $value) { + if (0 === strpos($constantKey, 'OPT_')) { + $optionConstants[$constantKey] = $value; + } + } + + return $optionConstants; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/PdoCaster.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/PdoCaster.php new file mode 100644 index 0000000..4ba302b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/PdoCaster.php @@ -0,0 +1,122 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * Casts PDO related classes to array representation. + * + * @author Nicolas Grekas + * + * @final + */ +class PdoCaster +{ + private static $pdoAttributes = [ + 'CASE' => [ + \PDO::CASE_LOWER => 'LOWER', + \PDO::CASE_NATURAL => 'NATURAL', + \PDO::CASE_UPPER => 'UPPER', + ], + 'ERRMODE' => [ + \PDO::ERRMODE_SILENT => 'SILENT', + \PDO::ERRMODE_WARNING => 'WARNING', + \PDO::ERRMODE_EXCEPTION => 'EXCEPTION', + ], + 'TIMEOUT', + 'PREFETCH', + 'AUTOCOMMIT', + 'PERSISTENT', + 'DRIVER_NAME', + 'SERVER_INFO', + 'ORACLE_NULLS' => [ + \PDO::NULL_NATURAL => 'NATURAL', + \PDO::NULL_EMPTY_STRING => 'EMPTY_STRING', + \PDO::NULL_TO_STRING => 'TO_STRING', + ], + 'CLIENT_VERSION', + 'SERVER_VERSION', + 'STATEMENT_CLASS', + 'EMULATE_PREPARES', + 'CONNECTION_STATUS', + 'STRINGIFY_FETCHES', + 'DEFAULT_FETCH_MODE' => [ + \PDO::FETCH_ASSOC => 'ASSOC', + \PDO::FETCH_BOTH => 'BOTH', + \PDO::FETCH_LAZY => 'LAZY', + \PDO::FETCH_NUM => 'NUM', + \PDO::FETCH_OBJ => 'OBJ', + ], + ]; + + public static function castPdo(\PDO $c, array $a, Stub $stub, bool $isNested) + { + $attr = []; + $errmode = $c->getAttribute(\PDO::ATTR_ERRMODE); + $c->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); + + foreach (self::$pdoAttributes as $k => $v) { + if (!isset($k[0])) { + $k = $v; + $v = []; + } + + try { + $attr[$k] = 'ERRMODE' === $k ? $errmode : $c->getAttribute(\constant('PDO::ATTR_'.$k)); + if ($v && isset($v[$attr[$k]])) { + $attr[$k] = new ConstStub($v[$attr[$k]], $attr[$k]); + } + } catch (\Exception $e) { + } + } + if (isset($attr[$k = 'STATEMENT_CLASS'][1])) { + if ($attr[$k][1]) { + $attr[$k][1] = new ArgsStub($attr[$k][1], '__construct', $attr[$k][0]); + } + $attr[$k][0] = new ClassStub($attr[$k][0]); + } + + $prefix = Caster::PREFIX_VIRTUAL; + $a += [ + $prefix.'inTransaction' => method_exists($c, 'inTransaction'), + $prefix.'errorInfo' => $c->errorInfo(), + $prefix.'attributes' => new EnumStub($attr), + ]; + + if ($a[$prefix.'inTransaction']) { + $a[$prefix.'inTransaction'] = $c->inTransaction(); + } else { + unset($a[$prefix.'inTransaction']); + } + + if (!isset($a[$prefix.'errorInfo'][1], $a[$prefix.'errorInfo'][2])) { + unset($a[$prefix.'errorInfo']); + } + + $c->setAttribute(\PDO::ATTR_ERRMODE, $errmode); + + return $a; + } + + public static function castPdoStatement(\PDOStatement $c, array $a, Stub $stub, bool $isNested) + { + $prefix = Caster::PREFIX_VIRTUAL; + $a[$prefix.'errorInfo'] = $c->errorInfo(); + + if (!isset($a[$prefix.'errorInfo'][1], $a[$prefix.'errorInfo'][2])) { + unset($a[$prefix.'errorInfo']); + } + + return $a; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/PgSqlCaster.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/PgSqlCaster.php new file mode 100644 index 0000000..f9f3c6f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/PgSqlCaster.php @@ -0,0 +1,156 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * Casts pqsql resources to array representation. + * + * @author Nicolas Grekas + * + * @final + */ +class PgSqlCaster +{ + private static $paramCodes = [ + 'server_encoding', + 'client_encoding', + 'is_superuser', + 'session_authorization', + 'DateStyle', + 'TimeZone', + 'IntervalStyle', + 'integer_datetimes', + 'application_name', + 'standard_conforming_strings', + ]; + + private static $transactionStatus = [ + PGSQL_TRANSACTION_IDLE => 'PGSQL_TRANSACTION_IDLE', + PGSQL_TRANSACTION_ACTIVE => 'PGSQL_TRANSACTION_ACTIVE', + PGSQL_TRANSACTION_INTRANS => 'PGSQL_TRANSACTION_INTRANS', + PGSQL_TRANSACTION_INERROR => 'PGSQL_TRANSACTION_INERROR', + PGSQL_TRANSACTION_UNKNOWN => 'PGSQL_TRANSACTION_UNKNOWN', + ]; + + private static $resultStatus = [ + PGSQL_EMPTY_QUERY => 'PGSQL_EMPTY_QUERY', + PGSQL_COMMAND_OK => 'PGSQL_COMMAND_OK', + PGSQL_TUPLES_OK => 'PGSQL_TUPLES_OK', + PGSQL_COPY_OUT => 'PGSQL_COPY_OUT', + PGSQL_COPY_IN => 'PGSQL_COPY_IN', + PGSQL_BAD_RESPONSE => 'PGSQL_BAD_RESPONSE', + PGSQL_NONFATAL_ERROR => 'PGSQL_NONFATAL_ERROR', + PGSQL_FATAL_ERROR => 'PGSQL_FATAL_ERROR', + ]; + + private static $diagCodes = [ + 'severity' => PGSQL_DIAG_SEVERITY, + 'sqlstate' => PGSQL_DIAG_SQLSTATE, + 'message' => PGSQL_DIAG_MESSAGE_PRIMARY, + 'detail' => PGSQL_DIAG_MESSAGE_DETAIL, + 'hint' => PGSQL_DIAG_MESSAGE_HINT, + 'statement position' => PGSQL_DIAG_STATEMENT_POSITION, + 'internal position' => PGSQL_DIAG_INTERNAL_POSITION, + 'internal query' => PGSQL_DIAG_INTERNAL_QUERY, + 'context' => PGSQL_DIAG_CONTEXT, + 'file' => PGSQL_DIAG_SOURCE_FILE, + 'line' => PGSQL_DIAG_SOURCE_LINE, + 'function' => PGSQL_DIAG_SOURCE_FUNCTION, + ]; + + public static function castLargeObject($lo, array $a, Stub $stub, bool $isNested) + { + $a['seek position'] = pg_lo_tell($lo); + + return $a; + } + + public static function castLink($link, array $a, Stub $stub, bool $isNested) + { + $a['status'] = pg_connection_status($link); + $a['status'] = new ConstStub(PGSQL_CONNECTION_OK === $a['status'] ? 'PGSQL_CONNECTION_OK' : 'PGSQL_CONNECTION_BAD', $a['status']); + $a['busy'] = pg_connection_busy($link); + + $a['transaction'] = pg_transaction_status($link); + if (isset(self::$transactionStatus[$a['transaction']])) { + $a['transaction'] = new ConstStub(self::$transactionStatus[$a['transaction']], $a['transaction']); + } + + $a['pid'] = pg_get_pid($link); + $a['last error'] = pg_last_error($link); + $a['last notice'] = pg_last_notice($link); + $a['host'] = pg_host($link); + $a['port'] = pg_port($link); + $a['dbname'] = pg_dbname($link); + $a['options'] = pg_options($link); + $a['version'] = pg_version($link); + + foreach (self::$paramCodes as $v) { + if (false !== $s = pg_parameter_status($link, $v)) { + $a['param'][$v] = $s; + } + } + + $a['param']['client_encoding'] = pg_client_encoding($link); + $a['param'] = new EnumStub($a['param']); + + return $a; + } + + public static function castResult($result, array $a, Stub $stub, bool $isNested) + { + $a['num rows'] = pg_num_rows($result); + $a['status'] = pg_result_status($result); + if (isset(self::$resultStatus[$a['status']])) { + $a['status'] = new ConstStub(self::$resultStatus[$a['status']], $a['status']); + } + $a['command-completion tag'] = pg_result_status($result, PGSQL_STATUS_STRING); + + if (-1 === $a['num rows']) { + foreach (self::$diagCodes as $k => $v) { + $a['error'][$k] = pg_result_error_field($result, $v); + } + } + + $a['affected rows'] = pg_affected_rows($result); + $a['last OID'] = pg_last_oid($result); + + $fields = pg_num_fields($result); + + for ($i = 0; $i < $fields; ++$i) { + $field = [ + 'name' => pg_field_name($result, $i), + 'table' => sprintf('%s (OID: %s)', pg_field_table($result, $i), pg_field_table($result, $i, true)), + 'type' => sprintf('%s (OID: %s)', pg_field_type($result, $i), pg_field_type_oid($result, $i)), + 'nullable' => (bool) pg_field_is_null($result, $i), + 'storage' => pg_field_size($result, $i).' bytes', + 'display' => pg_field_prtlen($result, $i).' chars', + ]; + if (' (OID: )' === $field['table']) { + $field['table'] = null; + } + if ('-1 bytes' === $field['storage']) { + $field['storage'] = 'variable size'; + } elseif ('1 bytes' === $field['storage']) { + $field['storage'] = '1 byte'; + } + if ('1 chars' === $field['display']) { + $field['display'] = '1 char'; + } + $a['fields'][] = new EnumStub($field); + } + + return $a; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ProxyManagerCaster.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ProxyManagerCaster.php new file mode 100644 index 0000000..e712019 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ProxyManagerCaster.php @@ -0,0 +1,33 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use ProxyManager\Proxy\ProxyInterface; +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * @author Nicolas Grekas + * + * @final + */ +class ProxyManagerCaster +{ + public static function castProxy(ProxyInterface $c, array $a, Stub $stub, bool $isNested) + { + if ($parent = get_parent_class($c)) { + $stub->class .= ' - '.$parent; + } + $stub->class .= '@proxy'; + + return $a; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/RedisCaster.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/RedisCaster.php new file mode 100644 index 0000000..a7ca8ec --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/RedisCaster.php @@ -0,0 +1,152 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * Casts Redis class from ext-redis to array representation. + * + * @author Nicolas Grekas + * + * @final + */ +class RedisCaster +{ + private static $serializer = [ + \Redis::SERIALIZER_NONE => 'NONE', + \Redis::SERIALIZER_PHP => 'PHP', + 2 => 'IGBINARY', // Optional Redis::SERIALIZER_IGBINARY + ]; + + private static $mode = [ + \Redis::ATOMIC => 'ATOMIC', + \Redis::MULTI => 'MULTI', + \Redis::PIPELINE => 'PIPELINE', + ]; + + private static $compression = [ + 0 => 'NONE', // Redis::COMPRESSION_NONE + 1 => 'LZF', // Redis::COMPRESSION_LZF + ]; + + private static $failover = [ + \RedisCluster::FAILOVER_NONE => 'NONE', + \RedisCluster::FAILOVER_ERROR => 'ERROR', + \RedisCluster::FAILOVER_DISTRIBUTE => 'DISTRIBUTE', + \RedisCluster::FAILOVER_DISTRIBUTE_SLAVES => 'DISTRIBUTE_SLAVES', + ]; + + public static function castRedis(\Redis $c, array $a, Stub $stub, bool $isNested) + { + $prefix = Caster::PREFIX_VIRTUAL; + + if (!$connected = $c->isConnected()) { + return $a + [ + $prefix.'isConnected' => $connected, + ]; + } + + $mode = $c->getMode(); + + return $a + [ + $prefix.'isConnected' => $connected, + $prefix.'host' => $c->getHost(), + $prefix.'port' => $c->getPort(), + $prefix.'auth' => $c->getAuth(), + $prefix.'mode' => isset(self::$mode[$mode]) ? new ConstStub(self::$mode[$mode], $mode) : $mode, + $prefix.'dbNum' => $c->getDbNum(), + $prefix.'timeout' => $c->getTimeout(), + $prefix.'lastError' => $c->getLastError(), + $prefix.'persistentId' => $c->getPersistentID(), + $prefix.'options' => self::getRedisOptions($c), + ]; + } + + public static function castRedisArray(\RedisArray $c, array $a, Stub $stub, bool $isNested) + { + $prefix = Caster::PREFIX_VIRTUAL; + + return $a + [ + $prefix.'hosts' => $c->_hosts(), + $prefix.'function' => ClassStub::wrapCallable($c->_function()), + $prefix.'lastError' => $c->getLastError(), + $prefix.'options' => self::getRedisOptions($c), + ]; + } + + public static function castRedisCluster(\RedisCluster $c, array $a, Stub $stub, bool $isNested) + { + $prefix = Caster::PREFIX_VIRTUAL; + $failover = $c->getOption(\RedisCluster::OPT_SLAVE_FAILOVER); + + $a += [ + $prefix.'_masters' => $c->_masters(), + $prefix.'_redir' => $c->_redir(), + $prefix.'mode' => new ConstStub($c->getMode() ? 'MULTI' : 'ATOMIC', $c->getMode()), + $prefix.'lastError' => $c->getLastError(), + $prefix.'options' => self::getRedisOptions($c, [ + 'SLAVE_FAILOVER' => isset(self::$failover[$failover]) ? new ConstStub(self::$failover[$failover], $failover) : $failover, + ]), + ]; + + return $a; + } + + /** + * @param \Redis|\RedisArray|\RedisCluster $redis + */ + private static function getRedisOptions($redis, array $options = []): EnumStub + { + $serializer = $redis->getOption(\Redis::OPT_SERIALIZER); + if (\is_array($serializer)) { + foreach ($serializer as &$v) { + if (isset(self::$serializer[$v])) { + $v = new ConstStub(self::$serializer[$v], $v); + } + } + } elseif (isset(self::$serializer[$serializer])) { + $serializer = new ConstStub(self::$serializer[$serializer], $serializer); + } + + $compression = \defined('Redis::OPT_COMPRESSION') ? $redis->getOption(\Redis::OPT_COMPRESSION) : 0; + if (\is_array($compression)) { + foreach ($compression as &$v) { + if (isset(self::$compression[$v])) { + $v = new ConstStub(self::$compression[$v], $v); + } + } + } elseif (isset(self::$compression[$compression])) { + $compression = new ConstStub(self::$compression[$compression], $compression); + } + + $retry = \defined('Redis::OPT_SCAN') ? $redis->getOption(\Redis::OPT_SCAN) : 0; + if (\is_array($retry)) { + foreach ($retry as &$v) { + $v = new ConstStub($v ? 'RETRY' : 'NORETRY', $v); + } + } else { + $retry = new ConstStub($retry ? 'RETRY' : 'NORETRY', $retry); + } + + $options += [ + 'TCP_KEEPALIVE' => \defined('Redis::OPT_TCP_KEEPALIVE') ? $redis->getOption(\Redis::OPT_TCP_KEEPALIVE) : 0, + 'READ_TIMEOUT' => $redis->getOption(\Redis::OPT_READ_TIMEOUT), + 'COMPRESSION' => $compression, + 'SERIALIZER' => $serializer, + 'PREFIX' => $redis->getOption(\Redis::OPT_PREFIX), + 'SCAN' => $retry, + ]; + + return new EnumStub($options); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ReflectionCaster.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ReflectionCaster.php new file mode 100644 index 0000000..94c2f3e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ReflectionCaster.php @@ -0,0 +1,384 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * Casts Reflector related classes to array representation. + * + * @author Nicolas Grekas + * + * @final + */ +class ReflectionCaster +{ + const UNSET_CLOSURE_FILE_INFO = ['Closure' => __CLASS__.'::unsetClosureFileInfo']; + + private static $extraMap = [ + 'docComment' => 'getDocComment', + 'extension' => 'getExtensionName', + 'isDisabled' => 'isDisabled', + 'isDeprecated' => 'isDeprecated', + 'isInternal' => 'isInternal', + 'isUserDefined' => 'isUserDefined', + 'isGenerator' => 'isGenerator', + 'isVariadic' => 'isVariadic', + ]; + + public static function castClosure(\Closure $c, array $a, Stub $stub, bool $isNested, int $filter = 0) + { + $prefix = Caster::PREFIX_VIRTUAL; + $c = new \ReflectionFunction($c); + + $a = static::castFunctionAbstract($c, $a, $stub, $isNested, $filter); + + if (false === strpos($c->name, '{closure}')) { + $stub->class = isset($a[$prefix.'class']) ? $a[$prefix.'class']->value.'::'.$c->name : $c->name; + unset($a[$prefix.'class']); + } + unset($a[$prefix.'extra']); + + $stub->class .= self::getSignature($a); + + if ($f = $c->getFileName()) { + $stub->attr['file'] = $f; + $stub->attr['line'] = $c->getStartLine(); + } + + unset($a[$prefix.'parameters']); + + if ($filter & Caster::EXCLUDE_VERBOSE) { + $stub->cut += ($c->getFileName() ? 2 : 0) + \count($a); + + return []; + } + + if ($f) { + $a[$prefix.'file'] = new LinkStub($f, $c->getStartLine()); + $a[$prefix.'line'] = $c->getStartLine().' to '.$c->getEndLine(); + } + + return $a; + } + + public static function unsetClosureFileInfo(\Closure $c, array $a) + { + unset($a[Caster::PREFIX_VIRTUAL.'file'], $a[Caster::PREFIX_VIRTUAL.'line']); + + return $a; + } + + public static function castGenerator(\Generator $c, array $a, Stub $stub, bool $isNested) + { + // Cannot create ReflectionGenerator based on a terminated Generator + try { + $reflectionGenerator = new \ReflectionGenerator($c); + } catch (\Exception $e) { + $a[Caster::PREFIX_VIRTUAL.'closed'] = true; + + return $a; + } + + return self::castReflectionGenerator($reflectionGenerator, $a, $stub, $isNested); + } + + public static function castType(\ReflectionType $c, array $a, Stub $stub, bool $isNested) + { + $prefix = Caster::PREFIX_VIRTUAL; + + $a += [ + $prefix.'name' => $c->getName(), + $prefix.'allowsNull' => $c->allowsNull(), + $prefix.'isBuiltin' => $c->isBuiltin(), + ]; + + return $a; + } + + public static function castReflectionGenerator(\ReflectionGenerator $c, array $a, Stub $stub, bool $isNested) + { + $prefix = Caster::PREFIX_VIRTUAL; + + if ($c->getThis()) { + $a[$prefix.'this'] = new CutStub($c->getThis()); + } + $function = $c->getFunction(); + $frame = [ + 'class' => isset($function->class) ? $function->class : null, + 'type' => isset($function->class) ? ($function->isStatic() ? '::' : '->') : null, + 'function' => $function->name, + 'file' => $c->getExecutingFile(), + 'line' => $c->getExecutingLine(), + ]; + if ($trace = $c->getTrace(DEBUG_BACKTRACE_IGNORE_ARGS)) { + $function = new \ReflectionGenerator($c->getExecutingGenerator()); + array_unshift($trace, [ + 'function' => 'yield', + 'file' => $function->getExecutingFile(), + 'line' => $function->getExecutingLine() - 1, + ]); + $trace[] = $frame; + $a[$prefix.'trace'] = new TraceStub($trace, false, 0, -1, -1); + } else { + $function = new FrameStub($frame, false, true); + $function = ExceptionCaster::castFrameStub($function, [], $function, true); + $a[$prefix.'executing'] = $function[$prefix.'src']; + } + + $a[Caster::PREFIX_VIRTUAL.'closed'] = false; + + return $a; + } + + public static function castClass(\ReflectionClass $c, array $a, Stub $stub, bool $isNested, int $filter = 0) + { + $prefix = Caster::PREFIX_VIRTUAL; + + if ($n = \Reflection::getModifierNames($c->getModifiers())) { + $a[$prefix.'modifiers'] = implode(' ', $n); + } + + self::addMap($a, $c, [ + 'extends' => 'getParentClass', + 'implements' => 'getInterfaceNames', + 'constants' => 'getConstants', + ]); + + foreach ($c->getProperties() as $n) { + $a[$prefix.'properties'][$n->name] = $n; + } + + foreach ($c->getMethods() as $n) { + $a[$prefix.'methods'][$n->name] = $n; + } + + if (!($filter & Caster::EXCLUDE_VERBOSE) && !$isNested) { + self::addExtra($a, $c); + } + + return $a; + } + + public static function castFunctionAbstract(\ReflectionFunctionAbstract $c, array $a, Stub $stub, bool $isNested, int $filter = 0) + { + $prefix = Caster::PREFIX_VIRTUAL; + + self::addMap($a, $c, [ + 'returnsReference' => 'returnsReference', + 'returnType' => 'getReturnType', + 'class' => 'getClosureScopeClass', + 'this' => 'getClosureThis', + ]); + + if (isset($a[$prefix.'returnType'])) { + $v = $a[$prefix.'returnType']; + $v = $v->getName(); + $a[$prefix.'returnType'] = new ClassStub($a[$prefix.'returnType']->allowsNull() ? '?'.$v : $v, [class_exists($v, false) || interface_exists($v, false) || trait_exists($v, false) ? $v : '', '']); + } + if (isset($a[$prefix.'class'])) { + $a[$prefix.'class'] = new ClassStub($a[$prefix.'class']); + } + if (isset($a[$prefix.'this'])) { + $a[$prefix.'this'] = new CutStub($a[$prefix.'this']); + } + + foreach ($c->getParameters() as $v) { + $k = '$'.$v->name; + if ($v->isVariadic()) { + $k = '...'.$k; + } + if ($v->isPassedByReference()) { + $k = '&'.$k; + } + $a[$prefix.'parameters'][$k] = $v; + } + if (isset($a[$prefix.'parameters'])) { + $a[$prefix.'parameters'] = new EnumStub($a[$prefix.'parameters']); + } + + if (!($filter & Caster::EXCLUDE_VERBOSE) && $v = $c->getStaticVariables()) { + foreach ($v as $k => &$v) { + if (\is_object($v)) { + $a[$prefix.'use']['$'.$k] = new CutStub($v); + } else { + $a[$prefix.'use']['$'.$k] = &$v; + } + } + unset($v); + $a[$prefix.'use'] = new EnumStub($a[$prefix.'use']); + } + + if (!($filter & Caster::EXCLUDE_VERBOSE) && !$isNested) { + self::addExtra($a, $c); + } + + return $a; + } + + public static function castMethod(\ReflectionMethod $c, array $a, Stub $stub, bool $isNested) + { + $a[Caster::PREFIX_VIRTUAL.'modifiers'] = implode(' ', \Reflection::getModifierNames($c->getModifiers())); + + return $a; + } + + public static function castParameter(\ReflectionParameter $c, array $a, Stub $stub, bool $isNested) + { + $prefix = Caster::PREFIX_VIRTUAL; + + self::addMap($a, $c, [ + 'position' => 'getPosition', + 'isVariadic' => 'isVariadic', + 'byReference' => 'isPassedByReference', + 'allowsNull' => 'allowsNull', + ]); + + if ($v = $c->getType()) { + $a[$prefix.'typeHint'] = $v->getName(); + } + + if (isset($a[$prefix.'typeHint'])) { + $v = $a[$prefix.'typeHint']; + $a[$prefix.'typeHint'] = new ClassStub($v, [class_exists($v, false) || interface_exists($v, false) || trait_exists($v, false) ? $v : '', '']); + } else { + unset($a[$prefix.'allowsNull']); + } + + try { + $a[$prefix.'default'] = $v = $c->getDefaultValue(); + if ($c->isDefaultValueConstant()) { + $a[$prefix.'default'] = new ConstStub($c->getDefaultValueConstantName(), $v); + } + if (null === $v) { + unset($a[$prefix.'allowsNull']); + } + } catch (\ReflectionException $e) { + } + + return $a; + } + + public static function castProperty(\ReflectionProperty $c, array $a, Stub $stub, bool $isNested) + { + $a[Caster::PREFIX_VIRTUAL.'modifiers'] = implode(' ', \Reflection::getModifierNames($c->getModifiers())); + self::addExtra($a, $c); + + return $a; + } + + public static function castReference(\ReflectionReference $c, array $a, Stub $stub, bool $isNested) + { + $a[Caster::PREFIX_VIRTUAL.'id'] = $c->getId(); + + return $a; + } + + public static function castExtension(\ReflectionExtension $c, array $a, Stub $stub, bool $isNested) + { + self::addMap($a, $c, [ + 'version' => 'getVersion', + 'dependencies' => 'getDependencies', + 'iniEntries' => 'getIniEntries', + 'isPersistent' => 'isPersistent', + 'isTemporary' => 'isTemporary', + 'constants' => 'getConstants', + 'functions' => 'getFunctions', + 'classes' => 'getClasses', + ]); + + return $a; + } + + public static function castZendExtension(\ReflectionZendExtension $c, array $a, Stub $stub, bool $isNested) + { + self::addMap($a, $c, [ + 'version' => 'getVersion', + 'author' => 'getAuthor', + 'copyright' => 'getCopyright', + 'url' => 'getURL', + ]); + + return $a; + } + + public static function getSignature(array $a) + { + $prefix = Caster::PREFIX_VIRTUAL; + $signature = ''; + + if (isset($a[$prefix.'parameters'])) { + foreach ($a[$prefix.'parameters']->value as $k => $param) { + $signature .= ', '; + if ($type = $param->getType()) { + if (!$param->isOptional() && $param->allowsNull()) { + $signature .= '?'; + } + $signature .= substr(strrchr('\\'.$type->getName(), '\\'), 1).' '; + } + $signature .= $k; + + if (!$param->isDefaultValueAvailable()) { + continue; + } + $v = $param->getDefaultValue(); + $signature .= ' = '; + + if ($param->isDefaultValueConstant()) { + $signature .= substr(strrchr('\\'.$param->getDefaultValueConstantName(), '\\'), 1); + } elseif (null === $v) { + $signature .= 'null'; + } elseif (\is_array($v)) { + $signature .= $v ? '[…'.\count($v).']' : '[]'; + } elseif (\is_string($v)) { + $signature .= 10 > \strlen($v) && false === strpos($v, '\\') ? "'{$v}'" : "'…".\strlen($v)."'"; + } elseif (\is_bool($v)) { + $signature .= $v ? 'true' : 'false'; + } else { + $signature .= $v; + } + } + } + $signature = (empty($a[$prefix.'returnsReference']) ? '' : '&').'('.substr($signature, 2).')'; + + if (isset($a[$prefix.'returnType'])) { + $signature .= ': '.substr(strrchr('\\'.$a[$prefix.'returnType'], '\\'), 1); + } + + return $signature; + } + + private static function addExtra(array &$a, \Reflector $c) + { + $x = isset($a[Caster::PREFIX_VIRTUAL.'extra']) ? $a[Caster::PREFIX_VIRTUAL.'extra']->value : []; + + if (method_exists($c, 'getFileName') && $m = $c->getFileName()) { + $x['file'] = new LinkStub($m, $c->getStartLine()); + $x['line'] = $c->getStartLine().' to '.$c->getEndLine(); + } + + self::addMap($x, $c, self::$extraMap, ''); + + if ($x) { + $a[Caster::PREFIX_VIRTUAL.'extra'] = new EnumStub($x); + } + } + + private static function addMap(array &$a, \Reflector $c, array $map, string $prefix = Caster::PREFIX_VIRTUAL) + { + foreach ($map as $k => $m) { + if (method_exists($c, $m) && false !== ($m = $c->$m()) && null !== $m) { + $a[$prefix.$k] = $m instanceof \Reflector ? $m->name : $m; + } + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ResourceCaster.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ResourceCaster.php new file mode 100644 index 0000000..94ff5a9 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/ResourceCaster.php @@ -0,0 +1,100 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * Casts common resource types to array representation. + * + * @author Nicolas Grekas + * + * @final + */ +class ResourceCaster +{ + public static function castCurl($h, array $a, Stub $stub, bool $isNested) + { + return curl_getinfo($h); + } + + public static function castDba($dba, array $a, Stub $stub, bool $isNested) + { + $list = dba_list(); + $a['file'] = $list[(int) $dba]; + + return $a; + } + + public static function castProcess($process, array $a, Stub $stub, bool $isNested) + { + return proc_get_status($process); + } + + public static function castStream($stream, array $a, Stub $stub, bool $isNested) + { + $a = stream_get_meta_data($stream) + static::castStreamContext($stream, $a, $stub, $isNested); + if (isset($a['uri'])) { + $a['uri'] = new LinkStub($a['uri']); + } + + return $a; + } + + public static function castStreamContext($stream, array $a, Stub $stub, bool $isNested) + { + return @stream_context_get_params($stream) ?: $a; + } + + public static function castGd($gd, array $a, Stub $stub, $isNested) + { + $a['size'] = imagesx($gd).'x'.imagesy($gd); + $a['trueColor'] = imageistruecolor($gd); + + return $a; + } + + public static function castMysqlLink($h, array $a, Stub $stub, bool $isNested) + { + $a['host'] = mysql_get_host_info($h); + $a['protocol'] = mysql_get_proto_info($h); + $a['server'] = mysql_get_server_info($h); + + return $a; + } + + public static function castOpensslX509($h, array $a, Stub $stub, bool $isNested) + { + $stub->cut = -1; + $info = openssl_x509_parse($h, false); + + $pin = openssl_pkey_get_public($h); + $pin = openssl_pkey_get_details($pin)['key']; + $pin = \array_slice(explode("\n", $pin), 1, -2); + $pin = base64_decode(implode('', $pin)); + $pin = base64_encode(hash('sha256', $pin, true)); + + $a += [ + 'subject' => new EnumStub(array_intersect_key($info['subject'], ['organizationName' => true, 'commonName' => true])), + 'issuer' => new EnumStub(array_intersect_key($info['issuer'], ['organizationName' => true, 'commonName' => true])), + 'expiry' => new ConstStub(date(\DateTime::ISO8601, $info['validTo_time_t']), $info['validTo_time_t']), + 'fingerprint' => new EnumStub([ + 'md5' => new ConstStub(wordwrap(strtoupper(openssl_x509_fingerprint($h, 'md5')), 2, ':', true)), + 'sha1' => new ConstStub(wordwrap(strtoupper(openssl_x509_fingerprint($h, 'sha1')), 2, ':', true)), + 'sha256' => new ConstStub(wordwrap(strtoupper(openssl_x509_fingerprint($h, 'sha256')), 2, ':', true)), + 'pin-sha256' => new ConstStub($pin), + ]), + ]; + + return $a; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/SplCaster.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/SplCaster.php new file mode 100644 index 0000000..e6c5b17 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/SplCaster.php @@ -0,0 +1,228 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * Casts SPL related classes to array representation. + * + * @author Nicolas Grekas + * + * @final + */ +class SplCaster +{ + private static $splFileObjectFlags = [ + \SplFileObject::DROP_NEW_LINE => 'DROP_NEW_LINE', + \SplFileObject::READ_AHEAD => 'READ_AHEAD', + \SplFileObject::SKIP_EMPTY => 'SKIP_EMPTY', + \SplFileObject::READ_CSV => 'READ_CSV', + ]; + + public static function castArrayObject(\ArrayObject $c, array $a, Stub $stub, bool $isNested) + { + return self::castSplArray($c, $a, $stub, $isNested); + } + + public static function castArrayIterator(\ArrayIterator $c, array $a, Stub $stub, bool $isNested) + { + return self::castSplArray($c, $a, $stub, $isNested); + } + + public static function castHeap(\Iterator $c, array $a, Stub $stub, $isNested) + { + $a += [ + Caster::PREFIX_VIRTUAL.'heap' => iterator_to_array(clone $c), + ]; + + return $a; + } + + public static function castDoublyLinkedList(\SplDoublyLinkedList $c, array $a, Stub $stub, bool $isNested) + { + $prefix = Caster::PREFIX_VIRTUAL; + $mode = $c->getIteratorMode(); + $c->setIteratorMode(\SplDoublyLinkedList::IT_MODE_KEEP | $mode & ~\SplDoublyLinkedList::IT_MODE_DELETE); + + $a += [ + $prefix.'mode' => new ConstStub((($mode & \SplDoublyLinkedList::IT_MODE_LIFO) ? 'IT_MODE_LIFO' : 'IT_MODE_FIFO').' | '.(($mode & \SplDoublyLinkedList::IT_MODE_DELETE) ? 'IT_MODE_DELETE' : 'IT_MODE_KEEP'), $mode), + $prefix.'dllist' => iterator_to_array($c), + ]; + $c->setIteratorMode($mode); + + return $a; + } + + public static function castFileInfo(\SplFileInfo $c, array $a, Stub $stub, bool $isNested) + { + static $map = [ + 'path' => 'getPath', + 'filename' => 'getFilename', + 'basename' => 'getBasename', + 'pathname' => 'getPathname', + 'extension' => 'getExtension', + 'realPath' => 'getRealPath', + 'aTime' => 'getATime', + 'mTime' => 'getMTime', + 'cTime' => 'getCTime', + 'inode' => 'getInode', + 'size' => 'getSize', + 'perms' => 'getPerms', + 'owner' => 'getOwner', + 'group' => 'getGroup', + 'type' => 'getType', + 'writable' => 'isWritable', + 'readable' => 'isReadable', + 'executable' => 'isExecutable', + 'file' => 'isFile', + 'dir' => 'isDir', + 'link' => 'isLink', + 'linkTarget' => 'getLinkTarget', + ]; + + $prefix = Caster::PREFIX_VIRTUAL; + + if (false === $c->getPathname()) { + $a[$prefix.'⚠'] = 'The parent constructor was not called: the object is in an invalid state'; + + return $a; + } + + foreach ($map as $key => $accessor) { + try { + $a[$prefix.$key] = $c->$accessor(); + } catch (\Exception $e) { + } + } + + if (isset($a[$prefix.'realPath'])) { + $a[$prefix.'realPath'] = new LinkStub($a[$prefix.'realPath']); + } + + if (isset($a[$prefix.'perms'])) { + $a[$prefix.'perms'] = new ConstStub(sprintf('0%o', $a[$prefix.'perms']), $a[$prefix.'perms']); + } + + static $mapDate = ['aTime', 'mTime', 'cTime']; + foreach ($mapDate as $key) { + if (isset($a[$prefix.$key])) { + $a[$prefix.$key] = new ConstStub(date('Y-m-d H:i:s', $a[$prefix.$key]), $a[$prefix.$key]); + } + } + + return $a; + } + + public static function castFileObject(\SplFileObject $c, array $a, Stub $stub, bool $isNested) + { + static $map = [ + 'csvControl' => 'getCsvControl', + 'flags' => 'getFlags', + 'maxLineLen' => 'getMaxLineLen', + 'fstat' => 'fstat', + 'eof' => 'eof', + 'key' => 'key', + ]; + + $prefix = Caster::PREFIX_VIRTUAL; + + foreach ($map as $key => $accessor) { + try { + $a[$prefix.$key] = $c->$accessor(); + } catch (\Exception $e) { + } + } + + if (isset($a[$prefix.'flags'])) { + $flagsArray = []; + foreach (self::$splFileObjectFlags as $value => $name) { + if ($a[$prefix.'flags'] & $value) { + $flagsArray[] = $name; + } + } + $a[$prefix.'flags'] = new ConstStub(implode('|', $flagsArray), $a[$prefix.'flags']); + } + + if (isset($a[$prefix.'fstat'])) { + $a[$prefix.'fstat'] = new CutArrayStub($a[$prefix.'fstat'], ['dev', 'ino', 'nlink', 'rdev', 'blksize', 'blocks']); + } + + return $a; + } + + public static function castFixedArray(\SplFixedArray $c, array $a, Stub $stub, bool $isNested) + { + $a += [ + Caster::PREFIX_VIRTUAL.'storage' => $c->toArray(), + ]; + + return $a; + } + + public static function castObjectStorage(\SplObjectStorage $c, array $a, Stub $stub, bool $isNested) + { + $storage = []; + unset($a[Caster::PREFIX_DYNAMIC."\0gcdata"]); // Don't hit https://bugs.php.net/65967 + + $clone = clone $c; + foreach ($clone as $obj) { + $storage[] = [ + 'object' => $obj, + 'info' => $clone->getInfo(), + ]; + } + + $a += [ + Caster::PREFIX_VIRTUAL.'storage' => $storage, + ]; + + return $a; + } + + public static function castOuterIterator(\OuterIterator $c, array $a, Stub $stub, bool $isNested) + { + $a[Caster::PREFIX_VIRTUAL.'innerIterator'] = $c->getInnerIterator(); + + return $a; + } + + public static function castWeakReference(\WeakReference $c, array $a, Stub $stub, bool $isNested) + { + $a[Caster::PREFIX_VIRTUAL.'object'] = $c->get(); + + return $a; + } + + private static function castSplArray($c, array $a, Stub $stub, bool $isNested): array + { + $prefix = Caster::PREFIX_VIRTUAL; + $class = $stub->class; + $flags = $c->getFlags(); + + if (!($flags & \ArrayObject::STD_PROP_LIST)) { + $c->setFlags(\ArrayObject::STD_PROP_LIST); + $a = Caster::castObject($c, $class); + $c->setFlags($flags); + } + $a += [ + $prefix.'flag::STD_PROP_LIST' => (bool) ($flags & \ArrayObject::STD_PROP_LIST), + $prefix.'flag::ARRAY_AS_PROPS' => (bool) ($flags & \ArrayObject::ARRAY_AS_PROPS), + ]; + if ($c instanceof \ArrayObject) { + $a[$prefix.'iteratorClass'] = new ClassStub($c->getIteratorClass()); + } + $a[$prefix.'storage'] = $c->getArrayCopy(); + + return $a; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/StubCaster.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/StubCaster.php new file mode 100644 index 0000000..32ead7c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/StubCaster.php @@ -0,0 +1,84 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * Casts a caster's Stub. + * + * @author Nicolas Grekas + * + * @final + */ +class StubCaster +{ + public static function castStub(Stub $c, array $a, Stub $stub, bool $isNested) + { + if ($isNested) { + $stub->type = $c->type; + $stub->class = $c->class; + $stub->value = $c->value; + $stub->handle = $c->handle; + $stub->cut = $c->cut; + $stub->attr = $c->attr; + + if (Stub::TYPE_REF === $c->type && !$c->class && \is_string($c->value) && !preg_match('//u', $c->value)) { + $stub->type = Stub::TYPE_STRING; + $stub->class = Stub::STRING_BINARY; + } + + $a = []; + } + + return $a; + } + + public static function castCutArray(CutArrayStub $c, array $a, Stub $stub, bool $isNested) + { + return $isNested ? $c->preservedSubset : $a; + } + + public static function cutInternals($obj, array $a, Stub $stub, bool $isNested) + { + if ($isNested) { + $stub->cut += \count($a); + + return []; + } + + return $a; + } + + public static function castEnum(EnumStub $c, array $a, Stub $stub, bool $isNested) + { + if ($isNested) { + $stub->class = $c->dumpKeys ? '' : null; + $stub->handle = 0; + $stub->value = null; + $stub->cut = $c->cut; + $stub->attr = $c->attr; + + $a = []; + + if ($c->value) { + foreach (array_keys($c->value) as $k) { + $keys[] = !isset($k[0]) || "\0" !== $k[0] ? Caster::PREFIX_VIRTUAL.$k : $k; + } + // Preserve references with array_combine() + $a = array_combine($keys, $c->value); + } + } + + return $a; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/SymfonyCaster.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/SymfonyCaster.php new file mode 100644 index 0000000..6b87bde --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/SymfonyCaster.php @@ -0,0 +1,69 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * @final + */ +class SymfonyCaster +{ + private static $requestGetters = [ + 'pathInfo' => 'getPathInfo', + 'requestUri' => 'getRequestUri', + 'baseUrl' => 'getBaseUrl', + 'basePath' => 'getBasePath', + 'method' => 'getMethod', + 'format' => 'getRequestFormat', + ]; + + public static function castRequest(Request $request, array $a, Stub $stub, bool $isNested) + { + $clone = null; + + foreach (self::$requestGetters as $prop => $getter) { + $key = Caster::PREFIX_PROTECTED.$prop; + if (\array_key_exists($key, $a) && null === $a[$key]) { + if (null === $clone) { + $clone = clone $request; + } + $a[Caster::PREFIX_VIRTUAL.$prop] = $clone->{$getter}(); + } + } + + return $a; + } + + public static function castHttpClient($client, array $a, Stub $stub, bool $isNested) + { + $multiKey = sprintf("\0%s\0multi", \get_class($client)); + if (isset($a[$multiKey])) { + $a[$multiKey] = new CutStub($a[$multiKey]); + } + + return $a; + } + + public static function castHttpClientResponse($response, array $a, Stub $stub, bool $isNested) + { + $stub->cut += \count($a); + $a = []; + + foreach ($response->getInfo() as $k => $v) { + $a[Caster::PREFIX_VIRTUAL.$k] = $v; + } + + return $a; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/TraceStub.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/TraceStub.php new file mode 100644 index 0000000..5eea1c8 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/TraceStub.php @@ -0,0 +1,36 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * Represents a backtrace as returned by debug_backtrace() or Exception->getTrace(). + * + * @author Nicolas Grekas + */ +class TraceStub extends Stub +{ + public $keepArgs; + public $sliceOffset; + public $sliceLength; + public $numberingOffset; + + public function __construct(array $trace, bool $keepArgs = true, int $sliceOffset = 0, int $sliceLength = null, int $numberingOffset = 0) + { + $this->value = $trace; + $this->keepArgs = $keepArgs; + $this->sliceOffset = $sliceOffset; + $this->sliceLength = $sliceLength; + $this->numberingOffset = $numberingOffset; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/UuidCaster.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/UuidCaster.php new file mode 100644 index 0000000..b102774 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/UuidCaster.php @@ -0,0 +1,30 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use Ramsey\Uuid\UuidInterface; +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * @author Grégoire Pineau + */ +final class UuidCaster +{ + public static function castRamseyUuid(UuidInterface $c, array $a, Stub $stub, bool $isNested): array + { + $a += [ + Caster::PREFIX_VIRTUAL.'uuid' => (string) $c, + ]; + + return $a; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/XmlReaderCaster.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/XmlReaderCaster.php new file mode 100644 index 0000000..1bca357 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/XmlReaderCaster.php @@ -0,0 +1,79 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * Casts XmlReader class to array representation. + * + * @author Baptiste Clavié + * + * @final + */ +class XmlReaderCaster +{ + private static $nodeTypes = [ + \XMLReader::NONE => 'NONE', + \XMLReader::ELEMENT => 'ELEMENT', + \XMLReader::ATTRIBUTE => 'ATTRIBUTE', + \XMLReader::TEXT => 'TEXT', + \XMLReader::CDATA => 'CDATA', + \XMLReader::ENTITY_REF => 'ENTITY_REF', + \XMLReader::ENTITY => 'ENTITY', + \XMLReader::PI => 'PI (Processing Instruction)', + \XMLReader::COMMENT => 'COMMENT', + \XMLReader::DOC => 'DOC', + \XMLReader::DOC_TYPE => 'DOC_TYPE', + \XMLReader::DOC_FRAGMENT => 'DOC_FRAGMENT', + \XMLReader::NOTATION => 'NOTATION', + \XMLReader::WHITESPACE => 'WHITESPACE', + \XMLReader::SIGNIFICANT_WHITESPACE => 'SIGNIFICANT_WHITESPACE', + \XMLReader::END_ELEMENT => 'END_ELEMENT', + \XMLReader::END_ENTITY => 'END_ENTITY', + \XMLReader::XML_DECLARATION => 'XML_DECLARATION', + ]; + + public static function castXmlReader(\XMLReader $reader, array $a, Stub $stub, bool $isNested) + { + $props = Caster::PREFIX_VIRTUAL.'parserProperties'; + $info = [ + 'localName' => $reader->localName, + 'prefix' => $reader->prefix, + 'nodeType' => new ConstStub(self::$nodeTypes[$reader->nodeType], $reader->nodeType), + 'depth' => $reader->depth, + 'isDefault' => $reader->isDefault, + 'isEmptyElement' => \XMLReader::NONE === $reader->nodeType ? null : $reader->isEmptyElement, + 'xmlLang' => $reader->xmlLang, + 'attributeCount' => $reader->attributeCount, + 'value' => $reader->value, + 'namespaceURI' => $reader->namespaceURI, + 'baseURI' => $reader->baseURI ? new LinkStub($reader->baseURI) : $reader->baseURI, + $props => [ + 'LOADDTD' => $reader->getParserProperty(\XMLReader::LOADDTD), + 'DEFAULTATTRS' => $reader->getParserProperty(\XMLReader::DEFAULTATTRS), + 'VALIDATE' => $reader->getParserProperty(\XMLReader::VALIDATE), + 'SUBST_ENTITIES' => $reader->getParserProperty(\XMLReader::SUBST_ENTITIES), + ], + ]; + + if ($info[$props] = Caster::filter($info[$props], Caster::EXCLUDE_EMPTY, [], $count)) { + $info[$props] = new EnumStub($info[$props]); + $info[$props]->cut = $count; + } + + $info = Caster::filter($info, Caster::EXCLUDE_EMPTY, [], $count); + // +2 because hasValue and hasAttributes are always filtered + $stub->cut += $count + 2; + + return $a + $info; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/XmlResourceCaster.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/XmlResourceCaster.php new file mode 100644 index 0000000..edece30 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Caster/XmlResourceCaster.php @@ -0,0 +1,63 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * Casts XML resources to array representation. + * + * @author Nicolas Grekas + * + * @final + */ +class XmlResourceCaster +{ + private static $xmlErrors = [ + XML_ERROR_NONE => 'XML_ERROR_NONE', + XML_ERROR_NO_MEMORY => 'XML_ERROR_NO_MEMORY', + XML_ERROR_SYNTAX => 'XML_ERROR_SYNTAX', + XML_ERROR_NO_ELEMENTS => 'XML_ERROR_NO_ELEMENTS', + XML_ERROR_INVALID_TOKEN => 'XML_ERROR_INVALID_TOKEN', + XML_ERROR_UNCLOSED_TOKEN => 'XML_ERROR_UNCLOSED_TOKEN', + XML_ERROR_PARTIAL_CHAR => 'XML_ERROR_PARTIAL_CHAR', + XML_ERROR_TAG_MISMATCH => 'XML_ERROR_TAG_MISMATCH', + XML_ERROR_DUPLICATE_ATTRIBUTE => 'XML_ERROR_DUPLICATE_ATTRIBUTE', + XML_ERROR_JUNK_AFTER_DOC_ELEMENT => 'XML_ERROR_JUNK_AFTER_DOC_ELEMENT', + XML_ERROR_PARAM_ENTITY_REF => 'XML_ERROR_PARAM_ENTITY_REF', + XML_ERROR_UNDEFINED_ENTITY => 'XML_ERROR_UNDEFINED_ENTITY', + XML_ERROR_RECURSIVE_ENTITY_REF => 'XML_ERROR_RECURSIVE_ENTITY_REF', + XML_ERROR_ASYNC_ENTITY => 'XML_ERROR_ASYNC_ENTITY', + XML_ERROR_BAD_CHAR_REF => 'XML_ERROR_BAD_CHAR_REF', + XML_ERROR_BINARY_ENTITY_REF => 'XML_ERROR_BINARY_ENTITY_REF', + XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF => 'XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF', + XML_ERROR_MISPLACED_XML_PI => 'XML_ERROR_MISPLACED_XML_PI', + XML_ERROR_UNKNOWN_ENCODING => 'XML_ERROR_UNKNOWN_ENCODING', + XML_ERROR_INCORRECT_ENCODING => 'XML_ERROR_INCORRECT_ENCODING', + XML_ERROR_UNCLOSED_CDATA_SECTION => 'XML_ERROR_UNCLOSED_CDATA_SECTION', + XML_ERROR_EXTERNAL_ENTITY_HANDLING => 'XML_ERROR_EXTERNAL_ENTITY_HANDLING', + ]; + + public static function castXml($h, array $a, Stub $stub, bool $isNested) + { + $a['current_byte_index'] = xml_get_current_byte_index($h); + $a['current_column_number'] = xml_get_current_column_number($h); + $a['current_line_number'] = xml_get_current_line_number($h); + $a['error_code'] = xml_get_error_code($h); + + if (isset(self::$xmlErrors[$a['error_code']])) { + $a['error_code'] = new ConstStub(self::$xmlErrors[$a['error_code']], $a['error_code']); + } + + return $a; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Cloner/AbstractCloner.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Cloner/AbstractCloner.php new file mode 100644 index 0000000..56b2384 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Cloner/AbstractCloner.php @@ -0,0 +1,360 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Cloner; + +use Symfony\Component\VarDumper\Caster\Caster; +use Symfony\Component\VarDumper\Exception\ThrowingCasterException; + +/** + * AbstractCloner implements a generic caster mechanism for objects and resources. + * + * @author Nicolas Grekas + */ +abstract class AbstractCloner implements ClonerInterface +{ + public static $defaultCasters = [ + '__PHP_Incomplete_Class' => ['Symfony\Component\VarDumper\Caster\Caster', 'castPhpIncompleteClass'], + + 'Symfony\Component\VarDumper\Caster\CutStub' => ['Symfony\Component\VarDumper\Caster\StubCaster', 'castStub'], + 'Symfony\Component\VarDumper\Caster\CutArrayStub' => ['Symfony\Component\VarDumper\Caster\StubCaster', 'castCutArray'], + 'Symfony\Component\VarDumper\Caster\ConstStub' => ['Symfony\Component\VarDumper\Caster\StubCaster', 'castStub'], + 'Symfony\Component\VarDumper\Caster\EnumStub' => ['Symfony\Component\VarDumper\Caster\StubCaster', 'castEnum'], + + 'Closure' => ['Symfony\Component\VarDumper\Caster\ReflectionCaster', 'castClosure'], + 'Generator' => ['Symfony\Component\VarDumper\Caster\ReflectionCaster', 'castGenerator'], + 'ReflectionType' => ['Symfony\Component\VarDumper\Caster\ReflectionCaster', 'castType'], + 'ReflectionGenerator' => ['Symfony\Component\VarDumper\Caster\ReflectionCaster', 'castReflectionGenerator'], + 'ReflectionClass' => ['Symfony\Component\VarDumper\Caster\ReflectionCaster', 'castClass'], + 'ReflectionFunctionAbstract' => ['Symfony\Component\VarDumper\Caster\ReflectionCaster', 'castFunctionAbstract'], + 'ReflectionMethod' => ['Symfony\Component\VarDumper\Caster\ReflectionCaster', 'castMethod'], + 'ReflectionParameter' => ['Symfony\Component\VarDumper\Caster\ReflectionCaster', 'castParameter'], + 'ReflectionProperty' => ['Symfony\Component\VarDumper\Caster\ReflectionCaster', 'castProperty'], + 'ReflectionReference' => ['Symfony\Component\VarDumper\Caster\ReflectionCaster', 'castReference'], + 'ReflectionExtension' => ['Symfony\Component\VarDumper\Caster\ReflectionCaster', 'castExtension'], + 'ReflectionZendExtension' => ['Symfony\Component\VarDumper\Caster\ReflectionCaster', 'castZendExtension'], + + 'Doctrine\Common\Persistence\ObjectManager' => ['Symfony\Component\VarDumper\Caster\StubCaster', 'cutInternals'], + 'Doctrine\Common\Proxy\Proxy' => ['Symfony\Component\VarDumper\Caster\DoctrineCaster', 'castCommonProxy'], + 'Doctrine\ORM\Proxy\Proxy' => ['Symfony\Component\VarDumper\Caster\DoctrineCaster', 'castOrmProxy'], + 'Doctrine\ORM\PersistentCollection' => ['Symfony\Component\VarDumper\Caster\DoctrineCaster', 'castPersistentCollection'], + 'Doctrine\Persistence\ObjectManager' => ['Symfony\Component\VarDumper\Caster\StubCaster', 'cutInternals'], + + 'DOMException' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castException'], + 'DOMStringList' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castLength'], + 'DOMNameList' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castLength'], + 'DOMImplementation' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castImplementation'], + 'DOMImplementationList' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castLength'], + 'DOMNode' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castNode'], + 'DOMNameSpaceNode' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castNameSpaceNode'], + 'DOMDocument' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castDocument'], + 'DOMNodeList' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castLength'], + 'DOMNamedNodeMap' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castLength'], + 'DOMCharacterData' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castCharacterData'], + 'DOMAttr' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castAttr'], + 'DOMElement' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castElement'], + 'DOMText' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castText'], + 'DOMTypeinfo' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castTypeinfo'], + 'DOMDomError' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castDomError'], + 'DOMLocator' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castLocator'], + 'DOMDocumentType' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castDocumentType'], + 'DOMNotation' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castNotation'], + 'DOMEntity' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castEntity'], + 'DOMProcessingInstruction' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castProcessingInstruction'], + 'DOMXPath' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castXPath'], + + 'XMLReader' => ['Symfony\Component\VarDumper\Caster\XmlReaderCaster', 'castXmlReader'], + + 'ErrorException' => ['Symfony\Component\VarDumper\Caster\ExceptionCaster', 'castErrorException'], + 'Exception' => ['Symfony\Component\VarDumper\Caster\ExceptionCaster', 'castException'], + 'Error' => ['Symfony\Component\VarDumper\Caster\ExceptionCaster', 'castError'], + 'Symfony\Component\DependencyInjection\ContainerInterface' => ['Symfony\Component\VarDumper\Caster\StubCaster', 'cutInternals'], + 'Symfony\Component\EventDispatcher\EventDispatcherInterface' => ['Symfony\Component\VarDumper\Caster\StubCaster', 'cutInternals'], + 'Symfony\Component\HttpClient\CurlHttpClient' => ['Symfony\Component\VarDumper\Caster\SymfonyCaster', 'castHttpClient'], + 'Symfony\Component\HttpClient\NativeHttpClient' => ['Symfony\Component\VarDumper\Caster\SymfonyCaster', 'castHttpClient'], + 'Symfony\Component\HttpClient\Response\CurlResponse' => ['Symfony\Component\VarDumper\Caster\SymfonyCaster', 'castHttpClientResponse'], + 'Symfony\Component\HttpClient\Response\NativeResponse' => ['Symfony\Component\VarDumper\Caster\SymfonyCaster', 'castHttpClientResponse'], + 'Symfony\Component\HttpFoundation\Request' => ['Symfony\Component\VarDumper\Caster\SymfonyCaster', 'castRequest'], + 'Symfony\Component\VarDumper\Exception\ThrowingCasterException' => ['Symfony\Component\VarDumper\Caster\ExceptionCaster', 'castThrowingCasterException'], + 'Symfony\Component\VarDumper\Caster\TraceStub' => ['Symfony\Component\VarDumper\Caster\ExceptionCaster', 'castTraceStub'], + 'Symfony\Component\VarDumper\Caster\FrameStub' => ['Symfony\Component\VarDumper\Caster\ExceptionCaster', 'castFrameStub'], + 'Symfony\Component\VarDumper\Cloner\AbstractCloner' => ['Symfony\Component\VarDumper\Caster\StubCaster', 'cutInternals'], + 'Symfony\Component\ErrorHandler\Exception\SilencedErrorContext' => ['Symfony\Component\VarDumper\Caster\ExceptionCaster', 'castSilencedErrorContext'], + + 'Imagine\Image\ImageInterface' => ['Symfony\Component\VarDumper\Caster\ImagineCaster', 'castImage'], + + 'Ramsey\Uuid\UuidInterface' => ['Symfony\Component\VarDumper\Caster\UuidCaster', 'castRamseyUuid'], + + 'ProxyManager\Proxy\ProxyInterface' => ['Symfony\Component\VarDumper\Caster\ProxyManagerCaster', 'castProxy'], + 'PHPUnit_Framework_MockObject_MockObject' => ['Symfony\Component\VarDumper\Caster\StubCaster', 'cutInternals'], + 'PHPUnit\Framework\MockObject\MockObject' => ['Symfony\Component\VarDumper\Caster\StubCaster', 'cutInternals'], + 'PHPUnit\Framework\MockObject\Stub' => ['Symfony\Component\VarDumper\Caster\StubCaster', 'cutInternals'], + 'Prophecy\Prophecy\ProphecySubjectInterface' => ['Symfony\Component\VarDumper\Caster\StubCaster', 'cutInternals'], + 'Mockery\MockInterface' => ['Symfony\Component\VarDumper\Caster\StubCaster', 'cutInternals'], + + 'PDO' => ['Symfony\Component\VarDumper\Caster\PdoCaster', 'castPdo'], + 'PDOStatement' => ['Symfony\Component\VarDumper\Caster\PdoCaster', 'castPdoStatement'], + + 'AMQPConnection' => ['Symfony\Component\VarDumper\Caster\AmqpCaster', 'castConnection'], + 'AMQPChannel' => ['Symfony\Component\VarDumper\Caster\AmqpCaster', 'castChannel'], + 'AMQPQueue' => ['Symfony\Component\VarDumper\Caster\AmqpCaster', 'castQueue'], + 'AMQPExchange' => ['Symfony\Component\VarDumper\Caster\AmqpCaster', 'castExchange'], + 'AMQPEnvelope' => ['Symfony\Component\VarDumper\Caster\AmqpCaster', 'castEnvelope'], + + 'ArrayObject' => ['Symfony\Component\VarDumper\Caster\SplCaster', 'castArrayObject'], + 'ArrayIterator' => ['Symfony\Component\VarDumper\Caster\SplCaster', 'castArrayIterator'], + 'SplDoublyLinkedList' => ['Symfony\Component\VarDumper\Caster\SplCaster', 'castDoublyLinkedList'], + 'SplFileInfo' => ['Symfony\Component\VarDumper\Caster\SplCaster', 'castFileInfo'], + 'SplFileObject' => ['Symfony\Component\VarDumper\Caster\SplCaster', 'castFileObject'], + 'SplFixedArray' => ['Symfony\Component\VarDumper\Caster\SplCaster', 'castFixedArray'], + 'SplHeap' => ['Symfony\Component\VarDumper\Caster\SplCaster', 'castHeap'], + 'SplObjectStorage' => ['Symfony\Component\VarDumper\Caster\SplCaster', 'castObjectStorage'], + 'SplPriorityQueue' => ['Symfony\Component\VarDumper\Caster\SplCaster', 'castHeap'], + 'OuterIterator' => ['Symfony\Component\VarDumper\Caster\SplCaster', 'castOuterIterator'], + 'WeakReference' => ['Symfony\Component\VarDumper\Caster\SplCaster', 'castWeakReference'], + + 'Redis' => ['Symfony\Component\VarDumper\Caster\RedisCaster', 'castRedis'], + 'RedisArray' => ['Symfony\Component\VarDumper\Caster\RedisCaster', 'castRedisArray'], + 'RedisCluster' => ['Symfony\Component\VarDumper\Caster\RedisCaster', 'castRedisCluster'], + + 'DateTimeInterface' => ['Symfony\Component\VarDumper\Caster\DateCaster', 'castDateTime'], + 'DateInterval' => ['Symfony\Component\VarDumper\Caster\DateCaster', 'castInterval'], + 'DateTimeZone' => ['Symfony\Component\VarDumper\Caster\DateCaster', 'castTimeZone'], + 'DatePeriod' => ['Symfony\Component\VarDumper\Caster\DateCaster', 'castPeriod'], + + 'GMP' => ['Symfony\Component\VarDumper\Caster\GmpCaster', 'castGmp'], + + 'MessageFormatter' => ['Symfony\Component\VarDumper\Caster\IntlCaster', 'castMessageFormatter'], + 'NumberFormatter' => ['Symfony\Component\VarDumper\Caster\IntlCaster', 'castNumberFormatter'], + 'IntlTimeZone' => ['Symfony\Component\VarDumper\Caster\IntlCaster', 'castIntlTimeZone'], + 'IntlCalendar' => ['Symfony\Component\VarDumper\Caster\IntlCaster', 'castIntlCalendar'], + 'IntlDateFormatter' => ['Symfony\Component\VarDumper\Caster\IntlCaster', 'castIntlDateFormatter'], + + 'Memcached' => ['Symfony\Component\VarDumper\Caster\MemcachedCaster', 'castMemcached'], + + 'Ds\Collection' => ['Symfony\Component\VarDumper\Caster\DsCaster', 'castCollection'], + 'Ds\Map' => ['Symfony\Component\VarDumper\Caster\DsCaster', 'castMap'], + 'Ds\Pair' => ['Symfony\Component\VarDumper\Caster\DsCaster', 'castPair'], + 'Symfony\Component\VarDumper\Caster\DsPairStub' => ['Symfony\Component\VarDumper\Caster\DsCaster', 'castPairStub'], + + ':curl' => ['Symfony\Component\VarDumper\Caster\ResourceCaster', 'castCurl'], + ':dba' => ['Symfony\Component\VarDumper\Caster\ResourceCaster', 'castDba'], + ':dba persistent' => ['Symfony\Component\VarDumper\Caster\ResourceCaster', 'castDba'], + ':gd' => ['Symfony\Component\VarDumper\Caster\ResourceCaster', 'castGd'], + ':mysql link' => ['Symfony\Component\VarDumper\Caster\ResourceCaster', 'castMysqlLink'], + ':pgsql large object' => ['Symfony\Component\VarDumper\Caster\PgSqlCaster', 'castLargeObject'], + ':pgsql link' => ['Symfony\Component\VarDumper\Caster\PgSqlCaster', 'castLink'], + ':pgsql link persistent' => ['Symfony\Component\VarDumper\Caster\PgSqlCaster', 'castLink'], + ':pgsql result' => ['Symfony\Component\VarDumper\Caster\PgSqlCaster', 'castResult'], + ':process' => ['Symfony\Component\VarDumper\Caster\ResourceCaster', 'castProcess'], + ':stream' => ['Symfony\Component\VarDumper\Caster\ResourceCaster', 'castStream'], + ':OpenSSL X.509' => ['Symfony\Component\VarDumper\Caster\ResourceCaster', 'castOpensslX509'], + ':persistent stream' => ['Symfony\Component\VarDumper\Caster\ResourceCaster', 'castStream'], + ':stream-context' => ['Symfony\Component\VarDumper\Caster\ResourceCaster', 'castStreamContext'], + ':xml' => ['Symfony\Component\VarDumper\Caster\XmlResourceCaster', 'castXml'], + ]; + + protected $maxItems = 2500; + protected $maxString = -1; + protected $minDepth = 1; + + private $casters = []; + private $prevErrorHandler; + private $classInfo = []; + private $filter = 0; + + /** + * @param callable[]|null $casters A map of casters + * + * @see addCasters + */ + public function __construct(array $casters = null) + { + if (null === $casters) { + $casters = static::$defaultCasters; + } + $this->addCasters($casters); + } + + /** + * Adds casters for resources and objects. + * + * Maps resources or objects types to a callback. + * Types are in the key, with a callable caster for value. + * Resource types are to be prefixed with a `:`, + * see e.g. static::$defaultCasters. + * + * @param callable[] $casters A map of casters + */ + public function addCasters(array $casters) + { + foreach ($casters as $type => $callback) { + $this->casters[$type][] = $callback; + } + } + + /** + * Sets the maximum number of items to clone past the minimum depth in nested structures. + */ + public function setMaxItems(int $maxItems) + { + $this->maxItems = $maxItems; + } + + /** + * Sets the maximum cloned length for strings. + */ + public function setMaxString(int $maxString) + { + $this->maxString = $maxString; + } + + /** + * Sets the minimum tree depth where we are guaranteed to clone all the items. After this + * depth is reached, only setMaxItems items will be cloned. + */ + public function setMinDepth(int $minDepth) + { + $this->minDepth = $minDepth; + } + + /** + * Clones a PHP variable. + * + * @param mixed $var Any PHP variable + * @param int $filter A bit field of Caster::EXCLUDE_* constants + * + * @return Data The cloned variable represented by a Data object + */ + public function cloneVar($var, int $filter = 0) + { + $this->prevErrorHandler = set_error_handler(function ($type, $msg, $file, $line, $context = []) { + if (E_RECOVERABLE_ERROR === $type || E_USER_ERROR === $type) { + // Cloner never dies + throw new \ErrorException($msg, 0, $type, $file, $line); + } + + if ($this->prevErrorHandler) { + return ($this->prevErrorHandler)($type, $msg, $file, $line, $context); + } + + return false; + }); + $this->filter = $filter; + + if ($gc = gc_enabled()) { + gc_disable(); + } + try { + return new Data($this->doClone($var)); + } finally { + if ($gc) { + gc_enable(); + } + restore_error_handler(); + $this->prevErrorHandler = null; + } + } + + /** + * Effectively clones the PHP variable. + * + * @param mixed $var Any PHP variable + * + * @return array The cloned variable represented in an array + */ + abstract protected function doClone($var); + + /** + * Casts an object to an array representation. + * + * @param bool $isNested True if the object is nested in the dumped structure + * + * @return array The object casted as array + */ + protected function castObject(Stub $stub, bool $isNested) + { + $obj = $stub->value; + $class = $stub->class; + + if (isset($class[15]) && "\0" === $class[15] && 0 === strpos($class, "class@anonymous\x00")) { + $stub->class = get_parent_class($class).'@anonymous'; + } + if (isset($this->classInfo[$class])) { + list($i, $parents, $hasDebugInfo, $fileInfo) = $this->classInfo[$class]; + } else { + $i = 2; + $parents = [$class]; + $hasDebugInfo = method_exists($class, '__debugInfo'); + + foreach (class_parents($class) as $p) { + $parents[] = $p; + ++$i; + } + foreach (class_implements($class) as $p) { + $parents[] = $p; + ++$i; + } + $parents[] = '*'; + + $r = new \ReflectionClass($class); + $fileInfo = $r->isInternal() || $r->isSubclassOf(Stub::class) ? [] : [ + 'file' => $r->getFileName(), + 'line' => $r->getStartLine(), + ]; + + $this->classInfo[$class] = [$i, $parents, $hasDebugInfo, $fileInfo]; + } + + $stub->attr += $fileInfo; + $a = Caster::castObject($obj, $class, $hasDebugInfo); + + try { + while ($i--) { + if (!empty($this->casters[$p = $parents[$i]])) { + foreach ($this->casters[$p] as $callback) { + $a = $callback($obj, $a, $stub, $isNested, $this->filter); + } + } + } + } catch (\Exception $e) { + $a = [(Stub::TYPE_OBJECT === $stub->type ? Caster::PREFIX_VIRTUAL : '').'⚠' => new ThrowingCasterException($e)] + $a; + } + + return $a; + } + + /** + * Casts a resource to an array representation. + * + * @param bool $isNested True if the object is nested in the dumped structure + * + * @return array The resource casted as array + */ + protected function castResource(Stub $stub, bool $isNested) + { + $a = []; + $res = $stub->value; + $type = $stub->class; + + try { + if (!empty($this->casters[':'.$type])) { + foreach ($this->casters[':'.$type] as $callback) { + $a = $callback($res, $a, $stub, $isNested, $this->filter); + } + } + } catch (\Exception $e) { + $a = [(Stub::TYPE_OBJECT === $stub->type ? Caster::PREFIX_VIRTUAL : '').'⚠' => new ThrowingCasterException($e)] + $a; + } + + return $a; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Cloner/ClonerInterface.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Cloner/ClonerInterface.php new file mode 100644 index 0000000..7ed287a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Cloner/ClonerInterface.php @@ -0,0 +1,27 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Cloner; + +/** + * @author Nicolas Grekas + */ +interface ClonerInterface +{ + /** + * Clones a PHP variable. + * + * @param mixed $var Any PHP variable + * + * @return Data The cloned variable represented by a Data object + */ + public function cloneVar($var); +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Cloner/Cursor.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Cloner/Cursor.php new file mode 100644 index 0000000..5b0542f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Cloner/Cursor.php @@ -0,0 +1,43 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Cloner; + +/** + * Represents the current state of a dumper while dumping. + * + * @author Nicolas Grekas + */ +class Cursor +{ + const HASH_INDEXED = Stub::ARRAY_INDEXED; + const HASH_ASSOC = Stub::ARRAY_ASSOC; + const HASH_OBJECT = Stub::TYPE_OBJECT; + const HASH_RESOURCE = Stub::TYPE_RESOURCE; + + public $depth = 0; + public $refIndex = 0; + public $softRefTo = 0; + public $softRefCount = 0; + public $softRefHandle = 0; + public $hardRefTo = 0; + public $hardRefCount = 0; + public $hardRefHandle = 0; + public $hashType; + public $hashKey; + public $hashKeyIsBinary; + public $hashIndex = 0; + public $hashLength = 0; + public $hashCut = 0; + public $stop = false; + public $attr = []; + public $skipChildren = false; +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Cloner/Data.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Cloner/Data.php new file mode 100644 index 0000000..66f43c9 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Cloner/Data.php @@ -0,0 +1,451 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Cloner; + +use Symfony\Component\VarDumper\Caster\Caster; +use Symfony\Component\VarDumper\Dumper\ContextProvider\SourceContextProvider; + +/** + * @author Nicolas Grekas + */ +class Data implements \ArrayAccess, \Countable, \IteratorAggregate +{ + private $data; + private $position = 0; + private $key = 0; + private $maxDepth = 20; + private $maxItemsPerDepth = -1; + private $useRefHandles = -1; + private $context = []; + + /** + * @param array $data An array as returned by ClonerInterface::cloneVar() + */ + public function __construct(array $data) + { + $this->data = $data; + } + + /** + * @return string|null The type of the value + */ + public function getType() + { + $item = $this->data[$this->position][$this->key]; + + if ($item instanceof Stub && Stub::TYPE_REF === $item->type && !$item->position) { + $item = $item->value; + } + if (!$item instanceof Stub) { + return \gettype($item); + } + if (Stub::TYPE_STRING === $item->type) { + return 'string'; + } + if (Stub::TYPE_ARRAY === $item->type) { + return 'array'; + } + if (Stub::TYPE_OBJECT === $item->type) { + return $item->class; + } + if (Stub::TYPE_RESOURCE === $item->type) { + return $item->class.' resource'; + } + + return null; + } + + /** + * @param array|bool $recursive Whether values should be resolved recursively or not + * + * @return string|int|float|bool|array|Data[]|null A native representation of the original value + */ + public function getValue($recursive = false) + { + $item = $this->data[$this->position][$this->key]; + + if ($item instanceof Stub && Stub::TYPE_REF === $item->type && !$item->position) { + $item = $item->value; + } + if (!($item = $this->getStub($item)) instanceof Stub) { + return $item; + } + if (Stub::TYPE_STRING === $item->type) { + return $item->value; + } + + $children = $item->position ? $this->data[$item->position] : []; + + foreach ($children as $k => $v) { + if ($recursive && !($v = $this->getStub($v)) instanceof Stub) { + continue; + } + $children[$k] = clone $this; + $children[$k]->key = $k; + $children[$k]->position = $item->position; + + if ($recursive) { + if (Stub::TYPE_REF === $v->type && ($v = $this->getStub($v->value)) instanceof Stub) { + $recursive = (array) $recursive; + if (isset($recursive[$v->position])) { + continue; + } + $recursive[$v->position] = true; + } + $children[$k] = $children[$k]->getValue($recursive); + } + } + + return $children; + } + + /** + * @return int + */ + public function count() + { + return \count($this->getValue()); + } + + /** + * @return \Traversable + */ + public function getIterator() + { + if (!\is_array($value = $this->getValue())) { + throw new \LogicException(sprintf('"%s" object holds non-iterable type "%s".', self::class, \gettype($value))); + } + + yield from $value; + } + + public function __get(string $key) + { + if (null !== $data = $this->seek($key)) { + $item = $this->getStub($data->data[$data->position][$data->key]); + + return $item instanceof Stub || [] === $item ? $data : $item; + } + + return null; + } + + /** + * @return bool + */ + public function __isset(string $key) + { + return null !== $this->seek($key); + } + + /** + * @return bool + */ + public function offsetExists($key) + { + return $this->__isset($key); + } + + public function offsetGet($key) + { + return $this->__get($key); + } + + public function offsetSet($key, $value) + { + throw new \BadMethodCallException(self::class.' objects are immutable.'); + } + + public function offsetUnset($key) + { + throw new \BadMethodCallException(self::class.' objects are immutable.'); + } + + /** + * @return string + */ + public function __toString() + { + $value = $this->getValue(); + + if (!\is_array($value)) { + return (string) $value; + } + + return sprintf('%s (count=%d)', $this->getType(), \count($value)); + } + + /** + * Returns a depth limited clone of $this. + * + * @return static + */ + public function withMaxDepth(int $maxDepth) + { + $data = clone $this; + $data->maxDepth = (int) $maxDepth; + + return $data; + } + + /** + * Limits the number of elements per depth level. + * + * @return static + */ + public function withMaxItemsPerDepth(int $maxItemsPerDepth) + { + $data = clone $this; + $data->maxItemsPerDepth = (int) $maxItemsPerDepth; + + return $data; + } + + /** + * Enables/disables objects' identifiers tracking. + * + * @param bool $useRefHandles False to hide global ref. handles + * + * @return static + */ + public function withRefHandles(bool $useRefHandles) + { + $data = clone $this; + $data->useRefHandles = $useRefHandles ? -1 : 0; + + return $data; + } + + /** + * @return static + */ + public function withContext(array $context) + { + $data = clone $this; + $data->context = $context; + + return $data; + } + + /** + * Seeks to a specific key in nested data structures. + * + * @param string|int $key The key to seek to + * + * @return static|null Null if the key is not set + */ + public function seek($key) + { + $item = $this->data[$this->position][$this->key]; + + if ($item instanceof Stub && Stub::TYPE_REF === $item->type && !$item->position) { + $item = $item->value; + } + if (!($item = $this->getStub($item)) instanceof Stub || !$item->position) { + return null; + } + $keys = [$key]; + + switch ($item->type) { + case Stub::TYPE_OBJECT: + $keys[] = Caster::PREFIX_DYNAMIC.$key; + $keys[] = Caster::PREFIX_PROTECTED.$key; + $keys[] = Caster::PREFIX_VIRTUAL.$key; + $keys[] = "\0$item->class\0$key"; + // no break + case Stub::TYPE_ARRAY: + case Stub::TYPE_RESOURCE: + break; + default: + return null; + } + + $data = null; + $children = $this->data[$item->position]; + + foreach ($keys as $key) { + if (isset($children[$key]) || \array_key_exists($key, $children)) { + $data = clone $this; + $data->key = $key; + $data->position = $item->position; + break; + } + } + + return $data; + } + + /** + * Dumps data with a DumperInterface dumper. + */ + public function dump(DumperInterface $dumper) + { + $refs = [0]; + $cursor = new Cursor(); + + if ($cursor->attr = $this->context[SourceContextProvider::class] ?? []) { + $cursor->attr['if_links'] = true; + $cursor->hashType = -1; + $dumper->dumpScalar($cursor, 'default', '^'); + $cursor->attr = ['if_links' => true]; + $dumper->dumpScalar($cursor, 'default', ' '); + $cursor->hashType = 0; + } + + $this->dumpItem($dumper, $cursor, $refs, $this->data[$this->position][$this->key]); + } + + /** + * Depth-first dumping of items. + * + * @param mixed $item A Stub object or the original value being dumped + */ + private function dumpItem(DumperInterface $dumper, Cursor $cursor, array &$refs, $item) + { + $cursor->refIndex = 0; + $cursor->softRefTo = $cursor->softRefHandle = $cursor->softRefCount = 0; + $cursor->hardRefTo = $cursor->hardRefHandle = $cursor->hardRefCount = 0; + $firstSeen = true; + + if (!$item instanceof Stub) { + $cursor->attr = []; + $type = \gettype($item); + if ($item && 'array' === $type) { + $item = $this->getStub($item); + } + } elseif (Stub::TYPE_REF === $item->type) { + if ($item->handle) { + if (!isset($refs[$r = $item->handle - (PHP_INT_MAX >> 1)])) { + $cursor->refIndex = $refs[$r] = $cursor->refIndex ?: ++$refs[0]; + } else { + $firstSeen = false; + } + $cursor->hardRefTo = $refs[$r]; + $cursor->hardRefHandle = $this->useRefHandles & $item->handle; + $cursor->hardRefCount = $item->refCount; + } + $cursor->attr = $item->attr; + $type = $item->class ?: \gettype($item->value); + $item = $this->getStub($item->value); + } + if ($item instanceof Stub) { + if ($item->refCount) { + if (!isset($refs[$r = $item->handle])) { + $cursor->refIndex = $refs[$r] = $cursor->refIndex ?: ++$refs[0]; + } else { + $firstSeen = false; + } + $cursor->softRefTo = $refs[$r]; + } + $cursor->softRefHandle = $this->useRefHandles & $item->handle; + $cursor->softRefCount = $item->refCount; + $cursor->attr = $item->attr; + $cut = $item->cut; + + if ($item->position && $firstSeen) { + $children = $this->data[$item->position]; + + if ($cursor->stop) { + if ($cut >= 0) { + $cut += \count($children); + } + $children = []; + } + } else { + $children = []; + } + switch ($item->type) { + case Stub::TYPE_STRING: + $dumper->dumpString($cursor, $item->value, Stub::STRING_BINARY === $item->class, $cut); + break; + + case Stub::TYPE_ARRAY: + $item = clone $item; + $item->type = $item->class; + $item->class = $item->value; + // no break + case Stub::TYPE_OBJECT: + case Stub::TYPE_RESOURCE: + $withChildren = $children && $cursor->depth !== $this->maxDepth && $this->maxItemsPerDepth; + $dumper->enterHash($cursor, $item->type, $item->class, $withChildren); + if ($withChildren) { + if ($cursor->skipChildren) { + $withChildren = false; + $cut = -1; + } else { + $cut = $this->dumpChildren($dumper, $cursor, $refs, $children, $cut, $item->type, null !== $item->class); + } + } elseif ($children && 0 <= $cut) { + $cut += \count($children); + } + $cursor->skipChildren = false; + $dumper->leaveHash($cursor, $item->type, $item->class, $withChildren, $cut); + break; + + default: + throw new \RuntimeException(sprintf('Unexpected Stub type: "%s".', $item->type)); + } + } elseif ('array' === $type) { + $dumper->enterHash($cursor, Cursor::HASH_INDEXED, 0, false); + $dumper->leaveHash($cursor, Cursor::HASH_INDEXED, 0, false, 0); + } elseif ('string' === $type) { + $dumper->dumpString($cursor, $item, false, 0); + } else { + $dumper->dumpScalar($cursor, $type, $item); + } + } + + /** + * Dumps children of hash structures. + * + * @return int The final number of removed items + */ + private function dumpChildren(DumperInterface $dumper, Cursor $parentCursor, array &$refs, array $children, int $hashCut, int $hashType, bool $dumpKeys): int + { + $cursor = clone $parentCursor; + ++$cursor->depth; + $cursor->hashType = $hashType; + $cursor->hashIndex = 0; + $cursor->hashLength = \count($children); + $cursor->hashCut = $hashCut; + foreach ($children as $key => $child) { + $cursor->hashKeyIsBinary = isset($key[0]) && !preg_match('//u', $key); + $cursor->hashKey = $dumpKeys ? $key : null; + $this->dumpItem($dumper, $cursor, $refs, $child); + if (++$cursor->hashIndex === $this->maxItemsPerDepth || $cursor->stop) { + $parentCursor->stop = true; + + return $hashCut >= 0 ? $hashCut + $cursor->hashLength - $cursor->hashIndex : $hashCut; + } + } + + return $hashCut; + } + + private function getStub($item) + { + if (!$item || !\is_array($item)) { + return $item; + } + + $stub = new Stub(); + $stub->type = Stub::TYPE_ARRAY; + foreach ($item as $stub->class => $stub->position) { + } + if (isset($item[0])) { + $stub->cut = $item[0]; + } + $stub->value = $stub->cut + ($stub->position ? \count($this->data[$stub->position]) : 0); + + return $stub; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Cloner/DumperInterface.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Cloner/DumperInterface.php new file mode 100644 index 0000000..6d60b72 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Cloner/DumperInterface.php @@ -0,0 +1,56 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Cloner; + +/** + * DumperInterface used by Data objects. + * + * @author Nicolas Grekas + */ +interface DumperInterface +{ + /** + * Dumps a scalar value. + * + * @param string $type The PHP type of the value being dumped + * @param string|int|float|bool $value The scalar value being dumped + */ + public function dumpScalar(Cursor $cursor, string $type, $value); + + /** + * Dumps a string. + * + * @param string $str The string being dumped + * @param bool $bin Whether $str is UTF-8 or binary encoded + * @param int $cut The number of characters $str has been cut by + */ + public function dumpString(Cursor $cursor, string $str, bool $bin, int $cut); + + /** + * Dumps while entering an hash. + * + * @param int $type A Cursor::HASH_* const for the type of hash + * @param string|int $class The object class, resource type or array count + * @param bool $hasChild When the dump of the hash has child item + */ + public function enterHash(Cursor $cursor, int $type, $class, bool $hasChild); + + /** + * Dumps while leaving an hash. + * + * @param int $type A Cursor::HASH_* const for the type of hash + * @param string|int $class The object class, resource type or array count + * @param bool $hasChild When the dump of the hash has child item + * @param int $cut The number of items the hash has been cut by + */ + public function leaveHash(Cursor $cursor, int $type, $class, bool $hasChild, int $cut); +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Cloner/Stub.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Cloner/Stub.php new file mode 100644 index 0000000..7f6d05d --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Cloner/Stub.php @@ -0,0 +1,67 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Cloner; + +/** + * Represents the main properties of a PHP variable. + * + * @author Nicolas Grekas + */ +class Stub +{ + const TYPE_REF = 1; + const TYPE_STRING = 2; + const TYPE_ARRAY = 3; + const TYPE_OBJECT = 4; + const TYPE_RESOURCE = 5; + + const STRING_BINARY = 1; + const STRING_UTF8 = 2; + + const ARRAY_ASSOC = 1; + const ARRAY_INDEXED = 2; + + public $type = self::TYPE_REF; + public $class = ''; + public $value; + public $cut = 0; + public $handle = 0; + public $refCount = 0; + public $position = 0; + public $attr = []; + + private static $defaultProperties = []; + + /** + * @internal + */ + public function __sleep(): array + { + $properties = []; + + if (!isset(self::$defaultProperties[$c = static::class])) { + self::$defaultProperties[$c] = get_class_vars($c); + + foreach ((new \ReflectionClass($c))->getStaticProperties() as $k => $v) { + unset(self::$defaultProperties[$c][$k]); + } + } + + foreach (self::$defaultProperties[$c] as $k => $v) { + if ($this->$k !== $v) { + $properties[] = $k; + } + } + + return $properties; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Cloner/VarCloner.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Cloner/VarCloner.php new file mode 100644 index 0000000..b5bd252 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Cloner/VarCloner.php @@ -0,0 +1,284 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Cloner; + +/** + * @author Nicolas Grekas + */ +class VarCloner extends AbstractCloner +{ + private static $gid; + private static $arrayCache = []; + + /** + * {@inheritdoc} + */ + protected function doClone($var) + { + $len = 1; // Length of $queue + $pos = 0; // Number of cloned items past the minimum depth + $refsCounter = 0; // Hard references counter + $queue = [[$var]]; // This breadth-first queue is the return value + $hardRefs = []; // Map of original zval ids to stub objects + $objRefs = []; // Map of original object handles to their stub object counterpart + $objects = []; // Keep a ref to objects to ensure their handle cannot be reused while cloning + $resRefs = []; // Map of original resource handles to their stub object counterpart + $values = []; // Map of stub objects' ids to original values + $maxItems = $this->maxItems; + $maxString = $this->maxString; + $minDepth = $this->minDepth; + $currentDepth = 0; // Current tree depth + $currentDepthFinalIndex = 0; // Final $queue index for current tree depth + $minimumDepthReached = 0 === $minDepth; // Becomes true when minimum tree depth has been reached + $cookie = (object) []; // Unique object used to detect hard references + $a = null; // Array cast for nested structures + $stub = null; // Stub capturing the main properties of an original item value + // or null if the original value is used directly + + if (!$gid = self::$gid) { + $gid = self::$gid = md5(random_bytes(6)); // Unique string used to detect the special $GLOBALS variable + } + $arrayStub = new Stub(); + $arrayStub->type = Stub::TYPE_ARRAY; + $fromObjCast = false; + + for ($i = 0; $i < $len; ++$i) { + // Detect when we move on to the next tree depth + if ($i > $currentDepthFinalIndex) { + ++$currentDepth; + $currentDepthFinalIndex = $len - 1; + if ($currentDepth >= $minDepth) { + $minimumDepthReached = true; + } + } + + $refs = $vals = $queue[$i]; + foreach ($vals as $k => $v) { + // $v is the original value or a stub object in case of hard references + + if (\PHP_VERSION_ID >= 70400) { + $zvalIsRef = null !== \ReflectionReference::fromArrayElement($vals, $k); + } else { + $refs[$k] = $cookie; + $zvalIsRef = $vals[$k] === $cookie; + } + + if ($zvalIsRef) { + $vals[$k] = &$stub; // Break hard references to make $queue completely + unset($stub); // independent from the original structure + if ($v instanceof Stub && isset($hardRefs[spl_object_id($v)])) { + $vals[$k] = $refs[$k] = $v; + if ($v->value instanceof Stub && (Stub::TYPE_OBJECT === $v->value->type || Stub::TYPE_RESOURCE === $v->value->type)) { + ++$v->value->refCount; + } + ++$v->refCount; + continue; + } + $refs[$k] = $vals[$k] = new Stub(); + $refs[$k]->value = $v; + $h = spl_object_id($refs[$k]); + $hardRefs[$h] = &$refs[$k]; + $values[$h] = $v; + $vals[$k]->handle = ++$refsCounter; + } + // Create $stub when the original value $v can not be used directly + // If $v is a nested structure, put that structure in array $a + switch (true) { + case null === $v: + case \is_bool($v): + case \is_int($v): + case \is_float($v): + continue 2; + + case \is_string($v): + if ('' === $v) { + continue 2; + } + if (!preg_match('//u', $v)) { + $stub = new Stub(); + $stub->type = Stub::TYPE_STRING; + $stub->class = Stub::STRING_BINARY; + if (0 <= $maxString && 0 < $cut = \strlen($v) - $maxString) { + $stub->cut = $cut; + $stub->value = substr($v, 0, -$cut); + } else { + $stub->value = $v; + } + } elseif (0 <= $maxString && isset($v[1 + ($maxString >> 2)]) && 0 < $cut = mb_strlen($v, 'UTF-8') - $maxString) { + $stub = new Stub(); + $stub->type = Stub::TYPE_STRING; + $stub->class = Stub::STRING_UTF8; + $stub->cut = $cut; + $stub->value = mb_substr($v, 0, $maxString, 'UTF-8'); + } else { + continue 2; + } + $a = null; + break; + + case \is_array($v): + if (!$v) { + continue 2; + } + $stub = $arrayStub; + $stub->class = Stub::ARRAY_INDEXED; + + $j = -1; + foreach ($v as $gk => $gv) { + if ($gk !== ++$j) { + $stub->class = Stub::ARRAY_ASSOC; + break; + } + } + $a = $v; + + if (Stub::ARRAY_ASSOC === $stub->class) { + // Copies of $GLOBALS have very strange behavior, + // let's detect them with some black magic + $a[$gid] = true; + + // Happens with copies of $GLOBALS + if (isset($v[$gid])) { + unset($v[$gid]); + $a = []; + foreach ($v as $gk => &$gv) { + $a[$gk] = &$gv; + } + unset($gv); + } else { + $a = $v; + } + } + break; + + case \is_object($v): + case $v instanceof \__PHP_Incomplete_Class: + if (empty($objRefs[$h = spl_object_id($v)])) { + $stub = new Stub(); + $stub->type = Stub::TYPE_OBJECT; + $stub->class = \get_class($v); + $stub->value = $v; + $stub->handle = $h; + $a = $this->castObject($stub, 0 < $i); + if ($v !== $stub->value) { + if (Stub::TYPE_OBJECT !== $stub->type || null === $stub->value) { + break; + } + $stub->handle = $h = spl_object_id($stub->value); + } + $stub->value = null; + if (0 <= $maxItems && $maxItems <= $pos && $minimumDepthReached) { + $stub->cut = \count($a); + $a = null; + } + } + if (empty($objRefs[$h])) { + $objRefs[$h] = $stub; + $objects[] = $v; + } else { + $stub = $objRefs[$h]; + ++$stub->refCount; + $a = null; + } + break; + + default: // resource + if (empty($resRefs[$h = (int) $v])) { + $stub = new Stub(); + $stub->type = Stub::TYPE_RESOURCE; + if ('Unknown' === $stub->class = @get_resource_type($v)) { + $stub->class = 'Closed'; + } + $stub->value = $v; + $stub->handle = $h; + $a = $this->castResource($stub, 0 < $i); + $stub->value = null; + if (0 <= $maxItems && $maxItems <= $pos && $minimumDepthReached) { + $stub->cut = \count($a); + $a = null; + } + } + if (empty($resRefs[$h])) { + $resRefs[$h] = $stub; + } else { + $stub = $resRefs[$h]; + ++$stub->refCount; + $a = null; + } + break; + } + + if ($a) { + if (!$minimumDepthReached || 0 > $maxItems) { + $queue[$len] = $a; + $stub->position = $len++; + } elseif ($pos < $maxItems) { + if ($maxItems < $pos += \count($a)) { + $a = \array_slice($a, 0, $maxItems - $pos); + if ($stub->cut >= 0) { + $stub->cut += $pos - $maxItems; + } + } + $queue[$len] = $a; + $stub->position = $len++; + } elseif ($stub->cut >= 0) { + $stub->cut += \count($a); + $stub->position = 0; + } + } + + if ($arrayStub === $stub) { + if ($arrayStub->cut) { + $stub = [$arrayStub->cut, $arrayStub->class => $arrayStub->position]; + $arrayStub->cut = 0; + } elseif (isset(self::$arrayCache[$arrayStub->class][$arrayStub->position])) { + $stub = self::$arrayCache[$arrayStub->class][$arrayStub->position]; + } else { + self::$arrayCache[$arrayStub->class][$arrayStub->position] = $stub = [$arrayStub->class => $arrayStub->position]; + } + } + + if ($zvalIsRef) { + $refs[$k]->value = $stub; + } else { + $vals[$k] = $stub; + } + } + + if ($fromObjCast) { + $fromObjCast = false; + $refs = $vals; + $vals = []; + $j = -1; + foreach ($queue[$i] as $k => $v) { + foreach ([$k => true] as $gk => $gv) { + } + if ($gk !== $k) { + $vals = (object) $vals; + $vals->{$k} = $refs[++$j]; + $vals = (array) $vals; + } else { + $vals[$k] = $refs[++$j]; + } + } + } + + $queue[$i] = $vals; + } + + foreach ($values as $h => $v) { + $hardRefs[$h] = $v; + } + + return $queue; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Command/Descriptor/CliDescriptor.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Command/Descriptor/CliDescriptor.php new file mode 100644 index 0000000..dc77d03 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Command/Descriptor/CliDescriptor.php @@ -0,0 +1,88 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Command\Descriptor; + +use Symfony\Component\Console\Formatter\OutputFormatterStyle; +use Symfony\Component\Console\Input\ArrayInput; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Style\SymfonyStyle; +use Symfony\Component\VarDumper\Cloner\Data; +use Symfony\Component\VarDumper\Dumper\CliDumper; + +/** + * Describe collected data clones for cli output. + * + * @author Maxime Steinhausser + * + * @final + */ +class CliDescriptor implements DumpDescriptorInterface +{ + private $dumper; + private $lastIdentifier; + private $supportsHref; + + public function __construct(CliDumper $dumper) + { + $this->dumper = $dumper; + $this->supportsHref = method_exists(OutputFormatterStyle::class, 'setHref'); + } + + public function describe(OutputInterface $output, Data $data, array $context, int $clientId): void + { + $io = $output instanceof SymfonyStyle ? $output : new SymfonyStyle(new ArrayInput([]), $output); + $this->dumper->setColors($output->isDecorated()); + + $rows = [['date', date('r', $context['timestamp'])]]; + $lastIdentifier = $this->lastIdentifier; + $this->lastIdentifier = $clientId; + + $section = "Received from client #$clientId"; + if (isset($context['request'])) { + $request = $context['request']; + $this->lastIdentifier = $request['identifier']; + $section = sprintf('%s %s', $request['method'], $request['uri']); + if ($controller = $request['controller']) { + $rows[] = ['controller', rtrim($this->dumper->dump($controller, true), "\n")]; + } + } elseif (isset($context['cli'])) { + $this->lastIdentifier = $context['cli']['identifier']; + $section = '$ '.$context['cli']['command_line']; + } + + if ($this->lastIdentifier !== $lastIdentifier) { + $io->section($section); + } + + if (isset($context['source'])) { + $source = $context['source']; + $sourceInfo = sprintf('%s on line %d', $source['name'], $source['line']); + $fileLink = $source['file_link'] ?? null; + if ($this->supportsHref && $fileLink) { + $sourceInfo = sprintf('%s', $fileLink, $sourceInfo); + } + $rows[] = ['source', $sourceInfo]; + $file = $source['file_relative'] ?? $source['file']; + $rows[] = ['file', $file]; + } + + $io->table([], $rows); + + if (!$this->supportsHref && isset($fileLink)) { + $io->writeln(['Open source in your IDE/browser:', $fileLink]); + $io->newLine(); + } + + $this->dumper->dump($data); + $io->newLine(); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Command/Descriptor/DumpDescriptorInterface.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Command/Descriptor/DumpDescriptorInterface.php new file mode 100644 index 0000000..267d27b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Command/Descriptor/DumpDescriptorInterface.php @@ -0,0 +1,23 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Command\Descriptor; + +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\VarDumper\Cloner\Data; + +/** + * @author Maxime Steinhausser + */ +interface DumpDescriptorInterface +{ + public function describe(OutputInterface $output, Data $data, array $context, int $clientId): void; +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Command/Descriptor/HtmlDescriptor.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Command/Descriptor/HtmlDescriptor.php new file mode 100644 index 0000000..35a203b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Command/Descriptor/HtmlDescriptor.php @@ -0,0 +1,119 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Command\Descriptor; + +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\VarDumper\Cloner\Data; +use Symfony\Component\VarDumper\Dumper\HtmlDumper; + +/** + * Describe collected data clones for html output. + * + * @author Maxime Steinhausser + * + * @final + */ +class HtmlDescriptor implements DumpDescriptorInterface +{ + private $dumper; + private $initialized = false; + + public function __construct(HtmlDumper $dumper) + { + $this->dumper = $dumper; + } + + public function describe(OutputInterface $output, Data $data, array $context, int $clientId): void + { + if (!$this->initialized) { + $styles = file_get_contents(__DIR__.'/../../Resources/css/htmlDescriptor.css'); + $scripts = file_get_contents(__DIR__.'/../../Resources/js/htmlDescriptor.js'); + $output->writeln(""); + $this->initialized = true; + } + + $title = '-'; + if (isset($context['request'])) { + $request = $context['request']; + $controller = "{$this->dumper->dump($request['controller'], true, ['maxDepth' => 0])}"; + $title = sprintf('%s %s', $request['method'], $uri = $request['uri'], $uri); + $dedupIdentifier = $request['identifier']; + } elseif (isset($context['cli'])) { + $title = '$ '.$context['cli']['command_line']; + $dedupIdentifier = $context['cli']['identifier']; + } else { + $dedupIdentifier = uniqid('', true); + } + + $sourceDescription = ''; + if (isset($context['source'])) { + $source = $context['source']; + $projectDir = $source['project_dir'] ?? null; + $sourceDescription = sprintf('%s on line %d', $source['name'], $source['line']); + if (isset($source['file_link'])) { + $sourceDescription = sprintf('%s', $source['file_link'], $sourceDescription); + } + } + + $isoDate = $this->extractDate($context, 'c'); + $tags = array_filter([ + 'controller' => $controller ?? null, + 'project dir' => $projectDir ?? null, + ]); + + $output->writeln(<< +
    +
    +

    $title

    + +
    + {$this->renderTags($tags)} +
    +
    +

    + $sourceDescription +

    + {$this->dumper->dump($data, true)} +
    + +HTML + ); + } + + private function extractDate(array $context, string $format = 'r'): string + { + return date($format, $context['timestamp']); + } + + private function renderTags(array $tags): string + { + if (!$tags) { + return ''; + } + + $renderedTags = ''; + foreach ($tags as $key => $value) { + $renderedTags .= sprintf('
  1. %s%s
  2. ', $key, $value); + } + + return << +
      + $renderedTags +
    +

    wQH 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 literal 0 HcmV?d00001 diff --git a/soc/2020/daily_report/archive/app/cache/views/28/286fc7bc95fe4fb5c37c4ef04348658468a3d513a3ac0533b4d6d26dd5946814.php b/soc/2020/daily_report/archive/app/cache/views/28/286fc7bc95fe4fb5c37c4ef04348658468a3d513a3ac0533b4d6d26dd5946814.php new file mode 100644 index 0000000..6af34fe --- /dev/null +++ b/soc/2020/daily_report/archive/app/cache/views/28/286fc7bc95fe4fb5c37c4ef04348658468a3d513a3ac0533b4d6d26dd5946814.php @@ -0,0 +1,90 @@ +source = $this->getSourceContext(); + + $this->parent = false; + + $this->blocks = [ + ]; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + // line 1 + echo "

w`Ao`B8FfP>nd2WTiT*&L> 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�d261qc>pomd%U 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 literal 0 HcmV?d00001 diff --git a/soc/2020/daily_report/archive/app/assets/webfonts/fa-regular-400.eot b/soc/2020/daily_report/archive/app/assets/webfonts/fa-regular-400.eot new file mode 100644 index 0000000000000000000000000000000000000000..38cf2517a4da71a05f8e83723cdffce45ebc3319 GIT binary patch literal 34390 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 HJNN#7)2yBs literal 0 HcmV?d00001 diff --git a/soc/2020/daily_report/archive/app/assets/webfonts/fa-regular-400.svg b/soc/2020/daily_report/archive/app/assets/webfonts/fa-regular-400.svg new file mode 100644 index 0000000..48634a9 --- /dev/null +++ b/soc/2020/daily_report/archive/app/assets/webfonts/fa-regular-400.svg @@ -0,0 +1,803 @@ + + + + + +Created by FontForge 20190801 at Mon Mar 23 10:45:51 2020 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soc/2020/daily_report/archive/app/assets/webfonts/fa-regular-400.ttf b/soc/2020/daily_report/archive/app/assets/webfonts/fa-regular-400.ttf new file mode 100644 index 0000000000000000000000000000000000000000..abe99e20c38a23e95295917d6a5cdb49a8489eb8 GIT binary patch literal 34092 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 bMX1cpc?scf@6G-KdBTf-{AinZ?ft(1jXHOb literal 0 HcmV?d00001 diff --git a/soc/2020/daily_report/archive/app/assets/webfonts/fa-regular-400.woff b/soc/2020/daily_report/archive/app/assets/webfonts/fa-regular-400.woff new file mode 100644 index 0000000000000000000000000000000000000000..24de566a5c97289a86ce0c238a195da0d3251263 GIT binary patch literal 16800 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 @5E5^jow38oGT;HT{*=6I5BP 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 literal 0 HcmV?d00001 diff --git a/soc/2020/daily_report/archive/app/assets/webfonts/fa-regular-400.woff2 b/soc/2020/daily_report/archive/app/assets/webfonts/fa-regular-400.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..7e0118e526eb53511cb57e7cfaf515784fee4345 GIT binary patch literal 13584 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 W8!VVrwhAGt$p&j$lnnbyiU9!e_&Ztv literal 0 HcmV?d00001 diff --git a/soc/2020/daily_report/archive/app/assets/webfonts/fa-solid-900.eot b/soc/2020/daily_report/archive/app/assets/webfonts/fa-solid-900.eot new file mode 100644 index 0000000000000000000000000000000000000000..d3b77c223afc9a0a1af914936219da2b001a010f GIT binary patch literal 202902 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

+HTML; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Command/ServerDumpCommand.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Command/ServerDumpCommand.php new file mode 100644 index 0000000..c8a61da --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Command/ServerDumpCommand.php @@ -0,0 +1,99 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Command; + +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Exception\InvalidArgumentException; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Style\SymfonyStyle; +use Symfony\Component\VarDumper\Cloner\Data; +use Symfony\Component\VarDumper\Command\Descriptor\CliDescriptor; +use Symfony\Component\VarDumper\Command\Descriptor\DumpDescriptorInterface; +use Symfony\Component\VarDumper\Command\Descriptor\HtmlDescriptor; +use Symfony\Component\VarDumper\Dumper\CliDumper; +use Symfony\Component\VarDumper\Dumper\HtmlDumper; +use Symfony\Component\VarDumper\Server\DumpServer; + +/** + * Starts a dump server to collect and output dumps on a single place with multiple formats support. + * + * @author Maxime Steinhausser + * + * @final + */ +class ServerDumpCommand extends Command +{ + protected static $defaultName = 'server:dump'; + + private $server; + + /** @var DumpDescriptorInterface[] */ + private $descriptors; + + public function __construct(DumpServer $server, array $descriptors = []) + { + $this->server = $server; + $this->descriptors = $descriptors + [ + 'cli' => new CliDescriptor(new CliDumper()), + 'html' => new HtmlDescriptor(new HtmlDumper()), + ]; + + parent::__construct(); + } + + protected function configure() + { + $availableFormats = implode(', ', array_keys($this->descriptors)); + + $this + ->addOption('format', null, InputOption::VALUE_REQUIRED, sprintf('The output format (%s)', $availableFormats), 'cli') + ->setDescription('Starts a dump server that collects and displays dumps in a single place') + ->setHelp(<<<'EOF' +%command.name% starts a dump server that collects and displays +dumps in a single place for debugging you application: + + php %command.full_name% + +You can consult dumped data in HTML format in your browser by providing the --format=html option +and redirecting the output to a file: + + php %command.full_name% --format="html" > dump.html + +EOF + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output): int + { + $io = new SymfonyStyle($input, $output); + $format = $input->getOption('format'); + + if (!$descriptor = $this->descriptors[$format] ?? null) { + throw new InvalidArgumentException(sprintf('Unsupported format "%s".', $format)); + } + + $errorIo = $io->getErrorStyle(); + $errorIo->title('Symfony Var Dumper Server'); + + $this->server->start(); + + $errorIo->success(sprintf('Server listening on %s', $this->server->getHost())); + $errorIo->comment('Quit the server with CONTROL-C.'); + + $this->server->listen(function (Data $data, array $context, int $clientId) use ($descriptor, $io) { + $descriptor->describe($io, $data, $context, $clientId); + }); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/AbstractDumper.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/AbstractDumper.php new file mode 100644 index 0000000..1a00038 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/AbstractDumper.php @@ -0,0 +1,204 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Dumper; + +use Symfony\Component\VarDumper\Cloner\Data; +use Symfony\Component\VarDumper\Cloner\DumperInterface; + +/** + * Abstract mechanism for dumping a Data object. + * + * @author Nicolas Grekas + */ +abstract class AbstractDumper implements DataDumperInterface, DumperInterface +{ + const DUMP_LIGHT_ARRAY = 1; + const DUMP_STRING_LENGTH = 2; + const DUMP_COMMA_SEPARATOR = 4; + const DUMP_TRAILING_COMMA = 8; + + public static $defaultOutput = 'php://output'; + + protected $line = ''; + protected $lineDumper; + protected $outputStream; + protected $decimalPoint; // This is locale dependent + protected $indentPad = ' '; + protected $flags; + + private $charset = ''; + + /** + * @param callable|resource|string|null $output A line dumper callable, an opened stream or an output path, defaults to static::$defaultOutput + * @param string|null $charset The default character encoding to use for non-UTF8 strings + * @param int $flags A bit field of static::DUMP_* constants to fine tune dumps representation + */ + public function __construct($output = null, string $charset = null, int $flags = 0) + { + $this->flags = $flags; + $this->setCharset($charset ?: ini_get('php.output_encoding') ?: ini_get('default_charset') ?: 'UTF-8'); + $this->decimalPoint = localeconv(); + $this->decimalPoint = $this->decimalPoint['decimal_point']; + $this->setOutput($output ?: static::$defaultOutput); + if (!$output && \is_string(static::$defaultOutput)) { + static::$defaultOutput = $this->outputStream; + } + } + + /** + * Sets the output destination of the dumps. + * + * @param callable|resource|string $output A line dumper callable, an opened stream or an output path + * + * @return callable|resource|string The previous output destination + */ + public function setOutput($output) + { + $prev = null !== $this->outputStream ? $this->outputStream : $this->lineDumper; + + if (\is_callable($output)) { + $this->outputStream = null; + $this->lineDumper = $output; + } else { + if (\is_string($output)) { + $output = fopen($output, 'wb'); + } + $this->outputStream = $output; + $this->lineDumper = [$this, 'echoLine']; + } + + return $prev; + } + + /** + * Sets the default character encoding to use for non-UTF8 strings. + * + * @return string The previous charset + */ + public function setCharset(string $charset) + { + $prev = $this->charset; + + $charset = strtoupper($charset); + $charset = null === $charset || 'UTF-8' === $charset || 'UTF8' === $charset ? 'CP1252' : $charset; + + $this->charset = $charset; + + return $prev; + } + + /** + * Sets the indentation pad string. + * + * @param string $pad A string that will be prepended to dumped lines, repeated by nesting level + * + * @return string The previous indent pad + */ + public function setIndentPad(string $pad) + { + $prev = $this->indentPad; + $this->indentPad = $pad; + + return $prev; + } + + /** + * Dumps a Data object. + * + * @param callable|resource|string|true|null $output A line dumper callable, an opened stream, an output path or true to return the dump + * + * @return string|null The dump as string when $output is true + */ + public function dump(Data $data, $output = null) + { + $this->decimalPoint = localeconv(); + $this->decimalPoint = $this->decimalPoint['decimal_point']; + + if ($locale = $this->flags & (self::DUMP_COMMA_SEPARATOR | self::DUMP_TRAILING_COMMA) ? setlocale(LC_NUMERIC, 0) : null) { + setlocale(LC_NUMERIC, 'C'); + } + + if ($returnDump = true === $output) { + $output = fopen('php://memory', 'r+b'); + } + if ($output) { + $prevOutput = $this->setOutput($output); + } + try { + $data->dump($this); + $this->dumpLine(-1); + + if ($returnDump) { + $result = stream_get_contents($output, -1, 0); + fclose($output); + + return $result; + } + } finally { + if ($output) { + $this->setOutput($prevOutput); + } + if ($locale) { + setlocale(LC_NUMERIC, $locale); + } + } + + return null; + } + + /** + * Dumps the current line. + * + * @param int $depth The recursive depth in the dumped structure for the line being dumped, + * or -1 to signal the end-of-dump to the line dumper callable + */ + protected function dumpLine(int $depth) + { + ($this->lineDumper)($this->line, $depth, $this->indentPad); + $this->line = ''; + } + + /** + * Generic line dumper callback. + */ + protected function echoLine(string $line, int $depth, string $indentPad) + { + if (-1 !== $depth) { + fwrite($this->outputStream, str_repeat($indentPad, $depth).$line."\n"); + } + } + + /** + * Converts a non-UTF-8 string to UTF-8. + * + * @return string|null The string converted to UTF-8 + */ + protected function utf8Encode(?string $s) + { + if (null === $s || preg_match('//u', $s)) { + return $s; + } + + if (!\function_exists('iconv')) { + throw new \RuntimeException('Unable to convert a non-UTF-8 string to UTF-8: required function iconv() does not exist. You should install ext-iconv or symfony/polyfill-iconv.'); + } + + if (false !== $c = @iconv($this->charset, 'UTF-8', $s)) { + return $c; + } + if ('CP1252' !== $this->charset && false !== $c = @iconv('CP1252', 'UTF-8', $s)) { + return $c; + } + + return iconv('CP850', 'UTF-8', $s); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/CliDumper.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/CliDumper.php new file mode 100644 index 0000000..326ce1d --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/CliDumper.php @@ -0,0 +1,636 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Dumper; + +use Symfony\Component\VarDumper\Cloner\Cursor; +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * CliDumper dumps variables for command line output. + * + * @author Nicolas Grekas + */ +class CliDumper extends AbstractDumper +{ + public static $defaultColors; + public static $defaultOutput = 'php://stdout'; + + protected $colors; + protected $maxStringWidth = 0; + protected $styles = [ + // See http://en.wikipedia.org/wiki/ANSI_escape_code#graphics + 'default' => '0;38;5;208', + 'num' => '1;38;5;38', + 'const' => '1;38;5;208', + 'str' => '1;38;5;113', + 'note' => '38;5;38', + 'ref' => '38;5;247', + 'public' => '', + 'protected' => '', + 'private' => '', + 'meta' => '38;5;170', + 'key' => '38;5;113', + 'index' => '38;5;38', + ]; + + protected static $controlCharsRx = '/[\x00-\x1F\x7F]+/'; + protected static $controlCharsMap = [ + "\t" => '\t', + "\n" => '\n', + "\v" => '\v', + "\f" => '\f', + "\r" => '\r', + "\033" => '\e', + ]; + + protected $collapseNextHash = false; + protected $expandNextHash = false; + + private $displayOptions = [ + 'fileLinkFormat' => null, + ]; + + private $handlesHrefGracefully; + + /** + * {@inheritdoc} + */ + public function __construct($output = null, string $charset = null, int $flags = 0) + { + parent::__construct($output, $charset, $flags); + + if ('\\' === \DIRECTORY_SEPARATOR && !$this->isWindowsTrueColor()) { + // Use only the base 16 xterm colors when using ANSICON or standard Windows 10 CLI + $this->setStyles([ + 'default' => '31', + 'num' => '1;34', + 'const' => '1;31', + 'str' => '1;32', + 'note' => '34', + 'ref' => '1;30', + 'meta' => '35', + 'key' => '32', + 'index' => '34', + ]); + } + + $this->displayOptions['fileLinkFormat'] = ini_get('xdebug.file_link_format') ?: get_cfg_var('xdebug.file_link_format') ?: 'file://%f#L%l'; + } + + /** + * Enables/disables colored output. + */ + public function setColors(bool $colors) + { + $this->colors = $colors; + } + + /** + * Sets the maximum number of characters per line for dumped strings. + */ + public function setMaxStringWidth(int $maxStringWidth) + { + $this->maxStringWidth = $maxStringWidth; + } + + /** + * Configures styles. + * + * @param array $styles A map of style names to style definitions + */ + public function setStyles(array $styles) + { + $this->styles = $styles + $this->styles; + } + + /** + * Configures display options. + * + * @param array $displayOptions A map of display options to customize the behavior + */ + public function setDisplayOptions(array $displayOptions) + { + $this->displayOptions = $displayOptions + $this->displayOptions; + } + + /** + * {@inheritdoc} + */ + public function dumpScalar(Cursor $cursor, string $type, $value) + { + $this->dumpKey($cursor); + + $style = 'const'; + $attr = $cursor->attr; + + switch ($type) { + case 'default': + $style = 'default'; + break; + + case 'integer': + $style = 'num'; + break; + + case 'double': + $style = 'num'; + + switch (true) { + case INF === $value: $value = 'INF'; break; + case -INF === $value: $value = '-INF'; break; + case is_nan($value): $value = 'NAN'; break; + default: + $value = (string) $value; + if (false === strpos($value, $this->decimalPoint)) { + $value .= $this->decimalPoint.'0'; + } + break; + } + break; + + case 'NULL': + $value = 'null'; + break; + + case 'boolean': + $value = $value ? 'true' : 'false'; + break; + + default: + $attr += ['value' => $this->utf8Encode($value)]; + $value = $this->utf8Encode($type); + break; + } + + $this->line .= $this->style($style, $value, $attr); + + $this->endValue($cursor); + } + + /** + * {@inheritdoc} + */ + public function dumpString(Cursor $cursor, string $str, bool $bin, int $cut) + { + $this->dumpKey($cursor); + $attr = $cursor->attr; + + if ($bin) { + $str = $this->utf8Encode($str); + } + if ('' === $str) { + $this->line .= '""'; + $this->endValue($cursor); + } else { + $attr += [ + 'length' => 0 <= $cut ? mb_strlen($str, 'UTF-8') + $cut : 0, + 'binary' => $bin, + ]; + $str = explode("\n", $str); + if (isset($str[1]) && !isset($str[2]) && !isset($str[1][0])) { + unset($str[1]); + $str[0] .= "\n"; + } + $m = \count($str) - 1; + $i = $lineCut = 0; + + if (self::DUMP_STRING_LENGTH & $this->flags) { + $this->line .= '('.$attr['length'].') '; + } + if ($bin) { + $this->line .= 'b'; + } + + if ($m) { + $this->line .= '"""'; + $this->dumpLine($cursor->depth); + } else { + $this->line .= '"'; + } + + foreach ($str as $str) { + if ($i < $m) { + $str .= "\n"; + } + if (0 < $this->maxStringWidth && $this->maxStringWidth < $len = mb_strlen($str, 'UTF-8')) { + $str = mb_substr($str, 0, $this->maxStringWidth, 'UTF-8'); + $lineCut = $len - $this->maxStringWidth; + } + if ($m && 0 < $cursor->depth) { + $this->line .= $this->indentPad; + } + if ('' !== $str) { + $this->line .= $this->style('str', $str, $attr); + } + if ($i++ == $m) { + if ($m) { + if ('' !== $str) { + $this->dumpLine($cursor->depth); + if (0 < $cursor->depth) { + $this->line .= $this->indentPad; + } + } + $this->line .= '"""'; + } else { + $this->line .= '"'; + } + if ($cut < 0) { + $this->line .= '…'; + $lineCut = 0; + } elseif ($cut) { + $lineCut += $cut; + } + } + if ($lineCut) { + $this->line .= '…'.$lineCut; + $lineCut = 0; + } + + if ($i > $m) { + $this->endValue($cursor); + } else { + $this->dumpLine($cursor->depth); + } + } + } + } + + /** + * {@inheritdoc} + */ + public function enterHash(Cursor $cursor, int $type, $class, bool $hasChild) + { + $this->dumpKey($cursor); + $attr = $cursor->attr; + + if ($this->collapseNextHash) { + $cursor->skipChildren = true; + $this->collapseNextHash = $hasChild = false; + } + + $class = $this->utf8Encode($class); + if (Cursor::HASH_OBJECT === $type) { + $prefix = $class && 'stdClass' !== $class ? $this->style('note', $class, $attr).(empty($attr['cut_hash']) ? ' {' : '') : '{'; + } elseif (Cursor::HASH_RESOURCE === $type) { + $prefix = $this->style('note', $class.' resource', $attr).($hasChild ? ' {' : ' '); + } else { + $prefix = $class && !(self::DUMP_LIGHT_ARRAY & $this->flags) ? $this->style('note', 'array:'.$class, $attr).' [' : '['; + } + + if (($cursor->softRefCount || 0 < $cursor->softRefHandle) && empty($attr['cut_hash'])) { + $prefix .= $this->style('ref', (Cursor::HASH_RESOURCE === $type ? '@' : '#').(0 < $cursor->softRefHandle ? $cursor->softRefHandle : $cursor->softRefTo), ['count' => $cursor->softRefCount]); + } elseif ($cursor->hardRefTo && !$cursor->refIndex && $class) { + $prefix .= $this->style('ref', '&'.$cursor->hardRefTo, ['count' => $cursor->hardRefCount]); + } elseif (!$hasChild && Cursor::HASH_RESOURCE === $type) { + $prefix = substr($prefix, 0, -1); + } + + $this->line .= $prefix; + + if ($hasChild) { + $this->dumpLine($cursor->depth); + } + } + + /** + * {@inheritdoc} + */ + public function leaveHash(Cursor $cursor, int $type, $class, bool $hasChild, int $cut) + { + if (empty($cursor->attr['cut_hash'])) { + $this->dumpEllipsis($cursor, $hasChild, $cut); + $this->line .= Cursor::HASH_OBJECT === $type ? '}' : (Cursor::HASH_RESOURCE !== $type ? ']' : ($hasChild ? '}' : '')); + } + + $this->endValue($cursor); + } + + /** + * Dumps an ellipsis for cut children. + * + * @param bool $hasChild When the dump of the hash has child item + * @param int $cut The number of items the hash has been cut by + */ + protected function dumpEllipsis(Cursor $cursor, $hasChild, $cut) + { + if ($cut) { + $this->line .= ' …'; + if (0 < $cut) { + $this->line .= $cut; + } + if ($hasChild) { + $this->dumpLine($cursor->depth + 1); + } + } + } + + /** + * Dumps a key in a hash structure. + */ + protected function dumpKey(Cursor $cursor) + { + if (null !== $key = $cursor->hashKey) { + if ($cursor->hashKeyIsBinary) { + $key = $this->utf8Encode($key); + } + $attr = ['binary' => $cursor->hashKeyIsBinary]; + $bin = $cursor->hashKeyIsBinary ? 'b' : ''; + $style = 'key'; + switch ($cursor->hashType) { + default: + case Cursor::HASH_INDEXED: + if (self::DUMP_LIGHT_ARRAY & $this->flags) { + break; + } + $style = 'index'; + // no break + case Cursor::HASH_ASSOC: + if (\is_int($key)) { + $this->line .= $this->style($style, $key).' => '; + } else { + $this->line .= $bin.'"'.$this->style($style, $key).'" => '; + } + break; + + case Cursor::HASH_RESOURCE: + $key = "\0~\0".$key; + // no break + case Cursor::HASH_OBJECT: + if (!isset($key[0]) || "\0" !== $key[0]) { + $this->line .= '+'.$bin.$this->style('public', $key).': '; + } elseif (0 < strpos($key, "\0", 1)) { + $key = explode("\0", substr($key, 1), 2); + + switch ($key[0][0]) { + case '+': // User inserted keys + $attr['dynamic'] = true; + $this->line .= '+'.$bin.'"'.$this->style('public', $key[1], $attr).'": '; + break 2; + case '~': + $style = 'meta'; + if (isset($key[0][1])) { + parse_str(substr($key[0], 1), $attr); + $attr += ['binary' => $cursor->hashKeyIsBinary]; + } + break; + case '*': + $style = 'protected'; + $bin = '#'.$bin; + break; + default: + $attr['class'] = $key[0]; + $style = 'private'; + $bin = '-'.$bin; + break; + } + + if (isset($attr['collapse'])) { + if ($attr['collapse']) { + $this->collapseNextHash = true; + } else { + $this->expandNextHash = true; + } + } + + $this->line .= $bin.$this->style($style, $key[1], $attr).(isset($attr['separator']) ? $attr['separator'] : ': '); + } else { + // This case should not happen + $this->line .= '-'.$bin.'"'.$this->style('private', $key, ['class' => '']).'": '; + } + break; + } + + if ($cursor->hardRefTo) { + $this->line .= $this->style('ref', '&'.($cursor->hardRefCount ? $cursor->hardRefTo : ''), ['count' => $cursor->hardRefCount]).' '; + } + } + } + + /** + * Decorates a value with some style. + * + * @param string $style The type of style being applied + * @param string $value The value being styled + * @param array $attr Optional context information + * + * @return string The value with style decoration + */ + protected function style($style, $value, $attr = []) + { + if (null === $this->colors) { + $this->colors = $this->supportsColors(); + } + + if (null === $this->handlesHrefGracefully) { + $this->handlesHrefGracefully = 'JetBrains-JediTerm' !== getenv('TERMINAL_EMULATOR') && !getenv('KONSOLE_VERSION'); + } + + if (isset($attr['ellipsis'], $attr['ellipsis-type'])) { + $prefix = substr($value, 0, -$attr['ellipsis']); + if ('cli' === \PHP_SAPI && 'path' === $attr['ellipsis-type'] && isset($_SERVER[$pwd = '\\' === \DIRECTORY_SEPARATOR ? 'CD' : 'PWD']) && 0 === strpos($prefix, $_SERVER[$pwd])) { + $prefix = '.'.substr($prefix, \strlen($_SERVER[$pwd])); + } + if (!empty($attr['ellipsis-tail'])) { + $prefix .= substr($value, -$attr['ellipsis'], $attr['ellipsis-tail']); + $value = substr($value, -$attr['ellipsis'] + $attr['ellipsis-tail']); + } else { + $value = substr($value, -$attr['ellipsis']); + } + + $value = $this->style('default', $prefix).$this->style($style, $value); + + goto href; + } + + $map = static::$controlCharsMap; + $startCchr = $this->colors ? "\033[m\033[{$this->styles['default']}m" : ''; + $endCchr = $this->colors ? "\033[m\033[{$this->styles[$style]}m" : ''; + $value = preg_replace_callback(static::$controlCharsRx, function ($c) use ($map, $startCchr, $endCchr) { + $s = $startCchr; + $c = $c[$i = 0]; + do { + $s .= isset($map[$c[$i]]) ? $map[$c[$i]] : sprintf('\x%02X', \ord($c[$i])); + } while (isset($c[++$i])); + + return $s.$endCchr; + }, $value, -1, $cchrCount); + + if ($this->colors) { + if ($cchrCount && "\033" === $value[0]) { + $value = substr($value, \strlen($startCchr)); + } else { + $value = "\033[{$this->styles[$style]}m".$value; + } + if ($cchrCount && $endCchr === substr($value, -\strlen($endCchr))) { + $value = substr($value, 0, -\strlen($endCchr)); + } else { + $value .= "\033[{$this->styles['default']}m"; + } + } + + href: + if ($this->colors && $this->handlesHrefGracefully) { + if (isset($attr['file']) && $href = $this->getSourceLink($attr['file'], isset($attr['line']) ? $attr['line'] : 0)) { + if ('note' === $style) { + $value .= "\033]8;;{$href}\033\\^\033]8;;\033\\"; + } else { + $attr['href'] = $href; + } + } + if (isset($attr['href'])) { + $value = "\033]8;;{$attr['href']}\033\\{$value}\033]8;;\033\\"; + } + } elseif ($attr['if_links'] ?? false) { + return ''; + } + + return $value; + } + + /** + * @return bool Tells if the current output stream supports ANSI colors or not + */ + protected function supportsColors() + { + if ($this->outputStream !== static::$defaultOutput) { + return $this->hasColorSupport($this->outputStream); + } + if (null !== static::$defaultColors) { + return static::$defaultColors; + } + if (isset($_SERVER['argv'][1])) { + $colors = $_SERVER['argv']; + $i = \count($colors); + while (--$i > 0) { + if (isset($colors[$i][5])) { + switch ($colors[$i]) { + case '--ansi': + case '--color': + case '--color=yes': + case '--color=force': + case '--color=always': + return static::$defaultColors = true; + + case '--no-ansi': + case '--color=no': + case '--color=none': + case '--color=never': + return static::$defaultColors = false; + } + } + } + } + + $h = stream_get_meta_data($this->outputStream) + ['wrapper_type' => null]; + $h = 'Output' === $h['stream_type'] && 'PHP' === $h['wrapper_type'] ? fopen('php://stdout', 'wb') : $this->outputStream; + + return static::$defaultColors = $this->hasColorSupport($h); + } + + /** + * {@inheritdoc} + */ + protected function dumpLine(int $depth, bool $endOfValue = false) + { + if ($this->colors) { + $this->line = sprintf("\033[%sm%s\033[m", $this->styles['default'], $this->line); + } + parent::dumpLine($depth); + } + + protected function endValue(Cursor $cursor) + { + if (-1 === $cursor->hashType) { + return; + } + + if (Stub::ARRAY_INDEXED === $cursor->hashType || Stub::ARRAY_ASSOC === $cursor->hashType) { + if (self::DUMP_TRAILING_COMMA & $this->flags && 0 < $cursor->depth) { + $this->line .= ','; + } elseif (self::DUMP_COMMA_SEPARATOR & $this->flags && 1 < $cursor->hashLength - $cursor->hashIndex) { + $this->line .= ','; + } + } + + $this->dumpLine($cursor->depth, true); + } + + /** + * Returns true if the stream supports colorization. + * + * Reference: Composer\XdebugHandler\Process::supportsColor + * https://github.com/composer/xdebug-handler + * + * @param mixed $stream A CLI output stream + */ + private function hasColorSupport($stream): bool + { + if (!\is_resource($stream) || 'stream' !== get_resource_type($stream)) { + return false; + } + + // Follow https://no-color.org/ + if (isset($_SERVER['NO_COLOR']) || false !== getenv('NO_COLOR')) { + return false; + } + + if ('Hyper' === getenv('TERM_PROGRAM')) { + return true; + } + + if (\DIRECTORY_SEPARATOR === '\\') { + return (\function_exists('sapi_windows_vt100_support') + && @sapi_windows_vt100_support($stream)) + || false !== getenv('ANSICON') + || 'ON' === getenv('ConEmuANSI') + || 'xterm' === getenv('TERM'); + } + + return stream_isatty($stream); + } + + /** + * Returns true if the Windows terminal supports true color. + * + * Note that this does not check an output stream, but relies on environment + * variables from known implementations, or a PHP and Windows version that + * supports true color. + */ + private function isWindowsTrueColor(): bool + { + $result = 183 <= getenv('ANSICON_VER') + || 'ON' === getenv('ConEmuANSI') + || 'xterm' === getenv('TERM') + || 'Hyper' === getenv('TERM_PROGRAM'); + + if (!$result) { + $version = sprintf( + '%s.%s.%s', + PHP_WINDOWS_VERSION_MAJOR, + PHP_WINDOWS_VERSION_MINOR, + PHP_WINDOWS_VERSION_BUILD + ); + $result = $version >= '10.0.15063'; + } + + return $result; + } + + private function getSourceLink(string $file, int $line) + { + if ($fmt = $this->displayOptions['fileLinkFormat']) { + return \is_string($fmt) ? strtr($fmt, ['%f' => $file, '%l' => $line]) : ($fmt->format($file, $line) ?: 'file://'.$file.'#L'.$line); + } + + return false; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/ContextProvider/CliContextProvider.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/ContextProvider/CliContextProvider.php new file mode 100644 index 0000000..38f8789 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/ContextProvider/CliContextProvider.php @@ -0,0 +1,32 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Dumper\ContextProvider; + +/** + * Tries to provide context on CLI. + * + * @author Maxime Steinhausser + */ +final class CliContextProvider implements ContextProviderInterface +{ + public function getContext(): ?array + { + if ('cli' !== \PHP_SAPI) { + return null; + } + + return [ + 'command_line' => $commandLine = implode(' ', $_SERVER['argv'] ?? []), + 'identifier' => hash('crc32b', $commandLine.$_SERVER['REQUEST_TIME_FLOAT']), + ]; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/ContextProvider/ContextProviderInterface.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/ContextProvider/ContextProviderInterface.php new file mode 100644 index 0000000..38ef3b0 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/ContextProvider/ContextProviderInterface.php @@ -0,0 +1,25 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Dumper\ContextProvider; + +/** + * Interface to provide contextual data about dump data clones sent to a server. + * + * @author Maxime Steinhausser + */ +interface ContextProviderInterface +{ + /** + * @return array|null Context data or null if unable to provide any context + */ + public function getContext(): ?array; +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/ContextProvider/RequestContextProvider.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/ContextProvider/RequestContextProvider.php new file mode 100644 index 0000000..3684a47 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/ContextProvider/RequestContextProvider.php @@ -0,0 +1,51 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Dumper\ContextProvider; + +use Symfony\Component\HttpFoundation\RequestStack; +use Symfony\Component\VarDumper\Caster\ReflectionCaster; +use Symfony\Component\VarDumper\Cloner\VarCloner; + +/** + * Tries to provide context from a request. + * + * @author Maxime Steinhausser + */ +final class RequestContextProvider implements ContextProviderInterface +{ + private $requestStack; + private $cloner; + + public function __construct(RequestStack $requestStack) + { + $this->requestStack = $requestStack; + $this->cloner = new VarCloner(); + $this->cloner->setMaxItems(0); + $this->cloner->addCasters(ReflectionCaster::UNSET_CLOSURE_FILE_INFO); + } + + public function getContext(): ?array + { + if (null === $request = $this->requestStack->getCurrentRequest()) { + return null; + } + + $controller = $request->attributes->get('_controller'); + + return [ + 'uri' => $request->getUri(), + 'method' => $request->getMethod(), + 'controller' => $controller ? $this->cloner->cloneVar($controller) : $controller, + 'identifier' => spl_object_hash($request), + ]; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/ContextProvider/SourceContextProvider.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/ContextProvider/SourceContextProvider.php new file mode 100644 index 0000000..6f4caba --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/ContextProvider/SourceContextProvider.php @@ -0,0 +1,126 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Dumper\ContextProvider; + +use Symfony\Component\HttpKernel\Debug\FileLinkFormatter; +use Symfony\Component\VarDumper\Cloner\VarCloner; +use Symfony\Component\VarDumper\Dumper\HtmlDumper; +use Symfony\Component\VarDumper\VarDumper; +use Twig\Template; + +/** + * Tries to provide context from sources (class name, file, line, code excerpt, ...). + * + * @author Nicolas Grekas + * @author Maxime Steinhausser + */ +final class SourceContextProvider implements ContextProviderInterface +{ + private $limit; + private $charset; + private $projectDir; + private $fileLinkFormatter; + + public function __construct(string $charset = null, string $projectDir = null, FileLinkFormatter $fileLinkFormatter = null, int $limit = 9) + { + $this->charset = $charset; + $this->projectDir = $projectDir; + $this->fileLinkFormatter = $fileLinkFormatter; + $this->limit = $limit; + } + + public function getContext(): ?array + { + $trace = debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT | DEBUG_BACKTRACE_IGNORE_ARGS, $this->limit); + + $file = $trace[1]['file']; + $line = $trace[1]['line']; + $name = false; + $fileExcerpt = false; + + for ($i = 2; $i < $this->limit; ++$i) { + if (isset($trace[$i]['class'], $trace[$i]['function']) + && 'dump' === $trace[$i]['function'] + && VarDumper::class === $trace[$i]['class'] + ) { + $file = $trace[$i]['file'] ?? $file; + $line = $trace[$i]['line'] ?? $line; + + while (++$i < $this->limit) { + if (isset($trace[$i]['function'], $trace[$i]['file']) && empty($trace[$i]['class']) && 0 !== strpos($trace[$i]['function'], 'call_user_func')) { + $file = $trace[$i]['file']; + $line = $trace[$i]['line']; + + break; + } elseif (isset($trace[$i]['object']) && $trace[$i]['object'] instanceof Template) { + $template = $trace[$i]['object']; + $name = $template->getTemplateName(); + $src = method_exists($template, 'getSourceContext') ? $template->getSourceContext()->getCode() : (method_exists($template, 'getSource') ? $template->getSource() : false); + $info = $template->getDebugInfo(); + if (isset($info[$trace[$i - 1]['line']])) { + $line = $info[$trace[$i - 1]['line']]; + $file = method_exists($template, 'getSourceContext') ? $template->getSourceContext()->getPath() : null; + + if ($src) { + $src = explode("\n", $src); + $fileExcerpt = []; + + for ($i = max($line - 3, 1), $max = min($line + 3, \count($src)); $i <= $max; ++$i) { + $fileExcerpt[] = ''.$this->htmlEncode($src[$i - 1]).''; + } + + $fileExcerpt = '
    '.implode("\n", $fileExcerpt).'
'; + } + } + break; + } + } + break; + } + } + + if (false === $name) { + $name = str_replace('\\', '/', $file); + $name = substr($name, strrpos($name, '/') + 1); + } + + $context = ['name' => $name, 'file' => $file, 'line' => $line]; + $context['file_excerpt'] = $fileExcerpt; + + if (null !== $this->projectDir) { + $context['project_dir'] = $this->projectDir; + if (0 === strpos($file, $this->projectDir)) { + $context['file_relative'] = ltrim(substr($file, \strlen($this->projectDir)), \DIRECTORY_SEPARATOR); + } + } + + if ($this->fileLinkFormatter && $fileLink = $this->fileLinkFormatter->format($context['file'], $context['line'])) { + $context['file_link'] = $fileLink; + } + + return $context; + } + + private function htmlEncode(string $s): string + { + $html = ''; + + $dumper = new HtmlDumper(function ($line) use (&$html) { $html .= $line; }, $this->charset); + $dumper->setDumpHeader(''); + $dumper->setDumpBoundaries('', ''); + + $cloner = new VarCloner(); + $dumper->dump($cloner->cloneVar($s)); + + return substr(strip_tags($html), 1, -1); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/ContextualizedDumper.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/ContextualizedDumper.php new file mode 100644 index 0000000..7638417 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/ContextualizedDumper.php @@ -0,0 +1,43 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Dumper; + +use Symfony\Component\VarDumper\Cloner\Data; +use Symfony\Component\VarDumper\Dumper\ContextProvider\ContextProviderInterface; + +/** + * @author Kévin Thérage + */ +class ContextualizedDumper implements DataDumperInterface +{ + private $wrappedDumper; + private $contextProviders; + + /** + * @param ContextProviderInterface[] $contextProviders + */ + public function __construct(DataDumperInterface $wrappedDumper, array $contextProviders) + { + $this->wrappedDumper = $wrappedDumper; + $this->contextProviders = $contextProviders; + } + + public function dump(Data $data) + { + $context = []; + foreach ($this->contextProviders as $contextProvider) { + $context[\get_class($contextProvider)] = $contextProvider->getContext(); + } + + $this->wrappedDumper->dump($data->withContext($context)); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/DataDumperInterface.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/DataDumperInterface.php new file mode 100644 index 0000000..b173bcc --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/DataDumperInterface.php @@ -0,0 +1,24 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Dumper; + +use Symfony\Component\VarDumper\Cloner\Data; + +/** + * DataDumperInterface for dumping Data objects. + * + * @author Nicolas Grekas + */ +interface DataDumperInterface +{ + public function dump(Data $data); +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/HtmlDumper.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/HtmlDumper.php new file mode 100644 index 0000000..d89fecf --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/HtmlDumper.php @@ -0,0 +1,1004 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Dumper; + +use Symfony\Component\VarDumper\Cloner\Cursor; +use Symfony\Component\VarDumper\Cloner\Data; + +/** + * HtmlDumper dumps variables as HTML. + * + * @author Nicolas Grekas + */ +class HtmlDumper extends CliDumper +{ + public static $defaultOutput = 'php://output'; + + protected static $themes = [ + 'dark' => [ + 'default' => 'background-color:#18171B; color:#FF8400; line-height:1.2em; font:12px Menlo, Monaco, Consolas, monospace; word-wrap: break-word; white-space: pre-wrap; position:relative; z-index:99999; word-break: break-all', + 'num' => 'font-weight:bold; color:#1299DA', + 'const' => 'font-weight:bold', + 'str' => 'font-weight:bold; color:#56DB3A', + 'note' => 'color:#1299DA', + 'ref' => 'color:#A0A0A0', + 'public' => 'color:#FFFFFF', + 'protected' => 'color:#FFFFFF', + 'private' => 'color:#FFFFFF', + 'meta' => 'color:#B729D9', + 'key' => 'color:#56DB3A', + 'index' => 'color:#1299DA', + 'ellipsis' => 'color:#FF8400', + 'ns' => 'user-select:none;', + ], + 'light' => [ + 'default' => 'background:none; color:#CC7832; line-height:1.2em; font:12px Menlo, Monaco, Consolas, monospace; word-wrap: break-word; white-space: pre-wrap; position:relative; z-index:99999; word-break: break-all', + 'num' => 'font-weight:bold; color:#1299DA', + 'const' => 'font-weight:bold', + 'str' => 'font-weight:bold; color:#629755;', + 'note' => 'color:#6897BB', + 'ref' => 'color:#6E6E6E', + 'public' => 'color:#262626', + 'protected' => 'color:#262626', + 'private' => 'color:#262626', + 'meta' => 'color:#B729D9', + 'key' => 'color:#789339', + 'index' => 'color:#1299DA', + 'ellipsis' => 'color:#CC7832', + 'ns' => 'user-select:none;', + ], + ]; + + protected $dumpHeader; + protected $dumpPrefix = '
';
+    protected $dumpSuffix = '
'; + protected $dumpId = 'sf-dump'; + protected $colors = true; + protected $headerIsDumped = false; + protected $lastDepth = -1; + protected $styles; + + private $displayOptions = [ + 'maxDepth' => 1, + 'maxStringLength' => 160, + 'fileLinkFormat' => null, + ]; + private $extraDisplayOptions = []; + + /** + * {@inheritdoc} + */ + public function __construct($output = null, string $charset = null, int $flags = 0) + { + AbstractDumper::__construct($output, $charset, $flags); + $this->dumpId = 'sf-dump-'.mt_rand(); + $this->displayOptions['fileLinkFormat'] = ini_get('xdebug.file_link_format') ?: get_cfg_var('xdebug.file_link_format'); + $this->styles = static::$themes['dark'] ?? self::$themes['dark']; + } + + /** + * {@inheritdoc} + */ + public function setStyles(array $styles) + { + $this->headerIsDumped = false; + $this->styles = $styles + $this->styles; + } + + public function setTheme(string $themeName) + { + if (!isset(static::$themes[$themeName])) { + throw new \InvalidArgumentException(sprintf('Theme "%s" does not exist in class "%s".', $themeName, static::class)); + } + + $this->setStyles(static::$themes[$themeName]); + } + + /** + * Configures display options. + * + * @param array $displayOptions A map of display options to customize the behavior + */ + public function setDisplayOptions(array $displayOptions) + { + $this->headerIsDumped = false; + $this->displayOptions = $displayOptions + $this->displayOptions; + } + + /** + * Sets an HTML header that will be dumped once in the output stream. + * + * @param string $header An HTML string + */ + public function setDumpHeader($header) + { + $this->dumpHeader = $header; + } + + /** + * Sets an HTML prefix and suffix that will encapse every single dump. + * + * @param string $prefix The prepended HTML string + * @param string $suffix The appended HTML string + */ + public function setDumpBoundaries($prefix, $suffix) + { + $this->dumpPrefix = $prefix; + $this->dumpSuffix = $suffix; + } + + /** + * {@inheritdoc} + */ + public function dump(Data $data, $output = null, array $extraDisplayOptions = []) + { + $this->extraDisplayOptions = $extraDisplayOptions; + $result = parent::dump($data, $output); + $this->dumpId = 'sf-dump-'.mt_rand(); + + return $result; + } + + /** + * Dumps the HTML header. + */ + protected function getDumpHeader() + { + $this->headerIsDumped = null !== $this->outputStream ? $this->outputStream : $this->lineDumper; + + if (null !== $this->dumpHeader) { + return $this->dumpHeader; + } + + $line = str_replace('{$options}', json_encode($this->displayOptions, JSON_FORCE_OBJECT), <<<'EOHTML' +'.$this->dumpHeader; + } + + /** + * {@inheritdoc} + */ + public function dumpString(Cursor $cursor, string $str, bool $bin, int $cut) + { + if ('' === $str && isset($cursor->attr['img-data'], $cursor->attr['content-type'])) { + $this->dumpKey($cursor); + $this->line .= $this->style('default', $cursor->attr['img-size'] ?? '', []).' '; + $this->endValue($cursor); + $this->line .= $this->indentPad; + $this->line .= sprintf('', $cursor->attr['content-type'], base64_encode($cursor->attr['img-data'])); + $this->endValue($cursor); + } else { + parent::dumpString($cursor, $str, $bin, $cut); + } + } + + /** + * {@inheritdoc} + */ + public function enterHash(Cursor $cursor, int $type, $class, bool $hasChild) + { + if (Cursor::HASH_OBJECT === $type) { + $cursor->attr['depth'] = $cursor->depth; + } + parent::enterHash($cursor, $type, $class, false); + + if ($cursor->skipChildren) { + $cursor->skipChildren = false; + $eol = ' class=sf-dump-compact>'; + } elseif ($this->expandNextHash) { + $this->expandNextHash = false; + $eol = ' class=sf-dump-expanded>'; + } else { + $eol = '>'; + } + + if ($hasChild) { + $this->line .= 'refIndex) { + $r = Cursor::HASH_OBJECT !== $type ? 1 - (Cursor::HASH_RESOURCE !== $type) : 2; + $r .= $r && 0 < $cursor->softRefHandle ? $cursor->softRefHandle : $cursor->refIndex; + + $this->line .= sprintf(' id=%s-ref%s', $this->dumpId, $r); + } + $this->line .= $eol; + $this->dumpLine($cursor->depth); + } + } + + /** + * {@inheritdoc} + */ + public function leaveHash(Cursor $cursor, int $type, $class, bool $hasChild, int $cut) + { + $this->dumpEllipsis($cursor, $hasChild, $cut); + if ($hasChild) { + $this->line .= ''; + } + parent::leaveHash($cursor, $type, $class, $hasChild, 0); + } + + /** + * {@inheritdoc} + */ + protected function style($style, $value, $attr = []) + { + if ('' === $value) { + return ''; + } + + $v = esc($value); + + if ('ref' === $style) { + if (empty($attr['count'])) { + return sprintf('%s', $v); + } + $r = ('#' !== $v[0] ? 1 - ('@' !== $v[0]) : 2).substr($value, 1); + + return sprintf('%s', $this->dumpId, $r, 1 + $attr['count'], $v); + } + + if ('const' === $style && isset($attr['value'])) { + $style .= sprintf(' title="%s"', esc(is_scalar($attr['value']) ? $attr['value'] : json_encode($attr['value']))); + } elseif ('public' === $style) { + $style .= sprintf(' title="%s"', empty($attr['dynamic']) ? 'Public property' : 'Runtime added dynamic property'); + } elseif ('str' === $style && 1 < $attr['length']) { + $style .= sprintf(' title="%d%s characters"', $attr['length'], $attr['binary'] ? ' binary or non-UTF-8' : ''); + } elseif ('note' === $style && 0 < ($attr['depth'] ?? 0) && false !== $c = strrpos($value, '\\')) { + $style .= ' title=""'; + $attr += [ + 'ellipsis' => \strlen($value) - $c, + 'ellipsis-type' => 'note', + 'ellipsis-tail' => 1, + ]; + } elseif ('protected' === $style) { + $style .= ' title="Protected property"'; + } elseif ('meta' === $style && isset($attr['title'])) { + $style .= sprintf(' title="%s"', esc($this->utf8Encode($attr['title']))); + } elseif ('private' === $style) { + $style .= sprintf(' title="Private property defined in class: `%s`"', esc($this->utf8Encode($attr['class']))); + } + $map = static::$controlCharsMap; + + if (isset($attr['ellipsis'])) { + $class = 'sf-dump-ellipsis'; + if (isset($attr['ellipsis-type'])) { + $class = sprintf('"%s sf-dump-ellipsis-%s"', $class, $attr['ellipsis-type']); + } + $label = esc(substr($value, -$attr['ellipsis'])); + $style = str_replace(' title="', " title=\"$v\n", $style); + $v = sprintf('%s', $class, substr($v, 0, -\strlen($label))); + + if (!empty($attr['ellipsis-tail'])) { + $tail = \strlen(esc(substr($value, -$attr['ellipsis'], $attr['ellipsis-tail']))); + $v .= sprintf('%s%s', $class, substr($label, 0, $tail), substr($label, $tail)); + } else { + $v .= $label; + } + } + + $v = "".preg_replace_callback(static::$controlCharsRx, function ($c) use ($map) { + $s = $b = ''; + }, $v).''; + + if (isset($attr['file']) && $href = $this->getSourceLink($attr['file'], isset($attr['line']) ? $attr['line'] : 0)) { + $attr['href'] = $href; + } + if (isset($attr['href'])) { + $target = isset($attr['file']) ? '' : ' target="_blank"'; + $v = sprintf('%s', esc($this->utf8Encode($attr['href'])), $target, $v); + } + if (isset($attr['lang'])) { + $v = sprintf('%s', esc($attr['lang']), $v); + } + + return $v; + } + + /** + * {@inheritdoc} + */ + protected function dumpLine(int $depth, bool $endOfValue = false) + { + if (-1 === $this->lastDepth) { + $this->line = sprintf($this->dumpPrefix, $this->dumpId, $this->indentPad).$this->line; + } + if ($this->headerIsDumped !== (null !== $this->outputStream ? $this->outputStream : $this->lineDumper)) { + $this->line = $this->getDumpHeader().$this->line; + } + + if (-1 === $depth) { + $args = ['"'.$this->dumpId.'"']; + if ($this->extraDisplayOptions) { + $args[] = json_encode($this->extraDisplayOptions, JSON_FORCE_OBJECT); + } + // Replace is for BC + $this->line .= sprintf(str_replace('"%s"', '%s', $this->dumpSuffix), implode(', ', $args)); + } + $this->lastDepth = $depth; + + $this->line = mb_convert_encoding($this->line, 'HTML-ENTITIES', 'UTF-8'); + + if (-1 === $depth) { + AbstractDumper::dumpLine(0); + } + AbstractDumper::dumpLine($depth); + } + + private function getSourceLink(string $file, int $line) + { + $options = $this->extraDisplayOptions + $this->displayOptions; + + if ($fmt = $options['fileLinkFormat']) { + return \is_string($fmt) ? strtr($fmt, ['%f' => $file, '%l' => $line]) : $fmt->format($file, $line); + } + + return false; + } +} + +function esc($str) +{ + return htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/ServerDumper.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/ServerDumper.php new file mode 100644 index 0000000..94795bf --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Dumper/ServerDumper.php @@ -0,0 +1,53 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Dumper; + +use Symfony\Component\VarDumper\Cloner\Data; +use Symfony\Component\VarDumper\Dumper\ContextProvider\ContextProviderInterface; +use Symfony\Component\VarDumper\Server\Connection; + +/** + * ServerDumper forwards serialized Data clones to a server. + * + * @author Maxime Steinhausser + */ +class ServerDumper implements DataDumperInterface +{ + private $connection; + private $wrappedDumper; + + /** + * @param string $host The server host + * @param DataDumperInterface|null $wrappedDumper A wrapped instance used whenever we failed contacting the server + * @param ContextProviderInterface[] $contextProviders Context providers indexed by context name + */ + public function __construct(string $host, DataDumperInterface $wrappedDumper = null, array $contextProviders = []) + { + $this->connection = new Connection($host, $contextProviders); + $this->wrappedDumper = $wrappedDumper; + } + + public function getContextProviders(): array + { + return $this->connection->getContextProviders(); + } + + /** + * {@inheritdoc} + */ + public function dump(Data $data) + { + if (!$this->connection->write($data) && $this->wrappedDumper) { + $this->wrappedDumper->dump($data); + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Exception/ThrowingCasterException.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Exception/ThrowingCasterException.php new file mode 100644 index 0000000..122f0d3 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Exception/ThrowingCasterException.php @@ -0,0 +1,26 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Exception; + +/** + * @author Nicolas Grekas + */ +class ThrowingCasterException extends \Exception +{ + /** + * @param \Throwable $prev The exception thrown from the caster + */ + public function __construct(\Throwable $prev) + { + parent::__construct('Unexpected '.\get_class($prev).' thrown from a caster: '.$prev->getMessage(), 0, $prev); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/LICENSE b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/LICENSE new file mode 100644 index 0000000..684fbf9 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2014-2020 Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/README.md b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/README.md new file mode 100644 index 0000000..339f73e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/README.md @@ -0,0 +1,15 @@ +VarDumper Component +=================== + +The VarDumper component provides mechanisms for walking through any arbitrary +PHP variable. It provides a better `dump()` function that you can use instead +of `var_dump`. + +Resources +--------- + + * [Documentation](https://symfony.com/doc/current/components/var_dumper/introduction.html) + * [Contributing](https://symfony.com/doc/current/contributing/index.html) + * [Report issues](https://github.com/symfony/symfony/issues) and + [send Pull Requests](https://github.com/symfony/symfony/pulls) + in the [main Symfony repository](https://github.com/symfony/symfony) diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Resources/bin/var-dump-server b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Resources/bin/var-dump-server new file mode 100644 index 0000000..98c813a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Resources/bin/var-dump-server @@ -0,0 +1,63 @@ +#!/usr/bin/env php + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +/** + * Starts a dump server to collect and output dumps on a single place with multiple formats support. + * + * @author Maxime Steinhausser + */ + +use Psr\Log\LoggerInterface; +use Symfony\Component\Console\Application; +use Symfony\Component\Console\Input\ArgvInput; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Logger\ConsoleLogger; +use Symfony\Component\Console\Output\ConsoleOutput; +use Symfony\Component\VarDumper\Command\ServerDumpCommand; +use Symfony\Component\VarDumper\Server\DumpServer; + +function includeIfExists(string $file): bool +{ + return file_exists($file) && include $file; +} + +if ( + !includeIfExists(__DIR__ . '/../../../../autoload.php') && + !includeIfExists(__DIR__ . '/../../vendor/autoload.php') && + !includeIfExists(__DIR__ . '/../../../../../../vendor/autoload.php') +) { + fwrite(STDERR, 'Install dependencies using Composer.'.PHP_EOL); + exit(1); +} + +if (!class_exists(Application::class)) { + fwrite(STDERR, 'You need the "symfony/console" component in order to run the VarDumper server.'.PHP_EOL); + exit(1); +} + +$input = new ArgvInput(); +$output = new ConsoleOutput(); +$defaultHost = '127.0.0.1:9912'; +$host = $input->getParameterOption(['--host'], $_SERVER['VAR_DUMPER_SERVER'] ?? $defaultHost, true); +$logger = interface_exists(LoggerInterface::class) ? new ConsoleLogger($output->getErrorOutput()) : null; + +$app = new Application(); + +$app->getDefinition()->addOption( + new InputOption('--host', null, InputOption::VALUE_REQUIRED, 'The address the server should listen to', $defaultHost) +); + +$app->add($command = new ServerDumpCommand(new DumpServer($host, $logger))) + ->getApplication() + ->setDefaultCommand($command->getName(), true) + ->run($input, $output) +; diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Resources/css/htmlDescriptor.css b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Resources/css/htmlDescriptor.css new file mode 100644 index 0000000..8f706d6 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Resources/css/htmlDescriptor.css @@ -0,0 +1,130 @@ +body { + display: flex; + flex-direction: column-reverse; + justify-content: flex-end; + max-width: 1140px; + margin: auto; + padding: 15px; + word-wrap: break-word; + background-color: #F9F9F9; + color: #222; + font-family: Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.4; +} +p { + margin: 0; +} +a { + color: #218BC3; + text-decoration: none; +} +a:hover { + text-decoration: underline; +} +.text-small { + font-size: 12px !important; +} +article { + margin: 5px; + margin-bottom: 10px; +} +article > header > .row { + display: flex; + flex-direction: row; + align-items: baseline; + margin-bottom: 10px; +} +article > header > .row > .col { + flex: 1; + display: flex; + align-items: baseline; +} +article > header > .row > h2 { + font-size: 14px; + color: #222; + font-weight: normal; + font-family: "Lucida Console", monospace, sans-serif; + word-break: break-all; + margin: 20px 5px 0 0; + user-select: all; +} +article > header > .row > h2 > code { + white-space: nowrap; + user-select: none; + color: #cc2255; + background-color: #f7f7f9; + border: 1px solid #e1e1e8; + border-radius: 3px; + margin-right: 5px; + padding: 0 3px; +} +article > header > .row > time.col { + flex: 0; + text-align: right; + white-space: nowrap; + color: #999; + font-style: italic; +} +article > header ul.tags { + list-style: none; + padding: 0; + margin: 0; + font-size: 12px; +} +article > header ul.tags > li { + user-select: all; + margin-bottom: 2px; +} +article > header ul.tags > li > span.badge { + display: inline-block; + padding: .25em .4em; + margin-right: 5px; + border-radius: 4px; + background-color: #6c757d3b; + color: #524d4d; + font-size: 12px; + text-align: center; + font-weight: 700; + line-height: 1; + white-space: nowrap; + vertical-align: baseline; + user-select: none; +} +article > section.body { + border: 1px solid #d8d8d8; + background: #FFF; + padding: 10px; + border-radius: 3px; +} +pre.sf-dump { + border-radius: 3px; + margin-bottom: 0; +} +.hidden { + display: none !important; +} +.dumped-tag > .sf-dump { + display: inline-block; + margin: 0; + padding: 1px 5px; + line-height: 1.4; + vertical-align: top; + background-color: transparent; + user-select: auto; +} +.dumped-tag > pre.sf-dump, +.dumped-tag > .sf-dump-default { + color: #CC7832; + background: none; +} +.dumped-tag > .sf-dump .sf-dump-str { color: #629755; } +.dumped-tag > .sf-dump .sf-dump-private, +.dumped-tag > .sf-dump .sf-dump-protected, +.dumped-tag > .sf-dump .sf-dump-public { color: #262626; } +.dumped-tag > .sf-dump .sf-dump-note { color: #6897BB; } +.dumped-tag > .sf-dump .sf-dump-key { color: #789339; } +.dumped-tag > .sf-dump .sf-dump-ref { color: #6E6E6E; } +.dumped-tag > .sf-dump .sf-dump-ellipsis { color: #CC7832; max-width: 100em; } +.dumped-tag > .sf-dump .sf-dump-ellipsis-path { max-width: 5em; } +.dumped-tag > .sf-dump .sf-dump-ns { user-select: none; } diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Resources/functions/dump.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Resources/functions/dump.php new file mode 100644 index 0000000..a485d57 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Resources/functions/dump.php @@ -0,0 +1,43 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Component\VarDumper\VarDumper; + +if (!function_exists('dump')) { + /** + * @author Nicolas Grekas + */ + function dump($var, ...$moreVars) + { + VarDumper::dump($var); + + foreach ($moreVars as $v) { + VarDumper::dump($v); + } + + if (1 < func_num_args()) { + return func_get_args(); + } + + return $var; + } +} + +if (!function_exists('dd')) { + function dd(...$vars) + { + foreach ($vars as $v) { + VarDumper::dump($v); + } + + exit(1); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Resources/js/htmlDescriptor.js b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Resources/js/htmlDescriptor.js new file mode 100644 index 0000000..63101e5 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Resources/js/htmlDescriptor.js @@ -0,0 +1,10 @@ +document.addEventListener('DOMContentLoaded', function() { + let prev = null; + Array.from(document.getElementsByTagName('article')).reverse().forEach(function (article) { + const dedupId = article.dataset.dedupId; + if (dedupId === prev) { + article.getElementsByTagName('header')[0].classList.add('hidden'); + } + prev = dedupId; + }); +}); diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Server/Connection.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Server/Connection.php new file mode 100644 index 0000000..8b814cb --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Server/Connection.php @@ -0,0 +1,95 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Server; + +use Symfony\Component\VarDumper\Cloner\Data; +use Symfony\Component\VarDumper\Dumper\ContextProvider\ContextProviderInterface; + +/** + * Forwards serialized Data clones to a server. + * + * @author Maxime Steinhausser + */ +class Connection +{ + private $host; + private $contextProviders; + private $socket; + + /** + * @param string $host The server host + * @param ContextProviderInterface[] $contextProviders Context providers indexed by context name + */ + public function __construct(string $host, array $contextProviders = []) + { + if (false === strpos($host, '://')) { + $host = 'tcp://'.$host; + } + + $this->host = $host; + $this->contextProviders = $contextProviders; + } + + public function getContextProviders(): array + { + return $this->contextProviders; + } + + public function write(Data $data): bool + { + $socketIsFresh = !$this->socket; + if (!$this->socket = $this->socket ?: $this->createSocket()) { + return false; + } + + $context = ['timestamp' => microtime(true)]; + foreach ($this->contextProviders as $name => $provider) { + $context[$name] = $provider->getContext(); + } + $context = array_filter($context); + $encodedPayload = base64_encode(serialize([$data, $context]))."\n"; + + set_error_handler([self::class, 'nullErrorHandler']); + try { + if (-1 !== stream_socket_sendto($this->socket, $encodedPayload)) { + return true; + } + if (!$socketIsFresh) { + stream_socket_shutdown($this->socket, STREAM_SHUT_RDWR); + fclose($this->socket); + $this->socket = $this->createSocket(); + } + if (-1 !== stream_socket_sendto($this->socket, $encodedPayload)) { + return true; + } + } finally { + restore_error_handler(); + } + + return false; + } + + private static function nullErrorHandler($t, $m) + { + // no-op + } + + private function createSocket() + { + set_error_handler([self::class, 'nullErrorHandler']); + try { + return stream_socket_client($this->host, $errno, $errstr, 3, STREAM_CLIENT_CONNECT | STREAM_CLIENT_ASYNC_CONNECT); + } finally { + restore_error_handler(); + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Server/DumpServer.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Server/DumpServer.php new file mode 100644 index 0000000..46546d1 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Server/DumpServer.php @@ -0,0 +1,107 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Server; + +use Psr\Log\LoggerInterface; +use Symfony\Component\VarDumper\Cloner\Data; +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * A server collecting Data clones sent by a ServerDumper. + * + * @author Maxime Steinhausser + * + * @final + */ +class DumpServer +{ + private $host; + private $socket; + private $logger; + + public function __construct(string $host, LoggerInterface $logger = null) + { + if (false === strpos($host, '://')) { + $host = 'tcp://'.$host; + } + + $this->host = $host; + $this->logger = $logger; + } + + public function start(): void + { + if (!$this->socket = stream_socket_server($this->host, $errno, $errstr)) { + throw new \RuntimeException(sprintf('Server start failed on "%s": '.$errstr.' '.$errno, $this->host)); + } + } + + public function listen(callable $callback): void + { + if (null === $this->socket) { + $this->start(); + } + + foreach ($this->getMessages() as $clientId => $message) { + $payload = @unserialize(base64_decode($message), ['allowed_classes' => [Data::class, Stub::class]]); + + // Impossible to decode the message, give up. + if (false === $payload) { + if ($this->logger) { + $this->logger->warning('Unable to decode a message from {clientId} client.', ['clientId' => $clientId]); + } + + continue; + } + + if (!\is_array($payload) || \count($payload) < 2 || !$payload[0] instanceof Data || !\is_array($payload[1])) { + if ($this->logger) { + $this->logger->warning('Invalid payload from {clientId} client. Expected an array of two elements (Data $data, array $context)', ['clientId' => $clientId]); + } + + continue; + } + + list($data, $context) = $payload; + + $callback($data, $context, $clientId); + } + } + + public function getHost(): string + { + return $this->host; + } + + private function getMessages(): iterable + { + $sockets = [(int) $this->socket => $this->socket]; + $write = []; + + while (true) { + $read = $sockets; + stream_select($read, $write, $write, null); + + foreach ($read as $stream) { + if ($this->socket === $stream) { + $stream = stream_socket_accept($this->socket); + $sockets[(int) $stream] = $stream; + } elseif (feof($stream)) { + unset($sockets[(int) $stream]); + fclose($stream); + } else { + yield (int) $stream => fgets($stream); + } + } + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Test/VarDumperTestTrait.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Test/VarDumperTestTrait.php new file mode 100644 index 0000000..33d60c0 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/Test/VarDumperTestTrait.php @@ -0,0 +1,84 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Test; + +use Symfony\Component\VarDumper\Cloner\VarCloner; +use Symfony\Component\VarDumper\Dumper\CliDumper; + +/** + * @author Nicolas Grekas + */ +trait VarDumperTestTrait +{ + /** + * @internal + */ + private $varDumperConfig = [ + 'casters' => [], + 'flags' => null, + ]; + + protected function setUpVarDumper(array $casters, int $flags = null): void + { + $this->varDumperConfig['casters'] = $casters; + $this->varDumperConfig['flags'] = $flags; + } + + /** + * @after + */ + protected function tearDownVarDumper(): void + { + $this->varDumperConfig['casters'] = []; + $this->varDumperConfig['flags'] = null; + } + + public function assertDumpEquals($expected, $data, int $filter = 0, string $message = '') + { + $this->assertSame($this->prepareExpectation($expected, $filter), $this->getDump($data, null, $filter), $message); + } + + public function assertDumpMatchesFormat($expected, $data, int $filter = 0, string $message = '') + { + $this->assertStringMatchesFormat($this->prepareExpectation($expected, $filter), $this->getDump($data, null, $filter), $message); + } + + protected function getDump($data, $key = null, int $filter = 0): ?string + { + if (null === $flags = $this->varDumperConfig['flags']) { + $flags = getenv('DUMP_LIGHT_ARRAY') ? CliDumper::DUMP_LIGHT_ARRAY : 0; + $flags |= getenv('DUMP_STRING_LENGTH') ? CliDumper::DUMP_STRING_LENGTH : 0; + $flags |= getenv('DUMP_COMMA_SEPARATOR') ? CliDumper::DUMP_COMMA_SEPARATOR : 0; + } + + $cloner = new VarCloner(); + $cloner->addCasters($this->varDumperConfig['casters']); + $cloner->setMaxItems(-1); + $dumper = new CliDumper(null, null, $flags); + $dumper->setColors(false); + $data = $cloner->cloneVar($data, $filter)->withRefHandles(false); + if (null !== $key && null === $data = $data->seek($key)) { + return null; + } + + return rtrim($dumper->dump($data, true)); + } + + private function prepareExpectation($expected, int $filter): string + { + if (!\is_string($expected)) { + $expected = $this->getDump($expected, null, $filter); + } + + return rtrim($expected); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/VarDumper.php b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/VarDumper.php new file mode 100644 index 0000000..d336d5d --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/VarDumper.php @@ -0,0 +1,60 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper; + +use Symfony\Component\VarDumper\Caster\ReflectionCaster; +use Symfony\Component\VarDumper\Cloner\VarCloner; +use Symfony\Component\VarDumper\Dumper\CliDumper; +use Symfony\Component\VarDumper\Dumper\ContextProvider\SourceContextProvider; +use Symfony\Component\VarDumper\Dumper\ContextualizedDumper; +use Symfony\Component\VarDumper\Dumper\HtmlDumper; + +// Load the global dump() function +require_once __DIR__.'/Resources/functions/dump.php'; + +/** + * @author Nicolas Grekas + */ +class VarDumper +{ + private static $handler; + + public static function dump($var) + { + if (null === self::$handler) { + $cloner = new VarCloner(); + $cloner->addCasters(ReflectionCaster::UNSET_CLOSURE_FILE_INFO); + + if (isset($_SERVER['VAR_DUMPER_FORMAT'])) { + $dumper = 'html' === $_SERVER['VAR_DUMPER_FORMAT'] ? new HtmlDumper() : new CliDumper(); + } else { + $dumper = \in_array(\PHP_SAPI, ['cli', 'phpdbg']) ? new CliDumper() : new HtmlDumper(); + } + + $dumper = new ContextualizedDumper($dumper, [new SourceContextProvider()]); + + self::$handler = function ($var) use ($cloner, $dumper) { + $dumper->dump($cloner->cloneVar($var)); + }; + } + + return (self::$handler)($var); + } + + public static function setHandler(callable $callable = null) + { + $prevHandler = self::$handler; + self::$handler = $callable; + + return $prevHandler; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/composer.json b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/composer.json new file mode 100644 index 0000000..c7e668c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/var-dumper/composer.json @@ -0,0 +1,53 @@ +{ + "name": "symfony/var-dumper", + "type": "library", + "description": "Symfony mechanism for exploring and dumping PHP variables", + "keywords": ["dump", "debug"], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": "^7.2.5", + "symfony/polyfill-mbstring": "~1.0" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "twig/twig": "^2.4|^3.0" + }, + "conflict": { + "phpunit/phpunit": "<5.4.3", + "symfony/console": "<4.4" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "autoload": { + "files": [ "Resources/functions/dump.php" ], + "psr-4": { "Symfony\\Component\\VarDumper\\": "" }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/yaml/CHANGELOG.md b/soc/2020/daily_report/archive/app/vendor/symfony/yaml/CHANGELOG.md new file mode 100644 index 0000000..a3a7270 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/yaml/CHANGELOG.md @@ -0,0 +1,202 @@ +CHANGELOG +========= + +5.0.0 +----- + + * Removed support for mappings inside multi-line strings. + * removed support for implicit STDIN usage in the `lint:yaml` command, use `lint:yaml -` (append a dash) instead to make it explicit. + +4.4.0 +----- + + * Added support for parsing the inline notation spanning multiple lines. + * Added support to dump `null` as `~` by using the `Yaml::DUMP_NULL_AS_TILDE` flag. + * deprecated accepting STDIN implicitly when using the `lint:yaml` command, use `lint:yaml -` (append a dash) instead to make it explicit. + +4.3.0 +----- + + * Using a mapping inside a multi-line string is deprecated and will throw a `ParseException` in 5.0. + +4.2.0 +----- + + * added support for multiple files or directories in `LintCommand` + +4.0.0 +----- + + * The behavior of the non-specific tag `!` is changed and now forces + non-evaluating your values. + * complex mappings will throw a `ParseException` + * support for the comma as a group separator for floats has been dropped, use + the underscore instead + * support for the `!!php/object` tag has been dropped, use the `!php/object` + tag instead + * duplicate mapping keys throw a `ParseException` + * non-string mapping keys throw a `ParseException`, use the `Yaml::PARSE_KEYS_AS_STRINGS` + flag to cast them to strings + * `%` at the beginning of an unquoted string throw a `ParseException` + * mappings with a colon (`:`) that is not followed by a whitespace throw a + `ParseException` + * the `Dumper::setIndentation()` method has been removed + * being able to pass boolean options to the `Yaml::parse()`, `Yaml::dump()`, + `Parser::parse()`, and `Dumper::dump()` methods to configure the behavior of + the parser and dumper is no longer supported, pass bitmask flags instead + * the constructor arguments of the `Parser` class have been removed + * the `Inline` class is internal and no longer part of the BC promise + * removed support for the `!str` tag, use the `!!str` tag instead + * added support for tagged scalars. + + ```yml + Yaml::parse('!foo bar', Yaml::PARSE_CUSTOM_TAGS); + // returns TaggedValue('foo', 'bar'); + ``` + +3.4.0 +----- + + * added support for parsing YAML files using the `Yaml::parseFile()` or `Parser::parseFile()` method + + * the `Dumper`, `Parser`, and `Yaml` classes are marked as final + + * Deprecated the `!php/object:` tag which will be replaced by the + `!php/object` tag (without the colon) in 4.0. + + * Deprecated the `!php/const:` tag which will be replaced by the + `!php/const` tag (without the colon) in 4.0. + + * Support for the `!str` tag is deprecated, use the `!!str` tag instead. + + * Deprecated using the non-specific tag `!` as its behavior will change in 4.0. + It will force non-evaluating your values in 4.0. Use plain integers or `!!float` instead. + +3.3.0 +----- + + * Starting an unquoted string with a question mark followed by a space is + deprecated and will throw a `ParseException` in Symfony 4.0. + + * Deprecated support for implicitly parsing non-string mapping keys as strings. + Mapping keys that are no strings will lead to a `ParseException` in Symfony + 4.0. Use quotes to opt-in for keys to be parsed as strings. + + Before: + + ```php + $yaml = << new A(), 'bar' => 1], 0, 0, Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE | Yaml::DUMP_OBJECT); + ``` + +3.0.0 +----- + + * Yaml::parse() now throws an exception when a blackslash is not escaped + in double-quoted strings + +2.8.0 +----- + + * Deprecated usage of a colon in an unquoted mapping value + * Deprecated usage of @, \`, | and > at the beginning of an unquoted string + * When surrounding strings with double-quotes, you must now escape `\` characters. Not + escaping those characters (when surrounded by double-quotes) is deprecated. + + Before: + + ```yml + class: "Foo\Var" + ``` + + After: + + ```yml + class: "Foo\\Var" + ``` + +2.1.0 +----- + + * Yaml::parse() does not evaluate loaded files as PHP files by default + anymore (call Yaml::enablePhpParsing() to get back the old behavior) diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Command/LintCommand.php b/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Command/LintCommand.php new file mode 100644 index 0000000..2c0b60c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Command/LintCommand.php @@ -0,0 +1,248 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml\Command; + +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Exception\InvalidArgumentException; +use Symfony\Component\Console\Exception\RuntimeException; +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\Console\Style\SymfonyStyle; +use Symfony\Component\Yaml\Exception\ParseException; +use Symfony\Component\Yaml\Parser; +use Symfony\Component\Yaml\Yaml; + +/** + * Validates YAML files syntax and outputs encountered errors. + * + * @author Grégoire Pineau + * @author Robin Chalas + */ +class LintCommand extends Command +{ + protected static $defaultName = 'lint:yaml'; + + private $parser; + private $format; + private $displayCorrectFiles; + private $directoryIteratorProvider; + private $isReadableProvider; + + public function __construct(string $name = null, callable $directoryIteratorProvider = null, callable $isReadableProvider = null) + { + parent::__construct($name); + + $this->directoryIteratorProvider = $directoryIteratorProvider; + $this->isReadableProvider = $isReadableProvider; + } + + /** + * {@inheritdoc} + */ + protected function configure() + { + $this + ->setDescription('Lints a file and outputs encountered errors') + ->addArgument('filename', InputArgument::IS_ARRAY, 'A file, a directory or "-" for reading from STDIN') + ->addOption('format', null, InputOption::VALUE_REQUIRED, 'The output format', 'txt') + ->addOption('parse-tags', null, InputOption::VALUE_NONE, 'Parse custom tags') + ->setHelp(<<%command.name% command lints a YAML file and outputs to STDOUT +the first encountered syntax error. + +You can validates YAML contents passed from STDIN: + + cat filename | php %command.full_name% - + +You can also validate the syntax of a file: + + php %command.full_name% filename + +Or of a whole directory: + + php %command.full_name% dirname + php %command.full_name% dirname --format=json + +EOF + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $io = new SymfonyStyle($input, $output); + $filenames = (array) $input->getArgument('filename'); + $this->format = $input->getOption('format'); + $this->displayCorrectFiles = $output->isVerbose(); + $flags = $input->getOption('parse-tags') ? Yaml::PARSE_CUSTOM_TAGS : 0; + + if (['-'] === $filenames) { + return $this->display($io, [$this->validate(file_get_contents('php://stdin'), $flags)]); + } + + if (!$filenames) { + throw new RuntimeException('Please provide a filename or pipe file content to STDIN.'); + } + + $filesInfo = []; + foreach ($filenames as $filename) { + if (!$this->isReadable($filename)) { + throw new RuntimeException(sprintf('File or directory "%s" is not readable.', $filename)); + } + + foreach ($this->getFiles($filename) as $file) { + $filesInfo[] = $this->validate(file_get_contents($file), $flags, $file); + } + } + + return $this->display($io, $filesInfo); + } + + private function validate(string $content, int $flags, string $file = null) + { + $prevErrorHandler = set_error_handler(function ($level, $message, $file, $line) use (&$prevErrorHandler) { + if (E_USER_DEPRECATED === $level) { + throw new ParseException($message, $this->getParser()->getRealCurrentLineNb() + 1); + } + + return $prevErrorHandler ? $prevErrorHandler($level, $message, $file, $line) : false; + }); + + try { + $this->getParser()->parse($content, Yaml::PARSE_CONSTANT | $flags); + } catch (ParseException $e) { + return ['file' => $file, 'line' => $e->getParsedLine(), 'valid' => false, 'message' => $e->getMessage()]; + } finally { + restore_error_handler(); + } + + return ['file' => $file, 'valid' => true]; + } + + private function display(SymfonyStyle $io, array $files): int + { + switch ($this->format) { + case 'txt': + return $this->displayTxt($io, $files); + case 'json': + return $this->displayJson($io, $files); + default: + throw new InvalidArgumentException(sprintf('The format "%s" is not supported.', $this->format)); + } + } + + private function displayTxt(SymfonyStyle $io, array $filesInfo): int + { + $countFiles = \count($filesInfo); + $erroredFiles = 0; + $suggestTagOption = false; + + foreach ($filesInfo as $info) { + if ($info['valid'] && $this->displayCorrectFiles) { + $io->comment('OK'.($info['file'] ? sprintf(' in %s', $info['file']) : '')); + } elseif (!$info['valid']) { + ++$erroredFiles; + $io->text(' ERROR '.($info['file'] ? sprintf(' in %s', $info['file']) : '')); + $io->text(sprintf(' >> %s', $info['message'])); + + if (false !== strpos($info['message'], 'PARSE_CUSTOM_TAGS')) { + $suggestTagOption = true; + } + } + } + + if (0 === $erroredFiles) { + $io->success(sprintf('All %d YAML files contain valid syntax.', $countFiles)); + } else { + $io->warning(sprintf('%d YAML files have valid syntax and %d contain errors.%s', $countFiles - $erroredFiles, $erroredFiles, $suggestTagOption ? ' Use the --parse-tags option if you want parse custom tags.' : '')); + } + + return min($erroredFiles, 1); + } + + private function displayJson(SymfonyStyle $io, array $filesInfo): int + { + $errors = 0; + + array_walk($filesInfo, function (&$v) use (&$errors) { + $v['file'] = (string) $v['file']; + if (!$v['valid']) { + ++$errors; + } + + if (isset($v['message']) && false !== strpos($v['message'], 'PARSE_CUSTOM_TAGS')) { + $v['message'] .= ' Use the --parse-tags option if you want parse custom tags.'; + } + }); + + $io->writeln(json_encode($filesInfo, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)); + + return min($errors, 1); + } + + private function getFiles(string $fileOrDirectory): iterable + { + if (is_file($fileOrDirectory)) { + yield new \SplFileInfo($fileOrDirectory); + + return; + } + + foreach ($this->getDirectoryIterator($fileOrDirectory) as $file) { + if (!\in_array($file->getExtension(), ['yml', 'yaml'])) { + continue; + } + + yield $file; + } + } + + private function getParser(): Parser + { + if (!$this->parser) { + $this->parser = new Parser(); + } + + return $this->parser; + } + + private function getDirectoryIterator(string $directory): iterable + { + $default = function ($directory) { + return new \RecursiveIteratorIterator( + new \RecursiveDirectoryIterator($directory, \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::FOLLOW_SYMLINKS), + \RecursiveIteratorIterator::LEAVES_ONLY + ); + }; + + if (null !== $this->directoryIteratorProvider) { + return ($this->directoryIteratorProvider)($directory, $default); + } + + return $default($directory); + } + + private function isReadable(string $fileOrDirectory): bool + { + $default = function ($fileOrDirectory) { + return is_readable($fileOrDirectory); + }; + + if (null !== $this->isReadableProvider) { + return ($this->isReadableProvider)($fileOrDirectory, $default); + } + + return $default($fileOrDirectory); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Dumper.php b/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Dumper.php new file mode 100644 index 0000000..515a361 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Dumper.php @@ -0,0 +1,125 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml; + +use Symfony\Component\Yaml\Tag\TaggedValue; + +/** + * Dumper dumps PHP variables to YAML strings. + * + * @author Fabien Potencier + * + * @final + */ +class Dumper +{ + /** + * The amount of spaces to use for indentation of nested nodes. + * + * @var int + */ + protected $indentation; + + public function __construct(int $indentation = 4) + { + if ($indentation < 1) { + throw new \InvalidArgumentException('The indentation must be greater than zero.'); + } + + $this->indentation = $indentation; + } + + /** + * Dumps a PHP value to YAML. + * + * @param mixed $input The PHP value + * @param int $inline The level where you switch to inline YAML + * @param int $indent The level of indentation (used internally) + * @param int $flags A bit field of Yaml::DUMP_* constants to customize the dumped YAML string + * + * @return string The YAML representation of the PHP value + */ + public function dump($input, int $inline = 0, int $indent = 0, int $flags = 0): string + { + $output = ''; + $prefix = $indent ? str_repeat(' ', $indent) : ''; + $dumpObjectAsInlineMap = true; + + if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($input instanceof \ArrayObject || $input instanceof \stdClass)) { + $dumpObjectAsInlineMap = empty((array) $input); + } + + if ($inline <= 0 || (!\is_array($input) && !$input instanceof TaggedValue && $dumpObjectAsInlineMap) || empty($input)) { + $output .= $prefix.Inline::dump($input, $flags); + } else { + $dumpAsMap = Inline::isHash($input); + + foreach ($input as $key => $value) { + if ($inline >= 1 && Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK & $flags && \is_string($value) && false !== strpos($value, "\n") && false === strpos($value, "\r")) { + // If the first line starts with a space character, the spec requires a blockIndicationIndicator + // http://www.yaml.org/spec/1.2/spec.html#id2793979 + $blockIndentationIndicator = (' ' === substr($value, 0, 1)) ? (string) $this->indentation : ''; + $output .= sprintf("%s%s%s |%s\n", $prefix, $dumpAsMap ? Inline::dump($key, $flags).':' : '-', '', $blockIndentationIndicator); + + foreach (explode("\n", $value) as $row) { + $output .= sprintf("%s%s%s\n", $prefix, str_repeat(' ', $this->indentation), $row); + } + + continue; + } + + if ($value instanceof TaggedValue) { + $output .= sprintf('%s%s !%s', $prefix, $dumpAsMap ? Inline::dump($key, $flags).':' : '-', $value->getTag()); + + if ($inline >= 1 && Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK & $flags && \is_string($value->getValue()) && false !== strpos($value->getValue(), "\n") && false === strpos($value->getValue(), "\r\n")) { + // If the first line starts with a space character, the spec requires a blockIndicationIndicator + // http://www.yaml.org/spec/1.2/spec.html#id2793979 + $blockIndentationIndicator = (' ' === substr($value->getValue(), 0, 1)) ? (string) $this->indentation : ''; + $output .= sprintf(" |%s\n", $blockIndentationIndicator); + + foreach (explode("\n", $value->getValue()) as $row) { + $output .= sprintf("%s%s%s\n", $prefix, str_repeat(' ', $this->indentation), $row); + } + + continue; + } + + if ($inline - 1 <= 0 || null === $value->getValue() || is_scalar($value->getValue())) { + $output .= ' '.$this->dump($value->getValue(), $inline - 1, 0, $flags)."\n"; + } else { + $output .= "\n"; + $output .= $this->dump($value->getValue(), $inline - 1, $dumpAsMap ? $indent + $this->indentation : $indent + 2, $flags); + } + + continue; + } + + $dumpObjectAsInlineMap = true; + + if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($value instanceof \ArrayObject || $value instanceof \stdClass)) { + $dumpObjectAsInlineMap = empty((array) $value); + } + + $willBeInlined = $inline - 1 <= 0 || !\is_array($value) && $dumpObjectAsInlineMap || empty($value); + + $output .= sprintf('%s%s%s%s', + $prefix, + $dumpAsMap ? Inline::dump($key, $flags).':' : '-', + $willBeInlined ? ' ' : "\n", + $this->dump($value, $inline - 1, $willBeInlined ? 0 : $indent + $this->indentation, $flags) + ).($willBeInlined ? "\n" : ''); + } + } + + return $output; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Escaper.php b/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Escaper.php new file mode 100644 index 0000000..b975fb3 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Escaper.php @@ -0,0 +1,103 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml; + +/** + * Escaper encapsulates escaping rules for single and double-quoted + * YAML strings. + * + * @author Matthew Lewinski + * + * @internal + */ +class Escaper +{ + // Characters that would cause a dumped string to require double quoting. + const REGEX_CHARACTER_TO_ESCAPE = "[\\x00-\\x1f]|\x7f|\xc2\x85|\xc2\xa0|\xe2\x80\xa8|\xe2\x80\xa9"; + + // Mapping arrays for escaping a double quoted string. The backslash is + // first to ensure proper escaping because str_replace operates iteratively + // on the input arrays. This ordering of the characters avoids the use of strtr, + // which performs more slowly. + private static $escapees = ['\\', '\\\\', '\\"', '"', + "\x00", "\x01", "\x02", "\x03", "\x04", "\x05", "\x06", "\x07", + "\x08", "\x09", "\x0a", "\x0b", "\x0c", "\x0d", "\x0e", "\x0f", + "\x10", "\x11", "\x12", "\x13", "\x14", "\x15", "\x16", "\x17", + "\x18", "\x19", "\x1a", "\x1b", "\x1c", "\x1d", "\x1e", "\x1f", + "\x7f", + "\xc2\x85", "\xc2\xa0", "\xe2\x80\xa8", "\xe2\x80\xa9", + ]; + private static $escaped = ['\\\\', '\\"', '\\\\', '\\"', + '\\0', '\\x01', '\\x02', '\\x03', '\\x04', '\\x05', '\\x06', '\\a', + '\\b', '\\t', '\\n', '\\v', '\\f', '\\r', '\\x0e', '\\x0f', + '\\x10', '\\x11', '\\x12', '\\x13', '\\x14', '\\x15', '\\x16', '\\x17', + '\\x18', '\\x19', '\\x1a', '\\e', '\\x1c', '\\x1d', '\\x1e', '\\x1f', + '\\x7f', + '\\N', '\\_', '\\L', '\\P', + ]; + + /** + * Determines if a PHP value would require double quoting in YAML. + * + * @param string $value A PHP value + * + * @return bool True if the value would require double quotes + */ + public static function requiresDoubleQuoting(string $value): bool + { + return 0 < preg_match('/'.self::REGEX_CHARACTER_TO_ESCAPE.'/u', $value); + } + + /** + * Escapes and surrounds a PHP value with double quotes. + * + * @param string $value A PHP value + * + * @return string The quoted, escaped string + */ + public static function escapeWithDoubleQuotes(string $value): string + { + return sprintf('"%s"', str_replace(self::$escapees, self::$escaped, $value)); + } + + /** + * Determines if a PHP value would require single quoting in YAML. + * + * @param string $value A PHP value + * + * @return bool True if the value would require single quotes + */ + public static function requiresSingleQuoting(string $value): bool + { + // Determines if a PHP value is entirely composed of a value that would + // require single quoting in YAML. + if (\in_array(strtolower($value), ['null', '~', 'true', 'false', 'y', 'n', 'yes', 'no', 'on', 'off'])) { + return true; + } + + // Determines if the PHP value contains any single characters that would + // cause it to require single quoting in YAML. + return 0 < preg_match('/[ \s \' " \: \{ \} \[ \] , & \* \# \?] | \A[ \- ? | < > = ! % @ ` ]/x', $value); + } + + /** + * Escapes and surrounds a PHP value with single quotes. + * + * @param string $value A PHP value + * + * @return string The quoted, escaped string + */ + public static function escapeWithSingleQuotes(string $value): string + { + return sprintf("'%s'", str_replace('\'', '\'\'', $value)); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Exception/DumpException.php b/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Exception/DumpException.php new file mode 100644 index 0000000..cce972f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Exception/DumpException.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml\Exception; + +/** + * Exception class thrown when an error occurs during dumping. + * + * @author Fabien Potencier + */ +class DumpException extends RuntimeException +{ +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Exception/ExceptionInterface.php b/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Exception/ExceptionInterface.php new file mode 100644 index 0000000..9091316 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Exception/ExceptionInterface.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml\Exception; + +/** + * Exception interface for all exceptions thrown by the component. + * + * @author Fabien Potencier + */ +interface ExceptionInterface extends \Throwable +{ +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Exception/ParseException.php b/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Exception/ParseException.php new file mode 100644 index 0000000..eae8838 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Exception/ParseException.php @@ -0,0 +1,133 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml\Exception; + +/** + * Exception class thrown when an error occurs during parsing. + * + * @author Fabien Potencier + */ +class ParseException extends RuntimeException +{ + private $parsedFile; + private $parsedLine; + private $snippet; + private $rawMessage; + + /** + * @param string $message The error message + * @param int $parsedLine The line where the error occurred + * @param string|null $snippet The snippet of code near the problem + * @param string|null $parsedFile The file name where the error occurred + * @param \Exception|null $previous The previous exception + */ + public function __construct(string $message, int $parsedLine = -1, string $snippet = null, string $parsedFile = null, \Throwable $previous = null) + { + $this->parsedFile = $parsedFile; + $this->parsedLine = $parsedLine; + $this->snippet = $snippet; + $this->rawMessage = $message; + + $this->updateRepr(); + + parent::__construct($this->message, 0, $previous); + } + + /** + * Gets the snippet of code near the error. + * + * @return string The snippet of code + */ + public function getSnippet() + { + return $this->snippet; + } + + /** + * Sets the snippet of code near the error. + */ + public function setSnippet(string $snippet) + { + $this->snippet = $snippet; + + $this->updateRepr(); + } + + /** + * Gets the filename where the error occurred. + * + * This method returns null if a string is parsed. + * + * @return string The filename + */ + public function getParsedFile() + { + return $this->parsedFile; + } + + /** + * Sets the filename where the error occurred. + */ + public function setParsedFile(string $parsedFile) + { + $this->parsedFile = $parsedFile; + + $this->updateRepr(); + } + + /** + * Gets the line where the error occurred. + * + * @return int The file line + */ + public function getParsedLine() + { + return $this->parsedLine; + } + + /** + * Sets the line where the error occurred. + */ + public function setParsedLine(int $parsedLine) + { + $this->parsedLine = $parsedLine; + + $this->updateRepr(); + } + + private function updateRepr() + { + $this->message = $this->rawMessage; + + $dot = false; + if ('.' === substr($this->message, -1)) { + $this->message = substr($this->message, 0, -1); + $dot = true; + } + + if (null !== $this->parsedFile) { + $this->message .= sprintf(' in %s', json_encode($this->parsedFile, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)); + } + + if ($this->parsedLine >= 0) { + $this->message .= sprintf(' at line %d', $this->parsedLine); + } + + if ($this->snippet) { + $this->message .= sprintf(' (near "%s")', $this->snippet); + } + + if ($dot) { + $this->message .= '.'; + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Exception/RuntimeException.php b/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Exception/RuntimeException.php new file mode 100644 index 0000000..3f36b73 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Exception/RuntimeException.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml\Exception; + +/** + * Exception class thrown when an error occurs during parsing. + * + * @author Romain Neutron + */ +class RuntimeException extends \RuntimeException implements ExceptionInterface +{ +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Inline.php b/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Inline.php new file mode 100644 index 0000000..197ca0d --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Inline.php @@ -0,0 +1,770 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml; + +use Symfony\Component\Yaml\Exception\DumpException; +use Symfony\Component\Yaml\Exception\ParseException; +use Symfony\Component\Yaml\Tag\TaggedValue; + +/** + * Inline implements a YAML parser/dumper for the YAML inline syntax. + * + * @author Fabien Potencier + * + * @internal + */ +class Inline +{ + const REGEX_QUOTED_STRING = '(?:"([^"\\\\]*+(?:\\\\.[^"\\\\]*+)*+)"|\'([^\']*+(?:\'\'[^\']*+)*+)\')'; + + public static $parsedLineNumber = -1; + public static $parsedFilename; + + private static $exceptionOnInvalidType = false; + private static $objectSupport = false; + private static $objectForMap = false; + private static $constantSupport = false; + + public static function initialize(int $flags, int $parsedLineNumber = null, string $parsedFilename = null) + { + self::$exceptionOnInvalidType = (bool) (Yaml::PARSE_EXCEPTION_ON_INVALID_TYPE & $flags); + self::$objectSupport = (bool) (Yaml::PARSE_OBJECT & $flags); + self::$objectForMap = (bool) (Yaml::PARSE_OBJECT_FOR_MAP & $flags); + self::$constantSupport = (bool) (Yaml::PARSE_CONSTANT & $flags); + self::$parsedFilename = $parsedFilename; + + if (null !== $parsedLineNumber) { + self::$parsedLineNumber = $parsedLineNumber; + } + } + + /** + * Converts a YAML string to a PHP value. + * + * @param string $value A YAML string + * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior + * @param array $references Mapping of variable names to values + * + * @return mixed A PHP value + * + * @throws ParseException + */ + public static function parse(string $value = null, int $flags = 0, array $references = []) + { + self::initialize($flags); + + $value = trim($value); + + if ('' === $value) { + return ''; + } + + if (2 /* MB_OVERLOAD_STRING */ & (int) ini_get('mbstring.func_overload')) { + $mbEncoding = mb_internal_encoding(); + mb_internal_encoding('ASCII'); + } + + try { + $i = 0; + $tag = self::parseTag($value, $i, $flags); + switch ($value[$i]) { + case '[': + $result = self::parseSequence($value, $flags, $i, $references); + ++$i; + break; + case '{': + $result = self::parseMapping($value, $flags, $i, $references); + ++$i; + break; + default: + $result = self::parseScalar($value, $flags, null, $i, null === $tag, $references); + } + + // some comments are allowed at the end + if (preg_replace('/\s+#.*$/A', '', substr($value, $i))) { + throw new ParseException(sprintf('Unexpected characters near "%s".', substr($value, $i)), self::$parsedLineNumber + 1, $value, self::$parsedFilename); + } + + if (null !== $tag && '' !== $tag) { + return new TaggedValue($tag, $result); + } + + return $result; + } finally { + if (isset($mbEncoding)) { + mb_internal_encoding($mbEncoding); + } + } + } + + /** + * Dumps a given PHP variable to a YAML string. + * + * @param mixed $value The PHP variable to convert + * @param int $flags A bit field of Yaml::DUMP_* constants to customize the dumped YAML string + * + * @return string The YAML string representing the PHP value + * + * @throws DumpException When trying to dump PHP resource + */ + public static function dump($value, int $flags = 0): string + { + switch (true) { + case \is_resource($value): + if (Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE & $flags) { + throw new DumpException(sprintf('Unable to dump PHP resources in a YAML file ("%s").', get_resource_type($value))); + } + + return self::dumpNull($flags); + case $value instanceof \DateTimeInterface: + return $value->format('c'); + case \is_object($value): + if ($value instanceof TaggedValue) { + return '!'.$value->getTag().' '.self::dump($value->getValue(), $flags); + } + + if (Yaml::DUMP_OBJECT & $flags) { + return '!php/object '.self::dump(serialize($value)); + } + + if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($value instanceof \stdClass || $value instanceof \ArrayObject)) { + $output = []; + + foreach ($value as $key => $val) { + $output[] = sprintf('%s: %s', self::dump($key, $flags), self::dump($val, $flags)); + } + + return sprintf('{ %s }', implode(', ', $output)); + } + + if (Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE & $flags) { + throw new DumpException('Object support when dumping a YAML file has been disabled.'); + } + + return self::dumpNull($flags); + case \is_array($value): + return self::dumpArray($value, $flags); + case null === $value: + return self::dumpNull($flags); + case true === $value: + return 'true'; + case false === $value: + return 'false'; + case ctype_digit($value): + return \is_string($value) ? "'$value'" : (int) $value; + case is_numeric($value): + $locale = setlocale(LC_NUMERIC, 0); + if (false !== $locale) { + setlocale(LC_NUMERIC, 'C'); + } + if (\is_float($value)) { + $repr = (string) $value; + if (is_infinite($value)) { + $repr = str_ireplace('INF', '.Inf', $repr); + } elseif (floor($value) == $value && $repr == $value) { + // Preserve float data type since storing a whole number will result in integer value. + $repr = '!!float '.$repr; + } + } else { + $repr = \is_string($value) ? "'$value'" : (string) $value; + } + if (false !== $locale) { + setlocale(LC_NUMERIC, $locale); + } + + return $repr; + case '' == $value: + return "''"; + case self::isBinaryString($value): + return '!!binary '.base64_encode($value); + case Escaper::requiresDoubleQuoting($value): + return Escaper::escapeWithDoubleQuotes($value); + case Escaper::requiresSingleQuoting($value): + case Parser::preg_match('{^[0-9]+[_0-9]*$}', $value): + case Parser::preg_match(self::getHexRegex(), $value): + case Parser::preg_match(self::getTimestampRegex(), $value): + return Escaper::escapeWithSingleQuotes($value); + default: + return $value; + } + } + + /** + * Check if given array is hash or just normal indexed array. + * + * @param array|\ArrayObject|\stdClass $value The PHP array or array-like object to check + * + * @return bool true if value is hash array, false otherwise + */ + public static function isHash($value): bool + { + if ($value instanceof \stdClass || $value instanceof \ArrayObject) { + return true; + } + + $expectedKey = 0; + + foreach ($value as $key => $val) { + if ($key !== $expectedKey++) { + return true; + } + } + + return false; + } + + /** + * Dumps a PHP array to a YAML string. + * + * @param array $value The PHP array to dump + * @param int $flags A bit field of Yaml::DUMP_* constants to customize the dumped YAML string + * + * @return string The YAML string representing the PHP array + */ + private static function dumpArray(array $value, int $flags): string + { + // array + if (($value || Yaml::DUMP_EMPTY_ARRAY_AS_SEQUENCE & $flags) && !self::isHash($value)) { + $output = []; + foreach ($value as $val) { + $output[] = self::dump($val, $flags); + } + + return sprintf('[%s]', implode(', ', $output)); + } + + // hash + $output = []; + foreach ($value as $key => $val) { + $output[] = sprintf('%s: %s', self::dump($key, $flags), self::dump($val, $flags)); + } + + return sprintf('{ %s }', implode(', ', $output)); + } + + private static function dumpNull(int $flags): string + { + if (Yaml::DUMP_NULL_AS_TILDE & $flags) { + return '~'; + } + + return 'null'; + } + + /** + * Parses a YAML scalar. + * + * @return mixed + * + * @throws ParseException When malformed inline YAML string is parsed + */ + public static function parseScalar(string $scalar, int $flags = 0, array $delimiters = null, int &$i = 0, bool $evaluate = true, array $references = []) + { + if (\in_array($scalar[$i], ['"', "'"])) { + // quoted scalar + $output = self::parseQuotedScalar($scalar, $i); + + if (null !== $delimiters) { + $tmp = ltrim(substr($scalar, $i), " \n"); + if ('' === $tmp) { + throw new ParseException(sprintf('Unexpected end of line, expected one of "%s".', implode('', $delimiters)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + if (!\in_array($tmp[0], $delimiters)) { + throw new ParseException(sprintf('Unexpected characters (%s).', substr($scalar, $i)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + } + } else { + // "normal" string + if (!$delimiters) { + $output = substr($scalar, $i); + $i += \strlen($output); + + // remove comments + if (Parser::preg_match('/[ \t]+#/', $output, $match, PREG_OFFSET_CAPTURE)) { + $output = substr($output, 0, $match[0][1]); + } + } elseif (Parser::preg_match('/^(.*?)('.implode('|', $delimiters).')/', substr($scalar, $i), $match)) { + $output = $match[1]; + $i += \strlen($output); + $output = trim($output); + } else { + throw new ParseException(sprintf('Malformed inline YAML string: "%s".', $scalar), self::$parsedLineNumber + 1, null, self::$parsedFilename); + } + + // a non-quoted string cannot start with @ or ` (reserved) nor with a scalar indicator (| or >) + if ($output && ('@' === $output[0] || '`' === $output[0] || '|' === $output[0] || '>' === $output[0] || '%' === $output[0])) { + throw new ParseException(sprintf('The reserved indicator "%s" cannot start a plain scalar; you need to quote the scalar.', $output[0]), self::$parsedLineNumber + 1, $output, self::$parsedFilename); + } + + if ($evaluate) { + $output = self::evaluateScalar($output, $flags, $references); + } + } + + return $output; + } + + /** + * Parses a YAML quoted scalar. + * + * @throws ParseException When malformed inline YAML string is parsed + */ + private static function parseQuotedScalar(string $scalar, int &$i): string + { + if (!Parser::preg_match('/'.self::REGEX_QUOTED_STRING.'/Au', substr($scalar, $i), $match)) { + throw new ParseException(sprintf('Malformed inline YAML string: "%s".', substr($scalar, $i)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + + $output = substr($match[0], 1, \strlen($match[0]) - 2); + + $unescaper = new Unescaper(); + if ('"' == $scalar[$i]) { + $output = $unescaper->unescapeDoubleQuotedString($output); + } else { + $output = $unescaper->unescapeSingleQuotedString($output); + } + + $i += \strlen($match[0]); + + return $output; + } + + /** + * Parses a YAML sequence. + * + * @throws ParseException When malformed inline YAML string is parsed + */ + private static function parseSequence(string $sequence, int $flags, int &$i = 0, array $references = []): array + { + $output = []; + $len = \strlen($sequence); + ++$i; + + // [foo, bar, ...] + while ($i < $len) { + if (']' === $sequence[$i]) { + return $output; + } + if (',' === $sequence[$i] || ' ' === $sequence[$i]) { + ++$i; + + continue; + } + + $tag = self::parseTag($sequence, $i, $flags); + switch ($sequence[$i]) { + case '[': + // nested sequence + $value = self::parseSequence($sequence, $flags, $i, $references); + break; + case '{': + // nested mapping + $value = self::parseMapping($sequence, $flags, $i, $references); + break; + default: + $isQuoted = \in_array($sequence[$i], ['"', "'"]); + $value = self::parseScalar($sequence, $flags, [',', ']'], $i, null === $tag, $references); + + // the value can be an array if a reference has been resolved to an array var + if (\is_string($value) && !$isQuoted && false !== strpos($value, ': ')) { + // embedded mapping? + try { + $pos = 0; + $value = self::parseMapping('{'.$value.'}', $flags, $pos, $references); + } catch (\InvalidArgumentException $e) { + // no, it's not + } + } + + --$i; + } + + if (null !== $tag && '' !== $tag) { + $value = new TaggedValue($tag, $value); + } + + $output[] = $value; + + ++$i; + } + + throw new ParseException(sprintf('Malformed inline YAML string: "%s".', $sequence), self::$parsedLineNumber + 1, null, self::$parsedFilename); + } + + /** + * Parses a YAML mapping. + * + * @return array|\stdClass + * + * @throws ParseException When malformed inline YAML string is parsed + */ + private static function parseMapping(string $mapping, int $flags, int &$i = 0, array $references = []) + { + $output = []; + $len = \strlen($mapping); + ++$i; + $allowOverwrite = false; + + // {foo: bar, bar:foo, ...} + while ($i < $len) { + switch ($mapping[$i]) { + case ' ': + case ',': + case "\n": + ++$i; + continue 2; + case '}': + if (self::$objectForMap) { + return (object) $output; + } + + return $output; + } + + // key + $offsetBeforeKeyParsing = $i; + $isKeyQuoted = \in_array($mapping[$i], ['"', "'"], true); + $key = self::parseScalar($mapping, $flags, [':', ' '], $i, false, []); + + if ($offsetBeforeKeyParsing === $i) { + throw new ParseException('Missing mapping key.', self::$parsedLineNumber + 1, $mapping); + } + + if ('!php/const' === $key) { + $key .= ' '.self::parseScalar($mapping, $flags, [':'], $i, false, []); + $key = self::evaluateScalar($key, $flags); + } + + if (false === $i = strpos($mapping, ':', $i)) { + break; + } + + if (!$isKeyQuoted) { + $evaluatedKey = self::evaluateScalar($key, $flags, $references); + + if ('' !== $key && $evaluatedKey !== $key && !\is_string($evaluatedKey) && !\is_int($evaluatedKey)) { + throw new ParseException('Implicit casting of incompatible mapping keys to strings is not supported. Quote your evaluable mapping keys instead.', self::$parsedLineNumber + 1, $mapping); + } + } + + if (!$isKeyQuoted && (!isset($mapping[$i + 1]) || !\in_array($mapping[$i + 1], [' ', ',', '[', ']', '{', '}', "\n"], true))) { + throw new ParseException('Colons must be followed by a space or an indication character (i.e. " ", ",", "[", "]", "{", "}").', self::$parsedLineNumber + 1, $mapping); + } + + if ('<<' === $key) { + $allowOverwrite = true; + } + + while ($i < $len) { + if (':' === $mapping[$i] || ' ' === $mapping[$i] || "\n" === $mapping[$i]) { + ++$i; + + continue; + } + + $tag = self::parseTag($mapping, $i, $flags); + switch ($mapping[$i]) { + case '[': + // nested sequence + $value = self::parseSequence($mapping, $flags, $i, $references); + // Spec: Keys MUST be unique; first one wins. + // Parser cannot abort this mapping earlier, since lines + // are processed sequentially. + // But overwriting is allowed when a merge node is used in current block. + if ('<<' === $key) { + foreach ($value as $parsedValue) { + $output += $parsedValue; + } + } elseif ($allowOverwrite || !isset($output[$key])) { + if (null !== $tag) { + $output[$key] = new TaggedValue($tag, $value); + } else { + $output[$key] = $value; + } + } elseif (isset($output[$key])) { + throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), self::$parsedLineNumber + 1, $mapping); + } + break; + case '{': + // nested mapping + $value = self::parseMapping($mapping, $flags, $i, $references); + // Spec: Keys MUST be unique; first one wins. + // Parser cannot abort this mapping earlier, since lines + // are processed sequentially. + // But overwriting is allowed when a merge node is used in current block. + if ('<<' === $key) { + $output += $value; + } elseif ($allowOverwrite || !isset($output[$key])) { + if (null !== $tag) { + $output[$key] = new TaggedValue($tag, $value); + } else { + $output[$key] = $value; + } + } elseif (isset($output[$key])) { + throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), self::$parsedLineNumber + 1, $mapping); + } + break; + default: + $value = self::parseScalar($mapping, $flags, [',', '}', "\n"], $i, null === $tag, $references); + // Spec: Keys MUST be unique; first one wins. + // Parser cannot abort this mapping earlier, since lines + // are processed sequentially. + // But overwriting is allowed when a merge node is used in current block. + if ('<<' === $key) { + $output += $value; + } elseif ($allowOverwrite || !isset($output[$key])) { + if (null !== $tag) { + $output[$key] = new TaggedValue($tag, $value); + } else { + $output[$key] = $value; + } + } elseif (isset($output[$key])) { + throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), self::$parsedLineNumber + 1, $mapping); + } + --$i; + } + ++$i; + + continue 2; + } + } + + throw new ParseException(sprintf('Malformed inline YAML string: "%s".', $mapping), self::$parsedLineNumber + 1, null, self::$parsedFilename); + } + + /** + * Evaluates scalars and replaces magic values. + * + * @return mixed The evaluated YAML string + * + * @throws ParseException when object parsing support was disabled and the parser detected a PHP object or when a reference could not be resolved + */ + private static function evaluateScalar(string $scalar, int $flags, array $references = []) + { + $scalar = trim($scalar); + $scalarLower = strtolower($scalar); + + if (0 === strpos($scalar, '*')) { + if (false !== $pos = strpos($scalar, '#')) { + $value = substr($scalar, 1, $pos - 2); + } else { + $value = substr($scalar, 1); + } + + // an unquoted * + if (false === $value || '' === $value) { + throw new ParseException('A reference must contain at least one character.', self::$parsedLineNumber + 1, $value, self::$parsedFilename); + } + + if (!\array_key_exists($value, $references)) { + throw new ParseException(sprintf('Reference "%s" does not exist.', $value), self::$parsedLineNumber + 1, $value, self::$parsedFilename); + } + + return $references[$value]; + } + + switch (true) { + case 'null' === $scalarLower: + case '' === $scalar: + case '~' === $scalar: + return null; + case 'true' === $scalarLower: + return true; + case 'false' === $scalarLower: + return false; + case '!' === $scalar[0]: + switch (true) { + case 0 === strpos($scalar, '!!str '): + return (string) substr($scalar, 6); + case 0 === strpos($scalar, '! '): + return substr($scalar, 2); + case 0 === strpos($scalar, '!php/object'): + if (self::$objectSupport) { + if (!isset($scalar[12])) { + return false; + } + + return unserialize(self::parseScalar(substr($scalar, 12))); + } + + if (self::$exceptionOnInvalidType) { + throw new ParseException('Object support when parsing a YAML file has been disabled.', self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + + return null; + case 0 === strpos($scalar, '!php/const'): + if (self::$constantSupport) { + if (!isset($scalar[11])) { + return ''; + } + + $i = 0; + if (\defined($const = self::parseScalar(substr($scalar, 11), 0, null, $i, false))) { + return \constant($const); + } + + throw new ParseException(sprintf('The constant "%s" is not defined.', $const), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + if (self::$exceptionOnInvalidType) { + throw new ParseException(sprintf('The string "%s" could not be parsed as a constant. Did you forget to pass the "Yaml::PARSE_CONSTANT" flag to the parser?', $scalar), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + + return null; + case 0 === strpos($scalar, '!!float '): + return (float) substr($scalar, 8); + case 0 === strpos($scalar, '!!binary '): + return self::evaluateBinaryScalar(substr($scalar, 9)); + default: + throw new ParseException(sprintf('The string "%s" could not be parsed as it uses an unsupported built-in tag.', $scalar), self::$parsedLineNumber, $scalar, self::$parsedFilename); + } + + // Optimize for returning strings. + // no break + case '+' === $scalar[0] || '-' === $scalar[0] || '.' === $scalar[0] || is_numeric($scalar[0]): + if (Parser::preg_match('{^[+-]?[0-9][0-9_]*$}', $scalar)) { + $scalar = str_replace('_', '', (string) $scalar); + } + + switch (true) { + case ctype_digit($scalar): + $raw = $scalar; + $cast = (int) $scalar; + + return '0' == $scalar[0] ? octdec($scalar) : (((string) $raw == (string) $cast) ? $cast : $raw); + case '-' === $scalar[0] && ctype_digit(substr($scalar, 1)): + $raw = $scalar; + $cast = (int) $scalar; + + return '0' == $scalar[1] ? -octdec(substr($scalar, 1)) : (($raw === (string) $cast) ? $cast : $raw); + case is_numeric($scalar): + case Parser::preg_match(self::getHexRegex(), $scalar): + $scalar = str_replace('_', '', $scalar); + + return '0x' === $scalar[0].$scalar[1] ? hexdec($scalar) : (float) $scalar; + case '.inf' === $scalarLower: + case '.nan' === $scalarLower: + return -log(0); + case '-.inf' === $scalarLower: + return log(0); + case Parser::preg_match('/^(-|\+)?[0-9][0-9_]*(\.[0-9_]+)?$/', $scalar): + return (float) str_replace('_', '', $scalar); + case Parser::preg_match(self::getTimestampRegex(), $scalar): + if (Yaml::PARSE_DATETIME & $flags) { + // When no timezone is provided in the parsed date, YAML spec says we must assume UTC. + return new \DateTime($scalar, new \DateTimeZone('UTC')); + } + + $timeZone = date_default_timezone_get(); + date_default_timezone_set('UTC'); + $time = strtotime($scalar); + date_default_timezone_set($timeZone); + + return $time; + } + } + + return (string) $scalar; + } + + private static function parseTag(string $value, int &$i, int $flags): ?string + { + if ('!' !== $value[$i]) { + return null; + } + + $tagLength = strcspn($value, " \t\n[]{},", $i + 1); + $tag = substr($value, $i + 1, $tagLength); + + $nextOffset = $i + $tagLength + 1; + $nextOffset += strspn($value, ' ', $nextOffset); + + if ('' === $tag && (!isset($value[$nextOffset]) || \in_array($value[$nextOffset], [']', '}', ','], true))) { + throw new ParseException(sprintf('Using the unquoted scalar value "!" is not supported. You must quote it.', $value), self::$parsedLineNumber + 1, $value, self::$parsedFilename); + } + + // Is followed by a scalar and is a built-in tag + if ('' !== $tag && (!isset($value[$nextOffset]) || !\in_array($value[$nextOffset], ['[', '{'], true)) && ('!' === $tag[0] || 'str' === $tag || 'php/const' === $tag || 'php/object' === $tag)) { + // Manage in {@link self::evaluateScalar()} + return null; + } + + $i = $nextOffset; + + // Built-in tags + if ('' !== $tag && '!' === $tag[0]) { + throw new ParseException(sprintf('The built-in tag "!%s" is not implemented.', $tag), self::$parsedLineNumber + 1, $value, self::$parsedFilename); + } + + if ('' !== $tag && !isset($value[$i])) { + throw new ParseException(sprintf('Missing value for tag "%s".', $tag), self::$parsedLineNumber + 1, $value, self::$parsedFilename); + } + + if ('' === $tag || Yaml::PARSE_CUSTOM_TAGS & $flags) { + return $tag; + } + + throw new ParseException(sprintf('Tags support is not enabled. Enable the "Yaml::PARSE_CUSTOM_TAGS" flag to use "!%s".', $tag), self::$parsedLineNumber + 1, $value, self::$parsedFilename); + } + + public static function evaluateBinaryScalar(string $scalar): string + { + $parsedBinaryData = self::parseScalar(preg_replace('/\s/', '', $scalar)); + + if (0 !== (\strlen($parsedBinaryData) % 4)) { + throw new ParseException(sprintf('The normalized base64 encoded data (data without whitespace characters) length must be a multiple of four (%d bytes given).', \strlen($parsedBinaryData)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + + if (!Parser::preg_match('#^[A-Z0-9+/]+={0,2}$#i', $parsedBinaryData)) { + throw new ParseException(sprintf('The base64 encoded data (%s) contains invalid characters.', $parsedBinaryData), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + + return base64_decode($parsedBinaryData, true); + } + + private static function isBinaryString(string $value): bool + { + return !preg_match('//u', $value) || preg_match('/[^\x00\x07-\x0d\x1B\x20-\xff]/', $value); + } + + /** + * Gets a regex that matches a YAML date. + * + * @return string The regular expression + * + * @see http://www.yaml.org/spec/1.2/spec.html#id2761573 + */ + private static function getTimestampRegex(): string + { + return <<[0-9][0-9][0-9][0-9]) + -(?P[0-9][0-9]?) + -(?P[0-9][0-9]?) + (?:(?:[Tt]|[ \t]+) + (?P[0-9][0-9]?) + :(?P[0-9][0-9]) + :(?P[0-9][0-9]) + (?:\.(?P[0-9]*))? + (?:[ \t]*(?PZ|(?P[-+])(?P[0-9][0-9]?) + (?::(?P[0-9][0-9]))?))?)? + $~x +EOF; + } + + /** + * Gets a regex that matches a YAML number in hexadecimal notation. + */ + private static function getHexRegex(): string + { + return '~^0x[0-9a-f_]++$~i'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/yaml/LICENSE b/soc/2020/daily_report/archive/app/vendor/symfony/yaml/LICENSE new file mode 100644 index 0000000..9e936ec --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/yaml/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2004-2020 Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Parser.php b/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Parser.php new file mode 100644 index 0000000..9550889 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Parser.php @@ -0,0 +1,1245 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml; + +use Symfony\Component\Yaml\Exception\ParseException; +use Symfony\Component\Yaml\Tag\TaggedValue; + +/** + * Parser parses YAML strings to convert them to PHP arrays. + * + * @author Fabien Potencier + * + * @final + */ +class Parser +{ + const TAG_PATTERN = '(?P![\w!.\/:-]+)'; + const BLOCK_SCALAR_HEADER_PATTERN = '(?P\||>)(?P\+|\-|\d+|\+\d+|\-\d+|\d+\+|\d+\-)?(?P +#.*)?'; + + private $filename; + private $offset = 0; + private $totalNumberOfLines; + private $lines = []; + private $currentLineNb = -1; + private $currentLine = ''; + private $refs = []; + private $skippedLineNumbers = []; + private $locallySkippedLineNumbers = []; + private $refsBeingParsed = []; + + /** + * Parses a YAML file into a PHP value. + * + * @param string $filename The path to the YAML file to be parsed + * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior + * + * @return mixed The YAML converted to a PHP value + * + * @throws ParseException If the file could not be read or the YAML is not valid + */ + public function parseFile(string $filename, int $flags = 0) + { + if (!is_file($filename)) { + throw new ParseException(sprintf('File "%s" does not exist.', $filename)); + } + + if (!is_readable($filename)) { + throw new ParseException(sprintf('File "%s" cannot be read.', $filename)); + } + + $this->filename = $filename; + + try { + return $this->parse(file_get_contents($filename), $flags); + } finally { + $this->filename = null; + } + } + + /** + * Parses a YAML string to a PHP value. + * + * @param string $value A YAML string + * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior + * + * @return mixed A PHP value + * + * @throws ParseException If the YAML is not valid + */ + public function parse(string $value, int $flags = 0) + { + if (false === preg_match('//u', $value)) { + throw new ParseException('The YAML value does not appear to be valid UTF-8.', -1, null, $this->filename); + } + + $this->refs = []; + + $mbEncoding = null; + + if (2 /* MB_OVERLOAD_STRING */ & (int) ini_get('mbstring.func_overload')) { + $mbEncoding = mb_internal_encoding(); + mb_internal_encoding('UTF-8'); + } + + try { + $data = $this->doParse($value, $flags); + } finally { + if (null !== $mbEncoding) { + mb_internal_encoding($mbEncoding); + } + $this->lines = []; + $this->currentLine = ''; + $this->refs = []; + $this->skippedLineNumbers = []; + $this->locallySkippedLineNumbers = []; + } + + return $data; + } + + private function doParse(string $value, int $flags) + { + $this->currentLineNb = -1; + $this->currentLine = ''; + $value = $this->cleanup($value); + $this->lines = explode("\n", $value); + $this->locallySkippedLineNumbers = []; + + if (null === $this->totalNumberOfLines) { + $this->totalNumberOfLines = \count($this->lines); + } + + if (!$this->moveToNextLine()) { + return null; + } + + $data = []; + $context = null; + $allowOverwrite = false; + + while ($this->isCurrentLineEmpty()) { + if (!$this->moveToNextLine()) { + return null; + } + } + + // Resolves the tag and returns if end of the document + if (null !== ($tag = $this->getLineTag($this->currentLine, $flags, false)) && !$this->moveToNextLine()) { + return new TaggedValue($tag, ''); + } + + do { + if ($this->isCurrentLineEmpty()) { + continue; + } + + // tab? + if ("\t" === $this->currentLine[0]) { + throw new ParseException('A YAML file cannot contain tabs as indentation.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + Inline::initialize($flags, $this->getRealCurrentLineNb(), $this->filename); + + $isRef = $mergeNode = false; + if ('-' === $this->currentLine[0] && self::preg_match('#^\-((?P\s+)(?P.+))?$#u', rtrim($this->currentLine), $values)) { + if ($context && 'mapping' == $context) { + throw new ParseException('You cannot define a sequence item when in a mapping.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + $context = 'sequence'; + + if (isset($values['value']) && '&' === $values['value'][0] && self::preg_match('#^&(?P[^ ]+) *(?P.*)#u', $values['value'], $matches)) { + $isRef = $matches['ref']; + $this->refsBeingParsed[] = $isRef; + $values['value'] = $matches['value']; + } + + if (isset($values['value'][1]) && '?' === $values['value'][0] && ' ' === $values['value'][1]) { + throw new ParseException('Complex mappings are not supported.', $this->getRealCurrentLineNb() + 1, $this->currentLine); + } + + // array + if (!isset($values['value']) || '' == trim($values['value'], ' ') || 0 === strpos(ltrim($values['value'], ' '), '#')) { + $data[] = $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(null, true) ?? '', $flags); + } elseif (null !== $subTag = $this->getLineTag(ltrim($values['value'], ' '), $flags)) { + $data[] = new TaggedValue( + $subTag, + $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(null, true), $flags) + ); + } else { + if (isset($values['leadspaces']) + && self::preg_match('#^(?P'.Inline::REGEX_QUOTED_STRING.'|[^ \'"\{\[].*?) *\:(\s+(?P.+?))?\s*$#u', $this->trimTag($values['value']), $matches) + ) { + // this is a compact notation element, add to next block and parse + $block = $values['value']; + if ($this->isNextLineIndented()) { + $block .= "\n".$this->getNextEmbedBlock($this->getCurrentLineIndentation() + \strlen($values['leadspaces']) + 1); + } + + $data[] = $this->parseBlock($this->getRealCurrentLineNb(), $block, $flags); + } else { + $data[] = $this->parseValue($values['value'], $flags, $context); + } + } + if ($isRef) { + $this->refs[$isRef] = end($data); + array_pop($this->refsBeingParsed); + } + } elseif ( + self::preg_match('#^(?P(?:![^\s]++\s++)?(?:'.Inline::REGEX_QUOTED_STRING.'|(?:!?!php/const:)?[^ \'"\[\{!].*?)) *\:(\s++(?P.+))?$#u', rtrim($this->currentLine), $values) + && (false === strpos($values['key'], ' #') || \in_array($values['key'][0], ['"', "'"])) + ) { + if ($context && 'sequence' == $context) { + throw new ParseException('You cannot define a mapping item when in a sequence.', $this->currentLineNb + 1, $this->currentLine, $this->filename); + } + $context = 'mapping'; + + try { + $key = Inline::parseScalar($values['key']); + } catch (ParseException $e) { + $e->setParsedLine($this->getRealCurrentLineNb() + 1); + $e->setSnippet($this->currentLine); + + throw $e; + } + + if (!\is_string($key) && !\is_int($key)) { + throw new ParseException(sprintf('%s keys are not supported. Quote your evaluable mapping keys instead.', is_numeric($key) ? 'Numeric' : 'Non-string'), $this->getRealCurrentLineNb() + 1, $this->currentLine); + } + + // Convert float keys to strings, to avoid being converted to integers by PHP + if (\is_float($key)) { + $key = (string) $key; + } + + if ('<<' === $key && (!isset($values['value']) || '&' !== $values['value'][0] || !self::preg_match('#^&(?P[^ ]+)#u', $values['value'], $refMatches))) { + $mergeNode = true; + $allowOverwrite = true; + if (isset($values['value'][0]) && '*' === $values['value'][0]) { + $refName = substr(rtrim($values['value']), 1); + if (!\array_key_exists($refName, $this->refs)) { + if (false !== $pos = array_search($refName, $this->refsBeingParsed, true)) { + throw new ParseException(sprintf('Circular reference [%s, %s] detected for reference "%s".', implode(', ', \array_slice($this->refsBeingParsed, $pos)), $refName, $refName), $this->currentLineNb + 1, $this->currentLine, $this->filename); + } + + throw new ParseException(sprintf('Reference "%s" does not exist.', $refName), $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + $refValue = $this->refs[$refName]; + + if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $refValue instanceof \stdClass) { + $refValue = (array) $refValue; + } + + if (!\is_array($refValue)) { + throw new ParseException('YAML merge keys used with a scalar value instead of an array.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + $data += $refValue; // array union + } else { + if (isset($values['value']) && '' !== $values['value']) { + $value = $values['value']; + } else { + $value = $this->getNextEmbedBlock(); + } + $parsed = $this->parseBlock($this->getRealCurrentLineNb() + 1, $value, $flags); + + if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $parsed instanceof \stdClass) { + $parsed = (array) $parsed; + } + + if (!\is_array($parsed)) { + throw new ParseException('YAML merge keys used with a scalar value instead of an array.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + if (isset($parsed[0])) { + // If the value associated with the merge key is a sequence, then this sequence is expected to contain mapping nodes + // and each of these nodes is merged in turn according to its order in the sequence. Keys in mapping nodes earlier + // in the sequence override keys specified in later mapping nodes. + foreach ($parsed as $parsedItem) { + if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $parsedItem instanceof \stdClass) { + $parsedItem = (array) $parsedItem; + } + + if (!\is_array($parsedItem)) { + throw new ParseException('Merge items must be arrays.', $this->getRealCurrentLineNb() + 1, $parsedItem, $this->filename); + } + + $data += $parsedItem; // array union + } + } else { + // If the value associated with the key is a single mapping node, each of its key/value pairs is inserted into the + // current mapping, unless the key already exists in it. + $data += $parsed; // array union + } + } + } elseif ('<<' !== $key && isset($values['value']) && '&' === $values['value'][0] && self::preg_match('#^&(?P[^ ]++) *+(?P.*)#u', $values['value'], $matches)) { + $isRef = $matches['ref']; + $this->refsBeingParsed[] = $isRef; + $values['value'] = $matches['value']; + } + + $subTag = null; + if ($mergeNode) { + // Merge keys + } elseif (!isset($values['value']) || '' === $values['value'] || 0 === strpos($values['value'], '#') || (null !== $subTag = $this->getLineTag($values['value'], $flags)) || '<<' === $key) { + // hash + // if next line is less indented or equal, then it means that the current value is null + if (!$this->isNextLineIndented() && !$this->isNextLineUnIndentedCollection()) { + // Spec: Keys MUST be unique; first one wins. + // But overwriting is allowed when a merge node is used in current block. + if ($allowOverwrite || !isset($data[$key])) { + if (null !== $subTag) { + $data[$key] = new TaggedValue($subTag, ''); + } else { + $data[$key] = null; + } + } else { + throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), $this->getRealCurrentLineNb() + 1, $this->currentLine); + } + } else { + // remember the parsed line number here in case we need it to provide some contexts in error messages below + $realCurrentLineNbKey = $this->getRealCurrentLineNb(); + $value = $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(), $flags); + if ('<<' === $key) { + $this->refs[$refMatches['ref']] = $value; + + if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $value instanceof \stdClass) { + $value = (array) $value; + } + + $data += $value; + } elseif ($allowOverwrite || !isset($data[$key])) { + // Spec: Keys MUST be unique; first one wins. + // But overwriting is allowed when a merge node is used in current block. + if (null !== $subTag) { + $data[$key] = new TaggedValue($subTag, $value); + } else { + $data[$key] = $value; + } + } else { + throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), $realCurrentLineNbKey + 1, $this->currentLine); + } + } + } else { + $value = $this->parseValue(rtrim($values['value']), $flags, $context); + // Spec: Keys MUST be unique; first one wins. + // But overwriting is allowed when a merge node is used in current block. + if ($allowOverwrite || !isset($data[$key])) { + $data[$key] = $value; + } else { + throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), $this->getRealCurrentLineNb() + 1, $this->currentLine); + } + } + if ($isRef) { + $this->refs[$isRef] = $data[$key]; + array_pop($this->refsBeingParsed); + } + } elseif ('"' === $this->currentLine[0] || "'" === $this->currentLine[0]) { + if (null !== $context) { + throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + try { + return Inline::parse($this->parseQuotedString($this->currentLine), $flags, $this->refs); + } catch (ParseException $e) { + $e->setParsedLine($this->getRealCurrentLineNb() + 1); + $e->setSnippet($this->currentLine); + + throw $e; + } + } elseif ('{' === $this->currentLine[0]) { + if (null !== $context) { + throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + try { + $parsedMapping = Inline::parse($this->lexInlineMapping($this->currentLine), $flags, $this->refs); + + while ($this->moveToNextLine()) { + if (!$this->isCurrentLineEmpty()) { + throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + } + + return $parsedMapping; + } catch (ParseException $e) { + $e->setParsedLine($this->getRealCurrentLineNb() + 1); + $e->setSnippet($this->currentLine); + + throw $e; + } + } elseif ('[' === $this->currentLine[0]) { + if (null !== $context) { + throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + try { + $parsedSequence = Inline::parse($this->lexInlineSequence($this->currentLine), $flags, $this->refs); + + while ($this->moveToNextLine()) { + if (!$this->isCurrentLineEmpty()) { + throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + } + + return $parsedSequence; + } catch (ParseException $e) { + $e->setParsedLine($this->getRealCurrentLineNb() + 1); + $e->setSnippet($this->currentLine); + + throw $e; + } + } else { + // multiple documents are not supported + if ('---' === $this->currentLine) { + throw new ParseException('Multiple documents are not supported.', $this->currentLineNb + 1, $this->currentLine, $this->filename); + } + + if ($deprecatedUsage = (isset($this->currentLine[1]) && '?' === $this->currentLine[0] && ' ' === $this->currentLine[1])) { + throw new ParseException('Complex mappings are not supported.', $this->getRealCurrentLineNb() + 1, $this->currentLine); + } + + // 1-liner optionally followed by newline(s) + if (\is_string($value) && $this->lines[0] === trim($value)) { + try { + $value = Inline::parse($this->lines[0], $flags, $this->refs); + } catch (ParseException $e) { + $e->setParsedLine($this->getRealCurrentLineNb() + 1); + $e->setSnippet($this->currentLine); + + throw $e; + } + + return $value; + } + + // try to parse the value as a multi-line string as a last resort + if (0 === $this->currentLineNb) { + $previousLineWasNewline = false; + $previousLineWasTerminatedWithBackslash = false; + $value = ''; + + foreach ($this->lines as $line) { + if ('' !== ltrim($line) && '#' === ltrim($line)[0]) { + continue; + } + // If the indentation is not consistent at offset 0, it is to be considered as a ParseError + if (0 === $this->offset && !$deprecatedUsage && isset($line[0]) && ' ' === $line[0]) { + throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + if (false !== strpos($line, ': ')) { + throw new ParseException('Mapping values are not allowed in multi-line blocks.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + if ('' === trim($line)) { + $value .= "\n"; + } elseif (!$previousLineWasNewline && !$previousLineWasTerminatedWithBackslash) { + $value .= ' '; + } + + if ('' !== trim($line) && '\\' === substr($line, -1)) { + $value .= ltrim(substr($line, 0, -1)); + } elseif ('' !== trim($line)) { + $value .= trim($line); + } + + if ('' === trim($line)) { + $previousLineWasNewline = true; + $previousLineWasTerminatedWithBackslash = false; + } elseif ('\\' === substr($line, -1)) { + $previousLineWasNewline = false; + $previousLineWasTerminatedWithBackslash = true; + } else { + $previousLineWasNewline = false; + $previousLineWasTerminatedWithBackslash = false; + } + } + + try { + return Inline::parse(trim($value)); + } catch (ParseException $e) { + // fall-through to the ParseException thrown below + } + } + + throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + } while ($this->moveToNextLine()); + + if (null !== $tag) { + $data = new TaggedValue($tag, $data); + } + + if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && !\is_object($data) && 'mapping' === $context) { + $object = new \stdClass(); + + foreach ($data as $key => $value) { + $object->$key = $value; + } + + $data = $object; + } + + return empty($data) ? null : $data; + } + + private function parseBlock(int $offset, string $yaml, int $flags) + { + $skippedLineNumbers = $this->skippedLineNumbers; + + foreach ($this->locallySkippedLineNumbers as $lineNumber) { + if ($lineNumber < $offset) { + continue; + } + + $skippedLineNumbers[] = $lineNumber; + } + + $parser = new self(); + $parser->offset = $offset; + $parser->totalNumberOfLines = $this->totalNumberOfLines; + $parser->skippedLineNumbers = $skippedLineNumbers; + $parser->refs = &$this->refs; + $parser->refsBeingParsed = $this->refsBeingParsed; + + return $parser->doParse($yaml, $flags); + } + + /** + * Returns the current line number (takes the offset into account). + * + * @internal + * + * @return int The current line number + */ + public function getRealCurrentLineNb(): int + { + $realCurrentLineNumber = $this->currentLineNb + $this->offset; + + foreach ($this->skippedLineNumbers as $skippedLineNumber) { + if ($skippedLineNumber > $realCurrentLineNumber) { + break; + } + + ++$realCurrentLineNumber; + } + + return $realCurrentLineNumber; + } + + /** + * Returns the current line indentation. + * + * @return int The current line indentation + */ + private function getCurrentLineIndentation(): int + { + return \strlen($this->currentLine) - \strlen(ltrim($this->currentLine, ' ')); + } + + /** + * Returns the next embed block of YAML. + * + * @param int|null $indentation The indent level at which the block is to be read, or null for default + * @param bool $inSequence True if the enclosing data structure is a sequence + * + * @return string A YAML string + * + * @throws ParseException When indentation problem are detected + */ + private function getNextEmbedBlock(int $indentation = null, bool $inSequence = false): string + { + $oldLineIndentation = $this->getCurrentLineIndentation(); + + if (!$this->moveToNextLine()) { + return ''; + } + + if (null === $indentation) { + $newIndent = null; + $movements = 0; + + do { + $EOF = false; + + // empty and comment-like lines do not influence the indentation depth + if ($this->isCurrentLineEmpty() || $this->isCurrentLineComment()) { + $EOF = !$this->moveToNextLine(); + + if (!$EOF) { + ++$movements; + } + } else { + $newIndent = $this->getCurrentLineIndentation(); + } + } while (!$EOF && null === $newIndent); + + for ($i = 0; $i < $movements; ++$i) { + $this->moveToPreviousLine(); + } + + $unindentedEmbedBlock = $this->isStringUnIndentedCollectionItem(); + + if (!$this->isCurrentLineEmpty() && 0 === $newIndent && !$unindentedEmbedBlock) { + throw new ParseException('Indentation problem.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + } else { + $newIndent = $indentation; + } + + $data = []; + if ($this->getCurrentLineIndentation() >= $newIndent) { + $data[] = substr($this->currentLine, $newIndent); + } elseif ($this->isCurrentLineEmpty() || $this->isCurrentLineComment()) { + $data[] = $this->currentLine; + } else { + $this->moveToPreviousLine(); + + return ''; + } + + if ($inSequence && $oldLineIndentation === $newIndent && isset($data[0][0]) && '-' === $data[0][0]) { + // the previous line contained a dash but no item content, this line is a sequence item with the same indentation + // and therefore no nested list or mapping + $this->moveToPreviousLine(); + + return ''; + } + + $isItUnindentedCollection = $this->isStringUnIndentedCollectionItem(); + + while ($this->moveToNextLine()) { + $indent = $this->getCurrentLineIndentation(); + + if ($isItUnindentedCollection && !$this->isCurrentLineEmpty() && !$this->isStringUnIndentedCollectionItem() && $newIndent === $indent) { + $this->moveToPreviousLine(); + break; + } + + if ($this->isCurrentLineBlank()) { + $data[] = substr($this->currentLine, $newIndent); + continue; + } + + if ($indent >= $newIndent) { + $data[] = substr($this->currentLine, $newIndent); + } elseif ($this->isCurrentLineComment()) { + $data[] = $this->currentLine; + } elseif (0 == $indent) { + $this->moveToPreviousLine(); + + break; + } else { + throw new ParseException('Indentation problem.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + } + + return implode("\n", $data); + } + + /** + * Moves the parser to the next line. + */ + private function moveToNextLine(): bool + { + if ($this->currentLineNb >= \count($this->lines) - 1) { + return false; + } + + $this->currentLine = $this->lines[++$this->currentLineNb]; + + return true; + } + + /** + * Moves the parser to the previous line. + */ + private function moveToPreviousLine(): bool + { + if ($this->currentLineNb < 1) { + return false; + } + + $this->currentLine = $this->lines[--$this->currentLineNb]; + + return true; + } + + /** + * Parses a YAML value. + * + * @param string $value A YAML value + * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior + * @param string $context The parser context (either sequence or mapping) + * + * @return mixed A PHP value + * + * @throws ParseException When reference does not exist + */ + private function parseValue(string $value, int $flags, string $context) + { + if (0 === strpos($value, '*')) { + if (false !== $pos = strpos($value, '#')) { + $value = substr($value, 1, $pos - 2); + } else { + $value = substr($value, 1); + } + + if (!\array_key_exists($value, $this->refs)) { + if (false !== $pos = array_search($value, $this->refsBeingParsed, true)) { + throw new ParseException(sprintf('Circular reference [%s, %s] detected for reference "%s".', implode(', ', \array_slice($this->refsBeingParsed, $pos)), $value, $value), $this->currentLineNb + 1, $this->currentLine, $this->filename); + } + + throw new ParseException(sprintf('Reference "%s" does not exist.', $value), $this->currentLineNb + 1, $this->currentLine, $this->filename); + } + + return $this->refs[$value]; + } + + if (\in_array($value[0], ['!', '|', '>'], true) && self::preg_match('/^(?:'.self::TAG_PATTERN.' +)?'.self::BLOCK_SCALAR_HEADER_PATTERN.'$/', $value, $matches)) { + $modifiers = isset($matches['modifiers']) ? $matches['modifiers'] : ''; + + $data = $this->parseBlockScalar($matches['separator'], preg_replace('#\d+#', '', $modifiers), (int) abs((int) $modifiers)); + + if ('' !== $matches['tag'] && '!' !== $matches['tag']) { + if ('!!binary' === $matches['tag']) { + return Inline::evaluateBinaryScalar($data); + } + + return new TaggedValue(substr($matches['tag'], 1), $data); + } + + return $data; + } + + try { + if ('' !== $value && '{' === $value[0]) { + return Inline::parse($this->lexInlineMapping($value), $flags, $this->refs); + } elseif ('' !== $value && '[' === $value[0]) { + return Inline::parse($this->lexInlineSequence($value), $flags, $this->refs); + } + + $quotation = '' !== $value && ('"' === $value[0] || "'" === $value[0]) ? $value[0] : null; + + // do not take following lines into account when the current line is a quoted single line value + if (null !== $quotation && self::preg_match('/^'.$quotation.'.*'.$quotation.'(\s*#.*)?$/', $value)) { + return Inline::parse($value, $flags, $this->refs); + } + + $lines = []; + + while ($this->moveToNextLine()) { + // unquoted strings end before the first unindented line + if (null === $quotation && 0 === $this->getCurrentLineIndentation()) { + $this->moveToPreviousLine(); + + break; + } + + $lines[] = trim($this->currentLine); + + // quoted string values end with a line that is terminated with the quotation character + if ('' !== $this->currentLine && substr($this->currentLine, -1) === $quotation) { + break; + } + } + + for ($i = 0, $linesCount = \count($lines), $previousLineBlank = false; $i < $linesCount; ++$i) { + if ('' === $lines[$i]) { + $value .= "\n"; + $previousLineBlank = true; + } elseif ($previousLineBlank) { + $value .= $lines[$i]; + $previousLineBlank = false; + } else { + $value .= ' '.$lines[$i]; + $previousLineBlank = false; + } + } + + Inline::$parsedLineNumber = $this->getRealCurrentLineNb(); + + $parsedValue = Inline::parse($value, $flags, $this->refs); + + if ('mapping' === $context && \is_string($parsedValue) && '"' !== $value[0] && "'" !== $value[0] && '[' !== $value[0] && '{' !== $value[0] && '!' !== $value[0] && false !== strpos($parsedValue, ': ')) { + throw new ParseException('A colon cannot be used in an unquoted mapping value.', $this->getRealCurrentLineNb() + 1, $value, $this->filename); + } + + return $parsedValue; + } catch (ParseException $e) { + $e->setParsedLine($this->getRealCurrentLineNb() + 1); + $e->setSnippet($this->currentLine); + + throw $e; + } + } + + /** + * Parses a block scalar. + * + * @param string $style The style indicator that was used to begin this block scalar (| or >) + * @param string $chomping The chomping indicator that was used to begin this block scalar (+ or -) + * @param int $indentation The indentation indicator that was used to begin this block scalar + */ + private function parseBlockScalar(string $style, string $chomping = '', int $indentation = 0): string + { + $notEOF = $this->moveToNextLine(); + if (!$notEOF) { + return ''; + } + + $isCurrentLineBlank = $this->isCurrentLineBlank(); + $blockLines = []; + + // leading blank lines are consumed before determining indentation + while ($notEOF && $isCurrentLineBlank) { + // newline only if not EOF + if ($notEOF = $this->moveToNextLine()) { + $blockLines[] = ''; + $isCurrentLineBlank = $this->isCurrentLineBlank(); + } + } + + // determine indentation if not specified + if (0 === $indentation) { + $currentLineLength = \strlen($this->currentLine); + + for ($i = 0; $i < $currentLineLength && ' ' === $this->currentLine[$i]; ++$i) { + ++$indentation; + } + } + + if ($indentation > 0) { + $pattern = sprintf('/^ {%d}(.*)$/', $indentation); + + while ( + $notEOF && ( + $isCurrentLineBlank || + self::preg_match($pattern, $this->currentLine, $matches) + ) + ) { + if ($isCurrentLineBlank && \strlen($this->currentLine) > $indentation) { + $blockLines[] = substr($this->currentLine, $indentation); + } elseif ($isCurrentLineBlank) { + $blockLines[] = ''; + } else { + $blockLines[] = $matches[1]; + } + + // newline only if not EOF + if ($notEOF = $this->moveToNextLine()) { + $isCurrentLineBlank = $this->isCurrentLineBlank(); + } + } + } elseif ($notEOF) { + $blockLines[] = ''; + } + + if ($notEOF) { + $blockLines[] = ''; + $this->moveToPreviousLine(); + } elseif (!$notEOF && !$this->isCurrentLineLastLineInDocument()) { + $blockLines[] = ''; + } + + // folded style + if ('>' === $style) { + $text = ''; + $previousLineIndented = false; + $previousLineBlank = false; + + for ($i = 0, $blockLinesCount = \count($blockLines); $i < $blockLinesCount; ++$i) { + if ('' === $blockLines[$i]) { + $text .= "\n"; + $previousLineIndented = false; + $previousLineBlank = true; + } elseif (' ' === $blockLines[$i][0]) { + $text .= "\n".$blockLines[$i]; + $previousLineIndented = true; + $previousLineBlank = false; + } elseif ($previousLineIndented) { + $text .= "\n".$blockLines[$i]; + $previousLineIndented = false; + $previousLineBlank = false; + } elseif ($previousLineBlank || 0 === $i) { + $text .= $blockLines[$i]; + $previousLineIndented = false; + $previousLineBlank = false; + } else { + $text .= ' '.$blockLines[$i]; + $previousLineIndented = false; + $previousLineBlank = false; + } + } + } else { + $text = implode("\n", $blockLines); + } + + // deal with trailing newlines + if ('' === $chomping) { + $text = preg_replace('/\n+$/', "\n", $text); + } elseif ('-' === $chomping) { + $text = preg_replace('/\n+$/', '', $text); + } + + return $text; + } + + /** + * Returns true if the next line is indented. + * + * @return bool Returns true if the next line is indented, false otherwise + */ + private function isNextLineIndented(): bool + { + $currentIndentation = $this->getCurrentLineIndentation(); + $movements = 0; + + do { + $EOF = !$this->moveToNextLine(); + + if (!$EOF) { + ++$movements; + } + } while (!$EOF && ($this->isCurrentLineEmpty() || $this->isCurrentLineComment())); + + if ($EOF) { + return false; + } + + $ret = $this->getCurrentLineIndentation() > $currentIndentation; + + for ($i = 0; $i < $movements; ++$i) { + $this->moveToPreviousLine(); + } + + return $ret; + } + + /** + * Returns true if the current line is blank or if it is a comment line. + * + * @return bool Returns true if the current line is empty or if it is a comment line, false otherwise + */ + private function isCurrentLineEmpty(): bool + { + return $this->isCurrentLineBlank() || $this->isCurrentLineComment(); + } + + /** + * Returns true if the current line is blank. + * + * @return bool Returns true if the current line is blank, false otherwise + */ + private function isCurrentLineBlank(): bool + { + return '' == trim($this->currentLine, ' '); + } + + /** + * Returns true if the current line is a comment line. + * + * @return bool Returns true if the current line is a comment line, false otherwise + */ + private function isCurrentLineComment(): bool + { + //checking explicitly the first char of the trim is faster than loops or strpos + $ltrimmedLine = ltrim($this->currentLine, ' '); + + return '' !== $ltrimmedLine && '#' === $ltrimmedLine[0]; + } + + private function isCurrentLineLastLineInDocument(): bool + { + return ($this->offset + $this->currentLineNb) >= ($this->totalNumberOfLines - 1); + } + + /** + * Cleanups a YAML string to be parsed. + * + * @param string $value The input YAML string + * + * @return string A cleaned up YAML string + */ + private function cleanup(string $value): string + { + $value = str_replace(["\r\n", "\r"], "\n", $value); + + // strip YAML header + $count = 0; + $value = preg_replace('#^\%YAML[: ][\d\.]+.*\n#u', '', $value, -1, $count); + $this->offset += $count; + + // remove leading comments + $trimmedValue = preg_replace('#^(\#.*?\n)+#s', '', $value, -1, $count); + if (1 === $count) { + // items have been removed, update the offset + $this->offset += substr_count($value, "\n") - substr_count($trimmedValue, "\n"); + $value = $trimmedValue; + } + + // remove start of the document marker (---) + $trimmedValue = preg_replace('#^\-\-\-.*?\n#s', '', $value, -1, $count); + if (1 === $count) { + // items have been removed, update the offset + $this->offset += substr_count($value, "\n") - substr_count($trimmedValue, "\n"); + $value = $trimmedValue; + + // remove end of the document marker (...) + $value = preg_replace('#\.\.\.\s*$#', '', $value); + } + + return $value; + } + + /** + * Returns true if the next line starts unindented collection. + * + * @return bool Returns true if the next line starts unindented collection, false otherwise + */ + private function isNextLineUnIndentedCollection(): bool + { + $currentIndentation = $this->getCurrentLineIndentation(); + $movements = 0; + + do { + $EOF = !$this->moveToNextLine(); + + if (!$EOF) { + ++$movements; + } + } while (!$EOF && ($this->isCurrentLineEmpty() || $this->isCurrentLineComment())); + + if ($EOF) { + return false; + } + + $ret = $this->getCurrentLineIndentation() === $currentIndentation && $this->isStringUnIndentedCollectionItem(); + + for ($i = 0; $i < $movements; ++$i) { + $this->moveToPreviousLine(); + } + + return $ret; + } + + /** + * Returns true if the string is un-indented collection item. + * + * @return bool Returns true if the string is un-indented collection item, false otherwise + */ + private function isStringUnIndentedCollectionItem(): bool + { + return '-' === rtrim($this->currentLine) || 0 === strpos($this->currentLine, '- '); + } + + /** + * A local wrapper for "preg_match" which will throw a ParseException if there + * is an internal error in the PCRE engine. + * + * This avoids us needing to check for "false" every time PCRE is used + * in the YAML engine + * + * @throws ParseException on a PCRE internal error + * + * @see preg_last_error() + * + * @internal + */ + public static function preg_match(string $pattern, string $subject, array &$matches = null, int $flags = 0, int $offset = 0): int + { + if (false === $ret = preg_match($pattern, $subject, $matches, $flags, $offset)) { + switch (preg_last_error()) { + case PREG_INTERNAL_ERROR: + $error = 'Internal PCRE error.'; + break; + case PREG_BACKTRACK_LIMIT_ERROR: + $error = 'pcre.backtrack_limit reached.'; + break; + case PREG_RECURSION_LIMIT_ERROR: + $error = 'pcre.recursion_limit reached.'; + break; + case PREG_BAD_UTF8_ERROR: + $error = 'Malformed UTF-8 data.'; + break; + case PREG_BAD_UTF8_OFFSET_ERROR: + $error = 'Offset doesn\'t correspond to the begin of a valid UTF-8 code point.'; + break; + default: + $error = 'Error.'; + } + + throw new ParseException($error); + } + + return $ret; + } + + /** + * Trim the tag on top of the value. + * + * Prevent values such as "!foo {quz: bar}" to be considered as + * a mapping block. + */ + private function trimTag(string $value): string + { + if ('!' === $value[0]) { + return ltrim(substr($value, 1, strcspn($value, " \r\n", 1)), ' '); + } + + return $value; + } + + private function getLineTag(string $value, int $flags, bool $nextLineCheck = true): ?string + { + if ('' === $value || '!' !== $value[0] || 1 !== self::preg_match('/^'.self::TAG_PATTERN.' *( +#.*)?$/', $value, $matches)) { + return null; + } + + if ($nextLineCheck && !$this->isNextLineIndented()) { + return null; + } + + $tag = substr($matches['tag'], 1); + + // Built-in tags + if ($tag && '!' === $tag[0]) { + throw new ParseException(sprintf('The built-in tag "!%s" is not implemented.', $tag), $this->getRealCurrentLineNb() + 1, $value, $this->filename); + } + + if (Yaml::PARSE_CUSTOM_TAGS & $flags) { + return $tag; + } + + throw new ParseException(sprintf('Tags support is not enabled. You must use the flag "Yaml::PARSE_CUSTOM_TAGS" to use "%s".', $matches['tag']), $this->getRealCurrentLineNb() + 1, $value, $this->filename); + } + + private function parseQuotedString(string $yaml): ?string + { + if ('' === $yaml || ('"' !== $yaml[0] && "'" !== $yaml[0])) { + throw new \InvalidArgumentException(sprintf('"%s" is not a quoted string.', $yaml)); + } + + $lines = [$yaml]; + + while ($this->moveToNextLine()) { + $lines[] = $this->currentLine; + + if (!$this->isCurrentLineEmpty() && $yaml[0] === $this->currentLine[-1]) { + break; + } + } + + $value = ''; + + for ($i = 0, $linesCount = \count($lines), $previousLineWasNewline = false, $previousLineWasTerminatedWithBackslash = false; $i < $linesCount; ++$i) { + if ('' === trim($lines[$i])) { + $value .= "\n"; + } elseif (!$previousLineWasNewline && !$previousLineWasTerminatedWithBackslash) { + $value .= ' '; + } + + if ('' !== trim($lines[$i]) && '\\' === substr($lines[$i], -1)) { + $value .= ltrim(substr($lines[$i], 0, -1)); + } elseif ('' !== trim($lines[$i])) { + $value .= trim($lines[$i]); + } + + if ('' === trim($lines[$i])) { + $previousLineWasNewline = true; + $previousLineWasTerminatedWithBackslash = false; + } elseif ('\\' === substr($lines[$i], -1)) { + $previousLineWasNewline = false; + $previousLineWasTerminatedWithBackslash = true; + } else { + $previousLineWasNewline = false; + $previousLineWasTerminatedWithBackslash = false; + } + } + + return $value; + + for ($i = 1; isset($yaml[$i]) && $quotation !== $yaml[$i]; ++$i) { + } + + // quoted single line string + if (isset($yaml[$i]) && $quotation === $yaml[$i]) { + return $yaml; + } + + $lines = [$yaml]; + + while ($this->moveToNextLine()) { + for ($i = 1; isset($this->currentLine[$i]) && $quotation !== $this->currentLine[$i]; ++$i) { + } + + $lines[] = trim($this->currentLine); + + if (isset($this->currentLine[$i]) && $quotation === $this->currentLine[$i]) { + break; + } + } + } + + private function lexInlineMapping(string $yaml): string + { + if ('' === $yaml || '{' !== $yaml[0]) { + throw new \InvalidArgumentException(sprintf('"%s" is not a sequence.', $yaml)); + } + + for ($i = 1; isset($yaml[$i]) && '}' !== $yaml[$i]; ++$i) { + } + + if (isset($yaml[$i]) && '}' === $yaml[$i]) { + return $yaml; + } + + $lines = [$yaml]; + + while ($this->moveToNextLine()) { + $lines[] = $this->currentLine; + } + + return implode("\n", $lines); + } + + private function lexInlineSequence(string $yaml): string + { + if ('' === $yaml || '[' !== $yaml[0]) { + throw new \InvalidArgumentException(sprintf('"%s" is not a sequence.', $yaml)); + } + + for ($i = 1; isset($yaml[$i]) && ']' !== $yaml[$i]; ++$i) { + } + + if (isset($yaml[$i]) && ']' === $yaml[$i]) { + return $yaml; + } + + $value = $yaml; + + while ($this->moveToNextLine()) { + for ($i = 1; isset($this->currentLine[$i]) && ']' !== $this->currentLine[$i]; ++$i) { + } + + $value .= trim($this->currentLine); + + if (isset($this->currentLine[$i]) && ']' === $this->currentLine[$i]) { + break; + } + } + + return $value; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/yaml/README.md b/soc/2020/daily_report/archive/app/vendor/symfony/yaml/README.md new file mode 100644 index 0000000..b914e78 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/yaml/README.md @@ -0,0 +1,13 @@ +Yaml Component +============== + +The Yaml component loads and dumps YAML files. + +Resources +--------- + + * [Documentation](https://symfony.com/doc/current/components/yaml.html) + * [Contributing](https://symfony.com/doc/current/contributing/index.html) + * [Report issues](https://github.com/symfony/symfony/issues) and + [send Pull Requests](https://github.com/symfony/symfony/pulls) + in the [main Symfony repository](https://github.com/symfony/symfony) diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Tag/TaggedValue.php b/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Tag/TaggedValue.php new file mode 100644 index 0000000..4ea3406 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Tag/TaggedValue.php @@ -0,0 +1,38 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml\Tag; + +/** + * @author Nicolas Grekas + * @author Guilhem N. + */ +final class TaggedValue +{ + private $tag; + private $value; + + public function __construct(string $tag, $value) + { + $this->tag = $tag; + $this->value = $value; + } + + public function getTag(): string + { + return $this->tag; + } + + public function getValue() + { + return $this->value; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Unescaper.php b/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Unescaper.php new file mode 100644 index 0000000..9c3a19e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Unescaper.php @@ -0,0 +1,138 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml; + +use Symfony\Component\Yaml\Exception\ParseException; + +/** + * Unescaper encapsulates unescaping rules for single and double-quoted + * YAML strings. + * + * @author Matthew Lewinski + * + * @internal + */ +class Unescaper +{ + /** + * Regex fragment that matches an escaped character in a double quoted string. + */ + const REGEX_ESCAPED_CHARACTER = '\\\\(x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}|.)'; + + /** + * Unescapes a single quoted string. + * + * @param string $value A single quoted string + * + * @return string The unescaped string + */ + public function unescapeSingleQuotedString(string $value): string + { + return str_replace('\'\'', '\'', $value); + } + + /** + * Unescapes a double quoted string. + * + * @param string $value A double quoted string + * + * @return string The unescaped string + */ + public function unescapeDoubleQuotedString(string $value): string + { + $callback = function ($match) { + return $this->unescapeCharacter($match[0]); + }; + + // evaluate the string + return preg_replace_callback('/'.self::REGEX_ESCAPED_CHARACTER.'/u', $callback, $value); + } + + /** + * Unescapes a character that was found in a double-quoted string. + * + * @param string $value An escaped character + * + * @return string The unescaped character + */ + private function unescapeCharacter(string $value): string + { + switch ($value[1]) { + case '0': + return "\x0"; + case 'a': + return "\x7"; + case 'b': + return "\x8"; + case 't': + return "\t"; + case "\t": + return "\t"; + case 'n': + return "\n"; + case 'v': + return "\xB"; + case 'f': + return "\xC"; + case 'r': + return "\r"; + case 'e': + return "\x1B"; + case ' ': + return ' '; + case '"': + return '"'; + case '/': + return '/'; + case '\\': + return '\\'; + case 'N': + // U+0085 NEXT LINE + return "\xC2\x85"; + case '_': + // U+00A0 NO-BREAK SPACE + return "\xC2\xA0"; + case 'L': + // U+2028 LINE SEPARATOR + return "\xE2\x80\xA8"; + case 'P': + // U+2029 PARAGRAPH SEPARATOR + return "\xE2\x80\xA9"; + case 'x': + return self::utf8chr(hexdec(substr($value, 2, 2))); + case 'u': + return self::utf8chr(hexdec(substr($value, 2, 4))); + case 'U': + return self::utf8chr(hexdec(substr($value, 2, 8))); + default: + throw new ParseException(sprintf('Found unknown escape character "%s".', $value)); + } + } + + /** + * Get the UTF-8 character for the given code point. + */ + private static function utf8chr(int $c): string + { + if (0x80 > $c %= 0x200000) { + return \chr($c); + } + if (0x800 > $c) { + return \chr(0xC0 | $c >> 6).\chr(0x80 | $c & 0x3F); + } + if (0x10000 > $c) { + return \chr(0xE0 | $c >> 12).\chr(0x80 | $c >> 6 & 0x3F).\chr(0x80 | $c & 0x3F); + } + + return \chr(0xF0 | $c >> 18).\chr(0x80 | $c >> 12 & 0x3F).\chr(0x80 | $c >> 6 & 0x3F).\chr(0x80 | $c & 0x3F); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Yaml.php b/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Yaml.php new file mode 100644 index 0000000..4efceb3 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/yaml/Yaml.php @@ -0,0 +1,102 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml; + +use Symfony\Component\Yaml\Exception\ParseException; + +/** + * Yaml offers convenience methods to load and dump YAML. + * + * @author Fabien Potencier + * + * @final + */ +class Yaml +{ + const DUMP_OBJECT = 1; + const PARSE_EXCEPTION_ON_INVALID_TYPE = 2; + const PARSE_OBJECT = 4; + const PARSE_OBJECT_FOR_MAP = 8; + const DUMP_EXCEPTION_ON_INVALID_TYPE = 16; + const PARSE_DATETIME = 32; + const DUMP_OBJECT_AS_MAP = 64; + const DUMP_MULTI_LINE_LITERAL_BLOCK = 128; + const PARSE_CONSTANT = 256; + const PARSE_CUSTOM_TAGS = 512; + const DUMP_EMPTY_ARRAY_AS_SEQUENCE = 1024; + const DUMP_NULL_AS_TILDE = 2048; + + /** + * Parses a YAML file into a PHP value. + * + * Usage: + * + * $array = Yaml::parseFile('config.yml'); + * print_r($array); + * + * @param string $filename The path to the YAML file to be parsed + * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior + * + * @return mixed The YAML converted to a PHP value + * + * @throws ParseException If the file could not be read or the YAML is not valid + */ + public static function parseFile(string $filename, int $flags = 0) + { + $yaml = new Parser(); + + return $yaml->parseFile($filename, $flags); + } + + /** + * Parses YAML into a PHP value. + * + * Usage: + * + * $array = Yaml::parse(file_get_contents('config.yml')); + * print_r($array); + * + * + * @param string $input A string containing YAML + * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior + * + * @return mixed The YAML converted to a PHP value + * + * @throws ParseException If the YAML is not valid + */ + public static function parse(string $input, int $flags = 0) + { + $yaml = new Parser(); + + return $yaml->parse($input, $flags); + } + + /** + * Dumps a PHP value to a YAML string. + * + * The dump method, when supplied with an array, will do its best + * to convert the array into friendly YAML. + * + * @param mixed $input The PHP value + * @param int $inline The level where you switch to inline YAML + * @param int $indent The amount of spaces to use for indentation of nested nodes + * @param int $flags A bit field of DUMP_* constants to customize the dumped YAML string + * + * @return string A YAML string representing the original PHP value + */ + public static function dump($input, int $inline = 2, int $indent = 4, int $flags = 0): string + { + $yaml = new Dumper($indent); + + return $yaml->dump($input, $inline, 0, $flags); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/symfony/yaml/composer.json b/soc/2020/daily_report/archive/app/vendor/symfony/yaml/composer.json new file mode 100644 index 0000000..598833b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/symfony/yaml/composer.json @@ -0,0 +1,43 @@ +{ + "name": "symfony/yaml", + "type": "library", + "description": "Symfony Yaml Component", + "keywords": [], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": "^7.2.5", + "symfony/polyfill-ctype": "~1.8" + }, + "require-dev": { + "symfony/console": "^4.4|^5.0" + }, + "conflict": { + "symfony/console": "<4.4" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "autoload": { + "psr-4": { "Symfony\\Component\\Yaml\\": "" }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/tightenco/collect/composer.json b/soc/2020/daily_report/archive/app/vendor/tightenco/collect/composer.json new file mode 100644 index 0000000..f9d28f7 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/tightenco/collect/composer.json @@ -0,0 +1,38 @@ +{ + "name": "tightenco/collect", + "description": "Collect - Illuminate Collections as a separate package.", + "keywords": ["laravel", "collection"], + "license": "MIT", + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylorotwell@gmail.com" + } + ], + "require": { + "php": "^7.1.3", + "symfony/var-dumper": "^3.4 || ^4.0 || ^5.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.0", + "nesbot/carbon": "^2.23.0" + }, + "autoload": { + "files": [ + "src/Collect/Support/helpers.php", + "src/Collect/Support/alias.php" + ], + "psr-4": { + "Tightenco\\Collect\\": "src/Collect" + } + }, + "scripts": { + "test": [ + "@composer install", + "phpunit" + ] + }, + "minimum-stability": "dev", + "prefer-stable": true +} diff --git a/soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Contracts/Support/Arrayable.php b/soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Contracts/Support/Arrayable.php new file mode 100644 index 0000000..a205804 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Contracts/Support/Arrayable.php @@ -0,0 +1,13 @@ +all(); + } elseif (! is_array($values)) { + continue; + } + + $results[] = $values; + } + + return array_merge([], ...$results); + } + + /** + * Cross join the given arrays, returning all possible permutations. + * + * @param iterable ...$arrays + * @return array + */ + public static function crossJoin(...$arrays) + { + $results = [[]]; + + foreach ($arrays as $index => $array) { + $append = []; + + foreach ($results as $product) { + foreach ($array as $item) { + $product[$index] = $item; + + $append[] = $product; + } + } + + $results = $append; + } + + return $results; + } + + /** + * Divide an array into two arrays. One with keys and the other with values. + * + * @param array $array + * @return array + */ + public static function divide($array) + { + return [array_keys($array), array_values($array)]; + } + + /** + * Flatten a multi-dimensional associative array with dots. + * + * @param iterable $array + * @param string $prepend + * @return array + */ + public static function dot($array, $prepend = '') + { + $results = []; + + foreach ($array as $key => $value) { + if (is_array($value) && ! empty($value)) { + $results = array_merge($results, static::dot($value, $prepend.$key.'.')); + } else { + $results[$prepend.$key] = $value; + } + } + + return $results; + } + + /** + * Get all of the given array except for a specified array of keys. + * + * @param array $array + * @param array|string $keys + * @return array + */ + public static function except($array, $keys) + { + static::forget($array, $keys); + + return $array; + } + + /** + * Determine if the given key exists in the provided array. + * + * @param \ArrayAccess|array $array + * @param string|int $key + * @return bool + */ + public static function exists($array, $key) + { + if ($array instanceof ArrayAccess) { + return $array->offsetExists($key); + } + + return array_key_exists($key, $array); + } + + /** + * Return the first element in an array passing a given truth test. + * + * @param iterable $array + * @param callable|null $callback + * @param mixed $default + * @return mixed + */ + public static function first($array, callable $callback = null, $default = null) + { + if (is_null($callback)) { + if (empty($array)) { + return value($default); + } + + foreach ($array as $item) { + return $item; + } + } + + foreach ($array as $key => $value) { + if ($callback($value, $key)) { + return $value; + } + } + + return value($default); + } + + /** + * Return the last element in an array passing a given truth test. + * + * @param array $array + * @param callable|null $callback + * @param mixed $default + * @return mixed + */ + public static function last($array, callable $callback = null, $default = null) + { + if (is_null($callback)) { + return empty($array) ? value($default) : end($array); + } + + return static::first(array_reverse($array, true), $callback, $default); + } + + /** + * Flatten a multi-dimensional array into a single level. + * + * @param iterable $array + * @param int $depth + * @return array + */ + public static function flatten($array, $depth = INF) + { + $result = []; + + foreach ($array as $item) { + $item = $item instanceof Collection ? $item->all() : $item; + + if (! is_array($item)) { + $result[] = $item; + } else { + $values = $depth === 1 + ? array_values($item) + : static::flatten($item, $depth - 1); + + foreach ($values as $value) { + $result[] = $value; + } + } + } + + return $result; + } + + /** + * Remove one or many array items from a given array using "dot" notation. + * + * @param array $array + * @param array|string $keys + * @return void + */ + public static function forget(&$array, $keys) + { + $original = &$array; + + $keys = (array) $keys; + + if (count($keys) === 0) { + return; + } + + foreach ($keys as $key) { + // if the exact key exists in the top-level, remove it + if (static::exists($array, $key)) { + unset($array[$key]); + + continue; + } + + $parts = explode('.', $key); + + // clean up before each pass + $array = &$original; + + while (count($parts) > 1) { + $part = array_shift($parts); + + if (isset($array[$part]) && is_array($array[$part])) { + $array = &$array[$part]; + } else { + continue 2; + } + } + + unset($array[array_shift($parts)]); + } + } + + /** + * Get an item from an array using "dot" notation. + * + * @param \ArrayAccess|array $array + * @param string|int|null $key + * @param mixed $default + * @return mixed + */ + public static function get($array, $key, $default = null) + { + if (! static::accessible($array)) { + return value($default); + } + + if (is_null($key)) { + return $array; + } + + if (static::exists($array, $key)) { + return $array[$key]; + } + + if (strpos($key, '.') === false) { + return $array[$key] ?? value($default); + } + + foreach (explode('.', $key) as $segment) { + if (static::accessible($array) && static::exists($array, $segment)) { + $array = $array[$segment]; + } else { + return value($default); + } + } + + return $array; + } + + /** + * Check if an item or items exist in an array using "dot" notation. + * + * @param \ArrayAccess|array $array + * @param string|array $keys + * @return bool + */ + public static function has($array, $keys) + { + $keys = (array) $keys; + + if (! $array || $keys === []) { + return false; + } + + foreach ($keys as $key) { + $subKeyArray = $array; + + if (static::exists($array, $key)) { + continue; + } + + foreach (explode('.', $key) as $segment) { + if (static::accessible($subKeyArray) && static::exists($subKeyArray, $segment)) { + $subKeyArray = $subKeyArray[$segment]; + } else { + return false; + } + } + } + + return true; + } + + /** + * Determine if any of the keys exist in an array using "dot" notation. + * + * @param \ArrayAccess|array $array + * @param string|array $keys + * @return bool + */ + public static function hasAny($array, $keys) + { + if (is_null($keys)) { + return false; + } + + $keys = (array) $keys; + + if (! $array) { + return false; + } + + if ($keys === []) { + return false; + } + + foreach ($keys as $key) { + if (static::has($array, $key)) { + return true; + } + } + + return false; + } + + /** + * Determines if an array is associative. + * + * An array is "associative" if it doesn't have sequential numerical keys beginning with zero. + * + * @param array $array + * @return bool + */ + public static function isAssoc(array $array) + { + $keys = array_keys($array); + + return array_keys($keys) !== $keys; + } + + /** + * Get a subset of the items from the given array. + * + * @param array $array + * @param array|string $keys + * @return array + */ + public static function only($array, $keys) + { + return array_intersect_key($array, array_flip((array) $keys)); + } + + /** + * Pluck an array of values from an array. + * + * @param iterable $array + * @param string|array $value + * @param string|array|null $key + * @return array + */ + public static function pluck($array, $value, $key = null) + { + $results = []; + + [$value, $key] = static::explodePluckParameters($value, $key); + + foreach ($array as $item) { + $itemValue = data_get($item, $value); + + // If the key is "null", we will just append the value to the array and keep + // looping. Otherwise we will key the array using the value of the key we + // received from the developer. Then we'll return the final array form. + if (is_null($key)) { + $results[] = $itemValue; + } else { + $itemKey = data_get($item, $key); + + if (is_object($itemKey) && method_exists($itemKey, '__toString')) { + $itemKey = (string) $itemKey; + } + + $results[$itemKey] = $itemValue; + } + } + + return $results; + } + + /** + * Explode the "value" and "key" arguments passed to "pluck". + * + * @param string|array $value + * @param string|array|null $key + * @return array + */ + protected static function explodePluckParameters($value, $key) + { + $value = is_string($value) ? explode('.', $value) : $value; + + $key = is_null($key) || is_array($key) ? $key : explode('.', $key); + + return [$value, $key]; + } + + /** + * Push an item onto the beginning of an array. + * + * @param array $array + * @param mixed $value + * @param mixed $key + * @return array + */ + public static function prepend($array, $value, $key = null) + { + if (is_null($key)) { + array_unshift($array, $value); + } else { + $array = [$key => $value] + $array; + } + + return $array; + } + + /** + * Get a value from the array, and remove it. + * + * @param array $array + * @param string $key + * @param mixed $default + * @return mixed + */ + public static function pull(&$array, $key, $default = null) + { + $value = static::get($array, $key, $default); + + static::forget($array, $key); + + return $value; + } + + /** + * Get one or a specified number of random values from an array. + * + * @param array $array + * @param int|null $number + * @return mixed + * + * @throws \InvalidArgumentException + */ + public static function random($array, $number = null) + { + $requested = is_null($number) ? 1 : $number; + + $count = count($array); + + if ($requested > $count) { + throw new InvalidArgumentException( + "You requested {$requested} items, but there are only {$count} items available." + ); + } + + if (is_null($number)) { + return $array[array_rand($array)]; + } + + if ((int) $number === 0) { + return []; + } + + $keys = array_rand($array, $number); + + $results = []; + + foreach ((array) $keys as $key) { + $results[] = $array[$key]; + } + + return $results; + } + + /** + * Set an array item to a given value using "dot" notation. + * + * If no key is given to the method, the entire array will be replaced. + * + * @param array $array + * @param string|null $key + * @param mixed $value + * @return array + */ + public static function set(&$array, $key, $value) + { + if (is_null($key)) { + return $array = $value; + } + + $keys = explode('.', $key); + + foreach ($keys as $i => $key) { + if (count($keys) === 1) { + break; + } + + unset($keys[$i]); + + // If the key doesn't exist at this depth, we will just create an empty array + // to hold the next value, allowing us to create the arrays to hold final + // values at the correct depth. Then we'll keep digging into the array. + if (! isset($array[$key]) || ! is_array($array[$key])) { + $array[$key] = []; + } + + $array = &$array[$key]; + } + + $array[array_shift($keys)] = $value; + + return $array; + } + + /** + * Shuffle the given array and return the result. + * + * @param array $array + * @param int|null $seed + * @return array + */ + public static function shuffle($array, $seed = null) + { + if (is_null($seed)) { + shuffle($array); + } else { + mt_srand($seed); + shuffle($array); + mt_srand(); + } + + return $array; + } + + /** + * Sort the array using the given callback or "dot" notation. + * + * @param array $array + * @param callable|string|null $callback + * @return array + */ + public static function sort($array, $callback = null) + { + return Collection::make($array)->sortBy($callback)->all(); + } + + /** + * Recursively sort an array by keys and values. + * + * @param array $array + * @return array + */ + public static function sortRecursive($array) + { + foreach ($array as &$value) { + if (is_array($value)) { + $value = static::sortRecursive($value); + } + } + + if (static::isAssoc($array)) { + ksort($array); + } else { + sort($array); + } + + return $array; + } + + /** + * Convert the array into a query string. + * + * @param array $array + * @return string + */ + public static function query($array) + { + return http_build_query($array, null, '&', PHP_QUERY_RFC3986); + } + + /** + * Filter the array using the given callback. + * + * @param array $array + * @param callable $callback + * @return array + */ + public static function where($array, callable $callback) + { + return array_filter($array, $callback, ARRAY_FILTER_USE_BOTH); + } + + /** + * If the given value is not an array and not null, wrap it in one. + * + * @param mixed $value + * @return array + */ + public static function wrap($value) + { + if (is_null($value)) { + return []; + } + + return is_array($value) ? $value : [$value]; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/Collection.php b/soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/Collection.php new file mode 100644 index 0000000..bee0838 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/Collection.php @@ -0,0 +1,1358 @@ +items = $this->getArrayableItems($items); + } + + /** + * Create a new collection by invoking the callback a given amount of times. + * + * @param int $number + * @param callable|null $callback + * @return static + */ + public static function times($number, callable $callback = null) + { + if ($number < 1) { + return new static; + } + + if (is_null($callback)) { + return new static(range(1, $number)); + } + + return (new static(range(1, $number)))->map($callback); + } + + /** + * Get all of the items in the collection. + * + * @return array + */ + public function all() + { + return $this->items; + } + + /** + * Get a lazy collection for the items in this collection. + * + * @return \Tightenco\Collect\Support\LazyCollection + */ + public function lazy() + { + return new LazyCollection($this->items); + } + + /** + * Get the average value of a given key. + * + * @param callable|string|null $callback + * @return mixed + */ + public function avg($callback = null) + { + $callback = $this->valueRetriever($callback); + + $items = $this->map(function ($value) use ($callback) { + return $callback($value); + })->filter(function ($value) { + return ! is_null($value); + }); + + if ($count = $items->count()) { + return $items->sum() / $count; + } + } + + /** + * Get the median of a given key. + * + * @param string|array|null $key + * @return mixed + */ + public function median($key = null) + { + $values = (isset($key) ? $this->pluck($key) : $this) + ->filter(function ($item) { + return ! is_null($item); + })->sort()->values(); + + $count = $values->count(); + + if ($count === 0) { + return; + } + + $middle = (int) ($count / 2); + + if ($count % 2) { + return $values->get($middle); + } + + return (new static([ + $values->get($middle - 1), $values->get($middle), + ]))->average(); + } + + /** + * Get the mode of a given key. + * + * @param string|array|null $key + * @return array|null + */ + public function mode($key = null) + { + if ($this->count() === 0) { + return; + } + + $collection = isset($key) ? $this->pluck($key) : $this; + + $counts = new self; + + $collection->each(function ($value) use ($counts) { + $counts[$value] = isset($counts[$value]) ? $counts[$value] + 1 : 1; + }); + + $sorted = $counts->sort(); + + $highestValue = $sorted->last(); + + return $sorted->filter(function ($value) use ($highestValue) { + return $value == $highestValue; + })->sort()->keys()->all(); + } + + /** + * Collapse the collection of items into a single array. + * + * @return static + */ + public function collapse() + { + return new static(Arr::collapse($this->items)); + } + + /** + * Determine if an item exists in the collection. + * + * @param mixed $key + * @param mixed $operator + * @param mixed $value + * @return bool + */ + public function contains($key, $operator = null, $value = null) + { + if (func_num_args() === 1) { + if ($this->useAsCallable($key)) { + $placeholder = new stdClass; + + return $this->first($key, $placeholder) !== $placeholder; + } + + return in_array($key, $this->items); + } + + return $this->contains($this->operatorForWhere(...func_get_args())); + } + + /** + * Cross join with the given lists, returning all possible permutations. + * + * @param mixed ...$lists + * @return static + */ + public function crossJoin(...$lists) + { + return new static(Arr::crossJoin( + $this->items, ...array_map([$this, 'getArrayableItems'], $lists) + )); + } + + /** + * Get the items in the collection that are not present in the given items. + * + * @param mixed $items + * @return static + */ + public function diff($items) + { + return new static(array_diff($this->items, $this->getArrayableItems($items))); + } + + /** + * Get the items in the collection that are not present in the given items, using the callback. + * + * @param mixed $items + * @param callable $callback + * @return static + */ + public function diffUsing($items, callable $callback) + { + return new static(array_udiff($this->items, $this->getArrayableItems($items), $callback)); + } + + /** + * Get the items in the collection whose keys and values are not present in the given items. + * + * @param mixed $items + * @return static + */ + public function diffAssoc($items) + { + return new static(array_diff_assoc($this->items, $this->getArrayableItems($items))); + } + + /** + * Get the items in the collection whose keys and values are not present in the given items, using the callback. + * + * @param mixed $items + * @param callable $callback + * @return static + */ + public function diffAssocUsing($items, callable $callback) + { + return new static(array_diff_uassoc($this->items, $this->getArrayableItems($items), $callback)); + } + + /** + * Get the items in the collection whose keys are not present in the given items. + * + * @param mixed $items + * @return static + */ + public function diffKeys($items) + { + return new static(array_diff_key($this->items, $this->getArrayableItems($items))); + } + + /** + * Get the items in the collection whose keys are not present in the given items, using the callback. + * + * @param mixed $items + * @param callable $callback + * @return static + */ + public function diffKeysUsing($items, callable $callback) + { + return new static(array_diff_ukey($this->items, $this->getArrayableItems($items), $callback)); + } + + /** + * Retrieve duplicate items from the collection. + * + * @param callable|null $callback + * @param bool $strict + * @return static + */ + public function duplicates($callback = null, $strict = false) + { + $items = $this->map($this->valueRetriever($callback)); + + $uniqueItems = $items->unique(null, $strict); + + $compare = $this->duplicateComparator($strict); + + $duplicates = new static; + + foreach ($items as $key => $value) { + if ($uniqueItems->isNotEmpty() && $compare($value, $uniqueItems->first())) { + $uniqueItems->shift(); + } else { + $duplicates[$key] = $value; + } + } + + return $duplicates; + } + + /** + * Retrieve duplicate items from the collection using strict comparison. + * + * @param callable|null $callback + * @return static + */ + public function duplicatesStrict($callback = null) + { + return $this->duplicates($callback, true); + } + + /** + * Get the comparison function to detect duplicates. + * + * @param bool $strict + * @return \Closure + */ + protected function duplicateComparator($strict) + { + if ($strict) { + return function ($a, $b) { + return $a === $b; + }; + } + + return function ($a, $b) { + return $a == $b; + }; + } + + /** + * Get all items except for those with the specified keys. + * + * @param \Tightenco\Collect\Support\Collection|mixed $keys + * @return static + */ + public function except($keys) + { + if ($keys instanceof Enumerable) { + $keys = $keys->all(); + } elseif (! is_array($keys)) { + $keys = func_get_args(); + } + + return new static(Arr::except($this->items, $keys)); + } + + /** + * Run a filter over each of the items. + * + * @param callable|null $callback + * @return static + */ + public function filter(callable $callback = null) + { + if ($callback) { + return new static(Arr::where($this->items, $callback)); + } + + return new static(array_filter($this->items)); + } + + /** + * Get the first item from the collection passing the given truth test. + * + * @param callable|null $callback + * @param mixed $default + * @return mixed + */ + public function first(callable $callback = null, $default = null) + { + return Arr::first($this->items, $callback, $default); + } + + /** + * Get a flattened array of the items in the collection. + * + * @param int $depth + * @return static + */ + public function flatten($depth = INF) + { + return new static(Arr::flatten($this->items, $depth)); + } + + /** + * Flip the items in the collection. + * + * @return static + */ + public function flip() + { + return new static(array_flip($this->items)); + } + + /** + * Remove an item from the collection by key. + * + * @param string|array $keys + * @return $this + */ + public function forget($keys) + { + foreach ((array) $keys as $key) { + $this->offsetUnset($key); + } + + return $this; + } + + /** + * Get an item from the collection by key. + * + * @param mixed $key + * @param mixed $default + * @return mixed + */ + public function get($key, $default = null) + { + if ($this->offsetExists($key)) { + return $this->items[$key]; + } + + return value($default); + } + + /** + * Group an associative array by a field or using a callback. + * + * @param array|callable|string $groupBy + * @param bool $preserveKeys + * @return static + */ + public function groupBy($groupBy, $preserveKeys = false) + { + if (! $this->useAsCallable($groupBy) && is_array($groupBy)) { + $nextGroups = $groupBy; + + $groupBy = array_shift($nextGroups); + } + + $groupBy = $this->valueRetriever($groupBy); + + $results = []; + + foreach ($this->items as $key => $value) { + $groupKeys = $groupBy($value, $key); + + if (! is_array($groupKeys)) { + $groupKeys = [$groupKeys]; + } + + foreach ($groupKeys as $groupKey) { + $groupKey = is_bool($groupKey) ? (int) $groupKey : $groupKey; + + if (! array_key_exists($groupKey, $results)) { + $results[$groupKey] = new static; + } + + $results[$groupKey]->offsetSet($preserveKeys ? $key : null, $value); + } + } + + $result = new static($results); + + if (! empty($nextGroups)) { + return $result->map->groupBy($nextGroups, $preserveKeys); + } + + return $result; + } + + /** + * Key an associative array by a field or using a callback. + * + * @param callable|string $keyBy + * @return static + */ + public function keyBy($keyBy) + { + $keyBy = $this->valueRetriever($keyBy); + + $results = []; + + foreach ($this->items as $key => $item) { + $resolvedKey = $keyBy($item, $key); + + if (is_object($resolvedKey)) { + $resolvedKey = (string) $resolvedKey; + } + + $results[$resolvedKey] = $item; + } + + return new static($results); + } + + /** + * Determine if an item exists in the collection by key. + * + * @param mixed $key + * @return bool + */ + public function has($key) + { + $keys = is_array($key) ? $key : func_get_args(); + + foreach ($keys as $value) { + if (! $this->offsetExists($value)) { + return false; + } + } + + return true; + } + + /** + * Concatenate values of a given key as a string. + * + * @param string $value + * @param string|null $glue + * @return string + */ + public function implode($value, $glue = null) + { + $first = $this->first(); + + if (is_array($first) || is_object($first)) { + return implode($glue, $this->pluck($value)->all()); + } + + return implode($value, $this->items); + } + + /** + * Intersect the collection with the given items. + * + * @param mixed $items + * @return static + */ + public function intersect($items) + { + return new static(array_intersect($this->items, $this->getArrayableItems($items))); + } + + /** + * Intersect the collection with the given items by key. + * + * @param mixed $items + * @return static + */ + public function intersectByKeys($items) + { + return new static(array_intersect_key( + $this->items, $this->getArrayableItems($items) + )); + } + + /** + * Determine if the collection is empty or not. + * + * @return bool + */ + public function isEmpty() + { + return empty($this->items); + } + + /** + * Join all items from the collection using a string. The final items can use a separate glue string. + * + * @param string $glue + * @param string $finalGlue + * @return string + */ + public function join($glue, $finalGlue = '') + { + if ($finalGlue === '') { + return $this->implode($glue); + } + + $count = $this->count(); + + if ($count === 0) { + return ''; + } + + if ($count === 1) { + return $this->last(); + } + + $collection = new static($this->items); + + $finalItem = $collection->pop(); + + return $collection->implode($glue).$finalGlue.$finalItem; + } + + /** + * Get the keys of the collection items. + * + * @return static + */ + public function keys() + { + return new static(array_keys($this->items)); + } + + /** + * Get the last item from the collection. + * + * @param callable|null $callback + * @param mixed $default + * @return mixed + */ + public function last(callable $callback = null, $default = null) + { + return Arr::last($this->items, $callback, $default); + } + + /** + * Get the values of a given key. + * + * @param string|array $value + * @param string|null $key + * @return static + */ + public function pluck($value, $key = null) + { + return new static(Arr::pluck($this->items, $value, $key)); + } + + /** + * Run a map over each of the items. + * + * @param callable $callback + * @return static + */ + public function map(callable $callback) + { + $keys = array_keys($this->items); + + $items = array_map($callback, $this->items, $keys); + + return new static(array_combine($keys, $items)); + } + + /** + * Run a dictionary map over the items. + * + * The callback should return an associative array with a single key/value pair. + * + * @param callable $callback + * @return static + */ + public function mapToDictionary(callable $callback) + { + $dictionary = []; + + foreach ($this->items as $key => $item) { + $pair = $callback($item, $key); + + $key = key($pair); + + $value = reset($pair); + + if (! isset($dictionary[$key])) { + $dictionary[$key] = []; + } + + $dictionary[$key][] = $value; + } + + return new static($dictionary); + } + + /** + * Run an associative map over each of the items. + * + * The callback should return an associative array with a single key/value pair. + * + * @param callable $callback + * @return static + */ + public function mapWithKeys(callable $callback) + { + $result = []; + + foreach ($this->items as $key => $value) { + $assoc = $callback($value, $key); + + foreach ($assoc as $mapKey => $mapValue) { + $result[$mapKey] = $mapValue; + } + } + + return new static($result); + } + + /** + * Merge the collection with the given items. + * + * @param mixed $items + * @return static + */ + public function merge($items) + { + return new static(array_merge($this->items, $this->getArrayableItems($items))); + } + + /** + * Recursively merge the collection with the given items. + * + * @param mixed $items + * @return static + */ + public function mergeRecursive($items) + { + return new static(array_merge_recursive($this->items, $this->getArrayableItems($items))); + } + + /** + * Create a collection by using this collection for keys and another for its values. + * + * @param mixed $values + * @return static + */ + public function combine($values) + { + return new static(array_combine($this->all(), $this->getArrayableItems($values))); + } + + /** + * Union the collection with the given items. + * + * @param mixed $items + * @return static + */ + public function union($items) + { + return new static($this->items + $this->getArrayableItems($items)); + } + + /** + * Create a new collection consisting of every n-th element. + * + * @param int $step + * @param int $offset + * @return static + */ + public function nth($step, $offset = 0) + { + $new = []; + + $position = 0; + + foreach ($this->items as $item) { + if ($position % $step === $offset) { + $new[] = $item; + } + + $position++; + } + + return new static($new); + } + + /** + * Get the items with the specified keys. + * + * @param mixed $keys + * @return static + */ + public function only($keys) + { + if (is_null($keys)) { + return new static($this->items); + } + + if ($keys instanceof Enumerable) { + $keys = $keys->all(); + } + + $keys = is_array($keys) ? $keys : func_get_args(); + + return new static(Arr::only($this->items, $keys)); + } + + /** + * Get and remove the last item from the collection. + * + * @return mixed + */ + public function pop() + { + return array_pop($this->items); + } + + /** + * Push an item onto the beginning of the collection. + * + * @param mixed $value + * @param mixed $key + * @return $this + */ + public function prepend($value, $key = null) + { + $this->items = Arr::prepend($this->items, $value, $key); + + return $this; + } + + /** + * Push one or more items onto the end of the collection. + * + * @param mixed $values [optional] + * @return $this + */ + public function push(...$values) + { + foreach ($values as $value) { + $this->items[] = $value; + } + + return $this; + } + + /** + * Push all of the given items onto the collection. + * + * @param iterable $source + * @return static + */ + public function concat($source) + { + $result = new static($this); + + foreach ($source as $item) { + $result->push($item); + } + + return $result; + } + + /** + * Get and remove an item from the collection. + * + * @param mixed $key + * @param mixed $default + * @return mixed + */ + public function pull($key, $default = null) + { + return Arr::pull($this->items, $key, $default); + } + + /** + * Put an item in the collection by key. + * + * @param mixed $key + * @param mixed $value + * @return $this + */ + public function put($key, $value) + { + $this->offsetSet($key, $value); + + return $this; + } + + /** + * Get one or a specified number of items randomly from the collection. + * + * @param int|null $number + * @return static|mixed + * + * @throws \InvalidArgumentException + */ + public function random($number = null) + { + if (is_null($number)) { + return Arr::random($this->items); + } + + return new static(Arr::random($this->items, $number)); + } + + /** + * Reduce the collection to a single value. + * + * @param callable $callback + * @param mixed $initial + * @return mixed + */ + public function reduce(callable $callback, $initial = null) + { + return array_reduce($this->items, $callback, $initial); + } + + /** + * Replace the collection items with the given items. + * + * @param mixed $items + * @return static + */ + public function replace($items) + { + return new static(array_replace($this->items, $this->getArrayableItems($items))); + } + + /** + * Recursively replace the collection items with the given items. + * + * @param mixed $items + * @return static + */ + public function replaceRecursive($items) + { + return new static(array_replace_recursive($this->items, $this->getArrayableItems($items))); + } + + /** + * Reverse items order. + * + * @return static + */ + public function reverse() + { + return new static(array_reverse($this->items, true)); + } + + /** + * Search the collection for a given value and return the corresponding key if successful. + * + * @param mixed $value + * @param bool $strict + * @return mixed + */ + public function search($value, $strict = false) + { + if (! $this->useAsCallable($value)) { + return array_search($value, $this->items, $strict); + } + + foreach ($this->items as $key => $item) { + if ($value($item, $key)) { + return $key; + } + } + + return false; + } + + /** + * Get and remove the first item from the collection. + * + * @return mixed + */ + public function shift() + { + return array_shift($this->items); + } + + /** + * Shuffle the items in the collection. + * + * @param int|null $seed + * @return static + */ + public function shuffle($seed = null) + { + return new static(Arr::shuffle($this->items, $seed)); + } + + /** + * Skip the first {$count} items. + * + * @param int $count + * @return static + */ + public function skip($count) + { + return $this->slice($count); + } + + /** + * Slice the underlying collection array. + * + * @param int $offset + * @param int|null $length + * @return static + */ + public function slice($offset, $length = null) + { + return new static(array_slice($this->items, $offset, $length, true)); + } + + /** + * Split a collection into a certain number of groups. + * + * @param int $numberOfGroups + * @return static + */ + public function split($numberOfGroups) + { + if ($this->isEmpty()) { + return new static; + } + + $groups = new static; + + $groupSize = floor($this->count() / $numberOfGroups); + + $remain = $this->count() % $numberOfGroups; + + $start = 0; + + for ($i = 0; $i < $numberOfGroups; $i++) { + $size = $groupSize; + + if ($i < $remain) { + $size++; + } + + if ($size) { + $groups->push(new static(array_slice($this->items, $start, $size))); + + $start += $size; + } + } + + return $groups; + } + + /** + * Chunk the collection into chunks of the given size. + * + * @param int $size + * @return static + */ + public function chunk($size) + { + if ($size <= 0) { + return new static; + } + + $chunks = []; + + foreach (array_chunk($this->items, $size, true) as $chunk) { + $chunks[] = new static($chunk); + } + + return new static($chunks); + } + + /** + * Sort through each item with a callback. + * + * @param callable|null $callback + * @return static + */ + public function sort($callback = null) + { + $items = $this->items; + + $callback && is_callable($callback) + ? uasort($items, $callback) + : asort($items, $callback); + + return new static($items); + } + + /** + * Sort items in descending order. + * + * @param int $options + * @return static + */ + public function sortDesc($options = SORT_REGULAR) + { + $items = $this->items; + + arsort($items, $options); + + return new static($items); + } + + /** + * Sort the collection using the given callback. + * + * @param callable|string $callback + * @param int $options + * @param bool $descending + * @return static + */ + public function sortBy($callback, $options = SORT_REGULAR, $descending = false) + { + $results = []; + + $callback = $this->valueRetriever($callback); + + // First we will loop through the items and get the comparator from a callback + // function which we were given. Then, we will sort the returned values and + // and grab the corresponding values for the sorted keys from this array. + foreach ($this->items as $key => $value) { + $results[$key] = $callback($value, $key); + } + + $descending ? arsort($results, $options) + : asort($results, $options); + + // Once we have sorted all of the keys in the array, we will loop through them + // and grab the corresponding model so we can set the underlying items list + // to the sorted version. Then we'll just return the collection instance. + foreach (array_keys($results) as $key) { + $results[$key] = $this->items[$key]; + } + + return new static($results); + } + + /** + * Sort the collection in descending order using the given callback. + * + * @param callable|string $callback + * @param int $options + * @return static + */ + public function sortByDesc($callback, $options = SORT_REGULAR) + { + return $this->sortBy($callback, $options, true); + } + + /** + * Sort the collection keys. + * + * @param int $options + * @param bool $descending + * @return static + */ + public function sortKeys($options = SORT_REGULAR, $descending = false) + { + $items = $this->items; + + $descending ? krsort($items, $options) : ksort($items, $options); + + return new static($items); + } + + /** + * Sort the collection keys in descending order. + * + * @param int $options + * @return static + */ + public function sortKeysDesc($options = SORT_REGULAR) + { + return $this->sortKeys($options, true); + } + + /** + * Splice a portion of the underlying collection array. + * + * @param int $offset + * @param int|null $length + * @param mixed $replacement + * @return static + */ + public function splice($offset, $length = null, $replacement = []) + { + if (func_num_args() === 1) { + return new static(array_splice($this->items, $offset)); + } + + return new static(array_splice($this->items, $offset, $length, $replacement)); + } + + /** + * Take the first or last {$limit} items. + * + * @param int $limit + * @return static + */ + public function take($limit) + { + if ($limit < 0) { + return $this->slice($limit, abs($limit)); + } + + return $this->slice(0, $limit); + } + + /** + * Take items in the collection until the given condition is met. + * + * @param mixed $key + * @return static + */ + public function takeUntil($value) + { + return new static($this->lazy()->takeUntil($value)->all()); + } + + /** + * Take items in the collection while the given condition is met. + * + * @param mixed $key + * @return static + */ + public function takeWhile($value) + { + return new static($this->lazy()->takeWhile($value)->all()); + } + + /** + * Transform each item in the collection using a callback. + * + * @param callable $callback + * @return $this + */ + public function transform(callable $callback) + { + $this->items = $this->map($callback)->all(); + + return $this; + } + + /** + * Reset the keys on the underlying array. + * + * @return static + */ + public function values() + { + return new static(array_values($this->items)); + } + + /** + * Zip the collection together with one or more arrays. + * + * e.g. new Collection([1, 2, 3])->zip([4, 5, 6]); + * => [[1, 4], [2, 5], [3, 6]] + * + * @param mixed ...$items + * @return static + */ + public function zip($items) + { + $arrayableItems = array_map(function ($items) { + return $this->getArrayableItems($items); + }, func_get_args()); + + $params = array_merge([function () { + return new static(func_get_args()); + }, $this->items], $arrayableItems); + + return new static(call_user_func_array('array_map', $params)); + } + + /** + * Pad collection to the specified length with a value. + * + * @param int $size + * @param mixed $value + * @return static + */ + public function pad($size, $value) + { + return new static(array_pad($this->items, $size, $value)); + } + + /** + * Get an iterator for the items. + * + * @return \ArrayIterator + */ + public function getIterator() + { + return new ArrayIterator($this->items); + } + + /** + * Count the number of items in the collection. + * + * @return int + */ + public function count() + { + return count($this->items); + } + + /** + * Add an item to the collection. + * + * @param mixed $item + * @return $this + */ + public function add($item) + { + $this->items[] = $item; + + return $this; + } + + /** + * Get a base Support collection instance from this collection. + * + * @return \Tightenco\Collect\Support\Collection + */ + public function toBase() + { + return new self($this); + } + + /** + * Determine if an item exists at an offset. + * + * @param mixed $key + * @return bool + */ + public function offsetExists($key) + { + return array_key_exists($key, $this->items); + } + + /** + * Get an item at a given offset. + * + * @param mixed $key + * @return mixed + */ + public function offsetGet($key) + { + return $this->items[$key]; + } + + /** + * Set the item at a given offset. + * + * @param mixed $key + * @param mixed $value + * @return void + */ + public function offsetSet($key, $value) + { + if (is_null($key)) { + $this->items[] = $value; + } else { + $this->items[$key] = $value; + } + } + + /** + * Unset the item at a given offset. + * + * @param string $key + * @return void + */ + public function offsetUnset($key) + { + unset($this->items[$key]); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/Enumerable.php b/soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/Enumerable.php new file mode 100644 index 0000000..507929e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/Enumerable.php @@ -0,0 +1,928 @@ +method = $method; + $this->collection = $collection; + } + + /** + * Proxy accessing an attribute onto the collection items. + * + * @param string $key + * @return mixed + */ + public function __get($key) + { + return $this->collection->{$this->method}(function ($value) use ($key) { + return is_array($value) ? $value[$key] : $value->{$key}; + }); + } + + /** + * Proxy a method call onto the collection items. + * + * @param string $method + * @param array $parameters + * @return mixed + */ + public function __call($method, $parameters) + { + return $this->collection->{$this->method}(function ($value) use ($method, $parameters) { + return $value->{$method}(...$parameters); + }); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/HtmlString.php b/soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/HtmlString.php new file mode 100644 index 0000000..adc3d1b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/HtmlString.php @@ -0,0 +1,56 @@ +html = $html; + } + + /** + * Get the HTML string. + * + * @return string + */ + public function toHtml() + { + return $this->html; + } + + /** + * Determine if the given HTML string is empty. + * + * @return bool + */ + public function isEmpty() + { + return $this->html === ''; + } + + /** + * Get the HTML string. + * + * @return string + */ + public function __toString() + { + return $this->toHtml(); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/LazyCollection.php b/soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/LazyCollection.php new file mode 100644 index 0000000..71df892 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/LazyCollection.php @@ -0,0 +1,1310 @@ +source = $source; + } elseif (is_null($source)) { + $this->source = static::empty(); + } else { + $this->source = $this->getArrayableItems($source); + } + } + + /** + * Create a new instance with no items. + * + * @return static + */ + public static function empty() + { + return new static([]); + } + + /** + * Create a new instance by invoking the callback a given amount of times. + * + * @param int $number + * @param callable|null $callback + * @return static + */ + public static function times($number, callable $callback = null) + { + if ($number < 1) { + return new static; + } + + $instance = new static(function () use ($number) { + for ($current = 1; $current <= $number; $current++) { + yield $current; + } + }); + + return is_null($callback) ? $instance : $instance->map($callback); + } + + /** + * Create an enumerable with the given range. + * + * @param int $from + * @param int $to + * @return static + */ + public static function range($from, $to) + { + return new static(function () use ($from, $to) { + for (; $from <= $to; $from++) { + yield $from; + } + }); + } + + /** + * Get all items in the enumerable. + * + * @return array + */ + public function all() + { + if (is_array($this->source)) { + return $this->source; + } + + return iterator_to_array($this->getIterator()); + } + + /** + * Eager load all items into a new lazy collection backed by an array. + * + * @return static + */ + public function eager() + { + return new static($this->all()); + } + + /** + * Cache values as they're enumerated. + * + * @return static + */ + public function remember() + { + $iterator = $this->getIterator(); + + $iteratorIndex = 0; + + $cache = []; + + return new static(function () use ($iterator, &$iteratorIndex, &$cache) { + for ($index = 0; true; $index++) { + if (array_key_exists($index, $cache)) { + yield $cache[$index][0] => $cache[$index][1]; + + continue; + } + + if ($iteratorIndex < $index) { + $iterator->next(); + + $iteratorIndex++; + } + + if (! $iterator->valid()) { + break; + } + + $cache[$index] = [$iterator->key(), $iterator->current()]; + + yield $cache[$index][0] => $cache[$index][1]; + } + }); + } + + /** + * Get the average value of a given key. + * + * @param callable|string|null $callback + * @return mixed + */ + public function avg($callback = null) + { + return $this->collect()->avg($callback); + } + + /** + * Get the median of a given key. + * + * @param string|array|null $key + * @return mixed + */ + public function median($key = null) + { + return $this->collect()->median($key); + } + + /** + * Get the mode of a given key. + * + * @param string|array|null $key + * @return array|null + */ + public function mode($key = null) + { + return $this->collect()->mode($key); + } + + /** + * Collapse the collection of items into a single array. + * + * @return static + */ + public function collapse() + { + return new static(function () { + foreach ($this as $values) { + if (is_array($values) || $values instanceof Enumerable) { + foreach ($values as $value) { + yield $value; + } + } + } + }); + } + + /** + * Determine if an item exists in the enumerable. + * + * @param mixed $key + * @param mixed $operator + * @param mixed $value + * @return bool + */ + public function contains($key, $operator = null, $value = null) + { + if (func_num_args() === 1 && $this->useAsCallable($key)) { + $placeholder = new stdClass; + + return $this->first($key, $placeholder) !== $placeholder; + } + + if (func_num_args() === 1) { + $needle = $key; + + foreach ($this as $value) { + if ($value == $needle) { + return true; + } + } + + return false; + } + + return $this->contains($this->operatorForWhere(...func_get_args())); + } + + /** + * Cross join the given iterables, returning all possible permutations. + * + * @param array ...$arrays + * @return static + */ + public function crossJoin(...$arrays) + { + return $this->passthru('crossJoin', func_get_args()); + } + + /** + * Get the items that are not present in the given items. + * + * @param mixed $items + * @return static + */ + public function diff($items) + { + return $this->passthru('diff', func_get_args()); + } + + /** + * Get the items that are not present in the given items, using the callback. + * + * @param mixed $items + * @param callable $callback + * @return static + */ + public function diffUsing($items, callable $callback) + { + return $this->passthru('diffUsing', func_get_args()); + } + + /** + * Get the items whose keys and values are not present in the given items. + * + * @param mixed $items + * @return static + */ + public function diffAssoc($items) + { + return $this->passthru('diffAssoc', func_get_args()); + } + + /** + * Get the items whose keys and values are not present in the given items, using the callback. + * + * @param mixed $items + * @param callable $callback + * @return static + */ + public function diffAssocUsing($items, callable $callback) + { + return $this->passthru('diffAssocUsing', func_get_args()); + } + + /** + * Get the items whose keys are not present in the given items. + * + * @param mixed $items + * @return static + */ + public function diffKeys($items) + { + return $this->passthru('diffKeys', func_get_args()); + } + + /** + * Get the items whose keys are not present in the given items, using the callback. + * + * @param mixed $items + * @param callable $callback + * @return static + */ + public function diffKeysUsing($items, callable $callback) + { + return $this->passthru('diffKeysUsing', func_get_args()); + } + + /** + * Retrieve duplicate items. + * + * @param callable|null $callback + * @param bool $strict + * @return static + */ + public function duplicates($callback = null, $strict = false) + { + return $this->passthru('duplicates', func_get_args()); + } + + /** + * Retrieve duplicate items using strict comparison. + * + * @param callable|null $callback + * @return static + */ + public function duplicatesStrict($callback = null) + { + return $this->passthru('duplicatesStrict', func_get_args()); + } + + /** + * Get all items except for those with the specified keys. + * + * @param mixed $keys + * @return static + */ + public function except($keys) + { + return $this->passthru('except', func_get_args()); + } + + /** + * Run a filter over each of the items. + * + * @param callable|null $callback + * @return static + */ + public function filter(callable $callback = null) + { + if (is_null($callback)) { + $callback = function ($value) { + return (bool) $value; + }; + } + + return new static(function () use ($callback) { + foreach ($this as $key => $value) { + if ($callback($value, $key)) { + yield $key => $value; + } + } + }); + } + + /** + * Get the first item from the enumerable passing the given truth test. + * + * @param callable|null $callback + * @param mixed $default + * @return mixed + */ + public function first(callable $callback = null, $default = null) + { + $iterator = $this->getIterator(); + + if (is_null($callback)) { + if (! $iterator->valid()) { + return value($default); + } + + return $iterator->current(); + } + + foreach ($iterator as $key => $value) { + if ($callback($value, $key)) { + return $value; + } + } + + return value($default); + } + + /** + * Get a flattened list of the items in the collection. + * + * @param int $depth + * @return static + */ + public function flatten($depth = INF) + { + $instance = new static(function () use ($depth) { + foreach ($this as $item) { + if (! is_array($item) && ! $item instanceof Enumerable) { + yield $item; + } elseif ($depth === 1) { + yield from $item; + } else { + yield from (new static($item))->flatten($depth - 1); + } + } + }); + + return $instance->values(); + } + + /** + * Flip the items in the collection. + * + * @return static + */ + public function flip() + { + return new static(function () { + foreach ($this as $key => $value) { + yield $value => $key; + } + }); + } + + /** + * Get an item by key. + * + * @param mixed $key + * @param mixed $default + * @return mixed + */ + public function get($key, $default = null) + { + if (is_null($key)) { + return; + } + + foreach ($this as $outerKey => $outerValue) { + if ($outerKey == $key) { + return $outerValue; + } + } + + return value($default); + } + + /** + * Group an associative array by a field or using a callback. + * + * @param array|callable|string $groupBy + * @param bool $preserveKeys + * @return static + */ + public function groupBy($groupBy, $preserveKeys = false) + { + return $this->passthru('groupBy', func_get_args()); + } + + /** + * Key an associative array by a field or using a callback. + * + * @param callable|string $keyBy + * @return static + */ + public function keyBy($keyBy) + { + return new static(function () use ($keyBy) { + $keyBy = $this->valueRetriever($keyBy); + + foreach ($this as $key => $item) { + $resolvedKey = $keyBy($item, $key); + + if (is_object($resolvedKey)) { + $resolvedKey = (string) $resolvedKey; + } + + yield $resolvedKey => $item; + } + }); + } + + /** + * Determine if an item exists in the collection by key. + * + * @param mixed $key + * @return bool + */ + public function has($key) + { + $keys = array_flip(is_array($key) ? $key : func_get_args()); + $count = count($keys); + + foreach ($this as $key => $value) { + if (array_key_exists($key, $keys) && --$count == 0) { + return true; + } + } + + return false; + } + + /** + * Concatenate values of a given key as a string. + * + * @param string $value + * @param string|null $glue + * @return string + */ + public function implode($value, $glue = null) + { + return $this->collect()->implode(...func_get_args()); + } + + /** + * Intersect the collection with the given items. + * + * @param mixed $items + * @return static + */ + public function intersect($items) + { + return $this->passthru('intersect', func_get_args()); + } + + /** + * Intersect the collection with the given items by key. + * + * @param mixed $items + * @return static + */ + public function intersectByKeys($items) + { + return $this->passthru('intersectByKeys', func_get_args()); + } + + /** + * Determine if the items is empty or not. + * + * @return bool + */ + public function isEmpty() + { + return ! $this->getIterator()->valid(); + } + + /** + * Join all items from the collection using a string. The final items can use a separate glue string. + * + * @param string $glue + * @param string $finalGlue + * @return string + */ + public function join($glue, $finalGlue = '') + { + return $this->collect()->join(...func_get_args()); + } + + /** + * Get the keys of the collection items. + * + * @return static + */ + public function keys() + { + return new static(function () { + foreach ($this as $key => $value) { + yield $key; + } + }); + } + + /** + * Get the last item from the collection. + * + * @param callable|null $callback + * @param mixed $default + * @return mixed + */ + public function last(callable $callback = null, $default = null) + { + $needle = $placeholder = new stdClass; + + foreach ($this as $key => $value) { + if (is_null($callback) || $callback($value, $key)) { + $needle = $value; + } + } + + return $needle === $placeholder ? value($default) : $needle; + } + + /** + * Get the values of a given key. + * + * @param string|array $value + * @param string|null $key + * @return static + */ + public function pluck($value, $key = null) + { + return new static(function () use ($value, $key) { + [$value, $key] = $this->explodePluckParameters($value, $key); + + foreach ($this as $item) { + $itemValue = data_get($item, $value); + + if (is_null($key)) { + yield $itemValue; + } else { + $itemKey = data_get($item, $key); + + if (is_object($itemKey) && method_exists($itemKey, '__toString')) { + $itemKey = (string) $itemKey; + } + + yield $itemKey => $itemValue; + } + } + }); + } + + /** + * Run a map over each of the items. + * + * @param callable $callback + * @return static + */ + public function map(callable $callback) + { + return new static(function () use ($callback) { + foreach ($this as $key => $value) { + yield $key => $callback($value, $key); + } + }); + } + + /** + * Run a dictionary map over the items. + * + * The callback should return an associative array with a single key/value pair. + * + * @param callable $callback + * @return static + */ + public function mapToDictionary(callable $callback) + { + return $this->passthru('mapToDictionary', func_get_args()); + } + + /** + * Run an associative map over each of the items. + * + * The callback should return an associative array with a single key/value pair. + * + * @param callable $callback + * @return static + */ + public function mapWithKeys(callable $callback) + { + return new static(function () use ($callback) { + foreach ($this as $key => $value) { + yield from $callback($value, $key); + } + }); + } + + /** + * Merge the collection with the given items. + * + * @param mixed $items + * @return static + */ + public function merge($items) + { + return $this->passthru('merge', func_get_args()); + } + + /** + * Recursively merge the collection with the given items. + * + * @param mixed $items + * @return static + */ + public function mergeRecursive($items) + { + return $this->passthru('mergeRecursive', func_get_args()); + } + + /** + * Create a collection by using this collection for keys and another for its values. + * + * @param mixed $values + * @return static + */ + public function combine($values) + { + return new static(function () use ($values) { + $values = $this->makeIterator($values); + + $errorMessage = 'Both parameters should have an equal number of elements'; + + foreach ($this as $key) { + if (! $values->valid()) { + trigger_error($errorMessage, E_USER_WARNING); + + break; + } + + yield $key => $values->current(); + + $values->next(); + } + + if ($values->valid()) { + trigger_error($errorMessage, E_USER_WARNING); + } + }); + } + + /** + * Union the collection with the given items. + * + * @param mixed $items + * @return static + */ + public function union($items) + { + return $this->passthru('union', func_get_args()); + } + + /** + * Create a new collection consisting of every n-th element. + * + * @param int $step + * @param int $offset + * @return static + */ + public function nth($step, $offset = 0) + { + return new static(function () use ($step, $offset) { + $position = 0; + + foreach ($this as $item) { + if ($position % $step === $offset) { + yield $item; + } + + $position++; + } + }); + } + + /** + * Get the items with the specified keys. + * + * @param mixed $keys + * @return static + */ + public function only($keys) + { + if ($keys instanceof Enumerable) { + $keys = $keys->all(); + } elseif (! is_null($keys)) { + $keys = is_array($keys) ? $keys : func_get_args(); + } + + return new static(function () use ($keys) { + if (is_null($keys)) { + yield from $this; + } else { + $keys = array_flip($keys); + + foreach ($this as $key => $value) { + if (array_key_exists($key, $keys)) { + yield $key => $value; + + unset($keys[$key]); + + if (empty($keys)) { + break; + } + } + } + } + }); + } + + /** + * Push all of the given items onto the collection. + * + * @param iterable $source + * @return static + */ + public function concat($source) + { + return (new static(function () use ($source) { + yield from $this; + yield from $source; + }))->values(); + } + + /** + * Get one or a specified number of items randomly from the collection. + * + * @param int|null $number + * @return static|mixed + * + * @throws \InvalidArgumentException + */ + public function random($number = null) + { + $result = $this->collect()->random(...func_get_args()); + + return is_null($number) ? $result : new static($result); + } + + /** + * Reduce the collection to a single value. + * + * @param callable $callback + * @param mixed $initial + * @return mixed + */ + public function reduce(callable $callback, $initial = null) + { + $result = $initial; + + foreach ($this as $value) { + $result = $callback($result, $value); + } + + return $result; + } + + /** + * Replace the collection items with the given items. + * + * @param mixed $items + * @return static + */ + public function replace($items) + { + return new static(function () use ($items) { + $items = $this->getArrayableItems($items); + + foreach ($this as $key => $value) { + if (array_key_exists($key, $items)) { + yield $key => $items[$key]; + + unset($items[$key]); + } else { + yield $key => $value; + } + } + + foreach ($items as $key => $value) { + yield $key => $value; + } + }); + } + + /** + * Recursively replace the collection items with the given items. + * + * @param mixed $items + * @return static + */ + public function replaceRecursive($items) + { + return $this->passthru('replaceRecursive', func_get_args()); + } + + /** + * Reverse items order. + * + * @return static + */ + public function reverse() + { + return $this->passthru('reverse', func_get_args()); + } + + /** + * Search the collection for a given value and return the corresponding key if successful. + * + * @param mixed $value + * @param bool $strict + * @return mixed + */ + public function search($value, $strict = false) + { + $predicate = $this->useAsCallable($value) + ? $value + : function ($item) use ($value, $strict) { + return $strict ? $item === $value : $item == $value; + }; + + foreach ($this as $key => $item) { + if ($predicate($item, $key)) { + return $key; + } + } + + return false; + } + + /** + * Shuffle the items in the collection. + * + * @param int|null $seed + * @return static + */ + public function shuffle($seed = null) + { + return $this->passthru('shuffle', func_get_args()); + } + + /** + * Skip the first {$count} items. + * + * @param int $count + * @return static + */ + public function skip($count) + { + return new static(function () use ($count) { + $iterator = $this->getIterator(); + + while ($iterator->valid() && $count--) { + $iterator->next(); + } + + while ($iterator->valid()) { + yield $iterator->key() => $iterator->current(); + + $iterator->next(); + } + }); + } + + /** + * Get a slice of items from the enumerable. + * + * @param int $offset + * @param int|null $length + * @return static + */ + public function slice($offset, $length = null) + { + if ($offset < 0 || $length < 0) { + return $this->passthru('slice', func_get_args()); + } + + $instance = $this->skip($offset); + + return is_null($length) ? $instance : $instance->take($length); + } + + /** + * Split a collection into a certain number of groups. + * + * @param int $numberOfGroups + * @return static + */ + public function split($numberOfGroups) + { + return $this->passthru('split', func_get_args()); + } + + /** + * Chunk the collection into chunks of the given size. + * + * @param int $size + * @return static + */ + public function chunk($size) + { + if ($size <= 0) { + return static::empty(); + } + + return new static(function () use ($size) { + $iterator = $this->getIterator(); + + while ($iterator->valid()) { + $chunk = []; + + while (true) { + $chunk[$iterator->key()] = $iterator->current(); + + if (count($chunk) < $size) { + $iterator->next(); + + if (! $iterator->valid()) { + break; + } + } else { + break; + } + } + + yield new static($chunk); + + $iterator->next(); + } + }); + } + + /** + * Sort through each item with a callback. + * + * @param callable|null|int $callback + * @return static + */ + public function sort($callback = null) + { + return $this->passthru('sort', func_get_args()); + } + + /** + * Sort items in descending order. + * + * @param int $options + * @return static + */ + public function sortDesc($options = SORT_REGULAR) + { + return $this->passthru('sortDesc', func_get_args()); + } + + /** + * Sort the collection using the given callback. + * + * @param callable|string $callback + * @param int $options + * @param bool $descending + * @return static + */ + public function sortBy($callback, $options = SORT_REGULAR, $descending = false) + { + return $this->passthru('sortBy', func_get_args()); + } + + /** + * Sort the collection in descending order using the given callback. + * + * @param callable|string $callback + * @param int $options + * @return static + */ + public function sortByDesc($callback, $options = SORT_REGULAR) + { + return $this->passthru('sortByDesc', func_get_args()); + } + + /** + * Sort the collection keys. + * + * @param int $options + * @param bool $descending + * @return static + */ + public function sortKeys($options = SORT_REGULAR, $descending = false) + { + return $this->passthru('sortKeys', func_get_args()); + } + + /** + * Sort the collection keys in descending order. + * + * @param int $options + * @return static + */ + public function sortKeysDesc($options = SORT_REGULAR) + { + return $this->passthru('sortKeysDesc', func_get_args()); + } + + /** + * Take the first or last {$limit} items. + * + * @param int $limit + * @return static + */ + public function take($limit) + { + if ($limit < 0) { + return $this->passthru('take', func_get_args()); + } + + return new static(function () use ($limit) { + $iterator = $this->getIterator(); + + while ($limit--) { + if (! $iterator->valid()) { + break; + } + + yield $iterator->key() => $iterator->current(); + + if ($limit) { + $iterator->next(); + } + } + }); + } + + /** + * Take items in the collection until the given condition is met. + * + * @param mixed $key + * @return static + */ + public function takeUntil($value) + { + $callback = $this->useAsCallable($value) ? $value : $this->equality($value); + + return new static(function () use ($callback) { + foreach ($this as $key => $item) { + if ($callback($item, $key)) { + break; + } + + yield $key => $item; + } + }); + } + + /** + * Take items in the collection while the given condition is met. + * + * @param mixed $key + * @return static + */ + public function takeWhile($value) + { + $callback = $this->useAsCallable($value) ? $value : $this->equality($value); + + return $this->takeUntil(function ($item, $key) use ($callback) { + return ! $callback($item, $key); + }); + } + + /** + * Pass each item in the collection to the given callback, lazily. + * + * @param callable $callback + * @return static + */ + public function tapEach(callable $callback) + { + return new static(function () use ($callback) { + foreach ($this as $key => $value) { + $callback($value, $key); + + yield $key => $value; + } + }); + } + + /** + * Reset the keys on the underlying array. + * + * @return static + */ + public function values() + { + return new static(function () { + foreach ($this as $item) { + yield $item; + } + }); + } + + /** + * Zip the collection together with one or more arrays. + * + * e.g. new LazyCollection([1, 2, 3])->zip([4, 5, 6]); + * => [[1, 4], [2, 5], [3, 6]] + * + * @param mixed ...$items + * @return static + */ + public function zip($items) + { + $iterables = func_get_args(); + + return new static(function () use ($iterables) { + $iterators = Collection::make($iterables)->map(function ($iterable) { + return $this->makeIterator($iterable); + })->prepend($this->getIterator()); + + while ($iterators->contains->valid()) { + yield new static($iterators->map->current()); + + $iterators->each->next(); + } + }); + } + + /** + * Pad collection to the specified length with a value. + * + * @param int $size + * @param mixed $value + * @return static + */ + public function pad($size, $value) + { + if ($size < 0) { + return $this->passthru('pad', func_get_args()); + } + + return new static(function () use ($size, $value) { + $yielded = 0; + + foreach ($this as $index => $item) { + yield $index => $item; + + $yielded++; + } + + while ($yielded++ < $size) { + yield $value; + } + }); + } + + /** + * Get the values iterator. + * + * @return \Traversable + */ + public function getIterator() + { + return $this->makeIterator($this->source); + } + + /** + * Count the number of items in the collection. + * + * @return int + */ + public function count() + { + if (is_array($this->source)) { + return count($this->source); + } + + return iterator_count($this->getIterator()); + } + + /** + * Make an iterator from the given source. + * + * @param mixed $source + * @return \Traversable + */ + protected function makeIterator($source) + { + if ($source instanceof IteratorAggregate) { + return $source->getIterator(); + } + + if (is_array($source)) { + return new ArrayIterator($source); + } + + return $source(); + } + + /** + * Explode the "value" and "key" arguments passed to "pluck". + * + * @param string|array $value + * @param string|array|null $key + * @return array + */ + protected function explodePluckParameters($value, $key) + { + $value = is_string($value) ? explode('.', $value) : $value; + + $key = is_null($key) || is_array($key) ? $key : explode('.', $key); + + return [$value, $key]; + } + + /** + * Pass this lazy collection through a method on the collection class. + * + * @param string $method + * @param array $params + * @return static + */ + protected function passthru($method, array $params) + { + return new static(function () use ($method, $params) { + yield from $this->collect()->$method(...$params); + }); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/Traits/EnumeratesValues.php b/soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/Traits/EnumeratesValues.php new file mode 100644 index 0000000..9a8423a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/Traits/EnumeratesValues.php @@ -0,0 +1,977 @@ +all() : $value; + } + + /** + * Alias for the "avg" method. + * + * @param callable|string|null $callback + * @return mixed + */ + public function average($callback = null) + { + return $this->avg($callback); + } + + /** + * Alias for the "contains" method. + * + * @param mixed $key + * @param mixed $operator + * @param mixed $value + * @return bool + */ + public function some($key, $operator = null, $value = null) + { + return $this->contains(...func_get_args()); + } + + /** + * Determine if an item exists, using strict comparison. + * + * @param mixed $key + * @param mixed $value + * @return bool + */ + public function containsStrict($key, $value = null) + { + if (func_num_args() === 2) { + return $this->contains(function ($item) use ($key, $value) { + return data_get($item, $key) === $value; + }); + } + + if ($this->useAsCallable($key)) { + return ! is_null($this->first($key)); + } + + foreach ($this as $item) { + if ($item === $key) { + return true; + } + } + + return false; + } + + /** + * Dump the items and end the script. + * + * @param mixed ...$args + * @return void + */ + public function dd(...$args) + { + call_user_func_array([$this, 'dump'], $args); + + die(1); + } + + /** + * Dump the items. + * + * @return $this + */ + public function dump() + { + (new static(func_get_args())) + ->push($this) + ->each(function ($item) { + VarDumper::dump($item); + }); + + return $this; + } + + /** + * Execute a callback over each item. + * + * @param callable $callback + * @return $this + */ + public function each(callable $callback) + { + foreach ($this as $key => $item) { + if ($callback($item, $key) === false) { + break; + } + } + + return $this; + } + + /** + * Execute a callback over each nested chunk of items. + * + * @param callable $callback + * @return static + */ + public function eachSpread(callable $callback) + { + return $this->each(function ($chunk, $key) use ($callback) { + $chunk[] = $key; + + return $callback(...$chunk); + }); + } + + /** + * Determine if all items pass the given truth test. + * + * @param string|callable $key + * @param mixed $operator + * @param mixed $value + * @return bool + */ + public function every($key, $operator = null, $value = null) + { + if (func_num_args() === 1) { + $callback = $this->valueRetriever($key); + + foreach ($this as $k => $v) { + if (! $callback($v, $k)) { + return false; + } + } + + return true; + } + + return $this->every($this->operatorForWhere(...func_get_args())); + } + + /** + * Get the first item by the given key value pair. + * + * @param string $key + * @param mixed $operator + * @param mixed $value + * @return mixed + */ + public function firstWhere($key, $operator = null, $value = null) + { + return $this->first($this->operatorForWhere(...func_get_args())); + } + + /** + * Determine if the collection is not empty. + * + * @return bool + */ + public function isNotEmpty() + { + return ! $this->isEmpty(); + } + + /** + * Run a map over each nested chunk of items. + * + * @param callable $callback + * @return static + */ + public function mapSpread(callable $callback) + { + return $this->map(function ($chunk, $key) use ($callback) { + $chunk[] = $key; + + return $callback(...$chunk); + }); + } + + /** + * Run a grouping map over the items. + * + * The callback should return an associative array with a single key/value pair. + * + * @param callable $callback + * @return static + */ + public function mapToGroups(callable $callback) + { + $groups = $this->mapToDictionary($callback); + + return $groups->map([$this, 'make']); + } + + /** + * Map a collection and flatten the result by a single level. + * + * @param callable $callback + * @return static + */ + public function flatMap(callable $callback) + { + return $this->map($callback)->collapse(); + } + + /** + * Map the values into a new class. + * + * @param string $class + * @return static + */ + public function mapInto($class) + { + return $this->map(function ($value, $key) use ($class) { + return new $class($value, $key); + }); + } + + /** + * Get the min value of a given key. + * + * @param callable|string|null $callback + * @return mixed + */ + public function min($callback = null) + { + $callback = $this->valueRetriever($callback); + + return $this->map(function ($value) use ($callback) { + return $callback($value); + })->filter(function ($value) { + return ! is_null($value); + })->reduce(function ($result, $value) { + return is_null($result) || $value < $result ? $value : $result; + }); + } + + /** + * Get the max value of a given key. + * + * @param callable|string|null $callback + * @return mixed + */ + public function max($callback = null) + { + $callback = $this->valueRetriever($callback); + + return $this->filter(function ($value) { + return ! is_null($value); + })->reduce(function ($result, $item) use ($callback) { + $value = $callback($item); + + return is_null($result) || $value > $result ? $value : $result; + }); + } + + /** + * "Paginate" the collection by slicing it into a smaller collection. + * + * @param int $page + * @param int $perPage + * @return static + */ + public function forPage($page, $perPage) + { + $offset = max(0, ($page - 1) * $perPage); + + return $this->slice($offset, $perPage); + } + + /** + * Partition the collection into two arrays using the given callback or key. + * + * @param callable|string $key + * @param mixed $operator + * @param mixed $value + * @return static + */ + public function partition($key, $operator = null, $value = null) + { + $passed = []; + $failed = []; + + $callback = func_num_args() === 1 + ? $this->valueRetriever($key) + : $this->operatorForWhere(...func_get_args()); + + foreach ($this as $key => $item) { + if ($callback($item, $key)) { + $passed[$key] = $item; + } else { + $failed[$key] = $item; + } + } + + return new static([new static($passed), new static($failed)]); + } + + /** + * Get the sum of the given values. + * + * @param callable|string|null $callback + * @return mixed + */ + public function sum($callback = null) + { + if (is_null($callback)) { + $callback = function ($value) { + return $value; + }; + } else { + $callback = $this->valueRetriever($callback); + } + + return $this->reduce(function ($result, $item) use ($callback) { + return $result + $callback($item); + }, 0); + } + + /** + * Apply the callback if the value is truthy. + * + * @param bool|mixed $value + * @param callable|null $callback + * @param callable|null $default + * @return static|mixed + */ + public function when($value, callable $callback = null, callable $default = null) + { + if (! $callback) { + return new HigherOrderWhenProxy($this, $value); + } + + if ($value) { + return $callback($this, $value); + } elseif ($default) { + return $default($this, $value); + } + + return $this; + } + + /** + * Apply the callback if the collection is empty. + * + * @param callable $callback + * @param callable|null $default + * @return static|mixed + */ + public function whenEmpty(callable $callback, callable $default = null) + { + return $this->when($this->isEmpty(), $callback, $default); + } + + /** + * Apply the callback if the collection is not empty. + * + * @param callable $callback + * @param callable|null $default + * @return static|mixed + */ + public function whenNotEmpty(callable $callback, callable $default = null) + { + return $this->when($this->isNotEmpty(), $callback, $default); + } + + /** + * Apply the callback if the value is falsy. + * + * @param bool $value + * @param callable $callback + * @param callable|null $default + * @return static|mixed + */ + public function unless($value, callable $callback, callable $default = null) + { + return $this->when(! $value, $callback, $default); + } + + /** + * Apply the callback unless the collection is empty. + * + * @param callable $callback + * @param callable|null $default + * @return static|mixed + */ + public function unlessEmpty(callable $callback, callable $default = null) + { + return $this->whenNotEmpty($callback, $default); + } + + /** + * Apply the callback unless the collection is not empty. + * + * @param callable $callback + * @param callable|null $default + * @return static|mixed + */ + public function unlessNotEmpty(callable $callback, callable $default = null) + { + return $this->whenEmpty($callback, $default); + } + + /** + * Filter items by the given key value pair. + * + * @param string $key + * @param mixed $operator + * @param mixed $value + * @return static + */ + public function where($key, $operator = null, $value = null) + { + return $this->filter($this->operatorForWhere(...func_get_args())); + } + + /** + * Filter items where the given key is not null. + * + * @param string|null $key + * @return static + */ + public function whereNull($key = null) + { + return $this->whereStrict($key, null); + } + + /** + * Filter items where the given key is null. + * + * @param string|null $key + * @return static + */ + public function whereNotNull($key = null) + { + return $this->where($key, '!==', null); + } + + /** + * Filter items by the given key value pair using strict comparison. + * + * @param string $key + * @param mixed $value + * @return static + */ + public function whereStrict($key, $value) + { + return $this->where($key, '===', $value); + } + + /** + * Filter items by the given key value pair. + * + * @param string $key + * @param mixed $values + * @param bool $strict + * @return static + */ + public function whereIn($key, $values, $strict = false) + { + $values = $this->getArrayableItems($values); + + return $this->filter(function ($item) use ($key, $values, $strict) { + return in_array(data_get($item, $key), $values, $strict); + }); + } + + /** + * Filter items by the given key value pair using strict comparison. + * + * @param string $key + * @param mixed $values + * @return static + */ + public function whereInStrict($key, $values) + { + return $this->whereIn($key, $values, true); + } + + /** + * Filter items such that the value of the given key is between the given values. + * + * @param string $key + * @param array $values + * @return static + */ + public function whereBetween($key, $values) + { + return $this->where($key, '>=', reset($values))->where($key, '<=', end($values)); + } + + /** + * Filter items such that the value of the given key is not between the given values. + * + * @param string $key + * @param array $values + * @return static + */ + public function whereNotBetween($key, $values) + { + return $this->filter(function ($item) use ($key, $values) { + return data_get($item, $key) < reset($values) || data_get($item, $key) > end($values); + }); + } + + /** + * Filter items by the given key value pair. + * + * @param string $key + * @param mixed $values + * @param bool $strict + * @return static + */ + public function whereNotIn($key, $values, $strict = false) + { + $values = $this->getArrayableItems($values); + + return $this->reject(function ($item) use ($key, $values, $strict) { + return in_array(data_get($item, $key), $values, $strict); + }); + } + + /** + * Filter items by the given key value pair using strict comparison. + * + * @param string $key + * @param mixed $values + * @return static + */ + public function whereNotInStrict($key, $values) + { + return $this->whereNotIn($key, $values, true); + } + + /** + * Filter the items, removing any items that don't match the given type. + * + * @param string $type + * @return static + */ + public function whereInstanceOf($type) + { + return $this->filter(function ($value) use ($type) { + return $value instanceof $type; + }); + } + + /** + * Pass the collection to the given callback and return the result. + * + * @param callable $callback + * @return mixed + */ + public function pipe(callable $callback) + { + return $callback($this); + } + + /** + * Pass the collection to the given callback and then return it. + * + * @param callable $callback + * @return $this + */ + public function tap(callable $callback) + { + $callback(clone $this); + + return $this; + } + + /** + * Create a collection of all elements that do not pass a given truth test. + * + * @param callable|mixed $callback + * @return static + */ + public function reject($callback = true) + { + $useAsCallable = $this->useAsCallable($callback); + + return $this->filter(function ($value, $key) use ($callback, $useAsCallable) { + return $useAsCallable + ? ! $callback($value, $key) + : $value != $callback; + }); + } + + /** + * Return only unique items from the collection array. + * + * @param string|callable|null $key + * @param bool $strict + * @return static + */ + public function unique($key = null, $strict = false) + { + $callback = $this->valueRetriever($key); + + $exists = []; + + return $this->reject(function ($item, $key) use ($callback, $strict, &$exists) { + if (in_array($id = $callback($item, $key), $exists, $strict)) { + return true; + } + + $exists[] = $id; + }); + } + + /** + * Return only unique items from the collection array using strict comparison. + * + * @param string|callable|null $key + * @return static + */ + public function uniqueStrict($key = null) + { + return $this->unique($key, true); + } + + /** + * Take items in the collection until the given condition is met. + * + * This is an alias to the "takeUntil" method. + * + * @param mixed $key + * @return static + * + * @deprecated Use the "takeUntil" method directly. + */ + public function until($value) + { + return $this->takeUntil($value); + } + + /** + * Collect the values into a collection. + * + * @return \Tightenco\Collect\Support\Collection + */ + public function collect() + { + return new Collection($this->all()); + } + + /** + * Get the collection of items as a plain array. + * + * @return array + */ + public function toArray() + { + return $this->map(function ($value) { + return $value instanceof Arrayable ? $value->toArray() : $value; + })->all(); + } + + /** + * Convert the object into something JSON serializable. + * + * @return array + */ + public function jsonSerialize() + { + return array_map(function ($value) { + if ($value instanceof JsonSerializable) { + return $value->jsonSerialize(); + } elseif ($value instanceof Jsonable) { + return json_decode($value->toJson(), true); + } elseif ($value instanceof Arrayable) { + return $value->toArray(); + } + + return $value; + }, $this->all()); + } + + /** + * Get the collection of items as JSON. + * + * @param int $options + * @return string + */ + public function toJson($options = 0) + { + return json_encode($this->jsonSerialize(), $options); + } + + /** + * Get a CachingIterator instance. + * + * @param int $flags + * @return \CachingIterator + */ + public function getCachingIterator($flags = CachingIterator::CALL_TOSTRING) + { + return new CachingIterator($this->getIterator(), $flags); + } + + /** + * Count the number of items in the collection using a given truth test. + * + * @param callable|null $callback + * @return static + */ + public function countBy($callback = null) + { + if (is_null($callback)) { + $callback = function ($value) { + return $value; + }; + } + + return new static($this->groupBy($callback)->map(function ($value) { + return $value->count(); + })); + } + + /** + * Convert the collection to its string representation. + * + * @return string + */ + public function __toString() + { + return $this->toJson(); + } + + /** + * Add a method to the list of proxied methods. + * + * @param string $method + * @return void + */ + public static function proxy($method) + { + static::$proxies[] = $method; + } + + /** + * Dynamically access collection proxies. + * + * @param string $key + * @return mixed + * + * @throws \Exception + */ + public function __get($key) + { + if (! in_array($key, static::$proxies)) { + throw new Exception("Property [{$key}] does not exist on this collection instance."); + } + + return new HigherOrderCollectionProxy($this, $key); + } + + /** + * Results array of items from Collection or Arrayable. + * + * @param mixed $items + * @return array + */ + protected function getArrayableItems($items) + { + if (is_array($items)) { + return $items; + } elseif ($items instanceof Enumerable) { + return $items->all(); + } elseif ($items instanceof Arrayable) { + return $items->toArray(); + } elseif ($items instanceof Jsonable) { + return json_decode($items->toJson(), true); + } elseif ($items instanceof JsonSerializable) { + return (array) $items->jsonSerialize(); + } elseif ($items instanceof Traversable) { + return iterator_to_array($items); + } + + return (array) $items; + } + + /** + * Get an operator checker callback. + * + * @param string $key + * @param string|null $operator + * @param mixed $value + * @return \Closure + */ + protected function operatorForWhere($key, $operator = null, $value = null) + { + if (func_num_args() === 1) { + $value = true; + + $operator = '='; + } + + if (func_num_args() === 2) { + $value = $operator; + + $operator = '='; + } + + return function ($item) use ($key, $operator, $value) { + $retrieved = data_get($item, $key); + + $strings = array_filter([$retrieved, $value], function ($value) { + return is_string($value) || (is_object($value) && method_exists($value, '__toString')); + }); + + if (count($strings) < 2 && count(array_filter([$retrieved, $value], 'is_object')) == 1) { + return in_array($operator, ['!=', '<>', '!==']); + } + + switch ($operator) { + default: + case '=': + case '==': return $retrieved == $value; + case '!=': + case '<>': return $retrieved != $value; + case '<': return $retrieved < $value; + case '>': return $retrieved > $value; + case '<=': return $retrieved <= $value; + case '>=': return $retrieved >= $value; + case '===': return $retrieved === $value; + case '!==': return $retrieved !== $value; + } + }; + } + + /** + * Determine if the given value is callable, but not a string. + * + * @param mixed $value + * @return bool + */ + protected function useAsCallable($value) + { + return ! is_string($value) && is_callable($value); + } + + /** + * Get a value retrieving callback. + * + * @param callable|string|null $value + * @return callable + */ + protected function valueRetriever($value) + { + if ($this->useAsCallable($value)) { + return $value; + } + + return function ($item) use ($value) { + return data_get($item, $value); + }; + } + + /** + * Make a function to check an item's equality. + * + * @param \Closure|mixed $value + * @return \Closure + */ + protected function equality($value) + { + return function ($item) use ($value) { + return $item === $value; + }; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/Traits/Macroable.php b/soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/Traits/Macroable.php new file mode 100644 index 0000000..fd12ba4 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/Traits/Macroable.php @@ -0,0 +1,116 @@ +getMethods( + ReflectionMethod::IS_PUBLIC | ReflectionMethod::IS_PROTECTED + ); + + foreach ($methods as $method) { + if ($replace || ! static::hasMacro($method->name)) { + $method->setAccessible(true); + static::macro($method->name, $method->invoke($mixin)); + } + } + } + + /** + * Checks if macro is registered. + * + * @param string $name + * @return bool + */ + public static function hasMacro($name) + { + return isset(static::$macros[$name]); + } + + /** + * Dynamically handle calls to the class. + * + * @param string $method + * @param array $parameters + * @return mixed + * + * @throws \BadMethodCallException + */ + public static function __callStatic($method, $parameters) + { + if (! static::hasMacro($method)) { + throw new BadMethodCallException(sprintf( + 'Method %s::%s does not exist.', static::class, $method + )); + } + + $macro = static::$macros[$method]; + + if ($macro instanceof Closure) { + return call_user_func_array(Closure::bind($macro, null, static::class), $parameters); + } + + return $macro(...$parameters); + } + + /** + * Dynamically handle calls to the class. + * + * @param string $method + * @param array $parameters + * @return mixed + * + * @throws \BadMethodCallException + */ + public function __call($method, $parameters) + { + if (! static::hasMacro($method)) { + throw new BadMethodCallException(sprintf( + 'Method %s::%s does not exist.', static::class, $method + )); + } + + $macro = static::$macros[$method]; + + if ($macro instanceof Closure) { + return call_user_func_array($macro->bindTo($this, static::class), $parameters); + } + + return $macro(...$parameters); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/alias.php b/soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/alias.php new file mode 100644 index 0000000..d31121c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/alias.php @@ -0,0 +1,21 @@ + Illuminate\Contracts\Support\Arrayable::class, + Tightenco\Collect\Contracts\Support\Jsonable::class => Illuminate\Contracts\Support\Jsonable::class, + Tightenco\Collect\Contracts\Support\Htmlable::class => Illuminate\Contracts\Support\Htmlable::class, + Tightenco\Collect\Support\Collection::class => Illuminate\Support\Collection::class, + Tightenco\Collect\Support\LazyCollection::class => Illuminate\Support\LazyCollection::class, + Tightenco\Collect\Support\Arr::class => Illuminate\Support\Arr::class, + Tightenco\Collect\Support\HigherOrderCollectionProxy::class => Illuminate\Support\HigherOrderCollectionProxy::class, + Tightenco\Collect\Support\HtmlString::class => Illuminate\Support\HtmlString::class, + Tightenco\Collect\Support\Enumerable::class => Illuminate\Support\Enumerable::class, + Tightenco\Collect\Support\Traits\Macroable::class => Illuminate\Support\Traits\Macroable::class, + Tightenco\Collect\Support\Traits\EnumeratesValues::class => Illuminate\Support\Traits\EnumeratesValues::class, +]; + +foreach ($aliases as $tighten => $illuminate) { + if (! class_exists($illuminate) && ! interface_exists($illuminate) && ! trait_exists($illuminate)) { + class_alias($tighten, $illuminate); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/helpers.php b/soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/helpers.php new file mode 100644 index 0000000..893d1cd --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/tightenco/collect/src/Collect/Support/helpers.php @@ -0,0 +1,118 @@ +all(); + } elseif (! is_array($target)) { + return value($default); + } + + $result = Arr::pluck($target, $key); + + return in_array('*', $key) ? Arr::collapse($result) : $result; + } + + if (Arr::accessible($target) && Arr::exists($target, $segment)) { + $target = $target[$segment]; + } elseif (is_object($target) && isset($target->{$segment})) { + $target = $target->{$segment}; + } else { + return value($default); + } + } + + return $target; + } + } + + if (! function_exists('with')) { + /** + * Return the given object. Useful for chaining. + * + * @param mixed $object + * @return mixed + */ + function with($object) + { + return $object; + } + } + + if (! function_exists('dd')) { + /** + * Dump the passed variables and end the script. + * + * @param mixed + * @return void + */ + function dd(...$args) + { + foreach ($args as $x) { + VarDumper::dump($x); + } + die(1); + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/.editorconfig b/soc/2020/daily_report/archive/app/vendor/twig/twig/.editorconfig new file mode 100644 index 0000000..270f1d1 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/.editorconfig @@ -0,0 +1,18 @@ +; top-most EditorConfig file +root = true + +; Unix-style newlines +[*] +end_of_line = LF + +[*.php] +indent_style = space +indent_size = 4 + +[*.test] +indent_style = space +indent_size = 4 + +[*.rst] +indent_style = space +indent_size = 4 diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/.php_cs.dist b/soc/2020/daily_report/archive/app/vendor/twig/twig/.php_cs.dist new file mode 100644 index 0000000..b81882f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/.php_cs.dist @@ -0,0 +1,20 @@ +setRules([ + '@Symfony' => true, + '@Symfony:risky' => true, + '@PHPUnit75Migration:risky' => true, + 'php_unit_dedicate_assert' => ['target' => '5.6'], + 'array_syntax' => ['syntax' => 'short'], + 'php_unit_fqcn_annotation' => true, + 'no_unreachable_default_argument_value' => false, + 'braces' => ['allow_single_line_closure' => true], + 'heredoc_to_nowdoc' => false, + 'ordered_imports' => true, + 'phpdoc_types_order' => ['null_adjustment' => 'always_last', 'sort_algorithm' => 'none'], + 'native_function_invocation' => ['include' => ['@compiler_optimized'], 'scope' => 'all'], + ]) + ->setRiskyAllowed(true) + ->setFinder(PhpCsFixer\Finder::create()->in(__DIR__)) +; diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/.travis.yml b/soc/2020/daily_report/archive/app/vendor/twig/twig/.travis.yml new file mode 100644 index 0000000..5441a49 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/.travis.yml @@ -0,0 +1,43 @@ +language: php + +cache: + directories: + - vendor + - extra/*/vendor + - $HOME/.composer/cache/files + +env: + global: + - SYMFONY_PHPUNIT_DISABLE_RESULT_CACHE=1 + +before_install: + - phpenv config-rm xdebug.ini || return 0 + +install: + - travis_retry composer install + - (cd extra/cssinliner-extra && travis_retry composer install) + - (cd extra/html-extra && travis_retry composer install) + - (cd extra/inky-extra && travis_retry composer install) + - (cd extra/intl-extra && travis_retry composer install) + - (cd extra/markdown-extra && travis_retry composer install) + - (cd extra/string-extra && travis_retry composer install) + +script: + - ./vendor/bin/simple-phpunit + - (cd extra/cssinliner-extra && ./vendor/bin/simple-phpunit) + - (cd extra/html-extra && ./vendor/bin/simple-phpunit) + - (cd extra/inky-extra && ./vendor/bin/simple-phpunit) + - (cd extra/intl-extra && ./vendor/bin/simple-phpunit) + - (cd extra/markdown-extra && ./vendor/bin/simple-phpunit) + - (cd extra/string-extra && ./vendor/bin/simple-phpunit) + +jobs: + fast_finish: true + include: + - php: 7.2 + - php: 7.3 + - php: 7.4 + # Drupal does not support 3.x yet + #- stage: integration tests + # php: 7.3 + # script: ./drupal_test.sh diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/CHANGELOG b/soc/2020/daily_report/archive/app/vendor/twig/twig/CHANGELOG new file mode 100644 index 0000000..e0bad5b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/CHANGELOG @@ -0,0 +1,1480 @@ +* 3.0.3 (2020-02-11) + + * Add a check to ensure that iconv() is defined + +* 3.0.2 (2020-02-11) + + * Avoid exceptions when an intl resource is not found + * Fix implementation of case-insensitivity for method names + +* 3.0.1 (2019-12-28) + + * fixed Symfony 5.0 support for the HTML extra extension + +* 3.0.0 (2019-11-15) + + * fixed number formatter in Intl extra extension when using a formatter prototype + +* 3.0.0-BETA1 (2019-11-11) + + * removed the "if" condition support on the "for" tag + * made the in, <, >, <=, >=, ==, and != operators more strict when comparing strings and integers/floats + * removed the "filter" tag + * added type hints everywhere + * changed Environment::resolveTemplate() to always return a TemplateWrapper instance + * removed Template::__toString() + * removed Parser::isReservedMacroName() + * removed SanboxedPrintNode + * removed Node::setTemplateName() + * made classes maked as "@final" final + * removed InitRuntimeInterface, ExistsLoaderInterface, and SourceContextLoaderInterface + * removed the "spaceless" tag + * removed Twig\Environment::getBaseTemplateClass() and Twig\Environment::setBaseTemplateClass() + * removed the "base_template_class" option on Twig\Environment + * bumped minimum PHP version to 7.2 + * removed PSR-0 classes + +* 2.12.5 (2020-XX-XX) + + * Add a check to ensure that iconv() is defined + +* 2.12.4 (2020-02-11) + + * Avoid exceptions when an intl resource is not found + * Fix implementation of case-insensitivity for method names + +* 2.12.3 (2019-12-28) + + * fixed Symfony 5.0 support for the HTML extra extension + * fixed number formatter in Intl extra extension when using a formatter prototype + +* 2.12.2 (2019-11-11) + + * added supported for exponential numbers + +* 2.12.1 (2019-10-17) + + * added the String extension in the "extra" repositories: "u" filter + +* 2.12.0 (2019-10-05) + + * added the spaceship operator ("<=>"), useful when using an arrow function in the "sort" filter + * added support for an "arrow" function on the "sort" filter + * added the CssInliner extension in the "extra" repositories: "inline_css" + filter + * added the Inky extension in the "extra" repositories: "inky_to_html" filter + * added Intl extension in the "extra" repositories: "country_name", + "currency_name", "currency_symbol", "language_name", "locale_name", + "timezone_name", "format_currency", "format_number", + "format_*_number", "format_datetime", "format_date", and "format_time" + filters, and the "country_timezones" function + * added the Markdown extension in the "extra" repositories: "markdown_to_html", + and "html_to_markdown" filters + * added the HtmlExtension extension in the "extra" repositories: "date_uri" + filter, and "html_classes" function + * optimized "block('foo') ?? 'bar'" + * fixed the empty test on Traversable instances + * fixed array_key_exists() on objects + * fixed cache when opcache is installed but disabled + * fixed using macros in arrow functions + * fixed split filter on edge case + +* 2.11.3 (2019-06-18) + + * display partial output (PHP buffer) when an error occurs in debug mode + * fixed the filter filter (allow the result to be used several times) + * fixed macro auto-import when a template contains only macros + +* 2.11.2 (2019-06-05) + + * fixed macro auto-import + +* 2.11.1 (2019-06-04) + + * added support for "Twig\Markup" instances in the "in" test (again) + * allowed string operators as variables names in assignments + * fixed support for macros defined in parent templates + +* 2.11.0 (2019-05-31) + + * added the possibility to register classes/interfaces as being safe for the escaper ("EscaperExtension::addSafeClass()") + * deprecated CoreExtension::setEscaper() and CoreExtension::getEscapers() in favor of the same methods on EscaperExtension + * macros are now auto-imported in the template they are defined (under the ``_self`` variable) + * added support for macros on "is defined" tests + * fixed macros "import" when using the same name in the parent and child templates + * fixed recursive macros + * macros imported "globally" in a template are now available in macros without re-importing them + * fixed the "filter" filter when the argument is \Traversable but does not implement \Iterator (\SimpleXmlElement for instance) + * fixed a PHP fatal error when calling a macro imported in a block in a nested block + * fixed a PHP fatal error when calling a macro imported in the template in another macro + * fixed wrong error message on "import" and "from" + +* 2.10.0 (2019-05-14) + + * deprecated "if" conditions on "for" tags + * added "filter", "map", and "reduce" filters (and support for arrow functions) + * fixed partial output leak when a PHP fatal error occurs + * optimized context access on PHP 7.4 + +* 2.9.0 (2019-04-28) + + * deprecated returning "false" to remove a Node from NodeVisitorInterface::leaveNode() + * allowed Twig\NodeVisitor\NodeVisitorInterface::leaveNode() to return "null" instead of "false" (same meaning) + * deprecated the "filter" tag (use the "apply" tag instead) + * added the "apply" tag as a replacement for the "filter" tag + * allowed Twig\Loader\FilesystemLoader::findTemplate() to return "null" instead of "false" (same meaning) + * added support for "Twig\Markup" instances in the "in" test + * fixed "import" when macros are stored in a template string + * fixed Lexer when using custom options containing the # char + * added template line number to twig_get_attribute() + +* 2.8.1 (2019-04-16) + + * fixed EscaperNodeVisitor + * deprecated passing a 3rd, 4th, and 5th arguments to the Sandbox exception classes + * deprecated Node::setTemplateName() in favor of Node::setSourceContext() + +* 2.8.0 (2019-04-16) + + * added Traversable support for the length filter + * fixed some wrong location in error messages + * made exception creation faster + * made escaping on ternary expressions (?: and ??) more fine-grained + * added the possibility to give a nice name to string templates (template_from_string function) + * fixed the "with" behavior to always include the globals (for consistency with the "include" and "embed" tags) + * fixed "include" with "ignore missing" when an error loading occurs in the included template + * added support for a new whitespace trimming option ({%~ ~%}, {{~ ~}}, {#~ ~#}) + * added the "column" filter + +* 2.7.4 (2019-03-23) + + * fixed variadic support + * fixed CheckToStringNode implementation (broken when a function/filter is variadic) + +* 2.7.3 (2019-03-21) + + * fixed the spaceless filter so that it behaves like the spaceless tag + * fixed BC break on Environment::resolveTemplate() + * allowed Traversable objects to be used in the "with" tag + * allowed Traversable objects to be used in the "with" tag + * allowed Traversable objects to be used in the "with" argument of the "include" and "embed" tags + +* 2.7.2 (2019-03-12) + + * added TemplateWrapper::getTemplateName() + +* 2.7.1 (2019-03-12) + + * fixed class aliases + +* 2.7.0 (2019-03-12) + + * fixed sandbox security issue (under some circumstances, calling the + __toString() method on an object was possible even if not allowed by the + security policy) + * fixed batch filter clobbers array keys when fill parameter is used + * added preserveKeys support for the batch filter + * fixed "embed" support when used from "template_from_string" + * deprecated passing a Twig\Template to Twig\Environment::load()/Twig\Environment::resolveTemplate() + * added the possibility to pass a TemplateWrapper to Twig\Environment::load() + * marked Twig\Environment::getTemplateClass() as internal (implementation detail) + * improved the performance of the sandbox + * deprecated the spaceless tag + * added a spaceless filter + * added max value to the "random" function + * deprecated Twig\Extension\InitRuntimeInterface + * deprecated Twig\Loader\ExistsLoaderInterface + * deprecated PSR-0 classes in favor of namespaced ones + * made namespace classes the default classes (PSR-0 ones are aliases now) + * added Twig\Loader\ChainLoader::getLoaders() + * removed duplicated directory separator in FilesystemLoader + * deprecated the "base_template_class" option on Twig\Environment + * deprecated the Twig\Environment::getBaseTemplateClass() and + Twig\Environment::setBaseTemplateClass() methods + * changed internal code to use the namespaced classes as much as possible + * deprecated Twig_Parser::isReservedMacroName() + +* 2.6.2 (2019-01-14) + + * fixed regression (key exists check for non ArrayObject objects) + +* 2.6.1 (2019-01-14) + + * fixed ArrayObject access with a null value + * fixed embedded templates starting with a BOM + * fixed using a Twig_TemplateWrapper instance as an argument to extends + * fixed error location when calling an undefined block + * deprecated passing a string as a source on Twig_Error + * switched generated code to use the PHP short array notation + * fixed float representation in compiled templates + * added a second argument to the join filter (last separator configuration) + +* 2.6.0 (2018-12-16) + + * made sure twig_include returns a string + * fixed multi-byte UFT-8 in escape('html_attr') + * added the "deprecated" tag + * added support for dynamically named tests + * fixed GlobalsInterface extended class + * fixed filesystem loader throwing an exception instead of returning false + +* 2.5.0 (2018-07-13) + + * deprecated using the spaceless tag at the root level of a child template (noop anyway) + * deprecated the possibility to define a block in a non-capturing block in a child template + * added the Symfony ctype polyfill as a dependency + * fixed reporting the proper location for errors compiled in templates + * fixed the error handling for the optimized extension-based function calls + * ensured that syntax errors are triggered with the right line + * "js" filter now produces valid JSON + +* 2.4.8 (2018-04-02) + + * fixed a regression when using the "default" filter or the "defined" test on non-existing arrays + +* 2.4.7 (2018-03-20) + + * optimized runtime performance + * optimized parser performance by inlining the constant values + * fixed block names unicity + * fixed counting children of SimpleXMLElement objects + * added missing else clause to avoid infinite loops + * fixed .. (range operator) in sandbox policy + +* 2.4.6 (2018-03-03) + + * fixed a regression in the way the profiler is registered in templates + +* 2.4.5 (2018-03-02) + + * optimized the performance of calling an extension method at runtime + * optimized the performance of the dot operator for array and method calls + * added an exception when using "===" instead of "same as" + * fixed possible array to string conversion concealing actual error + * made variable names deterministic in compiled templates + * fixed length filter when passing an instance of IteratorAggregate + * fixed Environment::resolveTemplate to accept instances of TemplateWrapper + +* 2.4.4 (2017-09-27) + + * added Twig_Profiler_Profile::reset() + * fixed use TokenParser to return an empty Node + * added RuntimeExtensionInterface + * added circular reference detection when loading templates + * added support for runtime loaders in IntegrationTestCase + * fixed deprecation when using Twig_Profiler_Dumper_Html + * removed @final from Twig_Profiler_Dumper_Text + +* 2.4.3 (2017-06-07) + + * fixed namespaces introduction + +* 2.4.2 (2017-06-05) + + * fixed namespaces introduction + +* 2.4.1 (2017-06-05) + + * fixed namespaces introduction + +* 2.4.0 (2017-06-05) + + * added support for PHPUnit 6 when testing extensions + * fixed PHP 7.2 compatibility + * fixed template name generation in Twig_Environment::createTemplate() + * removed final tag on Twig_TokenParser_Include + * dropped HHVM support + * added namespaced aliases for all (non-deprecated) classes and interfaces + * marked Twig_Filter, Twig_Function, Twig_Test, Twig_Node_Module and Twig_Profiler_Profile as final via the @final annotation + +* 2.3.2 (2017-04-20) + + * fixed edge case in the method cache for Twig attributes + +* 2.3.1 (2017-04-18) + + * fixed the empty() test + +* 2.3.0 (2017-03-22) + + * fixed a race condition handling when writing cache files + * "length" filter now returns string length when applied to an object that does + not implement \Countable but provides __toString() + * "empty" test will now consider the return value of the __toString() method for + objects implement __toString() but not \Countable + * fixed JS escaping for unicode characters with higher code points + * added error message when calling `parent()` in a block that doesn't exist in the parent template + +* 2.2.0 (2017-02-26) + + * added a PSR-11 compatible runtime loader + * added `side` argument to `trim` to allow left or right trimming only. + +* 2.1.0 (2017-01-11) + + * fixed twig_get_attribute() + * added Twig_NodeCaptureInterface for nodes that capture all output + +* 2.0.0 (2017-01-05) + + * removed the C extension + * moved Twig_Environment::getAttribute() to twig_get_attribute() + * removed Twig_Environment::getLexer(), Twig_Environment::getParser(), Twig_Environment::getCompiler() + * removed Twig_Compiler::getFilename() + * added hasser support in Twig_Template::getAttribute() + * sped up the json_encode filter + * removed reserved macro names; all names can be used as macro + * removed Twig_Template::getEnvironment() + * changed _self variable to return the current template name + * made the loader a required argument of Twig_Environment constructor + * removed Twig_Environment::clearTemplateCache() + * removed Twig_Autoloader (use Composer instead) + * removed `true` as an equivalent to `html` for the auto-escaping strategy + * removed pre-1.8 autoescape tag syntax + * dropped support for PHP 5.x + * removed the ability to register a global variable after the runtime or the extensions have been initialized + * improved the performance of the filesystem loader + * removed features that were deprecated in 1.x + +* 1.42.6 (2020-XX-XX) + + * n/a + +* 1.42.5 (2020-02-11) + + * Fix implementation of case-insensitivity for method names + +* 1.42.4 (2019-11-11) + + * optimized "block('foo') ?? 'bar" + * added supported for exponential numbers + +* 1.42.3 (2019-08-24) + + * fixed the "split" filter when the delimiter is "0" + * fixed the "empty" test on Traversable instances + * fixed cache when opcache is installed but disabled + * fixed PHP 7.4 compatibility + * bumped the minimal PHP version to 5.5 + +* 1.42.2 (2019-06-18) + + * Display partial output (PHP buffer) when an error occurs in debug mode + +* 1.42.1 (2019-06-04) + + * added support for "Twig\Markup" instances in the "in" test (again) + * allowed string operators as variables names in assignments + +* 1.42.0 (2019-05-31) + + * fixed the "filter" filter when the argument is \Traversable but does not implement \Iterator (\SimpleXmlElement for instance) + * fixed a PHP fatal error when calling a macro imported in a block in a nested block + * fixed a PHP fatal error when calling a macro imported in the template in another macro + * fixed wrong error message on "import" and "from" + +* 1.41.0 (2019-05-14) + + * fixed support for PHP 7.4 + * added "filter", "map", and "reduce" filters (and support for arrow functions) + * fixed partial output leak when a PHP fatal error occurs + * optimized context access on PHP 7.4 + +* 1.40.1 (2019-04-29) + +* fixed regression in NodeTraverser + +* 1.40.0 (2019-04-28) + + * allowed Twig\NodeVisitor\NodeVisitorInterface::leaveNode() to return "null" instead of "false" (same meaning) + * added the "apply" tag as a replacement for the "filter" tag + * allowed Twig\Loader\FilesystemLoader::findTemplate() to return "null" instead of "false" (same meaning) + * added support for "Twig\Markup" instances in the "in" test + * fixed Lexer when using custom options containing the # char + * fixed "import" when macros are stored in a template string + +* 1.39.1 (2019-04-16) + + * fixed EscaperNodeVisitor + +* 1.39.0 (2019-04-16) + + * added Traversable support for the length filter + * fixed some wrong location in error messages + * made exception creation faster + * made escaping on ternary expressions (?: and ??) more fine-grained + * added the possibility to give a nice name to string templates (template_from_string function) + * fixed the "with" behavior to always include the globals (for consistency with the "include" and "embed" tags) + * fixed "include" with "ignore missing" when an error loading occurs in the included template + * added support for a new whitespace trimming option ({%~ ~%}, {{~ ~}}, {#~ ~#}) + +* 1.38.4 (2019-03-23) + + * fixed CheckToStringNode implementation (broken when a function/filter is variadic) + +* 1.38.3 (2019-03-21) + + * fixed the spaceless filter so that it behaves like the spaceless tag + * fixed BC break on Environment::resolveTemplate() + * fixed the bundled Autoloader to also load namespaced classes + * allowed Traversable objects to be used in the "with" tag + * allowed Traversable objects to be used in the "with" argument of the "include" and "embed" tags + +* 1.38.2 (2019-03-12) + + * added TemplateWrapper::getTemplateName() + +* 1.38.1 (2019-03-12) + + * fixed class aliases + +* 1.38.0 (2019-03-12) + + * fixed sandbox security issue (under some circumstances, calling the + __toString() method on an object was possible even if not allowed by the + security policy) + * fixed batch filter clobbers array keys when fill parameter is used + * added preserveKeys support for the batch filter + * fixed "embed" support when used from "template_from_string" + * added the possibility to pass a TemplateWrapper to Twig\Environment::load() + * improved the performance of the sandbox + * added a spaceless filter + * added max value to the "random" function + * made namespace classes the default classes (PSR-0 ones are aliases now) + * removed duplicated directory separator in FilesystemLoader + * added Twig\Loader\ChainLoader::getLoaders() + * changed internal code to use the namespaced classes as much as possible + +* 1.37.1 (2019-01-14) + + * fixed regression (key exists check for non ArrayObject objects) + * fixed logic in TemplateWrapper + +* 1.37.0 (2019-01-14) + + * fixed ArrayObject access with a null value + * fixed embedded templates starting with a BOM + * fixed using a Twig_TemplateWrapper instance as an argument to extends + * switched generated code to use the PHP short array notation + * dropped PHP 5.3 support + * fixed float representation in compiled templates + * added a second argument to the join filter (last separator configuration) + +* 1.36.0 (2018-12-16) + + * made sure twig_include returns a string + * fixed multi-byte UFT-8 in escape('html_attr') + * added the "deprecated" tag + * added support for dynamically named tests + * fixed GlobalsInterface extended class + * fixed filesystem loader throwing an exception instead of returning false + +* 1.35.4 (2018-07-13) + + * ensured that syntax errors are triggered with the right line + * added the Symfony ctype polyfill as a dependency + * "js" filter now produces valid JSON + +* 1.35.3 (2018-03-20) + + * fixed block names unicity + * fixed counting children of SimpleXMLElement objects + * added missing else clause to avoid infinite loops + * fixed .. (range operator) in sandbox policy + +* 1.35.2 (2018-03-03) + + * fixed a regression in the way the profiler is registered in templates + +* 1.35.1 (2018-03-02) + + * added an exception when using "===" instead of "same as" + * fixed possible array to string conversion concealing actual error + * made variable names deterministic in compiled templates + * fixed length filter when passing an instance of IteratorAggregate + * fixed Environment::resolveTemplate to accept instances of TemplateWrapper + +* 1.35.0 (2017-09-27) + + * added Twig_Profiler_Profile::reset() + * fixed use TokenParser to return an empty Node + * added RuntimeExtensionInterface + * added circular reference detection when loading templates + +* 1.34.4 (2017-07-04) + + * added support for runtime loaders in IntegrationTestCase + * fixed deprecation when using Twig_Profiler_Dumper_Html + +* 1.34.3 (2017-06-07) + + * fixed namespaces introduction + +* 1.34.2 (2017-06-05) + + * fixed namespaces introduction + +* 1.34.1 (2017-06-05) + + * fixed namespaces introduction + +* 1.34.0 (2017-06-05) + + * added support for PHPUnit 6 when testing extensions + * fixed PHP 7.2 compatibility + * fixed template name generation in Twig_Environment::createTemplate() + * removed final tag on Twig_TokenParser_Include + * added namespaced aliases for all (non-deprecated) classes and interfaces + * dropped HHVM support + * dropped PHP 5.2 support + +* 1.33.2 (2017-04-20) + + * fixed edge case in the method cache for Twig attributes + +* 1.33.1 (2017-04-18) + + * fixed the empty() test + +* 1.33.0 (2017-03-22) + + * fixed a race condition handling when writing cache files + * "length" filter now returns string length when applied to an object that does + not implement \Countable but provides __toString() + * "empty" test will now consider the return value of the __toString() method for + objects implement __toString() but not \Countable + * fixed JS escaping for unicode characters with higher code points + +* 1.32.0 (2017-02-26) + + * fixed deprecation notice in Twig_Util_DeprecationCollector + * added a PSR-11 compatible runtime loader + * added `side` argument to `trim` to allow left or right trimming only. + +* 1.31.0 (2017-01-11) + + * added Twig_NodeCaptureInterface for nodes that capture all output + * fixed marking the environment as initialized too early + * fixed C89 compat for the C extension + * turned fatal error into exception when a previously generated cache is corrupted + * fixed offline cache warm-ups for embedded templates + +* 1.30.0 (2016-12-23) + + * added Twig_FactoryRuntimeLoader + * deprecated function/test/filter/tag overriding + * deprecated the "disable_c_ext" attribute on Twig_Node_Expression_GetAttr + +* 1.29.0 (2016-12-13) + + * fixed sandbox being left enabled if an exception is thrown while rendering + * marked some classes as being final (via @final) + * made Twig_Error report real source path when possible + * added support for {{ _self }} to provide an upgrade path from 1.x to 2.0 (replaces {{ _self.templateName }}) + * deprecated silent display of undefined blocks + * deprecated support for mbstring.func_overload != 0 + +* 1.28.2 (2016-11-23) + + * fixed precedence between getFoo() and isFoo() in Twig_Template::getAttribute() + * improved a deprecation message + +* 1.28.1 (2016-11-18) + + * fixed block() function when used with a template argument + +* 1.28.0 (2016-11-17) + + * added support for the PHP 7 null coalescing operator for the ?? Twig implementation + * exposed a way to access template data and methods in a portable way + * changed context access to use the PHP 7 null coalescing operator when available + * added the "with" tag + * added support for a custom template on the block() function + * added "is defined" support for block() and constant() + * optimized the way attributes are fetched + +* 1.27.0 (2016-10-25) + + * deprecated Twig_Parser::getEnvironment() + * deprecated Twig_Parser::addHandler() and Twig_Parser::addNodeVisitor() + * deprecated Twig_Compiler::addIndentation() + * fixed regression when registering two extensions having the same class name + * deprecated Twig_LoaderInterface::getSource() (implement Twig_SourceContextLoaderInterface instead) + * fixed the filesystem loader with relative paths + * deprecated Twig_Node::getLine() in favor of Twig_Node::getTemplateLine() + * deprecated Twig_Template::getSource() in favor of Twig_Template::getSourceContext() + * deprecated Twig_Node::getFilename() in favor of Twig_Node::getTemplateName() + * deprecated the "filename" escaping strategy (use "name" instead) + * added Twig_Source to hold information about the original template + * deprecated Twig_Error::getTemplateFile() and Twig_Error::setTemplateFile() in favor of Twig_Error::getTemplateName() and Twig_Error::setTemplateName() + * deprecated Parser::getFilename() + * fixed template paths when a template name contains a protocol like vfs:// + * improved debugging with Twig_Sandbox_SecurityError exceptions for disallowed methods and properties + +* 1.26.1 (2016-10-05) + + * removed template source code from generated template classes when debug is disabled + * fixed default implementation of Twig_Template::getDebugInfo() for better BC + * fixed regression on static calls for functions/filters/tests + +* 1.26.0 (2016-10-02) + + * added template cache invalidation based on more environment options + * added a missing deprecation notice + * fixed template paths when a template is stored in a PHAR file + * allowed filters/functions/tests implementation to use a different class than the extension they belong to + * deprecated Twig_ExtensionInterface::getName() + +* 1.25.0 (2016-09-21) + + * changed the way we store template source in template classes + * removed usage of realpath in cache keys + * fixed Twig cache sharing when used with different versions of PHP + * removed embed parent workaround for simple use cases + * deprecated the ability to store non Node instances in Node::$nodes + * deprecated Twig_Environment::getLexer(), Twig_Environment::getParser(), Twig_Environment::getCompiler() + * deprecated Twig_Compiler::getFilename() + +* 1.24.2 (2016-09-01) + + * fixed static callables + * fixed a potential PHP warning when loading the cache + * fixed a case where the autoescaping does not work as expected + +* 1.24.1 (2016-05-30) + + * fixed reserved keywords (forbids true, false, null and none keywords for variables names) + * fixed support for PHP7 (Throwable support) + * marked the following methods as being internals on Twig_Environment: + getFunctions(), getFilters(), getTests(), getFunction(), getFilter(), getTest(), + getTokenParsers(), getTags(), getNodeVisitors(), getUnaryOperators(), getBinaryOperators(), + getFunctions(), getFilters(), getGlobals(), initGlobals(), initExtensions(), and initExtension() + +* 1.24.0 (2016-01-25) + + * adding support for the ?? operator + * fixed the defined test when used on a constant, a map, or a sequence + * undeprecated _self (should only be used to get the template name, not the template instance) + * fixed parsing on PHP7 + +* 1.23.3 (2016-01-11) + + * fixed typo + +* 1.23.2 (2015-01-11) + + * added versions in deprecated messages + * made file cache tolerant for trailing (back)slashes on directory configuration + * deprecated unused Twig_Node_Expression_ExtensionReference class + +* 1.23.1 (2015-11-05) + + * fixed some exception messages which triggered PHP warnings + * fixed BC on Twig_Test_NodeTestCase + +* 1.23.0 (2015-10-29) + + * deprecated the possibility to override an extension by registering another one with the same name + * deprecated Twig_ExtensionInterface::getGlobals() (added Twig_Extension_GlobalsInterface for BC) + * deprecated Twig_ExtensionInterface::initRuntime() (added Twig_Extension_InitRuntimeInterface for BC) + * deprecated Twig_Environment::computeAlternatives() + +* 1.22.3 (2015-10-13) + + * fixed regression when using null as a cache strategy + * improved performance when checking template freshness + * fixed warnings when loaded templates do not exist + * fixed template class name generation to prevent possible collisions + * fixed logic for custom escapers to call them even on integers and null values + * changed template cache names to take into account the Twig C extension + +* 1.22.2 (2015-09-22) + + * fixed a race condition in template loading + +* 1.22.1 (2015-09-15) + + * fixed regression in template_from_string + +* 1.22.0 (2015-09-13) + + * made Twig_Test_IntegrationTestCase more flexible + * added an option to force PHP bytecode invalidation when writing a compiled template into the cache + * fixed the profiler duration for the root node + * changed template cache names to take into account enabled extensions + * deprecated Twig_Environment::clearCacheFiles(), Twig_Environment::getCacheFilename(), + Twig_Environment::writeCacheFile(), and Twig_Environment::getTemplateClassPrefix() + * added a way to override the filesystem template cache system + * added a way to get the original template source from Twig_Template + +* 1.21.2 (2015-09-09) + + * fixed variable names for the deprecation triggering code + * fixed escaping strategy detection based on filename + * added Traversable support for replace, merge, and sort + * deprecated support for character by character replacement for the "replace" filter + +* 1.21.1 (2015-08-26) + + * fixed regression when using the deprecated Twig_Test_* classes + +* 1.21.0 (2015-08-24) + + * added deprecation notices for deprecated features + * added a deprecation "framework" for filters/functions/tests and test fixtures + +* 1.20.0 (2015-08-12) + + * forbid access to the Twig environment from templates and internal parts of Twig_Template + * fixed limited RCEs when in sandbox mode + * deprecated Twig_Template::getEnvironment() + * deprecated the _self variable for usage outside of the from and import tags + * added Twig_BaseNodeVisitor to ease the compatibility of node visitors + between 1.x and 2.x + +* 1.19.0 (2015-07-31) + + * fixed wrong error message when including an undefined template in a child template + * added support for variadic filters, functions, and tests + * added support for extra positional arguments in macros + * added ignore_missing flag to the source function + * fixed batch filter with zero items + * deprecated Twig_Environment::clearTemplateCache() + * fixed sandbox disabling when using the include function + +* 1.18.2 (2015-06-06) + + * fixed template/line guessing in exceptions for nested templates + * optimized the number of inodes and the size of realpath cache when using the cache + +* 1.18.1 (2015-04-19) + + * fixed memory leaks in the C extension + * deprecated Twig_Loader_String + * fixed the slice filter when used with a SimpleXMLElement object + * fixed filesystem loader when trying to load non-files (like directories) + +* 1.18.0 (2015-01-25) + + * fixed some error messages where the line was wrong (unknown variables or argument names) + * added a new way to customize the main Module node (via empty nodes) + * added Twig_Environment::createTemplate() to create a template from a string + * added a profiler + * fixed filesystem loader cache when different file paths are used for the same template + +* 1.17.0 (2015-01-14) + + * added a 'filename' autoescaping strategy, which dynamically chooses the + autoescaping strategy for a template based on template file extension. + +* 1.16.3 (2014-12-25) + + * fixed regression for dynamic parent templates + * fixed cache management with statcache + * fixed a regression in the slice filter + +* 1.16.2 (2014-10-17) + + * fixed timezone on dates as strings + * fixed 2-words test names when a custom node class is not used + * fixed macros when using an argument named like a PHP super global (like GET or POST) + * fixed date_modify when working with DateTimeImmutable + * optimized for loops + * fixed multi-byte characters handling in the split filter + * fixed a regression in the in operator + * fixed a regression in the slice filter + +* 1.16.1 (2014-10-10) + + * improved error reporting in a sandboxed template + * fixed missing error file/line information under certain circumstances + * fixed wrong error line number in some error messages + * fixed the in operator to use strict comparisons + * sped up the slice filter + * fixed for mb function overload mb_substr acting different + * fixed the attribute() function when passing a variable for the arguments + +* 1.16.0 (2014-07-05) + + * changed url_encode to always encode according to RFC 3986 + * fixed inheritance in a 'use'-hierarchy + * removed the __toString policy check when the sandbox is disabled + * fixed recursively calling blocks in templates with inheritance + +* 1.15.1 (2014-02-13) + + * fixed the conversion of the special '0000-00-00 00:00' date + * added an error message when trying to import an undefined block from a trait + * fixed a C extension crash when accessing defined but uninitialized property. + +* 1.15.0 (2013-12-06) + + * made ignoreStrictCheck in Template::getAttribute() works with __call() methods throwing BadMethodCallException + * added min and max functions + * added the round filter + * fixed a bug that prevented the optimizers to be enabled/disabled selectively + * fixed first and last filters for UTF-8 strings + * added a source function to include the content of a template without rendering it + * fixed the C extension sandbox behavior when get or set is prepend to method name + +* 1.14.2 (2013-10-30) + + * fixed error filename/line when an error occurs in an included file + * allowed operators that contain whitespaces to have more than one whitespace + * allowed tests to be made of 1 or 2 words (like "same as" or "divisible by") + +* 1.14.1 (2013-10-15) + + * made it possible to use named operators as variables + * fixed the possibility to have a variable named 'matches' + * added support for PHP 5.5 DateTimeInterface + +* 1.14.0 (2013-10-03) + + * fixed usage of the html_attr escaping strategy to avoid double-escaping with the html strategy + * added new operators: ends with, starts with, and matches + * fixed some compatibility issues with HHVM + * added a way to add custom escaping strategies + * fixed the C extension compilation on Windows + * fixed the batch filter when using a fill argument with an exact match of elements to batch + * fixed the filesystem loader cache when a template name exists in several namespaces + * fixed template_from_string when the template includes or extends other ones + * fixed a crash of the C extension on an edge case + +* 1.13.2 (2013-08-03) + + * fixed the error line number for an error occurs in and embedded template + * fixed crashes of the C extension on some edge cases + +* 1.13.1 (2013-06-06) + + * added the possibility to ignore the filesystem constructor argument in Twig_Loader_Filesystem + * fixed Twig_Loader_Chain::exists() for a loader which implements Twig_ExistsLoaderInterface + * adjusted backtrace call to reduce memory usage when an error occurs + * added support for object instances as the second argument of the constant test + * fixed the include function when used in an assignment + +* 1.13.0 (2013-05-10) + + * fixed getting a numeric-like item on a variable ('09' for instance) + * fixed getting a boolean or float key on an array, so it is consistent with PHP's array access: + `{{ array[false] }}` behaves the same as `echo $array[false];` (equals `$array[0]`) + * made the escape filter 20% faster for happy path (escaping string for html with UTF-8) + * changed ☃ to § in tests + * enforced usage of named arguments after positional ones + +* 1.12.3 (2013-04-08) + + * fixed a security issue in the filesystem loader where it was possible to include a template one + level above the configured path + * fixed fatal error that should be an exception when adding a filter/function/test too late + * added a batch filter + * added support for encoding an array as query string in the url_encode filter + +* 1.12.2 (2013-02-09) + + * fixed the timezone used by the date filter and function when the given date contains a timezone (like 2010-01-28T15:00:00+02:00) + * fixed globals when getGlobals is called early on + * added the first and last filter + +* 1.12.1 (2013-01-15) + + * added support for object instances as the second argument of the constant function + * relaxed globals management to avoid a BC break + * added support for {{ some_string[:2] }} + +* 1.12.0 (2013-01-08) + + * added verbatim as an alias for the raw tag to avoid confusion with the raw filter + * fixed registration of tests and functions as anonymous functions + * fixed globals management + +* 1.12.0-RC1 (2012-12-29) + + * added an include function (does the same as the include tag but in a more flexible way) + * added the ability to use any PHP callable to define filters, functions, and tests + * added a syntax error when using a loop variable that is not defined + * added the ability to set default values for macro arguments + * added support for named arguments for filters, tests, and functions + * moved filters/functions/tests syntax errors to the parser + * added support for extended ternary operator syntaxes + +* 1.11.1 (2012-11-11) + + * fixed debug info line numbering (was off by 2) + * fixed escaping when calling a macro inside another one (regression introduced in 1.9.1) + * optimized variable access on PHP 5.4 + * fixed a crash of the C extension when an exception was thrown from a macro called without being imported (using _self.XXX) + +* 1.11.0 (2012-11-07) + + * fixed macro compilation when a variable name is a PHP reserved keyword + * changed the date filter behavior to always apply the default timezone, except if false is passed as the timezone + * fixed bitwise operator precedences + * added the template_from_string function + * fixed default timezone usage for the date function + * optimized the way Twig exceptions are managed (to make them faster) + * added Twig_ExistsLoaderInterface (implementing this interface in your loader make the chain loader much faster) + +* 1.10.3 (2012-10-19) + + * fixed wrong template location in some error messages + * reverted a BC break introduced in 1.10.2 + * added a split filter + +* 1.10.2 (2012-10-15) + + * fixed macro calls on PHP 5.4 + +* 1.10.1 (2012-10-15) + + * made a speed optimization to macro calls when imported via the "import" tag + * fixed C extension compilation on Windows + * fixed a segfault in the C extension when using DateTime objects + +* 1.10.0 (2012-09-28) + + * extracted functional tests framework to make it reusable for third-party extensions + * added namespaced templates support in Twig_Loader_Filesystem + * added Twig_Loader_Filesystem::prependPath() + * fixed an error when a token parser pass a closure as a test to the subparse() method + +* 1.9.2 (2012-08-25) + + * fixed the in operator for objects that contain circular references + * fixed the C extension when accessing a public property of an object implementing the \ArrayAccess interface + +* 1.9.1 (2012-07-22) + + * optimized macro calls when auto-escaping is on + * fixed wrong parent class for Twig_Function_Node + * made Twig_Loader_Chain more explicit about problems + +* 1.9.0 (2012-07-13) + + * made the parsing independent of the template loaders + * fixed exception trace when an error occurs when rendering a child template + * added escaping strategies for CSS, URL, and HTML attributes + * fixed nested embed tag calls + * added the date_modify filter + +* 1.8.3 (2012-06-17) + + * fixed paths in the filesystem loader when passing a path that ends with a slash or a backslash + * fixed escaping when a project defines a function named html or js + * fixed chmod mode to apply the umask correctly + +* 1.8.2 (2012-05-30) + + * added the abs filter + * fixed a regression when using a number in template attributes + * fixed compiler when mbstring.func_overload is set to 2 + * fixed DateTimeZone support in date filter + +* 1.8.1 (2012-05-17) + + * fixed a regression when dealing with SimpleXMLElement instances in templates + * fixed "is_safe" value for the "dump" function when "html_errors" is not defined in php.ini + * switched to use mbstring whenever possible instead of iconv (you might need to update your encoding as mbstring and iconv encoding names sometimes differ) + +* 1.8.0 (2012-05-08) + + * enforced interface when adding tests, filters, functions, and node visitors from extensions + * fixed a side-effect of the date filter where the timezone might be changed + * simplified usage of the autoescape tag; the only (optional) argument is now the escaping strategy or false (with a BC layer) + * added a way to dynamically change the auto-escaping strategy according to the template "filename" + * changed the autoescape option to also accept a supported escaping strategy (for BC, true is equivalent to html) + * added an embed tag + +* 1.7.0 (2012-04-24) + + * fixed a PHP warning when using CIFS + * fixed template line number in some exceptions + * added an iterable test + * added an error when defining two blocks with the same name in a template + * added the preserves_safety option for filters + * fixed a PHP notice when trying to access a key on a non-object/array variable + * enhanced error reporting when the template file is an instance of SplFileInfo + * added Twig_Environment::mergeGlobals() + * added compilation checks to avoid misuses of the sandbox tag + * fixed filesystem loader freshness logic for high traffic websites + * fixed random function when charset is null + +* 1.6.5 (2012-04-11) + + * fixed a regression when a template only extends another one without defining any blocks + +* 1.6.4 (2012-04-02) + + * fixed PHP notice in Twig_Error::guessTemplateLine() introduced in 1.6.3 + * fixed performance when compiling large files + * optimized parent template creation when the template does not use dynamic inheritance + +* 1.6.3 (2012-03-22) + + * fixed usage of Z_ADDREF_P for PHP 5.2 in the C extension + * fixed compilation of numeric values used in templates when using a locale where the decimal separator is not a dot + * made the strategy used to guess the real template file name and line number in exception messages much faster and more accurate + +* 1.6.2 (2012-03-18) + + * fixed sandbox mode when used with inheritance + * added preserveKeys support for the slice filter + * fixed the date filter when a DateTime instance is passed with a specific timezone + * added a trim filter + +* 1.6.1 (2012-02-29) + + * fixed Twig C extension + * removed the creation of Twig_Markup instances when not needed + * added a way to set the default global timezone for dates + * fixed the slice filter on strings when the length is not specified + * fixed the creation of the cache directory in case of a race condition + +* 1.6.0 (2012-02-04) + + * fixed raw blocks when used with the whitespace trim option + * made a speed optimization to macro calls when imported via the "from" tag + * fixed globals, parsers, visitors, filters, tests, and functions management in Twig_Environment when a new one or new extension is added + * fixed the attribute function when passing arguments + * added slice notation support for the [] operator (syntactic sugar for the slice operator) + * added a slice filter + * added string support for the reverse filter + * fixed the empty test and the length filter for Twig_Markup instances + * added a date function to ease date comparison + * fixed unary operators precedence + * added recursive parsing support in the parser + * added string and integer handling for the random function + +* 1.5.1 (2012-01-05) + + * fixed a regression when parsing strings + +* 1.5.0 (2012-01-04) + + * added Traversable objects support for the join filter + +* 1.5.0-RC2 (2011-12-30) + + * added a way to set the default global date interval format + * fixed the date filter for DateInterval instances (setTimezone() does not exist for them) + * refactored Twig_Template::display() to ease its extension + * added a number_format filter + +* 1.5.0-RC1 (2011-12-26) + + * removed the need to quote hash keys + * allowed hash keys to be any expression + * added a do tag + * added a flush tag + * added support for dynamically named filters and functions + * added a dump function to help debugging templates + * added a nl2br filter + * added a random function + * added a way to change the default format for the date filter + * fixed the lexer when an operator ending with a letter ends a line + * added string interpolation support + * enhanced exceptions for unknown filters, functions, tests, and tags + +* 1.4.0 (2011-12-07) + + * fixed lexer when using big numbers (> PHP_INT_MAX) + * added missing preserveKeys argument to the reverse filter + * fixed macros containing filter tag calls + +* 1.4.0-RC2 (2011-11-27) + + * removed usage of Reflection in Twig_Template::getAttribute() + * added a C extension that can optionally replace Twig_Template::getAttribute() + * added negative timestamp support to the date filter + +* 1.4.0-RC1 (2011-11-20) + + * optimized variable access when using PHP 5.4 + * changed the precedence of the .. operator to be more consistent with languages that implements such a feature like Ruby + * added an Exception to Twig_Loader_Array::isFresh() method when the template does not exist to be consistent with other loaders + * added Twig_Function_Node to allow more complex functions to have their own Node class + * added Twig_Filter_Node to allow more complex filters to have their own Node class + * added Twig_Test_Node to allow more complex tests to have their own Node class + * added a better error message when a template is empty but contain a BOM + * fixed "in" operator for empty strings + * fixed the "defined" test and the "default" filter (now works with more than one call (foo.bar.foo) and for both values of the strict_variables option) + * changed the way extensions are loaded (addFilter/addFunction/addGlobal/addTest/addNodeVisitor/addTokenParser/addExtension can now be called in any order) + * added Twig_Environment::display() + * made the escape filter smarter when the encoding is not supported by PHP + * added a convert_encoding filter + * moved all node manipulations outside the compile() Node method + * made several speed optimizations + +* 1.3.0 (2011-10-08) + +no changes + +* 1.3.0-RC1 (2011-10-04) + + * added an optimization for the parent() function + * added cache reloading when auto_reload is true and an extension has been modified + * added the possibility to force the escaping of a string already marked as safe (instance of Twig_Markup) + * allowed empty templates to be used as traits + * added traits support for the "parent" function + +* 1.2.0 (2011-09-13) + +no changes + +* 1.2.0-RC1 (2011-09-10) + + * enhanced the exception when a tag remains unclosed + * added support for empty Countable objects for the "empty" test + * fixed algorithm that determines if a template using inheritance is valid (no output between block definitions) + * added better support for encoding problems when escaping a string (available as of PHP 5.4) + * added a way to ignore a missing template when using the "include" tag ({% include "foo" ignore missing %}) + * added support for an array of templates to the "include" and "extends" tags ({% include ['foo', 'bar'] %}) + * added support for bitwise operators in expressions + * added the "attribute" function to allow getting dynamic attributes on variables + * added Twig_Loader_Chain + * added Twig_Loader_Array::setTemplate() + * added an optimization for the set tag when used to capture a large chunk of static text + * changed name regex to match PHP one "[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*" (works for blocks, tags, functions, filters, and macros) + * removed the possibility to use the "extends" tag from a block + * added "if" modifier support to "for" loops + +* 1.1.2 (2011-07-30) + + * fixed json_encode filter on PHP 5.2 + * fixed regression introduced in 1.1.1 ({{ block(foo|lower) }}) + * fixed inheritance when using conditional parents + * fixed compilation of templates when the body of a child template is not empty + * fixed output when a macro throws an exception + * fixed a parsing problem when a large chunk of text is enclosed in a comment tag + * added PHPDoc for all Token parsers and Core extension functions + +* 1.1.1 (2011-07-17) + + * added a performance optimization in the Optimizer (also helps to lower the number of nested level calls) + * made some performance improvement for some edge cases + +* 1.1.0 (2011-06-28) + + * fixed json_encode filter + +* 1.1.0-RC3 (2011-06-24) + + * fixed method case-sensitivity when using the sandbox mode + * added timezone support for the date filter + * fixed possible security problems with NUL bytes + +* 1.1.0-RC2 (2011-06-16) + + * added an exception when the template passed to "use" is not a string + * made 'a.b is defined' not throw an exception if a is not defined (in strict mode) + * added {% line \d+ %} directive + +* 1.1.0-RC1 (2011-05-28) + +Flush your cache after upgrading. + + * fixed date filter when using a timestamp + * fixed the defined test for some cases + * fixed a parsing problem when a large chunk of text is enclosed in a raw tag + * added support for horizontal reuse of template blocks (see docs for more information) + * added whitespace control modifier to all tags (see docs for more information) + * added null as an alias for none (the null test is also an alias for the none test now) + * made TRUE, FALSE, NONE equivalent to their lowercase counterparts + * wrapped all compilation and runtime exceptions with Twig_Error_Runtime and added logic to guess the template name and line + * moved display() method to Twig_Template (generated templates should now use doDisplay() instead) + +* 1.0.0 (2011-03-27) + + * fixed output when using mbstring + * fixed duplicate call of methods when using the sandbox + * made the charset configurable for the escape filter + +* 1.0.0-RC2 (2011-02-21) + + * changed the way {% set %} works when capturing (the content is now marked as safe) + * added support for macro name in the endmacro tag + * make Twig_Error compatible with PHP 5.3.0 > + * fixed an infinite loop on some Windows configurations + * fixed the "length" filter for numbers + * fixed Template::getAttribute() as properties in PHP are case sensitive + * removed coupling between Twig_Node and Twig_Template + * fixed the ternary operator precedence rule + +* 1.0.0-RC1 (2011-01-09) + +Backward incompatibilities: + + * the "items" filter, which has been deprecated for quite a long time now, has been removed + * the "range" filter has been converted to a function: 0|range(10) -> range(0, 10) + * the "constant" filter has been converted to a function: {{ some_date|date('DATE_W3C'|constant) }} -> {{ some_date|date(constant('DATE_W3C')) }} + * the "cycle" filter has been converted to a function: {{ ['odd', 'even']|cycle(i) }} -> {{ cycle(['odd', 'even'], i) }} + * the "for" tag does not support "joined by" anymore + * the "autoescape" first argument is now "true"/"false" (instead of "on"/"off") + * the "parent" tag has been replaced by a "parent" function ({{ parent() }} instead of {% parent %}) + * the "display" tag has been replaced by a "block" function ({{ block('title') }} instead of {% display title %}) + * removed the grammar and simple token parser (moved to the Twig Extensions repository) + +Changes: + + * added "needs_context" option for filters and functions (the context is then passed as a first argument) + * added global variables support + * made macros return their value instead of echoing directly (fixes calling a macro in sandbox mode) + * added the "from" tag to import macros as functions + * added support for functions (a function is just syntactic sugar for a getAttribute() call) + * made macros callable when sandbox mode is enabled + * added an exception when a macro uses a reserved name + * the "default" filter now uses the "empty" test instead of just checking for null + * added the "empty" test + +* 0.9.10 (2010-12-16) + +Backward incompatibilities: + + * The Escaper extension is enabled by default, which means that all displayed + variables are now automatically escaped. You can revert to the previous + behavior by removing the extension via $env->removeExtension('escaper') + or just set the 'autoescape' option to 'false'. + * removed the "without loop" attribute for the "for" tag (not needed anymore + as the Optimizer take care of that for most cases) + * arrays and hashes have now a different syntax + * arrays keep the same syntax with square brackets: [1, 2] + * hashes now use curly braces (["a": "b"] should now be written as {"a": "b"}) + * support for "arrays with keys" and "hashes without keys" is not supported anymore ([1, "foo": "bar"] or {"foo": "bar", 1}) + * the i18n extension is now part of the Twig Extensions repository + +Changes: + + * added the merge filter + * removed 'is_escaper' option for filters (a left over from the previous version) -- you must use 'is_safe' now instead + * fixed usage of operators as method names (like is, in, and not) + * changed the order of execution for node visitors + * fixed default() filter behavior when used with strict_variables set to on + * fixed filesystem loader compatibility with PHAR files + * enhanced error messages when an unexpected token is parsed in an expression + * fixed filename not being added to syntax error messages + * added the autoescape option to enable/disable autoescaping + * removed the newline after a comment (mimics PHP behavior) + * added a syntax error exception when parent block is used on a template that does not extend another one + * made the Escaper extension enabled by default + * fixed sandbox extension when used with auto output escaping + * fixed escaper when wrapping a Twig_Node_Print (the original class must be preserved) + * added an Optimizer extension (enabled by default; optimizes "for" loops and "raw" filters) + * added priority to node visitors + +* 0.9.9 (2010-11-28) + +Backward incompatibilities: + * the self special variable has been renamed to _self + * the odd and even filters are now tests: + {{ foo|odd }} must now be written {{ foo is odd }} + * the "safe" filter has been renamed to "raw" + * in Node classes, + sub-nodes are now accessed via getNode() (instead of property access) + attributes via getAttribute() (instead of array access) + * the urlencode filter had been renamed to url_encode + * the include tag now merges the passed variables with the current context by default + (the old behavior is still possible by adding the "only" keyword) + * moved Exceptions to Twig_Error_* (Twig_SyntaxError/Twig_RuntimeError are now Twig_Error_Syntax/Twig_Error_Runtime) + * removed support for {{ 1 < i < 3 }} (use {{ i > 1 and i < 3 }} instead) + * the "in" filter has been removed ({{ a|in(b) }} should now be written {{ a in b }}) + +Changes: + * added file and line to Twig_Error_Runtime exceptions thrown from Twig_Template + * changed trans tag to accept any variable for the plural count + * fixed sandbox mode (__toString() method check was not enforced if called implicitly from complex statements) + * added the ** (power) operator + * changed the algorithm used for parsing expressions + * added the spaceless tag + * removed trim_blocks option + * added support for is*() methods for attributes (foo.bar now looks for foo->getBar() or foo->isBar()) + * changed all exceptions to extend Twig_Error + * fixed unary expressions ({{ not(1 or 0) }}) + * fixed child templates (with an extend tag) that uses one or more imports + * added support for {{ 1 not in [2, 3] }} (more readable than the current {{ not (1 in [2, 3]) }}) + * escaping has been rewritten + * the implementation of template inheritance has been rewritten + (blocks can now be called individually and still work with inheritance) + * fixed error handling for if tag when a syntax error occurs within a subparse process + * added a way to implement custom logic for resolving token parsers given a tag name + * fixed js escaper to be stricter (now uses a whilelist-based js escaper) + * added the following filers: "constant", "trans", "replace", "json_encode" + * added a "constant" test + * fixed objects with __toString() not being autoescaped + * fixed subscript expressions when calling __call() (methods now keep the case) + * added "test" feature (accessible via the "is" operator) + * removed the debug tag (should be done in an extension) + * fixed trans tag when no vars are used in plural form + * fixed race condition when writing template cache + * added the special _charset variable to reference the current charset + * added the special _context variable to reference the current context + * renamed self to _self (to avoid conflict) + * fixed Twig_Template::getAttribute() for protected properties + +* 0.9.8 (2010-06-28) + +Backward incompatibilities: + * the trans tag plural count is now attached to the plural tag: + old: `{% trans count %}...{% plural %}...{% endtrans %}` + new: `{% trans %}...{% plural count %}...{% endtrans %}` + + * added a way to translate strings coming from a variable ({% trans var %}) + * fixed trans tag when used with the Escaper extension + * fixed default cache umask + * removed Twig_Template instances from the debug tag output + * fixed objects with __isset() defined + * fixed set tag when used with a capture + * fixed type hinting for Twig_Environment::addFilter() method + +* 0.9.7 (2010-06-12) + +Backward incompatibilities: + * changed 'as' to '=' for the set tag ({% set title as "Title" %} must now be {% set title = "Title" %}) + * removed the sandboxed attribute of the include tag (use the new sandbox tag instead) + * refactored the Node system (if you have custom nodes, you will have to update them to use the new API) + + * added self as a special variable that refers to the current template (useful for importing macros from the current template) + * added Twig_Template instance support to the include tag + * added support for dynamic and conditional inheritance ({% extends some_var %} and {% extends standalone ? "minimum" : "base" %}) + * added a grammar sub-framework to ease the creation of custom tags + * fixed the for tag for large arrays (some loop variables are now only available for arrays and objects that implement the Countable interface) + * removed the Twig_Resource::resolveMissingFilter() method + * fixed the filter tag which did not apply filtering to included files + * added a bunch of unit tests + * added a bunch of phpdoc + * added a sandbox tag in the sandbox extension + * changed the date filter to support any date format supported by DateTime + * added strict_variable setting to throw an exception when an invalid variable is used in a template (disabled by default) + * added the lexer, parser, and compiler as arguments to the Twig_Environment constructor + * changed the cache option to only accepts an explicit path to a cache directory or false + * added a way to add token parsers, filters, and visitors without creating an extension + * added three interfaces: Twig_NodeInterface, Twig_TokenParserInterface, and Twig_FilterInterface + * changed the generated code to match the new coding standards + * fixed sandbox mode (__toString() method check was not enforced if called implicitly from a simple statement like {{ article }}) + * added an exception when a child template has a non-empty body (as it is always ignored when rendering) + +* 0.9.6 (2010-05-12) + + * fixed variables defined outside a loop and for which the value changes in a for loop + * fixed the test suite for PHP 5.2 and older versions of PHPUnit + * added support for __call() in expression resolution + * fixed node visiting for macros (macros are now visited by visitors as any other node) + * fixed nested block definitions with a parent call (rarely useful but nonetheless supported now) + * added the cycle filter + * fixed the Lexer when mbstring.func_overload is used with an mbstring.internal_encoding different from ASCII + * added a long-syntax for the set tag ({% set foo %}...{% endset %}) + * unit tests are now powered by PHPUnit + * added support for gettext via the `i18n` extension + * fixed twig_capitalize_string_filter() and fixed twig_length_filter() when used with UTF-8 values + * added a more useful exception if an if tag is not closed properly + * added support for escaping strategy in the autoescape tag + * fixed lexer when a template has a big chunk of text between/in a block + +* 0.9.5 (2010-01-20) + +As for any new release, don't forget to remove all cached templates after +upgrading. + +If you have defined custom filters, you MUST upgrade them for this release. To +upgrade, replace "array" with "new Twig_Filter_Function", and replace the +environment constant by the "needs_environment" option: + + // before + 'even' => array('twig_is_even_filter', false), + 'escape' => array('twig_escape_filter', true), + + // after + 'even' => new Twig_Filter_Function('twig_is_even_filter'), + 'escape' => new Twig_Filter_Function('twig_escape_filter', array('needs_environment' => true)), + +If you have created NodeTransformer classes, you will need to upgrade them to +the new interface (please note that the interface is not yet considered +stable). + + * fixed list nodes that did not extend the Twig_NodeListInterface + * added the "without loop" option to the for tag (it disables the generation of the loop variable) + * refactored node transformers to node visitors + * fixed automatic-escaping for blocks + * added a way to specify variables to pass to an included template + * changed the automatic-escaping rules to be more sensible and more configurable in custom filters (the documentation lists all the rules) + * improved the filter system to allow object methods to be used as filters + * changed the Array and String loaders to actually make use of the cache mechanism + * included the default filter function definitions in the extension class files directly (Core, Escaper) + * added the // operator (like the floor() PHP function) + * added the .. operator (as a syntactic sugar for the range filter when the step is 1) + * added the in operator (as a syntactic sugar for the in filter) + * added the following filters in the Core extension: in, range + * added support for arrays (same behavior as in PHP, a mix between lists and dictionaries, arrays and hashes) + * enhanced some error messages to provide better feedback in case of parsing errors + +* 0.9.4 (2009-12-02) + +If you have custom loaders, you MUST upgrade them for this release: The +Twig_Loader base class has been removed, and the Twig_LoaderInterface has also +been changed (see the source code for more information or the documentation). + + * added support for DateTime instances for the date filter + * fixed loop.last when the array only has one item + * made it possible to insert newlines in tag and variable blocks + * fixed a bug when a literal '\n' were present in a template text + * fixed bug when the filename of a template contains */ + * refactored loaders + +* 0.9.3 (2009-11-11) + +This release is NOT backward compatible with the previous releases. + + The loaders do not take the cache and autoReload arguments anymore. Instead, + the Twig_Environment class has two new options: cache and auto_reload. + Upgrading your code means changing this kind of code: + + $loader = new Twig_Loader_Filesystem('/path/to/templates', '/path/to/compilation_cache', true); + $twig = new Twig_Environment($loader); + + to something like this: + + $loader = new Twig_Loader_Filesystem('/path/to/templates'); + $twig = new Twig_Environment($loader, array( + 'cache' => '/path/to/compilation_cache', + 'auto_reload' => true, + )); + + * deprecated the "items" filter as it is not needed anymore + * made cache and auto_reload options of Twig_Environment instead of arguments of Twig_Loader + * optimized template loading speed + * removed output when an error occurs in a template and render() is used + * made major speed improvements for loops (up to 300% on even the smallest loops) + * added properties as part of the sandbox mode + * added public properties support (obj.item can now be the item property on the obj object) + * extended set tag to support expression as value ({% set foo as 'foo' ~ 'bar' %} ) + * fixed bug when \ was used in HTML + +* 0.9.2 (2009-10-29) + + * made some speed optimizations + * changed the cache extension to .php + * added a js escaping strategy + * added support for short block tag + * changed the filter tag to allow chained filters + * made lexer more flexible as you can now change the default delimiters + * added set tag + * changed default directory permission when cache dir does not exist (more secure) + * added macro support + * changed filters first optional argument to be a Twig_Environment instance instead of a Twig_Template instance + * made Twig_Autoloader::autoload() a static method + * avoid writing template file if an error occurs + * added $ escaping when outputting raw strings + * enhanced some error messages to ease debugging + * fixed empty cache files when the template contains an error + +* 0.9.1 (2009-10-14) + + * fixed a bug in PHP 5.2.6 + * fixed numbers with one than one decimal + * added support for method calls with arguments ({{ foo.bar('a', 43) }}) + * made small speed optimizations + * made minor tweaks to allow better extensibility and flexibility + +* 0.9.0 (2009-10-12) + + * Initial release diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/LICENSE b/soc/2020/daily_report/archive/app/vendor/twig/twig/LICENSE new file mode 100644 index 0000000..5e8a0b8 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/LICENSE @@ -0,0 +1,29 @@ +Copyright (c) 2009-2020 by the Twig Team. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * The names of the contributors may not be used to endorse or + promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/README.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/README.rst new file mode 100644 index 0000000..d896ff5 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/README.rst @@ -0,0 +1,24 @@ +Twig, the flexible, fast, and secure template language for PHP +============================================================== + +Twig is a template language for PHP, released under the new BSD license (code +and documentation). + +Twig uses a syntax similar to the Django and Jinja template languages which +inspired the Twig runtime environment. + +Sponsors +-------- + +.. raw:: html + + + Blackfire.io + + +More Information +---------------- + +Read the `documentation`_ for more information. + +.. _documentation: https://twig.symfony.com/documentation diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/composer.json b/soc/2020/daily_report/archive/app/vendor/twig/twig/composer.json new file mode 100644 index 0000000..cc7da8e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/composer.json @@ -0,0 +1,49 @@ +{ + "name": "twig/twig", + "type": "library", + "description": "Twig, the flexible, fast, and secure template language for PHP", + "keywords": ["templating"], + "homepage": "https://twig.symfony.com", + "license": "BSD-3-Clause", + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Twig Team", + "role": "Contributors" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + } + ], + "require": { + "php": "^7.2.5", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-ctype": "^1.8" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4|^5.0", + "psr/container": "^1.0" + }, + "autoload": { + "psr-4" : { + "Twig\\" : "src/" + } + }, + "autoload-dev": { + "psr-4" : { + "Twig\\Tests\\" : "tests/" + } + }, + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/advanced.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/advanced.rst new file mode 100644 index 0000000..fd4ff14 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/advanced.rst @@ -0,0 +1,904 @@ +Extending Twig +============== + +Twig can be extended in many ways; you can add extra tags, filters, tests, +operators, global variables, and functions. You can even extend the parser +itself with node visitors. + +.. note:: + + The first section of this chapter describes how to extend Twig. If you want + to reuse your changes in different projects or if you want to share them + with others, you should then create an extension as described in the + following section. + +.. caution:: + + When extending Twig without creating an extension, Twig won't be able to + recompile your templates when the PHP code is updated. To see your changes + in real-time, either disable template caching or package your code into an + extension (see the next section of this chapter). + +Before extending Twig, you must understand the differences between all the +different possible extension points and when to use them. + +First, remember that Twig has two main language constructs: + +* ``{{ }}``: used to print the result of an expression evaluation; + +* ``{% %}``: used to execute statements. + +To understand why Twig exposes so many extension points, let's see how to +implement a *Lorem ipsum* generator (it needs to know the number of words to +generate). + +You can use a ``lipsum`` *tag*: + +.. code-block:: twig + + {% lipsum 40 %} + +That works, but using a tag for ``lipsum`` is not a good idea for at least +three main reasons: + +* ``lipsum`` is not a language construct; +* The tag outputs something; +* The tag is not flexible as you cannot use it in an expression: + + .. code-block:: twig + + {{ 'some text' ~ {% lipsum 40 %} ~ 'some more text' }} + +In fact, you rarely need to create tags; and that's good news because tags are +the most complex extension point. + +Now, let's use a ``lipsum`` *filter*: + +.. code-block:: twig + + {{ 40|lipsum }} + +Again, it works. But a filter should transform the passed value to something +else. Here, we use the value to indicate the number of words to generate (so, +``40`` is an argument of the filter, not the value we want to transform). + +Next, let's use a ``lipsum`` *function*: + +.. code-block:: twig + + {{ lipsum(40) }} + +Here we go. For this specific example, the creation of a function is the +extension point to use. And you can use it anywhere an expression is accepted: + +.. code-block:: twig + + {{ 'some text' ~ lipsum(40) ~ 'some more text' }} + + {% set lipsum = lipsum(40) %} + +Lastly, you can also use a *global* object with a method able to generate lorem +ipsum text: + +.. code-block:: twig + + {{ text.lipsum(40) }} + +As a rule of thumb, use functions for frequently used features and global +objects for everything else. + +Keep in mind the following when you want to extend Twig: + +========== ========================== ========== ========================= +What? Implementation difficulty? How often? When? +========== ========================== ========== ========================= +*macro* simple frequent Content generation +*global* simple frequent Helper object +*function* simple frequent Content generation +*filter* simple frequent Value transformation +*tag* complex rare DSL language construct +*test* simple rare Boolean decision +*operator* simple rare Values transformation +========== ========================== ========== ========================= + +Globals +------- + +A global variable is like any other template variable, except that it's +available in all templates and macros:: + + $twig = new \Twig\Environment($loader); + $twig->addGlobal('text', new Text()); + +You can then use the ``text`` variable anywhere in a template: + +.. code-block:: twig + + {{ text.lipsum(40) }} + +Filters +------- + +Creating a filter consists of associating a name with a PHP callable:: + + // an anonymous function + $filter = new \Twig\TwigFilter('rot13', function ($string) { + return str_rot13($string); + }); + + // or a simple PHP function + $filter = new \Twig\TwigFilter('rot13', 'str_rot13'); + + // or a class static method + $filter = new \Twig\TwigFilter('rot13', ['SomeClass', 'rot13Filter']); + $filter = new \Twig\TwigFilter('rot13', 'SomeClass::rot13Filter'); + + // or a class method + $filter = new \Twig\TwigFilter('rot13', [$this, 'rot13Filter']); + // the one below needs a runtime implementation (see below for more information) + $filter = new \Twig\TwigFilter('rot13', ['SomeClass', 'rot13Filter']); + +The first argument passed to the ``\Twig\TwigFilter`` constructor is the name of the +filter you will use in templates and the second one is the PHP callable to +associate with it. + +Then, add the filter to the Twig environment:: + + $twig = new \Twig\Environment($loader); + $twig->addFilter($filter); + +And here is how to use it in a template: + +.. code-block:: twig + + {{ 'Twig'|rot13 }} + + {# will output Gjvt #} + +When called by Twig, the PHP callable receives the left side of the filter +(before the pipe ``|``) as the first argument and the extra arguments passed +to the filter (within parentheses ``()``) as extra arguments. + +For instance, the following code: + +.. code-block:: twig + + {{ 'TWIG'|lower }} + {{ now|date('d/m/Y') }} + +is compiled to something like the following:: + + + + +The ``\Twig\TwigFilter`` class takes an array of options as its last argument:: + + $filter = new \Twig\TwigFilter('rot13', 'str_rot13', $options); + +Environment-aware Filters +~~~~~~~~~~~~~~~~~~~~~~~~~ + +If you want to access the current environment instance in your filter, set the +``needs_environment`` option to ``true``; Twig will pass the current +environment as the first argument to the filter call:: + + $filter = new \Twig\TwigFilter('rot13', function (Twig_Environment $env, $string) { + // get the current charset for instance + $charset = $env->getCharset(); + + return str_rot13($string); + }, ['needs_environment' => true]); + +Context-aware Filters +~~~~~~~~~~~~~~~~~~~~~ + +If you want to access the current context in your filter, set the +``needs_context`` option to ``true``; Twig will pass the current context as +the first argument to the filter call (or the second one if +``needs_environment`` is also set to ``true``):: + + $filter = new \Twig\TwigFilter('rot13', function ($context, $string) { + // ... + }, ['needs_context' => true]); + + $filter = new \Twig\TwigFilter('rot13', function (Twig_Environment $env, $context, $string) { + // ... + }, ['needs_context' => true, 'needs_environment' => true]); + +Automatic Escaping +~~~~~~~~~~~~~~~~~~ + +If automatic escaping is enabled, the output of the filter may be escaped +before printing. If your filter acts as an escaper (or explicitly outputs HTML +or JavaScript code), you will want the raw output to be printed. In such a +case, set the ``is_safe`` option:: + + $filter = new \Twig\TwigFilter('nl2br', 'nl2br', ['is_safe' => ['html']]); + +Some filters may need to work on input that is already escaped or safe, for +example when adding (safe) HTML tags to originally unsafe output. In such a +case, set the ``pre_escape`` option to escape the input data before it is run +through your filter:: + + $filter = new \Twig\TwigFilter('somefilter', 'somefilter', ['pre_escape' => 'html', 'is_safe' => ['html']]); + +Variadic Filters +~~~~~~~~~~~~~~~~ + +When a filter should accept an arbitrary number of arguments, set the +``is_variadic`` option to ``true``; Twig will pass the extra arguments as the +last argument to the filter call as an array:: + + $filter = new \Twig\TwigFilter('thumbnail', function ($file, array $options = []) { + // ... + }, ['is_variadic' => true]); + +Be warned that :ref:`named arguments ` passed to a variadic +filter cannot be checked for validity as they will automatically end up in the +option array. + +Dynamic Filters +~~~~~~~~~~~~~~~ + +A filter name containing the special ``*`` character is a dynamic filter and +the ``*`` part will match any string:: + + $filter = new \Twig\TwigFilter('*_path', function ($name, $arguments) { + // ... + }); + +The following filters are matched by the above defined dynamic filter: + +* ``product_path`` +* ``category_path`` + +A dynamic filter can define more than one dynamic parts:: + + $filter = new \Twig\TwigFilter('*_path_*', function ($name, $suffix, $arguments) { + // ... + }); + +The filter receives all dynamic part values before the normal filter arguments, +but after the environment and the context. For instance, a call to +``'foo'|a_path_b()`` will result in the following arguments to be passed to the +filter: ``('a', 'b', 'foo')``. + +Deprecated Filters +~~~~~~~~~~~~~~~~~~ + +You can mark a filter as being deprecated by setting the ``deprecated`` option +to ``true``. You can also give an alternative filter that replaces the +deprecated one when that makes sense:: + + $filter = new \Twig\TwigFilter('obsolete', function () { + // ... + }, ['deprecated' => true, 'alternative' => 'new_one']); + +When a filter is deprecated, Twig emits a deprecation notice when compiling a +template using it. See :ref:`deprecation-notices` for more information. + +Functions +--------- + +Functions are defined in the exact same way as filters, but you need to create +an instance of ``\Twig\TwigFunction``:: + + $twig = new \Twig\Environment($loader); + $function = new \Twig\TwigFunction('function_name', function () { + // ... + }); + $twig->addFunction($function); + +Functions support the same features as filters, except for the ``pre_escape`` +and ``preserves_safety`` options. + +Tests +----- + +Tests are defined in the exact same way as filters and functions, but you need +to create an instance of ``\Twig\TwigTest``:: + + $twig = new \Twig\Environment($loader); + $test = new \Twig\TwigTest('test_name', function () { + // ... + }); + $twig->addTest($test); + +Tests allow you to create custom application specific logic for evaluating +boolean conditions. As a simple example, let's create a Twig test that checks if +objects are 'red':: + + $twig = new \Twig\Environment($loader); + $test = new \Twig\TwigTest('red', function ($value) { + if (isset($value->color) && $value->color == 'red') { + return true; + } + if (isset($value->paint) && $value->paint == 'red') { + return true; + } + return false; + }); + $twig->addTest($test); + +Test functions must always return ``true``/``false``. + +When creating tests you can use the ``node_class`` option to provide custom test +compilation. This is useful if your test can be compiled into PHP primitives. +This is used by many of the tests built into Twig:: + + $twig = new \Twig\Environment($loader); + $test = new \Twig\TwigTest( + 'odd', + null, + ['node_class' => \Twig\Node\Expression\Test\OddTest::class]); + $twig->addTest($test); + + class Twig_Node_Expression_Test_Odd extends \Twig\Node\Expression\TestExpression + { + public function compile(\Twig\Compiler $compiler) + { + $compiler + ->raw('(') + ->subcompile($this->getNode('node')) + ->raw(' % 2 == 1') + ->raw(')') + ; + } + } + +The above example shows how you can create tests that use a node class. The node +class has access to one sub-node called ``node``. This sub-node contains the +value that is being tested. When the ``odd`` filter is used in code such as: + +.. code-block:: twig + + {% if my_value is odd %} + +The ``node`` sub-node will contain an expression of ``my_value``. Node-based +tests also have access to the ``arguments`` node. This node will contain the +various other arguments that have been provided to your test. + +If you want to pass a variable number of positional or named arguments to the +test, set the ``is_variadic`` option to ``true``. Tests support dynamic +names (see dynamic filters for the syntax). + +Tags +---- + +One of the most exciting features of a template engine like Twig is the +possibility to define new **language constructs**. This is also the most complex +feature as you need to understand how Twig's internals work. + +Most of the time though, a tag is not needed: + +* If your tag generates some output, use a **function** instead. + +* If your tag modifies some content and returns it, use a **filter** instead. + + For instance, if you want to create a tag that converts a Markdown formatted + text to HTML, create a ``markdown`` filter instead: + + .. code-block:: twig + + {{ '**markdown** text'|markdown }} + + If you want use this filter on large amounts of text, wrap it with the + :doc:`apply ` tag: + + .. code-block:: twig + + {% apply markdown %} + Title + ===== + + Much better than creating a tag as you can **compose** filters. + {% endapply %} + +* If your tag does not output anything, but only exists because of a side + effect, create a **function** that returns nothing and call it via the + :doc:`filter ` tag. + + For instance, if you want to create a tag that logs text, create a ``log`` + function instead and call it via the :doc:`do ` tag: + + .. code-block:: twig + + {% do log('Log some things') %} + +If you still want to create a tag for a new language construct, great! + +Let's create a ``set`` tag that allows the definition of simple variables from +within a template. The tag can be used like follows: + +.. code-block:: twig + + {% set name = "value" %} + + {{ name }} + + {# should output value #} + +.. note:: + + The ``set`` tag is part of the Core extension and as such is always + available. The built-in version is slightly more powerful and supports + multiple assignments by default. + +Three steps are needed to define a new tag: + +* Defining a Token Parser class (responsible for parsing the template code); + +* Defining a Node class (responsible for converting the parsed code to PHP); + +* Registering the tag. + +Registering a new tag +~~~~~~~~~~~~~~~~~~~~~ + +Add a tag by calling the ``addTokenParser`` method on the ``\Twig\Environment`` +instance:: + + $twig = new \Twig\Environment($loader); + $twig->addTokenParser(new Project_Set_TokenParser()); + +Defining a Token Parser +~~~~~~~~~~~~~~~~~~~~~~~ + +Now, let's see the actual code of this class:: + + class Project_Set_TokenParser extends \Twig\TokenParser\AbstractTokenParser + { + public function parse(\Twig\Token $token) + { + $parser = $this->parser; + $stream = $parser->getStream(); + + $name = $stream->expect(\Twig\Token::NAME_TYPE)->getValue(); + $stream->expect(\Twig\Token::OPERATOR_TYPE, '='); + $value = $parser->getExpressionParser()->parseExpression(); + $stream->expect(\Twig\Token::BLOCK_END_TYPE); + + return new Project_Set_Node($name, $value, $token->getLine(), $this->getTag()); + } + + public function getTag() + { + return 'set'; + } + } + +The ``getTag()`` method must return the tag we want to parse, here ``set``. + +The ``parse()`` method is invoked whenever the parser encounters a ``set`` +tag. It should return a ``\Twig\Node\Node`` instance that represents the node (the +``Project_Set_Node`` calls creating is explained in the next section). + +The parsing process is simplified thanks to a bunch of methods you can call +from the token stream (``$this->parser->getStream()``): + +* ``getCurrent()``: Gets the current token in the stream. + +* ``next()``: Moves to the next token in the stream, *but returns the old one*. + +* ``test($type)``, ``test($value)`` or ``test($type, $value)``: Determines whether + the current token is of a particular type or value (or both). The value may be an + array of several possible values. + +* ``expect($type[, $value[, $message]])``: If the current token isn't of the given + type/value a syntax error is thrown. Otherwise, if the type and value are correct, + the token is returned and the stream moves to the next token. + +* ``look()``: Looks at the next token without consuming it. + +Parsing expressions is done by calling the ``parseExpression()`` like we did for +the ``set`` tag. + +.. tip:: + + Reading the existing ``TokenParser`` classes is the best way to learn all + the nitty-gritty details of the parsing process. + +Defining a Node +~~~~~~~~~~~~~~~ + +The ``Project_Set_Node`` class itself is quite short:: + + class Project_Set_Node extends \Twig\Node\Node + { + public function __construct($name, \Twig\Node\Expression\AbstractExpression $value, $line, $tag = null) + { + parent::__construct(['value' => $value], ['name' => $name], $line, $tag); + } + + public function compile(\Twig\Compiler $compiler) + { + $compiler + ->addDebugInfo($this) + ->write('$context[\''.$this->getAttribute('name').'\'] = ') + ->subcompile($this->getNode('value')) + ->raw(";\n") + ; + } + } + +The compiler implements a fluid interface and provides methods that helps the +developer generate beautiful and readable PHP code: + +* ``subcompile()``: Compiles a node. + +* ``raw()``: Writes the given string as is. + +* ``write()``: Writes the given string by adding indentation at the beginning + of each line. + +* ``string()``: Writes a quoted string. + +* ``repr()``: Writes a PHP representation of a given value (see + ``\Twig\Node\ForNode`` for a usage example). + +* ``addDebugInfo()``: Adds the line of the original template file related to + the current node as a comment. + +* ``indent()``: Indents the generated code (see ``\Twig\Node\BlockNode`` for a + usage example). + +* ``outdent()``: Outdents the generated code (see ``\Twig\Node\BlockNode`` for a + usage example). + +.. _creating_extensions: + +Creating an Extension +--------------------- + +The main motivation for writing an extension is to move often used code into a +reusable class like adding support for internationalization. An extension can +define tags, filters, tests, operators, functions, and node visitors. + +Most of the time, it is useful to create a single extension for your project, +to host all the specific tags and filters you want to add to Twig. + +.. tip:: + + When packaging your code into an extension, Twig is smart enough to + recompile your templates whenever you make a change to it (when + ``auto_reload`` is enabled). + +An extension is a class that implements the following interface:: + + interface \Twig\Extension\ExtensionInterface + { + /** + * Returns the token parser instances to add to the existing list. + * + * @return \Twig\TokenParser\TokenParserInterface[] + */ + public function getTokenParsers(); + + /** + * Returns the node visitor instances to add to the existing list. + * + * @return \Twig\NodeVisitor\NodeVisitorInterface[] + */ + public function getNodeVisitors(); + + /** + * Returns a list of filters to add to the existing list. + * + * @return \Twig\TwigFilter[] + */ + public function getFilters(); + + /** + * Returns a list of tests to add to the existing list. + * + * @return \Twig\TwigTest[] + */ + public function getTests(); + + /** + * Returns a list of functions to add to the existing list. + * + * @return \Twig\TwigFunction[] + */ + public function getFunctions(); + + /** + * Returns a list of operators to add to the existing list. + * + * @return array First array of unary operators, second array of binary operators + */ + public function getOperators(); + } + +To keep your extension class clean and lean, inherit from the built-in +``\Twig\Extension\AbstractExtension`` class instead of implementing the interface as it provides +empty implementations for all methods:: + + class Project_Twig_Extension extends \Twig\Extension\AbstractExtension + { + } + +This extension does nothing for now. We will customize it in the next sections. + +You can save your extension anywhere on the filesystem, as all extensions must +be registered explicitly to be available in your templates. + +You can register an extension by using the ``addExtension()`` method on your +main ``Environment`` object:: + + $twig = new \Twig\Environment($loader); + $twig->addExtension(new Project_Twig_Extension()); + +.. tip:: + + The Twig core extensions are great examples of how extensions work. + +Globals +~~~~~~~ + +Global variables can be registered in an extension via the ``getGlobals()`` +method:: + + class Project_Twig_Extension extends \Twig\Extension\AbstractExtension implements \Twig\Extension\GlobalsInterface + { + public function getGlobals() + { + return [ + 'text' => new Text(), + ]; + } + + // ... + } + +Functions +~~~~~~~~~ + +Functions can be registered in an extension via the ``getFunctions()`` +method:: + + class Project_Twig_Extension extends \Twig\Extension\AbstractExtension + { + public function getFunctions() + { + return [ + new \Twig\TwigFunction('lipsum', 'generate_lipsum'), + ]; + } + + // ... + } + +Filters +~~~~~~~ + +To add a filter to an extension, you need to override the ``getFilters()`` +method. This method must return an array of filters to add to the Twig +environment:: + + class Project_Twig_Extension extends \Twig\Extension\AbstractExtension + { + public function getFilters() + { + return [ + new \Twig\TwigFilter('rot13', 'str_rot13'), + ]; + } + + // ... + } + +Tags +~~~~ + +Adding a tag in an extension can be done by overriding the +``getTokenParsers()`` method. This method must return an array of tags to add +to the Twig environment:: + + class Project_Twig_Extension extends \Twig\Extension\AbstractExtension + { + public function getTokenParsers() + { + return [new Project_Set_TokenParser()]; + } + + // ... + } + +In the above code, we have added a single new tag, defined by the +``Project_Set_TokenParser`` class. The ``Project_Set_TokenParser`` class is +responsible for parsing the tag and compiling it to PHP. + +Operators +~~~~~~~~~ + +The ``getOperators()`` methods lets you add new operators. Here is how to add +the ``!``, ``||``, and ``&&`` operators:: + + class Project_Twig_Extension extends \Twig\Extension\AbstractExtension + { + public function getOperators() + { + return [ + [ + '!' => ['precedence' => 50, 'class' => \Twig\Node\Expression\Unary\NotUnary::class], + ], + [ + '||' => ['precedence' => 10, 'class' => \Twig\Node\Expression\Binary\OrBinary::class, 'associativity' => \Twig\ExpressionParser::OPERATOR_LEFT], + '&&' => ['precedence' => 15, 'class' => \Twig\Node\Expression\Binary\AndBinary::class, 'associativity' => \Twig\ExpressionParser::OPERATOR_LEFT], + ], + ]; + } + + // ... + } + +Tests +~~~~~ + +The ``getTests()`` method lets you add new test functions:: + + class Project_Twig_Extension extends \Twig\Extension\AbstractExtension + { + public function getTests() + { + return [ + new \Twig\TwigTest('even', 'twig_test_even'), + ]; + } + + // ... + } + +Definition vs Runtime +~~~~~~~~~~~~~~~~~~~~~ + +Twig filters, functions, and tests runtime implementations can be defined as +any valid PHP callable: + +* **functions/static methods**: Simple to implement and fast (used by all Twig + core extensions); but it is hard for the runtime to depend on external + objects; + +* **closures**: Simple to implement; + +* **object methods**: More flexible and required if your runtime code depends + on external objects. + +The simplest way to use methods is to define them on the extension itself:: + + class Project_Twig_Extension extends \Twig\Extension\AbstractExtension + { + private $rot13Provider; + + public function __construct($rot13Provider) + { + $this->rot13Provider = $rot13Provider; + } + + public function getFunctions() + { + return [ + new \Twig\TwigFunction('rot13', [$this, 'rot13']), + ]; + } + + public function rot13($value) + { + return $this->rot13Provider->rot13($value); + } + } + +This is very convenient but not recommended as it makes template compilation +depend on runtime dependencies even if they are not needed (think for instance +as a dependency that connects to a database engine). + +You can decouple the extension definitions from their runtime implementations by +registering a ``\Twig\RuntimeLoader\RuntimeLoaderInterface`` instance on the +environment that knows how to instantiate such runtime classes (runtime classes +must be autoload-able):: + + class RuntimeLoader implements \Twig\RuntimeLoader\RuntimeLoaderInterface + { + public function load($class) + { + // implement the logic to create an instance of $class + // and inject its dependencies + // most of the time, it means using your dependency injection container + if ('Project_Twig_RuntimeExtension' === $class) { + return new $class(new Rot13Provider()); + } else { + // ... + } + } + } + + $twig->addRuntimeLoader(new RuntimeLoader()); + +.. note:: + + Twig comes with a PSR-11 compatible runtime loader + (``\Twig\RuntimeLoader\ContainerRuntimeLoader``). + +It is now possible to move the runtime logic to a new +``Project_Twig_RuntimeExtension`` class and use it directly in the extension:: + + class Project_Twig_RuntimeExtension + { + private $rot13Provider; + + public function __construct($rot13Provider) + { + $this->rot13Provider = $rot13Provider; + } + + public function rot13($value) + { + return $this->rot13Provider->rot13($value); + } + } + + class Project_Twig_Extension extends \Twig\Extension\AbstractExtension + { + public function getFunctions() + { + return [ + new \Twig\TwigFunction('rot13', ['Project_Twig_RuntimeExtension', 'rot13']), + // or + new \Twig\TwigFunction('rot13', 'Project_Twig_RuntimeExtension::rot13'), + ]; + } + } + +Testing an Extension +-------------------- + +Functional Tests +~~~~~~~~~~~~~~~~ + +You can create functional tests for extensions by creating the following file +structure in your test directory:: + + Fixtures/ + filters/ + foo.test + bar.test + functions/ + foo.test + bar.test + tags/ + foo.test + bar.test + IntegrationTest.php + +The ``IntegrationTest.php`` file should look like this:: + + class Project_Tests_IntegrationTest extends \Twig\Test\IntegrationTestCase + { + public function getExtensions() + { + return [ + new Project_Twig_Extension1(), + new Project_Twig_Extension2(), + ]; + } + + public function getFixturesDir() + { + return __DIR__.'/Fixtures/'; + } + } + +Fixtures examples can be found within the Twig repository +`tests/Twig/Fixtures`_ directory. + +Node Tests +~~~~~~~~~~ + +Testing the node visitors can be complex, so extend your test cases from +``\Twig\Test\NodeTestCase``. Examples can be found in the Twig repository +`tests/Twig/Node`_ directory. + +.. _`rot13`: https://secure.php.net/manual/en/function.str-rot13.php +.. _`tests/Twig/Fixtures`: https://github.com/twigphp/Twig/tree/3.x/tests/Fixtures +.. _`tests/Twig/Node`: https://github.com/twigphp/Twig/tree/3.x/tests/Node diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/api.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/api.rst new file mode 100644 index 0000000..0192b42 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/api.rst @@ -0,0 +1,586 @@ +Twig for Developers +=================== + +This chapter describes the API to Twig and not the template language. It will +be most useful as reference to those implementing the template interface to +the application and not those who are creating Twig templates. + +Basics +------ + +Twig uses a central object called the **environment** (of class +``\Twig\Environment``). Instances of this class are used to store the +configuration and extensions, and are used to load templates. + +Most applications create one ``\Twig\Environment`` object on application +initialization and use that to load templates. In some cases, it might be useful +to have multiple environments side by side, with different configurations. + +The typical way to configure Twig to load templates for an application looks +roughly like this:: + + require_once '/path/to/vendor/autoload.php'; + + $loader = new \Twig\Loader\FilesystemLoader('/path/to/templates'); + $twig = new \Twig\Environment($loader, [ + 'cache' => '/path/to/compilation_cache', + ]); + +This creates a template environment with a default configuration and a loader +that looks up templates in the ``/path/to/templates/`` directory. Different +loaders are available and you can also write your own if you want to load +templates from a database or other resources. + +.. note:: + + Notice that the second argument of the environment is an array of options. + The ``cache`` option is a compilation cache directory, where Twig caches + the compiled templates to avoid the parsing phase for sub-sequent + requests. It is very different from the cache you might want to add for + the evaluated templates. For such a need, you can use any available PHP + cache library. + +Rendering Templates +------------------- + +To load a template from a Twig environment, call the ``load()`` method which +returns a ``\Twig\TemplateWrapper`` instance:: + + $template = $twig->load('index.html'); + +To render the template with some variables, call the ``render()`` method:: + + echo $template->render(['the' => 'variables', 'go' => 'here']); + +.. note:: + + The ``display()`` method is a shortcut to output the rendered template. + +You can also load and render the template in one fell swoop:: + + echo $twig->render('index.html', ['the' => 'variables', 'go' => 'here']); + +If a template defines blocks, they can be rendered individually via the +``renderBlock()`` call:: + + echo $template->renderBlock('block_name', ['the' => 'variables', 'go' => 'here']); + +.. _environment_options: + +Environment Options +------------------- + +When creating a new ``\Twig\Environment`` instance, you can pass an array of +options as the constructor second argument:: + + $twig = new \Twig\Environment($loader, ['debug' => true]); + +The following options are available: + +* ``debug`` *boolean* + + When set to ``true``, the generated templates have a + ``__toString()`` method that you can use to display the generated nodes + (default to ``false``). + +* ``charset`` *string* (defaults to ``utf-8``) + + The charset used by the templates. + +* ``cache`` *string* or ``false`` + + An absolute path where to store the compiled templates, or + ``false`` to disable caching (which is the default). + +* ``auto_reload`` *boolean* + + When developing with Twig, it's useful to recompile the + template whenever the source code changes. If you don't provide a value for + the ``auto_reload`` option, it will be determined automatically based on the + ``debug`` value. + +* ``strict_variables`` *boolean* + + If set to ``false``, Twig will silently ignore invalid + variables (variables and or attributes/methods that do not exist) and + replace them with a ``null`` value. When set to ``true``, Twig throws an + exception instead (default to ``false``). + +* ``autoescape`` *string* + + Sets the default auto-escaping strategy (``name``, ``html``, ``js``, ``css``, + ``url``, ``html_attr``, or a PHP callback that takes the template "filename" + and returns the escaping strategy to use -- the callback cannot be a function + name to avoid collision with built-in escaping strategies); set it to + ``false`` to disable auto-escaping. The ``name`` escaping strategy determines + the escaping strategy to use for a template based on the template filename + extension (this strategy does not incur any overhead at runtime as + auto-escaping is done at compilation time.) + +* ``optimizations`` *integer* + + A flag that indicates which optimizations to apply + (default to ``-1`` -- all optimizations are enabled; set it to ``0`` to + disable). + +Loaders +------- + +Loaders are responsible for loading templates from a resource such as the file +system. + +Compilation Cache +~~~~~~~~~~~~~~~~~ + +All template loaders can cache the compiled templates on the filesystem for +future reuse. It speeds up Twig a lot as templates are only compiled once; and +the performance boost is even larger if you use a PHP accelerator such as +OPCache. See the ``cache`` and ``auto_reload`` options of ``\Twig\Environment`` +above for more information. + +Built-in Loaders +~~~~~~~~~~~~~~~~ + +Here is a list of the built-in loaders: + +``\Twig\Loader\FilesystemLoader`` +................................. + +``\Twig\Loader\FilesystemLoader`` loads templates from the file system. This loader +can find templates in folders on the file system and is the preferred way to +load them:: + + $loader = new \Twig\Loader\FilesystemLoader($templateDir); + +It can also look for templates in an array of directories:: + + $loader = new \Twig\Loader\FilesystemLoader([$templateDir1, $templateDir2]); + +With such a configuration, Twig will first look for templates in +``$templateDir1`` and if they do not exist, it will fallback to look for them +in the ``$templateDir2``. + +You can add or prepend paths via the ``addPath()`` and ``prependPath()`` +methods:: + + $loader->addPath($templateDir3); + $loader->prependPath($templateDir4); + +The filesystem loader also supports namespaced templates. This allows to group +your templates under different namespaces which have their own template paths. + +When using the ``setPaths()``, ``addPath()``, and ``prependPath()`` methods, +specify the namespace as the second argument (when not specified, these +methods act on the "main" namespace):: + + $loader->addPath($templateDir, 'admin'); + +Namespaced templates can be accessed via the special +``@namespace_name/template_path`` notation:: + + $twig->render('@admin/index.html', []); + +``\Twig\Loader\FilesystemLoader`` support absolute and relative paths. Using relative +paths is preferred as it makes the cache keys independent of the project root +directory (for instance, it allows warming the cache from a build server where +the directory might be different from the one used on production servers):: + + $loader = new \Twig\Loader\FilesystemLoader('templates', getcwd().'/..'); + +.. note:: + + When not passing the root path as a second argument, Twig uses ``getcwd()`` + for relative paths. + +``\Twig\Loader\ArrayLoader`` +............................ + +``\Twig\Loader\ArrayLoader`` loads a template from a PHP array. It is passed an +array of strings bound to template names:: + + $loader = new \Twig\Loader\ArrayLoader([ + 'index.html' => 'Hello {{ name }}!', + ]); + $twig = new \Twig\Environment($loader); + + echo $twig->render('index.html', ['name' => 'Fabien']); + +This loader is very useful for unit testing. It can also be used for small +projects where storing all templates in a single PHP file might make sense. + +.. tip:: + + When using the ``Array`` loader with a cache mechanism, you should know that + a new cache key is generated each time a template content "changes" (the + cache key being the source code of the template). If you don't want to see + your cache grows out of control, you need to take care of clearing the old + cache file by yourself. + +``\Twig\Loader\ChainLoader`` +............................ + +``\Twig\Loader\ChainLoader`` delegates the loading of templates to other loaders:: + + $loader1 = new \Twig\Loader\ArrayLoader([ + 'base.html' => '{% block content %}{% endblock %}', + ]); + $loader2 = new \Twig\Loader\ArrayLoader([ + 'index.html' => '{% extends "base.html" %}{% block content %}Hello {{ name }}{% endblock %}', + 'base.html' => 'Will never be loaded', + ]); + + $loader = new \Twig\Loader\ChainLoader([$loader1, $loader2]); + + $twig = new \Twig\Environment($loader); + +When looking for a template, Twig tries each loader in turn and returns as soon +as the template is found. When rendering the ``index.html`` template from the +above example, Twig will load it with ``$loader2`` but the ``base.html`` +template will be loaded from ``$loader1``. + +.. note:: + + You can also add loaders via the ``addLoader()`` method. + +Create your own Loader +~~~~~~~~~~~~~~~~~~~~~~ + +All loaders implement the ``\Twig\Loader\LoaderInterface``:: + + interface \Twig\Loader\LoaderInterface + { + /** + * Returns the source context for a given template logical name. + * + * @param string $name The template logical name + * + * @return \Twig\Source + * + * @throws \Twig\Error\LoaderError When $name is not found + */ + public function getSourceContext($name); + + /** + * Gets the cache key to use for the cache for a given template name. + * + * @param string $name The name of the template to load + * + * @return string The cache key + * + * @throws \Twig\Error\LoaderError When $name is not found + */ + public function getCacheKey($name); + + /** + * Returns true if the template is still fresh. + * + * @param string $name The template name + * @param timestamp $time The last modification time of the cached template + * + * @return bool true if the template is fresh, false otherwise + * + * @throws \Twig\Error\LoaderError When $name is not found + */ + public function isFresh($name, $time); + + /** + * Check if we have the source code of a template, given its name. + * + * @param string $name The name of the template to check if we can load + * + * @return bool If the template source code is handled by this loader or not + */ + public function exists($name); + } + +The ``isFresh()`` method must return ``true`` if the current cached template +is still fresh, given the last modification time, or ``false`` otherwise. + +The ``getSourceContext()`` method must return an instance of ``\Twig\Source``. + +Using Extensions +---------------- + +Twig extensions are packages that add new features to Twig. Register an +extension via the ``addExtension()`` method:: + + $twig->addExtension(new \Twig\Extension\SandboxExtension()); + +Twig comes bundled with the following extensions: + +* *Twig\Extension\CoreExtension*: Defines all the core features of Twig. + +* *Twig\Extension\DebugExtension*: Defines the ``dump`` function to help debug + template variables. + +* *Twig\Extension\EscaperExtension*: Adds automatic output-escaping and the + possibility to escape/unescape blocks of code. + +* *Twig\Extension\SandboxExtension*: Adds a sandbox mode to the default Twig + environment, making it safe to evaluate untrusted code. + +* *Twig\Extension\ProfilerExtension*: Enabled the built-in Twig profiler. + +* *Twig\Extension\OptimizerExtension*: Optimizes the node tree before + compilation. + +* *Twig\Extension\StringLoaderExtension*: Defined the ``template_from_string`` + function to allow loading templates from string in a template. + +The Core, Escaper, and Optimizer extensions are registered by default. + +Built-in Extensions +------------------- + +This section describes the features added by the built-in extensions. + +.. tip:: + + Read the chapter about :doc:`extending Twig ` to learn how to + create your own extensions. + +Core Extension +~~~~~~~~~~~~~~ + +The ``core`` extension defines all the core features of Twig: + +* :doc:`Tags `; +* :doc:`Filters `; +* :doc:`Functions `; +* :doc:`Tests `. + +Escaper Extension +~~~~~~~~~~~~~~~~~ + +The ``escaper`` extension adds automatic output escaping to Twig. It defines a +tag, ``autoescape``, and a filter, ``raw``. + +When creating the escaper extension, you can switch on or off the global +output escaping strategy:: + + $escaper = new \Twig\Extension\EscaperExtension('html'); + $twig->addExtension($escaper); + +If set to ``html``, all variables in templates are escaped (using the ``html`` +escaping strategy), except those using the ``raw`` filter: + +.. code-block:: twig + + {{ article.to_html|raw }} + +You can also change the escaping mode locally by using the ``autoescape`` tag: + +.. code-block:: twig + + {% autoescape 'html' %} + {{ var }} + {{ var|raw }} {# var won't be escaped #} + {{ var|escape }} {# var won't be double-escaped #} + {% endautoescape %} + +.. warning:: + + The ``autoescape`` tag has no effect on included files. + +The escaping rules are implemented as follows: + +* Literals (integers, booleans, arrays, ...) used in the template directly as + variables or filter arguments are never automatically escaped: + + .. code-block:: twig + + {{ "Twig
" }} {# won't be escaped #} + + {% set text = "Twig
" %} + {{ text }} {# will be escaped #} + +* Expressions which the result is a literal or a variable marked safe + are never automatically escaped: + + .. code-block:: twig + + {{ foo ? "Twig
" : "
Twig" }} {# won't be escaped #} + + {% set text = "Twig
" %} + {{ true ? text : "
Twig" }} {# will be escaped #} + {{ false ? text : "
Twig" }} {# won't be escaped #} + + {% set text = "Twig
" %} + {{ foo ? text|raw : "
Twig" }} {# won't be escaped #} + +* Objects with a ``__toString`` method are converted to strings and + escaped. You can mark some classes and/or interfaces as being safe for some + strategies via ``EscaperExtension::addSafeClass()``: + + .. code-block:: twig + + // mark object of class Foo as safe for the HTML strategy + $escaper->addSafeClass('Foo', ['html']); + + // mark object of interface Foo as safe for the HTML strategy + $escaper->addSafeClass('FooInterface', ['html']); + + // mark object of class Foo as safe for the HTML and JS strategies + $escaper->addSafeClass('Foo', ['html', 'js']); + + // mark object of class Foo as safe for all strategies + $escaper->addSafeClass('Foo', ['all']); + +* Escaping is applied before printing, after any other filter is applied: + + .. code-block:: twig + + {{ var|upper }} {# is equivalent to {{ var|upper|escape }} #} + +* The `raw` filter should only be used at the end of the filter chain: + + .. code-block:: twig + + {{ var|raw|upper }} {# will be escaped #} + + {{ var|upper|raw }} {# won't be escaped #} + +* Automatic escaping is not applied if the last filter in the chain is marked + safe for the current context (e.g. ``html`` or ``js``). ``escape`` and + ``escape('html')`` are marked safe for HTML, ``escape('js')`` is marked + safe for JavaScript, ``raw`` is marked safe for everything. + + .. code-block:: twig + + {% autoescape 'js' %} + {{ var|escape('html') }} {# will be escaped for HTML and JavaScript #} + {{ var }} {# will be escaped for JavaScript #} + {{ var|escape('js') }} {# won't be double-escaped #} + {% endautoescape %} + +.. note:: + + Note that autoescaping has some limitations as escaping is applied on + expressions after evaluation. For instance, when working with + concatenation, ``{{ foo|raw ~ bar }}`` won't give the expected result as + escaping is applied on the result of the concatenation, not on the + individual variables (so, the ``raw`` filter won't have any effect here). + +Sandbox Extension +~~~~~~~~~~~~~~~~~ + +The ``sandbox`` extension can be used to evaluate untrusted code. Access to +unsafe attributes and methods is prohibited. The sandbox security is managed +by a policy instance. By default, Twig comes with one policy class: +``\Twig\Sandbox\SecurityPolicy``. This class allows you to white-list some +tags, filters, properties, and methods:: + + $tags = ['if']; + $filters = ['upper']; + $methods = [ + 'Article' => ['getTitle', 'getBody'], + ]; + $properties = [ + 'Article' => ['title', 'body'], + ]; + $functions = ['range']; + $policy = new \Twig\Sandbox\SecurityPolicy($tags, $filters, $methods, $properties, $functions); + +With the previous configuration, the security policy will only allow usage of +the ``if`` tag, and the ``upper`` filter. Moreover, the templates will only be +able to call the ``getTitle()`` and ``getBody()`` methods on ``Article`` +objects, and the ``title`` and ``body`` public properties. Everything else +won't be allowed and will generate a ``\Twig\Sandbox\SecurityError`` exception. + +The policy object is the first argument of the sandbox constructor:: + + $sandbox = new \Twig\Extension\SandboxExtension($policy); + $twig->addExtension($sandbox); + +By default, the sandbox mode is disabled and should be enabled when including +untrusted template code by using the ``sandbox`` tag: + +.. code-block:: twig + + {% sandbox %} + {% include 'user.html' %} + {% endsandbox %} + +You can sandbox all templates by passing ``true`` as the second argument of +the extension constructor:: + + $sandbox = new \Twig\Extension\SandboxExtension($policy, true); + +Profiler Extension +~~~~~~~~~~~~~~~~~~ + +The ``profiler`` extension enables a profiler for Twig templates; it should +only be used on your development machines as it adds some overhead:: + + $profile = new \Twig\Profiler\Profile(); + $twig->addExtension(new \Twig\Extension\ProfilerExtension($profile)); + + $dumper = new \Twig\Profiler\Dumper\TextDumper(); + echo $dumper->dump($profile); + +A profile contains information about time and memory consumption for template, +block, and macro executions. + +You can also dump the data in a `Blackfire.io `_ +compatible format:: + + $dumper = new \Twig\Profiler\Dumper\BlackfireDumper(); + file_put_contents('/path/to/profile.prof', $dumper->dump($profile)); + +Upload the profile to visualize it (create a `free account +`_ +first): + +.. code-block:: sh + + blackfire --slot=7 upload /path/to/profile.prof + +Optimizer Extension +~~~~~~~~~~~~~~~~~~~ + +The ``optimizer`` extension optimizes the node tree before compilation:: + + $twig->addExtension(new \Twig\Extension\OptimizerExtension()); + +By default, all optimizations are turned on. You can select the ones you want +to enable by passing them to the constructor:: + + $optimizer = new \Twig\Extension\OptimizerExtension(\Twig\NodeVisitor\OptimizerNodeVisitor::OPTIMIZE_FOR); + + $twig->addExtension($optimizer); + +Twig supports the following optimizations: + +* ``\Twig\NodeVisitor\OptimizerNodeVisitor::OPTIMIZE_ALL``, enables all optimizations + (this is the default value). + +* ``\Twig\NodeVisitor\OptimizerNodeVisitor::OPTIMIZE_NONE``, disables all optimizations. + This reduces the compilation time, but it can increase the execution time + and the consumed memory. + +* ``\Twig\NodeVisitor\OptimizerNodeVisitor::OPTIMIZE_FOR``, optimizes the ``for`` tag by + removing the ``loop`` variable creation whenever possible. + +* ``\Twig\NodeVisitor\OptimizerNodeVisitor::OPTIMIZE_RAW_FILTER``, removes the ``raw`` + filter whenever possible. + +* ``\Twig\NodeVisitor\OptimizerNodeVisitor::OPTIMIZE_VAR_ACCESS``, simplifies the creation + and access of variables in the compiled templates whenever possible. + +Exceptions +---------- + +Twig can throw exceptions: + +* ``\Twig\Error\Error``: The base exception for all errors. + +* ``\Twig\Error\SyntaxError``: Thrown to tell the user that there is a problem with + the template syntax. + +* ``\Twig\Error\RuntimeError``: Thrown when an error occurs at runtime (when a filter + does not exist for instance). + +* ``\Twig\Error\LoaderError``: Thrown when an error occurs during template loading. + +* ``\Twig\Sandbox\SecurityError``: Thrown when an unallowed tag, filter, or + method is called in a sandboxed template. diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/coding_standards.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/coding_standards.rst new file mode 100644 index 0000000..721b0f1 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/coding_standards.rst @@ -0,0 +1,101 @@ +Coding Standards +================ + +When writing Twig templates, we recommend you to follow these official coding +standards: + +* Put one (and only one) space after the start of a delimiter (``{{``, ``{%``, + and ``{#``) and before the end of a delimiter (``}}``, ``%}``, and ``#}``): + + .. code-block:: twig + + {{ foo }} + {# comment #} + {% if foo %}{% endif %} + + When using the whitespace control character, do not put any spaces between + it and the delimiter: + + .. code-block:: twig + + {{- foo -}} + {#- comment -#} + {%- if foo -%}{%- endif -%} + +* Put one (and only one) space before and after the following operators: + comparison operators (``==``, ``!=``, ``<``, ``>``, ``>=``, ``<=``), math + operators (``+``, ``-``, ``/``, ``*``, ``%``, ``//``, ``**``), logic + operators (``not``, ``and``, ``or``), ``~``, ``is``, ``in``, and the ternary + operator (``?:``): + + .. code-block:: twig + + {{ 1 + 2 }} + {{ foo ~ bar }} + {{ true ? true : false }} + +* Put one (and only one) space after the ``:`` sign in hashes and ``,`` in + arrays and hashes: + + .. code-block:: twig + + {{ [1, 2, 3] }} + {{ {'foo': 'bar'} }} + +* Do not put any spaces after an opening parenthesis and before a closing + parenthesis in expressions: + + .. code-block:: twig + + {{ 1 + (2 * 3) }} + +* Do not put any spaces before and after string delimiters: + + .. code-block:: twig + + {{ 'foo' }} + {{ "foo" }} + +* Do not put any spaces before and after the following operators: ``|``, + ``.``, ``..``, ``[]``: + + .. code-block:: twig + + {{ foo|upper|lower }} + {{ user.name }} + {{ user[name] }} + {% for i in 1..12 %}{% endfor %} + +* Do not put any spaces before and after the parenthesis used for filter and + function calls: + + .. code-block:: twig + + {{ foo|default('foo') }} + {{ range(1..10) }} + +* Do not put any spaces before and after the opening and the closing of arrays + and hashes: + + .. code-block:: twig + + {{ [1, 2, 3] }} + {{ {'foo': 'bar'} }} + +* Use lower cased and underscored variable names: + + .. code-block:: twig + + {% set foo = 'foo' %} + {% set foo_bar = 'foo' %} + +* Indent your code inside tags (use the same indentation as the one used for + the target language of the rendered template): + + .. code-block:: twig + + {% block foo %} + {% if true %} + true + {% endif %} + {% endblock %} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/deprecated.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/deprecated.rst new file mode 100644 index 0000000..ac22338 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/deprecated.rst @@ -0,0 +1,6 @@ +Deprecated Features +=================== + +This document lists deprecated features in Twig 3.x. Deprecated features are +kept for backward compatibility and removed in the next major release (a +feature that was deprecated in Twig 3.x is removed in Twig 4.0). diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/abs.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/abs.rst new file mode 100644 index 0000000..77d5cf0 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/abs.rst @@ -0,0 +1,18 @@ +``abs`` +======= + +The ``abs`` filter returns the absolute value. + +.. code-block:: twig + + {# number = -5 #} + + {{ number|abs }} + + {# outputs 5 #} + +.. note:: + + Internally, Twig uses the PHP `abs`_ function. + +.. _`abs`: https://secure.php.net/abs diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/batch.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/batch.rst new file mode 100644 index 0000000..7d33149 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/batch.rst @@ -0,0 +1,49 @@ +``batch`` +========= + +The ``batch`` filter "batches" items by returning a list of lists with the +given number of items. A second parameter can be provided and used to fill in +missing items: + +.. code-block:: twig + + {% set items = ['a', 'b', 'c', 'd', 'e', 'f', 'g'] %} + + + {% for row in items|batch(3, 'No item') %} + + {% for column in row %} + + {% endfor %} + + {% endfor %} +
{{ column }}
+ +The above example will be rendered as: + +.. code-block:: twig + + + + + + + + + + + + + + + + + +
abc
def
gNo itemNo item
+ +Arguments +--------- + +* ``size``: The size of the batch; fractional numbers will be rounded up +* ``fill``: Used to fill in missing items +* ``preserve_keys``: Whether to preserve keys or not diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/capitalize.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/capitalize.rst new file mode 100644 index 0000000..2353658 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/capitalize.rst @@ -0,0 +1,11 @@ +``capitalize`` +============== + +The ``capitalize`` filter capitalizes a value. The first character will be +uppercase, all others lowercase: + +.. code-block:: twig + + {{ 'my first car'|capitalize }} + + {# outputs 'My first car' #} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/column.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/column.rst new file mode 100644 index 0000000..5b6769b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/column.rst @@ -0,0 +1,24 @@ +``column`` +========== + +The ``column`` filter returns the values from a single column in the input +array. + +.. code-block:: twig + + {% set items = [{ 'fruit' : 'apple'}, {'fruit' : 'orange' }] %} + + {% set fruits = items|column('fruit') %} + + {# fruits now contains ['apple', 'orange'] #} + +.. note:: + + Internally, Twig uses the PHP `array_column`_ function. + +Arguments +--------- + +* ``name``: The column name to extract + +.. _`array_column`: https://secure.php.net/array_column diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/convert_encoding.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/convert_encoding.rst new file mode 100644 index 0000000..d977c75 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/convert_encoding.rst @@ -0,0 +1,22 @@ +``convert_encoding`` +==================== + +The ``convert_encoding`` filter converts a string from one encoding to +another. The first argument is the expected output charset and the second one +is the input charset: + +.. code-block:: twig + + {{ data|convert_encoding('UTF-8', 'iso-2022-jp') }} + +.. note:: + + This filter relies on the `iconv`_ extension. + +Arguments +--------- + +* ``to``: The output charset +* ``from``: The input charset + +.. _`iconv`: https://secure.php.net/iconv diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/country_name.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/country_name.rst new file mode 100644 index 0000000..5c29655 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/country_name.rst @@ -0,0 +1,39 @@ +``country_name`` +================ + +The ``country_name`` filter returns the country name given its ISO-3166 +two-letter code: + +.. code-block:: twig + + {# France #} + {{ 'FR'|country_name }} + +By default, the filter uses the current locale. You can pass it explicitly: + +.. code-block:: twig + + {# États-Unis #} + {{ 'US'|country_name('fr') }} + +.. note:: + + The ``country_name`` filter is part of the ``IntlExtension`` which is not + installed by default. Install it first: + + .. code-block:: bash + + $ composer req twig/intl-extra + + Then, use the ``twig/extra-bundle`` on Symfony projects or add the extension + explictly on the Twig environment:: + + use Twig\Extra\Intl\IntlExtension; + + $twig = new \Twig\Environment(...); + $twig->addExtension(new IntlExtension()); + +Arguments +--------- + +* ``locale``: The locale diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/currency_name.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/currency_name.rst new file mode 100644 index 0000000..f7f8897 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/currency_name.rst @@ -0,0 +1,42 @@ +``currency_name`` +================= + +The ``currency_name`` filter returns the currency name given its three-letter +code: + +.. code-block:: twig + + {# Euro #} + {{ 'EUR'|currency_name }} + + {# Japanese Yen #} + {{ 'JPY'|currency_name }} + +By default, the filter uses the current locale. You can pass it explicitly: + +.. code-block:: twig + + {# yen japonais #} + {{ 'JPY'|currency_name('fr_FR') }} + +.. note:: + + The ``currency_name`` filter is part of the ``IntlExtension`` which is not + installed by default. Install it first: + + .. code-block:: bash + + $ composer req twig/intl-extra + + Then, use the ``twig/extra-bundle`` on Symfony projects or add the extension + explictly on the Twig environment:: + + use Twig\Extra\Intl\IntlExtension; + + $twig = new \Twig\Environment(...); + $twig->addExtension(new IntlExtension()); + +Arguments +--------- + +* ``locale``: The locale diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/currency_symbol.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/currency_symbol.rst new file mode 100644 index 0000000..94ed616 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/currency_symbol.rst @@ -0,0 +1,42 @@ +``currency_symbol`` +=================== + +The ``currency_symbol`` filter returns the currency symbol given its three-letter +code: + +.. code-block:: twig + + {# € #} + {{ 'EUR'|currency_symbol }} + + {# ¥ #} + {{ 'JPY'|currency_symbol }} + +By default, the filter uses the current locale. You can pass it explicitly: + +.. code-block:: twig + + {# ¥ #} + {{ 'JPY'|currency_symbol('fr') }} + +.. note:: + + The ``currency_symbol`` filter is part of the ``IntlExtension`` which is not + installed by default. Install it first: + + .. code-block:: bash + + $ composer req twig/intl-extra + + Then, use the ``twig/extra-bundle`` on Symfony projects or add the extension + explictly on the Twig environment:: + + use Twig\Extra\Intl\IntlExtension; + + $twig = new \Twig\Environment(...); + $twig->addExtension(new IntlExtension()); + +Arguments +--------- + +* ``locale``: The locale diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/data_uri.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/data_uri.rst new file mode 100644 index 0000000..8f4be8d --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/data_uri.rst @@ -0,0 +1,48 @@ +``data_uri`` +============ + +The ``data_uri`` filter generates a URL using the data scheme as defined in RFC +2397: + +.. code-block:: twig + + {{ image_data|data_uri }} + + {{ source('path_to_image')|data_uri }} + + {# force the mime type, disable the guessing of the mime type #} + {{ image_data|data_uri(mime="image/svg") }} + + {# also works with plain text #} + {{ 'foobar'|data_uri(mime="text/html") }} + + {# add some extra parameters #} + {{ 'foobar'|data_uri(mime="text/html", parameters={charset: "ascii"}) }} + +.. note:: + + The ``data_uri`` filter is part of the ``HtmlExtension`` which is not + installed by default. Install it first: + + .. code-block:: bash + + $ composer req twig/html-extra + + Then, use the ``twig/extra-bundle`` on Symfony projects or add the extension + explictly on the Twig environment:: + + use Twig\Extra\Html\HtmlExtension; + + $twig = new \Twig\Environment(...); + $twig->addExtension(new HtmlExtension()); + +.. note:: + + The filter does not perform any length validation on purpose (limits depends + on the usage context), validation should be done before calling this filter. + +Arguments +--------- + +* ``mime``: The mime type +* ``parameters``: An array of parameters diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/date.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/date.rst new file mode 100644 index 0000000..95a1cbf --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/date.rst @@ -0,0 +1,82 @@ +``date`` +======== + +The ``date`` filter formats a date to a given format: + +.. code-block:: twig + + {{ post.published_at|date("m/d/Y") }} + +The format specifier is the same as supported by `date`_, +except when the filtered data is of type `DateInterval`_, when the format must conform to +`DateInterval::format`_ instead. + +The ``date`` filter accepts strings (it must be in a format supported by the +`strtotime`_ function), `DateTime`_ instances, or `DateInterval`_ instances. For +instance, to display the current date, filter the word "now": + +.. code-block:: twig + + {{ "now"|date("m/d/Y") }} + +To escape words and characters in the date format use ``\\`` in front of each +character: + +.. code-block:: twig + + {{ post.published_at|date("F jS \\a\\t g:ia") }} + +If the value passed to the ``date`` filter is ``null``, it will return the +current date by default. If an empty string is desired instead of the current +date, use a ternary operator: + +.. code-block:: twig + + {{ post.published_at is empty ? "" : post.published_at|date("m/d/Y") }} + +If no format is provided, Twig will use the default one: ``F j, Y H:i``. This +default can be changed by calling the ``setDateFormat()`` method on the +``core`` extension instance. The first argument is the default format for +dates and the second one is the default format for date intervals: + +.. code-block:: php + + $twig = new \Twig\Environment($loader); + $twig->getExtension(\Twig\Extension\CoreExtension::class)->setDateFormat('d/m/Y', '%d days'); + +Timezone +-------- + +By default, the date is displayed by applying the default timezone (the one +specified in php.ini or declared in Twig -- see below), but you can override +it by explicitly specifying a timezone: + +.. code-block:: twig + + {{ post.published_at|date("m/d/Y", "Europe/Paris") }} + +If the date is already a DateTime object, and if you want to keep its current +timezone, pass ``false`` as the timezone value: + +.. code-block:: twig + + {{ post.published_at|date("m/d/Y", false) }} + +The default timezone can also be set globally by calling ``setTimezone()``: + +.. code-block:: php + + $twig = new \Twig\Environment($loader); + $twig->getExtension(\Twig\Extension\CoreExtension::class)->setTimezone('Europe/Paris'); + +Arguments +--------- + +* ``format``: The date format +* ``timezone``: The date timezone + +.. _`strtotime`: https://secure.php.net/strtotime +.. _`DateTime`: https://secure.php.net/DateTime +.. _`DateInterval`: https://secure.php.net/DateInterval +.. _`date`: https://secure.php.net/date +.. _`DateInterval::format`: https://secure.php.net/DateInterval.format diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/date_modify.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/date_modify.rst new file mode 100644 index 0000000..cc5d6df --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/date_modify.rst @@ -0,0 +1,20 @@ +``date_modify`` +=============== + +The ``date_modify`` filter modifies a date with a given modifier string: + +.. code-block:: twig + + {{ post.published_at|date_modify("+1 day")|date("m/d/Y") }} + +The ``date_modify`` filter accepts strings (it must be in a format supported +by the `strtotime`_ function) or `DateTime`_ instances. You can combine +it with the :doc:`date` filter for formatting. + +Arguments +--------- + +* ``modifier``: The modifier + +.. _`strtotime`: https://secure.php.net/strtotime +.. _`DateTime`: https://secure.php.net/DateTime diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/default.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/default.rst new file mode 100644 index 0000000..c4ccb56 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/default.rst @@ -0,0 +1,33 @@ +``default`` +=========== + +The ``default`` filter returns the passed default value if the value is +undefined or empty, otherwise the value of the variable: + +.. code-block:: twig + + {{ var|default('var is not defined') }} + + {{ var.foo|default('foo item on var is not defined') }} + + {{ var['foo']|default('foo item on var is not defined') }} + + {{ ''|default('passed var is empty') }} + +When using the ``default`` filter on an expression that uses variables in some +method calls, be sure to use the ``default`` filter whenever a variable can be +undefined: + +.. code-block:: twig + + {{ var.method(foo|default('foo'))|default('foo') }} + +.. note:: + + Read the documentation for the :doc:`defined<../tests/defined>` and + :doc:`empty<../tests/empty>` tests to learn more about their semantics. + +Arguments +--------- + +* ``default``: The default value diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/escape.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/escape.rst new file mode 100644 index 0000000..7c654ab --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/escape.rst @@ -0,0 +1,119 @@ +``escape`` +========== + +The ``escape`` filter escapes a string using strategies that depend on the +context. + +By default, it uses the HTML escaping strategy: + +.. code-block:: html+twig + +

+ {{ user.username|escape }} +

+ +For convenience, the ``e`` filter is defined as an alias: + +.. code-block:: html+twig + +

+ {{ user.username|e }} +

+ +The ``escape`` filter can also be used in other contexts than HTML thanks to +an optional argument which defines the escaping strategy to use: + +.. code-block:: twig + + {{ user.username|e }} + {# is equivalent to #} + {{ user.username|e('html') }} + +And here is how to escape variables included in JavaScript code: + +.. code-block:: twig + + {{ user.username|escape('js') }} + {{ user.username|e('js') }} + +The ``escape`` filter supports the following escaping strategies for HTML +documents: + +* ``html``: escapes a string for the **HTML body** context. + +* ``js``: escapes a string for the **JavaScript** context. + +* ``css``: escapes a string for the **CSS** context. CSS escaping can be + applied to any string being inserted into CSS and escapes everything except + alphanumerics. + +* ``url``: escapes a string for the **URI or parameter** contexts. This should + not be used to escape an entire URI; only a subcomponent being inserted. + +* ``html_attr``: escapes a string for the **HTML attribute** context. + +Note that doing contextual escaping in HTML documents is hard and choosing the +right escaping strategy depends on a lot of factors. Please, read related +documentation like `the OWASP prevention cheat sheet +`_ +to learn more about this topic. + +.. note:: + + Internally, ``escape`` uses the PHP native `htmlspecialchars`_ function + for the HTML escaping strategy. + +.. caution:: + + When using automatic escaping, Twig tries to not double-escape a variable + when the automatic escaping strategy is the same as the one applied by the + escape filter; but that does not work when using a variable as the + escaping strategy: + + .. code-block:: twig + + {% set strategy = 'html' %} + + {% autoescape 'html' %} + {{ var|escape('html') }} {# won't be double-escaped #} + {{ var|escape(strategy) }} {# will be double-escaped #} + {% endautoescape %} + + When using a variable as the escaping strategy, you should disable + automatic escaping: + + .. code-block:: twig + + {% set strategy = 'html' %} + + {% autoescape 'html' %} + {{ var|escape(strategy)|raw }} {# won't be double-escaped #} + {% endautoescape %} + +Custom Escapers +--------------- + +You can define custom escapers by calling the ``setEscaper()`` method on the +``core`` extension instance. The first argument is the escaper name (to be +used in the ``escape`` call) and the second one must be a valid PHP callable: + +.. code-block:: php + + $twig = new \Twig\Environment($loader); + $twig->getExtension(\Twig\Extension\CoreExtension::class)->setEscaper('csv', 'csv_escaper'); + +When called by Twig, the callable receives the Twig environment instance, the +string to escape, and the charset. + +.. note:: + + Built-in escapers cannot be overridden mainly because they should be + considered as the final implementation and also for better performance. + +Arguments +--------- + +* ``strategy``: The escaping strategy +* ``charset``: The string charset + +.. _`htmlspecialchars`: https://secure.php.net/htmlspecialchars diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/filter.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/filter.rst new file mode 100644 index 0000000..257421f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/filter.rst @@ -0,0 +1,55 @@ +``filter`` +========== + +The ``filter`` filter filters elements of a sequence or a mapping using an arrow +function. The arrow function receives the value of the sequence or mapping: + +.. code-block:: twig + + {% set sizes = [34, 36, 38, 40, 42] %} + + {{ sizes|filter(v => v > 38)|join(', ') }} + {# output 40, 42 #} + +Combined with the ``for`` tag, it allows to filter the items to iterate over: + +.. code-block:: twig + + {% for v in sizes|filter(v => v > 38) -%} + {{ v }} + {% endfor %} + {# output 40 42 #} + +It also works with mappings: + +.. code-block:: twig + + {% set sizes = { + xs: 34, + s: 36, + m: 38, + l: 40, + xl: 42, + } %} + + {% for k, v in sizes|filter(v => v > 38) -%} + {{ k }} = {{ v }} + {% endfor %} + {# output l = 40 xl = 42 #} + +The arrow function also receives the key as a second argument: + +.. code-block:: twig + + {% for k, v in sizes|filter((v, k) => v > 38 and k != "xl") -%} + {{ k }} = {{ v }} + {% endfor %} + {# output l = 40 #} + +Note that the arrow function has access to the current context. + +Arguments +--------- + +* ``array``: The sequence or mapping +* ``arrow``: The arrow function diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/first.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/first.rst new file mode 100644 index 0000000..8d7081a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/first.rst @@ -0,0 +1,22 @@ +``first`` +========= + +The ``first`` filter returns the first "element" of a sequence, a mapping, or +a string: + +.. code-block:: twig + + {{ [1, 2, 3, 4]|first }} + {# outputs 1 #} + + {{ { a: 1, b: 2, c: 3, d: 4 }|first }} + {# outputs 1 #} + + {{ '1234'|first }} + {# outputs 1 #} + +.. note:: + + It also works with objects implementing the `Traversable`_ interface. + +.. _`Traversable`: https://secure.php.net/manual/en/class.traversable.php diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/format.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/format.rst new file mode 100644 index 0000000..c0c96ee --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/format.rst @@ -0,0 +1,16 @@ +``format`` +========== + +The ``format`` filter formats a given string by replacing the placeholders +(placeholders follows the `sprintf`_ notation): + +.. code-block:: twig + + {{ "I like %s and %s."|format(foo, "bar") }} + + {# outputs I like foo and bar + if the foo parameter equals to the foo string. #} + +.. _`sprintf`: https://secure.php.net/sprintf + +.. seealso:: :doc:`replace` diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/format_currency.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/format_currency.rst new file mode 100644 index 0000000..86f8431 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/format_currency.rst @@ -0,0 +1,72 @@ +``format_currency`` +=================== + +The ``format_currency`` filter formats a number as a currency: + +.. code-block:: twig + + {# €1,000,000.00 #} + {{ '1000000'|format_currency('EUR') }} + +You can pass attributes to tweak the output: + +.. code-block:: twig + + {# €12.34 #} + {{ '12.345'|format_currency('EUR', {rounding_mode: 'floor'}) }} + + {# €1,000,000.0000 #} + {{ '1000000'|format_currency('EUR', {fraction_digit: 4}) }} + +The list of supported options: + +* ``grouping_used``; +* ``decimal_always_shown``; +* ``max_integer_digit``; +* ``min_integer_digit``; +* ``integer_digit``; +* ``max_fraction_digit``; +* ``min_fraction_digit``; +* ``fraction_digit``; +* ``multiplier``; +* ``grouping_size``; +* ``rounding_mode``; +* ``rounding_increment``; +* ``format_width``; +* ``padding_position``; +* ``secondary_grouping_size``; +* ``significant_digits_used``; +* ``min_significant_digits_used``; +* ``max_significant_digits_used``; +* ``lenient_parse``. + +By default, the filter uses the current locale. You can pass it explicitly: + +.. code-block:: twig + + {# 1.000.000,00 € #} + {{ '1000000'|format_currency('EUR', locale='de') }} + +.. note:: + + The ``format_currency`` filter is part of the ``IntlExtension`` which is not + installed by default. Install it first: + + .. code-block:: bash + + $ composer req twig/intl-extra + + Then, use the ``twig/extra-bundle`` on Symfony projects or add the extension + explictly on the Twig environment:: + + use Twig\Extra\Intl\IntlExtension; + + $twig = new \Twig\Environment(...); + $twig->addExtension(new IntlExtension()); + +Arguments +--------- + +* ``currency``: The currency +* ``attrs``: A map of attributes +* ``locale``: The locale diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/format_date.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/format_date.rst new file mode 100644 index 0000000..42e3a1d --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/format_date.rst @@ -0,0 +1,29 @@ +``format_date`` +=============== + +The ``format_date`` filter formats a date. It behaves in the exact same way as +the ``format_datetime`` filter, but without the time. + +.. note:: + + The ``format_date`` filter is part of the ``IntlExtension`` which is not + installed by default. Install it first: + + .. code-block:: bash + + $ composer req twig/intl-extra + + Then, use the ``twig/extra-bundle`` on Symfony projects or add the extension + explictly on the Twig environment:: + + use Twig\Extra\Intl\IntlExtension; + + $twig = new \Twig\Environment(...); + $twig->addExtension(new IntlExtension()); + +Arguments +--------- + +* ``locale``: The locale +* ``dateFormat``: The date format +* ``pattern``: A date time pattern diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/format_datetime.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/format_datetime.rst new file mode 100644 index 0000000..feea8b5 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/format_datetime.rst @@ -0,0 +1,65 @@ +``format_datetime`` +=================== + +The ``format_datetime`` filter formats a date time: + + public function formatDateTime(Environment $env, $date, ?string $dateFormat = 'medium', ?string $timeFormat = 'medium', string $pattern = '', $timezone = null, string $calendar = 'gregorian', string $locale = null): string + +.. code-block:: twig + + {# Aug 7, 2019, 11:39:12 PM #} + {{ '2019-08-07 23:39:12'|format_datetime() }} + +You can tweak the output for the date part and the time part: + +.. code-block:: twig + + {# 23:39 #} + {{ '2019-08-07 23:39:12'|format_datetime('none', 'short', locale='fr') }} + + {# 07/08/2019 #} + {{ '2019-08-07 23:39:12'|format_datetime('short', 'none', locale='fr') }} + + {# mercredi 7 août 2019 23:39:12 UTC #} + {{ '2019-08-07 23:39:12'|format_datetime('full', 'full', locale='fr') }} + +Supported values are: ``none``, ``short``, ``medium``, ``long``, and ``full``. + +For greater flexiblity, you can even define your own pattern: + +.. code-block:: twig + + {# 11 oclock PM, GMT #} + {{ '2019-08-07 23:39:12'|format_datetime(pattern="hh 'oclock' a, zzzz") }} + +By default, the filter uses the current locale. You can pass it explicitly: + +.. code-block:: twig + + {# 7 août 2019 23:39:12 #} + {{ '2019-08-07 23:39:12'|format_datetime(locale='fr') }} + +.. note:: + + The ``format_datetime`` filter is part of the ``IntlExtension`` which is not + installed by default. Install it first: + + .. code-block:: bash + + $ composer req twig/intl-extra + + Then, use the ``twig/extra-bundle`` on Symfony projects or add the extension + explictly on the Twig environment:: + + use Twig\Extra\Intl\IntlExtension; + + $twig = new \Twig\Environment(...); + $twig->addExtension(new IntlExtension()); + +Arguments +--------- + +* ``locale``: The locale +* ``dateFormat``: The date format +* ``timeFormat``: The time format +* ``pattern``: A date time pattern diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/format_number.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/format_number.rst new file mode 100644 index 0000000..9983b82 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/format_number.rst @@ -0,0 +1,115 @@ +``format_number`` +================= + +The ``format_number`` filter formats a number: + +.. code-block:: twig + + {{ '12.345'|format_number }} + +You can pass attributes to tweak the output: + +.. code-block:: twig + + {# 12.34 #} + {{ '12.345'|format_number({rounding_mode: 'floor'}) }} + + {# 1000000.0000 #} + {{ '1000000'|format_number({fraction_digit: 4}) }} + +The list of supported options: + +* ``grouping_used``; +* ``decimal_always_shown``; +* ``max_integer_digit``; +* ``min_integer_digit``; +* ``integer_digit``; +* ``max_fraction_digit``; +* ``min_fraction_digit``; +* ``fraction_digit``; +* ``multiplier``; +* ``grouping_size``; +* ``rounding_mode``; +* ``rounding_increment``; +* ``format_width``; +* ``padding_position``; +* ``secondary_grouping_size``; +* ``significant_digits_used``; +* ``min_significant_digits_used``; +* ``max_significant_digits_used``; +* ``lenient_parse``. + +Besides plain numbers, the filter can also format numbers in various styles: + +.. code-block:: twig + + {# 1,234% #} + {{ '12.345'|format_number(style='percent') }} + + {# twelve point three four five #} + {{ '12.345'|format_number(style='spellout') }} + + {# 12 sec. #} + {{ '12'|format_duration_number }} + +The list of supported styles: + +* ``decimal``; +* ``currency``; +* ``percent``; +* ``scientific``; +* ``spellout``; +* ``ordinal``; +* ``duration``. + +As a shortcut, you can use the ``format_*_number`` filters by replacing `*` with +a style: + +.. code-block:: twig + + {# 1,234% #} + {{ '12.345'|format_percent_number }} + + {# twelve point three four five #} + {{ '12.345'|format_spellout_number }} + +You can pass attributes to tweak the output: + +.. code-block:: twig + + {# €12.34 #} + {{ '12.345'|format_number('EUR', {rounding_mode: 'floor'}) }} + + {# €1,000,000.0000 #} + {{ '1000000'|format_number('EUR', {fraction_digit: 4}) }} + +By default, the filter uses the current locale. You can pass it explicitly: + +.. code-block:: twig + + {# 12,345 #} + {{ '12.345'|format_number(locale='fr') }} + +.. note:: + + The ``format_number`` filter is part of the ``IntlExtension`` which is not + installed by default. Install it first: + + .. code-block:: bash + + $ composer req twig/intl-extra + + Then, use the ``twig/extra-bundle`` on Symfony projects or add the extension + explictly on the Twig environment:: + + use Twig\Extra\Intl\IntlExtension; + + $twig = new \Twig\Environment(...); + $twig->addExtension(new IntlExtension()); + +Arguments +--------- + +* ``locale``: The locale +* ``attrs``: A map of attributes +* ``style``: The style of the number output diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/format_time.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/format_time.rst new file mode 100644 index 0000000..b917bb4 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/format_time.rst @@ -0,0 +1,29 @@ +``format_time`` +=============== + +The ``format_time`` filter formats a time. It behaves in the exact same way as +the ``format_datetime`` filter, but without the date. + +.. note:: + + The ``format_time`` filter is part of the ``IntlExtension`` which is not + installed by default. Install it first: + + .. code-block:: bash + + $ composer req twig/intl-extra + + Then, use the ``twig/extra-bundle`` on Symfony projects or add the extension + explictly on the Twig environment:: + + use Twig\Extra\Intl\IntlExtension; + + $twig = new \Twig\Environment(...); + $twig->addExtension(new IntlExtension()); + +Arguments +--------- + +* ``locale``: The locale +* ``timeFormat``: The time format +* ``pattern``: A date time pattern diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/html_to_markdown.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/html_to_markdown.rst new file mode 100644 index 0000000..7750d61 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/html_to_markdown.rst @@ -0,0 +1,63 @@ +``html_to_markdown`` +==================== + +The ``html_to_markdown`` filter converts a block of HTML to Markdown: + +.. code-block:: twig + + {% apply html_to_markdown %} + +

Hello!

+ + {% endapply %} + +You can also add some options by passing them as an argument to the filter: + +.. code-block:: twig + + {% apply html_to_markdown({hard_break: false}) %} + +

Hello!

+ + {% endapply %} + +.. note:: + + The options are the ones provided by the ``league/html-to-markdown`` package. + +You can also use the filter on an included file: + +.. code-block:: twig + + {{ include('some_template.html.twig')|html_to_markdown }} + +.. note:: + + The ``html_to_markdown`` filter is part of the ``MarkdownExtension`` which + is not installed by default. Install it first: + + .. code-block:: bash + + $ composer req twig/markdown-extra + + Then, use the ``twig/extra-bundle`` on Symfony projects or add the extension + explictly on the Twig environment:: + + use Twig\Extra\Markdown\MarkdownMarkdownExtension; + + $twig = new \Twig\Environment(...); + $twig->addExtension(new MarkdownExtension()); + + If you are not using Symfony, you must also register the extension runtime:: + + use Twig\Extra\Markdown\DefaultMarkdown; + use Twig\Extra\Markdown\MarkdownRuntime; + use Twig\RuntimeLoader\RuntimeLoaderInterface; + + $twig->addRuntimeLoader(new class implements RuntimeLoaderInterface { + public function load($class) { + if (MarkdownRuntime::class === $class) { + return new MarkdownRuntime(new DefaultMarkdown()); + } + } + }); diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/index.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/index.rst new file mode 100644 index 0000000..a35c3d7 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/index.rst @@ -0,0 +1,59 @@ +Filters +======= + +.. toctree:: + :maxdepth: 1 + + abs + batch + capitalize + column + convert_encoding + country_name + currency_name + currency_symbol + data_uri + date + date_modify + default + escape + filter + first + format + format_currency + format_date + format_datetime + format_number + format_time + html_to_markdown + inline_css + inky_to_html + join + json_encode + keys + language_name + last + length + locale_name + lower + map + markdown_to_html + merge + nl2br + number_format + raw + reduce + replace + reverse + round + slice + sort + spaceless + split + striptags + timezone_name + title + trim + u + upper + url_encode diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/inky_to_html.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/inky_to_html.rst new file mode 100644 index 0000000..8d744a2 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/inky_to_html.rst @@ -0,0 +1,37 @@ +``inky_to_html`` +================ + +The ``inky_to_html`` filter processes an `inky email template +`_: + +.. code-block:: twig + + {% apply inky_to_html %} + + + + + {% endapply %} + +You can also use the filter on an included file: + +.. code-block:: twig + + {{ include('some_template.inky.twig')|inky_to_html }} + +.. note:: + + The ``inky_to_html`` filter is part of the ``InkyExtension`` which is not + installed by default. Install it first: + + .. code-block:: bash + + $ composer req twig/inky-extra + + Then, use the ``twig/extra-bundle`` on Symfony projects or add the extension + explictly on the Twig environment:: + + use Twig\Extra\Inky\InkyExtension; + + $twig = new \Twig\Environment(...); + $twig->addExtension(new InkyExtension()); diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/inline_css.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/inline_css.rst new file mode 100644 index 0000000..0cda12b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/filters/inline_css.rst @@ -0,0 +1,61 @@ +``inline_css`` +============== + +The ``inline_css`` filter inline CSS styles in HTML documents: + +.. code-block:: twig + + {% apply inline_css %} + + + + + +

Hello CSS!

+ + + {% endapply %} + +You can also add some stylesheets by passing them as arguments to the filter: + +.. code-block:: twig + + {% apply inline_css(source("some_styles.css"), source("another.css")) %} + + +

Hello CSS!

+ + + {% endapply %} + +Styles loaded via the filter override the styles defined in the `` + {% endblock %} + {% block content %} +

Index

+

+ Welcome to my awesome homepage. +

+ {% endblock %} + +The :doc:`extends` tag is the key here. It tells the template +engine that this template "extends" another template. When the template system +evaluates this template, first it locates the parent. The extends tag should +be the first tag in the template. + +Note that since the child template doesn't define the ``footer`` block, the +value from the parent template is used instead. + +It's possible to render the contents of the parent block by using the +:doc:`parent` function. This gives back the results of the +parent block: + +.. code-block:: twig + + {% block sidebar %} +

Table Of Contents

+ ... + {{ parent() }} + {% endblock %} + +.. tip:: + + The documentation page for the :doc:`extends` tag describes + more advanced features like block nesting, scope, dynamic inheritance, and + conditional inheritance. + +.. note:: + + Twig also supports multiple inheritance via "horizontal reuse" with the help + of the :doc:`use` tag. + +HTML Escaping +------------- + +When generating HTML from templates, there's always a risk that a variable +will include characters that affect the resulting HTML. There are two +approaches: manually escaping each variable or automatically escaping +everything by default. + +Twig supports both, automatic escaping is enabled by default. + +The automatic escaping strategy can be configured via the +:ref:`autoescape` option and defaults to ``html``. + +Working with Manual Escaping +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If manual escaping is enabled, it is **your** responsibility to escape variables +if needed. What to escape? Any variable that comes from an untrusted source. + +Escaping works by using the :doc:`escape` or ``e`` filter: + +.. code-block:: twig + + {{ user.username|e }} + +By default, the ``escape`` filter uses the ``html`` strategy, but depending on +the escaping context, you might want to explicitly use an other strategy: + +.. code-block:: twig + + {{ user.username|e('js') }} + {{ user.username|e('css') }} + {{ user.username|e('url') }} + {{ user.username|e('html_attr') }} + +Working with Automatic Escaping +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Whether automatic escaping is enabled or not, you can mark a section of a +template to be escaped or not by using the :doc:`autoescape` +tag: + +.. code-block:: twig + + {% autoescape %} + Everything will be automatically escaped in this block (using the HTML strategy) + {% endautoescape %} + +By default, auto-escaping uses the ``html`` escaping strategy. If you output +variables in other contexts, you need to explicitly escape them with the +appropriate escaping strategy: + +.. code-block:: twig + + {% autoescape 'js' %} + Everything will be automatically escaped in this block (using the JS strategy) + {% endautoescape %} + +Escaping +-------- + +It is sometimes desirable or even necessary to have Twig ignore parts it would +otherwise handle as variables or blocks. For example if the default syntax is +used and you want to use ``{{`` as raw string in the template and not start a +variable you have to use a trick. + +The easiest way is to output the variable delimiter (``{{``) by using a variable +expression: + +.. code-block:: twig + + {{ '{{' }} + +For bigger sections it makes sense to mark a block +:doc:`verbatim`. + +Macros +------ + +Macros are comparable with functions in regular programming languages. They are +useful to reuse HTML fragments to not repeat yourself. They are described in the +:doc:`macro` tag documentation. + +.. _twig-expressions: + +Expressions +----------- + +Twig allows expressions everywhere. + +.. note:: + + The operator precedence is as follows, with the lowest-precedence operators + listed first: ``?:`` (ternary operator), ``b-and``, ``b-xor``, ``b-or``, + ``or``, ``and``, ``==``, ``!=``, ``<=>``, ``<``, ``>``, ``>=``, ``<=``, + ``in``, ``matches``, ``starts with``, ``ends with``, ``..``, ``+``, ``-``, + ``~``, ``*``, ``/``, ``//``, ``%``, ``is`` (tests), ``**``, ``??``, ``|`` + (filters), ``[]``, and ``.``: + + .. code-block:: twig + + {% set greeting = 'Hello ' %} + {% set name = 'Fabien' %} + + {{ greeting ~ name|lower }} {# Hello fabien #} + + {# use parenthesis to change precedence #} + {{ (greeting ~ name)|lower }} {# hello fabien #} + +Literals +~~~~~~~~ + +The simplest form of expressions are literals. Literals are representations +for PHP types such as strings, numbers, and arrays. The following literals +exist: + +* ``"Hello World"``: Everything between two double or single quotes is a + string. They are useful whenever you need a string in the template (for + example as arguments to function calls, filters or just to extend or include + a template). A string can contain a delimiter if it is preceded by a + backslash (``\``) -- like in ``'It\'s good'``. If the string contains a + backslash (e.g. ``'c:\Program Files'``) escape it by doubling it + (e.g. ``'c:\\Program Files'``). + +* ``42`` / ``42.23``: Integers and floating point numbers are created by + writing the number down. If a dot is present the number is a float, + otherwise an integer. + +* ``["foo", "bar"]``: Arrays are defined by a sequence of expressions + separated by a comma (``,``) and wrapped with squared brackets (``[]``). + +* ``{"foo": "bar"}``: Hashes are defined by a list of keys and values + separated by a comma (``,``) and wrapped with curly braces (``{}``): + + .. code-block:: twig + + {# keys as string #} + { 'foo': 'foo', 'bar': 'bar' } + + {# keys as names (equivalent to the previous hash) #} + { foo: 'foo', bar: 'bar' } + + {# keys as integer #} + { 2: 'foo', 4: 'bar' } + + {# keys as expressions (the expression must be enclosed into parentheses) #} + {% set foo = 'foo' %} + { (foo): 'foo', (1 + 1): 'bar', (foo ~ 'b'): 'baz' } + +* ``true`` / ``false``: ``true`` represents the true value, ``false`` + represents the false value. + +* ``null``: ``null`` represents no specific value. This is the value returned + when a variable does not exist. ``none`` is an alias for ``null``. + +Arrays and hashes can be nested: + +.. code-block:: twig + + {% set foo = [1, {"foo": "bar"}] %} + +.. tip:: + + Using double-quoted or single-quoted strings has no impact on performance + but :ref:`string interpolation ` is only + supported in double-quoted strings. + +Math +~~~~ + +Twig allows you to do math in templates; the following operators are supported: + +* ``+``: Adds two numbers together (the operands are casted to numbers). ``{{ + 1 + 1 }}`` is ``2``. + +* ``-``: Subtracts the second number from the first one. ``{{ 3 - 2 }}`` is + ``1``. + +* ``/``: Divides two numbers. The returned value will be a floating point + number. ``{{ 1 / 2 }}`` is ``{{ 0.5 }}``. + +* ``%``: Calculates the remainder of an integer division. ``{{ 11 % 7 }}`` is + ``4``. + +* ``//``: Divides two numbers and returns the floored integer result. ``{{ 20 + // 7 }}`` is ``2``, ``{{ -20 // 7 }}`` is ``-3`` (this is just syntactic + sugar for the :doc:`round` filter). + +* ``*``: Multiplies the left operand with the right one. ``{{ 2 * 2 }}`` would + return ``4``. + +* ``**``: Raises the left operand to the power of the right operand. ``{{ 2 ** + 3 }}`` would return ``8``. + +.. _template_logic: + +Logic +~~~~~ + +You can combine multiple expressions with the following operators: + +* ``and``: Returns true if the left and the right operands are both true. + +* ``or``: Returns true if the left or the right operand is true. + +* ``not``: Negates a statement. + +* ``(expr)``: Groups an expression. + +.. note:: + + Twig also supports bitwise operators (``b-and``, ``b-xor``, and ``b-or``). + +.. note:: + + Operators are case sensitive. + +Comparisons +~~~~~~~~~~~ + +The following comparison operators are supported in any expression: ``==``, +``!=``, ``<``, ``>``, ``>=``, and ``<=``. + +You can also check if a string ``starts with`` or ``ends with`` another +string: + +.. code-block:: twig + + {% if 'Fabien' starts with 'F' %} + {% endif %} + + {% if 'Fabien' ends with 'n' %} + {% endif %} + +.. note:: + + For complex string comparisons, the ``matches`` operator allows you to use + `regular expressions`_: + + .. code-block:: twig + + {% if phone matches '/^[\\d\\.]+$/' %} + {% endif %} + +Containment Operator +~~~~~~~~~~~~~~~~~~~~ + +The ``in`` operator performs containment test. It returns ``true`` if the left +operand is contained in the right: + +.. code-block:: twig + + {# returns true #} + + {{ 1 in [1, 2, 3] }} + + {{ 'cd' in 'abcde' }} + +.. tip:: + + You can use this filter to perform a containment test on strings, arrays, + or objects implementing the ``Traversable`` interface. + +To perform a negative test, use the ``not in`` operator: + +.. code-block:: twig + + {% if 1 not in [1, 2, 3] %} + + {# is equivalent to #} + {% if not (1 in [1, 2, 3]) %} + +Test Operator +~~~~~~~~~~~~~ + +The ``is`` operator performs tests. Tests can be used to test a variable against +a common expression. The right operand is name of the test: + +.. code-block:: twig + + {# find out if a variable is odd #} + + {{ name is odd }} + +Tests can accept arguments too: + +.. code-block:: twig + + {% if post.status is constant('Post::PUBLISHED') %} + +Tests can be negated by using the ``is not`` operator: + +.. code-block:: twig + + {% if post.status is not constant('Post::PUBLISHED') %} + + {# is equivalent to #} + {% if not (post.status is constant('Post::PUBLISHED')) %} + +Go to the :doc:`tests` page to learn more about the built-in +tests. + +Other Operators +~~~~~~~~~~~~~~~ + +The following operators don't fit into any of the other categories: + +* ``|``: Applies a filter. + +* ``..``: Creates a sequence based on the operand before and after the operator + (this is syntactic sugar for the :doc:`range` function): + + .. code-block:: twig + + {{ 1..5 }} + + {# equivalent to #} + {{ range(1, 5) }} + + Note that you must use parentheses when combining it with the filter operator + due to the :ref:`operator precedence rules `: + + .. code-block:: twig + + (1..5)|join(', ') + +* ``~``: Converts all operands into strings and concatenates them. ``{{ "Hello + " ~ name ~ "!" }}`` would return (assuming ``name`` is ``'John'``) ``Hello + John!``. + +* ``.``, ``[]``: Gets an attribute of a variable. + +* ``?:``: The ternary operator: + + .. code-block:: twig + + {{ foo ? 'yes' : 'no' }} + {{ foo ?: 'no' }} is the same as {{ foo ? foo : 'no' }} + {{ foo ? 'yes' }} is the same as {{ foo ? 'yes' : '' }} + +* ``??``: The null-coalescing operator: + + .. code-block:: twig + + {# returns the value of foo if it is defined and not null, 'no' otherwise #} + {{ foo ?? 'no' }} + +.. _templates-string-interpolation: + +String Interpolation +~~~~~~~~~~~~~~~~~~~~ + +String interpolation (``#{expression}``) allows any valid expression to appear +within a *double-quoted string*. The result of evaluating that expression is +inserted into the string: + +.. code-block:: twig + + {{ "foo #{bar} baz" }} + {{ "foo #{1 + 2} baz" }} + +.. _templates-whitespace-control: + +Whitespace Control +------------------ + +The first newline after a template tag is removed automatically (like in PHP). +Whitespace is not further modified by the template engine, so each whitespace +(spaces, tabs, newlines etc.) is returned unchanged. + +You can also control whitespace on a per tag level. By using the whitespace +control modifiers on your tags, you can trim leading and or trailing whitespace. + +Twig supports two modifiers: + +* *Whitespace trimming* via the ``-`` modifier: Removes all whitespace + (including newlines); + +* *Line whitespace trimming* via the ``~`` modifier: Removes all whitespace + (excluding newlines). Using this modifier on the right disables the default + removal of the first newline inherited from PHP. + +The modifiers can be used on either side of the tags like in ``{%-`` or ``-%}`` +and they consume all whitespace for that side of the tag. It is possible to use +the modifiers on one side of a tag or on both sides: + +.. code-block:: twig + + {% set value = 'no spaces' %} + {#- No leading/trailing whitespace -#} + {%- if true -%} + {{- value -}} + {%- endif -%} + {# output 'no spaces' #} + +
  • + {{ value }}
  • + {# outputs '
  • \n no spaces
  • ' #} + +
  • + {{- value }}
  • + {# outputs '
  • no spaces
  • ' #} + +
  • + {{~ value }}
  • + {# outputs '
  • \nno spaces
  • ' #} + +.. tip:: + + In addition to the whitespace modifiers, Twig also has a ``spaceless`` filter + that removes whitespace **between HTML tags**: + + .. code-block:: twig + + {% apply spaceless %} +
    + foo bar +
    + {% endapply %} + + {# output will be
    foo bar
    #} + +Extensions +---------- + +Twig can be extended. If you want to create your own extensions, read the +:ref:`Creating an Extension ` chapter. + +.. _`Twig bundle`: https://github.com/Anomareh/PHP-Twig.tmbundle +.. _`Jinja syntax plugin`: http://jinja.pocoo.org/docs/integration/#vim +.. _`vim-twig plugin`: https://github.com/lumiliet/vim-twig +.. _`Twig syntax plugin`: http://plugins.netbeans.org/plugin/37069/php-twig +.. _`Twig plugin`: https://github.com/pulse00/Twig-Eclipse-Plugin +.. _`Twig language definition`: https://github.com/gabrielcorpse/gedit-twig-template-language +.. _`Twig syntax mode`: https://github.com/bobthecow/Twig-HTML.mode +.. _`other Twig syntax mode`: https://github.com/muxx/Twig-HTML.mode +.. _`Notepad++ Twig Highlighter`: https://github.com/Banane9/notepadplusplus-twig +.. _`web-mode.el`: http://web-mode.org/ +.. _`regular expressions`: https://secure.php.net/manual/en/pcre.pattern.php +.. _`PHP-twig for atom`: https://github.com/reesef/php-twig +.. _`TwigFiddle`: https://twigfiddle.com/ +.. _`Twig pack`: https://marketplace.visualstudio.com/items?itemName=bajdzis.vscode-twig-pack diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/constant.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/constant.rst new file mode 100644 index 0000000..448c238 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/constant.rst @@ -0,0 +1,19 @@ +``constant`` +============ + +``constant`` checks if a variable has the exact same value as a constant. You +can use either global constants or class constants: + +.. code-block:: twig + + {% if post.status is constant('Post::PUBLISHED') %} + the status attribute is exactly the same as Post::PUBLISHED + {% endif %} + +You can test constants from object instances as well: + +.. code-block:: twig + + {% if post.status is constant('PUBLISHED', post) %} + the status attribute is exactly the same as Post::PUBLISHED + {% endif %} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/defined.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/defined.rst new file mode 100644 index 0000000..234a289 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/defined.rst @@ -0,0 +1,30 @@ +``defined`` +=========== + +``defined`` checks if a variable is defined in the current context. This is very +useful if you use the ``strict_variables`` option: + +.. code-block:: twig + + {# defined works with variable names #} + {% if foo is defined %} + ... + {% endif %} + + {# and attributes on variables names #} + {% if foo.bar is defined %} + ... + {% endif %} + + {% if foo['bar'] is defined %} + ... + {% endif %} + +When using the ``defined`` test on an expression that uses variables in some +method calls, be sure that they are all defined first: + +.. code-block:: twig + + {% if var is defined and foo.method(var) is defined %} + ... + {% endif %} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/divisibleby.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/divisibleby.rst new file mode 100644 index 0000000..8032d34 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/divisibleby.rst @@ -0,0 +1,10 @@ +``divisible by`` +================ + +``divisible by`` checks if a variable is divisible by a number: + +.. code-block:: twig + + {% if loop.index is divisible by(3) %} + ... + {% endif %} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/empty.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/empty.rst new file mode 100644 index 0000000..0233eca --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/empty.rst @@ -0,0 +1,18 @@ +``empty`` +========= + +``empty`` checks if a variable is an empty string, an empty array, an empty +hash, exactly ``false``, or exactly ``null``. + +For objects that implement the ``Countable`` interface, ``empty`` will check the +return value of the ``count()`` method. + +For objects that implement the ``__toString()`` magic method (and not ``Countable``), +it will check if an empty string is returned. + +.. code-block:: twig + + {% if foo is empty %} + ... + {% endif %} + diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/even.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/even.rst new file mode 100644 index 0000000..5d9c876 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/even.rst @@ -0,0 +1,10 @@ +``even`` +======== + +``even`` returns ``true`` if the given number is even: + +.. code-block:: twig + + {{ var is even }} + +.. seealso:: :doc:`odd<../tests/odd>` diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/index.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/index.rst new file mode 100644 index 0000000..c63208e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/index.rst @@ -0,0 +1,15 @@ +Tests +===== + +.. toctree:: + :maxdepth: 1 + + constant + defined + divisibleby + empty + even + iterable + null + odd + sameas diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/iterable.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/iterable.rst new file mode 100644 index 0000000..4ebfe9d --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/iterable.rst @@ -0,0 +1,16 @@ +``iterable`` +============ + +``iterable`` checks if a variable is an array or a traversable object: + +.. code-block:: twig + + {# evaluates to true if the foo variable is iterable #} + {% if users is iterable %} + {% for user in users %} + Hello {{ user }}! + {% endfor %} + {% else %} + {# users is probably a string #} + Hello {{ users }}! + {% endif %} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/null.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/null.rst new file mode 100644 index 0000000..9ed93f6 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/null.rst @@ -0,0 +1,12 @@ +``null`` +======== + +``null`` returns ``true`` if the variable is ``null``: + +.. code-block:: twig + + {{ var is null }} + +.. note:: + + ``none`` is an alias for ``null``. diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/odd.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/odd.rst new file mode 100644 index 0000000..0546f83 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/odd.rst @@ -0,0 +1,10 @@ +``odd`` +======= + +``odd`` returns ``true`` if the given number is odd: + +.. code-block:: twig + + {{ var is odd }} + +.. seealso:: :doc:`even<../tests/even>` diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/sameas.rst b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/sameas.rst new file mode 100644 index 0000000..c092971 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/doc/tests/sameas.rst @@ -0,0 +1,11 @@ +``same as`` +=========== + +``same as`` checks if a variable is the same as another variable. +This is equivalent to ``===`` in PHP: + +.. code-block:: twig + + {% if foo.attribute is same as(false) %} + the foo attribute really is the 'false' PHP value + {% endif %} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/drupal_test.sh b/soc/2020/daily_report/archive/app/vendor/twig/twig/drupal_test.sh new file mode 100644 index 0000000..75d5f02 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/drupal_test.sh @@ -0,0 +1,51 @@ +#!/bin/bash + +set -x +set -e + +REPO=`pwd` +cd /tmp +rm -rf drupal-twig-test +composer create-project --no-interaction drupal-composer/drupal-project:8.x-dev drupal-twig-test +cd drupal-twig-test +(cd vendor/twig && rm -rf twig && ln -sf $REPO twig) +echo '$config["system.logging"]["error_level"] = "verbose";' >> web/sites/default/settings.php +composer require drupal/core:8.7.x-dev webflo/drupal-core-require-dev:8.7.x-dev "egulias/email-validator:^2.0" +php ./web/core/scripts/drupal install --no-interaction demo_umami > output +perl -p -i -e 's/^([A-Za-z]+)\: (.+)$/export DRUPAL_\1=\2/' output +source output + +wget https://get.symfony.com/cli/installer -O - | bash +export PATH="$HOME/.symfony/bin:$PATH" +symfony server:start -d --no-tls + +curl -OLsS https://get.blackfire.io/blackfire-player.phar +chmod +x blackfire-player.phar +cat > drupal-tests.bkf < + */ +interface CacheInterface +{ + /** + * Generates a cache key for the given template class name. + */ + public function generateKey(string $name, string $className): string; + + /** + * Writes the compiled template to cache. + * + * @param string $content The template representation as a PHP class + */ + public function write(string $key, string $content): void; + + /** + * Loads a template from the cache. + */ + public function load(string $key): void; + + /** + * Returns the modification timestamp of a key. + */ + public function getTimestamp(string $key): int; +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Cache/FilesystemCache.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Cache/FilesystemCache.php new file mode 100644 index 0000000..34c5d0f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Cache/FilesystemCache.php @@ -0,0 +1,87 @@ + + */ +class FilesystemCache implements CacheInterface +{ + const FORCE_BYTECODE_INVALIDATION = 1; + + private $directory; + private $options; + + public function __construct(string $directory, int $options = 0) + { + $this->directory = rtrim($directory, '\/').'/'; + $this->options = $options; + } + + public function generateKey(string $name, string $className): string + { + $hash = hash('sha256', $className); + + return $this->directory.$hash[0].$hash[1].'/'.$hash.'.php'; + } + + public function load(string $key): void + { + if (file_exists($key)) { + @include_once $key; + } + } + + public function write(string $key, string $content): void + { + $dir = \dirname($key); + if (!is_dir($dir)) { + if (false === @mkdir($dir, 0777, true)) { + clearstatcache(true, $dir); + if (!is_dir($dir)) { + throw new \RuntimeException(sprintf('Unable to create the cache directory (%s).', $dir)); + } + } + } elseif (!is_writable($dir)) { + throw new \RuntimeException(sprintf('Unable to write in the cache directory (%s).', $dir)); + } + + $tmpFile = tempnam($dir, basename($key)); + if (false !== @file_put_contents($tmpFile, $content) && @rename($tmpFile, $key)) { + @chmod($key, 0666 & ~umask()); + + if (self::FORCE_BYTECODE_INVALIDATION == ($this->options & self::FORCE_BYTECODE_INVALIDATION)) { + // Compile cached file into bytecode cache + if (\function_exists('opcache_invalidate') && filter_var(ini_get('opcache.enable'), FILTER_VALIDATE_BOOLEAN)) { + @opcache_invalidate($key, true); + } elseif (\function_exists('apc_compile_file')) { + apc_compile_file($key); + } + } + + return; + } + + throw new \RuntimeException(sprintf('Failed to write cache file "%s".', $key)); + } + + public function getTimestamp(string $key): int + { + if (!file_exists($key)) { + return 0; + } + + return (int) @filemtime($key); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Cache/NullCache.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Cache/NullCache.php new file mode 100644 index 0000000..8d20d59 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Cache/NullCache.php @@ -0,0 +1,38 @@ + + */ +final class NullCache implements CacheInterface +{ + public function generateKey(string $name, string $className): string + { + return ''; + } + + public function write(string $key, string $content): void + { + } + + public function load(string $key): void + { + } + + public function getTimestamp(string $key): int + { + return 0; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Compiler.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Compiler.php new file mode 100644 index 0000000..7754c08 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Compiler.php @@ -0,0 +1,214 @@ + + */ +class Compiler +{ + private $lastLine; + private $source; + private $indentation; + private $env; + private $debugInfo = []; + private $sourceOffset; + private $sourceLine; + private $varNameSalt = 0; + + public function __construct(Environment $env) + { + $this->env = $env; + } + + public function getEnvironment(): Environment + { + return $this->env; + } + + public function getSource(): string + { + return $this->source; + } + + /** + * @return $this + */ + public function compile(Node $node, int $indentation = 0) + { + $this->lastLine = null; + $this->source = ''; + $this->debugInfo = []; + $this->sourceOffset = 0; + // source code starts at 1 (as we then increment it when we encounter new lines) + $this->sourceLine = 1; + $this->indentation = $indentation; + $this->varNameSalt = 0; + + $node->compile($this); + + return $this; + } + + /** + * @return $this + */ + public function subcompile(Node $node, bool $raw = true) + { + if (false === $raw) { + $this->source .= str_repeat(' ', $this->indentation * 4); + } + + $node->compile($this); + + return $this; + } + + /** + * Adds a raw string to the compiled code. + * + * @return $this + */ + public function raw(string $string) + { + $this->source .= $string; + + return $this; + } + + /** + * Writes a string to the compiled code by adding indentation. + * + * @return $this + */ + public function write(...$strings) + { + foreach ($strings as $string) { + $this->source .= str_repeat(' ', $this->indentation * 4).$string; + } + + return $this; + } + + /** + * Adds a quoted string to the compiled code. + * + * @return $this + */ + public function string(string $value) + { + $this->source .= sprintf('"%s"', addcslashes($value, "\0\t\"\$\\")); + + return $this; + } + + /** + * Returns a PHP representation of a given value. + * + * @return $this + */ + public function repr($value) + { + if (\is_int($value) || \is_float($value)) { + if (false !== $locale = setlocale(LC_NUMERIC, '0')) { + setlocale(LC_NUMERIC, 'C'); + } + + $this->raw(var_export($value, true)); + + if (false !== $locale) { + setlocale(LC_NUMERIC, $locale); + } + } elseif (null === $value) { + $this->raw('null'); + } elseif (\is_bool($value)) { + $this->raw($value ? 'true' : 'false'); + } elseif (\is_array($value)) { + $this->raw('array('); + $first = true; + foreach ($value as $key => $v) { + if (!$first) { + $this->raw(', '); + } + $first = false; + $this->repr($key); + $this->raw(' => '); + $this->repr($v); + } + $this->raw(')'); + } else { + $this->string($value); + } + + return $this; + } + + /** + * @return $this + */ + public function addDebugInfo(Node $node) + { + if ($node->getTemplateLine() != $this->lastLine) { + $this->write(sprintf("// line %d\n", $node->getTemplateLine())); + + $this->sourceLine += substr_count($this->source, "\n", $this->sourceOffset); + $this->sourceOffset = \strlen($this->source); + $this->debugInfo[$this->sourceLine] = $node->getTemplateLine(); + + $this->lastLine = $node->getTemplateLine(); + } + + return $this; + } + + public function getDebugInfo(): array + { + ksort($this->debugInfo); + + return $this->debugInfo; + } + + /** + * @return $this + */ + public function indent(int $step = 1) + { + $this->indentation += $step; + + return $this; + } + + /** + * @return $this + * + * @throws \LogicException When trying to outdent too much so the indentation would become negative + */ + public function outdent(int $step = 1) + { + // can't outdent by more steps than the current indentation level + if ($this->indentation < $step) { + throw new \LogicException('Unable to call outdent() as the indentation would become negative.'); + } + + $this->indentation -= $step; + + return $this; + } + + public function getVarName(): string + { + return sprintf('__internal_%s', hash('sha256', __METHOD__.$this->varNameSalt++)); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Environment.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Environment.php new file mode 100644 index 0000000..9ea3ceb --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Environment.php @@ -0,0 +1,816 @@ + + */ +class Environment +{ + const VERSION = '3.0.3'; + const VERSION_ID = 30003; + const MAJOR_VERSION = 3; + const MINOR_VERSION = 0; + const RELEASE_VERSION = 3; + const EXTRA_VERSION = ''; + + private $charset; + private $loader; + private $debug; + private $autoReload; + private $cache; + private $lexer; + private $parser; + private $compiler; + private $globals = []; + private $resolvedGlobals; + private $loadedTemplates; + private $strictVariables; + private $templateClassPrefix = '__TwigTemplate_'; + private $originalCache; + private $extensionSet; + private $runtimeLoaders = []; + private $runtimes = []; + private $optionsHash; + + /** + * Constructor. + * + * Available options: + * + * * debug: When set to true, it automatically set "auto_reload" to true as + * well (default to false). + * + * * charset: The charset used by the templates (default to UTF-8). + * + * * cache: An absolute path where to store the compiled templates, + * a \Twig\Cache\CacheInterface implementation, + * or false to disable compilation cache (default). + * + * * auto_reload: Whether to reload the template if the original source changed. + * If you don't provide the auto_reload option, it will be + * determined automatically based on the debug value. + * + * * strict_variables: Whether to ignore invalid variables in templates + * (default to false). + * + * * autoescape: Whether to enable auto-escaping (default to html): + * * false: disable auto-escaping + * * html, js: set the autoescaping to one of the supported strategies + * * name: set the autoescaping strategy based on the template name extension + * * PHP callback: a PHP callback that returns an escaping strategy based on the template "name" + * + * * optimizations: A flag that indicates which optimizations to apply + * (default to -1 which means that all optimizations are enabled; + * set it to 0 to disable). + */ + public function __construct(LoaderInterface $loader, $options = []) + { + $this->setLoader($loader); + + $options = array_merge([ + 'debug' => false, + 'charset' => 'UTF-8', + 'strict_variables' => false, + 'autoescape' => 'html', + 'cache' => false, + 'auto_reload' => null, + 'optimizations' => -1, + ], $options); + + $this->debug = (bool) $options['debug']; + $this->setCharset($options['charset'] ?? 'UTF-8'); + $this->autoReload = null === $options['auto_reload'] ? $this->debug : (bool) $options['auto_reload']; + $this->strictVariables = (bool) $options['strict_variables']; + $this->setCache($options['cache']); + $this->extensionSet = new ExtensionSet(); + + $this->addExtension(new CoreExtension()); + $this->addExtension(new EscaperExtension($options['autoescape'])); + $this->addExtension(new OptimizerExtension($options['optimizations'])); + } + + /** + * Enables debugging mode. + */ + public function enableDebug() + { + $this->debug = true; + $this->updateOptionsHash(); + } + + /** + * Disables debugging mode. + */ + public function disableDebug() + { + $this->debug = false; + $this->updateOptionsHash(); + } + + /** + * Checks if debug mode is enabled. + * + * @return bool true if debug mode is enabled, false otherwise + */ + public function isDebug() + { + return $this->debug; + } + + /** + * Enables the auto_reload option. + */ + public function enableAutoReload() + { + $this->autoReload = true; + } + + /** + * Disables the auto_reload option. + */ + public function disableAutoReload() + { + $this->autoReload = false; + } + + /** + * Checks if the auto_reload option is enabled. + * + * @return bool true if auto_reload is enabled, false otherwise + */ + public function isAutoReload() + { + return $this->autoReload; + } + + /** + * Enables the strict_variables option. + */ + public function enableStrictVariables() + { + $this->strictVariables = true; + $this->updateOptionsHash(); + } + + /** + * Disables the strict_variables option. + */ + public function disableStrictVariables() + { + $this->strictVariables = false; + $this->updateOptionsHash(); + } + + /** + * Checks if the strict_variables option is enabled. + * + * @return bool true if strict_variables is enabled, false otherwise + */ + public function isStrictVariables() + { + return $this->strictVariables; + } + + /** + * Gets the current cache implementation. + * + * @param bool $original Whether to return the original cache option or the real cache instance + * + * @return CacheInterface|string|false A Twig\Cache\CacheInterface implementation, + * an absolute path to the compiled templates, + * or false to disable cache + */ + public function getCache($original = true) + { + return $original ? $this->originalCache : $this->cache; + } + + /** + * Sets the current cache implementation. + * + * @param CacheInterface|string|false $cache A Twig\Cache\CacheInterface implementation, + * an absolute path to the compiled templates, + * or false to disable cache + */ + public function setCache($cache) + { + if (\is_string($cache)) { + $this->originalCache = $cache; + $this->cache = new FilesystemCache($cache); + } elseif (false === $cache) { + $this->originalCache = $cache; + $this->cache = new NullCache(); + } elseif ($cache instanceof CacheInterface) { + $this->originalCache = $this->cache = $cache; + } else { + throw new \LogicException(sprintf('Cache can only be a string, false, or a \Twig\Cache\CacheInterface implementation.')); + } + } + + /** + * Gets the template class associated with the given string. + * + * The generated template class is based on the following parameters: + * + * * The cache key for the given template; + * * The currently enabled extensions; + * * Whether the Twig C extension is available or not; + * * PHP version; + * * Twig version; + * * Options with what environment was created. + * + * @param string $name The name for which to calculate the template class name + * @param int|null $index The index if it is an embedded template + * + * @internal + */ + public function getTemplateClass(string $name, int $index = null): string + { + $key = $this->getLoader()->getCacheKey($name).$this->optionsHash; + + return $this->templateClassPrefix.hash('sha256', $key).(null === $index ? '' : '___'.$index); + } + + /** + * Renders a template. + * + * @param string|TemplateWrapper $name The template name + * + * @throws LoaderError When the template cannot be found + * @throws SyntaxError When an error occurred during compilation + * @throws RuntimeError When an error occurred during rendering + */ + public function render($name, array $context = []): string + { + return $this->load($name)->render($context); + } + + /** + * Displays a template. + * + * @param string|TemplateWrapper $name The template name + * + * @throws LoaderError When the template cannot be found + * @throws SyntaxError When an error occurred during compilation + * @throws RuntimeError When an error occurred during rendering + */ + public function display($name, array $context = []): void + { + $this->load($name)->display($context); + } + + /** + * Loads a template. + * + * @param string|TemplateWrapper $name The template name + * + * @throws LoaderError When the template cannot be found + * @throws RuntimeError When a previously generated cache is corrupted + * @throws SyntaxError When an error occurred during compilation + */ + public function load($name): TemplateWrapper + { + if ($name instanceof TemplateWrapper) { + return $name; + } + + return new TemplateWrapper($this, $this->loadTemplate($this->getTemplateClass($name), $name)); + } + + /** + * Loads a template internal representation. + * + * This method is for internal use only and should never be called + * directly. + * + * @param string $name The template name + * @param int $index The index if it is an embedded template + * + * @throws LoaderError When the template cannot be found + * @throws RuntimeError When a previously generated cache is corrupted + * @throws SyntaxError When an error occurred during compilation + * + * @internal + */ + public function loadTemplate(string $cls, string $name, int $index = null): Template + { + $mainCls = $cls; + if (null !== $index) { + $cls .= '___'.$index; + } + + if (isset($this->loadedTemplates[$cls])) { + return $this->loadedTemplates[$cls]; + } + + if (!class_exists($cls, false)) { + $key = $this->cache->generateKey($name, $mainCls); + + if (!$this->isAutoReload() || $this->isTemplateFresh($name, $this->cache->getTimestamp($key))) { + $this->cache->load($key); + } + + $source = null; + if (!class_exists($cls, false)) { + $source = $this->getLoader()->getSourceContext($name); + $content = $this->compileSource($source); + $this->cache->write($key, $content); + $this->cache->load($key); + + if (!class_exists($mainCls, false)) { + /* Last line of defense if either $this->bcWriteCacheFile was used, + * $this->cache is implemented as a no-op or we have a race condition + * where the cache was cleared between the above calls to write to and load from + * the cache. + */ + eval('?>'.$content); + } + + if (!class_exists($cls, false)) { + throw new RuntimeError(sprintf('Failed to load Twig template "%s", index "%s": cache might be corrupted.', $name, $index), -1, $source); + } + } + } + + $this->extensionSet->initRuntime(); + + return $this->loadedTemplates[$cls] = new $cls($this); + } + + /** + * Creates a template from source. + * + * This method should not be used as a generic way to load templates. + * + * @param string $template The template source + * @param string $name An optional name of the template to be used in error messages + * + * @throws LoaderError When the template cannot be found + * @throws SyntaxError When an error occurred during compilation + */ + public function createTemplate(string $template, string $name = null): TemplateWrapper + { + $hash = hash('sha256', $template, false); + if (null !== $name) { + $name = sprintf('%s (string template %s)', $name, $hash); + } else { + $name = sprintf('__string_template__%s', $hash); + } + + $loader = new ChainLoader([ + new ArrayLoader([$name => $template]), + $current = $this->getLoader(), + ]); + + $this->setLoader($loader); + try { + return new TemplateWrapper($this, $this->loadTemplate($this->getTemplateClass($name), $name)); + } finally { + $this->setLoader($current); + } + } + + /** + * Returns true if the template is still fresh. + * + * Besides checking the loader for freshness information, + * this method also checks if the enabled extensions have + * not changed. + * + * @param int $time The last modification time of the cached template + */ + public function isTemplateFresh(string $name, int $time): bool + { + return $this->extensionSet->getLastModified() <= $time && $this->getLoader()->isFresh($name, $time); + } + + /** + * Tries to load a template consecutively from an array. + * + * Similar to load() but it also accepts instances of \Twig\Template and + * \Twig\TemplateWrapper, and an array of templates where each is tried to be loaded. + * + * @param string|TemplateWrapper|array $names A template or an array of templates to try consecutively + * + * @throws LoaderError When none of the templates can be found + * @throws SyntaxError When an error occurred during compilation + */ + public function resolveTemplate($names): TemplateWrapper + { + if (!\is_array($names)) { + return $this->load($names); + } + + foreach ($names as $name) { + try { + return $this->load($name); + } catch (LoaderError $e) { + } + } + + throw new LoaderError(sprintf('Unable to find one of the following templates: "%s".', implode('", "', $names))); + } + + public function setLexer(Lexer $lexer) + { + $this->lexer = $lexer; + } + + /** + * @throws SyntaxError When the code is syntactically wrong + */ + public function tokenize(Source $source): TokenStream + { + if (null === $this->lexer) { + $this->lexer = new Lexer($this); + } + + return $this->lexer->tokenize($source); + } + + public function setParser(Parser $parser) + { + $this->parser = $parser; + } + + /** + * Converts a token stream to a node tree. + * + * @throws SyntaxError When the token stream is syntactically or semantically wrong + */ + public function parse(TokenStream $stream): ModuleNode + { + if (null === $this->parser) { + $this->parser = new Parser($this); + } + + return $this->parser->parse($stream); + } + + public function setCompiler(Compiler $compiler) + { + $this->compiler = $compiler; + } + + /** + * Compiles a node and returns the PHP code. + */ + public function compile(Node $node): string + { + if (null === $this->compiler) { + $this->compiler = new Compiler($this); + } + + return $this->compiler->compile($node)->getSource(); + } + + /** + * Compiles a template source code. + * + * @throws SyntaxError When there was an error during tokenizing, parsing or compiling + */ + public function compileSource(Source $source): string + { + try { + return $this->compile($this->parse($this->tokenize($source))); + } catch (Error $e) { + $e->setSourceContext($source); + throw $e; + } catch (\Exception $e) { + throw new SyntaxError(sprintf('An exception has been thrown during the compilation of a template ("%s").', $e->getMessage()), -1, $source, $e); + } + } + + public function setLoader(LoaderInterface $loader) + { + $this->loader = $loader; + } + + public function getLoader(): LoaderInterface + { + return $this->loader; + } + + public function setCharset(string $charset) + { + if ('UTF8' === $charset = strtoupper($charset)) { + // iconv on Windows requires "UTF-8" instead of "UTF8" + $charset = 'UTF-8'; + } + + $this->charset = $charset; + } + + public function getCharset(): string + { + return $this->charset; + } + + public function hasExtension(string $class): bool + { + return $this->extensionSet->hasExtension($class); + } + + public function addRuntimeLoader(RuntimeLoaderInterface $loader) + { + $this->runtimeLoaders[] = $loader; + } + + public function getExtension(string $class): ExtensionInterface + { + return $this->extensionSet->getExtension($class); + } + + /** + * Returns the runtime implementation of a Twig element (filter/function/test). + * + * @param string $class A runtime class name + * + * @return object The runtime implementation + * + * @throws RuntimeError When the template cannot be found + */ + public function getRuntime(string $class) + { + if (isset($this->runtimes[$class])) { + return $this->runtimes[$class]; + } + + foreach ($this->runtimeLoaders as $loader) { + if (null !== $runtime = $loader->load($class)) { + return $this->runtimes[$class] = $runtime; + } + } + + throw new RuntimeError(sprintf('Unable to load the "%s" runtime.', $class)); + } + + public function addExtension(ExtensionInterface $extension) + { + $this->extensionSet->addExtension($extension); + $this->updateOptionsHash(); + } + + /** + * @param ExtensionInterface[] $extensions An array of extensions + */ + public function setExtensions(array $extensions) + { + $this->extensionSet->setExtensions($extensions); + $this->updateOptionsHash(); + } + + /** + * @return ExtensionInterface[] An array of extensions (keys are for internal usage only and should not be relied on) + */ + public function getExtensions(): array + { + return $this->extensionSet->getExtensions(); + } + + public function addTokenParser(TokenParserInterface $parser) + { + $this->extensionSet->addTokenParser($parser); + } + + /** + * @return TokenParserInterface[] + * + * @internal + */ + public function getTokenParsers(): array + { + return $this->extensionSet->getTokenParsers(); + } + + /** + * @return TokenParserInterface[] + * + * @internal + */ + public function getTags(): array + { + $tags = []; + foreach ($this->getTokenParsers() as $parser) { + $tags[$parser->getTag()] = $parser; + } + + return $tags; + } + + public function addNodeVisitor(NodeVisitorInterface $visitor) + { + $this->extensionSet->addNodeVisitor($visitor); + } + + /** + * @return NodeVisitorInterface[] + * + * @internal + */ + public function getNodeVisitors(): array + { + return $this->extensionSet->getNodeVisitors(); + } + + public function addFilter(TwigFilter $filter) + { + $this->extensionSet->addFilter($filter); + } + + /** + * @internal + */ + public function getFilter(string $name): ?TwigFilter + { + return $this->extensionSet->getFilter($name); + } + + public function registerUndefinedFilterCallback(callable $callable) + { + $this->extensionSet->registerUndefinedFilterCallback($callable); + } + + /** + * Gets the registered Filters. + * + * Be warned that this method cannot return filters defined with registerUndefinedFilterCallback. + * + * @return TwigFilter[] + * + * @see registerUndefinedFilterCallback + * + * @internal + */ + public function getFilters(): array + { + return $this->extensionSet->getFilters(); + } + + public function addTest(TwigTest $test) + { + $this->extensionSet->addTest($test); + } + + /** + * @return TwigTest[] + * + * @internal + */ + public function getTests(): array + { + return $this->extensionSet->getTests(); + } + + /** + * @internal + */ + public function getTest(string $name): ?TwigTest + { + return $this->extensionSet->getTest($name); + } + + public function addFunction(TwigFunction $function) + { + $this->extensionSet->addFunction($function); + } + + /** + * @internal + */ + public function getFunction(string $name): ?TwigFunction + { + return $this->extensionSet->getFunction($name); + } + + public function registerUndefinedFunctionCallback(callable $callable) + { + $this->extensionSet->registerUndefinedFunctionCallback($callable); + } + + /** + * Gets registered functions. + * + * Be warned that this method cannot return functions defined with registerUndefinedFunctionCallback. + * + * @return TwigFunction[] + * + * @see registerUndefinedFunctionCallback + * + * @internal + */ + public function getFunctions(): array + { + return $this->extensionSet->getFunctions(); + } + + /** + * Registers a Global. + * + * New globals can be added before compiling or rendering a template; + * but after, you can only update existing globals. + * + * @param mixed $value The global value + */ + public function addGlobal(string $name, $value) + { + if ($this->extensionSet->isInitialized() && !\array_key_exists($name, $this->getGlobals())) { + throw new \LogicException(sprintf('Unable to add global "%s" as the runtime or the extensions have already been initialized.', $name)); + } + + if (null !== $this->resolvedGlobals) { + $this->resolvedGlobals[$name] = $value; + } else { + $this->globals[$name] = $value; + } + } + + /** + * @internal + */ + public function getGlobals(): array + { + if ($this->extensionSet->isInitialized()) { + if (null === $this->resolvedGlobals) { + $this->resolvedGlobals = array_merge($this->extensionSet->getGlobals(), $this->globals); + } + + return $this->resolvedGlobals; + } + + return array_merge($this->extensionSet->getGlobals(), $this->globals); + } + + public function mergeGlobals(array $context): array + { + // we don't use array_merge as the context being generally + // bigger than globals, this code is faster. + foreach ($this->getGlobals() as $key => $value) { + if (!\array_key_exists($key, $context)) { + $context[$key] = $value; + } + } + + return $context; + } + + /** + * @internal + */ + public function getUnaryOperators(): array + { + return $this->extensionSet->getUnaryOperators(); + } + + /** + * @internal + */ + public function getBinaryOperators(): array + { + return $this->extensionSet->getBinaryOperators(); + } + + private function updateOptionsHash(): void + { + $this->optionsHash = implode(':', [ + $this->extensionSet->getSignature(), + PHP_MAJOR_VERSION, + PHP_MINOR_VERSION, + self::VERSION, + (int) $this->debug, + (int) $this->strictVariables, + ]); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Error/Error.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Error/Error.php new file mode 100644 index 0000000..d8a30c5 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Error/Error.php @@ -0,0 +1,227 @@ + + */ +class Error extends \Exception +{ + private $lineno; + private $name; + private $rawMessage; + private $sourcePath; + private $sourceCode; + + /** + * Constructor. + * + * By default, automatic guessing is enabled. + * + * @param string $message The error message + * @param int $lineno The template line where the error occurred + * @param Source|null $source The source context where the error occurred + */ + public function __construct(string $message, int $lineno = -1, Source $source = null, \Exception $previous = null) + { + parent::__construct('', 0, $previous); + + if (null === $source) { + $name = null; + } else { + $name = $source->getName(); + $this->sourceCode = $source->getCode(); + $this->sourcePath = $source->getPath(); + } + + $this->lineno = $lineno; + $this->name = $name; + $this->rawMessage = $message; + $this->updateRepr(); + } + + public function getRawMessage(): string + { + return $this->rawMessage; + } + + public function getTemplateLine(): int + { + return $this->lineno; + } + + public function setTemplateLine(int $lineno): void + { + $this->lineno = $lineno; + + $this->updateRepr(); + } + + public function getSourceContext(): ?Source + { + return $this->name ? new Source($this->sourceCode, $this->name, $this->sourcePath) : null; + } + + public function setSourceContext(Source $source = null): void + { + if (null === $source) { + $this->sourceCode = $this->name = $this->sourcePath = null; + } else { + $this->sourceCode = $source->getCode(); + $this->name = $source->getName(); + $this->sourcePath = $source->getPath(); + } + + $this->updateRepr(); + } + + public function guess(): void + { + $this->guessTemplateInfo(); + $this->updateRepr(); + } + + public function appendMessage($rawMessage): void + { + $this->rawMessage .= $rawMessage; + $this->updateRepr(); + } + + private function updateRepr(): void + { + $this->message = $this->rawMessage; + + if ($this->sourcePath && $this->lineno > 0) { + $this->file = $this->sourcePath; + $this->line = $this->lineno; + + return; + } + + $dot = false; + if ('.' === substr($this->message, -1)) { + $this->message = substr($this->message, 0, -1); + $dot = true; + } + + $questionMark = false; + if ('?' === substr($this->message, -1)) { + $this->message = substr($this->message, 0, -1); + $questionMark = true; + } + + if ($this->name) { + if (\is_string($this->name) || (\is_object($this->name) && method_exists($this->name, '__toString'))) { + $name = sprintf('"%s"', $this->name); + } else { + $name = json_encode($this->name); + } + $this->message .= sprintf(' in %s', $name); + } + + if ($this->lineno && $this->lineno >= 0) { + $this->message .= sprintf(' at line %d', $this->lineno); + } + + if ($dot) { + $this->message .= '.'; + } + + if ($questionMark) { + $this->message .= '?'; + } + } + + private function guessTemplateInfo(): void + { + $template = null; + $templateClass = null; + + $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS | DEBUG_BACKTRACE_PROVIDE_OBJECT); + foreach ($backtrace as $trace) { + if (isset($trace['object']) && $trace['object'] instanceof Template) { + $currentClass = \get_class($trace['object']); + $isEmbedContainer = 0 === strpos($templateClass, $currentClass); + if (null === $this->name || ($this->name == $trace['object']->getTemplateName() && !$isEmbedContainer)) { + $template = $trace['object']; + $templateClass = \get_class($trace['object']); + } + } + } + + // update template name + if (null !== $template && null === $this->name) { + $this->name = $template->getTemplateName(); + } + + // update template path if any + if (null !== $template && null === $this->sourcePath) { + $src = $template->getSourceContext(); + $this->sourceCode = $src->getCode(); + $this->sourcePath = $src->getPath(); + } + + if (null === $template || $this->lineno > -1) { + return; + } + + $r = new \ReflectionObject($template); + $file = $r->getFileName(); + + $exceptions = [$e = $this]; + while ($e = $e->getPrevious()) { + $exceptions[] = $e; + } + + while ($e = array_pop($exceptions)) { + $traces = $e->getTrace(); + array_unshift($traces, ['file' => $e->getFile(), 'line' => $e->getLine()]); + + while ($trace = array_shift($traces)) { + if (!isset($trace['file']) || !isset($trace['line']) || $file != $trace['file']) { + continue; + } + + foreach ($template->getDebugInfo() as $codeLine => $templateLine) { + if ($codeLine <= $trace['line']) { + // update template line + $this->lineno = $templateLine; + + return; + } + } + } + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Error/LoaderError.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Error/LoaderError.php new file mode 100644 index 0000000..7c8c23c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Error/LoaderError.php @@ -0,0 +1,21 @@ + + */ +class LoaderError extends Error +{ +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Error/RuntimeError.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Error/RuntimeError.php new file mode 100644 index 0000000..f6b8476 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Error/RuntimeError.php @@ -0,0 +1,22 @@ + + */ +class RuntimeError extends Error +{ +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Error/SyntaxError.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Error/SyntaxError.php new file mode 100644 index 0000000..726b330 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Error/SyntaxError.php @@ -0,0 +1,46 @@ + + */ +class SyntaxError extends Error +{ + /** + * Tweaks the error message to include suggestions. + * + * @param string $name The original name of the item that does not exist + * @param array $items An array of possible items + */ + public function addSuggestions(string $name, array $items): void + { + $alternatives = []; + foreach ($items as $item) { + $lev = levenshtein($name, $item); + if ($lev <= \strlen($name) / 3 || false !== strpos($item, $name)) { + $alternatives[$item] = $lev; + } + } + + if (!$alternatives) { + return; + } + + asort($alternatives); + + $this->appendMessage(sprintf(' Did you mean "%s"?', implode('", "', array_keys($alternatives)))); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/ExpressionParser.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/ExpressionParser.php new file mode 100644 index 0000000..6784ebf --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/ExpressionParser.php @@ -0,0 +1,807 @@ + + * + * @internal + */ +class ExpressionParser +{ + const OPERATOR_LEFT = 1; + const OPERATOR_RIGHT = 2; + + private $parser; + private $env; + private $unaryOperators; + private $binaryOperators; + + public function __construct(Parser $parser, Environment $env) + { + $this->parser = $parser; + $this->env = $env; + $this->unaryOperators = $env->getUnaryOperators(); + $this->binaryOperators = $env->getBinaryOperators(); + } + + public function parseExpression($precedence = 0, $allowArrow = false) + { + if ($allowArrow && $arrow = $this->parseArrow()) { + return $arrow; + } + + $expr = $this->getPrimary(); + $token = $this->parser->getCurrentToken(); + while ($this->isBinary($token) && $this->binaryOperators[$token->getValue()]['precedence'] >= $precedence) { + $op = $this->binaryOperators[$token->getValue()]; + $this->parser->getStream()->next(); + + if ('is not' === $token->getValue()) { + $expr = $this->parseNotTestExpression($expr); + } elseif ('is' === $token->getValue()) { + $expr = $this->parseTestExpression($expr); + } elseif (isset($op['callable'])) { + $expr = $op['callable']($this->parser, $expr); + } else { + $expr1 = $this->parseExpression(self::OPERATOR_LEFT === $op['associativity'] ? $op['precedence'] + 1 : $op['precedence']); + $class = $op['class']; + $expr = new $class($expr, $expr1, $token->getLine()); + } + + $token = $this->parser->getCurrentToken(); + } + + if (0 === $precedence) { + return $this->parseConditionalExpression($expr); + } + + return $expr; + } + + /** + * @return ArrowFunctionExpression|null + */ + private function parseArrow() + { + $stream = $this->parser->getStream(); + + // short array syntax (one argument, no parentheses)? + if ($stream->look(1)->test(/* Token::ARROW_TYPE */ 12)) { + $line = $stream->getCurrent()->getLine(); + $token = $stream->expect(/* Token::NAME_TYPE */ 5); + $names = [new AssignNameExpression($token->getValue(), $token->getLine())]; + $stream->expect(/* Token::ARROW_TYPE */ 12); + + return new ArrowFunctionExpression($this->parseExpression(0), new Node($names), $line); + } + + // first, determine if we are parsing an arrow function by finding => (long form) + $i = 0; + if (!$stream->look($i)->test(/* Token::PUNCTUATION_TYPE */ 9, '(')) { + return null; + } + ++$i; + while (true) { + // variable name + ++$i; + if (!$stream->look($i)->test(/* Token::PUNCTUATION_TYPE */ 9, ',')) { + break; + } + ++$i; + } + if (!$stream->look($i)->test(/* Token::PUNCTUATION_TYPE */ 9, ')')) { + return null; + } + ++$i; + if (!$stream->look($i)->test(/* Token::ARROW_TYPE */ 12)) { + return null; + } + + // yes, let's parse it properly + $token = $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, '('); + $line = $token->getLine(); + + $names = []; + while (true) { + $token = $stream->expect(/* Token::NAME_TYPE */ 5); + $names[] = new AssignNameExpression($token->getValue(), $token->getLine()); + + if (!$stream->nextIf(/* Token::PUNCTUATION_TYPE */ 9, ',')) { + break; + } + } + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, ')'); + $stream->expect(/* Token::ARROW_TYPE */ 12); + + return new ArrowFunctionExpression($this->parseExpression(0), new Node($names), $line); + } + + private function getPrimary(): AbstractExpression + { + $token = $this->parser->getCurrentToken(); + + if ($this->isUnary($token)) { + $operator = $this->unaryOperators[$token->getValue()]; + $this->parser->getStream()->next(); + $expr = $this->parseExpression($operator['precedence']); + $class = $operator['class']; + + return $this->parsePostfixExpression(new $class($expr, $token->getLine())); + } elseif ($token->test(/* Token::PUNCTUATION_TYPE */ 9, '(')) { + $this->parser->getStream()->next(); + $expr = $this->parseExpression(); + $this->parser->getStream()->expect(/* Token::PUNCTUATION_TYPE */ 9, ')', 'An opened parenthesis is not properly closed'); + + return $this->parsePostfixExpression($expr); + } + + return $this->parsePrimaryExpression(); + } + + private function parseConditionalExpression($expr): AbstractExpression + { + while ($this->parser->getStream()->nextIf(/* Token::PUNCTUATION_TYPE */ 9, '?')) { + if (!$this->parser->getStream()->nextIf(/* Token::PUNCTUATION_TYPE */ 9, ':')) { + $expr2 = $this->parseExpression(); + if ($this->parser->getStream()->nextIf(/* Token::PUNCTUATION_TYPE */ 9, ':')) { + $expr3 = $this->parseExpression(); + } else { + $expr3 = new ConstantExpression('', $this->parser->getCurrentToken()->getLine()); + } + } else { + $expr2 = $expr; + $expr3 = $this->parseExpression(); + } + + $expr = new ConditionalExpression($expr, $expr2, $expr3, $this->parser->getCurrentToken()->getLine()); + } + + return $expr; + } + + private function isUnary(Token $token): bool + { + return $token->test(/* Token::OPERATOR_TYPE */ 8) && isset($this->unaryOperators[$token->getValue()]); + } + + private function isBinary(Token $token): bool + { + return $token->test(/* Token::OPERATOR_TYPE */ 8) && isset($this->binaryOperators[$token->getValue()]); + } + + public function parsePrimaryExpression() + { + $token = $this->parser->getCurrentToken(); + switch ($token->getType()) { + case /* Token::NAME_TYPE */ 5: + $this->parser->getStream()->next(); + switch ($token->getValue()) { + case 'true': + case 'TRUE': + $node = new ConstantExpression(true, $token->getLine()); + break; + + case 'false': + case 'FALSE': + $node = new ConstantExpression(false, $token->getLine()); + break; + + case 'none': + case 'NONE': + case 'null': + case 'NULL': + $node = new ConstantExpression(null, $token->getLine()); + break; + + default: + if ('(' === $this->parser->getCurrentToken()->getValue()) { + $node = $this->getFunctionNode($token->getValue(), $token->getLine()); + } else { + $node = new NameExpression($token->getValue(), $token->getLine()); + } + } + break; + + case /* Token::NUMBER_TYPE */ 6: + $this->parser->getStream()->next(); + $node = new ConstantExpression($token->getValue(), $token->getLine()); + break; + + case /* Token::STRING_TYPE */ 7: + case /* Token::INTERPOLATION_START_TYPE */ 10: + $node = $this->parseStringExpression(); + break; + + case /* Token::OPERATOR_TYPE */ 8: + if (preg_match(Lexer::REGEX_NAME, $token->getValue(), $matches) && $matches[0] == $token->getValue()) { + // in this context, string operators are variable names + $this->parser->getStream()->next(); + $node = new NameExpression($token->getValue(), $token->getLine()); + break; + } elseif (isset($this->unaryOperators[$token->getValue()])) { + $class = $this->unaryOperators[$token->getValue()]['class']; + if (!\in_array($class, [NegUnary::class, PosUnary::class])) { + throw new SyntaxError(sprintf('Unexpected unary operator "%s".', $token->getValue()), $token->getLine(), $this->parser->getStream()->getSourceContext()); + } + + $this->parser->getStream()->next(); + $expr = $this->parsePrimaryExpression(); + + $node = new $class($expr, $token->getLine()); + break; + } + + // no break + default: + if ($token->test(/* Token::PUNCTUATION_TYPE */ 9, '[')) { + $node = $this->parseArrayExpression(); + } elseif ($token->test(/* Token::PUNCTUATION_TYPE */ 9, '{')) { + $node = $this->parseHashExpression(); + } elseif ($token->test(/* Token::OPERATOR_TYPE */ 8, '=') && ('==' === $this->parser->getStream()->look(-1)->getValue() || '!=' === $this->parser->getStream()->look(-1)->getValue())) { + throw new SyntaxError(sprintf('Unexpected operator of value "%s". Did you try to use "===" or "!==" for strict comparison? Use "is same as(value)" instead.', $token->getValue()), $token->getLine(), $this->parser->getStream()->getSourceContext()); + } else { + throw new SyntaxError(sprintf('Unexpected token "%s" of value "%s".', Token::typeToEnglish($token->getType()), $token->getValue()), $token->getLine(), $this->parser->getStream()->getSourceContext()); + } + } + + return $this->parsePostfixExpression($node); + } + + public function parseStringExpression() + { + $stream = $this->parser->getStream(); + + $nodes = []; + // a string cannot be followed by another string in a single expression + $nextCanBeString = true; + while (true) { + if ($nextCanBeString && $token = $stream->nextIf(/* Token::STRING_TYPE */ 7)) { + $nodes[] = new ConstantExpression($token->getValue(), $token->getLine()); + $nextCanBeString = false; + } elseif ($stream->nextIf(/* Token::INTERPOLATION_START_TYPE */ 10)) { + $nodes[] = $this->parseExpression(); + $stream->expect(/* Token::INTERPOLATION_END_TYPE */ 11); + $nextCanBeString = true; + } else { + break; + } + } + + $expr = array_shift($nodes); + foreach ($nodes as $node) { + $expr = new ConcatBinary($expr, $node, $node->getTemplateLine()); + } + + return $expr; + } + + public function parseArrayExpression() + { + $stream = $this->parser->getStream(); + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, '[', 'An array element was expected'); + + $node = new ArrayExpression([], $stream->getCurrent()->getLine()); + $first = true; + while (!$stream->test(/* Token::PUNCTUATION_TYPE */ 9, ']')) { + if (!$first) { + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, ',', 'An array element must be followed by a comma'); + + // trailing ,? + if ($stream->test(/* Token::PUNCTUATION_TYPE */ 9, ']')) { + break; + } + } + $first = false; + + $node->addElement($this->parseExpression()); + } + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, ']', 'An opened array is not properly closed'); + + return $node; + } + + public function parseHashExpression() + { + $stream = $this->parser->getStream(); + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, '{', 'A hash element was expected'); + + $node = new ArrayExpression([], $stream->getCurrent()->getLine()); + $first = true; + while (!$stream->test(/* Token::PUNCTUATION_TYPE */ 9, '}')) { + if (!$first) { + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, ',', 'A hash value must be followed by a comma'); + + // trailing ,? + if ($stream->test(/* Token::PUNCTUATION_TYPE */ 9, '}')) { + break; + } + } + $first = false; + + // a hash key can be: + // + // * a number -- 12 + // * a string -- 'a' + // * a name, which is equivalent to a string -- a + // * an expression, which must be enclosed in parentheses -- (1 + 2) + if (($token = $stream->nextIf(/* Token::STRING_TYPE */ 7)) || ($token = $stream->nextIf(/* Token::NAME_TYPE */ 5)) || $token = $stream->nextIf(/* Token::NUMBER_TYPE */ 6)) { + $key = new ConstantExpression($token->getValue(), $token->getLine()); + } elseif ($stream->test(/* Token::PUNCTUATION_TYPE */ 9, '(')) { + $key = $this->parseExpression(); + } else { + $current = $stream->getCurrent(); + + throw new SyntaxError(sprintf('A hash key must be a quoted string, a number, a name, or an expression enclosed in parentheses (unexpected token "%s" of value "%s".', Token::typeToEnglish($current->getType()), $current->getValue()), $current->getLine(), $stream->getSourceContext()); + } + + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, ':', 'A hash key must be followed by a colon (:)'); + $value = $this->parseExpression(); + + $node->addElement($value, $key); + } + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, '}', 'An opened hash is not properly closed'); + + return $node; + } + + public function parsePostfixExpression($node) + { + while (true) { + $token = $this->parser->getCurrentToken(); + if (/* Token::PUNCTUATION_TYPE */ 9 == $token->getType()) { + if ('.' == $token->getValue() || '[' == $token->getValue()) { + $node = $this->parseSubscriptExpression($node); + } elseif ('|' == $token->getValue()) { + $node = $this->parseFilterExpression($node); + } else { + break; + } + } else { + break; + } + } + + return $node; + } + + public function getFunctionNode($name, $line) + { + switch ($name) { + case 'parent': + $this->parseArguments(); + if (!\count($this->parser->getBlockStack())) { + throw new SyntaxError('Calling "parent" outside a block is forbidden.', $line, $this->parser->getStream()->getSourceContext()); + } + + if (!$this->parser->getParent() && !$this->parser->hasTraits()) { + throw new SyntaxError('Calling "parent" on a template that does not extend nor "use" another template is forbidden.', $line, $this->parser->getStream()->getSourceContext()); + } + + return new ParentExpression($this->parser->peekBlockStack(), $line); + case 'block': + $args = $this->parseArguments(); + if (\count($args) < 1) { + throw new SyntaxError('The "block" function takes one argument (the block name).', $line, $this->parser->getStream()->getSourceContext()); + } + + return new BlockReferenceExpression($args->getNode(0), \count($args) > 1 ? $args->getNode(1) : null, $line); + case 'attribute': + $args = $this->parseArguments(); + if (\count($args) < 2) { + throw new SyntaxError('The "attribute" function takes at least two arguments (the variable and the attributes).', $line, $this->parser->getStream()->getSourceContext()); + } + + return new GetAttrExpression($args->getNode(0), $args->getNode(1), \count($args) > 2 ? $args->getNode(2) : null, Template::ANY_CALL, $line); + default: + if (null !== $alias = $this->parser->getImportedSymbol('function', $name)) { + $arguments = new ArrayExpression([], $line); + foreach ($this->parseArguments() as $n) { + $arguments->addElement($n); + } + + $node = new MethodCallExpression($alias['node'], $alias['name'], $arguments, $line); + $node->setAttribute('safe', true); + + return $node; + } + + $args = $this->parseArguments(true); + $class = $this->getFunctionNodeClass($name, $line); + + return new $class($name, $args, $line); + } + } + + public function parseSubscriptExpression($node) + { + $stream = $this->parser->getStream(); + $token = $stream->next(); + $lineno = $token->getLine(); + $arguments = new ArrayExpression([], $lineno); + $type = Template::ANY_CALL; + if ('.' == $token->getValue()) { + $token = $stream->next(); + if ( + /* Token::NAME_TYPE */ 5 == $token->getType() + || + /* Token::NUMBER_TYPE */ 6 == $token->getType() + || + (/* Token::OPERATOR_TYPE */ 8 == $token->getType() && preg_match(Lexer::REGEX_NAME, $token->getValue())) + ) { + $arg = new ConstantExpression($token->getValue(), $lineno); + + if ($stream->test(/* Token::PUNCTUATION_TYPE */ 9, '(')) { + $type = Template::METHOD_CALL; + foreach ($this->parseArguments() as $n) { + $arguments->addElement($n); + } + } + } else { + throw new SyntaxError('Expected name or number.', $lineno, $stream->getSourceContext()); + } + + if ($node instanceof NameExpression && null !== $this->parser->getImportedSymbol('template', $node->getAttribute('name'))) { + if (!$arg instanceof ConstantExpression) { + throw new SyntaxError(sprintf('Dynamic macro names are not supported (called on "%s").', $node->getAttribute('name')), $token->getLine(), $stream->getSourceContext()); + } + + $name = $arg->getAttribute('value'); + + $node = new MethodCallExpression($node, 'macro_'.$name, $arguments, $lineno); + $node->setAttribute('safe', true); + + return $node; + } + } else { + $type = Template::ARRAY_CALL; + + // slice? + $slice = false; + if ($stream->test(/* Token::PUNCTUATION_TYPE */ 9, ':')) { + $slice = true; + $arg = new ConstantExpression(0, $token->getLine()); + } else { + $arg = $this->parseExpression(); + } + + if ($stream->nextIf(/* Token::PUNCTUATION_TYPE */ 9, ':')) { + $slice = true; + } + + if ($slice) { + if ($stream->test(/* Token::PUNCTUATION_TYPE */ 9, ']')) { + $length = new ConstantExpression(null, $token->getLine()); + } else { + $length = $this->parseExpression(); + } + + $class = $this->getFilterNodeClass('slice', $token->getLine()); + $arguments = new Node([$arg, $length]); + $filter = new $class($node, new ConstantExpression('slice', $token->getLine()), $arguments, $token->getLine()); + + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, ']'); + + return $filter; + } + + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, ']'); + } + + return new GetAttrExpression($node, $arg, $arguments, $type, $lineno); + } + + public function parseFilterExpression($node) + { + $this->parser->getStream()->next(); + + return $this->parseFilterExpressionRaw($node); + } + + public function parseFilterExpressionRaw($node, $tag = null) + { + while (true) { + $token = $this->parser->getStream()->expect(/* Token::NAME_TYPE */ 5); + + $name = new ConstantExpression($token->getValue(), $token->getLine()); + if (!$this->parser->getStream()->test(/* Token::PUNCTUATION_TYPE */ 9, '(')) { + $arguments = new Node(); + } else { + $arguments = $this->parseArguments(true, false, true); + } + + $class = $this->getFilterNodeClass($name->getAttribute('value'), $token->getLine()); + + $node = new $class($node, $name, $arguments, $token->getLine(), $tag); + + if (!$this->parser->getStream()->test(/* Token::PUNCTUATION_TYPE */ 9, '|')) { + break; + } + + $this->parser->getStream()->next(); + } + + return $node; + } + + /** + * Parses arguments. + * + * @param bool $namedArguments Whether to allow named arguments or not + * @param bool $definition Whether we are parsing arguments for a function definition + * + * @return Node + * + * @throws SyntaxError + */ + public function parseArguments($namedArguments = false, $definition = false, $allowArrow = false) + { + $args = []; + $stream = $this->parser->getStream(); + + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, '(', 'A list of arguments must begin with an opening parenthesis'); + while (!$stream->test(/* Token::PUNCTUATION_TYPE */ 9, ')')) { + if (!empty($args)) { + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, ',', 'Arguments must be separated by a comma'); + } + + if ($definition) { + $token = $stream->expect(/* Token::NAME_TYPE */ 5, null, 'An argument must be a name'); + $value = new NameExpression($token->getValue(), $this->parser->getCurrentToken()->getLine()); + } else { + $value = $this->parseExpression(0, $allowArrow); + } + + $name = null; + if ($namedArguments && $token = $stream->nextIf(/* Token::OPERATOR_TYPE */ 8, '=')) { + if (!$value instanceof NameExpression) { + throw new SyntaxError(sprintf('A parameter name must be a string, "%s" given.', \get_class($value)), $token->getLine(), $stream->getSourceContext()); + } + $name = $value->getAttribute('name'); + + if ($definition) { + $value = $this->parsePrimaryExpression(); + + if (!$this->checkConstantExpression($value)) { + throw new SyntaxError(sprintf('A default value for an argument must be a constant (a boolean, a string, a number, or an array).'), $token->getLine(), $stream->getSourceContext()); + } + } else { + $value = $this->parseExpression(0, $allowArrow); + } + } + + if ($definition) { + if (null === $name) { + $name = $value->getAttribute('name'); + $value = new ConstantExpression(null, $this->parser->getCurrentToken()->getLine()); + } + $args[$name] = $value; + } else { + if (null === $name) { + $args[] = $value; + } else { + $args[$name] = $value; + } + } + } + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, ')', 'A list of arguments must be closed by a parenthesis'); + + return new Node($args); + } + + public function parseAssignmentExpression() + { + $stream = $this->parser->getStream(); + $targets = []; + while (true) { + $token = $this->parser->getCurrentToken(); + if ($stream->test(/* Token::OPERATOR_TYPE */ 8) && preg_match(Lexer::REGEX_NAME, $token->getValue())) { + // in this context, string operators are variable names + $this->parser->getStream()->next(); + } else { + $stream->expect(/* Token::NAME_TYPE */ 5, null, 'Only variables can be assigned to'); + } + $value = $token->getValue(); + if (\in_array(strtr($value, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), ['true', 'false', 'none', 'null'])) { + throw new SyntaxError(sprintf('You cannot assign a value to "%s".', $value), $token->getLine(), $stream->getSourceContext()); + } + $targets[] = new AssignNameExpression($value, $token->getLine()); + + if (!$stream->nextIf(/* Token::PUNCTUATION_TYPE */ 9, ',')) { + break; + } + } + + return new Node($targets); + } + + public function parseMultitargetExpression() + { + $targets = []; + while (true) { + $targets[] = $this->parseExpression(); + if (!$this->parser->getStream()->nextIf(/* Token::PUNCTUATION_TYPE */ 9, ',')) { + break; + } + } + + return new Node($targets); + } + + private function parseNotTestExpression(Node $node): NotUnary + { + return new NotUnary($this->parseTestExpression($node), $this->parser->getCurrentToken()->getLine()); + } + + private function parseTestExpression(Node $node): TestExpression + { + $stream = $this->parser->getStream(); + list($name, $test) = $this->getTest($node->getTemplateLine()); + + $class = $this->getTestNodeClass($test); + $arguments = null; + if ($stream->test(/* Token::PUNCTUATION_TYPE */ 9, '(')) { + $arguments = $this->parseArguments(true); + } + + if ('defined' === $name && $node instanceof NameExpression && null !== $alias = $this->parser->getImportedSymbol('function', $node->getAttribute('name'))) { + $node = new MethodCallExpression($alias['node'], $alias['name'], new ArrayExpression([], $node->getTemplateLine()), $node->getTemplateLine()); + $node->setAttribute('safe', true); + } + + return new $class($node, $name, $arguments, $this->parser->getCurrentToken()->getLine()); + } + + private function getTest(int $line): array + { + $stream = $this->parser->getStream(); + $name = $stream->expect(/* Token::NAME_TYPE */ 5)->getValue(); + + if ($test = $this->env->getTest($name)) { + return [$name, $test]; + } + + if ($stream->test(/* Token::NAME_TYPE */ 5)) { + // try 2-words tests + $name = $name.' '.$this->parser->getCurrentToken()->getValue(); + + if ($test = $this->env->getTest($name)) { + $stream->next(); + + return [$name, $test]; + } + } + + $e = new SyntaxError(sprintf('Unknown "%s" test.', $name), $line, $stream->getSourceContext()); + $e->addSuggestions($name, array_keys($this->env->getTests())); + + throw $e; + } + + private function getTestNodeClass(TwigTest $test): string + { + if ($test->isDeprecated()) { + $stream = $this->parser->getStream(); + $message = sprintf('Twig Test "%s" is deprecated', $test->getName()); + + if ($test->getDeprecatedVersion()) { + $message .= sprintf(' since version %s', $test->getDeprecatedVersion()); + } + if ($test->getAlternative()) { + $message .= sprintf('. Use "%s" instead', $test->getAlternative()); + } + $src = $stream->getSourceContext(); + $message .= sprintf(' in %s at line %d.', $src->getPath() ?: $src->getName(), $stream->getCurrent()->getLine()); + + @trigger_error($message, E_USER_DEPRECATED); + } + + return $test->getNodeClass(); + } + + private function getFunctionNodeClass(string $name, int $line): string + { + if (!$function = $this->env->getFunction($name)) { + $e = new SyntaxError(sprintf('Unknown "%s" function.', $name), $line, $this->parser->getStream()->getSourceContext()); + $e->addSuggestions($name, array_keys($this->env->getFunctions())); + + throw $e; + } + + if ($function->isDeprecated()) { + $message = sprintf('Twig Function "%s" is deprecated', $function->getName()); + if ($function->getDeprecatedVersion()) { + $message .= sprintf(' since version %s', $function->getDeprecatedVersion()); + } + if ($function->getAlternative()) { + $message .= sprintf('. Use "%s" instead', $function->getAlternative()); + } + $src = $this->parser->getStream()->getSourceContext(); + $message .= sprintf(' in %s at line %d.', $src->getPath() ?: $src->getName(), $line); + + @trigger_error($message, E_USER_DEPRECATED); + } + + return $function->getNodeClass(); + } + + private function getFilterNodeClass(string $name, int $line): string + { + if (!$filter = $this->env->getFilter($name)) { + $e = new SyntaxError(sprintf('Unknown "%s" filter.', $name), $line, $this->parser->getStream()->getSourceContext()); + $e->addSuggestions($name, array_keys($this->env->getFilters())); + + throw $e; + } + + if ($filter->isDeprecated()) { + $message = sprintf('Twig Filter "%s" is deprecated', $filter->getName()); + if ($filter->getDeprecatedVersion()) { + $message .= sprintf(' since version %s', $filter->getDeprecatedVersion()); + } + if ($filter->getAlternative()) { + $message .= sprintf('. Use "%s" instead', $filter->getAlternative()); + } + $src = $this->parser->getStream()->getSourceContext(); + $message .= sprintf(' in %s at line %d.', $src->getPath() ?: $src->getName(), $line); + + @trigger_error($message, E_USER_DEPRECATED); + } + + return $filter->getNodeClass(); + } + + // checks that the node only contains "constant" elements + private function checkConstantExpression(Node $node): bool + { + if (!($node instanceof ConstantExpression || $node instanceof ArrayExpression + || $node instanceof NegUnary || $node instanceof PosUnary + )) { + return false; + } + + foreach ($node as $n) { + if (!$this->checkConstantExpression($n)) { + return false; + } + } + + return true; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/AbstractExtension.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/AbstractExtension.php new file mode 100644 index 0000000..422925f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/AbstractExtension.php @@ -0,0 +1,45 @@ +dateFormats[0] = $format; + } + + if (null !== $dateIntervalFormat) { + $this->dateFormats[1] = $dateIntervalFormat; + } + } + + /** + * Gets the default format to be used by the date filter. + * + * @return array The default date format string and the default date interval format string + */ + public function getDateFormat() + { + return $this->dateFormats; + } + + /** + * Sets the default timezone to be used by the date filter. + * + * @param \DateTimeZone|string $timezone The default timezone string or a \DateTimeZone object + */ + public function setTimezone($timezone) + { + $this->timezone = $timezone instanceof \DateTimeZone ? $timezone : new \DateTimeZone($timezone); + } + + /** + * Gets the default timezone to be used by the date filter. + * + * @return \DateTimeZone The default timezone currently in use + */ + public function getTimezone() + { + if (null === $this->timezone) { + $this->timezone = new \DateTimeZone(date_default_timezone_get()); + } + + return $this->timezone; + } + + /** + * Sets the default format to be used by the number_format filter. + * + * @param int $decimal the number of decimal places to use + * @param string $decimalPoint the character(s) to use for the decimal point + * @param string $thousandSep the character(s) to use for the thousands separator + */ + public function setNumberFormat($decimal, $decimalPoint, $thousandSep) + { + $this->numberFormat = [$decimal, $decimalPoint, $thousandSep]; + } + + /** + * Get the default format used by the number_format filter. + * + * @return array The arguments for number_format() + */ + public function getNumberFormat() + { + return $this->numberFormat; + } + + public function getTokenParsers(): array + { + return [ + new ApplyTokenParser(), + new ForTokenParser(), + new IfTokenParser(), + new ExtendsTokenParser(), + new IncludeTokenParser(), + new BlockTokenParser(), + new UseTokenParser(), + new MacroTokenParser(), + new ImportTokenParser(), + new FromTokenParser(), + new SetTokenParser(), + new FlushTokenParser(), + new DoTokenParser(), + new EmbedTokenParser(), + new WithTokenParser(), + new DeprecatedTokenParser(), + ]; + } + + public function getFilters(): array + { + return [ + // formatting filters + new TwigFilter('date', 'twig_date_format_filter', ['needs_environment' => true]), + new TwigFilter('date_modify', 'twig_date_modify_filter', ['needs_environment' => true]), + new TwigFilter('format', 'sprintf'), + new TwigFilter('replace', 'twig_replace_filter'), + new TwigFilter('number_format', 'twig_number_format_filter', ['needs_environment' => true]), + new TwigFilter('abs', 'abs'), + new TwigFilter('round', 'twig_round'), + + // encoding + new TwigFilter('url_encode', 'twig_urlencode_filter'), + new TwigFilter('json_encode', 'json_encode'), + new TwigFilter('convert_encoding', 'twig_convert_encoding'), + + // string filters + new TwigFilter('title', 'twig_title_string_filter', ['needs_environment' => true]), + new TwigFilter('capitalize', 'twig_capitalize_string_filter', ['needs_environment' => true]), + new TwigFilter('upper', 'twig_upper_filter', ['needs_environment' => true]), + new TwigFilter('lower', 'twig_lower_filter', ['needs_environment' => true]), + new TwigFilter('striptags', 'strip_tags'), + new TwigFilter('trim', 'twig_trim_filter'), + new TwigFilter('nl2br', 'nl2br', ['pre_escape' => 'html', 'is_safe' => ['html']]), + new TwigFilter('spaceless', 'twig_spaceless', ['is_safe' => ['html']]), + + // array helpers + new TwigFilter('join', 'twig_join_filter'), + new TwigFilter('split', 'twig_split_filter', ['needs_environment' => true]), + new TwigFilter('sort', 'twig_sort_filter'), + new TwigFilter('merge', 'twig_array_merge'), + new TwigFilter('batch', 'twig_array_batch'), + new TwigFilter('column', 'twig_array_column'), + new TwigFilter('filter', 'twig_array_filter'), + new TwigFilter('map', 'twig_array_map'), + new TwigFilter('reduce', 'twig_array_reduce'), + + // string/array filters + new TwigFilter('reverse', 'twig_reverse_filter', ['needs_environment' => true]), + new TwigFilter('length', 'twig_length_filter', ['needs_environment' => true]), + new TwigFilter('slice', 'twig_slice', ['needs_environment' => true]), + new TwigFilter('first', 'twig_first', ['needs_environment' => true]), + new TwigFilter('last', 'twig_last', ['needs_environment' => true]), + + // iteration and runtime + new TwigFilter('default', '_twig_default_filter', ['node_class' => DefaultFilter::class]), + new TwigFilter('keys', 'twig_get_array_keys_filter'), + ]; + } + + public function getFunctions(): array + { + return [ + new TwigFunction('max', 'max'), + new TwigFunction('min', 'min'), + new TwigFunction('range', 'range'), + new TwigFunction('constant', 'twig_constant'), + new TwigFunction('cycle', 'twig_cycle'), + new TwigFunction('random', 'twig_random', ['needs_environment' => true]), + new TwigFunction('date', 'twig_date_converter', ['needs_environment' => true]), + new TwigFunction('include', 'twig_include', ['needs_environment' => true, 'needs_context' => true, 'is_safe' => ['all']]), + new TwigFunction('source', 'twig_source', ['needs_environment' => true, 'is_safe' => ['all']]), + ]; + } + + public function getTests(): array + { + return [ + new TwigTest('even', null, ['node_class' => EvenTest::class]), + new TwigTest('odd', null, ['node_class' => OddTest::class]), + new TwigTest('defined', null, ['node_class' => DefinedTest::class]), + new TwigTest('same as', null, ['node_class' => SameasTest::class]), + new TwigTest('none', null, ['node_class' => NullTest::class]), + new TwigTest('null', null, ['node_class' => NullTest::class]), + new TwigTest('divisible by', null, ['node_class' => DivisiblebyTest::class]), + new TwigTest('constant', null, ['node_class' => ConstantTest::class]), + new TwigTest('empty', 'twig_test_empty'), + new TwigTest('iterable', 'twig_test_iterable'), + ]; + } + + public function getNodeVisitors(): array + { + return [new MacroAutoImportNodeVisitor()]; + } + + public function getOperators(): array + { + return [ + [ + 'not' => ['precedence' => 50, 'class' => NotUnary::class], + '-' => ['precedence' => 500, 'class' => NegUnary::class], + '+' => ['precedence' => 500, 'class' => PosUnary::class], + ], + [ + 'or' => ['precedence' => 10, 'class' => OrBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'and' => ['precedence' => 15, 'class' => AndBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'b-or' => ['precedence' => 16, 'class' => BitwiseOrBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'b-xor' => ['precedence' => 17, 'class' => BitwiseXorBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'b-and' => ['precedence' => 18, 'class' => BitwiseAndBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '==' => ['precedence' => 20, 'class' => EqualBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '!=' => ['precedence' => 20, 'class' => NotEqualBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '<=>' => ['precedence' => 20, 'class' => SpaceshipBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '<' => ['precedence' => 20, 'class' => LessBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '>' => ['precedence' => 20, 'class' => GreaterBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '>=' => ['precedence' => 20, 'class' => GreaterEqualBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '<=' => ['precedence' => 20, 'class' => LessEqualBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'not in' => ['precedence' => 20, 'class' => NotInBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'in' => ['precedence' => 20, 'class' => InBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'matches' => ['precedence' => 20, 'class' => MatchesBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'starts with' => ['precedence' => 20, 'class' => StartsWithBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'ends with' => ['precedence' => 20, 'class' => EndsWithBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '..' => ['precedence' => 25, 'class' => RangeBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '+' => ['precedence' => 30, 'class' => AddBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '-' => ['precedence' => 30, 'class' => SubBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '~' => ['precedence' => 40, 'class' => ConcatBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '*' => ['precedence' => 60, 'class' => MulBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '/' => ['precedence' => 60, 'class' => DivBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '//' => ['precedence' => 60, 'class' => FloorDivBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '%' => ['precedence' => 60, 'class' => ModBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'is' => ['precedence' => 100, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'is not' => ['precedence' => 100, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '**' => ['precedence' => 200, 'class' => PowerBinary::class, 'associativity' => ExpressionParser::OPERATOR_RIGHT], + '??' => ['precedence' => 300, 'class' => NullCoalesceExpression::class, 'associativity' => ExpressionParser::OPERATOR_RIGHT], + ], + ]; + } +} +} + +namespace { + use Twig\Environment; + use Twig\Error\LoaderError; + use Twig\Error\RuntimeError; + use Twig\Extension\CoreExtension; + use Twig\Extension\SandboxExtension; + use Twig\Markup; + use Twig\Source; + use Twig\Template; + + /** + * Cycles over a value. + * + * @param \ArrayAccess|array $values + * @param int $position The cycle position + * + * @return string The next value in the cycle + */ +function twig_cycle($values, $position) +{ + if (!\is_array($values) && !$values instanceof \ArrayAccess) { + return $values; + } + + return $values[$position % \count($values)]; +} + +/** + * Returns a random value depending on the supplied parameter type: + * - a random item from a \Traversable or array + * - a random character from a string + * - a random integer between 0 and the integer parameter. + * + * @param \Traversable|array|int|float|string $values The values to pick a random item from + * @param int|null $max Maximum value used when $values is an int + * + * @throws RuntimeError when $values is an empty array (does not apply to an empty string which is returned as is) + * + * @return mixed A random value from the given sequence + */ +function twig_random(Environment $env, $values = null, $max = null) +{ + if (null === $values) { + return null === $max ? mt_rand() : mt_rand(0, $max); + } + + if (\is_int($values) || \is_float($values)) { + if (null === $max) { + if ($values < 0) { + $max = 0; + $min = $values; + } else { + $max = $values; + $min = 0; + } + } else { + $min = $values; + $max = $max; + } + + return mt_rand($min, $max); + } + + if (\is_string($values)) { + if ('' === $values) { + return ''; + } + + $charset = $env->getCharset(); + + if ('UTF-8' !== $charset) { + $values = twig_convert_encoding($values, 'UTF-8', $charset); + } + + // unicode version of str_split() + // split at all positions, but not after the start and not before the end + $values = preg_split('/(? $value) { + $values[$i] = twig_convert_encoding($value, $charset, 'UTF-8'); + } + } + } + + if (!twig_test_iterable($values)) { + return $values; + } + + $values = twig_to_array($values); + + if (0 === \count($values)) { + throw new RuntimeError('The random function cannot pick from an empty array.'); + } + + return $values[array_rand($values, 1)]; +} + +/** + * Converts a date to the given format. + * + * {{ post.published_at|date("m/d/Y") }} + * + * @param \DateTimeInterface|\DateInterval|string $date A date + * @param string|null $format The target format, null to use the default + * @param \DateTimeZone|string|false|null $timezone The target timezone, null to use the default, false to leave unchanged + * + * @return string The formatted date + */ +function twig_date_format_filter(Environment $env, $date, $format = null, $timezone = null) +{ + if (null === $format) { + $formats = $env->getExtension(CoreExtension::class)->getDateFormat(); + $format = $date instanceof \DateInterval ? $formats[1] : $formats[0]; + } + + if ($date instanceof \DateInterval) { + return $date->format($format); + } + + return twig_date_converter($env, $date, $timezone)->format($format); +} + +/** + * Returns a new date object modified. + * + * {{ post.published_at|date_modify("-1day")|date("m/d/Y") }} + * + * @param \DateTimeInterface|string $date A date + * @param string $modifier A modifier string + * + * @return \DateTimeInterface + */ +function twig_date_modify_filter(Environment $env, $date, $modifier) +{ + $date = twig_date_converter($env, $date, false); + + return $date->modify($modifier); +} + +/** + * Converts an input to a \DateTime instance. + * + * {% if date(user.created_at) < date('+2days') %} + * {# do something #} + * {% endif %} + * + * @param \DateTimeInterface|string|null $date A date or null to use the current time + * @param \DateTimeZone|string|false|null $timezone The target timezone, null to use the default, false to leave unchanged + * + * @return \DateTimeInterface + */ +function twig_date_converter(Environment $env, $date = null, $timezone = null) +{ + // determine the timezone + if (false !== $timezone) { + if (null === $timezone) { + $timezone = $env->getExtension(CoreExtension::class)->getTimezone(); + } elseif (!$timezone instanceof \DateTimeZone) { + $timezone = new \DateTimeZone($timezone); + } + } + + // immutable dates + if ($date instanceof \DateTimeImmutable) { + return false !== $timezone ? $date->setTimezone($timezone) : $date; + } + + if ($date instanceof \DateTimeInterface) { + $date = clone $date; + if (false !== $timezone) { + $date->setTimezone($timezone); + } + + return $date; + } + + if (null === $date || 'now' === $date) { + return new \DateTime($date, false !== $timezone ? $timezone : $env->getExtension(CoreExtension::class)->getTimezone()); + } + + $asString = (string) $date; + if (ctype_digit($asString) || (!empty($asString) && '-' === $asString[0] && ctype_digit(substr($asString, 1)))) { + $date = new \DateTime('@'.$date); + } else { + $date = new \DateTime($date, $env->getExtension(CoreExtension::class)->getTimezone()); + } + + if (false !== $timezone) { + $date->setTimezone($timezone); + } + + return $date; +} + +/** + * Replaces strings within a string. + * + * @param string $str String to replace in + * @param array|\Traversable $from Replace values + * + * @return string + */ +function twig_replace_filter($str, $from) +{ + if (!twig_test_iterable($from)) { + throw new RuntimeError(sprintf('The "replace" filter expects an array or "Traversable" as replace values, got "%s".', \is_object($from) ? \get_class($from) : \gettype($from))); + } + + return strtr($str, twig_to_array($from)); +} + +/** + * Rounds a number. + * + * @param int|float $value The value to round + * @param int|float $precision The rounding precision + * @param string $method The method to use for rounding + * + * @return int|float The rounded number + */ +function twig_round($value, $precision = 0, $method = 'common') +{ + if ('common' == $method) { + return round($value, $precision); + } + + if ('ceil' != $method && 'floor' != $method) { + throw new RuntimeError('The round filter only supports the "common", "ceil", and "floor" methods.'); + } + + return $method($value * pow(10, $precision)) / pow(10, $precision); +} + +/** + * Number format filter. + * + * All of the formatting options can be left null, in that case the defaults will + * be used. Supplying any of the parameters will override the defaults set in the + * environment object. + * + * @param mixed $number A float/int/string of the number to format + * @param int $decimal the number of decimal points to display + * @param string $decimalPoint the character(s) to use for the decimal point + * @param string $thousandSep the character(s) to use for the thousands separator + * + * @return string The formatted number + */ +function twig_number_format_filter(Environment $env, $number, $decimal = null, $decimalPoint = null, $thousandSep = null) +{ + $defaults = $env->getExtension(CoreExtension::class)->getNumberFormat(); + if (null === $decimal) { + $decimal = $defaults[0]; + } + + if (null === $decimalPoint) { + $decimalPoint = $defaults[1]; + } + + if (null === $thousandSep) { + $thousandSep = $defaults[2]; + } + + return number_format((float) $number, $decimal, $decimalPoint, $thousandSep); +} + +/** + * URL encodes (RFC 3986) a string as a path segment or an array as a query string. + * + * @param string|array $url A URL or an array of query parameters + * + * @return string The URL encoded value + */ +function twig_urlencode_filter($url) +{ + if (\is_array($url)) { + return http_build_query($url, '', '&', PHP_QUERY_RFC3986); + } + + return rawurlencode($url); +} + +/** + * Merges an array with another one. + * + * {% set items = { 'apple': 'fruit', 'orange': 'fruit' } %} + * + * {% set items = items|merge({ 'peugeot': 'car' }) %} + * + * {# items now contains { 'apple': 'fruit', 'orange': 'fruit', 'peugeot': 'car' } #} + * + * @param array|\Traversable $arr1 An array + * @param array|\Traversable $arr2 An array + * + * @return array The merged array + */ +function twig_array_merge($arr1, $arr2) +{ + if (!twig_test_iterable($arr1)) { + throw new RuntimeError(sprintf('The merge filter only works with arrays or "Traversable", got "%s" as first argument.', \gettype($arr1))); + } + + if (!twig_test_iterable($arr2)) { + throw new RuntimeError(sprintf('The merge filter only works with arrays or "Traversable", got "%s" as second argument.', \gettype($arr2))); + } + + return array_merge(twig_to_array($arr1), twig_to_array($arr2)); +} + +/** + * Slices a variable. + * + * @param mixed $item A variable + * @param int $start Start of the slice + * @param int $length Size of the slice + * @param bool $preserveKeys Whether to preserve key or not (when the input is an array) + * + * @return mixed The sliced variable + */ +function twig_slice(Environment $env, $item, $start, $length = null, $preserveKeys = false) +{ + if ($item instanceof \Traversable) { + while ($item instanceof \IteratorAggregate) { + $item = $item->getIterator(); + } + + if ($start >= 0 && $length >= 0 && $item instanceof \Iterator) { + try { + return iterator_to_array(new \LimitIterator($item, $start, null === $length ? -1 : $length), $preserveKeys); + } catch (\OutOfBoundsException $e) { + return []; + } + } + + $item = iterator_to_array($item, $preserveKeys); + } + + if (\is_array($item)) { + return \array_slice($item, $start, $length, $preserveKeys); + } + + $item = (string) $item; + + return (string) mb_substr($item, $start, $length, $env->getCharset()); +} + +/** + * Returns the first element of the item. + * + * @param mixed $item A variable + * + * @return mixed The first element of the item + */ +function twig_first(Environment $env, $item) +{ + $elements = twig_slice($env, $item, 0, 1, false); + + return \is_string($elements) ? $elements : current($elements); +} + +/** + * Returns the last element of the item. + * + * @param mixed $item A variable + * + * @return mixed The last element of the item + */ +function twig_last(Environment $env, $item) +{ + $elements = twig_slice($env, $item, -1, 1, false); + + return \is_string($elements) ? $elements : current($elements); +} + +/** + * Joins the values to a string. + * + * The separators between elements are empty strings per default, you can define them with the optional parameters. + * + * {{ [1, 2, 3]|join(', ', ' and ') }} + * {# returns 1, 2 and 3 #} + * + * {{ [1, 2, 3]|join('|') }} + * {# returns 1|2|3 #} + * + * {{ [1, 2, 3]|join }} + * {# returns 123 #} + * + * @param array $value An array + * @param string $glue The separator + * @param string|null $and The separator for the last pair + * + * @return string The concatenated string + */ +function twig_join_filter($value, $glue = '', $and = null) +{ + if (!twig_test_iterable($value)) { + $value = (array) $value; + } + + $value = twig_to_array($value, false); + + if (0 === \count($value)) { + return ''; + } + + if (null === $and || $and === $glue) { + return implode($glue, $value); + } + + if (1 === \count($value)) { + return $value[0]; + } + + return implode($glue, \array_slice($value, 0, -1)).$and.$value[\count($value) - 1]; +} + +/** + * Splits the string into an array. + * + * {{ "one,two,three"|split(',') }} + * {# returns [one, two, three] #} + * + * {{ "one,two,three,four,five"|split(',', 3) }} + * {# returns [one, two, "three,four,five"] #} + * + * {{ "123"|split('') }} + * {# returns [1, 2, 3] #} + * + * {{ "aabbcc"|split('', 2) }} + * {# returns [aa, bb, cc] #} + * + * @param string $value A string + * @param string $delimiter The delimiter + * @param int $limit The limit + * + * @return array The split string as an array + */ +function twig_split_filter(Environment $env, $value, $delimiter, $limit = null) +{ + if (\strlen($delimiter) > 0) { + return null === $limit ? explode($delimiter, $value) : explode($delimiter, $value, $limit); + } + + if ($limit <= 1) { + return preg_split('/(?getCharset()); + if ($length < $limit) { + return [$value]; + } + + $r = []; + for ($i = 0; $i < $length; $i += $limit) { + $r[] = mb_substr($value, $i, $limit, $env->getCharset()); + } + + return $r; +} + +// The '_default' filter is used internally to avoid using the ternary operator +// which costs a lot for big contexts (before PHP 5.4). So, on average, +// a function call is cheaper. +/** + * @internal + */ +function _twig_default_filter($value, $default = '') +{ + if (twig_test_empty($value)) { + return $default; + } + + return $value; +} + +/** + * Returns the keys for the given array. + * + * It is useful when you want to iterate over the keys of an array: + * + * {% for key in array|keys %} + * {# ... #} + * {% endfor %} + * + * @param array $array An array + * + * @return array The keys + */ +function twig_get_array_keys_filter($array) +{ + if ($array instanceof \Traversable) { + while ($array instanceof \IteratorAggregate) { + $array = $array->getIterator(); + } + + if ($array instanceof \Iterator) { + $keys = []; + $array->rewind(); + while ($array->valid()) { + $keys[] = $array->key(); + $array->next(); + } + + return $keys; + } + + $keys = []; + foreach ($array as $key => $item) { + $keys[] = $key; + } + + return $keys; + } + + if (!\is_array($array)) { + return []; + } + + return array_keys($array); +} + +/** + * Reverses a variable. + * + * @param array|\Traversable|string $item An array, a \Traversable instance, or a string + * @param bool $preserveKeys Whether to preserve key or not + * + * @return mixed The reversed input + */ +function twig_reverse_filter(Environment $env, $item, $preserveKeys = false) +{ + if ($item instanceof \Traversable) { + return array_reverse(iterator_to_array($item), $preserveKeys); + } + + if (\is_array($item)) { + return array_reverse($item, $preserveKeys); + } + + $string = (string) $item; + + $charset = $env->getCharset(); + + if ('UTF-8' !== $charset) { + $item = twig_convert_encoding($string, 'UTF-8', $charset); + } + + preg_match_all('/./us', $item, $matches); + + $string = implode('', array_reverse($matches[0])); + + if ('UTF-8' !== $charset) { + $string = twig_convert_encoding($string, $charset, 'UTF-8'); + } + + return $string; +} + +/** + * Sorts an array. + * + * @param array|\Traversable $array + * + * @return array + */ +function twig_sort_filter($array, $arrow = null) +{ + if ($array instanceof \Traversable) { + $array = iterator_to_array($array); + } elseif (!\is_array($array)) { + throw new RuntimeError(sprintf('The sort filter only works with arrays or "Traversable", got "%s".', \gettype($array))); + } + + if (null !== $arrow) { + uasort($array, $arrow); + } else { + asort($array); + } + + return $array; +} + +/** + * @internal + */ +function twig_in_filter($value, $compare) +{ + if ($value instanceof Markup) { + $value = (string) $value; + } + if ($compare instanceof Markup) { + $compare = (string) $compare; + } + + if (\is_string($compare)) { + if (\is_string($value) || \is_int($value) || \is_float($value)) { + return '' === $value || false !== strpos($compare, (string) $value); + } + + return false; + } + + if (!is_iterable($compare)) { + return false; + } + + if (\is_object($value) || \is_resource($value)) { + if (!\is_array($compare)) { + foreach ($compare as $item) { + if ($item === $value) { + return true; + } + } + + return false; + } + + return \in_array($value, $compare, true); + } + + foreach ($compare as $item) { + if (0 === twig_compare($value, $item)) { + return true; + } + } + + return false; +} + +/** + * Compares two values using a more strict version of the PHP non-strict comparison operator. + * + * @see https://wiki.php.net/rfc/string_to_number_comparison + * @see https://wiki.php.net/rfc/trailing_whitespace_numerics + * + * @internal + */ +function twig_compare($a, $b) +{ + // int <=> string + if (\is_int($a) && \is_string($b)) { + $b = trim($b); + if (!is_numeric($b)) { + return (string) $a <=> $b; + } + if ((int) $b == $b) { + return $a <=> (int) $b; + } else { + return (float) $a <=> (float) $b; + } + } + if (\is_string($a) && \is_int($b)) { + $a = trim($a); + if (!is_numeric($a)) { + return $a <=> (string) $b; + } + if ((int) $a == $a) { + return (int) $a <=> $b; + } else { + return (float) $a <=> (float) $b; + } + } + + // float <=> string + if (\is_float($a) && \is_string($b)) { + if (is_nan($a)) { + return 1; + } + if (!is_numeric($b)) { + return (string) $a <=> $b; + } + + return (float) $a <=> $b; + } + if (\is_float($b) && \is_string($a)) { + if (is_nan($b)) { + return 1; + } + if (!is_numeric($a)) { + return $a <=> (string) $b; + } + + return (float) $a <=> $b; + } + + // fallback to <=> + return $a <=> $b; +} + +/** + * Returns a trimmed string. + * + * @return string + * + * @throws RuntimeError When an invalid trimming side is used (not a string or not 'left', 'right', or 'both') + */ +function twig_trim_filter($string, $characterMask = null, $side = 'both') +{ + if (null === $characterMask) { + $characterMask = " \t\n\r\0\x0B"; + } + + switch ($side) { + case 'both': + return trim($string, $characterMask); + case 'left': + return ltrim($string, $characterMask); + case 'right': + return rtrim($string, $characterMask); + default: + throw new RuntimeError('Trimming side must be "left", "right" or "both".'); + } +} + +/** + * Removes whitespaces between HTML tags. + * + * @return string + */ +function twig_spaceless($content) +{ + return trim(preg_replace('/>\s+<', $content)); +} + +function twig_convert_encoding($string, $to, $from) +{ + if (!function_exists('iconv')) { + throw new RuntimeError('Unable to convert encoding: required function iconv() does not exist. You should install ext-iconv or symfony/polyfill-iconv.'); + } + + return iconv($from, $to, $string); +} + +/** + * Returns the length of a variable. + * + * @param mixed $thing A variable + * + * @return int The length of the value + */ +function twig_length_filter(Environment $env, $thing) +{ + if (null === $thing) { + return 0; + } + + if (is_scalar($thing)) { + return mb_strlen($thing, $env->getCharset()); + } + + if ($thing instanceof \Countable || \is_array($thing) || $thing instanceof \SimpleXMLElement) { + return \count($thing); + } + + if ($thing instanceof \Traversable) { + return iterator_count($thing); + } + + if (method_exists($thing, '__toString') && !$thing instanceof \Countable) { + return mb_strlen((string) $thing, $env->getCharset()); + } + + return 1; +} + +/** + * Converts a string to uppercase. + * + * @param string $string A string + * + * @return string The uppercased string + */ +function twig_upper_filter(Environment $env, $string) +{ + return mb_strtoupper($string, $env->getCharset()); +} + +/** + * Converts a string to lowercase. + * + * @param string $string A string + * + * @return string The lowercased string + */ +function twig_lower_filter(Environment $env, $string) +{ + return mb_strtolower($string, $env->getCharset()); +} + +/** + * Returns a titlecased string. + * + * @param string $string A string + * + * @return string The titlecased string + */ +function twig_title_string_filter(Environment $env, $string) +{ + if (null !== $charset = $env->getCharset()) { + return mb_convert_case($string, MB_CASE_TITLE, $charset); + } + + return ucwords(strtolower($string)); +} + +/** + * Returns a capitalized string. + * + * @param string $string A string + * + * @return string The capitalized string + */ +function twig_capitalize_string_filter(Environment $env, $string) +{ + $charset = $env->getCharset(); + + return mb_strtoupper(mb_substr($string, 0, 1, $charset), $charset).mb_strtolower(mb_substr($string, 1, null, $charset), $charset); +} + +/** + * @internal + */ +function twig_call_macro(Template $template, string $method, array $args, int $lineno, array $context, Source $source) +{ + if (!method_exists($template, $method)) { + $parent = $template; + while ($parent = $parent->getParent($context)) { + if (method_exists($parent, $method)) { + return $parent->$method(...$args); + } + } + + throw new RuntimeError(sprintf('Macro "%s" is not defined in template "%s".', substr($method, \strlen('macro_')), $template->getTemplateName()), $lineno, $source); + } + + return $template->$method(...$args); +} + +/** + * @internal + */ +function twig_ensure_traversable($seq) +{ + if ($seq instanceof \Traversable || \is_array($seq)) { + return $seq; + } + + return []; +} + +/** + * @internal + */ +function twig_to_array($seq, $preserveKeys = true) +{ + if ($seq instanceof \Traversable) { + return iterator_to_array($seq, $preserveKeys); + } + + if (!\is_array($seq)) { + return $seq; + } + + return $preserveKeys ? $seq : array_values($seq); +} + +/** + * Checks if a variable is empty. + * + * {# evaluates to true if the foo variable is null, false, or the empty string #} + * {% if foo is empty %} + * {# ... #} + * {% endif %} + * + * @param mixed $value A variable + * + * @return bool true if the value is empty, false otherwise + */ +function twig_test_empty($value) +{ + if ($value instanceof \Countable) { + return 0 == \count($value); + } + + if ($value instanceof \Traversable) { + return !iterator_count($value); + } + + if (\is_object($value) && method_exists($value, '__toString')) { + return '' === (string) $value; + } + + return '' === $value || false === $value || null === $value || [] === $value; +} + +/** + * Checks if a variable is traversable. + * + * {# evaluates to true if the foo variable is an array or a traversable object #} + * {% if foo is iterable %} + * {# ... #} + * {% endif %} + * + * @param mixed $value A variable + * + * @return bool true if the value is traversable + */ +function twig_test_iterable($value) +{ + return $value instanceof \Traversable || \is_array($value); +} + +/** + * Renders a template. + * + * @param array $context + * @param string|array $template The template to render or an array of templates to try consecutively + * @param array $variables The variables to pass to the template + * @param bool $withContext + * @param bool $ignoreMissing Whether to ignore missing templates or not + * @param bool $sandboxed Whether to sandbox the template or not + * + * @return string The rendered template + */ +function twig_include(Environment $env, $context, $template, $variables = [], $withContext = true, $ignoreMissing = false, $sandboxed = false) +{ + $alreadySandboxed = false; + $sandbox = null; + if ($withContext) { + $variables = array_merge($context, $variables); + } + + if ($isSandboxed = $sandboxed && $env->hasExtension(SandboxExtension::class)) { + $sandbox = $env->getExtension(SandboxExtension::class); + if (!$alreadySandboxed = $sandbox->isSandboxed()) { + $sandbox->enableSandbox(); + } + } + + try { + $loaded = null; + try { + $loaded = $env->resolveTemplate($template); + } catch (LoaderError $e) { + if (!$ignoreMissing) { + throw $e; + } + } + + return $loaded ? $loaded->render($variables) : ''; + } finally { + if ($isSandboxed && !$alreadySandboxed) { + $sandbox->disableSandbox(); + } + } +} + +/** + * Returns a template content without rendering it. + * + * @param string $name The template name + * @param bool $ignoreMissing Whether to ignore missing templates or not + * + * @return string The template source + */ +function twig_source(Environment $env, $name, $ignoreMissing = false) +{ + $loader = $env->getLoader(); + try { + return $loader->getSourceContext($name)->getCode(); + } catch (LoaderError $e) { + if (!$ignoreMissing) { + throw $e; + } + } +} + +/** + * Provides the ability to get constants from instances as well as class/global constants. + * + * @param string $constant The name of the constant + * @param object|null $object The object to get the constant from + * + * @return string + */ +function twig_constant($constant, $object = null) +{ + if (null !== $object) { + $constant = \get_class($object).'::'.$constant; + } + + return \constant($constant); +} + +/** + * Checks if a constant exists. + * + * @param string $constant The name of the constant + * @param object|null $object The object to get the constant from + * + * @return bool + */ +function twig_constant_is_defined($constant, $object = null) +{ + if (null !== $object) { + $constant = \get_class($object).'::'.$constant; + } + + return \defined($constant); +} + +/** + * Batches item. + * + * @param array $items An array of items + * @param int $size The size of the batch + * @param mixed $fill A value used to fill missing items + * + * @return array + */ +function twig_array_batch($items, $size, $fill = null, $preserveKeys = true) +{ + if (!twig_test_iterable($items)) { + throw new RuntimeError(sprintf('The "batch" filter expects an array or "Traversable", got "%s".', \is_object($items) ? \get_class($items) : \gettype($items))); + } + + $size = ceil($size); + + $result = array_chunk(twig_to_array($items, $preserveKeys), $size, $preserveKeys); + + if (null !== $fill && $result) { + $last = \count($result) - 1; + if ($fillCount = $size - \count($result[$last])) { + for ($i = 0; $i < $fillCount; ++$i) { + $result[$last][] = $fill; + } + } + } + + return $result; +} + +/** + * Returns the attribute value for a given array/object. + * + * @param mixed $object The object or array from where to get the item + * @param mixed $item The item to get from the array or object + * @param array $arguments An array of arguments to pass if the item is an object method + * @param string $type The type of attribute (@see \Twig\Template constants) + * @param bool $isDefinedTest Whether this is only a defined check + * @param bool $ignoreStrictCheck Whether to ignore the strict attribute check or not + * @param int $lineno The template line where the attribute was called + * + * @return mixed The attribute value, or a Boolean when $isDefinedTest is true, or null when the attribute is not set and $ignoreStrictCheck is true + * + * @throws RuntimeError if the attribute does not exist and Twig is running in strict mode and $isDefinedTest is false + * + * @internal + */ +function twig_get_attribute(Environment $env, Source $source, $object, $item, array $arguments = [], $type = /* Template::ANY_CALL */ 'any', $isDefinedTest = false, $ignoreStrictCheck = false, $sandboxed = false, int $lineno = -1) +{ + // array + if (/* Template::METHOD_CALL */ 'method' !== $type) { + $arrayItem = \is_bool($item) || \is_float($item) ? (int) $item : $item; + + if (((\is_array($object) || $object instanceof \ArrayObject) && (isset($object[$arrayItem]) || \array_key_exists($arrayItem, (array) $object))) + || ($object instanceof ArrayAccess && isset($object[$arrayItem])) + ) { + if ($isDefinedTest) { + return true; + } + + return $object[$arrayItem]; + } + + if (/* Template::ARRAY_CALL */ 'array' === $type || !\is_object($object)) { + if ($isDefinedTest) { + return false; + } + + if ($ignoreStrictCheck || !$env->isStrictVariables()) { + return; + } + + if ($object instanceof ArrayAccess) { + $message = sprintf('Key "%s" in object with ArrayAccess of class "%s" does not exist.', $arrayItem, \get_class($object)); + } elseif (\is_object($object)) { + $message = sprintf('Impossible to access a key "%s" on an object of class "%s" that does not implement ArrayAccess interface.', $item, \get_class($object)); + } elseif (\is_array($object)) { + if (empty($object)) { + $message = sprintf('Key "%s" does not exist as the array is empty.', $arrayItem); + } else { + $message = sprintf('Key "%s" for array with keys "%s" does not exist.', $arrayItem, implode(', ', array_keys($object))); + } + } elseif (/* Template::ARRAY_CALL */ 'array' === $type) { + if (null === $object) { + $message = sprintf('Impossible to access a key ("%s") on a null variable.', $item); + } else { + $message = sprintf('Impossible to access a key ("%s") on a %s variable ("%s").', $item, \gettype($object), $object); + } + } elseif (null === $object) { + $message = sprintf('Impossible to access an attribute ("%s") on a null variable.', $item); + } else { + $message = sprintf('Impossible to access an attribute ("%s") on a %s variable ("%s").', $item, \gettype($object), $object); + } + + throw new RuntimeError($message, $lineno, $source); + } + } + + if (!\is_object($object)) { + if ($isDefinedTest) { + return false; + } + + if ($ignoreStrictCheck || !$env->isStrictVariables()) { + return; + } + + if (null === $object) { + $message = sprintf('Impossible to invoke a method ("%s") on a null variable.', $item); + } elseif (\is_array($object)) { + $message = sprintf('Impossible to invoke a method ("%s") on an array.', $item); + } else { + $message = sprintf('Impossible to invoke a method ("%s") on a %s variable ("%s").', $item, \gettype($object), $object); + } + + throw new RuntimeError($message, $lineno, $source); + } + + if ($object instanceof Template) { + throw new RuntimeError('Accessing \Twig\Template attributes is forbidden.', $lineno, $source); + } + + // object property + if (/* Template::METHOD_CALL */ 'method' !== $type) { + if (isset($object->$item) || \array_key_exists((string) $item, (array) $object)) { + if ($isDefinedTest) { + return true; + } + + if ($sandboxed) { + $env->getExtension(SandboxExtension::class)->checkPropertyAllowed($object, $item, $lineno, $source); + } + + return $object->$item; + } + } + + static $cache = []; + + $class = \get_class($object); + + // object method + // precedence: getXxx() > isXxx() > hasXxx() + if (!isset($cache[$class])) { + $methods = get_class_methods($object); + sort($methods); + $lcMethods = array_map(function ($value) { return strtr($value, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'); }, $methods); + $classCache = []; + foreach ($methods as $i => $method) { + $classCache[$method] = $method; + $classCache[$lcName = $lcMethods[$i]] = $method; + + if ('g' === $lcName[0] && 0 === strpos($lcName, 'get')) { + $name = substr($method, 3); + $lcName = substr($lcName, 3); + } elseif ('i' === $lcName[0] && 0 === strpos($lcName, 'is')) { + $name = substr($method, 2); + $lcName = substr($lcName, 2); + } elseif ('h' === $lcName[0] && 0 === strpos($lcName, 'has')) { + $name = substr($method, 3); + $lcName = substr($lcName, 3); + if (\in_array('is'.$lcName, $lcMethods)) { + continue; + } + } else { + continue; + } + + // skip get() and is() methods (in which case, $name is empty) + if ($name) { + if (!isset($classCache[$name])) { + $classCache[$name] = $method; + } + + if (!isset($classCache[$lcName])) { + $classCache[$lcName] = $method; + } + } + } + $cache[$class] = $classCache; + } + + $call = false; + if (isset($cache[$class][$item])) { + $method = $cache[$class][$item]; + } elseif (isset($cache[$class][$lcItem = strtr($item, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')])) { + $method = $cache[$class][$lcItem]; + } elseif (isset($cache[$class]['__call'])) { + $method = $item; + $call = true; + } else { + if ($isDefinedTest) { + return false; + } + + if ($ignoreStrictCheck || !$env->isStrictVariables()) { + return; + } + + throw new RuntimeError(sprintf('Neither the property "%1$s" nor one of the methods "%1$s()", "get%1$s()"/"is%1$s()"/"has%1$s()" or "__call()" exist and have public access in class "%2$s".', $item, $class), $lineno, $source); + } + + if ($isDefinedTest) { + return true; + } + + if ($sandboxed) { + $env->getExtension(SandboxExtension::class)->checkMethodAllowed($object, $method, $lineno, $source); + } + + // Some objects throw exceptions when they have __call, and the method we try + // to call is not supported. If ignoreStrictCheck is true, we should return null. + try { + $ret = $object->$method(...$arguments); + } catch (\BadMethodCallException $e) { + if ($call && ($ignoreStrictCheck || !$env->isStrictVariables())) { + return; + } + throw $e; + } + + return $ret; +} + +/** + * Returns the values from a single column in the input array. + * + *
    + *  {% set items = [{ 'fruit' : 'apple'}, {'fruit' : 'orange' }] %}
    + *
    + *  {% set fruits = items|column('fruit') %}
    + *
    + *  {# fruits now contains ['apple', 'orange'] #}
    + * 
    + * + * @param array|Traversable $array An array + * @param mixed $name The column name + * @param mixed $index The column to use as the index/keys for the returned array + * + * @return array The array of values + */ +function twig_array_column($array, $name, $index = null): array +{ + if ($array instanceof Traversable) { + $array = iterator_to_array($array); + } elseif (!\is_array($array)) { + throw new RuntimeError(sprintf('The column filter only works with arrays or "Traversable", got "%s" as first argument.', \gettype($array))); + } + + return array_column($array, $name, $index); +} + +function twig_array_filter($array, $arrow) +{ + if (\is_array($array)) { + return array_filter($array, $arrow, \ARRAY_FILTER_USE_BOTH); + } + + // the IteratorIterator wrapping is needed as some internal PHP classes are \Traversable but do not implement \Iterator + return new \CallbackFilterIterator(new \IteratorIterator($array), $arrow); +} + +function twig_array_map($array, $arrow) +{ + $r = []; + foreach ($array as $k => $v) { + $r[$k] = $arrow($v, $k); + } + + return $r; +} + +function twig_array_reduce($array, $arrow, $initial = null) +{ + if (!\is_array($array)) { + $array = iterator_to_array($array); + } + + return array_reduce($array, $arrow, $initial); +} +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/DebugExtension.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/DebugExtension.php new file mode 100644 index 0000000..bfb23d7 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/DebugExtension.php @@ -0,0 +1,64 @@ + $isDumpOutputHtmlSafe ? ['html'] : [], 'needs_context' => true, 'needs_environment' => true, 'is_variadic' => true]), + ]; + } +} +} + +namespace { +use Twig\Environment; +use Twig\Template; +use Twig\TemplateWrapper; + +function twig_var_dump(Environment $env, $context, ...$vars) +{ + if (!$env->isDebug()) { + return; + } + + ob_start(); + + if (!$vars) { + $vars = []; + foreach ($context as $key => $value) { + if (!$value instanceof Template && !$value instanceof TemplateWrapper) { + $vars[$key] = $value; + } + } + + var_dump($vars); + } else { + var_dump(...$vars); + } + + return ob_get_clean(); +} +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/EscaperExtension.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/EscaperExtension.php new file mode 100644 index 0000000..015c904 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/EscaperExtension.php @@ -0,0 +1,418 @@ +setDefaultStrategy($defaultStrategy); + } + + public function getTokenParsers(): array + { + return [new AutoEscapeTokenParser()]; + } + + public function getNodeVisitors(): array + { + return [new EscaperNodeVisitor()]; + } + + public function getFilters(): array + { + return [ + new TwigFilter('escape', 'twig_escape_filter', ['needs_environment' => true, 'is_safe_callback' => 'twig_escape_filter_is_safe']), + new TwigFilter('e', 'twig_escape_filter', ['needs_environment' => true, 'is_safe_callback' => 'twig_escape_filter_is_safe']), + new TwigFilter('raw', 'twig_raw_filter', ['is_safe' => ['all']]), + ]; + } + + /** + * Sets the default strategy to use when not defined by the user. + * + * The strategy can be a valid PHP callback that takes the template + * name as an argument and returns the strategy to use. + * + * @param string|false|callable $defaultStrategy An escaping strategy + */ + public function setDefaultStrategy($defaultStrategy): void + { + if ('name' === $defaultStrategy) { + $defaultStrategy = [FileExtensionEscapingStrategy::class, 'guess']; + } + + $this->defaultStrategy = $defaultStrategy; + } + + /** + * Gets the default strategy to use when not defined by the user. + * + * @param string $name The template name + * + * @return string|false The default strategy to use for the template + */ + public function getDefaultStrategy(string $name) + { + // disable string callables to avoid calling a function named html or js, + // or any other upcoming escaping strategy + if (!\is_string($this->defaultStrategy) && false !== $this->defaultStrategy) { + return \call_user_func($this->defaultStrategy, $name); + } + + return $this->defaultStrategy; + } + + /** + * Defines a new escaper to be used via the escape filter. + * + * @param string $strategy The strategy name that should be used as a strategy in the escape call + * @param callable $callable A valid PHP callable + */ + public function setEscaper($strategy, callable $callable) + { + $this->escapers[$strategy] = $callable; + } + + /** + * Gets all defined escapers. + * + * @return callable[] An array of escapers + */ + public function getEscapers() + { + return $this->escapers; + } + + public function setSafeClasses(array $safeClasses = []) + { + $this->safeClasses = []; + $this->safeLookup = []; + foreach ($safeClasses as $class => $strategies) { + $this->addSafeClass($class, $strategies); + } + } + + public function addSafeClass(string $class, array $strategies) + { + $class = ltrim($class, '\\'); + if (!isset($this->safeClasses[$class])) { + $this->safeClasses[$class] = []; + } + $this->safeClasses[$class] = array_merge($this->safeClasses[$class], $strategies); + + foreach ($strategies as $strategy) { + $this->safeLookup[$strategy][$class] = true; + } + } +} +} + +namespace { +use Twig\Environment; +use Twig\Error\RuntimeError; +use Twig\Extension\EscaperExtension; +use Twig\Markup; +use Twig\Node\Expression\ConstantExpression; +use Twig\Node\Node; + +/** + * Marks a variable as being safe. + * + * @param string $string A PHP variable + */ +function twig_raw_filter($string) +{ + return $string; +} + +/** + * Escapes a string. + * + * @param mixed $string The value to be escaped + * @param string $strategy The escaping strategy + * @param string $charset The charset + * @param bool $autoescape Whether the function is called by the auto-escaping feature (true) or by the developer (false) + * + * @return string + */ +function twig_escape_filter(Environment $env, $string, $strategy = 'html', $charset = null, $autoescape = false) +{ + if ($autoescape && $string instanceof Markup) { + return $string; + } + + if (!\is_string($string)) { + if (\is_object($string) && method_exists($string, '__toString')) { + if ($autoescape) { + $c = \get_class($string); + $ext = $env->getExtension(EscaperExtension::class); + if (!isset($ext->safeClasses[$c])) { + $ext->safeClasses[$c] = []; + foreach (class_parents($string) + class_implements($string) as $class) { + if (isset($ext->safeClasses[$class])) { + $ext->safeClasses[$c] = array_unique(array_merge($ext->safeClasses[$c], $ext->safeClasses[$class])); + foreach ($ext->safeClasses[$class] as $s) { + $ext->safeLookup[$s][$c] = true; + } + } + } + } + if (isset($ext->safeLookup[$strategy][$c]) || isset($ext->safeLookup['all'][$c])) { + return (string) $string; + } + } + + $string = (string) $string; + } elseif (\in_array($strategy, ['html', 'js', 'css', 'html_attr', 'url'])) { + return $string; + } + } + + if ('' === $string) { + return ''; + } + + if (null === $charset) { + $charset = $env->getCharset(); + } + + switch ($strategy) { + case 'html': + // see https://secure.php.net/htmlspecialchars + + // Using a static variable to avoid initializing the array + // each time the function is called. Moving the declaration on the + // top of the function slow downs other escaping strategies. + static $htmlspecialcharsCharsets = [ + 'ISO-8859-1' => true, 'ISO8859-1' => true, + 'ISO-8859-15' => true, 'ISO8859-15' => true, + 'utf-8' => true, 'UTF-8' => true, + 'CP866' => true, 'IBM866' => true, '866' => true, + 'CP1251' => true, 'WINDOWS-1251' => true, 'WIN-1251' => true, + '1251' => true, + 'CP1252' => true, 'WINDOWS-1252' => true, '1252' => true, + 'KOI8-R' => true, 'KOI8-RU' => true, 'KOI8R' => true, + 'BIG5' => true, '950' => true, + 'GB2312' => true, '936' => true, + 'BIG5-HKSCS' => true, + 'SHIFT_JIS' => true, 'SJIS' => true, '932' => true, + 'EUC-JP' => true, 'EUCJP' => true, + 'ISO8859-5' => true, 'ISO-8859-5' => true, 'MACROMAN' => true, + ]; + + if (isset($htmlspecialcharsCharsets[$charset])) { + return htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE, $charset); + } + + if (isset($htmlspecialcharsCharsets[strtoupper($charset)])) { + // cache the lowercase variant for future iterations + $htmlspecialcharsCharsets[$charset] = true; + + return htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE, $charset); + } + + $string = twig_convert_encoding($string, 'UTF-8', $charset); + $string = htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); + + return iconv('UTF-8', $charset, $string); + + case 'js': + // escape all non-alphanumeric characters + // into their \x or \uHHHH representations + if ('UTF-8' !== $charset) { + $string = twig_convert_encoding($string, 'UTF-8', $charset); + } + + if (!preg_match('//u', $string)) { + throw new RuntimeError('The string to escape is not a valid UTF-8 string.'); + } + + $string = preg_replace_callback('#[^a-zA-Z0-9,\._]#Su', function ($matches) { + $char = $matches[0]; + + /* + * A few characters have short escape sequences in JSON and JavaScript. + * Escape sequences supported only by JavaScript, not JSON, are ommitted. + * \" is also supported but omitted, because the resulting string is not HTML safe. + */ + static $shortMap = [ + '\\' => '\\\\', + '/' => '\\/', + "\x08" => '\b', + "\x0C" => '\f', + "\x0A" => '\n', + "\x0D" => '\r', + "\x09" => '\t', + ]; + + if (isset($shortMap[$char])) { + return $shortMap[$char]; + } + + // \uHHHH + $char = twig_convert_encoding($char, 'UTF-16BE', 'UTF-8'); + $char = strtoupper(bin2hex($char)); + + if (4 >= \strlen($char)) { + return sprintf('\u%04s', $char); + } + + return sprintf('\u%04s\u%04s', substr($char, 0, -4), substr($char, -4)); + }, $string); + + if ('UTF-8' !== $charset) { + $string = iconv('UTF-8', $charset, $string); + } + + return $string; + + case 'css': + if ('UTF-8' !== $charset) { + $string = twig_convert_encoding($string, 'UTF-8', $charset); + } + + if (!preg_match('//u', $string)) { + throw new RuntimeError('The string to escape is not a valid UTF-8 string.'); + } + + $string = preg_replace_callback('#[^a-zA-Z0-9]#Su', function ($matches) { + $char = $matches[0]; + + return sprintf('\\%X ', 1 === \strlen($char) ? \ord($char) : mb_ord($char, 'UTF-8')); + }, $string); + + if ('UTF-8' !== $charset) { + $string = iconv('UTF-8', $charset, $string); + } + + return $string; + + case 'html_attr': + if ('UTF-8' !== $charset) { + $string = twig_convert_encoding($string, 'UTF-8', $charset); + } + + if (!preg_match('//u', $string)) { + throw new RuntimeError('The string to escape is not a valid UTF-8 string.'); + } + + $string = preg_replace_callback('#[^a-zA-Z0-9,\.\-_]#Su', function ($matches) { + /** + * This function is adapted from code coming from Zend Framework. + * + * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (https://www.zend.com) + * @license https://framework.zend.com/license/new-bsd New BSD License + */ + $chr = $matches[0]; + $ord = \ord($chr); + + /* + * The following replaces characters undefined in HTML with the + * hex entity for the Unicode replacement character. + */ + if (($ord <= 0x1f && "\t" != $chr && "\n" != $chr && "\r" != $chr) || ($ord >= 0x7f && $ord <= 0x9f)) { + return '�'; + } + + /* + * Check if the current character to escape has a name entity we should + * replace it with while grabbing the hex value of the character. + */ + if (1 === \strlen($chr)) { + /* + * While HTML supports far more named entities, the lowest common denominator + * has become HTML5's XML Serialisation which is restricted to the those named + * entities that XML supports. Using HTML entities would result in this error: + * XML Parsing Error: undefined entity + */ + static $entityMap = [ + 34 => '"', /* quotation mark */ + 38 => '&', /* ampersand */ + 60 => '<', /* less-than sign */ + 62 => '>', /* greater-than sign */ + ]; + + if (isset($entityMap[$ord])) { + return $entityMap[$ord]; + } + + return sprintf('&#x%02X;', $ord); + } + + /* + * Per OWASP recommendations, we'll use hex entities for any other + * characters where a named entity does not exist. + */ + return sprintf('&#x%04X;', mb_ord($chr, 'UTF-8')); + }, $string); + + if ('UTF-8' !== $charset) { + $string = iconv('UTF-8', $charset, $string); + } + + return $string; + + case 'url': + return rawurlencode($string); + + default: + static $escapers; + + if (null === $escapers) { + $escapers = $env->getExtension(EscaperExtension::class)->getEscapers(); + } + + if (isset($escapers[$strategy])) { + return $escapers[$strategy]($env, $string, $charset); + } + + $validStrategies = implode(', ', array_merge(['html', 'js', 'url', 'css', 'html_attr'], array_keys($escapers))); + + throw new RuntimeError(sprintf('Invalid escaping strategy "%s" (valid ones: %s).', $strategy, $validStrategies)); + } +} + +/** + * @internal + */ +function twig_escape_filter_is_safe(Node $filterArgs) +{ + foreach ($filterArgs as $arg) { + if ($arg instanceof ConstantExpression) { + return [$arg->getAttribute('value')]; + } + + return []; + } + + return ['html']; +} +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/ExtensionInterface.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/ExtensionInterface.php new file mode 100644 index 0000000..75fa237 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/ExtensionInterface.php @@ -0,0 +1,68 @@ + + */ +interface ExtensionInterface +{ + /** + * Returns the token parser instances to add to the existing list. + * + * @return TokenParserInterface[] + */ + public function getTokenParsers(); + + /** + * Returns the node visitor instances to add to the existing list. + * + * @return NodeVisitorInterface[] + */ + public function getNodeVisitors(); + + /** + * Returns a list of filters to add to the existing list. + * + * @return TwigFilter[] + */ + public function getFilters(); + + /** + * Returns a list of tests to add to the existing list. + * + * @return TwigTest[] + */ + public function getTests(); + + /** + * Returns a list of functions to add to the existing list. + * + * @return TwigFunction[] + */ + public function getFunctions(); + + /** + * Returns a list of operators to add to the existing list. + * + * @return array First array of unary operators, second array of binary operators + */ + public function getOperators(); +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/GlobalsInterface.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/GlobalsInterface.php new file mode 100644 index 0000000..ec0c682 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/GlobalsInterface.php @@ -0,0 +1,25 @@ + + */ +interface GlobalsInterface +{ + public function getGlobals(): array; +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/OptimizerExtension.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/OptimizerExtension.php new file mode 100644 index 0000000..965bfdb --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/OptimizerExtension.php @@ -0,0 +1,29 @@ +optimizers = $optimizers; + } + + public function getNodeVisitors(): array + { + return [new OptimizerNodeVisitor($this->optimizers)]; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/ProfilerExtension.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/ProfilerExtension.php new file mode 100644 index 0000000..d8125b2 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/ProfilerExtension.php @@ -0,0 +1,52 @@ +actives[] = $profile; + } + + /** + * @return void + */ + public function enter(Profile $profile) + { + $this->actives[0]->addProfile($profile); + array_unshift($this->actives, $profile); + } + + /** + * @return void + */ + public function leave(Profile $profile) + { + $profile->leave(); + array_shift($this->actives); + + if (1 === \count($this->actives)) { + $this->actives[0]->leave(); + } + } + + public function getNodeVisitors(): array + { + return [new ProfilerNodeVisitor(\get_class($this))]; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/RuntimeExtensionInterface.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/RuntimeExtensionInterface.php new file mode 100644 index 0000000..63bc3b1 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/RuntimeExtensionInterface.php @@ -0,0 +1,19 @@ + + */ +interface RuntimeExtensionInterface +{ +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/SandboxExtension.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/SandboxExtension.php new file mode 100644 index 0000000..0a28cab --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/SandboxExtension.php @@ -0,0 +1,123 @@ +policy = $policy; + $this->sandboxedGlobally = $sandboxed; + } + + public function getTokenParsers(): array + { + return [new SandboxTokenParser()]; + } + + public function getNodeVisitors(): array + { + return [new SandboxNodeVisitor()]; + } + + public function enableSandbox(): void + { + $this->sandboxed = true; + } + + public function disableSandbox(): void + { + $this->sandboxed = false; + } + + public function isSandboxed(): bool + { + return $this->sandboxedGlobally || $this->sandboxed; + } + + public function isSandboxedGlobally(): bool + { + return $this->sandboxedGlobally; + } + + public function setSecurityPolicy(SecurityPolicyInterface $policy) + { + $this->policy = $policy; + } + + public function getSecurityPolicy(): SecurityPolicyInterface + { + return $this->policy; + } + + public function checkSecurity($tags, $filters, $functions): void + { + if ($this->isSandboxed()) { + $this->policy->checkSecurity($tags, $filters, $functions); + } + } + + public function checkMethodAllowed($obj, $method, int $lineno = -1, Source $source = null): void + { + if ($this->isSandboxed()) { + try { + $this->policy->checkMethodAllowed($obj, $method); + } catch (SecurityNotAllowedMethodError $e) { + $e->setSourceContext($source); + $e->setTemplateLine($lineno); + + throw $e; + } + } + } + + public function checkPropertyAllowed($obj, $method, int $lineno = -1, Source $source = null): void + { + if ($this->isSandboxed()) { + try { + $this->policy->checkPropertyAllowed($obj, $method); + } catch (SecurityNotAllowedPropertyError $e) { + $e->setSourceContext($source); + $e->setTemplateLine($lineno); + + throw $e; + } + } + } + + public function ensureToStringAllowed($obj, int $lineno = -1, Source $source = null) + { + if ($this->isSandboxed() && \is_object($obj) && method_exists($obj, '__toString')) { + try { + $this->policy->checkMethodAllowed($obj, '__toString'); + } catch (SecurityNotAllowedMethodError $e) { + $e->setSourceContext($source); + $e->setTemplateLine($lineno); + + throw $e; + } + } + + return $obj; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/StagingExtension.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/StagingExtension.php new file mode 100644 index 0000000..0ea47f9 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/StagingExtension.php @@ -0,0 +1,100 @@ + + * + * @internal + */ +final class StagingExtension extends AbstractExtension +{ + private $functions = []; + private $filters = []; + private $visitors = []; + private $tokenParsers = []; + private $tests = []; + + public function addFunction(TwigFunction $function): void + { + if (isset($this->functions[$function->getName()])) { + throw new \LogicException(sprintf('Function "%s" is already registered.', $function->getName())); + } + + $this->functions[$function->getName()] = $function; + } + + public function getFunctions(): array + { + return $this->functions; + } + + public function addFilter(TwigFilter $filter): void + { + if (isset($this->filters[$filter->getName()])) { + throw new \LogicException(sprintf('Filter "%s" is already registered.', $filter->getName())); + } + + $this->filters[$filter->getName()] = $filter; + } + + public function getFilters(): array + { + return $this->filters; + } + + public function addNodeVisitor(NodeVisitorInterface $visitor): void + { + $this->visitors[] = $visitor; + } + + public function getNodeVisitors(): array + { + return $this->visitors; + } + + public function addTokenParser(TokenParserInterface $parser): void + { + if (isset($this->tokenParsers[$parser->getTag()])) { + throw new \LogicException(sprintf('Tag "%s" is already registered.', $parser->getTag())); + } + + $this->tokenParsers[$parser->getTag()] = $parser; + } + + public function getTokenParsers(): array + { + return $this->tokenParsers; + } + + public function addTest(TwigTest $test): void + { + if (isset($this->tests[$test->getName()])) { + throw new \LogicException(sprintf('Test "%s" is already registered.', $test->getName())); + } + + $this->tests[$test->getName()] = $test; + } + + public function getTests(): array + { + return $this->tests; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/StringLoaderExtension.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/StringLoaderExtension.php new file mode 100644 index 0000000..7b45147 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Extension/StringLoaderExtension.php @@ -0,0 +1,42 @@ + true]), + ]; + } +} +} + +namespace { +use Twig\Environment; +use Twig\TemplateWrapper; + +/** + * Loads a template from a string. + * + * {{ include(template_from_string("Hello {{ name }}")) }} + * + * @param string $template A template as a string or object implementing __toString() + * @param string $name An optional name of the template to be used in error messages + */ +function twig_template_from_string(Environment $env, $template, string $name = null): TemplateWrapper +{ + return $env->createTemplate((string) $template, $name); +} +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/ExtensionSet.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/ExtensionSet.php new file mode 100644 index 0000000..38b6ab8 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/ExtensionSet.php @@ -0,0 +1,438 @@ + + * + * @internal + */ +final class ExtensionSet +{ + private $extensions; + private $initialized = false; + private $runtimeInitialized = false; + private $staging; + private $parsers; + private $visitors; + private $filters; + private $tests; + private $functions; + private $unaryOperators; + private $binaryOperators; + private $globals; + private $functionCallbacks = []; + private $filterCallbacks = []; + private $lastModified = 0; + + public function __construct() + { + $this->staging = new StagingExtension(); + } + + public function initRuntime() + { + $this->runtimeInitialized = true; + } + + public function hasExtension(string $class): bool + { + return isset($this->extensions[ltrim($class, '\\')]); + } + + public function getExtension(string $class): ExtensionInterface + { + $class = ltrim($class, '\\'); + + if (!isset($this->extensions[$class])) { + throw new RuntimeError(sprintf('The "%s" extension is not enabled.', $class)); + } + + return $this->extensions[$class]; + } + + /** + * @param ExtensionInterface[] $extensions + */ + public function setExtensions(array $extensions): void + { + foreach ($extensions as $extension) { + $this->addExtension($extension); + } + } + + /** + * @return ExtensionInterface[] + */ + public function getExtensions(): array + { + return $this->extensions; + } + + public function getSignature(): string + { + return json_encode(array_keys($this->extensions)); + } + + public function isInitialized(): bool + { + return $this->initialized || $this->runtimeInitialized; + } + + public function getLastModified(): int + { + if (0 !== $this->lastModified) { + return $this->lastModified; + } + + foreach ($this->extensions as $extension) { + $r = new \ReflectionObject($extension); + if (file_exists($r->getFileName()) && ($extensionTime = filemtime($r->getFileName())) > $this->lastModified) { + $this->lastModified = $extensionTime; + } + } + + return $this->lastModified; + } + + public function addExtension(ExtensionInterface $extension): void + { + $class = \get_class($extension); + + if ($this->initialized) { + throw new \LogicException(sprintf('Unable to register extension "%s" as extensions have already been initialized.', $class)); + } + + if (isset($this->extensions[$class])) { + throw new \LogicException(sprintf('Unable to register extension "%s" as it is already registered.', $class)); + } + + $this->extensions[$class] = $extension; + } + + public function addFunction(TwigFunction $function): void + { + if ($this->initialized) { + throw new \LogicException(sprintf('Unable to add function "%s" as extensions have already been initialized.', $function->getName())); + } + + $this->staging->addFunction($function); + } + + /** + * @return TwigFunction[] + */ + public function getFunctions(): array + { + if (!$this->initialized) { + $this->initExtensions(); + } + + return $this->functions; + } + + public function getFunction(string $name): ?TwigFunction + { + if (!$this->initialized) { + $this->initExtensions(); + } + + if (isset($this->functions[$name])) { + return $this->functions[$name]; + } + + foreach ($this->functions as $pattern => $function) { + $pattern = str_replace('\\*', '(.*?)', preg_quote($pattern, '#'), $count); + + if ($count && preg_match('#^'.$pattern.'$#', $name, $matches)) { + array_shift($matches); + $function->setArguments($matches); + + return $function; + } + } + + foreach ($this->functionCallbacks as $callback) { + if (false !== $function = $callback($name)) { + return $function; + } + } + + return null; + } + + public function registerUndefinedFunctionCallback(callable $callable): void + { + $this->functionCallbacks[] = $callable; + } + + public function addFilter(TwigFilter $filter): void + { + if ($this->initialized) { + throw new \LogicException(sprintf('Unable to add filter "%s" as extensions have already been initialized.', $filter->getName())); + } + + $this->staging->addFilter($filter); + } + + /** + * @return TwigFilter[] + */ + public function getFilters(): array + { + if (!$this->initialized) { + $this->initExtensions(); + } + + return $this->filters; + } + + public function getFilter(string $name): ?TwigFilter + { + if (!$this->initialized) { + $this->initExtensions(); + } + + if (isset($this->filters[$name])) { + return $this->filters[$name]; + } + + foreach ($this->filters as $pattern => $filter) { + $pattern = str_replace('\\*', '(.*?)', preg_quote($pattern, '#'), $count); + + if ($count && preg_match('#^'.$pattern.'$#', $name, $matches)) { + array_shift($matches); + $filter->setArguments($matches); + + return $filter; + } + } + + foreach ($this->filterCallbacks as $callback) { + if (false !== $filter = $callback($name)) { + return $filter; + } + } + + return null; + } + + public function registerUndefinedFilterCallback(callable $callable): void + { + $this->filterCallbacks[] = $callable; + } + + public function addNodeVisitor(NodeVisitorInterface $visitor): void + { + if ($this->initialized) { + throw new \LogicException('Unable to add a node visitor as extensions have already been initialized.'); + } + + $this->staging->addNodeVisitor($visitor); + } + + /** + * @return NodeVisitorInterface[] + */ + public function getNodeVisitors(): array + { + if (!$this->initialized) { + $this->initExtensions(); + } + + return $this->visitors; + } + + public function addTokenParser(TokenParserInterface $parser): void + { + if ($this->initialized) { + throw new \LogicException('Unable to add a token parser as extensions have already been initialized.'); + } + + $this->staging->addTokenParser($parser); + } + + /** + * @return TokenParserInterface[] + */ + public function getTokenParsers(): array + { + if (!$this->initialized) { + $this->initExtensions(); + } + + return $this->parsers; + } + + public function getGlobals(): array + { + if (null !== $this->globals) { + return $this->globals; + } + + $globals = []; + foreach ($this->extensions as $extension) { + if (!$extension instanceof GlobalsInterface) { + continue; + } + + $extGlobals = $extension->getGlobals(); + if (!\is_array($extGlobals)) { + throw new \UnexpectedValueException(sprintf('"%s::getGlobals()" must return an array of globals.', \get_class($extension))); + } + + $globals = array_merge($globals, $extGlobals); + } + + if ($this->initialized) { + $this->globals = $globals; + } + + return $globals; + } + + public function addTest(TwigTest $test): void + { + if ($this->initialized) { + throw new \LogicException(sprintf('Unable to add test "%s" as extensions have already been initialized.', $test->getName())); + } + + $this->staging->addTest($test); + } + + /** + * @return TwigTest[] + */ + public function getTests(): array + { + if (!$this->initialized) { + $this->initExtensions(); + } + + return $this->tests; + } + + public function getTest(string $name): ?TwigTest + { + if (!$this->initialized) { + $this->initExtensions(); + } + + if (isset($this->tests[$name])) { + return $this->tests[$name]; + } + + foreach ($this->tests as $pattern => $test) { + $pattern = str_replace('\\*', '(.*?)', preg_quote($pattern, '#'), $count); + + if ($count) { + if (preg_match('#^'.$pattern.'$#', $name, $matches)) { + array_shift($matches); + $test->setArguments($matches); + + return $test; + } + } + } + + return null; + } + + public function getUnaryOperators(): array + { + if (!$this->initialized) { + $this->initExtensions(); + } + + return $this->unaryOperators; + } + + public function getBinaryOperators(): array + { + if (!$this->initialized) { + $this->initExtensions(); + } + + return $this->binaryOperators; + } + + private function initExtensions(): void + { + $this->parsers = []; + $this->filters = []; + $this->functions = []; + $this->tests = []; + $this->visitors = []; + $this->unaryOperators = []; + $this->binaryOperators = []; + + foreach ($this->extensions as $extension) { + $this->initExtension($extension); + } + $this->initExtension($this->staging); + // Done at the end only, so that an exception during initialization does not mark the environment as initialized when catching the exception + $this->initialized = true; + } + + private function initExtension(ExtensionInterface $extension): void + { + // filters + foreach ($extension->getFilters() as $filter) { + $this->filters[$filter->getName()] = $filter; + } + + // functions + foreach ($extension->getFunctions() as $function) { + $this->functions[$function->getName()] = $function; + } + + // tests + foreach ($extension->getTests() as $test) { + $this->tests[$test->getName()] = $test; + } + + // token parsers + foreach ($extension->getTokenParsers() as $parser) { + if (!$parser instanceof TokenParserInterface) { + throw new \LogicException('getTokenParsers() must return an array of \Twig\TokenParser\TokenParserInterface.'); + } + + $this->parsers[] = $parser; + } + + // node visitors + foreach ($extension->getNodeVisitors() as $visitor) { + $this->visitors[] = $visitor; + } + + // operators + if ($operators = $extension->getOperators()) { + if (!\is_array($operators)) { + throw new \InvalidArgumentException(sprintf('"%s::getOperators()" must return an array with operators, got "%s".', \get_class($extension), \is_object($operators) ? \get_class($operators) : \gettype($operators).(\is_resource($operators) ? '' : '#'.$operators))); + } + + if (2 !== \count($operators)) { + throw new \InvalidArgumentException(sprintf('"%s::getOperators()" must return an array of 2 elements, got %d.', \get_class($extension), \count($operators))); + } + + $this->unaryOperators = array_merge($this->unaryOperators, $operators[0]); + $this->binaryOperators = array_merge($this->binaryOperators, $operators[1]); + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/FileExtensionEscapingStrategy.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/FileExtensionEscapingStrategy.php new file mode 100644 index 0000000..28579c3 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/FileExtensionEscapingStrategy.php @@ -0,0 +1,60 @@ + + */ +class FileExtensionEscapingStrategy +{ + /** + * Guesses the best autoescaping strategy based on the file name. + * + * @param string $name The template name + * + * @return string|false The escaping strategy name to use or false to disable + */ + public static function guess(string $name) + { + if (\in_array(substr($name, -1), ['/', '\\'])) { + return 'html'; // return html for directories + } + + if ('.twig' === substr($name, -5)) { + $name = substr($name, 0, -5); + } + + $extension = pathinfo($name, PATHINFO_EXTENSION); + + switch ($extension) { + case 'js': + return 'js'; + + case 'css': + return 'css'; + + case 'txt': + return false; + + default: + return 'html'; + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Lexer.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Lexer.php new file mode 100644 index 0000000..3cfcccf --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Lexer.php @@ -0,0 +1,497 @@ + + */ +class Lexer +{ + private $tokens; + private $code; + private $cursor; + private $lineno; + private $end; + private $state; + private $states; + private $brackets; + private $env; + private $source; + private $options; + private $regexes; + private $position; + private $positions; + private $currentVarBlockLine; + + const STATE_DATA = 0; + const STATE_BLOCK = 1; + const STATE_VAR = 2; + const STATE_STRING = 3; + const STATE_INTERPOLATION = 4; + + const REGEX_NAME = '/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/A'; + const REGEX_NUMBER = '/[0-9]+(?:\.[0-9]+)?([Ee][\+\-][0-9]+)?/A'; + const REGEX_STRING = '/"([^#"\\\\]*(?:\\\\.[^#"\\\\]*)*)"|\'([^\'\\\\]*(?:\\\\.[^\'\\\\]*)*)\'/As'; + const REGEX_DQ_STRING_DELIM = '/"/A'; + const REGEX_DQ_STRING_PART = '/[^#"\\\\]*(?:(?:\\\\.|#(?!\{))[^#"\\\\]*)*/As'; + const PUNCTUATION = '()[]{}?:.,|'; + + public function __construct(Environment $env, array $options = []) + { + $this->env = $env; + + $this->options = array_merge([ + 'tag_comment' => ['{#', '#}'], + 'tag_block' => ['{%', '%}'], + 'tag_variable' => ['{{', '}}'], + 'whitespace_trim' => '-', + 'whitespace_line_trim' => '~', + 'whitespace_line_chars' => ' \t\0\x0B', + 'interpolation' => ['#{', '}'], + ], $options); + + // when PHP 7.3 is the min version, we will be able to remove the '#' part in preg_quote as it's part of the default + $this->regexes = [ + // }} + 'lex_var' => '{ + \s* + (?:'. + preg_quote($this->options['whitespace_trim'].$this->options['tag_variable'][1], '#').'\s*'. // -}}\s* + '|'. + preg_quote($this->options['whitespace_line_trim'].$this->options['tag_variable'][1], '#').'['.$this->options['whitespace_line_chars'].']*'. // ~}}[ \t\0\x0B]* + '|'. + preg_quote($this->options['tag_variable'][1], '#'). // }} + ') + }Ax', + + // %} + 'lex_block' => '{ + \s* + (?:'. + preg_quote($this->options['whitespace_trim'].$this->options['tag_block'][1], '#').'\s*\n?'. // -%}\s*\n? + '|'. + preg_quote($this->options['whitespace_line_trim'].$this->options['tag_block'][1], '#').'['.$this->options['whitespace_line_chars'].']*'. // ~%}[ \t\0\x0B]* + '|'. + preg_quote($this->options['tag_block'][1], '#').'\n?'. // %}\n? + ') + }Ax', + + // {% endverbatim %} + 'lex_raw_data' => '{'. + preg_quote($this->options['tag_block'][0], '#'). // {% + '('. + $this->options['whitespace_trim']. // - + '|'. + $this->options['whitespace_line_trim']. // ~ + ')?\s*endverbatim\s*'. + '(?:'. + preg_quote($this->options['whitespace_trim'].$this->options['tag_block'][1], '#').'\s*'. // -%} + '|'. + preg_quote($this->options['whitespace_line_trim'].$this->options['tag_block'][1], '#').'['.$this->options['whitespace_line_chars'].']*'. // ~%}[ \t\0\x0B]* + '|'. + preg_quote($this->options['tag_block'][1], '#'). // %} + ') + }sx', + + 'operator' => $this->getOperatorRegex(), + + // #} + 'lex_comment' => '{ + (?:'. + preg_quote($this->options['whitespace_trim']).preg_quote($this->options['tag_comment'][1], '#').'\s*\n?'. // -#}\s*\n? + '|'. + preg_quote($this->options['whitespace_line_trim'].$this->options['tag_comment'][1], '#').'['.$this->options['whitespace_line_chars'].']*'. // ~#}[ \t\0\x0B]* + '|'. + preg_quote($this->options['tag_comment'][1], '#').'\n?'. // #}\n? + ') + }sx', + + // verbatim %} + 'lex_block_raw' => '{ + \s*verbatim\s* + (?:'. + preg_quote($this->options['whitespace_trim'].$this->options['tag_block'][1], '#').'\s*'. // -%}\s* + '|'. + preg_quote($this->options['whitespace_line_trim'].$this->options['tag_block'][1], '#').'['.$this->options['whitespace_line_chars'].']*'. // ~%}[ \t\0\x0B]* + '|'. + preg_quote($this->options['tag_block'][1], '#'). // %} + ') + }Asx', + + 'lex_block_line' => '{\s*line\s+(\d+)\s*'.preg_quote($this->options['tag_block'][1], '#').'}As', + + // {{ or {% or {# + 'lex_tokens_start' => '{ + ('. + preg_quote($this->options['tag_variable'][0], '#'). // {{ + '|'. + preg_quote($this->options['tag_block'][0], '#'). // {% + '|'. + preg_quote($this->options['tag_comment'][0], '#'). // {# + ')('. + preg_quote($this->options['whitespace_trim'], '#'). // - + '|'. + preg_quote($this->options['whitespace_line_trim'], '#'). // ~ + ')? + }sx', + 'interpolation_start' => '{'.preg_quote($this->options['interpolation'][0], '#').'\s*}A', + 'interpolation_end' => '{\s*'.preg_quote($this->options['interpolation'][1], '#').'}A', + ]; + } + + public function tokenize(Source $source): TokenStream + { + $this->source = $source; + $this->code = str_replace(["\r\n", "\r"], "\n", $source->getCode()); + $this->cursor = 0; + $this->lineno = 1; + $this->end = \strlen($this->code); + $this->tokens = []; + $this->state = self::STATE_DATA; + $this->states = []; + $this->brackets = []; + $this->position = -1; + + // find all token starts in one go + preg_match_all($this->regexes['lex_tokens_start'], $this->code, $matches, PREG_OFFSET_CAPTURE); + $this->positions = $matches; + + while ($this->cursor < $this->end) { + // dispatch to the lexing functions depending + // on the current state + switch ($this->state) { + case self::STATE_DATA: + $this->lexData(); + break; + + case self::STATE_BLOCK: + $this->lexBlock(); + break; + + case self::STATE_VAR: + $this->lexVar(); + break; + + case self::STATE_STRING: + $this->lexString(); + break; + + case self::STATE_INTERPOLATION: + $this->lexInterpolation(); + break; + } + } + + $this->pushToken(/* Token::EOF_TYPE */ -1); + + if (!empty($this->brackets)) { + list($expect, $lineno) = array_pop($this->brackets); + throw new SyntaxError(sprintf('Unclosed "%s".', $expect), $lineno, $this->source); + } + + return new TokenStream($this->tokens, $this->source); + } + + private function lexData(): void + { + // if no matches are left we return the rest of the template as simple text token + if ($this->position == \count($this->positions[0]) - 1) { + $this->pushToken(/* Token::TEXT_TYPE */ 0, substr($this->code, $this->cursor)); + $this->cursor = $this->end; + + return; + } + + // Find the first token after the current cursor + $position = $this->positions[0][++$this->position]; + while ($position[1] < $this->cursor) { + if ($this->position == \count($this->positions[0]) - 1) { + return; + } + $position = $this->positions[0][++$this->position]; + } + + // push the template text first + $text = $textContent = substr($this->code, $this->cursor, $position[1] - $this->cursor); + + // trim? + if (isset($this->positions[2][$this->position][0])) { + if ($this->options['whitespace_trim'] === $this->positions[2][$this->position][0]) { + // whitespace_trim detected ({%-, {{- or {#-) + $text = rtrim($text); + } elseif ($this->options['whitespace_line_trim'] === $this->positions[2][$this->position][0]) { + // whitespace_line_trim detected ({%~, {{~ or {#~) + // don't trim \r and \n + $text = rtrim($text, " \t\0\x0B"); + } + } + $this->pushToken(/* Token::TEXT_TYPE */ 0, $text); + $this->moveCursor($textContent.$position[0]); + + switch ($this->positions[1][$this->position][0]) { + case $this->options['tag_comment'][0]: + $this->lexComment(); + break; + + case $this->options['tag_block'][0]: + // raw data? + if (preg_match($this->regexes['lex_block_raw'], $this->code, $match, 0, $this->cursor)) { + $this->moveCursor($match[0]); + $this->lexRawData(); + // {% line \d+ %} + } elseif (preg_match($this->regexes['lex_block_line'], $this->code, $match, 0, $this->cursor)) { + $this->moveCursor($match[0]); + $this->lineno = (int) $match[1]; + } else { + $this->pushToken(/* Token::BLOCK_START_TYPE */ 1); + $this->pushState(self::STATE_BLOCK); + $this->currentVarBlockLine = $this->lineno; + } + break; + + case $this->options['tag_variable'][0]: + $this->pushToken(/* Token::VAR_START_TYPE */ 2); + $this->pushState(self::STATE_VAR); + $this->currentVarBlockLine = $this->lineno; + break; + } + } + + private function lexBlock(): void + { + if (empty($this->brackets) && preg_match($this->regexes['lex_block'], $this->code, $match, 0, $this->cursor)) { + $this->pushToken(/* Token::BLOCK_END_TYPE */ 3); + $this->moveCursor($match[0]); + $this->popState(); + } else { + $this->lexExpression(); + } + } + + private function lexVar(): void + { + if (empty($this->brackets) && preg_match($this->regexes['lex_var'], $this->code, $match, 0, $this->cursor)) { + $this->pushToken(/* Token::VAR_END_TYPE */ 4); + $this->moveCursor($match[0]); + $this->popState(); + } else { + $this->lexExpression(); + } + } + + private function lexExpression(): void + { + // whitespace + if (preg_match('/\s+/A', $this->code, $match, 0, $this->cursor)) { + $this->moveCursor($match[0]); + + if ($this->cursor >= $this->end) { + throw new SyntaxError(sprintf('Unclosed "%s".', self::STATE_BLOCK === $this->state ? 'block' : 'variable'), $this->currentVarBlockLine, $this->source); + } + } + + // arrow function + if ('=' === $this->code[$this->cursor] && '>' === $this->code[$this->cursor + 1]) { + $this->pushToken(Token::ARROW_TYPE, '=>'); + $this->moveCursor('=>'); + } + // operators + elseif (preg_match($this->regexes['operator'], $this->code, $match, 0, $this->cursor)) { + $this->pushToken(/* Token::OPERATOR_TYPE */ 8, preg_replace('/\s+/', ' ', $match[0])); + $this->moveCursor($match[0]); + } + // names + elseif (preg_match(self::REGEX_NAME, $this->code, $match, 0, $this->cursor)) { + $this->pushToken(/* Token::NAME_TYPE */ 5, $match[0]); + $this->moveCursor($match[0]); + } + // numbers + elseif (preg_match(self::REGEX_NUMBER, $this->code, $match, 0, $this->cursor)) { + $number = (float) $match[0]; // floats + if (ctype_digit($match[0]) && $number <= PHP_INT_MAX) { + $number = (int) $match[0]; // integers lower than the maximum + } + $this->pushToken(/* Token::NUMBER_TYPE */ 6, $number); + $this->moveCursor($match[0]); + } + // punctuation + elseif (false !== strpos(self::PUNCTUATION, $this->code[$this->cursor])) { + // opening bracket + if (false !== strpos('([{', $this->code[$this->cursor])) { + $this->brackets[] = [$this->code[$this->cursor], $this->lineno]; + } + // closing bracket + elseif (false !== strpos(')]}', $this->code[$this->cursor])) { + if (empty($this->brackets)) { + throw new SyntaxError(sprintf('Unexpected "%s".', $this->code[$this->cursor]), $this->lineno, $this->source); + } + + list($expect, $lineno) = array_pop($this->brackets); + if ($this->code[$this->cursor] != strtr($expect, '([{', ')]}')) { + throw new SyntaxError(sprintf('Unclosed "%s".', $expect), $lineno, $this->source); + } + } + + $this->pushToken(/* Token::PUNCTUATION_TYPE */ 9, $this->code[$this->cursor]); + ++$this->cursor; + } + // strings + elseif (preg_match(self::REGEX_STRING, $this->code, $match, 0, $this->cursor)) { + $this->pushToken(/* Token::STRING_TYPE */ 7, stripcslashes(substr($match[0], 1, -1))); + $this->moveCursor($match[0]); + } + // opening double quoted string + elseif (preg_match(self::REGEX_DQ_STRING_DELIM, $this->code, $match, 0, $this->cursor)) { + $this->brackets[] = ['"', $this->lineno]; + $this->pushState(self::STATE_STRING); + $this->moveCursor($match[0]); + } + // unlexable + else { + throw new SyntaxError(sprintf('Unexpected character "%s".', $this->code[$this->cursor]), $this->lineno, $this->source); + } + } + + private function lexRawData(): void + { + if (!preg_match($this->regexes['lex_raw_data'], $this->code, $match, PREG_OFFSET_CAPTURE, $this->cursor)) { + throw new SyntaxError('Unexpected end of file: Unclosed "verbatim" block.', $this->lineno, $this->source); + } + + $text = substr($this->code, $this->cursor, $match[0][1] - $this->cursor); + $this->moveCursor($text.$match[0][0]); + + // trim? + if (isset($match[1][0])) { + if ($this->options['whitespace_trim'] === $match[1][0]) { + // whitespace_trim detected ({%-, {{- or {#-) + $text = rtrim($text); + } else { + // whitespace_line_trim detected ({%~, {{~ or {#~) + // don't trim \r and \n + $text = rtrim($text, " \t\0\x0B"); + } + } + + $this->pushToken(/* Token::TEXT_TYPE */ 0, $text); + } + + private function lexComment(): void + { + if (!preg_match($this->regexes['lex_comment'], $this->code, $match, PREG_OFFSET_CAPTURE, $this->cursor)) { + throw new SyntaxError('Unclosed comment.', $this->lineno, $this->source); + } + + $this->moveCursor(substr($this->code, $this->cursor, $match[0][1] - $this->cursor).$match[0][0]); + } + + private function lexString(): void + { + if (preg_match($this->regexes['interpolation_start'], $this->code, $match, 0, $this->cursor)) { + $this->brackets[] = [$this->options['interpolation'][0], $this->lineno]; + $this->pushToken(/* Token::INTERPOLATION_START_TYPE */ 10); + $this->moveCursor($match[0]); + $this->pushState(self::STATE_INTERPOLATION); + } elseif (preg_match(self::REGEX_DQ_STRING_PART, $this->code, $match, 0, $this->cursor) && \strlen($match[0]) > 0) { + $this->pushToken(/* Token::STRING_TYPE */ 7, stripcslashes($match[0])); + $this->moveCursor($match[0]); + } elseif (preg_match(self::REGEX_DQ_STRING_DELIM, $this->code, $match, 0, $this->cursor)) { + list($expect, $lineno) = array_pop($this->brackets); + if ('"' != $this->code[$this->cursor]) { + throw new SyntaxError(sprintf('Unclosed "%s".', $expect), $lineno, $this->source); + } + + $this->popState(); + ++$this->cursor; + } else { + // unlexable + throw new SyntaxError(sprintf('Unexpected character "%s".', $this->code[$this->cursor]), $this->lineno, $this->source); + } + } + + private function lexInterpolation(): void + { + $bracket = end($this->brackets); + if ($this->options['interpolation'][0] === $bracket[0] && preg_match($this->regexes['interpolation_end'], $this->code, $match, 0, $this->cursor)) { + array_pop($this->brackets); + $this->pushToken(/* Token::INTERPOLATION_END_TYPE */ 11); + $this->moveCursor($match[0]); + $this->popState(); + } else { + $this->lexExpression(); + } + } + + private function pushToken($type, $value = ''): void + { + // do not push empty text tokens + if (/* Token::TEXT_TYPE */ 0 === $type && '' === $value) { + return; + } + + $this->tokens[] = new Token($type, $value, $this->lineno); + } + + private function moveCursor($text): void + { + $this->cursor += \strlen($text); + $this->lineno += substr_count($text, "\n"); + } + + private function getOperatorRegex(): string + { + $operators = array_merge( + ['='], + array_keys($this->env->getUnaryOperators()), + array_keys($this->env->getBinaryOperators()) + ); + + $operators = array_combine($operators, array_map('strlen', $operators)); + arsort($operators); + + $regex = []; + foreach ($operators as $operator => $length) { + // an operator that ends with a character must be followed by + // a whitespace or a parenthesis + if (ctype_alpha($operator[$length - 1])) { + $r = preg_quote($operator, '/').'(?=[\s()])'; + } else { + $r = preg_quote($operator, '/'); + } + + // an operator with a space can be any amount of whitespaces + $r = preg_replace('/\s+/', '\s+', $r); + + $regex[] = $r; + } + + return '/'.implode('|', $regex).'/A'; + } + + private function pushState($state): void + { + $this->states[] = $this->state; + $this->state = $state; + } + + private function popState(): void + { + if (0 === \count($this->states)) { + throw new \LogicException('Cannot pop state without a previous state.'); + } + + $this->state = array_pop($this->states); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Loader/ArrayLoader.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Loader/ArrayLoader.php new file mode 100644 index 0000000..a6164bb --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Loader/ArrayLoader.php @@ -0,0 +1,78 @@ + + */ +final class ArrayLoader implements LoaderInterface +{ + private $templates = []; + + /** + * @param array $templates An array of templates (keys are the names, and values are the source code) + */ + public function __construct(array $templates = []) + { + $this->templates = $templates; + } + + public function setTemplate(string $name, string $template): void + { + $this->templates[$name] = $template; + } + + public function getSourceContext(string $name): Source + { + $name = (string) $name; + if (!isset($this->templates[$name])) { + throw new LoaderError(sprintf('Template "%s" is not defined.', $name)); + } + + return new Source($this->templates[$name], $name); + } + + public function exists(string $name): bool + { + return isset($this->templates[$name]); + } + + public function getCacheKey(string $name): string + { + if (!isset($this->templates[$name])) { + throw new LoaderError(sprintf('Template "%s" is not defined.', $name)); + } + + return $name.':'.$this->templates[$name]; + } + + public function isFresh(string $name, int $time): bool + { + if (!isset($this->templates[$name])) { + throw new LoaderError(sprintf('Template "%s" is not defined.', $name)); + } + + return true; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Loader/ChainLoader.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Loader/ChainLoader.php new file mode 100644 index 0000000..fbf4f3a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Loader/ChainLoader.php @@ -0,0 +1,119 @@ + + */ +final class ChainLoader implements LoaderInterface +{ + private $hasSourceCache = []; + private $loaders = []; + + /** + * @param LoaderInterface[] $loaders + */ + public function __construct(array $loaders = []) + { + foreach ($loaders as $loader) { + $this->addLoader($loader); + } + } + + public function addLoader(LoaderInterface $loader): void + { + $this->loaders[] = $loader; + $this->hasSourceCache = []; + } + + /** + * @return LoaderInterface[] + */ + public function getLoaders(): array + { + return $this->loaders; + } + + public function getSourceContext(string $name): Source + { + $exceptions = []; + foreach ($this->loaders as $loader) { + if (!$loader->exists($name)) { + continue; + } + + try { + return $loader->getSourceContext($name); + } catch (LoaderError $e) { + $exceptions[] = $e->getMessage(); + } + } + + throw new LoaderError(sprintf('Template "%s" is not defined%s.', $name, $exceptions ? ' ('.implode(', ', $exceptions).')' : '')); + } + + public function exists(string $name): bool + { + if (isset($this->hasSourceCache[$name])) { + return $this->hasSourceCache[$name]; + } + + foreach ($this->loaders as $loader) { + if ($loader->exists($name)) { + return $this->hasSourceCache[$name] = true; + } + } + + return $this->hasSourceCache[$name] = false; + } + + public function getCacheKey(string $name): string + { + $exceptions = []; + foreach ($this->loaders as $loader) { + if (!$loader->exists($name)) { + continue; + } + + try { + return $loader->getCacheKey($name); + } catch (LoaderError $e) { + $exceptions[] = \get_class($loader).': '.$e->getMessage(); + } + } + + throw new LoaderError(sprintf('Template "%s" is not defined%s.', $name, $exceptions ? ' ('.implode(', ', $exceptions).')' : '')); + } + + public function isFresh(string $name, int $time): bool + { + $exceptions = []; + foreach ($this->loaders as $loader) { + if (!$loader->exists($name)) { + continue; + } + + try { + return $loader->isFresh($name, $time); + } catch (LoaderError $e) { + $exceptions[] = \get_class($loader).': '.$e->getMessage(); + } + } + + throw new LoaderError(sprintf('Template "%s" is not defined%s.', $name, $exceptions ? ' ('.implode(', ', $exceptions).')' : '')); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Loader/FilesystemLoader.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Loader/FilesystemLoader.php new file mode 100644 index 0000000..e55943d --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Loader/FilesystemLoader.php @@ -0,0 +1,283 @@ + + */ +class FilesystemLoader implements LoaderInterface +{ + /** Identifier of the main namespace. */ + const MAIN_NAMESPACE = '__main__'; + + protected $paths = []; + protected $cache = []; + protected $errorCache = []; + + private $rootPath; + + /** + * @param string|array $paths A path or an array of paths where to look for templates + * @param string|null $rootPath The root path common to all relative paths (null for getcwd()) + */ + public function __construct($paths = [], string $rootPath = null) + { + $this->rootPath = (null === $rootPath ? getcwd() : $rootPath).\DIRECTORY_SEPARATOR; + if (false !== $realPath = realpath($rootPath)) { + $this->rootPath = $realPath.\DIRECTORY_SEPARATOR; + } + + if ($paths) { + $this->setPaths($paths); + } + } + + /** + * Returns the paths to the templates. + */ + public function getPaths(string $namespace = self::MAIN_NAMESPACE): array + { + return isset($this->paths[$namespace]) ? $this->paths[$namespace] : []; + } + + /** + * Returns the path namespaces. + * + * The main namespace is always defined. + */ + public function getNamespaces(): array + { + return array_keys($this->paths); + } + + /** + * @param string|array $paths A path or an array of paths where to look for templates + */ + public function setPaths($paths, string $namespace = self::MAIN_NAMESPACE): void + { + if (!\is_array($paths)) { + $paths = [$paths]; + } + + $this->paths[$namespace] = []; + foreach ($paths as $path) { + $this->addPath($path, $namespace); + } + } + + /** + * @throws LoaderError + */ + public function addPath(string $path, string $namespace = self::MAIN_NAMESPACE): void + { + // invalidate the cache + $this->cache = $this->errorCache = []; + + $checkPath = $this->isAbsolutePath($path) ? $path : $this->rootPath.$path; + if (!is_dir($checkPath)) { + throw new LoaderError(sprintf('The "%s" directory does not exist ("%s").', $path, $checkPath)); + } + + $this->paths[$namespace][] = rtrim($path, '/\\'); + } + + /** + * @throws LoaderError + */ + public function prependPath(string $path, string $namespace = self::MAIN_NAMESPACE): void + { + // invalidate the cache + $this->cache = $this->errorCache = []; + + $checkPath = $this->isAbsolutePath($path) ? $path : $this->rootPath.$path; + if (!is_dir($checkPath)) { + throw new LoaderError(sprintf('The "%s" directory does not exist ("%s").', $path, $checkPath)); + } + + $path = rtrim($path, '/\\'); + + if (!isset($this->paths[$namespace])) { + $this->paths[$namespace][] = $path; + } else { + array_unshift($this->paths[$namespace], $path); + } + } + + public function getSourceContext(string $name): Source + { + if (null === $path = $this->findTemplate($name)) { + return new Source('', $name, ''); + } + + return new Source(file_get_contents($path), $name, $path); + } + + public function getCacheKey(string $name): string + { + if (null === $path = $this->findTemplate($name)) { + return ''; + } + $len = \strlen($this->rootPath); + if (0 === strncmp($this->rootPath, $path, $len)) { + return substr($path, $len); + } + + return $path; + } + + /** + * @return bool + */ + public function exists(string $name) + { + $name = $this->normalizeName($name); + + if (isset($this->cache[$name])) { + return true; + } + + return null !== $this->findTemplate($name, false); + } + + public function isFresh(string $name, int $time): bool + { + // false support to be removed in 3.0 + if (null === $path = $this->findTemplate($name)) { + return false; + } + + return filemtime($path) < $time; + } + + /** + * @return string|null + */ + protected function findTemplate(string $name, bool $throw = true) + { + $name = $this->normalizeName($name); + + if (isset($this->cache[$name])) { + return $this->cache[$name]; + } + + if (isset($this->errorCache[$name])) { + if (!$throw) { + return null; + } + + throw new LoaderError($this->errorCache[$name]); + } + + try { + $this->validateName($name); + + list($namespace, $shortname) = $this->parseName($name); + } catch (LoaderError $e) { + if (!$throw) { + return null; + } + + throw $e; + } + + if (!isset($this->paths[$namespace])) { + $this->errorCache[$name] = sprintf('There are no registered paths for namespace "%s".', $namespace); + + if (!$throw) { + return null; + } + + throw new LoaderError($this->errorCache[$name]); + } + + foreach ($this->paths[$namespace] as $path) { + if (!$this->isAbsolutePath($path)) { + $path = $this->rootPath.$path; + } + + if (is_file($path.'/'.$shortname)) { + if (false !== $realpath = realpath($path.'/'.$shortname)) { + return $this->cache[$name] = $realpath; + } + + return $this->cache[$name] = $path.'/'.$shortname; + } + } + + $this->errorCache[$name] = sprintf('Unable to find template "%s" (looked into: %s).', $name, implode(', ', $this->paths[$namespace])); + + if (!$throw) { + return null; + } + + throw new LoaderError($this->errorCache[$name]); + } + + private function normalizeName(string $name): string + { + return preg_replace('#/{2,}#', '/', str_replace('\\', '/', $name)); + } + + private function parseName(string $name, string $default = self::MAIN_NAMESPACE): array + { + if (isset($name[0]) && '@' == $name[0]) { + if (false === $pos = strpos($name, '/')) { + throw new LoaderError(sprintf('Malformed namespaced template name "%s" (expecting "@namespace/template_name").', $name)); + } + + $namespace = substr($name, 1, $pos - 1); + $shortname = substr($name, $pos + 1); + + return [$namespace, $shortname]; + } + + return [$default, $name]; + } + + private function validateName(string $name): void + { + if (false !== strpos($name, "\0")) { + throw new LoaderError('A template name cannot contain NUL bytes.'); + } + + $name = ltrim($name, '/'); + $parts = explode('/', $name); + $level = 0; + foreach ($parts as $part) { + if ('..' === $part) { + --$level; + } elseif ('.' !== $part) { + ++$level; + } + + if ($level < 0) { + throw new LoaderError(sprintf('Looks like you try to load a template outside configured directories (%s).', $name)); + } + } + } + + private function isAbsolutePath(string $file): bool + { + return strspn($file, '/\\', 0, 1) + || (\strlen($file) > 3 && ctype_alpha($file[0]) + && ':' === $file[1] + && strspn($file, '/\\', 2, 1) + ) + || null !== parse_url($file, PHP_URL_SCHEME) + ; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Loader/LoaderInterface.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Loader/LoaderInterface.php new file mode 100644 index 0000000..fec7e85 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Loader/LoaderInterface.php @@ -0,0 +1,49 @@ + + */ +interface LoaderInterface +{ + /** + * Returns the source context for a given template logical name. + * + * @throws LoaderError When $name is not found + */ + public function getSourceContext(string $name): Source; + + /** + * Gets the cache key to use for the cache for a given template name. + * + * @throws LoaderError When $name is not found + */ + public function getCacheKey(string $name): string; + + /** + * @param int $time Timestamp of the last modification time of the cached template + * + * @throws LoaderError When $name is not found + */ + public function isFresh(string $name, int $time): bool; + + /** + * @return bool + */ + public function exists(string $name); +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Markup.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Markup.php new file mode 100644 index 0000000..c48268a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Markup.php @@ -0,0 +1,44 @@ + + */ +class Markup implements \Countable, \JsonSerializable +{ + private $content; + private $charset; + + public function __construct($content, $charset) + { + $this->content = (string) $content; + $this->charset = $charset; + } + + public function __toString() + { + return $this->content; + } + + public function count() + { + return mb_strlen($this->content, $this->charset); + } + + public function jsonSerialize() + { + return $this->content; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/AutoEscapeNode.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/AutoEscapeNode.php new file mode 100644 index 0000000..cd97041 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/AutoEscapeNode.php @@ -0,0 +1,38 @@ + + */ +class AutoEscapeNode extends Node +{ + public function __construct($value, Node $body, int $lineno, string $tag = 'autoescape') + { + parent::__construct(['body' => $body], ['value' => $value], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler->subcompile($this->getNode('body')); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/BlockNode.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/BlockNode.php new file mode 100644 index 0000000..0632ba7 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/BlockNode.php @@ -0,0 +1,44 @@ + + */ +class BlockNode extends Node +{ + public function __construct(string $name, Node $body, int $lineno, string $tag = null) + { + parent::__construct(['body' => $body], ['name' => $name], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->addDebugInfo($this) + ->write(sprintf("public function block_%s(\$context, array \$blocks = [])\n", $this->getAttribute('name')), "{\n") + ->indent() + ->write("\$macros = \$this->macros;\n") + ; + + $compiler + ->subcompile($this->getNode('body')) + ->outdent() + ->write("}\n\n") + ; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/BlockReferenceNode.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/BlockReferenceNode.php new file mode 100644 index 0000000..cc8af5b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/BlockReferenceNode.php @@ -0,0 +1,36 @@ + + */ +class BlockReferenceNode extends Node implements NodeOutputInterface +{ + public function __construct(string $name, int $lineno, string $tag = null) + { + parent::__construct([], ['name' => $name], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->addDebugInfo($this) + ->write(sprintf("\$this->displayBlock('%s', \$context, \$blocks);\n", $this->getAttribute('name'))) + ; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/BodyNode.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/BodyNode.php new file mode 100644 index 0000000..041cbf6 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/BodyNode.php @@ -0,0 +1,21 @@ + + */ +class BodyNode extends Node +{ +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/CheckSecurityNode.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/CheckSecurityNode.php new file mode 100644 index 0000000..5bdff09 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/CheckSecurityNode.php @@ -0,0 +1,83 @@ + + */ +class CheckSecurityNode extends Node +{ + private $usedFilters; + private $usedTags; + private $usedFunctions; + + public function __construct(array $usedFilters, array $usedTags, array $usedFunctions) + { + $this->usedFilters = $usedFilters; + $this->usedTags = $usedTags; + $this->usedFunctions = $usedFunctions; + + parent::__construct(); + } + + public function compile(Compiler $compiler): void + { + $tags = $filters = $functions = []; + foreach (['tags', 'filters', 'functions'] as $type) { + foreach ($this->{'used'.ucfirst($type)} as $name => $node) { + if ($node instanceof Node) { + ${$type}[$name] = $node->getTemplateLine(); + } else { + ${$type}[$node] = null; + } + } + } + + $compiler + ->write("\$this->sandbox = \$this->env->getExtension('\Twig\Extension\SandboxExtension');\n") + ->write('$tags = ')->repr(array_filter($tags))->raw(";\n") + ->write('$filters = ')->repr(array_filter($filters))->raw(";\n") + ->write('$functions = ')->repr(array_filter($functions))->raw(";\n\n") + ->write("try {\n") + ->indent() + ->write("\$this->sandbox->checkSecurity(\n") + ->indent() + ->write(!$tags ? "[],\n" : "['".implode("', '", array_keys($tags))."'],\n") + ->write(!$filters ? "[],\n" : "['".implode("', '", array_keys($filters))."'],\n") + ->write(!$functions ? "[]\n" : "['".implode("', '", array_keys($functions))."']\n") + ->outdent() + ->write(");\n") + ->outdent() + ->write("} catch (SecurityError \$e) {\n") + ->indent() + ->write("\$e->setSourceContext(\$this->source);\n\n") + ->write("if (\$e instanceof SecurityNotAllowedTagError && isset(\$tags[\$e->getTagName()])) {\n") + ->indent() + ->write("\$e->setTemplateLine(\$tags[\$e->getTagName()]);\n") + ->outdent() + ->write("} elseif (\$e instanceof SecurityNotAllowedFilterError && isset(\$filters[\$e->getFilterName()])) {\n") + ->indent() + ->write("\$e->setTemplateLine(\$filters[\$e->getFilterName()]);\n") + ->outdent() + ->write("} elseif (\$e instanceof SecurityNotAllowedFunctionError && isset(\$functions[\$e->getFunctionName()])) {\n") + ->indent() + ->write("\$e->setTemplateLine(\$functions[\$e->getFunctionName()]);\n") + ->outdent() + ->write("}\n\n") + ->write("throw \$e;\n") + ->outdent() + ->write("}\n\n") + ; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/CheckToStringNode.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/CheckToStringNode.php new file mode 100644 index 0000000..c7a9d69 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/CheckToStringNode.php @@ -0,0 +1,45 @@ + + */ +class CheckToStringNode extends AbstractExpression +{ + public function __construct(AbstractExpression $expr) + { + parent::__construct(['expr' => $expr], [], $expr->getTemplateLine(), $expr->getNodeTag()); + } + + public function compile(Compiler $compiler): void + { + $expr = $this->getNode('expr'); + $compiler + ->raw('$this->sandbox->ensureToStringAllowed(') + ->subcompile($expr) + ->raw(', ') + ->repr($expr->getTemplateLine()) + ->raw(', $this->source)') + ; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/DeprecatedNode.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/DeprecatedNode.php new file mode 100644 index 0000000..5ff4430 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/DeprecatedNode.php @@ -0,0 +1,53 @@ + + */ +class DeprecatedNode extends Node +{ + public function __construct(AbstractExpression $expr, int $lineno, string $tag = null) + { + parent::__construct(['expr' => $expr], [], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler->addDebugInfo($this); + + $expr = $this->getNode('expr'); + + if ($expr instanceof ConstantExpression) { + $compiler->write('@trigger_error(') + ->subcompile($expr); + } else { + $varName = $compiler->getVarName(); + $compiler->write(sprintf('$%s = ', $varName)) + ->subcompile($expr) + ->raw(";\n") + ->write(sprintf('@trigger_error($%s', $varName)); + } + + $compiler + ->raw('.') + ->string(sprintf(' ("%s" at line %d).', $this->getTemplateName(), $this->getTemplateLine())) + ->raw(", E_USER_DEPRECATED);\n") + ; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/DoNode.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/DoNode.php new file mode 100644 index 0000000..f7783d1 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/DoNode.php @@ -0,0 +1,38 @@ + + */ +class DoNode extends Node +{ + public function __construct(AbstractExpression $expr, int $lineno, string $tag = null) + { + parent::__construct(['expr' => $expr], [], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->addDebugInfo($this) + ->write('') + ->subcompile($this->getNode('expr')) + ->raw(";\n") + ; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/EmbedNode.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/EmbedNode.php new file mode 100644 index 0000000..68f5791 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/EmbedNode.php @@ -0,0 +1,48 @@ + + */ +class EmbedNode extends IncludeNode +{ + // we don't inject the module to avoid node visitors to traverse it twice (as it will be already visited in the main module) + public function __construct(string $name, int $index, AbstractExpression $variables = null, bool $only = false, bool $ignoreMissing = false, int $lineno, string $tag = null) + { + parent::__construct(new ConstantExpression('not_used', $lineno), $variables, $only, $ignoreMissing, $lineno, $tag); + + $this->setAttribute('name', $name); + $this->setAttribute('index', $index); + } + + protected function addGetTemplate(Compiler $compiler): void + { + $compiler + ->write('$this->loadTemplate(') + ->string($this->getAttribute('name')) + ->raw(', ') + ->repr($this->getTemplateName()) + ->raw(', ') + ->repr($this->getTemplateLine()) + ->raw(', ') + ->string($this->getAttribute('index')) + ->raw(')') + ; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/AbstractExpression.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/AbstractExpression.php new file mode 100644 index 0000000..42da055 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/AbstractExpression.php @@ -0,0 +1,24 @@ + + */ +abstract class AbstractExpression extends Node +{ +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/ArrayExpression.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/ArrayExpression.php new file mode 100644 index 0000000..0e25fe4 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/ArrayExpression.php @@ -0,0 +1,85 @@ +index = -1; + foreach ($this->getKeyValuePairs() as $pair) { + if ($pair['key'] instanceof ConstantExpression && ctype_digit((string) $pair['key']->getAttribute('value')) && $pair['key']->getAttribute('value') > $this->index) { + $this->index = $pair['key']->getAttribute('value'); + } + } + } + + public function getKeyValuePairs(): array + { + $pairs = []; + foreach (array_chunk($this->nodes, 2) as $pair) { + $pairs[] = [ + 'key' => $pair[0], + 'value' => $pair[1], + ]; + } + + return $pairs; + } + + public function hasElement(AbstractExpression $key): bool + { + foreach ($this->getKeyValuePairs() as $pair) { + // we compare the string representation of the keys + // to avoid comparing the line numbers which are not relevant here. + if ((string) $key === (string) $pair['key']) { + return true; + } + } + + return false; + } + + public function addElement(AbstractExpression $value, AbstractExpression $key = null): void + { + if (null === $key) { + $key = new ConstantExpression(++$this->index, $value->getTemplateLine()); + } + + array_push($this->nodes, $key, $value); + } + + public function compile(Compiler $compiler): void + { + $compiler->raw('['); + $first = true; + foreach ($this->getKeyValuePairs() as $pair) { + if (!$first) { + $compiler->raw(', '); + } + $first = false; + + $compiler + ->subcompile($pair['key']) + ->raw(' => ') + ->subcompile($pair['value']) + ; + } + $compiler->raw(']'); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/ArrowFunctionExpression.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/ArrowFunctionExpression.php new file mode 100644 index 0000000..eaad03c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/ArrowFunctionExpression.php @@ -0,0 +1,64 @@ + + */ +class ArrowFunctionExpression extends AbstractExpression +{ + public function __construct(AbstractExpression $expr, Node $names, $lineno, $tag = null) + { + parent::__construct(['expr' => $expr, 'names' => $names], [], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->addDebugInfo($this) + ->raw('function (') + ; + foreach ($this->getNode('names') as $i => $name) { + if ($i) { + $compiler->raw(', '); + } + + $compiler + ->raw('$__') + ->raw($name->getAttribute('name')) + ->raw('__') + ; + } + $compiler + ->raw(') use ($context, $macros) { ') + ; + foreach ($this->getNode('names') as $name) { + $compiler + ->raw('$context["') + ->raw($name->getAttribute('name')) + ->raw('"] = $__') + ->raw($name->getAttribute('name')) + ->raw('__; ') + ; + } + $compiler + ->raw('return ') + ->subcompile($this->getNode('expr')) + ->raw('; }') + ; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/AssignNameExpression.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/AssignNameExpression.php new file mode 100644 index 0000000..7dd1bc4 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/AssignNameExpression.php @@ -0,0 +1,27 @@ +raw('$context[') + ->string($this->getAttribute('name')) + ->raw(']') + ; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/AbstractBinary.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/AbstractBinary.php new file mode 100644 index 0000000..c424e5c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/AbstractBinary.php @@ -0,0 +1,42 @@ + $left, 'right' => $right], [], $lineno); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->raw('(') + ->subcompile($this->getNode('left')) + ->raw(' ') + ; + $this->operator($compiler); + $compiler + ->raw(' ') + ->subcompile($this->getNode('right')) + ->raw(')') + ; + } + + abstract public function operator(Compiler $compiler): Compiler; +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/AddBinary.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/AddBinary.php new file mode 100644 index 0000000..ee4307e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/AddBinary.php @@ -0,0 +1,23 @@ +raw('+'); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/AndBinary.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/AndBinary.php new file mode 100644 index 0000000..5f2380d --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/AndBinary.php @@ -0,0 +1,23 @@ +raw('&&'); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/BitwiseAndBinary.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/BitwiseAndBinary.php new file mode 100644 index 0000000..db7d6d6 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/BitwiseAndBinary.php @@ -0,0 +1,23 @@ +raw('&'); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/BitwiseOrBinary.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/BitwiseOrBinary.php new file mode 100644 index 0000000..ce803dd --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/BitwiseOrBinary.php @@ -0,0 +1,23 @@ +raw('|'); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/BitwiseXorBinary.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/BitwiseXorBinary.php new file mode 100644 index 0000000..5c29785 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/BitwiseXorBinary.php @@ -0,0 +1,23 @@ +raw('^'); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/ConcatBinary.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/ConcatBinary.php new file mode 100644 index 0000000..f825ab8 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/ConcatBinary.php @@ -0,0 +1,23 @@ +raw('.'); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/DivBinary.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/DivBinary.php new file mode 100644 index 0000000..e3817d1 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/DivBinary.php @@ -0,0 +1,23 @@ +raw('/'); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/EndsWithBinary.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/EndsWithBinary.php new file mode 100644 index 0000000..c3516b8 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/EndsWithBinary.php @@ -0,0 +1,35 @@ +getVarName(); + $right = $compiler->getVarName(); + $compiler + ->raw(sprintf('(is_string($%s = ', $left)) + ->subcompile($this->getNode('left')) + ->raw(sprintf(') && is_string($%s = ', $right)) + ->subcompile($this->getNode('right')) + ->raw(sprintf(') && (\'\' === $%2$s || $%2$s === substr($%1$s, -strlen($%2$s))))', $left, $right)) + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw(''); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/EqualBinary.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/EqualBinary.php new file mode 100644 index 0000000..80ca264 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/EqualBinary.php @@ -0,0 +1,39 @@ += 80000) { + parent::compile($compiler); + + return; + } + + $compiler + ->raw('0 === twig_compare(') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw(')') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('=='); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/FloorDivBinary.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/FloorDivBinary.php new file mode 100644 index 0000000..d7e7980 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/FloorDivBinary.php @@ -0,0 +1,29 @@ +raw('(int) floor('); + parent::compile($compiler); + $compiler->raw(')'); + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('/'); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/GreaterBinary.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/GreaterBinary.php new file mode 100644 index 0000000..f1af127 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/GreaterBinary.php @@ -0,0 +1,39 @@ += 80000) { + parent::compile($compiler); + + return; + } + + $compiler + ->raw('1 === twig_compare(') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw(')') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('>'); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/GreaterEqualBinary.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/GreaterEqualBinary.php new file mode 100644 index 0000000..7d206f7 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/GreaterEqualBinary.php @@ -0,0 +1,39 @@ += 80000) { + parent::compile($compiler); + + return; + } + + $compiler + ->raw('0 <= twig_compare(') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw(')') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('>='); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/InBinary.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/InBinary.php new file mode 100644 index 0000000..6dbfa97 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/InBinary.php @@ -0,0 +1,33 @@ +raw('twig_in_filter(') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw(')') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('in'); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/LessBinary.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/LessBinary.php new file mode 100644 index 0000000..e851933 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/LessBinary.php @@ -0,0 +1,39 @@ += 80000) { + parent::compile($compiler); + + return; + } + + $compiler + ->raw('-1 === twig_compare(') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw(')') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('<'); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/LessEqualBinary.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/LessEqualBinary.php new file mode 100644 index 0000000..dccaf31 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/LessEqualBinary.php @@ -0,0 +1,39 @@ += 80000) { + parent::compile($compiler); + + return; + } + + $compiler + ->raw('0 >= twig_compare(') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw(')') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('<='); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/MatchesBinary.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/MatchesBinary.php new file mode 100644 index 0000000..bc97292 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/MatchesBinary.php @@ -0,0 +1,33 @@ +raw('preg_match(') + ->subcompile($this->getNode('right')) + ->raw(', ') + ->subcompile($this->getNode('left')) + ->raw(')') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw(''); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/ModBinary.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/ModBinary.php new file mode 100644 index 0000000..271b45c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/ModBinary.php @@ -0,0 +1,23 @@ +raw('%'); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/MulBinary.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/MulBinary.php new file mode 100644 index 0000000..6d4c1e0 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/MulBinary.php @@ -0,0 +1,23 @@ +raw('*'); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/NotEqualBinary.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/NotEqualBinary.php new file mode 100644 index 0000000..04eb546 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/NotEqualBinary.php @@ -0,0 +1,39 @@ += 80000) { + parent::compile($compiler); + + return; + } + + $compiler + ->raw('0 !== twig_compare(') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw(')') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('!='); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/NotInBinary.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/NotInBinary.php new file mode 100644 index 0000000..fcba6cc --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/NotInBinary.php @@ -0,0 +1,33 @@ +raw('!twig_in_filter(') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw(')') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('not in'); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/OrBinary.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/OrBinary.php new file mode 100644 index 0000000..21f87c9 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/OrBinary.php @@ -0,0 +1,23 @@ +raw('||'); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/PowerBinary.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/PowerBinary.php new file mode 100644 index 0000000..c9f4c66 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/PowerBinary.php @@ -0,0 +1,22 @@ +raw('**'); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/RangeBinary.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/RangeBinary.php new file mode 100644 index 0000000..55982c8 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/RangeBinary.php @@ -0,0 +1,33 @@ +raw('range(') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw(')') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('..'); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/SpaceshipBinary.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/SpaceshipBinary.php new file mode 100644 index 0000000..ae5a4a4 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/SpaceshipBinary.php @@ -0,0 +1,22 @@ +raw('<=>'); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/StartsWithBinary.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/StartsWithBinary.php new file mode 100644 index 0000000..d0df1c4 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/StartsWithBinary.php @@ -0,0 +1,35 @@ +getVarName(); + $right = $compiler->getVarName(); + $compiler + ->raw(sprintf('(is_string($%s = ', $left)) + ->subcompile($this->getNode('left')) + ->raw(sprintf(') && is_string($%s = ', $right)) + ->subcompile($this->getNode('right')) + ->raw(sprintf(') && (\'\' === $%2$s || 0 === strpos($%1$s, $%2$s)))', $left, $right)) + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw(''); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/SubBinary.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/SubBinary.php new file mode 100644 index 0000000..eeb87fa --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Binary/SubBinary.php @@ -0,0 +1,23 @@ +raw('-'); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/BlockReferenceExpression.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/BlockReferenceExpression.php new file mode 100644 index 0000000..4362be9 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/BlockReferenceExpression.php @@ -0,0 +1,86 @@ + + */ +class BlockReferenceExpression extends AbstractExpression +{ + public function __construct(Node $name, Node $template = null, int $lineno, string $tag = null) + { + $nodes = ['name' => $name]; + if (null !== $template) { + $nodes['template'] = $template; + } + + parent::__construct($nodes, ['is_defined_test' => false, 'output' => false], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + if ($this->getAttribute('is_defined_test')) { + $this->compileTemplateCall($compiler, 'hasBlock'); + } else { + if ($this->getAttribute('output')) { + $compiler->addDebugInfo($this); + + $this + ->compileTemplateCall($compiler, 'displayBlock') + ->raw(";\n"); + } else { + $this->compileTemplateCall($compiler, 'renderBlock'); + } + } + } + + private function compileTemplateCall(Compiler $compiler, string $method): Compiler + { + if (!$this->hasNode('template')) { + $compiler->write('$this'); + } else { + $compiler + ->write('$this->loadTemplate(') + ->subcompile($this->getNode('template')) + ->raw(', ') + ->repr($this->getTemplateName()) + ->raw(', ') + ->repr($this->getTemplateLine()) + ->raw(')') + ; + } + + $compiler->raw(sprintf('->%s', $method)); + + return $this->compileBlockArguments($compiler); + } + + private function compileBlockArguments(Compiler $compiler): Compiler + { + $compiler + ->raw('(') + ->subcompile($this->getNode('name')) + ->raw(', $context'); + + if (!$this->hasNode('template')) { + $compiler->raw(', $blocks'); + } + + return $compiler->raw(')'); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/CallExpression.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/CallExpression.php new file mode 100644 index 0000000..27b290b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/CallExpression.php @@ -0,0 +1,310 @@ +getAttribute('callable'); + + $closingParenthesis = false; + $isArray = false; + if (\is_string($callable) && false === strpos($callable, '::')) { + $compiler->raw($callable); + } else { + list($r, $callable) = $this->reflectCallable($callable); + if ($r instanceof \ReflectionMethod && \is_string($callable[0])) { + if ($r->isStatic()) { + $compiler->raw(sprintf('%s::%s', $callable[0], $callable[1])); + } else { + $compiler->raw(sprintf('$this->env->getRuntime(\'%s\')->%s', $callable[0], $callable[1])); + } + } elseif ($r instanceof \ReflectionMethod && $callable[0] instanceof ExtensionInterface) { + $class = \get_class($callable[0]); + if (!$compiler->getEnvironment()->hasExtension($class)) { + // Compile a non-optimized call to trigger a \Twig\Error\RuntimeError, which cannot be a compile-time error + $compiler->raw(sprintf('$this->env->getExtension(\'%s\')', $class)); + } else { + $compiler->raw(sprintf('$this->extensions[\'%s\']', ltrim($class, '\\'))); + } + + $compiler->raw(sprintf('->%s', $callable[1])); + } else { + $closingParenthesis = true; + $isArray = true; + $compiler->raw(sprintf('call_user_func_array($this->env->get%s(\'%s\')->getCallable(), ', ucfirst($this->getAttribute('type')), $this->getAttribute('name'))); + } + } + + $this->compileArguments($compiler, $isArray); + + if ($closingParenthesis) { + $compiler->raw(')'); + } + } + + protected function compileArguments(Compiler $compiler, $isArray = false): void + { + $compiler->raw($isArray ? '[' : '('); + + $first = true; + + if ($this->hasAttribute('needs_environment') && $this->getAttribute('needs_environment')) { + $compiler->raw('$this->env'); + $first = false; + } + + if ($this->hasAttribute('needs_context') && $this->getAttribute('needs_context')) { + if (!$first) { + $compiler->raw(', '); + } + $compiler->raw('$context'); + $first = false; + } + + if ($this->hasAttribute('arguments')) { + foreach ($this->getAttribute('arguments') as $argument) { + if (!$first) { + $compiler->raw(', '); + } + $compiler->string($argument); + $first = false; + } + } + + if ($this->hasNode('node')) { + if (!$first) { + $compiler->raw(', '); + } + $compiler->subcompile($this->getNode('node')); + $first = false; + } + + if ($this->hasNode('arguments')) { + $callable = $this->getAttribute('callable'); + $arguments = $this->getArguments($callable, $this->getNode('arguments')); + foreach ($arguments as $node) { + if (!$first) { + $compiler->raw(', '); + } + $compiler->subcompile($node); + $first = false; + } + } + + $compiler->raw($isArray ? ']' : ')'); + } + + protected function getArguments($callable = null, $arguments) + { + $callType = $this->getAttribute('type'); + $callName = $this->getAttribute('name'); + + $parameters = []; + $named = false; + foreach ($arguments as $name => $node) { + if (!\is_int($name)) { + $named = true; + $name = $this->normalizeName($name); + } elseif ($named) { + throw new SyntaxError(sprintf('Positional arguments cannot be used after named arguments for %s "%s".', $callType, $callName), $this->getTemplateLine(), $this->getSourceContext()); + } + + $parameters[$name] = $node; + } + + $isVariadic = $this->hasAttribute('is_variadic') && $this->getAttribute('is_variadic'); + if (!$named && !$isVariadic) { + return $parameters; + } + + if (!$callable) { + if ($named) { + $message = sprintf('Named arguments are not supported for %s "%s".', $callType, $callName); + } else { + $message = sprintf('Arbitrary positional arguments are not supported for %s "%s".', $callType, $callName); + } + + throw new \LogicException($message); + } + + list($callableParameters, $isPhpVariadic) = $this->getCallableParameters($callable, $isVariadic); + $arguments = []; + $names = []; + $missingArguments = []; + $optionalArguments = []; + $pos = 0; + foreach ($callableParameters as $callableParameter) { + $names[] = $name = $this->normalizeName($callableParameter->name); + + if (\array_key_exists($name, $parameters)) { + if (\array_key_exists($pos, $parameters)) { + throw new SyntaxError(sprintf('Argument "%s" is defined twice for %s "%s".', $name, $callType, $callName), $this->getTemplateLine(), $this->getSourceContext()); + } + + if (\count($missingArguments)) { + throw new SyntaxError(sprintf( + 'Argument "%s" could not be assigned for %s "%s(%s)" because it is mapped to an internal PHP function which cannot determine default value for optional argument%s "%s".', + $name, $callType, $callName, implode(', ', $names), \count($missingArguments) > 1 ? 's' : '', implode('", "', $missingArguments) + ), $this->getTemplateLine(), $this->getSourceContext()); + } + + $arguments = array_merge($arguments, $optionalArguments); + $arguments[] = $parameters[$name]; + unset($parameters[$name]); + $optionalArguments = []; + } elseif (\array_key_exists($pos, $parameters)) { + $arguments = array_merge($arguments, $optionalArguments); + $arguments[] = $parameters[$pos]; + unset($parameters[$pos]); + $optionalArguments = []; + ++$pos; + } elseif ($callableParameter->isDefaultValueAvailable()) { + $optionalArguments[] = new ConstantExpression($callableParameter->getDefaultValue(), -1); + } elseif ($callableParameter->isOptional()) { + if (empty($parameters)) { + break; + } else { + $missingArguments[] = $name; + } + } else { + throw new SyntaxError(sprintf('Value for argument "%s" is required for %s "%s".', $name, $callType, $callName), $this->getTemplateLine(), $this->getSourceContext()); + } + } + + if ($isVariadic) { + $arbitraryArguments = $isPhpVariadic ? new VariadicExpression([], -1) : new ArrayExpression([], -1); + foreach ($parameters as $key => $value) { + if (\is_int($key)) { + $arbitraryArguments->addElement($value); + } else { + $arbitraryArguments->addElement($value, new ConstantExpression($key, -1)); + } + unset($parameters[$key]); + } + + if ($arbitraryArguments->count()) { + $arguments = array_merge($arguments, $optionalArguments); + $arguments[] = $arbitraryArguments; + } + } + + if (!empty($parameters)) { + $unknownParameter = null; + foreach ($parameters as $parameter) { + if ($parameter instanceof Node) { + $unknownParameter = $parameter; + break; + } + } + + throw new SyntaxError( + sprintf( + 'Unknown argument%s "%s" for %s "%s(%s)".', + \count($parameters) > 1 ? 's' : '', implode('", "', array_keys($parameters)), $callType, $callName, implode(', ', $names) + ), + $unknownParameter ? $unknownParameter->getTemplateLine() : $this->getTemplateLine(), + $unknownParameter ? $unknownParameter->getSourceContext() : $this->getSourceContext() + ); + } + + return $arguments; + } + + protected function normalizeName(string $name): string + { + return strtolower(preg_replace(['/([A-Z]+)([A-Z][a-z])/', '/([a-z\d])([A-Z])/'], ['\\1_\\2', '\\1_\\2'], $name)); + } + + private function getCallableParameters($callable, bool $isVariadic): array + { + list($r) = $this->reflectCallable($callable); + if (null === $r) { + return [[], false]; + } + + $parameters = $r->getParameters(); + if ($this->hasNode('node')) { + array_shift($parameters); + } + if ($this->hasAttribute('needs_environment') && $this->getAttribute('needs_environment')) { + array_shift($parameters); + } + if ($this->hasAttribute('needs_context') && $this->getAttribute('needs_context')) { + array_shift($parameters); + } + if ($this->hasAttribute('arguments') && null !== $this->getAttribute('arguments')) { + foreach ($this->getAttribute('arguments') as $argument) { + array_shift($parameters); + } + } + $isPhpVariadic = false; + if ($isVariadic) { + $argument = end($parameters); + if ($argument && $argument->isArray() && $argument->isDefaultValueAvailable() && [] === $argument->getDefaultValue()) { + array_pop($parameters); + } elseif ($argument && $argument->isVariadic()) { + array_pop($parameters); + $isPhpVariadic = true; + } else { + $callableName = $r->name; + if ($r instanceof \ReflectionMethod) { + $callableName = $r->getDeclaringClass()->name.'::'.$callableName; + } + + throw new \LogicException(sprintf('The last parameter of "%s" for %s "%s" must be an array with default value, eg. "array $arg = []".', $callableName, $this->getAttribute('type'), $this->getAttribute('name'))); + } + } + + return [$parameters, $isPhpVariadic]; + } + + private function reflectCallable($callable) + { + if (null !== $this->reflector) { + return $this->reflector; + } + + if (\is_array($callable)) { + if (!method_exists($callable[0], $callable[1])) { + // __call() + return [null, []]; + } + $r = new \ReflectionMethod($callable[0], $callable[1]); + } elseif (\is_object($callable) && !$callable instanceof \Closure) { + $r = new \ReflectionObject($callable); + $r = $r->getMethod('__invoke'); + $callable = [$callable, '__invoke']; + } elseif (\is_string($callable) && false !== $pos = strpos($callable, '::')) { + $class = substr($callable, 0, $pos); + $method = substr($callable, $pos + 2); + if (!method_exists($class, $method)) { + // __staticCall() + return [null, []]; + } + $r = new \ReflectionMethod($callable); + $callable = [$class, $method]; + } else { + $r = new \ReflectionFunction($callable); + } + + return $this->reflector = [$r, $callable]; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/ConditionalExpression.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/ConditionalExpression.php new file mode 100644 index 0000000..2c7bd0a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/ConditionalExpression.php @@ -0,0 +1,36 @@ + $expr1, 'expr2' => $expr2, 'expr3' => $expr3], [], $lineno); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->raw('((') + ->subcompile($this->getNode('expr1')) + ->raw(') ? (') + ->subcompile($this->getNode('expr2')) + ->raw(') : (') + ->subcompile($this->getNode('expr3')) + ->raw('))') + ; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/ConstantExpression.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/ConstantExpression.php new file mode 100644 index 0000000..7ddbcc6 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/ConstantExpression.php @@ -0,0 +1,28 @@ + $value], $lineno); + } + + public function compile(Compiler $compiler): void + { + $compiler->repr($this->getAttribute('value')); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Filter/DefaultFilter.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Filter/DefaultFilter.php new file mode 100644 index 0000000..6a572d4 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Filter/DefaultFilter.php @@ -0,0 +1,52 @@ + + */ +class DefaultFilter extends FilterExpression +{ + public function __construct(Node $node, ConstantExpression $filterName, Node $arguments, int $lineno, string $tag = null) + { + $default = new FilterExpression($node, new ConstantExpression('default', $node->getTemplateLine()), $arguments, $node->getTemplateLine()); + + if ('default' === $filterName->getAttribute('value') && ($node instanceof NameExpression || $node instanceof GetAttrExpression)) { + $test = new DefinedTest(clone $node, 'defined', new Node(), $node->getTemplateLine()); + $false = \count($arguments) ? $arguments->getNode(0) : new ConstantExpression('', $node->getTemplateLine()); + + $node = new ConditionalExpression($test, $default, $false, $node->getTemplateLine()); + } else { + $node = $default; + } + + parent::__construct($node, $filterName, $arguments, $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler->subcompile($this->getNode('node')); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/FilterExpression.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/FilterExpression.php new file mode 100644 index 0000000..0fc1588 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/FilterExpression.php @@ -0,0 +1,40 @@ + $node, 'filter' => $filterName, 'arguments' => $arguments], [], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $name = $this->getNode('filter')->getAttribute('value'); + $filter = $compiler->getEnvironment()->getFilter($name); + + $this->setAttribute('name', $name); + $this->setAttribute('type', 'filter'); + $this->setAttribute('needs_environment', $filter->needsEnvironment()); + $this->setAttribute('needs_context', $filter->needsContext()); + $this->setAttribute('arguments', $filter->getArguments()); + $this->setAttribute('callable', $filter->getCallable()); + $this->setAttribute('is_variadic', $filter->isVariadic()); + + $this->compileCallable($compiler); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/FunctionExpression.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/FunctionExpression.php new file mode 100644 index 0000000..7126977 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/FunctionExpression.php @@ -0,0 +1,43 @@ + $arguments], ['name' => $name, 'is_defined_test' => false], $lineno); + } + + public function compile(Compiler $compiler) + { + $name = $this->getAttribute('name'); + $function = $compiler->getEnvironment()->getFunction($name); + + $this->setAttribute('name', $name); + $this->setAttribute('type', 'function'); + $this->setAttribute('needs_environment', $function->needsEnvironment()); + $this->setAttribute('needs_context', $function->needsContext()); + $this->setAttribute('arguments', $function->getArguments()); + $callable = $function->getCallable(); + if ('constant' === $name && $this->getAttribute('is_defined_test')) { + $callable = 'twig_constant_is_defined'; + } + $this->setAttribute('callable', $callable); + $this->setAttribute('is_variadic', $function->isVariadic()); + + $this->compileCallable($compiler); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/GetAttrExpression.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/GetAttrExpression.php new file mode 100644 index 0000000..6527af1 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/GetAttrExpression.php @@ -0,0 +1,87 @@ + $node, 'attribute' => $attribute]; + if (null !== $arguments) { + $nodes['arguments'] = $arguments; + } + + parent::__construct($nodes, ['type' => $type, 'is_defined_test' => false, 'ignore_strict_check' => false, 'optimizable' => true], $lineno); + } + + public function compile(Compiler $compiler): void + { + $env = $compiler->getEnvironment(); + + // optimize array calls + if ( + $this->getAttribute('optimizable') + && (!$env->isStrictVariables() || $this->getAttribute('ignore_strict_check')) + && !$this->getAttribute('is_defined_test') + && Template::ARRAY_CALL === $this->getAttribute('type') + ) { + $var = '$'.$compiler->getVarName(); + $compiler + ->raw('(('.$var.' = ') + ->subcompile($this->getNode('node')) + ->raw(') && is_array(') + ->raw($var) + ->raw(') || ') + ->raw($var) + ->raw(' instanceof ArrayAccess ? (') + ->raw($var) + ->raw('[') + ->subcompile($this->getNode('attribute')) + ->raw('] ?? null) : null)') + ; + + return; + } + + $compiler->raw('twig_get_attribute($this->env, $this->source, '); + + if ($this->getAttribute('ignore_strict_check')) { + $this->getNode('node')->setAttribute('ignore_strict_check', true); + } + + $compiler + ->subcompile($this->getNode('node')) + ->raw(', ') + ->subcompile($this->getNode('attribute')) + ; + + if ($this->hasNode('arguments')) { + $compiler->raw(', ')->subcompile($this->getNode('arguments')); + } else { + $compiler->raw(', []'); + } + + $compiler->raw(', ') + ->repr($this->getAttribute('type')) + ->raw(', ')->repr($this->getAttribute('is_defined_test')) + ->raw(', ')->repr($this->getAttribute('ignore_strict_check')) + ->raw(', ')->repr($env->hasExtension(SandboxExtension::class)) + ->raw(', ')->repr($this->getNode('node')->getTemplateLine()) + ->raw(')') + ; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/InlinePrint.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/InlinePrint.php new file mode 100644 index 0000000..1ad4751 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/InlinePrint.php @@ -0,0 +1,35 @@ + $node], [], $lineno); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->raw('print (') + ->subcompile($this->getNode('node')) + ->raw(')') + ; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/MethodCallExpression.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/MethodCallExpression.php new file mode 100644 index 0000000..d5ec0b6 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/MethodCallExpression.php @@ -0,0 +1,62 @@ + $node, 'arguments' => $arguments], ['method' => $method, 'safe' => false, 'is_defined_test' => false], $lineno); + + if ($node instanceof NameExpression) { + $node->setAttribute('always_defined', true); + } + } + + public function compile(Compiler $compiler): void + { + if ($this->getAttribute('is_defined_test')) { + $compiler + ->raw('method_exists($macros[') + ->repr($this->getNode('node')->getAttribute('name')) + ->raw('], ') + ->repr($this->getAttribute('method')) + ->raw(')') + ; + + return; + } + + $compiler + ->raw('twig_call_macro($macros[') + ->repr($this->getNode('node')->getAttribute('name')) + ->raw('], ') + ->repr($this->getAttribute('method')) + ->raw(', [') + ; + $first = true; + foreach ($this->getNode('arguments')->getKeyValuePairs() as $pair) { + if (!$first) { + $compiler->raw(', '); + } + $first = false; + + $compiler->subcompile($pair['value']); + } + $compiler + ->raw('], ') + ->repr($this->getTemplateLine()) + ->raw(', $context, $this->getSourceContext())'); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/NameExpression.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/NameExpression.php new file mode 100644 index 0000000..017e831 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/NameExpression.php @@ -0,0 +1,97 @@ + '$this->getTemplateName()', + '_context' => '$context', + '_charset' => '$this->env->getCharset()', + ]; + + public function __construct(string $name, int $lineno) + { + parent::__construct([], ['name' => $name, 'is_defined_test' => false, 'ignore_strict_check' => false, 'always_defined' => false], $lineno); + } + + public function compile(Compiler $compiler): void + { + $name = $this->getAttribute('name'); + + $compiler->addDebugInfo($this); + + if ($this->getAttribute('is_defined_test')) { + if ($this->isSpecial()) { + $compiler->repr(true); + } elseif (\PHP_VERSION_ID >= 700400) { + $compiler + ->raw('array_key_exists(') + ->string($name) + ->raw(', $context)') + ; + } else { + $compiler + ->raw('(isset($context[') + ->string($name) + ->raw(']) || array_key_exists(') + ->string($name) + ->raw(', $context))') + ; + } + } elseif ($this->isSpecial()) { + $compiler->raw($this->specialVars[$name]); + } elseif ($this->getAttribute('always_defined')) { + $compiler + ->raw('$context[') + ->string($name) + ->raw(']') + ; + } else { + if ($this->getAttribute('ignore_strict_check') || !$compiler->getEnvironment()->isStrictVariables()) { + $compiler + ->raw('($context[') + ->string($name) + ->raw('] ?? null)') + ; + } else { + $compiler + ->raw('(isset($context[') + ->string($name) + ->raw(']) || array_key_exists(') + ->string($name) + ->raw(', $context) ? $context[') + ->string($name) + ->raw('] : (function () { throw new RuntimeError(\'Variable ') + ->string($name) + ->raw(' does not exist.\', ') + ->repr($this->lineno) + ->raw(', $this->source); })()') + ->raw(')') + ; + } + } + } + + public function isSpecial() + { + return isset($this->specialVars[$this->getAttribute('name')]); + } + + public function isSimple() + { + return !$this->isSpecial() && !$this->getAttribute('is_defined_test'); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/NullCoalesceExpression.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/NullCoalesceExpression.php new file mode 100644 index 0000000..a72bc4f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/NullCoalesceExpression.php @@ -0,0 +1,60 @@ +getTemplateLine()); + // for "block()", we don't need the null test as the return value is always a string + if (!$left instanceof BlockReferenceExpression) { + $test = new AndBinary( + $test, + new NotUnary(new NullTest($left, 'null', new Node(), $left->getTemplateLine()), $left->getTemplateLine()), + $left->getTemplateLine() + ); + } + + parent::__construct($test, $left, $right, $lineno); + } + + public function compile(Compiler $compiler): void + { + /* + * This optimizes only one case. PHP 7 also supports more complex expressions + * that can return null. So, for instance, if log is defined, log("foo") ?? "..." works, + * but log($a["foo"]) ?? "..." does not if $a["foo"] is not defined. More advanced + * cases might be implemented as an optimizer node visitor, but has not been done + * as benefits are probably not worth the added complexity. + */ + if ($this->getNode('expr2') instanceof NameExpression) { + $this->getNode('expr2')->setAttribute('always_defined', true); + $compiler + ->raw('((') + ->subcompile($this->getNode('expr2')) + ->raw(') ?? (') + ->subcompile($this->getNode('expr3')) + ->raw('))') + ; + } else { + parent::compile($compiler); + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/ParentExpression.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/ParentExpression.php new file mode 100644 index 0000000..2549197 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/ParentExpression.php @@ -0,0 +1,46 @@ + + */ +class ParentExpression extends AbstractExpression +{ + public function __construct(string $name, int $lineno, string $tag = null) + { + parent::__construct([], ['output' => false, 'name' => $name], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + if ($this->getAttribute('output')) { + $compiler + ->addDebugInfo($this) + ->write('$this->displayParentBlock(') + ->string($this->getAttribute('name')) + ->raw(", \$context, \$blocks);\n") + ; + } else { + $compiler + ->raw('$this->renderParentBlock(') + ->string($this->getAttribute('name')) + ->raw(', $context, $blocks)') + ; + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/TempNameExpression.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/TempNameExpression.php new file mode 100644 index 0000000..004c704 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/TempNameExpression.php @@ -0,0 +1,31 @@ + $name], $lineno); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->raw('$_') + ->raw($this->getAttribute('name')) + ->raw('_') + ; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Test/ConstantTest.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Test/ConstantTest.php new file mode 100644 index 0000000..57e9319 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Test/ConstantTest.php @@ -0,0 +1,49 @@ + + */ +class ConstantTest extends TestExpression +{ + public function compile(Compiler $compiler): void + { + $compiler + ->raw('(') + ->subcompile($this->getNode('node')) + ->raw(' === constant(') + ; + + if ($this->getNode('arguments')->hasNode(1)) { + $compiler + ->raw('get_class(') + ->subcompile($this->getNode('arguments')->getNode(1)) + ->raw(')."::".') + ; + } + + $compiler + ->subcompile($this->getNode('arguments')->getNode(0)) + ->raw('))') + ; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Test/DefinedTest.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Test/DefinedTest.php new file mode 100644 index 0000000..8ccfc8e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Test/DefinedTest.php @@ -0,0 +1,74 @@ + + */ +class DefinedTest extends TestExpression +{ + public function __construct(Node $node, string $name, Node $arguments = null, int $lineno) + { + if ($node instanceof NameExpression) { + $node->setAttribute('is_defined_test', true); + } elseif ($node instanceof GetAttrExpression) { + $node->setAttribute('is_defined_test', true); + $this->changeIgnoreStrictCheck($node); + } elseif ($node instanceof BlockReferenceExpression) { + $node->setAttribute('is_defined_test', true); + } elseif ($node instanceof FunctionExpression && 'constant' === $node->getAttribute('name')) { + $node->setAttribute('is_defined_test', true); + } elseif ($node instanceof ConstantExpression || $node instanceof ArrayExpression) { + $node = new ConstantExpression(true, $node->getTemplateLine()); + } elseif ($node instanceof MethodCallExpression) { + $node->setAttribute('is_defined_test', true); + } else { + throw new SyntaxError('The "defined" test only works with simple variables.', $lineno); + } + + parent::__construct($node, $name, $arguments, $lineno); + } + + private function changeIgnoreStrictCheck(GetAttrExpression $node) + { + $node->setAttribute('optimizable', false); + $node->setAttribute('ignore_strict_check', true); + + if ($node->getNode('node') instanceof GetAttrExpression) { + $this->changeIgnoreStrictCheck($node->getNode('node')); + } + } + + public function compile(Compiler $compiler): void + { + $compiler->subcompile($this->getNode('node')); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Test/DivisiblebyTest.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Test/DivisiblebyTest.php new file mode 100644 index 0000000..4cb3ee0 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Test/DivisiblebyTest.php @@ -0,0 +1,36 @@ + + */ +class DivisiblebyTest extends TestExpression +{ + public function compile(Compiler $compiler): void + { + $compiler + ->raw('(0 == ') + ->subcompile($this->getNode('node')) + ->raw(' % ') + ->subcompile($this->getNode('arguments')->getNode(0)) + ->raw(')') + ; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Test/EvenTest.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Test/EvenTest.php new file mode 100644 index 0000000..a0e3ed6 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Test/EvenTest.php @@ -0,0 +1,35 @@ + + */ +class EvenTest extends TestExpression +{ + public function compile(Compiler $compiler): void + { + $compiler + ->raw('(') + ->subcompile($this->getNode('node')) + ->raw(' % 2 == 0') + ->raw(')') + ; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Test/NullTest.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Test/NullTest.php new file mode 100644 index 0000000..45b54ae --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Test/NullTest.php @@ -0,0 +1,34 @@ + + */ +class NullTest extends TestExpression +{ + public function compile(Compiler $compiler): void + { + $compiler + ->raw('(null === ') + ->subcompile($this->getNode('node')) + ->raw(')') + ; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Test/OddTest.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Test/OddTest.php new file mode 100644 index 0000000..daeec6c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Test/OddTest.php @@ -0,0 +1,35 @@ + + */ +class OddTest extends TestExpression +{ + public function compile(Compiler $compiler): void + { + $compiler + ->raw('(') + ->subcompile($this->getNode('node')) + ->raw(' % 2 == 1') + ->raw(')') + ; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Test/SameasTest.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Test/SameasTest.php new file mode 100644 index 0000000..c96d2bc --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Test/SameasTest.php @@ -0,0 +1,34 @@ + + */ +class SameasTest extends TestExpression +{ + public function compile(Compiler $compiler): void + { + $compiler + ->raw('(') + ->subcompile($this->getNode('node')) + ->raw(' === ') + ->subcompile($this->getNode('arguments')->getNode(0)) + ->raw(')') + ; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/TestExpression.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/TestExpression.php new file mode 100644 index 0000000..e0c90c3 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/TestExpression.php @@ -0,0 +1,42 @@ + $node]; + if (null !== $arguments) { + $nodes['arguments'] = $arguments; + } + + parent::__construct($nodes, ['name' => $name], $lineno); + } + + public function compile(Compiler $compiler): void + { + $name = $this->getAttribute('name'); + $test = $compiler->getEnvironment()->getTest($name); + + $this->setAttribute('name', $name); + $this->setAttribute('type', 'test'); + $this->setAttribute('arguments', $test->getArguments()); + $this->setAttribute('callable', $test->getCallable()); + $this->setAttribute('is_variadic', $test->isVariadic()); + + $this->compileCallable($compiler); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Unary/AbstractUnary.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Unary/AbstractUnary.php new file mode 100644 index 0000000..e31e3f8 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Unary/AbstractUnary.php @@ -0,0 +1,34 @@ + $node], [], $lineno); + } + + public function compile(Compiler $compiler): void + { + $compiler->raw(' '); + $this->operator($compiler); + $compiler->subcompile($this->getNode('node')); + } + + abstract public function operator(Compiler $compiler): Compiler; +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Unary/NegUnary.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Unary/NegUnary.php new file mode 100644 index 0000000..dc2f235 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Unary/NegUnary.php @@ -0,0 +1,23 @@ +raw('-'); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Unary/NotUnary.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Unary/NotUnary.php new file mode 100644 index 0000000..55c11ba --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Unary/NotUnary.php @@ -0,0 +1,23 @@ +raw('!'); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Unary/PosUnary.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Unary/PosUnary.php new file mode 100644 index 0000000..4b0a062 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/Unary/PosUnary.php @@ -0,0 +1,23 @@ +raw('+'); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/VariadicExpression.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/VariadicExpression.php new file mode 100644 index 0000000..a1bdb48 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Expression/VariadicExpression.php @@ -0,0 +1,24 @@ +raw('...'); + + parent::compile($compiler); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/FlushNode.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/FlushNode.php new file mode 100644 index 0000000..fa50a88 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/FlushNode.php @@ -0,0 +1,35 @@ + + */ +class FlushNode extends Node +{ + public function __construct(int $lineno, string $tag) + { + parent::__construct([], [], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->addDebugInfo($this) + ->write("flush();\n") + ; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/ForLoopNode.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/ForLoopNode.php new file mode 100644 index 0000000..d5ce845 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/ForLoopNode.php @@ -0,0 +1,49 @@ + + */ +class ForLoopNode extends Node +{ + public function __construct(int $lineno, string $tag = null) + { + parent::__construct([], ['with_loop' => false, 'ifexpr' => false, 'else' => false], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + if ($this->getAttribute('else')) { + $compiler->write("\$context['_iterated'] = true;\n"); + } + + if ($this->getAttribute('with_loop')) { + $compiler + ->write("++\$context['loop']['index0'];\n") + ->write("++\$context['loop']['index'];\n") + ->write("\$context['loop']['first'] = false;\n") + ->write("if (isset(\$context['loop']['length'])) {\n") + ->indent() + ->write("--\$context['loop']['revindex0'];\n") + ->write("--\$context['loop']['revindex'];\n") + ->write("\$context['loop']['last'] = 0 === \$context['loop']['revindex0'];\n") + ->outdent() + ->write("}\n") + ; + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/ForNode.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/ForNode.php new file mode 100644 index 0000000..fd7ea68 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/ForNode.php @@ -0,0 +1,107 @@ + + */ +class ForNode extends Node +{ + private $loop; + + public function __construct(AssignNameExpression $keyTarget, AssignNameExpression $valueTarget, AbstractExpression $seq, $ifexpr = null, Node $body, Node $else = null, int $lineno, string $tag = null) + { + $body = new Node([$body, $this->loop = new ForLoopNode($lineno, $tag)]); + + $nodes = ['key_target' => $keyTarget, 'value_target' => $valueTarget, 'seq' => $seq, 'body' => $body]; + if (null !== $else) { + $nodes['else'] = $else; + } + + parent::__construct($nodes, ['with_loop' => true], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->addDebugInfo($this) + ->write("\$context['_parent'] = \$context;\n") + ->write("\$context['_seq'] = twig_ensure_traversable(") + ->subcompile($this->getNode('seq')) + ->raw(");\n") + ; + + if ($this->hasNode('else')) { + $compiler->write("\$context['_iterated'] = false;\n"); + } + + if ($this->getAttribute('with_loop')) { + $compiler + ->write("\$context['loop'] = [\n") + ->write(" 'parent' => \$context['_parent'],\n") + ->write(" 'index0' => 0,\n") + ->write(" 'index' => 1,\n") + ->write(" 'first' => true,\n") + ->write("];\n") + ->write("if (is_array(\$context['_seq']) || (is_object(\$context['_seq']) && \$context['_seq'] instanceof \Countable)) {\n") + ->indent() + ->write("\$length = count(\$context['_seq']);\n") + ->write("\$context['loop']['revindex0'] = \$length - 1;\n") + ->write("\$context['loop']['revindex'] = \$length;\n") + ->write("\$context['loop']['length'] = \$length;\n") + ->write("\$context['loop']['last'] = 1 === \$length;\n") + ->outdent() + ->write("}\n") + ; + } + + $this->loop->setAttribute('else', $this->hasNode('else')); + $this->loop->setAttribute('with_loop', $this->getAttribute('with_loop')); + + $compiler + ->write("foreach (\$context['_seq'] as ") + ->subcompile($this->getNode('key_target')) + ->raw(' => ') + ->subcompile($this->getNode('value_target')) + ->raw(") {\n") + ->indent() + ->subcompile($this->getNode('body')) + ->outdent() + ->write("}\n") + ; + + if ($this->hasNode('else')) { + $compiler + ->write("if (!\$context['_iterated']) {\n") + ->indent() + ->subcompile($this->getNode('else')) + ->outdent() + ->write("}\n") + ; + } + + $compiler->write("\$_parent = \$context['_parent'];\n"); + + // remove some "private" loop variables (needed for nested loops) + $compiler->write('unset($context[\'_seq\'], $context[\'_iterated\'], $context[\''.$this->getNode('key_target')->getAttribute('name').'\'], $context[\''.$this->getNode('value_target')->getAttribute('name').'\'], $context[\'_parent\'], $context[\'loop\']);'."\n"); + + // keep the values set in the inner context for variables defined in the outer context + $compiler->write("\$context = array_intersect_key(\$context, \$_parent) + \$_parent;\n"); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/IfNode.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/IfNode.php new file mode 100644 index 0000000..bfc5371 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/IfNode.php @@ -0,0 +1,70 @@ + + */ +class IfNode extends Node +{ + public function __construct(Node $tests, Node $else = null, int $lineno, string $tag = null) + { + $nodes = ['tests' => $tests]; + if (null !== $else) { + $nodes['else'] = $else; + } + + parent::__construct($nodes, [], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler->addDebugInfo($this); + for ($i = 0, $count = \count($this->getNode('tests')); $i < $count; $i += 2) { + if ($i > 0) { + $compiler + ->outdent() + ->write('} elseif (') + ; + } else { + $compiler + ->write('if (') + ; + } + + $compiler + ->subcompile($this->getNode('tests')->getNode($i)) + ->raw(") {\n") + ->indent() + ->subcompile($this->getNode('tests')->getNode($i + 1)) + ; + } + + if ($this->hasNode('else')) { + $compiler + ->outdent() + ->write("} else {\n") + ->indent() + ->subcompile($this->getNode('else')) + ; + } + + $compiler + ->outdent() + ->write("}\n"); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/ImportNode.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/ImportNode.php new file mode 100644 index 0000000..5378d79 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/ImportNode.php @@ -0,0 +1,63 @@ + + */ +class ImportNode extends Node +{ + public function __construct(AbstractExpression $expr, AbstractExpression $var, int $lineno, string $tag = null, bool $global = true) + { + parent::__construct(['expr' => $expr, 'var' => $var], ['global' => $global], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->addDebugInfo($this) + ->write('$macros[') + ->repr($this->getNode('var')->getAttribute('name')) + ->raw('] = ') + ; + + if ($this->getAttribute('global')) { + $compiler + ->raw('$this->macros[') + ->repr($this->getNode('var')->getAttribute('name')) + ->raw('] = ') + ; + } + + if ($this->getNode('expr') instanceof NameExpression && '_self' === $this->getNode('expr')->getAttribute('name')) { + $compiler->raw('$this'); + } else { + $compiler + ->raw('$this->loadTemplate(') + ->subcompile($this->getNode('expr')) + ->raw(', ') + ->repr($this->getTemplateName()) + ->raw(', ') + ->repr($this->getTemplateLine()) + ->raw(')->unwrap()') + ; + } + + $compiler->raw(";\n"); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/IncludeNode.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/IncludeNode.php new file mode 100644 index 0000000..c592353 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/IncludeNode.php @@ -0,0 +1,106 @@ + + */ +class IncludeNode extends Node implements NodeOutputInterface +{ + public function __construct(AbstractExpression $expr, AbstractExpression $variables = null, bool $only = false, bool $ignoreMissing = false, int $lineno, string $tag = null) + { + $nodes = ['expr' => $expr]; + if (null !== $variables) { + $nodes['variables'] = $variables; + } + + parent::__construct($nodes, ['only' => (bool) $only, 'ignore_missing' => (bool) $ignoreMissing], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler->addDebugInfo($this); + + if ($this->getAttribute('ignore_missing')) { + $template = $compiler->getVarName(); + + $compiler + ->write(sprintf("$%s = null;\n", $template)) + ->write("try {\n") + ->indent() + ->write(sprintf('$%s = ', $template)) + ; + + $this->addGetTemplate($compiler); + + $compiler + ->raw(";\n") + ->outdent() + ->write("} catch (LoaderError \$e) {\n") + ->indent() + ->write("// ignore missing template\n") + ->outdent() + ->write("}\n") + ->write(sprintf("if ($%s) {\n", $template)) + ->indent() + ->write(sprintf('$%s->display(', $template)) + ; + $this->addTemplateArguments($compiler); + $compiler + ->raw(");\n") + ->outdent() + ->write("}\n") + ; + } else { + $this->addGetTemplate($compiler); + $compiler->raw('->display('); + $this->addTemplateArguments($compiler); + $compiler->raw(");\n"); + } + } + + protected function addGetTemplate(Compiler $compiler) + { + $compiler + ->write('$this->loadTemplate(') + ->subcompile($this->getNode('expr')) + ->raw(', ') + ->repr($this->getTemplateName()) + ->raw(', ') + ->repr($this->getTemplateLine()) + ->raw(')') + ; + } + + protected function addTemplateArguments(Compiler $compiler) + { + if (!$this->hasNode('variables')) { + $compiler->raw(false === $this->getAttribute('only') ? '$context' : '[]'); + } elseif (false === $this->getAttribute('only')) { + $compiler + ->raw('twig_array_merge($context, ') + ->subcompile($this->getNode('variables')) + ->raw(')') + ; + } else { + $compiler->raw('twig_to_array('); + $compiler->subcompile($this->getNode('variables')); + $compiler->raw(')'); + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/MacroNode.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/MacroNode.php new file mode 100644 index 0000000..cfe38f8 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/MacroNode.php @@ -0,0 +1,113 @@ + + */ +class MacroNode extends Node +{ + const VARARGS_NAME = 'varargs'; + + public function __construct(string $name, Node $body, Node $arguments, int $lineno, string $tag = null) + { + foreach ($arguments as $argumentName => $argument) { + if (self::VARARGS_NAME === $argumentName) { + throw new SyntaxError(sprintf('The argument "%s" in macro "%s" cannot be defined because the variable "%s" is reserved for arbitrary arguments.', self::VARARGS_NAME, $name, self::VARARGS_NAME), $argument->getTemplateLine(), $argument->getSourceContext()); + } + } + + parent::__construct(['body' => $body, 'arguments' => $arguments], ['name' => $name], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->addDebugInfo($this) + ->write(sprintf('public function macro_%s(', $this->getAttribute('name'))) + ; + + $count = \count($this->getNode('arguments')); + $pos = 0; + foreach ($this->getNode('arguments') as $name => $default) { + $compiler + ->raw('$__'.$name.'__ = ') + ->subcompile($default) + ; + + if (++$pos < $count) { + $compiler->raw(', '); + } + } + + if ($count) { + $compiler->raw(', '); + } + + $compiler + ->raw('...$__varargs__') + ->raw(")\n") + ->write("{\n") + ->indent() + ->write("\$macros = \$this->macros;\n") + ->write("\$context = \$this->env->mergeGlobals([\n") + ->indent() + ; + + foreach ($this->getNode('arguments') as $name => $default) { + $compiler + ->write('') + ->string($name) + ->raw(' => $__'.$name.'__') + ->raw(",\n") + ; + } + + $compiler + ->write('') + ->string(self::VARARGS_NAME) + ->raw(' => ') + ; + + $compiler + ->raw("\$__varargs__,\n") + ->outdent() + ->write("]);\n\n") + ->write("\$blocks = [];\n\n") + ; + if ($compiler->getEnvironment()->isDebug()) { + $compiler->write("ob_start();\n"); + } else { + $compiler->write("ob_start(function () { return ''; });\n"); + } + $compiler + ->write("try {\n") + ->indent() + ->subcompile($this->getNode('body')) + ->raw("\n") + ->write("return ('' === \$tmp = ob_get_contents()) ? '' : new Markup(\$tmp, \$this->env->getCharset());\n") + ->outdent() + ->write("} finally {\n") + ->indent() + ->write("ob_end_clean();\n") + ->outdent() + ->write("}\n") + ->outdent() + ->write("}\n\n") + ; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/ModuleNode.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/ModuleNode.php new file mode 100644 index 0000000..93eef12 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/ModuleNode.php @@ -0,0 +1,464 @@ + + */ +final class ModuleNode extends Node +{ + public function __construct(Node $body, AbstractExpression $parent = null, Node $blocks, Node $macros, Node $traits, $embeddedTemplates, Source $source) + { + $nodes = [ + 'body' => $body, + 'blocks' => $blocks, + 'macros' => $macros, + 'traits' => $traits, + 'display_start' => new Node(), + 'display_end' => new Node(), + 'constructor_start' => new Node(), + 'constructor_end' => new Node(), + 'class_end' => new Node(), + ]; + if (null !== $parent) { + $nodes['parent'] = $parent; + } + + // embedded templates are set as attributes so that they are only visited once by the visitors + parent::__construct($nodes, [ + 'index' => null, + 'embedded_templates' => $embeddedTemplates, + ], 1); + + // populate the template name of all node children + $this->setSourceContext($source); + } + + public function setIndex($index) + { + $this->setAttribute('index', $index); + } + + public function compile(Compiler $compiler): void + { + $this->compileTemplate($compiler); + + foreach ($this->getAttribute('embedded_templates') as $template) { + $compiler->subcompile($template); + } + } + + protected function compileTemplate(Compiler $compiler) + { + if (!$this->getAttribute('index')) { + $compiler->write('compileClassHeader($compiler); + + $this->compileConstructor($compiler); + + $this->compileGetParent($compiler); + + $this->compileDisplay($compiler); + + $compiler->subcompile($this->getNode('blocks')); + + $this->compileMacros($compiler); + + $this->compileGetTemplateName($compiler); + + $this->compileIsTraitable($compiler); + + $this->compileDebugInfo($compiler); + + $this->compileGetSourceContext($compiler); + + $this->compileClassFooter($compiler); + } + + protected function compileGetParent(Compiler $compiler) + { + if (!$this->hasNode('parent')) { + return; + } + $parent = $this->getNode('parent'); + + $compiler + ->write("protected function doGetParent(array \$context)\n", "{\n") + ->indent() + ->addDebugInfo($parent) + ->write('return ') + ; + + if ($parent instanceof ConstantExpression) { + $compiler->subcompile($parent); + } else { + $compiler + ->raw('$this->loadTemplate(') + ->subcompile($parent) + ->raw(', ') + ->repr($this->getSourceContext()->getName()) + ->raw(', ') + ->repr($parent->getTemplateLine()) + ->raw(')') + ; + } + + $compiler + ->raw(";\n") + ->outdent() + ->write("}\n\n") + ; + } + + protected function compileClassHeader(Compiler $compiler) + { + $compiler + ->write("\n\n") + ; + if (!$this->getAttribute('index')) { + $compiler + ->write("use Twig\Environment;\n") + ->write("use Twig\Error\LoaderError;\n") + ->write("use Twig\Error\RuntimeError;\n") + ->write("use Twig\Extension\SandboxExtension;\n") + ->write("use Twig\Markup;\n") + ->write("use Twig\Sandbox\SecurityError;\n") + ->write("use Twig\Sandbox\SecurityNotAllowedTagError;\n") + ->write("use Twig\Sandbox\SecurityNotAllowedFilterError;\n") + ->write("use Twig\Sandbox\SecurityNotAllowedFunctionError;\n") + ->write("use Twig\Source;\n") + ->write("use Twig\Template;\n\n") + ; + } + $compiler + // if the template name contains */, add a blank to avoid a PHP parse error + ->write('/* '.str_replace('*/', '* /', $this->getSourceContext()->getName())." */\n") + ->write('class '.$compiler->getEnvironment()->getTemplateClass($this->getSourceContext()->getName(), $this->getAttribute('index'))) + ->raw(" extends Template\n") + ->write("{\n") + ->indent() + ->write("private \$source;\n") + ->write("private \$macros = [];\n\n") + ; + } + + protected function compileConstructor(Compiler $compiler) + { + $compiler + ->write("public function __construct(Environment \$env)\n", "{\n") + ->indent() + ->subcompile($this->getNode('constructor_start')) + ->write("parent::__construct(\$env);\n\n") + ->write("\$this->source = \$this->getSourceContext();\n\n") + ; + + // parent + if (!$this->hasNode('parent')) { + $compiler->write("\$this->parent = false;\n\n"); + } + + $countTraits = \count($this->getNode('traits')); + if ($countTraits) { + // traits + foreach ($this->getNode('traits') as $i => $trait) { + $node = $trait->getNode('template'); + + $compiler + ->addDebugInfo($node) + ->write(sprintf('$_trait_%s = $this->loadTemplate(', $i)) + ->subcompile($node) + ->raw(', ') + ->repr($node->getTemplateName()) + ->raw(', ') + ->repr($node->getTemplateLine()) + ->raw(");\n") + ->write(sprintf("if (!\$_trait_%s->isTraitable()) {\n", $i)) + ->indent() + ->write("throw new RuntimeError('Template \"'.") + ->subcompile($trait->getNode('template')) + ->raw(".'\" cannot be used as a trait.', ") + ->repr($node->getTemplateLine()) + ->raw(", \$this->source);\n") + ->outdent() + ->write("}\n") + ->write(sprintf("\$_trait_%s_blocks = \$_trait_%s->getBlocks();\n\n", $i, $i)) + ; + + foreach ($trait->getNode('targets') as $key => $value) { + $compiler + ->write(sprintf('if (!isset($_trait_%s_blocks[', $i)) + ->string($key) + ->raw("])) {\n") + ->indent() + ->write("throw new RuntimeError('Block ") + ->string($key) + ->raw(' is not defined in trait ') + ->subcompile($trait->getNode('template')) + ->raw(".', ") + ->repr($node->getTemplateLine()) + ->raw(", \$this->source);\n") + ->outdent() + ->write("}\n\n") + + ->write(sprintf('$_trait_%s_blocks[', $i)) + ->subcompile($value) + ->raw(sprintf('] = $_trait_%s_blocks[', $i)) + ->string($key) + ->raw(sprintf(']; unset($_trait_%s_blocks[', $i)) + ->string($key) + ->raw("]);\n\n") + ; + } + } + + if ($countTraits > 1) { + $compiler + ->write("\$this->traits = array_merge(\n") + ->indent() + ; + + for ($i = 0; $i < $countTraits; ++$i) { + $compiler + ->write(sprintf('$_trait_%s_blocks'.($i == $countTraits - 1 ? '' : ',')."\n", $i)) + ; + } + + $compiler + ->outdent() + ->write(");\n\n") + ; + } else { + $compiler + ->write("\$this->traits = \$_trait_0_blocks;\n\n") + ; + } + + $compiler + ->write("\$this->blocks = array_merge(\n") + ->indent() + ->write("\$this->traits,\n") + ->write("[\n") + ; + } else { + $compiler + ->write("\$this->blocks = [\n") + ; + } + + // blocks + $compiler + ->indent() + ; + + foreach ($this->getNode('blocks') as $name => $node) { + $compiler + ->write(sprintf("'%s' => [\$this, 'block_%s'],\n", $name, $name)) + ; + } + + if ($countTraits) { + $compiler + ->outdent() + ->write("]\n") + ->outdent() + ->write(");\n") + ; + } else { + $compiler + ->outdent() + ->write("];\n") + ; + } + + $compiler + ->subcompile($this->getNode('constructor_end')) + ->outdent() + ->write("}\n\n") + ; + } + + protected function compileDisplay(Compiler $compiler) + { + $compiler + ->write("protected function doDisplay(array \$context, array \$blocks = [])\n", "{\n") + ->indent() + ->write("\$macros = \$this->macros;\n") + ->subcompile($this->getNode('display_start')) + ->subcompile($this->getNode('body')) + ; + + if ($this->hasNode('parent')) { + $parent = $this->getNode('parent'); + + $compiler->addDebugInfo($parent); + if ($parent instanceof ConstantExpression) { + $compiler + ->write('$this->parent = $this->loadTemplate(') + ->subcompile($parent) + ->raw(', ') + ->repr($this->getSourceContext()->getName()) + ->raw(', ') + ->repr($parent->getTemplateLine()) + ->raw(");\n") + ; + $compiler->write('$this->parent'); + } else { + $compiler->write('$this->getParent($context)'); + } + $compiler->raw("->display(\$context, array_merge(\$this->blocks, \$blocks));\n"); + } + + $compiler + ->subcompile($this->getNode('display_end')) + ->outdent() + ->write("}\n\n") + ; + } + + protected function compileClassFooter(Compiler $compiler) + { + $compiler + ->subcompile($this->getNode('class_end')) + ->outdent() + ->write("}\n") + ; + } + + protected function compileMacros(Compiler $compiler) + { + $compiler->subcompile($this->getNode('macros')); + } + + protected function compileGetTemplateName(Compiler $compiler) + { + $compiler + ->write("public function getTemplateName()\n", "{\n") + ->indent() + ->write('return ') + ->repr($this->getSourceContext()->getName()) + ->raw(";\n") + ->outdent() + ->write("}\n\n") + ; + } + + protected function compileIsTraitable(Compiler $compiler) + { + // A template can be used as a trait if: + // * it has no parent + // * it has no macros + // * it has no body + // + // Put another way, a template can be used as a trait if it + // only contains blocks and use statements. + $traitable = !$this->hasNode('parent') && 0 === \count($this->getNode('macros')); + if ($traitable) { + if ($this->getNode('body') instanceof BodyNode) { + $nodes = $this->getNode('body')->getNode(0); + } else { + $nodes = $this->getNode('body'); + } + + if (!\count($nodes)) { + $nodes = new Node([$nodes]); + } + + foreach ($nodes as $node) { + if (!\count($node)) { + continue; + } + + if ($node instanceof TextNode && ctype_space($node->getAttribute('data'))) { + continue; + } + + if ($node instanceof BlockReferenceNode) { + continue; + } + + $traitable = false; + break; + } + } + + if ($traitable) { + return; + } + + $compiler + ->write("public function isTraitable()\n", "{\n") + ->indent() + ->write(sprintf("return %s;\n", $traitable ? 'true' : 'false')) + ->outdent() + ->write("}\n\n") + ; + } + + protected function compileDebugInfo(Compiler $compiler) + { + $compiler + ->write("public function getDebugInfo()\n", "{\n") + ->indent() + ->write(sprintf("return %s;\n", str_replace("\n", '', var_export(array_reverse($compiler->getDebugInfo(), true), true)))) + ->outdent() + ->write("}\n\n") + ; + } + + protected function compileGetSourceContext(Compiler $compiler) + { + $compiler + ->write("public function getSourceContext()\n", "{\n") + ->indent() + ->write('return new Source(') + ->string($compiler->getEnvironment()->isDebug() ? $this->getSourceContext()->getCode() : '') + ->raw(', ') + ->string($this->getSourceContext()->getName()) + ->raw(', ') + ->string($this->getSourceContext()->getPath()) + ->raw(");\n") + ->outdent() + ->write("}\n") + ; + } + + protected function compileLoadTemplate(Compiler $compiler, $node, $var) + { + if ($node instanceof ConstantExpression) { + $compiler + ->write(sprintf('%s = $this->loadTemplate(', $var)) + ->subcompile($node) + ->raw(', ') + ->repr($node->getTemplateName()) + ->raw(', ') + ->repr($node->getTemplateLine()) + ->raw(");\n") + ; + } else { + throw new \LogicException('Trait templates can only be constant nodes.'); + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Node.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Node.php new file mode 100644 index 0000000..6895a21 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/Node.php @@ -0,0 +1,175 @@ + + */ +class Node implements \Countable, \IteratorAggregate +{ + protected $nodes; + protected $attributes; + protected $lineno; + protected $tag; + + private $name; + private $sourceContext; + + /** + * @param array $nodes An array of named nodes + * @param array $attributes An array of attributes (should not be nodes) + * @param int $lineno The line number + * @param string $tag The tag name associated with the Node + */ + public function __construct(array $nodes = [], array $attributes = [], int $lineno = 0, string $tag = null) + { + foreach ($nodes as $name => $node) { + if (!$node instanceof self) { + throw new \InvalidArgumentException(sprintf('Using "%s" for the value of node "%s" of "%s" is not supported. You must pass a \Twig\Node\Node instance.', \is_object($node) ? \get_class($node) : (null === $node ? 'null' : \gettype($node)), $name, \get_class($this))); + } + } + $this->nodes = $nodes; + $this->attributes = $attributes; + $this->lineno = $lineno; + $this->tag = $tag; + } + + public function __toString() + { + $attributes = []; + foreach ($this->attributes as $name => $value) { + $attributes[] = sprintf('%s: %s', $name, str_replace("\n", '', var_export($value, true))); + } + + $repr = [\get_class($this).'('.implode(', ', $attributes)]; + + if (\count($this->nodes)) { + foreach ($this->nodes as $name => $node) { + $len = \strlen($name) + 4; + $noderepr = []; + foreach (explode("\n", (string) $node) as $line) { + $noderepr[] = str_repeat(' ', $len).$line; + } + + $repr[] = sprintf(' %s: %s', $name, ltrim(implode("\n", $noderepr))); + } + + $repr[] = ')'; + } else { + $repr[0] .= ')'; + } + + return implode("\n", $repr); + } + + /** + * @return void + */ + public function compile(Compiler $compiler) + { + foreach ($this->nodes as $node) { + $node->compile($compiler); + } + } + + public function getTemplateLine(): int + { + return $this->lineno; + } + + public function getNodeTag(): ?string + { + return $this->tag; + } + + public function hasAttribute(string $name): bool + { + return \array_key_exists($name, $this->attributes); + } + + public function getAttribute(string $name) + { + if (!\array_key_exists($name, $this->attributes)) { + throw new \LogicException(sprintf('Attribute "%s" does not exist for Node "%s".', $name, \get_class($this))); + } + + return $this->attributes[$name]; + } + + public function setAttribute(string $name, $value): void + { + $this->attributes[$name] = $value; + } + + public function removeAttribute(string $name): void + { + unset($this->attributes[$name]); + } + + public function hasNode(string $name): bool + { + return isset($this->nodes[$name]); + } + + public function getNode(string $name): self + { + if (!isset($this->nodes[$name])) { + throw new \LogicException(sprintf('Node "%s" does not exist for Node "%s".', $name, \get_class($this))); + } + + return $this->nodes[$name]; + } + + public function setNode(string $name, self $node): void + { + $this->nodes[$name] = $node; + } + + public function removeNode(string $name): void + { + unset($this->nodes[$name]); + } + + public function count() + { + return \count($this->nodes); + } + + public function getIterator(): \Traversable + { + return new \ArrayIterator($this->nodes); + } + + public function getTemplateName(): ?string + { + return $this->sourceContext ? $this->sourceContext->getName() : null; + } + + public function setSourceContext(Source $source): void + { + $this->sourceContext = $source; + foreach ($this->nodes as $node) { + $node->setSourceContext($source); + } + } + + public function getSourceContext(): ?Source + { + return $this->sourceContext; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/NodeCaptureInterface.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/NodeCaptureInterface.php new file mode 100644 index 0000000..9fb6a0c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/NodeCaptureInterface.php @@ -0,0 +1,21 @@ + + */ +interface NodeCaptureInterface +{ +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/NodeOutputInterface.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/NodeOutputInterface.php new file mode 100644 index 0000000..5e35b40 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/NodeOutputInterface.php @@ -0,0 +1,21 @@ + + */ +interface NodeOutputInterface +{ +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/PrintNode.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/PrintNode.php new file mode 100644 index 0000000..60386d2 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/PrintNode.php @@ -0,0 +1,39 @@ + + */ +class PrintNode extends Node implements NodeOutputInterface +{ + public function __construct(AbstractExpression $expr, int $lineno, string $tag = null) + { + parent::__construct(['expr' => $expr], [], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->addDebugInfo($this) + ->write('echo ') + ->subcompile($this->getNode('expr')) + ->raw(";\n") + ; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/SandboxNode.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/SandboxNode.php new file mode 100644 index 0000000..3dd1b4b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/SandboxNode.php @@ -0,0 +1,45 @@ + + */ +class SandboxNode extends Node +{ + public function __construct(Node $body, int $lineno, string $tag = null) + { + parent::__construct(['body' => $body], [], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->addDebugInfo($this) + ->write("if (!\$alreadySandboxed = \$this->sandbox->isSandboxed()) {\n") + ->indent() + ->write("\$this->sandbox->enableSandbox();\n") + ->outdent() + ->write("}\n") + ->subcompile($this->getNode('body')) + ->write("if (!\$alreadySandboxed) {\n") + ->indent() + ->write("\$this->sandbox->disableSandbox();\n") + ->outdent() + ->write("}\n") + ; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/SetNode.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/SetNode.php new file mode 100644 index 0000000..96b6bd8 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/SetNode.php @@ -0,0 +1,105 @@ + + */ +class SetNode extends Node implements NodeCaptureInterface +{ + public function __construct(bool $capture, Node $names, Node $values, int $lineno, string $tag = null) + { + parent::__construct(['names' => $names, 'values' => $values], ['capture' => $capture, 'safe' => false], $lineno, $tag); + + /* + * Optimizes the node when capture is used for a large block of text. + * + * {% set foo %}foo{% endset %} is compiled to $context['foo'] = new Twig\Markup("foo"); + */ + if ($this->getAttribute('capture')) { + $this->setAttribute('safe', true); + + $values = $this->getNode('values'); + if ($values instanceof TextNode) { + $this->setNode('values', new ConstantExpression($values->getAttribute('data'), $values->getTemplateLine())); + $this->setAttribute('capture', false); + } + } + } + + public function compile(Compiler $compiler): void + { + $compiler->addDebugInfo($this); + + if (\count($this->getNode('names')) > 1) { + $compiler->write('list('); + foreach ($this->getNode('names') as $idx => $node) { + if ($idx) { + $compiler->raw(', '); + } + + $compiler->subcompile($node); + } + $compiler->raw(')'); + } else { + if ($this->getAttribute('capture')) { + if ($compiler->getEnvironment()->isDebug()) { + $compiler->write("ob_start();\n"); + } else { + $compiler->write("ob_start(function () { return ''; });\n"); + } + $compiler + ->subcompile($this->getNode('values')) + ; + } + + $compiler->subcompile($this->getNode('names'), false); + + if ($this->getAttribute('capture')) { + $compiler->raw(" = ('' === \$tmp = ob_get_clean()) ? '' : new Markup(\$tmp, \$this->env->getCharset())"); + } + } + + if (!$this->getAttribute('capture')) { + $compiler->raw(' = '); + + if (\count($this->getNode('names')) > 1) { + $compiler->write('['); + foreach ($this->getNode('values') as $idx => $value) { + if ($idx) { + $compiler->raw(', '); + } + + $compiler->subcompile($value); + } + $compiler->raw(']'); + } else { + if ($this->getAttribute('safe')) { + $compiler + ->raw("('' === \$tmp = ") + ->subcompile($this->getNode('values')) + ->raw(") ? '' : new Markup(\$tmp, \$this->env->getCharset())") + ; + } else { + $compiler->subcompile($this->getNode('values')); + } + } + } + + $compiler->raw(";\n"); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/TextNode.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/TextNode.php new file mode 100644 index 0000000..d74ebe6 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/TextNode.php @@ -0,0 +1,38 @@ + + */ +class TextNode extends Node implements NodeOutputInterface +{ + public function __construct(string $data, int $lineno) + { + parent::__construct([], ['data' => $data], $lineno); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->addDebugInfo($this) + ->write('echo ') + ->string($this->getAttribute('data')) + ->raw(";\n") + ; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/WithNode.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/WithNode.php new file mode 100644 index 0000000..ec3f069 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Node/WithNode.php @@ -0,0 +1,70 @@ + + */ +class WithNode extends Node +{ + public function __construct(Node $body, Node $variables = null, bool $only = false, int $lineno, string $tag = null) + { + $nodes = ['body' => $body]; + if (null !== $variables) { + $nodes['variables'] = $variables; + } + + parent::__construct($nodes, ['only' => $only], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler->addDebugInfo($this); + + $parentContextName = $compiler->getVarName(); + + $compiler->write(sprintf("\$%s = \$context;\n", $parentContextName)); + + if ($this->hasNode('variables')) { + $node = $this->getNode('variables'); + $varsName = $compiler->getVarName(); + $compiler + ->write(sprintf('$%s = ', $varsName)) + ->subcompile($node) + ->raw(";\n") + ->write(sprintf("if (!twig_test_iterable(\$%s)) {\n", $varsName)) + ->indent() + ->write("throw new RuntimeError('Variables passed to the \"with\" tag must be a hash.', ") + ->repr($node->getTemplateLine()) + ->raw(", \$this->getSourceContext());\n") + ->outdent() + ->write("}\n") + ->write(sprintf("\$%s = twig_to_array(\$%s);\n", $varsName, $varsName)) + ; + + if ($this->getAttribute('only')) { + $compiler->write("\$context = [];\n"); + } + + $compiler->write(sprintf("\$context = \$this->env->mergeGlobals(array_merge(\$context, \$%s));\n", $varsName)); + } + + $compiler + ->subcompile($this->getNode('body')) + ->write(sprintf("\$context = \$%s;\n", $parentContextName)) + ; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/NodeTraverser.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/NodeTraverser.php new file mode 100644 index 0000000..47a2d5c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/NodeTraverser.php @@ -0,0 +1,76 @@ + + */ +final class NodeTraverser +{ + private $env; + private $visitors = []; + + /** + * @param NodeVisitorInterface[] $visitors + */ + public function __construct(Environment $env, array $visitors = []) + { + $this->env = $env; + foreach ($visitors as $visitor) { + $this->addVisitor($visitor); + } + } + + public function addVisitor(NodeVisitorInterface $visitor): void + { + $this->visitors[$visitor->getPriority()][] = $visitor; + } + + /** + * Traverses a node and calls the registered visitors. + */ + public function traverse(Node $node): Node + { + ksort($this->visitors); + foreach ($this->visitors as $visitors) { + foreach ($visitors as $visitor) { + $node = $this->traverseForVisitor($visitor, $node); + } + } + + return $node; + } + + private function traverseForVisitor(NodeVisitorInterface $visitor, Node $node): ?Node + { + $node = $visitor->enterNode($node, $this->env); + + foreach ($node as $k => $n) { + if (null !== $m = $this->traverseForVisitor($visitor, $n)) { + if ($m !== $n) { + $node->setNode($k, $m); + } + } else { + $node->removeNode($k); + } + } + + return $visitor->leaveNode($node, $this->env); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/NodeVisitor/AbstractNodeVisitor.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/NodeVisitor/AbstractNodeVisitor.php new file mode 100644 index 0000000..d7036ae --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/NodeVisitor/AbstractNodeVisitor.php @@ -0,0 +1,49 @@ + + */ +abstract class AbstractNodeVisitor implements NodeVisitorInterface +{ + final public function enterNode(Node $node, Environment $env): Node + { + return $this->doEnterNode($node, $env); + } + + final public function leaveNode(Node $node, Environment $env): ?Node + { + return $this->doLeaveNode($node, $env); + } + + /** + * Called before child nodes are visited. + * + * @return Node The modified node + */ + abstract protected function doEnterNode(Node $node, Environment $env); + + /** + * Called after child nodes are visited. + * + * @return Node|null The modified node or null if the node must be removed + */ + abstract protected function doLeaveNode(Node $node, Environment $env); +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/NodeVisitor/EscaperNodeVisitor.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/NodeVisitor/EscaperNodeVisitor.php new file mode 100644 index 0000000..aa8df91 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/NodeVisitor/EscaperNodeVisitor.php @@ -0,0 +1,206 @@ + + */ +final class EscaperNodeVisitor implements NodeVisitorInterface +{ + private $statusStack = []; + private $blocks = []; + private $safeAnalysis; + private $traverser; + private $defaultStrategy = false; + private $safeVars = []; + + public function __construct() + { + $this->safeAnalysis = new SafeAnalysisNodeVisitor(); + } + + public function enterNode(Node $node, Environment $env): Node + { + if ($node instanceof ModuleNode) { + if ($env->hasExtension(EscaperExtension::class) && $defaultStrategy = $env->getExtension(EscaperExtension::class)->getDefaultStrategy($node->getTemplateName())) { + $this->defaultStrategy = $defaultStrategy; + } + $this->safeVars = []; + $this->blocks = []; + } elseif ($node instanceof AutoEscapeNode) { + $this->statusStack[] = $node->getAttribute('value'); + } elseif ($node instanceof BlockNode) { + $this->statusStack[] = isset($this->blocks[$node->getAttribute('name')]) ? $this->blocks[$node->getAttribute('name')] : $this->needEscaping($env); + } elseif ($node instanceof ImportNode) { + $this->safeVars[] = $node->getNode('var')->getAttribute('name'); + } + + return $node; + } + + public function leaveNode(Node $node, Environment $env): ?Node + { + if ($node instanceof ModuleNode) { + $this->defaultStrategy = false; + $this->safeVars = []; + $this->blocks = []; + } elseif ($node instanceof FilterExpression) { + return $this->preEscapeFilterNode($node, $env); + } elseif ($node instanceof PrintNode && false !== $type = $this->needEscaping($env)) { + $expression = $node->getNode('expr'); + if ($expression instanceof ConditionalExpression && $this->shouldUnwrapConditional($expression, $env, $type)) { + return new DoNode($this->unwrapConditional($expression, $env, $type), $expression->getTemplateLine()); + } + + return $this->escapePrintNode($node, $env, $type); + } + + if ($node instanceof AutoEscapeNode || $node instanceof BlockNode) { + array_pop($this->statusStack); + } elseif ($node instanceof BlockReferenceNode) { + $this->blocks[$node->getAttribute('name')] = $this->needEscaping($env); + } + + return $node; + } + + private function shouldUnwrapConditional(ConditionalExpression $expression, Environment $env, string $type): bool + { + $expr2Safe = $this->isSafeFor($type, $expression->getNode('expr2'), $env); + $expr3Safe = $this->isSafeFor($type, $expression->getNode('expr3'), $env); + + return $expr2Safe !== $expr3Safe; + } + + private function unwrapConditional(ConditionalExpression $expression, Environment $env, string $type): ConditionalExpression + { + // convert "echo a ? b : c" to "a ? echo b : echo c" recursively + $expr2 = $expression->getNode('expr2'); + if ($expr2 instanceof ConditionalExpression && $this->shouldUnwrapConditional($expr2, $env, $type)) { + $expr2 = $this->unwrapConditional($expr2, $env, $type); + } else { + $expr2 = $this->escapeInlinePrintNode(new InlinePrint($expr2, $expr2->getTemplateLine()), $env, $type); + } + $expr3 = $expression->getNode('expr3'); + if ($expr3 instanceof ConditionalExpression && $this->shouldUnwrapConditional($expr3, $env, $type)) { + $expr3 = $this->unwrapConditional($expr3, $env, $type); + } else { + $expr3 = $this->escapeInlinePrintNode(new InlinePrint($expr3, $expr3->getTemplateLine()), $env, $type); + } + + return new ConditionalExpression($expression->getNode('expr1'), $expr2, $expr3, $expression->getTemplateLine()); + } + + private function escapeInlinePrintNode(InlinePrint $node, Environment $env, string $type): Node + { + $expression = $node->getNode('node'); + + if ($this->isSafeFor($type, $expression, $env)) { + return $node; + } + + return new InlinePrint($this->getEscaperFilter($type, $expression), $node->getTemplateLine()); + } + + private function escapePrintNode(PrintNode $node, Environment $env, string $type): Node + { + if (false === $type) { + return $node; + } + + $expression = $node->getNode('expr'); + + if ($this->isSafeFor($type, $expression, $env)) { + return $node; + } + + $class = \get_class($node); + + return new $class($this->getEscaperFilter($type, $expression), $node->getTemplateLine()); + } + + private function preEscapeFilterNode(FilterExpression $filter, Environment $env): FilterExpression + { + $name = $filter->getNode('filter')->getAttribute('value'); + + $type = $env->getFilter($name)->getPreEscape(); + if (null === $type) { + return $filter; + } + + $node = $filter->getNode('node'); + if ($this->isSafeFor($type, $node, $env)) { + return $filter; + } + + $filter->setNode('node', $this->getEscaperFilter($type, $node)); + + return $filter; + } + + private function isSafeFor(string $type, Node $expression, Environment $env): bool + { + $safe = $this->safeAnalysis->getSafe($expression); + + if (null === $safe) { + if (null === $this->traverser) { + $this->traverser = new NodeTraverser($env, [$this->safeAnalysis]); + } + + $this->safeAnalysis->setSafeVars($this->safeVars); + + $this->traverser->traverse($expression); + $safe = $this->safeAnalysis->getSafe($expression); + } + + return \in_array($type, $safe) || \in_array('all', $safe); + } + + private function needEscaping(Environment $env) + { + if (\count($this->statusStack)) { + return $this->statusStack[\count($this->statusStack) - 1]; + } + + return $this->defaultStrategy ? $this->defaultStrategy : false; + } + + private function getEscaperFilter(string $type, Node $node): FilterExpression + { + $line = $node->getTemplateLine(); + $name = new ConstantExpression('escape', $line); + $args = new Node([new ConstantExpression((string) $type, $line), new ConstantExpression(null, $line), new ConstantExpression(true, $line)]); + + return new FilterExpression($node, $name, $args, $line); + } + + public function getPriority(): int + { + return 0; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/NodeVisitor/MacroAutoImportNodeVisitor.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/NodeVisitor/MacroAutoImportNodeVisitor.php new file mode 100644 index 0000000..4c717fa --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/NodeVisitor/MacroAutoImportNodeVisitor.php @@ -0,0 +1,72 @@ + + */ +final class MacroAutoImportNodeVisitor implements NodeVisitorInterface +{ + private $inAModule = false; + private $hasMacroCalls = false; + + public function enterNode(Node $node, Environment $env): Node + { + if ($node instanceof ModuleNode) { + $this->inAModule = true; + $this->hasMacroCalls = false; + } + + return $node; + } + + public function leaveNode(Node $node, Environment $env): Node + { + if ($node instanceof ModuleNode) { + $this->inAModule = false; + if ($this->hasMacroCalls) { + $node->getNode('constructor_end')->setNode('_auto_macro_import', new ImportNode(new NameExpression('_self', 0), new AssignNameExpression('_self', 0), 0, 'import', true)); + } + } elseif ($this->inAModule) { + if ( + $node instanceof GetAttrExpression && + $node->getNode('node') instanceof NameExpression && + '_self' === $node->getNode('node')->getAttribute('name') && + $node->getNode('attribute') instanceof ConstantExpression + ) { + $this->hasMacroCalls = true; + + $name = $node->getNode('attribute')->getAttribute('value'); + $node = new MethodCallExpression($node->getNode('node'), 'macro_'.$name, $node->getNode('arguments'), $node->getTemplateLine()); + $node->setAttribute('safe', true); + } + } + + return $node; + } + + public function getPriority(): int + { + // we must be ran before auto-escaping + return -10; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/NodeVisitor/NodeVisitorInterface.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/NodeVisitor/NodeVisitorInterface.php new file mode 100644 index 0000000..59e836d --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/NodeVisitor/NodeVisitorInterface.php @@ -0,0 +1,46 @@ + + */ +interface NodeVisitorInterface +{ + /** + * Called before child nodes are visited. + * + * @return Node The modified node + */ + public function enterNode(Node $node, Environment $env): Node; + + /** + * Called after child nodes are visited. + * + * @return Node|null The modified node or null if the node must be removed + */ + public function leaveNode(Node $node, Environment $env): ?Node; + + /** + * Returns the priority for this visitor. + * + * Priority should be between -10 and 10 (0 is the default). + * + * @return int The priority level + */ + public function getPriority(); +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/NodeVisitor/OptimizerNodeVisitor.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/NodeVisitor/OptimizerNodeVisitor.php new file mode 100644 index 0000000..a847841 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/NodeVisitor/OptimizerNodeVisitor.php @@ -0,0 +1,215 @@ + + */ +final class OptimizerNodeVisitor implements NodeVisitorInterface +{ + const OPTIMIZE_ALL = -1; + const OPTIMIZE_NONE = 0; + const OPTIMIZE_FOR = 2; + const OPTIMIZE_RAW_FILTER = 4; + + private $loops = []; + private $loopsTargets = []; + private $optimizers; + + /** + * @param int $optimizers The optimizer mode + */ + public function __construct(int $optimizers = -1) + { + if (!\is_int($optimizers) || $optimizers > (self::OPTIMIZE_FOR | self::OPTIMIZE_RAW_FILTER)) { + throw new \InvalidArgumentException(sprintf('Optimizer mode "%s" is not valid.', $optimizers)); + } + + $this->optimizers = $optimizers; + } + + public function enterNode(Node $node, Environment $env): Node + { + if (self::OPTIMIZE_FOR === (self::OPTIMIZE_FOR & $this->optimizers)) { + $this->enterOptimizeFor($node, $env); + } + + return $node; + } + + public function leaveNode(Node $node, Environment $env): ?Node + { + if (self::OPTIMIZE_FOR === (self::OPTIMIZE_FOR & $this->optimizers)) { + $this->leaveOptimizeFor($node, $env); + } + + if (self::OPTIMIZE_RAW_FILTER === (self::OPTIMIZE_RAW_FILTER & $this->optimizers)) { + $node = $this->optimizeRawFilter($node, $env); + } + + $node = $this->optimizePrintNode($node, $env); + + return $node; + } + + /** + * Optimizes print nodes. + * + * It replaces: + * + * * "echo $this->render(Parent)Block()" with "$this->display(Parent)Block()" + */ + private function optimizePrintNode(Node $node, Environment $env): Node + { + if (!$node instanceof PrintNode) { + return $node; + } + + $exprNode = $node->getNode('expr'); + if ( + $exprNode instanceof BlockReferenceExpression || + $exprNode instanceof ParentExpression + ) { + $exprNode->setAttribute('output', true); + + return $exprNode; + } + + return $node; + } + + /** + * Removes "raw" filters. + */ + private function optimizeRawFilter(Node $node, Environment $env): Node + { + if ($node instanceof FilterExpression && 'raw' == $node->getNode('filter')->getAttribute('value')) { + return $node->getNode('node'); + } + + return $node; + } + + /** + * Optimizes "for" tag by removing the "loop" variable creation whenever possible. + */ + private function enterOptimizeFor(Node $node, Environment $env): void + { + if ($node instanceof ForNode) { + // disable the loop variable by default + $node->setAttribute('with_loop', false); + array_unshift($this->loops, $node); + array_unshift($this->loopsTargets, $node->getNode('value_target')->getAttribute('name')); + array_unshift($this->loopsTargets, $node->getNode('key_target')->getAttribute('name')); + } elseif (!$this->loops) { + // we are outside a loop + return; + } + + // when do we need to add the loop variable back? + + // the loop variable is referenced for the current loop + elseif ($node instanceof NameExpression && 'loop' === $node->getAttribute('name')) { + $node->setAttribute('always_defined', true); + $this->addLoopToCurrent(); + } + + // optimize access to loop targets + elseif ($node instanceof NameExpression && \in_array($node->getAttribute('name'), $this->loopsTargets)) { + $node->setAttribute('always_defined', true); + } + + // block reference + elseif ($node instanceof BlockReferenceNode || $node instanceof BlockReferenceExpression) { + $this->addLoopToCurrent(); + } + + // include without the only attribute + elseif ($node instanceof IncludeNode && !$node->getAttribute('only')) { + $this->addLoopToAll(); + } + + // include function without the with_context=false parameter + elseif ($node instanceof FunctionExpression + && 'include' === $node->getAttribute('name') + && (!$node->getNode('arguments')->hasNode('with_context') + || false !== $node->getNode('arguments')->getNode('with_context')->getAttribute('value') + ) + ) { + $this->addLoopToAll(); + } + + // the loop variable is referenced via an attribute + elseif ($node instanceof GetAttrExpression + && (!$node->getNode('attribute') instanceof ConstantExpression + || 'parent' === $node->getNode('attribute')->getAttribute('value') + ) + && (true === $this->loops[0]->getAttribute('with_loop') + || ($node->getNode('node') instanceof NameExpression + && 'loop' === $node->getNode('node')->getAttribute('name') + ) + ) + ) { + $this->addLoopToAll(); + } + } + + /** + * Optimizes "for" tag by removing the "loop" variable creation whenever possible. + */ + private function leaveOptimizeFor(Node $node, Environment $env): void + { + if ($node instanceof ForNode) { + array_shift($this->loops); + array_shift($this->loopsTargets); + array_shift($this->loopsTargets); + } + } + + private function addLoopToCurrent(): void + { + $this->loops[0]->setAttribute('with_loop', true); + } + + private function addLoopToAll(): void + { + foreach ($this->loops as $loop) { + $loop->setAttribute('with_loop', true); + } + } + + public function getPriority(): int + { + return 255; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/NodeVisitor/SafeAnalysisNodeVisitor.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/NodeVisitor/SafeAnalysisNodeVisitor.php new file mode 100644 index 0000000..95fc652 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/NodeVisitor/SafeAnalysisNodeVisitor.php @@ -0,0 +1,157 @@ +safeVars = $safeVars; + } + + public function getSafe(Node $node) + { + $hash = spl_object_hash($node); + if (!isset($this->data[$hash])) { + return; + } + + foreach ($this->data[$hash] as $bucket) { + if ($bucket['key'] !== $node) { + continue; + } + + if (\in_array('html_attr', $bucket['value'])) { + $bucket['value'][] = 'html'; + } + + return $bucket['value']; + } + } + + private function setSafe(Node $node, array $safe): void + { + $hash = spl_object_hash($node); + if (isset($this->data[$hash])) { + foreach ($this->data[$hash] as &$bucket) { + if ($bucket['key'] === $node) { + $bucket['value'] = $safe; + + return; + } + } + } + $this->data[$hash][] = [ + 'key' => $node, + 'value' => $safe, + ]; + } + + public function enterNode(Node $node, Environment $env): Node + { + return $node; + } + + public function leaveNode(Node $node, Environment $env): ?Node + { + if ($node instanceof ConstantExpression) { + // constants are marked safe for all + $this->setSafe($node, ['all']); + } elseif ($node instanceof BlockReferenceExpression) { + // blocks are safe by definition + $this->setSafe($node, ['all']); + } elseif ($node instanceof ParentExpression) { + // parent block is safe by definition + $this->setSafe($node, ['all']); + } elseif ($node instanceof ConditionalExpression) { + // intersect safeness of both operands + $safe = $this->intersectSafe($this->getSafe($node->getNode('expr2')), $this->getSafe($node->getNode('expr3'))); + $this->setSafe($node, $safe); + } elseif ($node instanceof FilterExpression) { + // filter expression is safe when the filter is safe + $name = $node->getNode('filter')->getAttribute('value'); + $args = $node->getNode('arguments'); + if ($filter = $env->getFilter($name)) { + $safe = $filter->getSafe($args); + if (null === $safe) { + $safe = $this->intersectSafe($this->getSafe($node->getNode('node')), $filter->getPreservesSafety()); + } + $this->setSafe($node, $safe); + } else { + $this->setSafe($node, []); + } + } elseif ($node instanceof FunctionExpression) { + // function expression is safe when the function is safe + $name = $node->getAttribute('name'); + $args = $node->getNode('arguments'); + if ($function = $env->getFunction($name)) { + $this->setSafe($node, $function->getSafe($args)); + } else { + $this->setSafe($node, []); + } + } elseif ($node instanceof MethodCallExpression) { + if ($node->getAttribute('safe')) { + $this->setSafe($node, ['all']); + } else { + $this->setSafe($node, []); + } + } elseif ($node instanceof GetAttrExpression && $node->getNode('node') instanceof NameExpression) { + $name = $node->getNode('node')->getAttribute('name'); + if (\in_array($name, $this->safeVars)) { + $this->setSafe($node, ['all']); + } else { + $this->setSafe($node, []); + } + } else { + $this->setSafe($node, []); + } + + return $node; + } + + private function intersectSafe(array $a = null, array $b = null): array + { + if (null === $a || null === $b) { + return []; + } + + if (\in_array('all', $a)) { + return $b; + } + + if (\in_array('all', $b)) { + return $a; + } + + return array_intersect($a, $b); + } + + public function getPriority(): int + { + return 0; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/NodeVisitor/SandboxNodeVisitor.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/NodeVisitor/SandboxNodeVisitor.php new file mode 100644 index 0000000..5aac52c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/NodeVisitor/SandboxNodeVisitor.php @@ -0,0 +1,132 @@ + + */ +final class SandboxNodeVisitor implements NodeVisitorInterface +{ + private $inAModule = false; + private $tags; + private $filters; + private $functions; + private $needsToStringWrap = false; + + public function enterNode(Node $node, Environment $env): Node + { + if ($node instanceof ModuleNode) { + $this->inAModule = true; + $this->tags = []; + $this->filters = []; + $this->functions = []; + + return $node; + } elseif ($this->inAModule) { + // look for tags + if ($node->getNodeTag() && !isset($this->tags[$node->getNodeTag()])) { + $this->tags[$node->getNodeTag()] = $node; + } + + // look for filters + if ($node instanceof FilterExpression && !isset($this->filters[$node->getNode('filter')->getAttribute('value')])) { + $this->filters[$node->getNode('filter')->getAttribute('value')] = $node; + } + + // look for functions + if ($node instanceof FunctionExpression && !isset($this->functions[$node->getAttribute('name')])) { + $this->functions[$node->getAttribute('name')] = $node; + } + + // the .. operator is equivalent to the range() function + if ($node instanceof RangeBinary && !isset($this->functions['range'])) { + $this->functions['range'] = $node; + } + + if ($node instanceof PrintNode) { + $this->needsToStringWrap = true; + $this->wrapNode($node, 'expr'); + } + + if ($node instanceof SetNode && !$node->getAttribute('capture')) { + $this->needsToStringWrap = true; + } + + // wrap outer nodes that can implicitly call __toString() + if ($this->needsToStringWrap) { + if ($node instanceof ConcatBinary) { + $this->wrapNode($node, 'left'); + $this->wrapNode($node, 'right'); + } + if ($node instanceof FilterExpression) { + $this->wrapNode($node, 'node'); + $this->wrapArrayNode($node, 'arguments'); + } + if ($node instanceof FunctionExpression) { + $this->wrapArrayNode($node, 'arguments'); + } + } + } + + return $node; + } + + public function leaveNode(Node $node, Environment $env): ?Node + { + if ($node instanceof ModuleNode) { + $this->inAModule = false; + + $node->getNode('constructor_end')->setNode('_security_check', new Node([new CheckSecurityNode($this->filters, $this->tags, $this->functions), $node->getNode('display_start')])); + } elseif ($this->inAModule) { + if ($node instanceof PrintNode || $node instanceof SetNode) { + $this->needsToStringWrap = false; + } + } + + return $node; + } + + private function wrapNode(Node $node, string $name): void + { + $expr = $node->getNode($name); + if ($expr instanceof NameExpression || $expr instanceof GetAttrExpression) { + $node->setNode($name, new CheckToStringNode($expr)); + } + } + + private function wrapArrayNode(Node $node, string $name): void + { + $args = $node->getNode($name); + foreach ($args as $name => $_) { + $this->wrapNode($args, $name); + } + } + + public function getPriority(): int + { + return 0; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Parser.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Parser.php new file mode 100644 index 0000000..aaa6af6 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Parser.php @@ -0,0 +1,360 @@ + + */ +class Parser +{ + private $stack = []; + private $stream; + private $parent; + private $handlers; + private $visitors; + private $expressionParser; + private $blocks; + private $blockStack; + private $macros; + private $env; + private $importedSymbols; + private $traits; + private $embeddedTemplates = []; + private $varNameSalt = 0; + + public function __construct(Environment $env) + { + $this->env = $env; + } + + public function getVarName(): string + { + return sprintf('__internal_%s', hash('sha256', __METHOD__.$this->stream->getSourceContext()->getCode().$this->varNameSalt++)); + } + + public function parse(TokenStream $stream, $test = null, bool $dropNeedle = false): ModuleNode + { + $vars = get_object_vars($this); + unset($vars['stack'], $vars['env'], $vars['handlers'], $vars['visitors'], $vars['expressionParser'], $vars['reservedMacroNames']); + $this->stack[] = $vars; + + // tag handlers + if (null === $this->handlers) { + $this->handlers = []; + foreach ($this->env->getTokenParsers() as $handler) { + $handler->setParser($this); + + $this->handlers[$handler->getTag()] = $handler; + } + } + + // node visitors + if (null === $this->visitors) { + $this->visitors = $this->env->getNodeVisitors(); + } + + if (null === $this->expressionParser) { + $this->expressionParser = new ExpressionParser($this, $this->env); + } + + $this->stream = $stream; + $this->parent = null; + $this->blocks = []; + $this->macros = []; + $this->traits = []; + $this->blockStack = []; + $this->importedSymbols = [[]]; + $this->embeddedTemplates = []; + $this->varNameSalt = 0; + + try { + $body = $this->subparse($test, $dropNeedle); + + if (null !== $this->parent && null === $body = $this->filterBodyNodes($body)) { + $body = new Node(); + } + } catch (SyntaxError $e) { + if (!$e->getSourceContext()) { + $e->setSourceContext($this->stream->getSourceContext()); + } + + if (!$e->getTemplateLine()) { + $e->setTemplateLine($this->stream->getCurrent()->getLine()); + } + + throw $e; + } + + $node = new ModuleNode(new BodyNode([$body]), $this->parent, new Node($this->blocks), new Node($this->macros), new Node($this->traits), $this->embeddedTemplates, $stream->getSourceContext()); + + $traverser = new NodeTraverser($this->env, $this->visitors); + + $node = $traverser->traverse($node); + + // restore previous stack so previous parse() call can resume working + foreach (array_pop($this->stack) as $key => $val) { + $this->$key = $val; + } + + return $node; + } + + public function subparse($test, bool $dropNeedle = false): Node + { + $lineno = $this->getCurrentToken()->getLine(); + $rv = []; + while (!$this->stream->isEOF()) { + switch ($this->getCurrentToken()->getType()) { + case /* Token::TEXT_TYPE */ 0: + $token = $this->stream->next(); + $rv[] = new TextNode($token->getValue(), $token->getLine()); + break; + + case /* Token::VAR_START_TYPE */ 2: + $token = $this->stream->next(); + $expr = $this->expressionParser->parseExpression(); + $this->stream->expect(/* Token::VAR_END_TYPE */ 4); + $rv[] = new PrintNode($expr, $token->getLine()); + break; + + case /* Token::BLOCK_START_TYPE */ 1: + $this->stream->next(); + $token = $this->getCurrentToken(); + + if (/* Token::NAME_TYPE */ 5 !== $token->getType()) { + throw new SyntaxError('A block must start with a tag name.', $token->getLine(), $this->stream->getSourceContext()); + } + + if (null !== $test && $test($token)) { + if ($dropNeedle) { + $this->stream->next(); + } + + if (1 === \count($rv)) { + return $rv[0]; + } + + return new Node($rv, [], $lineno); + } + + if (!isset($this->handlers[$token->getValue()])) { + if (null !== $test) { + $e = new SyntaxError(sprintf('Unexpected "%s" tag', $token->getValue()), $token->getLine(), $this->stream->getSourceContext()); + + if (\is_array($test) && isset($test[0]) && $test[0] instanceof TokenParserInterface) { + $e->appendMessage(sprintf(' (expecting closing tag for the "%s" tag defined near line %s).', $test[0]->getTag(), $lineno)); + } + } else { + $e = new SyntaxError(sprintf('Unknown "%s" tag.', $token->getValue()), $token->getLine(), $this->stream->getSourceContext()); + $e->addSuggestions($token->getValue(), array_keys($this->env->getTags())); + } + + throw $e; + } + + $this->stream->next(); + + $subparser = $this->handlers[$token->getValue()]; + $node = $subparser->parse($token); + if (null !== $node) { + $rv[] = $node; + } + break; + + default: + throw new SyntaxError('Lexer or parser ended up in unsupported state.', $this->getCurrentToken()->getLine(), $this->stream->getSourceContext()); + } + } + + if (1 === \count($rv)) { + return $rv[0]; + } + + return new Node($rv, [], $lineno); + } + + public function getBlockStack(): array + { + return $this->blockStack; + } + + public function peekBlockStack() + { + return isset($this->blockStack[\count($this->blockStack) - 1]) ? $this->blockStack[\count($this->blockStack) - 1] : null; + } + + public function popBlockStack(): void + { + array_pop($this->blockStack); + } + + public function pushBlockStack($name): void + { + $this->blockStack[] = $name; + } + + public function hasBlock(string $name): bool + { + return isset($this->blocks[$name]); + } + + public function getBlock(string $name): Node + { + return $this->blocks[$name]; + } + + public function setBlock(string $name, BlockNode $value): void + { + $this->blocks[$name] = new BodyNode([$value], [], $value->getTemplateLine()); + } + + public function hasMacro(string $name): bool + { + return isset($this->macros[$name]); + } + + public function setMacro(string $name, MacroNode $node): void + { + $this->macros[$name] = $node; + } + + public function addTrait($trait): void + { + $this->traits[] = $trait; + } + + public function hasTraits(): bool + { + return \count($this->traits) > 0; + } + + public function embedTemplate(ModuleNode $template) + { + $template->setIndex(mt_rand()); + + $this->embeddedTemplates[] = $template; + } + + public function addImportedSymbol(string $type, string $alias, string $name = null, AbstractExpression $node = null): void + { + $this->importedSymbols[0][$type][$alias] = ['name' => $name, 'node' => $node]; + } + + public function getImportedSymbol(string $type, string $alias) + { + // if the symbol does not exist in the current scope (0), try in the main/global scope (last index) + return $this->importedSymbols[0][$type][$alias] ?? ($this->importedSymbols[\count($this->importedSymbols) - 1][$type][$alias] ?? null); + } + + public function isMainScope(): bool + { + return 1 === \count($this->importedSymbols); + } + + public function pushLocalScope(): void + { + array_unshift($this->importedSymbols, []); + } + + public function popLocalScope(): void + { + array_shift($this->importedSymbols); + } + + public function getExpressionParser(): ExpressionParser + { + return $this->expressionParser; + } + + public function getParent(): ?Node + { + return $this->parent; + } + + public function setParent(?Node $parent): void + { + $this->parent = $parent; + } + + public function getStream(): TokenStream + { + return $this->stream; + } + + public function getCurrentToken(): Token + { + return $this->stream->getCurrent(); + } + + private function filterBodyNodes(Node $node, bool $nested = false): ?Node + { + // check that the body does not contain non-empty output nodes + if ( + ($node instanceof TextNode && !ctype_space($node->getAttribute('data'))) + || + (!$node instanceof TextNode && !$node instanceof BlockReferenceNode && $node instanceof NodeOutputInterface) + ) { + if (false !== strpos((string) $node, \chr(0xEF).\chr(0xBB).\chr(0xBF))) { + $t = substr($node->getAttribute('data'), 3); + if ('' === $t || ctype_space($t)) { + // bypass empty nodes starting with a BOM + return null; + } + } + + throw new SyntaxError('A template that extends another one cannot include content outside Twig blocks. Did you forget to put the content inside a {% block %} tag?', $node->getTemplateLine(), $this->stream->getSourceContext()); + } + + // bypass nodes that "capture" the output + if ($node instanceof NodeCaptureInterface) { + // a "block" tag in such a node will serve as a block definition AND be displayed in place as well + return $node; + } + + // "block" tags that are not captured (see above) are only used for defining + // the content of the block. In such a case, nesting it does not work as + // expected as the definition is not part of the default template code flow. + if ($nested && $node instanceof BlockReferenceNode) { + throw new SyntaxError('A block definition cannot be nested under non-capturing nodes.', $node->getTemplateLine(), $this->stream->getSourceContext()); + } + + if ($node instanceof NodeOutputInterface) { + return null; + } + + // here, $nested means "being at the root level of a child template" + // we need to discard the wrapping "Node" for the "body" node + $nested = $nested || Node::class !== \get_class($node); + foreach ($node as $k => $n) { + if (null !== $n && null === $this->filterBodyNodes($n, $nested)) { + $node->removeNode($k); + } + } + + return $node; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Profiler/Dumper/BaseDumper.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Profiler/Dumper/BaseDumper.php new file mode 100644 index 0000000..4da43e4 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Profiler/Dumper/BaseDumper.php @@ -0,0 +1,63 @@ + + */ +abstract class BaseDumper +{ + private $root; + + public function dump(Profile $profile): string + { + return $this->dumpProfile($profile); + } + + abstract protected function formatTemplate(Profile $profile, $prefix): string; + + abstract protected function formatNonTemplate(Profile $profile, $prefix): string; + + abstract protected function formatTime(Profile $profile, $percent): string; + + private function dumpProfile(Profile $profile, $prefix = '', $sibling = false): string + { + if ($profile->isRoot()) { + $this->root = $profile->getDuration(); + $start = $profile->getName(); + } else { + if ($profile->isTemplate()) { + $start = $this->formatTemplate($profile, $prefix); + } else { + $start = $this->formatNonTemplate($profile, $prefix); + } + $prefix .= $sibling ? '│ ' : ' '; + } + + $percent = $this->root ? $profile->getDuration() / $this->root * 100 : 0; + + if ($profile->getDuration() * 1000 < 1) { + $str = $start."\n"; + } else { + $str = sprintf("%s %s\n", $start, $this->formatTime($profile, $percent)); + } + + $nCount = \count($profile->getProfiles()); + foreach ($profile as $i => $p) { + $str .= $this->dumpProfile($p, $prefix, $i + 1 !== $nCount); + } + + return $str; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Profiler/Dumper/BlackfireDumper.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Profiler/Dumper/BlackfireDumper.php new file mode 100644 index 0000000..3fab5db --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Profiler/Dumper/BlackfireDumper.php @@ -0,0 +1,72 @@ + + */ +final class BlackfireDumper +{ + public function dump(Profile $profile): string + { + $data = []; + $this->dumpProfile('main()', $profile, $data); + $this->dumpChildren('main()', $profile, $data); + + $start = sprintf('%f', microtime(true)); + $str = << $values) { + $str .= "{$name}//{$values['ct']} {$values['wt']} {$values['mu']} {$values['pmu']}\n"; + } + + return $str; + } + + private function dumpChildren(string $parent, Profile $profile, &$data) + { + foreach ($profile as $p) { + if ($p->isTemplate()) { + $name = $p->getTemplate(); + } else { + $name = sprintf('%s::%s(%s)', $p->getTemplate(), $p->getType(), $p->getName()); + } + $this->dumpProfile(sprintf('%s==>%s', $parent, $name), $p, $data); + $this->dumpChildren($name, $p, $data); + } + } + + private function dumpProfile(string $edge, Profile $profile, &$data) + { + if (isset($data[$edge])) { + ++$data[$edge]['ct']; + $data[$edge]['wt'] += floor($profile->getDuration() * 1000000); + $data[$edge]['mu'] += $profile->getMemoryUsage(); + $data[$edge]['pmu'] += $profile->getPeakMemoryUsage(); + } else { + $data[$edge] = [ + 'ct' => 1, + 'wt' => floor($profile->getDuration() * 1000000), + 'mu' => $profile->getMemoryUsage(), + 'pmu' => $profile->getPeakMemoryUsage(), + ]; + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Profiler/Dumper/HtmlDumper.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Profiler/Dumper/HtmlDumper.php new file mode 100644 index 0000000..1f2433b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Profiler/Dumper/HtmlDumper.php @@ -0,0 +1,47 @@ + + */ +final class HtmlDumper extends BaseDumper +{ + private static $colors = [ + 'block' => '#dfd', + 'macro' => '#ddf', + 'template' => '#ffd', + 'big' => '#d44', + ]; + + public function dump(Profile $profile): string + { + return '
    '.parent::dump($profile).'
    '; + } + + protected function formatTemplate(Profile $profile, $prefix): string + { + return sprintf('%sâ”” %s', $prefix, self::$colors['template'], $profile->getTemplate()); + } + + protected function formatNonTemplate(Profile $profile, $prefix): string + { + return sprintf('%sâ”” %s::%s(%s)', $prefix, $profile->getTemplate(), $profile->getType(), isset(self::$colors[$profile->getType()]) ? self::$colors[$profile->getType()] : 'auto', $profile->getName()); + } + + protected function formatTime(Profile $profile, $percent): string + { + return sprintf('%.2fms/%.0f%%', $percent > 20 ? self::$colors['big'] : 'auto', $profile->getDuration() * 1000, $percent); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Profiler/Dumper/TextDumper.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Profiler/Dumper/TextDumper.php new file mode 100644 index 0000000..31561c4 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Profiler/Dumper/TextDumper.php @@ -0,0 +1,35 @@ + + */ +final class TextDumper extends BaseDumper +{ + protected function formatTemplate(Profile $profile, $prefix): string + { + return sprintf('%sâ”” %s', $prefix, $profile->getTemplate()); + } + + protected function formatNonTemplate(Profile $profile, $prefix): string + { + return sprintf('%sâ”” %s::%s(%s)', $prefix, $profile->getTemplate(), $profile->getType(), $profile->getName()); + } + + protected function formatTime(Profile $profile, $percent): string + { + return sprintf('%.2fms/%.0f%%', $profile->getDuration() * 1000, $percent); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Profiler/Node/EnterProfileNode.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Profiler/Node/EnterProfileNode.php new file mode 100644 index 0000000..1494baf --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Profiler/Node/EnterProfileNode.php @@ -0,0 +1,42 @@ + + */ +class EnterProfileNode extends Node +{ + public function __construct(string $extensionName, string $type, string $name, string $varName) + { + parent::__construct([], ['extension_name' => $extensionName, 'name' => $name, 'type' => $type, 'var_name' => $varName]); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->write(sprintf('$%s = $this->extensions[', $this->getAttribute('var_name'))) + ->repr($this->getAttribute('extension_name')) + ->raw("];\n") + ->write(sprintf('$%s->enter($%s = new \Twig\Profiler\Profile($this->getTemplateName(), ', $this->getAttribute('var_name'), $this->getAttribute('var_name').'_prof')) + ->repr($this->getAttribute('type')) + ->raw(', ') + ->repr($this->getAttribute('name')) + ->raw("));\n\n") + ; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Profiler/Node/LeaveProfileNode.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Profiler/Node/LeaveProfileNode.php new file mode 100644 index 0000000..94cebba --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Profiler/Node/LeaveProfileNode.php @@ -0,0 +1,36 @@ + + */ +class LeaveProfileNode extends Node +{ + public function __construct(string $varName) + { + parent::__construct([], ['var_name' => $varName]); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->write("\n") + ->write(sprintf("\$%s->leave(\$%s);\n\n", $this->getAttribute('var_name'), $this->getAttribute('var_name').'_prof')) + ; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Profiler/NodeVisitor/ProfilerNodeVisitor.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Profiler/NodeVisitor/ProfilerNodeVisitor.php new file mode 100644 index 0000000..bd23b20 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Profiler/NodeVisitor/ProfilerNodeVisitor.php @@ -0,0 +1,76 @@ + + */ +final class ProfilerNodeVisitor implements NodeVisitorInterface +{ + private $extensionName; + + public function __construct(string $extensionName) + { + $this->extensionName = $extensionName; + } + + public function enterNode(Node $node, Environment $env): Node + { + return $node; + } + + public function leaveNode(Node $node, Environment $env): ?Node + { + if ($node instanceof ModuleNode) { + $varName = $this->getVarName(); + $node->setNode('display_start', new Node([new EnterProfileNode($this->extensionName, Profile::TEMPLATE, $node->getTemplateName(), $varName), $node->getNode('display_start')])); + $node->setNode('display_end', new Node([new LeaveProfileNode($varName), $node->getNode('display_end')])); + } elseif ($node instanceof BlockNode) { + $varName = $this->getVarName(); + $node->setNode('body', new BodyNode([ + new EnterProfileNode($this->extensionName, Profile::BLOCK, $node->getAttribute('name'), $varName), + $node->getNode('body'), + new LeaveProfileNode($varName), + ])); + } elseif ($node instanceof MacroNode) { + $varName = $this->getVarName(); + $node->setNode('body', new BodyNode([ + new EnterProfileNode($this->extensionName, Profile::MACRO, $node->getAttribute('name'), $varName), + $node->getNode('body'), + new LeaveProfileNode($varName), + ])); + } + + return $node; + } + + private function getVarName(): string + { + return sprintf('__internal_%s', hash('sha256', $this->extensionName)); + } + + public function getPriority(): int + { + return 0; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Profiler/Profile.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Profiler/Profile.php new file mode 100644 index 0000000..36b39e1 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Profiler/Profile.php @@ -0,0 +1,181 @@ + + */ +final class Profile implements \IteratorAggregate, \Serializable +{ + const ROOT = 'ROOT'; + const BLOCK = 'block'; + const TEMPLATE = 'template'; + const MACRO = 'macro'; + + private $template; + private $name; + private $type; + private $starts = []; + private $ends = []; + private $profiles = []; + + public function __construct(string $template = 'main', string $type = self::ROOT, string $name = 'main') + { + $this->template = $template; + $this->type = $type; + $this->name = 0 === strpos($name, '__internal_') ? 'INTERNAL' : $name; + $this->enter(); + } + + public function getTemplate(): string + { + return $this->template; + } + + public function getType(): string + { + return $this->type; + } + + public function getName(): string + { + return $this->name; + } + + public function isRoot(): bool + { + return self::ROOT === $this->type; + } + + public function isTemplate(): bool + { + return self::TEMPLATE === $this->type; + } + + public function isBlock(): bool + { + return self::BLOCK === $this->type; + } + + public function isMacro(): bool + { + return self::MACRO === $this->type; + } + + /** + * @return Profile[] + */ + public function getProfiles(): array + { + return $this->profiles; + } + + public function addProfile(self $profile): void + { + $this->profiles[] = $profile; + } + + /** + * Returns the duration in microseconds. + */ + public function getDuration(): float + { + if ($this->isRoot() && $this->profiles) { + // for the root node with children, duration is the sum of all child durations + $duration = 0; + foreach ($this->profiles as $profile) { + $duration += $profile->getDuration(); + } + + return $duration; + } + + return isset($this->ends['wt']) && isset($this->starts['wt']) ? $this->ends['wt'] - $this->starts['wt'] : 0; + } + + /** + * Returns the memory usage in bytes. + */ + public function getMemoryUsage(): int + { + return isset($this->ends['mu']) && isset($this->starts['mu']) ? $this->ends['mu'] - $this->starts['mu'] : 0; + } + + /** + * Returns the peak memory usage in bytes. + */ + public function getPeakMemoryUsage(): int + { + return isset($this->ends['pmu']) && isset($this->starts['pmu']) ? $this->ends['pmu'] - $this->starts['pmu'] : 0; + } + + /** + * Starts the profiling. + */ + public function enter(): void + { + $this->starts = [ + 'wt' => microtime(true), + 'mu' => memory_get_usage(), + 'pmu' => memory_get_peak_usage(), + ]; + } + + /** + * Stops the profiling. + */ + public function leave(): void + { + $this->ends = [ + 'wt' => microtime(true), + 'mu' => memory_get_usage(), + 'pmu' => memory_get_peak_usage(), + ]; + } + + public function reset(): void + { + $this->starts = $this->ends = $this->profiles = []; + $this->enter(); + } + + public function getIterator(): \Traversable + { + return new \ArrayIterator($this->profiles); + } + + public function serialize() + { + return serialize($this->__serialize()); + } + + public function unserialize($data) + { + $this->__unserialize(unserialize($data)); + } + + /** + * @internal + */ + public function __serialize() + { + return [$this->template, $this->name, $this->type, $this->starts, $this->ends, $this->profiles]; + } + + /** + * @internal + */ + public function __unserialize(array $data) + { + list($this->template, $this->name, $this->type, $this->starts, $this->ends, $this->profiles) = $data; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/RuntimeLoader/ContainerRuntimeLoader.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/RuntimeLoader/ContainerRuntimeLoader.php new file mode 100644 index 0000000..b360d7b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/RuntimeLoader/ContainerRuntimeLoader.php @@ -0,0 +1,37 @@ + + * @author Robin Chalas + */ +class ContainerRuntimeLoader implements RuntimeLoaderInterface +{ + private $container; + + public function __construct(ContainerInterface $container) + { + $this->container = $container; + } + + public function load(string $class) + { + return $this->container->has($class) ? $this->container->get($class) : null; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/RuntimeLoader/FactoryRuntimeLoader.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/RuntimeLoader/FactoryRuntimeLoader.php new file mode 100644 index 0000000..1306483 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/RuntimeLoader/FactoryRuntimeLoader.php @@ -0,0 +1,41 @@ + + */ +class FactoryRuntimeLoader implements RuntimeLoaderInterface +{ + private $map; + + /** + * @param array $map An array where keys are class names and values factory callables + */ + public function __construct(array $map = []) + { + $this->map = $map; + } + + public function load(string $class) + { + if (!isset($this->map[$class])) { + return null; + } + + $runtimeFactory = $this->map[$class]; + + return $runtimeFactory(); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/RuntimeLoader/RuntimeLoaderInterface.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/RuntimeLoader/RuntimeLoaderInterface.php new file mode 100644 index 0000000..9e5b204 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/RuntimeLoader/RuntimeLoaderInterface.php @@ -0,0 +1,27 @@ + + */ +interface RuntimeLoaderInterface +{ + /** + * Creates the runtime implementation of a Twig element (filter/function/test). + * + * @return object|null The runtime instance or null if the loader does not know how to create the runtime for this class + */ + public function load(string $class); +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Sandbox/SecurityError.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Sandbox/SecurityError.php new file mode 100644 index 0000000..30a404f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Sandbox/SecurityError.php @@ -0,0 +1,23 @@ + + */ +class SecurityError extends Error +{ +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Sandbox/SecurityNotAllowedFilterError.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Sandbox/SecurityNotAllowedFilterError.php new file mode 100644 index 0000000..02d3063 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Sandbox/SecurityNotAllowedFilterError.php @@ -0,0 +1,33 @@ + + */ +final class SecurityNotAllowedFilterError extends SecurityError +{ + private $filterName; + + public function __construct(string $message, string $functionName) + { + parent::__construct($message); + $this->filterName = $functionName; + } + + public function getFilterName(): string + { + return $this->filterName; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Sandbox/SecurityNotAllowedFunctionError.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Sandbox/SecurityNotAllowedFunctionError.php new file mode 100644 index 0000000..4f76dc6 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Sandbox/SecurityNotAllowedFunctionError.php @@ -0,0 +1,33 @@ + + */ +final class SecurityNotAllowedFunctionError extends SecurityError +{ + private $functionName; + + public function __construct(string $message, string $functionName) + { + parent::__construct($message); + $this->functionName = $functionName; + } + + public function getFunctionName(): string + { + return $this->functionName; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Sandbox/SecurityNotAllowedMethodError.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Sandbox/SecurityNotAllowedMethodError.php new file mode 100644 index 0000000..8df9d0b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Sandbox/SecurityNotAllowedMethodError.php @@ -0,0 +1,40 @@ + + */ +final class SecurityNotAllowedMethodError extends SecurityError +{ + private $className; + private $methodName; + + public function __construct(string $message, string $className, string $methodName) + { + parent::__construct($message); + $this->className = $className; + $this->methodName = $methodName; + } + + public function getClassName(): string + { + return $this->className; + } + + public function getMethodName() + { + return $this->methodName; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Sandbox/SecurityNotAllowedPropertyError.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Sandbox/SecurityNotAllowedPropertyError.php new file mode 100644 index 0000000..42ec4f3 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Sandbox/SecurityNotAllowedPropertyError.php @@ -0,0 +1,40 @@ + + */ +final class SecurityNotAllowedPropertyError extends SecurityError +{ + private $className; + private $propertyName; + + public function __construct(string $message, string $className, string $propertyName) + { + parent::__construct($message); + $this->className = $className; + $this->propertyName = $propertyName; + } + + public function getClassName(): string + { + return $this->className; + } + + public function getPropertyName() + { + return $this->propertyName; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Sandbox/SecurityNotAllowedTagError.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Sandbox/SecurityNotAllowedTagError.php new file mode 100644 index 0000000..4522150 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Sandbox/SecurityNotAllowedTagError.php @@ -0,0 +1,33 @@ + + */ +final class SecurityNotAllowedTagError extends SecurityError +{ + private $tagName; + + public function __construct(string $message, string $tagName) + { + parent::__construct($message); + $this->tagName = $tagName; + } + + public function getTagName(): string + { + return $this->tagName; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Sandbox/SecurityPolicy.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Sandbox/SecurityPolicy.php new file mode 100644 index 0000000..2fc0d01 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Sandbox/SecurityPolicy.php @@ -0,0 +1,126 @@ + + */ +final class SecurityPolicy implements SecurityPolicyInterface +{ + private $allowedTags; + private $allowedFilters; + private $allowedMethods; + private $allowedProperties; + private $allowedFunctions; + + public function __construct(array $allowedTags = [], array $allowedFilters = [], array $allowedMethods = [], array $allowedProperties = [], array $allowedFunctions = []) + { + $this->allowedTags = $allowedTags; + $this->allowedFilters = $allowedFilters; + $this->setAllowedMethods($allowedMethods); + $this->allowedProperties = $allowedProperties; + $this->allowedFunctions = $allowedFunctions; + } + + public function setAllowedTags(array $tags): void + { + $this->allowedTags = $tags; + } + + public function setAllowedFilters(array $filters): void + { + $this->allowedFilters = $filters; + } + + public function setAllowedMethods(array $methods): void + { + $this->allowedMethods = []; + foreach ($methods as $class => $m) { + $this->allowedMethods[$class] = array_map(function ($value) { return strtr($value, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'); }, \is_array($m) ? $m : [$m]); + } + } + + public function setAllowedProperties(array $properties): void + { + $this->allowedProperties = $properties; + } + + public function setAllowedFunctions(array $functions): void + { + $this->allowedFunctions = $functions; + } + + public function checkSecurity($tags, $filters, $functions): void + { + foreach ($tags as $tag) { + if (!\in_array($tag, $this->allowedTags)) { + throw new SecurityNotAllowedTagError(sprintf('Tag "%s" is not allowed.', $tag), $tag); + } + } + + foreach ($filters as $filter) { + if (!\in_array($filter, $this->allowedFilters)) { + throw new SecurityNotAllowedFilterError(sprintf('Filter "%s" is not allowed.', $filter), $filter); + } + } + + foreach ($functions as $function) { + if (!\in_array($function, $this->allowedFunctions)) { + throw new SecurityNotAllowedFunctionError(sprintf('Function "%s" is not allowed.', $function), $function); + } + } + } + + public function checkMethodAllowed($obj, $method): void + { + if ($obj instanceof Template || $obj instanceof Markup) { + return; + } + + $allowed = false; + $method = strtr($method, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'); + foreach ($this->allowedMethods as $class => $methods) { + if ($obj instanceof $class) { + $allowed = \in_array($method, $methods); + + break; + } + } + + if (!$allowed) { + $class = \get_class($obj); + throw new SecurityNotAllowedMethodError(sprintf('Calling "%s" method on a "%s" object is not allowed.', $method, $class), $class, $method); + } + } + + public function checkPropertyAllowed($obj, $property): void + { + $allowed = false; + foreach ($this->allowedProperties as $class => $properties) { + if ($obj instanceof $class) { + $allowed = \in_array($property, \is_array($properties) ? $properties : [$properties]); + + break; + } + } + + if (!$allowed) { + $class = \get_class($obj); + throw new SecurityNotAllowedPropertyError(sprintf('Calling "%s" property on a "%s" object is not allowed.', $property, $class), $class, $property); + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Sandbox/SecurityPolicyInterface.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Sandbox/SecurityPolicyInterface.php new file mode 100644 index 0000000..4cb479d --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Sandbox/SecurityPolicyInterface.php @@ -0,0 +1,35 @@ + + */ +interface SecurityPolicyInterface +{ + /** + * @throws SecurityError + */ + public function checkSecurity($tags, $filters, $functions): void; + + /** + * @throws SecurityNotAllowedMethodError + */ + public function checkMethodAllowed($obj, $method): void; + + /** + * @throws SecurityNotAllowedPropertyError + */ + public function checkPropertyAllowed($obj, $method): void; +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Source.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Source.php new file mode 100644 index 0000000..3cb0240 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Source.php @@ -0,0 +1,51 @@ + + */ +final class Source +{ + private $code; + private $name; + private $path; + + /** + * @param string $code The template source code + * @param string $name The template logical name + * @param string $path The filesystem path of the template if any + */ + public function __construct(string $code, string $name, string $path = '') + { + $this->code = $code; + $this->name = $name; + $this->path = $path; + } + + public function getCode(): string + { + return $this->code; + } + + public function getName(): string + { + return $this->name; + } + + public function getPath(): string + { + return $this->path; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Template.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Template.php new file mode 100644 index 0000000..98ca631 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Template.php @@ -0,0 +1,424 @@ +load() + * instead, which returns an instance of \Twig\TemplateWrapper. + * + * @author Fabien Potencier + * + * @internal + */ +abstract class Template +{ + const ANY_CALL = 'any'; + const ARRAY_CALL = 'array'; + const METHOD_CALL = 'method'; + + protected $parent; + protected $parents = []; + protected $env; + protected $blocks = []; + protected $traits = []; + protected $extensions = []; + protected $sandbox; + + public function __construct(Environment $env) + { + $this->env = $env; + $this->extensions = $env->getExtensions(); + } + + /** + * Returns the template name. + * + * @return string The template name + */ + abstract public function getTemplateName(); + + /** + * Returns debug information about the template. + * + * @return array Debug information + */ + abstract public function getDebugInfo(); + + /** + * Returns information about the original template source code. + * + * @return Source + */ + abstract public function getSourceContext(); + + /** + * Returns the parent template. + * + * This method is for internal use only and should never be called + * directly. + * + * @param array $context + * + * @return Template|TemplateWrapper|false The parent template or false if there is no parent + */ + public function getParent(array $context) + { + if (null !== $this->parent) { + return $this->parent; + } + + try { + $parent = $this->doGetParent($context); + + if (false === $parent) { + return false; + } + + if ($parent instanceof self || $parent instanceof TemplateWrapper) { + return $this->parents[$parent->getSourceContext()->getName()] = $parent; + } + + if (!isset($this->parents[$parent])) { + $this->parents[$parent] = $this->loadTemplate($parent); + } + } catch (LoaderError $e) { + $e->setSourceContext(null); + $e->guess(); + + throw $e; + } + + return $this->parents[$parent]; + } + + protected function doGetParent(array $context) + { + return false; + } + + public function isTraitable() + { + return true; + } + + /** + * Displays a parent block. + * + * This method is for internal use only and should never be called + * directly. + * + * @param string $name The block name to display from the parent + * @param array $context The context + * @param array $blocks The current set of blocks + */ + public function displayParentBlock($name, array $context, array $blocks = []) + { + if (isset($this->traits[$name])) { + $this->traits[$name][0]->displayBlock($name, $context, $blocks, false); + } elseif (false !== $parent = $this->getParent($context)) { + $parent->displayBlock($name, $context, $blocks, false); + } else { + throw new RuntimeError(sprintf('The template has no parent and no traits defining the "%s" block.', $name), -1, $this->getSourceContext()); + } + } + + /** + * Displays a block. + * + * This method is for internal use only and should never be called + * directly. + * + * @param string $name The block name to display + * @param array $context The context + * @param array $blocks The current set of blocks + * @param bool $useBlocks Whether to use the current set of blocks + */ + public function displayBlock($name, array $context, array $blocks = [], $useBlocks = true, self $templateContext = null) + { + if ($useBlocks && isset($blocks[$name])) { + $template = $blocks[$name][0]; + $block = $blocks[$name][1]; + } elseif (isset($this->blocks[$name])) { + $template = $this->blocks[$name][0]; + $block = $this->blocks[$name][1]; + } else { + $template = null; + $block = null; + } + + // avoid RCEs when sandbox is enabled + if (null !== $template && !$template instanceof self) { + throw new \LogicException('A block must be a method on a \Twig\Template instance.'); + } + + if (null !== $template) { + try { + $template->$block($context, $blocks); + } catch (Error $e) { + if (!$e->getSourceContext()) { + $e->setSourceContext($template->getSourceContext()); + } + + // this is mostly useful for \Twig\Error\LoaderError exceptions + // see \Twig\Error\LoaderError + if (-1 === $e->getTemplateLine()) { + $e->guess(); + } + + throw $e; + } catch (\Exception $e) { + $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $template->getSourceContext(), $e); + $e->guess(); + + throw $e; + } + } elseif (false !== $parent = $this->getParent($context)) { + $parent->displayBlock($name, $context, array_merge($this->blocks, $blocks), false, $templateContext ?? $this); + } elseif (isset($blocks[$name])) { + throw new RuntimeError(sprintf('Block "%s" should not call parent() in "%s" as the block does not exist in the parent template "%s".', $name, $blocks[$name][0]->getTemplateName(), $this->getTemplateName()), -1, $blocks[$name][0]->getSourceContext()); + } else { + throw new RuntimeError(sprintf('Block "%s" on template "%s" does not exist.', $name, $this->getTemplateName()), -1, ($templateContext ?? $this)->getSourceContext()); + } + } + + /** + * Renders a parent block. + * + * This method is for internal use only and should never be called + * directly. + * + * @param string $name The block name to render from the parent + * @param array $context The context + * @param array $blocks The current set of blocks + * + * @return string The rendered block + */ + public function renderParentBlock($name, array $context, array $blocks = []) + { + if ($this->env->isDebug()) { + ob_start(); + } else { + ob_start(function () { return ''; }); + } + $this->displayParentBlock($name, $context, $blocks); + + return ob_get_clean(); + } + + /** + * Renders a block. + * + * This method is for internal use only and should never be called + * directly. + * + * @param string $name The block name to render + * @param array $context The context + * @param array $blocks The current set of blocks + * @param bool $useBlocks Whether to use the current set of blocks + * + * @return string The rendered block + */ + public function renderBlock($name, array $context, array $blocks = [], $useBlocks = true) + { + if ($this->env->isDebug()) { + ob_start(); + } else { + ob_start(function () { return ''; }); + } + $this->displayBlock($name, $context, $blocks, $useBlocks); + + return ob_get_clean(); + } + + /** + * Returns whether a block exists or not in the current context of the template. + * + * This method checks blocks defined in the current template + * or defined in "used" traits or defined in parent templates. + * + * @param string $name The block name + * @param array $context The context + * @param array $blocks The current set of blocks + * + * @return bool true if the block exists, false otherwise + */ + public function hasBlock($name, array $context, array $blocks = []) + { + if (isset($blocks[$name])) { + return $blocks[$name][0] instanceof self; + } + + if (isset($this->blocks[$name])) { + return true; + } + + if (false !== $parent = $this->getParent($context)) { + return $parent->hasBlock($name, $context); + } + + return false; + } + + /** + * Returns all block names in the current context of the template. + * + * This method checks blocks defined in the current template + * or defined in "used" traits or defined in parent templates. + * + * @param array $context The context + * @param array $blocks The current set of blocks + * + * @return array An array of block names + */ + public function getBlockNames(array $context, array $blocks = []) + { + $names = array_merge(array_keys($blocks), array_keys($this->blocks)); + + if (false !== $parent = $this->getParent($context)) { + $names = array_merge($names, $parent->getBlockNames($context)); + } + + return array_unique($names); + } + + /** + * @return Template|TemplateWrapper + */ + protected function loadTemplate($template, $templateName = null, $line = null, $index = null) + { + try { + if (\is_array($template)) { + return $this->env->resolveTemplate($template); + } + + if ($template instanceof self || $template instanceof TemplateWrapper) { + return $template; + } + + if ($template === $this->getTemplateName()) { + $class = \get_class($this); + if (false !== $pos = strrpos($class, '___', -1)) { + $class = substr($class, 0, $pos); + } + } else { + $class = $this->env->getTemplateClass($template); + } + + return $this->env->loadTemplate($class, $template, $index); + } catch (Error $e) { + if (!$e->getSourceContext()) { + $e->setSourceContext($templateName ? new Source('', $templateName) : $this->getSourceContext()); + } + + if ($e->getTemplateLine() > 0) { + throw $e; + } + + if (!$line) { + $e->guess(); + } else { + $e->setTemplateLine($line); + } + + throw $e; + } + } + + /** + * @internal + * + * @return Template + */ + protected function unwrap() + { + return $this; + } + + /** + * Returns all blocks. + * + * This method is for internal use only and should never be called + * directly. + * + * @return array An array of blocks + */ + public function getBlocks() + { + return $this->blocks; + } + + public function display(array $context, array $blocks = []) + { + $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks)); + } + + public function render(array $context) + { + $level = ob_get_level(); + if ($this->env->isDebug()) { + ob_start(); + } else { + ob_start(function () { return ''; }); + } + try { + $this->display($context); + } catch (\Throwable $e) { + while (ob_get_level() > $level) { + ob_end_clean(); + } + + throw $e; + } + + return ob_get_clean(); + } + + protected function displayWithErrorHandling(array $context, array $blocks = []) + { + try { + $this->doDisplay($context, $blocks); + } catch (Error $e) { + if (!$e->getSourceContext()) { + $e->setSourceContext($this->getSourceContext()); + } + + // this is mostly useful for \Twig\Error\LoaderError exceptions + // see \Twig\Error\LoaderError + if (-1 === $e->getTemplateLine()) { + $e->guess(); + } + + throw $e; + } catch (\Exception $e) { + $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $this->getSourceContext(), $e); + $e->guess(); + + throw $e; + } + } + + /** + * Auto-generated method to display the template with the given context. + * + * @param array $context An array of parameters to pass to the template + * @param array $blocks An array of blocks to pass to the template + */ + abstract protected function doDisplay(array $context, array $blocks = []); +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TemplateWrapper.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TemplateWrapper.php new file mode 100644 index 0000000..c9c6b07 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TemplateWrapper.php @@ -0,0 +1,109 @@ + + */ +final class TemplateWrapper +{ + private $env; + private $template; + + /** + * This method is for internal use only and should never be called + * directly (use Twig\Environment::load() instead). + * + * @internal + */ + public function __construct(Environment $env, Template $template) + { + $this->env = $env; + $this->template = $template; + } + + public function render(array $context = []): string + { + // using func_get_args() allows to not expose the blocks argument + // as it should only be used by internal code + return $this->template->render($context, \func_get_args()[1] ?? []); + } + + public function display(array $context = []) + { + // using func_get_args() allows to not expose the blocks argument + // as it should only be used by internal code + $this->template->display($context, \func_get_args()[1] ?? []); + } + + public function hasBlock(string $name, array $context = []): bool + { + return $this->template->hasBlock($name, $context); + } + + /** + * @return string[] An array of defined template block names + */ + public function getBlockNames(array $context = []): array + { + return $this->template->getBlockNames($context); + } + + public function renderBlock(string $name, array $context = []): string + { + $context = $this->env->mergeGlobals($context); + $level = ob_get_level(); + if ($this->env->isDebug()) { + ob_start(); + } else { + ob_start(function () { return ''; }); + } + try { + $this->template->displayBlock($name, $context); + } catch (\Throwable $e) { + while (ob_get_level() > $level) { + ob_end_clean(); + } + + throw $e; + } + + return ob_get_clean(); + } + + public function displayBlock(string $name, array $context = []) + { + $this->template->displayBlock($name, $this->env->mergeGlobals($context)); + } + + public function getSourceContext(): Source + { + return $this->template->getSourceContext(); + } + + public function getTemplateName(): string + { + return $this->template->getTemplateName(); + } + + /** + * @internal + * + * @return Template + */ + public function unwrap() + { + return $this->template; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Test/IntegrationTestCase.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Test/IntegrationTestCase.php new file mode 100644 index 0000000..1bad549 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Test/IntegrationTestCase.php @@ -0,0 +1,265 @@ + + * @author Karma Dordrak + */ +abstract class IntegrationTestCase extends TestCase +{ + /** + * @return string + */ + abstract protected function getFixturesDir(); + + /** + * @return RuntimeLoaderInterface[] + */ + protected function getRuntimeLoaders() + { + return []; + } + + /** + * @return ExtensionInterface[] + */ + protected function getExtensions() + { + return []; + } + + /** + * @return TwigFilter[] + */ + protected function getTwigFilters() + { + return []; + } + + /** + * @return TwigFunction[] + */ + protected function getTwigFunctions() + { + return []; + } + + /** + * @return TwigTest[] + */ + protected function getTwigTests() + { + return []; + } + + /** + * @dataProvider getTests + */ + public function testIntegration($file, $message, $condition, $templates, $exception, $outputs, $deprecation = '') + { + $this->doIntegrationTest($file, $message, $condition, $templates, $exception, $outputs, $deprecation); + } + + /** + * @dataProvider getLegacyTests + * @group legacy + */ + public function testLegacyIntegration($file, $message, $condition, $templates, $exception, $outputs, $deprecation = '') + { + $this->doIntegrationTest($file, $message, $condition, $templates, $exception, $outputs, $deprecation); + } + + public function getTests($name, $legacyTests = false) + { + $fixturesDir = realpath($this->getFixturesDir()); + $tests = []; + + foreach (new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($fixturesDir), \RecursiveIteratorIterator::LEAVES_ONLY) as $file) { + if (!preg_match('/\.test$/', $file)) { + continue; + } + + if ($legacyTests xor false !== strpos($file->getRealpath(), '.legacy.test')) { + continue; + } + + $test = file_get_contents($file->getRealpath()); + + if (preg_match('/--TEST--\s*(.*?)\s*(?:--CONDITION--\s*(.*))?\s*(?:--DEPRECATION--\s*(.*?))?\s*((?:--TEMPLATE(?:\(.*?\))?--(?:.*?))+)\s*(?:--DATA--\s*(.*))?\s*--EXCEPTION--\s*(.*)/sx', $test, $match)) { + $message = $match[1]; + $condition = $match[2]; + $deprecation = $match[3]; + $templates = self::parseTemplates($match[4]); + $exception = $match[6]; + $outputs = [[null, $match[5], null, '']]; + } elseif (preg_match('/--TEST--\s*(.*?)\s*(?:--CONDITION--\s*(.*))?\s*(?:--DEPRECATION--\s*(.*?))?\s*((?:--TEMPLATE(?:\(.*?\))?--(?:.*?))+)--DATA--.*?--EXPECT--.*/s', $test, $match)) { + $message = $match[1]; + $condition = $match[2]; + $deprecation = $match[3]; + $templates = self::parseTemplates($match[4]); + $exception = false; + preg_match_all('/--DATA--(.*?)(?:--CONFIG--(.*?))?--EXPECT--(.*?)(?=\-\-DATA\-\-|$)/s', $test, $outputs, PREG_SET_ORDER); + } else { + throw new \InvalidArgumentException(sprintf('Test "%s" is not valid.', str_replace($fixturesDir.'/', '', $file))); + } + + $tests[] = [str_replace($fixturesDir.'/', '', $file), $message, $condition, $templates, $exception, $outputs, $deprecation]; + } + + if ($legacyTests && empty($tests)) { + // add a dummy test to avoid a PHPUnit message + return [['not', '-', '', [], '', []]]; + } + + return $tests; + } + + public function getLegacyTests() + { + return $this->getTests('testLegacyIntegration', true); + } + + protected function doIntegrationTest($file, $message, $condition, $templates, $exception, $outputs, $deprecation = '') + { + if (!$outputs) { + $this->markTestSkipped('no tests to run'); + } + + if ($condition) { + eval('$ret = '.$condition.';'); + if (!$ret) { + $this->markTestSkipped($condition); + } + } + + $loader = new ArrayLoader($templates); + + foreach ($outputs as $i => $match) { + $config = array_merge([ + 'cache' => false, + 'strict_variables' => true, + ], $match[2] ? eval($match[2].';') : []); + $twig = new Environment($loader, $config); + $twig->addGlobal('global', 'global'); + foreach ($this->getRuntimeLoaders() as $runtimeLoader) { + $twig->addRuntimeLoader($runtimeLoader); + } + + foreach ($this->getExtensions() as $extension) { + $twig->addExtension($extension); + } + + foreach ($this->getTwigFilters() as $filter) { + $twig->addFilter($filter); + } + + foreach ($this->getTwigTests() as $test) { + $twig->addTest($test); + } + + foreach ($this->getTwigFunctions() as $function) { + $twig->addFunction($function); + } + + // avoid using the same PHP class name for different cases + $p = new \ReflectionProperty($twig, 'templateClassPrefix'); + $p->setAccessible(true); + $p->setValue($twig, '__TwigTemplate_'.hash('sha256', uniqid(mt_rand(), true), false).'_'); + + $deprecations = []; + try { + $prevHandler = set_error_handler(function ($type, $msg, $file, $line, $context = []) use (&$deprecations, &$prevHandler) { + if (E_USER_DEPRECATED === $type) { + $deprecations[] = $msg; + + return true; + } + + return $prevHandler ? $prevHandler($type, $msg, $file, $line, $context) : false; + }); + + $template = $twig->load('index.twig'); + } catch (\Exception $e) { + if (false !== $exception) { + $message = $e->getMessage(); + $this->assertSame(trim($exception), trim(sprintf('%s: %s', \get_class($e), $message))); + $last = substr($message, \strlen($message) - 1); + $this->assertTrue('.' === $last || '?' === $last, 'Exception message must end with a dot or a question mark.'); + + return; + } + + throw new Error(sprintf('%s: %s', \get_class($e), $e->getMessage()), -1, null, $e); + } finally { + restore_error_handler(); + } + + $this->assertSame($deprecation, implode("\n", $deprecations)); + + try { + $output = trim($template->render(eval($match[1].';')), "\n "); + } catch (\Exception $e) { + if (false !== $exception) { + $this->assertSame(trim($exception), trim(sprintf('%s: %s', \get_class($e), $e->getMessage()))); + + return; + } + + $e = new Error(sprintf('%s: %s', \get_class($e), $e->getMessage()), -1, null, $e); + + $output = trim(sprintf('%s: %s', \get_class($e), $e->getMessage())); + } + + if (false !== $exception) { + list($class) = explode(':', $exception); + $constraintClass = class_exists('PHPUnit\Framework\Constraint\Exception') ? 'PHPUnit\Framework\Constraint\Exception' : 'PHPUnit_Framework_Constraint_Exception'; + $this->assertThat(null, new $constraintClass($class)); + } + + $expected = trim($match[3], "\n "); + + if ($expected !== $output) { + printf("Compiled templates that failed on case %d:\n", $i + 1); + + foreach (array_keys($templates) as $name) { + echo "Template: $name\n"; + echo $twig->compile($twig->parse($twig->tokenize($twig->getLoader()->getSourceContext($name)))); + } + } + $this->assertEquals($expected, $output, $message.' (in '.$file.')'); + } + } + + protected static function parseTemplates($test) + { + $templates = []; + preg_match_all('/--TEMPLATE(?:\((.*?)\))?--(.*?)(?=\-\-TEMPLATE|$)/s', $test, $matches, PREG_SET_ORDER); + foreach ($matches as $match) { + $templates[($match[1] ? $match[1] : 'index.twig')] = $match[2]; + } + + return $templates; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Test/NodeTestCase.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Test/NodeTestCase.php new file mode 100644 index 0000000..6464024 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Test/NodeTestCase.php @@ -0,0 +1,65 @@ +assertNodeCompilation($source, $node, $environment, $isPattern); + } + + public function assertNodeCompilation($source, Node $node, Environment $environment = null, $isPattern = false) + { + $compiler = $this->getCompiler($environment); + $compiler->compile($node); + + if ($isPattern) { + $this->assertStringMatchesFormat($source, trim($compiler->getSource())); + } else { + $this->assertEquals($source, trim($compiler->getSource())); + } + } + + protected function getCompiler(Environment $environment = null) + { + return new Compiler(null === $environment ? $this->getEnvironment() : $environment); + } + + protected function getEnvironment() + { + return new Environment(new ArrayLoader([])); + } + + protected function getVariableGetter($name, $line = false) + { + $line = $line > 0 ? "// line {$line}\n" : ''; + + return sprintf('%s($context["%s"] ?? null)', $line, $name); + } + + protected function getAttributeGetter() + { + return 'twig_get_attribute($this->env, $this->source, '; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Token.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Token.php new file mode 100644 index 0000000..7640fc5 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Token.php @@ -0,0 +1,178 @@ + + */ +final class Token +{ + private $value; + private $type; + private $lineno; + + const EOF_TYPE = -1; + const TEXT_TYPE = 0; + const BLOCK_START_TYPE = 1; + const VAR_START_TYPE = 2; + const BLOCK_END_TYPE = 3; + const VAR_END_TYPE = 4; + const NAME_TYPE = 5; + const NUMBER_TYPE = 6; + const STRING_TYPE = 7; + const OPERATOR_TYPE = 8; + const PUNCTUATION_TYPE = 9; + const INTERPOLATION_START_TYPE = 10; + const INTERPOLATION_END_TYPE = 11; + const ARROW_TYPE = 12; + + public function __construct(int $type, $value, int $lineno) + { + $this->type = $type; + $this->value = $value; + $this->lineno = $lineno; + } + + public function __toString() + { + return sprintf('%s(%s)', self::typeToString($this->type, true), $this->value); + } + + /** + * Tests the current token for a type and/or a value. + * + * Parameters may be: + * * just type + * * type and value (or array of possible values) + * * just value (or array of possible values) (NAME_TYPE is used as type) + * + * @param array|string|int $type The type to test + * @param array|string|null $values The token value + */ + public function test($type, $values = null): bool + { + if (null === $values && !\is_int($type)) { + $values = $type; + $type = self::NAME_TYPE; + } + + return ($this->type === $type) && ( + null === $values || + (\is_array($values) && \in_array($this->value, $values)) || + $this->value == $values + ); + } + + public function getLine(): int + { + return $this->lineno; + } + + public function getType(): int + { + return $this->type; + } + + public function getValue() + { + return $this->value; + } + + public static function typeToString(int $type, bool $short = false): string + { + switch ($type) { + case self::EOF_TYPE: + $name = 'EOF_TYPE'; + break; + case self::TEXT_TYPE: + $name = 'TEXT_TYPE'; + break; + case self::BLOCK_START_TYPE: + $name = 'BLOCK_START_TYPE'; + break; + case self::VAR_START_TYPE: + $name = 'VAR_START_TYPE'; + break; + case self::BLOCK_END_TYPE: + $name = 'BLOCK_END_TYPE'; + break; + case self::VAR_END_TYPE: + $name = 'VAR_END_TYPE'; + break; + case self::NAME_TYPE: + $name = 'NAME_TYPE'; + break; + case self::NUMBER_TYPE: + $name = 'NUMBER_TYPE'; + break; + case self::STRING_TYPE: + $name = 'STRING_TYPE'; + break; + case self::OPERATOR_TYPE: + $name = 'OPERATOR_TYPE'; + break; + case self::PUNCTUATION_TYPE: + $name = 'PUNCTUATION_TYPE'; + break; + case self::INTERPOLATION_START_TYPE: + $name = 'INTERPOLATION_START_TYPE'; + break; + case self::INTERPOLATION_END_TYPE: + $name = 'INTERPOLATION_END_TYPE'; + break; + case self::ARROW_TYPE: + $name = 'ARROW_TYPE'; + break; + default: + throw new \LogicException(sprintf('Token of type "%s" does not exist.', $type)); + } + + return $short ? $name : 'Twig\Token::'.$name; + } + + public static function typeToEnglish(int $type): string + { + switch ($type) { + case self::EOF_TYPE: + return 'end of template'; + case self::TEXT_TYPE: + return 'text'; + case self::BLOCK_START_TYPE: + return 'begin of statement block'; + case self::VAR_START_TYPE: + return 'begin of print statement'; + case self::BLOCK_END_TYPE: + return 'end of statement block'; + case self::VAR_END_TYPE: + return 'end of print statement'; + case self::NAME_TYPE: + return 'name'; + case self::NUMBER_TYPE: + return 'number'; + case self::STRING_TYPE: + return 'string'; + case self::OPERATOR_TYPE: + return 'operator'; + case self::PUNCTUATION_TYPE: + return 'punctuation'; + case self::INTERPOLATION_START_TYPE: + return 'begin of string interpolation'; + case self::INTERPOLATION_END_TYPE: + return 'end of string interpolation'; + case self::ARROW_TYPE: + return 'arrow function'; + default: + throw new \LogicException(sprintf('Token of type "%s" does not exist.', $type)); + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/AbstractTokenParser.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/AbstractTokenParser.php new file mode 100644 index 0000000..720ea67 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/AbstractTokenParser.php @@ -0,0 +1,32 @@ + + */ +abstract class AbstractTokenParser implements TokenParserInterface +{ + /** + * @var Parser + */ + protected $parser; + + public function setParser(Parser $parser): void + { + $this->parser = $parser; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/ApplyTokenParser.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/ApplyTokenParser.php new file mode 100644 index 0000000..f360cf9 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/ApplyTokenParser.php @@ -0,0 +1,58 @@ +getLine(); + $name = $this->parser->getVarName(); + + $ref = new TempNameExpression($name, $lineno); + $ref->setAttribute('always_defined', true); + + $filter = $this->parser->getExpressionParser()->parseFilterExpressionRaw($ref, $this->getTag()); + + $this->parser->getStream()->expect(Token::BLOCK_END_TYPE); + $body = $this->parser->subparse([$this, 'decideApplyEnd'], true); + $this->parser->getStream()->expect(Token::BLOCK_END_TYPE); + + return new Node([ + new SetNode(true, $ref, $body, $lineno, $this->getTag()), + new PrintNode($filter, $lineno, $this->getTag()), + ]); + } + + public function decideApplyEnd(Token $token): bool + { + return $token->test('endapply'); + } + + public function getTag(): string + { + return 'apply'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/AutoEscapeTokenParser.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/AutoEscapeTokenParser.php new file mode 100644 index 0000000..de54837 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/AutoEscapeTokenParser.php @@ -0,0 +1,56 @@ +getLine(); + $stream = $this->parser->getStream(); + + if ($stream->test(/* Token::BLOCK_END_TYPE */ 3)) { + $value = 'html'; + } else { + $expr = $this->parser->getExpressionParser()->parseExpression(); + if (!$expr instanceof ConstantExpression) { + throw new SyntaxError('An escaping strategy must be a string or false.', $stream->getCurrent()->getLine(), $stream->getSourceContext()); + } + $value = $expr->getAttribute('value'); + } + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + $body = $this->parser->subparse([$this, 'decideBlockEnd'], true); + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + return new AutoEscapeNode($value, $body, $lineno, $this->getTag()); + } + + public function decideBlockEnd(Token $token): bool + { + return $token->test('endautoescape'); + } + + public function getTag(): string + { + return 'autoescape'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/BlockTokenParser.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/BlockTokenParser.php new file mode 100644 index 0000000..e915b77 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/BlockTokenParser.php @@ -0,0 +1,76 @@ + + * {% block title %}{% endblock %} - My Webpage + * {% endblock %} + */ +final class BlockTokenParser extends AbstractTokenParser +{ + public function parse(Token $token): Node + { + $lineno = $token->getLine(); + $stream = $this->parser->getStream(); + $name = $stream->expect(/* Token::NAME_TYPE */ 5)->getValue(); + if ($this->parser->hasBlock($name)) { + throw new SyntaxError(sprintf("The block '%s' has already been defined line %d.", $name, $this->parser->getBlock($name)->getTemplateLine()), $stream->getCurrent()->getLine(), $stream->getSourceContext()); + } + $this->parser->setBlock($name, $block = new BlockNode($name, new Node([]), $lineno)); + $this->parser->pushLocalScope(); + $this->parser->pushBlockStack($name); + + if ($stream->nextIf(/* Token::BLOCK_END_TYPE */ 3)) { + $body = $this->parser->subparse([$this, 'decideBlockEnd'], true); + if ($token = $stream->nextIf(/* Token::NAME_TYPE */ 5)) { + $value = $token->getValue(); + + if ($value != $name) { + throw new SyntaxError(sprintf('Expected endblock for block "%s" (but "%s" given).', $name, $value), $stream->getCurrent()->getLine(), $stream->getSourceContext()); + } + } + } else { + $body = new Node([ + new PrintNode($this->parser->getExpressionParser()->parseExpression(), $lineno), + ]); + } + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + $block->setNode('body', $body); + $this->parser->popBlockStack(); + $this->parser->popLocalScope(); + + return new BlockReferenceNode($name, $lineno, $this->getTag()); + } + + public function decideBlockEnd(Token $token): bool + { + return $token->test('endblock'); + } + + public function getTag(): string + { + return 'block'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/DeprecatedTokenParser.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/DeprecatedTokenParser.php new file mode 100644 index 0000000..aaf610f --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/DeprecatedTokenParser.php @@ -0,0 +1,41 @@ + + */ +final class DeprecatedTokenParser extends AbstractTokenParser +{ + public function parse(Token $token): Node + { + $expr = $this->parser->getExpressionParser()->parseExpression(); + + $this->parser->getStream()->expect(Token::BLOCK_END_TYPE); + + return new DeprecatedNode($expr, $token->getLine(), $this->getTag()); + } + + public function getTag(): string + { + return 'deprecated'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/DoTokenParser.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/DoTokenParser.php new file mode 100644 index 0000000..050608a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/DoTokenParser.php @@ -0,0 +1,36 @@ +parser->getExpressionParser()->parseExpression(); + + $this->parser->getStream()->expect(/* Token::BLOCK_END_TYPE */ 3); + + return new DoNode($expr, $token->getLine(), $this->getTag()); + } + + public function getTag(): string + { + return 'do'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/EmbedTokenParser.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/EmbedTokenParser.php new file mode 100644 index 0000000..30df689 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/EmbedTokenParser.php @@ -0,0 +1,71 @@ +parser->getStream(); + + $parent = $this->parser->getExpressionParser()->parseExpression(); + + list($variables, $only, $ignoreMissing) = $this->parseArguments(); + + $parentToken = $fakeParentToken = new Token(/* Token::STRING_TYPE */ 7, '__parent__', $token->getLine()); + if ($parent instanceof ConstantExpression) { + $parentToken = new Token(/* Token::STRING_TYPE */ 7, $parent->getAttribute('value'), $token->getLine()); + } elseif ($parent instanceof NameExpression) { + $parentToken = new Token(/* Token::NAME_TYPE */ 5, $parent->getAttribute('name'), $token->getLine()); + } + + // inject a fake parent to make the parent() function work + $stream->injectTokens([ + new Token(/* Token::BLOCK_START_TYPE */ 1, '', $token->getLine()), + new Token(/* Token::NAME_TYPE */ 5, 'extends', $token->getLine()), + $parentToken, + new Token(/* Token::BLOCK_END_TYPE */ 3, '', $token->getLine()), + ]); + + $module = $this->parser->parse($stream, [$this, 'decideBlockEnd'], true); + + // override the parent with the correct one + if ($fakeParentToken === $parentToken) { + $module->setNode('parent', $parent); + } + + $this->parser->embedTemplate($module); + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + return new EmbedNode($module->getTemplateName(), $module->getAttribute('index'), $variables, $only, $ignoreMissing, $token->getLine(), $this->getTag()); + } + + public function decideBlockEnd(Token $token): bool + { + return $token->test('endembed'); + } + + public function getTag(): string + { + return 'embed'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/ExtendsTokenParser.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/ExtendsTokenParser.php new file mode 100644 index 0000000..fd27514 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/ExtendsTokenParser.php @@ -0,0 +1,50 @@ +parser->getStream(); + + if ($this->parser->peekBlockStack()) { + throw new SyntaxError('Cannot use "extend" in a block.', $token->getLine(), $stream->getSourceContext()); + } elseif (!$this->parser->isMainScope()) { + throw new SyntaxError('Cannot use "extend" in a macro.', $token->getLine(), $stream->getSourceContext()); + } + + if (null !== $this->parser->getParent()) { + throw new SyntaxError('Multiple extends tags are forbidden.', $token->getLine(), $stream->getSourceContext()); + } + $this->parser->setParent($this->parser->getExpressionParser()->parseExpression()); + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + return new Node(); + } + + public function getTag(): string + { + return 'extends'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/FlushTokenParser.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/FlushTokenParser.php new file mode 100644 index 0000000..44e13f6 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/FlushTokenParser.php @@ -0,0 +1,36 @@ +parser->getStream()->expect(/* Token::BLOCK_END_TYPE */ 3); + + return new FlushNode($token->getLine(), $this->getTag()); + } + + public function getTag(): string + { + return 'flush'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/ForTokenParser.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/ForTokenParser.php new file mode 100644 index 0000000..0a6b740 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/ForTokenParser.php @@ -0,0 +1,77 @@ + + * {% for user in users %} + *
  • {{ user.username|e }}
  • + * {% endfor %} + * + */ +final class ForTokenParser extends AbstractTokenParser +{ + public function parse(Token $token): Node + { + $lineno = $token->getLine(); + $stream = $this->parser->getStream(); + $targets = $this->parser->getExpressionParser()->parseAssignmentExpression(); + $stream->expect(/* Token::OPERATOR_TYPE */ 8, 'in'); + $seq = $this->parser->getExpressionParser()->parseExpression(); + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + $body = $this->parser->subparse([$this, 'decideForFork']); + if ('else' == $stream->next()->getValue()) { + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + $else = $this->parser->subparse([$this, 'decideForEnd'], true); + } else { + $else = null; + } + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + if (\count($targets) > 1) { + $keyTarget = $targets->getNode(0); + $keyTarget = new AssignNameExpression($keyTarget->getAttribute('name'), $keyTarget->getTemplateLine()); + $valueTarget = $targets->getNode(1); + $valueTarget = new AssignNameExpression($valueTarget->getAttribute('name'), $valueTarget->getTemplateLine()); + } else { + $keyTarget = new AssignNameExpression('_key', $lineno); + $valueTarget = $targets->getNode(0); + $valueTarget = new AssignNameExpression($valueTarget->getAttribute('name'), $valueTarget->getTemplateLine()); + } + + return new ForNode($keyTarget, $valueTarget, $seq, null, $body, $else, $lineno, $this->getTag()); + } + + public function decideForFork(Token $token): bool + { + return $token->test(['else', 'endfor']); + } + + public function decideForEnd(Token $token): bool + { + return $token->test('endfor'); + } + + public function getTag(): string + { + return 'for'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/FromTokenParser.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/FromTokenParser.php new file mode 100644 index 0000000..c1d1f4c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/FromTokenParser.php @@ -0,0 +1,64 @@ +parser->getExpressionParser()->parseExpression(); + $stream = $this->parser->getStream(); + $stream->expect(/* Token::NAME_TYPE */ 5, 'import'); + + $targets = []; + do { + $name = $stream->expect(/* Token::NAME_TYPE */ 5)->getValue(); + + $alias = $name; + if ($stream->nextIf('as')) { + $alias = $stream->expect(/* Token::NAME_TYPE */ 5)->getValue(); + } + + $targets[$name] = $alias; + + if (!$stream->nextIf(/* Token::PUNCTUATION_TYPE */ 9, ',')) { + break; + } + } while (true); + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + $var = new AssignNameExpression($this->parser->getVarName(), $token->getLine()); + $node = new ImportNode($macro, $var, $token->getLine(), $this->getTag(), $this->parser->isMainScope()); + + foreach ($targets as $name => $alias) { + $this->parser->addImportedSymbol('function', $alias, 'macro_'.$name, $var); + } + + return $node; + } + + public function getTag(): string + { + return 'from'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/IfTokenParser.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/IfTokenParser.php new file mode 100644 index 0000000..b84e1fa --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/IfTokenParser.php @@ -0,0 +1,87 @@ + + * {% for user in users %} + *
  • {{ user.username|e }}
  • + * {% endfor %} + * + * {% endif %} + */ +final class IfTokenParser extends AbstractTokenParser +{ + public function parse(Token $token): Node + { + $lineno = $token->getLine(); + $expr = $this->parser->getExpressionParser()->parseExpression(); + $stream = $this->parser->getStream(); + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + $body = $this->parser->subparse([$this, 'decideIfFork']); + $tests = [$expr, $body]; + $else = null; + + $end = false; + while (!$end) { + switch ($stream->next()->getValue()) { + case 'else': + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + $else = $this->parser->subparse([$this, 'decideIfEnd']); + break; + + case 'elseif': + $expr = $this->parser->getExpressionParser()->parseExpression(); + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + $body = $this->parser->subparse([$this, 'decideIfFork']); + $tests[] = $expr; + $tests[] = $body; + break; + + case 'endif': + $end = true; + break; + + default: + throw new SyntaxError(sprintf('Unexpected end of template. Twig was looking for the following tags "else", "elseif", or "endif" to close the "if" block started at line %d).', $lineno), $stream->getCurrent()->getLine(), $stream->getSourceContext()); + } + } + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + return new IfNode(new Node($tests), $else, $lineno, $this->getTag()); + } + + public function decideIfFork(Token $token): bool + { + return $token->test(['elseif', 'else', 'endif']); + } + + public function decideIfEnd(Token $token): bool + { + return $token->test(['endif']); + } + + public function getTag(): string + { + return 'if'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/ImportTokenParser.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/ImportTokenParser.php new file mode 100644 index 0000000..ca18193 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/ImportTokenParser.php @@ -0,0 +1,42 @@ +parser->getExpressionParser()->parseExpression(); + $this->parser->getStream()->expect(/* Token::NAME_TYPE */ 5, 'as'); + $var = new AssignNameExpression($this->parser->getStream()->expect(/* Token::NAME_TYPE */ 5)->getValue(), $token->getLine()); + $this->parser->getStream()->expect(/* Token::BLOCK_END_TYPE */ 3); + + $this->parser->addImportedSymbol('template', $var->getAttribute('name')); + + return new ImportNode($macro, $var, $token->getLine(), $this->getTag(), $this->parser->isMainScope()); + } + + public function getTag(): string + { + return 'import'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/IncludeTokenParser.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/IncludeTokenParser.php new file mode 100644 index 0000000..47d25da --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/IncludeTokenParser.php @@ -0,0 +1,67 @@ +parser->getExpressionParser()->parseExpression(); + + list($variables, $only, $ignoreMissing) = $this->parseArguments(); + + return new IncludeNode($expr, $variables, $only, $ignoreMissing, $token->getLine(), $this->getTag()); + } + + protected function parseArguments() + { + $stream = $this->parser->getStream(); + + $ignoreMissing = false; + if ($stream->nextIf(/* Token::NAME_TYPE */ 5, 'ignore')) { + $stream->expect(/* Token::NAME_TYPE */ 5, 'missing'); + + $ignoreMissing = true; + } + + $variables = null; + if ($stream->nextIf(/* Token::NAME_TYPE */ 5, 'with')) { + $variables = $this->parser->getExpressionParser()->parseExpression(); + } + + $only = false; + if ($stream->nextIf(/* Token::NAME_TYPE */ 5, 'only')) { + $only = true; + } + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + return [$variables, $only, $ignoreMissing]; + } + + public function getTag(): string + { + return 'include'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/MacroTokenParser.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/MacroTokenParser.php new file mode 100644 index 0000000..0487ef4 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/MacroTokenParser.php @@ -0,0 +1,64 @@ + + * {% endmacro %} + */ +final class MacroTokenParser extends AbstractTokenParser +{ + public function parse(Token $token): Node + { + $lineno = $token->getLine(); + $stream = $this->parser->getStream(); + $name = $stream->expect(/* Token::NAME_TYPE */ 5)->getValue(); + + $arguments = $this->parser->getExpressionParser()->parseArguments(true, true); + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + $this->parser->pushLocalScope(); + $body = $this->parser->subparse([$this, 'decideBlockEnd'], true); + if ($token = $stream->nextIf(/* Token::NAME_TYPE */ 5)) { + $value = $token->getValue(); + + if ($value != $name) { + throw new SyntaxError(sprintf('Expected endmacro for macro "%s" (but "%s" given).', $name, $value), $stream->getCurrent()->getLine(), $stream->getSourceContext()); + } + } + $this->parser->popLocalScope(); + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + $this->parser->setMacro($name, new MacroNode($name, new BodyNode([$body]), $arguments, $lineno, $this->getTag())); + + return new Node(); + } + + public function decideBlockEnd(Token $token): bool + { + return $token->test('endmacro'); + } + + public function getTag(): string + { + return 'macro'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/SandboxTokenParser.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/SandboxTokenParser.php new file mode 100644 index 0000000..b6cb530 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/SandboxTokenParser.php @@ -0,0 +1,64 @@ +parser->getStream(); + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + $body = $this->parser->subparse([$this, 'decideBlockEnd'], true); + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + // in a sandbox tag, only include tags are allowed + if (!$body instanceof IncludeNode) { + foreach ($body as $node) { + if ($node instanceof TextNode && ctype_space($node->getAttribute('data'))) { + continue; + } + + if (!$node instanceof IncludeNode) { + throw new SyntaxError('Only "include" tags are allowed within a "sandbox" section.', $node->getTemplateLine(), $stream->getSourceContext()); + } + } + } + + return new SandboxNode($body, $token->getLine(), $this->getTag()); + } + + public function decideBlockEnd(Token $token): bool + { + return $token->test('endsandbox'); + } + + public function getTag(): string + { + return 'sandbox'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/SetTokenParser.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/SetTokenParser.php new file mode 100644 index 0000000..a9fb75a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/SetTokenParser.php @@ -0,0 +1,71 @@ +getLine(); + $stream = $this->parser->getStream(); + $names = $this->parser->getExpressionParser()->parseAssignmentExpression(); + + $capture = false; + if ($stream->nextIf(/* Token::OPERATOR_TYPE */ 8, '=')) { + $values = $this->parser->getExpressionParser()->parseMultitargetExpression(); + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + if (\count($names) !== \count($values)) { + throw new SyntaxError('When using set, you must have the same number of variables and assignments.', $stream->getCurrent()->getLine(), $stream->getSourceContext()); + } + } else { + $capture = true; + + if (\count($names) > 1) { + throw new SyntaxError('When using set with a block, you cannot have a multi-target.', $stream->getCurrent()->getLine(), $stream->getSourceContext()); + } + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + $values = $this->parser->subparse([$this, 'decideBlockEnd'], true); + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + } + + return new SetNode($capture, $names, $values, $lineno, $this->getTag()); + } + + public function decideBlockEnd(Token $token): bool + { + return $token->test('endset'); + } + + public function getTag(): string + { + return 'set'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/TokenParserInterface.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/TokenParserInterface.php new file mode 100644 index 0000000..bb8db3e --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/TokenParserInterface.php @@ -0,0 +1,46 @@ + + */ +interface TokenParserInterface +{ + /** + * Sets the parser associated with this token parser. + */ + public function setParser(Parser $parser): void; + + /** + * Parses a token and returns a node. + * + * @return Node + * + * @throws SyntaxError + */ + public function parse(Token $token); + + /** + * Gets the tag name associated with this token parser. + * + * @return string + */ + public function getTag(); +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/UseTokenParser.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/UseTokenParser.php new file mode 100644 index 0000000..c0dba78 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/UseTokenParser.php @@ -0,0 +1,71 @@ +parser->getExpressionParser()->parseExpression(); + $stream = $this->parser->getStream(); + + if (!$template instanceof ConstantExpression) { + throw new SyntaxError('The template references in a "use" statement must be a string.', $stream->getCurrent()->getLine(), $stream->getSourceContext()); + } + + $targets = []; + if ($stream->nextIf('with')) { + do { + $name = $stream->expect(/* Token::NAME_TYPE */ 5)->getValue(); + + $alias = $name; + if ($stream->nextIf('as')) { + $alias = $stream->expect(/* Token::NAME_TYPE */ 5)->getValue(); + } + + $targets[$name] = new ConstantExpression($alias, -1); + + if (!$stream->nextIf(/* Token::PUNCTUATION_TYPE */ 9, ',')) { + break; + } + } while (true); + } + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + $this->parser->addTrait(new Node(['template' => $template, 'targets' => new Node($targets)])); + + return new Node(); + } + + public function getTag(): string + { + return 'use'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/WithTokenParser.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/WithTokenParser.php new file mode 100644 index 0000000..fd548b0 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenParser/WithTokenParser.php @@ -0,0 +1,54 @@ + + */ +final class WithTokenParser extends AbstractTokenParser +{ + public function parse(Token $token): Node + { + $stream = $this->parser->getStream(); + + $variables = null; + $only = false; + if (!$stream->test(/* Token::BLOCK_END_TYPE */ 3)) { + $variables = $this->parser->getExpressionParser()->parseExpression(); + $only = (bool) $stream->nextIf(/* Token::NAME_TYPE */ 5, 'only'); + } + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + $body = $this->parser->subparse([$this, 'decideWithEnd'], true); + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + return new WithNode($body, $variables, $only, $token->getLine(), $this->getTag()); + } + + public function decideWithEnd(Token $token): bool + { + return $token->test('endwith'); + } + + public function getTag(): string + { + return 'with'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenStream.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenStream.php new file mode 100644 index 0000000..1eac11a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TokenStream.php @@ -0,0 +1,132 @@ + + */ +final class TokenStream +{ + private $tokens; + private $current = 0; + private $source; + + public function __construct(array $tokens, Source $source = null) + { + $this->tokens = $tokens; + $this->source = $source ?: new Source('', ''); + } + + public function __toString() + { + return implode("\n", $this->tokens); + } + + public function injectTokens(array $tokens) + { + $this->tokens = array_merge(\array_slice($this->tokens, 0, $this->current), $tokens, \array_slice($this->tokens, $this->current)); + } + + /** + * Sets the pointer to the next token and returns the old one. + */ + public function next(): Token + { + if (!isset($this->tokens[++$this->current])) { + throw new SyntaxError('Unexpected end of template.', $this->tokens[$this->current - 1]->getLine(), $this->source); + } + + return $this->tokens[$this->current - 1]; + } + + /** + * Tests a token, sets the pointer to the next one and returns it or throws a syntax error. + * + * @return Token|null The next token if the condition is true, null otherwise + */ + public function nextIf($primary, $secondary = null) + { + if ($this->tokens[$this->current]->test($primary, $secondary)) { + return $this->next(); + } + } + + /** + * Tests a token and returns it or throws a syntax error. + */ + public function expect($type, $value = null, string $message = null): Token + { + $token = $this->tokens[$this->current]; + if (!$token->test($type, $value)) { + $line = $token->getLine(); + throw new SyntaxError(sprintf('%sUnexpected token "%s"%s ("%s" expected%s).', + $message ? $message.'. ' : '', + Token::typeToEnglish($token->getType()), + $token->getValue() ? sprintf(' of value "%s"', $token->getValue()) : '', + Token::typeToEnglish($type), $value ? sprintf(' with value "%s"', $value) : ''), + $line, + $this->source + ); + } + $this->next(); + + return $token; + } + + /** + * Looks at the next token. + */ + public function look(int $number = 1): Token + { + if (!isset($this->tokens[$this->current + $number])) { + throw new SyntaxError('Unexpected end of template.', $this->tokens[$this->current + $number - 1]->getLine(), $this->source); + } + + return $this->tokens[$this->current + $number]; + } + + /** + * Tests the current token. + */ + public function test($primary, $secondary = null): bool + { + return $this->tokens[$this->current]->test($primary, $secondary); + } + + /** + * Checks if end of stream was reached. + */ + public function isEOF(): bool + { + return /* Token::EOF_TYPE */ -1 === $this->tokens[$this->current]->getType(); + } + + public function getCurrent(): Token + { + return $this->tokens[$this->current]; + } + + /** + * Gets the source associated with this stream. + * + * @internal + */ + public function getSourceContext(): Source + { + return $this->source; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TwigFilter.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TwigFilter.php new file mode 100644 index 0000000..94e5f9b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TwigFilter.php @@ -0,0 +1,134 @@ + + * + * @see https://twig.symfony.com/doc/templates.html#filters + */ +final class TwigFilter +{ + private $name; + private $callable; + private $options; + private $arguments = []; + + /** + * @param callable|null $callable A callable implementing the filter. If null, you need to overwrite the "node_class" option to customize compilation. + */ + public function __construct(string $name, $callable = null, array $options = []) + { + $this->name = $name; + $this->callable = $callable; + $this->options = array_merge([ + 'needs_environment' => false, + 'needs_context' => false, + 'is_variadic' => false, + 'is_safe' => null, + 'is_safe_callback' => null, + 'pre_escape' => null, + 'preserves_safety' => null, + 'node_class' => FilterExpression::class, + 'deprecated' => false, + 'alternative' => null, + ], $options); + } + + public function getName(): string + { + return $this->name; + } + + /** + * Returns the callable to execute for this filter. + * + * @return callable|null + */ + public function getCallable() + { + return $this->callable; + } + + public function getNodeClass(): string + { + return $this->options['node_class']; + } + + public function setArguments(array $arguments): void + { + $this->arguments = $arguments; + } + + public function getArguments(): array + { + return $this->arguments; + } + + public function needsEnvironment(): bool + { + return $this->options['needs_environment']; + } + + public function needsContext(): bool + { + return $this->options['needs_context']; + } + + public function getSafe(Node $filterArgs): ?array + { + if (null !== $this->options['is_safe']) { + return $this->options['is_safe']; + } + + if (null !== $this->options['is_safe_callback']) { + return $this->options['is_safe_callback']($filterArgs); + } + + return null; + } + + public function getPreservesSafety(): ?array + { + return $this->options['preserves_safety']; + } + + public function getPreEscape(): ?string + { + return $this->options['pre_escape']; + } + + public function isVariadic(): bool + { + return $this->options['is_variadic']; + } + + public function isDeprecated(): bool + { + return (bool) $this->options['deprecated']; + } + + public function getDeprecatedVersion(): string + { + return \is_bool($this->options['deprecated']) ? '' : $this->options['deprecated']; + } + + public function getAlternative(): ?string + { + return $this->options['alternative']; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TwigFunction.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TwigFunction.php new file mode 100644 index 0000000..494d45b --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TwigFunction.php @@ -0,0 +1,122 @@ + + * + * @see https://twig.symfony.com/doc/templates.html#functions + */ +final class TwigFunction +{ + private $name; + private $callable; + private $options; + private $arguments = []; + + /** + * @param callable|null $callable A callable implementing the function. If null, you need to overwrite the "node_class" option to customize compilation. + */ + public function __construct(string $name, $callable = null, array $options = []) + { + $this->name = $name; + $this->callable = $callable; + $this->options = array_merge([ + 'needs_environment' => false, + 'needs_context' => false, + 'is_variadic' => false, + 'is_safe' => null, + 'is_safe_callback' => null, + 'node_class' => FunctionExpression::class, + 'deprecated' => false, + 'alternative' => null, + ], $options); + } + + public function getName(): string + { + return $this->name; + } + + /** + * Returns the callable to execute for this function. + * + * @return callable|null + */ + public function getCallable() + { + return $this->callable; + } + + public function getNodeClass(): string + { + return $this->options['node_class']; + } + + public function setArguments(array $arguments): void + { + $this->arguments = $arguments; + } + + public function getArguments(): array + { + return $this->arguments; + } + + public function needsEnvironment(): bool + { + return $this->options['needs_environment']; + } + + public function needsContext(): bool + { + return $this->options['needs_context']; + } + + public function getSafe(Node $functionArgs): ?array + { + if (null !== $this->options['is_safe']) { + return $this->options['is_safe']; + } + + if (null !== $this->options['is_safe_callback']) { + return $this->options['is_safe_callback']($functionArgs); + } + + return []; + } + + public function isVariadic(): bool + { + return (bool) $this->options['is_variadic']; + } + + public function isDeprecated(): bool + { + return (bool) $this->options['deprecated']; + } + + public function getDeprecatedVersion(): string + { + return \is_bool($this->options['deprecated']) ? '' : $this->options['deprecated']; + } + + public function getAlternative(): ?string + { + return $this->options['alternative']; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TwigTest.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TwigTest.php new file mode 100644 index 0000000..170bba4 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/TwigTest.php @@ -0,0 +1,94 @@ + + * + * @see https://twig.symfony.com/doc/templates.html#test-operator + */ +final class TwigTest +{ + private $name; + private $callable; + private $options; + private $arguments = []; + + /** + * @param callable|null $callable A callable implementing the test. If null, you need to overwrite the "node_class" option to customize compilation. + */ + public function __construct(string $name, $callable = null, array $options = []) + { + $this->name = $name; + $this->callable = $callable; + $this->options = array_merge([ + 'is_variadic' => false, + 'node_class' => TestExpression::class, + 'deprecated' => false, + 'alternative' => null, + ], $options); + } + + public function getName(): string + { + return $this->name; + } + + /** + * Returns the callable to execute for this test. + * + * @return callable|null + */ + public function getCallable() + { + return $this->callable; + } + + public function getNodeClass(): string + { + return $this->options['node_class']; + } + + public function setArguments(array $arguments): void + { + $this->arguments = $arguments; + } + + public function getArguments(): array + { + return $this->arguments; + } + + public function isVariadic(): bool + { + return (bool) $this->options['is_variadic']; + } + + public function isDeprecated(): bool + { + return (bool) $this->options['deprecated']; + } + + public function getDeprecatedVersion(): string + { + return \is_bool($this->options['deprecated']) ? '' : $this->options['deprecated']; + } + + public function getAlternative(): ?string + { + return $this->options['alternative']; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Util/DeprecationCollector.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Util/DeprecationCollector.php new file mode 100644 index 0000000..51345e0 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Util/DeprecationCollector.php @@ -0,0 +1,77 @@ + + */ +final class DeprecationCollector +{ + private $twig; + + public function __construct(Environment $twig) + { + $this->twig = $twig; + } + + /** + * Returns deprecations for templates contained in a directory. + * + * @param string $dir A directory where templates are stored + * @param string $ext Limit the loaded templates by extension + * + * @return array An array of deprecations + */ + public function collectDir(string $dir, string $ext = '.twig'): array + { + $iterator = new \RegexIterator( + new \RecursiveIteratorIterator( + new \RecursiveDirectoryIterator($dir), \RecursiveIteratorIterator::LEAVES_ONLY + ), '{'.preg_quote($ext).'$}' + ); + + return $this->collect(new TemplateDirIterator($iterator)); + } + + /** + * Returns deprecations for passed templates. + * + * @param \Traversable $iterator An iterator of templates (where keys are template names and values the contents of the template) + * + * @return array An array of deprecations + */ + public function collect(\Traversable $iterator): array + { + $deprecations = []; + set_error_handler(function ($type, $msg) use (&$deprecations) { + if (E_USER_DEPRECATED === $type) { + $deprecations[] = $msg; + } + }); + + foreach ($iterator as $name => $contents) { + try { + $this->twig->parse($this->twig->tokenize(new Source($contents, $name))); + } catch (SyntaxError $e) { + // ignore templates containing syntax errors + } + } + + restore_error_handler(); + + return $deprecations; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Util/TemplateDirIterator.php b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Util/TemplateDirIterator.php new file mode 100644 index 0000000..c7339fd --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/twig/twig/src/Util/TemplateDirIterator.php @@ -0,0 +1,28 @@ + + */ +class TemplateDirIterator extends \IteratorIterator +{ + public function current() + { + return file_get_contents(parent::current()); + } + + public function key() + { + return (string) parent::key(); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/LICENSE b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/LICENSE new file mode 100644 index 0000000..922c552 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/LICENSE @@ -0,0 +1,30 @@ +BSD 3-Clause License + +Copyright (c) 2014, Graham Campbell. +Copyright (c) 2013, Vance Lucas. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/composer.json b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/composer.json new file mode 100644 index 0000000..a1c45b4 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/composer.json @@ -0,0 +1,52 @@ +{ + "name": "vlucas/phpdotenv", + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": ["env", "dotenv", "environment"], + "license": "BSD-3-Clause", + "authors": [ + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "homepage": "https://gjcampbell.co.uk/" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://vancelucas.com/" + } + ], + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0", + "phpoption/phpoption": "^1.7.2", + "symfony/polyfill-ctype": "^1.9" + }, + "require-dev": { + "ext-filter": "*", + "ext-pcre": "*", + "bamarni/composer-bin-plugin": "^1.3", + "phpunit/phpunit": "^4.8.35 || ^5.0 || ^6.0 || ^7.0" + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "Dotenv\\Tests\\": "tests/Dotenv/" + } + }, + "suggest": { + "ext-filter": "Required to use the boolean validator.", + "ext-pcre": "Required to use most of the library." + }, + "config": { + "preferred-install": "dist", + "platform-check": false + }, + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/phpstan.src.neon.dist b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/phpstan.src.neon.dist new file mode 100644 index 0000000..0cd0bfb --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/phpstan.src.neon.dist @@ -0,0 +1,11 @@ +parameters: + level: max + ignoreErrors: + - '#Variable \$defaults might not be defined.#' + - '/^Parameter \#1 \$readers of class Dotenv\\Repository\\[a-zA-Z]*Repository[a-zA-Z]* constructor expects/' + - '/^Parameter \#2 \$writers of class Dotenv\\Repository\\[a-zA-Z]*Repository[a-zA-Z]* constructor expects/' + - '#Method Dotenv\\Repository\\AbstractRepository::offset[a-zA-Z\(\)\$ ]* typehint specified.#' + - '#Unable to resolve the template type S in call to method PhpOption\\Option::flatMap\(\)#' + - '#Method Dotenv\\Loader\\Parser::processChar\(\) should return Dotenv\\Result\\Result, string> but returns Dotenv\\Result\\Result, mixed>.#' + - '#Parameter \#1 \$callable of method PhpOption\\Option::map\(\) expects callable\(Dotenv\\Loader\\Value\|null\): mixed, Closure\(Dotenv\\Loader\\Value\): mixed given.#' + - '#Parameter \#1 \$callable of method PhpOption\\Option::[a-z]+\(\) expects callable\(array\|null\): [a-z]+, Closure\(array\): mixed given.#' diff --git a/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Dotenv.php b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Dotenv.php new file mode 100644 index 0000000..01935d5 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Dotenv.php @@ -0,0 +1,157 @@ +loader = $loader; + $this->repository = $repository; + $this->store = is_array($store) ? new FileStore($store, true) : $store; + } + + /** + * Create a new dotenv instance. + * + * @param \Dotenv\Repository\RepositoryInterface $repository + * @param string|string[] $paths + * @param string|string[]|null $names + * @param bool $shortCircuit + * + * @return \Dotenv\Dotenv + */ + public static function create(RepositoryInterface $repository, $paths, $names = null, $shortCircuit = true) + { + $builder = StoreBuilder::create()->withPaths($paths)->withNames($names); + + if ($shortCircuit) { + $builder = $builder->shortCircuit(); + } + + return new self(new Loader(), $repository, $builder->make()); + } + + /** + * Create a new mutable dotenv instance with default repository. + * + * @param string|string[] $paths + * @param string|string[]|null $names + * @param bool $shortCircuit + * + * @return \Dotenv\Dotenv + */ + public static function createMutable($paths, $names = null, $shortCircuit = true) + { + $repository = RepositoryBuilder::create()->make(); + + return self::create($repository, $paths, $names, $shortCircuit); + } + + /** + * Create a new immutable dotenv instance with default repository. + * + * @param string|string[] $paths + * @param string|string[]|null $names + * @param bool $shortCircuit + * + * @return \Dotenv\Dotenv + */ + public static function createImmutable($paths, $names = null, $shortCircuit = true) + { + $repository = RepositoryBuilder::create()->immutable()->make(); + + return self::create($repository, $paths, $names, $shortCircuit); + } + + /** + * Read and load environment file(s). + * + * @throws \Dotenv\Exception\InvalidPathException|\Dotenv\Exception\InvalidFileException + * + * @return array + */ + public function load() + { + return $this->loader->load($this->repository, $this->store->read()); + } + + /** + * Read and load environment file(s), silently failing if no files can be read. + * + * @throws \Dotenv\Exception\InvalidFileException + * + * @return array + */ + public function safeLoad() + { + try { + return $this->load(); + } catch (InvalidPathException $e) { + // suppressing exception + return []; + } + } + + /** + * Required ensures that the specified variables exist, and returns a new validator object. + * + * @param string|string[] $variables + * + * @return \Dotenv\Validator + */ + public function required($variables) + { + return new Validator($this->repository, (array) $variables); + } + + /** + * Returns a new validator object that won't check if the specified variables exist. + * + * @param string|string[] $variables + * + * @return \Dotenv\Validator + */ + public function ifPresent($variables) + { + return new Validator($this->repository, (array) $variables, false); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Exception/ExceptionInterface.php b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Exception/ExceptionInterface.php new file mode 100644 index 0000000..3ff0cef --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Exception/ExceptionInterface.php @@ -0,0 +1,8 @@ + 1; + } + + /** + * Get all pairs of adjacent characters within the line. + * + * @param string $line + * + * @return array{array{string,string|null}} + */ + private static function getCharPairs($line) + { + $chars = str_split($line); + + /** @var array{array{string,string|null}} */ + return array_map(null, $chars, array_slice($chars, 1)); + } + + /** + * Determine if the line in the file is a comment or whitespace. + * + * @param string $line + * + * @return bool + */ + private static function isCommentOrWhitespace($line) + { + if (trim($line) === '') { + return true; + } + + $line = ltrim($line); + + return isset($line[0]) && $line[0] === '#'; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Loader/Loader.php b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Loader/Loader.php new file mode 100644 index 0000000..faff0c1 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Loader/Loader.php @@ -0,0 +1,118 @@ +whitelist = $whitelist; + } + + /** + * Load the given environment file content into the repository. + * + * @param \Dotenv\Repository\RepositoryInterface $repository + * @param string $content + * + * @throws \Dotenv\Exception\InvalidFileException + * + * @return array + */ + public function load(RepositoryInterface $repository, $content) + { + return $this->processEntries( + $repository, + Lines::process(Regex::split("/(\r\n|\n|\r)/", $content)->getSuccess()) + ); + } + + /** + * Process the environment variable entries. + * + * We'll fill out any nested variables, and acually set the variable using + * the underlying environment variables instance. + * + * @param \Dotenv\Repository\RepositoryInterface $repository + * @param string[] $entries + * + * @throws \Dotenv\Exception\InvalidFileException + * + * @return array + */ + private function processEntries(RepositoryInterface $repository, array $entries) + { + $vars = []; + + foreach ($entries as $entry) { + list($name, $value) = Parser::parse($entry); + if ($this->whitelist === null || in_array($name, $this->whitelist, true)) { + $vars[$name] = self::resolveNestedVariables($repository, $value); + $repository->set($name, $vars[$name]); + } + } + + return $vars; + } + + /** + * Resolve the nested variables. + * + * Look for ${varname} patterns in the variable value and replace with an + * existing environment variable. + * + * @param \Dotenv\Repository\RepositoryInterface $repository + * @param \Dotenv\Loader\Value|null $value + * + * @return string|null + */ + private static function resolveNestedVariables(RepositoryInterface $repository, Value $value = null) + { + return Option::fromValue($value) + ->map(function (Value $v) use ($repository) { + return array_reduce($v->getVars(), function ($s, $i) use ($repository) { + return substr($s, 0, $i).self::resolveNestedVariable($repository, substr($s, $i)); + }, $v->getChars()); + }) + ->getOrElse(null); + } + + /** + * Resolve a single nested variable. + * + * @param \Dotenv\Repository\RepositoryInterface $repository + * @param string $str + * + * @return string + */ + private static function resolveNestedVariable(RepositoryInterface $repository, $str) + { + return Regex::replaceCallback( + '/\A\${([a-zA-Z0-9_.]+)}/', + function (array $matches) use ($repository) { + return Option::fromValue($repository->get($matches[1])) + ->getOrElse($matches[0]); + }, + $str, + 1 + )->success()->getOrElse($str); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Loader/LoaderInterface.php b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Loader/LoaderInterface.php new file mode 100644 index 0000000..740e1c5 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Loader/LoaderInterface.php @@ -0,0 +1,20 @@ + + */ + public function load(RepositoryInterface $repository, $content); +} diff --git a/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Loader/Parser.php b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Loader/Parser.php new file mode 100644 index 0000000..bbc25b4 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Loader/Parser.php @@ -0,0 +1,217 @@ +mapError(function ($err) use ($value) { + throw new InvalidFileException( + self::getErrorMessage($err, $value) + ); + })->mapSuccess(function ($val) use ($data) { + return [$data[0]->append($val[0], $val[1]), $val[2]]; + })->getSuccess(); + }, [Value::blank(), self::INITIAL_STATE])[0]; + } + + /** + * Process the given character. + * + * @param int $state + * @param string $char + * + * @return \Dotenv\Result\Result + */ + private static function processChar($state, $char) + { + switch ($state) { + case self::INITIAL_STATE: + if ($char === '\'') { + return Success::create(['', false, self::SINGLE_QUOTED_STATE]); + } elseif ($char === '"') { + return Success::create(['', false, self::DOUBLE_QUOTED_STATE]); + } elseif ($char === '#') { + return Success::create(['', false, self::COMMENT_STATE]); + } elseif ($char === '$') { + return Success::create([$char, true, self::UNQUOTED_STATE]); + } else { + return Success::create([$char, false, self::UNQUOTED_STATE]); + } + case self::UNQUOTED_STATE: + if ($char === '#') { + return Success::create(['', false, self::COMMENT_STATE]); + } elseif (ctype_space($char)) { + return Success::create(['', false, self::WHITESPACE_STATE]); + } elseif ($char === '$') { + return Success::create([$char, true, self::UNQUOTED_STATE]); + } else { + return Success::create([$char, false, self::UNQUOTED_STATE]); + } + case self::SINGLE_QUOTED_STATE: + if ($char === '\'') { + return Success::create(['', false, self::WHITESPACE_STATE]); + } else { + return Success::create([$char, false, self::SINGLE_QUOTED_STATE]); + } + case self::DOUBLE_QUOTED_STATE: + if ($char === '"') { + return Success::create(['', false, self::WHITESPACE_STATE]); + } elseif ($char === '\\') { + return Success::create(['', false, self::ESCAPE_SEQUENCE_STATE]); + } elseif ($char === '$') { + return Success::create([$char, true, self::DOUBLE_QUOTED_STATE]); + } else { + return Success::create([$char, false, self::DOUBLE_QUOTED_STATE]); + } + case self::ESCAPE_SEQUENCE_STATE: + if ($char === '"' || $char === '\\') { + return Success::create([$char, false, self::DOUBLE_QUOTED_STATE]); + } elseif ($char === '$') { + return Success::create([$char, false, self::DOUBLE_QUOTED_STATE]); + } elseif (in_array($char, ['f', 'n', 'r', 't', 'v'], true)) { + return Success::create([stripcslashes('\\'.$char), false, self::DOUBLE_QUOTED_STATE]); + } else { + return Error::create('an unexpected escape sequence'); + } + case self::WHITESPACE_STATE: + if ($char === '#') { + return Success::create(['', false, self::COMMENT_STATE]); + } elseif (!ctype_space($char)) { + return Error::create('unexpected whitespace'); + } else { + return Success::create(['', false, self::WHITESPACE_STATE]); + } + case self::COMMENT_STATE: + return Success::create(['', false, self::COMMENT_STATE]); + default: + throw new RuntimeException('Parser entered invalid state.'); + } + } + + /** + * Generate a friendly error message. + * + * @param string $cause + * @param string $subject + * + * @return string + */ + private static function getErrorMessage($cause, $subject) + { + return sprintf( + 'Failed to parse dotenv file due to %s. Failed at [%s].', + $cause, + strtok($subject, "\n") + ); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Loader/Value.php b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Loader/Value.php new file mode 100644 index 0000000..3722087 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Loader/Value.php @@ -0,0 +1,83 @@ +chars = $chars; + $this->vars = $vars; + } + + /** + * Create an empty value instance. + * + * @return \Dotenv\Loader\Value + */ + public static function blank() + { + return new self('', []); + } + + /** + * Create a new value instance, appending the character. + * + * @param string $char + * @param bool $var + * + * @return \Dotenv\Loader\Value + */ + public function append($char, $var) + { + return new self( + $this->chars.$char, + $var ? array_merge($this->vars, [strlen($this->chars)]) : $this->vars + ); + } + + /** + * Get the string representation of the parsed value. + * + * @return string + */ + public function getChars() + { + return $this->chars; + } + + /** + * Get the locations of the variables in the value. + * + * @return int[] + */ + public function getVars() + { + $vars = $this->vars; + rsort($vars); + + return $vars; + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Regex/Regex.php b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Regex/Regex.php new file mode 100644 index 0000000..c26c9fa --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Regex/Regex.php @@ -0,0 +1,122 @@ + + */ + public static function match($pattern, $subject) + { + return self::pregAndWrap(function ($subject) use ($pattern) { + return (int) @preg_match($pattern, $subject); + }, $subject); + } + + /** + * Perform a preg replace, wrapping up the result. + * + * @param string $pattern + * @param string $replacement + * @param string $subject + * @param int|null $limit + * + * @return \Dotenv\Result\Result + */ + public static function replace($pattern, $replacement, $subject, $limit = null) + { + return self::pregAndWrap(function ($subject) use ($pattern, $replacement, $limit) { + return (string) @preg_replace($pattern, $replacement, $subject, $limit === null ? -1 : $limit); + }, $subject); + } + + /** + * Perform a preg replace callback, wrapping up the result. + * + * @param string $pattern + * @param callable $callback + * @param string $subject + * @param int|null $limit + * + * @return \Dotenv\Result\Result + */ + public static function replaceCallback($pattern, callable $callback, $subject, $limit = null) + { + return self::pregAndWrap(function ($subject) use ($pattern, $callback, $limit) { + return (string) @preg_replace_callback($pattern, $callback, $subject, $limit === null ? -1 : $limit); + }, $subject); + } + + /** + * Perform a preg split, wrapping up the result. + * + * @param string $pattern + * @param string $subject + * + * @return \Dotenv\Result\Result + */ + public static function split($pattern, $subject) + { + return self::pregAndWrap(function ($subject) use ($pattern) { + return (array) @preg_split($pattern, $subject); + }, $subject); + } + + /** + * Perform a preg operation, wrapping up the result. + * + * @template V + * + * @param callable(string):V $operation + * @param string $subject + * + * @return \Dotenv\Result\Result + */ + private static function pregAndWrap(callable $operation, $subject) + { + $result = $operation($subject); + + if (($e = preg_last_error()) !== PREG_NO_ERROR) { + return Error::create(self::lookupError($e)); + } + + return Success::create($result); + } + + /** + * Lookup the preg error code. + * + * @param int $code + * + * @return string + */ + private static function lookupError($code) + { + return Option::fromValue(get_defined_constants(true)) + ->filter(function (array $consts) { + return isset($consts['pcre']) && defined('ARRAY_FILTER_USE_KEY'); + }) + ->map(function (array $consts) { + return array_filter($consts['pcre'], function ($msg) { + return substr($msg, -6) === '_ERROR'; + }, ARRAY_FILTER_USE_KEY); + }) + ->flatMap(function (array $errors) use ($code) { + return Option::fromValue( + array_search($code, $errors, true) + ); + }) + ->getOrElse('PREG_ERROR'); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/AbstractRepository.php b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/AbstractRepository.php new file mode 100644 index 0000000..247f950 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/AbstractRepository.php @@ -0,0 +1,175 @@ +immutable = $immutable; + $this->loaded = new ArrayAdapter(); + } + + /** + * Get an environment variable. + * + * @param string $name + * + * @throws \InvalidArgumentException + * + * @return string|null + */ + public function get($name) + { + if (!is_string($name)) { + throw new InvalidArgumentException('Expected name to be a string.'); + } + + return $this->getInternal($name); + } + + /** + * Get an environment variable. + * + * @param string $name + * + * @return string|null + */ + abstract protected function getInternal($name); + + /** + * Set an environment variable. + * + * @param string $name + * @param string|null $value + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function set($name, $value = null) + { + if (!is_string($name)) { + throw new InvalidArgumentException('Expected name to be a string.'); + } + + // Don't overwrite existing environment variables if we're immutable + // Ruby's dotenv does this with `ENV[key] ||= value`. + if ($this->immutable && $this->get($name) !== null && $this->loaded->get($name)->isEmpty()) { + return; + } + + $this->setInternal($name, $value); + $this->loaded->set($name, ''); + } + + /** + * Set an environment variable. + * + * @param string $name + * @param string|null $value + * + * @return void + */ + abstract protected function setInternal($name, $value = null); + + /** + * Clear an environment variable. + * + * @param string $name + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function clear($name) + { + if (!is_string($name)) { + throw new InvalidArgumentException('Expected name to be a string.'); + } + + // Don't clear anything if we're immutable. + if ($this->immutable) { + return; + } + + $this->clearInternal($name); + } + + /** + * Clear an environment variable. + * + * @param string $name + * + * @return void + */ + abstract protected function clearInternal($name); + + /** + * Tells whether environment variable has been defined. + * + * @param string $name + * + * @return bool + */ + public function has($name) + { + return is_string($name) && $this->get($name) !== null; + } + + /** + * {@inheritdoc} + */ + public function offsetExists($offset) + { + return $this->has($offset); + } + + /** + * {@inheritdoc} + */ + public function offsetGet($offset) + { + return $this->get($offset); + } + + /** + * {@inheritdoc} + */ + public function offsetSet($offset, $value) + { + $this->set($offset, $value); + } + + /** + * {@inheritdoc} + */ + public function offsetUnset($offset) + { + $this->clear($offset); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/Adapter/ApacheAdapter.php b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/Adapter/ApacheAdapter.php new file mode 100644 index 0000000..73ce87d --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/Adapter/ApacheAdapter.php @@ -0,0 +1,64 @@ + + */ + public function get($name) + { + return None::create(); + } + + /** + * Set an environment variable. + * + * Only if an existing apache variable exists do we overwrite it. + * + * @param string $name + * @param string|null $value + * + * @return void + */ + public function set($name, $value = null) + { + if (apache_getenv($name) !== false) { + apache_setenv($name, (string) $value); + } + } + + /** + * Clear an environment variable. + * + * @param string $name + * + * @return void + */ + public function clear($name) + { + // Nothing to do here. + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/Adapter/ArrayAdapter.php b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/Adapter/ArrayAdapter.php new file mode 100644 index 0000000..dc234aa --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/Adapter/ArrayAdapter.php @@ -0,0 +1,67 @@ + + */ + private $variables = []; + + /** + * Determines if the adapter is supported. + * + * @return bool + */ + public function isSupported() + { + return true; + } + + /** + * Get an environment variable, if it exists. + * + * @param string $name + * + * @return \PhpOption\Option + */ + public function get($name) + { + if (array_key_exists($name, $this->variables)) { + return Some::create($this->variables[$name]); + } + + return None::create(); + } + + /** + * Set an environment variable. + * + * @param string $name + * @param string|null $value + * + * @return void + */ + public function set($name, $value = null) + { + $this->variables[$name] = $value; + } + + /** + * Clear an environment variable. + * + * @param string $name + * + * @return void + */ + public function clear($name) + { + unset($this->variables[$name]); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/Adapter/AvailabilityInterface.php b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/Adapter/AvailabilityInterface.php new file mode 100644 index 0000000..b035372 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/Adapter/AvailabilityInterface.php @@ -0,0 +1,13 @@ + + */ + public function get($name) + { + if (array_key_exists($name, $_ENV)) { + return Some::create($_ENV[$name]); + } + + return None::create(); + } + + /** + * Set an environment variable. + * + * @param string $name + * @param string|null $value + * + * @return void + */ + public function set($name, $value = null) + { + $_ENV[$name] = $value; + } + + /** + * Clear an environment variable. + * + * @param string $name + * + * @return void + */ + public function clear($name) + { + unset($_ENV[$name]); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/Adapter/PutenvAdapter.php b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/Adapter/PutenvAdapter.php new file mode 100644 index 0000000..766afd3 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/Adapter/PutenvAdapter.php @@ -0,0 +1,56 @@ + + */ + public function get($name) + { + /** @var \PhpOption\Option */ + return Option::fromValue(getenv($name), false); + } + + /** + * Set an environment variable. + * + * @param string $name + * @param string|null $value + * + * @return void + */ + public function set($name, $value = null) + { + putenv("$name=$value"); + } + + /** + * Clear an environment variable. + * + * @param string $name + * + * @return void + */ + public function clear($name) + { + putenv($name); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReaderInterface.php b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReaderInterface.php new file mode 100644 index 0000000..90a1fab --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReaderInterface.php @@ -0,0 +1,15 @@ + + */ + public function get($name); +} diff --git a/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/Adapter/ServerConstAdapter.php b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/Adapter/ServerConstAdapter.php new file mode 100644 index 0000000..529df96 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/Adapter/ServerConstAdapter.php @@ -0,0 +1,60 @@ + + */ + public function get($name) + { + if (array_key_exists($name, $_SERVER)) { + return Some::create($_SERVER[$name]); + } + + return None::create(); + } + + /** + * Set an environment variable. + * + * @param string $name + * @param string|null $value + * + * @return void + */ + public function set($name, $value = null) + { + $_SERVER[$name] = $value; + } + + /** + * Clear an environment variable. + * + * @param string $name + * + * @return void + */ + public function clear($name) + { + unset($_SERVER[$name]); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/Adapter/WriterInterface.php b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/Adapter/WriterInterface.php new file mode 100644 index 0000000..6670b72 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/Adapter/WriterInterface.php @@ -0,0 +1,25 @@ +readers = $readers; + $this->writers = $writers; + parent::__construct($immutable); + } + + /** + * Get an environment variable. + * + * We do this by querying our readers sequentially. + * + * @param string $name + * + * @return string|null + */ + protected function getInternal($name) + { + foreach ($this->readers as $reader) { + $result = $reader->get($name); + if ($result->isDefined()) { + return $result->get(); + } + } + + return null; + } + + /** + * Set an environment variable. + * + * @param string $name + * @param string|null $value + * + * @return void + */ + protected function setInternal($name, $value = null) + { + foreach ($this->writers as $writers) { + $writers->set($name, $value); + } + } + + /** + * Clear an environment variable. + * + * @param string $name + * + * @return void + */ + protected function clearInternal($name) + { + foreach ($this->writers as $writers) { + $writers->clear($name); + } + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/RepositoryBuilder.php b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/RepositoryBuilder.php new file mode 100644 index 0000000..66c1105 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/RepositoryBuilder.php @@ -0,0 +1,144 @@ +readers = $readers; + $this->writers = $writers; + $this->immutable = $immutable; + } + + /** + * Create a new repository builder instance. + * + * @return \Dotenv\Repository\RepositoryBuilder + */ + public static function create() + { + return new self(); + } + + /** + * Creates a repository builder with the given readers. + * + * @param \Dotenv\Repository\Adapter\ReaderInterface[]|null $readers + * + * @return \Dotenv\Repository\RepositoryBuilder + */ + public function withReaders(array $readers = null) + { + $readers = $readers === null ? null : self::filterByAvailability($readers); + + return new self($readers, $this->writers, $this->immutable); + } + + /** + * Creates a repository builder with the given writers. + * + * @param \Dotenv\Repository\Adapter\WriterInterface[]|null $writers + * + * @return \Dotenv\Repository\RepositoryBuilder + */ + public function withWriters(array $writers = null) + { + $writers = $writers === null ? null : self::filterByAvailability($writers); + + return new self($this->readers, $writers, $this->immutable); + } + + /** + * Creates a repository builder with mutability enabled. + * + * @return \Dotenv\Repository\RepositoryBuilder + */ + public function immutable() + { + return new self($this->readers, $this->writers, true); + } + + /** + * Creates a new repository instance. + * + * @return \Dotenv\Repository\RepositoryInterface + */ + public function make() + { + if ($this->readers === null || $this->writers === null) { + $defaults = self::defaultAdapters(); + } + + return new AdapterRepository( + $this->readers === null ? $defaults : $this->readers, + $this->writers === null ? $defaults : $this->writers, + $this->immutable + ); + } + + /** + * Return the array of default adapters. + * + * @return \Dotenv\Repository\Adapter\AvailabilityInterface[] + */ + private static function defaultAdapters() + { + return self::filterByAvailability([ + new ApacheAdapter(), + new EnvConstAdapter(), + new ServerConstAdapter(), + new PutenvAdapter(), + ]); + } + + /** + * Filter an array of adapters to only those that are supported. + * + * @param \Dotenv\Repository\Adapter\AvailabilityInterface[] $adapters + * + * @return \Dotenv\Repository\Adapter\AvailabilityInterface[] + */ + private static function filterByAvailability(array $adapters) + { + return array_filter($adapters, function (AvailabilityInterface $adapter) { + return $adapter->isSupported(); + }); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/RepositoryInterface.php b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/RepositoryInterface.php new file mode 100644 index 0000000..db66416 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Repository/RepositoryInterface.php @@ -0,0 +1,54 @@ + + */ +interface RepositoryInterface extends ArrayAccess +{ + /** + * Tells whether environment variable has been defined. + * + * @param string $name + * + * @return bool + */ + public function has($name); + + /** + * Get an environment variable. + * + * @param string $name + * + * @throws \InvalidArgumentException + * + * @return string|null + */ + public function get($name); + + /** + * Set an environment variable. + * + * @param string $name + * @param string|null $value + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function set($name, $value = null); + + /** + * Clear an environment variable. + * + * @param string $name + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function clear($name); +} diff --git a/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Result/Error.php b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Result/Error.php new file mode 100644 index 0000000..d0be21d --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Result/Error.php @@ -0,0 +1,93 @@ + + */ +class Error extends Result +{ + /** + * @var E + */ + private $value; + + /** + * Internal constructor for an error value. + * + * @param E $value + * + * @return void + */ + private function __construct($value) + { + $this->value = $value; + } + + /** + * Create a new error value. + * + * @template F + * + * @param F $value + * + * @return \Dotenv\Result\Result + */ + public static function create($value) + { + return new self($value); + } + + /** + * Get the success option value. + * + * @return \PhpOption\Option + */ + public function success() + { + return None::create(); + } + + /** + * Map over the success value. + * + * @template S + * + * @param callable(T):S $f + * + * @return \Dotenv\Result\Result + */ + public function mapSuccess(callable $f) + { + return self::create($this->value); + } + + /** + * Get the error option value. + * + * @return \PhpOption\Option + */ + public function error() + { + return Some::create($this->value); + } + + /** + * Map over the error value. + * + * @template F + * + * @param callable(E):F $f + * + * @return \Dotenv\Result\Result + */ + public function mapError(callable $f) + { + return self::create($f($this->value)); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Result/Result.php b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Result/Result.php new file mode 100644 index 0000000..0a3656a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Result/Result.php @@ -0,0 +1,70 @@ + + */ + abstract public function success(); + + /** + * Get the success value, if possible. + * + * @throws \RuntimeException + * + * @return T + */ + public function getSuccess() + { + return $this->success()->get(); + } + + /** + * Map over the success value. + * + * @template S + * + * @param callable(T):S $f + * + * @return \Dotenv\Result\Result + */ + abstract public function mapSuccess(callable $f); + + /** + * Get the error option value. + * + * @return \PhpOption\Option + */ + abstract public function error(); + + /** + * Get the error value, if possible. + * + * @throws \RuntimeException + * + * @return E + */ + public function getError() + { + return $this->error()->get(); + } + + /** + * Map over the error value. + * + * @template F + * + * @param callable(E):F $f + * + * @return \Dotenv\Result\Result + */ + abstract public function mapError(callable $f); +} diff --git a/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Result/Success.php b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Result/Success.php new file mode 100644 index 0000000..32ebd9a --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Result/Success.php @@ -0,0 +1,93 @@ + + */ +class Success extends Result +{ + /** + * @var T + */ + private $value; + + /** + * Internal constructor for a success value. + * + * @param T $value + * + * @return void + */ + private function __construct($value) + { + $this->value = $value; + } + + /** + * Create a new error value. + * + * @template S + * + * @param S $value + * + * @return \Dotenv\Result\Result + */ + public static function create($value) + { + return new self($value); + } + + /** + * Get the success option value. + * + * @return \PhpOption\Option + */ + public function success() + { + return Some::create($this->value); + } + + /** + * Map over the success value. + * + * @template S + * + * @param callable(T):S $f + * + * @return \Dotenv\Result\Result + */ + public function mapSuccess(callable $f) + { + return self::create($f($this->value)); + } + + /** + * Get the error option value. + * + * @return \PhpOption\Option + */ + public function error() + { + return None::create(); + } + + /** + * Map over the error value. + * + * @template F + * + * @param callable(E):F $f + * + * @return \Dotenv\Result\Result + */ + public function mapError(callable $f) + { + return self::create($this->value); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Store/File/Paths.php b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Store/File/Paths.php new file mode 100644 index 0000000..9896063 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Store/File/Paths.php @@ -0,0 +1,27 @@ + + */ + public static function read(array $filePaths, $shortCircuit = true) + { + $output = []; + + foreach ($filePaths as $filePath) { + $content = self::readFromFile($filePath); + if ($content->isDefined()) { + $output[$filePath] = $content->get(); + if ($shortCircuit) { + break; + } + } + } + + return $output; + } + + /** + * Read the given file. + * + * @param string $filePath + * + * @return \PhpOption\Option + */ + private static function readFromFile($filePath) + { + $content = @file_get_contents($filePath); + + /** @var \PhpOption\Option */ + return Option::fromValue($content, false); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Store/FileStore.php b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Store/FileStore.php new file mode 100644 index 0000000..0e4261c --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Store/FileStore.php @@ -0,0 +1,61 @@ +filePaths = $filePaths; + $this->shortCircuit = $shortCircuit; + } + + /** + * Read the content of the environment file(s). + * + * @throws \Dotenv\Exception\InvalidPathException + * + * @return string + */ + public function read() + { + if ($this->filePaths === []) { + throw new InvalidPathException('At least one environment file path must be provided.'); + } + + $contents = Reader::read($this->filePaths, $this->shortCircuit); + + if ($contents) { + return implode("\n", $contents); + } + + throw new InvalidPathException( + sprintf('Unable to read any of the environment file(s) at [%s].', implode(', ', $this->filePaths)) + ); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Store/StoreBuilder.php b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Store/StoreBuilder.php new file mode 100644 index 0000000..833f8b0 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Store/StoreBuilder.php @@ -0,0 +1,102 @@ +paths = $paths; + $this->names = $names; + $this->shortCircuit = $shortCircuit; + } + + /** + * Create a new store builder instance. + * + * @return \Dotenv\Store\StoreBuilder + */ + public static function create() + { + return new self(); + } + + /** + * Creates a store builder with the given paths. + * + * @param string|string[] $paths + * + * @return \Dotenv\Store\StoreBuilder + */ + public function withPaths($paths) + { + return new self((array) $paths, $this->names, $this->shortCircuit); + } + + /** + * Creates a store builder with the given names. + * + * @param string|string[]|null $names + * + * @return \Dotenv\Store\StoreBuilder + */ + public function withNames($names = null) + { + return new self($this->paths, $names === null ? null : (array) $names, $this->shortCircuit); + } + + /** + * Creates a store builder with short circuit mode enabled. + * + * @return \Dotenv\Store\StoreBuilder + */ + public function shortCircuit() + { + return new self($this->paths, $this->names, true); + } + + /** + * Creates a new store instance. + * + * @return \Dotenv\Store\StoreInterface + */ + public function make() + { + return new FileStore( + Paths::filePaths($this->paths, $this->names === null ? ['.env'] : $this->names), + $this->shortCircuit + ); + } +} diff --git a/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Store/StoreInterface.php b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Store/StoreInterface.php new file mode 100644 index 0000000..9113451 --- /dev/null +++ b/soc/2020/daily_report/archive/app/vendor/vlucas/phpdotenv/src/Store/StoreInterface.php @@ -0,0 +1,15 @@ +repository = $repository; + $this->variables = $variables; + + if ($required) { + $this->assertCallback( + function ($value) { + return $value !== null; + }, + 'is missing' + ); + } + } + + /** + * Assert that each variable is not empty. + * + * @throws \Dotenv\Exception\ValidationException + * + * @return \Dotenv\Validator + */ + public function notEmpty() + { + return $this->assertCallback( + function ($value) { + if ($value === null) { + return true; + } + + return strlen(trim($value)) > 0; + }, + 'is empty' + ); + } + + /** + * Assert that each specified variable is an integer. + * + * @throws \Dotenv\Exception\ValidationException + * + * @return \Dotenv\Validator + */ + public function isInteger() + { + return $this->assertCallback( + function ($value) { + if ($value === null) { + return true; + } + + return ctype_digit($value); + }, + 'is not an integer' + ); + } + + /** + * Assert that each specified variable is a boolean. + * + * @throws \Dotenv\Exception\ValidationException + * + * @return \Dotenv\Validator + */ + public function isBoolean() + { + return $this->assertCallback( + function ($value) { + if ($value === null) { + return true; + } + + if ($value === '') { + return false; + } + + return filter_var($value, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE) !== null; + }, + 'is not a boolean' + ); + } + + /** + * Assert that each variable is amongst the given choices. + * + * @param string[] $choices + * + * @throws \Dotenv\Exception\ValidationException + * + * @return \Dotenv\Validator + */ + public function allowedValues(array $choices) + { + return $this->assertCallback( + function ($value) use ($choices) { + if ($value === null) { + return true; + } + + return in_array($value, $choices, true); + }, + sprintf('is not one of [%s]', implode(', ', $choices)) + ); + } + + /** + * Assert that each variable matches the given regular expression. + * + * @param string $regex + * + * @throws \Dotenv\Exception\ValidationException + * + * @return \Dotenv\Validator + */ + public function allowedRegexValues($regex) + { + return $this->assertCallback( + function ($value) use ($regex) { + if ($value === null) { + return true; + } + + return Regex::match($regex, $value)->success()->getOrElse(0) === 1; + }, + sprintf('does not match "%s"', $regex) + ); + } + + /** + * Assert that the callback returns true for each variable. + * + * @param callable $callback + * @param string $message + * + * @throws \Dotenv\Exception\ValidationException + * + * @return \Dotenv\Validator + */ + protected function assertCallback(callable $callback, $message = 'failed callback assertion') + { + $failing = []; + + foreach ($this->variables as $variable) { + if ($callback($this->repository->get($variable)) === false) { + $failing[] = sprintf('%s %s', $variable, $message); + } + } + + if (count($failing) > 0) { + throw new ValidationException(sprintf( + 'One or more environment variables failed assertions: %s.', + implode(', ', $failing) + )); + } + + return $this; + } +} diff --git a/soc/2020/daily_report/archive/app/views/components/file.twig b/soc/2020/daily_report/archive/app/views/components/file.twig new file mode 100644 index 0000000..06a1bfc --- /dev/null +++ b/soc/2020/daily_report/archive/app/views/components/file.twig @@ -0,0 +1,42 @@ + +
    +
    + {% if parentDir %} + + {% else %} + {{ icon(file) | raw }} + {% endif %} +
    + +
    + {{ parentDir ? '..' : file.getRelativePathname }} +
    + + {% if file.isFile %} +
    + +
    + {% endif %} + + + + +
    +
    diff --git a/soc/2020/daily_report/archive/app/views/components/footer.twig b/soc/2020/daily_report/archive/app/views/components/footer.twig new file mode 100644 index 0000000..5a04e52 --- /dev/null +++ b/soc/2020/daily_report/archive/app/views/components/footer.twig @@ -0,0 +1,21 @@ + diff --git a/soc/2020/daily_report/archive/app/views/components/google-analytics.twig b/soc/2020/daily_report/archive/app/views/components/google-analytics.twig new file mode 100644 index 0000000..37cc488 --- /dev/null +++ b/soc/2020/daily_report/archive/app/views/components/google-analytics.twig @@ -0,0 +1,11 @@ + + + diff --git a/soc/2020/daily_report/archive/app/views/components/header.twig b/soc/2020/daily_report/archive/app/views/components/header.twig new file mode 100644 index 0000000..98708bf --- /dev/null +++ b/soc/2020/daily_report/archive/app/views/components/header.twig @@ -0,0 +1,36 @@ + diff --git a/soc/2020/daily_report/archive/app/views/components/readme.twig b/soc/2020/daily_report/archive/app/views/components/readme.twig new file mode 100644 index 0000000..23addb9 --- /dev/null +++ b/soc/2020/daily_report/archive/app/views/components/readme.twig @@ -0,0 +1,15 @@ +
    +
    +
    + README.md +
    + +
    + {% if readme.getExtension == 'md' %} + {{ markdown(readme.getContents) | raw }} + {% else %} + {{ readme.getContents | nl2br }} + {% endif %} +
    +
    +
    diff --git a/soc/2020/daily_report/archive/app/views/components/scroll-to-top.twig b/soc/2020/daily_report/archive/app/views/components/scroll-to-top.twig new file mode 100644 index 0000000..ab604a8 --- /dev/null +++ b/soc/2020/daily_report/archive/app/views/components/scroll-to-top.twig @@ -0,0 +1,10 @@ +
    +
    + +
    +
    diff --git a/soc/2020/daily_report/archive/app/views/components/search.twig b/soc/2020/daily_report/archive/app/views/components/search.twig new file mode 100644 index 0000000..136d4bc --- /dev/null +++ b/soc/2020/daily_report/archive/app/views/components/search.twig @@ -0,0 +1,21 @@ + diff --git a/soc/2020/daily_report/archive/app/views/error.twig b/soc/2020/daily_report/archive/app/views/error.twig new file mode 100644 index 0000000..96051b3 --- /dev/null +++ b/soc/2020/daily_report/archive/app/views/error.twig @@ -0,0 +1,18 @@ +{% extends 'layouts/app.twig' %} +{% set title = message %} + +{% block content %} + {% include 'components/header.twig' %} + +
    +

    + {{ message | default('An unexpected error occured') }} +

    + +

    + {{ subtext }} +

    +
    + + {% include 'components/footer.twig' %} +{% endblock %} diff --git a/soc/2020/daily_report/archive/app/views/index.twig b/soc/2020/daily_report/archive/app/views/index.twig new file mode 100644 index 0000000..b4d28b9 --- /dev/null +++ b/soc/2020/daily_report/archive/app/views/index.twig @@ -0,0 +1,46 @@ +{% extends "layouts/app.twig" %} + +{% block content %} + {% include "components/header.twig" %} + +
    +
    +
    +
    + {{ translate('file.name') }} +
    + + + + +
    + +
      +
    • + {% if path and path != '.' %} + {{ include('components/file.twig', { parentDir: true }) }} + {% endif %} +
    • + +
    • + {% for file in files %} + {{ include('components/file.twig') }} + {% endfor %} +
    • +
    +
    + + {% if readme %} + {% include 'components/readme.twig' %} + {% endif %} +
    + + {% include 'components/footer.twig' %} + + {% include 'components/scroll-to-top.twig' %} + +{% endblock %} diff --git a/soc/2020/daily_report/archive/app/views/layouts/app.twig b/soc/2020/daily_report/archive/app/views/layouts/app.twig new file mode 100644 index 0000000..cb50f52 --- /dev/null +++ b/soc/2020/daily_report/archive/app/views/layouts/app.twig @@ -0,0 +1,19 @@ + + + + + + + + +{% if config('google_analytics_id', false) %} + {% include 'components/google-analytics.twig' %} +{% endif %} + +{{ title }} • Directory Lister + +
    + {% block content %}{% endblock %} +
    + + diff --git a/soc/2020/daily_report/archive/hours-rules.html b/soc/2020/daily_report/archive/hours-rules.html new file mode 100644 index 0000000..86d5fa5 --- /dev/null +++ b/soc/2020/daily_report/archive/hours-rules.html @@ -0,0 +1,11 @@ + + + +
    +

    With respect to the time you will have to dedicate, GSoC demands 30h to 40h of work per week. GNU social's Summer of Code expects you to work between [32, 36.5]h/week, you can organize that time as you please, but you must be sure to dedicate that in your weekly work or to be overly productive.

    +

    We suggest you to do a four-day work week with 6h of work/day + 2h to document, review and test and report the progress you've done. As breaks are important, we recommend a 1h lunch break, 15min break after 4h of continuous work and a further 15mins break after 6h of work. These breaks won't be considered as part of your work time.

    +

    In some places, GSoC starts in the middle of college's last exam season, if that's your case, we accept that you start doing some hours of work in May (bonding month) and debit those in June (first coding month) weeks.

    +

    In average, you will work 146h/month, ideally 128h/month will be enough (maybe even only 96h/month, if you're special). We do not accept that you transfer expected work time from a month to another. An under-performing week will make us request more hours from you either in the same week or the one immediately after.

    +
    + + diff --git a/soc/2020/daily_report/archive/index.php b/soc/2020/daily_report/archive/index.php new file mode 100644 index 0000000..648c1bd --- /dev/null +++ b/soc/2020/daily_report/archive/index.php @@ -0,0 +1,22 @@ +safeLoad(); + +// Initialize the application +$app = (new ContainerBuilder)->addDefinitions( + __DIR__ . '/app/config/app.php', + __DIR__ . '/app/config/container.php' +)->build()->call(AppManager::class); + +// Engage! +$app->run(); diff --git a/soc/2020/daily_report/archive/roadmap-as-of-june.txt b/soc/2020/daily_report/archive/roadmap-as-of-june.txt new file mode 100644 index 0000000..f0d7070 --- /dev/null +++ b/soc/2020/daily_report/archive/roadmap-as-of-june.txt @@ -0,0 +1,68 @@ +Eliseu Amaro +============ + +June +---- +- Develop at least the skell of the core template +- Port at least the static pages +- Port core actions to controllers and implement their views +- Implement visual customization plugins + +July +---- +- Port at least the essential plugins to v3 + +August +------ +The student will be a full GNU social dev by then and will do general development accordingly. + +__________________________________________ + +Susanna Di Vita +=============== + +June (half) +----------- +- Finish v2's new federation stack +- Implement the required stack for RealTime plugins +- Implement the required stack for a Web Application plugin + +June (half), July and August +----------------------------- +The student will be a full GNU social dev by then and will implement both Pleroma API and a webapp frontend plugin for it. + +__________________________________________ + +Hugo Sales +========== + +The student is a full GNU social dev by now and will continue doing general development accordingly. + +Defined goals: + +May +--- +- Docker and Installer +- Port database +- Port i18n/l10n +- Port routing system + +June +---- +- Port configuration +- Basic interfaces for queuing, caching, etc. +- Basic test structure +- Finish docker and Installer +- Restructure database as needed +- Finish network stack (routing and add guzzle wrappers) +- Session system +- Streams/Feeds + +July (half) +----------- +- Port modules +- Port media system + +July (half) and August +----------------------- +- Port federation stack diff --git a/soc/2020/daily_report/archive/roadmap-as-of-may.txt b/soc/2020/daily_report/archive/roadmap-as-of-may.txt new file mode 100644 index 0000000..dc4988b --- /dev/null +++ b/soc/2020/daily_report/archive/roadmap-as-of-may.txt @@ -0,0 +1,74 @@ +Eliseu Amaro +============ + +May +--- +- Develop at least the skell of the core template +- Port at least the static pages + +June +---- +- Implement visual customization plugins +- Port core actions to controllers and implement their views + +July +---- +- Port at least the essential plugins to v3 + +August +------ +The student will be a full GNU social dev by then and will do general development accordingly. + +__________________________________________ + +Susanna Di Vita +=============== + +May +--- +- Finish v2's new federation stack + +June (half) +----------- +- Implement the required stack for RealTime plugins +- Implement the required stack for a Web Application plugin + +June (half), July and August +----------------------------- +The student will be a full GNU social dev by then and will implement both Pleroma API and a webapp frontend plugin for it. + +__________________________________________ + +Hugo Sales +========== + +The student is a full GNU social dev by now and will continue doing general development accordingly. + +Defined goals: + +May +--- +- Docker and Installer +- Port database +- Port configuration +- Port i18n/l10n +- Basic interfaces for queuing, caching, etc. +- Basic test structure +- Port routing system + +June +---- +- Finish docker and Installer +- Restructure database as needed +- Finish network stack (routing and add guzzle wrappers) +- Session system +- Streams/Feeds + +July (half) +----------- +- Port modules +- Port media system + +July (half) and August +----------------------- +- Port federation stack diff --git a/soc/2020/daily_report/archive/roadmap.txt b/soc/2020/daily_report/archive/roadmap.txt new file mode 100644 index 0000000..8239efe --- /dev/null +++ b/soc/2020/daily_report/archive/roadmap.txt @@ -0,0 +1,94 @@ +Eliseu Amaro +============ + +Defined goals: + +June +---- +- Develop the skelleton of the core template +- Port every static pages + +July +---- +- Finish new design +- Port core UI actions (but feed) + +August +------ +- Implement feed controllers +|- /home +|- [/groups] +|- [/people] +- Implement every remaining core action (but API) +|- Reply +|- Favourite +|- Recycle + +Given as optional tasks +---- +[- Implement visual customization plugins] +[- Port plugins to v3] + +__________________________________________ + +Susanna Di Vita +=============== + +Defined goals: + +June +---- +REMOVED. + +July +----- +- Implement interface for the webapp + +August +------ +- Implement client Pleroma API with unit tests + +__________________________________________ + +Hugo Sales +========== + +Defined goals: + +May +--- +- Docker and Installer +- Port database +- Port i18n/l10n +- Port routing system + +June +---- +- Port configuration +- Basic interfaces for queuing, caching, etc. +- Basic test structure +- Finish docker and Installer +- Restructure database as needed +- Finish network stack (routing and add guzzle wrappers) +- Session system +- Streams/Feeds + +July +---- +- Implement the dynamical components of the core views +- Port ORM and review database design +- Basic interfaces for queuing, caching and network +- Session system +- Port modules +- Port media system + +August +------ +- Impement GSActivity data modelling +- Streams/Feeds +|- [/people] +|- [/groups] + +Given as optional tasks +---- +[- Port federation stack] diff --git a/soc/2020/daily_report/index.php b/soc/2020/daily_report/index.php new file mode 100644 index 0000000..ff8f872 --- /dev/null +++ b/soc/2020/daily_report/index.php @@ -0,0 +1 @@ + + + + + Google Summer of Code 2020 Ideas | GNU social + + + + + + + + +
    + +

    Ready?

    + + +
    +

    GNU social is a social communication software used in federated social networks. It is widely supported and has a large userbase. It is already used by the Free Software Foundation, and Richard Stallman himself.

    +

    If you would like to know how is it like to be a GSoC student at GNU social, read this blog post!

    +
    +
    +

    Ideas

    +

    Below is a list of ideas you can work on this Summer at GNU social. You should pick one (or mix a couple) of them and talk on IRC about it. The community will help you understanding what has to be done so you can put a good proposal together.

    +
    +

    Rewrite GNU social using Symfony

    +

    Description: The title is pretty much self explanatory. One might either focus in core, plugins or both (this is to say that we may accept two students for this one).

    +

    Mentors: Diogo Cordeiro, Alexey Sorokin

    +

    Proposal: Make a parallelism between the GS system and Symfony (autoloading, routing, templates, cache, queues, cron, orm/db, ...), indicating how to implement something like our plugin system in such framework.

    +

    Proof of Competence: Migrate the avatar system as was done with the media system in the past gsoc and a couple more of backlog tasks. Additional big crunch and bang with a minimally working plugin system would be ideal.

    +

    Requirements: PHP7, SQL, Redis, OOP, Declarative and Functional programming. Symfony and Doctrine experience is preferred.

    +

    Difficulty: Hard

    +

    Study Resources: Refer to the generic ones in "Reliability Engineering". Study Symfony's docs as well as Redis's.

    +
    +

    Federation

    +

    Description: To implement Federation in v3.

    +

    Mentors: Daniel Supernault, Diogo Cordeiro (as secondary)

    +

    Proposal: Demonstrate knowledge of {TFNM, ActivityPub, OStatus, Pleroma API}.

    +

    Proof of Competence: Finish the TFNM and ensure AP works on v2, write auto tests for these.

    +

    Requirements: PHP7, Declarative and Functional programming, HTTP, REST APIs. Guzzle experience is preferred.

    +

    Difficulty: Medium

    +

    Study Resources: In addition to the generic ones in "Suggest a proposal!": ActivityPub and Pleroma API

    +
    +

    APIs

    +

    Description: To implement Pleroma API and port Twitter API from v2 to v3.

    +

    Mentors: Diogo Cordeiro, Alexey Sorokin (as secondary)

    +

    Proposal: Demonstrate knowledge of {Twitter API, Pleroma API, OAuth2, Open ID}.

    +

    Proof of Competence: Ensure GNU social's Twitter API.

    +

    Requirements: PHP7, Declarative and Functional programming, HTTP, REST APIs. Guzzle experience is preferred.

    +

    Difficulty: Medium

    +

    Study Resources: In addition to the generic ones in "Suggest a proposal!":

    + +
    +

    New Frontend Classic

    +

    Description: To implement the new interface in v3 compatible with the AnyBrowser campaign and LibreJS.

    +

    Get some inspiration from: +

    +

    NB: While designing, bear in mind three things: fediverse culture, JS is optional, it should be just an improvement of UX when it's supported by the browser (as elaborated in AnyBrowser), accessibility is a must - bear in mind screen readers, colour blindness, etc.

    +

    Mentors: Joshua Judson Rosen, Daniel Supernault (secondary)

    +

    Proposal: Wireframe and Mockup of the interface. You will definitely want to request community feedback while working on this.

    +

    Proof of Competence: Make a new website in Hugo or similar for https://gnusocial.network (which is GNU social's landing page).

    +

    Requirements: CSS3 and HTML5. JS and Twig experience is preferred.

    +

    Difficulty: Easy

    +

    Study Resources: Refer to the generic ones in "Suggest a proposal!".

    +
    +

    New Frontend Modern

    +

    Description: To implement a GNU social UI for Pleroma API compatible with LibreJS. This will be a plugin in v3.

    +

    Get some inspiration from: +

    +

    NB: While designing, bear in mind the fediverse culture.

    +

    Mentors: Daniel Supernault, Joshua Judson Rosen (secondary)

    +

    Proposal: Wireframe and Mockup of the interface. You will definitely want to request community feedback while working on this.

    +

    Proof of Competence: Make a new website in Hugo or similar for https://gnusocial.network (which is GNU social's landing page). Please follow the same guidelines of the Classic idea for this.

    +

    Requirements: CSS3, HTML5, JS, Bootstrap and Pleroma API. Twig, Vue and Webpack experience is preferred.

    +

    Difficulty: Easy

    +

    Study Resources: Refer to the generic ones in "Suggest a proposal!".

    +
    +

    Reliability Engineering

    +

    Description: To test v3.

    +

    Mentors: Alexey Sorokin, Joshua Judson Rosen (as secondary)

    +

    Proposal: Monography on DevOps applied to GNU social v3 Summer (5000 words)

    +

    Proof of Competence: Write/review tests of v2, test its security. Develop a platform for daily reports of GNU social SoC students throughout Summer.

    +

    Requirements: PHP7, REST APIs, Shell Script. PHPUnit experience is preferred.

    +

    Difficulty: Easy

    +

    Study Resources: In addition to the generic ones in "Suggest a proposal!":

    + +
    +

    Suggest a proposal!

    +

    Proposal: See issues labeled as "enhancement" in our repo and propose one or more plugins :)

    +

    Proof of Competence: Backlog tasks or other more appropriate.

    +

    Also, be sure to checkout our TODO if you want to start preparing yourself (or, better yet, contributing early)!

    +

    Study Resources:

    + +
    +
    +

    How to apply?

    +

    NB: The "Proof of Competence" has to be done together with the proposal in your application!

    +

    First read GNU's guidelines on how to prepare a good proposal.

    +

    Suggestion: +

      +
    • Header:
    • +
        +
      • Name
      • +
      • Email
      • +
      • Other contact forms (IRC, XMPP)
      • +
      • Timezone
      • +
      • Project name
      • +
      • *Proof of Competence link
      • +
      +
    • Summary
    • +
    • Benefits
    • +
    • Deliverables
    • +
    • *State Of The Art
    • +
    • *Relevant Research
    • +
    • Plan
    • +
    • Tentative Timeline
    • +
    • Communication
    • +
    • Qualification
    • +
    • *References
    • +
    +
    +            * - if applicable
    +            N.B.:
    +            - Plan and Timeline may be together
    +            - Deliverables may come up after timeline
    +            - You're allowed to create subsections and even sections
    +            
    +

    +

    Then please contact us on GS's IRC channel (#social@irc.freenode.net) to get started on your proposal. For an example proposal, you can refer to Network Services Improvements proposal from last year.

    +

    In this year proposal, you should also specify your timezone. With respect to the time you will have to dedicate, GSoC demands 30h to 40h of work per week. GNU social's Summer of Code expects you to work an average of 36.5h/week, you can organize that time as you please, but you must be sure to dedicate that in your weekly work or to be overly productive.

    +

    We suggest you to do a four-day work week with 6h of work/day + 3h to document, review/test and report the progress you've done (you usually won't need that much for this and we won't complain as long as you're doing well/being highly productive). As breaks are important, we recommend a 1h lunch break, 15min break after 4h of continuous work and a further 15mins break after 6h of work. These breaks won't be considered as part of your work time.

    +

    Note that 6h*4 = 24h, which is below the minimum 30h demanded by Google, if you only do the 24h/week, you'll have to prove your worth. Otherwise, we might require that you either do a 5-day week or that you scale it up to 7.5h in your 4-day week.

    +

    In some places, GSoC starts in the middle of college's last exam season, if that's your case, we accept that you do less hours of work in the beginning as long as you compensate those later.

    +

    In general, you will always have to work at least 120h/month, ideally 146h/month (or the productively equivalent). We do not accept that you transfer expected work time from a month to another. Nonetheless, an under-performing week will make us request more hours from you in the week after (up to the limit of 40h).

    +

    We also suggest that you create an account in the fediverse.

    +

    You can contact Diogo either on the above mentioned IRC channel (under the nick: includeals), by email or on his GNU social profile.

    +

    If you need a ZNC Bouncer, you can ask enot for one in IRC. Or just use our XMPP bridge, refer to our project's README to learn more.

    + GO! +
    + + diff --git a/soc/2020/index.html b/soc/2020/index.html new file mode 100644 index 0000000..611b2c1 --- /dev/null +++ b/soc/2020/index.html @@ -0,0 +1,75 @@ + + + + + Summer of Code 2020 | GNU social + + + + + + + + +
    +

    What a summer!

    + +

    We are truly proud of all the progress we made with the help of our students. GNU social mentees have to submit code on the level of typical contributors without spoon-feeding and that's something achieved in all of ours GSoC editions.

    +

    A GNU social contributor deals with {reliability, software and computer security} engineering. Mastery with full-stack web development and git is acquired in a hands-on way without ever dismissing theoretical computer science teachings for optimal efficiency and effective designs.

    +

    GNU social is a beautiful software that follows GNU and UNIX philosophies by heart.

    +

    A big thanks for all the support of our lovely community and devs who have been with us in yet another great journey!

    +
    +
    +

    V3 Frontend

    +

    Proposed by Eliseu Amaro and mentored by Joshua Judson Rosen, Phablulo Joel and Daniel Supernault

    +

    With the development of GNU social v3 and thus, the desire of improving the whole project,a new interface becomes essential. The broadened scope on this iteration is a perfect excuse for a better and more modern approach while maintaining in touch with the community needs.

    +

    The main objective was to find novel solutions to the platform's versatile nature. To achieve this, a simple but thoughtful design was conceived under visual hierarchy, color and modular design principles. Furthermore, novel approaches to templates, context information and semantic HTML made possible to restructure a block according to it's size and provide a cohesive experience even if the content provided comes from outside instances of the Fediverse.

    + Technical Report +
    +
    +

    V3 Backend

    +

    Proposed by Hugo Sales and mentored by Diogo Cordeiro and Alexei Sorokin

    +
      +
    • Docker and Installer;
    • +
    • Review Database Structure and migrate to Doctrine;
    • +
    • Port routes, i18n/l10n, caching, queuing, events, and session to Symfony based;
    • +
    • Extend component-based architecture;
    • +
    • Started work on porting v2 controllers and plugins to v3.
    • +
    + Technical Report +
    + + + diff --git a/soc/2020/landing/index.html b/soc/2020/landing/index.html new file mode 100644 index 0000000..22aa19d --- /dev/null +++ b/soc/2020/landing/index.html @@ -0,0 +1,57 @@ + + + + +New landing page for GNU social + + + + + + + + + + diff --git a/soc/2020/landing/pranjal.png b/soc/2020/landing/pranjal.png new file mode 100644 index 0000000000000000000000000000000000000000..690bfb5146eb960a52d22d9d8716c063e7503927 GIT binary patch literal 88665 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 D#QBac literal 0 HcmV?d00001 diff --git a/soc/2020/landing/rainydaysavings.png b/soc/2020/landing/rainydaysavings.png new file mode 100644 index 0000000000000000000000000000000000000000..aa037ca143bb3b4eed5dd689d273eff10271016c GIT binary patch literal 745657 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

    f4o(yb72Tr|~FhAmwW`no7k{y7V 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 z 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�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�SYY2z{#mE)PKWw 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 literal 0 HcmV?d00001 diff --git a/soc/2020/landing/suraj.png b/soc/2020/landing/suraj.png new file mode 100644 index 0000000000000000000000000000000000000000..f063a39cc9e8b21bfbd85bdd84daf8a72ccaa7a8 GIT binary patch literal 157728 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 literal 0 HcmV?d00001 diff --git a/soc/2020/landing/susdiv.png b/soc/2020/landing/susdiv.png new file mode 100644 index 0000000000000000000000000000000000000000..973a9933d9e8356d1e6092112f157d2bb18aeb57 GIT binary patch literal 210765 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 FU^;o+aNk>ELeno8SS}x4$ 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Νht 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 TzRF!G7$Ss4XlvUzQW5_LsWg)s literal 0 HcmV?d00001 diff --git a/soc/2020/tech_report/pleroma_fe/index.html b/soc/2020/tech_report/pleroma_fe/index.html new file mode 100644 index 0000000..1eff19b --- /dev/null +++ b/soc/2020/tech_report/pleroma_fe/index.html @@ -0,0 +1,2 @@ + + diff --git a/soc/2020/tech_report/pleroma_fe/technical_report.pdf b/soc/2020/tech_report/pleroma_fe/technical_report.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b4fcdcdd92ffd11aed7516e67b68e1e352ac4c10 GIT binary patch literal 158695 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�|-f%8g6h zJ_h4M;}`K7&0^C=(@4{xGw_(tigW)Hsd@s_ zUJ~E`pfFU`HVD=o< zTQJYS;sD4#%w?m+>n=C)VJ9V%zQV9DkklNXu?Di7^dKixg>7x8af z`_{t9(>PBbAI(q@;6BXW6V4BBqg+}4s{xWp8hF#D|WU>uE^&- zF1tOfM((f%yp>s-$eZ80!cW^d{jNn13LP+1O8V@*TY;!D_^xQOIm25AMi0*TD885v z(f+I8)1y8An$BZTuF>M`{p!A!C1|?YTjE%NZKW}MX|P3!T-%Y(Tk zU1&-C`xY40YsO4Go+j&T7TOMj9MCazo?gUN84S-!1+zw#1;$?xl44d*(9~?LwUJij z)at#<>4Sua2umrHirv(3Ew6PX?Zf*DN?V}ab4PqylXwdQk$fgFGg=D0c~c8PLk$yS z0~cG_qH%3(hn-IQ04;~E@^NRx$i7SCNGD6n1`@M|;FYZ|!?G%qM0$1!u}G~mZ3ihG z8-@{)clpRks+5D0kPksXV0mTn-MewI&f#O3Xe!F9$l )2{Wd&*}j<+#_H;+R?S2 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 TJO{{E{=>a6z|)^U-Rpk=K_JH* literal 0 HcmV?d00001 diff --git a/soc/2020/tech_report/v3_be/GSSoC 2020 Certificate of Completion for Hugo Sales.pdf b/soc/2020/tech_report/v3_be/GSSoC 2020 Certificate of Completion for Hugo Sales.pdf new file mode 100644 index 0000000000000000000000000000000000000000..02c2642a65246fdf1fefc05d62c8f69b0001db46 GIT binary patch literal 107090 zcmeFYWpHG>k}g_icAJ@@&D3UQZZk8tnVFfHnVF%@%+zMP&CJY<&wcjU=gf8RS<3*`zc!uTT3*<~UeHwKx;}10C+JME6^BK1c8aHgN2_KJ67#y}tD`X?vT(L1xnu*p6gOuyj}I zgXjzl32oYJu}&krTbJXaweCqf3^&bmAzl-0+l;kIrN_H}l$DT)cdqZI&-CapwAeDzaLy>ex7b}^hT%TOaIvhzZ1kJD zVtmP=aH4I(v^#wW9^fbD8G(GX2RpgV`rsS5Q)C;>4gw$ysclHbkeuWU

    6c;dj>Xex|G| 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 literal 0 HcmV?d00001 diff --git a/soc/2020/tech_report/v3_be/index.html b/soc/2020/tech_report/v3_be/index.html new file mode 100644 index 0000000..8419281 --- /dev/null +++ b/soc/2020/tech_report/v3_be/index.html @@ -0,0 +1,3 @@ + + diff --git a/soc/2020/tech_report/v3_be/technical_report.pdf b/soc/2020/tech_report/v3_be/technical_report.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b53e4eb27939ac7f456af498c4aad83837b181e9 GIT binary patch literal 123427 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%0DIbq+$1(|`sno>F> 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�Q5GP&?9w2=o}f$T2!8ad+2jrO{EaKr?>^F| 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

    Qqn}9oGVB1DF{Vn1s9uzjJ%t$ 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μRj%}aw$^-1q(8&vjPpTG?f-g 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�ig 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%0A0+je^eG4e7Ov;hDCd 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 literal 0 HcmV?d00001 diff --git a/soc/2020/tech_report/v3_fe/certificate_diogo.sig b/soc/2020/tech_report/v3_fe/certificate_diogo.sig new file mode 100644 index 0000000000000000000000000000000000000000..57c1535ace94b7759d54d5a9220a3d653d217d3d GIT binary patch literal 310 zcmV-60m=S}0W$;u0SW*e79j+3V`-1?C@TByGxDOIr^sMm`HKYw0$?kT4FC!W5T2*V zU|;!*1>XAz0HA!etqGFb>^+)db`}V(I$)02g~=Jr4%)$c<47rNlYY~$607HllH%(6 z2_vMz5rNG7kijf)q`GblMC*aUczVQey-8cACp_;ZPcTYcJ4?BR=1MM4=l&Zx{4lLh_dp~8^&;4H`Az)sw(w=PWH1j0=!V4@4cmDCm?nlK?En>Q07N>$9P ze-hwIMRG{@XrR~6>V%@x=O}n+jJ0IQco-1(394mlL+P`7V#?Ph3msSbFR|fIN_&{X I>(JipmHq)$ literal 0 HcmV?d00001 diff --git a/soc/2020/tech_report/v3_fe/certificate_rozzin.sig b/soc/2020/tech_report/v3_fe/certificate_rozzin.sig new file mode 100644 index 0000000000000000000000000000000000000000..9680ff7d32b03119877f63447a6d67af9f9f017f GIT binary patch literal 590 zcmV-U0Bbw=nPV>N`z>SLq0$@RA{}&u`Z+d!Z zZa`>ZV{2t{aBp*SWiDfHZ2$@h5Q$Fnz@os7i!yi+0NLONxgL-N=FY&V7e%MDcy0in zGSWWare2b3?62ih+@!gC5jH`E?}_l>pkpH!mJ*X-Wb&S1^7ui9Z;{~-F?qJ&&PxdO z_qriHA!(FGnO$_KkhW7Zp{Z|rt}e8F=~39JRUr-A9He09QewEPKpn2A_^GAjkG%7u zNw$|XrxJ#d1I=i*E7MI_aT$2qkIw45BVk?DTFQ@Pr{@i#=uRf|&ju+klg#*f*>6lzI{zg-oBp77vL)R|AHm1*~LbX>*OpAJvQ(zngrZFiQ8gZ;{W&@5|127+$ z5*&VaZGeppQruns zk|dOYOm>qtiil0h5HwL9nw}KeG{F}o;-$^K+yCksw}+k)lQ)U96j{V{srT;!7{_@M z*rg4m=2Sm76<*|g=L4kIWHhtEf*8du@_A!7k1z2iZTcS9)KS3cnCd29n60Vk^HcT- zG%jtV3v;eT1^(XjUy5cT$0v}~5FuEuw$=)vGIK!U)XJ%@GzioW77{=PVvAF{;168T z0M;`J?qIiL>Sz{MgyWVF)KRrt_(#f`s3w!?7PIK|Vg)?yThHb-RS*iq cnACH6MYDeTx$Zsf?6NX+NJIy$0N~~AmDKwm$p8QV literal 0 HcmV?d00001 diff --git a/soc/2020/tech_report/v3_fe/daily_reports_diogo.sig b/soc/2020/tech_report/v3_fe/daily_reports_diogo.sig new file mode 100644 index 0000000000000000000000000000000000000000..a0f88ff2ab6bdff1ffd1f4b9c6187a1d4c3e0eec GIT binary patch literal 310 zcmV-60m=S}0W$;u0SW*e79j+3V`-1?C@TByGxDOIr^sMm`HKYw0$?kXL;wm25T2*V zU|;!*1z7tB{0@@#PxB>mRU2vhcP!mJZ?os^d0^!x`SL#&EM#JyiNgyso$r~jqrd5y zzVhxmZtlPTeRm-tr%HNE^&vj|@ht3cT_#vFRhcTA!}~80Mh35>3W&3MDV{&tiN=P% z5pLJQY{7=pIus)9iM1`m`C?hehP}c!mi^>ZzQFJ{l;JWh-DbL;br8Y&)#N*TW%L3r z%ZCY$|02$A+(u_OXPht?+5`2cxd(o0=J5 + diff --git a/soc/2020/tech_report/v3_fe/technical_report.pdf b/soc/2020/tech_report/v3_fe/technical_report.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9d8d45da05867748552cf307ff383c0da24ceddd GIT binary patch literal 1386355 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

    P1B<%J{Y0lrsU1j7@`8Z_x-gb5BHh6gfba z5F-2WcWp~6(_2MTENwH5HQo8X>P*6~&tl055gwzC>(==>{3F|XSBwTKHH4jUc ztq-d{o<}o&4@+&HF>`ZTDhpMiP~zIKx?OPliiv5ircayxJ?&%GGJKXF5%f*{6$|5N z{;5j)N(WZ7!?2m}_CoWU!@+GoEZkY`Gqz~87e9VTRr2jsIvK=XAAL+jjdks(cqkc5 zOOx{szngJAIviaFhsP`9H145w-gNAv{*l}aKK26qg>Ke5%u(xQt?HX>NCfb zG>rc@P#eugI&G{c8nfItANYB>sEYV1<=k*a8xEx0WZj)kD8?}>_62EJN6#dQcOJ?q zsuY6ukQIoVLaz%4=10yYLo~2;cwYRs9KAGLLV?VIWbJ_u#4 zAgmmEkWXY?C{#?g>u!I;e{JG@MC3g@r+cd}wRD@nP>f9q$&nQ40+_W!UgJYCynT)&p@4k`?7Un^`Nb8l=wB%CF)+fFRd z6TneVGuuQB?^R61E^1hEXo?{gTDEJVD}pz_KaQF`@Q?)*ZZ`~l*bS2r=;UObxK77U z5m63fT6T^np@BxQdOLPEeTLYK5e-`09)vOU_NciOA!Dd+y2RE-q^SWCEAw(H{k%l- za$_%1PLUZ1O3J8{CMSBjEMI@AicB{()aL9kBdCt8TWIs(2nZvmmFUici$d;0iaKpy z3im7nqqxe^;T$4XQ-3q`EC>vVgjwZ5qCNHX?D$x0pxCe zmt>u`DyWgwI?=M`h5xk^K$r{Rv#)03A-uxiu+X)=W+||1Sb5DdCH~ZFn3iWCl0I!k zA5CqQ9N(*IZ7LZz%h+#Kl*y2v-pDjDKEg!qpM$E+$aqnU%b>S8Zjqq>}rxdR^NHq}fIbAkxZfF!{t2^5wa9l$K zE0J1RqAdOPNqFPoKh|{Qd|Ys8*Unxa+}`gq4P5b(!`bZpb~cNv#40QTE~zx#nc&^! zHQth_6LShTBCYAgV*S-_4B_dzdg+3^Y`j)(yuXUPVv*dnWALzmkr6gUSray#WJT6! zgy~TS4TL+BA4)yuDws+06+1jT)H)garRQ3sCngBbQ?zmZ66P?_rUePmlLzfR8 zM|tKv&BwQ=L^mZ&91Nbf{@O@W2f@%x$@By@t)LZ!J%d_bRQqe`)_x7a|NW>^u8t|q z7{X%pXp9YG)xTL#-z^$qK$n6F1(WR}ANNX{^T6A5cq~&Y%wM>D1 z15$jo*mIj;>nGRU?YciUnldq55x2i+hmup~L!aAFPzxR?zag#V$N-dziJQS5?qZ z$so(cRaIvZRl45K$2%nkB5;}Lc6s=b_oIK2+vt|gX$}rWXyN}ls@>~?KPY;EBWy9!^3p{=zA;jSebZ+6T-%Mi-tU1yf0TnGVpw7 zZ#s_|ATuUmTzm6Hv!(e%$UShh*IQOv%lc;>V`VJ;^|dTC$>&NLrRoMoK4m6!d+v|` zuJ$=!6NCm-qNR|WZN9Ey)Yg&hZe739^7;Y_ zSd)6WjI-o8DR0%C-IiYl$R2(h)IS^9g}fWg*ZBt9R?bX+)dVYCLuE|%rsurPCSX@? zP!nJeGl|gX3rvF0x~3O0kitGWBK%!)u8UGrXmsD#mH!Fqo5KhTK4_`rwvq~^7@3t2)g)HCaed&bU1nbj zz}{TTi!9f}h+FM#LqLTFJt_oTO{{hL53`;;Q8!%Gs~L~=r%5E-NuRYGH6dI^X+pQd zroLMpNp(Zd_!?77g*Bz!DmT~V4#ruX2cqmlwz}S0?J&6!y86YkO}pn)e_eRqeNej5 z-T8k2b3ly0{d-`+6!(-v56$7r^))xWG~dxtPB2Q zzY|Igb&w&Ftq`;miNU0&rNwfzElq37)(9E4?khBrLd}&1VuLN0mE}+;7;LOHWV!)` z{}dB%UePTdZ7%6KazL(?qeJb_F*n;&i_ z>3j0D-Jm4`QaAIe<)Ip3cm?*5q{;TaZzIVefLm-BER7}kU9?U9W0i6;v5a?r}L#U(Of@KI2;()2mg zId+a#TIoR%yT)J&Hk)wmHJj#QdFK8T6LwQeE8=|Rbjkn~TW-SMJHA?{kuO7}UyF;P zvo0zNiPc0Y?rvt#47A;%zO9=~r<3<@0#e=>L}FsR`2JiSIX?_crjgqk#n(sq9|LkaNp6Cxke65JM=J$0SPM(mV#bH86RNH z*lhwcFlUtb5^V8vxl0;cq#*|_x~4iwanyz*7*!GdY3mgjL`hdL(ys9c4mry=e;MGE z(snC>nKP*(EdcW#$4+W5`;C~vd}&;O0T7Z8P$Hxxp=RU|L|C#a&`MJbI@GJ~sIpAQ zT81hST0sgsQLJ#|5dRHRN6ir7moP6&C>|ZeM8+qR-P@OCSLLTirqCXcc>zjt!;Yne z?b7W5noDB@v1QGF;0<4L^f=nM&vMe&W_<y|aS+>eox)|B8S%AD^Cjcm>+Yuuethyiy zyda2P5SGG~PwoLlL$2{*nf6PV8}}O%AdRv?3^Lyb-yFGtYTRA2Q&-foDpB23-4|xC zqgm=me|Kf>yP@Idl<*OX_2tO)^u&o`B;8^kUNyC5EL9$inu7iQ=>HK=0AL>Hmko(wkD@B>q?{qnzUmcc{V9m_ zDCDaYfoh~j_{rqz*JfC9az>&$D@`0dQsYhUy}{4~Q_t+_fD99g-z!^GWv=B&c&gGy z3^!+99pnPM6zt5~JXQm&$0UTm2Nre1v}zFtWwiySoQvl1s|H`LQfl|Gpv+zt3zvwO zu&i&^w(WM4Qj!jdGekKbx&XE{F%AS=vV|B4g)1D%tC%734D@ZX39AKdx5?Hj=By#V z{V8=!+jd1LCE|oMIH)3GPcBF)3ew?}ZveWGm82nSn%7+ZVd`a2-Ikd~K~XUl_u&%m zS?nMQY|LRcS}(Uwy;C({t9$$p6}KAq1aa!F?;@7eP9kI(+2%il3t)$GvtK(%o4lm@ zBO+&3`|H3pWK3iryH-{ekba<8m4>&LpuH1$PrqW@#~JD}xkH&{_fD^`7L^N?5fK8+ zjQX)uHj%>hLvi;pou*u@bi>4htEn3+-8`*>a1ZE0f^EsFcUK^%l^Qx|;4Y{CoRfOx zX=TnOw6Bvw+{((txTAEvtQ-u%J2ByIo6ZAW4=!(y>d+Y{Wdsb{v@p{mO#AuX14D{3 z=gc{yV8{rj?WpYVyDr6WuC7`Qv>)Fu7l(IT0L8{=<~-F52H6(J0Ds9 z-Enf$kS>1((3x}nRt-1nE8OJo*YToi4))KZwnzXAV>HJ%>zPsap2FCKRuF}+Vw}r> z!R}sP-Zbyg`1XM4K((xK$Q=snGO3AUKQzPBjMHAe)V!^$iW{tLbCuXh)eF#y9726H z<|;M;zV?{uzSa$^GR_=O9uP^y;Uw86|LLwgp!70`{`YW^7rG*HOW+V+3Wy6&olmy< zcv#-E8zw9D6x4yC+^LkW?&n{Ex8`Oro$mJFynSS~<(3%AXA5AocSsPIwNe z7QoVln0exw2XqTJMXO9qWQ~7zL_U7rX%~L7u!|EU*I$jIC3G?2CeWwD!c9^|; zWA!6Q%+(WrJJzLyO5nEbVQh`PY-K4fqp^fRAdz{uRs_|eN=fG0+>Cq&rpSqWAj&y= ztsC2x;*YK>#ggrk^x)8h>t~sy?SPmZu=E6Av)M!(w(>xq{RFK=Yo}R&}Z{;!1+qkIElB%tQN%hrl{TxlJ?Eq_!=?2F^SKvQBtb z_x(wvvdy)26j!zn0wR}?5jxeqy54C-lyjC(1NIhVDTz6Ut(LBz7@5ev=rF}I5iwI{ zqH4coZ=rjM{D0@BshkI*yAqszE_13y^R$A+sZJJGbsz!R9sZZ~z&H&9i8wn#K+Kte zM2V59i55-M`5ZysDzb&lSN@w(1-af~YW`{^Z>A~-QxN&>&9R{E($itxd~iPuOB_+; z>*fj9^J}G>CGC55y>3QXS?StH#G9<|!GIb{4ouuRo>mUIPjvcdMk9Hz26z!tyRYn) zASDtrGIIAr9F(WQ`_QlbFb#u}Cu+m3ovo7e*2N-I>}Df%>Jp*UIsV;f4zty~`w zj-A%**ScKt-gC&S6|fAC3k6wf8AWIlg_;w9EI|WO$~i-QqmdG2E=8C<&J1&;OW_1A zfUJ5JVxkJj;O(+?qx7ex5$@5ddYp<_ftamd4@;SXR^`P+DI@zA+hyleMwU6V27OD3 z9zElck7&ucwYDcHXQTvYA%gnu7gmrwwL$&*SmX@!btXz0e?*4VUa2tucJ}3*ce`Co z(5PNE(O^9q=fxaC;L!JQTtX(cZB*|)2Ochc%U}m2#eXHH9Af1?dKs&ckQkhilSY`) z!H7_kl->c&0g&}OE|r>I(cnHBX(l_`$|?W^=IuJua+~Vnrn7ym4@1snAQnk~4T~G6 z&Hl1Wd0tX1QUb1I%R9C&^887}Q;T-9np4v`@~>9)z^GZrQ?ql}$oEsoyY!5Gd-KGA z?}lBn??LP5>{pk?oi!lg|D+yTE2NkGkfJ$G`;<9jf_w zlLn6_J^^pi7!alqmVu;~u`m0^hl#SBOQt+P%fAf8ti2S$x45xQ$snw%+wBh8>UPDt z?N=g?FPmhOgVNtN9@TvN7nv!g%{CE{9A>x-j@wf|DLH0zN}dfj4!j{0)J>o#V zbzzyXr;i#}n0-aNYiqM07&eokGkA1C?u6>Gx@jb9 zA~1^)A{CdmS-e;{NWLYVoA*;h5Px6Yw&-?m#xK<;{E(L(rn3k->QCnL%I!POWsZzt zb)48jZrifK`T>XYs8>q#TNoU7LZqmS}`r=##vwB81*~1;>kJPCmPC8V2Rn#BP zhf^%HKbNR;HG9|BN5kc^*w3A6JvkWrubeAQLQk(m42%tjdP9Wd&N?8rE}5LD93fYw;UQ{hJvqF%;CHmT8}^RiQNCd z$W+bd^S;urT<*XR`o3G_-x0E{a}EqFG6FA7@?jSTW$wh9+;8?Dn)8eUI?$6D-g4`` zrGUnHC)a$#+NYC764g=fs#iQ%MtDSy8~FR?4Cj_D8+2nnh_EN+y-`*CWv)KsCaRrw z3}WK(a_U^w3|v>oQg+blkl*~W_=Bk9U*smH{Mlj;a=iCzNCj)*bI06AzL zb0yE-Oah7tIJ8>aIN6}8V#rnQ$zfwXx8I{@WUiph(zSOj*ISyjn9 zd&&FIk~-osNuy_n=q9?$cRT<)Q%uPl7?}ZQB%Qzn0J(m|Kq{lL(n>2GKn(^P^{qIe z<|kK^{sv~^;u5K-9PKK)(n>2`1zq=k+)68r$Um652EgcE(V?fVthCb2(B&A@mDF1o zCD%}gjzVPG%oCbLydb!*-nW+40~l3kKa8!1ylLQ~SfKuP-0kYxgx@K{74W#S}fc_yYz$Tt`|!#8%~`9;_7hjqdF znX5|HmC2$BaRzBPt0U0`a}>$w8eluYAUZOTAA<>rk?O5awkf)D-z0?(u?%nqLI4KodnyJsKhtO z+M@SoCMIkoP`5<-wTd2Kow?~_*rRh%>@+e5#@14<9W+fJU~nRjfhzYCQ3iH9&bw@Y zog#NxVlgu%(x|xZuDH|e^(UK;pN_o*Z?%lv2htajV8A(7=u9SLMpk2!NrO|X2^iKX z!JOo=BM&rMI6Qex@E ztl04mU?77N(<9yp(36S8=-$Z=E5gBi1~EmyX(9^i?M9MkmZ1E|oH-*gB}&F|M46H7 zyaOMy!Zt`Lv4&bMLzA=j2{Q{5kcI{_24q{TrBOPJ6HMM4BQ_jNM99ES`^-xP1I#HY z-@|w%gHuAkl_wGs; zp>-fuT4|+~7LZ57ijlEaTIuHLEE-gZams3ut#l%p>x!C-Y&(%_=dN@ubSf)`pfF8V zQ(Lo_qKT3YFyTvErfco6+VP9Ny^@)CyB#x6RB>vnBlh&Z;z#up@F?mnC1z)}NimW6 zL^t)zP{6X;;I=*W6^QmGNly?np!XQer^YkUK!WFOPJ#F8+ehjE0RXE9GuGRIGiFXi zj~+deGyF;d$1WF8g;E|uJ>0~+2Opd-h?;+AQtH{6lv3JkQc5W$+HN<#6N7@?%XK13 zj+yt>=y3{LVTocQ+XZF6BXH|Me~iODfD zG(2oR*oJ^@n~f_yYPs$-+g2eTve~$dJjl!p7uNT?V5rU?3pZ8f6Ht9UwZT)>jeW~c z6Vu!)cZm+#q`Ee$w&>!xpWLFU_xY5ZBir=Z44JBrnsnuZ)wH6SY;*eBFtagTPWd^w z#CA_iQn#Zx?XS!LO+Q`fREnFFcURD@6v$R&D*x1Et{W;irw+(oX{AX{hz?)TlyWba zCe2yvWEVXB4a`bMkXSkhw$`1D&s-4|v*fl~Le*c#cBWLlC7IlLnrTk297hDOPJcvC zxRF}K)Zv+&M70fIC`XlGd0xS!tC5-5dqo;I!Z~JAfTwWZgAD9;JNe>NzNd=coRV_# zpdg)ihM!Qd*a(BJU)FLl3aI>rdvHgK&>b}wWOJnL<7}rL=vtAw@0S*?b9b?7VcsnP*d3FNG+E7=hj?6R7ZIJKs@Hc2eJe z&LGMO1aahVRJi!!5OH=a+E`Vc%>_oEYTB^(daKhtsr_fH33>4Vs@1&QAYwgBZXBc8 zWR&(88+)oqVLbsarf>V8=t(7sp`Xb;$h$>te$eB5D085D$v%kZ8IGKOWWt5^ZlY;e zkeS*ZG$oox`L#YeCEmKD$cYC)GbhZz)nZ+dx z*1KhrxdxiA8!PFXS!rwia$YB$AB8<*bOgnfZBdD{RU9okK#3;5>9E22WHlz#L) zJ9LIlCKtHIa2<*N0BD_A3S!H`_8Gkf1tFR$cOOKszafH;vclftdPsUE*&IYNU#J0# zlW&_xlbLH1KFy6f-Ty4t(2%T?wX(mCkj3r5*`kT4;xKeBtCr7{RCMeMaRS!8$V~$s zA9GmD`f2IDW#3)x9j%3BXuhNYW5s5>NokYwDm=YmykHoM)v1ZM3ZgK>h+Q;jz4b@{;Z+MGnVm^)g{-&-%+Cbq!UR0p6U z#W@EvYQEB8K7^zcW14GH8OOfqwl$u=; z$2XfTvIu=1ip2xE`GZTi=d5%baTk{vtA%;jXb0+)sr>q!8We&213uRTuK#vpm9Ud|;F zYlKa@KCg*Nq+Kd9+`URwv`cVUnEN6_PJ)W#mJR1d!6YVDho)!zz8`kw&Xtl+jQc!A z4G7b(hA~fbxE?s@+FOc0&lh~C7UxY)!u)<%i_{`B_MGr_0M+~^Xkc}Q6O1c{r#dxF zBT(i{C{dtMb*XTO?3bprkt4%0y3T1vr>k=d77bGRZiD;kcNz9@Q_eZ1xsf{8QcFa_ z#%*H*rwIlrGNGx1M#u?V>Uea0{F^jTVQI6`&I>ud85b8zgHNH|lPCt9sW^SO3}O9VO=MLKUra(-nYv+Or4H%FGjs7u7zq`-tsp zejCov>b)#ldP6%stl>Nb(>qE~00ml>GxT6Y3fWAHiCx(#JzO5OpndnEq?zah z-&C3Ia1IH*@XiFR-jzcrWmABXo($#GlP*Hg}%@s2u zrrQ-6wIivJnZdh#67E$in(c_??g@*M4U6ab`VB`Ap}D8(No7aj++G+~tsK!9qX;RN*0Oed57&$0f;^7Y_3k zXw}D+u7#M(^l(FIsemPum!t*-QIVi49ZB;l+677*(zT6Yqg_mG%s1xcyk0tGqVZ+) zrInOC(!?q$P9?6f99CQRFjX(E+PLRjKiMm%PIvPX;X=NzUXBzt#bq=`qI=~o(b+oVKUiAV|N-1r&n}!?P z-fOarcO}yRQ4Z1B(mUl|Qxl45eIRtAkwpd$EjZ&+OJzb<;?4&>3}OWeg*p(C<7pgL zFJ&zv=P~kKE5z@O0+=pXl|x@I3>Xv zYO8T-Z_D3-a3$EO$)qF*t4@O0yQl`X^tIXF!EfBNXPTJb2>A@fYn)fzJ1S2IWImgd zc1&d7h!OM&_TD@TaVDEU(hB+TryreCmoTmQ^ut_+u=0VMlY8<%S5~)AXB1>6Dt#bT za-O4zZ2E-LU~@Fe`f7jeZctWf6*};yPcXhdVsl1dXDN#?3j~f}lQ5kY2CVqQAr!@L zb|vJtYO_*DTwjd7Jk_VY3eC(!vLLHcJ6M-jAn6FYN%`W!&U8dGPj17v`gA&i-%@AC z>#QJKI9EC&Q72ATIu9kmSm^k#(;Hh}=spcqu_YCqx6hIt)j8B_YOb)`RCuVsv!w>~7T0l^neR{c$Ql%QS(?OUvfM?qgQtFvvvkEF}9y8XGi6*P)~+ST65Xpp{c)LKZo zG=s!F**r}%#P^qpkpTx2#awKWguU$H38IZ3aP8Pej_a`f&42*m<5E2H21BT@AbWL3 z$Pg$^T?#Y~h$wCeFt=`EuS_-`ARrr5l?+$W(xCf=v10m{kwG91SZa&3vA5KADVpBk zaI-40ZLcA?6CGY3Agtw+LHMfaBpH6%Nk>?5RX%C6A!>tk^_-CE8l&npGC0fpQzNDv zCSJsz<{-XMCRKKR#su@6PEwH7O?XLE#?qS5tQu}1a%9|~QN1Lh&1ReP&OMzSZw6&M zrmpn8Z$$)OX14o08UzmPppddQh_f6;N*fLQLSRnBWvm&*#94Tw3!PyYbBGE`J zh|Xzh=T5`uzB>`q^&&pL{`qjg001BWNkllgdiZ|imTrpk96A_bK(8i^wlxlxrU zWOotjWzC`5iT6qGs)J5M9zjuNpS>4ESwlUn$LnW44-lsU1G35yB{HdScoBXM=%`?l zB3x0rgWxh?vzm&CZ3L~Wo)3var$nvQU!qDTBX`@4+M{o@zMdqswvH?$N?I)!Au4$_BOu zL0CQlyt2vKs~L^HH1kSje=;*s;#SkJg`qwi1b0mnxM8Zk{I%hT>!%x1J@m8EDI{mv zGm-9^Q_=Vjn735_jrb0Sn|FH1SUt-qGYFh)33CIhHNhs_QHP#hFn83(_N?AMbAy^X zxbZ~HCbk%Zw(x?GMjdw00IsI44g)Z0ZR5$9B=*TKLQtTHijUQ%;ZtH z#3mzih{XPRgB2Ll|sA zSj-TVEfM7kj=W8E5by@qVhte2#GHt-LiN%B-hmq&MpBYvrN-!GC0(>c7VR4V>t3V4 z`)x$>qiMXaETF%X zQg%4HE)0qv!Ud&7U_wFyZI~#L%|2~MSOCn+(X`|iXx2AF?a*DHx&)X5eAAkyS5P$B zI1R$9!_}POCb}>FZTYoEH+Z(vN-M3jlF*FZG`}d{b!%&-m1byV?<=4i8UaI)?#h5K zfhHFsm^0oXE3I@#Y3dXEl>*He!wQAmlP!>2GW=_gOglr1B^Jv-y?0;rPH9MN8&Bdx6+ohdyN3%kV}9v*YDgu?&d6r7*=)DCPa@*%G>|z{VrYJ` za+DPDAjcv)jAS5ELbJ=`c(ElAKlI>d;1}lAoHA_lBVxvrv~8Kdh0=-)#@=?H=d1|(K zm#060s_k^yQvx6xAryU33eA*wH-y54gco%eXD8WM#Oa@#neVCptjY+bolwF8nv({1 zgXU$~1Eq$qsDDu3v5kGb!4`~mrGtpz8`#v&@Re?hhLd5qq_*PNcgg*r_WsS4jv!TW z(CBkf$DG+8>k~J5k6sk*(tVk`@xK$3wec#FJH5A2_gZLOqiL+p8D}T&XY1Z0ERmH4 zGzVnPrA1$YZl1N zIcGtc-49nWqY95Pgu+6y#;Uq|aww=8oyLPTO8)uAmZpWg?GAZwc#^%@ErY@*ERO2u z5LMcnGg3qoUwyH?NFVibO9c%MYwOF9S>psn}A9)IyzP;f)(5ybqlL z@F=PRim)V@$ctxfMmx%CrkByaIzl7u-U^>AL2q?5sX|EKfsmxy|VmWbe~ z1dZa}i~Aej^>N6}f6QO8D>jXKL2pZGGg3KVg5a?fh6b!II;z-;j8xK%# z+udDSq~%6|PF2t7}2?1b^C^*Bu5SH=oV z8X&@0R70gmFqt-6xe&~{o-Y&=SUnY!?e2#@V(mq#rQPEKQ*UcORsu`mQy6Ag1l%kRF_^}qeo{%{gND_lT&Z9&L-|kUcrn;s zSpn#lifUfgVfo)W!>)mdM5Ho-kYES&Sdc_BFyxP$94_k5CGD?}xabmN8XXo6pbBa{ zn~5o+Wi{0hqIJ|@)Pg0hy)}9;NZdB4l3KNjYMR#QJy%V~6=5?J#vQVxqs~IEJ4N*g z2dT2fAFsB3R~l3K=8`SirkP?er^e9pjDk=3w=HY;o=zk&W=TR2AC*Nkd+#%uv~nZ5 zJW_lh*fP=m&C{rxS1s2ZUp7l(eiS-sTs>Oc6rX*NvDa)BK`ipxk&RIP(cVhyn$TcDr53Q0-ipwd*;H9%79WK$NJIQtV%Uy|IxI#wgm+lYLi0KSSX~ z6-%%{)KW8rjzHkdI?r-u&zxgU&|0%ad`5-R3=Mg^sZdu`u59rcFJDb3z_@qNT0tGP zrls-BjHJUk)aU|=Cx1)+J`T(Xp{3)i#&|v7Is7FJ?f~4_Gkud?1z~&LShDXU8A~v; z4*+wuu^`3ycMRU8L?nA5o6Uyga5z_kEgW+VgO*3Ee@ivW6pXr?F-oPh#m$GnW1-U> z8?*k6YFz`ZHYFY?-=$V@T)43OA^CLN#Wi5+MTO*uV^QvQ**3x?KEjBLgqqCzsxqMC z2qJ}{5_9%Ew_WHT8$l+MV4kbul4#;SYgL9n%{=goSq@9>H2l$&XANL(*tW5bH83%2 zd}|;B3E08TDrD2^wah66x;pZ303shsaX6Qlmo-04s`xWNYBePY%t&Sgcp*iK8FR)x z6}Ec-$WZ6gb=r0spNaZ4@{H8jh8LpK*$jxfQ>7!3e*2SU?p&%FM96tHEFU&G3wB4d z%FT<;qI*R)fti_@3Me&&g{`#GRg$knVI4hqsf(FdRxE%(=VVYoh^X+X|#(h>=KsD2aiBfP+IoO*3ojhsn z?=us3J=#pi!}E*K^F3I#gKFn@5aGE-#?DGnv{KF>fHPHfc~>7iER!#gOZTZ4s}Ae| zQ_Weh0u7j<$RLAKpSy!WzAt4~JG;Cn6^`|rsB5&K6}3=A(m=8b$%$(fkY&4_LLCNHz zKrgyttIcMUwp#;tYi+2_zP>F#Y}Z894P6H*RFdl9GN8HVZF^7hAW9(L5--M8({iQ} zZ!IJCVvC@x9vzxzWag1DVU(~rl78$nUgvoL?li9`mNh`b4f~VeClzQAIs=MTsiq8@ zHj2lRb!R1bWY?$KxYAi#$}jcn>O9r>nL(#IKeDlHw@<6$N5b}^I^5J&Kq-FW%aJCB zMP&hHu*yA}Zu?!O^8mHCM;EQUE-9BQK#RG<{lC)rXayZsdN3reMxy+1S#8VnV&WB> z{Or4-cZ0^(#8H{d=Ab_RVstn5oco(Gi!ldSsE0mrl_^&?ObYtcS%^nJFRO}9Qtu?? z`pLYX%Ssogh+eL=(#=w_u4m<*uX@cL4%VoEJLG?%n8LmM$B0x@!(P2FR4219|~C?TGZeAXoHn*pQth`x&E)+Fs_zcfBgXvyGUUBX`h@H^#dap;HgZ^UnfP! z2Fs#W@Vdol2|#k_BP-D^^`E3I^S@D)X|)9fU|FNfX1G*7Z75(AvU3B)NwL!Vj_wX0fF;(^GJ8=xtbrN22%5gnq5zjv41b87=b zP3lE$k|CM>e(=#RA10e&%4&ly=ISZU@Q|)njg&%miPVZZEOXzB#8~oK2l56ef>c~B ziHJEdbBxJMM21=fpd#m3fCBGUUKEGMjLE2y(VnSH8o#_2cx-~ILa7I;Effe zAXG_45V4ryEMYGk&Xa>2l6 zSmFd_H516%e(*|Q3`{l8uu9{iHBvj69dCp@t4GcK8E@CA`xzdcRaoDZRx;4OdT~4I z1%!dsw zXN^kJ^n$FcHq#m}kEQ;_HiR%yU6n8qOU28IPp1-lZPiM#HVT{i)(RUV#P+!jBcU=F z`tiF2D`{4{g%m|z-_p~m`O+soI;DtS#o)r{r&84;zC&`}SR#<`L}bv&KBGBP{?Y9# z>Q*!EU@JX1qDsJ4lc&LyFNB%gePVOWRQW55T%O;OUFl}X2B+d)`HIs`JlDS;+(%6P3O*K{1mFRY*lgv`1U%jgW-{bjUa^Oe)KNuyE_AY?D9SfmmPUY*@uv-!x7lT&`!;ep)84&D>sRBXVpgNaUeE~Y8Qm*TC_Ud)E?Qmj0 z3~dxA6TkriFSsG<#bKXrG`$@wu$-AZn6NL^{<3F2)?eYPzkMO@KL@tB;37o!Jvd@M z2HEPFe-beRAfi-E!U{=Ywj8Uk(*^1!f@8t*{|fN5UiW$vB8bsI3Z()8$+Bvr^uJtd zjDV8Vdf7^}TE;$NH;2InQNgk`o|s)t*!3_A5E(jzLTFs;aAP}#d8BW07JHdNiBTdd z*rF`bS7nx=$Ye%N=tFNR2BijWwIPj7)2tle3G6h0fQO8(EE_PQhH**v1meb}KClLa zp||X$ui&1Pes)atol|LEN-3q}U?>yYiC@qN${xzO7k^$e*)9AI%As`@X?c9hqOS-Smzm}T|!^kj0phm6#mnDi%VWz zjcpnQNwo(g9F;reEIZ>9trTX8ah%ozawVpUnt^S_;Tk`ee7uyPbq& zcJIk4Nf2^$UuHdu4KO&{y_hVMVg$B$&%%oPxERKQdaxLdvlA7(M#^s22AcZC{>RWb zD~y;^N)7`7>h4-IOx0=DKWw;=AeZJHsvXwXu4X|32uYiwz3e{c5h&Cp(ExK_`k4Vv zD!)VCO&><5Qo~rgu4;(6`mfKfz)8MjBe!@!EV%6m>%(@800 zb*L`TP3vf3&15pWjFIascZ#}mGrFIVjp~lNNpc?pLaBhZ5X8WzxNlLKs_$xO40!pO6?uf5^H2nM)UtFqrh;XL|7~Bfx~t2@2I3;rfF7H-mVp-P1Cd2gG zn){6oNwXZeNl2)?kJW|U)=F=C&(bJdL;>k?)|sSA=km>>MN-CrvxuObvNlv`D@TZD zDt$MRYdWJtOg$lsAN@=LTdI3k10#peWx@nt#DAKyVKWkoQ0?x>$CNV=}w%P zZ1*=zH!4%$6tbP`>I(v`z&VF?r8`LbAdrbAZ*=E@^HSLK17Ldb#2ju+fd}4ow?$RA zcS};6;2sm(xA77ct=gmK$l8UdQ%o0RGFmsI%{j9k)zh zYD!?vIa{EE9&k`#kBIaWaRvzWEApP#4d&acuS?}qN{XFRi7%{C#+W&2OrWxS`!-w7 zNXbHlu*1$)2WEjQNFf_XZ&D%~EGA0KIi-}5Rj9H;TJGSfJYeIO0nV8zF*0%57<|uE zPOtK_!jd*0DSY%uvJgQ5_iv1NMwRIhXpqX`~#vyRZy8S&{fwd>ZKtwn3*{nvf=L*i9)s!z#u{n zyeEH6^HCwA-Q?jjAUu{CDOI{hGv9o&lv!%Wwy|$!3=ngvp~rSR!+Pu8zy>H;=!|Ak zdj-rToT;#+Fc^t{IuWJhi6xWlJRgyt#(%ldgEkWm%CxLhfq%m9BuBdvzdHphU#$AO$<~9N% zgR9MfmK(mJ-czAnE!svSR!F1lqBt00NB#+i^xK(S>R-0}c* zfs(6-QwDSKE})jnDvfIN{$8D3xxRlr+#!^++)K^}e$IVkG+QwZKl?wpz4 zj_;iH%Md{ypr=f68I5Rb7_!*B+3JfcjfhJe%{xpM2iHZ$t+l7ANrg2~SZp5_SMr2J z_H8{uk!)*;=|ppt%;Ah1#Q6+Z&cS3jWBCn*enx41VY2`cQ$0}-34O6oz&YpLF2iCs z+a~ll$EMFKI42nI4T3La8-zOIYXw*JTJ3p9-$o9#5~E?Udegt_<@()N0je$z$Qa&9 zq#*a9wNn%o%pT-A<|3xZW2-(>__xo>Pa^Bp@QGpQZxm47AXi6qhvbD!r>TJ6nd#Q% zV52@KADPo;v)OJ_qHuU#S4Gx5xHfF63$C8ZEz+51W7}7r$`exGSUC386~Sd>W)!c& zn{(tQmnSZZ$<*YFZKROPgqORCh^9K{S+1rSCZb96?APs1c@E`*%1~&Y+ksK97g5MW zO}Fv^u9#RxRGy|J0Ccqh2aq`o_k9-eN6#@x)iJvb`(pfv`=5^GYl}goF+)i9%?1O| zcXZt6nWCxTiJ8PS?SAImn|{iOW@I*@35{Rclmh7Ji(VFaFx7;-XqtIxat$8a@JL za8eg-6wiEj*v=8oD;~K-NQ|r_gdLC=n?WD2)ikn{!Je@bCLpw~lg2c+1cbedtaTE| zlkE&V%c7o}tp{t%!0^qCrs%ZYZZ_LZN(f%MX!W` zHAAnLz2QXR?&~#CK~%#{(25-sBk(&ULbf)z>_<)_cMf-A{7nAMAU$IOW&7Bd2Tx{QeYwGp;s zOdaBH0FXc#JX8xgyf%IRlqtfM0&zf7m#4ISPAy~a=qY|k1|ys5)~YMPH=2RCJ3v`J zUOTk@j;Ksy@Dp_Omjv!2YiKW>tVLC}1_6|4yWId12Bmgqwzm42!A&kbPlVoSaQZnwssTkmSkVi?I3(D({g;bO(eoWJ;9%JM@*!b zf4h+LUc)2&3w(1R`YA}9l$ihsiwd&3XD|^ZN?DB)Dqj>-BY?7f!}{?r5h1he`*p3B zxmtO1hsZAgv4zgaaM&!F}Mv5NTv6Q+oQ{+m%*YOd?uR1&S2hi$_O^x%?mHc7I@21||F2Crc8zk)i&OUrY*DMA{yO=DFm!wPRft0 zmWX~RdNU%>Yj}+X0RR9X07*naRI(!`Py&$zhD9R7n;)J#v#&&rXoyNhiYFzp1(rRU z1B0{U=;6(cfN&sjPO5$~h~yZiYBK^r>?m{Cq?{?GsTwnZGI2Jbb(eQJ>zBn0N+5ZZ z5=o$D*|aY9uf-SvQ5MLUh;t4GathzF7to+_j4kem0O#!XvZN!M&G(QXhdQVJ0WAqFe5Io0MwDMb922*;U`i0U=eTtCT! z*g{>vHMXx;P<~R$pwyPZ??MJ^+cvWN<_yRdu9U$HWC9aqaY$6L4CpH%!meTw(t#A& zJNT+5XR4q#i5>_aKvs-QLsmBcmp6pm0GAln!W%gQ(s@jjM7tAs4lE-ppXCcOq>m-E({Q#D zQO?;JEP!~0)B5kIhSOir%lK~2(i#>KCqdnrSt3f$fN8z4u!xFSYSeDlkHeT*H{fcL zM{xq!9rFL|k!#?4D_x&T0kfVa|xh^zH; zC8IJSgBgB4bME%&xbKqVr!@!?%ka&ZKlGeG#%`A%KYqO18JwJw!AcbJtYl+BJoa}q zMe94FV2TwM@Te{V%+(elhYKFu11&aSkLg=#E~j-3jP-&D21>_PXqvs~9qSmBiP?ey z8-J*~9qGBOR5GeMriG^_YF}17?r%0k)jxeck<|(#Mz)E`2bbN^9OJ?5YFp~3JeIcG zO-jij_l4x*mMKg|E>Y7*l|BP;chS`6_&f(PWq*Fdkj%5MwajA|6;9YdrkEPv(f!^H z^jy?rw(Y(ka6p!uGgw#+60$`5DJJrT>wwl&5;y{{)!~fYJC3m2Q8;5&(rxC8;fgpA;wKdaWX0he_fI4BIY)kar1zin}*Djtxp$$>G!n# zl$$iLb`RTl=u}NC#;JO z!ulH*;&KrZ08u7fsN<%xjp}Uo?7FmPlZ}(#d5gYH3acM8$J3~Lhf*L}ai;9ahK<`6gzVJV|> z?2}4O4sN=!cn*V+GZXn+`^~+fDCT%Cw98751$$NJ%kiGlfBjo2Yr2NgwSKailn=<~ zS9y*dt|ivEg_+o;wv{<-`Fnw+|7T<%5fhl@TQf3*nZS9lpAhR*qxq(}kd+ROdQ?-9 zuv(&MIyA%w_F_$1C{X$3yOax?2z@U%#d(E-j1)&|0%P-NyV<0eS%XnlHE##4`dLjW zDzzoI_QI@dzdZ5Ed73&!x%M&gu6D*NPpg~Tf_E>!dTy~ zr(EOXA?(xKkM7BR`rer}rdfz71;=Ng+MueW$+m4bM{&`#Ux&3k9<5nR>e#e-3Mn%? zE?4(viNyI|FW{e~Ox3HIX+=+;2syX}9UhWnjxmRRr2Fl-{l!_m+ZqRko#Sp*$V#n7 zEvGQpQKZ!%t$jC9o}WzKT}RA;V~V>(o|ma@?3w@ZZ~UECyy{1$Qoi@Ip8N-Y|9?8V zn4%4=M&n8+5zPsssdb)BB`r5I!Uswhsp)M|kf!jstkk3k4ZmNlzgF_Evw{*X8`Fyh zpc>TMrMQqIs2L$Bf|zS)TIafCon51HEUm*p$#@`(%aWBeYHqRTdz2qhFzTV%v)1LY zG$px;A!LRH(Q!7yb5T)ZGgb4X$q?UPWNeBEs=7LubsBSoZZD`R63| zn}7GlhCssl%(#(F)ub3d=DSvHiQ1Wet*@#=w_^BPU?D50lL3~g;z70fKY=ushV1n; z3adN}-|6!rH{Yp7fcG(g^-Kc_as0Qm)S@~y0D>mm%WTY$@T~#fof=b3Q2c0pAnp1w z8~o?PJnaA^&cEmTND)uoe>ImEDts>^cP#tbAT*6^sSQCR&dtxy>=e?--*Ru9Xg)TEvojWZ%@ikl|qqNbq!Cn^NF{B*!N zY^P01PAWm*`p_97YV+(v- z0(n}*?%tmF#IB)^Q?mWxG6N2&Gh$^V$JWxM+8A$hpoJ|$hr*v-+iqkBh5!8K@tGeo ze5Yi7#%v{P$x;6x=PXHlY@!P5yRRZ z>KtZaVI8VKMF%KnI+N3Q zj=q{)3rLHH(^k&XB3$?x1<}L0>N3LHFFw0&C6*`w7 z?wM$6o7H3+Unlj64^wRT8G3nd)6PZO0dYY(!Q%}Urm#q`sO#>RT*`K!YvBoJ)xTQ+Cj<+=d$U+D+Mj zH%UU2SSui@E7w^6$$hC_0++~0HRc$RSoLfzHTHKS$WlYep`2k)#{8Blq6JZ~mqxB@ z?9HR@!2m3({W@dC!&5-VC`n=;h(RSo+t?s#?>>eeRj5*lLBs^?rW-wRzhT-bfn&YF z(2d9Dad-S$KVFPb;V@^W;kUMk$bo~TWm^CMwwt79zGaU(i>bQ#u83Y6SFpOTDw{-o zl_&btK_wd~^0)K@0Uyn7YBTeQ6-$aCi~CLPZpQmOc&YrL5blv_)Hdt2-g0d!P)Xt9 z_deCG!9d47n4{?+P%G{LHI3g6s;KooP$y_*XG>b$={VwCPW7y^B#&-VYp@FAPE=v0 z-s4GfgCxQ+Zc4~sKgKa`RqY3q?ezmuPL51S z9Lx7&)sEuu^VTZ6(gO0ObIQg$LjlWEs%~C3?kkN-ul>%w@Myb-L-3X}G z*$!547TXqPP*q%LmTz^B%HM}aq<{5u-qH=TM$_FQhQhnTn#DG_JUXVgrJv$ne`F6*(9x^%P!7*VgkMs;Vv=U`oAm2X%sI+Ij- zsNPo%Fvt*}4R{?43`8bMtTBrcn2Kl^khUn`CI-B+-walHgNW&aTo}LoHM`MDGmf%N|B@Cp+j^JAnte5-@blC>FB5C;#Gd)t zpL_lHeD4qb!t3AowzvPzlTWkohAhyBUV{fv+K_x^|^c-_zZ{I`DF|MBzx@)zajSN|7ZD;Iz05B`B~ z`d`2CskgoT%l^#Q0C=D0Jo}r!>2JlHU;C4<`})7~*8sfuMIZNdU;7vR{-6G`ull{; z{k_lpjFG{(tgMH1&V{ z`0)?^&?{g0&wu3q`{iH#-QWGaXFl^ip8MPnc;QDs?~i@L$A83!f9OHowbCsUCm@J3 zU31-&v(n^(_-b*E>#&!2x*D;<{+-n@F?Bcd6*O(7d1_RxvvDJ}+RY^OMOJJ4a2;_? ze}0uYZfWbR+fy^VXS5fbZ5|N;NJYzzl90_Nn(J6LUOI?a&7j`5KIn?JbwPF%*Mp-0 zk58(~cb$k623|lnRl5Ce!<3ke;T|B*Ehhpe-G{VkdwVkYbZ!ZdlV90C-Lk`6pr7I~ zoCWv=G4OczSh~f~AXh+1wpJ)gTmWnVVS`s34AE#N2D;XED33Zix2?=(dz*jp%#ck$ z&&|AG{WM(5T`&r9v$K4g?|Yr@HbDe1Wgv~e!fLQ&g_f*)0yZbXJ%}nCc34}t_T5eT%iO74gWlncxXl+V5$&4;0Rl4~+n@jwB7R$iL$*ptVpcFEJ44?l<>yiWw? zWFecaXUX>|yj(JF_4*e~oRFZI#L*`ZBWFU|PB?D!)%J1pK~Gv7aF1Bd~$qkPp&>WJm^RBtG zPiH47Ti%m@WWF{#Cj}bl1>d9uEOyaMYbGiAzmbzSec&tUS*q_F-TB(1PxsZd4<}&I>U|C|SE`bWG=Ad3M$A z$MN_Ik204>M`Zpj-}+tu_&dJaf4=3dPyNV`z4k|b?6qJ1rC<0(U-)^h(fsf$U-ONB z>wk%J;i;$I_TxYC(?9+bKmFBT^%bAevfufg-+le--}w61zwx`j=Li1x zzxOx$=prj!AK4anCCH*8&2G2Japm4chE`@h+pk#q_IhxXu&=q@_zX^h@U}+;h5?P@q3sr_ zZGl1pT+{ovIW9?h{97@8Jw4H&!$&T3az#+)X{=P0`LJon7TZ?kU2*Yjql_{$7@Syp z#Xg;piuJH;Q%S#;e>Um>$KL-tVlYzHitETQXEK;iYM?L&6LT{6W$zqmF67j1ZAir0 zBDSNesT837Rj+c+BxCeeL;3sUE(18XIfApka@M4RNU+ngA% z&!otP*!wxMmIn5ggW3aEfG86(cq{V7LkUZdj~dIwIT=(g{lrKTr-dvMtoqQFNdvDm z+Gqy|DTX$fPeyKU63REE#)sO`>fb}qJ!3!HF*@IJQOy;{ai-cZ5>qB*nHU6sGJ!w| zWqwFkG9ml^tub7Z`>fi7&)-VQ)$mb|clD@OpP=oo5D(hsd)Wc99N6c@!7-ZK3dJin zrDAAI)9lZCK~vb`a?EjR;Lk!_|9cjVk4q??0t%grF4PYQ{5gyI9Gm&FO`)SRKe|tT z=;g0+l=j0v{6pXWegELE{OYg$(!c%{0N?Vh-}Rv%{DB|;aUUa3U+~e-6Fz*O=REs^ zKIpm6dh)&A^sj#DSAO-^0sL>@{EuJqNiTlpdp`5UfAnMD|NY+g2Y&FM{q|el3gB}- z>(icm@(BR%^`6f>rGc;c(I5Zq-+n8A=RD`VpYxn&|Hi-l%@270_tX0SU$303|3CcB z5B-o2lKQ{&W#2C-^LxCJFVW?KxED_!jNk5UjD+8{Nlh zxa;te&mls_-|3J+^NMK>yl_Ke^Ko8WodSLO@8)8LqCZ&!Ddd<5bFNoY4ZRTWMZ3v3 z-9gm|7N?Z9+myo7DwE@=?nW*9uE=H{v+fw=jL*6h&JDd&=i*8nL%uWA?BxuFz~1{4 z2{=|V`V5GCT?#Z$L#4X)fwH03?}KHcRBzqHdU!x~DtU$r3c>LsLcg%)H$x4;-)t=O z_vNjoAqPqSy@@IO_3;b0PN6FAD#LS#j~iPBsVnZ3qAyzQ(=&h9yWaKpzvbH{tH1o0 zzUC7@;Xjo7|KMA{^V`1TWdQ!scYL=3%|!3}hyK9VeAQQc$OnJm^Pm5bk}T)^U;Wqr z-5cKUrgyyK9l!8~H~t6z{=fU;7k%7|U-WVR_fPz^0L`EKIiLQ4&;5WCD+xeQ=KuW9 z|C!JE>`#lWuIm3^{)MXk-~QbI{?WJppHlx{c)fZ<|JDEIYoGVLkC5x9pMK|Sf9hvG zoqf`rH*apgIoTT$y*5)Y+T+ zDSwk4*DPblS(PQyE7{N5=%s)&56TiR;hcH5+wrthWPG0*T&b>X^#83~P%BNgzCUa0 zwNLvmKPEnmhz`;2ZX61a>GyZIIW7t`uNZyzUSz0|s?zyU#*Qk1TfLaN^u}{@*yO6b z_$a`DrMqevs{ANkn-pDTOZNLZ%skU=9kzzmnT&mzt9;6Pg?O?C;`9oEqS>NnDZfyb z9%9}xBPH6Tgbe}6IfF<)0%*H%%vx3~kOMBp$%mDq%LN{={c~ ziX>p>r=NcM@#Ed|KJvrGQ~1qqe#;pf)zhbc>L-2f=X`o|^R++uGg|*oesNX*FZzO) ze)so1{q#HE_{RU|?QeVg6Hh+z%=dT?dGyME@nawMVITbH(IWuw_HNI3@gM!zi&lH3 zvr@4ch7W719rxnBsV(X2q_)Z2K5i0ReS;o6&8#p(9s8I9#B%Wy!2tw!f=;9ALud49 zhIdxF66)=`md|)5WraTbPbjyLxg0I4$()d`t2Te9tKI{oJ03a%aFG^QsPjm<18YI{ z57kylZPTv=0QONoJJ(Hqw|uK~bTt$p5*g=r4KpGD49*!0aLyJ$0`k@Wz>lwDA+itS zo%KsSn`jkdXTaK;Ytj%Y_AL)*S~%B!%elF4aURHP8%)c&Tn7!I67`5QNN49%Ti!ox zFdGrlLovfUaD2a#tjJuBEfd#Wt-F0}Q(T{EP*021Kp_S7b?BgQK!Z^gsDv^8{C`sT zE23`>!Fq0_GzzGjNzjHUHzOoZA)+9l~yvUnm|VQHh}QnV7U z*|ciB=-x2ZH1K|e&h2Ae=D3Zx@i9U6ABwNL8=PLMWno+X^3eK5Yg|S};%IPyvt<*+ zcC>WQUJ=&@qMTyIYEn$VtW)69)CNO{V$z4s@CYB~(R_{=1wn#OoL4xc@bq|fWGa%# zREfisaqsaU>bKY8m`&Y}HJ`|MRLOqQ+eZ#;(#zT0cr|`R8D3h@P(7o$gc$N#BW~>N z&uBz_+auI|MvCiNygt2{#&7-P{Hko@_34?v;TQjvT>S7WU-QGSe9bV;Z@&30Pdw{M zxqj_WzV3(r*{fgwi*Ndk-}tR&QtWoS!^$4)z=rFtWuN_7pVsG5>i>#Y|L`kbJuK%p z-~5&*o_yjZfBX~v`Kx~nz{|ep`(OF0*L>QieB!5n>L)$-9NyL|T|KeNDOU+pKGsMy zTLjW!7XIj*a_Ep{C4BNDYZ8h~xC?OkL!{``v@rc4Sx5UPuA7X?Lu;j#fXZN5sI7-ywxPD;K7kzi+t|QLz%T1s)kzke>g7CQ8%?(zV#QjBm0{kTk1ru9D zXlR7!xZ2nJdtlyUk$$hlZ4426gWDU;_P-xh>QiFD`{Qs3%6Ve@S}b6EuJ|u z3|v-4E7&^(&P0@%0ZPO8)njH@99WTT9^2T#Rx6ra#FYUvEJ5dFuyC86uc}c13b!K>b2$5l)axOpg%PQ#rPV}<@%aSE$mKsT1gCTRH=cjSvG|R zk#@#)WU8jyj3jTwj{l9|WP?@4YSaRxt4Q;4h5gvpiCQT+tmV{G@_$C_ItANaE(VLl zb*NcWVE-8@_TfOb&US=J6&EXEg4M~W@OtTQi&M@Z9ti`_uM-vnqPm!siOM_%|*U;d?E_|YHzyrq?1=`NA4E@4?GH!Fq$^0w^70|ZYIS=HR1F@5hoT=C%O zknwUA*7R8}N1|9RIRl5IiYq-R%Jwm>{{-Ass)*6rZYZ|1YkUXEn<%84Om9gR-xw8e z!J5j&;p{#)-e965*yWg#;P#RA>hdj+eu|N zyqxpECL}!ojpO{Zi@0~h#MDG=jvz^dY#cf2D&w<5qwfae+aC=wpTFsky!o*XF6M`T z(Iho}!DWWq@nzhmwgCVpHwQ-LuzwaV_Sb(z&wloM%f;t??q|H{MIZaJfAWJbfBCDPdfVFp{Or&D z!e9Qnzxo%x`YS){GhcFi)mOS+y5|=AN-Onbi}(t8taK*2>wd&{ifUu=Zj*od%LY4K z4XxsFk|@9vw^|VZ=hNWaHLxH$m0h26&N(v!oS778D_{DX(`~@JXFI3nuig@LFya4a z@67`(D~kK^s=oKl49hI+`!ce~BFHj85D^s=K@eF~L<5O?@->Oy_|0OHum02|UyU(~ zON>bb1wmy~5mXQmTv%k^cMt@IVTNILW_h>k_eXVASNG|2?!E8bH}ht=#pBGm=k)2N zy1KgR({=h(0ca+LX(YNlzLbLDo%FB{$ap2irx>lOg`TT1ZTg^K&`m8X5mrvP8foBK zF)l*k#`?{fDspJxQVFCk2nqrccm=fc+XVWWA_mAA14M}O;spi$757l4__S1|fm?`n z{}~PKl~8CE4SN)B z4X?Tv`X@fp15`qJ+2O&kj70X0&wx5lq>>lZ9x)HkOe@$QBvwp?4ZnKJq<18$4%p1b zVEVIr=GByjtHp)R{EmvoXvv7m@_G6tC^3VCo?3{dCxsw@xHT8 zkE2viM0Z~&vCL<^_Z_F6a)RdYvul3QN9E0V%LJ7Wz)Qs{u!s;bn|VOTzdJVkN*|`{^#s(zvlN2o+;ad3~56lyH{uizF{z;LcmBAOb1E0 zlUiVYqAJ<!fl1A>GLo^Lcqf`qTpuQY#83gDNZ&y8qX0K8g>(+t}0Xp)! z6>{uE7EzwSAw0D9N)%0^+5BSfSOQL{=XW3R27!Crv% zzg>xtbR5JVWXp$%N4|EfmU@(fn4>l;eCX2XuNI(3@?p{mcUy!AG%8}8ON!)>fuGg1 zifU#FbQ#QEuSv${jI#@4s4Phwk$9d*I5$w^421EIunr(eqO zzKn`%n8oYWY^&+zsjw84t>CF1l%W>i4i67$9fH!7d4c67@H$}4*`L=^Ij8V00&C;E zCgY^yGVH)Iuem;u0wzMz>hc^EPxjh#cRu;`jkl~`y}BXgi?Yea0SD}-7rpln%Pz^5 zoI_1uuTPyil~0zfSdj_YV^2KEw~8yD-RpnDZ<_0GX=J2*R=$_yA+CaSR{|B;5Zv3iuZkHeeDW6L`n2R4;Y60**9>R_(5c2Ry3 z_9#$Swontfp?w|IhKw;3-#BV7PUJmxeDGq00T^q5l7qlR5xq8|D{;~&{>PHB@LGW9%)xX_1s=D#R+q$ScjybST=%aUNaKV^h+#-BoW$l!tPK2 zmY37RUBEG=LEPsW7 zl9NgWisGcuI}#yKXe%(9%Cj`3skIj(p8=pfrQL3|!q~_QR*px=-3V5i7S&A(9iv7m zMc6SqVk&Eui~uM=vrG8RYW3DhP~2K zWs#g{b5nN4Op~^Ud}URH;{NMq0!8WekYmofm~#W_*r1?_F}2mK3@mA4R1Iq(wcYHq zE>T+L(Vje(Mp*`IKd{N}qOp#sx*}1$Yp+z()CH(^olEMvxnAA(L8`NQe*jebXYc8Z zq4=yOsmzQozX_ylv=6qT*-ShTJ`6-uiZth-{bx+y6aePUoBx%sowM?#mvok0ykzN> zS6_eerI+*1O*h??PoDVgQ+(pRKlj@gJ^jqwYPOqfyb+%~F7Pqa)TvW8-)t5DtXjG1 z!G|B!>(9?$aLvzuIe_}FT&cIR`k#0H#lO1YH*406Y63)Tx5L{Tii{6w11GHhSWmj% zn7PI*pS)^zNE1hK-nRlk0OZ+$wn>vey)vXBF=be7^)Dmu0RZ)-SO6eG4`x}8&p{)3 zhSU=o1#i)!bzG|rhAf^oq~2(qN?))2l#LOAW#R>M-4l=}-yz@W_)e!o>MoWflJkaoJ6`dGP)jpiHf4fqKn8;T2L8otwS*4&oO(_m4b4^rv8zh)FXj2 zsT@E{;Z%V*73>U&5WqrZRurKL|O!TtQHwhB%Pc$)}&8b>s)y>+qgNs9&^n{gT^+su@4NcXTSgv)N zyfu4yQzlH~?WV*_%)C5#0~EyTprKd{Y2wH@9hIOOd!;8atV>by0M>J|Ms}D~)D;_` z9X;vDL>x_c3sL{GSc6Dn&)*)a$vYfzs9y(7m5I`X$aS&6bPQFJ$fW5##h=NEDJ_C~ z>f=`Mfh0c3iZf#Rv%aB%JlJY@iAo1_%@Q&dudqEvQ(HO=mi+2#xZBrG$T>-tqL z1W5*jb=>3|@)g1sj!YS0JP<|TE#RK0IZU$PW>j*o9jN(@6rRd~IJC)hzD$ui$x^nS zh)>BNP2;(fmW*{K%D3Fej!`k7ApUlA*pu24vR|=d>btaittWK08cXKwV(4yjMG+IZ z7{nah)E$&Yq=cxr&9QHbLq;)EFzV!I2ZTy30uE-Z-<8aaHRJwx$)d@XQPnH57!@L+L5&K?yT~=$Q5kndnb?Gm}uqhe=5qTg4@-jQ< z-mf8P_2CJq@Q~J9s>T;&_idb;q*PPN0RUj!Z4rQg5U?Y@Yq!!%N;(D~$(Nb3+QyW! z#6t3^tjthe*L2EzKE#XYS6uR~R;$Gqg)>9|7;kc_JjN4k;=ic>=phI`6?b zg;=8#S*!F&3J>Y@RaCB+bLc(sk%)MIV3lD0{)(-D;JdT-o~(m7Z289)^HFw`glyM|ejrM4^MO#mWtp$_1Q0{r7WxR!Mbw3Xg_o}C>4 zBDC5q=VU8j@*%z%Lol;hO2IfmX-|-M=m^Mr@0?>{@XTqHdD#Q;cQsiYFrCebr3c6% zH$-_Jov##q#?YtXjXiRR9>@h@iyTBCLWk(V6Y-uCPG%h*IuyCb3c|Un)MX$I_2t9e{5=0Ml1R;dY!G)0`5J2*23`9VWoO{iydEa2G))b5 zU%?+6sH??h)vo2frf(>VieEY@wKL9bHB(MpfN5$18}8YXPIqFp7R$<(>avBzq#|i& z#((1*L}_JE6X-GC4c2s_f&hK=X}>g~R#LIrV{V8QyebWnKdCcz>d9|C_@Gz+=!&cE zx##``3m1)!j!vJx=`K6(c<7u1-thV(IL-7K)4%vnpZd;)Ke+kk+h17t;aYhQEdx!=Bc&6+hf`zM182eDDE3y8Oy}?tNgv3ojPy z|FJ*)&~?}S`sQ11pFe-$i;EUH=eF8%i~aZC=cE&k-C>9A##Zh+B33+OT8tfU$y)CE z>P>Z}OcB@W-0&$keB>gGO?>Ls$U!UzLN+Q%fI5;*9Wgzdi71W-0{0-=B|8c<;ELtwCy%q@3rSE4x4k(!3VsGJqM=Xt7#}bCOCn> zzQ#t5N( zIL}aDrVS=A72~NCB`PU7?JUGfWs6mh9s^c_!AU;VX!|O8)Z!`e+`uK8r&b5URf0J8 zQj#geS-OHAxRz_RoO5h9>Ymw~)j03*Bl-kgz|UaG9M^>#`{oh~t z{7yUWFrM^jM6(N~ohKjyht1RX7>vCPXwK-^V~+Z>KYHKzjp`z;T)Fb??+*C#H@^B$ zJ8Zul7-NOE#~pth@#@v9-*x6kSFKw8^)LV9PCIU2OykKTVF!tjT7*a#;_iXh-W)qH zW17lYjeBt>nATsQS%+kZ<1{W9kK-hUZ!qPNL?>s~KM|lq;xB};3k`rCkN{ffkgU09rChbUH znBn1p&bgLrAs}j8J~{9m07u|_%cJ+tE+CDRP34qdqGH($iSF$ByD1SUG(>#)O8FLR1pruPCv3`}#jLN?VflZ=r z%`Cye)-3Z42IA*uYZViM9c1A0#KRM01Y|9Mr5hrxO>H^pH1h-znPc_mx+Gl$>UDkL z<%Z^s8cL8@(UK(#7KEUa zBMv_#vkD6CJ^&c&6qCDDIW}NM@pkVTc!0|8&b#hgwQBXmr59p{C-=4nVnEK`b?41D zo7w63MT-|d^}A;oh`I9W>$l!=i}$?iNF`JQ!#Zp{>rBT!VGnJHjxMzZcU822>*%@82_5* zQvq|jRgCBcKmrYdHWd^gx>Pz^#%6U+>z{kVYUMLN zWbu@EQhi~KGCat@!i?3UL+7v+_8ZY4=^SRlAk+j^##h=9CTOWwy3>QHRYkl?T{vJc z#^zbCToSJ5S>#)^*Nu^0$AO*MYqVO-k>!+Pw;%%J!bAw835XKN$7Wgq$2tTumW7I# zgDe1WkH&zNL}dk$(eBO=%Pd);y~V9FxYagdhJunt54`*pFUKJp77J@*B)xFN$7cZ$ z9gs(K04|fg-Yqai<(g9}2m3YYc;_z{f;LdAAKqU{HcU?7X1k~;Z7)r`{7;J5J3t4H zm_?d_nD)g6RF_r|(N{Wz95~40M>Kb@3rzsLu1koHcbVa%3A6ONQNS2(94=rt)YbjxAps zeNZ$^UFc_26Uu{c5Bq&c{m_j!-?s3@MF22!=8S*%1Vr?JMBqX)33cX>W#YFnqwzxmN^t)NxK12RWcOC>Bn;lJcN#0pfv7-0$RV_X zCL;j{Pa=V+q!_}CA@C5ri64}JTm!W6i)b8@iAX*s&L4@PgGA&*q&Hv)3uO7@uvZGr zQowZ^BVBZYZfJ*21uG5Q%z&opQaIOhDiYS%SU5o)daUdmgg;?8j;4Tt*6N@S= zijV+!g3_+Iu|yyT&SNJqK5m`iLg56ulQ`5n$ox1fShkTol6M|GwFwBJLwr3LPDs?! z)q4|%DbTCF^$Vs~!#@E43;=MfkEkCGw&(ZIb>n0J0!L0lYr&xlW5j`Xzz7S8egO_s zj?#c41sFExl^Mig5I7(YfX<#d2GI&J`SuOC;6GxPXV$gx%^8llmL2t)MXr};fMpl-1is>B! zK-LHaT@X=rpGTOlL&|E>rD8QkMfI|sQRG;7Ff-lNK937B{hKj%tqv7o91pjPkCN&A zbUi}W#^Mivq?v=I2{rTvE~sls@+XenLs}=a);yYI)DCG#LmDJi?G1Z3`#3PD;}^Eh zsAgvtZy|iit$w9{NJ9buc=ow@d~(d|U#loH0L+*%{S8OG<_$-^Mz1VhvgBQ7{xJY- zvH51_pZ#T<$*s5F^>?5BX8<_j@I(IYFaH$8mp%2pA6~J1#i?&Q{`E&4e&HoQy6=I9 zmn>bj$tD}`v)7&{pLpzk`|b?@b}~EdJs;xqN51|w7hQbW1CoC4z4mfrl0?T0CXS)SY(R?#S01cEWK-Pnj|joKFZwFK=gY+?(I{;rE?!(f6;o z_WB#AarlVhb^c!AN9Fuq7``{0+xbpr7A6c?=*^KF%?)}Q$ zPd@Q2`|Z0|vEf~5=8Wlo{jrancIF>>@0TuJHut%CysyP6@BQ$K$ zgDbAR{zl=$yN`bTYb|3hvy9zgyVo6Y=m~E*ddie3SwVmKsn4xgzT%?qUvc?G=d{~x zV(bKffbPEc!OMR9vj-l0R9dv#NhiL!*rEp>dh|y>zUICM9$vI)@w92vw%%&nj`GSp1%emQPu0r z0~a(Di!qlFkd6ohULZeNbH$=zin3CbU92%;$q0x5(&3Ies@dZGSSXe(TCwjObSiHu zgiO->*>3&IcMH1=cYQ`lc1yw{vw0tY-d%|tIT*`=J;fyf%?&bP$Sah0mVK7wH-ccT zIlF|55bHOhQh@`N=yL#BtA7E-#Bd@i9DFgJWa zcg=Ahq$>HlXU%r7a-`#S^W%8=2@-QLeV!75<>5(9j$T7$W}^R_fgDiO?%5p zAX{Bk?D7xF;Lzc*)|Eyj6#(SU^t+6# z2;(o(3N(iq12qg4l3AOdR1jn%j6XcmTFup4>LEm!`gEvw?4eGEo9z0VgprB}3&3!Q zf8y7I{RmfgcvCD+JjiaQ2)AjJ%i}@!IRMxFSSgJkbtueB8#hm+yuzILo2#p6q&gWa zh3olir^|Wju|l@OV$dZ3-l?E|U;5meSfN6DjM$w)EiO9Nq*CIn;x24Zng%jQ9?UF; zGr>Ezk}e@{mN{~+q_KZ>sN+!UEEQ*Td+#*-LnG}pAG)8zL!JerXtb2RJmUeSsXyS~ zN>Oc}711|Z9@(-&Bj?$f(i-pmwGlyNWlNS^2{|rv(*rZpBAl3LPpJBZGRtlCdOWA5 zNSqkvDFeox)NW$dVPcC&IvLuLk6!1g5XttIOh$I{)}Cj@3Fvk9=mgG{^lae1r8r^; z3qG}!+)U#zovMt=jhfOGTmU*DUC;AwQagjeXwtNzyLD6FQ0VU-e`2Xw)ke|4(^|V?n8fiZC6g1 zY&t)A|7|-!1aKU!Ux8#ln#V2M9C^fEIUkSc{BiEf+K=jv^H#5yThMU$Pu2VD`I;v8 z@qzXCK6olBD#{4sYeA-kR;v{jz_#VJh?!x_X1f`H*SvPw^q1ZA&AR1dL}lq#jFsmUQei&7kKXeS_ls7bH#lhB8Sg}cVMJ3Hyr#aIRd1^Oa##uzYJdRLSleTfq<0q+ z!hyFMJNH}@ev?%)0YAM@A5zo*R*}3ydFklWQkRx$kRW*pna@J0ntiLB4D1(&R6W)7 zbDTm4a|@J4^Z&tjGuYu{#$q0mi(ZL~1{XSO@85Nz9N3&TAz;*)5|BEKP-Sy2UqL(T z6&5uW4A@}~fz2b4;CoWjqg_#3Mu}#i(oCoVCWS*1rVZX3oD+r6n^5~wR!-&$3xrl5 zWO_+V3ysI6{sGI*YrPfb;`y#8b5bJxjJqXpXkq4ft1OKVaPy{fXCy;2jPyejebg`N zFffmwih#B3=p3-7p2{$&;ARc1r2soF=fohJ(-Xx`N7Zi<;$mo*6!@XSX|_t$pcPT2 zkvZ2adY?b4f-ah(r^8SY#YFNu4yziYJ}=6_;6Vq>>`+TWagB^YR4GGmlIz#B-^2ss zPF?ZfY4y3k`^_E4La+X^8cH#bvFI^GSov!pAXgDC!<1Eh!7RsMY`C)MxCC~*`wKcA zaZN<9ljIvCorx+r=bfB$i6@$k6|?_fOa)Hus?G!ht%&JdzZ*QBaY(jutl@ZD{+q}4 zKj1`db!ut3Q@?QjUugN!xJ87jkM6S-QnJzyQXE!D7I<^%q!;3aKhh!d>?;Ga_;apO z3O65>*0~Lim|Y87B0XXq!neqe@88>MKiT=#mDUfpZuS1nt$G}hlcPS=QB3#_Ej~l8H<4iGmRWhlm0pHXZ)5e zKmn)QwM~b~7W&ssvOi!w?ps~=3-CWnq)0-4I&5!!F66{CiUYPUD7p_ckF?!({(Dc$ zU&oUph-vr=)he#1fXJ8k4_~*z5emGiqr2>kFJJzTHq)cYw~Iu%ujlfdzZcK!b^b+Z z%-#k)~X6t#D;j(HU8sdTvdX2Yu%l^%p|E`5#%jV4* zWjOI`sm5o|bm<)xVAFci3>w67Lx<_CmfiN7!2rLooag5+j}4U2n}#EwquuXx??ix1 z-yNhu01Ie4yYtuk;e2LB0k8}j?imy5=2y^sUfa@RFaY%?hXwX2q^OT=g6_BZ7C1vt zt=Imqrx(+ljHfkc$OLvW6=4X?qEpHeNFRo`$^8SWerdZ(mOjY-R(eg#>A#^2?=7(U54fr zeCp?o_*Ltki-ZI=Iv$i4={D|@d4KS4>Qh(mmQLE;s{kYQKW|_7c!m2i*fHGmLrj>)0Z1o}Cnja+$u`4Wo!XE7T zo_QgKUWm_NV9dHZJ|ZC)=-6ZoC~XrWw|?LBN?ms+N_G{rn~(-$^u7I-ap2T;7LJvp z%v7y7#R=2~*U=4ryT^nQ%rBSU8gcH8hhQ#cS=6 z+bzrwzqNoag{P?9&Zx6EDpjeYg|I4Yw}<&E43@-D{!`48v$iC7bBV-&{3a~1m7q^^ zjk7jQ)v$rBvhUuzdj#GS`i{?Dn|F6pUE90N{P%TopZ~B3 zJof7ZG3-|*hZsGE(MEBuILucY%>i~-A4tD+>KoHP=M!U)PQU=$_paSpb6c)kfuK$6 zPGrlb%hGJo7(lP4>(T9PEfz)(@U3~pqynk)t1I)+bm=o+J%^p(qrIi;LB`V5E6aV* ze9e}CI2h$-LY!daXlgR6#N4K958r0#hwc-uXd2iy?-h^x={yzS`kEw`{ug8UZ>*2) z2)WM>tglz4oVOnFuiGwy=LXHI*6)B!M*@yJ?S+0@A47knmUW+}Sz}O7uGB8`K>vEJ z8YWZ;+`l}Z-$A{oZ^LcbzyaQeEaCa=qlBJ5FmJjiG#-Z+Nu}7Y{h`xD1aw^1?}1`n z+N)O}*^zU9`@_@RfmF2glq57{p1#bIhM`1bcpOauAe@&OS&sdp0kAK$lW^8;dqbKmcxkH-?nbB1O%v|`({_^E?bzsGO^q@Kz_ zTW8qQVHND(p6*=1HJ5E#fESotHyhF&FsyS$DVDblJqO6fS&y9>Lbv z)AQ@HzHqtgwt^Ss93fEng$@!y=MTDMR`6)}911!55+e~HJRjW|Qe6j8&MPm`tUJrq2{?$2!`h@1m!(jo*aNyETwgN>`8FZ#+{3hmoJ*V<5 z>we&_;#75K1suoG0oFP2s_gT3`V2UT#VJJwU;{R}g^fXEZsy)-S#^&OJ^B-}^Dz`yFT#c)Es- z892PHh=4euCponCYH{4pFzOb>2kb=&TV$=KA5DD9HYDm5r^FF_3v zDh1ul!j;^#DEjTjkgSaXA|k;i8X-m+L4TWQ3RcXCInii&lznit09&Tkg-m(={yUsd z-hwb7M|o|u>sJpCa^J6ie@WrczhLPXEa&8zyMJYq{$A*O2EYDFp# zP>vo_m*sJpJM&2Do_>0)G|jzgr!nP8r@@=&_TT1u?~|jxdc4T1MEy`)+^PsSXvT`H zxHU|Nofg(HZeFn9zvn63ELEB{I|W%#rQ0E`wc%z-f%2Ge^L`r9gGJ6qKkrXDVY*&l zUcOg@bbhR2=E%_=`YfihSL4eTxNya2-AHfN8={v30T5Yuv3CFHFQ}OS<8aDb2eFU9#6l$Itg==!6cT-m^)N=+1dpK+ ziSLZ>ije>n1R!e@pX#ocb`jVIizgaxt+n_ASuP;S_Xi9dIiLMl+szJM`+TIcik4eG z7!*!mo{2Kr(v2e#q!nkEuoq+)OH-tb^!%%$(Vol(eo1Tt9$dPvR!0>ty zhaLyA3@a0X3J#cmuGpLNQg?A2cA_=td9VE8)Wj|L@8|%W*;g4Z=IBsm3e2PCa}Qmn zf5p*%Bqiu!TJ&1Q@7zX0T8E`+f80kJ=TP<$wY-r*5Ir(Z*AAaraKMdTx~;G!?PY=Y zr-g6bFXBqPD>*&aiw+U_16xkkbn+Wv$N$h8)!xMOEYST^Y0{Q^mCF~vZeUhL{2KDK z8!Byg~&qXukycFboM!|btpOyVTU zW%a^^MHIlr*IMytFmBfv*clvPbk0qL7)_cAq3M5R1*7@KpQre#R2&5e<6;f7b)*>- zdsiUGe{xqbs((-n{dnB4REznno<3}FSZsY6GKAPcJ_ z2P3dE9!J$8g|w2qvfRp+wv9p{2mVt7;_|KRcO6}XgafoPJ&bs2wkDTcFW`* z6OR122r89O;v1vvCrBwMWCd3ZH%Z8bmRIWO&k|<|vqDj&QJvWl0T0yTR7j(&*BkmR z3|-d`e>u0=Tia6qC{^5;Sod?FAP9FLQ&fbo9tGVV?MM?tL|(2ETfQTi3|XdLIVwvjyHG`d9zfsM%x=?~!y9YmoO zmDT$h@j|#4;Mt)l>X^e=c0Mkof1W`ZnlIvZJ(LAd-^EhL%U0MMkK2l%bh>RCM1&9q zT(M<(R0%Yw*gP$U!jJ|VUN5of~ zq#Q1rL4KWMir#hMeHnAuF@~vMSWP@A>XKfnIBq5V`Bf-a2 zD0JVI7#PLVCfurb;Sm&P;Ia2=mqnUDWOG1j!`r1D75*x!LvM z?~`8QLRbo`mFFS7KL=_#4Tgw1d01tglPj=49mS^L&F#=lISTGVS?J0$n$y25Brkw) z58uwFJ$|}f%<;20zPC45E(w2&YB*GQ#%2p4AynKTP@c@=v)_s3a1^k#UKGNuAFpMA32BgXV zo&3C&3V&ffvFE;RlsG`b4JXxUw@qw-ID9Xf3=`Rg6VDt#_`ZNWF0?hk@$B}e5;kZo znP{pAvM}lcK$Mq*?1yJNw{zzf!*RPoo& zwDUo6pW%T*p8^e&EsWLcVqqg*upmw;o*eP-l6cTrf_ecv^VagY%?g^PBrf2vh-sN9hdK-0% z^>rwfyo%*qGt0^^y4dac0FfCAB)=Khra7^4)pM&nV7C}V66qY1G)rI^6a45*b%lH$ z{>P!#8mnPt3mX4JI+AAf&kD}5O#=F| z0pU-g73jK8Bza%&Id|Q@D{@DC>{B{gb-P71J|CK1pQF4wy%b6%vMXK<8h~1hgL06? zri{kV@7ufZpOSEUr2G5CT6tczTx~M{UW3uK+j%;g%nAiaG@2}w z(+}NyPNa92K{xWuDHr?h?FrmxIPHsRE zjxag&C7a^x*%CXL;u4;BBu+D5M6hgj+t0tg7n#X4YNvCNe`r5W7M66~P7b=}O$nWH z86NY*2|AA7>eivYWBPoYe}8_D7Vj#4ua)L=L|l~vHg1pUa=RXs7mBLsd_+dlbp`n1 zJ6wOx70W>Qfe^}fPb}SP*_CwGf|hlcr;mD(yh@+<@REdGz&Mk1JvFl|pHsm&SAZnz z8g%01AX>kx1pt=EJ(8h8*L~np2Z$+P;LY;T-?klscv7$m2w|l zcTY_bA9%&YNAs3Xsb+}ANHvh1L=UvFoM7gVzJyk|vv)-dChUkA9had~jj~O<-k}Xt zmX%)UQ)!?~7)LN)2-`xS2<%Kib0tSGWLHtK6P_L3b6}LobQG?>28Xyq1qewT4NFuk zSTH&g&GQv6VJ^#>GtgJG?Dj+l7W82yJI{2@OtQc=VKH=orPtA+qy)(j^mV>lsQiAA z&K|)~K(Y#dkQd1us3 zRYJid+g0nqE?I&=yla)0?*$bZ(VNq~-b&qCf3)x$YI0el0ClBu8c)BkVjx_k!%nv# zBojyW5@rucF_I4a+)CY<``OC!EjpA3_%KVft#Q&^Wua%UlE3{v+?#5vkG_R8=8%7p zbIZb37nXLHm_T>2S<0~=lXE=Jj>Jhaqr)7iv3Xw9CO`!Mman+ZzRQ}VORSi7Acb~X z7aAQhVda^=z?6<-Esm;@2+qMPemyC3niEUOK5Vf4yj+3@oEna_^!!Q=oe@E#Qz%tW zl4p5ywOF94N_gm#>{My|!2k3<52x_8dr8*ie_PA2X&=D^$=i&EuTnH>|M^~)r1>w} zC0UfXVTk-zlNkJ6xB$MFCtaS;W%luO*1MIqDQ)kK8a1aiuDuo0oVS8lZ-dwkow}Dp z<}2UrcqsZH8PrYB*Ac+r&FsD7(Z|f!X9llJM%T+>gVigD7Bpg2U8{Z=BH%hB_^t?m z`F||H=ZO@+ZnABw>vdJP+u(6>Os%r@XcGp6`yv3i&ucf}K$^|Z5%9!O-05UlU&%#}rvDV-m&Nt~+OK@l>%I^GS`XWG zH{8Z9JTKWgHf$z5eR}7n#>w)Rx*ltRhluIGszq^rr$y5*P)Dw#9sjy6H2qz-exw`w zQ`7p!r+@yqmgTn2cn})gpj0B`{iSjBzEqQm@PDIcApdR~6YphJ_$6G1ZRPoXPWJh* zg&x|^Hp}-$&evr_7K9#~jU<%hxZ8l@J_H_HIB(}oFo5&6Asg3qXMTX!3;$Ht!D9zE z-q*a+l-G+?&cck~iJz9QDW882;F~VQH%X(;A0P6H66#LhNG(6^agcp^s39%GOHmj8 z_FLbR*@C4fMe8da)~+z7YSjNZuAa_qow6F%y4NOyu_Q58OO(*_yY8xV6WIt*?bgOt z6o=umQjdlfTk>^!R8Apttzh;ssV@3-Nc)lJ5sdeZIxE2swG1s?gG3MQ7_;54E@0=M z!NR-nn-PsV0MPJ5xK)O5D-C`;8D9h=YZjZ8S(A>fXz@U{cGCXcZq}HPSGfL1-6H#< zsyl{3QJXWNEz8X|Y)4|sE0*vi)pbH7x&KS+Pf38ox&?ILvimKfcEts-3KPXve(zu` z6!_yFXF+o?M}Skzq&P!fYC;JuZI^6zO@iFGo05qwf0t3c>0rX>wEA8( z?Y9E-ByQM9CW73yOy57zd>_Ixi-0JiJQCE#SW0b(+z1{Diy*SFuqRC{S8^aL=y39! zf7e^EM%;4-&eaO3+I{)Z8nAp`DBNB@a{Za7qh=q;zvZ_X4Pt!2>d#0XWkbI9S88i_ zC_%@I8sB>)X=}PO@NU$EuCO2#P%8!DN&~y~2sQMX45FB%@Z&)bt&-MZU%Z5dQD`!Q zH01AD59E>dYgvjVKc!;lR)tBnR)r2*U=TqFnU9_)ouXCkO^0E~90#(P;uVMIx8sgl z$R)jDDS(}tOEw^xYt0YomENI7VqUL?WQ4M)Mu^Ebd1k<~`f!M%*VC{T5^x3j&6{za z`agrv_h*mfPS%7T@V0w4RkxM;gRzufEovY%_g0*M%W+b$W|79U`)z*>gyyy#W$V^E zow(9>OV|8|iDbX`1xKDT*|w~Kthw%|Pne4Vq|Ap)wW}66!`IOBfu|g2kM!&qj`wM# zzh7Nn-jh(9Z(E?)>{Ygp*p>C)3$~okj99r0uByr3vLL_}1OmK9RQPl|oy>yP!O!>C z9{@e0!p9#c0K46rAuaoZrmhm(Ty_HQd60xP#djq{3P7rDV-j1{TN>EGdp9S02tyce|BccgEm- z?+-4B-01?4JGGL&A`7}qKfrvD;^S%t0Ps%L7!A$g$s!x0qZ&~jnBx!=wY{U!rUQ%8 zOOOdi>;}feoNsLgQu)JR!A=i+MM)XhsEuWPi$NtK-8gT;cv(7%rw1+2p;U@k<{FZ+ zk&H&m5JP`sNJUBpM>*+B+V`YFh1qUG#6=%gaVC7bj^$8P09$q_3Z}+H4Upa}6+{Ry z^&c6%+ecl1p!rj7LSMzR94QJq%lEqjg5ggeu7{XJ3r;!0<&o85%Kf(ASHGjH%Czcm zD^GTa5X>dcuolXyZ;)<JsTv>Y2|9C;7*P8W?B}z{# zlXj?or}C|gjCWs^DKdJN*aNQ>I}ll`R?M6SG9v<@($I@d$ovcLe}ZlMevQC@(7(aA zOW$kPsd4R2H}jIYwC0&cyq2xUo{uNq%Vl<(hKH2Lmo#QmpO^1BZO3nF>rP|V|C{`3 z8pwor@_gdn{5;Beme$@A6BFycpUP>wP8hpvfASxQ`~zAz2j9*=MwR3|#ws3HD%d`- z_`G+D_?b?gcpmy&&O2%fW1qiweN+uyewBC8ckGsXUV7Sn1_YBRiMg!mzkv|^{VH2d zlhwvD6u2@&5f9tQ3HG<8Dev11P(JPHzkFJqL4yV}5}(~yyURoNW>g<}n)}cQ#ZQN6 zF#guv(T*#3z1}`7adGhyxhmiF z|I_ZK{@W5h-%)?d&$+kerIIYK_sqb@uN@4vEypQ{@0fH6m=|{cMeE$=chbi>pJrk+ zAJVtDpDEO|pL&F2=``xC5~JByJxe z%R_&d%kO|VVm%!A+D!#kgR-R3l1iSyQA#^{&#UZtZ_}U5Zj<#6P{)nOe%Rl4aoj4n zP$5kjlAs*S(H0L#m+2S0)++@TR8Q`Ehb0XYS+OfPID?kgkf)X!P$dOeE(45YD`dUv zIPNOyf{IzFwU>VxKYE>_6=qMkZxGVhrv2aZJrRoA&o_?AV z;0beF$N&z=qvm~N78j2shovM;UmY{g% zC|o5cft>Lyyt7qeo75gvwZ_3?=>da#U9na&_3NZu3bR&%Pd6u)*d0DXKE!SIc)H2J zIUa=uMU@!&@Vo9X;Vyo;uylxu88^*vpzHQefV%+9Cfae}uf|26D{Ds9n(GMN#A`?a z8S6tGJBjRR{pM5vBfi)|ER~EJe1bt)^e-Qg8IR8y`)xNolCAEw<_!oAz*KeW)9V7F z_&&-80K(n7h}ipH&~b9JK^BJONFF8J-h=~`0lE^5h+85IL75P?C~h@Kr6*Zoo!7Yq zqkz~NN$$S?TU>*9MufBLJ}eyR_j72mwhU5YA1?&q&(Cyq=j`nDxR&Vt@ss&+BHoE# zX(Z8MoxVj}YiQ4OQuL(%x_;H56ilLQLJ)KO87HBKpcekZwU;*VHurs~Sl%@}WSJsz zW%xA>UljB+C4nN$MH|&cT;Mo96Nc~(y4}5!T^~JTn$xZ_)WbviIO)kN%ypr4H^H_E zSoJx}K3u5Ijgd_#5Y~Otx{A-tW(SYs3W#xMTekmA`tZ|InWPy8OY7CI51mQGSe=2p!LG8^osjJGi6`h`R{-{p7aX5AS;;Dwm8W zJg@8}JK4uiKg?`EtbOv6*er0QBxfo-&Ed)a?h^d;G6}4UhFvCFp%>hhM) zK|mmyMH9KlcTW%}y&B;}e-V06^nQ*V)~{utTIGlBjkw;=a?I|uW9sGgsXnI|qJ7q>b?qc9TwV1RX!fQ*41ah?t>^xH&1Z4L|j zTZ1LCf<}niSSvg))D!bGN<6?A)!VZ%U8ietpZ&xuK#WBi%7a8s2!52Dwr=uUj38D3 z9NcMGEX@&d25LlfGL9@pR8gGbiNux0{R#!|E(S8gaT|~09NC{>;i%0SJwQ9_$j(UQ z^Y{nRRnfo9SOc+aWbQnZu=htEfQP{j5%>^JB(XthM3^#Rp2$e;ZyEZ*0-ku`YL#Or z0OZwloig{E1GKW0t>uF~RrO*Itmh!IuM?Y7MSf3SGcYJA_3gW}MeV9l;&KSJW4H(z z2LrRguXUrj)O7(Dt#HCZO!@KtM_9s;>$lunlo2pwVhxyn83 zLfq;SnR&OSPUY`dWi6{xwsEt6(B+ns%kU@p@FGucxynDk_M8Ca?ufGm*t9jFETrVP zfvRJrvcIBHN^oZ5$T2XgczIiNK3+v|RiIwdA3Wp+hK;+R9uiM_B<^*TqaV_z!ACW! zBuIbxxKnJ-l5}{L<%Db_Gn|9U_$T)AB-&U}1_6~C?`f=Y;s{kbYSK;nX3Unk0uY5F zc#@Z6!A^-`<0Okbjj+@-a}JADdJYgQ)Kx}m;f)(H@q|hb$+Idh>89w(U(X4 zR(al~mg>jz5=J}EffoRE{X3c=vNOySkUM8y9Vd(cL}yQ{DtlEQey#TA3CI&GvN{)) z6+ivK-6v8P92_jBod1G}vRwOSf+2)EOuG;X&&nY5Kou-Mdv?<%B&eNU^ear0O}U6= z40xpp##X>oql25MsRW@^TE#Yyl{B{_T*R!hDH;_-5#TgYFSbfG!bXL~icIRlz8|O& zDSQG1w>w78Td=tC0OVJh03|$PQi};+zIDX6GvEjoQ6KtO>&a0MNJ{`FProZ!2B6jy z@v81&h_Y7@2Nl(EkS0MKhe;UtePH1cR74nNIg9@1x3Ag zrVL(8;As{@Dy~;Juzd1lMI>i}Fp<$lp#uHzZA9%K99b4i#o+(=!d8HrPFFYg|BgQ=pPv@9X^ zPZAFW{jvU0>Ag_JN(xF+Dy|5gad@9wFDDM1jB4fG`L)R|!J`07;orG_(0qGs=f$9D z#k_+$fJh`1?BTdb{orpohSs&&!l97Y#`zQO=z`1wm_m|qgR=HdoC=zB zth?e>-Ljs1CvAA-lq7P^fKqy5C;YN6&PG*jv)l^GAlPV21O$hTN*9kA3Fz7C=5o(q z=Cra%GiaQLpEg!>4!nVRz)%Brc2eqyIE_36gohSPD(IBJ?#j6F?<@ViEtyi|3REUh zx^>tT#uq=)$JxUrQ;hpu(Aai2gf;3tr_%42<8swY_B->FmdL9*5<*!D|Bx+U6AI(b z#t~{qRd!@Q-+^kzC_4v`Pd?LDztA9bOGL&FTXv|lbpD`vjyU9@F-brf@L)pD*M%pR z5IE{9I4o5T-@#SP)wJoj`#agD_b1EM>ou*d67aNa{RpJy_DQA)+yzi<^hwAWZTN^K z!VSCffI0CO~F5Djj@iJIlwcWt}^TQ7KX?Vp^;sS*9WBeDF=sywmvx2BCenm z<8Xye64_E4qlgV2I1QU(78$HNM~6?Ggx3OFiW^s;sKvNymW(C}iJ~JT4xKu%oYpH@ z4-i%OEiIc=%EZ{88lU5=U5Vp7nKUJSd(JlAqkw9}Di}VgiTl+un;32^)7HLm1=k+$ zbCzW;4^T$^3P~IOHP*WNd)PywTc+?K6fa+V|3cF!i;fasoV>9up~c*U90ORgKe{|j zmm!j9AuybJAp8JpSl)hU?#>4glem<`#!c_4J%0evdD6>9fzn~;ER~s6a|e|V5&fr< zyE4-%ncbz7J_!P3FduGvUb3c4EleU!EUgyn)_SDjd>1I{MyZ%3AA39 zlG?4yD_ig&$?t24jBn+U!G1!La@@J+hhtjiozs3`Ai&}`DKJ7YZ96{xDE8?ONMQR z_V7&(axS>1ElHlo2@NlrW94mhq`6WYgfK)_nCv|(A4)!o zUdVkK9}$Fcc&=~@8~e9E_7L!kY|E(=mSYO+dwU3*=sRix;$$oWg=O)LBA!H!wPK_Q z1J1*(#9i$^+z22Q=V$f9q{!%G@gdh_0yvOE+{?GmO+rFF(#>UhJSXQ$yutGR?BQ3^ zi7^l5BNJL#;jx)v4E|nYjaF+@)SC~Dl>i$?+{Jd;o6Lo%4ip#Jd}II7t#S??WhJG> zQ05k@$q z2Wb9UvS_P^H1{l$(2 zy-=FL!YCnk!J$RLupf__JOJ=})=y;|8Z!v*yXm*nkv|GZep@5&Mn0$eG685Dt2e72 z%jUnOYUHI3ql_)P%>*w^iufOQHR7&tV)wFPU5tHuM46A71X?^;F#00PU^5>i@Z^~p zu8A)YlOkZd*ik_8Qfoe91%yPtAkpS)An-T>xrNsxnRNQERYKvmE-JG73Zd%71~QXv z&EvTkX5-bh#>$m*a*!F;6D<%JiI9O-OvcSXvJz?CKi}kZPoPvv^GMScB5(|yy<GWblZX%w95jpIGe4TJ$zZR#95cMi=d($w5VtHcbKgqZ+Ty zWfl+T6BbvRi*)<4g`Yhp7~Z8umFqmh`8C+gNZ5gsgMgBD-gM!E(HBZI!%R^UoNkH& zF>!@#an7khfier26`Gs=pL636ntnj2h%fY0rb22^OheW4qV3H#$79u#-}6t_ru!%y z$Y=4@R)*#Cc{Z>Y!a-k-2uTeb3YWZm4Jtff z7@zbY<70sUCEoG)pa9vWDTsS55Q}83^hfUb7~O+R(tKGN{iL~WLGE%7$CO2IB`>Q_ zx$N??X;%jG(%!aUC;|W$dlp(~0yqEZ=V-B=1Ho%gDZ9XITIseBj=FW}w?SFs6>6YV zaMRkiBMOvtEealc0ZA38L-me_3^!`TxTa0%$8?^E7vo%0fElZ=oncf^gc)f*O*aqf zE3)|Dp&14e;a)AOL>N*CQpk!+(n-SI-^~p{W;i6 z)T*Z7Q~dY^9_~bdz-^2w<7i=CQM3wpcs{v?&v4>B$DZ7s2tGqN{Swd zTCa~myNliGf9UY#(Va1oI6?VMRAS{_)rw^#)&@+y?f5g7>l#xFp8^NQ6#9nK<}wPFqm7dkqqV_dvz24%>**weVRi1qa?T-6J6Z) zn8rD^ZB`x$5Afh8O?!oCp+YHNzm}hR!JW&IY-)D1rBsDT#MJiA;Ll;&(oE&w}0}$cKb!FD8t8{APcWtNTDPTFO z-Blkkr{k{W-9<^=H8sKDm5%6)P_B&?BFfJ=s>^Gks>&y@WvH@ZI>(xmg28u5Qw6E8 z=kgiRn@5}h68nYSS=13pdfk0KVMNO#MVl+56#!$gRWMsIWL{2PhF-m}k zLlEBPAZKv3P>Fr*FAn^R_rj>3aamD;?%~A-z!sf*>DeF#GVZ~Gu%A+x{^Akl@=gti zqdNVqVN*#K5(0<`c>h%PZ-1Weby2CzUbxHOM?;7od*dgiA;o1!4(F7!H6wzJr9-G9 zg8A`Z=8-PLi3ymXC~zUP!gw>c`JvLHH}G^{^K2F87ybXw0!Y$h{PY_yBH^h*Azp@+*B(2k_(CV9#b7B!h=u;UiYIO~kxvdD z_Y`*A)3hqF-T8!f#a&Ra>A5Xu;{T1O<3lF7F|J5wUdCW)A{n_j`~;fA%w(@~gKxb)kdQ{0`)M%B7FsG>W6t{%jOUm*#r_+b ztC3j?h7^PM3tNg!e9G8@2Gr89K&8Twz2_N$%573KM0qmpaWO$WOJn%<9a#v$BGgU} z7XhZEA4LCdGyCR4Hm~PyH|`~wS4Qehg+qY+?#8fr-6)oSP5~yK(Ug^aN#*0${PaXP zBFQyD$@#Tc+OW%Lo|~r>LDX{Uq`dJyn5v_{RXL(_8L0mzfIfmKI>xatPBa9O)cJS||YkbQ5@4va(ejGZi6&apc#O`Jl4Z++&E=WOnt3 z^s=MAq_N*Yj6qdICAjuXn@LEuj6->QWvCn?lll`j3hswIjL3d_w)j7urT2AC#fnDj zEd0jgWc_JfB-@0^Ib&wBITc_S}eM@iu2<$rag8B-!{QQuVw4;DhtK|@u%>MnI&xv!+7M`6Vb|sZB9I?LmO*5F}LbuFi<>|7KoG}@NTMA z?H%8$H?@!V;-)e|yfZb@qogItY^NcpcvaF2%yz0qni3_vAX2I8GMcLGwVGCA;pHz+ zTckdw+j(HMAqrVI7Y3khK zy)cE!78J<`S4ePYK^Wyll{^Pi6`8tpgitaU@Hz><8e%k@3|DzWvHQSP542{&FtcY= zc*Th@{b3Mg`@-aaG)Z2?>WCUxWctKx_gv=thU>HpY0}g9Wv@8I#lHtpfT|g4R@*jw zYFc(pH#!(nKO`Pt;i9F?sb0^ZqB`Np%$Q=MCMQtaOm%f$*A1z9f7$Jct6y#GNVg)% zIvByJlp7#117dm_9qr5Zdv!bJ-2T%a{X|;D+%O(vUS{OVT~n;600abb9&9|b!c|GO z4T7{jj+cQ@WhUPsw$5lMa}4VaU2_$e!5q`G%FpoCI(`QpMn+mA?UpC%c)90)|G_fWz|Oylb05X-Ul**6YsOYOi6i-x(8lNxd{UK>F+O9223+n@&6B;Rue z1T^Gx#+LzjBjzNUt<)%sW-1J=kHkh9WHaMWY*H0!2-#_punl=S5>Ym65$?rKBQuDM z`xW|53J@Tk6sgw52E%Nu@~xRF%`8iWoEXysYAl?Z$E^aa>n5oKWJ9pIR{athu1Yyt zT=k^4+-j~gJ2Ev3SMdL{_uc_o6<7cGIrrIJ`m!_&(gf^cK~X6xs9=vR_O6K~wqL$! zM&G4U`_-Xs-|&WO=BB{1kxd^lYB&!(XC=JZ)D_4|65s zY=9>jSrh>5o}bU4qx2$Rti$NI!^}2GbNIf-AMrE|hQc6JQ;4qMP(8ioLcD>HsdN-qpt`T6y zj6*T@f-XYMZU!}iT=msBa|T!PMipaD7Ka`+4SBYGQx#J%2{4E)OFNQm!>dG5gqXuz z4vDBC)AIX2xw4mW1W#r4+@Ny-zVT@&g7u8CH+k%h$6HWH&;+M3EG|^M5H*@?P1JA zvp^Z!SJ!sZ*F=5Gar@$6(hDo$kYDBs&K#FzUPpTmz zw3Q<6N&qohiO57FN3T*|)wsWSL19sY*16cpgvS%2iwN(GM zSv^xSsbFOlA|nZ?c@>up>-CyUW~Lhv*)EWoc%XsTXk1+aK+{1QQ`TQ6)Vp|Hoj$W&~5 zBypisUkH^rwtXYVfE+EJcHtEf)IGwL4;|T*nV^6gwICr-;S)q__;9w&S@sCutN=45 zy;Z@};!-MLx(CHyV1{531Fmd(O7X)kKY3j%x-*My^q-5348AWFn+UAzmoEyT2U^6F z^>$XHLdBhk0o2Z1zV=Lmf675*03#kfQY(-3Qh_Lq3e>9QH%BRNp0r`Zh8u6bt-ikD zgl`=+_`v2$O(KvPsQ@+1wJ*2^B9yN&ar|Zdj=S~Zv)No`iVzS0X2(}=7+}Jy zv00LV#=ar2kbvBhF`Bmmsz^JrmcU6vBqBVxpRX*245A&Qofvt`wMb?$^V)&`_4XN1 zOuRM68+zFyLvCNBra_Eif(ZE?_03VuzvN1tJS4d(=Rp6wKMCos+#wG1Ng*UefEba$ zoUkxffSkqb)nqQv^;Rb3G3|<1YlMK07?DhrucI2fk|Z}(%CWKL?-!|?<;h%nX1QJj z;I?}isj8}~va0I6_oqft(-7A{(R%+ZIJz1$M$cYpZnj88s)>hXWbo3Fh3 z<{NKKnf%Us3^cb;b0tTO3ng$j(=tx-S^4AL-6~e-7BZAJmh^UJ#&Ya!5_>*1;4f+r zytBoV^Wk{gYG7AirPJ^(dh=_6;8~xhSu3|rGDZ+74<{Z1?D`~NS?w30-KLZa1dl4= zNT-rJ>azPE0R5$wpvw!$w7mI<1)3hF2nwsNi7*#MV7ztf8ybj! z#D~wMSD?(oFVeGmj07fg2tddK)UXMeags6*>?BuEi~2QoBjz)5Gkp3)#sv0LKmeex zQRBmy%u#!~B7%rNihOn$w5KAG@joPPLT)XCCkV%X0Dbbq;~0gMkTp`@ijWl)u(ibf zIWtmVgQyf4bQ|p}s;@n>9E4Wjwx_56AYcp>C1kEXjjbw#rmA8^Mseze{Uy0B;1L?{ zTHwW9-9@qTbF5u*s%d0BRZ$jUZn(!mqN zm^AH>4y5a5NmWF%_j^#UvypBxv-E0_q3+s7G2;o1L`AjY>&YipbySV7S}0l5Agf-* z8$nXE0FY>RF${`YaEa7RiOD$r%Q>v_GrzX4`PUPM@;Bsr%9E5*8^aE}a9zAVy;k+w zIr!8wb_(e}!@W9{hI~B5EP)78@VVzpJbsw}3eUjTSSF^POAC@6%>^a*DMmnmDE5YQ zxF9e}EM=w)zwR}J&Ow|ph-1j?43NVP^a(Go?&Or<+>GrRMEe}kaN;Cask95Qk%=)N zMi7BH6@^0UMhvLv1kivnv!Gh6BGhi86qYIGh=t887$3@>0n*=(fd;phS}Q@wfmuQ9 z!XZ@4lF4H!!B~mFK~iEiHggFmCoN=NPUWMrTG5A(7&dwG)DJ%Vc*&AwUAuPX`_n)A zWZ|O40C2>JgUeW4X;fFYX2vIYFm^?M#AAXPgLX{g^oeA%TKAa<*0FeAGp=bGR^e0eB|6?*hd@4ih) zNo|t#Hdlw%@T%(w94iGT5`dNY^0mPX-RudVffSMx8h6@Eva$T5tk4;dITDgkiX2FM zK9mX=P9b2fTwV^%jaqi5dDq^cK#1BDa z5LAOSv1LL45FtiUj!4ZKih(GmSmUKSF(NXiN^#5#xHE&pvywhPt6Ame8pSIlbcV5o zHRND`Y^VC+*AoDW%$f&}w#~_Slqp2k&0I??B59YA>s_T58e59Nprqmv#X1O&{FJCY zArX@S%M=0_t85v#B$K~Hf*5i3>h7YxtiXH|U zTcTLR3{h>G(+vo6ej>7`nynhRSS=%87Q$5h5b1!yk&2=c5l~Dz(hCb%0EkRX6qQvR zs0t&4qA}&bW*j`G7!gnd%aPeMR2AZP*}qV=uyWpu7@`TPn(C(fNFXGJx2jX{sndxm zfCK4YvonVZ7o<3f0WcRM5H_gEh6qRvO01IqzJ^^D3}gmz8p@W$(962^pGs9}f#W(D97%%EG_>IeFP-jYTg z6~zWMX0XK!?=XM-jZnLCa(Y)0;7uMi&0KXI69t$o%$g(X&BF)%)Ix2fWD^xZ-pF=( zws`zEZHfl7EjIJCBK5BaE1TRKm3cZHIB4JY?c1$hUH9^E{?CLFjI!Sph*BJ~9mJ%kLNq@GA$Lso#5+n>b- zoU#;74UBK<1ArmuF>S=A4HeHW%&;Sbz2Uql`1R~7i6y}nE^r)x&wvt52{f~#owQ&B zmQ@*w1aKFZq`k9wJ1$j6LLI^u1A2F(QX|P*m&%LRa#JcXaTA2)%#Bj?-HMENTVdsZ1Gt$c$9yuZUb#u>qxvP zVL|soYX-u1TY@;cA(X!>d(NT>Uu>iwqi&`LtfbOtqLBqGD7?DxO>X=^zZ+Lwl^4UW z8rzV#m5IHJ`Xftvbd%n4rigS$cqocQph&wk5^2Oi^Q6T%=`$^wGu1jKcyuz)5H3ay zfDw>67^B7qaPD4P0U%U6V zxaG$7?b|)_=u^`_`b6FTaQX}Y=+e29EHQ6H=DeJ@Pz!CjBo~1)%cXA$1y}!|ix6z# z=uf%HsB=l&u!UNv2-46J|7tB?Z(oFWAb}5fXXM&+BU8zTgt?!8uVpjoa^H9|jw$RX z3N0cjK-RD{2DIZ?Yg2Jp2~>b7002}}S08T z&1o39GX%*X3WbQm02T8>+Tucqi%>b5LA9yIGgKZc$iHpk$R-WT1FysZJUENe(gihX zOg``q3KqNQ=9BS8PCJ4}s3FPn@&o<_%rp$WPJWWDkfc+L=Ss7w=r$L4>%@DG3b z`wc()q0H^o32(-6eAtL#yYII1+O=ydD=Prtpa1$d030@A*dfCXTEBk7tl4wko;3B? zV~$X-R8&+9+JB$|*uOqB3uxZz^Hpw;&2CQd=#!oG~HwHSc^kLrBN- zB;8s&aTAd@)v{Gnnb=@MQxUaR7noRVbranOH^T9!tTg9wyga!ks#Iiffw%#rqQ zCJPaS(N{qsbXU8Ds$vy8#Ap{3-uRwB5Z72bv^v}cb4T-OdNA|7Fyoe?bp!FSyPSkj zHCjfJA=H2%a_I>YX&p=>jQ=_U5vA9yb!L>+=MHBp-GPu(iP$AjaA+djC`a#r&cL46 zlBF<2!{<}fw3ow5j%h@1yxG5#xh7%)AYw&Dg}OkDjPp8j_;N3Q&-GPIr(%(sFrnj_ z9!yXetSMM>lqC5&Y6n#5vuJ$L$pn9K7hNa<1rJZj#!v~H82KpxOc}k>E6lHp<7Mk% z)&9F#0a~UzDU(lAMxDF*qDXAyz7!OE&vA!OFH*Lu z!=ZeK0tJCACHOEX$P<#l>NVg$FjY#jpWT${b!z}%_uY2hf4{u}VCaxRXPvJ0Yv-0Ltz$cS0~hbEK9jP(DIWYfL;Ygvdn+l9{V- zbtI5nQU^ALXPH#VWd0#W@@nh}jaI*vRTJUP%)UwNB9L&4GUcF7$(e7pGN)0bO-nN% z4M>_L#mZfJ>YtmK!n%;b{IzA_0ICVIjG^JcA}FwDo^d%;?j2~5ON@=1a~z8it;0bW zkQUA72$2ut17ZZA7h?nDSv)UrPCT=<)6BGFN)z3}<|(3GF#CiIA|l3WLz*)*wx77v z<-n%oYJO^ZQp?p3pUSHHPhmtT062HkmMdrn49Vjfl zIwdimC(p)Y%eik#1i5e;ap=$o#ymD*!du_H=)v^H8UP$Nd?+WF{_&>(Fz>6c zRg`1^*syVkohW`%B{|j6D31gNGf|rcG;^ zX5G5=lO|97V&?2st7||3KW=svzTQ~K_u|hgz~** z5ifRyufyUGx7KN%LF&j@A&PPfStl0)1^1bcauc`RW^nVAFdwvFc3TLc-BXu{fI@jF zCT;1Nlvb1Wx|b5yVn4}vS*9fw?AQassoWN-s%1_ATO%=O1t{lOOhNmwc@lpOjErM! z3vEX722v3=xCw$Q?NrB$(a*}p9<7MXc_2_TSf$q)nn0RPSt|dAxFIyi)ld=&K%QE- zDal~j;M&{@0A?wH`ku)hZ6%f1p|pJ~r)`6Xhn~E=1w{^fh8yP2oj5kFUyz?a*WY=h z*JhbR8uQ!;j^=Hu&-us_S-_g66u<(3kZ8%4^T}0Hm2Tkzp9F+JHrTTK1}HJm$?$Qa zgoLzb0xQOoFN$^};9ZeK8dI+31_2WtuACKpjWhv{={m{RgDa1G*U3REX1X2ST?ti5 z&;yNIMGw2gC|Ah3HY5adqCLH4Ppe?szDTknej3~N@)bZMbGX@Ez5w#6@v_lEi>&T$ zQA!pBMCA5DN?B(9+LXzKvT*g;D^W@zNNMe4?|4}Xkl2bvzVOk}q~mV@jZbC9%djG> zdWE))3)m~jPg%*ZaIaR>U%3M;0qHia_4|Q9lTr>elp zM3K|So7~bkZ1~Uz#yqxiRqd2_-e0(AaU933TDKZHWDqA+e*m}p|q{;G~BrbZuUs8(c-IWMlS-b^EXf0 z^mum*HJUurRNvuWZ4m=|T!E`!a{y-zc}N`?#6`I@P9VEXK?@w86rv@y}Sm+H-<{FTs$jMWaeVG$Rn31M#P+QQU-_|1U4oh#E2*+ zk-v4A){C{BIOLY^bK%wx#LOaq2q0E$i9sQhgG6?EQS{DNAxKQ)DJ|nh12`6Ah;CL7i3m}Xm{na}%m@5I~G)t7G zC~{NE(G;F~A(Ru`PAn}GJ7Y*x*ziPPH#XFa1MP;${bUwl(Hmr>`KA=Hq7j0yn_u&a zg#Z8`07*naR0flbsL+3w#$Et&2er%)0FVr&qeyHdS;Prkut;F&&f@Q0B#l-p`FNzU zkjX~&gL;K>sYzP}xL&-Xg6Vsubs<2kzVYW|VrPYB%eH600k=@GwC%Rt_Sk)w=^uUa z%4=^dShyGfh7KOoy0vvWZq=%?t`3erZqyOt^MH!B-)(&0l6xLIoo*& zTqwebsWi_-0&;|H@iX3a%?@yeq`xpJDyCtuj8*`EC_==|yg6Nl(Y6^1Nsn%tLiZ=qNaAe4Oay+3elrP*p&(I>HcN+rH0O-G>?KncLQbof zy08>hBJ(eo=p=w!A`cLxrpS(S3>V^#))SvR{j(vJBTef1> zthxRA_Aa@I4%HpLb=;B19W(NdJMSL<%IgzefBX33MlD;uV#(5F0C4_!r|rAX0F`pV zf<^L0)e9NBa~V`1=S!9>YtyE6yLN4ht5OR!mQd{L7NQ&@K+atN)kPFa`As){m5kzz zX(P2ZH(R9n9kKUhCk$xqBw#mjw9`iCNh!Nnv_0_P!V>QO4G+! zZb<#jd(k~#f<`P`vE!zZb`z_eO>%y&35Y)hMi>)-3Ioc)Uz>su00Aj7!YSdJv^A6T z9pl(gc?VL^P!dp?m)2O3#vKyD8}cTpfhZ8belgAUj3gb4RGo|my`<;>!q^a#Qfv$w zOxmpEMH~@8d7ToXjwDSnMF@xy@#oYKDAo_+h!AX?Ns~zqbWmwRf`|YC8-TrW^~_c3 zglf__j%`yA@t?NAi71M&A&yAlmxLN;*QFE2fM`NzptjcI93aGT%yslSQSOxU4V8o_ zGS6egNHQal8J#l_LIet65!N^oRR9t}OmT#fH#Sr?Emykt5Gev6j3S6l^b*j9tx*~L z;e!|nHB1eNh*du2Z;TLCP@Dssg|nAuuA(SHM8F)HeMm$!q8|~c0YE_{CJ={`Rf=sj zhLQh^gbSo%i@Z`~_8(*Z zLWY$gy4m%+N|-=Q7@@MilhQ`kMg9i75w~J8IE51FhV=4Alp~0UA_Dyn_`9n^ag^)6ky000rG;L-EHURZd&3gP^< ziEmx-oog<<OpIYX*2 z#AX!pfHmy)k?d30^19Es*p$f{(2W2(Dr;HtY@x;z4{1i3u|PA{bre*1C2CX$qX?s1 z6h#ABQ0g zjQGENEBXNVC3jpmV_w+tnuiX-Q~4Q!Oq3IITVF;a)=CJx+S zrLBXe1ZxdM5G#CGfn0z95n_ax%jKdd%H?uVE~kQHC`{7T@$!W+#guFRZs3`eaW4P1 zBV;cGMLI7s8GOhW1EVoo7Hc5mtWz3=eCpZDWvQ0=9dNcD|vcYNc>Vx?h<{|8L zqWVP-781XC2(3(19p|tOfG*0c@Y#%f%)9y8zaRnSgI(fUvP5=UPN-XG(|FAmYMC^C z0--bX3!5)=MuFsUSOOc~3&cN(WaKAA`#`P0fc8%>8?$5O*u!q&QoRi@l`LK9w2t7B z#XDO`i7lNpDxn`W(oW`mvO}^w#Qb}ImIX(U!nFLrgcORnIeft~scqXfgAd&A)d_C` zz+uCO>d01xh72BbZKBu%O>=&h$I zi^7)KGMkxPg~w`p@~`5kD6HA%#+1t|X$yTriM02mtBLa+m4>XwZEU!#kd5rfT%K{m zLo_XRa~h>2+foFS^#lY2_D^kU%IMdvo03j&OuK5tT(wmGr($V-kR4j4J#qB8r324ud%a@^?^7KFrMcT|pp&ioi@1 zgYgu|(=P<3rl!l_fC4o5>1A6;HZ&@JO?g4kuI34en?(rg*37>KO zd0({(nbi6`k*%DYTPiXex|t9=VUnWE-VzvmAjh(hSDkX{SUhK%L}^O`&CS5TIBdi) z12hjyKE3LD7Y*2B*XPEKpE+yJx^?T@wQJkI-;Se>IJA(QFT3Qt2@~I%KYwBE>bjba z)&2YLc+v?+@3H$X>gnZ|oLAGadg2?CmM&f1vAV;MA%hMca=?$TyNO?qqUgG7uleh} z56<}H^9>s|?7rJBMb#@W=R*e{@Y-u{cI(z<&pmc6D(4nzG&O$MhZU2cMEa%?i;=Cv z;masYY4;stAaPQxh4PbGM8VNGh|RN2r34mBE&aO%QeMXtB95pj=5=0~&X9+^W3n{A z2|LhDm*my{7EWm!DoMGWFx#3xX|TpFzi8l!CaHnJh>UPbGm2WsP+3>KfR>e*69)Y= zZ=jb{5M#m0>lIa`3+X~B*hjQE$TcX6kQ}hai8w)V?38E1Jvbc1`df3Tq9&M_8HH08 z=;rK>2^1R>kKK8n+%-=xAB7aLIc6Yz2H)p$!;nxAnDa1w;2l0wy2bJNw=nHAnIg(X z047v)6v;~Jf|ZWvics{#0=i>1fcpsqhP)RtPz8g*k-Q@ZY3ec+%1UzJ)u6CUh-*ur z!G26xc+3RSHPA6PWF_3$$|z28CPpE`CnXJcfh^R6*M)IcG;3~I0Uq?=H9#7=_cOB# z>_~Z%6VY~!Y+Herxeeoahl~QoF*z_%pGV6d+h|2qdFyEeGX*xk16YuW2yPAF^IN9YHK(kj@05su~ zAXA-F8^WsYB#%;+OK(i$rA}vAQ4djsLf_pYs?V!TYK&%Hky$u%@I)_VIi+_Cficv{gtjGdYFc@5 zMv-0SB&nNm>^N@}viu1o&f7@_qLu|zX)M9QVGD1 z3YI6L7$G8|9>m=8?gpFbKg*sS5dZ*4CK@ca0QVr7V7fqriZ>4d2S9>)1UtgG0RfRB zwMoX_-O1^bjF;^V@d#rgjAM!-B+8-s%q4&dz8sq_j?IP#iqAd)KpYbQavIr3b~L&? zcxhq+HOS%yiXvMPR@Y+v)kZs#bw^n+S}$=#>VilGdFHqo7^}#_F~w?51^JY1DA@2R zPa4%{6sfq{5jg6-Yy{aj84IPHzkJg*4UAq3s^UtpP#gmyMv?AZFE$S$T>jPE z1VCPad2psd;lWA)!1DT870E7vf??2LNrh0^&B7oj1(s4ECkT)ez`v4`fEYtPnVl9b z-H-qvigPi>=tRNx_AyE$wFwrPZ}+J?j1EJ2^`yYO1<=jVxbN!vs=rxCn}W(a*wV__ zn$6%AYM~}0O4(a3N|tUJ2IM!Cf-Vw8EFY}rDUudoGcdEaWKxzNh8FWs|Aab{{JVj( z!_AT;vH<`RKh%b=__T4+d6VPRRu0O}%{}c{dKt+M-lP*P3FC@8lzo;~cBru{LEGWs zUL@y&+>7;ZVM+{TYeu* zr%^v>V0D)?+?Kp={>LGMyfj40agCS@(*A9fJ{X8^TgX*lzlq9*XP|0VeQipT|It!Q z@Ct~zD2mlLt6gZ!>;zgQ(EulAl}!u)dCy)uKH9R%dY3}|UsX$e;10|_2WLmlnv#uT z@n(Bc{5$RMsi{snr`*8U$cv;ADWFgeB&X*zJ06dEO*AJ8?7&W`NMUkb);9xU&Q8Mx z>z-=XayT?P!&(I;x}mZ4Dwn7a+fY)IyD-!exuqGPe}FvGK%v%Uiyru^k=Mx%p3)*h$gdf;cyZf=aad zkE3~7gOoHh>$SRcWipE(DVsc>+Cyx*%S<*4l~buH525`{4s;Yxn}jA!dGFCDpY7DC z<8?o{vdIcbCFwK-z>o_eK`cD-oZ!wH!Z5xcAj1r*=kn`3jcYl@l{@C`qohZ_xIm$@ zH+KnUCWY{5hQ_6@}yn%~UNq%CW!6~+IE?-<#pmVF`h)ud1uW&Wi= zn~K1}Fi`Fbsacpqi~$fS0*rD@wnp2$YUwM&)Xt-4QHX|?v3XQxo zHJb-62j#9f0iUnuEjvc|1^Xn?A@kHMSaSFQ*-e3T@_cL?>Ch?rT_y`&XXR6hFhoRu zaJhWRR?V-G3g>C#tj{+fTs4ofHy*NOl$TPx;s_ctV#@F);O5|#O2G^V*{%pyj73J_ z%UFRan{Hi{jUKFa#sKk}MjaNg9^i-o5bJSBv0e{(t|LM&k!1u(h*7Yrjc5QC7V7+( zIw=F74+A+Ub5MqsR-_r7D5i?l1>~44su*HJH1Vz{a6SGTKZJPsELSUex$EDcbFRtGZVk8dTWqLESRVbz6nc>s|U<#h#+k$NDW=`m??vQ0X*<7@C)AApn4`FFFQA6E;9`D^ate<~BA8 zB;~ejgD1Na-JMv(pk%^?LOCp?hJcKQiVSrQpwX2EM#ePCNdiRGF`&%^WUN--B%T38 z1Qa30F_GCx(rAMYs;PhhBe5jh0}RNLc|dY<5#!dn<^+H;kTek~d*6UZB$~)-g5Pz3}4hyWu1;J~2P6Owy}jcKy&rPWmc+oT%H7ClQbaxMUu^YpW~@YUb{E_H!vv#T9xQI(O6_gSl@%3mE3X zZAll5ZxUc6lY(_G%CwPqPUHD^fkbcJ_Q#1D7>FwT3x-Fi-ULepkqZaVCD5F_??Iq$ z0x&9*`b;PZ^++wi!VW+{LXODnaU!*~ye^>yc{CS71@>igULa*lxoeMla1j zP1dbn_rdfT0I+`jdII;@H~}GzfA!7R-Tp}Md7huue7k!^xv+pRY0Neo zaGw~#p?;0_Wygsc&#?rW_3#9xtIMd+DGjL4TqCAg?s@e+b)WrGj9;YXhM($tBsURD z@cStjiO?CbF;X!B^_0pI0TD%@zxHB3`sdp_Wu(-V$duI_7g5h~N?P^J*`Su;gGdMv z)KWIk{t7%*cBry&6>x)y$`{#Yo@f&=NRES;5$HV(l_ru8K#2?@ib?b1+PtiPYMfRj zGEs^VBcs5Wc*!2{4Qd%N?5W=fb@*d2YZ`!sK`nQvhbkffMCj;64%X>iBu50PIMfw6 zW9G9Y(fP!&2HDkxft^sJ_c}nfk^>EB@NdB&UzpWyxv9fIm@W@D3Ei)wZYTckU4xrR2WaLIk4D`3{H0TYI#5%qN;30^CwXSM4ptFNv&l_d z^Zf%M?1bzH0@mgiS#d4CoxN$3Mdj^6q3gF$3$;)Swa`{atR|u{S?pIJ^XV}y)N~ZY zV@^r>()s2+H;qV9jgcKz31j;B$I@#Z44sxo>_<(f~P?@Z8v++ z38S98G1Ib_)i8S+f!)nPGnP4f!1}qTpr#KqFe%t+AVV(+J}PcwZXHU56HGp&)JDT4N?vpo>a6 zww&3eg3N7%lBv9TdOK8zY7YzJ%zY9NvM0z5B72RaE3@oX&=L#nUKCEe<0%&s00g2q zw0}@WtIRHDc8|+!f$));#z}21K%?feK8;5c^JA#7dA?c5pd*ZZt*K|uGG(Um)MC^~DZ7dx_S)SvKmA8j+ z>{6MOuY*+YC&oZ|D2b69O99EMaHT1!nD{ND2ns8lMZAuDk&l9XJ$BpW=#j(Q zwr#^tRjlWO2Olu_fPqgu{rv2C^Qzl-xcuU?J5+Z7fHie%UVC%$XP$gTD7TKzkcJ5|99ucjrAuUKWfN<1Gxph_;U7N{{A2UT=TsPcj&%d zcB7T9)U$FZ^g}&7q)&;f)0_FU*(4sC;{pv2$_ zGSA~3xqjK^lx!0;hrZ2eaFZqbVOivqK%Gc77N;=}WzPKAIN>@>=BuyH%|Vs}6%K}L z5NNORbVggQ1g`_bIFOskhh41gg5)~k7KX>T(7C9rw^q8Yuj-ENO+@>?y-Y&@ygT8> z6xo11cw#zr2>trnQM&by>TdCq-5=S(!O3%oW&PhyhZlSd)I@C9qv# z%G1Bn9iQ(Ml5a4CqQ@vFE0)VbC{@C$J1NL0$q_CshXOR&9b^ABCeD$F(L3hdbcr4FEAw28x=YuyPzP@Ttwz_ z+$Pl@q0Pu$;}SV;p%!YPqH*L51+-v2RrKLq<6ipp=%04$(nZ}_ zwtV>q(`R(+(q+t}PcC1v5&#hK`&WJk0P5@OFS_DKD^{*zHeQ+V=F{WG|KYbcwr}5# zxmvMu)!cdWIn8Tty#3Ovuix~uA5~RW5I}u>{dcbViOl5HiElkK?xj0#xuJc#cJ14@ zdu`&|aU2gma3I^#&%gBA2h(Tlu)}sc?2w8wYtrykN-Imp)eaiCJ*K4s9uJXMi5Fzv93_2No_Wx(o?HdYdI3%U$ZyCAd^ zZ1bdb?|^I)Fhk2j;&qw73k>+I6gainSzTtxi!_qMQWBO5Mh{ zYF>FW*bF4PQ8&040Qoph;Pv`X^Ik@S2!t@O^n0T#12l6tdw8db9U?`hR<@<<{Q343 zGHR5&?%He9p0O}3gtCj_dcu8Q0*VP@wIZ6Oju4}a+_K58i&89#Ujp^LgcyPM!+5_Av?iV2B059zB2@c45K&}0 zO!DvbU9lv?(?DpXm6&r1C&kPZc3%U-8<&>*WW(yfRB-?bpQY$07*naRDs#a zZol*HmtT4P;9&=D0+yN^mACF?$*sU%%g4!IQaA}JTZ!pmoLT~8CtGv0;=X&?4=Ij! z-K9S`@?1+(0N8wNJNvfsKG`pShqW0rS`OFf@Ar;*{f$XHNX!ber`Mf9DnQ)9Xho0J^~4dUwkq9?J4iIYuDz) z<3}l|;qxzMy*=f<_3PJn?o@N(xu+g`)QD}j?fUVIFBU9Z97VYSd+q`NGiS~H#V>ys z$MNt(4m#(|llIwbkI%oDy=d{$xnF%f;^4t5Z+Q)?SFNhurGMXR ze{jV)r=HleXZNY^Pyc$s!ivg@z4q7@0HVmrWLKTZ>Q0?%cHO04r%p95yfk6)lBL6j z4yviH27rzA^|#)6&xQ>fPd(|FJ$Bt$H@1nyAsSynp_y&YScYf9nPvrJ{U{|>DveSx zRgW-%=0Z9q(xl#7`YTi6pt_}y<<^X1Wh+=~S%8B8Wh&K@rw@2j2?MIa<|BzCfM~j= z>+ZZ96(D)^fZ^!OEMwhc0ZtXz4GT1yhHOEK%A!c`I|j->Onq}$WpCK-&NbC!Pqy7m zwl&$dZBMps+qP}nO*L^QyKnu@Ip1}i{%-Guz1I8Q&-2`{;bV9UrHQJJ-*LRki`;;$ z!wdYQxhtyNNz$P+HsC)MZV{bCg)^?_$DpMh01A`!JM^S5aG)Nj#+VXRJN#MekPJ+X zNkEtq2WVj&H?{Q2kI}mSk_3QkM(Q$LwyVzj@iUOzB~S9nQ+(Elgy0%7oTaf%_!RXcL+N#mskLs=}Bdg!(pFPTaYGw?nW)BA(=yO;HQWJ~OOQ z40fgaOFzVsskFHMV04{zk3flbk8i&QA<}gg0EUu*V zQWXkTQm-$;)~LU2i?U;=grdSp8ZVNBFJY;Wi};a5G#|ejj^1<|CN&kITjg6%V7m-2 zY$omii5C2iXUm60i7}Tw@2*xWRq5Xf#$Fnz7QDE+^TY}cSJ~K3$ zF<(;k$dG@w%}hic&QfE}8bmOhQ&OeebS0>4pVxLfre?o@_vO7mmet{7_!FkKm;%9$P&g5;gQwZmMTa4k`=HLiatMZ2 zFUACHdw9g_G{&aDA5CvD3)1GRNP(kcx$Q5g^+gy>%-04b*H{Ix@v%4I)=Z98M~cbs zpz``9>F`vlR%Eg@o7^)AqA&1secdz(7b{p}-v($@k6Gexm~3KxPKYXBC?**d7Q{vsu z3vk^3s#x_?z_H`iNZM$!5!48{(z)wkBfc&#}-Xk)~-D%G~%>1c>?>Kd*xO>voE-m z7X{gZUYi?}W#N8ugr&mY@5_A*FwY@4+#(=>Opa=|Z3}TZR`cF&AZx9?7+`j5w>Oj+ z-QUIXLHT>=`S@IZerO`X>`-NV_Y*vsVb>p0Mi(v3a#wD+a5-P;nGNzKb_wmZcAF=HUlfQ26G2$O|mNk>DCh2i{93B64f>d0c_ z!7qNDNe9fzMP=#F$;2{n-ynBhk}1pTt<3F-$g?Eh;Te&hf51kD@Hw6zmCdrAhkA?( zx2^D;@r<#b8sWV)LN+Ay<68?p++b=l{aR8k5lQ@V27XJ|_L8qqVG`grz!(6HDUacB zfC+Zw4^j4t0HxTN6PMl~`RboP3q7MZizyHkX6$lfECO3kySeN_rXpV|ld@Ul#$zY| zDFo~BGqG-Jirz!gG<_b|6jGbQkrwMmHjCw-CBYN15|Qz2nlB3ngJ?LEUhl0Bo^tce z%O^O8>U*T>b3-;`Q}cBf_hmpRK`y70T&1eYE7I0^0sM^ON_oM!(hlD37#iTlVX@tz(%aK*_x2oH zNY(K^)45usTrod>W_3hX=Lpdbq7JWEaBb`t2_R$Om`=efvF1ufN+fCbPU+xXRiA=nWuJ znzrh=b-dPozIpZ+=tcL~zE#!&Mzuix(^fd}{MOob*!Jagny?uq(9qJ3^8LH;%keN+ zzro=3a_-&hS~LzVVZJTx-Abjy0yH$I=_k71UXPq6Q>xc|H*HI^T?g`ELL=pj6dyJ& z-FCK%on(QEI2Z4`@AFNvZV0dmbzgskQp#p@IIlaZ_SAM96p)I?Fa@7xCYE-&eL}>} zWIw9N%8sG|;0Z8ZKm-Y4EEn`$s)9!`zV0*^iV=9;NREQ~04@LPXfFYLOGW0V!hZsv zrjHGm)$9b>c;+9CS|HHJ>)T{3@5dA%&~yXN%W0OgxHx!9>RA|m3G?^DsnW*guT>bm|3 zK3}QnzRpFO&SGzMD$TIN_gf0@;Dwj;J__IEQe=K=#QU(@wCU7wSO+q1`}T@cKh2lQ zP$+ZV5l$@@%4IV-K7Bq+YMuZclOojizgMp%BFUJ+-W_h!lk68=hjpkeku}Sq%=3-XAxuZaNo1du8#1Hr>tL*9eBHcJO~SrNEMsIsM}u-Y13dnIO5S zus1eyr7POBu!-#(3mvM#{I-%?dG0gW6f^F1*Gq0osgo8mXfwZKNq#l^1>#H`3TS7! zo!+Hjk=>xapLztto?zXpW*I;jJ5ee9k@5?>Dd8DAlZxbO3Kpi9Lm>Y{G+HFC-}TAF zCr5Hm&U|iS4l*1JIh>UL$1+?07e%WKd{pA=^S2la%-{y|Jnf*ArSld6sRPIoiryD& zoaH4E0YS&!ku*A_+TZytsTivj>KQR)fisoIuQ<6`)Bl8s@{N@ZJ3{Vq+-n3BOhk0V14l}&sLdt4- zNOU6?38$w_A4JUw5;)AFZg#Wa@f$%qOuJWi%8%Gmk$CQ__o^GWU-9M#{D_@}EJ zJyKUp7B2DI*sb_u26dF<5=tkcq%lHN$co{+mvg$yH!VYqj1O2b``L93XlX98W%CyQ z3*YcL_9zt9r32M@B zw&%V~VUV%&?kyUR!~5k=st!UJ>wPzpuft+BWw!mD$u4hejqNl9Qgru~pKZ@!%luj4 z?X}$d-bkh$_u1Is4FAc}%gc*sWGcCA6;%Yl=<)mqW#+o;y9xL%JjJ?gua?Ts_QPDM z;qrU@2`|mTWA;A1Y~4{;(Re=c8`*Zhwejn^RpWJCwD0$ z-EnudeR}{u16Y@2{2M`R7=ne6-I^`|dVZhu5PGZ=&x83}N)g@5^1j=e27+ zr*SO3nfKf6N1(~{@ptemW-u8#EDKi!#YUUM;jH+s>r&Z%s?XzF^!+*CyE6sr#WDZu ztlMXy&#P-z@2XxumnqUr6sEh^LZ{!`Z8xBVn+SmUs@-Ki&j0cJcfn+Gk?UoC^La&f*^-{`mm%}Lyw5{MjNM1S*j-$ZqC752Kb;n@Z9CILx6tHy z-GBwvukCOZ<)GSa$K~);tD9e`?YEZ}XIkB?jKi#E&4m$mIToj$Ms9Wu1g&%>+N*XLo&NNw!< z_r_Nen>chnln6XBx2@$)Gk_!TAn>b|vimi(^NRN*N(q{f3Fx_yKW^t@lT~St_(NWI zJ@zyDdTcU_6S($smM*W_X*aohpo)_I&P(`#nwazdZb5Uke&1 zc+GVXM#6QTWUR4MTig#;qxg7;>2$rAZ&b@AmZh}83h@t%T+w1)$x&gORtyTf6TB{kl4|x90 z&Q`q7*GR=;eynBQZrZFyi%7;hrvsBzXv?Qde7|x)nd3LQbCT<%2{1BMn=9THw?94K ztH*N^+FhqLm*FZHRjaC09<@}OBMzTFZ9koCF3&!EUbWq4EO3aXZ-{@d>0PGi5O!oM^aEdVy|E8P6?2S@i=G6L0)@szuOhKnQ z050Mlr@}eDs#=}(JR%w}Yr^wgWIX>@Uv*LOq_ zu0IXJLInakBv?U05!t@ z^PJh!o_Xe~8&-e7l~Vd|NacP9WWWU@15T&jpW;xZV`(wPpLlE9l2*%P^$|;jIPmof zu$zKAG(zyc4Ojz{b{gp0H;Tl(xg}C@?#k+XT`t94#M(dAWnDJKH1GTu*e==X1~Y1H zzOxr^kiOzAk7G#djCE&Itd0+1sxM+LK{mPnTe#Y^oAg6P z@uT32AhG3gxlOpv@_J6@e_j=i)${I8k7n#>X{o8Hu^swr(Cu{v0=>Upj>QtVn_tus z!)UvI;GE57yPdi1yM6Xz>1Eh&)suql^@olUIQI$s8B8kzTn66nM%60M33xktnS2Mt z3H>q<+06bXrfRm@`uuU5QTn;MZkF>lvt(g3%ICD4ygU91g!6%zE(2q)+FYCgsNPkN zKTJlAjl$6f-LFVdINU&mI?H{c4BD!f&#mowIolV{wGTLcQ`XW_1AKml{t|b4xrT_Yy20dG#dos zez;n<0V)a|Cml^{B)+>fL6|GIVG}HmN8pRrfP1U!-jg%HeZBPg>stGMK)M#+?}Eyu z6aceWdhRV7-dw+jjB2|-N+KD#w0sV)`~@N0cFM1tkoXMqIC&kaP<#0=je<9E7qFGS zX-(^>c2!iMqPPt6zl}j;Bp&{q3xxT+zebYtJ?SQfxkLix`aJvwI#6HvjU_Z2n}Cif zutzE*&SA1)S2z&*kc5O4#-Ks8;*9wi>b*N4lR z&wZ7Q0Q?p|gSVhRgnknOPAV$PDyce401PGAKP5%-GQ4QK_W98btgmt_bINBE6r?bs zu$6jzbXSPW{!iA zN@msDEiph*xDFCz6k#DTK?j$8Qo+h4Y&TJ0F7hBYDHq#>u|R;+1296twn^85yR^N( zeOOuk{bL1pC45W4iCiFJmlfVAu690BxydfeXh&)K9RL568TJc-KN@Q?g}wg zCM2&~zY}HAw>oJCQkEnC=!r9)qAF&K`%tnIHqTFiOk(BGAqytruVsT|IuSVvK?pDX zDG(JcD?EkrneP3q3jVw2&9FWN1z~eDCd3eIki=W%RZzoh#?J6+o5IkvNhxecHawW` zdMyDM3W<}!XVA|qMD(RQ_E%Gs+1eyO(dnL-7ti#kUH~cDPe7gR4u1MZT+_C%0%f1m z?8`%<{QKiAqZxY-K{og5H=tLFXZv>9INRM+VvD%D+gAUvDBp|CW=`0%SfjHEH2S$N z2V;*nBR#e$^xRz__0Jt#t=d~{HT0Sc1fuQd7g!SaeCqqX`6rhZ!MQdVCx&lB2 zePU|LTY-sH@~qQ{F_?w+Y@ztJ!Gsof(D=Vk>HzjZmKCXtdgV2%HCnlo>k=pm=>K|9 zBTHXiLSoIlUH8Bso{wj^A2Wf>b%3gV@MA~6EI&X#qEO>Uc5{K#i5v{V#tGnM==IRc zSY56)84HXPWj`{0_}!cBd`KmH|G}!c7s+Tko<|ET1JrnW3&5}%2y-5e8)8#MiUYX3C%M`j?!PFZU-7v>eKFh*2c^r)%K#9iB4P#?aB&I6pjDNE<`E}gu@ZD0 zW-SBYpfC{j0a!9E=K{)eFQCS~tPAXY|EYh;g&T4!7aG+w21IPYr}G3BDc#>-&?X;! zzD;TbLSGF}_Q&|J8ByJTU6_3PKWFstI}YLzW}clI!C6Pg4Ci#QQv7^H#d9C#bO^yZ zpN#Dr8~2+xcwt&ByO*xXO*PZ9w#e`q1_FiFur0t-2RB-Axq{)6)M z_WKD?K*h=SDUo#qpCQxw`BCe1GQC@8Fu3%{@9BKu1hW6TCs=VG^UZ?^B=c%Ng74Si zHk0K6On6@|Zr9~`?%(KpJ45e>hWdOlyZb3eRv%W*&U0R1rjOC)k6Q!@KBWz2FsncmnP>q$Xb`) z$xmkQNc04O{w+N%n#OIc5}*k9?2U$tunzlDWB;6B=^}6?&42Ue8YeS)22?~xTHcR)ZDaIps`wgKRP?nbH6Vy9o>GN4UOSE``b9n(_T?wdAZRHAm6H*6l$RN zH>+0%3tFkt!5eh|I%5}}(*U_;el+*le5AC}N=;lrxz%(!OgPlEH(^A6rxldv)7f$} zd-nBG?Ta`4CD8W6a5-OS@3L-n(MhPRjMS%))b*6n^ZjDn(9sd-7OHarbJ;tq^oi5D zS;MX3cFOcHZdO^jdEFuHXSY|Y(Z~^V$iMqO+xvE@_i`VC4N9TcdtN`$dwW>nugEmZ z@x1{c(?P1uG6!VPxv%&AEo0Bi(&Fr{*XQ7rz1YWgs~uwSz1qW`j8y<&SHWSsb;|C} z?PebCs*VO+PBdW(ad9g5%%>;u=X!q-mx<-(M))X=PT~S8JRvwDMPPfTE0w&;md3Bc zBQsKPwwo|vTWp{63YBJHnw$GHvPqe1FC%vF6+Z!in^kC;!HdiIQS^a`+MXndL*fj< z$eNr;0nqA_`hR&iA-;Vk3|c;48FAPuFTq8nSnR6p@jd!y2E2gI_mvRyGBNW z-6UxdNi60RaUMAKE$98u=f{Q@o9oneHH{YMN=RK5(5>RX9K=c0b>S_&UT9xzH_NWd z`HIg2j5r2AU*BkFd!IId8#iL%>AcI3*U*NglAKKX75@e(+zHB*&O(whfT9S zj_nRd)vjHAe0$iwEQt~-%=!F9Y9%AeFog&u@BwUUAsY#e%XPygZ$zS!#+(kals)U( z0`T#F%8H+Zjv+IDi7BnLI18USxc`?6&;rL#Pn-YR2{-kM8ve>0W5j2^_GWLEt8PrJ zkKkZz!1%|+#Ds7hN-EY_bjF;N1TaZBHWhS`Q7x*chi0%3u~m1n;ID{KeE{t?Cn_ubb!RI5p(}e74cIdF3s>m zD)BU%XiA7@=fc;tLs>vsCU`Why>=da8O{-#6k_B!4riFz038h8HGZZ}(0FZW98lq+ zz=j`$#a4=Psk#eEbv_{=w=$-|ojw)Z;h_9LD~xlggTr)VBNfnf zAGYB95^(kJ!}-nMm;wwZ2oe#pULkQSM1T=VXzX`0A{nlgsWg#FT{Z7N8`|WANN*)_ zL_X;xa&9f%%(Fs5|J_1Ej1tu5le>7+Uow=qG?&F)h--I8Hd7c~jfaalo!49*3!PZm zejychqcO{XhbV-AipdX4Cv;I@{IHMY>pkd~ZSA|T~>X*k|hdV@mi_Mnk)Dl_X zi0=P_%@DT4Ju)rBn`B#O@Hbk!-&?;|WM+3R`CqEu5kXse7n;0xt-kAV&&*U@gx%GQ{Ko)Ixl|1 zs}Mp07)t;yS+EQwy9D&tEw8)TZNUU@)%$Lg z!iG0-hETYgACAJ37uk9GDU6zj#N*ClhFC{Q_6v!y{qsUn{M&^{@GReDQ1kgpHvfX&PZ8HS+vP_0 zLEkCqbvg=+Ttf2$AMrSh=VEI=ll8$td9M$fF@hVP216y9Q$%@H?zf`h2Qv<+z5DGpZ&sL-}djngT-C=^SbS7=zQ}TvJd%Dy{hMib_es9u*%+QStq!Q3~ zx4||vsd1aEhk7TuIbfG#OzKIQ+lEzS#87#jw54cB=4o+MXqY((ApkF#OSi;x>}e8I$AtqB+VH9|cE7GNn|uoVYF6u#2orl}k3;4-Kcn*-R9BE)+(^6uJ0g zoG$FbPl8lJ7aH16Eqzl_rm>QLJ}7<0aKkzLF&>;#R3>97Jibh@0GYKt4BRrDfq?jj zN@Dvniu-NPf;ZJvRgRP~WpbdyKbc!TrP0{wEt1CXLL;qgTRALd@$fH?M|x16$P)Iu zDJKtVn9d>46?f}ni<7|!5E{Uung|7wKrY;HZ6&DauZAlI3`Nde(V|zzjBP?=t79w{ zy*KGNgD>F)^H?SCLTf^{>&EP`f1rz;Xkax!k?GO?>Kad?tMmW1s2nO`SGGRl{MXyA zbIPL^B?pUIE2)JDvgoc)1_!%$>T40{_%ZocT84FbNJD*4SRnMJ z*UN&5QLgt_PyrQg-HB}?r97{7+ryq#qv<8gB0uMAR3a#^p`pQUmk;oy!uK_|#9mo% zJgKSB@p-YJEGxjn#XX+NS+%I$hOf#SMFK4?IcqmB2yMb+F+B8`d=95JuGDJP_QXqw z*vWgk`G-koJ^*bTi=_&cN?;6tIp7+{_i4EDa*y}4^$y6#Pj`Fmh^LB@wa_ufjN|y8 zk8UHhulip<(*Ds;0Dn5JfB2n_w+>?zP(rKY&gb&G|Cuh6s5sMt&kcx1T3K1$>m6gE zKqGFP+!c?;`rL4Wfc<#QB-Ixf@N!CYF5VcTVdf6rBg2{#>>{+k+wJufVAEeQyv4?DOg%+y;7~OhtYaL& z1{EI6;=HxAbWJrCb;l9A*ls-WS}cjxA365vF0qaF5dS0Wd4f0f!^3J~X+QKwu6!1| z*;U2HvRSsR_#c2c!?paQFewW9LL*N|P;Q2y|J zE}x~sM5^7CW_Y%DO6yfH(BGT8GR5|9b+RCoHAR_AvY>Via1drY(?^7>jg?Fxy-XoP z;M^Ak(#UDZM%4*Sm@n$Xg=SjiD_>~IVnIh$cr$no%R2^=vwOWWl}8@4Csys>4c{ix zJ-rvhGbuNloKaUU4i;viy9`M?vZvS)!trzU1FXiFZYjuc-*F}is|?~-kRx=c&Enja z@t_9O!j0mbSeC#B9gzL3*of-e5g^^A8CxhywV86$=UISZ_^l-mvu$L!rss*k2h)?($eX1Lk#qxOE_}I%(N{LsQxH8p(hh644L;f zto}sns{7k_E>%PX=*MnrZenOG0i$};!Q1m%+bdE*A>+lGkH7X0XwY_NkKfVSI8>ynZoBKDw(><; zy%NvXHZFTnJ5JC}v2 zrsgqhIiklzGQG!v@=$x3depyeugB8Qk5oycf6;TN|9VA5hqZegeJ1Q0ueUpQdu*J% zdNyXtiJ_ohbb37B$L13s4+wbt2<(Kdg%ilw9#VH_a$~z4FGsE$PxLx{&wXBl=8G~d zJT^319u||WzT?ZpU@_`-+wb2bSFWN}=~ofDdiagjyf>cENAY;^aXc)11d6ZPtyy9> zXs;_$$_3{}M)V6*+{^1$NAw{Ph=}W3MCeQGr&qn)15S?cDxoEgZOE+U>6I7wu`eqcS)4ZdO}$ zHSZd8arv@eR6{7GeorQIQ9BplG=8)YcOkM^heqSBa1#3L&&40!pPO6}kIFS{<6Ex= zH;WmXi4#Q|(^`?CQOwFnOACYE2w`V&hf9n$j}1B>YIS>`N2WJR2T4cevrSkyS=6WW zQ%*PXr+Wg$Pp0*7F?@&*E}nl|ae({V^@GR6#ALQyb$ESeI36f=NVI8Q_-@GM-99uS z+ne|Ev+u4JB`E(ryibDNGx|MKTw>YN=CPJUVK{**wXtcz*Q z0$ey2xc~}A^o+Tv(ue82uH6yG?8sQTtzM!h@xc29c(h^1R3ez7Q(3(^r05Al#~W6 z%PBF%lh7{WuwQhxI|g(RM2hAGNTk9LM>4;$hJ|6*P0KvP!ARqnB+kSnal@mWDbT0f zal$*9!6&NRnLOyjSS`3b*+ZHUOwb1TEO%=}<4FY1Ijpm}?G(I)3dWC4FS9!hgIRu0 zrZiy=4-dEd?Oq-FW>fTh<9b?DvEm56+-kM|M-w@$%|_)@re zw)6A^$tWL7lRWuoI3k{(Ph2SO+o?YvagW!UAyX3ZdlG@*j`=b1XSHRpU8r}x;qps# zW{Vabrte*HVruE=o**HkW`pPAG5*d@JD>S3OOts#-gmoA1{l1XrAnp4tL@js(vN>f ze-?Q>x_0e0wFBc-YBlF;fA+&EnezI+E$z-emR`d|uEwuFS#p<#D0f>9ms~IBa{1KI zP4XiUqGRuw$yy7atrYt>I!@Fk`uV**S@`!}hY>QjbUn8hCx?&e}& zUf%enR=IB6<9qnfQpYQ^_ods@nFKtme z;8QD9%F_^YLX11P*J>hxYiST`fC>8V-39hlY@WY|!IS2sf96_D{>71ex7~InVr8`$ z8pw(Uks-veKtnbI44}8S=L|%x56w0by&WF>&1N3w3$k92SSIQ(Toqd1$9pVkwOYMi z&MCwCBnAa^;-lYxnC~iMKQ$UW4^#g8S-D!QG`h^=&(Bn)C~#rs`s*anPU(pXCZ!}M z{GFpjjF=1fKn{8^0!~3-q#6n2bZBZ8%B7HonR^mj%ub0IB@EPD;T`J8rFp)P1-@^0$&Skkhp)D<_(q2j+aA?E@43! zg2M9036xI4JoZ+1qk9Hx2&uju?N)dQi&P}xZP|0W8zK9WTnOAwxuemeky=`fIl#BD z{j~UVBtf>Ag;IvvcTs{@uUDVLhz=6N4j?0zgpNz2wWvsPS`;LWEi)`Zkdk!BCN>H$ z8@GlK6_TJ%vqouz6ITbXpQf#(n^S$CBtg*@0B4~(TdDPUL#>o=vh(RyTo=w@ubL|! zP9_D}t7*a#pRK5NH$dzE7Wfk2wXv*KiW=G#Vt_0(^h~|tA&5aADR>FHsS2&(n8kVs z0g^}{(-@I~c3}INuvZ>=LMd`?I{%@z{JSm%X|}wg*C>uWD1FuN#!mwrt`0&hEp3)q zQVbg+f!vV{2jxmA0Adnc0yPtn33Q)S?MOFSjFDNHCZ6BqfhmxHEG=rilQz@NHR+(T z9Cu7?L}uX?Du#Ma1$G<;WkDezLmn=S6%{rL*N>pec}My(AQm<>3_^9vCPs;5*>YV|K0Kmi-lj7lA9c>_)K-*j~GpU)njhVpcq<6eM4qL2sQ}{qjV8q(U(Y#r>iF^ zKEoKm0k^bWO=rllpjBK)Q%^5y=XSMEiVKYTQw27`G?9AO2P1@Bp<3@qIW6^DNhrBZ zjC`5RP>jXmnWw@L8r|5JLfCkW(&(JWWxW+=#6F>ASPt4TKlZCRg)|Wz9@zBD6&Rgl z-Fl5K*Pq#MUxN0U33%W9B$Z00CFSG@IPNB`y?ySB>=snL;_`}&qjiM{IUVnot{Xo; zeAm=Oe+80BN=Zucx==VywUx7$#v=W_U5086iL}qtXmR*8`t|GD*RQo1=-9zD|5i#0 zrZ_bwxs~!T2*Fo2U~QDGUx*8Pc?11gERIek2?(wp|41N+{$8ZDLs+-q|=C$9+{rK%;791=swWi%2$a-7O@#Q@%+^o=0TU(n(jcT#eEL597cZ2rn&Vsbx zCFCc%RNy?=bXY4{wT$yg00@n(H%~cG(14U3k0v6hDS{qRv{t(DE1Q;5j!7IjP;O{U zR0T2?VkRL<6=^7EvBOE|mtF41{oGrM^u| z@Y&w-P(d7d`w&_F8m446JShd(SqEm~9*Tv&C$`=Ib|O7ZcbOpp3X#Ub6dmwJ3y6`- zA*hQ1(koEqR%ecF6vQOqJeg{VfNk6mD>+56-t&X`izv1MnNb{BoCzrJG=9MWJBA1X zLk%(mQGqC3XD|#$11}z7vxuHVCsaF#7NoaMaJ6)atj-%zNyegR0C<51Q)>x`hOkRXf%Df$AtwtE5jKP~hD@MqJj?T^)Q5`$$4{IZCz8JSWf1;yD*=N; z3J3begbdO|y(zZDi*l}3;8wKQfv~#FE6anXA)v({UGD?W6AQ~yiN6sr!*$VAMrlKst? z(F`v~YAp{@0y{`x>#TrNLDtL8zvA(Q++7@e9olHOPstS9$v^C)1(U&Ri#0scrR;n! z-zb?Ti5?eK##fW>n58%ZLLdPH2A2%yoKdd};(fJ~$mScgQf!A|aJP&?H`4;6-VVw0 z$9pKHyl52O`?mDKC$2R}SEWr^|W+SIhdhAdDl(7&WWrkFbFh9&zIWRS1wEfh;< zdY+!O4%?5ot59dfB2CNclJ$xnt)A%CDcr)LN+V^l-kYN zF8YPl`hMWJUqmT=WJ=?pv?y`<7=MILs6$uBe|X`RR8q^t48gH13SSDrm7$tlBf>Dg>z)5n z5{v3}4+evAP{;0j`4cFM%JGji2c9IhryKUb)U07lQP899@j1Y?}eHx&NNDmj5J zPcqi@q<(pX>Rg(>V?11lMtF_#Z!EkJVahmc7toyS-eF1^I{WN{{5}-jIFU~A4XdPl zU0{1GCnzxBzG`>dDv1~?+wb??-QAskw`J7n;pm(FPF7T>@E7YE zq^j)v`}bzk*(3>^5=MOsQ7kOTxIYjJ2|*y>_v%lI*6S^4DXAP*JHc_(VX3pO(>E9i zR;P7!RrO^z1m(?dX~bh9fkC^!I_RK1H^<7(7n31XG5En-q_8G*3Ut3kMJ1tNGlc7L z{~;Fr=y%1SDYaey%4>+rtH+vvn)oB5!dw#;L9?pOxrO=7u{~OfEstwd5O$7>8=<1Hx)Xd=5jPV;%;p*D>Aq z_EbqR>7ei7x{L^SB*x;AD5j{dju!G3Yp{uj!IFr|m%(riW7@n+=6)Mvku2C&%`ijy zvJpPW=lly`_1KW%$cSbFp+dAP`s-sP3)6KSvn>gemcbj8jb(n+uG1OL)r~^G%q`u6 zSc{Da&y2!%jz zs)EZyf?j219N^|&1)8u!G%Tg6iny8-&3n#p2U4~o=C zm^`N#h(utcpy64XL#W^8WR#Ky((>!YAv^un_j((yiu^~64!=&eo|=?6mgMp<){@*B z4OFQ_;VnkAd?+H9%4?qbuN50|cfUmGD}(b&!SA>*+`FwxL7Y!Y<eE$Leoo+t_}DZQ+KYq^ zr{(@lUT;@iu7XsZGS=1Byj&BV3T1kYwQpMC>lAGWQV5t~EBKX8RCM#b|ChA7OBz?@ zdcKuEL@bBX@L!vcKTQSu=rRZNevwsm}(}yLx@7o7`vIwI@Mm?0ZN%Rs^LYg#m(T><23VSqW znjRgmSv~yXJ)hC=XM_UVrFH^Yjj1uUl3_>1Pw&Xcz0!iH z`R~}qaB+~RPTC0`NOR6u6v6c-0SGJ&zr_-zO}4VA=Bnytn5R1N`{4M^N+T$VZ+1*& zY$B{3i4N20oJlG}ur=bBXvT?1aSSAnZT*oqTLt|=Wby4k$kzGQ%S@#*lb~iIRONL7 z7u!?lFan-XjS_*zc1ZE}v6N^0ZqiKSs&$aC?>HWZ9rgJou>Etqt)0SEC`>@lO>wLY zz1OL&O+L*u?o*l1o{q87SP2`}IYQBA=9!~1MmlGvYD~n$pp6ijP|>34;|#&p4Yl%M zutQbGgjbwl?I0F`@}@-6Aq~mJ!MQ>AuVv20BJblC6oR}dNz2cVpAgixuFH%86@d*E zL+a)P(B@X9-+Am~yET93tUves`qnMRvSpuua`0Ga-{((z8dmeS?7MD(61bv1etbT3 z@qj8@vyKB zc7J}$UOyd)hJ~IS5;cLf4KnfhE}$| zaK=6~e$_*(pIyljbxY@{QUWO``0(o~C?J;~Qms}?0*zN~Ak!JeaU}g5d(rDDsUL&W zDA8&^5u+lbDa0KtsDF)(w42yRvCGJYVk_30q~oqStPZNXi4yPoM`gj1_FppU6CL`u z>55{P&%r8sH$+KT#2uO7#Gl{$Lyh{Ev)9N>;Gu+er@4m@u@K>mqpIrA6X{k%PD!Fz zfnzfIed;53zS7n6$$P|@{u!g->1rq-q6VG;YUEuIdYCT;51eEOh0#Z2?5os)olz%_dD*!&1Y4W12OD8OR&77 zj0#F3eaz0hmSEE%Y;QA| zvEw$=tMT+oc-Ki|QuGy(oGFKU1Og|d1@==hXpXTbb1~Q84Aadl$3La80 zbN6^KRjV&U`SKGAl?rCz$_MHS)9VA@DpR}#j(=YMf`v=V;R0*<1$D1I`&6lP{D5|V zASMVK$b-#(n1yd}$9n2#GSehVDJSw}TlVJ05n#Xp$Apq~i;N1}Za)7xt9!}IyKS?V z&zQ-e-R61pH@&SbR8H>r4eAC^uhr=HcU2&#oeMRMR9Rc=TVZf}tt5!Y<|2Mu8(bgO zI9=nx3{#j98@bwXDe{_aAt12DLiXIY$P7nsTr;@&88omZ9- zAmwzKp1`aOV=z{MDsZ+WqJmzpQd9?-Gi;+nQ*wYqfZ9u!HG7o;!?4u}hUX6U^gGMe z)iS)Il_$Wr+=u%o#Cgjs$-bit1og7>H+Rrh{|`;y7#+#?b=`3?6B`rTPA1006HRQJ z6I&Bo6WbHpwr$(Cled2VXT4vtx_fnQRo%LM&#Arl*$0IlFAWDh3>yq2CZ!ybRTnA5 zNJ;bo$7&`eEv)%7gfSEHdqmy0e31dYO$(Y?A)QUL{w1-=g+(doY2{S~u8OIWYWu&T zdTR4SZt~mCy4;GSbYr>6_uMbK*EMGKX?hd7{c^`uJ8DF15Rj>r>1j21d4>!z9rdNR z;!AoJ!N1wmffg0_p7X*4b<`)}OEgnsFc3Lq<|(i>#U^XAV{0WStG-hY)%Q{Iw2K$kM zJ!1lBgcu0%-rL*dOIVQ^#O-tT2SO0ni^J|jA*9^$zAQ%i(NC|q^VGIBZg)nIyqn6%{d}d$fYIyO@CWo%pw*MNl;cF z!n}VrGAliZTxqZ{5Fa8gPvx{&1srh;jWQ@?v*Q1z-}J^X+NV1_9370edOUucZ@YVV z!2MXKG;q;uw!e+-HT{D1V7XiZ=JQM=eiIPTr|XmA@HB;Uy?>_u)AXI0rAfkfijjrw z{D*I2%*;p`^1$yqiM|XTJ3^nC<>h{yvQjuBDz$q1(`iy*B!;;%Q9et3E0IG1_N5An zL~Dr2=WrEDG79g7PM*;`$e!T@^V&m7$|6MkrD!LQ(lkiThD-Hko7py;PP4A-z@Lj0 z6cpZTk3T?9UKhE0dw;ui??`KiwoI20YKA9x?TjZz-bitCU`?V?69K1m>R)7_9pw<~ zLE=yk92RLI-TVdBYhlZp1`<6#qwHKm8g>uNWNh%kAmJOihE@M2Jr-0M_=u1cMkcQF z;~MClUwYB)i}Rr)j*ARUFva7U^~7guB70EAW!5E+Y;$nStj?iQKPE1L8>>}Q7&42m zBMBP}pF3rWBdKI}NEIJIo(N%V=|>vxsNEl*H{Z+6489ZThg+w36b&OLokaAo$g&gl z=QtF~>6utEgep!Np=o&lQV(7tSB;}NJvcokAwY))lM3Vuepv74C8We_x?dHS!R%;F79>RI$vh;1=YhL{nB2A+lrK-v4702VQSt4l!@k3U5z9=;d_$P zm5to8XZfr}uPhe3Y?<}DV99p+LhG@6^*}o$^2F`*5g8^Tmm%?gG`?sn^Wv11VD9G& z^vj{^hDud6>UfwInC-vGHE9ekD+LrJXG-3Y8kpCs!mH$=SBqjrL+@0-`|fX#l=yOnPn5B zodq)Ok3y!7x7x)Qji)g=e`jj+@I)CL^f^(&V%F36&IHEA*K?%#Gm$B@F%_5XU&V#Z zVGu$ZU}F$16!RX!4K>ziMzRlHb^rzGh8-&YQk&>CHlVd<# zu~{O6UTv}Y^V~xu0KNZFW9mn{F>RuNn{Jga(s2;>ZmS(q;pg>aGGQk)l=5D4*PnrM z;R?|sLEX*{sN2H)e6YtGSahZVE8aP56+>>48!wi9VLB3+Upe*9%2S8|AmWre_X7;H ze@blx>c;viLVJ-aKuIz*(M-Vhcre2Nb%`HFyj+KHQ6My19^^1N1ZMA$U^QC5L2fF# zsElOi#q?jK!FotiCFKiO^h6F{K{yFkL*dZ~Q!4inI%`sH3R#{H_BmaJ|Q1joo!#w(tz zL4>EXU)IanT`Q@QB!-bmKp}-K_qH3q8YHcRY?T?GE>XejN!~VzcJI#@(G`rBboub67#267YNDaXgwUPjmT(j~|AGRIJ)ba}C1ALAgC_+Xq#7oqjl& z8m_NtK_i~XgmIJd87@xr#>O(o1<)wbDCfzFN?LXYg0`k&;};gLQf6{UDRoz~`&UtO zCBCW?4zVOABcSx4*ITUQ6ZpP=1k{f!QIo7oWq!J%glD-J3Anj8!vsG;2%4Gw_J^LQ zlzXupJ!r2rp?`Pkkw@Jc-ZibTVTjJ+9ZeEIa{IrFi;f79m6ZGnduP2;*U-A+)wj;` z*xQ4+-tNH2PVe9Ojk~UL*s6xIMS{oWTNG@xos&~0|L$O$Tf5{-y@e_T5(wnG7ZKs* z0oQxy3)-X@w{UlN{f+o(vxJXgr@xh*3G;w2;PQ|gT%_6gfj?Z7-?vAfh6sp6di&>_ zb>1yrQs_xZfhiz8Bw_T0#Gp+qQ7%4HogZb5+3I4+_>BA#zbGhZJG z1PGmm*Lw?WJ7wFN9xes!7+5&C*x9=}_3{RQW*oeA)W+esod3pyQ%MJ9O+A*X#Sl*C zd-@VsU;=arnB~W>NL95(ed-1EDF(LArytqy;2GJAIq^D%ajtd3GZdm`e165(%C^v8 zHB#Gmd}9mOi>(u^T~SZ|(nsl2|5Wqtp9}8ryI3azavzRXLMm}-1tMfu*@p+ zUzIU@o0j17*DgVhg$2fSj}6_5)FA$|X*97cZU zXG|=T7R`lr^=vEn2@A9!Xs?D0n8qgVM*cMirQ`SXiGxayT|e9UkO<>VJ%!g{;dTmp z{YlN?GD2zdw+L?B2lpy(p(u=eWL4Jd#d)p6`oG|i#qV`-e2fSxrY`Ock_my0KG0Vw zTe>^#v-SV;FL3wyHtFGl3l+~{e>4(wmtX4u=mjdyWU` zP-zWk;Jydv9uQqmS&~|NTSV3?Etca!<MRj&7uX^rh| zysP!@(XPQ=7MA&vvj@+vhl$_xG?zY#CNp0#XqH+%21oWskrCqyCx^2bZ9}JG1U|G} z4{g>M^MbG#RUnztzvEY%EvJsE+NzBeN@0xLolp0#u7;-*r1PFn=I0w-K7XyuF`GN6u9l?O}lfMH1G{oqAa;k1LE2b4M$+6Dg}Hr+tg4jaX9n&y?CrPowx3a z9ptk3DFGt_Lx#(BhdSpBDKbG|8Mti90Ncs-FO`a=o6!K`wnx!`L3lh4W_o2dR~X4S zXrv2ka7EyISKIMcB8yWO>*Am-|EO`C5%^RLo&P@9k0&L845DrPV9}S*i(!1m!S^!W z%rrEq-HkdA24xHSwLzMBf6#ePbyaiPtdVzfl&u!4UlbJPdvjXZ8yV3(H#^;SP{>#! zyljg1K{9f`+r!$`yjX=s zCp$IubD9vu!I*9XyA>g*?(%^d^!E1tDV0P84ML2oBe$9i8s{Mpa7&yVeD!Y_w^Xi# zx4@IeJ2{Qu`Xr+)`nbI1HzKkFba_oqgNaq^(OLYr^f8^9gB->`6Sv~Bz6i8hjSpzL zT)4V7aoWyQiK3mD?LWGGy?uQ`r&oB&BB#Ar_qpnwsuT``+hh^)|Tq>3TRqE?MQVnR9r34fS>J@M=OOtx%;*+vo177%tCe2i4+Bdd$L&QmfOyAF4~5c47Mm zap|SF;Viz4BDWUaqbblc%w@P>c=GEulzrgSQzWzVp*aZ*s_a8dWmE@mm1Y~}+Kck| z*fZY~-Mf{exW9tStsg_le=0dsfC6rQm5VR81kmaY6#Ts<(}9Ndyc8WquEg+@fC|+s z52F0{Rm`>gH)a$UjvGi3Jbdv&|3SFG(V|a2nG{naa0R>?OL%S>uDMmAX-#pfpvDJ- z8%KBaD!*6~gU3X0lJ^MnPG$a2lDLE_iuxhZTxu%W>-Wy6dN7kg3$yv(k6cR5S|gee{^Z|9briIYsU!Za0NLeA+(7%ESKy0bxvSnUGAbb_)(`1rER&lRs$aD z-=zKbuZ}f%*w|k;;$2JzwcBnO8FCmnP#8J_od(@Mq4$&hktElrt7|!dcT7y@D%;PAW(SW* ze9pbgPL&FsdZ(^IZOyuW(PS-PRR+(6Lm|n)2{6Juj7f|?Iqj^SYd$O%YZurjut>#W zzucW!aijrTLgdG>C8$bm4D|bCY#GI{u+Db&Zr7WTf{ctor{Q9ia6m4Nt!H>x61~ZG za>68D5(5hiBqEaT^RlwldwHx)GL~HrDc$1GZ@1ENNq>p9pwd&Lf1Kk+e!o0w6u#+F#78E*GaW zIWiw@Zhzk1k+b8sV+A5p);gSOqhFonBqX%jJkJ{iBGWkR^5gqcnD%yUT#e==Xj#&~ zdpYkV7msh2ZkE2n93SJ@JrYVGDs1X#kD1&)Cx;t)wYl71mgX`n%kB~mnm9Mt^o&}qon>zed!gLZuoX+?yUVMbVbR2gHGFX;Fz=)T z?+ex1x5T=4?XLST5zSxM*R@4ZI)b3ne6baA zm6qQYeur^%c5>Qi(pO!2@b8Ssx*a_GMb_2UOgp16+kwxYt+QUz>O%N#{C1Yx|HowP zE!0!H#VGIm2)D)c8W*HQrK|NA$dOd=^CL2Z2%e{@rO9foiihrOigEXFER|0IzMb{# z_if_+$y{+C1$&*@bPyir1tvY_({PbCb5P*dg$#ZSQFT&CU)8cDR2&>UWcjObKRyM; z844hQeqDe7lzkQQ)%o=^tM#|PYcZWH7fbqJuJ%VcM8*1`p)pQoA0bpZlVtE7&(`eB zb}D@)p57@F9-;5SYo$XCXcw(_vSc&EuI_#dc+=FF=W&C6Go1Wsbg2M;PH08;aPr!; zVj0wGy4h`nU>=agWHs-JJ97;_=?vYfEQDNPh; zvFd`bQ^!{h{{dfjm&P1vj|99d-Xmq90zQYT|A+>j&YqKXi{7UT-F7EmJYAm$$~!R` z92}gA6-#lc&u^=-TrLIXI%IBnn;o8?pTT_trg{gXTb-;_i7F?bm%jQis9op|H7W$! z=fgKxA(g77v>=vtAzM7cplajoC49>n{N$Z+r#-CG$aELL0RoT<(V+{oO#zz|}sNsy2bZ*QIn1O5*!ID))?#GqGe;KDN04VBcx zytimXz`&b@-n?;I_61hTmv~VHmExg)0mZDC%s;@>C$^M6Fn=*c9Ed@Tf`N#x#o!vE zzY4B0Gwmx%`wLrrK`NauV4y?XA=OiE*WhI_=!1jRq`X~JGz{68(4loY|o zcv7WiOxdr_=uVsEwqI!rGS)D!x0eN>aB#Yw8;|o63FIR+R^U<6l%~D%Eii#rxI&%K zEPsRVr6R6%Z|${Qau7BM1il#gn^E`BrR>jq%X^ zB1lHRb5fJ2!_Ll0z1GY*ipi&U$V^#m(;swWc=3ulbfaUfVT0!5Z8)s4VJ-eE1e=AD zj4bYPwHFc8HI?%o761t@I31HcG?WZPvcUl@1`WE9L5t~Jos^n>kUa3`&zD#2mf!Rj z8}DyWw_tiOFy;eeC}e8edYv`K!gA>$ZC z0}=aM!>u5I9g7@}nuHH`cY_h{?O6%Uy|aP@Ei_ghH$9IJ4!}X}tu9NopAt{YRN!ok zIt>+4{WW~8ULcT=-v_7dx^{~_X}7*mL7)Ku>wXYAvGb&Yz!wT$VP%1 zBrYbC_2jTE=tDNGytcD%X}S1srU-`bgAf;W&9E!GN*hLl(^A^Ri$9%Cqhv__JJr@f zdFxMAYcj#xxc$=-)#9sX-%Nvk4LTDTNnzjgbovwbg$CpRWc`i2(^u@>Y{5<-+{MBh zL}+Vg1be;X4C@hZg6p>;ieyBS3*L^*r=2WREEE`8f?&T~-ChsBKdTBDSlmN_Mr0(( zj202CnR)^t-fmx9eOM&yD%yWPuh3wOKAbH0VO(aAmo9LY=$3kCocPddptv!#SRJE+ zeqVT=`3Fbi&K28`hEZ4ok)>R_U5cg{lC8ca2}qWMF63q#<8t@b=x3t zh6M$|pR49efMPbVP#m6TBA1p*MZ=-NyY^{0=`bAtWCSc*Kkr1b=*???L}r3)_6XPg zWseK=yAmH=&LE^(gge`Wh6viV#wErbdax~ zzdIDnD@50n?W@c2Q$n)fQiDH;>Bt9QWDta5ola)#5AFgzTnLNRB!Bnx(jmbqS125W zGkSzvT~FW#gKhcv3w)u`l8DQXA@MVv9MEZ&zAXhybu&+5Pva-PQpt2K>Q6Xm!9heN}G$S01jPGq_1{(iSDO0S{XN?SiZn5aIjCZ%d& zE|Spxow;^JnA&9&{ikf1@T=NG4%@G%tEIGhdnY?D`@Y_=U<2QMIy^m)2%_3uixr-0 z*h`djYCOkNhH4W=lAwG?RV&w9eL77NMi$2Un+!rjAOyB$2@R$Rv5;Gl35y6#y9(> zFQZrm_W!j2f@IWo^j!xI6j9~P8E2WbOn^^g$4$)~t{GkpD(l2oMb#iJwKC(bC#G6G zvMP*TDj%*jI+Y4c-Z_N0)Fc&_z?8NxC<$`#(Ppbk3h3{{v>c0lFsxJ`2hTOKY2@c} z`GLmjvdS(`VJu&w;u7rjRYBDZMg?ri!nuh7suI9#-~-w|#A16eP2|SI^Azx-(&1iiL zLR4JM{Ea4|UKpQVh_;XX-SzOIJ*QXv5Vq7R#qW$8Gg@+bTN^D_|JqtNyaw={C*}zXCNSk@!AzDMJm&X)s?eQ?T*_rlM^V zf0YbvDG7;mHe;3YRAm!se4ZzttR=w|2c}>2#yZBypX6CzFvbYCE{pDrT}3^zE^KTR z2R?^BBR`MR#&+L=Ll`^yT98#y(4AF2Nk40?@85KD`})X0zwPb7eF5n3)ecF9Li`U4 zgzp|v?Chy(%-RtB93NJ2tl$Cg36sli~m5N8%kI`eLET+;=NNZD&iH-9gG z&%@;sqHDm%MJDs)OgvaUJ9wBUTkj8jK!c@td-aagenH@8nvfpGlIV# z^*uD-hqAKA0&eyu?vJJwK@xIu(P16(SXs$f!zU>YV2>F7B`U-rnvmepZY`CZkS=O7ou`GZLz< z$?_LO)yB$dHTzEOz^!{}yHOUqwsoRL&WXkS4eWv>KU?VX+d(?3d51(tEJaEP8Le{n#l zXz^fO!~Nhb#VW^MqGpz{-}0w+xbf0YnEWr>O9tVM)oy3qFvqOxmM#2CvUaerNPIegxo_tu_8~1omPy9}04c&CX9? zV0ea|$y?1bHDr)htNTyFjHHIntjeTd52ZUO(06Z|T%%9}vqN#bjm@I9%Ho z+>9(oZS{b;T=tU}LcBvnE@B1nOvLlJ2$P)7VSjnXWJ~$>Or*$Cw={psIgBk- z&YSRUUrIt65~PZi1Ym{)-=$mkfKohv2#DLmNmDgC3w*U(!EmDZEftCSrN*EB!eXK3 zaVT@&{f|I`-NsJXyK3$XDN@A)cFiG5Zp?2mbiPEvBw4wqAxo&JXeiA%AbAzZbm?V* zmcU*D62~v=VOr8C5CdzD zspa_0M+)1tFbISeI70io<3A*WFJWLMnpM1|A*ks3$H9qNziEqEP0EkOhS4fucC$tI z!NDthfcfSX-k+W>UvyNG(*#iP*Kz^DYQ@u7H;4;t&;C^kq~e z!P8XxMCgH6**5W@xxI2BoAPOrNaZO0Y!R)JdKh(nx`Oi{o=e}T<$428qHF)&E*>Vq z2vU*5CQ*9C9X5OZ4SYdg_l+GDQyH=EVGCvR+K6XEeR@$hq-LswHBYngB0oRB!D?e^ zmNovXk3G{bO{1o@sdlS{e0~#$>(caC{BQX?{lYpj8nzI}cYTX|F>TILGLqy(O2nIQ zAfizmkf065u9000NYGuQ<)ok=Ud8MnLiBXO=CFHa4(0xDq8Rg$wdO;yFN#W_tSZ-XH95EiLAL zCIkwKZMz{JH4J~5W2-{siNUQBqX+xIi+c}Ppo{T5Fn8y zbdWTKC=)+LfHe@K{cs(> z4FD^;By}MH`5_L>%?@t;lw^t2IA6s25JzroE)Y-5wGE+To1sbIEhl6hFa7%LT^zg~ z&bUBi)s8!ntIUp^}p9 zrOMmJ+b3sqJ%|@J6>?d8q%~{J4lcb1RZBmUP*G9I$jB+k=l`h$8s*E5p8za@J3-dg z#ew_XUhzRB-tkv)MfsCSj*jCH+h}t^1C_Rgv0l-i%6x@%xCvp^Du^Q4D zDS;$enud0VyvUXh z{Y?b>XC3BI5IUYzdEHvNc4*j-+NK5NhRib6#`jVKyfQ1wzZrpzHd{XgT?n41{-vsI zp!g0OX|&qh4#?<769`<>DpjdQM`6%XITH@brK>k3Z`8~*D9=i_D}%bCNqqo|u*t(L z&%RC1x8oR!$kTe;MezUd_P1KI{Q}y>DmpAWwQTJ)llv2;Nw)IxRhLSg+T#!ZU;r0$ z`mD;!%Y#@F+G&2Go;`3qe6Y8(TLx;>cL(LZ?%f_QRm-fe%%5-Ho-N-R({iTsVt9Xk z`~XUB2O>|LkLMC8WBD4KM;>0!p3@r7Abk_h-9cSVzj~#T;4@gfZ2UakeuQJB+%D#} zy6g^o@Y2<(#hOm;CZQ4k9}hEEC9C>N;!=xYVgeB06u$A)VFvPgvuG*bly5-zZXUkn z$+Z04u+9pDe_lcc5#K$l_5xDw<<4mP;mNknq;zh4=G#U)#iB_WDOntjJqJ)SaL^A= zx1Z>=EU%TKE|&w5uWoA9Q^;LUeaAxuqYGNi?!5-gswMIVd70X6_HJ<#Hmw$g(rNKL zNlAHmyA4(AlUbCI&@Wyyo#F}#H*bNo6*}#)JV~mji83p7HX|_WyOa}jT5W%f%hl5s z#<8;m+8hpn8N*aCA3eFS)$q0U0Pkv=?(GLB(`-x5T7wY;QOb%j6fQF>|94CsZTrI; z64v24bBEi*QB9J%p)&!j^=3Ryo4LmRaE$J)E~LFG2<0(4=J87{)#B02g&b!e}4rh(D`m^Ha$$Xw-|ChPK0cXPhxHh2v zmg^RC?SF$`X?q~m#2r^K;{4!tqcOOyVOOotD#BPVrEOlZ?9NR{YrKH;wc!(h@YNmo zkgpN>^#f5#Re|#4KLW7E5GWT02*Bw_T^<-gXBK3T9#FN1h={m}_$&-Ah%NX2K6%db z!0_gf>cYS%c(hYMtLy!~3n-}=G~0=(x%OKt1t`BYSZxBX1Sa-EDwQ_)_yC{AJh@xc zbI8iP(rB?#fq`MTQ^y5$vrmtL%W^si<#I9b&TZlPAZTRi8I{3nm|Sr#XN#@>Ym&UA zs3{En^CW@JIXoO~vY$lH={bx|3xiPwV&hw_8=?5%l~v16JH+}6~l4thKB_;f9E0&czHO{D%LWuZn{0VhVFvRIh@=n_CwWVb9e(k zs*!Jhz%oI`GNsHEnx-_|;B7`jMGb~0)U5VAW+n}K+8d^qoC#r8G&gSMPLqzhzP>Iw z8>9r+42+$vk$~n@#fl$h=I0kWlb_s0>)SbBEOj84xdsm7t1(YAo_srb9O4j#7!?{S zSzoF;!S;m`_z%fAAjTqstYm_-_&p9T4rpN0iNtd53&^G=lOTJObgihXz29Xw)}QR; z2C$o3np;}90pN+x?MC|8tMLNNHyQ~eTf24ObRme(^XaKCbm;Bbi`&I~y2jY+W;pW* zmqs_|>Hf44AQqL&xj8W@aQ=dI&5s8%duEP~;)9s}tTyg|h@zt#4RDIWU_nFU^ZiB~ zuciYcM!ZY-)m8wB4xCs*V`mQ)`eO2DTK;p{&JDc|R>3&rfJS z?z9vCx41|$HYoqHCx+~W4A{6h#Xd5CSbn^5gjt{vIGd}`Iz}}*mTmiea6Qql9s-Ys z7B3c&q12!hx~=OIJIKQ+e6(0xYi16D4nPC4%$*EWU~a}{XCVZoq@@YCycJU7$UE`b zn4(=60;U4YI~`)Bf-rAyuD&~;{Ozo~+@+K&Rj!~)gx35W9@yJqNI|R{X9#sa2HI|G zUx`ha$%Oo-yZ!uX#6=_G#fsvu zBCf1uO`#0?9YfSkUN1ZHcb=X`jH9t%%-A{t3CAlD4MGnru@UT<`K_5!96EYm**`14 zy*6)@!cz1T5nNgn6cinb3utWncsOpOAHpgTXW@EU@qWnW#)u~x11!)1-;jymS;C{i zW|kqPYbe2>1rf24tvgu;h-U4J#($}#MUw;=xgTed*>Lj&$3>6gNhv;g6nDWT>+5h%H`gkVMyC`35=aHKHs zYPpyz@E$O9c7hnwKk6fz^QO?1)?KLBpwcATO4GbuLKwO= z$?7{3e8zdehrrY|+V=G|oIi}0Rduq<1wWJh-CoMLKMy3g9079PjHjPtsgnHg_f_G0sRcS5A2l*CkAJdfoxZAe?v^1MOW@$`F_Mutn( za*b{8HGdyWx<=>82y2Z_JI(Qvgu&>KiP>4N!wZP`!Z(zyOYv`vD-@D(1pJ;$MXE`E z0Fo<{PvAEC+0V~=zEs6is3B$a;BvJ{Rkd~)9pAxjF8T+EIDA=T<#zdBa#hAFx06}M z;$YfSQVg>D)6ukedkZ>U%q0-#SxrCD@=aPMdMSZ{z;FTYaA09x^8~S==h%ylyXRS>kd4 zhmQB;*4Y#IE|s;4I+bD*!Q!XWgwL0sXo}BcTeaC1c|`l zJoaOI&eo|9m!J9yp8q|q2l)utoaCdJm|CPbanNvE9dAiFPMs58 z!(64R!$^MCIK}Ks9-^*FxylNY+U1Wz zrx)oxz~~3C1bMLgAA<C<1-nc&}H?_32tg31f%|t}z zfbFj1tt>h?crddare7@X88n1}#NBTQQYusm#VB2XP|mr&Ml)kf?a-h z9`o63>hLMR6?Aod&7jJU4oE@TFr6;`V2_TkV}N#c2yVW|kpYOX^Jj-)8pk;SQ+9aX zFbb1an=3mz`*<*(1`GX)K|_9FeykHa=sQs`puiyH@h;TQNF@_7Fi-&8OOSZ#(axnL z9BY@;Q&XYUp0WzfAfaZASOPH-IslKK(gTfEK0fU>PkM5${^1=+U*j(Es0;>en!neJ z1ae}iG}?fv^EK=Jsfwx*Kh}D=gQgw3KbUmX!BlRyYQ=`xdRaC9^j7wNPq1^9ivAig zRVG#(nhJ`uLoB+T5?h_p6pCidyZ_zv4QwTIUk+;t;KoJa%TNlABC?$dO1$Uz`t z^ex>ZX%QtLEr-nl=y!4ovOo5PY3VwmzWJa|;cb*(_m=ZS%D>+S&P5J<{IM$a7qqm} zOI0g=ZwN7K7ScnjrXHEGGo*mews9z`5&-zB_I6uly@ zw+)L%|9(-XjCCtOlai5v%DAt{%oO;!RHYAdY_s0lSbYFi<{o*&(}PH_(R5Ke3AEF4 z0+2rCFq`6wB{#LieIb7jPD>TlEUCh2_PIit-SM;s0s%~Br;#_E_EitJX0YsFBm(VL z?;_#A9guvv*mH({Febg$=dvl`pFSM!1R9K7LRt)Yp*X38FI-+U7V{(JeD3w)unjiL zNvUxoKS;=wOSBHUK6W)Z&d)isN$vccu6yR|>KqA&%BeA@E&W0!3?oWa7#l4Qw+q5K z5uftEg3`I2F4mU6GBC*Y|HLHjR!~qt7RC%0rL&H(D~{_onb59t*xZiU>RQvu#NHj* z|5>?Fbw52@WGodFcB+13#+>#H_H_Wp!7TuT;Q;l-p&P<-aTMFIE2&aPPF8Yz%N}ze<#~aHQ}o>AYwt8g!6`j_(KOhu3h{8XTll4q{>h<(iFreE+aeB;za= z%e>$Ej+;D?0IAc(#YG|W{s4`Z*ciV2P&9Sfi2RRsB{1EV@D2iGS_7SA-e`lCHrRPl zsRnG(oS|I*JjD>djQ}JTy&fh>=4f0t{}EC_!MRB`f0W~`=;CM-=H0o|%G{~a4^$>N z^D7A%3H_)aBb+Msj{QP6!`G4x^HOQZvjoTu4OH@1E;_*yjPWgJ>cZIAb&*Ova5Fb9 zaW9c^bqK{zwaIRfU$6)9uxXVG;HH(Bof?5=ZlXyue`-R6NJ9R}uY75d{$S(~gcKBX zgdY+0yYuGAYt^Abx6bz`(TJ3qt}3)FfOZY4XOzINIVY^1g$o0RSYkrO{*?rO*7_n; zDD#u2hRdP{CypI^Nd+Ae`$rIVQeud&VE9^X#Tskn$=}cuZ-Q5~=^oLYulau)_(iL~ zK{^uL(R!C$sWWoUhg{i9rbDwiXd()a*+Me6@^j~3WnD_hz;<8Rc93z~#cpLMFa5M! zwEnoc?EqB)W=bOfA@@{83W9`s*=%t#eJ(*@1ZNZQ$&87Kk?+(g2MOrLefu;bEl;rg zDAz3FW*&eCn7-k(!*IXe+Srz5tB!u$b#?Wt zy#<DL=k_+e4CG)T*(v267A!r%MT`LNkdg@pqW>HK%Ol@PP-V$l6-PEFEn? zd=2*dm18`}OW-1JLpvPfE3_}*ycHM#87Q94s9ZxfHK1NG7@PqjqGH-wC|?~_E#JlO zwrcQvkkn0->Sed&1XMU*;jea8nbhe8%Wz{c88uZ)#r8M&xJO{g;6=kRFV=0ZqB3Ao z8?E}Jw%+PO?`DWa<-m~(skp6Clvn2GjhA8=K_Ek|fAZZx0+XA|IQLH_)TuYM4i6I! zwNOqI%`ZNF*0+OisCmvtdnJn(zuNhn!ak?qoF5ehhuvw0YMQdxpNtsv3Rnc=D!V_P zNqb`=z+J3gmg4g~Hd;+D88D}fV}gFys98A}&gaOmvD2To+QPInH-igS5@bAF2#n!L zK0tTX6ogMcJ8X}qH9~lP6&uu%l9e={ubZw$D@x@ohQSukn%Hz|u#r)lm2!?b`B-8DJ!9jrO6VP5^FtJoz8Zsx&pJ|LZ1X0P^zg z^lf!)g>~%4^s1=-DiVPJK}vf1%T>1_i?ie9bfHaq39sN~^oD>ln?di3HVjfGp!aFE zd*=Y%oi7TtwN64qL1W&G?AyJsly9_m)PGN@)M`1txJV_@lP>s)1>rkS+b9+^2&7t8 z+quJ_sYcyF)}qOB%~r3|1+V5dUP1xyxb*a!VaoMCUo2e||A2p`*RKD#x>f`zYHh9b zwe>Z3NAu5dx!nUs9py%qdEl8&bac_Rsg=D#HJq-1Y&+RNUN8rshrjVTb5l)i_Ad{w zuVW0gER0w@^fH|Ld}ALr;8^^pGHt-I+4{LPokwY{$<92)0YKd;)Ac_rO(~1m@fy~` zJ(zMM=}SK^v{w;cx09g4RTnFi$%%>0r)TO3E^H$4u6~}Q>$kXge+EyZ(VHlamn6_* z-nKWvAQAG}ES3~U>@yJ75%B4!x?E@hS@BQ|Ypx-Klhr0F7$g+BMvMJ=tYOg?n5Wk7 zJgpv0e-aW@9)WXvQcvsVpvQZ~9J@R^YI1tbR2j$Ri}dL*S;w6Ilnibd_er@4*3J2o zK%3}xb#)M)?Afyy1HxX32ba+aA94bN!V_Zj@P*xoSp48 z+VxL?i^5-FGnB0R^u8ktU)HL%5G97olY#;H+Iqjt8!$%`GS6LEEWIfGZ(&wlj-+$!| zw}pI~9GBw>qpZ|iT-3~5L{(dBZh4?=)ys#$XfZ3T&ey4KR$wsBicR3D{>9nR*{%iw z(eZSHf|u9*IL_zsjGsdC2xy5*5uY~|HYM&Q04so2um2u(zKXPWbK?qF-~ncMzF-;t ze`>O2T`uP@`mTq3I4}4;kLtopN5}D8K-r7pmpnY06263k()DU%c|O=>V8%Cq%~IOn zf2Mz!GI%kZ7$b@4TrT>ao^Ph_t^Ts?U#=dtn{95Z}IT)u+GNDt|s7o!)JFPLnv$JwU?*Cn#*QHx^`KsURb@h z-~JNd-=ecPd@B9)HJ)z|odA_^v#HN)kW=OW-;~pPHy?w5!y!IhD62Le^QRwS&3XAsE9 zLJp~mLz>N;izF;|btO6b;4DJ9&?$sV14$VFs;Ra>{r_tL&R9LX`vb!c7$-R*>F^3e z`>$|MOIAa2eH*Y>J%}Fi z&GyH7Mn#;gN9lw=FT0G>(6zqH*R@e;w)7RVnt~DW@x6QA1x^Yaj|*VXgc-;jD|PF?#i00^mzzU;MCk<;bGce{0^ge{_T2q^D?G!&H3?^$hj-_4hZ&F3 zSD#KzXbHY|J)zyAblnaUg_`Yl=|@^16?AYvoJaUK?0*Eco+4C!LBXI-lQbUm0BGyv zOsU1lY_Iv#@Umt1oF?pZ%Y@uggZm6t-z3u#7; z$1z0TlL$_dFW?f$a1!e(b(0&dH2X2x4n-3{TRu1I0iM~ya|Y8lKTTU^z0vV=f?5UR zZ(NfNw{U8Y#JT)l?m+YGFUaoqC(L#|M-Dy@r~XJUUkHPm|2rMmMNLU{lsHZ?X!xZX zGP1w3FZWrK>CXg7pbQ=tTrSTcOWU^k$vQgPhCg-liD`CjGk{^XXn3L^GgwGAk-L%9 zs7adjOrA$0=Vp4d+o$&=|L4rm_7AaWT<^j4$4bq{io(K!dz{N}9&?Sn1RGvH5B$_5 zvO1zpyoQEXUFDzsOW0}#>kR5GRx3imX<0m%P3y&!-_Q!jQLhY8Rh}`Ft5sX{hbcQb)qA}>;Bwhdb-Z41J1&6;vVpc;K2N>PKJ6!kSi0%e zR?CzSFgD&-#EM*~85yF%i06z=Ta-R;y9k#bw$9ep;}fk`tnPPHpRf122wA;BNW2Hh zwj1`N!0qGl*b^!wg!bjw3lEXJEQJ4@p)ww|#zm01~X!k^xFDPo;hXYrNqi|2IVu6Yo?$Oa2%Zkz81e&%3p z+Yj@V7c5p!T@lJ^n;q>y65>$Na$>^z(&2oyVRBcl)qIkWv;pa>OsiU{(Toe?fBW5i zS~>o9HcLMEah29QomY3L!(-JU+L>nC_IS@}0<73FhoUHdXzS`-Su|tY901*0kDz%3;W{6$IVY$ z`d8O&U$8X%-&2`9XWxYus*nvH(vdpv@82U3Nag+?0QEo$zi`Cx!4E(7)WmW1a$VfL zd)I+mZ}GqPJ{Uf95U_*XGSZ~+qj%qB^6#(syAa~E6OSD+Y_RI-zF%fE>2v6F#mZG@ zU+{m1^G=;QUi~NgQ_{f)Ok1;h?WKSE>yo9*H|@XC=_ee!@rHe6^ijiyoO$98Z@S~| zM;?C?0DAZCwc8ZC(aTr&h}gYb*JF?R_D#3l^}xgb-JnPJuT0%z;8t6H_|eCDRO0wC z_5C;6==Xp5+tQ`W`)|DQ$;TbL(MEj%s7Lp%#~g9^O}GF1!ABq8phx$w?7ioJEw`Ni z@d8u8-n}*$xb;@=eel7U`caTdVOB4R?0I$;OTu>hY2 za?F!xf99Gt8B4Y(>DskkjJ(n!uK|r6a?;QeE4zlWd;reHYEfTLrF+I%U?%8ke1*oIsxyJsPFP4 z?>F9l#O9QO7qWWEz}X0e~b)gb*^v zC{+NDCUv=~19=w_epLeK(*uIlBEE!YSn5X#2>G`=8C_%x2!B)+Hd3X(S$Qj zJ?{Po9=r3d`~GO92p^_zzt(5_v(jJ&#aZCJm4y?2XC=fcpKTePm;6M3;oF3p=a z|K?l&^XA(#S1ezl@4(r<@ySMcGXg{i!POtqe#Yg1>C?-13OVn?k8Zx@t~cMF$u8>2 zXHs5t)A&}-O(&z4cAm2RRe$@(F-IMiB*~LcJ^$@*eGP&I00Q*s9l1S;UqFNa-Me@D z=;Ke!+X3yTT>(8-0#r1GIV=ijgR>op}7&1%z5s`impdFAac-MV$- zf%OGe>Pes8y+TdZY&vs+C&loGAAWSxEqA@ey2O;7wwD3UIQ4iv4F6?@A>>hbU6Pa) zkT*v9^eX?lq}8ier`+RI^lGnc@=``UbL9&_ecN}9JV1x~WFF$^QN!PS^R217@AS;` zFMnm)?jwc`PLkx6*Wc>hbAuHtSB@TO!7@Z#v0~-=_3L|d>kh0Hjfh*ddbJSZ_g7wX zc?uh))@|3WT`oB56!Wv29tB=H8ToeU(kYvz)=YMJ5myb&kn|TmZPQ0{4(+$!?)&Xm zXt!pgetpjT>9J{Vr=NP%^iz-2zX$*>{q30mU=;d6gSWcm(lhiE0D!&r-ho&00SE1M zz(KyjZ~y)qo%z!rre$hYiHP{4qYwWPvvLK1k;8^u{PQzCLkj2gvihHXbmZa39`$WP zLP8=s@yACPR7ieaeBl{lcPk8`XyLQdN2kdk30sDlnPC8E4mD{IA3>*Bb z3%t`>N~a|yZU?^MxBZRkrI-CjMjd4*lyzFZ6|m+CJERo(wPzv3M3RK9(M!^ zG-Vt;YS`#e!+@<0WHs)v{lpz7PXev#dy4&6rtW4uiV)BqyY2|=rW~+S9_+jK?)y&N z!{|DD?zR(WwSMHV`jHWA5ddmxYX0@N--plBqMZEWqxsJf!v_EQ=Vuxp%?wT<09dnj z&A|suJNSTU(X7)N{p24X={=b{Z~prA>v!BfVxb%zZbm1O^@)h5Oh4+B=|}M}8*SX@ zj5CjkGIsM#_dfO1O9vjf=i%QwuzmY>qCtG{!G}Ni{#j2w^^yddv!kcckRe=9ME~Ne)@=py4ZNC#!bvWDfd-Hzo<_qB)7X5H^^elO##-9*J}x zAendq%7?8%Ck*b0rt|0;fOOKz3labdg2V*~xiep4_MjTA27{@hLY?%QQi0JRNFo(VHs@@^1o`?iA=-$M7rfG-30lEe`xz)QVEn{1S7igT4GqADN zMhyT{{+vGqDS-2^!rV@18a--WtFxB70)k`kf+#@**-J>6Cl(o3+hIO{o=a-$hms6G zHI1eyE?p>aHYRV4sa;cfPwiHLoAcIt<4(L_XeN>YTv6u)EYGQRm0;ECHT>t&rOSJ4 z&>a9ecI<$NM|}6tvHra`k*laVg-x_{xxFQ(wzhWa-n;I-*Df!-@X8;q`1_Kj%T74% z=#0E-YHI50YM1->%sAJ!G%2lIxoZ09=Z_m(fBw0r_U+RP5zo8eHTwC zK37bR8C5Ei@=}o_4*z zOP8(a+NFz{-2ed-{arI>)f+#HRjYKrJ@2%zOGJlZF5kg*NlT@y$R8t(5YAn?bWW0F ziEL<1OQQ{49-%Xcbdkie&n!!-gL);1q)}-{cxM{W9sT^ z$BrKP!i%r=>$lP7oA&S7a|1pLckbLNL&SCL&;b#TI{Z-oDk?LwO03(OBpEbttH=vC zos4{?)XHKhAOhylOe^}1yVy|aY${^8DsfB5j=>?etTvHvZBZ-{Xmlct$vW+4G<@Uv zeKzc`bQnOb}EZ4;-!AneWb;G`@a= z?#}LVn3Vh7P6s?&&r~bgh@59XFWn#Q?w5MUg9Rxoc-ETT>NwVH)}$dPG`@;XX$W1M zV6KcF>`s}mCug!StjFWzn#k12>9G{{QGA|?3aH@(BwQ`HajpwSv=L|&FrM+p( z4jj9Bv+s;WGWzc{N&F8bgXY#g`&L%IR!$Pu5fxxxp1$G;W%F6aU`<7kxaJqH`ha`# ze(2>;@l4$?vQ=X7)rV^V8=EQu&dE_YWFaM~Rh{;(Y_1=)rO*SBi_yFl1uITTNF8dH zbXFFUc8V6NOS!pd9Jav?Xoner+R$*F*wltwH<85I2naQ|Fs5`jDP%W8Kb(rr4Ai-I z9K*ST6SxZ!=R^haCprMx+Zf|4M#-OW{f-tWw&ZjrH)M*6<8SBiyh;-rfkbvvcDIF1 z`&J5H<|sC>{u6$&Q5u(@O)hOw$e&jM=uCR|y${x|U1!ezzx>MU0|smb0CjbBg9i_o zHEYg3Q%gIa-lIqNW$Jcs0DuJx7A{}D!V80l6DEu~1(gf*l7pl zx0l}@(+o6w_S|L5R~&Niz8m)K4FC-d4RdDC+hA1O;-)+@3adNaD)qcw`}XVCtp~{J z$+PFoTef_~A&2Z|nVj=sk)=*uUESb8ThIDnZnWmxw`-@eZd^Lq)TvX)Z6=O=>X{dk znq<<1F$K-llO!2AV(4?vzr6EK+sTSrwR+9#Gv4{eA^Sy?N$*K1>zbxF@Y_tMDWL!hiN(%$syJdzFl{PQpGGR0o)_4V^y&@csvLzFPXoY7AxPTRuyTn){o8>`I`uaaJiR zdlgzzYrnl-*C9$6F1F#{CT(s!)-urWb z8fLsTbLt*bI3h(r=-RZY95YfzYtBpR42C^k9cIn35=R8;^%$uGHNl1Fx)(T(49QB! zM!_SECEih?68kz1?YY~Id+xSl@$ijYf=!%Q|L7yn{_>(L|9!_p?b^5dbm5{|v*rQ7 zAzzQ1W|vPErU)Flrc?34rL7;mpJ8=n8&R1ra-q80&XaeYvc31pu}5`}|FXoiQ!@ao zZ1Qr`KIjk1FXgb0WP0*pn4>TafHr8@`!0YCtW z*M83Y>58D-@`f8N($E+PJ=@%v3Is-Xk>B4C z$xDa=p#4OEL=6R!ne&n&>TzYOLp8aMPGIUihwM;C`y@j&vrq3;_`D(%vC)=>?%?Qi z(P_BIrb2G+jfq}F*(R&dhR=Cg=zpnFVM-Fb@Rz^+`q%dD(5d4+_dYax&WES!JLSH0 z=z-__?BaIq+ikbacy%qzXN&j!YSx7|05H0K_+@{%YQ~#0hYcP0$tRy)cKKDtuj^-v z7XRn&2PTXg-K%%cMV~Ex@R28m3?7i1*FpPFyZASkZ?Z|h@#9B-_SvGV{(eK`o|z`2 ze*HJDt*yQ1zK6dub@yex$sGtFEAYnKo_Y4gEoIxe70AIY0yyl@gHAi=f@`k7 zY4VQStX{tAx*Klp*0sxSyX?pV^YGcE`>pO0x7jX{F${AE@#h!)_Rxd(?a;B~?RVV0 zV8Oz3&O8yy8Y5e5vFQyr-kw%79v$|L15ZEe!fUR(X@?!QS+#QYb^o}zTh}hT?OMWO zzKl!(;G2gYc<#?GZr`rmwz^9%UbJ}MudsHvyVz_}BHDPvz8m)K^PhVk+Hapd5njYP|ZMWUn{SVxuzJ5r4){{r*51IszJLi0$|6bNf9x& zBg9HAKqL0~3aUyEfGj2(nQ5aKbEG1|)MI+E`s3{-f2Lf7D3RrujUGQb6r#*w$TEm0 zUdTjRnqd$m1lcVBy5s`%&VbuJbbDBo+41611)Yo0HxE5v&6>5p`pxBw7cbp>v;OCv zby7cl1-3+D91(F8*rR*5lYa93>;7@ef9`pxSFa5Y+J9PcCP&u~KmVLl zuD{{7`}IXPrslVuG;XgwcfRzpKMNt!vM!QNE{)Zf{EQ!)aia);yF)f~$iSbUd+IgU z-*m@a>c*!Nk3YJTcVbk_CN3dMnb!pXjIJMc{<)`I|Igc4=iIf3Cco{Z@q6vL%cYlH zA%r;Vj1xzW7-q^K&=-G$h7LOa+|#eU{>D4*x~HzLZrqsqlTJ9cQ|C?u))b$e%hFt0e{Hr=G(#h3hX@#3YMZQB2wpPtme|He?(7;(DR87E|S ztsz4O{`|btuDR~UJN|udU0vO{F{4g8;Rk+07vn!WQ=@dsIDS(H>%E$dX@y5tV<;ovQduHU2Phll z>~EhkP_LO_Ri=HBa;k=MX&|IgN<}uOD#2c(YQ$7)vy}uPt_r8=$MT7EE?V|d%dYMM zg_-p2=H{_%@fzpO6lKMnIDoB58=SOl(#8&6b|XSU5{Yrtj>jK&1QCf8lSD#F0BZ`l z&cNSZd~T$Ev`0>5f`mZ&te;w>rKYFWikKh~q4byv%$!EM&HzeKyGoT26F>kVP)GqN z7m2b?8+2i1ZJ=Ce6VwtSDPNU#Xjx#T87Lf3c9t}i61rM$4$hdHVB=1=jJ4PCr zuyXrr*0VYVRd_@YLOxf%Cb-F=8^yT&wLF8@;&MC@pmO`FE0XMuZQ7bx#RWv6hCQje zM-TutKnWS15&{y4lmG%I(hWOszsbg!SJlS%zk8T*YMekqDAZt8o>G$NEmG(I^iHET()&oY?o9HNGR02^dOG2_#)T0r{zR$1!#3;|H+xe?8^jg zxO4#!6A*w&qT>nBX3gXohLV;ns+mX#$6dQO%F5N1ttIlVVpCY$7U+jrB4Wu zkgN$ZibTVpfHg!2!fFTz2_;C_kO(1NI;)x>IW1~ODu#J!1`UV_NgvrM#qo;lwK)H& z>IcjyAc6)oa$Bh^2~v&m*9=6MC?pqk=k(kaIMPhN@ETk{Bv}v=K^v`I;0JnY`!a-unjtAV4IL zh=M?~>NpJsXx5W=q!cZ^K&(=gN+TlWVqOxWyoVw|q*BIpmArFCiV*D*2kj=OBaO3! zMw(og&t0^lGXpH+vQQ9dp03uE5c0sFBHCbrl~-)Q+B%)sc{u=xf-A%?4;pv zN_|Hmko46$=?UqTRif4y3AsYUo$gcEa`@IEinO*yQc{%)>!aBRniZZ74T-8v1+F9j z4Pfy$rL7|&VJ#&<>f#);XjE&_X6l$m%J6pMRoa|mL=oxR6fNxNUJBPj#OsQUQz7R( zL4YU{3Ams#8In+^T(mm2Kq1iVuI%Fnugxn6YKcR}=KeGj#$d!eu0eqlefeD)_-h{W zT!=`&mq0UVUi>0>a}rBJ001BWNkl~N$+8{}!X9R}GVcPu3GBES^U=#3`Q_izRr03-rLLI@~;5(G*B2vC4flES&w z&_adQbBqTxd!^&Ok#`UCTt2MPtxiM))PM*wS#)2RzW zOo$Ts1rpVM5@@bbK(nq11E|Wq1wx&52sFo+w5-TH0RMCXlMym5{z@Q_5<;Lv&F@mw zn3_Gl{JI{=%t{J7uGFV8fUqWxl3{WslTv>kTQ(4IV5L{e@SDwk;Hov zm&p7}Dsds2%Nik&usD%XRX8?RwPLPP8zOge$WvvEKHH)!ezC}`b<8Ih8fnj2{Ai-- zuL|>3p}-~LG>zgpwkrHWk(`@+2+4r`&Nb0$Nud@N+D@?9S#BF-Cw>1Zd)`cy$5l%A zcc5RiD766o)e_Xm0%mT(MJg~|bn`b15|?+rldy0MAYvlTLNr#TY~umJ7(^jDw{yiA z4A*iHEa9@ro}(xng<%=-NEU%3a2OOV7Y*dl~_uv)n3jUuB9lY(EpYDvXI{AYZH&i8jxRcmD_ z&$cEs>c~nRtMCjU!qiAM>I20Qt<30-BB8cu&DRvMpY(xzf>*@a;s27Kx4IFuaCJzpVDuRGLrqUS$3hv^8`{sdgU^{_RS>=^+38o?0JWP~TRPT?fJEr$ICJ|)%wn9bJe`&L0 z#1J!8 zj43uGJ!^wT^44rc%hlZ+# z7%NdDp;ktwF(czwH)KBNX@x7YL0fPWHycwfj!p9@;Owva>SP9Eg<2LBwn$EtLft^i z7~*q;!=DsC_L;FfBfZG5VN(mjmL{eiQc!i|CNvt@BAy5D1jLVpIXQZ}b7)OlOH^O| z5~026jva{r)#lpf^N40Dmk=9IPPdku31BR5Q)|d#$A)0$O_6EDpch95qZ0&J zkc_2A%5F+Z#%5tFTi6;<$CVs!VH0fFWbY3-rnM=f51s$Q7hoGG8b&P-^cIJyO4eVU z+1ByPfVL`hC*YkSUJynZ#dpG|^e_d7I?y?yb}q(2=L}9fEAlXtXs-w?nwi>0Ai(0| zss1SrSfW<^e5ICG_wJ%|d*|-&RrK^ka;94;^ zll7LZc6VZH@{Frgr6wUC`qb7172LwAQYxu!XtrO+cCD(dP$h#ZC7>)B^eHGZ>o%}T zrcqd`RG6e@TMT1sDzY+HU+B>?ZD{yN6Fk+fl}piu6o1?33_M#o0ARykKa?ko6LUsY zFCE&c2Tr(mD>v^WzTfcx1u1z#5gXnAVn~n5HJVL(b@=K#W7KybzZqp9toF; zgV~N!=deu^cnkpPC6VUQU`Rv&AWExMuMjFVBfL`U0b&*I6(4-$+~g9ija0UZ=AJ## zwHZQC?#>AcOTVb5?ae7E!`2|WVDc-4RhEvO)s4S->t|0Zw8T4=*Id3L5tILEh^-ef z8|aH?BnZuXPR=0UekrmmGt8Z0Hp?ClT;Kpets9hxxNA%0)mr8t)V+#QvmlT2c;QpE z>1JNwW8u7tvlK6V^eF~Nz1`I@UTKiKb^&QWZd_gGi+GiZ*8g~3={|Q{W>Qj)ZJ|UV z?`$Id=RWh}sx8qXDORaUZGyPd2Cjp<>)0w)j4-g6;EM)HS*|nEC=g&a?Y4tgt2u{l zeWN#T+2Wk=e`@F>C!CzV;_d8$omEWnNsunr< z*)a|ZEonZ@B3C<(hObg_ieM|5flF=r%ypeaQFs%_T06WIM+PMlQl0KV;xo_q z$xAuoA-HjVo~%J`$=Rra`Xh{2L=PQ*ihm37^!Hc@}vQ7G@4UzJ5{p4#fB%7 zS~?cHR769}sb|RfBu&otvt$gxEmAaVULqA&>$M0Vd!wzB0>w+~b*$eu#1cV`h!7|} zF~)Y9MjEilvLN8^^jIX-S5o^0>%1kbZOS8O04h;I5b1uU&A)a}D5d`(@Lt4QM4z!? zqNzaks(r{N$X`XikX9&xgVA2V0#roSg@`bJSR|9+OFma#rXJSpZQbQkVA0IHe;EV! zLfy5|3Ph>EWicvM-B&D>pl=n)Kjo41K!oy80qUG}5VNokXJ`-Vl~Ee6!gzbX5f^eU!h(MMQp5^ zo-3o_c|*|cqis*xG#jOfwX_OsY-I+^+Pn~+B#AEp0JKW)*b2EhAPdbF&2DmR$&gD? zGclF1x(v|G&&!2ZDuu6@ZKXX2{$-hJa;aIwONB|bt?C|pWU&rsY^Cyc?Kx(VW-eF6 z)G-7&GED!%Of8J1UPTc};A0@yqOb`6`Y4S)yRO}}Bcfr53mS`H@q_uQz7>ZSazuY0 zHOEqtAc~FTI+>4^%b#m`bJ~o_2nAAQv)u~}&`ze{+NWTV?F0wzv|$x%+|WKh1^0=z zj#a54dNtpUQ2d!G#b!cJLn8G z0w}>OJ=nQ1-%QyJqRm2D7)d*kkxOqR))m0%C>}x;nI4h%DL*jjQEJwivD)_bNJ=Fm zyZA0kv@+S!Hud@^dwd|>8FZ8Z^F3F2<|VE5UrQ$*a+ih@&~kwY5<~zZ6z0}rU~Xl+ ziuIKZ=Z$d(VWq39ptbmXY}rfOp>l({vW*-$VCsSFurvClJ#~jr!=y7H)To(=oJlSM z`)Wy)_@-L&qRDc~UnwhQkA#|N6?JwZR2O+ojaCbS!9z zX@_V7rCt5pnuv3#W+Vha5b98wRFjmGP4wk1Srd~sN5K@Lrs71s1hx7@eaE@yi&T@I znj+I;<(d9s5dzdWOLq1Nji2FzMQ&PG4YdjM77$HDBBhWaH|9$l9c|4^kVxB=sIj6P-)R6!Pv}HAdIsw~Ko@!bbRmO0qIY{?hc~O&kltbZxpIDeI z=bj}&iUskJr~#mfOG*byjQfp@+(VwTIV6&}q#EKXl7a**e#ikd(i#bXMI<9xgGrYG zmte1S%BT&$DjXQn;4?-p0FbCsJD9rP9}2WM z#dPwxwqa7sga1%tL5aq2ynF=okLr06>8?iai8G6aX0X zc)l7nkgg}eayEpt1k0W~*mjytIkli@ql8>}Y4V@ZJ-iqXj?-NTE&~KzDnwv)h7uD* zQfCKjP^E*ZpFDh8gPM_}LX>1GWN_%hnt09>>2exX@B$vlL&p6fb%1z@c zMQ`%CX&6X4gCQlH&A7H=l>h-mu$|@gDz;@Jh)p7`nT%fM8W%|D1ZoHpbH+Rh+JJ8Q>acADskJZYo>SrZoGW0_%-JX= zP}Vh)6$7219V3;-eRA2$plYwnpd6Jxc$+4=OUln+ud#G^$5sk$EQslM!#Hb9SHRkm)`vKyU6xKs(rR68O%#pf+zDl$=uB*~&uVuESaQfpIkov)6G zNr^>(DEG)P(fX&{+%i=ff)!zl8yrOAgR;~pH310&@(#%*5AT`0tFWq*2_~+>Z}?%Y zhpJi-ow1-4X#^qf-9pv6l3%^ah&;H;3w2YHiY5p_P5}T>;jG(GwI}Ln#;ZdoN-)GC z>BgWTJFfL51ado7Z%*>f6w3ClW7v@0D$$)B&4Sv9CIsu|LM>C0sA536`w1=0ys27$ zm3R26BuTa-sD@Ac{bfLqD@R$wvWjKd<-Q9<9awqrTG;Cfk`ZxyXtTGvx=?jUHkr$A z=!GxJl_!?DqzwUdaC=MOI>TW>^JbS_$ZeaPCAq^9!%U+t9h~K#nYfzyWTj7>jr@?l zI_8Jq3MV?ZPdQXX1q5x>Tv-JroEO9H684^Q$ddqi#%zT0U!^LwZZg7AtCIH9!XMQE z(7dGU9L-%NYKerly;}DouvzGf(=DBoMM^D|7TWB&2Q!BQvpQ6(RHZ6age+3$il6KS zh1Qtmp~VElHA>F1uvtj&MjD$J7nAt{O)Os;s%k^6mH5C4w#iFS;>i6{=`k8I7Y|Sh z%f+*XiuYiK??*HuvY(I@THq zhBQZ@itST133)m+sml$CXC3aJG%Zh6s!}tN-N^~(&MLJ8k=`UXd+6S4`vv*2->95S zlf12yUrbYyX?%8yrtK83%~6w7Ee4-q5M*JS zS@}1NMK#+tFbnWiM@iHaRuPS+#xPTYaB#b03eeEFX+)W@cu=!mi=-J+6(%gkNVHBO zP?h}=Lr1ucWGm}1m81$7>ohN6%6Im_gDP@LmR$p(RUH>Q{HGT^YL1tiBafBBkNTo4 zLNm8*(s>(>s(cDSFjn3K9h86=8qL6$v25YL3M( zB*il(_q12!9sxw{Xhr3wtD2O97;eQ_$j6{EQ3u!h9%LmrlMXAPqr`iB7n{!fp6DFm zh{a}OC8(%UWPFhsp+q&z9hE*eg_ui|nGow3MT(GS(TrYu>am(yS|>AIKz3TpA+Ev- zZDdc{EL!~I`megqs8U-c)0tgcNHsaNwN=L#gS_27e=^Hyi?-NOQ9Z+8 zuJRNoTK$cwix5mAZH-hhYm|Kf=w18>*`gbrGVBc1p;|h{mG`iFHDUg#O|BIX%T06J zewP3COHM^rj+pYjk@>kmYAPcUyBQ2dLuLvFRp8&roR-G$Vt^D+%1{u)wXQQ#SV?(E zAi&60?R6Rex&I{{0qx$dXRq`npvs&LZ9Xz)>9SXZj+$)|_)5HB$s!Bq(06cpTGhpB(s{BbGw|v5q17b>d2AfR}q`Lq}>2Id*?oR(QQ!; z1CIG$ywp));^PdgLul74O07aL?krpnA!s>JUN}k_FItP$+!!TSbBDY$v*LtX8rd1? zFzELBguiw7L_$r{0Yp(Xo{R9i;rZ2yHVKb~Fc(QCT_dqwe=nv6_=ZXWSW|U7K@0_# zy;YFAs0d;fsN_PpsxzY^fN|X9_EL*edzcdXiK+ix7(X^mDSVkN8zc!K5HT0GD$iX8 zu&VR=EpJUz>1rajg(JNy;MPKH=Oz?u(eH+n=s4mbjnf(Zr(BHqf7(L~5vk9N9?8dd ze4I&VDB7+fMac4C zW}4tHZwCOtEvBKgp!Ty$%}aOv=Yf6pJM6v(9`&A|cIE}w|MS+C;3!U){O-zM{`&VV z%|#xi2_o~#Q4L%F0^>_Vo+84Lobl!-{W(8yBhWmpq~?BnoHC+$^7{#pwF z2%WnS0MyuIXk7}EPMnNJ$*AfUBR&cMT0`eguVuYtWj_PvG#BlA~@8<5AX1 zfb=K?pjAAyVZlWkvm1+t(H#La1Bwkt*qEZSx@OUBAg{fk(Ze`8^1=r7GmSMj<3&SP zgaq8dH!A-QzPiggf%)|0qzm0}u6Ym2u*c*}PpWi-OWM0*MMj{W{h}6H)eHc;u^FUHKzzczjFUD0Z@p$mJu-}%;&c0R~`i8|zmX;CmqmLI%KmGiQ^HZfN zwJzdXTY8}8;-*q0HDK*G!+bFlJYPQY6<99VVNx;%+(~hsl z;RUN?0%O$bqN(Bimet>g7h9t@W^cjyzU)Y{JHn@$*Ok$Pja$8OnxZJq==o z$wlf}rbf-+YJ?>RXwFG3^DPD6$<=Q(AC?EzP-tM@(ul<^naYgI_Be_V23WKAq+(R! z#2Lvw6q=QzPz9)h%PmWzMh@%TxznHja$Om5pMLsMZlkF&?rE>)vANCN^P7xtC`{i1=b8|D_;R1 zIm7aqduyhA2chGqA^RVNlbSW zpOy~u?vT%bS<#y(MsRTnR&YF#O))i$w!|~=h4(gsz*La9RTy8pn~a40fh#BsXmb%M$Ahs9H$ww(ZSE*&Fp`qcJqrY?R`M=(Em&xPC)+ulW1j_dEmu`|NiZ0Q};h_{L3{Tef-HU&Oc+wkb#_;Pd{69@~P)d*>StWzkNuP z)k@_^kFiiCY*P!5FDym%4+`{k6FMU$9Tf^pMwE7hs98xm7(-|PE`l-m^rIA)*EJH8 zM`scdjk8CvGZANoNGc#Tpmy)k?gvQiB37i*HQ*|>0t&Ba&cj2LZbN(l+hjzpCJDvh znwB9UM3OXz93%5vy+le2m%qoz|wAGG)Y zB<(K|TFXQeE_ex~otx569BhKkqCrB0dW9FNx+YAjyH69qJP$3gc6~L_vHUA# z*Ye~AaEs&Uhc+7o1pFN3Ra*!E3F-s;1R{Y3R2vec9XOx&eKz z#BjoLv_vEjwc^Wik3yfh*p##B>*?PJKs5ja*Z`0K2vn6JKMe!Xnk$Y5NJ9=mT7PmD?7LI6w;AyVZa zEnIB^@`?x@7HxglV;K2VL92(*j6%v_bUU<5dQL4zA8IUR^jb$%Lp>n0ILh%*u1Ak? zmu+|F<|SV^`Cz}eq8LxK^6D;KI`6v64o4jRjdtzYz5UL+=btkj0NS^2_rV8q|8>(H zG8Pd%|H3QXyLEl;`B(Pdb7ugU@y6S|d-v?$f8&>5dHuYf|KI-m?)`(K4qLf$)%7>r zcE(RHxb!#Ycj(YT#(iVP+YdbW*dd4Pw_%@Nn{U1;XJ+NfRp*>{@#s+_S{!9IqmPV3 z7|+l(dKj!qZG{lyVv5MVlAoxR;u3HKt3S8s>R0I&o{pNzSe#Q|$&t@8CJ_V>Y!WGh z>_W{;#AF&VIvG%)iD%&H;o9<(=NL;6R8k6iMROZ5 z;17@)001BWNkl*@!*un{hl%5gvk_Fne1ALz!jw- z;8ui8SVTYp06S@`9#YEKdh!sdzRKmr&9G{fdb21AFT3|EH zD4GuXUrmb^D5Ks!wV&nvg-Lk@O7UXGi`$aK=RDPOX zYLWy2I(F>Pv15lMNk)wtwq)tDdGqE2z&r1}yJqd$-FMsR`4?W6>Ae2NTVv`+0KoM( z+%|c;iQoOs*9Q&Udd%pN=bd%(q9scoeCWR>$Jbte^UTwKvgd9)jjkWjv114GeEs_M z=U;e9-wpfx_=n$X$||V@wW38ul^RV(sWnq0*KyU7%bD=1)O4h9WYXu^?5Q@?zTDX9 z!RpNN1*CGvSo4YHX3EIOqKFH{OfqpxQvA{u_637+bRdnfX7SZqHhJrt+&`#9Pbijx zc8lnQMz)r67g+`amJezPY5-~o5`r3n8i6$e5it>%049JnfVF@%5FXi#)QQB^$kHC_woiz32XWtTRThNh_L)U%_=`0mEFKwfU~v%{44stEDuZlU~Sd2yn_ zjEIYs#SDRTgfx6^)k|XEixwyQxtanbUYde0r|057(4RpRNQKp38viGgislo6r%h94 zv}Plyf*MK544U)EDSy6HEyAkZ*7&06j9(Ozt=FsP28Vs)pgZoo_ucnD;BPIGO{~tHJB=JZ|+^axmd#pF^rmp4dx=IB| zFU0JZ6e`{^`P;_#g5v9*!W>4kaaSXiMXC78r+~6urXhltzL#&QS=HGknE4|kUFDZDnk`-sl_%OIrKEhsC?_vyd`(uIn#zc$e2P{S z@M+uZCZHd&d^u3?XZXrUkF>X5I$o^C*MGru(&djnm@fa&KFUg;k5({6i*V<>asej2 z7O7ZOL`gEpx{(~&Ovw1E9~uduS+w#;MTkOp<+10$qK%!%!neu}G?X>A%*vN3Ni%Ns zu12~K(e44%7bH|}IP(9p$`ji78Mv>!{@@_;wuG#(5y9eAVA~;&|LmD1)%v$kspY{R zga&zKuKpqr8WJXw^VoIxGaRWxcyqg-B6{Bon=@zf#Cjh4Rtw&6B6%c6Uf~ds*;~`U z!TlZl!r&F@=X^5_BkAN(WBPDj-1z%cp_S{Hq7l( z3lt3k02VD?+Hd0yVIuXThR>Ms_MW>>dG5KF_St8T;ll#Qf~jt7n+rtN`fgPYAhf$^|Tys|~jR#g&+dBI3V}M2SxeX_H9#B$skPHPRKS z9EP5a44c?=iv-K&>cDKhM7rI`9Z$%V#wZ2PjX)LxlEkcOE5xA)*n>SM2vCQKZ+1X0@gqRo9;%opZLDs%B0p-ZXrpZrDIr^FK7(qX<(3pi# zn{hFICE$Tlb1{!(1eI)3(Te)bxeHz~NQcrzJGp_Jfrrugr2qAw;@9n`y{ai1Zz+=6upk6LtN{|}_}rJ-OZ8ZS zyP8i~CIUc6l7!oY>XrbFC@E*3B$QT%8aLn;s%fpyvXh?XO`Vv!%<2`qW}GFS)4_u1 zKqLriP$6cnz*bn7))a!26I0os%A#k0+Cs5PGe#zbN-j^^b$!(IT zt}6%=&^{ehEaH`nwy+sFXR%}ieglB5)uPd58qP@c+R@8Sf3wpTD$%Fc4|4p;-?EjA zq8g^7bIiz2^*7_;qy&EzjU%Ze=B-X-#uyix&OZF{&wx^|ZzDv0%Z%*>gXfIAKg(UG13BBVTy&)&Bi9+I-Xg zJvZnfHG?Hfm+@Fjmo4wwrL+AV8wI_3_PF3@r=N4)#h3i{%5%>;sfCsGyaO*)`a%&# zT>1vOZJO`qw2oTbE;5I?0+V2%5LGgf%$-L!g#B5x^rUqaZ$3+l9&i|IyDGI3vbU+| z->S7yJHB^R?^4>)3_XgQw-;qFZ*ScV+*k?$R{p&4>6gSy0in?p)Tm^c0Cw$MvW0OD zKjkQnN?k5J#}p5VrFOy`37gflW`Pi(CSf+5Aq- zceCSf-h~-R!*{7_rav>Lv7FL-op!A3lC;6s2x&G*Gho?$+JVm20-0GKmy z|N7X(wx{mJBzG$?K}LXVN6jP=?IN;-Qu@g40rqE#$#OIuwxo%fn*FZ=d}NhJlj*5Z z@^*k-a_ZL9a7k?QVdb-~U)h}*^&k3j#B6V+Z7Eio%Bb)vNg6m{%V|@0yY?TqEMKuw zKB=p#8$5WxtXXsV_1lR5)z;PmK>POX*RNa8Qy4XJ=qC$5edv)V1`XW0SI-RqVB&-^ zue>(njW^$^uO9&bNs^2lG4%Q8Up7%zty=y1jCV#1ACk@6rknQf-o4vNCm!?q8*lyl zuKVS~)vMPmUb3`u6;KxOKHs`+RjO1mLUkE505~=VoH*$0zx_fABu86OGf2wZQQC}4 zWIt63QUewM079DhDLtb~ZJme!gwj?)EtSom@Kum(YAS)u)n5UP;V_Sg`Ckr|K!~e< zB~T-xm#jJKwMo|Bb1%Fy{p^c=amgQf1v1+iRVPeMR#Xw^&ez{~$0=uBbkl8jmz_eK zOpnN35=0m`FGSGODxvB|8{gx{PaeZ18*^ys{P~H*%P2=W2%rWO0!X0xYd~s1-R%== z|JA~F28GEp1Z(vqZyM9zqX9HkWIdOKyku5g!TRK)fJsZ!gN!d2@`}UL55;WS6VUsl zX3iq^Dedg|kkhf$3xA|UOXU9a*|wp4e8;>YEkFG~Y0Vw00nV`N>&6e`iwaLBArHfZ z16X)O*0~p0Q9lfl*x$*L+J@Fd=ma;vBbJ4 zpBB^dFEo97Ayv_MB7Uh<1h$)$Ht&&_jLcAfSC=i8JbOC(Kw0(W*G9o`q#IS0(hE?e zcaecfy% zdsfb#ENosKD_Z$gDoBTYA&)#w8 zz4Fx-TWtFN2Xmfz_QeICe7b!33IN!6qYXFg+vo0k9^7VVEMEqLRNx9Ud? z(^(w&%yTbZbKOm|X3w4R=FIaiyrf&#F1zizV-fZ?-K5`<-~GnluDM~>2Xg@6|1SCC z(Z`&;e*OB~h|NuHV_i|Dd~yUV!*^1t`OKHf$S90bkwmhBdVg}?K1rP=^Zp1>M~CQy zTWKV&O3grgL2i^{f|$+$Q2vzOC{We=o;?am%P6`OED10zuakeW@YCsMUo`#fi_W{~ zx6$nW_udE7&;I4~vw!)U%dRRT{gOzw_~Io?U!U>LJMX-&*C*cS2ZcIBm_;`+lOzD^ zRcU|n?d-YpU!U>LypI;hSf4EX^!#64cIVv>6)b`d|6o|OB9s!Wsl=BRp5#?DAv>5F ziB+5<2WfLwuR*e?1$az*clG!z&+V<4+Q>{~mXG>(Az-UOx_N=Jm85^L zkV&+9V$qquxYB4RAZ@#8JauT~QM%k!C-w;)AkIR7&b%xAkd!p zkv{BUx3X%;IVMIReJ(-+>SoQaVA8A3kj17T(s{A$^!X5J6P|hu1=Y%l0FkHx)jG;1 ztpyI3bfrlR!wD&A%_>&;7Y|)$_^p6|0!X&I;atB0_eog3%pgrkDXn12-cWU&QGhyi z>Ui{#hyCJLzcWup*AGAc-09c<^Va(xcoYEo_UXO%p1a6b+fEv{*Pc6HdfA_a5NDln z!pIRr0bta~p$|OtxVb;Dd-raG25mia=6muj01O#2@aN~9cFlD+-tq5y>+0&pjTv>) z2|wu6sbfJ7r|!M$3opHT@&Endl3$$MM-Jm$0N{NOJ}v_++jKb-5v08UHg|R+e#* zYRL6ZYUZI9*YrKt5N*N=TaOjxfEAru6l!rVw|ZnS=J(!7CsuZ^62dS=nN0W2obi?% zKgjZ#5?>}rk{|$akH+4?V#6(W+3e*A2=XR3>p53C(@>fWo0sI=M?zqN0FdZ`g&=@x z38a*h91vmy5(3s}XXTm`lnkOgV?YTYlDthW0ip&%c6eWXAj-Rw)d3NCaz21Hf?6f( zZvnvFijaW-v4#i)nZ6^3rvMUiLPJal6Chbdgg_`{WhACf2#JKQRjE`18i%V|9Hn_@ z2E!Ja8HyLme$VZJ1!i7*4Ha|SspOYH%d)pKCX{<+YwM1P+Eu=A$6ZvIc{)bU*x^u; z?Axp<#Af$w_mJq>KyMzbLCNrOem8Pq?GN}jCxRs)7s_eCN5kl5j%|N_-h6*S)q#{E~(5R#<(rYWN!B9#Wb#@iatV%6N z`%K$?pJ}^$54YcL!dahaP*%1)5>~`gM;z`CJAsxw>Lm zWLG(n2DEFZY_kCjzNC@{T=*l9SNx6|KDc}LZsY2QdtEn8Gp`>pq z2?~P`PIB?LIU|u=`B0%@O8}1Lq_@|c)&tF3gG&bCNmr3Z?ZRzr0?<1F zzzZa?G%M*`IThoj#kJbTXC7(NpvJh;??Q< zD2UzYHO(_32|(^Dl2ZZpZCvwK>Z~zyLvK(yROSFcr&Y7wf^FQi@P4~%nP)aPombu` z|I$1ZD_!c_Dpjd5WV(7=SV&Z8>37U~7(K8?*fa~VH(@j&g;EIs7 z5NUcV=8(E}?Xqs&x+k7~@rOr#t3!tl`Y}HJ+$$?quIjh(hVzvx35S_kv*+CZ(0}L6 z|ER96Zurnad+)XrKbG{|3$NUK=e?7+8Nc1cvA5rK|Ll1mcI(>p2jBZf*REY;fZ22A zJ@nX9v*&&Yh#U3oz0HI%BS#FC_ErFZ2=BZ*>%oWr`|&3WyLat6Xy8_R?KY*Zt`@ZT zS-o=Ai`4?Zl`ObT%OrEs)rkgzS_){N$ zvanm%Zi5DFF?EkAb#-;T6feE{#$!)B``MzU-Me?0yv+n{JEfX?`SO*UZL;y_4GlcX z?71I4_~?`K=PzgwqHphBBZm*3IBt}zx8=)MY_>_i&l^4mE#;nn;gy^3xOb)dX&^oe*H@~(QxBYk+ib;lF5LYKSB8{g*X$K7K)1rtU-A$l(^bLP{sw-~ zqv9kwFS4%$0D=e+jb>%unNF{dB9R-{Iaq~mXR&$7gB_-}wUd9cat%rHpm$hmVtn&PX=$D$R;HCyyrX*lX9W zo4n1qhaZ3XiKk!OZRhRH^9LSz0s!hq44wbc0#A*)@1g(x?oU?>p>9fl`ni|xzVG2* z{_OPLy?V+gi|ed3w_-1qQh7oXRq zb4Q)~JIj`@m_6r16XucsK7IECkNxI?Gdp+gB%fS$-Ay;&ZtwkjPpfaq{uU3#b3|7oRO!95&6?TWr>ZhF9^$76o5SsEoxv>dVg5(SBgd zQfGZCq|A4rE(Hvsc7R9DLf6YGm}M=T(HNwxiK&%X&t($B2*Kc*oLqFm28*VZ)o-)m zCD&J|95gU zMgcwo?pQV088vT5hm046^kU``x^-uq9~em4FM_Hi`9*7=It^VP2DAmI_E=G~TxYP{ zTzTO%1mw-XG23?2=W`+gsLeK87|jvsfkV1XwnUEXtbp7wOO^D4W$~H7@@Feh`@n&4 zEs(CHA%m1u_YE@w&~2|rql>OT0vL`SO1|Flc>FEmb3Un z@Bef@+}EmE0c52~`C<1E3avzKmkcV?jJ~K)v|CE1&GZru5r_m@KO4l{%h&qKej2A* z3n*BS)WXT`14_bz9hp&>Gfo5mB-C=H8Hhl+H__h#WMdF0&+}4HW-^m!jYaN{$U-bH zve!7|zBQ8_07&C(Fw!2J&86rb6BC&}HIpWlRwwCYZ!YMkN?$DEN9@d}d5GvwbyccT zK=FmURM~)eJuGLHEYgLs#{zj!QKb_pfk^%70VNeQWGn>ijfMJ`ozhk^M#1w> zJ!`~Csk*2Z{L(N&wtBJ7>11ZtaK_B4^%1vXHcmgGCHncgb?c_=u+77dKmE{SPZ^;3 zvqei@dUeL20bBOz-BSltjLrIB?qye8BZSy_$8C4mcEZx-E3UiYw)r1_^1DC%?PuDn zm83_Xct!}Z>y+(>4;i>>&6>Kp8UUL4?yNul^;#ktJYcI`ciz5Z`}Xh7n%%Wam%7>- zzTWB9waXy~?9;E`MziP4yZRru%%1ziFs#m=^Wj!oY#zP`!E8@~6!oL^pg#oT%G?|JaCukAM# z0A6|hO^GsZGhxhbJ5OGUj5Ho0btiD+wHjBq;>1oeK2S4 z)6c!K&t5xc*YNB)^S0Vzvm?H9NdJBtzW>48UtMy=+*WY;iXNwkZ z(tqRQfB4;=J-R>g*wfej>-L(OnoBSGX}^v7f)SM=nUO(e*`GC7xU0lW(uu~?izYzE z1jPsAn8!!syV<`-MgGrR!MY}aLCKWhAi44~tz%$4ij_0#2AxWfXDDhQ$kse_>HEoK z<&#!M5+Z?Ujo`S>Ykqpg;s-LkvU?{sypUGxv$y6I?-FUx(_+Q4Q~b+@;vluhynN0< zx@f+pbk?xXc1AYkAsCQOKa{@A^ZrLsG%DbSUY2}f{Wu=47butcAc;4WG-%QT1?k=*o}EZ z$et`UYeZ8y%vUultS%;)DVW!-*MErgE&!0Oo&-T-<_dikfQb;w&9uU%$d`&b3nBtc zq+8s=;9%v5C|%4ueEN3Z1!bB50OdYhUAZ7Me&c5pKPW?h>gEECZL@ld@L*6@cMfuk zz=cv8=Y>~e#6TwGPcu+E?uXiJN@-oyK(@NVV@(q-D%o&R$}@qqK+i_NbwJeS>PAYa z8QnIPEvFh+2y9o(6h;P<&euWP!W#;GH0Mx!zuK+DI3{Rs`g7|r4}r~KrIKNNJ^%n9 z07*naRMf>tnM5h*e(}8Zbe*vRqM%Bfo0_LGt5l^bRp|>x#$ZO@)xgmJMM9{BTKOhe zdS-P!d!=(F)%D<_jS3{vSRx_SQ2?o!l1MONYX&zXz67aKmC7LwBDRd8ld)Ph)SUQK z{fMExd-Z(vjkgvq{H#x(UI6g$V^2$rc*TlUUf?_Kez2jTVf>hp(~tkYeA2Ufw{w1R z>GLnWwrKH^o*VQqA%zf!ef@xMeC?||`knVYD1_K}!@d{){0!+0W4E0rL!eflb?R|L z2M+*%31dgS`~K|5pM3V6neUmm#~<@u)b`Kg0AGD=#*@#!sO^_+y`6s2v77YU2mt!@ z>9xZ);~#kR36sb@4?GG0TWr3`S<{ch1c6}NiDM2s`ouMB)}+;v5Mt%ZRRA!2$iN9> zMko~jkR??{_9kWS)#mVGt$3OVU6Yu=*efjFW_htjY-g`_LI%Hr%@XfF7 zd+S~Ity;PIvqeh>Y`sO!ny7S1TuKZtY~iSwu~xDPWiRzJm{L~>vcxS47F+gLsY+F9 z8DgiC;?Kj8%24YH^O6Np+s~%U%39Y=2>d5u;Z$t`_dnE{W76b;ND@O4v0N$TB*)$rnnU| zG%u_iQj*{p7`&3AN2yi@zzWLnET;J)6c$0 zK3TVJo%}NI!;d-8oFvIX`|jmMf9suh0bt4w+enl-N}W1&lqj<#>AYgq>ec4Snl)>m zec_e&X3bu@e8u{8>)-!iE&!}szm6x;rE@2VGE3^wqZ?0T=DV{1V7p1fCA2 zfGuBp<1HD0AK;a(R#Q_mdE4=iKl$A6{&e+&k3PA_&Xaf8Zequd9c-3Hz1MPIinK1B zJN4gqLjyo`@7@&vR;^kspLFTk835+Yn=dWr7A#z}X7ySCXy2g@)EUa4Z$xD02te-oS+Z?}OtTpw zai*9VY_n$E2x5oQQul58YZKI`N;|G+{Pr2Z{W9?ZvkbwFf zS6uxnF=b?Ddzz8UWJ_8wVV$a*OOyg%R`C5$Euvrw=Vn0iE1y1^ATVjsn3M zI$R(`DRBa$eu4tD6gEXJc5j>U-oKV))RY^-gdN)tXt-v%Q9jw7W zlm-GJ0jLSit0hE2s}@#yiJG>c)m#!?r6S}UR#i5LL`wHz z!I+92UAk9*;@u|6fK*zFTCj)jI%WGCZ@c@UN1r<6fUnMcZ`SO&^S9q-yt%s%0L%zo zvSb+mEcoQp1)qHCC9-b)S`G^K?AfDTyE;#@EM2-B0DAT6;XSttbAZmBJM!&_|7Y*I z1FI;u{+YdLq(bO5354E4N1AjIP!z>pQG9lNmZv_S*m+hI!KZ#UM8%3!kzNI)N=c}p zcLIU*K$1P*A5(UAw%n2c7rj5@<=)-dnKS*&Z_b`!Iv(dtwq)#h_3a6HdHHtvFbXg_ zI@)Gg$6r#;%PRzcDpeBbW%}kxypdn~(eR%Sj;vBSe)ha2TeoL!-JbdBS3ll-{Z-dq zb%mwkOh2QeE1A~|glC5Uz@YxUGq&!WJAdh}U3(J};&){3)^$BOsb2HuO-daZR^WOr z;eHf}nTjz76%3*;oC0HZtU*P8vE>k%sD>PtPzXRkM<5z__^{6l#6oK`l^y^HckE2p zodgMJI?)lz2r(stpnC-0gL0x5x|0Xb9+HocSD!9=i>$3UWy>Y+F8s1n02j_$zAnC_ z$&J4s*{-gfE|F=M|o>94U)jryH)u zgdPaw7ERM6M9i}&WdsnQR09Cv1r)*D%S@IK7EKuuhz7!;x;0B^{vr_Ow2CC=1gI>U z<#k)a=}D{W3^g!UV{~FE_drTlXgC2p>wjX_RCpcuo<8$BL)AkuT=`yrj>54Ab)ix6 zNRa>{XhtMN)B^AnO`CCiigQTkqQaq3vAm0U&@83ej6(>)1tv4hkYDByDilI#0{X9M z8`?MD&HR-bwBK)Cvo zi_0pVA7_1pP{EK5b%9rqi3K3cG84^u3~y7WrLVb3`=i?_Bep{zo`7a|tKuPB&?v1m zn3^lruUEH8YRb;cy*qa8S+r~=0QBqKU8)I#2#k!1C@3r(Hl+W6K0TCJYS*kTSC&R> z#-_-~h=Rhxf`USqYPGD+#dp+o{jG7I&@4YFpU?zVWliY zqG!cu2s#LdtiqkENWswm0aR~^4lo9KXP?g2Wt(%vQdnBl1c3EEBH7W}RTQlm-B`~O zphk$y2;FSbLq`|{x}rCXFvVzdK7BNc(NCr`f~kX>z=~XK00N?Mh$DbRSlBAUR$Ebd zWK;4k&kLf6L`a4BlWAgG!$Wx>m7i7SARZz6lpgxRB7$%R5N!hOszY3%`O*+%#S!_7`}{p7L4p7P0&=m5K~m7pE-FH4 zA#&T`l89-GNX4a&GRRz$6TwA;16a#JIz8}^qMHyTKnSZSzLy|IZL?wGMTcMyX*tQp z&GsRsM&h@oZCW@mn8q4$4K#zFSD`2&hBg9xjIvM3AxAuQ5tt|e{&@PBH6uKy=@<$ z4G9VHo!YmtEuV%-^|Q0j?A>>$QA&dVl1ZvxH~aLNEg9QyxOQ*=k7u7gbMn+_0J!`1 z>)N+%NiEZl9y{T0JoW3=&OUu+$IdOdY(Hsy?WS!i)V|Qd!orSn@kk)EBH}?O2GNf`vu!ewoOGQD`j5Q z6voo-j27zJCi$vc^5x(ftxGhPSxu&-03|myf?v|9F|rbusW#1ILHYZaOjv7X%2NrU zD7b;8X5LOP&%dhbT@J7;311n(=>^U(Q}umPC?Dj#8UK5+F(sH66F#kzE(|2C(@XA5 z8z43}rS=(6_AKW7ffSJs6@+56VGUl|0JFv>ibW%wg;f455AiJrhd*}LC9rhMrxd+H z=oaVuPtKa16n@3zB)0bg^d=qwu4KwPK>S}+;^$6Oh=8UMyWPKFfm5U6d9Rp86+#GN zqs3{*C4>+HhHN$GG}y|fM5aHRvE30yFa(f|JfsNTp{Ud~Z zN&v7|Wt8P#@J?QT2Ur@6JU>fZ|hHfL;q|9=zrA2^(olecU4{$FO!d*_2s?G!GxTlc%X8vv~PGyR(% zrX4?VDl02{^}5Xyzn$XkL3S}AK0(to0NA>Hx2|JOPVQ%4eNSzH{X&n+Isw3{wSWFL ze@St1@tK^wFTVciMAj*D()<_4^RK+OV)gp$(`OJdzo4+V_$&Z~hj}y8QHEA?77rXg zqU(BWbabVtN_rXQoXOKm%Lo$rPXnTXbOqQaFzubtl^y|MS}3fi0Knx1UuRLpyy0a; zmvZ9!62%{s8DhmbA~mRiSJZd!Cc37!alec#+m>>1-Fq zr@TAeb(!3~!i5(m+hlpEzcVa}$CHC9E_E zkqS^YopupJm|RmP9WCJ5bjyn+Z+7yFp@oe~j9*q?xdJVfYJ@MAF%fSmd{D-8Fja04*Ehx#c6|F(U|J_4dWqi{^_A7Clb1Oy6d0 zxiNd`L86g6>ZIohL21P-KmZ^eo4N@Q7ve4IQ$805GV3&qd2tZrhRh!N(In_;@0{5gQYoUr-2klRT}m4V%(8 zY)S_+-*MI8{+7l=l<~~YLnYf~Nli(Pii$dweR|}>PtzNkrZr4%aK|mzc4*f|dDfH( zV)JUMT|oBor7raAeSB74MvXcVC=@~I6WW+*<(t3#!tw{`N0u=usVb+ZXeQelEDvYhQ{E<7p zFeNJtuO){CLK^!D5@d~Zg?)-q()1uPvnpN;sLQDVihS5A?7V)>nIQmj+1L#-!l;=) z6pTZG+GcD5sI9_lmvN8BwWe&fGMjk3#pYJj<`~ozxnCXdqI#-g8iE)*H&#I$gq2hU zBAN=7(pu2=GC7xuO$jM&QEI(P<$58VrCu-hK{*ENfNb?x=LU56D}P|y=g}pWVESWn zUWfu@?o@1HJmwT3okFZH+3+}xUD;q&mCDVD)AQu5v>rrtrgb>aXECZ}; zoXZAz+kuV`^rC@^pW?2~ACHp-vHpP%ZC>sv=8LA(6~hy!sl*3L-73F4*~uja#xSE; zfJ1P;#&`+A)G}FdJG3E0Bt`%L>YW))ZPf2SQ7tSitZHJFVMF>q`j0#LO+{wM zS`G{Iy#B%yBd)o!X7y?wkEcrIgdtb-8Flx~?nysz@2#y`G_F!P!Q=5%tD1OO=k{;E z`dqip?VZ!LmBhGmwzzowClgCcOXXB_UC-RJ@6|WQA3buy-e?zrh$HX$r(yIb@6+(R z(rYl*sR5Pi;&C*8b?EPWsjQo7^}JZq_Tdeb6)p()27#Ih!jbxw$?GuY<0EN4Gyw5dm}!G~pds zXFoM_U;uU)pee8u@Y3+#NO!qx&T3Xr?g9khp)C!UUZ$1{EC?Z>BNFhKPxNHF5J1WZ z=o-;<1kIQyls$^z0xv+#t^jrLtx<(=K7igFQ~A`b8T#_N4Nk;&mYqW z@aaqna9+=X`dh%Rxw7?@Y$}BS0A=hL3wr1m5ComSH;7)&pX8GW0niY18^c8-ExkAwSq-_)k;q_qr3ObES=Yo|}r9f`k z7oK^vR`u#c)AZ7^Q>V{7@$XkpWuJcH;d}e{R!>|6 zS~W|8F@b{b3OcqlQJ5jPCyIO8E3;9Dv`=blEa*&w=y9*?c2U|05lFd z^8gV0KFDVxrg9=dO_vYQ0ZD3&PAGO_xeDS1G%Lc(t*+~$o0lirihw#aiptjk2q5Z6 zG}Lth07L`SLDLX`AZmo@h#G)Nxe#iC0+D4U@1kThO{2aG6uV>j7WIc?y#+?gG#FBA zge-%IQiK+5gb+ki)rdJuWJH!+4BB9!U{E)CML7awAX#l9}h(Hi@ z)CkepRte1s0n|`K)cMp&0DvIs)G@ivN?*!2EgYJ0&~*@J+3|v>zlpA)hMJB9P^UuD zsu5WhjaFQtC58wrFNhid0s+<>*lC7TzapZDdGRS7K~$oByF@G_qzq6)K;T`Sen*c+ zhz_X9N`*9;ikeci5wjkmaV@}T#(YQt(Tb>34Wbc14-g$tl9nCrs1w?dsGb8F64W)K z(L&{iVCh8HbPZ`9bP!F{ntf#Y678Ebh=(6|3P8|loKmzer?RyHCr8*skEqj^+7VDg z&oC9&0*23g1Yt(_8XDFPRE4z05d`W{2q9c-gnB^; ze+S46HAr-@SGHO<%<%oG3V^JGQvKDiNdc?Y%YO??E(r2%)JqC<^#^RB0Klm&#uSTo zVS2_}q}El2V<1Bad*R%w_<~w42-Q5)>OzolBI_go#KuI&#m3ULq>lR59XoS!^8lb~ zVijwHq3czCAh`q7%^*g$+K1=8i~uE;00`)S8aG}uGtFw(@zPT(04R6{2kEI81i|8w z@Iv9z>em4jlFJsh$h&PJxD0(RgavVUM_&12(>nrvyWbr$dk%c3$CteoA%{aKV)+Et zmcdwt5aV@z`Le9F5!2SHDKSP%$y^dK#cW$v1VnF=`aPlZszpLU1l#A*2N;y1EsnEqHWnAM;j$w==cOA+mEuij2-?&C6cF)GFbeBKr{bvaZeD@lD-I4NTXy-A zRA|$e00rP3R58(ZnySh_g;{t0tiy}XL^A_-4^uK?TT+l+`k!TrwMPiI|80kU*(*`XPj;Xrlyp$@#?sFF@Uw0u13o zf*YfGz|=BnA2Dodg0psndLr9(Ne(1pg?Mh=iG%BtHi`{ID>QA8qt(RhTqrI8?)$)7aLMp$58+e45k zSNv2)u<#SEtD=h!VziR-#^ZY=qMbm6EYmOV(P_?trRiID-gMW)adEK#ke8QF4LLh^ zOl#Y^xs|z~YXVAi5%l;n=(CLc1q2}oIvO2^@K`{j zrj*_XSVB|wpuHWoIh(+nr4Zd}7bATF^`N0q`3)zk=W#FrkSIuMW9USHUJS?@0b8d6 z009j^*Xi3oLJ5)nN5fI6!B)^uU$UiG!_hAmyF4R|{L{VMoLEtm44FY1Y!Qj30W;aQ zTNVn_NKtDtiD})9M)Srg(K#o9h&m9WiK$R{<>j4?vbIQwrXw{DMbr^AP3JC(L{dlu z=Yhx#SGoM`MI1f@qppK!bWAE~1#GTX)jC_`nh3dB-f0`qKxz;OSVku_01ZeOU&#?m z6$lF0wKkCeAv%j*Qa@l zSPY-#$SRRYNf9J5S}>eL+G zuQ=rlqOQ|d7eMZ703f85lQhR-#AWbzN`66V^I$D?Y4eE&(5y*W3(ZM8by8&se^tel zM~4Sxge;na5$Mz=LrdlmLMT6!_e_F#gEWM{5xlXt6`Vx*k|QDpYdpfjIR6$FCxokbWx;4hC59*)Q>5tQOEC4T;vD*^AVR!r(2)$eW{Skfi9sgvI2{KHc~^jcF$oV+nTelPZ9xiy7@|=EM8yv2 zXc!=ruTCmXfhSTs^)F5Y&>V)p0K{_$ZyMI@4Rs`%+IE|*0-=n_@V-NPD7~eb+Z5~9|+hKU=Kn2N;n zC$SAmrfdzsy`==yb{Iu?)q>I*v-G@=?NgLA0cHB!Jx1e)Sx9vC&|!eOOMKi zLZ|i?jnRqZmjm4GA%v1|2Vn_B0H{L@<85N@A0vp3`~>$EQjkIj9{AB=h~p2i=asB2 zoswDxwPl-%ut?-rxXB^CMGyd)p$j{m&=Q+)j&D8;zG7hTbewVz2-9vSH5W0K`4BMF9>{z>O7W%nTmC^ z2~t8^fB>50=~BH1hCf)scZtTOAWtaxi7u?;(WfLKsVy z31QwvG>zywB0 zdxdBKKz(V0pZf)}E@a_etqsiWy3?x19|hiasUkj&Xnl{95Ti_(F|x&i*r%u*awkRu zvv@kI6cwfgjx3}vQ&a~S0ifo#LhQRQfz_>D1G|(pxNJ$fLh=rsI7xS z2*C=aQv}>c&I>|*nL`M{iU1~>OJi&XkF1FoH{is*4Q1cWoat;uvh*x-D~lTi&Hhn*jrRh>L{8TDY|hHcj*N_`RjYc(PHA=PRt13HW-rM| z&%A0_zorf)ZOpj8QA8f>S zoIdF6iYU!<)&QzkTj3`R04M|Rl2iT#Q9ce-4k!|kXe-vBBz-|>PErIu9arH0xMNF3 zgO`N(JS~K`1{K{zE*y7#kHyNzGQtnta|sM!Un4;UdBm`F%_QhJBEndR`hZic5Co{G zi)mBoQ+#{Jw|U6uE#ezhhvlXf=sH4q%59sxLZmJlE3{$L0)jvhZT zbN0fu8#ZTUpZ0jP>WPVIZJOUWd}x)*3BU{au?OxN)ccqqZnP@I4EnT`~b>%AYlxU_1tdDQszGvx@)xG<4zFTP!nyY;qVN>TV*GG%3DW8e9rZ@$-MJYtq<0FVm;ZU$<^^a&p}(23<}~nW_D= zmEMs%3z(-5nj?wzHzq76({MRj5d&-74yNC7(XpSh4ZArd#w`-0jmJ!H6GKkq_Q9a@ zJoDnEj5*;XwZV;jz)EzMv$ACE5YWdLaI9d{ACD9HVTa`uPc18AYP9x^%G*A!C5-^AuO!bOA2D$e(3gB6S{aUXxgU`3TU`8_mA8xHcE`V3@-NW#m7&>INXt$i5-31O>0 zMe{XXAx6w#zTy`wugWTVa{vn!G+lFa9PiiP*lujAv6?h)Y+H?;#zuq2w$s?QZ8WxR zTkm{-=e)ar?wL8WyED&o??+d=FD6VphAX|fdFiwBi5>I>3+sH@_1BI3tn20Xt4XWR z&Lsz3)+eL$!KOj)IF+so=RWB964kQmV)M(7fKx8p(5SGu0B`=|Ax6Skn)|be8=L+V zgDyMc!YJI6g$nlvYdHN;Kc|oE7W!4*aM0e;^)7JholU4`L-Y=6p5*ozBpf{<++ahJ z90Wz7rUaF%7nxo!J2GM*`Op_)*lnJ(`>)?~v34`Du-|17XuR&9}bYv_aFl(LCQ)~>eEKDahorbRk! z8$NLIer@C%ORlt;p(xOOJwU%VUcmg?dv`qBP+!l^FhNDWr2_>IWv#>YF%Lrh-BKP$ z1ep)XOky{hTlE`R?+&Xdx0=BbJm>hVU#X;uv$$Ng7sZ)t@7{K@8dL|YnK~!bKOGnEC|f>zZ!FkJ`7WI8PS0WBuVKvC@D8f z+CN=(AVESH+IerY0-A7O#_J;90sr*v=XALij-3cOkepmr8o#IhMV*xjt&O zubC_-WIb(7gzO(xsZ^K)Pap*AC|O*->{pcgJ>NugH3+pA3XH4D^@d5Khme9fBw4Z_ zTbMC5RRAEGuLuv&Ml{{G7NGBR=$UoQhIxne1MCaKs*sDv+J4^^$dPRGgt+i0Mrg6-gYH{N^ZETjctESZh9bL#FWg*zrWV_7H z%IdWyj&X|sZ)B9qRB4b58AUkdVYNo>?WyT-ql{NS`IE}+3?{%t9=T)y+^ zVww8FHEO)kL|72P{S!-49l3e!fmTizms1nu7v~@@9*yZ+{sR(;J@3)JG8KxPHTehV zXymt8*iM0i<{x?(y{Myw2KBd^jdt`#lWCjkooJ*G2Z=6Edd#QcSPWoBqkzLx;80$J zdF)D?JoZU+iZIh`GNX2Ur~6P#+zgMiB@mt0DFl%i3FT*@d}wBDOhq~0a{llWq@bqO zXueH+tnGpx>2$PIYc?fEMseSA4Q%E*jn?N2cjHfiONx){5S4Y$3s%4x6JWjmhyB5>A_Ej61AYM?l$?YT)|2rD!VCtFAd#ti~ z=}4ToYt{uvx|kq2EiEwQ{ChpG)6>$6^YO8EqjD}T+C8iHKp2uXryUc&CnI;shTre? zofa54kqkbok%NivL>_mIiCtBjX*J*ZNnQ5%7K`kbxv#@%LDj!DMs0B0jEwS#J@z;i z|BNM9j14aV54L0gbi?a?SHxhU%ut9#2(VeC-7&No=F)e(UpR7DsuU=@HeH-6qE=ga zLUhRJw;1*6OV3wb#D_%qetk~##*{T* zosHunpb&gR$0m+XTFA9oJs?|QGjqr@qTAm)m@ik2L}hiIoQa4Sk0r0tZnZw|fe<&` zHC$=1S}v7Uc2E1}^VRCP)_Ev8^P9R79V7qURmJvpZ2c=ay2k>QFz)Sv3~|vbhs4oG zBx5DUMYMJ;X%e;a@@Y)}(oyOm7lR1hWuprb(OPH_D!q`gVpU7ak3O&8gDZg4} zDdUwMO?o+lm9n<1Nzzh0(mRMJA1t<}(Mk}^jK9Jw7UQ=#x5yt2>zY-Id%0wy?a|An z@?#M>o7-FP`Wa+9flyvp{?JJgS_SWuK%bE#&N)M)|3hVm1pR9X5_s9=3E%`r*>nb* zK#fjN<^?G-7=|Z(I!&URce-%I{yC0>nI2nvILug(8YSNdHO2OLt*QYbeDTsoLDU_G zE6)L~{lRtj+_BTjCk<4vk6Hf`O8>uJZPEZSm>r7V?l&A{^oNmEC<)VWqyZ?9ekvl6 zxv{u|@tqNFa}5(^b*F+^IgLb6MJ2z`A{K2Mbd{~XS)rM?LjKvTyheCG?5KWs>HJSKOMq+2n-@xBPf zGClpc=@{<0$uv7ggy;Nvw77Y?S)@JWVzWlq&1JnB%YD77&-!>SPI$Ud$?pHBVBZUkJvVk}w-QoNq$Hk|D2M&^~f;`H(-?>h--?_gj4!(yRT zfXgg%yfOootJ-c#+qQW{G!8`o80yR&4rXw5?+Vt9&m^!~sLFO-7#Q7B#~^ zAGe$4OR1w;FQGx-Tp!jPr#k9PZsj~&AF8A)aprDEiZ1>NluSj2gj7G@s(}R0S2$>< zc^@*F4kmROcitXWQ;j}ejfdna3Zx8_F4j69uf+!?Sedk%TyB-8qR0fPWZz6)ANW8q zsVxF*j=n%q8O?9&B=|+I5e%~8Pe^De97sV+3dM@@a54-3z4ukv2b6Mio55nopPHc) z&0p*NnzcW+@FzH!L902;^e3=X`QF|;rQKbu!?;}XE3`-vP^L{`WqVuP!Du())W~MC zUM8}9%1D+_=f_b5nv5-gx~os2)vB`08BK4?CqDVKy&e*ihs-3L*=UiU}UO-?_r~--C&L7_!p%Z9Xzx^<3|(Kkg0zF{*l{hVQZo zz^h1t`RRUttk9{kbv^jl9jY_;(`3Wia2aY)*JtySYOt{a_O1vfTG~X)1@`j~7&~OP z?_>2r?c$}Zl4AF-xfv

    3 zQcFU7v6{EUrh`a)t0QZC*xwr>#l&E?IrsD<6@Q}hbxN~qElk{I%nN#g+|=A>u6ol7 z1~~cqs?QouGmiKvQ5~!t8CVF{g$PyFx^wH~{JEw8=iOF@tHZLo3&6JR4%9D0E}l`w zW)KNeeSQsohQuG5qA76$H zq6h>=2?+^DT9`!kC%{IbaGVcOlH*;tw%%DuF9)x0l>*DQ-j~^R zyfc^RxcEdN^+SxBK9#^Ju*W6ujqxwh99^2#pRNAiz~CQApJzh#>0o`U;fZfsp}QK@ zbhnJZGEd44w3HH9qlNGv2o`QdYKa~kUJdeU^!wk`vir@nQUy63N7>Kzg$V9)bj~?Bpgz6 zzTfaX7}k21!etu-R@iHVtS=te@Y*oyL(Rs2e)MQjm~2xsBfNXr5<&y0EvZn&96S5^$X%#%>wRACd)Jr8s^5R=yrLs#2_2fU!YSrb+PF% zoBHk$n6X$v=fkD|(gi+4$0wFa#nzIjVAGlQlp+lfIDgrFci;eucYlqkbvR6d+=s)$ z&9;USW$m|?42jOn?NuDuo@MfIJB8%BtXWv~9trR~|G{a%W05A%(S{6OcK16XlaA9^ ztNmP7*5lsLh9uBd&)ZXZ+*799tg+zCW5AHV*VNIDyOMDSVfWAk=8!lvs#SM@SVa)%> zz7ZCq)gGI^g$s_{R}N>zJjCtCy~^SU;Gg)p{fZHlK_V-RwP=o(fotKVE9D1zHMN>8 z=UDp=y2>ls{Ju+2q|NshUWiuHfHR9JKG)yYZbQbgL{Kc;M$KmF6dUz$bP3RuA=OKy zu#mw@g%<_x7i-|HyhI@O9kDzG0IdRAn_>pxQh={Cf@0SBhNU}`98IqVrdNazsb&MI zfWY(TA0M#%4PdXYt6W>;c}7&{EmM)Va9802gFZw`y5D!#5kkwznupIb9T8SPggi$#y- zBUJ3v=+`>`AG+Q;EULC^8^-`aN+gs}N{~ioXr!bWIvqM@h8jRgX+Z@^X&6%JMi@d` zRCGPGAQ3|nAANsKy6pLGC z!XrJ9y3`8hi!_*lcfr?i2+|YGUhAHs>|rJT-$ru%O2fIB8>w4w z*To+zz=UfJ6+iKb-?>k*lT}2);}2k5G|QHD%s?utEpIcrGN6}MY^EJb5wY?U4r)8mgUw zi2}l}&0BIih{O8R$sQ?=Nz1(?oP_j*!ED`KP%5q!TI3QttO+#DCW-XOc>Ft4y+<1u$i`Go^!IVDyL(C{6)f|e&DrY8^VC?}J?Bx+GSm5lL+l&Ivgx(v$jYk8^MXB) zhV}WBGt(=|9Mr~f81I35f%@p5CgYk99Z;oX=9A1bv-4b=sl-i@Tl5`{wWTNhzelOZ zpCLwtW*<5Ibi8ZmPy9!0Dx(tr33FV58?uqEaY!vW?YzHvMatsN4G^RYiU`&7=HrY= zh=Fz}N;;D^lOl&%(9Nh*&eYLI%Pi z$RIu9@QG(>A}%9h8wZ{D+R6}?7Wu3YI0HbcFNDfW5ns9O)t~Rh0Y8@r>bj!@%23#xd4&HQ%&*@yv80N+`d~sq&|jK@GGvBRf`86rfc8 zXq;fxCrl!68xEROcWnUmo|73(bUB22Oz8OCOt5i9l7U3HUgAMFFi%NYuteI2F+S|K zY9q^(gn7Y;?bGuGE~9;vl3chrf*`sdbay{( zg*n<@>8V3neFH7aPyMJwnJx30Cd|n(r=7%?yW_KRfH&`{e{=J-sayVCeyQ(Kj~Ds! zHcf?=2*JYQT{<`m`#Z*{YWd1FG5-YC#c;{y!9+oK>tX>OSv8wRc^fKWQ-rkA?=))Q z;Q23atP?cvH2FO$N|_`ZZfdEI(tmg_PGj&9$U#l5sY@y@yyQJ-_oh-#`%QsrjkHuD z>Y7UIh|aV|w)|*h!v|&e5%NQ;Z|z!{X7?2z@>=lS8snKD(^Bf6z#DyFGho#a!{a&^ zhEepNQ?6niPG9p=9waKkuN_r(u&CjVu2sFeG)ANTTuq6LxjuxXQD{hQivR~C; zvDY^bG7y-?RNu#zUk%;h*pwxYv>jsDs3g4`IACM%{U;Ut(zvE*37l)$oMCUuyO2GQgQ}YTGxBV+3B}lf zn=$Gsqij9c#GB^0JbRU;v5|=fDQ?-NFmA=zyU#(XooN_#oBNuR(k_zx6&QQnXDS}A zjhZa_v7>1KEqz#nseWVarEA!qMbLf=trWkn(_Lbh^t9W?PH|r2hrbs1q4PE)Iw#l2I~64T8P&%Txnc7^+MKhDp|g?wG9U*N&*wp@ z3m)0UKx>|;${jQ7EFe_cbb!Wo^|n7qfNB_dq2SG3@(2~TLAS+jWaT}ILbLM+6?HX8 zpN_5)xRplaTHE*V#Z>i$q|!W?aO*cq9TaI$jCGo(6d;pI5LxK1A~s%{^45sRx6}U! zODM=Gq)TlKlPNd5iZ3{t=;+)NVI>NO zJ6V(>%M#q6rUu06I1Dn&+y;Z97r)ySK#}Pyjv5J*b%BQ?E?C}W#B~mdV%5zD1tYP) zZ|41SAL#oW8gSnMCM^d5K`sD=X~;8?ht;PF9QD-gngJY9oHAQa36J8_7kkQTi3y_| zRbcBk!P?aiUfL-w*>P{_Eg_NQdZmQb0f$pey75ftd!nZ#-{~62G zOV$llI#)LlBC6nm_$T)1~+nJU%P~*Oo$I)i#arX+L>*ayt z5@<$mq7qx$Q%Y0%bZPe`W=>NKkL}t&9N8Znif8-paR14Gy(}B@lHk8g_y2rI71Fg) z^=_sx;QZ;}PsZktrOlQUdz)GB)+eP>P~uqCu8nz{D$*7h%O4K_4+T{7_~WqgvY}Va zx?sYoNi!V)g1w~c-X{Ps`jStM_k|x;h`h3JIUJ(KR5LcsJ9*n|hWNj)6D5{_QN7qjd@|R&Fcx`ahWL z@!umqHX9@Ey@K@@H{%>0an-LIpvG8apS4r#tVZc!pnrhNaaHcH`?_!TKv(c6d8 znyPz)Nwhb}9O9t?KPob>MsjzLR$+q83i)n(biNL*~ae(*;&!ml&3O^`km@wkfxee*{>9B47{cegtc=V>r2Z8vytFLNT+ zt_ZJ63c#FEAV|W{BV+qS+}lSfFkx}9Lr)Kdj!UlNO;j$p4T{CkndlrZMVC)|D*mKS zM;*)**U+2!r>Y?wA>qdQh=zuVNsQa*+JRC2dCTHz*+_kH5*3@H?v1u*hZa7D_Z6%N zAw}_GudcG$zB2KK1&4wn<9wQ-I>laaRh?$Nz@b);oS)$=5&=PTIc)l=3A4uM(llOG zFTN;})EiU4Cg#|BHY9rTJwziKey{Sxxj&!idi?TZ2T(onIun_fi~Yv%byO}D3wq1F z9H^V~ZjK*33Qs&PtaZXACeeKoK(QGPBV4g14uxf5H`n92xN4NwNy-C-Ou_3jPgKnj zm>wR}$&H**;v`!7Uj_S7EnwQH7sMhR$5!zi=%uUhRF_kxx&`AWI*VG&Evo&6T+Ham zA)}_;{XrVjmu3&plEsLq=kOZqr6Q8J1i?X#XlOJu_M(>npjGNH$y0*I0-Ds;u*4ax zsJ9)j-}Xc<@$;wbrf-WM~2kaVp3irhB1q7QI zs!f4`c)s*diW56ani5e`!RgDfir!5mqBxQ<5SkTeOkf zkcht9X~#U91gi8TCl8+sz%#rc{~ zW|!6B6^kF%!Z2Szzy7|s$pn}1>7uLLkd|c@>=n%`-tfYo!8zmJ9JyAieKpO6BN4n5 zG_2~y3VZ6+;jCY80q|@+i`OatK!Xi!a)+e0C-H-6`48V$iibh$4h+VDxAhdcjdsnf zoa$?oX;f_-4Sm8TMJm}`RG#dME?7!D!`vBwx2rkZ5L+X65Mf`p5~=R-&qesZ|1@*k zkyuVdwaS`g({>ZNN;l5H?4ijujXn9CQHwp1Pf5QYXQ{U}JRq3ch3q@Uk86VBqN3KF zGsPf}e#hkh{^c*+HD=wHX{Qk%dAQzwgYbRzj(EgTEio`Immw1V1gJZS%%U1?5q&R9 z_iXwj_u}g{g#l@uGK#bku{l*PcjKX%9mBuIQ8yHvMp%Vv)k4<}w0=vasyaLQ<&BId z>X%ci4BE%|eziE|Gl*s5%_f&i_7D)svfLm149`Q}$uZ|JEyDR8wAOICmOZz+8UMaw zWbNT98`UfBpXow#MkY?}pM$%f5_jA`MD_`HBXi1WJ<2?E9@V@6w{_)wb>O9W9lCjX z?$x{SH4V>Y(>5}?K9Ch#Ae6P!n0xSeY3#anD+~7inT`794Xkc5=CE-GquRChdwRb; z)8B9GH5nys?|@OSbm8x?yH`7o*4cp(c=J2}u{C-FwEBlp8i~UVnvpW7Gf+oEUA(mj zYGXJXJ2TM_qUd8}92MK7H5L5F$pdWk^QB`8%5$g|r4z$`nIe?+vKIi^ z8s)_ISjQ9qMlnIvymta|dXS0eno7ipZE ziF&LaZ{RW}uN>_Gxc9c8#Z=9rP@*aLRtFhNlBfYNhj zaI#I*J?TASDzo}qev~4I8p7Q4=QZ=EHhhG$O395st0Rh*)T6YMO|37uW8e2ApSh#2 zUGFFUOYTfU;ED9AN{`5Gv&@ayw8Ut=PGVqHEs5R{A5E58-X~&4-c22I0N@#IftmHT z)=f3$br;ZCE^dFfA8bLG{uHtKN-fuS6`r^rWb&|^Yxa8_r>pM#)0^KSvmzr)+tm9Z z$@T?)t!{)03SnK5LbHObiZy|^87vZ;X-J+$KE!WsOXbi&+?y$AAnI+dnsggI*Od3i zK2)CUC7g^YHLWLzIz#ol%;;nhDALVW?qD;%D`Q_4b#3H?jM?acf!Zvm+*Z=;ychMj zD_2+WWe{kfh7D@k9VWcVpVpdrYsgl>3~>VGn1so`u;(^JQ1*UMFgACr9&WRJWNv_P zjC;2V8!bH=8g<;Svpg-bFxQ7DxUiI=jR{?G3P?QAG<%yK%gf{GnQ2%_Td>*CZx{J2n&@j^>@OU8|;IoQ~bY3F*D zmaw)AziFBD^dFYE8C=&U*?iR8qyWx8($ON^{9Af0329-qwwi4N#>fgL^8qA*nEJFm z4)^#nWdklsE~U>u<^FObYIO`tc1wmI50nb*n&=zU3DA>eR;NSl=^|{jS6BC}a@QlB zi{SGDrM`g*IE}_e=Wj;i!h>rvZzRbkwjY+RLBxbo^)u9y?qid!j0#D}q zb%cj3GgT2IGxz-()T#DT7x^{)g9OA}``X zAAEn;^ja+BndO&FfOBxvx+`_|gj1~)tfoSn$PJ~J8~C8M&!1e!<838t)LqbNK%Og` z?1D-aSLvw~T0<0Dbk&9rXB(e^cHd|ta92@uF$P*@SE)~OnLKp*C$uc{y7z=CyT@Yd z>VTqeg`srx#yCF4hgO?x=Y;C&Qg>ICSZ>L^-Hu!OZ2wGLT!=bSa$~3qX*%1Imr^V- zFg}N+QtIPX2oVv6i!R`^o6*#cjey^|ac_8k*dPrx-YAiX9u%WBb zXTxIwzLm)ebueU)07xi6NuG)G5JSz~}@Y2e`B$D}a z@djQ;$1ZBEWAdI>_qwHX75nniE==?^G>8{_lc2&4D!w*bwOyexvNKOONW*0WwCtP@ zp6EI^Ihnk#o<;44=Y!p#ct-Rhjdbp zH=oRZ?sbclU(J^(XqtoMrbS2cfIa+l30xy~3vjOT$CG7_#9w=y)eG&Oe~q*>;mnuq zE@P#va90qjG8&6=7D;NPMY)r>?Z0aFsZmc}Zi=B#4;`-2=5DLyc5*msc3&Jz!hKd# zXZAx0wY>qHKS28e*p7eV_CG=MpDiOn>yuf}#%07VsHW=l#-3#t#(Y|H``9obVAW^r z2hrEb9>khAIhfxmtyT#V`W$6P09tR3xxdD>)~NmA_33sfVFSAA7eiUgbP`n8SHsgrOv;4U15}Wk5Ew(CwrcoG@=#Sy%7bv#TP$w5l`lnEIi-E8P)X zG0;ULLx9)*EY8BvSwflISt9WNj#i>-mLI|(2?_-JIIEwcM)KVvK|tE8P+}tyD)+Xk z4ZW*$9bT^X66L`#N zJ04m@z}Aga7XJFt)C6I7{G~LobxN>H^+up$B7@N*zYeZy<3wME{i`Up?=RJE{QIp6 zjOZuUoq>6SV|3%s=9T3A-|(i2^ZJ8&eFIn=kmkzOul9ZWsiN!*!9DMc=rA z{UoymS|?HIw36_AJxE>FuB*uHmXP6f*E&+8l7)LDh&kpc3O4t8aJ2f3O0-bX+FUD@ zSs8&qq9$%;W<3Hhx|gIBMLPBryZLZ?rE7A~Y) zKOhNTvlD2LIJS*)m~<`-qj@77W{~lz1|)dT_4{40-Tp0*LBeW-CAY}XS(T|xAqQo4 zg_DZ)ae8YrI6+XXWr*B(x_+~v35_-lb$U!RzUCk$_VHefwDDqG>I~P!71YLiD-AvS z!x(AO8omkD|6({&Z@@8_qRjJFd_VphlEJcXBAnjNDQdL`&)gUiLSr@}Q(xrR5>yD7 zyrMUBt$yO&+Qi@ZA%pW|+&4R0IE&I~=tafBs7Mq)E;y2`eSY`7dFS0kbDmB@;R)mT z?%2aeWw1C(!17%WQoeOxR~34Ln1*+la2RaV-`xQ^ti zq*rc;%|eWb|J%;KCqa#{R|I|Vgv~t=A0Oz@cawQiTP)WG1EnINshmy6pSO6zrSNIe zuT_!c>MYU^gg)~9`DO;T#LPYWF-AL!ncTm8qCLW1U%lxKt(gr!`p`ci&-OZkp?upg z_me_J=GV)JXeZH+PA!(C*5XvZzxSxCU!6~6ndyLo-j zq5a#DHpRAZ_0m+3NZHMacY2)UTymO}+fyjmreI3def@vQt$(swPg0=n@~x3qu_`0$ zKRQ`K6F1wfL*b)RZ?(IV%n&1RPfJjYnmV;w96z@6k-oCjM55&GA`!iCD9f(T$mm2# ztpjCVm3CGxRvr_ep9jCU$EF>ox*h+L9IQNW9gF$q~4|OzSq&v^GCY_ zfZEcyZ6sU&uR;GO7*NClaPK}M^22_ok<=2t2Pf>79GC{;GmM#)|!Gwa$hdq(%!+Kb%8~O`8I_vwBS69EA2g{AGmC-Fc{n;$UZbgbz_BnIzJCPPdnFsSo~T+_d{S+ z;!rAAt8J>-vxwAGvDaCQcGkP^mIRX0^%A%JikfNvnH(5AQQ~@nspj_pA7v972$Id` zqV>rD!%A16^m6-=6=XfH7n^J=|GKm-bg9^{wM*=>GeBX0KQRO#S!P4|k%SIebuThZ zA3Qxw@Dfw7#Js>Ef1s)_SyXo{6KW~9?SH8~s11=lxBp zhv>fE^!^_Lh>0-I_-*fu6mZnV?U$yvFOe*Sb6S!4PZm$X)i+%mKHPck*Uv3li?@IK zwVkhePI-6ipFqYOPdlo1sG$XEV5%_-2$9MzRRRB(Tg)z5N*R~TW&LIY2y9@=~-ua4iFwlM&*9Y__V)P zQ=IgmABYzSfd9!tFiH-Bc^s4oY*np)S}&s)@oEi1-4h?W?}N(ml%JflsvcVx&ZwMPDq^h+tk1%+wI= zrM-1J*7onT$a4n(v+Bo$?8%9I9`a@v;aC*(Aw`Nd7{sk+07ACUW;0HYsn$7;kEC~F zO6F@?VP%B#UQQ42my0dGrt$G!Jw|_aggJTUGJbXHCS@QK1FRbWZjDl`V2AqR)Dm02 z6aed_bU!1o@C#MFOs0|4YaMC(4@Z#n{&XhLj1}!7Bin%Ylw^ z@jhMk6>{sndD1?~u~6l>;#lr|f6afryZmsoV^8s9HthPe$ev;h%oLESDHoIK+Ik=i z!t$+C1_kbECk#~wWd3M0UiB*mFnsfFp4-Knjyx&`!-H>$$K}%ZHXhtwaxz|<`uroB z@}Fo&E|Al0ZY(NxYh*j(_fENCd4CzowA$%pKef>g2V{jck;iialp{S#PBKm^5V=~uJ2{UvWEvJC0=`qr_TrMPdtm{-vd})2zw#CY@ z7*Ya+0aS#8b<2MEn46}nJRNhL*ZG-lh{8njndW)P{z(&yro`t3&r}}9;5^k*M0a{a z40$vCiuXiu4>L`-X0gXOn{>z8nT8i5bF?g&(j%$ZHZ89IrJ1h*Z0R+XH?h>#i-7TPeS(YBc?_wW5in2I>C-OZqnBfLNc1A?$QTn&C?BlWD z3AAQXWuB;W+J@EV#Q83&f9DbyFZQGtWpDwACSXph1ls_N`y+h>{Urn&)vz^Mh|Zgp zWrv~tzVSGqRp7!?(PjucE#NY3Vt_Na84u;kaYG1)VnARtOZUoTV_SO>#wd|Sgd0tf zRE5QO8z*9Dm;55snPctT%4m8be8A_kt!6T%iBLa~T6dbiO)Bm3wnk7-DN>MDQtnvk z+V#yzHxcC4&NcfFb3L)^+C!$r@a8d>RTBFwFGlW@XiMwmidnb#C`0++Hmw3oGuqdF zp;wd3lV>8?bUL|#))kcc0wti5WQ@Qp5_$++=1+xTf(_f)6QJ`#Xck$KGW7WPMfWpo ziO*!gMj~w-w^`SlvR0$HP9e0!t4T?GNVq!ZEtEd1{TQY`uI4FXs$sP$U=&mW{SXQJ z7&*g&Hjx$*t6GUH^Dv(}$ zkbQR>fhiYol1I$49Yr}fv|7_!RThoguUaC)2N_e`Ou*?6DDAGmcD3$PyHk)&yJ8AwmBdQE=!rXQWP2%F z34WLvGL=!i9H^HVcIcMzD5Mw?o7<@GFZ4`wL0%Tr^SBUu{K$SY=6Pr)Q$EtbInUYO zmm#j@{EWsQ-u%wW$1v&C^W*4K6YA!hoQ#njW9o>lkf^P@m2C|u*2vbxHoaq89i-&2 zj?i(kivgk`LgF>!)`PI#$dZV&N6*tq;8u*Tw)V4n)2+wV?svuyrN>$mS}huV=qEId zuPPt93O>TkDG6-Z_>GBB-%)yhZZF^AU6#O#JsTR67hWtvrTa$j zUHcH90E>BnL-i-6mDM3X6&U+OS|AVjFl$7P5>Iz^-Xb95U1IpQQVdn(K(+{jz?6l2 zQrWmT^iBs`3Mz8b*LO*f+~LODQOm{melGZZ$;(@rgcYOaG26s<z(a^pd63nbmzi5w&?VggH zxy&iVxUaMFhSq$eU^Vuo%*|CEc+dt7+fPCFm~Mr8bS?I5xeN|TPG9Ja?CBY5dTM(1 zod?)POGuh->q{P_7NLHu_t}ozzQ8tYXZDw5M#A+2*K_%PZvGT6CrZEcgOo5x(< zhm^C4=|d&TxRxX53*>5K_if>x>7a6+keVXlYYDi9<&3k_S2S^cKiB)xixYZ)?9%7J zu;Z6uMt}5o>(oa+K}D@efk!`^9gA>3x>WV_&l znqgsIZp5T?S3D7tjgh!D7OZj4L_HPz=IbMxZ7LI$1rLL3sl~xT7#BYkRkJdD;qr+| z6(V6a6RRX>Y3R9)&ajpaeA3}<0Ogn42|Q@j7R|;-7rSD6@VGO0tJ33Q?D5!`3+I3g zP=5W(pD0WGpd%G%J>t+0gF3Wu&SK zPf*FVDkMRcYji&9dfT^=kU_oAKyTV4fZh;-dfeF|(u1!i^STAgyT3Hkr0b$E8%h~J zc+fhNqIw0*$BTo3X%e4wW@{3lmLxxWJioNnXMfy8&KR1&3>pR8rzBpLj;>C;AJ?gY zlz@7KVjM`t^gN!Ba=z+=JHPzXnJ+%_U5@&W1pELHyYqiBmH0dtdXObk3|rMFl+{Js zLdevO9Gn|sf{hjuhJqZRFy-5X;F-W4WH4JS(A$su)MkB$u^)k}2NQGd{-Ab(gIFq( z-)1mgI7=3jQKvM{*=c?SiN3XXP=evA)5Zk3Ic2j~g}1>UH-B2njt8Zdf#1fs6xy@K z$u&Kw#?+5S>m|FuYcd<&_b$XS9~bR18N&n>&rsMU%{CBw z$ZBHt8neEqTfv}1XO~yZ2{YJGLPSh?{^CeFnuv>meIRWEae8Huf2*s`Ev)KIO8zvi z7krzoT6*)ls#TMMd^kq+Ab$*fVP(2g=h173&~+zZ*4df9E-W#~=3T38q~RCLlh`nF zxwyARy0vbD_^VSXgombs+DJCq3Q8HCSKNeK=?Gq%Oo~3vyFJ17_ z%5zDGaf~Oi97-jmsz$&1Z*mLO)LR(}5@kfsS2%e7yPYsBU4N~Szcnu z2y4~zRtr>dcpP_6cTD=pvmc^MciK4;?);lM#ClcX(f%K3MI!Q-3%(rMe=g|Ja`^9M z^AAqFEIail`^riFJ>frTBBlTK#hcZ>b`toq2_bBBUHb(-P~{A7?cY34c@dUAsmBMl z)ru<)r!voZ`1rj2y4JPLTE1{I0ncdx!mvL}l;v$o~X0ET@j~#-JU!F zTJHIS8n^=yuK@6)|8Ul~yGm>rGcX$J>b$(X3DffL5B~`p82y{IqKCMYqnzx*%U!yi zShSplg@yC-@*0~3B_!4liq|@kXaV6-+oAxksuZk+r=NrG+4$j(zsCgk&Vio_^Xj1- zBXx`%Tb?o!&u$?yZ8^}u^y2N=3#WrPyK%u(b@s#piZepv$M9V4n98-eV9(X7zP_(` zy>>i(YRQs-n8=?X2a%J!85?k!78Z+D*VHusiOS40H#g^RD3!tfJdMaNlfAQh8atNV z=-)jTSes;UqiAio zwQcVhk>qMzJir;`v=P%QJ94n=peqxGgFYg!8F#j5fDO~hn%=(lDD=pqe*FL^e=dIC z#-UZ5&Mw4R;L6IQe$Ujy>6iohE2%_ipJ?zjC7(#l3NvF(-zkN&Is#hfrYl5g=!u-L zUh)zUYF-mR6v%T13!iBH6~?K1Z#TC|ip0pH*4XuAceXCMhxT z@eRA$$)Ta4Bz|+J6O-#qq3?@d__eQ#nf)G6tKmRJnjc&!?K{KU5+dM+uxu3Z#7ZvH|lS&yjrEwU{|7n38nLMco5 z{4_7|TR@Hw6=h*F9lWYSM~Mt;2unXScURO?v(4t-8!4*|ihoeb?f03ZEjQhWE)sJW zO>%9-4y0G_&H5e0>`v~VFjU!Crcc2rtbdWSS-135xya3Ls!%((k+(AaOYT~gK;Cb* zeYy2+9%C2IqZ+`n%y0p${y(fVXwY#iZCut&d=)rhwwK$jN0cJeBLFZR=pO zzMa!|)37m@IOry+^R(OWL!Hi&Nj?F-=7sPJwnu)l-%Ls=mQ^^1gcz8b%}PN2eB6d5 zmM}HCY30b=b`JMKD&IX(`J!QM&q#SSUBwz;gLEoN*=-h8>0uq+d>k^i2G?LV zwFN&MC@2-C+m0eP)rB>#_79?ZPTdMNo$7lEOL>g!2{w`yu zN{16iFnjs0Aj;U#6rlY5?Dwrw8vL9j+;?@K$eAsH8kvhc2&EN``_sLljPDQ`elTJ| zhfZ}X0SR?T6+(n4XRFxs9F70feoW0KtE+~;S2h%(pKrr!m(ZMT5Mg1Oo)ZSIWTGB} z3vy9B4ZiYwONB9kubDoFH#udR)f1&|D!uB%muUm0C-B}tIftuB2t1!?Pc}$LNLO{0 zs6RnXp$|5MX%^cdNhwr?6;a%atP=m&LIajv-1oCc$(d_Rq_VX{_0esxF#>Kh=39j( ziZq`T_7!T6qMlW$#mwpE(f5YC9rPF@aEollbmuT`uP6pSBD#iEo^{$L2csq-+}0^_ zD0#r6Q?Gx#Ec!}6D+vXg_1j9+N@rQ53b_$%FENw}Gz{mG9eESsjow#aw- zSp&CHISa3Z7Xc$|)03qII=n|X|G_wx=11a`9)or4x0tjCJtfw;fY=GLlm<&&cuAVt z?EkG&`BNF@@XSB-;_#dM&E_?e_GGtmWnV@eh8r$hxSvtiSpAl3mJK90XF-%sd8>a9 zHV>z((KkY;dB{@)#!?%clW$%*5Y$-hA2xQ$+c|`6tDGA8RX-NGM-?HwH)_zEL#;9ZGPoqolRnU#+ZBd+Z0OnD~qtS~cP z(h!4YqaXFWqBBE7*^H-Z>uDE3G6dn>KiwC%c2^I+f8IiStX{f9Gz=WrIqx>cCgUr8q&3N%- zX28wTcrUsB0+uTr_Zorwpz-kZ|JtgnTH^nJs3Ma8H1_As%R5~4P**xPG_(D$Dd}S0SzyIX{LAb(i}x%}q?y zHmsweN-k;nhF0CqxycNJv^MI9Oir#Rja6JAZg_M?2!;&2D5xo2SpT~4$L0f|4iCi# zw|8F!uAs2g+j;v-sm>V^p1lp6O~f*Em+&rQ4=7Ub;FJe8O3{f#*o&Sq02gWOUP0ZX zWvjkHroh9+EJUz&D4+Yx=Mlkx5RKwFso#c?Dm^xij)IxRiAm|c>w z#REJtQ>N~!r>00xD#gB+XOVLJ7TjEZev?k}`x`IhY*`D_tSBoio8q(=?U*;4-pMu& ztu{fOE1x}c5sKF`G}#1QlUw_`&^YUBfWrDpJonovB>AtAO6cn90)@mCLd63VG7|>i)4| zCJbWyh!J@NGtZmVMXmf^lPv|neIjPjtM{Nb+YV%Zfr_gG>N78u_)M8sc=(&M9R1BDc)BwzpvFY0i0_-luWM z1roR#OBvjsBXMu6{Ghf6!)^!{Hr=Fi|8i(~Dj%%~xXW&}l=*iuxqwNfP(2c5pp3?u zhk<@5aJ6rg_e|-%G*6?{ibK|HcM50*MDq$90+E^K@}wM*;S1iD-^cAs{|yr;L6V&FGt?dVa?A(nHp!biq7xVQ*U?UFHRn5?+>pcJ$s8(nVhbGvBgtsVw(k9r!R+&eS9Yb#-zW`s3K`uA=5 zJnOFlhlS}TzAPQ9LT5?t2PQN-+<{?5=O0tJbQ4Ac%f~pj|Co(bd|Zs1vE}gT)#-cq zIu!93GPum|#!AoFiJNLL7%9JDr|z;X2bC8s$mnDILn2uyrF}zkISE6OcNFZq`Q$ znC@lMEw_`N5|f70Zln$)NjBC2p7`zt$UJ&-TgC(XC<_wu{n$eqt)sm72#B3O+E zkf7&5z=Uo!-gPsOMc}ti9t@iSc1lP(Q!Af!;)%@mu0_HVC@i}#x;jWS@R&ALIHd=3 zkM(uh9nQT|K{c+B_~7s<)y1EEx}FvG8HZY-Rfa>DZqwMu9z2fa@X++gJU)6xrn;w7 zIkUO1IIcHk)QHT7G`aI42zoueYL7(HV55U*cXAcmJJov*ay0eBWva|m*OyFT&&VXq&9 zxrbjO>4`T1%cRzPx&c%ddVkkqd%-2&bm)~1Y4O@`=Y*XFdr?3^A5UHqo&hz2vd5(0&tGiG(Y5FgR-<>!d1;Tk1 zyZOGeqh0zCGs_h<;qafiTOxc-FYlSTjK!`^j?&IwugYAa*i90jRM~=XjZT~`cw7Ei z1-T+%r=BHg{~&Z!N1cX~s`h9^LTiQ~B1ku4s88CsjYczk7U9iYu@J zkEtRU&(~`crw2_W&#tN4TtiKtol~!s&UAfe5L?|=+WKHdm(KoVV_RFeJTE_CT}9B4 z{S^;x2pc{q86|)_FgFi4NusalE1MPHKdItIn+9$Qh*=}STPeunl57ezzz1a<=? zajxfb@5)Q&&yGWnIAUdIXSwPJay39_-}elKO(~}vcN^`|lBj7FN8x9AdjXr!cZTX+wyu`Y2kF@tAM#_2PUJEywiy-MEX6G3TS2a8JL((%+WJ$SjOU zCaE+%y>I>KF^0zg5dsLYI(t{TF11aM^oCUss}pdR(-3RcuMv(l%a!tSO)c@yESY5a zsqw23lP#(VCUhpMB1*uKg@Z|c62d(-RKMDEv7lyr!d_5T`vjpx0K5+lRn7$s#gD&Ci80+tNo+J5UME|N}xu39Mg$eWY6wuyN0UYmP z0&aR*Xj^iJ_HZ(S8U6LrzyX<5z#E5C#Je_n%Nu=1o@eeXjU?$O<%XvRVio!5A&6a7 zhn(~^cuXyq##BRa8POhSz2-}5>fzfeeun*IXV&JY{{X9Zl7OU|mYk3x- z3I4KrKb5Q1Efs_!6ze|Ks;=+iYpKwy@u zEC1EzwTD2Pe|_IjmyEpVF zL?4WZYm%vfo+K-Etp$tpi7=6soW|S9=~vj!9)*Njy##o%W}*u@Dr_@hxRzgmTqXmr zZ#FP@!`tc=BB`kpEZTaC@V)S_r7MZRUOIEJeYpQ~dA5B)oz|0iV(5~Lx&`654z)^U zQy8tc11~mJuqPO#0si}UJP}x~zTsiGv-5e%lt$FaUSx2(oli3&Xt4|K$B(k5u z)$jbU^k>ZvvVQ>9f-GWhh0<`S^yoE>!7Yheb3GcHx8ELIM>-&H%&?&=#LzG2e|(9v z!_wPYjjHFlTY?MwnGTh_c#r8Hd=uFO|<2$wu|bBgB&bLE)gmE|$U@BhU_9 z6b=c%3FjN8ABB|(DUvb%@&xsgD%MX$tQUmMb5N2L@RRLG& z^lEs{kbgk>09-@k%*;iNnuR~r=la%nqa;5WcHeL|x;-69bE7gfg7)!P-lo~3o6=u9 zlZT5|@TUE$wA-#L?@2ha+l~a5bkLUGR2R4Lom%qG)ipeSS##-Q8Z7+V_<{G~tagIm z$IK3d%!=OZihOJC8>bglZ#M(`esCH-{n!@(r6e8ak0FZ6@TH1rtQTDwlc{bGx%_Y3 zeh(haKAMwTLZrAnd2Lvq}lct%r?~(3*it9JgjO%Vo?U=0?rHV3g z#49q6CHq9*vBMA-loAvA$@YLGN9EgR##*Dm2OYvM^0~f)4c)U# z|6_&D%2n zZU&mc3Lm_X(ELoTusKuH?i?3f!@X4x)I(B&+@ z^^};BFE~;(23z`4UO8s=9RD_*r%%kYwDYrYn12a}ivemW4sC`GL1!O~ zOuZf^PnqgeCT+plLL?t4Z)TA7kdBEn3TkAQ?cTGXF!`p;mTjx>-_{4H$wIs~{!H!B zOC!?c%lDUrd#i|`+H4ou(T!I*;s~JJ1_zTSu&K_Q+P~7?e5vPR);KQ_C%6ce<@}X- zT+{H0larf26+vzAi>pZHuDZ@m`9KqsX;VfqXBL<NVm5E$?4`wl7Nd5DzD>1od!7g;x_dLJ zIw9RBIY-gj+-~q@>s!h4Porw#rUqpX>7-c4r+YG^hw9t&=&yOsRgr>-1HtNlPH6ZR zuc2d9$x_86$=jN6-KHUgj%aJNW}|=+Qq34Pa?)w^L7g|wUO*!n(=%7>tT!BI6CjCm zm$nkVDc!-m`JnX$Q_10-6@@MQSi=-?K|T^YeQes#V%(XEe}M9LZ$>%7(lP!exvnHJ zCGX&{j)?0w+~*6GXhxG<)~X3O+1f0I-WkwEGCGb@-+KmzdMGEq`fJufx_;uo>H=ul zLB#ck?XdWQL&l30?d5w;X+^?Gm-#5+<5A4$FH~elk(#_-C5UNr6}h33p2i5#nm50E zHswYIXyNhABB_B}lXqhVY)#nEer!L~^YZy*A!!togws6xE zE5Q9-M>%54ct2^(uZkfZFj(ppBapiAKl4zB^IMX&f&Vp04d`c6KdNeE`X ze>a#)JfLG7r=9})USLU7>=u7Li{2OX;{`Y#2GRqTuY(H=$0E(jtWF>-IKS<}bXA1t zo)P6pQ`B)&S*rHVM8;o2ll$WR;E#WgVYS&3Z6}eWPG3PmN2+w%3LjNKXV>hdL%2$# zxu(MR-PTn|ixsA5tCVD9ax@bA*jUi&-N-`C=OSD#@K(X=hW>PyXOtGjn`3me0|iZq z`$e+Yi)GyX=u=J}h186XqF3M-{e-*2z0CM7v;Z3_VFY!MC0u`!1^P&7Z2pk?0mB2e zO3q)g{MD3ox_g7fdA(cPFwi7hz@C#uxgye3WlE8$^sO_~4ZZ6>sz}cme}$g=7pK6o zpXJ<_{L|(QzG%CO)I~aUNeY(PzN44YI+8z)GLc31!aS_Ben2*qyZxeB&Bd#gNSWFl zqO1Q_a(YlgukX#Rd0YO{oNqi-7A2^l+II(p@n0!DqMHB31B#=l?&dqa0!deR5O)Z& z1P6yGG?5OYzDN=yE=n;(K!Yg`(Z101%H=<2or$upIrleEb{K?qEC&|;#!mIP#!R5{ z((m8@g;Re?#NUtow`X((cTWCrfdBYz!9VZfoC$!i{Kvx!{`nug_lMNX1Mu%Z`1FtG zVF19@e*h*W0EZy4%N*cM6qpBimzg{((z0yi4a=oh54r$H30z9=majfTXitqaRa($m zV>t@TC4HSJrH<;_&uSE_t2cPN*Gms?ng`aIiK*C%4WpfE`RYP&B)*O zhwpvJ6%bpCLQS?TV=#eCXeufyqd7{iUrki;O*%A4K@c3q zvA3M7(5mwC`IcqS +J8C!Aj)&53f8Y7y|-T&4P0T6DAWzj)YsdR*n_eCW58>7N8 zQ1V=~#>|V`yaE&nCcCBlA=$kXk5^ZwrZ9c6>0|D#A@&J=GJK#8e9YmEJ$<_{vwJCn z6K~!Jp-GMP@=FR|o%V0%JXW@SN=P^B(g3#Mw|$HJaRpIdNeUbjXZOSui5Mc4xg)XQL zYg)u2y#0dfrF^0`LdiF-+n-J6mXul4*N3IC^lh!cX*tj?&H9WxZjCOM_ypv>$%V8k z6Yb~{a_(K3rMgq&D6qDW6gW_;v%P~^5r}X{`DzlbZ&00tgNh^ogHw!lDo~$&9!w1Ld2U74=ed@zJIZs zt9Q~$Wk22(Ao73^8H6)PuWBH67V6RqKWu&`Z`#sWD_BK^(D<^VHzH#K?zw!IL`Zu? z%ANN#Rfm6O<{*^5_v-QoSaH{SkVB;g`WCnR`sE6(65n^P%iHqqWxB0eezyF{1zBUW(I7)31?zZMUR7sC}l6+Z!jE8}QS=5s+ zCc~%N;nZ0)2rC>n$V`xh#+VUCTC7q;2DFp*D;Pv*Do?RVF;k1Jwi^t5m%0e=6?Zl0pFc4L|vmcz;qqz?}CL$LQzC{%T|kf`XI?s7XGCkO@roh(7M?CPBX z?JNicx$&U~)N2McYAvl_JBwqeOvYbpYiVtMps77<0Yx=YDy10c083k5QB!HZcErk; zPTqy(GInG}=RzD^-_`C<-VM)qdH{jPMWwC!9$uh>bkNx*TKZ_=C?BdRoNkF#`9hug zTI<-&y40v$pJ8a21CETM%w~nQT>_f!>m)NetkXrs-1^;^RasV67MEV_=w`)bNOK@x zB+ef|P|8&!3XvsUAwE7nLBWyTiYt)jXAdGlj7GKo%r#EykEV=- z$lpucw@H}t$#;=_%w!_MFhFa=@Q>y6%G(H1PA=uyoxRKHw$DwU+vd^_YNJ4pc-fWkz8|eO>{87b2jf?g@^_Ay zt>~tL^A%~D#l0DCsAlG3TJ_uGCJ*1jP96>fwLk(nfnv-&%yY`%>wT%CqobiwP6TOw ze<7KH*81Z&_;20Xx}T`I`S6KaYWhk>V}m}V+mad%^NT+-O=6zBYZ()THQCD!*LNPz zC+kFcHS|Aq6WMpZrRBL1g1+sl-L!2yl%L(G)<@KizXA9)m2pcYdl^<=Ws0Y@>6K=W zrmX0w(p0MmN?x^jE19J7F>z87^1~Iiwe|9;ZF}@TYIwx?63gB+1kS_8&PP6@)vZ+c z5-UY=gwJj}A$9MIP`T9=HMv5(j@Qrg?oUoO>+7R#;*iRHv3w;9P4eG=Hs_iV6}+?2cndB5}8(vG?z) zw6_6O3-J;Nmqc{d9b!oIT=xmt^-gj<-L}R8tm|wR-GV#LgNU|2qz|}MpWIo{Lv#vl zwO^t+oFyhYJw9KbS})a+?6%wO>$vJR-#y2O9_gvo9kWD?IMVVa4V7`ZF5kWXKX*68 zA>9+{zS^C5wqmVEo>YB1Hm_5?c4S#S{And;6)5>#RHS>f-CK1RJ@faL24Rd4B`Ijj za$09mr&5Ibe7CXU%jJo1e0)>kYV9(R6e(j0luHD|w(LRnW=Rf(lB5wV3lLHrNYfGj?TAx|16gl>M!T|*zl z=j9X*E3>=L>ycHmxL?1`>36plGf{IjvHc$w?6*K#s-do@GixH7Pdbf7&z#Lrb0O6( z^vMpI4oEd^`>`gSXS4xgm?tTU|Mel7WF&)#>;PQv&19&IYSLr#Cz39UCf zc^>i}6%B1QB{^@W`X;@hdw;iv?POcQ0P&uabFBtHp!%T098z&3%h| zCv6scQqHGy8~858PI)jb@%ae zkm;t@R)4;{&z;}R7@%N>3jck=CI;IKuQ@1nn(683nVg*b{{6cH-*nURgHt>gs{mnE|k|X=&9QF0}?d;IY zf#)7z-iTY6no4hBzgHJV{|kHCM1rr+&CS*L{)J-T<_K^jgXZE8)n5TN>LO~40o((s zb6{|=t%CroUfp`O(1dd-4f_33$Sru2XBFzj*AQd%P)N>(YMytDp5r zqiA-=2FCiNcafSzyHs`Vd4HxKl&U(?)ouawv#+SASXfwi=RywgvfW$NwJvvl-$CW_ zO`W>l81yf|!C#^#ar1$m3$J5?6JB!Tz5ZnX)&~>KfM#Q33kV1p{Gwasc3>-3LkM}Y z0Uw~ULZi_Dg#aMQ3lIPR!41FOn6ztELWp|9dd(Rj3XzRvz(Oi3y_pI zhUk7XaP9l}T=;{*E~tFv*Z>G+X#Vmvn!&uzSQpyuSUlMgBjYtbhjSVb8sK^~P{3 z(P{iG2Bc8qEQ-g}#QB=Cz zAxK_>5`O*o|NI_!#_I;&KbFP+O{loy!S_M&gg@rU9|6*uA2kP8iF&%C-JPeHLPps~ zXxSY8`K*N)^eF8}^kn#?PBR=c?(}Pac?@ee=;>%?X|rLq7pv=h*n0%h00VhLHUC;d zzqi6Rr1BCsNf}xPS6YUeOlPb6GsDNwFO);7qI@KC0?X!WPYB zh#uF2uy;rxsMU!3dLnDv^6A9EV1(zTUBWhgNvWW9M_6?oJ%g1f@uvrS1 zSgb_UY8@z>lD~91tll|PX=eX?!_wQ! zkg9tw0!!;YohEg*>BrVSNIpJ)r)@=vm9V}EaY^s)l4}(*O==htU>~uj`c3>yHN!zZ%U5_ejKcgUX|PJ>aIFF zp;!xie{ppzZ$1v}xV|X++6u#a8y?iXN&DRp`0ifan;8txud$BMS~uPdYmc89o~L+c zA^GhE)Ec^4b$0XUqcRKU4Hdm&Ka?d^la!nm68B!is$dO<>YuD}uUz z`EV}p>2M9SwlTzPEhiRsefQO)f>lKeLCDomd?Ux*uOR`^*a=VjjSt$0%w$WlYUt5% zljmp^vV@p=z1ECgyJ#l4RW00aKtgV*PPUtt{C9C{WbW>VYp4T2@6{^8OO10v1 z?a@H_xM%?-gWWh^?_G<#>0u)mgDpN5E;iHWRsJ~p0%3jM@YCh!=(|Y^s!{*XlVTi+YvEdaj_CDwM4eKO<)!Bjf z8pyHD#on0j=2Ey6_N(=f^e^7ql>CHl{s+2;wHe^V+7 z{qX27hKvU6r8q{oi(FAYATZ?1>WeMX>Bx&&Vv}_>5~S~gfAn%?qHGrnwJ6Eo#$dm! zJhSOpD%n384a`^b&^s~}b)5SlXI$SqG}BHZ#rK{eC`fzHYJA0hU@cL=W=trp{Tj&5h#-tnYsA?d!9^czp+)K3jM?(q+4Md4(se#Ny1Cu_-y zL%mdm9;f-=>mZAwoxNkMPOvq0`8xGsV?^B>;o^Q*^-lKW{a?Am7ibR~mF>T^SYP$S zD9008pdZAyt01Hs6ODME(;i-d;{73~vg0r`Zi@-77&b-sE>851mzqex0G54!rM_;Z z;?Yw7IA@5nME*No7^a7~rcpbwea5iTZio>*d&#tBS(30lJ(i)BonK^gXB;sVw0k%w z;y8yv{Y1xM8mYYGEw`z8*JV(AL!ekW(>3*1iW3`q+!F+xyHfUOB=T#wr`&L`{Y#kn6l^)@9aBhIFqg!Ocj_4Zep82gMbor1`a;ich)fIUm( z&|&KPGj@-~A6ZUsJgc|&7lKwvove=6Pw65x#rIqsa|?Vvz$iuUAk%4BNHydUrqde> z58iEjNMdz%6zo?QM?^8qtrv&Iy>N56fDXdC)DE3sQ^38s0uRTM*KVzo)0_^kTD#9( zxxF}A>4HeUk67WC@Ho^2@AMQ2ux zh@C-WQSt!RDt^t9S3v7ub7#()L)Sg#~XM8d;He(c>LQ>L-d}g`_%T{3HRB;*eutVvlDVXIVw92I7|~c<4Cs` zC{HRr!>^7sGB8f=qJ9`yD}5dorO9aRVRaKeaFuaJ1tS{mCUvekFHsJ9G@2%8NVC73 zEV_%yy}+^p%p9>Q%RT+FHsZAravkS4d%Uint$tMPE_~Bjct)GXP;5OR!ZKR;f*+i_ z+L&EAfq4+0kmRZFEzgE_x8x>+my$1jg|mO(%u>nMlcHwK;xE|^8;KkVWMe{m?zRfA zWFbV)l=m=-qBG2Bf{{R#R*UN+v)J*daihJCq~P%TwBbf@vXMZsn)yxv;bdX^eby=T zl6ryAXjV&RG}e=+b~5Af+2oB?EbZ9Y!r9*HO-Lg{&Oh$h%@Qs zebQo=nu6pw`TooqPeiG)(;}0cD{;x(eElsp^h0~G*du=?;m$F(ow{2^{ey<4hoi=b zsGjaXf3bDHk+2I;bEXK4LhZ3u+OR5b8 zLO=X?l?S3K^j=(}`WH#1XQD5UqxIhX;xUet;Tg6RpmSeza`eCb8Ikv6K;ba`nd={XB}Rs?ax^vZNw|HC|MewaktoA3xt zX|(f%da-6M--B&%T&A~?*sUfak&~hN(kUWUQy%>rZ|vdn5EZ$to3rI{!Jm^91yC zqi?FKca@yn-mRh@`Eq@A%7!pS(I^N6S50e2@qH&*Cqmj44X6-}l3{_aI-gpqxe z-~}Y<^_xgt5`Io@^@Nc8dB+W(`xMC`qpTkHLx_+;+jIRwGEg=hD$Tf%J(#$PMQ@Fvc{iV*NL>r9Je|gebsbA9}6cB6UPs}Wicup z2)m|^<-^lnRV4S7I>@LWx;icq(tjE0uy3&uGIxhD-f8^MuMeKvija6u;03c^oU3-( z;mxblf!Q7$Ywy?_&m6fTXir$VT2!G+SYC&fnksXU*|YM2U%+l_0r^1(;ZA|T_!3-N zz9MyE+seEyBSxtQhozv$eJKb@T<;*3ANQ0)P{{?A7k*s^^ERBt1Sj$uFGSNfWk>!P zs!&M2!)@3?BQD{mt`P>4xwtDp8ceRfSNq(1jKbM=I-KA>n*+*rmARnOt^G#_OY;~h zBm2jy$C5Vr3n5NqyH&F~JgPBX{41eM~X>?$xshRec+gdZk{ zp!jmF@jmAZNrt$U4(-rnWxVe)t;YE#OWzv20UM?epD+J(&1y&@e!l2~4uq{2p%hQx z#rTx7P)!W6V=W@ALeiXfj;mlcES5f|V5xXAK~s^vRb#7F2AbMKns%${lr<{brN|$v zKVSjeK)Jzqb_kW5d>mhH0~(aG#Rf5jKey3W;I!DTGuqVboT$8)_72lZnFmsw%|1JC z=H{lsp1n14(P?>``UO>E^*_Iqy%BeHmw{}!6J4zP&zSj3pzE?JwzH6J+LbSw9)wqUF0<(*1MoP zG-V-Nq)@Rw(8ux4G-=9R^w1-#Pfe7zczJU1VwQ}MxXTq^pCWQ&K~{jnTTD)xELgH= z47H#cW?C^C?GrF~++K9MFOcEL)blKyB3NNWvn}K>zG~7-XJbn2oY8$P7q$#$Ci3g+)YT0;^HO-lbP2CO1LUU|UGnJ2zqS@r^daz5 z{6ha&|4&HqaNC9OiJF#M9G7+mC`Q*??nh(Ze4!9(d9efuF}XJlI1Ny}M+p#-Ip>gS z-g-<|KI0=BGHpnN2SN#784X`GrWf)SIB~uBfy4m?d-#Xy(#O%TcKEn~6K?-uX20WHsK-7rG&D=LN z|Ft26XytE5)s~kJ85G^ZSBgqeynZs=%O&c5e*XR4#f+UptT!eHv?};#%JO&N zFgQx}{EWD0K%xfZGvzJyuOj%x;>yqk zVvJE%?CKnY?jYW`;)5J1xpuhZNp~cweUrL(VNF`(PGvf=_#a*xK64_QNzcKbMtlYj3|c zFmV<4>o;%NqqL08(y}u$ceUy;&zu;Lk=5tFDgE3Vb930{uxRC00DUtD~2yi z>kCps?=|OvRP?tV)vXpUd^&+kwzug4AVo#O7dpN*f=uCqg{)+SBq8VT(l>E$#wRd; zojoJ$uz0KFdmouffZPhSq+|O+yp~yZ3)ul1dRsTKXLfp8r^bcn&u3`;K?_K@v2m}l zzeN91@jsi51FHR_J;6vMJ}gWuc_x6ID^oz)#+C;6iMQT7<#`(!u-IV(v#>G7+-+ej zG18&nR01lSalY{?dBFB#Vi&=V4AG?mL%kmw+xrcqgga7M;BXY()n(~JZ z6IQ_r*JbanMqy(N&yT))TZ~kfkr~!&Zy%n6e7_3vCHdcBDBp1+gW?5S>ti=)J3_GL zg*{)W-D4uH&`!A$lr_p6gf^co!Y1)=p|+CL)x^>;WCZS|UkT7!jo>gtAm?eE+GO(| zmnX5 z*i!eQ=deahSBFmctI*EYW_A^sm}jfKS+kCSl1I;Ml?l_s1OGK$JjjCGRoFW=h~w&d?Y7=C+U1IqyB8OV5VWac-x(m-qWLK<65u!v-`0k=$T{2^lyixAINH zIq)V-AcO0+c6iSN!%qHAY8ZckDsfc3>|lNhbUw}@Rpob4t5>!_N!|twv4(xia*~=I zLcy^!Ch@U3($3zdwNz3iQQ&9;I#z>55k6@N7K9P06O*1p?)>Q!s8j)_@(NtXh7VtL zSjbFfHjt(T%r!FbcUb8B6iPbWQAl(qwC`TplwTN!z1~FCsz}m>YSR8u>rtT2GUNjU z$wO8Hjdz=De%KU=O@GW=`Q~`EJb8ZmTLvwE2$@Bnv9y7%{qX0D$!fuqmNyJA;M<~b z-u>QpIEkjb8~i{8*4qPY;7`_g%!oomMy}D=@FbMS=^Nj#9@Wdt7gjWd#%vy}#GluV zre8U_HJ_JdoMorlQtDuA|8ws*1r#AOdc2wu7a(%p*=Y@deM3n`ggj_kX| zmfg3SzAbAsVX#4j31)(P3NZ{V2cJ}ob(yek8W}}(i>aHRTRF$M*+OX7kVf)MuD^7D zAG@b`XS13PK!5%bQ8xpcg+LY&e1`|I$<&7Z-e7(@t8vw=G5n;s&a>sJRMtw~jMR=s z_@pa>KkOFAI{lV`=8O`H0g{x~PF6Wpy%c{1y2Oh;K6W#^4gx;xY;8XWRsC*z^7H8m z*FVYwRS9@^ya(sO_PSjNx%GL|BvNx6zEJ=C8uO75>Wr-85}4+b!qDJVmKvO-Pu|?^(|5}xBb@_n6hTB!`h%M z7l&U7?O}_@slV|3!6f4%aIxp~LNv_b+NLSReva&)TX2Cu8?$`;}GZMnuMQ#DExS-5v zt=$pZb)x~8GQz1juRSTIE_HA#>ppF@YW|LoS-whciLhRcuC2sT^8MjtKNC;ZPh)v_t(2tLC7CnnMq=ak8XScEB~+Z&pRjLk;REJu=dmp>`T+vOAn z3tsG#4yF(^*30xX<=$(jpo*~2sdZU20Ifs}akv90Vz9oZrl$WIDK~DU@lptm0Rz|U z{APoaxiQU+QL6a3U77NNrBl~cQ5UB4S_o17dif(pIn&$k zM<1x1@%ysv=0sb3w=gp^3q7;KiSEgT!|!0z#q*lqM7p2!4|<&a@~v<#Ya{eu9<*JF zLA4PjH3yDWPeyfTd7dqN<72wxZi*Ra(!*~2Sl_?&Y0!R!b|PbqIMKDqX@zRAWUaBu zcX|2jc-+{tW^czPi_z2GxkDY>Hb}-qjnZo=o+BL&@PBT22i!nah&uxrl3!xISsZu| zl_D?e@>3G13l5IGZe6auZ6h3E=-vHh!GS+d(0_d~LGlNEn=I;cvH#+_Lks+@@dxGx z?8y$R&|Crmn;Ct@6+N&2>=0Cc@)x~2qTdmZau*^r&C;R9XQMJdD&YVvVSlxgN^|vMhnt)c^jJaR?32sHsQ~X|$ zziMEquVC==i?qfaDi6?#yTa!}hNCMs@usVv?*dYxwxbK$V!0Tsd@w|eLk2b!Zo~&q<9qbdIasL{#Q55AVpI4wcIX>P} zJga@J-`E~+KKKRsXv4{9;HGOu&~d4F+W@g+MY7}CynAonj|XE@iZcpZ;wF;y8Vg+! zs<2?A8cp_=cdOc|a2p<#Xlr%)?_nx#&*)UaR`@1pYVPZklOA?5oE?vO6M)v*BPdhDHiSI!>WI{V zD7U@I*x`=j>fuACHAmH6#uk>jN};Y2ebuzc;>h4c0irts+nuy$*-m>&d;QgOXvI^5 zvf(SXo10d1#8e`a>Ri=IT4o$&(F^6qj$!((*Ury=$XBlBw@cSY)%%jp+40;l1Xx)Y(?pL`?Xo%!oSj2XH^UfTyg1vLPXpG6+jO^7G?(5uTD>zmU#r9dyP4`s zZ_j&Zj{b%gjrOOy3cga$pY1ilOpLF6@aD?Nc1ciO3xbn}eBo~*hMtOl%q%L#B zy>s@`ITp9;m|(uroEY5)$30|8}_Ba0>vYE zc@QuddeWuic`f63%m+S65(-$1S0B_9i^_>=mzeQ@pw4GOl>NEtA(MO-L!rAYjEPz9 zGCTWIAxl8gZ}nx2B2-}AY)1R#_j*-T<*lJ?(sKk63n;ZU$DJbM=%s_5JYGxz7ds!( zh~1Y-Rg6g4tDJpDh%ZH(&V{|?^GD^kG}?zG{(I;QwzjszCFW8WWmcWnYW8}F?vz@M z#SxkJ=Scc;XqVFaX51AJuXLGk-+P$M;L4y5OuD{oaWSsC<4tlsH=9o3y)Fuwo*x7R z1tB~)Su(7lOVLc(82^5SGz=^GuVl=jpmFJyyRodfz*|}L-=EH~-iPIuXqQ>ZshanF z7NZ$%CBU*doA+kQOUtr+MzqJl^TNWy>h>GBC?A<9RXJJ;h>NzUErgzr9*yp)JzUJ? zNesOpB`F!Ut4t&UlX>t)V<>mgJ+`PD%BG~aQXi8yf!}COT6N*-NqR(oj#_}fzrm4x_^sH>u@*@NkWHuWJ+7$2p9Q5@fe4Eg zMWt0WJ1rz6&a-eNrr$Y~&K~MA@bLW+-45z8+kXyrz33$h&^$;G{10_R(wf(Ama(>S zjf$6^iQxpEm?LM3ePY0vRb2ll`jy~z#Avh+DoK;ijWNCD+{LS1Hl2|5OaJE*7yA<3 zxra1r<9kSDq+9H;G?3wbD1Brx##Dx>bdT@`SX@%*vr2tdCUqA(AyClHo)%RsiF_XJd=qh8q2JGZt*3P16Wq=GR_v$ z60?3#)?7X|!~0e{2U^ZMEiEnCZL_7+azra1=4pK!;(`C)FT=2)Bc=CN$KrX+cSr3y z!FsmUq>#9B5l3J@e!QHGxoIKsP||#;kj{04ohn04WF$j22FYy=KQIx z{hgAemA&oP#M!A6(3t}TdbBrgd>eSg$l<^`VFyp6FQyygReW`ba+h259xImlMY zLdlJLo}G|!XocS2cddu417fvkJ_dV5Q(mOlq2bun@Ej*vjzyQUW#y1M#}+0M{f7ei z6ChgH=nXowXT$ic$Mf{+PRk}dWLaf;WRBW^Z!UY~Nf_`VNj#d!k^BP)vB9Ci=q{$^S@557DF$3*F+0uxq%mG2}eTeRCDD8v6@)?rU2`^TFpzpVTHcJY%RZ`VK_sU4h9>u;MCFb z(6E6&{yJDdHNS8!jl!QneB+Pp=dV|osjA-6Zd&-|ODp2En$T~yGFF9KT}HXsCpjZU zhE3Dca9fR=+6dGwq=GWzeW_r#qm{A+A;}cg$aLulMpg0f%M;d7Q*WfCu&^zxOEPb^r{?J%=&Z2R?@)@Ocr2-kt8YljV->s?5A)j z%kqy38!!{;B6JfKBl;%1=?t9s^J3z`Pyi100@(zMpq;~Kt0C!cxJVFgCYqjsR^eE zclCmo8COMtW&x5o*(vZ;>$#+sUUxO>Z1CJ|P?u99Py@1g!` zqx9`<;46bx8^df47+>JeJYP&*y?y1zU9?QB41z0fgnGp8!Gf_x!8hYtT}R7K&kj%8 zvegB0yUr}LPWnB!;X~t>G6y2T;mHRG7NeQw!nvQt4)OTvb^xP)^A-Am&1T%bVd*%j zG|qptTOpMwpiEB~?Co46tavqJT^J!(ShU(W%c!)}8Dw-eulTg2k)nbs(P zK58~w+3e{e=^Er(|oi*&ZpAvlOcM6*Y-}9(zb9fQZ&?^|nn(h8Hw6G{kV~ zeoD@(+W|OvxYqp$)b<3RbOP9Ffq_@U2S6yYvJcBCK!Wj)OrJWuth8VF?n5}n4QKg? zVyG9kne;9w38zJ{AA4S}@J(e!f0_{Pw43$4eAz=k=X=*)D-Mcmw=L(9;*RMOC^=)Y zAf_I&yxrj1(@Ro|B>TvZ#{U(`qf%y<Ev9t!<^@d- zvXz5KQu2Tfo$=C$89B-MdoI^-|RNhLp4x2huv{b9t| z(NrK-0A~7W2+J8!(=&JqWm44_IR5#bnAv{3+IhlltNr+33*cAXLxs)FHm-0Vmnc7nXv$1yYH}ls?GJQbf^X?ZHJ;}9Zkp)q-CjdRH3>o6F5dP$TPKm!yttRF zg|d24+R@$iKCqnvEFMAV5^~48b??2j;ES5JyaB)R>W3|X?_otc*}Ep+yrJeW`p%#w zZ8eYEIZ!sLyF$}ax7)6XUD7`XWvT<>7Fc-q-ZW+%-_D+O`-yBY@?|CO! zYTMv*cU7n685TvFfv@5OgiR-*iyx3qDg zHQtzx2|8CU1qtmrDIRZIm-Y6v<-`1yBBLBE*WTW#b2h%Pq^pLdnXi}%vblu~cL=zt zyg8Ch&dlcI?S8iAS?)6Q8DBN1=NLa;bPLBi#h&N6uNuz{{4u0tI!5GPP_{*|dqu9c z#0R)XXl_LKjDFzw%b=atMC40G(@rFnA7t?H*6qi0-1n@q+xAXB2!Mtpr^B{7N&?l+ z`a4fPU}Kv;O&tl7h`!da=={b;yF4RlSP^tj<)+N@78a7d5d@1J>$@whLLTp~WPHlT zSG|^VRV^D6!;^^{5CH{xIy0ZO0731=kN$4!?31rmF#C`V zNY=yaZ~aB(@7U3O0#?p5`6Y@XT*IZchp?V%E@HRG<}>fdEA>u>nMcmip8EL@s?-FyWN?8PPeFo5>eEA-yW&*1?7(k-F@EyTw!9hG z?!e$PHs={|7YuWoYH1yRsENotTmNx=@2>u@(IJ|LA;ceP9|ZCar-~yV>$)o0wt5>$ zVp*fgS4z5784}4EzUM&$!sLM$@*X~a^DQ8X*MG4!6MZhloNjr!UEf;da(L+pt()o_ z;k2KvCH0<%LLNU0%RM@O?6@ELiYT6S?Jexj8xIoEaDEhh^EmPN8^zmC4LeknqCYFV zH&pC8Gn5!3qh!RuVg#PD-K1kee=5WH#gxFaR2dZrdUD-~H>VlnwJO(rWSa74pW?Rh z)ql@ZsU|LKe|II_S?`PMtRzGG=%dLUd9LF!e_xj|ULsG+-mQXMdpxF-wNK&ILgJiK z-V%uZ3D8y{W>JBQMBJviFb`wv{Mm^0`K)Xz*alB8g0PaGIJ6H88%2`|Zu6Fo76BX9 zsjp#}AL*l8**<(wjxrQLd;C@QJ~TlyW#}_4F$(3w6;oR`AgFLyQ}Grtl@^(o7K&EI_#$jAwD?RLIGgqJDfJdF;@uCyZQLt z7>VeERyelQxMv$ECA|DnU@_$oEkya>Pky_6-ROc|RHr=S6IfYAL@n7B;Ln2tuzZ>5 z?}3YzM|2kWYqPoec9iPXxzA52Dte+HnVx)D{Qh7H(w3KU1`3-)AW@)>(toxltxAiRFVUGc1u@?Yj97$5iB8y#rU5k3;}BUl!!X{=z?|1B?Jbg z#oiMeQ?@o~wA&hd-jv!rOmZ5{M0WhX^|IU;>ET1kB~iao7#brp+m{oN*|>)}EQj1$ z1~DBN5VP{1eF0uNpruhhRW`L>+c#>Lglc7vhRPNlJCIH#uh`1p-Z z&|I#tca%F-kT2&mPARD_)b+9cFXrAes;O>k8^(%=h=_nlQ9ydrAiW9Fq)I1L5fTIf zNH3wNh=53MhN|=uY9N$QluigBEf9J~x_|-c@5cK+=RVJQ#`wl~zaQWD#?U_*o4xjG zb6s;@b6pd)U5>1{8JmQ=+TWoRCm^4l{|xwSmNONBf9)^e#Ivu7Z;pI8xxJn22=7)` zA0_r=nQf{!IRCgJ8S6fKE0$owsf7}vC#95}Q?EsQYUzm@(cxg0WZqQ;hKodh^37L@ z*8XO)bVkjw z6H2Jgp{flZxXR$Tymzm0?TMtD3MY3+>(iq(r;T^>jlOB#%Zcapyn!Cv)B7K*$N*Z^ z_^^lR*TArvX~x06l*ne~4=5f>3h!Gq#&<$9@6iUcVyGQYyNzUe$849+6-WW^xWV%; zd&ns3F9qnx4}vZ>eIln5`0f;aPy+sLjpo{+mBo1tgbatJ)E7s{Uh>}OF0 z_}Y_ldO|9K6JzI?BrdTxzGi*)=!0prB`u^$tEtj@>0;hC(8S|B;O^uNM!>ms!9UIO zyYlYguS3^G96iwjbx(jqzhbAzb3bA*EZMW;6w)CWvMv+V$+sRyd#ghUQ*A4m&H&L= z{O=dZ2gKc^rk+84r35ZxN2R3r9{t_|ctzli)AcrZsHBL^xsr7I%f~Bi-`M(JlFA%W zpV~1?#5K5b&V8K`4t&2;!|pF4_`GECjLZ7B31Y0}zmEzf`P~7ydVt%Z$R9U6RW{v; zoJd2seHiY&dmzO$X7y~_^I?^4KVMZjdC63V*emNLr}iz5E_A9>gW9MX6(5*zOB^^Y z0F-bv6UyT2D0=-axoJ1h&g*AD%BUH`#~BeO%>p>ch=BE z+=atGL8~C$sVe=*-MO9p{q(L2#%Bo=|6U>_O%eCHV3R>%4Daik!XNo#Wq}Ge#4O2J zVs8ZQsm$H)c4vI!m$Pg8z@9jN!vjD8T}Ak_vmO4@_ZJG5Rpw+e%{5bcGBGe^ z{QEDOvOviP4(S-4A3F{OOY?9{T+EtJWGnKwA;T?`^YLHI<8;FP)GVJjY}jAd<3Asq zF1)+W&5&q72^i6{Z{l;F>nH9E&u zWlj6|^Tv2-)(CASYzhRqHMQs!Y!VHw(o8zm81?&^-L(nf65J#1?5l1haLJ^n4@)jF{OKnUo;jWfHCaOUjid$o#RI^J)GNW?c-!m- z&slEOyQ@N2q?*kAdK>u?*Uligp%T=aWowod1X?Y4ooh2f-R`RSsYy3Y`J>bw{yUd6 zavv?OUWt3knOC1{gRk=GdhfIG$gob#qP2W*F4Qp`!)1%;@1h|rVUptTe`gCy~6D{^UeLM5QBzYX6c=xNtZ9!%IOll zVm`sG>gUc^D{Zn|BrjDyi_z6?Foz^yc;Y3Ofa00Jv`2ODMK{=vjebC&&QN0@PUgFn zMk@nU>vXE|t**&mjT=CvtK;A9komviT1W%ylN)fg2s~x^v9fUEApY|;Pr}3yCx z-mYw|;FI|3z!=m}dUUulWXoxio4=YmiqPgjuLCPH6V4&mj$i^C2!C*xFu9~MsW6MkPVxpfKH>T6fxaW_S; zbJpf`@A~uyi{f?}TXf9E>!e@mpJj8%2a!Px#9kyOw{UTy(hz0m62SryI6hNHD3`2k zg4R7@$?*M#Dm9VR&%0PqVOk?B@26={Viztb9>|(Y`+&p7aqm2sU&3vJx-?=FFg`#Z zmd1Q$!{8(O8!07!%#1u2s-^ez$Z~Q z*n2AS@mYbr&w7TRVp_1B$nqh(XmEq^c0Gc|e)sCy2gRw@VY!sxD&P2iGAF~k`$X^h zETREhXJwv1RTi_B26O?dSNvs-2F|*>ziYB^r)B`#N_YGrZ%TX$0I+H-Budl7VZL`D zz;2YE9wYAO7FL8mGAF87d`NlVZ?~M<^c+tOe9aXapb8ub4^tHQg5@0-QW8HeA_0JC z6EmpRr#rO8^kT4uC*}!njQ5|H{C?9Mak2nhdhjnpn=Z*U>d@%dDR_UrD(LrEJ~|_c zOWuJcrQv%pE6ba>yga)b7tenP@gnf&&7L!7y$?HI@zCKbquvc3N8Rj;u$%qw)|5hH z#3J&jIUQfPFiO@F>vt>RC03FiYq4-j)F}?PS48x)$FCuz;oUNg>BVk)2rvp?g-0T! z8^QL_)74?~S#2;0Ni`pEm=3(gMFc$}&<*=iex^)zjGaS~CK5hKRyoO@VDbpU7=6OA8RgM$2-aAnD z0`KehA`7bY{Bl;r^-uGCv`1~!q6idAf_|rw0jI8wd*lJ9Rg)(Jr|aFal|v(V90ltjlDeZ&BbAw@=&y{dr8}ug9K@q=XbGRReJ?fFLL~ub0@`2+Yhnuq!;! z8Okj1hcLeYHZ;lO&c6o!`WJ+i@6KYkO`7*&Cue$!*WNd69dX!DVga*0k=He6>(!YU z0SSrU52Car143F-x~BX^8Dq+ji}S+#FPtE>iWSK}2FVBQ&~ws7POMI%qMpm*E0eO0 zF1*EEm&2|RSBLKg9BqYq-eqKu#~JwLuV{*>wSB9*rD* z9;cVOVrCA>OeT)9owh~E!akD6-&_dsUX{F=6d!L47eHHXCzMptT;;MB3F$5h(}x)}f<=Xr|=F)SH`8V7{J&EGXP?dgl^>)yTTEU8%e&n46hO_JhjvNIbS!dt83tl1QOeIELL93wpq&@FkcikMc!%bT3Kh5As0Gl@OhHq1=7!%Vw{B z;f{&OrwC~dpc~V-N-0G^l6cX3z)RKD-+&5lac_$$KByTU)#0~C7eEZC#K!PYjl`j` z#ZDMgklwdEUwvUiX!Ap;q+ljaZ}pOUq>vC02a?(dLJFZ!@Bq0hF}s`hGf zJnTBVwF8PmVs?BcG;E^IF5pX}0(<%!Y}Q8n8d_Z=3!uBnM8 zck9uZwSyyic(ht8nVb{GjJGNma#qG1neZk#&mcrtZ#`gX{>PvKtH6HZWowRbn$in~ zZ!zcXa&=Y}iix$Ou6IzTg4D)Ce6R$1b_MZGF%a)tvZk9|)|bcFhtNgUcgk-oI?az= zc3MCxOJ$QNgT@4qvWU#=t%&6Ur#Lf))IP4`G1p#T|2~GY#G2QiLFvDi@q?DC17r@v z@M?CzWr0H7{L`w{q?vZ(%y--f)!{1@cY~uUnIIyJn&|Tt3_O~#b~L;eg}#Lk5Isy} z<_BXrvueYl31E!=oY>Cj|9<}^ERx+~ef*iYVui5KLt46=a<`FkRx1QQ%A5=|@!bZR z?fXsXrT)_)7RmUDxLO$O+kJVNtFTad?calh* zL4DF!`pZ`317g%H^;cuDwl0GF-~>Q_Z0s%*GcCgcm_n}U3zJ8GZ9^lZoL{d z)C;gNAXzW4%ZdUwKw5@J;9@ZaM^hcm;8Au|LESZk@IdbBYUGed+z>{3?>x|CW;7w5 zQFY4nxW4eE(wZC;BP1C9AESr#mlpFoxO_y@XW-{6}o31H5`4!uR_Hcz>@VwiDX!R}{Mve?SdzQ{wBXh=r z@Yg&XzRN>ASg%X0y76!X^ihofOIVB+p}#>-|5<0k9cv(bA#B`{uga*`s3#iC%Ztb# z&zR8LFQ&6S_iKeFwgcwXtFKO$l;&3$>B;T!0HJ~Q#|O<-8z%0Wumh*~aVhh{`ADk0 zc@~M*8Od2AGh9(9ad6W4)kvo6yZ&fG=5iQw2Mn+wPsHvZ%uszjuku_gjq+b+M!w-M zSeUs`Ee^7`&R$}zN_RlGv+=(+uYYkB!8Boh*_mK1GI7wc<}U|5eBg?ZKDw?1^<4Zc z>GUzDZX87ZfC)I1BGjNJ=nIwW(=S8Vi@MWiP^I*}I3KXIB?FQl<^Qh%?sT#fCl&S) zln?Ltrrub?Y=kbv1&iV%H;np_B@oT-q9Oa~%!ius=6qy=A4RrO1&|-dX-m&jT6lhU zrb&2t%r*KP^a^G?N(PH)Ir>fxgO={NjjQ#T z}L)*{K-lK>BKm7}HYBCd?L7)%&#GANbg-lSsExp!Olj zD?e>#RGt{@B_tQ6J)0UTaV=HdJi7qaJWOV89qyhphq9Z$RP2CuRrrD;u17yvB}RSY zthe3hc*}-@LY?))b;c8f1x}mkSPB#f+3c>)ypqU-lQ%bs>FC7U$7r^XJ^XbS6f0gc zMGf#;XjUW^&XrS}93SnsNM5k!acORT#$9VKq?Z}7 zE;E-irk%E$8T)ZV;@~T)eD8vb-E?YI?D~tglz=PAHa<$wbBh-MvoaS2KAhs|55XZ>= zx-hq@@@BhbW-gC`!|<4^Y&PWjX|&Bo+YUPZbJZcdS(>){ph9G;;|syL=}iSLzul;T z0R8w>vDA%(Wz}{3KFEIk3)17-9W`q}wmjOewkyQtFr{jNM|5%R$;inDa6jUK*b2$gfHpDRm?83zIrDs5y;ho^to33qTcmM3m;NP~)-fEJcde}{QH}BNfS8Np< z>BbJZi9pM_J}%a_(r>AEBHiof@LW`0aGIeftcoHI9b3D0ky#J}n3yTF2v_lzA$&q1 zr8Xw6Ca+9sohYrUwlHhx@r-}s0y|2!swfWVV3+_<>*hgKvOw2kVtT5lfDU+>=A?$} zAhE&WQ2BN8t1HDa#H5t$B}C zepkk(%m6p#BLJRW@qsY%jVIhuk1NZ~hs0BAHPVg;q|$JX6^|I#^e-2Vp6m`YCu-Sdx(Lh#!@+$MR&MTvZKIO>12qa5~Yc) z{6&{abQ7-sX3c#b$-IP(H!-}Zw2A}JDw19i+Pavrd>v3Ntx<^)V{v1;Sc`U40#c_! zbe(D^nxC5>_#LZ!h7pz>}kRJdPaZ}Ui_M{G4!W~L}?SSnG zrwx}Q;N}z3KP-%Wyf->v_|`_*wPC;E+~YBFHcw#S*8_rEr3?n3{b+FFK{i@g2@2tV)7gzxCW?e@~WHc3h1OEwhP)23EaRHJxXA@Mjq8WMu{9;4u|$vE|k z`j|{A4V;2!t}GC-L;yxzx4wG>!(MMzSZvlpSLZy0><^PY;-&Y_E~{ArKBWZEn06#M zo0ZciXw!$T**;|&@rDNOw8Zi zy(}kGvxIvVwZ3CE=yKpY%iMdyj1BFzPjE=t$X`&cYw3_tg9`PG`D3adZoaw_oC*YS z)?E60YebjuIYPf)e$rd<7Y|QYHfk^1nMzH;Pr64kasu`c(4WpSEcs-Y|a>Uib|-Gve!eD~7qT4CZ8cvvrxXfg`^RBve0*U)T-;L|F8Rp=CNkFaZ} zodB(p4uazim}am0aYXb$JZ;N@6vpn5YP1OuleqhKTs=(Pnz@Z;L`yp!O6^~ap_ygc z3WY;9n6V#v?P*tYz4dtJK2kx_#X-r=le=TBp@d!$!mQbs-I?3g=p6lA%l-Lc2DVc_ zM~sDwF??9sCFS3!boOyCE8- zntHwSX|kN|`?`Hk4%Oumw!}+-{{`H1?=LjGhcbcYzE?C;IrrH6mQ>nJtv&uzHv>0Z z5Ek|eh9NSlv^|>JJ#;+mOu81whWaLT`uwerB*pXKqxgj&h>`mvEX?Mzn1dTjl5(gs z2$ae3p22BnpnSZguToin^50YW7+QsU3MD?t0QjinzPPu&w%$7~T^ZA#)Z)S7WWGdj zl2(0#2{g9Bx+9fdjo+^P=9woF%x0kw8FZ+ELNi8vlwwe~fSF4@WL58P`|gn>hNGKsth3VPr% z*y2+Yn_>jZLG)g@1}FLV4*T0v)`Jcuqm&pC@t`43Ydn)TO}b~dEKbl^wy6X8Fr07e zv7C*DjuX$MGxDh8%;o$~A4)Zz@RJEZ(L%f*VX?ZU&l7E+W2DOAONO33r?X80R_|<} zMYqSIbp^|Nk`#)H>IvRZkx@1e6eIh84A|f9E5={n=>a7g(aaO~G;&v%(wB5D+J*Na zH9pajN$r#FQM2l*#aDYGyy~bMG)vW8jZ<)FWu>zEiJuX>mTG89U1pB<7?-DqXH5@x zhhGCpUIbM50Q(Gtr%7IebqjFJP@WZ+vSfn=nX9$-Cr_}rZU^U5LZcO06^J$cPlu@k z$y1%EUwI)Ku>(;qMNdK&-*jn`{P!y}aOWA>{;MApf8(69NCc2&>Cb9iGw#ibW%ef^ zzYqU}h{UAi-NMhoYSv!nqs2WPM}F-6(tFT+$8&b7Y?T2v(4c$*hqE!UT)2KH4UK;~ z(Y;reEQIMbiuceWhi~?hN)BmGSy<16?fO>R{1ur4=A%jGlZQ20tezXV=l#OYf*^R3 z(8w`N(3um-rE+(M!yh$SZ14*A$lu=Ll59B#{~6n2bgtTr=ykYbxi^vJ5Q;mm4xkla zxOUHhB()I2qw;+6(7moL^P|lm@2<5O&j%okP_XnjEn|tldlv-;dZ#Hw8~Y+~%2`dl z`6e}ZxUm>-4(;SFUZ)IRU47vFkVSPswiHjh&M8h~$+u2Z$Ukf0=gL}SW%hnwDLn3_ z9%m4jz>%B`O_Ff;NGR5Bj6@4sl;Aohfo$tsUT#u_7^+mc4N}EqcmAF*#qDae+HU%w z){2W-Kgb;CyM~GU^nq4u=Iq)lcbOWsyM50b-V~jnt=;dFr?;)G5aWf9eg3FN&HE9m znwII~DQb1W&orCO=v38ugc`YWao}`VyfrsSY)kCen;R`1FWKt*``)c(u0!iykuZ0y z90QC3&FV?oQ#$6OkeB1raKMlLboq}VSqrpHM^JqHvLCUx@x05vs(ayWM;@V;2J?6; z2}X1&b2fSPNW(Ds^GErjXNf7AJZ$~zl@UD8tmB;}EzCjh6ID-C!txNDC=WgHncJYk zA{Fx`Foq2oNdLivgasE4hJW&m*gHbvlYEJ|-fGkNT`ys2) z#&@uC#B;4*dq|=7!^*I86#2vtC%@<$%B(;Gh&?xBhvkx$HR{VpYcO~UC` zi>(w(_rs1XoSoUq28pAP_m_F2A;s^~sj!2zL7bdfVo%aXLV6(7ZSzA*)u@M?R4uitJ3 zv5ej0Kbx=x29SN{`$oz8X4h{Tb}%D*c)Qp5JDm=GyO^FLR%rykI=<6J{yH16_~S7uCKo&Ex)-mK1caRU~EIpKEhj43>gX&{ViK!oZ8 z&kt~hZk)_!N?aeY&V#TF=g@vvE20d2qSFLQ#c8HCztsDp-j^Lkxb?^IjF1M$5|S2U zN?l78Y^_%gOB=jy*)64fIu5h()DT1v*_ceAg4ULODqS?qe*;h^s|0A!e1gUYT>qMy z&f$vi=BzB?sXhzT4FOtxS}2I>Nz%49xGWg49EgRPlm1N3-?{glsZ~1KtrM2f_(P-0 zgxW?oU2%TC`x9#gAB0UJ}@V2}ci9c}}5pZ3y%6mY0pOnW(_J`U>Oa_F_TB7Ug~S1h3z63)b1)c8Kbn&XB4i zVzQh@5$3hC2|sOL;*v-gvEauo?M-@nt^FYx#(xb!B7p*b$MeAO;J__4-X}CTK)e6e zYA+4Bs7LV|*x3*OLE3QKs#6ser6f=fwXjP0=qh1sDIULkXQO{!#b7BO$&fnm%kq;s zDgId0Dohix-bdG@UJgM!2$ejNJfEcz~zHZ_8vh=c^m8$+%~NbRtDS z$wTSuP2tq@`9>982oT#f?E;3;h$$iS$5!Ks<3aKektFj{bNnM;6yWPjiiiKIgo8%R z7X}LzEZvIYjQ1p8__-;V1|;J}%U1%Y=jXG;nF}bDiriQ%$DO%q_^t4RVb$G_=)VjY zXcNA1R-K-en{)qfHJ9MObn_++h@L5D&z#`T50=T8V6^`MR|UyZ!vm;TND zU>-vy0M+!04QyZR(k9ilq0W84y@db{AItdGUReFDdgHhS?Bn%>J0gS5gb zD5qoyH>!UGy&R+$I^L`&nfUT%wul|AaoI}x3&LU-q|ArE>ZeJj!SX>i1f2<)mGGhp zQ!mugxI~=_M#qnhTEZ+ZeRSylah(G2O&1mPQuTR=Vv@YiBb$zD0IKaTx~LEko94SK zyuob;A1bTO`5s8M{^9$|I3~c^wk%3%3mN;vVtNbhUi_oYK>n-5|+VAha4r9uI1aAvAj(tLY8Tr z4?yT231HdJJq01mOncPM?*uVw1FSYq42jX6#SfDKj6G3rpQf^Q2SQBzZeB#4VnUh! zyi9)Ot@3iO1M5Es+dHrbv&ufISd2YQD`TVk#)2ZBu)UDKJ*cy8RV493^i#f1!b>8@ zasA3|>-s!1HWxiu_?q>x_171|@g6(cQ_>G55+|mpB&dI=6zAA_!pJ5qmk41GKx$`97<%UzU zUAQ1z*_54q>%+z34oOm&pYs}GlIy}mj!uFA7_G<@owivJ; zFZ}5XYmr8XFCv^ZfqYm5ZdVO6G+74$1{LP4%mz%F5|sBa&w6*O{ca;b4OU3rh`3>m z2JWkqT+QfM#ZbIRQut+<|AWxnV>-Ldtq*OE-e;^FjKw{nD{Q|Ku2-*iZSjlK<+X*n z$l{r2u5XJwKJRlB{$apKvhWfX zIgl273D{C`guiJ<Dgndjt03EO4-Tf5@`O#5rC&C6{peke@3_2jVe$Nbj05Y%X<4>ykK7vgh%< z3_UxaXLEO zu&e)Cpum5-gDvtOK6@y!PP|Q!?Tk!?00iY9wEVcC5juwgDDVQtc_6VLxZ2^j-O1UD z_htATreTo{^%l~G= zFD;{nyz_NNvC0Ly-L53wdiB{WLi)Y=2U?@n7C>Z`M-Yc+B?_w8I}BpcWr(92RxHMkbK{@wnA4mmhNvN z;Ca#t0+<-2|C6Gx>Cbi;Y=(QOg58AqNbM*!?=9mAMnC=*G;}ddO#+p z60qabg36@Ld}cGQc%P3JpP3d6VM3H)W@GoVrtr@B>oI;x;%7rhc(~HBRvMP0#)|S+ zFBC36H`t4?(T5Bk+&Q!|0F9CBqu$Q(y`zd8dcxKB?Gfx3$#^l3A)|hP%+H2Z$1ds0 z-G?184dc(-JDp~tN+$$$KGboDiHspskQ%^@YmcG19IM+x=I?MDG=Mg#P$D64^SQN$ z4G_Vi&$eJinAwlmKI;5}n9!|?V@5a_7@Ay(wuiDSk|!x5Kn(GMZ3A>+Z9UuDRk}sx zWFJNnYRzes>0549%0YS4Qr^X$w;of{uKYG^`!+#qEv);dy~8bn#J>D}AOX^I8<=xw zyVt9Q$E{y00#u=8*f_lvlhBzD+yT&WqO?EIv8~b9Lrlv9c}6vmv}6OOD2u z2{ij=D&2f{0rici5|I`GGp&4|KFU~!f4CRUjmlLrHLJQ$Q6sOgQqeP}Judydh{zzOXUSF;<|v13NCl#YSlP zP>q;95L@1`dZNB-rsug*TPK@TdO)e; zfaDKgWeA~Wap}VS?7cn7f_~B3s7m+ULBh(yi#hajA`RQ=vxWC#mlGfU@no{2cuHME z^vyv^WJl2nyC%4JaJ}uKXc&MiijW>5E6?B0>UXRv{uOXvZCm!J$a^j%QI@Mv5K+7w z)K?QUY!i4vWJ1{5HIxG4>L8)`ilIFQ+<1Vt2{v?-qg!4Bpg+X(yi;Sg=gU|4vIDj6 zao_kK?KrBvO7E3&xmflrqCXvyYnL&)TsQ8miCy#Yz;t9(Ee%DO-HdnGaCWlx_*(Ux zBO8kxR~(b%)Q-nMM6&Z8wyz;5lIvWx5szqA)<8$JtS2{NHC< z`BNaD4|=arsC28c5&+_NgPrqFWlR^z^>j!U_W6~eMaT4j?{Z?6 zkK>=?DiT?a1FzDmIUy)?Ay}mI6YQw2vl)`B8++?4S|hp3ffAl6lB;hU>KODi_?fyq z(UhpD5M5*M(}}#hd<9fkNNX+{!lA*tb_1^t#05~M; z*|iq21i@UvY-IdNP~rL@x4t3EOLoqB3%b>uCV*o+|FwaD!8w-V-wj_{ zDQrK*Ti9fq(=J$y6*%2K-1V<^7JT@VZ5?oJ4Hk)>QGvE~16bIk@C!Y3HHin0wPT}| zZRY|I-sRNxck_6>Tx=T@jR7t;?beoL2z4fc{etG*d^rm}OzK~VvM>8R>0C|=#awMW zK*G(EdB5rk^6aULt3!7VQD$Dg!C&^g2}eRq@41F3yQMSNJnm*4!<7-;CAn%}Kx1`s zqGFCi=B9PDXq>4sSZtH_jd=NcWVEck-s2@%pcc6kj3;S5*H z<;?{F?iAn+Bs6D#vF>3DuS{mY$MEV)x`}8H z*>}yF1QwKE<0T;g;8L>jbhSG2FEb00P@LJL+xpOhuvRF!WUExqm${uU+CsLVC}8?KrmobZU$Xx!qP|w zNkD%r-#f_o9y(a*G3DsjI`vJCN;|Dn?c^hWEd)=QhvIQ?Z9P_)jJ5Dc%u(o>#QzAJ zVEXF7(YS`~$CM7y-D362M-$b4T6^%FHxudd&_XmifW?A-ce+Km?fZ08Y9&+r4 z6hJGD?7uKI-li!Q`nYRc5OjI5upoC=mDL>(;CW5>t4r$9z%6cDqU}1hy|k@t(Yq%v z<3RD5vK7R;C$4W97t zeq>r$w~ki|E1Y1ctiMut@^aoX{?5GpTH}VVKC@4fGw822AJ*bFEKj-~>Du|YqD^V( zfHYu6CLobc%1lonKUKjP@f+EI4DPC=RZixfJQMWStmXA$WJy3y@3fAG_LAfagUS}LfPA#vr< zuf>p)2}lhE>?j}VB+K%lQx&_O+%dO&7wm|FZ7E4Xlr7Wqu@`7n`Oe^(>e=gjIVdML zZ?%rNKay-HkqNL79%}$Wk^3}5Z#M1o*2|!H$ndno4TA_A2dg6BR8D_2H2}QIJAWPo zGCiDfyP>&FG=ABP65V3<)_6bRduJYP@Wnr_=h@qiFFhM&niCbfSdf?QBs}$T`0&!R zRNwQ8z%aAHRPVFRPz;%J|^ zuKHr9zD_W09R|lb+J7u3moLB#=@XYW% ztB}ZZzxYkC1D^fce#|194rHHmGa}dCz8%_`LGScTmvB?5XFcOH@dZM7Pp(?EJ#pj$ z*);?W4MhPGivaYSp97_RfH^u#yT;lmRjp`;^$?b4-MoERj}5MTd|31dP@(9MKFIcr zPFF9KR$t6}f3HeBN3}0AtM(#0O77rQ#Xvkb6Rk=csE$nXs6Zxw`+Rm)ej+dqJTgK8 zcb`C?bfG=)3jdr^i1QEwvX7U(vnV!b4apU~ibx}LoLlt`B8X_Z2 zaZfUDap!UaY0aJmMyw*b0*ZCo8kJJ-#gpYn!R-%zMf^^Yo{si{8c=wWb1)_WOZQ)= zB9O!>Uf^A}J5t$JESrWGNKPOeMHAv8+*@qJS3TllBtiC}miX$7Xl3dgsuIq&_bWqc zk`RN0L^hPcL7G*rHwd0r1p}fYf1j&}n-IKDhTCBUtlo<#PK?XJ7FJF|Z-D%hhEi~M zVD*0RXfAOtTJ#PAyyM;9B81XD0P-g_VU|9Elb>_sJS=;PaY_q>!+XAt`mKqh7sx=? z23einS3TAL<75j3!C5#0FYlO!ht{Xgc{!W+-PD3YjDhBiu<;+$Z6C8qDK`+ayr84=G9O{49?!I=Y1Ty{Vw!K;Zqm3^h zN#5&1u0vk8gkvxCRMZdtGb{Ag02hV*;v3LcEMy%`Xa?@t{d z@LwUOKTLMaf9+>r#mAmpUm+|%{he7~(eqhb7 zz@o>4GfVyq6of_kq*NU6#rHld zEb??$8P;S&CHUsFXkuY;nuQs_e!+_n&vPxLuG*N--N^h3VpV{)pV|L^*(x3&$;9G| zXSeaX*$j@LU;g;S!v~7@Z5tA7_JN``h8>>|mia;P1rCgP+NToK-hyB4GJhh#G%O$t z=l@urV|Chw6xoiP%_0dye5lDsuoc52<`)6Gj>jTad+W_m`k9|jQN`vJV#3=d{MYR8 zc)Y)iXaw7XUNH?_NqdK4oE`gh**8F1{J)1=8)`{%8&dY4D}DFVjo8F5V*fP!zmW3( z#i|8f4BV>v|9rFj-!uzY++C}ZL#mTYr%7$zTN+L&hm9JFC*2JGZqtpCN6WIpKd0Kw z_iEpq`nbdXS@VIoo>_|lF;YWqYg)vmYN>zi;s1wU(JUwP7>i@Uy@rFx)9r7Hm5&g| zBV#Ay%AQe#s-vCNboeyp?lG<#(30GEL+N`$1aJ&Ha32wHUJx~%Ymt5jOaWUcr<1b4 zF$hos(r~lpxPEv;YX5iY-3GVAN&4SwIjm(V{y$1iSB5y#ych7@bPe0~r^me~z)#&4 znB8_!iy9(s$Kv<{I?bar*>LJSFAl{kFXaurK-J>PMLkDPudG8 zH)~JhgE#LOLM@ID_EURLGZQC&wI!Z(=58MST%-&j7<3rQ?EJDL^;?ua^cX7mJhr!S z57p>K%tlj=`!BTa?CkaqH~duF2OaiR9nUAq{M=+dq$~{RMf#+#qH@yxfgBU}q3)h^ zpB1x`!(UEF_+cd}v$ZwtvGUk zWEKTcQwJS~lY7xlOcH>4#Ovb+7Xam8*~8extBtX&fftp3Lbr#3eb?1#n1!wRel~#1#I_( z=WfE@zufe*PF@bzYS3ZF>_tmP%DC9Xt{v~eE`Q5TXgK(>*h?%>-n2~^L^uWe8G;Uf zh}aC+i5AKuj(6_*_cU0R^(>j(J&BwE9p*R%bak=nLM={z+N7E2&ztO_R}MC`j-F5a z>^&YB2B@LL@Q0Aywxvz~sl$zvqwopW5#S;`2}uNkz5{vVNnpHt8wjJ{)Xr?+Xmngd zUu)JmcVQEDVoFnn&2REZ{#Fsv13}>@B>|quHK4%#AyvJKuItW6^{?LlDMbI6l^~ z-H!Koyw<^?l8!F2u6DmP0l(hZoxW+Y`jZC|-^^BmroUP>0b@6Ss0;ZwUr6^_LDz)! zrb`@RoPMN1k9G&>@SRRmzZcW_0&H?^+fHZk*!LE`GrFhylmXDfs=dY&;?(b^l|DjP z@Fu`X2{5o>VUT!0>dX^{;%(O_cO?pqe&^kN3<^`aK=Snj@dnr6xHTT;IJ?u!pJCg! zo-(O=vl7R%a4W#zj){ZI@J{8O;X=Hcv3oqb;d1Nz48A&9Zj9p#JF2qG(YGdiz&j7k zEiB%;XVZK7&Qo(R7Pt7NAMVj|C~oG*4(gjL%gx< zpp>BM{<^nL8R%v&54ad-a5{OgAX`myu(n^68?aCWb`m-nI|WK5miW)m$)XR*KO3;2 zWRKdMq<%*<{_N~#_&BxAJGEc6`FpMRcsP0LIB@gi=+tS`^u@dwR?PpgDVt-2C-gx3 zI8V88N_s*FC5aLoTQwUayV34_gEW+!RP&zZ73asMH#m!_4DV;DNV&+J%X$?ecH_o} z8yBD50DWM*7=2#h19fnKdv{Oqu)UK!-?JF*<6q0Ce)?tu6S@<+>2^NQ8W4uBYde~E zPXG~Lv*tP+`SfQ(=UO>m*I)kv%w(=~uC@Cg1=&oAZIEY)mPjA2TBRZC)j*iWic$X8 z%qS525h8xJl5X%|tb8Fet{15$vUOEnLfV=cx|drGjiAWnNV*o<;rehgk(hX;gReqn)r98eO0@ERsILhFEe)aKjcLP%GH_>B3iJmp0Vryp+c*Q{i$_fa_cad-v@ z#T#q{V?+*93k%rjcUboDjNWBx!3B%^%QM$EOZ)gIXPy`*K)`?gdCM*YM&o>@yw=^< zR(S(X@dta6YVNYX_%wUSI*~Y=lDhqI!Ks58!xNgc!R^y`5>XiI{HddsW1yOSn5^%{ z2?i~`IQ+43Z>Z$-ef^ZRN4l=81aT{O6LU11xQclM*Sc`{Bno$Z?cy($!KzsrA-%7P z&q4>3zOy+`y=8dwCjQscx)<+CKcvxrV-+a;PGWqXzX+QB)y-u>_09V$Pu+M2RP2lZ zY04nmr6ekbD;}Q=pfPbq^kpuwD)wWSSP+nft7F(ugz^2r*X&BOMm6?yBCPjai&91} zAsupD?V)k=ny(dE$LP-Xr+B178(O&-a`nvM%L! zB41yzbG&^We&sGh#U+lr^uE>~%6g1vH6G#5Ul6#vF7-QWc0ADVTMuV?+*iNpm7c(u zo&I{C-F}-M>7Omv-%?6B@Al7O@@jwmu2G9zH}zQ?S0rokUY4nK-Rj$kQT7lpB@p0V zd$a$Cxxb8xt7*bOQ34?(Atb>A1W9mr2<|et4(<%@?h*(jID@&gnB%7O0U zg11@u+Unv)^MbtIw094OckuK0LyZQ6nm{dlN4B@xI;(G}Sf8`jp=L4H9wE-UPPbum z2Q1sES*bH;HfNhkH${BT7C4U`AePIv6 zd>-|?hzj3G6r>|URoaze7Yv&VoO7Uhz5O<*tl<|mQ&`$;C9S%)S$5;OSK}M>eR1|6 zP8WGJ2V%7l9sLY@Y(E4WN-xY{ij#2BA5qH~p-6SXFGmo9%O(8LQBDUsqQB8%X?5=2 zQ?1}tw1G%}RDo#*KG=~Oig$qC1jc!A*kHX{2KT{Y=kTgARyNDx>cCQj^X@F&atGdY z>YQrtDJ$o-f4>%XZ10uf!{TFNdm5t!{9P0XE7r6byYv>!fJj^t_=E z&Gu!<52-7Q%pXW^TKy-Q#jglR&Dd>UI)RYbm_?gP@RNSMM8}8#ePOGmoHb_9Qt*Ce8T8)Q!SUJPlm@Q9b0uD2;U6CnWU=PX5?M_c zZGRuy_itkKFb7=vxRTF*EVS}ewQUM-_bswM#ct}v1($J;I5S*n`11vqyuaXJtQD;; zjX=dIQ_JvwLG#wLW8-`5_QyG!{}sUu!O!|y|v-}W+`q-v3TN!M)H-z?%n5C_%ixvVX1asUlxbi!TykwlHyBe z21KJv4M=vOe8>>W38w#WEkcU_i}1P{=M9Q38k_I5SkT?LcR3>5U#}$IW10%rr6NoC z-R!e2UR~t1rZK{BQ8pz0@#kejmVU{WpWBI4hPF|A zL+rKozNfxcM$NMi4YiXFtd@F@L2cNW9O^C18Y%hgS!geksG-^)bRp}wX?81pLrim# zuVuSYDt%p-?>R_R&EAm~_+PAK_XXK}F1RSok_hr23p(tnO=-h>Hf-Zv7%WyMMEx*6`T;3&Kx1Y|AS{Y6XqalGCybRrn9q3e(a$9 zLbiaxB@)!nHLtqdfH{?E6_)mqM#JtU0W-Ph2 zXN~AM{6|3~cKAzW-+n~a^mV5gt`IT`H+D4*u{tzK_;4b<8Te?+wi)R7eq>BR-cSag z*^_OwV?c>jI*e^HW?WJzoAL)yK{A=dbFjPvA43?~Shf{OFS)_wJAI)dF_I(XI2`|M zVwHfO+czO_;&FU!Z8sl#O%*=vK%x58INI#PJJn%YImct&zR>sy`8&?MaKL5-s}%1-n{?sNYBqZo;z*9XliaO$IA5I@6w+O znGL?Xb2!90|CY)Fuvj#X{%UT%yu}OhY8*H3VTtF}njdzf1q3^~2VRfS5DV!H!DHLB zQH3*^lg(d##<(`q7tO+>ea4gF_QBq)!z`eS&^~Y{B&j1YeFwc*9~}haWy2U)!jMsX zGyPGh3Uq*o2#)3=m)z&w(PooQ!!WLbPL`6eXm0sUAltHl1BBV~rhZSZsB4s)$XK8UZM&IOEqemDl^fU$kr=vRm#CQC&aaE-hcFVC8`6 zpNHaXB+MNDrkF|C|4p!xFf;#~Vj%XQ9)FkQ3c}W^zSRe z|K3FYy@7N{fLCQ9#^wgXwr*NLNlYZ{TIZObVwLQfYt!*bR=Q@x8@QK zw$64y1^yw#KR+0i8C4t%Y#ik@I_4Nv;bid=~A`K7Ppgv0dTAI?&`p0Lk_N0{o zPLa*I3so%fYetaardYa^Dpg&ABu@T(NyuJ_@52m_uHFK_w%)_3hI^RjySY8ueSG%; z=`{t5olbi!siPGH@0R)Q#Y4m~4;~Nc{ka4n(-Xd!y~7#t(MtK0ny>$>Cm-*NgC`@w z7Koo1uT0EaB+;p;v*u;Ks%bwQ<)5>!G@ssp=UbnTG9s?1>HaiS-1nu)%Az^FRY9g* zX?;PvF-Eyz+O1FifYxmOgz8f!cm04zJgkf<$@xg!`GWdWrvom`@aa3@Vy)qcOQ-N2 zQ%JYko4%%vBc)Bjw$Ga}>zm;G@6Lst&r46uE*w5LTPf7)G?#&tFG!33?B?)0>%P@^ z)eIta1{2v|3)d84B|m9Bo{gd7k*(D|uh7Hoo}Yf35PuL+aZu1C|>LVTOIbCD@WEZeJZ$%bC+ zjLdjHqGU1phs;2x4#>G>biQmg-%5seF;p8o#hJ4N1q692cNq{bb&r_L1ODisC5f$- zu)^DA#pwd@lbEDF1zj=DTcBoHf$BNuNVhK`34XTyX^lR zMR78D_$NU6sh8&$IA)>Fhe6-+_0!=ak@w&Ta^>Vw8~+V{AnLMI8KiLHd27EYcj?Uc z&|Aq9Q{~C;xmpNO2h4~1*N9F?kHr@`L_tU5Doe7)y8fnw#wN0w-!Rud%yNBmNq&^E zAwc^48zV87K@l`VL@9FBLhbXuNZ=FV#hU@$83e7B!ux15*vO8fv>gJT{__`5v32S- zbYhe*uhC>Ug4W3piS&5?S;&2qc1sA5yUif_O|=8IAh26_Rp=+oV@9J)B-4hrk7qq~PG6)L zD`41ue6}2wZ?dM3-gMlu^{ZU`OXI4gelun$bZESqo;vg6;P{`Hi!zNTmfdd;NF8Vp z@%q_;!!x-HWvvO>$Aw9m@hdvkJ)>mCjEI{G1rEJyn8#|VMk+rZjqW#GM-!aUUN=o zfH{0no(JA?O1ZC&*=8+{s;qeGp8ej(iTMZrIgLzbWJ8g#(4p4XCx4r`S8Um>4^w>Ndb zx%iQr6-3*tLC#>rG|(egJjN2I*=0EQG$cjAjG7bSpiNO(Ogs;qrhF>(;mCiYz}wxj zvc@;Vsa2S4$0UTW1lbDyrl?v0-@Id>;ZWe8W6Ki?bNfjs?^(HGI^^bt0e1_TO0p+I zNyNxg?l>LO@1;mr(luCSujYi#W-z`;rwScE!&gqR`Gv(AZkmj&9l!6 zeHzI>j?{t=62*W;{*E$3Z1S^AB>`?Ie8$d zrS;WEx$7`<--BaAf$;i){bk7Wmm)GSUwWEq>N2Xq|SaRn94xR^fd-cu=zpGIqze;1_c_Waa#1 z&no{u#S`-RZ4StP6pxm3qy3Ffqv3phVb2@Q_m{uGahZCDat*R8_!YAr#B7%c$_Mg+ z#u>uOhJo=EIaJTesZD55rk5t?RhA67gsm1@-!0AT5MfDrg=tkOl~6qC=4Wc9n7*x9}* z6RfvAgkr2*ao3c!a&wktRz^0N{}s(~X<=#DTlbeRo;=LczY@KR!Ym0@bfZfu3xr## zgRZ2t{}fJE$q+u59LJ9QGMF3_M(^kuAZBz$RikR|XpHo6AMcM8m2W7|S9pDL2>J`O z0dF@#p)0qq_4Tw|QKFU9nvUh6y-bFfRSbttp+jjWi&LFeYFXTVa2nrqvx2GRx-C9@ zWTBq(Nc4s_!{0}*K9`$SW39?|A|S8I6;~QLdi_|DBQwH3J@42159f zqS{yFFfC2DxQP+=S`k;VWFVlY=r^s0*deg-nz z0Nr8F@psfk6jZg#D_*HVy)PpvEa!6oM~92ur_|QMUrIp|k(gok{CvNRB%&!5GqNQO z#It`H8N^GYbQPUD+%GY;5+WeJJn-grZ~vk3F_^{Pkrs~v&dLt{_AAlOrl|dc4xMb| zH@wcqv2K^!C&UlD-)H~dO_aY@z<)LBe>C&|SPG2F&W28ZO_qNQ1V%M;V?eQHX5nCA zl!Ta@nmLht0g@uNR<;hxb_Pa}|4VUa6gGEqRDd{$*jn4!+Wa+izA%CSOTfX-_OGT+ zVq#$B2x0vHth{q@F|jfKulBybfZ~M(dF-}-E5!FOcL;O!%R~&)71_?jqNX7c!@~L^ z+JQ(#G7Y0OHHBNjvd%2fvo@coN<3C{HnN-TRt#v@jDl}N6Ss&r6*=cH|cxTv7bDeD@xxB0PteCEjQO0)dcD(^}yXmxP zV1v^?_2f@48aMkgMcO;t2af)bayqwCXVYxus^+pspu=r7wp|fC1xr!RiU&-$+7@VN z+>3X!{10s7{Wv5V*z)H}9s;yGi*x!%zL{(`rRRipc_GN^(zzI1Zog^$ zdj4*kdYPTXdXNsfT-@#Bn~1Q!rr21v)dZ{dsVbM~9hH``)5Kqe?g_XtlN#+!|A1QX z#lV_{LWL8IeM^8>@RT^EmBU!~NDC%g{5y?Q|1W78S^87DfMH#j>~j*os({`!n2xPX!(ZT2yy zL#xrU+Uk=mTuC4D+q341|EHLQC!UnM=~ueU(lJamn6{r-SP0&lY0!ioi&UXBz$Jd! zJ!HLIDzCcI61G@YK7$Nj&>)JLe9HQfs5`BFx)$%#9J7OYze274iX} z+oDq^fjk$ZBp4s83}bPA^5~{XqlJBFadm|&?)L;odo=-V^KH?HD(20P(K`*#wEWAT z+?N&?ab2a>p-s$3m^*Cl|D*&;bi)(f^?dl>{Zn-~Pzu#!29MokwX;;8ywKDq;Q3<>iVkt~+d zz4OYOttmG)4Eib=XH#lbAJ0;`r+F~AJ0T%~&}rm%o&GJ9NwrKCb? zcy#LQ3;=%0Vi?gIk{5W0jgQYK9zWG>aC^%^XHqvD)WOoQuECH9>_ZU?cs>o_pZ0JS zpCu_}@#sBVW|g6Y#__A)+qfUJ?jAM+aeZhsJWN3sOAF*uN6oi~-fBy(g>ExTQn9ns zCq)Xl9D)=ejs~Y`&H#z^&2=-a13*yL4wwbxk}uE3H2?v&Agml6opd_F)X9fNlJPjk zH_KsOjPO>cP+>0B4kpuAFdyM`GZt;tUJ^Y;N73#~=$5t|l-gUoEXDuSK9|C4?8tiv zUMyL$4_y1o1A?Q!>p2b?_)H^Zei}u#+C)D1)5bmj{8BpKzfouTh)$B(ptd5#8tcu+#z;HBK|&QRsW=wus1;j z433}6ka%Mhi!Es$6BDD1_^I8~ww%BLUh?5Fy6=p(;cB&I(Fg{nw4AK9gjGl20&;m& zV>Pqto?je2#v7WkwiC~}eSS7^)s@h6Ra??WNUwXTUeOqdL+hyWpyo};2);C{7!3|d z;J>d`@+_yWEfDP-wy1jT9F1h)mbTwKv84h_yY9EKHhMTcDX3{I5q-FOEc8_iyHyj* z)1I(4qTD2(ADpZ5B=nSq6U(J5Q)>^V9}xBLeNJL7mo~l0J>MohnsB@RtzT{HRMl)C zU5%(#Lgal&-cD8`F1IsxP&6G>jPmU_9P&BCv${w9-Nif92&02GeKFXzj$uia2`LN4!TXQidTVF5)IpC@D{RPj-7zp=0YbJg= zJN4zc)SbAm7*2LkzYr{#C~fe$5`7}p^FG^_h%V}%G=6O20aW@U#@4`wWgk{4cnw@N zp6}QWJnKFqGn14=JI9No!`-^7T3?WSaM%~T+5&A!+8Qb~n-Fp+t0kkIsT4x3j;QuP zf{a_%fMVh(J%*dhH$Q{me0Q@So#Cgt)>gcSI?mUHRGvBD2(md|Zthv$-WnCsf{x*u zG{dUNo{3#rd4U|=L2l~?GRVcKCS_lLyCLm(4cZ5@y$RcjH@vsbDJjw*uu1Xc<>hXH zPm^AA6j(>>YNE;#vq}jXSC_?(7Dp=WTTX0Q!Q}# zG{%)|*yB~@Crv3}GV|M^4|(_T%ksQVx$r5k20WSBsLSh8Y<^}wbsn`|aZCWjo17Sv z?s+L}($zViyFTtp>6I8Aoe~|F5+9wC7M+q3opSH#py^>^VPmrNI6RH*Sr~dmoI^&S zldq&bRZyMZiAPOcAv-5oGf`q0=b%d7J5-KQQKiucdB@LNE)_WJiA(#S8^uOZKm#_FBAj^{Un;_bU>+;aPNG%0`3s z7xYz9+5m!OY}3@@wn4`#2s~PA>Icnx>0B?vr6<4pF7&BlXrJ*F{>~n+9iTwn$-q-E zYa|od_sMgDEtr9Q?}(>k@&fL?#TX{lsg@g+V01-B!|k?TxMQs8#Mi&uR?2y=k41`b z8CA+POSKZpmaOkNV20n)0SNCz{ydGbAX)*fde7nXw}eE!eRWaZkHR?(7rJ=bl81JN z>Xcgfr@KRZj_^tdK^`SJqs{TXj6Bh}RcL`n90p5#SeZN0feA_t@b7ipI{9TtdE!L7#TCQk;dO4St0!709#L^8aC+zEcU@*~k!Sk^fMNtJW~*+l1n%wj(rWd5&jz;` zj9qqSOKsM~(ZdPK)mwPSQCCo6COZMR?~bM2-Pq*2Uru& zRB3%_pwe`$f&ai|jPi<%$0<-$(lf7NH^!!`C8tYdD}~x!9u%CWUX0yu#{nyZ8HYt2trnuYD><_qxA1P(k-UlEE}D&E`of9p`yzq!v4wpYEY6y! zazSTC3!26u^21FKUNBju?ma5&#_D-ib4lclC6QNfDq0S~-YYy&a3~v$Hr^AU;$l0B zmmL|ooFpXM1r#OE`oOWxgIE*m@q$a0q5_$Wtg4+{U0bbY|J(hkyS<)s>j1)9hmd#=0nwb<5o`t30EH{L5Xm@vg3gbf{!WmsTn0Y}%g1+ZlFj zB2_AW2^7tVZ2@{6PgW8%9}yX>Z^UKB42~=bVirZM*X&2Je5{bvdre*7g5FFQ0ZyU& zR=cc|P+cOmkwQQ8i|$1On*Ija9&2PH+SB6vl{W_yhgUP#Q)v_(2@s+l@@HtZX+CKD z7Ib;M(oQNKR<~EyNEWjQKtnz~UIFl)SFO_8^vd}I)l<5(2A8`f!Q`u};0q)_A1^XrYwk-g#}LUDI7nSqqKoN%zq#`cWP? z2Yy1kVH7RpZwQOPJ5mPggFHvNNe62nrSuNL=4Y)5WS>RSxt;sIR;SurJ&WJo#d)(p z^So5BRRHS32Or#y0BPDdKcWUeVqj;4Hv?{ue7|7f6$!ZVP(VBV7V5)@TPwk}eXguw z3I6b7e0=;BCWRzP+`Pxb#gw#J94A!usOfA7p#NdKmd(xF(jx`2bUfXS?-Ky;p(qWn zU2p*c2&@DVkevY-t*rkHC1jS3ji<#Dji#n1eH?wgLpKJ$*Awx>V;v^QdS?&IPFwxU zO?ZYTTqOo4iY=STXZRlyR0>OVwP@^FPBG`s@hqIIr?~RHWH0K=L?i;8Zcu5DIMb`I ze{J0RnLin+nAMls9k8fV=T0_gl}KDRMNPs%lNk@)KablDgYJ?Hco+^?XiQ{sG2Ay2 z-Xb6@!*^869CWv4)P}CAxKaE0d6cx9+)e<Dj5iWp9Qh_s<>wX6` zsPudeKZRTavK-YJL1tM#q3&LlGI}P^wWu_+hX(L{==1bj#vnFeA z-^vlI$cD%K8SgqT09fvAZmE9fnbveAvpp#TzvcYt$`WSq?eWcB7%ooBI$zhN?tFr! z(K7_WPkEfUPL@lB0vDrSDNBZiQn~)3Zi8SL($ybmZOLk-z|FhGB_Y_f6rh^K0H^w$ z{FJI^Rle-H4L_IE@DYf98MKGS0D#b1O^$4szfYLEk#r&T4&xwOoOxKUwMv>hEi?e zQD{gchBFY>)cJ%C8Z9oi8jJk~Hqk9vbJeY$*#I8?Ylo*nlySUv*!qpN52JK5*u{dJ7uRT7s2RHNpHiuerphhL?>Uosq z3{#`y)=)Q*=Y9k*#xDw?RzBTt36R&~IFip?0x~fYvkx$lGB5==Z1iay2n(=EB@pcn zCcKG(xzMgTsOCt21LaOIK*JeyK>Q608@)Gqi!yZy-D8@Hne*v-InGX~KTOn$g5zWR zG7uouF9^gadOaAvU&VLfXah69AFYU7{Y9}l7X-RZvo#0E-pJgV2J1kXdW9iCJ_7>- z3>ET>csdQG{^HYox0BT&5V&D}-)_Nq${Yk1H=luTjOIy;G{1jL;vOVglv&-HKV{!q zRBPX|jF50j%W+ZbPE%{i$2Ur;0v|EGN&J(+X}t-U7~sYYc!p}P4NQanP`o81?P>kP z?kYeS^|XujeE`S?nD#t@PO_+VC|1b&Z4HbA)d4?U zfgULmpS{nfHrV6U{pE-X;OKDaCUt0P#k%2yMQDXptHDamkjBjloeq+&mj!_%IHc0eC2rZtg|7 z``IR>FSdRoUW+U>C^%TUxcT97j=VxDtodd$MLL!$Yhm!Zi@=uG^-z1M#hbkM@^GP1 zHiaXL!R%?tar&2nvYZRK zeCn6Cd*wis1SdejBR?kM_i~$rX=E`t|NLv?1AeDQ6&Kx`WXHa#s_>7PyMMty5fJ8^ z0rdpvn7QkdwMsY~P*5Tc=4x>nb-mWQ!hs{~Wr{iCkwkol!1x{(7N+O>Q0;wpdA2qD z&e=VH+~d+JPb1|9L;t9xBGZfBQ(Xsg{8IrJIFSK>wOEa0iwOYXzW^xpCjfN(0SHY- zE**alRIxvf_G;F$9AaWJS+4gqUZgyhFN^BT9ALi7me<)HN;@9^h86^NFU&b;ekZI$ z@wYU;ca~FSgaF|AuK*xEF8;;5uq^Ilk#MlK{conSN;4eWGBCIOyCP5!{PK>K->Sbim<&5p`=b$zMe=^u z=D&}`{ytK$uqdAM2jx2F`y%&-Kqs7U&v({=aEiIPqHO~3+8%yV&j^>gn;X=gzoq?~ z1=?F7CM}f>k098{$$;#u$2Jt<`doMY!-a{N#YwZ*!uQBi;A3_oSJ&4 z;|FHeTS2PN#(GdbsY}`;0pHn(gs7;fxH#-x#uo?(Q4&508&gRc4s8}yMy$-t%$@e3 zHLVUvMhCQ#;NLrA1@dX!&ga`B|M_Gu5&2!5O98MbHQ?BddQl5-R8K-uQm;IhzEDv2 zrXK6S?w~L13gqD_idn{C`V+DPWEwipC}!;S2o;U2TxO%uD(4aR>NE%4eb!3fJPwvhW6jp5JqP*5dU-6xWkMvyX9qk}d z#t%Po$YyB2{m;kz$!CV&=JzMd&K_jArv;j-mrhdG1$Ii>A-`JZ3 zu)c@F6TNG7#QFc1NO8tnhjMY)DNUrKbAr)4P)O$Zf+M3XQP~?PZ0%4fXsV&1Yy4h! zx1j0A2XYOGux2()-&qDyVgX-ZywD}nXiJuaH++?XYfj{qr*3_ZMpmgbck8AMzz5ex z9)^EMv#`H#4Vq{<#{Az5vT#aH_vVbTI$26bRJPt^`98o+i6@;ACIsCWoe>E5pH>Qy z&)5@S!W|teBg)P&Al;=r$#E$uX+J9jZS-WI)nER%MK0Y1O^M0)wwFEA_MvOa-a!ip z&!NU?4EA}>Cvm@ri2<7g7liYZ0tzcb$e<)>Ce?sixZIw|9!AEf5>qwqxHZgjx=WmA zgh<>pb;~4pvU4qMP#^Q~*Uxt)>hIO+Kizx31H4Y?+cPXcF(iMBiGe-#OwWgIVYrl~ zaXM$uTCa|~Te?!DHg2mQ<-bd5e#7sW7q6lEia<8wcZ>jX`fug7GC}BrqaH8`+<%KQ z_RseJhX+e0n{B@2=7C*thY4qwHPk}00hUMbbN=re%Vc{@%oY=u55Bp%Tc8`Gr%P2u z%%^)N#lk4#X9z#vLg^IPqKut?Ny6Jw$be-PSRffH78;obAqYoE7_i3LxFz9YGA<@2 zyU|7{YGsRr?5ewYTO)hq?3 z-fUIrKP69~l6;H)e2|Eq^s$xkLuC*v6c#}iO7f`}5ka4jZ00kG`Bb{KZEGz|qtV^K z!Y5U)Ue{`k+wY0ki0d~!(|duEA~DN@-?M9EOhVmoD(Uy zKg`%=srBraZw4{E%0A^rGZ(F-5pbfG+O|@Dqnp-fM+1Q+pkh(~=@2Ue*URY>>$OF_ z(abmiR!%u*WGl_%{(NL0SLbAQqk;>!QvPV6b#IJoDcpV(!*L^_aB1+>)RH_f$~^aa|^2&jyZuu6Ar*9e-kSb zEPq7*litDP=~t|XgfZL%>HhlHc%JO+dfvX&MQ))=|BHA3OO>n|Rwa$cWm0!n_17hL zs^!msRa*}{eoCG@LveATK|UT;MSLcv04rTgXFdjm+*^_v!!9+Q+NW z<8SOK>pGvbs(*ET$_cnAOzV${sXU1rQDQ0$M73alJZdw@Vo;72gHA*nqm%t37y)Ej zg{9uRGdBt89+jCUYe(WO*t;0@b8M&d)atrOYke2FZCMP8|IGuIf$yPUpN%s)__krb z4tj`2L#?5^n<{^2XOS>DoOzKyHjb*X+{r%wMK{Ed<&|~dy{npvovCF*-@`PH(7fF< z79ELCOCB^2nXfJ^ghw!1e=Y^u%5k}JT?_{LxNF}%UnE5!n-R8_y?PozMQv4~)bd@U z%@Nl5?5adYJ)L(syrQ(MkWkq3pRO*U(5PiKz6hMaH-#a4?t0-VpP9yzP|gV8=?N$L z32XZKL9GgJDk6ld2}>)X3b~SD&hi-+1x;@w{2G`Z;hxU}f#!Sf#2Rl5&gu>$-*!w_ zt-X?HxxGzDQe2A6sB+#9JUEh{A#Pk1KHWL*Sbqpj=$F``YW7LO_I5f5stSyGCVM~d z7+{%kc%&^1wK@g{9YA_PpFr?QE^jn<=mn)flyNgO4kJY82bmTV45)jLC(u|JH)rJ09E?JZHCZtZVzJ2S*8SID9oS23Be zdk^Js9br9^X;l6tlp++(D)OvZy@j)(|JSn5b=`2+R>&lZ!@|4NNcMn*>3)-odC-HF zY*{e-@^AKDkMTm?-S=*hg3-qGRFssIXWGfL9aoVZ=eg@)vE!jTJ3&eI31`Y~Rd@WV zwjZw4hxKsj?|>}=XRR51E-LALb+~dFpxNpzg?Tjr`J@Z6t%5Bz%c!Mo&Od7EbzzTU zQ@Sig?e==T#*kIb6Jr;1O5X&Hrv|f|T{*s7rXkWYvk?Q=aqWPO!J&BM*iIRFnRu~y z+!y~&y@r6&_ep?{Yj>7T%|nNwoouh+&NCx~ICR4^hoH*eZpnn9F=Yz76nEHL;Ezb#eOyJVpe17>dfIGMp7WJktUTHu zF#?uoG#z3i_ilNKmGfG(Mzs}6c7XZd@$`f;m|xG)X~Fkhxkjx-QmcK>Hg+jDcdhti z3}e!G-(*?~A&WQ#LuC{mp=Pys>A}HWHdY%wwe+W{3-?c4K6+)O4JN4|F3)xK)AVMz z0^AJlcW0!wpH{1mqk(f@JG?4qbE6AJcAxb9zsQ-aG%y?5fUM)I*~eY0=G1TK!(PSC zW67COrUA*=b3%LJC{J^^!9v^~slLJHUQn_A1n8Dqhk0_7R*h~0Ge5nH-K}#4_QvZ^ zPJQ%{S?DTzaae4x_IY}fBld3= z4hP57#_#!|0@O1$)seY}Ozn1iFxZ|H&RIg{7%bEG8&BdC1-!qAIM}R4q(PsP?;Rv^ zNSDU5m+PzMSmyPY`dmDzQqOCNzePMh({6hMj15e)sT>4+^iCkOr~M0>ZwbSab@GH z+nK5fs$Hb(Nv6~oJ6P3&Iu|LjS@7+7C(A+Vu)OYzlG*Tw_f~Nvp%QAxRGW%Xl!PG^5#g2icF$3^e=QN_vEkHt#n|x><&?ub!c8`yL?F2 z5*BQVty;JQ=S+lC85^gSa+8s{hvXNYGu!@?y|=m}&uSSsv?AJ|bfuvyoJX}pn~R;k z2BwjOPbSANGlb-Qy=QWk04>jZ!B;`%A_)AZ(qKi2iF)zsNapsm*YsYmEL=o9gU99b zxK<9+zght9CkKncq%Wh!ys@@D5gUJNiS(4*El2S{~$YMxvP1ELlh?PoI7ac zra7T^OVxu5@Jg+=paO(%ir1#Fd7lvC?s8Hur^5=Jt6`yuiag=PnZAic>kOMLIMZFJ z>GO`TY|{2oc}$k=Eblz69zg=Z`PHgs?!zKd@89M3ujD8;j4TIfJ+s@0=5}aPnjuCNAaoi%_eOM z_mRS&G4D5(XP#rdo zKW}PUP$BDKogqk z_jzfNqYSO^SP$n6%0a)tHSTnNR*MZ|Qx7ll(j+s@?FIjBaz_YYsnM`w-nbsn&#SK^ zs@9OeBFQX;a9LU8yc%ypZJO1p_TNh;dRxg}@dLU(&&R6?+YIjt_jRojo=f%7Ox3WA zck@M93?dB0cY;bj@m{KYwUj_p+Rh@56O?%kA-$=1?a;gC8PQ~h;(R0FpMzbDtIA$d&DU|f0knBx;+c=`|hTtRjp1Cs~IAeg;Sc{ zSv(;XT`Wnviz_UQf%pvZ8AceH;1|SKpdRG)&nb>ER>EZqflHNBm6eT^640c9%HFMq zzLIh>Rvw;8*xmYAy=X=VUWb*T$x)7rJJGh!KI7pGyOGW8!P#3n@7sZ($UR2~YfAah z0-II^8gM(|+EwJrcf;t4Y_Ae!mX1xwr?iS}WAYd&m-hHnIECj@n_y%qooW9Ik@z1S z!o7%!ozA%ohH#q$cns*exrRmSpV9vfL98zWt|n^G?=RDt|SsF z218?vVLMeb&1b|6UKiogdX%_jH*@~M=|mzg<(FwKN7j~_&$mLJ9)N&0%sTVbmcK}Y zeII`BTpUe7h>7+OYi?ELRbpYr;=Lx5m%&ZTLqVjNdR8x8dxHW?C~eRp<)mD^r~spX zT&S1E#@MZ{vI$PZbuh5>f3pB!`SL^KkUm_ad{B4x5#xf zxO9Ak1;smU~-Pcl?OX;Ah8Zt9tnEWkyf zfI^<~UR*-_1@{3VIRs52LT6}REv4m3YO^J%-Mt1=Y&C%|q5P6Vch9nkqQ#t+q27aJ z>$-TVyXxK4a(eSq^wHCKLIV<)A*6%m2ln0tEJaydU3vR@4d5_H{c|0D66^*Ji*L|Ihssy-3a1!54JwfpWbb zG-Cv5zfkZSDX%v#WR3;o?gBU!AC%c5U&dN>d=o|?2mCkOR5L}!;~TqW%?_)KwptTE zXUl(2Jx=O4YQUfq<$X>^V%BKN4>t5PI*nDpQq9=nTd$1$IG`RdMW1q(6})A8E>^0*-iUhy1%|?_KLTB zw^#2CI`Tl%X>oC7Siu+gj|3!$DMc!CFPITeS zc@7&*yfb#Dlw036lnW!o{O{L9JbOEpeLWdhFG7yAJl5-R8SnQ5E`lR!G8hl&TFF{w zL#4|O1)Mh1-d)mr(Ond{=FhY6%uWp-&I3F@cI0K}>>J^h>H5lgOS%(r*thAXr?S6O zd7Hmlo%{qV4Uz!!`9GL@&!{H5t!)%VK}A5NgMf_y(osOVil9=Y2SOJ@4ZU~dK|s1B z^eRYC013T|)X+PGDj+qXO0VZeefGPbckgk=IX}KJK7KJ^-D}M?*IaX6^IFY6OF|aR zUjlVf)E$befs@vKK?pu)^=xLX{htwMH^^yKKCqJA{oJ!u_T!W|RcvP=;4tZPIC7^O zcQQsywzun~J~WtRyl}D>anHo%xPIKRzA2-I20Wa#dh-$a-i~?f9qLhs(z?^{eZVB0 z-1|yV#bLX#xtIqZ2=Ms4M*s?jM}wSFQJ)Q~-zHOjhK>X}I`t-PPWZDzpFivLzjx`6 z?XiE_akQI(`3y*^?)bL$)a)taus`pTB3azamPa>_WAzm(jh$UvvL@_bo^})pcxl`* z2`RZ`I=wSIu=u9_=gR>!?7sjgmL+IB(0+T_eY-*?5Zq~_7#ugXQ4=*-%u&D2=p z-;vy8u)K9X2u(I9A1+n2tQ{#C*mK7x(z%Vg;6Qu4lB6JwcF&25#Jsahaw{=o11`RW z4^eQN4xuyTdi&~v+eb6I4?-kjAbDu!83E0YUr#8cPrR`gsn!u5meC)Wzi51MLi-VKx4cDXD_S{CNfF<#ZllkuE}fHx=Qkh>GrO-D{EVJ_9M z!Ztb?oq~mLs-o5@GhL%U5>3b6Bn_{XQ&D-^Pl|5MwCd>$LA=?Q*mbx))JxYG-O$wH z&TA)%)}e2@Nggr&uU4-+I#L&S$+<8u`3Cw7jMF;mtvt=H6=5-2KhETr-kUnJZJZGs z`T8y?d+uBFHl0H)OQN8I-jRQZJ>0?I(~NC_>#OfGKV!k!Yt$h_5^^?11E-maxPpF+ z)4E8ZzR;0Cd>I=g2=4!y7FgkVr4xlxIUE?9T@LJd-#ZEsQ02kB-hIu@wfU@$3TP(8wO>k+dtj2wW2+EX ziA1^mM-%s>@U`Tt+Q(49kvcETOx0E4le|cnBN-D;HU_#{70nc*tt9mm4u4kHuq3+U zbZ1`*zwUHi-M_kd<6r~jA2DdmOjapqZzDAac+jPS{-BW&a$z<|vC==xBlF2oL8{JP z!5UdFfDOnh5%`>r`5YtjgV30%rcHO^ZCl0NL5X zUe#vYS)j&hY+mUIb<8)L%N*$ynM;=4h2Gg**hb)mztSb0{afFdy&D~@pdQldr@=#2 z91i>O87ooOKbO(}?@G0LD4BicohDr=^`ocP@HVgrQ(-{l%v9^w2g{6Oa4N|d>#=*F z=Hg46FQTWj@bTI8AVZesyf>EGH%VDIl+nCb|K$P{ng&?HP;ryJ9L z4S^z!no+11m~RiR1IuI&xMji51k63`y-)sHOX(fdUY7u1m_{)fnWJO)6Wy5zMmv$C z@iCaos_=FbdLwkldtU6o)9O%nGCi!&whh@^J>Ep2E=Rr1j%5dM z{TtQW|7^GS$W{DkP3My~nkBK0c4?{P&?#Z| zw;gpdoyI7z<^c!Km|K7|FUsg^^o)%89TJ{Du=9~*yi;}q*KLA>^Cq2e;?>rPbEj21 zYf;)Jt?@xMJl0vPt*UMEnZWI<;2MMf_Cg>VA`(w?5!8eymcH+C>}vhrw6dZs7k z=k_{1*<#proX$3F3y?nj=l7g1bsPP|QkU^m$>q?IP+`EuzqQ7k&ZfxMBA|-(Cv_(( z(L;q@B~SmG^pNh;(}1K2Lb=r8YMP!}Q3Y}J-G%sSlWr29DZr%-XROlUSIQ1c$783;up?5dYP_y^kQ$HyJJRy2&O z{;Rgo%CX2f!-Iy_lp$et=Yh|s`9$<(QRnS6RqXG_k`|~N`^;=b+>-ttkjOfo1!+(s^laXE}0BhFn1u_{V zdAFX3`tXm3!WB;YP}}+|Ne{Gr*jy^gd;WZ0EGL-RDbWj{`Lc%5=I35fC||X4+c}BQ z3k1Ocsu2`QE}= zHvte<3Ek7(Wa78snY384_m66y+VH_nwNrjhHTCjcZ6Ve6oe4?ax|IQq^|8&tw;zbx za0!{YEyRrm@SGX+9B^2PdnI=nzm#ypF6~?(kbfP8I@FPp;*wq@6Wivn(lzP!vKkG^vBW7kuczl~rfhaN_-cWasFH;PHt_zNBabMwC?)%m*m<7!`aN9t zw4n&*my$_3%-kP@RakUd3mNwE9;is&01g|?xlddY^gJ+KTj&T`%&by&RCgI(=z%{AkLW$f+>Md>KHI=)lU^n?Sj$@wg#uT z0+M+ds-csT`tvOr2zh5d~B5?FZRD=v`u)sl)6FpMLod%IJn-vy`r%`E-j*Abx+jVMNjW-Mp=Z zw5OfnqaEd~MT&wCUIE=QGaWo06DnK~n#;jnwRE-EQL;H0>4@bTR~C5UnvX&`^Lm?q1e7B&>43WoGvKp}wN!fE`eAZe9s?)s z(R^lOgNg;ZaLh-aP`PF5QnaE=-JTBLu_`V8T=S)W%~8$N%*Z)McrWZ~0XczzY&w)e zPD8ybSLn13@MK#AMuh7Rfk%GF=hK=YBuwI`?KrONZq3@}0U8z#1$zvAxtwz-3xoLx zE>3p1KCBKqJ8C7GoU4I0>Krw`8P2^+LZa#>n+JMV`bZOu?zq>4|8R0_I#+$vt9e#L zKyWn>uJ8m%lfC!)Q)^pk*Hen0?34)yBtJMR7WLYjuC!SOcr}f6`9=3;Y9Q=L$qmmt zhQHv!c9W#iQOPRHIe!B>Z@omp{@0Glvv-CpxY{OF7pr5sYD*Lg@`xk?uu*U{p5N%- zEco_FudS18z@A7;{Lh$-=^}&bXM3}+Qw63y%r*gHjC&kymDBomr|b<3U~{0D-60dk zeCALv`lK{Iz+Yt$&e%$o`WMqovRpQF{t>lVp_)8qMJW%e-&G~@WK>IiNQ74NDJoQ# z`ZM%ClkV;3M5tz#YI%y{`PiN+!eNSHzoA?sYi!Xeu;u+08B5{^A^^pfS<%!kPjPwl z%qGj|G(4Gat>4zeu>%Ac0DQLv_2!-{4g;NUlodQn@KKEYoL=(!tXqXpW0#Ibwoh)D zE2Vnl64%`g0&U;5w8k-2sMTfPWONjYEK?S&mc_~+>*M^5q1XGuKxH=FU0vy{;uS$B6?iNv-;0)nguvVu3m!b5dztSh&>x`CMNydIP6brybg zEv9z4Y+HXSR@mkBaC)oUS#jy2EThoJQUILAJ4s^6CA*&JVWH~`aGTvo-*A#^I+L+W zNt}7ns3X2~HhsxKUP}EI?vQNpo%L@Nj+r@M*S+eQUUr3hH14<>I)B+2ER*E%IY10p z-M3;LR)l&H5UAc_N&FRhyw{*x-u0TvrE}`B(MZ0FX*a}kqsWw_ zZfvc4bmlFxoIJ|%9fSqRDeH{R(L`I@nWAJ{YG-b8`oI*`M|wZF3KWdL37vZZxi1lL zfk5^%lp^*6_OxvGQ0gTKxIR+Y22-FvQ9HK~Z&atZ+4V@($9rVWgW9Lweigvwb+EFV z*#j$Fehk0DdXNfB;?lpxQ;PAWC0l)c-101%Yuw&v&%T9`1nwioF?B!8CZXtOYjMA6 zkL2NmT;>_pLe$N@ZH9J!Lep3Y-Cx21k*Ag&e)?}nQ}ydo+bbWBmqym!%h}pn`rcO4 zgo^kCJ|Q3+IJ)$Kro~j{$DGD*^JxS03BW(Q0jva$D}TcFrNHkb;GdyB8=jVuQZ@_E z`>|cT?xV6Xme{K2Ip6lE!y(1}^!w)?CQm$MGi+b^7!3gA?$bGab&R>yBKLJ?r&c{~ z)PKWl&a(7&l`qnrM|8}^RXtaaz8xk_946Id9Y5bRa#^L~3qrgd`fo^;T8ZMnVWOuB z|4r-*0>5+qf5NuQgD?IIi2Ofa@t>^i@8P(4OKr4aO&0Wm^lt#$1VKAj>qg<{J7TM=s!*o}!2VVV!+oH@<=?7m(nsg# z=Q}w$%}TyTO40%wY!f@?^M0C{o8P=Iz(SJa2ajfh#63uXQ=KgXrAkXn1q21bZYAaA z+9#Vpd)xDlBGTpV#KwFgA$(e)gH=8cRnhNQe&g=+SWBM`=~PR>@gbxJk8YJCaBTaL zX*VSmRkE1d7O;WYAE?38u#@V3A+1j{8)u6l-@On!;dcKJr?Y^PLvl|8tv`J&KJV+k z&6nC*-A+!TuDrawt*xyP8lIS_C>@|n2gpO+SXx_KTUw%!NaRiqa9#k>EV>`8tQp#D z_<{_hDNC&c1b77*OqSa26s?8m5hF3GD=Dwd*}c=B>(NZ@RXt| zA1SR9VhLU@V6s91ccv~RXi_UzN_FY1>?`%DDC6bJMT>Ml$F{*)wAH;$)QXs0;#O3g z>Nbj2L=^Y|l=9=&Tp_K0vnHp^k0mdisC6G9f>$l*|jO(QBk&+7|qH0yIjZPOmPwb z4(x?bCh3~s9GYEM!-64-qPx2RC7dkC(0#cw$tS>DUGL`8O;Kyp9}z!I#dx~_Xl8f5 zpd?5+-7&4ZTY4ew2kfOwjKwYf3Kg#-D{;?yr=IU;3erm6M6Ed{&qU-lPy4~_dn7Ps zeB$(y=9|Yx53$}p=TB@%hwj+Ck~);OZub) zno)tryuAa~r*7yv!@;xpUry zl70dfeB!>bLB8GsqPG&py3p2De=HI=5)7BTo?8`_WtL)H#jK8h2`td?`YZo3e9R~KPOC-Z&1A5^qBr_3`!WpsDLMD% zZaC4Z>CTCg!B1AyddA2`V}xI-dLh({JkwbGd`T>e_fK!s&=Os;Gl%+ug4_9>xhXlapes4Jx z${6zbPB?J!Zw;44J1N@N`!nz3B)@5RM9+Sb<6mAk+tKUNOe`3yt?Vn<&(KDfpvYZj zE)d+YYYv6{OS36ar4`UdZZ=fye0X=4Tgg0KQo*7B?UIjdEI5y;W$*dyeK~Mq(G&w( zv43(JINiXz{`9tDr^;_te1YrMZ#s^bn%6Vmx?mTB>eLKu1RlL#SwWAlCMPE|0;g!~ zgElonzZr5;-$&ENes1MtA<_H`ShnGS+<7I&g6tZ#Cf}6H9uNk68|seCOat%`X|bVF zI8$*Hr@>WOa60rYJdT9{UIf&3|Necjk09W|7z|&8(*XsZ&*vZdetF2V?LiAHL;QAQ z(RAZeQ{3Jqhkn3p-~V6-3GE(>3p)T5hP;kcMk9c>&kJ_LsZ@cP2>8~4<$o`07#c1d zu8Q7B(_{UetH0ic@6>HJ`M3k##LCJlEG!J{^AM2X-OS9}e|L#3d6ObX#23&+QnS6H zBl!H%v0RC*@-&Jcjq{%g5mMBp4;71<5*`fc>up4-yB!`urG~NfnU~i8(DY5JXtKaY z>+*6SBn%BfPI3XKcku-#xDOKAXP7Z8{xuFRpk&)(LGefyLo|{J;&Y0jwtL=25oYDq z$CLrt{2oP0svS!8E0n%IW`PxBx%KNTcd~&AdF6%=SIBuiQTPWRbX@r41cwV0)^(;{ z?js&oNR`en>l05WiNG>+^?ENpk15adDsKdZFj6#L=j=w2raoq+aP)I!F>(x2RIZBr6vmKv~289+@4z zwcN_e`155#_9-}(kz+=PgfhB?WCb$$_4)zd26DrIv|ab)Bu%+M;I^Gmo{5_g8^ou5 z;U=2mH*f%i0ap6iFaT@(PNhk|!_bi$xWZUUm<7hRS}^dP(AAIp0@*FL&QD{cBJ!@D zEDUaLn@qYW$j*0tL$TihYnBHRAW1-=Hpc}C*utc_%x7rQnD-~%^7{5fPH<~$wq{nf zP4E_);y0l9JEF5fnjRSoRMI*-TEBl}OxSVDAwXa`E`mF}qUO8$2S=Kek6b`Uf1BX@ z8Q_#ilQia{#cx{d?LHwe;{eZ*@LPgEiwB&aK);Op*10&hXn;T*^h;0w7kxe_yW2Qv zyy`_r=(RgG(e;)>$W+4}RHk7PsMr(*J>AfVPl$?&(h?51+F~Jk`b^~m6>`LC!mXxd zE#ZABoi$I#gj-(M#{5MBTR-?^HEE1&Ks3Ig>h4*GXuq?&QEv%pWmxwI3O;FtSh(() zbU@Vcfd>p+<+nSR6d+MN(o#D?4opM<^DF(*9VQ2UvQ)Cbvoh5lMUDuu(8i1J#*EF@ zYL`Wi5mGQxjgyjQMYZd#*5~Jc?aefr$dbbZNc7k`oVIen;lo)Pc0FeIJ5@TTBqFI zfBpM(Cwh10D~kK&HQ3*#GZs6ND|2EHK``GQR?Zd^5-WGRy=(8SE(%vh1kW5;cinmv!{7I>vA~$aE z>S3iQ;HUN0;z-Z9K*{%5M3v&JM9iD3wIisbV`FKIZFD&J*AqkPCNr(FPiy(jo2$C8 zQ$dL%L3Ky_t|3AjVmsxA&FwA&A?-cPXQwI}O9L-BAvRPX7LAJMBP}N8I4dU+tS-E>)&+`PP^w8n`QByKAA2y>rY`;2Wg53_>{Z^L{D#A7>Z=%+LG+4~)f;HOp$FG8YN5*a7ebKz}+_^udVCL?P~jgKh6}4ywezcGhaK8#_TE zUOZ_g32VwluYC-w+f(oC!|5|jCtdb+BKcw62EQojUWdH?-mOhuq&^_y6{f1*ho`<- z5;J7G(G?Bj=c$aiNn5es6`Zj{%y6;VOgBszXT0PtwbL@Q>sw z=x5n^A`G%lyO-e1g4+ONV{zy+czUB0N=SYcPe?Yl&d?exFBcqT>9BT~ zkx{C@0LB)O6Zg#Ly?P_7Rl1{D8RPLXdp#}XFvPjSDhfU%A&7zsM0_YB8(Mx#e1X^| z(`U!M+Y@w6IGfMxXrd@#TOIRmt?W`ZYH{;DC&8U}zwIO-3cq_T(9=p+YEs}JTdEtu zHR_NxUu6@BCv}h&-2bLHWqL*8_{sK{xvxFSa^RyIXOt&%2{&Iv!fX3ngvY%y^2gf+ z*1b}69h+TJP~8fSo)X;n3cez^6RVjR3xgN%P?=;nnrIBZ!`aG^e;2oyEM=-)!j8KN zIdiK8&fx-3OC5lbd@pHiy18NKJ<{u=NRpn%I~6tz9{BHcXQd(JOpa#-tzZ>RLyDi< zqwUu#vn`u+(;}}4;4iGviPwMdcC>r8abGOtO`rHIt=4cf%Jija@1>EaxajoHSR@I3i5JkG0zwEi=0?VsteQEoh@v# z88I30@U~>1s4>ahy`;3qlIkgXM|?z8_V7-^{OnnOyGyN5E1fCkaGkY!J7WaA5 zwc0P^t%u=2CF@(*>DOcvulx!`?9Fq;Qd1+{)#|)r%UEh=rTadfJ;)x8?gcMn-g!PJp;kGUE6U zMqVYmY3s20=8O)V?p80Mw|E8L=!E4!dmSu$e{nWUVqs`HIgZaRQM`eKelC>S7>tGq zntDRAb-P^WU4=9U0Sah^8wN^0DcWScQ)ESHac$wfmuo(%U9^jEIxN4;3 zV=h)9+F02IBOBZ$-echIj9HnQ9)K&QPkawACETFJ`6Nc6Vk23q@8+kAj_EfQ07snO zUxUax-(!R9RMI;Pd+_LA2i(Z+Z;&8WsEgm7$=2TSI!wFk^*EOed(~iH6{6^*Clj!k zG-1}NNJx;y^G7v$=yx=YsqOCE#~Nz*_HtEOJRXp537C6-sFA<-d;CqH{8{|{7aQ{b zLR!FgRddb(n!j?B$LpHUzmUqGa0yR+4gm0UQ41I>pX`qO&Dq)qQ_8bm&F2gF-~K3P zPql5v_QUKKtYs8u=sh`bP4%xDIDZFRI18+NTpFWS=ZRe*_(plYsTv*^m z(yA&EB;gg+CV)xM*3xP^3I>4UIahxUoG?f15A=Ks3JS`~%34}v&da@b=J{9GZ?^)`X<% zR8*t_V2z;kH#p;RdspPjJ~lqy+;NXT10W!3YK~`{Lx8i`H0R%Dl$5B|m^O*Ntnq28 zepM5Dk5Ox)=e*&u-wh8tk=t}SJ2?drnEzrND8*H@wY3SGUjD01)(1xHKpuFD-2MF{<44TA@)@XA4#b8|EfF~ z_wJ@)UDx?gDN(bC+Gz|K>~s+L0XixD^*1`;Z(vqb#1IeRbs5aXVZ(F5jHB>PkmN5C z;QH&lv_L`^a<0c{Wi*AU)3-y-6aKFTK=#J<3u((>-XslO#Totoue9Uq43Eta`FpH3 z>~rTQp;BiYp836IbawrvJyc{CMqneT;$9?mdNEUgrF;e#eWUvlaDklqhc8JV3bjji zuISet2@EHS_P4)CkQ^Rk_^DGj^3>(gy_28KTF4y5LeYj|>c|xCZ$tr-clxWs<|Tt^ zAIVIhT&H^Y&R)+Q^*q|L-#%;nP$Jz22D!ezX*!_&ehryc9c6Y_@wT3MK(fG;@m`(H zbJiv9Z$GbHIukr@sN%@1hfHZahAzBXKRWA~!ZwduO%i*jRE?&SOBcP1^t!rr>%nOG zC-Pk4wt=;}lBdI?O$|h^Ni%JA#%&+xR%<@JBKYctXmmYgn;ivYSx`Z6%AM5eIE_am zI=$)5ZJ#UjVd>$FVU|N^0cNzx1Gjq+`mi-7CU{`r58;|0EaYyki+hdD?_$No#A?K1 zf2^OLi5Z>fgfSF*YQ;RV$YoO5i0)fq6T4}4^69(i&>gM>d}XZnewYVE*~D2RAuEqi zC68`j={Fh26TYX7255rG{)u_TsaC~>wTONeS*+iVO#XMW2QD3|weVxF#M*H8hiava z)YsOA9QOQUw7;#aE=6Lf@x`Ku!gNTpbV1FsfHJzvDJJKL|}`+B1e%%q&SXf^07l`JD5gDmcz#U$JgCT`kIm5 z@!pTjHYzxcgPY3JpK1@{-SbT=Ow9YBdNRmPfZGq?rF#LC$06HB#m)dnlFYlbJ)qi%iJR*h|=jka3vSM97CN4 z2RblT`RFq`z1_gX7}0g|Pz?+1VonvX*O|Yfbri4zgRMo7dY02KeN;!XS-f$typIrg zDa!S7SVcOEZgzDrZCmVTD?eunU8zCTv^>9u@oFxMLfKYCe7v85_*X1>R#PrY!YUCz zT>DL@XLYg)Q`;${R^c4}O7)@pmWJeMs?Wjd+0oc*d1|6K&Zi@f9S>ApGNrsR&PM1V zZr?XuUBrld+6S~!2*&iH-G?iQmK#QIK(jQbUsZ>o4w58ccSNab`qMDfGMg*j@k(Tq1Qy|0-ko89sfzZKyDgDFESNu3z@-z}&>_u-4%W2HfS$AcSBn0K}%}#XgfY&TIqk zM!B}CI;#}j@(}u>rgnN|jI$v{z~Vrj%L)~zYpEdrg?Rg(4DP|@E)2JeDHRx?wHOxqV8^N1<$@=eD%^0}?nBawRu`24Ow? zO21C+@_nz8*C);ODua))+eET>TZ$4hG@$l%=V&L^;^hd@Gj4C>w88u7xd*}e$6h(e zB7S;~AL_AKNw@Ep<(>WfF!X%_yIvUScMsoBW`%YN+8uQ030OYV9%K43pBuS>$ggDJ z2f=b(YYfqS@Vn3GvO$R-o;^Sd$b%`UeGJipT45NnfoQa(jr8nb;UW|fLvz-ytRr3X zqUYX+MXG?3Rc4R<+Qi$-9oan0O!lSJv@1nBfQypde$#d^|b{hb3AZMPt$92 zV`F1Cw}az@pX(Q*q_(O1OkeceJbAgDZWwR%eakc$tM*Ew1VkF+BZEw^0t=SsU04WL z7Z}gXXYG^%UdD1$gU0VN1J8bxBTWzj&Fg6 z{p6q;W}tU)>-e$6!0Ihr+A8cMQFK<*@=kH}SD(}N1O*vIzi10`$o*UN&mCJ~wE|7ec>>X?|5F35%qR`VL zkm#3o6k!-6v`)$YbyLe_=~C(aPe3R3eK9Lb^d4&y!kcBdIl|hP+iZQYj`0G!RgpYC z!yUEe&l*TA0`gpxvw~4BH2#uHv9On!$wfmy`k|x>xk+B5%Fac@_={W*Yx7G~$dKP0 z_vNqJGzz75I2M?qL4*t{L3Xjha~^B*f(1F9G@r+MuE!ASjK;~!$#ne1I0+@*sZUxC zzNSdiI35Yn(#b3maab%l`S_y+YL%_mp^A})Yk3|jTX8C*ghlwUzRyf1&G26h(D4NI zDKAiGW9FW3hWA%*zcyk$-RDrS-~@?!8=ys2UO1i}9{@jqffYoMZ!>Ks-|~9B%{EuM zjxO#e&=LOJ zk^CMm8YD?vo_pG-<5WtnFe&)>II`rq21xW3=G;WO^kI2Z*R#xETQJ|X!m%FG+_P_p zL;rT$cgU-Yo2>Q6Y2+u%`e!?--fX!gbuEVIIbsmDWBrn8YmP-%#(a{kDZVmg@%-t{PJV8t> zhtYfuvQCB;oj}i9b_Y@rER@jaq@Tiu@nn}G}3=;u&}$t7-#84@6hM|2UK12s>m)j?J-36UP;3Q zGZ`~%2Xz4W{aud%dS_Yd?ft4#+D~tRUU^gBnreVtp?`J-wIrAR((V9Qf?T=})Kvu@ z{ZJrDWJW6w2L7*eBY`s(Adugs{Dm3LhWUpr9U8q0Xn;~B`G36}2i(Q+w6Fn+8~7hk zcdh&R_lxJ<_%!m*7B8FLwY>lW9!}_m@nR1h^S|8G^|{{58;AO<_(lc6udWFEXY=oX zERJBCUcO91m&5YK2s7d1>mcNJ&P&{1fn_%WcTy0^ch-Ma!TB!L0R0as2)qG>J|XcX z;RTYTcY1!9i~E2^|D%%hQ^->9;QM$?vV#J1g@LweU_t>^0`VWoepMR`>Ur)U%Bs7B zBm#}o{G+PD zN(|81KrcRBi!LaR`z`k(2njP+x>M9`@V11rL}gO>^W{T&dlC28G0I4-GqYBxZpm$6 z$&0fAdZC3-9y~Jz9k`ds|0eU(vi>&d(q4qo zoGY)qhOk$D7c*$62vk5o@OK&M5Kv+_*Bj+Y=#KC{$_K!+1O$4%n2Vvraj5jwIFvBU zs3Ce6KRdgV=5XF?fV@x;A%+Me-Lu|KWfh~v1Z_zwyHWf|Y8;yAy$zWblS`d2&WmiWsQT>S$!o* zI`AIdulfcJPTJe6StCw8*B|wW74Iz;cGlG%SK|a=O;En`!iC{^=H? z5a$r1H+pE?FiaEkP-7w3^1dG^iy_&tZB_^S0gcSr89V(Dqvtc3YIKpH_u&Xn&B5$| z;_;J4$u&vuH9z{&@JfvLY2{GE@x)?atmna~fz!I_!+d0UrS#ild^L&R{CX4@aIpHI zq0=uWlboA;Vfw^yUZj>Ei#;(UX8r~R280Mi!o3uT2{6>aENk7FY`c}N)o(mMB{Tmp z&m0FD_ZJ}~aQ&89NvQZ@<**%7-g9kAz~5L7m@w7T&sbkkfKMP=N;ob4qVnetk`x{Ru?{gh2ns4sRB zqU+naCh2D0lyGE>R$NbxkdqFlYf_0|)FoZy65DfB+wzqbmg0u9lru7Nb{6LG&sw=t zae)%G%d;@vrdm`ab1D7YF7?$n1P%5=>@HAIkzRZM;ud|Ad?9CN2fzEVT8>%Uwq;)# zlROO>^2BoR-BXh}k@||Gb^~`ekh)Z!xc@?;aJba=Ba5J@-qnFwhd71!<@`k&BIJ>a zespHRTD^eQUYS|==)B9dj`~N4ht$+pAd}&kaN#)4imxt+Qgc*{H!_BZ!yHWY8Z2U; z;GS(Bms{6%Pv2D~5g2Q`Tw7lj#{|lb$9e;U@LO?;C4yc=W7av;rtqR2K^8fvpI)zO zdDpzWN2b8jLhkapN-J6|y&8|*JapQ_<4j6xM~!+hAU zr1y_VJe6Ew4+3W7&0{UHl0FL3CzyZPZm;W+8P0{|J9fS>zpqo-oW&HW)bz$VKiD`+?j~r4s`RC0n)?AqwfoTEMA`|#$$gwIx=q!fid~3xE(tG zf-S9Iky%sz`s0*gPR$n6xg{$xNkPa!m4Y#ikEsYp{vl!BrphEWDN_Qv`w69XO+L!w zp|3!KF~Kz9at9Ec%00@z(@aqYIW z&FWih-sBK7FXS>X&o)M(nL(D5hx1A8#y_nn82a&2su@j5O=>rsccb8qO^1B&!uMu2a zi?~4WidwHU`$l1^7mKE=fwfaco`*4--yrW*vx)#hL3}zd-qNzr_c8~9^coBV(?>;mQx#c6ivH{P+0$t3LeT^F0ruyAt~O2 zRk6+EKJ{OrPH;zKdFR^=K%A0DL}h7}P4rrZ=Lvvmd#(?J8Toe6C`6Yp++z)U9B;YV z)=1@trsm#Hyb=%#Zby zFEi7AmX6+aw7QHKy4MC^BZYhHP=`a$D5InxOv?cKP*>>w<3VT$e=r}G4+tzYu9oQK zJ9;9*PMU24ack9-(nfx5cwA7y!jG0)UpZ{h?!HMqU;#*Rjk*AKwA213tdTy;o<)Ax zTPOHpn~YQmGrUD%7@hG2Q2(XlwJs^&_BD5>yQ^rxRo6*sZVYZ$-h9ckmW^qD7LNiY zX57wBK`1o8wd%nn3|qB8jiJTwF(w*8#UaHYB*y$fqV%{d4O1U_Zf|Cc18@TB+SPtLun#}01xzu9F%B>ojLeo|2@T$)&+-9 zv{p#MVOSAdl%_P=6FGOPD{S=xOmh=X6;^FW9(9*p)46AHIbuJnom9j0$c}wtQ6)X4 z{X&5e+8DObph-a6edy8p<4&{W)J{+9w4Pq=y^0E6hBF^*YIlv$O8v}oBqmSU-;d40 zGD`-bAj{-oZGG1iJ>SCpW;j1u7e#vWIJu1?Fb*XFwmr4e^3o#feb9Gl7|o@=80|&A zVk9%)%H3^D1H1nqktrqL5`8$@oU5GZNFHq>LXkE94KHSWF;7><{cMjYkw|s zw*n;|l*@n-0egahjdtwt7axkD zwioZ^E03yG4*JYsuHT4qZ|{dkimA1CdYGC!cqbw8+WGApZ{NxRM=g^|)%!Zr=T!D9 z3Y^YD12gI{;G9aeM;8n}7kkgw3h5s#W~aiRA4OE}o*wU4ub){TH2Jd1#Qw$^f7`4D z+G)uo3X9h)cajA*I87fs#o$9s^9n*RhG@M6OVh&t@i?@Sh-mV5=Npn7MUw>yz$L7V zH`?(OfgJjme!-DH*o9XQlqmbuI{9vTaO*_^%g4ioy0tRSe4z6R0mwr_M$7XHw~8|* za1w+P{2SW+8}j{s09{3PDZ?&@`)6MxZW7QRdOs#ONALf_XaJNN{)KqoX}Fr9&konm zz6QolW$a11BW!qT-D2x) zkqi=abg&2}eyP7EBgU*5m9IN_6kn#W8&X}^cCllcog;&1Eio1*UoZ5i0=-@whr0PI z;Sl@#`xY5KNYS$YVv2Q1cjux3Rp+`qxd{`BQY$$*_fze8)&3Mx zKg?l-5hCnfnxB$^0K)4aF7J->xYf&$MX_2JZ(IBY_0`$33i+Iz*E43yO5Sh1)oaMl z@)Ag7+YkN9@AfTN#G!geKl)GdfEvIJ$JP3w89VKrzhc&M!w}Bs`sXy^2)KcKVjDjfG&`nGmb}&^>v9+U30IkTd|o#e$CFD=#Zh`BSxk zIJ)>kKN1;3TM9o898~ta^zU*|(-DY^(~oldhPjt-t653euNfTuf}D%a)%pqJzWp;n z`vnKKV2rGEG+0!e0XSRtG=Cc`tO~jtn5N0{A)=0vh@@b_!-?|3!nRztm4~s`2$u3%dm~#5E=GiI zNOeot{b_LNL$Vz1txH-aFBW-DWa z$HTd;Jq-9hD&74S&;L3K{L@&@us9cbgEL&JNQ<)KDxyp5DpFpsU7RevfEwXtTggjV z&8Kjlw@>sr$%7x}m5d=HT9ik4l{jkEyQ5yWy=4Pmwe-H1o1cOqqaI$P92g%VRxxRe zx1T+EYH3>F{aA~B40a1a8Uw=RWsX(N^e2EsX_KZ{vI?0XOqci>x5{dqNuEFFuK`(W~s zYaj_>s;E9{bAN%mVJ4tbQm%N)k5@6fmOobX>+S+}69`JYB=i%6M28cmSD1cLgZK9g z-cE}T8E?{mTlnp*w0e4qXVuo7P1X6dg(edz%%DmwA88z_{YFd^2)Rg}s33S{E9 zG661s;kBkQT6xXxhEr)AzIjgSc~P{2Af+OmTv&R}^XK!OPvzzekfBr7BMRWIzLma* zkpq|A+T4EzD}ZHlm@K1ji8Mhelu7-H?X{3xY=zH@l*JP;f|0sOJuHI8G|V-kFtnD~ z2*2t2q^ifB{N-B@p}-}Y6q)LY9U~^(xsWn20m3TwjUn27;!!vT)Vvkh3+*oZjPzjs zNXFsiysj)D8O@|)fNqps7#~oR7yQuJ(f|<$iB3R+&Y6a%)vkuY9VmV($j zI^$n3GJ+O-kYrbrTi)ugoBJL*4!~5Mgt5iPzh--mV>MV-&7R&8gaNF6mAPjZvb$LPmo#nB= zXK)V&G{-N!Tpq2L2YB#r}7uFQwq3vv2R&^YO_{X zcuj=sqWb+F8PUMZ8+lr(<3nk0vu-aen%#e4Y*^PXLb$M4WT@luncwD}$sZt_51U2%UfOW*I+QmV)3C#IpHo zwy1Ccs%UnU9O{oCBq3X9ech%Y&YBq7L79nPPyoy5&JpV(j`e;f4J}>8Vl*ZFvWJKNEe9G*d2anT321F}xbHY}Eo`UrlLR-50T_kE*R-5#ev zx}iHx4D{8b*672fre)#$a9v9QtkQEr>)Y(~)tU^guOmwGibB)@x*g?myeFqt$jZ<5AVIQ~Ufu6-Ed2t0bC0nEnco4!_xpS|Y^Gk4&LL_J-?zUz%ss z04ib!pa=iNN`OOyC<689gs=i3bC={l{vjfydj7?=_ZNTj8~}wjjEJ48>F%Ng_>bC) zX#{_o$-0cV{O%^e)BHQ3_lv-?rM~ztQ7&&#{H6o{=HsZpD)K_4Pl|haYz|NCyo`5C ze%`z)!&LXl>wmFg|JI*hmG}YyjXMX523~`h-y%N8697#KdkpY+ROj4HGgMb;3M&2D zE;=bO5m(j#Sj?yUYcb735S`D>(e%JO?8E@;gvNBQr80Ml{V4G4!<9{H5D%=YTIoZF5K#6mP&OZ9oeFLSm*Y&_aR>elEAlmJl@@mr z??&2NfR1|ep4cAQ3{CDP#~ZwHmugq{+sZx6#H7$5i91v4^MOTz<~cuH&w7xS_wh{T z;%9~T${Lm14(K0?+&p9j5((iL3HowRyB>I+6<^L>9l09PAdUmSic@HGT_V7_%>ozg zH*28B1p$WkY1j zi~uo?h{9eQoq@`41##5515bp=$;p{^C%H-4uT4~1YXk2AeTjrqY$;oH18q zDCVN$MG(@Ay;^h0q8oaDK#eKS^sMEOyA*`Uu7$vgD(;2g>>Iu|hfPRb{CWilZP_4(_h2evMA-ae!LB<`kc&jES?r))MULsm zrZmWsAH3a(Z!DR9C{&sw!n}&BFj-e91ym)Z%_<(=6}~m)o%n0v&}Czy(jomzg;^c& zjt(pE@}u|hevwgY);V>{)fDYwVj`pC-(0Gx6WQzp(Mh(-{h#&&LCC~hc2J@K1ST)2 zuIHdA{v|PJlqje@>u@g4vh37Z9?aPlZ`m!Qups*XaQ4bq&=Ub%qr=Z!4RUY1W;2{yqI6N==EQv!vP`Sv{Ahi+ztTrT=Dv++b0wKwWtL;U z+;Khk==a0BvoO`&9z!)^9SseQ=g;|=oX#Ez{d1ta1|A!Ns~Gn{7NuoGChdtAE?OlV z)byn6QQpEi2Nd649Yk}J*-ia2;4Xix9t4%QRt9X2ssU}PM7Pshx zyVDz3)w+g`qE8~1rt@2Uf@+NGla(`1sKJ2wzQrg1% zi&J2TIqD5?^=y@UnPx;iEI~Ry8bhWK0vLqzipfo@;SurDQ1l&EQ)0X*yn=z@$J-XMggd5A_?$9|W}lp zN`=mGB^r^FR+drX^A#Ds#OI0R!33eK^!L0XxzM$Nctp?ygs5v)UKz0qDC6E|m*NL) zLpwDG8p_@ij;5BZWv}IO9!f54m69*N9uuej_l~ibFHw|VGjd#TUD8*aB}A5s_ug7QeL!`t}glT zYy7kP`;B#V2vPtw;JHZ{*UOVB&V$Dbee6nc{$-K#T=&d8d56Q7(88J{rc2e^9zVNC zzpC>dn^Bh`H*{Y&P|6e%-iplhE6t|T`kV~Xhv7=<>{t3OAYV9J3JN-B*wf3UUJ$*#)C@)*NoF)}zvEZTPTd!?JiVFrn#|Zo3+C`zr>=^1{z746~ z!Je{gYG|l(OMek9_9M$%`wk1swjYu=3YbQBzuq{{_KxcEkfq%N?uo)MTuN$CZyJEz zGbY}kH{^*H#{$@PMtb!a+hFH!}3Q0w*t9V9IFa6(TaXKGb zjKC)OorRy#zIau5o1i3t%~SInlB_rU{3y@fbkwi;fb<3^i!ClqXz>*c!0g}ZmwIY^ z_jMc&=75r823Q**^86!ZdAzzcNuvE_c{FIRv@^n~HY6x!dbb1J%mD9LPW3U@ZZW^lRe5kx=d0yoMMszL% z_Syc@y9hs~5)&Tee}UQSse^N(oc8?%0t4(?#)UX90Y`Zmlz4ii`Ri>h?3*F!yn0D7 zEc3|4rFINLo*9(vPY_~kUSATz-k$oQq&c8( zV>I_wawLrmMM~5_{>N30EW)R7<*K|COWD=&Ff^=|_9RdFm%$rU`i#xX2&$`_8uoTJcr_VdkTWAWt25s;MZ9Pv(ya&y2?1w}L14EV zfz1gg>V68iUkaa7S;*9xt&?N(Y9I^{14>{(OP6?GoVzHarg+M1x8I^W9Jg1b!}c>Or2L`>(%dMeHpg$H?SD4)6~FQExrF`b?o~Yf6kgWM zrr&kP`GQ0X;V9NyYKKpM)g5UB0SV=NysUyZQLs~}!8NKN3@14tzacfZltmM}*Q@)r zZHsLsVsCBNvVx!4p(AF!)bX(`M8u}WTyfu}YWIr@2lVz-?by&;WX-@^atbH>4cPt(dH|Wj#&p)}l*qf;)V3e5uC3~=t#3dtB z%1Vi~jPE%y3GNbi4|_!r1%&do8GX2>WeIhnDiN4ZIhq{IOfUM#Bmn1BPWVn*tB`=5%{K78bkk4XK3Oz84*}0Nd znPu*fcjI{yvSGi$8t=S#Dl<*Vx|75n!X_0sP@(2$g&!@0GP6^)YRVWeSG zI;*8we7ns&)Y;F30r%Pgh{l5*ItNhA8_^h*zAR5lRg()htQ-doy zfS5jsE4Rz;(ztLy0Lge|@=vv?4V{RDZE~O!EwFjgg|#(*z_xE%D|0~KJ;gyEHL;8x z25Wq6geA@AFF*o^L%Gn2e)=+`4VPp{k1oT#bjH1qI