diff --git a/samples/README.md b/samples/README.md index 3068b98..a70572f 100644 --- a/samples/README.md +++ b/samples/README.md @@ -1,3 +1,12 @@ ### Welcome to the Samples section of Python Environments for Delphi applicaitons. Each one of the samples showcase the various use-cases that we can achieve using **PythonEnvironments**. + +- [Sample 00](https://github.com/Embarcadero/PythonEnviroments/tree/Update_Samples/samples/environments/deploy/sample_00_SimpleDeployable) +- [Sample 01](https://github.com/Embarcadero/PythonEnviroments/tree/Update_Samples/samples/environments/deploy/sample_01_ManuallyLoad) +- [Sample 02](https://github.com/Embarcadero/PythonEnviroments/tree/Update_Samples/samples/environments/deploy/sample_02_AutoLoad) +- [Sample 03](https://github.com/Embarcadero/PythonEnviroments/tree/Update_Samples/samples/environments/deploy/sample_03_ExtractPython) +- [Sample 04](https://github.com/Embarcadero/PythonEnviroments/tree/Update_Samples/samples/environments/deploy/sample_04_AsyncLoad) +- [Sample 05](https://github.com/Embarcadero/PythonEnviroments/tree/Update_Samples/samples/environments/deploy/sample_05_AsyncEvents) +- [Sample 06](https://github.com/Embarcadero/PythonEnviroments/tree/Update_Samples/samples/environments/deploy/sample_00_SimpleDeployable) +- [Sample 07](https://github.com/Embarcadero/PythonEnviroments/tree/Update_Samples/samples/environments/deploy/sample_06_SimpleAndroid) diff --git a/samples/environments/deploy/SimpleDeployable/environment_variable.png b/samples/environments/deploy/SimpleDeployable/environment_variable.png deleted file mode 100644 index 3a38bda..0000000 Binary files a/samples/environments/deploy/SimpleDeployable/environment_variable.png and /dev/null differ diff --git a/samples/environments/deploy/SimpleDeployable/SimpleDeployable.dpr b/samples/environments/deploy/sample_00_SimpleDeployable/SimpleDeployable.dpr similarity index 100% rename from samples/environments/deploy/SimpleDeployable/SimpleDeployable.dpr rename to samples/environments/deploy/sample_00_SimpleDeployable/SimpleDeployable.dpr diff --git a/samples/environments/deploy/SimpleDeployable/SimpleDeployable.dproj b/samples/environments/deploy/sample_00_SimpleDeployable/SimpleDeployable.dproj similarity index 100% rename from samples/environments/deploy/SimpleDeployable/SimpleDeployable.dproj rename to samples/environments/deploy/sample_00_SimpleDeployable/SimpleDeployable.dproj diff --git a/samples/environments/deploy/SimpleDeployable/Unit1.fmx b/samples/environments/deploy/sample_00_SimpleDeployable/Unit1.fmx similarity index 53% rename from samples/environments/deploy/SimpleDeployable/Unit1.fmx rename to samples/environments/deploy/sample_00_SimpleDeployable/Unit1.fmx index bff27ef..bf284fa 100644 --- a/samples/environments/deploy/SimpleDeployable/Unit1.fmx +++ b/samples/environments/deploy/sample_00_SimpleDeployable/Unit1.fmx @@ -2,8 +2,8 @@ object Form1: TForm1 Left = 0 Top = 0 Caption = 'Simple Deployable' - ClientHeight = 349 - ClientWidth = 567 + ClientHeight = 348 + ClientWidth = 568 Position = MainFormCenter FormFactor.Width = 320 FormFactor.Height = 480 @@ -12,1005 +12,20 @@ object Form1: TForm1 DesignerMasterStyle = 0 object TabControl1: TTabControl Align = Client - Size.Width = 567.000000000000000000 - Size.Height = 349.000000000000000000 + Size.Width = 568.000000000000000000 + Size.Height = 348.000000000000000000 Size.PlatformDefault = False - TabIndex = 0 + TabIndex = 2 TabOrder = 8 TabPosition = PlatformDefault Sizes = ( - 567s - 323s - 567s - 323s - 567s - 323s - 567s - 323s) + 568s + 322s + 568s + 322s + 568s + 322s) object TabItem1: TTabItem - CustomIcon = < - item - end> - IsSelected = True - Size.Width = 87.000000000000000000 - Size.Height = 26.000000000000000000 - Size.PlatformDefault = False - StyleLookup = '' - TabOrder = 0 - Text = 'Env. Variable' - ExplicitSize.cx = 87.000000000000000000 - ExplicitSize.cy = 26.000000000000000000 - object Image1: TImage - MultiResBitmap.Height = 285 - MultiResBitmap.Width = 628 - MultiResBitmap = < - item - Width = 628 - Height = 285 - PNG = { - 89504E470D0A1A0A0000000D49484452000002740000011D0806000000857AFA - C0000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 - 76FA49444154785EED9D07601CD59DFFBFB2C1851E538E4028865D630BD14220 - 781542094D32242226CAE52E4109654542910C38EDC45DFE410701035E512E27 - 8572268D084C44B104040821F1CAF4622183778D2160536CBA31EEFABFDF9BF7 - 76DFCEBED9BED2EEEAF7313FE6F532BB33FBD52B3355D137DF197A7FF56AAC58 - F9169E7B6B23DEF97408EF7EBA056B36806118866118862903AAFED6FFD4D0D3 - AFBE87817737E3CD8F875430C3300CC3300C532E8C797AD96AFCF53516730CC3 - 300CC330E5CA9881555BB07E138B3986611886619872650C8FCC310CC3300CC3 - 943763D491611886611886295358D0310CC3300CC394395527FEBFFB339E73FD - 97F756E098C8D3F0BDB50C6B3E7C071F6DD98CD5DB7E0E9BF69A86E7A67E19EF - EEBCA74AC9300CC3300CC30C171909BAB11B37A2F1E95E1CB5F449AC1FDA8207 - 3FFD183B8FDD0A7F5DFB31BE34615BD09E8A9DC68EC5A7071D83078F3C0D9BB7 - DE5AE5641886611886618A4DDA29571273E73DFC7FA81562EEF9F56BB14984AD - D9B219777FF2BE1473AF6C588775439BB141083DBCF028BEF5D0CD18B369A393 - 99611886611886293A6905DD194F2FC08E6F4520E41A3EDDB205F33E5C8D2F0A - 21F7E6C60D1858FF991475AB376FC6DB42C46D3F662C3E797D10272EBAD7C9CC - 300CC3300CC3149D94826EB7F756E04BAF3C2904DB26BCBC611DF6DF7A3CDED8 - B401F77CF2014ED96E472CFA6C0D9E5AF7290E1D3F111B8786F09A1079DB8F19 - 831D071E177957AA52ECECBDCB76F8E651936356BDD7E7544C76ECB2FD049C72 - D85EF2C8300CC3300C331A4929E8BEB2F4291CF2EA0B38E38D57D0F0C6CBF07F - EB741CBFED0E785688B8AB57AFC04BEBD6E0F58DEBF1D2C471F8D5EA3771F9AA - 7FE2AC9551D4DFFA6B7CF195275429C990983B64DF9DF1F84B6FE1EE45CB71EF - 93AF61D71D266424EA268E1B8B130FF9424CC0ADFE641D1E78EE0D7964188661 - 1886198DA41474FBBDF5AA3C0E5E792D6E3B7526BE704D3BA66C3D1EBF3CE75C - 194E9CD7D48435E39C4D10D71D1E90B6C72927620721026D6C35A60A93FF657B - BCF0DA7B3111B669CB105EFAE707D873D2B652B0310CC3300CC330999352D055 - 7DFCAE3C56FFEC12FCE0FEF9D27DE57B6FA1E1C6B9E8B960961479E43E62C2B6 - 32EEDDD7DFC0CE1F7E2CDD3B6E708E6E76DA763CC66D3516AB3EFE4C85387CF8 - E97AAC5DBF11DB8EDF3A360AB7FFEE3BE0B42FED139B92A5F0636BF6C0F613B7 - C6570FFC3C8EF4EF96346247479D878C4603099DAE66EFCF254DF392C83C4694 - E7CEC3300CC3300C530EA414742B373ABB559FFEF92F62C73DB61A27DD24E4B4 - C8A37575C4466CC19A5D2649F7E68DB41FD60E09B78D9B689B45225B8D1D836D - C66FA5DC55F8C2CEDBA2EFD97FCAA959125924F61E1B58894F3EDB28C39E8C38 - 825343A2ED08FFAE72F48FA672290D89362DF6A8CC6D441914F7747415F6D975 - 3B99678F49DBE2B30D9B6538D93F57AF91E9198661188661CA8194826EEC4EBB - 2917F0FD5DBF802F5DF10B7CBFF62BD27FE9F917604ED3D9D2BD618FDDE5F1DA - D52B70FE138F63E5037FC187DB7AAF872351B5F556C9556FDABC45883D47086E - DAEC4CC3D2742C4DCDBEBF667D4CEC7941828FF2E9D13F773E8A7BF56D67E490 - D2909FF2509DFFB2E3C49C3766300CC3300CC38C242905DDDB7BF871D7F7CEC6 - 53FD8B503F7E5B5C77E6597871FD6778E8F22BB1F0B6DFE2FA3FFE1E37FFF042 - AC7DFF7D994E5BF8F777E0B32F1CA04A4984A656376CDA8C5D7798A8421C682A - 9684DEA7EB939F614753A23492562C48F8DDF7F4EBD2CD53AE0CC3300CC3941B - 2905DDD3071C897FFEE5512C5F3C2084DC5AECFAC8DFF18FA79EC2EFAF0DE1DF - 77DC19E35085F9BFFB3DFC6FBE8DBFF73E80C1071FC6678F3E8E8F1EF91B9E99 - FA65554A2234E2B6FC9D4F70E0DECE9A38424F95AE78FF5339F549D0F4E86E3B - 39A2CF6BDD9D1B1283944F8B459A6ADD719B7169F36906DFF8002FAFF810DB4D - E4375D300CC3300C533E8CDDFFB87F7316C859F86C9B1DB0EB679F60C7556FE0 - FDCD9BF1D6A68D38769BEDF1FCFACFB07CE37A1C39713BFC73E3064CAC1A8303 - C74F90CFA2DB66CC58BC577334164F3D4A9592CC476B3760C3C62D38E6C03D30 - ED0B9F83FFF33BE285E5EF21AAA643B71E3B065FD8793B211721373EECB3DBF6 - 58FCFAFB78EF93F5729A74971D26E0A07D2661FB89E3F0EE479F61EF5DB7C7DB - 1FACC5C79F6DC4876B36E04BBE5D51B3F724B936EEA9E82A194E65EA746B376C - 4AF053795F3B784FD9966D276C85E797AF96F5300CC3300CC3940369DFE53A66 - A310710BFE07EBDF7C199F6CD9820F376FC26113B6C1FD6B3E94EF75F58F9B88 - B1427A550B4137AEAA0A5BED390D779E724E5EEF73A511BBAF4CFB3C9E7B7535 - 3F5F8E6118866118260D29A75C892D42983D36E347187BF0B1982804DBA4B15B - E1EF6BD72030717BACDB3284DDC76E8DBD449A095563F0D18147E72DE6188661 - 18866198EC483B4267B2F3AA37B0CF6018DBBDF90A3EFAE06DECBED5D6D8BCC3 - 2ED8B2F734BC38F528ACDEE50B2A657EF0081DC3300CC3304CE66425E8188661 - 18866198D223ED942BC3300CC3300C53DAB0A0631886611886297358D0310CC3 - 300CC394392CE8188661188661CA1C16740CC3300CC330650E0B3A8661188661 - 9832A76A48A0DC0CC3300CC3304C19C223740CC3300CC330650E0B3A86611886 - 61983287051DC3300CC3304C99C3828E6118866118A6CC6141C7300CC3300C53 - E6B0A0631886611886297358D0310CC3300CC394392CE8186604796EF97BCAC5 - 300CC330B9C3828E6118866118A6CC6141C7300CC3300C53E6B0A06318866118 - 86297358D0310CC3300CC394392CE8188661188661CA1C16740CC3300CC33065 - 0E0B3A8661188661983287051DC3300CC3304C99C3828E6118866118A6CC6141 - C7300CC3300C53E6540D09949B61461DEFAF59A75CB93369BB09CA953DF4EAAF - C326EFAC7C0CC3300C931B3C42C7300CC3300C53E6B0A0631886611886297358 - D0310CC3300CC394392CE81886291BFA9A03A8AAAA42201455210C53580AFF1D - 8B2214A8926536F7A9A02CE96B76F2F3F79E49C5080BBA3E3457358BFF6BB7F3 - A5D556DB617E7993E373BD38188671D1D79C706D79D9C8FEA0F4A1A7AB5FBAFA - BBEF173F934C39120D3982A92A10CAE2338C8BA2E27E07F93BC6942F25364217 - 40283204DA783B34D48B9A563FAA12549B193F84CE3A15CC3045E0AD952BF1FB - DFCE9347A614A8434370BA744D6F3C153EE962468E28FA42CD08C4FE28CF0CDF - A98D909F627F37EECF543145EF47B7D459D3D1786A313F79FE8E31E54BC682AE - B9B959B9529369BAF4D4A1331242A0AB27AB9B05C31482D5AB564931376EDC78 - 7924FFA860FA5C44D41F4C360BB78EEC4F5C5D67B824DAC10884C8BA7C56179C - F1AC2CF09D8A4647D161D69CCCEEEED1FBBB9D7AA637A2A87A4EC0DF31A65CC9 - 6A842E9D582B9C9853F866A031D0851E5674CC30F2E9A76BF0FBDFDD8E036B6A - 70C24927CB23F9299C61987CF1E15447D10119FDC1DE8739B31CD9C8A3660CE3 - 4DC682AEB3B3531EBD449B0ED7E98A4318AD7EBD9E27BB617E86C9844D9B36E1 - F6DB6EC35E7BED8D934EA9C7E73EF73979243F85533CC330F9119B7645067FB0 - F7F58854441097F1A819C37892D5089D97A82BAE980BA0DAAF9C096BE83AC14B - E89842F3E7F97761975D77C58C534FC3D8B16365181DC94FE114CF68DCBBF7F4 - 9A2AFD47571502CD21F4B9D649E91D7B89EB6393892D9E37D279EFF6D39BA6C4 - 3D82A2A2C2AFDA665D7C1F156D6D0E20A0D3A8BCB6F6C6C9ADBF0E96BC547F2C - 6F00CD097DB2941D107FC47AB6CD212AFBADCE9B2A37AB3665D09FD8E7E29FA5 - A65BBB506FE449F3B13AF85A7159D07176A551747D3D8E9C43B021E19E1FED0B - 2194700EC9A8BF7DA2273632FB8EA4DB519A7DBDC944FBC479767DF79A4399E7 - B791DD67EF407D49CCE37CCF3CBACE943A421C654D301894E676674FEF501041 - F17FED0E0C09C11627121A0AA48A67983C79EF93CFF2B67C78F6D5D5CA35C2F4 - 06E9158043983E7728F34B2C323477BAC823F2057BE36E4C9F3E345DBBA5896B - D82C54D715BBB66DD0F5EEE40F1A897A834ED8F4B9EE56EAF4D387E646E279A5 - B9FA14991B1C9A9E10EF6EAFAD7C22C7FE4ACCBCA27DCA3D5DE48DE713263B6B - 942DFA935836F5CF29D14D64AE5916E54BF427E7CBAD3FF2FCB9D348BF63E6E7 - 95923CBE07897D75CE63529B55DA38997D47BCBF63B9D66B9E672A3F5E86CC1F - CB2BCCE3FA4BD52622FBCF3EB11DEE3C5EF530A54D4E828ED0422E773147D045 - A52F00729B82CDB9E0E217B13B9E61F2C726D0B2B57CA81441A7F3260819F347 - 33E1573EF107CE8A477B32117441FAA172B7451313115446AFABAF91A15EE387 - 31B96DB9F69770E515F1095963F5EA1F56F1239CA0A252959D989FC4591CD1A7 - D80FB75B6CE4D31F4164AE1223A904592AE2E5DB8A9778883E1295C1A4CF4F90 - B2CD3A2EF57724B5A0CBA5DEF879B67EB68248AF3E97B6FCE9DA94C3671F3BAF - C9622F22FAE26E1F531EE42CE888FCC41C41178129E89C2FAD636EF1E68EC750 - 80D51D9327368196ADE543C909BA54E61257E60F95E78FBAE70FB2FAA1492AD3 - C1EB072CBDA04BAE2B4E3C8DED875113FF817497937B7F13F25AFB9C28AEAC02 - C7B3EC78BFECC2285E76627C3EFD11E42DE8A87855BFBDE1293EEF14E836279D - E74CBE2339D64978D66B9E67FB68992476AE93D364F2BDCFE6B38F7DC73DCE3B - 539EE4F51CBAFCD7CCD5A133B6168EDC7A7D1CD942B424AC7F75C70F61616202 - 86614688E9736727AC6F8AE19FA616BF2FC62BC6BA9CD4CF22A387BBD231B767 - 8E79B6452FAE9F3E17B7A7585CEF6BBD0CE24752E0BD603FDBFE9AD8776A1A3B - 3F45ED0DB6C26365BB30FA35DBDAA878D95EEBD5F2E94F3ED4353867DABEDB35 - C7EF816E73FF12446440329EFDCD870CEA45F032787EF5EA6643882F413F9678 - 16E0A2009F3D5339E425E81886A930523D872EDCEAF9C888830EF088F11D8083 - 943301E35964DD6E4517FB91CAED99635E6D892DAE3FE800CF7E38D0C3651DD7 - 620F1593757F0D3CF36AA64F436C1F9849ACEC4471A5FB95EA911EBE0354AB16 - BF625D789F4F7FF2222662BA70B96B257E34747906DF8328FAFAFA100A35A359 - 6E7209189B35BC49FB19A425B77AA74FB37EB20A1FE21F93FD7BE726D7CF3EF6 - 0755577DDA8D134CF9C0828E619811203E72E07EC592FE910A5EE62D20BD998E - 94BF9982D43FAA0EFE69AA6D190F951490B482D3248A57163BAEFE59FE84DD8A - 0956AFC46CC9E1F53D88E27EE7D51076B112DBA1EA477D7D3D66CDEA4257573F - FAFBFB31DD292E05E9BF239EE4556F7A2199DDF72E8FCFDED78ADB7B8352D4F5 - 77CD423D3D0E8C76B7B2B22B6B58D031A39E97577C94B331B9139BDA4C9876D5 - D36C1ED38EC34C26E2AF74982E44451A2BEA705B6E58A7DF63AFFAB23D7B4E88 - 2A7F3DE42B57A70731B737824824121B490EDF3ED729AFE08C54BD9960F9ACDD - E6FAEC7D759D088BF6F706451C05F4776156BD108659BD6397292558D0310C33 - 42E8A94D63DA554FB7BA9E3936DC4496A49B3C2B15E2D374D3E7DE8E70389CDA - 3A7319F52C3296E9F7D8ABBE2CDF83D8546CB01743E14EB4D6F9E0F315BF57C3 - 51AFFEDE65F68744013E7BD17E7AD559784888D3B9CE881DFA67C19FD1C30499 - 5283051DC33023865E14EF4CB74511BA9C7E32A763AE7D85775E24D6958AFC36 - 650C37233A3D5C10DCD3AEF1E9D6A06598568B1E5B9C24B224ED5AB65C2844BD - A9D7C6E9EF5DE66BFC0AF7D90B71DADA8970AF5A3CCAEF502F4B58D0310C3372 - D43518D3AE6A9AAD582F608FD5350B67A678147E668BF14B87F802F7CBCBF609 - FF09D3AE7DF1E9D654D3EE7671A4FF28281EF9D4DB3F6B8EA7508A7FEFBC76AC - 2653F0CFDE6B27355316B0A063186604894FBB2E99E38C7014EF05EC7598ED6C - A9948BC80349AF5AA2575F05E0972F829F8EB9B797E0F4A48DD86BB4FA31CB1F - B02E6C775E0B152AECA84B6C072C3DDE254F3561F4A1FB72EFE95622362A45E2 - 28A15AF1F935FBA1DEE35F700A536F17EA935EE1667EEF44B7B3D90C94E3674F - AF78EB8BBAD38A76CC513B754778C903931B2CE818868943EB676C3BE5B41561 - C174DD6C67317957178D4F14F705ECBED63022315157EFF435408F9DA0FEF951 - AFC45CB037ECFDBCB012A4AE33127B86995CD82EFA458FD2D0EF0BF5CBC5FC4B - 64DAC2117FBC4B975C4CEFD497EBF2ABD89478BFF319784DBB9BCF097476671A - 9F5F97C8D75B9CCD0985A837D8DB8B60BFCA4FEF5A1565C4BF77343817416796 - 4A2AA7CF7E09B541ED8C9569553BE4106110BDD93682290958D0310C33B2C416 - C50B8661648044DD50A4177363BBFBE8B113E2483B0183BD8844C259FFA88E3C - 3EB4868710A14751A87349C288FA453B1C8373A95F9D053FB724266897A444D6 - 371DD31C5FF6E8297122E574373D645E8818D7E7373D3817BDE2B36B2DDAC6E4 - 42D41B2F431420F22B21375D88A8C810C239FD1591FD67EF6F988B207DDFC923 - D3CAC44EDAD8C3FE9972A36A88F65B33CC28E5FD35EBF27AFCC8D43D77C4A4ED - 26285FF63CB7FC3D1C367967E56318866198DC28F311BA3E34D390B161B51D19 - 4E08F5353B796A3B729C42A2BA6B91BEBA5CDA98AAEC4CEB651886611866B450 - 0153AE018422FAF544BDA869F5A32AED220E218AEABBE8BDC4185AD8528085CF - E94496D9467E072DC3300CC33085A5C2D6D0D5A133124220A367E804505D4E0F - 81671886611886F1A0F23645F866A03140DBE8953FDA81DAD87467B3107A349A - 568F2ED022D6F8F4675FB3312D1A1BE1738FBCD946E212CB4B3F3A6890D0B614 - BBC38C74B51D4B55A022A97F84D3CEE6E65A151645476D06F5300CC3300C5396 - 54F82E57216CFCDD68D4D39DBD407B871F9DC21154D3A07AFAB3AE534F898AB8 - AEF62CD6A8D1AEA5787943D6ED714AEC25082A6A5B2B6A68DA97EA8D8430506F - 9BB64D4C370FDD423C6A6CFDD3058431503D4F8477A2AE6F0E5A6B7A9D34C278 - 473AC3300CC35416152AE8D4746A7429064C3155DF85F0A0C72B52F4260939DA - 566812D7D0494125DB663C09DDD782B6601849CDA3748150ECC9E1BE96B6F8D6 - FE94FD0BA071865AABE7AF46A0AB3EF30D230CC3300CC394159527E8A20BD01D - AEC194D8BE83207A959092661B9EA269CB7AA8741184022ABC2CC8A07F422C2E - 1471F3D0648C10320CC3300C53295498A0D3D393EAC188BE29A84197310DE941 - 6410E14035E41E09290865A8C08FEA80316AD6D753B8D13BD53673AD5F7B97E5 - DD85942EDC8A392A5DB4A33DDE864CFBA7F0B52C4444A8D581A53C52C7300CC3 - 30954405083A737D5A3BAA23E61A3167D7AB48A0E285D986A7EA66238456E735 - 404D83A8898DD0F9D0D2164457BDCADB43E36136E81538D96E8A70DA36A0CB96 - 6BE16C4FE816E97AE36D6842A3D1860CFB179B4EAE82BFB5066DFCD814866118 - 86A928F84D11CCA886DF14C1300CC3540215BECB956118866118A6F26141C730 - 0CC3300C53E6B0A06318866118862973780D1D33AAE13574C5876F310CC330A9 - A14D8BF9C223740CC3640C89B36C8D611886494D21EE992CE81886B162DE60F2 - BDD1300CC3309991EBBD97051DC33031B2BD81300CC330C52793FB320B3A8661 - 242CE21886614A9B54C28E374530A39AD1B629822FF7D2823F0F66B452884D00 - 8C833E973C42C730A300120EC5120FBA6CB6EC8D61462BB6EB61B45ABEE87286 - 5DD03537374B2B2C5174D4AA779992D57688906122DA81DAAA5A38EFC7EF43B3 - 762784970A46FB12A070E3FC09CBF895B4B95092E7A672C9F786A16F165EC630 - 0CC3E44EA1EEABC32EE83A3B3BE5B160A24E8A033F06DB8C93310F58504C4162 - E26BC1C2A185487ADFBD5778C9124028A2CE5F6F105DF5CD42E61589B23B37E5 - 4BAE3786D8B594637E6678303F2736B6E134A6B8E4729E4764CAB570A22E8A8E - A656D4F40EA1B34E05114230B4987E263BEA1A10C40096F208DAA8A3126FD6BA - 4F95680C3352D8BE8FE562E54436ED1EB13574051175D105E80E07D1904ABCC9 - 113CDB54A29A7EEC8BC7535CB4A33696B6363627989C3629CE3A8DA9C395BBA3 - D952B6C068636D47874779A29466278DB45847B2297BA90A4C435F0FBA028D98 - 2147D0DCFDCBB45F19C4A52D4390E1B96112C9E6C695E90DC34C574E564C1EF8 - E156D8EAE8EB335CE211C5F5476F85A3AF4F9D5A96F9C30794AFBCB17D1E6C85 - 3126776CE773A42D13D2A51DD14D11051175816AF89533192116FCCE089E3C11 - 911006EA4D4110466B3B308FE2E43463159A30CF492BFCE1D639A2048D915694 - 83D6A62C8585C83FD860293BB18DF3D08D2E199E4C5DA7936668A817C1AEF6C4 - 7EE459B62CC3EF08A7AA1E51D6C216643623EA5537912ACEA410ED6708790E85 - 654252DA07CEC3D8B16313EDBCBEACCA2C3562824BF5C16D7DE78978A38FD99B - AA2829DC662AADC01EAF4D26708595A731C5C376BED932B352249B367AA51951 - 4147E42DEAC28388286712D1A518803182E76B415B308CC158860042F3947091 - D38C01343AC352966947236D52399920F2CF560D31CBA6360642D051BE963611 - E7419F1EC5AA77099B02944D65D01A3A2156035D3D1EC2CB8647DD9254712685 - 68FFE826939B80C696F681F384789B012CD8BC199B366D52763FCE55F1263A7F - 3616BDFEE894C2AA5876F2D7CF01FAEF44EF32D5F8041EC03D3703E77CE314E5 - CF9E537EBD111B1FBF10FB2B7FB9613B676C6C64958CADBF236936D2C513EEB8 - 1117745AC8752A619715BE19680C74A12773F55120A2583AA09CC3054D3DD603 - BDF2038E201450E1854688D579A101B4F3BC66D990EA8277634FFB007A7E039C - 7BFFAF717242FC29F8F5AF1DB1A36F2CD9D455129CF20D9C837EDCB9209AD007 - 697DF7E06611FBF5935DE1C5346A932DDC34D9704B78118C61BCB07D5F2AC54A - 8D746DCB346E44055D5E624EE2434B9B33559AF0980D217E3AC8EF9B821A1882 - 4F84B777A55973E74918DDE2474192C9DABD4CA136865B3147B531DAD16E9F56 - 8C0C22ACA79765FD3234359996ED8246C26A6253CA7E54078CD1485A5FA79C45 - 27C7F68F26BC2E7237A96E089A01CBF0A9CEF7C00FB7C6D696755DCB6EF82AB6 - FEAA1A798B5E8FAF6E2DD26993E1515CFFD5AD31F5E27EA0FF624C8D853BE546 - AF17F96379BE8AEBA34E38599FACB32F318DF027E7FB21FA549E643B19975C3B - 1DFD77F52271906E196EB8F2664CBFF612215BC97B038E19370EE362F6232173 - E32CBBE1188C3BE6062C7BE04709F10FFC48B87F64A44C538E469697260DA1FB - 114D487F0C6E30CED350D455A768E7708F84B2B1B9AD94B1B577382D15A9D2A4 - CA4B712326E8F217738ABA4EB5364EADFF226B026648B155874E33CEDF8DC648 - A708CD85006A069B5439B4AE2BD772DC8836F63AA294CA6E42A37D5AB16E3642 - 68855FF66F1035198DD06558761275982D9709D2F3FCE2A259F6BD07C338ED99 - 6BFB4707E96E0C9A743701123DBFBEFF5CA1B7A6264D8B6AE4D4E5CDF7B88453 - 1FAE1142ED9C9FD194E303F8D1B44B70E0BD1BB0618363F79E4139F7C7857FDB - 8025425409F5842514F737678A92C4D0B4BBCE70C2C8EE3D10974C73899B9BBF - 8EB3700BD6AF5F2FEC5E9C23FC245AE26183B876FACDF8BA1055F17625DAE453 - 66E2A8FE3BB120B2055BB6288B2CC09DFD4761E62993A53FB26010335F5A8775 - EB1CBBE76C51A6108FB1F4A21CF45F8269F79CA6D2DC8893443805D3FF74BA74 - E538C54CC30F866E4E4C23446EC448A3CBA4F63FF0A3F1A8BE73265E52E9D7DD - 538D4BAAC57912714343E2BC575F82EA7B8C3A67269F835C4DB79BADFCCCF679 - 0EA7D9DA542E66EB8F69F9622B539BC61646D8C23423F2EAAF8289B961837662 - B6A33A320CCF4EA3A955FF20DA860A25182B88229C9B727EF5572697AE571A5B - F8D05014377C752A68300D3807F7AEBF0927CB1862196E3CB61A77CE7C098F5D - A0568C3D783E265C390D2F3D7601F65F76238E3DF02E9CF1D263D0D126CB6E3C - 16070AF126D33A0196F454C78158F2B375B84954FCE0F913F08D97AE89E711C8 - B05BCEC63DEBE26D4B2ADB05F5EBC6E36A307FE600FEAA2A5B76E371A8993F13 - 037FB5E7C18317606203D0F3D98DB21E997EF68131BFE6C10B26A2013DF8EC46 - 33D420A11CD13FD18ED907BAD28B73715CCD7CCC1CF8AB3C170965BAE21C9C72 - 5EFEE967B8D1678B4FCD3B1FAD55AEE233023F2FC306FD91C9942755E25FA961 - FD3EA9301D674B63860DFB085DF989B9E1A56F4E6B7C6A954980CF4D9C5CC51C - 85B9C3E361FBE382BF6D90235FF79E7333BE3E7E3CCE7F50C7EF8753661E8545 - 77F50939E1F0E0BDB7E0A833EAB01FC5EF773E7E7AF6225C7AE0044C38D636E5 - 47390C7F640916897F32FD046D07E2D245C04B4BD57A37CA72A0CF295FD9FE53 - 8F028E9A8AFD8DB0FD7C072696ED32EA571DB57DBE6EFB32F4CD5F84B37F7A41 - 42D95121DA264E9CE858C32DB24C11E1C4533657BD643242268B87A52AC72966 - FF84F443FBF9512DCEC512358D9A5066D4394FB36B5479D28428A4F31411E789 - CEFB592AFEB81B4B6EAAB592B1F597AD342C1D22D588FEB3616D3FB98DF0A478 - 8119C62FE7CF88628ED0D16BCBFC688DAD890BA29747E714C53F37E53A4297EE - B2B5C5BBC3DC7E9A6A30A1755B075E7A606C348CA6F72E98F82B4C95A3410F1A - 6E27BD468E30918E393B3E12953422668C5C9DE4D197872ED8468E54ADBDF124 - 1522CAB9E9781C24CA59FCE8F9F191B5872EC036BF9A961896C443B8609B5F61 - DAE247713E6EC2F1072DC14FD78ABA63710DB8F5A839F132A84C6A9F4A63AD57 - F0A068E3E9F8333EBD81523D840BB73D5D9473355E7C449773214410FEFCE90D - A29C65B8E96B07E3EE6FBE8847CE374B71F28944A0621EBA70DB789909F95323 - F3DD2A1C67E9F6304C7952EEA39FB9B6DF9DCFCBEF3E6A467C976B795087CEA2 - BDAACA879685A6FA66311787CF8D0DB71073638B8F9F43C7DCEB444C31A7C3F6 - F7D3C857DC0F21EB4E3B6B11E6F74531F4E0BDB8E5AC9FE2FCFDE265683BE986 - B558BB780E8EBAE557B8512FDE972519EDD87F2A8EC22DB8F7C1D47D216279A4 - C9900CC2DC7662ACEDD1BEF95874D6693851C789BEDC8AB3F0E7477E141BB18B - 2E1DA4428DFCF63A1278E83E554E5CF42D8BBC248FB132842D7AD9B5E3765904 - 2FE1CB98BABFF23B391CB7384F5F16A5DE27CE53421E8B9D78FD1AAC79F16A7C - F9D65FE1A665F6346C6CA562A9B0A51F4ECB175B99A94C93895F1FDD71040B3A - 86A920DC1738A1C59BC6EDA691B7F38F8D4FD739E151DC70E52DC0D9A7C91134 - 279D106B5F3F0B8BE6CFC505BF12D2E5B41363E143D11B71C18D8650915385F1 - 1BCF7EBE6AA16496C4A704F7FB117E7216706BC305785087D15AB70B8C6943A7 - 252ACE31F2CB08234C07278625DB89A752DB4308CD5F84B34E35DAEE164DCB6E - C2B93FA6D653914E98ACC0568793CA715BCB79221EAFD3DFFA4D5C181368CB70 - D3B93FC6133FF8317E3859875116E59EFC43FCF80794E542E33C893C17DE8465 - E416755C78D332152E2CB204B2C6585A3636B67232C2CB6F739BF77716740C53 - 269817B20D779CBED835667ED34D0CF55F8203636BD926C8755AF3672EC65A35 - 75A7D30F9DD88AAB876EC5AD4357A3F544154626D2BCF4E383B1EDB6DB3A76FA - 4BB8FAC587F1233D8247F9BE7C2B4EA7B8E31D3142234A779FA5C2A41D8CF953 - 4F89AF6B736A8ED721CD164681C9614976E20CFCE009D1765C8516B3ED423475 - 5D25A4D837B7C376DB093B77085DF3858A4A28D35EAF0C17FFA3F3BC65DFF3D0 - E92AA75396E3A4A1F4C497AF9A8FA9576F8FEDB7273B043FA99E8F8F3BE20253 - A3FD27767C8CF93FB80D33657A27CFDD534FC664190F0CFEE410152E6CE620AE - 7AFE2F86382CAEC97EB359CD76BED8D8B2317D1FD0B8DD661AFACEF11A3A6654 - 532E6BE8D25DA666BC76DBC28874EED461AFAA75602FE0E11FEDA7C28A8BD99E - E1866E9295CC489E5B263FDCEBA72A8962F72D5DF9C37D6E757D66BD3677DA78 - 7141F315CD8C5ACA41D0A5BB4429DE9DC6F4A773D3885C3AD6AC59E3A47FF57F - 70C2212FE3C79F5C1F5BA46F9669235D7C3AF2CD9F0F2359772128F7F633B963 - FEE0971B23DDF662D7EF2E3F26C88C707758AA3882DC2CE898514D390B3A1DEE - 8E37FDE9DC5E4782DCDA1CFF32FCFAA4C3F0E7D39FC3433F8C8FCE99798A4131 - CB2F76DB8B4DB9B79F295D4CB1506A14BB6D2355BE0E1F33C6590DA7FD667A77 - 58429CB821F01D8119B594BAA0F3BA3C75B83BDECB6F86BBC36C476DDAFFEAAF - 4FC2613F7D02F8FE9DF83074A20CD7E874B9926FFE7C18C9BA8991AE3F5FCABD - FDC5C4FCA1AD444AB97FC56E5BBEE57BE5D7E1E6519BF6A73C8A0B92AF4866D4 - 528E824E87A58A236CE9DC61E6D1341D96EA58280A5D9E9B62965FEA6D2F76FB - 98D245FFC8972A7A146A24C8F7DC14FADC260933CBD16BD4CE3C5688A0733D80 - 36104264610B8AFD96AE52A2AFB90AF59637D70742112CCCFA017AE6839487F1 - B5672340B9093AD39F495CAA303A6AB75EFC6F8BF33A664AB6E9B3A5981B178A - DDF6748C74FDC5A69CFBA77F482B9591EC5FB1EBCEB7FC74F9B32D5FA7B71DBD - E248E02585C9FF9733F47ECF2A3F06DB8C118679C0823E155F5190B8AA454754 - 790DEA3A75FF7B114400A188E3CF5ECC31A54AA63F7EB6743A4C1F49049191DF - 1473E94CE71B4EDBBC79734AB3B53353B3D5679A2D4F36662B331BB3955948B3 - D5399C666B53B998AD3FC369B63615D26C756663B63233355B79A6D9F26463B6 - 324DB3E531CD96A71066D661BB27EB3042E7217458990BBA283A9A5A51D33B84 - 4EF31502BE16B4F02B05980A425FB09A747E4287E9A3BE61E823611E6D6E7DD3 - D0A6E3CAC9DC7D30CD96DE345B9E6CCC5666366613B085345B9B2BC56CFDCDC6 - 6C659692D9DA9C8DD9CA1C4EB37DDF33355B79A6D9F2948379B59F70BB3566FA - F29E72A5D139FF20DA52BD124AA669859E8D0DC6C49F9A4AEC6D4477BD134F71 - B397D6C2AFE66EE3D395C96913A632D3D511AA416BAB331FEA9D4FBFA7D42B4F - 4484D72336AB1AECC550828AD5A8FC7A8AD4B36D8274ED36A75C3DFA9E30D51B - 6B93934774095D5D3525FD6EDA729872B55DA2EE30ED37C3B55B5FF0847974BB - 4D3FE559B76E1D3EF8E003AC5DBB169F7EFA29366DDA24E3DDE87C2305B5B55C - 19E973C730B9A2A7F9CA91746D2F76DFBCCA1F376E1C264E9C281FB4BED34E3B - C9474AE9A9559D27A55BDC50CAF78E4282A40998E7B95E8E84453D84A270848A - 1430DD688C09152190F47ABBBE6654096512132BD24F59B5C832D25ACA495987 - 163A49651AC24BC4D52E9D1D176E99E4B162A649DF36EFB8C432EC7D97152A92 - F30C98E2B544297541E72556CCCBD6E6D6479D9FFC669CDBADFD5AFCAD5AB50A - CBDF588907967C84C8EA0D58FEFE46BCBF76B34CC3300CC3149E49DB8CC5E449 - 5BC3BFCB389C3C75074CDE6B0FECB6DB6E31E1E636C27497FF1ABAF02022CA99 - 447429061044030916C2D782B6601883B10C0184E6293158D720D79E35CE5002 - 44FA07B034B65ECD486B9693491DB355A459A6CC1746AB5F7D38424C8663993C - F2644BAAB6A56DB78947DF09129CF20B25449F0A7230CE259313998839131D6E - 8A33C24C4F6E339D695ACCBDFEFAEB981F8E62CE5FDFC51DCF7F8C67DE5CC762 - 8E6118A6C8D07D96EEB774DFBDFAD15598DF1FC5B265CB62F766F33E4DA6D1EE - F21674BE19680C74A167D8374044B1744039F382A6598D1F55395456EA187DA7 - D13A39C847ED8F201450E14CDE78893937E6456DA2C3CDA39996DCE68DE1E167 - 164BBBFF6FFDB8F9E101742D7A0F2FBDBD5EA566188661869325EFAEC76F16BD - 8FFF7BEC65DCF7B770EC1EFDC83303F8CBD38B95BD88878491FBA1A75E2CF711 - 3A1F5ADA82E8AAAF42B329EA84D0E820BF6F0A6A60083E11DEDE658C4A654518 - DD0BD430597401BAC3AA9C5CEB50F9DA6D5B560B45AAB665D56E8FBE4706110E - 54C31F0B2707932FA6F0CA149D470B34B30CB75B0B39EDD7B6E37693F0FE9ACD - 7861D558ACB32F97631886618609BA0FD3FDF8C335CEFD7997CFED8E9D27ED8E - 5D62F67919B6CBCE9FC7AE3BEF510153AE759D188A843020449D9E4BAE6A0266 - 486152874E334EAEFDCA75817E0035834DAA1CDA59ABCBC9B50E271F5AFDF176 - 27A8521B756808AA69DAB46989546DCBA6DD1E7DAF9B8D105AE1A7F0A641D4F0 - 085DDE68A1E58519EF4EAB8599C674BB87E9B53B6EC0A79F7C841756AC43F43D - 56730CC330A500DD8F17BFB54EDE9FC59D9A6EDE09F76E09B9C53F7E53444698 - 0BFE5510531194D2A6087D29A6BA24CD3833BD36EDD7C754A6D390D8A361FCA1 - 0D9B705BFFBB78FEED8D328E61188619790EDD7D6B9C35FD5FB0CBE7BF80AA2A - DA0891F850616DE53F42C73015801658A9B0A531C5990D1DEF4E437E1272E6C8 - DDFACFD6E2AD35BCF9816118A694785BDC9737ACFF4CDDABE9FE2DEEDBE2DEED - 86051DC38C306EB195095A84B9D161E63A390DF9DD222E66E2DF96CD9BF1CE9A - CC366368F6FDE41DCC5AFA30E63D712B7EF3C855B8E62F57E0E2C76FC2594B1E - C43E228E611886C98FB7C57D79D3C68DC63D5BDCCFE99FEB7ECE822E23EAD039 - C4D3AD4CE1A18B305BF4C5ABDDE69130C3B469BF0D334DA66CB579232E1542EE - D6677E8F93573C8FE757BD867736AC47DFC7EF63EB4FDEC5E7968571F63F3A71 - EECB0FCAB40CC3304CEE88BB34DDACADF76A7D0F6741C730234436224AA7CD24 - 8F2D8D6D54CE1CAD13FF736E18194002EDEA17EFC6D757BE8817D6AF056DA158 - B36533EEFEE47D7C69C2B67865C33AAC1BDA8C8D435BB0B310763F79BE1B6337 - F3460B8661987CD0F76AE7BE2D9C86C8236341C7302380BC302D78856782BEA8 - 4D320FCBBCEE8B963D863DDE7F0D3439FBA9B8B1CCFB7035BE2884DC9B1B3760 - 60FD6752D4ADDEBC196F6FDA88EDC78CC596B723685AFAB09399611886C91A7D - DFD6F769C72D9D3152EE72FDE0D30DCAC53095092D2E1D895DAEFAB273BFFACB - EB72D4E1A98EA6E930AF91397718ED725DF7D147F8F9C36B645E2F685D5CE7D3 - BF4374E33A6C852AEC28045BC707EF602771DC6DABADB060CD47F8CA36DBE328 - 3552B775D5184CDE7A1C68ABC5CD5F69C6EBDBFF8B5390816FF71DD0D7568FED - 278E5321C035F7BC806BEE7D41F91C28DD9F7F7232DAFEF094F45FF5BD2FE327 - BF7D02F73CF59AF4DB30F3E874B6B07C7940B4FF9FABD720F8BF8FAB10E0D2AF - 1F82130EDE13A7B4F7AA106FBE71C4BE69FB93AADDC5E813C30C176FDF72A672 - A566F7B36F57AED280DA9DAE4D99A4C9842B4ED80E5F987C80B3A3D578BFEB18 - 61C2E1B8555A866198B4D034EBA1AFBE8033DE78050D6FBC0CFFB74EC7F1DBEE - 8067D77D8AAB57AFC04BEBD6E0F58DEBF1921067BF5AFD262E5FF54F9CB5328A - 19B7FE1A27AC48146826EB366E46B3104374E323738B3937245AA65EF4277924 - 31B378EEB7A4281A291E7E7105F6DE653BE573203147E19960F687614623FADA - F7B25284DA954A8C164ACC650A0B3A86196668442C17743E5B7E3DD2A621776C - 7D9C42A7318DD2C87419AE9F3BF88337E471F0CA6B71DBA933F1856BDA3165EB - F1F8E539E7CA70E2BCA626AC19B7B5745F777840DA1EA79C883D56BD2AC32A91 - C85B1F61CF9DB795E292A0E36E3B4E44CF93CBA59F6198CAC44BD41543CCE9FB - B6F85FFC1EAEFC040B3A86613266FCDAD5F258FDB34BF083FBE74BF795EFBD85 - 861BE7A2E7825952E491FB8809DBCAB8775F7F033B7FF8B174EFBA25F574AE0D - 1A755BFEEB7F9337C7F6EF1CA9421DC144A372E79D542DA76B77DD61223ACFFB - AA9CFACC86CF6D3B1E8BAE3C5D964F46D3A484596FE4C67F95F5E93AFFF29F33 - 62619AC707DFC2A7EB36A1E1C8C9D24FC7773FFA0CD1B73F966DD2E5EBF6B9CB - 3ABE668F8451465B1ECD5153768BB5AD4BF4D986ADFD0CC31407B7A823F7708E - CC6958D0310C93312B373ABB559FFEF92F62C73DB672D6BE9190D322EF8D4DCE - FADB8DD88235BB4C92EECD1BBD1F5A3C61EBB15290990284EC9AA6A37053DF4B - F2E6F8F1671BB0DD0467E44FF3D6076B51D7DE8B551F7F26A76C3359AF6672F6 - D7A6E2C34FD7CBF2C968AA97EA6DFFB723D07A6B5886753EB4043F6E3854A6A7 - 762E7FF713F82FB8438A35CD07A28C175F7F0F53F6D851FACDE9566A1395F395 - FFE891A3785AB49965D1FA3B9354798EABD9135FBC74BEECEF57AB3F1F8BD3A4 - 6A3F53B9D0B5938931C581AE357D8EC93D1294B9A07B00B3B61B8F4986CD7A48 - 4565CBAB37E0E4ED8EC1FF56C8ACD0C3178DC7C9372D533EC543E763D2450F28 - 4F1A323A1F74FEBDD2A48A63B2450EB3BB880DB96F893F0C58A733D3EB343ABD - 0E33DDE27F317F2A366F17DFC0F1FD5DBF802F5DF10B7CBFF62BD27FE9F91760 - 4ED3D9D2BD618FDDE5F1DAD52B70FE138F63E5037FC1BBE3BD4789CC35745A2C - 1DB8D724AC787F2D6E79E46599E6EA9EE7B166DD46E92E1434557AC09E3B258C - 7451BD241CB5C0BCF41B87C4D6C7513B173CF34FE97643E153F6D8099377DB1E - 13C66D25CB2668D48FCAF9C77F372408D25465A5CA73E5DDCF490149EBED5E23 - 41F87947446A52B59FA95CE8DAC9C498F244DEB3E99F38CA7BBE71BF96E122AC - 0246E88EC2152FAEC7FB6B1C9B7B920ACE96FD2EC4836BFE86F3F653FEB2C05B - 349D70EA3978EA9588F2393C7CFFCD683AF514E54B43599E0FA6D84427ED8BBB - BE77369EEA5F84FAF1DBE2BA33CFC28BEB3FC343975F8985B7FD16D7FFF1F7B8 - F9871762EDFBEFCB74DAC2BFBF03AB7619FE2FD37B9FAC976642828778E98DF7 - A5289AFCC33F48BF143F6ACA9584238D8EE91FC14C46FE68DA95089E384D1EC9 - 4FA3674DC74D91654DBBE84F787D55FA69E74CF3D074F14EC26CE4D27E866172 - 87EE1FFA7A23F748C053AE958A6F2A8EB8F53EC49FFEF50016DC7A0E66E42A78 - 99A2E33542668EC06582BB1C9BDFB46C7868CF43F0FA5F1EC5F2C50342C8ADC5 - AE8FFC1DFF78EA29FCFEDA10FE7DC79D310E5598FFBBDFC3FFE6DBF87BEF0318 - 7CF0617CF6E8E3F8F091BFE12F5FC86EDA8F04D79E93B691D3A2044D1BBAA75C - D3412359EB366CC2CFBE79981440C40F4FAEC68AF73E4D9832A5C78DDC2BC41D - 4D9952BD34B599ED3425D5B574E587F8C1F153E591FC347A466BEB4854D2F4E8 - EE3B4D54A9BD499587DA35E3F0BDA59BE2B69DB055D2C68B5CDBCF304C6E6831 - A72996A833EFD7F2FEAD665E34152AE8D4C8D54DE7C7A6629DE9C765F8DFE35D - D3B2340D79FC0D589E30DAE5B8675D748CC87BBE238AE414A45356E2D4AE575D - 46DC43F1BC946FF94D54AE3BAD20A10E55AF67F914FE0DCCC322FCFC6011EE9E - 4ADDAF1EA71F793316E8763E741FE69D751A4E104E9A8ED565C5F3B9FBACEA55 - A37FF63C8A68BCDD49D3BC1A6BDF9CCF43979BF37439336CACD861772CDFE708 - EC3C762BAC11379367D6AD45C3763BE1C32D9BF1F0A71FE3D4ED3F271F36BC6C - C37AD48C9F80F15555F219745191C7F60C3A0D09103D45484653A024B868FD17 - 4D1952D80E13C759A75C291D0934AF4D11DF99FB883C2EB9FEDBB21C1AD5D261 - 7A6A93ECB89A3DE4B42E9577E9BC4538F1902FC4E26CE5DAA029545A93A7A752 - F57431D57DD9B7BE286711D2912A0F4DB9D2942EB589FA3BEFAF4B138429914F - FB1986C90EBABE4C31A7198991BA327FB0B016359A73D0BDE626215A54F859F7 - E0FDEB4F7144DB37E1C491FBFED39C7001099505A7D2542DE5B91207BC48D38C - 4EFEC1AB06F1E0F9FB8B548E1F77AB295D122707DF85D38DB4D6BA743B8EBC06 - CF3C7A2126CBB89B71842E3729ADAE5FD421E24E8E5C2CD245D2946FE47141C2 - F13CDC2AEB8AF753454ACCFC4E5B13FB6C2B3B394FAC7F49E7C54C6794A5FBE6 - BF2EE1B3180946E2C1C2E625673E58D8EB52748FD0E97474D4E6F69B66AE9FD3 - 7E77D85F9F7B09EB3EFA18FFF1C8A7B2AC548CDDBC11673DF53B6CB56A193E11 - E57CB879130E9BB00DEE5FF321D68BF3E91F37116351856A21E8C60941B77E17 - 1FAEFA6223368DCD6E748D6198D141A6C2C7269C46122F316792499A4CF8EFAF - 6D8B3DF6F5634C55FCA1C2D2C68CC19831E228FE55D81A3A12391A11DEAA84C2 - 49A7A1090388D26813B96353910F60C1C035B8C83A0D79144EAF236123783582 - 41211663D395FB5D88D9672DC22B51E5F7AA4B22E26E1662879C32CE28D74C2B - EB50A36D346225845F7C0D5CAAF2BD995C770630BF17CBB10CD181A370804F45 - 902894A362428CA92007A36D6E52E489F52FE9BC28BCFA26A785BFE13DAA5781 - 90782A14B6B2B440D3B8DD5AC869BF3E4AB7F2A763B31066B71EF15D7CB4DF74 - 4C1037944963B7C2DFD7AE4160E2F658B76508BB8BF8BDB6DE1AE3C58D67F93E - 47B29863182625247832B15223933615ACDDFA7EAD364668C8BD45DC778951B8 - 86EE145C74D500E60811B1FCA62B3138B3DE112325018D30C63778E43D7245D3 - AEB80B0F3ED48B3FE30C9C4CA363348A2647F8A88E415C117FB4973719E721E1 - A89C4958FA26375EACC7FFE22C29F478CAB57C2051F7870367E081632EC007FB - 07E0DF656F7C246E2CDFDC71176CB5E3BFE07D11D6551BC46DD5752CE6188661 - 868151B929C219B9BA0ED7CFAFC16C39BD9886FDFCA886B11E4D089C3985DE60 - A0EA20A15938F6C7C933819F7FF352400BD7E8CB78EAC8A92246F0AA107A4F92 - 230D29F32CC29FFB549B659CE5BCA4E9DBE4F3FF8667AE3A0A8391D133525729 - BCB9E3E7715FCDA9F8CDB117E1775F6FC735F5FF859B8EB910BF9D5687377670 - 1E5DC2300CC3149F0A1074C6549EB08CA6EFE4C8D5CD9857E36C1248CF2998FB - E23518FCA6AA47AE1333A7770B8153077E521DEB4BFA67C69D821967796C8A50 - 90783D22619AF7625C814B7138957FCECBA8CE64842E659EA350FD8A33C236E9 - E04B517DB7EDBC78F42D368D3B1E87FF2443713DCA3087D64DDCE1E44F1E868F - AF9333A75A09ED368F663CC3300C533AC87BB4B88F6BDCF76C7A0558996F8A60 - 98FC18EE4D11EECB2DDDA6080A7387EB301D6EFA4DB3093A2FFFA3CF0E60FD47 - 1FA3EDAF9FC93219866198D2A1FDB889CEA688B1B4E54C6D88509B22B47B544E - B9320C93CC1E939CF7AF320CC330A505DD9F6BF69E8483C8F689DBC186B1A063 - 980A8046D94C4CBF2D4E87D1D119AD935E866118A6843197CF98F77282051DC3 - 300CC3304C99C3828E618609F32FA94CB0A537D7BE116EB77924DC6E6DA6DFC1 - 74330CC330A584D7BD9B8EFA7781374530A39AE1DC1461BBD4526D8AD07E339C - 2E5CC28C338D30459FCD6D0BA33745EC3C763366CC9821CB601886614A87050B - 16A0A6A60663D426087D8C6D8820BFB89927FE8A30CC28E2FD35EB58D089230B - 3A866198D2251341C753AE0C538290C87293491809348D19476E6D1A33CC0C67 - 1886614A8F54F76CF2B3A0631886611886297358D0310CC3300CC394392CE818 - 6618700F8FA722D3B4B621778DE9D6EBE44CC8AFC3CC35750CC3304CE9A1EFD1 - 7A598DED9E5DE682AE0FCDC6A240B2DA8E2810ED406D552DC8E9A4D1EEECE86B - 166536F729DF3090D0EE0CC9250FC3300CC3301545058CD005108A384A956C61 - 8B0FF0B560E1D04290336784506A1F082238D03E7C6229A376BB046A21FACA94 - 0CEEBFB834EEF0547E7363846D93843962178B177E77990CC3304C6940F7677D - BFD6470AD3F76D3A96F9634B48DCB4A33A924AD06492269968472D9A304FFC6B - 924729144B82DCFAC3D819AEC796785D66EEC796D8D299E1FA685ED084166964 - 66DCE6CD9B93C2CD30ED7E8C1E5BB2D5169C76DA69320D53793CFCE40BCAC530 - CC4871C29187285776DC77DF7DA8AEAEC6587A397F5555EC281F57228CA85041 - 6786BBD2D014A5BF1561992E88DEA14ED449B749141DB54DC03C910722BD74B6 - C0A982E2FC68750A40B077089D75B630E148A8CB0897D8F224B695A67CEBBB9C - 789100A2A922BE1E3A281EE6D53FB34E5576A806ADAD4E098150A48484EAC8C0 - 828E05DD6881045DAE3F260CC3E44F3ED7602682AE02A65CC368F5C7D7D0A55E - F226448DBF1B8D7A8AB61768B7CDA7461740A4C20CD23ABE19C2D58D053A59DF - 1CB4D60821A57E10A558B285C9BA5A512304950C8F843050AFA74A1D31D7DD18 - 71E549A4AE53E5150D0D76D1D46F1D3AC9ADA7999332A5AA9310E76AB0C189EB - 0D22DC3A47E4608A0D9DEF4CF04A972EBF19AFDD74D4028E30C335A6F033C319 - 866198D2C47D2FA7A3BE9757DC1A3A9B308A115D8A015300D677213C18519171 - A20BBA81C6196A44CE87198D40EB1C257DFCD50874D53B9B2F34B6305957100D - BA3DBE16B405C390D591600C07D1966E74ACAF59095563542E15A9EA94887335 - 5B45D635889403586A34996118866198F2A402045DB6D0346B5C00DA46B9E6B4 - 86116EF5C746FDFC342FDAD5E38C66C94D0843726D5D6C44D016962F34755A0F - D5D608420115CE300CC3300CE36274093ADF14D4A0CB3ECDAAE9EB4157208488 - 167C3141D5851E43A8F95A16222254D68031C49510A6EA8AE5A15DB35D6AF48C - A671457929DB11194438500D3FB9E5889E0C4D4DAA3A99B2C49C36D5D0775293 - 8B5B5B825FB919866198D22376AF7699C9281BA1AB4367240418A36FEEE7CCF5 - F57421109B6ED5D0B46B005DA49462D3A0347257E34C9BDAC2545D03F5AA1EB9 - 764F6FC0F0A165612F6A8C76248DEAD5CD4608ADF0537CD3206A622374756808 - AA69E3E44C29EA6498E2431B790221D71F2A747D643A6C1D0D21501580BB8844 - 68838F579A54714C1C3A4FEA3E212DBED6963EC384E52384FA0CE5B33913F239 - 56DBD121CAB33D0F93EA71851BF74B276F42A4D3AEA4EF8B598EBBEDFAFE993E - 6FAABE39E99AC5FF65A0471D0685EA47521A077AD242FC73F16A4FFA7A527F66 - EE30771FB2381FCC8853E6828E3609A8DD9D0998E1AE346A7A34A6705D53AEB4 - 11C1B6F39346DF64DABA4E431D2BB1640B2312EA72B793DAA5E3F4DA3FB3AD24 - FA54FCC24E742E8CE78F6D96909952F5CFACD3952EC9CF1403FA1C32219774DA - ED7CD6C9E18499C67D74871582BA8620FA9724AE4BA53F9282990E13FB5A111E - 127FB0F0F7721888AF3F967FE73675807ECEEB6693C7DC30154547FB805C7F9B - B051CBC8BFB0658A4A9B061241F5A2ACD8BAE7081ABBFD2E21114060A03E8D60 - 88D74D16BF8DA7CE4BDF4FF7BA69EFEFA751476F105DF55ADC080AD88F80F559 - A7CED29F4472EC73CACFCC2C530D32783638C5F960860D3AFFFAA84DFB47E11A - 3A86618A867F1AA6EBF5A6923EF4F0B47FC9E36B694330AC76F38B3F0ADB82C6 - 9210B98BBFAD007FFC913014E2A9D7FC4352FCE13ACF2D2081C6B61006DA1D81 - 992D29F3CA0D6C397C3F13369115B61F35354077EC310A0A5AFA130C8A3A3323 - 9FF31547FC912F947DE2F9F18037D595242CE81886291CBE53D138DD58C7297F - 981AC44F85709A533FB151009ACA09A0B93920C2E92F7EC7AFA74CED7914F4E3 - A3E292A67935720A5797611B5150F585E2D3676659A9DA1CEA8B974D51D110F5 - 21B90C6B1B68842710CAF307B878C851BAEE05A27D4ABC144291ABDDFD4945C9 - 35C52E71E017A2B2A6154DC94357E9499557AD5FB67D3F5322D756AB475915B8 - 1FD5B3DB50631D116D50FE0CC8E77C99B8CF8F17E6F9604A0616740C53A2E8A1 - 748DDB9F0E73289EB03D972EF62C3ACBE68BDCF0E1D4C6E958FC8AF3C3624E67 - 253E57F172639D5B3F164FBB5D8427AFF74C9567D6E5C0ED1417990BCC3AD3B2 - 6E4E082FD773272F4F4E2410652D893F9FB17F56FCC735A3FAE5F45315CE04F5 - C15D46A66D1859A21DED893FD0344A2704C29C0E7A266708FA6947A9497C26A8 - 63AE472EE98D5E49988F5772A8EBA429C026CB742461D6952CD4BDF33AEBA1F5 - 66B6D4CB018C3A7AC4F723F6707941C1FA41D0BA6873331B9D739B58CAB5CF85 - 22C5F96086057DBF8EDDB7C53DC53CB2A06318A6A0F84E6D04BAEF97A33BAF2C - 9E8E69FA972FB688DCFD5CC5E9683CD5E3A721459EB9B7B73A3F28BE565C16EC - 876BE99EF8617C058B4978E91FA1FAAEA4F57D0EA2AC84E7332E86D2A399D52F - F3187D30CBF06A03ADBB0DABFC2346FC079A3673F5BA7EA069BD59576B2B6ADA - 32FDE136D76369A3755B06E141D83E01CA5B9DA490EAD0D95B137F066802665D - B68D5FDE797DF4605135FAB874C056AF46D5619B862C583F1C6844544F99F6CD - F13AE7B9F7393BBCCE498AF3C194042CE81886292C34ED8A6EDCDF77BF1C6990 - 3A87A61D8DE72ACE9DEE244D49C67948382A6712E99E3B99825CDA6C258F3614 - 953402410AD35482274BBCA6F3E414660DA6D85423EDF64FBBB1C003AFBCD40E - 7AFB4F9FD748980B5F0BE68506E26B0A8BD18F589B3AD03E90E988A8857CCE17 - 91AA0F1AF7F9604A0616740C5386D08FB0C6E6F63A12345C4F7E9B15069A7605 - 66D5CF021A4F75461A224BD03F7D9A7AAEA2107AFDE44843CA3CFDE8BE5FFDA0 - C838DB9AA6037010BA729FE2CCA5CD6EBCDA50E26BE88A830F2D6DEEDD913425 - DD0A84665B469C0867B3C1407D866FCB49C02BAF7AFB4FBDA837E911557668D3 - 487C3AB318FDA0326BB26A939D7CCE97D3879A5EDBE85F2289E783190EDCF769 - DB91051DC3300587A65DA7274C43CEC65CCC729EAB78E6121C94C96857CA3CD3 - 71D092339D694CFF2C1C64FD11A25D7BB4BECEFBB99329C9A5CD49E4D9864A83 - A69A7B817A7D2EAAE410A8F5515131E48890FB5539E67A32CBB3E534D6BC2258 - 28BA80F8D798F1AAFE3AC8A7B9A847BB14AE1F0634BA1648F54AC8FCFA6CC72C - B31DD59134AFCF8CE13A1F4C495025545DA1FE2C6798B2E3FD35EBF0F28A8F94 - 2F7BA6EEB923266D3741F9924977793DB7FC3D1CBAEF24E936D36AB7D7D15C1C - 6B8691DB1C817387D171F3E6CDD2AD8F14F6B7E707B1EB38E01BDFF8862C8BA9 - 3C1E7EF2059C70E421CAC730CC7093CF3578CF3DF760EAD4A91833668CB4B163 - C74A21AEFDD2545A86619851871EEDB019C3304C39C1828E6198510B8D507A19 - C3304C3951E682AE2FE9FD729EEB0AD24265E9F7E695035EED2DB77E30E9708B - 0BED37C36D02C49DCE969E8EB678866118A67470DFB369A98CF6EB63058CD099 - 5BEFD3BD8B2E17582065079F2F86611886196E2A6CCA957694F1430F19866118 - 86195D54DE1A3AF7431FA31DA88D4DC9EAE70645D1511B9FA64D1ED0A3512611 - D7DC2C8EF43C1FB5B55B274C28D3CCAF46A7FAE2F15E53C0DEEF8814F93BF4D3 - E95DF98D7A6B3B96AAC0CC49AED3390F09FDA7E763D5AAADE8E9FA196B9AF6D3 - D172BE98ACD043E836CC389B3BDD51EF7625CCA376330CC330A58BEDBEADA75F - CBFCB1252420E8D9390B117F740F89143F06DBE8793AAE7821566A97CEC6C229 - 739C77D1253C7047A79D0734E9FC66B8AEC3112DF4CC21194FA247BEAB91E29D - B8AE4008117A8D4E421CE5B56196AFF2077B9DB691B89255D133B612EB8D76D4 - 423EC732A96CB33C159484912622EA30CE0589BE9E067DEE52F5D37D4ECC3EA4 - ABBF7428C5C7969879C86DFACD751336B7166C5E477A5489E9D6C7C75F58221F - 5BD2D090C50BC199B2821E99C030CCC892EB634B7A7A7A306DDA34E9D68F2CA1 - 233DAE44BB2B54D03501F344184884B422AC62242496662F95E1420D190F8274 - CA1A0888D48DC9E1B13AA4B019449BF1AA9C441194D89E789CE38F21C59A7E96 - 37AD03A43CEEFC869FFA22BBA5DFF1975C978357B8C0B3CE1E3468D158BB14B3 - 636234D37E9AFE14F597202CE858D0310CC3943A9908BACA9B724D7A179DE53D - 8ABE162C14EE7968724D2592F40B203C687FED72F6D0CB9F95D384C4921CFCA2 - 364590F143BDF3C1B34E7AE2B7F35EBE688710B479BD76862934F49DD5986E93 - 74E1EE23912A8C611886292DE8FEECBE6FBBC32A4CD0F525BE8BCE370535E8F2 - 7C89B0AF65212242D90C2CD5F10134CE5B885ED4A778AD8A53A6B946AFBDCB7C - 8F6418DD0B545E292E2DEF988C0C221CA856EF88A434323435546FB8157354BD - 24BEB27A575F8A3AE93538E89E8339DDF41A4125E752F6D38FEA401831DDDBD7 - 935D5B188661188629281530E56ABE84584F232A2F21A70E8D69579A726DE831 - A61E69044FAF51D35385CE3ABC56386BE122CD5590C9F5DAB68432CD3A9D3244 - 91E8EA7262837A0D5A02AA7C4A12088AE403A8A629E2946BD3C81B9F320D8442 - A869EDB64C6DBACF09A5A5296478D4E9A4A1E9D47A216513D6157AF653604EDF - 0645795DA23C152FCB32CF570933D253AECFBEBA1A874DDE59BA29AD3B3D4D8F - 6ADC6E9DDE6D3ACE3C6AB77BCA55BB69CA7597AD8770FAE9A73B953115C7363F - 1B542E8661DCACBDB25AB91C16BFB65AB90ACB41FBEEA25CD9F1E73FFF39E1D5 - 5FB17573E248FE0A5843576AB80559F9E0B9D6AFC26141E7B859D0553E24E8DC - 3F5A0CC3D8AF8D72147495B7868EC91E9A4E1D0861F62813730CC3300C5329F0 - 085D4129B7113A3DF56B99AA1E2594E3089D4E679A8ED3236EE6D1EDD6462374 - 3A5CEF72E511BACAC51C85A8FAD9CBF2C830A38DA11DC53DEEA74B94CFA15C46 - E80E38E080D8089DD5545AA620D4A173A89C84910F2D0B49108C4E31C7300CC3 - 3095020B3A8661188661983287051DC314099ACE4C4536F1B6B43A2CDD9130C3 - CC70C2963E5768734D20E47AE40FED88CEF43570D110025501B88B4884963678 - A5491557088A5DFE70B1037AAF9C8A21C322278D577126946E4FDAB89F064A37 - 19A1DD953763322D3F4776DF15919CDA9509C56C7BAEE7739828EA79656C98F7 - 6E2F370B3A86610A465D4310FD4B121FCCDDD7D38560D2C3183DF0B5223C1446 - 2B2F011806D6A3A3E365B99EAEEA672B11396E3286BEBB838AD37C8C9E97B647 - C3A1CA5B708A5CFEDBABE0FFD972B4BEADFC59914E5415B2ED252EE0DCE4755E - 8B49999DC702C3828E614A04FD57562A52A531E3B4DB1646903B953F67FCD330 - BDAB07F1F1B83EF4243C789B294D3E467DC77B881EB87DD28853D7C3EFC15FE3 - 167A85A3D8E51793726E3B537EB8EFD3B4A14D43E12CE81886291CBE53D138DD - 78C308BD4524D820DFDC42D3B1F4CC2469B12958670AB3B93920C29B852F714A - D39E4711A1E959272E699A5723A770751954BE4914A180F9EA3F014D0F074222 - 264DDD12F7F4ABCB6FABDB28BFE478FB632C58A5469C0EDD134317EF0AF98640 - 0ADF6DE7E4510F39EDE6315D6BC40DC969C9F1085D3C15BDE66896AEC35ABE1A - 6939D4568713D7FBDDC9AA6C41427D663DAE119BA476699CF6C5F353BE3DC4F7 - 763C5A5A44981CB974A7114159B5DDEB1C4C16E9DC7529BCCE71BAFE9E24CA4D - 9B4FF7DF2B4F8ACF2CE1BC3AEEAC3E0FE3DC505CE024CA6BD6ADC8AABD149EC1 - 6756C1B0A06318A680F8706AE3742C7EC5912CE6746B5DA7F3D7E5D0502F825D - 971B42A81F8BA7DD2EC2D52BFB0C52E5997539703BC545E602B3CE34E2344260 - F9BBD1185165F402972724F2A1F5B220BA62EA53B5F7B256F93E63EFBA33215D - DDE5C47AB43EBA01330E367E68E9C7B3656744FEE44CD936613BE3B3A3B8EDB0 - 404FE7FE09987D1244199FA0CE18CD0AD66C8FBE4757216C2D9F103FCCC7034D - 5446C77BC0717B18C2693CFCEFAE14E5AF4097AB2D94D6FF6D2D364C6CEDD2C2 - 6532660C2C77C285D53FFF31EA7FB6527C8A6A5AFA771F0B31B30B5A649D3A0D - 95994DDB29ADED1C2C87DF5D97C428E34F9FC077DC2E714193B2BF22DF6E9F38 - 7149F96CFD276C79BCDA4B9F999B6C3E8FC47ED57D7B2AE6419DD7BCDA9BE967 - 56B9B0A0639822403FE2A9C826DE9D560A0415E6753471A74FE52F04BE53E9DD - C0F7232AFEBDB2783AA6C917080B68744A8E5625BE9A0E988EC6533D16CDA5C8 - 33F7764778D1BABBCB82FD702DDD03A2AF6031093FBF1A25ABEF4A5ADF87BA06 - 21D6F414711F7A16CF8D3F60DBB3EE0CF0AABBAE134361D5EE92643D96D2BAA8 - E757A0EA3AE387FBF94F10113FEC72C48ED85DFC80AF7A0FEDEA0732FCD07BEA - 1C0A288E7E706994844646BEBD3D7CBB891F6251465F6C4A770734EC16CF9F54 - BE44FC30FF41B5E1ED5598F3D2784C898982F558F0E27AC729EBFB043DBAACA4 - B40AAF76EDBE0366ECFA09E63CA4CAF3E2ED0D881EB847E20812914DDB539D83 - 248C32281FC6A19ACA48DB5F91EF61250A93F259FA2FF1C893717BB3F93CDCFD - 32F2E6DB5E375E9F5919E275CF36DD652DE8684A24712684A63C6A91F05E7DBA - 295BA74B34963C230AB547FD08482BA5B6314C06D0B42BBA717FDFFDE2FF8D90 - 5A8DA61FEB815E79F38960EE7427694A32CE43C2513993A07735C76F80C9EF16 - AEC3ECB98BE5E85934743916379EEA88AD5CDA9B44BABA4B0C296C3660D0BAD0 - FD63F4BCBB33DA329EB2FA04CD6A54449A1C75FA18ED7F1D2747590227ED0CFF - C0C771C198B6FCF1A8DE4D39F3C2D6AE0C11C2C42FF234610F2930E2D377D9B4 - 3DD539180EB2ED7FB9B5D785E767569994B5A0A31D75E67409A24B3120BE6EDD - 0BE20A28BA7400816A3D44502E04105253359110D0DAD4519A6B6E18C60A4DBB - 02B3EA67015A204596A07FFA34F117B7202A845E3F39D290324F3FBAEF575785 - 8CB36CBCF01D8083D09576AAD319519C8339DD07E132BDBD36A3F6FA316DBA31 - 3248EB0595D3B3EE925D43A7A7C968CA4C60AEA153246C00787B3D22BBC6450C - FDD8C74E3FC5617B637A2C4EF8C53540CD2E68ABD990342296BCC1607C7C2A53 - 8DA2C5467D4C547DB1DDA6BBEF8AD9075AD27AB54BAD1DB4B5D746F8A1E5A8FD - EB7AF863A345D9B53D7E0E101F99CA864CFBEB26C5E7928A549F99955CDBE726 - C7F6DAB07D66B9F3087E39B91EBF7B3D957B6428EF29577F3502034B6337C7E8 - 826ED48484021AD477D82844101A6794EE04473A7C2D6D0886BB616854A60221 - F19E0E9D86466E6DE878B32CB7DBF4136E7FA1209134DD9C4AAD9B8DB998053F - 8D3A9FB904076532E29532CF741CB4E44C6714DB3F0B07F526AFBFA3D1B74EB9 - BECE1F1FF1B68DD6CB11C52E741DE46CDE9064D45EB506AF5E95DD4363729A0C - EB1E518CE9AC2B77C6D28E346B8C1236007C8C7AB5FE89F2CFC31AC47BE7EC98 - 053D0645962D4C2FF4A732C48F74DDBB9FC4C5AF26698381F841DFCD19591932 - C566124E7D7ED59621B9EECA96D6AB5DEBD17A9D7A6C8B0A774672E8B124EA1C - 513A12B92A7EE1712E71934DDB690AF25D3A07EF198FFD70D595924CFBEB26C5 - E7928A549F99955CDBE72697F666F1999521A9EED71457E6EF72A577913601F3 - E8D555DADD86417F0F1AE4026B9ABED46E4ADE815A7FAB1A32A6E9109DC67CFF - AA7EBFA94C8460EF10E44C49425E235CE7EF6D4477BD134F71B397D6C2AF0A09 - 842258A8DFAD656D8389BB3D897E9A66AED75746B0373E8D63941B10A2B6A6B5 - 3B5E46DA3A472FC57A976BBACB4AC73FB7FC3DF92E57F29B79B4DB0C37B7A893 - 5BC791915FC79B71E6FB5AC9DC7E6DFA5DAE3367CE946530954741DEE52A7E20 - 23BBAD86BF583F8CB1F2C7A3578ACC7C9F75B68328677BF4C8C5FA45268BB607 - BF3B150D0395BF48BF1429D777B9CE9F3F1F53A64CC1D8B163EDEF71255369CB - 141FA6D484D5805C0483E2EFEC19BE3A340407B09446B48C47264861E4DA75D6 - 9EB438CD1173DD8D91D80F624CB409415423849A0C8F8430506FAE6D0BA3B55D - 684959AEF3177B93F89BD5A9278870EB1C510291491B128976B4A32B40FD72FC - 893BEFDA551B12DB370FDDC6CD2BFB3A99FCA0F39C8A74F126B6B43ACC7DA451 - 208D998FDCE9FCE2FF0961B9121B8D721953213CBFA278628E2874F9876E8FBA - 551B30A0BC4525D3B6D31464CACD100CE38DFB3E6DDECFCB7E976B6C1D1D89B7 - 9A2972BD8E5F086D5A4797B07E4EADAF6B35769D856353B38AE80274878368D3 - A3691A99D758A3E36B415B500B492280D0BC1667AD10ED9A13FED834AFF42B81 - 99491B24F134FED61AF42E546513B69D77546E2014DB9D27A7691D671675324C - FEE89B8BDB186658D1CF2FFBF6B8F88ECA11473D138DA6204BA64D4C2551E653 - AE029A4E6C02DA1ABBD13365617C7A740ED038D0ADA66355987F106DA9A638E1 - 91C69297A63E7B1A6804CFC82F55570ABF57F909B8F31B24B4C3986EA672A553 - 0BBF6CEB1CBD1463CA35DD2565C6A79B72A5E9508D76EBB4DA4F471DA6C3751C - 4DB16A3FC5B9FD74A4B0BFBFB804BB6C0D9C71C619321F5379D8A695188629AF - 29579A5A35A75D69A02616A6D2962FBE1968442BEA5B81D86656DF14D474B5A2 - 355C83295A145118BA524F375259014B1A9537B6A15608ABF65C5E6794491B52 - 1119443850AD76DED168A20C75CA0DB7628E6A9F9CA6759CF9D7C90C3B24B4B2 - 45E731F3BACBB1F9B5310CC330A58B799FB6DDBBC95DFE820E3ECC680C00C63A - 33DA61D640738EB1F57304ED3AA36780A4DA75E643CBC25ED418699C244EDE01 - BD9B4DAE49CB65C42B9336A4A06E364242BCCA9D774D83A8893D534094ABD6EE - 51994D42E226EEB6CBA34E86611886614A9EF29F726592F19C5E66DC94E294AB - 194F53A21AEDD669B59F8EA65BC7E9633AA329D77F2C7E99A75C2B1C9E726518 - 3BE530E57AD75D77E180030E884DB5DA8C055D05221F6D321042C4DC4CC15829 - 1741E78E27A338D34D68916686BB1F55625B47F7F80B83D8755C150BBA0A867E - B41886B153EA7FEC90A0F35A43A7FD2CE82A82C467E7F1B3E63287051D0B3A86 - 61985227134157016BE81867ED9FF303EE188B3986611886194DB0A063981186 - 447826D05F623AAD2D8F3BCCF493DB2B8F632A806118862959E2F7ECE47B3A0B - 3A8661188661983287051DC39439F4571A8DDE69B789CDEF0E631886614A1FF3 - 5E6FDEF3B5B1A0631886611886297358D0310CC3300CC394392CE818A68430A7 - 434D773A32C9A7C3F5503D4161D9D4C3300CC38C0CFA7E6DDEB7CDFB390B3A86 - 611886619832A7CC055D1F9A853A2585EA582D727A073DBD2A2BD7BC29A1F6B9 - CBB5850D1746DD45EB33C3300CC330C34D058CD005108A38C38FF21DF44D1DC8 - 5AA3F85AB07068215A727A4FD6480AB43CC8ABCFCC70417FA8E8A175F7D18D19 - 4E6E5B3A1DEE15CF300CC39426E6F42AE1BE9F57D494ABAFA50DC1703716F0A8 - 13C3300CC330A3880A5E43E78C9C3537D70A55DB2C7C0239CD189FA26D968184 - 6B942D219DCA2BA177A69AF9295F3DBA1046AB5F84C50BCC10556F5FBCBE5A73 - A8CF68476D4787D1C6E4BED10BF975BB12DA9150C6521548987D56EE8EE65819 - 99B583C996428F8A5179F4B97861FEF566A633DDB24D2A0DC3300C537A98F772 - ED77DFFB2B4AD0453BDAD11568C48CD834621803D5F344C7E9DDA642B4F85B51 - D3AB4E4A2484817A9B30A174DD6854D3B843BD40BB4CE4BC00BFBB31E2840BEB - ACAB43A74810D4D3BE9DB9BC415588C176609E6A135A9BE222CB68EF3C740BE1 - 6862F60DA8EB74D20D517BBADA332CC344B463B0C129A3378870EB1C919BC8A6 - 0C866118866146822AF1235DC67F960BB12147C83441F4C65E4C4F71EDA88EA8 - 756234CAE41F449BF1E27A1AD5EA69206166A405A56B15F2C620D88BA1D94B93 - F23BB8EA49C016678625C7C7DAE417ED6812426F610B9CA8D4F9444654D5EB33 - 410253C4515F322AC35D9EE14F59860C286BDE5FB30E2FAFF848F9B267EA9E3B - 62D2761394CF21D525E58E7B6EF97B3874DF49D24D7166BC766FD9B2451E75BC - 693A8E8E643A4C1F4DA3B0CD9B3727B9E9F88F175FC6AEE3ABF0AD6F7D4B96C7 - 9426DBFC6C50B99874ACBDB25AB9EC2C7E6DB57231E93868DF5D94CB0E9FCBCC - 49772EBDB8F3CE3BE1F7FB3166CC188C1D3B3676A4513A724B5369CB98F8A608 - 3D5A953F240C8D1FCE9C46DE083FAA03CAA9892EC5006A30C52A86A2583AA09C - D94062B51EAACD1184DC753215077D2F356EB7E937D1E13A8D3B6DAAA95B8661 - 1866E4D0F767DB7D5ADFC72B6084CE6BB4C836EA24550FA43E4B18B133D33AE9 - 0642112C4C28343EE59A189EAA0D22B6B90AF5032144D40897F4A3578944575D - 496D8AB737DA510B7F2B9C9137F7881A8DCEB5573B75C83268CA38DE97F465B8 - CAB39C0F7B1994B6BC29D7113A1DA647DB7498361D67331A91A3F47A848E8C46 - E8769B3006679C7186CCCB94267A846EE0C27F914726999A1BDE91471EA12B1C - 3C425738721DA1BBEBAEBBE0F3F962A373E6081D990C5769470175E894EBE69C - CE5749D1631BD173D2A1D51F3B51CE26031F5A16F6A2C60877F61ED4A121E8BD - 29A2AE3382105AE15779A4B893624E1340CD609353A65CABA6DB24DAD11B4497 - 6A6F131A1194E116EA66C7EB681A444D6C842E8B323C2944190CC3300CC31493 - 321FA12B14340AD58386824DD9668A7B642C059635802342A9B4A3408CE6113A - EDA623AFA12B0F78842E3D3C4257787884AE7014620D9D1E9DA3230DB4C446ED - 54DAD14D5F0FBA02D5F02B6F29D237A715E1126863A9B483611886619838A35B - D0D168134D53D60F20344FEFE22C15129F7957DF15446F6CA7E970522AEDA850 - 869247E408EDF63A125E6EFA9C4C28CE2BDE9D96611886296DBCEEE1A35BD0C9 - D75FD18FDD482DF0AF43A767DDB4662F3EC556B81DBCD9522AED6018866118C6 - 0B9E7265188661D2F3E8C5D87FCF5D62F6ADDFBCAA228887D1B6671DFEEF35E5 - C5ABF8BFAF8B743F7958F9470BAFE2773377C5C19395CDECC43F554CF17904BF - 9C5C8FDFBDAEBC158757FF32E977A59F1B0716740C5340CCA9CDE186EAB64DA1 - 5218597C94D569A3E96698949098FBDE125CB6703596AD207B1233EE3BD225EA - E23CF69323B1E0B427B1ECAA1354C828E0F54E9C39F9CB78F5C2557871B9B2EB - 80C71F53F10C53206CF7713216740CC3304C0A5EC5FF856EC7777EDB87EFEFAB - 82B01FBE7F7D3BF08B1BE1D62BAFFFA60E67E30EDC79EE7E2A6434F02A7E7771 - 1B7CB7ADC27F1EAB82887D9AF15DD3CF304584051DC3300CE3CD6B0F61C13367 - E284E3955FB3EF499871F812BC169B6615FCE5621C7FDF37F0E8681A99235EFF - 0B1E7AF64C1C9F42BCFDE3E7C654ECCF1F51A16A2AF0B64B627167DE668E7A26 - 4EE1FE52AB67391AA8C32FC13F543023487B6ED4397F2C9E2EF19C972F2CE818 - A68CD1C3EE1AB7DFC43D1D6B9B9E65182B874FC164E54CE4294463BF854FE1F2 - 5FDC8EEFB49E877D54C8A8E28B53B0B772DAF8CA157A2AF60E9CF1C76B8DF55C - 4FE1EA48BD1377DB9978FE973729114262EECB78E8D4276253B8CEE89F1024C7 - DE83931E53E5DD0674558820498F3857C76AB1A6ED5F71978ACDFCDC88726E00 - DA29CD63EDC02F2F28BBF575B6FB390B3A8661182635CF2CC572E54CE408F862 - 33AB47E0B2DFB6E395EF999B234611CF2E4DBD01E2313D0A670A10E208FCB8F9 - 6B8EF3D87A9C8125788DC4851AF50BFEC03575FD7A145153D8FCE0763C1FB17F - 3A958738575AACC54C0864159BF9B911E55CD7EC08F07D9A11FCCE5378B5024E - 210B3A866118C61B39B57A3B1E7E54F935722A761AF68DADAB13EC771EEEFCED - 345C5E7B71D2DABA8A669F1371D2176FC7A35E9DA669C01F00FF2305C813F8F1 - 175578CE9CA9CA52768512848C20DB73F32A5E7B4539CB9C321774F4EAAC5A74 - 449557231F186C09CF082A33FE205DB2D82B5A732ED768675E6D63CA9954D3A1 - 99A0F3D3510FB7D35187EB30F2BB4DE34EA3DD0CE3CD7EF87EEB99F8E3F74C91 - F630DA6ADB805F5C80A46563C75F87477FB104677FFD7F51E14F8930D80FDFBD - F04CDCF503639D1B2184DCEFC8BF7C299ED753B272E48D1C6950223169CA701F - 1F7CB08433599C9BA7F0D0A32A4D06EB1F4B0D7D1FD7687F658ED0C90706E7F3 - B0E0004211F563285FE8DF2C249920EF72058528836118663811226DD96F81B3 - 63CFA1FB57E0B7AB3D77B2EE736E1F6E99D686E385A81B351C7BAD5C8F1515A2 - 2EB6BEEB62E0AB24148E3D1F3F461B4E95614BE1CB68844E88C4F977C0F7CB2F - C7CA73C4E2D7F09F72DD573C3CBEC962B493E9B93902BEC8054EFCB1B43BF95A - 7C45C5943365FE72FE2C5E6E9F31EE320B514731DAC9148242BF9C3FD5E5648B - 7BEED5D53874F2CED24D2FC927CC74E47687939FDCDA4C3FB9B55FBB6D46F1FA - C5FC64FC72FEF2805FCE9F1E7E397FE1A9AC97F3D32ED76BB1DF63BDF8EE08EC - DE29D4CBF9F50BFA69742E16A6D256187A8AD3790F696CCA94E86B46556D07E4 - 8CA77E97AB34350AE7865EDC1F6C33C49D9E2E55EE0E519E2AA3D69C4735CAAE - ED58AA02895CCBE830F225BE5F35A17F0CC3300CC38C3A2A7C53840F2D6D4174 - F5C4154F5F4F17826DF4727921A6FCDD68D453ABBD407B4C4C85D1EA5782A91E - E8EDF47A7BA94837D8A0F207116E9D234A25A8EC56D4F43A65CF4337BA64B88D - 1CCAE89B83D69A5E278F30CFE6310CC3300C332AA8FC5DAE750D0876F5C44452 - CF4008B349004597622041B875213C1891A912D7D055A33D3632E646A4938509 - A81E51E2524A476507543D025F4B9B88F3228732FCD50874D5278EE631650F7D - 0F0B85FC4E5BCCC416C6300C53D97C0DFFB97C64A65BF3C176FF7653F9820E75 - 981D1A90A36FD18E760C34CE407C195B10BD6A944B9A6DA8CB37038D8130625A - AF14901B2B68D4AE497EA83CE5CA300CC330A39B5120E848933502DD7330A7BB - 066D7A57826F0A6AD0654CB37A105D80EE7000D57EE5CF042A3BDC8A394A6891 - 90F49E72F52083327C2D0B110905302087F4188661188619AD54C02ED7FA04A1 - 130845B0B02522C2CD5DA5B489C0EFAC3B3347E168D381BF1561E54590E2E12A - 93A65F6D3B5E4DB73B8EBCCD721A97088442A869EDB6E4CBB18C483CDC1965EC - 84656C91C98052DAE52A47899569CC301DAE77A96AD37E5B782AE35DAEE587DE - E5CAA48777B9168ECADAE53AB2E4BBCB9576B69A3B5D4D2B7341378A90E27310 - 6D2CDE0ACA480A3AF23FBFFC3D29E8741C1D4DB73E9AE124C0C84D47B7DF4C4B - 7EB7691167C6531809BADD268CC11967C45EA2C394202CE83287055DE1604157 - 3872157477DD75177C3E5F4CBC6DB5D5568E88AB8A3FB684055D99D0D75C85FA - 8110220B69872E53284A4DD01124B2081D46479B99E9B438D36E33CCED2701E7 - 8EFF3B09BAF1552CE81886614A102DE8528DD08D8A3574E549E2B3E6EABB82E8 - 6531C708F4EE263A9230F3427F77747A8D993F1627CAA11BC2471FE52E6E1986 - 6198C243F765FD106122E1DE6DC082AE64F1A165A13922C353AD4C6A6C17783A - 628250E49D3061023EFEF863C7CF300CC39404745F1E3F7EBC74A7BACFB3A063 - 9832C73D4AE7BEE0F55F73A669E2619082EEC30F3F54310CC3304C2940F765BA - 3FDBEFDD716341C730650C5DC4E6D18D2DDC6B9A76BBEDB6C35B6FBD8555AB56 - A9108661186624A1FB31DD97E9FE9C0E16740C5386A41370B6780A33CD1D4643 - FAE3C68DC3C0C0808C63188661460EFAE39BEEC75B6FBDB5BC3F9BF76BC2F493 - B1A0639812C26BF48CD017B11BAF708DBED809B37C1DEEC439C71D77DC116BD7 - AE457F7F3FDE79E71D2721C3300C33ACD0C8DC134F3C814F3FFD143BEDB453C2 - FDDAB96727DFFB59D0314C8560BBC8DD6ED3DCE8F0DD77DF5D8ABA70388C175E - 78016FBEB914EFBFC3CF99621886292674DF7DF3CD37E57DF71FFFF88714739F - FFFCE7E513086CF76C42DFB7A589BFD8BD870418A6C229A7070B9B6E6DF40C39 - 9BDF0C37C36C0F1626F7E32F2CC1F46A5F42DCFAF5EBF1C9279F60DDBAE730FF - 3F1EC32E3F3C135FDC51C47FF034FE78CB524C39FB3B387CA7E5F8CBB5FD9874 - D677F0C59DA885CBF1F0757F064EBF18274C26EFB37866A7C354DC8778F68EDB - B074CA0FF0AF14F0DAC398FBE7C538E8F45938615F8AA724CFE2D90FBF882F42 - C42D9A841FFCEB17B1E307CFE24FFF27EAFBFEB771D84EAFE191D0139824DD22 - FD6B8F20F4C4247CFFDB8761A70F9FB3A63B6487E578F4FA7B806F5C84E3E985 - DC1F3E8F3B6F7F1F475E743CF6C1EB09711F3E7F276E7F1CF8EA99DFC2A13B51 - DC13F81CB977A4C6BD8EBFDEF0A4F293FB5EAC3EFA4C7CCB8954B8C23FA2BA3E - C091171E27EBA2387CFD421C47ED48888BF39168C3433849E4FF108F527DDF9D - 8943447D8FDDF4B472532AF2DF0F9C7A3E8E9565BD80F9BFFB005F3AFF58594F - 625A15FFF007D819EFE1732718E169A0EF02539A78FDC0178A74E5E75B7F31DB - 4F02281523DD76777EF2539BE961C134B53A71E244B9668EDC5ACC99CF9FD3E9 - F5A34C62E1E282E52B9619B594BAA033DDFA689A16608429C6CCA376DB4CC791 - A00B1CE84F088FE75B882B8F9A05217B1407E2823FFC0FBEB527B99FC035C7FC - 18F7C97042C4FDFE269C21E308117FEC4F20A487C3A9BFC2A3171FA93C8215F3 - 71C1F76E42ECFD07D53FC2ED37CCC49E5881F9179E89FFA188EA19982184E2DE - 3FB91E3345B94FCE3D013F5F20C2675C818767ED89F91735E1D709E93AF0CD3D - 9E44E8C4DF63EF791D38FDF3E2FCACBC1BADDFFF5F554F35CEFBBF9048A31EE2 - FCD4F538E5B25E1933ADB919933B1FC75EB7CEC5E97B3C858E53FE80BD6FB90E - 0D222DB1B2E7629CFDF85771CB750DD863650F2E3EBB134B9C28A0EE72F45D04 - 5C5FF707E106FAFA9C98BA5FF6E2C22F492715804BCEE95279A62178F3B54ED9 - 4FDF80FAFF542F6E16997FD97B21BE84A7717DFD1FB0D76F9C344FDF3003FFF5 - 80883EE5FF61011548659DFB1BBC2CF34CC5B9BFB906DFF83CB99FC68DA7DE21 - F25D83AFEFEE7C3788676E3A0DBF10FFEE3BFF7015921EFA0E149362979F0FEE - 1FDD4233D2E5E71B9F8E7CF2A7CB4BE22515F9E64F47A1DB27C59808A3A36914 - A6C3B5A0D37E3ABA455EF90B3AE37DA739BFD754BE56AB1B8DB177AA9602EEF7 - BC6A283CF1FDB5C1DE2198AFA82D094AF29C26538A824E1FB569BF3EBA4D8A12 - 811662EEA336DBE89CF6BB059D0EB7E5A3A389DBEF86F2A422DFFCE948557E52 - 9C147EFFC4BF3FD48A238437FBBA9FC2F542043A82307DDFD2C5E78B593E09C2 - FEE90BE2E23203F23DF7A54CBA734F3F90C5245DF9F9D65FCEED2781928A7CEB - 2E767CB6ED27BF1666DA74983E6AF146E8343A3C965FC6962B241AEA21449CFA - D18A5463A9FE23371B7C2D583854DAC22391004211D5E7DE20BAEA9B85CC2B31 - CAEE9C9626EE0B3F153AADFBA821BF1966FAB5DB6D84BE69D0D196A6D8A66F5C - 5E66CB93AB3D75E7FF62B07A1F7C41F9A9DFA9CC9D9F8CB085DBCCD61FD36C79 - 4CCB98953DF8E36BE7626616628EB0B56938CDD6E74299ADBEE1345B9B4C2B36 - B63A4DB3B5391BB395699AED7AD2664B3F9C66EB8F69B6369B662B339DE9B2C9 - AD3F1F7D74879BA6C388F2167491418403D5F02B2F898896D1F63A85BA060431 - 80A551E5672A027D81DA70C7D9D2BA2F7482DCA69961DAAD6F1C5EA66F3AA6D9 - D29966CB5348B3D599B9ADC4DD2D27E2C4131DFB8F053370C5F533B1A78A4F47 - 727B443EFAA7FCC9F56567C9E5676763C7BE837B2F9D8119E7FE03C7FC7826F6 - 72FDF0D8F298666B53212D1DB63CC365E9B0E5194E333F479BD93ECF6CCC56A7 - 69B63CD9582A6CF515D26CED31CD96C7B474D8F298964D9D3A4EE38ED771742C - 6F41476226DC8AA68E6435432FB38F75B899C6AF9C77A34AA786A66B6B3B440C - 4D63D6C22946B93B449CCA5F6B964FA382B1F00E235F22C9F5CBD02CCA5EAA02 - D3D0D783AE402366E89130A38CAA2A73E42EF1DDB0B12625A4D7E1A9CE95C05A - 87D3B7E6E65A1556F873CAD8A1F3A631DD36F4F9D76EF34890DB7D73D19861A5 - 64E64D317BDB0BDFBAF1513CFAA8B64B7094116FABCFB4648E44EB5F680D9FE3 - 4BAC2BD96C6516D6F6C437430FE2C10743F8E69EB6F8D4666B7321CD2644B231 - 5B9B0B65B6FA4CB3F5A79066ABD3345B9B87D3D261CB639AADCF999AAD3CD36C - 794CB3E51949D36DD2B8C3759C769BA6C389F21674A843E750048DDD7ED92153 - 80D475AA29C9A15E04BBDA8540F0A1A52D88AE9E78A2BE9E2E04DB6C2FBC0FA3 - 75B02136A5196E9D13172DFE56D4F43A65CF4377C25A3693E4FA554401CA9665 - F8D507DA23CA8ABDB49FCAA0756BAAEE5EA05D564C02CD8FEEC6886A935E7397 - 58E7502484817A1253A9CE95571D441803D5F344B86D1D6321FA3DBAD0176926 - D8D2EA30DB916E14DAAD8FEE78DB8DCF2B2C95B9D3676BE9B0E52994D9FA938D - D9CA34CD96C7345B1ED36C794CB3E5A924B3099D4299ADBEE1B474D8F29866FB - 3E9866CB639A2D8F69B63CA6D9F29866CB93A9D93E2FD36C794C4B872D4F3666 - EBAF69B63C6E33D379B54987EB63990B3A42BDC45E8A1143D4D18892ECB4B181 - 8046F4BA7A6242A2672084D9D629DA00423AC29CD28C2EC540209EC7D7D226E2 - 3CB0D52F2940D97A0D9DE87320D61F0195618ABDFA2E840723227C01BAC341B4 - B917B4C9F44134E873E06B415B300CCAE279AEBCEA9004D0181B2A7453887E57 - 3E744E6DB8C3BDD211B6381D661ECD9B8B0ED368B7FBA64268FF70996EA797D9 - F20C97D9DA938DD9CA1C4EB3B5291BB395592A962FB632B331DBF92AA4D9EA2C - A4D9EA34CD26A44CB395699AAD4C6DB6F4A6A5C396C7345B7B4DB3B5C9345B99 - F99886DCEE3A34DA6F86BB8F1520E814428CCC0B059C51259AC28B6D96884004 - 2BEA303B34204794A21DED18689C61199D2B009EF51718D967A73F7168A7AF33 - DA252DE7EDAFA9CE55A1EA60F2415FC41AD3EFBED04DDC71EE1B9446FBF50D46 - A773A3D315CBCCFA6D66CB335C960E5B1ED36CFD31CDF663639AAD4CD36C659A - 66CB938DD9CACCC66C6516CA6CF56563B6324DB3E531CD96A79066AB331BB37D - 9F4CB3D5695ABED8CA2C17B39D2FD36C794C734361FA73B1A5D1F1669CFB4894 - B7A0EBEB30A632A358D01D46A0DA9FB859428E4EC90412DF8C46A07B0EE674D7 - 248F58A5C3370535E156CC5143622474ACD38329EAF724D3B25DD088564D6B93 - 731EA80C912B51E0097C33D018B0853BE96333AB4288B677C547ECACE7CAAB8E - 5CC9B1DFA305F362B5912E9EB0A571DF0C68113FB9D399BEE998664B679A2D4F - 36662BD3345B9E52315B7B4DCB175B99D998ADCDA6D9F214D26C75968BD9FA93 - 8DD9CACCC66C659A962FB632B3319BD031CD96479BADBF85345B9DD9583A6C79 - 4CCBB64D14AFCBB51D09994EB9CB93BA2918D4537F557EB4D6F46221098FBAD9 - 08A1157E0A6F1A448D394246E2464886AE9A86EC9F57476BF6E463429C3A9B44 - 49D6E9C154F57B9261D949D0481AD0DA441B16441911F2386B0AA5C939689A96 - EE15C22F1EEE4C4D3BE969AA5A86CBB571C6FA37EBB9F2AA235772EDF7E884CE - 9189979F8EE64DC2746BB4DB3C9299371833BC58960E5B9EE1327D2E46CA6C6D - 32CD96271BB395699A2D4F21CD5667B998AD3FD998ADCC6CCC566621CD56A769 - 3691669A2D8F69B63AB5D9D28F26D3F73D7D3EB4DF3CBACF13C16F8AC8079A5A - F50FA22D978719337686F99C96DA838509B7DB3433CC749B0FFC35FDA9DCDA4F - F6B7E70771F4C15363F1EEA36914664261A94817EF2ECF4DBEE5A722DFB2F3A9 - 9B2876FE916E1FE38DFE112E16E9CACF373E1DF9E41FE9B66911E545BEED7397 - 4FE94D33C59A769B47335E9B0C57E53139D037A735F139784CDEF039B543176C - 3ACC346EB7F69B6E82DCF2E660DC2C749AB82DC4E5871C82430F3D14871D7618 - 0E3FFC705CD1AFFF9AEEC7155FFA12BE64D8597F7C33317FFF9538E28823945D - 897E33AEEA4DFCE99C2FE3CB5F5676CE9FB042969BAF2DC255D383E85E69EB4F - A6B608736A6B516BD89C2712EBB1E78B5B3A6C7962B6E24EFCF0E81FE2CE1596 - B80CCD6C6B2A7BF2DA6370CCB54FBAC29FC475C75E80F96FD188CB53567762DA - F3459899BFF866EB73A1CC565F21CD56A769B63CD998ADCC6C2C1DB63CA6A5C3 - D6666DB6F2B2315B9985345B9DF91AE1E5D675EAA349423AF97F2643129FE556 - DF15446FEC91214C6EF03925F40549986EC2ED27DC6174A1BB49558E76D3D1ED - 26336F20F4B05CE010FCF8FE17F1C20B2FE0F9FB662372413B16CAB4221F0EC6 - A5F73E87E79E23BB11FE6B1B70F815FD4EDE157FC4591701373CFB2C9E25BB67 - 3FFC538BC11577E0AC2F9D8ED7CE7D06CF3CA3ECF22A2C8C8945C7CC765555F5 - E3CA23CFC61D6F9A611EE6F42AA1ACEC8C4A3808AD772DC2A245C2E636A0E7E2 - ABB0C8569787D9CBCDD0F6FE57742EECC4B7F7A2B29EC09CAF9C876E97B8B3E6 - 33CC4CEB694238CE7BF5EBF8FAABF392C4A33C8369DCF130C7DCE1C5345B9F0B - 65B6FA0A69B63A4DB3E5C9C66C659A66CB639A2D8F69B63CA6D9F29866CBA3CD - 963E1BB3955948B3D5998D7995A98F6EB7BEDE34DA6D86112CE8B2423D226548 - 1B4FB5E6CFE83DA7EE8B311DE9D2DBE229CC347DA3D0711A9B9B8E31B713E0F8 - F7DA077E44F0FA1B32CA452DDAEEBD1407CFFF2B1692F79FCBF1E2C1FB616F19 - 27D8EBDFF06FB5E478037FB8EC1AF86E7816FF21FD8A587C1C7D53734CB481FE - 2584D94DA7D3FDC8C944FD5555AACCDA63713A96E19F2B12EBC9C7AC751A164F - 2BFC49E7229BFCDEB6B2FF51E06BDFC577BF063CDABFD2881365D007A0CBB3B8 - CD72E4B932FC236DF9622BB390667E4E36B3E5C9C66C659A66CB639A2D8F69B6 - 3CA6D9F29866CBA3CD963E1BB395998DD9CA34ADD0B8CB4EE5A6F611663B636D - 97310CC3943CFAA2766386EB0BDC6D26B678327D53D06E3AC6D2D33F1D177E0C - F3CF380FDFDB47A5A77F5AF490ED730C4E3E643E1E0B0BF7D1C763E68BD7E0B2 - 3FAE88C793ADF8071E7A71268E3F3A7E53725BF8BF0F97D3BBD2FE9BE4E142FC - F7E117E16EBC886B1B741810BEC298F2BD22ACF2CB28E976EABB0367C7A67D8F - C095E628A0883BE7C82371A4B073EEB803BF3AF21CDCA1445B02E1BFE1CF079D - 80AFECA5FC6FFC11E71E75148E92761516C9F216E1AAA3CEC59F16FD291677EE - 9F56C4FA54B5221E4E76D522DD8E95E80E4EC7F4E98E39E1CEB4F19F56D0F162 - F46000A16F89F8AB16C5CA6A0E04105076756C3AF8095C1D68C6D557378BF066 - 34379B71C29EB81A81E66EAC14EEAAAA15083F029C203AB5D7574E001E096385 - 6E2B99E8A693CFCBADCD0C5B893B9B2DD3D42BEF44736CFA7A0E9E106134AD7D - 75ADD3D6DADAABB148B4A7DBC87BF522D58E1CCCB6503F1BB395998D259E9FEC - CD566636662BD3345B1ED36C794CB3E531CD96C7345B1E6DB6F4D998AD4CD3F2 - C556673E466DF2F2BBDD84D907D3CD828E61CA08BA78CD0BD88D57BC3B2C9332 - C89C1B09A57D1E57D51D88830E3A0807FF08F8F57F1D1D4BE3CE23CD0914FF1D - 8DCB9EBF0F273F789A5C8377F93F64728783F7C33EE2A06F566E3BFA3F9FC7F3 - CF3F2FA77167DE7D33FEB84294456E3DC57BD9D132DD57DAD474EEB337E09B94 - 4E4DC712CE5108C1866BE1BB5E4DEBF65C82E8453FC01FDEA0F830AE38FDBA58 - DC2FAB1E168251F7471CB11873673A62EFC8C78FC3D3B7FD3BF691ED5B845FCD - 7C0427DEFD149E7A4A580770CB1DCEDA41509E5BAAF0FF28FCEE8B81B9BF10A2 - 4CE7990B5F87CA23E296CD12E291DADBFF3BCCF585F0E4934F4AFBB95E8620DB - 528B9F3F19C2E93808B3E68BF89FD7CAB2AE3A23045FC849FFE4FC59A22C2124 - 653D946F31964DFE059E78E266DC7C56037AFED6AFFA5485FEBFF5A0E1ACEF60 - 2FE11EB3328C47AA4EC4D17B8B7C7B1F8D13AB1E4178A573FE9DCF5DE449E1D6 - 6592519870A06AD1EF11F2CD75A6A985FD3440F1A2BDDF7A0427C4A6AF81DB84 - D0A57AAA84507D55B475D1A29FA1F6893FA0C3C8FBB35ADD96F233F3DCD8CC96 - 673499ED9C646AE9B0E531CDD69E6CCC5666BEE66EB7E9F7C21DC7BB5C9951CD - 48EE72259E7B75B5DCE54A98F1DA6D3B9A6686996E32F70E551DEF0E27FF5F9F - 1BA4D85898F89FE3D665AA3CBA0C9374BB54A9DC54B8CBCB96B4D953244857B7 - 7306BCC9B7ED698ACF9BFCCF6D911B388A49F5433D1CE45D7FBED953D43FA62A - CFB1A6347D4BD7F5FC3F9BD4F949149AE8FAE8288D44A30ED761E416A17490F9 - 294CF99DF4E29FB860F98A65462DC329E80877BC97A023B49F8EA69BD022CA1D - 671AE1166FDA6CE15E694DD3659AE8702F8A1D9F0E777B4DF22DBBD86D4F47B9 - 97CF78E3FC80178F7CCB1FC9FCE9F2BA05939B62B73D97F84C46FE6C6912C2C4 - 05CB572C336A29B4A023525D52EE3853D01166BC76DB8E6E33C34DB7B64CC49A - 36775AC216A671FBB32595E022D2959F4FFDC52C9BC8377F3AD29DBB7C2976FB - 4792747DA31FC891A4D8F5A7133DE9C8B77DF9E44F97B7D86D2BB460A4F4DA74 - D966980EF70A8BA5175FEACABD6219260D232EE8E8C1C2FB4E52BEC478EDF63A - 6A9145D0D1ED368D708B326D5EE1A611DAED16113ADE8B74F1E92866F9E9F2E6 - 2B98F2ED7B3A8A7D6ECB997CFBA67F284B9562B72FDFF2D3E54F159F4FDE4CC8 - B7FC42D76F8A3542BBBDCC26EEA4892F7DE55ED10C938672167474342DD33053 - C099F1A9049F468799B8FD6EF28D4F473AD1954FF9C56E7B3ACABDFC623392ED - A71FD05226DFF68D64FE62D7AD47C1BC2876FDEE78EDA7632AB309399D8FE2F2 - 1B732D15A21DA8353B594BEF35CD863E3457358BFFA783D219F554D53A2FC5CF - 092A2B9FFCD9A2DAEEF1DED568476D9EFD614602FD5D74932ADCFDD7A04687B9 - 6F1ADAAF31E386C3D2216F646C6569B6CFDBB474D8F2948BD9CE07DBF098EDF3 - 302D1DB63CD9980D5B3A32B3CD36741A795461E50B8939F952F9F888426FCD20 - 222ADA4E2A31954E6805105275C977D4CB97E2970B010406DA2D7DEBC39CD6B0 - 7233C5C4EBA2D498F1DAED7534312F785B3C8599E1DA6FB34CE2B3C15646A958 - 3A6C79D80A67FAC76A349AED7CB00D8FA5C3966738CDFC7E68CC78B769CA5CD0 - 45D1D1D48A9ADE856831DE1555D7393C6F1BF0B5B42118EEC682321AD5AAA901 - BADD0DEEEB41573088A0F232E581BE90132E68712330715FF0DA6F9A57B86995 - FA03A47F5CBDCC96876DF8CCF699646AB6F2B2315B99A6D9F20CA7D9DA649A2D - 0FDBF0583A6C79C8F467972A8D9711E52DE8A20BD01D0EA221957A4B988EA569 - 551A81AB4717C268F58BB08429C85471E9E96BD6F5B8F326BEAF34B9D8C4E950 - CF728CBED47674248E2426F5D34EF5EC36D4B4CE31E245DBDA07109ADDA0FC0E - F636A8D1CB8EE6585CAD31DC57B8763BF53437D334702653E1E50DF53D53745A - 5B1E334E9BC6ED277498BEF96B74B86984BED9646BB6F24AC5D261CBC3561E66 - FB2E9A66CBC3C65608B37DDF32318DBB3C5B98360DB9CB7C844E10A8865F399D - 7560D4492D18843030A7637B81F60E3F3A8523A8A74E3B4D355897222E996847 - 3BBA028D98A14607EB3A553D5446979EDA2431E747776344C50D21B1588AAF07 - 7AE3F5D9CBA1BED068A413370FDD42786A6CFD8C0BAD44EAD010EC428F564924 - 8A11EF83C6DE064288DDC106554F1061431C16B6DD610C54CF13E1A3E7DDAE1A - F7456A1EDDD8E2C96D86DBE26C61FAA6A2E37478B1CDBCA10DB7D95EF9649A2D - 4F21CD763E86D36C6D32CD96A752CCD65FD36C7986D36C6D32CD96A794CCD6E6 - D162B6F3918BE9FBB0BB4C1333ACFC055D38BE5ECED7B2D01113CA8FE8520CE8 - D136EA747D97489E7A755D7AE2E5F95B6BD0BBB005312DD4A747AE68944FA146 - 11DBCC396183EE2647EC25883C6B39A22F811066AB7472BAD77166DDCFBAD921 - 0CB43B6BFFFAE608B1D566F441636B8344885DDD88BA06D186012CD51AACA0ED - 0EA0D1AD322B04EAAB1B5B582E98E5D04D40E37C2EDE370242FBC9F40D44DFA0 - DC37944AB174D8F214D2CCF3CBC6564966FBBEB3799BBEDF98E7CF7D1E355E61 - E52DE87C5350630A0A2B41F4CA5123656946DDD213DF1491307A44538772A08D - C223080554784A68234220517CE5540E91453F7D33D0886E2CE8EB40FB405C6C - C5C8A50DC3D1EE518479A16A7458BA236186B9C3CD30B79F7087997E327DC329 - 1573B72F1BB395679A2DCF709AAD4DA6D9F214D26C759A66CBC39699D9CEA769 - B63C85345B9DA6D9F2B06566B6F399CACC3CE476DF7735A9C288321FA1ABC36C - DA69EAF7586725055F578AE9C702121944584FFFCA513919EA88A780571B0268 - 9CB710BDA88FAF45F32C47F425DC8A39AAA372BAD771E6D04F1F5ADA6AD05ADF - 0A34CE481E9DF36A432A86A5DDA313F3E2CD04DBC5AE4DE3E5D761A9FCA566E6 - 8D315BB395679A2D4F36662BB392CCD667D36C79468BD9CE8769B63C6C8ED9CE - 572999ADCD8532F7FDD6E627DCF1B26DD257C6C869D65EA05E758EA6FB0642F3 - D4AED73A74CA678BF8639D7716EBD33A3235D5672EDE97A48A4B41DD6C84D00A - 3FD5D134889AD80895104F0B7B5163B4C15D6C5D67048DDD229E9E9FE7598EE8 - 4B6F105DF54E194D688C4F5D7AF63305544FC0632AD8B30D2918AE765708D457 - 37B630373A4DBA23618669336F48669CE9B6F92BD5F4F9F0325B1ED36C79D8E2 - 665B97988DD9CA2C15B3B5D7345B1EB6CCCC76AD8D4673DF874DBF3E4FFA28E3 - 86689E8B293F688AD33F88B672DB345062ED2EC69B22884C2E2B4A436F8A38CC - E35DAE84F69BE1EE30779C2D3E13B77EE3820E37E36CEE4CC936BD9B91CC3FD2 - 6DCF9791AEBFD814B37FFA47B25C2976FB8B597EBE65977A7E5BBC0EA3A3DB6D - FA49C069B73B8E055D99428F08A91F0821626ECA28034AADDD2329E888675F5D - 9D91A0236CEE4C8EE9C26C6EFD1A30C22B4DA6649BDECD48E61FE9B6179B526F - 1F933BFA87BE5814B3FC7CCB2EB7FC945EE7B1B94D33C313DDC0FF071C472B26 - 2E1568DD0000000049454E44AE426082} - end> - Align = Client - Size.Width = 567.000000000000000000 - Size.Height = 323.000000000000000000 - Size.PlatformDefault = False - end - end - object TabItem2: TTabItem CustomIcon = < item end> @@ -1618,17 +633,17 @@ object Form1: TForm1 7E72660CD10000000049454E44AE426082} end> Align = Client - Size.Width = 567.000000000000000000 - Size.Height = 323.000000000000000000 + Size.Width = 568.000000000000000000 + Size.Height = 322.000000000000000000 Size.PlatformDefault = False end end - object TabItem3: TTabItem + object TabItem2: TTabItem CustomIcon = < item end> IsSelected = False - Size.Width = 63.000000000000000000 + Size.Width = 62.000000000000000000 Size.Height = 26.000000000000000000 Size.PlatformDefault = False StyleLookup = '' @@ -2162,16 +1177,16 @@ object Form1: TForm1 888700FF3F3FF5829A5880981F0000000049454E44AE426082} end> Align = Client - Size.Width = 567.000000000000000000 - Size.Height = 323.000000000000000000 + Size.Width = 568.000000000000000000 + Size.Height = 322.000000000000000000 Size.PlatformDefault = False end end - object TabItem4: TTabItem + object TabItem3: TTabItem CustomIcon = < item end> - IsSelected = False + IsSelected = True Size.Width = 41.000000000000000000 Size.Height = 26.000000000000000000 Size.PlatformDefault = False @@ -2187,18 +1202,25 @@ object Form1: TForm1 'This sample uses the Project Menu option to enable and select th' + 'e Python version.' + '' + + 'Set the "Scanner" options of "PyEmbeddedEnvironment1" to automat' + + 'ically identify Python.' + 'Please check other tabs for more info.' + '' + + 'Scanning for chosen Python version of the respective Target Plat' + + 'form:' - 'You must define the "PYTHONENVIRONMENTDIR" environment variable ' + - 'in your Delphi IDE and set its path to the "PythonEnvironments" ' + - 'repository folder.' - 'Set the scanner options to automatically identify Python') + '----------------------------------------------------------------' + + '-------------') Align = Client - Size.Width = 567.000000000000000000 - Size.Height = 323.000000000000000000 + Size.Width = 568.000000000000000000 + Size.Height = 322.000000000000000000 Size.PlatformDefault = False TabOrder = 4 - Viewport.Width = 563.000000000000000000 - Viewport.Height = 303.000000000000000000 + Viewport.Width = 564.000000000000000000 + Viewport.Height = 318.000000000000000000 end end end @@ -2217,12 +1239,12 @@ object Form1: TForm1 Scanner.AutoScan = True Scanner.ScanRule = srFileName Scanner.DeleteEmbeddable = True - Left = 272 - Top = 112 + Left = 448 + Top = 128 end object PythonEngine1: TPythonEngine AutoLoad = False - Left = 272 - Top = 16 + Left = 496 + Top = 72 end end diff --git a/samples/environments/deploy/SimpleDeployable/Unit1.pas b/samples/environments/deploy/sample_00_SimpleDeployable/Unit1.pas similarity index 81% rename from samples/environments/deploy/SimpleDeployable/Unit1.pas rename to samples/environments/deploy/sample_00_SimpleDeployable/Unit1.pas index 7524427..7d2e158 100644 --- a/samples/environments/deploy/SimpleDeployable/Unit1.pas +++ b/samples/environments/deploy/sample_00_SimpleDeployable/Unit1.pas @@ -16,10 +16,8 @@ TForm1 = class(TForm) TabControl1: TTabControl; TabItem1: TTabItem; TabItem2: TTabItem; - TabItem3: TTabItem; - Image1: TImage; Image2: TImage; - TabItem4: TTabItem; + TabItem3: TTabItem; Memo1: TMemo; Image3: TImage; procedure PyEmbeddedEnvironment1PluginInstall(const APlugin: TObject; @@ -50,47 +48,62 @@ implementation {$R *.fmx} +// Set the default view tab to "Run" procedure TForm1.FormShow(Sender: TObject); begin - TabControl1.ActiveTab := TabItem4; + TabControl1.ActiveTab := TabItem3; end; +// "AfterActivate" Event of PyEmbeddedEnvironment1 is assigned +// to the below procedure procedure TForm1.PyEmbeddedEnvironment1AfterActivate(Sender: TObject; const APythonVersion: string; const AActivated: Boolean); begin Memo1.Lines.Add(Format('Python %s is active.', [APythonVersion])); end; +// "AfterSetUp" Event of PyEmbeddedEnvironment1 is assigned +// to the below procedure procedure TForm1.PyEmbeddedEnvironment1AfterSetup(Sender: TObject; const APythonVersion: string); begin Memo1.Lines.Add(Format('Python %s setup done.', [APythonVersion])); end; +// "BeforeActivate" Event of PyEmbeddedEnvironment1 is assigned +// to the below procedure procedure TForm1.PyEmbeddedEnvironment1BeforeActivate(Sender: TObject; const APythonVersion: string); begin Memo1.Lines.Add(Format('Activating Python %s.', [APythonVersion])); end; +// "BeforeSetUp" Event of PyEmbeddedEnvironment1 is assigned +// to the below procedure procedure TForm1.PyEmbeddedEnvironment1BeforeSetup(Sender: TObject; const APythonVersion: string); begin Memo1.Lines.Add(Format('Setting up Python %s.', [APythonVersion])); end; +// "OnError" Event of PyEmbeddedEnvironment1 is assigned +// to the below procedure procedure TForm1.PyEmbeddedEnvironment1Error(Sender: TObject; const AException: Exception); begin Memo1.Lines.Add(Format('An error has occurred: %s', [AException.Message])); end; +// "OnPluginInstall" Event of PyEmbeddedEnvironment1 is assigned +// to the below procedure procedure TForm1.PyEmbeddedEnvironment1PluginInstall(const APlugin: TObject; const AInfo: TPyPluginInfo); begin Memo1.Lines.Add(Format('Installing %s...', [AInfo.Name])); end; +// "OnReady" Event of PyEmbeddedEnvironment1 is assigned +// to the below procedure procedure TForm1.PyEmbeddedEnvironment1Ready(Sender: TObject; const APythonVersion: string); begin diff --git a/samples/environments/deploy/SimpleDeployable/enable_python.png b/samples/environments/deploy/sample_00_SimpleDeployable/enable_python.png similarity index 100% rename from samples/environments/deploy/SimpleDeployable/enable_python.png rename to samples/environments/deploy/sample_00_SimpleDeployable/enable_python.png diff --git a/samples/environments/deploy/SimpleDeployable/scanner_options.png b/samples/environments/deploy/sample_00_SimpleDeployable/scanner_options.png similarity index 100% rename from samples/environments/deploy/SimpleDeployable/scanner_options.png rename to samples/environments/deploy/sample_00_SimpleDeployable/scanner_options.png diff --git a/samples/environments/deploy/ManuallyLoad/ManuallyLoad.dpr b/samples/environments/deploy/sample_01_ManuallyLoad/ManuallyLoad.dpr similarity index 100% rename from samples/environments/deploy/ManuallyLoad/ManuallyLoad.dpr rename to samples/environments/deploy/sample_01_ManuallyLoad/ManuallyLoad.dpr diff --git a/samples/environments/deploy/ManuallyLoad/ManuallyLoad.dproj b/samples/environments/deploy/sample_01_ManuallyLoad/ManuallyLoad.dproj similarity index 100% rename from samples/environments/deploy/ManuallyLoad/ManuallyLoad.dproj rename to samples/environments/deploy/sample_01_ManuallyLoad/ManuallyLoad.dproj diff --git a/samples/environments/deploy/ManuallyLoad/Unit1.fmx b/samples/environments/deploy/sample_01_ManuallyLoad/Unit1.fmx similarity index 76% rename from samples/environments/deploy/ManuallyLoad/Unit1.fmx rename to samples/environments/deploy/sample_01_ManuallyLoad/Unit1.fmx index b63d3bc..eda72a0 100644 --- a/samples/environments/deploy/ManuallyLoad/Unit1.fmx +++ b/samples/environments/deploy/sample_01_ManuallyLoad/Unit1.fmx @@ -2,8 +2,8 @@ object Form1: TForm1 Left = 0 Top = 0 Caption = 'ManuallyLoad' - ClientHeight = 189 - ClientWidth = 479 + ClientHeight = 201 + ClientWidth = 432 Position = MainFormCenter FormFactor.Width = 320 FormFactor.Height = 480 @@ -15,14 +15,17 @@ object Form1: TForm1 DataDetectorTypes = [] Lines.Strings = ( 'Set the PyEmbeddedEnvironment1 "AutoLoad" property to False. ' - 'Check out the Delphi code.') + 'Check out the Delphi code.' + '' + 'Loading Python from user code level:' + '-----------------------------------------') Align = Client - Size.Width = 479.000000000000000000 - Size.Height = 189.000000000000000000 + Size.Width = 432.000000000000000000 + Size.Height = 201.000000000000000000 Size.PlatformDefault = False TabOrder = 2 - Viewport.Width = 475.000000000000000000 - Viewport.Height = 185.000000000000000000 + Viewport.Width = 428.000000000000000000 + Viewport.Height = 197.000000000000000000 end object PythonEngine1: TPythonEngine AutoLoad = False @@ -31,8 +34,8 @@ object Form1: TForm1 APIVersion = 1013 RegVersion = '3.9' UseLastKnownVersion = False - Left = 224 - Top = 32 + Left = 288 + Top = 56 end object PyEmbeddedEnvironment1: TPyEmbeddedEnvironment BeforeSetup = PyEmbeddedEnvironment1BeforeSetup @@ -48,7 +51,7 @@ object Form1: TForm1 Scanner.AutoScan = True Scanner.ScanRule = srFileName Scanner.DeleteEmbeddable = True - Left = 224 - Top = 96 + Left = 288 + Top = 112 end end diff --git a/samples/environments/deploy/ManuallyLoad/Unit1.pas b/samples/environments/deploy/sample_01_ManuallyLoad/Unit1.pas similarity index 92% rename from samples/environments/deploy/ManuallyLoad/Unit1.pas rename to samples/environments/deploy/sample_01_ManuallyLoad/Unit1.pas index 70e2585..e31db6e 100644 --- a/samples/environments/deploy/ManuallyLoad/Unit1.pas +++ b/samples/environments/deploy/sample_01_ManuallyLoad/Unit1.pas @@ -39,9 +39,12 @@ implementation {$R *.fmx} +// We're loading Python manually on creation of the Form procedure TForm1.FormCreate(Sender: TObject); begin + // Manually setup by the application developer with the "Setup()" method PyEmbeddedEnvironment1.Setup(); + // Manually activated by the application developer with the "Activate()" method PyEmbeddedEnvironment1.Activate(); end; diff --git a/samples/environments/deploy/AutoLoad/AutoLoad.dpr b/samples/environments/deploy/sample_02_AutoLoad/AutoLoad.dpr similarity index 100% rename from samples/environments/deploy/AutoLoad/AutoLoad.dpr rename to samples/environments/deploy/sample_02_AutoLoad/AutoLoad.dpr diff --git a/samples/environments/deploy/AutoLoad/AutoLoad.dproj b/samples/environments/deploy/sample_02_AutoLoad/AutoLoad.dproj similarity index 100% rename from samples/environments/deploy/AutoLoad/AutoLoad.dproj rename to samples/environments/deploy/sample_02_AutoLoad/AutoLoad.dproj diff --git a/samples/environments/deploy/AutoLoad/Unit1.fmx b/samples/environments/deploy/sample_02_AutoLoad/Unit1.fmx similarity index 78% rename from samples/environments/deploy/AutoLoad/Unit1.fmx rename to samples/environments/deploy/sample_02_AutoLoad/Unit1.fmx index 4af41a3..81bf741 100644 --- a/samples/environments/deploy/AutoLoad/Unit1.fmx +++ b/samples/environments/deploy/sample_02_AutoLoad/Unit1.fmx @@ -2,8 +2,8 @@ object Form1: TForm1 Left = 0 Top = 0 Caption = 'Automatically Load' - ClientHeight = 189 - ClientWidth = 479 + ClientHeight = 212 + ClientWidth = 452 Position = MainFormCenter FormFactor.Width = 320 FormFactor.Height = 480 @@ -16,14 +16,17 @@ object Form1: TForm1 'Set the PyEmbeddedEnvironment1 "AutoLoad" property to True. ' 'It will load the Python environment automatically as you run the' + - ' application.') + ' application.' + '' + 'Loading Python automatically:' + '---------------------------------') Align = Client - Size.Width = 479.000000000000000000 - Size.Height = 189.000000000000000000 + Size.Width = 452.000000000000000000 + Size.Height = 212.000000000000000000 Size.PlatformDefault = False TabOrder = 2 - Viewport.Width = 475.000000000000000000 - Viewport.Height = 185.000000000000000000 + Viewport.Width = 448.000000000000000000 + Viewport.Height = 208.000000000000000000 end object PythonEngine1: TPythonEngine AutoLoad = False @@ -32,8 +35,8 @@ object Form1: TForm1 APIVersion = 1013 RegVersion = '3.9' UseLastKnownVersion = False - Left = 224 - Top = 32 + Left = 296 + Top = 48 end object PyEmbeddedEnvironment1: TPyEmbeddedEnvironment BeforeSetup = PyEmbeddedEnvironment1BeforeSetup @@ -49,7 +52,7 @@ object Form1: TForm1 Scanner.AutoScan = True Scanner.ScanRule = srFileName Scanner.DeleteEmbeddable = True - Left = 224 - Top = 96 + Left = 296 + Top = 104 end end diff --git a/samples/environments/deploy/AutoLoad/Unit1.pas b/samples/environments/deploy/sample_02_AutoLoad/Unit1.pas similarity index 96% rename from samples/environments/deploy/AutoLoad/Unit1.pas rename to samples/environments/deploy/sample_02_AutoLoad/Unit1.pas index 66be4ac..40e05c8 100644 --- a/samples/environments/deploy/AutoLoad/Unit1.pas +++ b/samples/environments/deploy/sample_02_AutoLoad/Unit1.pas @@ -56,6 +56,7 @@ procedure TForm1.PyEmbeddedEnvironment1BeforeActivate(Sender: TObject; Memo1.Lines.Add(Format('Activating Python %s.', [APythonVersion])); end; +// PyEmbeddedEnvironmet1 will load Python automatically before setting it up. procedure TForm1.PyEmbeddedEnvironment1BeforeSetup(Sender: TObject; const APythonVersion: string); begin diff --git a/samples/environments/deploy/ExtractPython/ExtractPython.dpr b/samples/environments/deploy/sample_03_ExtractPython/ExtractPython.dpr similarity index 100% rename from samples/environments/deploy/ExtractPython/ExtractPython.dpr rename to samples/environments/deploy/sample_03_ExtractPython/ExtractPython.dpr diff --git a/samples/environments/deploy/ExtractPython/ExtractPython.dproj b/samples/environments/deploy/sample_03_ExtractPython/ExtractPython.dproj similarity index 100% rename from samples/environments/deploy/ExtractPython/ExtractPython.dproj rename to samples/environments/deploy/sample_03_ExtractPython/ExtractPython.dproj diff --git a/samples/environments/deploy/ExtractPython/Unit1.fmx b/samples/environments/deploy/sample_03_ExtractPython/Unit1.fmx similarity index 76% rename from samples/environments/deploy/ExtractPython/Unit1.fmx rename to samples/environments/deploy/sample_03_ExtractPython/Unit1.fmx index f77fbb1..88e9aa3 100644 --- a/samples/environments/deploy/ExtractPython/Unit1.fmx +++ b/samples/environments/deploy/sample_03_ExtractPython/Unit1.fmx @@ -2,8 +2,8 @@ object Form1: TForm1 Left = 0 Top = 0 Caption = 'Extract Python Zip File' - ClientHeight = 189 - ClientWidth = 543 + ClientHeight = 232 + ClientWidth = 452 Position = MainFormCenter FormFactor.Width = 320 FormFactor.Height = 480 @@ -16,25 +16,28 @@ object Form1: TForm1 DataDetectorTypes = [] Lines.Strings = ( 'Set the PyEmbeddedEnvironment1 "AutoLoad" property to False. ' - 'Check out the Delphi code.') + 'Check out the Delphi code.' + '' + 'Extracting Zipped Python Embeddable:' + '------------------------------------------') Align = Client - Size.Width = 543.000000000000000000 - Size.Height = 167.000000000000000000 + Size.Width = 452.000000000000000000 + Size.Height = 210.000000000000000000 Size.PlatformDefault = False TabOrder = 2 - Viewport.Width = 539.000000000000000000 - Viewport.Height = 163.000000000000000000 + Viewport.Width = 448.000000000000000000 + Viewport.Height = 206.000000000000000000 end object StatusBar1: TStatusBar - Position.Y = 167.000000000000000000 + Position.Y = 210.000000000000000000 ShowSizeGrip = True - Size.Width = 543.000000000000000000 + Size.Width = 452.000000000000000000 Size.Height = 22.000000000000000000 Size.PlatformDefault = False TabOrder = 5 object Label1: TLabel Align = Client - Size.Width = 543.000000000000000000 + Size.Width = 452.000000000000000000 Size.Height = 22.000000000000000000 Size.PlatformDefault = False TextSettings.WordWrap = False @@ -48,8 +51,8 @@ object Form1: TForm1 APIVersion = 1013 RegVersion = '3.9' UseLastKnownVersion = False - Left = 224 - Top = 32 + Left = 296 + Top = 40 end object PyEmbeddedEnvironment1: TPyEmbeddedEnvironment BeforeSetup = PyEmbeddedEnvironment1BeforeSetup @@ -66,7 +69,7 @@ object Form1: TForm1 Scanner.AutoScan = True Scanner.ScanRule = srFileName Scanner.DeleteEmbeddable = True - Left = 224 - Top = 96 + Left = 296 + Top = 104 end end diff --git a/samples/environments/deploy/ExtractPython/Unit1.pas b/samples/environments/deploy/sample_03_ExtractPython/Unit1.pas similarity index 96% rename from samples/environments/deploy/ExtractPython/Unit1.pas rename to samples/environments/deploy/sample_03_ExtractPython/Unit1.pas index ed0dc09..10c2c86 100644 --- a/samples/environments/deploy/ExtractPython/Unit1.pas +++ b/samples/environments/deploy/sample_03_ExtractPython/Unit1.pas @@ -103,11 +103,13 @@ procedure TForm1.PyEmbeddedEnvironment1Ready(Sender: TObject; Memo1.Lines.Add(Format('Python %s is ready.', [APythonVersion])); end; +// Assigning the below procedure to the "OnZipProgress" event of +// TPyEmbeddedEnvironment1 component procedure TForm1.PyEmbeddedEnvironment1ZipProgress(Sender: TObject; ADistribution: TPyCustomEmbeddableDistribution; FileName: string; Header: TZipHeader; Position: Int64); begin - //Zip progress is neer synchronized, even when + //Zip progress is near synchronized, even when //the SynchronizeEvents property is set to true TThread.Queue(nil, procedure() begin Label1.Text := FileName.Replace( diff --git a/samples/environments/deploy/AsyncLoad/AsyncLoad.dpr b/samples/environments/deploy/sample_04_AsyncLoad/AsyncLoad.dpr similarity index 100% rename from samples/environments/deploy/AsyncLoad/AsyncLoad.dpr rename to samples/environments/deploy/sample_04_AsyncLoad/AsyncLoad.dpr diff --git a/samples/environments/deploy/AsyncLoad/AsyncLoad.dproj b/samples/environments/deploy/sample_04_AsyncLoad/AsyncLoad.dproj similarity index 100% rename from samples/environments/deploy/AsyncLoad/AsyncLoad.dproj rename to samples/environments/deploy/sample_04_AsyncLoad/AsyncLoad.dproj diff --git a/samples/environments/deploy/AsyncLoad/Unit1.fmx b/samples/environments/deploy/sample_04_AsyncLoad/Unit1.fmx similarity index 80% rename from samples/environments/deploy/AsyncLoad/Unit1.fmx rename to samples/environments/deploy/sample_04_AsyncLoad/Unit1.fmx index 1ed3736..8043914 100644 --- a/samples/environments/deploy/AsyncLoad/Unit1.fmx +++ b/samples/environments/deploy/sample_04_AsyncLoad/Unit1.fmx @@ -2,8 +2,8 @@ object Form1: TForm1 Left = 0 Top = 0 Caption = 'Asynchronous Load' - ClientHeight = 189 - ClientWidth = 479 + ClientHeight = 204 + ClientWidth = 427 Position = MainFormCenter FormFactor.Width = 320 FormFactor.Height = 480 @@ -16,14 +16,17 @@ object Form1: TForm1 DataDetectorTypes = [] Lines.Strings = ( 'Set the PyEmbeddedEnvironment1 "AutoLoad" property to False. ' - 'Check out the Delphi code.') + 'Check out the Delphi code.' + '' + 'Loading Python Asynchronously:' + '------------------------------------') Align = Client - Size.Width = 479.000000000000000000 - Size.Height = 189.000000000000000000 + Size.Width = 427.000000000000000000 + Size.Height = 204.000000000000000000 Size.PlatformDefault = False TabOrder = 2 - Viewport.Width = 475.000000000000000000 - Viewport.Height = 185.000000000000000000 + Viewport.Width = 423.000000000000000000 + Viewport.Height = 200.000000000000000000 end object PythonEngine1: TPythonEngine AutoLoad = False diff --git a/samples/environments/deploy/AsyncLoad/Unit1.pas b/samples/environments/deploy/sample_04_AsyncLoad/Unit1.pas similarity index 98% rename from samples/environments/deploy/AsyncLoad/Unit1.pas rename to samples/environments/deploy/sample_04_AsyncLoad/Unit1.pas index fb6a5b3..dd32453 100644 --- a/samples/environments/deploy/AsyncLoad/Unit1.pas +++ b/samples/environments/deploy/sample_04_AsyncLoad/Unit1.pas @@ -48,6 +48,7 @@ procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); ShowMessage('Waiting for background operation. Try again.'); end; +// Loading the Python Asynchronously procedure TForm1.FormCreate(Sender: TObject); var LAsyncSetup: IAsyncResult; diff --git a/samples/environments/deploy/AsyncEvents/AsyncEvents.dpr b/samples/environments/deploy/sample_05_AsyncEvents/AsyncEvents.dpr similarity index 100% rename from samples/environments/deploy/AsyncEvents/AsyncEvents.dpr rename to samples/environments/deploy/sample_05_AsyncEvents/AsyncEvents.dpr diff --git a/samples/environments/deploy/AsyncEvents/AsyncEvents.dproj b/samples/environments/deploy/sample_05_AsyncEvents/AsyncEvents.dproj similarity index 100% rename from samples/environments/deploy/AsyncEvents/AsyncEvents.dproj rename to samples/environments/deploy/sample_05_AsyncEvents/AsyncEvents.dproj diff --git a/samples/environments/deploy/AsyncEvents/Unit1.fmx b/samples/environments/deploy/sample_05_AsyncEvents/Unit1.fmx similarity index 77% rename from samples/environments/deploy/AsyncEvents/Unit1.fmx rename to samples/environments/deploy/sample_05_AsyncEvents/Unit1.fmx index b454b0f..e7cd5a1 100644 --- a/samples/environments/deploy/AsyncEvents/Unit1.fmx +++ b/samples/environments/deploy/sample_05_AsyncEvents/Unit1.fmx @@ -2,8 +2,8 @@ object Form1: TForm1 Left = 0 Top = 0 Caption = 'Asynchronous Events' - ClientHeight = 189 - ClientWidth = 479 + ClientHeight = 256 + ClientWidth = 444 Position = MainFormCenter FormFactor.Width = 320 FormFactor.Height = 480 @@ -21,14 +21,16 @@ object Form1: TForm1 'alse.' 'Enqueue all events.' 'Check out the Delphi code.' - '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^') + '' + 'Asynchronously loading Python and all events:' + '---------------------------------------------------') Align = Client - Size.Width = 479.000000000000000000 - Size.Height = 189.000000000000000000 + Size.Width = 444.000000000000000000 + Size.Height = 256.000000000000000000 Size.PlatformDefault = False TabOrder = 2 - Viewport.Width = 475.000000000000000000 - Viewport.Height = 185.000000000000000000 + Viewport.Width = 440.000000000000000000 + Viewport.Height = 252.000000000000000000 end object PythonEngine1: TPythonEngine AutoLoad = False @@ -36,8 +38,8 @@ object Form1: TForm1 APIVersion = 1013 RegVersion = '3.9' UseLastKnownVersion = False - Left = 224 - Top = 32 + Left = 328 + Top = 80 end object PyEmbeddedEnvironment1: TPyEmbeddedEnvironment BeforeSetup = PyEmbeddedEnvironment1BeforeSetup @@ -53,7 +55,8 @@ object Form1: TForm1 Distributions = <> Scanner.AutoScan = True Scanner.ScanRule = srFileName - Left = 224 - Top = 96 + Scanner.DeleteEmbeddable = False + Left = 328 + Top = 136 end end diff --git a/samples/environments/deploy/AsyncEvents/Unit1.pas b/samples/environments/deploy/sample_05_AsyncEvents/Unit1.pas similarity index 97% rename from samples/environments/deploy/AsyncEvents/Unit1.pas rename to samples/environments/deploy/sample_05_AsyncEvents/Unit1.pas index cb8e108..65a602c 100644 --- a/samples/environments/deploy/AsyncEvents/Unit1.pas +++ b/samples/environments/deploy/sample_05_AsyncEvents/Unit1.pas @@ -48,6 +48,7 @@ procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); ShowMessage('Waiting for background operation. Try again.'); end; +// Load Python Asynchronously procedure TForm1.FormCreate(Sender: TObject); var LAsyncSetup: IAsyncResult; @@ -57,6 +58,8 @@ procedure TForm1.FormCreate(Sender: TObject); Memo1.Lines.Add('Background task has started.'); end; +// Enqueue the procedures of all of the events below + procedure TForm1.PyEmbeddedEnvironment1AfterActivate(Sender: TObject; const APythonVersion: string; const AActivated: Boolean); begin diff --git a/samples/environments/deploy/sample_06_SimpleAndroid/SimpleAndroid.deployproj b/samples/environments/deploy/sample_06_SimpleAndroid/SimpleAndroid.deployproj new file mode 100644 index 0000000..1ebca15 --- /dev/null +++ b/samples/environments/deploy/sample_06_SimpleAndroid/SimpleAndroid.deployproj @@ -0,0 +1,898 @@ + + + + 12 + + + + 41ea5b6a + + + + + + SimpleAndroid.app\Contents\Resources\ + python3-macos-3.9.15-x86_64.zip + Python + 0 + + + True + True + + + SimpleAndroid.app\Contents\Resources\ + python3-macos-3.9.15-x86_64.zip + Python + 0 + + + True + True + + + SimpleAndroid.app\Contents\MacOS\ + python3.9 + Python + 1 + + + True + True + + + SimpleAndroid.app\Contents\MacOS\ + python3.9 + Python + 1 + + + True + True + + + SimpleAndroid.app\Contents\MacOS\ + libpython3.9.dylib + Python + 1 + + + True + True + + + SimpleAndroid.app\Contents\MacOS\ + libpython3.9.dylib + Python + 1 + + + True + True + + + + + SimpleAndroid\ + python3-windows-3.9.13-win32.zip + Python + 0 + + + True + True + + + SimpleAndroid\ + python3-windows-3.9.13-win32.zip + Python + 0 + + + True + True + + + SimpleAndroid\ + SimpleAndroid.exe + ProjectOutput + 0 + + + True + True + + + SimpleAndroid\ + SimpleAndroid.exe + ProjectOutput + 0 + + + True + True + + + + + SimpleAndroid\res\values\ + strings.xml + Android_Strings + 1 + + + True + + + SimpleAndroid\library\lib\armeabi-v7a\ + python3.9 + Python + 1 + + + True + True + + + SimpleAndroid\library\lib\armeabi-v7a\ + python3.9 + Python + 1 + + + True + True + + + SimpleAndroid\res\drawable-hdpi\ + ic_launcher.png + Android_LauncherIcon72 + 1 + + + True + + + SimpleAndroid\res\drawable-hdpi\ + ic_launcher.png + Android_LauncherIcon72 + 1 + + + True + + + SimpleAndroid\ + AndroidManifest.xml + ProjectAndroidManifest + 1 + + + True + + + SimpleAndroid\res\values\ + colors.xml + Android_Colors + 1 + + + True + + + SimpleAndroid\res\drawable-xxhdpi\ + ic_launcher.png + Android_LauncherIcon144 + 1 + + + True + + + SimpleAndroid\res\drawable-xxhdpi\ + ic_launcher.png + Android_LauncherIcon144 + 1 + + + True + + + SimpleAndroid\res\drawable-xxxhdpi\ + ic_launcher.png + Android_LauncherIcon192 + 1 + + + True + + + SimpleAndroid\res\drawable-xxxhdpi\ + ic_launcher.png + Android_LauncherIcon192 + 1 + + + True + + + SimpleAndroid\res\drawable-mdpi\ + ic_launcher.png + Android_LauncherIcon48 + 1 + + + True + + + SimpleAndroid\res\drawable-mdpi\ + ic_launcher.png + Android_LauncherIcon48 + 1 + + + True + + + SimpleAndroid\res\drawable-xhdpi\ + ic_notification.png + Android_NotificationIcon48 + 1 + + + True + + + SimpleAndroid\res\drawable-xhdpi\ + ic_notification.png + Android_NotificationIcon48 + 1 + + + True + + + SimpleAndroid\library\lib\arm64-v8a\ + python3.9 + Python + 1 + + + True + True + + + SimpleAndroid\library\lib\armeabi-v7a\ + libpython3.9.so + Python + 1 + + + True + True + + + SimpleAndroid\res\drawable-large\ + splash_image.png + Android_SplashImage640 + 1 + + + True + + + SimpleAndroid\res\drawable-large\ + splash_image.png + Android_SplashImage640 + 1 + + + True + + + SimpleAndroid\assets\internal\ + python3-android-3.9.15-arm.zip + Python + 0 + + + True + True + + + SimpleAndroid\library\lib\armeabi\ + libSimpleEmbeddableRes.so + AndroidLibnativeArmeabiFile + 1 + + + True + + + SimpleAndroid\library\lib\armeabi\ + libSimpleAndroid.so + AndroidLibnativeArmeabiFile + 1 + + + True + + + SimpleAndroid\res\drawable\ + splash_image_def.xml + AndroidSplashImageDef + 1 + + + True + + + SimpleAndroid\assets\internal\ + python3-android-3.9.15-arm.zip + Python + 0 + + + True + True + + + SimpleAndroid\library\lib\armeabi-v7a\ + libpython3.9.so + Python + 1 + + + True + True + + + SimpleAndroid\library\lib\arm64-v8a\ + python3.9 + Python + 1 + + + True + True + + + SimpleAndroid\library\lib\arm64-v8a\ + libpython3.9.so + Python + 1 + + + True + True + + + SimpleAndroid\library\lib\arm64-v8a\ + libpython3.9.so + Python + 1 + + + True + True + + + SimpleAndroid\res\values\ + colors.xml + Android_Colors + 1 + + + True + + + SimpleAndroid\ + AndroidManifest.xml + ProjectAndroidManifest + 1 + + + True + + + SimpleAndroid\res\drawable-hdpi\ + ic_notification.png + Android_NotificationIcon36 + 1 + + + True + + + SimpleAndroid\res\drawable-hdpi\ + ic_notification.png + Android_NotificationIcon36 + 1 + + + True + + + SimpleAndroid\res\drawable-xxxhdpi\ + ic_notification.png + Android_NotificationIcon96 + 1 + + + True + + + SimpleAndroid\res\drawable-xxxhdpi\ + ic_notification.png + Android_NotificationIcon96 + 1 + + + True + + + SimpleAndroid\res\drawable\ + splash_image_def.xml + AndroidSplashImageDef + 1 + + + True + + + SimpleAndroid\library\lib\mips\ + libSimpleEmbeddableRes.so + AndroidLibnativeMipsFile + 1 + + + True + + + SimpleAndroid\res\drawable-xhdpi\ + ic_launcher.png + Android_LauncherIcon96 + 1 + + + True + + + SimpleAndroid\res\drawable-xhdpi\ + ic_launcher.png + Android_LauncherIcon96 + 1 + + + True + + + SimpleAndroid\library\lib\mips\ + libSimpleAndroid.so + AndroidLibnativeMipsFile + 1 + + + True + + + SimpleAndroid\classes\ + SimpleAndroid.classes + AndroidClasses + 64 + + + True + + + SimpleAndroid\res\values\ + styles.xml + AndroidSplashStyles + 1 + + + True + + + SimpleAndroid\library\lib\armeabi-v7a\ + libSimpleEmbeddableRes.so + AndroidLibnativeArmeabiv7aFile + 1 + + + True + + + SimpleAndroid\library\lib\armeabi-v7a\ + libSimpleAndroid.so + AndroidLibnativeArmeabiv7aFile + 1 + + + True + + + SimpleAndroid\library\lib\arm64-v8a\ + libSimpleAndroid.so + ProjectOutput + 1 + + + True + True + + + SimpleAndroid\res\drawable-mdpi\ + ic_notification.png + Android_NotificationIcon24 + 1 + + + True + + + SimpleAndroid\res\drawable-ldpi\ + ic_launcher.png + Android_LauncherIcon36 + 1 + + + True + + + SimpleAndroid\res\drawable-ldpi\ + ic_launcher.png + Android_LauncherIcon36 + 1 + + + True + + + SimpleAndroid\res\drawable-mdpi\ + ic_notification.png + Android_NotificationIcon24 + 1 + + + True + + + SimpleAndroid\res\drawable-xlarge\ + splash_image.png + Android_SplashImage960 + 1 + + + True + + + SimpleAndroid\res\drawable-xlarge\ + splash_image.png + Android_SplashImage960 + 1 + + + True + + + SimpleAndroid\res\values-v21\ + styles.xml + AndroidSplashStylesV21 + 1 + + + True + + + SimpleAndroid\res\values\ + styles.xml + AndroidSplashStyles + 1 + + + True + + + SimpleAndroid\classes\ + SimpleAndroid.classes + AndroidClasses + 64 + + + True + + + SimpleAndroid\res\drawable-small\ + splash_image.png + Android_SplashImage426 + 1 + + + True + + + SimpleAndroid\res\drawable-small\ + splash_image.png + Android_SplashImage426 + 1 + + + True + + + SimpleAndroid\res\values\ + strings.xml + Android_Strings + 1 + + + True + + + SimpleAndroid\res\values-v21\ + styles.xml + AndroidSplashStylesV21 + 1 + + + True + + + SimpleAndroid\assets\internal\ + python3-android-3.9.15-arm64.zip + Python + 0 + + + True + True + + + SimpleAndroid\res\drawable-xxhdpi\ + ic_notification.png + Android_NotificationIcon72 + 1 + + + True + + + SimpleAndroid\res\drawable-xxhdpi\ + ic_notification.png + Android_NotificationIcon72 + 1 + + + True + + + SimpleAndroid\library\lib\arm64-v8a\ + libSimpleAndroid.so + ProjectOutput + 1 + + + True + True + + + SimpleAndroid\assets\internal\ + python3-android-3.9.15-arm64.zip + Python + 0 + + + True + True + + + SimpleAndroid\res\drawable-normal\ + splash_image.png + Android_SplashImage470 + 1 + + + True + + + SimpleAndroid\res\drawable-normal\ + splash_image.png + Android_SplashImage470 + 1 + + + True + + + + + SimpleAndroid\assets\internal\ + python3-android-3.9.15-arm.zip + Python + 0 + + + True + True + + + SimpleAndroid\assets\internal\ + python3-android-3.9.15-arm.zip + Python + 0 + + + True + True + + + SimpleAndroid\library\lib\armeabi-v7a\ + libpython3.9.so + Python + 1 + + + True + True + + + SimpleAndroid\library\lib\armeabi-v7a\ + libpython3.9.so + Python + 1 + + + True + True + + + SimpleAndroid\library\lib\armeabi-v7a\ + python3.9 + Python + 1 + + + True + True + + + SimpleAndroid\library\lib\armeabi-v7a\ + python3.9 + Python + 1 + + + True + True + + + + + SimpleAndroid\ + python3-windows-3.9.13-amd64.zip + Python + 0 + + + True + True + + + SimpleAndroid\ + python3-windows-3.9.13-amd64.zip + Python + 0 + + + True + True + + + + + SimpleAndroid.app\Contents\MacOS\ + libpython3.9.dylib + Python + 1 + + + True + True + + + SimpleAndroid.app\Contents\MacOS\ + libpython3.9.dylib + Python + 1 + + + True + True + + + SimpleAndroid.app\Contents\MacOS\ + python3.9 + Python + 1 + + + True + True + + + SimpleAndroid.app\Contents\MacOS\ + python3.9 + Python + 1 + + + True + True + + + SimpleAndroid.app\Contents\Resources\ + python3-macos-3.9.15-universal2.zip + Python + 0 + + + True + True + + + SimpleAndroid.app\Contents\Resources\ + python3-macos-3.9.15-universal2.zip + Python + 0 + + + True + True + + + + + SimpleAndroid\ + python3-linux-3.9.15-x86_64.zip + Python + 0 + + + True + True + + + SimpleAndroid\ + python3-linux-3.9.15-x86_64.zip + Python + 0 + + + True + True + + + SimpleAndroid\ + SimpleAndroid + ProjectOutput + 1 + + + True + True + + + SimpleAndroid\ + SimpleAndroid + ProjectOutput + 1 + + + True + True + + + + + diff --git a/samples/environments/deploy/SimpleAndroid/SimpleAndroid.dpr b/samples/environments/deploy/sample_06_SimpleAndroid/SimpleAndroid.dpr similarity index 100% rename from samples/environments/deploy/SimpleAndroid/SimpleAndroid.dpr rename to samples/environments/deploy/sample_06_SimpleAndroid/SimpleAndroid.dpr diff --git a/samples/environments/deploy/SimpleAndroid/SimpleAndroid.dproj b/samples/environments/deploy/sample_06_SimpleAndroid/SimpleAndroid.dproj similarity index 100% rename from samples/environments/deploy/SimpleAndroid/SimpleAndroid.dproj rename to samples/environments/deploy/sample_06_SimpleAndroid/SimpleAndroid.dproj diff --git a/samples/environments/deploy/SimpleAndroid/Unit1.fmx b/samples/environments/deploy/sample_06_SimpleAndroid/Unit1.fmx similarity index 70% rename from samples/environments/deploy/SimpleAndroid/Unit1.fmx rename to samples/environments/deploy/sample_06_SimpleAndroid/Unit1.fmx index c75ed15..94dfeab 100644 --- a/samples/environments/deploy/SimpleAndroid/Unit1.fmx +++ b/samples/environments/deploy/sample_06_SimpleAndroid/Unit1.fmx @@ -2,8 +2,8 @@ object Form1: TForm1 Left = 0 Top = 0 Caption = 'Asynchronous Events' - ClientHeight = 189 - ClientWidth = 479 + ClientHeight = 380 + ClientWidth = 228 Position = MainFormCenter FormFactor.Width = 320 FormFactor.Height = 480 @@ -15,20 +15,25 @@ object Form1: TForm1 Touch.InteractiveGestures = [Pan, LongTap, DoubleTap] DataDetectorTypes = [] Lines.Strings = ( - 'Set the PyEmbeddedEnvironment1 "AutoLoad" property to False. ' - - 'Set the PyEmbeddedEnvironment1 "SynchronizeEvents" property to F' + - 'alse.' + 'Set the PyEmbeddedEnvironment1 ' + '"AutoLoad" property to False. ' + '' + 'Set the PyEmbeddedEnvironment1 ' + '"SynchronizeEvents" property to False.' + '' 'Enqueue all events.' 'Check out the Delphi code.' - '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^') + '' + 'Loading Python and the events' + 'Asyncronously on Android:' + '--------------------------------------') Align = Client - Size.Width = 479.000000000000000000 - Size.Height = 189.000000000000000000 + Size.Width = 228.000000000000000000 + Size.Height = 380.000000000000000000 Size.PlatformDefault = False TabOrder = 2 - Viewport.Width = 475.000000000000000000 - Viewport.Height = 185.000000000000000000 + Viewport.Width = 224.000000000000000000 + Viewport.Height = 376.000000000000000000 end object PythonEngine1: TPythonEngine AutoLoad = False @@ -37,8 +42,8 @@ object Form1: TForm1 APIVersion = 1013 RegVersion = '3.9' UseLastKnownVersion = False - Left = 224 - Top = 32 + Left = 128 + Top = 232 end object PyEmbeddedEnvironment1: TPyEmbeddedEnvironment BeforeSetup = PyEmbeddedEnvironment1BeforeSetup @@ -55,7 +60,7 @@ object Form1: TForm1 Scanner.AutoScan = True Scanner.ScanRule = srFileName Scanner.DeleteEmbeddable = True - Left = 224 - Top = 96 + Left = 128 + Top = 288 end end diff --git a/samples/environments/deploy/SimpleAndroid/Unit1.pas b/samples/environments/deploy/sample_06_SimpleAndroid/Unit1.pas similarity index 100% rename from samples/environments/deploy/SimpleAndroid/Unit1.pas rename to samples/environments/deploy/sample_06_SimpleAndroid/Unit1.pas