From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: =?UTF-8?B?VG9tbWkgSMO2eW7DpGzDpG5tYWE=?= Newsgroups: gmane.lisp.guile.user Subject: Participation to Guile Potluck 2021 Date: Fri, 26 Feb 2021 17:18:38 +0200 Message-ID: <01fd4d51-05d8-c31c-c27d-2c3519e5f9b7@gmail.com> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="NdupAo1XyWHE974BvQVgPcaJ8FLfEryxj" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="9207"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.6.1 To: guile-user@gnu.org Original-X-From: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Fri Feb 26 16:19:19 2021 Return-path: Envelope-to: guile-user@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lFetj-0002Hg-51 for guile-user@m.gmane-mx.org; Fri, 26 Feb 2021 16:19:19 +0100 Original-Received: from localhost ([::1]:60212 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lFeti-0005UT-7g for guile-user@m.gmane-mx.org; Fri, 26 Feb 2021 10:19:18 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:54968) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lFetH-0005U3-On for guile-user@gnu.org; Fri, 26 Feb 2021 10:18:51 -0500 Original-Received: from mail-lj1-x22c.google.com ([2a00:1450:4864:20::22c]:43446) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lFetB-00011K-9G for guile-user@gnu.org; Fri, 26 Feb 2021 10:18:51 -0500 Original-Received: by mail-lj1-x22c.google.com with SMTP id m11so10133854lji.10 for ; Fri, 26 Feb 2021 07:18:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=to:from:subject:autocrypt:message-id:date:user-agent:mime-version; bh=yTc6+3HqA+NIQIStgTy3XM4e31oe/lV74UuiHD0EOKE=; b=JeiAhkO/oENk0AjRVyIueJrJxyfwNyJnTe+G4Q7B101wYhP7xg+0SSsp+rCBdeeULm Sl3pKHlh3GKDxzMdZL/vEkqh4XXRlkjGOl6raVEX+VJEg1g4ZjHIqGNeo2WjhNzYVbTu Si6UQBT24TonskUxxXY3uJ6wF0RWgnslFLs4Ww58+InQy8E5oa/zXb9tnzLPB/rdhMjl 9SUZcKlc/+qSsnBO4Dy7e71ynKH4Bcs3taA+U2EBGujI9hPTMxn6J7hduDIWu9u4mCre LDp79ypR1GB5oDearH/xhU4FTVWqWLco1kX3Evgn01sYgS0nvbsyhM7xFKM0Ld5qlj+Q wk9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:to:from:subject:autocrypt:message-id:date :user-agent:mime-version; bh=yTc6+3HqA+NIQIStgTy3XM4e31oe/lV74UuiHD0EOKE=; b=YY02wCGNJxB0nng7Re/xTKNMKMU1jMLDvtw8/l9KhlBjcvHz+2O2vs79ceQwoLn6+f 9FLfZy/oENZbqPcunm1A4aPMR9Oq53hsmXhA24BF/k52K7oMGV6BLyqVN5TMCHtuZRdX fXZ7kiLusDvAoJ5fa5wqN7Luz9xAJH+ovZcSBfzGjcGLbg1bh2QZ+1oEMzucQqLE2Ngr osScuipUtPscOS3s5Q7s5n6BdJ5J0GaYgmI35Rzzo27X6RXbe8o8i2MJ9XI5XEzv+FCV /297lC6v9xFwcqReXOo8Q0pizbaUxHeg1eV+/mtsuSo0ay/6FIJ9x/z8VBFcA/KnPceH WS5g== X-Gm-Message-State: AOAM53347Mw6TLkaxGdkDwMiUB/J4Wty07U2pBkTT+RGQWY9fvUo4uf9 UCrxVUtmbainMp5ytEMnf3fAfUAhrQ== X-Google-Smtp-Source: ABdhPJywu1AYDmqMkW30Ik5UiTc4mt9fHQPEcpqRdkboagQBeXLUTW2sU/AbJtgiVcY/T9gD7G0Mdg== X-Received: by 2002:a2e:5315:: with SMTP id h21mr1918847ljb.299.1614352720821; Fri, 26 Feb 2021 07:18:40 -0800 (PST) Original-Received: from [192.168.43.143] (mobile-access-bcee37-137.dhcp.inet.fi. [188.238.55.137]) by smtp.gmail.com with ESMTPSA id z9sm1427993lfa.173.2021.02.26.07.18.39 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 26 Feb 2021 07:18:40 -0800 (PST) Autocrypt: addr=tommi.hoynalanmaa@gmail.com; keydata= xsFNBF+7UosBEAC4Uv03kSVIAHjl5FhbxqeLU8fQ6tQjEzbvOz0eqls5ShMLYVBUH5PubV9A wOjduQchWtrLgwwSz21TJm8ND2qqTjydYT+hs3AGw/F5Jq4ShXE7SobpXa5LDAvLe8k2PJ20 iSN7t3x6flTTph3Jz6BnH0IGGmdKh3arVdWYJ86whaI9hYqmK3TzD8d21wXA5Q8RlKt3008i G0cd4QEYlYkEXIWTd50q0dXr/YbNBKI2hmarm9kJ9Ihh7lauMeJeRllbtl1tCw2NY8KICNOV ZKcUZMZvRv8tzqwONXHzVpiCr4f9ZH4ltz+lXcCAYmSWd4mVSC1opZamWOeBfqda8YUOKDdJ dmImEfk5Q2IC/DTqt5FgA5Oi8FiIvUhsqkstVn11bUqREid0wd5/qfARiQjy0wdNmFpDh9pL qWm1n1nQvt9gtCm8yRY3MqFGVKlPyINo+xsiihUArAQ114Lc6gStM2F4HOqWuZx8hxlgmJb0 tLB+tF7twyfBbIdMKKWYrVElN1otQv5MmNrF4g8MJ9xoqHcNYuz8miAI5g2aXzvi3Ftum11U JrkcTL5PFgvfL/4zo6SnH49MOQSWRE47g8sxKIZpYs/h79g0kjfFPF7YPa+oJnCvQWpAb8Ge C9TrUUv+g74MhxpBX+QckpxM8VjYMNZBOVUHeQy6GzSXkdyIVQARAQABzTJUb21taSBIw7Z5 bsOkbMOkbm1hYSA8dG9tbWkuaG95bmFsYW5tYWFAZ21haWwuY29tPsLBjwQTAQgAORYhBFX0 JHdxVTUoXLIreruGH95ARg+DBQJfu1K Received-SPF: pass client-ip=2a00:1450:4864:20::22c; envelope-from=tommi.hoynalanmaa@gmail.com; helo=mail-lj1-x22c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: guile-user@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: General Guile related discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Original-Sender: "guile-user" Xref: news.gmane.io gmane.lisp.guile.user:17317 Archived-At: This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --NdupAo1XyWHE974BvQVgPcaJ8FLfEryxj Content-Type: multipart/mixed; boundary="JADIPULMP27p1Wwplb2bgYiN2Fh7x98w8"; protected-headers="v1" From: =?UTF-8?B?VG9tbWkgSMO2eW7DpGzDpG5tYWE=?= To: guile-user@gnu.org Message-ID: <01fd4d51-05d8-c31c-c27d-2c3519e5f9b7@gmail.com> Subject: Participation to Guile Potluck 2021 --JADIPULMP27p1Wwplb2bgYiN2Fh7x98w8 Content-Type: multipart/mixed; boundary="------------12A831D795AA4346A3EA48B8" Content-Language: en-US This is a multi-part message in MIME format. --------------12A831D795AA4346A3EA48B8 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: quoted-printable Hi I'll participate to Guile Potluck 2021 with this patch, too. It improves = the cumulative time measurement in statprof so that the time spent in=20 recursive procedures is computed correctly. =C2=A0=C2=A0=C2=A0=C2=A0 - Tommi H=C3=B6yn=C3=A4l=C3=A4nmaa --------------12A831D795AA4346A3EA48B8 Content-Type: text/x-patch; charset=UTF-8; name="0008-improve-statprof.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="0008-improve-statprof.patch" Description: Implement corrected cumulative execution time in statprof Author: Tommi H=C3=B6yn=C3=A4l=C3=A4nmaa --- This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ --- a/module/statprof.scm +++ b/module/statprof.scm @@ -355,13 +355,16 @@ =20 (define-record-type call-data (make-call-data name printable source - call-count cum-sample-count self-sample-count) + call-count cum-sample-count corr-cum-sample-count + self-sample-count) call-data? (name call-data-name) (printable call-data-printable) (source call-data-source) (call-count call-data-call-count set-call-data-call-count!) (cum-sample-count call-data-cum-sample-count set-call-data-cum-sample-= count!) + (corr-cum-sample-count call-data-corr-cum-sample-count + set-call-data-corr-cum-sample-count!) (self-sample-count call-data-self-sample-count set-call-data-self-samp= le-count!)) =20 (define (source->string source) @@ -387,6 +390,10 @@ (set-call-data-cum-sample-count! cd (1+ (call-data-cum-sample-count cd= )))) (define (inc-call-data-self-sample-count! cd) (set-call-data-self-sample-count! cd (1+ (call-data-self-sample-count = cd)))) +(define (inc-call-data-corr-cum-sample-count! cd) + (set-call-data-corr-cum-sample-count! + cd + (1+ (call-data-corr-cum-sample-count cd)))) =20 (define (skip-count-call buffer start len) ;; If we are counting all procedure calls, count-call might be on the @@ -424,7 +431,8 @@ (and call-counts (hashv-ref call-counts entr= y)) 0 - 0))) + 0 + 0))) (hashv-set! table entry data) data)))) =20 @@ -443,12 +451,16 @@ pos))) (inc-call-data-self-sample-count! (addr->call-data (vector-ref buffer pos))) - (let visit-stack ((pos pos)) + (let visit-stack ((pos pos) + (visited-data '())) (cond ((vector-ref buffer pos) =3D> (lambda (ip) - (inc-call-data-cum-sample-count! (addr->call-data ip)= ) - (visit-stack (1+ pos)))) + (let ((cur-data (addr->call-data ip))) + (inc-call-data-cum-sample-count! cur-data) + (if (not (memv cur-data visited-data)) + (inc-call-data-corr-cum-sample-count! cur-data)) + (visit-stack (1+ pos) (cons cur-data visited-data))))) (else (visit-stacks (1+ pos))))))) (else table))))) @@ -502,13 +514,15 @@ =20 (define-record-type stats (make-stats proc-name proc-source - %-time-in-proc cum-secs-in-proc self-secs-in-proc + %-time-in-proc cum-secs-in-proc corr-cum-secs-in-proc + self-secs-in-proc calls) stats? (proc-name statprof-stats-proc-name) (proc-source statprof-stats-proc-source) (%-time-in-proc statprof-stats-%-time-in-proc) (cum-secs-in-proc statprof-stats-cum-secs-in-proc) + (corr-cum-secs-in-proc statprof-stats-corr-cum-secs-in-proc) (self-secs-in-proc statprof-stats-self-secs-in-proc) (calls statprof-stats-calls)) =20 @@ -534,6 +548,7 @@ (proc-source (and=3D> (call-data-source call-data) source->stri= ng)) (self-samples (call-data-self-sample-count call-data)) (cum-samples (call-data-cum-sample-count call-data)) + (corr-cum-samples (call-data-corr-cum-sample-count call-data)) (all-samples (statprof-sample-count state)) (secs-per-sample (/ (statprof-accumulated-time state) (statprof-sample-count state))) @@ -547,6 +562,7 @@ proc-source (* (/ self-samples all-samples) 100.0) (* cum-samples secs-per-sample 1.0) + (* corr-cum-samples secs-per-sample 1.0) (* self-samples secs-per-sample 1.0) num-calls))) =20 @@ -577,9 +593,10 @@ (sorted-stats (sort stats-list stats-sorter))) =20 (define (display-stats-line stats) - (format port "~6,2f ~9,2f ~9,2f" + (format port "~6,2f ~9,2f ~9,2f ~9,2f" (statprof-stats-%-time-in-proc stats) (statprof-stats-cum-secs-in-proc stats) + (statprof-stats-corr-cum-secs-in-proc stats) (statprof-stats-self-secs-in-proc stats)) (if (call-counts state) (if (statprof-stats-calls stats) @@ -599,15 +616,15 @@ =20 (if (call-counts state) (begin - (format port "~5a ~10a ~7a ~8a\n" - "% " "cumulative" "self" "") - (format port "~5a ~9a ~8a ~7a ~a\n" - "time" "seconds" "seconds" "calls" "procedure")) + (format port "~5a ~10a ~10a ~7a ~8a\n" + "% " "cumulative" "corr. cum." "self" "") + (format port "~5a ~10a ~10a ~8a ~7a ~a\n" + "time" "seconds" "seconds" "seconds" "calls" "proce= dure")) (begin - (format port "~5a ~10a ~7a ~8a\n" - "%" "cumulative" "self" "") - (format port "~5a ~10a ~7a ~a\n" - "time" "seconds" "seconds" "procedure"))) + (format port "~5a ~10a ~10a ~7a ~8a\n" + "%" "cumulative" "corr. cum." "self" "") + (format port "~5a ~10a ~10a ~7a ~a\n" + "time" "seconds" "seconds" "seconds" "procedure")))= =20 (for-each display-stats-line sorted-stats) =20 --------------12A831D795AA4346A3EA48B8 Content-Type: application/pgp-keys; name="OpenPGP_0xBB861FDE40460F83.asc" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="OpenPGP_0xBB861FDE40460F83.asc" -----BEGIN PGP PUBLIC KEY BLOCK----- xsFNBF+7UosBEAC4Uv03kSVIAHjl5FhbxqeLU8fQ6tQjEzbvOz0eqls5ShMLYVBUH5PubV9Aw= Ojd uQchWtrLgwwSz21TJm8ND2qqTjydYT+hs3AGw/F5Jq4ShXE7SobpXa5LDAvLe8k2PJ20iSN7t= 3x6 flTTph3Jz6BnH0IGGmdKh3arVdWYJ86whaI9hYqmK3TzD8d21wXA5Q8RlKt3008iG0cd4QEYl= YkE XIWTd50q0dXr/YbNBKI2hmarm9kJ9Ihh7lauMeJeRllbtl1tCw2NY8KICNOVZKcUZMZvRv8tz= qwO NXHzVpiCr4f9ZH4ltz+lXcCAYmSWd4mVSC1opZamWOeBfqda8YUOKDdJdmImEfk5Q2IC/DTqt= 5Fg A5Oi8FiIvUhsqkstVn11bUqREid0wd5/qfARiQjy0wdNmFpDh9pLqWm1n1nQvt9gtCm8yRY3M= qFG VKlPyINo+xsiihUArAQ114Lc6gStM2F4HOqWuZx8hxlgmJb0tLB+tF7twyfBbIdMKKWYrVElN= 1ot Qv5MmNrF4g8MJ9xoqHcNYuz8miAI5g2aXzvi3Ftum11UJrkcTL5PFgvfL/4zo6SnH49MOQSWR= E47 g8sxKIZpYs/h79g0kjfFPF7YPa+oJnCvQWpAb8GeC9TrUUv+g74MhxpBX+QckpxM8VjYMNZBO= VUH eQy6GzSXkdyIVQARAQABzTJUb21taSBIw7Z5bsOkbMOkbm1hYSA8dG9tbWkuaG95bmFsYW5tY= WFA Z21haWwuY29tPsLBjwQTAQgAORYhBFX0JHdxVTUoXLIreruGH95ARg+DBQJfu1KMBQkFo5qAA= hsD BQsJCAcCBhUICQoLAgUWAgMBAAAKCRC7hh/eQEYPg4x8EACN6nozccEeGXDTlPgpgTa9evi89= PYF 82YMvIdu2S6YDFMQs5O3glQxbuprsvU2ZbchnYfjjnq8GWYxNjsYXOBrH2u90qrSSfM5pdkLB= fY9 EmZlh8tIa4CrPLMS1nQ88xKemfOLN492ZVX7mbtBhFS9V9gxT13R03S42H7LdtIpzq2ENY0kh= Wv8 4lBIT2HhPYSotvxY+0QFZZ2037lxE24U5Dc19ydQAcU61kTaOYmzjkVfJBak+wf3M9Az5TH5Y= umc KgWTMdOHDmqEps5n3uaCDe8A52JLakG462sBwruOikmzw0Hjlv1MLrhnaDxew5Ye1ah88BLvO= QCE q/IPppQTdiwcv1MoauDIAb8l4VsuDD8bUtnsh6rMFiD/G2QpGnQLGWoQTxxnzpafx8iSjqiE1= HUw wSsFpkB2t5i54Xtu0NNBQC6pcYWnaT2SGsw21qwONPF8FwEcMRS/8zmUN/yVhq+qJm0nm7Sf9= beK HGBKOAsEjiQovS5QKP4Jcp/NwjjcF3yK7iBvVeTFIf198ECkdJW/ONG6EhutxVKaAPs+zjRPM= cog qkQnrYen61z+1aSSvrD2cZ5U/WfTXkTA+ZLqald8En6yEK3WnQnp5vQQTb2w7yaOUM+6ZrDWV= 5PP qQzw1f2sAJ6NcaaOAjRvflElbrpvoKzgOahDlLGrxmOHac7BTQRfu1KNARAAymg3rs9Hd/e0k= OFA gzQYMDR8IQuCO3aOkBRD5JBLZnGFDqZa7NDSm6dXvbiQbtOXpYFBtunQa+g97JN422KDes4GA= jpY wAMxhdRUyFjpMcNPPEX2RGU0OguGnUdlN3FIdCVFIFT1PFvjIB5BDTN10Ycd35o7Txoy2xgO3= Gwu NU6Jw3RMMD5EO3NNCYrQnzqhcjRm5u35bInH7L+IlloN7T8bu6we9+cvy9SfZJhwU8Dp9aJBI= MLA 5a8gGJ2z+3FkxGCZuuANE2NMHDq/QM5T03pE3g/DfsxfIvPPAUSgu7mrm63XQVBmSuwrMOczI= 2TI n5wNNze8bII3Rvf/lzsnnSAAuM8b63PR/lEOgEUiXBNyhjQIm0rssUX1IevAOP5nKM0IsboOL= Szw WU6leBBu+lj9Cc5tF+7Wv79Al/Rnld8IDjw6e1dnOQ4dmdgsZOHpAN7e737jnWIfh/XfAguBO= zs6 OD3Hi8g/ak5GP60ecI0rnzsU68eQyDFjR8sugsL9i7p86U2C2M2UfMjqomaL6tD3ySR6IZlmg= +2o D0KqnD8D1PNUDmlZDAURPBN4F+2VTYpLcdavPNy7mJSc5girx2dbWeGEJmVJs5+t2+YMi7HyJ= pWW dQ6hW4zx5FdPzzVHUwyZbNLKGrPWzFY6LDyflJYxDmIwEqVo3PB5evPOsPUAEQEAAcLBfAQYA= QgA JhYhBFX0JHdxVTUoXLIreruGH95ARg+DBQJfu1KPBQkFo5qAAhsMAAoJELuGH95ARg+DZNAP/= 1Ur Vj0hm/m8P0hwffe/73r4Ri3OxrxkniGWce7iwkVT4pLA0y7H9PXT+dsqgiEJtdCJ2shcqUMUo= +UL hsbh/KAfeFWXErjFajlKwsOpO6ndu+bmIH2S8Z5OAJ4XKwL74nsapf3Jp3CgzsMmfMps01ekf= QKy pBETwBBvrtEaU3Wob/lXrJXJQOrZ3dez6uSgen1eYc9E1vmsSPqWXWdLHWVnwK1ruP0vHP/MT= o48 0qiwksKyIS4mCTr6gfbo6wsWqWM/gRaW3/SHS0Mnb9ARcb6N+v7k2qyP9O+LqhvvkoXhiKKbF= Uej JO0X+NPMvrJx1DNn6iMl2aDdueO5yMs+/LjBZxzz8Nn3VNZow7zfBVQSTxLTavYalNi4pijkC= Xw2 pRsOOwwVihmK7qyNV0dSMGQ/vRhKXSVUpsqzqwAJ8mo+JTzJF0sr6zHexYczBQZ3HYXnjzmA4= COl GiUNkT+0D4x3h5YqoPYRZw8MfOhnBArMwCZ5/lvyRwIxPeiZp29kX4pBBxV4UvpwShm/nq5lQ= G6P aTndery3rKxW+jZIequ/AJaebQf4RD/ZfdbvqBBBAj54Yn+GdPMYUpyeb464vTlfFSVWjV0SG= dKn UJWAoAuz0JUePOgXDS8zF+4/O1aPYCwzo6wd1sNSTgxNVBYisvRVBTgRwK63UbpK+KoeYz1q =3D3eRz -----END PGP PUBLIC KEY BLOCK----- --------------12A831D795AA4346A3EA48B8-- --JADIPULMP27p1Wwplb2bgYiN2Fh7x98w8-- --NdupAo1XyWHE974BvQVgPcaJ8FLfEryxj Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature" -----BEGIN PGP SIGNATURE----- wsF5BAABCAAjFiEEVfQkd3FVNShcsit6u4Yf3kBGD4MFAmA5EU4FAwAAAAAACgkQu4Yf3kBGD4MN 1hAAnZzZro8UqOKwGkSJ/NR55yFRDkosmbvjjl+M93az+ULwv9lCcZOJ748pcF0qx1f3QBhz0n0w 9VhU5CSb76vbyrMOqut1OLyBgLoR7v9J2kdHBei/U7X/n3uQmRLaGohkU1FPfKdIEw5ijGEWGcc1 /YoyGSDGH1ppiF6ch7d6wWutjCgnub5+WJNiEJps3Lmcc83mhSmElXExvIG2qu94jvmxI5maynPB 7dux+Gv/LvKW24an0Vca9IF3HCDsntl9+op8lqaEjhnX/wOUmquePONo+M7yPQe2ZuJZn/94d9g/ 1Bol9zrNeTG7XJzoklyGe6Gn7u2P6XIV23+kXi+OfEeqhADijOCVzgBP9CKJsPBmvfnjVX22tRMG f1HQ0Was2c+COBKE+UUHUxMh6ecNTXWsTIloU1rmWxFLjQxPuqplaD+pZKCs3ZAotQPIQNpjVaXU ZYTholIV9ZbZF99mvFNTfGd38/QuA1DYbUN9hCjMAx9Hdq2ZU0QkLTQnFpV9Etzd+YK38R+dc4ZB JcEfSfsk/F8lCDjQZK82Z/3HsmuMsgCcBxdeFYavCa+T31gUWAh57QDYStWQckHtdIGoamWLpf/k MeWjJ1ZpCphBJ3+BLHGhDg31TDrrWEXpDSWAa4OPCNopi1Ms0MQKUB5lme/MmLxcfZiYbIIwUz2F LiA= =WOgL -----END PGP SIGNATURE----- --NdupAo1XyWHE974BvQVgPcaJ8FLfEryxj--