Overview
Comment: | Unify the 'unique suffix' handling used by the client packages. Tighten up temporary directory handling, deleting them when possible. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
0bff0fc24a1d61fb3913ee30ae5ab237 |
User & Date: | mistachkin on 2016-08-21 03:10:21 |
Other Links: | manifest | tags |
Context
2016-08-21
| ||
03:25 | Set the HTTP redirect limit to 20, per the standard default used by Mozilla. check-in: 3bd1e45c11 user: mistachkin tags: trunk | |
03:10 | Unify the 'unique suffix' handling used by the client packages. Tighten up temporary directory handling, deleting them when possible. check-in: 0bff0fc24a user: mistachkin tags: trunk | |
2016-08-19
| ||
23:27 | Add support for checking the installed version of a package prior to downloading it. Also, finish removing the fix applied in check-in [345ffb1dd5] (i.e. removal of the 'm' query parameter). check-in: 8d39ddb985 user: mistachkin tags: trunk | |
Changes
Modified client/1.0/pkgd.eagle from [8f95de070a] to [db99d690a9].
︙ | ︙ | |||
81 82 83 84 85 86 87 | if {![info exists temporaryRootDirectory]} then { set temporaryRootDirectory \ [::PackageRepository::getFileTempDirectory PKGD_TEMP] } } | < < < < < < < < < < | 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | if {![info exists temporaryRootDirectory]} then { set temporaryRootDirectory \ [::PackageRepository::getFileTempDirectory PKGD_TEMP] } } # # NOTE: This procedure returns the root directory where any packages that # are downloaded should be saved to permanent storage for subsequent # use. There are no arguments. # proc getPersistentRootDirectory {} { # |
︙ | ︙ | |||
259 260 261 262 263 264 265 | variable clientDirectory variable temporaryRootDirectory verifyLanguageAndVersion $language $version isClient set temporaryDirectory [file join \ $temporaryRootDirectory [appendArgs \ | | | | < < < | > > | 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 | variable clientDirectory variable temporaryRootDirectory verifyLanguageAndVersion $language $version isClient set temporaryDirectory [file join \ $temporaryRootDirectory [appendArgs \ pkgd_ver_ [::PackageRepository::getUniqueSuffix]]] if {$isClient} then { set persistentDirectory $clientDirectory } else { set persistentDirectory $persistentRootDirectory } set fileName [file join $packageName VERSION] set downloadFileName [file join $temporaryDirectory $fileName] file mkdir [file dirname $downloadFileName] downloadOneFile $language $version $fileName $downloadFileName $usePgp if {$usePgp} then { downloadOneFile $language $version [appendArgs $fileName .asc] \ [appendArgs $downloadFileName .asc] $usePgp } set localFileName [file join $persistentDirectory $fileName] set compare [package vcompare \ [string trim [readFile $downloadFileName]] \ [string trim [readFile $localFileName]]] file delete -force -- $temporaryDirectory return [expr {$compare > 0}] } # # NOTE: This procedure downloads a single file from the package file server, # writing its contents to the specified local file name. It can also # verify the OpenPGP signatures. When an OpenPGP signature file is # downloaded, this procedure assumes the corresponding data file was |
︙ | ︙ | |||
374 375 376 377 378 379 380 | variable persistentRootDirectory variable temporaryRootDirectory verifyLanguageAndVersion $language $version isClient set temporaryDirectory [file join \ $temporaryRootDirectory [appendArgs \ | | | 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 | variable persistentRootDirectory variable temporaryRootDirectory verifyLanguageAndVersion $language $version isClient set temporaryDirectory [file join \ $temporaryRootDirectory [appendArgs \ pkgd_lib_ [::PackageRepository::getUniqueSuffix]]] if {$isClient} then { set persistentDirectory $clientDirectory } else { set persistentDirectory $persistentRootDirectory } |
︙ | ︙ | |||
466 467 468 469 470 471 472 473 474 475 476 477 478 479 | set downloadDirectories [lsort -unique $downloadDirectories] if {$useAutoPath} then { foreach downloadDirectory $downloadDirectories { addToAutoPath $language $downloadDirectory } } return $downloadDirectories } # # NOTE: This package requires the package repository client package. # | > > > > | 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 | set downloadDirectories [lsort -unique $downloadDirectories] if {$useAutoPath} then { foreach downloadDirectory $downloadDirectories { addToAutoPath $language $downloadDirectory } } if {$persistent} then { file delete -force -- $temporaryDirectory } return $downloadDirectories } # # NOTE: This package requires the package repository client package. # |
︙ | ︙ |
Modified client/1.0/pkgd.eagle.asc from [624f566b09] to [0eef2aaee4].
1 2 3 4 | -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository | | | | | | | | | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository iQIcBAABCAAGBQJXuRlfAAoJEFAslq9JXcLZUUMQAJruUtWluasZooy6kiRLl/St oiTzswqOWI+QaiOV0YHKAznow8fohJwoEHxaoRMnZJP9ZyWR2kDrWptIzh3QXJzD GwlEjobjE8mi69MDMSvizBFHPPHy60S5CgcQ2YxqnxGizFVAIBj7br54wAaCfg5M TAf1i9lrpKAm0FtACMIt+6Lq6CSyRmvGSzNyVArDodrkOUIGAVy2bfvpqnFJDLkF yK1LuXmTStylQh2miwo66W2h4juPo/GihlFBRa7SHcKXm5UtlotaGCmOUcuuuAyn eCP2plIoia050muOwO3STO4iQ99XiLecH1jEdarg0wyT11aex0wYI2DPAF9Y3SdP nOpm+Bap03tMuZeQf7f1eddy0Rmc4JaihfiQnuy+xKJXkCKS1lyj2+UloxrIekFs 2NKDnpGwjc904ZBG/xvIVEA1QEmdCeMEf4hdrrcU3omIgpMGc6xFMa6HHEo2N0NI /6m7c03UCLHVVBFTm/ma4AWwXtdIAJgSxzquzCIjX4GL+J6c+uLKKnQdFOGIl7NN Efwpl7hFGAS7b68XduIRc+3KLQf3NBdaCwVMrWMdmhg/fpg/nelLLnyjRcnA+g3P 14fVKqadbATQW3yFenXA0nlKEoUiZyDxpsFkuwa5wTxiNtohSnvHF+NpqPRJ/8Nc Jv9HII6dHVlnfxmb3W8N =r9zM -----END PGP SIGNATURE----- |
Modified client/1.0/pkgd.eagle.harpy from [8aaba801f4] to [048cb2694e].
︙ | ︙ | |||
17 18 19 20 21 22 23 | THE ASSOCIATED SOFTWARE MAY NOT WORK PROPERLY IF THIS FILE IS ALTERED. --> <Certificate xmlns="https://eagle.to/2011/harpy" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Protocol>None</Protocol> <Vendor>Mistachkin Systems</Vendor> | | | | | | | | | | | | | | | | | | | | | | 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | THE ASSOCIATED SOFTWARE MAY NOT WORK PROPERLY IF THIS FILE IS ALTERED. --> <Certificate xmlns="https://eagle.to/2011/harpy" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Protocol>None</Protocol> <Vendor>Mistachkin Systems</Vendor> <Id>5f8e7a47-5763-42b9-9cad-ba43bb3fdc2c</Id> <HashAlgorithm>SHA512</HashAlgorithm> <EntityType>Script</EntityType> <TimeStamp>2016-08-21T03:00:40.7227031Z</TimeStamp> <Duration>-1.00:00:00</Duration> <Key>0x2c322765603b5278</Key> <Signature> m+B/VfcaYJZ8O5W28u+0fyell7eNN3CRDlgFDwfqt7IswSfLaWlZsmQ0RohZM/Q2bfpwkxOlwRlp w9+/8oTkiwnj9gI0ypNWarnog/EMmHkjKr1zbMcJf0MNIrL3TsEcjv75Az2grXhphFpe5vQV2cGY yIZ1mNtZ2q9f0vWBUp2RJi3aDJcjfs7DHtecQYkqXmRNOGyKGzCuFaJlB6oAh3qHDkSBK6mLMTvy bvj6TKjh/vLlWaBcW+Uzyhm8U6/HgJxYVpsgfq3109w2goDC1liMdaAuJ3Dwox5QAHAyiWNKLx1x ymXfti38V6n1F5m7q1BYmOLrz9G6JvVWWUBaDCKaCeiy19sL0fDBCh8hlVrwfJ03B80Xoajtbyds Oh8395YnOWygg200ygPSPfQncnLdWomxxZ+1p+8aa5lwIyWG+pBQsf7kPDPyDy9HDglJmN2VT//b ISTQgwTq7WIw3nzc/Vc88xwc42EEuZoPoSF7br9DdoG08ek8KzS9Li4UBeJWJzR/zEY0jFLnQjlc 05ab/83Ic2ilen+KyZ1ZDGlPixvCAWo9uTdypqQdk87L9Jbo1C32TXqdEfGuWFmT+r7UuTwo3ShG 4mlXsvDKgczwheZHvYNow0DatLXCM+uabZCXTG2YdIAqIdWH9UcdrwIvU6sdN3NVO022AeP9ITPP trp+tnVumy/ls8TJD5R6f9AAgXJY51uSjghTaR+4wiNUGhGJ0hUEGRI5hs3OqtUfs06URy2MaTEv 5/MsMjCkJS5SwwdPIxHRj2JGXLv7WfwntrE85RncbfP56oSc5T/+4zcOfyeZDKZNm5C1pW74UO5X C9Oi4Ia0F/Qh74URUKliaomHTYSCEORhBJG+WLirwA3TlztdBuOrzq2Kga8GV21pCJLWMN+f2gEW MYmA4bBQEgu1aZ1k6Av6A9gtr+aN5wQHijZNXwyguLJPnv5ti4YZIFimUWaK7WzlCmqOypV/Hs2+ 2FzPvD0Cw/yax38k3vuJEnet4L0zIKCDRQGPIoI4ZFD7bYZkyVPJN6kuayw88s2TEmxJBHIflSjk CHbenN8JLwPlj9wJwnP2BocOwN4trfbBigmyLteXjYpDGbXDm95kyGj6mfJPkY2OafIb2P8gKPkN uUj8+nVimT263a8pfGJD16x576/qKcdUwCSWPKkAYEH4RFYCxo0aYHMqivyD3nBI3PGJdU6vo9mv 965IkgyHN/JZCDLmXn0zxfEOB8eB6C6FwYyg1XYPlGCSQLwBF25rp/M+5JN1K1cdOw5ynPdUGlae cih1itW/cYD4h1wn7IcqjME8HNvjLyk93H+VmKfrYs+XBW4gOGYxOYytI0SlkyBJ4R9i/s6raw== </Signature> </Certificate> |
Modified client/1.0/pkgd.eagle.harpy.asc from [06d6b4e54d] to [2ecc791f14].
1 2 3 4 | -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository | | | | | | | | | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository iQIcBAABCAAGBQJXuRliAAoJEFAslq9JXcLZt+8QALJL5AcVSUqcYaR2TylGfXLo q2VOYml5klSDCuhE633szW8qFI/uxG8+2mHjoq/Ho0lfuOsfuzLJbQIb9miuLc/+ 93G9CjvxSQYc1cUyEGMbPpccucRnD8MfJ3un/Tkb/TgDkeuebMXHF4NfcbY9eccm Lp1uH0KPp85pZla4mmCZyAL3WKJGVczb5wlxOQdydp0LXsVUx3vLZw+sNkwg+8fV /NPpovJZXSY/m0vA/FBeBYAZ2oAQigTr3Z/jqs2CO38JUEcpVbqtMh9j1/qvuUce qHiQP0ZaEtq5D+e1zpNahtq8QajgcCx1d4iRvb/jHGhtJg4J7fMImdfBCCMNKuX2 CeDDe0m477Q94ZvObnujsaF0k5RiGEHIdZ7aZwASqykjL7p/wkJ0SZqojDNIBhXI wnUaQ3Gn0AfsAur2Nhp2p3bfa//jyxR9BueFSn1voSDAqyi3v+okIIZ1U4DNfgB2 9TqZPQuF26WB9FxfZFXZu3KIMh5OfoeAdzmnQvKm6C7O36uQxejkw2ThpTOt22YO Uh8t0vjLMQ1zKUkAYHM1r/ONXixyS2RnpnXZByFTAxix15AoBr9q/McTtHDBOEae CKLBUmamBIF5KReXsA5PmasuvtvkSLAGlBpjvIVgrHVj14TEdP+3N637Eb86USVX C/213vBd5uiJkH25W1A4 =KgJN -----END PGP SIGNATURE----- |
Modified client/1.0/pkgr.eagle from [4d1383c374] to [a8b42f9e5a].
︙ | ︙ | |||
210 211 212 213 214 215 216 | # no arguments. # proc getLookupVarNamePrefix {} { return ::pkgr_; # TODO: Make non-global? } # | | | | > | > | | > | > | > > > > | > > > | 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 | # no arguments. # proc getLookupVarNamePrefix {} { return ::pkgr_; # TODO: Make non-global? } # # NOTE: This procedure returns a name suffix (directory, variable, etc) # that is unique to the running process at the current point in # time. It is used (internally) to avoid name collisions with any # preexisting variables or commands that may be present in the # global namespace. The paranoia argument represents the relative # level of paranoia required by the caller; the higher this level, # the more uniqueness is required. # proc getUniqueSuffix { {paranoia 1} } { set result [string trim [pid] -] if {$paranoia > 0} then { append result _ [string trim [clock seconds] -] } if {$paranoia > 1} then { append result _ [string trim \ [clock clicks -milliseconds] -]; # TODO: Bad? } return $result } # # NOTE: This procedure returns the list of API keys to use when looking # up packages via the package repository server. An empty list # is returned if no API keys are currently configured. There are # no arguments. |
︙ | ︙ | |||
739 740 741 742 743 744 745 | if {[isHarpyCertificate $metadata(certificate)]} then { # # NOTE: Attempt to create a completely unique array variable name to # hold the package metadata in this scripting language as well # as possibly in the other necessary scripting language(s). # set newVarName(1) [appendArgs \ | | | | | | | 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 | if {[isHarpyCertificate $metadata(certificate)]} then { # # NOTE: Attempt to create a completely unique array variable name to # hold the package metadata in this scripting language as well # as possibly in the other necessary scripting language(s). # set newVarName(1) [appendArgs \ [getLookupVarNamePrefix] metadata_ [getUniqueSuffix 2]] set newVarName(2) [appendArgs \ [getLookupVarNamePrefix] cleanup_ [getUniqueSuffix 2]] set newProcName(1) [appendArgs \ [getLookupVarNamePrefix] eagleHasSecurity_ [getUniqueSuffix 2]] set newProcName(2) [appendArgs \ [getLookupVarNamePrefix] getFileTempName_ [getUniqueSuffix 2]] set newProcName(3) [appendArgs \ [getLookupVarNamePrefix] tclMustBeReady_ [getUniqueSuffix 2]] # # NOTE: Create the Eagle script block that will be used to securely # evaluate a signed package script. This must be evaluated in # Eagle because it uses several plugins only available there. # set script(outer) [string map [list \ |
︙ | ︙ |
Modified client/1.0/pkgr.eagle.asc from [59b34bb8f5] to [c4e974eed2].
1 2 3 4 | -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository | | | | | | | | | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository iQIcBAABCAAGBQJXuRiEAAoJEFAslq9JXcLZoNsQAIodEzbXccovfFnk7bF8uAip doioE5IH8suiTrtGsvpuFSqxrB1BW5K4QOvzZY1xLMWwy+NMF6VzvXmJqQTrsNcY kvUbNUpvrWKA39oWLKiA24RxHqbw15ExdWBbh1+dYkFSZZodSEpdWuPP9GrqbVeU 4dKkRZk8gk8IG9MTDsRy4L3pzZOOl3ggJagVD41QqEZQehhtV1zuHNFtUIZuAkch QVUtU9q/ahGEtPuFCFkO5IoHlFRpVgDs8XdDwAep0FXeUwTeQmgvwgLdCFDmVJVQ Xi3+rlBRRYxANJl38e9hgrgsRApTnbo1SAVyhHUXWhGRgV9vwg5NVqMwrBVtsiIW 46uSZl9nVDMw2tOrIHFvdauTUdpisHW04wdvujKv5bmo7oFLhJ1K7XC207XPInE8 RZqJvBfnq4my8COOlPQOmoGFTJvkhIStgjMdfxWRFuXe437qLdj+it/o1TT+VYnN PISLPY5T9xc/ttJgUmWaqbPVqKcdB9GBhTEh5eX00QmdZTrBTXiUKCpRQGmfyLbb kOb6aBNeenTPhjCvcmYdPNJe/zFFDJDlZScpU7fCigIE3D303trlZTjX1gR0u9eH EtC0T+6k1C/eP1IzKLmSwRj80GyjAfHOmO5/StqYnz4L7qlK1e69YCXCSg96ZoFh GisG2DmVFMneO8WHGx3R =e2zH -----END PGP SIGNATURE----- |
Modified client/1.0/pkgr.eagle.harpy from [66931dd415] to [27908155b1].
︙ | ︙ | |||
17 18 19 20 21 22 23 | THE ASSOCIATED SOFTWARE MAY NOT WORK PROPERLY IF THIS FILE IS ALTERED. --> <Certificate xmlns="https://eagle.to/2011/harpy" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Protocol>None</Protocol> <Vendor>Mistachkin Systems</Vendor> | | | | | | | | | | | | | | | | | | | | | | 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | THE ASSOCIATED SOFTWARE MAY NOT WORK PROPERLY IF THIS FILE IS ALTERED. --> <Certificate xmlns="https://eagle.to/2011/harpy" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Protocol>None</Protocol> <Vendor>Mistachkin Systems</Vendor> <Id>092ce766-385e-409b-be3c-6a3c473551ad</Id> <HashAlgorithm>SHA512</HashAlgorithm> <EntityType>Script</EntityType> <TimeStamp>2016-08-21T03:01:23.2324687Z</TimeStamp> <Duration>-1.00:00:00</Duration> <Key>0x2c322765603b5278</Key> <Signature> frjSmGUYdZhlFoSSOA3gTxMzwiUOkjfY9ST65h+1hK7of3QagAwpGOzhC2MkceM5Ay/MLoxF4VEH dIZbowtNNZKE5rlJUgE52Ek09zY2L2/YD8rixeA3l11+gQ4G8l1pTo1YtDdkp60hAUlcliT7dBOT tM2mqhA3aOISuxQOMWQ6r5TFpKvIBKkelU+p7TUgi11Z0ozyCj82eS+4JJblmzN9r7yZ91PD7HXM Rby3wgHJUcY181PjUjSedPzJcHJR5E9WTGOXot0j0Iyti+IvzGpOkUZSt0KlT4Mw4Inhfz4lKYla S0M6sxeQSJHZbLJvCG8WcPjKFNIKKQT5m477bDmnJV0MHAwmCa0+98MLrtD3AHt8/lw0Q8XhACD+ 6+OaGN1QruIEgbPzWQvlA07Iqi2k1zJV7vWkXgr67JsWoBOv0CO0GGzMQAKrnlYvZDw8NitCP/FI zX0E3mBmLNaGVKqk3pm70zInaRog7ibHe6cLLtGi9dkXENwVII6E/ej8r2HLkq3N+FTZWKxEYPTC AAbOb0dfPR6iy2fKB+dw4+3RNG1NpVYCx2TIK5o0D0nB8QEL9KwrFEf+VLa8dwM+tcCM2z+kPr/7 rybNzLgvnSKNzpYUO1jlRFyKOmCxjBDDFJT9/Qse+2UEquZCNO1w/OSQEuZUGAK2AXGcefiIrPXc 51Fmst3OGuo3P9gFjZ2IVv2CuBjFGgvC7O+NZ6viiTAccybdHcyZkWOvxJdzmG2APiTHWlG+QjKL VSwoEAuH7iLDDmpOHCUnR0ykqPjwYMQIMXbG1jWYzmqasNNYqV7BoQchDNFAsAqYxQDewy+YtvEY dvpy+/3JcU7SJ9/7mAIWg0RlDK25aqxMo9ho4RbCFL3gkbJzGta+43rLrh2MWXx7MXhlfxrfmS3q GlZbQ3/H4qWYVtmxKOL2XPDP+VXXMOQKB9XWjaqJIydyQG0i2tO3yjTR3AwIYvy8xShes5Z90Jbe YD5YnlUUZ+C0tzESFybJ79m9v8DCOjA5qJTzOOylwA/5vEgnHVFhpX2QOIsQuQtcMpJ3sVdC5C+w OOLVY+PQLVEEetDDLVaj0RnVjJocg3s9jWF50tISehZSIpeykAP2sCJL38nybpJyyvP8fPT/bf9e tHYQDzCvg8p8PSXOx/hyZ6ps3nrVG4ZSVEuj8vpm0SaUJAuAyKrfM/6C/dzF3h62jmewYjhY40WS CzI5yZIrQv6/dWrHFP9o3F7wMUuw3XmB+7vps/70JJrUid5usMuX9TNGbyv4jYXYktK0b1Xddn0C USUNBCNnwC2t+VZbHAG+UT2kYUZl/StfOyBv3IXn8n53GFYXa0RaW1D4Wo9dVBIqThwgGT+imw== </Signature> </Certificate> |
Modified client/1.0/pkgr.eagle.harpy.asc from [cb9404ca54] to [9a51e66ea1].
1 2 3 4 | -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository | | | | | | | | | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository iQIcBAABCAAGBQJXuRstAAoJEFAslq9JXcLZYlQQAKQv1vXA+a8NGotJwNnpeAaZ hfLV2RPTM0dDoGQTGsqGJhlNvb1GF08obFntl1q73Ogf9Mvfl/bUWOFIMZCVrf+N q8yj7jmcL88uZrphVxw3tGJa+TOZ8a+G92GZZFwTXLfRulitERkeBMhxwNhVNhol n3DyTmGP3inTAD36hpQjtvZZeOy+XvIa/rvgmOVFXjAK0NPbS5in+KBw83Gup/sN ZFth1lBMIbuC3B8LDYfZj6nwvs+a2/AdWk8rV2DLyC0Zva6zo4JkG56weKT3WM5a Cv4TcND8jypTJsyJgr3r7VL7ZXIRqfIDUz8yRIXwV9miAcWmHu6fRdLgkCbr3dDm Qjh2YYsG4CQbEzdkTom7vrr4fb/OClio3N4CnGZMe+IKt0yYzz58CWEmA1ryKaIU XLEapGmOjCpS2KwZ7TuCKx08OuEWG8Fxz06JCBIsNNhDu25PBhcW4eN3cgBGn3b1 /GZrZni6eACsEH2MRxcbLocSlJRGgy+8Ko/e3kr8MbBNq3n9g7bb5klDFBuoLCmV Cl8bU66glJydh8u2sr7BVbeXt3AjL+Ga5ca1Q5p46Ag6sQ74DKjt+wV00epCOBhW tDc6jcCIplb6M1tN6y3TQNhB7LpT7NB85t73oeer5yfJWOy6wbwKXpS3v+0misHV 5zUMohJkneX3+j+Pcg5y =2rgt -----END PGP SIGNATURE----- |