安全研究
CVE-2023-25157 GeoServer SQLi:OGC API 过滤器的 property 注入
Thinking
2023-04-22
3 分钟阅读
研究档案
#漏洞分析#代码审计#Web安全
GeoServer 的 WFS/WMS GetFeature 请求接受 OGC Filter 参数——但 property name 字段没做任何 SQL escape,攻击者直接往里拼 SQL 子查询就能拿到数据库所有内容。
Unlock to view this content.
ad8d9422966c73fee42096dad808c6448a272095349f41facc28f3d18d1ee66a0726fb5aaffd9271b6702e0ae53f6961031443030e63d37842b7356b4a67d1f44b648f709f84d99b1640e6f7a87a3d44129b61502fc0c5c728a88c67798e6cfb7bcb30fe880464fad1a2cf9635735fbd6e964b402ea4ed27e494f7c87c72f1c586b333a47062292625ea7240d146fb061f3975a6253d117e97272d7df5aa897fb9fe2c09034f658aae2645a68076992d7d9de07ae63e2fac88f85e475412988dfbc9247687ca8b2f6f0cc05eab1afbad052d76c735048ec0621ed4eaaf26a59dee9a023f23cb66a30f50b914fff5e5a75302e935669fe01fd0f92006c905c55153cb28858ff3cc0179d4004d7d67932b0a8ac31279410937eb5fbe487fe10986f3ac14eb389cf978bd5b9acbda819f998d17e1af8c38acd7eca010d59c4a0a1c6309d89da68ecd6caf77674abd38e756394b1835e5591f4738bdc53342ea72a73b24b60271d1825ff25608e978117f10d78ee5b454714f2b2ae01e77cc08359196b9013851dc5cbf817d82f59c565abd55ef93318d5b5e86930ad0fc6b895516a9c2e3667adb9e64fd9b5cfb32e33dd522ffea4339cb2ee53ae7a4a7c8e4faf4ae96fb8de20b4d545cd5c6b45c22efaf814489a462217ab8876bfb7bfbd0f734166b7fe4e93e0bcedd9756c23008e2e7970d444d339f1efd293100d9e06411cd0ef11616a48b8d551e41adb2ffd2324b3637683a9c8eaa030de92598bdfa4f7053653e39f3c3faf652d86be4126eced24c04da0263da767936c4be541eaf87af741c550d62522d5d4775e542cf60d51875178950617bcdadde52a8cbe1e387183c379527924d673bce385f85e648c45ec8f682101d54fde29eed4b4903f89c4a6c658853e97496eb088bdc58d80fff429f9bb705d46c6a26e9bae2bc6de3edbfeb9e9a6490a50b85f20bdf37452b5da3d967b37818216f1009652b289c741c1d94156e9ac7914b1aaf5b95ffaba21310569ea70ad82093f284ce6d9d507930c333486c3509578a607c342aef3607048ba679b0e76e6cd0fb34b72b6e609619714a39993350465975a0d2faf7176ea3eac9f46f2b3d5a5792a1770546b5552291dc6b741fea61e1a3f5975ade6b92d9f5e8e226e874f11d73af7e039f70d454cbc8d8c0005f3b0869b74bb68cc46ac9839411eddc05781e7bd4131fa4d2380d2282095f712cd55e017c0c736751a9d0b6dc08355e1dd7727a93de9746d5c9336781c89c01dfb8e42240e01758ec65637ceb311edb34f1e685c2f1b203558fbe872c7ea9afd8aa36b68e151b21d245187cdc774e1fef87fca62ac9728af1b5fa3195e367e4857ba2cbd3540a94890a5b5f809fb9585b671e1e57e7c31cc9d264a31bdf85c342c64dc2e44753c7ff80870004d6aa8ad0e1796593a0d9e4d2096d64cdb087b8280faf7c345f2f3039753d3f757b87f344bd6f5bf9e4593872c961801b9c9f09d7c64cc908140b323747785ceedef932a9a9547c9c7cc1492cee519d7048741d0e6d7d96a95858c765ba39372d084a99fcef024c4492558b4715c371fe7a83d291dce53f6758863ed3e7cf11691a38b2ba995d3f4cf0707fa508d351847c03b0003d0025a786506afb9734e1cccdb68cf5dd0bfbe8cc2a98696664d29db6f41d7617543067de89da2531c54a15f6b42b48a9fdfc01f53eed283ce3f41b269d6b37339423543cba4a2998983f3ec3a585c3ffd62019beef5af326cae112c04e23d2fc9f39e863757220e6285343f69cc7e8be282b3b94b3cd41437a6200549dd6616fc3883dea9db2255f4ebb3174ef0ab68a73210a973e95206a9f7bdd6e8da2081030b62ce594520fcdc866b0c5989cc7c45d88f4471d7eb32fffded39955c85fd9da4166f3ca2d915ed81f30bb36be529950b39aea400ca6b2115f0d356fa437289d34c820408c2da4347939e890c2b4daafcab6c741d3afb1262ea95e68a3ca1e0368486953486f4231f48298f5290db1926bd1bf705e72977385d10258b11f80563af904fbbe7c8665045659d2f5ce51a92b57580e6a1b62ceae002d29e02565583821bbbae7047c647769d752986212e95ca3ba16144501ee69cfd2c64789cb3964cd90d8d57f9c6b891f4e14193d67c6c21a71d0cd321fc6cdd32cf55d5734a54e7842c903e8329e13603b9c6223b188d2fc52de8c0b1f0ff2a6d1afa280739e20d97fd160798ca00e8a927a20a6e69e4c765e7def4b6e1e02696088a5993002143210700738cc945c10384bcccc8b69d77c260b65da4127fd49b7df2bd6b3aace60d892be7097edc3ee6b12439694e2762de9f79baf9e5bbd2f402983489842e0ff1df2781757d3c25f9b697bf399c081ffce0f5b1622e377c09869dbddad56ebedeb721c7fe2f4a149f7b95a4d50aac18eaa468e738ac289a993e504ed633057fa0db43e6f71ce5d30c68e4957673253aa2de9a7fe7269d6a434457524a6a17100854bac8a07223b6b7f25c6e22f28f9f662adf8309f2b2e57794fbc19f9a765b51a912fe3bda660ef2383b961547d6e0881cb07688fe7be2c8bdbe74e71eff0c7ee2a1b2ef913f7c587c519ebbdba469e7bd8cce9b0290a31b6de52919dc98475379ca08a30c4ed219b7fd0c88404946da07b165d987eed8a616c0081c3d071f8415762747b9765b7796d0b84375b0e1ab405aa444246ddcafc16f81c4eb5178c772a13d6f699bc41abe564e5e381447829211ac2c252ec47e810e8547b06c85b19cb33127818a155aacfe0659bfc4df7082b2fa5cf753adf4321314187859631f4188aa554aba386c9e9ef0f0c631894625da73fd4fa21969b51d42d61e672a5da73433eb0980f2b57a0a0e11b9026634b394a78f0d924a582668aee434fb33399f87ac0d4cfcae15ba3462f9d95567b8285e2fb7be6f1dfe36c1988f9c0654874360ad78109fb1b6bd37484179310a3d3dbd29444a5ba7c7ed25b2d9f9d2312688a706619d7201596ecbafd53a9c4108559dc47f32a0a179322407a3156e2937da3eca462a3c10b9baa95b3650deea6c515eaa773907c01e50bd424e7d70fc69003ce702bc539446ea714f16f25935e39ef8a5ac3c6003765b80dd102c945827ad38437c4a420709762702cfbab9461a0a37bebff40940ab68b2d136e8bacdb5b28369efcd02e8b357caab2315cd3f0b2e5b441e4ab87ab4e3b58038e0d33eb6fca569e5537f19ee3912e2a99ce269e40a69eb1fa97b6c4e2d76c17432ed0ff1ecfb9609924f844f58b5813fb1042d1e24451743b5ef16e6c1dc3b8df0a7a445afa4eaf684f70e972d824217dad96273787cbd92b621ac076094848c32b467b6d378cfef20d6ddecdea3a4d8715a8186b6531f0c964e64dee8bf8c7441b9b935e5e4a4f29d3f2831d3c98a7274dd510764a5fdc91a1fe556a221fbc5f78019247508caedb3207d4ec57f87bf63d4c2009ee24857e4b271494b1782385286b7528824246ba86c24ea40fd64e85ca9c1a1efb510504e2f3064fe9db9eb03a3c095dd309e4a86671ebb70ae626006ac53e180d0519324dbcc8f5a0d7c77137ddf83e4a35a0afd7afde7f17564c525889dbc76a0732bd287c297dba278b2e7ada7b4a1e38267d1b4e04058c0ec510e8a3ce15125a9c02fae93309bdd984fffc533178cd56461304e53bd1d012bf8c217eaa554a4cd03173d0c8fc991a4408e311f48ed80fc95d828289657e794c9d7410e954f3466a9a8a20836f6d35258bc6244c2180d8a6993c755e4ba5c1f30afdfec0e0b08626ae19f8f2e95511a8388ba878cfb7c5878d46b1f17aa220f5a951580e6f624c17cebf05db8bfc68a5e0e3092241774fe9c61a495f4db9f1ff7c553052acaafdf00daac9c1b9fb25b716f83d450625808d9cf83a02393a2b26983b4a61264cb609e9e3bfcbf79de23a9360fcb1842b3f0a92a1c4181a8868466b3f16b851eb34727af319219008f922dc2bc22202bd13be15e39fa09e87934e612cbed61fc2eab5a331810a6a8686b7ba52486fbe38c165b38cb51fb040e050f2956fca41abb686c8bc425ebb539c1fab6d510fe529949d9788dfcd0e2dd061f83916f09440ab3eded359577bdbe1003b9da68ac92f2335e2205379537c846fcad8cd159dc2c759c64dc1ab2e0ab675f048d9ebb54be85963630bcdd9077227c082f71c80cbcfee88a4b6565443aefbaf12d54b96a1d2ce08fd1c061397940b9ca57182c7ec68648caccccf45beac431c19089e690d08b6b523c9285ec0544af203c6438c573d646912288cac8bfd664205c8fe827022942b60ab151e1aa81f878283de351c49342b4793cd9621c09ae25f0bc84738119a5a1f5891436833d4e988c3d9b4abbe9435a4a7b9bc1ee169d9aa55a38d8bda83d41945eaa6ddc627d6824abf225d9f5abd033677952b22e32be8557857840dffe558c1fa58d973674029307c275b3053e99bf51acc9defc8d6f622c3868127ad0b49b08bca19cbac311ec2837fbaff678d0750be9347801d45ef754d79efe6e3ea50d41176939d55cb44aaffe7ad4efd6562e6bb95a24373d4d576f304fd0f7557ea29f821dacad8d07678b8fac94832dfadfd80420df8d5a00fd3e2eb849467ead0021ad3561487c91d465cd7340167837dc0bfa3ade6e2ed1244804853f454b1d0d4951e39211a582dbb3733eacc42bfdb72ca04b72cadadbdd0ea63e485d090ab96f3ea26a1c4e59e8276b5372196eeb9a1bd82d166ea45d7f903f0a574752630edf2e74910cf602ab4b481a39e40d55cf3dbc7588b584548a83401cf86a6844d1a0f59bd6c58a14f89b29c7d7fa6c1ccb934f8aea64f77c1b2094fcf39558109fe8e2fd4ce966cf3d25c223a3f880e722351a981dd0795a918d5e7864f6eb9dd5060ae2ac8b3e90fa5b435e5cb27b9b2c43786cf8c812a0adb224e241a1700c2c1c12af2f7b7829ffdc39e3d68e7ca15ba1b7048ea9e08c0d16fd2a90be3124ae21e5d331c3a29356e652ee6b6903b64fd3538d61c0c245b3c92f2df7885e240ff0a407acefe1fbac46a98159d6c5d3044be8af6ada9465fe612fba242bf5a639e959398136a89d2da3694835f395c40431fbbd4fee45e36242235fded6c474edbe4fdc7cf68d72c0ec8a59f1b6138496ca2c92897050c5744d01785384d9f448659e44f7ea362dd839d8cb0761cbdd01ef21807d0952e8a2f63d3dfba3db61a230c9f26d29ec44999d83b029afaef02dc1fd22477a8fb752a3826d04de177641f3690af237eafa3edb955029658cf8238a55fa18723b058eb3fc3be8e6448a81c2996b243aa51fcaf84e393595084bd22a4ee0744c470d6ced8290b9edd6f7c3493de06b48369004f17754922226e7913abd894d3e62fbaf90a1ea841452777cec9db14d5f22aeb8b2d30abed7becc5ab0b49d5d85a4c6fb7dad6ffa0ebdbe25589e498350506a070e4c0fbf807789031848329c0041b8478a063a806303fca7ab93be598f0d7ea70dfdab7deb57625fea47cd2e1c8f0edf991add4d3fd14c5f852d6766d9ce232254d4964dc6eab9d5d936741720523632e448b3c67ede07c100c042d8ac98b97009d7c027ef899495dc912cfbd8074ef610f02a6ac4130f6f5d461614fa2a05808afdb15750cbaad113674ee97c2607c4a5f40584a433a01fbbdc9b79a0377cb11443cd11f8bb2a3e8b728574aba772a767a9da0c1b30fce1a12c32844a5c9103b203cf0d0e779a1c8da9ff183f179e2341eed7e74ef6188c29b15ccbb41dd144ebb0f9da9f092f969002fa28ae0c1174763fd994067c32979451ee2ab6b89e59b59cf7e87a2464953a832684fff935b7fa721dfd264236c6925b44acdd35d380e0dc6c428bf813df1d764d47f71440ad9f52e4591c1941e67b2a6e9302d3d2e86962d8c61847ebd4cfe60c2bd4804416f10264641da639476d3a60263caccfcaecd668407bd7a26355f258afd3bea2ae53f47c25074607e1508a035a29eec98e7e9e0ed7685e94e1565c30e5ef3442f3d44ba64e2ccd088c94d6d3f1fd59b0a64299369323b7af53bee0cc19c4af443a7fb7b9d17801c3295342d7d532206ac1781c304f0deffb5dfc93c754cb86260f45bd433f56ec0eadb09985f5b5ea7deb2a308068b2922ee89d417760fd0903ee796108ee682911bd2a67a9c5336b18871738aa58f8e17ff423b3d91a6de77b54de85c48d6a0f2d7301ce3dd98c4407466565df1d22abd95fa790af22fd9c1c005e750b2fcb0de0bdc015d65362296f050961618bc6d85f22088bb638f83ebbc819eb0df219644d2faa8e4de449e4d0d1d1a3657789593cf8f53ce3f889e087d45e6a2a43c392fe89b5f8c1aeaaa9ca6c3e614c3d543da211bacfc03273d024e9773919652eb54e2086e5bcab8001a7596e7d3279dd09bcf49e1764db5b2074bcda46cd4d94b6c7d098e847ff6848016ebcb10467ea8dfece691052b0cd6611e0836d212260112be22aad7c0ea46541ae4baed9bec33cf019fdd195d9ba053fbbee89151a5462bfc5c3fde816d89b6761451daa97e7055f5c53c68134a9d2cd648688b35d1061dad215725c52ed124ed4268f9b03cbe1ea45e831a787c0a11feece0c67d6c3c299791bc0b857aeed7fd0476484acf33a72f908634ddbba7953dd28e409116a52ba2c9cbeb2a8292fd29f9b21959d6d22d91fd2e269de3f1bf8ee87afccc501f913972411693eab8b8d56fc3dc5a4f3fef0201ca94fb1b8d93149a672586f2dd97cdb0754f24d0dbe8926c5d79a2f3e1e0a0b2a1312475ae55cdb6ffd276af3b067d74db4325e99f6c089fb532ae6fcd64bb8ed01c34650c72a33900e52c7d2423a9be468fc74951d941c08be762cfd84f5252f63f32093298ce90cf767febd01ff8710361873b61137ebb6429a6b1f17fc5778fb539c9e7205a872fe13448d0c8574116a6ad0dcbbe344216620b04f4fb34d71b0055de2e33df7707ce3237e23ea691eb45d9d994788c90c618cfd93e7de8fa98a43ae04efcf409bf174c1aca7035edf100ee921fc7bfdb33733cf0ed8fe46cdb30c5ce414cf017f13793c36a2f0e9c35c02dd563346b06ceb3367744770eb8bb8fab8422430f46618e3e52e56c6bdaaddb4815076bdb3cf86b5879d3f4c758e885d96e5fc53e4fd042a87d1000c6fb55bdf78ce1d67e7e1372bfbabe682839cf37f97792586616d319760d2d641693edd9a9eff71f23a57e4db93af975c4a296fc28616cbf1e7cb8c69d714e2e3868393b2f2b56322c56909923853cfe980ae883580726c3116251464f706d8be18e38eeaa27283d0e48bb65df745130cd09bb2c4a9be05c84fb37de7313c38135b807cf1b565a99855c05f326180e27b51b719e04893ba457e1e49217013c764c83c6d8e1d7e38149c996d687c58421c56421c80ac8322812e54ae5911f993c83fbd24bbc23aa791ada77ecbafc5ea7e949585f9d07f63c2e789168f4ba64c087217b09c9bddc7bb45d8ca391f64621db53b075969514b67e861e4cf82df3c15e03657ef3d8dca643c0074ca516932f09d4d6288062d2d2f94a09a3aca2ae96ed722613b3d5cd773d1ff7bf382b971ba7bf2fb9954cd0841bc656bc98aaa2173ac13a1ff7daadeb4cdacb0559de95ce738c15d1cda4b1da713d78af757fd3942330518dd9dcc5cfb24ff84ddf54182561a4b0a4c239700fcef27b2092ed5991273dd7644ea43853678d1d8b6418995eb8de2bfa3cfa2a16012089116009e78d73b610da9adbb4102306fbb6fa732ee7997ee5e8a99a7d8a2b1e629b92b02c09085f1fd021554d88cdca14feffdb64f6c1699d1e2cfb6cb6ca83a1ead1d00418e54e024e4eac084896a03a7598d219507d734f90e7561ec93de066a8b6c673c3c842b1e23b6459682471b2dc3f7dc1aae6d64687d440697b386ba7c5599fd029d83e9e16fcfb38fcb4b5d9cc4a2437ff14418e09c8ca9da34c31e9702a549d1d78eff136e78c8416abaa326cf76360323130eaebfa45435d3b6a173b5714ff3247ebac5388ba8939b76307c7769fdd85f1ac0ed548566c819dced4d9b06dfc3ff1eda2882525532e33a6d19d18cdc5fa44b9d12794aefaac1b53509214396b0186f8ec85b9ac2f29afbd5620e27ef342e7a081722d11d12f24eb5cfa698026f5480a82aea47dcc0f4412079b1d8fab3436268494d111e6e823d50a62cf57ed2b80994b71106cbc1ff33ac24db378a688d687ad9cbd7c2047d2bbbf79bec1a5e075531d1ab5bdea0af90590ea228bd59bd980badbf2dd07d6381c5be6d192fc32777b169f7eefaaaef6df813cbf457d2be55e5d9755b9ce3c39a6483fd2fdd71da431c8efdfc9509a29760f7765b10bbd8757967779bfa0aa47f614e2a27ffb2be6870fc6a1ee8187e4f4c3577518c094c8acb15780653789737bc0aad1e9df30a730a27eeca2c4a703bc08db95b1bb3db4e6c433fafa07a78b6c1627085cd51d5a89dc9c77a6e42d42ba8b3af954fe4f02f171f4022f79aaabea32d7532f4b7b4bbc0489a10d0df45ce596c4f72c9ecce29effcf06910d428a62890e308963b648ccc33c36b5819d5ad50550ee5a4a09ce8e3779ca8abf9f65f77c107ef08f0238b9c86cb84ca7a8f5a2bd169fc248b77afe51928a37e201727607be3b36ea0d23a3ce639fcfec54f8e66c818e8a9c5b56f7e3f6b6cd64c25b9d7ee0b3bd1d3c09f14e1f56cd7f72ee654fbe6c7db21918a53ab3d1c965a2eaf7f46e59cbe419ca4029834b67d468923378020859d3c1971b99424f4e3b433114e0ffbfece87d5495a4722974abe5132ac56eae3d6572db82d725aa73b9076ebbc8c059d73bbb6a49dcc3b494725b50a8ffea6b56e581bbf50b0b04325ab10318a12713592ecea97c02432fe7fefe33be711a1e4b09a4f3f56f7d76f27362a73bb14b8e6c5bf985d4caf269904375408ac84bdd313e541bceb92980ecec5110b3a293bbe56e642b6b49d0fdda2c263cf8e8e193bbaa109007f6d0e5f2fdbf76b656e706685232a1a4e8d3209e07e7b387887fd650290791ac3226719d7ca6ca512cf1a89ecf47c8e58eabc69058f0c918712b9d63a9a17b572d602a789be40405c1e817a81fe1f7043c582a4cac82a9b047e33a0b9060cc53ead185ee44f3727341897fbf53dc05c4a6ed3a9b3d69e213016ac023432594a385c19dc03ce7f4a767b828e1b4b545e2bad0bfc18de23b48ccac87f988defe2276acbcc94a0e607e361eb0d72a81661a0c3f82bdad9ca593ebf6ecaaa6944bc2f2038ae14d1cb900d69f420e141e010e1efac76e172fc66dd3e60e4b6e3e24af9f8c5ae7eb15a316b601f1fa307fbc8e7dae63701e4d078d404f100af3cd4c3f0970bc13bda1a1441d447acf743fbea85fad5e17dfc72f20cf3fa5e469a7cc0a52fa66238f5d1a1e421d8f32a1a1b2b3dc3ef746a594dcb7ba357bf0cdb85129c2dd2c2cf4e11e6df85ac1c7866df837d076fe1c08279aa29559841ac87478057b58f331c37fd1c45052877d43a1f5b66ba50867758a94377e9d61ba2bd21f70614d4840f8ffdfb6474a8bf14a65b72b759209598e07addedb79da1d1971426ad0c776a410d10e6d5ee8e7e082b6f26eb103647f867043f8b2f13e6b58220bbc48e2646931f09f9ca818a83ec06622451fc182b1350bed90a2f02d2ab83bd50a684ae736406025e1a1fdc62b6d3a497ab2cbce084e0ffa4b7ec67157cce3d779b3267bb4fab9738e77a1909c0df8d3b67689dbf40d880c903a0d1e2fa45f229ff3983f02ae1e2ed626ffb15a904d7f72377aeb1a10db7ed415fdd0c8275f0201534127fa0bdf8868621f6a4f8621b03701be72745e727d301f3379fe436d57dc30afece74aaed02183d0354db503cbb77d2a50a2bc7a6b44e8dcae495ce6a3551a036f2b8d3e546d937ac571866987d282c88f5531a98370665d0fa53f3509110bada708b32f2cc904647ee4296fd5891c98a6d0199ff3f7210fdc8ace533317fa5c3ce9310bb7e1ac40ae855237ae5d59b2dc7231fb680bb3f0a3d033ff2035357c902110774c49a7e0824c40cb4fc346099e97316907796b61a019cb505911d40c993c2c67b46b69beab9865d9cb3cf9a4d1baa32054eb8b7cc90c3d5767d7e93b4b71352a31e924f1d2297dbc3a52a96bdba45b26f8771366de99a51b90308f4a7b2c817bedc02debdc7f6301c53b666c673b346996cf4a07ab8d014564d21609e83e3c82683a94ec702367273ffecd1758f78d31e28ad4e7ed2a4d3a32de92f6cb9f18941bf3b9f65d07e82c644ce26d100d81bfd102f7e7da178205f1056a363235f6e64f9b43f73a03c7e0d1578b771ea07cbe947bb5b39b4d4d2a6c5ef0ffd51228cff8bf20577ba071c77351c35c8f9873c53a52666e25ce61bd320e29ae8942baeb2ddd0a9b16457f0663ac8c7fdb010f9b717c70b9c7620e0f858c51b54657976fd9f4aef17097d319cd82533faa8910445d06779839728de20bd8ebcd6a8da897e915a43b7648a371abee108eb678ea0746813647713c721ec285c58715cc4f1ce7e286e63ce6de8301f905557e60d457a85415ea3c9ac21f37934a1ee6d8c032063188bdc195ea28d44f59a2e3ffb01a66d039487f7928ebd95fdf01b8d447947b8ede3614bb83c8d8095f629c948c2b7c88ccc88b602bc178f9abfe4aa4548174a9745fe116fb9f06432b735829388c30dce030019db7830796f554ae8dd0d2eaad0aac4af3ffe9321bcd8a5d297abb53ec7e42232398742bfd347820e06634898eb54b785ad1becdae9b667fe733305f3ede6223d86cb959f33278d313997af8c77b85020e20769cb97ff5f66db61a272925988ba12f03aa649e8371343723546c49edbcee062474c638b29d7ca3bdf15912179a0a04d79a06b004c92c026302bae54e2c497154124d6764a10df06883591f6645e37bc242c861edd04676b9d9a2a25bcf2619c6b8fd8dec19f03462ebd9766ee08a121fac3ebe69ad1103b290f4545d9501d3d16015e07e14078e74289139212b2c1927170577722ea5561f28663cb4851cbef5623e0c82415184f6694c781bc0302eed7495dee86bac3b24d24660774a4e47e5d24ece1824c23caa0378c6983b3e9c20b27f88e6a008e6643ca9a312539db087ded48218a230067184d86a5872b2abf9402c94aab0fa380a4b4ff89eea4e1b7019f646baea310cd20e1d221452521440eabbd4699cca4d8fff39d8616d54e40b2d15312ded32283ec815f7ebe8534cfcdca398d4e2e12f89ca973125f4f4a35f90b9e8fc5b1d182c31ffef8aba70243df5c81cde62e90389a2df109ecc28a67381b2b453f165cfa9cbaa5bf68e722b5450f5fbae8a22e511ed45bf90bc649304a98cd3b6118518de35cfff1ba453560d31796d77c367e38e606f7d7facc38208f417f8219f971229c220669b18cecb73bcdacffe4309cd4e1dd7fcdf61ce672984f0a3c7933ddfb93b5269fd9206e3f45b219399846b3f037b0c29246ad6d9e840328f73d3427e3f95253e1eaf3c69ca584439704e13d334882abbf52c9776aea8bdee6009c5eb43dcf4afba55b5b564fe22d3d8c6d18b2213bb615acbe073d18427461bb67d43c81c0308f20eab34a989f30db52745031a999b8edb9658e745b0125aad23052106ad2dcaf4343d904a23289cec2dea2dd734336f36ba9a3827293c6052043834e8915ad0da08a96e420af188459886601b908b54043f44b1653adf46242972