{"componentChunkName":"component---gatsby-theme-spaceout-src-templates-article-template-tsx","path":"/flipper-time-tracker","result":{"pageContext":{"article":{"id":"9ea83f87-b55b-5eb0-b267-2d3874723c40","slug":"/flipper-time-tracker","secret":false,"title":"Flipper Time Tracker","author":"Luke Celitan","date":"June 6th, 2024","dateForSEO":"2024-06-06T00:00:00.000Z","timeToRead":2,"excerpt":"Time tracking app for Flipperzero","subscription":true,"body":"var _excluded = [\"components\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n/* @jsxRuntime classic */\n/* @jsx mdx */\n\nvar _frontmatter = {\n  \"title\": \"Flipper Time Tracker\",\n  \"excerpt\": \"Time tracking app for Flipperzero\",\n  \"date\": \"2024-06-06T00:00:00.000Z\",\n  \"hero\": \"foldersCover.jpg\",\n  \"author\": \"Luke Celitan\",\n  \"appDescription\": \"Productivity\",\n  \"category\": \"Project\",\n  \"tech\": [\"C\"]\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"h2\", {\n    \"id\": \"introduction\"\n  }, \"Introduction\"), mdx(\"p\", null, \"As a security and app developer enthusiast, I\\u2019ve been using Flipper Zero for\\nsome time now. For those who don\\u2019t know, Flipper Zero is a versatile multitool\\ndevice designed for hardware and RF enthusiasts, security researchers, and\\nhobbyists. It\\u2019s a portable gadget that can interact with various digital systems\\nand wireless protocols.\"), mdx(\"p\", null, \"Flipper Zero has a range of capabilities, including reading and emulating RFID\\ncards, interacting with NFC devices, transmitting and receiving radio signals,\\nand communicating with infrared devices. It features a compact design with a\\nmonochrome display, navigation buttons, and an SD card slot for expandable\\nstorage. The device runs on open-source firmware, which is one of its most\\nexciting aspects.\"), mdx(\"p\", null, \"The cool thing about Flipper Zero is that you can write custom applications for\\nit, which is exactly what I\\u2019ve been trying to do. Recently, Flipper allowed Rust\\nlanguage execution, and I jumped into the possibility of writing an application\\nin Rust for Flipper. However, I faced some challenges. The unsafe clusters and\\nthe way Rust is built made it difficult for me to write the apps the way I\\nwanted.\"), mdx(\"p\", null, \"That\\u2019s why I decided to implement the same idea directly in C programming\\nlanguage, often referred to as the father of all languages. These endeavors\\nended up with the creation of Flipper Time Tracker.\"), mdx(\"p\", null, \"Flipper Time Tracker is an application for the Flipper Zero device that allows\\nthe user to track multiple tasks simultaneously. The application uses a CSV file\\nto store and handle task data, which can be easily exported to Excel or similar\\nsoftware for further analysis. This approach also allows for tracking task time\\nin the background or even when the device is switched off!\"), mdx(\"p\", null, mdx(\"img\", {\n    parentName: \"p\",\n    \"src\": \"/e3f31c665b039830cb91370036978638/demo.gif\",\n    \"alt\": \"Demo\"\n  })), mdx(\"h2\", {\n    \"id\": \"features\"\n  }, \"Features\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"track multiple tasks at the same\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"start / stop the task at will, resume tracking when needed.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"mark task as complete\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"edit task details (name, description, price per hour)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"quick continue last used task\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"task running with timer counter view\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"you can download your csv file from \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"apps_data/trackerflipx/data.csv\"))), mdx(\"p\", null, \"This project showcases the potential of Flipper Zero as a platform for custom\\napplication development. The active community of developers and users who create\\nand share applications and modifications for Flipper Zero has been a great\\nsource of inspiration and support throughout this project. It\\u2019s exciting to see\\nhow this compact device can be transformed into a practical tool for time\\nmanagement and productivity.\"), mdx(\"p\", null, \"Checkout this\\n\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/MassivDash/flipper-tracker/blob/main/docs/development.md\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"document\"), \"\\non how to prepare your environment and development for Flipper Zero device.\"), mdx(\"h2\", {\n    \"id\": \"installation\"\n  }, \"Installation\"), mdx(\"p\", null, \"To install the Flipper Time Tracker on your Flipper Zero device, you can use the\\nofficial Flipper Zero App store or download the .fap file directly from the\\n\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/MassivDash/flipper-tracker/releases/tag/v1.0.3\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"github release page\")));\n}\n;\nMDXContent.isMDXComponent = true;","tech":["C"],"category":"Project","appDescription":"Productivity","hero":{"full":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAQDAv/EABYBAQEBAAAAAAAAAAAAAAAAAAABAv/aAAwDAQACEAMQAAABjno4zcVA3vJYgf/EABwQAAICAgMAAAAAAAAAAAAAAAECAAMQExESIv/aAAgBAQABBQKtgyYNbGanmsxnIXgdLfL/AP/EABYRAAMAAAAAAAAAAAAAAAAAAAABEv/aAAgBAwEBPwGWSymUz//EABgRAAMBAQAAAAAAAAAAAAAAAAASUQEC/9oACAECAQE/AWyjZRcgvMP/xAAcEAAABgMAAAAAAAAAAAAAAAAAAQIQETEhQWH/2gAIAQEABj8CUhV2T05dExoYMf/EABsQAQACAwEBAAAAAAAAAAAAAAEAESExQWGx/9oACAEBAAE/IUCpNr8nU7MswJQ9h2rHu4VgWRuOIhuOVssgoT//2gAMAwEAAgADAAAAEBTQPv/EABYRAQEBAAAAAAAAAAAAAAAAAABhAf/aAAgBAwEBPxCKKquv/8QAFhEBAQEAAAAAAAAAAAAAAAAAAGGR/9oACAECAQE/EJtTJkmP/8QAIBABAAICAgEFAAAAAAAAAAAAAREhADFBYVFxgZGh4f/aAAgBAQABPxAIneNz7jWWKmHmojrAOQX0wZqZREeCOTESGFJ2/GFqAuy8UEkWW4kNfODkJ8xtDpwbrQKr6z//2Q==","aspectRatio":1,"src":"/static/eaed1349ae375d7d26cff434c9b9f2c2/58fe7/foldersCover.jpg","srcSet":"/static/eaed1349ae375d7d26cff434c9b9f2c2/e0f30/foldersCover.jpg 236w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/86afd/foldersCover.jpg 472w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/58fe7/foldersCover.jpg 944w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/0ff54/foldersCover.jpg 1200w","srcWebp":"/static/eaed1349ae375d7d26cff434c9b9f2c2/99fbb/foldersCover.webp","srcSetWebp":"/static/eaed1349ae375d7d26cff434c9b9f2c2/77392/foldersCover.webp 236w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/1f177/foldersCover.webp 472w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/99fbb/foldersCover.webp 944w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/9000d/foldersCover.webp 1200w","sizes":"(max-width: 944px) 100vw, 944px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%203c0%202%200%203%202%203v1c-3%202-2%204%200%203%202%200%202-1%202-4-1-3%201-3%204%201%201%201%201%201-1%201H5l2%201%202%204c0%202%200%202-1%201-2-3-3-2-2%200%200%203-3%205-5%204l1%202c2%202%202%203%202%206-1%203-2%205-2%203l-1-1c-2%202-1%20188%200%20188%201-1%203%200%204%201l2%203v-4c0-3%201-3%201-2%200%203%202%206%203%205%202%200%203%203%205%208%200%203%200%203-2%202l-3-4c0-2-1-2-1-1-2%205-2%2011-1%2014l2%203v-3c0-4%202-4%203%200l2%206%201%204%202%204c2%200%204%207%202%209l1%201c3%200%205%208%202%209l-2-5c0-2%200-2-1-1h-5l2-1c3-1%202-5-3-9l-2-3v-2l-1-2-2-1-2-2c0-2%201-3%203-1h1c0-2-3-3-6-2H3c-2-1-3%200-2%202v1l-1%2020%201%2020%202-1h2c2%203%204%202%203-1-2-3%200-3%204%200%203%204%205%204%203%200-3-4-2-4%201-2l3%203c0%201%203%202%2010%202%2010%200%2014%200%2013-2l1-1v-1l1-1%203%201v1c0%202%203%201%204%200s2-1%203%203l2-1h19l3-1%202%201%202%201v-3h8l1-1c0-1%201-2%205-1%205%201%207%201%203-1l-2-1%202-1c3-1%201-3-3-3s-6-2-2-4c2-2%202-2%205-1%202%202%202%202%202-1s0-3%201-1c0%203%200%203%201%202s1-1%202%202l3%203c2%200%205%204%204%207-2%203-1%204%203%204%203%200%204-1%202-2l-1-3-2-3-2-3h3c2%202%207%202%207%201l3%201c3%201%203%201%203%205l-1%204h8c10%200%2010%200%208-6l-1-4v-10l-2%202-1%202-1-2v-5c1-1%200-2-1-3-3-1%200-3%203-2l3-1%203-1c3%200%203%202-1%202-2%200-2%200%200%201l2%201-1%201c-1%200-2%201-2%206l1%206%201%202%201%202v-2l2-1h2l1-1%202-2c1-2%200-3-1-1-2%202-3%201-2-1v-3l1-1%201-1v-1h1l1%201v-2c0-3%202-3%203-1%202%202%202%202%203%201%202-2%203-1%204%201l1%202%201%201c1%202%201%202%202%201l2%203c2%205%205%205%204%200%200-2%200-3%201-1l1%203c1%201%200%203-1%202l-1%202%202%202c2%201%202%201%201-1s-1-2%203-1l4%201%202%201c2%201%205%201%207-2l2-2v1c-1%202-1%202%202%202%202%201%202%201-1%201l-3%201-1%201c-1%201%200%201%201%201%203%200%204%202%202%202l-2%201-4-1h-2l-6%201-5%201%2011%201c10%200%2011%200%2011-2s1-2%203-1c1%201%201%201-1%202-1%201%203%201%2017%201l16-1-7-2-4-1c-1%201-7-1-6-2l-1-3c-2-2%201-2%203%201l3%201v-1c-2-1-1-2%203-2l5-2%202%201v1c2%201%206-2%206-4v-3c0-2%200-2%201%201l1%203%201-3%201-3%201%205%203%206v-3c-2-1-1-3%201-3%202-1%203%200%201%202v1l2-1%203-2c4%200%204%200%202%203s-1%204%201%204l2-1%201-3%204-6%203-7%202-6c1-5%206-14%207-14v6l-1%201h3l1%202c-2%209-2%2010%201%204l4-6a58%2058%200%2001-10%2021l-1%203c0%203%200%203-1%201h-2l1%202c1%200%201%205-1%208%200%201%200%202%202%201%201%200%202-1%201-2-1-2%202-4%206-4%203%200%203%200%202-1v-1l3-1v2c-1%202-1%202%201%202h3c0%201%207-5%207-7l1-1v2l1%203c1%201%204-5%204-7l1-2c2-1%202-1%202%201v2c2%200%201%205-1%208-2%202%203%201%205-1l2-2-1%202c-1%205%205%204%2011-1%205-6%205-6%205-3l3-2%203-4v2c-1%201%200%201%203%201v3l-2-1h-1c-1%203-1%203%201%202v1c0%201-1%202-2%201l-1%201-1%201v-2c0-2%200-2-1-1l-1%201-2%203v3l1-1%202-2c2%200%202%200%201%203s0%203%203%200c2-2%204-1%202%202v1l3-3c1-3%202-3%202%200l-1%203h13l12-1-3-1-4-2c-1-1-1-1%203-1%203%201%204%200%204-1l1-1%201-3c0-3%201-4%203-4s2%200%201%201l-3%208v1l-1%202c0%202%200%202%201%201%201-2%201-2%202-1%200%202%203%203%205%201l1-1%201%201c-1%201%200%201%202%201l4-1%202-2%201%202%203%201c2%200%202%200%201-1-2-1-1-1%206-1%204%200%205%200%203-1l-2-2c1-1%200-1-2-1-3%200-3%200-2-3%202-3%202-3%205-3l3-1a300%20300%200%20002-4l1%207c0%2015%201%208%201-12l-1-20v3l-1%201c-2%200-2%200-1%202%202%202%202%203%200%204%200%200-2%201-2%203l-2%201%202-5v-3c-2%201-1-1%202-5s3-4%201-4c-2%201-3%200-1-5%202-3%202-3%202-1v-8l-1-11v-1c2%200%202-4%202-107V0H259a1505%201505%200%2000-145%202c1-2-1-2-15-2L83%201h1c3%200%204%202%201%203l-2%202h-2l3%203%201-1c0-2%201-2%204%200l5%201c3%200%206%206%204%207v2l-1%201c-4-1-4%203%200%204%202%201%202%201%201%202s-1%201%202%202l4%201%208%205c6%203%209%206%206%207h-3l-2-2c-3-1-3-1-2%201l-3%201-4%202-3%201-1%201%202%201%208%202%203%203%203%202c2-1%206%202%206%205%201%201%201%202%202%201%203-2%2011%201%2013%206l3%204v2c-1%200-4-3-4-6l-3-2-2-1c-1-2-3-1-3%201s-3%201-4-1-1-2-3%201l-2%204-1%202%202-1h1l-2%202v3l2%203%203%203c3%201%203%201%202%204s-1%203%201%203l1%202h-6c-1%201-1%201%204%204l1%202%202%202%203%201%202%201%202%201c2%202%202%202%200%202-2%201%203%206%207%206s5%203%202%206l-1%202%204%203%203%203h-3c-1%201-3%200-4-2-2-2-2-2-4-1l-2%201-1%201%203%203%206%203%204%202c3%200%205%202%205%204s-1%202-3%201l-2%201%204%202c4%200%206%202%205%203l3%203c2%201%203%201%202%202l2%203%203-1%205%205%202%202v1c-2%202%201%204%203%203%202%200%202%200%203%202%200%201%201%202%204%202l4%202c0%205-31-8-49-19l-9-6-4%204c-6%205-7%204-2-2l3-4-12-12C86%2093%2065%2054%2060%2013%2058-2%2059%200%2049%200c-7%200-9%201-9%202v1l-1%202c-1%203-3%203-4%200l-4-3-3-1C28-1%205%200%203%201H2L1%200%200%203m264%2049c-4%202-7%206-8%2010%200%203-1%204-3%205l-4%204c-2%202-2%202%200%202l6-1c3-2%203-2%205%200%203%204%209%206%2013%204l4-2h-4c-5%200-11-5-8-7%201-1%201-1-2-1-3-1-3-1-2-2l2-3c0-6%209-10%2015-7l4%202v-1l-5-3c-4-2-8-3-13%200M163%2089l-1%201-1%201c0%202-8%209-10%209s-2%200-1%201l2%203%206%202%202%201%201%201%201-2%201-2%203-2%204-2v-1c-2-2-3-6-2-6%202%200%200-4-2-5s-3-1-3%201m121%2031l-1%204c-1%201-1%201%201%201%201%200%202%200%201%201-1%200-1%201%201%202v5h1a117087%20117087%200%20004%207v-6a74%2074%200%2001-2-12l-1-4c0-3-4-1-4%202m113%2013l-6%2010c-6%208-12%2024-11%2032l-1%203c-3%200-4%204-4%207%201%203%200%204-1%206-2%201-3%204-4%206%200%202%200%202%201%201h1c0%203%202%202%203-1l2-5v2l1%201v2l-1%204c0%202%200%201%201-1l3-5v-2c-2%200-2-3-1-7v-3c-1-1-1-4%201-4s4%203%203%206c-2%205-2%208-1%208l3-10%204-11c2-3-1-3-4%200l-2%202v-3l1-5c1-1%201-1%201%201v2l2-3c0-3%200-3%201-1%201%201%201%201%202-1v-3l2-6%203-12c0-4%202-8%203-10l1-4-3%204M30%20153l1%202%201%202c2%200%201%205%200%205-2%200%200%205%202%207%202%201%201%202-3%201-1%200%200%203%202%203l1%202h-1c-2-1-2-1-2%201%200%205%207%204%207%200%201-3%201-5-2-5v-1l1-6c0-5%200-6-2-9l-5-3v1m158%2015c-6%206-1%2017%208%2017%204%200%209-3%209-5h-2c-4%204-10%201-9-5%201-4-4-10-6-7m-142%205c-2%202%205%206%2023%2014%2010%204%2014%206%2015%208l2%203%201-1c-1-1%201-2%203-1l12%205c11%203%2016%204%207%200-22-8-32-12-31-14%200-1%2011%202%2010%204l4%201%204%201%204%202h5l-3-2-7-3%2028%209h-6l6%202c7%202%2015%208%2011%208s3%202%2010%202c14%202-1-7-37-21-10-4-12-5-8-7%205-2%2010-1%2014%203s4%202%201-3c-7-8-21-9-28-3-2%202-2%202-9-1-15-5-30-8-31-6m-22%2011l2%202c3%203%203%204%200%203-2%200-2%200-1%201l1%206c1%205%200%206-3%204-1-1-1-1-1%201v3c-2-2-1%202%202%205l3%204h-1c-2-3-2%200%200%204l2%206%201%201c1%200%202-1%201-4%200-4%200-4%202-4s2%201%202%204l1%203c1%201%201%201%201-1%200-4%202-2%203%202v15c-1%201%200%202%201%203%203%201%203%201%203-2%200-5%201-8%202-6%201%201%201%200%201-2%200-3%200-3%201-2l2%202%203%201c2%203%203%201%203-2l1-3v-2l-1-2c0-2%200-2-1-1-1%203-5-1-6-6l-1-4v4c1%205-1%209-2%206-1-1-1%200-1%201l-1%203-3-14c0-5-1-8-2-9v-10c0-9%200-9-4-10l-2%201h-3c-1-2-5-3-5-1m228%204l-2%201-2%201c0%201-1%202-2%201l-3%202-3%202-4%202c-7%205-10%206-14%205-5%200-5%202-1%203h3l-2%203-2%203-2%203-1%204h2l2-1c3-1%204-4%202-5-1-1-1-1%201-1l3%202c0%202%201%201%205-2l3-2-3-2-1-1c2%200%202%200%200-1v-2l3%202v1l1%201%203%201v-1l-1-1a61%2061%200%200116-16c4-3%204-3%202-3l-3%201m117%2017l-2%206-2%206-2%2010%201%204c1-2%201-2%202-1l-1%203v13l1-2c0-1%201-1%202%201%201%203%201%207-1%207v-2l-1-2c-3%201-4%2011-1%2011l1-2c0-3%203-4%203-2l1%203%201-3%203-8-2%203c-1%203-2%202-2-3l1-5c1%200%203-4%203-8l1-3%201-3v-12l1-10-3%203c-4%203-4%205-1%209%202%203%202%204%201%207-1%204-3%206-4%203v-5c1-3%201-5-1-6-2-3-1-9%202-12l1-2-3%202M61%20223l2%205c2%202%202%203%202%206l1%203v-5l1%202%202%204c-1%201%200%203%201%204s1%201%201-2c0-4%200-4%201-1l1%201%205-3%201%202v-6l-2-2c-2%200-7-3-7-5l-1%201c-1%202-1%202-3-2-4-5-5-5-5-2m240%206l-3%202h-8l-7%201%204%201c4%200%205%201%2012%209l6%203h4l-4-2c-3-2-4-4-2-4l-4-2c-7-3-6-3%202-2%209%201%2010%201%205-1-4-3-4-3-2-3h4l2-1c-1-1-5-2-9-1m-194%2013v4l-1%201c-2%201-2%201-1%202l2%205c0%204%203%209%205%208h1l-2%202-2%201-2%201h-2l2%202c1%202%202%202%203%201h2l3-1%204-2%202-1v-2l-1-1-2-2c-2%200-4-5-4-9%200-2-1-4-3-5l-3-5c-1-2-1-2-1%201m18%205c0%204%200%205-1%204h-1l1%202v3c1%200%201%201-1%203v3c2-1%205-2%207-1s1%204%200%203c-3%200-2%201%200%204%202%202%202%203%201%204l-1%203%202-1c1-2%202-11%201-12v-3c0-2%200-3-1-2-1%202-5-5-6-11l-1-5v6m-89-4c-1%204-1%205%201%207v-2c0-3%201-5%203-3%201%202%204%2011%204%2015%201%202%202%203%204%203v-7l-1-6c0-3%200-4-2-5l-9-2M15%20361l-4%201%201%201-1%201h-1l-1%201-1-1c0-3-1-2-3%201-1%202-1%202%203%202h4c1%201%202%202%205%201l7%201h9c5-1%207%200%207%203h3v-2c0-2%200-2%203-2h4l3-1%205-2c1-1%204-1%205%201l1%201%201-1%201-2%202-1-1%202c-1%201-1%202%201%203%202%202%203%201%202-1%200-2%200-2%201-1l3%201%202%201%202%201v-2c-1-1-1-1%201-1%203%202%202%200-2-2s-4-2%202-1l5%201%206-1v-1h-2l-1-1H74l-2%201-2%201c0%202%200%202-1%200l-1-2-22-1a162%20162%200%2000-24%201l-2-1-5%201m130%200v2l-2%202-3%203c0%204-1%204-3-1l-2-3v4c1%203%201%204-1%203l-2%202c0%202%200%202-1%200h-2c-1%201%200%202%201%202v2l-3%201h-7c-5-5-35%202-33%207%201%201%200%201-3%201-2%200-3%200-2%201%202%200%202%201%202%204%200%204%200%204%201%202%201-3%203-3%204-1l-1%202h-1l2%201%201%202h-2c-2-1-7%201-7%203h15c13%200%2015%200%2014-1l-1-4v-2l-1-3c0-2%202-3%202%200l5%203c5%201%207%203%203%203l-2%201%202%201c3%200%204%200%202%201h22c0%202%205%201%209-1l5-3c2%200%206-2%205-3-2-1-1-2%204-3%203%200%204-1%204-2l3-1%203%201%202%201c2%201%203-1%201-2h2l3-1c-1-1%204-5%206-5%203%200%206-3%204-3-2-1-8%201-8%202l-3%201-4-1h-2v-1c2-1%203-2%204-1l3-1-2-2c-2%200-2-2%201-2l2-1-3-1-2%201c0%202-2%201-5-2s-6-4-4-1v4l-1%201c0-2-3-6-5-6l-1-1%202-1c2%200%203%200%202-2s-3-3-2%200l-2-1c-2-2-3-2-10-2l-8%201m198%200c-2%200-2%200-1%202%201%203%200%206-2%205l-2%201h-7c0%204%2012%203%2018-1h3c1%202%200%206-3%206v3c1%201%200%201-1%201-4%201-3%204%200%203%203%200%203%200%202%203-1%202-1%202%203%200%202%200%204-2%203-2-1-2%201-5%203-6%201%200%202-1%202-3l1-2%201%206%201%202v1c-2%200-2%200-1%202h3l4-3%207-1c3-2%204-2%206%200s3%207%201%207l-1-1-1-2-1%202%202%202%201%201h-5c-1-1-1-1-1%201l2%203%202%204c0%202%202%203%205%203l-1-1c-1-2-1-2%201-2l2%202%203%201c2%200%202%200%201-1-2-1-2-1%200-1l4%201c4%203%204%203%204-8l-1-20v-9h-18l-18%201h-21M1%20387v13h8l7-1%201-2%201%201c0%202%201%202%206%202s5%200%204-1l-2-3c0-3-1-5-2-4-1%200-2-1-2-4l-2-7%201-2%202%201v5c1%204%204%205%203%201%200-3%200-3%204-3%203%201%205%200%202-1l-2-3c-1-2%202-1%204%201h2c0-2-1-3-4-3l-5-2-2-1v3c-2%200-5%200-9%202-2%201-3%202-2%205v4l-1-3-3-6c-2-6-3-5-3%201%200%205%200%205-2%203-1-1-2-2%200-3%201-2%200-3-2-2H2v-3c-1-1-1%204-1%2012m49-9l1%203v5c1%201-1%203-6%206-1%201-1%201%204%201l5%201%201%202%201-1%201-2c2%200%202%200%201%202s1%203%203%202c3-2%205-1%205%201%200%203%2014%203%2015%200%200-3-3-6-5-6l1%202c3%202%203%205%200%203s-6-2-6%200l-2%201c-3%200-2-2%202-3l2-1-3-3c-2-2-4-4-5-3l-2-2v-2l2-2h-6l-3-2-2-2c-1-2-3-3-4%200m249%200l-1%201c-1-1-2%202%200%203l1%202v11c-1%203%200%205%201%205l1-2%201-2h2v2c0%202%201%202%2011%202l10-1c0-2-1-4-3-4l-4-5-3-4c0%202-2%201-4-3s-2-4-2%201c0%203%200%202-2%200-5-7-10-10-8-6m-47%2016c-7%201-13%203-13%205a99%2099%200%200030%200v-1l-5-3-4-1h-8'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"regular":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAQDAv/EABYBAQEBAAAAAAAAAAAAAAAAAAABAv/aAAwDAQACEAMQAAABjno4zcVA3vJYgf/EABwQAAICAgMAAAAAAAAAAAAAAAECAAMQExESIv/aAAgBAQABBQKtgyYNbGanmsxnIXgdLfL/AP/EABYRAAMAAAAAAAAAAAAAAAAAAAABEv/aAAgBAwEBPwGWSymUz//EABgRAAMBAQAAAAAAAAAAAAAAAAASUQEC/9oACAECAQE/AWyjZRcgvMP/xAAcEAAABgMAAAAAAAAAAAAAAAAAAQIQETEhQWH/2gAIAQEABj8CUhV2T05dExoYMf/EABsQAQACAwEBAAAAAAAAAAAAAAEAESExQWGx/9oACAEBAAE/IUCpNr8nU7MswJQ9h2rHu4VgWRuOIhuOVssgoT//2gAMAwEAAgADAAAAEBTQPv/EABYRAQEBAAAAAAAAAAAAAAAAAABhAf/aAAgBAwEBPxCKKquv/8QAFhEBAQEAAAAAAAAAAAAAAAAAAGGR/9oACAECAQE/EJtTJkmP/8QAIBABAAICAgEFAAAAAAAAAAAAAREhADFBYVFxgZGh4f/aAAgBAQABPxAIneNz7jWWKmHmojrAOQX0wZqZREeCOTESGFJ2/GFqAuy8UEkWW4kNfODkJ8xtDpwbrQKr6z//2Q==","aspectRatio":1,"src":"/static/eaed1349ae375d7d26cff434c9b9f2c2/1dc0b/foldersCover.jpg","srcSet":"/static/eaed1349ae375d7d26cff434c9b9f2c2/3a5ce/foldersCover.jpg 163w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/05730/foldersCover.jpg 327w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/1dc0b/foldersCover.jpg 653w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/f72c7/foldersCover.jpg 980w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/0ff54/foldersCover.jpg 1200w","srcWebp":"/static/eaed1349ae375d7d26cff434c9b9f2c2/0acdf/foldersCover.webp","srcSetWebp":"/static/eaed1349ae375d7d26cff434c9b9f2c2/ac59e/foldersCover.webp 163w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/7660b/foldersCover.webp 327w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/0acdf/foldersCover.webp 653w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/75470/foldersCover.webp 980w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/9000d/foldersCover.webp 1200w","sizes":"(max-width: 653px) 100vw, 653px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%203c0%202%200%203%202%203v1c-3%202-2%204%200%203%202%200%202-1%202-4-1-3%201-3%204%201%201%201%201%201-1%201H5l2%201%202%204c0%202%200%202-1%201-2-3-3-2-2%200%200%203-3%205-5%204l1%202c2%202%202%203%202%206-1%203-2%205-2%203l-1-1c-2%202-1%20188%200%20188%201-1%203%200%204%201l2%203v-4c0-3%201-3%201-2%200%203%202%206%203%205%202%200%203%203%205%208%200%203%200%203-2%202l-3-4c0-2-1-2-1-1-2%205-2%2011-1%2014l2%203v-3c0-4%202-4%203%200l2%206%201%204%202%204c2%200%204%207%202%209l1%201c3%200%205%208%202%209l-2-5c0-2%200-2-1-1h-5l2-1c3-1%202-5-3-9l-2-3v-2l-1-2-2-1-2-2c0-2%201-3%203-1h1c0-2-3-3-6-2H3c-2-1-3%200-2%202v1l-1%2020%201%2020%202-1h2c2%203%204%202%203-1-2-3%200-3%204%200%203%204%205%204%203%200-3-4-2-4%201-2l3%203c0%201%203%202%2010%202%2010%200%2014%200%2013-2l1-1v-1l1-1%203%201v1c0%202%203%201%204%200s2-1%203%203l2-1h19l3-1%202%201%202%201v-3h8l1-1c0-1%201-2%205-1%205%201%207%201%203-1l-2-1%202-1c3-1%201-3-3-3s-6-2-2-4c2-2%202-2%205-1%202%202%202%202%202-1s0-3%201-1c0%203%200%203%201%202s1-1%202%202l3%203c2%200%205%204%204%207-2%203-1%204%203%204%203%200%204-1%202-2l-1-3-2-3-2-3h3c2%202%207%202%207%201l3%201c3%201%203%201%203%205l-1%204h8c10%200%2010%200%208-6l-1-4v-10l-2%202-1%202-1-2v-5c1-1%200-2-1-3-3-1%200-3%203-2l3-1%203-1c3%200%203%202-1%202-2%200-2%200%200%201l2%201-1%201c-1%200-2%201-2%206l1%206%201%202%201%202v-2l2-1h2l1-1%202-2c1-2%200-3-1-1-2%202-3%201-2-1v-3l1-1%201-1v-1h1l1%201v-2c0-3%202-3%203-1%202%202%202%202%203%201%202-2%203-1%204%201l1%202%201%201c1%202%201%202%202%201l2%203c2%205%205%205%204%200%200-2%200-3%201-1l1%203c1%201%200%203-1%202l-1%202%202%202c2%201%202%201%201-1s-1-2%203-1l4%201%202%201c2%201%205%201%207-2l2-2v1c-1%202-1%202%202%202%202%201%202%201-1%201l-3%201-1%201c-1%201%200%201%201%201%203%200%204%202%202%202l-2%201-4-1h-2l-6%201-5%201%2011%201c10%200%2011%200%2011-2s1-2%203-1c1%201%201%201-1%202-1%201%203%201%2017%201l16-1-7-2-4-1c-1%201-7-1-6-2l-1-3c-2-2%201-2%203%201l3%201v-1c-2-1-1-2%203-2l5-2%202%201v1c2%201%206-2%206-4v-3c0-2%200-2%201%201l1%203%201-3%201-3%201%205%203%206v-3c-2-1-1-3%201-3%202-1%203%200%201%202v1l2-1%203-2c4%200%204%200%202%203s-1%204%201%204l2-1%201-3%204-6%203-7%202-6c1-5%206-14%207-14v6l-1%201h3l1%202c-2%209-2%2010%201%204l4-6a58%2058%200%2001-10%2021l-1%203c0%203%200%203-1%201h-2l1%202c1%200%201%205-1%208%200%201%200%202%202%201%201%200%202-1%201-2-1-2%202-4%206-4%203%200%203%200%202-1v-1l3-1v2c-1%202-1%202%201%202h3c0%201%207-5%207-7l1-1v2l1%203c1%201%204-5%204-7l1-2c2-1%202-1%202%201v2c2%200%201%205-1%208-2%202%203%201%205-1l2-2-1%202c-1%205%205%204%2011-1%205-6%205-6%205-3l3-2%203-4v2c-1%201%200%201%203%201v3l-2-1h-1c-1%203-1%203%201%202v1c0%201-1%202-2%201l-1%201-1%201v-2c0-2%200-2-1-1l-1%201-2%203v3l1-1%202-2c2%200%202%200%201%203s0%203%203%200c2-2%204-1%202%202v1l3-3c1-3%202-3%202%200l-1%203h13l12-1-3-1-4-2c-1-1-1-1%203-1%203%201%204%200%204-1l1-1%201-3c0-3%201-4%203-4s2%200%201%201l-3%208v1l-1%202c0%202%200%202%201%201%201-2%201-2%202-1%200%202%203%203%205%201l1-1%201%201c-1%201%200%201%202%201l4-1%202-2%201%202%203%201c2%200%202%200%201-1-2-1-1-1%206-1%204%200%205%200%203-1l-2-2c1-1%200-1-2-1-3%200-3%200-2-3%202-3%202-3%205-3l3-1a300%20300%200%20002-4l1%207c0%2015%201%208%201-12l-1-20v3l-1%201c-2%200-2%200-1%202%202%202%202%203%200%204%200%200-2%201-2%203l-2%201%202-5v-3c-2%201-1-1%202-5s3-4%201-4c-2%201-3%200-1-5%202-3%202-3%202-1v-8l-1-11v-1c2%200%202-4%202-107V0H259a1505%201505%200%2000-145%202c1-2-1-2-15-2L83%201h1c3%200%204%202%201%203l-2%202h-2l3%203%201-1c0-2%201-2%204%200l5%201c3%200%206%206%204%207v2l-1%201c-4-1-4%203%200%204%202%201%202%201%201%202s-1%201%202%202l4%201%208%205c6%203%209%206%206%207h-3l-2-2c-3-1-3-1-2%201l-3%201-4%202-3%201-1%201%202%201%208%202%203%203%203%202c2-1%206%202%206%205%201%201%201%202%202%201%203-2%2011%201%2013%206l3%204v2c-1%200-4-3-4-6l-3-2-2-1c-1-2-3-1-3%201s-3%201-4-1-1-2-3%201l-2%204-1%202%202-1h1l-2%202v3l2%203%203%203c3%201%203%201%202%204s-1%203%201%203l1%202h-6c-1%201-1%201%204%204l1%202%202%202%203%201%202%201%202%201c2%202%202%202%200%202-2%201%203%206%207%206s5%203%202%206l-1%202%204%203%203%203h-3c-1%201-3%200-4-2-2-2-2-2-4-1l-2%201-1%201%203%203%206%203%204%202c3%200%205%202%205%204s-1%202-3%201l-2%201%204%202c4%200%206%202%205%203l3%203c2%201%203%201%202%202l2%203%203-1%205%205%202%202v1c-2%202%201%204%203%203%202%200%202%200%203%202%200%201%201%202%204%202l4%202c0%205-31-8-49-19l-9-6-4%204c-6%205-7%204-2-2l3-4-12-12C86%2093%2065%2054%2060%2013%2058-2%2059%200%2049%200c-7%200-9%201-9%202v1l-1%202c-1%203-3%203-4%200l-4-3-3-1C28-1%205%200%203%201H2L1%200%200%203m264%2049c-4%202-7%206-8%2010%200%203-1%204-3%205l-4%204c-2%202-2%202%200%202l6-1c3-2%203-2%205%200%203%204%209%206%2013%204l4-2h-4c-5%200-11-5-8-7%201-1%201-1-2-1-3-1-3-1-2-2l2-3c0-6%209-10%2015-7l4%202v-1l-5-3c-4-2-8-3-13%200M163%2089l-1%201-1%201c0%202-8%209-10%209s-2%200-1%201l2%203%206%202%202%201%201%201%201-2%201-2%203-2%204-2v-1c-2-2-3-6-2-6%202%200%200-4-2-5s-3-1-3%201m121%2031l-1%204c-1%201-1%201%201%201%201%200%202%200%201%201-1%200-1%201%201%202v5h1a117087%20117087%200%20004%207v-6a74%2074%200%2001-2-12l-1-4c0-3-4-1-4%202m113%2013l-6%2010c-6%208-12%2024-11%2032l-1%203c-3%200-4%204-4%207%201%203%200%204-1%206-2%201-3%204-4%206%200%202%200%202%201%201h1c0%203%202%202%203-1l2-5v2l1%201v2l-1%204c0%202%200%201%201-1l3-5v-2c-2%200-2-3-1-7v-3c-1-1-1-4%201-4s4%203%203%206c-2%205-2%208-1%208l3-10%204-11c2-3-1-3-4%200l-2%202v-3l1-5c1-1%201-1%201%201v2l2-3c0-3%200-3%201-1%201%201%201%201%202-1v-3l2-6%203-12c0-4%202-8%203-10l1-4-3%204M30%20153l1%202%201%202c2%200%201%205%200%205-2%200%200%205%202%207%202%201%201%202-3%201-1%200%200%203%202%203l1%202h-1c-2-1-2-1-2%201%200%205%207%204%207%200%201-3%201-5-2-5v-1l1-6c0-5%200-6-2-9l-5-3v1m158%2015c-6%206-1%2017%208%2017%204%200%209-3%209-5h-2c-4%204-10%201-9-5%201-4-4-10-6-7m-142%205c-2%202%205%206%2023%2014%2010%204%2014%206%2015%208l2%203%201-1c-1-1%201-2%203-1l12%205c11%203%2016%204%207%200-22-8-32-12-31-14%200-1%2011%202%2010%204l4%201%204%201%204%202h5l-3-2-7-3%2028%209h-6l6%202c7%202%2015%208%2011%208s3%202%2010%202c14%202-1-7-37-21-10-4-12-5-8-7%205-2%2010-1%2014%203s4%202%201-3c-7-8-21-9-28-3-2%202-2%202-9-1-15-5-30-8-31-6m-22%2011l2%202c3%203%203%204%200%203-2%200-2%200-1%201l1%206c1%205%200%206-3%204-1-1-1-1-1%201v3c-2-2-1%202%202%205l3%204h-1c-2-3-2%200%200%204l2%206%201%201c1%200%202-1%201-4%200-4%200-4%202-4s2%201%202%204l1%203c1%201%201%201%201-1%200-4%202-2%203%202v15c-1%201%200%202%201%203%203%201%203%201%203-2%200-5%201-8%202-6%201%201%201%200%201-2%200-3%200-3%201-2l2%202%203%201c2%203%203%201%203-2l1-3v-2l-1-2c0-2%200-2-1-1-1%203-5-1-6-6l-1-4v4c1%205-1%209-2%206-1-1-1%200-1%201l-1%203-3-14c0-5-1-8-2-9v-10c0-9%200-9-4-10l-2%201h-3c-1-2-5-3-5-1m228%204l-2%201-2%201c0%201-1%202-2%201l-3%202-3%202-4%202c-7%205-10%206-14%205-5%200-5%202-1%203h3l-2%203-2%203-2%203-1%204h2l2-1c3-1%204-4%202-5-1-1-1-1%201-1l3%202c0%202%201%201%205-2l3-2-3-2-1-1c2%200%202%200%200-1v-2l3%202v1l1%201%203%201v-1l-1-1a61%2061%200%200116-16c4-3%204-3%202-3l-3%201m117%2017l-2%206-2%206-2%2010%201%204c1-2%201-2%202-1l-1%203v13l1-2c0-1%201-1%202%201%201%203%201%207-1%207v-2l-1-2c-3%201-4%2011-1%2011l1-2c0-3%203-4%203-2l1%203%201-3%203-8-2%203c-1%203-2%202-2-3l1-5c1%200%203-4%203-8l1-3%201-3v-12l1-10-3%203c-4%203-4%205-1%209%202%203%202%204%201%207-1%204-3%206-4%203v-5c1-3%201-5-1-6-2-3-1-9%202-12l1-2-3%202M61%20223l2%205c2%202%202%203%202%206l1%203v-5l1%202%202%204c-1%201%200%203%201%204s1%201%201-2c0-4%200-4%201-1l1%201%205-3%201%202v-6l-2-2c-2%200-7-3-7-5l-1%201c-1%202-1%202-3-2-4-5-5-5-5-2m240%206l-3%202h-8l-7%201%204%201c4%200%205%201%2012%209l6%203h4l-4-2c-3-2-4-4-2-4l-4-2c-7-3-6-3%202-2%209%201%2010%201%205-1-4-3-4-3-2-3h4l2-1c-1-1-5-2-9-1m-194%2013v4l-1%201c-2%201-2%201-1%202l2%205c0%204%203%209%205%208h1l-2%202-2%201-2%201h-2l2%202c1%202%202%202%203%201h2l3-1%204-2%202-1v-2l-1-1-2-2c-2%200-4-5-4-9%200-2-1-4-3-5l-3-5c-1-2-1-2-1%201m18%205c0%204%200%205-1%204h-1l1%202v3c1%200%201%201-1%203v3c2-1%205-2%207-1s1%204%200%203c-3%200-2%201%200%204%202%202%202%203%201%204l-1%203%202-1c1-2%202-11%201-12v-3c0-2%200-3-1-2-1%202-5-5-6-11l-1-5v6m-89-4c-1%204-1%205%201%207v-2c0-3%201-5%203-3%201%202%204%2011%204%2015%201%202%202%203%204%203v-7l-1-6c0-3%200-4-2-5l-9-2M15%20361l-4%201%201%201-1%201h-1l-1%201-1-1c0-3-1-2-3%201-1%202-1%202%203%202h4c1%201%202%202%205%201l7%201h9c5-1%207%200%207%203h3v-2c0-2%200-2%203-2h4l3-1%205-2c1-1%204-1%205%201l1%201%201-1%201-2%202-1-1%202c-1%201-1%202%201%203%202%202%203%201%202-1%200-2%200-2%201-1l3%201%202%201%202%201v-2c-1-1-1-1%201-1%203%202%202%200-2-2s-4-2%202-1l5%201%206-1v-1h-2l-1-1H74l-2%201-2%201c0%202%200%202-1%200l-1-2-22-1a162%20162%200%2000-24%201l-2-1-5%201m130%200v2l-2%202-3%203c0%204-1%204-3-1l-2-3v4c1%203%201%204-1%203l-2%202c0%202%200%202-1%200h-2c-1%201%200%202%201%202v2l-3%201h-7c-5-5-35%202-33%207%201%201%200%201-3%201-2%200-3%200-2%201%202%200%202%201%202%204%200%204%200%204%201%202%201-3%203-3%204-1l-1%202h-1l2%201%201%202h-2c-2-1-7%201-7%203h15c13%200%2015%200%2014-1l-1-4v-2l-1-3c0-2%202-3%202%200l5%203c5%201%207%203%203%203l-2%201%202%201c3%200%204%200%202%201h22c0%202%205%201%209-1l5-3c2%200%206-2%205-3-2-1-1-2%204-3%203%200%204-1%204-2l3-1%203%201%202%201c2%201%203-1%201-2h2l3-1c-1-1%204-5%206-5%203%200%206-3%204-3-2-1-8%201-8%202l-3%201-4-1h-2v-1c2-1%203-2%204-1l3-1-2-2c-2%200-2-2%201-2l2-1-3-1-2%201c0%202-2%201-5-2s-6-4-4-1v4l-1%201c0-2-3-6-5-6l-1-1%202-1c2%200%203%200%202-2s-3-3-2%200l-2-1c-2-2-3-2-10-2l-8%201m198%200c-2%200-2%200-1%202%201%203%200%206-2%205l-2%201h-7c0%204%2012%203%2018-1h3c1%202%200%206-3%206v3c1%201%200%201-1%201-4%201-3%204%200%203%203%200%203%200%202%203-1%202-1%202%203%200%202%200%204-2%203-2-1-2%201-5%203-6%201%200%202-1%202-3l1-2%201%206%201%202v1c-2%200-2%200-1%202h3l4-3%207-1c3-2%204-2%206%200s3%207%201%207l-1-1-1-2-1%202%202%202%201%201h-5c-1-1-1-1-1%201l2%203%202%204c0%202%202%203%205%203l-1-1c-1-2-1-2%201-2l2%202%203%201c2%200%202%200%201-1-2-1-2-1%200-1l4%201c4%203%204%203%204-8l-1-20v-9h-18l-18%201h-21M1%20387v13h8l7-1%201-2%201%201c0%202%201%202%206%202s5%200%204-1l-2-3c0-3-1-5-2-4-1%200-2-1-2-4l-2-7%201-2%202%201v5c1%204%204%205%203%201%200-3%200-3%204-3%203%201%205%200%202-1l-2-3c-1-2%202-1%204%201h2c0-2-1-3-4-3l-5-2-2-1v3c-2%200-5%200-9%202-2%201-3%202-2%205v4l-1-3-3-6c-2-6-3-5-3%201%200%205%200%205-2%203-1-1-2-2%200-3%201-2%200-3-2-2H2v-3c-1-1-1%204-1%2012m49-9l1%203v5c1%201-1%203-6%206-1%201-1%201%204%201l5%201%201%202%201-1%201-2c2%200%202%200%201%202s1%203%203%202c3-2%205-1%205%201%200%203%2014%203%2015%200%200-3-3-6-5-6l1%202c3%202%203%205%200%203s-6-2-6%200l-2%201c-3%200-2-2%202-3l2-1-3-3c-2-2-4-4-5-3l-2-2v-2l2-2h-6l-3-2-2-2c-1-2-3-3-4%200m249%200l-1%201c-1-1-2%202%200%203l1%202v11c-1%203%200%205%201%205l1-2%201-2h2v2c0%202%201%202%2011%202l10-1c0-2-1-4-3-4l-4-5-3-4c0%202-2%201-4-3s-2-4-2%201c0%203%200%202-2%200-5-7-10-10-8-6m-47%2016c-7%201-13%203-13%205a99%2099%200%200030%200v-1l-5-3-4-1h-8'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"narrow":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAQDAv/EABYBAQEBAAAAAAAAAAAAAAAAAAABAv/aAAwDAQACEAMQAAABjno4zcVA3vJYgf/EABwQAAICAgMAAAAAAAAAAAAAAAECAAMQExESIv/aAAgBAQABBQKtgyYNbGanmsxnIXgdLfL/AP/EABYRAAMAAAAAAAAAAAAAAAAAAAABEv/aAAgBAwEBPwGWSymUz//EABgRAAMBAQAAAAAAAAAAAAAAAAASUQEC/9oACAECAQE/AWyjZRcgvMP/xAAcEAAABgMAAAAAAAAAAAAAAAAAAQIQETEhQWH/2gAIAQEABj8CUhV2T05dExoYMf/EABsQAQACAwEBAAAAAAAAAAAAAAEAESExQWGx/9oACAEBAAE/IUCpNr8nU7MswJQ9h2rHu4VgWRuOIhuOVssgoT//2gAMAwEAAgADAAAAEBTQPv/EABYRAQEBAAAAAAAAAAAAAAAAAABhAf/aAAgBAwEBPxCKKquv/8QAFhEBAQEAAAAAAAAAAAAAAAAAAGGR/9oACAECAQE/EJtTJkmP/8QAIBABAAICAgEFAAAAAAAAAAAAAREhADFBYVFxgZGh4f/aAAgBAQABPxAIneNz7jWWKmHmojrAOQX0wZqZREeCOTESGFJ2/GFqAuy8UEkWW4kNfODkJ8xtDpwbrQKr6z//2Q==","aspectRatio":1,"src":"/static/eaed1349ae375d7d26cff434c9b9f2c2/eaa58/foldersCover.jpg","srcSet":"/static/eaed1349ae375d7d26cff434c9b9f2c2/5a3ee/foldersCover.jpg 114w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/41f8f/foldersCover.jpg 229w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/eaa58/foldersCover.jpg 457w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/c309b/foldersCover.jpg 686w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/e3008/foldersCover.jpg 914w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/0ff54/foldersCover.jpg 1200w","srcWebp":"/static/eaed1349ae375d7d26cff434c9b9f2c2/15384/foldersCover.webp","srcSetWebp":"/static/eaed1349ae375d7d26cff434c9b9f2c2/31fce/foldersCover.webp 114w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/e3e25/foldersCover.webp 229w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/15384/foldersCover.webp 457w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/0258d/foldersCover.webp 686w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/64ea2/foldersCover.webp 914w,\n/static/eaed1349ae375d7d26cff434c9b9f2c2/9000d/foldersCover.webp 1200w","sizes":"(max-width: 457px) 100vw, 457px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%203c0%202%200%203%202%203v1c-3%202-2%204%200%203%202%200%202-1%202-4-1-3%201-3%204%201%201%201%201%201-1%201H5l2%201%202%204c0%202%200%202-1%201-2-3-3-2-2%200%200%203-3%205-5%204l1%202c2%202%202%203%202%206-1%203-2%205-2%203l-1-1c-2%202-1%20188%200%20188%201-1%203%200%204%201l2%203v-4c0-3%201-3%201-2%200%203%202%206%203%205%202%200%203%203%205%208%200%203%200%203-2%202l-3-4c0-2-1-2-1-1-2%205-2%2011-1%2014l2%203v-3c0-4%202-4%203%200l2%206%201%204%202%204c2%200%204%207%202%209l1%201c3%200%205%208%202%209l-2-5c0-2%200-2-1-1h-5l2-1c3-1%202-5-3-9l-2-3v-2l-1-2-2-1-2-2c0-2%201-3%203-1h1c0-2-3-3-6-2H3c-2-1-3%200-2%202v1l-1%2020%201%2020%202-1h2c2%203%204%202%203-1-2-3%200-3%204%200%203%204%205%204%203%200-3-4-2-4%201-2l3%203c0%201%203%202%2010%202%2010%200%2014%200%2013-2l1-1v-1l1-1%203%201v1c0%202%203%201%204%200s2-1%203%203l2-1h19l3-1%202%201%202%201v-3h8l1-1c0-1%201-2%205-1%205%201%207%201%203-1l-2-1%202-1c3-1%201-3-3-3s-6-2-2-4c2-2%202-2%205-1%202%202%202%202%202-1s0-3%201-1c0%203%200%203%201%202s1-1%202%202l3%203c2%200%205%204%204%207-2%203-1%204%203%204%203%200%204-1%202-2l-1-3-2-3-2-3h3c2%202%207%202%207%201l3%201c3%201%203%201%203%205l-1%204h8c10%200%2010%200%208-6l-1-4v-10l-2%202-1%202-1-2v-5c1-1%200-2-1-3-3-1%200-3%203-2l3-1%203-1c3%200%203%202-1%202-2%200-2%200%200%201l2%201-1%201c-1%200-2%201-2%206l1%206%201%202%201%202v-2l2-1h2l1-1%202-2c1-2%200-3-1-1-2%202-3%201-2-1v-3l1-1%201-1v-1h1l1%201v-2c0-3%202-3%203-1%202%202%202%202%203%201%202-2%203-1%204%201l1%202%201%201c1%202%201%202%202%201l2%203c2%205%205%205%204%200%200-2%200-3%201-1l1%203c1%201%200%203-1%202l-1%202%202%202c2%201%202%201%201-1s-1-2%203-1l4%201%202%201c2%201%205%201%207-2l2-2v1c-1%202-1%202%202%202%202%201%202%201-1%201l-3%201-1%201c-1%201%200%201%201%201%203%200%204%202%202%202l-2%201-4-1h-2l-6%201-5%201%2011%201c10%200%2011%200%2011-2s1-2%203-1c1%201%201%201-1%202-1%201%203%201%2017%201l16-1-7-2-4-1c-1%201-7-1-6-2l-1-3c-2-2%201-2%203%201l3%201v-1c-2-1-1-2%203-2l5-2%202%201v1c2%201%206-2%206-4v-3c0-2%200-2%201%201l1%203%201-3%201-3%201%205%203%206v-3c-2-1-1-3%201-3%202-1%203%200%201%202v1l2-1%203-2c4%200%204%200%202%203s-1%204%201%204l2-1%201-3%204-6%203-7%202-6c1-5%206-14%207-14v6l-1%201h3l1%202c-2%209-2%2010%201%204l4-6a58%2058%200%2001-10%2021l-1%203c0%203%200%203-1%201h-2l1%202c1%200%201%205-1%208%200%201%200%202%202%201%201%200%202-1%201-2-1-2%202-4%206-4%203%200%203%200%202-1v-1l3-1v2c-1%202-1%202%201%202h3c0%201%207-5%207-7l1-1v2l1%203c1%201%204-5%204-7l1-2c2-1%202-1%202%201v2c2%200%201%205-1%208-2%202%203%201%205-1l2-2-1%202c-1%205%205%204%2011-1%205-6%205-6%205-3l3-2%203-4v2c-1%201%200%201%203%201v3l-2-1h-1c-1%203-1%203%201%202v1c0%201-1%202-2%201l-1%201-1%201v-2c0-2%200-2-1-1l-1%201-2%203v3l1-1%202-2c2%200%202%200%201%203s0%203%203%200c2-2%204-1%202%202v1l3-3c1-3%202-3%202%200l-1%203h13l12-1-3-1-4-2c-1-1-1-1%203-1%203%201%204%200%204-1l1-1%201-3c0-3%201-4%203-4s2%200%201%201l-3%208v1l-1%202c0%202%200%202%201%201%201-2%201-2%202-1%200%202%203%203%205%201l1-1%201%201c-1%201%200%201%202%201l4-1%202-2%201%202%203%201c2%200%202%200%201-1-2-1-1-1%206-1%204%200%205%200%203-1l-2-2c1-1%200-1-2-1-3%200-3%200-2-3%202-3%202-3%205-3l3-1a300%20300%200%20002-4l1%207c0%2015%201%208%201-12l-1-20v3l-1%201c-2%200-2%200-1%202%202%202%202%203%200%204%200%200-2%201-2%203l-2%201%202-5v-3c-2%201-1-1%202-5s3-4%201-4c-2%201-3%200-1-5%202-3%202-3%202-1v-8l-1-11v-1c2%200%202-4%202-107V0H259a1505%201505%200%2000-145%202c1-2-1-2-15-2L83%201h1c3%200%204%202%201%203l-2%202h-2l3%203%201-1c0-2%201-2%204%200l5%201c3%200%206%206%204%207v2l-1%201c-4-1-4%203%200%204%202%201%202%201%201%202s-1%201%202%202l4%201%208%205c6%203%209%206%206%207h-3l-2-2c-3-1-3-1-2%201l-3%201-4%202-3%201-1%201%202%201%208%202%203%203%203%202c2-1%206%202%206%205%201%201%201%202%202%201%203-2%2011%201%2013%206l3%204v2c-1%200-4-3-4-6l-3-2-2-1c-1-2-3-1-3%201s-3%201-4-1-1-2-3%201l-2%204-1%202%202-1h1l-2%202v3l2%203%203%203c3%201%203%201%202%204s-1%203%201%203l1%202h-6c-1%201-1%201%204%204l1%202%202%202%203%201%202%201%202%201c2%202%202%202%200%202-2%201%203%206%207%206s5%203%202%206l-1%202%204%203%203%203h-3c-1%201-3%200-4-2-2-2-2-2-4-1l-2%201-1%201%203%203%206%203%204%202c3%200%205%202%205%204s-1%202-3%201l-2%201%204%202c4%200%206%202%205%203l3%203c2%201%203%201%202%202l2%203%203-1%205%205%202%202v1c-2%202%201%204%203%203%202%200%202%200%203%202%200%201%201%202%204%202l4%202c0%205-31-8-49-19l-9-6-4%204c-6%205-7%204-2-2l3-4-12-12C86%2093%2065%2054%2060%2013%2058-2%2059%200%2049%200c-7%200-9%201-9%202v1l-1%202c-1%203-3%203-4%200l-4-3-3-1C28-1%205%200%203%201H2L1%200%200%203m264%2049c-4%202-7%206-8%2010%200%203-1%204-3%205l-4%204c-2%202-2%202%200%202l6-1c3-2%203-2%205%200%203%204%209%206%2013%204l4-2h-4c-5%200-11-5-8-7%201-1%201-1-2-1-3-1-3-1-2-2l2-3c0-6%209-10%2015-7l4%202v-1l-5-3c-4-2-8-3-13%200M163%2089l-1%201-1%201c0%202-8%209-10%209s-2%200-1%201l2%203%206%202%202%201%201%201%201-2%201-2%203-2%204-2v-1c-2-2-3-6-2-6%202%200%200-4-2-5s-3-1-3%201m121%2031l-1%204c-1%201-1%201%201%201%201%200%202%200%201%201-1%200-1%201%201%202v5h1a117087%20117087%200%20004%207v-6a74%2074%200%2001-2-12l-1-4c0-3-4-1-4%202m113%2013l-6%2010c-6%208-12%2024-11%2032l-1%203c-3%200-4%204-4%207%201%203%200%204-1%206-2%201-3%204-4%206%200%202%200%202%201%201h1c0%203%202%202%203-1l2-5v2l1%201v2l-1%204c0%202%200%201%201-1l3-5v-2c-2%200-2-3-1-7v-3c-1-1-1-4%201-4s4%203%203%206c-2%205-2%208-1%208l3-10%204-11c2-3-1-3-4%200l-2%202v-3l1-5c1-1%201-1%201%201v2l2-3c0-3%200-3%201-1%201%201%201%201%202-1v-3l2-6%203-12c0-4%202-8%203-10l1-4-3%204M30%20153l1%202%201%202c2%200%201%205%200%205-2%200%200%205%202%207%202%201%201%202-3%201-1%200%200%203%202%203l1%202h-1c-2-1-2-1-2%201%200%205%207%204%207%200%201-3%201-5-2-5v-1l1-6c0-5%200-6-2-9l-5-3v1m158%2015c-6%206-1%2017%208%2017%204%200%209-3%209-5h-2c-4%204-10%201-9-5%201-4-4-10-6-7m-142%205c-2%202%205%206%2023%2014%2010%204%2014%206%2015%208l2%203%201-1c-1-1%201-2%203-1l12%205c11%203%2016%204%207%200-22-8-32-12-31-14%200-1%2011%202%2010%204l4%201%204%201%204%202h5l-3-2-7-3%2028%209h-6l6%202c7%202%2015%208%2011%208s3%202%2010%202c14%202-1-7-37-21-10-4-12-5-8-7%205-2%2010-1%2014%203s4%202%201-3c-7-8-21-9-28-3-2%202-2%202-9-1-15-5-30-8-31-6m-22%2011l2%202c3%203%203%204%200%203-2%200-2%200-1%201l1%206c1%205%200%206-3%204-1-1-1-1-1%201v3c-2-2-1%202%202%205l3%204h-1c-2-3-2%200%200%204l2%206%201%201c1%200%202-1%201-4%200-4%200-4%202-4s2%201%202%204l1%203c1%201%201%201%201-1%200-4%202-2%203%202v15c-1%201%200%202%201%203%203%201%203%201%203-2%200-5%201-8%202-6%201%201%201%200%201-2%200-3%200-3%201-2l2%202%203%201c2%203%203%201%203-2l1-3v-2l-1-2c0-2%200-2-1-1-1%203-5-1-6-6l-1-4v4c1%205-1%209-2%206-1-1-1%200-1%201l-1%203-3-14c0-5-1-8-2-9v-10c0-9%200-9-4-10l-2%201h-3c-1-2-5-3-5-1m228%204l-2%201-2%201c0%201-1%202-2%201l-3%202-3%202-4%202c-7%205-10%206-14%205-5%200-5%202-1%203h3l-2%203-2%203-2%203-1%204h2l2-1c3-1%204-4%202-5-1-1-1-1%201-1l3%202c0%202%201%201%205-2l3-2-3-2-1-1c2%200%202%200%200-1v-2l3%202v1l1%201%203%201v-1l-1-1a61%2061%200%200116-16c4-3%204-3%202-3l-3%201m117%2017l-2%206-2%206-2%2010%201%204c1-2%201-2%202-1l-1%203v13l1-2c0-1%201-1%202%201%201%203%201%207-1%207v-2l-1-2c-3%201-4%2011-1%2011l1-2c0-3%203-4%203-2l1%203%201-3%203-8-2%203c-1%203-2%202-2-3l1-5c1%200%203-4%203-8l1-3%201-3v-12l1-10-3%203c-4%203-4%205-1%209%202%203%202%204%201%207-1%204-3%206-4%203v-5c1-3%201-5-1-6-2-3-1-9%202-12l1-2-3%202M61%20223l2%205c2%202%202%203%202%206l1%203v-5l1%202%202%204c-1%201%200%203%201%204s1%201%201-2c0-4%200-4%201-1l1%201%205-3%201%202v-6l-2-2c-2%200-7-3-7-5l-1%201c-1%202-1%202-3-2-4-5-5-5-5-2m240%206l-3%202h-8l-7%201%204%201c4%200%205%201%2012%209l6%203h4l-4-2c-3-2-4-4-2-4l-4-2c-7-3-6-3%202-2%209%201%2010%201%205-1-4-3-4-3-2-3h4l2-1c-1-1-5-2-9-1m-194%2013v4l-1%201c-2%201-2%201-1%202l2%205c0%204%203%209%205%208h1l-2%202-2%201-2%201h-2l2%202c1%202%202%202%203%201h2l3-1%204-2%202-1v-2l-1-1-2-2c-2%200-4-5-4-9%200-2-1-4-3-5l-3-5c-1-2-1-2-1%201m18%205c0%204%200%205-1%204h-1l1%202v3c1%200%201%201-1%203v3c2-1%205-2%207-1s1%204%200%203c-3%200-2%201%200%204%202%202%202%203%201%204l-1%203%202-1c1-2%202-11%201-12v-3c0-2%200-3-1-2-1%202-5-5-6-11l-1-5v6m-89-4c-1%204-1%205%201%207v-2c0-3%201-5%203-3%201%202%204%2011%204%2015%201%202%202%203%204%203v-7l-1-6c0-3%200-4-2-5l-9-2M15%20361l-4%201%201%201-1%201h-1l-1%201-1-1c0-3-1-2-3%201-1%202-1%202%203%202h4c1%201%202%202%205%201l7%201h9c5-1%207%200%207%203h3v-2c0-2%200-2%203-2h4l3-1%205-2c1-1%204-1%205%201l1%201%201-1%201-2%202-1-1%202c-1%201-1%202%201%203%202%202%203%201%202-1%200-2%200-2%201-1l3%201%202%201%202%201v-2c-1-1-1-1%201-1%203%202%202%200-2-2s-4-2%202-1l5%201%206-1v-1h-2l-1-1H74l-2%201-2%201c0%202%200%202-1%200l-1-2-22-1a162%20162%200%2000-24%201l-2-1-5%201m130%200v2l-2%202-3%203c0%204-1%204-3-1l-2-3v4c1%203%201%204-1%203l-2%202c0%202%200%202-1%200h-2c-1%201%200%202%201%202v2l-3%201h-7c-5-5-35%202-33%207%201%201%200%201-3%201-2%200-3%200-2%201%202%200%202%201%202%204%200%204%200%204%201%202%201-3%203-3%204-1l-1%202h-1l2%201%201%202h-2c-2-1-7%201-7%203h15c13%200%2015%200%2014-1l-1-4v-2l-1-3c0-2%202-3%202%200l5%203c5%201%207%203%203%203l-2%201%202%201c3%200%204%200%202%201h22c0%202%205%201%209-1l5-3c2%200%206-2%205-3-2-1-1-2%204-3%203%200%204-1%204-2l3-1%203%201%202%201c2%201%203-1%201-2h2l3-1c-1-1%204-5%206-5%203%200%206-3%204-3-2-1-8%201-8%202l-3%201-4-1h-2v-1c2-1%203-2%204-1l3-1-2-2c-2%200-2-2%201-2l2-1-3-1-2%201c0%202-2%201-5-2s-6-4-4-1v4l-1%201c0-2-3-6-5-6l-1-1%202-1c2%200%203%200%202-2s-3-3-2%200l-2-1c-2-2-3-2-10-2l-8%201m198%200c-2%200-2%200-1%202%201%203%200%206-2%205l-2%201h-7c0%204%2012%203%2018-1h3c1%202%200%206-3%206v3c1%201%200%201-1%201-4%201-3%204%200%203%203%200%203%200%202%203-1%202-1%202%203%200%202%200%204-2%203-2-1-2%201-5%203-6%201%200%202-1%202-3l1-2%201%206%201%202v1c-2%200-2%200-1%202h3l4-3%207-1c3-2%204-2%206%200s3%207%201%207l-1-1-1-2-1%202%202%202%201%201h-5c-1-1-1-1-1%201l2%203%202%204c0%202%202%203%205%203l-1-1c-1-2-1-2%201-2l2%202%203%201c2%200%202%200%201-1-2-1-2-1%200-1l4%201c4%203%204%203%204-8l-1-20v-9h-18l-18%201h-21M1%20387v13h8l7-1%201-2%201%201c0%202%201%202%206%202s5%200%204-1l-2-3c0-3-1-5-2-4-1%200-2-1-2-4l-2-7%201-2%202%201v5c1%204%204%205%203%201%200-3%200-3%204-3%203%201%205%200%202-1l-2-3c-1-2%202-1%204%201h2c0-2-1-3-4-3l-5-2-2-1v3c-2%200-5%200-9%202-2%201-3%202-2%205v4l-1-3-3-6c-2-6-3-5-3%201%200%205%200%205-2%203-1-1-2-2%200-3%201-2%200-3-2-2H2v-3c-1-1-1%204-1%2012m49-9l1%203v5c1%201-1%203-6%206-1%201-1%201%204%201l5%201%201%202%201-1%201-2c2%200%202%200%201%202s1%203%203%202c3-2%205-1%205%201%200%203%2014%203%2015%200%200-3-3-6-5-6l1%202c3%202%203%205%200%203s-6-2-6%200l-2%201c-3%200-2-2%202-3l2-1-3-3c-2-2-4-4-5-3l-2-2v-2l2-2h-6l-3-2-2-2c-1-2-3-3-4%200m249%200l-1%201c-1-1-2%202%200%203l1%202v11c-1%203%200%205%201%205l1-2%201-2h2v2c0%202%201%202%2011%202l10-1c0-2-1-4-3-4l-4-5-3-4c0%202-2%201-4-3s-2-4-2%201c0%203%200%202-2%200-5-7-10-10-8-6m-47%2016c-7%201-13%203-13%205a99%2099%200%200030%200v-1l-5-3-4-1h-8'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"seo":{"src":"/static/eaed1349ae375d7d26cff434c9b9f2c2/0ff54/foldersCover.jpg"}}},"authors":[{"authorsPage":true,"bio":"Hello everybody 👋 !  My name is Luke and I am the creator and owner of the spaceout.pl. Personally, I am a big geek with huge love for Star Wars, Marvel and DC comic books, Funk and 80s music. I take most of my design inspiration from offline experiences like going to art museums, galleries and working with other creative people on various projects. I also work with various Activist and NGO groups as a pro-bono designer and developer.\n","id":"f69d27c7-7f9a-5fbd-b05d-1a324fd10c0a","name":"Luke Celitan","featured":true,"social":[{"url":"https://www.facebook.com/spaceout/"},{"url":"https://twitter.com/spaceout.pl"},{"url":"https://www.instagram.com/spaceout.pl/"},{"url":"https://huggingface.co/MassivDash"},{"url":"https://bsky.app/profile/lukecelitan.bsky.social"}],"slug":"/authors/luke-celitan","avatar":{"small":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGQABAAIDAAAAAAAAAAAAAAAAAAIFAQME/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAABvOTVgtERIAH/xAAaEAEBAQEAAwAAAAAAAAAAAAACAQMEABAS/9oACAEBAAEFAmoDjs0/Oq1a9kUzN+j7/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAgEBPwEf/8QAHhAAAgEDBQAAAAAAAAAAAAAAAQIAAxESECAxMlH/2gAIAQEABj8CLHgTGqmBPXSlTANsrmKyXLK0B92f/8QAHhABAAECBwAAAAAAAAAAAAAAAREAIRAgMUFhcdH/2gAIAQEAAT8hUmKFDbjke4JaIOG01Fthsd0YugnJ/9oADAMBAAIAAwAAABDzzzz/xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/EB//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/EB//xAAfEAEBAAEDBQEAAAAAAAAAAAABETEAQWEQICFxgZH/2gAIAQEAAT8QhmFXf0c6oSU1s8jwz0W5QpAeFf1+Gp7aimCmBvvoV0CRyUvZ/9k=","aspectRatio":1,"src":"/static/4f53b0980dc97328dd1294bbc374fd0e/fa1ea/spaceghost.jpg","srcSet":"/static/4f53b0980dc97328dd1294bbc374fd0e/afb2b/spaceghost.jpg 13w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/7c20e/spaceghost.jpg 25w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/fa1ea/spaceghost.jpg 50w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/03612/spaceghost.jpg 75w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/61cdf/spaceghost.jpg 100w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/442ab/spaceghost.jpg 305w","srcWebp":"/static/4f53b0980dc97328dd1294bbc374fd0e/e7b2c/spaceghost.webp","srcSetWebp":"/static/4f53b0980dc97328dd1294bbc374fd0e/58718/spaceghost.webp 13w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/74aad/spaceghost.webp 25w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/e7b2c/spaceghost.webp 50w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/ed320/spaceghost.webp 75w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/66016/spaceghost.webp 100w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/85828/spaceghost.webp 305w","sizes":"(max-width: 50px) 100vw, 50px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M189%2065A519%20519%200%200065%20299c-5%2020-5%2018%203%2015%208-4%2039-10%2057-12%2011-1%2010%200%2010-11%200-29%206-103%2010-121%204-21%2016-36%2033-43%206-2%208-2%2020-2%2018%200%2024%202%2036%2013%2020%2021%2025%2046%2029%20138l2%2026h10a267%20267%200%200168%2014l-6-26A607%20607%200%2000218%2071c-10-10-15-15-18-15-2%200-6%203-11%209m47%20129c-14%208-26%2015-26%2017%200%203%2018%205%2024%202%205-3%209-10%209-18%200-5%200-5-7-1m-82%201l1%205c1%2011%209%2018%2020%2017%207-1%2013-3%2013-5s-32-19-34-17'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"medium":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGQABAAIDAAAAAAAAAAAAAAAAAAIFAQME/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAABvOTVgtERIAH/xAAaEAEBAQEAAwAAAAAAAAAAAAACAQMEABAS/9oACAEBAAEFAmoDjs0/Oq1a9kUzN+j7/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAgEBPwEf/8QAHhAAAgEDBQAAAAAAAAAAAAAAAQIAAxESECAxMlH/2gAIAQEABj8CLHgTGqmBPXSlTANsrmKyXLK0B92f/8QAHhABAAECBwAAAAAAAAAAAAAAAREAIRAgMUFhcdH/2gAIAQEAAT8hUmKFDbjke4JaIOG01Fthsd0YugnJ/9oADAMBAAIAAwAAABDzzzz/xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/EB//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/EB//xAAfEAEBAAEDBQEAAAAAAAAAAAABETEAQWEQICFxgZH/2gAIAQEAAT8QhmFXf0c6oSU1s8jwz0W5QpAeFf1+Gp7aimCmBvvoV0CRyUvZ/9k=","aspectRatio":1,"src":"/static/4f53b0980dc97328dd1294bbc374fd0e/61cdf/spaceghost.jpg","srcSet":"/static/4f53b0980dc97328dd1294bbc374fd0e/7c20e/spaceghost.jpg 25w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/fa1ea/spaceghost.jpg 50w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/61cdf/spaceghost.jpg 100w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/59538/spaceghost.jpg 150w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/fd013/spaceghost.jpg 200w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/442ab/spaceghost.jpg 305w","srcWebp":"/static/4f53b0980dc97328dd1294bbc374fd0e/66016/spaceghost.webp","srcSetWebp":"/static/4f53b0980dc97328dd1294bbc374fd0e/74aad/spaceghost.webp 25w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/e7b2c/spaceghost.webp 50w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/66016/spaceghost.webp 100w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/d9b14/spaceghost.webp 150w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/6b183/spaceghost.webp 200w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/85828/spaceghost.webp 305w","sizes":"(max-width: 100px) 100vw, 100px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M189%2065A519%20519%200%200065%20299c-5%2020-5%2018%203%2015%208-4%2039-10%2057-12%2011-1%2010%200%2010-11%200-29%206-103%2010-121%204-21%2016-36%2033-43%206-2%208-2%2020-2%2018%200%2024%202%2036%2013%2020%2021%2025%2046%2029%20138l2%2026h10a267%20267%200%200168%2014l-6-26A607%20607%200%2000218%2071c-10-10-15-15-18-15-2%200-6%203-11%209m47%20129c-14%208-26%2015-26%2017%200%203%2018%205%2024%202%205-3%209-10%209-18%200-5%200-5-7-1m-82%201l1%205c1%2011%209%2018%2020%2017%207-1%2013-3%2013-5s-32-19-34-17'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"large":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGQABAAIDAAAAAAAAAAAAAAAAAAIFAQME/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAABvOTVgtERIAH/xAAaEAEBAQEAAwAAAAAAAAAAAAACAQMEABAS/9oACAEBAAEFAmoDjs0/Oq1a9kUzN+j7/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAgEBPwEf/8QAHhAAAgEDBQAAAAAAAAAAAAAAAQIAAxESECAxMlH/2gAIAQEABj8CLHgTGqmBPXSlTANsrmKyXLK0B92f/8QAHhABAAECBwAAAAAAAAAAAAAAAREAIRAgMUFhcdH/2gAIAQEAAT8hUmKFDbjke4JaIOG01Fthsd0YugnJ/9oADAMBAAIAAwAAABDzzzz/xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/EB//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/EB//xAAfEAEBAAEDBQEAAAAAAAAAAAABETEAQWEQICFxgZH/2gAIAQEAAT8QhmFXf0c6oSU1s8jwz0W5QpAeFf1+Gp7aimCmBvvoV0CRyUvZ/9k=","aspectRatio":1,"src":"/static/4f53b0980dc97328dd1294bbc374fd0e/442ab/spaceghost.jpg","srcSet":"/static/4f53b0980dc97328dd1294bbc374fd0e/a2637/spaceghost.jpg 82w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/15203/spaceghost.jpg 164w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/442ab/spaceghost.jpg 305w","srcWebp":"/static/4f53b0980dc97328dd1294bbc374fd0e/85828/spaceghost.webp","srcSetWebp":"/static/4f53b0980dc97328dd1294bbc374fd0e/2d087/spaceghost.webp 82w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/29d87/spaceghost.webp 164w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/85828/spaceghost.webp 305w","sizes":"(max-width: 305px) 100vw, 305px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M189%2065A519%20519%200%200065%20299c-5%2020-5%2018%203%2015%208-4%2039-10%2057-12%2011-1%2010%200%2010-11%200-29%206-103%2010-121%204-21%2016-36%2033-43%206-2%208-2%2020-2%2018%200%2024%202%2036%2013%2020%2021%2025%2046%2029%20138l2%2026h10a267%20267%200%200168%2014l-6-26A607%20607%200%2000218%2071c-10-10-15-15-18-15-2%200-6%203-11%209m47%20129c-14%208-26%2015-26%2017%200%203%2018%205%2024%202%205-3%209-10%209-18%200-5%200-5-7-1m-82%201l1%205c1%2011%209%2018%2020%2017%207-1%2013-3%2013-5s-32-19-34-17'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"}}}],"basePath":"/","tech":["C"],"category":"Project","slug":"/flipper-time-tracker","id":"9ea83f87-b55b-5eb0-b267-2d3874723c40","title":"Flipper Time Tracker","appDescription":"Productivity","mailchimp":false,"next":[{"id":"ea25109b-23d1-53da-86ff-d9c58a1ea842","slug":"/folders-files-and-everything-in-between","secret":false,"title":"Folders, Files and everything in between","author":"Luke Celitan","date":"June 6th, 2024","dateForSEO":"2024-06-06T00:00:00.000Z","timeToRead":5,"excerpt":"Folders, Files, and the Mayhem That Comes With It","subscription":true,"body":"var _excluded = [\"components\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n/* @jsxRuntime classic */\n/* @jsx mdx */\n\nvar _frontmatter = {\n  \"title\": \"Folders, Files and everything in between\",\n  \"excerpt\": \"Folders, Files, and the Mayhem That Comes With It\",\n  \"date\": \"2024-06-06T00:00:00.000Z\",\n  \"hero\": \"foldersCover.jpg\",\n  \"author\": \"Luke Celitan\",\n  \"appDescription\": \"Architecture\",\n  \"category\": \"Post\",\n  \"tech\": [\"TS\", \"Nodejs\", \"Nextjs\", \"ReactIcon\"]\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"h2\", {\n    \"id\": \"folders-files-and-the-mayhem-that-comes-with-it\"\n  }, \"Folders, Files, and the Mayhem That Comes With It\"), mdx(\"p\", null, \"Let\\u2019s dive into the fascinating world of project structure and its impact on\\nDeveloper Experience (DX). We\\u2019ll explore how folder organization affects a\\nproject\\u2019s long-term maintainability and scalability.\"), mdx(\"p\", null, \"Buckle up\\u2014this journey might change how you think about your code\\u2019s\\narchitecture! A Developer\\u2019s Perspective As software developers, we\\u2019re constantly\\nwrestling with intricate systems, complex algorithms, and elaborate code.\"), mdx(\"p\", null, \"The complexity of our codebases doesn\\u2019t just impact our productivity\\u2014it\\u2019s a key\\nfactor in the reliability and maintainability of our software. Folders and files\\nare the building blocks of any project, but how do we measure their impact on\\ncomplexity? Is a project with more folders and files inherently more complex? Or\\ncould proper refactoring, testing, and documentation actually make a larger\\nproject less complex?\"), mdx(\"p\", null, \"These are the questions we\\u2019ll be pondering as we search for that elusive \\u201Cmagic\\nratio\\u201D of folders, files, and code that could give us insights into a project\\u2019s\\noverall complexity.\"), mdx(\"h3\", {\n    \"id\": \"the-folder-labyrinth-a-case-study-of-nextjs\"\n  }, \"The Folder Labyrinth: A Case Study of Next.js\"), mdx(\"p\", null, \"Before we embark on our quest for the perfect project structure, let\\u2019s take a\\npeek at one of the most complex open-source projects out there: Next.js. Brace\\nyourself for some mind-bending numbers:\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"codelines\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"All Characters\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Folders\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Files\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Deepest Level\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"1675551\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"84344594\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"7513\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"16360\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"13\")))), mdx(TreeChart, {\n    folder: nextjs,\n    mdxType: \"TreeChart\"\n  }), mdx(\"p\", null, \"Take a moment to let those figures sink in. Can you imagine navigating through\\n7,513 folders spread across 13 levels of depth? It\\u2019s enough to make even the\\nmost seasoned developer\\u2019s head spin! Next.js serves as a prime example of how\\noverwhelming a project structure can become. At first glance, it\\u2019s clear that\\nmaking meaningful contributions to this behemoth requires a highly dedicated\\ndeveloper. This monorepo encompasses various technologies like Rust and\\nTypeScript, and includes example pages, tests, mysterious experimental folders,\\nplugins, errors, and much more. Despite its incredibly complex structure,\\nNext.js remains a widely popular and well-maintained open-source project. Or\\ndoes it? The sheer amount of code-digging and setup required before contributing\\ngot me thinking: How can proper structure and documentation make a project more\\naccessible and less intimidating? Next.js will serve as our benchmark for\\ncomplexity. But before we dive into our own complexity metric, let\\u2019s explore\\nsome existing methods for calculating project complexity.\"), mdx(\"h3\", {\n    \"id\": \"cyclomatic-complexity-and-the-halstead-volume-metric\"\n  }, \"Cyclomatic Complexity and the Halstead Volume Metric\"), mdx(\"p\", null, \"When searching for code complexity formulas, two metrics often pop up:\\nCyclomatic Complexity and the Halstead Volume Metric. Let\\u2019s break these down\\nbefore we continue our journey.\"), mdx(\"h3\", {\n    \"id\": \"cyclomatic-complexity-unraveling-code-paths\"\n  }, \"Cyclomatic Complexity: Unraveling Code Paths\"), mdx(\"p\", null, \"Introduced by Thomas McCabe in 1976, Cyclomatic Complexity quantifies the number\\nof linearly independent paths through a program\\u2019s source code. Imagine your code\\nas a labyrinth, with each decision point (like an if statement or a loop)\\ncreating a branching path. The more branches, the more complex the code. The\\nformula for Cyclomatic Complexity is:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-math\"\n  }, \"M = E - N + 2P\\n\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"(M) represents the cyclomatic complexity.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"(E) is the number of edges (control flow paths) in the control graph.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"(N) is the number of nodes (decision points) in the graph.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"(P) is the number of connected components (usually 1 for a single program).\")), mdx(\"h3\", {\n    \"id\": \"thresholds-and-interpretation\"\n  }, \"Thresholds and Interpretation:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"A higher cyclomatic complexity indicates greater code complexity.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Common thresholds:\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"1-10: Simple code.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"11-20: Moderately complex code.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"21+: Complex code that needs attention.\")))), mdx(\"p\", null, \"Higher complexity can lead to bugs, maintenance challenges, and reduced code\\nquality. But remember, this metric focuses solely on control flow, not on other\\naspects of code complexity.\"), mdx(\"h3\", {\n    \"id\": \"the-halstead-volume-metric-measuring-code-vocabulary\"\n  }, \"The Halstead Volume Metric: Measuring Code Vocabulary\"), mdx(\"p\", null, \"Proposed by Maurice Howard Halstead in 1977, the Halstead Volume Metric takes a\\ndifferent approach. It analyzes code structure and vocabulary, considering both\\noperators and operands. The formula for the Halstead Volume Metric is:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-math\"\n  }, \"V = N * log2(n)\\n\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"(V) represents the volume.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"(N) is the program length (sum of operators and operands).\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"(n) is the total number of unique operators and operands.\")), mdx(\"p\", null, \"Unlike Cyclomatic Complexity, which focuses on control flow, the Halstead metric\\nconsiders the richness of the code\\u2019s vocabulary. It reflects how challenging it\\nis to understand the code due to its unique constructs.\"), mdx(\"h3\", {\n    \"id\": \"a-new-metric-\"\n  }, \"A new metric ?\"), mdx(\"p\", null, \"While commercial tools like SonarQube, Codacy, and Jellyfish provide code\\nquality and complexity metrics, I was looking for a simple metric that could be\\napplied to any software project, regardless of language or framework. Unable to\\nfind existing packages that provided a single meaningful metric for project\\ncomplexity, I decided to create my own.\"), mdx(\"h3\", {\n    \"id\": \"celitans-complexity-measurement-ccm\"\n  }, \"Celitan\\u2019s Complexity Measurement (CCM):\"), mdx(\"p\", null, \"After much consideration, I\\u2019ve developed a new metric called Celitan\\u2019s\\nComplexity Measurement (CCM). Here\\u2019s the formula:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-math\"\n  }, \"CCM = [(0.2 * F/D) + (0.2 * L/400) + (0.2 * C/4000) + (0.1 * T)] * [1 + log(F + D + 1)]\\n\")), mdx(\"p\", null, \"Where:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"F = Number of files\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"D = Number of directories\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"L = Total lines of code\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"C = Total characters\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"T = Tree depth (deepest level of the project structure)\")), mdx(\"p\", null, \"Let\\u2019s break down each component:\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"File to Directory Ratio (0.2 \", \"*\", \" F/D): Measures the distribution of files\\nacross directories. A higher ratio indicates more files per directory,\\npotentially increasing complexity.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Normalized Lines (0.2 \", \"*\", \" L/400): Normalizes the total lines of code against\\nan arbitrary maximum of 400 lines per file, contributing to complexity based\\non overall code volume.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Normalized Characters (0.2 \", \"*\", \" C/4000): Similar to normalized lines, this\\nfactor considers the total character count, normalized against an arbitrary\\nmaximum of 4000 characters per file.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Tree Depth (0.1 \", \"*\", \" T): Accounts for the depth of the project structure.\\nDeeper structures are considered more complex, but with less weight than\\nother factors.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Scale Factor \", \"[1 + log(F + D + 1)]\", \": This logarithmic scale factor increases\\nthe complexity measurement as the total number of files and directories\\ngrows, but at a decreasing rate.\")), mdx(\"p\", null, \"The formula combines these elements to produce a single complexity score. The\\nbase complexity is calculated as a weighted sum of the first four factors, then\\nmultiplied by the scale factor to account for overall project size. To give you\\nan idea of how this metric scales, here\\u2019s a table showing complexity scores for\\nprojects of varying sizes:\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Project\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Files\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Directories\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Total Lines\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Total Chars\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Tree Depth\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Complexity\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"A\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"2\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"1\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"69\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"644\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"1\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"1\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"B\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"5\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"2\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"100\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"1000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"2\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"3\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"C\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"10\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"3\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"500\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"5000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"3\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"7\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"D\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"20\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"5\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"1000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"10000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"4\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"12\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"E\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"50\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"10\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"5000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"50000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"5\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"45\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"F\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"100\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"15\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"10000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"100000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"6\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"93\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"G\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"200\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"20\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"20000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"200000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"7\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"199\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"H\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"500\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"30\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"50000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"500000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"8\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"544\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"I\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"1000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"50\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"100000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"1000000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"9\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"1157\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"J\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"2000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"100\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"200000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"2000000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"10\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"2467\")))), mdx(\"p\", null, \"The metric is calibrated so that a basic \\u201CHello World\\u201D project in Express.js has\\na complexity of 1, serving as our baseline. For reference, that project has one\\nfolder, 2 files (index.js and package.json), 39 lines of code, 644 characters,\\nand a tree depth of 1.\"), mdx(\"h3\", {\n    \"id\": \"visualizing-the-complexity-curve\"\n  }, \"Visualizing the Complexity Curve\"), mdx(\"p\", null, \"If we plot these values, we can see how the complexity score grows with the size\\nof the project. The growth isn\\u2019t linear\\u2014it increases more rapidly as projects\\nbecome larger and more intricate. This reflects the real-world experience that\\nmanaging very large projects becomes exponentially more challenging.\"), mdx(LineChartComplexity, {\n    data: complexityGraphData,\n    mdxType: \"LineChartComplexity\"\n  }), mdx(\"h3\", {\n    \"id\": \"complexity-in-practice\"\n  }, \"Complexity in Practice\"), mdx(\"p\", null, \"To truly measure the effectiveness of our Celitan\\u2019s Complexity Measurement\\n(CCM), we need to put it to the test in real-world scenarios. Applying the\\nformula to various starter projects across different frameworks and languages\\nwill give us a more concrete understanding of its performance. This practical\\napproach will allow us to see if the CCM accurately reflects the perceived\\ncomplexity of these projects from a developer\\u2019s perspective.\"), mdx(\"h4\", {\n    \"id\": \"the-popular-starter-projects-from-the-biggest-frontend-frameworks\"\n  }, \"The popular starter projects from the biggest frontend frameworks\"), mdx(\"div\", {\n    style: {\n      \"height\": \"25px\"\n    }\n  }), mdx(ComplexityChart, {\n    data: complexityScoresStarters.projects,\n    labelKey: true,\n    mdxType: \"ComplexityChart\"\n  }), mdx(\"p\", null, \"You can check the folder structre of those projects below, select from the\\ndropdown to see the folder structure of the project.\"), mdx(TreeChartChanger, {\n    folders: [angularStarter, reactStarter, svelteStarter, nestStarter, vueStarter],\n    mdxType: \"TreeChartChanger\"\n  }), mdx(\"h4\", {\n    \"id\": \"complexity-scores-on-the-projects-from-the-biggest-frontend-frameworks\"\n  }, \"Complexity scores on the projects from the biggest frontend frameworks\"), mdx(\"div\", {\n    style: {\n      \"height\": \"25px\"\n    }\n  }), mdx(ComplexityChart, {\n    data: complexityScores.projects,\n    labelKey: true,\n    mdxType: \"ComplexityChart\"\n  }), mdx(TreeChartChanger, {\n    folders: [angular, react, svelte, nest, vue, nextjs],\n    mdxType: \"TreeChartChanger\"\n  }), mdx(\"blockquote\", null, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"Next.js project ended up with +2 mil complexlity score, is it justified ?\")), mdx(\"blockquote\", null, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"Do the results align with your intuition and experience?\")), mdx(\"h3\", {\n    \"id\": \"feedback-and-refinement\"\n  }, \"Feedback and Refinement\"), mdx(\"p\", null, \"By comparing the formula\\u2019s output with the collective wisdom of developers, we\\ncan fine-tune the metric, adjust its parameters if necessary, and ultimately\\ncreate a more robust and reliable measure of project complexity. This iterative\\nprocess of testing, gathering feedback, and refining will be key to developing a\\ntruly useful complexity measurement tool for the development community.\"), mdx(\"p\", null, \"Any thoughts on the results ? Let me know at \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"mailto:luke@spaceout.pl\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"luke@spaceout.pl\")), mdx(\"h3\", {\n    \"id\": \"implementation\"\n  }, \"Implementation\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-typescript\"\n  }, \"interface ProjectStructure {\\n  files: number;\\n  directories: number;\\n  totalLines: number;\\n  totalChars: number;\\n  treeDepth: number;\\n}\\n\\nfunction calculateComplexity(project: ProjectStructure): number {\\n  const { files, directories, totalLines, totalChars, treeDepth } = project;\\n\\n  const fileToDirectoryRatio = files / directories;\\n  const normalizedLines = totalLines / 400; // 400 lines = max lines per file (arbitary, can be adjustable)\\n  const normalizedChars = totalChars / 4000; // 4000 chars = max chars per file (arbitary, can be adjustable)\\n\\n  const baseComplexity =\\n    fileToDirectoryRatio * 0.2 +\\n    normalizedLines * 0.2 +\\n    normalizedChars * 0.2 +\\n    deepestLevel * 0.1;\\n\\n  const scaleFactor = 1 + Math.log(files + directories + 1);\\n  return baseComplexity * scaleFactor;\\n}\\n\")), mdx(\"p\", null, \"Whole project is published on npm as project-analyzer, published to npm\\n\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://www.npmjs.com/package/project-analyzer\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"https://www.npmjs.com/package/project-analyzer\"), \",\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"npm i -g project-analyzer\\n\")), mdx(\"p\", null, \"you can also find the source for the project on\\n\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/MassivDash/ProjectAnalyzer\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"https://github.com/MassivDash/ProjectAnalyzer\")), mdx(\"h3\", {\n    \"id\": \"practical-applications\"\n  }, \"Practical Applications\"), mdx(\"p\", null, \"This formula is highly customizable. You can adjust the normalization factors\\nand weights to better suit your specific project types or development practices.\\nFor instance, if your projects tend to have deeper folder structures, you might\\nincrease the weight of the tree depth factor. Some potential applications of\\nthis complexity metric include:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Estimating development time and resources for new projects\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Identifying overly complex parts of a system that might need refactoring\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Comparing different solutions or architectures for the same problem\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Tracking project complexity over time to ensure it doesn\\u2019t grow uncontrollably\")), mdx(\"h3\", {\n    \"id\": \"conclusion\"\n  }, \"Conclusion\"), mdx(\"p\", null, \"Quantifying project complexity isn\\u2019t an exact science, but having a consistent,\\ncustomizable method can provide valuable insights. This formula offers a\\nstarting point for teams to measure and discuss project complexity in a more\\nobjective manner.\"), mdx(\"p\", null, \"Remember, the goal isn\\u2019t to achieve the lowest complexity score possible, but to\\nunderstand your projects better and make informed decisions about architecture,\\nrefactoring, and resource allocation.\"));\n}\n;\nMDXContent.isMDXComponent = true;","tech":["TS","Nodejs","Nextjs","ReactIcon"],"category":"Post","appDescription":"Architecture","hero":{"full":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAMFAgT/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAf/aAAwDAQACEAMQAAAB8c9HPKICPZZpCX//xAAaEAEBAQEAAwAAAAAAAAAAAAABAgADEhQh/9oACAEBAAEFAoHovzR3qQrn6ziTeToVsiU//8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFhEBAQEAAAAAAAAAAAAAAAAAABEB/9oACAECAQE/AYirr//EABwQAAICAwEBAAAAAAAAAAAAAAABAhEQITESQf/aAAgBAQAGPwK9+S/uIxUqeNs6JWcP/8QAGxAAAgMBAQEAAAAAAAAAAAAAAREAITFBEKH/2gAIAQEAAT8hPQcNfJchxsXWDbsREi7b2IQQr5FMPMdBImPB+p//2gAMAwEAAgADAAAAEPjnQv/EABYRAAMAAAAAAAAAAAAAAAAAAAABEf/aAAgBAwEBPxCoqIiI/8QAFxEAAwEAAAAAAAAAAAAAAAAAABFRYf/aAAgBAgEBPxBoNBqaH//EABsQAQEBAQEBAQEAAAAAAAAAAAERACExcUFR/9oACAEBAAE/ELAk8BFOF+6Tc+QIHzJElVUdPwBID12zOsxxDxN+i/5NPxb0lB3Hqny1v//Z","aspectRatio":1,"src":"/static/ca172036b2d78c49ceae0cdeb5723e5b/58fe7/foldersCover.jpg","srcSet":"/static/ca172036b2d78c49ceae0cdeb5723e5b/e0f30/foldersCover.jpg 236w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/86afd/foldersCover.jpg 472w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/58fe7/foldersCover.jpg 944w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/0ff54/foldersCover.jpg 1200w","srcWebp":"/static/ca172036b2d78c49ceae0cdeb5723e5b/99fbb/foldersCover.webp","srcSetWebp":"/static/ca172036b2d78c49ceae0cdeb5723e5b/77392/foldersCover.webp 236w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/1f177/foldersCover.webp 472w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/99fbb/foldersCover.webp 944w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/9000d/foldersCover.webp 1200w","sizes":"(max-width: 944px) 100vw, 944px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M12%202c7%203%207%203%200%203H8l8%202c2%200%202%201%202%202v2l3%201%201-1v-1c2-1%205%201%205%203l4%201%203-1%201-1%201-1c-1-1%200-2%201-2%201-1%201%201-1%207-1%203-1%203%201%203h1v-2l2-5%203-5-1%204v5h4l1%202%201%202-1%203v-1l-1-2-1-1c-1-2-4%200-4%203%200%202%200%202-4%201-3-1-3-2-1-2h-1l-7-1h-4c-1%202-2-1-1-3%201-3-7-7-9-4-1%201-2%202-1%200l-3-2c-3-1-4-1-3%201l-1%202-2%202c-1%202-1%202-1%200s-3-4-3-2l1%201v1l-1%208c0%205%200%206%201%204v16l1-2%201-5v1c0%201%201%202%203%202l3%202-2%201H5l1%201%202%201c1%200%202-1%202-3%201-1%201-2%202-1l2%201c1%201%201%201-1%201-3%200-3%203%200%203%202%201%202%200%203-1%200-2%200-2%202%200s2%203%200%203v1l-1%201-4%2011%205%201c7%201%209%203%204%203l-4-1-8-1c0%201%209%204%2013%204l3%201-2%201h-3l-1%201-1-1c1%200-6-3-7-2l-5-2c-7-2-7-2-7%206%200%205%200%206%202%207%202%200%203%204%201%204l-1-1c0-3-2-2-2%200s0%203%202%203c1-1%203%200%206%201l4%201-5-1H3c1%201%2018%205%2020%204l3%202c2%202-4%201-13-1-3-1-6-2-7-1H2c-6%200%200%203%208%203l1%201%202%201%201%201h-4c-3-1-3-1-3%201v2l-2-3c0-1-1-2-3-2-2-1-2-1-2%205l1%207v1L0%20253v147h289v-3l2-2v-1h-2c-2%202-1-1%201-6l2-5c-1-1%203-6%204-6l2%202c2%203%201%209-1%208-1-1-1%200-1%201l-1%202h-1v3c0%201%200%202%201%201l3-1c2%200%203%200%203-2%200-4%204-5%204-1%200%202%200%202%201%200l3-2c1%200%201%201-1%205l-1%204v1l-1%201h13c0%202%205%201%205-1h1c0%202%205%203%205%201h1l13%201h12v-3c0-5%200-5-4-12l-4-7-4%201c-5%200-8-4-6-11v-6l-10%201h-3l-1-1h-1l23-2c7%201%207%201%209%203%201%203%203%204%203%202l-1-1-1-3h1l4%201c3-1%204%200%204%205%200%202%200%202%201%201l1-4v-3h19c2%200%203%200%204%202s1%202%201%200c1-1%201-1%201%201l1%205c2%200%202-1%201-3-1-5-1-5%201-5l1%201v1l1-1%201-1v4l1%204%201%202c0%202-1%202-8%202-14%200-14%200-13%202h4c4-1%207%200%2011%206l3%207%201%201c1%200%202%202%202%205l1%205a11128%2011128%200%2000-1-292c0%202-1%203-4%202l-3-1%203-3%204-2%201-6c0-4%200-6-1-5%200%203-2%202-2-1l1-1c3%200%202-11-1-15s-2-5%201-1l2%202v-7l-1-6v4l-1%202v1l-3-1-3-3%202-2%201-2-2%201c-2%202-2%201-5-2l-3-5-1-1c-1%201-1%201%200%200l-2-3c-3-2-2-3%202-2%201%201%202%201%202-1l1-1c1%201%203-2%202-3h-1l-1%201h-1l-1%201h-1l-3%201c-2%201-2%200-2-1v-1h-2c-1-1%207-5%208-4l1-2c1-2%200-1-7%202-8%205-8%204-8-11l-1-10-1-10c0-11%201-12%201-1l1%207%206-7%201-1v3c2%200%203-3%202-4-2-1-2-1%200-5l2-3h-22l1%204-1%203-1-1h-1c-1%202%200%203%202%203s3%202%200%203v3c1%202%200%207-1%206v5c0%205%200%205-2%204-2-2-11-2-20%200h-4v-3l2-4-1-4c-2%200-3%203-2%207v5h-5l-3%201-4-1c0-2%203-3%204-2l1%201v-1l-1-3c0-2-3-4-4-3l1%202c3%201%202%202-1%202s-3%200-2%201%201%201-2%201c-2%200-3%200-3-2s1-2%204-1h3l-2-2c-2-2-2-3-2-5l-1%201h-3c0-2-1-2-3-1l-3%201c-2%200-3%201-4%205l-1%203-1%202c-1%203-1%203-1-2l-1-9c0-1%200-2%202-2%202-1%202-2%202-8l-1-8-8%208v1c-2%201-4-8-3-9l1%201h1c2-1%200-2-4-2-5%200-5%200-1%207a67%2067%200%20014%2010c1%202%201%202%201%200l1-3v-1l-1-1c0-2%204-1%205%202s1%203-2%203-3%203-1%2010%203%2011%201%2010l-2-7c-1-5-2-5-2-3v4l-1%203c-1%203-1%203-1-2%200-16-1-22-3-18h-3l-2-1h2l2-1h1l-2-6-3-5-46-1a553%20553%200%2000-49%201l-49-1C95%200%2089%200%2089%202v1l-1-1c0-2-1-2-5-2-5%200-6%200-7%203%200%202-2%203-2%203-2%200-2%200%200-2%203-3%202-4-8-4l-9%201%203%202h9l1-1%201%202-1%201-2%205-5%204h-1l-5%201c-4-1-4-1-2-4%201-1%202-2%204-1h4l-4-1c-4-2-5-2-7%200%200%202-1%202-2%200l-2-2h4c0-1-4-2-5-1V3c1-4%200-4-2-1l-1%203V2c1-2%200-2-4-2l-5%201h-1L20%200H7l5%202m292%205l1%208%209%201c2%200%203%200%203-2l-1-1c-2%201-1-2%202-5l1-4V3l2-1h1l-5-2-4%201v1l-2-1c0-1-2%200-2%202l2%201c1-1%202%200%202%201%201%202-1%204-3%203V7l1-2-2%201-1-2V1c1-1%200-1-1-1h-3v7m40-1l-2%202c-3%200-3%202%200%208%204%207%204%207%205%206h3c3%202%2010%201%207-1v-3l-1-1c-1%201-3-1-5-5-2-3-2-3%200-3l1-1h-4c-2%200-3%200-3-2h-1M159%2041v3c-1%202-1%202%202%203%204%201%205%201%202%201s-3%200-1%201h8l5-1%206-1c6%201%204%200-6-3-12-4-16-5-16-3M4%2047l-1%202v-1l-1-1c-1%200-2%203-2%209s0%206%203%206l2-1v-2h5c1%202%202%201%203-4l1-7-2%202-1%201v-2l-1-1-1%201H6l-1-1v-1H4m140%203l-1%201h-1l-2%203v2c2%200%201%202-7%209l-10%2010-1%2011v12l13-9%2012-9V67c0-12%200-13%202-14l2-2h-1l-1%201-4%202c-3%202-4%202-2-1l2-3h-1m0%2035a117%20117%200%2001-21%2015l2%204c1%203%201%203%201%201v-3l1-1v15l-2%203-4%202c-2%202-3%202-4%201l-1-1-1%201c1%201%200%202-2%203-3%202-3%202-5%201l-1-1v2c2%201%201%201-8%207l-8%204h-2c-2-1-5%201-3%203l-1-1-1%201c1%201%200%203-2%204l-9%207-5%204v-13c0-14%200-14%202-15s2-1%200-1c-4%200-8%207-8%2014l1%206%201%207v7l-7%207-7%207v-6c1-6%200-6-3-3-3%202-3%204-3%209s0%206-4%2012c-9%2014-16%2031-18%2045%200%205-1%206-3%207-3%202-3%202-1%202h3c0%202-1%202-3%202-3%200-4%200-4%202l3%201%203%201h-2l-3%201h2l1%203c0%202%200%203%201%202%200-3%203-2%203%200%202%205%201%206-3%206l-3%201h4c4%200%205%201%203%202-1%201%203%207%2010%2017l6%207h91l-1-4c0-4%200-5%202-5v-1l-2-1-1-1-4-8c0-2%200-2%202%200l2%204%204%202-2-2-1-5c1-2%201-2%203%202%203%206%204%209%202%207-3-2-2-1%202%206l3%206h16c14%200%2015%200%2015-2l-13-31h-11a806%20806%200%2001-18%204c-3%203-4%203-4-4v-5l-1%205-1%206-1-4-2-5-8-1c-4%200-4%200%202-1%205-1%205-2%203-2l-3-1-2-3c-2-2-1-14%202-14v1c-2%202-1%203%201%202%203-3%207-2%2010%204%202%204%202%208%200%206l-1%201%201%202%201%201-1%201h-1l1%202%201-1%201-1c1%201%202-8%202-13-1-2-1-3%201-4%204-1%206%200%208%203%201%202%201%202%201%200l-3-5c-2-3-3-3-3-2%200%202%200%203-4%203-4%201-4%201-5-2l-2-3v-2h-2v-1l-1-1v-2c-1%200-1-1%201-2l2-1%201-1c0-1%201-1%201%201%202%202%202%201%201-2-1-2-1-2%201-2s3%200%203-2l1-3%201-1-1-1c-1%201-1-1-1-4v-6l-1%208c0%203%200%204-2%205-3%201-3%201-3-1l2-2v-2l-1-1c-1%201-1%200-1-2l1-3%201-2-1-2-1-4c0-5%201-5%202%200%201%202%201%201%201-1%200-5-2-8-3-7l-1%202-2%208c-2%205-2%205%200%205%203%201%202%208%200%2011-2%201-2%201-2-1%200-1%200-2-1-1l-1-5c0-6-3-13-3-8l-3%203c-6%203-6%203-3-13l1-7%207-3c5-3%206-3%205-6l1-3c2-2%203-1%203%201l-2%207-1%201c-2-2-6%201-7%204-2%203-2%203-2%201s0-2-1%201c-1%204%200%206%201%203%201-1%201-1%201%201s1%203%203%201c3-3%209-6%2010-5l1-1%2010-6-2%204c-3%203-2%203%202%201%204-1%209-3%207-1l1%203c2%202%203%203%203%201%200-3%205-8%2010-10l5-4-4%201-6%202c-2-1-5%201-4%203v1l-2-2-2-2v1l-2%201c-4%200-4-1%200-3l8-5-4%201c-5%203-8%204-8%203l7-4%207-3v-20a32260%2032260%200%2001-2-34l-2%201h-1v-1l-1-1h-1l-2%203v1c3-1%203%203%200%205-2%202-2%202-3%200l-1-2-2-1c-2%200-5%204-3%204l1%203v3l1-3c2-3%202-3%203-2%201%200%201%201-1%202l-2%206-1%203-1%201h3l-1%202v2l-1%202-1%201%201%201v8c0%202-1%203-2%202h-1l1%202c2-1%202%201%202%205-1%202-1%203-2%202h-1c0%202-6%206-6%205h-2l-4%201%202-6v-9c-1-3-1-3%202-5l2-3%201-1%201%204c-1%203%200%205%201%206h1l1-2v-1c-2-2-2-3%200-5v-2l-1%201c-1%201-1-1-1-3%200-4%201-6%203-10%202-3%202-4%201-4-3%200-4-3-2-4l2-2-2%201c-1%201-2%200-2-6v-7l1-1%201%201v1l1-1c-1-1%200-2%201-1v-1c-2-1-2-1%202-1%202-1%202%200%202%204l1%204v-7c0-4%200-5%201-4l1-1c-1%200%200-2%202-3l3-1-2%202-2%202%202-1c3%200%203%205%200%208-3%202-2%203%201%201s8-7%207-8l-3%202-2%202v-4l2-7c2-3%200-3-4-1m54%202c-4%202-6%203-4%203s0%202-3%202v-2c-3%200-5%202-2%202v1h-8l3%201v3c1%201%200%202-1%203-4%202-1%201%205-1%202-1%205-2%206-1%202%200%202%200%201-1h1c2%200%202%200%201-1-2-1%202-3%204-1l1-1v-1l4%204%203%206c3%202%205%205%205%206h-2v2l-1%201%203-1c3%200%203-2%202-3s0-1%201-2h3c-3%202-3%202-1%202h2c1-1%201%200%201%202l1%203V99h4c5%201%2012-1%2012-2%200-2-4-6-8-8-1-1-4%200-13%203-10%203-11%203-13%202v-2l5-2c2-1%202-1%200-1l-4%202c-2%200-2-1-2-4v-3l-6%203m-41%205l-3%202v8l1%203c0%202%200%202%203%202l2%201v1l3-1c1-2%202-1%202%201l-2%204c-3%201-4%206-2%206l1-1h3c2%201%203%201%204-1%202-2%203-9%201-9l-1%203-1%202-2-1h1l1-2c0-3-2-4-5-4-3-1-3-2-1-2%203-1%203-13%201-13l-2%201c-2%202-3%201-2-1%200-3%200-3-2%201m50%2015l-2%201h-2l-10%204c-7%202-10%204-9%204%201%201%201%201-1%201h-1c1%201%201%201-1%201-2%201-3%204-1%204l1-1h2c2%200%202%200%201-1l-1-1h2l2%201v-1c-1%200%200-2%202-2v1h4l3-2%201-1c2%202%2013-2%2013-4l-3-1h-2l4-2c3-1%203-1%201-1h-3m15%2020l-1%205a77%2077%200%2000-14%205h2l2%201c3-1%203-1%203%204%200%207%201%208%205%207l4-1v-7c0-4%200-6%202-6l1-4c0-3%200-4-1-3-1%200-2-1-2-3-1-3-1-2-1%202m-29%2084c-2%202-3%203-5%203-3%200-3%200-3%203l3%204v2l-1%202h16l-8%201-10%202h7l6%201-5%201-7%201%2022-1c16-1%2016-1%2016-4h-1c-1%202-23%204-23%202l9-1%2011-2c4-1%205-4%202-4-2%200-2%200-1%201l1%202-2-1h-1l-7%201%203-1c2-1%201-1-2-1-4%200-4%200-3%202v1c-1%200-2%200-1-1l-9-1h-8l2-1c0-3-1-6-3-6l1-1h4v-5c0-3%200-3-3%201m-33%207l-5%202v7c0%207%200%207%202%207h12v-9c0-9%201-9-9-7m78%2014a153%20153%200%2000-18%202c-2%200-1%202%201%203h1c0-1%202%200%203%202%203%203%204%204%206%203h3l-3%201c-2%202-2%202%207%202a354%20354%200%200126-2c1-1%202-2%203-1l-4-7c-4-6-3-6-25-3m33%2046c2%201%200%202-4%201-3%200-2%201%203%204%206%203%206%203%2018%203h13l-6-4-7-4h-5l-2%201c-3-2-12-2-10-1M57%20317c0%202%200%202-3%202-2%200-3%201-4%203-2%205%201%208%206%207h3v-8l-1-7-1%203m170%200l-2%202c-2%200-3%202-4%204l-1%204-1-4c-2-4-2-4-6-4h-4v6l1%205%201-5c0-4%203-6%205-4%203%204%203%209%202%2010-2%202-2%203-1%203%202%200%204-4%206-10%202-5%203-5%204%201l1%204h4l-1-1c-3%200-2-6%200-8v-1l-2-1-1-2-1%201m36%203l-1%207c1%207%201%208%207%207%204-1%203-5-2-6-3%200-4-2-1-2%202%200%203-2%204-5%201-2%200-2-3-2l-4%201m49%2044l-1%203h-2c-5-1-5-1-6%203%200%203%200%203%202%203s2%200%202%204c-1%204%200%205%203%203%202-2%201-1-1%203l-1%204c1%200%203-1%203-3l3-2%201-1c1-1%204%200%203%202l2%201v-2c2%201%202%200%202-1%200-2%201-2%203-2%203%200%204%201%203%205%200%201%201%201%202-1s2-2%202-1h1l2-1c2%200%203%200%202-2l-1-2h-4l-4-1h-11a145%20145%200%20000-6l5-6-2-1-1%201c1%201-3%202-4%201l1-1%203-2c1-1%201-1-2-1-2%200-3%201-5%203m56%2011c0%2011%200%2011%204%2018l4%207-1-3-1-4%203%203c1%204%204%206%202%202l1-1c2%202%200-3-2-5l-2-2-3-8-4-12c-1-6-1-5-1%205'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"regular":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAMFAgT/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAf/aAAwDAQACEAMQAAAB8c9HPKICPZZpCX//xAAaEAEBAQEAAwAAAAAAAAAAAAABAgADEhQh/9oACAEBAAEFAoHovzR3qQrn6ziTeToVsiU//8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFhEBAQEAAAAAAAAAAAAAAAAAABEB/9oACAECAQE/AYirr//EABwQAAICAwEBAAAAAAAAAAAAAAABAhEQITESQf/aAAgBAQAGPwK9+S/uIxUqeNs6JWcP/8QAGxAAAgMBAQEAAAAAAAAAAAAAAREAITFBEKH/2gAIAQEAAT8hPQcNfJchxsXWDbsREi7b2IQQr5FMPMdBImPB+p//2gAMAwEAAgADAAAAEPjnQv/EABYRAAMAAAAAAAAAAAAAAAAAAAABEf/aAAgBAwEBPxCoqIiI/8QAFxEAAwEAAAAAAAAAAAAAAAAAABFRYf/aAAgBAgEBPxBoNBqaH//EABsQAQEBAQEBAQEAAAAAAAAAAAERACExcUFR/9oACAEBAAE/ELAk8BFOF+6Tc+QIHzJElVUdPwBID12zOsxxDxN+i/5NPxb0lB3Hqny1v//Z","aspectRatio":1,"src":"/static/ca172036b2d78c49ceae0cdeb5723e5b/1dc0b/foldersCover.jpg","srcSet":"/static/ca172036b2d78c49ceae0cdeb5723e5b/3a5ce/foldersCover.jpg 163w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/05730/foldersCover.jpg 327w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/1dc0b/foldersCover.jpg 653w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/f72c7/foldersCover.jpg 980w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/0ff54/foldersCover.jpg 1200w","srcWebp":"/static/ca172036b2d78c49ceae0cdeb5723e5b/0acdf/foldersCover.webp","srcSetWebp":"/static/ca172036b2d78c49ceae0cdeb5723e5b/ac59e/foldersCover.webp 163w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/7660b/foldersCover.webp 327w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/0acdf/foldersCover.webp 653w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/75470/foldersCover.webp 980w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/9000d/foldersCover.webp 1200w","sizes":"(max-width: 653px) 100vw, 653px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M12%202c7%203%207%203%200%203H8l8%202c2%200%202%201%202%202v2l3%201%201-1v-1c2-1%205%201%205%203l4%201%203-1%201-1%201-1c-1-1%200-2%201-2%201-1%201%201-1%207-1%203-1%203%201%203h1v-2l2-5%203-5-1%204v5h4l1%202%201%202-1%203v-1l-1-2-1-1c-1-2-4%200-4%203%200%202%200%202-4%201-3-1-3-2-1-2h-1l-7-1h-4c-1%202-2-1-1-3%201-3-7-7-9-4-1%201-2%202-1%200l-3-2c-3-1-4-1-3%201l-1%202-2%202c-1%202-1%202-1%200s-3-4-3-2l1%201v1l-1%208c0%205%200%206%201%204v16l1-2%201-5v1c0%201%201%202%203%202l3%202-2%201H5l1%201%202%201c1%200%202-1%202-3%201-1%201-2%202-1l2%201c1%201%201%201-1%201-3%200-3%203%200%203%202%201%202%200%203-1%200-2%200-2%202%200s2%203%200%203v1l-1%201-4%2011%205%201c7%201%209%203%204%203l-4-1-8-1c0%201%209%204%2013%204l3%201-2%201h-3l-1%201-1-1c1%200-6-3-7-2l-5-2c-7-2-7-2-7%206%200%205%200%206%202%207%202%200%203%204%201%204l-1-1c0-3-2-2-2%200s0%203%202%203c1-1%203%200%206%201l4%201-5-1H3c1%201%2018%205%2020%204l3%202c2%202-4%201-13-1-3-1-6-2-7-1H2c-6%200%200%203%208%203l1%201%202%201%201%201h-4c-3-1-3-1-3%201v2l-2-3c0-1-1-2-3-2-2-1-2-1-2%205l1%207v1L0%20253v147h289v-3l2-2v-1h-2c-2%202-1-1%201-6l2-5c-1-1%203-6%204-6l2%202c2%203%201%209-1%208-1-1-1%200-1%201l-1%202h-1v3c0%201%200%202%201%201l3-1c2%200%203%200%203-2%200-4%204-5%204-1%200%202%200%202%201%200l3-2c1%200%201%201-1%205l-1%204v1l-1%201h13c0%202%205%201%205-1h1c0%202%205%203%205%201h1l13%201h12v-3c0-5%200-5-4-12l-4-7-4%201c-5%200-8-4-6-11v-6l-10%201h-3l-1-1h-1l23-2c7%201%207%201%209%203%201%203%203%204%203%202l-1-1-1-3h1l4%201c3-1%204%200%204%205%200%202%200%202%201%201l1-4v-3h19c2%200%203%200%204%202s1%202%201%200c1-1%201-1%201%201l1%205c2%200%202-1%201-3-1-5-1-5%201-5l1%201v1l1-1%201-1v4l1%204%201%202c0%202-1%202-8%202-14%200-14%200-13%202h4c4-1%207%200%2011%206l3%207%201%201c1%200%202%202%202%205l1%205a11128%2011128%200%2000-1-292c0%202-1%203-4%202l-3-1%203-3%204-2%201-6c0-4%200-6-1-5%200%203-2%202-2-1l1-1c3%200%202-11-1-15s-2-5%201-1l2%202v-7l-1-6v4l-1%202v1l-3-1-3-3%202-2%201-2-2%201c-2%202-2%201-5-2l-3-5-1-1c-1%201-1%201%200%200l-2-3c-3-2-2-3%202-2%201%201%202%201%202-1l1-1c1%201%203-2%202-3h-1l-1%201h-1l-1%201h-1l-3%201c-2%201-2%200-2-1v-1h-2c-1-1%207-5%208-4l1-2c1-2%200-1-7%202-8%205-8%204-8-11l-1-10-1-10c0-11%201-12%201-1l1%207%206-7%201-1v3c2%200%203-3%202-4-2-1-2-1%200-5l2-3h-22l1%204-1%203-1-1h-1c-1%202%200%203%202%203s3%202%200%203v3c1%202%200%207-1%206v5c0%205%200%205-2%204-2-2-11-2-20%200h-4v-3l2-4-1-4c-2%200-3%203-2%207v5h-5l-3%201-4-1c0-2%203-3%204-2l1%201v-1l-1-3c0-2-3-4-4-3l1%202c3%201%202%202-1%202s-3%200-2%201%201%201-2%201c-2%200-3%200-3-2s1-2%204-1h3l-2-2c-2-2-2-3-2-5l-1%201h-3c0-2-1-2-3-1l-3%201c-2%200-3%201-4%205l-1%203-1%202c-1%203-1%203-1-2l-1-9c0-1%200-2%202-2%202-1%202-2%202-8l-1-8-8%208v1c-2%201-4-8-3-9l1%201h1c2-1%200-2-4-2-5%200-5%200-1%207a67%2067%200%20014%2010c1%202%201%202%201%200l1-3v-1l-1-1c0-2%204-1%205%202s1%203-2%203-3%203-1%2010%203%2011%201%2010l-2-7c-1-5-2-5-2-3v4l-1%203c-1%203-1%203-1-2%200-16-1-22-3-18h-3l-2-1h2l2-1h1l-2-6-3-5-46-1a553%20553%200%2000-49%201l-49-1C95%200%2089%200%2089%202v1l-1-1c0-2-1-2-5-2-5%200-6%200-7%203%200%202-2%203-2%203-2%200-2%200%200-2%203-3%202-4-8-4l-9%201%203%202h9l1-1%201%202-1%201-2%205-5%204h-1l-5%201c-4-1-4-1-2-4%201-1%202-2%204-1h4l-4-1c-4-2-5-2-7%200%200%202-1%202-2%200l-2-2h4c0-1-4-2-5-1V3c1-4%200-4-2-1l-1%203V2c1-2%200-2-4-2l-5%201h-1L20%200H7l5%202m292%205l1%208%209%201c2%200%203%200%203-2l-1-1c-2%201-1-2%202-5l1-4V3l2-1h1l-5-2-4%201v1l-2-1c0-1-2%200-2%202l2%201c1-1%202%200%202%201%201%202-1%204-3%203V7l1-2-2%201-1-2V1c1-1%200-1-1-1h-3v7m40-1l-2%202c-3%200-3%202%200%208%204%207%204%207%205%206h3c3%202%2010%201%207-1v-3l-1-1c-1%201-3-1-5-5-2-3-2-3%200-3l1-1h-4c-2%200-3%200-3-2h-1M159%2041v3c-1%202-1%202%202%203%204%201%205%201%202%201s-3%200-1%201h8l5-1%206-1c6%201%204%200-6-3-12-4-16-5-16-3M4%2047l-1%202v-1l-1-1c-1%200-2%203-2%209s0%206%203%206l2-1v-2h5c1%202%202%201%203-4l1-7-2%202-1%201v-2l-1-1-1%201H6l-1-1v-1H4m140%203l-1%201h-1l-2%203v2c2%200%201%202-7%209l-10%2010-1%2011v12l13-9%2012-9V67c0-12%200-13%202-14l2-2h-1l-1%201-4%202c-3%202-4%202-2-1l2-3h-1m0%2035a117%20117%200%2001-21%2015l2%204c1%203%201%203%201%201v-3l1-1v15l-2%203-4%202c-2%202-3%202-4%201l-1-1-1%201c1%201%200%202-2%203-3%202-3%202-5%201l-1-1v2c2%201%201%201-8%207l-8%204h-2c-2-1-5%201-3%203l-1-1-1%201c1%201%200%203-2%204l-9%207-5%204v-13c0-14%200-14%202-15s2-1%200-1c-4%200-8%207-8%2014l1%206%201%207v7l-7%207-7%207v-6c1-6%200-6-3-3-3%202-3%204-3%209s0%206-4%2012c-9%2014-16%2031-18%2045%200%205-1%206-3%207-3%202-3%202-1%202h3c0%202-1%202-3%202-3%200-4%200-4%202l3%201%203%201h-2l-3%201h2l1%203c0%202%200%203%201%202%200-3%203-2%203%200%202%205%201%206-3%206l-3%201h4c4%200%205%201%203%202-1%201%203%207%2010%2017l6%207h91l-1-4c0-4%200-5%202-5v-1l-2-1-1-1-4-8c0-2%200-2%202%200l2%204%204%202-2-2-1-5c1-2%201-2%203%202%203%206%204%209%202%207-3-2-2-1%202%206l3%206h16c14%200%2015%200%2015-2l-13-31h-11a806%20806%200%2001-18%204c-3%203-4%203-4-4v-5l-1%205-1%206-1-4-2-5-8-1c-4%200-4%200%202-1%205-1%205-2%203-2l-3-1-2-3c-2-2-1-14%202-14v1c-2%202-1%203%201%202%203-3%207-2%2010%204%202%204%202%208%200%206l-1%201%201%202%201%201-1%201h-1l1%202%201-1%201-1c1%201%202-8%202-13-1-2-1-3%201-4%204-1%206%200%208%203%201%202%201%202%201%200l-3-5c-2-3-3-3-3-2%200%202%200%203-4%203-4%201-4%201-5-2l-2-3v-2h-2v-1l-1-1v-2c-1%200-1-1%201-2l2-1%201-1c0-1%201-1%201%201%202%202%202%201%201-2-1-2-1-2%201-2s3%200%203-2l1-3%201-1-1-1c-1%201-1-1-1-4v-6l-1%208c0%203%200%204-2%205-3%201-3%201-3-1l2-2v-2l-1-1c-1%201-1%200-1-2l1-3%201-2-1-2-1-4c0-5%201-5%202%200%201%202%201%201%201-1%200-5-2-8-3-7l-1%202-2%208c-2%205-2%205%200%205%203%201%202%208%200%2011-2%201-2%201-2-1%200-1%200-2-1-1l-1-5c0-6-3-13-3-8l-3%203c-6%203-6%203-3-13l1-7%207-3c5-3%206-3%205-6l1-3c2-2%203-1%203%201l-2%207-1%201c-2-2-6%201-7%204-2%203-2%203-2%201s0-2-1%201c-1%204%200%206%201%203%201-1%201-1%201%201s1%203%203%201c3-3%209-6%2010-5l1-1%2010-6-2%204c-3%203-2%203%202%201%204-1%209-3%207-1l1%203c2%202%203%203%203%201%200-3%205-8%2010-10l5-4-4%201-6%202c-2-1-5%201-4%203v1l-2-2-2-2v1l-2%201c-4%200-4-1%200-3l8-5-4%201c-5%203-8%204-8%203l7-4%207-3v-20a32260%2032260%200%2001-2-34l-2%201h-1v-1l-1-1h-1l-2%203v1c3-1%203%203%200%205-2%202-2%202-3%200l-1-2-2-1c-2%200-5%204-3%204l1%203v3l1-3c2-3%202-3%203-2%201%200%201%201-1%202l-2%206-1%203-1%201h3l-1%202v2l-1%202-1%201%201%201v8c0%202-1%203-2%202h-1l1%202c2-1%202%201%202%205-1%202-1%203-2%202h-1c0%202-6%206-6%205h-2l-4%201%202-6v-9c-1-3-1-3%202-5l2-3%201-1%201%204c-1%203%200%205%201%206h1l1-2v-1c-2-2-2-3%200-5v-2l-1%201c-1%201-1-1-1-3%200-4%201-6%203-10%202-3%202-4%201-4-3%200-4-3-2-4l2-2-2%201c-1%201-2%200-2-6v-7l1-1%201%201v1l1-1c-1-1%200-2%201-1v-1c-2-1-2-1%202-1%202-1%202%200%202%204l1%204v-7c0-4%200-5%201-4l1-1c-1%200%200-2%202-3l3-1-2%202-2%202%202-1c3%200%203%205%200%208-3%202-2%203%201%201s8-7%207-8l-3%202-2%202v-4l2-7c2-3%200-3-4-1m54%202c-4%202-6%203-4%203s0%202-3%202v-2c-3%200-5%202-2%202v1h-8l3%201v3c1%201%200%202-1%203-4%202-1%201%205-1%202-1%205-2%206-1%202%200%202%200%201-1h1c2%200%202%200%201-1-2-1%202-3%204-1l1-1v-1l4%204%203%206c3%202%205%205%205%206h-2v2l-1%201%203-1c3%200%203-2%202-3s0-1%201-2h3c-3%202-3%202-1%202h2c1-1%201%200%201%202l1%203V99h4c5%201%2012-1%2012-2%200-2-4-6-8-8-1-1-4%200-13%203-10%203-11%203-13%202v-2l5-2c2-1%202-1%200-1l-4%202c-2%200-2-1-2-4v-3l-6%203m-41%205l-3%202v8l1%203c0%202%200%202%203%202l2%201v1l3-1c1-2%202-1%202%201l-2%204c-3%201-4%206-2%206l1-1h3c2%201%203%201%204-1%202-2%203-9%201-9l-1%203-1%202-2-1h1l1-2c0-3-2-4-5-4-3-1-3-2-1-2%203-1%203-13%201-13l-2%201c-2%202-3%201-2-1%200-3%200-3-2%201m50%2015l-2%201h-2l-10%204c-7%202-10%204-9%204%201%201%201%201-1%201h-1c1%201%201%201-1%201-2%201-3%204-1%204l1-1h2c2%200%202%200%201-1l-1-1h2l2%201v-1c-1%200%200-2%202-2v1h4l3-2%201-1c2%202%2013-2%2013-4l-3-1h-2l4-2c3-1%203-1%201-1h-3m15%2020l-1%205a77%2077%200%2000-14%205h2l2%201c3-1%203-1%203%204%200%207%201%208%205%207l4-1v-7c0-4%200-6%202-6l1-4c0-3%200-4-1-3-1%200-2-1-2-3-1-3-1-2-1%202m-29%2084c-2%202-3%203-5%203-3%200-3%200-3%203l3%204v2l-1%202h16l-8%201-10%202h7l6%201-5%201-7%201%2022-1c16-1%2016-1%2016-4h-1c-1%202-23%204-23%202l9-1%2011-2c4-1%205-4%202-4-2%200-2%200-1%201l1%202-2-1h-1l-7%201%203-1c2-1%201-1-2-1-4%200-4%200-3%202v1c-1%200-2%200-1-1l-9-1h-8l2-1c0-3-1-6-3-6l1-1h4v-5c0-3%200-3-3%201m-33%207l-5%202v7c0%207%200%207%202%207h12v-9c0-9%201-9-9-7m78%2014a153%20153%200%2000-18%202c-2%200-1%202%201%203h1c0-1%202%200%203%202%203%203%204%204%206%203h3l-3%201c-2%202-2%202%207%202a354%20354%200%200126-2c1-1%202-2%203-1l-4-7c-4-6-3-6-25-3m33%2046c2%201%200%202-4%201-3%200-2%201%203%204%206%203%206%203%2018%203h13l-6-4-7-4h-5l-2%201c-3-2-12-2-10-1M57%20317c0%202%200%202-3%202-2%200-3%201-4%203-2%205%201%208%206%207h3v-8l-1-7-1%203m170%200l-2%202c-2%200-3%202-4%204l-1%204-1-4c-2-4-2-4-6-4h-4v6l1%205%201-5c0-4%203-6%205-4%203%204%203%209%202%2010-2%202-2%203-1%203%202%200%204-4%206-10%202-5%203-5%204%201l1%204h4l-1-1c-3%200-2-6%200-8v-1l-2-1-1-2-1%201m36%203l-1%207c1%207%201%208%207%207%204-1%203-5-2-6-3%200-4-2-1-2%202%200%203-2%204-5%201-2%200-2-3-2l-4%201m49%2044l-1%203h-2c-5-1-5-1-6%203%200%203%200%203%202%203s2%200%202%204c-1%204%200%205%203%203%202-2%201-1-1%203l-1%204c1%200%203-1%203-3l3-2%201-1c1-1%204%200%203%202l2%201v-2c2%201%202%200%202-1%200-2%201-2%203-2%203%200%204%201%203%205%200%201%201%201%202-1s2-2%202-1h1l2-1c2%200%203%200%202-2l-1-2h-4l-4-1h-11a145%20145%200%20000-6l5-6-2-1-1%201c1%201-3%202-4%201l1-1%203-2c1-1%201-1-2-1-2%200-3%201-5%203m56%2011c0%2011%200%2011%204%2018l4%207-1-3-1-4%203%203c1%204%204%206%202%202l1-1c2%202%200-3-2-5l-2-2-3-8-4-12c-1-6-1-5-1%205'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"narrow":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAMFAgT/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAf/aAAwDAQACEAMQAAAB8c9HPKICPZZpCX//xAAaEAEBAQEAAwAAAAAAAAAAAAABAgADEhQh/9oACAEBAAEFAoHovzR3qQrn6ziTeToVsiU//8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFhEBAQEAAAAAAAAAAAAAAAAAABEB/9oACAECAQE/AYirr//EABwQAAICAwEBAAAAAAAAAAAAAAABAhEQITESQf/aAAgBAQAGPwK9+S/uIxUqeNs6JWcP/8QAGxAAAgMBAQEAAAAAAAAAAAAAAREAITFBEKH/2gAIAQEAAT8hPQcNfJchxsXWDbsREi7b2IQQr5FMPMdBImPB+p//2gAMAwEAAgADAAAAEPjnQv/EABYRAAMAAAAAAAAAAAAAAAAAAAABEf/aAAgBAwEBPxCoqIiI/8QAFxEAAwEAAAAAAAAAAAAAAAAAABFRYf/aAAgBAgEBPxBoNBqaH//EABsQAQEBAQEBAQEAAAAAAAAAAAERACExcUFR/9oACAEBAAE/ELAk8BFOF+6Tc+QIHzJElVUdPwBID12zOsxxDxN+i/5NPxb0lB3Hqny1v//Z","aspectRatio":1,"src":"/static/ca172036b2d78c49ceae0cdeb5723e5b/eaa58/foldersCover.jpg","srcSet":"/static/ca172036b2d78c49ceae0cdeb5723e5b/5a3ee/foldersCover.jpg 114w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/41f8f/foldersCover.jpg 229w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/eaa58/foldersCover.jpg 457w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/c309b/foldersCover.jpg 686w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/e3008/foldersCover.jpg 914w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/0ff54/foldersCover.jpg 1200w","srcWebp":"/static/ca172036b2d78c49ceae0cdeb5723e5b/15384/foldersCover.webp","srcSetWebp":"/static/ca172036b2d78c49ceae0cdeb5723e5b/31fce/foldersCover.webp 114w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/e3e25/foldersCover.webp 229w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/15384/foldersCover.webp 457w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/0258d/foldersCover.webp 686w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/64ea2/foldersCover.webp 914w,\n/static/ca172036b2d78c49ceae0cdeb5723e5b/9000d/foldersCover.webp 1200w","sizes":"(max-width: 457px) 100vw, 457px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M12%202c7%203%207%203%200%203H8l8%202c2%200%202%201%202%202v2l3%201%201-1v-1c2-1%205%201%205%203l4%201%203-1%201-1%201-1c-1-1%200-2%201-2%201-1%201%201-1%207-1%203-1%203%201%203h1v-2l2-5%203-5-1%204v5h4l1%202%201%202-1%203v-1l-1-2-1-1c-1-2-4%200-4%203%200%202%200%202-4%201-3-1-3-2-1-2h-1l-7-1h-4c-1%202-2-1-1-3%201-3-7-7-9-4-1%201-2%202-1%200l-3-2c-3-1-4-1-3%201l-1%202-2%202c-1%202-1%202-1%200s-3-4-3-2l1%201v1l-1%208c0%205%200%206%201%204v16l1-2%201-5v1c0%201%201%202%203%202l3%202-2%201H5l1%201%202%201c1%200%202-1%202-3%201-1%201-2%202-1l2%201c1%201%201%201-1%201-3%200-3%203%200%203%202%201%202%200%203-1%200-2%200-2%202%200s2%203%200%203v1l-1%201-4%2011%205%201c7%201%209%203%204%203l-4-1-8-1c0%201%209%204%2013%204l3%201-2%201h-3l-1%201-1-1c1%200-6-3-7-2l-5-2c-7-2-7-2-7%206%200%205%200%206%202%207%202%200%203%204%201%204l-1-1c0-3-2-2-2%200s0%203%202%203c1-1%203%200%206%201l4%201-5-1H3c1%201%2018%205%2020%204l3%202c2%202-4%201-13-1-3-1-6-2-7-1H2c-6%200%200%203%208%203l1%201%202%201%201%201h-4c-3-1-3-1-3%201v2l-2-3c0-1-1-2-3-2-2-1-2-1-2%205l1%207v1L0%20253v147h289v-3l2-2v-1h-2c-2%202-1-1%201-6l2-5c-1-1%203-6%204-6l2%202c2%203%201%209-1%208-1-1-1%200-1%201l-1%202h-1v3c0%201%200%202%201%201l3-1c2%200%203%200%203-2%200-4%204-5%204-1%200%202%200%202%201%200l3-2c1%200%201%201-1%205l-1%204v1l-1%201h13c0%202%205%201%205-1h1c0%202%205%203%205%201h1l13%201h12v-3c0-5%200-5-4-12l-4-7-4%201c-5%200-8-4-6-11v-6l-10%201h-3l-1-1h-1l23-2c7%201%207%201%209%203%201%203%203%204%203%202l-1-1-1-3h1l4%201c3-1%204%200%204%205%200%202%200%202%201%201l1-4v-3h19c2%200%203%200%204%202s1%202%201%200c1-1%201-1%201%201l1%205c2%200%202-1%201-3-1-5-1-5%201-5l1%201v1l1-1%201-1v4l1%204%201%202c0%202-1%202-8%202-14%200-14%200-13%202h4c4-1%207%200%2011%206l3%207%201%201c1%200%202%202%202%205l1%205a11128%2011128%200%2000-1-292c0%202-1%203-4%202l-3-1%203-3%204-2%201-6c0-4%200-6-1-5%200%203-2%202-2-1l1-1c3%200%202-11-1-15s-2-5%201-1l2%202v-7l-1-6v4l-1%202v1l-3-1-3-3%202-2%201-2-2%201c-2%202-2%201-5-2l-3-5-1-1c-1%201-1%201%200%200l-2-3c-3-2-2-3%202-2%201%201%202%201%202-1l1-1c1%201%203-2%202-3h-1l-1%201h-1l-1%201h-1l-3%201c-2%201-2%200-2-1v-1h-2c-1-1%207-5%208-4l1-2c1-2%200-1-7%202-8%205-8%204-8-11l-1-10-1-10c0-11%201-12%201-1l1%207%206-7%201-1v3c2%200%203-3%202-4-2-1-2-1%200-5l2-3h-22l1%204-1%203-1-1h-1c-1%202%200%203%202%203s3%202%200%203v3c1%202%200%207-1%206v5c0%205%200%205-2%204-2-2-11-2-20%200h-4v-3l2-4-1-4c-2%200-3%203-2%207v5h-5l-3%201-4-1c0-2%203-3%204-2l1%201v-1l-1-3c0-2-3-4-4-3l1%202c3%201%202%202-1%202s-3%200-2%201%201%201-2%201c-2%200-3%200-3-2s1-2%204-1h3l-2-2c-2-2-2-3-2-5l-1%201h-3c0-2-1-2-3-1l-3%201c-2%200-3%201-4%205l-1%203-1%202c-1%203-1%203-1-2l-1-9c0-1%200-2%202-2%202-1%202-2%202-8l-1-8-8%208v1c-2%201-4-8-3-9l1%201h1c2-1%200-2-4-2-5%200-5%200-1%207a67%2067%200%20014%2010c1%202%201%202%201%200l1-3v-1l-1-1c0-2%204-1%205%202s1%203-2%203-3%203-1%2010%203%2011%201%2010l-2-7c-1-5-2-5-2-3v4l-1%203c-1%203-1%203-1-2%200-16-1-22-3-18h-3l-2-1h2l2-1h1l-2-6-3-5-46-1a553%20553%200%2000-49%201l-49-1C95%200%2089%200%2089%202v1l-1-1c0-2-1-2-5-2-5%200-6%200-7%203%200%202-2%203-2%203-2%200-2%200%200-2%203-3%202-4-8-4l-9%201%203%202h9l1-1%201%202-1%201-2%205-5%204h-1l-5%201c-4-1-4-1-2-4%201-1%202-2%204-1h4l-4-1c-4-2-5-2-7%200%200%202-1%202-2%200l-2-2h4c0-1-4-2-5-1V3c1-4%200-4-2-1l-1%203V2c1-2%200-2-4-2l-5%201h-1L20%200H7l5%202m292%205l1%208%209%201c2%200%203%200%203-2l-1-1c-2%201-1-2%202-5l1-4V3l2-1h1l-5-2-4%201v1l-2-1c0-1-2%200-2%202l2%201c1-1%202%200%202%201%201%202-1%204-3%203V7l1-2-2%201-1-2V1c1-1%200-1-1-1h-3v7m40-1l-2%202c-3%200-3%202%200%208%204%207%204%207%205%206h3c3%202%2010%201%207-1v-3l-1-1c-1%201-3-1-5-5-2-3-2-3%200-3l1-1h-4c-2%200-3%200-3-2h-1M159%2041v3c-1%202-1%202%202%203%204%201%205%201%202%201s-3%200-1%201h8l5-1%206-1c6%201%204%200-6-3-12-4-16-5-16-3M4%2047l-1%202v-1l-1-1c-1%200-2%203-2%209s0%206%203%206l2-1v-2h5c1%202%202%201%203-4l1-7-2%202-1%201v-2l-1-1-1%201H6l-1-1v-1H4m140%203l-1%201h-1l-2%203v2c2%200%201%202-7%209l-10%2010-1%2011v12l13-9%2012-9V67c0-12%200-13%202-14l2-2h-1l-1%201-4%202c-3%202-4%202-2-1l2-3h-1m0%2035a117%20117%200%2001-21%2015l2%204c1%203%201%203%201%201v-3l1-1v15l-2%203-4%202c-2%202-3%202-4%201l-1-1-1%201c1%201%200%202-2%203-3%202-3%202-5%201l-1-1v2c2%201%201%201-8%207l-8%204h-2c-2-1-5%201-3%203l-1-1-1%201c1%201%200%203-2%204l-9%207-5%204v-13c0-14%200-14%202-15s2-1%200-1c-4%200-8%207-8%2014l1%206%201%207v7l-7%207-7%207v-6c1-6%200-6-3-3-3%202-3%204-3%209s0%206-4%2012c-9%2014-16%2031-18%2045%200%205-1%206-3%207-3%202-3%202-1%202h3c0%202-1%202-3%202-3%200-4%200-4%202l3%201%203%201h-2l-3%201h2l1%203c0%202%200%203%201%202%200-3%203-2%203%200%202%205%201%206-3%206l-3%201h4c4%200%205%201%203%202-1%201%203%207%2010%2017l6%207h91l-1-4c0-4%200-5%202-5v-1l-2-1-1-1-4-8c0-2%200-2%202%200l2%204%204%202-2-2-1-5c1-2%201-2%203%202%203%206%204%209%202%207-3-2-2-1%202%206l3%206h16c14%200%2015%200%2015-2l-13-31h-11a806%20806%200%2001-18%204c-3%203-4%203-4-4v-5l-1%205-1%206-1-4-2-5-8-1c-4%200-4%200%202-1%205-1%205-2%203-2l-3-1-2-3c-2-2-1-14%202-14v1c-2%202-1%203%201%202%203-3%207-2%2010%204%202%204%202%208%200%206l-1%201%201%202%201%201-1%201h-1l1%202%201-1%201-1c1%201%202-8%202-13-1-2-1-3%201-4%204-1%206%200%208%203%201%202%201%202%201%200l-3-5c-2-3-3-3-3-2%200%202%200%203-4%203-4%201-4%201-5-2l-2-3v-2h-2v-1l-1-1v-2c-1%200-1-1%201-2l2-1%201-1c0-1%201-1%201%201%202%202%202%201%201-2-1-2-1-2%201-2s3%200%203-2l1-3%201-1-1-1c-1%201-1-1-1-4v-6l-1%208c0%203%200%204-2%205-3%201-3%201-3-1l2-2v-2l-1-1c-1%201-1%200-1-2l1-3%201-2-1-2-1-4c0-5%201-5%202%200%201%202%201%201%201-1%200-5-2-8-3-7l-1%202-2%208c-2%205-2%205%200%205%203%201%202%208%200%2011-2%201-2%201-2-1%200-1%200-2-1-1l-1-5c0-6-3-13-3-8l-3%203c-6%203-6%203-3-13l1-7%207-3c5-3%206-3%205-6l1-3c2-2%203-1%203%201l-2%207-1%201c-2-2-6%201-7%204-2%203-2%203-2%201s0-2-1%201c-1%204%200%206%201%203%201-1%201-1%201%201s1%203%203%201c3-3%209-6%2010-5l1-1%2010-6-2%204c-3%203-2%203%202%201%204-1%209-3%207-1l1%203c2%202%203%203%203%201%200-3%205-8%2010-10l5-4-4%201-6%202c-2-1-5%201-4%203v1l-2-2-2-2v1l-2%201c-4%200-4-1%200-3l8-5-4%201c-5%203-8%204-8%203l7-4%207-3v-20a32260%2032260%200%2001-2-34l-2%201h-1v-1l-1-1h-1l-2%203v1c3-1%203%203%200%205-2%202-2%202-3%200l-1-2-2-1c-2%200-5%204-3%204l1%203v3l1-3c2-3%202-3%203-2%201%200%201%201-1%202l-2%206-1%203-1%201h3l-1%202v2l-1%202-1%201%201%201v8c0%202-1%203-2%202h-1l1%202c2-1%202%201%202%205-1%202-1%203-2%202h-1c0%202-6%206-6%205h-2l-4%201%202-6v-9c-1-3-1-3%202-5l2-3%201-1%201%204c-1%203%200%205%201%206h1l1-2v-1c-2-2-2-3%200-5v-2l-1%201c-1%201-1-1-1-3%200-4%201-6%203-10%202-3%202-4%201-4-3%200-4-3-2-4l2-2-2%201c-1%201-2%200-2-6v-7l1-1%201%201v1l1-1c-1-1%200-2%201-1v-1c-2-1-2-1%202-1%202-1%202%200%202%204l1%204v-7c0-4%200-5%201-4l1-1c-1%200%200-2%202-3l3-1-2%202-2%202%202-1c3%200%203%205%200%208-3%202-2%203%201%201s8-7%207-8l-3%202-2%202v-4l2-7c2-3%200-3-4-1m54%202c-4%202-6%203-4%203s0%202-3%202v-2c-3%200-5%202-2%202v1h-8l3%201v3c1%201%200%202-1%203-4%202-1%201%205-1%202-1%205-2%206-1%202%200%202%200%201-1h1c2%200%202%200%201-1-2-1%202-3%204-1l1-1v-1l4%204%203%206c3%202%205%205%205%206h-2v2l-1%201%203-1c3%200%203-2%202-3s0-1%201-2h3c-3%202-3%202-1%202h2c1-1%201%200%201%202l1%203V99h4c5%201%2012-1%2012-2%200-2-4-6-8-8-1-1-4%200-13%203-10%203-11%203-13%202v-2l5-2c2-1%202-1%200-1l-4%202c-2%200-2-1-2-4v-3l-6%203m-41%205l-3%202v8l1%203c0%202%200%202%203%202l2%201v1l3-1c1-2%202-1%202%201l-2%204c-3%201-4%206-2%206l1-1h3c2%201%203%201%204-1%202-2%203-9%201-9l-1%203-1%202-2-1h1l1-2c0-3-2-4-5-4-3-1-3-2-1-2%203-1%203-13%201-13l-2%201c-2%202-3%201-2-1%200-3%200-3-2%201m50%2015l-2%201h-2l-10%204c-7%202-10%204-9%204%201%201%201%201-1%201h-1c1%201%201%201-1%201-2%201-3%204-1%204l1-1h2c2%200%202%200%201-1l-1-1h2l2%201v-1c-1%200%200-2%202-2v1h4l3-2%201-1c2%202%2013-2%2013-4l-3-1h-2l4-2c3-1%203-1%201-1h-3m15%2020l-1%205a77%2077%200%2000-14%205h2l2%201c3-1%203-1%203%204%200%207%201%208%205%207l4-1v-7c0-4%200-6%202-6l1-4c0-3%200-4-1-3-1%200-2-1-2-3-1-3-1-2-1%202m-29%2084c-2%202-3%203-5%203-3%200-3%200-3%203l3%204v2l-1%202h16l-8%201-10%202h7l6%201-5%201-7%201%2022-1c16-1%2016-1%2016-4h-1c-1%202-23%204-23%202l9-1%2011-2c4-1%205-4%202-4-2%200-2%200-1%201l1%202-2-1h-1l-7%201%203-1c2-1%201-1-2-1-4%200-4%200-3%202v1c-1%200-2%200-1-1l-9-1h-8l2-1c0-3-1-6-3-6l1-1h4v-5c0-3%200-3-3%201m-33%207l-5%202v7c0%207%200%207%202%207h12v-9c0-9%201-9-9-7m78%2014a153%20153%200%2000-18%202c-2%200-1%202%201%203h1c0-1%202%200%203%202%203%203%204%204%206%203h3l-3%201c-2%202-2%202%207%202a354%20354%200%200126-2c1-1%202-2%203-1l-4-7c-4-6-3-6-25-3m33%2046c2%201%200%202-4%201-3%200-2%201%203%204%206%203%206%203%2018%203h13l-6-4-7-4h-5l-2%201c-3-2-12-2-10-1M57%20317c0%202%200%202-3%202-2%200-3%201-4%203-2%205%201%208%206%207h3v-8l-1-7-1%203m170%200l-2%202c-2%200-3%202-4%204l-1%204-1-4c-2-4-2-4-6-4h-4v6l1%205%201-5c0-4%203-6%205-4%203%204%203%209%202%2010-2%202-2%203-1%203%202%200%204-4%206-10%202-5%203-5%204%201l1%204h4l-1-1c-3%200-2-6%200-8v-1l-2-1-1-2-1%201m36%203l-1%207c1%207%201%208%207%207%204-1%203-5-2-6-3%200-4-2-1-2%202%200%203-2%204-5%201-2%200-2-3-2l-4%201m49%2044l-1%203h-2c-5-1-5-1-6%203%200%203%200%203%202%203s2%200%202%204c-1%204%200%205%203%203%202-2%201-1-1%203l-1%204c1%200%203-1%203-3l3-2%201-1c1-1%204%200%203%202l2%201v-2c2%201%202%200%202-1%200-2%201-2%203-2%203%200%204%201%203%205%200%201%201%201%202-1s2-2%202-1h1l2-1c2%200%203%200%202-2l-1-2h-4l-4-1h-11a145%20145%200%20000-6l5-6-2-1-1%201c1%201-3%202-4%201l1-1%203-2c1-1%201-1-2-1-2%200-3%201-5%203m56%2011c0%2011%200%2011%204%2018l4%207-1-3-1-4%203%203c1%204%204%206%202%202l1-1c2%202%200-3-2-5l-2-2-3-8-4-12c-1-6-1-5-1%205'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"seo":{"src":"/static/ca172036b2d78c49ceae0cdeb5723e5b/0ff54/foldersCover.jpg"}}},{"id":"29268019-a0db-5d6e-adc8-85b3a994ee4f","slug":"/azure-functions-with-typescript","secret":false,"title":"Azure Functions with typescript","author":"Luke Celitan","date":"April 4th, 2024","dateForSEO":"2024-04-04T00:00:00.000Z","timeToRead":4,"excerpt":"A quick rundown on how to create an Azure Function using typescript","subscription":true,"body":"var _excluded = [\"components\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n/* @jsxRuntime classic */\n/* @jsx mdx */\n\nvar _frontmatter = {\n  \"title\": \"Azure Functions with typescript\",\n  \"excerpt\": \"A quick rundown on how to create an Azure Function using typescript\",\n  \"date\": \"2024-04-04T00:00:00.000Z\",\n  \"hero\": \"cover.png\",\n  \"author\": \"Luke Celitan\",\n  \"appDescription\": \"Serverless\",\n  \"category\": \"Post\",\n  \"tech\": [\"TS\", \"Nodejs\"]\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"h1\", {\n    \"id\": \"azure-functions-with-typescript\"\n  }, \"Azure Functions with typescript\"), mdx(\"h2\", {\n    \"id\": \"introduction\"\n  }, \"Introduction\"), mdx(\"p\", null, \"The so-called \\u201CServerless\\u201D technology was introduced by AWS with their Lambda\\nservice, and Azure quickly followed suit with their own rendition, Azure\\nFunctions. Azure Functions is an excellent way to run small pieces of code in\\nthe cloud without having to worry about the underlying infrastructure. Here is a\\nquick guide on how to create Azure Functions using TypeScript.\"), mdx(\"h2\", {\n    \"id\": \"azure-functions-v4\"\n  }, \"Azure Functions v4\"), mdx(\"p\", null, \"Azure Functions v4 is the latest version of Azure Functions. In addition to many\\nlanguages supported by Azure Functions including C#, JavaScript, Java, Python,\\nand PowerShell, Azure Functions v4 has added support for TypeScript.\"), mdx(\"p\", null, \"The almost native support for TypeScript in Azure Functions v4 is a great\\naddition, as it\\u2019s included in the development runtime, CLI commands, and\\ntemplates. In the JavaScript version, users have to add those cumbersome binding\\nJSONs, but this isn\\u2019t necessary in the TypeScript version. Unfortunately, the\\nunderlying Func engine (Azure Core Tools) does not support custom path aliases\\n(@utils) in the tsconfig.json, a feature beloved by TypeScript developers.\"), mdx(\"h2\", {\n    \"id\": \"the-serverless-use-cases\"\n  }, \"The Serverless use cases\"), mdx(\"p\", null, \"Back in the day, when serverless was starting to gain serious hype, dreams of\\nautomatic upscaling went wild. Despite Azure Functions clearly defining its\\npurpose, some people started using them as a replacement for traditional web\\nservers. It became quickly evident that the costs for functions were higher than\\ncontainers or VMs.\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Azure Functions are exceptional for small pieces of code that are triggered by\\nevents.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"They\\u2019re also an excellent solution for moving interfaces and functions that\\nare significant bottlenecks for the main application.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"They can circumvent current limitations of the main application by creating a\\nnew function that performs tasks incompatible with the main server, or when\\nchanges to the system are costly or risky.\")), mdx(\"h2\", {\n    \"id\": \"development\"\n  }, \"Development\"), mdx(\"p\", null, \"We are obviously working with Node.js here, making the development fairly\\nstraightforward. The func CLI tool, part of the\\n\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://www.npmjs.com/package/azure-functions-core-tools\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"Azure Core Tools\"), \", is\\nused to create the functions.\"), mdx(\"p\", null, \"The actual SDK package is\\n\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://www.npmjs.com/package/@azure/functions\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"@azure/functions\"), \", which is\\nused to create the functions and handle requests.\"), mdx(\"p\", null, \"The Node.js \\u201Cprogramming model\\u201D should not be confused with the Azure Functions\\n\\u201Cruntime\\u201D. The programming model defines how you author your code and is\\nspecific to JavaScript/TypeScript. The runtime defines the underlying behavior\\nof Azure Functions and is shared across all languages. The programming model\\nversion is tied firmly to the version of the @azure/functions npm package, and\\nis versioned independently from the runtime.\"), mdx(\"p\", null, \"Unfortunately, both the runtime and the programming model are on \\u201C4\\u201D as their\\nlatest major version, but this is purely coincidental. You cannot mix the v3 and\\nv4 programming models in the same function app. As soon as you register one v4\\nfunction in your app, any v3 functions registered in function.json files are\\nignored.\"), mdx(\"h2\", {\n    \"id\": \"chart-to-image-function\"\n  }, \"Chart to image function\"), mdx(\"p\", null, \"My Azure Function example/template is an HTTP trigger function that creates a\\nPNG based on the node-canvas package given specific request parameters.\"), mdx(\"p\", null, \"Recently, I was tasked with proving a concept for a chart to image conversion.\\nMy main application\\u2019s current stack was having a hard time accepting\\nCanvas-node, known for its difficult installation\", \"*\", \". Azure Function seemed like\\nan elegant solution for this problem.\"), mdx(\"p\", null, \"*\", \"This is a subjective opinion based on the node-canvas issues on the GitHub\\nrepo.\"), mdx(\"p\", null, \"As usual, I added much-needed development tools such as ESLint, Prettier, Husky,\\nand Commitlint for proper code quality maintenance. Additionally, I added the\\nVitest test for unit and integration testing.\"), mdx(\"p\", null, \"You can see a full github repo example\\n\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/MassivDash/chart2img\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"here\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-ts\"\n  }, \"import {\\n  app,\\n  HttpRequest,\\n  HttpResponseInit,\\n  InvocationContext,\\n} from '@azure/functions';\\n\\nimport { extractColors, createCanvas } from '../utils';\\nimport { barChartOptions } from '../charts';\\nimport { Chart, ChartConfiguration, ChartItem, Plugin } from 'chart.js/auto';\\n\\nexport async function barChart(\\n  request: HttpRequest,\\n  context: InvocationContext,\\n): Promise<HttpResponseInit> {\\n  try {\\n    context.log(`Http function processed request for url \\\"${request.url}\\\"`);\\n\\n    const { canvas, ctx } = createCanvas(400, 400);\\n\\n    const plugin: Plugin = {\\n      id: 'customCanvasBackgroundColor',\\n      beforeDraw: (chart, _args, options) => {\\n        const { ctx } = chart;\\n        ctx.save();\\n        ctx.globalCompositeOperation = 'destination-over';\\n        ctx.fillStyle = options.color || '#99ffff';\\n        ctx.fillRect(0, 0, chart.width, chart.height);\\n        ctx.restore();\\n      },\\n    };\\n\\n    const plugins = [plugin];\\n\\n    const labels = request.query.get('labels')?.split(',');\\n    const dataValues = request.query.get('data')?.split(',').map(Number);\\n\\n    if (\\n      !labels ||\\n      labels.length === 0 ||\\n      !dataValues ||\\n      dataValues.length === 0\\n    ) {\\n      throw new Error('Unable to create');\\n    }\\n\\n    const backgroundColorsRaw = request.query.get('backgroundColors');\\n    const borderColorsRaw = request.query.get('borderColors');\\n\\n    const backgroundColors = extractColors(backgroundColorsRaw);\\n    const borderColors = extractColors(borderColorsRaw);\\n    const data = {\\n      labels: labels,\\n      datasets: [\\n        {\\n          label: 'My First Dataset',\\n          data: dataValues,\\n          backgroundColor: backgroundColors,\\n          borderColor: borderColors,\\n          borderWidth: 1,\\n        },\\n      ],\\n    };\\n\\n    const chartConfig = {\\n      type: 'bar',\\n      data: data,\\n      options: barChartOptions,\\n      plugins,\\n    };\\n\\n    new Chart(ctx as unknown as ChartItem, chartConfig as ChartConfiguration);\\n\\n    const pngBuffer = canvas.toBuffer('image/png');\\n\\n    // Set the headers and send the PNG buffer in the response\\n    request.headers.set('Content-Type', 'image/png');\\n    request.headers.set('Content-Length', pngBuffer.length.toString());\\n    return {\\n      status: 200,\\n      body: pngBuffer,\\n      headers: request.headers,\\n    };\\n  } catch (error) {\\n    context.log(error);\\n    return {\\n      status: 500,\\n      body: 'Internal server error',\\n    };\\n  }\\n}\\n\\napp.http('barChart', {\\n  methods: ['GET', 'POST'],\\n  authLevel: 'anonymous',\\n  handler: barChart,\\n});\\n\")), mdx(\"p\", null, \"This function expects almost all data to come in the query parameters, and it\\ndynamically creates the bar chart image. When calling the function, labels,\\ndata, background, and border colors must be supplied.\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"https://spacechart.azurewebsites.net/api/barChart?labels=SpaceGhost,Moltar,Metallus,Transit,Zorak,The%20Creature%20King,Blip&data=100,59,80,81,56,55,40&backgroundColors=rgba(255,%2099,%20132,%200.2),rgba(255,%20159,%2064,%200.2),rgba(255,%20205,%2086,%200.2),rgba(75,%20192,%20192,%200.2),rgba(54,%20162,%20235,%200.2),rgba(153,%20102,%20255,%200.2),rgba(201,%20203,%20207,%200.2)&borderColors=rgb(255,%2099,%20132),rgb(255,%20159,%2064),rgb(255,%20205,%2086),rgb(75,%20192,%20192),rgb(54,%20162,%20235),rgb(153,%20102,%20255),rgb(201,%20203,%20207)\\n\")), mdx(\"p\", null, \"The final result is a simple bar chart image that can be downloaded or used in\\napplications, emails, or other mediums that might work better with images.\"), mdx(\"p\", null, mdx(\"span\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"400px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"100%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAACWElEQVQ4y41U2XLiMBDk//8uhN0Hx2RrcQDfNvg+NL09sp1gh0qtqK5uCak1mpG1ExFsm9QtUNaQGf+jpSD6ATs1aNsWURRZJEmC0QsA14McPyBkzCzux3NNhnOCxPlkOI6jNe373sIEKXAKIF4IIeNjYvFm7c1a+eRP/b9XSF5g93hkY4w1N3dOzv5yAnfNTkDuWRayjpuCprqOMKOBGLHQ9dZwMc3zHGEYwsRHwN9D/FfIdQ8EB8viH4DrC0z6B0sYRtfPP2toi7ApjKkTJpxHIUxxpQ4sax9kU6eMaOTCgSYDlqA+I9SmucuyDLfbjQuY7OoNpnJhSpf6aFn7k3a4gQO5/+bcs432m6Hm7n6/EwVAQ9AQNECpfJzZnbXyO+Hwivhrw2dHztoaYVMhIsK6/OJ6PabI2gZTfTYRKutx9S665D2P/0rs05Scz5x9av3/Jc3gcO63HD5CB6OmwbmqcSHOVYVLPbOOUV+pfWUibprnhkthGk7w8gFOMuKNcJIBbjrx2zxWdw8p2gSzMqx1xzjGMetwoMGvpMch7tZMZM2oTvYOqsnKEE9adjMIYx49UR7JMrEdEwyDsYbL17Uy1Lun0Mj0YYjjCLE3IuDtCI5iEb5/aZ+3Z+x/MByGweau67rPxyGPDJILkF4EydmQQZa5T8OfItwedypMy3w2NqcVK6taecn1YvLU8LEo+rUEQYCyLHEvSvvVKIpZP97ZrV6w+6q+rKLs+fp2Xc93spt1ZyNYNn4MYjFTvdvuuDy22vRO6rG1VYx6GddnbjFSray10ML+A1NaEFAZa1RoAAAAAElFTkSuQmCC')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"picture\", {\n    parentName: \"span\"\n  }, \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"/static/b37843f27eae334b70c2e5221186402c/28a80/barChart.webp 400w\"],\n    \"sizes\": \"(max-width: 400px) 100vw, 400px\",\n    \"type\": \"image/webp\"\n  }), \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"/static/b37843f27eae334b70c2e5221186402c/a3397/barChart.png 400w\"],\n    \"sizes\": \"(max-width: 400px) 100vw, 400px\",\n    \"type\": \"image/png\"\n  }), \"\\n          \", mdx(\"img\", {\n    parentName: \"picture\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"src\": \"/static/b37843f27eae334b70c2e5221186402c/a3397/barChart.png\",\n    \"alt\": \"Space chart\",\n    \"title\": \"Space chart\",\n    \"loading\": \"lazy\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    }\n  }), \"\\n        \"), \"\\n    \")), mdx(\"h2\", {\n    \"id\": \"conclusion\"\n  }, \"Conclusion\"), mdx(\"p\", null, \"In summary, serverless functions like Azure Functions have surfaced as\\ninnovative solutions that offer a different perspective to addressing common\\nproblems in scaling and software compatibility. As showcased by the example\\nabove, serverless functions can tackle specific tasks that might not be feasible\\nor efficient within a primary application\\u2019s context.\"), mdx(\"p\", null, \"The advent of AWS\\u2019s Lambda service marked the beginning of a new era of\\nserverless computing, and the technology was soon embraced by Azure in the form\\nof Azure Functions. This new technology was appealing as it allowed small code\\npieces to be executed in the cloud without worrying about managing the\\nunderlying infrastructure. Whatever Azure lacks in first-mover advantage, it\\ntries to compensate with new features and support for a wide array of languages,\\nnotably recently introducing TypeScript support.\"), mdx(\"p\", null, \"However, serverless computing comes with its unique challenges and\\nmisconceptions. Despite their seemingly endless benefits, Azure Functions or its\\nequivalents are not the ultimate solution to every problem\\u2014they cannot and\\nshould not replace traditional web servers entirely. It\\u2019s crucial to understand\\nthat even though serverless functions can auto-scale, their costs can exceed\\nthose of containers or VMs, which can be surprising and detrimental for\\nuncritical adopters.\"), mdx(\"p\", null, \"Instead, serverless functions excel when applied to small tasks, driven by\\nevents. They also function well when moving interfaces and tasks that weigh\\nheavily on the primary application, allowing for improved overall performance.\\nThey can also serve as a perfect solution to address compatibility issues,\\ncircumventing limitations present within the primary application by offering a\\nplatform to build functions that can carry out tasks that the main server is\\nincompatible with.\"), mdx(\"p\", null, \"To conclude, serverless functions, along with exciting emerging technological\\nadvances in the industry, should be seen as beneficial tools within a\\ndeveloper\\u2019s toolbox. However, like any tool, their adoption should be based on\\nneeds, feasibility, and context. A careful understanding of their use cases,\\ncosts, advantages, and disadvantages is mandatory for making an informed choice\\nabout when and how to use Azure Functions or any serverless technology. It is\\nessential to remember that advancements in technology inevitably come with their\\nown set of challenges, and serverless functions are no exception. Therefore,\\nthey should be approached with caution, critical evaluation, and a readiness to\\nadapt and learn.\"));\n}\n;\nMDXContent.isMDXComponent = true;","tech":["TS","Nodejs"],"category":"Post","appDescription":"Serverless","hero":{"full":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAAEVElEQVQ4y21UayycaRT+/vvjl19sm25T20VLd5edJsW4zpjBYLTGaK0q47LubRO6iYhqyLIJVkRco4KgWja7tu7XBnEnEloV9/v9Fgl59j2vzsRu9ktOzve973mf9znnPOcT5ubmsLi4iKWlJSwvL2N1dRVra2vY2tri67OzsygqKkJ6ejoGBgYwNjaGw8NDbG9v8xiyzc1NnQmXAVdWVjgYGW2S7+npQVNTEzo6OlBTUwOFQsHBd3d3sbOzw+O0oBsbGxDm5+c54GV2tLG3t4fR0VG0t7dzluPj4ygvL4dMJoOenh7i4+NxcHCgA9SCCgsLCzp2BEgbBEoXEKuuri40NzejtbUVxcXFsLa2hpGREaysrDA5OYn9/f1/gQpadgRIzGZmZlBbW4uqqirU19ejt7cXg4ODGBkZgVKphCAI0NfXh6GhIerq6nB8fKyr+f8CEuPGxkZu+fn5yMzMhEqlgkajgZmZGQc0MDCASCRCW1sb6Dk6OtI1SZeytoa0QcDkiUFqaioCAwMhkUgQFBQES0tLDmhhYQE/Pz/ExcVhaGiI15MD/rcpBKa9gNKurKyEv78/Z2ZsbAw7OzskJiYiNzcXCQkJiIqK4nFUSyLBAS+zXF9f5zdRCciT5vr7+xETEwNTU1Pk5OTwuPPzc5yenuLs7AwnJydcQjqGBEhGTMkmJib4Nz3EmjRHHW1oaOBMSFLampHXlomao0uZAGhhamqK1ywiIgKlpaVcEqTBkJAQDkqZaGtM7AmULqXMyAtEXws4PT3Np0IsFsPJyQnZ2dm8MQUFBejq7ubgdIiM0iwrK0NFRcUFOwZIWMIbpjkS72c2DX19fXy0HBwc8Pf79ygsLORSoe5SGUpKSpCUlMQvoAkKDQ2FWq1GXl4ehoeHMceyFZ4/e4YKNlKtLc3oZ4De3kp8w7oZHhaGWNYIicSZMc3Cu7dvERUZCVe5HA+ZXH7LyEBMdDRsbW0glUqQlZWJstevIUhUAXD118AnNAaq8Dg8CImGmY0zTO45wlrhA2VwBHzCYkFxtp4q7p2/nPnO0RW3bCWQ+j6Gd3Ak1BFPIdwQu+KO7D7MnD1hLlXittQLlgo17no9gvmX9VsSL/zgpoKluy/bV+KO/AHMXbx5HMVct5HhaxsXXLOWQqBgWUAYPIKjuLf3fQKXn0L5u5NfMOxUgXB+pIE8IJx7t8Cfeaz8cTg3kYca3zq446a9G4zFcghfWYlx5Ud7XBE54OpdR9y0Y2kwViaOCs7Y3EUJE3bAgjExZWvfu/rghq2Mn7nNyFy/J8E1do6yFHk+ZDV0kcHL+z4Unl54lZqGto5ONLW04kNvH/748y+k/ZqB2KfP4e7hCYr99HkWmVm/40mwBuWVVejo7EZefgE704aCopKLnwOJe35+junoQrSfPn7kMmhpaWGzXIFO9l+sq3uHIiajeqbLVykpqK6uxi8vXqCZ6TYtLRXJyclIefkS/wA8nocLH7tgqAAAAABJRU5ErkJggg==","aspectRatio":1,"src":"/static/96cc0c73a4e35c7fe3e8d7299b488a0e/a1946/cover.png","srcSet":"/static/96cc0c73a4e35c7fe3e8d7299b488a0e/5b37e/cover.png 236w,\n/static/96cc0c73a4e35c7fe3e8d7299b488a0e/49058/cover.png 472w,\n/static/96cc0c73a4e35c7fe3e8d7299b488a0e/a1946/cover.png 944w,\n/static/96cc0c73a4e35c7fe3e8d7299b488a0e/6050d/cover.png 1200w","srcWebp":"/static/96cc0c73a4e35c7fe3e8d7299b488a0e/99fbb/cover.webp","srcSetWebp":"/static/96cc0c73a4e35c7fe3e8d7299b488a0e/77392/cover.webp 236w,\n/static/96cc0c73a4e35c7fe3e8d7299b488a0e/1f177/cover.webp 472w,\n/static/96cc0c73a4e35c7fe3e8d7299b488a0e/99fbb/cover.webp 944w,\n/static/96cc0c73a4e35c7fe3e8d7299b488a0e/9000d/cover.webp 1200w","sizes":"(max-width: 944px) 100vw, 944px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M197%201l-1%202-1%201c-2%200-2%200-2%202l-2%204-1%201v3l-3-1c-1-1-1-1-1%201l-1%203c-2%201%201%203%206%204%204%202%205%202%206%200l3-1v-1l2-3h3l4%202c3%200%204%200%203-1%200-2%201-2%204-2l4%201-4%201c-2%200-2%200-1%201h5l2-1c-2%200%200-2%203-2%205%200%2013%205%2012%207v3l-2%201c-4%201-4%203%202%204l3%202h-3l-1%201%203%201c4-1%204%201%200%204l-2%203h-4c-4%200-4%200-2%201%203%201%203%203%200%202l-3%201v1l1%201c-1%201%200%201%202%201l6%203%204%203%201%201c0%202-11%202-12%201h-4l-4%201c-3%201-2%201%2011%203l17%205%203%201h-3c-3%200-3%200-1%201%203%202-3%202-12%201h-12l9%203c8%200%207%201%200%201l-10%201%201%201%202%201h5c2%201%202%201%200%201s-3%201%200%203c1%201%201%201-1%201-4%200-6%202-3%202h3l-2%202c-2%201-3%203-3%205l-1%202c-2-1-1%200%201%202v2c-2%200-2%203%200%205%202%201-2%202-11%201-7%200-7%200-6%201l3%202c2%200%202%201%203%203%200%202%200%202-2%202l-2-1%201-1-1-1c-1%200-2%200-1%201l-3%201-8-1-13-3h-9l-8-1-10-2c-3%200-8-4-8-6h-1l-1-1v-3h2c4%201%203-2-2-4-6-3-6-3-6%200s0%203-6%202c-4%200-5%200-4%201l6%201c3%200%204%200%204%202l4%2017h7l-2-3-1-2c1%201%203%200%204-1%202-1%206%200%206%202%200%201%202%202%2010%203h4c1%201%205%203%206%202l1%204c0%204%202%206%2010%208l3%201-3%201c-4%202-7%201-28-5-19-6-18-5-16-4l31%2010c12%203%2012%203%2014%201s3-3%203%200l-2%201-1%202%207%201%202%201-3%201h-3v1l20%204a1141%201141%200%200080%2013c4%202%205%202%206%201v-1l-1-1%203%201c4%201%2040%202%2047%201%204-1%208-4%208-6l-6-7%201%202c5%206%201%2010-10%2011-3%200-4%200-3-1%2012-2%2015-4%2011-9l-1-3v-1h-2c-2%200-2%200-1-1h-1c-2%200-2%200-1-1v-1h-1l-1-1h-1l-1-1h-2c1-1-21-9-22-8l-1-1-2-2-2-4c-1-1-1-1-1%201v4l-10-3%201-7c2-6%202-11%202-19%201-15%200-18-3-18l-16-3%209%201c10%201%2011%200%201-2l-6-1%206%201c8%200%208%201%201-14a85%2085%200%2000-72-45c-8%200-11-1-11-5h-2l-1-1V4c2-2%201-3-3-4-1%200-2%201-2%204%200%204-1%205-5%204h-4V1m-27%2071c-1%202%201%204%202%202%202-1%2012%200%2031%206l9%201%206%201%203%201c3%200-2-3-6-4-15-4-22-5-22-4h-5l-6-2-5-2h-5c-1-1-2-1-2%201m-49%2010l-7%203c-2%200-3%204-2%204l18%201-1-4-1-2c0%202%200%202-3%200l-3-2h-1m94%2036l-1%208c0%203%202%203%203%200%200-1%201-2%203-1l13-2h-4c-5%200-7-1-7-5%200-2%201-3%206-3l6-1h-7l-9-2c-3%200-3%200-3%206m-61%209c2%205%204%207%205%206%201-2%2019%205%2031%2011l7%204h-16v-1h-3l-5-1v1l-1-1c-1-2-6-3-6-2l19%2015%204%203c-1%200-1%202%201%204%201%201%201%201%202-1%200-2%200-2%205-1l3%202v9c0%205%200%206%201%204l1-9v-4l8%202%209%202v4c0%203%200%204-2%204v1c1%201%201%201-1%201l-7%201c-7%201-3%203%207%203%204%200%204%200%204%204s2%204%203%200c0-3%201-3%203-3%206%200%2016-1%2018-3%201-1%201-1-1-1l-2-1-3-1c-4%200-4-9-1-9a97%2097%200%200043-20l-18-3a935%20935%200%2001-108-20m141%203v4l1%202c0%202%201%202%207%202l6-1v-1c2-2-2-5-9-8-2-1-3%200-5%202m-82%205a552%20552%200%200075%2012h2l-2-1-4-2h-4l-15-2a1049%201049%200%2001-52-7m-59%202c-2%200-2%201-1%201v3l1%201h-2v1c2%202%202%202%200%202v1c2%202%201%203-2%204s-4%203-1%204c4%202%209%201%2012-2%207-7%201-19-7-15m-33%2051v4l-1%202c-2%200-2%201-2%203s0%203%202%203l1%202-1%202-2%201c-2%200-7-7-7-10h-1l-1%203c0%203%200%203%201%202s1-1%202%201l-1%204v4c-2%200-2-3-1-5%202-2%201-2-3-1-4%200-5%204-3%206l2%202-4-2c-2-2-2-2-4-1-3%201-3%204%200%203v1l-1%206%201%205c0%202%201%204%203%205l2%204%201%202c1%200%201%2010-1%2010l-1%203-1%204-1%204-1%205c-1%201%200%202%201%203%201%202%201%202-1%202s-3-1-3-6l1-7c2-2%200-8-3-11-4-4-4-6%200-7l2-3c-1-2-3-3-3-1l-2%202-2%202c-1%201-5%202-5%200%200-1-1-1-1%201-1%202-2%205-2%2011l-1%206c-2%205%200%2019%202%2018h7l-3%201c-1%200-2%200-1%201l-3%201-3%201h-3l-4%201H57l3%201%204%201h2l3-1v1c-2%201%203%201%209-1%202%200%202%200%201%201-2%202-2%202%201%202l3-1h2l2-1h-1l-1-1c0-1%203-3%205-3v1l-2%203c-1%202%200%202%208%202l4%201-1%201v2l-1%202-49%201H0v90h12l21%202c10%201%2015%201%2037-3h4l-5-3-5-2%207%201c19%201%2031%200%2020-3l-23-7h5a832%20832%200%200087%200c32%200%2036%200%2032%201l-11%202c-7%202-9%202-10%201h-1c-1%202-1%202%204%204l4%201-4%201c-2%202-4%202-7%202h-4l-2-1h-4l-2%201h-3l-3-1c0-1-3-1-4%201l-1%202%203%201%209%202c8%202%2013%203%2013%201-1-1%200-1%206-1l8%201%206%201%2011%201h10c0%202%2019%205%2041%206l15%201v12h6c6%200%207-1%207-7l1-5%201-3v-4c2-4%203-6%203-11%200-4%200-4%204-4%203-1%204%200%205%204l3%205%201%203%203%203%201%201v4c-1%207-2%2011-4%2010-3-1-6%200-5%202h4l3%201h2c2%201%2013%201%2012-1v-9c0-5-1-7-2-8v-2l-4-8-4-9c1-1%2023-2%2025%200%201%200%201%201-1%201-3%203%2019%206%2030%204%207-1%206-1-2-2-9-2-5-2%209-2%209%200%2013%200%2011-1-5-1-5-2%200-2l15%201h10v6c0%204%200%205-2%205v-1c1-1%201-1-1-1l-2%201-4%201c-4%200-5%200-4%201%200%202-5%205-10%205l-7%202-8%201h-4l2%202c0%201-18%204-29%204l-11%201%202%201h4c2%201-3%202-7%201l-3%201%201%201%201%201c-1%201%200%202%202%202a133%20133%200%200033-1l-3%204c-4%201-1%202%206%202l6-1h7l18%201h13v-7l-10%201h-28l11-9a323%20323%200%200021-4c-1-1%200-1%202-3l4-2%201-46v-44h-40l-40-1%2028-1c17%200%2027%200%2025-1l-10-1-7-1%201-2c0-1%201-2%202-1l1-1-2-1h-1l-1%201c-4%200-2-3%203-4%204-1%205-2%203-8-3-7-3-12-1-12l1-1-2-1c-3%200-5-2-3-3s0-10-3-11v1c1%200%201%203-1%205l-1%203c0%204%200%205-3%205l-3%202h3c2%200%202%200%202%205%200%204%200%205-2%205l-2%202c-1%202-2%201-1-2l-1-5c-1-1-2-2-1-4l-1-3c-2%200-2-1-2-10l-1-12c-1-1-1%202-1%2011%200%208%200%2012-1%2011l-2%201c0%201-1%202-2%201-2%200-3%201%200%203%202%202%201%203-1%203s-3-1-3-2h-1l-1-1v-3l2-6c1-5%201-6-2-8l-2-4-1-1v-2c0-3-2-5-8-6-2-1-3-1-2%201l-1%201c-1-1-1%200-1%201h-4c-4%200-4%205-1%208%203%202%203%202%201%202-2%201-2%202-2%206l1%204h1l-1%202h-3l-2%201c-4-1-4%204-1%205%206%202%209%200%209-6l1-2c1%200%205%203%203%203s-4%203-3%206v9c-1%206-1%206-4%206s-4-1-2-3c1-1%200-3-1-2l-1-1-1-1-1%204c1%203%201%203-2%202h-4l-1-9-1-9c-1-1-2-2-1-4%200-3-3-7-5-5%200%201-1%202-3%202l-1%202-3%205c-2%202-2%204%201%204l1%202%201%201%201%203%201%204c3%200-2%205-5%206l-4%201h-2l-2-2-1-2c-2%200-3-5-3-13l-2-4-2-4c0-2-2-3-2-3-2%200-2-1-1-3l-1-2h-1l-7-1-1%203-2%201h-1l-1-1v5c2%203%201%203-4%209l-2%202-2-2c-1-1-2-3-1-4l-1-3-2%201h-1l-4%202c-1%201-2%202-3%201v-2c1-1%201-2-1-3l-2-2-2%202-2%201%201-2%201-1c-1-1%200-1%201-1l2-1h-1l-2-1c0-2-2-3-4-1h-2c0-2-2-1-1%201l1%202v2l-1%205%202%2010c2%208%202%208-5%208-4%200-5%201-5%202%200%202%200%202%202%201h5l4%201%205%201%204%202%206%201c1%201%201%201-1%201h-17l-8-2c-5-2-7-7-5-11%202-2-1-6-3-5l-2-1c-2-1-4%207-2%209%202%201%200%202-4%201-3-1-3-1-1-13l3-7c1%201%203%203%202%204l1%201c2-1%201-10-1-16-2-3-3-5-2-6%201-2%200-7-2-6l-2-1c0-2-3-1-3%201l-2%202c-1%200-2-1-1-2h-1c-3%204-3%206%201%205%203-1%203-1%203%201s-2%203-2%201h-5v1l-1%201-3-3c-2-3-4-4-5-2v2h-1l-1%202-2%204v-3l2-5c1-2%201-2-1-2-3-1-4%200-2%201l-1%204c-1%203-1%203-2%201s-1-2-2%202c-1%203-2%205-4%205h-3c0-2%202-3%204-3l1-2%201-3%201-4-4%203-2%202c-1-1-1%200-1%201l-1%202c-2%200-6%207-6%209l-1%201c-2%200-3%203-1%205l1%205c0%204%200%204-2%204-5%200-9%205-5%208%201%202%201%202%204%200%203-1%206-2%2014-1%206%200%206%201%200%202-4%200-6%201-4%202l-4%201-9%201h-5v-1l1-1c-1-1%200-1%201-1l1-1-3-1c-2%200-4-4-3-6h-1c-4%200-7-1-5-2v-4l-1-1-1-2-1-5v-2c-1-2%200-6%203-6%205-2%204-10-1-12h-2l2-1h5l1-2%203-1c1%200%201%201-1%202l-2%203%203-2c4-3%2013-1%2013%203%200%202%202%201%203-1%201-3%203-5%206-5s3%200%202-1c-2-1-2-1%200-1%201%200%202%200%201-1v-1l-2-1c-1%201-3%200-5-1l-2-2%204-3%207-2c2%200%203-2%202-4%200-2-2-2-4%200-1%202-9%202-13%200-3-2-4-2-4-1h-1c-2%200-3%200-2%202h-2l-3-1-1-1v-1l-1%201-1%201-2-2h-3l1-1-2-2c-3-1-4-2-3-3%201-3%201-17-1-17l-1%202m85%2015l-1%202-2%202-3%204-1%202c-5%204-3%208%204%2010%209%203%2017-8%2012-17-2-5-6-6-9-3M19%20245l-1%203c-1%202-1%202-3-1l-1-1v6c-1%201-1%200-1-1l-4%207-4%203-1%202c2%202-1%207-3%206-1-1-1-1-1%203v4h5c4%200%204%200%203-1l-1-3-1-2v-2c0-3%201-3%203-2%203%200%201%2013-1%2016l-2%202h2c5%200%209%200%2011-2l17-1h19c4-1%203-1-6-1l-16-1H20l2-1%203-1h-4c-4%201-5%200-2-2l1-2-2-1c0-1%201-2%203-2%206%200%208-2%207-5l-2-4c-2-2-3-9-3-12s-1-6-3-6l-1%202m32%2015c-2%200-4%206-3%207l-1%203h-2c-1-2-1-2-3-1h-3l-2%202%202%201h3l-3%201-2%201%202%201%207-2%205-1%202-1c2%200%203%200%202-3v-6c-1-2-1-3-4-2m343%207c-3%202-5%202-6%201-2-2-5-1-4%201l-10%204-11%204h25l7-2c-2-1-2-1%201-3%202-1%204-2%204-4s0-2-6-1m-219%202l-4%201c-5%201-5%201-2%202l3%202c0%202%203%203%2010%203%202%200%203%200%202%201l-4%201-14%204c-4%200-5-2-2-2s-2-2-6-2c-3%200-2%202%201%203%203%200%203%200%201%201s-2%201%201%201%203%200%202%201%2012%201%2034%201c33%200%2036-1%2019-3l-4-1c1-1%200-1-2-1-5%200-12-2-9-2%202%200%200-2-3-2-5%200-16-3-15-4%202-2%200-4-4-4h-4m71%209c-10%200-13%201-8%202h13c3-1%204-1%202%201l-2%203c0%202%203%202%2029%202%2029%200%2030%200%2027-4-1-2-3-2-10-1-15%202-37%202-35%200l4-1c3-1%203-1-1-1l-5-1-3-1-11%201m11%2042c-2%200-2%201-2%207l1%207%201-2%202-2c5%200%207-4%205-9-2-2-2-2-7-1m-54%2041l-3%203h-3l3%201%203%201-5%201c-3%201-5%203-5%204l-2%202c-3%200-1%202%202%201%203%200%205-2%203-2-3%200%208-3%2014-3h4l-1%201%2011-6-15-2-5-1h-1m47%200c-17%200-20%201-17%204%202%202%202%203%202%207l-1%205%205%201a293%20293%200%200027%205v-1l1%203%201%203%201-3%202-4%201-3v-2l-1-3-2-2h4c3-1%204-3%202-2l-2-1-1-1-6-5-16-1m-88%2031c-3%202-6%203-4%201l-1-1-2%201c-1%201%200%201%201%201v1l-3%201-2%201c-2%202-2%203-1%203l2-1%204-1%203-1-3%201c-3%202-3%202%206%202h9l-1-3-4-8-4%203'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"regular":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAAEVElEQVQ4y21UayycaRT+/vvjl19sm25T20VLd5edJsW4zpjBYLTGaK0q47LubRO6iYhqyLIJVkRco4KgWja7tu7XBnEnEloV9/v9Fgl59j2vzsRu9ktOzve973mf9znnPOcT5ubmsLi4iKWlJSwvL2N1dRVra2vY2tri67OzsygqKkJ6ejoGBgYwNjaGw8NDbG9v8xiyzc1NnQmXAVdWVjgYGW2S7+npQVNTEzo6OlBTUwOFQsHBd3d3sbOzw+O0oBsbGxDm5+c54GV2tLG3t4fR0VG0t7dzluPj4ygvL4dMJoOenh7i4+NxcHCgA9SCCgsLCzp2BEgbBEoXEKuuri40NzejtbUVxcXFsLa2hpGREaysrDA5OYn9/f1/gQpadgRIzGZmZlBbW4uqqirU19ejt7cXg4ODGBkZgVKphCAI0NfXh6GhIerq6nB8fKyr+f8CEuPGxkZu+fn5yMzMhEqlgkajgZmZGQc0MDCASCRCW1sb6Dk6OtI1SZeytoa0QcDkiUFqaioCAwMhkUgQFBQES0tLDmhhYQE/Pz/ExcVhaGiI15MD/rcpBKa9gNKurKyEv78/Z2ZsbAw7OzskJiYiNzcXCQkJiIqK4nFUSyLBAS+zXF9f5zdRCciT5vr7+xETEwNTU1Pk5OTwuPPzc5yenuLs7AwnJydcQjqGBEhGTMkmJib4Nz3EmjRHHW1oaOBMSFLampHXlomao0uZAGhhamqK1ywiIgKlpaVcEqTBkJAQDkqZaGtM7AmULqXMyAtEXws4PT3Np0IsFsPJyQnZ2dm8MQUFBejq7ubgdIiM0iwrK0NFRcUFOwZIWMIbpjkS72c2DX19fXy0HBwc8Pf79ygsLORSoe5SGUpKSpCUlMQvoAkKDQ2FWq1GXl4ehoeHMceyFZ4/e4YKNlKtLc3oZ4De3kp8w7oZHhaGWNYIicSZMc3Cu7dvERUZCVe5HA+ZXH7LyEBMdDRsbW0glUqQlZWJstevIUhUAXD118AnNAaq8Dg8CImGmY0zTO45wlrhA2VwBHzCYkFxtp4q7p2/nPnO0RW3bCWQ+j6Gd3Ak1BFPIdwQu+KO7D7MnD1hLlXittQLlgo17no9gvmX9VsSL/zgpoKluy/bV+KO/AHMXbx5HMVct5HhaxsXXLOWQqBgWUAYPIKjuLf3fQKXn0L5u5NfMOxUgXB+pIE8IJx7t8Cfeaz8cTg3kYca3zq446a9G4zFcghfWYlx5Ud7XBE54OpdR9y0Y2kwViaOCs7Y3EUJE3bAgjExZWvfu/rghq2Mn7nNyFy/J8E1do6yFHk+ZDV0kcHL+z4Unl54lZqGto5ONLW04kNvH/748y+k/ZqB2KfP4e7hCYr99HkWmVm/40mwBuWVVejo7EZefgE704aCopKLnwOJe35+junoQrSfPn7kMmhpaWGzXIFO9l+sq3uHIiajeqbLVykpqK6uxi8vXqCZ6TYtLRXJyclIefkS/wA8nocLH7tgqAAAAABJRU5ErkJggg==","aspectRatio":1,"src":"/static/96cc0c73a4e35c7fe3e8d7299b488a0e/3ddd4/cover.png","srcSet":"/static/96cc0c73a4e35c7fe3e8d7299b488a0e/078a8/cover.png 163w,\n/static/96cc0c73a4e35c7fe3e8d7299b488a0e/e56da/cover.png 327w,\n/static/96cc0c73a4e35c7fe3e8d7299b488a0e/3ddd4/cover.png 653w,\n/static/96cc0c73a4e35c7fe3e8d7299b488a0e/c5cc7/cover.png 980w,\n/static/96cc0c73a4e35c7fe3e8d7299b488a0e/6050d/cover.png 1200w","srcWebp":"/static/96cc0c73a4e35c7fe3e8d7299b488a0e/0acdf/cover.webp","srcSetWebp":"/static/96cc0c73a4e35c7fe3e8d7299b488a0e/ac59e/cover.webp 163w,\n/static/96cc0c73a4e35c7fe3e8d7299b488a0e/7660b/cover.webp 327w,\n/static/96cc0c73a4e35c7fe3e8d7299b488a0e/0acdf/cover.webp 653w,\n/static/96cc0c73a4e35c7fe3e8d7299b488a0e/75470/cover.webp 980w,\n/static/96cc0c73a4e35c7fe3e8d7299b488a0e/9000d/cover.webp 1200w","sizes":"(max-width: 653px) 100vw, 653px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M197%201l-1%202-1%201c-2%200-2%200-2%202l-2%204-1%201v3l-3-1c-1-1-1-1-1%201l-1%203c-2%201%201%203%206%204%204%202%205%202%206%200l3-1v-1l2-3h3l4%202c3%200%204%200%203-1%200-2%201-2%204-2l4%201-4%201c-2%200-2%200-1%201h5l2-1c-2%200%200-2%203-2%205%200%2013%205%2012%207v3l-2%201c-4%201-4%203%202%204l3%202h-3l-1%201%203%201c4-1%204%201%200%204l-2%203h-4c-4%200-4%200-2%201%203%201%203%203%200%202l-3%201v1l1%201c-1%201%200%201%202%201l6%203%204%203%201%201c0%202-11%202-12%201h-4l-4%201c-3%201-2%201%2011%203l17%205%203%201h-3c-3%200-3%200-1%201%203%202-3%202-12%201h-12l9%203c8%200%207%201%200%201l-10%201%201%201%202%201h5c2%201%202%201%200%201s-3%201%200%203c1%201%201%201-1%201-4%200-6%202-3%202h3l-2%202c-2%201-3%203-3%205l-1%202c-2-1-1%200%201%202v2c-2%200-2%203%200%205%202%201-2%202-11%201-7%200-7%200-6%201l3%202c2%200%202%201%203%203%200%202%200%202-2%202l-2-1%201-1-1-1c-1%200-2%200-1%201l-3%201-8-1-13-3h-9l-8-1-10-2c-3%200-8-4-8-6h-1l-1-1v-3h2c4%201%203-2-2-4-6-3-6-3-6%200s0%203-6%202c-4%200-5%200-4%201l6%201c3%200%204%200%204%202l4%2017h7l-2-3-1-2c1%201%203%200%204-1%202-1%206%200%206%202%200%201%202%202%2010%203h4c1%201%205%203%206%202l1%204c0%204%202%206%2010%208l3%201-3%201c-4%202-7%201-28-5-19-6-18-5-16-4l31%2010c12%203%2012%203%2014%201s3-3%203%200l-2%201-1%202%207%201%202%201-3%201h-3v1l20%204a1141%201141%200%200080%2013c4%202%205%202%206%201v-1l-1-1%203%201c4%201%2040%202%2047%201%204-1%208-4%208-6l-6-7%201%202c5%206%201%2010-10%2011-3%200-4%200-3-1%2012-2%2015-4%2011-9l-1-3v-1h-2c-2%200-2%200-1-1h-1c-2%200-2%200-1-1v-1h-1l-1-1h-1l-1-1h-2c1-1-21-9-22-8l-1-1-2-2-2-4c-1-1-1-1-1%201v4l-10-3%201-7c2-6%202-11%202-19%201-15%200-18-3-18l-16-3%209%201c10%201%2011%200%201-2l-6-1%206%201c8%200%208%201%201-14a85%2085%200%2000-72-45c-8%200-11-1-11-5h-2l-1-1V4c2-2%201-3-3-4-1%200-2%201-2%204%200%204-1%205-5%204h-4V1m-27%2071c-1%202%201%204%202%202%202-1%2012%200%2031%206l9%201%206%201%203%201c3%200-2-3-6-4-15-4-22-5-22-4h-5l-6-2-5-2h-5c-1-1-2-1-2%201m-49%2010l-7%203c-2%200-3%204-2%204l18%201-1-4-1-2c0%202%200%202-3%200l-3-2h-1m94%2036l-1%208c0%203%202%203%203%200%200-1%201-2%203-1l13-2h-4c-5%200-7-1-7-5%200-2%201-3%206-3l6-1h-7l-9-2c-3%200-3%200-3%206m-61%209c2%205%204%207%205%206%201-2%2019%205%2031%2011l7%204h-16v-1h-3l-5-1v1l-1-1c-1-2-6-3-6-2l19%2015%204%203c-1%200-1%202%201%204%201%201%201%201%202-1%200-2%200-2%205-1l3%202v9c0%205%200%206%201%204l1-9v-4l8%202%209%202v4c0%203%200%204-2%204v1c1%201%201%201-1%201l-7%201c-7%201-3%203%207%203%204%200%204%200%204%204s2%204%203%200c0-3%201-3%203-3%206%200%2016-1%2018-3%201-1%201-1-1-1l-2-1-3-1c-4%200-4-9-1-9a97%2097%200%200043-20l-18-3a935%20935%200%2001-108-20m141%203v4l1%202c0%202%201%202%207%202l6-1v-1c2-2-2-5-9-8-2-1-3%200-5%202m-82%205a552%20552%200%200075%2012h2l-2-1-4-2h-4l-15-2a1049%201049%200%2001-52-7m-59%202c-2%200-2%201-1%201v3l1%201h-2v1c2%202%202%202%200%202v1c2%202%201%203-2%204s-4%203-1%204c4%202%209%201%2012-2%207-7%201-19-7-15m-33%2051v4l-1%202c-2%200-2%201-2%203s0%203%202%203l1%202-1%202-2%201c-2%200-7-7-7-10h-1l-1%203c0%203%200%203%201%202s1-1%202%201l-1%204v4c-2%200-2-3-1-5%202-2%201-2-3-1-4%200-5%204-3%206l2%202-4-2c-2-2-2-2-4-1-3%201-3%204%200%203v1l-1%206%201%205c0%202%201%204%203%205l2%204%201%202c1%200%201%2010-1%2010l-1%203-1%204-1%204-1%205c-1%201%200%202%201%203%201%202%201%202-1%202s-3-1-3-6l1-7c2-2%200-8-3-11-4-4-4-6%200-7l2-3c-1-2-3-3-3-1l-2%202-2%202c-1%201-5%202-5%200%200-1-1-1-1%201-1%202-2%205-2%2011l-1%206c-2%205%200%2019%202%2018h7l-3%201c-1%200-2%200-1%201l-3%201-3%201h-3l-4%201H57l3%201%204%201h2l3-1v1c-2%201%203%201%209-1%202%200%202%200%201%201-2%202-2%202%201%202l3-1h2l2-1h-1l-1-1c0-1%203-3%205-3v1l-2%203c-1%202%200%202%208%202l4%201-1%201v2l-1%202-49%201H0v90h12l21%202c10%201%2015%201%2037-3h4l-5-3-5-2%207%201c19%201%2031%200%2020-3l-23-7h5a832%20832%200%200087%200c32%200%2036%200%2032%201l-11%202c-7%202-9%202-10%201h-1c-1%202-1%202%204%204l4%201-4%201c-2%202-4%202-7%202h-4l-2-1h-4l-2%201h-3l-3-1c0-1-3-1-4%201l-1%202%203%201%209%202c8%202%2013%203%2013%201-1-1%200-1%206-1l8%201%206%201%2011%201h10c0%202%2019%205%2041%206l15%201v12h6c6%200%207-1%207-7l1-5%201-3v-4c2-4%203-6%203-11%200-4%200-4%204-4%203-1%204%200%205%204l3%205%201%203%203%203%201%201v4c-1%207-2%2011-4%2010-3-1-6%200-5%202h4l3%201h2c2%201%2013%201%2012-1v-9c0-5-1-7-2-8v-2l-4-8-4-9c1-1%2023-2%2025%200%201%200%201%201-1%201-3%203%2019%206%2030%204%207-1%206-1-2-2-9-2-5-2%209-2%209%200%2013%200%2011-1-5-1-5-2%200-2l15%201h10v6c0%204%200%205-2%205v-1c1-1%201-1-1-1l-2%201-4%201c-4%200-5%200-4%201%200%202-5%205-10%205l-7%202-8%201h-4l2%202c0%201-18%204-29%204l-11%201%202%201h4c2%201-3%202-7%201l-3%201%201%201%201%201c-1%201%200%202%202%202a133%20133%200%200033-1l-3%204c-4%201-1%202%206%202l6-1h7l18%201h13v-7l-10%201h-28l11-9a323%20323%200%200021-4c-1-1%200-1%202-3l4-2%201-46v-44h-40l-40-1%2028-1c17%200%2027%200%2025-1l-10-1-7-1%201-2c0-1%201-2%202-1l1-1-2-1h-1l-1%201c-4%200-2-3%203-4%204-1%205-2%203-8-3-7-3-12-1-12l1-1-2-1c-3%200-5-2-3-3s0-10-3-11v1c1%200%201%203-1%205l-1%203c0%204%200%205-3%205l-3%202h3c2%200%202%200%202%205%200%204%200%205-2%205l-2%202c-1%202-2%201-1-2l-1-5c-1-1-2-2-1-4l-1-3c-2%200-2-1-2-10l-1-12c-1-1-1%202-1%2011%200%208%200%2012-1%2011l-2%201c0%201-1%202-2%201-2%200-3%201%200%203%202%202%201%203-1%203s-3-1-3-2h-1l-1-1v-3l2-6c1-5%201-6-2-8l-2-4-1-1v-2c0-3-2-5-8-6-2-1-3-1-2%201l-1%201c-1-1-1%200-1%201h-4c-4%200-4%205-1%208%203%202%203%202%201%202-2%201-2%202-2%206l1%204h1l-1%202h-3l-2%201c-4-1-4%204-1%205%206%202%209%200%209-6l1-2c1%200%205%203%203%203s-4%203-3%206v9c-1%206-1%206-4%206s-4-1-2-3c1-1%200-3-1-2l-1-1-1-1-1%204c1%203%201%203-2%202h-4l-1-9-1-9c-1-1-2-2-1-4%200-3-3-7-5-5%200%201-1%202-3%202l-1%202-3%205c-2%202-2%204%201%204l1%202%201%201%201%203%201%204c3%200-2%205-5%206l-4%201h-2l-2-2-1-2c-2%200-3-5-3-13l-2-4-2-4c0-2-2-3-2-3-2%200-2-1-1-3l-1-2h-1l-7-1-1%203-2%201h-1l-1-1v5c2%203%201%203-4%209l-2%202-2-2c-1-1-2-3-1-4l-1-3-2%201h-1l-4%202c-1%201-2%202-3%201v-2c1-1%201-2-1-3l-2-2-2%202-2%201%201-2%201-1c-1-1%200-1%201-1l2-1h-1l-2-1c0-2-2-3-4-1h-2c0-2-2-1-1%201l1%202v2l-1%205%202%2010c2%208%202%208-5%208-4%200-5%201-5%202%200%202%200%202%202%201h5l4%201%205%201%204%202%206%201c1%201%201%201-1%201h-17l-8-2c-5-2-7-7-5-11%202-2-1-6-3-5l-2-1c-2-1-4%207-2%209%202%201%200%202-4%201-3-1-3-1-1-13l3-7c1%201%203%203%202%204l1%201c2-1%201-10-1-16-2-3-3-5-2-6%201-2%200-7-2-6l-2-1c0-2-3-1-3%201l-2%202c-1%200-2-1-1-2h-1c-3%204-3%206%201%205%203-1%203-1%203%201s-2%203-2%201h-5v1l-1%201-3-3c-2-3-4-4-5-2v2h-1l-1%202-2%204v-3l2-5c1-2%201-2-1-2-3-1-4%200-2%201l-1%204c-1%203-1%203-2%201s-1-2-2%202c-1%203-2%205-4%205h-3c0-2%202-3%204-3l1-2%201-3%201-4-4%203-2%202c-1-1-1%200-1%201l-1%202c-2%200-6%207-6%209l-1%201c-2%200-3%203-1%205l1%205c0%204%200%204-2%204-5%200-9%205-5%208%201%202%201%202%204%200%203-1%206-2%2014-1%206%200%206%201%200%202-4%200-6%201-4%202l-4%201-9%201h-5v-1l1-1c-1-1%200-1%201-1l1-1-3-1c-2%200-4-4-3-6h-1c-4%200-7-1-5-2v-4l-1-1-1-2-1-5v-2c-1-2%200-6%203-6%205-2%204-10-1-12h-2l2-1h5l1-2%203-1c1%200%201%201-1%202l-2%203%203-2c4-3%2013-1%2013%203%200%202%202%201%203-1%201-3%203-5%206-5s3%200%202-1c-2-1-2-1%200-1%201%200%202%200%201-1v-1l-2-1c-1%201-3%200-5-1l-2-2%204-3%207-2c2%200%203-2%202-4%200-2-2-2-4%200-1%202-9%202-13%200-3-2-4-2-4-1h-1c-2%200-3%200-2%202h-2l-3-1-1-1v-1l-1%201-1%201-2-2h-3l1-1-2-2c-3-1-4-2-3-3%201-3%201-17-1-17l-1%202m85%2015l-1%202-2%202-3%204-1%202c-5%204-3%208%204%2010%209%203%2017-8%2012-17-2-5-6-6-9-3M19%20245l-1%203c-1%202-1%202-3-1l-1-1v6c-1%201-1%200-1-1l-4%207-4%203-1%202c2%202-1%207-3%206-1-1-1-1-1%203v4h5c4%200%204%200%203-1l-1-3-1-2v-2c0-3%201-3%203-2%203%200%201%2013-1%2016l-2%202h2c5%200%209%200%2011-2l17-1h19c4-1%203-1-6-1l-16-1H20l2-1%203-1h-4c-4%201-5%200-2-2l1-2-2-1c0-1%201-2%203-2%206%200%208-2%207-5l-2-4c-2-2-3-9-3-12s-1-6-3-6l-1%202m32%2015c-2%200-4%206-3%207l-1%203h-2c-1-2-1-2-3-1h-3l-2%202%202%201h3l-3%201-2%201%202%201%207-2%205-1%202-1c2%200%203%200%202-3v-6c-1-2-1-3-4-2m343%207c-3%202-5%202-6%201-2-2-5-1-4%201l-10%204-11%204h25l7-2c-2-1-2-1%201-3%202-1%204-2%204-4s0-2-6-1m-219%202l-4%201c-5%201-5%201-2%202l3%202c0%202%203%203%2010%203%202%200%203%200%202%201l-4%201-14%204c-4%200-5-2-2-2s-2-2-6-2c-3%200-2%202%201%203%203%200%203%200%201%201s-2%201%201%201%203%200%202%201%2012%201%2034%201c33%200%2036-1%2019-3l-4-1c1-1%200-1-2-1-5%200-12-2-9-2%202%200%200-2-3-2-5%200-16-3-15-4%202-2%200-4-4-4h-4m71%209c-10%200-13%201-8%202h13c3-1%204-1%202%201l-2%203c0%202%203%202%2029%202%2029%200%2030%200%2027-4-1-2-3-2-10-1-15%202-37%202-35%200l4-1c3-1%203-1-1-1l-5-1-3-1-11%201m11%2042c-2%200-2%201-2%207l1%207%201-2%202-2c5%200%207-4%205-9-2-2-2-2-7-1m-54%2041l-3%203h-3l3%201%203%201-5%201c-3%201-5%203-5%204l-2%202c-3%200-1%202%202%201%203%200%205-2%203-2-3%200%208-3%2014-3h4l-1%201%2011-6-15-2-5-1h-1m47%200c-17%200-20%201-17%204%202%202%202%203%202%207l-1%205%205%201a293%20293%200%200027%205v-1l1%203%201%203%201-3%202-4%201-3v-2l-1-3-2-2h4c3-1%204-3%202-2l-2-1-1-1-6-5-16-1m-88%2031c-3%202-6%203-4%201l-1-1-2%201c-1%201%200%201%201%201v1l-3%201-2%201c-2%202-2%203-1%203l2-1%204-1%203-1-3%201c-3%202-3%202%206%202h9l-1-3-4-8-4%203'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"narrow":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAAEVElEQVQ4y21UayycaRT+/vvjl19sm25T20VLd5edJsW4zpjBYLTGaK0q47LubRO6iYhqyLIJVkRco4KgWja7tu7XBnEnEloV9/v9Fgl59j2vzsRu9ktOzve973mf9znnPOcT5ubmsLi4iKWlJSwvL2N1dRVra2vY2tri67OzsygqKkJ6ejoGBgYwNjaGw8NDbG9v8xiyzc1NnQmXAVdWVjgYGW2S7+npQVNTEzo6OlBTUwOFQsHBd3d3sbOzw+O0oBsbGxDm5+c54GV2tLG3t4fR0VG0t7dzluPj4ygvL4dMJoOenh7i4+NxcHCgA9SCCgsLCzp2BEgbBEoXEKuuri40NzejtbUVxcXFsLa2hpGREaysrDA5OYn9/f1/gQpadgRIzGZmZlBbW4uqqirU19ejt7cXg4ODGBkZgVKphCAI0NfXh6GhIerq6nB8fKyr+f8CEuPGxkZu+fn5yMzMhEqlgkajgZmZGQc0MDCASCRCW1sb6Dk6OtI1SZeytoa0QcDkiUFqaioCAwMhkUgQFBQES0tLDmhhYQE/Pz/ExcVhaGiI15MD/rcpBKa9gNKurKyEv78/Z2ZsbAw7OzskJiYiNzcXCQkJiIqK4nFUSyLBAS+zXF9f5zdRCciT5vr7+xETEwNTU1Pk5OTwuPPzc5yenuLs7AwnJydcQjqGBEhGTMkmJib4Nz3EmjRHHW1oaOBMSFLampHXlomao0uZAGhhamqK1ywiIgKlpaVcEqTBkJAQDkqZaGtM7AmULqXMyAtEXws4PT3Np0IsFsPJyQnZ2dm8MQUFBejq7ubgdIiM0iwrK0NFRcUFOwZIWMIbpjkS72c2DX19fXy0HBwc8Pf79ygsLORSoe5SGUpKSpCUlMQvoAkKDQ2FWq1GXl4ehoeHMceyFZ4/e4YKNlKtLc3oZ4De3kp8w7oZHhaGWNYIicSZMc3Cu7dvERUZCVe5HA+ZXH7LyEBMdDRsbW0glUqQlZWJstevIUhUAXD118AnNAaq8Dg8CImGmY0zTO45wlrhA2VwBHzCYkFxtp4q7p2/nPnO0RW3bCWQ+j6Gd3Ak1BFPIdwQu+KO7D7MnD1hLlXittQLlgo17no9gvmX9VsSL/zgpoKluy/bV+KO/AHMXbx5HMVct5HhaxsXXLOWQqBgWUAYPIKjuLf3fQKXn0L5u5NfMOxUgXB+pIE8IJx7t8Cfeaz8cTg3kYca3zq446a9G4zFcghfWYlx5Ud7XBE54OpdR9y0Y2kwViaOCs7Y3EUJE3bAgjExZWvfu/rghq2Mn7nNyFy/J8E1do6yFHk+ZDV0kcHL+z4Unl54lZqGto5ONLW04kNvH/748y+k/ZqB2KfP4e7hCYr99HkWmVm/40mwBuWVVejo7EZefgE704aCopKLnwOJe35+junoQrSfPn7kMmhpaWGzXIFO9l+sq3uHIiajeqbLVykpqK6uxi8vXqCZ6TYtLRXJyclIefkS/wA8nocLH7tgqAAAAABJRU5ErkJggg==","aspectRatio":1,"src":"/static/96cc0c73a4e35c7fe3e8d7299b488a0e/502b1/cover.png","srcSet":"/static/96cc0c73a4e35c7fe3e8d7299b488a0e/f2e6d/cover.png 114w,\n/static/96cc0c73a4e35c7fe3e8d7299b488a0e/4ddba/cover.png 229w,\n/static/96cc0c73a4e35c7fe3e8d7299b488a0e/502b1/cover.png 457w,\n/static/96cc0c73a4e35c7fe3e8d7299b488a0e/7ddc2/cover.png 686w,\n/static/96cc0c73a4e35c7fe3e8d7299b488a0e/435bf/cover.png 914w,\n/static/96cc0c73a4e35c7fe3e8d7299b488a0e/6050d/cover.png 1200w","srcWebp":"/static/96cc0c73a4e35c7fe3e8d7299b488a0e/15384/cover.webp","srcSetWebp":"/static/96cc0c73a4e35c7fe3e8d7299b488a0e/31fce/cover.webp 114w,\n/static/96cc0c73a4e35c7fe3e8d7299b488a0e/e3e25/cover.webp 229w,\n/static/96cc0c73a4e35c7fe3e8d7299b488a0e/15384/cover.webp 457w,\n/static/96cc0c73a4e35c7fe3e8d7299b488a0e/0258d/cover.webp 686w,\n/static/96cc0c73a4e35c7fe3e8d7299b488a0e/64ea2/cover.webp 914w,\n/static/96cc0c73a4e35c7fe3e8d7299b488a0e/9000d/cover.webp 1200w","sizes":"(max-width: 457px) 100vw, 457px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M197%201l-1%202-1%201c-2%200-2%200-2%202l-2%204-1%201v3l-3-1c-1-1-1-1-1%201l-1%203c-2%201%201%203%206%204%204%202%205%202%206%200l3-1v-1l2-3h3l4%202c3%200%204%200%203-1%200-2%201-2%204-2l4%201-4%201c-2%200-2%200-1%201h5l2-1c-2%200%200-2%203-2%205%200%2013%205%2012%207v3l-2%201c-4%201-4%203%202%204l3%202h-3l-1%201%203%201c4-1%204%201%200%204l-2%203h-4c-4%200-4%200-2%201%203%201%203%203%200%202l-3%201v1l1%201c-1%201%200%201%202%201l6%203%204%203%201%201c0%202-11%202-12%201h-4l-4%201c-3%201-2%201%2011%203l17%205%203%201h-3c-3%200-3%200-1%201%203%202-3%202-12%201h-12l9%203c8%200%207%201%200%201l-10%201%201%201%202%201h5c2%201%202%201%200%201s-3%201%200%203c1%201%201%201-1%201-4%200-6%202-3%202h3l-2%202c-2%201-3%203-3%205l-1%202c-2-1-1%200%201%202v2c-2%200-2%203%200%205%202%201-2%202-11%201-7%200-7%200-6%201l3%202c2%200%202%201%203%203%200%202%200%202-2%202l-2-1%201-1-1-1c-1%200-2%200-1%201l-3%201-8-1-13-3h-9l-8-1-10-2c-3%200-8-4-8-6h-1l-1-1v-3h2c4%201%203-2-2-4-6-3-6-3-6%200s0%203-6%202c-4%200-5%200-4%201l6%201c3%200%204%200%204%202l4%2017h7l-2-3-1-2c1%201%203%200%204-1%202-1%206%200%206%202%200%201%202%202%2010%203h4c1%201%205%203%206%202l1%204c0%204%202%206%2010%208l3%201-3%201c-4%202-7%201-28-5-19-6-18-5-16-4l31%2010c12%203%2012%203%2014%201s3-3%203%200l-2%201-1%202%207%201%202%201-3%201h-3v1l20%204a1141%201141%200%200080%2013c4%202%205%202%206%201v-1l-1-1%203%201c4%201%2040%202%2047%201%204-1%208-4%208-6l-6-7%201%202c5%206%201%2010-10%2011-3%200-4%200-3-1%2012-2%2015-4%2011-9l-1-3v-1h-2c-2%200-2%200-1-1h-1c-2%200-2%200-1-1v-1h-1l-1-1h-1l-1-1h-2c1-1-21-9-22-8l-1-1-2-2-2-4c-1-1-1-1-1%201v4l-10-3%201-7c2-6%202-11%202-19%201-15%200-18-3-18l-16-3%209%201c10%201%2011%200%201-2l-6-1%206%201c8%200%208%201%201-14a85%2085%200%2000-72-45c-8%200-11-1-11-5h-2l-1-1V4c2-2%201-3-3-4-1%200-2%201-2%204%200%204-1%205-5%204h-4V1m-27%2071c-1%202%201%204%202%202%202-1%2012%200%2031%206l9%201%206%201%203%201c3%200-2-3-6-4-15-4-22-5-22-4h-5l-6-2-5-2h-5c-1-1-2-1-2%201m-49%2010l-7%203c-2%200-3%204-2%204l18%201-1-4-1-2c0%202%200%202-3%200l-3-2h-1m94%2036l-1%208c0%203%202%203%203%200%200-1%201-2%203-1l13-2h-4c-5%200-7-1-7-5%200-2%201-3%206-3l6-1h-7l-9-2c-3%200-3%200-3%206m-61%209c2%205%204%207%205%206%201-2%2019%205%2031%2011l7%204h-16v-1h-3l-5-1v1l-1-1c-1-2-6-3-6-2l19%2015%204%203c-1%200-1%202%201%204%201%201%201%201%202-1%200-2%200-2%205-1l3%202v9c0%205%200%206%201%204l1-9v-4l8%202%209%202v4c0%203%200%204-2%204v1c1%201%201%201-1%201l-7%201c-7%201-3%203%207%203%204%200%204%200%204%204s2%204%203%200c0-3%201-3%203-3%206%200%2016-1%2018-3%201-1%201-1-1-1l-2-1-3-1c-4%200-4-9-1-9a97%2097%200%200043-20l-18-3a935%20935%200%2001-108-20m141%203v4l1%202c0%202%201%202%207%202l6-1v-1c2-2-2-5-9-8-2-1-3%200-5%202m-82%205a552%20552%200%200075%2012h2l-2-1-4-2h-4l-15-2a1049%201049%200%2001-52-7m-59%202c-2%200-2%201-1%201v3l1%201h-2v1c2%202%202%202%200%202v1c2%202%201%203-2%204s-4%203-1%204c4%202%209%201%2012-2%207-7%201-19-7-15m-33%2051v4l-1%202c-2%200-2%201-2%203s0%203%202%203l1%202-1%202-2%201c-2%200-7-7-7-10h-1l-1%203c0%203%200%203%201%202s1-1%202%201l-1%204v4c-2%200-2-3-1-5%202-2%201-2-3-1-4%200-5%204-3%206l2%202-4-2c-2-2-2-2-4-1-3%201-3%204%200%203v1l-1%206%201%205c0%202%201%204%203%205l2%204%201%202c1%200%201%2010-1%2010l-1%203-1%204-1%204-1%205c-1%201%200%202%201%203%201%202%201%202-1%202s-3-1-3-6l1-7c2-2%200-8-3-11-4-4-4-6%200-7l2-3c-1-2-3-3-3-1l-2%202-2%202c-1%201-5%202-5%200%200-1-1-1-1%201-1%202-2%205-2%2011l-1%206c-2%205%200%2019%202%2018h7l-3%201c-1%200-2%200-1%201l-3%201-3%201h-3l-4%201H57l3%201%204%201h2l3-1v1c-2%201%203%201%209-1%202%200%202%200%201%201-2%202-2%202%201%202l3-1h2l2-1h-1l-1-1c0-1%203-3%205-3v1l-2%203c-1%202%200%202%208%202l4%201-1%201v2l-1%202-49%201H0v90h12l21%202c10%201%2015%201%2037-3h4l-5-3-5-2%207%201c19%201%2031%200%2020-3l-23-7h5a832%20832%200%200087%200c32%200%2036%200%2032%201l-11%202c-7%202-9%202-10%201h-1c-1%202-1%202%204%204l4%201-4%201c-2%202-4%202-7%202h-4l-2-1h-4l-2%201h-3l-3-1c0-1-3-1-4%201l-1%202%203%201%209%202c8%202%2013%203%2013%201-1-1%200-1%206-1l8%201%206%201%2011%201h10c0%202%2019%205%2041%206l15%201v12h6c6%200%207-1%207-7l1-5%201-3v-4c2-4%203-6%203-11%200-4%200-4%204-4%203-1%204%200%205%204l3%205%201%203%203%203%201%201v4c-1%207-2%2011-4%2010-3-1-6%200-5%202h4l3%201h2c2%201%2013%201%2012-1v-9c0-5-1-7-2-8v-2l-4-8-4-9c1-1%2023-2%2025%200%201%200%201%201-1%201-3%203%2019%206%2030%204%207-1%206-1-2-2-9-2-5-2%209-2%209%200%2013%200%2011-1-5-1-5-2%200-2l15%201h10v6c0%204%200%205-2%205v-1c1-1%201-1-1-1l-2%201-4%201c-4%200-5%200-4%201%200%202-5%205-10%205l-7%202-8%201h-4l2%202c0%201-18%204-29%204l-11%201%202%201h4c2%201-3%202-7%201l-3%201%201%201%201%201c-1%201%200%202%202%202a133%20133%200%200033-1l-3%204c-4%201-1%202%206%202l6-1h7l18%201h13v-7l-10%201h-28l11-9a323%20323%200%200021-4c-1-1%200-1%202-3l4-2%201-46v-44h-40l-40-1%2028-1c17%200%2027%200%2025-1l-10-1-7-1%201-2c0-1%201-2%202-1l1-1-2-1h-1l-1%201c-4%200-2-3%203-4%204-1%205-2%203-8-3-7-3-12-1-12l1-1-2-1c-3%200-5-2-3-3s0-10-3-11v1c1%200%201%203-1%205l-1%203c0%204%200%205-3%205l-3%202h3c2%200%202%200%202%205%200%204%200%205-2%205l-2%202c-1%202-2%201-1-2l-1-5c-1-1-2-2-1-4l-1-3c-2%200-2-1-2-10l-1-12c-1-1-1%202-1%2011%200%208%200%2012-1%2011l-2%201c0%201-1%202-2%201-2%200-3%201%200%203%202%202%201%203-1%203s-3-1-3-2h-1l-1-1v-3l2-6c1-5%201-6-2-8l-2-4-1-1v-2c0-3-2-5-8-6-2-1-3-1-2%201l-1%201c-1-1-1%200-1%201h-4c-4%200-4%205-1%208%203%202%203%202%201%202-2%201-2%202-2%206l1%204h1l-1%202h-3l-2%201c-4-1-4%204-1%205%206%202%209%200%209-6l1-2c1%200%205%203%203%203s-4%203-3%206v9c-1%206-1%206-4%206s-4-1-2-3c1-1%200-3-1-2l-1-1-1-1-1%204c1%203%201%203-2%202h-4l-1-9-1-9c-1-1-2-2-1-4%200-3-3-7-5-5%200%201-1%202-3%202l-1%202-3%205c-2%202-2%204%201%204l1%202%201%201%201%203%201%204c3%200-2%205-5%206l-4%201h-2l-2-2-1-2c-2%200-3-5-3-13l-2-4-2-4c0-2-2-3-2-3-2%200-2-1-1-3l-1-2h-1l-7-1-1%203-2%201h-1l-1-1v5c2%203%201%203-4%209l-2%202-2-2c-1-1-2-3-1-4l-1-3-2%201h-1l-4%202c-1%201-2%202-3%201v-2c1-1%201-2-1-3l-2-2-2%202-2%201%201-2%201-1c-1-1%200-1%201-1l2-1h-1l-2-1c0-2-2-3-4-1h-2c0-2-2-1-1%201l1%202v2l-1%205%202%2010c2%208%202%208-5%208-4%200-5%201-5%202%200%202%200%202%202%201h5l4%201%205%201%204%202%206%201c1%201%201%201-1%201h-17l-8-2c-5-2-7-7-5-11%202-2-1-6-3-5l-2-1c-2-1-4%207-2%209%202%201%200%202-4%201-3-1-3-1-1-13l3-7c1%201%203%203%202%204l1%201c2-1%201-10-1-16-2-3-3-5-2-6%201-2%200-7-2-6l-2-1c0-2-3-1-3%201l-2%202c-1%200-2-1-1-2h-1c-3%204-3%206%201%205%203-1%203-1%203%201s-2%203-2%201h-5v1l-1%201-3-3c-2-3-4-4-5-2v2h-1l-1%202-2%204v-3l2-5c1-2%201-2-1-2-3-1-4%200-2%201l-1%204c-1%203-1%203-2%201s-1-2-2%202c-1%203-2%205-4%205h-3c0-2%202-3%204-3l1-2%201-3%201-4-4%203-2%202c-1-1-1%200-1%201l-1%202c-2%200-6%207-6%209l-1%201c-2%200-3%203-1%205l1%205c0%204%200%204-2%204-5%200-9%205-5%208%201%202%201%202%204%200%203-1%206-2%2014-1%206%200%206%201%200%202-4%200-6%201-4%202l-4%201-9%201h-5v-1l1-1c-1-1%200-1%201-1l1-1-3-1c-2%200-4-4-3-6h-1c-4%200-7-1-5-2v-4l-1-1-1-2-1-5v-2c-1-2%200-6%203-6%205-2%204-10-1-12h-2l2-1h5l1-2%203-1c1%200%201%201-1%202l-2%203%203-2c4-3%2013-1%2013%203%200%202%202%201%203-1%201-3%203-5%206-5s3%200%202-1c-2-1-2-1%200-1%201%200%202%200%201-1v-1l-2-1c-1%201-3%200-5-1l-2-2%204-3%207-2c2%200%203-2%202-4%200-2-2-2-4%200-1%202-9%202-13%200-3-2-4-2-4-1h-1c-2%200-3%200-2%202h-2l-3-1-1-1v-1l-1%201-1%201-2-2h-3l1-1-2-2c-3-1-4-2-3-3%201-3%201-17-1-17l-1%202m85%2015l-1%202-2%202-3%204-1%202c-5%204-3%208%204%2010%209%203%2017-8%2012-17-2-5-6-6-9-3M19%20245l-1%203c-1%202-1%202-3-1l-1-1v6c-1%201-1%200-1-1l-4%207-4%203-1%202c2%202-1%207-3%206-1-1-1-1-1%203v4h5c4%200%204%200%203-1l-1-3-1-2v-2c0-3%201-3%203-2%203%200%201%2013-1%2016l-2%202h2c5%200%209%200%2011-2l17-1h19c4-1%203-1-6-1l-16-1H20l2-1%203-1h-4c-4%201-5%200-2-2l1-2-2-1c0-1%201-2%203-2%206%200%208-2%207-5l-2-4c-2-2-3-9-3-12s-1-6-3-6l-1%202m32%2015c-2%200-4%206-3%207l-1%203h-2c-1-2-1-2-3-1h-3l-2%202%202%201h3l-3%201-2%201%202%201%207-2%205-1%202-1c2%200%203%200%202-3v-6c-1-2-1-3-4-2m343%207c-3%202-5%202-6%201-2-2-5-1-4%201l-10%204-11%204h25l7-2c-2-1-2-1%201-3%202-1%204-2%204-4s0-2-6-1m-219%202l-4%201c-5%201-5%201-2%202l3%202c0%202%203%203%2010%203%202%200%203%200%202%201l-4%201-14%204c-4%200-5-2-2-2s-2-2-6-2c-3%200-2%202%201%203%203%200%203%200%201%201s-2%201%201%201%203%200%202%201%2012%201%2034%201c33%200%2036-1%2019-3l-4-1c1-1%200-1-2-1-5%200-12-2-9-2%202%200%200-2-3-2-5%200-16-3-15-4%202-2%200-4-4-4h-4m71%209c-10%200-13%201-8%202h13c3-1%204-1%202%201l-2%203c0%202%203%202%2029%202%2029%200%2030%200%2027-4-1-2-3-2-10-1-15%202-37%202-35%200l4-1c3-1%203-1-1-1l-5-1-3-1-11%201m11%2042c-2%200-2%201-2%207l1%207%201-2%202-2c5%200%207-4%205-9-2-2-2-2-7-1m-54%2041l-3%203h-3l3%201%203%201-5%201c-3%201-5%203-5%204l-2%202c-3%200-1%202%202%201%203%200%205-2%203-2-3%200%208-3%2014-3h4l-1%201%2011-6-15-2-5-1h-1m47%200c-17%200-20%201-17%204%202%202%202%203%202%207l-1%205%205%201a293%20293%200%200027%205v-1l1%203%201%203%201-3%202-4%201-3v-2l-1-3-2-2h4c3-1%204-3%202-2l-2-1-1-1-6-5-16-1m-88%2031c-3%202-6%203-4%201l-1-1-2%201c-1%201%200%201%201%201v1l-3%201-2%201c-2%202-2%203-1%203l2-1%204-1%203-1-3%201c-3%202-3%202%206%202h9l-1-3-4-8-4%203'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"seo":{"src":"/static/96cc0c73a4e35c7fe3e8d7299b488a0e/6050d/cover.png"}}}]}},"staticQueryHashes":["1609575157","2068910035","2361467917","2361467917","3838421970","500183989","5650841"]}