{"componentChunkName":"component---gatsby-theme-spaceout-src-templates-article-template-tsx","path":"/s3-manager","result":{"pageContext":{"article":{"id":"fc731126-1fb1-5bd0-9b45-e17990fd8299","slug":"/s3-manager","secret":false,"title":"S3 Manager","author":"Luke Celitan","date":"April 27th, 2022","dateForSEO":"2022-04-27T00:00:00.000Z","timeToRead":2,"excerpt":"GUI for managing and browsking S3 buckets","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\": \"S3 Manager\",\n  \"excerpt\": \"GUI for managing and browsking S3 buckets\",\n  \"date\": \"2022-04-27T00:00:00.000Z\",\n  \"hero\": \"s3ManagerCover.png\",\n  \"author\": \"Luke Celitan\",\n  \"appDescription\": \"AWS S3 GUI\",\n  \"category\": \"Project\",\n  \"tech\": [\"Svelte\", \"Rust\", \"TS\", \"Tailwind\"]\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\": \"s3-manager\"\n  }, \"S3 Manager\"), mdx(\"p\", null, \"Hi everyone, I\\u2019m excited to share with you a project I\\u2019ve been working on for\\nthe last few months. It\\u2019s a graphical user interface to aws s3 service, which\\nlets you easily manage your buckets, files and permissions. I have wrote it\\nusing Rust lang in the backend and svelte for a frontend, and I want to tell you\\nhow fun it was working with rust backend.\"), mdx(\"p\", null, \"Rust is a systems programming language that focuses on performance, reliability\\nand concurrency. It has a powerful type system, memory safety guarantees and a\\nrich ecosystem of libraries and tools. Rust also has some unique features that\\nmake it a great choice for backend development, such as:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Ownership and borrowing: Rust uses these concepts to manage memory and\\nresources without a garbage collector, avoiding runtime overhead and memory\\nleaks.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Traits and generics: Rust allows you to define abstract interfaces and\\nimplement them for different types, enabling code reuse and polymorphism.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Async/await: Rust supports asynchronous programming with a built-in syntax\\nthat makes it easy to write concurrent code that is readable and efficient.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Error handling: Rust has a robust and expressive way of dealing with errors,\\nusing the Result and Option types and the ? operator.\")), mdx(\"p\", null, \"Using Rust for the backend of my GUI project was a rewarding experience. I\\nlearned a lot about the language and its features, and I enjoyed the challenge\\nof writing fast and reliable code. I also used some awesome crates that made my\\nlife easier, such as:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Tokio: A runtime for writing async applications with Rust.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Rusoto: A AWS SDK for Rust.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Warp: A web framework that provides a simple and elegant way to create RESTful\\nAPIs.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Sveltekit: A framework for building web applications with Svelte, a reactive\\nfrontend framework that compiles to vanilla JavaScript.\")), mdx(\"p\", null, \"The result is a GUI application that is easy to use, responsive and\\ncross-platform. You can download it from my GitHub repository (link below) and\\ntry it out yourself. I hope you find it useful and fun to use. If you have any\\nfeedback or suggestions, please let me know in the comments. Thanks for reading!\"), mdx(\"h2\", {\n    \"id\": \"lightmode-ui-overview\"\n  }, \"LightMode UI overview\"), 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\": \"2840px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"64.84%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAABYlAAAWJQFJUiTwAAAC0ElEQVQ4y32Ry09UdxTHr7ow7UZd+QeYCpi47MqNCxc2bdOkaqJR4yMx7nVlF6YbawGl2AoYoqD4QIQ4ghCh0lCVRwpKhZkLjKMzMA9mmAfDPO69c2fu8OmBCz5qdPHJ99zvOb+Tc85VXnx9E+eRm/gu3sHT95JxNcz4vzM4xwOoriBTkyGczz24R14zrfoJTPoJOX2EnruZHXUTGJxgpteFu3UU11kHyj9lTfjbX2KQQyuAsQgiH2CKl+djf5Wl3OSNJ7hONKI8Kb3OdKdKbuE1+sNfMLrLMXsq3vG4ivzfNeT7ajD7LmP+eWElV2nTdY7cyG3Uqg7U4w0oji23mGqfQEu8kobn0Xt+Q+++iLZKTzVa72Wbx3+IV/VeTuKucrThZtTKB6jHpGHjZgfjbS70xSyGmUcvgmbZq5uySm6JxRX4H0uetbgcqxXS8Og1lEsbunjRMoVZSGDMulkIe9GiPqzULMX0Z8iEKSb9FONeCnoU168OnIevolRu6GC09RWF4jz6rIfk3IzcUx5ko1iZuU8j+UIySCHuI2/EcZ5zMHZAJjy1/hEjbV4ZOo0W8ZKKBdGT0lCLY32SmJDASoex5gMUcvOM/SyD7bmOcnxdL8/uTUvDJIbfSVbWNqMeivM+igmvTfzNO1Y9yVtSZ4UnKGSCjP7UyfDuZpSDax7xtC0IC/Knq79Hr9uLUbdHEK0VrT+A0XgMo+GozZV9tr9cJ/GlbzHazzB8uof+HQ9Rdq1toa/NIxPqGLEAZjqKsRCRO87ZpOQ7HRdiNuLZRDBSokmpySUYODnEX18Noexcd5uOJie6HDnyxk0kGCQdi8ot596SFTIrZOMrcTxGJhIiE5ohk4rQ+6NK65cemXDjXb7b0sQP2+v5pux3dpfVsL/kPoe2dnGopHNZT2zt5mzpU86XDFJXNkDdtn5qRWtL+qkvfUbDtkEaNrlp/MLPf3bLcqcXG4ABAAAAAElFTkSuQmCC')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"picture\", {\n    parentName: \"span\"\n  }, \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"/static/73c74f337af4d7a25cd2f343437b5458/a3bc4/lightFiles.webp 2500w\", \"/static/73c74f337af4d7a25cd2f343437b5458/46158/lightFiles.webp 2840w\"],\n    \"sizes\": \"(max-width: 2840px) 100vw, 2840px\",\n    \"type\": \"image/webp\"\n  }), \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"/static/73c74f337af4d7a25cd2f343437b5458/412e4/lightFiles.png 2500w\", \"/static/73c74f337af4d7a25cd2f343437b5458/40555/lightFiles.png 2840w\"],\n    \"sizes\": \"(max-width: 2840px) 100vw, 2840px\",\n    \"type\": \"image/png\"\n  }), \"\\n          \", mdx(\"img\", {\n    parentName: \"picture\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"src\": \"/static/73c74f337af4d7a25cd2f343437b5458/40555/lightFiles.png\",\n    \"alt\": \"LightMode\",\n    \"title\": \"LightMode\",\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(\"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\": \"2798px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"66.19999999999999%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAABYlAAAWJQFJUiTwAAADr0lEQVQ4yzWTfUzUBRjH759K22rk2txaL1pKwHnUMDzerixIk04FTSTjLd6EoPHq1CBS0CsV5C2naagh4AEmgZDdWAYIp0PeOTi4k5c7uBIQKOLl7jj69OuPnu277/Zsz2ff59keUbvrNTSfV2H4rhp9UzcajQlNl4G+HiNajZHB/jEGukbQdwwxqhllTGtgXDOCqUOHqXOQ8VYthsZ+dDXd9J2oRdQmKcWk6mcRM3MLZhbMFhYtFpb/sWFdWcaybMVsNWNetgiyYrEtY7bZBP3vNpZYYfSXTjTRVxA1byrBqBpi6fEAKONYqUzCUhqL9Xo8VCZAzWGo+xJ+zhA8HW4mCRL6VYJXJQsz0dB5jdGbAjD0IqKf7JUYVHpG9G0URO6i6UwMv/96Cf0NBdXHIyjNjKUoLQJF5E6+PxpGhSKBnPgossKDOR0XzbGg/RTnZzN2oxVNyCVEP7xwi4e1wi0mRriefRz1qVC6K8/RUnSMc6czcXTZwkaxMxJXDza+sRl5YBTbAjORvBPHlm2JOEojiErNw1TeQm+wACxcc5uBujG0A13UHApgMMuJtoR1mAqDuFVwDKnUFWexAzJPT+S+20lIPERg+Ane909BvjcVD1kYyWm5jCvV9BwQVj67po7B2yYeah9wYZ8rBoUL0ydfYSLdicbcL3hdLMHBfqMAluLi7MQnQZ8SHHMGb79k5AFH8HovmuT0fMbK1HQFCAlTnlahVU2i7X/AkXcdUIa4oI53ZOjom7QXJLLZ3RN3NzekguztN7DTbz/BB7Px8U9lu38Sbm8LCdNzMRTfo233ZUSRT9yhR/WY9va7vLR6LeFSMRmyZ2iKceD+2Wiksq14yWQ4OYlZ/+p65LsD+Cg4k60fJuHlHYW9g5y41G8YudzKfZ8SRCFP1tNe+4jh0QFOpqRR9PVXKGL8yQn1oK1MQV5+AXnZp4j/LIbAgH1kZBzn2/OVnMm5SlLKaXx3RKPIuYj+fDtNblWIdjz1I3erR4AFZh+NMTNhxLY0zZ+jfUxq7qFWN9LQUE9nZyvNLQ309naxODfNzOQ41sVZ5mcn+Wtxkr6cfupfa0bks6ocVbmOhSkjU0YTM39MMT05x2zFBRpi97DOXc6Gtz5gk2wP9m67SMsq5L8y/23GOi981LyV5RUzbYeHqVytE4B2Svw2VLBXUoZcXIyvuISPHe8Q9nI9B56vwtuuBvmztRx87jdS7NTkvthBsUTPFbGOq046SgRXSnRcWzvM5VVG/gXyNs+3VamzyAAAAABJRU5ErkJggg==')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"picture\", {\n    parentName: \"span\"\n  }, \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"/static/1f39b5c6ac740589d5b7bc8b6c0548fe/a3bc4/lightImg.webp 2500w\", \"/static/1f39b5c6ac740589d5b7bc8b6c0548fe/0030e/lightImg.webp 2798w\"],\n    \"sizes\": \"(max-width: 2798px) 100vw, 2798px\",\n    \"type\": \"image/webp\"\n  }), \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"/static/1f39b5c6ac740589d5b7bc8b6c0548fe/412e4/lightImg.png 2500w\", \"/static/1f39b5c6ac740589d5b7bc8b6c0548fe/92245/lightImg.png 2798w\"],\n    \"sizes\": \"(max-width: 2798px) 100vw, 2798px\",\n    \"type\": \"image/png\"\n  }), \"\\n          \", mdx(\"img\", {\n    parentName: \"picture\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"src\": \"/static/1f39b5c6ac740589d5b7bc8b6c0548fe/92245/lightImg.png\",\n    \"alt\": \"LightMode\",\n    \"title\": \"LightMode\",\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(UI, {\n    colors: ['#1F2937', '#52525b', '#F9FAFB', '#FFEDD5', '#FFF7ED'],\n    primeFontFamily: 'Roboto',\n    secondaryFontFamily: 'Audiowide',\n    background: '#FFF7ED',\n    textColor: \"#1F2937\",\n    h1: {\n      fontFamily: 'Roboto',\n      fontWeight: '700',\n      fontSize: '40px',\n      textTransform: 'uppercase',\n      color: '#1F2937'\n    },\n    h2: {\n      fontSize: '35px',\n      fontWeight: '700',\n      fontFamily: 'Roboto'\n    },\n    body: {\n      fontFamily: 'Roboto',\n      color: '#1F2937',\n      fontSize: '18px',\n      lineHeight: 1.7\n    },\n    mdxType: \"UI\"\n  }), mdx(\"h2\", {\n    \"id\": \"dark-mode-ui-overview\"\n  }, \"Dark Mode UI overview\"), 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\": \"2920px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"65.2%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAABYlAAAWJQFJUiTwAAADeElEQVQ4y0WR20/bZRyHG6GkvzE5hFNbaKEttPRI++v5RGmhtIVBKZsBPLAZ5hgzMMHCTqVsFNguHDBBZFmWELPbRf8AvZnuRhY1RhONJoaLmZho9D94/AkXXjz5fN/vxfO+bz6ysYYSE8oC05oZch27hPSfElY/IaR8QrDxEwL1BwTrHxOseyTlIwIN+/gbdvE3PiDUuEWgroS3ZhVv5TYuYR3Z6H8H9SgqnYV6XYRaiSZTgpq2MFXa4DE1bSEpA8fzq9qQRPCYKmk+rfWjVAVxn7qDS1FCNli9jKU+S3NbO7cSBm70aMmHVOTDapZ7dRSS7RTSZlYGbcdzsa+VlWTbSUos92kxarqwKYqIwhqyiLCIVZ3DandQyth4OhPj650Zvtx4nftZK3tTcXYudFMa6eLhxTgbOS/FAT+r2bC0i1Ic9GFu8/8v9FbMYmwawBmM8fBuiS82pvjus8c8P1hn/Ow5VO1W7J4gZjGExRfG4BnBkZjHEZ/DlbiKPTqNpq0Pp6JwIhTLp9HVpWg1unl6fZJf1h0cvmfgj/23KUyN02Fsx+NyEA2HyQ5l6E1NkB69RmY0T3pojr70JXSGE6FbKJ0IW2v70eitfDQW5teSm7/WNPxTEll/Y4jGZg1Ohx2/z4dXtBPqGWVgrEDq7OKxNJG5LAmTiIpbknAVmUX+FqqqGHVqI/NxBwfjXTybMXFUDLB9vh9dp52I9Dq3243BoJO+n2FwbIXkyALx9BVi/RfR6Xsl2Q08QhGZsXwCZXWU2qZ2bM2dTHeLrCUb+SbvYv+dXsRgN6l0CpfLiSg68YSGOfNagcFzS3QnpojGz0sX9eGVyvUKN5HpykZoqgpTrTRh6/Djs4oEOzSM+7RMZiJYXN10SYV0WkTsdhGjLSYVlJP2w+hNSfSdvbS0RAicyuNTXEOmKotRc9qJxuDk9sYDVu5+yOLqJsuz8+SiPZgjZ3D0ZDGGBrDEhslOzrC+/TE3N7ZYWv2A0tYeHn8Wr3wOj+J9ZGpJWCV0YdK5+OrzZ7x4/oLDw5/4YfMOC1YD5S0+tOYkFmeODnOW4sIOf/78N799+5Kj73/n6MeXjA9cxfvKZRyKd5E1lUdoKAtK+GiQe6iTu1FW9NBSkaZFnpIyg75imLRiniuK+ywJe+SFXeaETS4J93iz8jbZyuuEhFlM8gv8C9FI4Hm3W9PDAAAAAElFTkSuQmCC')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"picture\", {\n    parentName: \"span\"\n  }, \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"/static/c16fac002607f92a68caa474d8814ea9/a3bc4/darkImg.webp 2500w\", \"/static/c16fac002607f92a68caa474d8814ea9/5694a/darkImg.webp 2920w\"],\n    \"sizes\": \"(max-width: 2920px) 100vw, 2920px\",\n    \"type\": \"image/webp\"\n  }), \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"/static/c16fac002607f92a68caa474d8814ea9/412e4/darkImg.png 2500w\", \"/static/c16fac002607f92a68caa474d8814ea9/5be2d/darkImg.png 2920w\"],\n    \"sizes\": \"(max-width: 2920px) 100vw, 2920px\",\n    \"type\": \"image/png\"\n  }), \"\\n          \", mdx(\"img\", {\n    parentName: \"picture\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"src\": \"/static/c16fac002607f92a68caa474d8814ea9/5be2d/darkImg.png\",\n    \"alt\": \"DarkMode\",\n    \"title\": \"DarkMode\",\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(\"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\": \"2732px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"70%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAABYlAAAWJQFJUiTwAAADBUlEQVQ4y32TWU8bZxSGx2AwQwPE2wTwLJ7xggF7PNjjZYxxqAPBAaKoSkqK3Uq5oGqkSq3UNV1kp1ilraIuUqUoiiIVqkq5yX98+nmJyE178ej9znmPXp1ZPuk95ZRO7HM+Mj5mJ3VBzXjJ5vLfeNfOqUb/ohp5gRd5jhd+RnVA5Cnl6J+C36gqvwrvFyqh7ykvnOHO/o50GPqGhOES1TcIWVuEEg3eUqtc0caoFeZ1j7nBOVYW9WV/pB6zWgEjcgdX/glpP/gVilqk6WQ4O1ihdytDt5Wm1xLngd5apXuYozfEHvq9sd8VPG5l+HbPxFneIx84Q6rPfYqe2uJ2JcuTVpzedozTpjZG5XTXpC9C+yKoLwJOd+Jv+Br9pk63uUgxNggUGxbkh6hGhbBZYkbz8ClFJhddpOjGiIiDFM4Lfc3r/kgnFDGrZFkKHlCSxYb29AOW9AqpZI5S6TpubQ/HbZJaq5JcrZAc6JsMeoKEIL3u4ZRukLLLmMohpRkRmJt6QCxexUw65Jw664VtMSzqFTGUqfwP5eHcurONte4OA8vyj0jZwAdcjdpoZo58oUGu+DYZewtruEX1P7GG23us5a9jZV0sEViR+0jJwF3mI1mWjRxWvkncuYmSrhM0qwQtb6Rm5RLrsh9O1tCyNwilyxjRAzz5MVJaBE4HbW47SV4dW1wcpbi4Z3F+d4DJ+f0VLjr5MTbn76ZG/YEv5v4R8y/u6dSNXfEOu0ja9E1mQ1nctRwntTRHeY12wRwTp120aLtJOm5qhKg7wusURtp2TI4KKvnFXbHhd0jXpmrMR1dRTAcl02BePIos/nxZK44pMKNuMK3aTAkmtZzAxj+o9TxXEmX8RhY9skNDfiQC/ZsszNmo4sOsJTxWxPVLqpck1DqrWpOa/g7b+hEt/f0hO/oxTeM+u8ljauYdcdc71OXPxD85uYky4RH2lbgqbbAgOUR9DZYmWiz5WiwLVN8+1YkPOZl8wpf+ZzzyP+cL/1M+8f/Bif9n2oEf2J/9mmLgIf8CjOHDk7qWKZ0AAAAASUVORK5CYII=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"picture\", {\n    parentName: \"span\"\n  }, \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"/static/355626eec6bd9de3a88a60da8c7f8c8c/a3bc4/darkFiles.webp 2500w\", \"/static/355626eec6bd9de3a88a60da8c7f8c8c/57c94/darkFiles.webp 2732w\"],\n    \"sizes\": \"(max-width: 2732px) 100vw, 2732px\",\n    \"type\": \"image/webp\"\n  }), \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"/static/355626eec6bd9de3a88a60da8c7f8c8c/412e4/darkFiles.png 2500w\", \"/static/355626eec6bd9de3a88a60da8c7f8c8c/f2f36/darkFiles.png 2732w\"],\n    \"sizes\": \"(max-width: 2732px) 100vw, 2732px\",\n    \"type\": \"image/png\"\n  }), \"\\n          \", mdx(\"img\", {\n    parentName: \"picture\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"src\": \"/static/355626eec6bd9de3a88a60da8c7f8c8c/f2f36/darkFiles.png\",\n    \"alt\": \"DarkMode\",\n    \"title\": \"DarkMode\",\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(UI, {\n    colors: ['#1E293B', '#0F172A', '#FFEDD5', '#FFF7ED', '#F9FAFB', '#FFF'],\n    primeFontFamily: 'Roboto',\n    secondaryFontFamily: 'Audiowide',\n    background: '#1E293B',\n    textColor: \"#FFF\",\n    h1: {\n      fontFamily: 'Roboto',\n      fontWeight: '700',\n      fontSize: '40px',\n      textTransform: 'uppercase',\n      color: '#fff'\n    },\n    h2: {\n      fontSize: '35px',\n      fontWeight: '700',\n      fontFamily: 'Roboto'\n    },\n    body: {\n      fontFamily: 'Roboto',\n      color: '#fff',\n      fontSize: '18px',\n      lineHeight: 1.7\n    },\n    mdxType: \"UI\"\n  }), mdx(\"h2\", {\n    \"id\": \"installation-files\"\n  }, \"Installation files\"), mdx(\"p\", null, mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/MassivDash/S3_Manager/releases\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"releases\")), mdx(\"h2\", {\n    \"id\": \"features\"\n  }, \"Features\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Dark and light mode dependant on system preferences\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Files, Pictures, Movies and buckets gallery (grid style)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Optimized for looking through the pictures / movies, lazy loading, images and\\nmovies streamed dritecly from the bucket, are loaded with presigned urls.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Adjustable grid gallery\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Simple name search\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"folders filtering in movies and images pages\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Tagging of assets\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Folder creation\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Multi file upload (drop files)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Galleries remember scroll positions while navigating the app.\")), mdx(\"h3\", {\n    \"id\": \"aws-account\"\n  }, \"AWS Account\"), mdx(\"p\", null, \"In order to use the application you need aws account with s3 service activated.\\nS3 app uses standard aws config files used for aws cli connection\\n\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"info here\"), \".\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"~/.aws/credentials\\n\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"[default]\\naws_access_key_id=AKIAIOSFODNN7EXAMPLE\\naws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY\\n\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"~/.aws/config\\n\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"[default]\\nregion=us-west-2\\noutput=json\\n\")), mdx(\"h3\", {\n    \"id\": \"alternate-s3-endpoint\"\n  }, \"Alternate s3 endpoint\"), mdx(\"p\", null, \"Set env vars \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"S3_CUSTOM_ENDPOINT\"), \" to \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"true\"), \" or \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"1\"), \" at your machine to alter the\\ns3 default endpoints Set the alternative endpoint url with\\n\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"S3_CUSTOM_ENDPOINT_URL\"), \" env\"), mdx(\"p\", null, \"Rust lang (cargo) and node.js (npm or yarn) and tauri-cli instalations are\\nneeded to run / build the project from source\"), mdx(\"p\", null, \"This application is based on \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://tauri.app/\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"tauri.app\"), \", RUST lang in the\\nbackend (core of the app and frontend things are handled by svelte + vite + ts\\ncombo.\"), mdx(\"p\", null, \"Simple division: Rust manages the data and the calls, front end displays the\\ndata.\"), mdx(\"h2\", {\n    \"id\": \"github-info\"\n  }, \"Github info\"), mdx(\"p\", null, mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/MassivDash/S3_Manager\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"https://github.com/MassivDash/S3_Manager\")), mdx(\"p\", null, \"Don\\u2019t forget to \\u2B50 the project if you found it helpful.\"));\n}\n;\nMDXContent.isMDXComponent = true;","tech":["Svelte","Rust","TS","Tailwind"],"category":"Project","appDescription":"AWS S3 GUI","hero":{"full":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAAEGklEQVQ4y4VT+0+bVRjuf2BM1OmccRujBGd0CzBMdEAUURHdHOp+GGBEhJEtbi7RNQ4cRqNGN1xkGgXb0nvXLKy0hV0EQQesK1CuExjrECalQC9AaQuMr4/vOV0ZRtGTPN97znu+85z38hyRIAhgCAthAtlwGFHfCpYZlrFMYDbiu7Om+Wq/6B+H10KUiDA2+gcmJpwIBoNEdpsTRsEJWVTRsRJxOBIxI7q9tMTXCwsLuD40iHabFW2tLXA6x/mZ5VXRiphjiQ54vR6EQqEVsigx27vpcGBsbBT9fb3o6bbj4oXzMJuMfO73++9ezgiXFhcxOenCLTowfH0Ic3NzPBJG5PP50NluQ3PTL7BdtXLCOkstDh4oxlt5Oai3mOD1eOB2TyNE6bMhmp2dwQSFHrFO9PX2YOSmg1IQiHwW3V2duGq9AmW1DHLZTyg/8RVOEq60tcI9PY3ZmRl02TvgHI+kLxqmmvT39cDlclFkIZzRa9HQ8DPfDAQCPEqfz8vr9fu1fvq3jyJy82aMjDigUlbj49ISzM/PRwhZDVgqvb3dMNUaUV9fx9dddjs6OtoxODjACf8+wrBa23D06Ad4t+AdpKWmQK1WRQjZh9XM5ZrA5d9+xZHDh9Da0gLHjWGYjTUw0yUGvQ4ymZSi10NRLYdE8iEynk9HSspOVHx7CsX7i9DY2BAhZO3GKtmwTg8NDPD0pJU/4svPP4NGpeD2VPlJHCjej9SUZ5CXuw97XtvFG1RVVYlFau6KDqNgg9XsEslCIZdCQilp1UpotSoqQSdvGMvCYjahrOw4knck4cj7h/DD96e50HmEqwm9Xi8velvLZZJKI+/+9NQUtBo1CvLfRmFBPsklF7FbYiCOjUVpyTHYOzvo5YxyrapVSiK8kzKzk1THqclJLFJNfSR0JlwryYNJ5psTX8NYcxbFRYUUWQJ2v5rFazs4cA1e0uEXVJLkpMRIU4IkYicR+al+UyRUG93qnvGhllIrOV6Ksk8/gYK6aKO0G5ubUGsxQ65UoOK70zCcNaCddLgvNweSYx9B1HS4CBcKc3Audw+MBEv+XujffBk1edlQ7M5A+c4EVGWmQf36S4RMVGamouFgPqyS9yDflQ5p1rPQvJGJiueegm5vFkTymPugT9gCQ3I8ziSJodu2GYZEMVRxD0Idez/08euhiVtH8wc42Fy+6V5IH70HGvE6vlbRf7r4h7gVqZ/YiJr0HTj34tMwvZKGuuwXYMnOgHZ7DFRbN0D9+CPcKh97GCoCt7SO+u761/O5SJsYJ2i2bRI0TzJsFOgCWm8WNNtjBAXNZVs3CEry65PiBF2i+H8hClA3gySXAGGBHrr7z1vw01v108Mf6ulG8/k6jDtu8L2Ah/3r4fZfQXusy/1rIfwfe2vhL/Kc+noaqXyIAAAAAElFTkSuQmCC","aspectRatio":1,"src":"/static/7e76a640f9382dc8a36ea033c8346b68/a1946/s3ManagerCover.png","srcSet":"/static/7e76a640f9382dc8a36ea033c8346b68/5b37e/s3ManagerCover.png 236w,\n/static/7e76a640f9382dc8a36ea033c8346b68/49058/s3ManagerCover.png 472w,\n/static/7e76a640f9382dc8a36ea033c8346b68/a1946/s3ManagerCover.png 944w,\n/static/7e76a640f9382dc8a36ea033c8346b68/6050d/s3ManagerCover.png 1200w","srcWebp":"/static/7e76a640f9382dc8a36ea033c8346b68/99fbb/s3ManagerCover.webp","srcSetWebp":"/static/7e76a640f9382dc8a36ea033c8346b68/77392/s3ManagerCover.webp 236w,\n/static/7e76a640f9382dc8a36ea033c8346b68/1f177/s3ManagerCover.webp 472w,\n/static/7e76a640f9382dc8a36ea033c8346b68/99fbb/s3ManagerCover.webp 944w,\n/static/7e76a640f9382dc8a36ea033c8346b68/9000d/s3ManagerCover.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='M283%2069c-3%202-4%203-4%205s0%202-1%201c0-3-1-2-11%204-6%203-8%205-8%206%200%202%200%202%202%202v2c0%202%200%202%202%201l2-3h3l2-1c0%201-2%203-5%204-3%202-6%204-6%206l-3%203c-2%201-2%201-2-2%201-3-1-4-4-1-3%202-2%203%200%203h2l-2%203-2%202h1l3-1%202-1%204-2c3-2%203-2%2014%202l11%203%201-9%201-9%201%209%201%2010%207-3%206-3c2%200%204-3%205-5l-2-2c-1%200-3-2-1-3s-1-9-4-9l-1-1-3-1h-2l-5-3c-8-3-8-3-3-6%204-2%205-3%203-3l-4%202m-93%2024c1%201%201%201-1%201h-4l2%201%203%201-3%201c-2%200-2%200-1%201h3c4-1%205-1%205%202%201%203%205%207%2010%208%201%201%202%201%202-2%201-3%201-4%204-3l4%203c2%202%202%202-2%204-3%201-4%202-3%204h4c0-3%202-3%202%200%201%203%200%203-2%202l-3%201h4c3%200%204%200%203%201-2%200-1%202%201%202%205%200%207%201%207%203l1%202h1l2%201%201-2-1-2c-3%201-3-1-1-3%204-5%2015-4%2015%201l-1%202h-2l-2%201h-2l2%201c4%202%2024-2%2029-5l3-1c3-1%203-1%202-2h1c2%200%202%200%201-1v-1h2l1%201v-4c-1-1-2-2-3-1-1%200-12-3-15-6-3-1-5-1-4%201l-3%202-4%202c-1%203-6%204-10%202h2l4-1-6-1h-6l1-1h-2c-3%200-3%200-1-1h-2c-3%200-3%200-1-1h-1c-3%200-3%200-2-1v-1l-2-2-3-3v1l-2%203h1l2%201v1h-1v7l-1-2-1-3v-1l-1-1-2-3c0-2-1-2-3-1-3%200-3%200-2-1s1-1-1-1h-2c-3%200-3%200-2-1s1-1-1-1h-3c-3%200-3%200-1-1h-2c-2%200-3%200-2-1%202-1%202-1-1-2h-4m-87%2023l-2%203c-2%202-3%209-2%209%201%201-2%203-7%205-6%203-8%204-7%205h5c2-1%204-1%2014%202l12%204-4-4c-6-6-7-9-7-18l-1-8-1%202m258%202l-8%207-6%203a307%20307%200%2001-33%2018c-21%2012-40%2019-59%2021l-7%201%202%201%2013-1%208-1c9-1%2018-4%2024-7l6-2-5%204c-17%207-38%2011-63%2011-18%200-24%200-43-4l-4%201%201%202%201%2010c0%208%200%2010-2%2011v1c2%200%204-2%203-5l1-3%201%202c-1%202%200%203%201%203l1-3%201-3c1-1%201-1%201%201l2%202c2-1%204-2%202-2l-1-2h1l3%201%203-1-3%202-2%202h2l4-1%201-3c1-3%201-3%201%202%200%203%200%205%201%204h2v2l-1%203c0%202%208%201%2014-1l4-1c2%203%204%200%204-6%200-4%200-5%201-3%200%203%200%203%205%203l9%201c2%200%203%200%203%204l1%206v2c-1%202-1%207%201%208%202%200%203-3%201-4v-1l2%201%201%201c3%200%204%200%204%202l1%201%201-1%202-1-1-2c-3-1-3-1%202-1h4c-2-1-2-1%200-1l3-1h1l1-2v1l1%201%201-2h2v2c-1%201-2%201%2014%201%2014%200%2016%201%2010%204-7%204-12%206-14%205l-1%201c1%201-12%205-25%208-14%202-45%202-60-1-14-2-23-5-23-6h3l4%201-3-2c-4-1-4-2-5-4l1-3%201%201%204%201c4-1%205%200%203%202l-1%201%206%202-2-1c-2-1-2-1-1-3%201-3%201-3-3-3a374%20374%200%2001-9-1l-5%205c-3%201-4%204-4%206%201%201-4%205-10%208l-4%204%204-2%206-2h1c0-1%208-4%2012-4%206-1%2021%2014%2024%2025%201%202%201%202-1%201s-3-1-6%203c-5%205-7%206-8%203s-2-2-1%201c0%203%200%203-4%205-3%202-4%202-5%200-5-5-7-5-4%200%202%204%201%204-4%207s-9%203-5%200c2%200%202-1%200-2-1-1-1-1-1%201s0%202-1%201l-1-1-1-2v-1l-3-4c-3-5-7-9-7-7l2%202c1%201%202%203%200%203v1l-6-6-10-9-3-3h-1c0%201-1%201-3-1-5-2-4%200%201%203%2012%206%2024%2020%2026%2030l1%205%204-2%206-4a183%20183%200%200131-15c1%202-39%2025-43%2025h-2l2%201%202%204v3h-28c-25%200-27%200-25-2%202%200%203-1%203-2l-6%203-14%201-12-1-1-1-1%201-6%201-3-1c1-1%201-1-1-1-3-1-5%200-3%201%201%201-5%201-13%201H0v75h69a1061%201061%200%200197%203l-1%203v2l4-2c3-2%204-4%204-5l1-1%201%202h1v-1l1-1%203%201-1%201-3%203-7%204-3%204v3l19-11%208-5h208v-75h-6c-6%200-6%200-4-1v-2l-2%202-4%201h-2l3-2c8-7%2017-21%2013-23v-1l1-13c0-14%200-15-6-17-3-1-12%200-10%202v3l-1-2-2-1-1%202-1%202v2h-3v1c1%201-2%205-4%203l-1%201v1l-1-1-2%201c-1%201-2%203-1%205l-1%205-1%203-1-3c-1-2-1-2-2%202v6l-1%201c-2-2-2%2014%200%2020%202%203%202%203-1%203l-3-1h-1l-2%201-2-1-3-2-3-1-6-3h3l2-1-2-1v-1c1%200%202-1%201-2l-1-4c0-4%200-3-1%201-1%203-2%203-8%201-2%200-2%200%200%201%201%202%201%202-2%202l-4-1%205%202c2%202%205%203%205%202l1%201h-5c-2-1-2%200%201%202%204%204%203%205-3%205-4%200-5%200-6-2-1-1-2-2-3-1-1%200-1%201%201%202l1%201c-3%200-5-1-4-3v-1h-1c0%202-2%202-5%200h1l2-1-1-2h-2v-1h2c1-1%202%200%203%201%200%202%205%201%205-1%201-1%201-1%201%201s4%204%204%202l1-2-1-2-2-1-2-1h-7l-3-3-4-2-2-2-1-2h-1c0%202-2%203-2%201v-4c-1-3%200-4%201-1l2%201%202%201c1%202%204%201%204-1l-2-1-2-2c0-1%201-1%206%201%204%201%204%201%206-1v-7c-1%200-2%201-1%202%200%201-1%201-5-1-10-4-12-4-8%203%202%204%201%205-2%202-1-1-2-3-1-5%200-1%200-2-1-1l-1%202c-2%200-1-3%201-5%203-3%207-11%206-13h2c-1-1%200-3%202-4%203-4%204-7%203-9s-1-10%201-14c1-4%203-6%2022-16l14-10v-3l4-3c19-12%2020-27%203-38l-4-5-2-4c-1-1%200-2%204-6%203-2%204-4%203-5-1%200-1-1%201-3%202-4%201-3-3%201M63%20148c0%203%204%2014%207%2017%203%204%205%205%2011%208%206%202%208%203%207%204v1l2-1h11l4-5%203-7v-1a12889%2012889%200%2001-45-16m88%205c-1%203%200%204%201%202l2-1%203%202v1l5%202a46%2046%200%200110%202l5%203h2l3%201h3c2-1%202-3-1-3l-17-5c-15-5-16-6-16-4m18%2020l-2%201c-2%200-2%200-2%2012l-1%2013c-2%201-3%200-1-1l1-2h-1l-1-3%201-5v-1l-2%201c-1%201-1%201-1-3l-1-7c0-3%200-3-1-1l-2%202c-1%200-3%203-2%204l3-1c2-1%202-1%202%203%200%202-1%203-3%204l-3%202-1-2c0-5%200-5-2-5-2%201-3%201-3-1s-1-2-2%200l-1%201c3-1%202%201-1%202-1%201-2%201-1%202l3-1c1-1%201-1%201%205-1%205%200%206%201%204h1l1-1h6c2%200%202%200%201%201l-4%202-3%202-8%205c-6%203-10%207-6%206h1c-2%202-3%202-10-1-15-6-18-7-17-8%200-2-2-3-4-2v1l1%202c0%201%201%202%205%203l4%202%202%201-1%202-2%206c0%202-1%203-3%204-3%202-5%205-3%204l4-2%201%201c-2%202%203%202%208%200%208-3%209-4%207-5%200-1-2-1-5%201-6%204-7%204-8-1l1-4%201%204c0%204%201%204%203%200%201-4%201-4-1-4v-1l1-2c0-2%201-2%206%200%204%202%205%202%204%205v4l3-1c2-2%204-2%205-1h8c2%200%204%200%206-2l4-2%201-3c0-1%201-3%205-5l5-3v-7c0-6%200-7%201-6l1%202c-2%201-1%203%201%202h2l-2%204c-2%204-2%204%200%204l4-2%202-1%202-2c4-1%206-3%205-9l1-8v-1l-1-3c-1-3-4-6-4-4h-5c-1-1-1%200-1%203%200%204-2%206-2%202%200-3-2-7-2-5m167%2031c-10%206-12%208-12%2013l-1%206v3l1%202v7h3l2-4%204-4c0-2%200-2-4-1-4%203-4%201-1-3s5-5%209-4h8l5-2h5l2%202h9c1-1%200-3-3-4l-2-3c0-3%200-4-2-5s-3-2-3-4c-1-3-1-3-1%200s0%204-2%204c-4-2-6-2-8-1h-1l1-2c2%200%201-5%200-5l-9%205m-98%2032l2%201c2%200%202%201%202%2010v10l-3-1c-5%200-6-5-1-5l4-1h-4c-2%200-3%200-3-2l-2-2-2%201c0%202-1%202-6%200-9-3-8-4-8%2017v21c-1%201%201%201%208%201%208%200%2011-2%203-2l6-1%2019-2%208-1c-1%201-2%202-1%203v3h46v-8c0-7%200-7-2-6l-9-2-6-2c-1%206-3%2010-8%2012-5%203-10%201-5-2h3v1l2-1-1-1v-2c2-1%202-7%201-7l-4%202h-6c-2-1-22%205-24%207s-5%203-5%200l-2-1h-1v-1l-2-1c0-3%205-2%207%200h1l1-2v-2l1-1%201%201c-2%202%201%202%206%201%204-1%207-3%204-3l5-3c7-4%208-5%202-5l-10-1c-6%200-7%200-9%202l-2%202v-13l1-13%203-1-5-1-5%201m-35%2013l3%203c4%202%204%202%201%204-2%201-2%202-2%2015v15l1-14c0-10%201-14%202-15l1%201%201%201c2-2%203%200%202%202l-2%201-1%2011%201%208%202-4v7c2%200%205-8%203-8v-8l-1-4-2%201%201-2c4-3%202-10-4-14-4-3-6-3-6%200m-15%2025l-3%203%203-1h3v5c0%205%200%205%203%205l4-2%201-2%201-4c0-4%200-5-3-6-5-2-6-1-9%202'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"regular":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAAEGklEQVQ4y4VT+0+bVRjuf2BM1OmccRujBGd0CzBMdEAUURHdHOp+GGBEhJEtbi7RNQ4cRqNGN1xkGgXb0nvXLKy0hV0EQQesK1CuExjrECalQC9AaQuMr4/vOV0ZRtGTPN97znu+85z38hyRIAhgCAthAtlwGFHfCpYZlrFMYDbiu7Om+Wq/6B+H10KUiDA2+gcmJpwIBoNEdpsTRsEJWVTRsRJxOBIxI7q9tMTXCwsLuD40iHabFW2tLXA6x/mZ5VXRiphjiQ54vR6EQqEVsigx27vpcGBsbBT9fb3o6bbj4oXzMJuMfO73++9ezgiXFhcxOenCLTowfH0Ic3NzPBJG5PP50NluQ3PTL7BdtXLCOkstDh4oxlt5Oai3mOD1eOB2TyNE6bMhmp2dwQSFHrFO9PX2YOSmg1IQiHwW3V2duGq9AmW1DHLZTyg/8RVOEq60tcI9PY3ZmRl02TvgHI+kLxqmmvT39cDlclFkIZzRa9HQ8DPfDAQCPEqfz8vr9fu1fvq3jyJy82aMjDigUlbj49ISzM/PRwhZDVgqvb3dMNUaUV9fx9dddjs6OtoxODjACf8+wrBa23D06Ad4t+AdpKWmQK1WRQjZh9XM5ZrA5d9+xZHDh9Da0gLHjWGYjTUw0yUGvQ4ymZSi10NRLYdE8iEynk9HSspOVHx7CsX7i9DY2BAhZO3GKtmwTg8NDPD0pJU/4svPP4NGpeD2VPlJHCjej9SUZ5CXuw97XtvFG1RVVYlFau6KDqNgg9XsEslCIZdCQilp1UpotSoqQSdvGMvCYjahrOw4knck4cj7h/DD96e50HmEqwm9Xi8velvLZZJKI+/+9NQUtBo1CvLfRmFBPsklF7FbYiCOjUVpyTHYOzvo5YxyrapVSiK8kzKzk1THqclJLFJNfSR0JlwryYNJ5psTX8NYcxbFRYUUWQJ2v5rFazs4cA1e0uEXVJLkpMRIU4IkYicR+al+UyRUG93qnvGhllIrOV6Ksk8/gYK6aKO0G5ubUGsxQ65UoOK70zCcNaCddLgvNweSYx9B1HS4CBcKc3Audw+MBEv+XujffBk1edlQ7M5A+c4EVGWmQf36S4RMVGamouFgPqyS9yDflQ5p1rPQvJGJiueegm5vFkTymPugT9gCQ3I8ziSJodu2GYZEMVRxD0Idez/08euhiVtH8wc42Fy+6V5IH70HGvE6vlbRf7r4h7gVqZ/YiJr0HTj34tMwvZKGuuwXYMnOgHZ7DFRbN0D9+CPcKh97GCoCt7SO+u761/O5SJsYJ2i2bRI0TzJsFOgCWm8WNNtjBAXNZVs3CEry65PiBF2i+H8hClA3gySXAGGBHrr7z1vw01v108Mf6ulG8/k6jDtu8L2Ah/3r4fZfQXusy/1rIfwfe2vhL/Kc+noaqXyIAAAAAElFTkSuQmCC","aspectRatio":1,"src":"/static/7e76a640f9382dc8a36ea033c8346b68/3ddd4/s3ManagerCover.png","srcSet":"/static/7e76a640f9382dc8a36ea033c8346b68/078a8/s3ManagerCover.png 163w,\n/static/7e76a640f9382dc8a36ea033c8346b68/e56da/s3ManagerCover.png 327w,\n/static/7e76a640f9382dc8a36ea033c8346b68/3ddd4/s3ManagerCover.png 653w,\n/static/7e76a640f9382dc8a36ea033c8346b68/c5cc7/s3ManagerCover.png 980w,\n/static/7e76a640f9382dc8a36ea033c8346b68/6050d/s3ManagerCover.png 1200w","srcWebp":"/static/7e76a640f9382dc8a36ea033c8346b68/0acdf/s3ManagerCover.webp","srcSetWebp":"/static/7e76a640f9382dc8a36ea033c8346b68/ac59e/s3ManagerCover.webp 163w,\n/static/7e76a640f9382dc8a36ea033c8346b68/7660b/s3ManagerCover.webp 327w,\n/static/7e76a640f9382dc8a36ea033c8346b68/0acdf/s3ManagerCover.webp 653w,\n/static/7e76a640f9382dc8a36ea033c8346b68/75470/s3ManagerCover.webp 980w,\n/static/7e76a640f9382dc8a36ea033c8346b68/9000d/s3ManagerCover.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='M283%2069c-3%202-4%203-4%205s0%202-1%201c0-3-1-2-11%204-6%203-8%205-8%206%200%202%200%202%202%202v2c0%202%200%202%202%201l2-3h3l2-1c0%201-2%203-5%204-3%202-6%204-6%206l-3%203c-2%201-2%201-2-2%201-3-1-4-4-1-3%202-2%203%200%203h2l-2%203-2%202h1l3-1%202-1%204-2c3-2%203-2%2014%202l11%203%201-9%201-9%201%209%201%2010%207-3%206-3c2%200%204-3%205-5l-2-2c-1%200-3-2-1-3s-1-9-4-9l-1-1-3-1h-2l-5-3c-8-3-8-3-3-6%204-2%205-3%203-3l-4%202m-93%2024c1%201%201%201-1%201h-4l2%201%203%201-3%201c-2%200-2%200-1%201h3c4-1%205-1%205%202%201%203%205%207%2010%208%201%201%202%201%202-2%201-3%201-4%204-3l4%203c2%202%202%202-2%204-3%201-4%202-3%204h4c0-3%202-3%202%200%201%203%200%203-2%202l-3%201h4c3%200%204%200%203%201-2%200-1%202%201%202%205%200%207%201%207%203l1%202h1l2%201%201-2-1-2c-3%201-3-1-1-3%204-5%2015-4%2015%201l-1%202h-2l-2%201h-2l2%201c4%202%2024-2%2029-5l3-1c3-1%203-1%202-2h1c2%200%202%200%201-1v-1h2l1%201v-4c-1-1-2-2-3-1-1%200-12-3-15-6-3-1-5-1-4%201l-3%202-4%202c-1%203-6%204-10%202h2l4-1-6-1h-6l1-1h-2c-3%200-3%200-1-1h-2c-3%200-3%200-1-1h-1c-3%200-3%200-2-1v-1l-2-2-3-3v1l-2%203h1l2%201v1h-1v7l-1-2-1-3v-1l-1-1-2-3c0-2-1-2-3-1-3%200-3%200-2-1s1-1-1-1h-2c-3%200-3%200-2-1s1-1-1-1h-3c-3%200-3%200-1-1h-2c-2%200-3%200-2-1%202-1%202-1-1-2h-4m-87%2023l-2%203c-2%202-3%209-2%209%201%201-2%203-7%205-6%203-8%204-7%205h5c2-1%204-1%2014%202l12%204-4-4c-6-6-7-9-7-18l-1-8-1%202m258%202l-8%207-6%203a307%20307%200%2001-33%2018c-21%2012-40%2019-59%2021l-7%201%202%201%2013-1%208-1c9-1%2018-4%2024-7l6-2-5%204c-17%207-38%2011-63%2011-18%200-24%200-43-4l-4%201%201%202%201%2010c0%208%200%2010-2%2011v1c2%200%204-2%203-5l1-3%201%202c-1%202%200%203%201%203l1-3%201-3c1-1%201-1%201%201l2%202c2-1%204-2%202-2l-1-2h1l3%201%203-1-3%202-2%202h2l4-1%201-3c1-3%201-3%201%202%200%203%200%205%201%204h2v2l-1%203c0%202%208%201%2014-1l4-1c2%203%204%200%204-6%200-4%200-5%201-3%200%203%200%203%205%203l9%201c2%200%203%200%203%204l1%206v2c-1%202-1%207%201%208%202%200%203-3%201-4v-1l2%201%201%201c3%200%204%200%204%202l1%201%201-1%202-1-1-2c-3-1-3-1%202-1h4c-2-1-2-1%200-1l3-1h1l1-2v1l1%201%201-2h2v2c-1%201-2%201%2014%201%2014%200%2016%201%2010%204-7%204-12%206-14%205l-1%201c1%201-12%205-25%208-14%202-45%202-60-1-14-2-23-5-23-6h3l4%201-3-2c-4-1-4-2-5-4l1-3%201%201%204%201c4-1%205%200%203%202l-1%201%206%202-2-1c-2-1-2-1-1-3%201-3%201-3-3-3a374%20374%200%2001-9-1l-5%205c-3%201-4%204-4%206%201%201-4%205-10%208l-4%204%204-2%206-2h1c0-1%208-4%2012-4%206-1%2021%2014%2024%2025%201%202%201%202-1%201s-3-1-6%203c-5%205-7%206-8%203s-2-2-1%201c0%203%200%203-4%205-3%202-4%202-5%200-5-5-7-5-4%200%202%204%201%204-4%207s-9%203-5%200c2%200%202-1%200-2-1-1-1-1-1%201s0%202-1%201l-1-1-1-2v-1l-3-4c-3-5-7-9-7-7l2%202c1%201%202%203%200%203v1l-6-6-10-9-3-3h-1c0%201-1%201-3-1-5-2-4%200%201%203%2012%206%2024%2020%2026%2030l1%205%204-2%206-4a183%20183%200%200131-15c1%202-39%2025-43%2025h-2l2%201%202%204v3h-28c-25%200-27%200-25-2%202%200%203-1%203-2l-6%203-14%201-12-1-1-1-1%201-6%201-3-1c1-1%201-1-1-1-3-1-5%200-3%201%201%201-5%201-13%201H0v75h69a1061%201061%200%200197%203l-1%203v2l4-2c3-2%204-4%204-5l1-1%201%202h1v-1l1-1%203%201-1%201-3%203-7%204-3%204v3l19-11%208-5h208v-75h-6c-6%200-6%200-4-1v-2l-2%202-4%201h-2l3-2c8-7%2017-21%2013-23v-1l1-13c0-14%200-15-6-17-3-1-12%200-10%202v3l-1-2-2-1-1%202-1%202v2h-3v1c1%201-2%205-4%203l-1%201v1l-1-1-2%201c-1%201-2%203-1%205l-1%205-1%203-1-3c-1-2-1-2-2%202v6l-1%201c-2-2-2%2014%200%2020%202%203%202%203-1%203l-3-1h-1l-2%201-2-1-3-2-3-1-6-3h3l2-1-2-1v-1c1%200%202-1%201-2l-1-4c0-4%200-3-1%201-1%203-2%203-8%201-2%200-2%200%200%201%201%202%201%202-2%202l-4-1%205%202c2%202%205%203%205%202l1%201h-5c-2-1-2%200%201%202%204%204%203%205-3%205-4%200-5%200-6-2-1-1-2-2-3-1-1%200-1%201%201%202l1%201c-3%200-5-1-4-3v-1h-1c0%202-2%202-5%200h1l2-1-1-2h-2v-1h2c1-1%202%200%203%201%200%202%205%201%205-1%201-1%201-1%201%201s4%204%204%202l1-2-1-2-2-1-2-1h-7l-3-3-4-2-2-2-1-2h-1c0%202-2%203-2%201v-4c-1-3%200-4%201-1l2%201%202%201c1%202%204%201%204-1l-2-1-2-2c0-1%201-1%206%201%204%201%204%201%206-1v-7c-1%200-2%201-1%202%200%201-1%201-5-1-10-4-12-4-8%203%202%204%201%205-2%202-1-1-2-3-1-5%200-1%200-2-1-1l-1%202c-2%200-1-3%201-5%203-3%207-11%206-13h2c-1-1%200-3%202-4%203-4%204-7%203-9s-1-10%201-14c1-4%203-6%2022-16l14-10v-3l4-3c19-12%2020-27%203-38l-4-5-2-4c-1-1%200-2%204-6%203-2%204-4%203-5-1%200-1-1%201-3%202-4%201-3-3%201M63%20148c0%203%204%2014%207%2017%203%204%205%205%2011%208%206%202%208%203%207%204v1l2-1h11l4-5%203-7v-1a12889%2012889%200%2001-45-16m88%205c-1%203%200%204%201%202l2-1%203%202v1l5%202a46%2046%200%200110%202l5%203h2l3%201h3c2-1%202-3-1-3l-17-5c-15-5-16-6-16-4m18%2020l-2%201c-2%200-2%200-2%2012l-1%2013c-2%201-3%200-1-1l1-2h-1l-1-3%201-5v-1l-2%201c-1%201-1%201-1-3l-1-7c0-3%200-3-1-1l-2%202c-1%200-3%203-2%204l3-1c2-1%202-1%202%203%200%202-1%203-3%204l-3%202-1-2c0-5%200-5-2-5-2%201-3%201-3-1s-1-2-2%200l-1%201c3-1%202%201-1%202-1%201-2%201-1%202l3-1c1-1%201-1%201%205-1%205%200%206%201%204h1l1-1h6c2%200%202%200%201%201l-4%202-3%202-8%205c-6%203-10%207-6%206h1c-2%202-3%202-10-1-15-6-18-7-17-8%200-2-2-3-4-2v1l1%202c0%201%201%202%205%203l4%202%202%201-1%202-2%206c0%202-1%203-3%204-3%202-5%205-3%204l4-2%201%201c-2%202%203%202%208%200%208-3%209-4%207-5%200-1-2-1-5%201-6%204-7%204-8-1l1-4%201%204c0%204%201%204%203%200%201-4%201-4-1-4v-1l1-2c0-2%201-2%206%200%204%202%205%202%204%205v4l3-1c2-2%204-2%205-1h8c2%200%204%200%206-2l4-2%201-3c0-1%201-3%205-5l5-3v-7c0-6%200-7%201-6l1%202c-2%201-1%203%201%202h2l-2%204c-2%204-2%204%200%204l4-2%202-1%202-2c4-1%206-3%205-9l1-8v-1l-1-3c-1-3-4-6-4-4h-5c-1-1-1%200-1%203%200%204-2%206-2%202%200-3-2-7-2-5m167%2031c-10%206-12%208-12%2013l-1%206v3l1%202v7h3l2-4%204-4c0-2%200-2-4-1-4%203-4%201-1-3s5-5%209-4h8l5-2h5l2%202h9c1-1%200-3-3-4l-2-3c0-3%200-4-2-5s-3-2-3-4c-1-3-1-3-1%200s0%204-2%204c-4-2-6-2-8-1h-1l1-2c2%200%201-5%200-5l-9%205m-98%2032l2%201c2%200%202%201%202%2010v10l-3-1c-5%200-6-5-1-5l4-1h-4c-2%200-3%200-3-2l-2-2-2%201c0%202-1%202-6%200-9-3-8-4-8%2017v21c-1%201%201%201%208%201%208%200%2011-2%203-2l6-1%2019-2%208-1c-1%201-2%202-1%203v3h46v-8c0-7%200-7-2-6l-9-2-6-2c-1%206-3%2010-8%2012-5%203-10%201-5-2h3v1l2-1-1-1v-2c2-1%202-7%201-7l-4%202h-6c-2-1-22%205-24%207s-5%203-5%200l-2-1h-1v-1l-2-1c0-3%205-2%207%200h1l1-2v-2l1-1%201%201c-2%202%201%202%206%201%204-1%207-3%204-3l5-3c7-4%208-5%202-5l-10-1c-6%200-7%200-9%202l-2%202v-13l1-13%203-1-5-1-5%201m-35%2013l3%203c4%202%204%202%201%204-2%201-2%202-2%2015v15l1-14c0-10%201-14%202-15l1%201%201%201c2-2%203%200%202%202l-2%201-1%2011%201%208%202-4v7c2%200%205-8%203-8v-8l-1-4-2%201%201-2c4-3%202-10-4-14-4-3-6-3-6%200m-15%2025l-3%203%203-1h3v5c0%205%200%205%203%205l4-2%201-2%201-4c0-4%200-5-3-6-5-2-6-1-9%202'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"narrow":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAAEGklEQVQ4y4VT+0+bVRjuf2BM1OmccRujBGd0CzBMdEAUURHdHOp+GGBEhJEtbi7RNQ4cRqNGN1xkGgXb0nvXLKy0hV0EQQesK1CuExjrECalQC9AaQuMr4/vOV0ZRtGTPN97znu+85z38hyRIAhgCAthAtlwGFHfCpYZlrFMYDbiu7Om+Wq/6B+H10KUiDA2+gcmJpwIBoNEdpsTRsEJWVTRsRJxOBIxI7q9tMTXCwsLuD40iHabFW2tLXA6x/mZ5VXRiphjiQ54vR6EQqEVsigx27vpcGBsbBT9fb3o6bbj4oXzMJuMfO73++9ezgiXFhcxOenCLTowfH0Ic3NzPBJG5PP50NluQ3PTL7BdtXLCOkstDh4oxlt5Oai3mOD1eOB2TyNE6bMhmp2dwQSFHrFO9PX2YOSmg1IQiHwW3V2duGq9AmW1DHLZTyg/8RVOEq60tcI9PY3ZmRl02TvgHI+kLxqmmvT39cDlclFkIZzRa9HQ8DPfDAQCPEqfz8vr9fu1fvq3jyJy82aMjDigUlbj49ISzM/PRwhZDVgqvb3dMNUaUV9fx9dddjs6OtoxODjACf8+wrBa23D06Ad4t+AdpKWmQK1WRQjZh9XM5ZrA5d9+xZHDh9Da0gLHjWGYjTUw0yUGvQ4ymZSi10NRLYdE8iEynk9HSspOVHx7CsX7i9DY2BAhZO3GKtmwTg8NDPD0pJU/4svPP4NGpeD2VPlJHCjej9SUZ5CXuw97XtvFG1RVVYlFau6KDqNgg9XsEslCIZdCQilp1UpotSoqQSdvGMvCYjahrOw4knck4cj7h/DD96e50HmEqwm9Xi8velvLZZJKI+/+9NQUtBo1CvLfRmFBPsklF7FbYiCOjUVpyTHYOzvo5YxyrapVSiK8kzKzk1THqclJLFJNfSR0JlwryYNJ5psTX8NYcxbFRYUUWQJ2v5rFazs4cA1e0uEXVJLkpMRIU4IkYicR+al+UyRUG93qnvGhllIrOV6Ksk8/gYK6aKO0G5ubUGsxQ65UoOK70zCcNaCddLgvNweSYx9B1HS4CBcKc3Audw+MBEv+XujffBk1edlQ7M5A+c4EVGWmQf36S4RMVGamouFgPqyS9yDflQ5p1rPQvJGJiueegm5vFkTymPugT9gCQ3I8ziSJodu2GYZEMVRxD0Idez/08euhiVtH8wc42Fy+6V5IH70HGvE6vlbRf7r4h7gVqZ/YiJr0HTj34tMwvZKGuuwXYMnOgHZ7DFRbN0D9+CPcKh97GCoCt7SO+u761/O5SJsYJ2i2bRI0TzJsFOgCWm8WNNtjBAXNZVs3CEry65PiBF2i+H8hClA3gySXAGGBHrr7z1vw01v108Mf6ulG8/k6jDtu8L2Ah/3r4fZfQXusy/1rIfwfe2vhL/Kc+noaqXyIAAAAAElFTkSuQmCC","aspectRatio":1,"src":"/static/7e76a640f9382dc8a36ea033c8346b68/502b1/s3ManagerCover.png","srcSet":"/static/7e76a640f9382dc8a36ea033c8346b68/f2e6d/s3ManagerCover.png 114w,\n/static/7e76a640f9382dc8a36ea033c8346b68/4ddba/s3ManagerCover.png 229w,\n/static/7e76a640f9382dc8a36ea033c8346b68/502b1/s3ManagerCover.png 457w,\n/static/7e76a640f9382dc8a36ea033c8346b68/7ddc2/s3ManagerCover.png 686w,\n/static/7e76a640f9382dc8a36ea033c8346b68/435bf/s3ManagerCover.png 914w,\n/static/7e76a640f9382dc8a36ea033c8346b68/6050d/s3ManagerCover.png 1200w","srcWebp":"/static/7e76a640f9382dc8a36ea033c8346b68/15384/s3ManagerCover.webp","srcSetWebp":"/static/7e76a640f9382dc8a36ea033c8346b68/31fce/s3ManagerCover.webp 114w,\n/static/7e76a640f9382dc8a36ea033c8346b68/e3e25/s3ManagerCover.webp 229w,\n/static/7e76a640f9382dc8a36ea033c8346b68/15384/s3ManagerCover.webp 457w,\n/static/7e76a640f9382dc8a36ea033c8346b68/0258d/s3ManagerCover.webp 686w,\n/static/7e76a640f9382dc8a36ea033c8346b68/64ea2/s3ManagerCover.webp 914w,\n/static/7e76a640f9382dc8a36ea033c8346b68/9000d/s3ManagerCover.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='M283%2069c-3%202-4%203-4%205s0%202-1%201c0-3-1-2-11%204-6%203-8%205-8%206%200%202%200%202%202%202v2c0%202%200%202%202%201l2-3h3l2-1c0%201-2%203-5%204-3%202-6%204-6%206l-3%203c-2%201-2%201-2-2%201-3-1-4-4-1-3%202-2%203%200%203h2l-2%203-2%202h1l3-1%202-1%204-2c3-2%203-2%2014%202l11%203%201-9%201-9%201%209%201%2010%207-3%206-3c2%200%204-3%205-5l-2-2c-1%200-3-2-1-3s-1-9-4-9l-1-1-3-1h-2l-5-3c-8-3-8-3-3-6%204-2%205-3%203-3l-4%202m-93%2024c1%201%201%201-1%201h-4l2%201%203%201-3%201c-2%200-2%200-1%201h3c4-1%205-1%205%202%201%203%205%207%2010%208%201%201%202%201%202-2%201-3%201-4%204-3l4%203c2%202%202%202-2%204-3%201-4%202-3%204h4c0-3%202-3%202%200%201%203%200%203-2%202l-3%201h4c3%200%204%200%203%201-2%200-1%202%201%202%205%200%207%201%207%203l1%202h1l2%201%201-2-1-2c-3%201-3-1-1-3%204-5%2015-4%2015%201l-1%202h-2l-2%201h-2l2%201c4%202%2024-2%2029-5l3-1c3-1%203-1%202-2h1c2%200%202%200%201-1v-1h2l1%201v-4c-1-1-2-2-3-1-1%200-12-3-15-6-3-1-5-1-4%201l-3%202-4%202c-1%203-6%204-10%202h2l4-1-6-1h-6l1-1h-2c-3%200-3%200-1-1h-2c-3%200-3%200-1-1h-1c-3%200-3%200-2-1v-1l-2-2-3-3v1l-2%203h1l2%201v1h-1v7l-1-2-1-3v-1l-1-1-2-3c0-2-1-2-3-1-3%200-3%200-2-1s1-1-1-1h-2c-3%200-3%200-2-1s1-1-1-1h-3c-3%200-3%200-1-1h-2c-2%200-3%200-2-1%202-1%202-1-1-2h-4m-87%2023l-2%203c-2%202-3%209-2%209%201%201-2%203-7%205-6%203-8%204-7%205h5c2-1%204-1%2014%202l12%204-4-4c-6-6-7-9-7-18l-1-8-1%202m258%202l-8%207-6%203a307%20307%200%2001-33%2018c-21%2012-40%2019-59%2021l-7%201%202%201%2013-1%208-1c9-1%2018-4%2024-7l6-2-5%204c-17%207-38%2011-63%2011-18%200-24%200-43-4l-4%201%201%202%201%2010c0%208%200%2010-2%2011v1c2%200%204-2%203-5l1-3%201%202c-1%202%200%203%201%203l1-3%201-3c1-1%201-1%201%201l2%202c2-1%204-2%202-2l-1-2h1l3%201%203-1-3%202-2%202h2l4-1%201-3c1-3%201-3%201%202%200%203%200%205%201%204h2v2l-1%203c0%202%208%201%2014-1l4-1c2%203%204%200%204-6%200-4%200-5%201-3%200%203%200%203%205%203l9%201c2%200%203%200%203%204l1%206v2c-1%202-1%207%201%208%202%200%203-3%201-4v-1l2%201%201%201c3%200%204%200%204%202l1%201%201-1%202-1-1-2c-3-1-3-1%202-1h4c-2-1-2-1%200-1l3-1h1l1-2v1l1%201%201-2h2v2c-1%201-2%201%2014%201%2014%200%2016%201%2010%204-7%204-12%206-14%205l-1%201c1%201-12%205-25%208-14%202-45%202-60-1-14-2-23-5-23-6h3l4%201-3-2c-4-1-4-2-5-4l1-3%201%201%204%201c4-1%205%200%203%202l-1%201%206%202-2-1c-2-1-2-1-1-3%201-3%201-3-3-3a374%20374%200%2001-9-1l-5%205c-3%201-4%204-4%206%201%201-4%205-10%208l-4%204%204-2%206-2h1c0-1%208-4%2012-4%206-1%2021%2014%2024%2025%201%202%201%202-1%201s-3-1-6%203c-5%205-7%206-8%203s-2-2-1%201c0%203%200%203-4%205-3%202-4%202-5%200-5-5-7-5-4%200%202%204%201%204-4%207s-9%203-5%200c2%200%202-1%200-2-1-1-1-1-1%201s0%202-1%201l-1-1-1-2v-1l-3-4c-3-5-7-9-7-7l2%202c1%201%202%203%200%203v1l-6-6-10-9-3-3h-1c0%201-1%201-3-1-5-2-4%200%201%203%2012%206%2024%2020%2026%2030l1%205%204-2%206-4a183%20183%200%200131-15c1%202-39%2025-43%2025h-2l2%201%202%204v3h-28c-25%200-27%200-25-2%202%200%203-1%203-2l-6%203-14%201-12-1-1-1-1%201-6%201-3-1c1-1%201-1-1-1-3-1-5%200-3%201%201%201-5%201-13%201H0v75h69a1061%201061%200%200197%203l-1%203v2l4-2c3-2%204-4%204-5l1-1%201%202h1v-1l1-1%203%201-1%201-3%203-7%204-3%204v3l19-11%208-5h208v-75h-6c-6%200-6%200-4-1v-2l-2%202-4%201h-2l3-2c8-7%2017-21%2013-23v-1l1-13c0-14%200-15-6-17-3-1-12%200-10%202v3l-1-2-2-1-1%202-1%202v2h-3v1c1%201-2%205-4%203l-1%201v1l-1-1-2%201c-1%201-2%203-1%205l-1%205-1%203-1-3c-1-2-1-2-2%202v6l-1%201c-2-2-2%2014%200%2020%202%203%202%203-1%203l-3-1h-1l-2%201-2-1-3-2-3-1-6-3h3l2-1-2-1v-1c1%200%202-1%201-2l-1-4c0-4%200-3-1%201-1%203-2%203-8%201-2%200-2%200%200%201%201%202%201%202-2%202l-4-1%205%202c2%202%205%203%205%202l1%201h-5c-2-1-2%200%201%202%204%204%203%205-3%205-4%200-5%200-6-2-1-1-2-2-3-1-1%200-1%201%201%202l1%201c-3%200-5-1-4-3v-1h-1c0%202-2%202-5%200h1l2-1-1-2h-2v-1h2c1-1%202%200%203%201%200%202%205%201%205-1%201-1%201-1%201%201s4%204%204%202l1-2-1-2-2-1-2-1h-7l-3-3-4-2-2-2-1-2h-1c0%202-2%203-2%201v-4c-1-3%200-4%201-1l2%201%202%201c1%202%204%201%204-1l-2-1-2-2c0-1%201-1%206%201%204%201%204%201%206-1v-7c-1%200-2%201-1%202%200%201-1%201-5-1-10-4-12-4-8%203%202%204%201%205-2%202-1-1-2-3-1-5%200-1%200-2-1-1l-1%202c-2%200-1-3%201-5%203-3%207-11%206-13h2c-1-1%200-3%202-4%203-4%204-7%203-9s-1-10%201-14c1-4%203-6%2022-16l14-10v-3l4-3c19-12%2020-27%203-38l-4-5-2-4c-1-1%200-2%204-6%203-2%204-4%203-5-1%200-1-1%201-3%202-4%201-3-3%201M63%20148c0%203%204%2014%207%2017%203%204%205%205%2011%208%206%202%208%203%207%204v1l2-1h11l4-5%203-7v-1a12889%2012889%200%2001-45-16m88%205c-1%203%200%204%201%202l2-1%203%202v1l5%202a46%2046%200%200110%202l5%203h2l3%201h3c2-1%202-3-1-3l-17-5c-15-5-16-6-16-4m18%2020l-2%201c-2%200-2%200-2%2012l-1%2013c-2%201-3%200-1-1l1-2h-1l-1-3%201-5v-1l-2%201c-1%201-1%201-1-3l-1-7c0-3%200-3-1-1l-2%202c-1%200-3%203-2%204l3-1c2-1%202-1%202%203%200%202-1%203-3%204l-3%202-1-2c0-5%200-5-2-5-2%201-3%201-3-1s-1-2-2%200l-1%201c3-1%202%201-1%202-1%201-2%201-1%202l3-1c1-1%201-1%201%205-1%205%200%206%201%204h1l1-1h6c2%200%202%200%201%201l-4%202-3%202-8%205c-6%203-10%207-6%206h1c-2%202-3%202-10-1-15-6-18-7-17-8%200-2-2-3-4-2v1l1%202c0%201%201%202%205%203l4%202%202%201-1%202-2%206c0%202-1%203-3%204-3%202-5%205-3%204l4-2%201%201c-2%202%203%202%208%200%208-3%209-4%207-5%200-1-2-1-5%201-6%204-7%204-8-1l1-4%201%204c0%204%201%204%203%200%201-4%201-4-1-4v-1l1-2c0-2%201-2%206%200%204%202%205%202%204%205v4l3-1c2-2%204-2%205-1h8c2%200%204%200%206-2l4-2%201-3c0-1%201-3%205-5l5-3v-7c0-6%200-7%201-6l1%202c-2%201-1%203%201%202h2l-2%204c-2%204-2%204%200%204l4-2%202-1%202-2c4-1%206-3%205-9l1-8v-1l-1-3c-1-3-4-6-4-4h-5c-1-1-1%200-1%203%200%204-2%206-2%202%200-3-2-7-2-5m167%2031c-10%206-12%208-12%2013l-1%206v3l1%202v7h3l2-4%204-4c0-2%200-2-4-1-4%203-4%201-1-3s5-5%209-4h8l5-2h5l2%202h9c1-1%200-3-3-4l-2-3c0-3%200-4-2-5s-3-2-3-4c-1-3-1-3-1%200s0%204-2%204c-4-2-6-2-8-1h-1l1-2c2%200%201-5%200-5l-9%205m-98%2032l2%201c2%200%202%201%202%2010v10l-3-1c-5%200-6-5-1-5l4-1h-4c-2%200-3%200-3-2l-2-2-2%201c0%202-1%202-6%200-9-3-8-4-8%2017v21c-1%201%201%201%208%201%208%200%2011-2%203-2l6-1%2019-2%208-1c-1%201-2%202-1%203v3h46v-8c0-7%200-7-2-6l-9-2-6-2c-1%206-3%2010-8%2012-5%203-10%201-5-2h3v1l2-1-1-1v-2c2-1%202-7%201-7l-4%202h-6c-2-1-22%205-24%207s-5%203-5%200l-2-1h-1v-1l-2-1c0-3%205-2%207%200h1l1-2v-2l1-1%201%201c-2%202%201%202%206%201%204-1%207-3%204-3l5-3c7-4%208-5%202-5l-10-1c-6%200-7%200-9%202l-2%202v-13l1-13%203-1-5-1-5%201m-35%2013l3%203c4%202%204%202%201%204-2%201-2%202-2%2015v15l1-14c0-10%201-14%202-15l1%201%201%201c2-2%203%200%202%202l-2%201-1%2011%201%208%202-4v7c2%200%205-8%203-8v-8l-1-4-2%201%201-2c4-3%202-10-4-14-4-3-6-3-6%200m-15%2025l-3%203%203-1h3v5c0%205%200%205%203%205l4-2%201-2%201-4c0-4%200-5-3-6-5-2-6-1-9%202'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"seo":{"src":"/static/7e76a640f9382dc8a36ea033c8346b68/6050d/s3ManagerCover.png"}}},"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":["Svelte","Rust","TS","Tailwind"],"category":"Project","slug":"/s3-manager","id":"fc731126-1fb1-5bd0-9b45-e17990fd8299","title":"S3 Manager","appDescription":"AWS S3 GUI","mailchimp":false,"next":[{"id":"171956d6-d153-5990-8c33-fff8c43dd99d","slug":"/eba-spot","secret":false,"title":"Łeba spot","author":"Luke Celitan","date":"April 27th, 2022","dateForSEO":"2022-04-27T00:00:00.000Z","timeToRead":2,"excerpt":"Seaside bed and breakfast","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\": \"Łeba spot\",\n  \"excerpt\": \"Seaside bed and breakfast\",\n  \"date\": \"2022-04-27T00:00:00.000Z\",\n  \"hero\": \"lebaspot.png\",\n  \"author\": \"Luke Celitan\",\n  \"appDescription\": \"Room reservation\",\n  \"category\": \"Project\",\n  \"tech\": [\"ReactIcon\", \"Nextjs\", \"TS\", \"Tailwind\", \"Postgre\"]\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\": \"uxui\"\n  }, \"Ux/Ui\"), mdx(\"p\", null, \"This website has started out as a custom wordpress theme and wp installation,\\nhowever as the seasons went by, I have decided to move the project to the\\nnext.js installation. It seemed as the right combintion between static pages and\\ndynamic pages that require connection to various 3rd party APIs (like\\nbooking.com). The obvious business requirements was creating a room reservation\\nsystem that will not allow overbooking, double booking and a responsive admin\\npanel so the owners can have control over their reservations whenever they want.\\nThe website also had to contain diffrent languages versions, in order to widen\\nthe audience of this mini hotel. The seo was a also a big factor in this build.\"), mdx(\"p\", null, \"The design changed over the years, but in the end I have decieded upon a subtle\\nelegant look in shades of black, grey and white. Lato (Sans Serif, did you know\\n? \\u201CLato\\u201D means summer in polish) and Cormorant (Serif) fonts are being utilized\\nas the main duo of typography set up. Thankfully owners could come up with Hotel\\npictures that mathed the tone of the website.\"), 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\": \"3576px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"56.56%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAACaklEQVQoz2WSW09TQRSFz7/y0Uef9MVfoNHEmGA0Xkm8BBVJbEjAkEZAYsRLEcGAmqpYykVoK6W0BVooaaUXLbSlBXs75/T2OXNAAT3Jyuy9Z9Y+a+0ZRdM0CoUC1Wp1H5XKLkRcEetByFq5XDY4+XweXfDD32MEQxEquo4iC5o4IBO1JFaR66pm5LqqUq/VaNTqNOoHYNRqf2MaDQPynCKVlEslanvKagKySV3kMjYIgvgfZIO9+M8PZKyU99RVKvruKpXpmmHP2DOs6vuWBXRNp1Qs7Z6VucHZhVIsqRTKOpou5lWtUZX2wJhVvlBEFWRVjKAs7KtiHHWhQs5d14UboUqOTLozbAumktmI82sjRCwcYNE7z4LbhePrJNmtDNuZFMl4lFTyB7lslqxALpelWCzgdLrw+BZZjcXx+JfwBVYJR+Mok1YLCc8AQ09a6etspf3udY4dPcKcy4F95CWW7nbsH97gdjlxOR1MfrGS/Jng5InjNDXfwmy1cfXBQ1puNmMZHEIZftHNcNcl7l87Q09HK/1mE5fPn8bv9fDu9VP6ukzYRgewfbZin5jAPTNOejNJx50L9PSaeT7lps3Uxvvee1htDpTgso+5WTuhgJd7t29wpeksF8+dEgqdyD2/Z47o2gqPu8w86ujkbX8P+Z1t7OMf8S6vMPJpimZTLy3dozwbFQ0L4sn4Q8uEY+vMTE8zaHnF4MAAqc1NMltpZr9NEYlFmRHqpmxjrC750MQlLQSXCK6HSGdyOBdWGJvx4loIiIbiJiORNWKJGP9+uZ0c0WSCVCZ9qC5vdiuXwz3vZH0teGjvNxiUE09nBZK0AAAAAElFTkSuQmCC')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"picture\", {\n    parentName: \"span\"\n  }, \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"/static/a48dcfd942cb7d49bf8d250a154e4fbb/a3bc4/ui1.webp 2500w\", \"/static/a48dcfd942cb7d49bf8d250a154e4fbb/2cf9d/ui1.webp 3576w\"],\n    \"sizes\": \"(max-width: 3576px) 100vw, 3576px\",\n    \"type\": \"image/webp\"\n  }), \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"/static/a48dcfd942cb7d49bf8d250a154e4fbb/412e4/ui1.png 2500w\", \"/static/a48dcfd942cb7d49bf8d250a154e4fbb/4ead0/ui1.png 3576w\"],\n    \"sizes\": \"(max-width: 3576px) 100vw, 3576px\",\n    \"type\": \"image/png\"\n  }), \"\\n          \", mdx(\"img\", {\n    parentName: \"picture\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"src\": \"/static/a48dcfd942cb7d49bf8d250a154e4fbb/4ead0/ui1.png\",\n    \"alt\": \"Website screen\",\n    \"title\": \"Website screen\",\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(UI, {\n    colors: ['#0c0c0c', '#52525b', '#d4d4d8', '#fbfbfb', '#aaa5a5'],\n    primeFontFamily: 'Lato',\n    secondaryFontFamily: 'Cormorant',\n    background: '#FFF',\n    textColor: \"#0c0c0c\",\n    h1: {\n      fontFamily: 'Cormorant',\n      fontWeight: '700',\n      fontSize: '40px',\n      textTransform: 'uppercase',\n      color: '#0c0c0c'\n    },\n    h2: {\n      fontSize: '35px',\n      fontWeight: '700',\n      fontFamily: 'Lato'\n    },\n    body: {\n      fontFamily: 'Lato',\n      color: '#0c0c0c',\n      fontSize: '18px',\n      lineHeight: 1.7\n    },\n    mdxType: \"UI\"\n  }), mdx(\"p\", null, \"I have also decided to inlude current wheater api call so the user can see what\\nhe is actually missing. A fine detail that hopefully users can appreciate. I\\nthink it ties in nicley with the navbar and language picker, making a less\\nborking but yest standard navbar.\"), 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\": \"3542px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"4.760000000000001%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAABCAYAAADeko4lAAAACXBIWXMAABYlAAAWJQFJUiTwAAAALklEQVQI12P4+vXr/1+/fv3/+fMnnMbFRqc/f/7yH6T/3fv3/0+du/z/65ev/wFbjU2G7VESWwAAAABJRU5ErkJggg==')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"picture\", {\n    parentName: \"span\"\n  }, \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"/static/fb5a56c9ab36d963f39263fc543b2f86/a3bc4/ui2.webp 2500w\", \"/static/fb5a56c9ab36d963f39263fc543b2f86/88240/ui2.webp 3542w\"],\n    \"sizes\": \"(max-width: 3542px) 100vw, 3542px\",\n    \"type\": \"image/webp\"\n  }), \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"/static/fb5a56c9ab36d963f39263fc543b2f86/412e4/ui2.png 2500w\", \"/static/fb5a56c9ab36d963f39263fc543b2f86/c81b9/ui2.png 3542w\"],\n    \"sizes\": \"(max-width: 3542px) 100vw, 3542px\",\n    \"type\": \"image/png\"\n  }), \"\\n          \", mdx(\"img\", {\n    parentName: \"picture\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"src\": \"/static/fb5a56c9ab36d963f39263fc543b2f86/c81b9/ui2.png\",\n    \"alt\": \"Nav Bar\",\n    \"title\": \"Nav Bar\",\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(\"p\", null, \"Other non standard but very important elements were the searchbar with filters\\nand reservation calendar picker. The search back was constructed as sticky\\nelement that show it self on scroll back, optimising user room reservation\\nsearch for the user. A custom calendar picker had also to be constructed bin\\norder to show hafl booked days.\"), mdx(\"h2\", {\n    \"id\": \"developent-nextjs-postgres-tailwindcss\"\n  }, \"Developent: next.js, postgres, tailwindcss\"), mdx(\"p\", null, \"Next.js is a framework that allows you to create a single page application. It\\nis a lot more flexible than wordpress that helped me tie custom business rules\\nwith mentioned 3rd api intergartions. For this next.js dynamic and api\\ncapabielities were used, the next.js helps on this end a lot, providing also the\\nin-house image optimalizastions features on the server side.\"), mdx(\"p\", null, \"I have used the postgres database as the main backend database. Its a solid\\nchoice for verstile and scalable sql data storage.\"), mdx(\"p\", null, \"On this project I have used the React and tailwindcss framework to create a\\nresponsive customer website and admin panel. I became quite fond of the\\ntailwindcss framework as it is a great tool for quickly building responisve\\ndesigns and achive great performance on css performance and overall bundle.\\nDefinately a framework I plan to keep on using.\"), mdx(\"p\", null, \"Overall next.js is a great React framework for building a single page\\napplications, however it is not without it faults. Rapid developement of next.js\\ncan bring troubles as core upgrades bring often many breaking changes and other\\nbugs to already established instance.\"), mdx(\"h2\", {\n    \"id\": \"lebaspotcompl-is-a-bed-and-breakfast-property-located-by-the-polish-bałtyk-sea\"\n  }, \"Lebaspot.com.pl is a bed and breakfast property located by the polish ba\\u0142tyk sea.\"), mdx(\"p\", null, \"\\uD83D\\uDC49 \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://lebaspot.com.pl\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"https://lebaspot.com.pl\")));\n}\n;\nMDXContent.isMDXComponent = true;","tech":["ReactIcon","Nextjs","TS","Tailwind","Postgre"],"category":"Project","appDescription":"Room reservation","hero":{"full":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAD6UlEQVQ4y32U61ObVRDG8zfVVlvAcgu3EAh3Ag2QECAQLiEkIRJCIBAu4V7H9oPOVMZxHJXpDGpn/AwtiG3VcVQ6A2IbIpfxG3IL4fLznIS0EVvfmefdPXues+/unndXEQ6HOT4+Rsp4vM4Wv/emfUU84U24zPm/M4qweIVCodfiMjkUurwOvZQxXXF6eop8znn1xPTz83POzs4ETpE8KSNrab+A5MS4JycnKFafPWN8wMf00DC3h0cicsI3yFiflw8/uMvsl3N8PfeAB998y+zsHPfvf8VnM5/wxcwMn9/7mE8/usf46DR3J6f5fXUNxdL8Apnv3ECTnEphmpL85DTU76aSk5BEa30TLqeHwf4RRofH8fT4cFo7sRjqcJmbsdebInpVsRZtrobH3y2j+H5xibyUNMpyVFTk5lORp6E0Jx+z3sT4sJ8+dw/+QT+jIxNC92KpM+G2tNNvs9NjseJsahZOjTRoK/jpyRMUy48WyUlKpigjC60qj6qCErT5JXS5uhnyD9Ln9TI0OMnAwBjmWhPm6lrcLa14rVa6W9pwNjRgN9Rg1ZXzy9PH0QhVSSnCYXbEmbG8ivbGNiamprjz/p1Iqj1945hNVm4VlGE31jJpb6DTUEVdWSU1hUW0aQvxt1Sy/uuPKBbn5ylQZmDS1eAwt+JxuPCJ1Dyd3bzX7sAinJuMzWiy8tFmZzHSXsm4o5bSDCXlIhNNpppCkZ27voznK8Lh0sKCKKialhoDXW0d+D29jHo8eLv78Li8uB1ujMWlFKUrqVLnYK0qpkNE2ayvw2KyUK01YDM14m6uYeXnH1A8FTdTV1pOZ2MLjmYrg+5+hnt9TIhLmPJPMNQ7RJuukvISA7fqfejNIzRaxnC6bos6T9Fk7qXT0oXPYWN15TdZw0WKMzLRF5WiTlWSq8ylwWjDqKvH1W4Tl6DHVKElT1XMlRsaEtJ0ZBe2UlBuR1Nmo7Laia6ikZS3rrL86KFM+SFpb18XdcyiQp1H4tXr3LxyDW1xNVpNKYaiQrqtNqwtHaQrhcOb+aRl60hX1XItsYiULD2q7BKyEhOQf4zi791d1tfWCAY22N7cIvjiBRsCUg88D/BnMMjW1jY7O3+xLRDYCLK+/gcbG1tsBLfFWpwRth3BOTo6iu/laF9GgejTs4jt3x0ev47buehn6Ssyvi5PFtnkEpIgERtXMVs4HN3f399nc3OTQCDArsg0Or4EOUaUkyQWZXTKRHEkPnh4eEj4pcPoMN3b2xPlECmLskg94vBVmv91FH9YflTK0wu7zEquZZQHBwcRXZ6P1DBGjsdJXDSy2PFph4SUjmJBSF4smH8AuRThzksWgcgAAAAASUVORK5CYII=","aspectRatio":1,"src":"/static/55348f15dd0ce417928f7ed656ebfb8f/a1946/lebaspot.png","srcSet":"/static/55348f15dd0ce417928f7ed656ebfb8f/5b37e/lebaspot.png 236w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/49058/lebaspot.png 472w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/a1946/lebaspot.png 944w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/030f1/lebaspot.png 1416w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/75927/lebaspot.png 1888w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/b8151/lebaspot.png 3200w","srcWebp":"/static/55348f15dd0ce417928f7ed656ebfb8f/99fbb/lebaspot.webp","srcSetWebp":"/static/55348f15dd0ce417928f7ed656ebfb8f/77392/lebaspot.webp 236w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/1f177/lebaspot.webp 472w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/99fbb/lebaspot.webp 944w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/4a492/lebaspot.webp 1416w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/b0b8f/lebaspot.webp 1888w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/dae32/lebaspot.webp 3200w","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='M15%20184v98h370V86H15v98'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"regular":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAD6UlEQVQ4y32U61ObVRDG8zfVVlvAcgu3EAh3Ag2QECAQLiEkIRJCIBAu4V7H9oPOVMZxHJXpDGpn/AwtiG3VcVQ6A2IbIpfxG3IL4fLznIS0EVvfmefdPXues+/unndXEQ6HOT4+Rsp4vM4Wv/emfUU84U24zPm/M4qweIVCodfiMjkUurwOvZQxXXF6eop8znn1xPTz83POzs4ETpE8KSNrab+A5MS4JycnKFafPWN8wMf00DC3h0cicsI3yFiflw8/uMvsl3N8PfeAB998y+zsHPfvf8VnM5/wxcwMn9/7mE8/usf46DR3J6f5fXUNxdL8Apnv3ECTnEphmpL85DTU76aSk5BEa30TLqeHwf4RRofH8fT4cFo7sRjqcJmbsdebInpVsRZtrobH3y2j+H5xibyUNMpyVFTk5lORp6E0Jx+z3sT4sJ8+dw/+QT+jIxNC92KpM+G2tNNvs9NjseJsahZOjTRoK/jpyRMUy48WyUlKpigjC60qj6qCErT5JXS5uhnyD9Ln9TI0OMnAwBjmWhPm6lrcLa14rVa6W9pwNjRgN9Rg1ZXzy9PH0QhVSSnCYXbEmbG8ivbGNiamprjz/p1Iqj1945hNVm4VlGE31jJpb6DTUEVdWSU1hUW0aQvxt1Sy/uuPKBbn5ylQZmDS1eAwt+JxuPCJ1Dyd3bzX7sAinJuMzWiy8tFmZzHSXsm4o5bSDCXlIhNNpppCkZ27voznK8Lh0sKCKKialhoDXW0d+D29jHo8eLv78Li8uB1ujMWlFKUrqVLnYK0qpkNE2ayvw2KyUK01YDM14m6uYeXnH1A8FTdTV1pOZ2MLjmYrg+5+hnt9TIhLmPJPMNQ7RJuukvISA7fqfejNIzRaxnC6bos6T9Fk7qXT0oXPYWN15TdZw0WKMzLRF5WiTlWSq8ylwWjDqKvH1W4Tl6DHVKElT1XMlRsaEtJ0ZBe2UlBuR1Nmo7Laia6ikZS3rrL86KFM+SFpb18XdcyiQp1H4tXr3LxyDW1xNVpNKYaiQrqtNqwtHaQrhcOb+aRl60hX1XItsYiULD2q7BKyEhOQf4zi791d1tfWCAY22N7cIvjiBRsCUg88D/BnMMjW1jY7O3+xLRDYCLK+/gcbG1tsBLfFWpwRth3BOTo6iu/laF9GgejTs4jt3x0ev47buehn6Ssyvi5PFtnkEpIgERtXMVs4HN3f399nc3OTQCDArsg0Or4EOUaUkyQWZXTKRHEkPnh4eEj4pcPoMN3b2xPlECmLskg94vBVmv91FH9YflTK0wu7zEquZZQHBwcRXZ6P1DBGjsdJXDSy2PFph4SUjmJBSF4smH8AuRThzksWgcgAAAAASUVORK5CYII=","aspectRatio":1,"src":"/static/55348f15dd0ce417928f7ed656ebfb8f/3ddd4/lebaspot.png","srcSet":"/static/55348f15dd0ce417928f7ed656ebfb8f/078a8/lebaspot.png 163w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/e56da/lebaspot.png 327w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/3ddd4/lebaspot.png 653w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/c5cc7/lebaspot.png 980w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/eebd2/lebaspot.png 1306w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/b8151/lebaspot.png 3200w","srcWebp":"/static/55348f15dd0ce417928f7ed656ebfb8f/0acdf/lebaspot.webp","srcSetWebp":"/static/55348f15dd0ce417928f7ed656ebfb8f/ac59e/lebaspot.webp 163w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/7660b/lebaspot.webp 327w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/0acdf/lebaspot.webp 653w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/75470/lebaspot.webp 980w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/68d47/lebaspot.webp 1306w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/dae32/lebaspot.webp 3200w","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='M15%20184v98h370V86H15v98'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"narrow":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAD6UlEQVQ4y32U61ObVRDG8zfVVlvAcgu3EAh3Ag2QECAQLiEkIRJCIBAu4V7H9oPOVMZxHJXpDGpn/AwtiG3VcVQ6A2IbIpfxG3IL4fLznIS0EVvfmefdPXues+/unndXEQ6HOT4+Rsp4vM4Wv/emfUU84U24zPm/M4qweIVCodfiMjkUurwOvZQxXXF6eop8znn1xPTz83POzs4ETpE8KSNrab+A5MS4JycnKFafPWN8wMf00DC3h0cicsI3yFiflw8/uMvsl3N8PfeAB998y+zsHPfvf8VnM5/wxcwMn9/7mE8/usf46DR3J6f5fXUNxdL8Apnv3ECTnEphmpL85DTU76aSk5BEa30TLqeHwf4RRofH8fT4cFo7sRjqcJmbsdebInpVsRZtrobH3y2j+H5xibyUNMpyVFTk5lORp6E0Jx+z3sT4sJ8+dw/+QT+jIxNC92KpM+G2tNNvs9NjseJsahZOjTRoK/jpyRMUy48WyUlKpigjC60qj6qCErT5JXS5uhnyD9Ln9TI0OMnAwBjmWhPm6lrcLa14rVa6W9pwNjRgN9Rg1ZXzy9PH0QhVSSnCYXbEmbG8ivbGNiamprjz/p1Iqj1945hNVm4VlGE31jJpb6DTUEVdWSU1hUW0aQvxt1Sy/uuPKBbn5ylQZmDS1eAwt+JxuPCJ1Dyd3bzX7sAinJuMzWiy8tFmZzHSXsm4o5bSDCXlIhNNpppCkZ27voznK8Lh0sKCKKialhoDXW0d+D29jHo8eLv78Li8uB1ujMWlFKUrqVLnYK0qpkNE2ayvw2KyUK01YDM14m6uYeXnH1A8FTdTV1pOZ2MLjmYrg+5+hnt9TIhLmPJPMNQ7RJuukvISA7fqfejNIzRaxnC6bos6T9Fk7qXT0oXPYWN15TdZw0WKMzLRF5WiTlWSq8ylwWjDqKvH1W4Tl6DHVKElT1XMlRsaEtJ0ZBe2UlBuR1Nmo7Laia6ikZS3rrL86KFM+SFpb18XdcyiQp1H4tXr3LxyDW1xNVpNKYaiQrqtNqwtHaQrhcOb+aRl60hX1XItsYiULD2q7BKyEhOQf4zi791d1tfWCAY22N7cIvjiBRsCUg88D/BnMMjW1jY7O3+xLRDYCLK+/gcbG1tsBLfFWpwRth3BOTo6iu/laF9GgejTs4jt3x0ev47buehn6Ssyvi5PFtnkEpIgERtXMVs4HN3f399nc3OTQCDArsg0Or4EOUaUkyQWZXTKRHEkPnh4eEj4pcPoMN3b2xPlECmLskg94vBVmv91FH9YflTK0wu7zEquZZQHBwcRXZ6P1DBGjsdJXDSy2PFph4SUjmJBSF4smH8AuRThzksWgcgAAAAASUVORK5CYII=","aspectRatio":1,"src":"/static/55348f15dd0ce417928f7ed656ebfb8f/502b1/lebaspot.png","srcSet":"/static/55348f15dd0ce417928f7ed656ebfb8f/f2e6d/lebaspot.png 114w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/4ddba/lebaspot.png 229w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/502b1/lebaspot.png 457w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/7ddc2/lebaspot.png 686w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/435bf/lebaspot.png 914w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/b8151/lebaspot.png 3200w","srcWebp":"/static/55348f15dd0ce417928f7ed656ebfb8f/15384/lebaspot.webp","srcSetWebp":"/static/55348f15dd0ce417928f7ed656ebfb8f/31fce/lebaspot.webp 114w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/e3e25/lebaspot.webp 229w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/15384/lebaspot.webp 457w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/0258d/lebaspot.webp 686w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/64ea2/lebaspot.webp 914w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/dae32/lebaspot.webp 3200w","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='M15%20184v98h370V86H15v98'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"seo":{"src":"/static/55348f15dd0ce417928f7ed656ebfb8f/6050d/lebaspot.png"}}},{"id":"e581c596-4e2a-5188-8646-6c6b8ca3221a","slug":"/dev-sec-ops","secret":false,"title":"Dev Sec Ops","author":"Luke Celitan","date":"November 1st, 2021","dateForSEO":"2021-11-01T00:00:00.000Z","timeToRead":2,"excerpt":"Secuirty First !","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\": \"Dev Sec Ops\",\n  \"author\": \"Luke Celitan\",\n  \"date\": \"2021-11-01T00:00:00.000Z\",\n  \"hero\": \"./devsecops1.jpg\",\n  \"excerpt\": \"Secuirty First !\",\n  \"category\": \"Post\",\n  \"tech\": [\"TS\", \"Nodejs\", \"ReactIcon\", \"Rust\"]\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\": \"dev-sec-ops\"\n  }, \"Dev Sec Ops\"), mdx(\"h2\", {\n    \"id\": \"introduction\"\n  }, \"Introduction\"), mdx(\"p\", null, \"Around the year 2010 the Software Engineering had been transfomred by the\\ninvention of \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://en.wikipedia.org/wiki/DevOps\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"DevOps methology\"), \". Its main\\nfocus was to bring the Developers (Dev) and server Admins (Ops) to close\\ncooperation in order to ensure that software products get a quick a steady\\nrelease.\"), mdx(\"p\", null, \"DevOps changed the landscape of software creation by providing tools to automate\\nCI/CD pipelines, terraforming or maintaining server and network instances as a\\ncode, procedures and protocols for automating unit and e2e testing. It also gave\\nus the role of DevOps Engineer, a fairly new position in the IT world, that\\nfocuses on the tasks mentioned above.\"), mdx(\"h2\", {\n    \"id\": \"enter-devsecops\"\n  }, \"Enter DevSecOps\"), mdx(\"p\", null, \"Small and big businesses have adopted quickly the DevOps methodology. In 2022\\nDevOps Engineers are essential IT personnel in delivering products / local\\nsoftware instances to its online environments. As these practices became\\nstandard, businesses have switched their focus from delivering fast to trying to\\ndelivering fast but secure software.\"), mdx(\"p\", null, \"Cyber crime is on the steady rise, data breaches, ransomware, phishing, supply\\nattacks, \\u201Cevil competition\\u201D ddos attacks, social engineering attacks, the list\\ngoes on and on. For more stats about cyber crime you can\\n\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://www.comparitech.com/vpn/cybersecurity-cyber-crime-statistics-facts-trends/\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"read this article\"), \".\"), mdx(\"p\", null, \"In the past security teams were mostly reactive and not involved in the\\ndevelopment phase. Security specialists would focus on audits, reports and scans\\non already made electronic products, then they would go back to dev teams or\\nproduct owners for remediation actions. This approach can be very problematic,\\nfeatures or functions based on insecure solutions need time to be rewritten or\\nadjusted, sometimes already paid and delivered products need now additional work\\nin order to comply with security standards.\"), mdx(\"p\", null, \"DevSecOps tries to remediate this problem, by involving the Security team in the\\ndevelopment process. Sometimes this is refereed to as \\u201Cshifting left\\u201D in the\\nindustry. This move tries to shift the responsibility of secure coding into the\\ndeveloper domain by providing necessary tools and procedures to the DevOps\\ncycle.\"), 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\": \"3450px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"69.72%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAIAAACgpqunAAAACXBIWXMAAAsTAAALEwEAmpwYAAACNUlEQVQoz6WT32vTUBTHAyL64F8wRAR/PFREQUFkCIJDcPiwvYgwUIQyK7iBok8ymaAgMpkwFGEodYqiQxCcA0Vx2Ao6V0s3bJf+MGvSm/5Imx/NbZOb5OZ602g3pg8Dz8vNOTfffM/93BOG/EcwoCi9m5mNfknMfI5/+DT3MRLTYZNuuO4axJZt12RNVuuKWhfLqlhWqHDlG8ghDYvgf32L8Re3ZfQTqPHFIoQNmmLs10i2aLxPaHoTezUaLqZ+dF0tVrW6IPDJdJ4HFezY2C8qymI2DwDglgSOL3K8WJFkwzSXxW39o4i6bzCyN/jq3uSs10sZ9U/UO0dQ8KmdrzmEYNvBy227rSO2Ku6DKFl3pnrwYiRw6uX63QPnr9wNXEhuChVOh5vbhu2uMaJ7fgT/AcCkgJ0UEG6pj4ySjksWZSarevDy6Pb9PTtPhqcSBkHayBuN6TNffzfSLMvmCj4UJrMkzs1nQKmKjEZfmOy54aTySgbo3bfAju7rW3YdffxiGjXh8MNvzLHptzGJ5z0oYqnaNEyGAphPZlJZoVISpxbw5qvkwG0SuGZsPFsbmmC7es9t6Dh86Hhoa2eoZ3AcUYgYm8iyfdoCKMcX0myW1xsGzaM50v+cDEziaNqiKe3/5tiTE8GhO/efQQjbXH+f2TCRqumw4U2VDyInQg7IhFhOKy9L8tfYDxMh+mxT1hivHpKVQd0UDbavBJSkJMtluYJUVVUNUqe2ObPGf8Abrb8m9BetIuRKL3suIwAAAABJRU5ErkJggg==')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"picture\", {\n    parentName: \"span\"\n  }, \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"/static/28350f5a7365b0b3fd54cfb4fe820bdd/a3bc4/devsecops-diagram.webp 2500w\", \"/static/28350f5a7365b0b3fd54cfb4fe820bdd/99740/devsecops-diagram.webp 3450w\"],\n    \"sizes\": \"(max-width: 3450px) 100vw, 3450px\",\n    \"type\": \"image/webp\"\n  }), \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"/static/28350f5a7365b0b3fd54cfb4fe820bdd/412e4/devsecops-diagram.png 2500w\", \"/static/28350f5a7365b0b3fd54cfb4fe820bdd/d4b36/devsecops-diagram.png 3450w\"],\n    \"sizes\": \"(max-width: 3450px) 100vw, 3450px\",\n    \"type\": \"image/png\"\n  }), \"\\n          \", mdx(\"img\", {\n    parentName: \"picture\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"src\": \"/static/28350f5a7365b0b3fd54cfb4fe820bdd/d4b36/devsecops-diagram.png\",\n    \"alt\": \"Dev Sec Ops methodology\",\n    \"title\": \"Dev Sec Ops methodology\",\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(\"em\", {\n    parentName: \"p\"\n  }, \"source:\\n\", mdx(\"a\", {\n    parentName: \"em\",\n    \"href\": \"https://www.atlassian.com/pl/devops/devops-tools/devsecops-tools\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"https://www.atlassian.com/pl/devops/devops-tools/devsecops-tools\"))), mdx(\"h2\", {\n    \"id\": \"devsecops-owasp-model\"\n  }, \"DevSecOps OWASP model\"), mdx(\"p\", null, \"In my current position (Dec, 2022) as web application architect and team leader,\\nI have adopted the the DevSecOps model proposed by the OWASP organization\\n\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/OWASP/DevSecOpsGuideline\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"https://github.com/OWASP/DevSecOpsGuideline\")), mdx(\"p\", null, \"The DevSecOps model helps in producing:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"automation to create short feedback loops to developers\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"breaking down the silos between development, security, and operations\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"breaking down security work into small pieces to create flow\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"making decisions based on threat intelligence from operations\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"establishing a culture of security experimentation and learning\")), mdx(\"h2\", {\n    \"id\": \"threat-modeling\"\n  }, \"Threat Modeling\"), mdx(\"p\", null, \"The first step in running a successful DevSecOps model is to do a threat\\nanalysis on the planned developed software. What are the essential points of\\nyour application that need to be protected ? This mental exercise will help you\\ndetermine on which aspects of your software you need to focus on. It will also\\nhelp you plan any remediation steps or procedures that need to be developed in\\norder to minimize damage when things go sideways.\"), mdx(\"p\", null, \"In my opinion it will always look better if some security procedures and\\nemergency plans fail, them have no plans at all.\"), mdx(\"p\", null, \"The most common sensitive points are:\"), mdx(\"h3\", {\n    \"id\": \"data-breach--data-corruption\"\n  }, \"Data breach / Data corruption\"), mdx(\"p\", null, \"Customer or business data deemed sensitive need extra application security\\nfocus. Protecting users data like credit cards, home addresses, emails and\\npasswords are imperative from a business and reputation point of view. Who in\\nthe right state of mind would like to share their private information with an\\namateur or insecure application.\"), mdx(\"p\", null, \"Another huge risk these days in terms of data and system protection is\\nransomware. All systems should have proper back up plans, paying up ransom so\\nthe system can continue to operate\"));\n}\n;\nMDXContent.isMDXComponent = true;","tech":["TS","Nodejs","ReactIcon","Rust"],"category":"Post","appDescription":null,"hero":{"full":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGQABAAIDAAAAAAAAAAAAAAAAAAMEAQIF/8QAFQEBAQAAAAAAAAAAAAAAAAAAAQD/2gAMAwEAAhADEAAAAeRLfwMqIOlcaqK//8QAHBAAAgICAwAAAAAAAAAAAAAAAQIAAxESEyEi/9oACAEBAAEFAijKaqTYSKUgbILTkxK+zf4O7T//xAAWEQADAAAAAAAAAAAAAAAAAAAAARL/2gAIAQMBAT8BlksplM//xAAWEQEBAQAAAAAAAAAAAAAAAAARABD/2gAIAQIBAT8BcIv/xAAfEAACAQQCAwAAAAAAAAAAAAAAARECITFhEyJBUXH/2gAIAQEABj8CuheKfZHGn9O0TsytF4q2NMsZP//EABsQAQADAQEBAQAAAAAAAAAAAAEAESFBURAx/9oACAEBAAE/IXgons6aOwnWl3TBNu9xqUQcch+ISAbgImnOp8n/2gAMAwEAAgADAAAAEDcoAv/EABYRAQEBAAAAAAAAAAAAAAAAAABhAf/aAAgBAwEBPxCOoq6rr//EABcRAAMBAAAAAAAAAAAAAAAAAAARUQH/2gAIAQIBAT8QSjyiQSH/xAAfEAEAAwACAQUAAAAAAAAAAAABABEhMUGhUWFxkfD/2gAIAQEAAT8QIMipjCPV4XYBzR3DxQconzNow2G17Z4lxF51X+oAsjUUX4ho0LC30GWlpg54Z+wT/9k=","aspectRatio":1,"src":"/static/f56e51cac14719be4f33b4f802a1de49/58fe7/devsecops1.jpg","srcSet":"/static/f56e51cac14719be4f33b4f802a1de49/e0f30/devsecops1.jpg 236w,\n/static/f56e51cac14719be4f33b4f802a1de49/86afd/devsecops1.jpg 472w,\n/static/f56e51cac14719be4f33b4f802a1de49/58fe7/devsecops1.jpg 944w,\n/static/f56e51cac14719be4f33b4f802a1de49/0ff54/devsecops1.jpg 1200w","srcWebp":"/static/f56e51cac14719be4f33b4f802a1de49/99fbb/devsecops1.webp","srcSetWebp":"/static/f56e51cac14719be4f33b4f802a1de49/77392/devsecops1.webp 236w,\n/static/f56e51cac14719be4f33b4f802a1de49/1f177/devsecops1.webp 472w,\n/static/f56e51cac14719be4f33b4f802a1de49/99fbb/devsecops1.webp 944w,\n/static/f56e51cac14719be4f33b4f802a1de49/9000d/devsecops1.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%2062v63h3c3%201%204%201%204-12v-11l1-2v-2c2%200%202%202%202%2015v15l10%205%2021%2012c6%206%2010%207%2010%206%200-2%202-1%202%202s7%2011%207%208l1-7v-5l-3-1c-3-1-4-1-4-4s0-4-3-4-3-2%200-2c2%200%203-1%203-4%200-4%200-5%203-5l4%201c1%201%201%200%201-2%200-3-2-6-4-5l-2%203-1%202c-2%200-1-5%201-6%201-2%203-2%205-2%203%201%203%201%203-3v-3c2%200%202%2010%200%2011l-1%203c0%202%200%202%201%201l2-2%202%201v12l-1%209-1-4-1%201c1%204-1%206-2%202-1-1-1%203-1%209%200%208%200%209%201%202%200-8%200-9%203-7%202%202%202%203%202%2011%200%2011%200%2015%203%2016%203%200%203%200%203-12%201-15%202-15%203%200v12h3l12%202%2010%201h10l9-1v-2c-2-1-2-2-1-6l1-5v-7l-2-2h2v-2c-2-2-3-4%200-2%201%201%201%201%201-1l-1-2v-2l-1-6c-1-3-1-3%201-3%201%200%202-1%202-3l-1-2-1-1c-1-1-2-2-7-2-6-1-6-1-2-6l3-4%2010%202%2014%201%204%201-4%204-5%203c-2-2-3%201-3%207%201%205%201%205%202%203s1-2%201%200v14h-1c-2-2-3%200-3%208%200%207%201%208%202%207%203-1%206-1%2021%201l15%202%206-3c6-3%2014-4%2019-1%201%200%203-2%205-7%204-8%2014-21%2017-22l5-3%2010-4%209-5%202-3h-2l-37-8c-1%200%201-3%205-6l4-3%2019%204%2020%205c2%200%202%200%202-3l1-2v3l2%203%201-3c0-2%200-3%201-2l1%203v2c2%200%202-1%202-3l1-3%201%202c0%202%201%202%204%200s6-2%2011-1c3%200%204%202%201%202l-3%201%202%201c2-1%202%200%202%205l2%202c2%201%202%201%202-1%200-5%203-16%208-25a147%20147%200%2001108-76l1%2030v31l-3%201a247%20247%200%2000-32%209c-2%200-2%200-1%202v1c-1%200-2%200-1-1l-2-1-3%201v2c1%201%200%202-2%201l-1%201h-2l-2%201v1l-5%202c-4%202-4%202-2%202h3l2-1%203-2c1%200%203%205%201%206v3c0%203-18%2011-19%208l-2-2-1%201c3%204-8%209-11%206-2-1-2-1-2%201%201%202%200%202-4%204l-3%203%209-4%203-1%2012-5%202-1%2010-3%209-2%201-2-1-3-1-6c0-4%201-4%203-5l7-2h6l1%201v-1l2-2c3-1%205-1%205%202l1%201v-2l1-3%201%202c-1%202%200%202%202%202%201%200%202%200%201-2l-1-1-1-1%2011-3c2%200%200%204-2%204l-1%201v2l-1%201h-1l-3%202c-2%200-2%200%200%201l-9%204-12%204v6l1-3c1-2%205-5%208-4h1l9-2c2%201%201%203-2%204l-3%201%208-1%207-1c-1%200-5%2012-4%2013l-4%202c-5%201-6%203-6%2012l-1%203-4%203c-2%203-4%204-9%205-6%201-7%202-7%203l-1%204c-3%203-1%203%207%200l5-1h-5c-7%201-4-1%204-2%206-1%207-1%206-3l1-2c3%202%201%205-3%206l-4%201h5c3%200%204%200%203%201h-3v2l-1%202v-1l-1-1-2%202c0%203%200%203-1%200s-2-3-5-2l-3%203-2%204c-1%201-1%201%205%201h5l-1%201v1c-2%201-2%201-1%202l-4%202c-8%202-10%203-8%205%203%202%2028-3%2029-6%201-2%202-2%209-4%205%200%205-2%205%2039v35h-14v7l-1%207c-1%200-2-10-1-25%200-8%200-8-2-7h-4c0-1%201-2%203-2h3v-13h-5a454%20454%200%2000-13%200c-1-2%200-3%2010-3h5l-1%201c4%202%204%201%204-3v-4l-10%201-11%201-1%2025-1%2020c-1-4-1-4-1%203l1%207h6l7%201h-8l-9-1c-1-1-1%200-1%204%200%208%201%208%2014%207l10%201v1c2%200%202%201%202%203%200%203%200%203-2%202h-1c1%202%200%202-2%202s-3%200-2%201l2%201-2%201c-1-1-2%200-2%201-1%202-3%203-3%200l-1%201v2l-14%201c-14%200-15%200-15-2h-1c-1%202-3%202-10%202-10%200-10%200-7-5%202-3%202-3%203-1s1%202%203%200l2-4%202-3%201-1h-4l-1%202c-3%200-6%203-8%208l-1%204h-11l-19-2c-11-1-16-1-9%201%204%201%203%201-8%201l-13-1-11-3-1-1h-5c0%201%204%203%2010%204%205%201%204%201-6%201l-15-1h-4l-9%201c-10%200-10-1-1-2%209%200%207-1-2-1-7%200-8%200-8%202v1l-1-1-11-1-59%202H87l1-2c0-3%200-3-3-3s-3%200-2%203l1%202h-9c-5%200-9%200-8-1s3-18%201-18l-1%204c-1%203-1%204-4%204-2%200-3%200-3-2-1-1-1-1-1%201s1%202%203%202%203%200%202%201l1%203c1%201%201%201-3%201h-5v-30H39v31l6-1%2014%201%208%201-4%201-15%202H37v-34h-3c-2%200-2%200-1-1l4-1h2l-1-1-1-34v-34l-4%201c-3%202-4%202-4%201%201-2-3-3-5-2-1%202-2%2024-1%2026v3c0%203-1%203-5%202-12-1-11%200-11-7%200-5%200-6-1-3l-1%202-3-2c-2-1-2%200-2%2079v80l3-1c3%200%203%201%200%202l-3%201v37h6c7%200%209-1%209-3%200-3%204-5%207-4l8%201h6l-3-2-3-1h3c5%201%2011%200%2014-3%204-3%204-1%200%203-2%203-8%206-11%206l-4%202c-2%201%201%201%2027%201h29l1-3%204-3h3l-3-1c-2-2-3-2-3%200h-2c-1-3%202-4%206-2%202%202%204%202%209%202h7l-1-2-1-6v-4l1%204%201%203c0-3%202%201%202%205%200%205%201%207%207%207h4l-5-7a3545%203545%200%2000-22-32l30-1%2030%201%206%204c5%205%208%206%206%202l2-1%209-2%204-1-12%201c-2%200-3%200-2-1s16-4%2017-2h14l10-1%206%204%206%206%201%201%2013%209c0%201-8%203-36%208-14%203-16%204-16%205l2%203c2%200%202%200%201%201-2%201-2%201%201%201l5%201%204%201c3%200%203%200%202-1v-2l2%202c1%201%2028%202%2028%200%200-1-3-2-7-1-6%201-7%201-7-3%200-1%200-2-1-1%200%203-1%202-5-1-3-4-3-4-1-4%204-1%205-1%206%202%201%202%201%202%206%202%205-1%205-1%208%202l3%204%206%201h6l-2-2c-3-4%200-4%205-1l4%203h151l-1-137V125l-4%201h-3l4-2h4V0H0v62m243%2077c-5%206-8%2017-6%2025l1%204v-5c0-5%202-5%203-1%201%208%203%2012%204%2012l1%201c-1%201%202%205%204%205l3-3c8-8%207-29%200-38-4-4-6-4-10%200m42%202l-3%203v1h1l1%201-1%201-1%207-1%207-1-4c0-2%200-3-4-3h-5c-1%200-2%202-2%207l-3%2013c-4%207-4%206%201%206%204-1%204%200%201%204-3%202-4%202-9%202-16%200-20-2-24-11l-2-2-1%202c-2-1-3%200-2%204%202%206%202%207%205%209%202%201%201%201-3%202l-8%202c-2%200-2%200%200%202s2%202%209%201l12-2c3%200%203%200%203-3%200-5%202-5%202-1v4h6l2-1%201%201%205%201h7l2%201%201%201h3l2%201-1%201c-1%200-1%201%201%201%201%201%201%201-1%201l-2-1h-36l17%202%2021%202c5%200%205%200%205-2s-1-3-2-3l1-1%201-1v-3l-1-2c1-1%200-1-2-1l-3-1h4c3%200%203%201%203%202l1%202%201-1v-1l1%202%201%201-1%201-2%201h2c2%200%202%200%202%202v1l1%201%202%203c3%202%201%203-3%201-2-1-4%200-5%201l-5%201v-1l-18-2-22-1%206%201c5%200%206%200%203%201l-4%201%205%205%205%205v-4l1-4c1-1%201%209%201%2028l1%2038%201%204h-7l-5%201a1508%201508%200%200124%204c4%200%204%200%204-3%200-2-1-3-2-3l-2-1h2c2%200%203-6%201-6l-4-1-1%206v6l-1-7v-6l7%201h7v-53h-7c-5%200-6%200-4-1h-5c-4%200-4%200-4%204%200%205%203%2012%207%2018l3%204%204%204c2%201%203%205%201%205s-1%202%201%202c1%201%201%201-1%201-1%201-2%200-2-1%200-2-3%202-3%205%200%201%200%202-1%201-1-2-3-1-3%203l-1%204-2-3-1-3v3c0%202%200%202-1%201-1-2-1-1-1%204a901%20901%200%2001-1-54c-1-3%200-3%209-4a462%20462%200%200130%200l-1%202-19%203c8%200%208-1%208%2029v27h3c10%202%2011%202%2015-2%205-5%209-6%2029-7%2019-1%2019-1%2018-7%200-4%200-4-5-4l-10-1h5l10-1-5-1h-7l6-1h6v-34l-6-2-15-6-11-4a504%20504%200%200011-4l4-1h-5l-4%201-6%201-6%201c-2%200-2%200-1-1l5-2%204-1h4l18-3%2021-3h14c1%202%200%203-3%203l-2%201-6%201-9%201c-1%201%200%201%205%201a975%20975%200%2000-6%204l-1%201%2019-1h6v-8c0-7%200-8-2-8a480%20480%200%2001-45%207%202717%202717%200%2001-38%204c0-3%201-4%205-4%203%200%203-1-1-5-8-9-14-20-15-30v-16l-1%203M1%20143l3%203c24%205%2054%2021%2061%2032l3%203c0-8-22-24-44-32l-23-6m83%205c-3%200-4%202-3%205%200%202%200%202-1%201h-1l3%205%203%203%202-2%202-1c1%201%203-2%203-5%200-1%200-2%201-1l1-1-1-1-4-2-3-2-2%201m-83%202c0%201%201%202%203%202l4%201%2012%204c15%205%2025%2010%2030%2016%203%203%205%205%204%206h2c-1%201%202%207%204%207%201%201%201%201-1%201-2%201-2%200-4-2%200-2-3-4-5-6-11-6-49-17-49-13l4%201%205%202%203%201c5%200%2024%206%2028%208a84%2084%200%200117%2012c1%201%201%201-1%201l-16-4-2%201%204%201%204%202c1%201-4%203-6%202s-2%200-2%2010v11l3%201%207%205%203%203v-4c0-5%202-15%205-21v-4l1-1%203%203c1%202%201%202%201%200l1-2v-1l-3-2c-1-3-1-3%203-4%202-1%203-1%203%201v4c1%202%202-3%201-7-3-11-27-25-52-32l-14-3m162%2047c-5%203-7%2012-3%2012v1l-2%201h2v1l-2%201h1l1%201v1a516%20516%200%200012%203l2%202v-2c0-2%200-2%201-1h1c0-3-6-9-8-7h-3v-1l1-3c0-3%200-4-2-4s-1-3%202-4c3-2%201-2-3-1m30%201l-5%201%204%201c2-1%203%200%203%201l7%201c6%200%206%200%200%201-4%201-6%203-3%203%201%200%202%201%201%202l-2%201c-2%200-4%202-2%203l7%201c4%200%204%200%202%201l-3%201%202%201c2%201%202%201%201%202v1c1%200%203%206%203%2013l-1%204c0-4-7-4-8%200-1%202%200%202%203%202l4%201-5%201c-5-1-7%200-7%203%200%202%201%202%205%202h6l-5%201c-5%200-6%200-6%202h3c1-1%201-1%201%201s-1%202-4%202c-4-1-5%200-2%202h4c4%200%203%203-1%203l-4%201h9v-3c1-4%201-4%204-3v1l-2%202%202%201%201%201%201%202v2c-1%201-1%203%201%203v-1c-1-2%203-2%209-1l3%201-3%201h1l2%202%202%202-1%201c-2%201-2%201%200%201%204%200%206-5%202-6h3l5-1c1-2%204-2%204-1l-1%202h-2v4l-1%201%202%201%201-1v-1c1-1%201%200%201%201l-2%202%203%201c5%202%207%201%207-2-1-1%200-2%201-2l1%204c0%202%200%203%202%203l1-6c0-4%200-5-1-4-3%202-6%200-5-2%201-3%206-3%206%200h1c2-2%203-1%202%201%200%202%200%202%202%202s2%200%202-25c0-13%200-24-1-23%200%202-1%202-4-1-4-4-4-4-10-4-11%200-22-4-31-11l-7-4-8%201m-130%209c0%207-1%2013-3%2013l-1-3-1%206c0%209%200%2010%203%2015l3%206c0%206%207%203%2011-4%203-6%205-12%203-13-1-1-1%200-1%203%200%206-9%2014-9%207%200-2%200-2-1%201-2%205-3%204-3-3v-8c-1%200%205-4%208-4%202%200%202%200%201-1l-2-1-3%201h-3l1-1%201-1-1-2v-1c1%200%201-2-1-4-1-2-1-2%201-2v-2l-1-1-1-1v-4l-1-2v6m86%203c-3%203-5%2010-5%2018-1%2016%206%2029%2010%2019%201-3%202-4%203-2l-4%207c-2%201%201%202%203%201v-1c-1-1%200-1%202-1l4%201c1%201%203%200%203-1s-1-2-3-2l-1-2v-3c-2-1-8-2-8%200l-2%201c-4%200-5-4-6-13%200-7%201-15%203-15l1-1%203-1c3%200%204-1%204-3%200-3-3-4-7-2m-38%202c-4%200-4%204%200%204l4%201c2%200%202%200%202-2%200-4%202%202%202%208v4c-1-3-1-3-1-1l-1%206c0%203%200%203%201%202h1l1%201%201-1%202-3%201-3-2-1-1-11c-1-5-2-5-10-4m66%2016l-1%208-1%203v-3l-1-3c-2%200-2%202-2%206l-2%201-1%201c0%201%203%200%205-2h1c0%202-2%204-5%204-1%200-2%201-2%203v3l1%205v5l1-3c0-2%201-3%203-4l3-1h-6l2-2c3-4%206-14%206-21l-1-5v5m123-3c-1%202-1%203%201%205l4%207%203%203%203%201c1%201%200%202-5%202-8%200-7%201%202%201%208%200%2012-1%208-3l-2-1c-3%200-2-1%201-1l3-1-6-1c-5%201-5%201-4-1%202-1%200-6-4-11-3-3-3-3-4%200M39%20238v11h19c0-1-3-8-8-15-4-7-5-8-8-8l-3%201v11m291-11l-2%201-3%201%203%201c2%200%203%201%201%204%200%201-1%202-3%202-3%200-4%201-4%202-1%202-1%202%201%202l7%201-5%201c-3%200-3%200-3%202%200%203%200%203%205%203%202%200%204%200%203-1l-2-1c-4%200-1-1%204-2%206%200%207-1%207-3h-1c-1%202-7%202-7%200l-2-1c-1%200-1-1%201-2%203-1%203-1%202-2s-1-1%201-1%203-3%201-4c-3-1-2-3%200-3%202-1%202-1-1-1l-3%201M94%20241l1%207c0%204%200%204%203%204l3-2c0-2-1-2-3-1-1%201-1%201-1-3%200-5%201-5%203-5s3%200%203%205v6h7c9%200%2010-1%209-3-1-1-1-2%201-3l1-4c0-2%200-2%201%201l1%202%201%202v4l2-1%203-2c2%200%202%200%201%201-3%200-2%202%200%203l2-1c-1-2%202-4%206-4%205%200%206%200%204-5l-1-3h-24c-23%200-24%200-23%202m194%2031c-1%205-1%206%201%206l1%201h-2l-1%201%205%203c4%201%204%201%204-1l2-4-2-2-1-2h2c1%201%204%200%203-1l-12-1M16%20316v8c0%205%201%206%203%206%207%201%2011-8%206-13-2-2-8-3-9-1m67%201c-3%203-3%207%200%2010%204%205%2010%202%2010-4%200-7-6-10-10-6m15%202c-2%200-2%201-2%208l1%207%201-2c0-2%200-3%201-2%205%201%209-9%204-11l-2-1-3%201m-41%2042l6%2014c6%2012%209%2015%209%2010%200-2%203-1%205%203l3%205%202%204%201%201%201-1h1l1-4-4-8-4-9-2-5c-1-4-1-4%202-4%202%200%203%200%203-2h-4c-3%200-4%200-3-1l5-1c4%200%208-1%206-2H57m75%202c-10%202-9%201-9%2010%200%206%200%208%202%208l1-1%202-2%201%202v2l2-3%202-4%201-4%202-6c2-3%202-3-4-2m76%207c1%205%206%2010%2010%2010l2-1v-4c0-2-1-3-5-6-7-5-7-5-7%201m-20%201h-12c1%202-2%203-3%201-2-1-4-2-4%200%200%201%2017%2014%2019%2014v-2c-3-2-1-3%201%200h8c7-1%208-2%206-4-3-2-2-5%200-5s2%200-2-3l-4-3-9%202m-35%201l-6%201c-4%200-4%200-4%203%201%203%200%203-3-1-5-7-6%200-1%2017l2%208h12l-7-8c-9-10-10-12-8-13l4%201c2%202%206%202%207%200l-1-2c-2-1%201-3%205-4l4-2h-4'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"regular":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGQABAAIDAAAAAAAAAAAAAAAAAAMEAQIF/8QAFQEBAQAAAAAAAAAAAAAAAAAAAQD/2gAMAwEAAhADEAAAAeRLfwMqIOlcaqK//8QAHBAAAgICAwAAAAAAAAAAAAAAAQIAAxESEyEi/9oACAEBAAEFAijKaqTYSKUgbILTkxK+zf4O7T//xAAWEQADAAAAAAAAAAAAAAAAAAAAARL/2gAIAQMBAT8BlksplM//xAAWEQEBAQAAAAAAAAAAAAAAAAARABD/2gAIAQIBAT8BcIv/xAAfEAACAQQCAwAAAAAAAAAAAAAAARECITFhEyJBUXH/2gAIAQEABj8CuheKfZHGn9O0TsytF4q2NMsZP//EABsQAQADAQEBAQAAAAAAAAAAAAEAESFBURAx/9oACAEBAAE/IXgons6aOwnWl3TBNu9xqUQcch+ISAbgImnOp8n/2gAMAwEAAgADAAAAEDcoAv/EABYRAQEBAAAAAAAAAAAAAAAAAABhAf/aAAgBAwEBPxCOoq6rr//EABcRAAMBAAAAAAAAAAAAAAAAAAARUQH/2gAIAQIBAT8QSjyiQSH/xAAfEAEAAwACAQUAAAAAAAAAAAABABEhMUGhUWFxkfD/2gAIAQEAAT8QIMipjCPV4XYBzR3DxQconzNow2G17Z4lxF51X+oAsjUUX4ho0LC30GWlpg54Z+wT/9k=","aspectRatio":1,"src":"/static/f56e51cac14719be4f33b4f802a1de49/1dc0b/devsecops1.jpg","srcSet":"/static/f56e51cac14719be4f33b4f802a1de49/3a5ce/devsecops1.jpg 163w,\n/static/f56e51cac14719be4f33b4f802a1de49/05730/devsecops1.jpg 327w,\n/static/f56e51cac14719be4f33b4f802a1de49/1dc0b/devsecops1.jpg 653w,\n/static/f56e51cac14719be4f33b4f802a1de49/f72c7/devsecops1.jpg 980w,\n/static/f56e51cac14719be4f33b4f802a1de49/0ff54/devsecops1.jpg 1200w","srcWebp":"/static/f56e51cac14719be4f33b4f802a1de49/0acdf/devsecops1.webp","srcSetWebp":"/static/f56e51cac14719be4f33b4f802a1de49/ac59e/devsecops1.webp 163w,\n/static/f56e51cac14719be4f33b4f802a1de49/7660b/devsecops1.webp 327w,\n/static/f56e51cac14719be4f33b4f802a1de49/0acdf/devsecops1.webp 653w,\n/static/f56e51cac14719be4f33b4f802a1de49/75470/devsecops1.webp 980w,\n/static/f56e51cac14719be4f33b4f802a1de49/9000d/devsecops1.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%2062v63h3c3%201%204%201%204-12v-11l1-2v-2c2%200%202%202%202%2015v15l10%205%2021%2012c6%206%2010%207%2010%206%200-2%202-1%202%202s7%2011%207%208l1-7v-5l-3-1c-3-1-4-1-4-4s0-4-3-4-3-2%200-2c2%200%203-1%203-4%200-4%200-5%203-5l4%201c1%201%201%200%201-2%200-3-2-6-4-5l-2%203-1%202c-2%200-1-5%201-6%201-2%203-2%205-2%203%201%203%201%203-3v-3c2%200%202%2010%200%2011l-1%203c0%202%200%202%201%201l2-2%202%201v12l-1%209-1-4-1%201c1%204-1%206-2%202-1-1-1%203-1%209%200%208%200%209%201%202%200-8%200-9%203-7%202%202%202%203%202%2011%200%2011%200%2015%203%2016%203%200%203%200%203-12%201-15%202-15%203%200v12h3l12%202%2010%201h10l9-1v-2c-2-1-2-2-1-6l1-5v-7l-2-2h2v-2c-2-2-3-4%200-2%201%201%201%201%201-1l-1-2v-2l-1-6c-1-3-1-3%201-3%201%200%202-1%202-3l-1-2-1-1c-1-1-2-2-7-2-6-1-6-1-2-6l3-4%2010%202%2014%201%204%201-4%204-5%203c-2-2-3%201-3%207%201%205%201%205%202%203s1-2%201%200v14h-1c-2-2-3%200-3%208%200%207%201%208%202%207%203-1%206-1%2021%201l15%202%206-3c6-3%2014-4%2019-1%201%200%203-2%205-7%204-8%2014-21%2017-22l5-3%2010-4%209-5%202-3h-2l-37-8c-1%200%201-3%205-6l4-3%2019%204%2020%205c2%200%202%200%202-3l1-2v3l2%203%201-3c0-2%200-3%201-2l1%203v2c2%200%202-1%202-3l1-3%201%202c0%202%201%202%204%200s6-2%2011-1c3%200%204%202%201%202l-3%201%202%201c2-1%202%200%202%205l2%202c2%201%202%201%202-1%200-5%203-16%208-25a147%20147%200%2001108-76l1%2030v31l-3%201a247%20247%200%2000-32%209c-2%200-2%200-1%202v1c-1%200-2%200-1-1l-2-1-3%201v2c1%201%200%202-2%201l-1%201h-2l-2%201v1l-5%202c-4%202-4%202-2%202h3l2-1%203-2c1%200%203%205%201%206v3c0%203-18%2011-19%208l-2-2-1%201c3%204-8%209-11%206-2-1-2-1-2%201%201%202%200%202-4%204l-3%203%209-4%203-1%2012-5%202-1%2010-3%209-2%201-2-1-3-1-6c0-4%201-4%203-5l7-2h6l1%201v-1l2-2c3-1%205-1%205%202l1%201v-2l1-3%201%202c-1%202%200%202%202%202%201%200%202%200%201-2l-1-1-1-1%2011-3c2%200%200%204-2%204l-1%201v2l-1%201h-1l-3%202c-2%200-2%200%200%201l-9%204-12%204v6l1-3c1-2%205-5%208-4h1l9-2c2%201%201%203-2%204l-3%201%208-1%207-1c-1%200-5%2012-4%2013l-4%202c-5%201-6%203-6%2012l-1%203-4%203c-2%203-4%204-9%205-6%201-7%202-7%203l-1%204c-3%203-1%203%207%200l5-1h-5c-7%201-4-1%204-2%206-1%207-1%206-3l1-2c3%202%201%205-3%206l-4%201h5c3%200%204%200%203%201h-3v2l-1%202v-1l-1-1-2%202c0%203%200%203-1%200s-2-3-5-2l-3%203-2%204c-1%201-1%201%205%201h5l-1%201v1c-2%201-2%201-1%202l-4%202c-8%202-10%203-8%205%203%202%2028-3%2029-6%201-2%202-2%209-4%205%200%205-2%205%2039v35h-14v7l-1%207c-1%200-2-10-1-25%200-8%200-8-2-7h-4c0-1%201-2%203-2h3v-13h-5a454%20454%200%2000-13%200c-1-2%200-3%2010-3h5l-1%201c4%202%204%201%204-3v-4l-10%201-11%201-1%2025-1%2020c-1-4-1-4-1%203l1%207h6l7%201h-8l-9-1c-1-1-1%200-1%204%200%208%201%208%2014%207l10%201v1c2%200%202%201%202%203%200%203%200%203-2%202h-1c1%202%200%202-2%202s-3%200-2%201l2%201-2%201c-1-1-2%200-2%201-1%202-3%203-3%200l-1%201v2l-14%201c-14%200-15%200-15-2h-1c-1%202-3%202-10%202-10%200-10%200-7-5%202-3%202-3%203-1s1%202%203%200l2-4%202-3%201-1h-4l-1%202c-3%200-6%203-8%208l-1%204h-11l-19-2c-11-1-16-1-9%201%204%201%203%201-8%201l-13-1-11-3-1-1h-5c0%201%204%203%2010%204%205%201%204%201-6%201l-15-1h-4l-9%201c-10%200-10-1-1-2%209%200%207-1-2-1-7%200-8%200-8%202v1l-1-1-11-1-59%202H87l1-2c0-3%200-3-3-3s-3%200-2%203l1%202h-9c-5%200-9%200-8-1s3-18%201-18l-1%204c-1%203-1%204-4%204-2%200-3%200-3-2-1-1-1-1-1%201s1%202%203%202%203%200%202%201l1%203c1%201%201%201-3%201h-5v-30H39v31l6-1%2014%201%208%201-4%201-15%202H37v-34h-3c-2%200-2%200-1-1l4-1h2l-1-1-1-34v-34l-4%201c-3%202-4%202-4%201%201-2-3-3-5-2-1%202-2%2024-1%2026v3c0%203-1%203-5%202-12-1-11%200-11-7%200-5%200-6-1-3l-1%202-3-2c-2-1-2%200-2%2079v80l3-1c3%200%203%201%200%202l-3%201v37h6c7%200%209-1%209-3%200-3%204-5%207-4l8%201h6l-3-2-3-1h3c5%201%2011%200%2014-3%204-3%204-1%200%203-2%203-8%206-11%206l-4%202c-2%201%201%201%2027%201h29l1-3%204-3h3l-3-1c-2-2-3-2-3%200h-2c-1-3%202-4%206-2%202%202%204%202%209%202h7l-1-2-1-6v-4l1%204%201%203c0-3%202%201%202%205%200%205%201%207%207%207h4l-5-7a3545%203545%200%2000-22-32l30-1%2030%201%206%204c5%205%208%206%206%202l2-1%209-2%204-1-12%201c-2%200-3%200-2-1s16-4%2017-2h14l10-1%206%204%206%206%201%201%2013%209c0%201-8%203-36%208-14%203-16%204-16%205l2%203c2%200%202%200%201%201-2%201-2%201%201%201l5%201%204%201c3%200%203%200%202-1v-2l2%202c1%201%2028%202%2028%200%200-1-3-2-7-1-6%201-7%201-7-3%200-1%200-2-1-1%200%203-1%202-5-1-3-4-3-4-1-4%204-1%205-1%206%202%201%202%201%202%206%202%205-1%205-1%208%202l3%204%206%201h6l-2-2c-3-4%200-4%205-1l4%203h151l-1-137V125l-4%201h-3l4-2h4V0H0v62m243%2077c-5%206-8%2017-6%2025l1%204v-5c0-5%202-5%203-1%201%208%203%2012%204%2012l1%201c-1%201%202%205%204%205l3-3c8-8%207-29%200-38-4-4-6-4-10%200m42%202l-3%203v1h1l1%201-1%201-1%207-1%207-1-4c0-2%200-3-4-3h-5c-1%200-2%202-2%207l-3%2013c-4%207-4%206%201%206%204-1%204%200%201%204-3%202-4%202-9%202-16%200-20-2-24-11l-2-2-1%202c-2-1-3%200-2%204%202%206%202%207%205%209%202%201%201%201-3%202l-8%202c-2%200-2%200%200%202s2%202%209%201l12-2c3%200%203%200%203-3%200-5%202-5%202-1v4h6l2-1%201%201%205%201h7l2%201%201%201h3l2%201-1%201c-1%200-1%201%201%201%201%201%201%201-1%201l-2-1h-36l17%202%2021%202c5%200%205%200%205-2s-1-3-2-3l1-1%201-1v-3l-1-2c1-1%200-1-2-1l-3-1h4c3%200%203%201%203%202l1%202%201-1v-1l1%202%201%201-1%201-2%201h2c2%200%202%200%202%202v1l1%201%202%203c3%202%201%203-3%201-2-1-4%200-5%201l-5%201v-1l-18-2-22-1%206%201c5%200%206%200%203%201l-4%201%205%205%205%205v-4l1-4c1-1%201%209%201%2028l1%2038%201%204h-7l-5%201a1508%201508%200%200124%204c4%200%204%200%204-3%200-2-1-3-2-3l-2-1h2c2%200%203-6%201-6l-4-1-1%206v6l-1-7v-6l7%201h7v-53h-7c-5%200-6%200-4-1h-5c-4%200-4%200-4%204%200%205%203%2012%207%2018l3%204%204%204c2%201%203%205%201%205s-1%202%201%202c1%201%201%201-1%201-1%201-2%200-2-1%200-2-3%202-3%205%200%201%200%202-1%201-1-2-3-1-3%203l-1%204-2-3-1-3v3c0%202%200%202-1%201-1-2-1-1-1%204a901%20901%200%2001-1-54c-1-3%200-3%209-4a462%20462%200%200130%200l-1%202-19%203c8%200%208-1%208%2029v27h3c10%202%2011%202%2015-2%205-5%209-6%2029-7%2019-1%2019-1%2018-7%200-4%200-4-5-4l-10-1h5l10-1-5-1h-7l6-1h6v-34l-6-2-15-6-11-4a504%20504%200%200011-4l4-1h-5l-4%201-6%201-6%201c-2%200-2%200-1-1l5-2%204-1h4l18-3%2021-3h14c1%202%200%203-3%203l-2%201-6%201-9%201c-1%201%200%201%205%201a975%20975%200%2000-6%204l-1%201%2019-1h6v-8c0-7%200-8-2-8a480%20480%200%2001-45%207%202717%202717%200%2001-38%204c0-3%201-4%205-4%203%200%203-1-1-5-8-9-14-20-15-30v-16l-1%203M1%20143l3%203c24%205%2054%2021%2061%2032l3%203c0-8-22-24-44-32l-23-6m83%205c-3%200-4%202-3%205%200%202%200%202-1%201h-1l3%205%203%203%202-2%202-1c1%201%203-2%203-5%200-1%200-2%201-1l1-1-1-1-4-2-3-2-2%201m-83%202c0%201%201%202%203%202l4%201%2012%204c15%205%2025%2010%2030%2016%203%203%205%205%204%206h2c-1%201%202%207%204%207%201%201%201%201-1%201-2%201-2%200-4-2%200-2-3-4-5-6-11-6-49-17-49-13l4%201%205%202%203%201c5%200%2024%206%2028%208a84%2084%200%200117%2012c1%201%201%201-1%201l-16-4-2%201%204%201%204%202c1%201-4%203-6%202s-2%200-2%2010v11l3%201%207%205%203%203v-4c0-5%202-15%205-21v-4l1-1%203%203c1%202%201%202%201%200l1-2v-1l-3-2c-1-3-1-3%203-4%202-1%203-1%203%201v4c1%202%202-3%201-7-3-11-27-25-52-32l-14-3m162%2047c-5%203-7%2012-3%2012v1l-2%201h2v1l-2%201h1l1%201v1a516%20516%200%200012%203l2%202v-2c0-2%200-2%201-1h1c0-3-6-9-8-7h-3v-1l1-3c0-3%200-4-2-4s-1-3%202-4c3-2%201-2-3-1m30%201l-5%201%204%201c2-1%203%200%203%201l7%201c6%200%206%200%200%201-4%201-6%203-3%203%201%200%202%201%201%202l-2%201c-2%200-4%202-2%203l7%201c4%200%204%200%202%201l-3%201%202%201c2%201%202%201%201%202v1c1%200%203%206%203%2013l-1%204c0-4-7-4-8%200-1%202%200%202%203%202l4%201-5%201c-5-1-7%200-7%203%200%202%201%202%205%202h6l-5%201c-5%200-6%200-6%202h3c1-1%201-1%201%201s-1%202-4%202c-4-1-5%200-2%202h4c4%200%203%203-1%203l-4%201h9v-3c1-4%201-4%204-3v1l-2%202%202%201%201%201%201%202v2c-1%201-1%203%201%203v-1c-1-2%203-2%209-1l3%201-3%201h1l2%202%202%202-1%201c-2%201-2%201%200%201%204%200%206-5%202-6h3l5-1c1-2%204-2%204-1l-1%202h-2v4l-1%201%202%201%201-1v-1c1-1%201%200%201%201l-2%202%203%201c5%202%207%201%207-2-1-1%200-2%201-2l1%204c0%202%200%203%202%203l1-6c0-4%200-5-1-4-3%202-6%200-5-2%201-3%206-3%206%200h1c2-2%203-1%202%201%200%202%200%202%202%202s2%200%202-25c0-13%200-24-1-23%200%202-1%202-4-1-4-4-4-4-10-4-11%200-22-4-31-11l-7-4-8%201m-130%209c0%207-1%2013-3%2013l-1-3-1%206c0%209%200%2010%203%2015l3%206c0%206%207%203%2011-4%203-6%205-12%203-13-1-1-1%200-1%203%200%206-9%2014-9%207%200-2%200-2-1%201-2%205-3%204-3-3v-8c-1%200%205-4%208-4%202%200%202%200%201-1l-2-1-3%201h-3l1-1%201-1-1-2v-1c1%200%201-2-1-4-1-2-1-2%201-2v-2l-1-1-1-1v-4l-1-2v6m86%203c-3%203-5%2010-5%2018-1%2016%206%2029%2010%2019%201-3%202-4%203-2l-4%207c-2%201%201%202%203%201v-1c-1-1%200-1%202-1l4%201c1%201%203%200%203-1s-1-2-3-2l-1-2v-3c-2-1-8-2-8%200l-2%201c-4%200-5-4-6-13%200-7%201-15%203-15l1-1%203-1c3%200%204-1%204-3%200-3-3-4-7-2m-38%202c-4%200-4%204%200%204l4%201c2%200%202%200%202-2%200-4%202%202%202%208v4c-1-3-1-3-1-1l-1%206c0%203%200%203%201%202h1l1%201%201-1%202-3%201-3-2-1-1-11c-1-5-2-5-10-4m66%2016l-1%208-1%203v-3l-1-3c-2%200-2%202-2%206l-2%201-1%201c0%201%203%200%205-2h1c0%202-2%204-5%204-1%200-2%201-2%203v3l1%205v5l1-3c0-2%201-3%203-4l3-1h-6l2-2c3-4%206-14%206-21l-1-5v5m123-3c-1%202-1%203%201%205l4%207%203%203%203%201c1%201%200%202-5%202-8%200-7%201%202%201%208%200%2012-1%208-3l-2-1c-3%200-2-1%201-1l3-1-6-1c-5%201-5%201-4-1%202-1%200-6-4-11-3-3-3-3-4%200M39%20238v11h19c0-1-3-8-8-15-4-7-5-8-8-8l-3%201v11m291-11l-2%201-3%201%203%201c2%200%203%201%201%204%200%201-1%202-3%202-3%200-4%201-4%202-1%202-1%202%201%202l7%201-5%201c-3%200-3%200-3%202%200%203%200%203%205%203%202%200%204%200%203-1l-2-1c-4%200-1-1%204-2%206%200%207-1%207-3h-1c-1%202-7%202-7%200l-2-1c-1%200-1-1%201-2%203-1%203-1%202-2s-1-1%201-1%203-3%201-4c-3-1-2-3%200-3%202-1%202-1-1-1l-3%201M94%20241l1%207c0%204%200%204%203%204l3-2c0-2-1-2-3-1-1%201-1%201-1-3%200-5%201-5%203-5s3%200%203%205v6h7c9%200%2010-1%209-3-1-1-1-2%201-3l1-4c0-2%200-2%201%201l1%202%201%202v4l2-1%203-2c2%200%202%200%201%201-3%200-2%202%200%203l2-1c-1-2%202-4%206-4%205%200%206%200%204-5l-1-3h-24c-23%200-24%200-23%202m194%2031c-1%205-1%206%201%206l1%201h-2l-1%201%205%203c4%201%204%201%204-1l2-4-2-2-1-2h2c1%201%204%200%203-1l-12-1M16%20316v8c0%205%201%206%203%206%207%201%2011-8%206-13-2-2-8-3-9-1m67%201c-3%203-3%207%200%2010%204%205%2010%202%2010-4%200-7-6-10-10-6m15%202c-2%200-2%201-2%208l1%207%201-2c0-2%200-3%201-2%205%201%209-9%204-11l-2-1-3%201m-41%2042l6%2014c6%2012%209%2015%209%2010%200-2%203-1%205%203l3%205%202%204%201%201%201-1h1l1-4-4-8-4-9-2-5c-1-4-1-4%202-4%202%200%203%200%203-2h-4c-3%200-4%200-3-1l5-1c4%200%208-1%206-2H57m75%202c-10%202-9%201-9%2010%200%206%200%208%202%208l1-1%202-2%201%202v2l2-3%202-4%201-4%202-6c2-3%202-3-4-2m76%207c1%205%206%2010%2010%2010l2-1v-4c0-2-1-3-5-6-7-5-7-5-7%201m-20%201h-12c1%202-2%203-3%201-2-1-4-2-4%200%200%201%2017%2014%2019%2014v-2c-3-2-1-3%201%200h8c7-1%208-2%206-4-3-2-2-5%200-5s2%200-2-3l-4-3-9%202m-35%201l-6%201c-4%200-4%200-4%203%201%203%200%203-3-1-5-7-6%200-1%2017l2%208h12l-7-8c-9-10-10-12-8-13l4%201c2%202%206%202%207%200l-1-2c-2-1%201-3%205-4l4-2h-4'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"narrow":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGQABAAIDAAAAAAAAAAAAAAAAAAMEAQIF/8QAFQEBAQAAAAAAAAAAAAAAAAAAAQD/2gAMAwEAAhADEAAAAeRLfwMqIOlcaqK//8QAHBAAAgICAwAAAAAAAAAAAAAAAQIAAxESEyEi/9oACAEBAAEFAijKaqTYSKUgbILTkxK+zf4O7T//xAAWEQADAAAAAAAAAAAAAAAAAAAAARL/2gAIAQMBAT8BlksplM//xAAWEQEBAQAAAAAAAAAAAAAAAAARABD/2gAIAQIBAT8BcIv/xAAfEAACAQQCAwAAAAAAAAAAAAAAARECITFhEyJBUXH/2gAIAQEABj8CuheKfZHGn9O0TsytF4q2NMsZP//EABsQAQADAQEBAQAAAAAAAAAAAAEAESFBURAx/9oACAEBAAE/IXgons6aOwnWl3TBNu9xqUQcch+ISAbgImnOp8n/2gAMAwEAAgADAAAAEDcoAv/EABYRAQEBAAAAAAAAAAAAAAAAAABhAf/aAAgBAwEBPxCOoq6rr//EABcRAAMBAAAAAAAAAAAAAAAAAAARUQH/2gAIAQIBAT8QSjyiQSH/xAAfEAEAAwACAQUAAAAAAAAAAAABABEhMUGhUWFxkfD/2gAIAQEAAT8QIMipjCPV4XYBzR3DxQconzNow2G17Z4lxF51X+oAsjUUX4ho0LC30GWlpg54Z+wT/9k=","aspectRatio":1,"src":"/static/f56e51cac14719be4f33b4f802a1de49/eaa58/devsecops1.jpg","srcSet":"/static/f56e51cac14719be4f33b4f802a1de49/5a3ee/devsecops1.jpg 114w,\n/static/f56e51cac14719be4f33b4f802a1de49/41f8f/devsecops1.jpg 229w,\n/static/f56e51cac14719be4f33b4f802a1de49/eaa58/devsecops1.jpg 457w,\n/static/f56e51cac14719be4f33b4f802a1de49/c309b/devsecops1.jpg 686w,\n/static/f56e51cac14719be4f33b4f802a1de49/e3008/devsecops1.jpg 914w,\n/static/f56e51cac14719be4f33b4f802a1de49/0ff54/devsecops1.jpg 1200w","srcWebp":"/static/f56e51cac14719be4f33b4f802a1de49/15384/devsecops1.webp","srcSetWebp":"/static/f56e51cac14719be4f33b4f802a1de49/31fce/devsecops1.webp 114w,\n/static/f56e51cac14719be4f33b4f802a1de49/e3e25/devsecops1.webp 229w,\n/static/f56e51cac14719be4f33b4f802a1de49/15384/devsecops1.webp 457w,\n/static/f56e51cac14719be4f33b4f802a1de49/0258d/devsecops1.webp 686w,\n/static/f56e51cac14719be4f33b4f802a1de49/64ea2/devsecops1.webp 914w,\n/static/f56e51cac14719be4f33b4f802a1de49/9000d/devsecops1.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%2062v63h3c3%201%204%201%204-12v-11l1-2v-2c2%200%202%202%202%2015v15l10%205%2021%2012c6%206%2010%207%2010%206%200-2%202-1%202%202s7%2011%207%208l1-7v-5l-3-1c-3-1-4-1-4-4s0-4-3-4-3-2%200-2c2%200%203-1%203-4%200-4%200-5%203-5l4%201c1%201%201%200%201-2%200-3-2-6-4-5l-2%203-1%202c-2%200-1-5%201-6%201-2%203-2%205-2%203%201%203%201%203-3v-3c2%200%202%2010%200%2011l-1%203c0%202%200%202%201%201l2-2%202%201v12l-1%209-1-4-1%201c1%204-1%206-2%202-1-1-1%203-1%209%200%208%200%209%201%202%200-8%200-9%203-7%202%202%202%203%202%2011%200%2011%200%2015%203%2016%203%200%203%200%203-12%201-15%202-15%203%200v12h3l12%202%2010%201h10l9-1v-2c-2-1-2-2-1-6l1-5v-7l-2-2h2v-2c-2-2-3-4%200-2%201%201%201%201%201-1l-1-2v-2l-1-6c-1-3-1-3%201-3%201%200%202-1%202-3l-1-2-1-1c-1-1-2-2-7-2-6-1-6-1-2-6l3-4%2010%202%2014%201%204%201-4%204-5%203c-2-2-3%201-3%207%201%205%201%205%202%203s1-2%201%200v14h-1c-2-2-3%200-3%208%200%207%201%208%202%207%203-1%206-1%2021%201l15%202%206-3c6-3%2014-4%2019-1%201%200%203-2%205-7%204-8%2014-21%2017-22l5-3%2010-4%209-5%202-3h-2l-37-8c-1%200%201-3%205-6l4-3%2019%204%2020%205c2%200%202%200%202-3l1-2v3l2%203%201-3c0-2%200-3%201-2l1%203v2c2%200%202-1%202-3l1-3%201%202c0%202%201%202%204%200s6-2%2011-1c3%200%204%202%201%202l-3%201%202%201c2-1%202%200%202%205l2%202c2%201%202%201%202-1%200-5%203-16%208-25a147%20147%200%2001108-76l1%2030v31l-3%201a247%20247%200%2000-32%209c-2%200-2%200-1%202v1c-1%200-2%200-1-1l-2-1-3%201v2c1%201%200%202-2%201l-1%201h-2l-2%201v1l-5%202c-4%202-4%202-2%202h3l2-1%203-2c1%200%203%205%201%206v3c0%203-18%2011-19%208l-2-2-1%201c3%204-8%209-11%206-2-1-2-1-2%201%201%202%200%202-4%204l-3%203%209-4%203-1%2012-5%202-1%2010-3%209-2%201-2-1-3-1-6c0-4%201-4%203-5l7-2h6l1%201v-1l2-2c3-1%205-1%205%202l1%201v-2l1-3%201%202c-1%202%200%202%202%202%201%200%202%200%201-2l-1-1-1-1%2011-3c2%200%200%204-2%204l-1%201v2l-1%201h-1l-3%202c-2%200-2%200%200%201l-9%204-12%204v6l1-3c1-2%205-5%208-4h1l9-2c2%201%201%203-2%204l-3%201%208-1%207-1c-1%200-5%2012-4%2013l-4%202c-5%201-6%203-6%2012l-1%203-4%203c-2%203-4%204-9%205-6%201-7%202-7%203l-1%204c-3%203-1%203%207%200l5-1h-5c-7%201-4-1%204-2%206-1%207-1%206-3l1-2c3%202%201%205-3%206l-4%201h5c3%200%204%200%203%201h-3v2l-1%202v-1l-1-1-2%202c0%203%200%203-1%200s-2-3-5-2l-3%203-2%204c-1%201-1%201%205%201h5l-1%201v1c-2%201-2%201-1%202l-4%202c-8%202-10%203-8%205%203%202%2028-3%2029-6%201-2%202-2%209-4%205%200%205-2%205%2039v35h-14v7l-1%207c-1%200-2-10-1-25%200-8%200-8-2-7h-4c0-1%201-2%203-2h3v-13h-5a454%20454%200%2000-13%200c-1-2%200-3%2010-3h5l-1%201c4%202%204%201%204-3v-4l-10%201-11%201-1%2025-1%2020c-1-4-1-4-1%203l1%207h6l7%201h-8l-9-1c-1-1-1%200-1%204%200%208%201%208%2014%207l10%201v1c2%200%202%201%202%203%200%203%200%203-2%202h-1c1%202%200%202-2%202s-3%200-2%201l2%201-2%201c-1-1-2%200-2%201-1%202-3%203-3%200l-1%201v2l-14%201c-14%200-15%200-15-2h-1c-1%202-3%202-10%202-10%200-10%200-7-5%202-3%202-3%203-1s1%202%203%200l2-4%202-3%201-1h-4l-1%202c-3%200-6%203-8%208l-1%204h-11l-19-2c-11-1-16-1-9%201%204%201%203%201-8%201l-13-1-11-3-1-1h-5c0%201%204%203%2010%204%205%201%204%201-6%201l-15-1h-4l-9%201c-10%200-10-1-1-2%209%200%207-1-2-1-7%200-8%200-8%202v1l-1-1-11-1-59%202H87l1-2c0-3%200-3-3-3s-3%200-2%203l1%202h-9c-5%200-9%200-8-1s3-18%201-18l-1%204c-1%203-1%204-4%204-2%200-3%200-3-2-1-1-1-1-1%201s1%202%203%202%203%200%202%201l1%203c1%201%201%201-3%201h-5v-30H39v31l6-1%2014%201%208%201-4%201-15%202H37v-34h-3c-2%200-2%200-1-1l4-1h2l-1-1-1-34v-34l-4%201c-3%202-4%202-4%201%201-2-3-3-5-2-1%202-2%2024-1%2026v3c0%203-1%203-5%202-12-1-11%200-11-7%200-5%200-6-1-3l-1%202-3-2c-2-1-2%200-2%2079v80l3-1c3%200%203%201%200%202l-3%201v37h6c7%200%209-1%209-3%200-3%204-5%207-4l8%201h6l-3-2-3-1h3c5%201%2011%200%2014-3%204-3%204-1%200%203-2%203-8%206-11%206l-4%202c-2%201%201%201%2027%201h29l1-3%204-3h3l-3-1c-2-2-3-2-3%200h-2c-1-3%202-4%206-2%202%202%204%202%209%202h7l-1-2-1-6v-4l1%204%201%203c0-3%202%201%202%205%200%205%201%207%207%207h4l-5-7a3545%203545%200%2000-22-32l30-1%2030%201%206%204c5%205%208%206%206%202l2-1%209-2%204-1-12%201c-2%200-3%200-2-1s16-4%2017-2h14l10-1%206%204%206%206%201%201%2013%209c0%201-8%203-36%208-14%203-16%204-16%205l2%203c2%200%202%200%201%201-2%201-2%201%201%201l5%201%204%201c3%200%203%200%202-1v-2l2%202c1%201%2028%202%2028%200%200-1-3-2-7-1-6%201-7%201-7-3%200-1%200-2-1-1%200%203-1%202-5-1-3-4-3-4-1-4%204-1%205-1%206%202%201%202%201%202%206%202%205-1%205-1%208%202l3%204%206%201h6l-2-2c-3-4%200-4%205-1l4%203h151l-1-137V125l-4%201h-3l4-2h4V0H0v62m243%2077c-5%206-8%2017-6%2025l1%204v-5c0-5%202-5%203-1%201%208%203%2012%204%2012l1%201c-1%201%202%205%204%205l3-3c8-8%207-29%200-38-4-4-6-4-10%200m42%202l-3%203v1h1l1%201-1%201-1%207-1%207-1-4c0-2%200-3-4-3h-5c-1%200-2%202-2%207l-3%2013c-4%207-4%206%201%206%204-1%204%200%201%204-3%202-4%202-9%202-16%200-20-2-24-11l-2-2-1%202c-2-1-3%200-2%204%202%206%202%207%205%209%202%201%201%201-3%202l-8%202c-2%200-2%200%200%202s2%202%209%201l12-2c3%200%203%200%203-3%200-5%202-5%202-1v4h6l2-1%201%201%205%201h7l2%201%201%201h3l2%201-1%201c-1%200-1%201%201%201%201%201%201%201-1%201l-2-1h-36l17%202%2021%202c5%200%205%200%205-2s-1-3-2-3l1-1%201-1v-3l-1-2c1-1%200-1-2-1l-3-1h4c3%200%203%201%203%202l1%202%201-1v-1l1%202%201%201-1%201-2%201h2c2%200%202%200%202%202v1l1%201%202%203c3%202%201%203-3%201-2-1-4%200-5%201l-5%201v-1l-18-2-22-1%206%201c5%200%206%200%203%201l-4%201%205%205%205%205v-4l1-4c1-1%201%209%201%2028l1%2038%201%204h-7l-5%201a1508%201508%200%200124%204c4%200%204%200%204-3%200-2-1-3-2-3l-2-1h2c2%200%203-6%201-6l-4-1-1%206v6l-1-7v-6l7%201h7v-53h-7c-5%200-6%200-4-1h-5c-4%200-4%200-4%204%200%205%203%2012%207%2018l3%204%204%204c2%201%203%205%201%205s-1%202%201%202c1%201%201%201-1%201-1%201-2%200-2-1%200-2-3%202-3%205%200%201%200%202-1%201-1-2-3-1-3%203l-1%204-2-3-1-3v3c0%202%200%202-1%201-1-2-1-1-1%204a901%20901%200%2001-1-54c-1-3%200-3%209-4a462%20462%200%200130%200l-1%202-19%203c8%200%208-1%208%2029v27h3c10%202%2011%202%2015-2%205-5%209-6%2029-7%2019-1%2019-1%2018-7%200-4%200-4-5-4l-10-1h5l10-1-5-1h-7l6-1h6v-34l-6-2-15-6-11-4a504%20504%200%200011-4l4-1h-5l-4%201-6%201-6%201c-2%200-2%200-1-1l5-2%204-1h4l18-3%2021-3h14c1%202%200%203-3%203l-2%201-6%201-9%201c-1%201%200%201%205%201a975%20975%200%2000-6%204l-1%201%2019-1h6v-8c0-7%200-8-2-8a480%20480%200%2001-45%207%202717%202717%200%2001-38%204c0-3%201-4%205-4%203%200%203-1-1-5-8-9-14-20-15-30v-16l-1%203M1%20143l3%203c24%205%2054%2021%2061%2032l3%203c0-8-22-24-44-32l-23-6m83%205c-3%200-4%202-3%205%200%202%200%202-1%201h-1l3%205%203%203%202-2%202-1c1%201%203-2%203-5%200-1%200-2%201-1l1-1-1-1-4-2-3-2-2%201m-83%202c0%201%201%202%203%202l4%201%2012%204c15%205%2025%2010%2030%2016%203%203%205%205%204%206h2c-1%201%202%207%204%207%201%201%201%201-1%201-2%201-2%200-4-2%200-2-3-4-5-6-11-6-49-17-49-13l4%201%205%202%203%201c5%200%2024%206%2028%208a84%2084%200%200117%2012c1%201%201%201-1%201l-16-4-2%201%204%201%204%202c1%201-4%203-6%202s-2%200-2%2010v11l3%201%207%205%203%203v-4c0-5%202-15%205-21v-4l1-1%203%203c1%202%201%202%201%200l1-2v-1l-3-2c-1-3-1-3%203-4%202-1%203-1%203%201v4c1%202%202-3%201-7-3-11-27-25-52-32l-14-3m162%2047c-5%203-7%2012-3%2012v1l-2%201h2v1l-2%201h1l1%201v1a516%20516%200%200012%203l2%202v-2c0-2%200-2%201-1h1c0-3-6-9-8-7h-3v-1l1-3c0-3%200-4-2-4s-1-3%202-4c3-2%201-2-3-1m30%201l-5%201%204%201c2-1%203%200%203%201l7%201c6%200%206%200%200%201-4%201-6%203-3%203%201%200%202%201%201%202l-2%201c-2%200-4%202-2%203l7%201c4%200%204%200%202%201l-3%201%202%201c2%201%202%201%201%202v1c1%200%203%206%203%2013l-1%204c0-4-7-4-8%200-1%202%200%202%203%202l4%201-5%201c-5-1-7%200-7%203%200%202%201%202%205%202h6l-5%201c-5%200-6%200-6%202h3c1-1%201-1%201%201s-1%202-4%202c-4-1-5%200-2%202h4c4%200%203%203-1%203l-4%201h9v-3c1-4%201-4%204-3v1l-2%202%202%201%201%201%201%202v2c-1%201-1%203%201%203v-1c-1-2%203-2%209-1l3%201-3%201h1l2%202%202%202-1%201c-2%201-2%201%200%201%204%200%206-5%202-6h3l5-1c1-2%204-2%204-1l-1%202h-2v4l-1%201%202%201%201-1v-1c1-1%201%200%201%201l-2%202%203%201c5%202%207%201%207-2-1-1%200-2%201-2l1%204c0%202%200%203%202%203l1-6c0-4%200-5-1-4-3%202-6%200-5-2%201-3%206-3%206%200h1c2-2%203-1%202%201%200%202%200%202%202%202s2%200%202-25c0-13%200-24-1-23%200%202-1%202-4-1-4-4-4-4-10-4-11%200-22-4-31-11l-7-4-8%201m-130%209c0%207-1%2013-3%2013l-1-3-1%206c0%209%200%2010%203%2015l3%206c0%206%207%203%2011-4%203-6%205-12%203-13-1-1-1%200-1%203%200%206-9%2014-9%207%200-2%200-2-1%201-2%205-3%204-3-3v-8c-1%200%205-4%208-4%202%200%202%200%201-1l-2-1-3%201h-3l1-1%201-1-1-2v-1c1%200%201-2-1-4-1-2-1-2%201-2v-2l-1-1-1-1v-4l-1-2v6m86%203c-3%203-5%2010-5%2018-1%2016%206%2029%2010%2019%201-3%202-4%203-2l-4%207c-2%201%201%202%203%201v-1c-1-1%200-1%202-1l4%201c1%201%203%200%203-1s-1-2-3-2l-1-2v-3c-2-1-8-2-8%200l-2%201c-4%200-5-4-6-13%200-7%201-15%203-15l1-1%203-1c3%200%204-1%204-3%200-3-3-4-7-2m-38%202c-4%200-4%204%200%204l4%201c2%200%202%200%202-2%200-4%202%202%202%208v4c-1-3-1-3-1-1l-1%206c0%203%200%203%201%202h1l1%201%201-1%202-3%201-3-2-1-1-11c-1-5-2-5-10-4m66%2016l-1%208-1%203v-3l-1-3c-2%200-2%202-2%206l-2%201-1%201c0%201%203%200%205-2h1c0%202-2%204-5%204-1%200-2%201-2%203v3l1%205v5l1-3c0-2%201-3%203-4l3-1h-6l2-2c3-4%206-14%206-21l-1-5v5m123-3c-1%202-1%203%201%205l4%207%203%203%203%201c1%201%200%202-5%202-8%200-7%201%202%201%208%200%2012-1%208-3l-2-1c-3%200-2-1%201-1l3-1-6-1c-5%201-5%201-4-1%202-1%200-6-4-11-3-3-3-3-4%200M39%20238v11h19c0-1-3-8-8-15-4-7-5-8-8-8l-3%201v11m291-11l-2%201-3%201%203%201c2%200%203%201%201%204%200%201-1%202-3%202-3%200-4%201-4%202-1%202-1%202%201%202l7%201-5%201c-3%200-3%200-3%202%200%203%200%203%205%203%202%200%204%200%203-1l-2-1c-4%200-1-1%204-2%206%200%207-1%207-3h-1c-1%202-7%202-7%200l-2-1c-1%200-1-1%201-2%203-1%203-1%202-2s-1-1%201-1%203-3%201-4c-3-1-2-3%200-3%202-1%202-1-1-1l-3%201M94%20241l1%207c0%204%200%204%203%204l3-2c0-2-1-2-3-1-1%201-1%201-1-3%200-5%201-5%203-5s3%200%203%205v6h7c9%200%2010-1%209-3-1-1-1-2%201-3l1-4c0-2%200-2%201%201l1%202%201%202v4l2-1%203-2c2%200%202%200%201%201-3%200-2%202%200%203l2-1c-1-2%202-4%206-4%205%200%206%200%204-5l-1-3h-24c-23%200-24%200-23%202m194%2031c-1%205-1%206%201%206l1%201h-2l-1%201%205%203c4%201%204%201%204-1l2-4-2-2-1-2h2c1%201%204%200%203-1l-12-1M16%20316v8c0%205%201%206%203%206%207%201%2011-8%206-13-2-2-8-3-9-1m67%201c-3%203-3%207%200%2010%204%205%2010%202%2010-4%200-7-6-10-10-6m15%202c-2%200-2%201-2%208l1%207%201-2c0-2%200-3%201-2%205%201%209-9%204-11l-2-1-3%201m-41%2042l6%2014c6%2012%209%2015%209%2010%200-2%203-1%205%203l3%205%202%204%201%201%201-1h1l1-4-4-8-4-9-2-5c-1-4-1-4%202-4%202%200%203%200%203-2h-4c-3%200-4%200-3-1l5-1c4%200%208-1%206-2H57m75%202c-10%202-9%201-9%2010%200%206%200%208%202%208l1-1%202-2%201%202v2l2-3%202-4%201-4%202-6c2-3%202-3-4-2m76%207c1%205%206%2010%2010%2010l2-1v-4c0-2-1-3-5-6-7-5-7-5-7%201m-20%201h-12c1%202-2%203-3%201-2-1-4-2-4%200%200%201%2017%2014%2019%2014v-2c-3-2-1-3%201%200h8c7-1%208-2%206-4-3-2-2-5%200-5s2%200-2-3l-4-3-9%202m-35%201l-6%201c-4%200-4%200-4%203%201%203%200%203-3-1-5-7-6%200-1%2017l2%208h12l-7-8c-9-10-10-12-8-13l4%201c2%202%206%202%207%200l-1-2c-2-1%201-3%205-4l4-2h-4'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"seo":{"src":"/static/f56e51cac14719be4f33b4f802a1de49/0ff54/devsecops1.jpg"}}}]}},"staticQueryHashes":["1609575157","2068910035","2361467917","2361467917","3838421970","500183989","5650841"]}