Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package perl-Finance-Quote for 
openSUSE:Factory checked in at 2026-05-18 17:57:59
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Finance-Quote (Old)
 and      /work/SRC/openSUSE:Factory/.perl-Finance-Quote.new.1966 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "perl-Finance-Quote"

Mon May 18 17:57:59 2026 rev:44 rq:1353853 version:1.690.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-Finance-Quote/perl-Finance-Quote.changes    
2026-01-03 17:27:52.640865838 +0100
+++ 
/work/SRC/openSUSE:Factory/.perl-Finance-Quote.new.1966/perl-Finance-Quote.changes
  2026-05-18 17:58:01.477148926 +0200
@@ -1,0 +2,12 @@
+Sun Apr 19 06:55:14 UTC 2026 - Tina Müller <[email protected]>
+
+- updated to 1.690.0 (1.69)
+   see /usr/share/doc/packages/perl-Finance-Quote/Changes
+
+  1.69      2026-04-18 11:47:37-07:00 America/Los_Angeles
+       * Sinvestor.pm - trim whitespace before parsing date and price
+       * XETRA.pm: trim whitespace from date-time before extracting the actual 
date value. PR #557
+       * Modified Stooq.pm to send cookies. Stooq requires European visitors 
to their website to accept cookies. Cookies are set using JavaScript. Current 
version of module hard codes these cookies gleaned from a browser session.
+       * Added CurrencyRates/TwelveData.pm.
+
+-------------------------------------------------------------------

Old:
----
  Finance-Quote-1.68.tar.gz

New:
----
  Finance-Quote-1.69.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ perl-Finance-Quote.spec ++++++
--- /var/tmp/diff_new_pack.uZK7aR/_old  2026-05-18 17:58:02.373186028 +0200
+++ /var/tmp/diff_new_pack.uZK7aR/_new  2026-05-18 17:58:02.377186194 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package perl-Finance-Quote
 #
-# Copyright (c) 2025 SUSE LLC and contributors
+# Copyright (c) 2026 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,10 +18,10 @@
 
 %define cpan_name Finance-Quote
 Name:           perl-Finance-Quote
-Version:        1.680.0
+Version:        1.690.0
 Release:        0
-# 1.68 -> normalize -> 1.680.0
-%define cpan_version 1.68
+# 1.69 -> normalize -> 1.690.0
+%define cpan_version 1.69
 #Upstream: GPL-1.0-or-later
 License:        GPL-2.0-or-later
 Summary:        Get stock and mutual fund quotes from various exchanges
@@ -134,6 +134,7 @@
 Provides:       perl(Finance::Quote::CurrencyRates::FinanceAPI) = %{version}
 Provides:       perl(Finance::Quote::CurrencyRates::Fixer) = %{version}
 Provides:       perl(Finance::Quote::CurrencyRates::OpenExchange) = %{version}
+Provides:       perl(Finance::Quote::CurrencyRates::TwelveData) = %{version}
 Provides:       perl(Finance::Quote::CurrencyRates::YahooJSON) = %{version}
 Provides:       perl(Finance::Quote::Deka) = %{version}
 Provides:       perl(Finance::Quote::FTfunds) = %{version}

++++++ Finance-Quote-1.68.tar.gz -> Finance-Quote-1.69.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/Changes 
new/Finance-Quote-1.69/Changes
--- old/Finance-Quote-1.68/Changes      2025-12-21 20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/Changes      2026-04-18 20:47:43.000000000 +0200
@@ -1,3 +1,9 @@
+1.69      2026-04-18 11:47:37-07:00 America/Los_Angeles
+       * Sinvestor.pm - trim whitespace before parsing date and price
+       * XETRA.pm: trim whitespace from date-time before extracting the actual 
date value. PR #557
+       * Modified Stooq.pm to send cookies. Stooq requires European visitors 
to their website to accept cookies. Cookies are set using JavaScript. Current 
version of module hard codes these cookies gleaned from a browser session.
+       * Added CurrencyRates/TwelveData.pm.
+
 1.68      2025-12-21 11:40:59-08:00 America/Los_Angeles
        * Changes to AlphaVantage.pm and CurrencyRates/AlphaVantage.pm to 
throttle queries - Issue #546
        * YahooJSON.pm - Add additional fields/labels - PR #544
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/MANIFEST 
new/Finance-Quote-1.69/MANIFEST
--- old/Finance-Quote-1.68/MANIFEST     2025-12-21 20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/MANIFEST     2026-04-18 20:47:43.000000000 +0200
@@ -52,6 +52,7 @@
 lib/Finance/Quote/CurrencyRates/FinanceAPI.pm
 lib/Finance/Quote/CurrencyRates/Fixer.pm
 lib/Finance/Quote/CurrencyRates/OpenExchange.pm
+lib/Finance/Quote/CurrencyRates/TwelveData.pm
 lib/Finance/Quote/CurrencyRates/YahooJSON.pm
 lib/Finance/Quote/Deka.pm
 lib/Finance/Quote/FTfunds.pm
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/META.json 
new/Finance-Quote-1.69/META.json
--- old/Finance-Quote-1.68/META.json    2025-12-21 20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/META.json    2026-04-18 20:47:43.000000000 +0200
@@ -1,8 +1,8 @@
 {
    "abstract" : "Get stock and mutual fund quotes from various exchanges",
    "author" : [
-      "Erik Colson <[email protected]>",
       "Bruce Schuck <[email protected]>",
+      "Erik Colson <[email protected]>",
       "Paul Fenwick <[email protected]>",
       "Vincent Lucarelli <[email protected]>",
       "David Hampton <[email protected]>",
@@ -143,7 +143,7 @@
          "web" : "https://github.com/finance-quote/finance-quote";
       }
    },
-   "version" : "1.68",
+   "version" : "1.69",
    "x_generated_by_perl" : "v5.34.0",
    "x_serialization_backend" : "Cpanel::JSON::XS version 4.27",
    "x_spdx_expression" : "GPL-2.0-only"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/META.yml 
new/Finance-Quote-1.69/META.yml
--- old/Finance-Quote-1.68/META.yml     2025-12-21 20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/META.yml     2026-04-18 20:47:43.000000000 +0200
@@ -1,8 +1,8 @@
 ---
 abstract: 'Get stock and mutual fund quotes from various exchanges'
 author:
-  - 'Erik Colson <[email protected]>'
   - 'Bruce Schuck <[email protected]>'
+  - 'Erik Colson <[email protected]>'
   - 'Paul Fenwick <[email protected]>'
   - 'Vincent Lucarelli <[email protected]>'
   - 'David Hampton <[email protected]>'
@@ -115,7 +115,7 @@
   bugtracker: https://github.com/finance-quote/finance-quote/issues
   homepage: http://finance-quote.sourceforge.net/
   repository: git://github.com/finance-quote/finance-quote
-version: '1.68'
+version: '1.69'
 x_generated_by_perl: v5.34.0
 x_serialization_backend: 'YAML::Tiny version 1.73'
 x_spdx_expression: GPL-2.0-only
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/Makefile.PL 
new/Finance-Quote-1.69/Makefile.PL
--- old/Finance-Quote-1.68/Makefile.PL  2025-12-21 20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/Makefile.PL  2026-04-18 20:47:43.000000000 +0200
@@ -8,7 +8,7 @@
 
 my %WriteMakefileArgs = (
   "ABSTRACT" => "Get stock and mutual fund quotes from various exchanges",
-  "AUTHOR" => "Erik Colson <eco\@ecocode.net>, Bruce Schuck 
<bschuck\@asgard-systems.com>, Paul Fenwick <pjf\@perltraining.com.au>, Vincent 
Lucarelli <vincent.lucarelli\@gmail.com>, David Hampton 
<hampton-sf\@rainbolthampton.net>, moenny <>, jvolkening <jdv\@base2bio.com>, 
Pawel Konieczny <konieczp\@zonnet.nl>, Mike Alexander <mta\@umich.edu>, AndreJ 
<Andre-J\@users.noreply.github.com>, Vinay S Shastry <vinayshastry\@gmail.com>, 
Bradley Dean <bjdean\@bjdean.id.au>, Chris Good <goodchris96\@gmail.com>, Brent 
Neal <brent\@reindeergraphics.com>, Jacinta Richardson 
<jarich\@perltraining.com.au>, Manuel Friedli <manuel\@fritteli.ch>, 
e-dorigatti <emilio.dorigatti\@gmail.com>, Gustavo R. Montesino 
<grmontesino\@gmail.com>, Paul Howarth <paul\@city-fan.org>, Sam Morris 
<sam\@robots.org.uk>, Linas Vepstas <linas\@linas.org>, Rajan Vaswani 
<111571283+bgr22112\@users.noreply.github.com>, Hiranya Samarasekera 
<hiranyas\@gmail.com>, Przemys\x{142}aw Kryger <pkryger\@gmail.com>, Achim 
Winkler <m
 umpitzstuff\@gmail.com>, Diego Marcolungo <diego.marcolungo\@gmail.com>, John 
Haiducek <jhaiduce\@gmail.com>, Paolo Maero <paolo\@maero.com>, alex314159 
<alex314159\@users.noreply.github.com>, gregor herrmann <gregoa\@debian.org>, 
Jalon Avens <jalonavens\@snave.info>, Sigve Indregard <sigve\@indregard.no>, 
bgr22112 <111571283+bgr22112\@users.noreply.github.com>",
+  "AUTHOR" => "Bruce Schuck <bschuck\@asgard-systems.com>, Erik Colson 
<eco\@ecocode.net>, Paul Fenwick <pjf\@perltraining.com.au>, Vincent Lucarelli 
<vincent.lucarelli\@gmail.com>, David Hampton 
<hampton-sf\@rainbolthampton.net>, moenny <>, jvolkening <jdv\@base2bio.com>, 
Pawel Konieczny <konieczp\@zonnet.nl>, Mike Alexander <mta\@umich.edu>, AndreJ 
<Andre-J\@users.noreply.github.com>, Vinay S Shastry <vinayshastry\@gmail.com>, 
Bradley Dean <bjdean\@bjdean.id.au>, Chris Good <goodchris96\@gmail.com>, Brent 
Neal <brent\@reindeergraphics.com>, Jacinta Richardson 
<jarich\@perltraining.com.au>, Manuel Friedli <manuel\@fritteli.ch>, 
e-dorigatti <emilio.dorigatti\@gmail.com>, Gustavo R. Montesino 
<grmontesino\@gmail.com>, Paul Howarth <paul\@city-fan.org>, Sam Morris 
<sam\@robots.org.uk>, Linas Vepstas <linas\@linas.org>, Rajan Vaswani 
<111571283+bgr22112\@users.noreply.github.com>, Hiranya Samarasekera 
<hiranyas\@gmail.com>, Przemys\x{142}aw Kryger <pkryger\@gmail.com>, Achim 
Winkler <m
 umpitzstuff\@gmail.com>, Diego Marcolungo <diego.marcolungo\@gmail.com>, John 
Haiducek <jhaiduce\@gmail.com>, Paolo Maero <paolo\@maero.com>, alex314159 
<alex314159\@users.noreply.github.com>, gregor herrmann <gregoa\@debian.org>, 
Jalon Avens <jalonavens\@snave.info>, Sigve Indregard <sigve\@indregard.no>, 
bgr22112 <111571283+bgr22112\@users.noreply.github.com>",
   "CONFIGURE_REQUIRES" => {
     "ExtUtils::MakeMaker" => 0
   },
@@ -85,7 +85,7 @@
     "feature" => 0,
     "open" => 0
   },
-  "VERSION" => "1.68",
+  "VERSION" => "1.69",
   "test" => {
     "TESTS" => "t/*.t"
   }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/README 
new/Finance-Quote-1.69/README
--- old/Finance-Quote-1.68/README       2025-12-21 20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/README       2026-04-18 20:47:43.000000000 +0200
@@ -1,5 +1,5 @@
 This archive contains the distribution Finance-Quote,
-version 1.68:
+version 1.69:
 
   Get stock and mutual fund quotes from various exchanges
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/htdocs/index.html 
new/Finance-Quote-1.69/htdocs/index.html
--- old/Finance-Quote-1.68/htdocs/index.html    2025-12-21 20:41:05.000000000 
+0100
+++ new/Finance-Quote-1.69/htdocs/index.html    2026-04-18 20:47:43.000000000 
+0200
@@ -66,7 +66,9 @@
 our <a href="download.html">download
 page</a>.</p>
       <h2 align="center">News</h2>
-      <p class="new"><b>2025-Dec-21</b>
+      <p class="new"><b>2026-Apr-18</b>
+        Release 1.69 is available from CPAN and Sourceforge. Added TwelveData 
currency module. Fixes to Sinvestor.pm, XETRA.pm, and Stooq.pm. See the 
"Changes" file for more details.
+      <p><b>2025-Dec-21</b>
         Release 1.68 is available from CPAN and Sourceforge. CMBChina.pm 
removed, USBonds.pm added. Restored throttling in AlphaVantage.pm. See the 
"Changes" file for more details.
       <p><b>2025-Oct-18</b>
         Release 1.67 is available from CPAN and Sourceforge. Fixes to 
ASEGR.pm, BorsaItaliana.pm, TesouroDireto.pm, MorningstarCH.pm, and 
MorningstarUK.pm. Added new module, SwissFundData.pm.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/AEX.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/AEX.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/AEX.pm     2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/AEX.pm     2026-04-18 
20:47:43.000000000 +0200
@@ -28,7 +28,7 @@
 use Web::Scraper;
 use String::Util qw(trim);
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 my $EURONEXT_URL = "https://live.euronext.com/en/search_instruments/";;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/ASEGR.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/ASEGR.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/ASEGR.pm   2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/ASEGR.pm   2026-04-18 
20:47:43.000000000 +0200
@@ -30,7 +30,7 @@
 use Text::Template;
 use JSON qw( decode_json );
 
-our $VERSION = '1.68'; # VERSION 
+our $VERSION = '1.69'; # VERSION 
 
 our $DISPLAY    = 'ASEGR - Athens Exchange Group, GR';
 our @LABELS     = qw/symbol method instrument name isin currency last close 
high low open volume isodate date/;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/ASX.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/ASX.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/ASX.pm     2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/ASX.pm     2026-04-18 
20:47:43.000000000 +0200
@@ -43,7 +43,7 @@
 
 use vars qw/$ASX_URL/;
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 our $DISPLAY    = 'ASX - Australian Securities Exchange';
 our @LABELS     = qw/symbol ask bid p_change net type name last price volume 
currency method/;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/AlphaVantage.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/AlphaVantage.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/AlphaVantage.pm    2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/AlphaVantage.pm    2026-04-18 
20:47:43.000000000 +0200
@@ -33,7 +33,7 @@
 use JSON qw( decode_json );
 use HTTP::Request::Common;
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 # Alpha Vantage recommends that API call frequency does not extend far
 # beyond ~1 call per second so that they can continue to deliver
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/BSEIndia.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/BSEIndia.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/BSEIndia.pm        2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/BSEIndia.pm        2026-04-18 
20:47:43.000000000 +0200
@@ -24,7 +24,7 @@
 use constant DEBUG => $ENV{DEBUG};
 use if DEBUG, 'Smart::Comments', '###';
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 use vars qw($BSE_URL);
 $BSE_URL = "https://www.bseindia.com";;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/BVB.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/BVB.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/BVB.pm     2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/BVB.pm     2026-04-18 
20:47:43.000000000 +0200
@@ -1,5 +1,5 @@
 #!/usr/bin/perl -w
-# vi: set ts=2 sw=2 noai ic showmode showmatch:  
+# vi: set ts=2 sw=2 noai expandtab ic showmode showmatch:  
 #
 #    Copyright (C) 2023, Bruce Schuck <[email protected]>
 #
@@ -33,24 +33,34 @@
 use constant DEBUG => $ENV{DEBUG};
 use if DEBUG, 'Smart::Comments', '###';
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 my $BVB_URL = 
'https://bvb.ro/FinancialInstruments/Details/FinancialInstrumentsDetails.aspx?s=';
 
-sub methods {
-  return (bvb        => \&bvb,
-          romania    => \&bvb,
-          tradeville => \&bvb,
-          europe     => \&bvb);
+our $DISPLAY    = 'BVB - Bucharest Stock Exchange';
+our @LABELS     =
+  qw/symbol name open high low last bid ask date currency method/;
+our $METHODHASH = {subroutine => \&bvb, 
+                   display    => $DISPLAY, 
+                   labels     => \@LABELS};
+
+sub methodinfo {
+    return ( 
+        bvb        => $METHODHASH,
+        romania    => $METHODHASH,
+        tradeville => $METHODHASH,
+        europe     => $METHODHASH,
+    );
 }
 
-our @labels = qw/symbol name open high low last bid ask date currency method/;
+sub labels {
+  my %m = methodinfo();
+  return map {$_ => [@{$m{$_}{labels}}] } keys %m;
+}
 
-sub labels { 
-  return (bvb        => \@labels,
-          romania    => \@labels,
-          tradeville => \@labels,
-          europe     => \@labels); 
+sub methods {
+  my %m = methodinfo();
+  return map {$_ => $m{$_}{subroutine} } keys %m;
 }
 
 sub bvb {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Finance-Quote-1.68/lib/Finance/Quote/BorsaItaliana.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/BorsaItaliana.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/BorsaItaliana.pm   2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/BorsaItaliana.pm   2026-04-18 
20:47:43.000000000 +0200
@@ -32,7 +32,7 @@
 use constant DEBUG => $ENV{DEBUG};
 use if DEBUG, 'Smart::Comments';
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 # URL example = 
https://www.borsaitaliana.it/borsa/search/scheda.html?code=IT0001086567&lang=it
 my $YIND_URL_HEAD = 
'https://www.borsaitaliana.it/borsa/search/scheda.html?code=';
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/Bourso.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/Bourso.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/Bourso.pm  2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/Bourso.pm  2026-04-18 
20:47:43.000000000 +0200
@@ -84,7 +84,7 @@
 use JSON qw( decode_json );
 use utf8;
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 my $Bourso_URL = 'https://www.boursorama.com/cours/';
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/CSE.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/CSE.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/CSE.pm     2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/CSE.pm     2026-04-18 
20:47:43.000000000 +0200
@@ -27,7 +27,7 @@
 use JSON qw( decode_json );
 use String::Util qw(trim);
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 our $DISPLAY = 'CSE - Colombo Stock Exchange';
 our @LABELS = qw/isin close last high low cap change p_change name symbol 
currency method symbol date isodate/;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/Comdirect.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/Comdirect.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/Comdirect.pm       2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/Comdirect.pm       2026-04-18 
20:47:43.000000000 +0200
@@ -28,7 +28,7 @@
 use String::Util qw(trim);
 use Encode qw(encode_utf8);
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 our $DISPLAY    = 'Comdirect - Frankfurt and other exchanges';
 our $FEATURES   = { 'EXCHANGE' => 'select market place (i.e. "gettex", 
"Xetra", "Tradegate")' };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/Consorsbank.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/Consorsbank.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/Consorsbank.pm     2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/Consorsbank.pm     2026-04-18 
20:47:43.000000000 +0200
@@ -32,7 +32,7 @@
 use if DEBUG, 'Smart::Comments';
 use if DEBUG, 'Data::Dumper';
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 my $CONSORS_URL = 
'https://www.consorsbank.de/web-financialinfo-service/api/marketdata/stocks?';
 my $CONSORS_SOURCE_BASE_URL = 'https://www.consorsbank.de/web/Wertpapier/';
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/Currencies.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/Currencies.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/Currencies.pm      2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/Currencies.pm      2026-04-18 
20:47:43.000000000 +0200
@@ -31,7 +31,7 @@
 use HTML::TableExtract;
 use Encode qw(decode);
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 @EXPORT_OK = qw( known_currencies fetch_live_currencies );
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Finance-Quote-1.68/lib/Finance/Quote/CurrencyRates/AlphaVantage.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/CurrencyRates/AlphaVantage.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/CurrencyRates/AlphaVantage.pm      
2025-12-21 20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/CurrencyRates/AlphaVantage.pm      
2026-04-18 20:47:43.000000000 +0200
@@ -25,7 +25,7 @@
 
 use JSON;
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 sub parameters {
   return ('API_KEY');
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Finance-Quote-1.68/lib/Finance/Quote/CurrencyRates/CurrencyFreaks.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/CurrencyRates/CurrencyFreaks.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/CurrencyRates/CurrencyFreaks.pm    
2025-12-21 20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/CurrencyRates/CurrencyFreaks.pm    
2026-04-18 20:47:43.000000000 +0200
@@ -30,7 +30,7 @@
 
 use JSON;
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 sub parameters {
   return ('API_KEY');
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Finance-Quote-1.68/lib/Finance/Quote/CurrencyRates/ECB.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/CurrencyRates/ECB.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/CurrencyRates/ECB.pm       
2025-12-21 20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/CurrencyRates/ECB.pm       
2026-04-18 20:47:43.000000000 +0200
@@ -25,7 +25,7 @@
 
 use XML::LibXML;
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 sub new
 {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Finance-Quote-1.68/lib/Finance/Quote/CurrencyRates/FinanceAPI.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/CurrencyRates/FinanceAPI.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/CurrencyRates/FinanceAPI.pm        
2025-12-21 20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/CurrencyRates/FinanceAPI.pm        
2026-04-18 20:47:43.000000000 +0200
@@ -32,7 +32,7 @@
 
 use JSON;
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 my $YIND_URL_HEAD = 'https://yfapi.net/v8/finance/chart/';
 my $YIND_URL_TAIL = '?metrics=high&interval=1d&range=1d';
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Finance-Quote-1.68/lib/Finance/Quote/CurrencyRates/Fixer.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/CurrencyRates/Fixer.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/CurrencyRates/Fixer.pm     
2025-12-21 20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/CurrencyRates/Fixer.pm     
2026-04-18 20:47:43.000000000 +0200
@@ -25,7 +25,7 @@
 
 use JSON;
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 sub parameters {
   return ('API_KEY');
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Finance-Quote-1.68/lib/Finance/Quote/CurrencyRates/OpenExchange.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/CurrencyRates/OpenExchange.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/CurrencyRates/OpenExchange.pm      
2025-12-21 20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/CurrencyRates/OpenExchange.pm      
2026-04-18 20:47:43.000000000 +0200
@@ -25,7 +25,7 @@
 
 use JSON;
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 sub parameters {
   return ('API_KEY');
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Finance-Quote-1.68/lib/Finance/Quote/CurrencyRates/TwelveData.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/CurrencyRates/TwelveData.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/CurrencyRates/TwelveData.pm        
1970-01-01 01:00:00.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/CurrencyRates/TwelveData.pm        
2026-04-18 20:47:43.000000000 +0200
@@ -0,0 +1,156 @@
+#!/usr/bin/perl -w
+# vi: set ts=2 sw=2 ic noai showmode showmatch:  
+
+#    This program is free software; you can redistribute it and/or modify
+#    it under the terms of the GNU General Public License as published by
+#    the Free Software Foundation; either version 2 of the License, or
+#    (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU General Public License for more details.
+#
+#    You should have received a copy of the GNU General Public License
+#    along with this program; if not, write to the Free Software
+#    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+#    02110-1301, USA
+
+#    Copyright (C) 2025, Bruce Schuck <[email protected]>
+
+#    Changes:
+#    2025-12-22 - Initial version. Base code opied from
+#    CurrencyRates/FinanceAPI.pm
+
+package Finance::Quote::CurrencyRates::TwelveData;
+
+use strict;
+use warnings;
+
+use constant DEBUG => $ENV{DEBUG};
+use if DEBUG, 'Smart::Comments';
+
+use JSON;
+
+our $VERSION = '1.69'; # VERSION
+
+my $TWELVEDATA_URL_HEAD = 'https://api.twelvedata.com/exchange_rate?symbol=';
+
+sub new
+{
+  my $self = shift;
+  my $class = ref($self) || $self;
+
+  my $this = {};
+  bless $this, $class;
+
+  my $args = shift;
+
+  ### TwelveData->new args : $args
+
+  # TwelveData is permitted to use an environment variable for API key 
+  # (for backwards compatibility).
+  # New modules should use the API_KEY from args.
+
+  $this->{API_KEY} = $ENV{'TWELVEDATA_API_KEY'};
+  $this->{API_KEY} = $args->{API_KEY} if (ref $args eq 'HASH') and (exists 
$args->{API_KEY});
+
+  return $this;
+}
+
+sub multipliers
+{
+  my ($this, $ua, $from, $to) = @_;
+
+  my $json_data;
+  my $rate;
+
+# Set headers. API key is sent as a header.
+  my @ua_headers = (
+    'Accept' => 'application/json',
+  );
+
+  my $reply = $ua->get($TWELVEDATA_URL_HEAD
+      . ${from}
+      . '%2F'
+      . ${to}
+      . '&apikey='
+      . $this->{API_KEY}, @ua_headers);
+
+  ### HTTP Status: $reply->code
+  return unless ($reply->code == 200);
+
+  my $body = $reply->content;
+
+  $json_data = JSON::decode_json $body;
+
+  ### JSON: $json_data
+
+  if ( !$json_data || !$json_data->{'rate'} ) {
+    return;
+  }
+
+  $rate =
+    $json_data->{'rate'};
+
+  ### Rate from JSON: $rate
+
+  return unless $rate + 0;
+
+  # For small rates, request the inverse 
+  if ($rate < 0.001) {
+    ### Rate is too small, requesting inverse : $rate
+    my ($a, $b) = $this->multipliers($ua, $to, $from);
+    return ($b, $a);
+  }
+
+  return (1.0, $rate);
+}
+
+
+1;
+
+=head1 NAME
+
+Finance::Quote::CurrencyRates::TwelveData - Obtain currency rates from
+https://api.twelvedata.com/exchange_rate
+
+=head1 SYNOPSIS
+
+    use Finance::Quote;
+    
+    $q = Finance::Quote->new(currency_rates =>
+         {order => ['TwelveData'],
+          twelvedata => {API_KEY => ...}
+         });
+
+    $value = $q->currency('18.99 EUR', 'USD');
+
+=head1 DESCRIPTION
+
+This module fetches currency rates from
+https://api.twelvedata.com/exchange_rate provides data to Finance::Quote
+to convert the first argument to the equivalent value in the currency
+indicated by the second argument.
+
+This module is not the default currency conversion module for a Finance::Quote
+object. 
+It can be utilized by setting the environment variable FQ_CURRENCY=TwelveData.
+
+=head1 API_KEY
+
+https://api.twelvedata.com/exchange_rate requires users to register and obtain 
an API key.  
+
+The API key can be set by setting the Environment variable
+"TWELVEDATA_API_KEY" or providing a 'twelvedata' hash inside the
+'currency_rates' hash to Finance::Quote->new as in the above example.
+
+=head1 Terms & Conditions
+
+Use of https://api.twelvedata.com/exchange_rate is
+governed by any terms & conditions of that site.
+
+Finance::Quote is released under the GNU General Public License, version 2,
+which explicitly carries a "No Warranty" clause.
+
+=cut
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Finance-Quote-1.68/lib/Finance/Quote/CurrencyRates/YahooJSON.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/CurrencyRates/YahooJSON.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/CurrencyRates/YahooJSON.pm 
2025-12-21 20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/CurrencyRates/YahooJSON.pm 
2026-04-18 20:47:43.000000000 +0200
@@ -32,7 +32,7 @@
 
 use JSON;
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 my $YIND_URL_HEAD = 'https://query1.finance.yahoo.com/v8/finance/chart/';
 my $YIND_URL_TAIL = '?metrics=high&interval=1d&range=1d';
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/Deka.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/Deka.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/Deka.pm    2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/Deka.pm    2026-04-18 
20:47:43.000000000 +0200
@@ -10,7 +10,7 @@
 use LWP::UserAgent;
 use HTTP::Request::Common;
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 our $DISPLAY    = 'Deka Investments, DE';
 our @LABELS     = qw/exchange name date isodate price method/;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/FTfunds.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/FTfunds.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/FTfunds.pm 2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/FTfunds.pm 2026-04-18 
20:47:43.000000000 +0200
@@ -1,4 +1,5 @@
 #!/usr/bin/perl -w
+# vi: set ts=2 sw=2 noai expandtab ic showmode showmatch: 
 
 #  ftfunds.pm
 #
@@ -59,7 +60,7 @@
 use HTML::TokeParser;
 # use Data::Dumper;
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 $FTFUNDS_MAIN_URL   =   "https://markets.ft.com";;
 $FTFUNDS_LOOK_LD    =   
"https://markets.ft.com/data/funds/tearsheet/summary?s=";;
@@ -69,14 +70,28 @@
 
 # FIXME -
 
-sub methods { return (ftfunds => \&ftfunds_fund,
-                     ukfunds => \&ftfunds_fund); }
+our $DISPLAY    = 'FTfunds - Financial Times, UK';
+our @LABELS     =
+  qw/name currency last date time price nav source iso_date method net 
p_change success errormsg/;
+our $METHODHASH = {subroutine => \&ftfunds_fund,
+                   display    => $DISPLAY,
+                   labels     => \@LABELS};
+
+sub methodinfo {
+    return ( 
+        ftfunds => $METHODHASH,
+        ukfunds => $METHODHASH,
+    );
+}
 
-{
-    my @labels = qw/name currency last date time price nav source iso_date 
method net p_change success errormsg/;
+sub labels {
+  my %m = methodinfo();
+  return map {$_ => [@{$m{$_}{labels}}] } keys %m;
+}
 
-    sub labels { return (ftfunds => \@labels,
-                        ukfunds => \@labels); }
+sub methods {
+  my %m = methodinfo();
+  return map {$_ => $m{$_}{subroutine} } keys %m;
 }
 
 #
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/FinanceAPI.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/FinanceAPI.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/FinanceAPI.pm      2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/FinanceAPI.pm      2026-04-18 
20:47:43.000000000 +0200
@@ -33,7 +33,7 @@
 use constant DEBUG => $ENV{DEBUG};
 use if DEBUG, 'Smart::Comments', '###';
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 my $FINANCEAPI_URL = 
'https://yfapi.net/v6/finance/quote?region=US&lang=en&symbols=';
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Finance-Quote-1.68/lib/Finance/Quote/Finanzpartner.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/Finanzpartner.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/Finanzpartner.pm   2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/Finanzpartner.pm   2026-04-18 
20:47:43.000000000 +0200
@@ -26,7 +26,7 @@
 use Web::Scraper;
 use Encode;
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 my $FINANZPARTNER_URL = "https://www.finanzpartner.de/fi/";;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/Fondsweb.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/Fondsweb.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/Fondsweb.pm        2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/Fondsweb.pm        2026-04-18 
20:47:43.000000000 +0200
@@ -24,7 +24,7 @@
 use HTTP::Request::Common;
 use HTML::TreeBuilder::XPath;
 
-our $VERSION = '1.68'; # VERSION 
+our $VERSION = '1.69'; # VERSION 
 
 our $FONDSWEB_URL = "https://www.fondsweb.com/de/";;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/Fool.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/Fool.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/Fool.pm    2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/Fool.pm    2026-04-18 
20:47:43.000000000 +0200
@@ -37,7 +37,7 @@
 use constant DEBUG => $ENV{DEBUG};
 use if DEBUG, 'Smart::Comments';
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 my $SEARCHURL = Text::Template->new(TYPE => 'STRING', SOURCE => 
'https://api.fool.com/quotes/v4/instruments/search/?maxResults=10&apikey=public&domain=fool.com&query={$symbol}');
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/GoldMoney.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/GoldMoney.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/GoldMoney.pm       2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/GoldMoney.pm       2026-04-18 
20:47:43.000000000 +0200
@@ -1,4 +1,5 @@
 #!/usr/bin/perl -w
+# vi: set ts=2 sw=2 noai expandtab ic showmode showmatch: 
 #
 #    Copyright (C) 1998, Dj Padzensky <[email protected]>
 #    Copyright (C) 1998, 1999 Linas Vepstas <[email protected]>
@@ -35,14 +36,28 @@
 use strict;
 use warnings;
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
-sub methods {
-    return ( goldmoney => \&goldmoney );
+our $DISPLAY    = 'GoldMoney - Gold, Silver, Platinum ';
+our @LABELS     = qw/exchange name date isodate price method/;
+our $METHODHASH = {subroutine => \&goldmoney, 
+                   display    => $DISPLAY, 
+                   labels     => \@LABELS};
+
+sub methodinfo {
+    return ( 
+        goldmoney => $METHODHASH,
+    );
 }
 
 sub labels {
-    return ( goldmoney => [qw/exchange name date isodate price method/] );
+  my %m = methodinfo();
+  return map {$_ => [@{$m{$_}{labels}}] } keys %m;
+}
+
+sub methods {
+  my %m = methodinfo();
+  return map {$_ => $m{$_}{subroutine} } keys %m;
 }
 
 # goldmoney($quoter, @symbols)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/GoogleWeb.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/GoogleWeb.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/GoogleWeb.pm       2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/GoogleWeb.pm       2026-04-18 
20:47:43.000000000 +0200
@@ -31,7 +31,7 @@
 use constant DEBUG => $ENV{DEBUG};
 use if DEBUG, 'Smart::Comments', '###';
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 my $GOOGLE_URL = 'https://www.google.com/finance/';
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/IndiaMutual.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/IndiaMutual.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/IndiaMutual.pm     2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/IndiaMutual.pm     2026-04-18 
20:47:43.000000000 +0200
@@ -32,20 +32,34 @@
 use HTTP::Status;
 use IO::String;
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 # URLs of where to obtain information.
 
 $AMFI_MAIN_URL = ("http://www.amfiindia.com/";);
 $AMFI_URL = ("https://www.amfiindia.com/spages/NAVAll.txt";);
 
-sub methods { return (indiamutual => \&amfiindia,
-                      amfiindia => \&amfiindia); }
+our $DISPLAY    = 'IndiaMutual - Assoc of Mutual Funds in India';
+our @LABELS     = qw/method source link name currency date isodate nav/;
+our $METHODHASH = {subroutine => \&amfiindia, 
+                   display    => $DISPLAY, 
+                   labels     => \@LABELS};
+
+sub methodinfo {
+    return ( 
+        amfiindia   => $METHODHASH,
+        indiamutual => $METHODHASH,
+    );
+}
+
+sub labels {
+  my %m = methodinfo();
+  return map {$_ => [@{$m{$_}{labels}}] } keys %m;
+}
 
-{
-    my @labels = qw/method source link name currency date isodate nav/;
-    sub labels { return (indiamutual => \@labels,
-                         amfiindia => \@labels); }
+sub methods {
+  my %m = methodinfo();
+  return map {$_ => $m{$_}{subroutine} } keys %m;
 }
 
 #
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/MarketWatch.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/MarketWatch.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/MarketWatch.pm     2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/MarketWatch.pm     2026-04-18 
20:47:43.000000000 +0200
@@ -31,7 +31,7 @@
 use constant DEBUG => $ENV{DEBUG};
 use if DEBUG, 'Smart::Comments', '###';
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 our $DISPLAY    = 'MarketWatch';
 our $FEATURES   = {};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Finance-Quote-1.68/lib/Finance/Quote/MorningstarCH.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/MorningstarCH.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/MorningstarCH.pm   2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/MorningstarCH.pm   2026-04-18 
20:47:43.000000000 +0200
@@ -48,7 +48,7 @@
 use JSON qw(decode_json);
 use Text::Template;
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 $MSTARCH_MAIN_URL   =   "https://www.morningstar.ch";;
 $MSTARCH_LOOK_UP    =   
"https://www.morningstar.ch/ch/funds/SecuritySearchResults.aspx?search=";;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Finance-Quote-1.68/lib/Finance/Quote/MorningstarJP.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/MorningstarJP.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/MorningstarJP.pm   2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/MorningstarJP.pm   2026-04-18 
20:47:43.000000000 +0200
@@ -28,7 +28,7 @@
 use LWP::UserAgent;
 use String::Util qw(trim);
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 our $DISPLAY    = 'Morningstar JP';
 our @LABELS     = qw/nav isin symbol name currency date isodate/;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Finance-Quote-1.68/lib/Finance/Quote/MorningstarUK.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/MorningstarUK.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/MorningstarUK.pm   2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/MorningstarUK.pm   2026-04-18 
20:47:43.000000000 +0200
@@ -45,7 +45,7 @@
 use JSON qw(decode_json);
 use Text::Template;
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 $MSTARUK_MAIN_URL   =   "https://www.morningstar.co.uk";;
 $MSTARUK_LOOK_UP    =   
"https://www.morningstar.co.uk/uk/funds/SecuritySearchResults.aspx?search=";;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/NSEIndia.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/NSEIndia.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/NSEIndia.pm        2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/NSEIndia.pm        2026-04-18 
20:47:43.000000000 +0200
@@ -1,4 +1,5 @@
 #!/usr/bin/perl -w
+# vi: set ts=2 sw=2 noai expandtab ic showmode showmatch: 
 
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
@@ -16,7 +17,6 @@
 #    02110-1301, USA
 
 package Finance::Quote::NSEIndia;
-require 5.010;
 
 use strict;
 use POSIX qw(strftime);
@@ -25,21 +25,33 @@
 use constant DEBUG => $ENV{DEBUG};
 use if DEBUG, 'Smart::Comments', '###';
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 use vars qw($NSE_MAIN_URL $NSE_URL);
 $NSE_MAIN_URL = "https://www.nseindia.com";;
 $NSE_URL = "https://nsearchives.nseindia.com";;
 
-sub methods { return ( 'india' => \&nseindia,
-                       'nseindia' => \&nseindia ); }
+our $DISPLAY    = 'NSEIndia - NSE India';
+our @LABELS     = qw/close last high low open prevclose exchange name/;
+our $METHODHASH = {subroutine => \&nseindia,
+                   display    => $DISPLAY,
+                   labels     => \@LABELS};
+
+sub methodinfo {
+    return ( 
+        nseindia => $METHODHASH,
+        india    => $METHODHASH,
+    );
+}
 
 sub labels {
-    my @labels = qw/close last high low open prevclose exchange name/;
-    return (
-    india => \@labels,
-    nseindia => \@labels
-    );
+  my %m = methodinfo();
+  return map {$_ => [@{$m{$_}{labels}}] } keys %m;
+}
+
+sub methods {
+  my %m = methodinfo();
+  return map {$_ => $m{$_}{subroutine} } keys %m;
 }
 
 sub nseindia {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/NZX.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/NZX.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/NZX.pm     2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/NZX.pm     2026-04-18 
20:47:43.000000000 +0200
@@ -30,7 +30,7 @@
 use Web::Scraper;
 use String::Util qw(trim);
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 our $DISPLAY    = 'NZX - New Zealand Exchange';
 our @LABELS     = qw/last isin name currency date isodate/;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/OnVista.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/OnVista.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/OnVista.pm 2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/OnVista.pm 2026-04-18 
20:47:43.000000000 +0200
@@ -35,7 +35,7 @@
 use constant DEBUG => $ENV{DEBUG};
 use if DEBUG, 'Smart::Comments', '###';
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 my $ONVISTA_URL = 'https://www.onvista.de/suche/';
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/SIX.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/SIX.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/SIX.pm     2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/SIX.pm     2026-04-18 
20:47:43.000000000 +0200
@@ -1,4 +1,5 @@
 #!/usr/bin/perl -w
+# vi: set ts=2 sw=2 noai expandtab ic showmode showmatch: 
 
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
@@ -28,16 +29,28 @@
 use String::Util qw(trim);
 use Scalar::Util qw(looks_like_number);
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
-our @labels = qw/last date isodate symbol/;
+our $DISPLAY    = 'SIX - Swiss Stock Exchange';
+our @LABELS     = qw/last close date isodate symbol currency isin name/;
+our $METHODHASH = {subroutine => \&six, 
+                   display => $DISPLAY, 
+                   labels => \@LABELS};
+
+sub methodinfo {
+    return ( 
+        six => $METHODHASH,
+    );
+}
 
 sub labels {
-  return ( six => \@labels );
+  my %m = methodinfo();
+  return map {$_ => [@{$m{$_}{labels}}] } keys %m;
 }
 
 sub methods {
-  return ( six => \&six );
+  my %m = methodinfo();
+  return map {$_ => $m{$_}{subroutine} } keys %m;
 }
 
 sub six {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/Sinvestor.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/Sinvestor.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/Sinvestor.pm       2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/Sinvestor.pm       2026-04-18 
20:47:43.000000000 +0200
@@ -1,4 +1,5 @@
 #!/usr/bin/perl -w
+# vi: set ts=2 sw=2 noai expandtab ic showmode showmatch: 
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
 #    the Free Software Foundation; either version 2 of the License, or
@@ -19,6 +20,7 @@
 use strict;
 use warnings;
 use HTML::Entities;
+use String::Util qw(trim);
 
 use constant DEBUG => $ENV{DEBUG};
 use if DEBUG, 'Smart::Comments';
@@ -27,7 +29,7 @@
 use Web::Scraper;
 use Encode qw(encode_utf8);
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 my $SINVESTOR_URL = 'https://web.s-investor.de/app/detail.htm?isin=';
 
@@ -68,6 +70,7 @@
 
 sub get_de_number {
     my $number = shift;
+    $number = trim($number);
     $number =~ s/\.//g;
     $number =~ s/,/\./;
     return ($number =~ /^([-+]?[0-9]+(\.[0-9]+)?)/) ? $1 : undef;
@@ -148,6 +151,7 @@
 
     eval {
       my $tree = HTML::TreeBuilder->new_from_url($url);
+      ### [<now>] tree: $tree
 
       my $lastvalue = $tree->look_down('class'=>'si_seitenbezeichnung');
 
@@ -222,8 +226,8 @@
             $info{$symbol, 'high'}      = get_de_number(td_search($t, 'Hoch'));
 
             my ($child) = td_search($t, 'Datum/Zeit');
-            my $date = substr($child, 0, 8);
-            my $time = substr($child, 9, 5); # CE(S)T
+            my $date = substr(trim($child), 0, 8);
+            my $time = substr(trim($child), 9, 5); # CE(S)T
             $quoter->store_date(\%info, $symbol, {eurodate => $date});
             $info{$symbol, 'time'}     = $1 if $time =~ /^([0-9]{2}:[0-9]{2})/;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/StockData.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/StockData.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/StockData.pm       2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/StockData.pm       2026-04-18 
20:47:43.000000000 +0200
@@ -31,7 +31,7 @@
 use constant DEBUG => $ENV{DEBUG};
 use if DEBUG, 'Smart::Comments', '###';
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 my $STOCKDATA_URL = 'https://api.stockdata.org/v1/data/quote?symbols=';
 # Gets appended with '$stock&api_token=$token'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/Stooq.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/Stooq.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/Stooq.pm   2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/Stooq.pm   2026-04-18 
20:47:43.000000000 +0200
@@ -1,5 +1,5 @@
 #!/usr/bin/perl -w
-# vi: set ts=2 sw=2 noai ic showmode showmatch:  
+# vi: set ts=2 sw=2 noai expandtab ic showmode showmatch:  
 #
 #    Copyright (C) 2023, Bruce Schuck <[email protected]>
 #
@@ -28,12 +28,13 @@
 use LWP::UserAgent;
 use HTTP::Request::Common;
 use HTTP::CookieJar::LWP ();
+use HTTP::Cookies;
 use HTML::TableExtract;
 
 use constant DEBUG => $ENV{DEBUG};
 use if DEBUG, 'Smart::Comments', '###';
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 our $DISPLAY    = 'Stooq - Warsaw Stock Exchange';
 our @LABELS     = qw/symbol name open high low last bid ask date currency 
method/;
@@ -86,12 +87,28 @@
   my $quoter = shift;
   my @stocks = @_;
   my (%info, $tree, $table, $pricetable, $url, $reply);
-  my $cj = HTTP::CookieJar::LWP->new;
-#  my $ua = LWP::UserAgent->new(cookie_jar => $cj);
+
+  my $cj = HTTP::Cookies->new();
+  # Cookies content gleaned from browser session
+  $cj->set_cookie(0, 'cookie_user', '%3F+++1dllg000G+1100d1300c3%7Clrq', '/', 
'.stooq.com');
+  $cj->set_cookie(0, 'cookie_uu', '260114000', '/', '.stooq.com');
+  $cj->set_cookie(0, 'FCCDCF', 
'%5Bnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2C%5B%5B32%2C%22%5B%5C%22ab16ab99-60a0-4da1-a296-29c8a27efbf9%5C%22%2C%5B1767931790%2C786000000%5D%5D%22%5D%2C%5B13%2C%22%5B%5C%22DBABL~BVQqAAAAAg%5C%22%2C%5B%5B7%2C%5B1768425873%2C984063000%5D%5D%5D%5D%22%5D%5D%5D',
 '/', '.stooq.com');
+  $cj->set_cookie(0, 'FCNEC', 
'%5B%5B%22AKsRol_Zywhkz7ukryuiQZ7evZsxa0eSbPMEpqvZUwq6Kmf32IqN4xQFgJjIG_fDDxo4f5sLKIXXGsrdQayx3tROTwoyC8BZX4rNDu3fBfzCikX_gkuhCra5dJotNToqdQrxouYXlgE_k7KTmpnQn7AEOImeVQrz2g%3D%3D%22%5D%5D',
 '/', '.stooq.com');
+  $cj->set_cookie(0, 'PHPSESSID', '3vqtfg7shbf23iog9frtbqdn15', '/', 
'stooq.com');
+  $cj->set_cookie(0, 'privacy', '1768598448', '/', 'stooq.com');
+  $cj->set_cookie(0, 'uid', 'usb132zim841xr4doi8j12uk4a', '/', 'stooq.com');
+
   my $ua = $quoter->user_agent();
+
   $ua->cookie_jar($cj);
-  $ua->default_header('Accept-Encoding' => 'deflate');
-  $ua->default_header('Accept-Language' => 'en-US,en;q=0.5');
+
+  $ua->default_header('Accept' => 
'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7');
+  $ua->default_header('Accept-Encoding' => 'gzip, deflate, br, zstd');
+  $ua->default_header('Accept-Language' => 'en-US,en;q=0.9');
+  $ua->default_header('Host' => 'stooq.com');
+  $ua->default_header('Pragma' => 'no-cache');
+  $ua->default_header('Upgrade-Insecure-Requests' => '1');
+  $ua->default_header('User-Agent' => 'Mozilla/5.0 (X11; Linux x86_64) 
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36');
 
   foreach my $stock (@stocks) {
 
@@ -103,6 +120,7 @@
     my $headers = $reply->headers_as_string;
     my $body    = $reply->decoded_content;
 
+    ### Headers: $headers
     ### Body: $body
 
     my ($name, $bid, $ask, $last, $open, $high, $low, $date, $currency);
@@ -266,3 +284,12 @@
 =item currency
 
 =back
+
+=head1 Caveat
+
+When accessed from Europe the website requires cookie consent. Many of the 
+cookies are set via Google's "Google's Privacy & messaging tool
+(formerly known as Google Funding Choices)". It may be necessary to
+manually capture cookies in a browser and replace the values in this
+module.
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Finance-Quote-1.68/lib/Finance/Quote/SwissFundData.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/SwissFundData.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/SwissFundData.pm   2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/SwissFundData.pm   2026-04-18 
20:47:43.000000000 +0200
@@ -47,7 +47,7 @@
 $SFDCH_MAIN_URL        = "https://www.swissfunddata.ch";;
 $SFDCH_LOOK_UP = "https://www.swissfunddata.ch/sfdpub/en/funds/prices?text=";;
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 our $DISPLAY = "SwissFundData";
 our @LABELS = qw/name currency date nav isodate method success errormsg/;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/TMX.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/TMX.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/TMX.pm     2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/TMX.pm     2026-04-18 
20:47:43.000000000 +0200
@@ -1,4 +1,5 @@
 #!/usr/bin/perl -w
+# vi: set ts=2 sw=2 noai expandtab ic showmode showmatch:  
 
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
@@ -28,18 +29,30 @@
 use JSON qw( decode_json encode_json );
 use String::Util qw(trim);
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
-our @labels = qw/currency name exchange volume open high low cap close 
year_range last p_change symbol isodate date/;
+our $DISPLAY    = 'TMX - Toronto Stock Exchange';
+our @LABELS     = qw/currency name exchange volume open high low cap close 
year_range last p_change symbol isodate date/;
+our $METHODHASH = {subroutine => \&tmx, 
+                   display    => $DISPLAY, 
+                   labels     => \@LABELS};
+
+sub methodinfo {
+    return ( 
+        tmx    => $METHODHASH,
+        tsx    => $METHODHASH,
+        canada => $METHODHASH,
+    );
+}
 
 sub labels {
-  return ( tmx => \@labels );
+  my %m = methodinfo();
+  return map {$_ => [@{$m{$_}{labels}}] } keys %m;
 }
 
 sub methods {
-  return ( tmx    => \&tmx,
-           tsx => \&tmx,
-           canada => \&tmx );
+  my %m = methodinfo();
+  return map {$_ => $m{$_}{subroutine} } keys %m;
 }
 
 sub tmx {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/TSP.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/TSP.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/TSP.pm     2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/TSP.pm     2026-04-18 
20:47:43.000000000 +0200
@@ -1,5 +1,5 @@
 #!/usr/bin/perl -w
-# vi: set ts=2 sw=2 noai ic showmode showmatch:  
+# vi: set ts=2 sw=2 noai expandtab ic showmode showmatch:  
 #
 #    Copyright (C) 1998, Dj Padzensky <[email protected]>
 #    Copyright (C) 1998, 1999 Linas Vepstas <[email protected]>
@@ -41,18 +41,33 @@
 use HTTP::Request::Common;
 use POSIX;
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 # URLs of where to obtain information
 $TSP_URL      = 'https://www.tsp.gov/data/fund-price-history.csv';
 $TSP_MAIN_URL = 'http://www.tsp.gov';
 @HEADERS      = ('user-agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 
10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 
Safari/537.36');
 
-sub methods { return (tsp => \&tsp) }
+our $DISPLAY    = 'TSP - US Gov Thrift Savings Plan';
+our @LABELS     = qw/name date isodate currency close/;
+our $METHODHASH = {subroutine => \&tsp, 
+                   display    => $DISPLAY, 
+                   labels     => \@LABELS};
+
+sub methodinfo {
+  return ( 
+      tsp => $METHODHASH,
+  );
+}
+
+sub labels {
+  my %m = methodinfo();
+  return map {$_ => [@{$m{$_}{labels}}] } keys %m;
+}
 
-{
-  my @labels = qw/name date isodate currency close/;
-  sub labels { return (tsp => \@labels); }
+sub methods {
+  my %m = methodinfo();
+  return map {$_ => $m{$_}{subroutine} } keys %m;
 }
 
 sub format_name {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Finance-Quote-1.68/lib/Finance/Quote/TesouroDireto.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/TesouroDireto.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/TesouroDireto.pm   2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/TesouroDireto.pm   2026-04-18 
20:47:43.000000000 +0200
@@ -31,7 +31,7 @@
 use HTTP::Request::Common;
 use Time::Piece;
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 our $DISPLAY    = 'Brazilian Govt Bonds, tesouro_direto';
 our $FEATURES   = {};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/Tradegate.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/Tradegate.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/Tradegate.pm       2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/Tradegate.pm       2026-04-18 
20:47:43.000000000 +0200
@@ -26,7 +26,7 @@
 use LWP::UserAgent;
 use Web::Scraper;
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 my $TRADEGATE_URL = 
'https://web.s-investor.de/app/detail.htm?boerse=TDG&isin=';
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Finance-Quote-1.68/lib/Finance/Quote/TreasuryDirect.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/TreasuryDirect.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/TreasuryDirect.pm  2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/TreasuryDirect.pm  2026-04-18 
20:47:43.000000000 +0200
@@ -2,6 +2,7 @@
 #
 # TreasuryDirect.pm
 #
+# vi: set ts=2 sw=2 noai expandtab ic showmode showmatch: 
 
 =begin comment
 
@@ -23,7 +24,7 @@
 # April, 2018
 #
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 use vars qw /$VERSION/ ;
 
@@ -34,14 +35,26 @@
 
 my $TREASURY_DIRECT_URL = 
'https://www.treasurydirect.gov/GA-FI/FedInvest/todaySecurityPriceDate.htm';
 
-sub methods {
-  return treasurydirect => \&treasurydirect;
+our $DISPLAY    = 'TreasuryDirect - US Treasury Bonds';
+our @LABELS     = qw/method source symbol rate bid ask price date isodate/;
+our $METHODHASH = {subroutine => \&treasurydirect, 
+                   display    => $DISPLAY, 
+                   labels     => \@LABELS};
+
+sub methodinfo {
+    return ( 
+        treasurydirect => $METHODHASH,
+    );
 }
 
-
 sub labels {
-  my @labels = qw/ method source symbol rate bid ask price date isodate /;
-  return treasurydirect => \@labels;
+  my %m = methodinfo();
+  return map {$_ => [@{$m{$_}{labels}}] } keys %m;
+}
+
+sub methods {
+  my %m = methodinfo();
+  return map {$_ => $m{$_}{subroutine} } keys %m;
 }
 
 sub treasurydirect {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/TwelveData.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/TwelveData.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/TwelveData.pm      2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/TwelveData.pm      2026-04-18 
20:47:43.000000000 +0200
@@ -27,7 +27,7 @@
 use Text::Template;
 use DateTime::Format::Strptime qw( strptime strftime );
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 my $URL      = Text::Template->new(TYPE => 'STRING', SOURCE => 
'https://api.twelvedata.com/quote?symbol={$symbol}&apikey={$token}');
 my $THROTTLE = 1.05 * 60.0/8.0;  # 5% more than maximum seconds / request for 
free tier
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/USBonds.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/USBonds.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/USBonds.pm 2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/USBonds.pm 2026-04-18 
20:47:43.000000000 +0200
@@ -37,7 +37,7 @@
 use constant DEBUG => $ENV{DEBUG};
 use if DEBUG, 'Smart::Comments', '###';
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 #
 # Define constants.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/Union.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/Union.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/Union.pm   2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/Union.pm   2026-04-18 
20:47:43.000000000 +0200
@@ -49,7 +49,7 @@
 
 use JSON qw(decode_json);
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 # This url retrieve a JSON data structure containing data for all funds
 our $UNION_URL = 
'https://internal.api.union-investment.de/beta/web/funddata/fundsearch?segment=web_de&type=fondssuche&api-version=beta-2.0.0';
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/UserAgent.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/UserAgent.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/UserAgent.pm       2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/UserAgent.pm       2026-04-18 
20:47:43.000000000 +0200
@@ -31,7 +31,7 @@
 
 use vars qw/@ISA /;
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 @ISA = qw/LWP::UserAgent/;
 
 # A very simple extension.  When we generate a LWP::UserAgent object,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/XETRA.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/XETRA.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/XETRA.pm   2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/XETRA.pm   2026-04-18 
20:47:43.000000000 +0200
@@ -1,5 +1,5 @@
 #!/usr/bin/perl -w
-#    vi: set ts=2 sw=2 noai ic showmode showmatch:  
+#    vi: set ts=2 sw=2 noai ic showmode showmatch:
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
 #    the Free Software Foundation; either version 2 of the License, or
@@ -20,6 +20,7 @@
 use strict;
 use warnings;
 use HTML::Entities;
+use String::Util qw(trim);
 
 use constant DEBUG => $ENV{DEBUG};
 use if DEBUG, 'Smart::Comments';
@@ -27,7 +28,7 @@
 use LWP::UserAgent;
 use Web::Scraper;
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 my $xetra_URL = 'https://web.s-investor.de/app/detail.htm?boerse=GER&isin=';
 
@@ -35,12 +36,12 @@
 our $FEATURES   = {'INST_ID' => 'Required Institution ID'};
 our @LABELS     = qw/symbol last close exchange volume open price change 
p_change/;
 our $METHODHASH = {subroutine => \&xetra,
-                   display => $DISPLAY, 
+                   display => $DISPLAY,
                    labels => \@LABELS,
                    features => $FEATURES};
 
 sub methodinfo {
-    return ( 
+    return (
         xetra   => $METHODHASH,
         europe  => $METHODHASH,
     );
@@ -102,7 +103,7 @@
 
         $td1 = ($lastvalue->look_down('_tag'=>'td'))[7];
         @child = $td1->content_list;
-        my $date = substr($child[0], 0, 8);
+        my $date = substr(trim($child[0]), 0, 8);
 
         $td1 = ($lastvalue->look_down('_tag'=>'td'))[9];
         @child = $td1->content_list;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/YahooJSON.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/YahooJSON.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/YahooJSON.pm       2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/YahooJSON.pm       2026-04-18 
20:47:43.000000000 +0200
@@ -36,7 +36,7 @@
 use constant DEBUG => $ENV{DEBUG};
 use if DEBUG, 'Smart::Comments';
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 # Required to successfully read extra long headers returned from yahoo
 my %OPTS = @LWP::Protocol::http::EXTRA_SOCK_OPTS;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/YahooWeb.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/YahooWeb.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/YahooWeb.pm        2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/YahooWeb.pm        2026-04-18 
20:47:43.000000000 +0200
@@ -32,7 +32,7 @@
 use constant URLTAG => "data-url";
 use constant JSONBODY => "body";
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 # Fix for 500 Header line too long message
 push(@LWP::Protocol::http::EXTRA_SOCK_OPTS, MaxLineLength => 0);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote/ZA.pm 
new/Finance-Quote-1.69/lib/Finance/Quote/ZA.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote/ZA.pm      2025-12-21 
20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote/ZA.pm      2026-04-18 
20:47:43.000000000 +0200
@@ -1,4 +1,5 @@
 #!/usr/bin/perl -w
+# vi: set ts=2 sw=2 noai expandtab ic showmode showmatch: 
 
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
@@ -27,16 +28,28 @@
 use Web::Scraper;
 use String::Util qw(trim);
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
-our @labels = qw/method source name symbol currency last date isodate high low 
p_change/;
+our $DISPLAY    = 'ZA - Sharenet South Africa';
+our @LABELS     = qw/method source name symbol currency last price date 
isodate exchange/;
+our $METHODHASH = {subroutine => \&sharenet, 
+                   display => $DISPLAY, 
+                   labels => \@LABELS};
+
+sub methodinfo {
+    return ( 
+        za => $METHODHASH,
+    );
+}
 
 sub labels {
-  return ( sharenet => \@labels );
+  my %m = methodinfo();
+  return map {$_ => [@{$m{$_}{labels}}] } keys %m;
 }
 
 sub methods {
-  return ( za => \&sharenet );
+  my %m = methodinfo();
+  return map {$_ => $m{$_}{subroutine} } keys %m;
 }
 
 sub sharenet {
@@ -77,6 +90,7 @@
         $info{$symbol, 'symbol'}   = $symbol;
         $info{$symbol, 'source'}   = 'sharenet.co.za';
         $info{$symbol, 'exchange'} = 'JSE';
+        $info{$symbol, 'method'} = 'za';
 
         if ($result->{day} =~ /(\d+)\s+(\w{3})/) {
           $quoter->store_date(\%info, $symbol, {day => $1, month => $2});
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/lib/Finance/Quote.pm 
new/Finance-Quote-1.69/lib/Finance/Quote.pm
--- old/Finance-Quote-1.68/lib/Finance/Quote.pm 2025-12-21 20:41:05.000000000 
+0100
+++ new/Finance-Quote-1.69/lib/Finance/Quote.pm 2026-04-18 20:47:43.000000000 
+0200
@@ -48,7 +48,7 @@
             $TIMEOUT @MODULES %MODULES %METHODS $AUTOLOAD
             @CURRENCY_RATES_MODULES $USE_EXPERIMENTAL_UA/;
 
-our $VERSION = '1.68'; # VERSION
+our $VERSION = '1.69'; # VERSION
 
 @CURRENCY_RATES_MODULES = qw/
     AlphaVantage
@@ -57,6 +57,7 @@
     FinanceAPI
     Fixer
     OpenExchange
+    TwelveData
     YahooJSON
 /;
 
@@ -880,7 +881,7 @@
   return $amount if ($from_code eq $to_code); # Trivial case.
 
   my $ua = $this->get_user_agent;
-  
+
   foreach my $rate (@{$this->{currency_rate_method}}) {
     ### rate: ref($rate)
     my $final = eval {
@@ -1704,6 +1705,7 @@
   Finance::Quote::CurrencyRates::FinanceAPI,
   Finance::Quote::CurrencyRates::Fixer,
   Finance::Quote::CurrencyRates::OpenExchange,
+  Finance::Quote::CurrencyRates::TwelveData,
   Finance::Quote::CurrencyRates::YahooJSON,
   Finance::Quote::AEX,
   Finance::Quote::ASEGR,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/t/currency.t 
new/Finance-Quote-1.69/t/currency.t
--- old/Finance-Quote-1.68/t/currency.t 2025-12-21 20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/t/currency.t 2026-04-18 20:47:43.000000000 +0200
@@ -116,6 +116,20 @@
   module_check('FinanceAPI', \@valid, \@invalid, {cache => 1, API_KEY => 
$ENV{TEST_FINANCEAPI_API_KEY}});
 };
 
+# Check TwelveData
+subtest 'TwelveData' => sub {
+  if ( not $ENV{TEST_TWELVEDATA_API_KEY} ) {
+    plan skip_all =>
+        'Set $ENV{TEST_TWELVEDATA_API_KEY} to run this test; get one at 
https://financeapi.net';
+  }
+
+  my @valid   =
+    ( ['100.00 USD', 'EUR'], ['1.00 GBP', 'IDR'], ['1.23 IDR', 'CAD'] );
+  my @invalid = ( ['20.12 ZZZ', 'GBP'] );
+
+  module_check('TwelveData', \@valid, \@invalid, {cache => 1, API_KEY => 
$ENV{TEST_TWELVEDATA_API_KEY}});
+};
+
 
 # Check YahooJSON
 subtest 'YahooJSON' => sub {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/t/ftfunds.t 
new/Finance-Quote-1.69/t/ftfunds.t
--- old/Finance-Quote-1.68/t/ftfunds.t  2025-12-21 20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/t/ftfunds.t  2026-04-18 20:47:43.000000000 +0200
@@ -13,21 +13,21 @@
 my $year   = (localtime())[5] + 1900;
 my $lastyear = $year - 1;
 
-my %quotes = 
$q->ftfunds("GB0031834814","GB0030881337","GB0003865176","GB00B7W6PR65","BOGUS");
+my %quotes = 
$q->ftfunds("GB0031293995","GB0030366719","GB0003865176","GB00B7W6PR65","BOGUS");
 ok(%quotes);
 
 # Check the last values are defined.  These are the most
 #  used and most reliable indicators of success.
-ok($quotes{"GB0031834814","last"} > 0);
-ok($quotes{"GB0031834814","success"});
+ok($quotes{"GB0031293995","last"} > 0);
+ok($quotes{"GB0031293995","success"});
 
 ok($quotes{"GB00B7W6PR65","last"} > 0);
 ok($quotes{"GB00B7W6PR65","success"});
 ok($quotes{"GB00B7W6PR65","currency"} eq "GBP", "Currency (GBP) for 
GB00B7W6PR65 is ".$quotes{"GB00B7W6PR65","currency"});
 ok($quotes{"GB00B7W6PR65","price"}<100,"Price for GB00B7W6PR65 < 100 : 
".$quotes{"GB00B7W6PR65","price"});
 
-ok($quotes{"GB0030881337","last"} > 0);
-ok($quotes{"GB0030881337","success"});
+ok($quotes{"GB0030366719","last"} > 0);
+ok($quotes{"GB0030366719","success"});
 
 ok($quotes{"GB0003865176","last"} > 0);
 ok($quotes{"GB0003865176","success"});
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/t/indiamutual.t 
new/Finance-Quote-1.69/t/indiamutual.t
--- old/Finance-Quote-1.68/t/indiamutual.t      2025-12-21 20:41:05.000000000 
+0100
+++ new/Finance-Quote-1.69/t/indiamutual.t      2026-04-18 20:47:43.000000000 
+0200
@@ -3,6 +3,9 @@
 use Test::More;
 use Finance::Quote;
 
+use constant DEBUG => $ENV{DEBUG};
+use if DEBUG, 'Smart::Comments';
+
 if (not $ENV{ONLINE_TEST}) {
     plan skip_all => 'Set $ENV{ONLINE_TEST} to run this test';
 }
@@ -10,7 +13,7 @@
 # Test IndiaMutual functions.
 
 my $q      = Finance::Quote->new();
-my @funds = ("102676", "103131", "148181", "INF194K01W88", "INF090I01FN7",
+my @funds = ("102676", "103131", "INF194K01W88", "INF090I01FN7",
              "INF082J01127");
 my $year = (localtime())[5] + 1900;
 my $lastyear = $year - 1;
@@ -20,6 +23,8 @@
 my %quotes = $q->fetch("indiamutual", @funds);
 ok(%quotes);
 
+### Quotes Hash: %quotes
+
 # Check that the name and nav are defined for all of the funds.
 foreach my $fund (@funds) {
        ok($quotes{$fund,"nav"} > 0);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/t/six.t 
new/Finance-Quote-1.69/t/six.t
--- old/Finance-Quote-1.68/t/six.t      2025-12-21 20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/t/six.t      2026-04-18 20:47:43.000000000 +0200
@@ -38,7 +38,6 @@
                 'close'    => sub {not defined $_[0] or 
looks_like_number($_[0])},
                 'ask'      => sub {not defined $_[0] or 
looks_like_number($_[0])},
                 'currency' => sub {$_[0] =~ /^[A-Z]{3}$/},
-                'name'     => sub {$_[0] eq $valid{$_[1]}},
                 'isin'     => sub {$_[0] =~ /^[A-Z0-9]{12}$/},
                 'isodate'  => sub {Date::Range->new($today - $window, 
$today)->includes(Date::Simple::ISO->new($_[0]))},
                 'date'     => sub {my $a = Date::Manip::Date->new(); 
$a->parse_format('%m/%d/%Y', $_[0]);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/t/tmx.t 
new/Finance-Quote-1.69/t/tmx.t
--- old/Finance-Quote-1.68/t/tmx.t      2025-12-21 20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/t/tmx.t      2026-04-18 20:47:43.000000000 +0200
@@ -17,7 +17,7 @@
 my %valid    = ('STN' => 'Stantec Inc.',
                 'BCE' => 'BCE Inc.',
                 'BMO' => 'Bank of Montreal',
-                'HBI:US' => 'Hanesbrands Inc.'
+                'GIL:US' => 'Gildan Activewear Inc. Class A Sub. Vot.'
                );
 my @invalid  = ('BOGUS');
 my @symbols  = (keys %valid, @invalid);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/t/tsp.t 
new/Finance-Quote-1.69/t/tsp.t
--- old/Finance-Quote-1.68/t/tsp.t      2025-12-21 20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/t/tsp.t      2026-04-18 20:47:43.000000000 +0200
@@ -11,7 +11,7 @@
 my $lastyear = $year - 1;
 my $quoter = Finance::Quote->new();
 
-my @symbols =  qw/C F G I S L2025 L2030 L2035 L2040 L2045 L2050 L2055 L2060 
L2065 LINCOME/;
+my @symbols =  qw/C F G I S L2030 L2035 L2040 L2045 L2050 L2055 L2060 L2065 
LINCOME/;
 
 plan tests => 12*(1+$#symbols)+3;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Finance-Quote-1.68/t/za.t 
new/Finance-Quote-1.69/t/za.t
--- old/Finance-Quote-1.68/t/za.t       2025-12-21 20:41:05.000000000 +0100
+++ new/Finance-Quote-1.69/t/za.t       2026-04-18 20:47:43.000000000 +0200
@@ -18,7 +18,7 @@
 }
 
 my %valid    = ('AGL' => 'ANGLO AMERICAN PLC - AGL',
-                'AMS' => 'ANGLO AMERICAN PLATINUM CORPORATION LIMITED - AMS'
+                'MTN' => 'MTN GROUP LIMITED - MTN'
                );
 my @invalid  = ('BOGUS');
 my @symbols  = (keys %valid, @invalid);

++++++ _scmsync.obsinfo ++++++
--- /var/tmp/diff_new_pack.uZK7aR/_old  2026-05-18 17:58:02.677198616 +0200
+++ /var/tmp/diff_new_pack.uZK7aR/_new  2026-05-18 17:58:02.689199113 +0200
@@ -1,6 +1,6 @@
-mtime: 1766381895
-commit: c6fb46ab16a01b8f9d6f9fab285438210d1172f98873d74848c1214f75867caa
-url: https://src.opensuse.org/perl/perl-Finance-Quote.git
-revision: c6fb46ab16a01b8f9d6f9fab285438210d1172f98873d74848c1214f75867caa
+mtime: 1776581714
+commit: 8ddffc12046d65d372a60fe5a8463b902c90a0bb41396f60f4df8077aa15e6fe
+url: https://src.opensuse.org/perl/perl-Finance-Quote
+revision: 8ddffc12046d65d372a60fe5a8463b902c90a0bb41396f60f4df8077aa15e6fe
 projectscmsync: https://src.opensuse.org/perl/_ObsPrj
 

++++++ build.specials.obscpio ++++++

++++++ build.specials.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/.gitignore new/.gitignore
--- old/.gitignore      1970-01-01 01:00:00.000000000 +0100
+++ new/.gitignore      2026-04-19 08:55:14.000000000 +0200
@@ -0,0 +1 @@
+.osc

Reply via email to