devicely 2.0.12 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/bin/devicely.js +1 -1
  2. package/lib/.env.example +20 -0
  3. package/lib/androidDeviceDetection.js +1 -1
  4. package/lib/appMappings.js +1 -1
  5. package/lib/deviceDetection.js +1 -1
  6. package/lib/devices.js +1 -1
  7. package/lib/doctor.js +1 -1
  8. package/lib/executor.js +1 -1
  9. package/lib/frontend/static/js/main.96600727.js +3 -1
  10. package/lib/logger.js +1 -1
  11. package/lib/server.js +1 -1
  12. package/package.json +6 -1
  13. package/scripts/shell/android_device_control.enc +1 -0
  14. package/scripts/shell/connect_android_usb_multi_final.enc +1 -0
  15. package/scripts/shell/connect_android_wireless.enc +1 -0
  16. package/scripts/shell/connect_android_wireless_multi_final.enc +1 -0
  17. package/scripts/shell/connect_ios_usb_multi_final.enc +1 -0
  18. package/scripts/shell/connect_ios_wireless_multi_final.enc +1 -0
  19. package/scripts/shell/ios_device_control.enc +1 -0
  20. package/scripts/shell/android_device_control.sh +0 -67
  21. package/scripts/shell/connect_android_usb_multi_final.sh +0 -67
  22. package/scripts/shell/connect_android_wireless.sh +0 -67
  23. package/scripts/shell/connect_android_wireless_multi_final.sh +0 -67
  24. package/scripts/shell/connect_ios_usb_multi_final.sh +0 -67
  25. package/scripts/shell/connect_ios_wireless_multi_final.sh +0 -67
  26. package/scripts/shell/create_production_scripts.sh +0 -67
  27. package/scripts/shell/install_uiautomator2.sh +0 -67
  28. package/scripts/shell/ios_device_control.sh +0 -67
  29. package/scripts/shell/organize_project.sh +0 -67
  30. package/scripts/shell/pre-publish-check.sh +0 -67
  31. package/scripts/shell/publish-to-npm.sh +0 -67
  32. package/scripts/shell/publish.sh +0 -67
  33. package/scripts/shell/setup.sh +0 -67
  34. package/scripts/shell/start.sh +0 -67
  35. package/scripts/shell/sync-to-npm-package-final.sh +0 -67
  36. package/scripts/shell/sync-to-npm-package.sh +0 -67
  37. package/scripts/shell/test-local-package.sh +0 -67
  38. package/scripts/shell/verify-shell-protection.sh +0 -67
@@ -0,0 +1 @@
1
+ {"iv":"b83ad5ee03ca34401c0e8830f215ee54","content":"eedb260dbc9cd2a47eb321ccbd3bf508186fa2e31d1bdbbcf304bfea8398d73cfb4efa3be4391042aef9419a9f7bfbd3dbc576bcaf040676a928ace8183274977b8c63c80d270623706bcc4d45c49fe4f480037ab6dd72ce24c9ed14defc164b8b117cc9ea4b92f8682917c69910ed42deb0d12f87065683585ee62346e1e36074a2836d18124a66b825dea0aa9fa2a448fe70582523452ed5715c771fbf4498fb45b2272a351399c4bc35773c0132f28ed10b186014924bc2233ed9bed032df5efba6c5655703677ee4e2bfbbb285f7e12cf7b983dd1619aa075b4e569fc9b27f1aea239c5c57ee57771074873c725a5f12adce49f9877a348c5bb823bf28e8e89817781ec412e8c3f10b1c988dbc2bc79f8b18fae1b564787ce43f1ad3e7230474d62e08726121310afb780d27be150719040ec223e082266529fb47713bf27ecaed7ce9875771f2ede5385398c4bbcbf05afb13f8c885dc2d96b8eb3b13b5d61b0e732d8aceaddfd28546f59dee31f0bdf64b8f9148b79b9d43048a4cc6c36722b25b100158db86e48dbf7d623cad0699fa640c2f2242c2d2746961664bcb7c8043eadd6ba3a052102086b108cd694a9d50541abe8b5ae2399db622eabfa407d0632b31b02a26a93c00ee4f54887fb5a64514fc351dca919d85774295275abf8dd93ec35ab8efd319580457c04924943816720817dc5b759884830a55a802fc09716a037fd086da748e690dbd76c50fce61d71ed95859557bf6ddbfeee1a350526ae8fd42b1f227f15c8cee73f12e352953532baccc0849e34cf4c760d596a93459382b8b90dd45adf1d229398ed8e74559596793bf115b13bcb00b6f55df0b7016c1404d65f683aa3ab4866368be9491587ed0d2097550b245d381e9b217c2c41d419643c50c722a9b8f204b7a81b8708963d877c8b0a98bb6d9455c613fac94c28d5e989a02260f7b30db8e898c1b294d806824b988229330004fd9aa68c16db7d0e9e3bbbdbee0fdc9f61e2332bd00a75a1009bed5ffc631ec95a0f7d896be24649dcadf61641f400d2b54a2f73eec20dd2de5801b12efebd19002e966337f8debd075ee2955680a8c0f5156d0762d8c2397f2808341cd31df51cac21991b3f2e747980434c1c17abbffc7780bec871521f9a9d2c7728d05be0f6bcef27a25ebd010676f96a93fd14cb0531b5f85ba00ac08df18c3d0e1a16ad7686e7063b9599cd4a798f0922a415d2f7ff8ec75cd8a6b13556db96007a1ab38028c8d15d613bac157b6dd625614a716437ccb6a512601905c7fc6a932be858c17c843e0cea3ab42a7fdeccb14294de47e2543a8ab71b11bec4ba7bc4523cb0f674e85158e976f4da2df7e393f8637f5e6eb4298da7d014b8745b437f6cb3b754f725135d291acba4882c44e5ba3147659ea10a7e0460eda20f176f8edb580e8f2f1c8eb8913802c960767639f81357de8b18ca33d127c8ebe88ef0633c8a6512543497c3f086b0481c7ca788aaf36313139834403a773d5788cd6f08b7d8b01e4719406cb542ce30467bafd7e1eab224632c73f2e5263ae86b2472df13e39e19317e9c3eb483b0438ee5202102d772f4d0fd562e54a7e337d8921c99b3ba38eb64d39f79728e856717ae3cfce31b2f6e07ca694daecbf777bccf238e42aaeb5dec0e65c3a9a82584bba1195f43e56c6227eefc0059d89de2e45164862c298beb1779944fd997cd7370356663de7fd5bc2c2c3dc76db4269000af55ad33cfd49f33fd24b5bbd0fe00c6a20aef857e74b6b4accc16e6295ca0673f29e0c79b4f6552addf1490461c53ddca1af7aa0dace0210db1f5f6eadc82e50b2524ee535c1bacb0a08d7b2f6cdc0a762bf7ace458537615a257461d15bdefe9f6d369ebbe334b710c1c240a2de99d171630cad5c4156feb44785c82b88cf7fcb275fb2254800f1757239c09556856eebcdbbab29ce2838ecab54ba7878bba1f32b1a9e381548dfe085a2f507f4d913d2b07ae2e2ca13c1cb112ef0c41b74f3d25d4dae1787896720d4cdccf08204c4822393fb30cb39f7280d48130b99743aa3a96f91c651f4b9e64389edac5d0b9c12646d579e1037b46781e68e9f16b3a085c43749d7c995d5f69ada4d5ff42101d27438b239b8d1d2c341dfd468a374d1e1db2f055ea3b66675d53dabb2d98ced636017172e28f3fe518610624d7fb5d860f43f39476c67a0ef043069837058d42420d24ef79538a3931c0d0057a5adbaf92900f6c7cbe25cb9170ed7a7a6d29f6babefac362af10c88e716bc94fa15a01b5cbdf5b5fa20b82168aaab1c1829a4464e2c3e3d8ebfd9f974e3eca690c8470fb139e14559cc725977a59bb28978249a45270307fa6745212d3a37e3794d20076a5dcc997c71d13781263986aef89d10e632b68335b1c9f49739de096fecf06a0df7ba2edea6b50ba7348ef2e004620513ee0172a4ea3c9165b7dc9112cb72cd742a6b1a56da7873a9b2351ae32d602b3b3d5289eb0ae2126b6a1fca36daa3eb6e037fbbe9d9bfe4e5443af92d8ae3f14e6ee269dc878d922ecba1ab1965818b64ecca232963de989c65e7bd976efff133a7cb174e62eb70c30a5efe29502405afb57845605fdf6e6b2b0e39cf02171b91667e8b941530ec9c772cef410f41318082657aded83438852e4d8027e4affe1e9bd45982915539ccca053d15dad67235d891b3e5ee6e28d69a5a77082f74836db3c1df261a80c41866168f67c1a9f2fc99fdfed990be4e7b4724aeb9873a30a896b0c0ac76377d356a908495699e95ee98464a7b5e587b9c2ce496b5b6d72cbc1f8df66d58147818a8441b18b07fd49001e00b125d885dea7741e31c599ebb7798a238cc1d7605cb870efd86fb24ef0d572c6407f88edb28357fbf110a8514a9ed67ab04452981a1d544b68af10e9a0a1abc6d843b6d95255131d72ed10cd71a186ee72da117fa261931782b580a5b4a566dacd4f3077dbe7551033b2e4d15ace5273c2153484c5904366c8e225b8370fecdfef37149ddc14711e84df80018ddd0feb9e5f01864ed185809d506f865c6a5252944d75ff92bc4af47e163fe9bce5a1bba4c0af8b8db48ef47f163d15b2ac7c704d8f4d232d36f6110de29dd4d31207756b9e57ff51cbcf74081d985f791694a5de8b3b5861fad67122a743ab830f2c9777137167aab0f4d02f74622f8468737be0acd6667ddee457b3001591001e92e281bb3340873fd2e9d999a967f37e87a34f275ce69737867e9ff584a270e9f08d6c2d41a7cb365507794262a1106a9431e46829f2e62d72afca0924b24a192ad56818667d702f93f4ddfa6a0f6d9283449c036727b571707e86f523cff47d4cb0b2d8b3ad5a73986d975ade6db66e7141e67b95c510d3938bd591b3c8b473c3db30fa8765621ed30ac23ffb4c1994423f44a36c1320afee2985d7b48434726dc15fcd7f1dbb70235afdd1a53e1e420a0e611fd9fd87237be208068dedc51a11ddc2fa370d695cd544ec997f9843a0243165a0b55a10a71e6c768f3c39baebe84b4ed3b8b786bca0fd78a6826a5515a6949a78fd02ef5236d8f4f8f7cd0849e885a8b3055ecf6e3277bc543d8a068735e297ba1fd4c7ff2deffa0748cc46f90926ef5c05f83ff8d7b105bec54cb9e36eac2a0d33c4496cca49f5240272e321ff5de58fe5c6992db06dc71b9a17005c6cadcd28c4b9f34e1637ad22049c9e4e7dc81ad603402cd8a5a63fdfebf56a2e6d702b2a308a990a9c89d109c415cfa8cc62a9e6fa7d71b76e83b4b19094ec0e2a21fccde984b6461c3c30d14989c49939e0cd78dbc28adb849d5d2693a1661d895407a2ced14b821c7a2533dc32607631055509c953e7a45a4897ef1c54aa30bd8aef753cd8fd61a7b792497a14031a05a0b505a8ac2d6113156e21e7aef467c27a905e33e150f227525bebf8514fbc3ccae524cebf15f28c9e089dd06d1054f6123ce010a7eeefffc895af631a3f7b0a16c39cbaeebf12f9f4e2788207798f58a12ed1ad88255fb409fdffb1de27ab74181dceee4debca2cfba889fc62d1e64d9680e059eca7a6408ce95842718303f1f7005123ef3069a631d55ff0700e5433608cf877b1cef196021b062461f967ac5788614d432eae5204057a989d3fa5a0a0b8536bd6ab7f903cee849040968d1323bc3cc22feece3dd4a8a8579b3e8bf5299bc6f038300c563ad571754c85ac3950483f281529ce55b4f8e42e709f467fcc7919970cd9a9432ff1bf1a35cff1a0cf3aff7a952e7bd60ce65c2b59346303dd9df3d39c828cc65438108c91eb872d6e488a4ae5ef5dc06cc9104d1c3c41f7aa97d8542f8ebd216bd8fe91711c92e63e68f3d5306a005bf70c0369328e772c80cb9f69d8cba8ba900c119da8431799c58407d6b36c838f4e415c41755ee5d9477adb75aff3659faca8b2fd37265686ca7279cd23ec1867e2663d850a37bb31962edd7cd2301ff9703d0dfef84cb73d6ca84b10c38e2aaad53ea7c99dfc787d3ca31b1b2e3b1791850e8874b1289c677a7389a63097c00839546358c18619ca074feef5f3f0a622a0c8962199378d32c58a4efd15955577dccc51f857e7c21fddbbc3150fb52eb4756e29e101b4364c140de3b66098211584fb771f1f156cb5bc7cd71217fc635a495f90513b561b706929d6b2c7efc18e61bc69d873c59b6b0167c7d7ca9c1cb43ee365bd7320d87f02d3c916c300dfa0669325a48d01e3d929bde45c874147adbc44fe02e99ab8600d3f16d27189c80fa19381753848ae8bdbaa994e1c6f2acd02cf4f6d84198962f5753223a2d1a80e993352a72c9e30c805347e0c4df6744be4694b695d551a2725a99367fa5362857b3489ae85b68f2e5fb74d8544ba81246c146f49e79bd7eb6a40160e22bb0e9abe8591b975233aa56ee7d3e27420358224e946f41456b2520a5a6a00b5fa4bb2290328593d6b436221dd332995cdbdbb65303f9999696d7612a348d5a831f9b0faa337dd136660af5c8157e2fac551f07e5dc2525bb4c1002c151bbed2675a6395ec6a1cf84dfa3ebd01f67f4210c269baf202a46c9421317586b804f9db78fe37043c504e67c997da7b2f8f74747060560c33bd297ed1639895f46369f2ce97605d1744b1f7ed151bbfc447c780148b1474d0c41ea573e733d604745da4be27a65d7198f88a0d8f9a0676a6c3f9e94d53f4b5561953d8a8b4d4186f81cd20d0d371711a8daff32e556ec7f1e093824c48bae878b7b1669f729024e2b862ab5ce82574b10c11d595e2ac691ca34ba715c14935fdb34feee9ce756d46c670d2cc65df9f84888114d8eb5833f773400931f86e812a1659489fe62b3c23202467905ff2d12c5ba39c97bf49fb9474ffe4e709a044b3ae6e6c53ba63ba93e58b79259fa84a817455b70655920a87249f737da672c76257f8780988179506ff2f3e0f19f4fb8d72ecbfa30102dfe024a47af5f119314f1bcc26da2bf35b7b49496cf19751c2cedafe8000c9339bef0a8e00adf704f0324bb92097707de1d74ba03c658cc7c531a70e4b34c0fa349d8385c0ff8c467dd7cc7443621bc6c79159563c752476a3c9888e34eba3afb1fae7077733fa44592ca5b55bf0b9097a63bd41e61bafe4113b17b04d8ca4631aeebd6a3f9e8058f4679c63884fe6bdfceb0f397ee78237abac61ed76afe20fb058efa3e54c1c21357d3511d203946f5a8df728665812d664aff2efb622a65cb30aa19d6a69750a588442160aa94e58a63c3619290433568c2d57fc436aa634e3bcf80253e9adc087a8a70bda736efc0fefd0b480a21a96009d2c983b32495b0d4c95faf99c560566d39dc8f289328b5927f1585dd4a1ef0f006cf5c3b2c9e0418b03d643d8a2fd0566339f0a2ca5a4870096aadc7d749b05ebb0be7b5c5e1533df84477a4c8bbed8e854e67ad488cca97bd7388cd4fda6ed2a788069fd05c4235692174f4ef6c40e03a60ec6029ed5756108ca2a442584637c7580205c262b8da3e46a36dcccd5c3b8d857ba4de0f1a8ba9d4e4807f7b915624a30fff18d149364d0d789fbab6012924b079923b2aee010bbb38c52be06e68e483d06e0134a8e7a5162c819cc13efc9a52d9cd2bb3c332a5445f628aa7e20aeb9dc1725b0a1f774b4b61daa8ca503096a4f5ade4ba3cbd10d4043d560b831561feaef54d6612420d4d6b784cfd3a7201ab8e4404477e472738a5476279df28be64920c7cdfb89a7b4bc16e705ce99f92d89a18963fafef354648815b1d7ea5a51091cdebe37977672496b390425756b96ce5b91f55d38134fd7447335c0cfa0f5890a5f95221c79e0450cedc379d56f55d6a7decf51f2358cf8e29d81876e4495d1c2e8544a520e0690cd3da8434b105edcc051f3752ad8df8e57bdf30ad91ceb529880d2cbde51caf2f355de0a73629dde69fe3c2afd08e6321947629f502d8cf2254308d9d1de62c0e0fb31a11a4152a726b355661b29e2e52a02579ba804b62c0c70fe02815d4ad284caf9215d817c64f7ba846b56c006ca29101c2044160eacf214f4d7b21550b4524d8ea1e9d82e7955aa0dc287c963559d97ecc62aa966d1de4d9372dba9a608435fe14d4bcee04cf135dc8c525a6c91457bc58eba55639220509f0f3b97dc5b2ef08e98fbb5e6146536523ef3e4472e6c319fb8e35a92d2c9ae65bb4fcf2f15dd12cfc440fe996972ec56feeeb9a5b400df4c77beafa9278510bd3396035e039401004b2e4f9a391f79a07f3eed2aca1de125ee89b8db64db298df5463eaaf6e77a4d62881c544346112fe1c9245e123154ced8e75b77ecef576f5fe92f41bd308dbe6d0512856f321b585281d12d82ae1e36eb872fb019fec88c051972fde3e36a6d57fa4f3a5435503e43773674c196e1ab309412300053f0ca93b1591a023c95b9f4166393f01a9da4835358b283510662010b6b4c32a699e2aef65a37904397aa65ca4c99a786aab60ba36d57173cfbf560f3be203c0ff3744074bde97426205b91c8f60989b53c73ff11349e32d38dcc8f4726aa5a0e5116e808860abbf5c8451bac20f3ca7d20fd08a06705d1e6c840fa52324a79c61995a913d57d9c225eeca4241155729e9e43bbfc0fb3e660c9c0e42df59abe0ca4c01d30e65de6cd7c0296bf94d512a990c450d82a1e7de8b01bdc7f8643c289054f4729f6c3293de0de61a2274c765ee2dc59bd0ca41ee4b884da4c54f7a66cf54eafdb9da6b2603ae86e8112a1dd5d9288cdef8d7e16f36f1887810604c858780858308081460c1181a688d258e113ca13cd06230a40469bbd7dbc4533ebc8f66237dd92c9b581f082d45528aaa5827a51edacb00ee48367fbce474d0c3ae27912549bc0d990c9dcd9419aa760db33de28ed500c2845dcbaf557326f8923f9e1505f28fe5a565500aa6502b09a2206f57df11f8d37af9e557c412c64c5e954e5b5e50b9f6bd1b52a001907b583a9110cb05f50c5b109255179f52cc6c227cf7f24231410ba5ca9ca574fcc3f3478628689aa258e5565e39f20a77beb2acb520e728653672c03d5e556731fef2425aef0fb608f5077dd7b6bbfb9cb6929b7e1433652b3a81cd2684aef91834f24eb39c0ba390a3cae55dd6ed6b55163906a2cffed609a8805d87a439d8e8d72d8cf86150dffa28cc32a7165cc07b3e6e94ba8d7d1095699673713e9a8c09dcf0519bad421557814dc29ccdae64b63c64bfa2b0b39499936ba7693e42016556731ead60b36f673f284ab70820a0d52dd99aebfc7293fc7c0baadbd125644a83de9d38c923dbe21bbbcbf3d2858bd7b11bee10421da051789b9b428aef1566236d41a7e30ffc5a7a3cd0ad60b50c416e87dc501e9397cc33c7a0a913647fa4f1520ccb711c49e6f6c3eaec4f4d3cecce5a29723689d17cc5fb0db864ab6aebbb2e594443d96ea3ce28ffab0498547d1c720387ef029a440e6e9532b95b2679958c39f37b61f84a23dc2713060d7ccf927bb21aba3341a05169ec9f37113b9e89715158310d66b76817c44395ead1ede1e5cd696d9bd1f0142e25c7e93e6b69c2f0ee2c3a1e8f769e1df4bb004a17fac95e468a98fd722dea12e41fed5c5d62f1e5a8a91a82bef5412164274e242042bde44c46051918f775777c4b1af267bdb6e550427c7530dd93f6bcc10fbef178c6ca1ec3e6bd5f21a689e59b2afdf5b3d0317fdef46922014ad4337cba300f53cd8744a046e39e4eeffa9287ee1c814375e612783793af3fde60ed5ad19891f0088022e00d9f53244852ffbb47f13cde53f95e9100e9ec9cfe773da974933f70181fee8eee741e387efec7a5c60f1e79c1c2d0dd38058f11ceee4df2bfcc3d78a4d3d7acb51e8b5fd8eb64f2d9b2ce93b0a5084cb3bd3314dc535978002760c9218af7117f90446bb5c4c6019d048fa2ce62cd9d0cc357dee45942e442ee50579a4ddfe9b198ebf9711cac911c8c05d2187e18e2d92d3ff392a77abacac94c33d1595db90eae3906300723f4938e08a0506b9b6217711781c07923061461256622338933d3496d95fa44c3f0ea8006637491498536334f47786995f3a95cbd7586c7bfa7827c480dbfee9ddfccb100a28c5e33cae886f64a2371d526c6f819c6d53f773800438420b7eedafb327a3a70c2f9095fd9d869145c5ecb53112592d31c31a419ed30e1e83ff60ba8e7913cd7ab9c65a41687ef10fc72199922ee04340ac6a290b0926b81f046bb77e57a8ea9547d5f67b30a5d9aaecbba0676c488c619f2ce198b5d8812056574f67064f55918e11e9db34464ccb4909dbe4e7eec641ca89653d047c07e0d9f9dcb600cdce9afd407dd101483711956e260e02b2dcf653f8fe01c095e2d42feb57c809b50f50b91826aec1407f0a3467def38bf58bdb3e1539ebc793e409b6c5c92ee2c5c8d021a479713d1e90f9531eb5c43d44ff6eedbd179274ef247ec69f086a30a707e227915cdf790ed974bdbb4461299febcde8f1f861cc392c3857202138390853b4718c53301367db710893b930cc545f58de236114b30e046770a9c4a86ace495fdd2bfe8f91f625101b073aa7623d8453bc2c306710438dd31b060047dfaef6fed28062fb66fc5c4499c4a"}
@@ -1,67 +0,0 @@
1
- #!/bin/bash
2
- # Protected Shell Script - Devicely
3
- # This script is encrypted for code protection
4
-
5
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
- NODE_BIN="node"
7
-
8
- # Check if node is available
9
- if ! command -v node &> /dev/null; then
10
- echo "Error: Node.js is required to run Devicely"
11
- exit 1
12
- fi
13
-
14
- # Decrypt and execute
15
- $NODE_BIN -e "
16
- const crypto = require('crypto');
17
- const pkg = require('$SCRIPT_DIR/../../package.json');
18
-
19
- function generateKey() {
20
- return crypto.createHash('sha256').update(pkg.name + pkg.version).digest();
21
- }
22
-
23
- function decrypt(iv, content) {
24
- const key = generateKey();
25
- const decipher = crypto.createDecipheriv('aes-256-cbc', key, Buffer.from(iv, 'hex'));
26
- let decrypted = decipher.update(content, 'hex', 'utf8');
27
- decrypted += decipher.final('utf8');
28
- return decrypted;
29
- }
30
-
31
- const encrypted = {
32
- iv: '455b5e3bb766808b1acc33a302de1aa3',
33
- content: '7c868a5aea3ac9ae07f421595f10f0dc4642de7b475a4024f1e94f960ea4b14dc1cb53982a1bbdca3868b16156d5a01a9c1a19af307217829d2288977affae192cde728deb1b4819bb8ebe4ace229eee0dd55acc2a13490a4df55a85d9b4b3e49af374248a3a8ffa46b652601c8d50ec84cbf2d1eb2cf62f1f0d24bee23193c7fdd8127f8459513bcf4d1759ee3c47e6998ebbf21ad24977121117e955780546151ade1b6c81332712c44afac13d65ddc48349b7ec8910dfdc0d04619b55562774e1920ed9ad89ea2b8ba3d77140cd8babcdacee9ec9b8b0d7766dd44690735f9f5efe9731325516dd13dbcf6e1b4b6ef2a43aa16ce49a2143994b18cd7d8e7ab9d0369a065f063520e1b1c80758b1692bda5bcbb47a147565efef25e6c95dddd56b32c8ff3225f8c2ebf63a711dcbeccec041e582cc2bd8576f9ad2864676d9726f74c52249a11143a8fe6763e4d4be388ea0211921d612c2a2947c09717bb01e7c9c34f9de71c8d8d6ce92b25cd038ecc635b9576a98192859024560cad23429d0770e241ab693c6c24030d4771c2a7cd769e40cde50079dff500023b512b87376aa0d8c0859187a6bf3927fd6cc557f041ac242917228f286f0896543d05740d6479e1205319d2cb06cd01185dab292c5e4cacc1b829428716ad9804ec2866e80594b9874a3255dbc3880ca68efef6ab11edab04e4afd3376c84671e70516fe2c03562006649bd0166bb591be7dea87a98ae098a3110663eaae9ca1129ac5d8eb2615670528dc1b91d37de38751878f04c5e86c255b10cde07ce6b9c5dd53752b87f0331261460db2fa8843ba4174e44ebd73e38aca5536d45e40eb76fb25449c06551bb143bb5a8bc46082c0c566e88a6cd0395fcc5fced296b547c2d77f05bc173302b174813e8a1c1df0d876e91f4cd0f6962244d312d37edceca477ff565fdab8c20cc650888f15a2ca2261e976f38dc0ed36c7d6c4d3d2078cf3ce02106abf2b456d29b4e10c2eaf2b9ae8031fcf65690641274a3ebcc6254e61dca03e6e44f49dc89e5c06ed73548653b3180075f12e3f6d0dc918975c23ddafff9e4c84ec4a3f9453fe58a79ce4e7edc68250b5299b385a24a852c7eec5b58572e5ac91e5d69c2b23c6a07ca5581c535b2a8d0b327b6efaf5cb3c7f3b96c74fc69a6e27f3045aabb94c86d3ba6e20c5679568bb9863723a66b43ec283035e1b94f2c6ef324f5e12fcd55a5346fc6c255d64b18c3edcb2caa4bd1ee80d1f265c9f6efbecfc3908796d97e8f024d1d2a0deaa9a807b2f41e960f72d277a53d779ac8db5fb9812bcb1eaa5e2f453d2de776d57850eb370fd3b8af6e20a305ef1932a9e28ea2e096996fa30dd237a606bb2e13b86d36497ee8bbcea472a7799b658e6facbfce4fb4539f8b70833dcab3475cf4984bc893ca76c44ce94985d56caa9832c82469bfd98c9e64fdfa0d68b6be4b06c5233cb90a968f35f2f8c80068dc69cdb8ab80bf0df86a4cee9a9b9284774056ea0a508bd66f466311908556354fcc7cc97caf5bd5a27a088146d87a98dd65bf23b297f9fac747dc687e2901442f25124f1dd18f1d0b231852656eee87b78a396a35847c9ae5c30ab1ca3207ae0f79c8ca16e57a094e9cdef803606881b331e7ff4032d68ff32ba79f269a1ed7caa70b2021000b1317ba7ccb4dae5e715f51302fbf243c6255040106f2660f00d6b2ed3904cb7074e6f90abc4331a846c7c2f13dd3c645b4dfa60fe8717ba0191faa26e53fb8a148822c02017b50aac53ba3002c5c6119f88b631733d072e6ec6f15427426a413ae2b08cdcf9e21a73763c81f516b793ebfa2389b5b16bd08700c365af15aec85cba0f09ebc180a8c27de60aaa0281aea1b8f41d05d9024d0d85b07b3ff0c7ca0342c143c8d04fc52ff8d8fb53e053913366384471850bfc69e7b87fca79e34516a5cb4d0478f0cca67394baac7ba7339508b35fd6d3c25e1abbf98033f7981f36d40755d0bb9edd2640e0d2ecc2bf4548514ecf930a72f1ac9ec6bc8575fa48af5f33b65c3a72f71e9d11d58450ccc04656c28e6aec2dd85e8341e551e3dd3d06a64daee1413abb492bf6c417c2e9218e1b1e77a8d9c243951418eae006ef43f0cc4be441fd4c29d219145ff703fc76924cef903425ac7f6be95557a0fba44c48c850bbf14ff625234cc968d679161081770d7396721bf4f838b18bc023447ce274d319af49bac67cc854ec2fcfcca901d85f99bb6792eaa65d14f66ad537f26f5b4d4bf137e4f7a4130b46d298ce3d140d065cbcb2981b1a2a6b67043ffc763655637a66448f0bcc3185558724898f71627ca6945deae7efc678936576e35eccddbb3d43be176fb2f28c2d7b0f72316c615fd87a57ff257cb12af50de2ccc7a05fab446e7f05ac073354b7f68c04907a805f6033a972b252f0fc7e883d79df39dc4e73e91261cb5a6ecd20b1ebfaa30ad32f2a32ab65dd97822dd70e69881e6e6c8431993c12f07c2eb0a3a87b746269045cf4028bdd641cf67d75f7e2057fffc447e413bbebb1823daf2d3f02e6bd2d2895f4a2228f45a6d735c5475f0c997d463169d7d166a2f1f55689068e7ad9593185657a5064deedf849530e7b8221ae5383e329f6ef380189dc05f2bcf6a44b37dc6a42595b19ddf73ad04a14d9680fb01b7af4cb869051ea2ab3234c59f53a10709e1ec1735e280dfeb01e41c5c978828c348991d3ba49deaabc0254f83f850b5b3a3639e33a501121613b6f05777b9e78d7031fe3b0874df9a578ae66f1e7e261ec4502b01777b81617f7900b3333f99f578e2d297367ef166df94efd457087e4334384b19ef4c08a296fa4dc9bf90c963bf4e5c9a5501206699e8002b5290903674562604b704d370cfab4ba9070fc997a194b322e30c39767dbd6b81155732bc1e454a1e423dd0c278fd6b15b5351373240f20a5ab185b962fb515d29bb0ff7538b9e997864cbc96187398921d47ca6f29c2b3c2a6441614c04806bc068930d06c06a765f385fbe9949d3393c55393f52383fae4d012db8252e18e8ba9594e4f3a42c7058ebbe588da1dcd766895c182f03aada9fe9b05ea70fa5f52b9b775c928051b43f508bc77ebeda0c5a5b8ad8e334d5636badee61e39cb692bf3db5f636d804a57a8c61f6b40fe64a34bf0cf87889270b8fa69fa85103dc28d71ae22e74f051bdd1a7c9d8a55d2e8db84328a6765ca3058063c89546032bf85a0440907b77b4ef007545cb58c1b7801f162685c72b846fe31fa5df6eacc878006c318e5a8a5a35f73ba9cb746bba227fc712414a7e6a7da33ca50fa9e8a32039783ef6b297ff825364b81a432fdc4aec65654c74f6ba3909d2f623a9933bf956e7b9526f145075b2086a617d89d2b2a2ac3cf271dae20c62e0e7014b387732f9b4e617714f08dd2137a733d0a258fabc75d62f207aeda32c8983ad4abc36d04cf6ca565d3cebcbacbbf09926d3e2018d50bbe0775e55a9961ab2e8f2786fa42678fe79261e7c2c3b97a4d4711c8cadaa07323676808af0c6544ce0472f2c57a2dd3279fd29b62ca8e11bc091c61de85e25d174bb62982e5cbdb423b9f0857de6c6ea66844bf7fb2e85c9df6d752afab9a398bb38a95562b67b65f69e650eee9491925cd385752e0aee44766ffea484f937ee72086200483981cf9bc73862d98309db844f1e2c5c3a69dcc24c47bf32b2b6388c77833dcaee2623f3a9e0ca9ca2aa82494fe4433475b6c41cdf51dc39f31aa19ff043a715e59056202f2610c3f9980d6ba23aab95bdcec4bc0986ae6a0a62fa5a8175798e2bb46e2a9e59f033d4fa75385b6107ec358e4371fd03c9078a01c6659ddb0d2b3d8959e9cd87f3b41e108264f686c24164156c51f5f1c37dcfcf92a263eeeef18124953eeaac5f159a65a8587e6b3f4dac2292b6122254277f40dfe6c91717fdf96d8a2a472cc348a643ee0c29a2cfff7c2f243bbdeea37040746c6192ede5ddb78faaa6b3e213a5ab08ff374fd1480bfaa03ba818f357ecccbb8f2867564e17bb3657c3dd0c77fcb835ac3e95453478b3e6d2038373c0c74bf8650d4f15818b2bf527f154117d7ba603ab41c3fe3004cd627456e9041f2bbff42ad4f5b2414bbb505f5fea0a369b28b81d81ce54c5d7bfb9f1b0d54f7fb1a94084f3e5135d78755f94850e4067e6147890e77679d72a459a7fb0e18febed0d94f1fcc2c862a94fab6ecc3dde0de13c7e2cd20d28a1d79c3014acc165d3eaf28007dfc759d915f76e2349f16dc9492510c3c5e00ac7c5f3d99424bbce6b22220a426dcbad2820ca3db6955fdd044e667020f7740c1a77bf6100ad1389df40d7b6952b89b4b6c9e6739163328fec5b2036a413656921b5599b07d59feea4d787255cc4e29af5138cf8416ca517ba0ec399be2c109e02778190f7dfbf6e4499c0f3b30ce44f6d0d208143c8af689240568c9f3f2934dec547949b0a8e5369c0bb09b66866edf370cfffe1d0bf543a0f3029f025ed53b7a82d85167f447379cf94089ebfb5e8a4f4322c30547974c36a57c327931c87180397b6ef9b09ce2b748a1d8e5a377d8f06d15b715d27136f7234cd330d6e8fd2c0ae921484b4a7e6485ee7bc684c77a9a622b53019378a101ad4e51221c3ea2a5e2d5f6349ae3138a25f3f3c574faa6a2aaf9b3f4d2efd03051c42da78fa0b0c1ed404a3f956cd478f7ad302ffd0b3323e2bc5b0084c367884d554447e1d6267c5153c82502cd541268800c050ea3f2b7430b19230cd31f327a4488ca154be11cc3a7c2173f84c09bb94ec7299fb9ffc245eef35431066d30e28e098552006b6dece8dcceec66ab0a5f084b4e5de0a61540c16d7ff4db75366fe978bceac7ef3db3f93fd7f5d720aa57478a7c22ecc4ac6fb0f02eb164329d2f589e28e3df98202ca6a4cbf60e0add84915fe77f91f64443cd067a8d2d335b19c7000441d409155069d26a01b6e5a704b00eab03573859426fa7df480d5e239a36cb6916d29679edefe66d166788c822cdeb474da01b8be4f984c79cc253cff8a876d45a20a19fa0425416f318027c5083baf8573c5800fa715244cbac6bdb53997b39056fb1a1ad93b33b5dce6dcedb8a6e85254097957c67fb68df51ac88d1672de918b3c554f205d7a6e7bd75f702a0e65e4027a2f6e48b6e907fe6d8585397a12220093e824ad9c5aceebe5859bfc6a4cd46e7941940c76377b9fa95171f9dcd51612cd6dfd82648a730e124f3eeb68bccd8d201efa567770b705c07f73791aa5622315dfaab8a387ce10e517f3ec49f2fd9818a65158dc60f7ea96f0b90d63e05b60397d7c4ae7f57c5f1edfc8c17d3a659a02a3f22fce8497a7e5b7a4c9be462b4483986e807e32cd3a2c03e2c5ee9709f9c8f11603f6d9d9f2d2656a90edddd3af29fc45da5111c7feaaa709ff4387d60ba8909691a0a4625b49790d21057ad9adb3fd7541442b2505311f698999d243b4040df591ab13f3672b60bca4a24ea6403e36c92d1becd2f83f788ac5f7894d52d750c3f29b3411913cdcbaf0e78c140108ab9a3e60195b7142887af783900a315da44b4335856f5131f7411a5d71764b7b6fe5c9c1c8305b568c194e395ee6394c9da5b3e4a37a55b14fa6ae6374766002b2a6e80c5eedba5cf9e44f90170c9ca86c7b3a437103e31835b3582750f31471b686e8e608aa9ff75f0b6ba9cfc90bf18779a4375e8c139fb894f687534d8a987bf402902afe1319fd4f38467a8097458f6d7a1f13e4377b5c826611e77acaaa6d88e4abace4c72a9a992cc8815711bd185660d48ceacd3c75bbf04bfe5f5012af5dc04675883997d38591ff6850df2eec8689c214ef0058868c3509f00b61f6182ad25427bd94154a0e8cfcfefcd85ccf9c0be168c33cf09e74d22da15e2b484cf387f368243fd64036f351474876508a8a15d6cf745d5654d4b2fb7e79fb9da5c925d0d7460ceb09d8a6d4719b488fc609951088a43e91466243b5a68be7f57015b54be344fbf6c652f00bcb412ae2004727a769a11b5440a7329600a3862ea3d69e71e2481f443995a2a29d9a001f2ccc350ed87cc6fc5e3769b3552362622a6094ba393b64dad8daeb497d44cfcac56cff50c996d4121b200334b5c7aa6091f4d0ac51ca3f148ffb6c9f759f5a924c142ef730cddd5bafd68ff76e21fc8b0fa509278ad6fd941bcbdcac891e888ec6d8dac6dbba6c8f1cbcb83f26200e9d153db879d4c3e8afe4e49de15ff7636b541cf6da5ba20a79cd83a7993e5b802aa4ff701fa95dd6a28d4a6ec41561c6712c2509595e514a535d3aae4ac72cd464b08e65d1bac0f39e6289c80ffbef315e7b16ef2a79d3faf734afac2de436d2f353e0227227915e16addc7adc1fe1786b01ea2647d022784d2b597556ce51ced2cb7ae7fa6d090c4f9aa7b7b3f81c223aef0eaa4fed6e275282869a1408b67f2484d664943358734875582b908518944d7648b2f8727176196e44ac1642ae5f59195d5a409fd7de87036a4b807bac7dcf7ba3d67fa075018c0e94661ff7028937187d313ac2c397d45ef973e9c1502143a89c6db17dbffb40485c68093ad537dd99339fbe71e20ccbb4063feaea4eda98f9fcc860dae6397bc7f0a61cbe35d9f6ec4db1dc9b8016e468c2a1c365e2622cb8040db5201983e4204143b608b56feee5d4542cb3e72633119ba2266a5e05c846f98137efd0e36c3bee92b2a86e5eba6b0580322061113d33a0ce487da644fb3a03359b8efe9f5c35ebb41eedd5290a5eafa76accb9543869d45a5c84806d3772852d26083d1367f1b458a3ee9a48c3f725260ccbc06224a7d5fe0520edc76561a1625caa44afd994450d6160a9d873c107af9e518b12ad160ec19fdb76f03fd372d3a2bf9eeabd4e02ad0535910a9d57841167225700c964d4376942a1b576d0101ceefb3f4a3d853de54892fd59f7985c8b4001cbf83375e22dc20b6e588a07068b15968e3fbeaec4ff47775ea37514c6288c0a5d6cbf4cf23b74ee08f7781297a729c7c51ddcd8184a6f288638f898728174a8aa553f36d71a996823ac698907b31f76d40a707feb6349cd82dd5c234fbea9dee98af8cd7d9d91dac1b26602b38c8c68266d2fa51625541e55b4de951e0cb87ffc3b72f841515941f1cc04190df1336fbb916d0253bb10a141842431353d95cfd890e6d9a89ef4d45127a81e0444993691bb564c4fe2f2cfab3c4c8a8108ec35eff50e69a9a108ec9018e3da15613e7605cd89b6bd7fe0e2dae9f6595ea13663c3d12d7b5db214c4eebf5975eeb3bf3f148a549c5393920fa7a617ca6403c402a30f1bb5634d9170d89e9af88afa294e3f8ef7e113d44c4648416a30d00960a7912544efb1fc8aa0846c72a6b14e9cb483fe44b206fafeed2b23ae7771e5ecd5d3c77f93af7877b37ba4d88e1df6f2e28b0379da42a445f082331534c8d07c51b29bf66a1a69b8aca83901f423e4c858dc02761e3deaf507ceabdd75de917d4d317d0be26e69372f63ba815bdc328965a3235b9103d8957be9cc398af3ca353d1b22515e4963380c10eb81c5295918b6f946812977ccc2288086bde846c5fed083436a66dd8c9c8038d7d4536829d64ac94bcde2bb83d456e3e07fe01974eae8b899229ed0353b45039e6a75350878ddae9902642cb23b52dcc9f86d6693cd704c2dc0405f96b1e83946a4cf52a0cae796be24d384cdae7564c965332824f8c6e65a1c4fac77574287de8f3276812e9817945cb13972cd4b8b4bfcfa1f26447b2132d401adc9866f230a52e1ca7baea3ead52af767b611812c5013850ac58e36770eb3f1de2e4b916d7375cb69d078b2f28e22898d4369f83cf690fa30548e11101e12677875a289233ae5dea019ac9f07d9366d59dfcc0fdca8ab5171c52ed983e67981add1e29e89392067b1bd3dcc2160af5c071a3ce47ad7bf37041668f8d70cac17fd3e3fa389cff58d8b323dd290b4ea4fa0be0ac3b005069f05bc506a006d5f716902f784a1566d916562c9a10a3eabbb6e86c1492ea4a9972961afbb96502ec8c60b0aef20a12f0c937e6202e976babef891b0b2ba924270ac6e8caf2e75aaeea8bf855eb8fe64906097d8dcdc41cede50a960fe19079ceec294c8ff71a6ee7adebac1729eaa8dacd9b5f4bdc9dcf8fb98cbc47e2658abcab3c9e715c443f7aacd78e745de2c8c213b180fd63ef9b54ab815d21f1f509c76414a2adb395caed5d5b1acae24f863b02d7b1d630279767fccbf5b9b3f36e10220d7cdf6a90e9606b62be7451faa187195c4277315ac2f11d971e95dddaea0ba10c8cd6e0c3525ce3f4e16db353ac25ee30efa4311d524555f221b4348edf2f0fee904d5a3abb63b3e3fd711c8bdeea46c5749929f886a736a80be86caf4fd1fb63660ca89031660fe0ea4484f38ae8ea6ca15aa9a3de5b8510a7155b8e01996a75d7e727a40b4caafe4096c5ffdc3f34a80f196627a3230860fd75ba4188406fc376294994367aff52ad67f5838941cd137bf493f8d02b263ac0ea412cf0373e66ce9e42185f7dd084e88fa44c579e40dfb7a553494cab46533947df2f5e3234ff2f41906011082bcb4936f01536fb343aaacbd0427466210e509a41d58c06f05d3c900929529f4e42cfcafd4ffff382a8dab1718dbe925ece7a692c12734d1d47468bb5fa173351928a779fd6cf2d4603ecae90d85c56824b02c7fe293f3c41edd087fa94b6619fffcd9418b2d4dae126e02cc4232d13c6fbc9fc0c500a77c0e42e48b6beaba22338583db36ad29d691e35a4354d84fffde6bb9fe7a8e5579c3a531efa87a210658a0917ca63ed3677a9690f517478d950b3d5c98e646a7a370158d03112a2ab3b925a51c7b6e47468062e0964d7afa3f6ec998add452a315cb50dbae84006c2f981ca1d3b3ec37ce1cd4900b48f2f0bb95765596e9393e864074f98dbbec83c95532bb7005291fc38d2c497afbc51b4f04f9e37fe9be4e57f4b3350bf00266d2c7dc4f7434e92f74b52ecbb9a288d97b8ac1d33201e09e300f6575a5d7e43374bea14dd48ed86bbe84d5f6d553f145dbb2dd196dc023cd901f8c68e32b091b4d445538271b4c39dee694768b8b4055ee300a165e0237835e47d9e04a95d44ed8d11d5842e7bcba3daecec0c555cb02e3f9f0b0e15c4efea3ff87e29483b13a0c72f9bc9103a3397ef36bf61a702e392ea1eb425f768576e8f24506ae758e25d6b48c19cf293435a5a38e8620e1ba0eea6394e5f42a3c1b811c08ef8d31ab8f94c373259c14e3fed5d3acd39384211fa7208742eadbf5dbc245127495a9f0a75c03cfee563bb4c68500cc7fc4ebfc00747ff41a61b82227680216f8cc4dbf152854cbec07b3d473893d37966131a0186325a3175a9c42c541efe655ab5773ad2d1dc30aa1c1290b90a095585c80962da115f28f4e9e21642f48c5e962b0016a33eeb7c52c1e7808c68c4ffb49cce3cab07cc925f8acdf1bc95c6e6d2b18b308a80c428b153b3153039c9367e3b2d6147666912d2c005f2781efafc7d11d3412b67050150aae509209c7e22502f11be22b8b6dfd6e5e5d06c1562ca3941948356e32237013eb77773981b3f9af789c2726c706ebbbd1120688957d7b1aa82150aec0396153ca72d6991bf43470d0313f292ca6be9c27700b9539379a784af78ed434b45ea29234e94792ba8efa2c912dbe624827206d4cc3dff9d5e81f65d7568f92138b446d695c8f6d605b3c90f8cec8e6ee12b6208add084f389e2f3823f441218512c0ae712be8514af3fb7366d6592b448b89b1ab88ad871fb1fd4bae0e42fa373395c9f694a20a948e1ef0065e5f747fd949da03ac4989679f46ce41bd04bd3d4ca4c6a69259f56c0d72b5da0a0f6bfd2f1be7bafde41bfca6bfc140c2ac45c989ff3ec88fdc8ca76af03563c95e206329dfa3302c78dd3f6b439f1ea877d3b20f67fad836bf045dd72f9947b40657db530135e243a7bebe51d129a99c52d2df43a5b09d1f0b0d0e123d210528d129fee2594973df9e73ba9483912a065b5df3cbde05f887a623fb17a68291cc0c872cf9ed54a713374be542604955f9828c5bbb93a2c2a32f9d8148d850b0fe7b5bd25f9fc50647042bb22340f437ec6929db39e0f04d253131cca81504dde65110c9dd6cae88f889ae9ca095569ed8eb794fe562b11e40e27acfb0ca4ec22694e6ea068434e00c59f93fdb48752eb5af77fef4bfbbc0192be67e3bfbcee3c5f28d2281eb415d5ecde6816205d1337ad882ace18cee11eae414bba7eba3856caf4d57e37e646f03218b1422ef22218a28bef8abfa86cf5bd0693eb9f47aac138fc4a2d6ed24ce4f81f395327c22e99debe12c51dd0e29a4d59f6cc3e1149001d2a180dffbc48dfe0ca7a2a5364e62f9f68ce7c5068f71820f7210aabbd198deb0552d71bae66064fe86e896ada9956fdeb1b9690a0c0e4850c9fb3f92c7b657303e53a1bfb6d0a1dff82e08e669063832848d29d0fc1affe534592905fb03ec1405fef575450d4612dc4e8d15e380e5f60a67a6b666a8e0944d28cee7dfa45c47f4899cb3d431f3ab1d1cfc3b36e9ea348f0e76f12b870ad46bcbdea1fa4f0407b33e01f9f50bf733d0eb9be0d022790512aa33715e0c6e61c219688221fdffaa68642de54e5fd0e1d8677dbeaecbdb235da8f8be5e609ec8863bceed91429e043b907389adf9f7f550d9ef71583f01d635549dd0d013811bd7e32c86a43ff44ced8e35c91d495cf0f22108013eedfcd7bdad9b13f57d276ed7d0f2028b1fa8b8302dd15f2dfe174a18f3067a9ecf5df3212c0baf8f83bfaf87dfe5a73de07b38fa69bafd03c248fe7c2acd148185add1bcbbaeff1aa3b2ac6728cd5f3e894cde56ae97523d0f5eb9be8eeb987a578d45775e31000ac5f214913d518513fe877657e91129f45a50619b152a5a96513dd2881af4b8f6483af59b990bc1956bf16f6d00905291f5a7b3c131aaee791f0d890f7740ec7aa6ae0657395e8d9dca9c3fa9816423cbd7340ed8502dbd248d126110746f916210eeefc7f40d1b0594f4e0b11bf1a4169c85ffafb585ee151c6fd4b8c43ccb0d79e7365cb8cd2a57026cbc0048e7414e0f3472fc81efe3ef96ca6d9eae3baaee3efc99066cb323eaa252a522d05401db75b02cbd40eb73f04a1f27d2c352e056a84c5e8003da0f361199e3da39f653c2121a60d50024aee8426f52676ca75a420ec45e1c25b97538116f80d4395882eff0985238fb547a74aad4827a79c9439cac6e582b535a479cd1df56665b188a533f829f477b8d60bda366ab53c5e33af75439a2892c2d4d137f1c9b217c3ffac85ca852d47188fd6e868738156d17505a70d8bda856f1cf2e5c017c3a6c8583c26fdde34dd2725cc2de185362800a7850c6d38e9be660d1c3834ddb842f138fec7a1322c5b6155f5ffa1d07e12e36a175b0cfb02e7e5acbd1ce3285804d5115963f3b56c563c43186f3189fd775f50de1a1ae516cbd694fc82e002ffc93afbc07f059771d2ad4ed931f447899df411da9c4a9456480462ff24a58b52a69da512c5844f2d22a741130d01420e2f6d328f847439150561e9254746fcfc185e56742d5006b28dddeae25552b4c984e7ef530c90383249539738ddb81f3c5dfc2f7691221f113ff3dbf4cca11ecdf50962d13c4f328b7b117798ce0404550fd0a4ffdb4928f9d0c46634d2a12d1d9ae3f8a04b2e48f562020dca06c89d7ca65b6e54adc9fc05bb1cf0453609373c0055738aad7e2317717d94a5a9f871bc4caf231c7ae554e53a1c24d550ff6e3aa7e71b34bf694cba9b3402281d998df4a264d84fa615d00c2e4d5924b857cf8a3071d35a72860e7a8645a024fe69f6a73eb705d65de6f1309d8604e53be3e4decd2522f95065532b3a628101bcc97100b5b9a978f90fb7de09ccd13d64d246586fe0f2397aced6fad8d018027b9a36bb07eb8ac83d4df1661aee8264d193ddbcbafc4c275cc2e9c84c3316177d0c11181bcc15d9457d3d2bae6971f86c60e2a89f339726cd09c4eb4967adeec1ec16a64b6cf8a196aa065438455e4da58e6b24bba4a46a0b9c0618b3e18158e22f79da047aceb88582142416e07d743d2c826c6b6415477c61bea7a04960d6caa96b1a33aa1e43d28355008e63a21f5bb63adf17b9924ca013ceeddb3adffb7c64a7101d39bc0be2f33a0acc04748b8d7d65c65f38566a5f70d959aa44c9e7f8dfa6ac4cc7041438badfa7e1dc44fdd1b7b7b46cb671680c1106d6d6b4960d9e7213c6c2de7d8d7fd0710f187d2d9d35f59b3929d953a741b210238892b7b394f362241f88ccaa78071541e88d245d499f44e3ece642a68e8aa52a545e442ae8b550665232231029e8e0184b22b621ebeb0168581286b780480893fbc074ea83a2442b7ac86901b153b1f839343c2a68fee3ac055a2f2e4978dbe135c238959a9b63c20ca159e6603c456e4fe492ff0f4398b9edffab950d03250cfbf3edf039faaddf59598f6c6bf147bf812322de20f9810ac151bbe799b2bee519b808526a0a9be57af1f39880dc8df370b4051a35ccd4c2d0ae5b52f99ed819a7a0fa4ee917903f5c826e0db8151f27ecb9cdf5206d33644f3ff77552e4a888aa36fcdac9d36091e324525634331bdaa7a3db25e6c80a3e4daa0bf2209ce394f003689c942cb934142d3bb209f605f5c2609904860270bad1bfe3f2c81c8a0e7e56839414048ff07c79b6c396ff82e13c96b5b0cc403770677aad5fda22e625410d9f3ca2782b4d6b369edd5fab33585b0172078c1d3725a655ad9a8097f558dc5a0f007cdc6ee934ecfeef4deab26c95ec88626a68d25086e4c1aec2a1aca91d61a380483633647f8df38d624efd64a946d8ab82bca71a6117d8378c882273d0188f298c5e7948734baba4f78c47225d53b2bbf2c675d02bd729b82724b18639c410cc6051cc0f01107eb417ff738842a9e019617179120d1f7dd1e668feb3f38829ad734263b3c312dff87385ea43452a56541b6747df169d6ebf211b38aa447283b996103d9013515d94372dd7441f8fe7060a6a7eba32fa7fd549377b6ed4a96496facc9da2633c7d148c397db141147ead56a1ddbdf9bb5a357885bf600854f53e6803eb154ebe26ad646baee183f479989cc4fa25d00bd953b92ccf89176400213427054cdde7e38741da76647ca2f1e415ee501ce656fe8b60e493e5b884afd2dbf5853feb9be1ad3f1a5d1a27839cc8773da7a47d4f28f0d54bb40ac1fe8e9cc2bb823eea3ff1e088685f393e3bf99741ffcc469528b36f8a072b0136cdaa5fc04d43813b255d98f7fadd48934207319be980c8f0d9b677779ac80d0b55c6f4ee7e5b53d3a5cf00512eb7a8351e42f84173ef4d18691a43264d5d94f30ced5aca02e0264517971a3bdf265eb47aed828adb55d36e1576edfabc86bd86bbff429c7f8c7da5e865ef3b5c37e62ca4d681e1b373be745a8d195e5f4017a0ab615dad67a69ca4a1a060ffcf235158654451799f4765a02aa5c0e39fd2cece31f21c808f90cbee872cfefdfe46ad7495de6824494b2a77ad0907f0bee47f761f5661b6083b88cfe76d1376e3d484f7e74249c96f75dd9b79df7c247cd23a1b2954aff7e5ac42a8d004491eab121c017526f607eac084e40990bafa4148496ea2102345e50dc38f0911af3f46e2a5c2c8de830ee4f5b8f9a334cd82f36a69b2970ec7d233d339ca258c340e6f3fa71ee181b64c29b93cace7680328f33f587a874c3989b11b235c179e4a153148428bda57ed212a05002a1edac50991d3581eb7978e4a2a88876e41926dfd6cd4b5fbedf848a69e4fa36a5532503e15bcfa22548d4b0b3e42db0be2d6ce8683a31ddd4e9c65e309dd1244a8587f45ba5b9f872d067c46372f42c68c8a8a693824afa880c8093ab9d64977523dc3e8f8a9753ae64e49277b52d82aed58b9dd187c92b6cced60e2dbf83c5b13bab11c5191b92c108b0c59b34c0356c9c806fce4f07b825c6f83ca43e3841897d4aa649038b64b49dc79d879b62efab8d5d08f63451dd2345da5a31760cc6bf947d7e51ab4ee1d40a70740704a70d9935059a8141d52c9851ca616b2321648e2cc75821a1bfffdbd683e929ada8cf3e0954c31007afc78c3d74f4fb58f81b6570200cab6c172f8b948c73f94249e668c836ec1107e600bbb737650c856ef35d68c212eb3a15436a5644f1a800deb6d71bd2f03b3e935c1e2a10819064d55368aa400418e91f7f18f320e857a3be4b58c0e33543d295011962bf6c77560d40d8bb89eff0327a0aa8222a123b9b3f212ee5c090ac0d4d8559efca8da32124494d2c606ded5cdacb9bd2a79b7f741ef1b07b2b9a2369818153f1f47ab2441003d12df58f70942b0d0a7f5ceb3889fdcd5ba9f073dee93cd83e37287bb4c6838d3fe28a38888d6df174b02fe628bc03cbd9f03610cb747e34e87148b30c9a10d24d0d61c83bd95cb196154c545eeb5c8e4de7dcac8d5e991a1ae6accd388520237462f75669a34277c4612f98591bd0fe40dfe2ebbfd073c5e4cace4270cd3bd8ea32468325f3961c5a5d6815d3c3119f4bd00b61419b9f22246be105df2ac2c29585b7e878c5d9d88065c3b95ce607cd027a1a9922524fbe5843ada2a79bfe7064815fff3c638b19ade25d58594e230341ab8c5552ce61033bf1674ce32fedc26bcf034630234fe92ed9686ca364d3db32c25e5e460b4de0985b218860a1eb27d1448ecfd66c5f28827c70c019ac198b7b466d37f15bb2c03ea582de2c530f6d4acac8728441799b81987ba87903cd412900223d9ec48ad18f0bca1b58f946e13e509cf7fa6c068b307b9bd404fdfe2a3cc5da4459e9f8c397563a43234af91d466bc34ca3bdaed5f1f5617d112574e2fbe5265345f153b3cf4e000eae347cf929e0bf0ca23848afa7bf8521785498f208e5412cfa7985f1f235fdbbd5305f600fc07f484588006331426fff87702112a92d8a799f6d83b5d0148aaf97e55161574c605546c555874f2d638f97aa0d6996f98beceb24b1e1da7c3a845befdb7693651000d62f8e97533589f7b4d3e8cc9519cebdbdf2469c1d5f570432482558cbdeaf099aeb8eb55a08c52dc3ea4420265a24a1a05f44f1cb7418f8bdae640138e0667fc15e2490c64c63bc25f0b9a561eddf24e52815d254adde290ed7402c2b3c6376d02cc02c8fb916db999c1c8f57c32da49d8312c252facfc77886194b822857568f1b1c31738d0575b2db1b56d8094f74774f23cc2cba4eda7ada6166a31b45e3516e7d116b548a332ffcf174e4f991f07bfb32b070f0ddcbd84d412af81d0a2da19064ec6576c41c322139989b69316eec85da90c04391391846c4f12e14d9b45923a5d7a596c0376f31722ae54c47b066b4579f0dd8b31d1e72cf25520636ca900c5bcecff338236aaa71dbc87f65480071515cc847351cd437013f7c436476104bfc8213a9b52f6624e64fe44d14cf61353538be10af64efc1a0c16dc7357f6b92d63d8c7db2bb360161480d832d8775d8ec72c3c9151a9fb9b2e9e1e2bc3e179437aa87ae76679932378d71d8a32f3a417a80556fbeb3d964c64a3fea7e219640a2f0d059df90b0ecefcff29b7d5b46c5747b86c675c8a63a6728df41931cc2b3309f6f546672de72ade04450cc883ca802eeabf1d54602c2c8037c19f3caaea8e7f4d208d544990847bf876704a77fdeab534927394482b1aff4b4a2d3778e0b60c87e5543ed72e36cd8333abc38d04925218d5bcb589ce5a8e2168f30b2b101acb7bd51ec48a9d7f9fe0ec5a09d51fd878a872fddd8bb66c07c29310a19401151f759affa5a01efb8f1bd9012db4e0060e1539bb5968839cbab2a766177c7ae5a406fbc73b5df58ae0a14d3fcc012d98af20e607ce866d15138205646dda2afe06a8c67892cc7f3485fcc42dfcca9e80b9830dbd49456b6c715db30a38f9ed0421e96cdb09037d9cf97bc8231738e97961e91acf8083af3e1582a00d4628b0eadf9385a0dde638d49ed9fbbdb66fe5aac6a75c287556330279dbdef89aac2d6711d62cdbd336eeb0ec3f1410f1d182f2873efcaab6e6f487560c93477030dcbdf1385e2d298c2602b1032e055a306a3d13ae73143a400bc41ef7abb56ef18ac0558a353be19ac43584d74a5a1f99b049a29b424831eec1f3d072f48cd1bffa8ce7296c0d0f4653684b508728e3eac72e91c11ebfb9e17b51242a0236eff24776865ea42d09f061ae476e74bec790435351357accfa2fd62ea09a72f7a691708b88e76f9d5b482e29fe9ae28c2d9511b1a1d587e8862763fa7a9fa9ad3abb9fccf8c67734559cf0642cd0220fa434a79fa2fb11fee8b657c42e0a51339638b9df51c00be75565cd264633fd58df16e4af99965f0792ce282aee1ee19419fd8d20d491dba5b0452688c63e5a363dd149a2902edd168102a83b3619c18caffd7eff2f6bc10ca2b0a07c48f150ff94f9b80309aeb5bea181e6447feb8733c230a645289ff4152e46969aa1ab88fc83a4523c507ea5bf0b8eeb63a2a7e5e1668a6abd811ce10f0b118b32dcf1e802cf3a40f7e3cdf189e1e68597af72ba79399a09c837f7c4baa6f06c9df851d6b17fa40e774bab0c031f39cb3ec2772ec9ce3239573056586414188f84155dd49d5ce300ae61ce7ddae756673a36a5bafd6fd1fd8ce4b1832fef4414688a7a6f158a66866171d0fe337e83b82b7a304914a7433444f7bd09158043626f86ead4d0b4c038e019a4b782c9b7afd503a93e3a6491085bda88b2bc6c7ac94cfc99309c5f277e85d81d81795cae1b8ab399f6cffab60c10743edc2f12aa21113688a8dff43416853374ee8bfa19c1d8ef7b0cbf8d3a523bf9284a3ae8097567c982c5128bbb0387ebb14bab329eb4fadc207620176d8901c984061bc8bad9f67193659bd2ca1486cb82637171d6b81ec4ba28fe75a1bb129fe9d20e43efc0e1243c19b65352fc3ce4150eede1c3388f8a556ead1346c1444b6209e49a35297fa9d75dc058131fa93c41d0862d865c8b652431878cab1d26638978e7acb737845f93a9b9b64f822f177916be44e6656a42aeda9365c4b37720d8c3ccf9dd07ffc5af24cd36c439cf947ee3b033936b6330befe010fec80e7cd7da00e2f6dbdf4f09a8ddb855f5770380c377da103055e44ba86c08cb8f25eb7b39c3d8c67f01487ba88f6ee0c451186bf6465460e92179f578552e1229c6db8c573032f9d52609cc17a9a28474adcf79b22b3a996ede0dc4c2a9ddff47715dfc42c55f93e4c10498c8f17f2920710fe470e4066b07ae7a00ed8cca193e4cd7540b10327e7e2206d4877f5f24b880bd1817aaa72a1331b07d0a2e33318c5424bd9dd0679b77186c506d2d56b6b5ac1eb305dfb82ecba1c35b233271209e566551a12beae23ad55c4491fe62f13e3081d42951e2b9733ed3da4e79d907e56fdaa0faa4f2b9bf3a9ab611294e69654dd6c0cf960b2ac079858630816b18dbe2ec1b9c90ce085a9ca1a4a6638b430062f1ed60b1e8e90f7dcb8a108b54bc25de80bf844e61ecc64a5844442fcef25d225069daba7a391787370ce6613af6afa1216941148dc52fcc0cd7e865ecc32fa0b1c037af9f6ea2308395ce6d648bdbee9665cb9b66377d68ec9d2eb6afd637a3cae1e0644ac5d476b7a20665d50ea9ffbcd83125a98aa083dfdb98a62ed32c6a7a21f3f9a6f9f8f8d377940718c5d16fb8eedd255d0e0fef8c35494d3bbed9188cfba3dadc12a7cd9b7cb40ae6aaae313d3e88447adb52c55ccf05f189769660886758cb55e277838e2155277b3760c076405d6c5b22f8af7121aef57a7a19fb6d451ff4cc441cbaf8a9250668976431b34cddafde2f15cb4d634dee16500e3383f5327b762ee75f1d2c6f5b362c1d8ec7187b550be6178d7d477dc2c4a2814fb621b9aa8c4d4d35605fac743199d390281a960ca267f74403b6dd3d2080e54c7a30e3fa0d6d49ad25c1ef47b508ea39e60841babd1f1cc66263a51188232cc8f7e58b3ab39b46b296c731841c7054e17c621a10289478fb1999d56c2a33e8c5ff5c6811c626da007f50b3dac51fe387373fcffc00aaed57a9f78b5e08eabd4ae0759793d8fd657148c7aea6d029aea31dbd9dcc8fed201430e0c74f58aebef6e1fb0c4bba2f5c1ec8c17fb07e621bd4d3c896e22a1d7349f58dbe4bb575fc3c11063be9b2938c56f08655702ec62568f3b549ff098f318b3a9e1413b181633ffa13269b86a046f634307b0f477465f0a70a3b72e732ae37c77e9f3dba688d4f9d406cd1f9ccbd022c0027a685947e8ce5a2bcb4e6353eaf4f9eed66c624e8755a84c85e827a77e5c1891c3376aa733bddeaa2335bae7278bb1a9f08398923c8b0617d23768c68b5f959d6c6ebf3b22569b1abe1a4e053c4a8c8486730f543345a33140a76c246e4a9d7e731139f62093329d6627a7bfca9b0c68b6a1fd1c4e398ae6dddf44e0c5120ea8ac5d00c662acbd3971954972876e7b829709e1a161b62a5a5a011e61adbc838142abb8af7688d8d8cf6854aceedc7e8c063dcebec34fbbeeb1548cb9677f31b4cb9e7ba61a07366c4ede959f378930eba9835b0dde0c88ba99415b29178a1603c46477345ded1271cdf948a01c698001895733306d7b11e282a9ef394c774b787f111add6f61264fb0114d5f304f580b21d52ecd5b91be56120f51d140bb4dd41a7af1128b362bd6aa391bb8f820b73004080345328652af89edaf2e7e935499f030694d2d060e2aadf23229cb47677e7753f81af2dc536785507cac225f927a58d33b0da6f0970102423c82fc629a3ad75b719c52eba1c676db6f9df8f61cf790205c77b65f417018d9cddf92f32387029ded2d2063b358a04dc718337a3d79f9fc8afda04e7d13a4b3f684061643e51d74b611dd48960a90f3804d6996d3b3e5e56fff84971ddaf60c9ad250b947cd12e74f21397a6b49392a3ba2a56aa7bf5d65da8abe9b511b9778a212e6cc086a85bc5b6cea63f6fe2521de07f2692cc60d52d9fab626242152e3d268e056300c7ae617ed9b678e02009f6d3b41097be4b5a425fa7357d973aafa42a36425ef5092a6cb3e416d9b43acbc8b53f35600107ed061e1a8adf866db0d1270542ccf1391d228d7290a62d04ad82cad949280eabc689b003d9b77822fff712427e9e0b86f0acfc6ce1c01857a27971913acd1eede25c75ec2787499c1ccea37aa32bc29190cb46a8e7165af5b6644bddffbab7a54d3e1849a579edc071993d35da12a59c8a6f366d61c5f545f1533a284ea49c6877ab420734a0e53719d5bcee14623e35a1d824bf91d246ab088ae57f4185cc29bcb5b33f294def78ff3bb7b73cc55e3a7dc53c7bc0b3a6b1a33f3b2e7b6b20ba0587ded33deb4a916e482f942e195e7f3d6c38bf5f271469f77dbec8e4a6502dda04a3d0db346214843160c88f9f97b63b86cff6589b1444055897045eec477a5b2374418277c3b7e8b32017251f59b7c0b88a2b4810b8ca4b36085a08b9dc7c0755c3c5c2520e7140320acca0dfe742e29a4323b24914ee0b86e83ce664f3b9c9afb930cf3c261e4bb706e8aa8db4e198b26e44df49e0720ae7a30aca8c66f7dbf5403ac6965376710df2273031b4dd563546f2cfd431693d7fde8f22fee4db74c20c80a504b99f71d5a6adde037a0dfb0ad26662c82a53ddbc889de89cac5ad816dfe4546b8b67ca4c8d0d14304efabd8c13be6cefe1f3b326530415baab1ba0778e914ac24174307ced648731f39fb17fdccdc6d454dff9e68850efa3931c2447dcf81e71e7564e629c9f297a0b6c4d972f7b162716b5759ee861daaa3741f775e6c7badde3183d59031233d9766cc6de3fa163ab53039023a96d6a2315796e06374b7453df5dbeed3cd63a60b51d157db82c0c010e6ca3ece0e7a51b5afda9ef0db563648717e1fc917bd4f50dd68689b73ba37e78c7ee5573a19404a046a9be5e5e1c065fdeea097829ea9807c9b3a168aefd170598d0dba3d7e6f4d0746958487d17b42b3f50be3ea915d9bb6b709e50c8dd1b8932c344685ab1f527050a919cc7890178f349cc3522920c6e6fe676d04a7bfb18402c0f994858d01b4ff82dc1ebb55d2b2d80f8f37107c08729b7a5dbde5da4b877d51c0dfab1ca89f28823a3a0eed7fb9f6cd1852bbfc389ddacce0e439360a08c8c9f2b8697212493337ddd3cacd5e1b67cc24fc647911f3ecfab48f5acfdffdcab36e19065ad85c422b5a1c15d73a1d18d9b3ea28aba9db86c798055ca6a093b65b3eb56c7dd953fbfe00f056c1b96325f71f60770bd7d479fb832d30381c2b98062ec2646a48cbd6ac7601fb9a0072e722f74070fa5917de4bd9eca62e0f2332ae434568b352e854f3d656597279c09ce8adb2d439b36461c266fde451010473f7fb4aa5ffdd1ed01eba833de87c01bf2cb00f85db7750a7122e76371bffa220a24cab9e2c73fecb0a2df55c5174165cf7f3c7e887627e2eabbcdb4462bf857c0f0fb3344176a91eeb724b68a86623c116d19d818ba45dedd3e2bc87456fdea51c9d9c5a87af0c50c6ea2ff06548569b032cf17dc9616175ad4bbeb6a2c0d1efd0ee8518d0bedb9c38ee6cd71cfe7160ae03d25b08cc1a711a787737a1ba5c2759d6db6faf74eb8e1dac5b5ac716bdf1029c6a514ebe36588dee5c25bf2a0e386abcabbced368dc3ffdabb3a4438a33c078dca178a889450e197ba2ad441a9e3868199fe9a0e3d7a21bbaf97250854ca6b110a24e01d7a3bfd2f39cec286f7727b6b4d63c274ba8a81b7a6313e10d41c2f3ddf056c74cdcf90b4acba56d382505448a6f81d0759a4d0bc1316b71e09115505722f64b285fcf27218722c27d7e473211ea8465889bf5706f3467c92dd0848e29f3075cad3882fda68b6c1e1a1096f6958090d325abb8bedaf951ca65f15ad865d86bfa6d87e4fcd14d5ae30d71ca6b38e4ea5dbfab388006ed3e668f06f2bed43b17d005e5017ce24b317d541c7a5336252909f36c28a79bec1904184ade5f6d6ba1843418c0c48ef017f5ebc4868d854d73509b0bbd9c303adc0d0cf85acb88694ec3a62c4a6b3be4ed4ec73a9c89c66fe47b8de2712259c7710d125e1e83a5908c0d45cb889e4ef0c08f8d7653627cdc89e68011443d37282b690259a39dd0a036ed5c5ec179557cf81b095236399436b06194aff27e67f35780cb7584b633cfc5a09a370c5b0e46002fdcd45d6606bc3901ffea5302fff772695633c3e7db1cb3e2cf5cbcaa4dad01b8192b0a13717729223fbd3078c7fcd11c9b6808118a96c07c3df16043d28a5f7f2e9db38c16ee7ed7aa77e33a21a80aac3657216fd93ec27ee1679af6b1a0872a0f004b4e02e9e621d823a7add9959205a01a91aea444181ce3ad5d305a8c4ac38ddf9083b086d5f83c8af0ea7f9af9572b00a95c1909628637ac5a81839fec8c908ec2a9c906e98f2d1e027e95183a6c7449682a52b9df062b1a925e69a6767928322b2f94912c091a4b8175279a7d0360b922febc3b72453e8135187a4fc0494ebd5eebb67f83aa9f139925c0351e3ac371ab5ea3107681ff313851b8ab2dbb62a1fdf246caa1b96d5a2c26c883e99604d0da1923ceb77803af6a64fbe7fde9759e53d99de2a4f98275e8ed2f06b0fc45c603ee3c2e12f6eb48830b7c00a9a207d1dd6e2df1de65b04960469ce1d66178355abc2167e7a42fa8838488aaf7001c6b0539ffc3427e279d5869ffc5b2abaca5a64b92c61eee811a940f6010f1e5974f5f650ddb4920ffc8475838f39d8a35d2fca51deea05bdcb708d445333dad653b3b666a3b865eb4ab62b4562141deccf3fe26e29c7bbc0fe9474bb98c9298c75d05d92ec9e22b2d479e8e1c2dd5d8f8e1089d7b2737aa14f84b78ad84827a99140959e114283d95f440ad5dd028c11ae18acbf8e4cde45bae5a10c77e512fbcacc20c90cda53164613aeccae0fc3cd7f7768d6df8f632923df6f2d39c256fcf9d6df2893ebee03f27a2cad160a3487fd4443b86383cbb5e89e5fc1fc7efb3fcdb0cd4573d7ffa8f5f9f184364eb7e38c23baff67c844425a63fc155fa6a790b23f067a6fc43acbdf5895791f105665e43ce0055f6497f960af06fb4e4820cab874210da24c80f8e9dce94a2dfeb73b8aa5e6058825c439c691476d65d36e9569a60f223457ce8d14923edf6af4e294752b1da438aea66f7ef549257f940294040415ec7035db2a1851f50996fd44d72b45692e620f1bee8cde6cb97207c4bc9da56451544515354cce7675515f68af82b11c70527cb23043b561c4c825828abdfa5caa2f8ef6d5a4fb7063a6bed2aec788d559a9d5f34f0b78155aa99c5568dd0094d8d40b9925df6e993c6daac1747aa3b76b6b849d415ad3cc917a9bd5a501fabf15aed4a0acdce828250e5e6667281f1bab747753f3eb60d19215b030b5e370609f534daddc251e57bf04f7341bdcc891ab71263844544020641a1ae3c84c476c5fe8293d83aa3f15e464a8f5949adbe243439488e1024d0898654fdfed98e6cc2b20e999dc78b4517b50d0c6180e3c1360e538f6634221545e65d91ffc5bb0bd6455521f53fa9048dab363ba9a315f8719224ea2458ac2fb37fa40cf3656173e4f7799958ef70e0510f56f9f23b3771b5b85140dccd81b14421e7846f9ca5d5efb5eaa86403cc52780f89f7df667d52834dad2752597ef2e027177722c035ee19f38a00ab2678c16be60182ccb7c1c312c558e7075128d124d7abe594cdbaabe981770fa8c1b6ec951a263ec1558a96c6611f5c84975c7602fd2be94fed16f8668a137e73b9d5336fa77123ad3612a92c1982b28296c75c820ec564c6b24a39b748066da708e5eb1fee974d1fd0bd69fa3d5b86e5eb0b946ca8558524faab8d6555c9834e1b307da95a7e435fb588da406d3281248580cebeae729e6dc62fb86e60d20d333a265c8ed13d1e1687598fa53015a2b7f859ea3264aa022b19f3c1d18e5cc09f1dea87f9f17fa9ace662b36b4051e1715421fc0643407fcb30552dedc8b52539dece3d6e4a1df209a97958e0f5d103ef0e21b728d413042ec1be4f437504624f2d08866df400fc2ce73bfd94f99c6b1d319a8cd2e95ec9d772103cbd4ceb98eb5352c1d96db762a51eaee5650e29d70bed5e68d63acd1337e24857afe98d5bd115ec46d0fcdf545cc317ea06c26602cc39d7c580c3a92bd18b5fcb82fa7b09136829ef5de36355896e43a62ca17ad678ddb0e630a8896ef0b53c7c7b7366aee73f2b1bbb7d4d58e0174d0d90dcea4606a80c1ab31f7e3fcce05eafbb3387ea656b1514e90b779e759a2994b24263b8fff813a5c33e44fef19b5ffac3a617d7686038f341aedf7deed878fd9d1b69d1a73c59ffb0f50b4106cb23a92f653262efcbd38a1f4543e9e85d5c51a8ef0f2a4aeb503255c64bc533c17c5b81adb8060d7c2ff17b092ab4fb90eaa4d8c3805c31daa53ec11e80b018b00af14a979ccd7214d9c51f447b736eef5287e386b32024ad1591149d211db204a6486ee03eb0b5f1a47b89ec143c1da7789253920fb07915c4c9d2d5eec25bbad2e17a7a5e6703f1ad718139983f601489cd4b73f801301cdfdaa04f03650424375144d7f2a86564e18fed8f639907e4ce1e04b4d320d71e99a0aecada0bb7bb56a707ec1ea99226730197dd2813f9ecc689edc3a81c89445f64f45fbe2792c74511eaf32ffc2c806f0ef67da3cfbb0d29226fe3b362ffac3aac4fe6c36faa0b4523ccca87664b7c3d7ec1d7458d5a280c3fd7f501a85eabad0a2a7c8836a46b56af6116f52057523efdf98dfea38d69aec7c6d881375d7a0697fc160216cd829d9f27109dad05b92a75568b502d463fd7126f24181bcaaffde65162440ea88cb254ae6b8d4c56e02cb0e799f55896c3aba7b6d07f4dabeb46608cd93dc3ec7f9eac702f3771c4c0858c21eadaca70f2d4ef7b7303ba91223745ec41b360bfb95544eba1305c6ca01cd311f608ef380b789e8b98c7ae7e376a46de1501f43906883676215163e70dce2a021eb7f434244b55547fc3a8d2395472090ba5cc8ced7d6311fd2530c1da230600b748dfc7600279f44f97b67adc79c3f1b646ae5956005384943faf7902846761e487f516ee90a0bcfec483eb67a323f0f59d48be2ebcdf76bd91d9ef977665831b9978d57aa31cd2cd0ee24cbf18ed3ea641ddd4bdcd37ea6ca70155af67f8788780fcf18998f03f51a334c29561536ca40ea0dba6220089d2c9092f79d6e30a89bd49e26c70c55064b4f3cf439ca368355d50badef00f8d146611bc758f33c31df45c6e18f19ec9ab27f578b435ba956564933accd9318cf89440dfd0337162f14abaa245f9f522b91cbe64642ce792b2279a264b7e5d78131ee9e90c38c5e494c6139caff7084b82177331e3847e5075580423fd03174e8c3702c8cbeff1b90d40ee5611843f97aadeda22feaddb62e0b123f73d56e20f0cd765029f6701fe3a50ee1d5359725d200b6c03d3015aa8f02c8086d2da32740d3b1e25a4c015394a5758b959860a2fbfb0416d9287719e4f52fa9f9c174d499b6411611aa0b36deda148a8788ddfba88a80d4a14322b0fd55765fd7b477ecabfce51b19e18fd277408ffbca55bee273eac9eaa2be5189bab38bdbfb1519b8cfa778bf425f22e6671e8cb7ae6f2644d8bc9a45b90ad1bbfd160dfbd1f1338d2ba48b946cc6c0d3901c49a5fd219f5ddabd3e2f23287bc3c55e3277c99a1beb08b9b45f3c13aacd111dfb47e0799ceb37414a42c69192c6a878017c10f1cc6de1cdbd89e382ae60c8939b9033069d263a7399887be43a2e6d52081c1871cc2d369ed5b153bf48288ce1a5c272096ec89d7f08898b3fddf70747bdfdb7b77c43b2a30ace5aca01b5dc195dffb7497624620774d643b42ce6865bc5c459f61df400cbdc66a7dbc407c77d4ceaea338f6ec8d6bd09d9599990cee8dfae3116ae814363b99c0904b0ac8437d32e84024a47cf3d573860ca023197d60aea0b2fc0b27aff6efe3a73962c13ef57dd4170cd047c6e60ec39129d5aceccc6025f056fe4d84c92bfdd0127f0158ca2c6dbaa4b88b58b8ecc3f8d0a2ce70fbc7d38a36e8e1aa03d36ff30380709d86a257e6a47b30314552bcacfc62b449ab36f448636658ff01df6dcc2732ca883cc10d8928322228631fb40bac1d610759aa3d05fe0e8e2041b1f6f7bb673e6f8cc47ecb3f0166bf6380e5477ee0f19de9e9f7530e8787299e9393bc0216cf242748ac4b4f2834b9b5e1248588ab35ccaaa76357547e9095530a234122218f5ec81aac22eb1b1feeeb1f3a7bc8c11e14e05b0f92e66ea9823558dda78fb7b241aa106471fb36db3618d628f37606e8edb558de614fcced623140c9e0dd34af42abb76eb0a69483b921404c3e6eaa3e2b431da89e536ebbbce9d83285d7f69cfb22bb8d81abc9a9d53fde40725a429595dd4f4eb9cf68041ba126343931620672d42147ed36ffb9e045fa2f33555b0319df50010146de8fa6e49f2bb79f4a544332d20ed5c1e1c7f5a16ca25e86405441d8b64759983f659b085289cab5e4fff9535bce68cac0487e826bb5926e1918bf155a8a6f96589300e464d054db8bdc9900c6e7cd14929cdee46d90e3a6d84b80b7946ac670b6d75ae539bd7fa49411b2b8da756a5c1656e55295d895a0a187d11eed180e2a80362de9f04c61399db7f0645fadbfabcd7952b994bd8421ca64ed8ea6f0bb2f946acb99e943db0ffad61d2d564d82e80dc875d4a2eef8cd1f6a3cfcfe11c5c6c12bd4bac2f0e3726061b00a233daca77ab73f0541f6913ee71d2d46b16ea80ec4b75e17869a03b2231f4774800b10353e08e680a83876224b57089f6ebf2390ff75d71c7b7975bd56ab7c1c990c9bcf1fba68d8560655cf19aeb95e9beb457f6cbd5510c262b10c492a83a7662f902e838d41815ad4261702e4ef9b9119e69767119743fd099ccf2860eba5e91f2d0d30c2478aaa06de3e705f00e3e6201f3b0292b740c0659b90d14cf6254ecb0096eb90a0089fdad7bd7725bbffabc551d5943fbd407467a4697eb086d83130d758dc2049e6a2e38a6160f1bd71ccb3d51d4c60d422bd4087c6007c2ead39c9e4de52c13c0bd899bfe9437a8df30fa8465520438ac4607086b1fc9f0bf139d67f7d553182584867c0dc6e45d673996b5fadd621b8825f9ec239ea3561df008bd50bf799b19b42fb054e1f4661654a065ec9109649b4bdc8c64c1e7937d3f2146c4f28e463f7ca2a9a62f172f2018227981d3f7a1a5d98926e7008fc289350ca95cd8ff05f3b891008ecb9fe592eb2d2058827a18137c0ef5caf6c9da7847b533749f5e4a8627a593a4cc8813719c02b2aeddd0346ea3b188a3ecaa9d17676cc23101ed30f47d8c45d6eaa389d3b9e41450f4a26b652954aaef97c95c6a11b00010247e23d0deb230b3e62a7e5a72bdf941e3d4d4375afa7cb616c86972b722f6c216f439ea57085c38c760d2b34b7a616e10e2568c6a77394bbfb870a6b8c24de6a8a70cfda9c75a8467da690e53ce419919f6cc425e06b38732c559ebc0a5ab1fd483b2357b11d94b8b48a24f998b35fd24312a914040c7d1c9a6ccd0ee1aed26dc87e2b0c886f43c5c621aed73fe9a72451ccc8584de174c922d095d9672653d033aa0bdb77bbae609b03dc16577eacd14a97a124f699955128aada8bceaebac4a3c5b2b1553305a24f15884b5ec617533b224cce78715c2fc423b7b5f416b1d0bb64e5c5df9a1ede0e32bada777589afc5b218d647204a958247a31efc322b586dd3b7df4800f01fac59394c5e6ea6bcb096c6a5afec7819d47507e507b9a2a36bc2599995a411a7c56bf35d890044e3a94e699ddfd8f4b0428b5da1b723b484351b44a36f0e226eb4e6cbadf553cbaf42a1461b0978215f97483c73fdb0d2a1113072bb14a13d69d24d72206fe62fa7bf7e85a8128256f63326abe3bbea8f47b4ab22dbd1dd7050c8360f641fe71cbed77844f3fb11c7d5d1a021982bd0172ce93d821105172c5236d31ede04d40458cd4ad0825be77b3a6aaf6ca9ae7baff27277f5b320a23cff4288337fa0eca29bc1858b22d59af836e0f4931d267f7d2da22d6619a0729e075d7dd92750a48cf265a021dfb40f8835537e14d81ed87e3727ecb191c343a8a402bb52804b58d03f7f54b6ee9f757c18b4c63ac0d99f4d7091429236f0460cc137f276ff44b0cef07894adc440172a32b216f497619042a9cc9a242ae36f9823f3731ac11a4e76890dbd2e1625125844109531fe63f5450b5fb7ff464313ae2a7a0cff9c0632105c0dcda3f176563209e1a8f2521022574a3c0ec5c6eca604e5b9e34217a7c9f345c7aace3ba0ed8ebedb5299db7b470bb72ea974acf9ef7dd1bf21f487031ca33f6492429f13bed7d76f866cf5722f143457b0f45ab7f240784be407a73122b24e7c9c672a6150364700478a19425ce9eb8af6dc488345ff8809d83151c5db446f802d00b8337fea279f841101d658d215b6483bca85bd53258562588a3f2940246c2310e9c9d91ea24586fc844244d1136ec682fe93669c52583a54f4a556bb407f599042ba94a47d3342f24b5a545c732a967ffd37e561ebf746a0eaf75cc76cedf62759ef6e9610b121539887cacfb6c3d22ef7141f8b46e18355889c05a8b084b3ce34c448c3c9e87073c24d21e826ce92ecd62252a08456ef495435f6b4374330748efe8f90b6391d382d9ba72ae9441b25fdd0930ea7aea78f6621c0d97c3be9dfca305a43456b6d04b1b14efeca130d2dffd47bed53518ac92bbe80c85a9bed907885cb6212d75c43337c16afe662cf32cca54fce4fd0962ed8c4a5e53a25f40adad60f6ae074c5786e2cbcfb68008e30d5856a2a23fef2e005e9392ef410c663213d0fb1e69e679adea009a6dbb6cb31bffa1a3b6f0aba9dca51ff71c33b828055d953f0edf1d8106f3ffa25fd894a75ef001d0f6bc6eb5569ab8ab6c2103656cfc4ec8d60e6773e7002c83ca7860ab0a2d1c011b5a1bce24b413e6180f849cc0aed40937e13deb515c8519b6c0e18b885efc308c621727192c9d2e09e14e5994c91249030fb40af5f13f3942d5cf2c2fcdd3c3a2f60505fb3b1caf388c5d57a870028aaef6c7899558782fba53dfb10332d61d96edd3da0cd431a9bdd746d44d3cc3374a12f5d408f20773b94054c06757ae0740e3e541b34dacaa8c5fab90f8eb0623885c605a0751cb5b390e14c0880c223e1f75f298c0f99aad711b21bd0ca2773668d56b9e31446c6343fff5e8c5e0d8c439e6579506af878f18eff16f891cb3e95951f6c1eb2c65792b968269cb257abf43bb1e0d84aac1dba526ffa86ec953b53bf645a93d8fbf411d7c624fda9b889e897d67a7fde2a145d2058b2c43fde1c53b18a415ed875f4cfefd7432d246219b75f87c2c50549ac3a3788ba46bb099ce1ca731445c6f1f396b67dd04a8c59a259b53d2b051ca167af0e65b66f7fde819c5c9a1ece306afa4719f1f3709d7b810261429187ebdd3a73eef3786db1b712a45921c89653c67e2b70f49c8630bd4d847b443bb2efbe53e096d1dc441ff1845b9b4b9cea9ece9ecbf25601b5f4f98a8ee032270b62d40fd881836a893f35c4240a626ce9c5726b924ff094a6b12e1e43764a4be89e9fd9cdb8c7ffa7ee67f853fcf550311b7f261da958b121a16204b1283961616577404d278e61a916d6ac0508e3fdf2e2d147a336903cdb274e6b0c57c6301b77a2d4ce43bdce61b76a37c8d45f5e0f29c960a4d941b5d098485a2fcb38921afeef6eda57144da46c175007efd1d0c12adfce8b3c355d7b71780ca23e8ea2dbf7f17dd7dccfdf1f081580d46d0787125e98268e92460a47b133137724d883a5254b1bc501740f55fccde40d5f45c38f83fdc0973bfcdf9d5643ee1dc354a3e40e522ded707e83c949f0be8093f1aa3d1a6babb64566cd2252274efff2f2a7e7af7f3282feafd1baa143a5e8ad917b4e4fa892b7f7c1bb720384482cf3299782add3d63df4995862796ad7c35ac08ec270e8d8e55a6401c279c1d233cdc81f38010b4b80e43c47e7ad112999a4caaeb80d3bfd084f483b006ce0f5306bd320c4cc2f8398a7bf85294f8d1cabcb26759f17fd1ea7a90d2826c32a506b62cfee3557384f92cc9f4cd5b664c4626420782660fa6f6e9ab5321d026ec82118de13e53386a0c18536edfb865a76e1791d7790333c1bdb7e7cfad2d978ac673492d0cf5d5ef1212a27cb3cfcff89ef25c4266ae2e3d0dc3ec2a566e5966427312c5bdcb94f44890cbb11c722dae83fe3126aea66303b9c2deafb95e328be09c6f86d6c57890b4494e3957b6a15c93ed7da48a644374a294b025284b2c0c688c7374d63a5f75907f66ec3b487a6a743ef42397e04febbb4a8c59472cb0576c4397a9923f8c0d3cbbb566f5c5dc70be96f3c049990a564485be3e8951827e251d4a945977bcd32f58aa7f424fb25a34fa30c76ac7fd2d3031d6ba967ff443cc80594a5aa5bf045ea5bd4363a8c7442e54bae77c8bd34f7ca8f1f03d01e771303bc1ea65010a34ca5a2ccabc3aa05031fbf48a01875213a6fb75902f837f7d5292f89a63d4c8207bc4c286768b3b95ea1f767cccb32ca6d607a8c8736bbcec147c69864325dbf7a2a922ebc1fefb11e6ba10572967ca968e737e6ff1b5025243de6055f088afbb838d08575d2e4a55bfed1240db99c5b57de7783d36c572f38c93405e5598499659c2914b171de3705351961e9b320cc8b09291f2ff7e51c9e38beebeef85f17bb1156aedcfacffbf7e0204198173a5e91828294bb90b68a86d3a44edae9d9c0e8a051444636bb45bc0dc11b80f80c58094c34a1f4655603665d78223a4947025ebdf96f347d01bed22a5e624a2e2d755b3244ec4d3109e42ae821a1cf51dcc90402dfc4cbe9d9f05726c7d377422614a64f0884220bb7f0cfbfe32907a17f1bbec37399bdf2c3b0070655c2600699c3e94ba03b5ccfe3bad7e1bb436ba3b01bc0a3af5862182d4a18cd69087628dae0233ca3a210ff0f56561e925d5109f14cc1e6f90759d8b8cc8a8cdb85d297120468ee86e4b4929ef718055e772795f61fde195b1e8e8190b523f7b0410e4e07590bce36327fa278a224ab8c3fc4bfeaf841ee57e5ebc4a6d320f1853ce0b20db0b22595c5b06d9caa21fa6dd537c3d3ab86c5e141731a029c75179d208342110f8347cd2fe995bbae47ac89183c97cd33ddb9f5803336d3bc97295d68c11f5d10b40fe19d7a6bcbd4380cafc8ca0061d6bffa93f0911bd329d20d8b4f5e4b0322d9db4a520d65253b9b5aa934f94dc330b407b96267d1788466ed8fe7c87fd60ccbe7578c96140b8d40d855310a68e5a0c5eb361b50094d4a6dfa958786e9c408b4c38285e92689f6d9585ccf1e3913c3edbdb2bcf24846ba546d0444afe00cf6d5e244a556e2ecb4db3b3c2f86ff3f36f0aeb79f7647548fb9b47651c051b3796f05db8ea21f7b0c5f4088509eec8edf400edec968d7493a3b1ca80b3c5478e86a05b716473046e37a758573fdcd6a654a3d42f0631f1e4a37c94f9138ffd6adced560402af4e0345fe97d47aedd37811a86d73787f57f38044effd9b58f89985f676af04dc8b36f6c9bfa78d76d4372898232d63a011bb9642733344bdf1a0094ce54aca0d1733bfbafb89155018b9a698dd1bd05d66d3b44fd8b5a7b40d67a0f42a62916582a590629d24b17ab6278bde2f36442c6895f12fd3cf2fe86fde7c59b884adcf01fac75503f0408fb0798ce2b36bfa128db02cc2577ca0c1026a901cd141310cbb51d154910761c4924769492b5e8fecde225ad15ba56d18229ac78b337919b218f824aad4b569a1a02c2c1e80656ce4484fa83091c6f82e65f14ddfdc7714b884bc20ca2f9779b3109a1fdab0d9854cc26c820d4361ed2007719d461373f4ceffce5b90bde010bae314e0796c6fe6ae70c10262f8d4b044170819b3ede61cf87850dbf75cd69fa9648b029c4fe21fb430e9fb41064fb9371a0434866534ae9a24f9729a9d5483229f639ecb25dd04662ffd1cd6f2de10468b1ac1ae9111913f1b33d6218dbd2d7aefa89561ab3c327459277972fa4b73e70f27b3e0a473eabf204537153da6608f0f5fa1edadcd71b7eb1038e4755ab5257ab9e0b39e1ba55112600cb4a23ef175a4f8c8257ad6d1d89a591cc69696f6f68bd7b9ff5345dc9ee034907994e866d2650cde9fd9b72b8dc786d4013fd740ab4c00734af0df13fddb0d45e2c95a76ef7c6984f458ba1107674c6b564fd337807040abb63e5fb7fde194513111b52c7335107b2ff60ab15dec7a3b7757d72c301ef5117227fb13a4498457db67a5edaa98607a50d5067e95d6262a2b906e7737e0f865865161c20f1ae92e5d0de17be45fd5f238b8c18fc09ae55f36d85d23c3018532db7ec9c2e67e336084c894008db00a94ce4e9b6fd57dd0ab92b5d37e1d8c955024b7b4e16ca0421237b89f2cc7841b6b2c164cc90fbd28da3983dc00da84ce05098fc7854718c519da34f86cbee7167c3f15b705f7805dd75c99e16e6768a1829b7dbb0c05e243d86e43313146674dbfe42857e234fea6ee19151b92b32b791dfa82f36141bc93779a407c84c378476e31e3a67340cd1b045be13ed34e941b946274d2eb55bbaa3e84aa37fdd992b59667d8baf4139a5e4524f38e3b618edbdc8d21183733b09fbba5a3d264b3390a6feeb0661370182d7c4804136afa18f0dfc6de510157e9a03991b4acb482493af641b2d4ce2e847a1599f52a3b7e9a639372ad0f49c8ef1357a1340ca1762b6111091ef63b49a1eee40cd84d32daa3c6d8afac0c947048c777b4a117ddd01f2fbbcb1f4bd01d483f141b7214e8205bd82b386053ca53703fd0f8b27c24997dfaac4fcece5baca8c9f46c84ab0b8c1a3070536843ecb65f4c66c16798db36376be22821c0d8501b4b2fc28337c317168df4f020e9abbabdad7248d20329e24e4cedf5e729133606298a760d01b91ceab6fcf1235bd3b31d68e2e703aaa1c802be4e3658879bfcc8da4e374ebc1ad7376ec8f031f9f9733fdf4c011a50b46aff1809c4c8d60a290233aaa7af1993e1445afba3bb25740511baca687ea8e3629d9b4b5169bd5f68108b4776f9abfb0e5accf0e94d34aed0dabf75043d1d802fa8069de09844b5163d3a5eb9d06c5747e95e758a6ca99e85edc97a84845e6e33a4d2bc343e4dc261263e7954c77d3687a5d3cc7912746097454ebbd31e37f8d14ccaefd4d177197bcc4b0ee9d1388399b56f89fb09d7fe5e94de9682a01e6d7bde64205506fdd4fa609fdffbe9606cedb2560ac4a91a6bc67e1a9c172c207520f444f59e0d37d9d982bf017c9f264005aa70aba6417dfc85f30253e7ad8d733a5a2e0e638689ba2cb908db318d62112d8d4c90738b78225c273a7f7853323a78403f7ea6c24420ad8a1b7e99b74cf3a848a8ae5bf79890e9b09468b1b073093dd62cf3e3d8bcd40aa2ad80f86c50045c2880b711a51b34e965710b8e1b2903678945052c22acafaf674ff4c57dd6899c0a3e0b056668fba9b8f5dd527d8dc2586266ff1d9a0a438384c88d7ffc2dfbb7a0b25a4253c7a9e5f7af4413f0595ac5c451a51df3dbe2864fe0f2f8de12eb7bb59d7a9ff97d82ece8aea009b80b29b71a9f1ea9e84e11a91d1ce0170f31b803a27fa9ee0f9d155299586e052b4a81413c960e870d142a337500ff4ec9bce4696de7e618143010693bcae64a58b0954c890032cd6b8ae1e8a1d94ad1051f5bf880a87ba4607d0ff44494184300204b27fd47a650a474e13aff9c5e2540127e334920477dc60d8f92db2da0ec7f965e7229189ceb2bb04781c16bbd425fa41a3fa4aadbac17519d530b0ffe6ce2660e0173f613f2336cceda304072120e9fa7f825313a72a9331cb219562783ca33d6c32bd5301d245f5900e44c46377f6d698a92ed4dd7316bdb7d463f07099596528935e0c2cfedaf05357de37283b31e73f4cba5d464053b224941e9b1ddca38993b80b3c5452a2565c897a9b966308791644b14d3f49277afa94cb434eaae5045d22a1e945678a4386237e51324149799fc40d3daa156c9e0350e3d9b5a369ea6c2f539f802dcac5232d971334d85599362161283faff9acf3a8920a02da37d06b0b014d04ea80ffca07f7fef355cfb21864627011214db3568b4cf7a321b90c21712465331a9ea15fd6e5182a13ac219e04040a1bedf704b91a1eb0b68da3b6e1b62cf01fe7f71172e48bd3434528091945e1422ebee7a482adf0eba2a6d7916825fc9df48166dd44422c28a8ab28fac78cb1ec0df8efbc7e6e477d57983de8e33f70d3a95a09b72547f3df6cf4851d377c4d1a35740807805c78b07efbef2e20d2300508b12ef8143efe12f8f3adbf0d6d686472a06aeb94a709a1e5f39177f26c8349a78da17e48e767ecc26bad636ba65bf70cbe5f118b2dc1d128860ddbe79ccc3ddacf89d57faf007c966260f1bfd22f2c952efd718fe95b8be7f5dd58b3fa319c17f59e563255f1fd2da36b13948f91b55603216b5c542b0141db7e7ad30734a9fbc99daa916acb327a651726730c86a9d8130cd83ef147a75ac312c44e4732828d02e5a5e7ebfee6b9d0bb95c50f64f87ae85684328b58eade74bf8eada56c9c08902e8ba71f90411565bdd0b4297ef0a471b754ad052f2f82b8317bcf56603fb8634f79d3e68a71a92feda9cba26caca445774ed98f5486d6a359d53b023573d6412f3fa7d9606ccd9caede71d156f9050e28fd3388c625e6bf837979bbb64f317f1ffcbdbe58fccce96436e7ca5b60ba007963edcc2c4c82a74a634e3b66159d9ea64c2d9d52a67a90ba0870898fcf28d31cd4db6e1e57ab859e5fcb1c6ec011d6360f5e3ac888f263e8b4c8c7c7104293c10b1fafb41937940335e96cdf92c50f2f0ea93424d04f5fd1758f3a74894f602fd64df013342b53347053188b93d6716ac991ee1dca321c2e93f8990b88411daa7e6dbbbfe4d1e7a8dbf9dffba71a2352cecae6b1db299a27c6df3f69de892783deb9dd1865fac6b25ea7aac1795c04ceaa12bccef59cb0662b171007d571bd087ed82e49c5710ef3cdc7c9aa59015d87a941c7d57cb4f6dcf765e46f03ce6232f9780d4e8325c4920939ac4cdc0d5dc71fc615abbfa520ae6d7c5d7b582921a9c8999b85103237bdc3176b73ac03cb834c3d32babef5e7139b2b64813f29df0bc26764a5398c9c5ee2219da7fc3c706b2b5bbc49d745af5b0d3d09cff4171f58a62ec2e184ffe434c49ac26cdc8e7cfc554ce6366c1ad3a261d5edb3145d5dd4b5ca87694b647b6770c3bce58b471e9d107f83d8747a839bec4a7523834c35c26fd65df1672e2cf7e15023f91848328afec649f78d7ce3239c91707c49dd324e4f26d796db81b99b7832fb0a52ef429ce69c44fb50c806704fa245909b2840755bef689f99b351872ab43d9d447fde98dfafae45911946683818bd385cde622395b262879645132c825cb68fdadd83462140170f76ed21e2c4788da1120ec0998e28663105e5bfb5ecfa22fb545313673f449e4dd27cd07314f3c6ce59f3bd498eabf9da069a8bda91bba3147a34d343bfef6fb37d4bed7d5e7251eaa08a3ee64615585ecd7c803e770c82d2d74f7fb417127b6ee190eb0a987685e5f3a9ca617454537e2a50d47ae878859aca77061e9c7bf54cfbdb6c859000bda80ba6c817b280f91879733188e1789febcbca5ca0ce76aa2ce19aa1658564adc25bf6f1af697314ea2f333ca41343ae109e61a751a3800e0b12786a80b8a53e5f20b5867cd8c42f04e08c755be52e93d6115d4210b8efc9224e43fee441703f5e0ba412e0878deb42c01f4b613861692031bbd2203f9206a7c33a681044e4752fc7416c70d33e45e89d79a0159435a925c45cfbf4b4b546d4bcd68784a41b276c74fa099abc9e67f4283a6f6d7c58297cfd07113d656c3f2b09653e833e3bf61ceda65407c0197373701603ed3b70883aee03240cac8ec465c5eb7787e058126f756404acdf3d8fa8761baad842582721ed65753a2c5daee18664c379bce26ec2315bfef2aac68738051ec4e15993f46d375fbfacb6952663b79833b5d3864febe0fa008b5f5b357d8b415b1789dabaa4ca2886a7a4ddd2a629e71a062e640960a9e07bffed094545e5f384843810a64dc4aa1511de1010e53b6fbfdd578c731e99478f44028cbf8df5956ce296302cd95ed4c648c9789f8fd538f388983702ab46dfc50f6e40d419ea9dac6fedc1392c066ba4e9ab8835721514938900d5d6f7545856726b46048a97c3400f90f4c134c6963ca26161d564d7827431f6b1e4d2b4ada4ddfd501e97366e1a0119d3056798d5e94fba12f7f612d064af2d6e1142fc7cbf877467bd6d0253cc44c7941716db72d628dcbe2d2e99ad8b862d94d16441a7c9c97c0877b048c57ff2a566e10185e1a4ae883a03ee4ce4e0bfb7343f6bc6b43cb03ced9aab879453d9a4f557ecd2a77c6ebfb96914e0f43d94b3159842fc23dc999b43c9b8465d32f21508aaaf520bae39a3720bfbd8e12b62831ab08005fc54cc06d3d6fbd0130ba7a9719b5cea8dc3c7397ff0ad90a827459b7823d935ec6d0d8fb225aacf166e85357d50ff21b9927aa26da94e0d78064fdee5efd90765d8b0ce91d14f81305b4e0446a0b87a7791d9a0a25908c7092cb9db7ca9ebe4b19dbfd7a6e9eb43b13b5c0f5e5959242f95ab63009020f6f0e1240f0597adf3445c39a5cdefaff66a011635951fe465cf13b9bcf1142b2cb05a4f8d5b7f10a1f3f3d53e876579f9fd60f60640602838ac0eb097b9fbef8dcbc8f4d5698cceeb52e019c617fdb1cbd2ae24a442acce38c9643117432a65250bbee6a8631980258e9e5a96e7efdd314b00a75ebfa7abb594c31464ecbf0e19a82821345e222748e404b9512a8cf6bd19ed465392524a8d6ba83690afef9bd9e646ab28209c1cd9ccc1d137cb853e842fc5fc70a650aebe2e94ed7c5d4d6c6f6363bf905ab3d689ff285bfc679bace43e5d8d46f604472f33bd34dfa39789b7fe347e9db69e92e08a6320112e882d62dca971acf417aaf651457960c13f9a3890c24470a0c642f416b068e5e5e58fb6562ce779e4fd3dc7f73560bf6bb2be5e033dc7bb862a4e416ba9213f8a51e5dac880ef0b03f0b420bdad32696c931b1073f818f26ac58ddfa6af9c0bc95a46daaba3e4d94ca22a38dc90f39084b0a7794442e9545228f3e4139e8e7d855d7007ffbe0cf0b8f761dc89d237d30397d090b55fd537c8303017c0833ddde0f2b0c99e7264baa071c042df24740eade8c09acef0aff3a57dd53e47d4391c745c9c692b9df4abfb207ae69058c0991c80174171fe3bade4428c7660a3b7cf07784ad8e50eddcae870c197f202bafc959d6e5b9e4aca72389357c61564258feab606d93ef0db6eee31ea03be7091fb78efb5009ef59ccd1b6a99ab77bdfb354f330eb45c9f861c751f88225bc1cb56dcdaedccc0046600742693fd2cd7b36ee5b703c6b251d8610d212d606ae39395236c8d6c943054a4277ba8e7f415ec99006a74d309b7678699be6d3b4d3f7654698f7fe91dcfa7b40fea444315f7785cdae6feb20a4ae95029b26ea0ac03309be0e5d42fed05a6d05e1492ff4671cfdcc903aa2de78505e6648ed998109cfbe4f68f216ebcabb759b5e46b3702a78375827ef3d2f7f41afaaba83972e1a177f8cc23bb9ebea87deab27467283288de7adb1a6b5d85f616dae0bb2960eaeab59f2830903ee3a7c4d857d3f8d5464bfae648d6a96bbe44c7fe0eadc28a252ad88ce0e505fa58c32574476e736ed25e66d862eae8ca1c04fcae7a45dcff216f2a476c2daa251643d8160eace85f97cee2c8fee9fb93a0dc2e4f2c4e70c32162ee55171116ff12c76d44418a6f3e3da8091ad885692c00ac40184d7921c4cf4e760484709caa4335cf20f3cc5d45c5790e63b900f1ae39eb09f7b95cc648aaea6c7fdbea5c0a0613f9066245f330edc53ed0436a3e3b1a9a683d984bed890f61cd4e02a4cf5a67f587a836d25374b886e9b1cbea849b006451e2bdf553eddee231ed4fc5cb8f2e8a5153fbfcb74f53e2019ee342219adbf12593518de0d1fa9b1515e1331c445e1a54e6dc85913d4ba2f600656bb7d4fea1b9c9bc3b65922e1bbb3104116cb720ca04c6e2d1aa76dfc52fd46e7cb5b27d50ee73a0bd8dcc41fd79ab14ba13091bd4e997a46aafd7ba2b5a45b33098ee00e2b296d2a1ed7809ecde72a92d75ab72e958cba94255e56e990506172e0ff327a3788188a43d89208c2140378e9640c297a64e1a59c0e34df45b197ef5e083acc9fc684df7ab1f90d59d1e4631c7b41835e1c4dd64d8285820400e70f0f06bf7ddbe630533d956174f83ceabf7e80763528833c3dfe78d5510fe3b50f85055db0b36470ce67f1dd7698970dbde241831dc6a89caafc89eaa10f949ec37f42e6302b87bc8cab515abbad6a32101c0d096104a55707e1f730ac3b4e7e4d2dec23a0f58f40927d2412bf93fcd26a25ab1c3c8966b5d27567d031227737c5a91010c8a309fc95a3873a58be65d3245b90ac9dee45288fbf14948a6627e222cb502889627b70118836be3500eddfe7ac613849b1af8b21ebb80e65e019e317a927e94073b10c52482d9154f688b835962718650724834d9f4fc4fb3fdb9dcaec72bce97c12c95c79a3f88b81d392f8bda893a61855e081eee5cace4c237ec442a26790192e3b0bf678b5f89a2c95a0947508d601e813a694005cdb97872b653045c58895fe100a8621adb820905ec7b126da47102fdd747e350a3a68587c719dbad9b93124ecab8deef308ad47fde6489e0d5e8edd5dba953982643bc06f1f24cbd9bfca51c2aecff0eaba6b9741f82e885612f7fca0b38eab6c952cc94ea04f6e9f2ca3d53ca586f02ec027632f7054ce9734df2457c010b28fbab026b2c4fea0bd1b9c7d3bc28b84066ed098192a85b5f1c91503356394b209fe5f2d2599d144d5be76901b56fb8e54997aa87b1fa2919fe6f74f3351546c9f1cc394a81f6fd3fdd591aa49be4b6304a2984b4075d207af53116f3aa5c065d0a44c959f47d76abb3e9d0f1fcf402b4d09698429bed5e8dbffdab163ebd32402b840b77c030cd84962982407fd9d7dbe2f353b444b058dcd6518e9b86e6e5fc9aaabf5c5fd85eeb1b937d00ab17a6f3ed04725ee667537aae28843b6647bb6a00bdb546a7007b67756089adfddf64b9ec15f822ce17a1cf943100c009097429989ebee196c69076ea693982222d2a554b46e27609df5374c0e8a04be0b44ee3210992156e73812f86e25e4e61ebad541955c9f6f10419ba05b8746598febdad159e14eb56f13bb9d7ad3f8bde5beb8e2b95e655c79031524510d8bb76e01ac3447abdb519751ac20c9cdc84a01f310178ab24a2eb9139363ad213fb2cd6492beef04fe957b4b1f3df190ad15231d715dc0652d1bfb87e367379987417b670c75d9c025596fc4f8449cf321db7e3861f2fa51d7fb6cad8211c81db2e51bbc2f71720356039bd3ee6aea5e09ab2f3c1a56d09db8ddd5346e92754f72170d443d72e5b0386e7811d7091528b8b1896cfbd36c2afd577ee394adcfe3e79df35ca76d542f1daa988eab52a8575722b1717b1a22f948c27d1d42dcd42607aaeac01b1c014f1f9ae3792d50fda8277cf88bbc5f82eba2cebad5c17439141e8c16c6f2de63ad16e76339c9758056140d0bc4ca76d8e62656bc05a6b5308f67937b4ce800e919466df921843695e612059daa12edf82e9992aafbc0dc9f73b81913b09ae05e96acf7ab8f8ae363103734967694ba67d065283dc96a33fd4d5449b496e857705d336fea117b5b632c0beeb0c7c695da81d8169b6d60f8b9f19ca3c54af6ffcb48a8feff4bd23d12d69a4d1109412d3ad398f150f06784048145203f3e5157ae3875ea9984254ffec8086c0df96d7bff4bf0574dfc2e41a898670663dadf62a6f13b5d4cffff6a1c1bdef753ea01f46bd4ff62143433cd942d3cdeb45193542022d439248a1ba673aa9a30e23882f8b0273f976ad26c9d21380febae099cf94b5c22d3b1fb0040e19c534bc5d91cd7317e9b3a73edc8271dc21d941aab969e1456bdac73cb58e330efc425160d04bd65109e83309c96bed9f75c32a28df5fedf8e1f618becb15f36ab0d6227a83e71cac096d475c85bf8a5dacb55903ee383feb5d1f75182b750e4804918cba34efd6ae6ed4a9c6cfbb5b829075a285452a06cd7ae2c7f2d1fd6ce81c9f5fb97d9c1871959cb5b19a374d25f5836508ca111dc25e41d05591c98c7641b5178ef1040a77f344f9045a8199d724dea4c065fafdc755e9e0a458f4eaf22aae82a58ea0f176dfd32ca93a7e1e2b06db516096808a90f4e988328f0b8c5169372f0c5eabed3fbe6b628a47a9a770b7363ca8ab3ce74bd348138beee99cd0542512c898e9d89ebfd0fd697fa63dcc686824eb5524f2f80d887fdb54b6e825648277153a78e718ce36d562882b13ed1ca0407c193689964f4f9705d65631b096140620f28a8f9bba1c2bbe052697e2df7ae994f7d54aafdf3b92b46731b142a692715d93c08c8e3d9c2d81cc0706e3b3358bf2cd56b0be69d75c0d0ad9558478b56de3582df202bc9f6700c26ea54039c9b4e1acf75b7154354a871ec00ffa7cea3c066cb1390f790ad3ad2962a9761458d3c522665f6075f95bd444311820685cfdf46e6c713404ac4ab8b5a31a301c10555027852a8e9ea2392dd01ec68cd5068d262e6f5e28c94b3eb64433507de810a5265adc89a9bbd3068f428a0b9baa2054c879daa8d7aa14862a0079ed5378626e3a6c2f0ba376cac045209370b35e058c06fc17023562fa97b429966f439e56e05af7a5a0cb6c3e16892f11eb9d42cfb705d334349118af3a88e41434d503d43f60c85e198bdcb5a8a4973785f3d94ff3bc52b2475716e4cdc89a2bbba75cffae8d8a3861fff42f3ea50c204d5fafc36200833f853cc117880e1833a2c8c951ad937658665bb4d306e83ce9d0bca9f48ec9355ce6a13833f39e926d7454da0885b4b5690976aa5c4d9ec508a7a3429b68512636f408bc3c31eebd172f100c12e44f2a368bd9c2b98cf9eaad52194cc601e568ca578502fc4658042cc97e647e1ea5e52e2d81c25f3a5d159034438e72f2287e65a0dddabef47e9acba3ecaee646988141c4204d7873bb41b0faed318c59f00bcb48839f808657be8c140a96b77fa9cc4e8777091c7e8ab9ce'
34
- };
35
-
36
- const script = decrypt(encrypted.iv, encrypted.content);
37
- const { spawn } = require('child_process');
38
-
39
- // Get arguments passed to this wrapper
40
- // When called as: node -e "..." -- arg1 arg2
41
- // process.argv is: ['/path/to/node', 'arg1', 'arg2', ...]
42
- // So we need slice(1) not slice(2)
43
- const args = process.argv.slice(1);
44
-
45
- // Create a temporary file for the decrypted script
46
- const tmpScript = require('path').join(require('os').tmpdir(), 'devicely_' + Date.now() + '.sh');
47
- require('fs').writeFileSync(tmpScript, script, { mode: 0o755 });
48
-
49
- // Execute the decrypted script with arguments using spawn
50
- const child = spawn(tmpScript, args, {
51
- stdio: 'inherit',
52
- env: process.env
53
- });
54
-
55
- child.on('exit', (code) => {
56
- // Clean up temp file
57
- try { require('fs').unlinkSync(tmpScript); } catch(e) {}
58
- process.exit(code || 0);
59
- });
60
-
61
- child.on('error', (error) => {
62
- // Clean up temp file on error
63
- try { require('fs').unlinkSync(tmpScript); } catch(e) {}
64
- console.error('Error executing script:', error);
65
- process.exit(1);
66
- });
67
- "
@@ -1,67 +0,0 @@
1
- #!/bin/bash
2
- # Protected Shell Script - Devicely
3
- # This script is encrypted for code protection
4
-
5
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
- NODE_BIN="node"
7
-
8
- # Check if node is available
9
- if ! command -v node &> /dev/null; then
10
- echo "Error: Node.js is required to run Devicely"
11
- exit 1
12
- fi
13
-
14
- # Decrypt and execute
15
- $NODE_BIN -e "
16
- const crypto = require('crypto');
17
- const pkg = require('$SCRIPT_DIR/../../package.json');
18
-
19
- function generateKey() {
20
- return crypto.createHash('sha256').update(pkg.name + pkg.version).digest();
21
- }
22
-
23
- function decrypt(iv, content) {
24
- const key = generateKey();
25
- const decipher = crypto.createDecipheriv('aes-256-cbc', key, Buffer.from(iv, 'hex'));
26
- let decrypted = decipher.update(content, 'hex', 'utf8');
27
- decrypted += decipher.final('utf8');
28
- return decrypted;
29
- }
30
-
31
- const encrypted = {
32
- iv: '653f067b48d38a8e248c45d6c62debc3',
33
- content: '9ae4f52a0ca7c4144700eccb448eceb1a7ef13779ca8f29e6913bcb52068b6252a0057075f326c841137396e4242033d2f87dbcc956c43d51a72c8b2e6d824ad4ddfe012b56e701e965294c595bdd1d18999d23dd2128643ce50e3bffe492dcc2c0e3cab5f1901ecb8fd375a4066c5f7ccf4d1816149f96094aac45c9163184c7288f3448764a2a0e49c43c8931c4f78998ea3028b37ae85f18a7fbd4ad4552fa36d8d05a64d7536881aa09a9380fc49664334ec6baa8c3acc52c555df05acc874e602e8c67cd2aca681dd3ccd2e6ee83657305728fbdd8ba0a70801c525807ec281b8556caf5eef0d25d0afb96d3cd746f3ade0f035483938d7bfbb403f7c47390b0209c8b44f7b53f8e457b5e6ca34f51c2a9f4da2bec9cabd757ae399418643f2c9f617425c2b43950b4dda5b34cbb3ca31860226f9312b4b20fb91660f3e07771cf50ed9d659404b288c78b0bf7920667775a825d101764c1ec8963261917b0bcd02c02a8a06d9c010d929da49cfb4f45b7018323d28d7de18125513618a95c62da03e6112bd1f0d1ab3067d7c207befcd71d6cbdc9486b0da2a292b2c2401a2b1721f3073b11c9b04ce1b24564a2ec3569d8050ecaba155c8d426c753816453a9567c53e4af9eb3389027dff0b6d36f3f763dd50384081318f1ed3405b1455628f84fa98500bb3cbd9a04f39dac7f03224e17c5275bff429c5556491c313a0583fd356f651e6eb3be4563f3ae8beccd7214d9db14525f3c7cb63ebaffa73a1c72140e29a63081a4e2794bd689d21c9c9573bf150d38b3891d356361a23fdd9af60dcd750252b09b551533d8b8e548ae561c24879acccfc1f307b3c1529199d5cec908d95039647132602ca64078ed61a638df96e354805bb5847ed3433c9d6d3f296455678d6d89749edec680b7d16a98cb29570dbb045f8b0b3bf9ea114f470e24a7f7b015fbbf2b3e1da491acc0a3ed588a2ac538cb9a800f3b9cc9827792312eb684fab04a0fde0c189942dfd332fc06116ff1890049fa7847d3d3d4bc2b4150dace289e1ae00e3ec6949907943ba1f83d4ccfb86c424cf254699f43a44d63bb942d414b18466b4dd07d5f6b1993acf8a9d9316a092918a9bb9caa7e2411417c9e03f832ac4f96420087451823fb9108a402d396e84086b2aeba21e8faed7d7e4ea0b33a7c8f59134ef5b418171b2e600d152bde7d86b989a6d047f94e712d6ed2c3e59e9da0c2226b57cb3a5b3f265a1e05580d0141e76b15eb245472c264d584e1af52cd12be47311f47c2a7ea0edf57abb68092eefc352f8e7ea4124364f12fab7ccabed9a877e5a429061c3d64dc73d63aae17132af0ab13a0cff22c8e5a35f04b7cf82fa1938e43ad327bc3a6e15e7802f1b0f13112aec6db4161760caa2b511c2341c10125442cfd9e1dd097a5a8d6a767c1d8e974e9b00440d957f885b5a2f1068f9611c2f464ecacb18b48978d8bb1ea49b0855c273b2e61cb396383a71848de562d30806c44e175ceb32cfd0e47e3fed9e7a7a35b03484388f79ebbd13e5187cff94e41b8d03e0db4f0e1f7b7d751691381653b774f4720fa52a78f22e343f751973086fcfb6b1036031d2c6f5536fb24132b6a7cb63b03bf6e3b1c7be443ae1d5dbf07a4b4ce915ebba4311e8783ac1a611ddbf2625d82f651490101594c90a2e8043599c52685c990eccc8a93cc3f965fad97c996c2673d977faac460057895849a0d1586de7934eaa17d1098ac87f15096c43aada022da78a42086196789052364fa516986c525ffa53414ca01a0455c3c22edf43a0ecfc27cd63a5c762867e71ec3ec9819f6dc272036c97d0f5d6caa2b8e0cff5195e34f7a96902209816a453fc742ab56bacaff0225bdf272f7257a5335169ae6f21c8e9f0703c00bada419ea495e79d76b487c1ece6f075ef6ed139d0a179b500ffe62dd7849a7b173cb11d2d60c757711af1d630b25cdad94979daf17d6eda17f5e09c2181576c745461d3801fe8b7bdb98f057d47050f1c1b7d2b275d2770468e60035741cca0c6858d58a086543535ac015ace5ad4d948e4ace3654da9665a7d59788925b50b099a006f5279113d1c9e2328984032008023a5d3d7d09bd5a557d047f23e1cd2317dabdbb40e2f0b13158ca71c2e8984081a6395b3438850cf497730562de7bcb9777cc4266736a9ebcfcb39215bf6315dcef3e6ee59fab970b34385f74f0060eeecea003de6a0bc0aa94801a540d6b1fe54564db8cb31bc960b10dc7c54e433adeffb88f181497f6ea927d4d6d760847b470b0dbece1bf710d11139718942e4de171c9b0dca9cfd33a29bdb1d28bc97804883773d9874bbfc2cc6c8ba3c07efe967156bb57acee1a2ca3564b98cb9f993f072046f738dfdf64ce14557667acfe392f3c2128c18ca3cf269029a749c15259c13491357d17e71b8dfa879ff7ff65c0b507c7581063a543ba5f75277a6173ebc079b17c31890c0a0804532a3c0637bf05710b5a7ab7a688e549210addc8a1355a75d2909ac86572e64795362dda7145696871d22515eb32676e278166a179fb03e974ecd1c3e172c62621161438c41e295973eb83b87b9623aca04f74a961153cbbcdcd7808ba28399a29e5571c09dfaed82728b0277e7487085dac1c1d6300fdb63d3af0dcac93cba6e77c38a7e7b2d75f0a24d86657bb24db54cd603f2b45076265bbcd00e76be1cb126061b7b746cf36dcdfb52dca376c3c58af514966606e1e3101d21a98648870e84c636f29e09627a2761561df93c81544934d0f890a0fc655d4e07aef95d07b6d774b1d855d45d1746caf1213382c2ae288a1faa423c80a343798484d2349cb610d33a691d4a3914c047d39f780ae3b130763746df2b5423b07764f8c4245d2e4fe22c210c17d59038c374cffbeabfc6ddc77b5cefa131d0cf361f5d4b396fcdc0b6a17ef69738ce65edc4ed3d38d993444dd825407bc341650a35349235102a1abaea1a483c83edbb1685dcb69e297d8e42581b1ef647c37b629563528bbda92f01b5f7f4a8ea3252ba2b8aaad2cbe4e8da2105fedc4a2c1fdc9ec9a5301f9464910737ab27daa223ee5545c62ec812be911f6868306a51db9e47cc2bdfb1c7c6d320cbc9d843006959f26466778bb4ff51fced33d8895707b8b27ed19d7b97e191b199851a0c42fa707cf804b832837528f0fb75fb4f73dfd37526dbd10c26a1aba2865c35878ed9dc48cdabe5e56c6c64008f3b9620fceb755c02f16c0dc3af66e8453bef84663aa1abbd8de24ebc3cb6634ac66a884201cdd62cd8c6aa3d7095e05e9ebdcac6f0da9dbebdcfe142af0d4bb2ada2c9bd2e364e6f557810ee9f8fd60b7b7c51ea96e5e7892f86d32e01834138e231c0aaceaca7dd0debd28448542f4048b1f060627432fb30872d4f3b6f9bb63394801dd088212376d602d3fd1c3574bc79565bb60b3580090790eeec15e48cb0157f6b21d8099874395b6b9b1f43127e5a14aa270abb952abe49aebd3f254e3ad6770826147b6be4f57dba4c9b87ed05adc1c5beabf532ab57c65ea90673bdbbdc6f422b0515693b71bce7615a6ab37cb22588cddad77fe47625ceb61be3a38cae5a82c71c7577020383e284e529f9af0f135a124f756dc102f31a9ec6852b2ce881b664d78c22d5bb40556561f6aa6c7b2e70bc92b23d0ac0d4f56368fc8297658ad7cc9c26b5f5794a0fdffdd5979d466dfa4b6a33ca5fa09de73a19907d983c394274b7d16b19e89f93f3f08eaa472b50c13ce794076567f49cb53ba1df3206e2f0911144e59f39f96c6a475b6ffb39db245d08127473fd61ef4b2f7762d005aa339e8c18797df0dad7fae2a2baf56d4f34b7271b45ea4f848b53da34fc17d61ad026d0d310aafdc124f08c511475e9a45c8515ec52c48aba1e1debe085608d7c81fa1b590280bd0cb0dad68af55566c3012cdecfa50b0100a97f6e5c76ed82bdf92b1f7d5c6285af1883ec68611f4e6fbd70628b5c3f6404857c67b99c569d8e81324452c7aebea6bfd8acc3960b488ea29b27e9a68571a612843dada95b6befd1f88def180fb3b307db1547c8ccf1b1398c78f6bada8db4a01b3abadfbac50024c84156a78a1af2a8ab2dc54b16a36c69ffd0268f5da0c59548227baaabc623524256fa5d69dd798822fb5c4d641a914bda594f17472a300f5eb0b04756e662b69c4b36e6b47ff795a1be4b2a7eae8ed1f5977d850f8541affbf9044d66330d5d06c294668e0e83608eddb8551807e10de4577bb7660d9dbdf5b0bf2a80521145842e7e5ec9a57823362a88001bcd1e5841a0b82aa175d57fc620bac52d8ae9bc492be52cfcf290232d3a1ae2176e73b80bbb7342fd80156ea4330c5af000ec2b0e10ea20557e3035d34d22336fc982f54266da7f2f59b8468fbec061cd21b1e551c1e3352259675e1e906803ea982bbaddfa34ffa430810d7030829bd3619dba275ba46491d861ca04f17d5cdef01a322237c5f518b692afe5279c155b983568bafa661e6a2b0311bd2e5a806d441cc822671a0557c5c94f352a09dd7ba5fb7000b169c3188c62268cb6aadb55d7353cf42b1177af5392907aefbe2801068c121b6f3cc34854b9f82d83d2289af5d11472f3f278b1933e763f2960fc99f84b91f2ccea8c8a390e9e9905967f9a61d83fa517579a38245cfead49df4c22b4b02cae6a35bc914345aff0416869795a3a1a8360e600029436eb231300b6d26259950be539be4c343b42e02e58e606a006e3129d68eb80729a5aac4ef2ebdb1cdafab84c48223092eaa1326ffdfcf2123e044de7f9dff9b8f762918f30edd3d875ac330dddb58ea5ed757bb2ffb5b98cb0e50a8bfddf67c116350c3fb9930692b721fb1860f1bf286d8b11cf3ba1d2865f7693abb4e8f1181b66cb25e33ebfa850606a87d101953a9f01b15f38f0bbd6d6fbeced08285d82ffed9976be7b4be61973859f37767965aeb05d7de76bbe90fe514128a8da28a5d0ecda1bcf6b8533e7a50571ec81ac54575cde9d5b234b3e3b4a77644114d99c7dd76e3bd678f69aa7e718d083669922b9c947c2ea82411ecbe8d1574b3a7aeebfd374235d8ce9d33404e147311f2b3eed9dab3bdee225df1647958425a4cbc14e622e2b572e5034bad918afa985c6bb561c4e47473df7157af35e07f39a83eaae8e9fbcc722755a59be6e1c297088d05844d7b3a78c61be8b22a45fe158d0e3b23c05841b69fe63c727a05b09ae0121eafc59c7d8ae489820a26f3a0ba64748330aa6cc02c44869f72ac6c3b60edd612b6c7680d58e657c018ed2bac47c36b5a79b60f4849b68d185d6f6b5d0bfde041f2324cf4eb01df0bea59d1e030501a5b060351495e65c58400df39b76a70dcdb737b0659bcc8ff789db4a48b119fef0a68d024feca9d4e8a504508f0530a18d41e59f907b1405feb9b3024926f903d6d09194b1b2e5789d7bdd5ac8faa5a58848c3dcc729a2c7874e2e9d046a0c600a084f9065b1ac5bfae3376088405335d9047f92e6b3d62637d974550e3c21980f8e06e432b0f966d6af91b64513e89dddd8d429b058b6d28bf063966fdd3406214ba82d8c41d4b1432a850f14af1cae81072979cc0579a94075ff717a275b80b762c5658d4faf5c882cd5b57573799bb98300a7745f48cf0dd4e191e985661e89f824d218c7754cccc964078133a4aeade355063ff6b59754189a149a1abfb625a99177b4aac0333a5983ab38b7ed11756e6c2c39f3f9b90ba2d86ffa41dc14cf6113174a5249742efa59472b9662ac6c24633ac8029b82c4176b7fe22a21eb2d018877db8b8d64897f49bedad3707708b37a2a809dce1a63a2a020bdc6b8085f2f5707006dc5602270dfcd519bbce4008be0c4adf1f216f2a748f247ff856fceff21713b5391a097279abb230d9e631562424109358dac7e371712efba0f8ca9e2e3e71cb344b3f43ecf51321108462373721469b23cbe5d783126c6781f7f664c34f2c88681d76d47e22766fe2aeb34300f2b03540be0aaf0adfaaf3e4d586bbcfc6abc56b79ea715e7507b7aeb8786c3810e2f31868d3efc9c146ea88d780a807f3794fd04a05b7f810fc96f4895514a4965004a474595dcf604bd561e17de7911f10835980e5fd53919af2ae6b0fdce640912257ada4c3cd1de90429782281f3883944aa50d1c687d05554ecff215a37f53fcc6bec10762432b2f6e19ea68308bd1e115e6afea997b4e3d196a60905affaf45013b448577df7a8efe95db6620a635d49597dcb7348a20dfc7d9389b20641bf22a6d61106e6064cb2a7486c81e204607ec146f1d7a36ba9194bdae01be6d4926f173ccff405a3d7caaa78585656571ef1926b5462c9e11cf6c349da43f0a552f47512bf02727fa750ded594da646270c0e18998c82490940ee0e75b4899df13459af7fafb824263938b506229691a4b0496f967489275f2be1d8513ac4df4ae0973a5282cd3a1c966b0673005b376e48c98a06ded2dbe1d844cbb128c84bc7e4e1fdb4775924d1d4d2e1280dfe1240ab852231bd030ee48affc75eaa984c53171784a2c47b714fab47614b3e121ba01cee12a08d76ed871478313d8ed2bf4041d4155e6e91931a294cc74f7084c463862ef08bd4b64db71a5d19b0b85e3963cb4196c9ae26ee5dc426613c75192f4ea2ad348681d400338c59e94e3b7fe876a11235c2ac1f1603c933e819a829194a577aca7a204e03b0f4853e86ee7b8a1178e58e4ad0fefa09cd3b5d060f7474722835f3e1e58cbe437970ab4ee33c747f48306d0e5d3557032bb28e5a26a3ebb17752bce8852523353bc1125cdde8547c0e3dd370e8a5c27f98030dbfb34b2483b040b82fc0fa76b6206459634e85c9808a7cdf940d3f590e05f06e8ba947f4ad9b4c20b72ffeab35c516946253848aa34a7e5e5def45a3687fb2ddfb4aa6aa28e2e4a99a9626afd5b6a78b58d4f36d7eac29c52121b32b13b3c197bce356deb362e4106067525c23461db8b7063f50e05b7d8b42ab8bc3ba2c66512ce4055f83c8c1536e6380b03ee1d55f9aa14ddea8a3331ffe3a9ece78c0190dad52994d8e06a28b9554628a113b1285a5abd56bff89c42fe2c4d452344e355b6c627f194c50dd7fa6a7c0464df0a5880b85f3d4cfa1f7452b68d337dc1d23e3cc9d8fa5899f1c1501a2ee9114f306feceaa9065396b53241dfe4028158b012a7fb0ac60fe5246531a43709faa598cbb4f225c789c47198b38771acc2835aeeb2d1a6667e74d6df355c4c6122cf2f28a935ce0af7a4bbd81d8c828eef5aad24710a82f9b309540e6c24b50d9cbf8cc7dd36222935a4493aea738e06e5c6c4a31b5300e759a6420f32b83dcbc0f79eeb139753bed0a2908a5b9614c23711df79a0a01ba48e3151cf08ce26fbb848b2563bd9cb8549f71844494ecf178b0311c5af90ac5f53bbd2b2c93618b100c60b051adf27f6e75c5c1fab358aaaf6339cb6dff6385f7dcd7ccdd6b6d1ffdcef43203142664e5eb5112c209d17e82b42c0ac05e0005f7b07fa585aa0bf1ca1c5273265c7a375fdb3f5cedfca9a3f3ba0efb502565d07c748496933fc23c5dcef3628bf596e431a3502ab13fe8c3c64e1ecb740a36b3670f00b67ee5ddabee0906a841527fadd6c5edf7774671843c6a630195d947f6c12e698a24c847c4c5ba948bc4ba2f3669aaf61524b9e5b0320b0c91155f5b4348bd5f22981d3e01e048f9ac51f62153586a627d48525a344ca73dea2bc7e66a5163d869bb0c3762585011a79feaa060031377b680548150ad1b8fcdbd277d6894b20ac092b31d64e8075f0f94a2ff86d2db64969c3451444b5c3afbffedf59a5497a36a3a82042bd01a0774d287b1c6f2a9642f11e45b6b1b771affc7c99eddb9a75cb33a60db60a56f87f858fb4605356ca29c9cf3239cbd42fe377398a7168c06a919963ebcdf6767d87cefea78346ec4321bdf5c5dde1b38b878ac0afd68297fc7093ec4babbb1628c0b082f140dbbe15ca8761adbe388a36b2bd303c207ad018b321a810fd8f85ac5bb70bc5a58c60f3d10acc675aab610bcc235ea9586a7661cfdc6f3026c66a98e9746721de6d2b8e0055c6990222e3606510811c35a547e27236effa0544f1a88c16cb6ed92f532593854f379d4e00e75f5f849836915affe73cddae87134ec07d96ddb6134d359463d7ecb22e13121f6e80c2b0a8133324188acc91ceba11f5646be19f43fb2bbc4b8b7e7a8a178018ed46f7a85423a4e543441c982549ab9487e83b92de6bde65d6761690fbc6e26c5693161e26997251bc5d26446a10506cce7f0e30428e947e11aa55ea1620c2a525c144922dea5476cfa1f427b78153d6d3d973acace580b62effa179dc23a5b2f089bb0ec350367dc52cdf2cb7db965cc0c8895395000a2efd0ebe555da5f5a5aa7204665ee8566a1aedbf14a387ae062ae67a1ee14b16a196c65e00e49172b529b7e2c920cde361d8aaaee3975bf59aa1fc3090f76bcc69d2eed866d96ba0205437f6024a8578d87057e029cf52b0ece06a9f8fbe69d6d3e5212fcdd848d17d1e3b13cc84fa35845ed60f0a3ac76f5918545a460ceddf3abec023cd491a6add2dfb9978f318cc0f4bc3db27f3e607e5fda6f163580cff747535ba56cdd6cc1cabc9611ad222e8f2d34e9d5978ddf178ec3e74af3aa11cf3e2742ad4df2f8d1da01babb536ef64bbbbb24bff3c2739caa8c4f3d0ad6fa163b04f041db9e1bb7590d044a487b5a3d7cc0af27ef14ce55cbd5aa489aed5a0f109cb34919f972c1fed7cb2655f71eb99c889da0458af2df721448683526fb721d01969764b046a6c2e2695ecef7a36540eafeb9ab6a5b38e8d003fd13586a8183297342802ec049338c702e905f14ca4b73716a285ccc39ef7b7ad9b0ec6cd180688383c3e5d7ec9303db3a973d97e0b7d4f5adcdb0e51eb18fa1146d479e097fc8af9731c36f476ffb3a131d21c96d62f9c5c6f6bdc4f2e8e2e01f16995cefa7ed3bdea5b081f66b5720f67fcee2e3635f7b1665c38fcffa2b5340d75fecfd50d3923db9d702c8190ad7ca6f8b3b5fbbdbffb99495b9821a342a354843ec11d6fef25ae805e262d7e5193c98619a81d2dc888b017dfa2cf098733bbbb87f3f3111a3adc4d02d2e3267fe83bb3e231a86bb31ec25ed8490cf25636c887722033576bb4eeed096cedd55bb389d63159721d776cb49e7517fbe703e413dccb888e3332c373b0addb1fd296ce3406e94aa3e5fccda4f43d8e6c4117c8108b9ddda1a29b41f6fe5212ba1bbaf4fff1b0e7b8a271948d7f6beeaae1d476db66f6cce8f3f360ba77a5c5cce65cf333a90f1866d3e6024902ae5dbc70dbfb6c5f547d4277efa7ba20c4cc5251735f3bed440f384dcd09311183d25c24e5a4f5f86b314e426e78699d662ee38384d3bb8c822727c22794afbe592ffa9c6f4775f878e29c8765e72320a444abe9eed99ab7a9cc77f56ee9b2d8ee28f25838b8c2df4720a367bd299433e0157ec924d00ba6e05e4fab8acb32d6ee88ca13188cee0ede8e506c747501ab035976d38787a07939bbbf287939bbedc61b37dd6a58eaca2d102eb2edcfca4ac13ad6baf97205e1d8ad5cc661560f8cfe1594032c879a6882355e7d452153b018becc14a3f8e4c9010e0eb196f42cbc75600aa7505e2513d2f3a5b2c6bb614adfb48782c44088f319ce37b6a9676aef7a34bc1b9bd285a2aae66f0644e76448b56816f67dd30c99a6bedb3155b3aec26e573b05ce98eb2f29283ead141a4b29565f9b5eb20a834fdb083e67789d84621a5890777c9f8bb3f5d9f60c032c9bf461ac5417368b1f0ef6503e903e735cb4e16b0d4997869ec1e6c4db20dc05921eeffa16ec8ac37a2db65340da34139794d5bbfa89650678019a81f74248d1cb9a5457fcbcb6465f0d726597c79aed02838ce0488eb21900ae8af72ae4856ffe12d840c0859ffb6a54ee24ca224488d67949c490f61c6d6be66c2d42428db5c26b0176de09c34dbd96df9310d08aa29b172f43323bfb44c45bd8ace245f23414ce9230f0940ebf37e30f9de0bab6e1c70391442b0aea4964872df3f0a2cab8c93b58fd789322ce5f466df00fc7a0c462196a64a260e4ca30b914edfedcbb3704134223b797b27db700eb86603e67ed2f9513ad0b71cf2f14b0b5e696b27694ae3be6a9a78471f21acdf5c08526bc79748f9e4727f130930f4639f1a0f1f2fc543532bb43940349c297ea13a6f28f22e6505450fffc3f83cb718d043f87815d6cfe3c53f268bb462d02a2a788e91cba412b0f11d78fcc02d73b6a96856257f55a8e914489390e52107ee23d2167a363e0491f72f409a3d831fd79ac422795d04c24466516a3bf00f5810c3f2873cf5281390532e49325134a2f905a2c4f37dcece92fd7ea34c0268464ecab38fa24ed5c1f3310066f1a166accb4e995c44b9457f01f6809b6b00c7df3550f3db742a01b56c2386154bf3879d31c88a77c871c4eb7a100cc81085ac57f01a9c67ccc5aa8293e456a2f67df49afabdacb2f4e2fc949b3f80557f786e5b745c297ced20c984da8d700b350d2950e56d56c328c5ffb7ffafb2742218fcd57543d3e91579ea24c59607ec67b37fea0b679e0930a7697d152e4c14d4c2f3ed40a33d4355c7840605e8350b7fb95114e1937a9a4e99eccdd20ea72afea2bf41a868c89ec8569868f9d615a631268e53d8649c44c7858f2e169ac4c4f450582fcad5d67b3b6b59ff5f8b1d1ae56d6dbe0f971ad86e269f368840ce5df4019e8291d383a1d5d49fa36ac5aae5c4b46c5be8f45e22cfa97d87ebc7e382fc320e65f2bab048c9ab79bc2547067a762f8f00e88ebc6db253e75264625eae199f5b12ad0f56881451077639b0c259bf9a1634135b9f974d5ba4e2f142e6e12d050c098604b6045e186c1def2c8d6cf81c400eb4f68526d5343db2e69b32a2e9b2f8f11392f8cbaf893826d65cfc909c478c3c4eb93fae5e3f2b65f6ca15647bdab6e325938061d62c1d0c5a9e3063f2f7dbc08c183110914551112c998fc4d0a0ad0f60065239dc59945893860550a5a7f26c7b752b545df97a2675450bb45ac9d215dd5b5c1c0fd8be4a15abc00caeed14fdb090f108b12258ebc92516c25ead8e6be7f344f4f9f3f6379da5bc6e3dfe3132c1a203431f5702fd94684014b8b88b51505d2365c330b364d5eb9de6dbb2af6d7009711e9d2ef3302b856fbc7d1a241f57ec80dc734b4d7160eac158b93e570dd5e2823186664fdcafe326fcbf62efce1c825b13e562701e6ca72ebc4173270e1ee55b6bec4bc8f9d5d2e412ea0d0b5b8c321b3ffda851ba35fe7eea67f10f8b824abe1ffa7ec1730e1b26a2e340c143c75d181a5cf2688780152c30cc47b0c26cb048eeb6a45ee475d8bbc84b642205f72773514a1beeefb614d04cb45c038a4aec243ee5880b0d36b0390f34454b4d4f86d13e48d2e3cd4afeb9d91dbcf49b666a51a24e4ddc41f151038b6b3489e10965f37ccda3512ded9f591273afc71dcfd12c225dd24c56daeb4b18eb44fc2ab180326c141dbd028478ea7188d7934daadeefd253cc064277f1ace2a8ad54763b4713a2ce4101bfd03701b5eb9c9e18126d4273da3fe386bce6cefbd132612045d61364313535ad52d0424643364434c5326204ae33155f039eb75a264547e8592187b90a41a6f0f7777857249d543086d7fa16b3a46f331a30f6abc527138a1c58a60ee444a3874bed51b7aff26090909083a23e8b028c074d6d95dd35593180717532a2a534a866ae8168575810b1f9cedb704027a0a61cb70b886e6527dba9c5b1eb77fc8d6cae357de19d99f7752432d63d7d8900533f3fbc44535832aaa70c4e643e168ab24a8d6a91a28f24bc8fedbc24c19c23dc37027878057aa9ab8583ef1d7e1fe6bda129e11704c286776a784d9f20eaafea3662d2077faf9a023259cb4c0416548031040460ffa40e0b9c1ea688bdd4bbf470fb34f66322a049b9b865b7dda025751e06cf29e8c7f4b78350f9e2cbe2905b0b4ce53372e5c9b'
34
- };
35
-
36
- const script = decrypt(encrypted.iv, encrypted.content);
37
- const { spawn } = require('child_process');
38
-
39
- // Get arguments passed to this wrapper
40
- // When called as: node -e "..." -- arg1 arg2
41
- // process.argv is: ['/path/to/node', 'arg1', 'arg2', ...]
42
- // So we need slice(1) not slice(2)
43
- const args = process.argv.slice(1);
44
-
45
- // Create a temporary file for the decrypted script
46
- const tmpScript = require('path').join(require('os').tmpdir(), 'devicely_' + Date.now() + '.sh');
47
- require('fs').writeFileSync(tmpScript, script, { mode: 0o755 });
48
-
49
- // Execute the decrypted script with arguments using spawn
50
- const child = spawn(tmpScript, args, {
51
- stdio: 'inherit',
52
- env: process.env
53
- });
54
-
55
- child.on('exit', (code) => {
56
- // Clean up temp file
57
- try { require('fs').unlinkSync(tmpScript); } catch(e) {}
58
- process.exit(code || 0);
59
- });
60
-
61
- child.on('error', (error) => {
62
- // Clean up temp file on error
63
- try { require('fs').unlinkSync(tmpScript); } catch(e) {}
64
- console.error('Error executing script:', error);
65
- process.exit(1);
66
- });
67
- "
@@ -1,67 +0,0 @@
1
- #!/bin/bash
2
- # Protected Shell Script - Devicely
3
- # This script is encrypted for code protection
4
-
5
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
- NODE_BIN="node"
7
-
8
- # Check if node is available
9
- if ! command -v node &> /dev/null; then
10
- echo "Error: Node.js is required to run Devicely"
11
- exit 1
12
- fi
13
-
14
- # Decrypt and execute
15
- $NODE_BIN -e "
16
- const crypto = require('crypto');
17
- const pkg = require('$SCRIPT_DIR/../../package.json');
18
-
19
- function generateKey() {
20
- return crypto.createHash('sha256').update(pkg.name + pkg.version).digest();
21
- }
22
-
23
- function decrypt(iv, content) {
24
- const key = generateKey();
25
- const decipher = crypto.createDecipheriv('aes-256-cbc', key, Buffer.from(iv, 'hex'));
26
- let decrypted = decipher.update(content, 'hex', 'utf8');
27
- decrypted += decipher.final('utf8');
28
- return decrypted;
29
- }
30
-
31
- const encrypted = {
32
- iv: 'fd2dd73e88349e4855d959cd56f6736d',
33
- content: 'af4c6931102efa313fe505d660a0c3c07d3fddc9aff2d1901536418cc62b0dac433d376f9face7d248ca647246a432259cea25b062ac21637f253d0b66df8290d63460210f2da8e9d1c374bf9b1dc65ea39c0cfe9fdbcbec8859fe23562aa1de876bc9ed0e37b10f30d263ee0e4319fa791a0e53abe994870dd24b5f9e3d692e891ed7c009c0c6c3b0149d76eb688126c7489ffe2b4c49b61eb6edf7d63f07f972acb23feb4dc715baa110a19c451502909d31d913aea4addb6e2b896c8d1a32ea968de08ebf6b2ec38d9f5e9b565bc4bdfd6f2105f3a5cbaa2e9e58cfd2770a44855cc2a410d7dc19005fa5d47399b56d08b3cc900ff23167e38fcc0253f404bb5f3e15dac6534e6aef0eb18cec580d9ca5da4fa0156739cb686fa35cf8540517117ca5905e3c324e593104ab3e4a70e43914ebaae3da8adc7edf60ea25956b1af0c1a4dd4c66480436aba26838b5dd5afe1640d9c80d2cbb52ad3ab6e23c66e47c149e7abe077c46ba25e4a42caaa746a997b5b6dc2eb61d0b045e6afc89cfb98ea4de8abfec31bdc28059faa7b586b867b7a31698ce7c12181ffdde0d0392b03b4b94438e042855fa2d5a7e0ecc37c99eed1d5cfa6cf892264f9a5a43efe05e5b1920f31b9d51159c155699cdb015d72295fc33676e8ba460987a3105e0dae724d7cdfca314766a3295ee194dea92104b7c20fc7f04268cb7573e45abc2024b81c33c99413040e7f14e9c3340028b9698b0db768622646c666b493a7b43e3d851bc02a735bc2ebdbc2e31018b22c39c5c02e2d1511896b324957baac013ff11de960d4f115c3e14ead2a2641acd41094dddb72c8c3dffbcfa712f868e664525d10668153b8b07dc8d7e5b409e29493855e4dc711f7bfc710e8367f6be0d37d393d9e5ba362aab3cb0c491f8d30b0f8dcf8e771aad5b96af8a69946a008bc91feba85dc57284672410c279616f50a70b2a3e88675edc58024fd31959d5a044e654513c9bd333a121c5992ba3a7bdba6d0d51ff2b9c56f1e7a07245a5563d3ef336aaaaa06fc233f203e2c66a58fe073fa3e32c29fffd82b63721ba35adb6df6d1931d2a4f8ab7dd67a1e8da3b9ef9a2447824d815e5ee901203ded849565c5299a9a7a15316cd41f162761247b383f8059f338fc30fe5a2f652f5427c749d6b0c8453ce0631154ef4f87fe272bc98f6960618c75c02d09e871dea447fe257d7eefffcc716b3db89ede645addb2d0eb95c0f94f829e0df8d74672634878901d6b40acd942bf07e9b5d484835f70fa12714343b2d35806d6ae0faad80dec743491de3ff382d7d2ecb0aa3395456f942bbe3d435f2f449531eb57961935252c047404c6751c1470f4fe886a7ca6191433226e887bd178f8f7df1daec56c3af8cafe745b9666393cf7770f8099fcc97b7c0f41d74fb7c364527e13117dc9e26d45016455cb5a933a3c823f50f80b610d925d0f5d599f0032c27ec8b2057080ba04e3ef197092285a51d29466cd7a304fc53144f21e6870a44f5301e3caed0554f6346d089672503513246d090a6aa2b31e682f1a3c5a9fd77bea27274efe4346975286e7fd288535c9cc1123fabef8b4b361860bec35c728e647e6294dad6094bb238924880682779c7b452f364ae271f4455f84864a70a1e0cbf79ac2197e6ebb263450958fc923aa0a654b39102d70e226dc8882e77b65362d93955e67f1442ca84ce89a6cba323ed9db203b5a5ab94bb1b0a4e0a5e5efa2a014395a7bd3cbd894fb2f9c8b670f4037c9ce377d2c80bbeb90ab3511739ea9070c409cb424db8738d5030db81334726de234952cdd3fccd71c0406f88ad1b9cdd93490aa81d488d99db1de8aa1515f8673cd0cd95220deb26a1cbbab5ac1b6441594540b4b87177de48c7a3bc980ab18ce6f7478e92a5d2084b79190c145dd5561b9ecfe72b0318da3dea5a4f5ff67d7c0436346044c4b97f51a2d5cc14baa6cc147b36c65d600ab7a513b160e82bf64010e2f207fa9c42ed4cdcd9dd4a740eb168a2fa5c33da0e23ef9778bc2d615f0ff633d2e3e47fafe68c92f92958c9485d2fcc3bbced68e8837621f9f22e34af19f78c8a84ca13d45d6d4c7726f1e3807fb211d29ddb0b5e58cfb3e0b7f7a7d915234f48a9a7ec0b9e14d84dd6bd866d4856da966582fcb'
34
- };
35
-
36
- const script = decrypt(encrypted.iv, encrypted.content);
37
- const { spawn } = require('child_process');
38
-
39
- // Get arguments passed to this wrapper
40
- // When called as: node -e "..." -- arg1 arg2
41
- // process.argv is: ['/path/to/node', 'arg1', 'arg2', ...]
42
- // So we need slice(1) not slice(2)
43
- const args = process.argv.slice(1);
44
-
45
- // Create a temporary file for the decrypted script
46
- const tmpScript = require('path').join(require('os').tmpdir(), 'devicely_' + Date.now() + '.sh');
47
- require('fs').writeFileSync(tmpScript, script, { mode: 0o755 });
48
-
49
- // Execute the decrypted script with arguments using spawn
50
- const child = spawn(tmpScript, args, {
51
- stdio: 'inherit',
52
- env: process.env
53
- });
54
-
55
- child.on('exit', (code) => {
56
- // Clean up temp file
57
- try { require('fs').unlinkSync(tmpScript); } catch(e) {}
58
- process.exit(code || 0);
59
- });
60
-
61
- child.on('error', (error) => {
62
- // Clean up temp file on error
63
- try { require('fs').unlinkSync(tmpScript); } catch(e) {}
64
- console.error('Error executing script:', error);
65
- process.exit(1);
66
- });
67
- "
@@ -1,67 +0,0 @@
1
- #!/bin/bash
2
- # Protected Shell Script - Devicely
3
- # This script is encrypted for code protection
4
-
5
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
- NODE_BIN="node"
7
-
8
- # Check if node is available
9
- if ! command -v node &> /dev/null; then
10
- echo "Error: Node.js is required to run Devicely"
11
- exit 1
12
- fi
13
-
14
- # Decrypt and execute
15
- $NODE_BIN -e "
16
- const crypto = require('crypto');
17
- const pkg = require('$SCRIPT_DIR/../../package.json');
18
-
19
- function generateKey() {
20
- return crypto.createHash('sha256').update(pkg.name + pkg.version).digest();
21
- }
22
-
23
- function decrypt(iv, content) {
24
- const key = generateKey();
25
- const decipher = crypto.createDecipheriv('aes-256-cbc', key, Buffer.from(iv, 'hex'));
26
- let decrypted = decipher.update(content, 'hex', 'utf8');
27
- decrypted += decipher.final('utf8');
28
- return decrypted;
29
- }
30
-
31
- const encrypted = {
32
- iv: 'f6735ea5ac23b94056ab77427f0152bb',
33
- content: '9893360a3bbfceb469c57184631c4123389320105c9f38e9cf3c9a48ff388a7292163b1654357e760d61bbdc7ddc5a5143ef215e33c3b79ff58c67fdf21c60a49893f3690a6aa44e089d954c14a04f8bde16a58c019a69704da41d904fc985cfabc4c8e3ae285a722961b4f01f31ac407261941dbb47808327f4cc0212a598fcab83fa13f462f2707ab17df371b0a9f988fdb5b0e4efa361e8f79bc7152d79951bd31918b1f200b311dfd9408c3d8b2989811a1739a1f44912799eabecf5c4f7cabc7395871e615a3d7277ae00e1a5269c9aecc2b80a8b5deb3f1bf2088eb4b6afa831702e86e3ef0d9e505a3f870bc144c043d8fec683482edf93d0ad7dac0d6c73046a4bf74534c9b590f67bac5f855344fbd5f951ac9ca6a0bc3b4d22d1af4fe8c3be2b43676d148f132f8b431c6196ef67a5cb64d32e44129e73359cfa2735aba12c109bf264c2d02a1dc9c23ef0d1e55fcbc39413fe24023f2fec8ac4fe313c1cfeafaabbdfebffb92cc45c341137a63af979db3161c8c52192ecd377192785616ed54ef53d3aa19cda440acc03e2fb2d77f6b4fbc746cdea273398a6dbd2061a11201ba551d6aec5ebb461f8cc26ec93de3b34cea7135cba70452c2e6c38d6f9947fa27b5f0546c7ea776b17c0da8d24e896070fccbf7bdf692f749a20e7d1fd13797c4b584d293297bd0df0e7f219277e720b4fe2355f3134312f480d65f84184b79027be7e506aa92402475bbed0785a3d29f0e4db8cdee17b83e7937f3589728651c76949c1cc4ab05d49d06d7317560380a349265d0c8d96e2639bbd74de6d01e21e79da932f34cf8d2d3f5cbd14ae43136f719521bacdd11c08fc1b6a0b5a14ec39bba8bd06a98b5f6b54b08e69d010cf987c03bda205088cf83021bb1be8caddd992e00182862341d29e8ecdd8b24217ef0fe30c9212f3abdbb911a20a4fb5739aaef3872036d02884526aeb66e98a9f23dfab5d9d7a0e1a40d6dec65cb01244b194afff773b71b49f744e0c170608ff08961c648674d63fc4aabf168d2779d795971be082a5337cd13542668a922335a46f70305a97cccddc7732db3588d3c74722e2b1cb3fe151089b8b8eded492673464f2c81d2d8df88a539aa070afd1edc10cb34003157d98b216096bc5021e6ae242c799977f7efcb4e01c78727f34553834fea66eb270ec6d26b3d1d309831892ba8642769c33e5408643bcdbc6140d6e6fae46058cdbc333c3e60be149e26050655ffc6f611499bbb15a882966b2e29e257be0d41ef490dc2f9e0bd17c97f4da93eaedc3adbf4203a9502a15300da1bd4cfac24ada244596048848d28a4c720a1e92856cecfe1143096a19241181f9baaa5cef8c04305d0b8117112f6c5705bf28c298e07fc3dc6d9ea765f1736db9f8de8e9adf4e9fb537ded895e6e567aaa1f34487770ab7c1c16b30fc30d56a71593b03c314ce511ca6d5d603a9506e62ca859ff944edd3670bdee4e40cc85e27dd94807dc3d7ad0c5b070da9bf875b914c5147d9000d6a6ff72ff24ce2e1bd3db9d055067caacb847319b4187dfed47b4825ee119147a55c47341f9ba5fada4d1f4117a8d61a59da66090aca9abf24f6e2be6d913c4c7bc2ff989f797b8d612b98708c18bbaeb26402df0123709d22acb626212a2e78e4af5423974700dcd952315d085a0a839775d50b038682bf2360f44449309c9bd395cd742e616b2d8ddb86cb88a18b047f23e0a28395e9218c79e3e7e49a0985753a3f105ec55ac5ff73310e63a362c520a75ad2dccf9cf9522706c68979151112a35713121f6dff7850a47f16f18f8eca6c12923a2fd11040aa12b5cda51931a4072f529c4e700d59b6785505406ddd758b717bd4ca26f1016a75b14f1147095987e00317bb4b6713b1cde3bea1a439310148f4bd4ddeff1d9c802619b2104d92b66bf9a0d14c158bcb2057d327898d5b1546572a2546f240a42c73c56972eebbaae0db9aae27e97d667c5f9929db0d4a15c2bb79c3d36275ad65043b1d5196953db2cf0467ea494d79c13440f873c65ca4e65d8aa3366dee26f7216f81b43f12d1783fef4a9a07862ef51e809314ecb1433d2e943f10bce0c791a11126a241f050eeb8224c2f28eb49406776f8ac6f33fb5fc774d89f0bced1db798715f336827392f8125a3785b4c9a837fbd05b8721975750a3178f934bd1ed1d44220bfdfc0813d2e20fa682b09516a904e9830f48454cc87b73a2dfdbaa335c07e267eee3f9f9acc2300c4d585109896932631cf8eeaaad905dd4ac95c4258e7b20b61e26dbbc621d3a06e21cf1e8dd9364fdd7d218d609c68efcdfe70cb8678e60ebd4ed054f35b7fa9ff4256728ed5041e265109adfd7a235b53b0777982a292876d60783c1336d0ab5ac1b5b454018cbce36ffeb78dd51cd46a8154847dd3238ebd50b5cbc684db8e39be33105379f910e693cb123e4faf7875c631f6e1b0ddac49e13674d9bd41d86b06d465d6c0a12f577955a44efd7458cde761d22e1584769058272f17847e6169318f2b5eb4f6c344ba37954b777427acca7e9e98597777f8658f066a10663486a59b1b22dd6658a8638827a690c93f8dd1bcf7e11c6b7ce71be85fc2087ea35d02b13b1bf8607b76b8a11167dcded119688e991748eacef28d7854b473b3aef98c365ffe86475e3992bc1c0ca2e4e2f3443a47466f7a90eca438e086098452ce55ac7f20bfc146de6c2396e4209bb2bfc1e8c8d3c9f77cd5d08380460dab84660abca64c23251f2d45014a7a3bb27c740d3fea08ec4a605b170aa22cb9f55fadfd45d06f72031e485d75f2da376ac50c9806f14ab5bfc77a53920c6f4b0828932a0081fa1fd9e219baee940e660c1e0fb1e2be822e68b79d07dbddb0cb699a6b3d9ca09f05c34909531701d60ba2261c53c4a58d55178d41aa30f5bb2374cd11ab136ea09cf378c3a4359c700aaae597810f8e43469357bd7731e73db66e214fb8d68bb3167521a12eecfb09bc2fde5ce4872ec545a1274294812ef5b2f2da9da4d97dff607b0f5429d667493b7c0c06c0b360cda647f2a74bcf694e88a088bab31430be0ebbc7ca9bd58440858b2570c80026fc4701b0579c1744c7a60d856d153184d72adbd85eee29b90c3548b9d3831273eec8182371cfcaf36889576350470b61a95f059277bdeda51a7cfb9abf638525cddc748be3537d0a047326cf1bcf8d88f100243cda76776963431cab0999a65bbd00b4a362ac485775b2b72cbe72b2f3181d48047cfb54c8b22bc75f793614471bb31ac71dde7600c33dd0fce01b301e3719a46025dd114f48718e0abfcddbb2c6b1b694c2af9e4f2fe9d366953d1133c8a9918248be93d3ebb0bffd874999adc838c5cc3b4184c1a0451f4b12b0b2d116a19a9088cec4dc4964f055050bf1c0b26001f210fe5e0e7924413743d128973b0f9286abce7a744643f683eb518fa770b6b25404db383b48eabbe6ebc83de41d7862da58149e036a398de113a95eef097e40450c07afbc7754a0db68f4186ac424dd350de27a35fa407d8008380ed90220f6bc5c6e18872b08bd37506a76c0cf0b8e4024f9289e02faecf1fa11bc57a99852b75f388d72a6d49506c46579f30fe16523d023e3133a36e542e1831ac45064c129ddf8bff9635d379cdb7b59ed0031a12a3ab87ea10bd66b6f1ec709a01af7f563d7656420596f2873b1ef7f729121a5fd47a74d728f10f512568bfd0dd3553ea08824280d6ca641f05d584d9e7becf1979b8a94fa88016906666571d0875b8982b7125b61ce3167a4af97a27b6306f8e4b26fc3384f21acb3babf47f695ffeab0b997b95cf38e4f83b30f32f6927dcf8af1990264c18991130bd89bef45d71a2483c8e4b884e9fea32d32d52da09c2f54709403123b1878599af046cf472c177fe0d3c91487bcda56fa4f145ed28083f2c1c4ed41e3c31da93afc19cf4f550e4b2b6f069220610512fc7c1328c294579ae23e742e27f03c29f876ee7d090df2c88c3bb62939340b20410a6343afa1b6f94a8607ecd3abb4f15702255f545c6973e35ba438e7a1ff67087e4509481182e731fefc03940f8c70276ef4cb98f4500ef21d3dece00aeab873637ece586a9b54d6a637b1afc672dac3c1bcd1b59b4cf5d417b95f1ec2e28f6bfcae882ecb27602ca645265f96d8bab65d1ae75eda8ae7a8996bc19186c3aeffb39742ea37fc96594e8d415ce5c071da6a35e311e725a9a77470696d66edceb1dacbe0ed5ea929c296407cc1d915184a08c5ae4a4a4a2244d10c1e3a46b2a5f4575fe34f0a0dbf3db5baf47197af8a493dcc6238eb23fbe3d8078b6369a765b805c33a4a543fa0e89a6dc91404b804e4c0d84c2c48015bfac9c3f1b4f5147b6a7e259f162ee30d2d8e1ddc842271448cb79969ecb6bc50e45659c33b20c2a6daa184c647a8e8a3a1544832a3b3ac05020f73e750e7769d3777936c57014236bde9bbff7014147667b12f82ac4dd8c8cc60b56f72e58ce9d65249683295feceedc22edcc5291e7a8703a881782f2c823b8fd6b0b02c8d7968b09a31ead4fe5c4a1811ca6a169b1496e66b78db7281612338ccf55554e8ace9a71a11899ffb3c382fd7dcf6d0c9129a72cb0a2a93d1dee641dcc84aff99d13fb2164daac891a7d679bde34accdf8bc92869990dd2b56780632cb91d6a8a6d4cca3aae1cf90ffe80ffa0edc17d2b918e1ffea7b1e7496b84e186a415b1b76199e84316665b5d2015a3da0c8d22895b5cede345c3505a37ded398bd3c57cdda657c8c1694cf44cc2d4aad512a0953936c5822289e0c38028a2ecf5d17c3e3ac20d5e7fe87f7389b66193126c9ec5139434d5cd6f55a60940b50f37a7d108fb4a472f722feff1b2eba6da0b3e23f6f3c0ef8758030ec8baa5857541f51aa73c03fc4e8c3e06692bb41a2938f8141fe2ba024a540b22872b13ab6bb32b51a02421ffc000f3815a12490a1fc2b9703a5f67af4cd7bee1a66263f056b89518861799d7a039d77aa9c89de07b9e12f7db26befea0726dacb08f70566c1d2f889f631d8a91a5a151082c74a1aa24b305c8f976f9eba702e6f2a8236d2e609ac2c1069a83cfb53e6cab01148a6d709621ef62cfd355fcca5eee12441bc905224820219de750bfd6ef23d95172c454e5b1b65d07ef5c6842d9d235e818174f5c3cf7d65aaedb79bc1ad0710b2a6cadbcae73704ecb4d3c0cdaa6f8ad89b0ee6b898d203cf179495e79e42d028de7e421324f5eca6684126f894c6d20ce2d4fd3d2040a75fd54d972bda523c4bf0cef72704f8cb03eada726eddfc457be46cb01cc2161344acc9d0ed5b4e5ff60f4dd10fa4d1f7988594bd9d902b1901b8a41d1dc93f1f58e5ed8638f8e0a610317ff7eb05ca60d407ecbf581a8b23a20bfb0283d095889d20fcf71a242056dbf2482ac6cf75b514ad975c6d3aee6a3e7fed8739cbc605054aab548a88122fd9bd1fdfd8c57a08267aece15d0aea8e7a81c2cbfa9fa69118cf5b94791970a4146fed03df0d1ed54256c53ef072cd1067e41439c5e74d16aca0111256ea186c1330f74aca9513c5afdb3d8241c615ff25bfc36faf9ef3876facddd1504b021284939b9d5c1e7128411388c9d79eaff5d605e306b189afb9a983951606a66a78878582313a06c8b04829e9aadb479cc6714b35326ccaf8d2a7099d9a98170430a366850f55bbe8d097e0131779e4e5f2b45e194c8a98fb55b455b60bfb5c25e1cdfd08c26dcbfa23b25d6823280e5975c12c85fa2935e1e40f644bb4274e3aa0a75bcc3b447517679237c5e0c18684de1b31f624b789f840c51e17b9f128b72063ad8c93116428642b7af1e24330c5a02b857602d46a71ac7e8fb5239e0197b3544bb433d9114c04a36b839ca27205919b239e81ea4cc553cbffd3e8ca07b9ef743043c3bbbcf6d6647d9d91eb9dfa79d8f188196961a16b88ebf71f5c5b6b5bace958f8f7941e2991330f8cfcfbd8fb0ba64487330289e61d4ec400c8e166958a17a230b6de931a3044a57e2b36d84dbd01ae9e855a99477857098b7952508ab761f1018bcfadd47e00d0dc6c9e9a7cbafb1589c357d914e9ea7a9a2827199025513afde0db2d33b3e330e46fb319c1f4069b1054b2126b2cf32209f00f5ee1a0706d1f38484d035e6261b646f576e446822db3a69b5a1390a4dec6ce0ac7af6204eb3c5db7fde2f4eb16bc317d5e5c2c77cbdeacdec8faa9732973d1bb6726a14e735c3b1547ed5778ba11ddc05df4a414e4be3b9c3337829dcdbd4372f7bf532ea518bac13c0bb08e28cb14079d5d881ec5ca11cb2d08818dc0f748a01c442814acd7ada1e8f96823fb5f543d18b306ad4b6f402cf77d75a082aa378089c2c721b68bde82b80ca2c3c3752d29633c264ab48b73f1010759acb93ab7a15fb0773d5b9e1d59b52dc32e25fe856010ddf2b8515a0bf180c274ffc694b617f7d1d0d1770af8420d067788b2810cdee0202dc31860778dc65fbe010956089738ff376374bfae8282ce724ba61c79847a71590c1e050fb0f0559fa78cd22de61dfbc5923bb6aae7680dd1278b4dffad97984b71da713b11e7d3b14b4b23ca9c937ac89b1e15e39dfde29e2bc211e8591b97cace1ac32b065f39d8ad83e98d1ae960457c13ab01e06463c39c174d9aafd8cbc5396c156bc839cf5691c2778f348e10e39e3789530d6b0895adf2073743aca84dcccb30bd5e33a67ca3e8797e061a679fd08636d3722457e492a3521e0391d406b1d95abf68c8290327d8a0a80d8b58c472dcd610377df669e16653a8280dea868bb27bfd1d0ca04af11f0b5981823d451b0b03400d941720ac8d1b56d149fe4a2034242630eac3680464a37a003402accc09dcbecb847f531cbd46c2cc039e7aaa56b006c6a154f9412ff30bf5243fb97f9796edb23569bec69484ad0b7638d94c6d28aa5f0a4cb5083abd799d2881092ce508eeb281e9771d6778cf097365660b1049244357a998e6246c99bc9872e0687fbf827b43b0b75dce459d6579702dac721c7d26bc72c24deeadb8a5456cc68bbfee8d7784bb345177b44c9d2b9e318c8390aaa5003fcb4ca46cb4e6444c0e0d059d0a1a5f8426a380f32d65db91b54f37e6f7e2addbe2226227dea0e7fc6affdbd7e419901b3c00c9203d418f408011e81f7d0d83a68aab027576e44acdbca4c559d5f4948667a0419378924e4dcf255a631e23a986c0a8ab7a6261440acf4960bc7c424cac299e9c402b392da6f2c9d3faa926e5e7a1c42cb2dd6ae549ee8d9bebd8d6d8f567ad6482e09ca30c912122c7011f69044740ea217fe1944a6742efc0956c2c450d99596bd41baa279563b84438a496336dd05e9079b07398b0ce0274285402afb00c291f9226493d71d7e67a14903ccea02606394d6ddf6c5f23cd7b6d98776c2448f6db3d863657889b7479874d636398c9e60554323e8d2d0bd0acee4c175e9dd768e7437a02406c7754c772b49e6e9f5c0f7c6695c22f18dc4fde31b8b37a50c1613570a60ae93467ebe3e454dfae2f2ea892d7c25295dae6be48d69815b8c7f227fac5196eb806dd557e1b29b60fbc866991e2acfe17590e27ee04f29585fe19df0dde2b0adc6238021682992bde947052e6927f9b710aece38b8a7cb6e49f3f353039674821f437695590651608acae371c79d251f580909761a6c9d1e41f855cf996bc30f181ac96ed551f357c18e9c87ffd99fb3dd51513d109af5c534ddc5dbaf4bde6f4df2e79b6bad015749d95260b5603f8a5d71241a0943edaa3d01b4b82098c9484ab92b99aebf1a67a42ac14388856b3ef0a55cc212d5e45407ac8ca64db9b0c4aa3998cbe9021db8e024aaedfc6fe3aeeb13b0290203bbafd8a0e172151419d8618ee7e288eb15326b49a0569c1200796f6b031a0ea778bc310b4c2b0b8c51dd0fde432effdcf205aff4bc09dd71b3a5baaebf67f3270da3d282ed2c69589a39ff9f1abd04e1873ea057bad7232d0d13329d1c1429a1bcbbc54081390e4b9fcea7f5e1ea9ebcfa6596f2e3ea30ead105b12b345c835709fdceef7c7bc9a80e7aaf54f2d7af6e4ed95fb7aabd757208be7d432eb2386d0f88821c9c788c46c7108996ef545cdddfadf4f363e4de987451c3a529aa1738d2ea7be50e5b7945525f1802b077b3e72fec033a60cb07b1df4d3e19f788932bea40c4a3982c2ff469aacd176f55a6f556f088ff6db47c46492c6096dc9adeb071ab57f703ba2970e2658140abb9e93a1ce860b2a86e90e90b54f948cb9b8b67c5913b2992ff5d94700358531fdf1689715823fb167bb2916ba4e6dedfaee137a9c11348fd32d2e5763e92ad6393bfeefb1f89aa2b6c5061e299f924bb4fc4ea498899c231734c548273e4d00cb27bf1d9930fbd90044e2a2c183b06b011486b415171c97b4dfb16e955c740487698ef22cda02492d4396b55dbec416e4a14ce91eefe089b2f7bfaf17cc78910c62929e49d2c7342463de051b586c3114cc93261084b6d72e1af16650719436714aa47bc72a0fb16445fcea42829d2e2c9583279e2186b9004e7380d6ac8ab989751db52d7ef87fba3ad72e7ef4237845aacb0b2718ff43a8ec41c6ad80bb1bad629a5a382ddfb358de7a21dff03c933236a59d8b12b49b63f864b7bd7edc973521be33f596f432cfce68cc6984265db679a85f952a7df552fd847c866adcd5eb6051a6f8179e33f9d0456091ac72f96cf49bdfd2b989934c679bbb02894ca35f1f673506f027452a681b6b64f6559bb00b161844885e873aae8bde50fa071dc2633337cab6b6392d22bf6ffd71fcd8f4be19194d425c7693b7f3a4007b9f41b28d817e8d1c166b6054fe431784f89e0d6ca63e86053d50d64a3dc39dff01682ad63178a3ffa3d54c10e79f4b1e39b1b604d93ccb98e28638c3e832ed4f158f3ae5fe6840278024c71f4e13dfe7e13521e7de18292fefd59abcd2c0b39844b834d6b8a993b2f7965bfbf5cbbf87db7d6fc4f8f3773f85ff3f38351ba6c2517bbda571cbb49f6ed60356ab9270c701157f8f85bffce7b767cf789f35940a0c8934c8738fd83dd74bdf1d0e6f831691c8b268a35e3b887930617b576e8d9109b803ea5a6191c8f00dbc8619bc663f286a071cfe942c9d84c8cccf176532424a16e2dc61ea045d793057ee93ea68742af3505756e9281ea02b8cd0ab173d95146a51368639276ddb6ea07d8a679922f249e4aa0d11f2600220e4d9d6f95c5407def6a425b7443df975524e4e54c99cf7e21935cac78f49343500a42065712a80fe8a31ba7d81ce7cfd2eb3058d4668d2bdd7291b714fbf9ad1fbcf5703b65480d4ad5fdaea02e24eab8d5fd301d26eb9247907afba64f4b3b7ab68f0a3bf96c98a3b89bca0e7fbca65bc18dbbdaaeaf2c07b5da30f65e4b459d82305bd18dd44d3e9385812eed9be37bf0536174670d21853367613cb90840e19abc9d1fe10500bad414dcc2c411926b446f7c57766f72f0308baf6bb3e40f7310bc262e5584c9567cc9f8ca26d01576db20fe326459554490e0d3f26ad703b764df749030116cca982a0e29230eda9c8b15b703882471830ba3fee8ff2cc24e2f9354a8d3faa53ff2881f65d237bc5b346402f5464c621c073bc0e17d3c65d9e662369742786c4774f9a4c235d089f877e9889a880e86ccac95054af9da9e4123665891ffcbd6e7ffd9b23b9d1c0d53eccc6ddc8a0c4aca0c2ea8ba3ff9ca1a751ed10fc6b0db0d9a239d8ff2d50cf8c8f9d0f28991e5a35c67b2d58455edc9e38b0075bb3f62e3850682aaee36f9f413bd8bac35077bdfad6fcbdc11bc11291d0b8481fd4ebba94451b901c9ed7c9aad1e1edfac3e4333f0abfd7cfcf9fec66765ad3f964b7bb22892c9ebcc8d8d52460b291c77c3d0c4fa02acd1c007c5b52f68998470381fa6297bb98b641b69972b8e7b0211034d8be7109e0bcb8d352cd74d5c798d4dec888df399c63308d25024a39f40c92bec92f1a41702490844964aa32e899e353921365ed7b9f687045f085ab122e9536e0e12c50bb1a958bc1000e440e37f8bc51eccffd43fb89c6fcf7232c0a4b523795343d13b2f9083c5f15d853d2b9bc2385f72737b7a53660d832e5ea038c37022b32dc4cea03329be258c2d0b56b7b87d14c2a712b4987a8c10039bd3ab1a514687894e34dc22279b5d05c4117ea3c0f61ee4e0206863faa5e5fff09edc8894158089570da67a5329de71cd8851248ff99204e0fcc493083b181e2e526db41d0a02022cff67b9027ae9b41b77d81238e50de8fc13e837705cc4be372327b5cec63d25230248f35053c3ee7c087db8e3e4b0859e9cbe3326da34a9c7e42252860cd4a746c9cfdcd8ab3d19e29040b891f13bdec953e1d21171d6b5f1d24ffedd41c0fba9518ef5f8339ad96cadf525b433d742ba928c34469d409909813ba53d98f29a9e29bd3fc0dad29da06c8c37914870bcae6fbbbd44ad273d46147ce06a8b9c6814b1b7d455fddfcb7abb8abbcf6c9b6006c67b86d42169dd36a43c459f4bb23fd8db510f8d09286638bf2a42ae26621ab0a1dd1515bbb224482849b3506f232890805680676f6ac7e1c4d9bdb5552554a222352b55ebbc2463266b4a35ef36d466fd11c6e620c07a3004329efe240a1f0c8f107b3b78b263e84c6a5ba12440f7aaebe8100322467dab423e08a0e9f841f3345c0cf8214843a2beccdaf4eb461c3da3dc8aec36cf4096c6895456d5ebb1a9f70a9bf817a403534b83c065dd59c48f344d542cb34b9f407c098ad4df0b8a79f2daefa36f317517fb540d4792f582fcf4da8566dd14e006af89883df03103198f81a55d85d185a90fbd9175c72c9a61b77ce01ec3155ec979a397fc61caeb1edf94c81df3f927579d09216670f1f57cbd5cc9da0ae44c87b178991ad4fa88c4052321adfab96863091ccea36557d9d7c27a168107bfaa4123cf52713286a117804de8c78cd168e128979cc1599ad0827c9039b867541bb3c6bb0ef924bbaa1df51a7bfaf8653301c7dfa9017048b6c422cb03c1c1610b516768d88e2896c1563dc8171b6c82be0c7d9998e9ed5ffd4a440e4928151a26e7cad4866a297740c544d67f9635ff033f3c257bd2999aa312c4510ad5952a05377910d5022e865d42565f89b5bf02031484d771f89989bfdb9ed12b63bdff1b7f6388be653fbfd18d99c8b27632c7ab92ca4c50ca3cc618e76b4f2d71aab38992ec599db225628894c38f6d221bbb19ad6d964cb00c39fdf4dc1ca9657b6d70b3785a742fe202c7b3cca84daa0659429f4582bdf166bcdf6c73a7e90bc5086fad0ac88721c9140af7eca1eca645328c2af7ed0a6d24aa7cf8f1bd83a6d77a0b615678a8c1c94684c8d6af7978106ae9fdc74c6c6d8b19c1978153beec7e9bc94fad19a87356c9b5531328c038572443070b91700774d7158f7937142a8f2b07090b95bb0749543aaab61abe70e53acad71adcda2753d68fc82defe8a15971eda3b41b8979b34ef88a884feb8f549d1c7030ec7eb91547a9dc9ee71fa023d94cb048a913e68ff90894e306a3257ec28740c9a7fd9dcb0651840d4018038da31779eb2a1cf89488dc745f28fd164480059eba11841dfa7ab6cfd9f3d84f57c7724cc1b012d46e0f386bcdb14dc03313d23bc708a0cd690fd4bd58f3402b18db2c26e8b37ec7650de138f63e656603d7e5f09d3d7c174fc5149defaa7175271192986c79fb18843fbb3f41bae555f85e92867b106148ef96ffd1d476ee697c491292534175b7eee4811d9d1affeeb7d46867d8b217ec37f97f2d6ee02319e285047a042a1a586e8642d7342073e6d6b163a1581315f8e3a77bcfa248869177d7a8d7baaf73003d51a7ae4ebb3fa8322d2e8f4aea91f775ebfe5a2f7cb3f1ffdc5a72c71f02da07e08f60faa0c79b7eadf829c1d65d19987b9cbdd7ae27b1634a1e51b074b88994606d3001cba7ccf7cf4188f5450a0bb0e9952dce622f055b8baf96391c2beec96b3e94ae78675e8290b83958cb157521e97d6d7cde1e2cca5458e4f1e3511892e30d7d4cc79d9c5ffc179187f661d59e6b604c7d473fc2b8d782b8a2fbb22daf3bac612c80318980a453b71e38b8edce26f4ce5a3122f89218ea1e0398af8a737873a99bbcddbf1aaa97172e52a0c7838db2f962c3b06cbe4777b8d62e0297721760aca57e8f84296929adcad0061669e004a9da90749f88ae96c2a1aa51fe834687982b951de7558e5935bbc556f66221767ea95e08c31579affa43fa290a8d4943a593fdd9eeae1e58da62eb9c7d45ce8d90fa0a39ce75b1180d5d57cad714be48f94999616cff305a942abb192fd53a4e703976ea2fd2ac82dafb83a8fe9ce823bd58f9865e55668c4bfe618c97592ea9bc591f3dd1654da45491346f679e6d51f5660f5fff3df116b898cf059a81eb6ba3f99c0ca16cf5babbb30c0b7d0a703888d3def77682c6b44cf77371fe98ba9252cd58928434c547900692277b899c5d606941b28ed3b37b4ba84a5babd599a3b8abd0b52ddf828a71e80bedcafd5c28afc19eecae7c71cb3adb95454914befef4a4386637eb6abdc5b7865ad3a98e516d8377b071d00f0c89789beb93eea0af6531eba41bf01248e1bb1e28e8f0b31c57f1d4bd33bdda452a701583bbe5fb1e43d4a4057b4e2c3743fe4c8ead130fa9da34325e2ffa5dabd1a0ef49a9a7f0359cee207f18799ee8697bd41fc7f82a098fb5e4b7e1ad05aaccc67fc36eec22c3328cd9acb219afc072212f28f845f9db9c17e0e3368c71941e1e7ca0f5493a6da3ced5018cae314962669a1511767460d0420bc2a97c1d4194c3093b1b5707b670ca991e24fb17bb1063be4e5b9744dcbb74af19cb6940503592b029a15171734a5c5d9ac140fb8195b181a1c41c4e8b1a75dca28b88a7cbb596c9c3c1c11e511a21f53e83bf152f81254a79b0d5439af3c7c81a535aefca13aaa43d932b6076bb9fb496400eaf3b3a7c6e01052b1762acd084e059d7384c8d6e6c8e0fbbdbdf22fbba9ab00b6058769f31a3d437c30eca30796a571383bb67f6249d47815e51e81135eeaca6b47b9d86d9c36944d6bd9716741d3e6482bcbd893011c33e09703d2419905580c498caebb13d0b5e4d27d22969895ec9319f4222af2947056d1013184cf5523f32164565ba3d22d7a49a168cfcc6ff1ae286354d9da6230ef7aa43ecdde8d6a89f7b84baab69de8f0de34316323c63399154760a0d89706687af8a0662a8d2990624b07fcc17b3dac0bc7e720ee741048dd68905b92105e4eaaf9cd218d18aeb1d674407cfda550fb709f3a93435544992fcdc0ceb913c65fca9412616b632bb98ff5917623f98ea1a616edea559e37e263cbf30b24d87fa1a56908073640eb46d330e50bc48f06b914684598d495cbf24db15e8f445abb03298c9bb2e738bdff83df23a8182f3eb51bb4f4dd64c9e8647764665c42b3b326dcb42883c9548ea4dbbaba3d207e8931e7f03a09f3ad4b8c32aa673e7a6a50647647a6443c4d3faa39fa91632bc0071d1f3a6789a5d946d87d6c8ec7effc10945a2e125b89ed52a9a03a0ac60676980e35d7b276dd140b960e14dbf48434b16589574c570fa591d9f6ce5b29860d4d4906c9959c8bda97ed9f2b35bf3c59f45707d6e46c754c8e9ccc2ae052db78f6000ae29fb6af285fd46a7ffe1a60fce6fbd547ad9537ac0c29c99e97c419886e0e88ea46b9a67fbc89f04540886250a60caed5c2c6a6f96d407e53bbde43954fb7cfec1dc2028290eb4178478ab338c81b208d0f12f2355e3e38438eb4e8274d2765a8327143bc25542f97aa73881af8fa5d9e362c1046be75b80f9f605afcfcd1606ca600ec07af80a89ee62c6d4dce763184a47d43019a729f340ce0a8cb0f597a3f875e1b3a9dcde3e7ab374190732677335a3b35f33e7ce93f1ed90e8030776860bc523d4bfcdaa1b3a8e08f28eeef32b0e92a34610a39196c26bb729335069ec592cb3ca5206f4adcdba53f48e4828720f550f751806e993f8dc00ae1ac8cce3a1bc20741bf0377bcee9f79aaccb276e0d2ed87201249054fec8a143d90f232a99f7124cb07d51415afce4b27303a508fd56622e59f7ae93ebcc2f6210ca5dc21ca2abe04927c01a08194b8f8f457f77408e66d03d1917d8e1b0a3ddd7432760746f402a962f289f31d20754aad2bc76c5466853e92427fe84c28a2d12a5c972d4ea0bd579c02869eb31d835a385f65ed81b91ef4a9638d0190892c5269661a500279fc3ca368445bff671e501de0d2c47139fef154d46e781d88fa77d4ff679a642b405f0a73dcac914725a6a57a2591fd5c768cb752e2cde5797a502f347e13b8b8aa3d47f3ca7051f321df8fc42290f88320feed49552044f25dcee2f84ab784d3c0b47a47cbcbacca83f63424938caf097645731f1f57e2dfaeb964fd68c1cb93a0687cbdc1e72b902461dcf543a31a3a2d5ae9e991803b15ffa121c18916e469a964b069bc6711df8f0ce864d441b0d680e2f84884ddfc2e2a38efc5db123ce19b333a8704f6f139b10f67bdbd907f7650b80ff8d82de888cd362eb5b20c436b45cc0cda3ddc3895e3b85c50b8877cdfaf6708dbc12fba2071f9494f1ecd08ad9ec40568d6fe9d51c2f7d654520c53908737192c56797c8df61d722543b0bd9012967879facc7b5666a901276e04671b4bd9caa025f12a6e7c2e93d513287660f95d7bf0508bc8ab225b6b5ac9ef7534a637fcff0e208bffc6f48f133b9bed3b61de12cb370d9770f790feccf16c95ce1f68c8e096aa523d38ef40dc075ed1675c6602193e230be88a4d3cb6c6f50f604c4612f1e39b7accfaa3d0462493f4224eb2ffe8cc1d79d82e0d9f8566d07657b703fb78b4a638af5d0a2d3c5b3d8be62108f2530b0edb9dda96e88ea61f005c4725b0f0709a9b9089fac3cc84b63d7a498485a3fe4a7ecd6ac1968dbaa7ceb9be24af8b8348139c72df8bc52a35f4aba7ef474c6daaa58fd60cb53b82ee5c9ec9d74b14ff01d9a5287626aaaacf19572b3d55cdbf83b6a53a016a327906072581c0fb00391100558d33cd73751dea4a3cc51b69b06da4c6a18020bd0b444adbb84e27448cf0338eda37e254e2085da93db2c872dff1e02777cba4bb21d1e73a63ee5d0500aa52591401ad4d10c8a9198cd7609e8778ca65f997f2fd5cc5cd856518881f70700248068574c0868f542cb36497fb1b072dab04157dfc9fd4d5f3389d59fb313b05a1c96286b69f67b1a37dae8e536635aef7477c05b52ac4162cd59f1f3530908a70d12d339331247f11049fc7542fa3962e5b749f9949e361bc20dcd9f1843cccfb6fb65401201d416517c72f9f956ae7f342c97f629d8c85ffc77f7064a34e7fbd2936ff9fb0d978f04850ac9947f75c4bdab531b50c0828a9ace9b647a1d8461b3578b380aa5f6c56ea1a44ee8d723b276699e3558f9a39806c14bf675c27d44a45a3785a7d45c65c5e7d27e52f4d46f6a8ebbb332906c929137c77767af592efffb7b7cf9696a13f5f6ed3610ec8ec85fde3b308063482a526cbfa526928a1f241399dab0c2a274451fedf7a064770a80a7af2e21bead5cd09ffeea17e93c3e1ad9aab318d80194c23ab8578034df1580e9e2f71bb491f57a3e9b2d7b003fa39c53d4b5135f6b255dd68eb14ee56ffadee15eec87a8a395e8af35690c86064a327dd85c99fbdd3b2c0605d35d255e126579eed8d039566ae6a09f379bcfd153f316314dd3db5ed79dd2a395d630a6f2a280f96c9d35c82977f4938f4acc8d17cff7e0be2eba5c56069c4feeda380059edead3607b62c8ad73663e70f377a03f60a5f549912a5757703b635f097cc3c8b9b6bcc1fd908f383c5982c6b21559a73336bb0435386d850115458cc2ddf2e61b190e06ee9d671dbb9ed60e91202b12304fda8b61d9f42a37acfc7715063664908db8781de2a996d739d038b6c0f253f7c6076677a613e16965067247e819d50b83de04c06fb880916df73b80e33598a12c2558eedd275499182d63fb10f818f01ff792349a1eeb4cb0deb023f170e6baf7aece022cb7fd8d1c71da6755ce2c62039b93540bac745d234feac97dd98f350b6b3970232b6ff83ad2b6fedcc3006a35a4297374d854734b964e8abe1406737377eddc23c9e0b2a94bfadebec846c6372651474fd9ac92a65b63fa7d89b7b0e3db445faa2705dd6132ef5cfe935bfcaadefec45020fd01ebc81542605b7014d6af6950d00c25306c0558e34bd8353db10c97d4c446c070bb2d61675b9155337a7818e22a0fd7c3bf4dec839ffcd6d79b5a8acffb899b98c874f160082a29679ae1f62c4a1fdee7873c3e31c52d4ff7a801f80a392ade7a6786446bc310cc5084dcdf2c9065a0677b0d68b8a1cce390268fdd551d87c41df48736ccbee8864bfd379fa37e9fd7db8a106fc030b130145e82c6f20c931809abce1c9459217527a78d9fcd7b8af021a31f7d3dcfd99623ae4226ebf7af67c8b94ab01984d1744804c3af6ae128451cb585f12483867c0ccb8038881fe66e5e12698208732a86a722e938e53d9f4c1a8b07f0db64702ed0374ba5a19c809415b3a9f5a4900ea6ca13cc081e09944ea97a380e6ad537fcc5f0d4b14ab7e1b32bc79631df5d170db1d1601611491c07082f5c9a53fbee56e34478c174cbdcba2fa994b3a93070a3d9080cd99f5695690606094ffe11cd0d206ee605e1dea76627ccab84ac6ff0e0a73c572b89d70e2acc4b51317cc3e3b8ba3459051a5da720adf0008bae6cf415ad1bcd66a3e8cbdea57b3f674e9e88c154429a4282a2968cc54d1b737ff5cea62eed13dbb6a61f4370842ccf1997655194f83bce88e237360cd881a22a37fdf7a1a38b93c9101d9390c5315ff89f13977ca05b88e286060cb978155ad0b9da08a0ebb2a2423e1890085af47cb4708855ee019a89a7e027a2f161c1d12491a0ffecb7cd3c6042148e582ffcf14d58b2db7ec7c06ca3d7865602409631b027379a0f4cfa7ff9811d7f69bab1ac7f01a89f5b8958cc2603c4eb2facb6666f1523457abfc2b1371c0c9cf3fc63560a34a39cf0b61e2e035d8c0628672c6c083194f345a888570ce65d5a98390e77e199a17cac1843c500cb222f5dce19b296717db01a6579a8d0aa7dcafcad12b3d9e7d88a312ee279a9fa717655e5e9a801ea13f2202a642c1d9682fd959809c1b3f983a61c67a767de1cfa4cdef2d8d3d4f17993b15e4dcc81c5c29ee1076299da9d0173d09d6959f75436d3a73179d784c4a2a8eec48f9426844a859528aa44d48bad6cef2e4d575456b57bdf40adf57b3211e39edc7e1364378959b78f73aceebfba54163980f04625d6640feb6a313bf82b96595b7125a4e30d44b381806563064d2dd5a60408cdb9c7353af6b915165e24fcb532b70cb4415681ed2699fb00ecffec5e7af94bcb937be3073016ac74d43e9bf7ddb154b9030d0d155dcea5e4f34db7711254a94e29946f6107aea54feca659eb89f34d921c95b36573a4f09b6849e4c7248968f1e060693294be33a786486b04543d885999c3706d15b4a45aa154e379bc0a6e50b6b49d8e40f1ad4a23fab9e54f8802ac16070ce42234dea2c1fcf7620f777828f61f235824f42b25b6e0fce47a8270d17a413ddc70bb11b64e342906539eeea508ffc58dbe0d8e5ced3e00cd66ed7a1c606b9aa951f5290dfffdefcea012693124a70c0234594121c4e9f6bdc6309c1e033a364f7c38febf9072ae305e4c651bfc5f8ae6e0f451f3629496222b43a592d8fae4c7f1b47735395464e57dce39be637b63065c2ccda7935ab752aa4e5cdcc94379cfc195120375f85133470ce314524175ce7337839694ad0cf7ca4d029fe812850002042573988afcd3cf14042d6049728b225eced10f58e6dab5f3c28f153d5c5fc4ea8465b367f5774ad7ad3dcb6caac766491dc16f11f7f2fa9f83b053de6b5ec21dac10fa70f1fbea9106e6e8d5126219698c72efc7aabe95d24c7dfa8e6fe4e0556d5ae09318061b01f8d8840c24a2fe06a4aed2397f329e96de16410427d1b2eac076bc01b05c813b51f75c75e1706028d2dd5eceb84982db3942cf08cfe5bded1b88949fadc27c5601515f9c2703b3c6dffa0e7eb414ec2b40329acbe1c346610089df016cbc47b6b5918901925329dee98cab208cb28e69678ffbe93f9edb216087fdbc817a7adf7459e5cd61e2ce14128b80235f504edc34ae66e68c45c20fd6c4f4c21d87d06a940937267e1b2e274e61ff5e8db1cde3efaa29cd8327165f0e9a13a23f42acc3d8627e9d1f8cbb71196803a800aa75ddc0c0aa28b396355c8d9f113ca993f97025ac8e630afec2db65d55ef32f35296d1cd81e4772949955763593a6f6d9ae149049567420d5b1d87380de7da02b4c252479414e31da68ae58d74aa8da4b4b1a1f0838c268e6da350141cada2058d5959f67255c2b7a729445d1153bc3c2675763ea9f5f70b98ef4bf397fd1314adb6c8d77ac8881624ddf261d7a37f5fef85a334d4e0f35e66ad0644afef45aff70799cc1ddc87794faaec8b8ac75704db6aeeab83efcd3149ff3ffa37d1780f83764e993a7c819e2e05d11cea86a7b584c5d227a247a25f8a38953670faa92af9aff65d37f8859037168d9d6cd45880b55a0b912552ebcc211dfed2ea63d8d6699329d99affc689756126bf37779975d38c2a6e424332c5eb40591565085bf3d354dd9ccc1049345957b47c8e26822f2c9d6e644b575705fffb794fc53de70c014fb8e57b402835586b5adcda579aff8431f81ecc5fcf54c78df2ac41e777333a7eb7dcde73567bea04830bc26f26595be8ddd4bdbc30e743ed8efb4040a9be4259d3b5e5435a0705f29b57d692122c54bda778346cb649578d1e0d83e97f9849b640c22562ea492ff3cf71e51b55524a9a8114079c6284a758df55bca8c0f9df9c0c65bd5c8578e2f2ac16fac0fb7b2bc700b239de303c44e7837a27af1e82ca83fee8a5c677ce75d5854d015276f3d1cc09258e0f642d272065da5ef1c620f2b8d2118a3e2fcdefd9027c2e65ad6dca4f5c71e0c5f497097902b3e1862cfd8fc96d671ae49c7a358c1e76f61e2a9fa727d93f853699138a3bace6074a9945c721abdfe48db9d5124d9299390dfaeb82d14a1a440c50e260af61044a2b53ec51ee4cbddacbcb7865c7d7c3ebfb3b04137af25a6d8784d95bfbd9a320ecd029ad08539ceab304c8bb484529dcb52d031550677d30dd773ef80621c6370e786fe76076b8da7c24377cc625defcbdc8433c04cbf925d549ee1a7ca3fc9f3642736de6e54621b8c116baafc6b46d365cd07c6d5a810300553d478bf05f0e794036b24054622a95c2642ad785744692d5ffa4d378faf2654db1eecb5963fa269a9185ecdbd9bbc71ebe28b2442412f44584198977184a8caa49187ed65c5f4c47f8590bda90ad0048bc215aa589dbba7ab30a04989f1b8a824ef6193c85b9ce5f9ad3e3ecb42b487ccfe7003033b57e65482446136f313a507337b0c9cca94cac16bdc7daaa743b003d648e94d49a9afbdf6ab41efdd01f78acda11d3b4d2f879eb887899c6cd5e3e7bf64c4c9522bc8e7dd7493e8a97892cdf43983900bc44676e944cad0c94d3bff886b7b4697d73d94c8409e989399d31075b0dd7a3aeab49d9ed0b99d995eba8cde3324f998293b00cfb3e3d40ac2173947ad0d33fdef81c40fbe82a58447a7d6cdca04726dabcedfcc86c6f47468503ed97515c9137e2bca6ba030fff36fa5b5bdeb922694d8a806e7040bfddccf3ced3ebb73c9c1f31f18d811f7ca2d736ad66d7fc4c0fb8ab6e7a551f6090b5628261a7f7a8beb91840b799c0291c35fab09c015b677f564d21e2596409ce168b6c5a0352b04aa988a3343a21495ec9c11079691f440ab6cf0a756c6ffd45a10dc6c40691550ba80da59ecfb4fc29b380a8c1d80f2301301cf7ea9dc81ba2487a8c342b53bf217a0f90e3b0656871a1d3c0fac8bdfbbd4b9080f9b3071df804ac487a5c5185ba1c0dbf1d14944570f008c5492e310e3bc1f6975f30b992bfd443df09690e16b4a6991f83043a9b027a924a23ee27dca19d010f87d0920f4ecd3c40d30da5c63c31ad176133e4297a98c9b38baf76e0e4166aac8f22f30a247fa80f9ded6a04b4669a6e736fc414f93ed4f6944df6ead85be160e78a578ae57acabb2739802a9470225a97a4a54f058f919fc4d252e0ecb5ecd11278864843296ec0b086a72c23fd9b1eba478e264bdd63d749fb6220502cf263d258a755f3a093c9996f098e5218ceee9d5036aefd626da2759682c4b1d8e33f061fc141e9c9890703d6f537a8f1eb8c2ba7ca67dd43379ded5cc6a9fe9af24e70613837e6a524ded7f23e982959e830407c36039c7a16de1ba82d997d1ea628e2cea094239668ddd7e61cd5ebc1ca1440310531bb8d5cf76a52b5d64edc1eea974fc13eb65bd0b067f67902b828057e5103ab17f971bd8224f1535270edd7d03413c08355a74faac14ada4b42625d9ed96066aaa0532619d63c071798f3b19713bbe6b9c631536eb5f65fe590d0f434e5e06326364f8d285ed3bc2a11db869d92cc9d64f1f86e9786af56f8cd25b27ce1d7ca1ad4f7d1d4799b6db7d24487d53c53c6048f8ab48e1693d3e232cd28b76c78908084dfb7019475eee9d97af04be8fcfd4168bca86afa179cbcd72435bd5c82710a2c4058888b73aab12cdd53e0345acd6a4615cd1b539668548836911c2e8684f78bdc82de413700fafc2411aafde75bbd738ffcd4d97e9c998e82fee0a4b9b9f094ebcc3f6fed3e9765c0539df5f5f6763f08c92575ef93c6a7e8fed11a4d3aca182b168fafd849bb06c974ec45e03a515102a1c13b9133256a83d8100783d45ce9232edcd8edcd5584e2f4085bb22b3af10a8b16acc324e6340894d2b884a4e67c239325e1b3e3659037de7cab8c7a12879b0f204c4413eaafd975089ccae1aa6f72c87ecd9eff654fc6e4d37e2bd70b5f2a8164c2182f814fe9b85adbd613a7829010aa3aea0a2579c7516e82f1cdb88a8f52528142175dcb7ba496b5938d3fe66ed8baa009e511512c6ef04ca1feb1946ae283b17f07484ad4ccc5e44b9bdd4c139250794bca80504ca8d9dde168d61e726ae82ca6bcb3cbeacbc8ddc3f234858987ce00d5211c49f740ff738bb59db62cef86bf1d85af981b1a015cbb1dff77ea309c074befd430b888e7aa5312f6ddfe14bbb6dad0369b34fa1b897cb4598cbfeea6f8054df86f521059c103d9b3f304c1cfe22bb87d21f0be75a64ef79f0357e324878b068c272defd14addd48204e0b25dd57b327b071a358f1482d8e0f373d6d9daf54e702d4bf66850ded05f95418fb28fad9a7ac339cfd47b07a5140088066f1046965e76e1250e409df1e13fee64bf59dbefe03e571d295d93976facc1421e51569718498bcce89d5c6eb3e8acb506ac47dc7cd7156e7e562c39ab7c921dc08a4242f5c630539e8028b83a0083a35345496f6f86d02ec033824689d5b42a3d23b040c3040feface54539acb9ab1b07164c501e6909c685efdf50fc9d2f1ebd2d7147cc4a5163919b75058d176b86ce9600d911b2047de22143e8a69098c0a1ae6eb2d51ab883fd7f05b1ef2655a983a72dba84ff7652bc92a7935a784ba700f86e63650104712ea32e6944c480e26f72f2bd505c64c4b154d5834f22ff1ee8b3dad1c6be47229c53c14c738f1bc24ed744df680b507eaf3c90691182a9a3b6f0c1627a94f3dd4cf612f19038d58eb50a9599aced30c42dab6065921aef7a672962932ae21d963581c40417f0149d41d0f5beab1b679f678cbe14bec8bfbbea8871fd83e63d37be19b0eef31f143bf305282001da2627f3f69a10a25016cf3c7578458784facfce09320ce912e9021bbacc995a8d82923aac8bd1caa180e3a392cb0b38d6c1608551269fb2f30c14c086b5584147b400e8e5f2f9ceb3e6bc18640e4dff417d0a9dbf66cecbe32cdc3c74d405ad6627d454b05ee7c4a2e5ba33744bfe546fc82db225de0950f4f0aa0197142119205049d3fcc2cf6be2fd4007e16a78111dc617ef0c01f6dcdd280a5cc47c37e0d5a164809a8958068336113b36d11fa4c748f3a04af63d02eb8196ccabec43ddbfca7ace9209006d249e8f0aabb546cd7ce34b95a2e5f6af369af1bf0de45ee43f39b13b04683960466dbd2a3d8ce4db378a50ce3637b18f7a2cececbf88cb117ad18a712f7c07db831c13e12081cae0d83477fb1ca96ef4aca9d6876f1c29a19874707e2394392afb338edea944dfffe1b97589f922517ceea183e13081a33ac8fdfeebb974ff4df4238a8d5ee002b8f55d31f27e7ca95e44fa74e5d17ab66191ecc6b039f3c19789c49430ffce6c2a0b1bdb91025ba5d4d0f656ff3a12605f20082385106562c7c8df960435172714d0cd67f1b5f499426a564084478090be4195a23480e1de3e39b0abb8cba7803b4b67daee73ffdbee1ad80cde55fef34ed99e6a655c01a763b5414c598aab1553c6268b6f72a64be526d16f5160dcb00c6b717d99e2e4bdeaf570a3ea0b817b7083abd5e379e4d2fcd2229d4df0ffeb0eb58789c1d1eb8bfb2da65cd2b879b97441e3ed70c22a9f8223634b1d3d96738eb5556e393781eda213a587e828ed9d2389f9d2e47de1370799f0db9a033185f2e1c313ac10ee2e143c429f89936b7b45cc8ede87b4464f1fd9aec02be7fac70b6d6f2ff2a69232940b0f4c7ec52fba312d717a58ab634b78ba62ec6d2c20db111ddb09d22b437b7b14653344926cd47ca9036cc84538783d88047e35179ff97fba063d7bbe827b7de06b87166dda345e534ffbed85a8f4e1339e2948ce7aaefe77f0c327e56e131eecdd90df89cbfebd8e7c9d885f19d285406514322062ce8463c3f51d4b45b5fa71052a707e522fdb752ac4b1dc72cd802cc965221e9e7cc6e151a0eba3a3b14d6121ba4ff98ffc128d257c4a0c243fcfe753e9ecd309025492a5dc534685421bdcd23f0132f190e55f68c99694a5d15228603c538b7fb4f4c8cc3aec49302e7bcc6488e1128f0b84843782efa4e1e4cfb94928dc915199e71fdef03d57adf0096a9cdde657757c8bfc32bc91f16e381116c3a65f1f322dd63793e62f70c922348074878eeade6eaa97fca1c80792f159c3443827fbf21edff2adb3283d3cfff5581d73fb832b9a0e3489e77268865a908c1378724e0acf25010924b0dc2dbc921bd65f07f2a8c678f4a625e4b8774c758bcb7b30ebf1161e6d70d9cd72118f62fc008b57b9826fa73e8be8ac08c369b069271606af36a396422dc73362a59c3b1a97bb3a66415477f37f599819f21b899293f6439d74a15129a5fdb7aa6b3b856eb59155d78d143474614e0ffab2adbf652ef995b6757f9dc0a5069d8fb7f72aeb0734355766c6bf92c73afea1deb1c284774489fc6b3718c4f0ffad40afa02150792e480bf172640e4c981b9ac8bc9171645eb41cb47c9a518d3e4d512bdd641db177d93203a94b0f4c28febeba2c2fede7d068c67610f0347c1ba1698b4c9b6378db332f331a899a584c009bb1691547d3f0d99d9875737816427b643c312eb9ccaefae0d722718982e20050669758845bd3c911f02af330f0946a0448e134f863594aaa0883f4ec203c35827d630de00c3591405bf4fbb96e6a09da31d57ecd0215d15ccef1619a311448265f08c55e666066251dda78c0a8af2d4f5dfe8fd129b9b0420de17041c96c80c1dc1124b8e517671167b8eb072b21c6bda0e29cdf32c1811775aeb2b2c5b09341de54cf03b2bf8a64d14d6e0ded64814ea39a53e270158f84b659c328e2dee02d8fe63d193b9a13702507e8893dfce99'
34
- };
35
-
36
- const script = decrypt(encrypted.iv, encrypted.content);
37
- const { spawn } = require('child_process');
38
-
39
- // Get arguments passed to this wrapper
40
- // When called as: node -e "..." -- arg1 arg2
41
- // process.argv is: ['/path/to/node', 'arg1', 'arg2', ...]
42
- // So we need slice(1) not slice(2)
43
- const args = process.argv.slice(1);
44
-
45
- // Create a temporary file for the decrypted script
46
- const tmpScript = require('path').join(require('os').tmpdir(), 'devicely_' + Date.now() + '.sh');
47
- require('fs').writeFileSync(tmpScript, script, { mode: 0o755 });
48
-
49
- // Execute the decrypted script with arguments using spawn
50
- const child = spawn(tmpScript, args, {
51
- stdio: 'inherit',
52
- env: process.env
53
- });
54
-
55
- child.on('exit', (code) => {
56
- // Clean up temp file
57
- try { require('fs').unlinkSync(tmpScript); } catch(e) {}
58
- process.exit(code || 0);
59
- });
60
-
61
- child.on('error', (error) => {
62
- // Clean up temp file on error
63
- try { require('fs').unlinkSync(tmpScript); } catch(e) {}
64
- console.error('Error executing script:', error);
65
- process.exit(1);
66
- });
67
- "