![image](https://private-user-images.githubusercontent.com/110598358/404125486-7995c4bb-dbd8-4dbb-9e5f-5b91de66c0ee.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwNDY2ODEsIm5iZiI6MTczOTA0NjM4MSwicGF0aCI6Ii8xMTA1OTgzNTgvNDA0MTI1NDg2LTc5OTVjNGJiLWRiZDgtNGRiYi05ZTVmLTViOTFkZTY2YzBlZS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQyMDI2MjFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT05NjhlNDUzMmUxZGY4NzMyM2FiMjBjYzg0MWFkOTA1ZmFhYTFhOGVjNjJiZTA1YmIwNTI4ZGE5ODA4NzUwZmQ5JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.MQr_PDBBwmD5pcIa6037IST16eRjSLTwtW_n0dOZwn8)
![image](https://private-user-images.githubusercontent.com/110598358/404125597-b9b75855-81ca-4bae-acad-b2b6cb6db674.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwNDY2ODEsIm5iZiI6MTczOTA0NjM4MSwicGF0aCI6Ii8xMTA1OTgzNTgvNDA0MTI1NTk3LWI5Yjc1ODU1LTgxY2EtNGJhZS1hY2FkLWIyYjZjYjZkYjY3NC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQyMDI2MjFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0yY2VkNTcxNGFiNzI1YTg0NWM1Mzc3YTdlMjI5M2NiZDExMDdlYjk5YmQzMjBmODBhOTZkMTE2Zjc3YTY2OWNkJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.Yp7B4YnntVfdFtHA7KsVXzlJkditNJ7J_If0tWPwyKM)
![image](https://private-user-images.githubusercontent.com/110598358/404125743-d2b175bd-f657-4879-9f0c-064ae782e651.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwNDY2ODEsIm5iZiI6MTczOTA0NjM4MSwicGF0aCI6Ii8xMTA1OTgzNTgvNDA0MTI1NzQzLWQyYjE3NWJkLWY2NTctNDg3OS05ZjBjLTA2NGFlNzgyZTY1MS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQyMDI2MjFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0xZjllMTU4ZmViYjFmYzQ5M2Y2MTIyODEwNGM1ZGI4ZTk5NWI0ZTJhOWM1ZjE2OTIyMjdkNDI1NjU5ZWQxNTZhJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.7ULt0PjxcdsK2CtOZyq-fWet1fVK_xU4cMnCw6wBBbY)
![image](https://private-user-images.githubusercontent.com/110598358/404125831-224e8676-b2a3-4053-9edc-5421b6a85998.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwNDY2ODEsIm5iZiI6MTczOTA0NjM4MSwicGF0aCI6Ii8xMTA1OTgzNTgvNDA0MTI1ODMxLTIyNGU4Njc2LWIyYTMtNDA1My05ZWRjLTU0MjFiNmE4NTk5OC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQyMDI2MjFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1lMmZkZjUyNTFhOTBjNmVkZWZhYWY4MTY0ZDI2NzFiM2FkNTdjNTk2Y2VjODVkYmNmNjMxZjlmODFlYTJhZTE4JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.8UcRWvgPTXUcqvlcJkgoEiSeEFrDVgbQfJweQyQRBOk)
![image](https://private-user-images.githubusercontent.com/110598358/404125917-7c28aeca-d268-4060-b11e-5b6d15c068ac.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwNDY2ODEsIm5iZiI6MTczOTA0NjM4MSwicGF0aCI6Ii8xMTA1OTgzNTgvNDA0MTI1OTE3LTdjMjhhZWNhLWQyNjgtNDA2MC1iMTFlLTViNmQxNWMwNjhhYy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQyMDI2MjFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT02ZjIxNDAyNTcyYTEzNDU1N2FkZGJjNmFlZTUyNTUwMGI2YjcyNjFlY2Q5MjZiYjgyYWZkOTQ5MzQzNzQwODI3JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.4Me6-y9T8RtgIXZOzhvEOyhPh32gKMTy8h-67ti9Nfg)
![image](https://private-user-images.githubusercontent.com/110598358/404125978-0df70ef7-85f3-4f14-b74c-418fb14f9b3e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwNDY2ODEsIm5iZiI6MTczOTA0NjM4MSwicGF0aCI6Ii8xMTA1OTgzNTgvNDA0MTI1OTc4LTBkZjcwZWY3LTg1ZjMtNGYxNC1iNzRjLTQxOGZiMTRmOWIzZS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQyMDI2MjFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT02ODIwZmYwOTBjNzZhMmE0Mjk2NWU0ODdlNGMwMTAzY2IyNjc2ZDA2ZWQ0NzE4NjJhNjg5Y2RkMzQyOWFhMGQ0JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.9iadjmwiSWyx9SD5_h4JWJyQ4OOmU2KMCn7iVYmcjNw)
![image](https://private-user-images.githubusercontent.com/110598358/404126016-3b70e7b7-eadd-4f1c-8075-b77b7237e1a7.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwNDY2ODEsIm5iZiI6MTczOTA0NjM4MSwicGF0aCI6Ii8xMTA1OTgzNTgvNDA0MTI2MDE2LTNiNzBlN2I3LWVhZGQtNGYxYy04MDc1LWI3N2I3MjM3ZTFhNy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQyMDI2MjFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT01NGVkMzYxNGE3NmQ1NzdmMDg4MzgxMzJjM2JjOGVhMmQxOGIxZDcxNTU2ZTg0Mzc3Mzc0YmFiOGY0ZjcxMmUzJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.CAGyFIOGE5QojBZwlvhWLsSJRQp3U4FlQYYgTTEYH8o)
![image](https://private-user-images.githubusercontent.com/110598358/404126074-9a43745c-918a-40cd-9e51-071805fe3d8c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwNDY2ODEsIm5iZiI6MTczOTA0NjM4MSwicGF0aCI6Ii8xMTA1OTgzNTgvNDA0MTI2MDc0LTlhNDM3NDVjLTkxOGEtNDBjZC05ZTUxLTA3MTgwNWZlM2Q4Yy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQyMDI2MjFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0wYjhlNGNlNmQ0NzEzZDJlY2FjMGI5ZDIxODlmMzkxNzgzOWRlNzBmM2ZlYjk4MDdlYzE3MmVlMzg1ZTY1YjAwJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.2whEPyvSedHvpht1h4oglgJAvVcQlvBWZXisalUX2nM)
![image](https://private-user-images.githubusercontent.com/110598358/404126119-2f8507c7-356b-437b-9d41-e8e27527af1a.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwNDY2ODEsIm5iZiI6MTczOTA0NjM4MSwicGF0aCI6Ii8xMTA1OTgzNTgvNDA0MTI2MTE5LTJmODUwN2M3LTM1NmItNDM3Yi05ZDQxLWU4ZTI3NTI3YWYxYS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQyMDI2MjFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT05ZTdiYjcxOGQxNTMwZDcyNTM0YjNhNjM5NmVmNmZiOTZhYjlmZWQyZDliNzVkMTNhNDA3ZDhhMWJkZjZmYTc2JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.puvcno75kn8B4F_W9_rYhZCF0ACqs9vD38_wIiH50fQ)
![image](https://private-user-images.githubusercontent.com/110598358/404126167-ce96bea1-7ed5-45c6-9e9d-a2ef0c9907f8.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwNDY2ODEsIm5iZiI6MTczOTA0NjM4MSwicGF0aCI6Ii8xMTA1OTgzNTgvNDA0MTI2MTY3LWNlOTZiZWExLTdlZDUtNDVjNi05ZTlkLWEyZWYwYzk5MDdmOC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQyMDI2MjFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0yYzJjNWFjMjVjMTJlMmE2NmQzZWU4YTMyOGFjODE1NzIzZmU4NDlkOThiMzRjZTA1ZjM5OGVjMTg5MWNjOTAxJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.FswWa3Tk-oTxzno5eSGDrJlU50-W6xI3vJ_iAyvbsDA)
![image](https://private-user-images.githubusercontent.com/110598358/404126236-a36c09ae-4e3d-44d6-95ef-b7e7197446be.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwNDY2ODEsIm5iZiI6MTczOTA0NjM4MSwicGF0aCI6Ii8xMTA1OTgzNTgvNDA0MTI2MjM2LWEzNmMwOWFlLTRlM2QtNDRkNi05NWVmLWI3ZTcxOTc0NDZiZS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQyMDI2MjFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1iYjRlZTRlMzlhMTJmMmJmODI1Y2ZiMTY2ZGNhZjM0MjhhYTJlMzA3NzJlODgzMjQ2ZDdmYTc2MTcwNjg5OWMzJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.MviO2ljWCnxWFF8X04svQIkn8aPC7MeMBw3meUaq0yA)
![image](https://private-user-images.githubusercontent.com/110598358/404126289-8c024f56-aa75-4384-aa6f-933581bac4b0.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwNDY2ODEsIm5iZiI6MTczOTA0NjM4MSwicGF0aCI6Ii8xMTA1OTgzNTgvNDA0MTI2Mjg5LThjMDI0ZjU2LWFhNzUtNDM4NC1hYTZmLTkzMzU4MWJhYzRiMC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQyMDI2MjFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT05ZWQ2NGE3MWMyMzMzY2ZhY2JlODQzMWFjZWEyZDgyZGYwZGU4Yzk0ZjkwNjQxNTc1MmY3Mzc2NmI3YTE3OTBkJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.KUB9VQ8xKU-IzxQ-ArwEUtFgof3gkqy_Jl9zhxd-zGg)
![image](https://private-user-images.githubusercontent.com/110598358/404126353-09e70c3b-a44f-47be-9bce-322c1438a185.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwNDY2ODEsIm5iZiI6MTczOTA0NjM4MSwicGF0aCI6Ii8xMTA1OTgzNTgvNDA0MTI2MzUzLTA5ZTcwYzNiLWE0NGYtNDdiZS05YmNlLTMyMmMxNDM4YTE4NS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQyMDI2MjFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT00NWVlZjg5ZmY2NjA1NDA0YTJiZTNlZDQyZWJmZmVjODMxNWVlM2NiMzY3ZDBkYjU4ZjU3MzIxMmVjMDE0YWRjJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.XxG612pEiorFyUImpqDC7g627mBaUJKuHLNCmCBvD4o)
![image](https://private-user-images.githubusercontent.com/110598358/404126428-3d51e936-7634-4325-859d-9b1ad414fc37.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwNDY2ODEsIm5iZiI6MTczOTA0NjM4MSwicGF0aCI6Ii8xMTA1OTgzNTgvNDA0MTI2NDI4LTNkNTFlOTM2LTc2MzQtNDMyNS04NTlkLTliMWFkNDE0ZmMzNy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQyMDI2MjFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1lZDM2MDI5MTY1ZWNkODU0Mjg1YTM3YzRkNTNkNDI5NmNiYjdlMDMyZDFjZGU0NGZkMmNkNWIyYTRmYjVhNGVhJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.pgJx6yFkqq9aMD90AMwM0GYfNx5WL_yJzcMES7q4Jh8)
![image](https://private-user-images.githubusercontent.com/110598358/404126497-39b25994-4722-4bc1-8773-fe4c92f3c076.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwNDY2ODEsIm5iZiI6MTczOTA0NjM4MSwicGF0aCI6Ii8xMTA1OTgzNTgvNDA0MTI2NDk3LTM5YjI1OTk0LTQ3MjItNGJjMS04NzczLWZlNGM5MmYzYzA3Ni5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQyMDI2MjFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1mYzA3YWI1OTAyNTVhMjBmOTM5OGExYTE0NDg3NjExMGZjNGIwMDExNDA1OTQyNGViNjAyMTM4ZjA1MWZlYTU3JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.iC7qhNJMro5jJPBr56X1WoOYfxMDNRpW2BLtV_mMhvg)
![image](https://private-user-images.githubusercontent.com/110598358/404126608-786da6f4-95f2-432d-8cc0-0848dbdf411b.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwNDY2ODEsIm5iZiI6MTczOTA0NjM4MSwicGF0aCI6Ii8xMTA1OTgzNTgvNDA0MTI2NjA4LTc4NmRhNmY0LTk1ZjItNDMyZC04Y2MwLTA4NDhkYmRmNDExYi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQyMDI2MjFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1jMjI2Njc1NmFhOWYxYzExNTlmZWExOWE2MGE2MDU4NDQ0NDBiOTYzNjAxNTg5ZjNmNTkwODUxMGJmMGJjMGMyJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.NzZZ9-be2xBm0U7kiGAdssnSUWLCxPS4FvJ-CVinlfg)
![image](https://private-user-images.githubusercontent.com/110598358/404126654-89e9eb76-4625-42d8-8853-dee232471389.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwNDY2ODEsIm5iZiI6MTczOTA0NjM4MSwicGF0aCI6Ii8xMTA1OTgzNTgvNDA0MTI2NjU0LTg5ZTllYjc2LTQ2MjUtNDJkOC04ODUzLWRlZTIzMjQ3MTM4OS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQyMDI2MjFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0wY2RiOTQ3ODRmMzBmZGRhYTM5ZjgwYTE4YWY2YWQ1OGM5ODU3YmEyN2Y5YjBiZWUyYWE1OWU1ZmEzMTE1OTI2JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.xX6S39L8Nxn7uDzs_icGE3noHdszufPwzd2kMAtITvM)
![image](https://private-user-images.githubusercontent.com/110598358/404126782-f88a49bf-99e7-4e72-b95b-e70d32d703f3.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwNDY2ODEsIm5iZiI6MTczOTA0NjM4MSwicGF0aCI6Ii8xMTA1OTgzNTgvNDA0MTI2NzgyLWY4OGE0OWJmLTk5ZTctNGU3Mi1iOTViLWU3MGQzMmQ3MDNmMy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQyMDI2MjFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1kNTY4NTUxYTk2MTE2ZTdhYzhkNTBmNzQ1NTM4OTYwZjM1NDRmNDE4NDk4OTY5MTE1MTI4ODcwMGVjZGViNzhjJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.N3c6WwwmnpsCB2Q8GEl88Gq2cQvGMLzXQ6iOqBAiu8w)
![image](https://private-user-images.githubusercontent.com/110598358/404126834-751f6824-9509-4f0e-8af9-405ae98a57a4.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwNDY2ODEsIm5iZiI6MTczOTA0NjM4MSwicGF0aCI6Ii8xMTA1OTgzNTgvNDA0MTI2ODM0LTc1MWY2ODI0LTk1MDktNGYwZS04YWY5LTQwNWFlOThhNTdhNC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQyMDI2MjFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1jYjM0NjcxNzQ5NzhkOWZhNzFkZTI5ODM1Mzc0NWE5MWNmOTZiZThiNmI3OTAzYjZkMzBjZWVlOTM2NDk5MzM5JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.0cS7IfnOPCTMNMHK1Sl9Y7XTuohRVT8BlSugjuWDsBw)
본 프로젝트는 지역별, 유형별, 날짜별 변화하는 숙박업소(여기어때)의 데이터를 자동으로 수집, 저장, 분석, 및 시각화하는 데이터 파이프라인 구축을 목표로 진행되었습니다. 주기적으로 데이터를 업데이트하고, 시각화 대시보드를 통해 국내 숙박업에 대한 다양한 인사이트를 제공하고자 하였습니다. 이러한 목적으로 데이터 수집, 저장, 분석, 시각화까지 다양한 기술들을 활용하였습니다.
-
데이터 수집 및 업데이트 자동화
- Python, BeautifulSoup, Selenium 등의 웹 스크래핑 라이브러리를 활용해 지역별, 유형별 숙박업소 데이터를 수집.
- AWS EventBridge와 AWS Lambda를 활용한 cron 스케줄링으로 데이터 수집 프로세스를 자동화하여 최신화된 데이터를 주기적으로 업데이트.
-
데이터 저장 및 관리 (ETL)
- 수집된 데이터를 AWS S3에 저장해 대용량 데이터를 안전하게 보관 및 관리.
- Snowflake로 데이터를 이관하여 분석 쿼리를 실행하고 다양한 인사이트를 도출.
-
데이터 분석 및 시각화 (ELT)
- 분석된 결과는 Preset 대시보드로 시각화하여 직관적인 정보를 제공.
- 숙박업소의 지역별, 숙박 유형별, 날짜별 특성을 분석하고, 수요 변화 경향성을 파악 가능.
This repository contains an automated data pipeline using:
- AWS EventBridge: Scheduled triggering of tasks.
- AWS Lambda: Execution of web scraping and data transformation.
- AWS S3: Intermediate storage of processed data in Parquet format.
- Snowflake: Data warehousing for advanced analytics and reporting.
- Preset (Apache Superset): Interactive dashboards for visualization of processed data.
- Schedule: Every Monday at
00:00:10
(Cron-tab).
- Function:
Crawling_Lambda
- Library Used:
selenium
- Purpose: Extract basic data using
selenium
. - Data Extracted:
accommodation_table
accommodation_review_table
accommodation_price_table
- Data Processing:
- Data is saved in Parquet format to a temporary buffer.
- Parquet files are uploaded to S3.
- Purpose: Perform detailed crawling using
accommodation_table.accommodation_ID
. - Additional Data Extracted:
accommodation_Location_table
accommodation_Facilities_table
- Data Processing:
- Data is saved in Parquet format and uploaded to S3.
- Library Used:
snowflake.connector
- Workflow:
- S3 Parquet data → snowflake.project2.RAW_DATA
- RAW_DATA → snowflake.project2.Analytics_tables
- Visualization Tool: Preset (Apache Superset).
- Purpose: Create interactive dashboards and visualizations for:
- Accommodation trends.
- Review sentiment analysis.
- Price comparisons and more.
> pip install -r requirements.txt
매주 월요일 00:00:10분에 실행되도록 cron scheduling 생성 후
> python Crawling_Lambda_Script.py
> python Load_Snowflake_Lambda_Script.py
=> 실행
[Trigger : Event Bridge] -> [Lambda : Crawling_Lambda_Script.py] => [이전 성공 시 : python Load_Snowflake_Lambda_Script.py]
Library | Version |
---|---|
beautifulsoup4 |
4.12.3 |
selenium |
4.26.1 |
boto3 |
1.35.54 |
pandas |
2.0.3 |
snowflake-connector-python |
3.12.3 |
snowflake-sqlalchemy |
1.6.1 |
apache-superset |
Latest |