安全研究
CVE-2024-34351 Next.js SSRF:Server Actions 与 Host 头的隐秘合谋
Thinking
2024-01-15
3 分钟阅读
研究档案
#漏洞分析#代码审计#Web安全
Next.js 的 Server Actions 在 redirect 流程中信任了用户可控的 Host 头——一个看起来无害的内部 fetch,把内网 HTTP 服务暴露给了任意外部攻击者;中转一个 Flask,SSRF 从 ping 升级为完整读取。
Unlock to view this content.
ad8d9422966c73fee42096dad808c6448a272095349f41facc28f3d18d1ee66a0726fb5aaffd9271b6702e0ae53f6961031443030e63d37842b7356b4a67d1f44b648f709f84d99b1640e6f7a87a3d44129b61502fc0c5c728a88c67798e6cfb7bcb30fe880464fad1a2cf9635735fbd6e964b402ea4ed27e494f7c87c72f1c586b333a47062292625ea7240d146fb061f3975a6253d117e97272d7df5aa897fb9fe2c09034f658aae2645a68076992d7d9de07ae63e2fac88f85e475412988dfbc9237686cb892f690cc15c80dc1c718fe5b353dbcedcae354892f6eb64a594a2dc173032d466addac703d191e2861db450df055eda54c91c75d7c649f1157b7aec6db1b4facb116780c52f473ce00e5df5db9aec97e2a01eab2e8afaaf47cb733071a30bceb057dfe7424b3968087078845a4e38fa29d7f0aa19e7b54b3f13a4ce213929dc864dcb0c7a0ff5008ccafdc2fffa203b001b5ea6a85a58a2ed467e07933904e48bc408bf8c1b808695a1d9a5d67d9c94e8eebce22276cc3f02aac634dcfbce4db03c6c8c409daf162b8921487b8841b754868bde401fe550cafa1d5be30e3588d66b7c569e2da02e74ed67e4f20c20cb3321d40f3248087300346668051d3c9dc9bcbc532b138bab676a3dd44c19c2e4c9415cfe2fff351462b8b6f6a60c65daf4482532dc15c489772113fcacc4ab35d819f397d0104891c16cfb13756d95e8f6007624ccd69aa0328c90d7e5f411057bce5edc74dbbcf41cf3ae9ab8db7f42290ed27aa76df690483cb6568d2b6195764f16f438a6b178241aa188c3c93e514538401d6be109c74fc2eb8258ff13e2151b05996b644e3229a84f4ff15456c3c2eba809f34f56eb03eb77f8f766c3a35946545ae8dac8edc36b175fae05d47bf7e97390bf4db0128156e594d91fa8b9c493f5baa6e72ef3d0bf2f0731a13914cb5d002aa7580e1566d09a4cb77f2d792c1619642b6909bcdbd778c3f54371bc6036ec76deadd5e741dfca36c47bb443bd88e8f944aeccb6840efdb64f3f1b518e7a340914d77c7a0799b05b9596706ff6fc36930e6a5b90c1e5986cc06569587375a0d2faeb182aeaa093a17d622816558db3395409f2542283cb696e51ec23fba9ac9118d27398d4eae8e262ad2ca51339fc7e05cf6cdc4988958d9d424c2895b05f7db28cd16796cdba06fc9806770ff104aa423332ea90d37e4c72571d8c121d1d57172314fba2f38f5d7916595b83e7162746da1a6f693885d88d09c2b5a17d4beb0a4fa46578327ac7fd4aac5b407733333ca835efd0ea5a00d2cc7258f9aebf231801ff7b384fb8d59578b59324e374d129c9fce4bb6ed7a2386e5794a5d9e55221a127f28dce1fedf87c1ffbca1b61b5f555e6c96dbd5a5a703503c250df7b9ebaf5eac19a0a495732c2a8f7f5d05e611c8bf65f1d588ce9b161a2cb40011a4f2f3e247e4e277db8e1f4da7494976775f1fec54ca41fac4537d7593ec210d0ff98aaec0b5360d4adf41582937e530d9f2b586de54c8e632038524d267f889f571c8e33a42573644202c9b0ed1d5e0ac31acc4615d166fc60cdd4d3c6ef666019853cdaa09d3977df9d21732dd33f39d70063e90c811cfd6101e2456e4564f5d95c2ee3d823e880d2a4d3b2c34cb66810e91e92c6e3204beff6162a472a75298a8bc44b749d025ff5b12bcd59116af869f906e5aa160480d86baedef608fcd2ba4abbb86d7bae936cabacde3730c1b05541f509ee0da13657fbc31c33c51108d2a487efb21c012ae8f68cebf687f574a0a282f782bcf2e9a158a07c0b81825d8eaf16a0b9a231cc9fa03f9ead3cb5bfc1508e6718bd058059caed234e53bc53466c1d35e940a84ed8aca8930c995d6495e430e0a9330f5b7fcfc944d9d95060f5eb289e60dc1c31ab388a7899688298f86d039dadd7bee0a2a36eaaf15583188d429c0863fbb4b3165b4c2babe3d8feb2578cc08f734d933d36a5bd6e350b2c441ed2b5f1919010027efcf3beaa7cdfaf7e4e7c9abf61394556a3030aa09bab5ea3e33d8e7358021c8eba8e07f526de9af3e08a89455be7a38c64c8eee1f0ae2c7c76a6a38cc6759b5a90675fde5ef1ff4551044fa2658bca970f888f2325cc99d5843244ed7f9d80df9df4be4641da228bc02c43a0829067f7437d34a5523c0b9f03ab6297533365d27135b1d091fc54c5c4040218ffa6dcafb8913b9c35992458cfc08ea7188a8947e97c21cd307b1f3580196e0c0c7b7286b4857b4b503c412d487f9f865e50730a9983ce2a90717a4a238f4270b2c14b2ca339257d8371b7c8b9be1a3d0769a5f210f8141785e439235e01420fb42a4e2c9749895ee6f1cd6ac3d2f54a0bfc13a2e1478cbdd3ad51efa4d3c617ec156ce0156cad77f3ecef41dbbc0b5d3d349a8b07207d3166496c805fba0f2a6c331da554ef054f5e699849fef7b31accc6770f94a1e79daf13ce72a7f45765c48f386b4ae76e77197fc1c44639e888baaecc88036494a32c08b82b0dbc6c88abaea8da428a38558123f975b4037dab4fd01e051482de8ea78a2a41ebd52c2030ad4c6b419b847e3f180ba4d4c621be2a44493c9c216436d161f32206217ecb8cec771bc6fadec7f512203e6b5c881f60ac53f0710f3ea05ce677f4fdc218920ec53d354b8598a934b913142a7929d775bb2230588e2a48400dfa5a96703c44e9c6e307fc1c0d3ba24d38193fa8b4126099277cc508592580e282e4947c189a58820cfa669b84df57af5cc8241c7a1ebb0cbd80fa61dbf50c70c0d0eb359f3505b61b025b1293c3dd2e4ad252278e190e43666627ac91a68a7ceeae2f7cdde83184d61649f49a66835f5fa8fbb55f508f969feff2f6119a377f5ae0e89c7807e6bb2f8373a60e4aa476424af6cf869480b54b71e64ac28b030ea1f59cc714bfffbda04c77eecdaf1a64196f2ca2f82a807644843a9a73da31c39fdc5b3fab5a2ae33a925471e38e64646dd81a5859830563dcd0fa9856cda12f13d005bfc313669b0f7e3d5d620ddacb1e81a3db7dfaa427e5355937b2e5264627be9f9f19ec6b6f813a8e5fdb5f971b48951a80ba18adceb767964b03a278d7d40b8057da74c0eba1e6239144fd08fe7bb4f1029909fdf944b7b963d3fcfb50d4f86c9c81611365bfad7582ee7f3875037037fdb2f66af61037c5845512f65f1931622deb27416a9680fac02eaf2fe4378c44c92929ed91a7d87828bca06ccb5e7c46576a034b4e1f1efaa2d756bfcb1ec19866837ff359a108fbd472f0b69a973c08745c1ba508295c97f1c55c7acf992cdb6dd7848500e627c1735182f8691e9ac2802271971980217cc005cad59cac7fa9d1846747d18aaf751ec247fe417d2328a7d9378d1ebdc5bfc757019d97116a64314d9ca6c0463a85ba3a47d559665a894e2e4d6aebabcafe2b8aa4977ddaf171757ed7e84605a878fb77fac1fb50f824bf7c4e62cd5876a6f94cafb980a6628fd3381107e748b814b62419546e13c61f02507504c6cd1b200f67c7aae1e147c30b30cde25e66e15ecadcda13e8bcd58ad4a8e3b1f2ff658dfb1b5ef88e594d68116a53776e553f7a6e6a272a363fd8dacf3897227671dd55a1b0fc3cb4c0dfdae017263d5c30de70fd6f4d26cd310759921bf3de03098ffc411d2ffa9c29864c2a690f8e73e88d73bd03ed1aaa2ac8f654eb9583dff5e72a6911d43e432e338f5ad30a5071e4e6b2f84a96d51cbf38adb81d5ad30faa8aa3a16868c1bf8d0a273d57e3e9bfb5372a0b8009180d085402c02a19b9c4cc7a26d89f625cdf316f061338c14539963448adb0162b1e25025653a98675b6a15def4f16ac1b2312f4e21e72de3a3870e494c2c39ccabf33145737b70e0140312fb46d9a328c9695c9007b381a8fa63a7abeee658e8a9ebcbb49b81938dda19698e93acf4fe1f511e4f99b657b00453921dfa4b7baf726d4249d7377c1151d929d0ece4aaaa1690bed5e8b7d96a7c9c486db3c4549e4d07a80c6f1cb0b0ebf837840ce9a192d6bf246d801390773d060e12be05045a7b9cc6943042e345e15ff0bde1ebf2e9bc31ca51e771e487b21acaf16fd27b9e97676049cb2760aa2d7a32c7c5409f451438c06b0c70c19427b557a987fc2c458f06eef9f5ec74dc5eea08a4bf5399f50144aca2785afb3e5502ef3af9c47061eeabbdbdfb68eb9fb384745a8fea40281c7517b541dfe7de1eed479648d7f6ffc14166e9ea006431d4faa3facebedd7990d969194dee80183495c922e49b26dda1bc06c71ff919bfd6e2f5218ddfdcd551672e6952ee38c6e84e6e12d9a4b0f6e65a7eeb2baf3a2013572b729547391d659ebeb8173ad9e893885172aa99b9da6ad81eee79278f19ac9dd24893bf0cd2ea4f2066b0a29dbc011515068e04465903cc2d4579f08a3e0b0b21372b178b1023512bb7987d9d6100c3ba2436a1a6d763830472b14bdd8983ceef4cc4818181f8dd3ebc8377f0ebbe2b01171831247e0c957d9238822b1b70f3bc074b2e21eb5a2d9b0c3c0b078823921b1b87d953080590c59865cd8b75c1e410bdea95f4532ff12ef4e252eea35ab60869bccc11f2cdd4e1d81a1245432739f1d8bc18f8c1b0fcac1cb31dcf36369f35c1bc2f80c5e46dc4d5567a467c6b0a9ada52d23f23a894350963ff6979c128ef2afc7bfaa49e8a50a3e0399fc76df1ef629b1e238661ce9104f4d7b45003c1ac90d72714070f77ce8bc544c716c6b0e198f6cb4141c9f5c94434a65a739207686fd4ee690c2b4c1e3de14f741e882ca5e894d4452ee6844d689eb9b511a4f1aa16e028c4289ea9b3d70bfd7caae6eadafaf002ec0b54a53933a51924ae793748fd8fa7cb884495c323e9c24192f48b49ace070555ff410116dd8d1e4b969b39c1773720e0604aef6b3680366004a1482a1754c7068c2600300a59006328299c391f244950381056babc1c46c461d284b2796ee55703cd5258e5e30650e2537d003a4a0e28767439fae59563fd0addac18db87f2f6b54e0f57b16c60835d8f93a1091edf3664bf36d330c89efbc66d6d394050c69d2ed7386cc45b92e745655635f51b96a8a8110523bbbaaea087cd5bd4c9da7e3b417765e9863a12099ba7b80f29bd42c0e34d5810d6b9d8fefd024edb52c3c086cf6aca0cdcd02bbb70c73a83fe3dce657254f6f57418b7d651d0141fcad460ba5ec86932e96fb2123911da36d3ce52936a4bf6ed590e057ab94bee0232a4e73e601c6357f61cfd91f5a04d50a3d26ae6de9f753cdb48d6f8129b17e6927cbe5ced72dcbcc92b2dd0dac043369b4cf8287f022a719caf43eb27b5fd0540c33ba4fecf250b889e7a5c34dddb07b0b87f165e5b754622b299a3875f0c154b3faf26066960a044577364d3cfa24c94bcef5e18f9943531f9724d6485da2327cc9f943c5e50f1eaf494b30194e4d66a1210ab75e0c0b8f85531df63889433c70456d078a16ae47f226484fe7dd566261898b860cbd4b7dab26750ffa033433609f0a6b00770365a3c805e2cbf11bdba0a39cc84a9c6c5039e2552a013a9a8ba90dde8c88e09ecc66e299d96ebe0a75e2e443ff51e9cd91da5d049cd1dbc475a6bf82f8b93c8312a90c1663f3cea8aaa104e9640a9d44b220da8ba00206fff97d4717d6e3c001e0ac48ec8b5b186a48e732a84115321d109a1ae83a13be0fecc44d3ae9fa9c8b5c1e70dc82b40ca4c10e98590b4ed74f395c375bae9efba82463a897ee0fab95943cb05825a46c75a6bb1b24633ef866269bdb4f8730760ec8da8e11a5e68ba5cb8b10ac19d1125d68940af8aa165ef10b39d5475629918526ff7b37e4d68f03a449ec1e1f298b42de1ea0dbce2ef1962d1500fa4dbc01981f994a49c042abf942d4054d4ee4e4278ebcdb0fc7b53d974a54cb6338447f0025ecec6bbebebe72048ce7abe1f5544c0ee4835757213f438ce34f6eb611f640f3bfb7a8a05b2e7334877667f0205d526bc9ca50a0d277500fe3e17b5d3a5348e882ec8db9d83508fb6e1d18fd40ce7cde21c77cfe2d77ee4d599eb3c997dfc3c0faa27c95229e978f646f7dbd619317d0b228769d70677d17337043c3f06f5e2922dd88073b338f612ae4b1a039348b26152b0c4b2c35b061cfcfe6f51279392f7567ca72352b0485a2f54d003338f4d96cd4805e4a8037e5d1bd25dd2dedceede96589f08ea4b59c7e8d6c7641afe939e94c2a093d4865aff70e2d1be6e0ae479decacd10ec41fbd4bb9f28d714020a4e3e87f15698165bab2190ee73d3f068c693e6f4cfa295f621ac43dcfae6fed85f9540090111304628cafb86c306de2fd0b44b3156f0b7fc6c2f28ef9b48e855beef91e386ef04d2d712dee8be586df6fcaedcba519a7cc752ff5ce64c0117d8ab170762c2f1cc69df9590d80dba241cade85c0791b03e8e84063c195d8c9a55fb84c842771cc599de1691c9d1ed2d62963ecf91c1c119dcda89c43ba0520245389c9ec93e19571f3aba5dc41b5bc7d43648e27bbe2e20fc28b8fe6b84aa140392055eb6858b742ea9b75ad1c9202d0c42922ee3792cd66b0c89ab7d85c7301a8b54248c0131b0b726ea8750e9499b85f0eee86e067e41aa81f7f6581a74cbd723ab406ee3f6838d4ddb556ab7fb0b57644905c504d78964c936c56a4e3907a772005dce0b15a0d791af24cffe7cbb017a275c6fc015a4985d7edf6d735a0cc37c26231c9005887c5f25b54f04d49b7bea4a06ec4df9ef7238325982a273493bdac7e71699b4f74b0929760c626f8fa39c388a7c082562cb7583f6adc37f7445918fbba92638bd38e94b86626f5bcae9d981ff0ef1c508a2b2dbaf407dcd4832c586119f722121ef4c5c988fc641d677332589d9ceb43548d4ec22e20b69704dca86c1b329cdcd3a1851beb72ca2ee05efb38df5561f943b37c5e4117e12e4be6390855706537c216da1ab671ed3ed1adc2267986e7aa56a51e2fb0e42788e785665f6447c2bb86d7d04453d4b0677b75a9f424acc2885c7cf047d07f9b94fc7a0399ee38b4a3073a6a898ed30c668d5c14b57b859b46acd973e695fd862c865813721684f92b1217b427c1eb4e185a88c37134d0732d26b1eb80f3899e28d4e171b7e952aeb620722d0b39854a286cb7d5fd92d0853b96dfddfe34c35e37242093c67f0b2a7fd612d3ba586bbe54cb76f9440621bef457f4353344589e280abf4ea113fa23414f675a277c3a8de936b3528f6007eaf9d8a664674336e2e6d6a717532e4c92b07e767b01640d54244ceecd545b1ce99c9eeefa37e8ff13bfaf0652e2b0931b062ca7d4653cd04ef2c7aa5ca15d7a5289b2b4585cb3a8309965a1b1699850951f226001b27b8536090058b2ca608e3a9ea432b7c360ca9e11d272f7164d39d91d788ccdb6a82e7ed3b890fcfabc866a6580ed005c0e697d306ad2fae660fea14a8a0fc3dd18c494a1bc647b76a2769c33c91c368dc972b3321e3bd923af91896aefff24e25c81ba430d4c622a17a95091cd25eba851b445874e5c1dcf846952451ae4bd6341e80970fbf55aed9940f46b1bca4b09ced6a0c41fac6c4753a51b8b8446e8558f0fa66a88a5d85d95ec14cbe82d6e74572cb2e1fa9c0acf34c99cc510dd0ea9d3ada50b3c7afa291546222e479679987243550f5f3c0de9bb410801e9616567731e7a49fcc287c0f86b32065ce8e0dc227749a2509e15f7943d95b81680d8b4fa3c720a871e034094a7e850d3603eb853e8e38ecd2d9f1122200fabde7366ff7e41d91dce2e128cf31072fbd94b0554804345d996d1c6c8fc9cc40decee140b09326d87168fb2de29ec2e2a1fccd044cbc0f171560ac095f9de12378808f5d15252741dab45b4dd045b623fab6923cc385649fd33b395b7c3e67a4da3a38c7eaa9c047dace51696c2371e29160ade67dc03a8045fae676a4fdef8c90146329ba17519815c985b9a34b5986317e538a153bffe127f6ab8a15f4b7351db9222d77193da8e7ef5825763f6616675814e27318edb5438eb995229f2c449e39daced7a2b55cbd706348cbdeceeff3b03fb979b4bfe7c60e2f1a5029a68ac67d82defa5ea8cf78c6fc87fb4c5d11c147713f13e3aca98bf0e3207bea8e4d3cfd78f944bce8c4327803a96c6ce418b32ec76fdc6a73c4eeb135d00f53065c97018daa263d6d9d828e06fffb35e27d04bc51b66e9a9e566e0d6ba21ead629645af74a4899d93b6d7d56f216dd9f5af69b8c5eaf823602e11f9e2bf05b653cdbf7cdb99ecdfe3cbb780bb26ee18297ae18dc9e9087772118923fbacb7b1819f35bf4f7d71e655589e57f68f246ff11c6f92a38656bc7991edc4cf5ac8084728080dc876cda011c46231b2f2fb178656fcbc73bc5abdef4095f8a0889ef5f9cd67501787dd9cb7b05ade2b3990716bccaac1f89e72a821b962f8e8c3fa15b66f96dce5b46ca6b4d764edfe1da2d5314d3e4b4cc34136b49d8d35e4ec7d06edd168e912b2485aab77a4467e23ceb1ea73991a05032f1fec1ad2fa4102f85afed9acf96fd181edc8b79d118d1108de2786156c871ab918998f7039a393d80d967b4aee5b490cc4a26d1583c9fecb2cb8320a03bfdd466be0b43feb41eaeda1f0f455ccd548d67ffc4e88ea5c9f6b70741ffa1e5789174facbe1c85f5ba71d4e602d9b2c2ad7e35ed8bf9dfd70acd6ac6429ea9bd55790be3581e248d163dbc2055be7b73a76457f77ee088b520afa3b3ee6e3abd8114d5506fd21e20cf23ca6e78280859d3828506c0594a176f6f1422f7ccaef4c27d5495a9372d7ea8ad5a69d879ac623d48d592c231bf60930720fa85c0138426f77749a480f1da26121cede5ad2917a9c0b9e7020b043217f45759e566155d73a1f166284362a6a6f361fb204f5b155db9ef80003c22a72177812da55bd3242fb886d48cae69d00f565cf6c725cf34340e46f4fd2c99eca00f2099a293bbe56e6426224fd0ecd86c2f24afa4afc3e19074d55fa2dfb6a6bceb6fb406991c68107de5fd9ac249e442fdb1c4d83ac142734ddba8327c66916ff9dc3e74a5a6d49c45e2e5c0ea8b930db6cb5a6c2b957fdabb7b156224736599ac2904d1e059a75d9fb650751b2866ac82afb447f57811f936895fa987c0fc54e1667217cb4b95729c01f1a2d4638b141acc4b5a20cb5f1669daafca80ce945f83e6ae7aa173adf29f11b0a7c1c19185f33262ccacceefc984fe7d3bbebfcc473409563516a5b34b38beda9eca1f063e2c3125518d8fdc8adf59daa844d3a3501fa51ed89d2943586309464ae6c3695d28da23b0b2461e2c6d4de0d2de209fec0bb205f86fb8a97e30a78e7bbf237a510e2cad7d68444fbe9d503f097df536ffedee0612093686386bad9e4aae1421fbee2172df059df766c4ba2710bb223cce154c42014ddb68abfaffab874198468f97dfb732dcaa3a2b75dcd30eb24538e7bb4a3b8a24ebd6886d73c21ff011c292d4254e3bdb428f63b1e9a5e9b53d74be3ac9f84744fb3811a13038d561969b10cade64a209c5738b521f13102137269c93a9dc4a049ee84726ab3e70c6889d0ae8026fdb0aab7119b798ac4127a1c0429314a8a2337511205546d7798caee34da3c41a69be633884bf9d75ff76a3d2ae36584df852b271c777684f01e6c0f07b4fed560d40a6c443b87a9aedaf3c521f1175687a2e2984db3a3935e19f89134528ce753ff7721e98d0ec5ff6cad2143c05da8e10c8a4ce8418136adb16dbe10388c938b3caaaf5e15c258ba0fc7402a11e4db95686b12aef221f025e189492dd09ef6bf76c390cabb99b8680a2af04c81668a7eecbd434c82c2f81b561b9d8e6e7a14956713efe696e54dcf4306222ce03f70b89d237480fc336299fbccb7778eabaa6ed952980a8bfe048721e7220fd244c1617d82ea413d3354552a180494beed167705641f42c25191f59ffe75bf26e6c914d3930f62b7fdcb12696b1dd16d2a4ad7b509684cef0c9ed15d891c33c5bfcbf831fcbf11d78e20e597a71d7ad3a8d40ea7a4a184dba737a6e30d86649322719e9b4d80713de65e6461b8b996b025e3a292e852bb77a919670c931852b6d2fae833d1a1ee7220d1696c3b2bac56918bf8a7d85d28fdaa06d4d3b0b346d6c78a870a1d03275933f41b855f2b74034f1fbfd949684b411b72e9d67793aa43eb98f73357ccf305c856713252f68443cc2961e097d0eb984d87ffaad57fb9b1fae8f048f14742175b41938c8e42b19d807654e49c7002e090f87d2a79ad85ad45df886e15dc150a364268b4a499a701a17f0136725eb6c9d51c3e6b7f7b17161b271c347b28f220c47bd6ccfd64beb2f09be092353d9c5e2b5b362050299f823e2b7017649965204d3f0ac0ccad600d63a58766a528f2097f583806b0dc5734cd05de8528bfac40604c5ff7f1dbda25edbf0b91d58afb0c35305bd0cfb8610c4073c662ebe394ad6470d969f184fd085cce1b718b8f72c2ee63b4c62ae15531e20c07bade68f13d76e53ad48318472c5a617cfa2c6cdad85786a4d6fc35be0f46f06526a973f062d8d38d5e8a7fe4cc44c85cc3fc5090f8bff11b8860f34be5d4a700e6d351b74f5499fbe9083b6b07c2f9c6d0d2079e80a263dce00b2f170aa728ad1071bb39e9c12fc9ae6767e5bf2ef5c4b6c1cc19314fa2b3015f829b07de269db9563fa675aced8f28959652c1cd870f5780d034a25eb096591233a471e0e3b874ad162106ffce4503d8eacb57dde78d2d3d4fedd1b52be7528656e87c20e597edcaffa576e262353a9fe3dede9ffd3579f941ddc149c13c6ea10da15a207dd5a85c4bbb0b0313aba3b1c3da352622e2b988acf2f50fe25cac63c712936c598fe285a0c96fe9b4ec26f0d947ec7890a070b90010dfdd94af1579a3100301cb1f207311c0f11121e2e20e400be27d711123644f067c642fc61edd05a32f08fafe143d7250fc1baf98bfa18d77a2dbf9c7b26a5cb061bac68ba0eaa1134aee8a2110f95c4635ea7c635305f10dd0836bb392137685071174636337f8203587b7d3da0dd17a2f562774f9f4a568eed6f0d2331896360ea4ff2fce85ba43b39d31429fdb1ad02b7aa41de1d5cbca322ccff3642fd61a158e84b66414dc32edb83733991851801575f4b1dca67b9f5c30a3bbeceb21d6c748ca04e4e230da2494151b48fe8449ea9f267b25b7fe1f641c6f8bc979acef0a0694e703dc5c45287fb73922e6d55e7002a04bfcc05606439d804b9feb70a4ae097f49605564f8a4a3f5fae822278058a040d3271fc8bc5cdb86a65653febef9e50c81bf061da28849ad81f8dd72e985e6f0775d72aaa4f7f1d46e26f493c093037c2b4315da100c42b98635fe5607075d4d1dd628f05dea223a1a50ecd307a61457b2410de0884930a09753b19684a84b36fca6af092786ad87621a34c81d7de113829aa48cc19889f3e20489427a2d7657e6b2a1ae334289e360edfce5dc6872702ddc097115a01107b3a4adb7c11412552961370ad170ad0b4f3e868576596345f6b2e75488c0ac66c909b499f3fe6b7f781714098c23a87d8cbd040d93ba87ae0341f0907244d23d2156aa0b75b8bce24095fbf2925f47b7420a3807dbc544d1c8819e088c6bf39f1562c3cf0a80e85753abd78a5e48d65d70c8c356ccf474d56bf8f70de599b3e452423c4c63b654c21f595be80f3234fca5f52db3a863b56bbcd9c091d739b776ff8b64ff180fd6b0a009a4d3e50fe54e5e84990e9b8c75ed34f65138ec8f45a41c95b2dba28191c574408c00abaf63b2af825bc2841a6ff9bb87c44e58284cc6d4fa6f6b4f217df96d32c9abf3573e9eb78a480d74a568ccf795a322d1d1237e6421b45c25184bdbefffa9edc76e884042e1c7a05621a9e063918c16360dbb9038404833a197c64bb7964c4a7cf06673ce79e5aca540eb7f31d74a6d288060abfa0a13ae2313d0619e1b3cb1a79d0079bee6d1be5ebd151434c1da4fc09d870569dd2589fe50729ec74d4be7e8bb60fce86514d0bfcf8ab4020ed101a75c6fcfe2162de3729b28a8578fc0311633480df8bd00eb78f8d5d8b963bd4b12c05a1560846837c1ecb8e171d69a023abe46e6b3193a0eb05308a58bd0e30ff6ab01a9db354978442f154c3bdaac64124e5bcdb5d11f79efa223e35fef8ceb99e1218c6faf2d3ceb2bea33f6c99639c91991428d1a8cf932da07d49c345e1b1a77b4d75dfeee8245b09ba0eb4df682e4f69f9cb9cbdfe388092fe5edd602a68ea0ec454ac3c21363c8bb90386735b54a621eb0b0cfa72bfc09ae9867af42b06b61dbdcbba0d8c0bf9525687fc043b2a5bf5f939268366712fa0a8272b1f8ce30b28756a640064a672b8f3a0c20af94fcd1a4a114a01d7f0edeaae6b022297b1b125b4793db86d5dddc521a768cd0a5536d7b866be68edfb1036d308f50e404453cf5e712ae878115f42756328bdc14696ee7ba29d8eeebbf9f4cc2cfca92b89dfbdae923253f1e3b6f8105a0620af043363702ca1b8b0ce9e40b809141d4637710aa4ce82b1fdb28a2bb3c015ca6db4f45a91c5ee7346e5e0520d583080174aea6cabc3f02e65f7efb2d6590cf9f716adbdbef8e78dba76f353cf754fd382f47ad054999ed13e60936a70301e03793d7ea74da3222416a82f38de753988c3076d7507ca74f672f9fcb0e3333eb7638c16c7a74f1b2f48dbf0ee4258edc5f7e9754bd414605d57eb2bb77aade8ade5e5c396b7c4662384e81128de1d834b1a9e8124caedab2abc5c9b91b06ab248761fb92483903c089e2a7517f74e52f8a06cf417abb98cf0b9d3b208d1dc0ec6a289b771a78ab930d6a0310045242fbd1dc68eda4d51f0270161997fe31e41eb61f5ad61e875f55c4c67684458c452f665fc088ad679383fa26ba8713afe5ada96c41449468b2307630b6c75c651b31e5625e2ff5e387b0702462204d776fa0d84f47e81321ad8ec7cd577e73fe7f00c67241f569a7db4cf1e21837ef89859af7be4f3dd1283462da3d1b342bec4fb784f02e3ec7a2b30639b605e2377a2da9d4c2c8db047b2e4ed788f11535ca989db775bbd12e6f326c6126ea9c15c9f0c5f8a2ab342ff25ac6656998e8abd44e6843491de6e13e089a8bb6a9be034e2d73727bd648ab36e23bae30d98e3bb8e5c4719b7350af58071f1b8b4c684f9fd77561e03dcf6937c97966c08a551b9bbe47d4c57f0819ff4b29f9c0e2f849abd3ff62616ec670fa184dfd5bf5fd0fa2a8162d8bd953f2a16727067297f179b03ad39a5be27050724070392fa7e49c5cd9e203f3e3568a9b034f89732a852d80f5686be5a5fe9f81d58fc3e33bd34d6345e9569d30db951775084842ebe68993858a570b8948e8e4b9c3f9881f5761af45e209de6bb7ebf5fe1a3c6e7d892553ae58fc80d640986cb23ae76beb5fbe5ee346204d820fabaad2ddf7dca42a571b81c8a3c6ebb57dc165f952e602d1cee54009c516aef9254861a855fa5b974cb857f2b5cd391ef1b8a196d101be2b4aaaa2255bf6841ed37324935f58c9ce2a4828b636f67ea9a8d8cbb5ce947edd39a45221b38e9d01b4bf7a8e74683a8b8799475516b6e5c7add697910e4919819231c089bec5e760dca85d28a1bedc396648e6aee5a2865b90df0d60e33e69b850974eb78abb945d241cdfc6826690ad4b422410f6fde9c7c37469c994651125cd1118bb244607230a144a776cc7708cff464130ff2f9e1b4329dcd307a6415793eacaf5a902da9a7ed4b69195c7446510f1ef6e3f47e516ff31f463248f033548b3db074cfbcd25e6ba0777836c3116a52d360a1276b3d2cec05626965c6041be5618688