Index: client/1.0/neutral/pkgd.eagle ================================================================== --- client/1.0/neutral/pkgd.eagle +++ client/1.0/neutral/pkgd.eagle @@ -1263,13 +1263,14 @@ # NOTE: This procedure issues a request to an HTTP(S) server. It returns # the raw response data verbatim. It may raise a script error. It # will always use the currently configured HTTP(S) login cookie, if # any; therefore, it should really only be used for requests to the # package file server. The uri argument is the fully qualified URI - # to request. + # to request. The allowHtml argument should be non-zero if raw HTML + # should be allowed in the response data. # - proc getPackageFile { uri } { + proc getPackageFile { uri {allowHtml false} } { variable loginCookie variable quiet if {[isEagle]} then { if {![info exists ::eagle_platform(compileOptions)]} then { @@ -1303,24 +1304,35 @@ if {[methodName ToString] eq "GetWebRequest"} then { webRequest Headers.Add Cookie [join $loginCookie =] } }] - return [uri download -inline -webclientdata $script -- $uri] + set data [uri download -inline -webclientdata $script -- $uri] } else { - return [uri download -inline -- $uri] + set data [uri download -inline -- $uri] } } else { set options [list -binary true] if {[info exists loginCookie] && [llength $loginCookie] == 2} then { lappend options -headers [list Cookie [join $loginCookie =]] } - return [eval ::PackageRepository::getFileViaHttp \ + set data [eval ::PackageRepository::getFileViaHttp \ [list $uri] [list 20] [list stdout] [list $quiet] $options] } + + # + # HACK: Check for the typical Fossil error response(s), which is an + # HTML page that may contain something like "Artifact 'X' does + # not exist in this repository"). + # + if {!$allowHtml && [string range $data 0 14] eq ""} then { + error "bad package file response data, appears to be HTML page" + } + + return $data } # # NOTE: This procedure returns the prefix for fully qualified variable # names that MAY be present in the global namespace. There are @@ -1517,10 +1529,149 @@ } return $result } + # + # NOTE: This procedure creates a new interpreter, which may be "safe", and + # places a reference to it in a variable in the context of the caller + # identified by the varName argument. The created interpreter has a + # fully functioning [package] command ensemble; all other commands do + # nothing and return nothing. This procedure may raise script errors. + # + proc createInterp { varName } { + # + # NOTE: Prepare to provide the caller with the newly created interpreter + # reference. + # + upvar 1 $varName interp + + # + # NOTE: Create a "safe" interpreter and set the global "dir" variable to + # a single period. Generally, this is the only variable used by a + # package index file. It should be noted that since [set] will be + # a NOP, attempts to use other variables in the specified package + # index file (e.g. ones [set] within it) will fail. + # + set interp [interp create -safe] + interp eval $interp [list set dir .] + + # + # NOTE: First, obtain the list of child namespaces to delete, if any, and + # then delete them all. This should leave the global namespace and + # its commands / variables untouched. + # + set namespaces [interp eval $interp [list namespace children ::]] + + foreach namespace $namespaces { + catch { + interp eval $interp [list namespace delete $namespace] + } + } + + # + # NOTE: Next, obtain the list of global commands and delete all of them + # except the [proc] and [package] commands. The [proc] command is + # handled specially (last) and the [package] command is retained. + # + set commands [interp eval $interp [list info commands]] + + foreach command $commands { + if {$command ne "proc" && $command ne "package"} then { + interp eval $interp [list proc $command args ""]; # NOP + } + } + + if {![isEagle]} then { + # + # HACK: The "safe" interpreters in native Tcl do not contain + # the [file] command at all, not even for [file join] + # and [file split], which may be used in package index + # files; therefore, add it as a NOP command. + # + interp eval $interp [list proc file args ""]; # NOP + } + + # + # NOTE: Next, disable the [proc] command. This must be done last + # because it is used to disable (i.e. via NOP) all the other + # global commands. + # + interp eval $interp [list proc proc args ""]; # NOP + + # + # NOTE: Finally, return nothing as the created interpreter reference + # is placed directly into the variable specified by the caller. + # + return "" + } + + # + # NOTE: This procedure evaluates a script file and attempts to determine the + # list of new [package ifneeded] scripts added by it. When successful + # it returns a list-of-lists. Each element of the outer list contains + # a package name and the list of its versions in descending order; in + # the event of failure, empty lists may be returned for the outer list + # or for a list of versions. The interp argument is the interp to use + # when evaluating the file specified by the fileName argument. This + # procedure may raise script errors. + # + proc getIfNeededVersions { interp fileName } { + set result [list] + + set oldPackageNames [interp eval $interp [list package names]] + interp invokehidden $interp source $fileName; # [package ifneeded], etc. + set newPackageNames [interp eval $interp [list package names]] + + foreach packageName $newPackageNames { + if {[lsearch -exact $oldPackageNames $packageName] == -1} then { + lappend result [list $packageName [lsort -decreasing \ + -command [list package vcompare] [interp eval \ + $interp [list package versions $packageName]]]] + } + } + + return $result + } + + # + # NOTE: This procedure attempts to extract a package version information + # from the specified file. The fileName argument is the local file + # name to read. This procedure may raise script errors. + # + proc extractVersionsFromFile { fileName } { + switch -exact -- [file tail $fileName] { + VERSION { + return [list [string trim [readFile $fileName]]] + } + pkgIndex.eagle - + pkgIndex.tcl { + # + # TODO: Evaluate the package index file in a new "safe" + # interpreter and obtain the newly added [package + # ifneeded] version(s)? + # + if {[catch {createInterp interp} error] == 0} then { + set result [getIfNeededVersions $interp $fileName] + } else { + pkgLog [appendArgs \ + "could not create interp to extract versions: " \ + $error] + + set result [list] + } + + if {[info exists interp]} then { + catch {interp delete $interp} + unset interp; # REDUNDANT + } + + return $result + } + } + } + # # NOTE: This procedure checks if there is a higher version available of the # specified package on the package file server. The language argument # must be one of the literal strings "eagle", "tcl", or "client". The # version argument must be one of the literal strings "8.4", "8.5", or @@ -1551,37 +1702,45 @@ } else { verifyPersistentRootDirectory set persistentDirectory $persistentRootDirectory } - set fileName [file join $packageName VERSION] - set downloadFileName [file join $temporaryDirectory $fileName] - - file mkdir [file dirname $downloadFileName] - - downloadOneFile $language $version $platform \ - $fileName $downloadFileName $usePgp - - if {$usePgp} then { - downloadOneFile $language $version $platform \ - [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]]] - - if {[isEagle]} then { - file delete -recursive -- $temporaryDirectory - } else { - file delete -force -- $temporaryDirectory - } - - return [expr {$compare > 0}] + set fileNamesOnly [list VERSION pkgIndex.eagle pkgIndex.tcl] + + foreach fileNameOnly $fileNamesOnly { + set fileName [file join $packageName $fileNameOnly] + set downloadFileName [file join $temporaryDirectory $fileName] + + file mkdir [file dirname $downloadFileName] + + if {[catch { + downloadOneFile $language $version $platform \ + $fileName $downloadFileName $usePgp + }] == 0} then { + if {$usePgp} then { + downloadOneFile $language $version $platform \ + [appendArgs $fileName .asc] \ + [appendArgs $downloadFileName .asc] $usePgp + } + + set localFileName [file join $persistentDirectory $fileName] + + set compare [package vcompare \ + [lindex [extractVersionsFromFile $downloadFileName] 0] \ + [lindex [extractVersionsFromFile $localFileName] 0]] + + if {[isEagle]} then { + file delete -recursive -- $temporaryDirectory + } else { + file delete -force -- $temporaryDirectory + } + + return [expr {$compare > 0}] + } + } + + error "could not check higher version: no supported file names" } # # NOTE: This procedure attempts to guess a package name based on a list of # its files. It relies upon the fact that all packages must include Index: client/1.0/neutral/pkgd.eagle.asc ================================================================== --- client/1.0/neutral/pkgd.eagle.asc +++ client/1.0/neutral/pkgd.eagle.asc @@ -1,18 +1,18 @@ -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository -iQIcBAABCAAGBQJdwuz3AAoJEFAslq9JXcLZHRAQAJq45rRYk9r9CjPmahPUfOeF -baZC3iDFz8VWDuv4hcU6W2q+RgwqWnsS06wUoVXYnrk2bCY8MH/0XDvkQwtGxIEc -k2p63L9zxw/ri5FxvNYuGIvDl+lhrqKleMHZODCKibQwM51to2CPXx1bMgbKsvDO -sXW2Mz4gcV8GwItdY/sZjEwq8qU/wfXjW4ZWcwaBp3smadUZBv7r94i4nFRdT+yD -5YwxT7Qy0J6qyVxseH4GI1onA/ds1p/to2Wmy4fELUesAuOwwsGNcDTUZl+zDUEy -Fxj16CHWu62lv+YSBDmFFd1xrUBNKvVZ3ckATRXVznbmQYYEwRgv9Dg8GeDg7qtv -zRnUYj5BCCVG8aBYJccCXC2h+cby8otoUF/bCPr9BJwWw/KqzZFeLGLSf5/5rIUB -XK7sOe/2GNkw4nu7NxbgCyHUpZfbr/5eafmhOK2AAwR518NbqDhjhTzJGOUCkkbd -G9qZpkcDQZULVYu20fRYqUW341k5frZ03dcqKVx0ZWg9EQhspbNkV07MQnH3lTG2 -A4AkgUQladsqfgR6wnskF0tlcTozy50Jj2wUNZU8N0ciQEUS/2vZDO0hwRrSuJdj -dq6L8+4/EBrEGO3bbwcipi0CACMTYviI5gSECc6wBaqSwllilXVrPLmm/GLgb2yU -xp1P34dex7A0cxbnlncp -=8/XM +iQIcBAABCAAGBQJefmh2AAoJEFAslq9JXcLZU+UP/2og4/PHeqflZF+G46gSq7mc +Fl+jpy8Dm/H22L2hA+j8h3BlTd8a+KZt5puYtcZjtNbTny0FBwJlLLwDsrtUKzO8 +proJZlROO4uXkpQz9HDO8P8nAqb+V3xmfn948kolByR3FGr7kjoH6F6YHmiegmo5 +8jBsGKVKpyRTp2inxAnhH0iYDzlLt3mNBqPLjL9oDMPbRuEvf7c1r2nahv0ZetbI +r506ozMxd/h17NYtrVajT6MvvMDtymqWvpRWkpqhH/XUksmNNuWr594B3c9uLr0f +ubZYd0oo0thqdNtxxFLw1xZy15t4lwt8RQ4jVPR3B5Yc2ENSmRVJq7InjL8rTy9O +X9c/dOwtlT3vISXmi9R8S+64876M6DVRG79NNfV6sMbyhestUNxgr3KmbkliHzu1 +2obGwnWGtncrS/JWnsu+5P2qIWcXTGOka0RZchGMu3hk/6EqYuTHGr7OVUhhvJzy +qOXpiY+kOu4IMA5tpa9bahExE3dyWMAA1z5vx9Hu1TEHCfzICE+iWQ+rskN6orwr +N4aiJchl2xLZDOZp9LXJRsBEvzCApwYx1xSfpu9IFqrClSrQ+vZLvttkppv967ZZ +BxHe/1/gROYxECELBtydWM/w5kLuJHRY0Q1sV8E7rcNa28uDHpFbwhm9ZkbADDrr +yLCorIpOhiR+CTM/QQGI +=0ByE -----END PGP SIGNATURE----- Index: client/1.0/neutral/pkgd.eagle.harpy ================================================================== --- client/1.0/neutral/pkgd.eagle.harpy +++ client/1.0/neutral/pkgd.eagle.harpy @@ -19,50 +19,50 @@ None Mistachkin Systems - 99b4ca9b-d98b-4ff8-9f54-4ceda46b22e5 + ed107b00-7d62-4824-b6b9-f094571af22f SHA512 Script - 2019-11-06T15:53:46.6032795Z + 2020-03-27T20:56:02.6471192Z -1.00:00:00 0x9559f6017247e3e2 - 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 Index: client/1.0/neutral/pkgd.eagle.harpy.asc ================================================================== --- client/1.0/neutral/pkgd.eagle.harpy.asc +++ client/1.0/neutral/pkgd.eagle.harpy.asc @@ -1,18 +1,18 @@ -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository -iQIcBAABCAAGBQJdwuz5AAoJEFAslq9JXcLZUDUQAIlvZ+UZowmVWidxVUfoblPo -oLRZfqAHGoMqZfywKPuwrUY7CTJooQcn94bQ7Hu818AwRD+H3QWEqL98XaXADnEe -b0Xk0zD2Carq2XIAKrWwFPQE/sJFdXfFPAWh3NMfzxjd2qgDDZCdV22pr8fiQ4So -EnsVQqPeYJqUExU3Ye7WvamuDwcWJ9uiiXb+imTWzpl/1it879Kk2zwgYW/a1NuA -nSUoyL9uoNtCFjbrvgpoVmIrgJ1EINEarOCkLhg/sBcna4Ub/hk2ACdx+Nqh/nBg -pLov823BCyf3kluI0fOaw6xJ9XfOijebz2iV8SN8ey6TEDNM8n9WKxLn7i4vxkBx -9tcMWP1qQ6IGHAOjABdYUFVn/YrvJhbYYJXBDTAMNduBAHezzJYYRN+DL2UfpE1I -gffU15sSORtbApU9gmWjIhGg4kxfqiVr1R5dwHgoTOdZZ6K2/GRAr033x9qyshdz -7m+MD4sYCog+OqhimgX3QQaNvNZEFjQe9sdkzia13pkQ4JECj6qOPuLhiof8zCU2 -NOfMFJDIz1TYbAG29BxjyLqMbt9wj2YZA4y1pdLPH9LdrDBowyGee5t519c8wM6f -6dJRAVoMKYc5OPbe9RJ11C0cPB9dIenGrTuHuj5xKctAvRmhR9fJa8/tJ7bRcH5I -r/mx5wYNZ4oPTbhzJT38 -=N7fZ +iQIcBAABCAAGBQJefmh3AAoJEFAslq9JXcLZQvEP/2DmyHIFHTJQ24GRXISNApvc +SwE5Ph/E9rHXsn8FcUZ9nlUt/FBcKDNePCY6g4p1R278sSUEzHv7vG14SfjeGnHr +CDUJN/ALCcappRyvoT39bb2pJ1PwPF3iCebnGNk98wU1vneVSwMAqS5RMCrYgm1u +qOc/s5auwrSJPmKGzd3+pSeVLaoollhIsEfh+JbEmGZX0/p/0IeC/PY3EdU2W7Vd +HE3Tk2t+tS7GiQbkAMF0V3xyc2/11nFiNYz8L20ioEKmYaFO/ScfJZP6ZV2uhwjR +s+lkmWQjO3izSr7bfM8Ffg/UutCgspnyc7DGVAQApZ9AV03m1NR6vYE4/4zdhOVm +2IhKJ/yAJYmiuE7vaA1EM2m1eWccQCY2bMTTE7OdYgPRbT8AWIjS3pWCM0BUIYAv +TAACji5249/Dz8BNT75Y7G6P7CN7H0l2lDUAQKd9YngEZJX21zfAKIxEhmuHcrCG +sVhpfLfGlfXfsaPGBgtPkKsXPdHPLVUGbdEcB/MFsmE5yLzIaaJyhOx4SOQAn91n +BApw6NKPsQDi8CeUeL/ydqG6sJP2gO1WtpQot4sB5BCuz43BFGLIxtWATpl7QRsv +tc+YPeJLx9Ksb66pjoR1yJ/INodUCK8TEXf3x+KORg01r9Z1foLd6fwc01Jsr/tE +70r34qCHAuJjL7WaRrOy +=l79d -----END PGP SIGNATURE----- Index: client/1.0/neutral/pkgr.eagle ================================================================== --- client/1.0/neutral/pkgr.eagle +++ client/1.0/neutral/pkgr.eagle @@ -417,22 +417,22 @@ # it already appeared to be available for use. # # proc probeForOpenPgpInstallation {} { global env - variable openPgpFileNameOnly - variable openPgpInstalledDirectory + variable openPgpFileNamesOnly + variable openPgpInstalledDirectories if {[catch {openPgpMustBeInstalled}] == 0} then { return true } - if {![info exists openPgpFileNameOnly]} then { + if {![info exists openPgpFileNamesOnly]} then { return false } - if {![info exists openPgpInstalledDirectory]} then { + if {![info exists openPgpInstalledDirectories]} then { return false } if {[isWindows]} then { if {[info exists env(ProgramFiles(x86))]} then { @@ -440,24 +440,33 @@ } elseif {[info exists env(ProgramFiles)]} then { set programFiles $env(ProgramFiles) } else { return false } - - set directory [file join $programFiles $openPgpInstalledDirectory] - } else { - set directory $openPgpInstalledDirectory } - if {![file isdirectory $directory]} then { - return false - } - - set fileName [file join $directory $openPgpFileNameOnly] - - if {[file exists $fileName] && [file isfile $fileName]} then { - return [addToPath $directory] + foreach directory $openPgpInstalledDirectories { + if {[isWindows]} then { + set subDirectory [file join $programFiles $directory] + } else { + set subDirectory $directory + } + + if {[file isdirectory $subDirectory]} then { + foreach fileNameOnly $openPgpFileNamesOnly { + set fileName [file join $subDirectory $fileNameOnly] + + if {[file exists $fileName] && [file isfile $fileName]} then { + pkgLog [appendArgs \ + "the OpenPGP directory is being initialized to \"" \ + $subDirectory "\" based on OpenPGP file name \"" \ + $fileNameOnly \"] + + return [addToPath $subDirectory] + } + } + } } return false } @@ -485,11 +494,11 @@ the package management subsystem included with your operating system. } set found false - foreach fileName $openPgpFileNamesOnly { + foreach fileNameOnly $openPgpFileNamesOnly { if {[isEagle]} then { if {[catch { eval exec -success Success [subst $openPgpInstalledCommand] } result] == 0} then { set found true; break @@ -511,23 +520,27 @@ if {[info exists openPgpFileNameOnly]} then { # # NOTE: If the OpenPGP file name that we found before (?) does not # match what we already have, issue a log message. # - if {$fileName ne $openPgpFileNameOnly} then { + if {$fileNameOnly ne $openPgpFileNameOnly} then { pkgLog [appendArgs \ "the OpenPGP file name is being changed from \"" \ - $openPgpFileNameOnly "\" to \"" $fileName \"] + $openPgpFileNameOnly "\" to \"" $fileNameOnly \"] - set openPgpFileNameOnly $fileName + set openPgpFileNameOnly $fileNameOnly } } else { # # NOTE: Configure the OpenPGP file name to the one that was just # found. # - set openPgpFileNameOnly $fileName + pkgLog [appendArgs \ + "the OpenPGP file name is being initialized to \"" \ + $fileNameOnly \"] + + set openPgpFileNameOnly $fileNameOnly } } else { # # NOTE: If no viable OpenPGP file name was found, raise the error # message. @@ -2298,17 +2311,19 @@ # # NOTE: This is the name of the sub-directory containing the OpenPGP # implementation. It is platform-specific. On Windows, this # sub-directory is relative to the "Program Files" directory. # - variable openPgpInstalledDirectory; # DEFAULT: [file join GNU GnuPG] + variable openPgpInstalledDirectories; # DEFAULT: [list ...] - if {![info exists openPgpInstalledDirectory]} then { + if {$force || ![info exists openPgpInstalledDirectories]} then { if {[isWindows]} then { - set openPgpInstalledDirectory [file join GNU GnuPG] + set openPgpInstalledDirectories [list \ + [file join gnupg bin] [file join GNU GnuPG]] } else { - set openPgpInstalledDirectory [file join / usr bin] + set openPgpInstalledDirectories [list \ + [file join / usr bin]] } } # # NOTE: These are the candidate names of the executable file used to @@ -2315,11 +2330,11 @@ # invoke the OpenPGP implementation, possibly without a file # extension. # variable openPgpFileNamesOnly; # DEFAULT: [list gpg2 gpg] - if {![info exists openPgpFileNamesOnly]} then { + if {$force || ![info exists openPgpFileNamesOnly]} then { if {[isWindows]} then { set openPgpFileNamesOnly [list gpg2.exe gpg.exe] } else { set openPgpFileNamesOnly [list gpg2 gpg] } @@ -2336,11 +2351,11 @@ # file. This must be configured according to the implementation # of OpenPGP in use. # variable openPgpImportCommand; # DEFAULT: gpg2 --import - if {![info exists openPgpImportCommand]} then { + if {$force || ![info exists openPgpImportCommand]} then { set openPgpImportCommand \ {{${openPgpFileNameOnly}} --import {${fileName}}} } # @@ -2348,11 +2363,11 @@ # that OpenPGP successfully imported one or more keys. This must # be configured according to the implementation of OpenPGP in use. # variable openPgpImportPattern; # DEFAULT: ^gpg: Total number processed... - if {![info exists openPgpImportPattern]} then { + if {$force || ![info exists openPgpImportPattern]} then { set openPgpImportPattern {^gpg: Total number processed: [1-9]\d*$} } # # NOTE: The command to use when attempting to verify that OpenPGP is @@ -2359,22 +2374,22 @@ # installed locally. This must be configured according to the # implementation of OpenPGP in use. # variable openPgpInstalledCommand; # DEFAULT: gpg2 --version --homedir {} - if {![info exists openPgpInstalledCommand]} then { - set openPgpInstalledCommand {{${fileName}} --version --homedir {}} + if {$force || ![info exists openPgpInstalledCommand]} then { + set openPgpInstalledCommand {{${fileNameOnly}} --version --homedir {}} } # # NOTE: The regular expression pattern used when attempting to verify # that OpenPGP is installed locally. This must be configured # according to the implementation of OpenPGP in use. # variable openPgpInstalledPattern; # DEFAULT: ^gpg \(GnuPG\) 2\.[0123]\. - if {![info exists openPgpInstalledPattern]} then { + if {$force || ![info exists openPgpInstalledPattern]} then { set openPgpInstalledPattern {^gpg \(GnuPG\) 2\.[0123]\.} } # # NOTE: The command to use when verifying OpenPGP signatures for the @@ -2381,11 +2396,11 @@ # downloaded package scripts. This must be configured according # to the implementation of OpenPGP in use. # variable openPgpVerifyCommand; # DEFAULT: gpg2 --verify {${fileName}} - if {![info exists openPgpVerifyCommand]} then { + if {$force || ![info exists openPgpVerifyCommand]} then { set openPgpVerifyCommand \ {{${openPgpFileNameOnly}} --verify {${fileName}}} } # @@ -2393,11 +2408,11 @@ # downloaded package scripts. This must be configured according # to the implementation of OpenPGP in use. # variable openPgpSignCommand; # DEFAULT: gpg2 --detach-sign ... - if {![info exists openPgpSignCommand]} then { + if {$force || ![info exists openPgpSignCommand]} then { set openPgpSignCommand "" append openPgpSignCommand \ {{${openPgpFileNameOnly}} --detach-sign --armor} Index: client/1.0/neutral/pkgr.eagle.asc ================================================================== --- client/1.0/neutral/pkgr.eagle.asc +++ client/1.0/neutral/pkgr.eagle.asc @@ -1,18 +1,18 @@ -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository -iQIcBAABCAAGBQJdwuz8AAoJEFAslq9JXcLZcVkP/jS4+eAdHt6D+Tmv5elrElPX -GiNMqBGiehn5l8uWB5SnjeU/zvvJqW2MybhKvCTwIjEXYu7mv2vFPZBRXADUpvtF -tOfzeIP8K8crlJwz8c/O1NQCvzfA3U2sEa03y7ULu8vZSpXgrtijBMDfu8ABrFlc -StVvLyQhQ0KJtsn5IR9LKLvWb8Izk3/+YTQp+i5jWv3LU40FbBJZinc4K3W6h/Cj -Zg3QFGxRyO2tGw3j2JO6NPtQN6OIIvNLc2nmkEjUnlHROLwxsChMapQmGxVmA1CI -QWtKjsaLbIZXKPGTeryQ7i50icW5AV1uGox/yDp/RFt8a9Sc5Spjr9qoRn5T4wVT -AEYFSIyIi/sy8uZTr6BqeR03QXZ78kfTTLHmOzkjKUiqHwMseEBX1k6jjZUMlymR -Kkofb/uNhW8v0sSezqFQ92bI9XgslTQF/fqyH2yv9ZCaoiyjBoFMzAGGv6y3XzMi -+4i0/drM3BmoF39F2vAiFyObT3cCqGDt0/MgO8y44HHAIROxMO0N1A/xgxtpTWl9 -IG/CXTFmLLdUgnDPYya55m9ri0bz7GstcInWdMN7+X0whucYQqcbGIqA/w4CWr6T -87hxtlDGcw1wWxizBa5yDzwaRS6jjGhMw79Sp1QGnF9Hb7lRoZsZxXghDKmMU6cN -Cm9qH9IrK/n3JoDP681A -=FxL1 +iQIcBAABCAAGBQJefmhwAAoJEFAslq9JXcLZnzkQAMSqU2nlTobNSziYN+EnEazL +X7cGWSqXgLNqAaWr5RNTRcY+22mu+mr50B2JpJBfuGPxSvSp4eq4GUdQgOLO5fhW +Tw3pnhS0Y9/wjFkn0IFmA5QI1FpLsgZjzDiQNHB+BZZ4ybFFTq94gw5tN6ZS9utn +0Wt7aT1KiHM7bMMymIkeGGmU4VOLtlyCUs/GUHo+iwMdPZPA6DMHV8vXdQNIPr2D +nzUIGsMpQs2k7wIHzCI3iJvVJQA5VyfnFpztzhsR3MxiJxeYjhMdHL1wvfZ2NpOy +csSw3Mb9pRj/otuIJa6bNookHhruVSXr/XUfTVN4wdUup5FVjA5kRzL/yfx99WjQ +baUNyYLjGHPZLXtXsPBrjPF5JI/ipVv4UYAqTL/sjLRxLG+JNRFWg9qDusJB+Trm +9BtMHzhkvJBuPMUsPXvPMuqbVGYJN6os5BRU+ltX0vLUxslf1EI/pAe7F8rFIiir +2oFRbzzq+ypd4PwrpGmF3LhAa2RNz/VnR1j4ip90nYSpFFcl6JjnxubB56moPxPs +q907ex0+xBLpULC/vZ6TPH6O1gVJ4dTLFH9tJpqH5qyWbbIeCyfN5Ynhq69Y+qdB +636kXlUOEgg4I3ZkfDubpKf/DZ8yYMUgyaluRIOiGkkIQ2VuRLKd4zelLtKxT3Mv +KazKvCNfOcxc/9YtD2Z2 +=FjC5 -----END PGP SIGNATURE----- Index: client/1.0/neutral/pkgr.eagle.harpy ================================================================== --- client/1.0/neutral/pkgr.eagle.harpy +++ client/1.0/neutral/pkgr.eagle.harpy @@ -19,50 +19,50 @@ None Mistachkin Systems - 36f37a40-de70-4264-8fdb-512973db856d + 9bfbeedf-0f5e-44b8-b371-7c5b484e7747 SHA512 Script - 2019-11-06T15:54:28.2976643Z + 2020-03-27T20:55:40.9358622Z -1.00:00:00 0x9559f6017247e3e2 - nWQiuzzhBrFuRv7VmBKtq+UAiO/kf6crM7JLYI0mzSlMJT60PlEcKmZpI0kbHg4tm1EqzHSQGR3w - /9NwpSxPMAvtWzuVYlstQ3GUNm7dzhUabuMeZom6T+T4RNPLVZtwaecRsqbqxro0sxdQV4rfWHBR - ST6rErTKVLzBtD/jSvSqaylPuG09iI7+l0ql6X6y+A6uCm+XoHttoXgBEJJ/pq3oeGXWdRfkS00n - ag1rUnIoqgfKIlI8YKL55UzYk6wRixcOagR5ozWdUlJZpTPB/YXL1RKdRRSQfgzzYOlVdBUSpkuv - ooXZnLdxEpGAbAIOOBCpnPREdutJHCOTUo2IW0FtzO5GvSNTmq5tsVhmkSkkWW42oicMTHw11hQ7 - b2xImo3v4IL63p471rYgMcs7B1yqEO9fdX3UUG9u6hlyH2OObcJdszeEVmx1C/v78GMP+0J3vCrs - ChinzKS7yMPjcpB0MYKdnowYg9yqp3lif0R8o7WtdVFfm87YHlbCEZBr7W6IJxH2pQ1Lh3O69RMP - +MbW8B09b51/cDXyZ/qf2V7E/3qJEk/6H6expuwRSVGt7r4UnNFJ7DE4EH254zvrADP1i6XkxRl6 - j+UXCSCofjdyJ/gZZj1B7CM7DrPESbWqd8/eeb/nfarW0lfeEcaik1YbuSrU0smcpP0HnH+snfHF - pGLj9mRETSThLx9CGm/ka9NcRcyN6iw3aUR8tJ+1lwZ6/2r+nh+JXSRA5xJVueYGks81WGQTB4OE - M/p3brJT1njqL3iGnbf+084ZqRFIPV5VPj+JhTNayztoJ/CKmJJ1TEe+yz0rH0KrVWhA8GRqbBd3 - OzgJEi5hJ9B7c0rnbotXkd5x5uPGwW8CJW1BK9mWD6mj11pxWskX1IMFuB2YMHrccGktQeVlsIQb - JLhOZ1Ti7WSo+dIgOKWcBUDL/V9zrqhN9Q8wsqf3qIGHIJns2z5VBVGS2zTobIrpjn/EaMd4n/ua - TTiE7GPfR1ISYiqpOR/sbGQpgzRsxlmNh/ngEVUntk4JAvEByDwWjnOm6i8TEfFkf0/DY5J2m7TG - StjDuOuRtX0kjc5w1L1sj4zX+1wrKWRKzwN2JhMhEtH20U4VWq4Gj8b4NybHbBeywvHU7m9L4kYI - 74/rhtRXlYKa7U3CSa8FQSNPiOh30qw0HIWrGMtYmGzzQoawbEiWzKkYWpPPEmmIL8FefwiXTFPw - p3YwngT0rSokj5dwRO3oENtn1lwo992VvJDWJ5qrlVX+toVigkhnEaQurDDuc4S3AB8YnI4IzLfE - dRnZoSCkeh8Izd7SJK9PeFIQBbDmNnFxWtJQ54kYoMJCtAbjGRN7YebISTQRLlVx+843B1dCgkBT - rhWXDqUu1yyMlT6I488vcsQW7l8wMXY6/HrtHlQ9K6iPkdxXBXtSw/CnIRbGK9YcTJqtpiuNWT+k - ZkErZSMw1L8z5+3SmiqufzCBfzTmzQRk3kQXmOp3qJPESmSVDKKEsLT5TlNgcWgGlBk+lCkPc2sy - ce8rGUAy692Y25O11I2aISUO9qU3ppXZ+G2dbpwuDqLvkGbs34UZrvQZp1sqRaBqRET7OC8evDg2 - mKVdUTaFy/s0H1GvFcw4XsTtWDFVOZ+lJg+t7IAwDt1nnnB2bcB+HKzhPdqykhp9p+NVw4yzHW69 - R+HRrvb0JisVhNZ/jwWpHZRHQmiE1XqUuMnfM2GMQlevpKZFiNjInl79Mlu62OMuJrY3L3mjolBb - ToJcymBZJZi8jIQkhhtp3nbs2xBd44vukXumh/Zaj85/kuQMGn3WtN6REGkpGaYDL2y4f3w+L4mT - kDIS4rU2P3wLQv6OlRFI1SV21FfeFEGtKxvGSb2hOHEVJZE23OfVsshe0Mi7j3C3YGoCk0t1qAAI - ZVxVDUGozbDGZdakFZaHO7wsU3y25K91j2Si8T/IO8ORu0erjmT8elk9GWgdveHl4JuQoRRtwCfr - zyDGqm5STX1OeMqex2E3sGQ+oMfzQ7dSHM3JvXJ+CA9QjEkm8/5lSoJrm40m2oY9E7ZM3HKq/DK3 - P0+3BbdLkle0pRGBG1tcj2bZT7+5j+2/Q20bRbxXDK3DQESZHkinOQz6DT/g0Rc+vDXZ+vSfBuzb - K8f6ywXkTXsdlVzQ4v92Pd4F/HYJAt1pcttwXK81iH2mZJSJtZDCO58AJu2LXXIRF4cq7QB9AI1T - QsI4ZBD/rXOasREvCUUyQ7Qx1DE78c8nh+SPlpvIisfJWIKE5DHh66XSfy6V09Kf7BFYwYPQChub - dLAB7os04pAo8Wh1rehMTj/NMFjH0/jpO/q34phrfW1nKbAPUgb5VqLlFiE73CQ6leRZD0YLTXmw - mN303FrEoLoTRBXS1I7L+lGN7NU8vmSm7mFwOIARIYKadPlZ6tlobkrLqNSVRtpShvirC2NhDHuU - B2C9F2Q/OBAbAfE2X8mgwIfwxrIP8GZF9lfPgNDsCyWPFzhnOqGsCzG8gaFXY040l99i4EdH5Fov - rc2gJOl3YpOvN+c6BLvn/CJ4yAiCHtBy4q1JeTKaFUCRUtl/6B/tG3yJAfqDM6Y98lUZaRjovBEf - pt79h6tjd/B3/vOkIaGonbAgVUQC/GeJq1kSLRS5XsEwtlUFVD5t/vT1wVamK6HxUEkbvQ4+mtwW - I09FReMw2mm8yDBgh2IQUI7B/ebtxmZGMFX+weR9H3jbhKGjSwQCk49S7mVfz6E00ISzNJw= + xAXz/dZzMeE3+X7jvBJ3wgVXvMgWswQ7PAs7h8WJs418cczNYT2n2O0ZuOvydMfGav00QaklKrdb + vKNiB8OySi0HozDr+5msKCrSkWUAHeEjlJ4UXOpb9CRWGkViKe8bp98cJCQ3tRKGwQpK0gCXGolN + 94ApR2yGduYxklRKk+u81CkZOG0fLtyy4UetKo2vkH1zRU00CWyRfqIIiGn4GNs4ZJvz4vX6t0GJ + wHTfgNPuTs1tebzhblz+qBdHmPLWTljlXz8gBPUyG5v5Dx4n1nqU/ccDibZ1tdteVL6XQaA7dzzV + V99HgKeKRHmdFFm5MszjYiYfAdRIWUzkU3L3a4JXPS5Xa/PGqD5bfmYIed6ikeEFkLtejUfpdUYc + LrSClmEvBp4obGhJB7XpqL+uYuYOmIATyfN0e0FnCebIWhM1UB04UzRYmFAP+1yaHA2YFtHbbhIc + 0FOv1Xwye5fIAC7EUIRJtdMC6fCMdVGWe2qN4qlcKOZyHyMmUAq3ADSEa30sXzAGrdO5BJGWX3M8 + ICSEPENfwo4T+w1IhaIq3+z7TmET/8GZ71prJOMFMviI4lzDdwmfkAey32GnzoYJuryyP7hciY1d + X2GoVwHIW7/kM/0XwbcWOkv9tn3p9yXg5RaVbVxSfeBvtFrXx0S1jowsgGnqqB5N/LZ94fBjUnF+ + QjeHUW5FuuXlPmMjM5npRG6AMLpT9HGUNVaPisNfh9XdWUUnJvwTU4VKWFZm8yrQK6BFecuwsfBW + afU1XQYp3hU4Qtw5t+Pq/8tdZHUjvbLCwSoYBWCS5cTp2gnnKTvVb9VT3mkDUZ6RLY6fc88yKAOr + LtbSQ9ckyjOvR96XPNftfUMSEPF0nepnpcrriWlgs67O3QSncaEsvBitVPKTmeiuy1Qc8d8jW1Bo + IbgKJynh+hif/NsU47UP4dvKxJofPNztDblMRmh3ZewGAT4/TnSCBBHFdc3FvEVTHyYf9pX6l7iS + tDBD1A/AmSbAeTJrkD190EBgfxu7cS9GP5W3Oyw5GebgI62ohr6aUM/jjaH6HPzxDAMHbHmFPwWm + x3l/WdGB8RsrjJS4luxvhpFPSZ8tY/Ds5Xt2VkXaX9MM+piDPPZJ7Cos6ZI4NOJ/42Imd+rDauxc + +jJ811gcoGiJRPzq+jTOWpn1DRbwV/9hgbzV2Y/+lkfLuS/gww1oGb/g2MUMg0JpEiYPbwqtiFqd + LGt++D6K9Ga42ujA0mFRAlQKuyBZBOtHmadn3s2L6CkPfTwh+6hM9yquQyCLaEPsBpUzU+XYk3+C + Iu1JWrovuEpiHMkkB9afd78ZLkl6x1M4bz6VYsuVi+1ysLI0eeOTGU2x7/bh1e/D65yev43JN3SW + sdHMvWOLt6X4A3Kte788iZwnWbSavt++3lZb/tZfW1a4wUnA6GL4dOlL3IBCa4/yx2Wysp3tEA1s + Ff0otTX27I+h+zldWac6h4EXVuC+uTjMev/QHOlJDB+fpyBCitSVFaOcEyVwZYgg8BurdG3Us2uK + JsF9j//DbqcVw46wctcZRSuu+5GIGFQDPLHqvfP5EGqJ6HryCD0Nb65ykWkGO7a6ojVqaupDf+RZ + KATnAgAT9zqUFLha5EC2b4u3mt4N/G9b6WZWHU0211royjgVazk7BwMazdeht7qmcgyJ2WegDamZ + 2hM7jbZ4voQde74fpM/ilVtLjB3tyEAAkMNynericOmLOK16AVGDNCbFZ+AOxEfpWeHjtW+unV1W + wsuUNGDotPlJzKg9nLdjJRUJmjwvyBgOokTYwK3sZQmbX/llT7uZuGwk5vZS6OcU87538es6AK/j + XcH7wTyVNbSC8NUebESdYznML/7o5dsHjYPqyL9DNQ2pXtHpQq4DMGaGfKKxkQvFKyDfmARMacbr + AovMzI+ItGvWxPDAW/5MJPxVkzbP3PwrJXF7Ddhj7HEW8nBCpCY81HArh1fyifYtASO97uBKybAr + UaunQ0UEFnz2o4VGduPCTzbBGZlDfEmBnTucVGpC9SSTvmWzfu8OkBucivuaSYQe7vI/AbPfNNZx + MhtKucDm+4mZ+AbgRf/JAuZrjmqbnQxa+I6vx3JgBzhH/Pjg6sDZdyY16tZvya7/UVJVToIJF+BC + TI7nBbBwSWvmeWAjhfHdFUXanxn0ncpfaWXPHtNRfle2iwZoQaoXKalJGpVQqwDQd2E4Ap4e09is + IK/FaVaZ4bia2Z9HC2Y5tbnHSRozfDiuymrWner8mlr0vIhfWjfmk7iPXmDfuA7tbp6yaf8korNH + XIJDnqhzZkJVX/mxILJ6g398LLx7WnjuwgdTUYdJmQ/zao/vL6MzSJ46vjyyg0ELJw+Ub1AqrrRQ + w8WNnfFw6CMnnVCQ2Y8t2rOH0CgJMjXiVGZGdzISLR4tLp8EsB5Bhxf4+er0IgXAEs/RNwOBTRKY + dTGIZFla6vS+zbjwef15EsT67A6gHeZxDqCxYC3xjIM0Qz79Xuvz0vc2+iF4M1LrVlpamP8okoiS + qj0O7QbDjCAXWcYShcWMQI/WlEi4f90ZFBlgU8LkOvt0VCYmIGGlcfXlzLTEhHfREH9ICWSffzzs + A9VUIB8htHXvUVQVYov0fZVDHLkSiM3W3lZvXg3/fP55ah7SkQZDQo6YZnnlJBxf+vOdT8xBvUM8 + SC6A5oDEGfRb0zlap9r8xS6K0CsQdLja6EfKHLfRtp4g/KX+52K2Sz39MOmvnZ7VwdOhs5I= Index: client/1.0/neutral/pkgr.eagle.harpy.asc ================================================================== --- client/1.0/neutral/pkgr.eagle.harpy.asc +++ client/1.0/neutral/pkgr.eagle.harpy.asc @@ -1,18 +1,18 @@ -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository -iQIcBAABCAAGBQJdwuz9AAoJEFAslq9JXcLZLrQP/1quy2q2tao4bGkR29oDg56P -VBc68F7VCt3slnRpkjseLeOBoK2JNGxTZp2dkgODHxkeseLypCfkS2xiiwZS0c6Q -zInz66QCLgnKT370Vst+Qa1yeJKYLfOUsT1D4zT7mvMJ0Fnm/SxmZplIBrjBY+XX -IjdAtgWaXgDke14ugi+K+2itB4I/SnJigrO0QVRDzIOZfWoZl48PBjxfiPeO7pPE -BZno5e+vGcM0BEsJlX3vlQcv4W47XABUC05Tz6X4Md2Xhnnb64SSSG1XpLklCuEb -X9g0GkKIB/6aXh5Uct0Jg09N8wpR1UjZkWI+t7ZFXOowucbBsFgaHJfTch0ojON/ -6JpdWl2sXoZKsdKxa3fHvAzhobhwGUkjEhi5Kxc1T2484deKYV+SPQ9HU+Vdmih5 -4D7bamBwy3rCru3sU69nKHFRxrqa38Hl4IgODA7SnqGgpM9J78cZfqlm3DDN2WXl -EDeKyGye30gciJA+iUHcOu2a1soxcwYcyvVsQ+tEEOfd5Nk2vwlsdcHZKrp3FvPE -xNB8zpNHoFjbkeRTxp8zZHrB7DS+WxODhIPAOQxZ78DuCEhvNSKhqPEVoSt/l7Hr -2o0QUjOniI2XHEhCbpbkj/x3ogmZ5rNcWn9y8kYtqGrXn2PgjxPz1Erof01N5fFK -TCMiWvCssnb7qhdhxty9 -=8T2C +iQIcBAABCAAGBQJefmhyAAoJEFAslq9JXcLZveUP/Rlt1T0DafCi0c1cBSaRSg+a +aOB61P5V7ZJieuL7RE1utJUE13IRR3vCfmfjVJjD1WETRmPafBCU/XD/eIvI/Tqv +KleBiCMIFrA5g21TxF1YxrFmcS3BKixzduSCyJWZI0dtG5QmMN0PcWzNMtu9nnFd +TpNazqt6UcIiw4vIq8gx0NXo0c/2bPZa9Hxs3LDJO/lgHJEOHvaJY7JfE0vhFcfT +6UlqJ0p1QfdSda95cc55Takg0dAQaAKNtWvXXIInMMf/O/miexh4uS1KNGx+f61U +ApF6fCQfn0gHTfGHv7zrccvwy8WCinHuwqj6IIms0vXk13SXBc4ZcKUVGNDLWxhZ +qz9rAnTqtZujphUO0z0oDleRj8k+IbJXj4fCdmkDNEaGVSyZu7nps8p9SWtwrFs9 +d50THrSeAk5nM+VWaw4fsZ7q8kbFb3r0ANx9SfnGmFmhZMZWUdln+BFn5y8CrzEg +AJm4ShGtznj2ntJLHkBaesDswsTmDASb9QrkDIlZKm9pnjFleTMXW/TcQHnLBlYH +o+aO+XRBAGqSDaAoTrSsXKlm4XW04IMPLgJOaHO+EbhTBRbb2Rh/AEmd4oZb21WL +Ag+qqcFwbNmSfUooO6mtZUxX2BRKEg6BSWpB/nT35yG8c/KwrURW8KHBqLUTpNUK ++ZzhBCUKDu05xmE1heJU +=VxHM -----END PGP SIGNATURE-----