q-lang-cvs Mailing List for Q - Equational Programming Language (Page 22)
                
                Brought to you by:
                
                    agraef
                    
                
            
            
        
        
        
    You can subscribe to this list here.
| 2003 | Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec (106) | 
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2004 | Jan (219) | Feb (152) | Mar | Apr (92) | May (45) | Jun (3) | Jul | Aug (3) | Sep (111) | Oct (52) | Nov | Dec | 
| 2005 | Jan | Feb (1) | Mar (1) | Apr (2) | May (23) | Jun (46) | Jul (158) | Aug (22) | Sep | Oct (26) | Nov (11) | Dec (49) | 
| 2006 | Jan (57) | Feb (196) | Mar (10) | Apr (41) | May (149) | Jun (308) | Jul (11) | Aug (25) | Sep (15) | Oct | Nov | Dec (15) | 
| 2007 | Jan | Feb | Mar | Apr (15) | May (204) | Jun (112) | Jul (7) | Aug (16) | Sep (134) | Oct (313) | Nov (262) | Dec (83) | 
| 2008 | Jan (81) | Feb (83) | Mar (21) | Apr | May | Jun (1) | Jul (2) | Aug (6) | Sep | Oct | Nov | Dec (2) | 
| 2015 | Jan | Feb | Mar | Apr | May (2) | Jun | Jul | Aug | Sep | Oct | Nov | Dec | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-11-03 11:18:58
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv32479 Modified Files: qcalc.q qcalc.ui Log Message: cosmetic changes, removed 'Copy values', added 'Paste values' Index: qcalc.ui =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.ui,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** qcalc.ui 31 Oct 2007 22:56:29 -0000 1.13 --- qcalc.ui 3 Nov 2007 11:18:52 -0000 1.14 *************** *** 288,293 **** <action name="editCutAction"/> <action name="editCopyAction"/> - <action name="editCopyValuesAction"/> <action name="editPasteAction"/> <action name="editFillAction"/> <separator/> --- 288,293 ---- <action name="editCutAction"/> <action name="editCopyAction"/> <action name="editPasteAction"/> + <action name="editPasteTextAction"/> <action name="editFillAction"/> <separator/> *************** *** 746,750 **** <action> <property name="name"> ! <cstring>editCopyValuesAction</cstring> </property> <property name="iconSet"> --- 746,750 ---- <action> <property name="name"> ! <cstring>editPasteTextAction</cstring> </property> <property name="iconSet"> *************** *** 752,762 **** </property> <property name="text"> ! <string>Copy values</string> </property> <property name="menuText"> ! <string>Copy &values</string> </property> <property name="accel"> ! <string>Ctrl+Shift+C</string> </property> </action> --- 752,762 ---- </property> <property name="text"> ! <string>Paste values</string> </property> <property name="menuText"> ! <string>Paste &values</string> </property> <property name="accel"> ! <string>Ctrl+Shift+V</string> </property> </action> *************** *** 882,896 **** <action> <property name="name"> - <cstring>filePrintAction_2</cstring> - </property> - <property name="text"> - <string>Print</string> - </property> - <property name="menuText"> - <string>Print</string> - </property> - </action> - <action> - <property name="name"> <cstring>filePrintOptionsAction</cstring> </property> --- 882,885 ---- *************** *** 996,1081 **** <images> <image name="image0"> ! <data format="PNG" length="2101">89504e470d0a1a0a0000000d4948445200000020000000200806000000737a7af4000007fc4944415458859d97616c53d715c77f29c9f43c81f62c852d6f4d55bf296c714405b6d844dc55533cb59b522651b34c6a583e90b5fd00eb872af0a12b9d5491b49a806954a42d5bd2aa1bf10746a2adc4661a8b530de2b0806d446a9b92c8cfa2a9634114bb21b29f82cbd987674a0249603bd2d55fe7de27dd73ffff73cf3daf4244a8a8a8602593375099e46fd4f1a3e824b81d401a7040345df627813a084f82a7aeec3b209c06cfa2efbff227f90207dd150779a3e2410144dab8e456d894ab03fb5a2802361e024b60ab5c01a72094065791dfae1a80b4f11c750c50033c771cd49d50b562ac0f6f671a6022091ff3f9230ff8d495c8024f3782ea852a4824c35084c4f8f2181e0dacba6e4c84e1e904c54a001e454456dc7de4790ec81144121d2222220b71918288a444e49ac85070c49a4f4919474466eff1ef5d5f106b5c75ca500bb22a039e4a484c02ce762886a0aa81d0c7218c33d0f99710e10b1ea21742a0c3f44408740fd1c9be25be85777d63b2df92310d5e6075094ad05007240760c64bdffb5083978406fb7fe34551c09e6f2431da8ba63a61b41777b56b91df8d56a99238b507ad5484e14ef41a1d6ef6435d3300ab27e1ebed6f076a9c2fbbd5bd844a519abfef666f6c0f4962189306d19f4dd3f94180eeb79f8562186c1ea627fad036ec84cf0e816ac0a40975ca57387d6a00ad51812b79f820bf3c03f24fd92509b9d4efea78d9fbd45e82f67e7026e99d39446f6b37bea77cd0047d33bd786bbd703a00360f1403680e0f4cec876addbafff5cd4b50732a70250d8e3ca15b8b24888c6554b926af0c8552691cbc1f9e313619f5365e18ff15de2d6e5c1b5de49fca633f6b675f691fd95296eed14eb26b93044e7be0669fc5c0f9fde0c8413a08f5dc87d369d3f2a7c05b550e2012953fb81d9a419adf7bb7ea8f774ff56228619c9509fa5a7b0913c65ff2d335dc45be2e0f3350b3b5866c65963d2d6efcd9204cba20d685a61a703e0daa1bce67cb78d7d7eaaccdd908dc2ae7003790c44c8e06a71dcf1f3d0ced1a226926d1d669741a9d8caaa3c43e89a16c5450a7541445c1366c27d212255f82c36f1551153ffbdf8c323d9a466b74806182aedc87d36706d036672d59debc23c1154e3554db091b617c8d3efc793fc63a831de33b18500748a69338b738a9b9584387d94167fe2889e7a318e7c268eba1b1c986860fc66d68f5cdf019a02f8f5abd0259a01e42002242212acf0c06ad6ae1fad025ae599728638aa8b3aa382e3bc479d529bb431d522888ccce8ac89c48fcc851918cc8485bbb8888b4b69d9478d70189045d22996649859b96c7902ab280480291edc89d4a5859b82cd7242c929acb88e3df0ee998eb90a650938c642212cfc8dd8ab62012393124f2515ca4a555445124726244522191f6b61e91449348b45964f6e0f298a9114921225600776ec197fe0be1ae9c01cabc42744b82a6a966424d219c6bdd3468601845d0a168829ef332fdd28fe174104351706ff690538b9866337d6775a883e9f47019834b7c236d828e25cba24a28ce4a7d60c08c7ea161c78e8d679d5e30c0be0e98005db7c10db02930a080762245608b07bd2b000ab85d36f48d064a7e3f4c8156df54c6e625bebe51811bc0638b72a06c8fc48fc85b3ddd111111c95cb7589f9d13918cc8e04729918c48fc6a41321f8aa4ae955549cd8a144446a205919488afe5b814c67c1209bb44328df7612aaa58f4cf2d9500e0b67fa6ff8346cd4df82c68ebad93dbd741621ebc0e1de6a1a1dac6f413a03f0618a0eb769807ddb441095ab7f8387cba1177632b98f6fb50dfa8c22d60dd520900e83af0f3c981f1805fbd00b91c500b813306f651c8ae0536803193c3ed82682c072a1806b01e4246021c60d666497eb293446cd47a058d601987410763ca842ac88ddf11ff9e7e60a87bf627afbd2a22d7c57adb17bde791b1b25fbe8ac74f88c85591c1a048664c6464cc9a6f6d3b29f18141918443646177199d168a6a49700219dcc6e7cb35246b065f298c1ffc9dd54cdcd15a16ac4046c6aca822970b323b2612bf6aad65ae59f3831fa5247258a47d578fc81892eae37e7c1d19dc861cd8ca2bcb3dc715ed2f1e7fa9b9cef7de8ee76cb001c8017660188ab510ba029e5ab09b564d8fa6c1fd045676cf43df45306339cce40ef6304c08abf9a0045442a0c4a7f6198e3d799ec04a2d5955fbae93f9f89132031991544a24d3271289164444249e2894192a4821613122223214ca482125d2fee249f16dcf5c0136014ee0bb8bc606e071a07aa58ea8e4a9f1bc73f862bf95ed26e895606c00b7c3060634386d9003fd311bfeb3e0aeb611380535a6c6ebef82a7da8b591af8142894b999be675c07f22b36a58d3fecf8666b4b467a8ec5979c5816c43a71b420b260e540ea98958007baac3ad0da92f9dcb565f70b582fffb780afad70d0957bc2d1738767cc5b41bf9ad7e1b3f2896f0255104c83bbd646e05fa0cd43ff7c14e3748ed8a5be9b8d39e721ff5fbffd4cece23b43c00c3057567f595bb527f46d8bff005bec3f3dafee645a81865a30f2a066c1580bba097bdfedc7cc7bc8dfecf3472ff9bbb3d9d87560be3c4ce04b60e5de7fb5ff02604dcfbeccb9d75eb5d81f095b57b1a75764e89845f7d1eda98baecdadbf00be073c0a7c038bf295fff71659e503d66f0727827f56aa9a9f0c9d55f06eb673e84f5162e735cc5bc14c6e2679e8d7e77ef90fac44bb59c605e0f6c36c0e3c9001802a5fcbf16b834744dadb4e4acfbecc5cf34f0fbe87d5d57d07580f7c1d58c3439efa7f0da0c2b73df5a6afe5b8f8b6c5ffae563b3d58f758c37a52aafeaf8dcbf65f5e7e8343b66c1a480000000049454e44ae426082</data> </image> <image name="image1"> ! <data format="PNG" length="636">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000024349444154388da594c16bd3501cc7bf1307cd61b0de8c206c87c25698e04eabe81fe04e0311c1de36f1d0e1cd8b7851769cde1a4ff3304c1db8b607271e0aab50e83a06e960a31d6cd00c0f090c49a54a23adf8f590bc36ddd2aead5f08dffc5e5ebef9e4e5970792104732bd4d9e91c9345def5d7fce6837bcf77b8fce0183acd7e9ab7acdf14ac5f1fc5e8934c864460b5d1a9c4cfb87b6e486d30d67b9457e73686221cbf21093d48a14e4733d88b72f4116e9ae9fb99e73ced54f5a7468622141dce106a9aeab533ec4fd85b6e4acf95fade894f177fcce632e90c41578747f0eb06df425fb278031a0bc991a993d04ca87c03280442101009dc1a9dd2c24a98f541d9000e004082f4c03d34b08cf00891fafaf46e55b13003042b27d8309560376331894467b914a5b4bc03d19f8350efb741fd2dd71e89bb3987ca0c37c9b35e5d8ce75ff35ae9d73f1414537ec954896c8da8ae3e59833e92046a6f32f49fa1103c1a04b36d6f66ad51937bfa6204f15606ee9909f5c039a61607419d09f01ef77fe94f13b173ed537fcfbb8718e54788da495271babee3cd7b9e65e77eb8ff376f73e6e74ba18b7be192449435924f982acbb61d60af93cd24c3e9d7fc53b080dd6c7e26139d5798de318498d3c58245971c2bf443e70e03e16bd329185bdff180829b00b6f809900aa47361038a27982db0086dc2bbcb23432f38824195754b2c887fc9fbd42a86e54da8542aaebeac55f3ab58bfefe3c8f2479b275ae208168248a0b4b310c7187ba13f7b95774514fe2b8a2920ab9aaac91cae0b520fe07ee60f22d40ab6eb30000000049454e44ae426082</data> </image> <image name="image2"> ! <data format="PNG" length="963">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000038a49444154388db59551685b6514c77f2d79c8058b11143a5048a1425b26ac6583b654b065c2587da8131fbae1c352fb604470a47918dd4049f330671e142b4c1b46a5f5a1ea364bdc6498b4744d90625ae848502ce928a5956ee486566e6289fc7db8b7b529d98bb83f5cbefb7df77cff73eeff9cf37d35927812a87d22acff05f984bc81cbe9192b21331094e7ff210debfdab9f644c49cae52cf983baf95863498f7df6100aeb9895d0527c4e36b6ec612c2ae5a6d45795d87b3ea78d71c91fcdcb1f957cd7f2f28d4aee53195312a12be90f34296d6cd86456de1ef7e6fe60d2f4bd534592ee69296d3991389b62cea6e12baac47665c472ecbafb933739266f0571473027494a6e1f20dd9226a67295a4bb8eef4311e7f352282275f7c72b24a989dd907a4f0106fc701f7add801b78a18a6e3b401df010780edefd08865e86911948dce3c1833f52e3d00965a0f5c28188b7a5f4b2a5aad8add4d8fb6646fe5129346d495b5268cad2f0b8b603516b8d2699b5ee8e06168bd0590793eb50583118f91a8aab70e92b307f87a12fc0fc15863e87c20a349ccdb2186ee19906e8f41af47c033d470d267fa12e72d5d885c46c4deb7b392d7eda406a0722d7c1e3da243a7884c40af434c3774bf0462b446760a01d467e2ae27ec5a0f4332cad825906c305e67a91a53bc6dfa5420a5c9d6f333129c9f97b775fc67e593b248393a850c24edad9a8144f49ad17a589a8e46997f0caa43ebd4ca3fea2515e9a076d8d43772d9dfe70df87628ed613cbb6aebea874262275042d350f4af57d1bf29c94684a8b468967d3bf51af2c8df125805aba1c8d5d06673ac000523bd0fb92c1c73370ae092ecf42e004944ac00903b30485c2110a05e0a936200bae3670e1819eef016a8bb359da0c38f76596815721f1d04ee4e87d18380a977e048e4378068a65d8bc6352d884129bb8dd40390bb44079115c3c4d39710b80b16bd2f0b4949e3bd0598ea6130bf6da67b7252b27f92252725a3a7d418a4f4adde7a5d8a8d4da2779bbf4086f7c75bfe6ebdfcaa8e3a2145b3854bf873a2d97b3bf6796ed85646a43da95e27773525ef205d3c2abebff1247a4fafe4cf5a6d8f3b57736385d9e5976e673b64decb634f69ac4f3074fbaf6a4fca3d5792529bf5d19717a612fd28cb4257d7b232dad4934c62beeb81abaa4e617c173129887403b84e7c1dd0ea5f92c81e32d84e7ed0416efa5a0dc695707502a2570d343e14f283de216eb35afef13eb095da6ff00813f87c58b538a7a0000000049454e44ae426082</data> </image> <image name="image3"> ! <data format="PNG" length="916">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000035b49444154388dd59441489b6718c7ffdb29831e3c78b0e0a1851eaa78588b0315065a7618cd6528bbe8a9f6d2ceed30b28b989e6a19123d0806262483750983ec8b054d548cf9325c934120197433870ab16c23160b798793e4a3047e3b7c9f6831c31db7075e9ef785e7fbf37b9fe7ff7ed2ff3638e21e3686234cd62e190e31560243156325f2862a2616c550c12c8553862226346719763093f7974c7ea1f1786438d0714e386b970c40ad5607e0e1628ada239859b0b8301af070c16270a0f6b81db1a17a5a9b5d86f1cf22d4772ed68dad0245b8d1ff8939d17bfb6493fca1205d952a7b0792a4e8af61f55cbbab95df0b17b671e25de98bb5b8d472daf4b886a17206a306fc0b5a80a5688a6a027afa26cf13c773b6d423157ede9724994b4de97dc998a67bf6f2c1ab3773e5977d1dbcf42b9899975a6daec3734cbee8211480d790b277e108ac75e010622b79a841240e54dc81d5b760f2f3254acb70e5daf879e2702eada1f7a464a62c5d97e29b05f9aff72aba59d09891c26bb60e5e0d69f6bba4465f4853df46b5ffc7983e7d1296733ca507dbc17f202e63d8018e3cd206585b401d22893c3c875038054598998b51b721301da1ba02a37742643faad3d53d6ace0987162c43c3133d13f5c3863bcbaaebefdd8aebc952d1adcbda2526ef8718fc204057571b617630d67a091a67540fbdecf97bf79977f66691b54b7004e377420c0ed7e8e8bc7dbec7c14c5c63fd3715df767d5bf8695fea90ec4c45ea94d26b65f5764ac9ef0bd29e14fddad6adbd9b8a3fb1e53853729c609b064baaaf6362098faefa26597ec7ed79ca738795c8c36f10fbc6adbdfdf10cb1fe5d3a3ada124735d194e63369e9aa54c855a43e29bd51d6d0f55e25370bf2f749f10d5b637f0d29ba96d6c4b114de48abd97414741eb527aec631a1700acab8eb3564b776a10ea915f725c6e2ae3b22cbc033585a74eb073f0c70a5af84efd2481be2ed79398e5fc14c52ba21d94f2bba35d0abf4d3b2fc03523c57d0446b48d11f6dddf57c3fd5f26b3e97949ca69ce307ed894b8b98c07484daeae9b453ab2ea915cf421522d194476a4111427331b0a1a77f9caeee2c3edf29f15b279b91e1c03dc7097ce938415deebeecfda9026ab666a5d63b929a522b28a735eb7ed07224f9e4b41cedbf78a93f8f8d7cf24d3baddc57edd1ffebf137b3b356e729f586c60000000049454e44ae426082</data> </image> <image name="image4"> ! <data format="PNG" length="1081">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000040049444154388dd5934f68d36718c7bf8adb7e82480427094c686182190aa6f4b08a0323dda5bd8c965dda930dec90e16164cc49eb41da1e4ad243477328248341a210133746acd02ce9689b081dc9a02e392824a594382acbaf54697eeb323f3b24a035bd78dc032feffbf23eef97cff34f7a0b6346ef5235e6c88cbea4545d2fdeecfb865e9d7a1b8d8385c33acf9a8a30025b59807af1867b825e1d6d77dee57a3a9337d9c12483c916662496352963c66398943143e1b44909931ffa9e835eb22ad8ed80681fc47a1223bd0327da84d3992200d56a0d00df541cdf24f88349f6d9de2ed00165c19e01313b4cb9f07f358aabdbfb5d3bf10e507ef53f390343d742ecaed26e1b026cb06083c74ed237072007ae0bdeca9bba87efff5a903aa552e5a924e9fb3f820a7de8d1bdcddc7ecf27fdd269bbf49b21753b64fe285d39d6a3af1f846535ac030ab205f9b5d7a920bd54dc4f5a8d002128390117447b60a3caf85484720c9c6787da89a3a98cbace4b8547cd37d356d7954f3e9269d69bf767a6e498979e0625a74d5a3424eb840acbf7e4b18635960aa8de38a885ca402b9fe95c11f620990176203e9f871a5076036928b861370bb7faa8cdc3c8b559f273d0d1d14e7c283497c4f345bf12a98206bbbb145d2968b8bb4be1959c3cff5c54e57d8f3a3fb5a4279674c650fdaea5a38b760dab536a48dbdbdb2a3dacacaf6fdeee945c927444d2bf620d929922ecb4487721be90872d48c666812254479a7bce0bb92cbe1bb394efc1c0553fe9cf6ad8ed031529f28ee43a2eb94e4aaee3f24fc761a7bd60b5ad5aebe0037c50f242ad4a3e360b7b90cee419ba0a3d97bdd84f0e6c482ec7be450ee2f3c0de6baa5badfdb1b7d529a3cd50a2dee6db42d3a7eff351e297cad86c7daf09471c92cb71782215d560b794f8a52049ca3dac48362997ca49671cd2b3a0747a427a1494364f2878e7bef4480ade49a85eb774f3c5d81b659b96a497aa2d40289685eaab09ccafb62228c55b7d9c84728dd074040a303b138702f4f4fa705ec8631c736fb4484fb5f2fcdee1c954589ee717157c90913aa5cc62495de7a4dc4f51c939283d2d48ea57f8ee6d7934ac402aa1fa8b41055209a95157dd9a9424a4e91d497f497a2efdfeb7aa31189f49c21ae40bcd54b2003c86e4cc38142034390babe09f8ac3128cdf8ac012b82e8dd071368b71ccdd3e7963a9807c56bf26520975b9a4cc4a49fa58babf1856ff6645e1c5b03cb62f15584e481ad4c47254634786157898902459d6a474d0e4e583e0bb11a2360fb4262ef97316ca10998b43094273cd9cfaa7239003ff540432e03c3780ddeec638d24e7cc87dd977ddb2eadf5a9625c70701a9312949aa5b92e493d5989021c96a51590d4b860c590d4b95f53fb5fdc29421c36b3516ef1cc0fd3fb2ff00885971cd40de875b0000000049454e44ae426082</data> </image> <image name="image5"> ! <data format="PNG" length="838">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000030d49444154388d95954f68134114c6bfd6160c2a2858a8a0a2206a45c1940aa67830e241a207ad88282a9822089ecaea4945507b905805ff1c0afe0bb41e347a88db8a55ab04b34a35a9a4ec16aa66a1e2ae5849447153dae8e7616635ad4d34eff2636678df7ef3e6ed0c5024e8d0d6531c25394ac9c9e3c8adc7b162f9454337ac1f2c1563241dbe0750519630c9e2c263923dc5852b8b091b03e694f3b97100d5920d65792de1d875ea08a8d1c7e5972291d427083b5234f3d5a5435a65d638b031b07c82e3494ef94920d2a966bc2bbd33a6d2f8fdb5c0a6c066e4e10b6c6b6a3ab4a379a9f63639add1578fdc38e0a906b2df8039b3007b248779351e6447729893f7a0f3c99dd1c1d7fdafb4975a8fa7ca73a7fb51b70100886f894f3bd51a7a47921c968e34e9526e9b19494b7248e0cad5080bf3f414990e5b375da70749d2b244b66565c80ca90f8b7da7ada9e9ae27fa1282499d24198f25e86bf0358231f6bb357379e9567cc2382e9daa69c10ed7714ad45d4fc9dd25c5bc7f9dff5c65d797ae45a801b22339a006304d1bc678232e0f00a8019a9f00add381cdf7816bb3056fce15ec9e0f9cbead61c52ac0fc68035ec07c6363dee2c5cb408bdf7fd752d62a10267d9f48b4934895a6aa159c8da4d2a2bcaa3c7cfed838f240b2df041600d9912ceccfc0f38b003e02b85d9a471e8a3cd3b4810540d73d0df6e7ec0f64a2ce07351a2733a41a151d108f89835063a286a128993648252cd63b7a0bba87e4e4fcddbb763fa8505a94d4d9d6b3ab7a5f24b1616d3d0e9f388de95500f28052a5a035dff6cf71eddc63a85f23f27b9f25d176eef80da4c3e96ef6c9d38fe954d7ab0c1e08921a193a13fa27136d0906f70665eb891dfad7fb4fa2696bd31e92d40dd153a13321d1afe9f47f518daa643ba91b621cb9abfeac5b52b71a7abb5edd118e8c92fcf367951909d9bfb448a7874300aa0000de06ef42a545b9ee1c77b4449f5efae57063ac80c3cc1d3d72f469707ff0426d6dedfcbf6ea42b97239bcab2eade7606e9df185f51a835e105699eb97d9f69da00645f96a03168021ef9d2d40140dbce42ad5f5bd956cb061958c60000000049454e44ae426082</data> </image> <image name="image6"> ! <data format="PNG" length="1164">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000045349444154388d9d955f685b551cc73fcd4ec78d5448c0c20d76d2e85e169cacd10a162636f8d0ad3ec8268215c1597c31a248c2d4255559d3075933111a65d03acbda81c804e7da8273f1615b157519387aab0e9ae18657e6c80d2e34a7f1b29f0ff736d90682fa7bf9727e7fcefd9eeff9720f15e8ca280e8b69aecd98a64857b7fc5f9c34cdb555651cce40575b060ee706763e6feb3a915a15cb8598e23634b0d0c4944119882a83329aa832b05d8828b081484710c705be2a7e8c98e69a3cd62f32bd22726852e447b9152d11999a14591191d919915f44647ac65bafe3ec8cc8af22f26646e489b332699a6b4c9aa6c8433db2f4ee019182c84a61a2857f8a54ac25b93956af56444464e5b31322d32295e999164e89541eef17314d41baba45b6f588ccafcad2d8a8485144f213f2afe2bb73dec90a131ebe3f2132704a664c53366cbac37827de7127a5c6320fb8ed58578a74ee7b83f5b0be2ed2f94594e2e759a2671729fd7c91c88371af7877847ac0a17df1519c957182dac55939cac3576d02c34009887f9f80aa4d6c7faeb9e9dc5b3962e5285c4a93e84942b54abc7317ec4dc305e03a043bc3b07d91f0d624d4aa84558a292030e56ae2c0dc9597a1a3b5e9b1bd69062f95b1cee4a0e6e0749460649cf2421a6a75ec0f9370c46fdede47e942017412c7cd310c20a629727f8fc8e66e91f9139e76c74f880c9c92a5277789e4cf898c8db6743d5e11796e48e4d092c89e175af986883c332432704a26ef322530e56a505004d831e8315898a754cd12ab69ac8534a86cf324c56ff2705d632f8c404d533f380e40fd771b6c1bc7cd330c048631280189d0787378f6c232719d846b36b19a06dd9228d19b829a434427c1a912ecd8094070530454d0d7581328f81a2f32d61c7e5681451e9481e56a709b258aa7bd3ec7ff9873a6350734350e249501409f062efbd5ad5b88290314c48cd15b0613db3300840d4f9ef09ed966ade4d609ab2c532e1e6380121a427ec748010b2f5f76c780d46d8c83386e0e14f8b743f96491b811bc8931be8f5506de4e7bd39d107b6d0e14440d03ce3fe5e52f43e27cc963aab2d0fb08f4270088d67a401984559602b434b6c8c3e945ec853900ea3b0ce83d86ed6ad075ecfe040c257014a0a0debb08fb7db73850fe6037284ffb24d026a190d01d055f534239f82801119a43bc9783ae5d70660c5e9cf52eb3ff26e1770c829101f2504b52f876376d073a0c496fde82a568fd6f4361ec575e22b2eeeb7f0a07168706e9333c03d00ef61f0e911fce1348fb3e8e19a32d4d759dc8c120eccb429d965bd6e364113eb5e1e941fa0ccf25f86e89281847d376c030d6d2ddd18de550c87b119457745c08ab200e75c22a485941d485b25b276a04015f3a9f297f01ed06a58bcb147f5a6e6cf80475df7c806d7db461dd70b9d74d813e49b00196ae728f9b025d24bcaa416bc2375e87da97d07061b50aabaf426d1e1a2ea5dfae10bfe6305fb976a42d055d19182d28860c656c044803398f13ff71dda86a7d3405237f032379b3a225460e460000000049454e44ae426082</data> </image> <image name="image7"> ! <data format="PNG" length="651">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000025249444154388ded953f6813511cc73f0917b80c853ba89080c2bdb1db053a447048c10e5e22b4910e458744dd3ad4c1ed5a3aa85ba0147413d241dd7214a4c1c91c48d0a1d00c42c6175048c1620e52cc411e9c435aff342dcdd241f02d9fe1fddef77de0fd7ebc5814455cc68a5f4aea3f194cb3d0c429387fd1588f4aa9f75164ac47d5b3f62761cc2938e8e88484e8e8d4afd44a40b5725bf2e2834006949d6f77b64ff62765dcc52524c4c5c5336b39b2542b8bb0b22878b204a91c55cfac95feac9b84bf8cbda99a8d46c3bdd9359e2ea779fd09ee66a1f26ec0b3b7498223cac5fee4e6711777149aa5717f16c39d4bb3b6038e056b3bb06227799005fd06556f6a72f3184b3f6cb464236361cca4200474c6d93d82c667400dcac5c1bd0bcde364930d1446db026f0fea3a744358c9401042fb1abcd9838fd3c76d944d56bd64cdbed878e17b8e8409c31ec7dccccc98b6ae8f4c65009daf040c7b651266c0b047513df4cf33f5b4973609b3116faab6ef0cf2fe09c16cc943e03a840a2ab7001d03cc0d86b49aaaed9f67ea69b54760ee33c41feb638fe73992e9c68c05baf67b90f63bc0800025b7d0c4b6a3f29d517dc542130b28b98a262c940cd084889fbeb989f419e0b7af8e8cc363f357cb904a63302f3650c83abb91472d421392049bcc0b0b458026e61c950fc68c4342eaec1a202553c2b0a6010d5067330ce12000fa320031e7906f8d4dde091df201880c7d5a9d2fd039847076144276c4c086ce011c74813e3b208443be353679e7be329512885590369a007aa04c407640f820b78a3c6e9d3e17fbff835c7af04fce917f6a3a60bd790000000049454e44ae426082</data> </image> <image name="image8"> ! <data format="PNG" length="674">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000026949444154388ded9531681a5118c77f060b7760e01d34a0d080075d0a19cc10d042414bbba8436ac9121af0dab15d42cc942ed2b54386a653531dda4cd576d1ad31cb25d994501024a0908281081e08f12007afc3a1d13425e990a1d06ff9f178bcfff7e3bd0f9e474ac94dd4c48da4fe93c198499378323e46b12a43a22c73222b9bfe6d29d73e4b691e4829b252fab76555accaf465e746e98927e32828d8d86c4f950490d305f3cf234d320b3add1e68930c59a8b429ee05281e52039e3c3c49b406e74739eca06cc890b224bba70d29bf1f48b71a2eccc6efebd38694ca92ecb221c51f8dcb93a51050599c414093eab14ebd037841287d166754f4e92e99a4c6e63ebc08c3e63eeceec1c71a3ba9ded3d845e389f2e392002a84115b3f686df9f4e57a07ddeced7ae2dd84c79a51f5f7fb64578f342bf106524178fdcda57607fc8f8816270bd135d6b0b119d0c3c2e957bcea3c4e7f39d57fb67eb1f38045f593c0ab5682b7fba1fb77556c4001eac7506d918ff712c6983161358ac3acd9afae8f761c65512d4409ab211cb2ada06a557fc2cb59b06c501e000ea172ac142daa85e880635371a9a9f743885b5a15faa0a8e040d00f01e11adb40f5106cc77d13ec2ea0591397198ed274ea35ce3008abdcf3c31703023e20e286ad446036081103fc3ee04cb3382376a5f1d09c7769bc815c701a341fc33b1e54b303d609164e3b96e255ed4ae3a139cd3c0e46eb08da16acccb9c6f69cfb80561b0b879849b36663736de373f3b769bc7a4e4c81f041ab0374019ab114999de1545cd7f8dcbc9dc7c1b04ea0753c08c53069ef8ccdf1df1a8f98e7404f43d34891c95fdcf7fcff416e3cf817393da43398648dce0000000049454e44ae426082</data> </image> <image name="image9"> ! <data format="PNG" length="848">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000031749444154388dad944168935914854fc4c50bb87859082fe0e2092e0cba48ddcde0c23a0a420ba6820b29c28fc5016708286516a115a6461986124aa1591412d260a2502a96122b3898918e4da1902638348a8b24338b348834c191e42185338b347f6d6ba106eff2f1ce77cf3dfffd1f488224f653a9f9ac249963666f81cdfb1a30d7f9989bf56dc1cb2de8f367d95d02aed3629aa5cec0edaa6c17304e2bbb52b487f96af0f374962499886f0998a1c5851671f5558760be231beb0d32dc120c0568b59b353e34c838631d8113c996b3e0bd048b515a4c6f45c315e622e194ecccf124597c5be150809c995edc1cbfc8e00873c19188043adc8a89d00cf9964c445324c9c5cc2a2bd3cc0dfa27a4dd7c93e768431d0ec796b380f6650e1aeff742a000533e31549d028041ff28a57461f8ce009e3ccde0c1c3741e1be87ef0f076fd73f0b60e0030734369cee91ce714c908f9ce43d2438eeb1c97b595088f922487021166c71bb94bbd83b6d33d1d27afb965bf4209e78dc47181b5a780bb4f000680db89e6df80f3c877b83b760af5f20a5ed75caef954a8fe25f0b60e0ceb18e3825c50e42fca020086f4197ed29bcebbc88a87ac44c8b82633fae6eaefca6246cb9de06d1f2fe597645c3072458dd99746b45c9f53243559d02d603b9e8226e9617152d7784f7b77820fb40f7aba01548181a6f8c76effd18cb9ce015832401579b8001c06b0d6043cc3400938faa35316041eef8cc4ce38fd939367bd06c997b2bef69f9872bbe0ed3f8d33701be02f994f6f98eeb37e518331c092a897eae6d651888be8323e9c1448ff66fa7e18adceeeced8a7fee408c85720e3202b820c49725ac7666ea8d6f24715f94993b7f54d7bf4655de28222a7f5af9ff30eb62f0c7f449f5852635d65e3eb3904997c817cff8618770c96a7b6a2019ab37538eb32df3e7a72df947b42463ffaf90bebb1ef5f3aa04afc57327255c50020724549ceab1a93829cdcc3f1beaa2c5ee08faa35704c5a6b17941c00bccd52553adf4b44df98d98e1d4f5c569a515563186401e424c88ce0844fd95bd1d1230400c15ee5e565555af40bf2ba64b057c5d8ab763d42ff03edecc6a2a3b06ca60000000049454e44ae426082</data> </image> <image name="image10"> ! <data format="PNG" length="373">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000013c49444154388dbd942f6fc33010c59ff6fdbf44aa98a52a6935303030de499352501050105060506030f2067c6efc271727053be974b6123dfff4fc1290042f2449f632f37d6b8e24892d1d164539e7a7b57ed136dd267190c493342ffb3ab94accdf88d8906d7394b98edc2f3462b18377213f931cb84178a1dcc3abf73f5eb16dd6d9b1ecb1106b69e182f73ab1888e37bb78e8949a547cde63b9b8e0ad7a07367d1e9397c4221abcb577c7d92a52d34de9513d0e5a598e8bca52c3283505b1934fee496c15e2f07e919a2e120e44c1dba0f5905923befad15f168953128dd865a919865188e73c76d9d43cce5333cabce5c4f9bfa0fc3714a2536afce9e3688538f6b8d695d424e499c7b59e34953b08e489c7b5ee6ba9f91fe2573c56523347fc8635f50d98dd1e3800667792b907de65ff21fb4fc07c9d00007fa6b98d082b947f900000000049454e44ae426082</data> </image> <image name="image11"> ! <data format="PNG" length="764">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000002c349444154388d8d9531481b6118861fa5830e8576e82054b04387143aa4d02105873895d2a9d0a11d5bba48e9224eea20c642082205331412a534a5d04a3b343a186aa06a0a8a09085a705050484021275a720185b7c3fd6772e64efac3f1f0c1f1dd9bf77bbf3fe07312f1cca40aca27e299fc397f69d2ef5d49be4fcb191a49cde8bd5ace54725663239af99fa69240c5f035bd0b4daa98c9a746fb4b2a3475ab799998c8480b3b2525437915339397365e8f874a52bf6a7b09292ead14362549e5bdaa2f13e3639212aa165e48f1502958f1465652429234363ee64833aadd8f78eac5daf9fbebc988821ab7ad24a37ad0bf08760c3a21f616861920c6041d401d6fddd70bf77a87c11a868f0578b3d8e63754b41a958e871c2303b8b961bc36bc58a7d23f5b94931d8d481a920e0624550d2fd6ada766065a3da899e6594f73343f2b95fb259583b9e1d359ce778394b7a773e3d005f6ee7030effa78780a5c07ebd08635484fcff1923ed2d373ce76e85344da7e2e6933909b418a8f0dcb86ab92b62449b42797eb701bec3f230ed706a1e7083b3f08378fb073afb9e3a718e02a58960d5d502cedc27d48ff9e33a9f890918a4f24ad480b51e9382bcd47a5e3a86136d86377331d95ce2f338a997a1592f448d5f988741051f59bcb70a3f6eb699aba1bb9b35d350374d281d261693e229533d297b0540e1b36ea168f5da5aeb77b863b173db68eb072e3705ac7cad50d1bb5c7e353a0b3e1ad7568433754f62db8d5f0b84dc994e888412fb0843febbbdec89d3883c372224705e802f681bf4088b6f6e4720cceea54727538338a2fd64d4ded93a634b839ee824ac582ee26c5b5c72175462b10ed80a57a93d246bd75c572ecb01d1b5a141f0237bc8a91c4d0c390a69ef648cf7afcd93c37b314b5aa3341f7ae2897bd77c6a57f2fe78f9b0a370deec6b977c541533adc5404ec94f798bb80cf865f0dbf1bfe30cc353cfe076b3292a3e98e09f50000000049454e44ae426082</data> </image> <image name="image12"> ! <data format="PNG" length="957">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000038449444154388d95945f485b6718c69f7630e24521810de2d845846d90c2c0733158a017cdf0a25b1d78390d1df9432e66298c65858d284cd25e482aae102f3a8ebab044869c864e82834252198d0e21b1fb93582c9c8885138970129c9c055a7876f19d688edab47b6fdef39ec3f9e5c9effbbe037494b2987351e3bc9261837552c964499d5432dca0c62fd1a5b8457ac3299e78904a2a7ea6d9503239d22073ab4592473dbb9c2377b821cf2afda781bd6199ee4b31028091a4f881c44ccacf2d327b9f24c9c27a595c94ccf94f735e25b9c3466226e5ea96de1b4e11b19bb28b77d850960b24c9a20929abaa8096ca96fbb9d52279870f8ec322b70b0c4ef04805f39c4e2d66cd974530d6452b56ccd9ece52dd1954c96ccf350c9e824595c128e9529131e9d88573b9d6a759d24691886983531ab3b9ae89ae8d1f1d8741b1c1c27bd6199de2ba434141760234fe67e1350aa664283d659b3fe13d6497dc938d4e1194e509922a5c138dd170d018e4d262c2edb0b55de12547ddf4caeeb961eb916e9f4ecb24001405f3657bbd3a9e992fb66d78fcdfba49ad44e2ca0a582e148b53371b1a25a5ceabad579bb8f0c07a7bb820b83eab49c54441273df96db6edb4edbcecd8a4f255818544f3d28ed3a3b76706322bfb2d6ccaf95000928fd55c1f93ea05aab016f028d4603e801fe7d265ea86c56b1f9a882746fbad935310078078243da9271a883c7139b6ecb15524d6a8cdd94a92f71a81bf33500d856371e976ab53faaeae34bcf9f3fb39df7bc87ead31a1cbde750db6be09ca307e985bb58f8790e7baf37f1cd5b2164766f7d76577af2dd0792cdb5b07ef0cb0915ed8b072b73f7aa4f1a7d8e1ffabef77d7e75dbf6bb0d5f7f35063c042e7fea5be9fdc91de875baa5d0bb21ef8dbfc7b67d6f3880771cb8fc71cbaf049cf3a7c68ecd929e2b3201d85eea0d00879d0d7d3d2a76cda287fcd64e79f814f827e114dd0362736babe204750327869c7e2e4b645d16f2173d64c6cef8e00b920378db1b90ad27e805151d70fa79fd08aea725f29a9dd18b269c2a19b95d60f93e5f0a3b5e910b4e3fd312594f89e4690f99b473f443e73c4627731cb92ebe4e9e21018f25c5fc2af060bfddcf2f8ee0daacc4d10b2e9ebd2a7d8466330df487d0c20c0060ed611abb4f43af947aee51f3c7d05a2d805fa780ea2ceccd287adef7e18c3720b3d50aa1f5cf2db40e5ad85c193ff37f9500c048bf7dde6eb3f9e1f661772f72ef3fbd3c8809742441e10000000049454e44ae426082</data> </image> <image name="image13"> ! <data format="PNG" length="858">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000032149444154388dc5954f68236518c69fd6ad2487b223229b050f1172d8420f497105a58714143cac1290155c91ad0bc2ba7b69114f7bb0e07158422139049a660ba987125b282568a42e0869219004d4894b9164a93859b29259d62559eae1e76126246db27f2ee27b79be77beef7de699e77b79670cd0ff1a66b21c3553349ebb205222fe4cd254d9a04e8312742a449f8777fcf1be137b3349dc4c96173aa92715cd7ce5180aeabc94dcaf5c1edcf17d521c5db35262e946013a15305365a7532138b8dfa910a5443f8e2091264c854c64b1ec04d7c0777158d0f8cd7de756e39cb4fa7b4dd28cb15aad6df52dc0f8e6b75a46e7fb05cd075d5d7f4f55e755cd5f9a9e313e9e7424e9f2496249d2d432194f091c81992ac73de2382322b7ed611e6841e0d332be0b18c3c437895edbee401ab29b160066b21ca7334cdaf19e5907edde39aea4416fef2e8c541dd9a391f5bca60d3cf470308e7aecde5e073880441e8cd8f1561cef2d9c1f9acb8db0b45aad493ec99124dfc0c97f244d48ddbf25f9a51f7f6dbaf85753d7ef4b5353b5a066890d290ee631e696813a24d2d6312ffb3e78d8f270cf053355a66d835edfd91a2296a4e09764cc7c1bd260d55c1f7ad8f3b6dd7217ed36607b790b12db36818ba0e95c708838b068858b3530d3c0e180ba9eb73dcf6d17b29b5efeb37b375792a0699646ab5eb4aab4dcdb062856ecbe42c0b65dc5b942fd589e58b3306d5038377a9e04d2cc7fb109d4bc3e05767f3ae16dddfb8a5e6ebbfe9b6b30b7010a65632f9c243ef5f2fb77efb5ce5ed5e9a6efc33f27f5cb8b8ede0afbd56c75357966428e23f94f49cee3aefcaf4cc8b9df95ffcc84d6bf6be8eaa397f4c76947b7bf7f233052b5ef23a27305486cb8caa99cf0db758162c95d9b296fd6a42d78089add79ca908f15172e256165dd8243c8e5dd162ceed9d0f13c4d79777108d7523691cf41a1ec964223faf958bc4bc63e80950d0b6ccf73db7bd90198ebb05b00cdee380ab1a45036f874c23eb1e1bbb05b350f2157b0a10dd97c9dafd721f259119de3b642d9f951a563cf248f12340c55cfbe23e3b54752655f0feeddf9f696f4c1b2ee8cdd7d52d918ffd1cff45f38403dfbeccd23c80000000049454e44ae426082</data> </image> <image name="image14"> ! <data format="PNG" length="1690">89504e470d0a1a0a0000000d4948445200000020000000200806000000737a7af4000006614944415458859d974f685bd915c63f2576514a4ad5926935cc62d4324debb6305530c50e03ad4bff0cc20b57a0c208bc886866c0908531a50c26052332250843536ca8e179119036ae081df3aa858bb410956a449e183cf334830baf8368b4d04249b5504053f87571afff25b2e3ce03f1e9dcf7fccef77de7dce3ab10a05028a4d32ed615d1aefea229fda8b92b5d9b94f450d2a4d47c68e35d4953527d57ba3e65e349a9fe50ba7eecf9c37857ffd1a4d643bfd54ae84504bc797d702dacd71fbf267de5b2f454d2259d03ff2b5d1a3b05ff2d553e957ef254bf3b9300f3faa5a6f4406392def6a4cfae49e3a7723dfff5b7ef4a4f3e96feac47175ef068bcf591a4b7a6a5cf5e96c6a5d6c7754952ebc3d158ffc75fcfbcffaf7fd6a59fb5f4f4b124e91501a766afbda52c05416b090086bec1001840b9543b8a018273c643a037413925ce24c0bcb2fe2d993f1a94012897cab001d93b65b22be035cc7a67dfa0d7c89f889fc5a05534efdb998017123874200b03c86f020d70b7cd3b72778126f875c72cd41de81f8fd7a03fc0df5e806e0095acb1ae5f84be730e02b7337f74d7735080fc7d0fba90292c305d9826ba1285362cdc72ad4335abd438403b072c403373023b8528f463508a9c4e801d6ed0e583e2031f3ae0948a788147ae9a33cadb39a2ad28b91d077f13281d90b0b8bf0cf8b0b7f03cb6635012744579ee1801afd1893060b15c093ea507b56a40ae0be94206007fe0b3cc32916a04f5852a22b612636ddd23b805f46dedab69a3b89519899d0751e80b7674e480d7e40fc063aa46c05ac5c10b3cdc7da328dfcd93278f2a4243a1868812257c270c403a958736d05c82ce345413302c433569f158dc89425530141c3800e0b77a004c6f4c9b6eee7b002c040bc489a3aa081326ba1725d68b31b111378abbb0b408d9771da3b09e308a83cc48ecec444dcac6710255b6016a410db7e3e2741d7c7ca6f7a68dd26698092688edc47003977cc338e36f9bc62b6e436d15d85b02cad0b6351f858318ec99b4873d409b9fbb25332de2f7e3c489136e84891021b61763a237c142c50ca39e310affde1a0ca1366f7a243d5f843b59bc521c860982facc68ac448c03ad630e481aa3439bba7979ac1ac3c161a632436f38c0ef98f58389e66d95a10ea4d2100ee36dd5600f32f30e7467a09900dcd1388c42602b7f8c40c8d9acbd43013a1d23d16d99c9d5ebdbdcc1c0ecb43eb0019d68142e47082211e881d71c904e417e230324e8341316674ec441dd3ad03e4940bd122f399bde1386c0e0a462f62d760d38f78116b83f4ec056cfec006079a566e642cb2a1e8951e83ed303f6bac03d7eefac7b87dd7de8c010dced0086e0ef0fe03e04ed03678c63b5e600fa904ce52148e2d5e3309c7e0e8366d838d07fc601495abe5dbc4a156ad593cafd7da073147bcd671ceada7bfbe06f4276256714078911183533801104245dc8aeb805568fbadddd098c629b2cd8ef59123deb8059cf177c8b01e914f8cda4a97d607b20b03d10981ee8ed8d26a0ce16bf587ed72aeb9d54ea354eaee7b7cc77b7649ea9d9fbe9f922540368c580358b13166d1356843bab47a3fe195d0c16f93077d70c99835a3304fa506b5807f60610d8f2009db6dd3ddb018355c8dc7020104141cfe36de1ce8aec9416471108656ee6dff1378f6a7ee844c52adec674be9d1bdedeb15ee81b676aabb036370373a6db9913cc1a7467f5496f4a8b92ae9e761e18cfdc283ee19e7560686b5d30fb1dc06f0dac4303e85a478072a5037dc8dc2c929ce31349af4b9a9074f5d8e75b925e9574e53402a1da2aef65e68b473d3038aaf161f75b679c0dec56051ab0f41be3406276ed7d9bec8aa42f1dfb5c9639bd8f9d7a229a7e63e96be914381bfe09c50c8dd5874eec031b865cf68e9903e9148fe2930bbf96f41d495f97f4859149249d7524bb909c730afe2687930e3b968b25836ec9dccbad7a78eb904ce5fbee4f073949df93f40dabfc92a4d38fff67105072961f26ed61c36f71b42b02f05a2679e66691740a126fe60ad168fcbaa4d72445adcd63924effd9f52202922ed6eef2f783b950ab1b179c4de83c307697e77818ff41fa5792be2de915495f96b1fcecc4e724104ace396fa75350ae9a8ecbad7aa453909c731ecdbcb1b428d3e1af4afaaaa4b0ceb2fb731090a4f1642adf0e0a90992f52bb4b3ff166ee4f92be2fe99b925e92f4454917755ed5ff278150728ef792a93cc959de8f5c99b82eb3b55e96d952e39f2bb1bdfe073a34d6c6c382ab720000000049454e44ae426082</data> </image> <image name="image15"> ! <data format="PNG" length="1241">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000004a049444154388d9d947f4c94751cc75f879c7ecf587d9f25edb9998bdbac05a57904755858946e84b509ffa839da247f6c29eb0fd65653579bba1265cbd2cca66d983f1629ac7496906022e81038b20483bc2344ef16c55d8a778f70f0e90f7e644ae57afff3799eedf379edb5e7fb7d3e704bce5f95c92f57cac2e3fdf2714ea56ca9f3c90379fb24b1ce270b734a65665dbb386e9d192fb6d187826a5178b05b27a2f7043c8e43de6e9e70ce60c055113aa6a246b73f31ba883447407f11f8843ee7b69a225bec3fe905d5a29afae5a39c93d25d1791ddee72f94d89085d225a64c86c90981611d52ae2ee129ffbadba39471ac499b149a6fdab714144667b1ba96acb64b2f682e586701b680daa2280c209f121c835b05aa2183d0ebfea0b5d24660c126c7dd3bbfe91965bc17100d62952030abbf53504dd103e0b496170ee802d2e27463718d30c8c1db04d3bc081cbbfc298eb4f665e5156ca86e4fcbdce71c1a4115335400fe005dd0146ad7f486b2e97789bbd4a7391367fbfd25072da8fd903ae8a282a8db88d55cdf65047fd6d071ad7d42bd9d619566e5b4abc76827283ea63b0c8eddaebaf5ab52c546bac08b46c585c34cdb504c50995ebb230608bc781eb1444f3539f5299afcedf5526cee442891f23677d15293623229c144144a81631774ad07cb6281b9874b3857b9d4cc92af3adc989c8f59cea5ec98b88241d15d1a522e6c62b9d49cb65ce58f3719fecd3e5224444a81cae66a9f427ef96fcf14efb48ab4cce6990e23a91c1bc732207fb8765b44fc42c6cda0fc403c4adad89f6d3066c063a806f213c0f3be140a1bb50a6de0a7e31c516d1e97c5812a04ecd80924650b3c03a108a114e8d010640dc864c47b73301742610066681750642b9ce597a3aebb24ecabdb769f770798d93130488a98c6119fda0d16efdb0aa0cb8061057521bd863f6b1caed6d2d4dd65ca70a4883e069ecfe29acb43a427bf2bae4f1bcf2881ae5eebfcf365472894bcac940db61b00620dc114a5119db57ea05c7f5cd0e93322ac5e3de2eddaa5d8452117cc3d5f4c9504699fcdcd42b7b0aaa65994f64c16b0db2fabc488dfba8c4d4481fed226a9d583a5b5e01e2c776857b7befea4082f14130f6d7fe201eb0400d5f223115030e3b43510f138255c45b602306bc00d4826a214ad5da4556cbc66371a38c3559c6dc7022365e1a01e602cee1212b06563ab6ce3013db1e46751ec66ea563c30232810ba0d24105692458ff0b303861147ce9a1d715cf389e0f7732493fc9803a16bac102873de6031e03aa461a7f051280ae91f756d0cd0cc5bea9ff2e76f69d77adce8a738035664cb271c8f88ce25d09fceedccc41a765bc6716d3a2a73348e38819400190315213802cb0fab8ae3a667f6e5df8b461f456fc2dee37e4aea4c5bb3c3a296b263a292179b978ccad577ee2aa08bb45d45611bde9ca355d2a51da47fed49d9121b558ea3173d200fb6dd0f1925428f79b0de2a54b448988de2421335bded6f975ef2b9fc454b90cea7df2bd9a5e301fb8fbe6d9f87f608ee60607fc7fe8475d518b509c6a31be0c36a6966b4f7394f5ad5309a5f4847f5c7298eeea66e0ea1dd98e469907957e7af37366b62c45272503a32b7222903852ff776c0c7fbf3b86fc09fabc3d75a98f5c3f0000000049454e44ae426082</data> </image> <image name="image16"> ! <data format="PNG" length="530">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000001d949444154388ded95b16b53411cc73fd1228738bccddb7c0e0ed9f2c04107c1f71fd86e0e818843a740d720a1386450c8f0862219ca6bd02c0e0e151c94363688438724a064888312a538e565107994e2d7c19726845892d66c7ee1f8dd71771fbe77f7bbbb942416a1730ba12e12fc4fe5f4709d1784f68008d3a54e95cc9988555cba845491e912991a991415229680237c5669cf05ace002ebe692c9c53f6258e20bb0cc7ddad024b4cfad6812b131a3f300977d42b369e4cb97f7ca134d5a54704683cadcb13d2bafe3898088f209f0322e6542b361947e9fd68a56e4541d115027188702347078843c79b21d2b7689284dc04bb8ec1212207b68953e4ccb9327b3694483709a875432b1ce32b74dda10b76278c900f08101b08e21c74d30b70c31310643fc388623b678c0bdbfef5991357a889f0821f611db443c44f493a2b1fe12629bdc09a790a8804b319934847426dafd045c441466810e55e333cd04723025f61179226ab365cef9e3da655c2e70838bc015e0d358dc019e31e0173e85d9727df45664d8e323700df83016bf03ef6893e12a4fe6bc40c7ca12f13a597e0351406469919dccd1791cffd15b2cf006f80a7c638bebf83c65703aa723c739f2883ce2eef4c43f2dd8214064593b2b2af5ff6b1aea376333d026e2318dec0000000049454e44ae426082</data> </image> <image name="image17"> ! <data format="PNG" length="741">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000002ac49444154388db5953f68144d18879f9514f7418a394871c5152b44d0a030172df4d0e220858516062c2c2cc4d2cada561bf5ebbef24b2116168a858885cd0ad13585b94d614ec16205418342668b43b718f859cce6fee42e318d03b3cb0e3b0fcfbcefcc3b9124fe4adb0dde5ec26889f8a0f3379bc48a31bb9987c60696307548f0643a8bfda3548c5d9821eb791235c6e103e3ca34fbb9b22cad2cebeb699c4eed0ddf6c6215e3b6af36a4abb1d6e7c83417e092c24315542bcb9224a5ff4be973c9e26427e18a0354d762e9d913e9664bbad0d0ba2193c18c86c27c2babb8be5d017b1dfa1fe04ac7e49e444787f0cd261648dcb986a17918923b50822b4b1621eefa2a243ba1d059ac4ee3943e975ede93be6f4b4f6f492fce48f338cd63a79a3e6849e78d64709a0d02928824114551809fc2e69ee4f0958ee1483b98afde86f719bdc759b100b8730d538f8f41bf08a69f72eaef8aa2ebe99cecb331150c208bc59370f78ce1470b5ad761f55f98fd00af1d5cbc1f966f814739ac15059e4e5441f70403e828b6e749162eb5421c3d503a28d9d774143cb68f775af4918d05e8f0382b3079809eb811a016f812a04c81eeb4a960805e19debf5e57a655f67915bebb7eaf99fb80ab1395d089cd3f17ef0f4d4b07c7815a8dc5f99ae97a12d5a61fa289186f36037422fb794edd033354b12e61ab24dda2684327f2e3c91baf1523a6f5cbff0d4df39cfa5a51b056146c95015a021eda354c0a8966c6cd07c67b9a8e647f11483d497b0e8307fa5507522a73d818d68a98f820270a4035ac6a38cd12a68ff437e004f168288a5ec967fc30fbee61d8fcdd5d9b3f2ad9c0d349fb14a34b77401b3ea754e3835ad1c0a841a60b8da9a6133b6706ab60b8639c895d6573f0f31ca62a7d6e7d1fe8e07fb0d5f2b3370c0bfd041840062373f0ab49108bc9ab29fa5b97e96f3d42f0c3787f1c730000000049454e44ae426082</data> </image> <image name="image18"> ! <data format="PNG" length="790">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000002dd49444154388d9d9531681b5718c77f4ae3f0425c38c5d4c88341857a904010190fb5bbd483a1384b9a4ccd140a595a3a049321245bb2045b292d51370f6de3c5351a8af1e06c49639b38124546677041071e4ee0c03924413636e19fe1dd4971a293491f3cfef7eebdef7bbffbf3bd7748925c49926aa146e372251caf480a24dd4d4bd5b27435ef29cd1549c4756ad5babab5e6cb70d3d2b48d712f4a9282e5fbd239f3735ce213d9dce7c4b64338fd29f00ab25f0e80079c2cc11fa749f61ae8c5898d2d1f477c10d981d4449a45ba6be47f67a4345fc75ad1356bd4febe68d7cf23b946baee4873e35a5c2e2bd60a77c38bb702e0b907df94601d1831f010780dc5b561ce6f0e33f3eb9c3ac61d4bbb5396b68db4e34825232da5f4e442dace5524bfd4ec487da2720cf1deb3af60d0c01af0ca81c73036f123950d0ff250582f740eec4abb725b525a7a94928294544c4bbfa4a52d3b5d73bb1077f5f88b595b62e70cfc6380242baf2fc110785e836ce6ff126fe725e5a54719a9fe40ba96b1effd68fe283138069c9eee1e3f1e834107568111075667c18cd278be0703d068ecc22014560b2412c9338944b21f4802671389644f67e2ea82a445696bd2eaf2a454ca4bd55a58296d8feb7381c01968f7d400387d2d8ff70e696b6e18764b306460fd371849e17aa390cb5ad2cfa0b2e191cdc0ccdafb1eef039c3a4a1c1ddfa7d3d648f7b2a4b25418b794513554a32f936abf47c4a977a89dfef65d11266d1e84cf7eb9bdc9d571d5b6fcf0f3eb6172ab3ffc74f35d2bfac031fae0ae888897a6adba8b5271418a0843e2d6fd5d6d79ec80f3893ad5f1de21d0031c02ab1e73f7eec05f4b7813639003f7bf060c81bbe941c66a3607c57f8b48bb2fa4dd37f1751c123fb8febd345f96a21b35d288785badea883b792d8f9b4db5d597829d4092e4fb56ebdb5683c02ef477ac4eddb8dd39b13ab583f734dc54e16f4ac1f1c427ddcd06c93f1d0a143018f6d9678aa98f1acf7c7beb8383fb16ec5c81df726a48db0000000049454e44ae426082</data> </image> <image name="image19"> ! <data format="PNG" length="632">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000023f49444154388dad934f48937118c73f9ae6b492d9df8554ef2088f587120ad253a388900e21757044617449cacb308a4e323ac8dcc1c083618760e2453c0d83c045c1ba4d2330708765d3260d7c8391a366ecdb61efc062e6367de0cbc3fb3e0f9fdfc3f3fbfe904451a519d010c7d6ad6fa0f58befee2c49fe9564808b6bff672639ad2c7e7310a332b0a273922465563561eb55c67e5ba98e69299953dcfe35729643c08ef2c1d3eeb7796edce28fe7b37c5282c7c041a0a63cf01007a4f1cfca5aac425650d2c8a26b2f4780c6d25731845d09d78064fe5476d68246ac1c94e496f991578003a82e0d1ce3b2e2f66f2a1a237965acf6097cc0b6d2c0fdd815e35632cc33a9e5bdd21de9fca41e4936296db52690442efe8287ff83fffd0155402dd0a0614e28c96f0929859436140ab0a41461bde68312c49e9ce1f87a2bd9c0e87c521c29cb42241c5af1747a64db69bb06ec071a013b602b1f1c664c22177d4a577438daa7b8d472b2256a59adb67457fcab511e982f796e81ea94d6776faf570e87e326b0bb62f06c7ee7f505cf76dfebbe2b49ee0bee39ebb0ed954d5c4453935329b3df9471d4b80fecd932706430725d092912882c02cd405db1be6aca8cb69eb6716061a666a6b9f57c6b17b0ab6863b9134bc273c3734992bcbdde65e03050bfe95514141c0dc6328319b55f690f00fbb60c1cba1a3ae70ff873e6a499069c40c39680256118c698afcf274fa767c47a8d55155fdeda989f9f7fe47ce35c751ace4ec06609809acd80257d696a6aea71fd709d0296815f85da1ffd78765868f4f4ff0000000049454e44ae426082</data> </image> <image name="image20"> ! <data format="PNG" length="437">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000017c49444154388d9d95b16ac33014456fba75ecd0a1433fa0f9bb902f728837872e09193af40b524340193a74c890800b0aa4a0803bdc0e926c45b664a50fccd303f37c38bed82009ee489214a6fbf33c5f92246eb9eca1534ae92ea53eccb3e2a6e5208986d42ff97ff220316b873827e7d9d2f434727d08111b1dac0cf907c92d6f581c2975d6dbc5f64bebc8d274c41d1be2505a18711f26364b0f7b197d689b9aebe51dc72213644d8a6c4356661e484d1f7997b826c564d3b89595626f755253b4e909399e4ea6574443efc0a6864e6a3ac476a9edd661a8baa9299cc596a8f648ce038eed7d9fba895d84d87e231ac71e318068ef77acbc1e706c9758b7cdbc6f89ef00605c02f96c05bc02f96c61fa0a58eb79fc82b67e75bbfc5c8047e0f47d02001c8f27e019c8cb85be81295f2b871800a94c971ef1c1231e2c87582902f7803a2be001188d4620a9c99f80bc5ca5138b486a5cd72e71ea1fa1a9506a64a5bd5ce738d57120357dc4698e4b2f2d363d6b33bf99f9bd75fc077c18f4c89e4dcf360000000049454e44ae426082</data> </image> <image name="image21"> ! <data format="PNG" length="1222">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000048d49444154388d85955f6c14551487bf0eb77287b666372966c7d0426320e9824977dd870e0103c5442911421b486ca3095debc3d688863f89b13ed9c428e9039af6a5d244e2fa225b5ea492342d46ec0262b712ca562b6149206e6d496794d21960d8ebc32eb440c1934c7ef7cce47cf39b933bf714f194b814318b83342cc7eb33102c4b792e61d1e4e0f54d22e554d1d953779e545bf444684dc80c0ab93bedb93541212bd39e5b12149294e7ce8585bc96f2dc0b61218f4543d5c3bd3dbdf7fe17ac22e60b69783f484313a5fd3e36b769dc38033b3f824c3fc8109cec84e9ba1c37ba1c603829e870dfe838b365ef166f51972a62aebc5413ea571153cdec69512aadd4dcc415a59452eadfb987746e6858a90f47d4955a53a988991eac355f8fb5c6c462d0172e45cc7eb5e9ab7beab34379c85feae93aa194fa4529f55a7d4e45cc3f066bcd0d8387073500ed3e38edb90782b0d5d99cd538b81fb259f0c0191802039c3f33791dcfab353004129cd234ec3a569491724d9dc73bf1b17849ac35966ff1488d69aac8214bed89e5dddcbfee149cf57dafd45cc1dd5c21570bdc278795fa7a44a98869abdacd3b5a5a5b966a2335a1e2b06077a6b4ff59221d586379879403c585cfd9b90deb640202e475e7b6f91e1ac07888ac370ae5feb2a46737544fdb3e2d2c9a96e35153e58b6af886f0afa883e327e6a10077c1bfb3117e3d91d747e3e77731aefac076b4f534ad356cab72c9f6e76eac318478db5a39ebd79fdf8b75f528fadc76b22347297b290c8e034b0b6fa95ef318d3696aa638730d2e9f070129f73caf4a7f520b0bb92ced51e28f44c1eec55f510f6e2fc6ea06f8a20b747dd1ad09c0d646f4e9bafc5a3483076121f5044e9996f25c8202acb34760d2247baa0b661dacd35d70ddc469892e0edd5807b316b8f1c28d3808487b2e8d42d7b4fcbfcf9c7fba0eae7662c810fc368adfab86d18fd17b8f2c0e3e3d34ef74810645931b87db452335a1156121e38ee065bdd43f5f28801f4e3cb90d0b9d0b1d70c085946b5fa80a18fbb4b0f44da53cf7824e730e21413681908b433716fa79f711e75242691470736129273acb7c59ade8eca93b61218fa5bdf83f4870fc43b0d1ccef8605e1bc1585d555792de6b1b0e8038f5b0921072c9f6f4603680b858683f01db685be210ab60d2727e7ab0eb6a3bfd206e506faa63638d83effec78065657e19fad270943fe5ded49e0e6836373386206d7c397e980b12918fa44cbca7e0c20ebb918a299ac17c710f2f1dc75312e8ee692d73323d5e5c6e7fb2b023f4ae4cc8343c87db3e37704ef0527b33fa5cf1fc008d481d431cc28c8fe823e92db36c66815a9ebd991eac0be4fdb2b569d6b5ed76c77f774e71e3ae863adb125f517475fdce6f1415aca1dc18aaab2cc2a43ab0ab461d1875f349175bfc5b02d3297c77355d7b2b792b3f65075c0f8667f45e09c444e75f774df864526c8e0e1412d319628e9ba385e97f4dc86f534ac853e035f544f7971c26ebd8bdb3785642221e4807f577b323196f8bb715da3bd70822c3af362adb12217f799ea69db67d85665337a6502a7ac51e85a1c6ed70b263bcb64d6f205665cdc9b12e974f774e71632fe03d1cd4ebb871e2a3c0000000049454e44ae426082</data> </image> <image name="image22"> ! <data format="PNG" length="789">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000002dc49444154388d95944f68545714873ff536f9bdf0a2772409933ad6e0cac12c32c4a262365948a1ab1290d24811fcb73020b88aa5a4142a6e5c0842e9ba820b315aba280805178522a5050d81a622925062e6a9437c98418ff139cfc54cac4e66d2cc078fb379f7bbe7dcf77e175a633b701c98c291022f806f81a045cf7bec057e039ed7a469adfe09e4ea5f76eb10b6e33821a7712087031290842506f0cc127bd5aad80147bcfc791c9d7235996a72a74a5c8e6780a556c41b814fb35dd909499d38b0c4f0ce43525d19c77151e8aa61cf5b11f7f8d08f2b542e50f5db040455a9e069f9296676cd12bbddacab466c003e027667c20c92381a1e4512f202a860fc6e895da4bad52a3635117f0cf4d8b24d5bc5f6f6f6f406336d33846d2196184f169edc894ad1292afcd36cdc551dcb698b429df6de5fc2f1d0caf65d1cc7cb637e0cc35e17e78b77a3381a03ee3693ae8cfc1edefbfedeaede3fe4d561655b989d9f3d2ba7adbecb9f88a2e8672bdbf7c022d007b4038f6a4fbad646e477e507f60fed4f272726d39143236961a0300b1c90533fd0011c00aeca690af81bc775e0c335a500387285fec2cd91cf46fe1d1e1abead505f039b811dc015e0455df25260e0ffc5fffd114354ef06070ccae92690ca29c5d5d5758aeb19943427a9e2439f2a54ba52152ac5f157ad81bac1d72627e99c42ed901300422b71c6cc5e023f1916b5226e97d349effdb042bd8df1bbd5ca366589fd08acba849a250fa0d3b04f24b5679421e333040a38e68f1128c0cc1ec5167f03cc375adc2c79ddc01e2a4c9b59a17b6b77461d426d629a6996ca4ba5d2e3d2b96439b906541a091a75bc49d2e7defbcb92ba2db1f162545c38acc3d53b38b685b9b9b9afccec874647b0165d7db9be5f0a038534bf2bbfa85067247d99cd651f6473d95f251d043e6845b8c2ce7c7ffedee4c4643afac5687a61df050346816d5423bc2e1a9df172d8116ebbffecfe60292ebdbcf5f8d6f57831be013c005eaf57fc065cfe10d43d9a764b0000000049454e44ae426082</data> </image> <image name="image23"> ! <data format="PNG" length="932">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000036b49444154388d8d934168db7614c6bf840e9443413e04ec9b0319b485411c3a582087daec543a08cba9ebc54de9a185c236d343316314b343c8b2307007017b5ec0ee21a8666c9e070339a5ccca08c80949258f6dc8661b72518764d221876cf0ed605999b722e7c1e3d3137fdeffa7ef3d812406296dca51b7c18254a663ef9352b9425727a53277dd06dffdf7d951e93f1437a4a459721da92cd33548595149cb5393ac5465da3bee6e2e2fcd9cba71f64131693eb159f98ea449d67734f2906483a44dd6f735d225a990f68eed641f14a3231b673eca45b575d391aa75d222d57d8d24a9190649b2ded048fbe4bdaca834d6cdad918dd592b156dcac9026a9eeb31f565f54ddab7592c7a4f653bf94ca15aa2523d012a4efafb47c4f499a964d92745d977449d3ecd7c6af665f4d933c24d31f64d6021bd74b1ae5272a6993343c42d7d3416d0e7f092d525eaf07da315efb7d0b89e959286d1d1001e54007ce00facf2d600a705ef48008d0711c60f244ab4fcb080c39af924a7ffabea79e973cf4d4fe4f7d484acb9560e2d20f0fdb88024a5bc7ac08349a2de055a0d5e9006701c7718010d0ebf580b39e9e01ca7be5bd40e2ec15692db7219decad4b6a036f079e0e3cf7626535cbec95e01f65fcd19fd5fbb5c7dbdddad306700e68fca2e3c294473ce9114f00bdbffa207ab385e69e0e3dd2ec06018fd7b6f2ddce6fcef5dec111941f75ccbe76016801539108f01c088542c00b60e215406f02cdaf754c9d9bc5e2c5b76702ad18a0c72f2d2d2cdd4c3952b932b4b783bd2e96242edd4c7165394773832c7eba42de8bb272275c7899156324fd4b12f11be26521f1e1eea4b2f0cec5c5e856bb86f874029f7d9b7f1cfffbf246f7f5a3bd44784e54da0f0ba9b0139d10b701b4f0e87be18bc5cf3bd75f4a2c28a060818202060d85248cab61c7de4993c71aedcd39f29ec8dcd561f271ff8669e01b6420fc11e81c00a0dac37ba1832ad0dd4668210bc4cee3c6fc51f2e3b72205ffd0306986c22afc0ca24ebf194eda7763a495238f55daa518794764fa529f1c8205ca5686649df454b63214bf1a6d496a3e9c345763a455248f55b234472e8bbcfd46b8009f5001c9faa98907b93423268d5b5e7357a5998ff1f67cf4e4c080fc34a4ff6f1e4e1acb31d2c8b17e37cdd4ad34fd759bf864ccdfbbdefb1c1b3dc2e1b8160b15444148e2fc353c7b1efff21f322c8d7ac249c7660000000049454e44ae426082</data> </image> <image name="image24"> ! <data format="PNG" length="902">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000034d49444154388dad934168db7618c55f42070eb4201f02f6cd8616da42a10e1dccb0436d7a2a3984851dd25edc64bd6c14c6cc0ec51d23643d0413c2c05909d8f30276074115a533190ce49432ab232027a4953cb6219b6dc8430529a4452e59e1ed20395eb64ed9ca3ef878fa84f8fd9f9e3e8124fa2daeca31b7c9b228d1b1b74951aad1d54951e2a6dbe4fb7f7ef6b0debfa8ac8819b3ea3aa224d33548595149cb5793acadc9b437dccd62493cfbafc185a54ac67c60b3f60d49936c6c68e42ec926499b6c6c6ba44b5221ed0ddb292c55628782e76e1663dab2e9886b0dd222d56d8d24a9190649b2d1d4487b705f56541acbe6faa160b56a2c56566ba449aadbf4caf244d5fd5927b9476a3f78a328d5a8568dc048909bcdb7f73325695a3649d2755dd2254dd39b8d9f4d4f4d93dc25731fcd2d06821b558df20395b4491abe43d7d7fe6c1e7c135aa4bcdc088c63b8feeb3ad2c7c7a07474400094473a7004d07f6c0371c079da03a240d77180d181ae3d96105872492515efebef67ea67c95d5fedbfccbba4385f0b765cfdee76073140e9e818138066ab0d9c00dadd2e700c701c070803bd5e0f38e6eb1140da92b6021d17c6c5c5e28a38d85b97d4fad9f633ed67ee577ea1c0c278f08f327ce7d9da6cfdfec39dfae326701268fea4e374dc773cea3b1e017abf7b46f4561bad2d1d7ab4b5136478b8be5edae9fee25ce93d7a0ee57b1d63674e036d201e8d024f8070380c3c05465e03f416d0fa4a47fce41826cfbd7536308abef5d4f9e989e9ab5947946a07f6b6bfd795aac8e9ab59e6e78b3457c8caa779f27a8cb56b91f2cba21822b97f483a35235c0ca53fde1c55262e9d9b8cad77ea481d4fe3b3af4bf7532f2eaeecbcfe7c2b1d490a4ae776391b716223c243006ddcf936f4c5e4e7dd2b2f75fc5fda988a38f6468edcd368af26c9eb028b53079dbf12b83011c9b09420ad22b9a792ab497249607e7c004748014316f8375d0083e0b90b918cfde1006e5713e43581b9f31e1c210b94ad39920dd257d99aa3702f184c12d93723197321415a15cf793549ce0b7cf78d487928b400e21faaf7018702570ac04c229cb9918c97e3b359e0e82974bf7c079f949d835bf1aa359388666e4c45cbf1b7df8372ab0de919fe1f30005c4e84cb422894c1a9cbf8ed49eaee1f6117605e4c4c36ec0000000049454e44ae426082</data> </image> <image name="image25"> ! <data format="PNG" length="238">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000000b549444154388ded523112c22010bc3829aeb0484999529fe053c24ff217de76851f592b104f2e88410bc79d611886bb65d95ba23f0c4044d0da0360b3071020db5b48ebe40d8a355995bc3b1057f632f4523f028dc5be7b415803204058c343d1749c92e77ef170cea559f8c5a73add9788b592786666cbcb92c2a7199983d08aa9313da697ccacefe8d5887d56f11e8f71c560f0bca7784f2aea392ee7bf1f66a24377d20b51f498703a0f5bb53f06977dfdebb801e6d1352f2e1e8ff70000000049454e44ae426082</data> </image> <image name="image26"> ! <data format="PNG" length="763">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff61000002c249444154388da5924168930718869fdf5afc037144ad5d3ab2998eeef00f1d545630910daab095b64a572632851d9ca70a9b523cc8f0208581acbda950480f61e241251b5bdb31c57818fe1d0d4d8bac4967b3b4684da42b313425f9e77ef3ee90e926eb4e7b2e2f1fdfc7c377780d49fc1f8cd11ed807c481b0c366dbe4c3ae37ac8eb8cf6adb176cdebce03169fe2dff349e99f865fc76fac6c80c578a2e0bcf0de55330da0de51e3a742e34a94241b752aa91d38ba4ca5274e07e67804f9e0b46bba17088e3b9585ff5d95d6f520ac525cb96ee246725fb73c98e48c93bd26a56b2fbaa213f9fd63ee861af86da9dc2c84066e090f5a3e29195484a8aac4a47ecbf8c439674a3553ae7979e94a55549d176c76fb297a933c11f143da2a0c9411f6ceadbc9b09e4c49b9eb92b2d2fdcb52e19634392065fba5bb919a34f9a5faf770ddd0e485127ebc7c974a8dfd1c7bd875c0da4d4be7360261581c077f0896266a991987c034782d709b18ebbf98377223a172d3b188877c0c7c162c4e4043053245080019e7eff4036b4978c782441abe724a75a1e59597dedc90d883f5ee06723634bc0573d3d0b80be612b539350d5b5760360fdb0ec2e41250c44eaefd6e0046a881f75a5bf8e8e207d661da9a4d02c0dc63f03b30ff18d61c701dc0c46e1f246cf592bff40a7c5fccd5012c95f935b1c437577f5a993dd6526aafaf37bd3486613e0daf6e87fa2ed81166b0709bf31dbb182e5dc22aa519ffdab5ff554dcbcb019df5ffa198250d07353b74595a96b2d19c74dea7de6c50bdb274e1346af571d258afdffd6f131dfc22f8310f1c7894a5b2d143d181a6e2160839300f63d79c64f70c3d75eb09165699d9f2b0f8feee97dded95eab7785e6bc32d1cc5e39da3927549dc74ef75cff0995be5eeba1f00f836f27a6790132702ec4f9b34769a18b12295ca2237cf2e32e2c014f0f43f05ffa001f0020650059681cab3e59f4f24841e355c02530000000049454e44ae426082</data> </image> <image name="image27"> ! <data format="PNG" length="898">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000034949444154388da5914f481c571cc73f2b7b982d0a6fcb069ca2b00b0632db1c4621d06c1176ed29965e1a72cac542a187a5d0d27a283dc49043593610a4f150302c813da58684d42858dc29b46a68ebee12d02921384b941d89e20c45760632f07a58ff6535a8cdf7f285f77e7cf8bcf78396d4cb8d4ae34f29e5bf522e3d95b2f14ccafa4ca3502f37e2adb3a7cae4a3b982accb43999d59942bf35b436f059fb8375b902f0ec3eb330db954da4abf15bc7877b2d07876185ebc3b699d08b0f868a530fed3a47ed4ddf89dc907addfb2f554ca37cd1f4c9bb9b13ca491346e8f165f1bbe3d5ad42f2a7d69afdd6b1ebc6a961558248244fa58e3a5525dca1752cedd5b72f2b9263c9f2bea8b5375476eed68360ef44b29f3b9e2c8b1c60b5619ba41d5a34243336e5c1f1f4a895e43d51541141cc783c87e3ffe7b1e3fd06ac781c38970c265039138abe25d52855a8b16face27400536207a26f27afb2afe76e95870db54d57868d73cec5587e4395075015d60afda20c05e75408065d978db40a78716d66ead8c695fc9314dbc091c1abf3e1b375db37273382bf08118b0d9d2ebe004e0af7b88ae08d65f5992dd2e542a55624a2674b5e2ee02a59422140ab96d9f5ffba8e66d7b99ec0f375d6bcd61b966413b2caf1d68052c7719b52782b99025e91bd80b53d0afe8e535df90b97df35028e40284760ff25f4fe895cdcaad817303691b9b54bc97f9e70b684263f0628a480f94a7bfa5afc302abb4b7032e0ce2fdda347fe78b7df33df06e3ebdf27d5c418bfb9869057ef3410c760e1434fdbe4805064ed826aa28800f2878814fe4ac4a699a6a2f64debd61ba47828fcac470efc8e50bda35c225e85260d38798b2bf83351f6229ec69b34a8ccc7bdf98ee89c0f5ef34510e303ebe844ed883ce08ac039dc09ab7b760c2111e4f534d42e6446080959c26caeb18973fd174625613fadc07c503d3873340000429ee1be6c313830196bed44425c0b8fa013afd0ab84e136ebbd0ae80ef43b7c0fa3d4adb69c0efff68ba5a8ccc9d3fa8f24fa2f9fc9e1d60c7ce908065bc932daf35739f35cdb3e71d9d2e1ffa13f0c4020f08a0fc44754f65bc9b0f0b4df3b16ab4caa602bf981006b67dac9a60619bd1ff65bc9bfc154df08a07a90ed256d841f5a36e396074f86773e43f0ba1d58ebc92164f0000000049454e44ae426082</data> </image> </images> --- 985,1070 ---- <images> <image name="image0"> ! <data format="PNG" length="2001">89504e470d0a1a0a0000000d4948445200000020000000200806000000737a7af40000079849444154588595976f6c5be515c67f8164b2a7564ba4b05d0bd0e22965711704ced044b2a1a9d6feb0b4489d99272d5d3e60609382f6a12a7ce80a9350da21642a8dadd988e43031d9fd80dc682b8e370171a780dd2ae05b946027a4d1759581531974134ce55621e2d9877b0b499ba4e595ae1e9dfb5edd73dee73ce77dcfdb2089868606361b3a4233b3fc930e7e68ce42573b300fb48339efdab34007e467a1a7c3b5db213f0f3d6bbeffdc9ee563da196a7886a71bae1740a19f77ba3cdcb5d40e2ddbe012e0e5067015bc8d9be0fb903d0fdd97f8c39601a89f9fd3c128ad402405db1e84a64d63bdf1f1da4e28cfc0eb7c70d3753e0d96de077ed60ddb7aa0094a3379f8144ad31b63fef4d896f3e57379f871894bceff6f45d2a6de73bf62504348a5039224ad14a5154996a48a349ec939ef2db998936a57d957cf4bee3f021a8fa02d19e86984d22c10780c2e65a16927d9d7b32cbe0687ff9e25ff560fe65b59f0c3e2b92cf87b306793eb6c07bfb0cb33279c34ce4308d83a05abb0b3039849c27288e48be06f0c61fae0c9df87f078c0773144e9f408bed6209c1ea1cbe859630fe1f318945e790c1fc0a9c3f86f0bc02727a023ecf8d82a057a2afae7f4504c76524abc54507d4e8a2607d49dec96f1b4217b4a1af85ddaa1b5eed05b994b38f6424caa0f4866741d569286b4d026659aa508da3000bdaa8734a77752a345a924c53329a5cc9462133149526c2126236f28f66a5ce9a392325782483be2983b24ada4a5a9816b71aa4dca20cda1f1bd6b345098ac34aba2fde359eb3cedbc98bf50beabdcd9c2beb30fd37b6f0f818e00cbf72dd3f2460b4ff004172e5f60e8f461ce7b4cb2ff0ec12749f086587ce371d8b104f3a37027d7e0e2fc65e804ce43a8c94d41c1d49f646b49138e428f65e34a9929a5e79c9525aa090dd607451651454c2263c590e78847b2a5be48429ab224f38054ea96267aa56a5c9a08bbb8c62e19d204521569af9b02d952b1644b92ba87bb2549855a41b66c0d58030ad6826202796a1e195386daac36058683524daa54a503fba5c183714903aae47b250d48567443acbc6a4836d2a413809382777965a7d142be9c67df7dfb18f97084c5ed8bec9edecd68eb2833f33304ee0d609c317872f5490e7f748c52bf49e9bf797cb740f72ef037f6c1b4175f6718fe07f837465fa707de073a217ba50a34a59fa433ce6e117c29a8602d28cfa447cdb566b54db529600534903d20ad48b62da92e159f3f2655a55c7f5492d4d79f92756450854c50aaf6cacaefda18b3cd92904a6b520034aaa405e5a54add56db449b0ed50f695776970ad5a28a952b3b99038597c7a58c2545fa248f47859773aa4c48d1feb834b74b327ba5dab18db16a4896b3eeb50134c44772bfad27a54ac5567d454a97c6254976cdf56dd59d4aab49f561a96218d2b66659cdcd922515ccbafa22b612c351a9deab8ad9ebe2ae75b69577195858ab0150d013183d7ed9fcd8d7d8827715760742508696edc039f0fbbdf02178b7c3710ff8461719bba707ffb3e3d0085d412ffece199a2f1e86f3e0ebec75f1c175b6ff6e0f7c08dcbe4603eeb8c97a5ecfc4870ace8e56d5170c54a5f4494baa4ac5b9baec97246be10a33b6b422e5ccbab420852309c90cab900f4ad5ee6bd0323d0e03b5f52900e0d053a93bac93526ec2cdf99c03c5394925d7ae490573bd265495ec49673e7d541a7c3a26e99864f56e8086b4f28506d61d4647067f319f3c3b76dcf7162c2d016d30f65a19df69287b801d50beb0445710ccb34bd00ae532700b64ce9560072c1b6566de7d98d259f7142c9f7031037e28972f43132c4d5f49fe5567416eb8fed3430725d9eeb356fd93aeed9662e265672e9d916c53ca4d3aeffbfa53b24e8e4ba53649075c0cb8e88a7014a5f7f0c14687d1cde3fb351d7bd639ddaee45a2b9216a4dca4135561aaaebae9a6475265c1799f3e69a978548a3e14974c6425b9169f42e93d68f05ef66fd41336441f4dfc26dcb1ef85dd0f38b4b304b400a7dcb4bc0ba136f05e04ee76bbe33b71d47d19926780e94b2c4fefe6314e91c5693e58051a616c95f77c1f31fcdd338c6dd60f34451f4a2d5bcfbb0c5425cb92eca453ef92542cd55d86ead29cc388248d672bd282147d34a5f05e7b16b80b080077ac797600df045a37eb885643b785fe7af8ed13f86f072e82df03333ba0abdd0b65d819f0c212f86ff732720aba0c2f63af807fd5c7e37f8190d1cbe5d5e3ef0175979bc5ab9e2ab0bc6947d4fd83035fef8bd88a0f17d7ad582b4eb97dcec49c541976043878c4d907fa22f607c17b061e013a806f005fd964a15bb6643785f7c693e9a38ef824670f90a454c6a9847446aa4f49b1a305a58ed4158e246ac77e548c01df01fc402bce3d65f3de738b0008efb1be178e24549f928a25a7c4ac05a96e4a8592e33cfa684a7d115bbdf7c7928611ec01da0103d80634029b5fbbae17007073e2a0fde6a183ceca7379878df888941b71e88eefadbc1dbcbbef97c0b7815b81afe150beb56377345e67feb3d199d17f789ac2dfcfbe01a17b5a78ee6f2667cff8c97c3a5a59fa68e6b947defcf57f7084f6898b2bc06737e21cb82e03004de14862617c488af6a7943868d77aef8fbd80d35a7e0bb805f82a703337b8ea2f1b4043786fe58fe14842e13dd6bf9a5b033d3875ec03b6e3dc73bebc6377fc1f5c3df3671703dbcc0000000049454e44ae426082</data> </image> <image name="image1"> ! <data format="PNG" length="715">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000029249444154388d9d94cf4b146118c73fc62cbc2fac340b1e7620a23918ee2211529042204b425837e920d225bb758aa8fe01e952c7bc147b09b7dbe221b240580f8176885d23d99514564a98858c19d881f70d07b6c3cc48b993e63e9787e79987effb9deff3a3afd3e9105b79b1d21106e8003080008e8a8530cfde9818f94e82198713856b05a4ec2e546dd01a3c1fd0e0f8759cddd6b7f272f5fcd4c4c8d6e1fa538713b2eba928df0f42809906040843921b2a80f6bebe5dae5e38165805c9c000521049003a505826d8670a68dffb5c5eae5ee989310029c8a443606148b4011901998151d0de5ae94d75a627c63178ccd8d969e2f8754cd1c2ca661181b7507a551a8284e61dc938ae913076398f6a4373878e0ee833819adbfa691a0c019b27671cd7b5a1b50b6c96fbc4976217c593691c83369bb43e56c0807c76897c6e156980e9550d6ba7722e11d8f5d5fe714cf5da1cf6a50aac3f43a143d1378acc4c7ba773038d4789c02053aa1d02a836a040a9c8bbe192e8c107b0eb605fd7c8b40003ec7107f65c5677ac1790d0bc588e58ebd8bb0108406f9411de1ace0f0f2bedc0f008a4806693fa622dc8a5f5d5fa9dccdd2e60112d818c6e03215944149bfa35f2e628900d3fa644e8b336f9fb590328a8f72b63c9ad4a01fb800cbd8c984b03dce1e7789f1a502b614d5be16f00684df5e952d0f4334fbcdad2c2bfa722f5874f85b38b0199ac85081cacdb36ecb9b05e83ed066c3b8c3c9c346cd31d9cfdd0d93ad91c478fd0aaa0b61b38de142a1410377d0fb5dee858038c418f9b97b95584b642f64bd4bb22caf7c88ce7995f99ec1386f778360958052053096887ad3f3ada17e7c0770fa41369f357cf8cffaab76cc0eecaf77c2b8eb39e6ec5ff5817ccfccb12000a8d3c18d293c7bf01e4f204d5cd5b1f5e0000000049454e44ae426082</data> </image> <image name="image2"> ! <data format="PNG" length="947">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000037a49444154388db5954f685d4514c67f0913988104efa311de8306de03459ad57b55176d37f94337d545ad2b2d2eba6d418c144442a99064632d5d0aa20d6e5c580c91425d144dd1da0826790135e9a2f43e48e8bda4a177b017e760476e17f35efe60b3e82203c3ccbd9cf3ddef9cef7cdcaea228d88fd5bd2fa840d7f3268c4f2d5645988eb4ae5b2bb5cb975eb5cf8a7b2ec6e3538b1f44bdba79eecce1a1d3efd42207d37b061745b1e7eeac89a9c5f... [truncated message content] | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-11-03 10:44:23
      
     | 
| Update of /cvsroot/q-lang/qt-q In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv26633 Modified Files: ChangeLog Makefile NEWS Log Message: update ChangeLog and NEWS, bump version number Index: NEWS =================================================================== RCS file: /cvsroot/q-lang/qt-q/NEWS,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** NEWS 5 Oct 2007 09:29:10 -0000 1.2 --- NEWS 3 Nov 2007 10:44:19 -0000 1.3 *************** *** 1,3 **** --- 1,7 ---- + * 1.1 November 2007 + + Bugfixes (see ChangeLog for details). + * 1.0 October 2007 Index: Makefile =================================================================== RCS file: /cvsroot/q-lang/qt-q/Makefile,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** Makefile 19 Sep 2007 08:48:40 -0000 1.2 --- Makefile 3 Nov 2007 10:44:19 -0000 1.3 *************** *** 5,9 **** # version number: ! version = 1.0 dist = qt-q-$(version) --- 5,9 ---- # version number: ! version = 1.1 dist = qt-q-$(version) Index: ChangeLog =================================================================== RCS file: /cvsroot/q-lang/qt-q/ChangeLog,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** ChangeLog 13 Oct 2007 18:04:14 -0000 1.11 --- ChangeLog 3 Nov 2007 10:44:19 -0000 1.12 *************** *** 1,2 **** --- 1,17 ---- + 2007-11-03 Albert Graef <Dr....@t-...> + + + Release 1.1 + + * src/smokeqt.i (callMethod): allow non-class pointer return values + + These are needed for some methods. Note that if the pointer is not + passed back "by value" (i.e., as a reference or a const pointer) + then it will leak memory. There is some code near the end of + callMethod() which you can enable (it's disabled by default) to be + warned about such situations. + + * src/smokeqt.i (to_cstack): allow the integer 0 to be passed as a + NULL pointer for scalar pointer values (e.g., char*) + 2007-10-13 Albert Graef <Dr....@t-...> | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-11-03 10:39:52
      
     | 
| Update of /cvsroot/q-lang/qt-q/src In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv25892 Modified Files: smokeqt.i Log Message: allow non-class pointer return values, and allow the integer 0 to be passed as a NULL pointer for scalar pointer values (e.g., char*) Index: smokeqt.i =================================================================== RCS file: /cvsroot/q-lang/qt-q/src/smokeqt.i,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -d -r1.24 -r1.25 *** smokeqt.i 21 Oct 2007 02:40:24 -0000 1.24 --- smokeqt.i 3 Nov 2007 10:39:46 -0000 1.25 *************** *** 246,249 **** --- 246,250 ---- QNetworkOperation>, -*, -& nil NULL class pointer + 0 other NULL pointer (char* and other "scalar" pointers) NOTES: 1. Generally, the supported types of C++ pointers and references are *************** *** 298,303 **** 7. The constant 'nil' is used to represent null pointers for class values. This is most useful for passing a NULL pointer for the 'parent' parameter ! of QWidget constructors. CAVEAT: Passing a nil value to methods which ! require a real Qt object may crash your application. */ // special constructors for byte string references --- 299,305 ---- 7. The constant 'nil' is used to represent null pointers for class values. This is most useful for passing a NULL pointer for the 'parent' parameter ! of QWidget constructors. Similarly, other NULL pointers (char*, etc.) can ! be passed as the integer 0. CAVEAT: Passing a NULL pointer to methods which ! are not prepared to handle them will crash your application. */ // special constructors for byte string references *************** *** 3605,3612 **** return '$'; } else if (isbstr(x, &mval)) { - arg.flags = Smoke::t_voidp; - arg.conv_table = conv_bytestr; - return '#'; - } else if (isbstr(x, &mval)) { // QByteArray arg.flags = Smoke::t_voidp; --- 3607,3610 ---- *************** *** 3761,3764 **** --- 3759,3767 ---- } return 1; + } else if ((type.flags & Smoke::tf_ref) == Smoke::tf_ptr) { + /* as a special case, we allow the scalar 0 to be passed as a NULL + pointer */ + out.s_voidp = NULL; + return 1; } else return 0; *************** *** 4453,4464 **** expr f = obj->find_cb(meth); if (!f) return false; - if ((ret.flags & Smoke::tf_elem) == Smoke::t_voidp && ret.name) { - /* We only allow scalar and class return values since other pointer data - is only allocated temporarily, and we don't want to leak memory like - a sieve. */ - fprintf(stderr, "smokeqt: ignoring callback %s (unsafe return value)\n", - meth); - return false; - } // get arguments int n = m.numArgs; --- 4456,4459 ---- *************** *** 4504,4507 **** --- 4499,4513 ---- } qstack[0].free = NULL; // this should be NULL anyway, just to be sure... + /* Enable this to be warned about potential memleaks for non-class pointer + returns which are not passed back "by value". */ + #if 0 + if ((ret.flags & Smoke::tf_elem) == Smoke::t_voidp && ret.name && + qstack[0].arg.s_voidp && !qstack[0].ptr_copy && + ((ret.flags & Smoke::tf_ref) == Smoke::tf_ref || + (ret.flags & Smoke::tf_ref) == Smoke::tf_ptr && + (ret.flags & Smoke::tf_const))) + fprintf(stderr, "smokeqt: return value of callback %s leaks memory\n", + meth); + #endif /* Note that if qstack[0].ptr_copy has been set to a non-NULL value at this point, it means that the method return value is a class instance | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-11-02 10:49:41
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv25741 Modified Files: qcalc.q Log Message: maintain script edited status in the text editor, cosmetic changes to the window caption Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.64 retrieving revision 1.65 diff -C2 -d -r1.64 -r1.65 *** qcalc.q 2 Nov 2007 10:12:49 -0000 1.64 --- qcalc.q 2 Nov 2007 10:49:15 -0000 1.65 *************** *** 728,732 **** text_changed _ _ _ ! = EDITED := true || update_title; linenumbermsg _ _ N --- 728,732 ---- text_changed _ _ _ ! = update_title; linenumbermsg _ _ N *************** *** 1133,1137 **** save S D A = save_as S D A if eq (get FILENAME) (); save _ _ _ if global: ! = EDITED := false || update_title || fprintf F "// qcalc %s, created %s// %s\n// %s\n// %s\n%s\n%s" --- 1133,1138 ---- save S D A = save_as S D A if eq (get FILENAME) (); save _ _ _ if global: ! = EDITED := false || qt EDIT "setModified" false || ! update_title || fprintf F "// qcalc %s, created %s// %s\n// %s\n// %s\n%s\n%s" *************** *** 1196,1201 **** highlight_flush_cache || qt EDIT "setCursorPosition" (0,0) || ! EDITED := false || FILENAME := NAME || ! update_title || do (qt TABLE "clearCell") (keys (get CELLS)) || CELLS := hdict (zip KEYS (map (cst true) KEYS)) || --- 1197,1202 ---- highlight_flush_cache || qt EDIT "setCursorPosition" (0,0) || ! EDITED := false || qt EDIT "setModified" false || ! FILENAME := NAME || update_title || do (qt TABLE "clearCell") (keys (get CELLS)) || CELLS := hdict (zip KEYS (map (cst true) KEYS)) || *************** *** 1236,1241 **** highlight_flush_cache || qt EDIT "setCursorPosition" (0,0) || ! EDITED := false || FILENAME := NAME || ! update_title || do (qt TABLE "clearCell") (keys (get CELLS)) || do (\I.qt TABLE "setRowHeight" (I,DEF_HT)) ROWS || --- 1237,1242 ---- highlight_flush_cache || qt EDIT "setCursorPosition" (0,0) || ! EDITED := false || qt EDIT "setModified" false || ! FILENAME := NAME || update_title || do (qt TABLE "clearCell") (keys (get CELLS)) || do (\I.qt TABLE "setRowHeight" (I,DEF_HT)) ROWS || *************** *** 1255,1260 **** qt EDIT "setText" "" || highlight_flush_cache || ! EDITED := false || FILENAME := () || ! update_title || do (qt TABLE "clearCell") (keys (get CELLS)) || do (\I.qt TABLE "setRowHeight" (I,DEF_HT)) ROWS || --- 1256,1261 ---- qt EDIT "setText" "" || highlight_flush_cache || ! EDITED := false || qt EDIT "setModified" false || ! FILENAME := () || update_title || do (qt TABLE "clearCell") (keys (get CELLS)) || do (\I.qt TABLE "setRowHeight" (I,DEF_HT)) ROWS || *************** *** 1531,1547 **** if check_editing || check_edited if global; ! check_edited = true if not get EDITED; = (question "<b>Warning:</b>: The spreadsheet has been edited!<br/>\ Discard all changes??" = OK); ! update_title if title_changed: ! = qt MAIN "setCaption" "QCalc" if eq () (get FILENAME); = qt MAIN "setCaption" $ sprintf "%s%s - QCalc" ! (get FILENAME,if get EDITED then "*" else ""); def LAST_TITLE = ref ((),false); title_changed = LAST_TITLE := TITLE || true if neq TITLE (get LAST_TITLE) ! where TITLE = (get FILENAME,get EDITED); = false otherwise; --- 1532,1554 ---- if check_editing || check_edited if global; ! edited = get EDITED or else qt EDIT "isModified" (); ! ! check_edited = true if not edited; = (question "<b>Warning:</b>: The spreadsheet has been edited!<br/>\ Discard all changes??" = OK); ! update_title ! where FNAME = get FILENAME, ! STATUS = if edited then " [modified]" else "" ! if title_changed: ! = qt MAIN "setCaption" $ sprintf "QCalc%s" STATUS ! if eq () FNAME; = qt MAIN "setCaption" $ sprintf "%s%s - QCalc" ! (last $ split "/" FNAME,STATUS); def LAST_TITLE = ref ((),false); title_changed = LAST_TITLE := TITLE || true if neq TITLE (get LAST_TITLE) ! where TITLE = (get FILENAME,edited); = false otherwise; | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-11-02 10:12:54
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv13595 Modified Files: qcalc.q Log Message: make sure that cell contents are properly updated when the interpreter is offline Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.63 retrieving revision 1.64 diff -C2 -d -r1.63 -r1.64 *** qcalc.q 2 Nov 2007 09:56:51 -0000 1.63 --- qcalc.q 2 Nov 2007 10:12:49 -0000 1.64 *************** *** 2051,2066 **** if check_interp; ! doprocess (I,J) if check_interp: ! = CELLS := insert (get CELLS) ((I,J),true) || qt TABLE "setPixmap" (I,J,NULLPM) || // flag "bad" cells (cyclic computations) do flag U || // do the necessary reevaluations ! compute (I,J) V where (V,U) = eval_list, V = dropwhile (<>(I,J)) V; ! process (I,J) S if check_interp: ! = EVAL := insert (get EVAL) (I,J;S,'X,DEPS) || doprocess (I,J) where ("=",S) = (hd S,trim (tl S)), --- 2051,2064 ---- if check_interp; ! doprocess (I,J) = CELLS := insert (get CELLS) ((I,J),true) || qt TABLE "setPixmap" (I,J,NULLPM) || // flag "bad" cells (cyclic computations) do flag U || // do the necessary reevaluations ! if check_interp then compute (I,J) V where (V,U) = eval_list, V = dropwhile (<>(I,J)) V; ! process (I,J) S = EVAL := insert (get EVAL) (I,J;S,'X,DEPS) || doprocess (I,J) where ("=",S) = (hd S,trim (tl S)), *************** *** 2072,2080 **** else insert (get CELLS) ((I,J),true)) || qt TABLE "setPixmap" (I,J,NULLPM) || ! compute (I,J) V where S = qt TABLE "text" (I,J), _ = EVAL := delete (get EVAL) (I,J), ! (V,U) = eval_list ! if check_interp; empty (I,J) = false if member (get EVAL) (I,J); --- 2070,2077 ---- else insert (get CELLS) ((I,J),true)) || qt TABLE "setPixmap" (I,J,NULLPM) || ! if check_interp then compute (I,J) V where S = qt TABLE "text" (I,J), _ = EVAL := delete (get EVAL) (I,J), ! (V,U) = eval_list; empty (I,J) = false if member (get EVAL) (I,J); | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-11-02 09:56:55
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv1747 Modified Files: qcalc.q Log Message: allow the user to abort a compilation, in case the interpreter hangs at startup Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.62 retrieving revision 1.63 diff -C2 -d -r1.62 -r1.63 *** qcalc.q 2 Nov 2007 01:42:39 -0000 1.62 --- qcalc.q 2 Nov 2007 09:56:51 -0000 1.63 *************** *** 164,168 **** special no_undo X; ! check () = statusmsg "Done"; check _ = statusmsg $ sprintf "Error loading file: %s" $ ARGV!1 || mark_undo [] || init_interp --- 164,168 ---- special no_undo X; ! check () = (); check _ = statusmsg $ sprintf "Error loading file: %s" $ ARGV!1 || mark_undo [] || init_interp *************** *** 442,447 **** begin_compute = ABORTED := false || wait_cursor; ! end_compute = // Request to abort the computation by the user. // This presumably means that the interpreter hangs // in some endless computation, so we better restart it. --- 442,449 ---- begin_compute = ABORTED := false || wait_cursor; + end_compute = ABORTED := false || normal_cursor; ! end_compute_test ! = // Request to abort the computation by the user. // This presumably means that the interpreter hangs // in some endless computation, so we better restart it. *************** *** 513,520 **** digest "+++ Error." = STATE := 2 || statusmsg ! "Compile finished with errors. Please check the log!"; digest "+++ Done." = STATE := 3 || ! statusmsg "Compile finished successfully"; ! digest "+++ Ready." = STATE := 4; digest "+++ Exiting." = STATE := 0; --- 515,522 ---- digest "+++ Error." = STATE := 2 || statusmsg ! "Compile finished with errors. Please check the log!" || show_editor; digest "+++ Done." = STATE := 3 || ! statusmsg "Compile finished, starting interpreter"; ! digest "+++ Ready." = STATE := 4 || statusmsg "Ready"; digest "+++ Exiting." = STATE := 0; *************** *** 563,571 **** /* Compile stuff and start the interpreter. */ ! compile _ _ _ = waitmsg "Compiling..." || ! init_interp || ! // use the opportunity to rebuild the highlighting cache ! highlight_rebuild_cache || ! process_all || digest_loop if global; init_interp = TASK := (TMP|NEW_TASK) || --- 565,573 ---- /* Compile stuff and start the interpreter. */ ! compile _ _ _ = process_all || digest_loop ! if RES ! where RES = waitmsg "Compiling..." || init_interp, ! _ = highlight_rebuild_cache ! if global; init_interp = TASK := (TMP|NEW_TASK) || *************** *** 593,610 **** PWD = getcwd, PATH = chdir PATH || getcwd; ! check_startup (H,PID,MASTER) if get STATE=4: // We're up and running, hooray! :) = true; if not active H: ! // The reader thread has exited, so the process has presumably died, too. :( = false; // From here on we assume that the process is still alive and kicking. ! if #MSGS>0: // We got some output, digest it and retry. ! = digest (get MSGS) || check_startup (H,PID,MASTER); otherwise: // No output yet, take a short nap and try again. ! = sleep 0.1 || check_startup (H,PID,MASTER); fini_interp = // nuke any old interpreter task --- 595,620 ---- PWD = getcwd, PATH = chdir PATH || getcwd; ! check_startup INFO ! = end_compute || RES ! where RES = begin_compute || startup_loop INFO; ! ! startup_loop (H,PID,MASTER) if get STATE=4: // We're up and running, hooray! :) = true; if not active H: ! // The reader thread has exited, so presumably the process has died, too. :( = false; // From here on we assume that the process is still alive and kicking. ! where S:String = try2 MSGS: // We got some output, digest it and retry. ! = digest S || startup_loop (H,PID,MASTER); otherwise: // No output yet, take a short nap and try again. ! = startup_loop (H,PID,MASTER) ! if begin_local || qt APP "processEvents" 100 || ! end_local || not get ABORTED; ! // User aborted compilation, bail out. ! = fini_interp || statusmsg "Compilation aborted" || false; fini_interp = // nuke any old interpreter task *************** *** 1177,1199 **** open_file NAME where F:File = fopen NAME "r": ! = highlight_clear_cache || ! qt EDIT "setText" SCRIPT || ! highlight_flush_cache || ! qt EDIT "setCursorPosition" (0,0) || ! EDITED := false || FILENAME := NAME || ! update_title || ! do (qt TABLE "clearCell") (keys (get CELLS)) || ! CELLS := hdict (zip KEYS (map (cst true) KEYS)) || ! EVAL := hdict (zip KEYS2 (zip3 VALS2 XVALS2 DEPS)) || ! do (qt TABLE "setText") L1 || ! do (\I.qt TABLE "setRowHeight" (I,DEF_HT)) ROWS || ! do (\J.qt TABLE "setColumnWidth" (J,DEF_WD)) COLS || ! do (qt TABLE "setRowHeight") HT || ! do (qt TABLE "setColumnWidth") WD || ! // give the interpreter some time to start up ! waitmsg "Compiling..." || ! init_interp || process_all || statusmsg "Done" || ! mark_undo L1 || no_undo digest_loop || () where ROWS = [0..qt TABLE "numRows" ()-1], COLS = [0..qt TABLE "numCols" ()-1] --- 1187,1211 ---- open_file NAME where F:File = fopen NAME "r": ! = if RES then process_all || ! mark_undo L1 || ! if RES then no_undo digest_loop || () + where _ = // initializations + highlight_clear_cache || + qt EDIT "setText" SCRIPT || + highlight_flush_cache || + qt EDIT "setCursorPosition" (0,0) || + EDITED := false || FILENAME := NAME || + update_title || + do (qt TABLE "clearCell") (keys (get CELLS)) || + CELLS := hdict (zip KEYS (map (cst true) KEYS)) || + EVAL := hdict (zip KEYS2 (zip3 VALS2 XVALS2 DEPS)) || + do (qt TABLE "setText") L1 || + do (\I.qt TABLE "setRowHeight" (I,DEF_HT)) ROWS || + do (\J.qt TABLE "setColumnWidth" (J,DEF_WD)) COLS || + do (qt TABLE "setRowHeight") HT || + do (qt TABLE "setColumnWidth") WD, + RES = // give the interpreter some time to start up + waitmsg "Compiling..." || init_interp where ROWS = [0..qt TABLE "numRows" ()-1], COLS = [0..qt TABLE "numCols" ()-1] *************** *** 1231,1235 **** CELLS := emptyhdict || EVAL := emptyhdict || ! init_interp || statusmsg "Done" || mark_undo [] || () --- 1243,1247 ---- CELLS := emptyhdict || EVAL := emptyhdict || ! init_interp || mark_undo [] || () *************** *** 1940,1944 **** compute_all V = begin_compute || do submit V || collect_results emptyhdict V || ! end_compute; submit (I,J) = send_expr '(yyeval (I,J) X) --- 1952,1956 ---- compute_all V = begin_compute || do submit V || collect_results emptyhdict V || ! end_compute_test; submit (I,J) = send_expr '(yyeval (I,J) X) *************** *** 2007,2011 **** compute U V = begin_compute || do submit_clear U || collect_results emptyhdict U || ! end_compute where U = all_deps U V, U = filter (member (get EVAL)) U; --- 2019,2023 ---- compute U V = begin_compute || do submit_clear U || collect_results emptyhdict U || ! end_compute_test where U = all_deps U V, U = filter (member (get EVAL)) U; | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-11-02 01:43:31
      
     | 
| Update of /cvsroot/q-lang/qcalc/examples In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv10376/examples Added Files: clock.qcalc Log Message: add clock example --- NEW FILE: clock.qcalc --- // qcalc 1.0, created Fri Nov 2 01:52:08 2007 // [((0,0),"Fri Nov 2 01:52:06 2007")] // [] // [(0,141)] // Start of script. Please do not remove this line. /* A little example which demonstrates how to use a Q thread to perform continuous updates of the spreadsheet through a background task. It reads the system time each second, formats it using the ctime function and shows the result both in the status line and the first table cell. */ import calclib, system; def T = thread timer; /* Uncomment this to have the time printed on standard output instead. This also works outside QCalc. (In QCalc, output will be shown in the log.) */ //timer = puts $ ctime time || flush || sleep 1 || timer; timer = message TIME || setval (0,0) TIME || sleep 1 || timer where TIME = init $ ctime time; | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-11-02 01:42:42
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv9951 Modified Files: qcalc.q Log Message: comment change Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.61 retrieving revision 1.62 diff -C2 -d -r1.61 -r1.62 *** qcalc.q 2 Nov 2007 01:35:10 -0000 1.61 --- qcalc.q 2 Nov 2007 01:42:39 -0000 1.62 *************** *** 26,29 **** --- 26,32 ---- - Configurable fonts and colors for the syntax highlighting. + - Configurable table size, or maybe allow to add new rows and columns + anywhere in the table. + - Add configurable cell properties (floating point format, alignment, span, fonts, colors, frames, etc.). | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-11-02 01:35:12
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv6615 Modified Files: qcalc.q Log Message: comment change Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.60 retrieving revision 1.61 diff -C2 -d -r1.60 -r1.61 *** qcalc.q 2 Nov 2007 01:34:04 -0000 1.60 --- qcalc.q 2 Nov 2007 01:35:10 -0000 1.61 *************** *** 30,36 **** - Additional convenience functions (Drag and drop? Allow range selections ! to enter cell references, etc.) ! ! - Add online help. */ def VERSION = "1.0", --- 30,34 ---- - Additional convenience functions (Drag and drop? Allow range selections ! to enter cell references, etc.) */ def VERSION = "1.0", | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-11-02 01:34:08
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv6204 Modified Files: qcalc.q Log Message: setval: show strings as ordinary text Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.59 retrieving revision 1.60 diff -C2 -d -r1.59 -r1.60 *** qcalc.q 2 Nov 2007 00:38:34 -0000 1.59 --- qcalc.q 2 Nov 2007 01:34:04 -0000 1.60 *************** *** 289,292 **** --- 289,300 ---- htmlquote S = regsub "g" "[<>&]" S (htmlquote (reg 0)); + special checkstr X; + checkstr '_:String + = true; + checkstr _ = false otherwise; + + unquote S = X if checkstr 'X where 'X = valq S; + = S otherwise; + // manage defaults *************** *** 522,526 **** "^\\+\\+\\+ Update: (\\([0-9]+,[0-9]+\\)) (.*)$" S (reg 1,reg 2), ! (I,J) = val K; = qt LOG "append" S || qt LOG "scrollToBottom" () otherwise; --- 530,534 ---- "^\\+\\+\\+ Update: (\\([0-9]+,[0-9]+\\)) (.*)$" S (reg 1,reg 2), ! (I,J) = val K, S = unquote S; = qt LOG "append" S || qt LOG "scrollToBottom" () otherwise; *************** *** 1974,1978 **** "^\\+\\+\\+ Update: (\\([0-9]+,[0-9]+\\)) (.*)$" S (reg 1,reg 2), ! (I1,J1) = val K1; // anything else just gets passed to the digest function, and we try again = begin_local || digest S || end_local || --- 1982,1986 ---- "^\\+\\+\\+ Update: (\\([0-9]+,[0-9]+\\)) (.*)$" S (reg 1,reg 2), ! (I1,J1) = val K1, S = unquote S; // anything else just gets passed to the digest function, and we try again = begin_local || digest S || end_local || | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-11-02 00:38:39
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv17129 Modified Files: qcalc.q Log Message: bugfix: allow processing of messages from the slave process while the application is idle Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.58 retrieving revision 1.59 diff -C2 -d -r1.58 -r1.59 *** qcalc.q 1 Nov 2007 23:16:54 -0000 1.58 --- qcalc.q 2 Nov 2007 00:38:34 -0000 1.59 *************** *** 264,268 **** myapploop = qt MAIN "close" () || qt FINDDG "close" () ! if qt APP "exec" ()>0; = qt MAIN "close" () || qt FINDDG "close" () if check_edited; --- 264,268 ---- myapploop = qt MAIN "close" () || qt FINDDG "close" () ! if qt_call APP "exec" ()>0; = qt MAIN "close" () || qt FINDDG "close" () if check_edited; *************** *** 432,436 **** def ABORTED = ref false; ! begin_compute = ABORTED := false || waitmsg "Computing..." || wait_cursor; end_compute = // Request to abort the computation by the user. --- 432,436 ---- def ABORTED = ref false; ! begin_compute = ABORTED := false || wait_cursor; end_compute = // Request to abort the computation by the user. *************** *** 441,445 **** normal_cursor if get ABORTED; ! = statusmsg "Done" || normal_cursor otherwise; abort _ _ _ = ABORTED := true; --- 441,445 ---- normal_cursor if get ABORTED; ! = normal_cursor otherwise; abort _ _ _ = ABORTED := true; | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-11-01 23:16:58
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv13685 Modified Files: qcalc.q Log Message: minor bugfixes and cosmetic changes Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.57 retrieving revision 1.58 diff -C2 -d -r1.57 -r1.58 *** qcalc.q 1 Nov 2007 13:50:51 -0000 1.57 --- qcalc.q 1 Nov 2007 23:16:54 -0000 1.58 *************** *** 512,516 **** digest W:List = process_sel W || save_undo $ map (flip (flip sub 0) 1) W if get STATE = 4; ! digest S:String = waitmsg $ val S where [S] = regex "" "^\\+\\+\\+ Message: (.*)$" S (reg 1); = process_sel [(I,J,S)] || save_undo (I,J) --- 512,519 ---- digest W:List = process_sel W || save_undo $ map (flip (flip sub 0) 1) W if get STATE = 4; ! digest S:String = /* The program generated output before we got the "Ready" ! message, assume that we're up and running anyway. */ ! STATE := 4 || fail; ! = waitmsg $ val S where [S] = regex "" "^\\+\\+\\+ Message: (.*)$" S (reg 1); = process_sel [(I,J,S)] || save_undo (I,J) *************** *** 526,530 **** %s\nimport hdict, calclib;\n\ /* Main program generated by QCalc. */\n\ - def _ = yymain;\n\ special yyeval ~KEY VAL;\n\ yymain = writes \"\\f+++ Ready.\\n\" || flush || yyloop;\n\ --- 529,532 ---- *************** *** 547,551 **** = YYDATA := delete (get YYDATA) KEY;\n", CMD = "pwd='%s'; filename='%s'; cd \"$pwd\"; echo '+++ Compile:'; \ ! if qc -n $filename; then echo '+++ Done.'; q -i -q -w0 \"$filename\"; \ else echo '+++ Error.'; fi"; --- 549,553 ---- = YYDATA := delete (get YYDATA) KEY;\n", CMD = "pwd='%s'; filename='%s'; cd \"$pwd\"; echo '+++ Compile:'; \ ! if qc -n $filename; then echo '+++ Done.'; q -c yymain -w0 \"$filename\"; \ else echo '+++ Error.'; fi"; *************** *** 2131,2135 **** should use something more portable like BSD sockets for IPC here. */ ! termattr FD = tcsetattr FD TCSAFLUSH ATTR where ATTR = tcgetattr FD, (IF,OF,CF,LF,IS,OS,CC) = ATTR, --- 2133,2137 ---- should use something more portable like BSD sockets for IPC here. */ ! termattr FD = tcsetattr FD TCSANOW ATTR where ATTR = tcgetattr FD, (IF,OF,CF,LF,IS,OS,CC) = ATTR, | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-11-01 14:54:18
      
     | 
| Update of /cvsroot/q-lang/qcalc/examples In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv5345/examples Added Files: matrix.qcalc Log Message: add matrix example --- NEW FILE: matrix.qcalc --- // qcalc 1.0, created Thu Nov 1 15:12:58 2007 // [((0,0),"Matrix A:"),((0,1),"= B2:D4"),((1,1),"1"),((1,2),"0"),((1,3),"0"),((2,1),"1"),((2,2),"0"),((2,3),"-1"),((3,1),"0"),((3,2),"1"),((3,3),"-1"),((5,0),"Matrix B:"),((5,1),"= B7:D9"),((6,1),"1"),((6,2),"2"),((6,3),"3"),((7,1),"2"),((7,2),"3"),((7,3),"4"),((8,1),"2"),((8,2),"4"),((8,3),"6"),((10,0),"Product A*B:"),((10,1),"= show (B1*B6)"),((11,1),"1"),((11,2),"2"),((11,3),"3"),((12,1),"-1"),((12,2),"-2"),((12,3),"-3"),((13,1),"0"),((13,2),"-1"),((13,3),"-2")] // [] // [] // Start of script. Please do not remove this line. import calclib; // matrix product (must have compatible sizes) A:List * B:List = [[X*Y : Y in B] : X in A] if (#A=#B) and then all (uncurry (=)) (zip (map (#) A) (map (#) B)) where B:List = transpose B; // scalar product of two vectors (must be the same size) U:List * V:List = sum $ zipwith (*) U V if #U=#V; // helper function to show a matrix show A = matrix A || A; | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-11-01 14:51:10
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv3827 Modified Files: calclib.q Log Message: cosmetic changes Index: calclib.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/calclib.q,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** calclib.q 1 Nov 2007 13:44:30 -0000 1.2 --- calclib.q 1 Nov 2007 14:51:05 -0000 1.3 *************** *** 43,54 **** /* Convert a list to a matrix or row/column vector of table cells. For the matrix function, Xs must be a list of lists which are all of the same size; ! the component lists become the rows of the matrix. rowvector and colvector ! are convenience functions to create matrices with just one row or column ! for a given list of values, respectively. In any case the matrix or vector ! is inserted into the table right below the cell which contains the matrix call, i.e., starting at (row+1,column), so you should make sure that you do not override any important data there. */ ! public matrix Xs, rowvector Xs, colvector Xs; /* Implementation. */ --- 43,54 ---- /* Convert a list to a matrix or row/column vector of table cells. For the matrix function, Xs must be a list of lists which are all of the same size; ! the component lists become the rows of the matrix. rowvect and colvect are ! convenience functions to create matrices with just one row or column for a ! given list of values, respectively. In any case the matrix or vector is ! inserted into the table right below the cell which contains the matrix call, i.e., starting at (row+1,column), so you should make sure that you do not override any important data there. */ ! public matrix Xs, rowvect Xs, colvect Xs; /* Implementation. */ *************** *** 69,75 **** where Ys:List = hd Xs, N = #Xs, M = #Ys; ! rowvector Xs:List ! = matrix [Xs]; ! colvector Xs:List ! = matrix $ map (push []) Xs; --- 69,73 ---- where Ys:List = hd Xs, N = #Xs, M = #Ys; ! rowvect Xs:List = matrix [Xs]; ! colvect Xs:List = matrix $ map (push []) Xs; | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-11-01 13:50:55
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv30793 Modified Files: qcalc.q Log Message: disable debugging code Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.56 retrieving revision 1.57 diff -C2 -d -r1.56 -r1.57 *** qcalc.q 1 Nov 2007 13:36:49 -0000 1.56 --- qcalc.q 1 Nov 2007 13:50:51 -0000 1.57 *************** *** 1531,1539 **** mark_save = LAST_SAVE := #get UNDO_LIST; ! mark_undo L = printf "*** mark undo: %s\n" (str L) || LAST_SAVE := 1 || UNDO_LIST := [L] || REDO_LIST := [] where L = zip (map (flip (flip sub 0) 1) L) (map (!2) L); ! save_undo L = printf "*** save undo: %s\n" (str L) || if #get UNDO_LIST < get LAST_SAVE then LAST_SAVE := 0 || UNDO_LIST := [L|get UNDO_LIST] || REDO_LIST := [] --- 1531,1539 ---- mark_save = LAST_SAVE := #get UNDO_LIST; ! mark_undo L = //printf "*** mark undo: %s\n" (str L) || LAST_SAVE := 1 || UNDO_LIST := [L] || REDO_LIST := [] where L = zip (map (flip (flip sub 0) 1) L) (map (!2) L); ! save_undo L = //printf "*** save undo: %s\n" (str L) || if #get UNDO_LIST < get LAST_SAVE then LAST_SAVE := 0 || UNDO_LIST := [L|get UNDO_LIST] || REDO_LIST := [] *************** *** 2145,2149 **** /* Some nice fontification for compiler error and warning messages. */ ! format S = printf "-> '%s'\n" S || fail; format S if eq () (sscanf S "! File"): --- 2145,2149 ---- /* Some nice fontification for compiler error and warning messages. */ ! //format S = printf "-> '%s'\n" S || fail; format S if eq () (sscanf S "! File"): | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-11-01 13:44:48
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv28174 Modified Files: README Log Message: update README Index: README =================================================================== RCS file: /cvsroot/q-lang/qcalc/README,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** README 30 Oct 2007 18:31:16 -0000 1.12 --- README 1 Nov 2007 13:44:45 -0000 1.13 *************** *** 34,37 **** --- 34,42 ---- install prefix=some/path'. + Note that for QCalc to work properly, the calclib.q script needs to be on the + QPATH, therefore it is recommended that you install under the prefix where + your Q installation lives. Otherwise you will have to set your QPATH + accordingly. + USAGE ----- | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-11-01 13:44:33
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv28159 Modified Files: calclib.q Log Message: comment change Index: calclib.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/calclib.q,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** calclib.q 1 Nov 2007 13:36:49 -0000 1.1 --- calclib.q 1 Nov 2007 13:44:30 -0000 1.2 *************** *** 4,9 **** /* This module provides some useful support functions for use in QCalc spreadsheets. You only need to import this if you want to use any of the ! operations of this module in your spreadsheet, QCalc itself works perfectly ! well without it. */ import hdict; --- 4,11 ---- /* This module provides some useful support functions for use in QCalc spreadsheets. You only need to import this if you want to use any of the ! operations of this module in your spreadsheet. However, for QCalc to work ! properly, this script needs to be on the QPATH, therefore it is recommended ! that you install QCalc under the prefix where your Q installation ! lives. Otherwise you will have to set your QPATH accordingly. */ import hdict; | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-11-01 13:37:01
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv24659 Modified Files: Makefile qcalc.q Added Files: calclib.q Log Message: add library of useful support operations, bugfixes Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.55 retrieving revision 1.56 diff -C2 -d -r1.55 -r1.56 *** qcalc.q 31 Oct 2007 22:56:29 -0000 1.55 --- qcalc.q 1 Nov 2007 13:36:49 -0000 1.56 *************** *** 161,164 **** --- 161,166 ---- PRT = qt_new "QPrinter" (); + special no_undo X; + check () = statusmsg "Done"; check _ = statusmsg $ sprintf "Error loading file: %s" $ ARGV!1 || *************** *** 453,457 **** set_status HAVE_UNDO EDIT_UNDO || set_status HAVE_REDO EDIT_REDO || - digest_loop || /* KLUDGE ALERT: We sometimes don't get a proper callback if the user navigates away (using the mouse) from a formula --- 455,458 ---- *************** *** 459,463 **** the edit here. */ if not EDITING and then neq () (get LAST_EDIT) then ! finish_edit true (get LAST_EDIT) where HAVE_TABLE = (qt TABW "currentPageIndex" () = 0), --- 460,465 ---- the edit here. */ if not EDITING and then neq () (get LAST_EDIT) then ! finish_edit true (get LAST_EDIT) || ! digest_loop where HAVE_TABLE = (qt TABW "currentPageIndex" () = 0), *************** *** 501,515 **** digest "+++ Compile:" = STATE := 1; digest "+++ Error." = STATE := 2 || ! statusmsg "Compile finished with errors. Please check the log!"; digest "+++ Done." = STATE := 3 || statusmsg "Compile finished successfully"; digest "+++ Ready." = STATE := 4; digest "+++ Exiting." = STATE := 0; ! digest S = qt LOG "append" S || qt LOG "scrollToBottom" (); def TEMPL = "\ ! %s\nimport hdict;\n\ /* Main program generated by QCalc. */\n\ ! def YYDATA = ref emptyhdict, _ = yymain;\n\ yymain = writes \"\\f+++ Ready.\\n\" || flush || yyloop;\n\ yyloop where S:String = reads:\n\ --- 503,531 ---- digest "+++ Compile:" = STATE := 1; digest "+++ Error." = STATE := 2 || ! statusmsg ! "Compile finished with errors. Please check the log!"; digest "+++ Done." = STATE := 3 || statusmsg "Compile finished successfully"; digest "+++ Ready." = STATE := 4; digest "+++ Exiting." = STATE := 0; ! ! digest W:List = process_sel W || save_undo $ map (flip (flip sub 0) 1) W ! if get STATE = 4; ! digest S:String = waitmsg $ val S ! where [S] = regex "" "^\\+\\+\\+ Message: (.*)$" S (reg 1); ! = process_sel [(I,J,S)] || save_undo (I,J) ! if get STATE = 4 ! where [(K,S)] = regex "" ! "^\\+\\+\\+ Update: (\\([0-9]+,[0-9]+\\)) (.*)$" S ! (reg 1,reg 2), ! (I,J) = val K; ! = qt LOG "append" S || qt LOG "scrollToBottom" () ! otherwise; def TEMPL = "\ ! %s\nimport hdict, calclib;\n\ /* Main program generated by QCalc. */\n\ ! def _ = yymain;\n\ ! special yyeval ~KEY VAL;\n\ yymain = writes \"\\f+++ Ready.\\n\" || flush || yyloop;\n\ yyloop where S:String = reads:\n\ *************** *** 526,530 **** = throw \"NOVAL\" otherwise;\n\ yyeval KEY VAL\n\ ! = YYDATA := insert (get YYDATA) (KEY,VAL) || yyout VAL;\n\ yyclear KEY\n\ = YYDATA := delete (get YYDATA) KEY;\n", --- 542,547 ---- = throw \"NOVAL\" otherwise;\n\ yyeval KEY VAL\n\ ! = YYDATA := insert (get YYDATA) (KEY,VAL) || YYKEY := () ||\n\ ! yyout VAL where VAL = YYKEY := KEY || VAL;\n\ yyclear KEY\n\ = YYDATA := delete (get YYDATA) KEY;\n", *************** *** 539,543 **** // use the opportunity to rebuild the highlighting cache highlight_rebuild_cache || ! process_all if global; init_interp = TASK := (TMP|NEW_TASK) || --- 556,560 ---- // use the opportunity to rebuild the highlighting cache highlight_rebuild_cache || ! process_all || digest_loop if global; init_interp = TASK := (TMP|NEW_TASK) || *************** *** 592,596 **** statusmsg "Interpreter offline? (Check the error log!)" || // Send the user to the script/log page. ! show_editor || false if get STATE<>4; = true otherwise; --- 609,614 ---- statusmsg "Interpreter offline? (Check the error log!)" || // Send the user to the script/log page. ! //show_editor || ! false if get STATE<>4; = true otherwise; *************** *** 608,612 **** if ACCEPT then save_undo (I,J) || updatemsg (I,J) || ! LAST_EDIT := () where S = qt TABLE "text" (I,J); --- 626,631 ---- if ACCEPT then save_undo (I,J) || updatemsg (I,J) || ! LAST_EDIT := () || ! digest_loop where S = qt TABLE "text" (I,J); *************** *** 637,641 **** if qt TABLE "isEditing" () and then (qt TABW "currentPageIndex" () = 0); ! = doprocess (I,J) if member (get EVAL) (I,J) where I = qt TABLE "currentRow" (), --- 656,660 ---- if qt TABLE "isEditing" () and then (qt TABW "currentPageIndex" () = 0); ! = doprocess (I,J) || digest_loop if member (get EVAL) (I,J) where I = qt TABLE "currentRow" (), *************** *** 680,686 **** = updatemsg (I,J) if global; - tab_changed _ _ _ - = printf "current tab: %d\n" $ qt TABW "currentPageIndex" (); - updatemsg (I,J) = statusmsg $ sprintf "%s%d = %s" ("A"+J,I+1,S) where (S,_,_) = get EVAL!(I,J); --- 699,702 ---- *************** *** 828,832 **** where _ = check_editing if qt TABW "currentPageIndex" () = 0; ! = qt EDIT "undo" (); edit_redo _ _ _ if global: --- 844,849 ---- where _ = check_editing if qt TABW "currentPageIndex" () = 0; ! = qt EDIT "undo" () ! if qt TABW "currentPageIndex" () = 1; edit_redo _ _ _ if global: *************** *** 836,840 **** where _ = check_editing if qt TABW "currentPageIndex" () = 0; ! = qt EDIT "redo" (); cut _ _ _ if global: --- 853,858 ---- where _ = check_editing if qt TABW "currentPageIndex" () = 0; ! = qt EDIT "redo" () ! if qt TABW "currentPageIndex" () = 1; cut _ _ _ if global: *************** *** 848,852 **** CELLS = sel_cells SEL if qt TABW "currentPageIndex" () = 0; ! = qt EDIT "cut" (); copy _ _ _ if global: --- 866,871 ---- CELLS = sel_cells SEL if qt TABW "currentPageIndex" () = 0; ! = qt EDIT "cut" () ! if qt TABW "currentPageIndex" () = 1; copy _ _ _ if global: *************** *** 855,859 **** VALS = sel_cellvals SEL if qt TABW "currentPageIndex" () = 0; ! = qt EDIT "copy" (); val_copy _ _ _ if global: --- 874,879 ---- VALS = sel_cellvals SEL if qt TABW "currentPageIndex" () = 0; ! = qt EDIT "copy" () ! if qt TABW "currentPageIndex" () = 1; val_copy _ _ _ if global: *************** *** 873,877 **** update_title || process_sel SEL || save_undo CELLS || ! updatemsg (I,J) where SEL:List = check_editing || get_clipboard, [(I1,J1,_)|_] = SEL, --- 893,898 ---- update_title || process_sel SEL || save_undo CELLS || ! updatemsg (I,J) || ! digest_loop where SEL:List = check_editing || get_clipboard, [(I1,J1,_)|_] = SEL, *************** *** 882,886 **** CELLS = map (flip (flip sub 0) 1) SEL if qt TABW "currentPageIndex" () = 0; ! = qt EDIT "paste" (); fill _ _ _ if global: --- 903,908 ---- CELLS = map (flip (flip sub 0) 1) SEL if qt TABW "currentPageIndex" () = 0; ! = qt EDIT "paste" () ! if qt TABW "currentPageIndex" () = 1; fill _ _ _ if global: *************** *** 889,893 **** save_undo CELLS || updatemsg (qt TABLE "currentRow" (), ! qt TABLE "currentColumn" ()) if not null VALS and then not null (hd VALS) and then (not null (tl VALS) or else not null (tl (hd VALS))) --- 911,916 ---- save_undo CELLS || updatemsg (qt TABLE "currentRow" (), ! qt TABLE "currentColumn" ()) || ! digest_loop if not null VALS and then not null (hd VALS) and then (not null (tl VALS) or else not null (tl (hd VALS))) *************** *** 1160,1164 **** waitmsg "Compiling..." || init_interp || process_all || statusmsg "Done" || ! mark_undo L1 || () where ROWS = [0..qt TABLE "numRows" ()-1], --- 1183,1187 ---- waitmsg "Compiling..." || init_interp || process_all || statusmsg "Done" || ! mark_undo L1 || no_undo digest_loop || () where ROWS = [0..qt TABLE "numRows" ()-1], *************** *** 1502,1518 **** /* Undo/redo. **************************************************************/ ! def LAST_SAVE = ref 0; mark_save = LAST_SAVE := #get UNDO_LIST; ! mark_undo L = //printf "*** mark undo: %s\n" (str L) || LAST_SAVE := 1 || UNDO_LIST := [L] || REDO_LIST := [] where L = zip (map (flip (flip sub 0) 1) L) (map (!2) L); ! save_undo L = //printf "*** save undo: %s\n" (str L) || if #get UNDO_LIST < get LAST_SAVE then LAST_SAVE := 0 || UNDO_LIST := [L|get UNDO_LIST] || REDO_LIST := [] if not null L ! where L = undo_cellvals L; undo_cellvals (I,J) --- 1525,1544 ---- /* Undo/redo. **************************************************************/ ! def LAST_SAVE = ref 0, UNDO_OFF = ref false; ! ! no_undo X = UNDO_OFF := true || X || UNDO_OFF := false; mark_save = LAST_SAVE := #get UNDO_LIST; ! mark_undo L = printf "*** mark undo: %s\n" (str L) || LAST_SAVE := 1 || UNDO_LIST := [L] || REDO_LIST := [] where L = zip (map (flip (flip sub 0) 1) L) (map (!2) L); ! save_undo L = printf "*** save undo: %s\n" (str L) || if #get UNDO_LIST < get LAST_SAVE then LAST_SAVE := 0 || UNDO_LIST := [L|get UNDO_LIST] || REDO_LIST := [] if not null L ! where L = undo_cellvals L ! if not get UNDO_OFF; undo_cellvals (I,J) *************** *** 1526,1530 **** process_sel W || UNDO_LIST := UL || REDO_LIST := [L|get REDO_LIST] || ! EDITED := (#UL<>get LAST_SAVE) || update_title where D = foldl (foldl insert) emptyhdict (reverse UL), W = map (undo_cell D.fst) L --- 1552,1557 ---- process_sel W || UNDO_LIST := UL || REDO_LIST := [L|get REDO_LIST] || ! EDITED := (#UL<>get LAST_SAVE) || update_title || ! no_undo digest_loop where D = foldl (foldl insert) emptyhdict (reverse UL), W = map (undo_cell D.fst) L *************** *** 1539,1543 **** process_sel W || UNDO_LIST := [L|UL] || REDO_LIST := RL || ! EDITED := (#UL+1<>get LAST_SAVE) || update_title where [L|RL] = get REDO_LIST, UL = get UNDO_LIST, (KEYS,VALS) = unzip L, --- 1566,1571 ---- process_sel W || UNDO_LIST := [L|UL] || REDO_LIST := RL || ! EDITED := (#UL+1<>get LAST_SAVE) || update_title || ! no_undo digest_loop where [L|RL] = get REDO_LIST, UL = get UNDO_LIST, (KEYS,VALS) = unzip L, *************** *** 1899,1903 **** /* Recompute everything. */ ! compute_all V = do submit V || collect_results V; submit (I,J) = send_expr '(yyeval (I,J) X) --- 1927,1933 ---- /* Recompute everything. */ ! compute_all V = begin_compute || ! do submit V || collect_results emptyhdict V || ! end_compute; submit (I,J) = send_expr '(yyeval (I,J) X) *************** *** 1909,1915 **** if get STATE=4; ! collect_results [] ! = (); ! collect_results [(I,J)|V] if get ABORTED: // user aborted the computation, flag all remaining cells --- 1939,1946 ---- if get STATE=4; ! collect_results U [] ! // we're finished; process any pending cell updates ! = post MSGS $ zipwith append (keys U) (vals U); ! collect_results U [(I,J)|V] if get ABORTED: // user aborted the computation, flag all remaining cells *************** *** 1923,1937 **** = qt TABLE "setText" (I,J,fformat S) || qt TABLE "setPixmap" (I,J,RES) || ! collect_results V ! where [S] = regex "" ! "^\\+\\+\\+ Result: (.*)$" S ! (reg 1); // errors during evaluation (these get the red flag) = flag (I,J) || ! collect_results V if (S = "+++ Syntax error.") or else not null (regex "" "^\\+\\+\\+ Exception: (.*)$" S ()); // anything else just gets passed to the digest function, and we try again ! = digest S || collect_results [(I,J)|V]; otherwise: // no result yet; process pending GUI events, to give the user a chance to --- 1954,1979 ---- = qt TABLE "setText" (I,J,fformat S) || qt TABLE "setPixmap" (I,J,RES) || ! collect_results U V ! where [S] = regex "" "^\\+\\+\\+ Result: (.*)$" S (reg 1); // errors during evaluation (these get the red flag) = flag (I,J) || ! collect_results U V if (S = "+++ Syntax error.") or else not null (regex "" "^\\+\\+\\+ Exception: (.*)$" S ()); + // asynchronous message to change a cell; we update the cell right now, but + // defer triggering of dependent cells until we have finished processing + = qt TABLE "setText" (I1,J1,S1) || + qt TABLE "setPixmap" (I,J,NULLPM) || + CELLS := (if null S1 then delete (get CELLS) (I1,J1) + else insert (get CELLS) ((I1,J1),S1)) || + EVAL := delete (get EVAL) (I1,J1) || + collect_results (insert U ((I1,J1),S1)) [(I,J)|V] + where [(K1,S1)] = regex "" + "^\\+\\+\\+ Update: (\\([0-9]+,[0-9]+\\)) (.*)$" S + (reg 1,reg 2), + (I1,J1) = val K1; // anything else just gets passed to the digest function, and we try again ! = begin_local || digest S || end_local || ! collect_results U [(I,J)|V]; otherwise: // no result yet; process pending GUI events, to give the user a chance to *************** *** 1940,1944 **** if begin_local || qt APP "processEvents" 100 || end_local || get ABORTED; ! = collect_results [(I,J)|V] otherwise; /* Note that we try the semaphore *two* times before we give up and hand it --- 1982,1986 ---- if begin_local || qt APP "processEvents" 100 || end_local || get ABORTED; ! = collect_results U [(I,J)|V] otherwise; /* Note that we try the semaphore *two* times before we give up and hand it *************** *** 1952,1957 **** on these. */ ! compute U V = do submit_clear U || collect_results U ! where U = all_deps U V, W = filter (member (get EVAL)) U; submit_clear (I,J) --- 1994,2001 ---- on these. */ ! compute U V = begin_compute || ! do submit_clear U || collect_results emptyhdict U || ! end_compute ! where U = all_deps U V, U = filter (member (get EVAL)) U; submit_clear (I,J) *************** *** 1980,1986 **** /* Process cell values after edits or after loading a new file. */ ! process_all = begin_compute || ! do flag U || compute_all V || ! end_compute where (V,U) = eval_list if check_interp; --- 2024,2028 ---- /* Process cell values after edits or after loading a new file. */ ! process_all = do flag U || compute_all V where (V,U) = eval_list if check_interp; *************** *** 1992,1998 **** do flag U || // do the necessary reevaluations ! begin_compute || ! compute (I,J) V || ! end_compute where (V,U) = eval_list, V = dropwhile (<>(I,J)) V; --- 2034,2038 ---- do flag U || // do the necessary reevaluations ! compute (I,J) V where (V,U) = eval_list, V = dropwhile (<>(I,J)) V; *************** *** 2009,2015 **** else insert (get CELLS) ((I,J),true)) || qt TABLE "setPixmap" (I,J,NULLPM) || ! begin_compute || ! compute (I,J) V || ! end_compute where S = qt TABLE "text" (I,J), _ = EVAL := delete (get EVAL) (I,J), --- 2049,2053 ---- else insert (get CELLS) ((I,J),true)) || qt TABLE "setPixmap" (I,J,NULLPM) || ! compute (I,J) V where S = qt TABLE "text" (I,J), _ = EVAL := delete (get EVAL) (I,J), *************** *** 2033,2049 **** otherwise; ! process_sel W = begin_compute || compute W V || end_compute where (C,E) = foldl process1 (get CELLS,get EVAL) W, _ = CELLS := C || EVAL := E, W = map (flip (flip sub 0) 1) W, (V,U) = eval_list ! if check_interp; ! clear_sel W = do (qt TABLE "clearCell") W || ! begin_compute || compute W V || end_compute where _ = CELLS := foldl delete (get CELLS) W || EVAL := foldl delete (get EVAL) W, (V,U) = eval_list ! if check_interp; /* Compute the evaluation order (topological sort of the evaluation graph in --- 2071,2086 ---- otherwise; ! process_sel W = compute W V where (C,E) = foldl process1 (get CELLS,get EVAL) W, _ = CELLS := C || EVAL := E, W = map (flip (flip sub 0) 1) W, (V,U) = eval_list ! if not null W and then check_interp; ! clear_sel W = do (qt TABLE "clearCell") W || compute W V where _ = CELLS := foldl delete (get CELLS) W || EVAL := foldl delete (get EVAL) W, (V,U) = eval_list ! if not null W and then check_interp; /* Compute the evaluation order (topological sort of the evaluation graph in *************** *** 2108,2112 **** /* Some nice fontification for compiler error and warning messages. */ ! //format S = printf "-> '%s'\n" S || fail; format S if eq () (sscanf S "! File"): --- 2145,2149 ---- /* Some nice fontification for compiler error and warning messages. */ ! format S = printf "-> '%s'\n" S || fail; format S if eq () (sscanf S "! File"): Index: Makefile =================================================================== RCS file: /cvsroot/q-lang/qcalc/Makefile,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** Makefile 31 Oct 2007 06:04:01 -0000 1.9 --- Makefile 1 Nov 2007 13:36:49 -0000 1.10 *************** *** 16,20 **** PIXMAPS = pixmaps/qcalc.png pixmaps/flag.png pixmaps/1rightarrow.png ! DISTFILES = Makefile COPYING README $(app).desktop $(app).q *.ui $(PIXMAPS) doc/Makefile doc/*.html doc/*.png doc/*.xml examples/*.qcalc examples/*.q all: --- 16,20 ---- PIXMAPS = pixmaps/qcalc.png pixmaps/flag.png pixmaps/1rightarrow.png ! DISTFILES = Makefile COPYING README calclib.q $(app).desktop $(app).q *.ui $(PIXMAPS) doc/Makefile doc/*.html doc/*.png doc/*.xml examples/*.qcalc examples/*.q all: *************** *** 30,37 **** --- 30,39 ---- install: + test -d "$(DESTDIR)$(stdlibdir)" || mkdir -p "$(DESTDIR)$(stdlibdir)" test -d "$(DESTDIR)$(appdir)" || mkdir -p "$(DESTDIR)$(appdir)" test -d "$(DESTDIR)$(appdir)/doc" || mkdir -p "$(DESTDIR)$(appdir)/doc" test -d "$(DESTDIR)$(appdir)/examples" || mkdir -p "$(DESTDIR)$(appdir)/examples" test -d "$(DESTDIR)$(appdir)/pixmaps" || mkdir -p "$(DESTDIR)$(appdir)/pixmaps" + cp calclib.q "$(DESTDIR)$(stdlibdir)" cp COPYING README *.ui "$(DESTDIR)$(appdir)" cp doc/*.html doc/*.png "$(DESTDIR)$(appdir)/doc" *************** *** 46,49 **** --- 48,52 ---- uninstall: + rm -f "$(DESTDIR)$(stdlibdir)/calclib.q" rm -rf "$(DESTDIR)$(appdir)" "$(DESTDIR)$(bindir)/$(app)" --- NEW FILE: calclib.q --- /* calclib.q: qcalc support operations */ /* This module provides some useful support functions for use in QCalc spreadsheets. You only need to import this if you want to use any of the operations of this module in your spreadsheet, QCalc itself works perfectly well without it. */ import hdict; /* The following should be considered private; this data is for use by the QCalc-generated main program only. */ public var YYDATA = ref emptyhdict, YYKEY = ref (); /* Public access operations for use in spreadsheets. */ /* Access the row and column indices of the cell currently being computed. The index function returns both indices as a pair (I,J) where I and J are the zero-based row and column indices, respectively. Thus A1 will be returned as (0,0), A2 as (1,0), B1 as (0,1), etc. */ public index, row, column; /* Send a status message. The message will be shown in the QCalc status line. This can be used to provide some feedback during longer computations. */ public message S; /* Set a cell value. The given cell index KEY is in the same format as returned by the index function (see above), and X may be any Q expression. Note that this unconditionally overwrites the current cell value, so you should make sure that you do not have important data there. After changing the cell value, QCalc will update its display and trigger updates in dependent cells as usual. Note, however, that the triggered changes will *not* take effect immediately, rather they are processed by QCalc when the current computation is finished. */ public setval KEY X; /* Convert a list to a matrix or row/column vector of table cells. For the matrix function, Xs must be a list of lists which are all of the same size; the component lists become the rows of the matrix. rowvector and colvector are convenience functions to create matrices with just one row or column for a given list of values, respectively. In any case the matrix or vector is inserted into the table right below the cell which contains the matrix call, i.e., starting at (row+1,column), so you should make sure that you do not override any important data there. */ public matrix Xs, rowvector Xs, colvector Xs; /* Implementation. */ index = (I,J) where (I,J) = get YYKEY; row = I where (I,J) = get YYKEY; column = J where (I,J) = get YYKEY; message S:String = printf "\f+++ Message: %s\n" (str S); setval KEY X = printf "\f+++ Update: %s %s\n" (str KEY,str X); matrix Xs:List = dowith setval Ks (cat Xs) where (I0,J0) = index, Ks = [(I0+I+1,J0+J) : I in [0..N-1], J in [0..M-1]] if all islist Xs and then all ((=M).(#)) Xs where Ys:List = hd Xs, N = #Xs, M = #Ys; rowvector Xs:List = matrix [Xs]; colvector Xs:List = matrix $ map (push []) Xs; | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-10-31 22:56:33
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv18083 Modified Files: qcalc.q qcalc.ui Log Message: bugfix: make sure that edited cell is properly updated when user navigates away from it with the mouse Index: qcalc.ui =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.ui,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** qcalc.ui 30 Oct 2007 18:21:48 -0000 1.12 --- qcalc.ui 31 Oct 2007 22:56:29 -0000 1.13 *************** *** 996,1081 **** <images> <image name="image0"> ! <data format="PNG" length="2149">89504e470d0a1a0a0000000d4948445200000020000000200806000000737a7af40000082c4944415458859d97616c5bd515c77f81647a4641f393d2c94f18e18792adb68a88ad322dded0146fa09132a99865d2d2e50361f0a11d1fbab693b6954da8043e906e0335888da608d664126bac6dc529a2cb038dc4e9686c476d639736f2b3522ff642649b24b2adc6f4ecc33390d024ed76a4abfffbeb3ee99c7bceb9e79c5b2722d4d5d5b191c8d3d849f3575c7c3b96069f13c8004e88656a3c0db8209206bfabc69d10c9807fd5ff9ff1341f979df4dff63b9ea9bb9101d16ea67c0af7169a416d843260e326b00ab6fa0d3003461adc657ebda901d2cd23b808e104be7f149a1e87860d6dbd7939ed816492f218ffbee506bf7a130b407b1b347540032492115882c4f9f5313211de74dfbc1c8107a29415b0c11d88c886dac77fc421398c48629f8888c8d56991c592484a445222a323e32257ad6f0bc745e64b6bf917f74b25eb3be196d14e64530ff8eb219106dc5d5036a0c183313641e2343cfb6783c8592fb129039c65b269039c5e62e9d01a6ee1e7dc4c8f5861cc4000d83c0455f0b880e408e4020c1e037b3580a9c1c15f0650141bca8297c4e4105aa30e9343f8ecee55fc181a0a89b7f7a3550a307618bd4983a56170b55306364dc2d2d33d2f190ef7531efb7e22d51801af8f83e7f790248e39631279284bdf9fc2f4bfb403ca11b0f9c95e1e446b09c2957e6834215d0197f219664f85d0ee5360a608af15d7f740e91d79ac744ea646bcfb9ef2b7edc75087a9b4c4192cf631d0d54ff0fe20dc0fc3c501fc0e3fe55361b079a11c46737ae1722fd835ebfe3707d6a0d6a2c04c1a9c458c955521887e30679794ec1d3552699c1c8b17cd7bcd66f869f271da5addb4b5b651fc4611f57d95039503e4c8d13ff12c45bbc9c8291f2c85c0e6233bd90bce02640c68e63acc662a16cf415b43cd80684c7eef736a26197e1bd8aedf752c3740b2dec0ad980c760d10af8f73ac728cdeb15e8aae2214c1b1dd41ae3ec79e477c847206e58b6e881f466b3461320d8d6e98ccd5f073aeb92ce56c05566a39401649140b78dc2afe3ffa09778731ab26eaed2a7d661f138d13c42fc651b62ad87376947a05dbfb2ae38fc4a800879f2f6057421c7c2e4676228dd6e602b302ba721d664f87d0b6e52003e5e73e0dc10c273d76958819a1e3be0e42cb21924a925de777116a0c91cc2471b7ba714c39d8b3bc8767978f90e88c913d1341db026ded2a6ab503cedbd09adbe10aa007d645ad598105a01926004484fc07f2e05b23291111f1beee15efbc57940f14b1cfdbc575ce25ee845b761bfb24bf2892cf8b485e64fac52322b322e3dd3d2222d2d57d42a2bd87243ae21599ed9054a47d7d34ec22254412486927f26925accfc764562222d3f994b8fee992ddf9ddd26eb4cbe8ecb84ccf5985505222521289be392a128a8a747689288a44df1c97e977447aba8f8a9c6b17897588cc1f5a1f671d222944ae5a067c7a0b3e09c523bd5913d48a9d486b8c8edca318ed065ebb1f8f06a65906ddea665a214076f70e383582a928f8b6f9a93495a954020c4ee8e0826c66a286c61a6e662aa0d712715525141d2d3452897dac5555b47a951dee0098a0de0e5c065db7c147564b1d51401b4a10deeec7f1cc303482cf6b43df9685857d9003adb9ad8681355cdfaac047c09dab72a026b7445f94e78ff6474544646edef27a7e51446645defa7b4a645664fa524952af8ba466ad06934ae5451645c66325295d1209761e977c2428d1885764b6ed3a4cc514114164716d0800ae8516865ff36ef111791fb42dd6c955051215f03b75a880c76ea3700fe8770219d075152aa02ddbb001c1d60efa4fb7e1db1e84aa7a1dea5bedb002dcbe360400f41efac1cc48323ca49c8542017040f83d13db0414ed400b98c5023e2fc4e2056804d304ec10b9920027e02a92bcf028890b71d06b39a0d772400733578106289c5fc700e09ad7ee7b23b45046ad0055d8f1808e7e3fe84e889d05bd458502f85c2a83ef81a302e17f805ff710b900bb1ed241895199e9826402cda1d7d08464025db714a9e7c1a832b75e37bcf5c4defc94e9486edbff733fe6959abb57a09c8678b180bf552576b18cb66ca3d0041e2764170a6877aa844f9aa89775062e0c30f0c44f304dd075d6e24508c721bec0cfd633a0aee789e34f065c1dafecea54c1052c032a94df858a032233e0738056b56a7a2c03be7b808fa05c84d01414cf66e1f22e7a789709a00dcba3d48351e543db027ff8ce19c21b8d640d3d8f9d28465fac65fbac482a25921a1489c6ac916a3a51b26ad36c49f2e744a2e72c3e6acc49fe9248cf132724b8337511b81770035f5db55a80bb80a68d26a2aaafc9f772ffe430bac3b2dc01645bc0e7b441063ccd362880eeb0119a009fdd46f824d897357a5f2de3b3fba954473e044a966fc87e61cd03c50d27a2b66fedfb8aaeedf94fe0bb651e7fd2432259c6e3b6c10a142e82592de3db6a239101de85a2178cd3109f1a44c13f9734fb7e139f7c790c28d4d6d5f54ebae14c38317678a1b2620c290b1a5ca99d7809680023033e878df07ba01661643946f26496f8d4e092b7a0f70dfde5ee07e3932f8f62f5bdc55af4d7954d67c2e0c3d1af634bfeebc8815d141ac1e3007319940c64eda02dc3c15787a9147d14978687625343fdb95c7c1e2b6d97810af009b0f1ecbfd9bb00b8f5c8ded4d8af7e6125de7844a47449e4e880c85bfd2509761e9717764e4f7a5bbb7e087c0db803f832f02560e3f7de2aa9bfc1fe35c334de501a02df34ced8096c53e97b2d46fc8c4a65c5982b2c24fb0e8cfdf86dac445baae155e0dacd28076ee801808660e7f1d913874bd2d37d428eec4d2d767cef8557806dc0ddc016e036e0566ef2d4ffab0175c19dd3cf053b8f4bf0e1e8dfec4d6e3fd63dd6b05a4ac3ffa5b826ff05840b046d4d0312760000000049454e44ae426082</data> </image> <image name="image1"> ! <data format="PNG" length="643">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000024a49444154388da554c16a1351143d95161cb0d02c04230a060cd8405d14052bfa011617828860762db84874e746dc285dc665c7555d944e14da248b2a08814408a442ccb4d092292864244a02419212212393e27131f392493b4d93f4c0e3bc7b1fefcce1ce7d172421562c9122cb642c419b7bc71f93ea45e77de7ea4e94c86693ae68362c2e162dcee60a64898c2555ffb1c2b184bb681bb6386d716a6de75787762c50ab391c935437299cdfe8e138758c65a16e73d5e68ce55c595783433b16108ebbb8442acbca1517c7fd89b661d5fc9fba69858b6ff99b1aef91c4293870ff1a6018e80bc61f00e380b6161f99de01b41d200c20fa350a00ddc2f17c1a92d487aa0e48fb00be0381bb3e60721e812920baf77a347876f212008c90ec5cf809d6cf182d8f471aebe554fa300fdcf1027b13307e6d41ba3d017d6d1abe073a2a6fd2156f68e3bc7b8d1b0758fc50d10db90249956c2c58ac85acc3ed10b99a7a49d2cd31e0f1d8cec63b5caf5bf9cae738bc97bfa0f24987f7f139a01500c6c280fe0c58d9d8d7f03713f8a1bf77ef63f38053c10d92d5146946aca419b10f96ec733bbf3a6b1cddc766378b7cad54264db22ccf917c41366db1da02f97ca6157b3afb8ab7e01fac8fc5c7328a55d36f21d2cc92db73240b96f8facc3b0edcc7a2572ea4616c3d01fc328cbc0c4c9d467d17c0e82e2b3a6e021872563851cd92c94724c9455921737cc893cc0a8166b9d809645259560e3fe9781efdbd3c0724afafbd971145f07a1000869f156e082378c25971049c8e0fd578515648998cc84ba43c782c6afc1fbd4da55f8efcb1bc0000000049454e44ae426082</data> </image> <image name="image2"> ! <data format="PNG" length="967">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000038e49444154388db5954f489b671cc73f4a0e79a1b20c36b0d041840c541818f1a0e261ca06a3f6e02c3bd8b183697b5864b06273286eb0927a705d0e1d3ae83088437710a75dc93a902616db64228d825dd26e8354a424624b12742499647c7778a333925ec6fcc2cbf33eef9fefeffb7c7fbfdff35449e238507d2cacff05c905d9073f8f2ea6179419f4c8f6ff900eebd3eb376219494a2472727b34ffd28f25bdf4da8777584de905ad05976462db1cc6fd526c5a3d1589edfd09252625b73f2db75f72dd4ccb352659df8b6524e11d897ea169299934c9726973dc9fbb3de18cebe30a9674ce49d15c4949e9a74052d29e3434a272ec942b5689bcb32f3c4f93ec65c46d9e842429bc738834294dcd24ca49f74ab18f284ea725af4feaec0b965952353b239d3d0318f0d323e8b6002780372af8b60bd400cf81d761e04b186803df7d08dd6763632b3209ed50049c970e294e4bd1f59c2a62afdc63fb0731b9c724efed9c7249c93b93d3d0a47606fdb94dea95a9b6b6d4b19a87f61a98de82d413836bdf43e60ff8ec3b483d86cbdf42ea57b8fc0d6c3d81ba737122571b79b50e9ca70cbae7a1bdde60fa2135beebc61e84ee55393f4968f5eb3a22bbe09b009b2585bfff24a10de86a801fd6e0ac13fc8b70be05aeddcb63ed30283c84b5a79029826181ccb33c6b3f1b7f17b211b0b45f607c525269f5d69e9879b379c48652a2bc2129b1299df34b8125c979451abf29d95a25ecca501b5dc7a1bf70c84ec345d363ef424ea7af1ec450a0e4f5d4ba94de965c7ea9d727b579726ab828d5f624657b47a23e2a1c12af457fa356711cc135806a5a4d8f9d18f4b681014476a1fb2d83af16a1d701c30f60c0098502d064902940367b926c1638d10cc4c1d20c166cd0f5234075fe419c66032e4cc439ff2e849e9b891c7b041fd6c3f05da0c92ca97c115277336453502085d50a14e340231457c1c22b1443b700181d93866e4be1d0a1ce2a793ab56296e0e81d29fdbbe4f249c139e9f42529302975f64bb33724678f64efd00becc1a707355ffb514c6d57a4c0ca91fa3dd2698984f93eb66e3e084792524e0a2e24a46dc9e5890abb26fe251e916afb62959b623fd6fede50eaf2d87a69be64ae3270471a3d2371eaf04ed71a967bac32af24a577ca154757f695c6a4a4343b179512128e60d919574587d4f026d8de069661a0057ccb606d81c2729c81a6467ccb6602f3bf44a0d86e5607502884b0d245f64f28bce016cfaade3f20d6311da6ff005c9f865daab6efbe0000000049454e44ae426082</data> </image> <image name="image3"> ! <data format="PNG" length="923">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000036249444154388dd59441485b771cc7bfdb29831e72d8c18287163c54f1d0160f531868d96198cba8eca2a7eaa59dec30d28bc84e350c891e0a0636480eed920dd2170ffaa2a0e64574792d421c381286422c65c46221ffe1247994c0678717d16186d7ed77f9fdfff07b5f3eeffbfbbe27fd6f8b1a0f7130d43039a768a862ac34867d8c952e18f631c904863dcc42cc36b898e8ac65ea0e66fcd182c9cdd69e0f0d86839784734ed10054ab35009e3cb5a944607adee2ca3a8127f316fd9f549eb7233654ce67ed188c7e1da7ea5cad9b5c82ba0b77fabe32677a1f9e1d32bfb8d24da97c702449fae9f798babb26b472e45e69e358aff4ed6a4a6a7a6d3c7e83a17c01e30db075352dc042c2a69482eedef1cbc4a96d47ea96dc5f0f254926d8903e958c69f8f7563f7af7cf5efeed50476f438a6cce49cd36af431953d801de032e5007db29410dac15a00ac9c502bc81780ad8f317565d81f16f1628c4eadce81abd4c1cdbce6ae0b694d9dc95baa4d486ab50578f121bae468c145b7574f46e40332f321a7e2d4dfe9cd0e11f237abc1c93773aaec866e45f8877306c01b516e909586bc031c4d305284334665377617a3649750dc253714a69b8ff208afd45958ecefbe6927074de329cb4442f54edb80e40b5e2e7bb54f63359dc29c17bc83945c61f45e9ff2c4c47471be1ba83b1568a707241f5b8d55bf92eedb5eead5de49c22d460f44194fec10ac18f872f7b1cc9a73472fbae529b7e6edd9787d235c9592f4b4129bbbcab9ea09479e14a0752e24747f70eee2ab5ecc8f326e479336d0c96545dc224d3c0fe39e1195961cbf7dc6ea5c34a17a002c967fefcf097d3c4fb8a04836d8867f2098d35a4b97c56ba29b9f9b2744bca6eec6aa0ab47990d57a15b526addd1c85f034aac6635762ac5d6b36a343ccd78f3ed894bcf30d1984d7d07d8f5739c5b2bc131d88bfe97984cf9e988ffe0cf2c3cb56107fa3f0f73a3b740e0da501b8f37e7e4792145f219e98ee4bc2aeb5e5f8fb2af7615ea9352dbaec69a034abc7434d1cafd6433a4b9ed8ce435e49d46da1317e6eb263c15a7b278be6d7bc927b55239d88778c26e915ae0427436497d0dbafb46e9e8b40904ce893f383b0c0d861f7adee4779e37a3eb9dd75b7faa49359a7352f323490da9f9585e73ce7fa0e9490ac86b7a3a7cfd567f9e1a051498f29af9efdba3ffd7eb6f89f655a98ada33c90000000049454e44ae426082</data> </image> <image name="image4"> ! <data format="PNG" length="1079">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003fe49444154388dd593416893671cc61fc56d1914a920d2c0840a0e8c4ce857bc743830d2537b192dbbd893ed2de26164cc49f1206d0e25c9a12339088930481cc464039776a39aa4d4251d9564a392302a24522495caf28d2a5fbe49f0b743c26c4d2f1ef7c0cbfbbdbceffbf0fbfeffe795de41cceb7d361d37c94ebf66bdfaa47c7de46b8675ec5d3cf6378eea0ceb2ac3246ce7019ae56bee5986f561f7e11dae66b245930626594cea98b144de64033399c064033312cd98ac63f2ddc80bd06bd6043bfd101f81f8506a7278ec489771265b06a05e6f00e09d4be2f5813f9c668f5e59403f54059603127d3067e0ff721ae3ace7db6ee206507d733f19b4b8782542a340b73605f4c2522f545c64ae8f61ad8031e0a9bded7b70e1d7927442aad4b62449b7ffbca5d0c9292d3e2bec3df978543ade273d7448034e993f49177a8674fd5e5476cbdea7217528aeefa2aa4266a5bc97b41e034250710106c487a05a65662e46390eae5317bb89e3b9ac06cf48a547ed3df36853173e3b2dd36cb6d7cf4dc9b9286d452557af947348f61195561735614fc8b71c50b3b55f84368035e015640a65b0209d051a905c2cc2365075036928b96127033746a8df85c92b21f2618bfefe7d88a3b90569404a2d9774e1e469c5ef97347a528ade2f68dc1c54ed8f29e984537a7c4b329c6afe1256f359bfbefa3920db6ecab7ec93fe233624198724e38028413a5b8646877407924b45a8433a11028a509f6ccf050fac64f05e0b514ec0d8253fe9cfebf4f58dd5a4c87b927158328e4ac661f98349687437acb1dde87c78012f543cb05da598088105996c918b972c86ce7be83b3ab62919ce3dc35a81e42260ed72ddeecc1b9ef6c6e674bbe8710fd48125a00e235f4c133b57a6b777649771c42919ce83c15c5ce39d1a4b5261b526f548857b05e963a7f4fc96747c5a7a14959e1e51f8ce82f4480adf49a9d9b4e57be97bab6d61497aadfa22441279d87cf3028b6b9d3fa8243b394ec3469d4830066b109a4fc21a0c0d7b710de471f4b8373ba4c73a75fee0603017d5d48b4f15be97954e48d95c4583a7a4423a2eb9c6a5ad92d41a55f4c71f34a509057229355f8e2b904b49ada69a76509290c23b92fe92f442fafd1f55e330339f8612144bed54b00454203d3f036b16115f080ae09f4b626561e6460c2b0bc6b949fa4f6570f4b8bb733cbb1cd0657b54b3b994060d29fb5b453a2b2d3c886af4694dd107b735d57b5981d594a4710557e3f21e9a50f8614a9264dbc15d39dea5fcbc85f75a84fa5da0f3e2d277f3b001b19b495887c8cd764dfdc118ac807f2e86b504ae4fc6e8eb73e338d44d7cc07dde7bd5b69bdfd8b62de747b3522b28496ada927459762b208724bb4365b76c39e490ddb2557bf24c7fbf34e590c363b772dfefc3fd3fd2bf5ecb6bb489d6a6510000000049454e44ae426082</data> </image> <image name="image5"> ! <data format="PNG" length="877">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000033449444154388d95955168536714c77fad29984d218285083a14c6b68882091596e24b82034927ccf8302663b0f665d02797fad4f661a80fa3d5876d610cec3647eb834485183b264b1c1d89c39a54e26e2a8ee54abbe58eb624d0cddcd056cf1ebe7b47d335d9725e7e9cefe3fcefff3bf7dcfb4183906531b4bcd444a4261637e6b1abc9a946f50d432b949e49b3581191659907da5a121691c6c22b166f37166e6f245c78a86fba6eae021d160fb5e4b58963db695521114fb6de8a6c4eab13ae5aa2e5659b5591b9167b1c3a1a7aadcef106a7b2a0109b4894bd07bc2f6ea6f1cfd342c7423dace10f9d0887fb4ff4bd927992dbd2edf761ae82b3032a7fc28eed602c9aecea74525934d9517332f1e3b5daec8399fb99e9cc6da7c3796df2fbc90200c937935bce9e1ff9554444e62c4719cb9d756c295b2c597cac70692c26ebebb4bc883656bc623bfd4044a45452d5a552596441449b53e72e9636a7bd9fbd9755cc692222929eca8abfcbdf4d35253376cf6c7e76355d97a72da789a2e2b8ed38af4ea5e5ad53e5d47ae048e0627beaaf5b7be984caa2099da0eb0685d56ea20fc1ec84be3b70de013ddfc297db14afb81427dd70ee4686fd07415f32c00bfa2f06bbf6ed7bb54de6e4292e5e603b300fec819e6fa0f206dcbd091c06a61b33e681937b559d5d3ff0e140b67de0d3a1556a909bd1610f54162b184b70f773e00fe046730edf5175ba6e801b6eddcc602c559e51ba5efe3d114f8b2c8824e2aaafe929f5221253aa872371d5c7c865b53f9eb2663ba3b8b1fed43ba7be6b8b9c8ee4473f1a3d98ba9f23d8e563e0ec39b63a8035e877f473612dfa9fb97be710bec3aa3ef5538e0b1787bf6eef3dd0fb1b8f2018f0917950c03fedc158d2193c1e61c235c6e8f1215caead0df3f0ce20b33ff7110cf8c83d82e0eb3ecc9a394ff8adf0bb22225a41cdd4c8c7236a5e8bc5ffc5443c21f28588565079ec7ae2b9e765cf21b2d16cc7f8e558adeecb6a31b2d6fc4a49a43c597d0c3800f076795f8a9c8e7c551e2e67b2f7b4e637871d2beb581473f0cce00fbdeff77ee276bb77ffeb8f74291a3bd69255fb6f5710091c4dee5faf557783f46d3bf99eae1b8035974d5898d5c169dd341e80e8dbebb5fe065021f9dae70738e60000000049454e44ae426082</data> </image> <image name="image6"> ! <data format="PNG" length="1151">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000044649444154388d9d9551685b551cc67fed4ec78954481e0637d849a33ed830658b5658616083c2bae8936fdb145d1e8485e943c2706b15d9ba07d9228c3582da38cbdabdc804ddbac1aa1938ec8a9b29387aab169ac1c6ae6c2537d0d09c7697fd7db8b7cd3610d4ffcbc739dfff7fce773e3eeee53674f42b4e8a652d8f5a964847a7fc5f1cb6ace5aad227fba1a3a51f4e0e6edff1b6631a44eb356c0fe28a47506363882b4d0588294d05434c691c0fa20a1c20da1ec2f5c0fc50fa1ab1ac6579b957a43823f2f9b048591ec6df44a4382cf2a7888c8d8ad8223232eaaf57716c54645e440ef48bbcf6a30c5bd632c39625f2e21699f9e4a8484164be30d4c4aa48d59e91076be94e554444e6bf3d273222521d196d6251a4fa4aaf886509d2d129b2798bc8f75599397258e4e292487e48fe55fdf2abffb2c2908fc78744b69f9351cb92751b1fd31f27da1fa7eccdf1bcd7867dfb321b0e7ec06ad9974a6c381ba3f4dd00b19f2729ff3147f485844f3e11a5a15cda26bb716f1c27643cdcf96f78e98e436b1a280389ab3d5073881f1a5c3b74fca341e27316dcc891dc94865a8d446407eccfc134b008a10d11d8364da42b0df51a11b59722d05af40c0960fc560eda07d60e3db33f47ea46057b2a0f75173762c38163542606a0dec0f93203a782e66d3d94678b60d2b85e9e34d09a561a3c48690dafda7ee3d971deb8de8bbd5823fe6c1a3a6344fa52b001627d8350af11dd94866b69b8e78f24f6e5e0af01222a4bd10b14a3a004d097f2bb2e9ca75c3b42bc6eb027064065d75e52ba5a804583337104ea86c689630034161c701c5cefb340319a32900c37bd1dbb3e4bc2a461c1215e3760f26b5c724b06ea2e51b307dc1a219d0420b4310a2a14786c682d041e4fd21cdea5c0a6004a637b06bc358ad215bfcf0d2e73a79a7340d3e38cd200f418e066c03ed7455c695010d7fd0f0d26b7fab64474806f0eaf7165afd1f4b8e0197f1303ed41c7810236fe7ec5cb039947148770bd3c28405df1fb264a2474e801c504395659389cf3a7a310df770614c4b486e9ddfefe4d484e977da52a0bdd5ba1d7f73856eb02a589a82c05687a6c5380cb933817c60168bc1e86ee311ccf8069e0f42661671257010a1addd37028c8fd5da87cb10b94ef7d0668917058e88c41e029e17ef82a0551d686383108d60e98cac33bc340087a1f30be2f053a0b14a0be87c2d46e5a8eb66bc93dd385ad687e6fc3119cf7f6125dcdf53fd55d987c2b458ff603401b38775da2d7a669cd05398eebfea6a7a641f453e0e0002cd24ccb6a4d94e0740576a6e809d2419096a88263185a8e6abd9ceb8cadaf84c3fe1f41f9a4eb41448570691051212a0a621e54bc06311d0202eb02a5dc03da34e5b9594abfcfaeac1b413d7db195cd3db460dff778cacb80b94468056c53e3492f03e627224b068c2172ff7da89760c583a51a2cbd0bf58bb0e251be7d8bc482cbf9eac2a9962c7464e17051b1532bbd9e20b5795f13ff71bd5233e674063efc1bd87b821e8a62d4110000000049454e44ae426082</data> </image> <image name="image7"> ! <data format="PNG" length="653">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000025449444154388ded953f6813511cc73f0917b80c853b5048a043de58a87085133a2834a2cba5421bc9a443d2ba3954889b2d1dac5ba014ea564817dd7208b619c490030797423208195f4021058b3948310779700e69fdd3b4344b07c1b77c86f77bdff781f7fbf122611872152b7a25a9ff6430b5f91acebcf3178db5309f781f86c65a583e6f7f1c469c79071d9d80001d9deaf54a1e2897ee4b5e7d14489f82f3edc1eee9feb88c1629121050a4886b56e6b0299716e1c9a2e0450e12b728bb6625ff67dd38fc65ec4e542c34eacfef768c8d5c92d707f0d086d2873e2fdfc5f18f29647be39b478b1487a136f5251ba3783bc9ea1edc9984d53d589e8eb33c0bfa2c6577627cf308b91f165abc3e93c2984a4000e88cb2730cf5cf80ea17b2fd47979a47b1e37514466b12dc03a86ad00960e906f801b492f0e6003e19276d64c7cb6ebc625d6ebcf07d8e9809832e27dc9c99322d5d1f9a4a1fda5ff119740bc44c9f4197ac7aec5d64ea6a3b1631b31eada986e7f433de29c16cca23e026040a36ee013a0698eb0c68d654c3bbc8d4d52a4fc16c30c01be96397ed39e2c9fa540a74edf72035da401f1f25b7d0c4aea332ed617d298526165072054da450d24713227af6e61a2d8f3e5e2b31340e4ecc77729048629016eb286495fdd0a512a209498c4dd22285c24713694765fc11e380802afb0648c9843052d7000d50e73308e0d0077ad2079176c8344726ef940e191fc40c3d9aed2fd03e82c01a86600fe94f43fb100e3b408fb7208443a639327917be32a53c881590169a00baa04c40b6417820b7b23c6b9e3d17f9ff835c79f04f3c0b7c4ddc35849a0000000049454e44ae426082</data> </image> <image name="image8"> ! <data format="PNG" length="679">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000026e49444154388ded953168135118c77f2911ee208517b090400b397050a890403a54101227493ad448976220a9635d4ad349974c2e0e2d889335196ab74410d3a1704d17ad433141a48152b880420a0dcd41c01cf4e0391c49935a691d3a087ecb8fc7e3fdbf1fef7df05c524aaea286ae24f59f0c469fd2894dc50628966450bc97399195866f53caa76fa5d4bf4829b252fa3665452cc9d479e7fae98a4dc55050b0b0d81a290920a709a6e7260d32331aad367887e9b1506e50dcf1533ca00a3cb87714af77cff7b3d74159914125295bc77b52ea5fa553fb0e3eeeffbe3ede935249ca162b52fcd17863b81404cab3e30830a81c6ad49a801b84d261765c451b6b91b9ef6575171e876175173eedc09b2adb89f6c3e859e3a18d68490065c288f56fd4d7156da1d644d3db5bae582bee326faadaabcf64970caf197f0eb15178f6c1a177147c1122c5e1426491452c2cba7431f3f31d6e751abbb390e83c5a3edbb9cba2ba2670abe5c0f54ef0ce0d150b5080da2154eae463ed787ac098b01ac126a4777696fb3bf6b3a8162284d52036d9faa86a567ec0dc6d302d5026019be0c6dd52a4a816225d0e4cc5b9a6eed741ae792bd00145051b023ef00bc7d8022a0760d9ce9b60b500af39749e613f75bb52e5843461955b3e584b82df034c3861f313100ac064127c1ee0c46b7242f442e39e392f53b8fdb9c018783df4eeb85b4613cc234cec4634c193ea85c63d736a796cd2f5efd030613ee4185b21e701cd062636519d5ad5c2e2d2c6a7e62f52b8b59c1801e1817a13680118d10499edde545cd6f8d4dcc86393368fa07ed80d25ad636c0fccf1df1af799e7404b81914e90c99fdd77fdff41ae3cf8172b66a11a81982fcb0000000049454e44ae426082</data> </image> <image name="image9"> ! <data format="PNG" length="852">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000031b49444154388dad944148db571cc7bf8e1efe811d5e0e83e7ed157a58d825eeb6b181ed180cb4cc0e7ae86410261b38103adc0ec116e65c0f4582c8e2418868a8a930dc5a24ed60a369c96684822674e8c60e49e6868a0c0d6b897f46e0b3832656ad60c37ec7f7deeff3fbfebeeff79e00013a49a4ef2e1a204feef88406ef79c06c720b807fff6ff04300b8f7c3e29104368990a1d41cb81eab07134812595c2ad6779f1f7c2fb308c074723f812c11b2bbc4e5474d825983ea5615c6761306a244eac5aaff5421c96453e0e9d4aeb2a16bd32c8f572364f69a5f031e924f8ca54d738ac7a1f8fb1a035198fd667eaffd224383e4870613466a722ae2b1595881e9893400f3b9658a29f2fd7d71d328bec76ba9435b5a5af695455d57ee941f7eddf3b422bffccac0c69424f5f70d634c5057beecd19def73ba399329a8a6b33767ae569e061fa82049b3bdd6f19dcb336781386c8680108cba3c3917991e1b0660209a603eb6957fafb3bfa1f458c5a90f5b4db755496ffb46673cadff28b59ef7a49aa4d680767e9102f6357df5f5abaa9497f4eb763078371dab3c0b7ca002a36e92a407190b9fdb88241173ed54dd9ef236580bc16a1c920eb2eef2f2751b21ebcc61f081cb4bf719487a242ed991c6a14167b6e62ce060c5ed02ebf6ac38204471dc6d73cd850f835fa82f74bc2969437a7fc7fba351fe893f126c97b4e04b7fa9a0a0a49724adef48a1cfa49274fae38059f174ebb0250d8f339f043817f695fad954d61f7b53ad4185bbdf50bb5a7de92753c8d4fcb3e77abd6dd57c69c1ab942afea7a7e5bdab36bf4b2f7bca0cfb17de1adeb87dd4e32e7b9f41c192202958f5206620e526677bedeef04f58a83ab8ea2e375acfb912590b29f7c5d3bc53f503579ee882b76047daca7e57c78b32a9072a74d7bcd1961be5a97d6ba49d7445818a29d497eeccf8e58eebbefbf6c633c6e3c44f3a6a4b140d890feca424252e59c39cdd26e5c1d8318a4f1465ef81ee6f447ace98c8fa3bd6f448e19d3f374ce06fa389dffcdb4d2b8e5fb48e71bbcd98e091605c90f58877d9c65434f50949d250a70d73d196e6fb3cf8c830d46927ab9df6c827f41f8fe0c636199c4e230000000049454e44ae426082</data> </image> <image name="image10"> ! <data format="PNG" length="403">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000015a49444154388d9d95bd6ac430108487742953a4c823e4b17dd89d8f3477a44891325d0201a748e1e20a171790e10232a499145a9d6cc9ebbf05b31216e3cfa3b10c92e017499295f4789e170792c49acb0f92b2d67563dc20cfca55e220892b695c663bb94accbf1e7141e6d941fa327237d088c50e9e85fc9de43757084f94bd38f5eab3767664cbec98f65888b5b470c27b9d58449b93997c6848cd507cdc63d938efadba076678bf4f9e128ba8f7d69c2d472b494d19d2a37aecb5a21c2715a586bdd424c4563eb92bb15188fdfa2435654fd813796fbdd645fa1cb1a3746fa6130f4934621ba5a6ae1b211ef3d8465df3384e4d23fd1413c767417a3624a22135eee94d6384b8eff1dc35939a01b910df60493d8661d701b805badf0eb803dab603ee81f6a7051e80e2ede8162e21aee6523342bcf48f105c5052e3bddee6b1929aed1e7f00c56e0f3c01c5ee287d0f3ccbfc45e6afc1e37f074e4dd66f1d1cf50000000049454e44ae426082</data> </image> <image name="image11"> ! <data format="PNG" length="770">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000002c949444154388d8d954f48146118c67f4a0783823a04090576e8b081870d3a6ce0613b45740a3ad4b1e862d0c56ee241ccc3b22d12b88760578984a0a4a0d483a20382ab28ba206c8107850d764161460a6616159e0ef38dfb6f46fa60f8f1c2f0ec33cffbbedf42c849a7a6c6dc6559e9d494254377496361ef4a0a7ddacee0506e52efd576c6b3d31a19d2e4ff884a02adc72fe95d6c4ceb392b37dc5fd472839adbcc74664a9a2b15958d595acf8d9d29bc998a15a57eb9e5b49472b5522849922a65bb9d47527a7444525a76e199948a15a31d6f4d4b4a4b92464647a42349054947f27fa4a576e76df3beabcd6c4251c21d2bd9a4eef6cf82978173f0260d03bc2443962ea046737daf0f6ef70d80330a1f0bf06aa923aca9a89094fe0c4ab22359da36591bb6d6b9fc629b736686139206a5fd014915c3d6bafdb8a6a1f6be6bc4679ac4d1f729a9d22f69379adb21caf23f2aca7967deca4037787b6fa2d91b92e13170199c030f36203f31cb73ee919f98f5b7431f12d2ce53499b912c4539fe6358315c3f754f6776ad0637c1fb35ea736308ae1de2594370f5106fe135b7c21c035c04c7f1a01bb68a7b7007f21bb3662af23969eb91a445693e29d9d3d25c52b29386d3d119079bf9d34769bbee98f11731490f64cf25a44a42f6d780f17a1da6694483cddcddb14d03fde940efe3d25c422ae7a4cf71a91c37acd76d19074e836ccb86bbad193b873856068e6b3856cdb05e37657c0c9caf67eb1c78701daabf1db851cfb843efc6c585b790005609e7c95ef3c8fdf51b87e38f1c55a01bf80d1c02bd747466d7dec2498daa558313e3b8b56e10f5fe364c4330c7dd50ad3a70bdc1b1fd30a6cbc92af475c16aadc169bdfed9e5f871787e0c6d8e0f802bcd8e91c4e0fd98c61ff7484f7ac2d9d837b314aeed7730b82b2a95e63be3ccbf97d327988a601a828d0bee8afd86e908a62262a79a8fb90bf864f8c5f09be10fc3857ac6ff007ce891b04f235d1c0000000049454e44ae426082</data> </image> <image name="image12"> ! <data format="PNG" length="972">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000039349444154388d95945f485b771cc54fbb97f850880f8338f610a10c5256300f8305fad00c07a57590c769e8c81ff2304b612c2b6ca4c224ed4348c515e243c78d2eec4646b886ce051f84b4d22d0a42b473bbb158b8110b4917c7bdc149166ce1ece177a3466dda7d5f4ebef792cf3df77cbfbf0b1c2a2593b7738b534a96062ba492cd913552c972955bfc021daa5122dd2199c76ec829c5c7340d259b2777c8fc6291a4a97b646e2e4f6a5c95924adf49607748a2e3529400a0a7281e9098907d2c91b979927b646159254972454861cdec17496a341213b2bd937b774826a2b7253befd150e60a24c9a20951354d4057d4b6ebf9c522798f0f8fc2c2770b0c8cf2208ac63cc7e54c8edc238b6bc2186b428a25b33755dd10aa64736ccc733f92e11859c88a8ce598098f8cc6cb8733add4749264a3d1107d45f4da564568456864243ade020746487748a2fb2ae9f4c405589f27f38f04949ae9b0c1f6bed2fe26ac9195acbe1f876b304139463a07e2745cd405381a4b88819959b606a56e08aabe633ad7f5360d5f0f1fced9de060580ca6c434cfb70a66696dc31553fd2ef906a523b36c0b60a84c2e57dc77b64b1a4b565a9ebed99b774683030de119c1f50c7a594229c987babb6b26d65dacadcacf85882f901f5c483d2aad3b776c7461f2c2cd51f2cad004e60e58f12cef502e56a15781b300c03e802fe7d21fe505a2f63fd7109333dd97a47c700e0ee0f78b4acbe3f401e756c66ab964835a9317a5b62254b4f27e65b00b0a9ad3e59fb6bfbf7b2f6e4d2cb972f2ce75cefa1fcac8aee9e33a86e1b38d3dd85f4f40ca67f9a44ddb28bafdf0962b676e7d319e7d36f3f705aecd3cbbb3f1f8ba2f5e3e1c2e4fdf253a3d7f27dcf77decfae6de257e0ab2f6fa2b9d0c4954fbc0bd61f7bfd3d3687d3db1b74dffaf3e6a6d7da059cedc6958f9b3ec56f9b3ad1763449baae4a0460796d6e00386833f4e588d89a8c8bfcc64a69f004f8e5904c47bf586eed9138419dc0098fcdc759275993c4ca645c64c6caf8c02b9c0378d7ed97da4fd02b2ad26ff3f1c6015c4f3bc9eb56462e9af0c60619be5b60718eaf851dadf0059b8f2927599385f3b48b4c5a39fca16d0ac3b13c876e88af93cb23e0d194e8df041ee8b3faf8f901bc927472f8829da783e73f42bd9e06de0fa2890900c0d26f693c7f36f446ae271fd77f082e55fdf8650c284fc3f277185de7bd38e5f64b6c368368fe7307cddd26d617464efddf480060a8cf3a65b5587c7078f17cfbdafdff0062918800b5b36b0d0000000049454e44ae426082</data> </image> <image name="image13"> ! <data format="PNG" length="881">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000033849444154388dc5954d681b5714858f5dab488bc0086a6243172a6851072f62d3141abc90a18bb684200859d4a5d80d14da74e350baeaa2812e872204d24210e104242f826a8331821a5c43402ec8950d09528d0b923174649c30139c30324de0cb62c648b2959f4de985e1becb7bf7cce1bcc37d7d80fed730d3959899a1f1c60d63eb245e0b9aa918ecd0a00c7699d89be0f61f6d38f18fd224cc7465d6cebcac69fc27e71d457441ca6e6c4e77ee04bf2cf5ee49ad73f3c715b0cb60662a8e5d26d2b96f978951a61d2ea4b29c77cbcc8ddda838912c04af9e26d49fde706e37a2d2fc6e4dd2b831ffa0b6d8960063e1efda9c2eb41b9a4f5bfaee536d1d453433353a6e7c11762469fa24b0246924c99ccf045c303395840f9ca0471496fc5c042c18faaa42f012c669e05f885d5f7271b3905ba80260a62b090e4f83baae97ab3bf6f139ae65411fafcef6643d768f46ced71abbe3eb8c7fdb3a73e0e71aa48a60c4bbadd87fbc70d69ac9c6a834ffa0260d48ce80a4818e93cf2405a4d6134921e9f7eda6971f3775eda13432528b6882f829c691258cc924b003a96cb54bcb4e4780cf1660dd4b66a682b507fa6079f114b024457e60ce2cdab859a8d63c1d8ef3b1b6f681b7b06d60cfaf2d482d590c5d058d16225d5248d2d1f35a72fcddb0d292ce05c392a47346587a268542921c293c18929a52382ce5fff4eb47d2d4d0b03e8b49d29599deac6f54b7b0bcdb06286d5a6d868065798c0b2bf5ae3a75a78ab9073a5fe83d4f8632cc7cbf00ee7ddfa7c0eabd13dad63b9c0160018760de81c93c289a8bbf75127860f0f2eefec1f03781703378f99f33faeb6d471747436a3e6ae9ccd9801c470a49729eb7141a0cc879d852e86c40f99586a69f86b51f76b4f6db87433d59073f27365984d45de03eb0d9c1d8f51903a5b2e72233e3cf9a6c15d7064d2cbf62c8c74bb35369b895af421d0a45cf82a5750b0e7d4d33de5db875b89eb118fb1614cd2d2adac3cf5df10973f51adcba5b853d5ff33dff673530f3b05c044d2c3b8a7253d15ce4d5806d6023786975cbac4361c58203c815ebfc9c87b1af4be87dd614cdcdf46aed7b2d788c8861686b7852c67b47d2e61f7abcbffdeb6de94a52db7dbb2f6bebe33f7a4c5f003fae0a2c9c6ddf4d0000000049454e44ae426082</data> </image> <image name="image14"> ! <data format="PNG" length="1698">89504e470d0a1a0a0000000d4948445200000020000000200806000000737a7af4000006694944415458859d974f681be919c61fe54f514a4ad5926d55f6b0dab24debb6b0d112ca3a2cb42efdb3081f5c810a15f810d174c19083313d04938211de6244a02e0e54303918a44b1061d7a83ab8480751a9603c2268196d5061ba88660e2a68b7a24cc0147e3d7c9fff25b2e3eec0f0f07e23e67d9ee77dbf773e45004522119d74b1ae9876f581aeeb879d5de9ad6b921e4bba26751edb7857d275a9bd2bddb86ee36b52fbb174e3c8ef0fe25dfd5bd7743fb2ac95c8cb08b8f37afc56546f7efa86f495cbd23349977406fcaf74e9c209f84fa9f189f4e367fadda90498d72f745d8f149574b325e98674f144ae67bffef25de95f1f4b1fe8e9b997fc34d97b2229332de975e9a2d4fbb82d49ea7d3419db7ffbf3a9cffff1f7b6f4d39e9efd4792f4aa8013b3b77ea53c9b82de1200ec79067d600cf55aeb3006f0cf18ef01c329ea19712a01e695f76e0b0821ac0350afd5a108f9d53af9157077cc7ad037e8ee948ec5cfa3dfab1812db53f05202070ee4610ca50710b6a1ba65de51580376c06b3b4655db81517824de80d1086f6b01020f1a796004e30a8c36ce40e06eee8fd5fb05284369d3850072e505a6cbd3c457e2e0c3c2edaa6113b6ac52e3008302b0009ddc310cca711825a0163b9900dbdc24e071e5910703706a155afd168566c1281f148877e314b61ddc2250db2761b1bf0cb8d05d7811fd04d40481a8cf1d21e0ee0431c62cd61bfe270ca1d5f42904902de7600fbcd063996562cd181a0935446225c1c67d17ef3630b6b56f668de25e6e22068fe230126cebd001b7c31fd8e3539a46c046c3a1d56f51ed1b45a561090707358442a11d11274e74350a7b90cd94c00fa1b304836968a68c1bcdb4c523f1200e4d4128d877803df07a2300a68bd3a69bc72e000bfe024992a829a2448977e3248609a68a49a378084b8b90bfe31885ed9451ece72662b01d873dc1ce51024db6d88396dfa232a8e00c1d5c5ca6bbd3466927ca145324b61354fa154a3bc6196fcb345e650bea6b407709a8c2c0d67c128e13d035690f7a009f9f556b665a243793244912dd89122346a29b606a38c542c30ca391310a6f7d034268cde700c8ce570857f3b8b5248429fcf6cc646cc40041ef8803922e306040dbbc3cd14cb0c106338d198270841798f5fd89e63eac4333844c16a251dc872de8406ede8160063a29a03219c338f846f7510211e741eb3dca10044662b56726d7686c73fba1d96963a008413c0e9763f8b1180cc1ed846433502ae6801441276571e658ecb7ad0383e304146cf18af3c0fd8c10088f2ba66f7168c0d904ba50fd510aca010cccfaf24acbcc859e553c11e3307cae07ec752e5ce7f7ce7df7a0bb0f1c08a1bae543085e3f844df007fbce18c75a9d104690ce94a09fc66d27219c7e01fd4ed438307ece01495abe5bb91a36a0d53caedceb6354dad8ed3ce7d010e899e76e11f22b05a3d84f4d40bb0d994040d2b9fc4ab51cde3becf6eab66f14db647e7f64498cac0366bd54f62cfa6433e075d2a6f6beed01dff6806f7a60d49d4c407e999f2fdfc17ccd46c795ba3b36b6eba587467db566d4b7ecf3ec7c85b0e1412f01142c4e59b44db82daab37a3ae96374de5be4a3c29a1932fbb5de27d4dab10e7443e8dbf200c1c0ee9e2d9fd13dc8dd74a02ffcb25ec4bba23a2bf26f6b71128148ee56e93db77858f303271a56f19675c5ce0db77ba41746c699fa1a6ccccdc09ce976e604b306abb37a12bcad4549574f3a0f5cccddac7c16ae5b07425bebb2d9ef005e2fb40e85105847807a238011e46e5548cff144d29b92a6245d3d727f4bd26b92ae9c4420525fe3fddc7ce5b007c687353ee87eeb8c53c46e5573625afaad712035bbf1a14d7645d2978edc97654eef174e3c114dbfb3f4b56c069ca2774c317b18c5fb4ef481a221975f3573209be169f2fac2af257d47d2d7257d61621249a71dc9cea5e79cb25be460d261c772a56688546bc68dc23d97d63aa433a571e527a382a4ef497add2abf24e9e4e3ff2904949e0d7f90ce94c007afc7e1aee883db33c973b72a6433907ab7508ec7933724bd21296e6dbe20e9e4bf5d2f2320e97c7d95bf2edf31c95b6d5377e701f80f8dddd5397693d7b2bf94f46d49af4afab28ce5a7273e2381487acef94d3603f5a6e9b8c23d976c06d273ced399779616653afc35495f9514d569767f0e029274319d290dbc4dc8cd57a8af324ebd5bf893a4ef4bfaa6a457247d51d2799d55f5ff4920929ee3fd74a6447a36fc307665ea86ccd6fa86cc96baf8b912dbeb7f4fd7d06f0cb5a8dd0000000049454e44ae426082</data> </image> <image name="image15"> ! <data format="PNG" length="1246">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000004a549444154388d9d945d6c936514c77f2d2d3cc529cf1b99791b24b60917962ff78e699808717c24736409594c0009264c3e12c7f482986880680204418ca89488c8c5087001b8a91090916d086e1036b60ab849077442a10d23b48cb1be6cdd8e17db90002af17f739e2739e7977fce3939f090cedc92e16f55cadc835df24d41a56caa0acb0b45bb25b32a2c730bca646255b3781eae799c1c838fe26a51e4e0b67f4d8d88e578be6f8af38a77023dfe8ac4119532a291ccd43cb23c315d11fb964eef969a158ef47fd28bab45d576c9d682e312adea901d56b9dc5422c215112dd2679e96b41611d52c625d96cbd647b5d3f6d7893777838cfe57c7c51df26a5388a32d5319ae9bc0b620d9023a03d481180a2fb8125068609f4f61b47b22aa337189b4d14bbcf9c3a635e3420f839d00f629b2632edcf661885b90ac07df4df06e87b5a3bd185130bc06c676d894e1010ffec852636624c0ac92a963d70616eef23e164c1669750268079a40b7827132d2a735d782e71a9b94e612ad916ea521581fc16c077f450a9585f3f39a4677a2b5ee91813a6b6f48beddc0b24d0b71692f280b5427bd2513fcbb22474b16274ea8a5b1d0daf925a67f018a63aad06f63c09a1c0ffe53909a9f3d454d7d67f696dde20d948aeb3e39efa7ae8d668708c745e816a15ac4dc2671f3f515f9c0b0075d58ab6564dedecb2b0b3ae46e41f52d29ea10f11d12d16522e6baeb6dbe2532ed7ef2c1b0ecd6e522748850d91fcd32e90e6c93858f9bf6feb332bce0b46cac12e92d3a2bb2ababdf8c0e8b98a567f6002e00e7ba13a96e5a802f8056e01824f370d3192bb54a65d4c3e037273abaf4cb7c1d8c51ab264030046a3cd8fb126992d969c00070aeccf544bd19a0738124301eec0648147ab3f41856e755cbb38fd86ee7da0a2fc788915639fd66b4cf08dbe74af60277009c5b4fc6769a9d9458e79acb029abbd4005910afc71d19c9323b92d859745926159577a941ee9ee71c7dc1ab5c555e7a5a7e06bb07926d89b12a37b84ccfa9d20f7a18967b48265b4189aa6611ca4408f747332c7db97be562ed0dd9595c2d8b7fef9639ef9e96e567446aac4392560379348ba8d562eb7c791b70ddbf1556f0d6f25886f1553cfdf7fdc005d8a0fa97484c458fc74d5f2a8721f11a5c36384803b38093a042a438ba6a9e1d5a77c439c85831d59899ccc4c11b03c042c0db5f64a7c1b670b42519da3206d57618b76de1c00672818b03fb1fa78178dd9f40ef904170ecc5f715533c33925186e949f4a8aac43d667bdce92bc038a06620f12690014407fe7f806ea42f5d59f74bbafe93f5765bc559c0be0f1efddea797dc47e95d15e0a596ed1c783ac3f3833a86c10c32ed53389930005b048c00a60317000b3845a76a19bdb93334a712b8fdc816591fc853bef9df4dd6bebc89685f4660894c36bfbc7e815b22ec10515f8ae80dd7efe8324911164144d8d6d5a7e64b1d66410ee07e04fa38f94ae579b34e9ab822a244446f9084992f1feb85b59b5558d2aa5c7a7599fca6c614cf069e79b0d6f50fcc41dd635fe4b61eef4fd9249c2a64fc186fc82ed7931b53ac6f1e45626c7bf2fc820344ab1b818e27723b2865ee52fab5cfa69bf9b208ed0b0083277228903910ffb71cf4f7ef89217f01804f3c0a80de7a030000000049454e44ae426082</data> </image> <image name="image16"> ! <data format="PNG" length="535">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000001de49444154388dedd53d6b14611885e12b2af222165b588c956361b19022db6921b8ffc0d85904221656012d4308c12285428a2d445284cd222a580441b00898a888450a1350b6111211b1b0701691b004f1b170f3418871a3a6f36e9ef97a6f0e3367667a22c27e70605facfb29fea79496e5a519f5ecbd426a9ad7d0f757c6865c535d43a4a622ddd5d76352e110bea9ba62694fc24939c6d2d134d8fedae69077e877d9120bead9832c2c28dcea32794deea57a9a4a518d6a541e57c28245934a9b174d389f2d67516956424d616217f984dc847aba95a2fcb21c17e242941aa55033afb6550a734a6e884a54226b666156617c9b7c5c6e565d4d64ab5994d7ca51894aa4a914e6d477cad0d35938afdfb9544eda8b6d1e69a18a16c62483ce90ce266d6d49d2bed9e69b69232efdfa9e8dba6a5958154258106614ae0b9f84cf9de3ebe7c7851983bb3c850ec372a39d45eb92e6b6fdcfc217615418ee46ba4ec38a571dc9c71de6276148d16de70f6e6c1d973becb4233881b75be613dcd3f25dd548775ddffc56f47ae60d4ee1f596f9012f2ce975d2ed3dbe401b0c28cc0a6bc273615818b068607b47f792f8274f1dc353ace083697daaee68fd59d2cdc483868421e1e2cec5ef96ed891fcad172cdfddd8aff7b7afeff9ad6f9010ae5d02909e32de30000000049454e44ae426082</data> </image> <image name="image17"> ! <data format="PNG" length="737">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000002a849444154388db595bd6b144118879f951427a4988314575cb181084988b08916e688c5410a0369922e4a0af12fb0b6151bb5b4f33ac122626169b3a0e67285b94d614ec16203424c95d922e816033f8bd9dc47ee12d3646076d961e7e199f79d792790c495b4b3e0e3658c96092f3b7fbf4aa8107396796d60601953861847a225a2ff4a8544b363241d47acca20bc6b5c98267f1aeb52635d8777b0ba7d3e7cbf4aa4107bbc59913643ed4e9068c2c325f9870aa81aeb9224355f4b9fde491156d1305ca187ea6128bd7f233d9e97562bda35243298fe5098df7911d79d06ccdd873c858dba491db1a67bf0fd2a1110dbbb154375123ebf841c6c9eb30061db1521390d8596887407ab4fefa48fcfa5c343e9fd13e9c3a23485d514d148d3c6bc74cf4806ab712f20894012411078f86da2d4114f6ed40d376ade7ce7257c4be86c25d92c60ef564c399c8193cc9bfe4c297fcdb2b6a37eeb84bd916000454438629e2d1aec3cdc7c003bafa0f41d5a16569efae5cf015b29b4b20c473d28a0e78201344dd471c4b36bf33e8e0ec82de45c68da0f1ed8c7a72df8c1de2cd4d94a32c6530f9d79e4a173c02f0f6504f4b48d04037472fffedb2a4c8becf3c57fb7dd79332f0017272aa61e9aeb2b4f7ba6b98569a0546261aa64da8e58a5d1876828c6fb550f1dca7e9a5276c01845ac7338ca691e91d5a01eb8c1e40dd68a3ed3f2da8b9e699a526e6519ad2ce328f7d01c70502b619a106b6cd0bc6b7cae695ff61780a623ae4d6070c049d181268539ecf56a454878991305a012914a588de3a7f7f56db082b03f145927e700d7cbbe7deb377ffbcce60f72f670d49b2764fd4bb7400d0e9a14e3dd5a51c1a842a2d5ca48d3a19d3346246f786a9c883365b3fbf304a6287d76f70268f77f888ae527dbf40afd101840062373f9ab49108ae1ab29b8aacbf41f8056f0668ebcdee30000000049454e44ae426082</data> </image> <image name="image18"> ! <data format="PNG" length="804">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000002eb49444154388d9d954d68535918869fa81d4e71849b0125150a9945c1640cb4e24657e3dfc2dda0b898d928c2acba1a061703b37336527f50e6ee4c416d368a5d8874a18b0125514c9b91647a3b28f442067221854454da9022af8b736f337572539c0f2eef3d9cf39df3f0f27de72049f224495a0c351a2f54247525952435255d4a4b95a2f4e384af34e72411f7b1585dd6a0587d1b1e3a3b6573bc5392a4d6a3dfa571732d6ee36dd9dcd7c4c63a0cef02de41f660127c8059b83d4cd2005fe2c4e62e6c45dc0d7f4a486f91f248978c1adf1b29cdb7b1560cdc358a07a7ecfabb4855235d70a45b47f4f0d18262adf06a7ebc15002b3e1c9f8532306ee00fe03db8f30738ba7480cb370aea9bb7256da328d58dd470a459233d48a9f85ddace55a4e5bbadbed4db2a5b10afbd3c06a306e681770e3c83c32726a9d47c9800f74fb77fe240dad2454969e9494a6aa624372d5d494bafecf4a2378078a0c7e9bc2db1fd069e1b2049a9731ac6c0f703b299ff4b5c9f9034213dc948af6e4a3f6542dfa3f9cdc4e0187086067bfcf4308c5a4f1977a05c00738860650d462008da300a6ed9259148ee4c24927b8024f05522911c4ac81eb5396af72107bc9e86b1f3f0781ade04b06f06725958017683b7049403be399bdddb4b3640a7bbe1f1da3a3dcd65a03d076306cad3309ec2fbe710e4b2967437546abef578fe538f3b005f6cf6386adf1753929625ef074945e9ca11eb6b540dd5705d555ac83704ce08a446ac3a23e0ece979bc0e0c85c4fb27216843a600e512fc0ddefb00c6c05bf2c9e6c0abf99083fc4bf7dfa45da02db59bfd89e7a6ac7a0fa5eb33524418126fdcdf5569f15643e038e06cef5bc76b2131ebc0339fc2d5dfe0de1cfec9a39003ef758f984c8f7cfaaf3c52fb8dd4fe105fc721f1cc85f352a12845376aa411713dd4667ce76ddcc7ababea695d6a355bb6171a5697eb565b2dbbb0d1b4faf32f17fb6fac7ed1fd44c343153e536a6d4dbcc35b0a18be63707131183a749864f2b3c697cffcfa9f1efb08391b301634fc95710000000049454e44ae426082</data> </image> <image name="image19"> ! <data format="PNG" length="643">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000024a49444154388da5934f48937118c73f33cd573399fddd886a4110eb0f2574c85bb388f0144287ad288c3c34aa43c3303ac9e820eac17097d80ec1c48b78128340a360dd940854f4f0665a9304df60e4a8297e3bec1d546cb6b907be3cbcbfe7cbe7fdf1e5f92189bcb2e855841305e7ff51e1e1bb3bcbcaf4ac25fbb8f4e7797a8cb34ad363f5e3d91e5889394992ac758d181d4a396f6ba5754a3237653abf8e9fe730b0ab74f094efad24296d66f9e9e16c5758327902b881cad2c0110e4af14fcad8ac5c575cd2c017ef3e8e02f5c54711c1a9456faf94fca9ccb40d4dd83d2ec927eb23af001750511c78862b329ddf94b7a29206a4b46d1f210cec280edc8d5333dc4a4ef05c6a7caf546b4a4a4b998024434ad9d64524b169c678bc15fcef0f70005540ad229c52920d096905c9f268b48f652599d06b3ec864fee9394e168a64eb45cf30231329cd526262742de00fc8a833ae0107807ac00918a58327185286cdc967b42522892e9952e3e9c6497bd5aa8adf8a7f35c803eb252f6c50b52c7d0f7584e472b96e027bb60d9ece665e93dbd9e0bde05d49f25df4cdd93fdbb9bd1be7d1f8d8f84ab23b29cf71cf7d606f215f05a5d62c41b7df4dac3dd609180e87a33a9fad6470f3a3e66136589a35660f355d686a0376e735961a852402d703972529d4115a058e003565679c537c303e6ff55b6ab9dad207ec2f3f63bb8c21e3466c23a66830da0ed4391c8edab2a3c8c9e3f10c85bbc20af80351b2afd151f68d011616163add6fdcebc73cc7fc80610b80ca72c0923e3734343cf4fef09e0156815fb9d96f21db09d22a06aff90000000049454e44ae426082</data> </image> <image name="image20"> ! <data format="PNG" length="443">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000018249444154388da595bf6bc24018865fbb75ecd0a143878eed7f27fe3d0e8ab7292e8a43874e8e51a8c4a143070785144eb0708174783bdc5d725e72f9d17e10befb207c7978f2928024b827493236dd9f27624192e872d943a994d25d4a7d988ca69d9683247252bfe4dfc983c4cc0a6225c8c968418af6e4fa1022363a9818f20dc90d3b2cae2975d1dbe3f74f3233e4ff766c884369618dfb30b1597a3cc8da8716a9b95e5e721c0d233223a3e19a4cccdc909a2af232714646fd75ee56268a95e5a4c6a6254f4fc8f1a03fb8226a7a07363574525322b64b6db70e43554ecdd4596c89328fe4d2e0d8def7a15bbcaf21b6df88dcb1470ca0b6573b565e0f38b64bacdb7c3e14c43700f0b405c47809cc01319e219d9b79a5e7976714f5a35bfa9d02f7c0f9eb0c00389dcec0232076337d03db7cad1c6200a4325d7ac4478fb8b11c62a508dc02eaa2803ba0d7eb81a4267f00c46ed99e38ae498debda256efb47c82b941a99682fd7396eeb38909a2ae2768eb75e5a6c7a56667e35f35be1f8178966f80fafc1d50b0000000049454e44ae426082</data> </image> <image name="image21"> ! <data format="PNG" length="1225">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000049049444154388d8595416c145518c77f1d5ee50d6dcd6e52cc8eb1850d91d02526dd754dba0d25b007230b48ba04126962426b35591223299218ea498c51c3456d2f4d39412fd0f552d6436131621750bb0509db5a096b5ae2d6967446289d01863e0f5b698156bfcb7fde7bf97ef39f2f6fbeaf84ff88ebe1486980d86adc94816055d6750889b88d9b9a40cac9924be71f2c975bb22cb436180908b937e73ab50121ab73ae53161092acebcc86841ccfbaced59090a75b823503c7bb8e3ffa5fb00a47d6e5e08300b17d94a73d34b4685843b0b30dc6d3206ae06c074cd5cf71bbdb06063282a3e69e231777b4ed709774a9c29135d76b8329158ea8e9fdcd4afdaad4ece84da59452eaceec133a9b1e50eaa30175b32ea25438923b5717d999684d88a5a0ebae872329b5e59b47eaf32f957aa094fab3c85a564795529959a5de88cda970e4b77375914d7dc7fa3400ed5f70ce753e0cc0367baba971f010dc2e8003767f1a0cb07fcf1775b8a8667f1a04d89e3cec39519297727dd4e5dde448b22cd19a289678b0361251e14f4cb53fa1d4d8bca3315574ad9452c93ea5ee28a57e52454df6a9c731a694ca0c28d53da0543862a9baadbb9a5b9b576a83b5c1d290606fbe3cfd3ce176cc91a2437c40e9fce7346ec73cdb0b9514b571fb420dab80e11a0a0c43a5b722e35af19a29cba385447c352eb57e4f93862783d717856fcf2c40011e82b771375c3953d4a7e3c74318372458b6564f7ca36199d52bde7cc15a6f08f18eb9c6f1ea2fbe8739d6833efb3a85c11e2a5e0d816dc3caf9b7d4ac7f8669ef6ba2343f0e37874040d61962b3f466b49090ab722e65deda26b07af01a51707a30fc31f8aa03747dc9ab09c0b6dde853f5c567b11b5c0809a9a7b02bb4aceb101060fe72122682142e74c38c8d79b11b6e05b19b5b9686364461c604a7777ea31704e45c8798d035adf8ef33eb9daa873f3a30440d5c19c2ebf861e853f4e3dd4b832fa4179c2ed280883b49b85f32581b7c2924e4495bb0592ff72e240ae0bb33cb9761b173a10336389075acab86cf68d342d23399759dab3af1398404190721978636448bfaf029e752427913e0cc85a41ceda8f014b4924be71f84843c9d73937f23c1f666a02152bc0d8bc27ebb055ef617b59467c224052ef77a85ec373d9e690de040303810805358267a5d135816f4e517b20eb7a36f69814a037d530b1c6e5f383b958397fd7867a264202d1bdb32c0ddc76d73201c09d4c3d7399fb125103ca215641a0328b80e868853709318423ebb761c8c6b4373995bf9417fa5f1457b95ef7b899c7edc84ccb78e8c20783f3051f821f7f3c71895f520758cd79a409e9fd7a7d69685316490bd5518f4fb0e7c76b46aede5f886b8d5d9d539f744a34fb42656c4ae0dbdb2dde5604eca5d812a7f457eada1f97d2d98a4f08a380527896199e46f0ccff9c70bf7323356daef334eb457f92e4be4646757e77d586282f41debd35223a9b28e6bc3d18cebc4eb896d849481a749cfbabd849ca883939a4432da2b64bf6c6ccba446527fc536c4acc51364c99997684d943838cfd54c591ec332abe3e8d529ec8a98d0b524dc8f0a263a2a64c1f4f8a61d9cbb1269777675ce2d66fc0393774c94ba6e20a90000000049454e44ae426082</data> </image> <image name="image22"> ! <data format="PNG" length="786">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000002d949444154388d95944168145718c77fea6bf29f30a96f25091bdd6af094c51cb2a445c55c729082a7b220a52bc583b50785424f69909642a4d742a1f4dc120f22b67810046f0191d2420d826911d950d2eca84b1c9a453fd371c7c36e6cddeca6d91f0cdf65deef7ddf9bf93fe88eb7808f80051c29f00cf81208baf4bcc661601e78da94a6cdfa0b906b7dd96d43d88be3ac9ca6811c0e4840129618c0df96d83fdd8a1d70dacb7f85a35fae295353ee548f6bf122b0d68d782770223b90fd5c523f0e2c31bcf3903456c6715c11ba6cd8d36ec4433ef4d30a950bd4f8360141432a78527b82995db1c46e77eaaa1d3b80fdc0a14c984112a5b08424e40550c7b865897d4d63ab4decea207e0718b275bb6b753b3c3c341cdcefb94fd8136289f178e5f16f51353a479ddf3b8dbba96339ed56a84fbcf7dfe0f8cb6a361bc7f1fa197f06c35e54962b77a2383a0fdce924dd18f935bcf763c303c33fcbabcf6ab6525e2e7f26a73d7ec09f8da2e89ad5ec5b601518017a8187cd27dd6a23f2a3f9f1a39347d3b999b9b478b29816c60b65e0989cc6803ee01870594e0bc03d1c5781bd5b4a0170e40a63851bc5f78a7f4e4d4edd56a80bc09bc001e012f0ac25792930feffe27fff88491a77830326e4740348e594e25aea36c5ad4c485a9254f7a14f152adda80a95e2f8b5d940cbe05b93937451a10ec80900a18d386366cf819f0c8bba11f7cae963effd9442bd8af17fabd56cc112fb1ed87409754a1e40bf61ef4aeacd2843c667081470ca9f225080993d8c2dfe02586eb7b853f20681b7a973d7cc0a837b0633ea13ea118b2cb2565bab561f552f26ebc915a0de4ed0aee35d92def7deff2069d0129bae449595a28a8d3b38b695a5a5a51933fbaedd116cc5c0486ee47a61bc90e647f3ab0af5a9a40fb3b9ec836c2e7b53d271e08d6e841b1ccc8fe5ff989b994b4b1f94d2d923b30694807d3422bc2dda9df17ad817ee2bd7ca13d5b8fa7cfed1fcd57835fe117800bcd8aef82559a1107c073b8b040000000049454e44ae426082</data> </image> <image name="image23"> ! <data format="PNG" length="954">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000038149444154388d8d924168db661cc55fc20632b460430236e4a0c0064d4e566050971edab053e8a06ca7d28b9bd2433b0aebcc0ec58c514c0e25d9caa039843af50c4e0f41d57af07cd8905d06564698ed904d4ae98a5cb22007b748c12972f10a6f07d9ced215391ffc79fa8b4feffbe97d7f9044afe45555b4d7dd8cacb88e5575292b79da9b2e65c5add9ebee17ffdd3ba8fa0fb9ac1c37576c475654da4f4955ab9096a7ee36992fa8b434bb965e96a34736bebb988b9b458bf99f496e93e5759db449564936c9f2a64eb6486aa4a559ceddc59c38d0383597162b4ba62317caa445563675b243eaa64976c87255279b07ef55ad427dc92c0d342e67f53bb9d53cdd6db2b2496f353da918ddde20e992fa53af95953ccb59dd3712246fcdd7fb997648ab6993245dd7255ba46579bdb96d796a59a44d26bf4eddf13556b315aabf563c4ab34be876b5d75b87ff844d32bfa8fac631acedae21264e41db31806380f687010030feaa03e380b3df062240c37180d1032d3d29c077e597ca74358fa26290ec90ec66c95657edb7fa16999b93fd8995df95e71803b41d0313c780eab33af021506f3480e380e338400868b7dbc0f1ae0228fc59d8f0031e9e68488f1e941ee2943889c04b606a6c1c461d188f44801740281402da40201000e0e9c2bd4548fbd3595fe3c2abe2ade2e3b5bde2932af001507d6e6072ac4b3cda250e00ed7fbc0f8cad3ab6360cd423f53d5fe3626979aff1b773c9a9ed417b6660eac424b0f316f13e10781f30b680da8f558c9f98c24c7426ea7b79bdb0cf9e993d3f7b25e1c84a9eec1ccc6d6fae732b3267af24387f3b4d33eb32f7fd3c795364fe7a38f3aecb1b22d93f64faece5e0b470ea9badd1eaf94fa333e2dace1a62620cf77f79f038f6663afbfa236cc446a4606d47c97c3ed210432335e04d1d0f7f137ef8ec7ee3d23b89050d142c50d040bf312209fd42d8b1d793a45ba1bd1a236f0699be70987cb87f8208fcf45e0ac2ae6f720080521b37845a01785543e8dc02204de0f2c9d7f1854f2299fea6c3a4290adfa25f7ed4c98fc371eb2b896ca649b74c7b4522af07993ce39143b040b59922a9d2edaada4c31a80c8e24713a1c376f4b643347ba65722546772ec86b27c319f4093590548f4cdcabd96830ae5fed9ab7cab496255e3b2d1e6ce8911f85f4ffe6e1b83e2791669aea8d04135793ec8f5be0bba1fedcb5bfe4d0e02b3cbc2e4aa14c5010e298b888dd17b147ff0281d14f67823e006d0000000049454e44ae426082</data> </image> <image name="image24"> ! <data format="PNG" length="936">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000036f49444154388dad924168db561cc6bf040632b460430236e460c3068d4f516050971ddab053d8a06cec107a71137a5957d8667628668c90e5509252c69a43a85bcfe0f490a95a0fc6870dd965606584c90ed9a494aed825337271871492f21cbcc2b7839ca4e95a651bfbc3e3d35f3c7dfabdeffd41127b4b59d6a2ceaac82aaa70edaaa0a216e8ac0b2aaaa839abe2e3e7f71eb5f61ff23925595f725c45d5e83c2035dd206d4fc52659286ab475a796b9a98cfc63e3eb0bf964bd64b3f03dc94db2b26a920ec92ac936595937c96d923a69ebb67b7d211f3dd2786636133516ebae52ac903669ac9b649734eb75b24b56aa26d93e78afe906cdc57af948e34acebc965f2e506c92c63abd6a7b6258bdde222948f381d72a6a81959ce91b09d2d3738dfd4cbba4dd7648924208729bb46dafaf6fda9eda36e990e9cf67aef91a6b3983da8f864759ef118a9eeef5f6e193b04d161634df38faf5c72b484447a1372de018a0ff620100acdf1a400c70773a400468b92e3078a0e5fb45f85661b142a17b148645b24bb29725b77beabcd06f93f959c59f58fd597d8421406f5a183e06541f3680378046ab051c075cd7054240a7d3018ef71440f1d7e29a1f70ff704bbe7bbb7c07a7a27104fe00468762b01a402c12019e00a15008e80081400080a7f3371620ef8ce57c8d8b4f4bd3a57b2b5ba5fb55e075a0fac8427ca8473cd8230e009d3fbd0fac8d0636d62c34228d2d5fe352f9e656eb77f7bc5bdb82fed0c2e88938d07c81780708bc06581b40edbb2a622746313e323ee27b797b619f393d7976f242ca55d402d93d98dbbdb9ce2f299cbc90e2dc950ceb39c1fc5773e4e5280b97c2d9975d5e1fc9fd9f8c9d990a8e49a7bed818ac9e7d6f643cbad25c41229ac0ad1f6edf4b3c1bcbedbe89b5c4801cac35d5ecc58156343450039e3570e727e99bf76fb5cebf94f8df2c7322ec3aab695218749613e4e520331387c9fb7d737a45953bf844aa1581a73584de9907e4614c9ddc4dcebf1bc9ee6f927450b2c1bfe955d08f3afd7638697f2693ed0c292a749664f25290e9d31e39241bd4da3324358a9e6aed1906557f639248bd154ed6afc8643b4f8a0ab994a0980df2c393e16c9f74157cd5913b9fb2efa858a6e45032958865e3d329408aa1f5ed47f832eb1e9e8aff5a53722499fa20928d4f5c44e9eb0d1477a5ffc71800cec9a16c509292183e87c74f1277ff023f9eed747a940e850000000049454e44ae426082</data> </image> <image name="image25"> ! <data format="PNG" length="238">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000000b549444154388ded523112c22010bc3829aeb0484999529fe053c23ff213de770fb1592b104f2e88410bc79d611886bb65d95ba23f0c4044d0da832b367b0001b2bd85b44edea0589355c9bb0371652f432ff523d058ecbb178435000284353c144dc72979ee170fe75c9a855f7caad37d89582b896766b6bc2c297c9a913908ad981ad3637ac9ccfa8e5e8dd86715eff11882c1e0794ff19e54d4735cce7f3fcc4487eea417a2e831e1741eb66a7f0c2efbfad77103673234546433995b0000000049454e44ae426082</data> </image> <image name="image26"> ! <data format="PNG" length="772">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff61000002cb49444154388da59241685b051cc67f5985bd403ad39969864592b1880f5448d864d9f0d009b3b6536ae9107b50709e2aeaa00c19c5c31c1ec6da5b3d141ba1383ce89c0a35e2c622b42c4abb2561a3e9566213467c19b1a48fb6bcbccdb77e1ecaa6623df9bb7c87ff9f1fdfe1f349e2ffe09bec81fd401648b8b4e60cfaba6366672668ee3d1889b696fd06d1df6bf732a59f6fa67f9abf902af085ed517e6068bc0b9387a1d143a74e266754b774a928499263e99f141b725243b7bada39fa40307918ac23bc6d9d1f58bfffd73b2325339239255dcecd49534352765c9ab924ad2c4a5303ebc930ef6d34e8e180463a5c6b6ca874ea8839ad0ba34be34569b421f56725dd75a411534ac7a59361c969482b8e94ea70c30607b87a22f2a326fa15317825085b079e664cce65c93a27dd9d936e9d95ea93d2cc29696150ba36be5133774683fb38e753f6cc2aedfe40f39b5c317323fd5bf74b6682a7ba1e219c806a064271b89ddfc84a06c279089ae0b6f1fd07a99acf4a259d9d6f8dfaa9a52110856a1e824da8d810062aee5f1902dc1c3c6fc2ec3ccdcfddd596787d69dbb35bf2fb883db7857a0e824f42e93a6c8f41290fc1182c5c876d4b70b3060f1f822bb7c1b3992dacddf101be648843f1ddbcfec9abe66bec8d1a8481d232845c282fc39a0b9e0b18643b86d9bfbb8bdaa7bb707fb0ad1680aac3afb355befdf297a5b9fec86a87df6f04d81e87720976ee80adddf07882617b9ad39d31c69ccf882ecf93f9cecbfe6b9a668097f561f80f9d37a5b188e646ce4a96b43861c9391d54ef6244bd32357a1cc5831cf36db6efc13d4c0c7f1479839a4bb35ac435dab0d720bad6067b5ca8c0d75fb9b9be023d2d9b09ca2b14da6af68b89c7bc1d1e695a9f7806ec37f1076ed0ac784c5ff416fa0abcefad736dd30600c187d8d515e19da3edbc503678f4a0812f6dd35cae70f1e30a2917ae02f7fe53f037424000f001eb401d68de3ffe09964186023c404aab0000000049454e44ae426082</data> </image> <image name="image27"> ! <data format="PNG" length="902">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000034d49444154388da5d44f681c6518c7f16fc20a33b0857725c28e24b0aff4e02c1e66d7086ea0b01bf090ea49e9c94bf45a031e52443cd8103c840821d81c849425b078b0ad2db27a484846ac4d2535d9459a9d836567b121b390b033876567a00be3615263fe946cedeff230ef3c7cde779e17068ea5bed1aab4363a61d80ac3ed3fc3b055eb84f5e556b1bed14a1def7dae947fbc57ecfc1d9ec8eaf266b8fdebeef80be137bf5f2d76ea27f1fa722bdc5cdecdbf105e5a2a175bb5ce09bcb454b67b02eefdb05d5cfcb66c9cf66ef17af9f6f1b1ec6e75c267f5ff37fdb66b8f4ba4796dbe74a4f9da7cc9c828e93cc28f169e44c5a149b2abe5cf84f5a134a36369a10fe8e6ec4c84cfce948c8c1c31b36352a8e754f08197001ff4a4c46a5be24cb8f2b8064320dfd284449ad3538be359a19b72580812e0ba3ea88775adba4ed0958db3e05812cd630f21531afe9826b447a23862a46100d88384508f54b52d08daf7cf84fbcd87f7efd88f5c9ca64bfa3cc8610d92e0341d8883d374210ef68e83ebf92883206372aebea07f1a2ee8cf1c49bf8ca7a6166e7ce70912d0042dfeb46a87cf3ba0b405de4e802e24b9d76f1952d7e7e862864b992378188602a0ff93e9f71a7edb2f4cce7eedd51a0eb51d1b14a8350fab1f03a76d934c25b01f4c920e4c9c076b90538cad666076660e4fded7d7e701f43d5d989e28199667cd8d9ccfe5dd98476650a7d2a820e3928b177224522a5b2b9364550b1eaf4777e00199515cd3aa2294c2cb972bdebf1b1c9fcdfb97be4829c854809d57e09700c4683257cc183f8b91ae891b7348280a10000a7e3740951a6b2b547528bc3a6d79a7c2a7e5e695ccd58b86fc5255d721a980178050a2130ba01980c862afd8550485d73eb3bc9ee0fae7baa87531df7d0703c5870115f689c6d1f4237c1f40e5a715aa120a3dc100db5fe9c2dac7fc604c1a249d086d0410f3e1af0012078d41965b77ed3b3dc3009b13bab0ba981fbe8dc10505f6dd08773c882b10043024a8dd4dd0ff3cf09bdf589e1414aeff4695875af4f9a9035039688a838ddfdbe51dcfea47d1c92fbfe11a0c069093f0871dfdacbab0febbd6dbe59d96f2842e1afb981f0fbb86aa78f08a027b01b59d2466439dfadf30c0ec255df084dbd973e49d988b08129ed565feca0debea3f02edac20119e561d0000000049454e44ae426082</data> </image> </images> --- 996,1081 ---- <images> <image name="image0"> ! <data format="PNG" length="2101">89504e470d0a1a0a0000000d4948445200000020000000200806000000737a7af4000007fc4944415458859d97616c53d715c77f29c9f43c81f62c852d6f4d55bf296c714405b6d844dc55533cb59b522651b34c6a583e90b5fd00eb872af0a12b9d5491b49a806954a42d5bd2aa1bf10746a2adc4661a8b530de2b0806d446a9b92c8cfa2a9634114bb21b29f82cbd987674a0249603bd2d55fe7de27dd73ffff73cf3daf4244a8a8a8602593375099e46fd4f1a3e824b81d401a7040345df627813a084f82a7aeec3b209c06cfa2efbff227f90207dd150779a3e2410144dab8e456d894ab03fb5a2802361e024b60ab5c01a72094065791dfae1a80b4f11c750c50033c771cd49d50b562ac0f6f671a6022091ff3f9230ff8d495c8024f3782ea852a4824c35084c4f8f2181e0dacba6e4c84e1e904c54a001e454456dc7de4790ec81144121d2222220b71918288a444e49ac85070c49a4f4919474466eff1ef5d5f106b5c75ca500bb22a039e4a484c02ce762886a0aa81d0c7218c33d0f99710e10b1ea21742a0c3f44408740fd1c9be25be85777d63b2df92310d5e6075094ad05007240760c64bdffb5083978406fb7fe34551c09e6f2431da8ba63a61b41777b56b91df8d56a99238b507ad5484e14ef41a1d6ef6435d3300ab27e1ebed6f076a9c2fbbd5bd844a519abfef666f6c0f4962189306d19f4dd3f94180eeb79f8562186c1ea627fad036ec84cf0e816ac0a40975ca57387d6a00ad51812b79f820bf3c03f24fd92509b9d4efea78d9fbd45e82f67e7026e99d39446f6b37bea77cd0047d33bd786bbd703a00360f1403680e0f4cec876addbafff5cd4b50732a70250d8e3ca15b8b24888c6554b926af0c8552691cbc1f9e313619f5365e18ff15de2d6e5c1b5de49fca633f6b675f691fd95296eed14eb26b93044e7be0669fc5c0f9fde0c8413a08f5dc87d369d3f2a7c05b550e2012953fb81d9a419adf7bb7ea8f774ff56228619c9509fa5a7b0913c65ff2d335dc45be2e0f3350b3b5866c65963d2d6efcd9204cba20d685a61a703e0daa1bce67cb78d7d7eaaccdd908dc2ae7003790c44c8e06a71dcf1f3d0ced1a226926d1d669741a9d8caaa3c43e89a16c5450a7541445c1366c27d212255f82c36f1551153ffbdf8c323d9a466b74806182aedc87d36706d036672d59debc23c1154e3554db091b617c8d3efc793fc63a831de33b18500748a69338b738a9b9584387d94167fe2889e7a318e7c268eba1b1c986860fc66d68f5cdf019a02f8f5abd0259a01e42002242212acf0c06ad6ae1fad025ae599728638aa8b3aa382e3bc479d529bb431d522888ccce8ac89c48fcc851918cc8485bbb8888b4b69d9478d70189045d22996649859b96c7902ab280480291edc89d4a5859b82cd7242c929acb88e3df0ee998eb90a650938c642212cfc8dd8ab62012393124f2515ca4a555445124726244522191f6b61e91449348b45964f6e0f298a9114921225600776ec197fe0be1ae9c01cabc42744b82a6a966424d219c6bdd3468601845d0a168829ef332fdd28fe174104351706ff690538b9866337d6775a883e9f47019834b7c236d828e25cba24a28ce4a7d60c08c7ea161c78e8d679d5e30c0be0e98005db7c10db02930a080762245608b07bd2b000ab85d36f48d064a7e3f4c8156df54c6e625bebe51811bc0638b72a06c8fc48fc85b3ddd111111c95cb7589f9d13918cc8e04729918c48fc6a41321f8aa4ae955549cd8a144446a205919488afe5b814c67c1209bb44328df7612aaa58f4cf2d9500e0b67fa6ff8346cd4df82c68ebad93dbd741621ebc0e1de6a1a1dac6f413a03f0618a0eb769807ddb441095ab7f8387cba1177632b98f6fb50dfa8c22d60dd520900e83af0f3c981f1805fbd00b91c500b813306f651c8ae0536803193c3ed82682c072a1806b01e4246021c60d666497eb293446cd47a058d601987410763ca842ac88ddf11ff9e7e60a87bf627afbd2a22d7c57adb17bde791b1b25fbe8ac74f88c85591c1a048664c6464cc9a6f6d3b29f18141918443646177199d168a6a49700219dcc6e7cb35246b065f298c1ffc9dd54cdcd15a16ac4046c6aca822970b323b2612bf6aad65ae59f3831fa5247258a47d578fc81892eae37e7c1d19dc861cd8ca2bcb3dc715ed2f1e7fa9b9cef7de8ee76cb001c8017660188ab510ba029e5ab09b564d8fa6c1fd045676cf43df45306339cce40ef6304c08abf9a0045442a0c4a7f6198e3d799ec04a2d5955fbae93f9f89132031991544a24d3271289164444249e2894192a4821613122223214ca482125d2fee249f16dcf5c0136014ee0bb8bc606e071a07aa58ea8e4a9f1bc73f862bf95ed26e895606c00b7c3060634386d9003fd311bfeb3e0aeb611380535a6c6ebef82a7da8b591af8142894b999be675c07f22b36a58d3fecf8666b4b467a8ec5979c5816c43a71b420b260e540ea98958007baac3ad0da92f9dcb565f70b582fffb780afad70d0957bc2d1738767cc5b41bf9ad7e1b3f2896f0255104c83bbd646e05fa0cd43ff7c14e3748ed8a5be9b8d39e721ff5fbffd4cece23b43c00c3057567f595bb527f46d8bff005bec3f3dafee645a81865a30f2a066c1580bba097bdfedc7cc7bc8dfecf3472ff9bbb3d9d87560be3c4ce04b60e5de7fb5ff02604dcfbeccb9d75eb5d81f095b57b1a75764e89845f7d1eda98baecdadbf00be073c0a7c038bf295fff71659e503d66f0727827f56aa9a9f0c9d55f06eb673e84f5162e735cc5bc14c6e2679e8d7e77ef90fac44bb59c605e0f6c36c0e3c9001802a5fcbf16b834744dadb4e4acfbecc5cf34f0fbe87d5d57d07580f7c1d58c3439efa7f0da0c2b73df5a6afe5b8f8b6c5ffae563b3d58f758c37a52aafeaf8dcbf65f5e7e8343b66c1a480000000049454e44ae426082</data> </image> <image name="image1"> ! <data format="PNG" length="636">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000024349444154388da594c16bd3501cc7bf1307cd61b0de8c206c87c25698e04eabe81fe04e0311c1de36f1d0e1cd8b7851769cde1a4ff3304c1db8b607271e0aab50e83a06e960a31d6cd00c0f090c49a54a23adf8f590bc36ddd2aead5f08dffc5e5ebef9e4e5970792104732bd4d9e91c9345def5d7fce6837bcf77b8fce0183acd7e9ab7acdf14ac5f1fc5e8934c864460b5d1a9c4cfb87b6e486d30d67b9457e73686221cbf21093d48a14e4733d88b72f4116e9ae9fb99e73ced54f5a7468622141dce106a9aeab533ec4fd85b6e4acf95fade894f177fcce632e90c41578747f0eb06df425fb278031a0bc991a993d04ca87c03280442101009dc1a9dd2c24a98f541d9000e004082f4c03d34b08cf00891fafaf46e55b13003042b27d8309560376331894467b914a5b4bc03d19f8350efb741fd2dd71e89bb3987ca0c37c9b35e5d8ce75ff35ae9d73f1414537ec954896c8da8ae3e59833e92046a6f32f49fa1103c1a04b36d6f66ad51937bfa6204f15606ee9909f5c039a61607419d09f01ef77fe94f13b173ed537fcfbb8718e54788da495271babee3cd7b9e65e77eb8ff376f73e6e74ba18b7be192449435924f982acbb61d60af93cd24c3e9d7fc53b080dd6c7e26139d5798de318498d3c58245971c2bf443e70e03e16bd329185bdff180829b00b6f809900aa47361038a27982db0086dc2bbcb23432f38824195754b2c887fc9fbd42a86e54da8542aaebeac55f3ab58bfefe3c8f2479b275ae208168248a0b4b310c7187ba13f7b95774514fe2b8a2920ab9aaac91cae0b520fe07ee60f22d40ab6eb30000000049454e44ae426082</data> </image> <image name="image2"> ! <data format="PNG" length="963">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000038a49444154388db59551685b6514c77f2d79c8058b11143a5048a1425b26ac6583b654b065c2587da8131fbae1c352fb604470a47918dd4049f330671e142b4c1b46a5f5a1ea364bdc6498b4744d90625ae848502ce928a5956ee486566e6289fc7db8b7b529d98bb83f5cbefb7df77cff73eeff9cf37d35927812a87d22acff05f984bc81cbe9192b21331094e7ff210debfdab9f644c49cae52cf983baf95863498f7df6100aeb9895d0527c4e36b6ec612c2ae5a6d45795d87b3ea78d71c91fcdcb1f957cd7f2f28d4aee53195312a12be90f34296d6cd86456de1ef7e6fe60d2f4bd534592ee69296d3991389b62cea6e12baac47665c472ecbafb933739266f0571473027494a6e1f20dd9226a67295a4bb8eef4311e7f352282275f7c72b24a989dd907a4f0106fc701f7add801b78a18a6e3b401df010780edefd08865e86911948dce3c1833f52e3d00965a0f5c28188b7a5f4b2a5aad8add4d8fb6646fe5129346d495b5268cad2f0b8b603516b8d2699b5ee8e06168bd0590793eb50583118f91a8aab70e92b307f87a12fc0fc15863e87c20a349ccdb2186ee19906e8f41af47c033d470d267fa12e72d5d885c46c4deb7b392d7eda406a0722d7c1e3da243a7884c40af434c3774bf0462b446760a01d467e2ae27ec5a0f4332cad825906c305e67a91a53bc6dfa5420a5c9d6f333129c9f97b775fc67e593b248393a850c24edad9a8144f49ad17a589a8e46997f0caa43ebd4ca3fea2515e9a076d8d43772d9dfe70df87628ed613cbb6aebea874262275042d350f4af57d1bf29c94684a8b468967d3bf51af2c8df125805aba1c8d5d06673ac000523bd0fb92c1c73370ae092ecf42e004944ac00903b30485c2110a05e0a936200bae3670e1819eef016a8bb359da0c38f76596815721f1d04ee4e87d18380a977e048e4378068a65d8bc6352d884129bb8dd40390bb44079115c3c4d39710b80b16bd2f0b4949e3bd0598ea6130bf6da67b7252b27f92252725a3a7d418a4f4adde7a5d8a8d4da2779bbf4086f7c75bfe6ebdfcaa8e3a2145b3854bf873a2d97b3bf6796ed85646a43da95e27773525ef205d3c2abebff1247a4fafe4cf5a6d8f3b57736385d9e5976e673b64decb634f69ac4f3074fbaf6a4fca3d5792529bf5d19717a612fd28cb4257d7b232dad4934c62beeb81abaa4e617c173129887403b84e7c1dd0ea5f92c81e32d84e7ed0416efa5a0dc695707502a2570d343e14f283de216eb35afef13eb095da6ff00813f87c58b538a... [truncated message content] | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-10-31 21:34:04
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv15654 Modified Files: qcalc.q Log Message: bugfix: undo/redo now properly updates the edited status Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.53 retrieving revision 1.54 diff -C2 -d -r1.53 -r1.54 *** qcalc.q 31 Oct 2007 21:04:22 -0000 1.53 --- qcalc.q 31 Oct 2007 21:33:58 -0000 1.54 *************** *** 1088,1091 **** --- 1088,1092 ---- "// qcalc %s, created %s// %s\n// %s\n// %s\n%s\n%s" (VERSION,ctime time,str L,str HT,str WD,MAGIC2,SCRIPT) || + mark_save || statusmsg "Done" where KEYS = keys (get CELLS), *************** *** 1496,1506 **** /* Undo/redo. **************************************************************/ mark_undo L = //printf "*** mark undo: %s\n" (str L) || ! UNDO_LIST := [L] || REDO_LIST := [] where L = zip (map (flip (flip sub 0) 1) L) (map (!2) L); save_undo L = //printf "*** save undo: %s\n" (str L) || ! UNDO_LIST := [L|get UNDO_LIST] || ! REDO_LIST := [] if not null L where L = undo_cellvals L; --- 1497,1511 ---- /* Undo/redo. **************************************************************/ + def LAST_SAVE = ref 0; + + mark_save = LAST_SAVE := #get UNDO_LIST; + mark_undo L = //printf "*** mark undo: %s\n" (str L) || ! LAST_SAVE := 1 || UNDO_LIST := [L] || REDO_LIST := [] where L = zip (map (flip (flip sub 0) 1) L) (map (!2) L); save_undo L = //printf "*** save undo: %s\n" (str L) || ! if #get UNDO_LIST < get LAST_SAVE then LAST_SAVE := 0 || ! UNDO_LIST := [L|get UNDO_LIST] || REDO_LIST := [] if not null L where L = undo_cellvals L; *************** *** 1514,1520 **** undo = //printf "*** undo: %s\n" (str W) || ! EDITED := not null UL || ! update_title || process_sel W || ! UNDO_LIST := UL || REDO_LIST := [L|get REDO_LIST] where D = foldl (foldl insert) emptyhdict (reverse UL), W = map (undo_cell D.fst) L --- 1519,1525 ---- undo = //printf "*** undo: %s\n" (str W) || ! process_sel W || ! UNDO_LIST := UL || REDO_LIST := [L|get REDO_LIST] || ! EDITED := (#UL<>get LAST_SAVE) || update_title where D = foldl (foldl insert) emptyhdict (reverse UL), W = map (undo_cell D.fst) L *************** *** 1527,1534 **** redo = //printf "*** redo: %s\n" (str W) || ! EDITED := true || ! update_title || process_sel W || ! UNDO_LIST := [L|get UNDO_LIST] || REDO_LIST := RL ! where [L|RL] = get REDO_LIST, (KEYS,VALS) = unzip L, W = zipwith append KEYS VALS; --- 1532,1539 ---- redo = //printf "*** redo: %s\n" (str W) || ! process_sel W || ! UNDO_LIST := [L|UL] || REDO_LIST := RL || ! EDITED := (#UL+1<>get LAST_SAVE) || update_title ! where [L|RL] = get REDO_LIST, UL = get UNDO_LIST, (KEYS,VALS) = unzip L, W = zipwith append KEYS VALS; | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-10-31 21:04:26
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv23799 Modified Files: qcalc.q Log Message: bugfix: undo action not correctly registered after formula edits Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.52 retrieving revision 1.53 diff -C2 -d -r1.52 -r1.53 *** qcalc.q 31 Oct 2007 09:19:24 -0000 1.52 --- qcalc.q 31 Oct 2007 21:04:22 -0000 1.53 *************** *** 605,611 **** finish_edit ACCEPT (I,J) ! = if ACCEPT then save_undo (I,J) || ! EDITED := get EDITED or else ACCEPT || update_title || ! process (I,J) S || updatemsg (I,J) || check_interp || LAST_EDIT := () where S = qt TABLE "text" (I,J); --- 605,612 ---- finish_edit ACCEPT (I,J) ! = EDITED := get EDITED or else ACCEPT || update_title || ! process (I,J) S || ! if ACCEPT then save_undo (I,J) || ! updatemsg (I,J) || LAST_EDIT := () where S = qt TABLE "text" (I,J); | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-10-31 09:19:28
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv28429 Modified Files: qcalc.q Log Message: default increment for the filling operation is now 0, to closer resemble the fill handle thingy of other spreadsheets Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.51 retrieving revision 1.52 diff -C2 -d -r1.51 -r1.52 *** qcalc.q 31 Oct 2007 08:16:14 -0000 1.51 --- qcalc.q 31 Oct 2007 09:19:24 -0000 1.52 *************** *** 903,909 **** where X:Num = fillnum ((SEL!0)!0), X1 = fillnum ((SEL!1)!0), ! X1 = if isnum X1 then X1 else X+1, X2 = fillnum ((SEL!0)!1), ! X2 = if isnum X2 then X2 else X+1; = map (map (fill_copy S)) SEL otherwise; // just copy the value verbatim --- 903,909 ---- where X:Num = fillnum ((SEL!0)!0), X1 = fillnum ((SEL!1)!0), ! X1 = if isnum X1 then X1 else X, X2 = fillnum ((SEL!0)!1), ! X2 = if isnum X2 then X2 else X; = map (map (fill_copy S)) SEL otherwise; // just copy the value verbatim | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-10-31 09:17:48
      
     | 
| Update of /cvsroot/q-lang/qcalc/doc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv27995 Modified Files: qcalc.xml Log Message: update documentation Index: qcalc.xml =================================================================== RCS file: /cvsroot/q-lang/qcalc/doc/qcalc.xml,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** qcalc.xml 31 Oct 2007 08:33:40 -0000 1.3 --- qcalc.xml 31 Oct 2007 09:17:43 -0000 1.4 *************** *** 109,116 **** </para> <para> ! There's also a special <guimenuitem>Fill</guimenuitem> operation which basically works like dragging the little "hook" in other spreadsheets to copy a value or formula to adjacent cells. To use this, select the desired target range, with the value to be copied in the "principal" (upper-left) selected cell, and then just push the <guibutton>Fill</guibutton> button (the one with the magic wand symbol on it), or press <keycap>Ctrl-L</keycap>. This will copy the formula in the principal cell to the adjacent cells, adjusting it across the range as usual. The same operation also allows you to fill a range of cells with arithmetic sequences. For this purpose, the principal cell value is the starting value of the sequence, and the cells immediately below and to the right of the principal cell (more precisely, the differences between these values and the principal cell value) determine the increment in the vertical and horizontal direction, respectively. If one or both of the adjacent cells are empty then the corresponding increment defaults to 1. Thus, when the operation has finished, each row or column will be an arithmetic sequence for the indicated horizontal or vertical increment, respectively. (This sounds more complicated than it actually is. Just try it out and see what happens.) </para> <para> ! Note that drag and drop of selected cells isn't currently supported, but cut/copy/paste works just as well for most purposes. </para> <para> --- 109,116 ---- </para> <para> ! There's also a special <guimenuitem>Fill</guimenuitem> operation which basically works like dragging the little fill handle in other spreadsheets to copy a value or formula to adjacent cells. In fact, this operation is even more flexible than the fill handle, since it allows you to fill <emphasis>both</emphasis> rows and columns in a single step. To use this, select the desired target range, with the value to be copied in the "principal" (upper-left) cell of the selected range, and then just push the <guibutton>Fill</guibutton> button (the one with the magic wand symbol on it), or press <keycap>Ctrl-L</keycap>. This will copy the formula in the principal cell to the adjacent cells, adjusting it across the range as usual. The same operation also allows you to fill a range of cells with arithmetic sequences. For this purpose, the principal cell value is the starting value of the sequence, and the cells immediately below and to the right of the principal cell (more precisely, the differences between these values and the principal cell value) determine the increment in the vertical and horizontal direction, respectively. If one or both of the adjacent cells are empty or non-numeric then the corresponding increment defaults to 0 (meaning that the principal value will just be copied). Thus, when the operation has finished, each row or column will be an arithmetic sequence for the indicated horizontal or vertical increment, respectively. (This sounds more complicated than it actually is. Just try it out and see what happens.) </para> <para> ! Note that neither drag and drop of selected cells nor the customary fill handle are currently supported in QCalc, but cut/copy/paste and the fill operation described above work just as well or even better for most purposes. </para> <para> | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-10-31 08:33:46
      
     | 
| Update of /cvsroot/q-lang/qcalc/doc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv23399 Modified Files: qcalc.xml Log Message: update documentation Index: qcalc.xml =================================================================== RCS file: /cvsroot/q-lang/qcalc/doc/qcalc.xml,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** qcalc.xml 30 Oct 2007 19:58:20 -0000 1.2 --- qcalc.xml 31 Oct 2007 08:33:40 -0000 1.3 *************** *** 109,113 **** </para> <para> ! There's also a special <guimenuitem>Fill</guimenuitem> operation which basically works like dragging the little "hook" in other spreadsheets to copy a value or formula to adjacent cells. To use this, select the range (a sequence of cells in either a single row or column) that you want, with the value to be copied in the topmost or leftmost selected cell, and then just push the <guibutton>Fill</guibutton> button (the one with the magic wand symbol on it), or press <keycap>Ctrl-L</keycap>. This will copy the formula in the principal cell to the adjacent cells, adjusting it across the range as usual. The same operation also allows you to fill a series of cells with an arithmetic sequence. For this purpose, the topmost/leftmost one or two cell values determine the first member(s) of the sequence. </para> <para> --- 109,113 ---- </para> <para> ! There's also a special <guimenuitem>Fill</guimenuitem> operation which basically works like dragging the little "hook" in other spreadsheets to copy a value or formula to adjacent cells. To use this, select the desired target range, with the value to be copied in the "principal" (upper-left) selected cell, and then just push the <guibutton>Fill</guibutton> button (the one with the magic wand symbol on it), or press <keycap>Ctrl-L</keycap>. This will copy the formula in the principal cell to the adjacent cells, adjusting it across the range as usual. The same operation also allows you to fill a range of cells with arithmetic sequences. For this purpose, the principal cell value is the starting value of the sequence, and the cells immediately below and to the right of the principal cell (more precisely, the differences between these values and the principal cell value) determine the increment in the vertical and horizontal direction, respectively. If one or both of the adjacent cells are empty then the corresponding increment defaults to 1. Thus, when the operation has finished, each row or column will be an arithmetic sequence for the indicated horizontal or vertical increment, respectively. (This sounds more complicated than it actually is. Just try it out and see what happens.) </para> <para> | 
| 
      
      
      From: Albert G. <ag...@us...> - 2007-10-31 08:16:46
      
     | 
| Update of /cvsroot/q-lang/qcalc In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv17335 Modified Files: qcalc.q Log Message: make fill work with arbitrary ranges Index: qcalc.q =================================================================== RCS file: /cvsroot/q-lang/qcalc/qcalc.q,v retrieving revision 1.50 retrieving revision 1.51 diff -C2 -d -r1.50 -r1.51 *** qcalc.q 31 Oct 2007 06:15:43 -0000 1.50 --- qcalc.q 31 Oct 2007 08:16:14 -0000 1.51 *************** *** 880,895 **** fill _ _ _ if global: = EDITED := true || update_title || ! process_sel $ fill_vals COL VALS || save_undo CELLS || updatemsg (qt TABLE "currentRow" (), qt TABLE "currentColumn" ()) ! if ROW or else COL ! where ROW = all ((=I).fst) VALS, ! COL = all ((=J).snd) VALS ! if not null (tl VALS) where SEL = check_editing || selection, ! VALS = cat $ sel_cellvals SEL, ! [(I,J,_)|_] = VALS, ! CELLS = map (flip (flip sub 0) 1) VALS if qt TABW "currentPageIndex" () = 0; --- 880,892 ---- fill _ _ _ if global: = EDITED := true || update_title || ! process_sel $ tl $ cat $ fill_vals VALS || save_undo CELLS || updatemsg (qt TABLE "currentRow" (), qt TABLE "currentColumn" ()) ! if not null VALS and then not null (hd VALS) and then ! (not null (tl VALS) or else not null (tl (hd VALS))) where SEL = check_editing || selection, ! VALS = sel_cellvals SEL, ! CELLS = map (flip (flip sub 0) 1) $ cat VALS if qt TABW "currentPageIndex" () = 0; *************** *** 898,921 **** checknum _ = false otherwise; ! fill_vals COL [(I,J,S)|SEL] ! = if COL then fill_col I S SEL else fill_row J S SEL where ("=",S) = (hd S,trim (tl S)), S = sprintf "= %s" S; ! if checknum 'X where 'X = valq S: ! = fill_seq X (X1-X) SEL ! if checknum 'X1 ! where [(I1,J1,S1)|_] = SEL, 'X1 = valq S1; ! = fill_seq X 1 SEL otherwise; ! otherwise: // just copy the value verbatim ! = map (fill_copy S) SEL; ! fill_col I0 S SEL ! = zipwith fill_copy [ translate (I,0) S : I in [1..#SEL] ] SEL; ! fill_row J0 S SEL ! = zipwith fill_copy [ translate (0,J) S : J in [1..#SEL] ] SEL; ! fill_seq X DX SEL ! = zipwith fill_copy [ str (X+I*DX) : I in [1..#SEL] ] SEL; fill_copy S (I,J,_) --- 895,924 ---- checknum _ = false otherwise; ! fill_vals SEL ! where [[(I,J,S)|_]|_] = SEL: ! = fill_val S SEL where ("=",S) = (hd S,trim (tl S)), S = sprintf "= %s" S; ! = fill_seq X (X1-X,X2-X) SEL ! where X:Num = fillnum ((SEL!0)!0), ! X1 = fillnum ((SEL!1)!0), ! X1 = if isnum X1 then X1 else X+1, ! X2 = fillnum ((SEL!0)!1), ! X2 = if isnum X2 then X2 else X+1; ! = map (map (fill_copy S)) SEL ! otherwise; // just copy the value verbatim ! fillnum (I,J,S) = X if checknum 'X where 'X = valq S; ! fill_val S SEL = zipwith (zipwith fill_copy) ! [ [ translate (I,J) S : J in [0..M-1] ] : I in [0..N-1] ] ! SEL ! where N = #SEL, M = #hd SEL; ! fill_seq X (DX1,DX2) SEL ! = zipwith (zipwith fill_copy) ! [ [ str (X+I*DX1+J*DX2) : J in [0..M-1] ] : I in [0..N-1] ] ! SEL ! where N = #SEL, M = #hd SEL; fill_copy S (I,J,_) |