-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathpython_manual.ts
More file actions
62 lines (55 loc) · 42.3 KB
/
python_manual.ts
File metadata and controls
62 lines (55 loc) · 42.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/**
* @author 小九九
* @name python
* @team 小九九
* @origin 小九九
* @version 1.0.3
* @rule [\s\S]+
* @description python插件兼容层对接插件
* @admin false
* @public true
* @disable false
* @service false
* @classification ["Service"]
* @priority 99999
*/
// python.ts
/// <reference path="./Bncr.d.ts" />
const sysConfig = {
//这些设置会发送给python兼容层
loglevel: {
python: "INFO", //系统日志等级-可选["TRACE", "DEBUG", "INFO", "SUCCESS", "WARNING", "ERROR", "CRITICAL"],具体我只用了DEBUG->ERROR
match: "INFO", //插件匹配日志等级-INFO显示匹配日志,ERROR不显示匹配日志
},
dev_code: {
//这部分功能尚未实现
code: "standard_user",
auth_url: "https://frp0721.dynv6.net/python/verify",
},
};
const file_dir = "/bncr/src"; //python兼容层文件所在位置
const port1 = 9999; //需要在容器内部使用两个端口,默认是9999和999,如果端口被占用请修改
const port2 = 999;
const python_bin = "/usr/bin/python3.11"; //python3.11所在位置,which python3.11
sysMethod.testModule(["reconnecting-websocket", "ws", "http-proxy-middleware", "axios"], { install: true });
if (!sysMethod.testModule(["reconnecting-websocket", "ws", "http-proxy-middleware", "axios"])) {
throw Error("安装依赖失败");
}
import { spawn } from "child_process";
sysMethod.createStartupCompletionHook("python", async () => {
/* START-自动下载python兼容层 */
/* END-自动下载python兼容层 */
console.log("-py 启动python插件加载器...");
const proc = spawn(python_bin, ["-u", `${file_dir}/__init__.py`], {
env: {
...process.env,
BNCR_PYTHON_PORT1: port1.toString(),
BNCR_PYTHON_PORT2: port2.toString(),
},
});
proc.stdout.pipe(process.stdout);
proc.stderr.pipe(process.stderr);
await sysMethod.sleep(5);
init();
});
/** Code Encryption Block[419fd178b7a37c9eae7b7426c4a0420368961269dfbf3ceae4a71f2c083773b92d5eda6933d01b4b1dd5b024acbfde8641b8c4d441beafe2db82dde29b6231a61b93e8593737c09a83343339549fd3bb6cf24f01c7ad1ca9a2c34d78249d93fc03fc3e9abef16fc008512cfb02e195ee1ac3113a601f0f92b056f70b5a8df72435f26d321ebe1a55fd7ef120cc71d5d691ca546e3ee5617a59e094b8cc8cbd2e748a8abe623af575365684093a94fa652b3811054c65c487c8cd1832804e3e17b6b80c6903e98f3289dc9aa7855113ba9f7d7ce0b3ebfa3169880de7b21bb813e4f99f01c37c69dcf25f346aaff4a234674fac27e7b403f6c3b7592e4f53bffcaf58416b555b575fa50ce082ff1367b773adfb551c7d3a4a895fdbef3de54124d75bfe305e1c1a9d4612cd5eeab310eaeb8ec051e7e37675109ecfdf06ea1dbab6136b98600f8b777abb72f6c95bc5aee53f3ad4cde72a56bfdd58b42060cbd03703ad7261e11938d3e0577320d4e6b05c1797cbdefaf57fccd4582a50f0f66edfac0a95890d16b5362763847c4ff39fd89b4738ae6e52b8567d0842586a14441cf59d9d85e67da77a1cfe58b5a154124c706ec5e03227202fb293550b14a54ad76c01c4251e9fd04eb55314ae4b2376dd93535d3973b7014686928d5b4aab1e6c49d097710d24221c91da71e8ec43fb452e7ce4b8bcd185e25233265b42786f2ae21e5ceb3592a95f0ca99efca84f6a31396e47796346cfd40eb8699c64f81dae0865f15f0588132d9bba4d4c9005c8719e58e395e3999009b3d24a2abee5758dd2d5de87acd4e483a3acf71a026f8a3e0e9a88bc10ac51e2cff798f2c169ca7743425cfce5ccf0123a1091a034dc6da3165d785ce549a8b7fc788215b87f3ff2f7e37b9078f9fde6b13c2f7b800790c826dfc1d194c00da49c82631fc2083e0b0a3abd2ff7e3946b2bd9f505d87b7c2929fc75a0804a60d9f607f11be900e6398c4bbec3cf39b44b6638d8007d9033fdfc5e4269fb70ee98410be02957ea243994af23b79b810f430e580c81ce2025e26a26375d89cc744c7069c1fbfeb62dd4e37715aebc938bcee376095faeca74a44961e5e8a2c7954351703a8ce66b4d018c33d66b887bb958fa561805c888579bcddb3176e1187a835a5191a9471c96c83b847ab89792bb2d0d2924a4aee307eb193016e95fc2c3d39825046b7d2807e13289f21ded5ba6e2df0270b96baa9884256568b91146a71baef537201b6594d045131caf4ca8d2c394a1130e11695f41208af1badc3521c223b78e25d78040f0f0220f800bf6617718463ee48f894e70a112f8a876cba9507f5c2efa916ae92344c73437ad5bba7f5871a18f3754d8006e8e47355e057d918bd705644b00967517cbb72817493b8d6043c2f135fe350fb0f9d9e95467f7b14328e36e85a6554b626ae6837b89139f8e94cd95b93b68777cd110c545dfbccbc324f3f98eca4219a5a7ab18bd6cab1acfe9317f3de98a6645da718c9ca1385621826340e6030862a8017cc9ebc1b30fc7abc4fb58676808131c484ba3873d3d0c578d18c794e5cdb3be785d4d261f86bb546068aed3c392cd0ff948ff588ac6722ff4af173f520d71c08901b59af548cf020407fea201b0be5dba89e65d250bd2c60a3a5e2b5625b192a422de8b8e59ae979729dac4f4566d878a3f1afa678e46f8c692754f33a7468d1d29e9b417f54405be4530c2b78101df4d93d6c083499212c555260e2df150d9c1b377bca7000bb53145b804d9cb2633c856fbbacb215aa53cad9eb5234f556edd4a25ecaa798d6cfe0ac3fb62e5b15a3158c23cb9514e136443712bb0a951dbc82fcdbc96abf854c623f7cfbea0e7042de410614dcd31122146f27bbbec1035a5c0e3e5cfd3b201555bb20053d64743824eaa6d3c391111897740715f191da101f92c661f76f109fdff0d71bc628007a3172ebf7fa222e6320e7985983d2f1a9aa626f3b4a758b8ae61f642e65f9c3269e79110a45b0c322455618efef9629fc3f2626e2836c3412182dec937b9a599bbb382e31093c5d14f33e3d97a1b6523abd25088cdb2fd8c6d5615759ec144e2c5f33a83cd679c24fce47272b10a5fdc94c151a4af0b81c5f3f004bbeb940a3d28e539f9541acc85ab850c36ad85590ea20846b88f242232f41400abaaabbb284b8eddc3c90891c53141f4fd81662aaa3251d76b77efe74aa17f82eccc7d71ac8681a9f3b8a6c6e30c52814a81bbb38eb86d75bdaae4fec1adc41bc1bdafec11abc36b1646155136c4c8bf363a1c418c242c9040e1a15e38f605fc9496432040f9190f3faca271272c4e4560da8a99ba8b94555b1848b2318f3c31f2477da5c64a25208274674e99c6e84717adb926a77f0b5ddbc1350f77d31ddb70421930bb0afac7f7b3426144f9acc11af0be0535b0334dbec210f68afbdc26ab543a861bcd2aa7f95c7276f987c8c8fbcf1306bb2ccdd59d0885d9b3914be6fe7ee3beb81f22178ef9b82863680581344e0a87bb69b8ec76c397ef7c4cb3230d65a1a8a06e694b72eabf8f26854da7d6de89477581a35e2e2712a25e2e5c5863c4de513aec94137e675e5c9fc0ae552b0fb005d7e991f2f881c0e46e12e617c8bb6a38527356bf19064997fbce6a4896efc53d0f4f30b6cc344b3cc0e8a5b84b5c65ebf6de38d720d7f6ef0bf6710ce8cf351bc9ffc895b019f8587e3effc65443f05865b361ca5aab5c37c7e08123758ed6f5097589279689c82698e31fd0addb9fa9540abde7f6ca0b45bf3ec30b279d6b5fe1b069318d7fef3479ca3e7a7086191e62c54cffc22704b609cdd0a82b32c6e1e1406b67095be54717401716485e599d210d357399ddecb0dfa50c6ebfe7349ca593f2eaf5a423b41392f2788a0915f7f82112a67fb604f75901890780d6a1d830df84c1eda68628d25af85996fdaff284a5db112ad37c26a5608daf80d61a06270ec2b2c1e5c61882fb0c2b5e3ac9d538a7ae817acee2d2ad9505955289f4780cbba765db965bf6ceb3329e57fa8d4e62a735f4666a1e7c0edc37af208a3d6dc6e565d4c9ec564de06cc4e156ee1d965969c342173f4ac1fdbcb13f597611d00ef9dad37843a397906e1713a75afe4b729109141371baea3ebe7bca61c3478fe0aea10e273330bc09f832f385bee60793fac36c41a81636124ebbaf4ef04652faf187e5ad6144b172f928f0f509320cd4b9d27df9e7b8a55c6764e63fd03c46b850a9d95f8362f3627731579d0e714c35db12c09e6149ade8901534a022c623a660184cdc29b203fa6415dfb6ede3a00c533a320e9e24bdfdd41de39eb131454279bc038f8980e24030bb8bb548090e77947a7c89d1d9b886763a1fbd24c707371b2fdf9e5e0b0a1f4b5a05355503e16281d01359810a84e22a28d4ebcc172ee5164bcdf771028061c18adde129f474cde869c01b4cd4724f5ccdfead1ff762ae65ee8255edf447573536313a9a4e35d4b8766d2ace95a1a9b384044b004b6af1b040de147fc25d576028c575563fb2e00f8816f18dbd2c7535897ecf210dd605c8ece78ce090fc4456906551f15704e7a38215394c15b8517f72ba930fb43b4396bec19a7ef1a8fd06a646cbd54ed53cfbeb11bfbb15a5804bde9d95724005d598eaa58017305fc7a540ba83b96c98328f10f1678084b205664f891f843830e863818df6a215391be0fe187669693c5fa40563cf4836020f29b3d78e5c8d44fa9a4e48876109f152482e3b2d8cf6c1d93512b8145877f12acdf6dbf86b84d1f3d7761cff216c52401b39b9555f6d3618362f5911919c92abc9768b41b6b6fd224d5de9c953c69a3224bf6d8435e4dc92fe5b7553d2eb91d857bfce3e65a4356542f9260cb1eda5681b23b84bed22ab736ec01de0f9418acc04673f79dda5ae6a2c4fcab86631a287e80b7e45efc2e06aab98bba14a7fed49d0da1153af8ed9d26d3fe6d125dfde40af7c50679f515c7d4c9f08f72aaf686a461808a7979963a20290727a037f391e83dafcdc83749aae2cefafdf8302660d982f120490caae2ec45db59df5cd1df40a007a978fdd58d65851f1cf73655757c714f546f24fe8efd5f13516860c373f7f16e7dd1cc66a8934b1acf9b2cadb7256c973fd572bcb566fd0c58a10ddbbc9c29caafb9b3b3101789e1ce502a55a28af03c87b4e9ff7a1a045a30a4dcd2caf829f23607abc2532da622bd3f9a5b86456a338cc974f96196fc553afaa9dd927fb69bdb426528abb0d35bfa266c6764835c9b5503480fbac6c4cda4923b899b1b5cd45da4e40ba3b8084f259287b3cb73a2204dacbd0b405b34a987416e98a9a0c82eba48a6ade785ebcb861f7906b8a7d282954852227b0e5cf72e4576cce8f60f9f5eacae78c5608cdefbee5a2011d7764af9ff51532836babfdc26cfbb24b59b7f00456093882d362ba66d86d6716519e44f7c2b0abb8c9791c12e701ef58238fed981c8b639bcaa9d9f1049362c1e8d403c5fbe911b8176b8314de9126f60f21fd29049a51663edbb6199277ae7549c2f3f9bed18f1c4d5741a2c77ad867597a5f07acb9f5ef228fbca2f223832496b75dfba345e283f8623009b6704fcdad5bc8abc77b4f90c968604a2989137918e9c619796ed0d139952f557ec365da964b755d7abd3c557c06834209a63596a21be65a2bac4f761628b513bb84cf9bb50bc7a7e5527b8f8bc4ccbff1126e373a7b55feba30727a7f7ed1f6f2327278dd17cc989a5af0ca0cceadf63b659b260de367b7a376c51f8008bb767a6a54bb8dd138b02788e5216aee2627e499fb9d3e757dccc4f9dddaee31bd86a47129be19f0742cdb1ad46624f633a4512f445fd38f7c6658761a325cd052f034088ba95f8e0cf3eb3ed65e3897c73bec56b4be9e45130588a85f25fc8662460b3e972cc9a2e0d173a43937d50d164237e321c31829d638b5f3ae989b295a96b0822f7c0f2daaf99528d6d016ad3b92293a7ab10d464c01055f6c31d99c6a5812d4e19a9c126de29f83bde3f0cbcc3a9dcf901edab61f129ac89416f8420c3514e4bacdeb8c8d71be555cbff2e8622d687774d8ac28350320e6ae5d4f7be009c0b4614b9d9ba6f84c607a59a6047e0d4de3c89a7c1e54817b006fd409fbc7c9f5fde98e162610860f5be737a6b14a4b021c50424e54d629e96ab32681dc4d765827c477e6ebac7e1bf1131521d4b36c6f9374885a13a306fa4ceaa24c46de14924fd47de61df92c55536fe9e31c6b7b142a4ae483bea8628421f72df60e0b2f02dd1696e2db7a81ffd1237f44e85d1b14c0dc1d77772c28312cd268836530f5465456614bb955343e4320c8dcaa44fc5631e2ac36490e47c354c5b2c0576e4e0a6c96201ebf63e1eda544711cc3991d50caab62c374ee65b274aa54effeef868b3330f467dec9d167027a3901418ff79491661d59c0c2a6b3c5440692cdbdea4ff9c0e8c243a253dcc83c826e1503e5d46a3e718bcd09c9d447ea81f5dab818d8c5cec3542a9d3bd42a43bbd2e4399ba65e9c0e8895140267e42b679c01be84127a58a760e2e69a992d124ca02f5abf5a269a5d9811e8a3832a2a2774d2385c4ab0f5c081137fa0225cfc6238a2997b623cb95e20664c40e1775415b11a2e8caa2fd677a3a091f2b3fae08b6b5c42681b40fef96f989183f8ef1d25307a7f28cd207505a81492a7d71e718fa92ed4ac9fbff82dc7054e5010d2d8fd956995369e4d1930e74d65f7e0f1de85e05f3bc598dcbee669bae850e4077b0b5bcfce29bc2842d509c033fd74a30aa094d28546646d919244d27b468006cba0fe3525ca5a0d3ced916ffde8b8791d782cb8695f2c20ff9a6e12229bb390e2722c9bb588224bbd834bb5b996d5c019d591bb7dcbb5049c3cf40d06617d740a1b78e39894530481e66d5d8021f8e9d511d5a471e470c87c1af96ea54992e562b79a4af3f3e48752f15d7096f97ef60a65fd554dbe6726e49c90405ad313705496429bf7d0bdb45df137fad2371b14c833b91c2536ede889ba12a831ccd8290225d8e6807a42aea56ffcc50a922ba700578311245cbfa1b7362867a930fddc1146c3a18e875e5c26303d848fdac847453d128e862f8fe1b9e697ab2a89cd8fda83da3d6c3074af07bbf23245ea6ad0677855844ba957809794cf2b2b698707727aec4540981493b6a33fe96c092d1c6a6cfedf5131be31375ac91d1b794aebfc3ff6beeef4a8731dab4b11f648afac5201df84a0be178b1345ac42c3857dd004a5084995612976c5f26b79fe29e9ae60acfd2776717a335544db3127843b5069160ab25d3a50b8cf9d8d82e307cbad7347b6945b8da63936f2c182e8432652e16372d7258431721d5959e4f0ad76f06308ca7f2f76eb664819e1552d71ff56b798288b9f49fd4cc3e6b1b5e4127edfd35ac471c1b9ace40d8f4ab3e341c2070cddfdacfce6c13ca0e362f5b474c0631e9682d55c2032fd09405cd8c78785f9939c8118146e5f52c3521f20ca70ae566482f14573a80a30d7b6f6bf2b65777031747a8b4c9fc7d6441857b40e6e5a279662c9dd956167a785ff48ced74914e044d973ff52994083bb42433284b96c869d97df07e8492cefbd39ffbaf4f3b5f5d418fc8cf80a990a0a698cbb4cc600d382000360d1738cf7de5b0327a873c541941871b4c958145b4408315b88790e15c2e4dc090df934b7f18c287d3ef9796927d38470b295c26dbc85ec243d3774d61ea4fe11047626dd74b40ea5ba18af732f434ba9430610a8cf6ce110d259762643140d85fdda745d2bf546c575262b659d426550d9324b6acc6f69eb63a79e911b98e3b5c08b67adde5faf0ae507ecf7604f15b2d9d88c35613818b95d72bf3b6f1afcd791db13e25672160bffc9f9a0b9f2672393d4578b957a83e834ce12327fb9f3e7144a8d96a9db96490aa6e28b17fe858c75cc62582312d44e3e858269d054a482a8182222c56183061db6ddf2e3dd7314211df635dcbade5316d902354d24e9c3492a47e0ffa7c275496d796c5b7e54385434acc13ddd6e3781ae5c1510f2d1d1dffdfe63e311f1fc8e625b7d78b402457258261d3ba256fb9ec24366e91e77a2521dfac6e605dfc7c9027725edfbbdab00569370b5dbc5200f2b7a51f3fce3f50f0f4a74aacc601572ad2fdd3d97e74234e354e7061449fb99a3356cee56da9389a98c1de809c61313c08299aa905fc689ef1e817955c04e8b4b3a519c77e14ede56bcf05f9d29844bef22a4991b29f6e033f18e38018fa2d21c1f25c0ebabd8a83b0c2617b17676c791f7ccb7a189576975f67fe9b200af1483c3dd0dbdea72faf5f7692d0b19435a0da0ff1fa71fa99759813cde7a6a6a10979169c391e148901dc7f56e89ec54ae9e4ee844f10eafa2fccbd231d1fe2ee7d908f2ea963098229ea6c8aac5b318d5ae299bff49c2bb264aa252585d0bfb170cd710655353b37abb121585eced3486df37e900c38a0c133f8a87b93bb1522b03c4268ee6295463fe51239b6a9bc7b678ff06442aa6cc5f6caba12ac6b99b0bd902e021b662aa46ef84713c74b8b904f6f409f53cbaa39719c0085602d55d509826c99d005cddfba23807e44bb3a585108b44c2a1dbf24280c8758181f490fb876209f81ad30a4cda1ba0a0fa5d688682aa3976eb33f1efbb0e2bec58a2fad585572222a22461eeab8ac1846be8212fd03b6adfcfc796a51aeddeb8b01625d47ccb708edfafed534bb2057374079af9971474031a19312980f94352b7ca8f97d337457ade1e2391df27751561807f1f04b3578811e320e2f678b9300877554b2dafcac687fbaebea1e9fe839c605c5f21b38818bed553809797ca0143e3e78c1a15103afacf36ade704fbb131badfb1cd2448947836b19c212b83034f2dab13a7e57e1e45b0c4eaef7e40560b1b0322c10f06c00da952c4a9f9f63654230fd8e8d0bdfb109d765f05a00cf7e6085b4bc8f20fb9c0bb5ca0240609f320d5ec70851e527c6a4aba07c544ca3d298bcfd8021841a55b5d64d4a7b8445c7164cccfa9a27d1b11af754263b85f46d48df596b033048b9bcef8948ef0a962f40a99176aa4e3c116ec3103cae7524d472a651bcf1608861833916293b204b9d538dd06e318a789e5a0b43e31a9ac0cc55971dc73fe64377a1436e611e42975160f39719eead80e5ad9717bcd9611bf264d96b5bc551b4f9ede642670479b2435f57138afbfbdbf914e0fe6561c052a1607457bdd4d16c1621dc3ac92f4706b19ce659c2cb99b8378f475d704b99ef9091d1dacafb334c1536cdc27bada65bfdd138a6f50deac4c1eaf9cef86e0d0978ec76404b937747201c031aa7b6be8f459b5c0040b3c1baabd8ba3b5913e386d22816abeef1bed83d7d81465d0d54f6b9fc4bc39e34eb12dae360b6357da81a5686b8cb13b7766639db90db929a8539d87c896914555c261efdff583eec778be98ee81927649a299e23cab4bbbf9ce53c680f8465b4d4af4336bbbea8a4181bb2207e5e06ab980699c53398ca1dc93f027521921394d7460c4e0db7b4a05d1c0b7f251538f10b4f0180c5c214f0c7b15d2c558acae83196b0197fa7487617ab80110aefa3a4426ecba3fd77d47db534f25c1af62c67cfc5a1be194cd197ac89bfc255f452f065db457441e42f6e11181e586e7402189c1270080940c6336ea5bb9ee32179cc9f71a84ee720339234c3879ac66289ed971309ea97caa584a13d04e59d05a032e3ab082160feb5030658227d4661af9b056429ed1c0df2f8edb09257557d32d79dcefccfa8fceae633a3dd332b4bf4b0a7343d15a272ad15a4cd16288194d4e53825cfe3b90dc974a31017c34c95ea99ca1e4a394bf1b7bfdde2c1077d33122aa8db00b48dd8b11c3a249571f619374d72ba0d6b473069157f3ea0b49d20a176a2408e77739fadf97e66da40c321ccd7ed3e7a0f3fc73ead4383d1f8ee62259423f9f0c074aa217253047ad7d995c23209755bd2d00b20ec4427dce3048bc01663bae4ca1c0869f421c60b1c9ebae738039d23e709fc8f796aff489723a7c0d07dfe4564260478b4af233fba3cfa340bc5d378960fefc40274d9d8405cfe45f2a859cd33823d7fbf75d700ba8f79cc7b96762585aea26f9adc003c24ebbbaaf4997e7192dbbacdab593a6ba7ae21fbc59cdab04ffebc2308570664266a94a17725a169dafe7bc9157286ebbcde3a4f082fce70860159984ba8bc837f6856257d951a46379c51eaf7b6ada73168ea1b9c4bdb5ac314ef2e583e6a79a7fd8e9f18c85b954a770ed15d499d3e040711f8da4ec2a31f93be5daacae57fe007f7826645846d6f7531823bac06bdb22922d15062a31622d3b953b592b094784026cfbc2faa5918c51b401bece1226a19d55c0b7b7cb9e563ffb6bd94f504cc81a376f3d0e9621c462631738c3181e4cbe828bef8cc4261ec549212abfa3cb7e63e712e90a9abd13756d0051759e30d314ff15e1ed49ec25bbe0b594e352d170524109de3aac5ccc4ac313af10035c171aa87f2629d61b1a1da2ffca50950e806ed0923f54d0399e890aca00df0e13dca8e7e157c489bb24ed915e796758f766b142abc2f37e10ee6ead030404296629fdccc84766f9554693e8e8cd0cd560fbb26a8845a76bf04d05a7a847a0e6fd3db256fd745479b0a8c0e2d7e203250c5784ed53665cfb27acf1ee995de35f021a18e8ab4c818766d3fb2c65eed3f570cdc5952b6e583c05530e6135e5353954c1cb79c67608fe4d98ba69bc3646f993dcac5e7628fa87d43fc3ad6cc3e9ec321a55fdefc323ff64d4d95e375a967a20de7490fb6057616d27b71620b9b63871beef02967c2daa7af7f682e3a434055c784b63972462a6cb2f69e630d040061b77485b7371895d555e8da1a960a2a42141a576370b46085d1b46f3074d446b3906fdb7c00715963b03d5f79b1499ba2b59754fb1d5e0f3a9657c9a5854b4320fb46f77a5e4e5976d80edf620cc23fcd1bc215f41dcf5914abb85a5ebe88cfc5632d9824cdc84e4ad15ea05a3e76dba2f071820794df0b13404e1061c50ad3ecdd93d57f043ce4b0827bf57eab006d8617b68467b0ffc471fdd1d8d735b6f656e48f30cd68cf730914736e3f53cc6abbed30c77678e72bd080bef98ecb2fb4ecb00d27e8cbb47e7388e7909afea7b6c719524e6981d90553b6438072aca44a91b12cae4c348d8d91697c2572b67adc407c685893270710966828ccdedfd3e04994c021d72c9657686b4c2f23f9d8758bc490f25d922e9be28e86aa39d599ab1a05d5f304658980f0cfcd3509174442db08364e71bbfa8d0d6aa73d7a2a0ac6b4ba88e5de14d425235508a3b5198b37e7426da6f9f68e878d999e3131968898a02e816176aa61919712bbff4007414998b74c99bda85c61c51e1c649508c82397fb5d38b8a515fa5747d38e5d4f362b1eb71210ff181f033ff50c79d6a50ba7480e69953daa2b1acbfd06145c576c590d9947f3f5ed615dc5d70d5d005e1a680f4cf3d40cc84619ec12f972274874aaf3d58f44d7241c0aa0198cc44d7fb1c366dc7940ba3ba5fb9b77f11d09750235744e367c0f01d8ce3bdec3b604389f7348cfe34d82e1bee3dc9cc3dfe153244d193228826bc2e7256e8e02974bd155c78d9d7f2a072f36c5216c4bfaa621f1748b9d6de471aa1cfb4d67507cd891454445489c43d43d9aba2a2000833b6d50fc0b9f9df7261f25a24118462d1d4089c009ce41567ccc55d09c21391b309bfab0b89ff0c5ccfd099ebeed7574c999d3a0dc69329cd100c9c0c30b06166d6cf9aa449bf43761a31d5b1ccab4dfa33737495866856952dc9eb24ef1c86ae7647ecd25878915fbe805c2b6f35334752d2321f5e87b280eb4aba9fff9251cf51b0a3dc751b6fe9ac2170e29dca322482b030b838aaf42ae22c3499caa426774025865183409bc7228221dcfe2d519031164d0a1e9faaba7cdf4604b87fb2b447779099d0393095c6deddc49a4da2bec1844b0545ec7a1a550e31ebb78000932dce13f94f45bfd0606267696ce0b93dfe504502e653918d623397ac865488db3242eb69e8a12b4fc3e8264d9e47e3fad450f2acbad242c3bdd719dd02a6373a99c5d4217718d0921f2c34522600a65e6038f017fa8cdc3540cc8763f0c1f82abb971cea74d8186540869fed9d4e1e466618b9a0ee5154288e2dce62c0c1818408c3f426b4e079b0837df74b26035ac3c68446f77828967ebe4148dfd8529eede03278c997a6c6980bb8b23c76e691ce15737156071e209847623c2ea21b326254ccd82d35ebf9d4668c52bd0443d8aa5407d868884666061abdfb2f8158ae5c8bcb926ea9294597a3457f47ffe8a0efea5e4af11580f3baf19ac6787d1f4ffdd5e9bc3c0d31c2756b144dac2b65ae235e24342d3458d61f1d40cd626b252170101f0c04e4269b7b0f6a8f37140bdf0f498ddfaea7a76ee108c61ad1f836da25721efc1a29643a22593025ab7bab6b00022888d261813bbbbfdb780b4b4a143617a3ea0bc235265e7f30145a4ea7b36fb8ba0f756aec965a1a871cc7f31340d3dbd708269bcccc896510e467e1907477bb7b889f624efad2d2a4b42e95f65afa1aa60d3bc2f3b165aefd30ca16c5de2289f0376990412f20245069654e0628a1056901340f6b25c23fd4bb8f1b768e17987f2ba4f52ecebb60bbad0447650f806b5f14de8688c9a64cf57fa7c632dbacdd5c18672c0d34dde591e1e917bd503ded2037c428be08df13240f834caa36eac0f2d90bb9e41f275c4dec90d6dcb72e7bd2549fb9fd98e591e3dc7df5035c5afb6de24e3ef3eaa6b2dd04dfa5cab227943aa06d47bfebe2d355017c8b980ebf16b6bc31cdaba79c77b28deeabc17dc478381b8e6c52f83bc901e0d9699de5a0f022c47b93ab674e04df5f78ffea96c6216c7bf4439f26cc20de92849e49e3808d145803a2c66e91c0d1c949ba74df96a631f727eaeb03fde3cd854df1940394748a1e30702c977d26e4c599206f3aa829a092416c422b83711915c40cc04534398b5de66de21bd6dba837917f971635c406a1d662bd7e55dfc383a6391604444ebf5318c8d4b0664fb364da3ddc582db48b2eccc77f32c8ad997183ff14e33180eaab966cfc4438a7e3df120738836574cd5e2493e2cf8d489ff134896a91a77c38b993f2065095694fb9d183a6978f464ad129b18a55330280db51cbb30d4cd2ccf1709b8d390e8088a7422e87e04ad937f5b8c1c36e20dcc44233c96deeb7ee2408b443c3faa0bbba9958e89f732edea946c58555746c5e02644bb5565443902008e08ba309199558b6e2889558036ff86ba0427d4c79d985493c16d66dfede8f84009898533fe7b42b3ffbb48e47493226efe58884c1d081b216f68cec9653b171c67df2515bf1071ca83aed1b0e3de5b222b85126e78166d254b7afbcd645e075caef22467cf0979c44d6e2403167eef245fa3f2db113293ac7c431d7ea7ff950e1a3e87d133ed42eefff6b59d14c6c072988968f0e6a72b8c13b436865fdf2b20916239592b4f530092e372def3284ec4900560b7b2f547eae381ba1ae3c2788ea44b565a9a41e2df3ea8bcba97bf1951f18c42021a909b87072206cb81a60b8c8e3d2d7a12335d9b47feb969dfbf88e74630fe2909b38349b528f665f00b67a254ee283663f40c70a11a5e2fd890f3e269c9fd9bd502523f4df154a70b7729900ac61784d745be0a8c96bb18e75bc76c043bc378d897faf764b2cb3672d38a5bbbb29ccf43a7984e293ba432f24997e24852021ef7c6afba06cf94024ff47e9b62de6c1a7ef254f4c4d2e4be4a16055cd484669c79d67f867a18fe0e6138207cbf99b3680b7525bc2751f594d0f5b312ad26fdf073769d730442bdfe63ee4675c29dbe3d77ae3baac5955b566d8d069e0441662ba3f378be728f636efdbec0b6b3bfd0200835e831607154a9a42b8e15b2acc94a48b64faf2ed3d0e3ba1a57ba721d56c4e55040334494c27ea7c74ee0f513375984c147fdee4642c8fa6d60481344f02657c09f63980e4454dcb544b288452280ef67a117d3fbf261c6071f01540882e478469f5233018e58de6a48b6a2c2a2a7b54d9eea296a49c2f705922046c5eec79335872bc8757a953b9f55f1a2874683114c8d67c72f95e640d767e52133c971883cbf9aab18e8deaee6f9fadd559a9ea9b345fc6a6576ca8e18b6aac3ddc9931d6fdaed0a26d364110bd048a750a11040d3fc83653630c6b266d6694eb6b1b5653c7d6ea6bac7eb9e7b04fa92415e87ae003c67c61a10b1883e87806a38a31a695216030c460f991daaa050eebec2e0bf4668c1aaed66e862863d81f2618ec64b96c83ca2d5bfe9cc944a075e33b5d6d6cef0ca27bbcd7ddb86023e6a4042439823fb3ac78fff1286c4f69f5f2e4d982bddf6e83da6b41d8980548f307023cf50a62783771cd032ca55257c43bb87305bdcbdf568dc2b77a37127460aa0dba366ef9214b438c0a6ba1c4be3d9773d7313bef073846f17b5e61059f304161cccaf5f82ee63b9992dfdf2a6323e6804f8eab6ee72123d4b029156fa3237e4f9308a0e83c53ed5f0cab5e4bdd0915132765e03532cee3fb4f358bae19c552fb860bc384f3a476b9aaad2cd5cf4de996fe69e98bb63e33bd662706f1cfb4bec6867fe860ffaf983b2b83275c3bcfe772a2402d4f76a76d244dfc79de42a4cdab3d67e988121551602a5515682011354ce479524feb03e39a6b7fa819b50d1c4a8cdd5c0a41277c115c6f92e0ccc0f088dc8815d2c3c671553ce97bf3cc9570e2cf65884b3757e0f02cb994f7d3a9278f22feedb9ddc0fe2ce2823d5231a2ad6e5665918204e88dcdb12008061c77b33fb95053e51ab521e3909bdcce8a17c6fc499ad0c8ced978ede37e39a22d3824fd0412772984c555fae6f3477c038abd4387157e5c0b0891978d32d48a7f2d79799a53332f214b1a4c6ccfd693f9e78a3bc23d9552ecf24abb0d844cc78a9a60081fe96510b2a258e64e77b0349796591852f7f63acebbbb541fe44336df211339568c12e89aac00b8268843edb5e3b63b1f5d26f40d8de70e01d7188181fac363b49108d0098620e03d0e6fcebb31e156203121ef9abc9c8765e7ad988bd20888fe2b468f302df2c24999cc963ed780033c3eba1cc3381fb1bfb38ed60f7a260ed3abfe4187505397aeb0e0017da22917cc5264e63c4c8c3afdc18192ba22fcb4af0c4b9cfa03d8119583f1a693786a972664f6383a4c07f0c73443d8d5f31ab349570f34610aedb46c1359f767b3760e9c7de4798278c3f0bcac5796b7b67cf9b14d8502d89d761e47990ebdb4c10e0dabae368555c10e55c8fdf24652847b7ba6a39dd6413568eea0c1b8e732cb8d0d64efe698031f9de3e6021200807fd1784e01a82429378b58dc4bd71727a5871c38028f941369444fd7289c03f9ed0a1fb1b8807feb3b1973c4444f9bc7e4bb8c519f1ae9b0603328069cd9496e8562a03b5c2618ebc312dd364195b027b3fb9273bde9b4f2d0498f1f1cc931cc53a5d7d2b693be70176e6667f894801724b9479a8e00a7ae54d3516868e3b82639ed373bf3e8086223fde1cd1a7fa9c093c103d16d0d1f12e03d0b3d9f09278d3604b6b351286611c3c91ecc6fb6eea5e505faffff4ba3cf782aef32ce4c4d09a619fd53dfd7ae7ffe79afdfba7dce77a0f32af74c8972de809c77cc43161b799e28ccb174eead85d02ecdd36569ea96365a21d0829998121745f14c4e3409b415664255f00c3a18d49f0d2daabca40ccddbf9857b7b050e9823657fdf75e6c5d4c5e04a24f767c5c5f0daffc492de606e57e2c3126b4075f5c1c7d56aea8983d709a8b336c39f2357cc5d85d9d8d1830752cdbc42e8888b74c2e680d6c86b09f0d067cdd3e9faeac2491c2ab17748e4b3112a161a13fc41fabcb0ee4ca730b0299ac036a86bc5d003c87bcd4813f4f02938038e59d2b2fdb222fdce82113efa08f91d7503422315a48f193a2ee76df11175433e8fc9d346530bd66ee450e20679b2f78a9d24ecf8c139d4bb2112ebdb794bffe3b48b7a79caf0fc12d3384fef96320668374461527a085560dd49a519a311736264a05629cbc9028aca6b8666b469801a917df61d86def322ef84a8cafe5c49bdbccff4c7747eda345ccd5cdd592d9a7eec9dc0f00949e1622d9cdccec8af2f122a82dbec98484615038bceba15e49703c7d3d566ac7ecc637cfc6460e93c55277e3a6d3a1305ede82675cc97882ec56b33feb6b5879f8a08322d4a5419d3dd3cbf3b6e4cdd2a27a5a8b88c42cdf6af54a64ea891f6688a41805a9e74e81c6cc470c7e79c43d7f30db80b3011a6618173aad38780905070321e9fae5b08c9a379984357e1c75e4580f59e807e7a86556e831db2588adc4787a7fed7e09769b01a23d0026506e50adf98113291e754428a05b5d1fa67b55b8bc94e35ee0c55284d8f5c23a62418a9dc0dcaacb5e8c68ac786fd65247beef5ad3e487efb17b83cd44db729dcc56d0d7cba7ae23a8c32281128fe18d6a2d3df2446e208853eea29136be079963a8ba786f391a9c9c48855e08b513987dedcc4853e39aa6d3b0edaaaafb00660deedb805426494362332566a03102cee44b7ec8f6283057c4807eebdc77250c1c53cf348e31fdb3a2cfbc510a838f6a50251822cbdfef6ea2d3b07034350cca40fb0fb39ff8b87cc7509a240cc90fc63035385377f0292ddb634e5fefa044da1eb1ed0fbc18b1fd4844d3e6d9c6ffef2f960871411c58ed77bdaaab9dc43ce9b6ff41adf5d27536af6cb2ad9946573aaffc1aa4100f8267edeec956a4d6d890c4047a02d32a37c55cdf0ecbb64301d60d533b3644579787c64961f0ab4fe43aa0e8527dc909757c38864e0e55d214fbb67de7fe1737d23974bbfc7d0ca664dc13f1ca817760e79f10ee48add5883028021e345bf4b5de22ec84518f7f0746b22b77cebceafaa4055476a27c226cc5cf70674c6139285253d2cb201fdf3a75598fc840059910e38a07f4408599cd28ce3126aa7974474741d362b6c55161d2c82a91316ed4165377f9c571847ec6c5740d6f28d0bd5a2cb7881b36b4b91e9620ffec04ee2a271f4d0ba9c6ae8ea44094369bce96854a43607245c87cb96df11ca789261035d844027cb3262eec64c93985676a46183b94103a8ea88c969e7a6af2c963de4ed5dc84b38b3a4f3c8744db8a029a0e4dc367bee2fb82c0c025d3cf7b804805d31c7a42ecd499c229f3c7e033595f5329a77f2d685c8abb26122e421bcabd64fc7e12ebb7a9de4382a57ae7925d25dd2a7a6a7692fe0d7881de83266de438544fc9f0b80108d712b9801c43633d53d627930fc8faef618dc10b083d45b61d70c014da6de6129c2567238accb44ea769d6e837c569a7ad3aae3a23e91bda4480c04bd542986ba4f1d64720c8287c323780a5432aa62fbdcbf679a46ce8e324e35e4a5460fbc68a12041429cdb5e7fa48345caba6154e1f963115a5e0db43acfe510c28345360ba9e69102ec68eb3faf6acd2ae671b9a5dfbd4f1ccdfb4a7eb37f0c69b1f78536aa59fa0e3fde8fd8e24559ae95e9a6e30b763bd166bfaca8856ea4bd6a7dc488a2ae17569978d4e7164c11e802e78550e7c0ec4c3fbd6da723abd82274f4379e610c50d9cd802909b83a19ff8eb3eaa3d7336192ded4cc0836ce5ff1ba9c3a5c565845282c54e1eebd7fb009f6fdee1418dcce822ae123b1609ef345a473b2f5db1d5bb00770a4bb2f654d2d8707a63f2d3b7ee2f321c8489cb662c1b9ae2b3921aa7017ff3a3b002b019b012f680d85e6ee6d9977bb5fdbf57e89d76fe6ac94249c24bbbe9f5905b2fab1a75759165c2c19f49f11d9dd70282278c4cbcfa3a476384dd3a1d5800bc5106976a6b649ae92c1b35bfc370374e4e92100bb0fef1e764fb8362497f00a5d71082d69ecc70e4d9dd3f192740a1e20e7a93436ac6ac4569de2e229bfec5c5e6cf5b8c1fe373db9a34d78173c017fa65a5d752d516a5a8434e44065b928dd3c3c911e542e9edbe9d81ed3cfaefe43b37190d3a19eaa37e11d5d68d326ffde87d66ba7e7813372b8885f7095db27cf362a9c6de0c3c7d30be0abb464305c590b36e2d21fa73f1e244a47f1e795ee9634386aa7852e5af6d9f5c62f5720db55d73c673e1da3aa1554245539d5f8dce987686179e06a4e4880a973c39c2cff43b1e40a98247a3e68df7e52161e0ab246d655edc585bc6b73c5717391ee818146a7df2ba40149e4dfcaa9018918e2957afa3f2c241b084158b8cef1a6acc56a54ff7e09caddd5a7b02e3c3ded2069ae86a84112c0474bcb22d726e6271b8f28014b10f96ba92b6e636bdae90a71d736f6e44045e37827d8e31a04a14eb99da0d6d37c78b8d3e4b34ae0d7d7c3c554df0bf4658bfb0ff8f25bc20b2f291628a8ec2e1e44fffad51335ebcb3bf976926b900540fefd6fc0ab35464dbacfdc4c5cafdf9d88b79bbb0a2d1d60d60334a9686947e30361bedb799c529f065d6898f18114bc5a5fc58bda85226b872eaacc618772032684500b4d5ecb2e21ac653831b66807b62b8a0751443be633c76099b88800158fb2addd8db0d85121b9fb31209a4c0b76bf61a1d80772f25a4b1ebe9dd68948568dc6206839158829129eee7a83f02400891f69835864dc866d0ea3022558df413fcee4441fc972ac6c32b6a8c6a59cdcda9dea4d1dd49dd36e4b61b2be2e49b48610e0efb4f22a0df73cd0decf7c42bb1a360538e52b79d462006dfe2af0e41ecf38f634222f48366b95a9a607874ac7245190c63631ca35b3666b8ad7e96eba6153b88de8ec507fa4da376169a109221fb571b9fe93897bc65bb5f12d654cba0c6cc4c60a5cb25fae1363a194dbb1bbf4452b2b4135bb05c9330ae908b73198a810d5cb478ec186bf12d01ef6e47fee046d800ff73d53cfe48005b0340f1eec80f21c286eea671a0ef07a96c58b49a27e9766a460cda412071f8492cb866ef9afcd813a7d92b4f7a431efc3c3d4dde38471f1af02e508f50ecbe7a951c2083c99d95b5d8d5c2e8e6042516c0f2ba59eed7ca0a3d85b63a5dfdcbfc42017eb7f106c8e340ed2bde05d7e69a449b0b2f0f43c46b81a381768e6745f5f6a5ae5d705c95e6817d43bd96f24cd21e229dc77d7e26c1f444f04fe135664e6df695b167bdb9400d5a1e0b1ea31bc03fc8695f2fb504932a7780eb815ed058bfaeb4e23913174db8cfad45d0ed65489ae3ad1a392938cb5f10902d38d4b15f540686b96bb5429b4729a7b316d6bc03065ff470c3f04df5edb6dcd486f1819c5e94ad3c4b6eaa68c8cc47c696bf4dee45a58557cfc5dbc8d03319d09f18278c0a2dc292a4ac6613815e8200217fae9e4a819fddeab24a0be149a42364354472058546c18af165b4ee054d0c8652a2268b57ffe2b874ed5f632614fe19350a948b35c01f14b8dc5081bb0dbb3c5a1f5939f55dc9dcf68b5158c3baf6d4e7cd6113297fccf53228266a6b610bb1b5b80543b78a1e802aba618ee253b1ecd87498906d326d14ca290ddd552d4c891a07f57a522a7fc836d2fd1761a15f22f5c75d7998881b950a77ea08f622f1ac223cfc568473daed90fa6d1be367840ac4123b01e279fb948a41f239a4c018a064dee37714404015bf639c8821ed182ac81110443867c2c429d5861eb5634300a19d64deed4fa3718c171912a180418607542c21c0acb31741c6eee1f261740343c9ec46d75f6ee81579e55eb3273f1bed8a3db75caa2b6e49a8e63f5ddd9e7c72eb01ff4264546d6825871de76bebbebaebfa05b6bf3d5da2a3d52dd672a95f70e2a80392e72b5f8b6b9ed6543f96b81f512a55ec0949be8461dd0c922afb2e73802eab91f279ab07433fbc7629539bb73bfbfa3b8c36871ab63d78fea77094399a6f3cf58c2109c771eb39aaed8b9b7f86440f947d0e42a534331909eff84a0a1497f4247188e11bd31d33efae8613deb2defa5612436c50123e1e36ee80b958658058beb588f9b087631a6f1468a8a55cddd4323dbf587ea8bf2c345c5f4e1c838dcc312097865ced17b452f44023b63a29f354841757249bd03348a641fa0d4aa75a600338701e2468dd51380db4d7af0e2fdadee3157e40fc75b650c63870ec460b69dca6f75b8c2445d83d8d8e3fc9d7772a019ab2ff659bf479538bd4570ee254d9633a4617152b612e8adfd42ab75a07cd540ff3cfd351bc378e8027dcd795c4e14c5447ea10413290ab770153ea34147c9ada93f92428f17ba56b05701d7b3f9f243af007d7777dad084c5540206ba1fd5af779adf198506ec806ad24389baef984836310026d174733de7465e703cd9fb401c4f9129214169427ff356264cfdc038d079e627d583424d90dc8c12feb7ca38a505c1f5281749cb30ea8c582acbfa1f70fb7761d58edd007c3937dfdcafcc29b3645552606c01b220286667ee58146ec034f684c9ca46da2229d83cbfd15bb5e430ba192e5682fd1ca4774cf05c0e38184dee1583d5df7baff77361d2c6e9f6e4f27eb10869bd8e6c415f462fc40a38ae6969a976a49afc486d658cce4d0037221a69e4227b9df939504a8f0b3e9e043d29f5e048db1ad1392e86164e72a260dcfcfd4f66d63e626149d484d70c0f54a5da642ac37d16f2ddf020dd4ed7dc103de88697fa788b50ee4d33b7bed45c343e53c3540f3930f46125eea079303c4893635ffc205057c07b9d44023acc2bc31d9eb793e9d2a0941812dc9890f0335d885e4aed63cad431a8f8dc313be448b25198a88ac4f59a6d6455ba66f85a71384d82574a045fc988143e54ae3c5d4e3913ff1355942f6415981eb0030e5ccc70ac0eba8c5c73d947d0f34bbb002961d2510e022a3adaada43697a9ef0ca36a62070e7b49d329890d13c56f035a4af2558c1ee880ad48a0785090ebef9f5c5d568dd5c4ffb297fabf84460080a871fd27cd839a6e8bd1f31cada8e7d891fd5650a162b97e3e5642ac59ed5ce69b118e82708db00ad14b19cf1d3f728669febcb89b5c06db53655220e224b2c162e809262ea7a1afb9860b3920157e3903aa3888830d20cfe7f5c0ec4fdd9d31083aa0527cdaa543a494c29641865316e59bbe8e3a0bd3eb48ee84b2f6ffba1a2381cd1e3a476dc396c1cf6409e1bd909a9c7bed4f7832389ebee8bff86899cfe90f502e1fa5636821677caa61b48f5af006a2a40a8219bec60c6d30ea45e2ef8bb9b146eed8144a5e475a5faa0008bdab912e4b99205bba001ccf2a5de55d8de5517d24ffd217e80bb0c76a404cbbb7dbe87a2fd77d3ab87b980b564add823c0562da8a87953b7b0358473011446b059238bc48fcc37fa17eb6dc68ff2826cee93faec7239a1829a7a6578c671586341cbf960a6c188a9ac8b0e07e5c2016a23b69a8461913d8df644242136d5b075054fcf81f533b1ad6d06be7c463cf2f2b7d8598ad525a1fdefe3533637a414d3681a4bc5c08c0d5a395b8cee731924e408280ed185c759e81544e2cb49e6b1b45705c4392f8be869bb5987a889c900091f51e2034c00327860e0bfbfd66f627316e60fbb9b6ab4bde209b348033108bbc2e19838b77eaf8cb85c85b8df099f2aabb18e26d0f57627a0ce30c68bb76355f701229e18eb3d8e962fc07e9bc218c4a53db3c56770b5d10e0963bc62b9cdd7842c3a810b36c77ea04d1fdf4b029f82feead3b9b111948cd1a43bd57420a051b854ba1b5c753458565acce2fb904ba0a5b18f76ca3f540b8716ec0a026e198c82f4e4d2c8ca1c4cb34f095e8f20169551bd40c601138ebcf6ffe2efdb74f9af3ed034aa564f1e56127d46cd9f8f801d053628633eac59847dcb773128fe400037b7c407471f5f39e052c27ed4b403d9239b0fd7fcc9319c35d0644bfc26f48696601328ef27e2fd0612bed711d72fde80cf2716659707571d2a1be54400c14fc4245e63160bb472e7db30988da31ee7127b4ef44d0523b35b620d9363176223991ebadb93c36bc7f06bd31d74833aa86230dc1c59ccbc65cd177e3246af4f7ff3e3cf90b44e3c5aa9c4ee862d6e32905cdf03e0a0aef5bcbcbcc403043e11a439df6b60e04b9c9f81880146e95c7a07798ea6dadd5e63fde9b95b317b3dc8830a9367e033a6ffb264b6156c63648700192f0f7d21cce2fdec1c52dd9e97d86d60c0d5a06280774b94e9b1f151556c08a21363486f2d42286784befb06f14fa282ba51513311d7005e2b7e73b875e3501a158fca3aa90528e633cf5563b2a96391bd3383992a0aa133db99af742e1bcdb7b49277966e5758119277f0850546ce92f0986a71593b37e5dc25cdf1fac745840fbcca806cbfc72eb35fefc7a50b2a5e1933c3809cbe3a1817e063b7e6d703c10b375d6098d26d3b54ba7bdea98cec86a78a1b89f514d590e0bab1cf12f883bfc552725732ddbb2b048d4d833d83084af7d1814bbeda3f13c9c63914b232cad58b41ad7df746905cc86dc2de4d5a263d6350e8ec37e352af1899eb1a0e1b296d99e8c7c22bec131ee6a8eb7fdf0bc7e20948712d9e08164c1873ae5cad59f1d862e410b861f06559c1c9ed172f8bef062d5126496ece477f33cb6cfe8ac3c35778d7d742de2d295f373d7f61ff5e2bc32d0ffa152fa85d836eaadebb350f4dc95bbb60c1e1efa480af5b73de6e48ccfdf24d8af965080ad195c3d53120776eb3b1c32ad8a7d60400ee15dfb0e6c26142dc2369be516e4aa41c1b944ba8a7da8b634c654cbb1f86e927484039fe8c5801c8bd415b43f9bc84ee607a62d609a40bb358e2d819c71387d03ebcc5990b9d0c9a8d850c7d4ca63cb2d1c96c8939fc3fbec93f9cf351fb8322ee02392b974ef77b5130ade723813884b84c365e17ceec0f5a134489b756b7a9fbdab5d0cd5ddbfff8a42edaf8aa2a9436b4dbac61d30e55976b3c625db25fe3837ec1793d310518774b0f83901a6896d3116420e680d1fd706601817031efc83ca3a02e724ef3a0899d48e987c675e338230751c44512d689a2be9b860b578520840544907471492913b1bfd81dccab2658f0c19d1b71d0610cdeab23f1d4e82bf2ff3930af4fb6aa3670f276f87259c30c6a73fb0e19a525ed08f0c8533c1c7269ae7a299af76d2dc07f498dac7be891437c09e30f3d5a32948b4d01684e16f483ef5231161e695086ac9969c15ba2a8726c27b2df24ef0bf5693c80f9fc71abac009b178c34a128c6e05595ed5359a33573251adf7c003e3248a176b2b6ddb4830ea2c59f8d9239e4dfed3cedba7b3590591562e72b46bc2b331dbef77e3e1fee7a05fd9d6c51f80de3238fcb2f05a2f7f06c9f162b7fbba535f41f5887fb5af2d8398aee79b9078f0fe1027cfb8e550149b5408785304df6340c6d111d9161e18df495fe334077780ee186a61aa9430240a7e40038412b472906337c1c74960d1009ed04af32e56ef6f1696329eea9f53b15604b2ace203d3aef201bc91d244f483092daf99a80875edcd3dd68bb049d2597201798c81302f9824cae38f3d63279a7b666871f247e24c377af93b72587cb7f80785a82756cd181169aa631a142ccd02378b48e45e490fddf99bc00e9f9548e104cd07a0a1d6b9d0157c3295cf1d7f12d45fce82be904def8cd164375546109165b35780d1cc514fac0b69de87591552652776d9f2095f37c3b52ae8745297e27c2c9c96410beaf74a06ba1e65da54121a731298754acccd3add24a722b216f81005c7f2d0e774088406bba63a9ffeca03bbe26ba89a58b1178e09ef5a0e3cea721c9873f350b2cf876c0d8976cf008d8101b81d40bae0854445da95fa677e111c50370e70255b7814d442b824fc0292e4f78ee764f4509ce6861457e10d4a971613a76d27e4eebb104e341452dff473309c08d641213bae0ad3bd100af12a43fd8914ce72b819fdc86afb50e75368c689f04fb8a9dcbb17b58edbe697a8bb8fa7285dfb1ca8a08ded56755090fafd38d4ab7aed699a44bc7b95d8341cc24805a0f376042824ea6ac4d031a804763e6a24cd41a593cbfdfc8cb78d9942cb701056dba1322a299833be4a557eb2e903cc9fc3c5d556b4f3ba3a2ca09ce41df4e3d5f3bdaee98d8fee4463cada35736340ff77a59970202383438e030eafdfb6e260e885f0cda234fde622c5d23f95ae11a3616e55696b921f168ae89802436090d0c1e705980c51ddadf95ef00c6ba941f8478c77edcf752e372da5bf279c7ec0537c9186d0fb1f351fa4495d5e859d297e1433532c9d33f359cfae28f8878ba1b351fa4217abb459b87b8439e3892588cf70ee4f22fb0e1359975afad3d788ed1858f97ccb128fcd6087079040d73cc0e4513233773f3a1607f44f152566ec0115cf2252412630c566aaf35f7e0f6e99dedda4bb5aa23753effe9b4919d8979e0578f155c607e44bde595465819e6aa0618ff90ac4ff9634e83ad2d4566a44855b39f2451efe274ca319a0e4b261b001dc7242a08763945c2900fff647a05fb4ac067192dc92a63519ca39fe6cfe7a163f58c5c8b0039e65bd23bc6626a5db5b567550808b16ea9aec2991d2bcebd3f86cc94c7a61a5d92c1b80e9c9f1e4ba92737ad799e23d60bfc7526dd812f3fd22bf148e7a848913dee1117db3cc46dcae46fd672b29615640492fc08e0e39d556c97d4daf6ddfc177c469e392be3cdf0932aec6623e596d198bd87aeadbf3a82a08ecb7865ed9bc9eaff6f5c0699ba4919b9d4888cec6078b3a1eeaacf2a3a67726de17ed90c1895fc66b0c13db340c1e0f8f3dbeab8d01a7ab17719d9b845b5b1ac5983d295bfb5d682612afe23c7454f92f748cd58aebbe81e820727088ffbecd74733272e2f6bd4dbf9d630face10383e19b3bd68c09932ef6851272ca5332dfcd996067ad0f5f76403517e53808dd0fcdf6c5ee23d6b46c1d17fc89210e34129af1ccab1c09e3c33d05437dd50acf188de16c0803cc79b7b82ebe4cae2cd0ca412808fca01ce4cbd67373ccd919970fb72cc0dccd8a92a5abe97e10393ffdc7290833fb277891460e8b0f31f75935a2b10e4c1e050d868a945724aaba6a5ff2e6be1ee08222fa2db1644ac04063bc3cbd00b33050bd043faa0d1024cd939d99b6cc0e77e3f12720dd7759147d19f1964d2617e2f814d858a5d875a5a8ee8d5ae1bbc58c6bf1c6f84cd48f028408af583762c7b080d199020a4c40d6d5b07d978f3dfe9d4f64bc180274b56a3011a55ba9a95025c54435ad2ca9c37814d35a95d59a907cfb53a3b0a2b234cebdb54e8f5785ee607d1a4d98ca41ad41651d5df3da59e036980a771a9e688ea2304b780816c8bcd4bba3f1dcd613e6bb126c8f7ab6f05e7125a0edcd9cd99a98f0e699cb4d861478f37f6a62ab81c56cda13d69bb02f7c862636dd4e2243c9acaeb46730d58b4c81bccaa4fdf68379975ec49c67daf0d19286ee6df8a7bcbc0f5cab810fa15556387a203a0b0442bbce4120272b78086eca7b009b7a4649b605700b15be108605a920ca78c757836d0cb559133e796a124065a796e4842ae8056fd6e9d0e0a522effbe9967d277ff96efe86b1ac87a1ee5fe5a6b0602d6650ced556c424c2496424a8ea12b2a2422d12b4499feffaedba196a2b684a3c85c026251e5a629ce9952426508b43b1b89ec4bcf85dcb4b95e3f178b3c7d892e7493f0c3843a7e700b7fb528bf81ede144cfa5d145a27590547cff6430e267e46183c707e0a6fcb487b39211b20ebe9248010e394c0efb50c158b92af4056237e6931ffd87c673f7d93d1ffc6f52857366187e82868ff609e09d8586759f9ca053c5558ac5857780da927f794988b4c3613efaa09e26084183a68acdeaa33fc8f67cebd3811095b15a7bcff01f168c93a29fcb765b3ab71fe8c48c2dc48fd875279875269d77b0d7ec93da75416cca9e9c1802efdb7a076890fd33a180e714f7e4f881b893b0f02d069fac08946afa60688366ed48cce3bfdf8d865cf7e984687a096c447ea319e4d4db6b9a372daf66b5dfe672add99301f34a4897d4e6622050bd2de31d4c5ab3d6df1fdc9c299c2b482213f3976fa199b8be1af81d975d0fbccc3bad85bace8178ab66bd23db6d603502e9ca49343d61ac41530e7593331d378551d162135fac4f36d6ad5e71b76c685a3f136c25ba9388987bee2a3f4590a5374217e9bbc67cb1de6731105dfe1aaf44daae8b2418a486ea72fff1e251fd8582a4a568aa8612b153b5266bbf40ffdeb5b29068af5c34fac49e3c4362fef37ed5bdefd72bca42989db784fd8d71edfb748686b06fd31f93d61d8df11b2cc33427040772f4228f6d4dfc2889a1a0df82ef816dcccb146a94559734ff71b4e8316a57010096cd90a1bb26d2cf0ccbc3f439f0b831446775e41ce34b95df08fdfcca2e4a8acde8bfeee5fe9f119e0914f62cd58efe297daf11701c6570e8fd25da5f02430dd689072c99a9fb12277512fa18b979f28792ad9f637947ba7d4a6ae2ad13f3a373adfe26f73729bf5bd56817be302e9b752db4edc61a47cf468744eb1d57ffa76485eeabc22ed16d4bed21ecce7812ed62c7dc85d85357d8c274cf9ad085b6f57b738c10a4fb506029d7cda13ae251de3599166ccb32b8a38b1ed928eb429a3664105fa58ab74f3fe9afa4e8d6eed99a259bdff5ef19d2baa9ac471245ad462a53458589c525550556008e53debf6fc23e9492372f73ee8ec571987078d7011340a55a83e7114cb90b2f7452cc7ca9a3c28d26ac2901be237ea6324fe4d5d1981ad0f50c6a2de0846c9fe83033a7274baefee7df42280c19ae3b8a5ffee1dbb03554761d9b7dc0686f81f4d78b527a9e97a4d6e1219e9b2e48e4ccad3181395ba06f74055c7fdf693bdb113660adf7c2dd556132abcb44cab5d23ae0f112653e5b6b39aebad2813112911a9d66b18e3ef17431e10edda2930f31c2db4e8715f4256a427afa387c5ede136cc79d420304a7e9cea22563b0c977c506281875a7036b54e1a2246823f89ebd6733481107da81041f9943207e7a46633cf3178633bae8a0cb0f5eae9542a4703ee1daabb61f63415cb6fbf27d7e611a8b849ff4d49ea262833d2e1f5eb13d9d9d6f6f2f8634c4c4c93c4f3cd66cbe1755950fc0bbc1474965a577bad67e9387f9a05571a5eab136fd8a18f947a1481a650fddb407ff2164358d70d4c1b3838d5ce953e07a9e42896c8e1945dc1b28a22a7086f23ab08b1681dfa5537a6f4ca830c06ee75d2eefb1a2ef8b1974faeb794edd37d5f09eeeb582309d114888cf6f3b75d5342e5ecbf599003063ae8f35f36633f26b8dd19a887f61159d1a5b650ce60ab4fc983f741e56744a60676309a2128b641e1b89df3407db639c25bcdd6501ed4661b7a038d1e336071eb12f0dd2654b045ed878375f0933d6fc50874616653deda73fb8cc0dc95d3abcae8b65ef9e4e981fc0daea8d4375792415e660fd589d3350e100bdbab7d1e311534a77fb38885f57992e05fb6ec05bae4e552ec10295d65d85674cb0f4214a9da3b8da6858173c00df87a024b0c17bae7da33f2dd543f8708a8b5b02435ef09bcb66fc960a21d0d4892c63365d423d8a4b6fedacf59f17dcbc2cbbabad280bc735f780c40a3ddac30c79f0a6e3b8b89b67d6985e92d24ef4dd311f3732fc29811a18a25782fe7ff67d8530d2b83d8d96169462ef20b12d1c20feb5762819fcebdc10db38d1b97f11eb3ad08c3016dbb028ebf4b8c1b572609169a2fcf2a6802852515a08aa9e935415a93eabcc4bb1f85b3c2ab4d27caa23e6d84456565b669b5c9131dbb25f3292d80e658ae43815d8c43e7dc9dde4d67475ca995587b5feb371c4efffcbdf73cbe682bb3cb0b7479c0a082e6e2cf1430bbba65f2d6e866affc52a6f25e597f8b16e3dbfc040175df32cb5e7c2ee237d65d4fa8aa33dc7e31e3d741f32809799385ac1b5028cb99860ec578d38be7af69c46b9abd5d6dea207e602dbd0ccffe30c6ee3d726e939ae4974fe8371165939c4c9ba08b7a269848aa5701b58db63f1034b618aeb9831418596523ad1146be9e66e5c89abdcdb191ad9ab9dc1a345e065bc224d705123e4ddb8185d7a97af67b24c2f9386f83a36b27bb57dc474d7ddc01c92f88e8f2ae32f614b48bf675d6684cf9d76c816314079806083dde91ad429b7aec209a40680ca03d860533d1b9bb8848302d3a29fa4f54e85b48638fdc09a1acd2ec2a5f0061ba8f0386cebc0d1a204905be40b103854e2779dc2811b2595a6cad148ef41d8a6edd20c626858646158db619ec259e73e02ce8bc31e6f95f6a99d720bbc6178d8329abc8dbf2918a68fec0e0d22f5a685fc2b57ed2e04e9ab74e5fe9551c93de7e9d97a979852c7feec8f61a1eedb7a32132eeb3a586b83d667d0a7d706d5761365ef230b68ab722e61a0aaaa6a3277170e5571e6d4587785dbf7697909a2e6076ce095b7e36b2e0a6c9b6499cc8997e38656a3b18be7768311c4af546352dfed111362ed6ae45987f39f4206d3cdf5f92fb7e2ca9c7f696e6dd7254536bf393445b6a00c245f063639103920a1b6ae1824b34e110e5fec9b6a2280df32241ab54ea6efe24a91bc33dcb96bd4161f21c4e5cec36870f6b67aa87e229a2c67dc7ca2434832e71822c2ff96b8515369f9c022352de7f78b4616599e4b467219b17716fd1f591b41176b89206aa63c87f2d9084f8a2b0f88705fdd4b0fbd946352cb4e2ead692efeb4bef3ee8859b5c4da3e94a665ef2c50ed86f845a046fbd691c644195f18d6eadebba9f4005536970b3593ae01917caf646ebb423b03bcb94a1bc2199f5c4a78471e4da6cce2de4a6b544c2a28a56ce88aebcc45f48f186cdd6da95dee72d3de71c26f8fa97097738d2b04dfb00a8529bb306217c3370c64f14075825d05f735a7b05258a48dbf98eb8d5aefa322816a972ec8bb467a74077b91514ea199683a1896074eb547cca5689f0b8d7993d8f97542bac94114babeb71e7a66355e1147085893557e6538bcf3f6549307fa95b30268fa82f0a6044091cbe204e50e1574f0c85f82d81c32d592872e771d658cb63e8ee001e6b80261d30a18b0759211db7ba40a37721dc23aae4d91eff34aae20d9bf6fb4c60615543cb15ff248cd04886e73fbe92c1971b1c56e6e4238b1fd66b0320c764dcde5e3d4ff94edc9c25d048ba48838ab0000da00f64edc7c832686e106729adb0d9d02ed88f1ce6eb63acd6104cd5286137065246e2fde9b9b1581e56d29629de873b2441a4d3aaa59867bd21f99b4f09f259ec575ee4109406588057479e372f2d195676befc4502fabb10b8ef9f1dc58dc6421bcc109484d4120d6414967ea59c7048e0bacfcd2aba12f81775b263af8657de97a171dd1a5d8b09fcbb20ae0fc2b2096014420738dfc5f06ef663d699bd9f2e51a5a4a0231f3316d98f5922bd53dfadd29b906d1e36f159dae79656882fde5ed7754ba73629a066ccf5a19dcc9db1f5a30aa32828cde5b43a72b7a87b5406271186ebc33f18c712d6b94dae9f16d920d3b6c6001ed211bfa390cc1f936121a9bd5a9eac30525b48dc5ee51a9af6ee3efa4651987599e734de3e9d805302f2d839ddcd7979132004fa5c5166320a7a43714c0bc7d98507f297fd6d61c74886cfea878d474afffa97138e93d71a233df2002a55a48720ee309f4b348b4270cf3bd532c7ce5d53c95b767e7b066022fe61ab135e6d6c5a174bc3e5f24a9839e3a929f4c0b5c162e95b191b763960acf82295519957dd05d6254acbb03cf4c5e08b53c7345a9c414518f347a7c5a270de56ea1fc35413cc2741b3da9286410fa12b8ee61d64e6665248abcf398b5d2c9a4ec25b1dfd9d9713cf9d4b41133cc47d5b9e23adccf591a10e04dbbdabaa6cb16949bf2ee50c93cb5b403291f4e785af717714555baa77576b972cd7e161a6f35400a315c902da023ba16e510ce2e4a9e447c4ae1631c093f788020cb1a59bcf46561e3ea161ac34b432bb6f100b01b5250bdbe98c2388ba4739e089da119fde4adab73d3c28c3f107a3c0cfee4258f66d366ce15a5a39c57cf50854321f005768975533a9e7e1afbb6e5d0ec4d8e6aaeff8d7fbfd24d24fe6e83e0e0463e9935c25583f97f1801ad96cd9b9e43e] */