安全研究
CVE-2021-34527 PrintNightmare:Windows Print Spooler 的 SYSTEM 级 DLL 加载陷阱
Thinking
2021-07-06
3 分钟阅读
研究档案
#漏洞分析#代码审计#恶意软件
Windows Print Spooler 服务的一个 DLL 加载控制不严漏洞,攻击者只需诱导系统加载一次 SMB 共享上的恶意驱动 DLL,便能直接拿到 SYSTEM 权限的命令执行。
Unlock to view this content.
ad8d9422966c73fee42096dad808c6448a272095349f41facc28f3d18d1ee66a0726fb5aaffd9271b6702e0ae53f6961031443030e63d37842b7356b4a67d1f44b648f709f84d99b1640e6f7a87a3d44129b61502fc0c5c728a88c67798e6cfb7bcb30fe880464fad1a2cf9635735fbd6e964b402ea4ed27e494f7c87c72f1c586b333a47062292625ea7240d146fb061f3975a6253d117e97272d7df5aa897fb9fe2c09034f658aae2645a68076992d7d9de07ae63e2fac88f85e475412988dfbc9267686cb8f286f0cc05eab1aeba1041a7cc23041ac92395e92f8d267eadda2cd5e2df779faa3b99951b0121c524fbe4cce0158fb74c50e79d7e652a5a2ba906f9845c6effc057f95a3a3ace429ebae7f29546054202ee248ead7c8398f7112acb50ae35ab247fb2f8d93bb8fddf093469da7d05f908688a07abdad14672bf8b209546febfa14f66fe2f15fd8280f301c6834ab382e3a51b8be5559b42ba49453b41d1d795ba75c94cf7882f2ffa0bf30251198f14d113926e98883172b8d90f216344ddcd5446838f14468a4fa7fe42b78ea258a36e087b11911a517ca906a62417a759fcb3da7f80ae52ea774833eb3e24b3c862fa321f4f7a1c5f7eaefbedae69cf4434e4a50de80f80d5caaa2c308c6e7292378da946bb837ba83a429087129b7ef3318dec6871adf211eaaea840c490c7fce8c2e8db8ee3162b3b71753f1a3dc433254e4ba853624e3dd7a583459216c9ccde6425eba24dea6e91c765e762e22e38fe7e7449069f91f7286d25752816865da4b6821dcaf0400cfd9fe0756007df482c8ccab8a811f86249e5801419d983a5ea1e0dc373763267922c2bc9a4593de1b50452ed80fcba5118f18d88bfb72d908f3b6f3da0f1308121c9e82ef509a7fd1133c9a24af1f994fb83cd9d2f651a8332379bdf8a3fc3ded99bc2fc1ad0eff9c7adce1f57ef0c299a7551ca561e3e2df7d141378227b0df1d682738c67bad13b86f867a26774774c827f682acb3ffd09ebb1e8ba08ef9fe58503ebba4a6446478464390417c26a2456daa05b8ad12ffb231dfe72ebf9853947324133842f646c5975a0d2faeb182af6f4c4e8682e2a0947c3e2761308f2463581d1276813f629a2a0e09012d025c35f1b7935b86674987210b3714b9026ed54888499935342394668ad58f79dcb63979ec647fa941a7c1d6cdb590c2f38ff819b4f46784a0a87054b71712f025cbbc0a4cd0526564c8c33b54c29128f2d10aaa3c4f2bd409eeabae092078a9470e386ba7afaf947b54a4d7421390fa288001a5aa5d4d8d47b364561569fd4f44884d2eb4214e7ab6a7434e332e63ced86eeba67c8ba25576a99391109d0ae0833ee8ed5506400ac822e273c66b4d90d93925de2671e7e2a128d53d9af4f40dfefc3800e1cc0ac0e2d3a6251b6d7d7653bd6b8df003a4e4af95c88b7bd90d4b1ff8e88e492b2fdc400cc55188dd4dbecd55eb512bc4e358306ab7cae88b98ae3f959383387b0f647c7dc3456168a7d4967e34ecb2d2e354e5d707fc4f00459cf61e76d7e2a111e9fbdec1d501adb05d03e508223bd328e9cde94e8212557853ccbb6cc393b5f6bf7fbcb1e775df62c2ba349de4395244de05babd8f53076b5ae085a7cab8992e9e4b09109e52d51bb5dc68fe4391fe9b714365a6332359bda9f6463861e5cf1ad7f4ee8ffe01cbc79f1396db873e0c513dad0b970e99ecb7d040d8f9f2568dd1069067814e18331882ec15fa7e87e7a9952c9b517ee2ff183f72af4115044ee93c3fcbf1f33fd4f5b479887ed8dcdc901ab0b7a9ef133b6e1be533344c2486d41aa5452b64a2ccf56af6b0ab5c06bb8711ee2e6f5df27462da4ec56138f322b58375cbd3fb0bf1929dd25ca125e31579386608cac5d2e95df50e261bd721dd14fa232fa53e3fad40d50a4fcadb587dfb320c5cff24ae069d128a3a4703b75a1de95bb586e166d6bb45f5121a0c77ec9a0080ef9d6fda0a6c491948cdf19cad2bc2217e0fb20d3a15a5e728b7cc1985446b113da0079f609e9be32993513404fd6e6df5aec6856431f225a61c0a40f64353b8bc19fa5af7e217dcceea27866dc0dc71b41f45ef1ff4551044fe968949cca5f8d9526388d87d1842418bd6e90ded493f2b8030fdb238bc06f55eed314a75e98faa760dc95c31ca6ab6ccf52222b8e276bf2db936b8f1849d8df9e3902574564128d44b26df1db516583910c898048e676351788b3cab81fdfc7bfc4faf7422c38f09eaaf9adeecdb4585deb94f3f8600528e1d80c664c399e4f40adc05025a83f27a5f975d2a484d84e0ac4e4705363d3031998a936702d574114e3721c3d8e34cc11a5a55ca2034e1580cc2cd2353aa3c08bd2309b03394f1c9107e3e500c163ad56f3eef843dbbd0657302d99a30620723c6b4c5a8f5fb7c6e683b2dd759c21eacef38a0faf3f6b3459a3d60e6395d982903cd405a03445cba0622af1c8c2fb09472459df1ebedd7b2278273e7695e3223ef5f339f0ee3a812623546c59e246b7ba63ad5dce57a0f5ab2ea077c6b43f50212d00cf947e3b92e5ec69d89ea6007ab4fdcaed3f0d70a850e7c59882467178538c72ad9086acef766274fadc4c591b6843cbeac9f9c260968672c862d29ac157d130b6710850957df89c3f324d9dd2c67aed110aece59a1ea54cb292c802f79686f639d8658fe4e01e4530da7beeefb513aeb2e7fb6079c7e745d0b9538990ac1127286c52c18114d1328b2e8a0d76789073b55dd4c9eefd74c7734e67ae7a7aed9f473c5de9fa0569ee3f4a2606ccaecb65e876dd8e34f0aeefa3e5b76a2908966ef4f8eab12f6ecc4708b4b675518e0695bc28516fd79877526619733eeea32a33006a1268bf58c41a8948b3369bae33ed1c24c26097f3e3c645a65b0b9dba767ba5b2eefe4de9f8e9e14b3888f9c56275703619da8d3ee0196fc3798828922785d0eeff937ca2b17f53d061209cb70ed4a471dbed52871e60e4cff7bc780450e25dd70dae809ecece93b7a8babb853b108b7c7d5b9433616ee4bbdeeb54658ba09d7cc7c62b9ff3b13cd465fd02d79b0c75971389b92a9ec28860945b2f64b91f4fdee308c1a1bd82e569de09a855823be71634860e4ddce009ffb6e21e3e2ae6453cd42d826a07a14b462da6b27c2521cb9cdc757511e81e9ed8124cdbd71b5f02155912a7aa9cfd96a9d703f9447daf3c9241d7c49349570e6bbd992321953385cf92d880aecda8df8235131d904550cf030dab4ab50db033e456508216f581c76b6c205c51ea4ae6c03f2b30cab22b5faa21b70d3671831cd1458c820c49bd926e2645d78a13f773e5cbbb46c682f889f969053ebacd734230ccda5acd38e194afd4265dc1688e4e74cec55d1d949311ea8c91c65c6b40d1cdca87274fce4130050197cedead551c3508a45a7517941b7bc995ed3214c1ed4cf21fa53d253a5dd228a57a06a5b36330feeb12cd9ae4c162c5b524425bf702ee2bf75b2c36c4d14fe5e5951d1094a21c4b5643b6cde99339f96e75d2b33056a11af7a6a81197cfcec68ba484d9c28a3cbd9c53588fef4a2d011a292b7531c5c6f2a6b4e2491f62bed28640a97d3554ba2d89ed9a28032f8ae0b87c0e730615b20fd41a2d35a56b3a1432f07310ebccdcee284b2fa6f21dec20291f44802490b918d531bd7eaa431034d93f6783eae0fc266d21d47244122b8e60f50a696ee6d7acfb5f89d60cb5399cae115fff0c93986665f2dd315204804d5a7d4f61116a99f6c4436f36546b6d64ac3eb53a2735fdf55d9d6a50d11945043800c26a27973241ad87152909050d6742abb25371619f3289c5e517260ee6b11773ebaacc9a6a2772a3c0deb92a460147c5676f345441c8691cf828a0b04be09ee39d356385e0b1fb5b8db4a8b1b05cb81838313f66180de6c145d1efab2b3f109eae938ceb52f4b2a2bcee3b8c0bcee4822a9ac1780ae23bc97954efb5bf058015e39f65665e38357544e7e26d81f5d9cb2918bc955043cf821f225dfd52d202343672d845e039f4554cb50f24abdce1e7fca1e764de2b7ac62f27873cf15f6751cfb28b482e1bf607b3eb7ec38e07a1150ba4d8b920769aed19680c9915272ffe6446744031e7164108229455200c8f07c83a78a1b145f4268e5c0d4dc8078dafb3ff5d11de68708289be0a89cdc8e00c515f90a79924194c942e84df82c3c810ec3a165f92841c1f7c94463405ec894225161ad32a1942152f0baa6f07398ab523e42950c45d78df00c1448e7f35a7b2fdb86746062a938de33b697282ff20aae162e690e659d4695d086dff898bd7a1986e4643c8a9ffb56129c3013810ad5f195add17a0d4024d09aab7b6e4f5a7c0691b1b78c41fe8185fce7674eab59799014ae7fbc5a22e8aeb2c8a3914dc5ac9290359dd6d3238985f82f5de56ae60bc69deff1680261458322b6078063fc20e6c7bfc10423b234312ae4c5a6d7ace80a66c247f4b6354642afea0367fa350ea754ddcf575c9445f70faa29a9698e6e71efd027291e355c119a4ecc3810dbb0139b6fdc2e31266046ec77fe03b88f2e025b50c4abd8eb9a3486ea3ccc11414c8b6b3bb6c20bfbd9911cee9edf0d024d2e43a1a7d89c5bf82591a1ec94c4829967cddb4a7baa8efec02439d465db245bbd395fe3898edf7c6dc53b4f5036fa118548b088564d924784f1a0e8b6f4a1ed8286212a2c5285573715cfc7bd6bd52787f4f6d0f1db5a974f8bf0336498726152df7f6c0430dc82a7e2702286138f2b2df151b47a74ddbabd226e68d4a53300db5e987f05de6a063ca701f0a98b8372f0528d15a3b5689e51c6ac1873ab7897e8b041f66da9dac62eadf0f207c3b844b73a0814ea6dc4e8eae5df4e4c9546dfcdc18e564f4006d1c8c2d5abe3036e065484ce94f414464a2e661a397e89f8285a5f7f72ac3c08cc70b402919c7947a11e0219a8fd226746db88414e4b410ad1202d44e7d1b337f1d7ce7b5cf730673a5a10eb7e32e284b7a4d7d80ecd76288a855ad044d7b9df95ab9884aa878cd41557423dbdaf6195990c40b9c5041953793988a80dcdf3c48b3d59f2f8283c7efbfd1ffd8fda7d3df6f533e67b36521e69ab6481217020dbe42c7e74e6e3cd6bcdef2f83f4fdc77c1e089c24dcfc40c2180011dac30c9872b6ad9979df1d54b4e361cfb75cfe0452d892ff7881b1745ff57e2b2e32bbd187751965a4ac6c95c32089607f452d6d33a33a9eff4e351ed20121844641742ccb869727b77968767c30252c01fe53f11dd56cb3fd8486918e4b65cd9dc7b368068f4146803125f918c722de76168faa558e26c7e1cea9d535ae896fe552bd9276da18dabb2e7a8a5b296a8865038d1a0df02ba79e6db249e9ce8bd235c3cd59afc63b4d57e62eebc23ac8a319e885412a9c1b8731e5c65744e4337ef79abd81b3c5f9355c2e6ffec4ff46fae0860d750ee9a4c8268e140f1f5cf15ff61fc67232a5d7790400149595b99e30c7af523028c94c5dcc22a2201708b2a75b94dc9be6679c9e0fbe69359a46d08b153f0abc5cae8beaa8040bedd0fb5720008022d88c9d79916806d16f82a763a70f566e799d4f5379b9ccf0d239dca610713ebbd911c5e98887022dfc8cd3c76cfa1b70b112a90ec9dbad2a491c69ddb7277483e7bc0e624ecc6da144692b386efa86d245ab5382b7a7bc8353e27873cccd51ddfc27a3492a0c8b30f74975b8191cf86f0ed954ac6166d7f9fa36fce01928922ccb972dc144dbd0787b8f885d36f1a73e78bc0cd030ee9220bdc8977a690a595055ef9787e0ab611b66747e7b89afc274942d7854b4ff525d8d55f396e2f5bf90bd6db4d7985c66503e50e44aa7412b216f99db0911f24bf91154240cfe362517aeaf4bcf16b51d642ae4c8c339372f20f51c0cd92e8f8c50a7be35894f10459899d6e8dd48eee3142ec46b3c7d3cecc5970c234ef0de047c75b616c640d31e426b98ae09ee6d4eaa2628a8b5e553451f0827f9cc9fed842ed0605564330c599e5805b4280b9c189773a7462e96dbb842a63db32aff5e0649612cd187113d9ee2e1b700bbb069290487d083b310628f4eda82eff827d902df52aae480a0c9455b2c08b415f2025cf8a55a8f5070b11d7e5f2171b944f0ca93b213835bc3e7af379c362b99d127085b7839a25b65d3b3ec43c10a529e209dba9012c2f0e3017e3949bd1566632d4b57f47e547040999891fa45d376f9405957a06685ee4319b9499ad856a64be4a95ff476db5d14cce36a633133b63424d6d749a71cf050a2d191ccd7fe29cf2f2bdbba5104c3a04ae12a52619c0ff9c6a657babe4e76d77c26e9b46650002000ee25139b00581873c35cdb6c1feda21bf1b73d47ca138979bb91f0df786ab797508834a463c15c2493309efe95f0082b338998f9de5ff7af7f70b9ee907de1659e5ee71f5c4f4e6d307714d8c2a0102601fe2c14d1ffc22e1c6d9e6c5c7d5546a744f41a0149b020d96ec442dd93e394354f67ed5e404ca846d499f792782c913a79342493fcf8cb6e3e3d40ae4669bc25b8577d7b00bfcd989179440e255cda16162ac71ee33dd24d1a79598d52aae8ae95e21f6c4521672d312bc3a4d51def5ac864fc961ad5112a00347355df34366d214c977a458015123c3123d386ba0d0174e575bc45a3ec2b8397421545b847a3a50ffd90887ffbdcb040d2a7261bc4d13a7dee54185d60d5d3cc6075ff20092fd1157211d1e59f893fb95feae9f675f63b8a79ea3fde9b4291663f60399e6b4c2a02c8d84dbf80ea6ac352fdbdd2477ef1fba12980fccb56313748dfd32fdd922a884f7a2726acc4702c5b41f5b8ee78ba16f39332bc74fe9b2fafb192d6612fa90593bcc24ef88b630d5d0bd98b44503f18dbf4cfc28b5fa4c6464e59265ae51acae0f05cfe0995966f4711286c816116625a26dc24b8cd99143f78519c4a310b9a1249a09d2d96cb89016d6123b2fc60765b5a0674da09b2a8e109ba448fc5c4a198fbbcc242e9b1722c06ea7b174113c35485b70a503409e9d1913e640b32ace933e6f5f854f8e6adc495bfcd9117afc9ed0b9ce39736a2075b0435f3b30d67a1a8c142294f9b542020a25963efa6b026b1a7646de486e4fbe9f4f819f5d8a7dfdede74535e07179383440deb187db612c1eaaa2902283713aa75e6e1cc64d4447482b5ad6bf8f2b071a91f55cfddf12f03280566f3fd668133cfc3279a4bb9d7d512f38690973666e39606c990c63a061d2b1b97d8acccfd8c94b81c697e7d9e69b6ba5bf17d6b0eff8f784855af3148dc78257cc148edf663fdc5935f2109d933f43ec32a5e53155599a889ad21ab4c1e0fa2dc3f345d5e643ff12b9ec7c8daaf8edda83a2bca990a6c74d97101e71f7d76dc66e39c84f5cd3e88578d72c36b356e660cdc10fa322ef58138f12a0ffae5e6166eb9e87559634d0fbf973eb125ae43f41a295912a344dbe1ed5450d0c738acb03f74ef441669759a9c35f5fc42d375bf580b1a77b08226d9f16878664ca30c382260ab8548c0f6436c9ee672c6e50162fc1c88b284426b8abaf773ac7dd40a6256a9f600c957005f729c1624f3478fcf216dd9a46083a1080131dfcca06615a9e4c957b30325105f88cab21a0b81744d7b492213b1338547eeff867de22dced8b373118c250140fdde360200640df54888caa6c5ebc527345c85c982c44db0de4d820ef3a9f57481e79c6275a2ca400de5cb3150c4566cdb5d110f2edadbc4dd73db3f5a387548b2a0329b985b733104e0a218a11005480c4d057dfc4fa47e7de23c0786c34f01a0c0e222f21079ec56e8bf39de36df2d45b44b3a97a4bafeab8cfc75878e2d732bb2ffa04725bd5057e82100dad6b566c386af74be6a1573d04458d3242aab4e9eea92b51bf3c09a74bd37b8d343cb371347d714d9fbec77fdd8c08fa3efdd0e51b54acf7ca9a0affe5721bf86d7e6d9f7633afbb38225f272f0ca8e2cb4f6c562e7b100d400eb4620588bb06147a7faa65a49a169ee1ea00176eca25b6e4a81549675e3618cb38a775293a0284d296bca733455adc4b3533cf441462898180ef7a1714e2467d2509e9aa88d7f0fa6a7bca854269688118d32b1a47edbc866795ec64e133ce2ce31c81b82a112ca439762b4a5b19c30c20fbc5f06f4745c93a64fa72bbae09981bdcd2ae6e52547b873ba374921fa465a3f7e184bae09e7d0473deb4bf69bee0f1fd7a460a11acf8ff73e30a9fcd2682cdc6c2e3c9cbf1fa3aee0d3a62bed0cbfd0c6146019d64f4edbef29bd86bfc5a5231e656498d3ff5906e3ca95f34cee4db25b338d5792b2f3fed084c3f483df3056a07fd961315d3a06edf35932c6ba053e0bdbc10dabaecc00e393d58cac9df7b1a0d6250df6acc76a13078def8473062ba5dea24ab438890f5563b8468bfd5d718e06630cb6b31a623778ec4a5d70ed21d3ee291d9776301fc16aa9330e44b8f481ff663f804354abca7fe0f8a6b19063a07f50a81ba1b16af00f2c0a2dd6cde8cc8b43a50eb0cc5a759da4887ec588c19c20a7bb3f01f2b0bba1197ee41186121fbf1e2e3464f170fa16ddad7aa1e1afdd36458c87bec0b6d5f22758b0208c51ccc11985755c84dc4bccd9938d9a952cbb12208c7185334a87e5ccefcebd2d2b6da7b276c1a04dc54cd52b97b35079dfece70a4fcec74d5ba73f845b44657f20e17a33bb89fc917f2a996b02a2999ad5793052fa2417a8d758d1a0a20583a9c8f940a8a7647412a0c7e47f8b6a590b83c00ddd5263251b7ef4a6bdb57ad2a740e9ed0da66e53dff4e67f4c1c90fd579fa2902f8ca9e94725b920e4c876a49ff9eeda64c2f416a1fb1c6b221efdc81a11448a2b0c9e95b723b8f2e715951084feaa8934e504e68bd8f1bfd58ca08d0f3354d554840af1ddab9f347019008b8e3c007fea2349aeca0053a74191d7e78dba39186c12d334ecdc8bf7e419fc1eeeff836b4dc164c793b10893f9b14dbe0bbb97d70585ea6d06b8bb3cbc73e9f50b9c46a2db3b0eb5ab02b15fde95e199e0de17ae5064b1d13e65f8a335112d0e83f297b047d2f6534c8f5580fccfd0d6c9661339c979e9ceb65255733a921aa90164acc53ea13235d6ea1273005c255c525de48e7a28cff43cc16cc48493189c6df8d521e00093a4a75faf0ad7aba3afba0f049f520093c032b503b0b81e889ec91c9807836aed9a70d71bacbcf9a685dc6ca6b5c7026dbcface9cd94990311144d189c4c48d510749aad18d57872c4f8cca5a7c38d1a1f3d7e4dab2a5225c9dbb294a37d6e47922fa41fb631a311f9cf3a7caf8b2f30d69a8381f60795ee3306f0d94f290e352b84522972bcd4a0bc4ebb9c3960b039ccf24c27d4e753a6b7930aa8baa7ef75b3990c96b48796b408ff5841adba9b5590298f52511bbb0459f2c99e5706f032a0c17101f528e341a590c12a3e46e133911a5d41aac5fc53e946d425220b3824eab761952f7889ac14a88066ab8d1dfe3108c53e52a037e65bd74dd29eda9a8df48633b9811baaf11c38b8ef78dbf62865168f70c7f55dcd17dadc274024aded3c12b9f524a98da794cfcfd8dd12c9222c01bd391ae2fa799aad1e2452e94525f39dec7a5f42a8d50ec395607a441d808ce3694f2ff0bf40abc84a80688bbfea394e1b2d607a7d6b57d69e7f3765afd880702160ca7438f27b04dbc8ff59e0fdd04775419f835e87b7d9cb1e0a349e0abfae57cdc46afa8de2f3a6054ad3baca304bf71e0ef517d5e237e0715144131aa593cc14b62ce1793c1db0f88a03625727f314debe406f2f7b5386653cc7a652c4d386ada24c5f3075953a3d49dea7792667c34db55fcbdd7c083ed9363f9fb1860939bef3e5244ace13724a74fdadc8ffa145b0e2abee5a74a85d850c0b30dd9a5923a89556714641e374757f4d53fbed5ac47922d7493f3aae377d1c21a855117cd33747308b8914105b520619f7450c009ca6756555cd6f70dfd856ccf9c36d96b925aa1fe95b7e3e6081676d706f9f70483d1d57a8253fd08876fa05e6a94839875f4936252ec928ce1fdfd0398e57cc6a2867f89037445bbd7189bb10061d0b03c0937961810f61221221c18e9ba94324223cea27f093b8844bb99f71ee3c52d4eb397c2364597e798f54f208b2857f925ed588ab98f01b8bc257d58fe79ff88cbc6e4397a1aa92294551fc1927fb3c16816b3fa909c69ba3ab769cee7e22f3ca45d2eca3fd4fc699da57cfc3a99dc90bd66dade2a7148636ea286e97115385714509a29eb7ef76d83994734e716404b48260f929d27a46e191bc46f90514ca218f09fa5b6a059c97b1fc3a8dce954a0ca84213938d9715d7ab164200c96056c80cf5d8bf968c159f7b4d0c46ca9b03d7e3827cc37bd3286c8dcd4465ba853b64f75c3538b699070370dfa806c87a3ecc6fb3958eac15b78f4dd0ee2c26d2f5390703063df93a31cae3568fe7ad32afc5f5c141c135e6d940d7abf92080ab42ef1f6880125370397a10e7b6c49e13c07311e6dab3e934c8dca733f8315d7050f657a64617d6079bfb3e3485601ac6db22bf92f4e7b1aefdee658564e3befdefc419425fcdaf0779ef4d721bc605e9ae1ec96e84973c10e8ece21eb6d761ad9482314c85d2ce8874242ed6736253ef02925ac13a978962b03c71c1dff2db6b65371dd577aae5dde40f2cd90968912930d1faf0a22da48f6599ba14f76546d983ee5ff578be88f6d9825d77cb1c320b2cb58c381e589494f87d3b00687be7df3289feff98131e0e96188d35548d71cf28976de500eb3901143f78afa979cfe4ab52d3a7deff0f4a48e9ed5ce05040f8ecd7b4376d2d94b38a441a0d922ffde37fc82e6b8acfec15f7cf1e79f036e312f7a8a78e533386cd89ea8dbbdd8e8122b73eee6bbcd58084629b01844ccf294ae8f1502e677c864bc6e713160d0113c83bc6a77a33c3e5056a9fd146fa1c942dd1d63162251eca1b68a5eb3357dae5148668adf10fb1e797ef95ec8683889ebe56e93751317881fa489da1e089eb0babaa07188088debe03908224a752756eac23cefe5eb4da774462811d17c723febf2fd569ed94497d8f39b123b06cbbe7b518ea7036a5b53653b3ad87e8e08010b1332c6486f74a5b4e97abf9402fb481b1f508ccb792727f00cc6064779b61d490387cae0b63460512003224ba94b5f6394d9a417c9a56b9f98164d3c4cd5b2d88b5eeb704da2c41459aa63a5e5305dec1ee2085d3940233f9e7b05ab0bc0d4af1d1844570c788d29bebc65bfca540e21c9b20e8c5ec51f0ed4dc247ece8a435a562b00d637dfd6143f3623e4390b2b4f77cf99a2f1dacf7e67440b1597d16d629db42cf7596da7bfd7908580ee4b8c548b44e2ab5c2d9a133bfca2db076ef69e1877957c77536b04194f51bfddabc73cccf01b39e130342b826040cb5b1301e68bd3e7a3bf4b0345b8b4e2ff3a54f113dbc88b1792d19264de71f01a8a0678a803f1843d8b3e2e366dfb04fa3b8aea5ae8345fd01e72363dc71ff75797501a5851b1b83160d2659bf2f7aa872ff384b257a2bf4da73c3e21f62cb071d85938070be27fd73720495aa07fd07133c59b2733610543947b2e3b40c228a5793ff55b2ecc296364ab5f97450961d510ed6a62864e29d1f41291bc4cb0e434e05ee958992fc195dc9526ad10eb9d9c5140bca10653ca435c51e3688004736a3cc75803e5e52903ce88813b6b5c3e12279a6d4de760e946313a07d4b0fbfd387081903a36ca2bc7c17987e91433ea2a1f6892202fbe3dfcf21078bbbd6eb75af968447acf689ae6308b73f1c3e150495b1390668770cc3944c93aefdc952acbe9fc0f688e87bc38aedcef1fd86d1c07fd2bfc028a58a373ccb52df35ff97aca671ba9d57574a9d8de5673bb343b6c67e27f8fb51585384ac79087eb613aab7f7da71407432399743d4e9e6f50d696891067d0ba8e05fc6cb8b5458a570ab08ab198f0f3eff81a0841b789596d37b1c6e9b94279fdf98042e18babb69b1e9651a589b61bdaf81b2211922a562bad9f64eecf029bfc82b41ce6e470290d018fd9f00581a22c57565a2b9f7715261cee809b419cae32b2b973ca420806113bd55f6026f2e18a2a802611d223a612839fe58754a16252018d998393d7e350e776270b28361e46e6532fbd94df4d6f6cd27dc9426d41a7727a3afbd38387de2196fb2c57c14b7b5a4886d1e7b3e49fa0a7f415ffe4e2c4cdf01d16ea028323802adb42ea1727a46a235c2083ed970a4c79afbac7cfe08079524b3d88b0d9630fb767289d6153c1273194f88e0d8441c7a81fa462069e9d15f55640830193fd748c1938f8262da2ba52924756d7d9fdea4a7951a6f34e6fb9247ef6d47db601cabf5466fbe41deb8bf1a5e60b17f2b24d69f485aab262b366f8b3c456aaf4667077406380bd5a942dcaf52fae9a786dad592b13e99f71dc180b0f6c01d269cd9e59d18cfce832ec4eb86e39d0460240a0bbd62899594a991e1c9c1caf4e8e8106694100563e7e75802873c6c46a5e87d29d9b78e8d18d039d80dc2e1a14b7d5d030759dae40365fa53621b76674f613ee0549575489e4926e3478a415528eec22af0a68a98cbc5a6ad1bdd249842b674a2cb3e753982fb02784ec51a8f57f840385c11bed767a541d84369bdd2524bba8ae52604d6a1a3d41412dc6800702503da27b17b363a70b2fc8eeac434a34e389ad9128a73df9e506ce3013d12c972965876258043deabec718c365adb881ef0a0971486d42a4ba43ef027667a7b5d003cf63658d22068777be7454036cf4724cdc4c4f3d9e9088e8dd0516caf3f908475f371eacf2f9e790099649926d483caef84830fa525e56eca0202b7b4b066e175c5b7009652276dd0cae7881e3b61036c70da5eb1145cc9400ec9ed9a96d087653ff049dd5f076815df0b62a9c41488788e62e99e696c787b52c21bbba07803eb00c4fe038c3cb9ee827ab90d498d8efb45c6b8fa3528179e9f466b6144c9365978068598e46cba3967817dbef62bdb1b140199dd9d4f14ed31a69835984570cda25e17e206b361fb728c4e84023693c7e7aa2db8a270cde60a4de7eff79431c1dabf21990073e555f7db5554c7d046383e075b8debd73ff1d41a10aa127ec4f1db8bc60d2e2e59b1c3d42687fe263be11284fd8074080edff2fdf1d4e282698f6a1f71fb32c8ff483a36c9f2d3b4da7d8d62e4028d0a7562f2ee49481f3e2a0b4faa60dd16ced7316c7226a17a14088a26bdbdad2a25237a55aaffbc0e76a43609840c19e9be1902d4b0737d865336c65efd5928800a8b3cd92f4438faae6be179d37e58f12eaae7c7b02ac625c9f8c62773e8157fbc91f342f80fec1c701015218af3e48fdd065f0588ca08ac409bb6d8d3ef037906cd1e3c604a89543a927fd100955be51404de509e4f46e470716466d33a6fb80f31e2d202a05cf85ef5de62a939b7a19f2855b51eda4d6a7a7cfbfbd494493cae011dee7e7a6f7955681c06490ddf72c3d90049014c69c65ed8384bff3c05576ccda2566f9eedce38f2b5f6249e2f235518005e40dcb8f56f60109ec3dfcd4328d288ee05ddf4f67dfa89d859f110ca176367e649e8a1751c8101291d4386e75a1edf3a777bbdaa156348c8