From 4d12f0538231d9a8c19f368f275080c969cfd1c2 Mon Sep 17 00:00:00 2001 From: Mateusz Bronk Date: Tue, 10 Mar 2026 22:16:11 +0100 Subject: [PATCH 1/4] Fix PLN amount rounding for compliance with tax rules MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Polish tax law requires different rounding methods depending on income type, which was not previously implemented. This change brings the calculation into compliance with Art. 63 Ordynacji Podatkowej (OP). 1. Per currency-converted "tax event" (i.e. stock sales, dividend...), convert each result to full "grosz" (0,01 precision) - before summing. Basis: Mathematical rounding rules (0,01zł is the lowest monetary value) 2. Interests and dividends are separated as they follow different rounding rules when calculating the lump-sum tax a) Interests aggregate (art. 30a ust. 1 pkt 3 PIT) as well as their resulting lump-sum tax, are rounded UP to the nearest full "grosz" — art. 63 §1a OP b) Dividends aggregate (art. 30a ust. 1 pkt 4 PIT) as well as their resulting lump-sum tax, are rounded to the nearest full ZLOTY (0,50zl -> 1zl) — art. 63 §1 OP c) Foreign tax withholding: no rounding the standard FX rule to round to grosz (0,01) precision - rule #1 (above) d) Net/gross/cost stock proceeds are not subject to lump-sum tax calculations and reported in full on PIT-38 form, hence only standard FX rules (#1-above) applies and they are reported with "grosz" precision. Signed-off-by: Mateusz Bronk --- src/de.rs | 9 +++- src/gui.rs | 5 +- src/lib.rs | 132 +++++++++++++++++++++++++++++++++++++++++++++++----- src/main.rs | 41 +++++++++------- src/pl.rs | 109 ++++++++++++++++++++++++++++++++++++++----- src/us.rs | 6 ++- 6 files changed, 257 insertions(+), 45 deletions(-) diff --git a/src/de.rs b/src/de.rs index 2904a1a..1762d79 100644 --- a/src/de.rs +++ b/src/de.rs @@ -57,13 +57,18 @@ impl etradeTaxReturnHelper::Residency for DE { fn present_result( &self, + gross_interests: f32, gross_div: f32, tax_div: f32, gross_sold: f32, cost_sold: f32, ) -> (Vec, Option) { + let total_gross_div = gross_interests + gross_div; let mut presentation: Vec = vec![]; - presentation.push(format!("===> (DIVIDENDS) INCOME: {:.2} EUR", gross_div)); + presentation.push(format!( + "===> (DIVIDENDS) INCOME: {:.2} EUR", + total_gross_div + )); presentation.push(format!("===> (DIVIDENDS) TAX PAID: {:.2} EUR", tax_div)); presentation.push(format!("===> (SOLD STOCK) INCOME: {:.2} EUR", gross_sold)); presentation.push(format!( @@ -95,7 +100,7 @@ mod tests { "===> (SOLD STOCK) TAX DEDUCTIBLE COST: 10.00 EUR".to_string(), ]; - let (results, _) = rd.present_result(gross_div, tax_div, gross_sold, cost_sold); + let (results, _) = rd.present_result(0.0f32, gross_div, tax_div, gross_sold, cost_sold); results .iter() diff --git a/src/gui.rs b/src/gui.rs index 789aca9..dd5a29e 100644 --- a/src/gui.rs +++ b/src/gui.rs @@ -120,7 +120,8 @@ fn create_execute_documents( nbuffer.set_text("Running..."); let rd: Box = Box::new(PL {}); let etradeTaxReturnHelper::TaxCalculationResult { - gross_income: gross_div, + gross_interests, + gross_div, tax: tax_div, gross_sold, cost_sold, @@ -139,7 +140,7 @@ fn create_execute_documents( panic!("Error: unable to perform taxation"); } }; - let (presentation,warning) = rd.present_result(gross_div, tax_div, gross_sold, cost_sold); + let (presentation,warning) = rd.present_result(gross_interests, gross_div, tax_div, gross_sold, cost_sold); buffer.set_text(&presentation.join("\n")); if let Some(warn_msg) = warning { nbuffer.set_text(&warn_msg); diff --git a/src/lib.rs b/src/lib.rs index e5cdd9a..e1e419a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -58,7 +58,7 @@ pub enum Exchange { USD(String), } -#[derive(Debug, PartialEq, PartialOrd)] +#[derive(Debug, PartialEq, PartialOrd, Clone)] pub struct Transaction { pub transaction_date: String, pub gross: Currency, @@ -136,6 +136,7 @@ impl SoldTransaction { pub trait Residency { fn present_result( &self, + gross_interests: f32, gross_div: f32, tax_div: f32, gross_sold: f32, @@ -254,7 +255,12 @@ pub trait Residency { } pub struct TaxCalculationResult { - pub gross_income: f32, + /// Sum of all interest income (eTrade + Revolut savings) converted to PLN per-transaction. + /// Art. 30a ust. 1 pkt 1–3 PIT — rounding: Art. 63 §1a OP (ceil to grosz). + pub gross_interests: f32, + /// Sum of all dividend income (eTrade + Revolut stock divs) converted to PLN per-transaction. + /// Art. 30a ust. 1 pkt 4 PIT — rounding: Art. 63 §1 OP (half-up to full złoty). + pub gross_div: f32, pub tax: f32, pub gross_sold: f32, pub cost_sold: f32, @@ -287,30 +293,37 @@ fn create_client() -> reqwest::blocking::Client { client } +/// Rounds to 0.01 PLN (grosz). +fn round_to_grosz(val: f32) -> f32 { + (val * 100.0).round() / 100.0 +} + fn compute_div_taxation(transactions: &Vec) -> (f32, f32) { // Gross income from dividends in target currency (PLN, EUR etc.) + // Each transaction's FX-converted amount is rounded to 0.01 before summing. let gross_us_pl: f32 = transactions .iter() - .map(|x| x.exchange_rate * x.gross.value() as f32) + .map(|x| round_to_grosz(x.exchange_rate * x.gross.value() as f32)) .sum(); // Tax paid in US in PLN let tax_us_pl: f32 = transactions .iter() - .map(|x| x.exchange_rate * x.tax_paid.value() as f32) + .map(|x| round_to_grosz(x.exchange_rate * x.tax_paid.value() as f32)) .sum(); (gross_us_pl, tax_us_pl) } fn compute_sold_taxation(transactions: &Vec) -> (f32, f32) { // Net income from sold stock in target currency (PLN, EUR etc.) + // Each transaction's FX-converted amount is rounded to 0.01 before summing. let gross_us_pl: f32 = transactions .iter() - .map(|x| x.exchange_rate_settlement * x.income_us) + .map(|x| round_to_grosz(x.exchange_rate_settlement * x.income_us)) .sum(); // Cost of income e.g. cost_basis[target currency] let cost_us_pl: f32 = transactions .iter() - .map(|x| x.exchange_rate_acquisition * x.cost_basis) + .map(|x| round_to_grosz(x.exchange_rate_acquisition * x.cost_basis)) .sum(); (gross_us_pl, cost_us_pl) } @@ -519,14 +532,29 @@ pub fn run_taxation( println!("{}", per_company_report); } - let (gross_interests, _) = compute_div_taxation(&interests); - let (gross_div, tax_div) = compute_div_taxation(&transactions); + let (gross_etrade_interests, _) = compute_div_taxation(&interests); + let (gross_etrade_div, tax_etrade_div) = compute_div_taxation(&transactions); let (gross_sold, cost_sold) = compute_sold_taxation(&sold_transactions); - let (gross_revolut, tax_revolut) = compute_div_taxation(&revolut_dividends_transactions); + + // Split Revolut transactions: savings interests (company=None, art. 30a pkt 1-3) + // vs stock dividends (company=Some, art. 30a pkt 4). + let revolut_interests_txns: Vec = revolut_dividends_transactions + .iter() + .filter(|x| x.company.is_none()) + .cloned() + .collect(); + let revolut_div_txns: Vec = revolut_dividends_transactions + .iter() + .filter(|x| x.company.is_some()) + .cloned() + .collect(); + let (gross_revolut_interests, _) = compute_div_taxation(&revolut_interests_txns); + let (gross_revolut_div, tax_revolut) = compute_div_taxation(&revolut_div_txns); let (gross_revolut_sold, cost_revolut_sold) = compute_sold_taxation(&revolut_sold_transactions); Ok(TaxCalculationResult { - gross_income: gross_interests + gross_div + gross_revolut, - tax: tax_div + tax_revolut, + gross_interests: gross_etrade_interests + gross_revolut_interests, + gross_div: gross_etrade_div + gross_revolut_div, + tax: tax_etrade_div + tax_revolut, gross_sold: gross_sold + gross_revolut_sold, cost_sold: cost_sold + cost_revolut_sold, interests, @@ -541,6 +569,88 @@ pub fn run_taxation( mod tests { use super::*; + #[test] + fn test_round_to_grosz() { + // Normal rounding + assert_eq!(round_to_grosz(1.234), 1.23); + assert_eq!(round_to_grosz(1.235), 1.24); + assert_eq!(round_to_grosz(1.005), 1.01); + assert_eq!(round_to_grosz(0.0), 0.0); + // Rounds down when fraction < 0.5 + assert_eq!(round_to_grosz(4.1523 * 12.34), round_to_grosz(51.239482)); + } + + // Each transaction is rounded to grosz individually before summing. + // Two transactions of 1.005 PLN each: per-transaction gives 1.01 + 1.01 = 2.02, + // whereas rounding the raw sum (2.010) would give 2.01 — a different result. + #[test] + fn test_div_taxation_stepwise_rounding() -> Result<(), String> { + let transactions: Vec = vec![ + Transaction { + transaction_date: "N/A".to_string(), + gross: crate::Currency::PLN(1.005), + tax_paid: crate::Currency::PLN(0.0), + exchange_rate_date: "N/A".to_string(), + exchange_rate: 1.0, + company: None, + }, + Transaction { + transaction_date: "N/A".to_string(), + gross: crate::Currency::PLN(1.005), + tax_paid: crate::Currency::PLN(0.0), + exchange_rate_date: "N/A".to_string(), + exchange_rate: 1.0, + company: None, + }, + ]; + let (gross, _) = compute_div_taxation(&transactions); + // Per-transaction: round(1.005) + round(1.005) = 1.01 + 1.01 = 2.02 + assert_eq!(gross, 2.02); + // Sanity check: rounding the raw sum would give a different answer + assert_ne!(gross, round_to_grosz(1.005 + 1.005)); // round(2.01) = 2.01 + Ok(()) + } + + // Each sold transaction's FX-converted income and cost are rounded to grosz individually + // before summing. Two transactions where rate * amount = 1.005 each: per-transaction gives + // 1.01 + 1.01 = 2.02, whereas rounding the raw sum (2.01) would give 2.01. + #[test] + fn test_sold_taxation_stepwise_rounding() -> Result<(), String> { + let transactions: Vec = vec![ + SoldTransaction { + trade_date: "N/A".to_string(), + settlement_date: "N/A".to_string(), + acquisition_date: "N/A".to_string(), + income_us: 1.0, + cost_basis: 1.0, + exchange_rate_settlement_date: "N/A".to_string(), + exchange_rate_settlement: 1.005, + exchange_rate_acquisition_date: "N/A".to_string(), + exchange_rate_acquisition: 1.005, + company: Some("TFC".to_owned()), + }, + SoldTransaction { + trade_date: "N/A".to_string(), + settlement_date: "N/A".to_string(), + acquisition_date: "N/A".to_string(), + income_us: 1.0, + cost_basis: 1.0, + exchange_rate_settlement_date: "N/A".to_string(), + exchange_rate_settlement: 1.005, + exchange_rate_acquisition_date: "N/A".to_string(), + exchange_rate_acquisition: 1.005, + company: Some("TFC".to_owned()), + }, + ]; + let (gross, cost) = compute_sold_taxation(&transactions); + // Per-transaction: round(1.005) + round(1.005) = 1.01 + 1.01 = 2.02 + assert_eq!(gross, 2.02); + assert_eq!(cost, 2.02); + // Sanity check: rounding the raw sum would give a different answer + assert_ne!(gross, round_to_grosz(1.005 + 1.005)); // round(2.01) = 2.01 + Ok(()) + } + #[test] fn test_validate_file_names_invalid_path() { let files = vec![ diff --git a/src/main.rs b/src/main.rs index 3ddad3e..18a5756 100644 --- a/src/main.rs +++ b/src/main.rs @@ -108,7 +108,8 @@ fn main() { let pdfnames: Vec = pdfnames.map(|x| x.to_string()).collect(); let TaxCalculationResult { - gross_income: gross_div, + gross_interests, + gross_div, tax: tax_div, gross_sold, cost_sold, @@ -123,7 +124,8 @@ fn main() { Err(msg) => panic!("\nError: Unable to compute taxes. \n\nDetails: {msg}"), }; - let (presentation, warning) = rd.present_result(gross_div, tax_div, gross_sold, cost_sold); + let (presentation, warning) = + rd.present_result(gross_interests, gross_div, tax_div, gross_sold, cost_sold); presentation.iter().for_each(|x| println!("{x}")); if let Some(warn_msg) = warning { @@ -397,15 +399,16 @@ mod tests { match etradeTaxReturnHelper::run_taxation(&rd, pdfnames, false, false) { Ok(TaxCalculationResult { - gross_income: gross_div, + gross_interests, + gross_div, tax: tax_div, gross_sold, cost_sold, .. }) => { assert_eq!( - (gross_div, tax_div, gross_sold, cost_sold), - (6331.29, 871.17993, 0.0, 0.0), + (gross_interests, gross_div, tax_div, gross_sold, cost_sold), + (0.0, 6331.29, 871.17993, 0.0, 0.0), ); Ok(()) } @@ -430,15 +433,16 @@ mod tests { match etradeTaxReturnHelper::run_taxation(&rd, pdfnames, false, false) { Ok(TaxCalculationResult { - gross_income: gross_div, + gross_interests, + gross_div, tax: tax_div, gross_sold, cost_sold, .. }) => { assert_eq!( - (gross_div, tax_div, gross_sold, cost_sold), - (9142.319, 1207.08, 22988.617, 20163.5), + (gross_interests, gross_div, tax_div, gross_sold, cost_sold), + (0.0, 9142.319, 1207.08, 22988.62, 20163.5), ); Ok(()) } @@ -463,15 +467,16 @@ mod tests { match etradeTaxReturnHelper::run_taxation(&rd, pdfnames, false, false) { Ok(TaxCalculationResult { - gross_income: gross_div, + gross_interests, + gross_div, tax: tax_div, gross_sold, cost_sold, .. }) => { assert_eq!( - (gross_div, tax_div, gross_sold, cost_sold), - (86.93008, 0.0, 0.0, 0.0), + (gross_interests, gross_div, tax_div, gross_sold, cost_sold), + (86.93008, 0.0, 0.0, 0.0, 0.0), ); Ok(()) } @@ -497,15 +502,16 @@ mod tests { match etradeTaxReturnHelper::run_taxation(&rd, pdfnames, false, false) { Ok(TaxCalculationResult { - gross_income: gross_div, + gross_interests, + gross_div, tax: tax_div, gross_sold, cost_sold, .. }) => { assert_eq!( - (gross_div, tax_div, gross_sold, cost_sold), - (219.34755, 0.0, 89845.65, 44369.938), + (gross_interests, gross_div, tax_div, gross_sold, cost_sold), + (219.34755, 0.0, 0.0, 89845.65, 44369.938), ); Ok(()) } @@ -528,15 +534,16 @@ mod tests { match etradeTaxReturnHelper::run_taxation(&rd, pdfnames, false, false) { Ok(TaxCalculationResult { - gross_income: gross_div, + gross_interests, + gross_div, tax: tax_div, gross_sold, cost_sold, .. }) => { assert_eq!( - (gross_div, tax_div, gross_sold, cost_sold), - (0.66164804, 0.0, 0.0, 0.0), + (gross_interests, gross_div, tax_div, gross_sold, cost_sold), + (0.66164804, 0.0, 0.0, 0.0, 0.0), ); Ok(()) } diff --git a/src/pl.rs b/src/pl.rs index 3fe19d9..ad886e4 100644 --- a/src/pl.rs +++ b/src/pl.rs @@ -139,6 +139,18 @@ fn get_exchange_rates_from_cache( Ok(all_filled) } +/// Art. 63 §1a OP: ceil to 0.01 PLN (pełnych groszy w górę). +/// Applies to the base (podstawa) and tax for art. 30a pkt 1–3 PIT (odsetki). +fn ceil_to_grosz(val: f32) -> f32 { + (val * 100.0).ceil() / 100.0 +} + +/// Art. 63 §1 OP: round half-up to 1 PLN (pełnych złotych). +/// Applies to the base and tax for art. 30a pkt 4 PIT (dywidendy) and art. 30b PIT (sprzedaż). +fn round_half_up_to_zloty(val: f32) -> f32 { + (val + 0.5).floor() +} + impl etradeTaxReturnHelper::Residency for PL { // We search a exchange rate from a working day preceeding given date (settlement date for // etrade) @@ -241,20 +253,33 @@ impl etradeTaxReturnHelper::Residency for PL { fn present_result( &self, + gross_interests: f32, gross_div: f32, tax_div: f32, gross_sold: f32, cost_sold: f32, ) -> (Vec, Option) { let mut presentation: Vec = vec![]; - let tax_pl = 0.19 * gross_div; + + // Art. 30a ust. 1 pkt 1–3 PIT (odsetki): + // Art. 63 §1a OP — podstawa ceiled to grosz; 19% tax also ceiled to grosz. + let gross_interests_pln = ceil_to_grosz(gross_interests); + let tax_interests_pl = ceil_to_grosz(0.19 * gross_interests_pln); + + // Art. 30a ust. 1 pkt 4 PIT (dywidendy): + // Art. 63 §1 OP — podstawa rounded half-up to full złoty; 19% tax also rounded half-up. + let gross_div_pln = round_half_up_to_zloty(gross_div); + let tax_div_pl = round_half_up_to_zloty(0.19 * gross_div_pln); + + let tax_pl = tax_interests_pl + tax_div_pl; + presentation.push(format!( - "(DYWIDENDY) PRZYCHOD Z ZAGRANICY: {:.2} PLN", - gross_div + "(DYWIDENDY+ODSETKI) PRZYCHOD Z ZAGRANICY: {:.2} PLN (w tym: {:.2}zł od odsetek i {:.2}zł od dywidend)", + gross_div_pln + gross_interests_pln, gross_interests_pln, gross_div_pln )); presentation.push(format!( - "===> (DYWIDENDY) ZRYCZALTOWANY PODATEK: {:.2} PLN", - tax_pl + "===> (DYWIDENDY+ODSETKI) ZRYCZALTOWANY PODATEK: {:.2} PLN (w tym: {:.2}zł od odsetek i {:.2}zł od dywidend)", + tax_pl, tax_interests_pl, tax_div_pl )); presentation.push(format!( "===> (DYWIDENDY) PODATEK ZAPLACONY ZAGRANICA: {:.2} PLN", @@ -279,24 +304,49 @@ impl etradeTaxReturnHelper::Residency for PL { #[cfg(test)] mod tests { use super::*; + #[test] + fn test_ceil_to_grosz() { + // Art. 63 §1a OP: always ceil to 0.01 PLN + assert_eq!(ceil_to_grosz(1.231), 1.24); + assert_eq!(ceil_to_grosz(1.230), 1.23); + assert_eq!(ceil_to_grosz(1.001), 1.01); + assert_eq!(ceil_to_grosz(0.0), 0.0); + // Never rounds down, even for tiny fractions + assert_eq!(ceil_to_grosz(0.441), 0.45); + } + + #[test] + fn test_round_half_up_to_zloty() { + // Art. 63 §1 OP: round half-up to full PLN + assert_eq!(round_half_up_to_zloty(100.0), 100.0); + assert_eq!(round_half_up_to_zloty(100.4), 100.0); + assert_eq!(round_half_up_to_zloty(100.5), 101.0); + assert_eq!(round_half_up_to_zloty(100.9), 101.0); + assert_eq!(round_half_up_to_zloty(0.0), 0.0); + assert_eq!(round_half_up_to_zloty(0.49), 0.0); + assert_eq!(round_half_up_to_zloty(0.5), 1.0); + } + #[test] fn test_present_result_pl() -> Result<(), String> { let rd: Box = Box::new(PL {}); + let gross_interests = 0.0f32; let gross_div = 100.0f32; let tax_div = 15.0f32; let gross_sold = 1000.0f32; let cost_sold = 10.0f32; let ref_results: Vec = vec![ - "(DYWIDENDY) PRZYCHOD Z ZAGRANICY: 100.00 PLN".to_string(), - "===> (DYWIDENDY) ZRYCZALTOWANY PODATEK: 19.00 PLN".to_string(), + "(DYWIDENDY+ODSETKI) PRZYCHOD Z ZAGRANICY: 100.00 PLN (w tym: 0.00zł od odsetek i 100.00zł od dywidend)".to_string(), + "===> (DYWIDENDY+ODSETKI) ZRYCZALTOWANY PODATEK: 19.00 PLN (w tym: 0.00zł od odsetek i 19.00zł od dywidend)".to_string(), "===> (DYWIDENDY) PODATEK ZAPLACONY ZAGRANICA: 15.00 PLN".to_string(), "===> (SPRZEDAZ AKCJI) PRZYCHOD Z ZAGRANICY: 1000.00 PLN".to_string(), "===> (SPRZEDAZ AKCJI) KOSZT UZYSKANIA PRZYCHODU: 10.00 PLN".to_string(), ]; - let (results, _) = rd.present_result(gross_div, tax_div, gross_sold, cost_sold); + let (results, _) = + rd.present_result(gross_interests, gross_div, tax_div, gross_sold, cost_sold); results .iter() @@ -354,20 +404,22 @@ mod tests { fn test_present_result_double_taxation_warning_pl() -> Result<(), String> { let rd: Box = Box::new(PL {}); + let gross_interests = 0.0f32; let gross_div = 100.0f32; let tax_div = 30.0f32; let gross_sold = 1000.0f32; let cost_sold = 10.0f32; let ref_results: Vec = vec![ - "(DYWIDENDY) PRZYCHOD Z ZAGRANICY: 100.00 PLN".to_string(), - "===> (DYWIDENDY) ZRYCZALTOWANY PODATEK: 19.00 PLN".to_string(), + "(DYWIDENDY+ODSETKI) PRZYCHOD Z ZAGRANICY: 100.00 PLN (w tym: 0.00zł od odsetek i 100.00zł od dywidend)".to_string(), + "===> (DYWIDENDY+ODSETKI) ZRYCZALTOWANY PODATEK: 19.00 PLN (w tym: 0.00zł od odsetek i 19.00zł od dywidend)".to_string(), "===> (DYWIDENDY) PODATEK ZAPLACONY ZAGRANICA: 30.00 PLN".to_string(), "===> (SPRZEDAZ AKCJI) PRZYCHOD Z ZAGRANICY: 1000.00 PLN".to_string(), "===> (SPRZEDAZ AKCJI) KOSZT UZYSKANIA PRZYCHODU: 10.00 PLN".to_string(), ]; - let (results, warning) = rd.present_result(gross_div, tax_div, gross_sold, cost_sold); + let (results, warning) = + rd.present_result(gross_interests, gross_div, tax_div, gross_sold, cost_sold); results .iter() @@ -384,6 +436,41 @@ mod tests { Ok(()) } + // Art. 63 §1a OP: interests base and tax are ceiled to grosz (never rounded down). + // gross_interests=0.441 → ceil to 0.45; tax = ceil(0.19 * 0.45) = ceil(0.0855) = 0.09 + #[test] + fn test_present_result_interests_ceil_to_grosz() { + let rd: Box = Box::new(PL {}); + let (results, _) = rd.present_result(0.441, 0.0, 0.0, 0.0, 0.0); + assert_eq!(results[0], "(DYWIDENDY+ODSETKI) PRZYCHOD Z ZAGRANICY: 0.45 PLN (w tym: 0.45zł od odsetek i 0.00zł od dywidend)"); + assert_eq!(results[1], "===> (DYWIDENDY+ODSETKI) ZRYCZALTOWANY PODATEK: 0.09 PLN (w tym: 0.09zł od odsetek i 0.00zł od dywidend)"); + } + + // Art. 63 §1 OP: dividends base and tax are rounded half-up to full złoty (not grosz). + // gross_div=100.5 → rounds up to 101; tax = round_half_up(0.19 * 101) = round_half_up(19.19) = 19 + // gross_div=100.4 → rounds down to 100; tax = round_half_up(0.19 * 100) = 19 + #[test] + fn test_present_result_dividends_round_to_zloty() { + let rd: Box = Box::new(PL {}); + let (results_up, _) = rd.present_result(0.0, 100.5, 0.0, 0.0, 0.0); + assert_eq!(results_up[0], "(DYWIDENDY+ODSETKI) PRZYCHOD Z ZAGRANICY: 101.00 PLN (w tym: 0.00zł od odsetek i 101.00zł od dywidend)"); + assert_eq!(results_up[1], "===> (DYWIDENDY+ODSETKI) ZRYCZALTOWANY PODATEK: 19.00 PLN (w tym: 0.00zł od odsetek i 19.00zł od dywidend)"); + + let (results_down, _) = rd.present_result(0.0, 100.4, 0.0, 0.0, 0.0); + assert_eq!(results_down[0], "(DYWIDENDY+ODSETKI) PRZYCHOD Z ZAGRANICY: 100.00 PLN (w tym: 0.00zł od odsetek i 100.00zł od dywidend)"); + } + + // Both income types combined: interests use §1a (ceil to grosz), dividends use §1 (half-up to złoty). + // gross_interests=0.441 → 0.45, tax_interests=0.09 + // gross_div=100.5 → 101, tax_div=19 → combined: 101.45, tax 19.09 + #[test] + fn test_present_result_combined_rounding() { + let rd: Box = Box::new(PL {}); + let (results, _) = rd.present_result(0.441, 100.5, 0.0, 0.0, 0.0); + assert_eq!(results[0], "(DYWIDENDY+ODSETKI) PRZYCHOD Z ZAGRANICY: 101.45 PLN (w tym: 0.45zł od odsetek i 101.00zł od dywidend)"); + assert_eq!(results[1], "===> (DYWIDENDY+ODSETKI) ZRYCZALTOWANY PODATEK: 19.09 PLN (w tym: 0.09zł od odsetek i 19.00zł od dywidend)"); + } + #[test] fn test_is_non_working_day() -> Result<(), String> { let date = chrono::NaiveDate::parse_from_str(&"11/01/24", "%m/%d/%y") diff --git a/src/us.rs b/src/us.rs index d305a01..5a3defa 100644 --- a/src/us.rs +++ b/src/us.rs @@ -18,13 +18,15 @@ impl etradeTaxReturnHelper::Residency for US { fn present_result( &self, + gross_interests: f32, gross_div: f32, tax_div: f32, gross_sold: f32, cost_sold: f32, ) -> (Vec, Option) { + let total_gross_div = gross_interests + gross_div; let mut presentation: Vec = vec![]; - presentation.push(format!("===> (DIVIDENDS) INCOME: ${:.2}", gross_div)); + presentation.push(format!("===> (DIVIDENDS) INCOME: ${:.2}", total_gross_div)); presentation.push(format!("===> (DIVIDENDS) TAX PAID: ${:.2}", tax_div)); presentation.push(format!("===> (SOLD STOCK) INCOME: ${:.2}", gross_sold)); presentation.push(format!( @@ -54,7 +56,7 @@ mod tests { "===> (SOLD STOCK) TAX DEDUCTIBLE COST: $10.00".to_string(), ]; - let (results, _) = rd.present_result(gross_div, tax_div, gross_sold, cost_sold); + let (results, _) = rd.present_result(0.0f32, gross_div, tax_div, gross_sold, cost_sold); results .iter() From 1096aa5050c1c6203913156a93bc72f7a19fbf23 Mon Sep 17 00:00:00 2001 From: Mateusz Bronk Date: Sat, 4 Apr 2026 16:55:59 +0200 Subject: [PATCH 2/4] Add opt-in per-transaction rounding (default off per Art. 63 OP) Per tax advisor consultation with Naczelna Izba Skarbowa and Art. 63 Ordynacja Podatkowa, rounding should only be applied to final tax base and tax amount sums, not to individual transactions. Change default behavior to carry full f32 precision through per-transaction FX conversions. The previous per-transaction rounding to grosz is preserved as an opt-in flag: - CLI: --round-per-transaction - GUI: Options menu toggle (MenuBar) Also add default-run to Cargo.toml to resolve binary ambiguity. Signed-off-by: Mateusz Bronk --- Cargo.toml | 1 + src/gui.rs | 24 ++++++++++++++-- src/lib.rs | 81 ++++++++++++++++++++++++++++++++++++++--------------- src/main.rs | 52 ++++++++++++++++++++++++++++++---- 4 files changed, 127 insertions(+), 31 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 70309e8..a1c5d33 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,6 +11,7 @@ readme = "README.md" keywords = ["etrade", "revolut"] repository = "https://github.com/jczaja/e-trade-tax-return-pl-helper" homepage = "https://github.com/jczaja/e-trade-tax-return-pl-helper" +default-run = "etradeTaxReturnHelper" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html exclude = [ diff --git a/src/gui.rs b/src/gui.rs index dd5a29e..6746e42 100644 --- a/src/gui.rs +++ b/src/gui.rs @@ -9,9 +9,10 @@ use fltk::{ browser::MultiBrowser, button::Button, dialog, - enums::{Event, Font, FrameType, Key}, + enums::{Event, Font, FrameType, Key, Shortcut}, frame::Frame, group::Pack, + menu::{MenuBar, MenuFlag}, prelude::*, text::{TextBuffer, TextDisplay}, window, @@ -77,6 +78,7 @@ fn create_clear_documents( fn create_execute_documents( browser: Rc>, + menubar: Rc>, tdisplay: Rc>, sdisplay: Rc>, ndisplay: Rc>, @@ -118,6 +120,12 @@ fn create_execute_documents( buffer.set_text(""); tbuffer.set_text(""); nbuffer.set_text("Running..."); + let round_per_transaction = { + let mb = menubar.borrow(); + mb.find_item("Options/Round per transaction") + .map(|item| item.value()) + .unwrap_or(false) + }; let rd: Box = Box::new(PL {}); let etradeTaxReturnHelper::TaxCalculationResult { gross_interests, @@ -130,7 +138,7 @@ fn create_execute_documents( revolut_dividends_transactions: revolut_transactions, sold_transactions, revolut_sold_transactions, - } = match run_taxation(&rd, file_names,false, false) { + } = match run_taxation(&rd, file_names, false, false, round_per_transaction) { Ok(res) => { nbuffer.set_text("Finished.\n\n (Double check if generated tax data (Summary) makes sense and then copy it to your tax form)"); res @@ -229,7 +237,16 @@ pub fn run_gui() { wind.make_resizable(true); - let mut uberpack = Pack::new(0, 0, WIND_SIZE_X as i32, WIND_SIZE_Y as i32, ""); + let mut menubar = MenuBar::new(0, 0, WIND_SIZE_X, 25, ""); + menubar.add( + "Options/Round per transaction", + Shortcut::None, + MenuFlag::Toggle, + |_| {}, + ); + let menubar = Rc::new(RefCell::new(menubar)); + + let mut uberpack = Pack::new(0, 25, WIND_SIZE_X as i32, WIND_SIZE_Y as i32 - 25, ""); let mut pack = Pack::new(0, 0, WIND_SIZE_X as i32, WIND_SIZE_Y / 2 as i32, ""); pack.set_type(fltk::group::PackType::Horizontal); @@ -328,6 +345,7 @@ pub fn run_gui() { ); create_execute_documents( browser.clone(), + menubar.clone(), tdisplay.clone(), sdisplay.clone(), ndisplay.clone(), diff --git a/src/lib.rs b/src/lib.rs index e1e419a..7adbe99 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -298,32 +298,64 @@ fn round_to_grosz(val: f32) -> f32 { (val * 100.0).round() / 100.0 } -fn compute_div_taxation(transactions: &Vec) -> (f32, f32) { +fn compute_div_taxation( + transactions: &Vec, + round_per_transaction: bool, +) -> (f32, f32) { // Gross income from dividends in target currency (PLN, EUR etc.) - // Each transaction's FX-converted amount is rounded to 0.01 before summing. let gross_us_pl: f32 = transactions .iter() - .map(|x| round_to_grosz(x.exchange_rate * x.gross.value() as f32)) + .map(|x| { + let v = x.exchange_rate * x.gross.value() as f32; + if round_per_transaction { + round_to_grosz(v) + } else { + v + } + }) .sum(); // Tax paid in US in PLN let tax_us_pl: f32 = transactions .iter() - .map(|x| round_to_grosz(x.exchange_rate * x.tax_paid.value() as f32)) + .map(|x| { + let v = x.exchange_rate * x.tax_paid.value() as f32; + if round_per_transaction { + round_to_grosz(v) + } else { + v + } + }) .sum(); (gross_us_pl, tax_us_pl) } -fn compute_sold_taxation(transactions: &Vec) -> (f32, f32) { +fn compute_sold_taxation( + transactions: &Vec, + round_per_transaction: bool, +) -> (f32, f32) { // Net income from sold stock in target currency (PLN, EUR etc.) - // Each transaction's FX-converted amount is rounded to 0.01 before summing. let gross_us_pl: f32 = transactions .iter() - .map(|x| round_to_grosz(x.exchange_rate_settlement * x.income_us)) + .map(|x| { + let v = x.exchange_rate_settlement * x.income_us; + if round_per_transaction { + round_to_grosz(v) + } else { + v + } + }) .sum(); // Cost of income e.g. cost_basis[target currency] let cost_us_pl: f32 = transactions .iter() - .map(|x| round_to_grosz(x.exchange_rate_acquisition * x.cost_basis)) + .map(|x| { + let v = x.exchange_rate_acquisition * x.cost_basis; + if round_per_transaction { + round_to_grosz(v) + } else { + v + } + }) .sum(); (gross_us_pl, cost_us_pl) } @@ -387,6 +419,7 @@ pub fn run_taxation( names: Vec, per_company: bool, multiyear: bool, + round_per_transaction: bool, ) -> Result { validate_file_names(&names)?; @@ -532,9 +565,10 @@ pub fn run_taxation( println!("{}", per_company_report); } - let (gross_etrade_interests, _) = compute_div_taxation(&interests); - let (gross_etrade_div, tax_etrade_div) = compute_div_taxation(&transactions); - let (gross_sold, cost_sold) = compute_sold_taxation(&sold_transactions); + let (gross_etrade_interests, _) = compute_div_taxation(&interests, round_per_transaction); + let (gross_etrade_div, tax_etrade_div) = + compute_div_taxation(&transactions, round_per_transaction); + let (gross_sold, cost_sold) = compute_sold_taxation(&sold_transactions, round_per_transaction); // Split Revolut transactions: savings interests (company=None, art. 30a pkt 1-3) // vs stock dividends (company=Some, art. 30a pkt 4). @@ -548,9 +582,12 @@ pub fn run_taxation( .filter(|x| x.company.is_some()) .cloned() .collect(); - let (gross_revolut_interests, _) = compute_div_taxation(&revolut_interests_txns); - let (gross_revolut_div, tax_revolut) = compute_div_taxation(&revolut_div_txns); - let (gross_revolut_sold, cost_revolut_sold) = compute_sold_taxation(&revolut_sold_transactions); + let (gross_revolut_interests, _) = + compute_div_taxation(&revolut_interests_txns, round_per_transaction); + let (gross_revolut_div, tax_revolut) = + compute_div_taxation(&revolut_div_txns, round_per_transaction); + let (gross_revolut_sold, cost_revolut_sold) = + compute_sold_taxation(&revolut_sold_transactions, round_per_transaction); Ok(TaxCalculationResult { gross_interests: gross_etrade_interests + gross_revolut_interests, gross_div: gross_etrade_div + gross_revolut_div, @@ -603,7 +640,7 @@ mod tests { company: None, }, ]; - let (gross, _) = compute_div_taxation(&transactions); + let (gross, _) = compute_div_taxation(&transactions, true); // Per-transaction: round(1.005) + round(1.005) = 1.01 + 1.01 = 2.02 assert_eq!(gross, 2.02); // Sanity check: rounding the raw sum would give a different answer @@ -642,7 +679,7 @@ mod tests { company: Some("TFC".to_owned()), }, ]; - let (gross, cost) = compute_sold_taxation(&transactions); + let (gross, cost) = compute_sold_taxation(&transactions, true); // Per-transaction: round(1.005) + round(1.005) = 1.01 + 1.01 = 2.02 assert_eq!(gross, 2.02); assert_eq!(cost, 2.02); @@ -722,7 +759,7 @@ mod tests { exchange_rate: 4.0, company: Some("INTEL CORP".to_owned()), }]; - assert_eq!(compute_div_taxation(&transactions), (400.0, 100.0)); + assert_eq!(compute_div_taxation(&transactions, false), (400.0, 100.0)); Ok(()) } @@ -748,7 +785,7 @@ mod tests { }, ]; assert_eq!( - compute_div_taxation(&transactions), + compute_div_taxation(&transactions, false), (400.0 + 126.0 * 3.5, 100.0 + 10.0 * 3.5) ); Ok(()) @@ -774,7 +811,7 @@ mod tests { }, ]; assert_eq!( - compute_div_taxation(&transactions), + compute_div_taxation(&transactions, false), (0.44 * 1.0 + 0.45 * 1.0, 0.0) ); Ok(()) @@ -801,7 +838,7 @@ mod tests { }, ]; assert_eq!( - compute_div_taxation(&transactions), + compute_div_taxation(&transactions, false), (0.44 * 2.0 + 0.45 * 3.0, 0.0) ); Ok(()) @@ -823,7 +860,7 @@ mod tests { company: Some("TFC".to_owned()), }]; assert_eq!( - compute_sold_taxation(&transactions), + compute_sold_taxation(&transactions, false), (100.0 * 5.0, 70.0 * 6.0) ); Ok(()) @@ -859,7 +896,7 @@ mod tests { }, ]; assert_eq!( - compute_sold_taxation(&transactions), + compute_sold_taxation(&transactions, false), (100.0 * 5.0 + 10.0 * 2.0, 70.0 * 6.0 + 4.0 * 3.0) ); Ok(()) diff --git a/src/main.rs b/src/main.rs index 18a5756..13165a0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -58,6 +58,12 @@ fn create_cmd_line_pattern(myapp: Command) -> Command { .help("Allow processing documents across more than year") .action(clap::ArgAction::SetTrue) ) + .arg( + Arg::new("round-per-transaction") + .long("round-per-transaction") + .help("Round each FX-converted amount to grosz before summing (off by default)") + .action(clap::ArgAction::SetTrue) + ) } fn configure_dataframes_format() { @@ -119,6 +125,7 @@ fn main() { pdfnames, matches.get_flag("per-company"), matches.get_flag("multiyear"), + matches.get_flag("round-per-transaction"), ) { Ok(res) => res, Err(msg) => panic!("\nError: Unable to compute taxes. \n\nDetails: {msg}"), @@ -376,7 +383,7 @@ mod tests { .expect_and_log("error getting financial documents names"); let pdfnames: Vec = pdfnames.map(|x| x.to_string()).collect(); - match etradeTaxReturnHelper::run_taxation(&rd, pdfnames, false, false) { + match etradeTaxReturnHelper::run_taxation(&rd, pdfnames, false, false, false) { Ok(_) => panic!("Expected an error from run_taxation, but got Ok"), Err(_) => Ok(()), // Expected error, test passes } @@ -397,7 +404,7 @@ mod tests { .expect_and_log("error getting brokarage statements pdfs names"); let pdfnames: Vec = pdfnames.map(|x| x.to_string()).collect(); - match etradeTaxReturnHelper::run_taxation(&rd, pdfnames, false, false) { + match etradeTaxReturnHelper::run_taxation(&rd, pdfnames, false, false, false) { Ok(TaxCalculationResult { gross_interests, gross_div, @@ -431,7 +438,40 @@ mod tests { .expect_and_log("error getting brokarage statements pdfs names"); let pdfnames: Vec = pdfnames.map(|x| x.to_string()).collect(); - match etradeTaxReturnHelper::run_taxation(&rd, pdfnames, false, false) { + match etradeTaxReturnHelper::run_taxation(&rd, pdfnames, false, false, false) { + Ok(TaxCalculationResult { + gross_interests, + gross_div, + tax: tax_div, + gross_sold, + cost_sold, + .. + }) => { + assert_eq!( + (gross_interests, gross_div, tax_div, gross_sold, cost_sold), + (0.0, 9142.319, 1207.08, 22988.617, 20163.5), + ); + Ok(()) + } + Err(x) => panic!("Error in taxation process: {x}"), + } + } + + #[test] + fn test_revolut_sold_and_dividends_round_per_transaction() -> Result<(), clap::Error> { + let myapp = Command::new("etradeTaxHelper").arg_required_else_help(true); + let rd: Box = Box::new(pl::PL {}); + + let matches = create_cmd_line_pattern(myapp).get_matches_from(vec![ + "mytest", + "revolut_data/trading-pnl-statement_2022-11-01_2024-09-01_pl-pl_e989f4.csv", + ]); + let pdfnames = matches + .get_many::("financial documents") + .expect_and_log("error getting brokarage statements pdfs names"); + let pdfnames: Vec = pdfnames.map(|x| x.to_string()).collect(); + + match etradeTaxReturnHelper::run_taxation(&rd, pdfnames, false, false, true) { Ok(TaxCalculationResult { gross_interests, gross_div, @@ -465,7 +505,7 @@ mod tests { .expect_and_log("error getting brokarage statements pdfs names"); let pdfnames: Vec = pdfnames.map(|x| x.to_string()).collect(); - match etradeTaxReturnHelper::run_taxation(&rd, pdfnames, false, false) { + match etradeTaxReturnHelper::run_taxation(&rd, pdfnames, false, false, false) { Ok(TaxCalculationResult { gross_interests, gross_div, @@ -500,7 +540,7 @@ mod tests { .expect_and_log("error getting brokarage statements pdfs names"); let pdfnames: Vec = pdfnames.map(|x| x.to_string()).collect(); - match etradeTaxReturnHelper::run_taxation(&rd, pdfnames, false, false) { + match etradeTaxReturnHelper::run_taxation(&rd, pdfnames, false, false, false) { Ok(TaxCalculationResult { gross_interests, gross_div, @@ -532,7 +572,7 @@ mod tests { .expect_and_log("error getting brokarage statements pdfs names"); let pdfnames: Vec = pdfnames.map(|x| x.to_string()).collect(); - match etradeTaxReturnHelper::run_taxation(&rd, pdfnames, false, false) { + match etradeTaxReturnHelper::run_taxation(&rd, pdfnames, false, false, false) { Ok(TaxCalculationResult { gross_interests, gross_div, From f74f7bdc6edc2c240a9b0f4c6ae3545aca6eddc1 Mon Sep 17 00:00:00 2001 From: Mateusz Bronk Date: Sat, 4 Apr 2026 18:43:57 +0200 Subject: [PATCH 3/4] fixup! Fix PLN amount rounding for compliance with tax rules Signed-off-by: Mateusz Bronk --- src/de.rs | 4 ++-- src/us.rs | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/de.rs b/src/de.rs index 1762d79..a7b5b5b 100644 --- a/src/de.rs +++ b/src/de.rs @@ -66,7 +66,7 @@ impl etradeTaxReturnHelper::Residency for DE { let total_gross_div = gross_interests + gross_div; let mut presentation: Vec = vec![]; presentation.push(format!( - "===> (DIVIDENDS) INCOME: {:.2} EUR", + "===> (DIVIDENDS+INTERESTS) INCOME: {:.2} EUR", total_gross_div )); presentation.push(format!("===> (DIVIDENDS) TAX PAID: {:.2} EUR", tax_div)); @@ -94,7 +94,7 @@ mod tests { let cost_sold = 10.0f32; let ref_results: Vec = vec![ - "===> (DIVIDENDS) INCOME: 100.00 EUR".to_string(), + "===> (DIVIDENDS+INTERESTS) INCOME: 100.00 EUR".to_string(), "===> (DIVIDENDS) TAX PAID: 15.00 EUR".to_string(), "===> (SOLD STOCK) INCOME: 1000.00 EUR".to_string(), "===> (SOLD STOCK) TAX DEDUCTIBLE COST: 10.00 EUR".to_string(), diff --git a/src/us.rs b/src/us.rs index 5a3defa..b3fe578 100644 --- a/src/us.rs +++ b/src/us.rs @@ -26,7 +26,10 @@ impl etradeTaxReturnHelper::Residency for US { ) -> (Vec, Option) { let total_gross_div = gross_interests + gross_div; let mut presentation: Vec = vec![]; - presentation.push(format!("===> (DIVIDENDS) INCOME: ${:.2}", total_gross_div)); + presentation.push(format!( + "===> (DIVIDENDS+INTERESTS) INCOME: ${:.2}", + total_gross_div + )); presentation.push(format!("===> (DIVIDENDS) TAX PAID: ${:.2}", tax_div)); presentation.push(format!("===> (SOLD STOCK) INCOME: ${:.2}", gross_sold)); presentation.push(format!( @@ -50,7 +53,7 @@ mod tests { let cost_sold = 10.0f32; let ref_results: Vec = vec![ - "===> (DIVIDENDS) INCOME: $100.00".to_string(), + "===> (DIVIDENDS+INTERESTS) INCOME: $100.00".to_string(), "===> (DIVIDENDS) TAX PAID: $15.00".to_string(), "===> (SOLD STOCK) INCOME: $1000.00".to_string(), "===> (SOLD STOCK) TAX DEDUCTIBLE COST: $10.00".to_string(), From 6b0ce473c609530b4dd8e195799548832745ab3e Mon Sep 17 00:00:00 2001 From: Mateusz Bronk Date: Sat, 4 Apr 2026 15:49:28 +0200 Subject: [PATCH 4/4] Move from float to Decimal for financial calculations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace all f32/f64 money types with rust_decimal::Decimal for precise financial arithmetic. This eliminates floating-point representation errors in tax computations. Motivation: starting at 131,072 PLN (2^17), f32's ULP reaches 0.015625, exceeding 0.01 PLN and making it impossible to represent individual grosz values correctly. Any realistic portfolio of ~$30k+ in US stock sales converted at ~4 PLN/USD crosses this threshold. A new test (test_decimal_precision_vs_f32_sold_taxation) demonstrates a concrete 1-grosz error on a PIT-38-realistic scenario with just 3 trades. Key changes: - Add rust_decimal 1.36.0 (macros, serde-with-float features) - Convert all money types (Currency, Transaction, SoldTransaction, TaxCalculationResult) and rounding functions to Decimal - Update parsers: PDF uses DecimalEntry; CSV parses &str→Decimal directly; XLSX converts calamine f64→Decimal (IEEE 754 unavoidable) - NBP rates: serde-with-float deserialization, cached rates as dec!() - ECB rates: Decimal division for inverse exchange rates - Round gross_sold/cost_sold to grosz in run_taxation output - Add rust_decimal.natvis for VS debugger visualization - Add proof test for f32 grosz error; update all existing tests Signed-off-by: Mateusz Bronk --- Cargo.lock | 289 +- Cargo.toml | 1 + REUSE.toml | 1 + rust_decimal.natvis | 48 + src/bin/gen_exchange_rates.rs | 9 +- src/csvparser.rs | 499 +- src/de.rs | 50 +- src/ecb.rs | 21 +- src/lib.rs | 308 +- src/main.rs | 53 +- src/nbp.rs | 8572 +++++++++++++++++---------------- src/pdfparser.rs | 432 +- src/pl.rs | 192 +- src/transactions.rs | 582 ++- src/us.rs | 27 +- src/xlsxparser.rs | 112 +- 16 files changed, 5893 insertions(+), 5303 deletions(-) create mode 100644 rust_decimal.natvis diff --git a/Cargo.lock b/Cargo.lock index 503c1e0..05572f7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -45,6 +45,17 @@ dependencies = [ "opaque-debug", ] +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom 0.2.16", + "once_cell", + "version_check", +] + [[package]] name = "ahash" version = "0.8.12" @@ -147,6 +158,12 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed51fe0f224d1d4ea768be38c51f9f831dee9d05c163c11fba0b8c44387b1fc3" +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + [[package]] name = "arrow-format" version = "0.8.1" @@ -196,6 +213,18 @@ version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + [[package]] name = "block-buffer" version = "0.9.0" @@ -221,12 +250,58 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" +[[package]] +name = "borsh" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfd1e3f8955a5d7de9fab72fc8373fade9fb8a703968cb200ae3dc6cf08e185a" +dependencies = [ + "borsh-derive", + "bytes", + "cfg_aliases", +] + +[[package]] +name = "borsh-derive" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfcfdc083699101d5a7965e49925975f2f55060f94f9a05e7187be95d530ca59" +dependencies = [ + "once_cell", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.111", +] + [[package]] name = "bumpalo" version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" +[[package]] +name = "bytecheck" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" +dependencies = [ + "bytecheck_derive", + "ptr_meta", + "simdutf8", +] + +[[package]] +name = "bytecheck_derive" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "bytemuck" version = "1.24.0" @@ -292,6 +367,12 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "chrono" version = "0.4.42" @@ -645,6 +726,7 @@ dependencies = [ "regex", "reqwest", "roxmltree", + "rust_decimal", "serde", "serde_json", "simple_logger", @@ -757,6 +839,12 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + [[package]] name = "futures-channel" version = "0.3.31" @@ -865,13 +953,22 @@ dependencies = [ "tracing", ] +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.8", +] + [[package]] name = "hashbrown" version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ - "ahash", + "ahash 0.8.12", "allocator-api2", "rayon", ] @@ -1113,9 +1210,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.12.1" +version = "2.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" +checksum = "45a8a2b9cb3e0b0c1803dbb0758ffac5de2f425b23c28f518faabd9d805342ff" dependencies = [ "equivalent", "hashbrown 0.16.1", @@ -1590,7 +1687,7 @@ version = "0.35.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd503430a6d9779b07915d858865fe998317ef3cfef8973881f578ac5d4baae7" dependencies = [ - "ahash", + "ahash 0.8.12", "arrow-format", "atoi_simd", "bytemuck", @@ -1622,7 +1719,7 @@ version = "0.35.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae73d5b8e55decde670caba1cc82b61f14bfb9a72503198f0997d657a98dcfd6" dependencies = [ - "ahash", + "ahash 0.8.12", "bitflags 2.10.0", "bytemuck", "chrono", @@ -1664,7 +1761,7 @@ version = "0.35.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96e10a0745acd6009db64bef0ceb9e23a70b1c27b26a0a6517c91f3e6363bc06" dependencies = [ - "ahash", + "ahash 0.8.12", "atoi_simd", "bytes", "chrono", @@ -1694,7 +1791,7 @@ version = "0.35.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3555f759705be6dd0d3762d16a0b8787b2dc4da73b57465f3b2bf1a070ba8f20" dependencies = [ - "ahash", + "ahash 0.8.12", "bitflags 2.10.0", "glob", "once_cell", @@ -1717,7 +1814,7 @@ version = "0.35.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a7eb218296aaa7f79945f08288ca32ca3cf25fa505649eeee689ec21eebf636" dependencies = [ - "ahash", + "ahash 0.8.12", "argminmax", "bytemuck", "either", @@ -1764,7 +1861,7 @@ version = "0.35.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "10e32a0958ef854b132bad7f8369cb3237254635d5e864c99505bc0bc1035fbc" dependencies = [ - "ahash", + "ahash 0.8.12", "bytemuck", "once_cell", "percent-encoding", @@ -1834,7 +1931,7 @@ version = "0.35.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da6ce68169fe61d46958c8eab7447360f30f2f23f6e24a0ce703a14b0a3cfbfc" dependencies = [ - "ahash", + "ahash 0.8.12", "bytemuck", "hashbrown 0.14.5", "indexmap", @@ -1871,6 +1968,15 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "proc-macro-crate" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" +dependencies = [ + "toml_edit", +] + [[package]] name = "proc-macro2" version = "1.0.103" @@ -1880,6 +1986,26 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "ptr_meta" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "quick-xml" version = "0.30.0" @@ -1905,6 +2031,12 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + [[package]] name = "rand" version = "0.8.5" @@ -2003,6 +2135,15 @@ version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" +[[package]] +name = "rend" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" +dependencies = [ + "bytecheck", +] + [[package]] name = "reqwest" version = "0.11.27" @@ -2043,12 +2184,69 @@ dependencies = [ "winreg", ] +[[package]] +name = "rkyv" +version = "0.7.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2297bf9c81a3f0dc96bc9521370b88f054168c29826a75e89c55ff196e7ed6a1" +dependencies = [ + "bitvec", + "bytecheck", + "bytes", + "hashbrown 0.12.3", + "ptr_meta", + "rend", + "rkyv_derive", + "seahash", + "tinyvec", + "uuid", +] + +[[package]] +name = "rkyv_derive" +version = "0.7.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84d7b42d4b8d06048d3ac8db0eb31bcb942cbeb709f0b5f2b2ebde398d3038f5" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "roxmltree" version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" +[[package]] +name = "rust_decimal" +version = "1.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ce901f9a19d251159075a4c37af514c3b8ef99c22e02dd8c19161cf397ee94a" +dependencies = [ + "arrayvec", + "borsh", + "bytes", + "num-traits", + "rand", + "rkyv", + "rust_decimal_macros", + "serde", + "serde_json", + "wasm-bindgen", +] + +[[package]] +name = "rust_decimal_macros" +version = "1.40.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74a5a6f027e892c7a035c6fddb50435a1fbf5a734ffc0c2a9fed4d0221440519" +dependencies = [ + "quote", + "syn 2.0.111", +] + [[package]] name = "rustc_version" version = "0.4.1" @@ -2107,6 +2305,12 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "seahash" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" + [[package]] name = "security-framework" version = "2.11.1" @@ -2434,6 +2638,12 @@ dependencies = [ "libc", ] +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + [[package]] name = "target-features" version = "0.1.6" @@ -2568,6 +2778,36 @@ dependencies = [ "tokio", ] +[[package]] +name = "toml_datetime" +version = "1.1.1+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_edit" +version = "0.25.10+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a82418ca169e235e6c399a84e395ab6debeb3bc90edc959bf0f48647c6a32d1b" +dependencies = [ + "indexmap", + "toml_datetime", + "toml_parser", + "winnow", +] + +[[package]] +name = "toml_parser" +version = "1.1.2+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" +dependencies = [ + "winnow", +] + [[package]] name = "tower-service" version = "0.3.3" @@ -2674,6 +2914,16 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +[[package]] +name = "uuid" +version = "1.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ac8b6f42ead25368cf5b098aeb3dc8a1a2c05a3eee8a9a1a68c640edbfc79d9" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "vcpkg" version = "0.2.15" @@ -2719,6 +2969,7 @@ dependencies = [ "cfg-if", "once_cell", "rustversion", + "serde", "wasm-bindgen-macro", "wasm-bindgen-shared", ] @@ -3105,6 +3356,15 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" +[[package]] +name = "winnow" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09dac053f1cd375980747450bfc7250c264eaae0583872e845c0c7cd578872b5" +dependencies = [ + "memchr", +] + [[package]] name = "winreg" version = "0.50.0" @@ -3127,6 +3387,15 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + [[package]] name = "xxhash-rust" version = "0.8.15" diff --git a/Cargo.toml b/Cargo.toml index a1c5d33..1d981e6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -50,5 +50,6 @@ polars = "0.35.4" csv = "1.3.0" serde_json = { version = "=1.0.133", optional = true } holidays = { version = "0.1.0", default-features = false, features = ["PL"] } +rust_decimal = { version = "1.36.0", features = ["macros", "serde-with-float"] } diff --git a/REUSE.toml b/REUSE.toml index d0c53c7..61edf84 100644 --- a/REUSE.toml +++ b/REUSE.toml @@ -10,6 +10,7 @@ SPDX-License-Identifier = "LicenseRef-ETrade-MorganStanley" path=[ "Cargo.lock", "assets/etradetaxreturnhelper-640x480.gif", +"rust_decimal.natvis", ] SPDX-FileCopyrightText = "2025 RustInFinance" SPDX-License-Identifier = "BSD-3-Clause" diff --git a/rust_decimal.natvis b/rust_decimal.natvis new file mode 100644 index 0000000..5851d23 --- /dev/null +++ b/rust_decimal.natvis @@ -0,0 +1,48 @@ + + + + + + + + + {(double)((unsigned __int64)mid * 4294967296 + (unsigned __int64)lo),g} + {(double)((unsigned __int64)mid * 4294967296 + (unsigned __int64)lo) / 10.0,g} + {(double)((unsigned __int64)mid * 4294967296 + (unsigned __int64)lo) / 100.0,g} + {(double)((unsigned __int64)mid * 4294967296 + (unsigned __int64)lo) / 1000.0,g} + {(double)((unsigned __int64)mid * 4294967296 + (unsigned __int64)lo) / 10000.0,g} + {(double)((unsigned __int64)mid * 4294967296 + (unsigned __int64)lo) / 100000.0,g} + {(double)((unsigned __int64)mid * 4294967296 + (unsigned __int64)lo) / 1000000.0,g} + {(double)((unsigned __int64)mid * 4294967296 + (unsigned __int64)lo) / 10000000.0,g} + {(double)((unsigned __int64)mid * 4294967296 + (unsigned __int64)lo) / 100000000.0,g} + + + {-(double)((unsigned __int64)mid * 4294967296 + (unsigned __int64)lo),g} + {-(double)((unsigned __int64)mid * 4294967296 + (unsigned __int64)lo) / 10.0,g} + {-(double)((unsigned __int64)mid * 4294967296 + (unsigned __int64)lo) / 100.0,g} + {-(double)((unsigned __int64)mid * 4294967296 + (unsigned __int64)lo) / 1000.0,g} + {-(double)((unsigned __int64)mid * 4294967296 + (unsigned __int64)lo) / 10000.0,g} + {-(double)((unsigned __int64)mid * 4294967296 + (unsigned __int64)lo) / 100000.0,g} + {-(double)((unsigned __int64)mid * 4294967296 + (unsigned __int64)lo) / 1000000.0,g} + {-(double)((unsigned __int64)mid * 4294967296 + (unsigned __int64)lo) / 10000000.0,g} + {-(double)((unsigned __int64)mid * 4294967296 + (unsigned __int64)lo) / 100000000.0,g} + + + ~{(double)((double)hi * 18446744073709551616.0 + (double)((unsigned __int64)mid * 4294967296 + (unsigned __int64)lo)),g} (approx, scale={(flags >> 16) & 0xFF}) + ~{-(double)((double)hi * 18446744073709551616.0 + (double)((unsigned __int64)mid * 4294967296 + (unsigned __int64)lo)),g} (approx, scale={(flags >> 16) & 0xFF}) + + + (double)((unsigned __int64)mid * 4294967296 + (unsigned __int64)lo) / (((flags >> 16) & 0xFF) == 0 ? 1.0 : ((flags >> 16) & 0xFF) == 1 ? 10.0 : ((flags >> 16) & 0xFF) == 2 ? 100.0 : ((flags >> 16) & 0xFF) == 3 ? 1000.0 : ((flags >> 16) & 0xFF) == 4 ? 10000.0 : ((flags >> 16) & 0xFF) == 5 ? 100000.0 : ((flags >> 16) & 0xFF) == 6 ? 1000000.0 : ((flags >> 16) & 0xFF) == 7 ? 10000000.0 : 100000000.0) + lo + mid + hi + (flags >> 16) & 0xFF + (flags >> 31) & 1 + + + diff --git a/src/bin/gen_exchange_rates.rs b/src/bin/gen_exchange_rates.rs index 7c821ef..cb2c8b9 100644 --- a/src/bin/gen_exchange_rates.rs +++ b/src/bin/gen_exchange_rates.rs @@ -87,28 +87,29 @@ fn main() { let mut output_content = String::new(); output_content.push_str("use std::collections::HashMap;\n\n"); output_content.push_str("use etradeTaxReturnHelper::Exchange;\n\n"); + output_content.push_str("use rust_decimal::Decimal;\nuse rust_decimal::dec;\n\n"); output_content.push_str("#[allow(clippy::approx_constant)]\n"); - output_content.push_str("pub fn get_exchange_rates() -> HashMap {\n"); + output_content.push_str("pub fn get_exchange_rates() -> HashMap {\n"); output_content.push_str(" let mut exchange_rates = HashMap::new();\n"); for (exchange, kurs) in &kursy_map { match exchange { Exchange::USD(data) => { output_content.push_str(&format!( - " exchange_rates.insert(Exchange::USD(\"{}\".to_string()), {}f64);\n", + " exchange_rates.insert(Exchange::USD(\"{}\".to_string()), dec!({}));\n", data, kurs )); } Exchange::EUR(data) => { output_content.push_str(&format!( - " exchange_rates.insert(Exchange::EUR(\"{}\".to_string()), {}f64);\n", + " exchange_rates.insert(Exchange::EUR(\"{}\".to_string()), dec!({}));\n", data, kurs )); } Exchange::PLN(data) => { output_content.push_str(&format!( - " exchange_rates.insert(Exchange::PLN(\"{}\".to_string()), {}f64);\n", + " exchange_rates.insert(Exchange::PLN(\"{}\".to_string()), dec!({}));\n", data, kurs )); } diff --git a/src/csvparser.rs b/src/csvparser.rs index b5aa804..911d181 100644 --- a/src/csvparser.rs +++ b/src/csvparser.rs @@ -2,10 +2,12 @@ // SPDX-License-Identifier: BSD-3-Clause use nom::{ - bytes::complete::tag, bytes::complete::take, error::Error, multi::many_m_n, - number::complete::double, sequence::tuple, + bytes::complete::tag, bytes::complete::take, combinator::recognize, error::Error, + multi::many_m_n, number::complete::double, sequence::tuple, }; use polars::prelude::*; +use rust_decimal::Decimal; +use std::str::FromStr; enum ParsingState { None, @@ -54,28 +56,34 @@ fn extract_cash_with_currency(cashline: &str, currency: &str) -> Result>, take(1usize), tag("PLN"))); - let mut usd_parser = tuple((tag("$"), double::<&str, Error<_>>)); - - // Let's check if We can convert value of currency to f64 directly - let value: f64 = cashline_string - .parse::() - .map_err(|_| format!("error parsing \"{cashline_string}\" to f64")) + let mut pln_parser = tuple(( + recognize(double::<&str, Error<_>>), + take(1usize), + tag("PLN"), + )); + let mut usd_parser = tuple((tag("$"), recognize(double::<&str, Error<_>>))); + + // Let's check if we can convert value of currency to Decimal directly + let decimal_value: Decimal = Decimal::from_str(&cashline_string) .or_else(|_| { - let (_, (value, _, _)) = pln_parser(cashline_string.as_str()) - .map_err(|_| format!("error converting string: \"{cashline_string}\" to f64"))?; - Ok::(value) + let (_, (value, _, _)) = pln_parser(cashline_string.as_str()).map_err(|_| { + format!("error converting string: \"{cashline_string}\" to Decimal") + })?; + Decimal::from_str(value) + .map_err(|e| format!("error converting {value} to Decimal: {e}")) }) - .or_else(|_| { - let (_, (_, value)) = usd_parser(cashline_string.as_str()) - .map_err(|_| format!("error converting string: \"{cashline_string}\" to f64"))?; - Ok::(value) + .or_else(|_: String| { + let (_, (_, value)) = usd_parser(cashline_string.as_str()).map_err(|_| { + format!("error converting string: \"{cashline_string}\" to Decimal") + })?; + Decimal::from_str(value) + .map_err(|e| format!("error converting {value} to Decimal: {e}")) })?; match currency { - "PLN" => Ok(crate::Currency::PLN(value)), - "USD" => Ok(crate::Currency::USD(value)), - "EUR" => Ok(crate::Currency::EUR(value)), + "PLN" => Ok(crate::Currency::PLN(decimal_value)), + "USD" => Ok(crate::Currency::USD(decimal_value)), + "EUR" => Ok(crate::Currency::EUR(decimal_value)), _ => Err(format!("Error converting: {cashline_string}")), } } @@ -92,30 +100,36 @@ fn extract_cash(cashline: &str) -> Result { }; let cashline_string: String = cashline_string.replace(" ", ""); log::info!("Processed moneyin/total amount line: {cashline_string}"); - let mut euro_parser = tuple((double::<&str, Error<_>>, tag("€"))); - let mut euro_parser2 = tuple((tag("€"), double::<&str, Error<_>>)); - let mut usd_parser = tuple((many_m_n(0, 1, tag("-")), tag("$"), double::<&str, Error<_>>)); - let mut usd_parser2 = tuple((many_m_n(0, 1, tag("-")), double::<&str, Error<_>>, tag("$"))); - let mut pln_parser = tuple((double::<&str, Error<_>>, tag("PLN"))); + let mut euro_parser = tuple((recognize(double::<&str, Error<_>>), tag("€"))); + let mut euro_parser2 = tuple((tag("€"), recognize(double::<&str, Error<_>>))); + let mut usd_parser = tuple(( + many_m_n(0, 1, tag("-")), + tag("$"), + recognize(double::<&str, Error<_>>), + )); + let mut usd_parser2 = tuple(( + many_m_n(0, 1, tag("-")), + recognize(double::<&str, Error<_>>), + tag("$"), + )); + let mut pln_parser = tuple((recognize(double::<&str, Error<_>>), tag("PLN"))); + + let to_decimal = |v: &str| -> Result { + Decimal::from_str(v).map_err(|e| format!("error converting {v} to Decimal: {e}")) + }; if let Ok((_, (value, _))) = euro_parser(cashline_string.as_str()) { - return Ok(crate::Currency::EUR(value)); + return Ok(crate::Currency::EUR(to_decimal(value)?)); } else if let Ok((_, (_, value))) = euro_parser2(cashline_string.as_str()) { - return Ok(crate::Currency::EUR(value)); + return Ok(crate::Currency::EUR(to_decimal(value)?)); } else if let Ok((_, (value, _))) = pln_parser(cashline_string.as_str()) { - return Ok(crate::Currency::PLN(value)); + return Ok(crate::Currency::PLN(to_decimal(value)?)); } else if let Ok((_, (sign, _, value))) = usd_parser(cashline_string.as_str()) { - return Ok(crate::Currency::USD(if sign.len() == 1 { - -value - } else { - value - })); + let d = to_decimal(value)?; + return Ok(crate::Currency::USD(if sign.len() == 1 { -d } else { d })); } else if let Ok((_, (sign, value, _))) = usd_parser2(cashline_string.as_str()) { - return Ok(crate::Currency::USD(if sign.len() == 1 { - -value - } else { - value - })); + let d = to_decimal(value)?; + return Ok(crate::Currency::USD(if sign.len() == 1 { -d } else { d })); } else { return Err(format!("Error converting: {cashline_string}")); } @@ -391,7 +405,8 @@ fn process_tax_consolidated_data( .extend(parse_investment_transaction_dates(&filtred_df, "Date")?); let lincomes = parse_incomes(&filtred_df, "Money in")?; ta.symbols.extend(std::iter::repeat_n(None, lincomes.len())); - let ltaxes: Vec = lincomes.iter().map(|i| i.derive(0.0)).collect(); + let ltaxes: Vec = + lincomes.iter().map(|i| i.derive(Decimal::ZERO)).collect(); ta.taxes.extend(ltaxes); ta.incomes.extend(lincomes); } @@ -546,7 +561,7 @@ pub fn parse_revolut_transactions(csvtoparse: &str) -> Result Result Result Result<(), String> { - assert_eq!(extract_cash("0,07€"), Ok(crate::Currency::EUR(0.07))); - assert_eq!(extract_cash("6 000€"), Ok(crate::Currency::EUR(6000.00))); - assert_eq!(extract_cash("600,34€"), Ok(crate::Currency::EUR(600.34))); + assert_eq!(extract_cash("0,07€"), Ok(crate::Currency::EUR(dec!(0.07)))); + assert_eq!( + extract_cash("6 000€"), + Ok(crate::Currency::EUR(dec!(6000.00))) + ); + assert_eq!( + extract_cash("600,34€"), + Ok(crate::Currency::EUR(dec!(600.34))) + ); - assert_eq!(extract_cash("€840.03"), Ok(crate::Currency::EUR(840.03))); - assert_eq!(extract_cash("€0.01"), Ok(crate::Currency::EUR(0.01))); - assert_eq!(extract_cash("€440"), Ok(crate::Currency::EUR(440.0))); + assert_eq!( + extract_cash("€840.03"), + Ok(crate::Currency::EUR(dec!(840.03))) + ); + assert_eq!(extract_cash("€0.01"), Ok(crate::Currency::EUR(dec!(0.01)))); + assert_eq!(extract_cash("€440"), Ok(crate::Currency::EUR(dec!(440.0)))); - assert_eq!(extract_cash("1,06 PLN"), Ok(crate::Currency::PLN(1.06))); + assert_eq!( + extract_cash("1,06 PLN"), + Ok(crate::Currency::PLN(dec!(1.06))) + ); assert_eq!( extract_cash("500 000.45 PLN"), - Ok(crate::Currency::PLN(500000.45)) + Ok(crate::Currency::PLN(dec!(500000.45))) ); assert_eq!( extract_cash("13,037.94 PLN"), - Ok(crate::Currency::PLN(13037.94)) + Ok(crate::Currency::PLN(dec!(13037.94))) ); - assert_eq!(extract_cash("$2.94"), Ok(crate::Currency::USD(2.94))); - assert_eq!(extract_cash("-$0.51"), Ok(crate::Currency::USD(-0.51))); + assert_eq!(extract_cash("$2.94"), Ok(crate::Currency::USD(dec!(2.94)))); + assert_eq!( + extract_cash("-$0.51"), + Ok(crate::Currency::USD(dec!(-0.51))) + ); - assert_eq!(extract_cash("63,28$"), Ok(crate::Currency::USD(63.28))); - assert_eq!(extract_cash("0$"), Ok(crate::Currency::USD(0.0))); + assert_eq!( + extract_cash("63,28$"), + Ok(crate::Currency::USD(dec!(63.28))) + ); + assert_eq!(extract_cash("0$"), Ok(crate::Currency::USD(dec!(0.0)))); Ok(()) } @@ -827,8 +861,8 @@ mod tests { assert_eq!( parse_incomes(&df, "Money in"), Ok(vec![ - crate::Currency::EUR(6000.00), - crate::Currency::EUR(3000.00) + crate::Currency::EUR(dec!(6000.00)), + crate::Currency::EUR(dec!(3000.00)) ]) ); @@ -846,8 +880,8 @@ mod tests { assert_eq!( parse_incomes(&df, "Money in"), Ok(vec![ - crate::Currency::EUR(0.27), - crate::Currency::EUR(5452.74) + crate::Currency::EUR(dec!(0.27)), + crate::Currency::EUR(dec!(5452.74)) ]) ); @@ -865,8 +899,8 @@ mod tests { assert_eq!( parse_incomes(&df, "Total Amount"), Ok(vec![ - crate::Currency::USD(2.94), - crate::Currency::USD(-0.51) + crate::Currency::USD(dec!(2.94)), + crate::Currency::USD(dec!(-0.51)) ]) ); @@ -974,74 +1008,74 @@ mod tests { ( "02/14/20".to_owned(), "12/06/24".to_owned(), - crate::Currency::USD(50.97), - crate::Currency::USD(63.28), + crate::Currency::USD(dec!(50.97)), + crate::Currency::USD(dec!(63.28)), ), ( "02/25/23".to_owned(), "12/06/24".to_owned(), - crate::Currency::USD(0.0), - crate::Currency::USD(0.74), + crate::Currency::USD(dec!(0.0)), + crate::Currency::USD(dec!(0.74)), ), ( "02/25/23".to_owned(), "12/06/24".to_owned(), - crate::Currency::USD(0.0), - crate::Currency::USD(0.37), + crate::Currency::USD(dec!(0.0)), + crate::Currency::USD(dec!(0.37)), ), ( "06/09/24".to_owned(), "12/06/24".to_owned(), - crate::Currency::USD(0.0), - crate::Currency::USD(0.15), + crate::Currency::USD(dec!(0.0)), + crate::Currency::USD(dec!(0.15)), ), ( "06/09/24".to_owned(), "12/06/24".to_owned(), - crate::Currency::USD(0.0), - crate::Currency::USD(0.16), + crate::Currency::USD(dec!(0.0)), + crate::Currency::USD(dec!(0.16)), ), ( "06/09/24".to_owned(), "12/06/24".to_owned(), - crate::Currency::USD(0.0), - crate::Currency::USD(0.13), + crate::Currency::USD(dec!(0.0)), + crate::Currency::USD(dec!(0.13)), ), ( "06/09/24".to_owned(), "12/06/24".to_owned(), - crate::Currency::USD(0.0), - crate::Currency::USD(0.13), + crate::Currency::USD(dec!(0.0)), + crate::Currency::USD(dec!(0.13)), ), ( "06/09/24".to_owned(), "12/06/24".to_owned(), - crate::Currency::USD(0.0), - crate::Currency::USD(0.12), + crate::Currency::USD(dec!(0.0)), + crate::Currency::USD(dec!(0.12)), ), ( "06/09/24".to_owned(), "12/06/24".to_owned(), - crate::Currency::USD(0.0), - crate::Currency::USD(0.14), + crate::Currency::USD(dec!(0.0)), + crate::Currency::USD(dec!(0.14)), ), ( "06/09/24".to_owned(), "12/06/24".to_owned(), - crate::Currency::USD(0.0), - crate::Currency::USD(0.14), + crate::Currency::USD(dec!(0.0)), + crate::Currency::USD(dec!(0.14)), ), ( "06/09/24".to_owned(), "12/06/24".to_owned(), - crate::Currency::USD(0.0), - crate::Currency::USD(0.14), + crate::Currency::USD(dec!(0.0)), + crate::Currency::USD(dec!(0.14)), ), ( "06/09/24".to_owned(), "12/06/24".to_owned(), - crate::Currency::USD(0.0), - crate::Currency::USD(0.15), + crate::Currency::USD(dec!(0.0)), + crate::Currency::USD(dec!(0.15)), ), ], }); @@ -1072,34 +1106,34 @@ mod tests { ); // Sum up cost basis and gross proceeds (values are stored as Currency) - let total_cost: f64 = parsed + let total_cost: Decimal = parsed .crypto_transactions .iter() .map(|(_, _, cost, _)| cost.value()) .sum(); - let total_gross: f64 = parsed + let total_gross: Decimal = parsed .crypto_transactions .iter() .map(|(_, _, _, gross)| gross.value()) .sum(); // The consolidated summary in the fixture reports 0$ cost and 7.95$ gross - let eps = 1e-6; - assert!( - (total_cost - 0.0).abs() < eps, - "expected total crypto cost ~0.0, got {}", + assert_eq!( + total_cost, + dec!(0.0), + "expected total crypto cost 0.0, got {}", total_cost ); assert!( - (total_gross - 7.95).abs() < eps, + (total_gross - dec!(7.95)).abs() < dec!(0.000001), "expected total crypto gross ~7.95, got {}", total_gross ); // Verify savings interest totals (present in the file summary): // EUR interests total = 1,66€ and PLN interests total = 10,09 PLN - let mut sum_eur = 0.0f64; - let mut sum_pln = 0.0f64; + let mut sum_eur = Decimal::ZERO; + let mut sum_pln = Decimal::ZERO; parsed .dividend_transactions .iter() @@ -1109,14 +1143,13 @@ mod tests { _ => (), }); - let eps = 1e-6; assert!( - (sum_eur - 1.66).abs() < eps, + (sum_eur - dec!(1.66)).abs() < dec!(0.000001), "expected EUR interests ~1.66, got {}", sum_eur ); assert!( - (sum_pln - 10.09).abs() < eps, + (sum_pln - dec!(10.09)).abs() < dec!(0.000001), "expected PLN interests ~10.09, got {}", sum_pln ); @@ -1138,20 +1171,20 @@ mod tests { // EUR interests ( "01/03/24".to_owned(), - crate::Currency::EUR(0.01), - crate::Currency::EUR(0.00), + crate::Currency::EUR(dec!(0.01)), + crate::Currency::EUR(dec!(0.00)), None, ), ( "01/04/24".to_owned(), - crate::Currency::EUR(0.02), - crate::Currency::EUR(0.00), + crate::Currency::EUR(dec!(0.02)), + crate::Currency::EUR(dec!(0.00)), None, ), ( "12/31/24".to_owned(), - crate::Currency::EUR(0.01), - crate::Currency::EUR(0.00), + crate::Currency::EUR(dec!(0.01)), + crate::Currency::EUR(dec!(0.00)), None, ), ], @@ -1172,53 +1205,53 @@ mod tests { // EUR interests ( "01/01/24".to_owned(), - crate::Currency::EUR(0.26), - crate::Currency::EUR(0.00), + crate::Currency::EUR(dec!(0.26)), + crate::Currency::EUR(dec!(0.00)), None, ), ( "04/12/24".to_owned(), - crate::Currency::EUR(0.24), - crate::Currency::EUR(0.00), + crate::Currency::EUR(dec!(0.24)), + crate::Currency::EUR(dec!(0.00)), None, ), // PLN interests ( "01/04/24".to_owned(), - crate::Currency::PLN(0.86), - crate::Currency::PLN(0.00), + crate::Currency::PLN(dec!(0.86)), + crate::Currency::PLN(dec!(0.00)), None, ), ( "05/31/24".to_owned(), - crate::Currency::PLN(1.26), - crate::Currency::PLN(0.00), + crate::Currency::PLN(dec!(1.26)), + crate::Currency::PLN(dec!(0.00)), None, ), // Euro dividends ( "08/26/24".to_owned(), - crate::Currency::PLN(302.43), - crate::Currency::PLN(302.43 - 222.65), + crate::Currency::PLN(dec!(302.43)), + crate::Currency::PLN(dec!(302.43) - dec!(222.65)), Some("DE000A289XJ2".to_string()), ), // USD dividends ( "03/04/24".to_owned(), - crate::Currency::PLN(617.00), - crate::Currency::PLN(617.00 - 524.43), + crate::Currency::PLN(dec!(617.00)), + crate::Currency::PLN(dec!(617.00) - dec!(524.43)), Some("TFC".to_string()), ), ( "03/21/24".to_owned(), - crate::Currency::PLN(259.17), - crate::Currency::PLN(0.0), + crate::Currency::PLN(dec!(259.17)), + crate::Currency::PLN(dec!(0.0)), Some("AMCR".to_string()), ), ( "12/17/24".to_owned(), - crate::Currency::PLN(903.35), - crate::Currency::PLN(903.35 - 767.83), + crate::Currency::PLN(dec!(903.35)), + crate::Currency::PLN(dec!(903.35) - dec!(767.83)), Some("EPR".to_string()), ), ], @@ -1226,43 +1259,43 @@ mod tests { ( "07/29/24".to_owned(), "10/28/24".to_owned(), - crate::Currency::PLN(13037.94 + 65.94), - crate::Currency::PLN(13348.22), + crate::Currency::PLN(dec!(13037.94) + dec!(65.94)), + crate::Currency::PLN(dec!(13348.22)), Some("EU000A3K4DJ5".to_string()), ), ( "09/09/24".to_owned(), "11/21/24".to_owned(), - crate::Currency::PLN(16097.86 + 81.41), - crate::Currency::PLN(16477.91), + crate::Currency::PLN(dec!(16097.86) + dec!(81.41)), + crate::Currency::PLN(dec!(16477.91)), Some("XS1218821756".to_string()), ), ( "11/20/23".to_owned(), "08/12/24".to_owned(), - crate::Currency::PLN(19863.25 + 0.66), - crate::Currency::PLN(22865.17), + crate::Currency::PLN(dec!(19863.25) + dec!(0.66)), + crate::Currency::PLN(dec!(22865.17)), Some("XOM".to_string()), ), ( "06/11/24".to_owned(), "10/14/24".to_owned(), - crate::Currency::PLN(525.08 + 0.0), - crate::Currency::PLN(624.00), + crate::Currency::PLN(dec!(525.08) + dec!(0.0)), + crate::Currency::PLN(dec!(624.00)), Some("TFC".to_string()), ), ( "10/23/23".to_owned(), "10/14/24".to_owned(), - crate::Currency::PLN(835.88 + 0.03), - crate::Currency::PLN(1046.20), + crate::Currency::PLN(dec!(835.88) + dec!(0.03)), + crate::Currency::PLN(dec!(1046.20)), Some("AMCR".to_string()), ), ( "08/22/24".to_owned(), "10/17/24".to_owned(), - crate::Currency::PLN(25135.50 + 128.17), - crate::Currency::PLN(26130.41), + crate::Currency::PLN(dec!(25135.50) + dec!(128.17)), + crate::Currency::PLN(dec!(26130.41)), Some("US13607LNF66".to_string()), ), ], @@ -1281,26 +1314,26 @@ mod tests { dividend_transactions: vec![ ( "06/04/24".to_owned(), - crate::Currency::PLN(2.80), - crate::Currency::PLN(0.68), + crate::Currency::PLN(dec!(2.80)), + crate::Currency::PLN(dec!(0.68)), Some("QDVY".to_string()), ), ( "06/20/24".to_owned(), - crate::Currency::PLN(0.34), - crate::Currency::PLN(0.08), + crate::Currency::PLN(dec!(0.34)), + crate::Currency::PLN(dec!(0.08)), Some("EXI2".to_string()), ), ( "06/28/24".to_owned(), - crate::Currency::PLN(3.79), - crate::Currency::PLN(0.94), + crate::Currency::PLN(dec!(3.79)), + crate::Currency::PLN(dec!(0.94)), Some("IS3K".to_string()), ), ( "07/01/24".to_owned(), - crate::Currency::PLN(1.07), - crate::Currency::PLN(0.25), + crate::Currency::PLN(dec!(1.07)), + crate::Currency::PLN(dec!(0.25)), Some("IBCD".to_string()), ), ], @@ -1322,56 +1355,56 @@ mod tests { dividend_transactions: vec![ ( "06/04/24".to_owned(), - crate::Currency::PLN(2.80), - crate::Currency::PLN(0.68), + crate::Currency::PLN(dec!(2.80)), + crate::Currency::PLN(dec!(0.68)), Some("QDVY".to_string()), ), ( "06/20/24".to_owned(), - crate::Currency::PLN(0.34), - crate::Currency::PLN(0.08), + crate::Currency::PLN(dec!(0.34)), + crate::Currency::PLN(dec!(0.08)), Some("EXI2".to_string()), ), ( "06/28/24".to_owned(), - crate::Currency::PLN(3.79), - crate::Currency::PLN(0.94), + crate::Currency::PLN(dec!(3.79)), + crate::Currency::PLN(dec!(0.94)), Some("IS3K".to_string()), ), ( "07/01/24".to_owned(), - crate::Currency::PLN(1.07), - crate::Currency::PLN(0.25), + crate::Currency::PLN(dec!(1.07)), + crate::Currency::PLN(dec!(0.25)), Some("IBCD".to_string()), ), ( "09/27/24".to_owned(), - crate::Currency::PLN(1.02), - crate::Currency::PLN(0.25), + crate::Currency::PLN(dec!(1.02)), + crate::Currency::PLN(dec!(0.25)), Some("IBCD".to_string()), ), ( "09/27/24".to_owned(), - crate::Currency::PLN(1.71), - crate::Currency::PLN(0.42), + crate::Currency::PLN(dec!(1.71)), + crate::Currency::PLN(dec!(0.42)), Some("IUSU".to_string()), ), ( "11/29/24".to_owned(), - crate::Currency::PLN(2.92), - crate::Currency::PLN(0.73), + crate::Currency::PLN(dec!(2.92)), + crate::Currency::PLN(dec!(0.73)), Some("QDVY".to_string()), ), ( "12/17/24".to_owned(), - crate::Currency::PLN(0.04), - crate::Currency::PLN(0.0), + crate::Currency::PLN(dec!(0.04)), + crate::Currency::PLN(dec!(0.0)), Some("EXI2".to_string()), ), ( "12/31/24".to_owned(), - crate::Currency::PLN(1.07), - crate::Currency::PLN(0.25), + crate::Currency::PLN(dec!(1.07)), + crate::Currency::PLN(dec!(0.25)), Some("IBCD".to_string()), ), ], @@ -1393,106 +1426,106 @@ mod tests { dividend_transactions: vec![ ( "03/04/24".to_owned(), - crate::Currency::PLN(617.00), - crate::Currency::PLN(92.57), + crate::Currency::PLN(dec!(617.00)), + crate::Currency::PLN(dec!(92.57)), Some("TFC".to_string()), ), ( "03/21/24".to_owned(), - crate::Currency::PLN(259.17), - crate::Currency::PLN(0.0), + crate::Currency::PLN(dec!(259.17)), + crate::Currency::PLN(dec!(0.0)), Some("AMCR".to_string()), ), ( "03/25/24".to_owned(), - crate::Currency::PLN(212.39), - crate::Currency::PLN(31.87), + crate::Currency::PLN(dec!(212.39)), + crate::Currency::PLN(dec!(31.87)), Some("PXD".to_string()), ), ( "05/16/24".to_owned(), - crate::Currency::PLN(700.17), - crate::Currency::PLN(105.04), + crate::Currency::PLN(dec!(700.17)), + crate::Currency::PLN(dec!(105.04)), Some("EPR".to_string()), ), ( "05/31/24".to_owned(), - crate::Currency::PLN(875.82), - crate::Currency::PLN(131.38), + crate::Currency::PLN(dec!(875.82)), + crate::Currency::PLN(dec!(131.38)), Some("UPS".to_string()), ), ( "06/03/24".to_owned(), - crate::Currency::PLN(488.26), - crate::Currency::PLN(73.25), + crate::Currency::PLN(dec!(488.26)), + crate::Currency::PLN(dec!(73.25)), Some("ABR".to_string()), ), ( "06/04/24".to_owned(), - crate::Currency::PLN(613.2), - crate::Currency::PLN(92.00), + crate::Currency::PLN(dec!(613.2)), + crate::Currency::PLN(dec!(92.00)), Some("TFC".to_string()), ), ( "06/11/24".to_owned(), - crate::Currency::PLN(186.16), - crate::Currency::PLN(27.92), + crate::Currency::PLN(dec!(186.16)), + crate::Currency::PLN(dec!(27.92)), Some("XOM".to_string()), ), ( "06/13/24".to_owned(), - crate::Currency::PLN(264.74), - crate::Currency::PLN(0.00), + crate::Currency::PLN(dec!(264.74)), + crate::Currency::PLN(dec!(0.00)), Some("AMCR".to_string()), ), ( "06/18/24".to_owned(), - crate::Currency::PLN(858.33), - crate::Currency::PLN(128.74), + crate::Currency::PLN(dec!(858.33)), + crate::Currency::PLN(dec!(128.74)), Some("EPR".to_string()), ), ( "07/12/24".to_owned(), - crate::Currency::PLN(421.5), - crate::Currency::PLN(63.23), + crate::Currency::PLN(dec!(421.5)), + crate::Currency::PLN(dec!(63.23)), Some("BBY".to_string()), ), ( "07/16/24".to_owned(), - crate::Currency::PLN(834.55), - crate::Currency::PLN(125.18), + crate::Currency::PLN(dec!(834.55)), + crate::Currency::PLN(dec!(125.18)), Some("EPR".to_string()), ), ( "08/16/24".to_owned(), - crate::Currency::PLN(834.79), - crate::Currency::PLN(125.23), + crate::Currency::PLN(dec!(834.79)), + crate::Currency::PLN(dec!(125.23)), Some("EPR".to_string()), ), ( "08/26/24".to_owned(), - crate::Currency::PLN(302.43), - crate::Currency::PLN(79.77), + crate::Currency::PLN(dec!(302.43)), + crate::Currency::PLN(dec!(79.77)), Some("DE000A289XJ2".to_string()), ), ( "08/29/24".to_owned(), - crate::Currency::PLN(801.25), - crate::Currency::PLN(0.0), + crate::Currency::PLN(dec!(801.25)), + crate::Currency::PLN(dec!(0.0)), Some("BMO".to_string()), ), ( "08/30/24".to_owned(), - crate::Currency::PLN(872.56), - crate::Currency::PLN(130.90), + crate::Currency::PLN(dec!(872.56)), + crate::Currency::PLN(dec!(130.90)), Some("CAG".to_string()), ), ], sold_transactions: vec![( "11/20/23".to_owned(), "08/12/24".to_owned(), - crate::Currency::USD(5000.0), - crate::Currency::USD(5804.62), + crate::Currency::USD(dec!(5000.0)), + crate::Currency::USD(dec!(5804.62)), Some("XOM".to_string()), )], crypto_transactions: vec![], @@ -1514,116 +1547,116 @@ mod tests { dividend_transactions: vec![ ( "12/12/23".to_owned(), - crate::Currency::PLN(0.21), - crate::Currency::PLN(0.00), + crate::Currency::PLN(dec!(0.21)), + crate::Currency::PLN(dec!(0.00)), None, ), ( "12/13/23".to_owned(), - crate::Currency::PLN(0.20), - crate::Currency::PLN(0.00), + crate::Currency::PLN(dec!(0.20)), + crate::Currency::PLN(dec!(0.00)), None, ), ( "12/15/23".to_owned(), - crate::Currency::PLN(0.21), - crate::Currency::PLN(0.00), + crate::Currency::PLN(dec!(0.21)), + crate::Currency::PLN(dec!(0.00)), None, ), ( "12/16/23".to_owned(), - crate::Currency::PLN(0.21), - crate::Currency::PLN(0.00), + crate::Currency::PLN(dec!(0.21)), + crate::Currency::PLN(dec!(0.00)), None, ), ( "12/17/23".to_owned(), - crate::Currency::PLN(0.21), - crate::Currency::PLN(0.00), + crate::Currency::PLN(dec!(0.21)), + crate::Currency::PLN(dec!(0.00)), None, ), ( "12/18/23".to_owned(), - crate::Currency::PLN(0.21), - crate::Currency::PLN(0.00), + crate::Currency::PLN(dec!(0.21)), + crate::Currency::PLN(dec!(0.00)), None, ), ( "12/19/23".to_owned(), - crate::Currency::PLN(0.41), - crate::Currency::PLN(0.00), + crate::Currency::PLN(dec!(0.41)), + crate::Currency::PLN(dec!(0.00)), None, ), ( "12/20/23".to_owned(), - crate::Currency::PLN(0.21), - crate::Currency::PLN(0.00), + crate::Currency::PLN(dec!(0.21)), + crate::Currency::PLN(dec!(0.00)), None, ), ( "12/21/23".to_owned(), - crate::Currency::PLN(0.21), - crate::Currency::PLN(0.00), + crate::Currency::PLN(dec!(0.21)), + crate::Currency::PLN(dec!(0.00)), None, ), ( "12/22/23".to_owned(), - crate::Currency::PLN(0.21), - crate::Currency::PLN(0.00), + crate::Currency::PLN(dec!(0.21)), + crate::Currency::PLN(dec!(0.00)), None, ), ( "12/23/23".to_owned(), - crate::Currency::PLN(0.21), - crate::Currency::PLN(0.00), + crate::Currency::PLN(dec!(0.21)), + crate::Currency::PLN(dec!(0.00)), None, ), ( "12/24/23".to_owned(), - crate::Currency::PLN(0.21), - crate::Currency::PLN(0.00), + crate::Currency::PLN(dec!(0.21)), + crate::Currency::PLN(dec!(0.00)), None, ), ( "12/25/23".to_owned(), - crate::Currency::PLN(0.21), - crate::Currency::PLN(0.00), + crate::Currency::PLN(dec!(0.21)), + crate::Currency::PLN(dec!(0.00)), None, ), ( "12/26/23".to_owned(), - crate::Currency::PLN(0.21), - crate::Currency::PLN(0.00), + crate::Currency::PLN(dec!(0.21)), + crate::Currency::PLN(dec!(0.00)), None, ), ( "12/27/23".to_owned(), - crate::Currency::PLN(0.21), - crate::Currency::PLN(0.00), + crate::Currency::PLN(dec!(0.21)), + crate::Currency::PLN(dec!(0.00)), None, ), ( "12/28/23".to_owned(), - crate::Currency::PLN(0.21), - crate::Currency::PLN(0.00), + crate::Currency::PLN(dec!(0.21)), + crate::Currency::PLN(dec!(0.00)), None, ), ( "12/29/23".to_owned(), - crate::Currency::PLN(0.21), - crate::Currency::PLN(0.00), + crate::Currency::PLN(dec!(0.21)), + crate::Currency::PLN(dec!(0.00)), None, ), ( "12/30/23".to_owned(), - crate::Currency::PLN(0.21), - crate::Currency::PLN(0.00), + crate::Currency::PLN(dec!(0.21)), + crate::Currency::PLN(dec!(0.00)), None, ), ( "12/31/23".to_owned(), - crate::Currency::PLN(0.21), - crate::Currency::PLN(0.00), + crate::Currency::PLN(dec!(0.21)), + crate::Currency::PLN(dec!(0.00)), None, ), ], @@ -1644,20 +1677,20 @@ mod tests { dividend_transactions: vec![ ( "11/02/23".to_owned(), - crate::Currency::USD(-0.02), - crate::Currency::USD(0.00), + crate::Currency::USD(dec!(-0.02)), + crate::Currency::USD(dec!(0.00)), None, ), ( "12/01/23".to_owned(), - crate::Currency::USD(-0.51), - crate::Currency::USD(0.00), + crate::Currency::USD(dec!(-0.51)), + crate::Currency::USD(dec!(0.00)), None, ), ( "12/14/23".to_owned(), - crate::Currency::USD(2.94), - crate::Currency::USD(0.00), + crate::Currency::USD(dec!(2.94)), + crate::Currency::USD(dec!(0.00)), Some("AMCR".to_string()), ), ], diff --git a/src/de.rs b/src/de.rs index a7b5b5b..d7747b3 100644 --- a/src/de.rs +++ b/src/de.rs @@ -2,6 +2,8 @@ // SPDX-License-Identifier: BSD-3-Clause use regex::Regex; +use rust_decimal::Decimal; +use std::str::FromStr; pub struct DE {} @@ -10,25 +12,25 @@ impl etradeTaxReturnHelper::Residency for DE { &self, dates: &mut std::collections::HashMap< etradeTaxReturnHelper::Exchange, - Option<(String, f32)>, + Option<(String, Decimal)>, >, ) -> Result<(), String> { self.get_currency_exchange_rates(dates, "EUR") } - fn parse_exchange_rates(&self, body: &str) -> Result<(f32, String), String> { + fn parse_exchange_rates(&self, body: &str) -> Result<(Decimal, String), String> { // to find examplery "1 US Dollar = 0.82831 Euros on 2/26/2021" let pattern = "1 USD ="; let start_offset = body .find(pattern) .ok_or(&format!("Error finding pattern: {}", pattern))?; let pattern_slice = &body[start_offset..start_offset + 100]; // 100 characters should be enough - // Extract exchange rate (fp32 value) + // Extract exchange rate (Decimal value) log::info!("Exchange rate slice: {}", pattern_slice); let re = Regex::new(r"[0-9]+[.][0-9]+").unwrap(); - let exchange_rate: f32 = match re.find(pattern_slice) { - Some(hit) => hit.as_str().parse::().unwrap(), + let exchange_rate: Decimal = match re.find(pattern_slice) { + Some(hit) => Decimal::from_str(hit.as_str()).unwrap(), None => panic!(), }; @@ -57,11 +59,11 @@ impl etradeTaxReturnHelper::Residency for DE { fn present_result( &self, - gross_interests: f32, - gross_div: f32, - tax_div: f32, - gross_sold: f32, - cost_sold: f32, + gross_interests: Decimal, + gross_div: Decimal, + tax_div: Decimal, + gross_sold: Decimal, + cost_sold: Decimal, ) -> (Vec, Option) { let total_gross_div = gross_interests + gross_div; let mut presentation: Vec = vec![]; @@ -83,15 +85,16 @@ impl etradeTaxReturnHelper::Residency for DE { mod tests { use super::*; use etradeTaxReturnHelper::Residency; + use rust_decimal::dec; #[test] fn test_present_result_de() -> Result<(), String> { let rd: Box = Box::new(DE {}); - let gross_div = 100.0f32; - let tax_div = 15.0f32; - let gross_sold = 1000.0f32; - let cost_sold = 10.0f32; + let gross_div = dec!(100.0); + let tax_div = dec!(15.0); + let gross_sold = dec!(1000.0); + let cost_sold = dec!(10.0); let ref_results: Vec = vec![ "===> (DIVIDENDS+INTERESTS) INCOME: 100.00 EUR".to_string(), @@ -100,7 +103,7 @@ mod tests { "===> (SOLD STOCK) TAX DEDUCTIBLE COST: 10.00 EUR".to_string(), ]; - let (results, _) = rd.present_result(0.0f32, gross_div, tax_div, gross_sold, cost_sold); + let (results, _) = rd.present_result(dec!(0.0), gross_div, tax_div, gross_sold, cost_sold); results .iter() @@ -114,7 +117,7 @@ mod tests { fn test_get_exchange_rates_eur() -> Result<(), String> { let mut dates: std::collections::HashMap< etradeTaxReturnHelper::Exchange, - Option<(String, f32)>, + Option<(String, Decimal)>, > = std::collections::HashMap::new(); dates.insert( etradeTaxReturnHelper::Exchange::USD("07/14/23".to_owned()), @@ -124,16 +127,11 @@ mod tests { let rd: DE = DE {}; rd.get_currency_exchange_rates(&mut dates,"EUR").map_err(|x| "Error: unable to get exchange rates. Please check your internet connection or proxy settings\n\nDetails:".to_string()+x.as_str())?; - let mut expected_result: std::collections::HashMap< - etradeTaxReturnHelper::Exchange, - Option<(String, f32)>, - > = std::collections::HashMap::new(); - expected_result.insert( - etradeTaxReturnHelper::Exchange::USD("07/14/23".to_owned()), - Some(("2023-07-13".to_owned(), 0.89429444)), - ); - - assert_eq!(dates, expected_result); + let (date, rate) = dates[&etradeTaxReturnHelper::Exchange::USD("07/14/23".to_owned())] + .clone() + .unwrap(); + assert_eq!(date, "2023-07-13"); + assert_eq!(rate, dec!(0.8942944017170452512967268825)); Ok(()) } diff --git a/src/ecb.rs b/src/ecb.rs index eb5c1d2..e2def21 100644 --- a/src/ecb.rs +++ b/src/ecb.rs @@ -3,11 +3,13 @@ use chrono; use roxmltree; +use rust_decimal::Decimal; +use std::str::FromStr; pub fn get_eur_to_usd_exchange_rate( start_date: chrono::NaiveDate, end_date: chrono::NaiveDate, -) -> Result { +) -> Result { let query = [ ("startPeriod", start_date.format("%Y-%m-%d").to_string()), ("endPeriod", end_date.format("%Y-%m-%d").to_string()), @@ -17,18 +19,16 @@ pub fn get_eur_to_usd_exchange_rate( let ecb_response = EcbResponse::from_xml_string(&response).unwrap(); assert_eq!(ecb_response.currency, "USD"); assert_eq!(ecb_response.currency_denom, "EUR"); - let usd_to_eur = ecb_response - .rate - .parse::() + let usd_to_eur = Decimal::from_str(&ecb_response.rate) .map_err(|e| format!("Failed to parse exchange rate: {}", e))?; invert_exchange_rate(usd_to_eur) } -fn invert_exchange_rate(rate: f32) -> Result { - if rate == 0.0 { +fn invert_exchange_rate(rate: Decimal) -> Result { + if rate == Decimal::ZERO { return Err("Rate is zero".to_string()); } - Ok(1.0 / rate) + Ok(Decimal::ONE / rate) } const ECB_URL: &str = "https://data-api.ecb.europa.eu/service/data/EXR/D.USD.EUR.SP00.A"; @@ -162,6 +162,7 @@ impl EcbResponse { #[cfg(test)] mod tests { use super::*; + use rust_decimal::dec; #[test] fn test_ecb_parse_xml_from_file() { @@ -257,9 +258,9 @@ mod tests { let xml_data: &str = include_str!("../data/ecb_example_response.xml"); let ecb_response = EcbResponse::from_xml_string(xml_data).unwrap(); - let rate: f32 = ecb_response.rate.parse().unwrap(); - let inverse_rate: f32 = invert_exchange_rate(rate).unwrap(); - assert_eq!(inverse_rate, 1.0 / 1.1182); + let rate = Decimal::from_str(&ecb_response.rate).unwrap(); + let inverse_rate = invert_exchange_rate(rate).unwrap(); + assert_eq!(inverse_rate, Decimal::ONE / dec!(1.1182)); } #[test] diff --git a/src/lib.rs b/src/lib.rs index 7adbe99..90d958b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,6 +1,8 @@ // SPDX-FileCopyrightText: 2022-2025 RustInFinance // SPDX-License-Identifier: BSD-3-Clause +#![debugger_visualizer(natvis_file = "../rust_decimal.natvis")] + mod csvparser; mod ecb; mod logging; @@ -8,6 +10,8 @@ mod pdfparser; mod transactions; mod xlsxparser; +use rust_decimal::Decimal; + type ReqwestClient = reqwest::blocking::Client; pub use logging::ResultExt; @@ -20,20 +24,20 @@ use transactions::{ #[derive(Debug, PartialEq, PartialOrd, Copy, Clone)] pub enum Currency { - PLN(f64), - EUR(f64), - USD(f64), + PLN(Decimal), + EUR(Decimal), + USD(Decimal), } impl Currency { - fn value(&self) -> f64 { + pub fn value(&self) -> Decimal { match self { Currency::EUR(val) => *val, Currency::PLN(val) => *val, Currency::USD(val) => *val, } } - fn derive(&self, val: f64) -> Currency { + pub fn derive(&self, val: Decimal) -> Currency { match self { Currency::EUR(_) => Currency::EUR(val), Currency::PLN(_) => Currency::PLN(val), @@ -64,7 +68,7 @@ pub struct Transaction { pub gross: Currency, pub tax_paid: Currency, pub exchange_rate_date: String, - pub exchange_rate: f32, + pub exchange_rate: Decimal, pub company: Option, } @@ -109,12 +113,12 @@ pub struct SoldTransaction { pub settlement_date: String, pub trade_date: String, pub acquisition_date: String, - pub income_us: f32, - pub cost_basis: f32, + pub income_us: Decimal, + pub cost_basis: Decimal, pub exchange_rate_settlement_date: String, - pub exchange_rate_settlement: f32, + pub exchange_rate_settlement: Decimal, pub exchange_rate_acquisition_date: String, - pub exchange_rate_acquisition: f32, + pub exchange_rate_acquisition: Decimal, pub company: Option, // TODO //pub country : Option, @@ -136,25 +140,25 @@ impl SoldTransaction { pub trait Residency { fn present_result( &self, - gross_interests: f32, - gross_div: f32, - tax_div: f32, - gross_sold: f32, - cost_sold: f32, + gross_interests: Decimal, + gross_div: Decimal, + tax_div: Decimal, + gross_sold: Decimal, + cost_sold: Decimal, ) -> (Vec, Option); fn get_exchange_rates( &self, - dates: &mut std::collections::HashMap>, + dates: &mut std::collections::HashMap>, ) -> Result<(), String>; // Default parser (not to be used) - fn parse_exchange_rates(&self, _body: &str) -> Result<(f32, String), String> { + fn parse_exchange_rates(&self, _body: &str) -> Result<(Decimal, String), String> { panic!("This method should not be used. Implement your own if needed!"); } fn get_currency_exchange_rates( &self, - dates: &mut std::collections::HashMap>, + dates: &mut std::collections::HashMap>, to: &str, ) -> Result<(), String> { if to == "EUR" { @@ -166,7 +170,7 @@ pub trait Residency { fn get_currency_exchange_rates_ecb( &self, - dates: &mut std::collections::HashMap>, + dates: &mut std::collections::HashMap>, _to: &str, ) -> Result<(), String> { dates.iter_mut().try_for_each(|(exchange, val)| { @@ -197,7 +201,7 @@ pub trait Residency { fn get_currency_exchange_rates_legacy( &self, - dates: &mut std::collections::HashMap>, + dates: &mut std::collections::HashMap>, to: &str, ) -> Result<(), String> { let client = create_client(); @@ -257,13 +261,13 @@ pub trait Residency { pub struct TaxCalculationResult { /// Sum of all interest income (eTrade + Revolut savings) converted to PLN per-transaction. /// Art. 30a ust. 1 pkt 1–3 PIT — rounding: Art. 63 §1a OP (ceil to grosz). - pub gross_interests: f32, + pub gross_interests: Decimal, /// Sum of all dividend income (eTrade + Revolut stock divs) converted to PLN per-transaction. /// Art. 30a ust. 1 pkt 4 PIT — rounding: Art. 63 §1 OP (half-up to full złoty). - pub gross_div: f32, - pub tax: f32, - pub gross_sold: f32, - pub cost_sold: f32, + pub gross_div: Decimal, + pub tax: Decimal, + pub gross_sold: Decimal, + pub cost_sold: Decimal, pub interests: Vec, pub transactions: Vec, pub revolut_dividends_transactions: Vec, @@ -294,19 +298,19 @@ fn create_client() -> reqwest::blocking::Client { } /// Rounds to 0.01 PLN (grosz). -fn round_to_grosz(val: f32) -> f32 { - (val * 100.0).round() / 100.0 +fn round_to_grosz(val: Decimal) -> Decimal { + val.round_dp_with_strategy(2, rust_decimal::RoundingStrategy::MidpointAwayFromZero) } fn compute_div_taxation( transactions: &Vec, round_per_transaction: bool, -) -> (f32, f32) { +) -> (Decimal, Decimal) { // Gross income from dividends in target currency (PLN, EUR etc.) - let gross_us_pl: f32 = transactions + let gross_us_pl: Decimal = transactions .iter() .map(|x| { - let v = x.exchange_rate * x.gross.value() as f32; + let v = x.exchange_rate * x.gross.value(); if round_per_transaction { round_to_grosz(v) } else { @@ -315,10 +319,10 @@ fn compute_div_taxation( }) .sum(); // Tax paid in US in PLN - let tax_us_pl: f32 = transactions + let tax_us_pl: Decimal = transactions .iter() .map(|x| { - let v = x.exchange_rate * x.tax_paid.value() as f32; + let v = x.exchange_rate * x.tax_paid.value(); if round_per_transaction { round_to_grosz(v) } else { @@ -332,9 +336,9 @@ fn compute_div_taxation( fn compute_sold_taxation( transactions: &Vec, round_per_transaction: bool, -) -> (f32, f32) { +) -> (Decimal, Decimal) { // Net income from sold stock in target currency (PLN, EUR etc.) - let gross_us_pl: f32 = transactions + let gross_us_pl: Decimal = transactions .iter() .map(|x| { let v = x.exchange_rate_settlement * x.income_us; @@ -346,7 +350,7 @@ fn compute_sold_taxation( }) .sum(); // Cost of income e.g. cost_basis[target currency] - let cost_us_pl: f32 = transactions + let cost_us_pl: Decimal = transactions .iter() .map(|x| { let v = x.exchange_rate_acquisition * x.cost_basis; @@ -423,10 +427,17 @@ pub fn run_taxation( ) -> Result { validate_file_names(&names)?; - let mut parsed_interests_transactions: Vec<(String, f32, f32)> = vec![]; - let mut parsed_div_transactions: Vec<(String, f32, f32, Option)> = vec![]; - let mut parsed_sold_transactions: Vec<(String, String, f32, f32, f32, Option)> = vec![]; - let mut parsed_gain_and_losses: Vec<(String, String, f32, f32, f32)> = vec![]; + let mut parsed_interests_transactions: Vec<(String, Decimal, Decimal)> = vec![]; + let mut parsed_div_transactions: Vec<(String, Decimal, Decimal, Option)> = vec![]; + let mut parsed_sold_transactions: Vec<( + String, + String, + Decimal, + Decimal, + Decimal, + Option, + )> = vec![]; + let mut parsed_gain_and_losses: Vec<(String, String, Decimal, Decimal, Decimal)> = vec![]; let mut parsed_revolut_dividends_transactions: Vec<( String, Currency, @@ -487,7 +498,7 @@ pub fn run_taxation( // Gather all trade , settlement and transaction dates into hash map to be passed to // get_exchange_rate // Hash map : Key(event date) -> (preceeding date, exchange_rate) - let mut dates: std::collections::HashMap> = + let mut dates: std::collections::HashMap> = std::collections::HashMap::new(); parsed_interests_transactions .iter() @@ -592,8 +603,8 @@ pub fn run_taxation( gross_interests: gross_etrade_interests + gross_revolut_interests, gross_div: gross_etrade_div + gross_revolut_div, tax: tax_etrade_div + tax_revolut, - gross_sold: gross_sold + gross_revolut_sold, - cost_sold: cost_sold + cost_revolut_sold, + gross_sold: round_to_grosz(gross_sold + gross_revolut_sold), + cost_sold: round_to_grosz(cost_sold + cost_revolut_sold), interests, transactions: transactions, revolut_dividends_transactions: revolut_dividends_transactions, @@ -605,16 +616,20 @@ pub fn run_taxation( #[cfg(test)] mod tests { use super::*; + use rust_decimal::dec; #[test] fn test_round_to_grosz() { // Normal rounding - assert_eq!(round_to_grosz(1.234), 1.23); - assert_eq!(round_to_grosz(1.235), 1.24); - assert_eq!(round_to_grosz(1.005), 1.01); - assert_eq!(round_to_grosz(0.0), 0.0); + assert_eq!(round_to_grosz(dec!(1.234)), dec!(1.23)); + assert_eq!(round_to_grosz(dec!(1.235)), dec!(1.24)); + assert_eq!(round_to_grosz(dec!(1.005)), dec!(1.01)); + assert_eq!(round_to_grosz(dec!(0.0)), dec!(0.0)); // Rounds down when fraction < 0.5 - assert_eq!(round_to_grosz(4.1523 * 12.34), round_to_grosz(51.239482)); + assert_eq!( + round_to_grosz(dec!(4.1523) * dec!(12.34)), + round_to_grosz(dec!(51.239482)) + ); } // Each transaction is rounded to grosz individually before summing. @@ -625,26 +640,26 @@ mod tests { let transactions: Vec = vec![ Transaction { transaction_date: "N/A".to_string(), - gross: crate::Currency::PLN(1.005), - tax_paid: crate::Currency::PLN(0.0), + gross: crate::Currency::PLN(dec!(1.005)), + tax_paid: crate::Currency::PLN(dec!(0.0)), exchange_rate_date: "N/A".to_string(), - exchange_rate: 1.0, + exchange_rate: dec!(1.0), company: None, }, Transaction { transaction_date: "N/A".to_string(), - gross: crate::Currency::PLN(1.005), - tax_paid: crate::Currency::PLN(0.0), + gross: crate::Currency::PLN(dec!(1.005)), + tax_paid: crate::Currency::PLN(dec!(0.0)), exchange_rate_date: "N/A".to_string(), - exchange_rate: 1.0, + exchange_rate: dec!(1.0), company: None, }, ]; let (gross, _) = compute_div_taxation(&transactions, true); // Per-transaction: round(1.005) + round(1.005) = 1.01 + 1.01 = 2.02 - assert_eq!(gross, 2.02); + assert_eq!(gross, dec!(2.02)); // Sanity check: rounding the raw sum would give a different answer - assert_ne!(gross, round_to_grosz(1.005 + 1.005)); // round(2.01) = 2.01 + assert_ne!(gross, round_to_grosz(dec!(1.005) + dec!(1.005))); // round(2.01) = 2.01 Ok(()) } @@ -658,36 +673,110 @@ mod tests { trade_date: "N/A".to_string(), settlement_date: "N/A".to_string(), acquisition_date: "N/A".to_string(), - income_us: 1.0, - cost_basis: 1.0, + income_us: dec!(1.0), + cost_basis: dec!(1.0), exchange_rate_settlement_date: "N/A".to_string(), - exchange_rate_settlement: 1.005, + exchange_rate_settlement: dec!(1.005), exchange_rate_acquisition_date: "N/A".to_string(), - exchange_rate_acquisition: 1.005, + exchange_rate_acquisition: dec!(1.005), company: Some("TFC".to_owned()), }, SoldTransaction { trade_date: "N/A".to_string(), settlement_date: "N/A".to_string(), acquisition_date: "N/A".to_string(), - income_us: 1.0, - cost_basis: 1.0, + income_us: dec!(1.0), + cost_basis: dec!(1.0), exchange_rate_settlement_date: "N/A".to_string(), - exchange_rate_settlement: 1.005, + exchange_rate_settlement: dec!(1.005), exchange_rate_acquisition_date: "N/A".to_string(), - exchange_rate_acquisition: 1.005, + exchange_rate_acquisition: dec!(1.005), company: Some("TFC".to_owned()), }, ]; let (gross, cost) = compute_sold_taxation(&transactions, true); // Per-transaction: round(1.005) + round(1.005) = 1.01 + 1.01 = 2.02 - assert_eq!(gross, 2.02); - assert_eq!(cost, 2.02); + assert_eq!(gross, dec!(2.02)); + assert_eq!(cost, dec!(2.02)); // Sanity check: rounding the raw sum would give a different answer - assert_ne!(gross, round_to_grosz(1.005 + 1.005)); // round(2.01) = 2.01 + assert_ne!(gross, round_to_grosz(dec!(1.005) + dec!(1.005))); // round(2.01) = 2.01 Ok(()) } + /// Proves that f32 arithmetic gives a different (wrong) grosz result than + /// exact Decimal arithmetic for a realistic sold-stock scenario. + /// + /// Three stock sales with realistic NBP exchange rates, summing to ~200k PLN + /// where f32's ULP ≈ 0.016 — larger than 0.01 (one grosz). At this magnitude + /// f32 literally cannot distinguish adjacent grosz values. + /// + /// Exact gross sum (Decimal): 199985.462815 PLN → rounds to 199985.46 + /// f32 gross sum: 199985.45 PLN → formats as 199985.45 + /// + /// This is the kind of 1-grosz error that would appear on a PIT-38 tax return. + #[test] + fn test_decimal_precision_vs_f32_sold_taxation() { + // Three sold transactions with realistic NBP exchange rates. + // income amounts chosen so the PLN sum lands where f32 can't represent the grosz. + let transactions: Vec = vec![ + SoldTransaction { + trade_date: "N/A".to_string(), + settlement_date: "N/A".to_string(), + acquisition_date: "N/A".to_string(), + income_us: dec!(24000.00), + cost_basis: Decimal::ZERO, + exchange_rate_settlement_date: "N/A".to_string(), + exchange_rate_settlement: dec!(4.1537), // realistic NBP USD/PLN + exchange_rate_acquisition_date: "N/A".to_string(), + exchange_rate_acquisition: Decimal::ONE, + company: Some("AAPL".to_owned()), + }, + SoldTransaction { + trade_date: "N/A".to_string(), + settlement_date: "N/A".to_string(), + acquisition_date: "N/A".to_string(), + income_us: dec!(24000.00), + cost_basis: Decimal::ZERO, + exchange_rate_settlement_date: "N/A".to_string(), + exchange_rate_settlement: dec!(3.9150), + exchange_rate_acquisition_date: "N/A".to_string(), + exchange_rate_acquisition: Decimal::ONE, + company: Some("MSFT".to_owned()), + }, + SoldTransaction { + trade_date: "N/A".to_string(), + settlement_date: "N/A".to_string(), + acquisition_date: "N/A".to_string(), + income_us: dec!(1480.01), + cost_basis: Decimal::ZERO, + exchange_rate_settlement_date: "N/A".to_string(), + exchange_rate_settlement: dec!(4.2815), + exchange_rate_acquisition_date: "N/A".to_string(), + exchange_rate_acquisition: Decimal::ONE, + company: Some("GOOG".to_owned()), + }, + ]; + + let (gross, _cost) = compute_sold_taxation(&transactions, false); + + // Decimal arithmetic is exact: + // 4.1537 * 24000 = 99688.8 + // 3.9150 * 24000 = 93960.0 + // 4.2815 * 1480.01 = 6336.662815 + // sum = 199985.462815 + assert_eq!(gross, dec!(199985.462815)); + assert_eq!(round_to_grosz(gross), dec!(199985.46)); + + // Prove f32 gives a DIFFERENT answer (the bug this migration fixes): + let f32_gross: f32 = + 4.1537_f32 * 24000.0_f32 + 3.9150_f32 * 24000.0_f32 + 4.2815_f32 * 1480.01_f32; + assert_eq!( + format!("{:.2}", f32_gross), + "199985.45", + "f32 produces 199985.45 — a 1-grosz error vs the correct 199985.46" + ); + } + #[test] fn test_validate_file_names_invalid_path() { let files = vec![ @@ -753,13 +842,16 @@ mod tests { // Init Transactions let transactions: Vec = vec![Transaction { transaction_date: "N/A".to_string(), - gross: crate::Currency::USD(100.0), - tax_paid: crate::Currency::USD(25.0), + gross: crate::Currency::USD(dec!(100.0)), + tax_paid: crate::Currency::USD(dec!(25.0)), exchange_rate_date: "N/A".to_string(), - exchange_rate: 4.0, + exchange_rate: dec!(4.0), company: Some("INTEL CORP".to_owned()), }]; - assert_eq!(compute_div_taxation(&transactions, false), (400.0, 100.0)); + assert_eq!( + compute_div_taxation(&transactions, false), + (dec!(400.0), dec!(100.0)) + ); Ok(()) } @@ -769,24 +861,27 @@ mod tests { let transactions: Vec = vec![ Transaction { transaction_date: "N/A".to_string(), - gross: crate::Currency::USD(100.0), - tax_paid: crate::Currency::USD(25.0), + gross: crate::Currency::USD(dec!(100.0)), + tax_paid: crate::Currency::USD(dec!(25.0)), exchange_rate_date: "N/A".to_string(), - exchange_rate: 4.0, + exchange_rate: dec!(4.0), company: Some("INTEL CORP".to_owned()), }, Transaction { transaction_date: "N/A".to_string(), - gross: crate::Currency::USD(126.0), - tax_paid: crate::Currency::USD(10.0), + gross: crate::Currency::USD(dec!(126.0)), + tax_paid: crate::Currency::USD(dec!(10.0)), exchange_rate_date: "N/A".to_string(), - exchange_rate: 3.5, + exchange_rate: dec!(3.5), company: Some("INTEL CORP".to_owned()), }, ]; assert_eq!( compute_div_taxation(&transactions, false), - (400.0 + 126.0 * 3.5, 100.0 + 10.0 * 3.5) + ( + dec!(400.0) + dec!(126.0) * dec!(3.5), + dec!(100.0) + dec!(10.0) * dec!(3.5) + ) ); Ok(()) } @@ -795,24 +890,24 @@ mod tests { let transactions: Vec = vec![ Transaction { transaction_date: "03/01/21".to_string(), - gross: crate::Currency::PLN(0.44), - tax_paid: crate::Currency::PLN(0.0), + gross: crate::Currency::PLN(dec!(0.44)), + tax_paid: crate::Currency::PLN(dec!(0.0)), exchange_rate_date: "N/A".to_string(), - exchange_rate: 1.0, + exchange_rate: dec!(1.0), company: None, }, Transaction { transaction_date: "04/11/21".to_string(), - gross: crate::Currency::PLN(0.45), - tax_paid: crate::Currency::PLN(0.0), + gross: crate::Currency::PLN(dec!(0.45)), + tax_paid: crate::Currency::PLN(dec!(0.0)), exchange_rate_date: "N/A".to_string(), - exchange_rate: 1.0, + exchange_rate: dec!(1.0), company: None, }, ]; assert_eq!( compute_div_taxation(&transactions, false), - (0.44 * 1.0 + 0.45 * 1.0, 0.0) + (dec!(0.44) * dec!(1.0) + dec!(0.45) * dec!(1.0), dec!(0.0)) ); Ok(()) } @@ -822,24 +917,24 @@ mod tests { let transactions: Vec = vec![ Transaction { transaction_date: "03/01/21".to_string(), - gross: crate::Currency::EUR(0.44), - tax_paid: crate::Currency::EUR(0.0), + gross: crate::Currency::EUR(dec!(0.44)), + tax_paid: crate::Currency::EUR(dec!(0.0)), exchange_rate_date: "02/28/21".to_string(), - exchange_rate: 2.0, + exchange_rate: dec!(2.0), company: None, }, Transaction { transaction_date: "04/11/21".to_string(), - gross: crate::Currency::EUR(0.45), - tax_paid: crate::Currency::EUR(0.0), + gross: crate::Currency::EUR(dec!(0.45)), + tax_paid: crate::Currency::EUR(dec!(0.0)), exchange_rate_date: "04/10/21".to_string(), - exchange_rate: 3.0, + exchange_rate: dec!(3.0), company: None, }, ]; assert_eq!( compute_div_taxation(&transactions, false), - (0.44 * 2.0 + 0.45 * 3.0, 0.0) + (dec!(0.44) * dec!(2.0) + dec!(0.45) * dec!(3.0), dec!(0.0)) ); Ok(()) } @@ -851,17 +946,17 @@ mod tests { trade_date: "N/A".to_string(), settlement_date: "N/A".to_string(), acquisition_date: "N/A".to_string(), - income_us: 100.0, - cost_basis: 70.0, + income_us: dec!(100.0), + cost_basis: dec!(70.0), exchange_rate_settlement_date: "N/A".to_string(), - exchange_rate_settlement: 5.0, + exchange_rate_settlement: dec!(5.0), exchange_rate_acquisition_date: "N/A".to_string(), - exchange_rate_acquisition: 6.0, + exchange_rate_acquisition: dec!(6.0), company: Some("TFC".to_owned()), }]; assert_eq!( compute_sold_taxation(&transactions, false), - (100.0 * 5.0, 70.0 * 6.0) + (dec!(100.0) * dec!(5.0), dec!(70.0) * dec!(6.0)) ); Ok(()) } @@ -874,30 +969,33 @@ mod tests { trade_date: "N/A".to_string(), settlement_date: "N/A".to_string(), acquisition_date: "N/A".to_string(), - income_us: 100.0, - cost_basis: 70.0, + income_us: dec!(100.0), + cost_basis: dec!(70.0), exchange_rate_settlement_date: "N/A".to_string(), - exchange_rate_settlement: 5.0, + exchange_rate_settlement: dec!(5.0), exchange_rate_acquisition_date: "N/A".to_string(), - exchange_rate_acquisition: 6.0, + exchange_rate_acquisition: dec!(6.0), company: Some("PXD".to_owned()), }, SoldTransaction { trade_date: "N/A".to_string(), settlement_date: "N/A".to_string(), acquisition_date: "N/A".to_string(), - income_us: 10.0, - cost_basis: 4.0, + income_us: dec!(10.0), + cost_basis: dec!(4.0), exchange_rate_settlement_date: "N/A".to_string(), - exchange_rate_settlement: 2.0, + exchange_rate_settlement: dec!(2.0), exchange_rate_acquisition_date: "N/A".to_string(), - exchange_rate_acquisition: 3.0, + exchange_rate_acquisition: dec!(3.0), company: Some("TFC".to_owned()), }, ]; assert_eq!( compute_sold_taxation(&transactions, false), - (100.0 * 5.0 + 10.0 * 2.0, 70.0 * 6.0 + 4.0 * 3.0) + ( + dec!(100.0) * dec!(5.0) + dec!(10.0) * dec!(2.0), + dec!(70.0) * dec!(6.0) + dec!(4.0) * dec!(3.0) + ) ); Ok(()) } diff --git a/src/main.rs b/src/main.rs index 13165a0..ae7b61b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,8 @@ // SPDX-FileCopyrightText: 2022-2025 RustInFinance // SPDX-License-Identifier: BSD-3-Clause +#![debugger_visualizer(natvis_file = "../rust_decimal.natvis")] + use clap::{Arg, Command}; use std::env; @@ -144,6 +146,8 @@ fn main() { mod tests { use super::*; use clap::Command; + use rust_decimal::dec; + use rust_decimal::Decimal; #[test] fn test_exchange_rate_de() -> Result<(), String> { @@ -151,7 +155,7 @@ mod tests { let mut dates: std::collections::HashMap< etradeTaxReturnHelper::Exchange, - Option<(String, f32)>, + Option<(String, Decimal)>, > = std::collections::HashMap::new(); dates.insert( @@ -166,10 +170,8 @@ mod tests { .clone() .unwrap(); - assert_eq!( - (exchange_rate_date, exchange_rate), - ("2023-02-20".to_owned(), 0.9368559) - ); + assert_eq!(exchange_rate_date, "2023-02-20"); + assert_eq!(exchange_rate, dec!(0.9368559115608019486602960465)); Ok(()) } @@ -179,7 +181,7 @@ mod tests { let mut dates: std::collections::HashMap< etradeTaxReturnHelper::Exchange, - Option<(String, f32)>, + Option<(String, Decimal)>, > = std::collections::HashMap::new(); dates.insert( @@ -196,7 +198,7 @@ mod tests { assert_eq!( (exchange_rate_date, exchange_rate), - ("2021-02-26".to_owned(), 3.7247) + ("2021-02-26".to_owned(), dec!(3.7247)) ); Ok(()) } @@ -207,7 +209,7 @@ mod tests { let mut dates: std::collections::HashMap< etradeTaxReturnHelper::Exchange, - Option<(String, f32)>, + Option<(String, Decimal)>, > = std::collections::HashMap::new(); dates.insert( @@ -222,7 +224,10 @@ mod tests { .clone() .unwrap(); - assert_eq!((exchange_rate_date, exchange_rate), ("N/A".to_owned(), 1.0)); + assert_eq!( + (exchange_rate_date, exchange_rate), + ("N/A".to_owned(), Decimal::ONE) + ); Ok(()) } @@ -415,7 +420,7 @@ mod tests { }) => { assert_eq!( (gross_interests, gross_div, tax_div, gross_sold, cost_sold), - (0.0, 6331.29, 871.17993, 0.0, 0.0), + (dec!(0), dec!(6331.29), dec!(871.18), dec!(0), dec!(0)), ); Ok(()) } @@ -449,7 +454,13 @@ mod tests { }) => { assert_eq!( (gross_interests, gross_div, tax_div, gross_sold, cost_sold), - (0.0, 9142.319, 1207.08, 22988.617, 20163.5), + ( + dec!(0), + dec!(9142.32), + dec!(1207.08), + dec!(22988.62), + dec!(20163.50) + ), ); Ok(()) } @@ -482,7 +493,13 @@ mod tests { }) => { assert_eq!( (gross_interests, gross_div, tax_div, gross_sold, cost_sold), - (0.0, 9142.319, 1207.08, 22988.62, 20163.5), + ( + dec!(0), + dec!(9142.32), + dec!(1207.08), + dec!(22988.62), + dec!(20163.50) + ), ); Ok(()) } @@ -516,7 +533,7 @@ mod tests { }) => { assert_eq!( (gross_interests, gross_div, tax_div, gross_sold, cost_sold), - (86.93008, 0.0, 0.0, 0.0, 0.0), + (dec!(86.93), dec!(0), dec!(0), dec!(0), dec!(0)), ); Ok(()) } @@ -551,7 +568,13 @@ mod tests { }) => { assert_eq!( (gross_interests, gross_div, tax_div, gross_sold, cost_sold), - (219.34755, 0.0, 0.0, 89845.65, 44369.938), + ( + dec!(0), + dec!(219.34755), + dec!(0.0), + dec!(89845.65), + dec!(44369.938) + ), ); Ok(()) } @@ -583,7 +606,7 @@ mod tests { }) => { assert_eq!( (gross_interests, gross_div, tax_div, gross_sold, cost_sold), - (0.66164804, 0.0, 0.0, 0.0, 0.0), + (dec!(0.66164804), dec!(0), dec!(0.0), dec!(0.0), dec!(0.0)), ); Ok(()) } diff --git a/src/nbp.rs b/src/nbp.rs index 22b5cbb..1f1736e 100644 --- a/src/nbp.rs +++ b/src/nbp.rs @@ -3,4293 +3,4295 @@ use std::collections::HashMap; use etradeTaxReturnHelper::Exchange; +use rust_decimal::dec; +use rust_decimal::Decimal; #[allow(clippy::approx_constant)] -pub fn get_exchange_rates() -> HashMap { +pub fn get_exchange_rates() -> HashMap { let mut exchange_rates = HashMap::new(); - exchange_rates.insert(Exchange::EUR("2025-03-24".to_string()), 4.1832f64); - exchange_rates.insert(Exchange::USD("2016-07-05".to_string()), 3.9963f64); - exchange_rates.insert(Exchange::USD("2023-10-12".to_string()), 4.2659f64); - exchange_rates.insert(Exchange::USD("2024-07-12".to_string()), 3.9099f64); - exchange_rates.insert(Exchange::USD("2020-01-21".to_string()), 3.8284f64); - exchange_rates.insert(Exchange::USD("2025-03-26".to_string()), 3.8614f64); - exchange_rates.insert(Exchange::USD("2018-05-10".to_string()), 3.5773f64); - exchange_rates.insert(Exchange::USD("2019-05-22".to_string()), 3.862f64); - exchange_rates.insert(Exchange::USD("2024-11-15".to_string()), 4.0898f64); - exchange_rates.insert(Exchange::EUR("2025-12-17".to_string()), 4.2149f64); - exchange_rates.insert(Exchange::USD("2024-04-12".to_string()), 3.9983f64); - exchange_rates.insert(Exchange::USD("2025-08-21".to_string()), 3.6483f64); - exchange_rates.insert(Exchange::USD("2020-06-23".to_string()), 3.9311f64); - exchange_rates.insert(Exchange::USD("2025-10-15".to_string()), 3.6585f64); - exchange_rates.insert(Exchange::USD("2015-01-22".to_string()), 3.6994f64); - exchange_rates.insert(Exchange::USD("2017-01-04".to_string()), 4.2037f64); - exchange_rates.insert(Exchange::USD("2015-11-02".to_string()), 3.859f64); - exchange_rates.insert(Exchange::USD("2023-09-14".to_string()), 4.312f64); - exchange_rates.insert(Exchange::USD("2024-12-11".to_string()), 4.0628f64); - exchange_rates.insert(Exchange::USD("2020-12-18".to_string()), 3.6322f64); - exchange_rates.insert(Exchange::USD("2025-10-20".to_string()), 3.6349f64); - exchange_rates.insert(Exchange::USD("2022-08-12".to_string()), 4.5459f64); - exchange_rates.insert(Exchange::USD("2019-11-21".to_string()), 3.8737f64); - exchange_rates.insert(Exchange::USD("2016-04-15".to_string()), 3.8176f64); - exchange_rates.insert(Exchange::USD("2015-03-13".to_string()), 3.9141f64); - exchange_rates.insert(Exchange::EUR("2023-04-05".to_string()), 4.6803f64); - exchange_rates.insert(Exchange::USD("2021-07-28".to_string()), 3.8849f64); - exchange_rates.insert(Exchange::EUR("2023-12-11".to_string()), 4.3366f64); - exchange_rates.insert(Exchange::USD("2012-07-02".to_string()), 3.3456f64); - exchange_rates.insert(Exchange::USD("2021-12-15".to_string()), 4.0999f64); - exchange_rates.insert(Exchange::USD("2015-03-02".to_string()), 3.7053f64); - exchange_rates.insert(Exchange::USD("2020-08-07".to_string()), 3.7302f64); - exchange_rates.insert(Exchange::USD("2013-07-25".to_string()), 3.2143f64); - exchange_rates.insert(Exchange::USD("2021-07-14".to_string()), 3.8955f64); - exchange_rates.insert(Exchange::USD("2020-08-31".to_string()), 3.6924f64); - exchange_rates.insert(Exchange::USD("2012-05-17".to_string()), 3.4194f64); - exchange_rates.insert(Exchange::USD("2012-06-21".to_string()), 3.3617f64); - exchange_rates.insert(Exchange::EUR("2023-11-20".to_string()), 4.368f64); - exchange_rates.insert(Exchange::USD("2025-04-25".to_string()), 3.7611f64); - exchange_rates.insert(Exchange::EUR("2024-03-22".to_string()), 4.3186f64); - exchange_rates.insert(Exchange::USD("2024-02-19".to_string()), 4.0269f64); - exchange_rates.insert(Exchange::USD("2018-06-06".to_string()), 3.647f64); - exchange_rates.insert(Exchange::USD("2021-09-15".to_string()), 3.8475f64); - exchange_rates.insert(Exchange::USD("2019-10-04".to_string()), 3.9469f64); - exchange_rates.insert(Exchange::EUR("2025-04-16".to_string()), 4.3033f64); - exchange_rates.insert(Exchange::USD("2024-08-05".to_string()), 3.9331f64); - exchange_rates.insert(Exchange::USD("2019-02-11".to_string()), 3.819f64); - exchange_rates.insert(Exchange::USD("2019-02-01".to_string()), 3.7243f64); - exchange_rates.insert(Exchange::USD("2014-10-30".to_string()), 3.3592f64); - exchange_rates.insert(Exchange::USD("2016-05-16".to_string()), 3.8625f64); - exchange_rates.insert(Exchange::USD("2016-06-28".to_string()), 4.003f64); - exchange_rates.insert(Exchange::EUR("2025-08-25".to_string()), 4.2627f64); - exchange_rates.insert(Exchange::USD("2023-01-11".to_string()), 4.3639f64); - exchange_rates.insert(Exchange::USD("2016-01-07".to_string()), 4.0085f64); - exchange_rates.insert(Exchange::USD("2020-01-13".to_string()), 3.8101f64); - exchange_rates.insert(Exchange::EUR("2025-05-15".to_string()), 4.2378f64); - exchange_rates.insert(Exchange::EUR("2024-04-11".to_string()), 4.2649f64); - exchange_rates.insert(Exchange::USD("2015-04-21".to_string()), 3.7275f64); - exchange_rates.insert(Exchange::USD("2023-05-09".to_string()), 4.1609f64); - exchange_rates.insert(Exchange::EUR("2023-04-19".to_string()), 4.6278f64); - exchange_rates.insert(Exchange::USD("2025-03-24".to_string()), 3.859f64); - exchange_rates.insert(Exchange::USD("2018-10-23".to_string()), 3.7485f64); - exchange_rates.insert(Exchange::USD("2015-04-08".to_string()), 3.7135f64); - exchange_rates.insert(Exchange::USD("2023-03-15".to_string()), 4.403f64); - exchange_rates.insert(Exchange::USD("2019-07-03".to_string()), 3.7596f64); - exchange_rates.insert(Exchange::USD("2014-04-29".to_string()), 3.0318f64); - exchange_rates.insert(Exchange::USD("2015-07-23".to_string()), 3.7559f64); - exchange_rates.insert(Exchange::USD("2024-06-27".to_string()), 4.0312f64); - exchange_rates.insert(Exchange::USD("2012-05-28".to_string()), 3.4535f64); - exchange_rates.insert(Exchange::EUR("2025-04-24".to_string()), 4.2789f64); - exchange_rates.insert(Exchange::USD("2019-04-15".to_string()), 3.7789f64); - exchange_rates.insert(Exchange::USD("2023-03-03".to_string()), 4.4341f64); - exchange_rates.insert(Exchange::USD("2017-02-06".to_string()), 3.9892f64); - exchange_rates.insert(Exchange::USD("2018-06-14".to_string()), 3.6155f64); - exchange_rates.insert(Exchange::USD("2013-06-26".to_string()), 3.3239f64); - exchange_rates.insert(Exchange::EUR("2023-01-10".to_string()), 4.6981f64); - exchange_rates.insert(Exchange::USD("2024-08-13".to_string()), 3.9314f64); - exchange_rates.insert(Exchange::USD("2017-12-15".to_string()), 3.5786f64); - exchange_rates.insert(Exchange::USD("2014-05-23".to_string()), 3.049f64); - exchange_rates.insert(Exchange::USD("2023-10-09".to_string()), 4.3439f64); - exchange_rates.insert(Exchange::USD("2020-06-26".to_string()), 3.9697f64); - exchange_rates.insert(Exchange::USD("2019-07-29".to_string()), 3.8453f64); - exchange_rates.insert(Exchange::USD("2022-05-24".to_string()), 4.3071f64); - exchange_rates.insert(Exchange::EUR("2024-09-02".to_string()), 4.2812f64); - exchange_rates.insert(Exchange::EUR("2025-07-03".to_string()), 4.2634f64); - exchange_rates.insert(Exchange::USD("2020-12-08".to_string()), 3.6914f64); - exchange_rates.insert(Exchange::USD("2018-02-08".to_string()), 3.4119f64); - exchange_rates.insert(Exchange::USD("2014-08-13".to_string()), 3.1442f64); - exchange_rates.insert(Exchange::EUR("2025-06-09".to_string()), 4.2772f64); - exchange_rates.insert(Exchange::USD("2025-09-24".to_string()), 3.6254f64); - exchange_rates.insert(Exchange::USD("2014-04-16".to_string()), 3.0272f64); - exchange_rates.insert(Exchange::USD("2012-10-29".to_string()), 3.2145f64); - exchange_rates.insert(Exchange::EUR("2023-09-28".to_string()), 4.634f64); - exchange_rates.insert(Exchange::USD("2022-10-31".to_string()), 4.734f64); - exchange_rates.insert(Exchange::USD("2012-01-31".to_string()), 3.2032f64); - exchange_rates.insert(Exchange::USD("2015-08-21".to_string()), 3.7308f64); - exchange_rates.insert(Exchange::USD("2018-07-02".to_string()), 3.7703f64); - exchange_rates.insert(Exchange::USD("2015-11-10".to_string()), 3.957f64); - exchange_rates.insert(Exchange::USD("2019-05-14".to_string()), 3.8323f64); - exchange_rates.insert(Exchange::USD("2014-11-06".to_string()), 3.3769f64); - exchange_rates.insert(Exchange::EUR("2024-12-06".to_string()), 4.2669f64); - exchange_rates.insert(Exchange::USD("2016-10-12".to_string()), 3.8851f64); - exchange_rates.insert(Exchange::USD("2013-12-30".to_string()), 3.018f64); - exchange_rates.insert(Exchange::USD("2022-02-04".to_string()), 3.9657f64); - exchange_rates.insert(Exchange::USD("2025-10-01".to_string()), 3.6245f64); - exchange_rates.insert(Exchange::EUR("2024-01-17".to_string()), 4.3978f64); - exchange_rates.insert(Exchange::USD("2021-01-15".to_string()), 3.7466f64); - exchange_rates.insert(Exchange::USD("2014-02-27".to_string()), 3.0655f64); - exchange_rates.insert(Exchange::USD("2019-03-04".to_string()), 3.7893f64); - exchange_rates.insert(Exchange::USD("2020-05-18".to_string()), 4.2224f64); - exchange_rates.insert(Exchange::USD("2015-03-06".to_string()), 3.7649f64); - exchange_rates.insert(Exchange::USD("2023-12-28".to_string()), 3.899f64); - exchange_rates.insert(Exchange::USD("2023-05-26".to_string()), 4.2156f64); - exchange_rates.insert(Exchange::USD("2012-05-22".to_string()), 3.3811f64); - exchange_rates.insert(Exchange::EUR("2023-03-27".to_string()), 4.6856f64); - exchange_rates.insert(Exchange::EUR("2025-10-10".to_string()), 4.2583f64); - exchange_rates.insert(Exchange::EUR("2024-05-17".to_string()), 4.2685f64); - exchange_rates.insert(Exchange::EUR("2023-11-15".to_string()), 4.39f64); - exchange_rates.insert(Exchange::USD("2025-11-21".to_string()), 3.6868f64); - exchange_rates.insert(Exchange::USD("2017-08-24".to_string()), 3.6329f64); - exchange_rates.insert(Exchange::USD("2025-12-12".to_string()), 3.6027f64); - exchange_rates.insert(Exchange::USD("2013-03-19".to_string()), 3.2055f64); - exchange_rates.insert(Exchange::EUR("2025-06-06".to_string()), 4.2881f64); - exchange_rates.insert(Exchange::USD("2024-02-08".to_string()), 4.0292f64); - exchange_rates.insert(Exchange::USD("2024-09-17".to_string()), 3.8354f64); - exchange_rates.insert(Exchange::EUR("2025-11-18".to_string()), 4.2331f64); - exchange_rates.insert(Exchange::EUR("2024-05-20".to_string()), 4.2575f64); - exchange_rates.insert(Exchange::EUR("2024-09-12".to_string()), 4.2986f64); - exchange_rates.insert(Exchange::USD("2018-06-15".to_string()), 3.6922f64); - exchange_rates.insert(Exchange::USD("2013-11-26".to_string()), 3.0945f64); - exchange_rates.insert(Exchange::EUR("2025-07-16".to_string()), 4.2585f64); - exchange_rates.insert(Exchange::USD("2018-07-18".to_string()), 3.7031f64); - exchange_rates.insert(Exchange::USD("2014-02-10".to_string()), 3.0683f64); - exchange_rates.insert(Exchange::EUR("2024-01-26".to_string()), 4.3802f64); - exchange_rates.insert(Exchange::USD("2022-06-27".to_string()), 4.4369f64); - exchange_rates.insert(Exchange::USD("2024-02-27".to_string()), 3.9682f64); - exchange_rates.insert(Exchange::USD("2023-08-11".to_string()), 4.0501f64); - exchange_rates.insert(Exchange::USD("2016-10-19".to_string()), 3.9285f64); - exchange_rates.insert(Exchange::USD("2018-01-08".to_string()), 3.4735f64); - exchange_rates.insert(Exchange::EUR("2024-06-03".to_string()), 4.2817f64); - exchange_rates.insert(Exchange::USD("2022-09-26".to_string()), 4.9113f64); - exchange_rates.insert(Exchange::USD("2020-06-17".to_string()), 3.9532f64); - exchange_rates.insert(Exchange::USD("2014-07-11".to_string()), 3.0426f64); - exchange_rates.insert(Exchange::USD("2012-03-19".to_string()), 3.1361f64); - exchange_rates.insert(Exchange::USD("2019-06-11".to_string()), 3.7722f64); - exchange_rates.insert(Exchange::USD("2024-03-26".to_string()), 3.9704f64); - exchange_rates.insert(Exchange::USD("2024-01-09".to_string()), 3.9612f64); - exchange_rates.insert(Exchange::USD("2015-04-15".to_string()), 3.7875f64); - exchange_rates.insert(Exchange::USD("2013-02-04".to_string()), 3.0563f64); - exchange_rates.insert(Exchange::USD("2023-04-14".to_string()), 4.2042f64); - exchange_rates.insert(Exchange::USD("2015-08-13".to_string()), 3.7625f64); - exchange_rates.insert(Exchange::EUR("2023-05-25".to_string()), 4.503f64); - exchange_rates.insert(Exchange::USD("2023-02-07".to_string()), 4.4325f64); - exchange_rates.insert(Exchange::USD("2013-12-16".to_string()), 3.035f64); - exchange_rates.insert(Exchange::USD("2022-09-23".to_string()), 4.8796f64); - exchange_rates.insert(Exchange::EUR("2023-07-19".to_string()), 4.4492f64); - exchange_rates.insert(Exchange::USD("2017-07-26".to_string()), 3.6661f64); - exchange_rates.insert(Exchange::USD("2015-12-18".to_string()), 3.9558f64); - exchange_rates.insert(Exchange::EUR("2023-08-08".to_string()), 4.4375f64); - exchange_rates.insert(Exchange::USD("2025-02-13".to_string()), 3.996f64); - exchange_rates.insert(Exchange::USD("2021-06-28".to_string()), 3.7762f64); - exchange_rates.insert(Exchange::EUR("2024-01-18".to_string()), 4.4016f64); - exchange_rates.insert(Exchange::USD("2015-10-06".to_string()), 3.789f64); - exchange_rates.insert(Exchange::USD("2013-01-15".to_string()), 3.075f64); - exchange_rates.insert(Exchange::USD("2020-08-14".to_string()), 3.7227f64); - exchange_rates.insert(Exchange::USD("2021-02-09".to_string()), 3.6972f64); - exchange_rates.insert(Exchange::USD("2019-07-26".to_string()), 3.8296f64); - exchange_rates.insert(Exchange::USD("2020-11-23".to_string()), 3.7616f64); - exchange_rates.insert(Exchange::USD("2015-03-26".to_string()), 3.705f64); - exchange_rates.insert(Exchange::USD("2012-11-05".to_string()), 3.2211f64); - exchange_rates.insert(Exchange::EUR("2025-10-06".to_string()), 4.2521f64); - exchange_rates.insert(Exchange::USD("2021-06-14".to_string()), 3.7185f64); - exchange_rates.insert(Exchange::USD("2017-10-23".to_string()), 3.6061f64); - exchange_rates.insert(Exchange::USD("2017-10-27".to_string()), 3.6568f64); - exchange_rates.insert(Exchange::EUR("2024-03-15".to_string()), 4.2929f64); - exchange_rates.insert(Exchange::USD("2015-06-29".to_string()), 3.7671f64); - exchange_rates.insert(Exchange::EUR("2025-10-30".to_string()), 4.2425f64); - exchange_rates.insert(Exchange::USD("2018-09-13".to_string()), 3.713f64); - exchange_rates.insert(Exchange::EUR("2025-09-25".to_string()), 4.2619f64); - exchange_rates.insert(Exchange::EUR("2024-07-12".to_string()), 4.2567f64); - exchange_rates.insert(Exchange::USD("2018-08-30".to_string()), 3.6724f64); - exchange_rates.insert(Exchange::USD("2018-03-27".to_string()), 3.3921f64); - exchange_rates.insert(Exchange::USD("2021-04-21".to_string()), 3.795f64); - exchange_rates.insert(Exchange::USD("2016-04-26".to_string()), 3.8935f64); - exchange_rates.insert(Exchange::USD("2024-10-21".to_string()), 3.9775f64); - exchange_rates.insert(Exchange::USD("2014-06-24".to_string()), 3.0526f64); - exchange_rates.insert(Exchange::USD("2013-08-30".to_string()), 3.2209f64); - exchange_rates.insert(Exchange::EUR("2024-08-13".to_string()), 4.2945f64); - exchange_rates.insert(Exchange::EUR("2023-02-01".to_string()), 4.708f64); - exchange_rates.insert(Exchange::EUR("2024-01-29".to_string()), 4.3653f64); - exchange_rates.insert(Exchange::EUR("2023-09-27".to_string()), 4.6065f64); - exchange_rates.insert(Exchange::USD("2022-10-13".to_string()), 4.9905f64); - exchange_rates.insert(Exchange::EUR("2025-01-29".to_string()), 4.2077f64); - exchange_rates.insert(Exchange::EUR("2023-07-21".to_string()), 4.4501f64); - exchange_rates.insert(Exchange::EUR("2025-09-26".to_string()), 4.2668f64); - exchange_rates.insert(Exchange::USD("2018-04-16".to_string()), 3.3666f64); - exchange_rates.insert(Exchange::USD("2014-12-04".to_string()), 3.3728f64); - exchange_rates.insert(Exchange::USD("2025-01-23".to_string()), 4.0515f64); - exchange_rates.insert(Exchange::USD("2024-08-12".to_string()), 3.9488f64); - exchange_rates.insert(Exchange::USD("2023-01-31".to_string()), 4.348f64); - exchange_rates.insert(Exchange::USD("2019-04-25".to_string()), 3.8537f64); - exchange_rates.insert(Exchange::USD("2014-07-25".to_string()), 3.0831f64); - exchange_rates.insert(Exchange::USD("2014-08-20".to_string()), 3.147f64); - exchange_rates.insert(Exchange::USD("2025-06-27".to_string()), 3.6177f64); - exchange_rates.insert(Exchange::USD("2012-10-23".to_string()), 3.1662f64); - exchange_rates.insert(Exchange::EUR("2023-07-11".to_string()), 4.4426f64); - exchange_rates.insert(Exchange::USD("2014-07-29".to_string()), 3.09f64); - exchange_rates.insert(Exchange::USD("2015-01-15".to_string()), 3.6588f64); - exchange_rates.insert(Exchange::USD("2019-05-16".to_string()), 3.8259f64); - exchange_rates.insert(Exchange::USD("2021-03-05".to_string()), 3.8393f64); - exchange_rates.insert(Exchange::USD("2013-12-04".to_string()), 3.0916f64); - exchange_rates.insert(Exchange::USD("2021-02-11".to_string()), 3.7117f64); - exchange_rates.insert(Exchange::USD("2025-10-24".to_string()), 3.6481f64); - exchange_rates.insert(Exchange::USD("2020-10-20".to_string()), 3.8926f64); - exchange_rates.insert(Exchange::USD("2013-08-28".to_string()), 3.184f64); - exchange_rates.insert(Exchange::USD("2021-11-22".to_string()), 4.1855f64); - exchange_rates.insert(Exchange::USD("2012-06-13".to_string()), 3.4591f64); - exchange_rates.insert(Exchange::USD("2025-01-07".to_string()), 4.077f64); - exchange_rates.insert(Exchange::USD("2014-01-13".to_string()), 3.045f64); - exchange_rates.insert(Exchange::USD("2025-12-23".to_string()), 3.5848f64); - exchange_rates.insert(Exchange::USD("2014-07-18".to_string()), 3.0652f64); - exchange_rates.insert(Exchange::EUR("2024-02-27".to_string()), 4.3067f64); - exchange_rates.insert(Exchange::USD("2019-11-15".to_string()), 3.8848f64); - exchange_rates.insert(Exchange::USD("2019-03-29".to_string()), 3.8365f64); - exchange_rates.insert(Exchange::USD("2021-09-01".to_string()), 3.8238f64); - exchange_rates.insert(Exchange::USD("2014-05-27".to_string()), 3.0532f64); - exchange_rates.insert(Exchange::USD("2014-06-02".to_string()), 3.0413f64); - exchange_rates.insert(Exchange::USD("2012-07-26".to_string()), 3.4523f64); - exchange_rates.insert(Exchange::USD("2016-09-20".to_string()), 3.8438f64); - exchange_rates.insert(Exchange::EUR("2023-11-21".to_string()), 4.3647f64); - exchange_rates.insert(Exchange::USD("2017-03-29".to_string()), 3.9265f64); - exchange_rates.insert(Exchange::EUR("2025-06-24".to_string()), 4.2604f64); - exchange_rates.insert(Exchange::USD("2020-02-17".to_string()), 3.9189f64); - exchange_rates.insert(Exchange::USD("2023-07-06".to_string()), 4.1191f64); - exchange_rates.insert(Exchange::USD("2016-09-14".to_string()), 3.8716f64); - exchange_rates.insert(Exchange::USD("2023-02-20".to_string()), 4.4515f64); - exchange_rates.insert(Exchange::USD("2017-03-30".to_string()), 3.9402f64); - exchange_rates.insert(Exchange::USD("2020-09-18".to_string()), 3.7585f64); - exchange_rates.insert(Exchange::USD("2024-05-23".to_string()), 3.9394f64); - exchange_rates.insert(Exchange::USD("2021-08-04".to_string()), 3.8366f64); - exchange_rates.insert(Exchange::EUR("2023-08-01".to_string()), 4.419f64); - exchange_rates.insert(Exchange::EUR("2023-07-18".to_string()), 4.4331f64); - exchange_rates.insert(Exchange::USD("2016-11-03".to_string()), 3.8965f64); - exchange_rates.insert(Exchange::USD("2015-04-27".to_string()), 3.7115f64); - exchange_rates.insert(Exchange::USD("2012-04-23".to_string()), 3.1972f64); - exchange_rates.insert(Exchange::USD("2022-12-06".to_string()), 4.4787f64); - exchange_rates.insert(Exchange::USD("2012-06-06".to_string()), 3.4703f64); - exchange_rates.insert(Exchange::USD("2015-09-09".to_string()), 3.7634f64); - exchange_rates.insert(Exchange::USD("2013-04-29".to_string()), 3.1712f64); - exchange_rates.insert(Exchange::USD("2021-06-21".to_string()), 3.8214f64); - exchange_rates.insert(Exchange::USD("2012-03-16".to_string()), 3.1688f64); - exchange_rates.insert(Exchange::USD("2023-06-05".to_string()), 4.1933f64); - exchange_rates.insert(Exchange::EUR("2025-11-03".to_string()), 4.2527f64); - exchange_rates.insert(Exchange::USD("2021-08-20".to_string()), 3.9301f64); - exchange_rates.insert(Exchange::EUR("2025-11-21".to_string()), 4.2489f64); - exchange_rates.insert(Exchange::USD("2016-10-03".to_string()), 3.8252f64); - exchange_rates.insert(Exchange::USD("2022-07-05".to_string()), 4.5947f64); - exchange_rates.insert(Exchange::USD("2013-04-08".to_string()), 3.1893f64); - exchange_rates.insert(Exchange::USD("2022-05-10".to_string()), 4.4223f64); - exchange_rates.insert(Exchange::USD("2016-12-12".to_string()), 4.209f64); - exchange_rates.insert(Exchange::USD("2014-03-11".to_string()), 3.0449f64); - exchange_rates.insert(Exchange::USD("2019-10-23".to_string()), 3.8473f64); - exchange_rates.insert(Exchange::USD("2025-09-03".to_string()), 3.6538f64); - exchange_rates.insert(Exchange::USD("2021-12-02".to_string()), 4.0625f64); - exchange_rates.insert(Exchange::USD("2019-05-10".to_string()), 3.8242f64); - exchange_rates.insert(Exchange::USD("2023-06-20".to_string()), 4.058f64); - exchange_rates.insert(Exchange::USD("2021-06-16".to_string()), 3.7336f64); - exchange_rates.insert(Exchange::USD("2018-02-07".to_string()), 3.3677f64); - exchange_rates.insert(Exchange::EUR("2025-10-13".to_string()), 4.2592f64); - exchange_rates.insert(Exchange::USD("2014-10-10".to_string()), 3.2985f64); - exchange_rates.insert(Exchange::USD("2024-02-15".to_string()), 4.0495f64); - exchange_rates.insert(Exchange::EUR("2023-09-13".to_string()), 4.6402f64); - exchange_rates.insert(Exchange::USD("2022-03-22".to_string()), 4.272f64); - exchange_rates.insert(Exchange::EUR("2025-10-15".to_string()), 4.2556f64); - exchange_rates.insert(Exchange::EUR("2025-11-13".to_string()), 4.2304f64); - exchange_rates.insert(Exchange::USD("2019-08-09".to_string()), 3.8613f64); - exchange_rates.insert(Exchange::USD("2014-02-25".to_string()), 3.0264f64); - exchange_rates.insert(Exchange::USD("2022-05-18".to_string()), 4.4279f64); - exchange_rates.insert(Exchange::USD("2022-06-24".to_string()), 4.4656f64); - exchange_rates.insert(Exchange::EUR("2024-02-20".to_string()), 4.3186f64); - exchange_rates.insert(Exchange::EUR("2025-01-15".to_string()), 4.2611f64); - exchange_rates.insert(Exchange::USD("2021-09-06".to_string()), 3.8041f64); - exchange_rates.insert(Exchange::USD("2022-12-29".to_string()), 4.4078f64); - exchange_rates.insert(Exchange::USD("2017-09-20".to_string()), 3.5619f64); - exchange_rates.insert(Exchange::USD("2014-01-08".to_string()), 3.0717f64); - exchange_rates.insert(Exchange::USD("2024-09-16".to_string()), 3.8438f64); - exchange_rates.insert(Exchange::USD("2012-02-21".to_string()), 3.1488f64); - exchange_rates.insert(Exchange::USD("2016-07-20".to_string()), 3.979f64); - exchange_rates.insert(Exchange::USD("2016-08-30".to_string()), 3.8858f64); - exchange_rates.insert(Exchange::USD("2012-07-27".to_string()), 3.3843f64); - exchange_rates.insert(Exchange::USD("2017-10-05".to_string()), 3.6502f64); - exchange_rates.insert(Exchange::EUR("2025-08-05".to_string()), 4.2763f64); - exchange_rates.insert(Exchange::USD("2024-12-10".to_string()), 4.0518f64); - exchange_rates.insert(Exchange::EUR("2024-01-23".to_string()), 4.3697f64); - exchange_rates.insert(Exchange::USD("2017-08-10".to_string()), 3.6432f64); - exchange_rates.insert(Exchange::USD("2023-10-20".to_string()), 4.2194f64); - exchange_rates.insert(Exchange::USD("2012-07-09".to_string()), 3.4538f64); - exchange_rates.insert(Exchange::EUR("2023-04-04".to_string()), 4.6785f64); - exchange_rates.insert(Exchange::USD("2021-07-30".to_string()), 3.841f64); - exchange_rates.insert(Exchange::USD("2018-02-05".to_string()), 3.3375f64); - exchange_rates.insert(Exchange::USD("2016-12-28".to_string()), 4.226f64); - exchange_rates.insert(Exchange::USD("2014-06-20".to_string()), 3.0495f64); - exchange_rates.insert(Exchange::USD("2020-09-24".to_string()), 3.8833f64); - exchange_rates.insert(Exchange::USD("2022-05-26".to_string()), 4.3189f64); - exchange_rates.insert(Exchange::EUR("2023-07-12".to_string()), 4.4471f64); - exchange_rates.insert(Exchange::USD("2019-10-24".to_string()), 3.8448f64); - exchange_rates.insert(Exchange::USD("2015-09-29".to_string()), 3.7799f64); - exchange_rates.insert(Exchange::USD("2022-08-24".to_string()), 4.8029f64); - exchange_rates.insert(Exchange::USD("2012-10-31".to_string()), 3.1806f64); - exchange_rates.insert(Exchange::USD("2013-08-13".to_string()), 3.1489f64); - exchange_rates.insert(Exchange::USD("2021-02-08".to_string()), 3.7301f64); - exchange_rates.insert(Exchange::USD("2022-07-13".to_string()), 4.8221f64); - exchange_rates.insert(Exchange::USD("2023-03-20".to_string()), 4.413f64); - exchange_rates.insert(Exchange::USD("2013-08-21".to_string()), 3.1698f64); - exchange_rates.insert(Exchange::USD("2024-08-09".to_string()), 3.9604f64); - exchange_rates.insert(Exchange::USD("2012-05-15".to_string()), 3.3579f64); - exchange_rates.insert(Exchange::USD("2019-12-18".to_string()), 3.8302f64); - exchange_rates.insert(Exchange::USD("2025-09-02".to_string()), 3.6626f64); - exchange_rates.insert(Exchange::USD("2021-06-10".to_string()), 3.6821f64); - exchange_rates.insert(Exchange::USD("2021-11-29".to_string()), 4.1627f64); - exchange_rates.insert(Exchange::USD("2024-09-09".to_string()), 3.8758f64); - exchange_rates.insert(Exchange::EUR("2023-06-19".to_string()), 4.4457f64); - exchange_rates.insert(Exchange::USD("2020-11-30".to_string()), 3.7364f64); - exchange_rates.insert(Exchange::USD("2021-01-08".to_string()), 3.6919f64); - exchange_rates.insert(Exchange::USD("2013-03-04".to_string()), 3.1837f64); - exchange_rates.insert(Exchange::USD("2012-12-07".to_string()), 3.193f64); - exchange_rates.insert(Exchange::USD("2023-06-02".to_string()), 4.1903f64); - exchange_rates.insert(Exchange::USD("2022-04-25".to_string()), 4.3188f64); - exchange_rates.insert(Exchange::USD("2013-10-17".to_string()), 3.0625f64); - exchange_rates.insert(Exchange::EUR("2024-01-30".to_string()), 4.3634f64); - exchange_rates.insert(Exchange::USD("2025-04-11".to_string()), 3.7606f64); - exchange_rates.insert(Exchange::USD("2024-06-24".to_string()), 4.0319f64); - exchange_rates.insert(Exchange::USD("2017-03-15".to_string()), 4.0646f64); - exchange_rates.insert(Exchange::USD("2014-07-28".to_string()), 3.086f64); - exchange_rates.insert(Exchange::USD("2013-07-19".to_string()), 3.2348f64); - exchange_rates.insert(Exchange::USD("2020-02-24".to_string()), 3.9772f64); - exchange_rates.insert(Exchange::USD("2016-05-31".to_string()), 3.9369f64); - exchange_rates.insert(Exchange::EUR("2024-12-10".to_string()), 4.2672f64); - exchange_rates.insert(Exchange::USD("2016-09-23".to_string()), 3.8328f64); - exchange_rates.insert(Exchange::USD("2021-08-02".to_string()), 3.8377f64); - exchange_rates.insert(Exchange::EUR("2025-04-09".to_string()), 4.2818f64); - exchange_rates.insert(Exchange::USD("2022-04-11".to_string()), 4.2586f64); - exchange_rates.insert(Exchange::USD("2021-12-16".to_string()), 4.0938f64); - exchange_rates.insert(Exchange::USD("2022-04-06".to_string()), 4.2606f64); - exchange_rates.insert(Exchange::USD("2013-08-05".to_string()), 3.1771f64); - exchange_rates.insert(Exchange::USD("2015-05-25".to_string()), 3.75f64); - exchange_rates.insert(Exchange::USD("2015-04-24".to_string()), 3.6895f64); - exchange_rates.insert(Exchange::EUR("2024-11-21".to_string()), 4.3469f64); - exchange_rates.insert(Exchange::USD("2023-04-18".to_string()), 4.2151f64); - exchange_rates.insert(Exchange::EUR("2024-08-06".to_string()), 4.313f64); - exchange_rates.insert(Exchange::USD("2022-01-20".to_string()), 3.9833f64); - exchange_rates.insert(Exchange::USD("2022-04-15".to_string()), 4.2865f64); - exchange_rates.insert(Exchange::USD("2018-06-05".to_string()), 3.6569f64); - exchange_rates.insert(Exchange::USD("2015-05-13".to_string()), 3.63f64); - exchange_rates.insert(Exchange::USD("2017-03-01".to_string()), 4.0756f64); - exchange_rates.insert(Exchange::USD("2016-02-03".to_string()), 4.0325f64); - exchange_rates.insert(Exchange::EUR("2023-02-09".to_string()), 4.7363f64); - exchange_rates.insert(Exchange::USD("2019-01-21".to_string()), 3.7751f64); - exchange_rates.insert(Exchange::USD("2012-05-04".to_string()), 3.1891f64); - exchange_rates.insert(Exchange::EUR("2025-12-02".to_string()), 4.239f64); - exchange_rates.insert(Exchange::USD("2021-07-08".to_string()), 3.8408f64); - exchange_rates.insert(Exchange::USD("2013-08-08".to_string()), 3.1503f64); - exchange_rates.insert(Exchange::USD("2019-01-24".to_string()), 3.7844f64); - exchange_rates.insert(Exchange::USD("2013-04-24".to_string()), 3.1823f64); - exchange_rates.insert(Exchange::USD("2018-12-21".to_string()), 3.7528f64); - exchange_rates.insert(Exchange::EUR("2023-02-22".to_string()), 4.7538f64); - exchange_rates.insert(Exchange::USD("2012-09-20".to_string()), 3.2092f64); - exchange_rates.insert(Exchange::USD("2013-02-21".to_string()), 3.1633f64); - exchange_rates.insert(Exchange::USD("2014-04-10".to_string()), 3.0092f64); - exchange_rates.insert(Exchange::USD("2012-05-07".to_string()), 3.2279f64); - exchange_rates.insert(Exchange::USD("2012-09-11".to_string()), 3.2098f64); - exchange_rates.insert(Exchange::USD("2018-10-01".to_string()), 3.6867f64); - exchange_rates.insert(Exchange::USD("2017-12-06".to_string()), 3.5653f64); - exchange_rates.insert(Exchange::USD("2023-11-13".to_string()), 4.1474f64); - exchange_rates.insert(Exchange::USD("2024-01-16".to_string()), 4.0358f64); - exchange_rates.insert(Exchange::USD("2013-01-31".to_string()), 3.0874f64); - exchange_rates.insert(Exchange::USD("2015-12-07".to_string()), 3.9853f64); - exchange_rates.insert(Exchange::USD("2020-11-09".to_string()), 3.7787f64); - exchange_rates.insert(Exchange::USD("2017-11-13".to_string()), 3.6382f64); - exchange_rates.insert(Exchange::USD("2013-04-09".to_string()), 3.1696f64); - exchange_rates.insert(Exchange::USD("2016-02-25".to_string()), 3.9705f64); - exchange_rates.insert(Exchange::USD("2018-09-14".to_string()), 3.6817f64); - exchange_rates.insert(Exchange::USD("2013-12-19".to_string()), 3.049f64); - exchange_rates.insert(Exchange::USD("2018-01-03".to_string()), 3.4616f64); - exchange_rates.insert(Exchange::USD("2023-01-25".to_string()), 4.3265f64); - exchange_rates.insert(Exchange::USD("2021-09-14".to_string()), 3.8542f64); - exchange_rates.insert(Exchange::USD("2024-09-06".to_string()), 3.8489f64); - exchange_rates.insert(Exchange::USD("2014-03-20".to_string()), 3.05f64); - exchange_rates.insert(Exchange::USD("2022-01-24".to_string()), 4.0049f64); - exchange_rates.insert(Exchange::USD("2017-10-20".to_string()), 3.5966f64); - exchange_rates.insert(Exchange::USD("2013-03-26".to_string()), 3.2427f64); - exchange_rates.insert(Exchange::USD("2025-02-05".to_string()), 4.0426f64); - exchange_rates.insert(Exchange::USD("2018-11-30".to_string()), 3.7731f64); - exchange_rates.insert(Exchange::USD("2025-04-23".to_string()), 3.7583f64); - exchange_rates.insert(Exchange::USD("2024-05-10".to_string()), 3.9866f64); - exchange_rates.insert(Exchange::USD("2016-05-05".to_string()), 3.8475f64); - exchange_rates.insert(Exchange::USD("2024-05-06".to_string()), 4.0202f64); - exchange_rates.insert(Exchange::EUR("2025-11-07".to_string()), 4.2483f64); - exchange_rates.insert(Exchange::USD("2013-04-23".to_string()), 3.1811f64); - exchange_rates.insert(Exchange::USD("2018-02-23".to_string()), 3.3911f64); - exchange_rates.insert(Exchange::USD("2024-06-18".to_string()), 4.0549f64); - exchange_rates.insert(Exchange::USD("2015-12-21".to_string()), 3.92f64); - exchange_rates.insert(Exchange::EUR("2024-04-19".to_string()), 4.3316f64); - exchange_rates.insert(Exchange::USD("2023-05-05".to_string()), 4.1612f64); - exchange_rates.insert(Exchange::USD("2016-03-22".to_string()), 3.8005f64); - exchange_rates.insert(Exchange::USD("2013-04-25".to_string()), 3.1792f64); - exchange_rates.insert(Exchange::USD("2019-09-10".to_string()), 3.9273f64); - exchange_rates.insert(Exchange::USD("2022-01-26".to_string()), 4.0684f64); - exchange_rates.insert(Exchange::USD("2021-09-09".to_string()), 3.8292f64); - exchange_rates.insert(Exchange::USD("2021-11-05".to_string()), 3.9911f64); - exchange_rates.insert(Exchange::USD("2018-01-29".to_string()), 3.3375f64); - exchange_rates.insert(Exchange::USD("2017-07-18".to_string()), 3.6469f64); - exchange_rates.insert(Exchange::USD("2016-02-16".to_string()), 3.9404f64); - exchange_rates.insert(Exchange::USD("2024-07-11".to_string()), 3.9257f64); - exchange_rates.insert(Exchange::USD("2018-12-19".to_string()), 3.7619f64); - exchange_rates.insert(Exchange::USD("2014-04-18".to_string()), 3.0265f64); - exchange_rates.insert(Exchange::USD("2012-08-29".to_string()), 3.3081f64); - exchange_rates.insert(Exchange::USD("2024-05-08".to_string()), 4.0202f64); - exchange_rates.insert(Exchange::USD("2017-02-14".to_string()), 4.0525f64); - exchange_rates.insert(Exchange::USD("2019-06-13".to_string()), 3.7736f64); - exchange_rates.insert(Exchange::EUR("2024-08-08".to_string()), 4.3225f64); - exchange_rates.insert(Exchange::USD("2013-06-18".to_string()), 3.1682f64); - exchange_rates.insert(Exchange::USD("2013-05-21".to_string()), 3.249f64); - exchange_rates.insert(Exchange::USD("2022-02-09".to_string()), 3.953f64); - exchange_rates.insert(Exchange::USD("2015-03-18".to_string()), 3.9073f64); - exchange_rates.insert(Exchange::USD("2016-03-02".to_string()), 3.9861f64); - exchange_rates.insert(Exchange::USD("2016-01-18".to_string()), 4.1133f64); - exchange_rates.insert(Exchange::USD("2019-06-10".to_string()), 3.7745f64); - exchange_rates.insert(Exchange::USD("2015-04-10".to_string()), 3.7894f64); - exchange_rates.insert(Exchange::USD("2015-07-20".to_string()), 3.7868f64); - exchange_rates.insert(Exchange::USD("2019-05-31".to_string()), 3.8498f64); - exchange_rates.insert(Exchange::USD("2014-08-06".to_string()), 3.1377f64); - exchange_rates.insert(Exchange::EUR("2025-06-11".to_string()), 4.2643f64); - exchange_rates.insert(Exchange::USD("2024-09-11".to_string()), 3.8816f64); - exchange_rates.insert(Exchange::EUR("2024-11-22".to_string()), 4.343f64); - exchange_rates.insert(Exchange::EUR("2025-09-01".to_string()), 4.2574f64); - exchange_rates.insert(Exchange::USD("2020-10-16".to_string()), 3.8976f64); - exchange_rates.insert(Exchange::USD("2024-02-12".to_string()), 4.0189f64); - exchange_rates.insert(Exchange::USD("2024-01-22".to_string()), 3.9972f64); - exchange_rates.insert(Exchange::USD("2025-02-03".to_string()), 4.1352f64); - exchange_rates.insert(Exchange::USD("2015-08-18".to_string()), 3.7578f64); - exchange_rates.insert(Exchange::USD("2023-01-19".to_string()), 4.3469f64); - exchange_rates.insert(Exchange::USD("2023-10-06".to_string()), 4.3608f64); - exchange_rates.insert(Exchange::USD("2018-08-09".to_string()), 3.6846f64); - exchange_rates.insert(Exchange::USD("2016-09-05".to_string()), 3.8937f64); - exchange_rates.insert(Exchange::USD("2017-06-16".to_string()), 3.7749f64); - exchange_rates.insert(Exchange::EUR("2023-12-27".to_string()), 4.3311f64); - exchange_rates.insert(Exchange::USD("2022-07-04".to_string()), 4.5032f64); - exchange_rates.insert(Exchange::USD("2024-07-29".to_string()), 3.9556f64); - exchange_rates.insert(Exchange::EUR("2024-03-21".to_string()), 4.3031f64); - exchange_rates.insert(Exchange::USD("2024-07-25".to_string()), 3.9619f64); - exchange_rates.insert(Exchange::USD("2014-07-31".to_string()), 3.1094f64); - exchange_rates.insert(Exchange::USD("2012-07-23".to_string()), 3.4529f64); - exchange_rates.insert(Exchange::USD("2017-08-11".to_string()), 3.6449f64); - exchange_rates.insert(Exchange::USD("2017-10-30".to_string()), 3.643f64); - exchange_rates.insert(Exchange::USD("2025-01-22".to_string()), 4.0646f64); - exchange_rates.insert(Exchange::USD("2019-09-17".to_string()), 3.9412f64); - exchange_rates.insert(Exchange::USD("2012-07-03".to_string()), 3.3427f64); - exchange_rates.insert(Exchange::USD("2015-02-18".to_string()), 3.6784f64); - exchange_rates.insert(Exchange::USD("2013-12-09".to_string()), 3.0534f64); - exchange_rates.insert(Exchange::EUR("2024-01-16".to_string()), 4.3934f64); - exchange_rates.insert(Exchange::USD("2013-08-07".to_string()), 3.1725f64); - exchange_rates.insert(Exchange::USD("2014-03-12".to_string()), 3.0508f64); - exchange_rates.insert(Exchange::EUR("2024-07-22".to_string()), 4.2797f64); - exchange_rates.insert(Exchange::EUR("2025-01-23".to_string()), 4.2182f64); - exchange_rates.insert(Exchange::USD("2019-02-15".to_string()), 3.8326f64); - exchange_rates.insert(Exchange::USD("2018-09-17".to_string()), 3.6876f64); - exchange_rates.insert(Exchange::USD("2021-11-12".to_string()), 4.0559f64); - exchange_rates.insert(Exchange::USD("2018-10-04".to_string()), 3.7512f64); - exchange_rates.insert(Exchange::EUR("2023-07-25".to_string()), 4.4348f64); - exchange_rates.insert(Exchange::USD("2022-03-25".to_string()), 4.3125f64); - exchange_rates.insert(Exchange::USD("2019-07-05".to_string()), 3.7689f64); - exchange_rates.insert(Exchange::USD("2016-04-11".to_string()), 3.7587f64); - exchange_rates.insert(Exchange::EUR("2025-07-07".to_string()), 4.2524f64); - exchange_rates.insert(Exchange::USD("2024-12-23".to_string()), 4.095f64); - exchange_rates.insert(Exchange::USD("2023-05-24".to_string()), 4.1573f64); - exchange_rates.insert(Exchange::EUR("2023-01-20".to_string()), 4.7137f64); - exchange_rates.insert(Exchange::USD("2018-07-11".to_string()), 3.7f64); - exchange_rates.insert(Exchange::USD("2018-08-28".to_string()), 3.6548f64); - exchange_rates.insert(Exchange::EUR("2023-01-11".to_string()), 4.6871f64); - exchange_rates.insert(Exchange::USD("2019-12-06".to_string()), 3.85f64); - exchange_rates.insert(Exchange::USD("2012-05-09".to_string()), 3.2412f64); - exchange_rates.insert(Exchange::USD("2015-02-09".to_string()), 3.6811f64); - exchange_rates.insert(Exchange::USD("2020-12-04".to_string()), 3.6765f64); - exchange_rates.insert(Exchange::EUR("2023-01-16".to_string()), 4.7004f64); - exchange_rates.insert(Exchange::USD("2021-01-20".to_string()), 3.7303f64); - exchange_rates.insert(Exchange::USD("2022-09-09".to_string()), 4.6599f64); - exchange_rates.insert(Exchange::USD("2013-01-29".to_string()), 3.1229f64); - exchange_rates.insert(Exchange::USD("2021-04-15".to_string()), 3.8014f64); - exchange_rates.insert(Exchange::USD("2013-10-10".to_string()), 3.0994f64); - exchange_rates.insert(Exchange::USD("2024-10-14".to_string()), 3.9288f64); - exchange_rates.insert(Exchange::USD("2021-05-06".to_string()), 3.8066f64); - exchange_rates.insert(Exchange::USD("2012-05-31".to_string()), 3.5372f64); - exchange_rates.insert(Exchange::USD("2022-11-18".to_string()), 4.5337f64); - exchange_rates.insert(Exchange::EUR("2023-07-31".to_string()), 4.4135f64); - exchange_rates.insert(Exchange::USD("2015-09-18".to_string()), 3.6738f64); - exchange_rates.insert(Exchange::USD("2012-05-23".to_string()), 3.446f64); - exchange_rates.insert(Exchange::USD("2020-08-21".to_string()), 3.7164f64); - exchange_rates.insert(Exchange::USD("2018-10-17".to_string()), 3.7123f64); - exchange_rates.insert(Exchange::EUR("2025-06-25".to_string()), 4.2479f64); - exchange_rates.insert(Exchange::USD("2025-12-09".to_string()), 3.6336f64); - exchange_rates.insert(Exchange::USD("2016-12-13".to_string()), 4.1905f64); - exchange_rates.insert(Exchange::USD("2017-08-01".to_string()), 3.5991f64); - exchange_rates.insert(Exchange::USD("2017-06-26".to_string()), 3.7653f64); - exchange_rates.insert(Exchange::EUR("2025-03-11".to_string()), 4.1977f64); - exchange_rates.insert(Exchange::USD("2014-05-29".to_string()), 3.0395f64); - exchange_rates.insert(Exchange::USD("2018-02-01".to_string()), 3.3346f64); - exchange_rates.insert(Exchange::USD("2012-06-05".to_string()), 3.5359f64); - exchange_rates.insert(Exchange::USD("2015-09-24".to_string()), 3.7687f64); - exchange_rates.insert(Exchange::USD("2016-01-15".to_string()), 4.0411f64); - exchange_rates.insert(Exchange::USD("2019-05-30".to_string()), 3.8548f64); - exchange_rates.insert(Exchange::USD("2021-02-03".to_string()), 3.7352f64); - exchange_rates.insert(Exchange::USD("2024-06-12".to_string()), 4.0342f64); - exchange_rates.insert(Exchange::USD("2017-07-07".to_string()), 3.7068f64); - exchange_rates.insert(Exchange::EUR("2023-03-15".to_string()), 4.7015f64); - exchange_rates.insert(Exchange::USD("2019-03-01".to_string()), 3.792f64); - exchange_rates.insert(Exchange::USD("2023-07-24".to_string()), 4.021f64); - exchange_rates.insert(Exchange::USD("2022-05-06".to_string()), 4.4502f64); - exchange_rates.insert(Exchange::USD("2014-01-29".to_string()), 3.0829f64); - exchange_rates.insert(Exchange::USD("2012-11-28".to_string()), 3.1799f64); - exchange_rates.insert(Exchange::EUR("2025-12-12".to_string()), 4.2271f64); - exchange_rates.insert(Exchange::EUR("2025-11-26".to_string()), 4.233f64); - exchange_rates.insert(Exchange::USD("2014-02-07".to_string()), 3.0857f64); - exchange_rates.insert(Exchange::EUR("2025-01-17".to_string()), 4.2691f64); - exchange_rates.insert(Exchange::EUR("2023-06-01".to_string()), 4.5312f64); - exchange_rates.insert(Exchange::USD("2019-04-24".to_string()), 3.8229f64); - exchange_rates.insert(Exchange::USD("2015-02-12".to_string()), 3.6926f64); - exchange_rates.insert(Exchange::EUR("2024-09-13".to_string()), 4.2883f64); - exchange_rates.insert(Exchange::USD("2020-05-05".to_string()), 4.1927f64); - exchange_rates.insert(Exchange::USD("2016-12-05".to_string()), 4.2213f64); - exchange_rates.insert(Exchange::USD("2019-12-11".to_string()), 3.866f64); - exchange_rates.insert(Exchange::EUR("2023-01-09".to_string()), 4.697f64); - exchange_rates.insert(Exchange::USD("2021-04-26".to_string()), 3.7657f64); - exchange_rates.insert(Exchange::USD("2025-12-30".to_string()), 3.5936f64); - exchange_rates.insert(Exchange::USD("2020-10-23".to_string()), 3.8665f64); - exchange_rates.insert(Exchange::USD("2018-09-26".to_string()), 3.643f64); - exchange_rates.insert(Exchange::EUR("2025-07-21".to_string()), 4.2445f64); - exchange_rates.insert(Exchange::USD("2022-10-17".to_string()), 4.9522f64); - exchange_rates.insert(Exchange::USD("2025-08-20".to_string()), 3.654f64); - exchange_rates.insert(Exchange::EUR("2024-06-04".to_string()), 4.2923f64); - exchange_rates.insert(Exchange::USD("2016-03-01".to_string()), 3.9924f64); - exchange_rates.insert(Exchange::USD("2023-01-02".to_string()), 4.3811f64); - exchange_rates.insert(Exchange::USD("2020-03-13".to_string()), 3.9067f64); - exchange_rates.insert(Exchange::USD("2018-05-09".to_string()), 3.609f64); - exchange_rates.insert(Exchange::USD("2015-06-01".to_string()), 3.785f64); - exchange_rates.insert(Exchange::USD("2019-08-22".to_string()), 3.9337f64); - exchange_rates.insert(Exchange::USD("2013-05-02".to_string()), 3.1492f64); - exchange_rates.insert(Exchange::USD("2024-06-14".to_string()), 4.076f64); - exchange_rates.insert(Exchange::EUR("2023-01-26".to_string()), 4.7239f64); - exchange_rates.insert(Exchange::USD("2020-12-11".to_string()), 3.663f64); - exchange_rates.insert(Exchange::USD("2019-01-02".to_string()), 3.7619f64); - exchange_rates.insert(Exchange::USD("2018-10-03".to_string()), 3.7103f64); - exchange_rates.insert(Exchange::USD("2020-05-12".to_string()), 4.2095f64); - exchange_rates.insert(Exchange::USD("2020-12-30".to_string()), 3.6901f64); - exchange_rates.insert(Exchange::USD("2025-12-19".to_string()), 3.5941f64); - exchange_rates.insert(Exchange::USD("2023-10-05".to_string()), 4.3768f64); - exchange_rates.insert(Exchange::USD("2025-10-07".to_string()), 3.6481f64); - exchange_rates.insert(Exchange::USD("2013-04-18".to_string()), 3.1529f64); - exchange_rates.insert(Exchange::USD("2012-12-24".to_string()), 3.08f64); - exchange_rates.insert(Exchange::USD("2018-05-23".to_string()), 3.6693f64); - exchange_rates.insert(Exchange::EUR("2024-10-02".to_string()), 4.2952f64); - exchange_rates.insert(Exchange::USD("2025-12-10".to_string()), 3.6329f64); - exchange_rates.insert(Exchange::EUR("2025-08-12".to_string()), 4.2626f64); - exchange_rates.insert(Exchange::USD("2013-05-31".to_string()), 3.2953f64); - exchange_rates.insert(Exchange::USD("2024-12-24".to_string()), 4.1127f64); - exchange_rates.insert(Exchange::USD("2022-08-04".to_string()), 4.634f64); - exchange_rates.insert(Exchange::USD("2019-01-22".to_string()), 3.7727f64); - exchange_rates.insert(Exchange::USD("2021-09-28".to_string()), 3.9546f64); - exchange_rates.insert(Exchange::USD("2014-09-23".to_string()), 3.243f64); - exchange_rates.insert(Exchange::USD("2016-04-19".to_string()), 3.7925f64); - exchange_rates.insert(Exchange::USD("2019-10-07".to_string()), 3.9498f64); - exchange_rates.insert(Exchange::USD("2024-07-05".to_string()), 3.9581f64); - exchange_rates.insert(Exchange::USD("2015-09-16".to_string()), 3.7315f64); - exchange_rates.insert(Exchange::USD("2025-06-05".to_string()), 3.7495f64); - exchange_rates.insert(Exchange::USD("2014-11-25".to_string()), 3.3706f64); - exchange_rates.insert(Exchange::USD("2020-11-25".to_string()), 3.7556f64); - exchange_rates.insert(Exchange::USD("2012-03-08".to_string()), 3.122f64); - exchange_rates.insert(Exchange::USD("2022-08-11".to_string()), 4.5206f64); - exchange_rates.insert(Exchange::USD("2019-04-18".to_string()), 3.8002f64); - exchange_rates.insert(Exchange::USD("2022-11-17".to_string()), 4.5387f64); - exchange_rates.insert(Exchange::EUR("2023-03-07".to_string()), 4.6871f64); - exchange_rates.insert(Exchange::USD("2012-01-16".to_string()), 3.4798f64); - exchange_rates.insert(Exchange::USD("2017-01-16".to_string()), 4.1354f64); - exchange_rates.insert(Exchange::USD("2012-09-10".to_string()), 3.2189f64); - exchange_rates.insert(Exchange::USD("2016-02-26".to_string()), 3.9545f64); - exchange_rates.insert(Exchange::USD("2016-08-23".to_string()), 3.8061f64); - exchange_rates.insert(Exchange::EUR("2025-02-24".to_string()), 4.1609f64); - exchange_rates.insert(Exchange::EUR("2023-05-23".to_string()), 4.4981f64); - exchange_rates.insert(Exchange::EUR("2024-06-07".to_string()), 4.2891f64); - exchange_rates.insert(Exchange::EUR("2025-09-22".to_string()), 4.2645f64); - exchange_rates.insert(Exchange::USD("2013-07-05".to_string()), 3.3245f64); - exchange_rates.insert(Exchange::USD("2017-06-20".to_string()), 3.7862f64); - exchange_rates.insert(Exchange::USD("2016-03-30".to_string()), 3.7495f64); - exchange_rates.insert(Exchange::USD("2012-11-29".to_string()), 3.1556f64); - exchange_rates.insert(Exchange::USD("2015-08-26".to_string()), 3.6937f64); - exchange_rates.insert(Exchange::USD("2022-10-10".to_string()), 5.0239f64); - exchange_rates.insert(Exchange::USD("2012-04-02".to_string()), 3.1017f64); - exchange_rates.insert(Exchange::EUR("2024-07-11".to_string()), 4.2586f64); - exchange_rates.insert(Exchange::USD("2020-07-23".to_string()), 3.806f64); - exchange_rates.insert(Exchange::USD("2015-07-27".to_string()), 3.7455f64); - exchange_rates.insert(Exchange::USD("2013-12-24".to_string()), 3.0346f64); - exchange_rates.insert(Exchange::USD("2020-10-13".to_string()), 3.7932f64); - exchange_rates.insert(Exchange::EUR("2025-04-11".to_string()), 4.2972f64); - exchange_rates.insert(Exchange::USD("2018-11-09".to_string()), 3.7838f64); - exchange_rates.insert(Exchange::USD("2017-12-29".to_string()), 3.4813f64); - exchange_rates.insert(Exchange::USD("2013-12-31".to_string()), 3.012f64); - exchange_rates.insert(Exchange::USD("2012-07-31".to_string()), 3.3508f64); - exchange_rates.insert(Exchange::EUR("2023-12-05".to_string()), 4.3233f64); - exchange_rates.insert(Exchange::USD("2018-11-19".to_string()), 3.784f64); - exchange_rates.insert(Exchange::EUR("2023-02-06".to_string()), 4.7195f64); - exchange_rates.insert(Exchange::USD("2019-10-21".to_string()), 3.8307f64); - exchange_rates.insert(Exchange::USD("2016-05-18".to_string()), 3.9005f64); - exchange_rates.insert(Exchange::EUR("2025-12-23".to_string()), 4.2274f64); - exchange_rates.insert(Exchange::USD("2017-08-23".to_string()), 3.6274f64); - exchange_rates.insert(Exchange::EUR("2024-10-10".to_string()), 4.3029f64); - exchange_rates.insert(Exchange::USD("2018-03-15".to_string()), 3.4117f64); - exchange_rates.insert(Exchange::USD("2013-05-22".to_string()), 3.2322f64); - exchange_rates.insert(Exchange::EUR("2023-02-16".to_string()), 4.7728f64); - exchange_rates.insert(Exchange::USD("2014-07-08".to_string()), 3.0441f64); - exchange_rates.insert(Exchange::USD("2021-03-25".to_string()), 3.9253f64); - exchange_rates.insert(Exchange::USD("2022-03-10".to_string()), 4.3482f64); - exchange_rates.insert(Exchange::USD("2018-08-01".to_string()), 3.6603f64); - exchange_rates.insert(Exchange::USD("2016-08-22".to_string()), 3.809f64); - exchange_rates.insert(Exchange::USD("2018-06-28".to_string()), 3.7705f64); - exchange_rates.insert(Exchange::USD("2013-08-14".to_string()), 3.1643f64); - exchange_rates.insert(Exchange::EUR("2023-09-25".to_string()), 4.5892f64); - exchange_rates.insert(Exchange::USD("2024-11-05".to_string()), 4.0038f64); - exchange_rates.insert(Exchange::USD("2023-03-31".to_string()), 4.2934f64); - exchange_rates.insert(Exchange::EUR("2023-06-14".to_string()), 4.4715f64); - exchange_rates.insert(Exchange::EUR("2023-11-30".to_string()), 4.3492f64); - exchange_rates.insert(Exchange::EUR("2024-07-19".to_string()), 4.293f64); - exchange_rates.insert(Exchange::USD("2023-10-30".to_string()), 4.204f64); - exchange_rates.insert(Exchange::EUR("2025-07-23".to_string()), 4.2544f64); - exchange_rates.insert(Exchange::USD("2014-09-01".to_string()), 3.2035f64); - exchange_rates.insert(Exchange::USD("2021-08-31".to_string()), 3.8386f64); - exchange_rates.insert(Exchange::USD("2024-12-03".to_string()), 4.0803f64); - exchange_rates.insert(Exchange::USD("2023-11-08".to_string()), 4.1804f64); - exchange_rates.insert(Exchange::USD("2018-11-14".to_string()), 3.8114f64); - exchange_rates.insert(Exchange::USD("2017-05-12".to_string()), 3.8837f64); - exchange_rates.insert(Exchange::USD("2013-01-16".to_string()), 3.1097f64); - exchange_rates.insert(Exchange::USD("2018-07-05".to_string()), 3.7485f64); - exchange_rates.insert(Exchange::EUR("2025-06-02".to_string()), 4.2578f64); - exchange_rates.insert(Exchange::USD("2020-07-28".to_string()), 3.7532f64); - exchange_rates.insert(Exchange::USD("2015-05-08".to_string()), 3.6095f64); - exchange_rates.insert(Exchange::USD("2017-12-18".to_string()), 3.574f64); - exchange_rates.insert(Exchange::USD("2012-03-05".to_string()), 3.1355f64); - exchange_rates.insert(Exchange::USD("2025-02-10".to_string()), 4.0548f64); - exchange_rates.insert(Exchange::USD("2025-06-03".to_string()), 3.7437f64); - exchange_rates.insert(Exchange::USD("2024-10-22".to_string()), 3.9862f64); - exchange_rates.insert(Exchange::USD("2015-01-13".to_string()), 3.6252f64); - exchange_rates.insert(Exchange::USD("2015-03-03".to_string()), 3.719f64); - exchange_rates.insert(Exchange::EUR("2024-07-01".to_string()), 4.2981f64); - exchange_rates.insert(Exchange::USD("2017-07-17".to_string()), 3.6767f64); - exchange_rates.insert(Exchange::USD("2016-06-20".to_string()), 3.8724f64); - exchange_rates.insert(Exchange::USD("2024-05-15".to_string()), 3.9368f64); - exchange_rates.insert(Exchange::EUR("2023-03-06".to_string()), 4.7073f64); - exchange_rates.insert(Exchange::EUR("2023-12-28".to_string()), 4.3392f64); - exchange_rates.insert(Exchange::USD("2022-08-29".to_string()), 4.7821f64); - exchange_rates.insert(Exchange::USD("2020-04-16".to_string()), 4.1631f64); - exchange_rates.insert(Exchange::USD("2019-05-24".to_string()), 3.8436f64); - exchange_rates.insert(Exchange::USD("2012-09-07".to_string()), 3.2578f64); - exchange_rates.insert(Exchange::EUR("2023-03-28".to_string()), 4.6816f64); - exchange_rates.insert(Exchange::USD("2019-08-07".to_string()), 3.8597f64); - exchange_rates.insert(Exchange::USD("2025-05-19".to_string()), 3.8004f64); - exchange_rates.insert(Exchange::USD("2013-07-12".to_string()), 3.3201f64); - exchange_rates.insert(Exchange::EUR("2024-12-05".to_string()), 4.2695f64); - exchange_rates.insert(Exchange::EUR("2023-02-20".to_string()), 4.7542f64); - exchange_rates.insert(Exchange::USD("2022-11-21".to_string()), 4.5991f64); - exchange_rates.insert(Exchange::USD("2017-11-28".to_string()), 3.5382f64); - exchange_rates.insert(Exchange::USD("2015-10-16".to_string()), 3.7243f64); - exchange_rates.insert(Exchange::USD("2025-09-15".to_string()), 3.6188f64); - exchange_rates.insert(Exchange::USD("2024-12-02".to_string()), 4.0827f64); - exchange_rates.insert(Exchange::USD("2022-11-15".to_string()), 4.5143f64); - exchange_rates.insert(Exchange::USD("2016-09-30".to_string()), 3.8558f64); - exchange_rates.insert(Exchange::USD("2015-10-05".to_string()), 3.773f64); - exchange_rates.insert(Exchange::USD("2015-10-19".to_string()), 3.7265f64); - exchange_rates.insert(Exchange::USD("2013-11-06".to_string()), 3.0896f64); - exchange_rates.insert(Exchange::USD("2013-01-07".to_string()), 3.1618f64); - exchange_rates.insert(Exchange::USD("2023-04-20".to_string()), 4.2024f64); - exchange_rates.insert(Exchange::EUR("2023-04-14".to_string()), 4.6494f64); - exchange_rates.insert(Exchange::USD("2023-12-08".to_string()), 4.0181f64); - exchange_rates.insert(Exchange::USD("2013-04-04".to_string()), 3.275f64); - exchange_rates.insert(Exchange::EUR("2023-03-10".to_string()), 4.6838f64); - exchange_rates.insert(Exchange::USD("2023-12-29".to_string()), 3.935f64); - exchange_rates.insert(Exchange::EUR("2023-12-22".to_string()), 4.3288f64); - exchange_rates.insert(Exchange::USD("2023-06-14".to_string()), 4.1393f64); - exchange_rates.insert(Exchange::USD("2015-11-12".to_string()), 3.9434f64); - exchange_rates.insert(Exchange::USD("2022-08-08".to_string()), 4.6127f64); - exchange_rates.insert(Exchange::EUR("2025-07-29".to_string()), 4.2737f64); - exchange_rates.insert(Exchange::USD("2024-07-02".to_string()), 4.0375f64); - exchange_rates.insert(Exchange::EUR("2025-02-12".to_string()), 4.1721f64); - exchange_rates.insert(Exchange::USD("2012-04-24".to_string()), 3.1946f64); - exchange_rates.insert(Exchange::EUR("2024-08-09".to_string()), 4.3238f64); - exchange_rates.insert(Exchange::USD("2020-08-12".to_string()), 3.7558f64); - exchange_rates.insert(Exchange::USD("2018-10-26".to_string()), 3.7899f64); - exchange_rates.insert(Exchange::USD("2020-11-24".to_string()), 3.7625f64); - exchange_rates.insert(Exchange::USD("2017-03-28".to_string()), 3.9169f64); - exchange_rates.insert(Exchange::USD("2016-08-29".to_string()), 3.8789f64); - exchange_rates.insert(Exchange::USD("2012-10-18".to_string()), 3.1314f64); - exchange_rates.insert(Exchange::USD("2022-07-14".to_string()), 4.8274f64); - exchange_rates.insert(Exchange::USD("2021-09-22".to_string()), 3.946f64); - exchange_rates.insert(Exchange::USD("2024-10-02".to_string()), 3.8792f64); - exchange_rates.insert(Exchange::USD("2022-10-07".to_string()), 4.9588f64); - exchange_rates.insert(Exchange::USD("2022-09-19".to_string()), 4.7255f64); - exchange_rates.insert(Exchange::USD("2014-05-14".to_string()), 3.048f64); - exchange_rates.insert(Exchange::USD("2018-09-04".to_string()), 3.7241f64); - exchange_rates.insert(Exchange::USD("2014-10-23".to_string()), 3.339f64); - exchange_rates.insert(Exchange::EUR("2023-03-20".to_string()), 4.7109f64); - exchange_rates.insert(Exchange::USD("2025-12-29".to_string()), 3.5898f64); - exchange_rates.insert(Exchange::USD("2020-07-21".to_string()), 3.8812f64); - exchange_rates.insert(Exchange::USD("2019-02-18".to_string()), 3.8286f64); - exchange_rates.insert(Exchange::USD("2015-08-14".to_string()), 3.7557f64); - exchange_rates.insert(Exchange::USD("2022-06-28".to_string()), 4.4377f64); - exchange_rates.insert(Exchange::USD("2022-08-26".to_string()), 4.7465f64); - exchange_rates.insert(Exchange::USD("2021-11-08".to_string()), 3.9747f64); - exchange_rates.insert(Exchange::USD("2019-12-04".to_string()), 3.8647f64); - exchange_rates.insert(Exchange::USD("2017-04-18".to_string()), 3.98f64); - exchange_rates.insert(Exchange::USD("2019-12-27".to_string()), 3.8266f64); - exchange_rates.insert(Exchange::EUR("2023-04-07".to_string()), 4.6862f64); - exchange_rates.insert(Exchange::USD("2019-12-10".to_string()), 3.8711f64); - exchange_rates.insert(Exchange::EUR("2024-09-03".to_string()), 4.2757f64); - exchange_rates.insert(Exchange::EUR("2024-03-08".to_string()), 4.3079f64); - exchange_rates.insert(Exchange::USD("2025-07-02".to_string()), 3.609f64); - exchange_rates.insert(Exchange::USD("2012-09-06".to_string()), 3.2955f64); - exchange_rates.insert(Exchange::USD("2020-05-21".to_string()), 4.1346f64); - exchange_rates.insert(Exchange::EUR("2025-02-28".to_string()), 4.1575f64); - exchange_rates.insert(Exchange::USD("2020-07-03".to_string()), 3.9764f64); - exchange_rates.insert(Exchange::USD("2021-07-21".to_string()), 3.9035f64); - exchange_rates.insert(Exchange::USD("2013-05-08".to_string()), 3.1609f64); - exchange_rates.insert(Exchange::USD("2017-09-14".to_string()), 3.5984f64); - exchange_rates.insert(Exchange::USD("2024-07-17".to_string()), 3.921f64); - exchange_rates.insert(Exchange::USD("2016-01-04".to_string()), 3.9281f64); - exchange_rates.insert(Exchange::USD("2015-01-30".to_string()), 3.7204f64); - exchange_rates.insert(Exchange::USD("2022-03-01".to_string()), 4.2193f64); - exchange_rates.insert(Exchange::USD("2022-07-20".to_string()), 4.6524f64); - exchange_rates.insert(Exchange::USD("2015-04-16".to_string()), 3.7746f64); - exchange_rates.insert(Exchange::USD("2018-07-19".to_string()), 3.7163f64); - exchange_rates.insert(Exchange::USD("2013-03-13".to_string()), 3.1863f64); - exchange_rates.insert(Exchange::USD("2012-12-11".to_string()), 3.1645f64); - exchange_rates.insert(Exchange::USD("2022-04-04".to_string()), 4.2073f64); - exchange_rates.insert(Exchange::USD("2021-06-23".to_string()), 3.7878f64); - exchange_rates.insert(Exchange::EUR("2025-06-26".to_string()), 4.2479f64); - exchange_rates.insert(Exchange::USD("2014-07-17".to_string()), 3.0579f64); - exchange_rates.insert(Exchange::USD("2014-11-18".to_string()), 3.3706f64); - exchange_rates.insert(Exchange::EUR("2024-04-03".to_string()), 4.2923f64); - exchange_rates.insert(Exchange::USD("2021-10-21".to_string()), 3.9449f64); - exchange_rates.insert(Exchange::USD("2020-07-14".to_string()), 3.957f64); - exchange_rates.insert(Exchange::USD("2020-08-19".to_string()), 3.6732f64); - exchange_rates.insert(Exchange::USD("2015-04-29".to_string()), 3.6396f64); - exchange_rates.insert(Exchange::USD("2013-10-03".to_string()), 3.0951f64); - exchange_rates.insert(Exchange::USD("2013-05-20".to_string()), 3.238f64); - exchange_rates.insert(Exchange::EUR("2024-07-15".to_string()), 4.2499f64); - exchange_rates.insert(Exchange::USD("2022-03-15".to_string()), 4.2992f64); - exchange_rates.insert(Exchange::USD("2018-09-20".to_string()), 3.6702f64); - exchange_rates.insert(Exchange::USD("2014-05-12".to_string()), 3.0362f64); - exchange_rates.insert(Exchange::USD("2025-09-26".to_string()), 3.6528f64); - exchange_rates.insert(Exchange::USD("2023-09-19".to_string()), 4.3472f64); - exchange_rates.insert(Exchange::USD("2016-03-10".to_string()), 3.932f64); - exchange_rates.insert(Exchange::USD("2016-08-04".to_string()), 3.8588f64); - exchange_rates.insert(Exchange::USD("2013-04-19".to_string()), 3.1409f64); - exchange_rates.insert(Exchange::EUR("2023-09-12".to_string()), 4.6836f64); - exchange_rates.insert(Exchange::EUR("2024-10-17".to_string()), 4.3174f64); - exchange_rates.insert(Exchange::USD("2021-12-01".to_string()), 4.1051f64); - exchange_rates.insert(Exchange::USD("2022-08-30".to_string()), 4.721f64); - exchange_rates.insert(Exchange::USD("2016-04-18".to_string()), 3.801f64); - exchange_rates.insert(Exchange::USD("2012-09-24".to_string()), 3.218f64); - exchange_rates.insert(Exchange::USD("2022-07-27".to_string()), 4.7142f64); - exchange_rates.insert(Exchange::USD("2019-10-22".to_string()), 3.8408f64); - exchange_rates.insert(Exchange::USD("2022-11-30".to_string()), 4.5066f64); - exchange_rates.insert(Exchange::USD("2016-10-06".to_string()), 3.8405f64); - exchange_rates.insert(Exchange::USD("2023-08-17".to_string()), 4.1094f64); - exchange_rates.insert(Exchange::USD("2012-12-28".to_string()), 3.0893f64); - exchange_rates.insert(Exchange::USD("2019-07-08".to_string()), 3.7857f64); - exchange_rates.insert(Exchange::USD("2017-10-13".to_string()), 3.601f64); - exchange_rates.insert(Exchange::USD("2022-08-10".to_string()), 4.6112f64); - exchange_rates.insert(Exchange::USD("2018-04-04".to_string()), 3.4224f64); - exchange_rates.insert(Exchange::USD("2024-02-09".to_string()), 4.0096f64); - exchange_rates.insert(Exchange::USD("2014-05-09".to_string()), 3.0247f64); - exchange_rates.insert(Exchange::USD("2019-11-29".to_string()), 3.9288f64); - exchange_rates.insert(Exchange::USD("2019-11-18".to_string()), 3.8767f64); - exchange_rates.insert(Exchange::USD("2017-02-23".to_string()), 4.084f64); - exchange_rates.insert(Exchange::USD("2012-12-21".to_string()), 3.0791f64); - exchange_rates.insert(Exchange::EUR("2023-11-14".to_string()), 4.4163f64); - exchange_rates.insert(Exchange::USD("2025-04-08".to_string()), 3.927f64); - exchange_rates.insert(Exchange::USD("2018-01-26".to_string()), 3.3299f64); - exchange_rates.insert(Exchange::USD("2017-03-03".to_string()), 4.0955f64); - exchange_rates.insert(Exchange::USD("2024-05-22".to_string()), 3.9243f64); - exchange_rates.insert(Exchange::USD("2021-09-27".to_string()), 3.9276f64); - exchange_rates.insert(Exchange::USD("2012-08-06".to_string()), 3.2752f64); - exchange_rates.insert(Exchange::EUR("2023-06-07".to_string()), 4.479f64); - exchange_rates.insert(Exchange::EUR("2024-06-26".to_string()), 4.3087f64); - exchange_rates.insert(Exchange::USD("2015-07-21".to_string()), 3.7875f64); - exchange_rates.insert(Exchange::USD("2017-02-21".to_string()), 4.0942f64); - exchange_rates.insert(Exchange::USD("2012-09-27".to_string()), 3.2236f64); - exchange_rates.insert(Exchange::EUR("2025-07-01".to_string()), 4.2415f64); - exchange_rates.insert(Exchange::EUR("2023-05-09".to_string()), 4.5683f64); - exchange_rates.insert(Exchange::USD("2025-05-12".to_string()), 3.8011f64); - exchange_rates.insert(Exchange::USD("2020-01-23".to_string()), 3.8308f64); - exchange_rates.insert(Exchange::USD("2018-01-12".to_string()), 3.4366f64); - exchange_rates.insert(Exchange::USD("2023-03-07".to_string()), 4.3981f64); - exchange_rates.insert(Exchange::USD("2015-02-05".to_string()), 3.6656f64); - exchange_rates.insert(Exchange::USD("2014-12-09".to_string()), 3.3688f64); - exchange_rates.insert(Exchange::EUR("2024-05-15".to_string()), 4.2635f64); - exchange_rates.insert(Exchange::USD("2015-01-28".to_string()), 3.7276f64); - exchange_rates.insert(Exchange::USD("2022-08-23".to_string()), 4.803f64); - exchange_rates.insert(Exchange::USD("2020-01-27".to_string()), 3.8725f64); - exchange_rates.insert(Exchange::USD("2024-11-29".to_string()), 4.077f64); - exchange_rates.insert(Exchange::USD("2012-02-17".to_string()), 3.179f64); - exchange_rates.insert(Exchange::USD("2016-11-07".to_string()), 3.9132f64); - exchange_rates.insert(Exchange::USD("2022-06-13".to_string()), 4.4209f64); - exchange_rates.insert(Exchange::USD("2022-10-25".to_string()), 4.8499f64); - exchange_rates.insert(Exchange::USD("2020-01-31".to_string()), 3.8999f64); - exchange_rates.insert(Exchange::USD("2017-11-07".to_string()), 3.6652f64); - exchange_rates.insert(Exchange::USD("2012-08-31".to_string()), 3.3353f64); - exchange_rates.insert(Exchange::USD("2023-04-06".to_string()), 4.3033f64); - exchange_rates.insert(Exchange::USD("2023-07-19".to_string()), 3.9612f64); - exchange_rates.insert(Exchange::USD("2023-06-09".to_string()), 4.1545f64); - exchange_rates.insert(Exchange::USD("2017-02-08".to_string()), 4.0521f64); - exchange_rates.insert(Exchange::USD("2018-10-18".to_string()), 3.7302f64); - exchange_rates.insert(Exchange::USD("2018-03-28".to_string()), 3.3956f64); - exchange_rates.insert(Exchange::USD("2017-02-28".to_string()), 4.077f64); - exchange_rates.insert(Exchange::USD("2015-09-14".to_string()), 3.7124f64); - exchange_rates.insert(Exchange::EUR("2025-03-25".to_string()), 4.1664f64); - exchange_rates.insert(Exchange::USD("2015-07-09".to_string()), 3.829f64); - exchange_rates.insert(Exchange::USD("2023-07-11".to_string()), 4.0374f64); - exchange_rates.insert(Exchange::USD("2013-08-23".to_string()), 3.1673f64); - exchange_rates.insert(Exchange::EUR("2024-02-06".to_string()), 4.3435f64); - exchange_rates.insert(Exchange::USD("2017-04-05".to_string()), 3.9783f64); - exchange_rates.insert(Exchange::USD("2022-03-02".to_string()), 4.3302f64); - exchange_rates.insert(Exchange::EUR("2025-05-21".to_string()), 4.2403f64); - exchange_rates.insert(Exchange::USD("2023-01-13".to_string()), 4.3272f64); - exchange_rates.insert(Exchange::USD("2023-05-25".to_string()), 4.1994f64); - exchange_rates.insert(Exchange::USD("2023-12-06".to_string()), 4.0202f64); - exchange_rates.insert(Exchange::EUR("2023-05-30".to_string()), 4.522f64); - exchange_rates.insert(Exchange::USD("2018-09-27".to_string()), 3.6557f64); - exchange_rates.insert(Exchange::USD("2024-10-11".to_string()), 3.9204f64); - exchange_rates.insert(Exchange::USD("2021-03-17".to_string()), 3.8676f64); - exchange_rates.insert(Exchange::USD("2016-11-18".to_string()), 4.1968f64); - exchange_rates.insert(Exchange::USD("2014-05-16".to_string()), 3.0567f64); - exchange_rates.insert(Exchange::USD("2013-12-17".to_string()), 3.036f64); - exchange_rates.insert(Exchange::USD("2021-12-29".to_string()), 4.0779f64); - exchange_rates.insert(Exchange::USD("2020-10-07".to_string()), 3.8126f64); - exchange_rates.insert(Exchange::USD("2025-02-26".to_string()), 3.9434f64); - exchange_rates.insert(Exchange::USD("2024-10-10".to_string()), 3.9355f64); - exchange_rates.insert(Exchange::USD("2025-08-01".to_string()), 3.7536f64); - exchange_rates.insert(Exchange::USD("2023-09-21".to_string()), 4.3365f64); - exchange_rates.insert(Exchange::USD("2019-09-24".to_string()), 3.9838f64); - exchange_rates.insert(Exchange::USD("2016-08-25".to_string()), 3.819f64); - exchange_rates.insert(Exchange::USD("2015-02-02".to_string()), 3.6801f64); - exchange_rates.insert(Exchange::EUR("2024-09-09".to_string()), 4.2818f64); - exchange_rates.insert(Exchange::USD("2025-03-19".to_string()), 3.8473f64); - exchange_rates.insert(Exchange::USD("2018-11-21".to_string()), 3.7829f64); - exchange_rates.insert(Exchange::USD("2017-11-22".to_string()), 3.5881f64); - exchange_rates.insert(Exchange::EUR("2024-07-10".to_string()), 4.2529f64); - exchange_rates.insert(Exchange::EUR("2024-08-20".to_string()), 4.2665f64); - exchange_rates.insert(Exchange::USD("2020-03-09".to_string()), 3.7899f64); - exchange_rates.insert(Exchange::USD("2022-10-04".to_string()), 4.8615f64); - exchange_rates.insert(Exchange::USD("2021-07-07".to_string()), 3.8225f64); - exchange_rates.insert(Exchange::USD("2021-11-30".to_string()), 4.1214f64); - exchange_rates.insert(Exchange::USD("2018-01-22".to_string()), 3.4036f64); - exchange_rates.insert(Exchange::USD("2019-09-11".to_string()), 3.9324f64); - exchange_rates.insert(Exchange::USD("2025-06-20".to_string()), 3.7067f64); - exchange_rates.insert(Exchange::EUR("2024-04-02".to_string()), 4.2934f64); - exchange_rates.insert(Exchange::USD("2024-02-16".to_string()), 4.0325f64); - exchange_rates.insert(Exchange::USD("2024-11-20".to_string()), 4.112f64); - exchange_rates.insert(Exchange::USD("2015-01-21".to_string()), 3.7358f64); - exchange_rates.insert(Exchange::USD("2025-07-03".to_string()), 3.6137f64); - exchange_rates.insert(Exchange::USD("2019-03-12".to_string()), 3.8116f64); - exchange_rates.insert(Exchange::USD("2017-06-29".to_string()), 3.7122f64); - exchange_rates.insert(Exchange::USD("2023-07-10".to_string()), 4.0632f64); - exchange_rates.insert(Exchange::USD("2020-08-27".to_string()), 3.7286f64); - exchange_rates.insert(Exchange::USD("2017-11-21".to_string()), 3.606f64); - exchange_rates.insert(Exchange::USD("2015-05-20".to_string()), 3.6538f64); - exchange_rates.insert(Exchange::USD("2025-03-13".to_string()), 3.8568f64); - exchange_rates.insert(Exchange::USD("2017-07-10".to_string()), 3.716f64); - exchange_rates.insert(Exchange::USD("2016-11-08".to_string()), 3.9169f64); - exchange_rates.insert(Exchange::USD("2017-06-28".to_string()), 3.7249f64); - exchange_rates.insert(Exchange::USD("2023-12-07".to_string()), 4.0199f64); - exchange_rates.insert(Exchange::USD("2015-07-30".to_string()), 3.7754f64); - exchange_rates.insert(Exchange::USD("2014-10-21".to_string()), 3.2987f64); - exchange_rates.insert(Exchange::USD("2013-05-15".to_string()), 3.234f64); - exchange_rates.insert(Exchange::EUR("2025-10-16".to_string()), 4.2517f64); - exchange_rates.insert(Exchange::USD("2023-01-23".to_string()), 4.3242f64); - exchange_rates.insert(Exchange::USD("2021-05-17".to_string()), 3.7288f64); - exchange_rates.insert(Exchange::USD("2015-04-30".to_string()), 3.5987f64); - exchange_rates.insert(Exchange::USD("2022-11-28".to_string()), 4.4827f64); - exchange_rates.insert(Exchange::USD("2014-11-26".to_string()), 3.3546f64); - exchange_rates.insert(Exchange::USD("2018-08-29".to_string()), 3.6747f64); - exchange_rates.insert(Exchange::USD("2024-08-07".to_string()), 3.9526f64); - exchange_rates.insert(Exchange::USD("2024-04-30".to_string()), 4.0341f64); - exchange_rates.insert(Exchange::USD("2020-08-05".to_string()), 3.7143f64); - exchange_rates.insert(Exchange::USD("2013-08-16".to_string()), 3.1665f64); - exchange_rates.insert(Exchange::USD("2019-03-14".to_string()), 3.8018f64); - exchange_rates.insert(Exchange::USD("2014-11-19".to_string()), 3.3655f64); - exchange_rates.insert(Exchange::USD("2023-03-27".to_string()), 4.3518f64); - exchange_rates.insert(Exchange::USD("2020-12-03".to_string()), 3.6981f64); - exchange_rates.insert(Exchange::EUR("2024-02-28".to_string()), 4.3116f64); - exchange_rates.insert(Exchange::USD("2021-10-01".to_string()), 3.9678f64); - exchange_rates.insert(Exchange::USD("2024-01-10".to_string()), 3.9656f64); - exchange_rates.insert(Exchange::USD("2022-10-18".to_string()), 4.8929f64); - exchange_rates.insert(Exchange::USD("2023-08-02".to_string()), 4.0497f64); - exchange_rates.insert(Exchange::USD("2016-12-15".to_string()), 4.2329f64); - exchange_rates.insert(Exchange::USD("2016-05-30".to_string()), 3.947f64); - exchange_rates.insert(Exchange::USD("2016-08-08".to_string()), 3.8706f64); - exchange_rates.insert(Exchange::USD("2014-07-23".to_string()), 3.0707f64); - exchange_rates.insert(Exchange::USD("2023-09-28".to_string()), 4.4062f64); - exchange_rates.insert(Exchange::USD("2019-10-18".to_string()), 3.8503f64); - exchange_rates.insert(Exchange::USD("2015-07-22".to_string()), 3.7629f64); - exchange_rates.insert(Exchange::USD("2013-07-31".to_string()), 3.1929f64); - exchange_rates.insert(Exchange::USD("2022-01-18".to_string()), 3.9734f64); - exchange_rates.insert(Exchange::USD("2018-07-16".to_string()), 3.6828f64); - exchange_rates.insert(Exchange::EUR("2024-12-04".to_string()), 4.2899f64); - exchange_rates.insert(Exchange::USD("2018-10-09".to_string()), 3.7629f64); - exchange_rates.insert(Exchange::EUR("2023-04-20".to_string()), 4.6109f64); - exchange_rates.insert(Exchange::EUR("2023-05-12".to_string()), 4.5444f64); - exchange_rates.insert(Exchange::USD("2024-12-04".to_string()), 4.0845f64); - exchange_rates.insert(Exchange::EUR("2024-09-30".to_string()), 4.2791f64); - exchange_rates.insert(Exchange::EUR("2025-02-25".to_string()), 4.1339f64); - exchange_rates.insert(Exchange::USD("2025-07-30".to_string()), 3.6981f64); - exchange_rates.insert(Exchange::USD("2022-02-17".to_string()), 3.9687f64); - exchange_rates.insert(Exchange::USD("2015-09-25".to_string()), 3.7818f64); - exchange_rates.insert(Exchange::USD("2017-06-30".to_string()), 3.7062f64); - exchange_rates.insert(Exchange::USD("2023-07-04".to_string()), 4.0636f64); - exchange_rates.insert(Exchange::USD("2012-01-05".to_string()), 3.5081f64); - exchange_rates.insert(Exchange::USD("2018-12-14".to_string()), 3.8095f64); - exchange_rates.insert(Exchange::USD("2019-08-21".to_string()), 3.921f64); - exchange_rates.insert(Exchange::USD("2017-07-25".to_string()), 3.6519f64); - exchange_rates.insert(Exchange::USD("2017-03-13".to_string()), 4.0747f64); - exchange_rates.insert(Exchange::EUR("2025-04-14".to_string()), 4.2776f64); - exchange_rates.insert(Exchange::USD("2020-07-16".to_string()), 3.9422f64); - exchange_rates.insert(Exchange::USD("2016-12-29".to_string()), 4.2161f64); - exchange_rates.insert(Exchange::USD("2020-08-10".to_string()), 3.7393f64); - exchange_rates.insert(Exchange::USD("2013-09-16".to_string()), 3.1435f64); - exchange_rates.insert(Exchange::USD("2023-03-21".to_string()), 4.3715f64); - exchange_rates.insert(Exchange::USD("2024-12-12".to_string()), 4.074f64); - exchange_rates.insert(Exchange::USD("2013-10-24".to_string()), 3.0323f64); - exchange_rates.insert(Exchange::USD("2012-08-13".to_string()), 3.3202f64); - exchange_rates.insert(Exchange::EUR("2023-05-16".to_string()), 4.4904f64); - exchange_rates.insert(Exchange::USD("2024-05-21".to_string()), 3.9175f64); - exchange_rates.insert(Exchange::USD("2019-02-19".to_string()), 3.8311f64); - exchange_rates.insert(Exchange::USD("2016-06-23".to_string()), 3.8593f64); - exchange_rates.insert(Exchange::USD("2015-11-19".to_string()), 3.9754f64); - exchange_rates.insert(Exchange::USD("2024-04-23".to_string()), 4.061f64); - exchange_rates.insert(Exchange::USD("2022-02-28".to_string()), 4.1965f64); - exchange_rates.insert(Exchange::EUR("2023-03-24".to_string()), 4.6911f64); - exchange_rates.insert(Exchange::USD("2016-05-23".to_string()), 3.9513f64); - exchange_rates.insert(Exchange::USD("2016-06-21".to_string()), 3.8741f64); - exchange_rates.insert(Exchange::USD("2019-12-24".to_string()), 3.8487f64); - exchange_rates.insert(Exchange::USD("2018-11-12".to_string()), 3.8163f64); - exchange_rates.insert(Exchange::USD("2023-10-03".to_string()), 4.4012f64); - exchange_rates.insert(Exchange::EUR("2023-09-06".to_string()), 4.4974f64); - exchange_rates.insert(Exchange::USD("2012-03-14".to_string()), 3.1699f64); - exchange_rates.insert(Exchange::USD("2015-08-25".to_string()), 3.6613f64); - exchange_rates.insert(Exchange::EUR("2025-09-04".to_string()), 4.2553f64); - exchange_rates.insert(Exchange::USD("2019-06-21".to_string()), 3.7705f64); - exchange_rates.insert(Exchange::USD("2012-11-06".to_string()), 3.2223f64); - exchange_rates.insert(Exchange::USD("2012-10-09".to_string()), 3.1501f64); - exchange_rates.insert(Exchange::EUR("2023-03-09".to_string()), 4.6836f64); - exchange_rates.insert(Exchange::EUR("2023-11-29".to_string()), 4.3327f64); - exchange_rates.insert(Exchange::USD("2018-01-02".to_string()), 3.4546f64); - exchange_rates.insert(Exchange::USD("2015-03-31".to_string()), 3.8125f64); - exchange_rates.insert(Exchange::USD("2023-10-24".to_string()), 4.1884f64); - exchange_rates.insert(Exchange::USD("2022-08-01".to_string()), 4.629f64); - exchange_rates.insert(Exchange::USD("2019-10-15".to_string()), 3.8952f64); - exchange_rates.insert(Exchange::USD("2025-07-17".to_string()), 3.6686f64); - exchange_rates.insert(Exchange::EUR("2024-04-26".to_string()), 4.3225f64); - exchange_rates.insert(Exchange::USD("2014-10-13".to_string()), 3.3062f64); - exchange_rates.insert(Exchange::USD("2012-01-11".to_string()), 3.4919f64); - exchange_rates.insert(Exchange::USD("2018-01-17".to_string()), 3.4109f64); - exchange_rates.insert(Exchange::USD("2013-07-09".to_string()), 3.3588f64); - exchange_rates.insert(Exchange::USD("2025-05-06".to_string()), 3.7789f64); - exchange_rates.insert(Exchange::USD("2021-09-30".to_string()), 3.9925f64); - exchange_rates.insert(Exchange::USD("2015-02-25".to_string()), 3.6649f64); - exchange_rates.insert(Exchange::USD("2025-10-08".to_string()), 3.6619f64); - exchange_rates.insert(Exchange::USD("2021-12-13".to_string()), 4.1003f64); - exchange_rates.insert(Exchange::USD("2020-09-30".to_string()), 3.8658f64); - exchange_rates.insert(Exchange::USD("2022-08-16".to_string()), 4.6282f64); - exchange_rates.insert(Exchange::USD("2017-03-06".to_string()), 4.0663f64); - exchange_rates.insert(Exchange::USD("2016-05-02".to_string()), 3.8195f64); - exchange_rates.insert(Exchange::EUR("2023-02-15".to_string()), 4.7593f64); - exchange_rates.insert(Exchange::USD("2021-12-03".to_string()), 4.0653f64); - exchange_rates.insert(Exchange::USD("2024-04-16".to_string()), 4.0687f64); - exchange_rates.insert(Exchange::USD("2021-11-10".to_string()), 3.9737f64); - exchange_rates.insert(Exchange::USD("2017-01-27".to_string()), 4.0595f64); - exchange_rates.insert(Exchange::USD("2017-04-21".to_string()), 3.9841f64); - exchange_rates.insert(Exchange::USD("2016-07-04".to_string()), 3.9886f64); - exchange_rates.insert(Exchange::EUR("2023-04-03".to_string()), 4.6805f64); - exchange_rates.insert(Exchange::USD("2015-07-03".to_string()), 3.7726f64); - exchange_rates.insert(Exchange::USD("2012-10-17".to_string()), 3.1261f64); - exchange_rates.insert(Exchange::USD("2012-03-07".to_string()), 3.1631f64); - exchange_rates.insert(Exchange::USD("2022-07-21".to_string()), 4.6682f64); - exchange_rates.insert(Exchange::USD("2018-10-11".to_string()), 3.7399f64); - exchange_rates.insert(Exchange::USD("2020-01-16".to_string()), 3.7968f64); - exchange_rates.insert(Exchange::EUR("2025-09-08".to_string()), 4.2484f64); - exchange_rates.insert(Exchange::EUR("2023-11-27".to_string()), 4.3543f64); - exchange_rates.insert(Exchange::USD("2022-06-21".to_string()), 4.3917f64); - exchange_rates.insert(Exchange::EUR("2024-08-14".to_string()), 4.2933f64); - exchange_rates.insert(Exchange::USD("2018-12-20".to_string()), 3.7331f64); - exchange_rates.insert(Exchange::USD("2021-07-15".to_string()), 3.8629f64); - exchange_rates.insert(Exchange::USD("2014-03-18".to_string()), 3.0396f64); - exchange_rates.insert(Exchange::USD("2019-09-09".to_string()), 3.931f64); - exchange_rates.insert(Exchange::EUR("2023-06-05".to_string()), 4.4851f64); - exchange_rates.insert(Exchange::EUR("2024-05-24".to_string()), 4.2624f64); - exchange_rates.insert(Exchange::USD("2012-01-25".to_string()), 3.299f64); - exchange_rates.insert(Exchange::EUR("2025-06-27".to_string()), 4.2362f64); - exchange_rates.insert(Exchange::USD("2013-06-25".to_string()), 3.284f64); - exchange_rates.insert(Exchange::USD("2014-09-15".to_string()), 3.2522f64); - exchange_rates.insert(Exchange::USD("2024-12-19".to_string()), 4.0944f64); - exchange_rates.insert(Exchange::USD("2024-01-17".to_string()), 4.0434f64); - exchange_rates.insert(Exchange::USD("2024-07-22".to_string()), 3.9307f64); - exchange_rates.insert(Exchange::USD("2022-09-28".to_string()), 5.0381f64); - exchange_rates.insert(Exchange::USD("2012-07-06".to_string()), 3.4057f64); - exchange_rates.insert(Exchange::USD("2019-12-20".to_string()), 3.8311f64); - exchange_rates.insert(Exchange::USD("2023-12-01".to_string()), 3.991f64); - exchange_rates.insert(Exchange::EUR("2025-01-20".to_string()), 4.2587f64); - exchange_rates.insert(Exchange::USD("2020-12-28".to_string()), 3.6639f64); - exchange_rates.insert(Exchange::USD("2016-03-25".to_string()), 3.8174f64); - exchange_rates.insert(Exchange::USD("2023-04-28".to_string()), 4.1753f64); - exchange_rates.insert(Exchange::USD("2018-09-18".to_string()), 3.6817f64); - exchange_rates.insert(Exchange::EUR("2023-12-01".to_string()), 4.3494f64); - exchange_rates.insert(Exchange::USD("2022-07-07".to_string()), 4.7029f64); - exchange_rates.insert(Exchange::EUR("2023-08-03".to_string()), 4.4585f64); - exchange_rates.insert(Exchange::EUR("2023-11-06".to_string()), 4.4615f64); - exchange_rates.insert(Exchange::EUR("2023-10-03".to_string()), 4.6147f64); - exchange_rates.insert(Exchange::USD("2014-12-03".to_string()), 3.373f64); - exchange_rates.insert(Exchange::USD("2023-03-28".to_string()), 4.33f64); - exchange_rates.insert(Exchange::USD("2021-05-14".to_string()), 3.7374f64); - exchange_rates.insert(Exchange::USD("2013-07-02".to_string()), 3.3222f64); - exchange_rates.insert(Exchange::USD("2021-06-09".to_string()), 3.6545f64); - exchange_rates.insert(Exchange::USD("2024-04-29".to_string()), 4.0346f64); - exchange_rates.insert(Exchange::EUR("2024-10-18".to_string()), 4.3048f64); - exchange_rates.insert(Exchange::USD("2014-12-22".to_string()), 3.4767f64); - exchange_rates.insert(Exchange::EUR("2023-04-13".to_string()), 4.6511f64); - exchange_rates.insert(Exchange::EUR("2025-01-14".to_string()), 4.2737f64); - exchange_rates.insert(Exchange::EUR("2025-08-13".to_string()), 4.2586f64); - exchange_rates.insert(Exchange::USD("2018-09-03".to_string()), 3.6991f64); - exchange_rates.insert(Exchange::USD("2017-12-11".to_string()), 3.5633f64); - exchange_rates.insert(Exchange::USD("2015-09-17".to_string()), 3.7129f64); - exchange_rates.insert(Exchange::USD("2014-11-13".to_string()), 3.386f64); - exchange_rates.insert(Exchange::USD("2023-03-10".to_string()), 4.4266f64); - exchange_rates.insert(Exchange::USD("2021-03-22".to_string()), 3.8768f64); - exchange_rates.insert(Exchange::USD("2021-06-17".to_string()), 3.7931f64); - exchange_rates.insert(Exchange::USD("2019-08-16".to_string()), 3.9281f64); - exchange_rates.insert(Exchange::USD("2017-05-16".to_string()), 3.7932f64); - exchange_rates.insert(Exchange::USD("2014-05-13".to_string()), 3.0381f64); - exchange_rates.insert(Exchange::USD("2014-11-04".to_string()), 3.3776f64); - exchange_rates.insert(Exchange::USD("2019-04-03".to_string()), 3.8192f64); - exchange_rates.insert(Exchange::USD("2025-07-08".to_string()), 3.6135f64); - exchange_rates.insert(Exchange::USD("2023-12-15".to_string()), 3.9326f64); - exchange_rates.insert(Exchange::USD("2012-02-27".to_string()), 3.1176f64); - exchange_rates.insert(Exchange::USD("2012-11-12".to_string()), 3.2803f64); - exchange_rates.insert(Exchange::EUR("2024-03-18".to_string()), 4.3086f64); - exchange_rates.insert(Exchange::USD("2020-01-20".to_string()), 3.8277f64); - exchange_rates.insert(Exchange::USD("2020-04-09".to_string()), 4.1744f64); - exchange_rates.insert(Exchange::USD("2020-08-18".to_string()), 3.6895f64); - exchange_rates.insert(Exchange::USD("2013-04-05".to_string()), 3.2358f64); - exchange_rates.insert(Exchange::USD("2020-05-07".to_string()), 4.2162f64); - exchange_rates.insert(Exchange::USD("2020-11-05".to_string()), 3.8353f64); - exchange_rates.insert(Exchange::USD("2019-03-21".to_string()), 3.7581f64); - exchange_rates.insert(Exchange::USD("2013-01-17".to_string()), 3.0853f64); - exchange_rates.insert(Exchange::EUR("2024-02-01".to_string()), 4.3247f64); - exchange_rates.insert(Exchange::EUR("2024-04-23".to_string()), 4.3335f64); - exchange_rates.insert(Exchange::USD("2025-08-25".to_string()), 3.6421f64); - exchange_rates.insert(Exchange::USD("2024-01-15".to_string()), 3.9963f64); - exchange_rates.insert(Exchange::USD("2020-04-08".to_string()), 4.1801f64); - exchange_rates.insert(Exchange::USD("2021-12-08".to_string()), 4.071f64); - exchange_rates.insert(Exchange::USD("2024-04-03".to_string()), 3.9843f64); - exchange_rates.insert(Exchange::USD("2020-12-23".to_string()), 3.6919f64); - exchange_rates.insert(Exchange::USD("2021-12-24".to_string()), 4.0785f64); - exchange_rates.insert(Exchange::USD("2016-03-07".to_string()), 3.9515f64); - exchange_rates.insert(Exchange::USD("2025-02-28".to_string()), 3.9993f64); - exchange_rates.insert(Exchange::USD("2025-08-07".to_string()), 3.6477f64); - exchange_rates.insert(Exchange::USD("2016-09-08".to_string()), 3.8255f64); - exchange_rates.insert(Exchange::EUR("2023-04-26".to_string()), 4.5887f64); - exchange_rates.insert(Exchange::EUR("2025-01-30".to_string()), 4.2039f64); - exchange_rates.insert(Exchange::USD("2014-12-29".to_string()), 3.527f64); - exchange_rates.insert(Exchange::EUR("2023-10-30".to_string()), 4.4491f64); - exchange_rates.insert(Exchange::USD("2012-07-17".to_string()), 3.3973f64); - exchange_rates.insert(Exchange::USD("2019-04-23".to_string()), 3.8118f64); - exchange_rates.insert(Exchange::EUR("2024-02-14".to_string()), 4.3435f64); - exchange_rates.insert(Exchange::EUR("2025-03-31".to_string()), 4.1839f64); - exchange_rates.insert(Exchange::USD("2023-05-12".to_string()), 4.1638f64); - exchange_rates.insert(Exchange::USD("2017-11-23".to_string()), 3.5557f64); - exchange_rates.insert(Exchange::USD("2013-11-07".to_string()), 3.0844f64); - exchange_rates.insert(Exchange::USD("2024-02-28".to_string()), 3.9922f64); - exchange_rates.insert(Exchange::USD("2021-01-22".to_string()), 3.7255f64); - exchange_rates.insert(Exchange::EUR("2025-09-10".to_string()), 4.2604f64); - exchange_rates.insert(Exchange::USD("2023-04-04".to_string()), 4.2855f64); - exchange_rates.insert(Exchange::USD("2021-05-20".to_string()), 3.7077f64); - exchange_rates.insert(Exchange::USD("2019-12-13".to_string()), 3.8234f64); - exchange_rates.insert(Exchange::USD("2014-09-17".to_string()), 3.2331f64); - exchange_rates.insert(Exchange::USD("2021-10-26".to_string()), 3.974f64); - exchange_rates.insert(Exchange::USD("2020-06-22".to_string()), 3.9667f64); - exchange_rates.insert(Exchange::USD("2015-04-23".to_string()), 3.7371f64); - exchange_rates.insert(Exchange::USD("2021-02-01".to_string()), 3.7323f64); - exchange_rates.insert(Exchange::USD("2024-02-06".to_string()), 4.0484f64); - exchange_rates.insert(Exchange::USD("2023-07-25".to_string()), 4.008f64); - exchange_rates.insert(Exchange::USD("2022-02-16".to_string()), 3.9478f64); - exchange_rates.insert(Exchange::USD("2022-06-09".to_string()), 4.2764f64); - exchange_rates.insert(Exchange::USD("2021-02-17".to_string()), 3.7287f64); - exchange_rates.insert(Exchange::USD("2018-03-29".to_string()), 3.4201f64); - exchange_rates.insert(Exchange::USD("2018-06-08".to_string()), 3.6479f64); - exchange_rates.insert(Exchange::USD("2018-03-01".to_string()), 3.4356f64); - exchange_rates.insert(Exchange::USD("2013-11-22".to_string()), 3.1077f64); - exchange_rates.insert(Exchange::USD("2012-03-06".to_string()), 3.1557f64); - exchange_rates.insert(Exchange::USD("2020-10-22".to_string()), 3.8734f64); - exchange_rates.insert(Exchange::USD("2021-08-17".to_string()), 3.8797f64); - exchange_rates.insert(Exchange::USD("2025-07-10".to_string()), 3.6209f64); - exchange_rates.insert(Exchange::USD("2021-04-23".to_string()), 3.7855f64); - exchange_rates.insert(Exchange::USD("2022-10-20".to_string()), 4.9024f64); - exchange_rates.insert(Exchange::USD("2025-11-18".to_string()), 3.6525f64); - exchange_rates.insert(Exchange::USD("2017-04-27".to_string()), 3.8776f64); - exchange_rates.insert(Exchange::USD("2022-01-17".to_string()), 3.9567f64); - exchange_rates.insert(Exchange::USD("2015-03-24".to_string()), 3.7453f64); - exchange_rates.insert(Exchange::USD("2015-07-10".to_string()), 3.7709f64); - exchange_rates.insert(Exchange::USD("2013-05-29".to_string()), 3.2831f64); - exchange_rates.insert(Exchange::USD("2012-11-02".to_string()), 3.1965f64); - exchange_rates.insert(Exchange::EUR("2023-04-28".to_string()), 4.5889f64); - exchange_rates.insert(Exchange::EUR("2025-02-11".to_string()), 4.1783f64); - exchange_rates.insert(Exchange::USD("2020-02-20".to_string()), 3.9621f64); - exchange_rates.insert(Exchange::USD("2019-06-07".to_string()), 3.7958f64); - exchange_rates.insert(Exchange::USD("2013-01-28".to_string()), 3.1074f64); - exchange_rates.insert(Exchange::EUR("2025-04-25".to_string()), 4.2688f64); - exchange_rates.insert(Exchange::USD("2024-04-19".to_string()), 4.0688f64); - exchange_rates.insert(Exchange::USD("2020-02-19".to_string()), 3.9556f64); - exchange_rates.insert(Exchange::USD("2014-07-30".to_string()), 3.0978f64); - exchange_rates.insert(Exchange::USD("2012-01-20".to_string()), 3.3537f64); - exchange_rates.insert(Exchange::USD("2025-03-28".to_string()), 3.8817f64); - exchange_rates.insert(Exchange::EUR("2025-11-10".to_string()), 4.2351f64); - exchange_rates.insert(Exchange::USD("2013-09-27".to_string()), 3.1328f64); - exchange_rates.insert(Exchange::USD("2019-03-22".to_string()), 3.7948f64); - exchange_rates.insert(Exchange::EUR("2025-10-31".to_string()), 4.2543f64); - exchange_rates.insert(Exchange::USD("2020-03-27".to_string()), 4.1127f64); - exchange_rates.insert(Exchange::USD("2025-04-22".to_string()), 3.722f64); - exchange_rates.insert(Exchange::EUR("2023-10-04".to_string()), 4.6303f64); - exchange_rates.insert(Exchange::USD("2023-05-29".to_string()), 4.2234f64); - exchange_rates.insert(Exchange::USD("2015-12-31".to_string()), 3.9011f64); - exchange_rates.insert(Exchange::USD("2016-02-05".to_string()), 3.942f64); - exchange_rates.insert(Exchange::USD("2023-06-28".to_string()), 4.0719f64); - exchange_rates.insert(Exchange::USD("2015-09-04".to_string()), 3.7952f64); - exchange_rates.insert(Exchange::USD("2023-09-27".to_string()), 4.3622f64); - exchange_rates.insert(Exchange::EUR("2025-11-28".to_string()), 4.2369f64); - exchange_rates.insert(Exchange::EUR("2024-08-01".to_string()), 4.2924f64); - exchange_rates.insert(Exchange::USD("2025-10-27".to_string()), 3.6395f64); - exchange_rates.insert(Exchange::USD("2012-11-07".to_string()), 3.2031f64); - exchange_rates.insert(Exchange::USD("2013-06-04".to_string()), 3.2524f64); - exchange_rates.insert(Exchange::USD("2023-11-24".to_string()), 4.0103f64); - exchange_rates.insert(Exchange::USD("2013-03-11".to_string()), 3.1828f64); - exchange_rates.insert(Exchange::USD("2017-11-08".to_string()), 3.6595f64); - exchange_rates.insert(Exchange::EUR("2024-11-04".to_string()), 4.3443f64); - exchange_rates.insert(Exchange::USD("2024-06-19".to_string()), 4.0387f64); - exchange_rates.insert(Exchange::USD("2023-08-16".to_string()), 4.0832f64); - exchange_rates.insert(Exchange::USD("2024-12-31".to_string()), 4.1012f64); - exchange_rates.insert(Exchange::USD("2013-01-25".to_string()), 3.1186f64); - exchange_rates.insert(Exchange::USD("2025-12-18".to_string()), 3.5893f64); - exchange_rates.insert(Exchange::USD("2023-09-04".to_string()), 4.1353f64); - exchange_rates.insert(Exchange::USD("2016-07-22".to_string()), 3.9504f64); - exchange_rates.insert(Exchange::USD("2018-05-16".to_string()), 3.6241f64); - exchange_rates.insert(Exchange::USD("2020-09-11".to_string()), 3.7534f64); - exchange_rates.insert(Exchange::USD("2021-05-05".to_string()), 3.8136f64); - exchange_rates.insert(Exchange::USD("2022-10-05".to_string()), 4.838f64); - exchange_rates.insert(Exchange::USD("2012-06-25".to_string()), 3.4105f64); - exchange_rates.insert(Exchange::EUR("2025-09-12".to_string()), 4.2593f64); - exchange_rates.insert(Exchange::USD("2025-05-21".to_string()), 3.7452f64); - exchange_rates.insert(Exchange::USD("2023-12-19".to_string()), 3.9591f64); - exchange_rates.insert(Exchange::USD("2022-03-14".to_string()), 4.3221f64); - exchange_rates.insert(Exchange::USD("2021-12-27".to_string()), 4.0889f64); - exchange_rates.insert(Exchange::USD("2012-07-19".to_string()), 3.39f64); - exchange_rates.insert(Exchange::USD("2014-08-21".to_string()), 3.1569f64); - exchange_rates.insert(Exchange::EUR("2025-08-20".to_string()), 4.2524f64); - exchange_rates.insert(Exchange::EUR("2023-01-13".to_string()), 4.6915f64); - exchange_rates.insert(Exchange::USD("2022-01-13".to_string()), 3.9463f64); - exchange_rates.insert(Exchange::USD("2022-08-19".to_string()), 4.7061f64); - exchange_rates.insert(Exchange::USD("2021-10-12".to_string()), 3.9664f64); - exchange_rates.insert(Exchange::USD("2016-08-01".to_string()), 3.904f64); - exchange_rates.insert(Exchange::USD("2014-06-03".to_string()), 3.0449f64); - exchange_rates.insert(Exchange::USD("2013-02-12".to_string()), 3.1159f64); - exchange_rates.insert(Exchange::USD("2020-07-02".to_string()), 3.9528f64); - exchange_rates.insert(Exchange::EUR("2023-02-24".to_string()), 4.7245f64); - exchange_rates.insert(Exchange::EUR("2023-05-19".to_string()), 4.5367f64); - exchange_rates.insert(Exchange::USD("2018-01-30".to_string()), 3.3442f64); - exchange_rates.insert(Exchange::USD("2023-01-16".to_string()), 4.3436f64); - exchange_rates.insert(Exchange::USD("2020-06-15".to_string()), 3.9413f64); - exchange_rates.insert(Exchange::USD("2023-05-16".to_string()), 4.1228f64); - exchange_rates.insert(Exchange::USD("2017-03-16".to_string()), 4.03f64); - exchange_rates.insert(Exchange::EUR("2024-03-14".to_string()), 4.287f64); - exchange_rates.insert(Exchange::USD("2023-04-03".to_string()), 4.3168f64); - exchange_rates.insert(Exchange::USD("2015-10-14".to_string()), 3.7129f64); - exchange_rates.insert(Exchange::USD("2014-01-23".to_string()), 3.0559f64); - exchange_rates.insert(Exchange::EUR("2025-05-22".to_string()), 4.2447f64); - exchange_rates.insert(Exchange::USD("2017-04-10".to_string()), 3.9956f64); - exchange_rates.insert(Exchange::EUR("2025-01-22".to_string()), 4.2461f64); - exchange_rates.insert(Exchange::USD("2022-02-24".to_string()), 4.1281f64); - exchange_rates.insert(Exchange::USD("2024-07-30".to_string()), 3.9567f64); - exchange_rates.insert(Exchange::USD("2021-01-12".to_string()), 3.7188f64); - exchange_rates.insert(Exchange::USD("2019-01-11".to_string()), 3.7289f64); - exchange_rates.insert(Exchange::USD("2015-08-11".to_string()), 3.8087f64); - exchange_rates.insert(Exchange::EUR("2024-02-13".to_string()), 4.3214f64); - exchange_rates.insert(Exchange::USD("2021-07-16".to_string()), 3.8808f64); - exchange_rates.insert(Exchange::USD("2014-04-30".to_string()), 3.044f64); - exchange_rates.insert(Exchange::USD("2017-06-12".to_string()), 3.735f64); - exchange_rates.insert(Exchange::USD("2019-09-13".to_string()), 3.912f64); - exchange_rates.insert(Exchange::USD("2025-01-03".to_string()), 4.1512f64); - exchange_rates.insert(Exchange::USD("2025-07-24".to_string()), 3.6158f64); - exchange_rates.insert(Exchange::USD("2012-05-30".to_string()), 3.5139f64); - exchange_rates.insert(Exchange::USD("2014-11-14".to_string()), 3.3933f64); - exchange_rates.insert(Exchange::USD("2017-01-23".to_string()), 4.076f64); - exchange_rates.insert(Exchange::USD("2014-09-18".to_string()), 3.249f64); - exchange_rates.insert(Exchange::USD("2013-10-25".to_string()), 3.0326f64); - exchange_rates.insert(Exchange::USD("2017-08-31".to_string()), 3.5822f64); - exchange_rates.insert(Exchange::USD("2023-07-03".to_string()), 4.0714f64); - exchange_rates.insert(Exchange::USD("2020-01-10".to_string()), 3.8272f64); - exchange_rates.insert(Exchange::USD("2016-02-09".to_string()), 3.9771f64); - exchange_rates.insert(Exchange::USD("2022-05-20".to_string()), 4.3832f64); - exchange_rates.insert(Exchange::EUR("2024-05-10".to_string()), 4.2979f64); - exchange_rates.insert(Exchange::USD("2025-03-25".to_string()), 3.8578f64); - exchange_rates.insert(Exchange::USD("2018-02-09".to_string()), 3.4263f64); - exchange_rates.insert(Exchange::EUR("2023-12-14".to_string()), 4.3053f64); - exchange_rates.insert(Exchange::USD("2015-11-13".to_string()), 3.9388f64); - exchange_rates.insert(Exchange::EUR("2025-09-29".to_string()), 4.2688f64); - exchange_rates.insert(Exchange::USD("2017-10-11".to_string()), 3.6219f64); - exchange_rates.insert(Exchange::USD("2016-08-24".to_string()), 3.8174f64); - exchange_rates.insert(Exchange::EUR("2024-07-09".to_string()), 4.2633f64); - exchange_rates.insert(Exchange::USD("2024-09-20".to_string()), 3.8317f64); - exchange_rates.insert(Exchange::USD("2013-11-14".to_string()), 3.115f64); - exchange_rates.insert(Exchange::USD("2023-02-24".to_string()), 4.463f64); - exchange_rates.insert(Exchange::USD("2017-05-30".to_string()), 3.7471f64); - exchange_rates.insert(Exchange::USD("2012-11-15".to_string()), 3.2678f64); - exchange_rates.insert(Exchange::USD("2015-06-18".to_string()), 3.6556f64); - exchange_rates.insert(Exchange::USD("2024-08-23".to_string()), 3.8453f64); - exchange_rates.insert(Exchange::USD("2022-04-13".to_string()), 4.2872f64); - exchange_rates.insert(Exchange::USD("2024-06-20".to_string()), 4.0345f64); - exchange_rates.insert(Exchange::USD("2022-04-12".to_string()), 4.2926f64); - exchange_rates.insert(Exchange::USD("2015-09-07".to_string()), 3.7928f64); - exchange_rates.insert(Exchange::USD("2013-12-11".to_string()), 3.0386f64); - exchange_rates.insert(Exchange::USD("2021-04-02".to_string()), 3.8986f64); - exchange_rates.insert(Exchange::USD("2013-08-12".to_string()), 3.151f64); - exchange_rates.insert(Exchange::USD("2013-10-23".to_string()), 3.0385f64); - exchange_rates.insert(Exchange::USD("2013-03-28".to_string()), 3.2773f64); - exchange_rates.insert(Exchange::EUR("2023-05-10".to_string()), 4.5488f64); - exchange_rates.insert(Exchange::EUR("2024-04-18".to_string()), 4.3309f64); - exchange_rates.insert(Exchange::USD("2020-01-15".to_string()), 3.7992f64); - exchange_rates.insert(Exchange::USD("2017-11-27".to_string()), 3.5276f64); - exchange_rates.insert(Exchange::EUR("2023-07-17".to_string()), 4.452f64); - exchange_rates.insert(Exchange::USD("2022-02-07".to_string()), 3.9872f64); - exchange_rates.insert(Exchange::USD("2014-08-14".to_string()), 3.1285f64); - exchange_rates.insert(Exchange::USD("2013-05-24".to_string()), 3.24f64); - exchange_rates.insert(Exchange::USD("2018-03-19".to_string()), 3.4341f64); - exchange_rates.insert(Exchange::USD("2025-06-11".to_string()), 3.7306f64); - exchange_rates.insert(Exchange::USD("2023-11-09".to_string()), 4.1513f64); - exchange_rates.insert(Exchange::USD("2015-05-19".to_string()), 3.6152f64); - exchange_rates.insert(Exchange::USD("2016-07-12".to_string()), 3.9807f64); - exchange_rates.insert(Exchange::USD("2014-09-16".to_string()), 3.2419f64); - exchange_rates.insert(Exchange::USD("2019-02-26".to_string()), 3.8124f64); - exchange_rates.insert(Exchange::USD("2023-09-08".to_string()), 4.2958f64); - exchange_rates.insert(Exchange::EUR("2025-12-29".to_string()), 4.2274f64); - exchange_rates.insert(Exchange::USD("2013-05-14".to_string()), 3.1998f64); - exchange_rates.insert(Exchange::USD("2013-01-02".to_string()), 3.066f64); - exchange_rates.insert(Exchange::USD("2014-07-07".to_string()), 3.0497f64); - exchange_rates.insert(Exchange::USD("2015-04-02".to_string()), 3.7524f64); - exchange_rates.insert(Exchange::EUR("2023-02-02".to_string()), 4.7079f64); - exchange_rates.insert(Exchange::USD("2015-12-30".to_string()), 3.8801f64); - exchange_rates.insert(Exchange::USD("2022-06-01".to_string()), 4.2817f64); - exchange_rates.insert(Exchange::EUR("2024-08-05".to_string()), 4.3073f64); - exchange_rates.insert(Exchange::USD("2019-02-28".to_string()), 3.7853f64); - exchange_rates.insert(Exchange::USD("2022-06-14".to_string()), 4.4478f64); - exchange_rates.insert(Exchange::USD("2016-09-22".to_string()), 3.8128f64); - exchange_rates.insert(Exchange::USD("2014-04-03".to_string()), 3.033f64); - exchange_rates.insert(Exchange::USD("2018-05-04".to_string()), 3.5754f64); - exchange_rates.insert(Exchange::USD("2024-04-05".to_string()), 3.9571f64); - exchange_rates.insert(Exchange::USD("2020-11-06".to_string()), 3.8194f64); - exchange_rates.insert(Exchange::USD("2019-01-14".to_string()), 3.7458f64); - exchange_rates.insert(Exchange::USD("2022-04-01".to_string()), 4.1978f64); - exchange_rates.insert(Exchange::USD("2020-11-18".to_string()), 3.7621f64); - exchange_rates.insert(Exchange::USD("2018-06-11".to_string()), 3.6247f64); - exchange_rates.insert(Exchange::USD("2022-07-29".to_string()), 4.6365f64); - exchange_rates.insert(Exchange::USD("2021-03-23".to_string()), 3.8746f64); - exchange_rates.insert(Exchange::USD("2022-04-07".to_string()), 4.2727f64); - exchange_rates.insert(Exchange::USD("2018-10-31".to_string()), 3.8203f64); - exchange_rates.insert(Exchange::EUR("2025-10-08".to_string()), 4.2533f64); - exchange_rates.insert(Exchange::EUR("2023-12-12".to_string()), 4.3396f64); - exchange_rates.insert(Exchange::USD("2020-12-29".to_string()), 3.6778f64); - exchange_rates.insert(Exchange::USD("2018-06-04".to_string()), 3.6665f64); - exchange_rates.insert(Exchange::USD("2025-12-16".to_string()), 3.593f64); - exchange_rates.insert(Exchange::USD("2020-03-26".to_string()), 4.1988f64); - exchange_rates.insert(Exchange::USD("2023-08-03".to_string()), 4.081f64); - exchange_rates.insert(Exchange::USD("2019-05-02".to_string()), 3.8177f64); - exchange_rates.insert(Exchange::EUR("2025-04-29".to_string()), 4.2646f64); - exchange_rates.insert(Exchange::USD("2013-08-19".to_string()), 3.1873f64); - exchange_rates.insert(Exchange::USD("2025-05-20".to_string()), 3.7747f64); - exchange_rates.insert(Exchange::USD("2024-09-30".to_string()), 3.8193f64); - exchange_rates.insert(Exchange::USD("2023-03-08".to_string()), 4.4626f64); - exchange_rates.insert(Exchange::USD("2022-01-05".to_string()), 4.0396f64); - exchange_rates.insert(Exchange::USD("2014-02-20".to_string()), 3.049f64); - exchange_rates.insert(Exchange::EUR("2024-08-02".to_string()), 4.2903f64); - exchange_rates.insert(Exchange::USD("2016-05-19".to_string()), 3.9161f64); - exchange_rates.insert(Exchange::EUR("2024-02-08".to_string()), 4.3449f64); - exchange_rates.insert(Exchange::USD("2018-04-10".to_string()), 3.4068f64); - exchange_rates.insert(Exchange::USD("2013-09-06".to_string()), 3.2732f64); - exchange_rates.insert(Exchange::USD("2012-02-03".to_string()), 3.1848f64); - exchange_rates.insert(Exchange::USD("2016-12-20".to_string()), 4.2493f64); - exchange_rates.insert(Exchange::USD("2016-02-23".to_string()), 3.9671f64); - exchange_rates.insert(Exchange::USD("2012-05-18".to_string()), 3.4431f64); - exchange_rates.insert(Exchange::USD("2017-02-13".to_string()), 4.0496f64); - exchange_rates.insert(Exchange::USD("2018-05-07".to_string()), 3.5634f64); - exchange_rates.insert(Exchange::USD("2012-01-04".to_string()), 3.432f64); - exchange_rates.insert(Exchange::USD("2017-09-13".to_string()), 3.5627f64); - exchange_rates.insert(Exchange::USD("2018-07-24".to_string()), 3.702f64); - exchange_rates.insert(Exchange::USD("2023-11-29".to_string()), 3.9478f64); - exchange_rates.insert(Exchange::EUR("2025-11-27".to_string()), 4.227f64); - exchange_rates.insert(Exchange::USD("2012-08-10".to_string()), 3.3195f64); - exchange_rates.insert(Exchange::USD("2020-03-02".to_string()), 3.9023f64); - exchange_rates.insert(Exchange::USD("2014-10-03".to_string()), 3.3079f64); - exchange_rates.insert(Exchange::EUR("2025-11-06".to_string()), 4.2566f64); - exchange_rates.insert(Exchange::USD("2016-03-21".to_string()), 3.7838f64); - exchange_rates.insert(Exchange::USD("2025-08-26".to_string()), 3.6716f64); - exchange_rates.insert(Exchange::USD("2023-09-13".to_string()), 4.3225f64); - exchange_rates.insert(Exchange::USD("2017-02-24".to_string()), 4.0681f64); - exchange_rates.insert(Exchange::USD("2015-02-26".to_string()), 3.6519f64); - exchange_rates.insert(Exchange::USD("2012-11-23".to_string()), 3.1945f64); - exchange_rates.insert(Exchange::EUR("2025-01-08".to_string()), 4.2656f64); - exchange_rates.insert(Exchange::USD("2024-05-29".to_string()), 3.9244f64); - exchange_rates.insert(Exchange::USD("2024-12-17".to_string()), 4.0623f64); - exchange_rates.insert(Exchange::USD("2022-09-30".to_string()), 4.9533f64); - exchange_rates.insert(Exchange::USD("2014-12-15".to_string()), 3.3621f64); - exchange_rates.insert(Exchange::EUR("2023-03-22".to_string()), 4.6888f64); - exchange_rates.insert(Exchange::USD("2017-02-09".to_string()), 4.0332f64); - exchange_rates.insert(Exchange::USD("2020-04-21".to_string()), 4.1779f64); - exchange_rates.insert(Exchange::USD("2016-07-29".to_string()), 3.9364f64); - exchange_rates.insert(Exchange::EUR("2024-07-26".to_string()), 4.2773f64); - exchange_rates.insert(Exchange::USD("2024-02-23".to_string()), 4.005f64); - exchange_rates.insert(Exchange::USD("2020-05-08".to_string()), 4.2065f64); - exchange_rates.insert(Exchange::USD("2024-12-30".to_string()), 4.096f64); - exchange_rates.insert(Exchange::EUR("2025-02-18".to_string()), 4.1574f64); - exchange_rates.insert(Exchange::USD("2017-07-12".to_string()), 3.7034f64); - exchange_rates.insert(Exchange::USD("2025-06-12".to_string()), 3.6929f64); - exchange_rates.insert(Exchange::USD("2024-03-21".to_string()), 3.9431f64); - exchange_rates.insert(Exchange::USD("2021-04-13".to_string()), 3.8342f64); - exchange_rates.insert(Exchange::USD("2016-11-10".to_string()), 3.9856f64); - exchange_rates.insert(Exchange::USD("2019-08-26".to_string()), 3.9335f64); - exchange_rates.insert(Exchange::USD("2013-03-01".to_string()), 3.1769f64); - exchange_rates.insert(Exchange::EUR("2023-08-23".to_string()), 4.4834f64); - exchange_rates.insert(Exchange::EUR("2024-08-19".to_string()), 4.2693f64); - exchange_rates.insert(Exchange::EUR("2025-12-11".to_string()), 4.2284f64); - exchange_rates.insert(Exchange::USD("2022-12-15".to_string()), 4.41f64); - exchange_rates.insert(Exchange::EUR("2024-11-20".to_string()), 4.3404f64); - exchange_rates.insert(Exchange::USD("2020-12-21".to_string()), 3.7082f64); - exchange_rates.insert(Exchange::USD("2016-06-03".to_string()), 3.9384f64); - exchange_rates.insert(Exchange::USD("2015-01-26".to_string()), 3.7601f64); - exchange_rates.insert(Exchange::EUR("2024-09-10".to_string()), 4.2827f64); - exchange_rates.insert(Exchange::USD("2023-02-13".to_string()), 4.4856f64); - exchange_rates.insert(Exchange::USD("2016-08-03".to_string()), 3.8516f64); - exchange_rates.insert(Exchange::USD("2023-03-23".to_string()), 4.3011f64); - exchange_rates.insert(Exchange::EUR("2025-12-30".to_string()), 4.2293f64); - exchange_rates.insert(Exchange::USD("2020-07-27".to_string()), 3.7643f64); - exchange_rates.insert(Exchange::USD("2021-05-19".to_string()), 3.7087f64); - exchange_rates.insert(Exchange::USD("2018-03-16".to_string()), 3.4214f64); - exchange_rates.insert(Exchange::EUR("2024-10-31".to_string()), 4.353f64); - exchange_rates.insert(Exchange::EUR("2025-06-04".to_string()), 4.2778f64); - exchange_rates.insert(Exchange::EUR("2024-09-25".to_string()), 4.2634f64); - exchange_rates.insert(Exchange::EUR("2023-04-27".to_string()), 4.5915f64); - exchange_rates.insert(Exchange::USD("2022-03-04".to_string()), 4.391f64); - exchange_rates.insert(Exchange::USD("2025-07-01".to_string()), 3.593f64); - exchange_rates.insert(Exchange::USD("2023-04-26".to_string()), 4.1557f64); - exchange_rates.insert(Exchange::USD("2025-12-15".to_string()), 3.5928f64); - exchange_rates.insert(Exchange::USD("2018-12-18".to_string()), 3.7668f64); - exchange_rates.insert(Exchange::USD("2025-10-21".to_string()), 3.6479f64); - exchange_rates.insert(Exchange::USD("2020-09-16".to_string()), 3.7526f64); - exchange_rates.insert(Exchange::EUR("2023-09-26".to_string()), 4.6077f64); - exchange_rates.insert(Exchange::USD("2022-09-08".to_string()), 4.7268f64); - exchange_rates.insert(Exchange::USD("2022-03-16".to_string()), 4.2828f64); - exchange_rates.insert(Exchange::USD("2016-07-11".to_string()), 4.006f64); - exchange_rates.insert(Exchange::USD("2017-09-19".to_string()), 3.5821f64); - exchange_rates.insert(Exchange::USD("2022-12-01".to_string()), 4.4911f64); - exchange_rates.insert(Exchange::EUR("2023-12-29".to_string()), 4.348f64); - exchange_rates.insert(Exchange::USD("2018-09-10".to_string()), 3.7283f64); - exchange_rates.insert(Exchange::EUR("2024-06-17".to_string()), 4.3608f64); - exchange_rates.insert(Exchange::USD("2018-05-11".to_string()), 3.5708f64); - exchange_rates.insert(Exchange::USD("2015-01-12".to_string()), 3.6218f64); - exchange_rates.insert(Exchange::USD("2013-03-25".to_string()), 3.195f64); - exchange_rates.insert(Exchange::USD("2014-10-27".to_string()), 3.3288f64); - exchange_rates.insert(Exchange::EUR("2023-06-26".to_string()), 4.4297f64); - exchange_rates.insert(Exchange::USD("2018-02-06".to_string()), 3.3498f64); - exchange_rates.insert(Exchange::USD("2018-08-13".to_string()), 3.7862f64); - exchange_rates.insert(Exchange::USD("2016-08-18".to_string()), 3.7826f64); - exchange_rates.insert(Exchange::USD("2015-01-20".to_string()), 3.7346f64); - exchange_rates.insert(Exchange::EUR("2024-07-08".to_string()), 4.278f64); - exchange_rates.insert(Exchange::USD("2023-01-30".to_string()), 4.3258f64); - exchange_rates.insert(Exchange::EUR("2024-05-21".to_string()), 4.2572f64); - exchange_rates.insert(Exchange::USD("2013-12-12".to_string()), 3.0415f64); - exchange_rates.insert(Exchange::USD("2025-02-18".to_string()), 3.9729f64); - exchange_rates.insert(Exchange::USD("2020-09-03".to_string()), 3.7337f64); - exchange_rates.insert(Exchange::USD("2019-11-08".to_string()), 3.8625f64); - exchange_rates.insert(Exchange::USD("2015-10-29".to_string()), 3.8974f64); - exchange_rates.insert(Exchange::USD("2017-11-03".to_string()), 3.6408f64); - exchange_rates.insert(Exchange::USD("2012-02-09".to_string()), 3.1487f64); - exchange_rates.insert(Exchange::USD("2017-01-02".to_string()), 4.2106f64); - exchange_rates.insert(Exchange::USD("2021-10-19".to_string()), 3.9212f64); - exchange_rates.insert(Exchange::USD("2019-09-06".to_string()), 3.9315f64); - exchange_rates.insert(Exchange::USD("2019-07-15".to_string()), 3.7856f64); - exchange_rates.insert(Exchange::USD("2017-03-31".to_string()), 3.9455f64); - exchange_rates.insert(Exchange::USD("2016-11-21".to_string()), 4.1748f64); - exchange_rates.insert(Exchange::USD("2015-11-30".to_string()), 4.0304f64); - exchange_rates.insert(Exchange::USD("2024-11-07".to_string()), 4.0414f64); - exchange_rates.insert(Exchange::USD("2022-05-09".to_string()), 4.4784f64); - exchange_rates.insert(Exchange::USD("2012-10-30".to_string()), 3.2036f64); - exchange_rates.insert(Exchange::USD("2019-11-22".to_string()), 3.8853f64); - exchange_rates.insert(Exchange::USD("2014-02-24".to_string()), 3.0255f64); - exchange_rates.insert(Exchange::USD("2018-07-25".to_string()), 3.6793f64); - exchange_rates.insert(Exchange::EUR("2025-07-17".to_string()), 4.2559f64); - exchange_rates.insert(Exchange::USD("2017-05-19".to_string()), 3.7735f64); - exchange_rates.insert(Exchange::USD("2015-08-07".to_string()), 3.8326f64); - exchange_rates.insert(Exchange::USD("2025-04-16".to_string()), 3.7851f64); - exchange_rates.insert(Exchange::USD("2021-09-13".to_string()), 3.8495f64); - exchange_rates.insert(Exchange::USD("2016-05-09".to_string()), 3.873f64); - exchange_rates.insert(Exchange::USD("2022-02-02".to_string()), 4.0283f64); - exchange_rates.insert(Exchange::USD("2022-10-26".to_string()), 4.7538f64); - exchange_rates.insert(Exchange::USD("2020-04-01".to_string()), 4.1701f64); - exchange_rates.insert(Exchange::USD("2020-09-08".to_string()), 3.7652f64); - exchange_rates.insert(Exchange::EUR("2023-03-08".to_string()), 4.7018f64); - exchange_rates.insert(Exchange::USD("2019-06-24".to_string()), 3.736f64); - exchange_rates.insert(Exchange::USD("2021-01-21".to_string()), 3.7312f64); - exchange_rates.insert(Exchange::EUR("2023-05-02".to_string()), 4.5892f64); - exchange_rates.insert(Exchange::USD("2018-01-23".to_string()), 3.4084f64); - exchange_rates.insert(Exchange::USD("2019-11-07".to_string()), 3.8502f64); - exchange_rates.insert(Exchange::EUR("2025-02-26".to_string()), 4.1394f64); - exchange_rates.insert(Exchange::USD("2019-08-05".to_string()), 3.8739f64); - exchange_rates.insert(Exchange::USD("2025-03-12".to_string()), 3.8496f64); - exchange_rates.insert(Exchange::USD("2019-05-07".to_string()), 3.8278f64); - exchange_rates.insert(Exchange::USD("2017-05-22".to_string()), 3.7526f64); - exchange_rates.insert(Exchange::USD("2020-03-04".to_string()), 3.8536f64); - exchange_rates.insert(Exchange::USD("2017-04-13".to_string()), 3.9886f64); - exchange_rates.insert(Exchange::USD("2017-01-13".to_string()), 4.1084f64); - exchange_rates.insert(Exchange::USD("2019-07-24".to_string()), 3.8229f64); - exchange_rates.insert(Exchange::USD("2017-10-17".to_string()), 3.5964f64); - exchange_rates.insert(Exchange::USD("2015-12-16".to_string()), 3.9644f64); - exchange_rates.insert(Exchange::EUR("2025-11-04".to_string()), 4.2575f64); - exchange_rates.insert(Exchange::USD("2024-08-16".to_string()), 3.8914f64); - exchange_rates.insert(Exchange::USD("2023-01-26".to_string()), 4.3354f64); - exchange_rates.insert(Exchange::USD("2019-01-07".to_string()), 3.7575f64); - exchange_rates.insert(Exchange::EUR("2023-09-05".to_string()), 4.4764f64); - exchange_rates.insert(Exchange::USD("2022-11-08".to_string()), 4.6893f64); - exchange_rates.insert(Exchange::EUR("2025-04-30".to_string()), 4.2778f64); - exchange_rates.insert(Exchange::USD("2017-10-03".to_string()), 3.6737f64); - exchange_rates.insert(Exchange::USD("2017-12-12".to_string()), 3.5708f64); - exchange_rates.insert(Exchange::USD("2020-08-11".to_string()), 3.739f64); - exchange_rates.insert(Exchange::USD("2023-03-16".to_string()), 4.4248f64); - exchange_rates.insert(Exchange::EUR("2023-06-12".to_string()), 4.4366f64); - exchange_rates.insert(Exchange::USD("2020-09-10".to_string()), 3.761f64); - exchange_rates.insert(Exchange::USD("2017-04-06".to_string()), 3.9792f64); - exchange_rates.insert(Exchange::USD("2013-12-03".to_string()), 3.0973f64); - exchange_rates.insert(Exchange::EUR("2025-06-18".to_string()), 4.2717f64); - exchange_rates.insert(Exchange::EUR("2023-01-03".to_string()), 4.68f64); - exchange_rates.insert(Exchange::USD("2020-08-03".to_string()), 3.7499f64); - exchange_rates.insert(Exchange::USD("2015-09-03".to_string()), 3.7645f64); - exchange_rates.insert(Exchange::USD("2023-07-27".to_string()), 3.9702f64); - exchange_rates.insert(Exchange::USD("2017-05-17".to_string()), 3.7808f64); - exchange_rates.insert(Exchange::USD("2015-06-30".to_string()), 3.7645f64); - exchange_rates.insert(Exchange::USD("2013-09-25".to_string()), 3.1234f64); - exchange_rates.insert(Exchange::USD("2024-10-25".to_string()), 4.0219f64); - exchange_rates.insert(Exchange::USD("2022-09-12".to_string()), 4.6225f64); - exchange_rates.insert(Exchange::USD("2017-08-30".to_string()), 3.5678f64); - exchange_rates.insert(Exchange::USD("2018-04-17".to_string()), 3.3572f64); - exchange_rates.insert(Exchange::USD("2021-02-02".to_string()), 3.7311f64); - exchange_rates.insert(Exchange::USD("2017-12-27".to_string()), 3.5253f64); - exchange_rates.insert(Exchange::USD("2012-03-15".to_string()), 3.1723f64); - exchange_rates.insert(Exchange::USD("2025-05-05".to_string()), 3.7752f64); - exchange_rates.insert(Exchange::USD("2018-05-30".to_string()), 3.72f64); - exchange_rates.insert(Exchange::USD("2019-01-17".to_string()), 3.7615f64); - exchange_rates.insert(Exchange::USD("2023-04-07".to_string()), 4.2932f64); - exchange_rates.insert(Exchange::USD("2025-04-04".to_string()), 3.856f64); - exchange_rates.insert(Exchange::USD("2017-05-15".to_string()), 3.8463f64); - exchange_rates.insert(Exchange::USD("2019-10-28".to_string()), 3.8529f64); - exchange_rates.insert(Exchange::USD("2017-08-03".to_string()), 3.5918f64); - exchange_rates.insert(Exchange::EUR("2023-06-20".to_string()), 4.4386f64); - exchange_rates.insert(Exchange::USD("2013-10-28".to_string()), 3.0271f64); - exchange_rates.insert(Exchange::EUR("2024-04-05".to_string()), 4.2883f64); - exchange_rates.insert(Exchange::USD("2018-06-01".to_string()), 3.6934f64); - exchange_rates.insert(Exchange::USD("2016-01-05".to_string()), 4.0073f64); - exchange_rates.insert(Exchange::EUR("2024-10-04".to_string()), 4.313f64); - exchange_rates.insert(Exchange::USD("2016-07-19".to_string()), 3.9582f64); - exchange_rates.insert(Exchange::USD("2017-11-16".to_string()), 3.5958f64); - exchange_rates.insert(Exchange::USD("2016-12-22".to_string()), 4.2222f64); - exchange_rates.insert(Exchange::EUR("2025-09-11".to_string()), 4.2626f64); - exchange_rates.insert(Exchange::USD("2014-02-17".to_string()), 3.025f64); - exchange_rates.insert(Exchange::USD("2025-11-17".to_string()), 3.64f64); - exchange_rates.insert(Exchange::USD("2015-05-27".to_string()), 3.7906f64); - exchange_rates.insert(Exchange::USD("2015-09-28".to_string()), 3.7861f64); - exchange_rates.insert(Exchange::USD("2013-06-21".to_string()), 3.2743f64); - exchange_rates.insert(Exchange::USD("2012-10-22".to_string()), 3.147f64); - exchange_rates.insert(Exchange::USD("2017-05-10".to_string()), 3.8777f64); - exchange_rates.insert(Exchange::USD("2016-06-08".to_string()), 3.815f64); - exchange_rates.insert(Exchange::USD("2012-11-30".to_string()), 3.1585f64); - exchange_rates.insert(Exchange::USD("2023-06-21".to_string()), 4.0648f64); - exchange_rates.insert(Exchange::USD("2025-01-24".to_string()), 4.0124f64); - exchange_rates.insert(Exchange::USD("2025-07-25".to_string()), 3.6228f64); - exchange_rates.insert(Exchange::USD("2023-01-20".to_string()), 4.352f64); - exchange_rates.insert(Exchange::USD("2021-10-22".to_string()), 3.9576f64); - exchange_rates.insert(Exchange::USD("2022-10-12".to_string()), 5.0014f64); - exchange_rates.insert(Exchange::USD("2025-03-31".to_string()), 3.8643f64); - exchange_rates.insert(Exchange::EUR("2024-10-21".to_string()), 4.3178f64); - exchange_rates.insert(Exchange::USD("2016-09-07".to_string()), 3.8515f64); - exchange_rates.insert(Exchange::USD("2021-12-31".to_string()), 4.06f64); - exchange_rates.insert(Exchange::USD("2021-11-09".to_string()), 3.9622f64); - exchange_rates.insert(Exchange::USD("2020-10-01".to_string()), 3.8513f64); - exchange_rates.insert(Exchange::USD("2014-12-11".to_string()), 3.3611f64); - exchange_rates.insert(Exchange::USD("2012-02-16".to_string()), 3.2502f64); - exchange_rates.insert(Exchange::USD("2013-07-08".to_string()), 3.3576f64); - exchange_rates.insert(Exchange::USD("2012-12-13".to_string()), 3.1333f64); - exchange_rates.insert(Exchange::USD("2012-06-18".to_string()), 3.3741f64); - exchange_rates.insert(Exchange::USD("2013-08-02".to_string()), 3.2201f64); - exchange_rates.insert(Exchange::USD("2012-04-18".to_string()), 3.1902f64); - exchange_rates.insert(Exchange::EUR("2023-09-19".to_string()), 4.6458f64); - exchange_rates.insert(Exchange::USD("2014-03-24".to_string()), 3.0483f64); - exchange_rates.insert(Exchange::USD("2024-05-28".to_string()), 3.9183f64); - exchange_rates.insert(Exchange::USD("2014-05-20".to_string()), 3.062f64); - exchange_rates.insert(Exchange::EUR("2023-11-22".to_string()), 4.3804f64); - exchange_rates.insert(Exchange::USD("2022-04-19".to_string()), 4.2887f64); - exchange_rates.insert(Exchange::EUR("2025-03-21".to_string()), 4.1979f64); - exchange_rates.insert(Exchange::USD("2023-08-18".to_string()), 4.1285f64); - exchange_rates.insert(Exchange::USD("2025-02-24".to_string()), 3.9734f64); - exchange_rates.insert(Exchange::USD("2014-03-10".to_string()), 3.0266f64); - exchange_rates.insert(Exchange::USD("2020-11-19".to_string()), 3.7872f64); - exchange_rates.insert(Exchange::USD("2012-11-16".to_string()), 3.2682f64); - exchange_rates.insert(Exchange::EUR("2023-08-07".to_string()), 4.4279f64); - exchange_rates.insert(Exchange::EUR("2025-12-01".to_string()), 4.2286f64); - exchange_rates.insert(Exchange::USD("2021-04-29".to_string()), 3.7786f64); - exchange_rates.insert(Exchange::USD("2024-01-19".to_string()), 4.0289f64); - exchange_rates.insert(Exchange::EUR("2024-03-28".to_string()), 4.3191f64); - exchange_rates.insert(Exchange::USD("2023-01-04".to_string()), 4.3998f64); - exchange_rates.insert(Exchange::USD("2017-02-15".to_string()), 4.0752f64); - exchange_rates.insert(Exchange::USD("2017-01-26".to_string()), 4.059f64); - exchange_rates.insert(Exchange::EUR("2024-09-23".to_string()), 4.2785f64); - exchange_rates.insert(Exchange::USD("2012-07-05".to_string()), 3.3743f64); - exchange_rates.insert(Exchange::USD("2018-07-17".to_string()), 3.6619f64); - exchange_rates.insert(Exchange::EUR("2025-09-15".to_string()), 4.2476f64); - exchange_rates.insert(Exchange::USD("2023-10-26".to_string()), 4.2395f64); - exchange_rates.insert(Exchange::USD("2014-07-09".to_string()), 3.0322f64); - exchange_rates.insert(Exchange::EUR("2025-05-16".to_string()), 4.2392f64); - exchange_rates.insert(Exchange::USD("2018-11-16".to_string()), 3.7876f64); - exchange_rates.insert(Exchange::USD("2018-01-04".to_string()), 3.4472f64); - exchange_rates.insert(Exchange::USD("2015-05-14".to_string()), 3.5921f64); - exchange_rates.insert(Exchange::EUR("2023-05-04".to_string()), 4.5868f64); - exchange_rates.insert(Exchange::USD("2023-09-20".to_string()), 4.3501f64); - exchange_rates.insert(Exchange::USD("2019-04-17".to_string()), 3.7778f64); - exchange_rates.insert(Exchange::USD("2013-06-13".to_string()), 3.2f64); - exchange_rates.insert(Exchange::USD("2014-12-02".to_string()), 3.3466f64); - exchange_rates.insert(Exchange::EUR("2024-12-27".to_string()), 4.2747f64); - exchange_rates.insert(Exchange::EUR("2023-07-04".to_string()), 4.4273f64); - exchange_rates.insert(Exchange::USD("2014-12-31".to_string()), 3.5072f64); - exchange_rates.insert(Exchange::USD("2015-02-06".to_string()), 3.6395f64); - exchange_rates.insert(Exchange::USD("2016-11-29".to_string()), 4.1827f64); - exchange_rates.insert(Exchange::USD("2014-01-30".to_string()), 3.1166f64); - exchange_rates.insert(Exchange::USD("2017-02-07".to_string()), 4.028f64); - exchange_rates.insert(Exchange::USD("2013-10-04".to_string()), 3.0902f64); - exchange_rates.insert(Exchange::USD("2018-07-31".to_string()), 3.6481f64); - exchange_rates.insert(Exchange::USD("2014-02-28".to_string()), 3.0254f64); - exchange_rates.insert(Exchange::USD("2024-08-28".to_string()), 3.8539f64); - exchange_rates.insert(Exchange::USD("2022-11-14".to_string()), 4.5383f64); - exchange_rates.insert(Exchange::EUR("2025-05-30".to_string()), 4.2507f64); - exchange_rates.insert(Exchange::USD("2025-03-07".to_string()), 3.8448f64); - exchange_rates.insert(Exchange::USD("2025-12-31".to_string()), 3.6016f64); - exchange_rates.insert(Exchange::USD("2024-01-29".to_string()), 4.0326f64); - exchange_rates.insert(Exchange::USD("2024-06-11".to_string()), 4.0443f64); - exchange_rates.insert(Exchange::USD("2020-07-30".to_string()), 3.7549f64); - exchange_rates.insert(Exchange::EUR("2025-10-01".to_string()), 4.2586f64); - exchange_rates.insert(Exchange::USD("2014-02-19".to_string()), 3.0286f64); - exchange_rates.insert(Exchange::USD("2019-06-27".to_string()), 3.7426f64); - exchange_rates.insert(Exchange::USD("2022-01-03".to_string()), 4.0424f64); - exchange_rates.insert(Exchange::USD("2023-10-16".to_string()), 4.2505f64); - exchange_rates.insert(Exchange::USD("2014-05-22".to_string()), 3.0525f64); - exchange_rates.insert(Exchange::USD("2025-04-07".to_string()), 3.9097f64); - exchange_rates.insert(Exchange::USD("2023-08-30".to_string()), 4.1167f64); - exchange_rates.insert(Exchange::USD("2023-11-27".to_string()), 3.9769f64); - exchange_rates.insert(Exchange::USD("2012-08-22".to_string()), 3.2639f64); - exchange_rates.insert(Exchange::USD("2023-01-03".to_string()), 4.4373f64); - exchange_rates.insert(Exchange::USD("2018-04-11".to_string()), 3.3859f64); - exchange_rates.insert(Exchange::USD("2022-08-09".to_string()), 4.5919f64); - exchange_rates.insert(Exchange::USD("2020-09-29".to_string()), 3.9228f64); - exchange_rates.insert(Exchange::USD("2014-06-11".to_string()), 3.0431f64); - exchange_rates.insert(Exchange::USD("2018-03-05".to_string()), 3.3995f64); - exchange_rates.insert(Exchange::USD("2015-09-08".to_string()), 3.7878f64); - exchange_rates.insert(Exchange::USD("2022-06-17".to_string()), 4.463f64); - exchange_rates.insert(Exchange::USD("2022-12-22".to_string()), 4.3726f64); - exchange_rates.insert(Exchange::USD("2019-09-04".to_string()), 3.9414f64); - exchange_rates.insert(Exchange::USD("2016-05-27".to_string()), 3.9393f64); - exchange_rates.insert(Exchange::EUR("2023-08-25".to_string()), 4.4674f64); - exchange_rates.insert(Exchange::USD("2019-07-02".to_string()), 3.7593f64); - exchange_rates.insert(Exchange::USD("2017-03-27".to_string()), 3.9259f64); - exchange_rates.insert(Exchange::USD("2024-03-28".to_string()), 4.0081f64); - exchange_rates.insert(Exchange::USD("2021-01-07".to_string()), 3.6656f64); - exchange_rates.insert(Exchange::EUR("2023-08-18".to_string()), 4.4869f64); - exchange_rates.insert(Exchange::USD("2024-03-06".to_string()), 3.963f64); - exchange_rates.insert(Exchange::USD("2025-04-14".to_string()), 3.7564f64); - exchange_rates.insert(Exchange::USD("2021-10-29".to_string()), 3.9664f64); - exchange_rates.insert(Exchange::USD("2021-10-13".to_string()), 3.9638f64); - exchange_rates.insert(Exchange::USD("2012-04-26".to_string()), 3.1599f64); - exchange_rates.insert(Exchange::USD("2012-10-16".to_string()), 3.1438f64); - exchange_rates.insert(Exchange::USD("2023-08-04".to_string()), 4.062f64); - exchange_rates.insert(Exchange::USD("2018-09-07".to_string()), 3.6995f64); - exchange_rates.insert(Exchange::USD("2013-09-10".to_string()), 3.2181f64); - exchange_rates.insert(Exchange::EUR("2025-12-05".to_string()), 4.2321f64); - exchange_rates.insert(Exchange::USD("2018-07-09".to_string()), 3.685f64); - exchange_rates.insert(Exchange::USD("2022-08-03".to_string()), 4.6164f64); - exchange_rates.insert(Exchange::USD("2015-01-09".to_string()), 3.6252f64); - exchange_rates.insert(Exchange::USD("2024-08-19".to_string()), 3.8682f64); - exchange_rates.insert(Exchange::USD("2015-08-24".to_string()), 3.6971f64); - exchange_rates.insert(Exchange::USD("2021-12-07".to_string()), 4.0788f64); - exchange_rates.insert(Exchange::EUR("2023-06-23".to_string()), 4.4367f64); - exchange_rates.insert(Exchange::EUR("2024-02-22".to_string()), 4.3199f64); - exchange_rates.insert(Exchange::EUR("2023-02-28".to_string()), 4.717f64); - exchange_rates.insert(Exchange::USD("2016-03-17".to_string()), 3.8037f64); - exchange_rates.insert(Exchange::USD("2023-11-30".to_string()), 3.981f64); - exchange_rates.insert(Exchange::EUR("2024-10-24".to_string()), 4.3396f64); - exchange_rates.insert(Exchange::USD("2016-06-15".to_string()), 3.9351f64); - exchange_rates.insert(Exchange::USD("2025-05-29".to_string()), 3.7588f64); - exchange_rates.insert(Exchange::USD("2012-01-30".to_string()), 3.2433f64); - exchange_rates.insert(Exchange::EUR("2024-07-29".to_string()), 4.2847f64); - exchange_rates.insert(Exchange::USD("2025-01-09".to_string()), 4.1523f64); - exchange_rates.insert(Exchange::USD("2020-04-29".to_string()), 4.1807f64); - exchange_rates.insert(Exchange::USD("2019-04-26".to_string()), 3.8508f64); - exchange_rates.insert(Exchange::USD("2013-08-27".to_string()), 3.1849f64); - exchange_rates.insert(Exchange::USD("2022-03-23".to_string()), 4.2772f64); - exchange_rates.insert(Exchange::USD("2014-12-23".to_string()), 3.4937f64); - exchange_rates.insert(Exchange::EUR("2024-10-11".to_string()), 4.2926f64); - exchange_rates.insert(Exchange::USD("2015-03-17".to_string()), 3.9034f64); - exchange_rates.insert(Exchange::EUR("2023-10-02".to_string()), 4.6091f64); - exchange_rates.insert(Exchange::USD("2024-06-25".to_string()), 3.9975f64); - exchange_rates.insert(Exchange::USD("2019-05-17".to_string()), 3.8545f64); - exchange_rates.insert(Exchange::USD("2021-02-26".to_string()), 3.7247f64); - exchange_rates.insert(Exchange::USD("2023-06-22".to_string()), 4.033f64); - exchange_rates.insert(Exchange::EUR("2024-06-05".to_string()), 4.3081f64); - exchange_rates.insert(Exchange::USD("2017-09-08".to_string()), 3.5239f64); - exchange_rates.insert(Exchange::USD("2024-12-09".to_string()), 4.0298f64); - exchange_rates.insert(Exchange::USD("2018-06-20".to_string()), 3.7352f64); - exchange_rates.insert(Exchange::USD("2017-09-27".to_string()), 3.665f64); - exchange_rates.insert(Exchange::USD("2021-10-05".to_string()), 3.9688f64); - exchange_rates.insert(Exchange::USD("2019-01-03".to_string()), 3.7827f64); - exchange_rates.insert(Exchange::USD("2017-07-21".to_string()), 3.632f64); - exchange_rates.insert(Exchange::USD("2025-06-18".to_string()), 3.7137f64); - exchange_rates.insert(Exchange::USD("2017-08-04".to_string()), 3.5702f64); - exchange_rates.insert(Exchange::USD("2014-03-25".to_string()), 3.0342f64); - exchange_rates.insert(Exchange::USD("2014-10-08".to_string()), 3.305f64); - exchange_rates.insert(Exchange::USD("2013-03-14".to_string()), 3.2f64); - exchange_rates.insert(Exchange::USD("2013-04-26".to_string()), 3.1943f64); - exchange_rates.insert(Exchange::USD("2013-09-24".to_string()), 3.1338f64); - exchange_rates.insert(Exchange::USD("2012-08-07".to_string()), 3.2606f64); - exchange_rates.insert(Exchange::USD("2020-02-14".to_string()), 3.9098f64); - exchange_rates.insert(Exchange::USD("2025-05-08".to_string()), 3.784f64); - exchange_rates.insert(Exchange::USD("2015-06-03".to_string()), 3.7108f64); - exchange_rates.insert(Exchange::EUR("2024-09-06".to_string()), 4.279f64); - exchange_rates.insert(Exchange::USD("2014-10-06".to_string()), 3.3343f64); - exchange_rates.insert(Exchange::USD("2012-12-20".to_string()), 3.0769f64); - exchange_rates.insert(Exchange::USD("2020-12-02".to_string()), 3.7038f64); - exchange_rates.insert(Exchange::USD("2017-03-24".to_string()), 3.9481f64); - exchange_rates.insert(Exchange::USD("2016-11-25".to_string()), 4.1628f64); - exchange_rates.insert(Exchange::USD("2025-04-30".to_string()), 3.7617f64); - exchange_rates.insert(Exchange::USD("2021-07-01".to_string()), 3.8149f64); - exchange_rates.insert(Exchange::USD("2012-06-19".to_string()), 3.3916f64); - exchange_rates.insert(Exchange::USD("2023-08-31".to_string()), 4.1074f64); - exchange_rates.insert(Exchange::USD("2017-09-26".to_string()), 3.6234f64); - exchange_rates.insert(Exchange::USD("2014-06-25".to_string()), 3.0451f64); - exchange_rates.insert(Exchange::USD("2012-10-15".to_string()), 3.1565f64); - exchange_rates.insert(Exchange::EUR("2025-04-15".to_string()), 4.2767f64); - exchange_rates.insert(Exchange::USD("2017-06-13".to_string()), 3.7379f64); - exchange_rates.insert(Exchange::USD("2020-02-03".to_string()), 3.8864f64); - exchange_rates.insert(Exchange::USD("2012-07-12".to_string()), 3.4383f64); - exchange_rates.insert(Exchange::USD("2012-12-05".to_string()), 3.1516f64); - exchange_rates.insert(Exchange::EUR("2025-08-06".to_string()), 4.282f64); - exchange_rates.insert(Exchange::USD("2016-05-24".to_string()), 3.9789f64); - exchange_rates.insert(Exchange::USD("2020-11-03".to_string()), 3.9069f64); - exchange_rates.insert(Exchange::USD("2014-07-14".to_string()), 3.0368f64); - exchange_rates.insert(Exchange::EUR("2025-11-14".to_string()), 4.2274f64); - exchange_rates.insert(Exchange::USD("2024-09-26".to_string()), 3.8294f64); - exchange_rates.insert(Exchange::USD("2022-09-20".to_string()), 4.7118f64); - exchange_rates.insert(Exchange::USD("2014-10-01".to_string()), 3.3172f64); - exchange_rates.insert(Exchange::EUR("2023-12-18".to_string()), 4.3269f64); - exchange_rates.insert(Exchange::EUR("2023-12-21".to_string()), 4.3387f64); - exchange_rates.insert(Exchange::USD("2016-03-03".to_string()), 3.9805f64); - exchange_rates.insert(Exchange::USD("2015-06-08".to_string()), 3.7381f64); - exchange_rates.insert(Exchange::USD("2019-10-09".to_string()), 3.9382f64); - exchange_rates.insert(Exchange::USD("2020-06-30".to_string()), 3.9806f64); - exchange_rates.insert(Exchange::EUR("2025-03-26".to_string()), 4.1686f64); - exchange_rates.insert(Exchange::USD("2014-11-10".to_string()), 3.3765f64); - exchange_rates.insert(Exchange::USD("2024-04-18".to_string()), 4.0559f64); - exchange_rates.insert(Exchange::USD("2018-01-31".to_string()), 3.3318f64); - exchange_rates.insert(Exchange::USD("2023-04-05".to_string()), 4.2739f64); - exchange_rates.insert(Exchange::USD("2015-04-20".to_string()), 3.7302f64); - exchange_rates.insert(Exchange::USD("2023-05-02".to_string()), 4.1823f64); - exchange_rates.insert(Exchange::USD("2013-01-22".to_string()), 3.1341f64); - exchange_rates.insert(Exchange::USD("2020-04-14".to_string()), 4.1666f64); - exchange_rates.insert(Exchange::USD("2013-10-21".to_string()), 3.062f64); - exchange_rates.insert(Exchange::EUR("2023-07-20".to_string()), 4.4511f64); - exchange_rates.insert(Exchange::USD("2023-05-18".to_string()), 4.1929f64); - exchange_rates.insert(Exchange::USD("2023-08-29".to_string()), 4.1341f64); - exchange_rates.insert(Exchange::USD("2018-03-30".to_string()), 3.4139f64); - exchange_rates.insert(Exchange::USD("2012-09-18".to_string()), 3.1509f64); - exchange_rates.insert(Exchange::USD("2014-01-07".to_string()), 3.0688f64); - exchange_rates.insert(Exchange::USD("2022-05-31".to_string()), 4.2651f64); - exchange_rates.insert(Exchange::USD("2020-02-10".to_string()), 3.8996f64); - exchange_rates.insert(Exchange::USD("2022-12-19".to_string()), 4.4153f64); - exchange_rates.insert(Exchange::EUR("2023-12-08".to_string()), 4.3303f64); - exchange_rates.insert(Exchange::USD("2022-05-30".to_string()), 4.2617f64); - exchange_rates.insert(Exchange::USD("2021-04-14".to_string()), 3.8065f64); - exchange_rates.insert(Exchange::USD("2018-01-25".to_string()), 3.3376f64); - exchange_rates.insert(Exchange::USD("2012-01-10".to_string()), 3.5083f64); - exchange_rates.insert(Exchange::USD("2018-02-27".to_string()), 3.3816f64); - exchange_rates.insert(Exchange::USD("2016-08-31".to_string()), 3.9082f64); - exchange_rates.insert(Exchange::USD("2015-08-27".to_string()), 3.745f64); - exchange_rates.insert(Exchange::USD("2025-08-19".to_string()), 3.6332f64); - exchange_rates.insert(Exchange::USD("2022-07-28".to_string()), 4.6952f64); - exchange_rates.insert(Exchange::USD("2019-09-02".to_string()), 3.9819f64); - exchange_rates.insert(Exchange::USD("2018-05-25".to_string()), 3.6686f64); - exchange_rates.insert(Exchange::USD("2024-04-08".to_string()), 3.9546f64); - exchange_rates.insert(Exchange::USD("2023-10-31".to_string()), 4.1684f64); - exchange_rates.insert(Exchange::USD("2019-05-13".to_string()), 3.8321f64); - exchange_rates.insert(Exchange::USD("2017-11-30".to_string()), 3.5543f64); - exchange_rates.insert(Exchange::USD("2018-04-27".to_string()), 3.5003f64); - exchange_rates.insert(Exchange::USD("2014-06-16".to_string()), 3.0654f64); - exchange_rates.insert(Exchange::USD("2016-08-02".to_string()), 3.882f64); - exchange_rates.insert(Exchange::USD("2012-07-20".to_string()), 3.3961f64); - exchange_rates.insert(Exchange::USD("2020-03-18".to_string()), 4.0749f64); - exchange_rates.insert(Exchange::USD("2014-08-29".to_string()), 3.1965f64); - exchange_rates.insert(Exchange::USD("2021-10-06".to_string()), 3.9992f64); - exchange_rates.insert(Exchange::USD("2021-11-23".to_string()), 4.1893f64); - exchange_rates.insert(Exchange::EUR("2024-08-12".to_string()), 4.3123f64); - exchange_rates.insert(Exchange::USD("2018-09-28".to_string()), 3.6754f64); - exchange_rates.insert(Exchange::USD("2012-01-19".to_string()), 3.3678f64); - exchange_rates.insert(Exchange::USD("2019-09-12".to_string()), 3.9362f64); - exchange_rates.insert(Exchange::USD("2014-10-14".to_string()), 3.3095f64); - exchange_rates.insert(Exchange::EUR("2025-04-01".to_string()), 4.1818f64); - exchange_rates.insert(Exchange::USD("2018-09-06".to_string()), 3.7143f64); - exchange_rates.insert(Exchange::USD("2020-05-06".to_string()), 4.2022f64); - exchange_rates.insert(Exchange::USD("2022-11-22".to_string()), 4.5844f64); - exchange_rates.insert(Exchange::USD("2012-02-08".to_string()), 3.1461f64); - exchange_rates.insert(Exchange::USD("2013-08-29".to_string()), 3.2269f64); - exchange_rates.insert(Exchange::EUR("2023-12-04".to_string()), 4.3337f64); - exchange_rates.insert(Exchange::USD("2019-04-12".to_string()), 3.7899f64); - exchange_rates.insert(Exchange::EUR("2024-09-27".to_string()), 4.2761f64); - exchange_rates.insert(Exchange::USD("2016-01-29".to_string()), 4.0723f64); - exchange_rates.insert(Exchange::USD("2013-07-30".to_string()), 3.1798f64); - exchange_rates.insert(Exchange::USD("2014-10-24".to_string()), 3.3387f64); - exchange_rates.insert(Exchange::USD("2015-01-07".to_string()), 3.6375f64); - exchange_rates.insert(Exchange::USD("2012-06-20".to_string()), 3.3471f64); - exchange_rates.insert(Exchange::USD("2018-04-03".to_string()), 3.4177f64); - exchange_rates.insert(Exchange::USD("2014-01-15".to_string()), 3.0495f64); - exchange_rates.insert(Exchange::USD("2018-05-14".to_string()), 3.5558f64); - exchange_rates.insert(Exchange::EUR("2025-02-05".to_string()), 4.2059f64); - exchange_rates.insert(Exchange::USD("2023-10-17".to_string()), 4.2131f64); - exchange_rates.insert(Exchange::USD("2021-12-21".to_string()), 4.0937f64); - exchange_rates.insert(Exchange::USD("2020-08-20".to_string()), 3.7164f64); - exchange_rates.insert(Exchange::USD("2022-04-08".to_string()), 4.2703f64); - exchange_rates.insert(Exchange::USD("2017-05-09".to_string()), 3.8741f64); - exchange_rates.insert(Exchange::USD("2016-07-28".to_string()), 3.9389f64); - exchange_rates.insert(Exchange::USD("2013-09-09".to_string()), 3.2357f64); - exchange_rates.insert(Exchange::USD("2024-06-03".to_string()), 3.9501f64); - exchange_rates.insert(Exchange::USD("2025-07-28".to_string()), 3.6446f64); - exchange_rates.insert(Exchange::EUR("2025-08-27".to_string()), 4.2639f64); - exchange_rates.insert(Exchange::USD("2016-07-21".to_string()), 3.9685f64); - exchange_rates.insert(Exchange::USD("2012-04-25".to_string()), 3.1675f64); - exchange_rates.insert(Exchange::USD("2025-11-04".to_string()), 3.7019f64); - exchange_rates.insert(Exchange::USD("2024-07-04".to_string()), 3.9784f64); - exchange_rates.insert(Exchange::EUR("2023-05-22".to_string()), 4.5269f64); - exchange_rates.insert(Exchange::USD("2021-04-09".to_string()), 3.8208f64); - exchange_rates.insert(Exchange::USD("2021-07-22".to_string()), 3.8801f64); - exchange_rates.insert(Exchange::USD("2023-07-12".to_string()), 4.0347f64); - exchange_rates.insert(Exchange::USD("2024-11-06".to_string()), 4.0595f64); - exchange_rates.insert(Exchange::USD("2013-10-30".to_string()), 3.0433f64); - exchange_rates.insert(Exchange::EUR("2023-07-03".to_string()), 4.4321f64); - exchange_rates.insert(Exchange::USD("2018-11-15".to_string()), 3.8074f64); - exchange_rates.insert(Exchange::EUR("2025-04-03".to_string()), 4.1791f64); - exchange_rates.insert(Exchange::USD("2019-02-08".to_string()), 3.804f64); - exchange_rates.insert(Exchange::USD("2025-07-07".to_string()), 3.6269f64); - exchange_rates.insert(Exchange::USD("2016-04-13".to_string()), 3.7771f64); - exchange_rates.insert(Exchange::USD("2015-04-17".to_string()), 3.7277f64); - exchange_rates.insert(Exchange::EUR("2024-09-24".to_string()), 4.2668f64); - exchange_rates.insert(Exchange::USD("2013-10-15".to_string()), 3.0893f64); - exchange_rates.insert(Exchange::USD("2020-02-21".to_string()), 3.9623f64); - exchange_rates.insert(Exchange::USD("2012-02-23".to_string()), 3.138f64); - exchange_rates.insert(Exchange::USD("2019-12-30".to_string()), 3.8027f64); - exchange_rates.insert(Exchange::USD("2013-10-18".to_string()), 3.0506f64); - exchange_rates.insert(Exchange::USD("2014-10-22".to_string()), 3.3275f64); - exchange_rates.insert(Exchange::EUR("2025-01-10".to_string()), 4.2657f64); - exchange_rates.insert(Exchange::USD("2015-02-19".to_string()), 3.6631f64); - exchange_rates.insert(Exchange::USD("2016-01-14".to_string()), 3.999f64); - exchange_rates.insert(Exchange::EUR("2025-06-10".to_string()), 4.2611f64); - exchange_rates.insert(Exchange::USD("2020-06-19".to_string()), 3.9741f64); - exchange_rates.insert(Exchange::USD("2017-02-03".to_string()), 4.0014f64); - exchange_rates.insert(Exchange::USD("2012-12-19".to_string()), 3.069f64); - exchange_rates.insert(Exchange::USD("2014-08-18".to_string()), 3.1342f64); - exchange_rates.insert(Exchange::USD("2023-03-13".to_string()), 4.3906f64); - exchange_rates.insert(Exchange::USD("2015-10-20".to_string()), 3.7385f64); - exchange_rates.insert(Exchange::USD("2016-12-09".to_string()), 4.1772f64); - exchange_rates.insert(Exchange::USD("2025-01-08".to_string()), 4.1335f64); - exchange_rates.insert(Exchange::USD("2022-11-09".to_string()), 4.6817f64); - exchange_rates.insert(Exchange::EUR("2025-12-04".to_string()), 4.2299f64); - exchange_rates.insert(Exchange::USD("2012-07-30".to_string()), 3.378f64); - exchange_rates.insert(Exchange::USD("2013-02-18".to_string()), 3.141f64); - exchange_rates.insert(Exchange::USD("2025-05-14".to_string()), 3.7775f64); - exchange_rates.insert(Exchange::USD("2023-06-30".to_string()), 4.1066f64); - exchange_rates.insert(Exchange::USD("2021-02-19".to_string()), 3.6997f64); - exchange_rates.insert(Exchange::USD("2017-09-06".to_string()), 3.5538f64); - exchange_rates.insert(Exchange::USD("2015-08-12".to_string()), 3.7805f64); - exchange_rates.insert(Exchange::USD("2025-11-20".to_string()), 3.6684f64); - exchange_rates.insert(Exchange::USD("2024-08-22".to_string()), 3.8456f64); - exchange_rates.insert(Exchange::USD("2018-03-13".to_string()), 3.4143f64); - exchange_rates.insert(Exchange::USD("2016-09-27".to_string()), 3.8227f64); - exchange_rates.insert(Exchange::EUR("2023-11-28".to_string()), 4.3542f64); - exchange_rates.insert(Exchange::USD("2025-08-06".to_string()), 3.6994f64); - exchange_rates.insert(Exchange::USD("2021-06-01".to_string()), 3.659f64); - exchange_rates.insert(Exchange::USD("2024-11-28".to_string()), 4.0907f64); - exchange_rates.insert(Exchange::EUR("2024-02-09".to_string()), 4.3167f64); - exchange_rates.insert(Exchange::USD("2024-09-18".to_string()), 3.8358f64); - exchange_rates.insert(Exchange::USD("2019-02-13".to_string()), 3.8261f64); - exchange_rates.insert(Exchange::USD("2021-07-19".to_string()), 3.8968f64); - exchange_rates.insert(Exchange::USD("2025-05-09".to_string()), 3.7681f64); - exchange_rates.insert(Exchange::USD("2023-11-10".to_string()), 4.1423f64); - exchange_rates.insert(Exchange::USD("2024-08-02".to_string()), 3.9672f64); - exchange_rates.insert(Exchange::USD("2015-08-06".to_string()), 3.8385f64); - exchange_rates.insert(Exchange::EUR("2024-11-19".to_string()), 4.3308f64); - exchange_rates.insert(Exchange::USD("2021-01-13".to_string()), 3.7142f64); - exchange_rates.insert(Exchange::USD("2019-09-20".to_string()), 3.9319f64); - exchange_rates.insert(Exchange::USD("2013-10-31".to_string()), 3.0507f64); - exchange_rates.insert(Exchange::USD("2013-04-02".to_string()), 3.2552f64); - exchange_rates.insert(Exchange::USD("2021-03-31".to_string()), 3.9676f64); - exchange_rates.insert(Exchange::USD("2020-11-02".to_string()), 3.9557f64); - exchange_rates.insert(Exchange::EUR("2024-07-04".to_string()), 4.2975f64); - exchange_rates.insert(Exchange::USD("2020-02-25".to_string()), 3.9624f64); - exchange_rates.insert(Exchange::EUR("2024-03-29".to_string()), 4.3009f64); - exchange_rates.insert(Exchange::EUR("2024-10-09".to_string()), 4.3026f64); - exchange_rates.insert(Exchange::USD("2018-01-09".to_string()), 3.4992f64); - exchange_rates.insert(Exchange::USD("2018-09-25".to_string()), 3.6511f64); - exchange_rates.insert(Exchange::USD("2013-01-10".to_string()), 3.1121f64); - exchange_rates.insert(Exchange::EUR("2024-11-26".to_string()), 4.3157f64); - exchange_rates.insert(Exchange::USD("2017-06-07".to_string()), 3.7241f64); - exchange_rates.insert(Exchange::EUR("2024-06-18".to_string()), 4.3468f64); - exchange_rates.insert(Exchange::USD("2025-12-05".to_string()), 3.6313f64); - exchange_rates.insert(Exchange::USD("2017-01-17".to_string()), 4.0989f64); - exchange_rates.insert(Exchange::USD("2018-04-24".to_string()), 3.4401f64); - exchange_rates.insert(Exchange::USD("2012-01-02".to_string()), 3.4454f64); - exchange_rates.insert(Exchange::EUR("2023-03-21".to_string()), 4.6981f64); - exchange_rates.insert(Exchange::EUR("2025-05-06".to_string()), 4.2806f64); - exchange_rates.insert(Exchange::USD("2020-12-09".to_string()), 3.6657f64); - exchange_rates.insert(Exchange::USD("2020-01-28".to_string()), 3.8844f64); - exchange_rates.insert(Exchange::USD("2022-09-27".to_string()), 4.9476f64); - exchange_rates.insert(Exchange::USD("2016-04-27".to_string()), 3.8793f64); - exchange_rates.insert(Exchange::USD("2014-04-15".to_string()), 3.0325f64); - exchange_rates.insert(Exchange::USD("2020-05-04".to_string()), 4.1646f64); - exchange_rates.insert(Exchange::EUR("2024-06-24".to_string()), 4.3198f64); - exchange_rates.insert(Exchange::USD("2024-01-31".to_string()), 4.0135f64); - exchange_rates.insert(Exchange::USD("2014-09-11".to_string()), 3.2435f64); - exchange_rates.insert(Exchange::EUR("2025-05-27".to_string()), 4.2479f64); - exchange_rates.insert(Exchange::USD("2014-12-24".to_string()), 3.529f64); - exchange_rates.insert(Exchange::USD("2012-05-21".to_string()), 3.3928f64); - exchange_rates.insert(Exchange::USD("2019-07-11".to_string()), 3.7859f64); - exchange_rates.insert(Exchange::USD("2023-04-24".to_string()), 4.1905f64); - exchange_rates.insert(Exchange::USD("2023-01-17".to_string()), 4.3398f64); - exchange_rates.insert(Exchange::EUR("2025-07-15".to_string()), 4.2538f64); - exchange_rates.insert(Exchange::USD("2021-12-23".to_string()), 4.095f64); - exchange_rates.insert(Exchange::EUR("2023-06-22".to_string()), 4.4335f64); - exchange_rates.insert(Exchange::USD("2023-09-15".to_string()), 4.3418f64); - exchange_rates.insert(Exchange::EUR("2023-09-20".to_string()), 4.6529f64); - exchange_rates.insert(Exchange::USD("2021-04-30".to_string()), 3.7746f64); - exchange_rates.insert(Exchange::EUR("2024-01-19".to_string()), 4.3846f64); - exchange_rates.insert(Exchange::USD("2020-10-12".to_string()), 3.7927f64); - exchange_rates.insert(Exchange::EUR("2025-03-12".to_string()), 4.2017f64); - exchange_rates.insert(Exchange::USD("2025-03-21".to_string()), 3.8774f64); - exchange_rates.insert(Exchange::USD("2024-04-15".to_string()), 4.0209f64); - exchange_rates.insert(Exchange::USD("2021-04-06".to_string()), 3.8973f64); - exchange_rates.insert(Exchange::USD("2022-06-02".to_string()), 4.2931f64); - exchange_rates.insert(Exchange::USD("2013-09-11".to_string()), 3.1955f64); - exchange_rates.insert(Exchange::USD("2023-12-04".to_string()), 3.985f64); - exchange_rates.insert(Exchange::USD("2017-09-18".to_string()), 3.5881f64); - exchange_rates.insert(Exchange::USD("2023-08-28".to_string()), 4.14f64); - exchange_rates.insert(Exchange::USD("2014-08-04".to_string()), 3.1114f64); - exchange_rates.insert(Exchange::USD("2015-10-12".to_string()), 3.7148f64); - exchange_rates.insert(Exchange::USD("2017-07-19".to_string()), 3.6486f64); - exchange_rates.insert(Exchange::USD("2024-05-16".to_string()), 3.9195f64); - exchange_rates.insert(Exchange::USD("2015-03-25".to_string()), 3.7355f64); - exchange_rates.insert(Exchange::USD("2020-02-26".to_string()), 3.9573f64); - exchange_rates.insert(Exchange::USD("2019-08-13".to_string()), 3.8714f64); - exchange_rates.insert(Exchange::USD("2015-05-22".to_string()), 3.669f64); - exchange_rates.insert(Exchange::USD("2013-06-07".to_string()), 3.2545f64); - exchange_rates.insert(Exchange::USD("2021-02-18".to_string()), 3.7152f64); - exchange_rates.insert(Exchange::EUR("2024-10-03".to_string()), 4.299f64); - exchange_rates.insert(Exchange::USD("2025-12-11".to_string()), 3.6132f64); - exchange_rates.insert(Exchange::EUR("2023-09-01".to_string()), 4.4762f64); - exchange_rates.insert(Exchange::USD("2025-02-14".to_string()), 3.972f64); - exchange_rates.insert(Exchange::USD("2012-04-27".to_string()), 3.1666f64); - exchange_rates.insert(Exchange::EUR("2023-01-18".to_string()), 4.7091f64); - exchange_rates.insert(Exchange::USD("2013-08-20".to_string()), 3.1761f64); - exchange_rates.insert(Exchange::USD("2015-12-03".to_string()), 4.04f64); - exchange_rates.insert(Exchange::USD("2013-12-05".to_string()), 3.087f64); - exchange_rates.insert(Exchange::USD("2021-03-02".to_string()), 3.7765f64); - exchange_rates.insert(Exchange::USD("2016-04-21".to_string()), 3.7981f64); - exchange_rates.insert(Exchange::USD("2025-02-07".to_string()), 4.0321f64); - exchange_rates.insert(Exchange::USD("2024-02-01".to_string()), 4.0047f64); - exchange_rates.insert(Exchange::USD("2013-08-06".to_string()), 3.1744f64); - exchange_rates.insert(Exchange::USD("2020-05-26".to_string()), 4.0885f64); - exchange_rates.insert(Exchange::EUR("2025-02-20".to_string()), 4.1723f64); - exchange_rates.insert(Exchange::USD("2020-06-03".to_string()), 3.9121f64); - exchange_rates.insert(Exchange::USD("2024-05-14".to_string()), 3.9701f64); - exchange_rates.insert(Exchange::USD("2024-06-21".to_string()), 4.0527f64); - exchange_rates.insert(Exchange::USD("2019-09-05".to_string()), 3.933f64); - exchange_rates.insert(Exchange::USD("2017-09-05".to_string()), 3.5642f64); - exchange_rates.insert(Exchange::USD("2015-10-23".to_string()), 3.82f64); - exchange_rates.insert(Exchange::USD("2025-11-03".to_string()), 3.6933f64); - exchange_rates.insert(Exchange::USD("2022-11-03".to_string()), 4.8291f64); - exchange_rates.insert(Exchange::USD("2014-09-10".to_string()), 3.2508f64); - exchange_rates.insert(Exchange::USD("2019-06-04".to_string()), 3.8041f64); - exchange_rates.insert(Exchange::EUR("2025-05-20".to_string()), 4.2497f64); - exchange_rates.insert(Exchange::USD("2025-05-15".to_string()), 3.7804f64); - exchange_rates.insert(Exchange::USD("2022-07-08".to_string()), 4.7417f64); - exchange_rates.insert(Exchange::EUR("2023-10-09".to_string()), 4.5793f64); - exchange_rates.insert(Exchange::USD("2023-11-06".to_string()), 4.1512f64); - exchange_rates.insert(Exchange::USD("2020-04-28".to_string()), 4.184f64); - exchange_rates.insert(Exchange::USD("2023-07-05".to_string()), 4.0869f64); - exchange_rates.insert(Exchange::USD("2014-08-01".to_string()), 3.128f64); - exchange_rates.insert(Exchange::USD("2018-07-13".to_string()), 3.7244f64); - exchange_rates.insert(Exchange::USD("2013-01-24".to_string()), 3.1503f64); - exchange_rates.insert(Exchange::USD("2025-08-05".to_string()), 3.7066f64); - exchange_rates.insert(Exchange::USD("2021-09-29".to_string()), 3.9684f64); - exchange_rates.insert(Exchange::USD("2016-10-21".to_string()), 3.98f64); - exchange_rates.insert(Exchange::USD("2020-04-10".to_string()), 4.1566f64); - exchange_rates.insert(Exchange::USD("2025-09-08".to_string()), 3.6214f64); - exchange_rates.insert(Exchange::USD("2019-04-09".to_string()), 3.8003f64); - exchange_rates.insert(Exchange::USD("2015-10-21".to_string()), 3.7627f64); - exchange_rates.insert(Exchange::EUR("2024-12-11".to_string()), 4.2661f64); - exchange_rates.insert(Exchange::USD("2020-11-27".to_string()), 3.7614f64); - exchange_rates.insert(Exchange::USD("2018-03-06".to_string()), 3.3936f64); - exchange_rates.insert(Exchange::USD("2020-12-17".to_string()), 3.6254f64); - exchange_rates.insert(Exchange::USD("2016-10-18".to_string()), 3.9148f64); - exchange_rates.insert(Exchange::EUR("2023-09-18".to_string()), 4.6377f64); - exchange_rates.insert(Exchange::USD("2013-01-08".to_string()), 3.1457f64); - exchange_rates.insert(Exchange::EUR("2023-01-27".to_string()), 4.7076f64); - exchange_rates.insert(Exchange::USD("2025-05-27".to_string()), 3.743f64); - exchange_rates.insert(Exchange::USD("2022-12-16".to_string()), 4.4227f64); - exchange_rates.insert(Exchange::USD("2018-03-23".to_string()), 3.4319f64); - exchange_rates.insert(Exchange::USD("2018-02-13".to_string()), 3.3916f64); - exchange_rates.insert(Exchange::USD("2024-03-11".to_string()), 3.9262f64); - exchange_rates.insert(Exchange::USD("2022-01-28".to_string()), 4.1048f64); - exchange_rates.insert(Exchange::USD("2016-05-13".to_string()), 3.8775f64); - exchange_rates.insert(Exchange::USD("2020-12-16".to_string()), 3.6334f64); - exchange_rates.insert(Exchange::EUR("2025-05-13".to_string()), 4.2525f64); - exchange_rates.insert(Exchange::USD("2021-05-31".to_string()), 3.6724f64); - exchange_rates.insert(Exchange::USD("2025-04-01".to_string()), 3.8656f64); - exchange_rates.insert(Exchange::USD("2022-07-01".to_string()), 4.5106f64); - exchange_rates.insert(Exchange::USD("2025-01-20".to_string()), 4.1321f64); - exchange_rates.insert(Exchange::USD("2019-09-27".to_string()), 4.0154f64); - exchange_rates.insert(Exchange::EUR("2023-10-06".to_string()), 4.5998f64); - exchange_rates.insert(Exchange::USD("2014-04-25".to_string()), 3.0378f64); - exchange_rates.insert(Exchange::USD("2022-07-12".to_string()), 4.8284f64); - exchange_rates.insert(Exchange::EUR("2024-10-08".to_string()), 4.3203f64); - exchange_rates.insert(Exchange::USD("2016-02-18".to_string()), 3.9416f64); - exchange_rates.insert(Exchange::USD("2016-10-04".to_string()), 3.8472f64); - exchange_rates.insert(Exchange::USD("2016-10-14".to_string()), 3.8965f64); - exchange_rates.insert(Exchange::USD("2015-08-28".to_string()), 3.7493f64); - exchange_rates.insert(Exchange::EUR("2025-08-28".to_string()), 4.2681f64); - exchange_rates.insert(Exchange::USD("2023-05-30".to_string()), 4.2242f64); - exchange_rates.insert(Exchange::USD("2018-06-19".to_string()), 3.7316f64); - exchange_rates.insert(Exchange::USD("2022-12-09".to_string()), 4.4351f64); - exchange_rates.insert(Exchange::USD("2013-11-04".to_string()), 3.0975f64); - exchange_rates.insert(Exchange::EUR("2024-02-16".to_string()), 4.3414f64); - exchange_rates.insert(Exchange::EUR("2024-11-14".to_string()), 4.3365f64); - exchange_rates.insert(Exchange::USD("2025-05-07".to_string()), 3.7642f64); - exchange_rates.insert(Exchange::EUR("2025-07-30".to_string()), 4.2732f64); - exchange_rates.insert(Exchange::USD("2018-02-14".to_string()), 3.3769f64); - exchange_rates.insert(Exchange::USD("2021-08-27".to_string()), 3.8978f64); - exchange_rates.insert(Exchange::USD("2022-05-13".to_string()), 4.4849f64); - exchange_rates.insert(Exchange::USD("2016-10-11".to_string()), 3.8487f64); - exchange_rates.insert(Exchange::USD("2012-05-25".to_string()), 3.4589f64); - exchange_rates.insert(Exchange::USD("2018-10-24".to_string()), 3.7698f64); - exchange_rates.insert(Exchange::USD("2019-10-11".to_string()), 3.9145f64); - exchange_rates.insert(Exchange::USD("2017-11-06".to_string()), 3.6585f64); - exchange_rates.insert(Exchange::USD("2024-08-27".to_string()), 3.8331f64); - exchange_rates.insert(Exchange::USD("2022-10-27".to_string()), 4.7216f64); - exchange_rates.insert(Exchange::USD("2014-06-23".to_string()), 3.0627f64); - exchange_rates.insert(Exchange::USD("2022-09-01".to_string()), 4.6959f64); - exchange_rates.insert(Exchange::USD("2017-07-06".to_string()), 3.7351f64); - exchange_rates.insert(Exchange::USD("2023-10-02".to_string()), 4.3634f64); - exchange_rates.insert(Exchange::USD("2014-08-26".to_string()), 3.1686f64); - exchange_rates.insert(Exchange::USD("2021-08-16".to_string()), 3.873f64); - exchange_rates.insert(Exchange::USD("2018-08-06".to_string()), 3.692f64); - exchange_rates.insert(Exchange::USD("2025-09-19".to_string()), 3.6278f64); - exchange_rates.insert(Exchange::USD("2018-10-08".to_string()), 3.7574f64); - exchange_rates.insert(Exchange::USD("2015-11-03".to_string()), 3.8678f64); - exchange_rates.insert(Exchange::USD("2019-01-18".to_string()), 3.7694f64); - exchange_rates.insert(Exchange::USD("2014-03-28".to_string()), 3.0374f64); - exchange_rates.insert(Exchange::USD("2019-08-02".to_string()), 3.8829f64); - exchange_rates.insert(Exchange::USD("2023-09-22".to_string()), 4.3269f64); - exchange_rates.insert(Exchange::EUR("2023-10-19".to_string()), 4.4529f64); - exchange_rates.insert(Exchange::USD("2018-06-12".to_string()), 3.6271f64); - exchange_rates.insert(Exchange::USD("2021-11-18".to_string()), 4.1114f64); - exchange_rates.insert(Exchange::USD("2015-06-10".to_string()), 3.676f64); - exchange_rates.insert(Exchange::USD("2019-03-06".to_string()), 3.8038f64); - exchange_rates.insert(Exchange::USD("2019-02-12".to_string()), 3.838f64); - exchange_rates.insert(Exchange::USD("2022-09-07".to_string()), 4.7584f64); - exchange_rates.insert(Exchange::USD("2018-02-12".to_string()), 3.4122f64); - exchange_rates.insert(Exchange::USD("2017-04-19".to_string()), 3.9571f64); - exchange_rates.insert(Exchange::USD("2016-04-01".to_string()), 3.7193f64); - exchange_rates.insert(Exchange::USD("2023-06-23".to_string()), 4.0893f64); - exchange_rates.insert(Exchange::USD("2013-09-12".to_string()), 3.1782f64); - exchange_rates.insert(Exchange::EUR("2023-08-02".to_string()), 4.4484f64); - exchange_rates.insert(Exchange::USD("2024-01-11".to_string()), 3.968f64); - exchange_rates.insert(Exchange::EUR("2024-03-12".to_string()), 4.2804f64); - exchange_rates.insert(Exchange::USD("2012-08-23".to_string()), 3.2488f64); - exchange_rates.insert(Exchange::USD("2015-05-05".to_string()), 3.6205f64); - exchange_rates.insert(Exchange::USD("2021-10-14".to_string()), 3.9403f64); - exchange_rates.insert(Exchange::USD("2025-05-30".to_string()), 3.7537f64); - exchange_rates.insert(Exchange::EUR("2024-01-25".to_string()), 4.379f64); - exchange_rates.insert(Exchange::USD("2024-05-13".to_string()), 3.9853f64); - exchange_rates.insert(Exchange::USD("2025-06-13".to_string()), 3.7056f64); - exchange_rates.insert(Exchange::USD("2016-02-02".to_string()), 4.0333f64); - exchange_rates.insert(Exchange::USD("2016-09-06".to_string()), 3.8869f64); - exchange_rates.insert(Exchange::USD("2023-02-03".to_string()), 4.2928f64); - exchange_rates.insert(Exchange::EUR("2024-07-31".to_string()), 4.2953f64); - exchange_rates.insert(Exchange::USD("2019-05-20".to_string()), 3.8543f64); - exchange_rates.insert(Exchange::USD("2019-01-31".to_string()), 3.7271f64); - exchange_rates.insert(Exchange::USD("2017-04-25".to_string()), 3.8873f64); - exchange_rates.insert(Exchange::USD("2020-01-22".to_string()), 3.8202f64); - exchange_rates.insert(Exchange::USD("2025-03-17".to_string()), 3.8329f64); - exchange_rates.insert(Exchange::USD("2023-06-27".to_string()), 4.0481f64); - exchange_rates.insert(Exchange::USD("2016-04-12".to_string()), 3.749f64); - exchange_rates.insert(Exchange::USD("2019-11-13".to_string()), 3.8902f64); - exchange_rates.insert(Exchange::USD("2014-03-14".to_string()), 3.0481f64); - exchange_rates.insert(Exchange::USD("2020-03-05".to_string()), 3.8479f64); - exchange_rates.insert(Exchange::USD("2014-11-28".to_string()), 3.3605f64); - exchange_rates.insert(Exchange::USD("2025-10-30".to_string()), 3.652f64); - exchange_rates.insert(Exchange::USD("2021-12-17".to_string()), 4.0882f64); - exchange_rates.insert(Exchange::USD("2013-09-19".to_string()), 3.0833f64); - exchange_rates.insert(Exchange::USD("2016-02-22".to_string()), 3.9391f64); - exchange_rates.insert(Exchange::EUR("2023-07-13".to_string()), 4.4336f64); - exchange_rates.insert(Exchange::USD("2014-07-21".to_string()), 3.07f64); - exchange_rates.insert(Exchange::USD("2020-03-24".to_string()), 4.2421f64); - exchange_rates.insert(Exchange::EUR("2024-11-12".to_string()), 4.357f64); - exchange_rates.insert(Exchange::USD("2022-11-24".to_string()), 4.5101f64); - exchange_rates.insert(Exchange::USD("2019-01-30".to_string()), 3.7577f64); - exchange_rates.insert(Exchange::USD("2015-12-23".to_string()), 3.8872f64); - exchange_rates.insert(Exchange::USD("2024-12-13".to_string()), 4.0738f64); - exchange_rates.insert(Exchange::EUR("2023-06-29".to_string()), 4.4568f64); - exchange_rates.insert(Exchange::USD("2016-12-08".to_string()), 4.1107f64); - exchange_rates.insert(Exchange::EUR("2025-10-09".to_string()), 4.2569f64); - exchange_rates.insert(Exchange::USD("2025-08-14".to_string()), 3.6542f64); - exchange_rates.insert(Exchange::USD("2021-11-19".to_string()), 4.1457f64); - exchange_rates.insert(Exchange::EUR("2023-05-24".to_string()), 4.4803f64); - exchange_rates.insert(Exchange::USD("2012-11-13".to_string()), 3.2945f64); - exchange_rates.insert(Exchange::USD("2014-10-20".to_string()), 3.3109f64); - exchange_rates.insert(Exchange::USD("2015-11-04".to_string()), 3.8876f64); - exchange_rates.insert(Exchange::EUR("2024-03-19".to_string()), 4.3201f64); - exchange_rates.insert(Exchange::USD("2025-05-26".to_string()), 3.7344f64); - exchange_rates.insert(Exchange::USD("2025-10-09".to_string()), 3.6659f64); - exchange_rates.insert(Exchange::EUR("2025-10-21".to_string()), 4.2392f64); - exchange_rates.insert(Exchange::USD("2018-06-26".to_string()), 3.7151f64); - exchange_rates.insert(Exchange::EUR("2024-09-17".to_string()), 4.2748f64); - exchange_rates.insert(Exchange::USD("2014-06-27".to_string()), 3.0485f64); - exchange_rates.insert(Exchange::USD("2020-10-15".to_string()), 3.8904f64); - exchange_rates.insert(Exchange::USD("2025-09-04".to_string()), 3.6501f64); - exchange_rates.insert(Exchange::USD("2018-01-18".to_string()), 3.4108f64); - exchange_rates.insert(Exchange::USD("2013-03-07".to_string()), 3.1808f64); - exchange_rates.insert(Exchange::USD("2017-06-19".to_string()), 3.7615f64); - exchange_rates.insert(Exchange::USD("2018-12-17".to_string()), 3.7871f64); - exchange_rates.insert(Exchange::USD("2016-08-05".to_string()), 3.8542f64); - exchange_rates.insert(Exchange::USD("2025-08-27".to_string()), 3.6793f64); - exchange_rates.insert(Exchange::USD("2022-12-27".to_string()), 4.3671f64); - exchange_rates.insert(Exchange::USD("2018-03-22".to_string()), 3.4264f64); - exchange_rates.insert(Exchange::EUR("2023-08-22".to_string()), 4.4648f64); - exchange_rates.insert(Exchange::USD("2012-10-25".to_string()), 3.1851f64); - exchange_rates.insert(Exchange::USD("2025-07-11".to_string()), 3.6432f64); - exchange_rates.insert(Exchange::USD("2017-03-02".to_string()), 4.0765f64); - exchange_rates.insert(Exchange::USD("2016-12-23".to_string()), 4.2199f64); - exchange_rates.insert(Exchange::USD("2015-07-13".to_string()), 3.7543f64); - exchange_rates.insert(Exchange::USD("2022-01-11".to_string()), 4.0106f64); - exchange_rates.insert(Exchange::USD("2016-04-25".to_string()), 3.8962f64); - exchange_rates.insert(Exchange::EUR("2024-02-05".to_string()), 4.3278f64); - exchange_rates.insert(Exchange::USD("2025-06-04".to_string()), 3.7525f64); - exchange_rates.insert(Exchange::USD("2020-05-13".to_string()), 4.2111f64); - exchange_rates.insert(Exchange::USD("2019-06-14".to_string()), 3.7727f64); - exchange_rates.insert(Exchange::USD("2014-02-12".to_string()), 3.0552f64); - exchange_rates.insert(Exchange::EUR("2024-09-05".to_string()), 4.2717f64); - exchange_rates.insert(Exchange::USD("2013-04-11".to_string()), 3.1382f64); - exchange_rates.insert(Exchange::USD("2019-11-04".to_string()), 3.8099f64); - exchange_rates.insert(Exchange::USD("2021-01-29".to_string()), 3.746f64); - exchange_rates.insert(Exchange::USD("2017-05-11".to_string()), 3.8744f64); - exchange_rates.insert(Exchange::USD("2025-11-19".to_string()), 3.6656f64); - exchange_rates.insert(Exchange::USD("2021-06-24".to_string()), 3.7986f64); - exchange_rates.insert(Exchange::EUR("2025-06-03".to_string()), 4.2721f64); - exchange_rates.insert(Exchange::USD("2012-04-19".to_string()), 3.1879f64); - exchange_rates.insert(Exchange::USD("2014-06-17".to_string()), 3.0495f64); - exchange_rates.insert(Exchange::EUR("2024-02-19".to_string()), 4.339f64); - exchange_rates.insert(Exchange::USD("2019-11-27".to_string()), 3.9154f64); - exchange_rates.insert(Exchange::USD("2019-04-04".to_string()), 3.8215f64); - exchange_rates.insert(Exchange::USD("2024-11-12".to_string()), 4.1011f64); - exchange_rates.insert(Exchange::USD("2020-10-29".to_string()), 3.9505f64); - exchange_rates.insert(Exchange::USD("2021-06-07".to_string()), 3.6656f64); - exchange_rates.insert(Exchange::USD("2017-11-29".to_string()), 3.5385f64); - exchange_rates.insert(Exchange::USD("2019-06-03".to_string()), 3.8292f64); - exchange_rates.insert(Exchange::USD("2013-01-21".to_string()), 3.1351f64); - exchange_rates.insert(Exchange::EUR("2025-10-29".to_string()), 4.2374f64); - exchange_rates.insert(Exchange::USD("2016-09-13".to_string()), 3.8734f64); - exchange_rates.insert(Exchange::USD("2022-07-25".to_string()), 4.6171f64); - exchange_rates.insert(Exchange::USD("2015-05-12".to_string()), 3.6447f64); - exchange_rates.insert(Exchange::USD("2017-05-18".to_string()), 3.7926f64); - exchange_rates.insert(Exchange::USD("2013-10-11".to_string()), 3.085f64); - exchange_rates.insert(Exchange::USD("2023-04-27".to_string()), 4.1541f64); - exchange_rates.insert(Exchange::USD("2013-03-18".to_string()), 3.2015f64); - exchange_rates.insert(Exchange::USD("2023-03-17".to_string()), 4.4202f64); - exchange_rates.insert(Exchange::USD("2021-01-28".to_string()), 3.7566f64); - exchange_rates.insert(Exchange::USD("2020-02-07".to_string()), 3.8947f64); - exchange_rates.insert(Exchange::USD("2021-03-09".to_string()), 3.8507f64); - exchange_rates.insert(Exchange::USD("2020-09-04".to_string()), 3.7533f64); - exchange_rates.insert(Exchange::EUR("2023-05-11".to_string()), 4.5259f64); - exchange_rates.insert(Exchange::USD("2019-07-31".to_string()), 3.8504f64); - exchange_rates.insert(Exchange::EUR("2024-12-09".to_string()), 4.2581f64); - exchange_rates.insert(Exchange::USD("2014-06-10".to_string()), 3.0303f64); - exchange_rates.insert(Exchange::USD("2014-06-30".to_string()), 3.0473f64); - exchange_rates.insert(Exchange::USD("2023-03-02".to_string()), 4.4002f64); - exchange_rates.insert(Exchange::USD("2020-03-17".to_string()), 4.046f64); - exchange_rates.insert(Exchange::USD("2025-01-21".to_string()), 4.1101f64); - exchange_rates.insert(Exchange::EUR("2023-02-21".to_string()), 4.7469f64); - exchange_rates.insert(Exchange::USD("2023-02-06".to_string()), 4.3833f64); - exchange_rates.insert(Exchange::USD("2022-07-15".to_string()), 4.7966f64); - exchange_rates.insert(Exchange::USD("2024-01-23".to_string()), 4.0133f64); - exchange_rates.insert(Exchange::USD("2020-02-04".to_string()), 3.8773f64); - exchange_rates.insert(Exchange::USD("2016-03-31".to_string()), 3.759f64); - exchange_rates.insert(Exchange::USD("2017-09-21".to_string()), 3.5975f64); - exchange_rates.insert(Exchange::USD("2014-07-04".to_string()), 3.0495f64); - exchange_rates.insert(Exchange::EUR("2023-06-06".to_string()), 4.4902f64); - exchange_rates.insert(Exchange::USD("2017-10-19".to_string()), 3.5896f64); - exchange_rates.insert(Exchange::EUR("2024-01-31".to_string()), 4.3434f64); - exchange_rates.insert(Exchange::USD("2024-01-02".to_string()), 3.9432f64); - exchange_rates.insert(Exchange::USD("2024-02-29".to_string()), 3.9803f64); - exchange_rates.insert(Exchange::USD("2024-07-16".to_string()), 3.9083f64); - exchange_rates.insert(Exchange::USD("2021-02-10".to_string()), 3.6973f64); - exchange_rates.insert(Exchange::USD("2019-03-15".to_string()), 3.8014f64); - exchange_rates.insert(Exchange::USD("2018-06-21".to_string()), 3.7607f64); - exchange_rates.insert(Exchange::USD("2017-01-10".to_string()), 4.127f64); - exchange_rates.insert(Exchange::EUR("2023-12-15".to_string()), 4.3103f64); - exchange_rates.insert(Exchange::EUR("2024-09-18".to_string()), 4.2691f64); - exchange_rates.insert(Exchange::USD("2015-11-17".to_string()), 3.9775f64); - exchange_rates.insert(Exchange::USD("2023-11-16".to_string()), 4.0415f64); - exchange_rates.insert(Exchange::USD("2024-12-16".to_string()), 4.0571f64); - exchange_rates.insert(Exchange::USD("2016-09-12".to_string()), 3.8668f64); - exchange_rates.insert(Exchange::USD("2023-02-17".to_string()), 4.4888f64); - exchange_rates.insert(Exchange::EUR("2025-10-27".to_string()), 4.2353f64); - exchange_rates.insert(Exchange::EUR("2023-09-21".to_string()), 4.621f64); - exchange_rates.insert(Exchange::USD("2021-06-25".to_string()), 3.7749f64); - exchange_rates.insert(Exchange::USD("2024-03-12".to_string()), 3.9162f64); - exchange_rates.insert(Exchange::USD("2024-03-15".to_string()), 3.9392f64); - exchange_rates.insert(Exchange::USD("2023-02-09".to_string()), 4.4003f64); - exchange_rates.insert(Exchange::USD("2023-02-02".to_string()), 4.2803f64); - exchange_rates.insert(Exchange::USD("2023-11-20".to_string()), 3.9938f64); - exchange_rates.insert(Exchange::USD("2018-07-20".to_string()), 3.717f64); - exchange_rates.insert(Exchange::USD("2024-11-04".to_string()), 3.9869f64); - exchange_rates.insert(Exchange::USD("2016-11-04".to_string()), 3.8862f64); - exchange_rates.insert(Exchange::EUR("2023-06-02".to_string()), 4.5148f64); - exchange_rates.insert(Exchange::EUR("2025-10-03".to_string()), 4.2559f64); - exchange_rates.insert(Exchange::USD("2018-09-24".to_string()), 3.662f64); - exchange_rates.insert(Exchange::USD("2014-11-20".to_string()), 3.368f64); - exchange_rates.insert(Exchange::USD("2020-01-30".to_string()), 3.8856f64); - exchange_rates.insert(Exchange::USD("2023-06-13".to_string()), 4.1439f64); - exchange_rates.insert(Exchange::USD("2016-03-16".to_string()), 3.8749f64); - exchange_rates.insert(Exchange::USD("2024-07-01".to_string()), 3.9915f64); - exchange_rates.insert(Exchange::USD("2020-04-27".to_string()), 4.1696f64); - exchange_rates.insert(Exchange::USD("2018-08-27".to_string()), 3.682f64); - exchange_rates.insert(Exchange::EUR("2024-12-02".to_string()), 4.2923f64); - exchange_rates.insert(Exchange::USD("2012-02-10".to_string()), 3.1703f64); - exchange_rates.insert(Exchange::USD("2012-07-04".to_string()), 3.3415f64); - exchange_rates.insert(Exchange::EUR("2025-03-05".to_string()), 4.1545f64); - exchange_rates.insert(Exchange::USD("2020-06-04".to_string()), 3.9573f64); - exchange_rates.insert(Exchange::EUR("2024-04-16".to_string()), 4.3197f64); - exchange_rates.insert(Exchange::USD("2024-10-01".to_string()), 3.859f64); - exchange_rates.insert(Exchange::EUR("2024-10-16".to_string()), 4.2955f64); - exchange_rates.insert(Exchange::USD("2022-09-14".to_string()), 4.7233f64); - exchange_rates.insert(Exchange::USD("2019-10-25".to_string()), 3.8452f64); - exchange_rates.insert(Exchange::USD("2012-11-08".to_string()), 3.2655f64); - exchange_rates.insert(Exchange::EUR("2025-03-17".to_string()), 4.1777f64); - exchange_rates.insert(Exchange::USD("2012-12-04".to_string()), 3.1575f64); - exchange_rates.insert(Exchange::EUR("2023-12-07".to_string()), 4.3334f64); - exchange_rates.insert(Exchange::USD("2013-11-28".to_string()), 3.0872f64); - exchange_rates.insert(Exchange::USD("2013-08-01".to_string()), 3.1961f64); - exchange_rates.insert(Exchange::USD("2022-03-29".to_string()), 4.2917f64); - exchange_rates.insert(Exchange::USD("2024-05-31".to_string()), 3.9389f64); - exchange_rates.insert(Exchange::USD("2024-10-03".to_string()), 3.8951f64); - exchange_rates.insert(Exchange::EUR("2023-03-03".to_string()), 4.7046f64); - exchange_rates.insert(Exchange::USD("2021-12-28".to_string()), 4.062f64); - exchange_rates.insert(Exchange::EUR("2024-04-30".to_string()), 4.3213f64); - exchange_rates.insert(Exchange::USD("2020-10-05".to_string()), 3.8252f64); - exchange_rates.insert(Exchange::USD("2013-08-26".to_string()), 3.1658f64); - exchange_rates.insert(Exchange::EUR("2025-09-30".to_string()), 4.2692f64); - exchange_rates.insert(Exchange::USD("2019-05-15".to_string()), 3.8457f64); - exchange_rates.insert(Exchange::USD("2019-05-27".to_string()), 3.8374f64); - exchange_rates.insert(Exchange::USD("2013-09-17".to_string()), 3.1552f64); - exchange_rates.insert(Exchange::USD("2020-03-19".to_string()), 4.2421f64); - exchange_rates.insert(Exchange::EUR("2024-09-04".to_string()), 4.2815f64); - exchange_rates.insert(Exchange::USD("2025-05-13".to_string()), 3.8266f64); - exchange_rates.insert(Exchange::USD("2021-03-30".to_string()), 3.9604f64); - exchange_rates.insert(Exchange::USD("2017-10-06".to_string()), 3.6799f64); - exchange_rates.insert(Exchange::USD("2012-03-01".to_string()), 3.0887f64); - exchange_rates.insert(Exchange::USD("2023-12-14".to_string()), 3.9484f64); - exchange_rates.insert(Exchange::EUR("2024-10-28".to_string()), 4.3478f64); - exchange_rates.insert(Exchange::USD("2017-07-03".to_string()), 3.7196f64); - exchange_rates.insert(Exchange::USD("2017-11-10".to_string()), 3.6274f64); - exchange_rates.insert(Exchange::USD("2018-11-23".to_string()), 3.7779f64); - exchange_rates.insert(Exchange::EUR("2023-06-15".to_string()), 4.4633f64); - exchange_rates.insert(Exchange::EUR("2025-10-07".to_string()), 4.2559f64); - exchange_rates.insert(Exchange::USD("2025-04-03".to_string()), 3.7968f64); - exchange_rates.insert(Exchange::USD("2021-08-12".to_string()), 3.9074f64); - exchange_rates.insert(Exchange::USD("2021-06-18".to_string()), 3.8198f64); - exchange_rates.insert(Exchange::USD("2023-07-20".to_string()), 3.971f64); - exchange_rates.insert(Exchange::USD("2019-08-28".to_string()), 3.9548f64); - exchange_rates.insert(Exchange::USD("2017-12-07".to_string()), 3.5722f64); - exchange_rates.insert(Exchange::USD("2014-04-22".to_string()), 3.034f64); - exchange_rates.insert(Exchange::USD("2020-03-03".to_string()), 3.8804f64); - exchange_rates.insert(Exchange::USD("2018-05-28".to_string()), 3.6849f64); - exchange_rates.insert(Exchange::USD("2024-11-08".to_string()), 4.0117f64); - exchange_rates.insert(Exchange::USD("2017-01-09".to_string()), 4.1592f64); - exchange_rates.insert(Exchange::USD("2015-10-07".to_string()), 3.7604f64); - exchange_rates.insert(Exchange::USD("2025-10-31".to_string()), 3.6751f64); - exchange_rates.insert(Exchange::USD("2020-04-17".to_string()), 4.1886f64); - exchange_rates.insert(Exchange::USD("2020-11-26".to_string()), 3.7586f64); - exchange_rates.insert(Exchange::USD("2015-12-28".to_string()), 3.8663f64); - exchange_rates.insert(Exchange::EUR("2025-08-07".to_string()), 4.2618f64); - exchange_rates.insert(Exchange::USD("2020-04-20".to_string()), 4.1525f64); - exchange_rates.insert(Exchange::EUR("2025-10-20".to_string()), 4.2396f64); - exchange_rates.insert(Exchange::EUR("2025-11-12".to_string()), 4.2312f64); - exchange_rates.insert(Exchange::USD("2023-08-01".to_string()), 4.0262f64); - exchange_rates.insert(Exchange::USD("2020-07-24".to_string()), 3.8029f64); - exchange_rates.insert(Exchange::USD("2017-03-22".to_string()), 3.9731f64); - exchange_rates.insert(Exchange::USD("2016-11-24".to_string()), 4.188f64); - exchange_rates.insert(Exchange::USD("2014-01-21".to_string()), 3.0763f64); - exchange_rates.insert(Exchange::USD("2020-11-12".to_string()), 3.7995f64); - exchange_rates.insert(Exchange::USD("2016-06-07".to_string()), 3.8298f64); - exchange_rates.insert(Exchange::USD("2015-12-22".to_string()), 3.8787f64); - exchange_rates.insert(Exchange::USD("2012-12-18".to_string()), 3.1044f64); - exchange_rates.insert(Exchange::USD("2020-01-07".to_string()), 3.7861f64); - exchange_rates.insert(Exchange::USD("2022-06-29".to_string()), 4.4533f64); - exchange_rates.insert(Exchange::USD("2017-04-28".to_string()), 3.8696f64); - exchange_rates.insert(Exchange::USD("2019-10-14".to_string()), 3.8958f64); - exchange_rates.insert(Exchange::USD("2019-02-21".to_string()), 3.8247f64); - exchange_rates.insert(Exchange::USD("2025-06-17".to_string()), 3.7005f64); - exchange_rates.insert(Exchange::USD("2019-01-04".to_string()), 3.772f64); - exchange_rates.insert(Exchange::USD("2025-06-10".to_string()), 3.7352f64); - exchange_rates.insert(Exchange::USD("2017-07-28".to_string()), 3.6406f64); - exchange_rates.insert(Exchange::USD("2024-10-17".to_string()), 3.9786f64); - exchange_rates.insert(Exchange::USD("2025-11-25".to_string()), 3.6675f64); - exchange_rates.insert(Exchange::USD("2020-10-27".to_string()), 3.886f64); - exchange_rates.insert(Exchange::USD("2018-09-19".to_string()), 3.6685f64); - exchange_rates.insert(Exchange::USD("2014-02-14".to_string()), 3.0334f64); - exchange_rates.insert(Exchange::USD("2021-10-07".to_string()), 3.9334f64); - exchange_rates.insert(Exchange::USD("2019-04-10".to_string()), 3.8023f64); - exchange_rates.insert(Exchange::USD("2022-10-06".to_string()), 4.8989f64); - exchange_rates.insert(Exchange::EUR("2025-02-03".to_string()), 4.2305f64); - exchange_rates.insert(Exchange::USD("2024-05-27".to_string()), 3.9196f64); - exchange_rates.insert(Exchange::USD("2018-05-08".to_string()), 3.5884f64); - exchange_rates.insert(Exchange::USD("2015-03-11".to_string()), 3.9091f64); - exchange_rates.insert(Exchange::USD("2019-12-23".to_string()), 3.8394f64); - exchange_rates.insert(Exchange::USD("2019-05-06".to_string()), 3.8313f64); - exchange_rates.insert(Exchange::USD("2012-08-03".to_string()), 3.3548f64); - exchange_rates.insert(Exchange::USD("2017-01-19".to_string()), 4.1014f64); - exchange_rates.insert(Exchange::USD("2016-12-21".to_string()), 4.2484f64); - exchange_rates.insert(Exchange::EUR("2023-01-19".to_string()), 4.7053f64); - exchange_rates.insert(Exchange::USD("2016-08-12".to_string()), 3.8219f64); - exchange_rates.insert(Exchange::USD("2023-03-14".to_string()), 4.3793f64); - exchange_rates.insert(Exchange::USD("2016-05-12".to_string()), 3.8811f64); - exchange_rates.insert(Exchange::EUR("2025-11-19".to_string()), 4.2424f64); - exchange_rates.insert(Exchange::EUR("2023-01-25".to_string()), 4.7079f64); - exchange_rates.insert(Exchange::USD("2024-10-08".to_string()), 3.9299f64); - exchange_rates.insert(Exchange::USD("2014-03-31".to_string()), 3.0344f64); - exchange_rates.insert(Exchange::USD("2019-07-17".to_string()), 3.8038f64); - exchange_rates.insert(Exchange::USD("2016-12-19".to_string()), 4.2255f64); - exchange_rates.insert(Exchange::USD("2021-05-21".to_string()), 3.6778f64); - exchange_rates.insert(Exchange::USD("2019-09-18".to_string()), 3.9322f64); - exchange_rates.insert(Exchange::USD("2018-07-30".to_string()), 3.6684f64); - exchange_rates.insert(Exchange::USD("2021-08-11".to_string()), 3.9148f64); - exchange_rates.insert(Exchange::USD("2018-10-30".to_string()), 3.8062f64); - exchange_rates.insert(Exchange::USD("2014-10-28".to_string()), 3.3295f64); - exchange_rates.insert(Exchange::USD("2020-10-21".to_string()), 3.8706f64); - exchange_rates.insert(Exchange::USD("2020-02-27".to_string()), 3.9413f64); - exchange_rates.insert(Exchange::USD("2021-10-15".to_string()), 3.9413f64); - exchange_rates.insert(Exchange::USD("2013-04-22".to_string()), 3.1448f64); - exchange_rates.insert(Exchange::USD("2017-07-14".to_string()), 3.6986f64); - exchange_rates.insert(Exchange::USD("2023-03-01".to_string()), 4.4094f64); - exchange_rates.insert(Exchange::USD("2016-02-08".to_string()), 3.9525f64); - exchange_rates.insert(Exchange::USD("2013-02-14".to_string()), 3.1209f64); - exchange_rates.insert(Exchange::EUR("2024-08-07".to_string()), 4.3158f64); - exchange_rates.insert(Exchange::USD("2021-07-29".to_string()), 3.8617f64); - exchange_rates.insert(Exchange::USD("2016-08-19".to_string()), 3.7905f64); - exchange_rates.insert(Exchange::USD("2013-12-02".to_string()), 3.0965f64); - exchange_rates.insert(Exchange::USD("2022-03-17".to_string()), 4.2403f64); - exchange_rates.insert(Exchange::USD("2015-01-29".to_string()), 3.7418f64); - exchange_rates.insert(Exchange::USD("2024-10-07".to_string()), 3.9368f64); - exchange_rates.insert(Exchange::USD("2025-06-09".to_string()), 3.7427f64); - exchange_rates.insert(Exchange::USD("2012-10-26".to_string()), 3.2119f64); - exchange_rates.insert(Exchange::USD("2016-11-17".to_string()), 4.1375f64); - exchange_rates.insert(Exchange::EUR("2023-03-17".to_string()), 4.7062f64); - exchange_rates.insert(Exchange::USD("2013-10-09".to_string()), 3.1057f64); - exchange_rates.insert(Exchange::USD("2024-01-08".to_string()), 3.9812f64); - exchange_rates.insert(Exchange::EUR("2024-01-05".to_string()), 4.3484f64); - exchange_rates.insert(Exchange::USD("2021-04-07".to_string()), 3.8611f64); - exchange_rates.insert(Exchange::USD("2012-08-20".to_string()), 3.2944f64); - exchange_rates.insert(Exchange::EUR("2025-03-27".to_string()), 4.1913f64); - exchange_rates.insert(Exchange::USD("2018-03-14".to_string()), 3.4055f64); - exchange_rates.insert(Exchange::USD("2013-11-18".to_string()), 3.0953f64); - exchange_rates.insert(Exchange::USD("2015-02-13".to_string()), 3.6552f64); - exchange_rates.insert(Exchange::EUR("2023-02-27".to_string()), 4.7162f64); - exchange_rates.insert(Exchange::USD("2025-08-04".to_string()), 3.6977f64); - exchange_rates.insert(Exchange::EUR("2024-12-03".to_string()), 4.2927f64); - exchange_rates.insert(Exchange::USD("2017-05-26".to_string()), 3.7248f64); - exchange_rates.insert(Exchange::USD("2025-11-24".to_string()), 3.6726f64); - exchange_rates.insert(Exchange::USD("2018-09-21".to_string()), 3.6402f64); - exchange_rates.insert(Exchange::USD("2020-02-05".to_string()), 3.8654f64); - exchange_rates.insert(Exchange::USD("2013-02-06".to_string()), 3.0868f64); - exchange_rates.insert(Exchange::USD("2016-11-16".to_string()), 4.138f64); - exchange_rates.insert(Exchange::USD("2021-05-11".to_string()), 3.7514f64); - exchange_rates.insert(Exchange::USD("2016-04-05".to_string()), 3.7337f64); - exchange_rates.insert(Exchange::USD("2025-09-11".to_string()), 3.6459f64); - exchange_rates.insert(Exchange::USD("2014-03-13".to_string()), 3.0284f64); - exchange_rates.insert(Exchange::EUR("2025-09-19".to_string()), 4.2666f64); - exchange_rates.insert(Exchange::USD("2015-11-06".to_string()), 3.9075f64); - exchange_rates.insert(Exchange::USD("2018-10-05".to_string()), 3.7518f64); - exchange_rates.insert(Exchange::USD("2012-02-28".to_string()), 3.0977f64); - exchange_rates.insert(Exchange::EUR("2024-07-02".to_string()), 4.3286f64); - exchange_rates.insert(Exchange::USD("2022-03-24".to_string()), 4.331f64); - exchange_rates.insert(Exchange::USD("2020-06-24".to_string()), 3.9395f64); - exchange_rates.insert(Exchange::USD("2013-02-08".to_string()), 3.1056f64); - exchange_rates.insert(Exchange::USD("2021-05-24".to_string()), 3.6795f64); - exchange_rates.insert(Exchange::USD("2019-12-19".to_string()), 3.8281f64); - exchange_rates.insert(Exchange::USD("2016-10-07".to_string()), 3.8505f64); - exchange_rates.insert(Exchange::USD("2013-10-08".to_string()), 3.0873f64); - exchange_rates.insert(Exchange::USD("2025-02-12".to_string()), 4.0215f64); - exchange_rates.insert(Exchange::USD("2018-02-02".to_string()), 3.3329f64); - exchange_rates.insert(Exchange::USD("2017-12-13".to_string()), 3.588f64); - exchange_rates.insert(Exchange::USD("2013-05-09".to_string()), 3.1392f64); - exchange_rates.insert(Exchange::EUR("2025-02-06".to_string()), 4.2073f64); - exchange_rates.insert(Exchange::USD("2015-11-09".to_string()), 3.9605f64); - exchange_rates.insert(Exchange::EUR("2024-02-02".to_string()), 4.3173f64); - exchange_rates.insert(Exchange::EUR("2023-11-16".to_string()), 4.3854f64); - exchange_rates.insert(Exchange::USD("2019-07-30".to_string()), 3.8493f64); - exchange_rates.insert(Exchange::USD("2014-01-14".to_string()), 3.04f64); - exchange_rates.insert(Exchange::USD("2017-06-23".to_string()), 3.7824f64); - exchange_rates.insert(Exchange::USD("2019-11-26".to_string()), 3.9039f64); - exchange_rates.insert(Exchange::USD("2015-10-13".to_string()), 3.7199f64); - exchange_rates.insert(Exchange::EUR("2024-08-23".to_string()), 4.2769f64); - exchange_rates.insert(Exchange::USD("2021-03-19".to_string()), 3.8865f64); - exchange_rates.insert(Exchange::EUR("2023-08-21".to_string()), 4.4768f64); - exchange_rates.insert(Exchange::USD("2014-02-04".to_string()), 3.1189f64); - exchange_rates.insert(Exchange::USD("2021-04-22".to_string()), 3.7885f64); - exchange_rates.insert(Exchange::USD("2024-07-31".to_string()), 3.9689f64); - exchange_rates.insert(Exchange::USD("2022-02-23".to_string()), 3.9937f64); - exchange_rates.insert(Exchange::USD("2016-01-11".to_string()), 4.0085f64); - exchange_rates.insert(Exchange::USD("2020-09-02".to_string()), 3.7191f64); - exchange_rates.insert(Exchange::USD("2017-05-24".to_string()), 3.7535f64); - exchange_rates.insert(Exchange::USD("2013-04-30".to_string()), 3.1721f64); - exchange_rates.insert(Exchange::USD("2021-05-18".to_string()), 3.705f64); - exchange_rates.insert(Exchange::USD("2017-06-06".to_string()), 3.725f64); - exchange_rates.insert(Exchange::USD("2018-10-19".to_string()), 3.7601f64); - exchange_rates.insert(Exchange::USD("2024-10-24".to_string()), 4.0168f64); - exchange_rates.insert(Exchange::USD("2020-07-10".to_string()), 3.9646f64); - exchange_rates.insert(Exchange::USD("2017-03-09".to_string()), 4.0864f64); - exchange_rates.insert(Exchange::USD("2020-05-15".to_string()), 4.2135f64); - exchange_rates.insert(Exchange::USD("2017-02-02".to_string()), 3.9835f64); - exchange_rates.insert(Exchange::USD("2021-07-27".to_string()), 3.9017f64); - exchange_rates.insert(Exchange::USD("2014-03-26".to_string()), 3.0318f64); - exchange_rates.insert(Exchange::USD("2022-11-25".to_string()), 4.5111f64); - exchange_rates.insert(Exchange::USD("2015-03-10".to_string()), 3.8345f64); - exchange_rates.insert(Exchange::EUR("2024-08-26".to_string()), 4.2803f64); - exchange_rates.insert(Exchange::EUR("2024-12-16".to_string()), 4.2622f64); - exchange_rates.insert(Exchange::USD("2025-04-09".to_string()), 3.8828f64); - exchange_rates.insert(Exchange::USD("2020-12-10".to_string()), 3.6574f64); - exchange_rates.insert(Exchange::USD("2019-07-04".to_string()), 3.7618f64); - exchange_rates.insert(Exchange::USD("2020-01-09".to_string()), 3.8251f64); - exchange_rates.insert(Exchange::EUR("2024-01-03".to_string()), 4.3646f64); - exchange_rates.insert(Exchange::USD("2022-08-05".to_string()), 4.6024f64); - exchange_rates.insert(Exchange::USD("2019-11-20".to_string()), 3.8792f64); - exchange_rates.insert(Exchange::USD("2023-09-11".to_string()), 4.3077f64); - exchange_rates.insert(Exchange::USD("2019-07-25".to_string()), 3.8199f64); - exchange_rates.insert(Exchange::USD("2016-03-04".to_string()), 3.9545f64); - exchange_rates.insert(Exchange::USD("2015-12-09".to_string()), 3.9705f64); - exchange_rates.insert(Exchange::USD("2014-10-16".to_string()), 3.2985f64); - exchange_rates.insert(Exchange::USD("2016-06-22".to_string()), 3.8945f64); - exchange_rates.insert(Exchange::EUR("2023-01-04".to_string()), 4.6688f64); - exchange_rates.insert(Exchange::EUR("2023-09-22".to_string()), 4.6069f64); - exchange_rates.insert(Exchange::USD("2014-03-27".to_string()), 3.0401f64); - exchange_rates.insert(Exchange::USD("2023-10-13".to_string()), 4.3033f64); - exchange_rates.insert(Exchange::USD("2019-12-31".to_string()), 3.7977f64); - exchange_rates.insert(Exchange::USD("2015-03-16".to_string()), 3.926f64); - exchange_rates.insert(Exchange::USD("2020-12-01".to_string()), 3.7367f64); - exchange_rates.insert(Exchange::USD("2013-05-23".to_string()), 3.2587f64); - exchange_rates.insert(Exchange::EUR("2023-02-10".to_string()), 4.7716f64); - exchange_rates.insert(Exchange::USD("2023-06-01".to_string()), 4.2399f64); - exchange_rates.insert(Exchange::USD("2024-11-26".to_string()), 4.1073f64); - exchange_rates.insert(Exchange::USD("2021-08-30".to_string()), 3.8724f64); - exchange_rates.insert(Exchange::EUR("2024-01-04".to_string()), 4.3525f64); - exchange_rates.insert(Exchange::USD("2024-12-20".to_string()), 4.1002f64); - exchange_rates.insert(Exchange::USD("2014-08-05".to_string()), 3.1121f64); - exchange_rates.insert(Exchange::EUR("2025-07-02".to_string()), 4.25f64); - exchange_rates.insert(Exchange::USD("2015-06-24".to_string()), 3.7103f64); - exchange_rates.insert(Exchange::USD("2013-03-27".to_string()), 3.2635f64); - exchange_rates.insert(Exchange::USD("2013-01-23".to_string()), 3.1195f64); - exchange_rates.insert(Exchange::USD("2023-05-23".to_string()), 4.1634f64); - exchange_rates.insert(Exchange::USD("2018-11-05".to_string()), 3.7907f64); - exchange_rates.insert(Exchange::USD("2016-01-25".to_string()), 4.1346f64); - exchange_rates.insert(Exchange::USD("2013-06-10".to_string()), 3.221f64); - exchange_rates.insert(Exchange::USD("2013-07-18".to_string()), 3.2362f64); - exchange_rates.insert(Exchange::USD("2021-03-12".to_string()), 3.8521f64); - exchange_rates.insert(Exchange::USD("2012-09-12".to_string()), 3.168f64); - exchange_rates.insert(Exchange::USD("2019-10-10".to_string()), 3.9226f64); - exchange_rates.insert(Exchange::USD("2012-11-21".to_string()), 3.2287f64); - exchange_rates.insert(Exchange::USD("2025-02-17".to_string()), 3.9749f64); - exchange_rates.insert(Exchange::USD("2015-09-23".to_string()), 3.7801f64); - exchange_rates.insert(Exchange::EUR("2025-06-30".to_string()), 4.2419f64); - exchange_rates.insert(Exchange::USD("2024-01-18".to_string()), 4.0437f64); - exchange_rates.insert(Exchange::USD("2015-01-27".to_string()), 3.7348f64); - exchange_rates.insert(Exchange::USD("2015-09-11".to_string()), 3.7264f64); - exchange_rates.insert(Exchange::USD("2022-01-12".to_string()), 3.9879f64); - exchange_rates.insert(Exchange::USD("2020-03-06".to_string()), 3.8231f64); - exchange_rates.insert(Exchange::USD("2025-01-13".to_string()), 4.1904f64); - exchange_rates.insert(Exchange::USD("2018-09-05".to_string()), 3.733f64); - exchange_rates.insert(Exchange::USD("2022-07-19".to_string()), 4.6594f64); - exchange_rates.insert(Exchange::USD("2025-11-12".to_string()), 3.657f64); - exchange_rates.insert(Exchange::EUR("2023-07-27".to_string()), 4.4224f64); - exchange_rates.insert(Exchange::USD("2021-04-01".to_string()), 3.9428f64); - exchange_rates.insert(Exchange::EUR("2025-07-14".to_string()), 4.2614f64); - exchange_rates.insert(Exchange::USD("2021-08-24".to_string()), 3.9086f64); - exchange_rates.insert(Exchange::USD("2025-10-06".to_string()), 3.6446f64); - exchange_rates.insert(Exchange::USD("2013-10-16".to_string()), 3.0854f64); - exchange_rates.insert(Exchange::USD("2023-10-27".to_string()), 4.2267f64); - exchange_rates.insert(Exchange::USD("2021-04-16".to_string()), 3.7978f64); - exchange_rates.insert(Exchange::USD("2023-08-08".to_string()), 4.0396f64); - exchange_rates.insert(Exchange::USD("2021-07-09".to_string()), 3.8427f64); - exchange_rates.insert(Exchange::USD("2015-06-16".to_string()), 3.6933f64); - exchange_rates.insert(Exchange::USD("2017-11-02".to_string()), 3.6366f64); - exchange_rates.insert(Exchange::USD("2014-01-27".to_string()), 3.0884f64); - exchange_rates.insert(Exchange::USD("2014-09-30".to_string()), 3.2973f64); - exchange_rates.insert(Exchange::USD("2023-06-19".to_string()), 4.068f64); - exchange_rates.insert(Exchange::USD("2024-12-27".to_string()), 4.1036f64); - exchange_rates.insert(Exchange::USD("2016-05-06".to_string()), 3.8732f64); - exchange_rates.insert(Exchange::USD("2013-07-10".to_string()), 3.3724f64); - exchange_rates.insert(Exchange::USD("2012-07-24".to_string()), 3.4678f64); - exchange_rates.insert(Exchange::USD("2015-06-02".to_string()), 3.7676f64); - exchange_rates.insert(Exchange::USD("2025-09-22".to_string()), 3.6255f64); - exchange_rates.insert(Exchange::USD("2016-10-25".to_string()), 3.9543f64); - exchange_rates.insert(Exchange::USD("2017-12-14".to_string()), 3.5716f64); - exchange_rates.insert(Exchange::USD("2014-11-27".to_string()), 3.3528f64); - exchange_rates.insert(Exchange::USD("2025-09-25".to_string()), 3.6295f64); - exchange_rates.insert(Exchange::USD("2021-11-24".to_string()), 4.1764f64); - exchange_rates.insert(Exchange::EUR("2025-08-04".to_string()), 4.2734f64); - exchange_rates.insert(Exchange::USD("2014-06-05".to_string()), 3.0275f64); - exchange_rates.insert(Exchange::USD("2025-09-01".to_string()), 3.6278f64); - exchange_rates.insert(Exchange::USD("2014-07-16".to_string()), 3.0503f64); - exchange_rates.insert(Exchange::USD("2018-01-10".to_string()), 3.4999f64); - exchange_rates.insert(Exchange::EUR("2025-07-09".to_string()), 4.2399f64); - exchange_rates.insert(Exchange::USD("2020-07-13".to_string()), 3.9564f64); - exchange_rates.insert(Exchange::USD("2018-07-10".to_string()), 3.6973f64); - exchange_rates.insert(Exchange::USD("2015-09-22".to_string()), 3.7438f64); - exchange_rates.insert(Exchange::USD("2013-02-27".to_string()), 3.1841f64); - exchange_rates.insert(Exchange::USD("2022-02-15".to_string()), 3.974f64); - exchange_rates.insert(Exchange::USD("2020-07-06".to_string()), 3.9588f64); - exchange_rates.insert(Exchange::USD("2013-05-06".to_string()), 3.1646f64); - exchange_rates.insert(Exchange::EUR("2023-08-09".to_string()), 4.4586f64); - exchange_rates.insert(Exchange::USD("2020-06-16".to_string()), 3.9058f64); - exchange_rates.insert(Exchange::USD("2012-04-06".to_string()), 3.1814f64); - exchange_rates.insert(Exchange::USD("2018-08-02".to_string()), 3.6783f64); - exchange_rates.insert(Exchange::USD("2016-06-02".to_string()), 3.9204f64); - exchange_rates.insert(Exchange::USD("2019-03-25".to_string()), 3.7966f64); - exchange_rates.insert(Exchange::USD("2017-11-24".to_string()), 3.5486f64); - exchange_rates.insert(Exchange::USD("2019-01-25".to_string()), 3.7893f64); - exchange_rates.insert(Exchange::USD("2014-04-23".to_string()), 3.0273f64); - exchange_rates.insert(Exchange::USD("2012-03-09".to_string()), 3.1126f64); - exchange_rates.insert(Exchange::USD("2017-08-09".to_string()), 3.6342f64); - exchange_rates.insert(Exchange::USD("2015-01-23".to_string()), 3.7687f64); - exchange_rates.insert(Exchange::USD("2018-05-17".to_string()), 3.6283f64); - exchange_rates.insert(Exchange::USD("2015-03-12".to_string()), 3.8928f64); - exchange_rates.insert(Exchange::USD("2025-01-02".to_string()), 4.1219f64); - exchange_rates.insert(Exchange::USD("2013-09-02".to_string()), 3.2164f64); - exchange_rates.insert(Exchange::USD("2012-02-01".to_string()), 3.1913f64); - exchange_rates.insert(Exchange::USD("2023-09-06".to_string()), 4.1895f64); - exchange_rates.insert(Exchange::USD("2024-03-18".to_string()), 3.9528f64); - exchange_rates.insert(Exchange::USD("2022-06-08".to_string()), 4.2904f64); - exchange_rates.insert(Exchange::USD("2017-11-14".to_string()), 3.6126f64); - exchange_rates.insert(Exchange::USD("2012-01-27".to_string()), 3.2163f64); - exchange_rates.insert(Exchange::USD("2018-09-12".to_string()), 3.7198f64); - exchange_rates.insert(Exchange::USD("2020-12-15".to_string()), 3.6554f64); - exchange_rates.insert(Exchange::USD("2017-10-18".to_string()), 3.6006f64); - exchange_rates.insert(Exchange::USD("2025-10-28".to_string()), 3.6327f64); - exchange_rates.insert(Exchange::USD("2018-06-25".to_string()), 3.7087f64); - exchange_rates.insert(Exchange::EUR("2025-12-18".to_string()), 4.2076f64); - exchange_rates.insert(Exchange::USD("2017-10-09".to_string()), 3.6743f64); - exchange_rates.insert(Exchange::USD("2024-07-23".to_string()), 3.9355f64); - exchange_rates.insert(Exchange::USD("2023-02-10".to_string()), 4.4565f64); - exchange_rates.insert(Exchange::USD("2020-07-29".to_string()), 3.761f64); - exchange_rates.insert(Exchange::USD("2013-07-16".to_string()), 3.2735f64); - exchange_rates.insert(Exchange::USD("2012-01-26".to_string()), 3.2233f64); - exchange_rates.insert(Exchange::EUR("2024-09-16".to_string()), 4.2753f64); - exchange_rates.insert(Exchange::USD("2019-03-27".to_string()), 3.8113f64); - exchange_rates.insert(Exchange::USD("2023-04-17".to_string()), 4.2261f64); - exchange_rates.insert(Exchange::USD("2022-08-18".to_string()), 4.6468f64); - exchange_rates.insert(Exchange::USD("2018-11-22".to_string()), 3.7764f64); - exchange_rates.insert(Exchange::USD("2014-03-03".to_string()), 3.0462f64); - exchange_rates.insert(Exchange::USD("2013-12-23".to_string()), 3.0443f64); - exchange_rates.insert(Exchange::EUR("2024-07-03".to_string()), 4.3021f64); - exchange_rates.insert(Exchange::USD("2024-06-26".to_string()), 4.0291f64); - exchange_rates.insert(Exchange::USD("2020-12-14".to_string()), 3.6548f64); - exchange_rates.insert(Exchange::EUR("2025-10-23".to_string()), 4.2347f64); - exchange_rates.insert(Exchange::USD("2014-07-22".to_string()), 3.0748f64); - exchange_rates.insert(Exchange::EUR("2025-05-29".to_string()), 4.2369f64); - exchange_rates.insert(Exchange::USD("2021-04-08".to_string()), 3.8365f64); - exchange_rates.insert(Exchange::USD("2021-01-05".to_string()), 3.7031f64); - exchange_rates.insert(Exchange::USD("2018-02-16".to_string()), 3.3173f64); - exchange_rates.insert(Exchange::USD("2024-05-07".to_string()), 4.0056f64); - exchange_rates.insert(Exchange::USD("2014-03-17".to_string()), 3.043f64); - exchange_rates.insert(Exchange::EUR("2024-05-08".to_string()), 4.3195f64); - exchange_rates.insert(Exchange::USD("2018-10-15".to_string()), 3.7091f64); - exchange_rates.insert(Exchange::USD("2014-12-01".to_string()), 3.3519f64); - exchange_rates.insert(Exchange::USD("2025-09-12".to_string()), 3.635f64); - exchange_rates.insert(Exchange::USD("2012-03-12".to_string()), 3.1285f64); - exchange_rates.insert(Exchange::USD("2020-06-29".to_string()), 3.9656f64); - exchange_rates.insert(Exchange::USD("2016-12-30".to_string()), 4.1793f64); - exchange_rates.insert(Exchange::USD("2016-05-04".to_string()), 3.83f64); - exchange_rates.insert(Exchange::USD("2015-01-05".to_string()), 3.5975f64); - exchange_rates.insert(Exchange::EUR("2025-12-15".to_string()), 4.2192f64); - exchange_rates.insert(Exchange::USD("2015-07-15".to_string()), 3.747f64); - exchange_rates.insert(Exchange::USD("2024-06-07".to_string()), 3.9389f64); - exchange_rates.insert(Exchange::EUR("2023-08-14".to_string()), 4.4361f64); - exchange_rates.insert(Exchange::EUR("2023-09-07".to_string()), 4.594f64); - exchange_rates.insert(Exchange::EUR("2025-01-09".to_string()), 4.2794f64); - exchange_rates.insert(Exchange::USD("2014-03-06".to_string()), 3.0427f64); - exchange_rates.insert(Exchange::USD("2013-04-10".to_string()), 3.1405f64); - exchange_rates.insert(Exchange::USD("2014-12-17".to_string()), 3.3928f64); - exchange_rates.insert(Exchange::USD("2022-06-15".to_string()), 4.4455f64); - exchange_rates.insert(Exchange::EUR("2024-04-10".to_string()), 4.2641f64); - exchange_rates.insert(Exchange::USD("2013-06-06".to_string()), 3.2564f64); - exchange_rates.insert(Exchange::USD("2017-07-24".to_string()), 3.6395f64); - exchange_rates.insert(Exchange::USD("2018-08-14".to_string()), 3.7768f64); - exchange_rates.insert(Exchange::USD("2019-08-30".to_string()), 3.9717f64); - exchange_rates.insert(Exchange::USD("2013-02-20".to_string()), 3.1002f64); - exchange_rates.insert(Exchange::EUR("2023-10-27".to_string()), 4.4642f64); - exchange_rates.insert(Exchange::EUR("2023-11-17".to_string()), 4.3767f64); - exchange_rates.insert(Exchange::USD("2022-04-22".to_string()), 4.2935f64); - exchange_rates.insert(Exchange::USD("2021-03-24".to_string()), 3.9098f64); - exchange_rates.insert(Exchange::USD("2020-04-15".to_string()), 4.1519f64); - exchange_rates.insert(Exchange::USD("2018-08-17".to_string()), 3.7784f64); - exchange_rates.insert(Exchange::USD("2016-04-04".to_string()), 3.7254f64); - exchange_rates.insert(Exchange::USD("2012-06-29".to_string()), 3.3885f64); - exchange_rates.insert(Exchange::USD("2024-08-26".to_string()), 3.8284f64); - exchange_rates.insert(Exchange::USD("2013-10-29".to_string()), 3.0436f64); - exchange_rates.insert(Exchange::EUR("2025-08-18".to_string()), 4.2558f64); - exchange_rates.insert(Exchange::USD("2013-01-18".to_string()), 3.0925f64); - exchange_rates.insert(Exchange::USD("2023-01-12".to_string()), 4.3556f64); - exchange_rates.insert(Exchange::USD("2018-06-13".to_string()), 3.6461f64); - exchange_rates.insert(Exchange::USD("2016-11-22".to_string()), 4.1507f64); - exchange_rates.insert(Exchange::USD("2016-10-13".to_string()), 3.9164f64); - exchange_rates.insert(Exchange::USD("2022-06-10".to_string()), 4.3363f64); - exchange_rates.insert(Exchange::USD("2013-11-29".to_string()), 3.0846f64); - exchange_rates.insert(Exchange::USD("2016-09-21".to_string()), 3.8601f64); - exchange_rates.insert(Exchange::USD("2023-08-25".to_string()), 4.1419f64); - exchange_rates.insert(Exchange::USD("2019-03-19".to_string()), 3.7823f64); - exchange_rates.insert(Exchange::EUR("2024-03-27".to_string()), 4.3153f64); - exchange_rates.insert(Exchange::USD("2017-08-25".to_string()), 3.6112f64); - exchange_rates.insert(Exchange::USD("2016-11-23".to_string()), 4.1588f64); - exchange_rates.insert(Exchange::USD("2017-10-25".to_string()), 3.6006f64); - exchange_rates.insert(Exchange::USD("2016-09-15".to_string()), 3.8587f64); - exchange_rates.insert(Exchange::USD("2023-02-27".to_string()), 4.4697f64); - exchange_rates.insert(Exchange::USD("2022-12-05".to_string()), 4.4415f64); - exchange_rates.insert(Exchange::USD("2018-08-23".to_string()), 3.7069f64); - exchange_rates.insert(Exchange::USD("2013-06-19".to_string()), 3.1777f64); - exchange_rates.insert(Exchange::USD("2015-10-15".to_string()), 3.6948f64); - exchange_rates.insert(Exchange::USD("2025-09-10".to_string()), 3.6414f64); - exchange_rates.insert(Exchange::USD("2014-06-12".to_string()), 3.0374f64); - exchange_rates.insert(Exchange::USD("2019-08-20".to_string()), 3.9408f64); - exchange_rates.insert(Exchange::USD("2015-03-30".to_string()), 3.7685f64); - exchange_rates.insert(Exchange::USD("2025-10-13".to_string()), 3.6763f64); - exchange_rates.insert(Exchange::USD("2019-04-05".to_string()), 3.8215f64); - exchange_rates.insert(Exchange::USD("2013-04-17".to_string()), 3.1159f64); - exchange_rates.insert(Exchange::USD("2012-09-28".to_string()), 3.178f64); - exchange_rates.insert(Exchange::USD("2013-11-05".to_string()), 3.0981f64); - exchange_rates.insert(Exchange::USD("2012-08-30".to_string()), 3.3397f64); - exchange_rates.insert(Exchange::USD("2016-05-10".to_string()), 3.8853f64); - exchange_rates.insert(Exchange::USD("2017-01-24".to_string()), 4.0708f64); - exchange_rates.insert(Exchange::USD("2017-07-20".to_string()), 3.6604f64); - exchange_rates.insert(Exchange::EUR("2024-10-23".to_string()), 4.3344f64); - exchange_rates.insert(Exchange::USD("2024-07-03".to_string()), 3.999f64); - exchange_rates.insert(Exchange::USD("2013-09-13".to_string()), 3.1696f64); - exchange_rates.insert(Exchange::USD("2015-06-19".to_string()), 3.6879f64); - exchange_rates.insert(Exchange::USD("2025-07-31".to_string()), 3.7257f64); - exchange_rates.insert(Exchange::USD("2020-06-05".to_string()), 3.9217f64); - exchange_rates.insert(Exchange::USD("2025-08-28".to_string()), 3.6658f64); - exchange_rates.insert(Exchange::USD("2013-10-14".to_string()), 3.0936f64); - exchange_rates.insert(Exchange::USD("2015-06-23".to_string()), 3.704f64); - exchange_rates.insert(Exchange::USD("2014-03-19".to_string()), 3.0245f64); - exchange_rates.insert(Exchange::USD("2018-01-24".to_string()), 3.375f64); - exchange_rates.insert(Exchange::USD("2018-03-08".to_string()), 3.3935f64); - exchange_rates.insert(Exchange::USD("2017-03-17".to_string()), 3.9917f64); - exchange_rates.insert(Exchange::USD("2013-04-03".to_string()), 3.2693f64); - exchange_rates.insert(Exchange::USD("2025-01-29".to_string()), 4.0443f64); - exchange_rates.insert(Exchange::USD("2013-07-23".to_string()), 3.2001f64); - exchange_rates.insert(Exchange::USD("2015-07-31".to_string()), 3.7929f64); - exchange_rates.insert(Exchange::USD("2013-07-24".to_string()), 3.18f64); - exchange_rates.insert(Exchange::USD("2015-05-04".to_string()), 3.632f64); - exchange_rates.insert(Exchange::EUR("2024-06-13".to_string()), 4.3355f64); - exchange_rates.insert(Exchange::USD("2018-06-18".to_string()), 3.7003f64); - exchange_rates.insert(Exchange::USD("2025-11-14".to_string()), 3.6376f64); - exchange_rates.insert(Exchange::USD("2015-06-09".to_string()), 3.6975f64); - exchange_rates.insert(Exchange::USD("2021-02-23".to_string()), 3.7117f64); - exchange_rates.insert(Exchange::EUR("2023-04-12".to_string()), 4.666f64); - exchange_rates.insert(Exchange::USD("2014-01-31".to_string()), 3.1288f64); - exchange_rates.insert(Exchange::USD("2018-11-02".to_string()), 3.7804f64); - exchange_rates.insert(Exchange::USD("2012-06-15".to_string()), 3.3971f64); - exchange_rates.insert(Exchange::USD("2018-07-04".to_string()), 3.7759f64); - exchange_rates.insert(Exchange::USD("2016-06-30".to_string()), 3.9803f64); - exchange_rates.insert(Exchange::USD("2014-06-09".to_string()), 3.0067f64); - exchange_rates.insert(Exchange::USD("2025-07-21".to_string()), 3.6455f64); - exchange_rates.insert(Exchange::USD("2019-03-05".to_string()), 3.7977f64); - exchange_rates.insert(Exchange::USD("2015-05-21".to_string()), 3.6605f64); - exchange_rates.insert(Exchange::USD("2012-07-13".to_string()), 3.4463f64); - exchange_rates.insert(Exchange::EUR("2023-04-21".to_string()), 4.6039f64); - exchange_rates.insert(Exchange::USD("2015-11-18".to_string()), 3.9802f64); - exchange_rates.insert(Exchange::EUR("2023-09-29".to_string()), 4.6356f64); - exchange_rates.insert(Exchange::USD("2012-02-22".to_string()), 3.1635f64); - exchange_rates.insert(Exchange::USD("2019-02-25".to_string()), 3.8241f64); - exchange_rates.insert(Exchange::USD("2024-09-04".to_string()), 3.8738f64); - exchange_rates.insert(Exchange::USD("2022-07-22".to_string()), 4.692f64); - exchange_rates.insert(Exchange::USD("2021-07-02".to_string()), 3.8263f64); - exchange_rates.insert(Exchange::USD("2023-09-29".to_string()), 4.3697f64); - exchange_rates.insert(Exchange::EUR("2024-12-23".to_string()), 4.2621f64); - exchange_rates.insert(Exchange::USD("2025-06-26".to_string()), 3.6222f64); - exchange_rates.insert(Exchange::USD("2025-04-18".to_string()), 3.7661f64); - exchange_rates.insert(Exchange::USD("2025-05-16".to_string()), 3.7853f64); - exchange_rates.insert(Exchange::USD("2013-05-16".to_string()), 3.2521f64); - exchange_rates.insert(Exchange::USD("2021-07-05".to_string()), 3.7979f64); - exchange_rates.insert(Exchange::USD("2012-03-29".to_string()), 3.1234f64); - exchange_rates.insert(Exchange::USD("2021-05-13".to_string()), 3.7675f64); - exchange_rates.insert(Exchange::USD("2014-09-19".to_string()), 3.2507f64); - exchange_rates.insert(Exchange::USD("2024-08-21".to_string()), 3.8565f64); - exchange_rates.insert(Exchange::USD("2025-04-17".to_string()), 3.7684f64); - exchange_rates.insert(Exchange::EUR("2023-05-26".to_string()), 4.5242f64); - exchange_rates.insert(Exchange::USD("2019-04-02".to_string()), 3.8403f64); - exchange_rates.insert(Exchange::USD("2015-09-21".to_string()), 3.708f64); - exchange_rates.insert(Exchange::USD("2020-09-17".to_string()), 3.7713f64); - exchange_rates.insert(Exchange::USD("2012-03-30".to_string()), 3.1191f64); - exchange_rates.insert(Exchange::USD("2014-09-22".to_string()), 3.257f64); - exchange_rates.insert(Exchange::USD("2017-03-10".to_string()), 4.0761f64); - exchange_rates.insert(Exchange::EUR("2025-07-22".to_string()), 4.2531f64); - exchange_rates.insert(Exchange::USD("2021-06-15".to_string()), 3.7349f64); - exchange_rates.insert(Exchange::USD("2022-03-09".to_string()), 4.4147f64); - exchange_rates.insert(Exchange::USD("2015-04-22".to_string()), 3.7125f64); - exchange_rates.insert(Exchange::USD("2016-06-09".to_string()), 3.8126f64); - exchange_rates.insert(Exchange::USD("2013-07-01".to_string()), 3.321f64); - exchange_rates.insert(Exchange::EUR("2023-09-08".to_string()), 4.6019f64); - exchange_rates.insert(Exchange::USD("2021-12-06".to_string()), 4.0619f64); - exchange_rates.insert(Exchange::USD("2021-01-14".to_string()), 3.7323f64); - exchange_rates.insert(Exchange::USD("2018-01-11".to_string()), 3.495f64); - exchange_rates.insert(Exchange::USD("2023-06-06".to_string()), 4.1964f64); - exchange_rates.insert(Exchange::USD("2020-03-30".to_string()), 4.0933f64); - exchange_rates.insert(Exchange::USD("2018-04-18".to_string()), 3.3721f64); - exchange_rates.insert(Exchange::EUR("2023-06-30".to_string()), 4.4503f64); - exchange_rates.insert(Exchange::EUR("2025-06-23".to_string()), 4.2727f64); - exchange_rates.insert(Exchange::EUR("2023-12-06".to_string()), 4.3382f64); - exchange_rates.insert(Exchange::USD("2024-09-12".to_string()), 3.9025f64); - exchange_rates.insert(Exchange::EUR("2024-01-02".to_string()), 4.3434f64); - exchange_rates.insert(Exchange::USD("2024-01-30".to_string()), 4.0301f64); - exchange_rates.insert(Exchange::USD("2017-09-29".to_string()), 3.6519f64); - exchange_rates.insert(Exchange::USD("2024-08-20".to_string()), 3.8506f64); - exchange_rates.insert(Exchange::USD("2012-04-04".to_string()), 3.1503f64); - exchange_rates.insert(Exchange::USD("2012-04-05".to_string()), 3.1678f64); - exchange_rates.insert(Exchange::USD("2012-08-24".to_string()), 3.268f64); - exchange_rates.insert(Exchange::USD("2012-11-14".to_string()), 3.275f64); - exchange_rates.insert(Exchange::EUR("2024-07-23".to_string()), 4.281f64); - exchange_rates.insert(Exchange::EUR("2025-05-23".to_string()), 4.2541f64); - exchange_rates.insert(Exchange::USD("2013-03-22".to_string()), 3.2361f64); - exchange_rates.insert(Exchange::USD("2016-12-06".to_string()), 4.1825f64); - exchange_rates.insert(Exchange::USD("2013-10-07".to_string()), 3.0976f64); - exchange_rates.insert(Exchange::USD("2012-10-08".to_string()), 3.143f64); - exchange_rates.insert(Exchange::USD("2017-06-01".to_string()), 3.7262f64); - exchange_rates.insert(Exchange::USD("2014-08-28".to_string()), 3.1834f64); - exchange_rates.insert(Exchange::USD("2013-03-06".to_string()), 3.166f64); - exchange_rates.insert(Exchange::EUR("2024-12-13".to_string()), 4.2722f64); - exchange_rates.insert(Exchange::USD("2014-02-03".to_string()), 3.137f64); - exchange_rates.insert(Exchange::USD("2020-06-10".to_string()), 3.918f64); - exchange_rates.insert(Exchange::USD("2023-02-23".to_string()), 4.4873f64); - exchange_rates.insert(Exchange::USD("2019-01-28".to_string()), 3.7592f64); - exchange_rates.insert(Exchange::USD("2016-04-29".to_string()), 3.8738f64); - exchange_rates.insert(Exchange::USD("2016-09-28".to_string()), 3.8264f64); - exchange_rates.insert(Exchange::EUR("2024-10-29".to_string()), 4.3542f64); - exchange_rates.insert(Exchange::USD("2012-05-02".to_string()), 3.1593f64); - exchange_rates.insert(Exchange::EUR("2023-07-14".to_string()), 4.4486f64); - exchange_rates.insert(Exchange::USD("2023-11-17".to_string()), 4.0327f64); - exchange_rates.insert(Exchange::USD("2016-10-20".to_string()), 3.9359f64); - exchange_rates.insert(Exchange::USD("2015-12-01".to_string()), 4.0248f64); - exchange_rates.insert(Exchange::USD("2018-04-09".to_string()), 3.4174f64); - exchange_rates.insert(Exchange::USD("2012-04-12".to_string()), 3.1818f64); - exchange_rates.insert(Exchange::USD("2020-05-28".to_string()), 4.0244f64); - exchange_rates.insert(Exchange::USD("2015-01-19".to_string()), 3.7176f64); - exchange_rates.insert(Exchange::USD("2023-04-12".to_string()), 4.2713f64); - exchange_rates.insert(Exchange::USD("2012-06-11".to_string()), 3.4072f64); - exchange_rates.insert(Exchange::USD("2016-06-17".to_string()), 3.9412f64); - exchange_rates.insert(Exchange::USD("2023-04-13".to_string()), 4.2225f64); - exchange_rates.insert(Exchange::USD("2016-07-15".to_string()), 3.9598f64); - exchange_rates.insert(Exchange::USD("2012-11-27".to_string()), 3.1634f64); - exchange_rates.insert(Exchange::USD("2014-04-09".to_string()), 3.0221f64); - exchange_rates.insert(Exchange::USD("2022-01-19".to_string()), 3.993f64); - exchange_rates.insert(Exchange::USD("2012-04-17".to_string()), 3.1872f64); - exchange_rates.insert(Exchange::USD("2023-11-02".to_string()), 4.1963f64); - exchange_rates.insert(Exchange::USD("2023-11-22".to_string()), 4.018f64); - exchange_rates.insert(Exchange::USD("2015-06-05".to_string()), 3.6949f64); - exchange_rates.insert(Exchange::USD("2024-10-04".to_string()), 3.9118f64); - exchange_rates.insert(Exchange::USD("2012-09-03".to_string()), 3.3398f64); - exchange_rates.insert(Exchange::USD("2012-10-10".to_string()), 3.1695f64); - exchange_rates.insert(Exchange::EUR("2025-03-18".to_string()), 4.1776f64); - exchange_rates.insert(Exchange::USD("2024-10-28".to_string()), 4.0207f64); - exchange_rates.insert(Exchange::USD("2022-04-27".to_string()), 4.4453f64); - exchange_rates.insert(Exchange::USD("2022-08-17".to_string()), 4.6119f64); - exchange_rates.insert(Exchange::USD("2021-01-26".to_string()), 3.7512f64); - exchange_rates.insert(Exchange::USD("2017-03-23".to_string()), 3.9687f64); - exchange_rates.insert(Exchange::USD("2021-12-14".to_string()), 4.1088f64); - exchange_rates.insert(Exchange::USD("2022-09-13".to_string()), 4.6363f64); - exchange_rates.insert(Exchange::USD("2018-10-25".to_string()), 3.7796f64); - exchange_rates.insert(Exchange::EUR("2024-01-12".to_string()), 4.3574f64); - exchange_rates.insert(Exchange::EUR("2024-09-11".to_string()), 4.2864f64); - exchange_rates.insert(Exchange::USD("2022-05-11".to_string()), 4.419f64); - exchange_rates.insert(Exchange::USD("2017-12-19".to_string()), 3.5583f64); - exchange_rates.insert(Exchange::USD("2020-09-07".to_string()), 3.7666f64); - exchange_rates.insert(Exchange::EUR("2023-02-23".to_string()), 4.7525f64); - exchange_rates.insert(Exchange::USD("2015-10-08".to_string()), 3.7543f64); - exchange_rates.insert(Exchange::USD("2012-04-13".to_string()), 3.1765f64); - exchange_rates.insert(Exchange::USD("2013-03-05".to_string()), 3.1665f64); - exchange_rates.insert(Exchange::USD("2018-03-20".to_string()), 3.4296f64); - exchange_rates.insert(Exchange::USD("2018-06-29".to_string()), 3.744f64); - exchange_rates.insert(Exchange::USD("2015-04-28".to_string()), 3.6751f64); - exchange_rates.insert(Exchange::EUR("2024-05-13".to_string()), 4.2977f64); - exchange_rates.insert(Exchange::USD("2020-05-25".to_string()), 4.1428f64); - exchange_rates.insert(Exchange::USD("2019-10-03".to_string()), 3.9652f64); - exchange_rates.insert(Exchange::USD("2024-04-25".to_string()), 4.0276f64); - exchange_rates.insert(Exchange::USD("2013-04-15".to_string()), 3.1502f64); - exchange_rates.insert(Exchange::USD("2016-11-09".to_string()), 3.9305f64); - exchange_rates.insert(Exchange::USD("2024-01-04".to_string()), 3.9684f64); - exchange_rates.insert(Exchange::EUR("2024-10-30".to_string()), 4.335f64); - exchange_rates.insert(Exchange::USD("2016-01-28".to_string()), 4.0872f64); - exchange_rates.insert(Exchange::USD("2014-01-16".to_string()), 3.0566f64); - exchange_rates.insert(Exchange::USD("2015-08-04".to_string()), 3.7792f64); - exchange_rates.insert(Exchange::EUR("2025-11-25".to_string()), 4.2301f64); - exchange_rates.insert(Exchange::USD("2025-07-04".to_string()), 3.6108f64); - exchange_rates.insert(Exchange::USD("2022-03-31".to_string()), 4.1801f64); - exchange_rates.insert(Exchange::USD("2012-09-05".to_string()), 3.3693f64); - exchange_rates.insert(Exchange::USD("2024-08-14".to_string()), 3.8963f64); - exchange_rates.insert(Exchange::USD("2021-01-04".to_string()), 3.6998f64); - exchange_rates.insert(Exchange::USD("2013-02-01".to_string()), 3.0744f64); - exchange_rates.insert(Exchange::USD("2015-07-14".to_string()), 3.7645f64); - exchange_rates.insert(Exchange::EUR("2025-04-08".to_string()), 4.2946f64); - exchange_rates.insert(Exchange::EUR("2023-01-31".to_string()), 4.7089f64); - exchange_rates.insert(Exchange::USD("2019-06-17".to_string()), 3.7989f64); - exchange_rates.insert(Exchange::USD("2024-03-27".to_string()), 3.9857f64); - exchange_rates.insert(Exchange::USD("2018-08-20".to_string()), 3.7695f64); - exchange_rates.insert(Exchange::USD("2014-11-21".to_string()), 3.3827f64); - exchange_rates.insert(Exchange::USD("2022-09-05".to_string()), 4.769f64); - exchange_rates.insert(Exchange::USD("2018-12-12".to_string()), 3.7934f64); - exchange_rates.insert(Exchange::USD("2013-01-11".to_string()), 3.089f64); - exchange_rates.insert(Exchange::EUR("2025-08-26".to_string()), 4.2657f64); - exchange_rates.insert(Exchange::USD("2024-05-02".to_string()), 4.0474f64); - exchange_rates.insert(Exchange::USD("2016-10-31".to_string()), 3.9488f64); - exchange_rates.insert(Exchange::USD("2016-12-01".to_string()), 4.1987f64); - exchange_rates.insert(Exchange::USD("2023-09-01".to_string()), 4.1263f64); - exchange_rates.insert(Exchange::USD("2024-05-09".to_string()), 4.0076f64); - exchange_rates.insert(Exchange::USD("2019-06-18".to_string()), 3.8097f64); - exchange_rates.insert(Exchange::USD("2025-03-06".to_string()), 3.8674f64); - exchange_rates.insert(Exchange::USD("2017-07-31".to_string()), 3.6264f64); - exchange_rates.insert(Exchange::USD("2014-01-28".to_string()), 3.0635f64); - exchange_rates.insert(Exchange::USD("2013-01-04".to_string()), 3.17f64); - exchange_rates.insert(Exchange::EUR("2023-05-08".to_string()), 4.5671f64); - exchange_rates.insert(Exchange::EUR("2024-03-25".to_string()), 4.3091f64); - exchange_rates.insert(Exchange::USD("2019-01-10".to_string()), 3.736f64); - exchange_rates.insert(Exchange::USD("2024-04-10".to_string()), 3.9264f64); - exchange_rates.insert(Exchange::USD("2024-01-12".to_string()), 3.9746f64); - exchange_rates.insert(Exchange::USD("2013-02-26".to_string()), 3.1733f64); - exchange_rates.insert(Exchange::USD("2023-02-15".to_string()), 4.4372f64); - exchange_rates.insert(Exchange::USD("2024-03-14".to_string()), 3.9183f64); - exchange_rates.insert(Exchange::USD("2022-10-14".to_string()), 4.9569f64); - exchange_rates.insert(Exchange::USD("2014-05-06".to_string()), 3.0196f64); - exchange_rates.insert(Exchange::USD("2021-03-15".to_string()), 3.8429f64); - exchange_rates.insert(Exchange::USD("2023-03-30".to_string()), 4.3043f64); - exchange_rates.insert(Exchange::USD("2021-06-22".to_string()), 3.8132f64); - exchange_rates.insert(Exchange::USD("2021-01-25".to_string()), 3.7402f64); - exchange_rates.insert(Exchange::USD("2018-02-28".to_string()), 3.4188f64); - exchange_rates.insert(Exchange::EUR("2024-01-24".to_string()), 4.3755f64); - exchange_rates.insert(Exchange::USD("2024-01-25".to_string()), 4.0189f64); - exchange_rates.insert(Exchange::USD("2014-10-09".to_string()), 3.2776f64); - exchange_rates.insert(Exchange::EUR("2025-02-19".to_string()), 4.1582f64); - exchange_rates.insert(Exchange::USD("2025-03-05".to_string()), 3.8785f64); - exchange_rates.insert(Exchange::USD("2024-04-11".to_string()), 3.9707f64); - exchange_rates.insert(Exchange::USD("2024-07-15".to_string()), 3.896f64); - exchange_rates.insert(Exchange::EUR("2025-12-08".to_string()), 4.2289f64); - exchange_rates.insert(Exchange::USD("2013-08-22".to_string()), 3.1811f64); - exchange_rates.insert(Exchange::EUR("2024-05-02".to_string()), 4.3323f64); - exchange_rates.insert(Exchange::USD("2013-02-11".to_string()), 3.0991f64); - exchange_rates.insert(Exchange::EUR("2025-06-16".to_string()), 4.2612f64); - exchange_rates.insert(Exchange::USD("2017-08-14".to_string()), 3.6278f64); - exchange_rates.insert(Exchange::USD("2025-01-14".to_string()), 4.1658f64); - exchange_rates.insert(Exchange::USD("2012-01-03".to_string()), 3.4277f64); - exchange_rates.insert(Exchange::USD("2016-12-02".to_string()), 4.215f64); - exchange_rates.insert(Exchange::USD("2018-08-31".to_string()), 3.6808f64); - exchange_rates.insert(Exchange::USD("2025-12-03".to_string()), 3.6333f64); - exchange_rates.insert(Exchange::USD("2020-02-12".to_string()), 3.901f64); - exchange_rates.insert(Exchange::USD("2013-02-05".to_string()), 3.0831f64); - exchange_rates.insert(Exchange::USD("2016-03-15".to_string()), 3.8649f64); - exchange_rates.insert(Exchange::USD("2015-09-15".to_string()), 3.7238f64); - exchange_rates.insert(Exchange::USD("2013-06-28".to_string()), 3.3175f64); - exchange_rates.insert(Exchange::USD("2012-08-17".to_string()), 3.2886f64); - exchange_rates.insert(Exchange::USD("2015-07-16".to_string()), 3.7694f64); - exchange_rates.insert(Exchange::USD("2025-10-02".to_string()), 3.621f64); - exchange_rates.insert(Exchange::USD("2014-08-12".to_string()), 3.1465f64); - exchange_rates.insert(Exchange::USD("2012-10-04".to_string()), 3.1646f64); - exchange_rates.insert(Exchange::USD("2016-05-17".to_string()), 3.8508f64); - exchange_rates.insert(Exchange::USD("2018-06-22".to_string()), 3.6977f64); - exchange_rates.insert(Exchange::USD("2022-01-21".to_string()), 3.9953f64); - exchange_rates.insert(Exchange::USD("2019-08-29".to_string()), 3.9586f64); - exchange_rates.insert(Exchange::USD("2021-03-10".to_string()), 3.842f64); - exchange_rates.insert(Exchange::USD("2018-06-07".to_string()), 3.6062f64); - exchange_rates.insert(Exchange::USD("2016-07-25".to_string()), 3.9697f64); - exchange_rates.insert(Exchange::USD("2024-02-02".to_string()), 3.9641f64); - exchange_rates.insert(Exchange::USD("2020-11-04".to_string()), 3.8996f64); - exchange_rates.insert(Exchange::USD("2014-01-09".to_string()), 3.0695f64); - exchange_rates.insert(Exchange::USD("2014-01-17".to_string()), 3.0596f64); - exchange_rates.insert(Exchange::USD("2013-07-15".to_string()), 3.2955f64); - exchange_rates.insert(Exchange::USD("2025-07-15".to_string()), 3.6396f64); - exchange_rates.insert(Exchange::USD("2017-07-04".to_string()), 3.7372f64); - exchange_rates.insert(Exchange::USD("2013-06-27".to_string()), 3.3241f64); - exchange_rates.insert(Exchange::USD("2014-09-12".to_string()), 3.2468f64); - exchange_rates.insert(Exchange::USD("2016-06-01".to_string()), 3.935f64); - exchange_rates.insert(Exchange::USD("2019-06-19".to_string()), 3.8104f64); - exchange_rates.insert(Exchange::EUR("2023-02-08".to_string()), 4.7402f64); - exchange_rates.insert(Exchange::USD("2018-02-20".to_string()), 3.3597f64); - exchange_rates.insert(Exchange::USD("2024-06-17".to_string()), 4.0728f64); - exchange_rates.insert(Exchange::USD("2016-08-09".to_string()), 3.8482f64); - exchange_rates.insert(Exchange::EUR("2025-02-27".to_string()), 4.1371f64); - exchange_rates.insert(Exchange::EUR("2025-07-08".to_string()), 4.2455f64); - exchange_rates.insert(Exchange::EUR("2025-09-02".to_string()), 4.2651f64); - exchange_rates.insert(Exchange::USD("2017-03-20".to_string()), 3.9821f64); - exchange_rates.insert(Exchange::USD("2018-02-15".to_string()), 3.3259f64); - exchange_rates.insert(Exchange::EUR("2023-02-07".to_string()), 4.7476f64); - exchange_rates.insert(Exchange::USD("2021-06-08".to_string()), 3.669f64); - exchange_rates.insert(Exchange::USD("2014-05-02".to_string()), 3.0289f64); - exchange_rates.insert(Exchange::USD("2012-01-23".to_string()), 3.3353f64); - exchange_rates.insert(Exchange::USD("2016-03-29".to_string()), 3.8037f64); - exchange_rates.insert(Exchange::USD("2025-02-27".to_string()), 3.9459f64); - exchange_rates.insert(Exchange::USD("2019-03-11".to_string()), 3.8199f64); - exchange_rates.insert(Exchange::EUR("2023-11-09".to_string()), 4.4413f64); - exchange_rates.insert(Exchange::USD("2025-08-11".to_string()), 3.6495f64); - exchange_rates.insert(Exchange::USD("2023-01-05".to_string()), 4.397f64); - exchange_rates.insert(Exchange::USD("2024-02-05".to_string()), 4.0244f64); - exchange_rates.insert(Exchange::USD("2013-12-06".to_string()), 3.0673f64); - exchange_rates.insert(Exchange::EUR("2023-10-25".to_string()), 4.4758f64); - exchange_rates.insert(Exchange::EUR("2024-02-26".to_string()), 4.3117f64); - exchange_rates.insert(Exchange::USD("2024-11-21".to_string()), 4.1332f64); - exchange_rates.insert(Exchange::USD("2014-12-05".to_string()), 3.3619f64); - exchange_rates.insert(Exchange::USD("2020-02-13".to_string()), 3.9104f64); - exchange_rates.insert(Exchange::USD("2020-10-08".to_string()), 3.8175f64); - exchange_rates.insert(Exchange::USD("2013-01-14".to_string()), 3.0828f64); - exchange_rates.insert(Exchange::USD("2013-12-10".to_string()), 3.0425f64); - exchange_rates.insert(Exchange::USD("2024-12-06".to_string()), 4.0341f64); - exchange_rates.insert(Exchange::USD("2018-04-05".to_string()), 3.4301f64); - exchange_rates.insert(Exchange::USD("2020-06-02".to_string()), 3.9303f64); - exchange_rates.insert(Exchange::EUR("2025-09-23".to_string()), 4.2552f64); - exchange_rates.insert(Exchange::USD("2017-01-11".to_string()), 4.1465f64); - exchange_rates.insert(Exchange::EUR("2025-05-19".to_string()), 4.2785f64); - exchange_rates.insert(Exchange::USD("2022-03-07".to_string()), 4.5722f64); - exchange_rates.insert(Exchange::EUR("2024-07-30".to_string()), 4.2845f64); - exchange_rates.insert(Exchange::EUR("2023-01-02".to_string()), 4.6784f64); - exchange_rates.insert(Exchange::USD("2022-04-29".to_string()), 4.4072f64); - exchange_rates.insert(Exchange::USD("2018-02-22".to_string()), 3.4009f64); - exchange_rates.insert(Exchange::USD("2024-03-19".to_string()), 3.9866f64); - exchange_rates.insert(Exchange::USD("2016-07-18".to_string()), 3.9853f64); - exchange_rates.insert(Exchange::USD("2021-02-05".to_string()), 3.7554f64); - exchange_rates.insert(Exchange::EUR("2023-12-20".to_string()), 4.3341f64); - exchange_rates.insert(Exchange::EUR("2023-08-29".to_string()), 4.469f64); - exchange_rates.insert(Exchange::USD("2023-01-10".to_string()), 4.372f64); - exchange_rates.insert(Exchange::USD("2022-02-10".to_string()), 3.9218f64); - exchange_rates.insert(Exchange::USD("2018-04-06".to_string()), 3.4315f64); - exchange_rates.insert(Exchange::USD("2025-12-08".to_string()), 3.63f64); - exchange_rates.insert(Exchange::USD("2024-11-19".to_string()), 4.1052f64); - exchange_rates.insert(Exchange::USD("2019-08-01".to_string()), 3.886f64); - exchange_rates.insert(Exchange::USD("2024-09-02".to_string()), 3.8684f64); - exchange_rates.insert(Exchange::USD("2016-03-09".to_string()), 3.9395f64); - exchange_rates.insert(Exchange::USD("2023-08-14".to_string()), 4.0525f64); - exchange_rates.insert(Exchange::USD("2020-03-23".to_string()), 4.2654f64); - exchange_rates.insert(Exchange::USD("2018-07-27".to_string()), 3.6937f64); - exchange_rates.insert(Exchange::USD("2012-07-10".to_string()), 3.4145f64); - exchange_rates.insert(Exchange::EUR("2023-05-17".to_string()), 4.4945f64); - exchange_rates.insert(Exchange::USD("2018-12-10".to_string()), 3.76f64); - exchange_rates.insert(Exchange::USD("2017-01-31".to_string()), 4.0446f64); - exchange_rates.insert(Exchange::USD("2012-03-20".to_string()), 3.1288f64); - exchange_rates.insert(Exchange::EUR("2023-07-10".to_string()), 4.4553f64); - exchange_rates.insert(Exchange::USD("2022-06-30".to_string()), 4.4825f64); - exchange_rates.insert(Exchange::USD("2012-11-09".to_string()), 3.2588f64); - exchange_rates.insert(Exchange::USD("2018-02-19".to_string()), 3.3411f64); - exchange_rates.insert(Exchange::USD("2024-10-30".to_string()), 3.9989f64); - exchange_rates.insert(Exchange::USD("2019-02-14".to_string()), 3.8516f64); - exchange_rates.insert(Exchange::USD("2022-01-31".to_string()), 4.1147f64); - exchange_rates.insert(Exchange::USD("2018-07-12".to_string()), 3.7055f64); - exchange_rates.insert(Exchange::USD("2019-08-19".to_string()), 3.9199f64); - exchange_rates.insert(Exchange::USD("2025-09-17".to_string()), 3.5919f64); - exchange_rates.insert(Exchange::USD("2015-06-17".to_string()), 3.6873f64); - exchange_rates.insert(Exchange::USD("2012-06-14".to_string()), 3.442f64); - exchange_rates.insert(Exchange::EUR("2023-08-04".to_string()), 4.4438f64); - exchange_rates.insert(Exchange::USD("2017-04-24".to_string()), 3.906f64); - exchange_rates.insert(Exchange::USD("2020-05-11".to_string()), 4.2126f64); - exchange_rates.insert(Exchange::USD("2022-12-12".to_string()), 4.4424f64); - exchange_rates.insert(Exchange::EUR("2023-10-16".to_string()), 4.4804f64); - exchange_rates.insert(Exchange::USD("2012-01-09".to_string()), 3.515f64); - exchange_rates.insert(Exchange::USD("2025-04-24".to_string()), 3.7599f64); - exchange_rates.insert(Exchange::USD("2023-08-22".to_string()), 4.0924f64); - exchange_rates.insert(Exchange::USD("2017-11-15".to_string()), 3.5886f64); - exchange_rates.insert(Exchange::USD("2018-06-27".to_string()), 3.7351f64); - exchange_rates.insert(Exchange::USD("2015-12-11".to_string()), 3.9718f64); - exchange_rates.insert(Exchange::USD("2013-09-03".to_string()), 3.2433f64); - exchange_rates.insert(Exchange::USD("2017-11-20".to_string()), 3.5909f64); - exchange_rates.insert(Exchange::EUR("2023-11-03".to_string()), 4.4569f64); - exchange_rates.insert(Exchange::EUR("2025-11-20".to_string()), 4.2289f64); - exchange_rates.insert(Exchange::USD("2019-06-28".to_string()), 3.7336f64); - exchange_rates.insert(Exchange::USD("2022-06-22".to_string()), 4.4338f64); - exchange_rates.insert(Exchange::USD("2016-09-29".to_string()), 3.8354f64); - exchange_rates.insert(Exchange::EUR("2025-08-29".to_string()), 4.2684f64); - exchange_rates.insert(Exchange::USD("2025-04-10".to_string()), 3.8637f64); - exchange_rates.insert(Exchange::USD("2018-05-15".to_string()), 3.5931f64); - exchange_rates.insert(Exchange::USD("2018-12-06".to_string()), 3.7844f64); - exchange_rates.insert(Exchange::USD("2017-10-12".to_string()), 3.6f64); - exchange_rates.insert(Exchange::USD("2019-03-18".to_string()), 3.7876f64); - exchange_rates.insert(Exchange::USD("2016-03-11".to_string()), 3.8903f64); - exchange_rates.insert(Exchange::USD("2023-01-18".to_string()), 4.3322f64); - exchange_rates.insert(Exchange::USD("2018-11-27".to_string()), 3.7948f64); - exchange_rates.insert(Exchange::USD("2016-10-10".to_string()), 3.8307f64); - exchange_rates.insert(Exchange::USD("2020-05-22".to_string()), 4.1503f64); - exchange_rates.insert(Exchange::EUR("2024-12-18".to_string()), 4.2628f64); - exchange_rates.insert(Exchange::EUR("2025-02-14".to_string()), 4.1632f64); - exchange_rates.insert(Exchange::USD("2021-10-20".to_string()), 3.9428f64); - exchange_rates.insert(Exchange::USD("2023-07-17".to_string()), 3.9616f64); - exchange_rates.insert(Exchange::USD("2021-05-10".to_string()), 3.7493f64); - exchange_rates.insert(Exchange::EUR("2024-11-15".to_string()), 4.3198f64); - exchange_rates.insert(Exchange::USD("2025-06-02".to_string()), 3.7282f64); - exchange_rates.insert(Exchange::EUR("2025-01-02".to_string()), 4.2668f64); - exchange_rates.insert(Exchange::USD("2013-06-12".to_string()), 3.2002f64); - exchange_rates.insert(Exchange::USD("2020-06-18".to_string()), 3.9589f64); - exchange_rates.insert(Exchange::USD("2017-11-09".to_string()), 3.6466f64); - exchange_rates.insert(Exchange::USD("2013-09-04".to_string()), 3.2387f64); - exchange_rates.insert(Exchange::USD("2023-10-23".to_string()), 4.2022f64); - exchange_rates.insert(Exchange::USD("2024-02-22".to_string()), 3.9804f64); - exchange_rates.insert(Exchange::USD("2018-08-07".to_string()), 3.6722f64); - exchange_rates.insert(Exchange::USD("2016-09-09".to_string()), 3.8385f64); - exchange_rates.insert(Exchange::USD("2025-12-17".to_string()), 3.5976f64); - exchange_rates.insert(Exchange::USD("2018-12-04".to_string()), 3.7516f64); - exchange_rates.insert(Exchange::USD("2018-12-31".to_string()), 3.7597f64); - exchange_rates.insert(Exchange::USD("2019-07-23".to_string()), 3.7997f64); - exchange_rates.insert(Exchange::USD("2012-03-26".to_string()), 3.1348f64); - exchange_rates.insert(Exchange::EUR("2024-06-19".to_string()), 4.3376f64); - exchange_rates.insert(Exchange::USD("2012-10-05".to_string()), 3.1353f64); - exchange_rates.insert(Exchange::USD("2021-08-19".to_string()), 3.9226f64); - exchange_rates.insert(Exchange::EUR("2023-02-14".to_string()), 4.7847f64); - exchange_rates.insert(Exchange::EUR("2024-05-29".to_string()), 4.2529f64); - exchange_rates.insert(Exchange::USD("2024-11-27".to_string()), 4.0974f64); - exchange_rates.insert(Exchange::USD("2017-05-02".to_string()), 3.8675f64); - exchange_rates.insert(Exchange::USD("2024-10-23".to_string()), 4.0176f64); - exchange_rates.insert(Exchange::EUR("2025-04-04".to_string()), 4.2403f64); - exchange_rates.insert(Exchange::USD("2014-07-10".to_string()), 3.0323f64); - exchange_rates.insert(Exchange::USD("2018-11-28".to_string()), 3.8114f64); - exchange_rates.insert(Exchange::USD("2012-10-02".to_string()), 3.1833f64); - exchange_rates.insert(Exchange::USD("2018-07-23".to_string()), 3.6957f64); - exchange_rates.insert(Exchange::USD("2021-09-20".to_string()), 3.9282f64); - exchange_rates.insert(Exchange::EUR("2024-12-20".to_string()), 4.2572f64); - exchange_rates.insert(Exchange::USD("2016-01-21".to_string()), 4.1303f64); - exchange_rates.insert(Exchange::USD("2022-12-23".to_string()), 4.37f64); - exchange_rates.insert(Exchange::USD("2025-07-29".to_string()), 3.6941f64); - exchange_rates.insert(Exchange::USD("2015-07-17".to_string()), 3.7676f64); - exchange_rates.insert(Exchange::USD("2017-09-25".to_string()), 3.5866f64); - exchange_rates.insert(Exchange::EUR("2024-03-26".to_string()), 4.3093f64); - exchange_rates.insert(Exchange::USD("2022-09-06".to_string()), 4.7367f64); - exchange_rates.insert(Exchange::EUR("2024-08-30".to_string()), 4.2798f64); - exchange_rates.insert(Exchange::EUR("2024-02-12".to_string()), 4.328f64); - exchange_rates.insert(Exchange::USD("2022-04-20".to_string()), 4.2708f64); - exchange_rates.insert(Exchange::USD("2024-01-24".to_string()), 4.0131f64); - exchange_rates.insert(Exchange::EUR("2024-06-06".to_string()), 4.2997f64); - exchange_rates.insert(Exchange::EUR("2023-10-26".to_string()), 4.4708f64); - exchange_rates.insert(Exchange::EUR("2025-08-08".to_string()), 4.2566f64); - exchange_rates.insert(Exchange::USD("2015-06-25".to_string()), 3.7305f64); - exchange_rates.insert(Exchange::USD("2017-06-14".to_string()), 3.7497f64); - exchange_rates.insert(Exchange::USD("2022-10-28".to_string()), 4.7477f64); - exchange_rates.insert(Exchange::USD("2022-02-25".to_string()), 4.1683f64); - exchange_rates.insert(Exchange::USD("2018-10-16".to_string()), 3.7036f64); - exchange_rates.insert(Exchange::USD("2023-02-21".to_string()), 4.4524f64); - exchange_rates.insert(Exchange::USD("2014-04-07".to_string()), 3.0446f64); - exchange_rates.insert(Exchange::USD("2014-05-28".to_string()), 3.0598f64); - exchange_rates.insert(Exchange::USD("2013-10-02".to_string()), 3.1212f64); - exchange_rates.insert(Exchange::USD("2023-03-06".to_string()), 4.4289f64); - exchange_rates.insert(Exchange::EUR("2023-04-06".to_string()), 4.6902f64); - exchange_rates.insert(Exchange::USD("2021-10-04".to_string()), 3.9368f64); - exchange_rates.insert(Exchange::USD("2021-09-08".to_string()), 3.8213f64); - exchange_rates.insert(Exchange::USD("2025-08-29".to_string()), 3.6559f64); - exchange_rates.insert(Exchange::USD("2024-04-17".to_string()), 4.0741f64); - exchange_rates.insert(Exchange::USD("2017-07-27".to_string()), 3.6366f64); - exchange_rates.insert(Exchange::USD("2012-03-22".to_string()), 3.168f64); - exchange_rates.insert(Exchange::USD("2020-08-28".to_string()), 3.6983f64); - exchange_rates.insert(Exchange::USD("2018-03-21".to_string()), 3.4544f64); - exchange_rates.insert(Exchange::USD("2013-03-15".to_string()), 3.1868f64); - exchange_rates.insert(Exchange::USD("2019-02-06".to_string()), 3.7706f64); - exchange_rates.insert(Exchange::USD("2022-10-24".to_string()), 4.8669f64); - exchange_rates.insert(Exchange::USD("2023-10-18".to_string()), 4.2035f64); - exchange_rates.insert(Exchange::USD("2023-04-11".to_string()), 4.2917f64); - exchange_rates.insert(Exchange::USD("2023-12-22".to_string()), 3.9338f64); - exchange_rates.insert(Exchange::USD("2014-04-17".to_string()), 3.0317f64); - exchange_rates.insert(Exchange::USD("2025-01-28".to_string()), 4.0337f64); - exchange_rates.insert(Exchange::USD("2025-11-26".to_string()), 3.6578f64); - exchange_rates.insert(Exchange::USD("2012-05-24".to_string()), 3.4779f64); - exchange_rates.insert(Exchange::USD("2022-09-21".to_string()), 4.7919f64); - exchange_rates.insert(Exchange::USD("2013-12-20".to_string()), 3.0525f64); - exchange_rates.insert(Exchange::USD("2017-04-14".to_string()), 3.9911f64); - exchange_rates.insert(Exchange::EUR("2025-11-24".to_string()), 4.2345f64); - exchange_rates.insert(Exchange::EUR("2025-03-04".to_string()), 4.1568f64); - exchange_rates.insert(Exchange::EUR("2023-09-15".to_string()), 4.6307f64); - exchange_rates.insert(Exchange::EUR("2023-11-13".to_string()), 4.4336f64); - exchange_rates.insert(Exchange::USD("2012-12-10".to_string()), 3.1978f64); - exchange_rates.insert(Exchange::USD("2012-12-17".to_string()), 3.1035f64); - exchange_rates.insert(Exchange::EUR("2024-09-19".to_string()), 4.2693f64); - exchange_rates.insert(Exchange::USD("2022-01-10".to_string()), 4.0064f64); - exchange_rates.insert(Exchange::USD("2016-04-14".to_string()), 3.8174f64); - exchange_rates.insert(Exchange::EUR("2024-05-06".to_string()), 4.3294f64); - exchange_rates.insert(Exchange::USD("2012-07-11".to_string()), 3.4007f64); - exchange_rates.insert(Exchange::USD("2019-02-04".to_string()), 3.7408f64); - exchange_rates.insert(Exchange::USD("2015-05-18".to_string()), 3.555f64); - exchange_rates.insert(Exchange::EUR("2023-08-30".to_string()), 4.474f64); - exchange_rates.insert(Exchange::USD("2025-04-29".to_string()), 3.7458f64); - exchange_rates.insert(Exchange::USD("2018-07-26".to_string()), 3.6649f64); - exchange_rates.insert(Exchange::USD("2023-05-31".to_string()), 4.2559f64); - exchange_rates.insert(Exchange::USD("2013-07-03".to_string()), 3.3516f64); - exchange_rates.insert(Exchange::USD("2021-02-24".to_string()), 3.7145f64); - exchange_rates.insert(Exchange::USD("2015-05-28".to_string()), 3.7858f64); - exchange_rates.insert(Exchange::EUR("2024-07-25".to_string()), 4.2971f64); - exchange_rates.insert(Exchange::USD("2024-03-05".to_string()), 3.9838f64); - exchange_rates.insert(Exchange::USD("2018-12-07".to_string()), 3.7694f64); - exchange_rates.insert(Exchange::USD("2024-03-07".to_string()), 3.9485f64); - exchange_rates.insert(Exchange::USD("2019-08-27".to_string()), 3.9309f64); - exchange_rates.insert(Exchange::USD("2018-05-22".to_string()), 3.6252f64); - exchange_rates.insert(Exchange::USD("2015-12-10".to_string()), 3.9601f64); - exchange_rates.insert(Exchange::USD("2014-12-10".to_string()), 3.3572f64); - exchange_rates.insert(Exchange::USD("2013-09-30".to_string()), 3.1227f64); - exchange_rates.insert(Exchange::USD("2021-01-11".to_string()), 3.7271f64); - exchange_rates.insert(Exchange::EUR("2024-06-20".to_string()), 4.3238f64); - exchange_rates.insert(Exchange::USD("2022-11-29".to_string()), 4.5164f64); - exchange_rates.insert(Exchange::USD("2018-12-13".to_string()), 3.7739f64); - exchange_rates.insert(Exchange::USD("2021-08-06".to_string()), 3.8519f64); - exchange_rates.insert(Exchange::USD("2023-12-20".to_string()), 3.9527f64); - exchange_rates.insert(Exchange::USD("2018-05-02".to_string()), 3.5563f64); - exchange_rates.insert(Exchange::USD("2016-07-14".to_string()), 3.9681f64); - exchange_rates.insert(Exchange::USD("2020-09-21".to_string()), 3.7963f64); - exchange_rates.insert(Exchange::USD("2016-01-22".to_string()), 4.1031f64); - exchange_rates.insert(Exchange::USD("2024-08-01".to_string()), 3.9802f64); - exchange_rates.insert(Exchange::USD("2015-12-15".to_string()), 3.9523f64); - exchange_rates.insert(Exchange::EUR("2025-09-03".to_string()), 4.2589f64); - exchange_rates.insert(Exchange::USD("2012-12-03".to_string()), 3.1498f64); - exchange_rates.insert(Exchange::EUR("2025-10-02".to_string()), 4.256f64); - exchange_rates.insert(Exchange::USD("2023-07-28".to_string()), 4.0377f64); - exchange_rates.insert(Exchange::USD("2019-06-05".to_string()), 3.7929f64); - exchange_rates.insert(Exchange::EUR("2024-05-23".to_string()), 4.2699f64); - exchange_rates.insert(Exchange::USD("2025-09-23".to_string()), 3.605f64); - exchange_rates.insert(Exchange::USD("2022-10-21".to_string()), 4.9f64); - exchange_rates.insert(Exchange::USD("2016-10-28".to_string()), 3.9696f64); - exchange_rates.insert(Exchange::USD("2025-10-10".to_string()), 3.6778f64); - exchange_rates.insert(Exchange::USD("2015-02-03".to_string()), 3.6886f64); - exchange_rates.insert(Exchange::EUR("2023-06-27".to_string()), 4.4286f64); - exchange_rates.insert(Exchange::USD("2025-01-30".to_string()), 4.0393f64); - exchange_rates.insert(Exchange::EUR("2025-10-28".to_string()), 4.2345f64); - exchange_rates.insert(Exchange::USD("2019-03-26".to_string()), 3.7969f64); - exchange_rates.insert(Exchange::EUR("2023-04-24".to_string()), 4.6129f64); - exchange_rates.insert(Exchange::USD("2025-02-21".to_string()), 3.9835f64); - exchange_rates.insert(Exchange::EUR("2025-12-16".to_string()), 4.2239f64); - exchange_rates.insert(Exchange::USD("2014-08-25".to_string()), 3.168f64); - exchange_rates.insert(Exchange::USD("2012-08-02".to_string()), 3.3462f64); - exchange_rates.insert(Exchange::USD("2021-06-11".to_string()), 3.6759f64); - exchange_rates.insert(Exchange::EUR("2025-12-22".to_string()), 4.2115f64); - exchange_rates.insert(Exchange::USD("2015-08-31".to_string()), 3.778f64); - exchange_rates.insert(Exchange::USD("2020-07-07".to_string()), 3.9689f64); - exchange_rates.insert(Exchange::USD("2022-12-13".to_string()), 4.4527f64); - exchange_rates.insert(Exchange::USD("2019-03-07".to_string()), 3.8038f64); - exchange_rates.insert(Exchange::EUR("2025-03-20".to_string()), 4.1972f64); - exchange_rates.insert(Exchange::USD("2015-08-20".to_string()), 3.7659f64); - exchange_rates.insert(Exchange::USD("2013-11-21".to_string()), 3.1227f64); - exchange_rates.insert(Exchange::USD("2022-10-11".to_string()), 5.0171f64); - exchange_rates.insert(Exchange::USD("2023-03-09".to_string()), 4.4356f64); - exchange_rates.insert(Exchange::USD("2018-12-11".to_string()), 3.7763f64); - exchange_rates.insert(Exchange::USD("2014-10-31".to_string()), 3.3459f64); - exchange_rates.insert(Exchange::USD("2023-01-09".to_string()), 4.401f64); - exchange_rates.insert(Exchange::USD("2021-07-12".to_string()), 3.8378f64); - exchange_rates.insert(Exchange::USD("2021-01-18".to_string()), 3.7699f64); - exchange_rates.insert(Exchange::EUR("2025-05-26".to_string()), 4.2514f64); - exchange_rates.insert(Exchange::USD("2022-09-02".to_string()), 4.7276f64); - exchange_rates.insert(Exchange::EUR("2023-12-13".to_string()), 4.3309f64); - exchange_rates.insert(Exchange::USD("2025-02-04".to_string()), 4.0864f64); - exchange_rates.insert(Exchange::USD("2019-02-20".to_string()), 3.8221f64); - exchange_rates.insert(Exchange::USD("2016-08-11".to_string()), 3.8297f64); - exchange_rates.insert(Exchange::USD("2020-06-09".to_string()), 3.9453f64); - exchange_rates.insert(Exchange::USD("2012-02-15".to_string()), 3.166f64); - exchange_rates.insert(Exchange::USD("2021-10-08".to_string()), 3.9775f64); - exchange_rates.insert(Exchange::USD("2016-10-26".to_string()), 3.9517f64); - exchange_rates.insert(Exchange::USD("2017-08-17".to_string()), 3.6258f64); - exchange_rates.insert(Exchange::USD("2012-08-14".to_string()), 3.3059f64); - exchange_rates.insert(Exchange::USD("2012-08-08".to_string()), 3.304f64); - exchange_rates.insert(Exchange::USD("2023-09-18".to_string()), 4.3489f64); - exchange_rates.insert(Exchange::USD("2014-09-24".to_string()), 3.2525f64); - exchange_rates.insert(Exchange::USD("2014-07-24".to_string()), 3.0702f64); - exchange_rates.insert(Exchange::USD("2020-10-06".to_string()), 3.818f64); - exchange_rates.insert(Exchange::EUR("2025-03-07".to_string()), 4.176f64); - exchange_rates.insert(Exchange::EUR("2023-09-14".to_string()), 4.6285f64); - exchange_rates.insert(Exchange::EUR("2024-06-27".to_string()), 4.3085f64); - exchange_rates.insert(Exchange::USD("2024-06-04".to_string()), 3.9448f64); - exchange_rates.insert(Exchange::USD("2024-01-26".to_string()), 4.0393f64); - exchange_rates.insert(Exchange::EUR("2025-02-17".to_string()), 4.1635f64); - exchange_rates.insert(Exchange::USD("2012-03-23".to_string()), 3.1417f64); - exchange_rates.insert(Exchange::USD("2017-10-31".to_string()), 3.6529f64); - exchange_rates.insert(Exchange::EUR("2023-03-16".to_string()), 4.6978f64); - exchange_rates.insert(Exchange::USD("2024-04-26".to_string()), 4.0245f64); - exchange_rates.insert(Exchange::USD("2025-08-22".to_string()), 3.6786f64); - exchange_rates.insert(Exchange::USD("2013-10-01".to_string()), 3.117f64); - exchange_rates.insert(Exchange::USD("2014-09-26".to_string()), 3.2776f64); - exchange_rates.insert(Exchange::USD("2024-07-19".to_string()), 3.9461f64); - exchange_rates.insert(Exchange::USD("2016-07-08".to_string()), 4.0001f64); - exchange_rates.insert(Exchange::USD("2017-01-18".to_string()), 4.087f64); - exchange_rates.insert(Exchange::USD("2016-06-27".to_string()), 4.0263f64); - exchange_rates.insert(Exchange::USD("2017-04-04".to_string()), 3.989f64); - exchange_rates.insert(Exchange::USD("2013-04-16".to_string()), 3.1559f64); - exchange_rates.insert(Exchange::USD("2015-10-22".to_string()), 3.7806f64); - exchange_rates.insert(Exchange::USD("2021-07-13".to_string()), 3.8533f64); - exchange_rates.insert(Exchange::USD("2013-12-13".to_string()), 3.0432f64); - exchange_rates.insert(Exchange::USD("2022-03-28".to_string()), 4.2784f64); - exchange_rates.insert(Exchange::EUR("2024-08-22".to_string()), 4.285f64); - exchange_rates.insert(Exchange::EUR("2025-04-28".to_string()), 4.2766f64); - exchange_rates.insert(Exchange::EUR("2024-02-07".to_string()), 4.3466f64); - exchange_rates.insert(Exchange::EUR("2025-02-13".to_string()), 4.1652f64); - exchange_rates.insert(Exchange::USD("2012-12-31".to_string()), 3.0996f64); - exchange_rates.insert(Exchange::USD("2019-08-12".to_string()), 3.8711f64); - exchange_rates.insert(Exchange::USD("2013-06-14".to_string()), 3.1654f64); - exchange_rates.insert(Exchange::USD("2015-04-14".to_string()), 3.8001f64); - exchange_rates.insert(Exchange::EUR("2023-01-12".to_string()), 4.6888f64); - exchange_rates.insert(Exchange::EUR("2023-11-23".to_string()), 4.3658f64); - exchange_rates.insert(Exchange::USD("2020-08-04".to_string()), 3.7364f64); - exchange_rates.insert(Exchange::USD("2025-05-22".to_string()), 3.7559f64); - exchange_rates.insert(Exchange::EUR("2025-09-09".to_string()), 4.254f64); - exchange_rates.insert(Exchange::USD("2018-09-11".to_string()), 3.7087f64); - exchange_rates.insert(Exchange::USD("2014-05-19".to_string()), 3.0558f64); - exchange_rates.insert(Exchange::USD("2022-11-16".to_string()), 4.505f64); - exchange_rates.insert(Exchange::EUR("2023-03-31".to_string()), 4.6755f64); - exchange_rates.insert(Exchange::USD("2025-06-16".to_string()), 3.6804f64); - exchange_rates.insert(Exchange::USD("2020-08-26".to_string()), 3.7269f64); - exchange_rates.insert(Exchange::USD("2019-04-11".to_string()), 3.7964f64); - exchange_rates.insert(Exchange::USD("2018-04-26".to_string()), 3.4827f64); - exchange_rates.insert(Exchange::USD("2018-11-20".to_string()), 3.79f64); - exchange_rates.insert(Exchange::USD("2018-11-13".to_string()), 3.8268f64); - exchange_rates.insert(Exchange::USD("2019-07-10".to_string()), 3.8066f64); - exchange_rates.insert(Exchange::USD("2017-01-25".to_string()), 4.0585f64); - exchange_rates.insert(Exchange::USD("2016-04-07".to_string()), 3.7414f64); - exchange_rates.insert(Exchange::USD("2025-07-23".to_string()), 3.626f64); - exchange_rates.insert(Exchange::USD("2017-12-22".to_string()), 3.5393f64); - exchange_rates.insert(Exchange::EUR("2025-07-24".to_string()), 4.2514f64); - exchange_rates.insert(Exchange::EUR("2023-08-16".to_string()), 4.4621f64); - exchange_rates.insert(Exchange::EUR("2024-02-23".to_string()), 4.3326f64); - exchange_rates.insert(Exchange::USD("2019-07-22".to_string()), 3.7869f64); - exchange_rates.insert(Exchange::USD("2021-09-07".to_string()), 3.8041f64); - exchange_rates.insert(Exchange::USD("2024-11-13".to_string()), 4.0853f64); - exchange_rates.insert(Exchange::USD("2016-12-14".to_string()), 4.1768f64); - exchange_rates.insert(Exchange::USD("2022-05-02".to_string()), 4.4454f64); - exchange_rates.insert(Exchange::USD("2019-08-08".to_string()), 3.8538f64); - exchange_rates.insert(Exchange::USD("2022-02-21".to_string()), 3.9769f64); - exchange_rates.insert(Exchange::EUR("2024-01-09".to_string()), 4.3351f64); - exchange_rates.insert(Exchange::USD("2020-03-31".to_string()), 4.1466f64); - exchange_rates.insert(Exchange::EUR("2024-09-20".to_string()), 4.2779f64); - exchange_rates.insert(Exchange::USD("2018-01-16".to_string()), 3.419f64); - exchange_rates.insert(Exchange::USD("2015-11-23".to_string()), 3.988f64); - exchange_rates.insert(Exchange::USD("2016-08-26".to_string()), 3.8328f64); - exchange_rates.insert(Exchange::USD("2023-07-13".to_string()), 3.9724f64); - exchange_rates.insert(Exchange::USD("2017-08-08".to_string()), 3.6027f64); - exchange_rates.insert(Exchange::USD("2012-02-14".to_string()), 3.1801f64); - exchange_rates.insert(Exchange::USD("2020-02-06".to_string()), 3.8672f64); - exchange_rates.insert(Exchange::USD("2013-11-15".to_string()), 3.1172f64); - exchange_rates.insert(Exchange::USD("2016-02-19".to_string()), 3.9531f64); - exchange_rates.insert(Exchange::USD("2025-11-05".to_string()), 3.7091f64); - exchange_rates.insert(Exchange::USD("2015-04-07".to_string()), 3.7435f64); - exchange_rates.insert(Exchange::USD("2013-02-28".to_string()), 3.1679f64); - exchange_rates.insert(Exchange::USD("2015-10-02".to_string()), 3.8028f64); - exchange_rates.insert(Exchange::USD("2015-12-17".to_string()), 3.9646f64); - exchange_rates.insert(Exchange::USD("2014-11-05".to_string()), 3.3887f64); - exchange_rates.insert(Exchange::USD("2024-06-10".to_string()), 4.0159f64); - exchange_rates.insert(Exchange::EUR("2024-04-17".to_string()), 4.3353f64); - exchange_rates.insert(Exchange::EUR("2024-10-15".to_string()), 4.2913f64); - exchange_rates.insert(Exchange::USD("2014-02-11".to_string()), 3.0581f64); - exchange_rates.insert(Exchange::EUR("2023-02-13".to_string()), 4.7895f64); - exchange_rates.insert(Exchange::USD("2024-10-15".to_string()), 3.9332f64); - exchange_rates.insert(Exchange::USD("2025-07-22".to_string()), 3.6353f64); - exchange_rates.insert(Exchange::USD("2023-12-13".to_string()), 4.0149f64); - exchange_rates.insert(Exchange::USD("2012-01-24".to_string()), 3.297f64); - exchange_rates.insert(Exchange::EUR("2024-10-22".to_string()), 4.3159f64); - exchange_rates.insert(Exchange::USD("2025-11-06".to_string()), 3.6971f64); - exchange_rates.insert(Exchange::USD("2021-07-23".to_string()), 3.8851f64); - exchange_rates.insert(Exchange::USD("2020-03-11".to_string()), 3.8186f64); - exchange_rates.insert(Exchange::EUR("2024-05-07".to_string()), 4.3116f64); - exchange_rates.insert(Exchange::USD("2017-05-31".to_string()), 3.7354f64); - exchange_rates.insert(Exchange::USD("2021-12-20".to_string()), 4.1182f64); - exchange_rates.insert(Exchange::USD("2025-03-14".to_string()), 3.8509f64); - exchange_rates.insert(Exchange::USD("2023-03-24".to_string()), 4.3742f64); - exchange_rates.insert(Exchange::USD("2020-04-03".to_string()), 4.2396f64); - exchange_rates.insert(Exchange::USD("2016-03-14".to_string()), 3.847f64); - exchange_rates.insert(Exchange::USD("2016-05-25".to_string()), 3.9684f64); - exchange_rates.insert(Exchange::USD("2012-04-16".to_string()), 3.2289f64); - exchange_rates.insert(Exchange::USD("2012-08-21".to_string()), 3.279f64); - exchange_rates.insert(Exchange::EUR("2025-07-10".to_string()), 4.2464f64); - exchange_rates.insert(Exchange::USD("2020-10-30".to_string()), 3.9563f64); - exchange_rates.insert(Exchange::USD("2016-12-16".to_string()), 4.2296f64); - exchange_rates.insert(Exchange::USD("2023-08-10".to_string()), 4.0521f64); - exchange_rates.insert(Exchange::USD("2015-05-26".to_string()), 3.7898f64); - exchange_rates.insert(Exchange::USD("2022-11-07".to_string()), 4.6926f64); - exchange_rates.insert(Exchange::USD("2014-11-24".to_string()), 3.3842f64); - exchange_rates.insert(Exchange::EUR("2024-11-27".to_string()), 4.309f64); - exchange_rates.insert(Exchange::USD("2019-05-21".to_string()), 3.8625f64); - exchange_rates.insert(Exchange::USD("2016-01-19".to_string()), 4.0917f64); - exchange_rates.insert(Exchange::USD("2023-12-05".to_string()), 3.991f64); - exchange_rates.insert(Exchange::EUR("2023-05-05".to_string()), 4.5885f64); - exchange_rates.insert(Exchange::EUR("2024-04-09".to_string()), 4.2588f64); - exchange_rates.insert(Exchange::USD("2018-01-19".to_string()), 3.3994f64); - exchange_rates.insert(Exchange::EUR("2025-03-06".to_string()), 4.1766f64); - exchange_rates.insert(Exchange::EUR("2025-10-17".to_string()), 4.2565f64); - exchange_rates.insert(Exchange::EUR("2025-01-27".to_string()), 4.2176f64); - exchange_rates.insert(Exchange::USD("2017-12-04".to_string()), 3.5499f64); - exchange_rates.insert(Exchange::USD("2024-02-07".to_string()), 4.0362f64); - exchange_rates.insert(Exchange::USD("2017-07-11".to_string()), 3.7235f64); - exchange_rates.insert(Exchange::EUR("2024-05-22".to_string()), 4.2575f64); - exchange_rates.insert(Exchange::USD("2022-10-19".to_string()), 4.8892f64); - exchange_rates.insert(Exchange::USD("2020-03-25".to_string()), 4.222f64); - exchange_rates.insert(Exchange::EUR("2024-06-10".to_string()), 4.3197f64); - exchange_rates.insert(Exchange::USD("2022-02-14".to_string()), 4.0439f64); - exchange_rates.insert(Exchange::USD("2022-07-26".to_string()), 4.6222f64); - exchange_rates.insert(Exchange::USD("2020-01-17".to_string()), 3.8053f64); - exchange_rates.insert(Exchange::USD("2015-02-27".to_string()), 3.698f64); - exchange_rates.insert(Exchange::USD("2014-05-08".to_string()), 3.0042f64); - exchange_rates.insert(Exchange::USD("2019-11-19".to_string()), 3.8786f64); - exchange_rates.insert(Exchange::EUR("2024-03-07".to_string()), 4.3045f64); - exchange_rates.insert(Exchange::EUR("2023-02-03".to_string()), 4.692f64); - exchange_rates.insert(Exchange::USD("2016-09-19".to_string()), 3.8586f64); - exchange_rates.insert(Exchange::USD("2019-12-02".to_string()), 3.9047f64); - exchange_rates.insert(Exchange::EUR("2025-04-23".to_string()), 4.2893f64); - exchange_rates.insert(Exchange::USD("2020-01-14".to_string()), 3.8019f64); - exchange_rates.insert(Exchange::USD("2023-06-07".to_string()), 4.1887f64); - exchange_rates.insert(Exchange::USD("2018-07-03".to_string()), 3.7723f64); - exchange_rates.insert(Exchange::USD("2017-09-04".to_string()), 3.5718f64); - exchange_rates.insert(Exchange::USD("2017-10-02".to_string()), 3.6726f64); - exchange_rates.insert(Exchange::USD("2014-09-29".to_string()), 3.3f64); - exchange_rates.insert(Exchange::USD("2015-12-24".to_string()), 3.8695f64); - exchange_rates.insert(Exchange::USD("2023-07-26".to_string()), 3.9949f64); - exchange_rates.insert(Exchange::USD("2023-10-11".to_string()), 4.2589f64); - exchange_rates.insert(Exchange::USD("2014-01-10".to_string()), 3.07f64); - exchange_rates.insert(Exchange::USD("2022-03-08".to_string()), 4.5115f64); - exchange_rates.insert(Exchange::USD("2024-04-24".to_string()), 4.0417f64); - exchange_rates.insert(Exchange::USD("2024-09-27".to_string()), 3.8368f64); - exchange_rates.insert(Exchange::USD("2016-05-20".to_string()), 3.9358f64); - exchange_rates.insert(Exchange::USD("2023-04-19".to_string()), 4.2244f64); - exchange_rates.insert(Exchange::USD("2014-09-03".to_string()), 3.1912f64); - exchange_rates.insert(Exchange::USD("2019-01-15".to_string()), 3.7542f64); - exchange_rates.insert(Exchange::USD("2015-12-08".to_string()), 3.9877f64); - exchange_rates.insert(Exchange::USD("2015-10-26".to_string()), 3.8645f64); - exchange_rates.insert(Exchange::EUR("2023-03-02".to_string()), 4.675f64); - exchange_rates.insert(Exchange::EUR("2023-09-11".to_string()), 4.6209f64); - exchange_rates.insert(Exchange::USD("2023-05-10".to_string()), 4.1532f64); - exchange_rates.insert(Exchange::USD("2017-10-26".to_string()), 3.5939f64); - exchange_rates.insert(Exchange::USD("2013-07-17".to_string()), 3.241f64); - exchange_rates.insert(Exchange::USD("2021-12-09".to_string()), 4.0837f64); - exchange_rates.insert(Exchange::USD("2022-01-04".to_string()), 4.0468f64); - exchange_rates.insert(Exchange::USD("2021-08-05".to_string()), 3.8485f64); - exchange_rates.insert(Exchange::USD("2012-06-26".to_string()), 3.4088f64); - exchange_rates.insert(Exchange::EUR("2025-06-05".to_string()), 4.2791f64); - exchange_rates.insert(Exchange::USD("2023-09-25".to_string()), 4.3188f64); - exchange_rates.insert(Exchange::EUR("2023-06-21".to_string()), 4.4408f64); - exchange_rates.insert(Exchange::USD("2015-02-20".to_string()), 3.6895f64); - exchange_rates.insert(Exchange::USD("2015-03-23".to_string()), 3.818f64); - exchange_rates.insert(Exchange::USD("2023-02-28".to_string()), 4.4475f64); - exchange_rates.insert(Exchange::USD("2025-04-15".to_string()), 3.7692f64); - exchange_rates.insert(Exchange::USD("2017-11-17".to_string()), 3.5965f64); - exchange_rates.insert(Exchange::USD("2015-08-17".to_string()), 3.7613f64); - exchange_rates.insert(Exchange::USD("2020-05-19".to_string()), 4.1645f64); - exchange_rates.insert(Exchange::EUR("2024-03-06".to_string()), 4.3106f64); - exchange_rates.insert(Exchange::USD("2021-12-22".to_string()), 4.0984f64); - exchange_rates.insert(Exchange::USD("2018-02-21".to_string()), 3.3697f64); - exchange_rates.insert(Exchange::USD("2022-02-18".to_string()), 3.9798f64); - exchange_rates.insert(Exchange::USD("2017-02-22".to_string()), 4.0899f64); - exchange_rates.insert(Exchange::EUR("2023-10-10".to_string()), 4.5581f64); - exchange_rates.insert(Exchange::EUR("2025-04-07".to_string()), 4.2975f64); - exchange_rates.insert(Exchange::USD("2022-04-14".to_string()), 4.2581f64); - exchange_rates.insert(Exchange::USD("2014-10-15".to_string()), 3.3262f64); - exchange_rates.insert(Exchange::EUR("2025-03-13".to_string()), 4.196f64); - exchange_rates.insert(Exchange::USD("2013-01-03".to_string()), 3.1005f64); - exchange_rates.insert(Exchange::USD("2019-11-25".to_string()), 3.9036f64); - exchange_rates.insert(Exchange::USD("2021-10-27".to_string()), 3.9815f64); - exchange_rates.insert(Exchange::USD("2022-06-03".to_string()), 4.2689f64); - exchange_rates.insert(Exchange::USD("2014-04-11".to_string()), 3.0086f64); - exchange_rates.insert(Exchange::USD("2013-01-30".to_string()), 3.0938f64); - exchange_rates.insert(Exchange::EUR("2023-01-23".to_string()), 4.7186f64); - exchange_rates.insert(Exchange::EUR("2024-11-25".to_string()), 4.3319f64); - exchange_rates.insert(Exchange::EUR("2024-08-29".to_string()), 4.2862f64); - exchange_rates.insert(Exchange::USD("2013-09-18".to_string()), 3.1689f64); - exchange_rates.insert(Exchange::USD("2021-06-04".to_string()), 3.6931f64); - exchange_rates.insert(Exchange::USD("2018-10-29".to_string()), 3.793f64); - exchange_rates.insert(Exchange::USD("2021-10-25".to_string()), 3.9502f64); - exchange_rates.insert(Exchange::USD("2018-12-05".to_string()), 3.7832f64); - exchange_rates.insert(Exchange::USD("2014-08-27".to_string()), 3.1764f64); - exchange_rates.insert(Exchange::USD("2014-08-11".to_string()), 3.1378f64); - exchange_rates.insert(Exchange::EUR("2024-12-19".to_string()), 4.2633f64); - exchange_rates.insert(Exchange::EUR("2023-10-20".to_string()), 4.4675f64); - exchange_rates.insert(Exchange::USD("2024-11-14".to_string()), 4.122f64); - exchange_rates.insert(Exchange::EUR("2023-01-05".to_string()), 4.6709f64); - exchange_rates.insert(Exchange::EUR("2024-03-04".to_string()), 4.3201f64); - exchange_rates.insert(Exchange::USD("2022-05-19".to_string()), 4.4231f64); - exchange_rates.insert(Exchange::USD("2017-04-03".to_string()), 3.9664f64); - exchange_rates.insert(Exchange::USD("2016-02-17".to_string()), 3.9431f64); - exchange_rates.insert(Exchange::USD("2025-10-14".to_string()), 3.6897f64); - exchange_rates.insert(Exchange::USD("2020-10-09".to_string()), 3.7913f64); - exchange_rates.insert(Exchange::EUR("2023-03-01".to_string()), 4.6925f64); - exchange_rates.insert(Exchange::EUR("2023-06-16".to_string()), 4.4583f64); - exchange_rates.insert(Exchange::USD("2023-03-29".to_string()), 4.3247f64); - exchange_rates.insert(Exchange::USD("2022-05-16".to_string()), 4.4785f64); - exchange_rates.insert(Exchange::USD("2019-03-08".to_string()), 3.8409f64); - exchange_rates.insert(Exchange::USD("2012-01-12".to_string()), 3.4945f64); - exchange_rates.insert(Exchange::USD("2025-07-16".to_string()), 3.6631f64); - exchange_rates.insert(Exchange::USD("2012-02-24".to_string()), 3.1103f64); - exchange_rates.insert(Exchange::EUR("2024-12-30".to_string()), 4.2738f64); - exchange_rates.insert(Exchange::USD("2025-12-02".to_string()), 3.6512f64); - exchange_rates.insert(Exchange::USD("2019-01-29".to_string()), 3.7563f64); - exchange_rates.insert(Exchange::USD("2021-05-04".to_string()), 3.794f64); - exchange_rates.insert(Exchange::EUR("2024-07-18".to_string()), 4.2954f64); - exchange_rates.insert(Exchange::USD("2014-12-30".to_string()), 3.5458f64); - exchange_rates.insert(Exchange::USD("2024-07-24".to_string()), 3.9498f64); - exchange_rates.insert(Exchange::USD("2021-05-28".to_string()), 3.6766f64); - exchange_rates.insert(Exchange::USD("2012-11-22".to_string()), 3.2021f64); - exchange_rates.insert(Exchange::USD("2024-04-22".to_string()), 4.054f64); - exchange_rates.insert(Exchange::USD("2023-03-22".to_string()), 4.3467f64); - exchange_rates.insert(Exchange::USD("2019-01-16".to_string()), 3.7619f64); - exchange_rates.insert(Exchange::USD("2022-09-16".to_string()), 4.7384f64); - exchange_rates.insert(Exchange::USD("2025-02-11".to_string()), 4.0497f64); - exchange_rates.insert(Exchange::USD("2019-08-14".to_string()), 3.889f64); - exchange_rates.insert(Exchange::USD("2025-03-11".to_string()), 3.8481f64); - exchange_rates.insert(Exchange::USD("2017-05-29".to_string()), 3.7371f64); - exchange_rates.insert(Exchange::USD("2016-03-08".to_string()), 3.9333f64); - exchange_rates.insert(Exchange::USD("2013-11-20".to_string()), 3.0947f64); - exchange_rates.insert(Exchange::USD("2013-02-13".to_string()), 3.1012f64); - exchange_rates.insert(Exchange::EUR("2025-09-16".to_string()), 4.2504f64); - exchange_rates.insert(Exchange::USD("2019-03-13".to_string()), 3.8077f64); - exchange_rates.insert(Exchange::USD("2017-03-14".to_string()), 4.0697f64); - exchange_rates.insert(Exchange::USD("2013-04-12".to_string()), 3.1537f64); - exchange_rates.insert(Exchange::USD("2017-09-07".to_string()), 3.5511f64); - exchange_rates.insert(Exchange::USD("2020-09-09".to_string()), 3.7871f64); - exchange_rates.insert(Exchange::USD("2022-08-22".to_string()), 4.7427f64); - exchange_rates.insert(Exchange::USD("2020-08-17".to_string()), 3.7076f64); - exchange_rates.insert(Exchange::USD("2018-08-08".to_string()), 3.6782f64); - exchange_rates.insert(Exchange::USD("2012-10-01".to_string()), 3.1809f64); - exchange_rates.insert(Exchange::EUR("2025-01-07".to_string()), 4.2515f64); - exchange_rates.insert(Exchange::USD("2019-06-26".to_string()), 3.754f64); - exchange_rates.insert(Exchange::EUR("2025-06-20".to_string()), 4.2709f64); - exchange_rates.insert(Exchange::USD("2018-10-12".to_string()), 3.713f64); - exchange_rates.insert(Exchange::USD("2014-05-21".to_string()), 3.054f64); - exchange_rates.insert(Exchange::USD("2019-08-23".to_string()), 3.9371f64); - exchange_rates.insert(Exchange::USD("2015-03-09".to_string()), 3.789f64); - exchange_rates.insert(Exchange::USD("2015-10-01".to_string()), 3.8005f64); - exchange_rates.insert(Exchange::USD("2024-03-08".to_string()), 3.9392f64); - exchange_rates.insert(Exchange::USD("2016-11-15".to_string()), 4.0837f64); - exchange_rates.insert(Exchange::USD("2018-12-27".to_string()), 3.7616f64); - exchange_rates.insert(Exchange::USD("2024-01-05".to_string()), 3.985f64); - exchange_rates.insert(Exchange::EUR("2023-07-26".to_string()), 4.4248f64); - exchange_rates.insert(Exchange::USD("2012-12-12".to_string()), 3.1459f64); - exchange_rates.insert(Exchange::USD("2021-02-25".to_string()), 3.6943f64); - exchange_rates.insert(Exchange::USD("2014-10-02".to_string()), 3.3039f64); - exchange_rates.insert(Exchange::USD("2025-03-20".to_string()), 3.8675f64); - exchange_rates.insert(Exchange::USD("2024-11-22".to_string()), 4.1752f64); - exchange_rates.insert(Exchange::USD("2014-06-04".to_string()), 3.0491f64); - exchange_rates.insert(Exchange::USD("2024-09-24".to_string()), 3.83f64); - exchange_rates.insert(Exchange::USD("2025-05-28".to_string()), 3.7456f64); - exchange_rates.insert(Exchange::USD("2015-10-27".to_string()), 3.8669f64); - exchange_rates.insert(Exchange::USD("2013-08-09".to_string()), 3.1336f64); - exchange_rates.insert(Exchange::EUR("2025-09-05".to_string()), 4.2476f64); - exchange_rates.insert(Exchange::USD("2022-01-25".to_string()), 4.0593f64); - exchange_rates.insert(Exchange::USD("2013-05-10".to_string()), 3.1861f64); - exchange_rates.insert(Exchange::USD("2023-05-15".to_string()), 4.149f64); - exchange_rates.insert(Exchange::USD("2019-01-23".to_string()), 3.7747f64); - exchange_rates.insert(Exchange::USD("2024-11-18".to_string()), 4.0997f64); - exchange_rates.insert(Exchange::USD("2025-09-05".to_string()), 3.6357f64); - exchange_rates.insert(Exchange::USD("2014-09-04".to_string()), 3.1947f64); - exchange_rates.insert(Exchange::USD("2013-05-17".to_string()), 3.252f64); - exchange_rates.insert(Exchange::USD("2012-09-04".to_string()), 3.3281f64); - exchange_rates.insert(Exchange::EUR("2025-05-14".to_string()), 4.2455f64); - exchange_rates.insert(Exchange::USD("2014-05-05".to_string()), 3.031f64); - exchange_rates.insert(Exchange::EUR("2024-04-15".to_string()), 4.2851f64); - exchange_rates.insert(Exchange::USD("2022-08-25".to_string()), 4.7546f64); - exchange_rates.insert(Exchange::USD("2013-03-29".to_string()), 3.259f64); - exchange_rates.insert(Exchange::EUR("2023-03-30".to_string()), 4.6801f64); - exchange_rates.insert(Exchange::USD("2024-06-06".to_string()), 3.953f64); - exchange_rates.insert(Exchange::USD("2025-08-08".to_string()), 3.6577f64); - exchange_rates.insert(Exchange::USD("2021-01-27".to_string()), 3.7507f64); - exchange_rates.insert(Exchange::USD("2022-07-06".to_string()), 4.6796f64); - exchange_rates.insert(Exchange::EUR("2024-03-11".to_string()), 4.2933f64); - exchange_rates.insert(Exchange::EUR("2025-09-17".to_string()), 4.2559f64); - exchange_rates.insert(Exchange::USD("2019-05-09".to_string()), 3.841f64); - exchange_rates.insert(Exchange::USD("2021-11-03".to_string()), 3.9681f64); - exchange_rates.insert(Exchange::USD("2015-12-29".to_string()), 3.8659f64); - exchange_rates.insert(Exchange::USD("2015-07-07".to_string()), 3.8313f64); - exchange_rates.insert(Exchange::EUR("2023-10-23".to_string()), 4.4552f64); - exchange_rates.insert(Exchange::USD("2022-12-07".to_string()), 4.4834f64); - exchange_rates.insert(Exchange::USD("2020-07-31".to_string()), 3.7166f64); - exchange_rates.insert(Exchange::USD("2020-05-27".to_string()), 4.0504f64); - exchange_rates.insert(Exchange::USD("2014-02-26".to_string()), 3.026f64); - exchange_rates.insert(Exchange::USD("2025-10-23".to_string()), 3.6519f64); - exchange_rates.insert(Exchange::USD("2014-01-20".to_string()), 3.068f64); - exchange_rates.insert(Exchange::USD("2024-03-04".to_string()), 3.982f64); - exchange_rates.insert(Exchange::USD("2017-12-28".to_string()), 3.5046f64); - exchange_rates.insert(Exchange::EUR("2023-10-12".to_string()), 4.5329f64); - exchange_rates.insert(Exchange::EUR("2023-12-19".to_string()), 4.3321f64); - exchange_rates.insert(Exchange::USD("2012-05-14".to_string()), 3.3422f64); - exchange_rates.insert(Exchange::USD("2014-06-26".to_string()), 3.0361f64); - exchange_rates.insert(Exchange::USD("2018-04-12".to_string()), 3.3924f64); - exchange_rates.insert(Exchange::USD("2017-02-01".to_string()), 4.0071f64); - exchange_rates.insert(Exchange::USD("2017-08-22".to_string()), 3.6334f64); - exchange_rates.insert(Exchange::USD("2019-10-17".to_string()), 3.8638f64); - exchange_rates.insert(Exchange::EUR("2025-10-22".to_string()), 4.2438f64); - exchange_rates.insert(Exchange::USD("2023-06-16".to_string()), 4.0715f64); - exchange_rates.insert(Exchange::EUR("2025-11-17".to_string()), 4.2231f64); - exchange_rates.insert(Exchange::USD("2025-11-07".to_string()), 3.6818f64); - exchange_rates.insert(Exchange::USD("2019-05-23".to_string()), 3.8696f64); - exchange_rates.insert(Exchange::EUR("2023-07-07".to_string()), 4.4803f64); - exchange_rates.insert(Exchange::EUR("2025-06-12".to_string()), 4.2631f64); - exchange_rates.insert(Exchange::EUR("2024-12-17".to_string()), 4.2599f64); - exchange_rates.insert(Exchange::EUR("2025-08-01".to_string()), 4.2813f64); - exchange_rates.insert(Exchange::USD("2021-12-30".to_string()), 4.0631f64); - exchange_rates.insert(Exchange::USD("2022-12-08".to_string()), 4.476f64); - exchange_rates.insert(Exchange::EUR("2025-04-22".to_string()), 4.2801f64); - exchange_rates.insert(Exchange::USD("2025-09-29".to_string()), 3.6411f64); - exchange_rates.insert(Exchange::USD("2022-05-12".to_string()), 4.4863f64); - exchange_rates.insert(Exchange::EUR("2025-03-03".to_string()), 4.1827f64); - exchange_rates.insert(Exchange::EUR("2023-11-08".to_string()), 4.4584f64); - exchange_rates.insert(Exchange::USD("2020-01-02".to_string()), 3.8f64); - exchange_rates.insert(Exchange::USD("2022-03-21".to_string()), 4.2444f64); - exchange_rates.insert(Exchange::USD("2017-08-16".to_string()), 3.6435f64); - exchange_rates.insert(Exchange::USD("2016-07-26".to_string()), 3.9682f64); - exchange_rates.insert(Exchange::EUR("2024-08-21".to_string()), 4.2879f64); - exchange_rates.insert(Exchange::USD("2024-11-25".to_string()), 4.1297f64); - exchange_rates.insert(Exchange::USD("2020-09-28".to_string()), 3.9083f64); - exchange_rates.insert(Exchange::USD("2024-01-03".to_string()), 3.9909f64); - exchange_rates.insert(Exchange::USD("2014-09-02".to_string()), 3.2112f64); - exchange_rates.insert(Exchange::USD("2024-05-17".to_string()), 3.9363f64); - exchange_rates.insert(Exchange::USD("2025-01-17".to_string()), 4.1462f64); - exchange_rates.insert(Exchange::USD("2022-06-20".to_string()), 4.44f64); - exchange_rates.insert(Exchange::USD("2017-06-21".to_string()), 3.809f64); - exchange_rates.insert(Exchange::USD("2014-09-09".to_string()), 3.2605f64); - exchange_rates.insert(Exchange::EUR("2024-05-31".to_string()), 4.2678f64); - exchange_rates.insert(Exchange::USD("2020-04-06".to_string()), 4.2257f64); - exchange_rates.insert(Exchange::EUR("2025-12-31".to_string()), 4.2267f64); - exchange_rates.insert(Exchange::USD("2025-01-15".to_string()), 4.133f64); - exchange_rates.insert(Exchange::USD("2021-10-18".to_string()), 3.9471f64); - exchange_rates.insert(Exchange::USD("2022-04-26".to_string()), 4.3469f64); - exchange_rates.insert(Exchange::USD("2022-11-02".to_string()), 4.7485f64); - exchange_rates.insert(Exchange::USD("2022-12-14".to_string()), 4.3973f64); - exchange_rates.insert(Exchange::USD("2015-09-10".to_string()), 3.7648f64); - exchange_rates.insert(Exchange::USD("2017-02-27".to_string()), 4.0745f64); - exchange_rates.insert(Exchange::EUR("2023-07-28".to_string()), 4.4257f64); - exchange_rates.insert(Exchange::USD("2016-12-27".to_string()), 4.212f64); - exchange_rates.insert(Exchange::USD("2013-03-12".to_string()), 3.1887f64); - exchange_rates.insert(Exchange::EUR("2024-11-06".to_string()), 4.3662f64); - exchange_rates.insert(Exchange::USD("2021-04-19".to_string()), 3.7816f64); - exchange_rates.insert(Exchange::EUR("2025-03-28".to_string()), 4.1819f64); - exchange_rates.insert(Exchange::USD("2014-04-08".to_string()), 3.0276f64); - exchange_rates.insert(Exchange::USD("2012-11-20".to_string()), 3.2333f64); - exchange_rates.insert(Exchange::USD("2021-07-20".to_string()), 3.9012f64); - exchange_rates.insert(Exchange::USD("2015-07-08".to_string()), 3.8225f64); - exchange_rates.insert(Exchange::USD("2012-05-10".to_string()), 3.2735f64); - exchange_rates.insert(Exchange::USD("2015-07-06".to_string()), 3.796f64); - exchange_rates.insert(Exchange::USD("2015-01-08".to_string()), 3.6482f64); - exchange_rates.insert(Exchange::USD("2024-07-08".to_string()), 3.947f64); - exchange_rates.insert(Exchange::USD("2019-05-29".to_string()), 3.8554f64); - exchange_rates.insert(Exchange::USD("2012-06-28".to_string()), 3.4408f64); - exchange_rates.insert(Exchange::USD("2012-10-24".to_string()), 3.1996f64); - exchange_rates.insert(Exchange::USD("2015-05-29".to_string()), 3.7671f64); - exchange_rates.insert(Exchange::USD("2021-07-06".to_string()), 3.8021f64); - exchange_rates.insert(Exchange::USD("2012-04-20".to_string()), 3.1828f64); - exchange_rates.insert(Exchange::USD("2018-10-10".to_string()), 3.7507f64); - exchange_rates.insert(Exchange::USD("2014-11-12".to_string()), 3.3966f64); - exchange_rates.insert(Exchange::USD("2017-08-02".to_string()), 3.5863f64); - exchange_rates.insert(Exchange::USD("2025-11-27".to_string()), 3.651f64); - exchange_rates.insert(Exchange::USD("2025-11-28".to_string()), 3.6624f64); - exchange_rates.insert(Exchange::USD("2022-10-03".to_string()), 4.9207f64); - exchange_rates.insert(Exchange::USD("2013-03-08".to_string()), 3.169f64); - exchange_rates.insert(Exchange::USD("2014-08-07".to_string()), 3.1397f64); - exchange_rates.insert(Exchange::USD("2023-08-09".to_string()), 4.0592f64); - exchange_rates.insert(Exchange::USD("2024-03-13".to_string()), 3.9269f64); - exchange_rates.insert(Exchange::USD("2021-04-28".to_string()), 3.7939f64); - exchange_rates.insert(Exchange::USD("2023-05-11".to_string()), 4.1414f64); - exchange_rates.insert(Exchange::USD("2020-11-13".to_string()), 3.8015f64); - exchange_rates.insert(Exchange::USD("2012-08-28".to_string()), 3.2685f64); - exchange_rates.insert(Exchange::USD("2012-10-19".to_string()), 3.1499f64); - exchange_rates.insert(Exchange::USD("2016-07-27".to_string()), 3.9739f64); - exchange_rates.insert(Exchange::USD("2013-05-28".to_string()), 3.2465f64); - exchange_rates.insert(Exchange::USD("2012-06-01".to_string()), 3.5777f64); - exchange_rates.insert(Exchange::USD("2014-05-07".to_string()), 3.0187f64); - exchange_rates.insert(Exchange::USD("2019-02-05".to_string()), 3.7542f64); - exchange_rates.insert(Exchange::USD("2019-09-25".to_string()), 3.9856f64); - exchange_rates.insert(Exchange::EUR("2023-09-04".to_string()), 4.4653f64); - exchange_rates.insert(Exchange::USD("2013-01-09".to_string()), 3.1516f64); - exchange_rates.insert(Exchange::EUR("2025-01-16".to_string()), 4.262f64); - exchange_rates.insert(Exchange::USD("2018-04-19".to_string()), 3.3693f64); - exchange_rates.insert(Exchange::USD("2017-04-11".to_string()), 4.0009f64); - exchange_rates.insert(Exchange::USD("2017-08-07".to_string()), 3.5995f64); - exchange_rates.insert(Exchange::USD("2016-10-27".to_string()), 3.976f64); - exchange_rates.insert(Exchange::USD("2021-03-16".to_string()), 3.8519f64); - exchange_rates.insert(Exchange::USD("2016-12-07".to_string()), 4.1268f64); - exchange_rates.insert(Exchange::USD("2021-09-10".to_string()), 3.8402f64); - exchange_rates.insert(Exchange::USD("2015-05-11".to_string()), 3.6489f64); - exchange_rates.insert(Exchange::USD("2019-01-09".to_string()), 3.7509f64); - exchange_rates.insert(Exchange::USD("2021-09-21".to_string()), 3.9337f64); - exchange_rates.insert(Exchange::USD("2020-11-10".to_string()), 3.8168f64); - exchange_rates.insert(Exchange::EUR("2023-10-18".to_string()), 4.4488f64); - exchange_rates.insert(Exchange::EUR("2023-11-24".to_string()), 4.3722f64); - exchange_rates.insert(Exchange::USD("2015-07-02".to_string()), 3.7859f64); - exchange_rates.insert(Exchange::USD("2024-04-04".to_string()), 3.9515f64); - exchange_rates.insert(Exchange::USD("2023-02-22".to_string()), 4.4687f64); - exchange_rates.insert(Exchange::EUR("2024-02-21".to_string()), 4.3163f64); - exchange_rates.insert(Exchange::EUR("2024-06-12".to_string()), 4.3354f64); - exchange_rates.insert(Exchange::EUR("2025-06-17".to_string()), 4.275f64); - exchange_rates.insert(Exchange::USD("2016-08-16".to_string()), 3.7929f64); - exchange_rates.insert(Exchange::USD("2019-06-12".to_string()), 3.763f64); - exchange_rates.insert(Exchange::USD("2020-09-23".to_string()), 3.8399f64); - exchange_rates.insert(Exchange::USD("2012-02-02".to_string()), 3.1955f64); - exchange_rates.insert(Exchange::USD("2022-05-27".to_string()), 4.2966f64); - exchange_rates.insert(Exchange::USD("2013-05-07".to_string()), 3.1767f64); - exchange_rates.insert(Exchange::USD("2016-06-13".to_string()), 3.8943f64); - exchange_rates.insert(Exchange::USD("2023-05-22".to_string()), 4.1881f64); - exchange_rates.insert(Exchange::USD("2024-06-28".to_string()), 4.032f64); - exchange_rates.insert(Exchange::EUR("2025-05-09".to_string()), 4.2414f64); - exchange_rates.insert(Exchange::USD("2015-08-05".to_string()), 3.8359f64); - exchange_rates.insert(Exchange::USD("2024-12-05".to_string()), 4.0554f64); - exchange_rates.insert(Exchange::EUR("2023-06-28".to_string()), 4.46f64); - exchange_rates.insert(Exchange::EUR("2024-03-20".to_string()), 4.3242f64); - exchange_rates.insert(Exchange::USD("2016-03-24".to_string()), 3.824f64); - exchange_rates.insert(Exchange::USD("2023-08-21".to_string()), 4.1124f64); - exchange_rates.insert(Exchange::USD("2012-10-12".to_string()), 3.1577f64); - exchange_rates.insert(Exchange::USD("2017-04-07".to_string()), 3.9755f64); - exchange_rates.insert(Exchange::USD("2015-04-13".to_string()), 3.8088f64); - exchange_rates.insert(Exchange::USD("2012-08-16".to_string()), 3.3253f64); - exchange_rates.insert(Exchange::EUR("2024-04-08".to_string()), 4.2805f64); - exchange_rates.insert(Exchange::USD("2017-09-28".to_string()), 3.6682f64); - exchange_rates.insert(Exchange::EUR("2025-01-21".to_string()), 4.2554f64); - exchange_rates.insert(Exchange::USD("2015-04-09".to_string()), 3.7414f64); - exchange_rates.insert(Exchange::USD("2015-05-07".to_string()), 3.583f64); - exchange_rates.insert(Exchange::USD("2023-10-25".to_string()), 4.2284f64); - exchange_rates.insert(Exchange::USD("2020-07-01".to_string()), 3.9591f64); - exchange_rates.insert(Exchange::USD("2016-08-10".to_string()), 3.825f64); - exchange_rates.insert(Exchange::USD("2022-06-06".to_string()), 4.2675f64); - exchange_rates.insert(Exchange::USD("2016-07-01".to_string()), 3.9548f64); - exchange_rates.insert(Exchange::USD("2013-02-25".to_string()), 3.1412f64); - exchange_rates.insert(Exchange::USD("2020-04-23".to_string()), 4.2093f64); - exchange_rates.insert(Exchange::USD("2021-12-10".to_string()), 4.0887f64); - exchange_rates.insert(Exchange::USD("2021-09-03".to_string()), 3.7998f64); - exchange_rates.insert(Exchange::USD("2025-08-13".to_string()), 3.6353f64); - exchange_rates.insert(Exchange::USD("2020-09-14".to_string()), 3.7522f64); - exchange_rates.insert(Exchange::USD("2016-01-27".to_string()), 4.1144f64); - exchange_rates.insert(Exchange::USD("2019-03-28".to_string()), 3.8202f64); - exchange_rates.insert(Exchange::USD("2016-11-14".to_string()), 4.0805f64); - exchange_rates.insert(Exchange::EUR("2023-05-15".to_string()), 4.5096f64); - exchange_rates.insert(Exchange::EUR("2025-12-19".to_string()), 4.2094f64); - exchange_rates.insert(Exchange::USD("2012-10-03".to_string()), 3.1896f64); - exchange_rates.insert(Exchange::USD("2015-07-29".to_string()), 3.7471f64); - exchange_rates.insert(Exchange::USD("2020-10-02".to_string()), 3.8366f64); - exchange_rates.insert(Exchange::USD("2012-01-17".to_string()), 3.4215f64); - exchange_rates.insert(Exchange::USD("2023-07-31".to_string()), 3.9995f64); - exchange_rates.insert(Exchange::USD("2019-10-02".to_string()), 4.0152f64); - exchange_rates.insert(Exchange::USD("2012-01-13".to_string()), 3.4323f64); - exchange_rates.insert(Exchange::USD("2025-03-03".to_string()), 4.0112f64); - exchange_rates.insert(Exchange::USD("2019-06-25".to_string()), 3.7376f64); - exchange_rates.insert(Exchange::USD("2022-04-21".to_string()), 4.2596f64); - exchange_rates.insert(Exchange::USD("2021-11-25".to_string()), 4.16f64); - exchange_rates.insert(Exchange::USD("2025-06-06".to_string()), 3.7565f64); - exchange_rates.insert(Exchange::USD("2023-11-03".to_string()), 4.1857f64); - exchange_rates.insert(Exchange::USD("2023-06-15".to_string()), 4.1203f64); - exchange_rates.insert(Exchange::USD("2013-06-05".to_string()), 3.2421f64); - exchange_rates.insert(Exchange::USD("2025-08-18".to_string()), 3.6434f64); - exchange_rates.insert(Exchange::USD("2023-12-11".to_string()), 4.0277f64); - exchange_rates.insert(Exchange::USD("2018-03-07".to_string()), 3.3744f64); - exchange_rates.insert(Exchange::USD("2015-10-09".to_string()), 3.7242f64); - exchange_rates.insert(Exchange::USD("2015-12-14".to_string()), 3.9695f64); - exchange_rates.insert(Exchange::USD("2014-03-05".to_string()), 3.0477f64); - exchange_rates.insert(Exchange::USD("2013-07-29".to_string()), 3.1859f64); - exchange_rates.insert(Exchange::USD("2020-04-02".to_string()), 4.1917f64); - exchange_rates.insert(Exchange::USD("2025-07-09".to_string()), 3.6198f64); - exchange_rates.insert(Exchange::USD("2017-07-05".to_string()), 3.7471f64); - exchange_rates.insert(Exchange::USD("2021-01-19".to_string()), 3.7416f64); - exchange_rates.insert(Exchange::USD("2018-11-26".to_string()), 3.7701f64); - exchange_rates.insert(Exchange::USD("2018-12-24".to_string()), 3.7588f64); - exchange_rates.insert(Exchange::USD("2017-12-21".to_string()), 3.5369f64); - exchange_rates.insert(Exchange::EUR("2023-10-05".to_string()), 4.5974f64); - exchange_rates.insert(Exchange::EUR("2025-04-10".to_string()), 4.2644f64); - exchange_rates.insert(Exchange::USD("2019-07-16".to_string()), 3.7867f64); - exchange_rates.insert(Exchange::EUR("2025-06-13".to_string()), 4.272f64); - exchange_rates.insert(Exchange::USD("2018-04-25".to_string()), 3.4548f64); - exchange_rates.insert(Exchange::USD("2023-02-01".to_string()), 4.3254f64); - exchange_rates.insert(Exchange::USD("2021-03-18".to_string()), 3.8705f64); - exchange_rates.insert(Exchange::USD("2021-05-26".to_string()), 3.6691f64); - exchange_rates.insert(Exchange::USD("2015-10-28".to_string()), 3.8826f64); - exchange_rates.insert(Exchange::USD("2023-06-12".to_string()), 4.1169f64); - exchange_rates.insert(Exchange::USD("2022-09-29".to_string()), 5.0328f64); - exchange_rates.insert(Exchange::USD("2014-03-04".to_string()), 3.0489f64); - exchange_rates.insert(Exchange::USD("2017-03-21".to_string()), 3.9502f64); - exchange_rates.insert(Exchange::USD("2015-02-11".to_string()), 3.7094f64); - exchange_rates.insert(Exchange::USD("2013-11-12".to_string()), 3.1448f64); - exchange_rates.insert(Exchange::USD("2023-08-24".to_string()), 4.118f64); - exchange_rates.insert(Exchange::USD("2024-03-29".to_string()), 3.9886f64); - exchange_rates.insert(Exchange::EUR("2023-02-17".to_string()), 4.7747f64); - exchange_rates.insert(Exchange::USD("2024-07-18".to_string()), 3.9296f64); - exchange_rates.insert(Exchange::EUR("2023-05-18".to_string()), 4.5355f64); - exchange_rates.insert(Exchange::USD("2018-08-10".to_string()), 3.7481f64); - exchange_rates.insert(Exchange::USD("2022-02-22".to_string()), 4.012f64); - exchange_rates.insert(Exchange::USD("2012-05-11".to_string()), 3.2765f64); - exchange_rates.insert(Exchange::USD("2020-07-15".to_string()), 3.9117f64); - exchange_rates.insert(Exchange::USD("2014-04-24".to_string()), 3.0285f64); - exchange_rates.insert(Exchange::EUR("2024-10-07".to_string()), 4.3185f64); - exchange_rates.insert(Exchange::USD("2014-04-01".to_string()), 3.0278f64); - exchange_rates.insert(Exchange::EUR("2023-06-13".to_string()), 4.4783f64); - exchange_rates.insert(Exchange::USD("2023-07-14".to_string()), 3.9617f64); - exchange_rates.insert(Exchange::USD("2014-05-26".to_string()), 3.0466f64); - exchange_rates.insert(Exchange::USD("2024-10-18".to_string()), 3.9718f64); - exchange_rates.insert(Exchange::USD("2013-02-07".to_string()), 3.0886f64); - exchange_rates.insert(Exchange::EUR("2024-05-14".to_string()), 4.2812f64); - exchange_rates.insert(Exchange::USD("2016-06-29".to_string()), 3.9905f64); - exchange_rates.insert(Exchange::USD("2013-03-20".to_string()), 3.2169f64); - exchange_rates.insert(Exchange::USD("2020-11-16".to_string()), 3.7782f64); - exchange_rates.insert(Exchange::USD("2025-02-06".to_string()), 4.0613f64); - exchange_rates.insert(Exchange::USD("2012-06-27".to_string()), 3.4015f64); - exchange_rates.insert(Exchange::USD("2021-03-29".to_string()), 3.957f64); - exchange_rates.insert(Exchange::USD("2022-07-18".to_string()), 4.7152f64); - exchange_rates.insert(Exchange::USD("2012-02-20".to_string()), 3.1598f64); - exchange_rates.insert(Exchange::USD("2012-06-12".to_string()), 3.4552f64); - exchange_rates.insert(Exchange::USD("2017-09-01".to_string()), 3.5693f64); - exchange_rates.insert(Exchange::USD("2023-02-08".to_string()), 4.4074f64); - exchange_rates.insert(Exchange::EUR("2024-06-14".to_string()), 4.3581f64); - exchange_rates.insert(Exchange::USD("2020-04-24".to_string()), 4.2142f64); - exchange_rates.insert(Exchange::USD("2021-10-28".to_string()), 3.9938f64); - exchange_rates.insert(Exchange::USD("2018-04-23".to_string()), 3.4156f64); - exchange_rates.insert(Exchange::USD("2013-11-08".to_string()), 3.1133f64); - exchange_rates.insert(Exchange::EUR("2023-03-23".to_string()), 4.6817f64); - exchange_rates.insert(Exchange::USD("2018-08-22".to_string()), 3.7104f64); - exchange_rates.insert(Exchange::USD("2015-06-11".to_string()), 3.6817f64); - exchange_rates.insert(Exchange::EUR("2025-05-05".to_string()), 4.276f64); - exchange_rates.insert(Exchange::USD("2016-06-16".to_string()), 3.9469f64); - exchange_rates.insert(Exchange::EUR("2025-08-22".to_string()), 4.267f64); - exchange_rates.insert(Exchange::USD("2019-05-08".to_string()), 3.8325f64); - exchange_rates.insert(Exchange::USD("2013-07-26".to_string()), 3.1831f64); - exchange_rates.insert(Exchange::EUR("2023-07-24".to_string()), 4.4517f64); - exchange_rates.insert(Exchange::USD("2015-06-22".to_string()), 3.6799f64); - exchange_rates.insert(Exchange::EUR("2025-01-31".to_string()), 4.213f64); - exchange_rates.insert(Exchange::USD("2019-07-12".to_string()), 3.7889f64); - exchange_rates.insert(Exchange::USD("2013-02-22".to_string()), 3.1443f64); - exchange_rates.insert(Exchange::EUR("2023-04-18".to_string()), 4.6286f64); - exchange_rates.insert(Exchange::EUR("2023-10-24".to_string()), 4.4604f64); - exchange_rates.insert(Exchange::USD("2016-02-29".to_string()), 3.9935f64); - exchange_rates.insert(Exchange::USD("2013-12-18".to_string()), 3.0393f64); - exchange_rates.insert(Exchange::USD("2021-04-12".to_string()), 3.8144f64); - exchange_rates.insert(Exchange::USD("2024-06-13".to_string()), 4.0119f64); - exchange_rates.insert(Exchange::USD("2014-11-07".to_string()), 3.4084f64); - exchange_rates.insert(Exchange::USD("2017-04-12".to_string()), 4.0026f64); - exchange_rates.insert(Exchange::USD("2013-07-22".to_string()), 3.2142f64); - exchange_rates.insert(Exchange::EUR("2025-03-14".to_string()), 4.179f64); - exchange_rates.insert(Exchange::USD("2020-02-18".to_string()), 3.9448f64); - exchange_rates.insert(Exchange::USD("2023-05-17".to_string()), 4.1504f64); - exchange_rates.insert(Exchange::USD("2022-02-03".to_string()), 4.0267f64); - exchange_rates.insert(Exchange::USD("2017-05-04".to_string()), 3.863f64); - exchange_rates.insert(Exchange::USD("2022-12-21".to_string()), 4.3947f64); - exchange_rates.insert(Exchange::USD("2015-10-30".to_string()), 3.8748f64); - exchange_rates.insert(Exchange::USD("2022-02-08".to_string()), 3.9693f64); - exchange_rates.insert(Exchange::USD("2015-09-02".to_string()), 3.7626f64); - exchange_rates.insert(Exchange::USD("2013-05-13".to_string()), 3.2051f64); - exchange_rates.insert(Exchange::USD("2019-10-30".to_string()), 3.8388f64); - exchange_rates.insert(Exchange::USD("2024-07-10".to_string()), 3.9324f64); - exchange_rates.insert(Exchange::EUR("2025-05-28".to_string()), 4.2447f64); - exchange_rates.insert(Exchange::USD("2012-12-27".to_string()), 3.0816f64); - exchange_rates.insert(Exchange::USD("2014-09-08".to_string()), 3.2303f64); - exchange_rates.insert(Exchange::USD("2019-04-19".to_string()), 3.8051f64); - exchange_rates.insert(Exchange::USD("2024-03-01".to_string()), 3.9922f64); - exchange_rates.insert(Exchange::USD("2024-10-16".to_string()), 3.9468f64); - exchange_rates.insert(Exchange::EUR("2024-10-25".to_string()), 4.3533f64); - exchange_rates.insert(Exchange::USD("2023-06-29".to_string()), 4.0832f64); - exchange_rates.insert(Exchange::USD("2018-12-28".to_string()), 3.755f64); - exchange_rates.insert(Exchange::USD("2014-05-15".to_string()), 3.0589f64); - exchange_rates.insert(Exchange::USD("2012-12-14".to_string()), 3.1271f64); - exchange_rates.insert(Exchange::USD("2022-12-20".to_string()), 4.4001f64); - exchange_rates.insert(Exchange::USD("2017-06-02".to_string()), 3.7323f64); - exchange_rates.insert(Exchange::EUR("2023-06-09".to_string()), 4.4717f64); - exchange_rates.insert(Exchange::USD("2022-01-07".to_string()), 4.0279f64); - exchange_rates.insert(Exchange::EUR("2024-03-13".to_string()), 4.2896f64); - exchange_rates.insert(Exchange::EUR("2025-02-10".to_string()), 4.1872f64); - exchange_rates.insert(Exchange::USD("2020-08-06".to_string()), 3.724f64); - exchange_rates.insert(Exchange::EUR("2025-05-08".to_string()), 4.2714f64); - exchange_rates.insert(Exchange::USD("2016-05-11".to_string()), 3.8855f64); - exchange_rates.insert(Exchange::USD("2021-02-15".to_string()), 3.6949f64); - exchange_rates.insert(Exchange::EUR("2025-09-18".to_string()), 4.2564f64); - exchange_rates.insert(Exchange::USD("2022-02-11".to_string()), 3.9665f64); - exchange_rates.insert(Exchange::USD("2023-12-27".to_string()), 3.9178f64); - exchange_rates.insert(Exchange::USD("2014-11-17".to_string()), 3.3819f64); - exchange_rates.insert(Exchange::USD("2015-02-16".to_string()), 3.6665f64); - exchange_rates.insert(Exchange::USD("2015-03-19".to_string()), 3.8596f64); - exchange_rates.insert(Exchange::USD("2015-11-26".to_string()), 4.0298f64); - exchange_rates.insert(Exchange::USD("2022-03-18".to_string()), 4.2707f64); - exchange_rates.insert(Exchange::USD("2013-07-04".to_string()), 3.3246f64); - exchange_rates.insert(Exchange::EUR("2023-03-29".to_string()), 4.685f64); - exchange_rates.insert(Exchange::USD("2022-07-11".to_string()), 4.7416f64); - exchange_rates.insert(Exchange::USD("2021-05-07".to_string()), 3.7861f64); - exchange_rates.insert(Exchange::EUR("2023-07-05".to_string()), 4.4498f64); - exchange_rates.insert(Exchange::USD("2012-04-10".to_string()), 3.1904f64); - exchange_rates.insert(Exchange::USD("2014-01-03".to_string()), 3.0517f64); - exchange_rates.insert(Exchange::USD("2021-02-22".to_string()), 3.7135f64); - exchange_rates.insert(Exchange::USD("2015-11-20".to_string()), 3.9706f64); - exchange_rates.insert(Exchange::USD("2022-05-17".to_string()), 4.4379f64); - exchange_rates.insert(Exchange::USD("2015-08-19".to_string()), 3.7718f64); - exchange_rates.insert(Exchange::USD("2019-06-06".to_string()), 3.8065f64); - exchange_rates.insert(Exchange::EUR("2024-02-29".to_string()), 4.319f64); - exchange_rates.insert(Exchange::EUR("2025-08-11".to_string()), 4.2533f64); - exchange_rates.insert(Exchange::USD("2017-10-04".to_string()), 3.6597f64); - exchange_rates.insert(Exchange::USD("2022-09-15".to_string()), 4.7202f64); - exchange_rates.insert(Exchange::USD("2014-10-29".to_string()), 3.3192f64); - exchange_rates.insert(Exchange::USD("2014-07-01".to_string()), 3.0355f64); - exchange_rates.insert(Exchange::USD("2025-11-10".to_string()), 3.661f64); - exchange_rates.insert(Exchange::EUR("2025-01-03".to_string()), 4.2718f64); - exchange_rates.insert(Exchange::EUR("2025-04-17".to_string()), 4.2879f64); - exchange_rates.insert(Exchange::USD("2015-11-24".to_string()), 4.0021f64); - exchange_rates.insert(Exchange::EUR("2025-07-31".to_string()), 4.2661f64); - exchange_rates.insert(Exchange::USD("2014-04-28".to_string()), 3.0368f64); - exchange_rates.insert(Exchange::USD("2012-09-17".to_string()), 3.1207f64); - exchange_rates.insert(Exchange::USD("2017-02-16".to_string()), 4.0567f64); - exchange_rates.insert(Exchange::EUR("2025-08-14".to_string()), 4.2639f64); - exchange_rates.insert(Exchange::USD("2016-10-05".to_string()), 3.8307f64); - exchange_rates.insert(Exchange::USD("2020-06-01".to_string()), 3.968f64); - exchange_rates.insert(Exchange::USD("2024-07-26".to_string()), 3.9415f64); - exchange_rates.insert(Exchange::USD("2019-02-27".to_string()), 3.7886f64); - exchange_rates.insert(Exchange::USD("2016-09-01".to_string()), 3.9116f64); - exchange_rates.insert(Exchange::USD("2016-06-06".to_string()), 3.8602f64); - exchange_rates.insert(Exchange::USD("2014-04-14".to_string()), 3.0288f64); - exchange_rates.insert(Exchange::EUR("2024-08-28".to_string()), 4.2938f64); - exchange_rates.insert(Exchange::USD("2024-08-08".to_string()), 3.952f64); - exchange_rates.insert(Exchange::USD("2025-04-28".to_string()), 3.7701f64); - exchange_rates.insert(Exchange::USD("2024-04-09".to_string()), 3.9223f64); - exchange_rates.insert(Exchange::USD("2016-11-02".to_string()), 3.8954f64); - exchange_rates.insert(Exchange::USD("2014-07-03".to_string()), 3.0418f64); - exchange_rates.insert(Exchange::USD("2023-01-24".to_string()), 4.3341f64); - exchange_rates.insert(Exchange::USD("2015-01-14".to_string()), 3.6525f64); - exchange_rates.insert(Exchange::USD("2023-09-12".to_string()), 4.3711f64); - exchange_rates.insert(Exchange::USD("2016-10-24".to_string()), 3.969f64); - exchange_rates.insert(Exchange::USD("2023-04-21".to_string()), 4.2006f64); - exchange_rates.insert(Exchange::USD("2024-03-20".to_string()), 3.9895f64); - exchange_rates.insert(Exchange::USD("2017-06-09".to_string()), 3.7465f64); - exchange_rates.insert(Exchange::USD("2018-03-26".to_string()), 3.4145f64); - exchange_rates.insert(Exchange::EUR("2024-04-29".to_string()), 4.319f64); - exchange_rates.insert(Exchange::USD("2024-10-09".to_string()), 3.9266f64); - exchange_rates.insert(Exchange::USD("2021-09-17".to_string()), 3.8882f64); - exchange_rates.insert(Exchange::USD("2014-09-25".to_string()), 3.2823f64); - exchange_rates.insert(Exchange::USD("2016-01-26".to_string()), 4.1475f64); - exchange_rates.insert(Exchange::USD("2012-09-14".to_string()), 3.1131f64); - exchange_rates.insert(Exchange::USD("2021-02-16".to_string()), 3.694f64); - exchange_rates.insert(Exchange::USD("2014-04-02".to_string()), 3.0288f64); - exchange_rates.insert(Exchange::USD("2014-12-18".to_string()), 3.4428f64); - exchange_rates.insert(Exchange::USD("2012-06-22".to_string()), 3.4025f64); - exchange_rates.insert(Exchange::USD("2017-10-10".to_string()), 3.6468f64); - exchange_rates.insert(Exchange::EUR("2023-10-13".to_string()), 4.5417f64); - exchange_rates.insert(Exchange::USD("2025-02-20".to_string()), 3.9974f64); - exchange_rates.insert(Exchange::EUR("2025-11-05".to_string()), 4.2597f64); - exchange_rates.insert(Exchange::EUR("2023-03-13".to_string()), 4.6848f64); - exchange_rates.insert(Exchange::USD("2013-10-22".to_string()), 3.0564f64); - exchange_rates.insert(Exchange::USD("2023-11-07".to_string()), 4.1667f64); - exchange_rates.insert(Exchange::USD("2018-11-07".to_string()), 3.7398f64); - exchange_rates.insert(Exchange::USD("2022-12-02".to_string()), 4.4492f64); - exchange_rates.insert(Exchange::USD("2015-01-16".to_string()), 3.7174f64); - exchange_rates.insert(Exchange::USD("2013-11-27".to_string()), 3.0899f64); - exchange_rates.insert(Exchange::USD("2020-03-20".to_string()), 4.24f64); - exchange_rates.insert(Exchange::USD("2018-11-29".to_string()), 3.7728f64); - exchange_rates.insert(Exchange::USD("2019-12-05".to_string()), 3.8566f64); - exchange_rates.insert(Exchange::USD("2017-01-05".to_string()), 4.1667f64); - exchange_rates.insert(Exchange::EUR("2024-06-11".to_string()), 4.3456f64); - exchange_rates.insert(Exchange::USD("2020-01-03".to_string()), 3.8213f64); - exchange_rates.insert(Exchange::USD("2020-10-19".to_string()), 3.8761f64); - exchange_rates.insert(Exchange::EUR("2024-05-09".to_string()), 4.2993f64); - exchange_rates.insert(Exchange::USD("2019-12-09".to_string()), 3.8704f64); - exchange_rates.insert(Exchange::USD("2022-03-30".to_string()), 4.1688f64); - exchange_rates.insert(Exchange::USD("2020-01-08".to_string()), 3.8123f64); - exchange_rates.insert(Exchange::USD("2015-11-25".to_string()), 4.0215f64); - exchange_rates.insert(Exchange::USD("2015-02-23".to_string()), 3.6933f64); - exchange_rates.insert(Exchange::USD("2025-06-24".to_string()), 3.6753f64); - exchange_rates.insert(Exchange::EUR("2025-01-13".to_string()), 4.2715f64); - exchange_rates.insert(Exchange::USD("2023-05-04".to_string()), 4.1547f64); - exchange_rates.insert(Exchange::USD("2024-09-10".to_string()), 3.8798f64); - exchange_rates.insert(Exchange::EUR("2023-01-24".to_string()), 4.7073f64); - exchange_rates.insert(Exchange::USD("2012-09-21".to_string()), 3.1712f64); - exchange_rates.insert(Exchange::USD("2025-11-13".to_string()), 3.6417f64); - exchange_rates.insert(Exchange::USD("2016-02-10".to_string()), 3.9383f64); - exchange_rates.insert(Exchange::USD("2022-05-05".to_string()), 4.4017f64); - exchange_rates.insert(Exchange::USD("2013-05-27".to_string()), 3.2416f64); - exchange_rates.insert(Exchange::EUR("2024-06-21".to_string()), 4.3331f64); - exchange_rates.insert(Exchange::EUR("2025-03-10".to_string()), 4.1857f64); - exchange_rates.insert(Exchange::USD("2017-05-08".to_string()), 3.8391f64); - exchange_rates.insert(Exchange::USD("2014-04-04".to_string()), 3.0397f64); - exchange_rates.insert(Exchange::USD("2015-08-10".to_string()), 3.8246f64); - exchange_rates.insert(Exchange::USD("2020-02-11".to_string()), 3.9041f64); - exchange_rates.insert(Exchange::USD("2020-10-28".to_string()), 3.9313f64); - exchange_rates.insert(Exchange::USD("2014-06-06".to_string()), 3.0222f64); - exchange_rates.insert(Exchange::USD("2022-06-23".to_string()), 4.4881f64); - exchange_rates.insert(Exchange::USD("2021-07-26".to_string()), 3.8915f64); - exchange_rates.insert(Exchange::EUR("2025-01-28".to_string()), 4.2092f64); - exchange_rates.insert(Exchange::USD("2019-11-12".to_string()), 3.878f64); - exchange_rates.insert(Exchange::EUR("2023-04-25".to_string()), 4.598f64); - exchange_rates.insert(Exchange::EUR("2024-11-18".to_string()), 4.332f64); - exchange_rates.insert(Exchange::USD("2023-11-28".to_string()), 3.975f64); - exchange_rates.insert(Exchange::USD("2020-03-16".to_string()), 3.9231f64); - exchange_rates.insert(Exchange::EUR("2024-11-13".to_string()), 4.3416f64); - exchange_rates.insert(Exchange::EUR("2023-08-11".to_string()), 4.4547f64); - exchange_rates.insert(Exchange::USD("2020-08-13".to_string()), 3.7176f64); - exchange_rates.insert(Exchange::USD("2015-11-16".to_string()), 3.9581f64); - exchange_rates.insert(Exchange::EUR("2024-11-29".to_string()), 4.3043f64); - exchange_rates.insert(Exchange::USD("2021-03-26".to_string()), 3.9307f64); - exchange_rates.insert(Exchange::USD("2021-10-11".to_string()), 3.9862f64); - exchange_rates.insert(Exchange::USD("2016-01-20".to_string()), 4.0877f64); - exchange_rates.insert(Exchange::USD("2015-05-06".to_string()), 3.6116f64); - exchange_rates.insert(Exchange::USD("2014-02-13".to_string()), 3.0532f64); - exchange_rates.insert(Exchange::USD("2018-03-02".to_string()), 3.42f64); - exchange_rates.insert(Exchange::USD("2023-05-19".to_string()), 4.2053f64); - exchange_rates.insert(Exchange::USD("2021-08-25".to_string()), 3.8869f64); - exchange_rates.insert(Exchange::EUR("2025-07-18".to_string()), 4.2509f64); - exchange_rates.insert(Exchange::EUR("2024-01-15".to_string()), 4.3748f64); - exchange_rates.insert(Exchange::USD("2024-02-14".to_string()), 4.0593f64); - exchange_rates.insert(Exchange::USD("2022-05-23".to_string()), 4.3369f64); - exchange_rates.insert(Exchange::USD("2012-11-26".to_string()), 3.1744f64); - exchange_rates.insert(Exchange::USD("2017-05-25".to_string()), 3.7177f64); - exchange_rates.insert(Exchange::USD("2017-12-08".to_string()), 3.5808f64); - exchange_rates.insert(Exchange::EUR("2025-12-10".to_string()), 4.2274f64); - exchange_rates.insert(Exchange::USD("2014-11-03".to_string()), 3.3772f64); - exchange_rates.insert(Exchange::USD("2020-06-25".to_string()), 3.9623f64); - exchange_rates.insert(Exchange::USD("2018-11-06".to_string()), 3.7802f64); - exchange_rates.insert(Exchange::USD("2025-07-14".to_string()), 3.6475f64); - exchange_rates.insert(Exchange::USD("2024-10-29".to_string()), 4.0251f64); - exchange_rates.insert(Exchange::USD("2019-04-01".to_string()), 3.8267f64); - exchange_rates.insert(Exchange::USD("2023-08-23".to_string()), 4.1438f64); - exchange_rates.insert(Exchange::USD("2025-09-30".to_string()), 3.6315f64); - exchange_rates.insert(Exchange::USD("2022-12-30".to_string()), 4.4018f64); - exchange_rates.insert(Exchange::EUR("2023-08-17".to_string()), 4.4681f64); - exchange_rates.insert(Exchange::USD("2015-03-27".to_string()), 3.789f64); - exchange_rates.insert(Exchange::USD("2019-04-30".to_string()), 3.8291f64); - exchange_rates.insert(Exchange::USD("2025-01-31".to_string()), 4.0576f64); - exchange_rates.insert(Exchange::USD("2024-02-13".to_string()), 4.0136f64); - exchange_rates.insert(Exchange::USD("2020-09-01".to_string()), 3.6707f64); - exchange_rates.insert(Exchange::USD("2019-09-19".to_string()), 3.9267f64); - exchange_rates.insert(Exchange::USD("2020-01-29".to_string()), 3.8871f64); - exchange_rates.insert(Exchange::USD("2023-07-07".to_string()), 4.1189f64); - exchange_rates.insert(Exchange::USD("2017-10-16".to_string()), 3.6004f64); - exchange_rates.insert(Exchange::USD("2019-04-08".to_string()), 3.8188f64); - exchange_rates.insert(Exchange::EUR("2024-07-17".to_string()), 4.2904f64); - exchange_rates.insert(Exchange::USD("2020-05-20".to_string()), 4.1619f64); - exchange_rates.insert(Exchange::EUR("2023-10-11".to_string()), 4.5183f64); - exchange_rates.insert(Exchange::USD("2018-08-03".to_string()), 3.6926f64); - exchange_rates.insert(Exchange::USD("2019-07-18".to_string()), 3.7933f64); - exchange_rates.insert(Exchange::USD("2024-09-03".to_string()), 3.8701f64); - exchange_rates.insert(Exchange::USD("2016-04-28".to_string()), 3.8695f64); - exchange_rates.insert(Exchange::USD("2022-05-25".to_string()), 4.3069f64); - exchange_rates.insert(Exchange::USD("2021-05-27".to_string()), 3.6929f64); - exchange_rates.insert(Exchange::USD("2023-11-15".to_string()), 4.0453f64); - exchange_rates.insert(Exchange::USD("2019-02-07".to_string()), 3.7919f64); - exchange_rates.insert(Exchange::EUR("2025-07-04".to_string()), 4.2515f64); - exchange_rates.insert(Exchange::USD("2025-06-30".to_string()), 3.6164f64); - exchange_rates.insert(Exchange::USD("2012-02-07".to_string()), 3.1806f64); - exchange_rates.insert(Exchange::USD("2012-03-21".to_string()), 3.1173f64); - exchange_rates.insert(Exchange::USD("2014-07-15".to_string()), 3.0454f64); - exchange_rates.insert(Exchange::USD("2014-01-02".to_string()), 3.0315f64); - exchange_rates.insert(Exchange::USD("2018-11-08".to_string()), 3.7599f64); - exchange_rates.insert(Exchange::USD("2021-03-08".to_string()), 3.8665f64); - exchange_rates.insert(Exchange::USD("2025-05-23".to_string()), 3.7506f64); - exchange_rates.insert(Exchange::USD("2017-06-05".to_string()), 3.7066f64); - exchange_rates.insert(Exchange::USD("2023-12-21".to_string()), 3.9645f64); - exchange_rates.insert(Exchange::USD("2021-11-02".to_string()), 3.9772f64); - exchange_rates.insert(Exchange::USD("2020-11-17".to_string()), 3.7877f64); - exchange_rates.insert(Exchange::USD("2025-09-16".to_string()), 3.6034f64); - exchange_rates.insert(Exchange::USD("2025-08-12".to_string()), 3.6702f64); - exchange_rates.insert(Exchange::USD("2019-07-01".to_string()), 3.743f64); - exchange_rates.insert(Exchange::USD("2018-01-15".to_string()), 3.401f64); - exchange_rates.insert(Exchange::USD("2017-09-22".to_string()), 3.5651f64); - exchange_rates.insert(Exchange::USD("2016-01-12".to_string()), 4.017f64); - exchange_rates.insert(Exchange::USD("2017-03-08".to_string()), 4.0818f64); - exchange_rates.insert(Exchange::USD("2014-08-08".to_string()), 3.1509f64); - exchange_rates.insert(Exchange::USD("2012-04-30".to_string()), 3.1509f64); - exchange_rates.insert(Exchange::EUR("2023-05-29".to_string()), 4.5294f64); - exchange_rates.insert(Exchange::USD("2020-10-26".to_string()), 3.8759f64); - exchange_rates.insert(Exchange::EUR("2024-12-31".to_string()), 4.273f64); - exchange_rates.insert(Exchange::USD("2016-03-18".to_string()), 3.7882f64); - exchange_rates.insert(Exchange::EUR("2025-08-19".to_string()), 4.242f64); - exchange_rates.insert(Exchange::EUR("2024-04-04".to_string()), 4.2921f64); - exchange_rates.insert(Exchange::EUR("2024-12-12".to_string()), 4.2818f64); - exchange_rates.insert(Exchange::USD("2016-07-07".to_string()), 4.0036f64); - exchange_rates.insert(Exchange::USD("2016-02-04".to_string()), 3.9492f64); - exchange_rates.insert(Exchange::EUR("2024-05-27".to_string()), 4.2528f64); - exchange_rates.insert(Exchange::USD("2024-05-20".to_string()), 3.9149f64); - exchange_rates.insert(Exchange::USD("2015-04-01".to_string()), 3.789f64); - exchange_rates.insert(Exchange::USD("2025-12-01".to_string()), 3.6383f64); - exchange_rates.insert(Exchange::EUR("2024-11-07".to_string()), 4.3431f64); - exchange_rates.insert(Exchange::USD("2022-04-28".to_string()), 4.4613f64); - exchange_rates.insert(Exchange::USD("2020-04-30".to_string()), 4.1729f64); - exchange_rates.insert(Exchange::USD("2020-07-09".to_string()), 3.9486f64); - exchange_rates.insert(Exchange::USD("2019-01-08".to_string()), 3.7559f64); - exchange_rates.insert(Exchange::USD("2015-03-05".to_string()), 3.7525f64); - exchange_rates.insert(Exchange::USD("2012-05-16".to_string()), 3.4353f64); - exchange_rates.insert(Exchange::EUR("2025-09-24".to_string()), 4.2676f64); - exchange_rates.insert(Exchange::USD("2014-12-12".to_string()), 3.3639f64); - exchange_rates.insert(Exchange::USD("2021-08-03".to_string()), 3.8315f64); - exchange_rates.insert(Exchange::USD("2022-01-14".to_string()), 3.9597f64); - exchange_rates.insert(Exchange::USD("2016-07-06".to_string()), 4.0225f64); - exchange_rates.insert(Exchange::USD("2015-11-05".to_string()), 3.8925f64); - exchange_rates.insert(Exchange::USD("2014-10-07".to_string()), 3.3106f64); - exchange_rates.insert(Exchange::USD("2014-12-08".to_string()), 3.3978f64); - exchange_rates.insert(Exchange::USD("2023-11-21".to_string()), 3.9882f64); - exchange_rates.insert(Exchange::USD("2017-04-20".to_string()), 3.9588f64); - exchange_rates.insert(Exchange::USD("2020-06-08".to_string()), 3.9197f64); - exchange_rates.insert(Exchange::EUR("2023-05-31".to_string()), 4.5376f64); - exchange_rates.insert(Exchange::USD("2017-12-05".to_string()), 3.5454f64); - exchange_rates.insert(Exchange::EUR("2024-01-22".to_string()), 4.356f64); - exchange_rates.insert(Exchange::USD("2016-06-10".to_string()), 3.8545f64); - exchange_rates.insert(Exchange::USD("2023-10-10".to_string()), 4.2985f64); - exchange_rates.insert(Exchange::USD("2017-06-08".to_string()), 3.74f64); - exchange_rates.insert(Exchange::USD("2017-09-12".to_string()), 3.5552f64); - exchange_rates.insert(Exchange::USD("2023-08-07".to_string()), 4.0347f64); - exchange_rates.insert(Exchange::USD("2016-06-14".to_string()), 3.9483f64); - exchange_rates.insert(Exchange::USD("2022-11-23".to_string()), 4.548f64); - exchange_rates.insert(Exchange::EUR("2023-11-02".to_string()), 4.4582f64); - exchange_rates.insert(Exchange::USD("2016-04-22".to_string()), 3.8399f64); - exchange_rates.insert(Exchange::USD("2021-08-26".to_string()), 3.8912f64); - exchange_rates.insert(Exchange::USD("2020-07-20".to_string()), 3.8997f64); - exchange_rates.insert(Exchange::EUR("2023-08-24".to_string()), 4.473f64); - exchange_rates.insert(Exchange::USD("2019-03-20".to_string()), 3.7767f64); - exchange_rates.insert(Exchange::USD("2016-08-17".to_string()), 3.8075f64); - exchange_rates.insert(Exchange::EUR("2023-01-30".to_string()), 4.716f64); - exchange_rates.insert(Exchange::USD("2020-03-10".to_string()), 3.8058f64); - exchange_rates.insert(Exchange::USD("2023-07-18".to_string()), 3.9451f64); - exchange_rates.insert(Exchange::USD("2017-08-29".to_string()), 3.5372f64); - exchange_rates.insert(Exchange::USD("2018-07-06".to_string()), 3.7222f64); - exchange_rates.insert(Exchange::USD("2018-05-21".to_string()), 3.6615f64); - exchange_rates.insert(Exchange::USD("2015-03-20".to_string()), 3.8645f64); - exchange_rates.insert(Exchange::USD("2014-10-17".to_string()), 3.2964f64); - exchange_rates.insert(Exchange::EUR("2025-05-07".to_string()), 4.2757f64); - exchange_rates.insert(Exchange::EUR("2025-05-12".to_string()), 4.2337f64); - exchange_rates.insert(Exchange::USD("2016-11-28".to_string()), 4.1521f64); - exchange_rates.insert(Exchange::USD("2019-07-09".to_string()), 3.8074f64); - exchange_rates.insert(Exchange::EUR("2025-08-21".to_string()), 4.2521f64); - exchange_rates.insert(Exchange::USD("2019-11-28".to_string()), 3.9252f64); - exchange_rates.insert(Exchange::USD("2021-06-29".to_string()), 3.7914f64); - exchange_rates.insert(Exchange::USD("2020-07-22".to_string()), 3.8534f64); - exchange_rates.insert(Exchange::USD("2025-01-16".to_string()), 4.1433f64); - exchange_rates.insert(Exchange::USD("2013-09-20".to_string()), 3.1152f64); - exchange_rates.insert(Exchange::USD("2019-05-28".to_string()), 3.8386f64); - exchange_rates.insert(Exchange::USD("2017-01-20".to_string()), 4.1005f64); - exchange_rates.insert(Exchange::USD("2021-04-20".to_string()), 3.7737f64); - exchange_rates.insert(Exchange::USD("2018-08-24".to_string()), 3.7014f64); - exchange_rates.insert(Exchange::USD("2025-09-18".to_string()), 3.5986f64); - exchange_rates.insert(Exchange::USD("2013-06-17".to_string()), 3.1719f64); - exchange_rates.insert(Exchange::USD("2020-12-24".to_string()), 3.6981f64); - exchange_rates.insert(Exchange::USD("2019-09-03".to_string()), 3.9882f64); - exchange_rates.insert(Exchange::USD("2018-04-20".to_string()), 3.3881f64); - exchange_rates.insert(Exchange::USD("2017-05-05".to_string()), 3.849f64); - exchange_rates.insert(Exchange::USD("2020-01-24".to_string()), 3.8475f64); - exchange_rates.insert(Exchange::USD("2012-08-09".to_string()), 3.2915f64); - exchange_rates.insert(Exchange::USD("2015-03-04".to_string()), 3.7485f64); - exchange_rates.insert(Exchange::USD("2015-04-03".to_string()), 3.7449f64); - exchange_rates.insert(Exchange::USD("2015-12-02".to_string()), 4.0305f64); - exchange_rates.insert(Exchange::USD("2025-03-10".to_string()), 3.8573f64); - exchange_rates.insert(Exchange::USD("2020-11-20".to_string()), 3.7677f64); - exchange_rates.insert(Exchange::USD("2018-05-24".to_string()), 3.659f64); - exchange_rates.insert(Exchange::EUR("2023-10-17".to_string()), 4.4389f64); - exchange_rates.insert(Exchange::USD("2013-06-20".to_string()), 3.2693f64); - exchange_rates.insert(Exchange::USD("2019-04-16".to_string()), 3.7802f64); - exchange_rates.insert(Exchange::USD("2014-03-21".to_string()), 3.0425f64); - exchange_rates.insert(Exchange::EUR("2023-04-11".to_string()), 4.681f64); - exchange_rates.insert(Exchange::EUR("2024-06-28".to_string()), 4.313f64); - exchange_rates.insert(Exchange::USD("2017-08-28".to_string()), 3.5736f64); - exchange_rates.insert(Exchange::USD("2015-07-01".to_string()), 3.7625f64); - exchange_rates.insert(Exchange::USD("2015-11-27".to_string()), 4.0333f64); - exchange_rates.insert(Exchange::USD("2018-10-02".to_string()), 3.7326f64); - exchange_rates.insert(Exchange::USD("2016-01-13".to_string()), 4.0068f64); - exchange_rates.insert(Exchange::USD("2020-02-28".to_string()), 3.9255f64); - exchange_rates.insert(Exchange::USD("2016-09-26".to_string()), 3.8324f64); - exchange_rates.insert(Exchange::USD("2015-09-30".to_string()), 3.7754f64); - exchange_rates.insert(Exchange::EUR("2025-07-11".to_string()), 4.2563f64); - exchange_rates.insert(Exchange::USD("2023-09-26".to_string()), 4.3485f64); - exchange_rates.insert(Exchange::USD("2015-06-12".to_string()), 3.7094f64); - exchange_rates.insert(Exchange::USD("2019-10-29".to_string()), 3.8598f64); - exchange_rates.insert(Exchange::USD("2018-03-12".to_string()), 3.4066f64); - exchange_rates.insert(Exchange::USD("2016-07-13".to_string()), 3.9809f64); - exchange_rates.insert(Exchange::USD("2012-08-27".to_string()), 3.257f64); - exchange_rates.insert(Exchange::USD("2020-05-14".to_string()), 4.2269f64); - exchange_rates.insert(Exchange::USD("2017-06-22".to_string()), 3.8002f64); - exchange_rates.insert(Exchange::USD("2016-04-20".to_string()), 3.7842f64); - exchange_rates.insert(Exchange::USD("2019-10-08".to_string()), 3.9405f64); - exchange_rates.insert(Exchange::USD("2022-01-27".to_string()), 4.083f64); - exchange_rates.insert(Exchange::USD("2012-09-25".to_string()), 3.2136f64); - exchange_rates.insert(Exchange::USD("2012-05-29".to_string()), 3.4675f64); - exchange_rates.insert(Exchange::USD("2018-12-03".to_string()), 3.7672f64); - exchange_rates.insert(Exchange::USD("2024-04-02".to_string()), 4.0009f64); - exchange_rates.insert(Exchange::USD("2014-02-18".to_string()), 3.03f64); - exchange_rates.insert(Exchange::USD("2019-10-01".to_string()), 4.0147f64); - exchange_rates.insert(Exchange::USD("2016-09-02".to_string()), 3.9164f64); - exchange_rates.insert(Exchange::EUR("2023-01-17".to_string()), 4.6946f64); - exchange_rates.insert(Exchange::EUR("2024-08-27".to_string()), 4.2802f64); - exchange_rates.insert(Exchange::USD("2016-02-15".to_string()), 3.922f64); - exchange_rates.insert(Exchange::USD("2021-08-09".to_string()), 3.8885f64); - exchange_rates.insert(Exchange::USD("2023-12-12".to_string()), 4.0204f64); - exchange_rates.insert(Exchange::EUR("2025-10-24".to_string()), 4.2353f64); - exchange_rates.insert(Exchange::USD("2014-03-07".to_string()), 3.0185f64); - exchange_rates.insert(Exchange::USD("2025-12-04".to_string()), 3.6221f64); - exchange_rates.insert(Exchange::USD("2024-08-30".to_string()), 3.8644f64); - exchange_rates.insert(Exchange::USD("2020-09-15".to_string()), 3.7445f64); - exchange_rates.insert(Exchange::USD("2016-02-01".to_string()), 4.0638f64); - exchange_rates.insert(Exchange::USD("2024-03-25".to_string()), 3.9833f64); - exchange_rates.insert(Exchange::USD("2012-11-19".to_string()), 3.2503f64); - exchange_rates.insert(Exchange::USD("2013-07-11".to_string()), 3.3225f64); - exchange_rates.insert(Exchange::EUR("2024-03-01".to_string()), 4.3176f64); - exchange_rates.insert(Exchange::USD("2018-05-29".to_string()), 3.7299f64); - exchange_rates.insert(Exchange::USD("2016-04-08".to_string()), 3.7701f64); - exchange_rates.insert(Exchange::USD("2018-05-18".to_string()), 3.6385f64); - exchange_rates.insert(Exchange::USD("2016-04-06".to_string()), 3.751f64); - exchange_rates.insert(Exchange::USD("2019-04-29".to_string()), 3.8468f64); - exchange_rates.insert(Exchange::USD("2023-04-25".to_string()), 4.1649f64); - exchange_rates.insert(Exchange::USD("2015-06-26".to_string()), 3.7275f64); - exchange_rates.insert(Exchange::USD("2021-03-11".to_string()), 3.8287f64); - exchange_rates.insert(Exchange::USD("2017-01-03".to_string()), 4.2271f64); - exchange_rates.insert(Exchange::USD("2019-07-19".to_string()), 3.7855f64); - exchange_rates.insert(Exchange::USD("2025-07-18".to_string()), 3.6535f64); - exchange_rates.insert(Exchange::USD("2017-05-23".to_string()), 3.7354f64); - exchange_rates.insert(Exchange::EUR("2024-12-24".to_string()), 4.2739f64); - exchange_rates.insert(Exchange::EUR("2024-06-25".to_string()), 4.2909f64); - exchange_rates.insert(Exchange::USD("2020-06-12".to_string()), 3.9299f64); - exchange_rates.insert(Exchange::USD("2020-08-25".to_string()), 3.7144f64); - exchange_rates.insert(Exchange::EUR("2023-11-07".to_string()), 4.4513f64); - exchange_rates.insert(Exchange::USD("2021-08-10".to_string()), 3.8937f64); - exchange_rates.insert(Exchange::EUR("2024-08-16".to_string()), 4.2732f64); - exchange_rates.insert(Exchange::USD("2025-10-16".to_string()), 3.6467f64); - exchange_rates.insert(Exchange::EUR("2025-02-07".to_string()), 4.1898f64); - exchange_rates.insert(Exchange::USD("2012-06-04".to_string()), 3.5431f64); - exchange_rates.insert(Exchange::USD("2013-06-03".to_string()), 3.2865f64); - exchange_rates.insert(Exchange::USD("2021-06-30".to_string()), 3.8035f64); - exchange_rates.insert(Exchange::USD("2020-12-22".to_string()), 3.6921f64); - exchange_rates.insert(Exchange::USD("2021-02-04".to_string()), 3.7509f64); - exchange_rates.insert(Exchange::USD("2012-01-18".to_string()), 3.4f64); - exchange_rates.insert(Exchange::USD("2023-06-26".to_string()), 4.0669f64); - exchange_rates.insert(Exchange::USD("2013-02-19".to_string()), 3.136f64); - exchange_rates.insert(Exchange::USD("2012-03-02".to_string()), 3.1023f64); - exchange_rates.insert(Exchange::USD("2013-11-19".to_string()), 3.0925f64); - exchange_rates.insert(Exchange::USD("2025-10-22".to_string()), 3.6591f64); - exchange_rates.insert(Exchange::USD("2019-02-22".to_string()), 3.8242f64); - exchange_rates.insert(Exchange::USD("2018-10-22".to_string()), 3.7273f64); - exchange_rates.insert(Exchange::USD("2014-06-13".to_string()), 3.0382f64); - exchange_rates.insert(Exchange::USD("2014-07-02".to_string()), 3.0387f64); - exchange_rates.insert(Exchange::USD("2022-08-31".to_string()), 4.736f64); - exchange_rates.insert(Exchange::USD("2013-09-05".to_string()), 3.2463f64); - exchange_rates.insert(Exchange::USD("2012-04-03".to_string()), 3.099f64); - exchange_rates.insert(Exchange::USD("2025-01-27".to_string()), 4.021f64); - exchange_rates.insert(Exchange::USD("2014-12-19".to_string()), 3.4791f64); - exchange_rates.insert(Exchange::USD("2022-05-04".to_string()), 4.4456f64); - exchange_rates.insert(Exchange::USD("2019-12-17".to_string()), 3.8211f64); - exchange_rates.insert(Exchange::USD("2014-02-21".to_string()), 3.0389f64); - exchange_rates.insert(Exchange::USD("2018-08-21".to_string()), 3.7375f64); - exchange_rates.insert(Exchange::USD("2025-04-02".to_string()), 3.8707f64); - exchange_rates.insert(Exchange::USD("2017-03-07".to_string()), 4.0803f64); - exchange_rates.insert(Exchange::EUR("2023-11-10".to_string()), 4.4227f64); - exchange_rates.insert(Exchange::USD("2024-02-20".to_string()), 3.9994f64); - exchange_rates.insert(Exchange::USD("2013-09-26".to_string()), 3.1277f64); - exchange_rates.insert(Exchange::USD("2013-02-15".to_string()), 3.1398f64); - exchange_rates.insert(Exchange::USD("2022-11-10".to_string()), 4.7328f64); - exchange_rates.insert(Exchange::EUR("2025-07-25".to_string()), 4.2544f64); - exchange_rates.insert(Exchange::USD("2023-12-18".to_string()), 3.9625f64); - exchange_rates.insert(Exchange::USD("2023-10-04".to_string()), 4.4155f64); - exchange_rates.insert(Exchange::USD("2020-12-07".to_string()), 3.7001f64); - exchange_rates.insert(Exchange::USD("2016-02-12".to_string()), 3.9074f64); - exchange_rates.insert(Exchange::EUR("2024-07-16".to_string()), 4.2604f64); - exchange_rates.insert(Exchange::USD("2021-06-02".to_string()), 3.6659f64); - exchange_rates.insert(Exchange::USD("2019-09-23".to_string()), 3.9983f64); - exchange_rates.insert(Exchange::EUR("2025-07-28".to_string()), 4.2565f64); - exchange_rates.insert(Exchange::USD("2021-08-13".to_string()), 3.8934f64); - exchange_rates.insert(Exchange::USD("2018-03-09".to_string()), 3.4132f64); - exchange_rates.insert(Exchange::EUR("2024-04-24".to_string()), 4.3177f64); - exchange_rates.insert(Exchange::USD("2024-09-25".to_string()), 3.8117f64); - exchange_rates.insert(Exchange::USD("2019-08-06".to_string()), 3.8482f64); - exchange_rates.insert(Exchange::USD("2019-11-05".to_string()), 3.8308f64); - exchange_rates.insert(Exchange::USD("2021-05-25".to_string()), 3.6549f64); - exchange_rates.insert(Exchange::USD("2012-03-28".to_string()), 3.11f64); - exchange_rates.insert(Exchange::USD("2018-02-26".to_string()), 3.3799f64); - exchange_rates.insert(Exchange::USD("2012-06-08".to_string()), 3.4566f64); - exchange_rates.insert(Exchange::EUR("2023-04-17".to_string()), 4.6341f64); - exchange_rates.insert(Exchange::USD("2024-02-21".to_string()), 3.9966f64); - exchange_rates.insert(Exchange::EUR("2025-05-02".to_string()), 4.275f64); - exchange_rates.insert(Exchange::USD("2024-10-31".to_string()), 4.0059f64); - exchange_rates.insert(Exchange::EUR("2024-11-08".to_string()), 4.3244f64); - exchange_rates.insert(Exchange::USD("2020-03-12".to_string()), 3.8642f64); - exchange_rates.insert(Exchange::USD("2022-12-28".to_string()), 4.4127f64); - exchange_rates.insert(Exchange::USD("2014-01-22".to_string()), 3.0761f64); - exchange_rates.insert(Exchange::USD("2023-09-07".to_string()), 4.289f64); - exchange_rates.insert(Exchange::USD("2024-12-18".to_string()), 4.0621f64); - exchange_rates.insert(Exchange::USD("2018-01-05".to_string()), 3.4488f64); - exchange_rates.insert(Exchange::USD("2021-05-12".to_string()), 3.7456f64); - exchange_rates.insert(Exchange::USD("2017-01-12".to_string()), 4.1103f64); - exchange_rates.insert(Exchange::USD("2017-02-10".to_string()), 4.0435f64); - exchange_rates.insert(Exchange::USD("2012-02-06".to_string()), 3.2084f64); - exchange_rates.insert(Exchange::USD("2021-03-04".to_string()), 3.7851f64); - exchange_rates.insert(Exchange::USD("2015-02-04".to_string()), 3.644f64); - exchange_rates.insert(Exchange::EUR("2024-03-05".to_string()), 4.3228f64); - exchange_rates.insert(Exchange::USD("2017-06-27".to_string()), 3.7442f64); - exchange_rates.insert(Exchange::USD("2020-12-31".to_string()), 3.7584f64); - exchange_rates.insert(Exchange::USD("2012-07-25".to_string()), 3.4719f64); - exchange_rates.insert(Exchange::USD("2019-11-14".to_string()), 3.9011f64); - exchange_rates.insert(Exchange::USD("2023-02-14".to_string()), 4.4463f64); - exchange_rates.insert(Exchange::USD("2019-10-31".to_string()), 3.8174f64); - exchange_rates.insert(Exchange::USD("2025-12-22".to_string()), 3.5904f64); - exchange_rates.insert(Exchange::USD("2023-02-16".to_string()), 4.4601f64); - exchange_rates.insert(Exchange::USD("2012-02-29".to_string()), 3.073f64); - exchange_rates.insert(Exchange::USD("2020-07-17".to_string()), 3.9263f64); - exchange_rates.insert(Exchange::USD("2019-09-26".to_string()), 4.0092f64); - exchange_rates.insert(Exchange::USD("2015-09-01".to_string()), 3.7503f64); - exchange_rates.insert(Exchange::EUR("2025-01-24".to_string()), 4.21f64); - exchange_rates.insert(Exchange::USD("2017-01-30".to_string()), 4.0472f64); - exchange_rates.insert(Exchange::USD("2017-12-20".to_string()), 3.5459f64); - exchange_rates.insert(Exchange::EUR("2024-11-28".to_string()), 4.3085f64); - exchange_rates.insert(Exchange::USD("2017-10-24".to_string()), 3.6031f64); - exchange_rates.insert(Exchange::USD("2021-09-02".to_string()), 3.8044f64); - exchange_rates.insert(Exchange::USD("2022-06-07".to_string()), 4.2935f64); - exchange_rates.insert(Exchange::USD("2021-03-03".to_string()), 3.7509f64); - exchange_rates.insert(Exchange::USD("2018-04-30".to_string()), 3.4868f64); - exchange_rates.insert(Exchange::EUR("2023-08-10".to_string()), 4.465f64); - exchange_rates.insert(Exchange::USD("2022-09-22".to_string()), 4.8343f64); - exchange_rates.insert(Exchange::USD("2019-12-16".to_string()), 3.8311f64); - exchange_rates.insert(Exchange::USD("2021-11-15".to_string()), 4.0497f64); - exchange_rates.insert(Exchange::USD("2024-05-24".to_string()), 3.9376f64); - exchange_rates.insert(Exchange::USD("2013-06-24".to_string()), 3.3137f64); - exchange_rates.insert(Exchange::USD("2023-07-21".to_string()), 3.999f64); - exchange_rates.insert(Exchange::USD("2021-03-01".to_string()), 3.7572f64); - exchange_rates.insert(Exchange::USD("2021-09-24".to_string()), 3.9268f64); - exchange_rates.insert(Exchange::USD("2014-12-16".to_string()), 3.3522f64); - exchange_rates.insert(Exchange::EUR("2024-11-05".to_string()), 4.3607f64); - exchange_rates.insert(Exchange::USD("2023-10-19".to_string()), 4.2264f64); - exchange_rates.insert(Exchange::EUR("2025-04-02".to_string()), 4.1794f64); - exchange_rates.insert(Exchange::USD("2024-08-29".to_string()), 3.867f64); - exchange_rates.insert(Exchange::USD("2015-02-24".to_string()), 3.6948f64); - exchange_rates.insert(Exchange::USD("2012-07-16".to_string()), 3.4353f64); - exchange_rates.insert(Exchange::USD("2020-09-25".to_string()), 3.9016f64); - exchange_rates.insert(Exchange::USD("2024-09-23".to_string()), 3.8571f64); - exchange_rates.insert(Exchange::USD("2014-08-22".to_string()), 3.152f64); - exchange_rates.insert(Exchange::USD("2025-01-10".to_string()), 4.1415f64); - exchange_rates.insert(Exchange::USD("2012-02-13".to_string()), 3.1643f64); - exchange_rates.insert(Exchange::EUR("2023-08-28".to_string()), 4.4716f64); - exchange_rates.insert(Exchange::USD("2025-02-19".to_string()), 3.9875f64); - exchange_rates.insert(Exchange::USD("2025-10-29".to_string()), 3.6399f64); - exchange_rates.insert(Exchange::EUR("2025-04-18".to_string()), 4.2823f64); - exchange_rates.insert(Exchange::USD("2022-11-04".to_string()), 4.7975f64); - exchange_rates.insert(Exchange::USD("2019-09-30".to_string()), 4f64); - exchange_rates.insert(Exchange::USD("2016-03-23".to_string()), 3.801f64); - exchange_rates.insert(Exchange::USD("2016-11-30".to_string()), 4.1721f64); - exchange_rates.insert(Exchange::EUR("2024-05-28".to_string()), 4.2592f64); - exchange_rates.insert(Exchange::USD("2022-08-02".to_string()), 4.5984f64); - exchange_rates.insert(Exchange::USD("2017-09-11".to_string()), 3.5293f64); - exchange_rates.insert(Exchange::EUR("2024-04-12".to_string()), 4.2666f64); - exchange_rates.insert(Exchange::EUR("2025-02-21".to_string()), 4.1705f64); - exchange_rates.insert(Exchange::USD("2012-12-06".to_string()), 3.1538f64); - exchange_rates.insert(Exchange::USD("2012-10-11".to_string()), 3.1819f64); - exchange_rates.insert(Exchange::USD("2024-03-22".to_string()), 3.9928f64); - exchange_rates.insert(Exchange::USD("2024-06-05".to_string()), 3.9607f64); - exchange_rates.insert(Exchange::USD("2023-05-08".to_string()), 4.1384f64); - exchange_rates.insert(Exchange::EUR("2024-01-08".to_string()), 4.3548f64); - exchange_rates.insert(Exchange::USD("2023-01-27".to_string()), 4.3252f64); - exchange_rates.insert(Exchange::USD("2021-08-18".to_string()), 3.8861f64); - exchange_rates.insert(Exchange::USD("2022-04-05".to_string()), 4.2233f64); - exchange_rates.insert(Exchange::USD("2016-02-11".to_string()), 3.9219f64); - exchange_rates.insert(Exchange::USD("2014-08-19".to_string()), 3.1356f64); - exchange_rates.insert(Exchange::EUR("2024-04-22".to_string()), 4.3203f64); - exchange_rates.insert(Exchange::USD("2016-06-24".to_string()), 3.9994f64); - exchange_rates.insert(Exchange::USD("2013-09-23".to_string()), 3.126f64); - exchange_rates.insert(Exchange::USD("2014-05-30".to_string()), 3.0435f64); - exchange_rates.insert(Exchange::USD("2012-09-26".to_string()), 3.2187f64); - exchange_rates.insert(Exchange::USD("2017-09-15".to_string()), 3.5863f64); - exchange_rates.insert(Exchange::USD("2021-09-16".to_string()), 3.8847f64); - exchange_rates.insert(Exchange::USD("2012-03-13".to_string()), 3.1288f64); - exchange_rates.insert(Exchange::USD("2024-08-06".to_string()), 3.9467f64); - exchange_rates.insert(Exchange::USD("2019-09-16".to_string()), 3.9116f64); - exchange_rates.insert(Exchange::USD("2016-09-16".to_string()), 3.8497f64); - exchange_rates.insert(Exchange::USD("2021-08-23".to_string()), 3.9107f64); - exchange_rates.insert(Exchange::USD("2019-12-03".to_string()), 3.8706f64); - exchange_rates.insert(Exchange::USD("2023-11-14".to_string()), 4.121f64); - exchange_rates.insert(Exchange::EUR("2025-12-09".to_string()), 4.234f64); - exchange_rates.insert(Exchange::USD("2015-02-10".to_string()), 3.722f64); - exchange_rates.insert(Exchange::USD("2021-11-04".to_string()), 3.9807f64); - exchange_rates.insert(Exchange::USD("2015-02-17".to_string()), 3.6788f64); - exchange_rates.insert(Exchange::USD("2025-03-04".to_string()), 3.9543f64); - exchange_rates.insert(Exchange::EUR("2023-08-31".to_string()), 4.4684f64); - exchange_rates.insert(Exchange::EUR("2024-04-25".to_string()), 4.3198f64); - exchange_rates.insert(Exchange::USD("2016-01-08".to_string()), 3.9963f64); - exchange_rates.insert(Exchange::USD("2012-09-13".to_string()), 3.1852f64); - exchange_rates.insert(Exchange::USD("2025-09-09".to_string()), 3.6173f64); - exchange_rates.insert(Exchange::USD("2015-12-04".to_string()), 3.9607f64); - exchange_rates.insert(Exchange::USD("2014-09-05".to_string()), 3.2354f64); - exchange_rates.insert(Exchange::USD("2025-06-25".to_string()), 3.659f64); - exchange_rates.insert(Exchange::USD("2017-02-20".to_string()), 4.0692f64); - exchange_rates.insert(Exchange::EUR("2024-10-01".to_string()), 4.2846f64); - exchange_rates.insert(Exchange::USD("2015-01-02".to_string()), 3.5725f64); - exchange_rates.insert(Exchange::USD("2017-02-17".to_string()), 4.0693f64); - exchange_rates.insert(Exchange::USD("2017-04-26".to_string()), 3.8757f64); - exchange_rates.insert(Exchange::USD("2025-02-25".to_string()), 3.947f64); - exchange_rates.insert(Exchange::USD("2025-05-02".to_string()), 3.7722f64); - exchange_rates.insert(Exchange::USD("2025-03-18".to_string()), 3.8152f64); - exchange_rates.insert(Exchange::EUR("2024-10-14".to_string()), 4.2928f64); - exchange_rates.insert(Exchange::EUR("2025-02-04".to_string()), 4.2249f64); - exchange_rates.insert(Exchange::USD("2018-08-16".to_string()), 3.7871f64); - exchange_rates.insert(Exchange::EUR("2025-12-03".to_string()), 4.2312f64); - exchange_rates.insert(Exchange::USD("2017-08-21".to_string()), 3.6408f64); - exchange_rates.insert(Exchange::USD("2012-04-11".to_string()), 3.2034f64); - exchange_rates.insert(Exchange::USD("2020-04-22".to_string()), 4.1736f64); - exchange_rates.insert(Exchange::USD("2014-02-05".to_string()), 3.0987f64); - exchange_rates.insert(Exchange::USD("2013-12-27".to_string()), 3.0105f64); - exchange_rates.insert(Exchange::USD("2024-09-19".to_string()), 3.8249f64); - exchange_rates.insert(Exchange::USD("2025-06-23".to_string()), 3.7212f64); - exchange_rates.insert(Exchange::USD("2017-08-18".to_string()), 3.6459f64); - exchange_rates.insert(Exchange::USD("2024-02-26".to_string()), 3.9776f64); - exchange_rates.insert(Exchange::USD("2016-02-24".to_string()), 3.9803f64); - exchange_rates.insert(Exchange::USD("2013-03-21".to_string()), 3.2387f64); - exchange_rates.insert(Exchange::USD("2014-02-06".to_string()), 3.095f64); - exchange_rates.insert(Exchange::USD("2018-04-13".to_string()), 3.3862f64); - exchange_rates.insert(Exchange::USD("2012-05-08".to_string()), 3.2238f64); - exchange_rates.insert(Exchange::USD("2025-10-17".to_string()), 3.6388f64); - exchange_rates.insert(Exchange::USD("2015-08-03".to_string()), 3.7705f64); - exchange_rates.insert(Exchange::EUR("2024-07-24".to_string()), 4.2796f64); - exchange_rates.insert(Exchange::USD("2012-07-18".to_string()), 3.395f64); - exchange_rates.insert(Exchange::EUR("2023-03-14".to_string()), 4.6909f64); - exchange_rates.insert(Exchange::USD("2021-11-26".to_string()), 4.1754f64); - exchange_rates.insert(Exchange::USD("2020-05-29".to_string()), 4.0031f64); - exchange_rates.insert(Exchange::USD("2013-06-11".to_string()), 3.2201f64); - exchange_rates.insert(Exchange::USD("2015-07-24".to_string()), 3.7654f64); - exchange_rates.insert(Exchange::USD("2017-07-13".to_string()), 3.7133f64); - exchange_rates.insert(Exchange::USD("2020-08-24".to_string()), 3.7273f64); - exchange_rates.insert(Exchange::USD("2022-03-03".to_string()), 4.3257f64); - exchange_rates.insert(Exchange::USD("2012-09-19".to_string()), 3.1631f64); - exchange_rates.insert(Exchange::USD("2021-02-12".to_string()), 3.7186f64); - exchange_rates.insert(Exchange::USD("2013-11-13".to_string()), 3.1358f64); - exchange_rates.insert(Exchange::USD("2024-09-05".to_string()), 3.8487f64); - exchange_rates.insert(Exchange::EUR("2023-10-31".to_string()), 4.4475f64); - exchange_rates.insert(Exchange::EUR("2024-05-16".to_string()), 4.2617f64); - exchange_rates.insert(Exchange::USD("2019-11-06".to_string()), 3.8497f64); - exchange_rates.insert(Exchange::USD("2021-04-27".to_string()), 3.7826f64); - exchange_rates.insert(Exchange::USD("2020-10-14".to_string()), 3.8301f64); - exchange_rates.insert(Exchange::EUR("2025-10-14".to_string()), 4.2645f64); - exchange_rates.insert(Exchange::USD("2015-06-15".to_string()), 3.6905f64); - exchange_rates.insert(Exchange::USD("2019-10-16".to_string()), 3.8934f64); - exchange_rates.insert(Exchange::USD("2023-09-05".to_string()), 4.1643f64); - exchange_rates.insert(Exchange::USD("2024-07-09".to_string()), 3.9391f64); - exchange_rates.insert(Exchange::USD("2020-09-22".to_string()), 3.8359f64); - exchange_rates.insert(Exchange::USD("2023-11-23".to_string()), 3.9969f64); - exchange_rates.insert(Exchange::USD("2025-03-27".to_string()), 3.8913f64); - exchange_rates.insert(Exchange::USD("2021-11-17".to_string()), 4.1204f64); - exchange_rates.insert(Exchange::USD("2020-04-07".to_string()), 4.1717f64); - exchange_rates.insert(Exchange::EUR("2024-02-15".to_string()), 4.3463f64); - exchange_rates.insert(Exchange::USD("2022-03-11".to_string()), 4.3694f64); - exchange_rates.insert(Exchange::EUR("2024-09-26".to_string()), 4.2665f64); - exchange_rates.insert(Exchange::USD("2015-07-28".to_string()), 3.7303f64); - exchange_rates.insert(Exchange::USD("2014-01-24".to_string()), 3.0727f64); - exchange_rates.insert(Exchange::EUR("2024-07-05".to_string()), 4.2858f64); - exchange_rates.insert(Exchange::USD("2017-12-01".to_string()), 3.5352f64); - exchange_rates.insert(Exchange::USD("2025-10-03".to_string()), 3.6253f64); - exchange_rates.insert(Exchange::USD("2020-07-08".to_string()), 3.9666f64); - exchange_rates.insert(Exchange::USD("2012-08-01".to_string()), 3.342f64); - exchange_rates.insert(Exchange::EUR("2024-01-10".to_string()), 4.3413f64); - exchange_rates.insert(Exchange::EUR("2024-01-11".to_string()), 4.3505f64); - exchange_rates.insert(Exchange::USD("2016-10-17".to_string()), 3.9265f64); - exchange_rates.insert(Exchange::EUR("2025-03-19".to_string()), 4.1945f64); - exchange_rates.insert(Exchange::USD("2014-06-18".to_string()), 3.0589f64); - exchange_rates.insert(Exchange::USD("2024-09-13".to_string()), 3.8659f64); - exchange_rates.insert(Exchange::USD("2022-02-01".to_string()), 4.0689f64); - exchange_rates.insert(Exchange::USD("2012-03-27".to_string()), 3.0939f64); - exchange_rates.insert(Exchange::USD("2019-12-12".to_string()), 3.8505f64); - exchange_rates.insert(Exchange::USD("2015-05-15".to_string()), 3.5719f64); - exchange_rates.insert(Exchange::EUR("2023-07-06".to_string()), 4.4754f64); - exchange_rates.insert(Exchange::USD("2021-11-16".to_string()), 4.1061f64); - exchange_rates.insert(Exchange::USD("2013-11-25".to_string()), 3.1019f64); - exchange_rates.insert(Exchange::USD("2021-09-23".to_string()), 3.9256f64); + exchange_rates.insert(Exchange::EUR("2025-03-24".to_string()), dec!(4.1832)); + exchange_rates.insert(Exchange::USD("2016-07-05".to_string()), dec!(3.9963)); + exchange_rates.insert(Exchange::USD("2023-10-12".to_string()), dec!(4.2659)); + exchange_rates.insert(Exchange::USD("2024-07-12".to_string()), dec!(3.9099)); + exchange_rates.insert(Exchange::USD("2020-01-21".to_string()), dec!(3.8284)); + exchange_rates.insert(Exchange::USD("2025-03-26".to_string()), dec!(3.8614)); + exchange_rates.insert(Exchange::USD("2018-05-10".to_string()), dec!(3.5773)); + exchange_rates.insert(Exchange::USD("2019-05-22".to_string()), dec!(3.862)); + exchange_rates.insert(Exchange::USD("2024-11-15".to_string()), dec!(4.0898)); + exchange_rates.insert(Exchange::EUR("2025-12-17".to_string()), dec!(4.2149)); + exchange_rates.insert(Exchange::USD("2024-04-12".to_string()), dec!(3.9983)); + exchange_rates.insert(Exchange::USD("2025-08-21".to_string()), dec!(3.6483)); + exchange_rates.insert(Exchange::USD("2020-06-23".to_string()), dec!(3.9311)); + exchange_rates.insert(Exchange::USD("2025-10-15".to_string()), dec!(3.6585)); + exchange_rates.insert(Exchange::USD("2015-01-22".to_string()), dec!(3.6994)); + exchange_rates.insert(Exchange::USD("2017-01-04".to_string()), dec!(4.2037)); + exchange_rates.insert(Exchange::USD("2015-11-02".to_string()), dec!(3.859)); + exchange_rates.insert(Exchange::USD("2023-09-14".to_string()), dec!(4.312)); + exchange_rates.insert(Exchange::USD("2024-12-11".to_string()), dec!(4.0628)); + exchange_rates.insert(Exchange::USD("2020-12-18".to_string()), dec!(3.6322)); + exchange_rates.insert(Exchange::USD("2025-10-20".to_string()), dec!(3.6349)); + exchange_rates.insert(Exchange::USD("2022-08-12".to_string()), dec!(4.5459)); + exchange_rates.insert(Exchange::USD("2019-11-21".to_string()), dec!(3.8737)); + exchange_rates.insert(Exchange::USD("2016-04-15".to_string()), dec!(3.8176)); + exchange_rates.insert(Exchange::USD("2015-03-13".to_string()), dec!(3.9141)); + exchange_rates.insert(Exchange::EUR("2023-04-05".to_string()), dec!(4.6803)); + exchange_rates.insert(Exchange::USD("2021-07-28".to_string()), dec!(3.8849)); + exchange_rates.insert(Exchange::EUR("2023-12-11".to_string()), dec!(4.3366)); + exchange_rates.insert(Exchange::USD("2012-07-02".to_string()), dec!(3.3456)); + exchange_rates.insert(Exchange::USD("2021-12-15".to_string()), dec!(4.0999)); + exchange_rates.insert(Exchange::USD("2015-03-02".to_string()), dec!(3.7053)); + exchange_rates.insert(Exchange::USD("2020-08-07".to_string()), dec!(3.7302)); + exchange_rates.insert(Exchange::USD("2013-07-25".to_string()), dec!(3.2143)); + exchange_rates.insert(Exchange::USD("2021-07-14".to_string()), dec!(3.8955)); + exchange_rates.insert(Exchange::USD("2020-08-31".to_string()), dec!(3.6924)); + exchange_rates.insert(Exchange::USD("2012-05-17".to_string()), dec!(3.4194)); + exchange_rates.insert(Exchange::USD("2012-06-21".to_string()), dec!(3.3617)); + exchange_rates.insert(Exchange::EUR("2023-11-20".to_string()), dec!(4.368)); + exchange_rates.insert(Exchange::USD("2025-04-25".to_string()), dec!(3.7611)); + exchange_rates.insert(Exchange::EUR("2024-03-22".to_string()), dec!(4.3186)); + exchange_rates.insert(Exchange::USD("2024-02-19".to_string()), dec!(4.0269)); + exchange_rates.insert(Exchange::USD("2018-06-06".to_string()), dec!(3.647)); + exchange_rates.insert(Exchange::USD("2021-09-15".to_string()), dec!(3.8475)); + exchange_rates.insert(Exchange::USD("2019-10-04".to_string()), dec!(3.9469)); + exchange_rates.insert(Exchange::EUR("2025-04-16".to_string()), dec!(4.3033)); + exchange_rates.insert(Exchange::USD("2024-08-05".to_string()), dec!(3.9331)); + exchange_rates.insert(Exchange::USD("2019-02-11".to_string()), dec!(3.819)); + exchange_rates.insert(Exchange::USD("2019-02-01".to_string()), dec!(3.7243)); + exchange_rates.insert(Exchange::USD("2014-10-30".to_string()), dec!(3.3592)); + exchange_rates.insert(Exchange::USD("2016-05-16".to_string()), dec!(3.8625)); + exchange_rates.insert(Exchange::USD("2016-06-28".to_string()), dec!(4.003)); + exchange_rates.insert(Exchange::EUR("2025-08-25".to_string()), dec!(4.2627)); + exchange_rates.insert(Exchange::USD("2023-01-11".to_string()), dec!(4.3639)); + exchange_rates.insert(Exchange::USD("2016-01-07".to_string()), dec!(4.0085)); + exchange_rates.insert(Exchange::USD("2020-01-13".to_string()), dec!(3.8101)); + exchange_rates.insert(Exchange::EUR("2025-05-15".to_string()), dec!(4.2378)); + exchange_rates.insert(Exchange::EUR("2024-04-11".to_string()), dec!(4.2649)); + exchange_rates.insert(Exchange::USD("2015-04-21".to_string()), dec!(3.7275)); + exchange_rates.insert(Exchange::USD("2023-05-09".to_string()), dec!(4.1609)); + exchange_rates.insert(Exchange::EUR("2023-04-19".to_string()), dec!(4.6278)); + exchange_rates.insert(Exchange::USD("2025-03-24".to_string()), dec!(3.859)); + exchange_rates.insert(Exchange::USD("2018-10-23".to_string()), dec!(3.7485)); + exchange_rates.insert(Exchange::USD("2015-04-08".to_string()), dec!(3.7135)); + exchange_rates.insert(Exchange::USD("2023-03-15".to_string()), dec!(4.403)); + exchange_rates.insert(Exchange::USD("2019-07-03".to_string()), dec!(3.7596)); + exchange_rates.insert(Exchange::USD("2014-04-29".to_string()), dec!(3.0318)); + exchange_rates.insert(Exchange::USD("2015-07-23".to_string()), dec!(3.7559)); + exchange_rates.insert(Exchange::USD("2024-06-27".to_string()), dec!(4.0312)); + exchange_rates.insert(Exchange::USD("2012-05-28".to_string()), dec!(3.4535)); + exchange_rates.insert(Exchange::EUR("2025-04-24".to_string()), dec!(4.2789)); + exchange_rates.insert(Exchange::USD("2019-04-15".to_string()), dec!(3.7789)); + exchange_rates.insert(Exchange::USD("2023-03-03".to_string()), dec!(4.4341)); + exchange_rates.insert(Exchange::USD("2017-02-06".to_string()), dec!(3.9892)); + exchange_rates.insert(Exchange::USD("2018-06-14".to_string()), dec!(3.6155)); + exchange_rates.insert(Exchange::USD("2013-06-26".to_string()), dec!(3.3239)); + exchange_rates.insert(Exchange::EUR("2023-01-10".to_string()), dec!(4.6981)); + exchange_rates.insert(Exchange::USD("2024-08-13".to_string()), dec!(3.9314)); + exchange_rates.insert(Exchange::USD("2017-12-15".to_string()), dec!(3.5786)); + exchange_rates.insert(Exchange::USD("2014-05-23".to_string()), dec!(3.049)); + exchange_rates.insert(Exchange::USD("2023-10-09".to_string()), dec!(4.3439)); + exchange_rates.insert(Exchange::USD("2020-06-26".to_string()), dec!(3.9697)); + exchange_rates.insert(Exchange::USD("2019-07-29".to_string()), dec!(3.8453)); + exchange_rates.insert(Exchange::USD("2022-05-24".to_string()), dec!(4.3071)); + exchange_rates.insert(Exchange::EUR("2024-09-02".to_string()), dec!(4.2812)); + exchange_rates.insert(Exchange::EUR("2025-07-03".to_string()), dec!(4.2634)); + exchange_rates.insert(Exchange::USD("2020-12-08".to_string()), dec!(3.6914)); + exchange_rates.insert(Exchange::USD("2018-02-08".to_string()), dec!(3.4119)); + exchange_rates.insert(Exchange::USD("2014-08-13".to_string()), dec!(3.1442)); + exchange_rates.insert(Exchange::EUR("2025-06-09".to_string()), dec!(4.2772)); + exchange_rates.insert(Exchange::USD("2025-09-24".to_string()), dec!(3.6254)); + exchange_rates.insert(Exchange::USD("2014-04-16".to_string()), dec!(3.0272)); + exchange_rates.insert(Exchange::USD("2012-10-29".to_string()), dec!(3.2145)); + exchange_rates.insert(Exchange::EUR("2023-09-28".to_string()), dec!(4.634)); + exchange_rates.insert(Exchange::USD("2022-10-31".to_string()), dec!(4.734)); + exchange_rates.insert(Exchange::USD("2012-01-31".to_string()), dec!(3.2032)); + exchange_rates.insert(Exchange::USD("2015-08-21".to_string()), dec!(3.7308)); + exchange_rates.insert(Exchange::USD("2018-07-02".to_string()), dec!(3.7703)); + exchange_rates.insert(Exchange::USD("2015-11-10".to_string()), dec!(3.957)); + exchange_rates.insert(Exchange::USD("2019-05-14".to_string()), dec!(3.8323)); + exchange_rates.insert(Exchange::USD("2014-11-06".to_string()), dec!(3.3769)); + exchange_rates.insert(Exchange::EUR("2024-12-06".to_string()), dec!(4.2669)); + exchange_rates.insert(Exchange::USD("2016-10-12".to_string()), dec!(3.8851)); + exchange_rates.insert(Exchange::USD("2013-12-30".to_string()), dec!(3.018)); + exchange_rates.insert(Exchange::USD("2022-02-04".to_string()), dec!(3.9657)); + exchange_rates.insert(Exchange::USD("2025-10-01".to_string()), dec!(3.6245)); + exchange_rates.insert(Exchange::EUR("2024-01-17".to_string()), dec!(4.3978)); + exchange_rates.insert(Exchange::USD("2021-01-15".to_string()), dec!(3.7466)); + exchange_rates.insert(Exchange::USD("2014-02-27".to_string()), dec!(3.0655)); + exchange_rates.insert(Exchange::USD("2019-03-04".to_string()), dec!(3.7893)); + exchange_rates.insert(Exchange::USD("2020-05-18".to_string()), dec!(4.2224)); + exchange_rates.insert(Exchange::USD("2015-03-06".to_string()), dec!(3.7649)); + exchange_rates.insert(Exchange::USD("2023-12-28".to_string()), dec!(3.899)); + exchange_rates.insert(Exchange::USD("2023-05-26".to_string()), dec!(4.2156)); + exchange_rates.insert(Exchange::USD("2012-05-22".to_string()), dec!(3.3811)); + exchange_rates.insert(Exchange::EUR("2023-03-27".to_string()), dec!(4.6856)); + exchange_rates.insert(Exchange::EUR("2025-10-10".to_string()), dec!(4.2583)); + exchange_rates.insert(Exchange::EUR("2024-05-17".to_string()), dec!(4.2685)); + exchange_rates.insert(Exchange::EUR("2023-11-15".to_string()), dec!(4.39)); + exchange_rates.insert(Exchange::USD("2025-11-21".to_string()), dec!(3.6868)); + exchange_rates.insert(Exchange::USD("2017-08-24".to_string()), dec!(3.6329)); + exchange_rates.insert(Exchange::USD("2025-12-12".to_string()), dec!(3.6027)); + exchange_rates.insert(Exchange::USD("2013-03-19".to_string()), dec!(3.2055)); + exchange_rates.insert(Exchange::EUR("2025-06-06".to_string()), dec!(4.2881)); + exchange_rates.insert(Exchange::USD("2024-02-08".to_string()), dec!(4.0292)); + exchange_rates.insert(Exchange::USD("2024-09-17".to_string()), dec!(3.8354)); + exchange_rates.insert(Exchange::EUR("2025-11-18".to_string()), dec!(4.2331)); + exchange_rates.insert(Exchange::EUR("2024-05-20".to_string()), dec!(4.2575)); + exchange_rates.insert(Exchange::EUR("2024-09-12".to_string()), dec!(4.2986)); + exchange_rates.insert(Exchange::USD("2018-06-15".to_string()), dec!(3.6922)); + exchange_rates.insert(Exchange::USD("2013-11-26".to_string()), dec!(3.0945)); + exchange_rates.insert(Exchange::EUR("2025-07-16".to_string()), dec!(4.2585)); + exchange_rates.insert(Exchange::USD("2018-07-18".to_string()), dec!(3.7031)); + exchange_rates.insert(Exchange::USD("2014-02-10".to_string()), dec!(3.0683)); + exchange_rates.insert(Exchange::EUR("2024-01-26".to_string()), dec!(4.3802)); + exchange_rates.insert(Exchange::USD("2022-06-27".to_string()), dec!(4.4369)); + exchange_rates.insert(Exchange::USD("2024-02-27".to_string()), dec!(3.9682)); + exchange_rates.insert(Exchange::USD("2023-08-11".to_string()), dec!(4.0501)); + exchange_rates.insert(Exchange::USD("2016-10-19".to_string()), dec!(3.9285)); + exchange_rates.insert(Exchange::USD("2018-01-08".to_string()), dec!(3.4735)); + exchange_rates.insert(Exchange::EUR("2024-06-03".to_string()), dec!(4.2817)); + exchange_rates.insert(Exchange::USD("2022-09-26".to_string()), dec!(4.9113)); + exchange_rates.insert(Exchange::USD("2020-06-17".to_string()), dec!(3.9532)); + exchange_rates.insert(Exchange::USD("2014-07-11".to_string()), dec!(3.0426)); + exchange_rates.insert(Exchange::USD("2012-03-19".to_string()), dec!(3.1361)); + exchange_rates.insert(Exchange::USD("2019-06-11".to_string()), dec!(3.7722)); + exchange_rates.insert(Exchange::USD("2024-03-26".to_string()), dec!(3.9704)); + exchange_rates.insert(Exchange::USD("2024-01-09".to_string()), dec!(3.9612)); + exchange_rates.insert(Exchange::USD("2015-04-15".to_string()), dec!(3.7875)); + exchange_rates.insert(Exchange::USD("2013-02-04".to_string()), dec!(3.0563)); + exchange_rates.insert(Exchange::USD("2023-04-14".to_string()), dec!(4.2042)); + exchange_rates.insert(Exchange::USD("2015-08-13".to_string()), dec!(3.7625)); + exchange_rates.insert(Exchange::EUR("2023-05-25".to_string()), dec!(4.503)); + exchange_rates.insert(Exchange::USD("2023-02-07".to_string()), dec!(4.4325)); + exchange_rates.insert(Exchange::USD("2013-12-16".to_string()), dec!(3.035)); + exchange_rates.insert(Exchange::USD("2022-09-23".to_string()), dec!(4.8796)); + exchange_rates.insert(Exchange::EUR("2023-07-19".to_string()), dec!(4.4492)); + exchange_rates.insert(Exchange::USD("2017-07-26".to_string()), dec!(3.6661)); + exchange_rates.insert(Exchange::USD("2015-12-18".to_string()), dec!(3.9558)); + exchange_rates.insert(Exchange::EUR("2023-08-08".to_string()), dec!(4.4375)); + exchange_rates.insert(Exchange::USD("2025-02-13".to_string()), dec!(3.996)); + exchange_rates.insert(Exchange::USD("2021-06-28".to_string()), dec!(3.7762)); + exchange_rates.insert(Exchange::EUR("2024-01-18".to_string()), dec!(4.4016)); + exchange_rates.insert(Exchange::USD("2015-10-06".to_string()), dec!(3.789)); + exchange_rates.insert(Exchange::USD("2013-01-15".to_string()), dec!(3.075)); + exchange_rates.insert(Exchange::USD("2020-08-14".to_string()), dec!(3.7227)); + exchange_rates.insert(Exchange::USD("2021-02-09".to_string()), dec!(3.6972)); + exchange_rates.insert(Exchange::USD("2019-07-26".to_string()), dec!(3.8296)); + exchange_rates.insert(Exchange::USD("2020-11-23".to_string()), dec!(3.7616)); + exchange_rates.insert(Exchange::USD("2015-03-26".to_string()), dec!(3.705)); + exchange_rates.insert(Exchange::USD("2012-11-05".to_string()), dec!(3.2211)); + exchange_rates.insert(Exchange::EUR("2025-10-06".to_string()), dec!(4.2521)); + exchange_rates.insert(Exchange::USD("2021-06-14".to_string()), dec!(3.7185)); + exchange_rates.insert(Exchange::USD("2017-10-23".to_string()), dec!(3.6061)); + exchange_rates.insert(Exchange::USD("2017-10-27".to_string()), dec!(3.6568)); + exchange_rates.insert(Exchange::EUR("2024-03-15".to_string()), dec!(4.2929)); + exchange_rates.insert(Exchange::USD("2015-06-29".to_string()), dec!(3.7671)); + exchange_rates.insert(Exchange::EUR("2025-10-30".to_string()), dec!(4.2425)); + exchange_rates.insert(Exchange::USD("2018-09-13".to_string()), dec!(3.713)); + exchange_rates.insert(Exchange::EUR("2025-09-25".to_string()), dec!(4.2619)); + exchange_rates.insert(Exchange::EUR("2024-07-12".to_string()), dec!(4.2567)); + exchange_rates.insert(Exchange::USD("2018-08-30".to_string()), dec!(3.6724)); + exchange_rates.insert(Exchange::USD("2018-03-27".to_string()), dec!(3.3921)); + exchange_rates.insert(Exchange::USD("2021-04-21".to_string()), dec!(3.795)); + exchange_rates.insert(Exchange::USD("2016-04-26".to_string()), dec!(3.8935)); + exchange_rates.insert(Exchange::USD("2024-10-21".to_string()), dec!(3.9775)); + exchange_rates.insert(Exchange::USD("2014-06-24".to_string()), dec!(3.0526)); + exchange_rates.insert(Exchange::USD("2013-08-30".to_string()), dec!(3.2209)); + exchange_rates.insert(Exchange::EUR("2024-08-13".to_string()), dec!(4.2945)); + exchange_rates.insert(Exchange::EUR("2023-02-01".to_string()), dec!(4.708)); + exchange_rates.insert(Exchange::EUR("2024-01-29".to_string()), dec!(4.3653)); + exchange_rates.insert(Exchange::EUR("2023-09-27".to_string()), dec!(4.6065)); + exchange_rates.insert(Exchange::USD("2022-10-13".to_string()), dec!(4.9905)); + exchange_rates.insert(Exchange::EUR("2025-01-29".to_string()), dec!(4.2077)); + exchange_rates.insert(Exchange::EUR("2023-07-21".to_string()), dec!(4.4501)); + exchange_rates.insert(Exchange::EUR("2025-09-26".to_string()), dec!(4.2668)); + exchange_rates.insert(Exchange::USD("2018-04-16".to_string()), dec!(3.3666)); + exchange_rates.insert(Exchange::USD("2014-12-04".to_string()), dec!(3.3728)); + exchange_rates.insert(Exchange::USD("2025-01-23".to_string()), dec!(4.0515)); + exchange_rates.insert(Exchange::USD("2024-08-12".to_string()), dec!(3.9488)); + exchange_rates.insert(Exchange::USD("2023-01-31".to_string()), dec!(4.348)); + exchange_rates.insert(Exchange::USD("2019-04-25".to_string()), dec!(3.8537)); + exchange_rates.insert(Exchange::USD("2014-07-25".to_string()), dec!(3.0831)); + exchange_rates.insert(Exchange::USD("2014-08-20".to_string()), dec!(3.147)); + exchange_rates.insert(Exchange::USD("2025-06-27".to_string()), dec!(3.6177)); + exchange_rates.insert(Exchange::USD("2012-10-23".to_string()), dec!(3.1662)); + exchange_rates.insert(Exchange::EUR("2023-07-11".to_string()), dec!(4.4426)); + exchange_rates.insert(Exchange::USD("2014-07-29".to_string()), dec!(3.09)); + exchange_rates.insert(Exchange::USD("2015-01-15".to_string()), dec!(3.6588)); + exchange_rates.insert(Exchange::USD("2019-05-16".to_string()), dec!(3.8259)); + exchange_rates.insert(Exchange::USD("2021-03-05".to_string()), dec!(3.8393)); + exchange_rates.insert(Exchange::USD("2013-12-04".to_string()), dec!(3.0916)); + exchange_rates.insert(Exchange::USD("2021-02-11".to_string()), dec!(3.7117)); + exchange_rates.insert(Exchange::USD("2025-10-24".to_string()), dec!(3.6481)); + exchange_rates.insert(Exchange::USD("2020-10-20".to_string()), dec!(3.8926)); + exchange_rates.insert(Exchange::USD("2013-08-28".to_string()), dec!(3.184)); + exchange_rates.insert(Exchange::USD("2021-11-22".to_string()), dec!(4.1855)); + exchange_rates.insert(Exchange::USD("2012-06-13".to_string()), dec!(3.4591)); + exchange_rates.insert(Exchange::USD("2025-01-07".to_string()), dec!(4.077)); + exchange_rates.insert(Exchange::USD("2014-01-13".to_string()), dec!(3.045)); + exchange_rates.insert(Exchange::USD("2025-12-23".to_string()), dec!(3.5848)); + exchange_rates.insert(Exchange::USD("2014-07-18".to_string()), dec!(3.0652)); + exchange_rates.insert(Exchange::EUR("2024-02-27".to_string()), dec!(4.3067)); + exchange_rates.insert(Exchange::USD("2019-11-15".to_string()), dec!(3.8848)); + exchange_rates.insert(Exchange::USD("2019-03-29".to_string()), dec!(3.8365)); + exchange_rates.insert(Exchange::USD("2021-09-01".to_string()), dec!(3.8238)); + exchange_rates.insert(Exchange::USD("2014-05-27".to_string()), dec!(3.0532)); + exchange_rates.insert(Exchange::USD("2014-06-02".to_string()), dec!(3.0413)); + exchange_rates.insert(Exchange::USD("2012-07-26".to_string()), dec!(3.4523)); + exchange_rates.insert(Exchange::USD("2016-09-20".to_string()), dec!(3.8438)); + exchange_rates.insert(Exchange::EUR("2023-11-21".to_string()), dec!(4.3647)); + exchange_rates.insert(Exchange::USD("2017-03-29".to_string()), dec!(3.9265)); + exchange_rates.insert(Exchange::EUR("2025-06-24".to_string()), dec!(4.2604)); + exchange_rates.insert(Exchange::USD("2020-02-17".to_string()), dec!(3.9189)); + exchange_rates.insert(Exchange::USD("2023-07-06".to_string()), dec!(4.1191)); + exchange_rates.insert(Exchange::USD("2016-09-14".to_string()), dec!(3.8716)); + exchange_rates.insert(Exchange::USD("2023-02-20".to_string()), dec!(4.4515)); + exchange_rates.insert(Exchange::USD("2017-03-30".to_string()), dec!(3.9402)); + exchange_rates.insert(Exchange::USD("2020-09-18".to_string()), dec!(3.7585)); + exchange_rates.insert(Exchange::USD("2024-05-23".to_string()), dec!(3.9394)); + exchange_rates.insert(Exchange::USD("2021-08-04".to_string()), dec!(3.8366)); + exchange_rates.insert(Exchange::EUR("2023-08-01".to_string()), dec!(4.419)); + exchange_rates.insert(Exchange::EUR("2023-07-18".to_string()), dec!(4.4331)); + exchange_rates.insert(Exchange::USD("2016-11-03".to_string()), dec!(3.8965)); + exchange_rates.insert(Exchange::USD("2015-04-27".to_string()), dec!(3.7115)); + exchange_rates.insert(Exchange::USD("2012-04-23".to_string()), dec!(3.1972)); + exchange_rates.insert(Exchange::USD("2022-12-06".to_string()), dec!(4.4787)); + exchange_rates.insert(Exchange::USD("2012-06-06".to_string()), dec!(3.4703)); + exchange_rates.insert(Exchange::USD("2015-09-09".to_string()), dec!(3.7634)); + exchange_rates.insert(Exchange::USD("2013-04-29".to_string()), dec!(3.1712)); + exchange_rates.insert(Exchange::USD("2021-06-21".to_string()), dec!(3.8214)); + exchange_rates.insert(Exchange::USD("2012-03-16".to_string()), dec!(3.1688)); + exchange_rates.insert(Exchange::USD("2023-06-05".to_string()), dec!(4.1933)); + exchange_rates.insert(Exchange::EUR("2025-11-03".to_string()), dec!(4.2527)); + exchange_rates.insert(Exchange::USD("2021-08-20".to_string()), dec!(3.9301)); + exchange_rates.insert(Exchange::EUR("2025-11-21".to_string()), dec!(4.2489)); + exchange_rates.insert(Exchange::USD("2016-10-03".to_string()), dec!(3.8252)); + exchange_rates.insert(Exchange::USD("2022-07-05".to_string()), dec!(4.5947)); + exchange_rates.insert(Exchange::USD("2013-04-08".to_string()), dec!(3.1893)); + exchange_rates.insert(Exchange::USD("2022-05-10".to_string()), dec!(4.4223)); + exchange_rates.insert(Exchange::USD("2016-12-12".to_string()), dec!(4.209)); + exchange_rates.insert(Exchange::USD("2014-03-11".to_string()), dec!(3.0449)); + exchange_rates.insert(Exchange::USD("2019-10-23".to_string()), dec!(3.8473)); + exchange_rates.insert(Exchange::USD("2025-09-03".to_string()), dec!(3.6538)); + exchange_rates.insert(Exchange::USD("2021-12-02".to_string()), dec!(4.0625)); + exchange_rates.insert(Exchange::USD("2019-05-10".to_string()), dec!(3.8242)); + exchange_rates.insert(Exchange::USD("2023-06-20".to_string()), dec!(4.058)); + exchange_rates.insert(Exchange::USD("2021-06-16".to_string()), dec!(3.7336)); + exchange_rates.insert(Exchange::USD("2018-02-07".to_string()), dec!(3.3677)); + exchange_rates.insert(Exchange::EUR("2025-10-13".to_string()), dec!(4.2592)); + exchange_rates.insert(Exchange::USD("2014-10-10".to_string()), dec!(3.2985)); + exchange_rates.insert(Exchange::USD("2024-02-15".to_string()), dec!(4.0495)); + exchange_rates.insert(Exchange::EUR("2023-09-13".to_string()), dec!(4.6402)); + exchange_rates.insert(Exchange::USD("2022-03-22".to_string()), dec!(4.272)); + exchange_rates.insert(Exchange::EUR("2025-10-15".to_string()), dec!(4.2556)); + exchange_rates.insert(Exchange::EUR("2025-11-13".to_string()), dec!(4.2304)); + exchange_rates.insert(Exchange::USD("2019-08-09".to_string()), dec!(3.8613)); + exchange_rates.insert(Exchange::USD("2014-02-25".to_string()), dec!(3.0264)); + exchange_rates.insert(Exchange::USD("2022-05-18".to_string()), dec!(4.4279)); + exchange_rates.insert(Exchange::USD("2022-06-24".to_string()), dec!(4.4656)); + exchange_rates.insert(Exchange::EUR("2024-02-20".to_string()), dec!(4.3186)); + exchange_rates.insert(Exchange::EUR("2025-01-15".to_string()), dec!(4.2611)); + exchange_rates.insert(Exchange::USD("2021-09-06".to_string()), dec!(3.8041)); + exchange_rates.insert(Exchange::USD("2022-12-29".to_string()), dec!(4.4078)); + exchange_rates.insert(Exchange::USD("2017-09-20".to_string()), dec!(3.5619)); + exchange_rates.insert(Exchange::USD("2014-01-08".to_string()), dec!(3.0717)); + exchange_rates.insert(Exchange::USD("2024-09-16".to_string()), dec!(3.8438)); + exchange_rates.insert(Exchange::USD("2012-02-21".to_string()), dec!(3.1488)); + exchange_rates.insert(Exchange::USD("2016-07-20".to_string()), dec!(3.979)); + exchange_rates.insert(Exchange::USD("2016-08-30".to_string()), dec!(3.8858)); + exchange_rates.insert(Exchange::USD("2012-07-27".to_string()), dec!(3.3843)); + exchange_rates.insert(Exchange::USD("2017-10-05".to_string()), dec!(3.6502)); + exchange_rates.insert(Exchange::EUR("2025-08-05".to_string()), dec!(4.2763)); + exchange_rates.insert(Exchange::USD("2024-12-10".to_string()), dec!(4.0518)); + exchange_rates.insert(Exchange::EUR("2024-01-23".to_string()), dec!(4.3697)); + exchange_rates.insert(Exchange::USD("2017-08-10".to_string()), dec!(3.6432)); + exchange_rates.insert(Exchange::USD("2023-10-20".to_string()), dec!(4.2194)); + exchange_rates.insert(Exchange::USD("2012-07-09".to_string()), dec!(3.4538)); + exchange_rates.insert(Exchange::EUR("2023-04-04".to_string()), dec!(4.6785)); + exchange_rates.insert(Exchange::USD("2021-07-30".to_string()), dec!(3.841)); + exchange_rates.insert(Exchange::USD("2018-02-05".to_string()), dec!(3.3375)); + exchange_rates.insert(Exchange::USD("2016-12-28".to_string()), dec!(4.226)); + exchange_rates.insert(Exchange::USD("2014-06-20".to_string()), dec!(3.0495)); + exchange_rates.insert(Exchange::USD("2020-09-24".to_string()), dec!(3.8833)); + exchange_rates.insert(Exchange::USD("2022-05-26".to_string()), dec!(4.3189)); + exchange_rates.insert(Exchange::EUR("2023-07-12".to_string()), dec!(4.4471)); + exchange_rates.insert(Exchange::USD("2019-10-24".to_string()), dec!(3.8448)); + exchange_rates.insert(Exchange::USD("2015-09-29".to_string()), dec!(3.7799)); + exchange_rates.insert(Exchange::USD("2022-08-24".to_string()), dec!(4.8029)); + exchange_rates.insert(Exchange::USD("2012-10-31".to_string()), dec!(3.1806)); + exchange_rates.insert(Exchange::USD("2013-08-13".to_string()), dec!(3.1489)); + exchange_rates.insert(Exchange::USD("2021-02-08".to_string()), dec!(3.7301)); + exchange_rates.insert(Exchange::USD("2022-07-13".to_string()), dec!(4.8221)); + exchange_rates.insert(Exchange::USD("2023-03-20".to_string()), dec!(4.413)); + exchange_rates.insert(Exchange::USD("2013-08-21".to_string()), dec!(3.1698)); + exchange_rates.insert(Exchange::USD("2024-08-09".to_string()), dec!(3.9604)); + exchange_rates.insert(Exchange::USD("2012-05-15".to_string()), dec!(3.3579)); + exchange_rates.insert(Exchange::USD("2019-12-18".to_string()), dec!(3.8302)); + exchange_rates.insert(Exchange::USD("2025-09-02".to_string()), dec!(3.6626)); + exchange_rates.insert(Exchange::USD("2021-06-10".to_string()), dec!(3.6821)); + exchange_rates.insert(Exchange::USD("2021-11-29".to_string()), dec!(4.1627)); + exchange_rates.insert(Exchange::USD("2024-09-09".to_string()), dec!(3.8758)); + exchange_rates.insert(Exchange::EUR("2023-06-19".to_string()), dec!(4.4457)); + exchange_rates.insert(Exchange::USD("2020-11-30".to_string()), dec!(3.7364)); + exchange_rates.insert(Exchange::USD("2021-01-08".to_string()), dec!(3.6919)); + exchange_rates.insert(Exchange::USD("2013-03-04".to_string()), dec!(3.1837)); + exchange_rates.insert(Exchange::USD("2012-12-07".to_string()), dec!(3.193)); + exchange_rates.insert(Exchange::USD("2023-06-02".to_string()), dec!(4.1903)); + exchange_rates.insert(Exchange::USD("2022-04-25".to_string()), dec!(4.3188)); + exchange_rates.insert(Exchange::USD("2013-10-17".to_string()), dec!(3.0625)); + exchange_rates.insert(Exchange::EUR("2024-01-30".to_string()), dec!(4.3634)); + exchange_rates.insert(Exchange::USD("2025-04-11".to_string()), dec!(3.7606)); + exchange_rates.insert(Exchange::USD("2024-06-24".to_string()), dec!(4.0319)); + exchange_rates.insert(Exchange::USD("2017-03-15".to_string()), dec!(4.0646)); + exchange_rates.insert(Exchange::USD("2014-07-28".to_string()), dec!(3.086)); + exchange_rates.insert(Exchange::USD("2013-07-19".to_string()), dec!(3.2348)); + exchange_rates.insert(Exchange::USD("2020-02-24".to_string()), dec!(3.9772)); + exchange_rates.insert(Exchange::USD("2016-05-31".to_string()), dec!(3.9369)); + exchange_rates.insert(Exchange::EUR("2024-12-10".to_string()), dec!(4.2672)); + exchange_rates.insert(Exchange::USD("2016-09-23".to_string()), dec!(3.8328)); + exchange_rates.insert(Exchange::USD("2021-08-02".to_string()), dec!(3.8377)); + exchange_rates.insert(Exchange::EUR("2025-04-09".to_string()), dec!(4.2818)); + exchange_rates.insert(Exchange::USD("2022-04-11".to_string()), dec!(4.2586)); + exchange_rates.insert(Exchange::USD("2021-12-16".to_string()), dec!(4.0938)); + exchange_rates.insert(Exchange::USD("2022-04-06".to_string()), dec!(4.2606)); + exchange_rates.insert(Exchange::USD("2013-08-05".to_string()), dec!(3.1771)); + exchange_rates.insert(Exchange::USD("2015-05-25".to_string()), dec!(3.75)); + exchange_rates.insert(Exchange::USD("2015-04-24".to_string()), dec!(3.6895)); + exchange_rates.insert(Exchange::EUR("2024-11-21".to_string()), dec!(4.3469)); + exchange_rates.insert(Exchange::USD("2023-04-18".to_string()), dec!(4.2151)); + exchange_rates.insert(Exchange::EUR("2024-08-06".to_string()), dec!(4.313)); + exchange_rates.insert(Exchange::USD("2022-01-20".to_string()), dec!(3.9833)); + exchange_rates.insert(Exchange::USD("2022-04-15".to_string()), dec!(4.2865)); + exchange_rates.insert(Exchange::USD("2018-06-05".to_string()), dec!(3.6569)); + exchange_rates.insert(Exchange::USD("2015-05-13".to_string()), dec!(3.63)); + exchange_rates.insert(Exchange::USD("2017-03-01".to_string()), dec!(4.0756)); + exchange_rates.insert(Exchange::USD("2016-02-03".to_string()), dec!(4.0325)); + exchange_rates.insert(Exchange::EUR("2023-02-09".to_string()), dec!(4.7363)); + exchange_rates.insert(Exchange::USD("2019-01-21".to_string()), dec!(3.7751)); + exchange_rates.insert(Exchange::USD("2012-05-04".to_string()), dec!(3.1891)); + exchange_rates.insert(Exchange::EUR("2025-12-02".to_string()), dec!(4.239)); + exchange_rates.insert(Exchange::USD("2021-07-08".to_string()), dec!(3.8408)); + exchange_rates.insert(Exchange::USD("2013-08-08".to_string()), dec!(3.1503)); + exchange_rates.insert(Exchange::USD("2019-01-24".to_string()), dec!(3.7844)); + exchange_rates.insert(Exchange::USD("2013-04-24".to_string()), dec!(3.1823)); + exchange_rates.insert(Exchange::USD("2018-12-21".to_string()), dec!(3.7528)); + exchange_rates.insert(Exchange::EUR("2023-02-22".to_string()), dec!(4.7538)); + exchange_rates.insert(Exchange::USD("2012-09-20".to_string()), dec!(3.2092)); + exchange_rates.insert(Exchange::USD("2013-02-21".to_string()), dec!(3.1633)); + exchange_rates.insert(Exchange::USD("2014-04-10".to_string()), dec!(3.0092)); + exchange_rates.insert(Exchange::USD("2012-05-07".to_string()), dec!(3.2279)); + exchange_rates.insert(Exchange::USD("2012-09-11".to_string()), dec!(3.2098)); + exchange_rates.insert(Exchange::USD("2018-10-01".to_string()), dec!(3.6867)); + exchange_rates.insert(Exchange::USD("2017-12-06".to_string()), dec!(3.5653)); + exchange_rates.insert(Exchange::USD("2023-11-13".to_string()), dec!(4.1474)); + exchange_rates.insert(Exchange::USD("2024-01-16".to_string()), dec!(4.0358)); + exchange_rates.insert(Exchange::USD("2013-01-31".to_string()), dec!(3.0874)); + exchange_rates.insert(Exchange::USD("2015-12-07".to_string()), dec!(3.9853)); + exchange_rates.insert(Exchange::USD("2020-11-09".to_string()), dec!(3.7787)); + exchange_rates.insert(Exchange::USD("2017-11-13".to_string()), dec!(3.6382)); + exchange_rates.insert(Exchange::USD("2013-04-09".to_string()), dec!(3.1696)); + exchange_rates.insert(Exchange::USD("2016-02-25".to_string()), dec!(3.9705)); + exchange_rates.insert(Exchange::USD("2018-09-14".to_string()), dec!(3.6817)); + exchange_rates.insert(Exchange::USD("2013-12-19".to_string()), dec!(3.049)); + exchange_rates.insert(Exchange::USD("2018-01-03".to_string()), dec!(3.4616)); + exchange_rates.insert(Exchange::USD("2023-01-25".to_string()), dec!(4.3265)); + exchange_rates.insert(Exchange::USD("2021-09-14".to_string()), dec!(3.8542)); + exchange_rates.insert(Exchange::USD("2024-09-06".to_string()), dec!(3.8489)); + exchange_rates.insert(Exchange::USD("2014-03-20".to_string()), dec!(3.05)); + exchange_rates.insert(Exchange::USD("2022-01-24".to_string()), dec!(4.0049)); + exchange_rates.insert(Exchange::USD("2017-10-20".to_string()), dec!(3.5966)); + exchange_rates.insert(Exchange::USD("2013-03-26".to_string()), dec!(3.2427)); + exchange_rates.insert(Exchange::USD("2025-02-05".to_string()), dec!(4.0426)); + exchange_rates.insert(Exchange::USD("2018-11-30".to_string()), dec!(3.7731)); + exchange_rates.insert(Exchange::USD("2025-04-23".to_string()), dec!(3.7583)); + exchange_rates.insert(Exchange::USD("2024-05-10".to_string()), dec!(3.9866)); + exchange_rates.insert(Exchange::USD("2016-05-05".to_string()), dec!(3.8475)); + exchange_rates.insert(Exchange::USD("2024-05-06".to_string()), dec!(4.0202)); + exchange_rates.insert(Exchange::EUR("2025-11-07".to_string()), dec!(4.2483)); + exchange_rates.insert(Exchange::USD("2013-04-23".to_string()), dec!(3.1811)); + exchange_rates.insert(Exchange::USD("2018-02-23".to_string()), dec!(3.3911)); + exchange_rates.insert(Exchange::USD("2024-06-18".to_string()), dec!(4.0549)); + exchange_rates.insert(Exchange::USD("2015-12-21".to_string()), dec!(3.92)); + exchange_rates.insert(Exchange::EUR("2024-04-19".to_string()), dec!(4.3316)); + exchange_rates.insert(Exchange::USD("2023-05-05".to_string()), dec!(4.1612)); + exchange_rates.insert(Exchange::USD("2016-03-22".to_string()), dec!(3.8005)); + exchange_rates.insert(Exchange::USD("2013-04-25".to_string()), dec!(3.1792)); + exchange_rates.insert(Exchange::USD("2019-09-10".to_string()), dec!(3.9273)); + exchange_rates.insert(Exchange::USD("2022-01-26".to_string()), dec!(4.0684)); + exchange_rates.insert(Exchange::USD("2021-09-09".to_string()), dec!(3.8292)); + exchange_rates.insert(Exchange::USD("2021-11-05".to_string()), dec!(3.9911)); + exchange_rates.insert(Exchange::USD("2018-01-29".to_string()), dec!(3.3375)); + exchange_rates.insert(Exchange::USD("2017-07-18".to_string()), dec!(3.6469)); + exchange_rates.insert(Exchange::USD("2016-02-16".to_string()), dec!(3.9404)); + exchange_rates.insert(Exchange::USD("2024-07-11".to_string()), dec!(3.9257)); + exchange_rates.insert(Exchange::USD("2018-12-19".to_string()), dec!(3.7619)); + exchange_rates.insert(Exchange::USD("2014-04-18".to_string()), dec!(3.0265)); + exchange_rates.insert(Exchange::USD("2012-08-29".to_string()), dec!(3.3081)); + exchange_rates.insert(Exchange::USD("2024-05-08".to_string()), dec!(4.0202)); + exchange_rates.insert(Exchange::USD("2017-02-14".to_string()), dec!(4.0525)); + exchange_rates.insert(Exchange::USD("2019-06-13".to_string()), dec!(3.7736)); + exchange_rates.insert(Exchange::EUR("2024-08-08".to_string()), dec!(4.3225)); + exchange_rates.insert(Exchange::USD("2013-06-18".to_string()), dec!(3.1682)); + exchange_rates.insert(Exchange::USD("2013-05-21".to_string()), dec!(3.249)); + exchange_rates.insert(Exchange::USD("2022-02-09".to_string()), dec!(3.953)); + exchange_rates.insert(Exchange::USD("2015-03-18".to_string()), dec!(3.9073)); + exchange_rates.insert(Exchange::USD("2016-03-02".to_string()), dec!(3.9861)); + exchange_rates.insert(Exchange::USD("2016-01-18".to_string()), dec!(4.1133)); + exchange_rates.insert(Exchange::USD("2019-06-10".to_string()), dec!(3.7745)); + exchange_rates.insert(Exchange::USD("2015-04-10".to_string()), dec!(3.7894)); + exchange_rates.insert(Exchange::USD("2015-07-20".to_string()), dec!(3.7868)); + exchange_rates.insert(Exchange::USD("2019-05-31".to_string()), dec!(3.8498)); + exchange_rates.insert(Exchange::USD("2014-08-06".to_string()), dec!(3.1377)); + exchange_rates.insert(Exchange::EUR("2025-06-11".to_string()), dec!(4.2643)); + exchange_rates.insert(Exchange::USD("2024-09-11".to_string()), dec!(3.8816)); + exchange_rates.insert(Exchange::EUR("2024-11-22".to_string()), dec!(4.343)); + exchange_rates.insert(Exchange::EUR("2025-09-01".to_string()), dec!(4.2574)); + exchange_rates.insert(Exchange::USD("2020-10-16".to_string()), dec!(3.8976)); + exchange_rates.insert(Exchange::USD("2024-02-12".to_string()), dec!(4.0189)); + exchange_rates.insert(Exchange::USD("2024-01-22".to_string()), dec!(3.9972)); + exchange_rates.insert(Exchange::USD("2025-02-03".to_string()), dec!(4.1352)); + exchange_rates.insert(Exchange::USD("2015-08-18".to_string()), dec!(3.7578)); + exchange_rates.insert(Exchange::USD("2023-01-19".to_string()), dec!(4.3469)); + exchange_rates.insert(Exchange::USD("2023-10-06".to_string()), dec!(4.3608)); + exchange_rates.insert(Exchange::USD("2018-08-09".to_string()), dec!(3.6846)); + exchange_rates.insert(Exchange::USD("2016-09-05".to_string()), dec!(3.8937)); + exchange_rates.insert(Exchange::USD("2017-06-16".to_string()), dec!(3.7749)); + exchange_rates.insert(Exchange::EUR("2023-12-27".to_string()), dec!(4.3311)); + exchange_rates.insert(Exchange::USD("2022-07-04".to_string()), dec!(4.5032)); + exchange_rates.insert(Exchange::USD("2024-07-29".to_string()), dec!(3.9556)); + exchange_rates.insert(Exchange::EUR("2024-03-21".to_string()), dec!(4.3031)); + exchange_rates.insert(Exchange::USD("2024-07-25".to_string()), dec!(3.9619)); + exchange_rates.insert(Exchange::USD("2014-07-31".to_string()), dec!(3.1094)); + exchange_rates.insert(Exchange::USD("2012-07-23".to_string()), dec!(3.4529)); + exchange_rates.insert(Exchange::USD("2017-08-11".to_string()), dec!(3.6449)); + exchange_rates.insert(Exchange::USD("2017-10-30".to_string()), dec!(3.643)); + exchange_rates.insert(Exchange::USD("2025-01-22".to_string()), dec!(4.0646)); + exchange_rates.insert(Exchange::USD("2019-09-17".to_string()), dec!(3.9412)); + exchange_rates.insert(Exchange::USD("2012-07-03".to_string()), dec!(3.3427)); + exchange_rates.insert(Exchange::USD("2015-02-18".to_string()), dec!(3.6784)); + exchange_rates.insert(Exchange::USD("2013-12-09".to_string()), dec!(3.0534)); + exchange_rates.insert(Exchange::EUR("2024-01-16".to_string()), dec!(4.3934)); + exchange_rates.insert(Exchange::USD("2013-08-07".to_string()), dec!(3.1725)); + exchange_rates.insert(Exchange::USD("2014-03-12".to_string()), dec!(3.0508)); + exchange_rates.insert(Exchange::EUR("2024-07-22".to_string()), dec!(4.2797)); + exchange_rates.insert(Exchange::EUR("2025-01-23".to_string()), dec!(4.2182)); + exchange_rates.insert(Exchange::USD("2019-02-15".to_string()), dec!(3.8326)); + exchange_rates.insert(Exchange::USD("2018-09-17".to_string()), dec!(3.6876)); + exchange_rates.insert(Exchange::USD("2021-11-12".to_string()), dec!(4.0559)); + exchange_rates.insert(Exchange::USD("2018-10-04".to_string()), dec!(3.7512)); + exchange_rates.insert(Exchange::EUR("2023-07-25".to_string()), dec!(4.4348)); + exchange_rates.insert(Exchange::USD("2022-03-25".to_string()), dec!(4.3125)); + exchange_rates.insert(Exchange::USD("2019-07-05".to_string()), dec!(3.7689)); + exchange_rates.insert(Exchange::USD("2016-04-11".to_string()), dec!(3.7587)); + exchange_rates.insert(Exchange::EUR("2025-07-07".to_string()), dec!(4.2524)); + exchange_rates.insert(Exchange::USD("2024-12-23".to_string()), dec!(4.095)); + exchange_rates.insert(Exchange::USD("2023-05-24".to_string()), dec!(4.1573)); + exchange_rates.insert(Exchange::EUR("2023-01-20".to_string()), dec!(4.7137)); + exchange_rates.insert(Exchange::USD("2018-07-11".to_string()), dec!(3.7)); + exchange_rates.insert(Exchange::USD("2018-08-28".to_string()), dec!(3.6548)); + exchange_rates.insert(Exchange::EUR("2023-01-11".to_string()), dec!(4.6871)); + exchange_rates.insert(Exchange::USD("2019-12-06".to_string()), dec!(3.85)); + exchange_rates.insert(Exchange::USD("2012-05-09".to_string()), dec!(3.2412)); + exchange_rates.insert(Exchange::USD("2015-02-09".to_string()), dec!(3.6811)); + exchange_rates.insert(Exchange::USD("2020-12-04".to_string()), dec!(3.6765)); + exchange_rates.insert(Exchange::EUR("2023-01-16".to_string()), dec!(4.7004)); + exchange_rates.insert(Exchange::USD("2021-01-20".to_string()), dec!(3.7303)); + exchange_rates.insert(Exchange::USD("2022-09-09".to_string()), dec!(4.6599)); + exchange_rates.insert(Exchange::USD("2013-01-29".to_string()), dec!(3.1229)); + exchange_rates.insert(Exchange::USD("2021-04-15".to_string()), dec!(3.8014)); + exchange_rates.insert(Exchange::USD("2013-10-10".to_string()), dec!(3.0994)); + exchange_rates.insert(Exchange::USD("2024-10-14".to_string()), dec!(3.9288)); + exchange_rates.insert(Exchange::USD("2021-05-06".to_string()), dec!(3.8066)); + exchange_rates.insert(Exchange::USD("2012-05-31".to_string()), dec!(3.5372)); + exchange_rates.insert(Exchange::USD("2022-11-18".to_string()), dec!(4.5337)); + exchange_rates.insert(Exchange::EUR("2023-07-31".to_string()), dec!(4.4135)); + exchange_rates.insert(Exchange::USD("2015-09-18".to_string()), dec!(3.6738)); + exchange_rates.insert(Exchange::USD("2012-05-23".to_string()), dec!(3.446)); + exchange_rates.insert(Exchange::USD("2020-08-21".to_string()), dec!(3.7164)); + exchange_rates.insert(Exchange::USD("2018-10-17".to_string()), dec!(3.7123)); + exchange_rates.insert(Exchange::EUR("2025-06-25".to_string()), dec!(4.2479)); + exchange_rates.insert(Exchange::USD("2025-12-09".to_string()), dec!(3.6336)); + exchange_rates.insert(Exchange::USD("2016-12-13".to_string()), dec!(4.1905)); + exchange_rates.insert(Exchange::USD("2017-08-01".to_string()), dec!(3.5991)); + exchange_rates.insert(Exchange::USD("2017-06-26".to_string()), dec!(3.7653)); + exchange_rates.insert(Exchange::EUR("2025-03-11".to_string()), dec!(4.1977)); + exchange_rates.insert(Exchange::USD("2014-05-29".to_string()), dec!(3.0395)); + exchange_rates.insert(Exchange::USD("2018-02-01".to_string()), dec!(3.3346)); + exchange_rates.insert(Exchange::USD("2012-06-05".to_string()), dec!(3.5359)); + exchange_rates.insert(Exchange::USD("2015-09-24".to_string()), dec!(3.7687)); + exchange_rates.insert(Exchange::USD("2016-01-15".to_string()), dec!(4.0411)); + exchange_rates.insert(Exchange::USD("2019-05-30".to_string()), dec!(3.8548)); + exchange_rates.insert(Exchange::USD("2021-02-03".to_string()), dec!(3.7352)); + exchange_rates.insert(Exchange::USD("2024-06-12".to_string()), dec!(4.0342)); + exchange_rates.insert(Exchange::USD("2017-07-07".to_string()), dec!(3.7068)); + exchange_rates.insert(Exchange::EUR("2023-03-15".to_string()), dec!(4.7015)); + exchange_rates.insert(Exchange::USD("2019-03-01".to_string()), dec!(3.792)); + exchange_rates.insert(Exchange::USD("2023-07-24".to_string()), dec!(4.021)); + exchange_rates.insert(Exchange::USD("2022-05-06".to_string()), dec!(4.4502)); + exchange_rates.insert(Exchange::USD("2014-01-29".to_string()), dec!(3.0829)); + exchange_rates.insert(Exchange::USD("2012-11-28".to_string()), dec!(3.1799)); + exchange_rates.insert(Exchange::EUR("2025-12-12".to_string()), dec!(4.2271)); + exchange_rates.insert(Exchange::EUR("2025-11-26".to_string()), dec!(4.233)); + exchange_rates.insert(Exchange::USD("2014-02-07".to_string()), dec!(3.0857)); + exchange_rates.insert(Exchange::EUR("2025-01-17".to_string()), dec!(4.2691)); + exchange_rates.insert(Exchange::EUR("2023-06-01".to_string()), dec!(4.5312)); + exchange_rates.insert(Exchange::USD("2019-04-24".to_string()), dec!(3.8229)); + exchange_rates.insert(Exchange::USD("2015-02-12".to_string()), dec!(3.6926)); + exchange_rates.insert(Exchange::EUR("2024-09-13".to_string()), dec!(4.2883)); + exchange_rates.insert(Exchange::USD("2020-05-05".to_string()), dec!(4.1927)); + exchange_rates.insert(Exchange::USD("2016-12-05".to_string()), dec!(4.2213)); + exchange_rates.insert(Exchange::USD("2019-12-11".to_string()), dec!(3.866)); + exchange_rates.insert(Exchange::EUR("2023-01-09".to_string()), dec!(4.697)); + exchange_rates.insert(Exchange::USD("2021-04-26".to_string()), dec!(3.7657)); + exchange_rates.insert(Exchange::USD("2025-12-30".to_string()), dec!(3.5936)); + exchange_rates.insert(Exchange::USD("2020-10-23".to_string()), dec!(3.8665)); + exchange_rates.insert(Exchange::USD("2018-09-26".to_string()), dec!(3.643)); + exchange_rates.insert(Exchange::EUR("2025-07-21".to_string()), dec!(4.2445)); + exchange_rates.insert(Exchange::USD("2022-10-17".to_string()), dec!(4.9522)); + exchange_rates.insert(Exchange::USD("2025-08-20".to_string()), dec!(3.654)); + exchange_rates.insert(Exchange::EUR("2024-06-04".to_string()), dec!(4.2923)); + exchange_rates.insert(Exchange::USD("2016-03-01".to_string()), dec!(3.9924)); + exchange_rates.insert(Exchange::USD("2023-01-02".to_string()), dec!(4.3811)); + exchange_rates.insert(Exchange::USD("2020-03-13".to_string()), dec!(3.9067)); + exchange_rates.insert(Exchange::USD("2018-05-09".to_string()), dec!(3.609)); + exchange_rates.insert(Exchange::USD("2015-06-01".to_string()), dec!(3.785)); + exchange_rates.insert(Exchange::USD("2019-08-22".to_string()), dec!(3.9337)); + exchange_rates.insert(Exchange::USD("2013-05-02".to_string()), dec!(3.1492)); + exchange_rates.insert(Exchange::USD("2024-06-14".to_string()), dec!(4.076)); + exchange_rates.insert(Exchange::EUR("2023-01-26".to_string()), dec!(4.7239)); + exchange_rates.insert(Exchange::USD("2020-12-11".to_string()), dec!(3.663)); + exchange_rates.insert(Exchange::USD("2019-01-02".to_string()), dec!(3.7619)); + exchange_rates.insert(Exchange::USD("2018-10-03".to_string()), dec!(3.7103)); + exchange_rates.insert(Exchange::USD("2020-05-12".to_string()), dec!(4.2095)); + exchange_rates.insert(Exchange::USD("2020-12-30".to_string()), dec!(3.6901)); + exchange_rates.insert(Exchange::USD("2025-12-19".to_string()), dec!(3.5941)); + exchange_rates.insert(Exchange::USD("2023-10-05".to_string()), dec!(4.3768)); + exchange_rates.insert(Exchange::USD("2025-10-07".to_string()), dec!(3.6481)); + exchange_rates.insert(Exchange::USD("2013-04-18".to_string()), dec!(3.1529)); + exchange_rates.insert(Exchange::USD("2012-12-24".to_string()), dec!(3.08)); + exchange_rates.insert(Exchange::USD("2018-05-23".to_string()), dec!(3.6693)); + exchange_rates.insert(Exchange::EUR("2024-10-02".to_string()), dec!(4.2952)); + exchange_rates.insert(Exchange::USD("2025-12-10".to_string()), dec!(3.6329)); + exchange_rates.insert(Exchange::EUR("2025-08-12".to_string()), dec!(4.2626)); + exchange_rates.insert(Exchange::USD("2013-05-31".to_string()), dec!(3.2953)); + exchange_rates.insert(Exchange::USD("2024-12-24".to_string()), dec!(4.1127)); + exchange_rates.insert(Exchange::USD("2022-08-04".to_string()), dec!(4.634)); + exchange_rates.insert(Exchange::USD("2019-01-22".to_string()), dec!(3.7727)); + exchange_rates.insert(Exchange::USD("2021-09-28".to_string()), dec!(3.9546)); + exchange_rates.insert(Exchange::USD("2014-09-23".to_string()), dec!(3.243)); + exchange_rates.insert(Exchange::USD("2016-04-19".to_string()), dec!(3.7925)); + exchange_rates.insert(Exchange::USD("2019-10-07".to_string()), dec!(3.9498)); + exchange_rates.insert(Exchange::USD("2024-07-05".to_string()), dec!(3.9581)); + exchange_rates.insert(Exchange::USD("2015-09-16".to_string()), dec!(3.7315)); + exchange_rates.insert(Exchange::USD("2025-06-05".to_string()), dec!(3.7495)); + exchange_rates.insert(Exchange::USD("2014-11-25".to_string()), dec!(3.3706)); + exchange_rates.insert(Exchange::USD("2020-11-25".to_string()), dec!(3.7556)); + exchange_rates.insert(Exchange::USD("2012-03-08".to_string()), dec!(3.122)); + exchange_rates.insert(Exchange::USD("2022-08-11".to_string()), dec!(4.5206)); + exchange_rates.insert(Exchange::USD("2019-04-18".to_string()), dec!(3.8002)); + exchange_rates.insert(Exchange::USD("2022-11-17".to_string()), dec!(4.5387)); + exchange_rates.insert(Exchange::EUR("2023-03-07".to_string()), dec!(4.6871)); + exchange_rates.insert(Exchange::USD("2012-01-16".to_string()), dec!(3.4798)); + exchange_rates.insert(Exchange::USD("2017-01-16".to_string()), dec!(4.1354)); + exchange_rates.insert(Exchange::USD("2012-09-10".to_string()), dec!(3.2189)); + exchange_rates.insert(Exchange::USD("2016-02-26".to_string()), dec!(3.9545)); + exchange_rates.insert(Exchange::USD("2016-08-23".to_string()), dec!(3.8061)); + exchange_rates.insert(Exchange::EUR("2025-02-24".to_string()), dec!(4.1609)); + exchange_rates.insert(Exchange::EUR("2023-05-23".to_string()), dec!(4.4981)); + exchange_rates.insert(Exchange::EUR("2024-06-07".to_string()), dec!(4.2891)); + exchange_rates.insert(Exchange::EUR("2025-09-22".to_string()), dec!(4.2645)); + exchange_rates.insert(Exchange::USD("2013-07-05".to_string()), dec!(3.3245)); + exchange_rates.insert(Exchange::USD("2017-06-20".to_string()), dec!(3.7862)); + exchange_rates.insert(Exchange::USD("2016-03-30".to_string()), dec!(3.7495)); + exchange_rates.insert(Exchange::USD("2012-11-29".to_string()), dec!(3.1556)); + exchange_rates.insert(Exchange::USD("2015-08-26".to_string()), dec!(3.6937)); + exchange_rates.insert(Exchange::USD("2022-10-10".to_string()), dec!(5.0239)); + exchange_rates.insert(Exchange::USD("2012-04-02".to_string()), dec!(3.1017)); + exchange_rates.insert(Exchange::EUR("2024-07-11".to_string()), dec!(4.2586)); + exchange_rates.insert(Exchange::USD("2020-07-23".to_string()), dec!(3.806)); + exchange_rates.insert(Exchange::USD("2015-07-27".to_string()), dec!(3.7455)); + exchange_rates.insert(Exchange::USD("2013-12-24".to_string()), dec!(3.0346)); + exchange_rates.insert(Exchange::USD("2020-10-13".to_string()), dec!(3.7932)); + exchange_rates.insert(Exchange::EUR("2025-04-11".to_string()), dec!(4.2972)); + exchange_rates.insert(Exchange::USD("2018-11-09".to_string()), dec!(3.7838)); + exchange_rates.insert(Exchange::USD("2017-12-29".to_string()), dec!(3.4813)); + exchange_rates.insert(Exchange::USD("2013-12-31".to_string()), dec!(3.012)); + exchange_rates.insert(Exchange::USD("2012-07-31".to_string()), dec!(3.3508)); + exchange_rates.insert(Exchange::EUR("2023-12-05".to_string()), dec!(4.3233)); + exchange_rates.insert(Exchange::USD("2018-11-19".to_string()), dec!(3.784)); + exchange_rates.insert(Exchange::EUR("2023-02-06".to_string()), dec!(4.7195)); + exchange_rates.insert(Exchange::USD("2019-10-21".to_string()), dec!(3.8307)); + exchange_rates.insert(Exchange::USD("2016-05-18".to_string()), dec!(3.9005)); + exchange_rates.insert(Exchange::EUR("2025-12-23".to_string()), dec!(4.2274)); + exchange_rates.insert(Exchange::USD("2017-08-23".to_string()), dec!(3.6274)); + exchange_rates.insert(Exchange::EUR("2024-10-10".to_string()), dec!(4.3029)); + exchange_rates.insert(Exchange::USD("2018-03-15".to_string()), dec!(3.4117)); + exchange_rates.insert(Exchange::USD("2013-05-22".to_string()), dec!(3.2322)); + exchange_rates.insert(Exchange::EUR("2023-02-16".to_string()), dec!(4.7728)); + exchange_rates.insert(Exchange::USD("2014-07-08".to_string()), dec!(3.0441)); + exchange_rates.insert(Exchange::USD("2021-03-25".to_string()), dec!(3.9253)); + exchange_rates.insert(Exchange::USD("2022-03-10".to_string()), dec!(4.3482)); + exchange_rates.insert(Exchange::USD("2018-08-01".to_string()), dec!(3.6603)); + exchange_rates.insert(Exchange::USD("2016-08-22".to_string()), dec!(3.809)); + exchange_rates.insert(Exchange::USD("2018-06-28".to_string()), dec!(3.7705)); + exchange_rates.insert(Exchange::USD("2013-08-14".to_string()), dec!(3.1643)); + exchange_rates.insert(Exchange::EUR("2023-09-25".to_string()), dec!(4.5892)); + exchange_rates.insert(Exchange::USD("2024-11-05".to_string()), dec!(4.0038)); + exchange_rates.insert(Exchange::USD("2023-03-31".to_string()), dec!(4.2934)); + exchange_rates.insert(Exchange::EUR("2023-06-14".to_string()), dec!(4.4715)); + exchange_rates.insert(Exchange::EUR("2023-11-30".to_string()), dec!(4.3492)); + exchange_rates.insert(Exchange::EUR("2024-07-19".to_string()), dec!(4.293)); + exchange_rates.insert(Exchange::USD("2023-10-30".to_string()), dec!(4.204)); + exchange_rates.insert(Exchange::EUR("2025-07-23".to_string()), dec!(4.2544)); + exchange_rates.insert(Exchange::USD("2014-09-01".to_string()), dec!(3.2035)); + exchange_rates.insert(Exchange::USD("2021-08-31".to_string()), dec!(3.8386)); + exchange_rates.insert(Exchange::USD("2024-12-03".to_string()), dec!(4.0803)); + exchange_rates.insert(Exchange::USD("2023-11-08".to_string()), dec!(4.1804)); + exchange_rates.insert(Exchange::USD("2018-11-14".to_string()), dec!(3.8114)); + exchange_rates.insert(Exchange::USD("2017-05-12".to_string()), dec!(3.8837)); + exchange_rates.insert(Exchange::USD("2013-01-16".to_string()), dec!(3.1097)); + exchange_rates.insert(Exchange::USD("2018-07-05".to_string()), dec!(3.7485)); + exchange_rates.insert(Exchange::EUR("2025-06-02".to_string()), dec!(4.2578)); + exchange_rates.insert(Exchange::USD("2020-07-28".to_string()), dec!(3.7532)); + exchange_rates.insert(Exchange::USD("2015-05-08".to_string()), dec!(3.6095)); + exchange_rates.insert(Exchange::USD("2017-12-18".to_string()), dec!(3.574)); + exchange_rates.insert(Exchange::USD("2012-03-05".to_string()), dec!(3.1355)); + exchange_rates.insert(Exchange::USD("2025-02-10".to_string()), dec!(4.0548)); + exchange_rates.insert(Exchange::USD("2025-06-03".to_string()), dec!(3.7437)); + exchange_rates.insert(Exchange::USD("2024-10-22".to_string()), dec!(3.9862)); + exchange_rates.insert(Exchange::USD("2015-01-13".to_string()), dec!(3.6252)); + exchange_rates.insert(Exchange::USD("2015-03-03".to_string()), dec!(3.719)); + exchange_rates.insert(Exchange::EUR("2024-07-01".to_string()), dec!(4.2981)); + exchange_rates.insert(Exchange::USD("2017-07-17".to_string()), dec!(3.6767)); + exchange_rates.insert(Exchange::USD("2016-06-20".to_string()), dec!(3.8724)); + exchange_rates.insert(Exchange::USD("2024-05-15".to_string()), dec!(3.9368)); + exchange_rates.insert(Exchange::EUR("2023-03-06".to_string()), dec!(4.7073)); + exchange_rates.insert(Exchange::EUR("2023-12-28".to_string()), dec!(4.3392)); + exchange_rates.insert(Exchange::USD("2022-08-29".to_string()), dec!(4.7821)); + exchange_rates.insert(Exchange::USD("2020-04-16".to_string()), dec!(4.1631)); + exchange_rates.insert(Exchange::USD("2019-05-24".to_string()), dec!(3.8436)); + exchange_rates.insert(Exchange::USD("2012-09-07".to_string()), dec!(3.2578)); + exchange_rates.insert(Exchange::EUR("2023-03-28".to_string()), dec!(4.6816)); + exchange_rates.insert(Exchange::USD("2019-08-07".to_string()), dec!(3.8597)); + exchange_rates.insert(Exchange::USD("2025-05-19".to_string()), dec!(3.8004)); + exchange_rates.insert(Exchange::USD("2013-07-12".to_string()), dec!(3.3201)); + exchange_rates.insert(Exchange::EUR("2024-12-05".to_string()), dec!(4.2695)); + exchange_rates.insert(Exchange::EUR("2023-02-20".to_string()), dec!(4.7542)); + exchange_rates.insert(Exchange::USD("2022-11-21".to_string()), dec!(4.5991)); + exchange_rates.insert(Exchange::USD("2017-11-28".to_string()), dec!(3.5382)); + exchange_rates.insert(Exchange::USD("2015-10-16".to_string()), dec!(3.7243)); + exchange_rates.insert(Exchange::USD("2025-09-15".to_string()), dec!(3.6188)); + exchange_rates.insert(Exchange::USD("2024-12-02".to_string()), dec!(4.0827)); + exchange_rates.insert(Exchange::USD("2022-11-15".to_string()), dec!(4.5143)); + exchange_rates.insert(Exchange::USD("2016-09-30".to_string()), dec!(3.8558)); + exchange_rates.insert(Exchange::USD("2015-10-05".to_string()), dec!(3.773)); + exchange_rates.insert(Exchange::USD("2015-10-19".to_string()), dec!(3.7265)); + exchange_rates.insert(Exchange::USD("2013-11-06".to_string()), dec!(3.0896)); + exchange_rates.insert(Exchange::USD("2013-01-07".to_string()), dec!(3.1618)); + exchange_rates.insert(Exchange::USD("2023-04-20".to_string()), dec!(4.2024)); + exchange_rates.insert(Exchange::EUR("2023-04-14".to_string()), dec!(4.6494)); + exchange_rates.insert(Exchange::USD("2023-12-08".to_string()), dec!(4.0181)); + exchange_rates.insert(Exchange::USD("2013-04-04".to_string()), dec!(3.275)); + exchange_rates.insert(Exchange::EUR("2023-03-10".to_string()), dec!(4.6838)); + exchange_rates.insert(Exchange::USD("2023-12-29".to_string()), dec!(3.935)); + exchange_rates.insert(Exchange::EUR("2023-12-22".to_string()), dec!(4.3288)); + exchange_rates.insert(Exchange::USD("2023-06-14".to_string()), dec!(4.1393)); + exchange_rates.insert(Exchange::USD("2015-11-12".to_string()), dec!(3.9434)); + exchange_rates.insert(Exchange::USD("2022-08-08".to_string()), dec!(4.6127)); + exchange_rates.insert(Exchange::EUR("2025-07-29".to_string()), dec!(4.2737)); + exchange_rates.insert(Exchange::USD("2024-07-02".to_string()), dec!(4.0375)); + exchange_rates.insert(Exchange::EUR("2025-02-12".to_string()), dec!(4.1721)); + exchange_rates.insert(Exchange::USD("2012-04-24".to_string()), dec!(3.1946)); + exchange_rates.insert(Exchange::EUR("2024-08-09".to_string()), dec!(4.3238)); + exchange_rates.insert(Exchange::USD("2020-08-12".to_string()), dec!(3.7558)); + exchange_rates.insert(Exchange::USD("2018-10-26".to_string()), dec!(3.7899)); + exchange_rates.insert(Exchange::USD("2020-11-24".to_string()), dec!(3.7625)); + exchange_rates.insert(Exchange::USD("2017-03-28".to_string()), dec!(3.9169)); + exchange_rates.insert(Exchange::USD("2016-08-29".to_string()), dec!(3.8789)); + exchange_rates.insert(Exchange::USD("2012-10-18".to_string()), dec!(3.1314)); + exchange_rates.insert(Exchange::USD("2022-07-14".to_string()), dec!(4.8274)); + exchange_rates.insert(Exchange::USD("2021-09-22".to_string()), dec!(3.946)); + exchange_rates.insert(Exchange::USD("2024-10-02".to_string()), dec!(3.8792)); + exchange_rates.insert(Exchange::USD("2022-10-07".to_string()), dec!(4.9588)); + exchange_rates.insert(Exchange::USD("2022-09-19".to_string()), dec!(4.7255)); + exchange_rates.insert(Exchange::USD("2014-05-14".to_string()), dec!(3.048)); + exchange_rates.insert(Exchange::USD("2018-09-04".to_string()), dec!(3.7241)); + exchange_rates.insert(Exchange::USD("2014-10-23".to_string()), dec!(3.339)); + exchange_rates.insert(Exchange::EUR("2023-03-20".to_string()), dec!(4.7109)); + exchange_rates.insert(Exchange::USD("2025-12-29".to_string()), dec!(3.5898)); + exchange_rates.insert(Exchange::USD("2020-07-21".to_string()), dec!(3.8812)); + exchange_rates.insert(Exchange::USD("2019-02-18".to_string()), dec!(3.8286)); + exchange_rates.insert(Exchange::USD("2015-08-14".to_string()), dec!(3.7557)); + exchange_rates.insert(Exchange::USD("2022-06-28".to_string()), dec!(4.4377)); + exchange_rates.insert(Exchange::USD("2022-08-26".to_string()), dec!(4.7465)); + exchange_rates.insert(Exchange::USD("2021-11-08".to_string()), dec!(3.9747)); + exchange_rates.insert(Exchange::USD("2019-12-04".to_string()), dec!(3.8647)); + exchange_rates.insert(Exchange::USD("2017-04-18".to_string()), dec!(3.98)); + exchange_rates.insert(Exchange::USD("2019-12-27".to_string()), dec!(3.8266)); + exchange_rates.insert(Exchange::EUR("2023-04-07".to_string()), dec!(4.6862)); + exchange_rates.insert(Exchange::USD("2019-12-10".to_string()), dec!(3.8711)); + exchange_rates.insert(Exchange::EUR("2024-09-03".to_string()), dec!(4.2757)); + exchange_rates.insert(Exchange::EUR("2024-03-08".to_string()), dec!(4.3079)); + exchange_rates.insert(Exchange::USD("2025-07-02".to_string()), dec!(3.609)); + exchange_rates.insert(Exchange::USD("2012-09-06".to_string()), dec!(3.2955)); + exchange_rates.insert(Exchange::USD("2020-05-21".to_string()), dec!(4.1346)); + exchange_rates.insert(Exchange::EUR("2025-02-28".to_string()), dec!(4.1575)); + exchange_rates.insert(Exchange::USD("2020-07-03".to_string()), dec!(3.9764)); + exchange_rates.insert(Exchange::USD("2021-07-21".to_string()), dec!(3.9035)); + exchange_rates.insert(Exchange::USD("2013-05-08".to_string()), dec!(3.1609)); + exchange_rates.insert(Exchange::USD("2017-09-14".to_string()), dec!(3.5984)); + exchange_rates.insert(Exchange::USD("2024-07-17".to_string()), dec!(3.921)); + exchange_rates.insert(Exchange::USD("2016-01-04".to_string()), dec!(3.9281)); + exchange_rates.insert(Exchange::USD("2015-01-30".to_string()), dec!(3.7204)); + exchange_rates.insert(Exchange::USD("2022-03-01".to_string()), dec!(4.2193)); + exchange_rates.insert(Exchange::USD("2022-07-20".to_string()), dec!(4.6524)); + exchange_rates.insert(Exchange::USD("2015-04-16".to_string()), dec!(3.7746)); + exchange_rates.insert(Exchange::USD("2018-07-19".to_string()), dec!(3.7163)); + exchange_rates.insert(Exchange::USD("2013-03-13".to_string()), dec!(3.1863)); + exchange_rates.insert(Exchange::USD("2012-12-11".to_string()), dec!(3.1645)); + exchange_rates.insert(Exchange::USD("2022-04-04".to_string()), dec!(4.2073)); + exchange_rates.insert(Exchange::USD("2021-06-23".to_string()), dec!(3.7878)); + exchange_rates.insert(Exchange::EUR("2025-06-26".to_string()), dec!(4.2479)); + exchange_rates.insert(Exchange::USD("2014-07-17".to_string()), dec!(3.0579)); + exchange_rates.insert(Exchange::USD("2014-11-18".to_string()), dec!(3.3706)); + exchange_rates.insert(Exchange::EUR("2024-04-03".to_string()), dec!(4.2923)); + exchange_rates.insert(Exchange::USD("2021-10-21".to_string()), dec!(3.9449)); + exchange_rates.insert(Exchange::USD("2020-07-14".to_string()), dec!(3.957)); + exchange_rates.insert(Exchange::USD("2020-08-19".to_string()), dec!(3.6732)); + exchange_rates.insert(Exchange::USD("2015-04-29".to_string()), dec!(3.6396)); + exchange_rates.insert(Exchange::USD("2013-10-03".to_string()), dec!(3.0951)); + exchange_rates.insert(Exchange::USD("2013-05-20".to_string()), dec!(3.238)); + exchange_rates.insert(Exchange::EUR("2024-07-15".to_string()), dec!(4.2499)); + exchange_rates.insert(Exchange::USD("2022-03-15".to_string()), dec!(4.2992)); + exchange_rates.insert(Exchange::USD("2018-09-20".to_string()), dec!(3.6702)); + exchange_rates.insert(Exchange::USD("2014-05-12".to_string()), dec!(3.0362)); + exchange_rates.insert(Exchange::USD("2025-09-26".to_string()), dec!(3.6528)); + exchange_rates.insert(Exchange::USD("2023-09-19".to_string()), dec!(4.3472)); + exchange_rates.insert(Exchange::USD("2016-03-10".to_string()), dec!(3.932)); + exchange_rates.insert(Exchange::USD("2016-08-04".to_string()), dec!(3.8588)); + exchange_rates.insert(Exchange::USD("2013-04-19".to_string()), dec!(3.1409)); + exchange_rates.insert(Exchange::EUR("2023-09-12".to_string()), dec!(4.6836)); + exchange_rates.insert(Exchange::EUR("2024-10-17".to_string()), dec!(4.3174)); + exchange_rates.insert(Exchange::USD("2021-12-01".to_string()), dec!(4.1051)); + exchange_rates.insert(Exchange::USD("2022-08-30".to_string()), dec!(4.721)); + exchange_rates.insert(Exchange::USD("2016-04-18".to_string()), dec!(3.801)); + exchange_rates.insert(Exchange::USD("2012-09-24".to_string()), dec!(3.218)); + exchange_rates.insert(Exchange::USD("2022-07-27".to_string()), dec!(4.7142)); + exchange_rates.insert(Exchange::USD("2019-10-22".to_string()), dec!(3.8408)); + exchange_rates.insert(Exchange::USD("2022-11-30".to_string()), dec!(4.5066)); + exchange_rates.insert(Exchange::USD("2016-10-06".to_string()), dec!(3.8405)); + exchange_rates.insert(Exchange::USD("2023-08-17".to_string()), dec!(4.1094)); + exchange_rates.insert(Exchange::USD("2012-12-28".to_string()), dec!(3.0893)); + exchange_rates.insert(Exchange::USD("2019-07-08".to_string()), dec!(3.7857)); + exchange_rates.insert(Exchange::USD("2017-10-13".to_string()), dec!(3.601)); + exchange_rates.insert(Exchange::USD("2022-08-10".to_string()), dec!(4.6112)); + exchange_rates.insert(Exchange::USD("2018-04-04".to_string()), dec!(3.4224)); + exchange_rates.insert(Exchange::USD("2024-02-09".to_string()), dec!(4.0096)); + exchange_rates.insert(Exchange::USD("2014-05-09".to_string()), dec!(3.0247)); + exchange_rates.insert(Exchange::USD("2019-11-29".to_string()), dec!(3.9288)); + exchange_rates.insert(Exchange::USD("2019-11-18".to_string()), dec!(3.8767)); + exchange_rates.insert(Exchange::USD("2017-02-23".to_string()), dec!(4.084)); + exchange_rates.insert(Exchange::USD("2012-12-21".to_string()), dec!(3.0791)); + exchange_rates.insert(Exchange::EUR("2023-11-14".to_string()), dec!(4.4163)); + exchange_rates.insert(Exchange::USD("2025-04-08".to_string()), dec!(3.927)); + exchange_rates.insert(Exchange::USD("2018-01-26".to_string()), dec!(3.3299)); + exchange_rates.insert(Exchange::USD("2017-03-03".to_string()), dec!(4.0955)); + exchange_rates.insert(Exchange::USD("2024-05-22".to_string()), dec!(3.9243)); + exchange_rates.insert(Exchange::USD("2021-09-27".to_string()), dec!(3.9276)); + exchange_rates.insert(Exchange::USD("2012-08-06".to_string()), dec!(3.2752)); + exchange_rates.insert(Exchange::EUR("2023-06-07".to_string()), dec!(4.479)); + exchange_rates.insert(Exchange::EUR("2024-06-26".to_string()), dec!(4.3087)); + exchange_rates.insert(Exchange::USD("2015-07-21".to_string()), dec!(3.7875)); + exchange_rates.insert(Exchange::USD("2017-02-21".to_string()), dec!(4.0942)); + exchange_rates.insert(Exchange::USD("2012-09-27".to_string()), dec!(3.2236)); + exchange_rates.insert(Exchange::EUR("2025-07-01".to_string()), dec!(4.2415)); + exchange_rates.insert(Exchange::EUR("2023-05-09".to_string()), dec!(4.5683)); + exchange_rates.insert(Exchange::USD("2025-05-12".to_string()), dec!(3.8011)); + exchange_rates.insert(Exchange::USD("2020-01-23".to_string()), dec!(3.8308)); + exchange_rates.insert(Exchange::USD("2018-01-12".to_string()), dec!(3.4366)); + exchange_rates.insert(Exchange::USD("2023-03-07".to_string()), dec!(4.3981)); + exchange_rates.insert(Exchange::USD("2015-02-05".to_string()), dec!(3.6656)); + exchange_rates.insert(Exchange::USD("2014-12-09".to_string()), dec!(3.3688)); + exchange_rates.insert(Exchange::EUR("2024-05-15".to_string()), dec!(4.2635)); + exchange_rates.insert(Exchange::USD("2015-01-28".to_string()), dec!(3.7276)); + exchange_rates.insert(Exchange::USD("2022-08-23".to_string()), dec!(4.803)); + exchange_rates.insert(Exchange::USD("2020-01-27".to_string()), dec!(3.8725)); + exchange_rates.insert(Exchange::USD("2024-11-29".to_string()), dec!(4.077)); + exchange_rates.insert(Exchange::USD("2012-02-17".to_string()), dec!(3.179)); + exchange_rates.insert(Exchange::USD("2016-11-07".to_string()), dec!(3.9132)); + exchange_rates.insert(Exchange::USD("2022-06-13".to_string()), dec!(4.4209)); + exchange_rates.insert(Exchange::USD("2022-10-25".to_string()), dec!(4.8499)); + exchange_rates.insert(Exchange::USD("2020-01-31".to_string()), dec!(3.8999)); + exchange_rates.insert(Exchange::USD("2017-11-07".to_string()), dec!(3.6652)); + exchange_rates.insert(Exchange::USD("2012-08-31".to_string()), dec!(3.3353)); + exchange_rates.insert(Exchange::USD("2023-04-06".to_string()), dec!(4.3033)); + exchange_rates.insert(Exchange::USD("2023-07-19".to_string()), dec!(3.9612)); + exchange_rates.insert(Exchange::USD("2023-06-09".to_string()), dec!(4.1545)); + exchange_rates.insert(Exchange::USD("2017-02-08".to_string()), dec!(4.0521)); + exchange_rates.insert(Exchange::USD("2018-10-18".to_string()), dec!(3.7302)); + exchange_rates.insert(Exchange::USD("2018-03-28".to_string()), dec!(3.3956)); + exchange_rates.insert(Exchange::USD("2017-02-28".to_string()), dec!(4.077)); + exchange_rates.insert(Exchange::USD("2015-09-14".to_string()), dec!(3.7124)); + exchange_rates.insert(Exchange::EUR("2025-03-25".to_string()), dec!(4.1664)); + exchange_rates.insert(Exchange::USD("2015-07-09".to_string()), dec!(3.829)); + exchange_rates.insert(Exchange::USD("2023-07-11".to_string()), dec!(4.0374)); + exchange_rates.insert(Exchange::USD("2013-08-23".to_string()), dec!(3.1673)); + exchange_rates.insert(Exchange::EUR("2024-02-06".to_string()), dec!(4.3435)); + exchange_rates.insert(Exchange::USD("2017-04-05".to_string()), dec!(3.9783)); + exchange_rates.insert(Exchange::USD("2022-03-02".to_string()), dec!(4.3302)); + exchange_rates.insert(Exchange::EUR("2025-05-21".to_string()), dec!(4.2403)); + exchange_rates.insert(Exchange::USD("2023-01-13".to_string()), dec!(4.3272)); + exchange_rates.insert(Exchange::USD("2023-05-25".to_string()), dec!(4.1994)); + exchange_rates.insert(Exchange::USD("2023-12-06".to_string()), dec!(4.0202)); + exchange_rates.insert(Exchange::EUR("2023-05-30".to_string()), dec!(4.522)); + exchange_rates.insert(Exchange::USD("2018-09-27".to_string()), dec!(3.6557)); + exchange_rates.insert(Exchange::USD("2024-10-11".to_string()), dec!(3.9204)); + exchange_rates.insert(Exchange::USD("2021-03-17".to_string()), dec!(3.8676)); + exchange_rates.insert(Exchange::USD("2016-11-18".to_string()), dec!(4.1968)); + exchange_rates.insert(Exchange::USD("2014-05-16".to_string()), dec!(3.0567)); + exchange_rates.insert(Exchange::USD("2013-12-17".to_string()), dec!(3.036)); + exchange_rates.insert(Exchange::USD("2021-12-29".to_string()), dec!(4.0779)); + exchange_rates.insert(Exchange::USD("2020-10-07".to_string()), dec!(3.8126)); + exchange_rates.insert(Exchange::USD("2025-02-26".to_string()), dec!(3.9434)); + exchange_rates.insert(Exchange::USD("2024-10-10".to_string()), dec!(3.9355)); + exchange_rates.insert(Exchange::USD("2025-08-01".to_string()), dec!(3.7536)); + exchange_rates.insert(Exchange::USD("2023-09-21".to_string()), dec!(4.3365)); + exchange_rates.insert(Exchange::USD("2019-09-24".to_string()), dec!(3.9838)); + exchange_rates.insert(Exchange::USD("2016-08-25".to_string()), dec!(3.819)); + exchange_rates.insert(Exchange::USD("2015-02-02".to_string()), dec!(3.6801)); + exchange_rates.insert(Exchange::EUR("2024-09-09".to_string()), dec!(4.2818)); + exchange_rates.insert(Exchange::USD("2025-03-19".to_string()), dec!(3.8473)); + exchange_rates.insert(Exchange::USD("2018-11-21".to_string()), dec!(3.7829)); + exchange_rates.insert(Exchange::USD("2017-11-22".to_string()), dec!(3.5881)); + exchange_rates.insert(Exchange::EUR("2024-07-10".to_string()), dec!(4.2529)); + exchange_rates.insert(Exchange::EUR("2024-08-20".to_string()), dec!(4.2665)); + exchange_rates.insert(Exchange::USD("2020-03-09".to_string()), dec!(3.7899)); + exchange_rates.insert(Exchange::USD("2022-10-04".to_string()), dec!(4.8615)); + exchange_rates.insert(Exchange::USD("2021-07-07".to_string()), dec!(3.8225)); + exchange_rates.insert(Exchange::USD("2021-11-30".to_string()), dec!(4.1214)); + exchange_rates.insert(Exchange::USD("2018-01-22".to_string()), dec!(3.4036)); + exchange_rates.insert(Exchange::USD("2019-09-11".to_string()), dec!(3.9324)); + exchange_rates.insert(Exchange::USD("2025-06-20".to_string()), dec!(3.7067)); + exchange_rates.insert(Exchange::EUR("2024-04-02".to_string()), dec!(4.2934)); + exchange_rates.insert(Exchange::USD("2024-02-16".to_string()), dec!(4.0325)); + exchange_rates.insert(Exchange::USD("2024-11-20".to_string()), dec!(4.112)); + exchange_rates.insert(Exchange::USD("2015-01-21".to_string()), dec!(3.7358)); + exchange_rates.insert(Exchange::USD("2025-07-03".to_string()), dec!(3.6137)); + exchange_rates.insert(Exchange::USD("2019-03-12".to_string()), dec!(3.8116)); + exchange_rates.insert(Exchange::USD("2017-06-29".to_string()), dec!(3.7122)); + exchange_rates.insert(Exchange::USD("2023-07-10".to_string()), dec!(4.0632)); + exchange_rates.insert(Exchange::USD("2020-08-27".to_string()), dec!(3.7286)); + exchange_rates.insert(Exchange::USD("2017-11-21".to_string()), dec!(3.606)); + exchange_rates.insert(Exchange::USD("2015-05-20".to_string()), dec!(3.6538)); + exchange_rates.insert(Exchange::USD("2025-03-13".to_string()), dec!(3.8568)); + exchange_rates.insert(Exchange::USD("2017-07-10".to_string()), dec!(3.716)); + exchange_rates.insert(Exchange::USD("2016-11-08".to_string()), dec!(3.9169)); + exchange_rates.insert(Exchange::USD("2017-06-28".to_string()), dec!(3.7249)); + exchange_rates.insert(Exchange::USD("2023-12-07".to_string()), dec!(4.0199)); + exchange_rates.insert(Exchange::USD("2015-07-30".to_string()), dec!(3.7754)); + exchange_rates.insert(Exchange::USD("2014-10-21".to_string()), dec!(3.2987)); + exchange_rates.insert(Exchange::USD("2013-05-15".to_string()), dec!(3.234)); + exchange_rates.insert(Exchange::EUR("2025-10-16".to_string()), dec!(4.2517)); + exchange_rates.insert(Exchange::USD("2023-01-23".to_string()), dec!(4.3242)); + exchange_rates.insert(Exchange::USD("2021-05-17".to_string()), dec!(3.7288)); + exchange_rates.insert(Exchange::USD("2015-04-30".to_string()), dec!(3.5987)); + exchange_rates.insert(Exchange::USD("2022-11-28".to_string()), dec!(4.4827)); + exchange_rates.insert(Exchange::USD("2014-11-26".to_string()), dec!(3.3546)); + exchange_rates.insert(Exchange::USD("2018-08-29".to_string()), dec!(3.6747)); + exchange_rates.insert(Exchange::USD("2024-08-07".to_string()), dec!(3.9526)); + exchange_rates.insert(Exchange::USD("2024-04-30".to_string()), dec!(4.0341)); + exchange_rates.insert(Exchange::USD("2020-08-05".to_string()), dec!(3.7143)); + exchange_rates.insert(Exchange::USD("2013-08-16".to_string()), dec!(3.1665)); + exchange_rates.insert(Exchange::USD("2019-03-14".to_string()), dec!(3.8018)); + exchange_rates.insert(Exchange::USD("2014-11-19".to_string()), dec!(3.3655)); + exchange_rates.insert(Exchange::USD("2023-03-27".to_string()), dec!(4.3518)); + exchange_rates.insert(Exchange::USD("2020-12-03".to_string()), dec!(3.6981)); + exchange_rates.insert(Exchange::EUR("2024-02-28".to_string()), dec!(4.3116)); + exchange_rates.insert(Exchange::USD("2021-10-01".to_string()), dec!(3.9678)); + exchange_rates.insert(Exchange::USD("2024-01-10".to_string()), dec!(3.9656)); + exchange_rates.insert(Exchange::USD("2022-10-18".to_string()), dec!(4.8929)); + exchange_rates.insert(Exchange::USD("2023-08-02".to_string()), dec!(4.0497)); + exchange_rates.insert(Exchange::USD("2016-12-15".to_string()), dec!(4.2329)); + exchange_rates.insert(Exchange::USD("2016-05-30".to_string()), dec!(3.947)); + exchange_rates.insert(Exchange::USD("2016-08-08".to_string()), dec!(3.8706)); + exchange_rates.insert(Exchange::USD("2014-07-23".to_string()), dec!(3.0707)); + exchange_rates.insert(Exchange::USD("2023-09-28".to_string()), dec!(4.4062)); + exchange_rates.insert(Exchange::USD("2019-10-18".to_string()), dec!(3.8503)); + exchange_rates.insert(Exchange::USD("2015-07-22".to_string()), dec!(3.7629)); + exchange_rates.insert(Exchange::USD("2013-07-31".to_string()), dec!(3.1929)); + exchange_rates.insert(Exchange::USD("2022-01-18".to_string()), dec!(3.9734)); + exchange_rates.insert(Exchange::USD("2018-07-16".to_string()), dec!(3.6828)); + exchange_rates.insert(Exchange::EUR("2024-12-04".to_string()), dec!(4.2899)); + exchange_rates.insert(Exchange::USD("2018-10-09".to_string()), dec!(3.7629)); + exchange_rates.insert(Exchange::EUR("2023-04-20".to_string()), dec!(4.6109)); + exchange_rates.insert(Exchange::EUR("2023-05-12".to_string()), dec!(4.5444)); + exchange_rates.insert(Exchange::USD("2024-12-04".to_string()), dec!(4.0845)); + exchange_rates.insert(Exchange::EUR("2024-09-30".to_string()), dec!(4.2791)); + exchange_rates.insert(Exchange::EUR("2025-02-25".to_string()), dec!(4.1339)); + exchange_rates.insert(Exchange::USD("2025-07-30".to_string()), dec!(3.6981)); + exchange_rates.insert(Exchange::USD("2022-02-17".to_string()), dec!(3.9687)); + exchange_rates.insert(Exchange::USD("2015-09-25".to_string()), dec!(3.7818)); + exchange_rates.insert(Exchange::USD("2017-06-30".to_string()), dec!(3.7062)); + exchange_rates.insert(Exchange::USD("2023-07-04".to_string()), dec!(4.0636)); + exchange_rates.insert(Exchange::USD("2012-01-05".to_string()), dec!(3.5081)); + exchange_rates.insert(Exchange::USD("2018-12-14".to_string()), dec!(3.8095)); + exchange_rates.insert(Exchange::USD("2019-08-21".to_string()), dec!(3.921)); + exchange_rates.insert(Exchange::USD("2017-07-25".to_string()), dec!(3.6519)); + exchange_rates.insert(Exchange::USD("2017-03-13".to_string()), dec!(4.0747)); + exchange_rates.insert(Exchange::EUR("2025-04-14".to_string()), dec!(4.2776)); + exchange_rates.insert(Exchange::USD("2020-07-16".to_string()), dec!(3.9422)); + exchange_rates.insert(Exchange::USD("2016-12-29".to_string()), dec!(4.2161)); + exchange_rates.insert(Exchange::USD("2020-08-10".to_string()), dec!(3.7393)); + exchange_rates.insert(Exchange::USD("2013-09-16".to_string()), dec!(3.1435)); + exchange_rates.insert(Exchange::USD("2023-03-21".to_string()), dec!(4.3715)); + exchange_rates.insert(Exchange::USD("2024-12-12".to_string()), dec!(4.074)); + exchange_rates.insert(Exchange::USD("2013-10-24".to_string()), dec!(3.0323)); + exchange_rates.insert(Exchange::USD("2012-08-13".to_string()), dec!(3.3202)); + exchange_rates.insert(Exchange::EUR("2023-05-16".to_string()), dec!(4.4904)); + exchange_rates.insert(Exchange::USD("2024-05-21".to_string()), dec!(3.9175)); + exchange_rates.insert(Exchange::USD("2019-02-19".to_string()), dec!(3.8311)); + exchange_rates.insert(Exchange::USD("2016-06-23".to_string()), dec!(3.8593)); + exchange_rates.insert(Exchange::USD("2015-11-19".to_string()), dec!(3.9754)); + exchange_rates.insert(Exchange::USD("2024-04-23".to_string()), dec!(4.061)); + exchange_rates.insert(Exchange::USD("2022-02-28".to_string()), dec!(4.1965)); + exchange_rates.insert(Exchange::EUR("2023-03-24".to_string()), dec!(4.6911)); + exchange_rates.insert(Exchange::USD("2016-05-23".to_string()), dec!(3.9513)); + exchange_rates.insert(Exchange::USD("2016-06-21".to_string()), dec!(3.8741)); + exchange_rates.insert(Exchange::USD("2019-12-24".to_string()), dec!(3.8487)); + exchange_rates.insert(Exchange::USD("2018-11-12".to_string()), dec!(3.8163)); + exchange_rates.insert(Exchange::USD("2023-10-03".to_string()), dec!(4.4012)); + exchange_rates.insert(Exchange::EUR("2023-09-06".to_string()), dec!(4.4974)); + exchange_rates.insert(Exchange::USD("2012-03-14".to_string()), dec!(3.1699)); + exchange_rates.insert(Exchange::USD("2015-08-25".to_string()), dec!(3.6613)); + exchange_rates.insert(Exchange::EUR("2025-09-04".to_string()), dec!(4.2553)); + exchange_rates.insert(Exchange::USD("2019-06-21".to_string()), dec!(3.7705)); + exchange_rates.insert(Exchange::USD("2012-11-06".to_string()), dec!(3.2223)); + exchange_rates.insert(Exchange::USD("2012-10-09".to_string()), dec!(3.1501)); + exchange_rates.insert(Exchange::EUR("2023-03-09".to_string()), dec!(4.6836)); + exchange_rates.insert(Exchange::EUR("2023-11-29".to_string()), dec!(4.3327)); + exchange_rates.insert(Exchange::USD("2018-01-02".to_string()), dec!(3.4546)); + exchange_rates.insert(Exchange::USD("2015-03-31".to_string()), dec!(3.8125)); + exchange_rates.insert(Exchange::USD("2023-10-24".to_string()), dec!(4.1884)); + exchange_rates.insert(Exchange::USD("2022-08-01".to_string()), dec!(4.629)); + exchange_rates.insert(Exchange::USD("2019-10-15".to_string()), dec!(3.8952)); + exchange_rates.insert(Exchange::USD("2025-07-17".to_string()), dec!(3.6686)); + exchange_rates.insert(Exchange::EUR("2024-04-26".to_string()), dec!(4.3225)); + exchange_rates.insert(Exchange::USD("2014-10-13".to_string()), dec!(3.3062)); + exchange_rates.insert(Exchange::USD("2012-01-11".to_string()), dec!(3.4919)); + exchange_rates.insert(Exchange::USD("2018-01-17".to_string()), dec!(3.4109)); + exchange_rates.insert(Exchange::USD("2013-07-09".to_string()), dec!(3.3588)); + exchange_rates.insert(Exchange::USD("2025-05-06".to_string()), dec!(3.7789)); + exchange_rates.insert(Exchange::USD("2021-09-30".to_string()), dec!(3.9925)); + exchange_rates.insert(Exchange::USD("2015-02-25".to_string()), dec!(3.6649)); + exchange_rates.insert(Exchange::USD("2025-10-08".to_string()), dec!(3.6619)); + exchange_rates.insert(Exchange::USD("2021-12-13".to_string()), dec!(4.1003)); + exchange_rates.insert(Exchange::USD("2020-09-30".to_string()), dec!(3.8658)); + exchange_rates.insert(Exchange::USD("2022-08-16".to_string()), dec!(4.6282)); + exchange_rates.insert(Exchange::USD("2017-03-06".to_string()), dec!(4.0663)); + exchange_rates.insert(Exchange::USD("2016-05-02".to_string()), dec!(3.8195)); + exchange_rates.insert(Exchange::EUR("2023-02-15".to_string()), dec!(4.7593)); + exchange_rates.insert(Exchange::USD("2021-12-03".to_string()), dec!(4.0653)); + exchange_rates.insert(Exchange::USD("2024-04-16".to_string()), dec!(4.0687)); + exchange_rates.insert(Exchange::USD("2021-11-10".to_string()), dec!(3.9737)); + exchange_rates.insert(Exchange::USD("2017-01-27".to_string()), dec!(4.0595)); + exchange_rates.insert(Exchange::USD("2017-04-21".to_string()), dec!(3.9841)); + exchange_rates.insert(Exchange::USD("2016-07-04".to_string()), dec!(3.9886)); + exchange_rates.insert(Exchange::EUR("2023-04-03".to_string()), dec!(4.6805)); + exchange_rates.insert(Exchange::USD("2015-07-03".to_string()), dec!(3.7726)); + exchange_rates.insert(Exchange::USD("2012-10-17".to_string()), dec!(3.1261)); + exchange_rates.insert(Exchange::USD("2012-03-07".to_string()), dec!(3.1631)); + exchange_rates.insert(Exchange::USD("2022-07-21".to_string()), dec!(4.6682)); + exchange_rates.insert(Exchange::USD("2018-10-11".to_string()), dec!(3.7399)); + exchange_rates.insert(Exchange::USD("2020-01-16".to_string()), dec!(3.7968)); + exchange_rates.insert(Exchange::EUR("2025-09-08".to_string()), dec!(4.2484)); + exchange_rates.insert(Exchange::EUR("2023-11-27".to_string()), dec!(4.3543)); + exchange_rates.insert(Exchange::USD("2022-06-21".to_string()), dec!(4.3917)); + exchange_rates.insert(Exchange::EUR("2024-08-14".to_string()), dec!(4.2933)); + exchange_rates.insert(Exchange::USD("2018-12-20".to_string()), dec!(3.7331)); + exchange_rates.insert(Exchange::USD("2021-07-15".to_string()), dec!(3.8629)); + exchange_rates.insert(Exchange::USD("2014-03-18".to_string()), dec!(3.0396)); + exchange_rates.insert(Exchange::USD("2019-09-09".to_string()), dec!(3.931)); + exchange_rates.insert(Exchange::EUR("2023-06-05".to_string()), dec!(4.4851)); + exchange_rates.insert(Exchange::EUR("2024-05-24".to_string()), dec!(4.2624)); + exchange_rates.insert(Exchange::USD("2012-01-25".to_string()), dec!(3.299)); + exchange_rates.insert(Exchange::EUR("2025-06-27".to_string()), dec!(4.2362)); + exchange_rates.insert(Exchange::USD("2013-06-25".to_string()), dec!(3.284)); + exchange_rates.insert(Exchange::USD("2014-09-15".to_string()), dec!(3.2522)); + exchange_rates.insert(Exchange::USD("2024-12-19".to_string()), dec!(4.0944)); + exchange_rates.insert(Exchange::USD("2024-01-17".to_string()), dec!(4.0434)); + exchange_rates.insert(Exchange::USD("2024-07-22".to_string()), dec!(3.9307)); + exchange_rates.insert(Exchange::USD("2022-09-28".to_string()), dec!(5.0381)); + exchange_rates.insert(Exchange::USD("2012-07-06".to_string()), dec!(3.4057)); + exchange_rates.insert(Exchange::USD("2019-12-20".to_string()), dec!(3.8311)); + exchange_rates.insert(Exchange::USD("2023-12-01".to_string()), dec!(3.991)); + exchange_rates.insert(Exchange::EUR("2025-01-20".to_string()), dec!(4.2587)); + exchange_rates.insert(Exchange::USD("2020-12-28".to_string()), dec!(3.6639)); + exchange_rates.insert(Exchange::USD("2016-03-25".to_string()), dec!(3.8174)); + exchange_rates.insert(Exchange::USD("2023-04-28".to_string()), dec!(4.1753)); + exchange_rates.insert(Exchange::USD("2018-09-18".to_string()), dec!(3.6817)); + exchange_rates.insert(Exchange::EUR("2023-12-01".to_string()), dec!(4.3494)); + exchange_rates.insert(Exchange::USD("2022-07-07".to_string()), dec!(4.7029)); + exchange_rates.insert(Exchange::EUR("2023-08-03".to_string()), dec!(4.4585)); + exchange_rates.insert(Exchange::EUR("2023-11-06".to_string()), dec!(4.4615)); + exchange_rates.insert(Exchange::EUR("2023-10-03".to_string()), dec!(4.6147)); + exchange_rates.insert(Exchange::USD("2014-12-03".to_string()), dec!(3.373)); + exchange_rates.insert(Exchange::USD("2023-03-28".to_string()), dec!(4.33)); + exchange_rates.insert(Exchange::USD("2021-05-14".to_string()), dec!(3.7374)); + exchange_rates.insert(Exchange::USD("2013-07-02".to_string()), dec!(3.3222)); + exchange_rates.insert(Exchange::USD("2021-06-09".to_string()), dec!(3.6545)); + exchange_rates.insert(Exchange::USD("2024-04-29".to_string()), dec!(4.0346)); + exchange_rates.insert(Exchange::EUR("2024-10-18".to_string()), dec!(4.3048)); + exchange_rates.insert(Exchange::USD("2014-12-22".to_string()), dec!(3.4767)); + exchange_rates.insert(Exchange::EUR("2023-04-13".to_string()), dec!(4.6511)); + exchange_rates.insert(Exchange::EUR("2025-01-14".to_string()), dec!(4.2737)); + exchange_rates.insert(Exchange::EUR("2025-08-13".to_string()), dec!(4.2586)); + exchange_rates.insert(Exchange::USD("2018-09-03".to_string()), dec!(3.6991)); + exchange_rates.insert(Exchange::USD("2017-12-11".to_string()), dec!(3.5633)); + exchange_rates.insert(Exchange::USD("2015-09-17".to_string()), dec!(3.7129)); + exchange_rates.insert(Exchange::USD("2014-11-13".to_string()), dec!(3.386)); + exchange_rates.insert(Exchange::USD("2023-03-10".to_string()), dec!(4.4266)); + exchange_rates.insert(Exchange::USD("2021-03-22".to_string()), dec!(3.8768)); + exchange_rates.insert(Exchange::USD("2021-06-17".to_string()), dec!(3.7931)); + exchange_rates.insert(Exchange::USD("2019-08-16".to_string()), dec!(3.9281)); + exchange_rates.insert(Exchange::USD("2017-05-16".to_string()), dec!(3.7932)); + exchange_rates.insert(Exchange::USD("2014-05-13".to_string()), dec!(3.0381)); + exchange_rates.insert(Exchange::USD("2014-11-04".to_string()), dec!(3.3776)); + exchange_rates.insert(Exchange::USD("2019-04-03".to_string()), dec!(3.8192)); + exchange_rates.insert(Exchange::USD("2025-07-08".to_string()), dec!(3.6135)); + exchange_rates.insert(Exchange::USD("2023-12-15".to_string()), dec!(3.9326)); + exchange_rates.insert(Exchange::USD("2012-02-27".to_string()), dec!(3.1176)); + exchange_rates.insert(Exchange::USD("2012-11-12".to_string()), dec!(3.2803)); + exchange_rates.insert(Exchange::EUR("2024-03-18".to_string()), dec!(4.3086)); + exchange_rates.insert(Exchange::USD("2020-01-20".to_string()), dec!(3.8277)); + exchange_rates.insert(Exchange::USD("2020-04-09".to_string()), dec!(4.1744)); + exchange_rates.insert(Exchange::USD("2020-08-18".to_string()), dec!(3.6895)); + exchange_rates.insert(Exchange::USD("2013-04-05".to_string()), dec!(3.2358)); + exchange_rates.insert(Exchange::USD("2020-05-07".to_string()), dec!(4.2162)); + exchange_rates.insert(Exchange::USD("2020-11-05".to_string()), dec!(3.8353)); + exchange_rates.insert(Exchange::USD("2019-03-21".to_string()), dec!(3.7581)); + exchange_rates.insert(Exchange::USD("2013-01-17".to_string()), dec!(3.0853)); + exchange_rates.insert(Exchange::EUR("2024-02-01".to_string()), dec!(4.3247)); + exchange_rates.insert(Exchange::EUR("2024-04-23".to_string()), dec!(4.3335)); + exchange_rates.insert(Exchange::USD("2025-08-25".to_string()), dec!(3.6421)); + exchange_rates.insert(Exchange::USD("2024-01-15".to_string()), dec!(3.9963)); + exchange_rates.insert(Exchange::USD("2020-04-08".to_string()), dec!(4.1801)); + exchange_rates.insert(Exchange::USD("2021-12-08".to_string()), dec!(4.071)); + exchange_rates.insert(Exchange::USD("2024-04-03".to_string()), dec!(3.9843)); + exchange_rates.insert(Exchange::USD("2020-12-23".to_string()), dec!(3.6919)); + exchange_rates.insert(Exchange::USD("2021-12-24".to_string()), dec!(4.0785)); + exchange_rates.insert(Exchange::USD("2016-03-07".to_string()), dec!(3.9515)); + exchange_rates.insert(Exchange::USD("2025-02-28".to_string()), dec!(3.9993)); + exchange_rates.insert(Exchange::USD("2025-08-07".to_string()), dec!(3.6477)); + exchange_rates.insert(Exchange::USD("2016-09-08".to_string()), dec!(3.8255)); + exchange_rates.insert(Exchange::EUR("2023-04-26".to_string()), dec!(4.5887)); + exchange_rates.insert(Exchange::EUR("2025-01-30".to_string()), dec!(4.2039)); + exchange_rates.insert(Exchange::USD("2014-12-29".to_string()), dec!(3.527)); + exchange_rates.insert(Exchange::EUR("2023-10-30".to_string()), dec!(4.4491)); + exchange_rates.insert(Exchange::USD("2012-07-17".to_string()), dec!(3.3973)); + exchange_rates.insert(Exchange::USD("2019-04-23".to_string()), dec!(3.8118)); + exchange_rates.insert(Exchange::EUR("2024-02-14".to_string()), dec!(4.3435)); + exchange_rates.insert(Exchange::EUR("2025-03-31".to_string()), dec!(4.1839)); + exchange_rates.insert(Exchange::USD("2023-05-12".to_string()), dec!(4.1638)); + exchange_rates.insert(Exchange::USD("2017-11-23".to_string()), dec!(3.5557)); + exchange_rates.insert(Exchange::USD("2013-11-07".to_string()), dec!(3.0844)); + exchange_rates.insert(Exchange::USD("2024-02-28".to_string()), dec!(3.9922)); + exchange_rates.insert(Exchange::USD("2021-01-22".to_string()), dec!(3.7255)); + exchange_rates.insert(Exchange::EUR("2025-09-10".to_string()), dec!(4.2604)); + exchange_rates.insert(Exchange::USD("2023-04-04".to_string()), dec!(4.2855)); + exchange_rates.insert(Exchange::USD("2021-05-20".to_string()), dec!(3.7077)); + exchange_rates.insert(Exchange::USD("2019-12-13".to_string()), dec!(3.8234)); + exchange_rates.insert(Exchange::USD("2014-09-17".to_string()), dec!(3.2331)); + exchange_rates.insert(Exchange::USD("2021-10-26".to_string()), dec!(3.974)); + exchange_rates.insert(Exchange::USD("2020-06-22".to_string()), dec!(3.9667)); + exchange_rates.insert(Exchange::USD("2015-04-23".to_string()), dec!(3.7371)); + exchange_rates.insert(Exchange::USD("2021-02-01".to_string()), dec!(3.7323)); + exchange_rates.insert(Exchange::USD("2024-02-06".to_string()), dec!(4.0484)); + exchange_rates.insert(Exchange::USD("2023-07-25".to_string()), dec!(4.008)); + exchange_rates.insert(Exchange::USD("2022-02-16".to_string()), dec!(3.9478)); + exchange_rates.insert(Exchange::USD("2022-06-09".to_string()), dec!(4.2764)); + exchange_rates.insert(Exchange::USD("2021-02-17".to_string()), dec!(3.7287)); + exchange_rates.insert(Exchange::USD("2018-03-29".to_string()), dec!(3.4201)); + exchange_rates.insert(Exchange::USD("2018-06-08".to_string()), dec!(3.6479)); + exchange_rates.insert(Exchange::USD("2018-03-01".to_string()), dec!(3.4356)); + exchange_rates.insert(Exchange::USD("2013-11-22".to_string()), dec!(3.1077)); + exchange_rates.insert(Exchange::USD("2012-03-06".to_string()), dec!(3.1557)); + exchange_rates.insert(Exchange::USD("2020-10-22".to_string()), dec!(3.8734)); + exchange_rates.insert(Exchange::USD("2021-08-17".to_string()), dec!(3.8797)); + exchange_rates.insert(Exchange::USD("2025-07-10".to_string()), dec!(3.6209)); + exchange_rates.insert(Exchange::USD("2021-04-23".to_string()), dec!(3.7855)); + exchange_rates.insert(Exchange::USD("2022-10-20".to_string()), dec!(4.9024)); + exchange_rates.insert(Exchange::USD("2025-11-18".to_string()), dec!(3.6525)); + exchange_rates.insert(Exchange::USD("2017-04-27".to_string()), dec!(3.8776)); + exchange_rates.insert(Exchange::USD("2022-01-17".to_string()), dec!(3.9567)); + exchange_rates.insert(Exchange::USD("2015-03-24".to_string()), dec!(3.7453)); + exchange_rates.insert(Exchange::USD("2015-07-10".to_string()), dec!(3.7709)); + exchange_rates.insert(Exchange::USD("2013-05-29".to_string()), dec!(3.2831)); + exchange_rates.insert(Exchange::USD("2012-11-02".to_string()), dec!(3.1965)); + exchange_rates.insert(Exchange::EUR("2023-04-28".to_string()), dec!(4.5889)); + exchange_rates.insert(Exchange::EUR("2025-02-11".to_string()), dec!(4.1783)); + exchange_rates.insert(Exchange::USD("2020-02-20".to_string()), dec!(3.9621)); + exchange_rates.insert(Exchange::USD("2019-06-07".to_string()), dec!(3.7958)); + exchange_rates.insert(Exchange::USD("2013-01-28".to_string()), dec!(3.1074)); + exchange_rates.insert(Exchange::EUR("2025-04-25".to_string()), dec!(4.2688)); + exchange_rates.insert(Exchange::USD("2024-04-19".to_string()), dec!(4.0688)); + exchange_rates.insert(Exchange::USD("2020-02-19".to_string()), dec!(3.9556)); + exchange_rates.insert(Exchange::USD("2014-07-30".to_string()), dec!(3.0978)); + exchange_rates.insert(Exchange::USD("2012-01-20".to_string()), dec!(3.3537)); + exchange_rates.insert(Exchange::USD("2025-03-28".to_string()), dec!(3.8817)); + exchange_rates.insert(Exchange::EUR("2025-11-10".to_string()), dec!(4.2351)); + exchange_rates.insert(Exchange::USD("2013-09-27".to_string()), dec!(3.1328)); + exchange_rates.insert(Exchange::USD("2019-03-22".to_string()), dec!(3.7948)); + exchange_rates.insert(Exchange::EUR("2025-10-31".to_string()), dec!(4.2543)); + exchange_rates.insert(Exchange::USD("2020-03-27".to_string()), dec!(4.1127)); + exchange_rates.insert(Exchange::USD("2025-04-22".to_string()), dec!(3.722)); + exchange_rates.insert(Exchange::EUR("2023-10-04".to_string()), dec!(4.6303)); + exchange_rates.insert(Exchange::USD("2023-05-29".to_string()), dec!(4.2234)); + exchange_rates.insert(Exchange::USD("2015-12-31".to_string()), dec!(3.9011)); + exchange_rates.insert(Exchange::USD("2016-02-05".to_string()), dec!(3.942)); + exchange_rates.insert(Exchange::USD("2023-06-28".to_string()), dec!(4.0719)); + exchange_rates.insert(Exchange::USD("2015-09-04".to_string()), dec!(3.7952)); + exchange_rates.insert(Exchange::USD("2023-09-27".to_string()), dec!(4.3622)); + exchange_rates.insert(Exchange::EUR("2025-11-28".to_string()), dec!(4.2369)); + exchange_rates.insert(Exchange::EUR("2024-08-01".to_string()), dec!(4.2924)); + exchange_rates.insert(Exchange::USD("2025-10-27".to_string()), dec!(3.6395)); + exchange_rates.insert(Exchange::USD("2012-11-07".to_string()), dec!(3.2031)); + exchange_rates.insert(Exchange::USD("2013-06-04".to_string()), dec!(3.2524)); + exchange_rates.insert(Exchange::USD("2023-11-24".to_string()), dec!(4.0103)); + exchange_rates.insert(Exchange::USD("2013-03-11".to_string()), dec!(3.1828)); + exchange_rates.insert(Exchange::USD("2017-11-08".to_string()), dec!(3.6595)); + exchange_rates.insert(Exchange::EUR("2024-11-04".to_string()), dec!(4.3443)); + exchange_rates.insert(Exchange::USD("2024-06-19".to_string()), dec!(4.0387)); + exchange_rates.insert(Exchange::USD("2023-08-16".to_string()), dec!(4.0832)); + exchange_rates.insert(Exchange::USD("2024-12-31".to_string()), dec!(4.1012)); + exchange_rates.insert(Exchange::USD("2013-01-25".to_string()), dec!(3.1186)); + exchange_rates.insert(Exchange::USD("2025-12-18".to_string()), dec!(3.5893)); + exchange_rates.insert(Exchange::USD("2023-09-04".to_string()), dec!(4.1353)); + exchange_rates.insert(Exchange::USD("2016-07-22".to_string()), dec!(3.9504)); + exchange_rates.insert(Exchange::USD("2018-05-16".to_string()), dec!(3.6241)); + exchange_rates.insert(Exchange::USD("2020-09-11".to_string()), dec!(3.7534)); + exchange_rates.insert(Exchange::USD("2021-05-05".to_string()), dec!(3.8136)); + exchange_rates.insert(Exchange::USD("2022-10-05".to_string()), dec!(4.838)); + exchange_rates.insert(Exchange::USD("2012-06-25".to_string()), dec!(3.4105)); + exchange_rates.insert(Exchange::EUR("2025-09-12".to_string()), dec!(4.2593)); + exchange_rates.insert(Exchange::USD("2025-05-21".to_string()), dec!(3.7452)); + exchange_rates.insert(Exchange::USD("2023-12-19".to_string()), dec!(3.9591)); + exchange_rates.insert(Exchange::USD("2022-03-14".to_string()), dec!(4.3221)); + exchange_rates.insert(Exchange::USD("2021-12-27".to_string()), dec!(4.0889)); + exchange_rates.insert(Exchange::USD("2012-07-19".to_string()), dec!(3.39)); + exchange_rates.insert(Exchange::USD("2014-08-21".to_string()), dec!(3.1569)); + exchange_rates.insert(Exchange::EUR("2025-08-20".to_string()), dec!(4.2524)); + exchange_rates.insert(Exchange::EUR("2023-01-13".to_string()), dec!(4.6915)); + exchange_rates.insert(Exchange::USD("2022-01-13".to_string()), dec!(3.9463)); + exchange_rates.insert(Exchange::USD("2022-08-19".to_string()), dec!(4.7061)); + exchange_rates.insert(Exchange::USD("2021-10-12".to_string()), dec!(3.9664)); + exchange_rates.insert(Exchange::USD("2016-08-01".to_string()), dec!(3.904)); + exchange_rates.insert(Exchange::USD("2014-06-03".to_string()), dec!(3.0449)); + exchange_rates.insert(Exchange::USD("2013-02-12".to_string()), dec!(3.1159)); + exchange_rates.insert(Exchange::USD("2020-07-02".to_string()), dec!(3.9528)); + exchange_rates.insert(Exchange::EUR("2023-02-24".to_string()), dec!(4.7245)); + exchange_rates.insert(Exchange::EUR("2023-05-19".to_string()), dec!(4.5367)); + exchange_rates.insert(Exchange::USD("2018-01-30".to_string()), dec!(3.3442)); + exchange_rates.insert(Exchange::USD("2023-01-16".to_string()), dec!(4.3436)); + exchange_rates.insert(Exchange::USD("2020-06-15".to_string()), dec!(3.9413)); + exchange_rates.insert(Exchange::USD("2023-05-16".to_string()), dec!(4.1228)); + exchange_rates.insert(Exchange::USD("2017-03-16".to_string()), dec!(4.03)); + exchange_rates.insert(Exchange::EUR("2024-03-14".to_string()), dec!(4.287)); + exchange_rates.insert(Exchange::USD("2023-04-03".to_string()), dec!(4.3168)); + exchange_rates.insert(Exchange::USD("2015-10-14".to_string()), dec!(3.7129)); + exchange_rates.insert(Exchange::USD("2014-01-23".to_string()), dec!(3.0559)); + exchange_rates.insert(Exchange::EUR("2025-05-22".to_string()), dec!(4.2447)); + exchange_rates.insert(Exchange::USD("2017-04-10".to_string()), dec!(3.9956)); + exchange_rates.insert(Exchange::EUR("2025-01-22".to_string()), dec!(4.2461)); + exchange_rates.insert(Exchange::USD("2022-02-24".to_string()), dec!(4.1281)); + exchange_rates.insert(Exchange::USD("2024-07-30".to_string()), dec!(3.9567)); + exchange_rates.insert(Exchange::USD("2021-01-12".to_string()), dec!(3.7188)); + exchange_rates.insert(Exchange::USD("2019-01-11".to_string()), dec!(3.7289)); + exchange_rates.insert(Exchange::USD("2015-08-11".to_string()), dec!(3.8087)); + exchange_rates.insert(Exchange::EUR("2024-02-13".to_string()), dec!(4.3214)); + exchange_rates.insert(Exchange::USD("2021-07-16".to_string()), dec!(3.8808)); + exchange_rates.insert(Exchange::USD("2014-04-30".to_string()), dec!(3.044)); + exchange_rates.insert(Exchange::USD("2017-06-12".to_string()), dec!(3.735)); + exchange_rates.insert(Exchange::USD("2019-09-13".to_string()), dec!(3.912)); + exchange_rates.insert(Exchange::USD("2025-01-03".to_string()), dec!(4.1512)); + exchange_rates.insert(Exchange::USD("2025-07-24".to_string()), dec!(3.6158)); + exchange_rates.insert(Exchange::USD("2012-05-30".to_string()), dec!(3.5139)); + exchange_rates.insert(Exchange::USD("2014-11-14".to_string()), dec!(3.3933)); + exchange_rates.insert(Exchange::USD("2017-01-23".to_string()), dec!(4.076)); + exchange_rates.insert(Exchange::USD("2014-09-18".to_string()), dec!(3.249)); + exchange_rates.insert(Exchange::USD("2013-10-25".to_string()), dec!(3.0326)); + exchange_rates.insert(Exchange::USD("2017-08-31".to_string()), dec!(3.5822)); + exchange_rates.insert(Exchange::USD("2023-07-03".to_string()), dec!(4.0714)); + exchange_rates.insert(Exchange::USD("2020-01-10".to_string()), dec!(3.8272)); + exchange_rates.insert(Exchange::USD("2016-02-09".to_string()), dec!(3.9771)); + exchange_rates.insert(Exchange::USD("2022-05-20".to_string()), dec!(4.3832)); + exchange_rates.insert(Exchange::EUR("2024-05-10".to_string()), dec!(4.2979)); + exchange_rates.insert(Exchange::USD("2025-03-25".to_string()), dec!(3.8578)); + exchange_rates.insert(Exchange::USD("2018-02-09".to_string()), dec!(3.4263)); + exchange_rates.insert(Exchange::EUR("2023-12-14".to_string()), dec!(4.3053)); + exchange_rates.insert(Exchange::USD("2015-11-13".to_string()), dec!(3.9388)); + exchange_rates.insert(Exchange::EUR("2025-09-29".to_string()), dec!(4.2688)); + exchange_rates.insert(Exchange::USD("2017-10-11".to_string()), dec!(3.6219)); + exchange_rates.insert(Exchange::USD("2016-08-24".to_string()), dec!(3.8174)); + exchange_rates.insert(Exchange::EUR("2024-07-09".to_string()), dec!(4.2633)); + exchange_rates.insert(Exchange::USD("2024-09-20".to_string()), dec!(3.8317)); + exchange_rates.insert(Exchange::USD("2013-11-14".to_string()), dec!(3.115)); + exchange_rates.insert(Exchange::USD("2023-02-24".to_string()), dec!(4.463)); + exchange_rates.insert(Exchange::USD("2017-05-30".to_string()), dec!(3.7471)); + exchange_rates.insert(Exchange::USD("2012-11-15".to_string()), dec!(3.2678)); + exchange_rates.insert(Exchange::USD("2015-06-18".to_string()), dec!(3.6556)); + exchange_rates.insert(Exchange::USD("2024-08-23".to_string()), dec!(3.8453)); + exchange_rates.insert(Exchange::USD("2022-04-13".to_string()), dec!(4.2872)); + exchange_rates.insert(Exchange::USD("2024-06-20".to_string()), dec!(4.0345)); + exchange_rates.insert(Exchange::USD("2022-04-12".to_string()), dec!(4.2926)); + exchange_rates.insert(Exchange::USD("2015-09-07".to_string()), dec!(3.7928)); + exchange_rates.insert(Exchange::USD("2013-12-11".to_string()), dec!(3.0386)); + exchange_rates.insert(Exchange::USD("2021-04-02".to_string()), dec!(3.8986)); + exchange_rates.insert(Exchange::USD("2013-08-12".to_string()), dec!(3.151)); + exchange_rates.insert(Exchange::USD("2013-10-23".to_string()), dec!(3.0385)); + exchange_rates.insert(Exchange::USD("2013-03-28".to_string()), dec!(3.2773)); + exchange_rates.insert(Exchange::EUR("2023-05-10".to_string()), dec!(4.5488)); + exchange_rates.insert(Exchange::EUR("2024-04-18".to_string()), dec!(4.3309)); + exchange_rates.insert(Exchange::USD("2020-01-15".to_string()), dec!(3.7992)); + exchange_rates.insert(Exchange::USD("2017-11-27".to_string()), dec!(3.5276)); + exchange_rates.insert(Exchange::EUR("2023-07-17".to_string()), dec!(4.452)); + exchange_rates.insert(Exchange::USD("2022-02-07".to_string()), dec!(3.9872)); + exchange_rates.insert(Exchange::USD("2014-08-14".to_string()), dec!(3.1285)); + exchange_rates.insert(Exchange::USD("2013-05-24".to_string()), dec!(3.24)); + exchange_rates.insert(Exchange::USD("2018-03-19".to_string()), dec!(3.4341)); + exchange_rates.insert(Exchange::USD("2025-06-11".to_string()), dec!(3.7306)); + exchange_rates.insert(Exchange::USD("2023-11-09".to_string()), dec!(4.1513)); + exchange_rates.insert(Exchange::USD("2015-05-19".to_string()), dec!(3.6152)); + exchange_rates.insert(Exchange::USD("2016-07-12".to_string()), dec!(3.9807)); + exchange_rates.insert(Exchange::USD("2014-09-16".to_string()), dec!(3.2419)); + exchange_rates.insert(Exchange::USD("2019-02-26".to_string()), dec!(3.8124)); + exchange_rates.insert(Exchange::USD("2023-09-08".to_string()), dec!(4.2958)); + exchange_rates.insert(Exchange::EUR("2025-12-29".to_string()), dec!(4.2274)); + exchange_rates.insert(Exchange::USD("2013-05-14".to_string()), dec!(3.1998)); + exchange_rates.insert(Exchange::USD("2013-01-02".to_string()), dec!(3.066)); + exchange_rates.insert(Exchange::USD("2014-07-07".to_string()), dec!(3.0497)); + exchange_rates.insert(Exchange::USD("2015-04-02".to_string()), dec!(3.7524)); + exchange_rates.insert(Exchange::EUR("2023-02-02".to_string()), dec!(4.7079)); + exchange_rates.insert(Exchange::USD("2015-12-30".to_string()), dec!(3.8801)); + exchange_rates.insert(Exchange::USD("2022-06-01".to_string()), dec!(4.2817)); + exchange_rates.insert(Exchange::EUR("2024-08-05".to_string()), dec!(4.3073)); + exchange_rates.insert(Exchange::USD("2019-02-28".to_string()), dec!(3.7853)); + exchange_rates.insert(Exchange::USD("2022-06-14".to_string()), dec!(4.4478)); + exchange_rates.insert(Exchange::USD("2016-09-22".to_string()), dec!(3.8128)); + exchange_rates.insert(Exchange::USD("2014-04-03".to_string()), dec!(3.033)); + exchange_rates.insert(Exchange::USD("2018-05-04".to_string()), dec!(3.5754)); + exchange_rates.insert(Exchange::USD("2024-04-05".to_string()), dec!(3.9571)); + exchange_rates.insert(Exchange::USD("2020-11-06".to_string()), dec!(3.8194)); + exchange_rates.insert(Exchange::USD("2019-01-14".to_string()), dec!(3.7458)); + exchange_rates.insert(Exchange::USD("2022-04-01".to_string()), dec!(4.1978)); + exchange_rates.insert(Exchange::USD("2020-11-18".to_string()), dec!(3.7621)); + exchange_rates.insert(Exchange::USD("2018-06-11".to_string()), dec!(3.6247)); + exchange_rates.insert(Exchange::USD("2022-07-29".to_string()), dec!(4.6365)); + exchange_rates.insert(Exchange::USD("2021-03-23".to_string()), dec!(3.8746)); + exchange_rates.insert(Exchange::USD("2022-04-07".to_string()), dec!(4.2727)); + exchange_rates.insert(Exchange::USD("2018-10-31".to_string()), dec!(3.8203)); + exchange_rates.insert(Exchange::EUR("2025-10-08".to_string()), dec!(4.2533)); + exchange_rates.insert(Exchange::EUR("2023-12-12".to_string()), dec!(4.3396)); + exchange_rates.insert(Exchange::USD("2020-12-29".to_string()), dec!(3.6778)); + exchange_rates.insert(Exchange::USD("2018-06-04".to_string()), dec!(3.6665)); + exchange_rates.insert(Exchange::USD("2025-12-16".to_string()), dec!(3.593)); + exchange_rates.insert(Exchange::USD("2020-03-26".to_string()), dec!(4.1988)); + exchange_rates.insert(Exchange::USD("2023-08-03".to_string()), dec!(4.081)); + exchange_rates.insert(Exchange::USD("2019-05-02".to_string()), dec!(3.8177)); + exchange_rates.insert(Exchange::EUR("2025-04-29".to_string()), dec!(4.2646)); + exchange_rates.insert(Exchange::USD("2013-08-19".to_string()), dec!(3.1873)); + exchange_rates.insert(Exchange::USD("2025-05-20".to_string()), dec!(3.7747)); + exchange_rates.insert(Exchange::USD("2024-09-30".to_string()), dec!(3.8193)); + exchange_rates.insert(Exchange::USD("2023-03-08".to_string()), dec!(4.4626)); + exchange_rates.insert(Exchange::USD("2022-01-05".to_string()), dec!(4.0396)); + exchange_rates.insert(Exchange::USD("2014-02-20".to_string()), dec!(3.049)); + exchange_rates.insert(Exchange::EUR("2024-08-02".to_string()), dec!(4.2903)); + exchange_rates.insert(Exchange::USD("2016-05-19".to_string()), dec!(3.9161)); + exchange_rates.insert(Exchange::EUR("2024-02-08".to_string()), dec!(4.3449)); + exchange_rates.insert(Exchange::USD("2018-04-10".to_string()), dec!(3.4068)); + exchange_rates.insert(Exchange::USD("2013-09-06".to_string()), dec!(3.2732)); + exchange_rates.insert(Exchange::USD("2012-02-03".to_string()), dec!(3.1848)); + exchange_rates.insert(Exchange::USD("2016-12-20".to_string()), dec!(4.2493)); + exchange_rates.insert(Exchange::USD("2016-02-23".to_string()), dec!(3.9671)); + exchange_rates.insert(Exchange::USD("2012-05-18".to_string()), dec!(3.4431)); + exchange_rates.insert(Exchange::USD("2017-02-13".to_string()), dec!(4.0496)); + exchange_rates.insert(Exchange::USD("2018-05-07".to_string()), dec!(3.5634)); + exchange_rates.insert(Exchange::USD("2012-01-04".to_string()), dec!(3.432)); + exchange_rates.insert(Exchange::USD("2017-09-13".to_string()), dec!(3.5627)); + exchange_rates.insert(Exchange::USD("2018-07-24".to_string()), dec!(3.702)); + exchange_rates.insert(Exchange::USD("2023-11-29".to_string()), dec!(3.9478)); + exchange_rates.insert(Exchange::EUR("2025-11-27".to_string()), dec!(4.227)); + exchange_rates.insert(Exchange::USD("2012-08-10".to_string()), dec!(3.3195)); + exchange_rates.insert(Exchange::USD("2020-03-02".to_string()), dec!(3.9023)); + exchange_rates.insert(Exchange::USD("2014-10-03".to_string()), dec!(3.3079)); + exchange_rates.insert(Exchange::EUR("2025-11-06".to_string()), dec!(4.2566)); + exchange_rates.insert(Exchange::USD("2016-03-21".to_string()), dec!(3.7838)); + exchange_rates.insert(Exchange::USD("2025-08-26".to_string()), dec!(3.6716)); + exchange_rates.insert(Exchange::USD("2023-09-13".to_string()), dec!(4.3225)); + exchange_rates.insert(Exchange::USD("2017-02-24".to_string()), dec!(4.0681)); + exchange_rates.insert(Exchange::USD("2015-02-26".to_string()), dec!(3.6519)); + exchange_rates.insert(Exchange::USD("2012-11-23".to_string()), dec!(3.1945)); + exchange_rates.insert(Exchange::EUR("2025-01-08".to_string()), dec!(4.2656)); + exchange_rates.insert(Exchange::USD("2024-05-29".to_string()), dec!(3.9244)); + exchange_rates.insert(Exchange::USD("2024-12-17".to_string()), dec!(4.0623)); + exchange_rates.insert(Exchange::USD("2022-09-30".to_string()), dec!(4.9533)); + exchange_rates.insert(Exchange::USD("2014-12-15".to_string()), dec!(3.3621)); + exchange_rates.insert(Exchange::EUR("2023-03-22".to_string()), dec!(4.6888)); + exchange_rates.insert(Exchange::USD("2017-02-09".to_string()), dec!(4.0332)); + exchange_rates.insert(Exchange::USD("2020-04-21".to_string()), dec!(4.1779)); + exchange_rates.insert(Exchange::USD("2016-07-29".to_string()), dec!(3.9364)); + exchange_rates.insert(Exchange::EUR("2024-07-26".to_string()), dec!(4.2773)); + exchange_rates.insert(Exchange::USD("2024-02-23".to_string()), dec!(4.005)); + exchange_rates.insert(Exchange::USD("2020-05-08".to_string()), dec!(4.2065)); + exchange_rates.insert(Exchange::USD("2024-12-30".to_string()), dec!(4.096)); + exchange_rates.insert(Exchange::EUR("2025-02-18".to_string()), dec!(4.1574)); + exchange_rates.insert(Exchange::USD("2017-07-12".to_string()), dec!(3.7034)); + exchange_rates.insert(Exchange::USD("2025-06-12".to_string()), dec!(3.6929)); + exchange_rates.insert(Exchange::USD("2024-03-21".to_string()), dec!(3.9431)); + exchange_rates.insert(Exchange::USD("2021-04-13".to_string()), dec!(3.8342)); + exchange_rates.insert(Exchange::USD("2016-11-10".to_string()), dec!(3.9856)); + exchange_rates.insert(Exchange::USD("2019-08-26".to_string()), dec!(3.9335)); + exchange_rates.insert(Exchange::USD("2013-03-01".to_string()), dec!(3.1769)); + exchange_rates.insert(Exchange::EUR("2023-08-23".to_string()), dec!(4.4834)); + exchange_rates.insert(Exchange::EUR("2024-08-19".to_string()), dec!(4.2693)); + exchange_rates.insert(Exchange::EUR("2025-12-11".to_string()), dec!(4.2284)); + exchange_rates.insert(Exchange::USD("2022-12-15".to_string()), dec!(4.41)); + exchange_rates.insert(Exchange::EUR("2024-11-20".to_string()), dec!(4.3404)); + exchange_rates.insert(Exchange::USD("2020-12-21".to_string()), dec!(3.7082)); + exchange_rates.insert(Exchange::USD("2016-06-03".to_string()), dec!(3.9384)); + exchange_rates.insert(Exchange::USD("2015-01-26".to_string()), dec!(3.7601)); + exchange_rates.insert(Exchange::EUR("2024-09-10".to_string()), dec!(4.2827)); + exchange_rates.insert(Exchange::USD("2023-02-13".to_string()), dec!(4.4856)); + exchange_rates.insert(Exchange::USD("2016-08-03".to_string()), dec!(3.8516)); + exchange_rates.insert(Exchange::USD("2023-03-23".to_string()), dec!(4.3011)); + exchange_rates.insert(Exchange::EUR("2025-12-30".to_string()), dec!(4.2293)); + exchange_rates.insert(Exchange::USD("2020-07-27".to_string()), dec!(3.7643)); + exchange_rates.insert(Exchange::USD("2021-05-19".to_string()), dec!(3.7087)); + exchange_rates.insert(Exchange::USD("2018-03-16".to_string()), dec!(3.4214)); + exchange_rates.insert(Exchange::EUR("2024-10-31".to_string()), dec!(4.353)); + exchange_rates.insert(Exchange::EUR("2025-06-04".to_string()), dec!(4.2778)); + exchange_rates.insert(Exchange::EUR("2024-09-25".to_string()), dec!(4.2634)); + exchange_rates.insert(Exchange::EUR("2023-04-27".to_string()), dec!(4.5915)); + exchange_rates.insert(Exchange::USD("2022-03-04".to_string()), dec!(4.391)); + exchange_rates.insert(Exchange::USD("2025-07-01".to_string()), dec!(3.593)); + exchange_rates.insert(Exchange::USD("2023-04-26".to_string()), dec!(4.1557)); + exchange_rates.insert(Exchange::USD("2025-12-15".to_string()), dec!(3.5928)); + exchange_rates.insert(Exchange::USD("2018-12-18".to_string()), dec!(3.7668)); + exchange_rates.insert(Exchange::USD("2025-10-21".to_string()), dec!(3.6479)); + exchange_rates.insert(Exchange::USD("2020-09-16".to_string()), dec!(3.7526)); + exchange_rates.insert(Exchange::EUR("2023-09-26".to_string()), dec!(4.6077)); + exchange_rates.insert(Exchange::USD("2022-09-08".to_string()), dec!(4.7268)); + exchange_rates.insert(Exchange::USD("2022-03-16".to_string()), dec!(4.2828)); + exchange_rates.insert(Exchange::USD("2016-07-11".to_string()), dec!(4.006)); + exchange_rates.insert(Exchange::USD("2017-09-19".to_string()), dec!(3.5821)); + exchange_rates.insert(Exchange::USD("2022-12-01".to_string()), dec!(4.4911)); + exchange_rates.insert(Exchange::EUR("2023-12-29".to_string()), dec!(4.348)); + exchange_rates.insert(Exchange::USD("2018-09-10".to_string()), dec!(3.7283)); + exchange_rates.insert(Exchange::EUR("2024-06-17".to_string()), dec!(4.3608)); + exchange_rates.insert(Exchange::USD("2018-05-11".to_string()), dec!(3.5708)); + exchange_rates.insert(Exchange::USD("2015-01-12".to_string()), dec!(3.6218)); + exchange_rates.insert(Exchange::USD("2013-03-25".to_string()), dec!(3.195)); + exchange_rates.insert(Exchange::USD("2014-10-27".to_string()), dec!(3.3288)); + exchange_rates.insert(Exchange::EUR("2023-06-26".to_string()), dec!(4.4297)); + exchange_rates.insert(Exchange::USD("2018-02-06".to_string()), dec!(3.3498)); + exchange_rates.insert(Exchange::USD("2018-08-13".to_string()), dec!(3.7862)); + exchange_rates.insert(Exchange::USD("2016-08-18".to_string()), dec!(3.7826)); + exchange_rates.insert(Exchange::USD("2015-01-20".to_string()), dec!(3.7346)); + exchange_rates.insert(Exchange::EUR("2024-07-08".to_string()), dec!(4.278)); + exchange_rates.insert(Exchange::USD("2023-01-30".to_string()), dec!(4.3258)); + exchange_rates.insert(Exchange::EUR("2024-05-21".to_string()), dec!(4.2572)); + exchange_rates.insert(Exchange::USD("2013-12-12".to_string()), dec!(3.0415)); + exchange_rates.insert(Exchange::USD("2025-02-18".to_string()), dec!(3.9729)); + exchange_rates.insert(Exchange::USD("2020-09-03".to_string()), dec!(3.7337)); + exchange_rates.insert(Exchange::USD("2019-11-08".to_string()), dec!(3.8625)); + exchange_rates.insert(Exchange::USD("2015-10-29".to_string()), dec!(3.8974)); + exchange_rates.insert(Exchange::USD("2017-11-03".to_string()), dec!(3.6408)); + exchange_rates.insert(Exchange::USD("2012-02-09".to_string()), dec!(3.1487)); + exchange_rates.insert(Exchange::USD("2017-01-02".to_string()), dec!(4.2106)); + exchange_rates.insert(Exchange::USD("2021-10-19".to_string()), dec!(3.9212)); + exchange_rates.insert(Exchange::USD("2019-09-06".to_string()), dec!(3.9315)); + exchange_rates.insert(Exchange::USD("2019-07-15".to_string()), dec!(3.7856)); + exchange_rates.insert(Exchange::USD("2017-03-31".to_string()), dec!(3.9455)); + exchange_rates.insert(Exchange::USD("2016-11-21".to_string()), dec!(4.1748)); + exchange_rates.insert(Exchange::USD("2015-11-30".to_string()), dec!(4.0304)); + exchange_rates.insert(Exchange::USD("2024-11-07".to_string()), dec!(4.0414)); + exchange_rates.insert(Exchange::USD("2022-05-09".to_string()), dec!(4.4784)); + exchange_rates.insert(Exchange::USD("2012-10-30".to_string()), dec!(3.2036)); + exchange_rates.insert(Exchange::USD("2019-11-22".to_string()), dec!(3.8853)); + exchange_rates.insert(Exchange::USD("2014-02-24".to_string()), dec!(3.0255)); + exchange_rates.insert(Exchange::USD("2018-07-25".to_string()), dec!(3.6793)); + exchange_rates.insert(Exchange::EUR("2025-07-17".to_string()), dec!(4.2559)); + exchange_rates.insert(Exchange::USD("2017-05-19".to_string()), dec!(3.7735)); + exchange_rates.insert(Exchange::USD("2015-08-07".to_string()), dec!(3.8326)); + exchange_rates.insert(Exchange::USD("2025-04-16".to_string()), dec!(3.7851)); + exchange_rates.insert(Exchange::USD("2021-09-13".to_string()), dec!(3.8495)); + exchange_rates.insert(Exchange::USD("2016-05-09".to_string()), dec!(3.873)); + exchange_rates.insert(Exchange::USD("2022-02-02".to_string()), dec!(4.0283)); + exchange_rates.insert(Exchange::USD("2022-10-26".to_string()), dec!(4.7538)); + exchange_rates.insert(Exchange::USD("2020-04-01".to_string()), dec!(4.1701)); + exchange_rates.insert(Exchange::USD("2020-09-08".to_string()), dec!(3.7652)); + exchange_rates.insert(Exchange::EUR("2023-03-08".to_string()), dec!(4.7018)); + exchange_rates.insert(Exchange::USD("2019-06-24".to_string()), dec!(3.736)); + exchange_rates.insert(Exchange::USD("2021-01-21".to_string()), dec!(3.7312)); + exchange_rates.insert(Exchange::EUR("2023-05-02".to_string()), dec!(4.5892)); + exchange_rates.insert(Exchange::USD("2018-01-23".to_string()), dec!(3.4084)); + exchange_rates.insert(Exchange::USD("2019-11-07".to_string()), dec!(3.8502)); + exchange_rates.insert(Exchange::EUR("2025-02-26".to_string()), dec!(4.1394)); + exchange_rates.insert(Exchange::USD("2019-08-05".to_string()), dec!(3.8739)); + exchange_rates.insert(Exchange::USD("2025-03-12".to_string()), dec!(3.8496)); + exchange_rates.insert(Exchange::USD("2019-05-07".to_string()), dec!(3.8278)); + exchange_rates.insert(Exchange::USD("2017-05-22".to_string()), dec!(3.7526)); + exchange_rates.insert(Exchange::USD("2020-03-04".to_string()), dec!(3.8536)); + exchange_rates.insert(Exchange::USD("2017-04-13".to_string()), dec!(3.9886)); + exchange_rates.insert(Exchange::USD("2017-01-13".to_string()), dec!(4.1084)); + exchange_rates.insert(Exchange::USD("2019-07-24".to_string()), dec!(3.8229)); + exchange_rates.insert(Exchange::USD("2017-10-17".to_string()), dec!(3.5964)); + exchange_rates.insert(Exchange::USD("2015-12-16".to_string()), dec!(3.9644)); + exchange_rates.insert(Exchange::EUR("2025-11-04".to_string()), dec!(4.2575)); + exchange_rates.insert(Exchange::USD("2024-08-16".to_string()), dec!(3.8914)); + exchange_rates.insert(Exchange::USD("2023-01-26".to_string()), dec!(4.3354)); + exchange_rates.insert(Exchange::USD("2019-01-07".to_string()), dec!(3.7575)); + exchange_rates.insert(Exchange::EUR("2023-09-05".to_string()), dec!(4.4764)); + exchange_rates.insert(Exchange::USD("2022-11-08".to_string()), dec!(4.6893)); + exchange_rates.insert(Exchange::EUR("2025-04-30".to_string()), dec!(4.2778)); + exchange_rates.insert(Exchange::USD("2017-10-03".to_string()), dec!(3.6737)); + exchange_rates.insert(Exchange::USD("2017-12-12".to_string()), dec!(3.5708)); + exchange_rates.insert(Exchange::USD("2020-08-11".to_string()), dec!(3.739)); + exchange_rates.insert(Exchange::USD("2023-03-16".to_string()), dec!(4.4248)); + exchange_rates.insert(Exchange::EUR("2023-06-12".to_string()), dec!(4.4366)); + exchange_rates.insert(Exchange::USD("2020-09-10".to_string()), dec!(3.761)); + exchange_rates.insert(Exchange::USD("2017-04-06".to_string()), dec!(3.9792)); + exchange_rates.insert(Exchange::USD("2013-12-03".to_string()), dec!(3.0973)); + exchange_rates.insert(Exchange::EUR("2025-06-18".to_string()), dec!(4.2717)); + exchange_rates.insert(Exchange::EUR("2023-01-03".to_string()), dec!(4.68)); + exchange_rates.insert(Exchange::USD("2020-08-03".to_string()), dec!(3.7499)); + exchange_rates.insert(Exchange::USD("2015-09-03".to_string()), dec!(3.7645)); + exchange_rates.insert(Exchange::USD("2023-07-27".to_string()), dec!(3.9702)); + exchange_rates.insert(Exchange::USD("2017-05-17".to_string()), dec!(3.7808)); + exchange_rates.insert(Exchange::USD("2015-06-30".to_string()), dec!(3.7645)); + exchange_rates.insert(Exchange::USD("2013-09-25".to_string()), dec!(3.1234)); + exchange_rates.insert(Exchange::USD("2024-10-25".to_string()), dec!(4.0219)); + exchange_rates.insert(Exchange::USD("2022-09-12".to_string()), dec!(4.6225)); + exchange_rates.insert(Exchange::USD("2017-08-30".to_string()), dec!(3.5678)); + exchange_rates.insert(Exchange::USD("2018-04-17".to_string()), dec!(3.3572)); + exchange_rates.insert(Exchange::USD("2021-02-02".to_string()), dec!(3.7311)); + exchange_rates.insert(Exchange::USD("2017-12-27".to_string()), dec!(3.5253)); + exchange_rates.insert(Exchange::USD("2012-03-15".to_string()), dec!(3.1723)); + exchange_rates.insert(Exchange::USD("2025-05-05".to_string()), dec!(3.7752)); + exchange_rates.insert(Exchange::USD("2018-05-30".to_string()), dec!(3.72)); + exchange_rates.insert(Exchange::USD("2019-01-17".to_string()), dec!(3.7615)); + exchange_rates.insert(Exchange::USD("2023-04-07".to_string()), dec!(4.2932)); + exchange_rates.insert(Exchange::USD("2025-04-04".to_string()), dec!(3.856)); + exchange_rates.insert(Exchange::USD("2017-05-15".to_string()), dec!(3.8463)); + exchange_rates.insert(Exchange::USD("2019-10-28".to_string()), dec!(3.8529)); + exchange_rates.insert(Exchange::USD("2017-08-03".to_string()), dec!(3.5918)); + exchange_rates.insert(Exchange::EUR("2023-06-20".to_string()), dec!(4.4386)); + exchange_rates.insert(Exchange::USD("2013-10-28".to_string()), dec!(3.0271)); + exchange_rates.insert(Exchange::EUR("2024-04-05".to_string()), dec!(4.2883)); + exchange_rates.insert(Exchange::USD("2018-06-01".to_string()), dec!(3.6934)); + exchange_rates.insert(Exchange::USD("2016-01-05".to_string()), dec!(4.0073)); + exchange_rates.insert(Exchange::EUR("2024-10-04".to_string()), dec!(4.313)); + exchange_rates.insert(Exchange::USD("2016-07-19".to_string()), dec!(3.9582)); + exchange_rates.insert(Exchange::USD("2017-11-16".to_string()), dec!(3.5958)); + exchange_rates.insert(Exchange::USD("2016-12-22".to_string()), dec!(4.2222)); + exchange_rates.insert(Exchange::EUR("2025-09-11".to_string()), dec!(4.2626)); + exchange_rates.insert(Exchange::USD("2014-02-17".to_string()), dec!(3.025)); + exchange_rates.insert(Exchange::USD("2025-11-17".to_string()), dec!(3.64)); + exchange_rates.insert(Exchange::USD("2015-05-27".to_string()), dec!(3.7906)); + exchange_rates.insert(Exchange::USD("2015-09-28".to_string()), dec!(3.7861)); + exchange_rates.insert(Exchange::USD("2013-06-21".to_string()), dec!(3.2743)); + exchange_rates.insert(Exchange::USD("2012-10-22".to_string()), dec!(3.147)); + exchange_rates.insert(Exchange::USD("2017-05-10".to_string()), dec!(3.8777)); + exchange_rates.insert(Exchange::USD("2016-06-08".to_string()), dec!(3.815)); + exchange_rates.insert(Exchange::USD("2012-11-30".to_string()), dec!(3.1585)); + exchange_rates.insert(Exchange::USD("2023-06-21".to_string()), dec!(4.0648)); + exchange_rates.insert(Exchange::USD("2025-01-24".to_string()), dec!(4.0124)); + exchange_rates.insert(Exchange::USD("2025-07-25".to_string()), dec!(3.6228)); + exchange_rates.insert(Exchange::USD("2023-01-20".to_string()), dec!(4.352)); + exchange_rates.insert(Exchange::USD("2021-10-22".to_string()), dec!(3.9576)); + exchange_rates.insert(Exchange::USD("2022-10-12".to_string()), dec!(5.0014)); + exchange_rates.insert(Exchange::USD("2025-03-31".to_string()), dec!(3.8643)); + exchange_rates.insert(Exchange::EUR("2024-10-21".to_string()), dec!(4.3178)); + exchange_rates.insert(Exchange::USD("2016-09-07".to_string()), dec!(3.8515)); + exchange_rates.insert(Exchange::USD("2021-12-31".to_string()), dec!(4.06)); + exchange_rates.insert(Exchange::USD("2021-11-09".to_string()), dec!(3.9622)); + exchange_rates.insert(Exchange::USD("2020-10-01".to_string()), dec!(3.8513)); + exchange_rates.insert(Exchange::USD("2014-12-11".to_string()), dec!(3.3611)); + exchange_rates.insert(Exchange::USD("2012-02-16".to_string()), dec!(3.2502)); + exchange_rates.insert(Exchange::USD("2013-07-08".to_string()), dec!(3.3576)); + exchange_rates.insert(Exchange::USD("2012-12-13".to_string()), dec!(3.1333)); + exchange_rates.insert(Exchange::USD("2012-06-18".to_string()), dec!(3.3741)); + exchange_rates.insert(Exchange::USD("2013-08-02".to_string()), dec!(3.2201)); + exchange_rates.insert(Exchange::USD("2012-04-18".to_string()), dec!(3.1902)); + exchange_rates.insert(Exchange::EUR("2023-09-19".to_string()), dec!(4.6458)); + exchange_rates.insert(Exchange::USD("2014-03-24".to_string()), dec!(3.0483)); + exchange_rates.insert(Exchange::USD("2024-05-28".to_string()), dec!(3.9183)); + exchange_rates.insert(Exchange::USD("2014-05-20".to_string()), dec!(3.062)); + exchange_rates.insert(Exchange::EUR("2023-11-22".to_string()), dec!(4.3804)); + exchange_rates.insert(Exchange::USD("2022-04-19".to_string()), dec!(4.2887)); + exchange_rates.insert(Exchange::EUR("2025-03-21".to_string()), dec!(4.1979)); + exchange_rates.insert(Exchange::USD("2023-08-18".to_string()), dec!(4.1285)); + exchange_rates.insert(Exchange::USD("2025-02-24".to_string()), dec!(3.9734)); + exchange_rates.insert(Exchange::USD("2014-03-10".to_string()), dec!(3.0266)); + exchange_rates.insert(Exchange::USD("2020-11-19".to_string()), dec!(3.7872)); + exchange_rates.insert(Exchange::USD("2012-11-16".to_string()), dec!(3.2682)); + exchange_rates.insert(Exchange::EUR("2023-08-07".to_string()), dec!(4.4279)); + exchange_rates.insert(Exchange::EUR("2025-12-01".to_string()), dec!(4.2286)); + exchange_rates.insert(Exchange::USD("2021-04-29".to_string()), dec!(3.7786)); + exchange_rates.insert(Exchange::USD("2024-01-19".to_string()), dec!(4.0289)); + exchange_rates.insert(Exchange::EUR("2024-03-28".to_string()), dec!(4.3191)); + exchange_rates.insert(Exchange::USD("2023-01-04".to_string()), dec!(4.3998)); + exchange_rates.insert(Exchange::USD("2017-02-15".to_string()), dec!(4.0752)); + exchange_rates.insert(Exchange::USD("2017-01-26".to_string()), dec!(4.059)); + exchange_rates.insert(Exchange::EUR("2024-09-23".to_string()), dec!(4.2785)); + exchange_rates.insert(Exchange::USD("2012-07-05".to_string()), dec!(3.3743)); + exchange_rates.insert(Exchange::USD("2018-07-17".to_string()), dec!(3.6619)); + exchange_rates.insert(Exchange::EUR("2025-09-15".to_string()), dec!(4.2476)); + exchange_rates.insert(Exchange::USD("2023-10-26".to_string()), dec!(4.2395)); + exchange_rates.insert(Exchange::USD("2014-07-09".to_string()), dec!(3.0322)); + exchange_rates.insert(Exchange::EUR("2025-05-16".to_string()), dec!(4.2392)); + exchange_rates.insert(Exchange::USD("2018-11-16".to_string()), dec!(3.7876)); + exchange_rates.insert(Exchange::USD("2018-01-04".to_string()), dec!(3.4472)); + exchange_rates.insert(Exchange::USD("2015-05-14".to_string()), dec!(3.5921)); + exchange_rates.insert(Exchange::EUR("2023-05-04".to_string()), dec!(4.5868)); + exchange_rates.insert(Exchange::USD("2023-09-20".to_string()), dec!(4.3501)); + exchange_rates.insert(Exchange::USD("2019-04-17".to_string()), dec!(3.7778)); + exchange_rates.insert(Exchange::USD("2013-06-13".to_string()), dec!(3.2)); + exchange_rates.insert(Exchange::USD("2014-12-02".to_string()), dec!(3.3466)); + exchange_rates.insert(Exchange::EUR("2024-12-27".to_string()), dec!(4.2747)); + exchange_rates.insert(Exchange::EUR("2023-07-04".to_string()), dec!(4.4273)); + exchange_rates.insert(Exchange::USD("2014-12-31".to_string()), dec!(3.5072)); + exchange_rates.insert(Exchange::USD("2015-02-06".to_string()), dec!(3.6395)); + exchange_rates.insert(Exchange::USD("2016-11-29".to_string()), dec!(4.1827)); + exchange_rates.insert(Exchange::USD("2014-01-30".to_string()), dec!(3.1166)); + exchange_rates.insert(Exchange::USD("2017-02-07".to_string()), dec!(4.028)); + exchange_rates.insert(Exchange::USD("2013-10-04".to_string()), dec!(3.0902)); + exchange_rates.insert(Exchange::USD("2018-07-31".to_string()), dec!(3.6481)); + exchange_rates.insert(Exchange::USD("2014-02-28".to_string()), dec!(3.0254)); + exchange_rates.insert(Exchange::USD("2024-08-28".to_string()), dec!(3.8539)); + exchange_rates.insert(Exchange::USD("2022-11-14".to_string()), dec!(4.5383)); + exchange_rates.insert(Exchange::EUR("2025-05-30".to_string()), dec!(4.2507)); + exchange_rates.insert(Exchange::USD("2025-03-07".to_string()), dec!(3.8448)); + exchange_rates.insert(Exchange::USD("2025-12-31".to_string()), dec!(3.6016)); + exchange_rates.insert(Exchange::USD("2024-01-29".to_string()), dec!(4.0326)); + exchange_rates.insert(Exchange::USD("2024-06-11".to_string()), dec!(4.0443)); + exchange_rates.insert(Exchange::USD("2020-07-30".to_string()), dec!(3.7549)); + exchange_rates.insert(Exchange::EUR("2025-10-01".to_string()), dec!(4.2586)); + exchange_rates.insert(Exchange::USD("2014-02-19".to_string()), dec!(3.0286)); + exchange_rates.insert(Exchange::USD("2019-06-27".to_string()), dec!(3.7426)); + exchange_rates.insert(Exchange::USD("2022-01-03".to_string()), dec!(4.0424)); + exchange_rates.insert(Exchange::USD("2023-10-16".to_string()), dec!(4.2505)); + exchange_rates.insert(Exchange::USD("2014-05-22".to_string()), dec!(3.0525)); + exchange_rates.insert(Exchange::USD("2025-04-07".to_string()), dec!(3.9097)); + exchange_rates.insert(Exchange::USD("2023-08-30".to_string()), dec!(4.1167)); + exchange_rates.insert(Exchange::USD("2023-11-27".to_string()), dec!(3.9769)); + exchange_rates.insert(Exchange::USD("2012-08-22".to_string()), dec!(3.2639)); + exchange_rates.insert(Exchange::USD("2023-01-03".to_string()), dec!(4.4373)); + exchange_rates.insert(Exchange::USD("2018-04-11".to_string()), dec!(3.3859)); + exchange_rates.insert(Exchange::USD("2022-08-09".to_string()), dec!(4.5919)); + exchange_rates.insert(Exchange::USD("2020-09-29".to_string()), dec!(3.9228)); + exchange_rates.insert(Exchange::USD("2014-06-11".to_string()), dec!(3.0431)); + exchange_rates.insert(Exchange::USD("2018-03-05".to_string()), dec!(3.3995)); + exchange_rates.insert(Exchange::USD("2015-09-08".to_string()), dec!(3.7878)); + exchange_rates.insert(Exchange::USD("2022-06-17".to_string()), dec!(4.463)); + exchange_rates.insert(Exchange::USD("2022-12-22".to_string()), dec!(4.3726)); + exchange_rates.insert(Exchange::USD("2019-09-04".to_string()), dec!(3.9414)); + exchange_rates.insert(Exchange::USD("2016-05-27".to_string()), dec!(3.9393)); + exchange_rates.insert(Exchange::EUR("2023-08-25".to_string()), dec!(4.4674)); + exchange_rates.insert(Exchange::USD("2019-07-02".to_string()), dec!(3.7593)); + exchange_rates.insert(Exchange::USD("2017-03-27".to_string()), dec!(3.9259)); + exchange_rates.insert(Exchange::USD("2024-03-28".to_string()), dec!(4.0081)); + exchange_rates.insert(Exchange::USD("2021-01-07".to_string()), dec!(3.6656)); + exchange_rates.insert(Exchange::EUR("2023-08-18".to_string()), dec!(4.4869)); + exchange_rates.insert(Exchange::USD("2024-03-06".to_string()), dec!(3.963)); + exchange_rates.insert(Exchange::USD("2025-04-14".to_string()), dec!(3.7564)); + exchange_rates.insert(Exchange::USD("2021-10-29".to_string()), dec!(3.9664)); + exchange_rates.insert(Exchange::USD("2021-10-13".to_string()), dec!(3.9638)); + exchange_rates.insert(Exchange::USD("2012-04-26".to_string()), dec!(3.1599)); + exchange_rates.insert(Exchange::USD("2012-10-16".to_string()), dec!(3.1438)); + exchange_rates.insert(Exchange::USD("2023-08-04".to_string()), dec!(4.062)); + exchange_rates.insert(Exchange::USD("2018-09-07".to_string()), dec!(3.6995)); + exchange_rates.insert(Exchange::USD("2013-09-10".to_string()), dec!(3.2181)); + exchange_rates.insert(Exchange::EUR("2025-12-05".to_string()), dec!(4.2321)); + exchange_rates.insert(Exchange::USD("2018-07-09".to_string()), dec!(3.685)); + exchange_rates.insert(Exchange::USD("2022-08-03".to_string()), dec!(4.6164)); + exchange_rates.insert(Exchange::USD("2015-01-09".to_string()), dec!(3.6252)); + exchange_rates.insert(Exchange::USD("2024-08-19".to_string()), dec!(3.8682)); + exchange_rates.insert(Exchange::USD("2015-08-24".to_string()), dec!(3.6971)); + exchange_rates.insert(Exchange::USD("2021-12-07".to_string()), dec!(4.0788)); + exchange_rates.insert(Exchange::EUR("2023-06-23".to_string()), dec!(4.4367)); + exchange_rates.insert(Exchange::EUR("2024-02-22".to_string()), dec!(4.3199)); + exchange_rates.insert(Exchange::EUR("2023-02-28".to_string()), dec!(4.717)); + exchange_rates.insert(Exchange::USD("2016-03-17".to_string()), dec!(3.8037)); + exchange_rates.insert(Exchange::USD("2023-11-30".to_string()), dec!(3.981)); + exchange_rates.insert(Exchange::EUR("2024-10-24".to_string()), dec!(4.3396)); + exchange_rates.insert(Exchange::USD("2016-06-15".to_string()), dec!(3.9351)); + exchange_rates.insert(Exchange::USD("2025-05-29".to_string()), dec!(3.7588)); + exchange_rates.insert(Exchange::USD("2012-01-30".to_string()), dec!(3.2433)); + exchange_rates.insert(Exchange::EUR("2024-07-29".to_string()), dec!(4.2847)); + exchange_rates.insert(Exchange::USD("2025-01-09".to_string()), dec!(4.1523)); + exchange_rates.insert(Exchange::USD("2020-04-29".to_string()), dec!(4.1807)); + exchange_rates.insert(Exchange::USD("2019-04-26".to_string()), dec!(3.8508)); + exchange_rates.insert(Exchange::USD("2013-08-27".to_string()), dec!(3.1849)); + exchange_rates.insert(Exchange::USD("2022-03-23".to_string()), dec!(4.2772)); + exchange_rates.insert(Exchange::USD("2014-12-23".to_string()), dec!(3.4937)); + exchange_rates.insert(Exchange::EUR("2024-10-11".to_string()), dec!(4.2926)); + exchange_rates.insert(Exchange::USD("2015-03-17".to_string()), dec!(3.9034)); + exchange_rates.insert(Exchange::EUR("2023-10-02".to_string()), dec!(4.6091)); + exchange_rates.insert(Exchange::USD("2024-06-25".to_string()), dec!(3.9975)); + exchange_rates.insert(Exchange::USD("2019-05-17".to_string()), dec!(3.8545)); + exchange_rates.insert(Exchange::USD("2021-02-26".to_string()), dec!(3.7247)); + exchange_rates.insert(Exchange::USD("2023-06-22".to_string()), dec!(4.033)); + exchange_rates.insert(Exchange::EUR("2024-06-05".to_string()), dec!(4.3081)); + exchange_rates.insert(Exchange::USD("2017-09-08".to_string()), dec!(3.5239)); + exchange_rates.insert(Exchange::USD("2024-12-09".to_string()), dec!(4.0298)); + exchange_rates.insert(Exchange::USD("2018-06-20".to_string()), dec!(3.7352)); + exchange_rates.insert(Exchange::USD("2017-09-27".to_string()), dec!(3.665)); + exchange_rates.insert(Exchange::USD("2021-10-05".to_string()), dec!(3.9688)); + exchange_rates.insert(Exchange::USD("2019-01-03".to_string()), dec!(3.7827)); + exchange_rates.insert(Exchange::USD("2017-07-21".to_string()), dec!(3.632)); + exchange_rates.insert(Exchange::USD("2025-06-18".to_string()), dec!(3.7137)); + exchange_rates.insert(Exchange::USD("2017-08-04".to_string()), dec!(3.5702)); + exchange_rates.insert(Exchange::USD("2014-03-25".to_string()), dec!(3.0342)); + exchange_rates.insert(Exchange::USD("2014-10-08".to_string()), dec!(3.305)); + exchange_rates.insert(Exchange::USD("2013-03-14".to_string()), dec!(3.2)); + exchange_rates.insert(Exchange::USD("2013-04-26".to_string()), dec!(3.1943)); + exchange_rates.insert(Exchange::USD("2013-09-24".to_string()), dec!(3.1338)); + exchange_rates.insert(Exchange::USD("2012-08-07".to_string()), dec!(3.2606)); + exchange_rates.insert(Exchange::USD("2020-02-14".to_string()), dec!(3.9098)); + exchange_rates.insert(Exchange::USD("2025-05-08".to_string()), dec!(3.784)); + exchange_rates.insert(Exchange::USD("2015-06-03".to_string()), dec!(3.7108)); + exchange_rates.insert(Exchange::EUR("2024-09-06".to_string()), dec!(4.279)); + exchange_rates.insert(Exchange::USD("2014-10-06".to_string()), dec!(3.3343)); + exchange_rates.insert(Exchange::USD("2012-12-20".to_string()), dec!(3.0769)); + exchange_rates.insert(Exchange::USD("2020-12-02".to_string()), dec!(3.7038)); + exchange_rates.insert(Exchange::USD("2017-03-24".to_string()), dec!(3.9481)); + exchange_rates.insert(Exchange::USD("2016-11-25".to_string()), dec!(4.1628)); + exchange_rates.insert(Exchange::USD("2025-04-30".to_string()), dec!(3.7617)); + exchange_rates.insert(Exchange::USD("2021-07-01".to_string()), dec!(3.8149)); + exchange_rates.insert(Exchange::USD("2012-06-19".to_string()), dec!(3.3916)); + exchange_rates.insert(Exchange::USD("2023-08-31".to_string()), dec!(4.1074)); + exchange_rates.insert(Exchange::USD("2017-09-26".to_string()), dec!(3.6234)); + exchange_rates.insert(Exchange::USD("2014-06-25".to_string()), dec!(3.0451)); + exchange_rates.insert(Exchange::USD("2012-10-15".to_string()), dec!(3.1565)); + exchange_rates.insert(Exchange::EUR("2025-04-15".to_string()), dec!(4.2767)); + exchange_rates.insert(Exchange::USD("2017-06-13".to_string()), dec!(3.7379)); + exchange_rates.insert(Exchange::USD("2020-02-03".to_string()), dec!(3.8864)); + exchange_rates.insert(Exchange::USD("2012-07-12".to_string()), dec!(3.4383)); + exchange_rates.insert(Exchange::USD("2012-12-05".to_string()), dec!(3.1516)); + exchange_rates.insert(Exchange::EUR("2025-08-06".to_string()), dec!(4.282)); + exchange_rates.insert(Exchange::USD("2016-05-24".to_string()), dec!(3.9789)); + exchange_rates.insert(Exchange::USD("2020-11-03".to_string()), dec!(3.9069)); + exchange_rates.insert(Exchange::USD("2014-07-14".to_string()), dec!(3.0368)); + exchange_rates.insert(Exchange::EUR("2025-11-14".to_string()), dec!(4.2274)); + exchange_rates.insert(Exchange::USD("2024-09-26".to_string()), dec!(3.8294)); + exchange_rates.insert(Exchange::USD("2022-09-20".to_string()), dec!(4.7118)); + exchange_rates.insert(Exchange::USD("2014-10-01".to_string()), dec!(3.3172)); + exchange_rates.insert(Exchange::EUR("2023-12-18".to_string()), dec!(4.3269)); + exchange_rates.insert(Exchange::EUR("2023-12-21".to_string()), dec!(4.3387)); + exchange_rates.insert(Exchange::USD("2016-03-03".to_string()), dec!(3.9805)); + exchange_rates.insert(Exchange::USD("2015-06-08".to_string()), dec!(3.7381)); + exchange_rates.insert(Exchange::USD("2019-10-09".to_string()), dec!(3.9382)); + exchange_rates.insert(Exchange::USD("2020-06-30".to_string()), dec!(3.9806)); + exchange_rates.insert(Exchange::EUR("2025-03-26".to_string()), dec!(4.1686)); + exchange_rates.insert(Exchange::USD("2014-11-10".to_string()), dec!(3.3765)); + exchange_rates.insert(Exchange::USD("2024-04-18".to_string()), dec!(4.0559)); + exchange_rates.insert(Exchange::USD("2018-01-31".to_string()), dec!(3.3318)); + exchange_rates.insert(Exchange::USD("2023-04-05".to_string()), dec!(4.2739)); + exchange_rates.insert(Exchange::USD("2015-04-20".to_string()), dec!(3.7302)); + exchange_rates.insert(Exchange::USD("2023-05-02".to_string()), dec!(4.1823)); + exchange_rates.insert(Exchange::USD("2013-01-22".to_string()), dec!(3.1341)); + exchange_rates.insert(Exchange::USD("2020-04-14".to_string()), dec!(4.1666)); + exchange_rates.insert(Exchange::USD("2013-10-21".to_string()), dec!(3.062)); + exchange_rates.insert(Exchange::EUR("2023-07-20".to_string()), dec!(4.4511)); + exchange_rates.insert(Exchange::USD("2023-05-18".to_string()), dec!(4.1929)); + exchange_rates.insert(Exchange::USD("2023-08-29".to_string()), dec!(4.1341)); + exchange_rates.insert(Exchange::USD("2018-03-30".to_string()), dec!(3.4139)); + exchange_rates.insert(Exchange::USD("2012-09-18".to_string()), dec!(3.1509)); + exchange_rates.insert(Exchange::USD("2014-01-07".to_string()), dec!(3.0688)); + exchange_rates.insert(Exchange::USD("2022-05-31".to_string()), dec!(4.2651)); + exchange_rates.insert(Exchange::USD("2020-02-10".to_string()), dec!(3.8996)); + exchange_rates.insert(Exchange::USD("2022-12-19".to_string()), dec!(4.4153)); + exchange_rates.insert(Exchange::EUR("2023-12-08".to_string()), dec!(4.3303)); + exchange_rates.insert(Exchange::USD("2022-05-30".to_string()), dec!(4.2617)); + exchange_rates.insert(Exchange::USD("2021-04-14".to_string()), dec!(3.8065)); + exchange_rates.insert(Exchange::USD("2018-01-25".to_string()), dec!(3.3376)); + exchange_rates.insert(Exchange::USD("2012-01-10".to_string()), dec!(3.5083)); + exchange_rates.insert(Exchange::USD("2018-02-27".to_string()), dec!(3.3816)); + exchange_rates.insert(Exchange::USD("2016-08-31".to_string()), dec!(3.9082)); + exchange_rates.insert(Exchange::USD("2015-08-27".to_string()), dec!(3.745)); + exchange_rates.insert(Exchange::USD("2025-08-19".to_string()), dec!(3.6332)); + exchange_rates.insert(Exchange::USD("2022-07-28".to_string()), dec!(4.6952)); + exchange_rates.insert(Exchange::USD("2019-09-02".to_string()), dec!(3.9819)); + exchange_rates.insert(Exchange::USD("2018-05-25".to_string()), dec!(3.6686)); + exchange_rates.insert(Exchange::USD("2024-04-08".to_string()), dec!(3.9546)); + exchange_rates.insert(Exchange::USD("2023-10-31".to_string()), dec!(4.1684)); + exchange_rates.insert(Exchange::USD("2019-05-13".to_string()), dec!(3.8321)); + exchange_rates.insert(Exchange::USD("2017-11-30".to_string()), dec!(3.5543)); + exchange_rates.insert(Exchange::USD("2018-04-27".to_string()), dec!(3.5003)); + exchange_rates.insert(Exchange::USD("2014-06-16".to_string()), dec!(3.0654)); + exchange_rates.insert(Exchange::USD("2016-08-02".to_string()), dec!(3.882)); + exchange_rates.insert(Exchange::USD("2012-07-20".to_string()), dec!(3.3961)); + exchange_rates.insert(Exchange::USD("2020-03-18".to_string()), dec!(4.0749)); + exchange_rates.insert(Exchange::USD("2014-08-29".to_string()), dec!(3.1965)); + exchange_rates.insert(Exchange::USD("2021-10-06".to_string()), dec!(3.9992)); + exchange_rates.insert(Exchange::USD("2021-11-23".to_string()), dec!(4.1893)); + exchange_rates.insert(Exchange::EUR("2024-08-12".to_string()), dec!(4.3123)); + exchange_rates.insert(Exchange::USD("2018-09-28".to_string()), dec!(3.6754)); + exchange_rates.insert(Exchange::USD("2012-01-19".to_string()), dec!(3.3678)); + exchange_rates.insert(Exchange::USD("2019-09-12".to_string()), dec!(3.9362)); + exchange_rates.insert(Exchange::USD("2014-10-14".to_string()), dec!(3.3095)); + exchange_rates.insert(Exchange::EUR("2025-04-01".to_string()), dec!(4.1818)); + exchange_rates.insert(Exchange::USD("2018-09-06".to_string()), dec!(3.7143)); + exchange_rates.insert(Exchange::USD("2020-05-06".to_string()), dec!(4.2022)); + exchange_rates.insert(Exchange::USD("2022-11-22".to_string()), dec!(4.5844)); + exchange_rates.insert(Exchange::USD("2012-02-08".to_string()), dec!(3.1461)); + exchange_rates.insert(Exchange::USD("2013-08-29".to_string()), dec!(3.2269)); + exchange_rates.insert(Exchange::EUR("2023-12-04".to_string()), dec!(4.3337)); + exchange_rates.insert(Exchange::USD("2019-04-12".to_string()), dec!(3.7899)); + exchange_rates.insert(Exchange::EUR("2024-09-27".to_string()), dec!(4.2761)); + exchange_rates.insert(Exchange::USD("2016-01-29".to_string()), dec!(4.0723)); + exchange_rates.insert(Exchange::USD("2013-07-30".to_string()), dec!(3.1798)); + exchange_rates.insert(Exchange::USD("2014-10-24".to_string()), dec!(3.3387)); + exchange_rates.insert(Exchange::USD("2015-01-07".to_string()), dec!(3.6375)); + exchange_rates.insert(Exchange::USD("2012-06-20".to_string()), dec!(3.3471)); + exchange_rates.insert(Exchange::USD("2018-04-03".to_string()), dec!(3.4177)); + exchange_rates.insert(Exchange::USD("2014-01-15".to_string()), dec!(3.0495)); + exchange_rates.insert(Exchange::USD("2018-05-14".to_string()), dec!(3.5558)); + exchange_rates.insert(Exchange::EUR("2025-02-05".to_string()), dec!(4.2059)); + exchange_rates.insert(Exchange::USD("2023-10-17".to_string()), dec!(4.2131)); + exchange_rates.insert(Exchange::USD("2021-12-21".to_string()), dec!(4.0937)); + exchange_rates.insert(Exchange::USD("2020-08-20".to_string()), dec!(3.7164)); + exchange_rates.insert(Exchange::USD("2022-04-08".to_string()), dec!(4.2703)); + exchange_rates.insert(Exchange::USD("2017-05-09".to_string()), dec!(3.8741)); + exchange_rates.insert(Exchange::USD("2016-07-28".to_string()), dec!(3.9389)); + exchange_rates.insert(Exchange::USD("2013-09-09".to_string()), dec!(3.2357)); + exchange_rates.insert(Exchange::USD("2024-06-03".to_string()), dec!(3.9501)); + exchange_rates.insert(Exchange::USD("2025-07-28".to_string()), dec!(3.6446)); + exchange_rates.insert(Exchange::EUR("2025-08-27".to_string()), dec!(4.2639)); + exchange_rates.insert(Exchange::USD("2016-07-21".to_string()), dec!(3.9685)); + exchange_rates.insert(Exchange::USD("2012-04-25".to_string()), dec!(3.1675)); + exchange_rates.insert(Exchange::USD("2025-11-04".to_string()), dec!(3.7019)); + exchange_rates.insert(Exchange::USD("2024-07-04".to_string()), dec!(3.9784)); + exchange_rates.insert(Exchange::EUR("2023-05-22".to_string()), dec!(4.5269)); + exchange_rates.insert(Exchange::USD("2021-04-09".to_string()), dec!(3.8208)); + exchange_rates.insert(Exchange::USD("2021-07-22".to_string()), dec!(3.8801)); + exchange_rates.insert(Exchange::USD("2023-07-12".to_string()), dec!(4.0347)); + exchange_rates.insert(Exchange::USD("2024-11-06".to_string()), dec!(4.0595)); + exchange_rates.insert(Exchange::USD("2013-10-30".to_string()), dec!(3.0433)); + exchange_rates.insert(Exchange::EUR("2023-07-03".to_string()), dec!(4.4321)); + exchange_rates.insert(Exchange::USD("2018-11-15".to_string()), dec!(3.8074)); + exchange_rates.insert(Exchange::EUR("2025-04-03".to_string()), dec!(4.1791)); + exchange_rates.insert(Exchange::USD("2019-02-08".to_string()), dec!(3.804)); + exchange_rates.insert(Exchange::USD("2025-07-07".to_string()), dec!(3.6269)); + exchange_rates.insert(Exchange::USD("2016-04-13".to_string()), dec!(3.7771)); + exchange_rates.insert(Exchange::USD("2015-04-17".to_string()), dec!(3.7277)); + exchange_rates.insert(Exchange::EUR("2024-09-24".to_string()), dec!(4.2668)); + exchange_rates.insert(Exchange::USD("2013-10-15".to_string()), dec!(3.0893)); + exchange_rates.insert(Exchange::USD("2020-02-21".to_string()), dec!(3.9623)); + exchange_rates.insert(Exchange::USD("2012-02-23".to_string()), dec!(3.138)); + exchange_rates.insert(Exchange::USD("2019-12-30".to_string()), dec!(3.8027)); + exchange_rates.insert(Exchange::USD("2013-10-18".to_string()), dec!(3.0506)); + exchange_rates.insert(Exchange::USD("2014-10-22".to_string()), dec!(3.3275)); + exchange_rates.insert(Exchange::EUR("2025-01-10".to_string()), dec!(4.2657)); + exchange_rates.insert(Exchange::USD("2015-02-19".to_string()), dec!(3.6631)); + exchange_rates.insert(Exchange::USD("2016-01-14".to_string()), dec!(3.999)); + exchange_rates.insert(Exchange::EUR("2025-06-10".to_string()), dec!(4.2611)); + exchange_rates.insert(Exchange::USD("2020-06-19".to_string()), dec!(3.9741)); + exchange_rates.insert(Exchange::USD("2017-02-03".to_string()), dec!(4.0014)); + exchange_rates.insert(Exchange::USD("2012-12-19".to_string()), dec!(3.069)); + exchange_rates.insert(Exchange::USD("2014-08-18".to_string()), dec!(3.1342)); + exchange_rates.insert(Exchange::USD("2023-03-13".to_string()), dec!(4.3906)); + exchange_rates.insert(Exchange::USD("2015-10-20".to_string()), dec!(3.7385)); + exchange_rates.insert(Exchange::USD("2016-12-09".to_string()), dec!(4.1772)); + exchange_rates.insert(Exchange::USD("2025-01-08".to_string()), dec!(4.1335)); + exchange_rates.insert(Exchange::USD("2022-11-09".to_string()), dec!(4.6817)); + exchange_rates.insert(Exchange::EUR("2025-12-04".to_string()), dec!(4.2299)); + exchange_rates.insert(Exchange::USD("2012-07-30".to_string()), dec!(3.378)); + exchange_rates.insert(Exchange::USD("2013-02-18".to_string()), dec!(3.141)); + exchange_rates.insert(Exchange::USD("2025-05-14".to_string()), dec!(3.7775)); + exchange_rates.insert(Exchange::USD("2023-06-30".to_string()), dec!(4.1066)); + exchange_rates.insert(Exchange::USD("2021-02-19".to_string()), dec!(3.6997)); + exchange_rates.insert(Exchange::USD("2017-09-06".to_string()), dec!(3.5538)); + exchange_rates.insert(Exchange::USD("2015-08-12".to_string()), dec!(3.7805)); + exchange_rates.insert(Exchange::USD("2025-11-20".to_string()), dec!(3.6684)); + exchange_rates.insert(Exchange::USD("2024-08-22".to_string()), dec!(3.8456)); + exchange_rates.insert(Exchange::USD("2018-03-13".to_string()), dec!(3.4143)); + exchange_rates.insert(Exchange::USD("2016-09-27".to_string()), dec!(3.8227)); + exchange_rates.insert(Exchange::EUR("2023-11-28".to_string()), dec!(4.3542)); + exchange_rates.insert(Exchange::USD("2025-08-06".to_string()), dec!(3.6994)); + exchange_rates.insert(Exchange::USD("2021-06-01".to_string()), dec!(3.659)); + exchange_rates.insert(Exchange::USD("2024-11-28".to_string()), dec!(4.0907)); + exchange_rates.insert(Exchange::EUR("2024-02-09".to_string()), dec!(4.3167)); + exchange_rates.insert(Exchange::USD("2024-09-18".to_string()), dec!(3.8358)); + exchange_rates.insert(Exchange::USD("2019-02-13".to_string()), dec!(3.8261)); + exchange_rates.insert(Exchange::USD("2021-07-19".to_string()), dec!(3.8968)); + exchange_rates.insert(Exchange::USD("2025-05-09".to_string()), dec!(3.7681)); + exchange_rates.insert(Exchange::USD("2023-11-10".to_string()), dec!(4.1423)); + exchange_rates.insert(Exchange::USD("2024-08-02".to_string()), dec!(3.9672)); + exchange_rates.insert(Exchange::USD("2015-08-06".to_string()), dec!(3.8385)); + exchange_rates.insert(Exchange::EUR("2024-11-19".to_string()), dec!(4.3308)); + exchange_rates.insert(Exchange::USD("2021-01-13".to_string()), dec!(3.7142)); + exchange_rates.insert(Exchange::USD("2019-09-20".to_string()), dec!(3.9319)); + exchange_rates.insert(Exchange::USD("2013-10-31".to_string()), dec!(3.0507)); + exchange_rates.insert(Exchange::USD("2013-04-02".to_string()), dec!(3.2552)); + exchange_rates.insert(Exchange::USD("2021-03-31".to_string()), dec!(3.9676)); + exchange_rates.insert(Exchange::USD("2020-11-02".to_string()), dec!(3.9557)); + exchange_rates.insert(Exchange::EUR("2024-07-04".to_string()), dec!(4.2975)); + exchange_rates.insert(Exchange::USD("2020-02-25".to_string()), dec!(3.9624)); + exchange_rates.insert(Exchange::EUR("2024-03-29".to_string()), dec!(4.3009)); + exchange_rates.insert(Exchange::EUR("2024-10-09".to_string()), dec!(4.3026)); + exchange_rates.insert(Exchange::USD("2018-01-09".to_string()), dec!(3.4992)); + exchange_rates.insert(Exchange::USD("2018-09-25".to_string()), dec!(3.6511)); + exchange_rates.insert(Exchange::USD("2013-01-10".to_string()), dec!(3.1121)); + exchange_rates.insert(Exchange::EUR("2024-11-26".to_string()), dec!(4.3157)); + exchange_rates.insert(Exchange::USD("2017-06-07".to_string()), dec!(3.7241)); + exchange_rates.insert(Exchange::EUR("2024-06-18".to_string()), dec!(4.3468)); + exchange_rates.insert(Exchange::USD("2025-12-05".to_string()), dec!(3.6313)); + exchange_rates.insert(Exchange::USD("2017-01-17".to_string()), dec!(4.0989)); + exchange_rates.insert(Exchange::USD("2018-04-24".to_string()), dec!(3.4401)); + exchange_rates.insert(Exchange::USD("2012-01-02".to_string()), dec!(3.4454)); + exchange_rates.insert(Exchange::EUR("2023-03-21".to_string()), dec!(4.6981)); + exchange_rates.insert(Exchange::EUR("2025-05-06".to_string()), dec!(4.2806)); + exchange_rates.insert(Exchange::USD("2020-12-09".to_string()), dec!(3.6657)); + exchange_rates.insert(Exchange::USD("2020-01-28".to_string()), dec!(3.8844)); + exchange_rates.insert(Exchange::USD("2022-09-27".to_string()), dec!(4.9476)); + exchange_rates.insert(Exchange::USD("2016-04-27".to_string()), dec!(3.8793)); + exchange_rates.insert(Exchange::USD("2014-04-15".to_string()), dec!(3.0325)); + exchange_rates.insert(Exchange::USD("2020-05-04".to_string()), dec!(4.1646)); + exchange_rates.insert(Exchange::EUR("2024-06-24".to_string()), dec!(4.3198)); + exchange_rates.insert(Exchange::USD("2024-01-31".to_string()), dec!(4.0135)); + exchange_rates.insert(Exchange::USD("2014-09-11".to_string()), dec!(3.2435)); + exchange_rates.insert(Exchange::EUR("2025-05-27".to_string()), dec!(4.2479)); + exchange_rates.insert(Exchange::USD("2014-12-24".to_string()), dec!(3.529)); + exchange_rates.insert(Exchange::USD("2012-05-21".to_string()), dec!(3.3928)); + exchange_rates.insert(Exchange::USD("2019-07-11".to_string()), dec!(3.7859)); + exchange_rates.insert(Exchange::USD("2023-04-24".to_string()), dec!(4.1905)); + exchange_rates.insert(Exchange::USD("2023-01-17".to_string()), dec!(4.3398)); + exchange_rates.insert(Exchange::EUR("2025-07-15".to_string()), dec!(4.2538)); + exchange_rates.insert(Exchange::USD("2021-12-23".to_string()), dec!(4.095)); + exchange_rates.insert(Exchange::EUR("2023-06-22".to_string()), dec!(4.4335)); + exchange_rates.insert(Exchange::USD("2023-09-15".to_string()), dec!(4.3418)); + exchange_rates.insert(Exchange::EUR("2023-09-20".to_string()), dec!(4.6529)); + exchange_rates.insert(Exchange::USD("2021-04-30".to_string()), dec!(3.7746)); + exchange_rates.insert(Exchange::EUR("2024-01-19".to_string()), dec!(4.3846)); + exchange_rates.insert(Exchange::USD("2020-10-12".to_string()), dec!(3.7927)); + exchange_rates.insert(Exchange::EUR("2025-03-12".to_string()), dec!(4.2017)); + exchange_rates.insert(Exchange::USD("2025-03-21".to_string()), dec!(3.8774)); + exchange_rates.insert(Exchange::USD("2024-04-15".to_string()), dec!(4.0209)); + exchange_rates.insert(Exchange::USD("2021-04-06".to_string()), dec!(3.8973)); + exchange_rates.insert(Exchange::USD("2022-06-02".to_string()), dec!(4.2931)); + exchange_rates.insert(Exchange::USD("2013-09-11".to_string()), dec!(3.1955)); + exchange_rates.insert(Exchange::USD("2023-12-04".to_string()), dec!(3.985)); + exchange_rates.insert(Exchange::USD("2017-09-18".to_string()), dec!(3.5881)); + exchange_rates.insert(Exchange::USD("2023-08-28".to_string()), dec!(4.14)); + exchange_rates.insert(Exchange::USD("2014-08-04".to_string()), dec!(3.1114)); + exchange_rates.insert(Exchange::USD("2015-10-12".to_string()), dec!(3.7148)); + exchange_rates.insert(Exchange::USD("2017-07-19".to_string()), dec!(3.6486)); + exchange_rates.insert(Exchange::USD("2024-05-16".to_string()), dec!(3.9195)); + exchange_rates.insert(Exchange::USD("2015-03-25".to_string()), dec!(3.7355)); + exchange_rates.insert(Exchange::USD("2020-02-26".to_string()), dec!(3.9573)); + exchange_rates.insert(Exchange::USD("2019-08-13".to_string()), dec!(3.8714)); + exchange_rates.insert(Exchange::USD("2015-05-22".to_string()), dec!(3.669)); + exchange_rates.insert(Exchange::USD("2013-06-07".to_string()), dec!(3.2545)); + exchange_rates.insert(Exchange::USD("2021-02-18".to_string()), dec!(3.7152)); + exchange_rates.insert(Exchange::EUR("2024-10-03".to_string()), dec!(4.299)); + exchange_rates.insert(Exchange::USD("2025-12-11".to_string()), dec!(3.6132)); + exchange_rates.insert(Exchange::EUR("2023-09-01".to_string()), dec!(4.4762)); + exchange_rates.insert(Exchange::USD("2025-02-14".to_string()), dec!(3.972)); + exchange_rates.insert(Exchange::USD("2012-04-27".to_string()), dec!(3.1666)); + exchange_rates.insert(Exchange::EUR("2023-01-18".to_string()), dec!(4.7091)); + exchange_rates.insert(Exchange::USD("2013-08-20".to_string()), dec!(3.1761)); + exchange_rates.insert(Exchange::USD("2015-12-03".to_string()), dec!(4.04)); + exchange_rates.insert(Exchange::USD("2013-12-05".to_string()), dec!(3.087)); + exchange_rates.insert(Exchange::USD("2021-03-02".to_string()), dec!(3.7765)); + exchange_rates.insert(Exchange::USD("2016-04-21".to_string()), dec!(3.7981)); + exchange_rates.insert(Exchange::USD("2025-02-07".to_string()), dec!(4.0321)); + exchange_rates.insert(Exchange::USD("2024-02-01".to_string()), dec!(4.0047)); + exchange_rates.insert(Exchange::USD("2013-08-06".to_string()), dec!(3.1744)); + exchange_rates.insert(Exchange::USD("2020-05-26".to_string()), dec!(4.0885)); + exchange_rates.insert(Exchange::EUR("2025-02-20".to_string()), dec!(4.1723)); + exchange_rates.insert(Exchange::USD("2020-06-03".to_string()), dec!(3.9121)); + exchange_rates.insert(Exchange::USD("2024-05-14".to_string()), dec!(3.9701)); + exchange_rates.insert(Exchange::USD("2024-06-21".to_string()), dec!(4.0527)); + exchange_rates.insert(Exchange::USD("2019-09-05".to_string()), dec!(3.933)); + exchange_rates.insert(Exchange::USD("2017-09-05".to_string()), dec!(3.5642)); + exchange_rates.insert(Exchange::USD("2015-10-23".to_string()), dec!(3.82)); + exchange_rates.insert(Exchange::USD("2025-11-03".to_string()), dec!(3.6933)); + exchange_rates.insert(Exchange::USD("2022-11-03".to_string()), dec!(4.8291)); + exchange_rates.insert(Exchange::USD("2014-09-10".to_string()), dec!(3.2508)); + exchange_rates.insert(Exchange::USD("2019-06-04".to_string()), dec!(3.8041)); + exchange_rates.insert(Exchange::EUR("2025-05-20".to_string()), dec!(4.2497)); + exchange_rates.insert(Exchange::USD("2025-05-15".to_string()), dec!(3.7804)); + exchange_rates.insert(Exchange::USD("2022-07-08".to_string()), dec!(4.7417)); + exchange_rates.insert(Exchange::EUR("2023-10-09".to_string()), dec!(4.5793)); + exchange_rates.insert(Exchange::USD("2023-11-06".to_string()), dec!(4.1512)); + exchange_rates.insert(Exchange::USD("2020-04-28".to_string()), dec!(4.184)); + exchange_rates.insert(Exchange::USD("2023-07-05".to_string()), dec!(4.0869)); + exchange_rates.insert(Exchange::USD("2014-08-01".to_string()), dec!(3.128)); + exchange_rates.insert(Exchange::USD("2018-07-13".to_string()), dec!(3.7244)); + exchange_rates.insert(Exchange::USD("2013-01-24".to_string()), dec!(3.1503)); + exchange_rates.insert(Exchange::USD("2025-08-05".to_string()), dec!(3.7066)); + exchange_rates.insert(Exchange::USD("2021-09-29".to_string()), dec!(3.9684)); + exchange_rates.insert(Exchange::USD("2016-10-21".to_string()), dec!(3.98)); + exchange_rates.insert(Exchange::USD("2020-04-10".to_string()), dec!(4.1566)); + exchange_rates.insert(Exchange::USD("2025-09-08".to_string()), dec!(3.6214)); + exchange_rates.insert(Exchange::USD("2019-04-09".to_string()), dec!(3.8003)); + exchange_rates.insert(Exchange::USD("2015-10-21".to_string()), dec!(3.7627)); + exchange_rates.insert(Exchange::EUR("2024-12-11".to_string()), dec!(4.2661)); + exchange_rates.insert(Exchange::USD("2020-11-27".to_string()), dec!(3.7614)); + exchange_rates.insert(Exchange::USD("2018-03-06".to_string()), dec!(3.3936)); + exchange_rates.insert(Exchange::USD("2020-12-17".to_string()), dec!(3.6254)); + exchange_rates.insert(Exchange::USD("2016-10-18".to_string()), dec!(3.9148)); + exchange_rates.insert(Exchange::EUR("2023-09-18".to_string()), dec!(4.6377)); + exchange_rates.insert(Exchange::USD("2013-01-08".to_string()), dec!(3.1457)); + exchange_rates.insert(Exchange::EUR("2023-01-27".to_string()), dec!(4.7076)); + exchange_rates.insert(Exchange::USD("2025-05-27".to_string()), dec!(3.743)); + exchange_rates.insert(Exchange::USD("2022-12-16".to_string()), dec!(4.4227)); + exchange_rates.insert(Exchange::USD("2018-03-23".to_string()), dec!(3.4319)); + exchange_rates.insert(Exchange::USD("2018-02-13".to_string()), dec!(3.3916)); + exchange_rates.insert(Exchange::USD("2024-03-11".to_string()), dec!(3.9262)); + exchange_rates.insert(Exchange::USD("2022-01-28".to_string()), dec!(4.1048)); + exchange_rates.insert(Exchange::USD("2016-05-13".to_string()), dec!(3.8775)); + exchange_rates.insert(Exchange::USD("2020-12-16".to_string()), dec!(3.6334)); + exchange_rates.insert(Exchange::EUR("2025-05-13".to_string()), dec!(4.2525)); + exchange_rates.insert(Exchange::USD("2021-05-31".to_string()), dec!(3.6724)); + exchange_rates.insert(Exchange::USD("2025-04-01".to_string()), dec!(3.8656)); + exchange_rates.insert(Exchange::USD("2022-07-01".to_string()), dec!(4.5106)); + exchange_rates.insert(Exchange::USD("2025-01-20".to_string()), dec!(4.1321)); + exchange_rates.insert(Exchange::USD("2019-09-27".to_string()), dec!(4.0154)); + exchange_rates.insert(Exchange::EUR("2023-10-06".to_string()), dec!(4.5998)); + exchange_rates.insert(Exchange::USD("2014-04-25".to_string()), dec!(3.0378)); + exchange_rates.insert(Exchange::USD("2022-07-12".to_string()), dec!(4.8284)); + exchange_rates.insert(Exchange::EUR("2024-10-08".to_string()), dec!(4.3203)); + exchange_rates.insert(Exchange::USD("2016-02-18".to_string()), dec!(3.9416)); + exchange_rates.insert(Exchange::USD("2016-10-04".to_string()), dec!(3.8472)); + exchange_rates.insert(Exchange::USD("2016-10-14".to_string()), dec!(3.8965)); + exchange_rates.insert(Exchange::USD("2015-08-28".to_string()), dec!(3.7493)); + exchange_rates.insert(Exchange::EUR("2025-08-28".to_string()), dec!(4.2681)); + exchange_rates.insert(Exchange::USD("2023-05-30".to_string()), dec!(4.2242)); + exchange_rates.insert(Exchange::USD("2018-06-19".to_string()), dec!(3.7316)); + exchange_rates.insert(Exchange::USD("2022-12-09".to_string()), dec!(4.4351)); + exchange_rates.insert(Exchange::USD("2013-11-04".to_string()), dec!(3.0975)); + exchange_rates.insert(Exchange::EUR("2024-02-16".to_string()), dec!(4.3414)); + exchange_rates.insert(Exchange::EUR("2024-11-14".to_string()), dec!(4.3365)); + exchange_rates.insert(Exchange::USD("2025-05-07".to_string()), dec!(3.7642)); + exchange_rates.insert(Exchange::EUR("2025-07-30".to_string()), dec!(4.2732)); + exchange_rates.insert(Exchange::USD("2018-02-14".to_string()), dec!(3.3769)); + exchange_rates.insert(Exchange::USD("2021-08-27".to_string()), dec!(3.8978)); + exchange_rates.insert(Exchange::USD("2022-05-13".to_string()), dec!(4.4849)); + exchange_rates.insert(Exchange::USD("2016-10-11".to_string()), dec!(3.8487)); + exchange_rates.insert(Exchange::USD("2012-05-25".to_string()), dec!(3.4589)); + exchange_rates.insert(Exchange::USD("2018-10-24".to_string()), dec!(3.7698)); + exchange_rates.insert(Exchange::USD("2019-10-11".to_string()), dec!(3.9145)); + exchange_rates.insert(Exchange::USD("2017-11-06".to_string()), dec!(3.6585)); + exchange_rates.insert(Exchange::USD("2024-08-27".to_string()), dec!(3.8331)); + exchange_rates.insert(Exchange::USD("2022-10-27".to_string()), dec!(4.7216)); + exchange_rates.insert(Exchange::USD("2014-06-23".to_string()), dec!(3.0627)); + exchange_rates.insert(Exchange::USD("2022-09-01".to_string()), dec!(4.6959)); + exchange_rates.insert(Exchange::USD("2017-07-06".to_string()), dec!(3.7351)); + exchange_rates.insert(Exchange::USD("2023-10-02".to_string()), dec!(4.3634)); + exchange_rates.insert(Exchange::USD("2014-08-26".to_string()), dec!(3.1686)); + exchange_rates.insert(Exchange::USD("2021-08-16".to_string()), dec!(3.873)); + exchange_rates.insert(Exchange::USD("2018-08-06".to_string()), dec!(3.692)); + exchange_rates.insert(Exchange::USD("2025-09-19".to_string()), dec!(3.6278)); + exchange_rates.insert(Exchange::USD("2018-10-08".to_string()), dec!(3.7574)); + exchange_rates.insert(Exchange::USD("2015-11-03".to_string()), dec!(3.8678)); + exchange_rates.insert(Exchange::USD("2019-01-18".to_string()), dec!(3.7694)); + exchange_rates.insert(Exchange::USD("2014-03-28".to_string()), dec!(3.0374)); + exchange_rates.insert(Exchange::USD("2019-08-02".to_string()), dec!(3.8829)); + exchange_rates.insert(Exchange::USD("2023-09-22".to_string()), dec!(4.3269)); + exchange_rates.insert(Exchange::EUR("2023-10-19".to_string()), dec!(4.4529)); + exchange_rates.insert(Exchange::USD("2018-06-12".to_string()), dec!(3.6271)); + exchange_rates.insert(Exchange::USD("2021-11-18".to_string()), dec!(4.1114)); + exchange_rates.insert(Exchange::USD("2015-06-10".to_string()), dec!(3.676)); + exchange_rates.insert(Exchange::USD("2019-03-06".to_string()), dec!(3.8038)); + exchange_rates.insert(Exchange::USD("2019-02-12".to_string()), dec!(3.838)); + exchange_rates.insert(Exchange::USD("2022-09-07".to_string()), dec!(4.7584)); + exchange_rates.insert(Exchange::USD("2018-02-12".to_string()), dec!(3.4122)); + exchange_rates.insert(Exchange::USD("2017-04-19".to_string()), dec!(3.9571)); + exchange_rates.insert(Exchange::USD("2016-04-01".to_string()), dec!(3.7193)); + exchange_rates.insert(Exchange::USD("2023-06-23".to_string()), dec!(4.0893)); + exchange_rates.insert(Exchange::USD("2013-09-12".to_string()), dec!(3.1782)); + exchange_rates.insert(Exchange::EUR("2023-08-02".to_string()), dec!(4.4484)); + exchange_rates.insert(Exchange::USD("2024-01-11".to_string()), dec!(3.968)); + exchange_rates.insert(Exchange::EUR("2024-03-12".to_string()), dec!(4.2804)); + exchange_rates.insert(Exchange::USD("2012-08-23".to_string()), dec!(3.2488)); + exchange_rates.insert(Exchange::USD("2015-05-05".to_string()), dec!(3.6205)); + exchange_rates.insert(Exchange::USD("2021-10-14".to_string()), dec!(3.9403)); + exchange_rates.insert(Exchange::USD("2025-05-30".to_string()), dec!(3.7537)); + exchange_rates.insert(Exchange::EUR("2024-01-25".to_string()), dec!(4.379)); + exchange_rates.insert(Exchange::USD("2024-05-13".to_string()), dec!(3.9853)); + exchange_rates.insert(Exchange::USD("2025-06-13".to_string()), dec!(3.7056)); + exchange_rates.insert(Exchange::USD("2016-02-02".to_string()), dec!(4.0333)); + exchange_rates.insert(Exchange::USD("2016-09-06".to_string()), dec!(3.8869)); + exchange_rates.insert(Exchange::USD("2023-02-03".to_string()), dec!(4.2928)); + exchange_rates.insert(Exchange::EUR("2024-07-31".to_string()), dec!(4.2953)); + exchange_rates.insert(Exchange::USD("2019-05-20".to_string()), dec!(3.8543)); + exchange_rates.insert(Exchange::USD("2019-01-31".to_string()), dec!(3.7271)); + exchange_rates.insert(Exchange::USD("2017-04-25".to_string()), dec!(3.8873)); + exchange_rates.insert(Exchange::USD("2020-01-22".to_string()), dec!(3.8202)); + exchange_rates.insert(Exchange::USD("2025-03-17".to_string()), dec!(3.8329)); + exchange_rates.insert(Exchange::USD("2023-06-27".to_string()), dec!(4.0481)); + exchange_rates.insert(Exchange::USD("2016-04-12".to_string()), dec!(3.749)); + exchange_rates.insert(Exchange::USD("2019-11-13".to_string()), dec!(3.8902)); + exchange_rates.insert(Exchange::USD("2014-03-14".to_string()), dec!(3.0481)); + exchange_rates.insert(Exchange::USD("2020-03-05".to_string()), dec!(3.8479)); + exchange_rates.insert(Exchange::USD("2014-11-28".to_string()), dec!(3.3605)); + exchange_rates.insert(Exchange::USD("2025-10-30".to_string()), dec!(3.652)); + exchange_rates.insert(Exchange::USD("2021-12-17".to_string()), dec!(4.0882)); + exchange_rates.insert(Exchange::USD("2013-09-19".to_string()), dec!(3.0833)); + exchange_rates.insert(Exchange::USD("2016-02-22".to_string()), dec!(3.9391)); + exchange_rates.insert(Exchange::EUR("2023-07-13".to_string()), dec!(4.4336)); + exchange_rates.insert(Exchange::USD("2014-07-21".to_string()), dec!(3.07)); + exchange_rates.insert(Exchange::USD("2020-03-24".to_string()), dec!(4.2421)); + exchange_rates.insert(Exchange::EUR("2024-11-12".to_string()), dec!(4.357)); + exchange_rates.insert(Exchange::USD("2022-11-24".to_string()), dec!(4.5101)); + exchange_rates.insert(Exchange::USD("2019-01-30".to_string()), dec!(3.7577)); + exchange_rates.insert(Exchange::USD("2015-12-23".to_string()), dec!(3.8872)); + exchange_rates.insert(Exchange::USD("2024-12-13".to_string()), dec!(4.0738)); + exchange_rates.insert(Exchange::EUR("2023-06-29".to_string()), dec!(4.4568)); + exchange_rates.insert(Exchange::USD("2016-12-08".to_string()), dec!(4.1107)); + exchange_rates.insert(Exchange::EUR("2025-10-09".to_string()), dec!(4.2569)); + exchange_rates.insert(Exchange::USD("2025-08-14".to_string()), dec!(3.6542)); + exchange_rates.insert(Exchange::USD("2021-11-19".to_string()), dec!(4.1457)); + exchange_rates.insert(Exchange::EUR("2023-05-24".to_string()), dec!(4.4803)); + exchange_rates.insert(Exchange::USD("2012-11-13".to_string()), dec!(3.2945)); + exchange_rates.insert(Exchange::USD("2014-10-20".to_string()), dec!(3.3109)); + exchange_rates.insert(Exchange::USD("2015-11-04".to_string()), dec!(3.8876)); + exchange_rates.insert(Exchange::EUR("2024-03-19".to_string()), dec!(4.3201)); + exchange_rates.insert(Exchange::USD("2025-05-26".to_string()), dec!(3.7344)); + exchange_rates.insert(Exchange::USD("2025-10-09".to_string()), dec!(3.6659)); + exchange_rates.insert(Exchange::EUR("2025-10-21".to_string()), dec!(4.2392)); + exchange_rates.insert(Exchange::USD("2018-06-26".to_string()), dec!(3.7151)); + exchange_rates.insert(Exchange::EUR("2024-09-17".to_string()), dec!(4.2748)); + exchange_rates.insert(Exchange::USD("2014-06-27".to_string()), dec!(3.0485)); + exchange_rates.insert(Exchange::USD("2020-10-15".to_string()), dec!(3.8904)); + exchange_rates.insert(Exchange::USD("2025-09-04".to_string()), dec!(3.6501)); + exchange_rates.insert(Exchange::USD("2018-01-18".to_string()), dec!(3.4108)); + exchange_rates.insert(Exchange::USD("2013-03-07".to_string()), dec!(3.1808)); + exchange_rates.insert(Exchange::USD("2017-06-19".to_string()), dec!(3.7615)); + exchange_rates.insert(Exchange::USD("2018-12-17".to_string()), dec!(3.7871)); + exchange_rates.insert(Exchange::USD("2016-08-05".to_string()), dec!(3.8542)); + exchange_rates.insert(Exchange::USD("2025-08-27".to_string()), dec!(3.6793)); + exchange_rates.insert(Exchange::USD("2022-12-27".to_string()), dec!(4.3671)); + exchange_rates.insert(Exchange::USD("2018-03-22".to_string()), dec!(3.4264)); + exchange_rates.insert(Exchange::EUR("2023-08-22".to_string()), dec!(4.4648)); + exchange_rates.insert(Exchange::USD("2012-10-25".to_string()), dec!(3.1851)); + exchange_rates.insert(Exchange::USD("2025-07-11".to_string()), dec!(3.6432)); + exchange_rates.insert(Exchange::USD("2017-03-02".to_string()), dec!(4.0765)); + exchange_rates.insert(Exchange::USD("2016-12-23".to_string()), dec!(4.2199)); + exchange_rates.insert(Exchange::USD("2015-07-13".to_string()), dec!(3.7543)); + exchange_rates.insert(Exchange::USD("2022-01-11".to_string()), dec!(4.0106)); + exchange_rates.insert(Exchange::USD("2016-04-25".to_string()), dec!(3.8962)); + exchange_rates.insert(Exchange::EUR("2024-02-05".to_string()), dec!(4.3278)); + exchange_rates.insert(Exchange::USD("2025-06-04".to_string()), dec!(3.7525)); + exchange_rates.insert(Exchange::USD("2020-05-13".to_string()), dec!(4.2111)); + exchange_rates.insert(Exchange::USD("2019-06-14".to_string()), dec!(3.7727)); + exchange_rates.insert(Exchange::USD("2014-02-12".to_string()), dec!(3.0552)); + exchange_rates.insert(Exchange::EUR("2024-09-05".to_string()), dec!(4.2717)); + exchange_rates.insert(Exchange::USD("2013-04-11".to_string()), dec!(3.1382)); + exchange_rates.insert(Exchange::USD("2019-11-04".to_string()), dec!(3.8099)); + exchange_rates.insert(Exchange::USD("2021-01-29".to_string()), dec!(3.746)); + exchange_rates.insert(Exchange::USD("2017-05-11".to_string()), dec!(3.8744)); + exchange_rates.insert(Exchange::USD("2025-11-19".to_string()), dec!(3.6656)); + exchange_rates.insert(Exchange::USD("2021-06-24".to_string()), dec!(3.7986)); + exchange_rates.insert(Exchange::EUR("2025-06-03".to_string()), dec!(4.2721)); + exchange_rates.insert(Exchange::USD("2012-04-19".to_string()), dec!(3.1879)); + exchange_rates.insert(Exchange::USD("2014-06-17".to_string()), dec!(3.0495)); + exchange_rates.insert(Exchange::EUR("2024-02-19".to_string()), dec!(4.339)); + exchange_rates.insert(Exchange::USD("2019-11-27".to_string()), dec!(3.9154)); + exchange_rates.insert(Exchange::USD("2019-04-04".to_string()), dec!(3.8215)); + exchange_rates.insert(Exchange::USD("2024-11-12".to_string()), dec!(4.1011)); + exchange_rates.insert(Exchange::USD("2020-10-29".to_string()), dec!(3.9505)); + exchange_rates.insert(Exchange::USD("2021-06-07".to_string()), dec!(3.6656)); + exchange_rates.insert(Exchange::USD("2017-11-29".to_string()), dec!(3.5385)); + exchange_rates.insert(Exchange::USD("2019-06-03".to_string()), dec!(3.8292)); + exchange_rates.insert(Exchange::USD("2013-01-21".to_string()), dec!(3.1351)); + exchange_rates.insert(Exchange::EUR("2025-10-29".to_string()), dec!(4.2374)); + exchange_rates.insert(Exchange::USD("2016-09-13".to_string()), dec!(3.8734)); + exchange_rates.insert(Exchange::USD("2022-07-25".to_string()), dec!(4.6171)); + exchange_rates.insert(Exchange::USD("2015-05-12".to_string()), dec!(3.6447)); + exchange_rates.insert(Exchange::USD("2017-05-18".to_string()), dec!(3.7926)); + exchange_rates.insert(Exchange::USD("2013-10-11".to_string()), dec!(3.085)); + exchange_rates.insert(Exchange::USD("2023-04-27".to_string()), dec!(4.1541)); + exchange_rates.insert(Exchange::USD("2013-03-18".to_string()), dec!(3.2015)); + exchange_rates.insert(Exchange::USD("2023-03-17".to_string()), dec!(4.4202)); + exchange_rates.insert(Exchange::USD("2021-01-28".to_string()), dec!(3.7566)); + exchange_rates.insert(Exchange::USD("2020-02-07".to_string()), dec!(3.8947)); + exchange_rates.insert(Exchange::USD("2021-03-09".to_string()), dec!(3.8507)); + exchange_rates.insert(Exchange::USD("2020-09-04".to_string()), dec!(3.7533)); + exchange_rates.insert(Exchange::EUR("2023-05-11".to_string()), dec!(4.5259)); + exchange_rates.insert(Exchange::USD("2019-07-31".to_string()), dec!(3.8504)); + exchange_rates.insert(Exchange::EUR("2024-12-09".to_string()), dec!(4.2581)); + exchange_rates.insert(Exchange::USD("2014-06-10".to_string()), dec!(3.0303)); + exchange_rates.insert(Exchange::USD("2014-06-30".to_string()), dec!(3.0473)); + exchange_rates.insert(Exchange::USD("2023-03-02".to_string()), dec!(4.4002)); + exchange_rates.insert(Exchange::USD("2020-03-17".to_string()), dec!(4.046)); + exchange_rates.insert(Exchange::USD("2025-01-21".to_string()), dec!(4.1101)); + exchange_rates.insert(Exchange::EUR("2023-02-21".to_string()), dec!(4.7469)); + exchange_rates.insert(Exchange::USD("2023-02-06".to_string()), dec!(4.3833)); + exchange_rates.insert(Exchange::USD("2022-07-15".to_string()), dec!(4.7966)); + exchange_rates.insert(Exchange::USD("2024-01-23".to_string()), dec!(4.0133)); + exchange_rates.insert(Exchange::USD("2020-02-04".to_string()), dec!(3.8773)); + exchange_rates.insert(Exchange::USD("2016-03-31".to_string()), dec!(3.759)); + exchange_rates.insert(Exchange::USD("2017-09-21".to_string()), dec!(3.5975)); + exchange_rates.insert(Exchange::USD("2014-07-04".to_string()), dec!(3.0495)); + exchange_rates.insert(Exchange::EUR("2023-06-06".to_string()), dec!(4.4902)); + exchange_rates.insert(Exchange::USD("2017-10-19".to_string()), dec!(3.5896)); + exchange_rates.insert(Exchange::EUR("2024-01-31".to_string()), dec!(4.3434)); + exchange_rates.insert(Exchange::USD("2024-01-02".to_string()), dec!(3.9432)); + exchange_rates.insert(Exchange::USD("2024-02-29".to_string()), dec!(3.9803)); + exchange_rates.insert(Exchange::USD("2024-07-16".to_string()), dec!(3.9083)); + exchange_rates.insert(Exchange::USD("2021-02-10".to_string()), dec!(3.6973)); + exchange_rates.insert(Exchange::USD("2019-03-15".to_string()), dec!(3.8014)); + exchange_rates.insert(Exchange::USD("2018-06-21".to_string()), dec!(3.7607)); + exchange_rates.insert(Exchange::USD("2017-01-10".to_string()), dec!(4.127)); + exchange_rates.insert(Exchange::EUR("2023-12-15".to_string()), dec!(4.3103)); + exchange_rates.insert(Exchange::EUR("2024-09-18".to_string()), dec!(4.2691)); + exchange_rates.insert(Exchange::USD("2015-11-17".to_string()), dec!(3.9775)); + exchange_rates.insert(Exchange::USD("2023-11-16".to_string()), dec!(4.0415)); + exchange_rates.insert(Exchange::USD("2024-12-16".to_string()), dec!(4.0571)); + exchange_rates.insert(Exchange::USD("2016-09-12".to_string()), dec!(3.8668)); + exchange_rates.insert(Exchange::USD("2023-02-17".to_string()), dec!(4.4888)); + exchange_rates.insert(Exchange::EUR("2025-10-27".to_string()), dec!(4.2353)); + exchange_rates.insert(Exchange::EUR("2023-09-21".to_string()), dec!(4.621)); + exchange_rates.insert(Exchange::USD("2021-06-25".to_string()), dec!(3.7749)); + exchange_rates.insert(Exchange::USD("2024-03-12".to_string()), dec!(3.9162)); + exchange_rates.insert(Exchange::USD("2024-03-15".to_string()), dec!(3.9392)); + exchange_rates.insert(Exchange::USD("2023-02-09".to_string()), dec!(4.4003)); + exchange_rates.insert(Exchange::USD("2023-02-02".to_string()), dec!(4.2803)); + exchange_rates.insert(Exchange::USD("2023-11-20".to_string()), dec!(3.9938)); + exchange_rates.insert(Exchange::USD("2018-07-20".to_string()), dec!(3.717)); + exchange_rates.insert(Exchange::USD("2024-11-04".to_string()), dec!(3.9869)); + exchange_rates.insert(Exchange::USD("2016-11-04".to_string()), dec!(3.8862)); + exchange_rates.insert(Exchange::EUR("2023-06-02".to_string()), dec!(4.5148)); + exchange_rates.insert(Exchange::EUR("2025-10-03".to_string()), dec!(4.2559)); + exchange_rates.insert(Exchange::USD("2018-09-24".to_string()), dec!(3.662)); + exchange_rates.insert(Exchange::USD("2014-11-20".to_string()), dec!(3.368)); + exchange_rates.insert(Exchange::USD("2020-01-30".to_string()), dec!(3.8856)); + exchange_rates.insert(Exchange::USD("2023-06-13".to_string()), dec!(4.1439)); + exchange_rates.insert(Exchange::USD("2016-03-16".to_string()), dec!(3.8749)); + exchange_rates.insert(Exchange::USD("2024-07-01".to_string()), dec!(3.9915)); + exchange_rates.insert(Exchange::USD("2020-04-27".to_string()), dec!(4.1696)); + exchange_rates.insert(Exchange::USD("2018-08-27".to_string()), dec!(3.682)); + exchange_rates.insert(Exchange::EUR("2024-12-02".to_string()), dec!(4.2923)); + exchange_rates.insert(Exchange::USD("2012-02-10".to_string()), dec!(3.1703)); + exchange_rates.insert(Exchange::USD("2012-07-04".to_string()), dec!(3.3415)); + exchange_rates.insert(Exchange::EUR("2025-03-05".to_string()), dec!(4.1545)); + exchange_rates.insert(Exchange::USD("2020-06-04".to_string()), dec!(3.9573)); + exchange_rates.insert(Exchange::EUR("2024-04-16".to_string()), dec!(4.3197)); + exchange_rates.insert(Exchange::USD("2024-10-01".to_string()), dec!(3.859)); + exchange_rates.insert(Exchange::EUR("2024-10-16".to_string()), dec!(4.2955)); + exchange_rates.insert(Exchange::USD("2022-09-14".to_string()), dec!(4.7233)); + exchange_rates.insert(Exchange::USD("2019-10-25".to_string()), dec!(3.8452)); + exchange_rates.insert(Exchange::USD("2012-11-08".to_string()), dec!(3.2655)); + exchange_rates.insert(Exchange::EUR("2025-03-17".to_string()), dec!(4.1777)); + exchange_rates.insert(Exchange::USD("2012-12-04".to_string()), dec!(3.1575)); + exchange_rates.insert(Exchange::EUR("2023-12-07".to_string()), dec!(4.3334)); + exchange_rates.insert(Exchange::USD("2013-11-28".to_string()), dec!(3.0872)); + exchange_rates.insert(Exchange::USD("2013-08-01".to_string()), dec!(3.1961)); + exchange_rates.insert(Exchange::USD("2022-03-29".to_string()), dec!(4.2917)); + exchange_rates.insert(Exchange::USD("2024-05-31".to_string()), dec!(3.9389)); + exchange_rates.insert(Exchange::USD("2024-10-03".to_string()), dec!(3.8951)); + exchange_rates.insert(Exchange::EUR("2023-03-03".to_string()), dec!(4.7046)); + exchange_rates.insert(Exchange::USD("2021-12-28".to_string()), dec!(4.062)); + exchange_rates.insert(Exchange::EUR("2024-04-30".to_string()), dec!(4.3213)); + exchange_rates.insert(Exchange::USD("2020-10-05".to_string()), dec!(3.8252)); + exchange_rates.insert(Exchange::USD("2013-08-26".to_string()), dec!(3.1658)); + exchange_rates.insert(Exchange::EUR("2025-09-30".to_string()), dec!(4.2692)); + exchange_rates.insert(Exchange::USD("2019-05-15".to_string()), dec!(3.8457)); + exchange_rates.insert(Exchange::USD("2019-05-27".to_string()), dec!(3.8374)); + exchange_rates.insert(Exchange::USD("2013-09-17".to_string()), dec!(3.1552)); + exchange_rates.insert(Exchange::USD("2020-03-19".to_string()), dec!(4.2421)); + exchange_rates.insert(Exchange::EUR("2024-09-04".to_string()), dec!(4.2815)); + exchange_rates.insert(Exchange::USD("2025-05-13".to_string()), dec!(3.8266)); + exchange_rates.insert(Exchange::USD("2021-03-30".to_string()), dec!(3.9604)); + exchange_rates.insert(Exchange::USD("2017-10-06".to_string()), dec!(3.6799)); + exchange_rates.insert(Exchange::USD("2012-03-01".to_string()), dec!(3.0887)); + exchange_rates.insert(Exchange::USD("2023-12-14".to_string()), dec!(3.9484)); + exchange_rates.insert(Exchange::EUR("2024-10-28".to_string()), dec!(4.3478)); + exchange_rates.insert(Exchange::USD("2017-07-03".to_string()), dec!(3.7196)); + exchange_rates.insert(Exchange::USD("2017-11-10".to_string()), dec!(3.6274)); + exchange_rates.insert(Exchange::USD("2018-11-23".to_string()), dec!(3.7779)); + exchange_rates.insert(Exchange::EUR("2023-06-15".to_string()), dec!(4.4633)); + exchange_rates.insert(Exchange::EUR("2025-10-07".to_string()), dec!(4.2559)); + exchange_rates.insert(Exchange::USD("2025-04-03".to_string()), dec!(3.7968)); + exchange_rates.insert(Exchange::USD("2021-08-12".to_string()), dec!(3.9074)); + exchange_rates.insert(Exchange::USD("2021-06-18".to_string()), dec!(3.8198)); + exchange_rates.insert(Exchange::USD("2023-07-20".to_string()), dec!(3.971)); + exchange_rates.insert(Exchange::USD("2019-08-28".to_string()), dec!(3.9548)); + exchange_rates.insert(Exchange::USD("2017-12-07".to_string()), dec!(3.5722)); + exchange_rates.insert(Exchange::USD("2014-04-22".to_string()), dec!(3.034)); + exchange_rates.insert(Exchange::USD("2020-03-03".to_string()), dec!(3.8804)); + exchange_rates.insert(Exchange::USD("2018-05-28".to_string()), dec!(3.6849)); + exchange_rates.insert(Exchange::USD("2024-11-08".to_string()), dec!(4.0117)); + exchange_rates.insert(Exchange::USD("2017-01-09".to_string()), dec!(4.1592)); + exchange_rates.insert(Exchange::USD("2015-10-07".to_string()), dec!(3.7604)); + exchange_rates.insert(Exchange::USD("2025-10-31".to_string()), dec!(3.6751)); + exchange_rates.insert(Exchange::USD("2020-04-17".to_string()), dec!(4.1886)); + exchange_rates.insert(Exchange::USD("2020-11-26".to_string()), dec!(3.7586)); + exchange_rates.insert(Exchange::USD("2015-12-28".to_string()), dec!(3.8663)); + exchange_rates.insert(Exchange::EUR("2025-08-07".to_string()), dec!(4.2618)); + exchange_rates.insert(Exchange::USD("2020-04-20".to_string()), dec!(4.1525)); + exchange_rates.insert(Exchange::EUR("2025-10-20".to_string()), dec!(4.2396)); + exchange_rates.insert(Exchange::EUR("2025-11-12".to_string()), dec!(4.2312)); + exchange_rates.insert(Exchange::USD("2023-08-01".to_string()), dec!(4.0262)); + exchange_rates.insert(Exchange::USD("2020-07-24".to_string()), dec!(3.8029)); + exchange_rates.insert(Exchange::USD("2017-03-22".to_string()), dec!(3.9731)); + exchange_rates.insert(Exchange::USD("2016-11-24".to_string()), dec!(4.188)); + exchange_rates.insert(Exchange::USD("2014-01-21".to_string()), dec!(3.0763)); + exchange_rates.insert(Exchange::USD("2020-11-12".to_string()), dec!(3.7995)); + exchange_rates.insert(Exchange::USD("2016-06-07".to_string()), dec!(3.8298)); + exchange_rates.insert(Exchange::USD("2015-12-22".to_string()), dec!(3.8787)); + exchange_rates.insert(Exchange::USD("2012-12-18".to_string()), dec!(3.1044)); + exchange_rates.insert(Exchange::USD("2020-01-07".to_string()), dec!(3.7861)); + exchange_rates.insert(Exchange::USD("2022-06-29".to_string()), dec!(4.4533)); + exchange_rates.insert(Exchange::USD("2017-04-28".to_string()), dec!(3.8696)); + exchange_rates.insert(Exchange::USD("2019-10-14".to_string()), dec!(3.8958)); + exchange_rates.insert(Exchange::USD("2019-02-21".to_string()), dec!(3.8247)); + exchange_rates.insert(Exchange::USD("2025-06-17".to_string()), dec!(3.7005)); + exchange_rates.insert(Exchange::USD("2019-01-04".to_string()), dec!(3.772)); + exchange_rates.insert(Exchange::USD("2025-06-10".to_string()), dec!(3.7352)); + exchange_rates.insert(Exchange::USD("2017-07-28".to_string()), dec!(3.6406)); + exchange_rates.insert(Exchange::USD("2024-10-17".to_string()), dec!(3.9786)); + exchange_rates.insert(Exchange::USD("2025-11-25".to_string()), dec!(3.6675)); + exchange_rates.insert(Exchange::USD("2020-10-27".to_string()), dec!(3.886)); + exchange_rates.insert(Exchange::USD("2018-09-19".to_string()), dec!(3.6685)); + exchange_rates.insert(Exchange::USD("2014-02-14".to_string()), dec!(3.0334)); + exchange_rates.insert(Exchange::USD("2021-10-07".to_string()), dec!(3.9334)); + exchange_rates.insert(Exchange::USD("2019-04-10".to_string()), dec!(3.8023)); + exchange_rates.insert(Exchange::USD("2022-10-06".to_string()), dec!(4.8989)); + exchange_rates.insert(Exchange::EUR("2025-02-03".to_string()), dec!(4.2305)); + exchange_rates.insert(Exchange::USD("2024-05-27".to_string()), dec!(3.9196)); + exchange_rates.insert(Exchange::USD("2018-05-08".to_string()), dec!(3.5884)); + exchange_rates.insert(Exchange::USD("2015-03-11".to_string()), dec!(3.9091)); + exchange_rates.insert(Exchange::USD("2019-12-23".to_string()), dec!(3.8394)); + exchange_rates.insert(Exchange::USD("2019-05-06".to_string()), dec!(3.8313)); + exchange_rates.insert(Exchange::USD("2012-08-03".to_string()), dec!(3.3548)); + exchange_rates.insert(Exchange::USD("2017-01-19".to_string()), dec!(4.1014)); + exchange_rates.insert(Exchange::USD("2016-12-21".to_string()), dec!(4.2484)); + exchange_rates.insert(Exchange::EUR("2023-01-19".to_string()), dec!(4.7053)); + exchange_rates.insert(Exchange::USD("2016-08-12".to_string()), dec!(3.8219)); + exchange_rates.insert(Exchange::USD("2023-03-14".to_string()), dec!(4.3793)); + exchange_rates.insert(Exchange::USD("2016-05-12".to_string()), dec!(3.8811)); + exchange_rates.insert(Exchange::EUR("2025-11-19".to_string()), dec!(4.2424)); + exchange_rates.insert(Exchange::EUR("2023-01-25".to_string()), dec!(4.7079)); + exchange_rates.insert(Exchange::USD("2024-10-08".to_string()), dec!(3.9299)); + exchange_rates.insert(Exchange::USD("2014-03-31".to_string()), dec!(3.0344)); + exchange_rates.insert(Exchange::USD("2019-07-17".to_string()), dec!(3.8038)); + exchange_rates.insert(Exchange::USD("2016-12-19".to_string()), dec!(4.2255)); + exchange_rates.insert(Exchange::USD("2021-05-21".to_string()), dec!(3.6778)); + exchange_rates.insert(Exchange::USD("2019-09-18".to_string()), dec!(3.9322)); + exchange_rates.insert(Exchange::USD("2018-07-30".to_string()), dec!(3.6684)); + exchange_rates.insert(Exchange::USD("2021-08-11".to_string()), dec!(3.9148)); + exchange_rates.insert(Exchange::USD("2018-10-30".to_string()), dec!(3.8062)); + exchange_rates.insert(Exchange::USD("2014-10-28".to_string()), dec!(3.3295)); + exchange_rates.insert(Exchange::USD("2020-10-21".to_string()), dec!(3.8706)); + exchange_rates.insert(Exchange::USD("2020-02-27".to_string()), dec!(3.9413)); + exchange_rates.insert(Exchange::USD("2021-10-15".to_string()), dec!(3.9413)); + exchange_rates.insert(Exchange::USD("2013-04-22".to_string()), dec!(3.1448)); + exchange_rates.insert(Exchange::USD("2017-07-14".to_string()), dec!(3.6986)); + exchange_rates.insert(Exchange::USD("2023-03-01".to_string()), dec!(4.4094)); + exchange_rates.insert(Exchange::USD("2016-02-08".to_string()), dec!(3.9525)); + exchange_rates.insert(Exchange::USD("2013-02-14".to_string()), dec!(3.1209)); + exchange_rates.insert(Exchange::EUR("2024-08-07".to_string()), dec!(4.3158)); + exchange_rates.insert(Exchange::USD("2021-07-29".to_string()), dec!(3.8617)); + exchange_rates.insert(Exchange::USD("2016-08-19".to_string()), dec!(3.7905)); + exchange_rates.insert(Exchange::USD("2013-12-02".to_string()), dec!(3.0965)); + exchange_rates.insert(Exchange::USD("2022-03-17".to_string()), dec!(4.2403)); + exchange_rates.insert(Exchange::USD("2015-01-29".to_string()), dec!(3.7418)); + exchange_rates.insert(Exchange::USD("2024-10-07".to_string()), dec!(3.9368)); + exchange_rates.insert(Exchange::USD("2025-06-09".to_string()), dec!(3.7427)); + exchange_rates.insert(Exchange::USD("2012-10-26".to_string()), dec!(3.2119)); + exchange_rates.insert(Exchange::USD("2016-11-17".to_string()), dec!(4.1375)); + exchange_rates.insert(Exchange::EUR("2023-03-17".to_string()), dec!(4.7062)); + exchange_rates.insert(Exchange::USD("2013-10-09".to_string()), dec!(3.1057)); + exchange_rates.insert(Exchange::USD("2024-01-08".to_string()), dec!(3.9812)); + exchange_rates.insert(Exchange::EUR("2024-01-05".to_string()), dec!(4.3484)); + exchange_rates.insert(Exchange::USD("2021-04-07".to_string()), dec!(3.8611)); + exchange_rates.insert(Exchange::USD("2012-08-20".to_string()), dec!(3.2944)); + exchange_rates.insert(Exchange::EUR("2025-03-27".to_string()), dec!(4.1913)); + exchange_rates.insert(Exchange::USD("2018-03-14".to_string()), dec!(3.4055)); + exchange_rates.insert(Exchange::USD("2013-11-18".to_string()), dec!(3.0953)); + exchange_rates.insert(Exchange::USD("2015-02-13".to_string()), dec!(3.6552)); + exchange_rates.insert(Exchange::EUR("2023-02-27".to_string()), dec!(4.7162)); + exchange_rates.insert(Exchange::USD("2025-08-04".to_string()), dec!(3.6977)); + exchange_rates.insert(Exchange::EUR("2024-12-03".to_string()), dec!(4.2927)); + exchange_rates.insert(Exchange::USD("2017-05-26".to_string()), dec!(3.7248)); + exchange_rates.insert(Exchange::USD("2025-11-24".to_string()), dec!(3.6726)); + exchange_rates.insert(Exchange::USD("2018-09-21".to_string()), dec!(3.6402)); + exchange_rates.insert(Exchange::USD("2020-02-05".to_string()), dec!(3.8654)); + exchange_rates.insert(Exchange::USD("2013-02-06".to_string()), dec!(3.0868)); + exchange_rates.insert(Exchange::USD("2016-11-16".to_string()), dec!(4.138)); + exchange_rates.insert(Exchange::USD("2021-05-11".to_string()), dec!(3.7514)); + exchange_rates.insert(Exchange::USD("2016-04-05".to_string()), dec!(3.7337)); + exchange_rates.insert(Exchange::USD("2025-09-11".to_string()), dec!(3.6459)); + exchange_rates.insert(Exchange::USD("2014-03-13".to_string()), dec!(3.0284)); + exchange_rates.insert(Exchange::EUR("2025-09-19".to_string()), dec!(4.2666)); + exchange_rates.insert(Exchange::USD("2015-11-06".to_string()), dec!(3.9075)); + exchange_rates.insert(Exchange::USD("2018-10-05".to_string()), dec!(3.7518)); + exchange_rates.insert(Exchange::USD("2012-02-28".to_string()), dec!(3.0977)); + exchange_rates.insert(Exchange::EUR("2024-07-02".to_string()), dec!(4.3286)); + exchange_rates.insert(Exchange::USD("2022-03-24".to_string()), dec!(4.331)); + exchange_rates.insert(Exchange::USD("2020-06-24".to_string()), dec!(3.9395)); + exchange_rates.insert(Exchange::USD("2013-02-08".to_string()), dec!(3.1056)); + exchange_rates.insert(Exchange::USD("2021-05-24".to_string()), dec!(3.6795)); + exchange_rates.insert(Exchange::USD("2019-12-19".to_string()), dec!(3.8281)); + exchange_rates.insert(Exchange::USD("2016-10-07".to_string()), dec!(3.8505)); + exchange_rates.insert(Exchange::USD("2013-10-08".to_string()), dec!(3.0873)); + exchange_rates.insert(Exchange::USD("2025-02-12".to_string()), dec!(4.0215)); + exchange_rates.insert(Exchange::USD("2018-02-02".to_string()), dec!(3.3329)); + exchange_rates.insert(Exchange::USD("2017-12-13".to_string()), dec!(3.588)); + exchange_rates.insert(Exchange::USD("2013-05-09".to_string()), dec!(3.1392)); + exchange_rates.insert(Exchange::EUR("2025-02-06".to_string()), dec!(4.2073)); + exchange_rates.insert(Exchange::USD("2015-11-09".to_string()), dec!(3.9605)); + exchange_rates.insert(Exchange::EUR("2024-02-02".to_string()), dec!(4.3173)); + exchange_rates.insert(Exchange::EUR("2023-11-16".to_string()), dec!(4.3854)); + exchange_rates.insert(Exchange::USD("2019-07-30".to_string()), dec!(3.8493)); + exchange_rates.insert(Exchange::USD("2014-01-14".to_string()), dec!(3.04)); + exchange_rates.insert(Exchange::USD("2017-06-23".to_string()), dec!(3.7824)); + exchange_rates.insert(Exchange::USD("2019-11-26".to_string()), dec!(3.9039)); + exchange_rates.insert(Exchange::USD("2015-10-13".to_string()), dec!(3.7199)); + exchange_rates.insert(Exchange::EUR("2024-08-23".to_string()), dec!(4.2769)); + exchange_rates.insert(Exchange::USD("2021-03-19".to_string()), dec!(3.8865)); + exchange_rates.insert(Exchange::EUR("2023-08-21".to_string()), dec!(4.4768)); + exchange_rates.insert(Exchange::USD("2014-02-04".to_string()), dec!(3.1189)); + exchange_rates.insert(Exchange::USD("2021-04-22".to_string()), dec!(3.7885)); + exchange_rates.insert(Exchange::USD("2024-07-31".to_string()), dec!(3.9689)); + exchange_rates.insert(Exchange::USD("2022-02-23".to_string()), dec!(3.9937)); + exchange_rates.insert(Exchange::USD("2016-01-11".to_string()), dec!(4.0085)); + exchange_rates.insert(Exchange::USD("2020-09-02".to_string()), dec!(3.7191)); + exchange_rates.insert(Exchange::USD("2017-05-24".to_string()), dec!(3.7535)); + exchange_rates.insert(Exchange::USD("2013-04-30".to_string()), dec!(3.1721)); + exchange_rates.insert(Exchange::USD("2021-05-18".to_string()), dec!(3.705)); + exchange_rates.insert(Exchange::USD("2017-06-06".to_string()), dec!(3.725)); + exchange_rates.insert(Exchange::USD("2018-10-19".to_string()), dec!(3.7601)); + exchange_rates.insert(Exchange::USD("2024-10-24".to_string()), dec!(4.0168)); + exchange_rates.insert(Exchange::USD("2020-07-10".to_string()), dec!(3.9646)); + exchange_rates.insert(Exchange::USD("2017-03-09".to_string()), dec!(4.0864)); + exchange_rates.insert(Exchange::USD("2020-05-15".to_string()), dec!(4.2135)); + exchange_rates.insert(Exchange::USD("2017-02-02".to_string()), dec!(3.9835)); + exchange_rates.insert(Exchange::USD("2021-07-27".to_string()), dec!(3.9017)); + exchange_rates.insert(Exchange::USD("2014-03-26".to_string()), dec!(3.0318)); + exchange_rates.insert(Exchange::USD("2022-11-25".to_string()), dec!(4.5111)); + exchange_rates.insert(Exchange::USD("2015-03-10".to_string()), dec!(3.8345)); + exchange_rates.insert(Exchange::EUR("2024-08-26".to_string()), dec!(4.2803)); + exchange_rates.insert(Exchange::EUR("2024-12-16".to_string()), dec!(4.2622)); + exchange_rates.insert(Exchange::USD("2025-04-09".to_string()), dec!(3.8828)); + exchange_rates.insert(Exchange::USD("2020-12-10".to_string()), dec!(3.6574)); + exchange_rates.insert(Exchange::USD("2019-07-04".to_string()), dec!(3.7618)); + exchange_rates.insert(Exchange::USD("2020-01-09".to_string()), dec!(3.8251)); + exchange_rates.insert(Exchange::EUR("2024-01-03".to_string()), dec!(4.3646)); + exchange_rates.insert(Exchange::USD("2022-08-05".to_string()), dec!(4.6024)); + exchange_rates.insert(Exchange::USD("2019-11-20".to_string()), dec!(3.8792)); + exchange_rates.insert(Exchange::USD("2023-09-11".to_string()), dec!(4.3077)); + exchange_rates.insert(Exchange::USD("2019-07-25".to_string()), dec!(3.8199)); + exchange_rates.insert(Exchange::USD("2016-03-04".to_string()), dec!(3.9545)); + exchange_rates.insert(Exchange::USD("2015-12-09".to_string()), dec!(3.9705)); + exchange_rates.insert(Exchange::USD("2014-10-16".to_string()), dec!(3.2985)); + exchange_rates.insert(Exchange::USD("2016-06-22".to_string()), dec!(3.8945)); + exchange_rates.insert(Exchange::EUR("2023-01-04".to_string()), dec!(4.6688)); + exchange_rates.insert(Exchange::EUR("2023-09-22".to_string()), dec!(4.6069)); + exchange_rates.insert(Exchange::USD("2014-03-27".to_string()), dec!(3.0401)); + exchange_rates.insert(Exchange::USD("2023-10-13".to_string()), dec!(4.3033)); + exchange_rates.insert(Exchange::USD("2019-12-31".to_string()), dec!(3.7977)); + exchange_rates.insert(Exchange::USD("2015-03-16".to_string()), dec!(3.926)); + exchange_rates.insert(Exchange::USD("2020-12-01".to_string()), dec!(3.7367)); + exchange_rates.insert(Exchange::USD("2013-05-23".to_string()), dec!(3.2587)); + exchange_rates.insert(Exchange::EUR("2023-02-10".to_string()), dec!(4.7716)); + exchange_rates.insert(Exchange::USD("2023-06-01".to_string()), dec!(4.2399)); + exchange_rates.insert(Exchange::USD("2024-11-26".to_string()), dec!(4.1073)); + exchange_rates.insert(Exchange::USD("2021-08-30".to_string()), dec!(3.8724)); + exchange_rates.insert(Exchange::EUR("2024-01-04".to_string()), dec!(4.3525)); + exchange_rates.insert(Exchange::USD("2024-12-20".to_string()), dec!(4.1002)); + exchange_rates.insert(Exchange::USD("2014-08-05".to_string()), dec!(3.1121)); + exchange_rates.insert(Exchange::EUR("2025-07-02".to_string()), dec!(4.25)); + exchange_rates.insert(Exchange::USD("2015-06-24".to_string()), dec!(3.7103)); + exchange_rates.insert(Exchange::USD("2013-03-27".to_string()), dec!(3.2635)); + exchange_rates.insert(Exchange::USD("2013-01-23".to_string()), dec!(3.1195)); + exchange_rates.insert(Exchange::USD("2023-05-23".to_string()), dec!(4.1634)); + exchange_rates.insert(Exchange::USD("2018-11-05".to_string()), dec!(3.7907)); + exchange_rates.insert(Exchange::USD("2016-01-25".to_string()), dec!(4.1346)); + exchange_rates.insert(Exchange::USD("2013-06-10".to_string()), dec!(3.221)); + exchange_rates.insert(Exchange::USD("2013-07-18".to_string()), dec!(3.2362)); + exchange_rates.insert(Exchange::USD("2021-03-12".to_string()), dec!(3.8521)); + exchange_rates.insert(Exchange::USD("2012-09-12".to_string()), dec!(3.168)); + exchange_rates.insert(Exchange::USD("2019-10-10".to_string()), dec!(3.9226)); + exchange_rates.insert(Exchange::USD("2012-11-21".to_string()), dec!(3.2287)); + exchange_rates.insert(Exchange::USD("2025-02-17".to_string()), dec!(3.9749)); + exchange_rates.insert(Exchange::USD("2015-09-23".to_string()), dec!(3.7801)); + exchange_rates.insert(Exchange::EUR("2025-06-30".to_string()), dec!(4.2419)); + exchange_rates.insert(Exchange::USD("2024-01-18".to_string()), dec!(4.0437)); + exchange_rates.insert(Exchange::USD("2015-01-27".to_string()), dec!(3.7348)); + exchange_rates.insert(Exchange::USD("2015-09-11".to_string()), dec!(3.7264)); + exchange_rates.insert(Exchange::USD("2022-01-12".to_string()), dec!(3.9879)); + exchange_rates.insert(Exchange::USD("2020-03-06".to_string()), dec!(3.8231)); + exchange_rates.insert(Exchange::USD("2025-01-13".to_string()), dec!(4.1904)); + exchange_rates.insert(Exchange::USD("2018-09-05".to_string()), dec!(3.733)); + exchange_rates.insert(Exchange::USD("2022-07-19".to_string()), dec!(4.6594)); + exchange_rates.insert(Exchange::USD("2025-11-12".to_string()), dec!(3.657)); + exchange_rates.insert(Exchange::EUR("2023-07-27".to_string()), dec!(4.4224)); + exchange_rates.insert(Exchange::USD("2021-04-01".to_string()), dec!(3.9428)); + exchange_rates.insert(Exchange::EUR("2025-07-14".to_string()), dec!(4.2614)); + exchange_rates.insert(Exchange::USD("2021-08-24".to_string()), dec!(3.9086)); + exchange_rates.insert(Exchange::USD("2025-10-06".to_string()), dec!(3.6446)); + exchange_rates.insert(Exchange::USD("2013-10-16".to_string()), dec!(3.0854)); + exchange_rates.insert(Exchange::USD("2023-10-27".to_string()), dec!(4.2267)); + exchange_rates.insert(Exchange::USD("2021-04-16".to_string()), dec!(3.7978)); + exchange_rates.insert(Exchange::USD("2023-08-08".to_string()), dec!(4.0396)); + exchange_rates.insert(Exchange::USD("2021-07-09".to_string()), dec!(3.8427)); + exchange_rates.insert(Exchange::USD("2015-06-16".to_string()), dec!(3.6933)); + exchange_rates.insert(Exchange::USD("2017-11-02".to_string()), dec!(3.6366)); + exchange_rates.insert(Exchange::USD("2014-01-27".to_string()), dec!(3.0884)); + exchange_rates.insert(Exchange::USD("2014-09-30".to_string()), dec!(3.2973)); + exchange_rates.insert(Exchange::USD("2023-06-19".to_string()), dec!(4.068)); + exchange_rates.insert(Exchange::USD("2024-12-27".to_string()), dec!(4.1036)); + exchange_rates.insert(Exchange::USD("2016-05-06".to_string()), dec!(3.8732)); + exchange_rates.insert(Exchange::USD("2013-07-10".to_string()), dec!(3.3724)); + exchange_rates.insert(Exchange::USD("2012-07-24".to_string()), dec!(3.4678)); + exchange_rates.insert(Exchange::USD("2015-06-02".to_string()), dec!(3.7676)); + exchange_rates.insert(Exchange::USD("2025-09-22".to_string()), dec!(3.6255)); + exchange_rates.insert(Exchange::USD("2016-10-25".to_string()), dec!(3.9543)); + exchange_rates.insert(Exchange::USD("2017-12-14".to_string()), dec!(3.5716)); + exchange_rates.insert(Exchange::USD("2014-11-27".to_string()), dec!(3.3528)); + exchange_rates.insert(Exchange::USD("2025-09-25".to_string()), dec!(3.6295)); + exchange_rates.insert(Exchange::USD("2021-11-24".to_string()), dec!(4.1764)); + exchange_rates.insert(Exchange::EUR("2025-08-04".to_string()), dec!(4.2734)); + exchange_rates.insert(Exchange::USD("2014-06-05".to_string()), dec!(3.0275)); + exchange_rates.insert(Exchange::USD("2025-09-01".to_string()), dec!(3.6278)); + exchange_rates.insert(Exchange::USD("2014-07-16".to_string()), dec!(3.0503)); + exchange_rates.insert(Exchange::USD("2018-01-10".to_string()), dec!(3.4999)); + exchange_rates.insert(Exchange::EUR("2025-07-09".to_string()), dec!(4.2399)); + exchange_rates.insert(Exchange::USD("2020-07-13".to_string()), dec!(3.9564)); + exchange_rates.insert(Exchange::USD("2018-07-10".to_string()), dec!(3.6973)); + exchange_rates.insert(Exchange::USD("2015-09-22".to_string()), dec!(3.7438)); + exchange_rates.insert(Exchange::USD("2013-02-27".to_string()), dec!(3.1841)); + exchange_rates.insert(Exchange::USD("2022-02-15".to_string()), dec!(3.974)); + exchange_rates.insert(Exchange::USD("2020-07-06".to_string()), dec!(3.9588)); + exchange_rates.insert(Exchange::USD("2013-05-06".to_string()), dec!(3.1646)); + exchange_rates.insert(Exchange::EUR("2023-08-09".to_string()), dec!(4.4586)); + exchange_rates.insert(Exchange::USD("2020-06-16".to_string()), dec!(3.9058)); + exchange_rates.insert(Exchange::USD("2012-04-06".to_string()), dec!(3.1814)); + exchange_rates.insert(Exchange::USD("2018-08-02".to_string()), dec!(3.6783)); + exchange_rates.insert(Exchange::USD("2016-06-02".to_string()), dec!(3.9204)); + exchange_rates.insert(Exchange::USD("2019-03-25".to_string()), dec!(3.7966)); + exchange_rates.insert(Exchange::USD("2017-11-24".to_string()), dec!(3.5486)); + exchange_rates.insert(Exchange::USD("2019-01-25".to_string()), dec!(3.7893)); + exchange_rates.insert(Exchange::USD("2014-04-23".to_string()), dec!(3.0273)); + exchange_rates.insert(Exchange::USD("2012-03-09".to_string()), dec!(3.1126)); + exchange_rates.insert(Exchange::USD("2017-08-09".to_string()), dec!(3.6342)); + exchange_rates.insert(Exchange::USD("2015-01-23".to_string()), dec!(3.7687)); + exchange_rates.insert(Exchange::USD("2018-05-17".to_string()), dec!(3.6283)); + exchange_rates.insert(Exchange::USD("2015-03-12".to_string()), dec!(3.8928)); + exchange_rates.insert(Exchange::USD("2025-01-02".to_string()), dec!(4.1219)); + exchange_rates.insert(Exchange::USD("2013-09-02".to_string()), dec!(3.2164)); + exchange_rates.insert(Exchange::USD("2012-02-01".to_string()), dec!(3.1913)); + exchange_rates.insert(Exchange::USD("2023-09-06".to_string()), dec!(4.1895)); + exchange_rates.insert(Exchange::USD("2024-03-18".to_string()), dec!(3.9528)); + exchange_rates.insert(Exchange::USD("2022-06-08".to_string()), dec!(4.2904)); + exchange_rates.insert(Exchange::USD("2017-11-14".to_string()), dec!(3.6126)); + exchange_rates.insert(Exchange::USD("2012-01-27".to_string()), dec!(3.2163)); + exchange_rates.insert(Exchange::USD("2018-09-12".to_string()), dec!(3.7198)); + exchange_rates.insert(Exchange::USD("2020-12-15".to_string()), dec!(3.6554)); + exchange_rates.insert(Exchange::USD("2017-10-18".to_string()), dec!(3.6006)); + exchange_rates.insert(Exchange::USD("2025-10-28".to_string()), dec!(3.6327)); + exchange_rates.insert(Exchange::USD("2018-06-25".to_string()), dec!(3.7087)); + exchange_rates.insert(Exchange::EUR("2025-12-18".to_string()), dec!(4.2076)); + exchange_rates.insert(Exchange::USD("2017-10-09".to_string()), dec!(3.6743)); + exchange_rates.insert(Exchange::USD("2024-07-23".to_string()), dec!(3.9355)); + exchange_rates.insert(Exchange::USD("2023-02-10".to_string()), dec!(4.4565)); + exchange_rates.insert(Exchange::USD("2020-07-29".to_string()), dec!(3.761)); + exchange_rates.insert(Exchange::USD("2013-07-16".to_string()), dec!(3.2735)); + exchange_rates.insert(Exchange::USD("2012-01-26".to_string()), dec!(3.2233)); + exchange_rates.insert(Exchange::EUR("2024-09-16".to_string()), dec!(4.2753)); + exchange_rates.insert(Exchange::USD("2019-03-27".to_string()), dec!(3.8113)); + exchange_rates.insert(Exchange::USD("2023-04-17".to_string()), dec!(4.2261)); + exchange_rates.insert(Exchange::USD("2022-08-18".to_string()), dec!(4.6468)); + exchange_rates.insert(Exchange::USD("2018-11-22".to_string()), dec!(3.7764)); + exchange_rates.insert(Exchange::USD("2014-03-03".to_string()), dec!(3.0462)); + exchange_rates.insert(Exchange::USD("2013-12-23".to_string()), dec!(3.0443)); + exchange_rates.insert(Exchange::EUR("2024-07-03".to_string()), dec!(4.3021)); + exchange_rates.insert(Exchange::USD("2024-06-26".to_string()), dec!(4.0291)); + exchange_rates.insert(Exchange::USD("2020-12-14".to_string()), dec!(3.6548)); + exchange_rates.insert(Exchange::EUR("2025-10-23".to_string()), dec!(4.2347)); + exchange_rates.insert(Exchange::USD("2014-07-22".to_string()), dec!(3.0748)); + exchange_rates.insert(Exchange::EUR("2025-05-29".to_string()), dec!(4.2369)); + exchange_rates.insert(Exchange::USD("2021-04-08".to_string()), dec!(3.8365)); + exchange_rates.insert(Exchange::USD("2021-01-05".to_string()), dec!(3.7031)); + exchange_rates.insert(Exchange::USD("2018-02-16".to_string()), dec!(3.3173)); + exchange_rates.insert(Exchange::USD("2024-05-07".to_string()), dec!(4.0056)); + exchange_rates.insert(Exchange::USD("2014-03-17".to_string()), dec!(3.043)); + exchange_rates.insert(Exchange::EUR("2024-05-08".to_string()), dec!(4.3195)); + exchange_rates.insert(Exchange::USD("2018-10-15".to_string()), dec!(3.7091)); + exchange_rates.insert(Exchange::USD("2014-12-01".to_string()), dec!(3.3519)); + exchange_rates.insert(Exchange::USD("2025-09-12".to_string()), dec!(3.635)); + exchange_rates.insert(Exchange::USD("2012-03-12".to_string()), dec!(3.1285)); + exchange_rates.insert(Exchange::USD("2020-06-29".to_string()), dec!(3.9656)); + exchange_rates.insert(Exchange::USD("2016-12-30".to_string()), dec!(4.1793)); + exchange_rates.insert(Exchange::USD("2016-05-04".to_string()), dec!(3.83)); + exchange_rates.insert(Exchange::USD("2015-01-05".to_string()), dec!(3.5975)); + exchange_rates.insert(Exchange::EUR("2025-12-15".to_string()), dec!(4.2192)); + exchange_rates.insert(Exchange::USD("2015-07-15".to_string()), dec!(3.747)); + exchange_rates.insert(Exchange::USD("2024-06-07".to_string()), dec!(3.9389)); + exchange_rates.insert(Exchange::EUR("2023-08-14".to_string()), dec!(4.4361)); + exchange_rates.insert(Exchange::EUR("2023-09-07".to_string()), dec!(4.594)); + exchange_rates.insert(Exchange::EUR("2025-01-09".to_string()), dec!(4.2794)); + exchange_rates.insert(Exchange::USD("2014-03-06".to_string()), dec!(3.0427)); + exchange_rates.insert(Exchange::USD("2013-04-10".to_string()), dec!(3.1405)); + exchange_rates.insert(Exchange::USD("2014-12-17".to_string()), dec!(3.3928)); + exchange_rates.insert(Exchange::USD("2022-06-15".to_string()), dec!(4.4455)); + exchange_rates.insert(Exchange::EUR("2024-04-10".to_string()), dec!(4.2641)); + exchange_rates.insert(Exchange::USD("2013-06-06".to_string()), dec!(3.2564)); + exchange_rates.insert(Exchange::USD("2017-07-24".to_string()), dec!(3.6395)); + exchange_rates.insert(Exchange::USD("2018-08-14".to_string()), dec!(3.7768)); + exchange_rates.insert(Exchange::USD("2019-08-30".to_string()), dec!(3.9717)); + exchange_rates.insert(Exchange::USD("2013-02-20".to_string()), dec!(3.1002)); + exchange_rates.insert(Exchange::EUR("2023-10-27".to_string()), dec!(4.4642)); + exchange_rates.insert(Exchange::EUR("2023-11-17".to_string()), dec!(4.3767)); + exchange_rates.insert(Exchange::USD("2022-04-22".to_string()), dec!(4.2935)); + exchange_rates.insert(Exchange::USD("2021-03-24".to_string()), dec!(3.9098)); + exchange_rates.insert(Exchange::USD("2020-04-15".to_string()), dec!(4.1519)); + exchange_rates.insert(Exchange::USD("2018-08-17".to_string()), dec!(3.7784)); + exchange_rates.insert(Exchange::USD("2016-04-04".to_string()), dec!(3.7254)); + exchange_rates.insert(Exchange::USD("2012-06-29".to_string()), dec!(3.3885)); + exchange_rates.insert(Exchange::USD("2024-08-26".to_string()), dec!(3.8284)); + exchange_rates.insert(Exchange::USD("2013-10-29".to_string()), dec!(3.0436)); + exchange_rates.insert(Exchange::EUR("2025-08-18".to_string()), dec!(4.2558)); + exchange_rates.insert(Exchange::USD("2013-01-18".to_string()), dec!(3.0925)); + exchange_rates.insert(Exchange::USD("2023-01-12".to_string()), dec!(4.3556)); + exchange_rates.insert(Exchange::USD("2018-06-13".to_string()), dec!(3.6461)); + exchange_rates.insert(Exchange::USD("2016-11-22".to_string()), dec!(4.1507)); + exchange_rates.insert(Exchange::USD("2016-10-13".to_string()), dec!(3.9164)); + exchange_rates.insert(Exchange::USD("2022-06-10".to_string()), dec!(4.3363)); + exchange_rates.insert(Exchange::USD("2013-11-29".to_string()), dec!(3.0846)); + exchange_rates.insert(Exchange::USD("2016-09-21".to_string()), dec!(3.8601)); + exchange_rates.insert(Exchange::USD("2023-08-25".to_string()), dec!(4.1419)); + exchange_rates.insert(Exchange::USD("2019-03-19".to_string()), dec!(3.7823)); + exchange_rates.insert(Exchange::EUR("2024-03-27".to_string()), dec!(4.3153)); + exchange_rates.insert(Exchange::USD("2017-08-25".to_string()), dec!(3.6112)); + exchange_rates.insert(Exchange::USD("2016-11-23".to_string()), dec!(4.1588)); + exchange_rates.insert(Exchange::USD("2017-10-25".to_string()), dec!(3.6006)); + exchange_rates.insert(Exchange::USD("2016-09-15".to_string()), dec!(3.8587)); + exchange_rates.insert(Exchange::USD("2023-02-27".to_string()), dec!(4.4697)); + exchange_rates.insert(Exchange::USD("2022-12-05".to_string()), dec!(4.4415)); + exchange_rates.insert(Exchange::USD("2018-08-23".to_string()), dec!(3.7069)); + exchange_rates.insert(Exchange::USD("2013-06-19".to_string()), dec!(3.1777)); + exchange_rates.insert(Exchange::USD("2015-10-15".to_string()), dec!(3.6948)); + exchange_rates.insert(Exchange::USD("2025-09-10".to_string()), dec!(3.6414)); + exchange_rates.insert(Exchange::USD("2014-06-12".to_string()), dec!(3.0374)); + exchange_rates.insert(Exchange::USD("2019-08-20".to_string()), dec!(3.9408)); + exchange_rates.insert(Exchange::USD("2015-03-30".to_string()), dec!(3.7685)); + exchange_rates.insert(Exchange::USD("2025-10-13".to_string()), dec!(3.6763)); + exchange_rates.insert(Exchange::USD("2019-04-05".to_string()), dec!(3.8215)); + exchange_rates.insert(Exchange::USD("2013-04-17".to_string()), dec!(3.1159)); + exchange_rates.insert(Exchange::USD("2012-09-28".to_string()), dec!(3.178)); + exchange_rates.insert(Exchange::USD("2013-11-05".to_string()), dec!(3.0981)); + exchange_rates.insert(Exchange::USD("2012-08-30".to_string()), dec!(3.3397)); + exchange_rates.insert(Exchange::USD("2016-05-10".to_string()), dec!(3.8853)); + exchange_rates.insert(Exchange::USD("2017-01-24".to_string()), dec!(4.0708)); + exchange_rates.insert(Exchange::USD("2017-07-20".to_string()), dec!(3.6604)); + exchange_rates.insert(Exchange::EUR("2024-10-23".to_string()), dec!(4.3344)); + exchange_rates.insert(Exchange::USD("2024-07-03".to_string()), dec!(3.999)); + exchange_rates.insert(Exchange::USD("2013-09-13".to_string()), dec!(3.1696)); + exchange_rates.insert(Exchange::USD("2015-06-19".to_string()), dec!(3.6879)); + exchange_rates.insert(Exchange::USD("2025-07-31".to_string()), dec!(3.7257)); + exchange_rates.insert(Exchange::USD("2020-06-05".to_string()), dec!(3.9217)); + exchange_rates.insert(Exchange::USD("2025-08-28".to_string()), dec!(3.6658)); + exchange_rates.insert(Exchange::USD("2013-10-14".to_string()), dec!(3.0936)); + exchange_rates.insert(Exchange::USD("2015-06-23".to_string()), dec!(3.704)); + exchange_rates.insert(Exchange::USD("2014-03-19".to_string()), dec!(3.0245)); + exchange_rates.insert(Exchange::USD("2018-01-24".to_string()), dec!(3.375)); + exchange_rates.insert(Exchange::USD("2018-03-08".to_string()), dec!(3.3935)); + exchange_rates.insert(Exchange::USD("2017-03-17".to_string()), dec!(3.9917)); + exchange_rates.insert(Exchange::USD("2013-04-03".to_string()), dec!(3.2693)); + exchange_rates.insert(Exchange::USD("2025-01-29".to_string()), dec!(4.0443)); + exchange_rates.insert(Exchange::USD("2013-07-23".to_string()), dec!(3.2001)); + exchange_rates.insert(Exchange::USD("2015-07-31".to_string()), dec!(3.7929)); + exchange_rates.insert(Exchange::USD("2013-07-24".to_string()), dec!(3.18)); + exchange_rates.insert(Exchange::USD("2015-05-04".to_string()), dec!(3.632)); + exchange_rates.insert(Exchange::EUR("2024-06-13".to_string()), dec!(4.3355)); + exchange_rates.insert(Exchange::USD("2018-06-18".to_string()), dec!(3.7003)); + exchange_rates.insert(Exchange::USD("2025-11-14".to_string()), dec!(3.6376)); + exchange_rates.insert(Exchange::USD("2015-06-09".to_string()), dec!(3.6975)); + exchange_rates.insert(Exchange::USD("2021-02-23".to_string()), dec!(3.7117)); + exchange_rates.insert(Exchange::EUR("2023-04-12".to_string()), dec!(4.666)); + exchange_rates.insert(Exchange::USD("2014-01-31".to_string()), dec!(3.1288)); + exchange_rates.insert(Exchange::USD("2018-11-02".to_string()), dec!(3.7804)); + exchange_rates.insert(Exchange::USD("2012-06-15".to_string()), dec!(3.3971)); + exchange_rates.insert(Exchange::USD("2018-07-04".to_string()), dec!(3.7759)); + exchange_rates.insert(Exchange::USD("2016-06-30".to_string()), dec!(3.9803)); + exchange_rates.insert(Exchange::USD("2014-06-09".to_string()), dec!(3.0067)); + exchange_rates.insert(Exchange::USD("2025-07-21".to_string()), dec!(3.6455)); + exchange_rates.insert(Exchange::USD("2019-03-05".to_string()), dec!(3.7977)); + exchange_rates.insert(Exchange::USD("2015-05-21".to_string()), dec!(3.6605)); + exchange_rates.insert(Exchange::USD("2012-07-13".to_string()), dec!(3.4463)); + exchange_rates.insert(Exchange::EUR("2023-04-21".to_string()), dec!(4.6039)); + exchange_rates.insert(Exchange::USD("2015-11-18".to_string()), dec!(3.9802)); + exchange_rates.insert(Exchange::EUR("2023-09-29".to_string()), dec!(4.6356)); + exchange_rates.insert(Exchange::USD("2012-02-22".to_string()), dec!(3.1635)); + exchange_rates.insert(Exchange::USD("2019-02-25".to_string()), dec!(3.8241)); + exchange_rates.insert(Exchange::USD("2024-09-04".to_string()), dec!(3.8738)); + exchange_rates.insert(Exchange::USD("2022-07-22".to_string()), dec!(4.692)); + exchange_rates.insert(Exchange::USD("2021-07-02".to_string()), dec!(3.8263)); + exchange_rates.insert(Exchange::USD("2023-09-29".to_string()), dec!(4.3697)); + exchange_rates.insert(Exchange::EUR("2024-12-23".to_string()), dec!(4.2621)); + exchange_rates.insert(Exchange::USD("2025-06-26".to_string()), dec!(3.6222)); + exchange_rates.insert(Exchange::USD("2025-04-18".to_string()), dec!(3.7661)); + exchange_rates.insert(Exchange::USD("2025-05-16".to_string()), dec!(3.7853)); + exchange_rates.insert(Exchange::USD("2013-05-16".to_string()), dec!(3.2521)); + exchange_rates.insert(Exchange::USD("2021-07-05".to_string()), dec!(3.7979)); + exchange_rates.insert(Exchange::USD("2012-03-29".to_string()), dec!(3.1234)); + exchange_rates.insert(Exchange::USD("2021-05-13".to_string()), dec!(3.7675)); + exchange_rates.insert(Exchange::USD("2014-09-19".to_string()), dec!(3.2507)); + exchange_rates.insert(Exchange::USD("2024-08-21".to_string()), dec!(3.8565)); + exchange_rates.insert(Exchange::USD("2025-04-17".to_string()), dec!(3.7684)); + exchange_rates.insert(Exchange::EUR("2023-05-26".to_string()), dec!(4.5242)); + exchange_rates.insert(Exchange::USD("2019-04-02".to_string()), dec!(3.8403)); + exchange_rates.insert(Exchange::USD("2015-09-21".to_string()), dec!(3.708)); + exchange_rates.insert(Exchange::USD("2020-09-17".to_string()), dec!(3.7713)); + exchange_rates.insert(Exchange::USD("2012-03-30".to_string()), dec!(3.1191)); + exchange_rates.insert(Exchange::USD("2014-09-22".to_string()), dec!(3.257)); + exchange_rates.insert(Exchange::USD("2017-03-10".to_string()), dec!(4.0761)); + exchange_rates.insert(Exchange::EUR("2025-07-22".to_string()), dec!(4.2531)); + exchange_rates.insert(Exchange::USD("2021-06-15".to_string()), dec!(3.7349)); + exchange_rates.insert(Exchange::USD("2022-03-09".to_string()), dec!(4.4147)); + exchange_rates.insert(Exchange::USD("2015-04-22".to_string()), dec!(3.7125)); + exchange_rates.insert(Exchange::USD("2016-06-09".to_string()), dec!(3.8126)); + exchange_rates.insert(Exchange::USD("2013-07-01".to_string()), dec!(3.321)); + exchange_rates.insert(Exchange::EUR("2023-09-08".to_string()), dec!(4.6019)); + exchange_rates.insert(Exchange::USD("2021-12-06".to_string()), dec!(4.0619)); + exchange_rates.insert(Exchange::USD("2021-01-14".to_string()), dec!(3.7323)); + exchange_rates.insert(Exchange::USD("2018-01-11".to_string()), dec!(3.495)); + exchange_rates.insert(Exchange::USD("2023-06-06".to_string()), dec!(4.1964)); + exchange_rates.insert(Exchange::USD("2020-03-30".to_string()), dec!(4.0933)); + exchange_rates.insert(Exchange::USD("2018-04-18".to_string()), dec!(3.3721)); + exchange_rates.insert(Exchange::EUR("2023-06-30".to_string()), dec!(4.4503)); + exchange_rates.insert(Exchange::EUR("2025-06-23".to_string()), dec!(4.2727)); + exchange_rates.insert(Exchange::EUR("2023-12-06".to_string()), dec!(4.3382)); + exchange_rates.insert(Exchange::USD("2024-09-12".to_string()), dec!(3.9025)); + exchange_rates.insert(Exchange::EUR("2024-01-02".to_string()), dec!(4.3434)); + exchange_rates.insert(Exchange::USD("2024-01-30".to_string()), dec!(4.0301)); + exchange_rates.insert(Exchange::USD("2017-09-29".to_string()), dec!(3.6519)); + exchange_rates.insert(Exchange::USD("2024-08-20".to_string()), dec!(3.8506)); + exchange_rates.insert(Exchange::USD("2012-04-04".to_string()), dec!(3.1503)); + exchange_rates.insert(Exchange::USD("2012-04-05".to_string()), dec!(3.1678)); + exchange_rates.insert(Exchange::USD("2012-08-24".to_string()), dec!(3.268)); + exchange_rates.insert(Exchange::USD("2012-11-14".to_string()), dec!(3.275)); + exchange_rates.insert(Exchange::EUR("2024-07-23".to_string()), dec!(4.281)); + exchange_rates.insert(Exchange::EUR("2025-05-23".to_string()), dec!(4.2541)); + exchange_rates.insert(Exchange::USD("2013-03-22".to_string()), dec!(3.2361)); + exchange_rates.insert(Exchange::USD("2016-12-06".to_string()), dec!(4.1825)); + exchange_rates.insert(Exchange::USD("2013-10-07".to_string()), dec!(3.0976)); + exchange_rates.insert(Exchange::USD("2012-10-08".to_string()), dec!(3.143)); + exchange_rates.insert(Exchange::USD("2017-06-01".to_string()), dec!(3.7262)); + exchange_rates.insert(Exchange::USD("2014-08-28".to_string()), dec!(3.1834)); + exchange_rates.insert(Exchange::USD("2013-03-06".to_string()), dec!(3.166)); + exchange_rates.insert(Exchange::EUR("2024-12-13".to_string()), dec!(4.2722)); + exchange_rates.insert(Exchange::USD("2014-02-03".to_string()), dec!(3.137)); + exchange_rates.insert(Exchange::USD("2020-06-10".to_string()), dec!(3.918)); + exchange_rates.insert(Exchange::USD("2023-02-23".to_string()), dec!(4.4873)); + exchange_rates.insert(Exchange::USD("2019-01-28".to_string()), dec!(3.7592)); + exchange_rates.insert(Exchange::USD("2016-04-29".to_string()), dec!(3.8738)); + exchange_rates.insert(Exchange::USD("2016-09-28".to_string()), dec!(3.8264)); + exchange_rates.insert(Exchange::EUR("2024-10-29".to_string()), dec!(4.3542)); + exchange_rates.insert(Exchange::USD("2012-05-02".to_string()), dec!(3.1593)); + exchange_rates.insert(Exchange::EUR("2023-07-14".to_string()), dec!(4.4486)); + exchange_rates.insert(Exchange::USD("2023-11-17".to_string()), dec!(4.0327)); + exchange_rates.insert(Exchange::USD("2016-10-20".to_string()), dec!(3.9359)); + exchange_rates.insert(Exchange::USD("2015-12-01".to_string()), dec!(4.0248)); + exchange_rates.insert(Exchange::USD("2018-04-09".to_string()), dec!(3.4174)); + exchange_rates.insert(Exchange::USD("2012-04-12".to_string()), dec!(3.1818)); + exchange_rates.insert(Exchange::USD("2020-05-28".to_string()), dec!(4.0244)); + exchange_rates.insert(Exchange::USD("2015-01-19".to_string()), dec!(3.7176)); + exchange_rates.insert(Exchange::USD("2023-04-12".to_string()), dec!(4.2713)); + exchange_rates.insert(Exchange::USD("2012-06-11".to_string()), dec!(3.4072)); + exchange_rates.insert(Exchange::USD("2016-06-17".to_string()), dec!(3.9412)); + exchange_rates.insert(Exchange::USD("2023-04-13".to_string()), dec!(4.2225)); + exchange_rates.insert(Exchange::USD("2016-07-15".to_string()), dec!(3.9598)); + exchange_rates.insert(Exchange::USD("2012-11-27".to_string()), dec!(3.1634)); + exchange_rates.insert(Exchange::USD("2014-04-09".to_string()), dec!(3.0221)); + exchange_rates.insert(Exchange::USD("2022-01-19".to_string()), dec!(3.993)); + exchange_rates.insert(Exchange::USD("2012-04-17".to_string()), dec!(3.1872)); + exchange_rates.insert(Exchange::USD("2023-11-02".to_string()), dec!(4.1963)); + exchange_rates.insert(Exchange::USD("2023-11-22".to_string()), dec!(4.018)); + exchange_rates.insert(Exchange::USD("2015-06-05".to_string()), dec!(3.6949)); + exchange_rates.insert(Exchange::USD("2024-10-04".to_string()), dec!(3.9118)); + exchange_rates.insert(Exchange::USD("2012-09-03".to_string()), dec!(3.3398)); + exchange_rates.insert(Exchange::USD("2012-10-10".to_string()), dec!(3.1695)); + exchange_rates.insert(Exchange::EUR("2025-03-18".to_string()), dec!(4.1776)); + exchange_rates.insert(Exchange::USD("2024-10-28".to_string()), dec!(4.0207)); + exchange_rates.insert(Exchange::USD("2022-04-27".to_string()), dec!(4.4453)); + exchange_rates.insert(Exchange::USD("2022-08-17".to_string()), dec!(4.6119)); + exchange_rates.insert(Exchange::USD("2021-01-26".to_string()), dec!(3.7512)); + exchange_rates.insert(Exchange::USD("2017-03-23".to_string()), dec!(3.9687)); + exchange_rates.insert(Exchange::USD("2021-12-14".to_string()), dec!(4.1088)); + exchange_rates.insert(Exchange::USD("2022-09-13".to_string()), dec!(4.6363)); + exchange_rates.insert(Exchange::USD("2018-10-25".to_string()), dec!(3.7796)); + exchange_rates.insert(Exchange::EUR("2024-01-12".to_string()), dec!(4.3574)); + exchange_rates.insert(Exchange::EUR("2024-09-11".to_string()), dec!(4.2864)); + exchange_rates.insert(Exchange::USD("2022-05-11".to_string()), dec!(4.419)); + exchange_rates.insert(Exchange::USD("2017-12-19".to_string()), dec!(3.5583)); + exchange_rates.insert(Exchange::USD("2020-09-07".to_string()), dec!(3.7666)); + exchange_rates.insert(Exchange::EUR("2023-02-23".to_string()), dec!(4.7525)); + exchange_rates.insert(Exchange::USD("2015-10-08".to_string()), dec!(3.7543)); + exchange_rates.insert(Exchange::USD("2012-04-13".to_string()), dec!(3.1765)); + exchange_rates.insert(Exchange::USD("2013-03-05".to_string()), dec!(3.1665)); + exchange_rates.insert(Exchange::USD("2018-03-20".to_string()), dec!(3.4296)); + exchange_rates.insert(Exchange::USD("2018-06-29".to_string()), dec!(3.744)); + exchange_rates.insert(Exchange::USD("2015-04-28".to_string()), dec!(3.6751)); + exchange_rates.insert(Exchange::EUR("2024-05-13".to_string()), dec!(4.2977)); + exchange_rates.insert(Exchange::USD("2020-05-25".to_string()), dec!(4.1428)); + exchange_rates.insert(Exchange::USD("2019-10-03".to_string()), dec!(3.9652)); + exchange_rates.insert(Exchange::USD("2024-04-25".to_string()), dec!(4.0276)); + exchange_rates.insert(Exchange::USD("2013-04-15".to_string()), dec!(3.1502)); + exchange_rates.insert(Exchange::USD("2016-11-09".to_string()), dec!(3.9305)); + exchange_rates.insert(Exchange::USD("2024-01-04".to_string()), dec!(3.9684)); + exchange_rates.insert(Exchange::EUR("2024-10-30".to_string()), dec!(4.335)); + exchange_rates.insert(Exchange::USD("2016-01-28".to_string()), dec!(4.0872)); + exchange_rates.insert(Exchange::USD("2014-01-16".to_string()), dec!(3.0566)); + exchange_rates.insert(Exchange::USD("2015-08-04".to_string()), dec!(3.7792)); + exchange_rates.insert(Exchange::EUR("2025-11-25".to_string()), dec!(4.2301)); + exchange_rates.insert(Exchange::USD("2025-07-04".to_string()), dec!(3.6108)); + exchange_rates.insert(Exchange::USD("2022-03-31".to_string()), dec!(4.1801)); + exchange_rates.insert(Exchange::USD("2012-09-05".to_string()), dec!(3.3693)); + exchange_rates.insert(Exchange::USD("2024-08-14".to_string()), dec!(3.8963)); + exchange_rates.insert(Exchange::USD("2021-01-04".to_string()), dec!(3.6998)); + exchange_rates.insert(Exchange::USD("2013-02-01".to_string()), dec!(3.0744)); + exchange_rates.insert(Exchange::USD("2015-07-14".to_string()), dec!(3.7645)); + exchange_rates.insert(Exchange::EUR("2025-04-08".to_string()), dec!(4.2946)); + exchange_rates.insert(Exchange::EUR("2023-01-31".to_string()), dec!(4.7089)); + exchange_rates.insert(Exchange::USD("2019-06-17".to_string()), dec!(3.7989)); + exchange_rates.insert(Exchange::USD("2024-03-27".to_string()), dec!(3.9857)); + exchange_rates.insert(Exchange::USD("2018-08-20".to_string()), dec!(3.7695)); + exchange_rates.insert(Exchange::USD("2014-11-21".to_string()), dec!(3.3827)); + exchange_rates.insert(Exchange::USD("2022-09-05".to_string()), dec!(4.769)); + exchange_rates.insert(Exchange::USD("2018-12-12".to_string()), dec!(3.7934)); + exchange_rates.insert(Exchange::USD("2013-01-11".to_string()), dec!(3.089)); + exchange_rates.insert(Exchange::EUR("2025-08-26".to_string()), dec!(4.2657)); + exchange_rates.insert(Exchange::USD("2024-05-02".to_string()), dec!(4.0474)); + exchange_rates.insert(Exchange::USD("2016-10-31".to_string()), dec!(3.9488)); + exchange_rates.insert(Exchange::USD("2016-12-01".to_string()), dec!(4.1987)); + exchange_rates.insert(Exchange::USD("2023-09-01".to_string()), dec!(4.1263)); + exchange_rates.insert(Exchange::USD("2024-05-09".to_string()), dec!(4.0076)); + exchange_rates.insert(Exchange::USD("2019-06-18".to_string()), dec!(3.8097)); + exchange_rates.insert(Exchange::USD("2025-03-06".to_string()), dec!(3.8674)); + exchange_rates.insert(Exchange::USD("2017-07-31".to_string()), dec!(3.6264)); + exchange_rates.insert(Exchange::USD("2014-01-28".to_string()), dec!(3.0635)); + exchange_rates.insert(Exchange::USD("2013-01-04".to_string()), dec!(3.17)); + exchange_rates.insert(Exchange::EUR("2023-05-08".to_string()), dec!(4.5671)); + exchange_rates.insert(Exchange::EUR("2024-03-25".to_string()), dec!(4.3091)); + exchange_rates.insert(Exchange::USD("2019-01-10".to_string()), dec!(3.736)); + exchange_rates.insert(Exchange::USD("2024-04-10".to_string()), dec!(3.9264)); + exchange_rates.insert(Exchange::USD("2024-01-12".to_string()), dec!(3.9746)); + exchange_rates.insert(Exchange::USD("2013-02-26".to_string()), dec!(3.1733)); + exchange_rates.insert(Exchange::USD("2023-02-15".to_string()), dec!(4.4372)); + exchange_rates.insert(Exchange::USD("2024-03-14".to_string()), dec!(3.9183)); + exchange_rates.insert(Exchange::USD("2022-10-14".to_string()), dec!(4.9569)); + exchange_rates.insert(Exchange::USD("2014-05-06".to_string()), dec!(3.0196)); + exchange_rates.insert(Exchange::USD("2021-03-15".to_string()), dec!(3.8429)); + exchange_rates.insert(Exchange::USD("2023-03-30".to_string()), dec!(4.3043)); + exchange_rates.insert(Exchange::USD("2021-06-22".to_string()), dec!(3.8132)); + exchange_rates.insert(Exchange::USD("2021-01-25".to_string()), dec!(3.7402)); + exchange_rates.insert(Exchange::USD("2018-02-28".to_string()), dec!(3.4188)); + exchange_rates.insert(Exchange::EUR("2024-01-24".to_string()), dec!(4.3755)); + exchange_rates.insert(Exchange::USD("2024-01-25".to_string()), dec!(4.0189)); + exchange_rates.insert(Exchange::USD("2014-10-09".to_string()), dec!(3.2776)); + exchange_rates.insert(Exchange::EUR("2025-02-19".to_string()), dec!(4.1582)); + exchange_rates.insert(Exchange::USD("2025-03-05".to_string()), dec!(3.8785)); + exchange_rates.insert(Exchange::USD("2024-04-11".to_string()), dec!(3.9707)); + exchange_rates.insert(Exchange::USD("2024-07-15".to_string()), dec!(3.896)); + exchange_rates.insert(Exchange::EUR("2025-12-08".to_string()), dec!(4.2289)); + exchange_rates.insert(Exchange::USD("2013-08-22".to_string()), dec!(3.1811)); + exchange_rates.insert(Exchange::EUR("2024-05-02".to_string()), dec!(4.3323)); + exchange_rates.insert(Exchange::USD("2013-02-11".to_string()), dec!(3.0991)); + exchange_rates.insert(Exchange::EUR("2025-06-16".to_string()), dec!(4.2612)); + exchange_rates.insert(Exchange::USD("2017-08-14".to_string()), dec!(3.6278)); + exchange_rates.insert(Exchange::USD("2025-01-14".to_string()), dec!(4.1658)); + exchange_rates.insert(Exchange::USD("2012-01-03".to_string()), dec!(3.4277)); + exchange_rates.insert(Exchange::USD("2016-12-02".to_string()), dec!(4.215)); + exchange_rates.insert(Exchange::USD("2018-08-31".to_string()), dec!(3.6808)); + exchange_rates.insert(Exchange::USD("2025-12-03".to_string()), dec!(3.6333)); + exchange_rates.insert(Exchange::USD("2020-02-12".to_string()), dec!(3.901)); + exchange_rates.insert(Exchange::USD("2013-02-05".to_string()), dec!(3.0831)); + exchange_rates.insert(Exchange::USD("2016-03-15".to_string()), dec!(3.8649)); + exchange_rates.insert(Exchange::USD("2015-09-15".to_string()), dec!(3.7238)); + exchange_rates.insert(Exchange::USD("2013-06-28".to_string()), dec!(3.3175)); + exchange_rates.insert(Exchange::USD("2012-08-17".to_string()), dec!(3.2886)); + exchange_rates.insert(Exchange::USD("2015-07-16".to_string()), dec!(3.7694)); + exchange_rates.insert(Exchange::USD("2025-10-02".to_string()), dec!(3.621)); + exchange_rates.insert(Exchange::USD("2014-08-12".to_string()), dec!(3.1465)); + exchange_rates.insert(Exchange::USD("2012-10-04".to_string()), dec!(3.1646)); + exchange_rates.insert(Exchange::USD("2016-05-17".to_string()), dec!(3.8508)); + exchange_rates.insert(Exchange::USD("2018-06-22".to_string()), dec!(3.6977)); + exchange_rates.insert(Exchange::USD("2022-01-21".to_string()), dec!(3.9953)); + exchange_rates.insert(Exchange::USD("2019-08-29".to_string()), dec!(3.9586)); + exchange_rates.insert(Exchange::USD("2021-03-10".to_string()), dec!(3.842)); + exchange_rates.insert(Exchange::USD("2018-06-07".to_string()), dec!(3.6062)); + exchange_rates.insert(Exchange::USD("2016-07-25".to_string()), dec!(3.9697)); + exchange_rates.insert(Exchange::USD("2024-02-02".to_string()), dec!(3.9641)); + exchange_rates.insert(Exchange::USD("2020-11-04".to_string()), dec!(3.8996)); + exchange_rates.insert(Exchange::USD("2014-01-09".to_string()), dec!(3.0695)); + exchange_rates.insert(Exchange::USD("2014-01-17".to_string()), dec!(3.0596)); + exchange_rates.insert(Exchange::USD("2013-07-15".to_string()), dec!(3.2955)); + exchange_rates.insert(Exchange::USD("2025-07-15".to_string()), dec!(3.6396)); + exchange_rates.insert(Exchange::USD("2017-07-04".to_string()), dec!(3.7372)); + exchange_rates.insert(Exchange::USD("2013-06-27".to_string()), dec!(3.3241)); + exchange_rates.insert(Exchange::USD("2014-09-12".to_string()), dec!(3.2468)); + exchange_rates.insert(Exchange::USD("2016-06-01".to_string()), dec!(3.935)); + exchange_rates.insert(Exchange::USD("2019-06-19".to_string()), dec!(3.8104)); + exchange_rates.insert(Exchange::EUR("2023-02-08".to_string()), dec!(4.7402)); + exchange_rates.insert(Exchange::USD("2018-02-20".to_string()), dec!(3.3597)); + exchange_rates.insert(Exchange::USD("2024-06-17".to_string()), dec!(4.0728)); + exchange_rates.insert(Exchange::USD("2016-08-09".to_string()), dec!(3.8482)); + exchange_rates.insert(Exchange::EUR("2025-02-27".to_string()), dec!(4.1371)); + exchange_rates.insert(Exchange::EUR("2025-07-08".to_string()), dec!(4.2455)); + exchange_rates.insert(Exchange::EUR("2025-09-02".to_string()), dec!(4.2651)); + exchange_rates.insert(Exchange::USD("2017-03-20".to_string()), dec!(3.9821)); + exchange_rates.insert(Exchange::USD("2018-02-15".to_string()), dec!(3.3259)); + exchange_rates.insert(Exchange::EUR("2023-02-07".to_string()), dec!(4.7476)); + exchange_rates.insert(Exchange::USD("2021-06-08".to_string()), dec!(3.669)); + exchange_rates.insert(Exchange::USD("2014-05-02".to_string()), dec!(3.0289)); + exchange_rates.insert(Exchange::USD("2012-01-23".to_string()), dec!(3.3353)); + exchange_rates.insert(Exchange::USD("2016-03-29".to_string()), dec!(3.8037)); + exchange_rates.insert(Exchange::USD("2025-02-27".to_string()), dec!(3.9459)); + exchange_rates.insert(Exchange::USD("2019-03-11".to_string()), dec!(3.8199)); + exchange_rates.insert(Exchange::EUR("2023-11-09".to_string()), dec!(4.4413)); + exchange_rates.insert(Exchange::USD("2025-08-11".to_string()), dec!(3.6495)); + exchange_rates.insert(Exchange::USD("2023-01-05".to_string()), dec!(4.397)); + exchange_rates.insert(Exchange::USD("2024-02-05".to_string()), dec!(4.0244)); + exchange_rates.insert(Exchange::USD("2013-12-06".to_string()), dec!(3.0673)); + exchange_rates.insert(Exchange::EUR("2023-10-25".to_string()), dec!(4.4758)); + exchange_rates.insert(Exchange::EUR("2024-02-26".to_string()), dec!(4.3117)); + exchange_rates.insert(Exchange::USD("2024-11-21".to_string()), dec!(4.1332)); + exchange_rates.insert(Exchange::USD("2014-12-05".to_string()), dec!(3.3619)); + exchange_rates.insert(Exchange::USD("2020-02-13".to_string()), dec!(3.9104)); + exchange_rates.insert(Exchange::USD("2020-10-08".to_string()), dec!(3.8175)); + exchange_rates.insert(Exchange::USD("2013-01-14".to_string()), dec!(3.0828)); + exchange_rates.insert(Exchange::USD("2013-12-10".to_string()), dec!(3.0425)); + exchange_rates.insert(Exchange::USD("2024-12-06".to_string()), dec!(4.0341)); + exchange_rates.insert(Exchange::USD("2018-04-05".to_string()), dec!(3.4301)); + exchange_rates.insert(Exchange::USD("2020-06-02".to_string()), dec!(3.9303)); + exchange_rates.insert(Exchange::EUR("2025-09-23".to_string()), dec!(4.2552)); + exchange_rates.insert(Exchange::USD("2017-01-11".to_string()), dec!(4.1465)); + exchange_rates.insert(Exchange::EUR("2025-05-19".to_string()), dec!(4.2785)); + exchange_rates.insert(Exchange::USD("2022-03-07".to_string()), dec!(4.5722)); + exchange_rates.insert(Exchange::EUR("2024-07-30".to_string()), dec!(4.2845)); + exchange_rates.insert(Exchange::EUR("2023-01-02".to_string()), dec!(4.6784)); + exchange_rates.insert(Exchange::USD("2022-04-29".to_string()), dec!(4.4072)); + exchange_rates.insert(Exchange::USD("2018-02-22".to_string()), dec!(3.4009)); + exchange_rates.insert(Exchange::USD("2024-03-19".to_string()), dec!(3.9866)); + exchange_rates.insert(Exchange::USD("2016-07-18".to_string()), dec!(3.9853)); + exchange_rates.insert(Exchange::USD("2021-02-05".to_string()), dec!(3.7554)); + exchange_rates.insert(Exchange::EUR("2023-12-20".to_string()), dec!(4.3341)); + exchange_rates.insert(Exchange::EUR("2023-08-29".to_string()), dec!(4.469)); + exchange_rates.insert(Exchange::USD("2023-01-10".to_string()), dec!(4.372)); + exchange_rates.insert(Exchange::USD("2022-02-10".to_string()), dec!(3.9218)); + exchange_rates.insert(Exchange::USD("2018-04-06".to_string()), dec!(3.4315)); + exchange_rates.insert(Exchange::USD("2025-12-08".to_string()), dec!(3.63)); + exchange_rates.insert(Exchange::USD("2024-11-19".to_string()), dec!(4.1052)); + exchange_rates.insert(Exchange::USD("2019-08-01".to_string()), dec!(3.886)); + exchange_rates.insert(Exchange::USD("2024-09-02".to_string()), dec!(3.8684)); + exchange_rates.insert(Exchange::USD("2016-03-09".to_string()), dec!(3.9395)); + exchange_rates.insert(Exchange::USD("2023-08-14".to_string()), dec!(4.0525)); + exchange_rates.insert(Exchange::USD("2020-03-23".to_string()), dec!(4.2654)); + exchange_rates.insert(Exchange::USD("2018-07-27".to_string()), dec!(3.6937)); + exchange_rates.insert(Exchange::USD("2012-07-10".to_string()), dec!(3.4145)); + exchange_rates.insert(Exchange::EUR("2023-05-17".to_string()), dec!(4.4945)); + exchange_rates.insert(Exchange::USD("2018-12-10".to_string()), dec!(3.76)); + exchange_rates.insert(Exchange::USD("2017-01-31".to_string()), dec!(4.0446)); + exchange_rates.insert(Exchange::USD("2012-03-20".to_string()), dec!(3.1288)); + exchange_rates.insert(Exchange::EUR("2023-07-10".to_string()), dec!(4.4553)); + exchange_rates.insert(Exchange::USD("2022-06-30".to_string()), dec!(4.4825)); + exchange_rates.insert(Exchange::USD("2012-11-09".to_string()), dec!(3.2588)); + exchange_rates.insert(Exchange::USD("2018-02-19".to_string()), dec!(3.3411)); + exchange_rates.insert(Exchange::USD("2024-10-30".to_string()), dec!(3.9989)); + exchange_rates.insert(Exchange::USD("2019-02-14".to_string()), dec!(3.8516)); + exchange_rates.insert(Exchange::USD("2022-01-31".to_string()), dec!(4.1147)); + exchange_rates.insert(Exchange::USD("2018-07-12".to_string()), dec!(3.7055)); + exchange_rates.insert(Exchange::USD("2019-08-19".to_string()), dec!(3.9199)); + exchange_rates.insert(Exchange::USD("2025-09-17".to_string()), dec!(3.5919)); + exchange_rates.insert(Exchange::USD("2015-06-17".to_string()), dec!(3.6873)); + exchange_rates.insert(Exchange::USD("2012-06-14".to_string()), dec!(3.442)); + exchange_rates.insert(Exchange::EUR("2023-08-04".to_string()), dec!(4.4438)); + exchange_rates.insert(Exchange::USD("2017-04-24".to_string()), dec!(3.906)); + exchange_rates.insert(Exchange::USD("2020-05-11".to_string()), dec!(4.2126)); + exchange_rates.insert(Exchange::USD("2022-12-12".to_string()), dec!(4.4424)); + exchange_rates.insert(Exchange::EUR("2023-10-16".to_string()), dec!(4.4804)); + exchange_rates.insert(Exchange::USD("2012-01-09".to_string()), dec!(3.515)); + exchange_rates.insert(Exchange::USD("2025-04-24".to_string()), dec!(3.7599)); + exchange_rates.insert(Exchange::USD("2023-08-22".to_string()), dec!(4.0924)); + exchange_rates.insert(Exchange::USD("2017-11-15".to_string()), dec!(3.5886)); + exchange_rates.insert(Exchange::USD("2018-06-27".to_string()), dec!(3.7351)); + exchange_rates.insert(Exchange::USD("2015-12-11".to_string()), dec!(3.9718)); + exchange_rates.insert(Exchange::USD("2013-09-03".to_string()), dec!(3.2433)); + exchange_rates.insert(Exchange::USD("2017-11-20".to_string()), dec!(3.5909)); + exchange_rates.insert(Exchange::EUR("2023-11-03".to_string()), dec!(4.4569)); + exchange_rates.insert(Exchange::EUR("2025-11-20".to_string()), dec!(4.2289)); + exchange_rates.insert(Exchange::USD("2019-06-28".to_string()), dec!(3.7336)); + exchange_rates.insert(Exchange::USD("2022-06-22".to_string()), dec!(4.4338)); + exchange_rates.insert(Exchange::USD("2016-09-29".to_string()), dec!(3.8354)); + exchange_rates.insert(Exchange::EUR("2025-08-29".to_string()), dec!(4.2684)); + exchange_rates.insert(Exchange::USD("2025-04-10".to_string()), dec!(3.8637)); + exchange_rates.insert(Exchange::USD("2018-05-15".to_string()), dec!(3.5931)); + exchange_rates.insert(Exchange::USD("2018-12-06".to_string()), dec!(3.7844)); + exchange_rates.insert(Exchange::USD("2017-10-12".to_string()), dec!(3.6)); + exchange_rates.insert(Exchange::USD("2019-03-18".to_string()), dec!(3.7876)); + exchange_rates.insert(Exchange::USD("2016-03-11".to_string()), dec!(3.8903)); + exchange_rates.insert(Exchange::USD("2023-01-18".to_string()), dec!(4.3322)); + exchange_rates.insert(Exchange::USD("2018-11-27".to_string()), dec!(3.7948)); + exchange_rates.insert(Exchange::USD("2016-10-10".to_string()), dec!(3.8307)); + exchange_rates.insert(Exchange::USD("2020-05-22".to_string()), dec!(4.1503)); + exchange_rates.insert(Exchange::EUR("2024-12-18".to_string()), dec!(4.2628)); + exchange_rates.insert(Exchange::EUR("2025-02-14".to_string()), dec!(4.1632)); + exchange_rates.insert(Exchange::USD("2021-10-20".to_string()), dec!(3.9428)); + exchange_rates.insert(Exchange::USD("2023-07-17".to_string()), dec!(3.9616)); + exchange_rates.insert(Exchange::USD("2021-05-10".to_string()), dec!(3.7493)); + exchange_rates.insert(Exchange::EUR("2024-11-15".to_string()), dec!(4.3198)); + exchange_rates.insert(Exchange::USD("2025-06-02".to_string()), dec!(3.7282)); + exchange_rates.insert(Exchange::EUR("2025-01-02".to_string()), dec!(4.2668)); + exchange_rates.insert(Exchange::USD("2013-06-12".to_string()), dec!(3.2002)); + exchange_rates.insert(Exchange::USD("2020-06-18".to_string()), dec!(3.9589)); + exchange_rates.insert(Exchange::USD("2017-11-09".to_string()), dec!(3.6466)); + exchange_rates.insert(Exchange::USD("2013-09-04".to_string()), dec!(3.2387)); + exchange_rates.insert(Exchange::USD("2023-10-23".to_string()), dec!(4.2022)); + exchange_rates.insert(Exchange::USD("2024-02-22".to_string()), dec!(3.9804)); + exchange_rates.insert(Exchange::USD("2018-08-07".to_string()), dec!(3.6722)); + exchange_rates.insert(Exchange::USD("2016-09-09".to_string()), dec!(3.8385)); + exchange_rates.insert(Exchange::USD("2025-12-17".to_string()), dec!(3.5976)); + exchange_rates.insert(Exchange::USD("2018-12-04".to_string()), dec!(3.7516)); + exchange_rates.insert(Exchange::USD("2018-12-31".to_string()), dec!(3.7597)); + exchange_rates.insert(Exchange::USD("2019-07-23".to_string()), dec!(3.7997)); + exchange_rates.insert(Exchange::USD("2012-03-26".to_string()), dec!(3.1348)); + exchange_rates.insert(Exchange::EUR("2024-06-19".to_string()), dec!(4.3376)); + exchange_rates.insert(Exchange::USD("2012-10-05".to_string()), dec!(3.1353)); + exchange_rates.insert(Exchange::USD("2021-08-19".to_string()), dec!(3.9226)); + exchange_rates.insert(Exchange::EUR("2023-02-14".to_string()), dec!(4.7847)); + exchange_rates.insert(Exchange::EUR("2024-05-29".to_string()), dec!(4.2529)); + exchange_rates.insert(Exchange::USD("2024-11-27".to_string()), dec!(4.0974)); + exchange_rates.insert(Exchange::USD("2017-05-02".to_string()), dec!(3.8675)); + exchange_rates.insert(Exchange::USD("2024-10-23".to_string()), dec!(4.0176)); + exchange_rates.insert(Exchange::EUR("2025-04-04".to_string()), dec!(4.2403)); + exchange_rates.insert(Exchange::USD("2014-07-10".to_string()), dec!(3.0323)); + exchange_rates.insert(Exchange::USD("2018-11-28".to_string()), dec!(3.8114)); + exchange_rates.insert(Exchange::USD("2012-10-02".to_string()), dec!(3.1833)); + exchange_rates.insert(Exchange::USD("2018-07-23".to_string()), dec!(3.6957)); + exchange_rates.insert(Exchange::USD("2021-09-20".to_string()), dec!(3.9282)); + exchange_rates.insert(Exchange::EUR("2024-12-20".to_string()), dec!(4.2572)); + exchange_rates.insert(Exchange::USD("2016-01-21".to_string()), dec!(4.1303)); + exchange_rates.insert(Exchange::USD("2022-12-23".to_string()), dec!(4.37)); + exchange_rates.insert(Exchange::USD("2025-07-29".to_string()), dec!(3.6941)); + exchange_rates.insert(Exchange::USD("2015-07-17".to_string()), dec!(3.7676)); + exchange_rates.insert(Exchange::USD("2017-09-25".to_string()), dec!(3.5866)); + exchange_rates.insert(Exchange::EUR("2024-03-26".to_string()), dec!(4.3093)); + exchange_rates.insert(Exchange::USD("2022-09-06".to_string()), dec!(4.7367)); + exchange_rates.insert(Exchange::EUR("2024-08-30".to_string()), dec!(4.2798)); + exchange_rates.insert(Exchange::EUR("2024-02-12".to_string()), dec!(4.328)); + exchange_rates.insert(Exchange::USD("2022-04-20".to_string()), dec!(4.2708)); + exchange_rates.insert(Exchange::USD("2024-01-24".to_string()), dec!(4.0131)); + exchange_rates.insert(Exchange::EUR("2024-06-06".to_string()), dec!(4.2997)); + exchange_rates.insert(Exchange::EUR("2023-10-26".to_string()), dec!(4.4708)); + exchange_rates.insert(Exchange::EUR("2025-08-08".to_string()), dec!(4.2566)); + exchange_rates.insert(Exchange::USD("2015-06-25".to_string()), dec!(3.7305)); + exchange_rates.insert(Exchange::USD("2017-06-14".to_string()), dec!(3.7497)); + exchange_rates.insert(Exchange::USD("2022-10-28".to_string()), dec!(4.7477)); + exchange_rates.insert(Exchange::USD("2022-02-25".to_string()), dec!(4.1683)); + exchange_rates.insert(Exchange::USD("2018-10-16".to_string()), dec!(3.7036)); + exchange_rates.insert(Exchange::USD("2023-02-21".to_string()), dec!(4.4524)); + exchange_rates.insert(Exchange::USD("2014-04-07".to_string()), dec!(3.0446)); + exchange_rates.insert(Exchange::USD("2014-05-28".to_string()), dec!(3.0598)); + exchange_rates.insert(Exchange::USD("2013-10-02".to_string()), dec!(3.1212)); + exchange_rates.insert(Exchange::USD("2023-03-06".to_string()), dec!(4.4289)); + exchange_rates.insert(Exchange::EUR("2023-04-06".to_string()), dec!(4.6902)); + exchange_rates.insert(Exchange::USD("2021-10-04".to_string()), dec!(3.9368)); + exchange_rates.insert(Exchange::USD("2021-09-08".to_string()), dec!(3.8213)); + exchange_rates.insert(Exchange::USD("2025-08-29".to_string()), dec!(3.6559)); + exchange_rates.insert(Exchange::USD("2024-04-17".to_string()), dec!(4.0741)); + exchange_rates.insert(Exchange::USD("2017-07-27".to_string()), dec!(3.6366)); + exchange_rates.insert(Exchange::USD("2012-03-22".to_string()), dec!(3.168)); + exchange_rates.insert(Exchange::USD("2020-08-28".to_string()), dec!(3.6983)); + exchange_rates.insert(Exchange::USD("2018-03-21".to_string()), dec!(3.4544)); + exchange_rates.insert(Exchange::USD("2013-03-15".to_string()), dec!(3.1868)); + exchange_rates.insert(Exchange::USD("2019-02-06".to_string()), dec!(3.7706)); + exchange_rates.insert(Exchange::USD("2022-10-24".to_string()), dec!(4.8669)); + exchange_rates.insert(Exchange::USD("2023-10-18".to_string()), dec!(4.2035)); + exchange_rates.insert(Exchange::USD("2023-04-11".to_string()), dec!(4.2917)); + exchange_rates.insert(Exchange::USD("2023-12-22".to_string()), dec!(3.9338)); + exchange_rates.insert(Exchange::USD("2014-04-17".to_string()), dec!(3.0317)); + exchange_rates.insert(Exchange::USD("2025-01-28".to_string()), dec!(4.0337)); + exchange_rates.insert(Exchange::USD("2025-11-26".to_string()), dec!(3.6578)); + exchange_rates.insert(Exchange::USD("2012-05-24".to_string()), dec!(3.4779)); + exchange_rates.insert(Exchange::USD("2022-09-21".to_string()), dec!(4.7919)); + exchange_rates.insert(Exchange::USD("2013-12-20".to_string()), dec!(3.0525)); + exchange_rates.insert(Exchange::USD("2017-04-14".to_string()), dec!(3.9911)); + exchange_rates.insert(Exchange::EUR("2025-11-24".to_string()), dec!(4.2345)); + exchange_rates.insert(Exchange::EUR("2025-03-04".to_string()), dec!(4.1568)); + exchange_rates.insert(Exchange::EUR("2023-09-15".to_string()), dec!(4.6307)); + exchange_rates.insert(Exchange::EUR("2023-11-13".to_string()), dec!(4.4336)); + exchange_rates.insert(Exchange::USD("2012-12-10".to_string()), dec!(3.1978)); + exchange_rates.insert(Exchange::USD("2012-12-17".to_string()), dec!(3.1035)); + exchange_rates.insert(Exchange::EUR("2024-09-19".to_string()), dec!(4.2693)); + exchange_rates.insert(Exchange::USD("2022-01-10".to_string()), dec!(4.0064)); + exchange_rates.insert(Exchange::USD("2016-04-14".to_string()), dec!(3.8174)); + exchange_rates.insert(Exchange::EUR("2024-05-06".to_string()), dec!(4.3294)); + exchange_rates.insert(Exchange::USD("2012-07-11".to_string()), dec!(3.4007)); + exchange_rates.insert(Exchange::USD("2019-02-04".to_string()), dec!(3.7408)); + exchange_rates.insert(Exchange::USD("2015-05-18".to_string()), dec!(3.555)); + exchange_rates.insert(Exchange::EUR("2023-08-30".to_string()), dec!(4.474)); + exchange_rates.insert(Exchange::USD("2025-04-29".to_string()), dec!(3.7458)); + exchange_rates.insert(Exchange::USD("2018-07-26".to_string()), dec!(3.6649)); + exchange_rates.insert(Exchange::USD("2023-05-31".to_string()), dec!(4.2559)); + exchange_rates.insert(Exchange::USD("2013-07-03".to_string()), dec!(3.3516)); + exchange_rates.insert(Exchange::USD("2021-02-24".to_string()), dec!(3.7145)); + exchange_rates.insert(Exchange::USD("2015-05-28".to_string()), dec!(3.7858)); + exchange_rates.insert(Exchange::EUR("2024-07-25".to_string()), dec!(4.2971)); + exchange_rates.insert(Exchange::USD("2024-03-05".to_string()), dec!(3.9838)); + exchange_rates.insert(Exchange::USD("2018-12-07".to_string()), dec!(3.7694)); + exchange_rates.insert(Exchange::USD("2024-03-07".to_string()), dec!(3.9485)); + exchange_rates.insert(Exchange::USD("2019-08-27".to_string()), dec!(3.9309)); + exchange_rates.insert(Exchange::USD("2018-05-22".to_string()), dec!(3.6252)); + exchange_rates.insert(Exchange::USD("2015-12-10".to_string()), dec!(3.9601)); + exchange_rates.insert(Exchange::USD("2014-12-10".to_string()), dec!(3.3572)); + exchange_rates.insert(Exchange::USD("2013-09-30".to_string()), dec!(3.1227)); + exchange_rates.insert(Exchange::USD("2021-01-11".to_string()), dec!(3.7271)); + exchange_rates.insert(Exchange::EUR("2024-06-20".to_string()), dec!(4.3238)); + exchange_rates.insert(Exchange::USD("2022-11-29".to_string()), dec!(4.5164)); + exchange_rates.insert(Exchange::USD("2018-12-13".to_string()), dec!(3.7739)); + exchange_rates.insert(Exchange::USD("2021-08-06".to_string()), dec!(3.8519)); + exchange_rates.insert(Exchange::USD("2023-12-20".to_string()), dec!(3.9527)); + exchange_rates.insert(Exchange::USD("2018-05-02".to_string()), dec!(3.5563)); + exchange_rates.insert(Exchange::USD("2016-07-14".to_string()), dec!(3.9681)); + exchange_rates.insert(Exchange::USD("2020-09-21".to_string()), dec!(3.7963)); + exchange_rates.insert(Exchange::USD("2016-01-22".to_string()), dec!(4.1031)); + exchange_rates.insert(Exchange::USD("2024-08-01".to_string()), dec!(3.9802)); + exchange_rates.insert(Exchange::USD("2015-12-15".to_string()), dec!(3.9523)); + exchange_rates.insert(Exchange::EUR("2025-09-03".to_string()), dec!(4.2589)); + exchange_rates.insert(Exchange::USD("2012-12-03".to_string()), dec!(3.1498)); + exchange_rates.insert(Exchange::EUR("2025-10-02".to_string()), dec!(4.256)); + exchange_rates.insert(Exchange::USD("2023-07-28".to_string()), dec!(4.0377)); + exchange_rates.insert(Exchange::USD("2019-06-05".to_string()), dec!(3.7929)); + exchange_rates.insert(Exchange::EUR("2024-05-23".to_string()), dec!(4.2699)); + exchange_rates.insert(Exchange::USD("2025-09-23".to_string()), dec!(3.605)); + exchange_rates.insert(Exchange::USD("2022-10-21".to_string()), dec!(4.9)); + exchange_rates.insert(Exchange::USD("2016-10-28".to_string()), dec!(3.9696)); + exchange_rates.insert(Exchange::USD("2025-10-10".to_string()), dec!(3.6778)); + exchange_rates.insert(Exchange::USD("2015-02-03".to_string()), dec!(3.6886)); + exchange_rates.insert(Exchange::EUR("2023-06-27".to_string()), dec!(4.4286)); + exchange_rates.insert(Exchange::USD("2025-01-30".to_string()), dec!(4.0393)); + exchange_rates.insert(Exchange::EUR("2025-10-28".to_string()), dec!(4.2345)); + exchange_rates.insert(Exchange::USD("2019-03-26".to_string()), dec!(3.7969)); + exchange_rates.insert(Exchange::EUR("2023-04-24".to_string()), dec!(4.6129)); + exchange_rates.insert(Exchange::USD("2025-02-21".to_string()), dec!(3.9835)); + exchange_rates.insert(Exchange::EUR("2025-12-16".to_string()), dec!(4.2239)); + exchange_rates.insert(Exchange::USD("2014-08-25".to_string()), dec!(3.168)); + exchange_rates.insert(Exchange::USD("2012-08-02".to_string()), dec!(3.3462)); + exchange_rates.insert(Exchange::USD("2021-06-11".to_string()), dec!(3.6759)); + exchange_rates.insert(Exchange::EUR("2025-12-22".to_string()), dec!(4.2115)); + exchange_rates.insert(Exchange::USD("2015-08-31".to_string()), dec!(3.778)); + exchange_rates.insert(Exchange::USD("2020-07-07".to_string()), dec!(3.9689)); + exchange_rates.insert(Exchange::USD("2022-12-13".to_string()), dec!(4.4527)); + exchange_rates.insert(Exchange::USD("2019-03-07".to_string()), dec!(3.8038)); + exchange_rates.insert(Exchange::EUR("2025-03-20".to_string()), dec!(4.1972)); + exchange_rates.insert(Exchange::USD("2015-08-20".to_string()), dec!(3.7659)); + exchange_rates.insert(Exchange::USD("2013-11-21".to_string()), dec!(3.1227)); + exchange_rates.insert(Exchange::USD("2022-10-11".to_string()), dec!(5.0171)); + exchange_rates.insert(Exchange::USD("2023-03-09".to_string()), dec!(4.4356)); + exchange_rates.insert(Exchange::USD("2018-12-11".to_string()), dec!(3.7763)); + exchange_rates.insert(Exchange::USD("2014-10-31".to_string()), dec!(3.3459)); + exchange_rates.insert(Exchange::USD("2023-01-09".to_string()), dec!(4.401)); + exchange_rates.insert(Exchange::USD("2021-07-12".to_string()), dec!(3.8378)); + exchange_rates.insert(Exchange::USD("2021-01-18".to_string()), dec!(3.7699)); + exchange_rates.insert(Exchange::EUR("2025-05-26".to_string()), dec!(4.2514)); + exchange_rates.insert(Exchange::USD("2022-09-02".to_string()), dec!(4.7276)); + exchange_rates.insert(Exchange::EUR("2023-12-13".to_string()), dec!(4.3309)); + exchange_rates.insert(Exchange::USD("2025-02-04".to_string()), dec!(4.0864)); + exchange_rates.insert(Exchange::USD("2019-02-20".to_string()), dec!(3.8221)); + exchange_rates.insert(Exchange::USD("2016-08-11".to_string()), dec!(3.8297)); + exchange_rates.insert(Exchange::USD("2020-06-09".to_string()), dec!(3.9453)); + exchange_rates.insert(Exchange::USD("2012-02-15".to_string()), dec!(3.166)); + exchange_rates.insert(Exchange::USD("2021-10-08".to_string()), dec!(3.9775)); + exchange_rates.insert(Exchange::USD("2016-10-26".to_string()), dec!(3.9517)); + exchange_rates.insert(Exchange::USD("2017-08-17".to_string()), dec!(3.6258)); + exchange_rates.insert(Exchange::USD("2012-08-14".to_string()), dec!(3.3059)); + exchange_rates.insert(Exchange::USD("2012-08-08".to_string()), dec!(3.304)); + exchange_rates.insert(Exchange::USD("2023-09-18".to_string()), dec!(4.3489)); + exchange_rates.insert(Exchange::USD("2014-09-24".to_string()), dec!(3.2525)); + exchange_rates.insert(Exchange::USD("2014-07-24".to_string()), dec!(3.0702)); + exchange_rates.insert(Exchange::USD("2020-10-06".to_string()), dec!(3.818)); + exchange_rates.insert(Exchange::EUR("2025-03-07".to_string()), dec!(4.176)); + exchange_rates.insert(Exchange::EUR("2023-09-14".to_string()), dec!(4.6285)); + exchange_rates.insert(Exchange::EUR("2024-06-27".to_string()), dec!(4.3085)); + exchange_rates.insert(Exchange::USD("2024-06-04".to_string()), dec!(3.9448)); + exchange_rates.insert(Exchange::USD("2024-01-26".to_string()), dec!(4.0393)); + exchange_rates.insert(Exchange::EUR("2025-02-17".to_string()), dec!(4.1635)); + exchange_rates.insert(Exchange::USD("2012-03-23".to_string()), dec!(3.1417)); + exchange_rates.insert(Exchange::USD("2017-10-31".to_string()), dec!(3.6529)); + exchange_rates.insert(Exchange::EUR("2023-03-16".to_string()), dec!(4.6978)); + exchange_rates.insert(Exchange::USD("2024-04-26".to_string()), dec!(4.0245)); + exchange_rates.insert(Exchange::USD("2025-08-22".to_string()), dec!(3.6786)); + exchange_rates.insert(Exchange::USD("2013-10-01".to_string()), dec!(3.117)); + exchange_rates.insert(Exchange::USD("2014-09-26".to_string()), dec!(3.2776)); + exchange_rates.insert(Exchange::USD("2024-07-19".to_string()), dec!(3.9461)); + exchange_rates.insert(Exchange::USD("2016-07-08".to_string()), dec!(4.0001)); + exchange_rates.insert(Exchange::USD("2017-01-18".to_string()), dec!(4.087)); + exchange_rates.insert(Exchange::USD("2016-06-27".to_string()), dec!(4.0263)); + exchange_rates.insert(Exchange::USD("2017-04-04".to_string()), dec!(3.989)); + exchange_rates.insert(Exchange::USD("2013-04-16".to_string()), dec!(3.1559)); + exchange_rates.insert(Exchange::USD("2015-10-22".to_string()), dec!(3.7806)); + exchange_rates.insert(Exchange::USD("2021-07-13".to_string()), dec!(3.8533)); + exchange_rates.insert(Exchange::USD("2013-12-13".to_string()), dec!(3.0432)); + exchange_rates.insert(Exchange::USD("2022-03-28".to_string()), dec!(4.2784)); + exchange_rates.insert(Exchange::EUR("2024-08-22".to_string()), dec!(4.285)); + exchange_rates.insert(Exchange::EUR("2025-04-28".to_string()), dec!(4.2766)); + exchange_rates.insert(Exchange::EUR("2024-02-07".to_string()), dec!(4.3466)); + exchange_rates.insert(Exchange::EUR("2025-02-13".to_string()), dec!(4.1652)); + exchange_rates.insert(Exchange::USD("2012-12-31".to_string()), dec!(3.0996)); + exchange_rates.insert(Exchange::USD("2019-08-12".to_string()), dec!(3.8711)); + exchange_rates.insert(Exchange::USD("2013-06-14".to_string()), dec!(3.1654)); + exchange_rates.insert(Exchange::USD("2015-04-14".to_string()), dec!(3.8001)); + exchange_rates.insert(Exchange::EUR("2023-01-12".to_string()), dec!(4.6888)); + exchange_rates.insert(Exchange::EUR("2023-11-23".to_string()), dec!(4.3658)); + exchange_rates.insert(Exchange::USD("2020-08-04".to_string()), dec!(3.7364)); + exchange_rates.insert(Exchange::USD("2025-05-22".to_string()), dec!(3.7559)); + exchange_rates.insert(Exchange::EUR("2025-09-09".to_string()), dec!(4.254)); + exchange_rates.insert(Exchange::USD("2018-09-11".to_string()), dec!(3.7087)); + exchange_rates.insert(Exchange::USD("2014-05-19".to_string()), dec!(3.0558)); + exchange_rates.insert(Exchange::USD("2022-11-16".to_string()), dec!(4.505)); + exchange_rates.insert(Exchange::EUR("2023-03-31".to_string()), dec!(4.6755)); + exchange_rates.insert(Exchange::USD("2025-06-16".to_string()), dec!(3.6804)); + exchange_rates.insert(Exchange::USD("2020-08-26".to_string()), dec!(3.7269)); + exchange_rates.insert(Exchange::USD("2019-04-11".to_string()), dec!(3.7964)); + exchange_rates.insert(Exchange::USD("2018-04-26".to_string()), dec!(3.4827)); + exchange_rates.insert(Exchange::USD("2018-11-20".to_string()), dec!(3.79)); + exchange_rates.insert(Exchange::USD("2018-11-13".to_string()), dec!(3.8268)); + exchange_rates.insert(Exchange::USD("2019-07-10".to_string()), dec!(3.8066)); + exchange_rates.insert(Exchange::USD("2017-01-25".to_string()), dec!(4.0585)); + exchange_rates.insert(Exchange::USD("2016-04-07".to_string()), dec!(3.7414)); + exchange_rates.insert(Exchange::USD("2025-07-23".to_string()), dec!(3.626)); + exchange_rates.insert(Exchange::USD("2017-12-22".to_string()), dec!(3.5393)); + exchange_rates.insert(Exchange::EUR("2025-07-24".to_string()), dec!(4.2514)); + exchange_rates.insert(Exchange::EUR("2023-08-16".to_string()), dec!(4.4621)); + exchange_rates.insert(Exchange::EUR("2024-02-23".to_string()), dec!(4.3326)); + exchange_rates.insert(Exchange::USD("2019-07-22".to_string()), dec!(3.7869)); + exchange_rates.insert(Exchange::USD("2021-09-07".to_string()), dec!(3.8041)); + exchange_rates.insert(Exchange::USD("2024-11-13".to_string()), dec!(4.0853)); + exchange_rates.insert(Exchange::USD("2016-12-14".to_string()), dec!(4.1768)); + exchange_rates.insert(Exchange::USD("2022-05-02".to_string()), dec!(4.4454)); + exchange_rates.insert(Exchange::USD("2019-08-08".to_string()), dec!(3.8538)); + exchange_rates.insert(Exchange::USD("2022-02-21".to_string()), dec!(3.9769)); + exchange_rates.insert(Exchange::EUR("2024-01-09".to_string()), dec!(4.3351)); + exchange_rates.insert(Exchange::USD("2020-03-31".to_string()), dec!(4.1466)); + exchange_rates.insert(Exchange::EUR("2024-09-20".to_string()), dec!(4.2779)); + exchange_rates.insert(Exchange::USD("2018-01-16".to_string()), dec!(3.419)); + exchange_rates.insert(Exchange::USD("2015-11-23".to_string()), dec!(3.988)); + exchange_rates.insert(Exchange::USD("2016-08-26".to_string()), dec!(3.8328)); + exchange_rates.insert(Exchange::USD("2023-07-13".to_string()), dec!(3.9724)); + exchange_rates.insert(Exchange::USD("2017-08-08".to_string()), dec!(3.6027)); + exchange_rates.insert(Exchange::USD("2012-02-14".to_string()), dec!(3.1801)); + exchange_rates.insert(Exchange::USD("2020-02-06".to_string()), dec!(3.8672)); + exchange_rates.insert(Exchange::USD("2013-11-15".to_string()), dec!(3.1172)); + exchange_rates.insert(Exchange::USD("2016-02-19".to_string()), dec!(3.9531)); + exchange_rates.insert(Exchange::USD("2025-11-05".to_string()), dec!(3.7091)); + exchange_rates.insert(Exchange::USD("2015-04-07".to_string()), dec!(3.7435)); + exchange_rates.insert(Exchange::USD("2013-02-28".to_string()), dec!(3.1679)); + exchange_rates.insert(Exchange::USD("2015-10-02".to_string()), dec!(3.8028)); + exchange_rates.insert(Exchange::USD("2015-12-17".to_string()), dec!(3.9646)); + exchange_rates.insert(Exchange::USD("2014-11-05".to_string()), dec!(3.3887)); + exchange_rates.insert(Exchange::USD("2024-06-10".to_string()), dec!(4.0159)); + exchange_rates.insert(Exchange::EUR("2024-04-17".to_string()), dec!(4.3353)); + exchange_rates.insert(Exchange::EUR("2024-10-15".to_string()), dec!(4.2913)); + exchange_rates.insert(Exchange::USD("2014-02-11".to_string()), dec!(3.0581)); + exchange_rates.insert(Exchange::EUR("2023-02-13".to_string()), dec!(4.7895)); + exchange_rates.insert(Exchange::USD("2024-10-15".to_string()), dec!(3.9332)); + exchange_rates.insert(Exchange::USD("2025-07-22".to_string()), dec!(3.6353)); + exchange_rates.insert(Exchange::USD("2023-12-13".to_string()), dec!(4.0149)); + exchange_rates.insert(Exchange::USD("2012-01-24".to_string()), dec!(3.297)); + exchange_rates.insert(Exchange::EUR("2024-10-22".to_string()), dec!(4.3159)); + exchange_rates.insert(Exchange::USD("2025-11-06".to_string()), dec!(3.6971)); + exchange_rates.insert(Exchange::USD("2021-07-23".to_string()), dec!(3.8851)); + exchange_rates.insert(Exchange::USD("2020-03-11".to_string()), dec!(3.8186)); + exchange_rates.insert(Exchange::EUR("2024-05-07".to_string()), dec!(4.3116)); + exchange_rates.insert(Exchange::USD("2017-05-31".to_string()), dec!(3.7354)); + exchange_rates.insert(Exchange::USD("2021-12-20".to_string()), dec!(4.1182)); + exchange_rates.insert(Exchange::USD("2025-03-14".to_string()), dec!(3.8509)); + exchange_rates.insert(Exchange::USD("2023-03-24".to_string()), dec!(4.3742)); + exchange_rates.insert(Exchange::USD("2020-04-03".to_string()), dec!(4.2396)); + exchange_rates.insert(Exchange::USD("2016-03-14".to_string()), dec!(3.847)); + exchange_rates.insert(Exchange::USD("2016-05-25".to_string()), dec!(3.9684)); + exchange_rates.insert(Exchange::USD("2012-04-16".to_string()), dec!(3.2289)); + exchange_rates.insert(Exchange::USD("2012-08-21".to_string()), dec!(3.279)); + exchange_rates.insert(Exchange::EUR("2025-07-10".to_string()), dec!(4.2464)); + exchange_rates.insert(Exchange::USD("2020-10-30".to_string()), dec!(3.9563)); + exchange_rates.insert(Exchange::USD("2016-12-16".to_string()), dec!(4.2296)); + exchange_rates.insert(Exchange::USD("2023-08-10".to_string()), dec!(4.0521)); + exchange_rates.insert(Exchange::USD("2015-05-26".to_string()), dec!(3.7898)); + exchange_rates.insert(Exchange::USD("2022-11-07".to_string()), dec!(4.6926)); + exchange_rates.insert(Exchange::USD("2014-11-24".to_string()), dec!(3.3842)); + exchange_rates.insert(Exchange::EUR("2024-11-27".to_string()), dec!(4.309)); + exchange_rates.insert(Exchange::USD("2019-05-21".to_string()), dec!(3.8625)); + exchange_rates.insert(Exchange::USD("2016-01-19".to_string()), dec!(4.0917)); + exchange_rates.insert(Exchange::USD("2023-12-05".to_string()), dec!(3.991)); + exchange_rates.insert(Exchange::EUR("2023-05-05".to_string()), dec!(4.5885)); + exchange_rates.insert(Exchange::EUR("2024-04-09".to_string()), dec!(4.2588)); + exchange_rates.insert(Exchange::USD("2018-01-19".to_string()), dec!(3.3994)); + exchange_rates.insert(Exchange::EUR("2025-03-06".to_string()), dec!(4.1766)); + exchange_rates.insert(Exchange::EUR("2025-10-17".to_string()), dec!(4.2565)); + exchange_rates.insert(Exchange::EUR("2025-01-27".to_string()), dec!(4.2176)); + exchange_rates.insert(Exchange::USD("2017-12-04".to_string()), dec!(3.5499)); + exchange_rates.insert(Exchange::USD("2024-02-07".to_string()), dec!(4.0362)); + exchange_rates.insert(Exchange::USD("2017-07-11".to_string()), dec!(3.7235)); + exchange_rates.insert(Exchange::EUR("2024-05-22".to_string()), dec!(4.2575)); + exchange_rates.insert(Exchange::USD("2022-10-19".to_string()), dec!(4.8892)); + exchange_rates.insert(Exchange::USD("2020-03-25".to_string()), dec!(4.222)); + exchange_rates.insert(Exchange::EUR("2024-06-10".to_string()), dec!(4.3197)); + exchange_rates.insert(Exchange::USD("2022-02-14".to_string()), dec!(4.0439)); + exchange_rates.insert(Exchange::USD("2022-07-26".to_string()), dec!(4.6222)); + exchange_rates.insert(Exchange::USD("2020-01-17".to_string()), dec!(3.8053)); + exchange_rates.insert(Exchange::USD("2015-02-27".to_string()), dec!(3.698)); + exchange_rates.insert(Exchange::USD("2014-05-08".to_string()), dec!(3.0042)); + exchange_rates.insert(Exchange::USD("2019-11-19".to_string()), dec!(3.8786)); + exchange_rates.insert(Exchange::EUR("2024-03-07".to_string()), dec!(4.3045)); + exchange_rates.insert(Exchange::EUR("2023-02-03".to_string()), dec!(4.692)); + exchange_rates.insert(Exchange::USD("2016-09-19".to_string()), dec!(3.8586)); + exchange_rates.insert(Exchange::USD("2019-12-02".to_string()), dec!(3.9047)); + exchange_rates.insert(Exchange::EUR("2025-04-23".to_string()), dec!(4.2893)); + exchange_rates.insert(Exchange::USD("2020-01-14".to_string()), dec!(3.8019)); + exchange_rates.insert(Exchange::USD("2023-06-07".to_string()), dec!(4.1887)); + exchange_rates.insert(Exchange::USD("2018-07-03".to_string()), dec!(3.7723)); + exchange_rates.insert(Exchange::USD("2017-09-04".to_string()), dec!(3.5718)); + exchange_rates.insert(Exchange::USD("2017-10-02".to_string()), dec!(3.6726)); + exchange_rates.insert(Exchange::USD("2014-09-29".to_string()), dec!(3.3)); + exchange_rates.insert(Exchange::USD("2015-12-24".to_string()), dec!(3.8695)); + exchange_rates.insert(Exchange::USD("2023-07-26".to_string()), dec!(3.9949)); + exchange_rates.insert(Exchange::USD("2023-10-11".to_string()), dec!(4.2589)); + exchange_rates.insert(Exchange::USD("2014-01-10".to_string()), dec!(3.07)); + exchange_rates.insert(Exchange::USD("2022-03-08".to_string()), dec!(4.5115)); + exchange_rates.insert(Exchange::USD("2024-04-24".to_string()), dec!(4.0417)); + exchange_rates.insert(Exchange::USD("2024-09-27".to_string()), dec!(3.8368)); + exchange_rates.insert(Exchange::USD("2016-05-20".to_string()), dec!(3.9358)); + exchange_rates.insert(Exchange::USD("2023-04-19".to_string()), dec!(4.2244)); + exchange_rates.insert(Exchange::USD("2014-09-03".to_string()), dec!(3.1912)); + exchange_rates.insert(Exchange::USD("2019-01-15".to_string()), dec!(3.7542)); + exchange_rates.insert(Exchange::USD("2015-12-08".to_string()), dec!(3.9877)); + exchange_rates.insert(Exchange::USD("2015-10-26".to_string()), dec!(3.8645)); + exchange_rates.insert(Exchange::EUR("2023-03-02".to_string()), dec!(4.675)); + exchange_rates.insert(Exchange::EUR("2023-09-11".to_string()), dec!(4.6209)); + exchange_rates.insert(Exchange::USD("2023-05-10".to_string()), dec!(4.1532)); + exchange_rates.insert(Exchange::USD("2017-10-26".to_string()), dec!(3.5939)); + exchange_rates.insert(Exchange::USD("2013-07-17".to_string()), dec!(3.241)); + exchange_rates.insert(Exchange::USD("2021-12-09".to_string()), dec!(4.0837)); + exchange_rates.insert(Exchange::USD("2022-01-04".to_string()), dec!(4.0468)); + exchange_rates.insert(Exchange::USD("2021-08-05".to_string()), dec!(3.8485)); + exchange_rates.insert(Exchange::USD("2012-06-26".to_string()), dec!(3.4088)); + exchange_rates.insert(Exchange::EUR("2025-06-05".to_string()), dec!(4.2791)); + exchange_rates.insert(Exchange::USD("2023-09-25".to_string()), dec!(4.3188)); + exchange_rates.insert(Exchange::EUR("2023-06-21".to_string()), dec!(4.4408)); + exchange_rates.insert(Exchange::USD("2015-02-20".to_string()), dec!(3.6895)); + exchange_rates.insert(Exchange::USD("2015-03-23".to_string()), dec!(3.818)); + exchange_rates.insert(Exchange::USD("2023-02-28".to_string()), dec!(4.4475)); + exchange_rates.insert(Exchange::USD("2025-04-15".to_string()), dec!(3.7692)); + exchange_rates.insert(Exchange::USD("2017-11-17".to_string()), dec!(3.5965)); + exchange_rates.insert(Exchange::USD("2015-08-17".to_string()), dec!(3.7613)); + exchange_rates.insert(Exchange::USD("2020-05-19".to_string()), dec!(4.1645)); + exchange_rates.insert(Exchange::EUR("2024-03-06".to_string()), dec!(4.3106)); + exchange_rates.insert(Exchange::USD("2021-12-22".to_string()), dec!(4.0984)); + exchange_rates.insert(Exchange::USD("2018-02-21".to_string()), dec!(3.3697)); + exchange_rates.insert(Exchange::USD("2022-02-18".to_string()), dec!(3.9798)); + exchange_rates.insert(Exchange::USD("2017-02-22".to_string()), dec!(4.0899)); + exchange_rates.insert(Exchange::EUR("2023-10-10".to_string()), dec!(4.5581)); + exchange_rates.insert(Exchange::EUR("2025-04-07".to_string()), dec!(4.2975)); + exchange_rates.insert(Exchange::USD("2022-04-14".to_string()), dec!(4.2581)); + exchange_rates.insert(Exchange::USD("2014-10-15".to_string()), dec!(3.3262)); + exchange_rates.insert(Exchange::EUR("2025-03-13".to_string()), dec!(4.196)); + exchange_rates.insert(Exchange::USD("2013-01-03".to_string()), dec!(3.1005)); + exchange_rates.insert(Exchange::USD("2019-11-25".to_string()), dec!(3.9036)); + exchange_rates.insert(Exchange::USD("2021-10-27".to_string()), dec!(3.9815)); + exchange_rates.insert(Exchange::USD("2022-06-03".to_string()), dec!(4.2689)); + exchange_rates.insert(Exchange::USD("2014-04-11".to_string()), dec!(3.0086)); + exchange_rates.insert(Exchange::USD("2013-01-30".to_string()), dec!(3.0938)); + exchange_rates.insert(Exchange::EUR("2023-01-23".to_string()), dec!(4.7186)); + exchange_rates.insert(Exchange::EUR("2024-11-25".to_string()), dec!(4.3319)); + exchange_rates.insert(Exchange::EUR("2024-08-29".to_string()), dec!(4.2862)); + exchange_rates.insert(Exchange::USD("2013-09-18".to_string()), dec!(3.1689)); + exchange_rates.insert(Exchange::USD("2021-06-04".to_string()), dec!(3.6931)); + exchange_rates.insert(Exchange::USD("2018-10-29".to_string()), dec!(3.793)); + exchange_rates.insert(Exchange::USD("2021-10-25".to_string()), dec!(3.9502)); + exchange_rates.insert(Exchange::USD("2018-12-05".to_string()), dec!(3.7832)); + exchange_rates.insert(Exchange::USD("2014-08-27".to_string()), dec!(3.1764)); + exchange_rates.insert(Exchange::USD("2014-08-11".to_string()), dec!(3.1378)); + exchange_rates.insert(Exchange::EUR("2024-12-19".to_string()), dec!(4.2633)); + exchange_rates.insert(Exchange::EUR("2023-10-20".to_string()), dec!(4.4675)); + exchange_rates.insert(Exchange::USD("2024-11-14".to_string()), dec!(4.122)); + exchange_rates.insert(Exchange::EUR("2023-01-05".to_string()), dec!(4.6709)); + exchange_rates.insert(Exchange::EUR("2024-03-04".to_string()), dec!(4.3201)); + exchange_rates.insert(Exchange::USD("2022-05-19".to_string()), dec!(4.4231)); + exchange_rates.insert(Exchange::USD("2017-04-03".to_string()), dec!(3.9664)); + exchange_rates.insert(Exchange::USD("2016-02-17".to_string()), dec!(3.9431)); + exchange_rates.insert(Exchange::USD("2025-10-14".to_string()), dec!(3.6897)); + exchange_rates.insert(Exchange::USD("2020-10-09".to_string()), dec!(3.7913)); + exchange_rates.insert(Exchange::EUR("2023-03-01".to_string()), dec!(4.6925)); + exchange_rates.insert(Exchange::EUR("2023-06-16".to_string()), dec!(4.4583)); + exchange_rates.insert(Exchange::USD("2023-03-29".to_string()), dec!(4.3247)); + exchange_rates.insert(Exchange::USD("2022-05-16".to_string()), dec!(4.4785)); + exchange_rates.insert(Exchange::USD("2019-03-08".to_string()), dec!(3.8409)); + exchange_rates.insert(Exchange::USD("2012-01-12".to_string()), dec!(3.4945)); + exchange_rates.insert(Exchange::USD("2025-07-16".to_string()), dec!(3.6631)); + exchange_rates.insert(Exchange::USD("2012-02-24".to_string()), dec!(3.1103)); + exchange_rates.insert(Exchange::EUR("2024-12-30".to_string()), dec!(4.2738)); + exchange_rates.insert(Exchange::USD("2025-12-02".to_string()), dec!(3.6512)); + exchange_rates.insert(Exchange::USD("2019-01-29".to_string()), dec!(3.7563)); + exchange_rates.insert(Exchange::USD("2021-05-04".to_string()), dec!(3.794)); + exchange_rates.insert(Exchange::EUR("2024-07-18".to_string()), dec!(4.2954)); + exchange_rates.insert(Exchange::USD("2014-12-30".to_string()), dec!(3.5458)); + exchange_rates.insert(Exchange::USD("2024-07-24".to_string()), dec!(3.9498)); + exchange_rates.insert(Exchange::USD("2021-05-28".to_string()), dec!(3.6766)); + exchange_rates.insert(Exchange::USD("2012-11-22".to_string()), dec!(3.2021)); + exchange_rates.insert(Exchange::USD("2024-04-22".to_string()), dec!(4.054)); + exchange_rates.insert(Exchange::USD("2023-03-22".to_string()), dec!(4.3467)); + exchange_rates.insert(Exchange::USD("2019-01-16".to_string()), dec!(3.7619)); + exchange_rates.insert(Exchange::USD("2022-09-16".to_string()), dec!(4.7384)); + exchange_rates.insert(Exchange::USD("2025-02-11".to_string()), dec!(4.0497)); + exchange_rates.insert(Exchange::USD("2019-08-14".to_string()), dec!(3.889)); + exchange_rates.insert(Exchange::USD("2025-03-11".to_string()), dec!(3.8481)); + exchange_rates.insert(Exchange::USD("2017-05-29".to_string()), dec!(3.7371)); + exchange_rates.insert(Exchange::USD("2016-03-08".to_string()), dec!(3.9333)); + exchange_rates.insert(Exchange::USD("2013-11-20".to_string()), dec!(3.0947)); + exchange_rates.insert(Exchange::USD("2013-02-13".to_string()), dec!(3.1012)); + exchange_rates.insert(Exchange::EUR("2025-09-16".to_string()), dec!(4.2504)); + exchange_rates.insert(Exchange::USD("2019-03-13".to_string()), dec!(3.8077)); + exchange_rates.insert(Exchange::USD("2017-03-14".to_string()), dec!(4.0697)); + exchange_rates.insert(Exchange::USD("2013-04-12".to_string()), dec!(3.1537)); + exchange_rates.insert(Exchange::USD("2017-09-07".to_string()), dec!(3.5511)); + exchange_rates.insert(Exchange::USD("2020-09-09".to_string()), dec!(3.7871)); + exchange_rates.insert(Exchange::USD("2022-08-22".to_string()), dec!(4.7427)); + exchange_rates.insert(Exchange::USD("2020-08-17".to_string()), dec!(3.7076)); + exchange_rates.insert(Exchange::USD("2018-08-08".to_string()), dec!(3.6782)); + exchange_rates.insert(Exchange::USD("2012-10-01".to_string()), dec!(3.1809)); + exchange_rates.insert(Exchange::EUR("2025-01-07".to_string()), dec!(4.2515)); + exchange_rates.insert(Exchange::USD("2019-06-26".to_string()), dec!(3.754)); + exchange_rates.insert(Exchange::EUR("2025-06-20".to_string()), dec!(4.2709)); + exchange_rates.insert(Exchange::USD("2018-10-12".to_string()), dec!(3.713)); + exchange_rates.insert(Exchange::USD("2014-05-21".to_string()), dec!(3.054)); + exchange_rates.insert(Exchange::USD("2019-08-23".to_string()), dec!(3.9371)); + exchange_rates.insert(Exchange::USD("2015-03-09".to_string()), dec!(3.789)); + exchange_rates.insert(Exchange::USD("2015-10-01".to_string()), dec!(3.8005)); + exchange_rates.insert(Exchange::USD("2024-03-08".to_string()), dec!(3.9392)); + exchange_rates.insert(Exchange::USD("2016-11-15".to_string()), dec!(4.0837)); + exchange_rates.insert(Exchange::USD("2018-12-27".to_string()), dec!(3.7616)); + exchange_rates.insert(Exchange::USD("2024-01-05".to_string()), dec!(3.985)); + exchange_rates.insert(Exchange::EUR("2023-07-26".to_string()), dec!(4.4248)); + exchange_rates.insert(Exchange::USD("2012-12-12".to_string()), dec!(3.1459)); + exchange_rates.insert(Exchange::USD("2021-02-25".to_string()), dec!(3.6943)); + exchange_rates.insert(Exchange::USD("2014-10-02".to_string()), dec!(3.3039)); + exchange_rates.insert(Exchange::USD("2025-03-20".to_string()), dec!(3.8675)); + exchange_rates.insert(Exchange::USD("2024-11-22".to_string()), dec!(4.1752)); + exchange_rates.insert(Exchange::USD("2014-06-04".to_string()), dec!(3.0491)); + exchange_rates.insert(Exchange::USD("2024-09-24".to_string()), dec!(3.83)); + exchange_rates.insert(Exchange::USD("2025-05-28".to_string()), dec!(3.7456)); + exchange_rates.insert(Exchange::USD("2015-10-27".to_string()), dec!(3.8669)); + exchange_rates.insert(Exchange::USD("2013-08-09".to_string()), dec!(3.1336)); + exchange_rates.insert(Exchange::EUR("2025-09-05".to_string()), dec!(4.2476)); + exchange_rates.insert(Exchange::USD("2022-01-25".to_string()), dec!(4.0593)); + exchange_rates.insert(Exchange::USD("2013-05-10".to_string()), dec!(3.1861)); + exchange_rates.insert(Exchange::USD("2023-05-15".to_string()), dec!(4.149)); + exchange_rates.insert(Exchange::USD("2019-01-23".to_string()), dec!(3.7747)); + exchange_rates.insert(Exchange::USD("2024-11-18".to_string()), dec!(4.0997)); + exchange_rates.insert(Exchange::USD("2025-09-05".to_string()), dec!(3.6357)); + exchange_rates.insert(Exchange::USD("2014-09-04".to_string()), dec!(3.1947)); + exchange_rates.insert(Exchange::USD("2013-05-17".to_string()), dec!(3.252)); + exchange_rates.insert(Exchange::USD("2012-09-04".to_string()), dec!(3.3281)); + exchange_rates.insert(Exchange::EUR("2025-05-14".to_string()), dec!(4.2455)); + exchange_rates.insert(Exchange::USD("2014-05-05".to_string()), dec!(3.031)); + exchange_rates.insert(Exchange::EUR("2024-04-15".to_string()), dec!(4.2851)); + exchange_rates.insert(Exchange::USD("2022-08-25".to_string()), dec!(4.7546)); + exchange_rates.insert(Exchange::USD("2013-03-29".to_string()), dec!(3.259)); + exchange_rates.insert(Exchange::EUR("2023-03-30".to_string()), dec!(4.6801)); + exchange_rates.insert(Exchange::USD("2024-06-06".to_string()), dec!(3.953)); + exchange_rates.insert(Exchange::USD("2025-08-08".to_string()), dec!(3.6577)); + exchange_rates.insert(Exchange::USD("2021-01-27".to_string()), dec!(3.7507)); + exchange_rates.insert(Exchange::USD("2022-07-06".to_string()), dec!(4.6796)); + exchange_rates.insert(Exchange::EUR("2024-03-11".to_string()), dec!(4.2933)); + exchange_rates.insert(Exchange::EUR("2025-09-17".to_string()), dec!(4.2559)); + exchange_rates.insert(Exchange::USD("2019-05-09".to_string()), dec!(3.841)); + exchange_rates.insert(Exchange::USD("2021-11-03".to_string()), dec!(3.9681)); + exchange_rates.insert(Exchange::USD("2015-12-29".to_string()), dec!(3.8659)); + exchange_rates.insert(Exchange::USD("2015-07-07".to_string()), dec!(3.8313)); + exchange_rates.insert(Exchange::EUR("2023-10-23".to_string()), dec!(4.4552)); + exchange_rates.insert(Exchange::USD("2022-12-07".to_string()), dec!(4.4834)); + exchange_rates.insert(Exchange::USD("2020-07-31".to_string()), dec!(3.7166)); + exchange_rates.insert(Exchange::USD("2020-05-27".to_string()), dec!(4.0504)); + exchange_rates.insert(Exchange::USD("2014-02-26".to_string()), dec!(3.026)); + exchange_rates.insert(Exchange::USD("2025-10-23".to_string()), dec!(3.6519)); + exchange_rates.insert(Exchange::USD("2014-01-20".to_string()), dec!(3.068)); + exchange_rates.insert(Exchange::USD("2024-03-04".to_string()), dec!(3.982)); + exchange_rates.insert(Exchange::USD("2017-12-28".to_string()), dec!(3.5046)); + exchange_rates.insert(Exchange::EUR("2023-10-12".to_string()), dec!(4.5329)); + exchange_rates.insert(Exchange::EUR("2023-12-19".to_string()), dec!(4.3321)); + exchange_rates.insert(Exchange::USD("2012-05-14".to_string()), dec!(3.3422)); + exchange_rates.insert(Exchange::USD("2014-06-26".to_string()), dec!(3.0361)); + exchange_rates.insert(Exchange::USD("2018-04-12".to_string()), dec!(3.3924)); + exchange_rates.insert(Exchange::USD("2017-02-01".to_string()), dec!(4.0071)); + exchange_rates.insert(Exchange::USD("2017-08-22".to_string()), dec!(3.6334)); + exchange_rates.insert(Exchange::USD("2019-10-17".to_string()), dec!(3.8638)); + exchange_rates.insert(Exchange::EUR("2025-10-22".to_string()), dec!(4.2438)); + exchange_rates.insert(Exchange::USD("2023-06-16".to_string()), dec!(4.0715)); + exchange_rates.insert(Exchange::EUR("2025-11-17".to_string()), dec!(4.2231)); + exchange_rates.insert(Exchange::USD("2025-11-07".to_string()), dec!(3.6818)); + exchange_rates.insert(Exchange::USD("2019-05-23".to_string()), dec!(3.8696)); + exchange_rates.insert(Exchange::EUR("2023-07-07".to_string()), dec!(4.4803)); + exchange_rates.insert(Exchange::EUR("2025-06-12".to_string()), dec!(4.2631)); + exchange_rates.insert(Exchange::EUR("2024-12-17".to_string()), dec!(4.2599)); + exchange_rates.insert(Exchange::EUR("2025-08-01".to_string()), dec!(4.2813)); + exchange_rates.insert(Exchange::USD("2021-12-30".to_string()), dec!(4.0631)); + exchange_rates.insert(Exchange::USD("2022-12-08".to_string()), dec!(4.476)); + exchange_rates.insert(Exchange::EUR("2025-04-22".to_string()), dec!(4.2801)); + exchange_rates.insert(Exchange::USD("2025-09-29".to_string()), dec!(3.6411)); + exchange_rates.insert(Exchange::USD("2022-05-12".to_string()), dec!(4.4863)); + exchange_rates.insert(Exchange::EUR("2025-03-03".to_string()), dec!(4.1827)); + exchange_rates.insert(Exchange::EUR("2023-11-08".to_string()), dec!(4.4584)); + exchange_rates.insert(Exchange::USD("2020-01-02".to_string()), dec!(3.8)); + exchange_rates.insert(Exchange::USD("2022-03-21".to_string()), dec!(4.2444)); + exchange_rates.insert(Exchange::USD("2017-08-16".to_string()), dec!(3.6435)); + exchange_rates.insert(Exchange::USD("2016-07-26".to_string()), dec!(3.9682)); + exchange_rates.insert(Exchange::EUR("2024-08-21".to_string()), dec!(4.2879)); + exchange_rates.insert(Exchange::USD("2024-11-25".to_string()), dec!(4.1297)); + exchange_rates.insert(Exchange::USD("2020-09-28".to_string()), dec!(3.9083)); + exchange_rates.insert(Exchange::USD("2024-01-03".to_string()), dec!(3.9909)); + exchange_rates.insert(Exchange::USD("2014-09-02".to_string()), dec!(3.2112)); + exchange_rates.insert(Exchange::USD("2024-05-17".to_string()), dec!(3.9363)); + exchange_rates.insert(Exchange::USD("2025-01-17".to_string()), dec!(4.1462)); + exchange_rates.insert(Exchange::USD("2022-06-20".to_string()), dec!(4.44)); + exchange_rates.insert(Exchange::USD("2017-06-21".to_string()), dec!(3.809)); + exchange_rates.insert(Exchange::USD("2014-09-09".to_string()), dec!(3.2605)); + exchange_rates.insert(Exchange::EUR("2024-05-31".to_string()), dec!(4.2678)); + exchange_rates.insert(Exchange::USD("2020-04-06".to_string()), dec!(4.2257)); + exchange_rates.insert(Exchange::EUR("2025-12-31".to_string()), dec!(4.2267)); + exchange_rates.insert(Exchange::USD("2025-01-15".to_string()), dec!(4.133)); + exchange_rates.insert(Exchange::USD("2021-10-18".to_string()), dec!(3.9471)); + exchange_rates.insert(Exchange::USD("2022-04-26".to_string()), dec!(4.3469)); + exchange_rates.insert(Exchange::USD("2022-11-02".to_string()), dec!(4.7485)); + exchange_rates.insert(Exchange::USD("2022-12-14".to_string()), dec!(4.3973)); + exchange_rates.insert(Exchange::USD("2015-09-10".to_string()), dec!(3.7648)); + exchange_rates.insert(Exchange::USD("2017-02-27".to_string()), dec!(4.0745)); + exchange_rates.insert(Exchange::EUR("2023-07-28".to_string()), dec!(4.4257)); + exchange_rates.insert(Exchange::USD("2016-12-27".to_string()), dec!(4.212)); + exchange_rates.insert(Exchange::USD("2013-03-12".to_string()), dec!(3.1887)); + exchange_rates.insert(Exchange::EUR("2024-11-06".to_string()), dec!(4.3662)); + exchange_rates.insert(Exchange::USD("2021-04-19".to_string()), dec!(3.7816)); + exchange_rates.insert(Exchange::EUR("2025-03-28".to_string()), dec!(4.1819)); + exchange_rates.insert(Exchange::USD("2014-04-08".to_string()), dec!(3.0276)); + exchange_rates.insert(Exchange::USD("2012-11-20".to_string()), dec!(3.2333)); + exchange_rates.insert(Exchange::USD("2021-07-20".to_string()), dec!(3.9012)); + exchange_rates.insert(Exchange::USD("2015-07-08".to_string()), dec!(3.8225)); + exchange_rates.insert(Exchange::USD("2012-05-10".to_string()), dec!(3.2735)); + exchange_rates.insert(Exchange::USD("2015-07-06".to_string()), dec!(3.796)); + exchange_rates.insert(Exchange::USD("2015-01-08".to_string()), dec!(3.6482)); + exchange_rates.insert(Exchange::USD("2024-07-08".to_string()), dec!(3.947)); + exchange_rates.insert(Exchange::USD("2019-05-29".to_string()), dec!(3.8554)); + exchange_rates.insert(Exchange::USD("2012-06-28".to_string()), dec!(3.4408)); + exchange_rates.insert(Exchange::USD("2012-10-24".to_string()), dec!(3.1996)); + exchange_rates.insert(Exchange::USD("2015-05-29".to_string()), dec!(3.7671)); + exchange_rates.insert(Exchange::USD("2021-07-06".to_string()), dec!(3.8021)); + exchange_rates.insert(Exchange::USD("2012-04-20".to_string()), dec!(3.1828)); + exchange_rates.insert(Exchange::USD("2018-10-10".to_string()), dec!(3.7507)); + exchange_rates.insert(Exchange::USD("2014-11-12".to_string()), dec!(3.3966)); + exchange_rates.insert(Exchange::USD("2017-08-02".to_string()), dec!(3.5863)); + exchange_rates.insert(Exchange::USD("2025-11-27".to_string()), dec!(3.651)); + exchange_rates.insert(Exchange::USD("2025-11-28".to_string()), dec!(3.6624)); + exchange_rates.insert(Exchange::USD("2022-10-03".to_string()), dec!(4.9207)); + exchange_rates.insert(Exchange::USD("2013-03-08".to_string()), dec!(3.169)); + exchange_rates.insert(Exchange::USD("2014-08-07".to_string()), dec!(3.1397)); + exchange_rates.insert(Exchange::USD("2023-08-09".to_string()), dec!(4.0592)); + exchange_rates.insert(Exchange::USD("2024-03-13".to_string()), dec!(3.9269)); + exchange_rates.insert(Exchange::USD("2021-04-28".to_string()), dec!(3.7939)); + exchange_rates.insert(Exchange::USD("2023-05-11".to_string()), dec!(4.1414)); + exchange_rates.insert(Exchange::USD("2020-11-13".to_string()), dec!(3.8015)); + exchange_rates.insert(Exchange::USD("2012-08-28".to_string()), dec!(3.2685)); + exchange_rates.insert(Exchange::USD("2012-10-19".to_string()), dec!(3.1499)); + exchange_rates.insert(Exchange::USD("2016-07-27".to_string()), dec!(3.9739)); + exchange_rates.insert(Exchange::USD("2013-05-28".to_string()), dec!(3.2465)); + exchange_rates.insert(Exchange::USD("2012-06-01".to_string()), dec!(3.5777)); + exchange_rates.insert(Exchange::USD("2014-05-07".to_string()), dec!(3.0187)); + exchange_rates.insert(Exchange::USD("2019-02-05".to_string()), dec!(3.7542)); + exchange_rates.insert(Exchange::USD("2019-09-25".to_string()), dec!(3.9856)); + exchange_rates.insert(Exchange::EUR("2023-09-04".to_string()), dec!(4.4653)); + exchange_rates.insert(Exchange::USD("2013-01-09".to_string()), dec!(3.1516)); + exchange_rates.insert(Exchange::EUR("2025-01-16".to_string()), dec!(4.262)); + exchange_rates.insert(Exchange::USD("2018-04-19".to_string()), dec!(3.3693)); + exchange_rates.insert(Exchange::USD("2017-04-11".to_string()), dec!(4.0009)); + exchange_rates.insert(Exchange::USD("2017-08-07".to_string()), dec!(3.5995)); + exchange_rates.insert(Exchange::USD("2016-10-27".to_string()), dec!(3.976)); + exchange_rates.insert(Exchange::USD("2021-03-16".to_string()), dec!(3.8519)); + exchange_rates.insert(Exchange::USD("2016-12-07".to_string()), dec!(4.1268)); + exchange_rates.insert(Exchange::USD("2021-09-10".to_string()), dec!(3.8402)); + exchange_rates.insert(Exchange::USD("2015-05-11".to_string()), dec!(3.6489)); + exchange_rates.insert(Exchange::USD("2019-01-09".to_string()), dec!(3.7509)); + exchange_rates.insert(Exchange::USD("2021-09-21".to_string()), dec!(3.9337)); + exchange_rates.insert(Exchange::USD("2020-11-10".to_string()), dec!(3.8168)); + exchange_rates.insert(Exchange::EUR("2023-10-18".to_string()), dec!(4.4488)); + exchange_rates.insert(Exchange::EUR("2023-11-24".to_string()), dec!(4.3722)); + exchange_rates.insert(Exchange::USD("2015-07-02".to_string()), dec!(3.7859)); + exchange_rates.insert(Exchange::USD("2024-04-04".to_string()), dec!(3.9515)); + exchange_rates.insert(Exchange::USD("2023-02-22".to_string()), dec!(4.4687)); + exchange_rates.insert(Exchange::EUR("2024-02-21".to_string()), dec!(4.3163)); + exchange_rates.insert(Exchange::EUR("2024-06-12".to_string()), dec!(4.3354)); + exchange_rates.insert(Exchange::EUR("2025-06-17".to_string()), dec!(4.275)); + exchange_rates.insert(Exchange::USD("2016-08-16".to_string()), dec!(3.7929)); + exchange_rates.insert(Exchange::USD("2019-06-12".to_string()), dec!(3.763)); + exchange_rates.insert(Exchange::USD("2020-09-23".to_string()), dec!(3.8399)); + exchange_rates.insert(Exchange::USD("2012-02-02".to_string()), dec!(3.1955)); + exchange_rates.insert(Exchange::USD("2022-05-27".to_string()), dec!(4.2966)); + exchange_rates.insert(Exchange::USD("2013-05-07".to_string()), dec!(3.1767)); + exchange_rates.insert(Exchange::USD("2016-06-13".to_string()), dec!(3.8943)); + exchange_rates.insert(Exchange::USD("2023-05-22".to_string()), dec!(4.1881)); + exchange_rates.insert(Exchange::USD("2024-06-28".to_string()), dec!(4.032)); + exchange_rates.insert(Exchange::EUR("2025-05-09".to_string()), dec!(4.2414)); + exchange_rates.insert(Exchange::USD("2015-08-05".to_string()), dec!(3.8359)); + exchange_rates.insert(Exchange::USD("2024-12-05".to_string()), dec!(4.0554)); + exchange_rates.insert(Exchange::EUR("2023-06-28".to_string()), dec!(4.46)); + exchange_rates.insert(Exchange::EUR("2024-03-20".to_string()), dec!(4.3242)); + exchange_rates.insert(Exchange::USD("2016-03-24".to_string()), dec!(3.824)); + exchange_rates.insert(Exchange::USD("2023-08-21".to_string()), dec!(4.1124)); + exchange_rates.insert(Exchange::USD("2012-10-12".to_string()), dec!(3.1577)); + exchange_rates.insert(Exchange::USD("2017-04-07".to_string()), dec!(3.9755)); + exchange_rates.insert(Exchange::USD("2015-04-13".to_string()), dec!(3.8088)); + exchange_rates.insert(Exchange::USD("2012-08-16".to_string()), dec!(3.3253)); + exchange_rates.insert(Exchange::EUR("2024-04-08".to_string()), dec!(4.2805)); + exchange_rates.insert(Exchange::USD("2017-09-28".to_string()), dec!(3.6682)); + exchange_rates.insert(Exchange::EUR("2025-01-21".to_string()), dec!(4.2554)); + exchange_rates.insert(Exchange::USD("2015-04-09".to_string()), dec!(3.7414)); + exchange_rates.insert(Exchange::USD("2015-05-07".to_string()), dec!(3.583)); + exchange_rates.insert(Exchange::USD("2023-10-25".to_string()), dec!(4.2284)); + exchange_rates.insert(Exchange::USD("2020-07-01".to_string()), dec!(3.9591)); + exchange_rates.insert(Exchange::USD("2016-08-10".to_string()), dec!(3.825)); + exchange_rates.insert(Exchange::USD("2022-06-06".to_string()), dec!(4.2675)); + exchange_rates.insert(Exchange::USD("2016-07-01".to_string()), dec!(3.9548)); + exchange_rates.insert(Exchange::USD("2013-02-25".to_string()), dec!(3.1412)); + exchange_rates.insert(Exchange::USD("2020-04-23".to_string()), dec!(4.2093)); + exchange_rates.insert(Exchange::USD("2021-12-10".to_string()), dec!(4.0887)); + exchange_rates.insert(Exchange::USD("2021-09-03".to_string()), dec!(3.7998)); + exchange_rates.insert(Exchange::USD("2025-08-13".to_string()), dec!(3.6353)); + exchange_rates.insert(Exchange::USD("2020-09-14".to_string()), dec!(3.7522)); + exchange_rates.insert(Exchange::USD("2016-01-27".to_string()), dec!(4.1144)); + exchange_rates.insert(Exchange::USD("2019-03-28".to_string()), dec!(3.8202)); + exchange_rates.insert(Exchange::USD("2016-11-14".to_string()), dec!(4.0805)); + exchange_rates.insert(Exchange::EUR("2023-05-15".to_string()), dec!(4.5096)); + exchange_rates.insert(Exchange::EUR("2025-12-19".to_string()), dec!(4.2094)); + exchange_rates.insert(Exchange::USD("2012-10-03".to_string()), dec!(3.1896)); + exchange_rates.insert(Exchange::USD("2015-07-29".to_string()), dec!(3.7471)); + exchange_rates.insert(Exchange::USD("2020-10-02".to_string()), dec!(3.8366)); + exchange_rates.insert(Exchange::USD("2012-01-17".to_string()), dec!(3.4215)); + exchange_rates.insert(Exchange::USD("2023-07-31".to_string()), dec!(3.9995)); + exchange_rates.insert(Exchange::USD("2019-10-02".to_string()), dec!(4.0152)); + exchange_rates.insert(Exchange::USD("2012-01-13".to_string()), dec!(3.4323)); + exchange_rates.insert(Exchange::USD("2025-03-03".to_string()), dec!(4.0112)); + exchange_rates.insert(Exchange::USD("2019-06-25".to_string()), dec!(3.7376)); + exchange_rates.insert(Exchange::USD("2022-04-21".to_string()), dec!(4.2596)); + exchange_rates.insert(Exchange::USD("2021-11-25".to_string()), dec!(4.16)); + exchange_rates.insert(Exchange::USD("2025-06-06".to_string()), dec!(3.7565)); + exchange_rates.insert(Exchange::USD("2023-11-03".to_string()), dec!(4.1857)); + exchange_rates.insert(Exchange::USD("2023-06-15".to_string()), dec!(4.1203)); + exchange_rates.insert(Exchange::USD("2013-06-05".to_string()), dec!(3.2421)); + exchange_rates.insert(Exchange::USD("2025-08-18".to_string()), dec!(3.6434)); + exchange_rates.insert(Exchange::USD("2023-12-11".to_string()), dec!(4.0277)); + exchange_rates.insert(Exchange::USD("2018-03-07".to_string()), dec!(3.3744)); + exchange_rates.insert(Exchange::USD("2015-10-09".to_string()), dec!(3.7242)); + exchange_rates.insert(Exchange::USD("2015-12-14".to_string()), dec!(3.9695)); + exchange_rates.insert(Exchange::USD("2014-03-05".to_string()), dec!(3.0477)); + exchange_rates.insert(Exchange::USD("2013-07-29".to_string()), dec!(3.1859)); + exchange_rates.insert(Exchange::USD("2020-04-02".to_string()), dec!(4.1917)); + exchange_rates.insert(Exchange::USD("2025-07-09".to_string()), dec!(3.6198)); + exchange_rates.insert(Exchange::USD("2017-07-05".to_string()), dec!(3.7471)); + exchange_rates.insert(Exchange::USD("2021-01-19".to_string()), dec!(3.7416)); + exchange_rates.insert(Exchange::USD("2018-11-26".to_string()), dec!(3.7701)); + exchange_rates.insert(Exchange::USD("2018-12-24".to_string()), dec!(3.7588)); + exchange_rates.insert(Exchange::USD("2017-12-21".to_string()), dec!(3.5369)); + exchange_rates.insert(Exchange::EUR("2023-10-05".to_string()), dec!(4.5974)); + exchange_rates.insert(Exchange::EUR("2025-04-10".to_string()), dec!(4.2644)); + exchange_rates.insert(Exchange::USD("2019-07-16".to_string()), dec!(3.7867)); + exchange_rates.insert(Exchange::EUR("2025-06-13".to_string()), dec!(4.272)); + exchange_rates.insert(Exchange::USD("2018-04-25".to_string()), dec!(3.4548)); + exchange_rates.insert(Exchange::USD("2023-02-01".to_string()), dec!(4.3254)); + exchange_rates.insert(Exchange::USD("2021-03-18".to_string()), dec!(3.8705)); + exchange_rates.insert(Exchange::USD("2021-05-26".to_string()), dec!(3.6691)); + exchange_rates.insert(Exchange::USD("2015-10-28".to_string()), dec!(3.8826)); + exchange_rates.insert(Exchange::USD("2023-06-12".to_string()), dec!(4.1169)); + exchange_rates.insert(Exchange::USD("2022-09-29".to_string()), dec!(5.0328)); + exchange_rates.insert(Exchange::USD("2014-03-04".to_string()), dec!(3.0489)); + exchange_rates.insert(Exchange::USD("2017-03-21".to_string()), dec!(3.9502)); + exchange_rates.insert(Exchange::USD("2015-02-11".to_string()), dec!(3.7094)); + exchange_rates.insert(Exchange::USD("2013-11-12".to_string()), dec!(3.1448)); + exchange_rates.insert(Exchange::USD("2023-08-24".to_string()), dec!(4.118)); + exchange_rates.insert(Exchange::USD("2024-03-29".to_string()), dec!(3.9886)); + exchange_rates.insert(Exchange::EUR("2023-02-17".to_string()), dec!(4.7747)); + exchange_rates.insert(Exchange::USD("2024-07-18".to_string()), dec!(3.9296)); + exchange_rates.insert(Exchange::EUR("2023-05-18".to_string()), dec!(4.5355)); + exchange_rates.insert(Exchange::USD("2018-08-10".to_string()), dec!(3.7481)); + exchange_rates.insert(Exchange::USD("2022-02-22".to_string()), dec!(4.012)); + exchange_rates.insert(Exchange::USD("2012-05-11".to_string()), dec!(3.2765)); + exchange_rates.insert(Exchange::USD("2020-07-15".to_string()), dec!(3.9117)); + exchange_rates.insert(Exchange::USD("2014-04-24".to_string()), dec!(3.0285)); + exchange_rates.insert(Exchange::EUR("2024-10-07".to_string()), dec!(4.3185)); + exchange_rates.insert(Exchange::USD("2014-04-01".to_string()), dec!(3.0278)); + exchange_rates.insert(Exchange::EUR("2023-06-13".to_string()), dec!(4.4783)); + exchange_rates.insert(Exchange::USD("2023-07-14".to_string()), dec!(3.9617)); + exchange_rates.insert(Exchange::USD("2014-05-26".to_string()), dec!(3.0466)); + exchange_rates.insert(Exchange::USD("2024-10-18".to_string()), dec!(3.9718)); + exchange_rates.insert(Exchange::USD("2013-02-07".to_string()), dec!(3.0886)); + exchange_rates.insert(Exchange::EUR("2024-05-14".to_string()), dec!(4.2812)); + exchange_rates.insert(Exchange::USD("2016-06-29".to_string()), dec!(3.9905)); + exchange_rates.insert(Exchange::USD("2013-03-20".to_string()), dec!(3.2169)); + exchange_rates.insert(Exchange::USD("2020-11-16".to_string()), dec!(3.7782)); + exchange_rates.insert(Exchange::USD("2025-02-06".to_string()), dec!(4.0613)); + exchange_rates.insert(Exchange::USD("2012-06-27".to_string()), dec!(3.4015)); + exchange_rates.insert(Exchange::USD("2021-03-29".to_string()), dec!(3.957)); + exchange_rates.insert(Exchange::USD("2022-07-18".to_string()), dec!(4.7152)); + exchange_rates.insert(Exchange::USD("2012-02-20".to_string()), dec!(3.1598)); + exchange_rates.insert(Exchange::USD("2012-06-12".to_string()), dec!(3.4552)); + exchange_rates.insert(Exchange::USD("2017-09-01".to_string()), dec!(3.5693)); + exchange_rates.insert(Exchange::USD("2023-02-08".to_string()), dec!(4.4074)); + exchange_rates.insert(Exchange::EUR("2024-06-14".to_string()), dec!(4.3581)); + exchange_rates.insert(Exchange::USD("2020-04-24".to_string()), dec!(4.2142)); + exchange_rates.insert(Exchange::USD("2021-10-28".to_string()), dec!(3.9938)); + exchange_rates.insert(Exchange::USD("2018-04-23".to_string()), dec!(3.4156)); + exchange_rates.insert(Exchange::USD("2013-11-08".to_string()), dec!(3.1133)); + exchange_rates.insert(Exchange::EUR("2023-03-23".to_string()), dec!(4.6817)); + exchange_rates.insert(Exchange::USD("2018-08-22".to_string()), dec!(3.7104)); + exchange_rates.insert(Exchange::USD("2015-06-11".to_string()), dec!(3.6817)); + exchange_rates.insert(Exchange::EUR("2025-05-05".to_string()), dec!(4.276)); + exchange_rates.insert(Exchange::USD("2016-06-16".to_string()), dec!(3.9469)); + exchange_rates.insert(Exchange::EUR("2025-08-22".to_string()), dec!(4.267)); + exchange_rates.insert(Exchange::USD("2019-05-08".to_string()), dec!(3.8325)); + exchange_rates.insert(Exchange::USD("2013-07-26".to_string()), dec!(3.1831)); + exchange_rates.insert(Exchange::EUR("2023-07-24".to_string()), dec!(4.4517)); + exchange_rates.insert(Exchange::USD("2015-06-22".to_string()), dec!(3.6799)); + exchange_rates.insert(Exchange::EUR("2025-01-31".to_string()), dec!(4.213)); + exchange_rates.insert(Exchange::USD("2019-07-12".to_string()), dec!(3.7889)); + exchange_rates.insert(Exchange::USD("2013-02-22".to_string()), dec!(3.1443)); + exchange_rates.insert(Exchange::EUR("2023-04-18".to_string()), dec!(4.6286)); + exchange_rates.insert(Exchange::EUR("2023-10-24".to_string()), dec!(4.4604)); + exchange_rates.insert(Exchange::USD("2016-02-29".to_string()), dec!(3.9935)); + exchange_rates.insert(Exchange::USD("2013-12-18".to_string()), dec!(3.0393)); + exchange_rates.insert(Exchange::USD("2021-04-12".to_string()), dec!(3.8144)); + exchange_rates.insert(Exchange::USD("2024-06-13".to_string()), dec!(4.0119)); + exchange_rates.insert(Exchange::USD("2014-11-07".to_string()), dec!(3.4084)); + exchange_rates.insert(Exchange::USD("2017-04-12".to_string()), dec!(4.0026)); + exchange_rates.insert(Exchange::USD("2013-07-22".to_string()), dec!(3.2142)); + exchange_rates.insert(Exchange::EUR("2025-03-14".to_string()), dec!(4.179)); + exchange_rates.insert(Exchange::USD("2020-02-18".to_string()), dec!(3.9448)); + exchange_rates.insert(Exchange::USD("2023-05-17".to_string()), dec!(4.1504)); + exchange_rates.insert(Exchange::USD("2022-02-03".to_string()), dec!(4.0267)); + exchange_rates.insert(Exchange::USD("2017-05-04".to_string()), dec!(3.863)); + exchange_rates.insert(Exchange::USD("2022-12-21".to_string()), dec!(4.3947)); + exchange_rates.insert(Exchange::USD("2015-10-30".to_string()), dec!(3.8748)); + exchange_rates.insert(Exchange::USD("2022-02-08".to_string()), dec!(3.9693)); + exchange_rates.insert(Exchange::USD("2015-09-02".to_string()), dec!(3.7626)); + exchange_rates.insert(Exchange::USD("2013-05-13".to_string()), dec!(3.2051)); + exchange_rates.insert(Exchange::USD("2019-10-30".to_string()), dec!(3.8388)); + exchange_rates.insert(Exchange::USD("2024-07-10".to_string()), dec!(3.9324)); + exchange_rates.insert(Exchange::EUR("2025-05-28".to_string()), dec!(4.2447)); + exchange_rates.insert(Exchange::USD("2012-12-27".to_string()), dec!(3.0816)); + exchange_rates.insert(Exchange::USD("2014-09-08".to_string()), dec!(3.2303)); + exchange_rates.insert(Exchange::USD("2019-04-19".to_string()), dec!(3.8051)); + exchange_rates.insert(Exchange::USD("2024-03-01".to_string()), dec!(3.9922)); + exchange_rates.insert(Exchange::USD("2024-10-16".to_string()), dec!(3.9468)); + exchange_rates.insert(Exchange::EUR("2024-10-25".to_string()), dec!(4.3533)); + exchange_rates.insert(Exchange::USD("2023-06-29".to_string()), dec!(4.0832)); + exchange_rates.insert(Exchange::USD("2018-12-28".to_string()), dec!(3.755)); + exchange_rates.insert(Exchange::USD("2014-05-15".to_string()), dec!(3.0589)); + exchange_rates.insert(Exchange::USD("2012-12-14".to_string()), dec!(3.1271)); + exchange_rates.insert(Exchange::USD("2022-12-20".to_string()), dec!(4.4001)); + exchange_rates.insert(Exchange::USD("2017-06-02".to_string()), dec!(3.7323)); + exchange_rates.insert(Exchange::EUR("2023-06-09".to_string()), dec!(4.4717)); + exchange_rates.insert(Exchange::USD("2022-01-07".to_string()), dec!(4.0279)); + exchange_rates.insert(Exchange::EUR("2024-03-13".to_string()), dec!(4.2896)); + exchange_rates.insert(Exchange::EUR("2025-02-10".to_string()), dec!(4.1872)); + exchange_rates.insert(Exchange::USD("2020-08-06".to_string()), dec!(3.724)); + exchange_rates.insert(Exchange::EUR("2025-05-08".to_string()), dec!(4.2714)); + exchange_rates.insert(Exchange::USD("2016-05-11".to_string()), dec!(3.8855)); + exchange_rates.insert(Exchange::USD("2021-02-15".to_string()), dec!(3.6949)); + exchange_rates.insert(Exchange::EUR("2025-09-18".to_string()), dec!(4.2564)); + exchange_rates.insert(Exchange::USD("2022-02-11".to_string()), dec!(3.9665)); + exchange_rates.insert(Exchange::USD("2023-12-27".to_string()), dec!(3.9178)); + exchange_rates.insert(Exchange::USD("2014-11-17".to_string()), dec!(3.3819)); + exchange_rates.insert(Exchange::USD("2015-02-16".to_string()), dec!(3.6665)); + exchange_rates.insert(Exchange::USD("2015-03-19".to_string()), dec!(3.8596)); + exchange_rates.insert(Exchange::USD("2015-11-26".to_string()), dec!(4.0298)); + exchange_rates.insert(Exchange::USD("2022-03-18".to_string()), dec!(4.2707)); + exchange_rates.insert(Exchange::USD("2013-07-04".to_string()), dec!(3.3246)); + exchange_rates.insert(Exchange::EUR("2023-03-29".to_string()), dec!(4.685)); + exchange_rates.insert(Exchange::USD("2022-07-11".to_string()), dec!(4.7416)); + exchange_rates.insert(Exchange::USD("2021-05-07".to_string()), dec!(3.7861)); + exchange_rates.insert(Exchange::EUR("2023-07-05".to_string()), dec!(4.4498)); + exchange_rates.insert(Exchange::USD("2012-04-10".to_string()), dec!(3.1904)); + exchange_rates.insert(Exchange::USD("2014-01-03".to_string()), dec!(3.0517)); + exchange_rates.insert(Exchange::USD("2021-02-22".to_string()), dec!(3.7135)); + exchange_rates.insert(Exchange::USD("2015-11-20".to_string()), dec!(3.9706)); + exchange_rates.insert(Exchange::USD("2022-05-17".to_string()), dec!(4.4379)); + exchange_rates.insert(Exchange::USD("2015-08-19".to_string()), dec!(3.7718)); + exchange_rates.insert(Exchange::USD("2019-06-06".to_string()), dec!(3.8065)); + exchange_rates.insert(Exchange::EUR("2024-02-29".to_string()), dec!(4.319)); + exchange_rates.insert(Exchange::EUR("2025-08-11".to_string()), dec!(4.2533)); + exchange_rates.insert(Exchange::USD("2017-10-04".to_string()), dec!(3.6597)); + exchange_rates.insert(Exchange::USD("2022-09-15".to_string()), dec!(4.7202)); + exchange_rates.insert(Exchange::USD("2014-10-29".to_string()), dec!(3.3192)); + exchange_rates.insert(Exchange::USD("2014-07-01".to_string()), dec!(3.0355)); + exchange_rates.insert(Exchange::USD("2025-11-10".to_string()), dec!(3.661)); + exchange_rates.insert(Exchange::EUR("2025-01-03".to_string()), dec!(4.2718)); + exchange_rates.insert(Exchange::EUR("2025-04-17".to_string()), dec!(4.2879)); + exchange_rates.insert(Exchange::USD("2015-11-24".to_string()), dec!(4.0021)); + exchange_rates.insert(Exchange::EUR("2025-07-31".to_string()), dec!(4.2661)); + exchange_rates.insert(Exchange::USD("2014-04-28".to_string()), dec!(3.0368)); + exchange_rates.insert(Exchange::USD("2012-09-17".to_string()), dec!(3.1207)); + exchange_rates.insert(Exchange::USD("2017-02-16".to_string()), dec!(4.0567)); + exchange_rates.insert(Exchange::EUR("2025-08-14".to_string()), dec!(4.2639)); + exchange_rates.insert(Exchange::USD("2016-10-05".to_string()), dec!(3.8307)); + exchange_rates.insert(Exchange::USD("2020-06-01".to_string()), dec!(3.968)); + exchange_rates.insert(Exchange::USD("2024-07-26".to_string()), dec!(3.9415)); + exchange_rates.insert(Exchange::USD("2019-02-27".to_string()), dec!(3.7886)); + exchange_rates.insert(Exchange::USD("2016-09-01".to_string()), dec!(3.9116)); + exchange_rates.insert(Exchange::USD("2016-06-06".to_string()), dec!(3.8602)); + exchange_rates.insert(Exchange::USD("2014-04-14".to_string()), dec!(3.0288)); + exchange_rates.insert(Exchange::EUR("2024-08-28".to_string()), dec!(4.2938)); + exchange_rates.insert(Exchange::USD("2024-08-08".to_string()), dec!(3.952)); + exchange_rates.insert(Exchange::USD("2025-04-28".to_string()), dec!(3.7701)); + exchange_rates.insert(Exchange::USD("2024-04-09".to_string()), dec!(3.9223)); + exchange_rates.insert(Exchange::USD("2016-11-02".to_string()), dec!(3.8954)); + exchange_rates.insert(Exchange::USD("2014-07-03".to_string()), dec!(3.0418)); + exchange_rates.insert(Exchange::USD("2023-01-24".to_string()), dec!(4.3341)); + exchange_rates.insert(Exchange::USD("2015-01-14".to_string()), dec!(3.6525)); + exchange_rates.insert(Exchange::USD("2023-09-12".to_string()), dec!(4.3711)); + exchange_rates.insert(Exchange::USD("2016-10-24".to_string()), dec!(3.969)); + exchange_rates.insert(Exchange::USD("2023-04-21".to_string()), dec!(4.2006)); + exchange_rates.insert(Exchange::USD("2024-03-20".to_string()), dec!(3.9895)); + exchange_rates.insert(Exchange::USD("2017-06-09".to_string()), dec!(3.7465)); + exchange_rates.insert(Exchange::USD("2018-03-26".to_string()), dec!(3.4145)); + exchange_rates.insert(Exchange::EUR("2024-04-29".to_string()), dec!(4.319)); + exchange_rates.insert(Exchange::USD("2024-10-09".to_string()), dec!(3.9266)); + exchange_rates.insert(Exchange::USD("2021-09-17".to_string()), dec!(3.8882)); + exchange_rates.insert(Exchange::USD("2014-09-25".to_string()), dec!(3.2823)); + exchange_rates.insert(Exchange::USD("2016-01-26".to_string()), dec!(4.1475)); + exchange_rates.insert(Exchange::USD("2012-09-14".to_string()), dec!(3.1131)); + exchange_rates.insert(Exchange::USD("2021-02-16".to_string()), dec!(3.694)); + exchange_rates.insert(Exchange::USD("2014-04-02".to_string()), dec!(3.0288)); + exchange_rates.insert(Exchange::USD("2014-12-18".to_string()), dec!(3.4428)); + exchange_rates.insert(Exchange::USD("2012-06-22".to_string()), dec!(3.4025)); + exchange_rates.insert(Exchange::USD("2017-10-10".to_string()), dec!(3.6468)); + exchange_rates.insert(Exchange::EUR("2023-10-13".to_string()), dec!(4.5417)); + exchange_rates.insert(Exchange::USD("2025-02-20".to_string()), dec!(3.9974)); + exchange_rates.insert(Exchange::EUR("2025-11-05".to_string()), dec!(4.2597)); + exchange_rates.insert(Exchange::EUR("2023-03-13".to_string()), dec!(4.6848)); + exchange_rates.insert(Exchange::USD("2013-10-22".to_string()), dec!(3.0564)); + exchange_rates.insert(Exchange::USD("2023-11-07".to_string()), dec!(4.1667)); + exchange_rates.insert(Exchange::USD("2018-11-07".to_string()), dec!(3.7398)); + exchange_rates.insert(Exchange::USD("2022-12-02".to_string()), dec!(4.4492)); + exchange_rates.insert(Exchange::USD("2015-01-16".to_string()), dec!(3.7174)); + exchange_rates.insert(Exchange::USD("2013-11-27".to_string()), dec!(3.0899)); + exchange_rates.insert(Exchange::USD("2020-03-20".to_string()), dec!(4.24)); + exchange_rates.insert(Exchange::USD("2018-11-29".to_string()), dec!(3.7728)); + exchange_rates.insert(Exchange::USD("2019-12-05".to_string()), dec!(3.8566)); + exchange_rates.insert(Exchange::USD("2017-01-05".to_string()), dec!(4.1667)); + exchange_rates.insert(Exchange::EUR("2024-06-11".to_string()), dec!(4.3456)); + exchange_rates.insert(Exchange::USD("2020-01-03".to_string()), dec!(3.8213)); + exchange_rates.insert(Exchange::USD("2020-10-19".to_string()), dec!(3.8761)); + exchange_rates.insert(Exchange::EUR("2024-05-09".to_string()), dec!(4.2993)); + exchange_rates.insert(Exchange::USD("2019-12-09".to_string()), dec!(3.8704)); + exchange_rates.insert(Exchange::USD("2022-03-30".to_string()), dec!(4.1688)); + exchange_rates.insert(Exchange::USD("2020-01-08".to_string()), dec!(3.8123)); + exchange_rates.insert(Exchange::USD("2015-11-25".to_string()), dec!(4.0215)); + exchange_rates.insert(Exchange::USD("2015-02-23".to_string()), dec!(3.6933)); + exchange_rates.insert(Exchange::USD("2025-06-24".to_string()), dec!(3.6753)); + exchange_rates.insert(Exchange::EUR("2025-01-13".to_string()), dec!(4.2715)); + exchange_rates.insert(Exchange::USD("2023-05-04".to_string()), dec!(4.1547)); + exchange_rates.insert(Exchange::USD("2024-09-10".to_string()), dec!(3.8798)); + exchange_rates.insert(Exchange::EUR("2023-01-24".to_string()), dec!(4.7073)); + exchange_rates.insert(Exchange::USD("2012-09-21".to_string()), dec!(3.1712)); + exchange_rates.insert(Exchange::USD("2025-11-13".to_string()), dec!(3.6417)); + exchange_rates.insert(Exchange::USD("2016-02-10".to_string()), dec!(3.9383)); + exchange_rates.insert(Exchange::USD("2022-05-05".to_string()), dec!(4.4017)); + exchange_rates.insert(Exchange::USD("2013-05-27".to_string()), dec!(3.2416)); + exchange_rates.insert(Exchange::EUR("2024-06-21".to_string()), dec!(4.3331)); + exchange_rates.insert(Exchange::EUR("2025-03-10".to_string()), dec!(4.1857)); + exchange_rates.insert(Exchange::USD("2017-05-08".to_string()), dec!(3.8391)); + exchange_rates.insert(Exchange::USD("2014-04-04".to_string()), dec!(3.0397)); + exchange_rates.insert(Exchange::USD("2015-08-10".to_string()), dec!(3.8246)); + exchange_rates.insert(Exchange::USD("2020-02-11".to_string()), dec!(3.9041)); + exchange_rates.insert(Exchange::USD("2020-10-28".to_string()), dec!(3.9313)); + exchange_rates.insert(Exchange::USD("2014-06-06".to_string()), dec!(3.0222)); + exchange_rates.insert(Exchange::USD("2022-06-23".to_string()), dec!(4.4881)); + exchange_rates.insert(Exchange::USD("2021-07-26".to_string()), dec!(3.8915)); + exchange_rates.insert(Exchange::EUR("2025-01-28".to_string()), dec!(4.2092)); + exchange_rates.insert(Exchange::USD("2019-11-12".to_string()), dec!(3.878)); + exchange_rates.insert(Exchange::EUR("2023-04-25".to_string()), dec!(4.598)); + exchange_rates.insert(Exchange::EUR("2024-11-18".to_string()), dec!(4.332)); + exchange_rates.insert(Exchange::USD("2023-11-28".to_string()), dec!(3.975)); + exchange_rates.insert(Exchange::USD("2020-03-16".to_string()), dec!(3.9231)); + exchange_rates.insert(Exchange::EUR("2024-11-13".to_string()), dec!(4.3416)); + exchange_rates.insert(Exchange::EUR("2023-08-11".to_string()), dec!(4.4547)); + exchange_rates.insert(Exchange::USD("2020-08-13".to_string()), dec!(3.7176)); + exchange_rates.insert(Exchange::USD("2015-11-16".to_string()), dec!(3.9581)); + exchange_rates.insert(Exchange::EUR("2024-11-29".to_string()), dec!(4.3043)); + exchange_rates.insert(Exchange::USD("2021-03-26".to_string()), dec!(3.9307)); + exchange_rates.insert(Exchange::USD("2021-10-11".to_string()), dec!(3.9862)); + exchange_rates.insert(Exchange::USD("2016-01-20".to_string()), dec!(4.0877)); + exchange_rates.insert(Exchange::USD("2015-05-06".to_string()), dec!(3.6116)); + exchange_rates.insert(Exchange::USD("2014-02-13".to_string()), dec!(3.0532)); + exchange_rates.insert(Exchange::USD("2018-03-02".to_string()), dec!(3.42)); + exchange_rates.insert(Exchange::USD("2023-05-19".to_string()), dec!(4.2053)); + exchange_rates.insert(Exchange::USD("2021-08-25".to_string()), dec!(3.8869)); + exchange_rates.insert(Exchange::EUR("2025-07-18".to_string()), dec!(4.2509)); + exchange_rates.insert(Exchange::EUR("2024-01-15".to_string()), dec!(4.3748)); + exchange_rates.insert(Exchange::USD("2024-02-14".to_string()), dec!(4.0593)); + exchange_rates.insert(Exchange::USD("2022-05-23".to_string()), dec!(4.3369)); + exchange_rates.insert(Exchange::USD("2012-11-26".to_string()), dec!(3.1744)); + exchange_rates.insert(Exchange::USD("2017-05-25".to_string()), dec!(3.7177)); + exchange_rates.insert(Exchange::USD("2017-12-08".to_string()), dec!(3.5808)); + exchange_rates.insert(Exchange::EUR("2025-12-10".to_string()), dec!(4.2274)); + exchange_rates.insert(Exchange::USD("2014-11-03".to_string()), dec!(3.3772)); + exchange_rates.insert(Exchange::USD("2020-06-25".to_string()), dec!(3.9623)); + exchange_rates.insert(Exchange::USD("2018-11-06".to_string()), dec!(3.7802)); + exchange_rates.insert(Exchange::USD("2025-07-14".to_string()), dec!(3.6475)); + exchange_rates.insert(Exchange::USD("2024-10-29".to_string()), dec!(4.0251)); + exchange_rates.insert(Exchange::USD("2019-04-01".to_string()), dec!(3.8267)); + exchange_rates.insert(Exchange::USD("2023-08-23".to_string()), dec!(4.1438)); + exchange_rates.insert(Exchange::USD("2025-09-30".to_string()), dec!(3.6315)); + exchange_rates.insert(Exchange::USD("2022-12-30".to_string()), dec!(4.4018)); + exchange_rates.insert(Exchange::EUR("2023-08-17".to_string()), dec!(4.4681)); + exchange_rates.insert(Exchange::USD("2015-03-27".to_string()), dec!(3.789)); + exchange_rates.insert(Exchange::USD("2019-04-30".to_string()), dec!(3.8291)); + exchange_rates.insert(Exchange::USD("2025-01-31".to_string()), dec!(4.0576)); + exchange_rates.insert(Exchange::USD("2024-02-13".to_string()), dec!(4.0136)); + exchange_rates.insert(Exchange::USD("2020-09-01".to_string()), dec!(3.6707)); + exchange_rates.insert(Exchange::USD("2019-09-19".to_string()), dec!(3.9267)); + exchange_rates.insert(Exchange::USD("2020-01-29".to_string()), dec!(3.8871)); + exchange_rates.insert(Exchange::USD("2023-07-07".to_string()), dec!(4.1189)); + exchange_rates.insert(Exchange::USD("2017-10-16".to_string()), dec!(3.6004)); + exchange_rates.insert(Exchange::USD("2019-04-08".to_string()), dec!(3.8188)); + exchange_rates.insert(Exchange::EUR("2024-07-17".to_string()), dec!(4.2904)); + exchange_rates.insert(Exchange::USD("2020-05-20".to_string()), dec!(4.1619)); + exchange_rates.insert(Exchange::EUR("2023-10-11".to_string()), dec!(4.5183)); + exchange_rates.insert(Exchange::USD("2018-08-03".to_string()), dec!(3.6926)); + exchange_rates.insert(Exchange::USD("2019-07-18".to_string()), dec!(3.7933)); + exchange_rates.insert(Exchange::USD("2024-09-03".to_string()), dec!(3.8701)); + exchange_rates.insert(Exchange::USD("2016-04-28".to_string()), dec!(3.8695)); + exchange_rates.insert(Exchange::USD("2022-05-25".to_string()), dec!(4.3069)); + exchange_rates.insert(Exchange::USD("2021-05-27".to_string()), dec!(3.6929)); + exchange_rates.insert(Exchange::USD("2023-11-15".to_string()), dec!(4.0453)); + exchange_rates.insert(Exchange::USD("2019-02-07".to_string()), dec!(3.7919)); + exchange_rates.insert(Exchange::EUR("2025-07-04".to_string()), dec!(4.2515)); + exchange_rates.insert(Exchange::USD("2025-06-30".to_string()), dec!(3.6164)); + exchange_rates.insert(Exchange::USD("2012-02-07".to_string()), dec!(3.1806)); + exchange_rates.insert(Exchange::USD("2012-03-21".to_string()), dec!(3.1173)); + exchange_rates.insert(Exchange::USD("2014-07-15".to_string()), dec!(3.0454)); + exchange_rates.insert(Exchange::USD("2014-01-02".to_string()), dec!(3.0315)); + exchange_rates.insert(Exchange::USD("2018-11-08".to_string()), dec!(3.7599)); + exchange_rates.insert(Exchange::USD("2021-03-08".to_string()), dec!(3.8665)); + exchange_rates.insert(Exchange::USD("2025-05-23".to_string()), dec!(3.7506)); + exchange_rates.insert(Exchange::USD("2017-06-05".to_string()), dec!(3.7066)); + exchange_rates.insert(Exchange::USD("2023-12-21".to_string()), dec!(3.9645)); + exchange_rates.insert(Exchange::USD("2021-11-02".to_string()), dec!(3.9772)); + exchange_rates.insert(Exchange::USD("2020-11-17".to_string()), dec!(3.7877)); + exchange_rates.insert(Exchange::USD("2025-09-16".to_string()), dec!(3.6034)); + exchange_rates.insert(Exchange::USD("2025-08-12".to_string()), dec!(3.6702)); + exchange_rates.insert(Exchange::USD("2019-07-01".to_string()), dec!(3.743)); + exchange_rates.insert(Exchange::USD("2018-01-15".to_string()), dec!(3.401)); + exchange_rates.insert(Exchange::USD("2017-09-22".to_string()), dec!(3.5651)); + exchange_rates.insert(Exchange::USD("2016-01-12".to_string()), dec!(4.017)); + exchange_rates.insert(Exchange::USD("2017-03-08".to_string()), dec!(4.0818)); + exchange_rates.insert(Exchange::USD("2014-08-08".to_string()), dec!(3.1509)); + exchange_rates.insert(Exchange::USD("2012-04-30".to_string()), dec!(3.1509)); + exchange_rates.insert(Exchange::EUR("2023-05-29".to_string()), dec!(4.5294)); + exchange_rates.insert(Exchange::USD("2020-10-26".to_string()), dec!(3.8759)); + exchange_rates.insert(Exchange::EUR("2024-12-31".to_string()), dec!(4.273)); + exchange_rates.insert(Exchange::USD("2016-03-18".to_string()), dec!(3.7882)); + exchange_rates.insert(Exchange::EUR("2025-08-19".to_string()), dec!(4.242)); + exchange_rates.insert(Exchange::EUR("2024-04-04".to_string()), dec!(4.2921)); + exchange_rates.insert(Exchange::EUR("2024-12-12".to_string()), dec!(4.2818)); + exchange_rates.insert(Exchange::USD("2016-07-07".to_string()), dec!(4.0036)); + exchange_rates.insert(Exchange::USD("2016-02-04".to_string()), dec!(3.9492)); + exchange_rates.insert(Exchange::EUR("2024-05-27".to_string()), dec!(4.2528)); + exchange_rates.insert(Exchange::USD("2024-05-20".to_string()), dec!(3.9149)); + exchange_rates.insert(Exchange::USD("2015-04-01".to_string()), dec!(3.789)); + exchange_rates.insert(Exchange::USD("2025-12-01".to_string()), dec!(3.6383)); + exchange_rates.insert(Exchange::EUR("2024-11-07".to_string()), dec!(4.3431)); + exchange_rates.insert(Exchange::USD("2022-04-28".to_string()), dec!(4.4613)); + exchange_rates.insert(Exchange::USD("2020-04-30".to_string()), dec!(4.1729)); + exchange_rates.insert(Exchange::USD("2020-07-09".to_string()), dec!(3.9486)); + exchange_rates.insert(Exchange::USD("2019-01-08".to_string()), dec!(3.7559)); + exchange_rates.insert(Exchange::USD("2015-03-05".to_string()), dec!(3.7525)); + exchange_rates.insert(Exchange::USD("2012-05-16".to_string()), dec!(3.4353)); + exchange_rates.insert(Exchange::EUR("2025-09-24".to_string()), dec!(4.2676)); + exchange_rates.insert(Exchange::USD("2014-12-12".to_string()), dec!(3.3639)); + exchange_rates.insert(Exchange::USD("2021-08-03".to_string()), dec!(3.8315)); + exchange_rates.insert(Exchange::USD("2022-01-14".to_string()), dec!(3.9597)); + exchange_rates.insert(Exchange::USD("2016-07-06".to_string()), dec!(4.0225)); + exchange_rates.insert(Exchange::USD("2015-11-05".to_string()), dec!(3.8925)); + exchange_rates.insert(Exchange::USD("2014-10-07".to_string()), dec!(3.3106)); + exchange_rates.insert(Exchange::USD("2014-12-08".to_string()), dec!(3.3978)); + exchange_rates.insert(Exchange::USD("2023-11-21".to_string()), dec!(3.9882)); + exchange_rates.insert(Exchange::USD("2017-04-20".to_string()), dec!(3.9588)); + exchange_rates.insert(Exchange::USD("2020-06-08".to_string()), dec!(3.9197)); + exchange_rates.insert(Exchange::EUR("2023-05-31".to_string()), dec!(4.5376)); + exchange_rates.insert(Exchange::USD("2017-12-05".to_string()), dec!(3.5454)); + exchange_rates.insert(Exchange::EUR("2024-01-22".to_string()), dec!(4.356)); + exchange_rates.insert(Exchange::USD("2016-06-10".to_string()), dec!(3.8545)); + exchange_rates.insert(Exchange::USD("2023-10-10".to_string()), dec!(4.2985)); + exchange_rates.insert(Exchange::USD("2017-06-08".to_string()), dec!(3.74)); + exchange_rates.insert(Exchange::USD("2017-09-12".to_string()), dec!(3.5552)); + exchange_rates.insert(Exchange::USD("2023-08-07".to_string()), dec!(4.0347)); + exchange_rates.insert(Exchange::USD("2016-06-14".to_string()), dec!(3.9483)); + exchange_rates.insert(Exchange::USD("2022-11-23".to_string()), dec!(4.548)); + exchange_rates.insert(Exchange::EUR("2023-11-02".to_string()), dec!(4.4582)); + exchange_rates.insert(Exchange::USD("2016-04-22".to_string()), dec!(3.8399)); + exchange_rates.insert(Exchange::USD("2021-08-26".to_string()), dec!(3.8912)); + exchange_rates.insert(Exchange::USD("2020-07-20".to_string()), dec!(3.8997)); + exchange_rates.insert(Exchange::EUR("2023-08-24".to_string()), dec!(4.473)); + exchange_rates.insert(Exchange::USD("2019-03-20".to_string()), dec!(3.7767)); + exchange_rates.insert(Exchange::USD("2016-08-17".to_string()), dec!(3.8075)); + exchange_rates.insert(Exchange::EUR("2023-01-30".to_string()), dec!(4.716)); + exchange_rates.insert(Exchange::USD("2020-03-10".to_string()), dec!(3.8058)); + exchange_rates.insert(Exchange::USD("2023-07-18".to_string()), dec!(3.9451)); + exchange_rates.insert(Exchange::USD("2017-08-29".to_string()), dec!(3.5372)); + exchange_rates.insert(Exchange::USD("2018-07-06".to_string()), dec!(3.7222)); + exchange_rates.insert(Exchange::USD("2018-05-21".to_string()), dec!(3.6615)); + exchange_rates.insert(Exchange::USD("2015-03-20".to_string()), dec!(3.8645)); + exchange_rates.insert(Exchange::USD("2014-10-17".to_string()), dec!(3.2964)); + exchange_rates.insert(Exchange::EUR("2025-05-07".to_string()), dec!(4.2757)); + exchange_rates.insert(Exchange::EUR("2025-05-12".to_string()), dec!(4.2337)); + exchange_rates.insert(Exchange::USD("2016-11-28".to_string()), dec!(4.1521)); + exchange_rates.insert(Exchange::USD("2019-07-09".to_string()), dec!(3.8074)); + exchange_rates.insert(Exchange::EUR("2025-08-21".to_string()), dec!(4.2521)); + exchange_rates.insert(Exchange::USD("2019-11-28".to_string()), dec!(3.9252)); + exchange_rates.insert(Exchange::USD("2021-06-29".to_string()), dec!(3.7914)); + exchange_rates.insert(Exchange::USD("2020-07-22".to_string()), dec!(3.8534)); + exchange_rates.insert(Exchange::USD("2025-01-16".to_string()), dec!(4.1433)); + exchange_rates.insert(Exchange::USD("2013-09-20".to_string()), dec!(3.1152)); + exchange_rates.insert(Exchange::USD("2019-05-28".to_string()), dec!(3.8386)); + exchange_rates.insert(Exchange::USD("2017-01-20".to_string()), dec!(4.1005)); + exchange_rates.insert(Exchange::USD("2021-04-20".to_string()), dec!(3.7737)); + exchange_rates.insert(Exchange::USD("2018-08-24".to_string()), dec!(3.7014)); + exchange_rates.insert(Exchange::USD("2025-09-18".to_string()), dec!(3.5986)); + exchange_rates.insert(Exchange::USD("2013-06-17".to_string()), dec!(3.1719)); + exchange_rates.insert(Exchange::USD("2020-12-24".to_string()), dec!(3.6981)); + exchange_rates.insert(Exchange::USD("2019-09-03".to_string()), dec!(3.9882)); + exchange_rates.insert(Exchange::USD("2018-04-20".to_string()), dec!(3.3881)); + exchange_rates.insert(Exchange::USD("2017-05-05".to_string()), dec!(3.849)); + exchange_rates.insert(Exchange::USD("2020-01-24".to_string()), dec!(3.8475)); + exchange_rates.insert(Exchange::USD("2012-08-09".to_string()), dec!(3.2915)); + exchange_rates.insert(Exchange::USD("2015-03-04".to_string()), dec!(3.7485)); + exchange_rates.insert(Exchange::USD("2015-04-03".to_string()), dec!(3.7449)); + exchange_rates.insert(Exchange::USD("2015-12-02".to_string()), dec!(4.0305)); + exchange_rates.insert(Exchange::USD("2025-03-10".to_string()), dec!(3.8573)); + exchange_rates.insert(Exchange::USD("2020-11-20".to_string()), dec!(3.7677)); + exchange_rates.insert(Exchange::USD("2018-05-24".to_string()), dec!(3.659)); + exchange_rates.insert(Exchange::EUR("2023-10-17".to_string()), dec!(4.4389)); + exchange_rates.insert(Exchange::USD("2013-06-20".to_string()), dec!(3.2693)); + exchange_rates.insert(Exchange::USD("2019-04-16".to_string()), dec!(3.7802)); + exchange_rates.insert(Exchange::USD("2014-03-21".to_string()), dec!(3.0425)); + exchange_rates.insert(Exchange::EUR("2023-04-11".to_string()), dec!(4.681)); + exchange_rates.insert(Exchange::EUR("2024-06-28".to_string()), dec!(4.313)); + exchange_rates.insert(Exchange::USD("2017-08-28".to_string()), dec!(3.5736)); + exchange_rates.insert(Exchange::USD("2015-07-01".to_string()), dec!(3.7625)); + exchange_rates.insert(Exchange::USD("2015-11-27".to_string()), dec!(4.0333)); + exchange_rates.insert(Exchange::USD("2018-10-02".to_string()), dec!(3.7326)); + exchange_rates.insert(Exchange::USD("2016-01-13".to_string()), dec!(4.0068)); + exchange_rates.insert(Exchange::USD("2020-02-28".to_string()), dec!(3.9255)); + exchange_rates.insert(Exchange::USD("2016-09-26".to_string()), dec!(3.8324)); + exchange_rates.insert(Exchange::USD("2015-09-30".to_string()), dec!(3.7754)); + exchange_rates.insert(Exchange::EUR("2025-07-11".to_string()), dec!(4.2563)); + exchange_rates.insert(Exchange::USD("2023-09-26".to_string()), dec!(4.3485)); + exchange_rates.insert(Exchange::USD("2015-06-12".to_string()), dec!(3.7094)); + exchange_rates.insert(Exchange::USD("2019-10-29".to_string()), dec!(3.8598)); + exchange_rates.insert(Exchange::USD("2018-03-12".to_string()), dec!(3.4066)); + exchange_rates.insert(Exchange::USD("2016-07-13".to_string()), dec!(3.9809)); + exchange_rates.insert(Exchange::USD("2012-08-27".to_string()), dec!(3.257)); + exchange_rates.insert(Exchange::USD("2020-05-14".to_string()), dec!(4.2269)); + exchange_rates.insert(Exchange::USD("2017-06-22".to_string()), dec!(3.8002)); + exchange_rates.insert(Exchange::USD("2016-04-20".to_string()), dec!(3.7842)); + exchange_rates.insert(Exchange::USD("2019-10-08".to_string()), dec!(3.9405)); + exchange_rates.insert(Exchange::USD("2022-01-27".to_string()), dec!(4.083)); + exchange_rates.insert(Exchange::USD("2012-09-25".to_string()), dec!(3.2136)); + exchange_rates.insert(Exchange::USD("2012-05-29".to_string()), dec!(3.4675)); + exchange_rates.insert(Exchange::USD("2018-12-03".to_string()), dec!(3.7672)); + exchange_rates.insert(Exchange::USD("2024-04-02".to_string()), dec!(4.0009)); + exchange_rates.insert(Exchange::USD("2014-02-18".to_string()), dec!(3.03)); + exchange_rates.insert(Exchange::USD("2019-10-01".to_string()), dec!(4.0147)); + exchange_rates.insert(Exchange::USD("2016-09-02".to_string()), dec!(3.9164)); + exchange_rates.insert(Exchange::EUR("2023-01-17".to_string()), dec!(4.6946)); + exchange_rates.insert(Exchange::EUR("2024-08-27".to_string()), dec!(4.2802)); + exchange_rates.insert(Exchange::USD("2016-02-15".to_string()), dec!(3.922)); + exchange_rates.insert(Exchange::USD("2021-08-09".to_string()), dec!(3.8885)); + exchange_rates.insert(Exchange::USD("2023-12-12".to_string()), dec!(4.0204)); + exchange_rates.insert(Exchange::EUR("2025-10-24".to_string()), dec!(4.2353)); + exchange_rates.insert(Exchange::USD("2014-03-07".to_string()), dec!(3.0185)); + exchange_rates.insert(Exchange::USD("2025-12-04".to_string()), dec!(3.6221)); + exchange_rates.insert(Exchange::USD("2024-08-30".to_string()), dec!(3.8644)); + exchange_rates.insert(Exchange::USD("2020-09-15".to_string()), dec!(3.7445)); + exchange_rates.insert(Exchange::USD("2016-02-01".to_string()), dec!(4.0638)); + exchange_rates.insert(Exchange::USD("2024-03-25".to_string()), dec!(3.9833)); + exchange_rates.insert(Exchange::USD("2012-11-19".to_string()), dec!(3.2503)); + exchange_rates.insert(Exchange::USD("2013-07-11".to_string()), dec!(3.3225)); + exchange_rates.insert(Exchange::EUR("2024-03-01".to_string()), dec!(4.3176)); + exchange_rates.insert(Exchange::USD("2018-05-29".to_string()), dec!(3.7299)); + exchange_rates.insert(Exchange::USD("2016-04-08".to_string()), dec!(3.7701)); + exchange_rates.insert(Exchange::USD("2018-05-18".to_string()), dec!(3.6385)); + exchange_rates.insert(Exchange::USD("2016-04-06".to_string()), dec!(3.751)); + exchange_rates.insert(Exchange::USD("2019-04-29".to_string()), dec!(3.8468)); + exchange_rates.insert(Exchange::USD("2023-04-25".to_string()), dec!(4.1649)); + exchange_rates.insert(Exchange::USD("2015-06-26".to_string()), dec!(3.7275)); + exchange_rates.insert(Exchange::USD("2021-03-11".to_string()), dec!(3.8287)); + exchange_rates.insert(Exchange::USD("2017-01-03".to_string()), dec!(4.2271)); + exchange_rates.insert(Exchange::USD("2019-07-19".to_string()), dec!(3.7855)); + exchange_rates.insert(Exchange::USD("2025-07-18".to_string()), dec!(3.6535)); + exchange_rates.insert(Exchange::USD("2017-05-23".to_string()), dec!(3.7354)); + exchange_rates.insert(Exchange::EUR("2024-12-24".to_string()), dec!(4.2739)); + exchange_rates.insert(Exchange::EUR("2024-06-25".to_string()), dec!(4.2909)); + exchange_rates.insert(Exchange::USD("2020-06-12".to_string()), dec!(3.9299)); + exchange_rates.insert(Exchange::USD("2020-08-25".to_string()), dec!(3.7144)); + exchange_rates.insert(Exchange::EUR("2023-11-07".to_string()), dec!(4.4513)); + exchange_rates.insert(Exchange::USD("2021-08-10".to_string()), dec!(3.8937)); + exchange_rates.insert(Exchange::EUR("2024-08-16".to_string()), dec!(4.2732)); + exchange_rates.insert(Exchange::USD("2025-10-16".to_string()), dec!(3.6467)); + exchange_rates.insert(Exchange::EUR("2025-02-07".to_string()), dec!(4.1898)); + exchange_rates.insert(Exchange::USD("2012-06-04".to_string()), dec!(3.5431)); + exchange_rates.insert(Exchange::USD("2013-06-03".to_string()), dec!(3.2865)); + exchange_rates.insert(Exchange::USD("2021-06-30".to_string()), dec!(3.8035)); + exchange_rates.insert(Exchange::USD("2020-12-22".to_string()), dec!(3.6921)); + exchange_rates.insert(Exchange::USD("2021-02-04".to_string()), dec!(3.7509)); + exchange_rates.insert(Exchange::USD("2012-01-18".to_string()), dec!(3.4)); + exchange_rates.insert(Exchange::USD("2023-06-26".to_string()), dec!(4.0669)); + exchange_rates.insert(Exchange::USD("2013-02-19".to_string()), dec!(3.136)); + exchange_rates.insert(Exchange::USD("2012-03-02".to_string()), dec!(3.1023)); + exchange_rates.insert(Exchange::USD("2013-11-19".to_string()), dec!(3.0925)); + exchange_rates.insert(Exchange::USD("2025-10-22".to_string()), dec!(3.6591)); + exchange_rates.insert(Exchange::USD("2019-02-22".to_string()), dec!(3.8242)); + exchange_rates.insert(Exchange::USD("2018-10-22".to_string()), dec!(3.7273)); + exchange_rates.insert(Exchange::USD("2014-06-13".to_string()), dec!(3.0382)); + exchange_rates.insert(Exchange::USD("2014-07-02".to_string()), dec!(3.0387)); + exchange_rates.insert(Exchange::USD("2022-08-31".to_string()), dec!(4.736)); + exchange_rates.insert(Exchange::USD("2013-09-05".to_string()), dec!(3.2463)); + exchange_rates.insert(Exchange::USD("2012-04-03".to_string()), dec!(3.099)); + exchange_rates.insert(Exchange::USD("2025-01-27".to_string()), dec!(4.021)); + exchange_rates.insert(Exchange::USD("2014-12-19".to_string()), dec!(3.4791)); + exchange_rates.insert(Exchange::USD("2022-05-04".to_string()), dec!(4.4456)); + exchange_rates.insert(Exchange::USD("2019-12-17".to_string()), dec!(3.8211)); + exchange_rates.insert(Exchange::USD("2014-02-21".to_string()), dec!(3.0389)); + exchange_rates.insert(Exchange::USD("2018-08-21".to_string()), dec!(3.7375)); + exchange_rates.insert(Exchange::USD("2025-04-02".to_string()), dec!(3.8707)); + exchange_rates.insert(Exchange::USD("2017-03-07".to_string()), dec!(4.0803)); + exchange_rates.insert(Exchange::EUR("2023-11-10".to_string()), dec!(4.4227)); + exchange_rates.insert(Exchange::USD("2024-02-20".to_string()), dec!(3.9994)); + exchange_rates.insert(Exchange::USD("2013-09-26".to_string()), dec!(3.1277)); + exchange_rates.insert(Exchange::USD("2013-02-15".to_string()), dec!(3.1398)); + exchange_rates.insert(Exchange::USD("2022-11-10".to_string()), dec!(4.7328)); + exchange_rates.insert(Exchange::EUR("2025-07-25".to_string()), dec!(4.2544)); + exchange_rates.insert(Exchange::USD("2023-12-18".to_string()), dec!(3.9625)); + exchange_rates.insert(Exchange::USD("2023-10-04".to_string()), dec!(4.4155)); + exchange_rates.insert(Exchange::USD("2020-12-07".to_string()), dec!(3.7001)); + exchange_rates.insert(Exchange::USD("2016-02-12".to_string()), dec!(3.9074)); + exchange_rates.insert(Exchange::EUR("2024-07-16".to_string()), dec!(4.2604)); + exchange_rates.insert(Exchange::USD("2021-06-02".to_string()), dec!(3.6659)); + exchange_rates.insert(Exchange::USD("2019-09-23".to_string()), dec!(3.9983)); + exchange_rates.insert(Exchange::EUR("2025-07-28".to_string()), dec!(4.2565)); + exchange_rates.insert(Exchange::USD("2021-08-13".to_string()), dec!(3.8934)); + exchange_rates.insert(Exchange::USD("2018-03-09".to_string()), dec!(3.4132)); + exchange_rates.insert(Exchange::EUR("2024-04-24".to_string()), dec!(4.3177)); + exchange_rates.insert(Exchange::USD("2024-09-25".to_string()), dec!(3.8117)); + exchange_rates.insert(Exchange::USD("2019-08-06".to_string()), dec!(3.8482)); + exchange_rates.insert(Exchange::USD("2019-11-05".to_string()), dec!(3.8308)); + exchange_rates.insert(Exchange::USD("2021-05-25".to_string()), dec!(3.6549)); + exchange_rates.insert(Exchange::USD("2012-03-28".to_string()), dec!(3.11)); + exchange_rates.insert(Exchange::USD("2018-02-26".to_string()), dec!(3.3799)); + exchange_rates.insert(Exchange::USD("2012-06-08".to_string()), dec!(3.4566)); + exchange_rates.insert(Exchange::EUR("2023-04-17".to_string()), dec!(4.6341)); + exchange_rates.insert(Exchange::USD("2024-02-21".to_string()), dec!(3.9966)); + exchange_rates.insert(Exchange::EUR("2025-05-02".to_string()), dec!(4.275)); + exchange_rates.insert(Exchange::USD("2024-10-31".to_string()), dec!(4.0059)); + exchange_rates.insert(Exchange::EUR("2024-11-08".to_string()), dec!(4.3244)); + exchange_rates.insert(Exchange::USD("2020-03-12".to_string()), dec!(3.8642)); + exchange_rates.insert(Exchange::USD("2022-12-28".to_string()), dec!(4.4127)); + exchange_rates.insert(Exchange::USD("2014-01-22".to_string()), dec!(3.0761)); + exchange_rates.insert(Exchange::USD("2023-09-07".to_string()), dec!(4.289)); + exchange_rates.insert(Exchange::USD("2024-12-18".to_string()), dec!(4.0621)); + exchange_rates.insert(Exchange::USD("2018-01-05".to_string()), dec!(3.4488)); + exchange_rates.insert(Exchange::USD("2021-05-12".to_string()), dec!(3.7456)); + exchange_rates.insert(Exchange::USD("2017-01-12".to_string()), dec!(4.1103)); + exchange_rates.insert(Exchange::USD("2017-02-10".to_string()), dec!(4.0435)); + exchange_rates.insert(Exchange::USD("2012-02-06".to_string()), dec!(3.2084)); + exchange_rates.insert(Exchange::USD("2021-03-04".to_string()), dec!(3.7851)); + exchange_rates.insert(Exchange::USD("2015-02-04".to_string()), dec!(3.644)); + exchange_rates.insert(Exchange::EUR("2024-03-05".to_string()), dec!(4.3228)); + exchange_rates.insert(Exchange::USD("2017-06-27".to_string()), dec!(3.7442)); + exchange_rates.insert(Exchange::USD("2020-12-31".to_string()), dec!(3.7584)); + exchange_rates.insert(Exchange::USD("2012-07-25".to_string()), dec!(3.4719)); + exchange_rates.insert(Exchange::USD("2019-11-14".to_string()), dec!(3.9011)); + exchange_rates.insert(Exchange::USD("2023-02-14".to_string()), dec!(4.4463)); + exchange_rates.insert(Exchange::USD("2019-10-31".to_string()), dec!(3.8174)); + exchange_rates.insert(Exchange::USD("2025-12-22".to_string()), dec!(3.5904)); + exchange_rates.insert(Exchange::USD("2023-02-16".to_string()), dec!(4.4601)); + exchange_rates.insert(Exchange::USD("2012-02-29".to_string()), dec!(3.073)); + exchange_rates.insert(Exchange::USD("2020-07-17".to_string()), dec!(3.9263)); + exchange_rates.insert(Exchange::USD("2019-09-26".to_string()), dec!(4.0092)); + exchange_rates.insert(Exchange::USD("2015-09-01".to_string()), dec!(3.7503)); + exchange_rates.insert(Exchange::EUR("2025-01-24".to_string()), dec!(4.21)); + exchange_rates.insert(Exchange::USD("2017-01-30".to_string()), dec!(4.0472)); + exchange_rates.insert(Exchange::USD("2017-12-20".to_string()), dec!(3.5459)); + exchange_rates.insert(Exchange::EUR("2024-11-28".to_string()), dec!(4.3085)); + exchange_rates.insert(Exchange::USD("2017-10-24".to_string()), dec!(3.6031)); + exchange_rates.insert(Exchange::USD("2021-09-02".to_string()), dec!(3.8044)); + exchange_rates.insert(Exchange::USD("2022-06-07".to_string()), dec!(4.2935)); + exchange_rates.insert(Exchange::USD("2021-03-03".to_string()), dec!(3.7509)); + exchange_rates.insert(Exchange::USD("2018-04-30".to_string()), dec!(3.4868)); + exchange_rates.insert(Exchange::EUR("2023-08-10".to_string()), dec!(4.465)); + exchange_rates.insert(Exchange::USD("2022-09-22".to_string()), dec!(4.8343)); + exchange_rates.insert(Exchange::USD("2019-12-16".to_string()), dec!(3.8311)); + exchange_rates.insert(Exchange::USD("2021-11-15".to_string()), dec!(4.0497)); + exchange_rates.insert(Exchange::USD("2024-05-24".to_string()), dec!(3.9376)); + exchange_rates.insert(Exchange::USD("2013-06-24".to_string()), dec!(3.3137)); + exchange_rates.insert(Exchange::USD("2023-07-21".to_string()), dec!(3.999)); + exchange_rates.insert(Exchange::USD("2021-03-01".to_string()), dec!(3.7572)); + exchange_rates.insert(Exchange::USD("2021-09-24".to_string()), dec!(3.9268)); + exchange_rates.insert(Exchange::USD("2014-12-16".to_string()), dec!(3.3522)); + exchange_rates.insert(Exchange::EUR("2024-11-05".to_string()), dec!(4.3607)); + exchange_rates.insert(Exchange::USD("2023-10-19".to_string()), dec!(4.2264)); + exchange_rates.insert(Exchange::EUR("2025-04-02".to_string()), dec!(4.1794)); + exchange_rates.insert(Exchange::USD("2024-08-29".to_string()), dec!(3.867)); + exchange_rates.insert(Exchange::USD("2015-02-24".to_string()), dec!(3.6948)); + exchange_rates.insert(Exchange::USD("2012-07-16".to_string()), dec!(3.4353)); + exchange_rates.insert(Exchange::USD("2020-09-25".to_string()), dec!(3.9016)); + exchange_rates.insert(Exchange::USD("2024-09-23".to_string()), dec!(3.8571)); + exchange_rates.insert(Exchange::USD("2014-08-22".to_string()), dec!(3.152)); + exchange_rates.insert(Exchange::USD("2025-01-10".to_string()), dec!(4.1415)); + exchange_rates.insert(Exchange::USD("2012-02-13".to_string()), dec!(3.1643)); + exchange_rates.insert(Exchange::EUR("2023-08-28".to_string()), dec!(4.4716)); + exchange_rates.insert(Exchange::USD("2025-02-19".to_string()), dec!(3.9875)); + exchange_rates.insert(Exchange::USD("2025-10-29".to_string()), dec!(3.6399)); + exchange_rates.insert(Exchange::EUR("2025-04-18".to_string()), dec!(4.2823)); + exchange_rates.insert(Exchange::USD("2022-11-04".to_string()), dec!(4.7975)); + exchange_rates.insert(Exchange::USD("2019-09-30".to_string()), dec!(4)); + exchange_rates.insert(Exchange::USD("2016-03-23".to_string()), dec!(3.801)); + exchange_rates.insert(Exchange::USD("2016-11-30".to_string()), dec!(4.1721)); + exchange_rates.insert(Exchange::EUR("2024-05-28".to_string()), dec!(4.2592)); + exchange_rates.insert(Exchange::USD("2022-08-02".to_string()), dec!(4.5984)); + exchange_rates.insert(Exchange::USD("2017-09-11".to_string()), dec!(3.5293)); + exchange_rates.insert(Exchange::EUR("2024-04-12".to_string()), dec!(4.2666)); + exchange_rates.insert(Exchange::EUR("2025-02-21".to_string()), dec!(4.1705)); + exchange_rates.insert(Exchange::USD("2012-12-06".to_string()), dec!(3.1538)); + exchange_rates.insert(Exchange::USD("2012-10-11".to_string()), dec!(3.1819)); + exchange_rates.insert(Exchange::USD("2024-03-22".to_string()), dec!(3.9928)); + exchange_rates.insert(Exchange::USD("2024-06-05".to_string()), dec!(3.9607)); + exchange_rates.insert(Exchange::USD("2023-05-08".to_string()), dec!(4.1384)); + exchange_rates.insert(Exchange::EUR("2024-01-08".to_string()), dec!(4.3548)); + exchange_rates.insert(Exchange::USD("2023-01-27".to_string()), dec!(4.3252)); + exchange_rates.insert(Exchange::USD("2021-08-18".to_string()), dec!(3.8861)); + exchange_rates.insert(Exchange::USD("2022-04-05".to_string()), dec!(4.2233)); + exchange_rates.insert(Exchange::USD("2016-02-11".to_string()), dec!(3.9219)); + exchange_rates.insert(Exchange::USD("2014-08-19".to_string()), dec!(3.1356)); + exchange_rates.insert(Exchange::EUR("2024-04-22".to_string()), dec!(4.3203)); + exchange_rates.insert(Exchange::USD("2016-06-24".to_string()), dec!(3.9994)); + exchange_rates.insert(Exchange::USD("2013-09-23".to_string()), dec!(3.126)); + exchange_rates.insert(Exchange::USD("2014-05-30".to_string()), dec!(3.0435)); + exchange_rates.insert(Exchange::USD("2012-09-26".to_string()), dec!(3.2187)); + exchange_rates.insert(Exchange::USD("2017-09-15".to_string()), dec!(3.5863)); + exchange_rates.insert(Exchange::USD("2021-09-16".to_string()), dec!(3.8847)); + exchange_rates.insert(Exchange::USD("2012-03-13".to_string()), dec!(3.1288)); + exchange_rates.insert(Exchange::USD("2024-08-06".to_string()), dec!(3.9467)); + exchange_rates.insert(Exchange::USD("2019-09-16".to_string()), dec!(3.9116)); + exchange_rates.insert(Exchange::USD("2016-09-16".to_string()), dec!(3.8497)); + exchange_rates.insert(Exchange::USD("2021-08-23".to_string()), dec!(3.9107)); + exchange_rates.insert(Exchange::USD("2019-12-03".to_string()), dec!(3.8706)); + exchange_rates.insert(Exchange::USD("2023-11-14".to_string()), dec!(4.121)); + exchange_rates.insert(Exchange::EUR("2025-12-09".to_string()), dec!(4.234)); + exchange_rates.insert(Exchange::USD("2015-02-10".to_string()), dec!(3.722)); + exchange_rates.insert(Exchange::USD("2021-11-04".to_string()), dec!(3.9807)); + exchange_rates.insert(Exchange::USD("2015-02-17".to_string()), dec!(3.6788)); + exchange_rates.insert(Exchange::USD("2025-03-04".to_string()), dec!(3.9543)); + exchange_rates.insert(Exchange::EUR("2023-08-31".to_string()), dec!(4.4684)); + exchange_rates.insert(Exchange::EUR("2024-04-25".to_string()), dec!(4.3198)); + exchange_rates.insert(Exchange::USD("2016-01-08".to_string()), dec!(3.9963)); + exchange_rates.insert(Exchange::USD("2012-09-13".to_string()), dec!(3.1852)); + exchange_rates.insert(Exchange::USD("2025-09-09".to_string()), dec!(3.6173)); + exchange_rates.insert(Exchange::USD("2015-12-04".to_string()), dec!(3.9607)); + exchange_rates.insert(Exchange::USD("2014-09-05".to_string()), dec!(3.2354)); + exchange_rates.insert(Exchange::USD("2025-06-25".to_string()), dec!(3.659)); + exchange_rates.insert(Exchange::USD("2017-02-20".to_string()), dec!(4.0692)); + exchange_rates.insert(Exchange::EUR("2024-10-01".to_string()), dec!(4.2846)); + exchange_rates.insert(Exchange::USD("2015-01-02".to_string()), dec!(3.5725)); + exchange_rates.insert(Exchange::USD("2017-02-17".to_string()), dec!(4.0693)); + exchange_rates.insert(Exchange::USD("2017-04-26".to_string()), dec!(3.8757)); + exchange_rates.insert(Exchange::USD("2025-02-25".to_string()), dec!(3.947)); + exchange_rates.insert(Exchange::USD("2025-05-02".to_string()), dec!(3.7722)); + exchange_rates.insert(Exchange::USD("2025-03-18".to_string()), dec!(3.8152)); + exchange_rates.insert(Exchange::EUR("2024-10-14".to_string()), dec!(4.2928)); + exchange_rates.insert(Exchange::EUR("2025-02-04".to_string()), dec!(4.2249)); + exchange_rates.insert(Exchange::USD("2018-08-16".to_string()), dec!(3.7871)); + exchange_rates.insert(Exchange::EUR("2025-12-03".to_string()), dec!(4.2312)); + exchange_rates.insert(Exchange::USD("2017-08-21".to_string()), dec!(3.6408)); + exchange_rates.insert(Exchange::USD("2012-04-11".to_string()), dec!(3.2034)); + exchange_rates.insert(Exchange::USD("2020-04-22".to_string()), dec!(4.1736)); + exchange_rates.insert(Exchange::USD("2014-02-05".to_string()), dec!(3.0987)); + exchange_rates.insert(Exchange::USD("2013-12-27".to_string()), dec!(3.0105)); + exchange_rates.insert(Exchange::USD("2024-09-19".to_string()), dec!(3.8249)); + exchange_rates.insert(Exchange::USD("2025-06-23".to_string()), dec!(3.7212)); + exchange_rates.insert(Exchange::USD("2017-08-18".to_string()), dec!(3.6459)); + exchange_rates.insert(Exchange::USD("2024-02-26".to_string()), dec!(3.9776)); + exchange_rates.insert(Exchange::USD("2016-02-24".to_string()), dec!(3.9803)); + exchange_rates.insert(Exchange::USD("2013-03-21".to_string()), dec!(3.2387)); + exchange_rates.insert(Exchange::USD("2014-02-06".to_string()), dec!(3.095)); + exchange_rates.insert(Exchange::USD("2018-04-13".to_string()), dec!(3.3862)); + exchange_rates.insert(Exchange::USD("2012-05-08".to_string()), dec!(3.2238)); + exchange_rates.insert(Exchange::USD("2025-10-17".to_string()), dec!(3.6388)); + exchange_rates.insert(Exchange::USD("2015-08-03".to_string()), dec!(3.7705)); + exchange_rates.insert(Exchange::EUR("2024-07-24".to_string()), dec!(4.2796)); + exchange_rates.insert(Exchange::USD("2012-07-18".to_string()), dec!(3.395)); + exchange_rates.insert(Exchange::EUR("2023-03-14".to_string()), dec!(4.6909)); + exchange_rates.insert(Exchange::USD("2021-11-26".to_string()), dec!(4.1754)); + exchange_rates.insert(Exchange::USD("2020-05-29".to_string()), dec!(4.0031)); + exchange_rates.insert(Exchange::USD("2013-06-11".to_string()), dec!(3.2201)); + exchange_rates.insert(Exchange::USD("2015-07-24".to_string()), dec!(3.7654)); + exchange_rates.insert(Exchange::USD("2017-07-13".to_string()), dec!(3.7133)); + exchange_rates.insert(Exchange::USD("2020-08-24".to_string()), dec!(3.7273)); + exchange_rates.insert(Exchange::USD("2022-03-03".to_string()), dec!(4.3257)); + exchange_rates.insert(Exchange::USD("2012-09-19".to_string()), dec!(3.1631)); + exchange_rates.insert(Exchange::USD("2021-02-12".to_string()), dec!(3.7186)); + exchange_rates.insert(Exchange::USD("2013-11-13".to_string()), dec!(3.1358)); + exchange_rates.insert(Exchange::USD("2024-09-05".to_string()), dec!(3.8487)); + exchange_rates.insert(Exchange::EUR("2023-10-31".to_string()), dec!(4.4475)); + exchange_rates.insert(Exchange::EUR("2024-05-16".to_string()), dec!(4.2617)); + exchange_rates.insert(Exchange::USD("2019-11-06".to_string()), dec!(3.8497)); + exchange_rates.insert(Exchange::USD("2021-04-27".to_string()), dec!(3.7826)); + exchange_rates.insert(Exchange::USD("2020-10-14".to_string()), dec!(3.8301)); + exchange_rates.insert(Exchange::EUR("2025-10-14".to_string()), dec!(4.2645)); + exchange_rates.insert(Exchange::USD("2015-06-15".to_string()), dec!(3.6905)); + exchange_rates.insert(Exchange::USD("2019-10-16".to_string()), dec!(3.8934)); + exchange_rates.insert(Exchange::USD("2023-09-05".to_string()), dec!(4.1643)); + exchange_rates.insert(Exchange::USD("2024-07-09".to_string()), dec!(3.9391)); + exchange_rates.insert(Exchange::USD("2020-09-22".to_string()), dec!(3.8359)); + exchange_rates.insert(Exchange::USD("2023-11-23".to_string()), dec!(3.9969)); + exchange_rates.insert(Exchange::USD("2025-03-27".to_string()), dec!(3.8913)); + exchange_rates.insert(Exchange::USD("2021-11-17".to_string()), dec!(4.1204)); + exchange_rates.insert(Exchange::USD("2020-04-07".to_string()), dec!(4.1717)); + exchange_rates.insert(Exchange::EUR("2024-02-15".to_string()), dec!(4.3463)); + exchange_rates.insert(Exchange::USD("2022-03-11".to_string()), dec!(4.3694)); + exchange_rates.insert(Exchange::EUR("2024-09-26".to_string()), dec!(4.2665)); + exchange_rates.insert(Exchange::USD("2015-07-28".to_string()), dec!(3.7303)); + exchange_rates.insert(Exchange::USD("2014-01-24".to_string()), dec!(3.0727)); + exchange_rates.insert(Exchange::EUR("2024-07-05".to_string()), dec!(4.2858)); + exchange_rates.insert(Exchange::USD("2017-12-01".to_string()), dec!(3.5352)); + exchange_rates.insert(Exchange::USD("2025-10-03".to_string()), dec!(3.6253)); + exchange_rates.insert(Exchange::USD("2020-07-08".to_string()), dec!(3.9666)); + exchange_rates.insert(Exchange::USD("2012-08-01".to_string()), dec!(3.342)); + exchange_rates.insert(Exchange::EUR("2024-01-10".to_string()), dec!(4.3413)); + exchange_rates.insert(Exchange::EUR("2024-01-11".to_string()), dec!(4.3505)); + exchange_rates.insert(Exchange::USD("2016-10-17".to_string()), dec!(3.9265)); + exchange_rates.insert(Exchange::EUR("2025-03-19".to_string()), dec!(4.1945)); + exchange_rates.insert(Exchange::USD("2014-06-18".to_string()), dec!(3.0589)); + exchange_rates.insert(Exchange::USD("2024-09-13".to_string()), dec!(3.8659)); + exchange_rates.insert(Exchange::USD("2022-02-01".to_string()), dec!(4.0689)); + exchange_rates.insert(Exchange::USD("2012-03-27".to_string()), dec!(3.0939)); + exchange_rates.insert(Exchange::USD("2019-12-12".to_string()), dec!(3.8505)); + exchange_rates.insert(Exchange::USD("2015-05-15".to_string()), dec!(3.5719)); + exchange_rates.insert(Exchange::EUR("2023-07-06".to_string()), dec!(4.4754)); + exchange_rates.insert(Exchange::USD("2021-11-16".to_string()), dec!(4.1061)); + exchange_rates.insert(Exchange::USD("2013-11-25".to_string()), dec!(3.1019)); + exchange_rates.insert(Exchange::USD("2021-09-23".to_string()), dec!(3.9256)); exchange_rates } diff --git a/src/pdfparser.rs b/src/pdfparser.rs index 027a986..a19d65f 100644 --- a/src/pdfparser.rs +++ b/src/pdfparser.rs @@ -4,6 +4,7 @@ use pdf::file::File; use pdf::object::PageRc; use pdf::primitive::Primitive; +use rust_decimal::Decimal; pub use crate::logging::ResultExt; @@ -34,7 +35,7 @@ enum ParserState { pub trait Entry { fn parse(&mut self, pstr: &pdf::primitive::PdfString); - fn getf32(&self) -> Option { + fn get_decimal(&self) -> Option { None } fn geti32(&self) -> Option { @@ -53,16 +54,16 @@ pub trait Entry { } } -struct F32Entry { - pub val: f32, +struct DecimalEntry { + pub val: Decimal, } -impl Entry for F32Entry { +impl Entry for DecimalEntry { fn parse(&mut self, pstr: &pdf::primitive::PdfString) { let mystr = pstr .clone() .into_string() - .expect(&format!("Error parsing : {:#?} to f32", pstr)); + .expect(&format!("Error parsing : {:#?} to Decimal", pstr)); // Extracted string should have "," removed and then be parsed self.val = mystr .trim() @@ -70,11 +71,11 @@ impl Entry for F32Entry { .replace("(", "") .replace(")", "") .replace("$", "") - .parse::() - .expect(&format!("Error parsing : {} to f32", mystr)); - log::info!("Parsed f32 value: {}", self.val); + .parse::() + .expect(&format!("Error parsing : {} to Decimal", mystr)); + log::info!("Parsed Decimal value: {}", self.val); } - fn getf32(&self) -> Option { + fn get_decimal(&self) -> Option { Some(self.val) } } @@ -148,8 +149,8 @@ fn create_dividend_parsing_sequence(sequence: &mut std::collections::VecDeque>) { @@ -161,7 +162,7 @@ fn create_tax_parsing_sequence(sequence: &mut std::collections::VecDeque>) { @@ -231,9 +232,9 @@ fn create_sold_parsing_sequence(sequence: &mut std::collections::VecDeque>) { @@ -249,9 +250,9 @@ fn create_sold_2_parsing_sequence(sequence: &mut std::collections::VecDeque>) { @@ -272,7 +273,7 @@ fn create_trade_parsing_sequence(sequence: &mut std::collections::VecDeque + sequence.push_back(Box::new(DecimalEntry { val: Decimal::ZERO })); // .. sequence.push_back(Box::new(StringEntry { val: String::new(), patterns: vec!["Stock".to_owned()], @@ -289,7 +290,7 @@ fn create_trade_parsing_sequence(sequence: &mut std::collections::VecDeque + sequence.push_back(Box::new(DecimalEntry { val: Decimal::ZERO })); // .. sequence.push_back(Box::new(StringEntry { val: String::new(), patterns: vec!["INTEL".to_owned()], @@ -306,7 +307,7 @@ fn create_trade_parsing_sequence(sequence: &mut std::collections::VecDeque + sequence.push_back(Box::new(DecimalEntry { val: Decimal::ZERO })); // .. sequence.push_back(Box::new(StringEntry { val: String::new(), patterns: vec!["FEE".to_owned()], @@ -315,7 +316,7 @@ fn create_trade_parsing_sequence(sequence: &mut std::collections::VecDeque + sequence.push_back(Box::new(DecimalEntry { val: Decimal::ZERO })); // .. sequence.push_back(Box::new(StringEntry { val: String::new(), patterns: vec!["NET".to_owned()], @@ -328,13 +329,13 @@ fn create_trade_parsing_sequence(sequence: &mut std::collections::VecDeque + sequence.push_back(Box::new(DecimalEntry { val: Decimal::ZERO })); // .. } fn yield_sold_transaction( transaction: &mut std::slice::Iter<'_, Box>, transaction_dates: &mut Vec, -) -> Option<(String, String, f32, f32, f32, Option)> { +) -> Option<(String, String, Decimal, Decimal, Decimal, Option)> { let symbol = transaction .next() .unwrap() @@ -343,17 +344,17 @@ fn yield_sold_transaction( let quantity = transaction .next() .unwrap() - .getf32() + .get_decimal() .expect_and_log("Processing of Sold transaction went wrong"); let price = transaction .next() .unwrap() - .getf32() + .get_decimal() .expect_and_log("Processing of Sold transaction went wrong"); let amount_sold = transaction .next() .unwrap() - .getf32() + .get_decimal() .expect_and_log("Parsing of Sold transaction went wrong"); // Last transaction date is settlement date // next to last is trade date @@ -466,9 +467,9 @@ fn recognize_statement(page: PageRc) -> Result { } fn process_transaction( - interests_transactions: &mut Vec<(String, f32, f32)>, - div_transactions: &mut Vec<(String, f32, f32, Option)>, - sold_transactions: &mut Vec<(String, String, f32, f32, f32, Option)>, + interests_transactions: &mut Vec<(String, Decimal, Decimal)>, + div_transactions: &mut Vec<(String, Decimal, Decimal, Option)>, + sold_transactions: &mut Vec<(String, String, Decimal, Decimal, Decimal, Option)>, actual_string: &pdf::primitive::PdfString, transaction_dates: &mut Vec, processed_sequence: &mut Vec>, @@ -479,7 +480,7 @@ fn process_transaction( let possible_obj = sequence.pop_front(); match possible_obj { // Move executed parser objects into Vector - // attach only i32 and f32 elements to + // attach only i32 and Decimal elements to // processed queue Some(mut obj) => { obj.parse(actual_string); @@ -524,7 +525,7 @@ fn process_transaction( let tax_us = transaction .next() .unwrap() - .getf32() + .get_decimal() .ok_or("Processing of Tax transaction went wrong")?; // Here we just go through registered transactions and pick the one where @@ -532,23 +533,27 @@ fn process_transaction( // applied let mut interests_as_div: Vec<( &mut String, - &mut f32, - &mut f32, + &mut Decimal, + &mut Decimal, Option, )> = interests_transactions .iter_mut() .map(|x| (&mut x.0, &mut x.1, &mut x.2, None)) .collect(); - let mut div_as_ref: Vec<(&mut String, &mut f32, &mut f32, Option)> = - div_transactions - .iter_mut() - .map(|x| (&mut x.0, &mut x.1, &mut x.2, x.3.clone())) - .collect(); + let mut div_as_ref: Vec<( + &mut String, + &mut Decimal, + &mut Decimal, + Option, + )> = div_transactions + .iter_mut() + .map(|x| (&mut x.0, &mut x.1, &mut x.2, x.3.clone())) + .collect(); let subject_to_tax = div_as_ref .iter_mut() .chain(interests_as_div.iter_mut()) - .find(|x| *x.1 > tax_us && *x.2 == 0.0f32) + .find(|x| *x.1 > tax_us && *x.2 == Decimal::ZERO) .ok_or("Error: Unable to find transaction that was taxed")?; log::info!("Tax: {tax_us} was applied to {subject_to_tax:?}"); *subject_to_tax.2 = tax_us; @@ -563,7 +568,7 @@ fn process_transaction( let gross_us = transaction .next() .unwrap() - .getf32() + .get_decimal() .ok_or("Processing of Interests transaction went wrong")?; interests_transactions.push(( @@ -571,7 +576,7 @@ fn process_transaction( .pop() .ok_or("Error: missing transaction dates when parsing")?, gross_us, - 0.0, // No tax info yet. It may be added later in Tax section + Decimal::ZERO, // No tax info yet. It may be added later in Tax section )); log::info!("Completed parsing Interests transaction"); } @@ -584,7 +589,7 @@ fn process_transaction( let gross_us = transaction .next() .unwrap() - .getf32() + .get_decimal() .ok_or("Processing of Dividend transaction went wrong")?; div_transactions.push(( @@ -592,7 +597,7 @@ fn process_transaction( .pop() .ok_or("Error: missing transaction dates when parsing")?, gross_us, - 0.0, // No tax info yet. It will be added later in Tax section + Decimal::ZERO, // No tax info yet. It will be added later in Tax section Some(symbol), )); log::info!("Completed parsing Dividend transaction"); @@ -692,20 +697,39 @@ fn parse_account_statement<'a, I>( pages_iter: I, ) -> Result< ( - Vec<(String, f32, f32)>, - Vec<(String, f32, f32, Option)>, - Vec<(String, String, f32, f32, f32, Option)>, - Vec<(String, String, i32, f32, f32, f32, f32, f32)>, + Vec<(String, Decimal, Decimal)>, + Vec<(String, Decimal, Decimal, Option)>, + Vec<(String, String, Decimal, Decimal, Decimal, Option)>, + Vec<( + String, + String, + i32, + Decimal, + Decimal, + Decimal, + Decimal, + Decimal, + )>, ), String, > where I: Iterator>, { - let mut interests_transactions: Vec<(String, f32, f32)> = vec![]; - let mut div_transactions: Vec<(String, f32, f32, Option)> = vec![]; - let mut sold_transactions: Vec<(String, String, f32, f32, f32, Option)> = vec![]; - let trades: Vec<(String, String, i32, f32, f32, f32, f32, f32)> = vec![]; + let mut interests_transactions: Vec<(String, Decimal, Decimal)> = vec![]; + let mut div_transactions: Vec<(String, Decimal, Decimal, Option)> = vec![]; + let mut sold_transactions: Vec<(String, String, Decimal, Decimal, Decimal, Option)> = + vec![]; + let trades: Vec<( + String, + String, + i32, + Decimal, + Decimal, + Decimal, + Decimal, + Decimal, + )> = vec![]; let mut state = ParserState::SearchingYear; let mut sequence: std::collections::VecDeque> = std::collections::VecDeque::new(); @@ -817,10 +841,19 @@ pub fn parse_statement( pdftoparse: &str, ) -> Result< ( - Vec<(String, f32, f32)>, - Vec<(String, f32, f32, Option)>, - Vec<(String, String, f32, f32, f32, Option)>, - Vec<(String, String, i32, f32, f32, f32, f32, f32)>, + Vec<(String, Decimal, Decimal)>, + Vec<(String, Decimal, Decimal, Option)>, + Vec<(String, String, Decimal, Decimal, Decimal, Option)>, + Vec<( + String, + String, + i32, + Decimal, + Decimal, + Decimal, + Decimal, + Decimal, + )>, ), String, > { @@ -866,6 +899,7 @@ pub fn parse_statement( #[cfg(test)] mod tests { use super::*; + use rust_decimal::dec; #[test] fn test_parser() -> Result<(), String> { @@ -879,36 +913,36 @@ mod tests { let data: Vec = vec![ '2' as u8, '8' as u8, '.' as u8, '2' as u8, '0' as u8, '3' as u8, '5' as u8, ]; - let mut f = F32Entry { val: 0.0 }; + let mut f = DecimalEntry { val: Decimal::ZERO }; f.parse(&pdf::primitive::PdfString::new(data)); - assert_eq!(f.getf32(), Some(28.2035)); + assert_eq!(f.get_decimal(), Some(dec!(28.2035))); // amount let data: Vec = vec![ '4' as u8, ',' as u8, '8' as u8, '7' as u8, '7' as u8, '.' as u8, '3' as u8, '6' as u8, ]; - let mut f = F32Entry { val: 0.0 }; + let mut f = DecimalEntry { val: Decimal::ZERO }; f.parse(&pdf::primitive::PdfString::new(data)); - assert_eq!(f.getf32(), Some(4877.36)); + assert_eq!(f.get_decimal(), Some(dec!(4877.36))); let data: Vec = vec![ '(' as u8, '5' as u8, '7' as u8, '.' as u8, '9' as u8, '8' as u8, ')' as u8, ]; - let mut f = F32Entry { val: 0.0 }; + let mut f = DecimalEntry { val: Decimal::ZERO }; f.parse(&pdf::primitive::PdfString::new(data)); - assert_eq!(f.getf32(), Some(57.98)); + assert_eq!(f.get_decimal(), Some(dec!(57.98))); let data: Vec = vec!['$' as u8, '1' as u8, '.' as u8, '2' as u8, '2' as u8]; - let mut f = F32Entry { val: 0.0 }; + let mut f = DecimalEntry { val: Decimal::ZERO }; f.parse(&pdf::primitive::PdfString::new(data)); - assert_eq!(f.getf32(), Some(1.22)); + assert_eq!(f.get_decimal(), Some(dec!(1.22))); let data: Vec = vec![ '8' as u8, '2' as u8, '.' as u8, '0' as u8, '0' as u8, '0' as u8, ]; - let mut f = F32Entry { val: 0.0 }; + let mut f = DecimalEntry { val: Decimal::ZERO }; f.parse(&pdf::primitive::PdfString::new(data)); - assert_eq!(f.getf32(), Some(82.00)); + assert_eq!(f.get_decimal(), Some(dec!(82.00))); // company code let data: Vec = vec!['D' as u8, 'L' as u8, 'B' as u8]; @@ -939,9 +973,9 @@ mod tests { val: String::new(), patterns: vec!["INTC".to_owned(), "DLB".to_owned()], })); // INTC, DLB - processed_sequence.push(Box::new(F32Entry { val: 42.0 })); //quantity - processed_sequence.push(Box::new(F32Entry { val: 28.8400 })); // Price - processed_sequence.push(Box::new(F32Entry { val: 1210.83 })); // Amount Sold + processed_sequence.push(Box::new(DecimalEntry { val: dec!(42.0) })); //quantity + processed_sequence.push(Box::new(DecimalEntry { val: dec!(28.8400) })); // Price + processed_sequence.push(Box::new(DecimalEntry { val: dec!(1210.83) })); // Amount Sold yield_sold_transaction(&mut processed_sequence.iter(), &mut transaction_dates) .ok_or("Parsing error".to_string())?; @@ -960,9 +994,9 @@ mod tests { val: String::new(), patterns: vec!["INTC".to_owned(), "DLB".to_owned()], })); // INTC, DLB - processed_sequence.push(Box::new(F32Entry { val: 42.0 })); //quantity - processed_sequence.push(Box::new(F32Entry { val: 28.8400 })); // Price - processed_sequence.push(Box::new(F32Entry { val: 1210.83 })); // Amount Sold + processed_sequence.push(Box::new(DecimalEntry { val: dec!(42.0) })); //quantity + processed_sequence.push(Box::new(DecimalEntry { val: dec!(28.8400) })); // Price + processed_sequence.push(Box::new(DecimalEntry { val: dec!(1210.83) })); // Amount Sold yield_sold_transaction(&mut processed_sequence.iter(), &mut transaction_dates) .ok_or("Parsing error".to_string())?; @@ -977,9 +1011,9 @@ mod tests { val: String::new(), patterns: vec!["INTC".to_owned(), "DLB".to_owned()], })); // INTC, DLB - processed_sequence.push(Box::new(F32Entry { val: 42.0 })); //quantity - processed_sequence.push(Box::new(F32Entry { val: 28.8400 })); // Price - processed_sequence.push(Box::new(F32Entry { val: 1210.83 })); // Amount Sold + processed_sequence.push(Box::new(DecimalEntry { val: dec!(42.0) })); //quantity + processed_sequence.push(Box::new(DecimalEntry { val: dec!(28.8400) })); // Price + processed_sequence.push(Box::new(DecimalEntry { val: dec!(1210.83) })); // Amount Sold assert_eq!( yield_sold_transaction(&mut processed_sequence.iter(), &mut transaction_dates), @@ -1120,19 +1154,19 @@ mod tests { assert_eq!( parse_statement("data/MS_ClientStatements_6557_202312.pdf"), (Ok(( - vec![("12/1/23".to_owned(), 1.22, 0.00)], + vec![("12/1/23".to_owned(), dec!(1.22), dec!(0.00))], vec![( "12/1/23".to_owned(), - 386.50, - 57.98, + dec!(386.50), + dec!(57.98), Some("INTEL CORP".to_string()) ),], vec![( "12/21/23".to_owned(), "12/26/23".to_owned(), - 82.0, - 46.45, - 3808.86, + dec!(82.0), + dec!(46.45), + dec!(3808.86), Some("INTEL CORP".to_string()) )], vec![] @@ -1147,7 +1181,7 @@ mod tests { assert_eq!( parse_statement("data/example_interests_taxing.pdf"), (Ok(( - vec![("1/2/24".to_owned(), 0.92, 0.22)], + vec![("1/2/24".to_owned(), dec!(0.92), dec!(0.22))], vec![], vec![], vec![] @@ -1163,28 +1197,28 @@ mod tests { parse_statement("etrade_data_2024/ClientStatements_010325.pdf"), (Ok(( vec![ - ("12/2/24".to_owned(), 4.88, 0.00), - ("10/1/24".to_owned(), 24.91, 0.00), - ("11/1/24".to_owned(), 25.09, 0.00), - ("9/3/24".to_owned(), 23.65, 0.00), // Interest rates - ("8/1/24".to_owned(), 4.34, 0.00), - ("7/1/24".to_owned(), 3.72, 0.00), - ("6/3/24".to_owned(), 13.31, 0.00), - ("5/1/24".to_owned(), 0.62, 0.00), - ("4/1/24".to_owned(), 1.16, 0.00), - ("1/2/24".to_owned(), 0.49, 0.00) + ("12/2/24".to_owned(), dec!(4.88), dec!(0.00)), + ("10/1/24".to_owned(), dec!(24.91), dec!(0.00)), + ("11/1/24".to_owned(), dec!(25.09), dec!(0.00)), + ("9/3/24".to_owned(), dec!(23.65), dec!(0.00)), // Interest rates + ("8/1/24".to_owned(), dec!(4.34), dec!(0.00)), + ("7/1/24".to_owned(), dec!(3.72), dec!(0.00)), + ("6/3/24".to_owned(), dec!(13.31), dec!(0.00)), + ("5/1/24".to_owned(), dec!(0.62), dec!(0.00)), + ("4/1/24".to_owned(), dec!(1.16), dec!(0.00)), + ("1/2/24".to_owned(), dec!(0.49), dec!(0.00)) ], vec![ ( "6/3/24".to_owned(), - 57.25, - 8.59, + dec!(57.25), + dec!(8.59), Some("INTEL CORP".to_owned()) ), // Dividends date, gross, tax_us ( "3/1/24".to_owned(), - 380.25, - 57.04, + dec!(380.25), + dec!(57.04), Some("INTEL CORP".to_owned()) ) ], @@ -1192,233 +1226,233 @@ mod tests { ( "12/4/24".to_owned(), "12/5/24".to_owned(), - 30.0, - 22.5, - 674.98, + dec!(30.0), + dec!(22.5), + dec!(674.98), Some("INTEL CORP".to_string()) ), ( "12/5/24".to_owned(), "12/6/24".to_owned(), - 55.0, - 21.96, - 1207.76, + dec!(55.0), + dec!(21.96), + dec!(1207.76), Some("INTEL CORP".to_string()) ), ( "11/1/24".to_owned(), "11/4/24".to_owned(), - 15.0, - 23.32, - 349.79, + dec!(15.0), + dec!(23.32), + dec!(349.79), Some("INTEL CORP".to_string()) ), ( "9/3/24".to_owned(), "9/4/24".to_owned(), - 17.0, - 21.53, - 365.99, + dec!(17.0), + dec!(21.53), + dec!(365.99), Some("INTEL CORP".to_string()) ), // Sold ( "9/9/24".to_owned(), "9/10/24".to_owned(), - 14.0, - 18.98, - 265.71, + dec!(14.0), + dec!(18.98), + dec!(265.71), Some("INTEL CORP".to_string()) ), ( "8/5/24".to_owned(), "8/6/24".to_owned(), - 14.0, - 20.21, - 282.93, + dec!(14.0), + dec!(20.21), + dec!(282.93), Some("INTEL CORP".to_string()) ), ( "8/20/24".to_owned(), "8/21/24".to_owned(), - 328.0, - 21.0247, - 6895.89, + dec!(328.0), + dec!(21.0247), + dec!(6895.89), Some("INTEL CORP".to_string()) ), ( "7/31/24".to_owned(), "8/1/24".to_owned(), - 151.0, - 30.44, - 4596.31, + dec!(151.0), + dec!(30.44), + dec!(4596.31), Some("INTEL CORP".to_string()) ), ( "6/3/24".to_owned(), "6/4/24".to_owned(), - 14.0, - 31.04, - 434.54, + dec!(14.0), + dec!(31.04), + dec!(434.54), Some("INTEL CORP".to_string()) ), ( "5/1/24".to_owned(), "5/3/24".to_owned(), - 126.0, - 30.14, - 3797.6, + dec!(126.0), + dec!(30.14), + dec!(3797.6), Some("INTEL CORP".to_string()) ), ( "5/1/24".to_owned(), "5/3/24".to_owned(), - 124.0, - 30.14, - 3737.33, + dec!(124.0), + dec!(30.14), + dec!(3737.33), Some("INTEL CORP".to_string()) ), ( "5/1/24".to_owned(), "5/3/24".to_owned(), - 89.0, - 30.6116, - 2724.4, + dec!(89.0), + dec!(30.6116), + dec!(2724.4), Some("INTEL CORP".to_string()) ), ( "5/2/24".to_owned(), "5/6/24".to_owned(), - 182.0, - 30.56, - 5561.87, + dec!(182.0), + dec!(30.56), + dec!(5561.87), Some("INTEL CORP".to_string()) ), ( "5/3/24".to_owned(), "5/7/24".to_owned(), - 440.0, - 30.835, - 13567.29, + dec!(440.0), + dec!(30.835), + dec!(13567.29), Some("INTEL CORP".to_string()) ), ( "5/3/24".to_owned(), "5/7/24".to_owned(), - 198.0, - 30.835, - 6105.28, + dec!(198.0), + dec!(30.835), + dec!(6105.28), Some("INTEL CORP".to_string()) ), ( "5/3/24".to_owned(), "5/7/24".to_owned(), - 146.0, - 30.8603, - 4505.56, + dec!(146.0), + dec!(30.8603), + dec!(4505.56), Some("INTEL CORP".to_string()) ), ( "5/3/24".to_owned(), "5/7/24".to_owned(), - 145.0, - 30.8626, - 4475.04, + dec!(145.0), + dec!(30.8626), + dec!(4475.04), Some("INTEL CORP".to_string()) ), ( "5/3/24".to_owned(), "5/7/24".to_owned(), - 75.0, - 30.815, - 2311.11, + dec!(75.0), + dec!(30.815), + dec!(2311.11), Some("INTEL CORP".to_string()) ), ( "5/6/24".to_owned(), "5/8/24".to_owned(), - 458.0, - 31.11, - 14248.26, + dec!(458.0), + dec!(31.11), + dec!(14248.26), Some("INTEL CORP".to_string()) ), ( "5/31/24".to_owned(), "6/3/24".to_owned(), - 18.0, - 30.22, - 543.94, + dec!(18.0), + dec!(30.22), + dec!(543.94), Some("INTEL CORP".to_string()) ), ( "4/3/24".to_owned(), "4/5/24".to_owned(), - 31.0, - 40.625, - 1259.36, + dec!(31.0), + dec!(40.625), + dec!(1259.36), Some("INTEL CORP".to_string()) ), ( "4/11/24".to_owned(), "4/15/24".to_owned(), - 209.0, - 37.44, - 7824.89, + dec!(209.0), + dec!(37.44), + dec!(7824.89), Some("INTEL CORP".to_string()) ), ( "4/11/24".to_owned(), "4/15/24".to_owned(), - 190.0, - 37.44, - 7113.54, + dec!(190.0), + dec!(37.44), + dec!(7113.54), Some("INTEL CORP".to_string()) ), ( "4/16/24".to_owned(), "4/18/24".to_owned(), - 310.0, - 36.27, - 11243.61, + dec!(310.0), + dec!(36.27), + dec!(11243.61), Some("INTEL CORP".to_string()) ), ( "4/29/24".to_owned(), "5/1/24".to_owned(), - 153.0, - 31.87, - 4876.07, + dec!(153.0), + dec!(31.87), + dec!(4876.07), Some("INTEL CORP".to_string()) ), ( "4/29/24".to_owned(), "5/1/24".to_owned(), - 131.0, - 31.87, - 4174.93, + dec!(131.0), + dec!(31.87), + dec!(4174.93), Some("INTEL CORP".to_string()) ), ( "4/29/24".to_owned(), "5/1/24".to_owned(), - 87.0, - 31.87, - 2772.66, + dec!(87.0), + dec!(31.87), + dec!(2772.66), Some("INTEL CORP".to_string()) ), ( "3/11/24".to_owned(), "3/13/24".to_owned(), - 38.0, - 43.85, - 1666.28, + dec!(38.0), + dec!(43.85), + dec!(1666.28), Some("INTEL CORP".to_string()) ), ( "2/20/24".to_owned(), "2/22/24".to_owned(), - 150.0, - 43.9822, - 6597.27, + dec!(150.0), + dec!(43.9822), + dec!(6597.27), Some("INTEL CORP".to_string()) ) ], @@ -1440,17 +1474,17 @@ mod tests { ( "11/10/23".to_owned(), "11/14/23".to_owned(), - 72.0, - 118.13, - 8505.29, + dec!(72.0), + dec!(118.13), + dec!(8505.29), Some("ADVANCED MICRO DEVICES".to_string()) ), ( "11/22/23".to_owned(), "11/27/23".to_owned(), - 162.0, - 122.4511, - 19836.92, + dec!(162.0), + dec!(122.4511), + dec!(19836.92), Some("ADVANCED MICRO DEVICES".to_string()) ), ], @@ -1463,8 +1497,8 @@ mod tests { // parse_statement("data/example3.pdf"), // ( // vec![ - // ("06/01/21".to_owned(), 0.17, 0.03), - // ("06/01/21".to_owned(), 45.87, 6.88) + // ("06/01/21".to_owned(), dec!(0.17), dec!(0.03)), + // ("06/01/21".to_owned(), dec!(45.87), dec!(6.88)) // ], // vec![], // vec![] @@ -1480,10 +1514,10 @@ mod tests { // "04/11/22".to_owned(), // "04/13/22".to_owned(), // 1, - // 46.92, - // 46.92, - // 0.01, - // 0.01, + // dec!(46.92), + // dec!(46.92), + // dec!(0.01), + // dec!(0.01), // 46.9 // )] // ) diff --git a/src/pl.rs b/src/pl.rs index ad886e4..11b8ccf 100644 --- a/src/pl.rs +++ b/src/pl.rs @@ -2,6 +2,8 @@ // SPDX-License-Identifier: BSD-3-Clause use chrono::Datelike; +use rust_decimal::dec; +use rust_decimal::Decimal; use serde::{Deserialize, Serialize}; pub struct PL {} @@ -28,7 +30,7 @@ struct NBPResponse { pub struct ExchangeRate { no: String, effectiveDate: String, - mid: f32, + mid: Decimal, } // Function checking if given date is a day when market(NBP) was not working @@ -63,7 +65,10 @@ fn is_non_working_day(date: &chrono::NaiveDate) -> Result { // Iterate through dates and find where value is None // and then try to get for that specific date from cache fn get_exchange_rates_from_cache( - dates: &mut std::collections::HashMap>, + dates: &mut std::collections::HashMap< + etradeTaxReturnHelper::Exchange, + Option<(String, Decimal)>, + >, ) -> Result { let mut all_filled = true; dates.iter_mut().try_for_each(|(exchange, val)| { @@ -77,7 +82,7 @@ fn get_exchange_rates_from_cache( etradeTaxReturnHelper::Exchange::USD(date) => ("usd", date), etradeTaxReturnHelper::Exchange::EUR(date) => ("eur", date), etradeTaxReturnHelper::Exchange::PLN(_) => { - *val = Some(("N/A".to_owned(), 1.0)); + *val = Some(("N/A".to_owned(), Decimal::ONE)); return Ok::<(), String>(()); } // For PLN to PLN follow fast path }; @@ -125,7 +130,7 @@ fn get_exchange_rates_from_cache( exchange_rate_date, exchange_rate ); - *val = Some((exchange_rate_date, *exchange_rate as f32)); + *val = Some((exchange_rate_date, *exchange_rate)); } else { log::info!( "Not Found cached exchange rate. Date:{} ", @@ -139,16 +144,16 @@ fn get_exchange_rates_from_cache( Ok(all_filled) } -/// Art. 63 §1a OP: ceil to 0.01 PLN (pełnych groszy w górę). -/// Applies to the base (podstawa) and tax for art. 30a pkt 1–3 PIT (odsetki). -fn ceil_to_grosz(val: f32) -> f32 { - (val * 100.0).ceil() / 100.0 +/// Art. 63 §1a OP: always ceil to 0.01 PLN (groszy). +/// Applies to the base and tax for art. 30a pkt 1–3 PIT (odsetki). +fn ceil_to_grosz(val: Decimal) -> Decimal { + val.round_dp_with_strategy(2, rust_decimal::RoundingStrategy::ToPositiveInfinity) } /// Art. 63 §1 OP: round half-up to 1 PLN (pełnych złotych). /// Applies to the base and tax for art. 30a pkt 4 PIT (dywidendy) and art. 30b PIT (sprzedaż). -fn round_half_up_to_zloty(val: f32) -> f32 { - (val + 0.5).floor() +fn round_half_up_to_zloty(val: Decimal) -> Decimal { + val.round_dp_with_strategy(0, rust_decimal::RoundingStrategy::MidpointAwayFromZero) } impl etradeTaxReturnHelper::Residency for PL { @@ -160,7 +165,7 @@ impl etradeTaxReturnHelper::Residency for PL { &self, dates: &mut std::collections::HashMap< etradeTaxReturnHelper::Exchange, - Option<(String, f32)>, + Option<(String, Decimal)>, >, ) -> Result<(), String> { // Try to get exchange rates from cached data (output from program gen_exchange_rates) @@ -208,7 +213,7 @@ impl etradeTaxReturnHelper::Residency for PL { etradeTaxReturnHelper::Exchange::USD(date) => ("usd", date), etradeTaxReturnHelper::Exchange::EUR(date) => ("eur", date), etradeTaxReturnHelper::Exchange::PLN(_) => { - *val = Some(("N/A".to_owned(), 1.0)); + *val = Some(("N/A".to_owned(), Decimal::ONE)); return Ok::<(), String>(()); } // For PLN to PLN follow fast path }; @@ -253,23 +258,23 @@ impl etradeTaxReturnHelper::Residency for PL { fn present_result( &self, - gross_interests: f32, - gross_div: f32, - tax_div: f32, - gross_sold: f32, - cost_sold: f32, + gross_interests: Decimal, + gross_div: Decimal, + tax_div: Decimal, + gross_sold: Decimal, + cost_sold: Decimal, ) -> (Vec, Option) { let mut presentation: Vec = vec![]; // Art. 30a ust. 1 pkt 1–3 PIT (odsetki): // Art. 63 §1a OP — podstawa ceiled to grosz; 19% tax also ceiled to grosz. let gross_interests_pln = ceil_to_grosz(gross_interests); - let tax_interests_pl = ceil_to_grosz(0.19 * gross_interests_pln); + let tax_interests_pl = ceil_to_grosz(dec!(0.19) * gross_interests_pln); // Art. 30a ust. 1 pkt 4 PIT (dywidendy): // Art. 63 §1 OP — podstawa rounded half-up to full złoty; 19% tax also rounded half-up. let gross_div_pln = round_half_up_to_zloty(gross_div); - let tax_div_pl = round_half_up_to_zloty(0.19 * gross_div_pln); + let tax_div_pl = round_half_up_to_zloty(dec!(0.19) * gross_div_pln); let tax_pl = tax_interests_pl + tax_div_pl; @@ -294,7 +299,7 @@ impl etradeTaxReturnHelper::Residency for PL { cost_sold )); if tax_div > tax_pl { - (presentation,Some(format!("Warning: Tax paid in US({tax_div} PLN) is higher than the tax that you are to pay in Poland({tax_pl} PLN). This either means that there was a problem with declaration of your residency to avoid double taxation or you are having income from countries that are having higher tax at source than the one used in Poland(19%)"))) + (presentation,Some(format!("Warning: Tax paid in US({tax_div:.2} PLN) is higher than the tax that you are to pay in Poland({tax_pl:.2} PLN). This either means that there was a problem with declaration of your residency to avoid double taxation or you are having income from countries that are having higher tax at source than the one used in Poland(19%)"))) } else { (presentation, None) } @@ -304,38 +309,37 @@ impl etradeTaxReturnHelper::Residency for PL { #[cfg(test)] mod tests { use super::*; + use rust_decimal::dec; #[test] fn test_ceil_to_grosz() { // Art. 63 §1a OP: always ceil to 0.01 PLN - assert_eq!(ceil_to_grosz(1.231), 1.24); - assert_eq!(ceil_to_grosz(1.230), 1.23); - assert_eq!(ceil_to_grosz(1.001), 1.01); - assert_eq!(ceil_to_grosz(0.0), 0.0); + assert_eq!(ceil_to_grosz(dec!(1.231)), dec!(1.24)); + assert_eq!(ceil_to_grosz(dec!(1.230)), dec!(1.23)); + assert_eq!(ceil_to_grosz(dec!(1.001)), dec!(1.01)); + assert_eq!(ceil_to_grosz(dec!(0.0)), dec!(0.0)); // Never rounds down, even for tiny fractions - assert_eq!(ceil_to_grosz(0.441), 0.45); + assert_eq!(ceil_to_grosz(dec!(0.441)), dec!(0.45)); } #[test] fn test_round_half_up_to_zloty() { // Art. 63 §1 OP: round half-up to full PLN - assert_eq!(round_half_up_to_zloty(100.0), 100.0); - assert_eq!(round_half_up_to_zloty(100.4), 100.0); - assert_eq!(round_half_up_to_zloty(100.5), 101.0); - assert_eq!(round_half_up_to_zloty(100.9), 101.0); - assert_eq!(round_half_up_to_zloty(0.0), 0.0); - assert_eq!(round_half_up_to_zloty(0.49), 0.0); - assert_eq!(round_half_up_to_zloty(0.5), 1.0); + assert_eq!(round_half_up_to_zloty(dec!(100.0)), dec!(100)); + assert_eq!(round_half_up_to_zloty(dec!(100.4)), dec!(100)); + assert_eq!(round_half_up_to_zloty(dec!(100.5)), dec!(101)); + assert_eq!(round_half_up_to_zloty(dec!(100.9)), dec!(101)); + assert_eq!(round_half_up_to_zloty(dec!(0.0)), dec!(0)); + assert_eq!(round_half_up_to_zloty(dec!(0.49)), dec!(0)); + assert_eq!(round_half_up_to_zloty(dec!(0.5)), dec!(1)); } - #[test] fn test_present_result_pl() -> Result<(), String> { let rd: Box = Box::new(PL {}); - let gross_interests = 0.0f32; - let gross_div = 100.0f32; - let tax_div = 15.0f32; - let gross_sold = 1000.0f32; - let cost_sold = 10.0f32; + let gross_div = dec!(100.0); + let tax_div = dec!(15.0); + let gross_sold = dec!(1000.0); + let cost_sold = dec!(10.0); let ref_results: Vec = vec![ "(DYWIDENDY+ODSETKI) PRZYCHOD Z ZAGRANICY: 100.00 PLN (w tym: 0.00zł od odsetek i 100.00zł od dywidend)".to_string(), @@ -345,8 +349,7 @@ mod tests { "===> (SPRZEDAZ AKCJI) KOSZT UZYSKANIA PRZYCHODU: 10.00 PLN".to_string(), ]; - let (results, _) = - rd.present_result(gross_interests, gross_div, tax_div, gross_sold, cost_sold); + let (results, _) = rd.present_result(dec!(0.0), gross_div, tax_div, gross_sold, cost_sold); results .iter() @@ -356,11 +359,50 @@ mod tests { Ok(()) } + // Art. 63 §1a OP: interests base and tax are ceiled to grosz (never rounded down). + // gross_interests=0.441 → ceil to 0.45; tax = ceil(0.19 * 0.45) = ceil(0.0855) = 0.09 + #[test] + fn test_present_result_interests_ceil_to_grosz() { + let rd: Box = Box::new(PL {}); + let (results, _) = + rd.present_result(dec!(0.441), dec!(0.0), dec!(0.0), dec!(0.0), dec!(0.0)); + assert_eq!(results[0], "(DYWIDENDY+ODSETKI) PRZYCHOD Z ZAGRANICY: 0.45 PLN (w tym: 0.45zł od odsetek i 0.00zł od dywidend)"); + assert_eq!(results[1], "===> (DYWIDENDY+ODSETKI) ZRYCZALTOWANY PODATEK: 0.09 PLN (w tym: 0.09zł od odsetek i 0.00zł od dywidend)"); + } + + // Art. 63 §1 OP: dividends base and tax are rounded half-up to full złoty (not grosz). + // gross_div=100.5 → rounds up to 101; tax = round_half_up(0.19 * 101) = round_half_up(19.19) = 19 + // gross_div=100.4 → rounds down to 100; tax = round_half_up(0.19 * 100) = 19 + #[test] + fn test_present_result_dividends_round_to_zloty() { + let rd: Box = Box::new(PL {}); + let (results_up, _) = + rd.present_result(dec!(0.0), dec!(100.5), dec!(0.0), dec!(0.0), dec!(0.0)); + assert_eq!(results_up[0], "(DYWIDENDY+ODSETKI) PRZYCHOD Z ZAGRANICY: 101.00 PLN (w tym: 0.00zł od odsetek i 101.00zł od dywidend)"); + assert_eq!(results_up[1], "===> (DYWIDENDY+ODSETKI) ZRYCZALTOWANY PODATEK: 19.00 PLN (w tym: 0.00zł od odsetek i 19.00zł od dywidend)"); + + let (results_down, _) = + rd.present_result(dec!(0.0), dec!(100.4), dec!(0.0), dec!(0.0), dec!(0.0)); + assert_eq!(results_down[0], "(DYWIDENDY+ODSETKI) PRZYCHOD Z ZAGRANICY: 100.00 PLN (w tym: 0.00zł od odsetek i 100.00zł od dywidend)"); + } + + // Both income types combined: interests use §1a (ceil to grosz), dividends use §1 (half-up to złoty). + // gross_interests=0.441 → 0.45, tax_interests=0.09 + // gross_div=100.5 → 101, tax_div=19 → combined: 101.45, tax 19.09 + #[test] + fn test_present_result_combined_rounding() { + let rd: Box = Box::new(PL {}); + let (results, _) = + rd.present_result(dec!(0.441), dec!(100.5), dec!(0.0), dec!(0.0), dec!(0.0)); + assert_eq!(results[0], "(DYWIDENDY+ODSETKI) PRZYCHOD Z ZAGRANICY: 101.45 PLN (w tym: 0.45zł od odsetek i 101.00zł od dywidend)"); + assert_eq!(results[1], "===> (DYWIDENDY+ODSETKI) ZRYCZALTOWANY PODATEK: 19.09 PLN (w tym: 0.09zł od odsetek i 19.00zł od dywidend)"); + } + #[test] fn test_get_exchange_rates_pl() -> Result<(), String> { let mut dates: std::collections::HashMap< etradeTaxReturnHelper::Exchange, - Option<(String, f32)>, + Option<(String, Decimal)>, > = std::collections::HashMap::new(); dates.insert( etradeTaxReturnHelper::Exchange::PLN("07/14/81".to_owned()), @@ -380,19 +422,19 @@ mod tests { let mut expected_result: std::collections::HashMap< etradeTaxReturnHelper::Exchange, - Option<(String, f32)>, + Option<(String, Decimal)>, > = std::collections::HashMap::new(); expected_result.insert( etradeTaxReturnHelper::Exchange::PLN("07/14/81".to_owned()), - Some(("N/A".to_owned(), 1.0)), + Some(("N/A".to_owned(), Decimal::ONE)), ); expected_result.insert( etradeTaxReturnHelper::Exchange::PLN("08/14/81".to_owned()), - Some(("N/A".to_owned(), 1.0)), + Some(("N/A".to_owned(), Decimal::ONE)), ); expected_result.insert( etradeTaxReturnHelper::Exchange::PLN("09/14/81".to_owned()), - Some(("N/A".to_owned(), 1.0)), + Some(("N/A".to_owned(), Decimal::ONE)), ); assert_eq!(dates, expected_result); @@ -404,11 +446,10 @@ mod tests { fn test_present_result_double_taxation_warning_pl() -> Result<(), String> { let rd: Box = Box::new(PL {}); - let gross_interests = 0.0f32; - let gross_div = 100.0f32; - let tax_div = 30.0f32; - let gross_sold = 1000.0f32; - let cost_sold = 10.0f32; + let gross_div = dec!(100.0); + let tax_div = dec!(30.0); + let gross_sold = dec!(1000.0); + let cost_sold = dec!(10.0); let ref_results: Vec = vec![ "(DYWIDENDY+ODSETKI) PRZYCHOD Z ZAGRANICY: 100.00 PLN (w tym: 0.00zł od odsetek i 100.00zł od dywidend)".to_string(), @@ -419,14 +460,14 @@ mod tests { ]; let (results, warning) = - rd.present_result(gross_interests, gross_div, tax_div, gross_sold, cost_sold); + rd.present_result(dec!(0.0), gross_div, tax_div, gross_sold, cost_sold); results .iter() .zip(&ref_results) .for_each(|(a, b)| assert_eq!(a, b)); - let ref_msg = "Warning: Tax paid in US(30 PLN) is higher than the tax that you are to pay in Poland(19 PLN). This either means that there was a problem with declaration of your residency to avoid double taxation or you are having income from countries that are having higher tax at source than the one used in Poland(19%)".to_string(); + let ref_msg = "Warning: Tax paid in US(30.00 PLN) is higher than the tax that you are to pay in Poland(19.00 PLN). This either means that there was a problem with declaration of your residency to avoid double taxation or you are having income from countries that are having higher tax at source than the one used in Poland(19%)".to_string(); match warning { Some(msg) => assert_eq!(msg, ref_msg), @@ -436,41 +477,6 @@ mod tests { Ok(()) } - // Art. 63 §1a OP: interests base and tax are ceiled to grosz (never rounded down). - // gross_interests=0.441 → ceil to 0.45; tax = ceil(0.19 * 0.45) = ceil(0.0855) = 0.09 - #[test] - fn test_present_result_interests_ceil_to_grosz() { - let rd: Box = Box::new(PL {}); - let (results, _) = rd.present_result(0.441, 0.0, 0.0, 0.0, 0.0); - assert_eq!(results[0], "(DYWIDENDY+ODSETKI) PRZYCHOD Z ZAGRANICY: 0.45 PLN (w tym: 0.45zł od odsetek i 0.00zł od dywidend)"); - assert_eq!(results[1], "===> (DYWIDENDY+ODSETKI) ZRYCZALTOWANY PODATEK: 0.09 PLN (w tym: 0.09zł od odsetek i 0.00zł od dywidend)"); - } - - // Art. 63 §1 OP: dividends base and tax are rounded half-up to full złoty (not grosz). - // gross_div=100.5 → rounds up to 101; tax = round_half_up(0.19 * 101) = round_half_up(19.19) = 19 - // gross_div=100.4 → rounds down to 100; tax = round_half_up(0.19 * 100) = 19 - #[test] - fn test_present_result_dividends_round_to_zloty() { - let rd: Box = Box::new(PL {}); - let (results_up, _) = rd.present_result(0.0, 100.5, 0.0, 0.0, 0.0); - assert_eq!(results_up[0], "(DYWIDENDY+ODSETKI) PRZYCHOD Z ZAGRANICY: 101.00 PLN (w tym: 0.00zł od odsetek i 101.00zł od dywidend)"); - assert_eq!(results_up[1], "===> (DYWIDENDY+ODSETKI) ZRYCZALTOWANY PODATEK: 19.00 PLN (w tym: 0.00zł od odsetek i 19.00zł od dywidend)"); - - let (results_down, _) = rd.present_result(0.0, 100.4, 0.0, 0.0, 0.0); - assert_eq!(results_down[0], "(DYWIDENDY+ODSETKI) PRZYCHOD Z ZAGRANICY: 100.00 PLN (w tym: 0.00zł od odsetek i 100.00zł od dywidend)"); - } - - // Both income types combined: interests use §1a (ceil to grosz), dividends use §1 (half-up to złoty). - // gross_interests=0.441 → 0.45, tax_interests=0.09 - // gross_div=100.5 → 101, tax_div=19 → combined: 101.45, tax 19.09 - #[test] - fn test_present_result_combined_rounding() { - let rd: Box = Box::new(PL {}); - let (results, _) = rd.present_result(0.441, 100.5, 0.0, 0.0, 0.0); - assert_eq!(results[0], "(DYWIDENDY+ODSETKI) PRZYCHOD Z ZAGRANICY: 101.45 PLN (w tym: 0.45zł od odsetek i 101.00zł od dywidend)"); - assert_eq!(results[1], "===> (DYWIDENDY+ODSETKI) ZRYCZALTOWANY PODATEK: 19.09 PLN (w tym: 0.09zł od odsetek i 19.00zł od dywidend)"); - } - #[test] fn test_is_non_working_day() -> Result<(), String> { let date = chrono::NaiveDate::parse_from_str(&"11/01/24", "%m/%d/%y") @@ -493,18 +499,18 @@ mod tests { ), ( etradeTaxReturnHelper::Exchange::EUR("02/23/24".to_owned()), - Some(("2024-02-21".to_string(), 3.994)), + Some(("2024-02-21".to_string(), dec!(3.994))), ), ]); let expected_rates = std::collections::HashMap::from([ ( etradeTaxReturnHelper::Exchange::USD("02/26/24".to_owned()), - Some(("2024-02-23".to_string(), 4.005)), + Some(("2024-02-23".to_string(), dec!(4.005))), ), ( etradeTaxReturnHelper::Exchange::EUR("02/23/24".to_owned()), - Some(("2024-02-21".to_string(), 3.994)), + Some(("2024-02-21".to_string(), dec!(3.994))), ), ]); @@ -520,7 +526,7 @@ mod tests { ), ( etradeTaxReturnHelper::Exchange::EUR("02/23/00".to_owned()), - Some(("2020-02-21".to_string(), 3.994)), + Some(("2020-02-21".to_string(), dec!(3.994))), ), ]); @@ -542,11 +548,11 @@ mod tests { let expected_rates = std::collections::HashMap::from([ ( etradeTaxReturnHelper::Exchange::EUR("02/10/23".to_owned()), - Some(("2023-02-09".to_string(), 4.7363)), + Some(("2023-02-09".to_string(), dec!(4.7363))), ), ( etradeTaxReturnHelper::Exchange::EUR("09/25/23".to_owned()), - Some(("2023-09-22".to_string(), 4.6069)), + Some(("2023-09-22".to_string(), dec!(4.6069))), ), ]); diff --git a/src/transactions.rs b/src/transactions.rs index f04e327..508d82f 100644 --- a/src/transactions.rs +++ b/src/transactions.rs @@ -4,6 +4,8 @@ use chrono; use chrono::Datelike; use polars::prelude::*; +use rust_decimal::prelude::ToPrimitive; +use rust_decimal::Decimal; use std::collections::HashMap; pub use crate::logging::ResultExt; @@ -107,9 +109,9 @@ pub fn verify_transactions( /// transfered on settlement date pub fn reconstruct_sold_transactions( - sold_transactions: &Vec<(String, String, f32, f32, f32, Option)>, - gains_and_losses: &Vec<(String, String, f32, f32, f32)>, -) -> Result)>, String> { + sold_transactions: &Vec<(String, String, Decimal, Decimal, Decimal, Option)>, + gains_and_losses: &Vec<(String, String, Decimal, Decimal, Decimal)>, +) -> Result)>, String> { // Ok What do I need. // 1. trade date // 2. settlement date @@ -117,8 +119,14 @@ pub fn reconstruct_sold_transactions( // 4. gross income // 5. cost cost basis // 6. company symbol (ticker) - let mut detailed_sold_transactions: Vec<(String, String, String, f32, f32, Option)> = - vec![]; + let mut detailed_sold_transactions: Vec<( + String, + String, + String, + Decimal, + Decimal, + Option, + )> = vec![]; if sold_transactions.len() > 0 && gains_and_losses.is_empty() { return Err("\n\nERROR: Sold transaction detected, but corressponding Gain&Losses document is missing. Please download Gain&Losses XLSX document at:\n @@ -163,7 +171,7 @@ pub fn reconstruct_sold_transactions( pub fn create_detailed_revolut_transactions( transactions: Vec<(String, crate::Currency, crate::Currency, Option)>, - dates: &std::collections::HashMap>, + dates: &std::collections::HashMap>, ) -> Result, &str> { let mut detailed_transactions: Vec = Vec::new(); @@ -195,8 +203,8 @@ pub fn create_detailed_revolut_transactions( } pub fn create_detailed_interests_transactions( - transactions: Vec<(String, f32, f32)>, - dates: &std::collections::HashMap>, + transactions: Vec<(String, Decimal, Decimal)>, + dates: &std::collections::HashMap>, ) -> Result, &str> { let mut detailed_transactions: Vec = Vec::new(); transactions @@ -209,8 +217,8 @@ pub fn create_detailed_interests_transactions( let transaction = Transaction { transaction_date: transaction_date.clone(), - gross: crate::Currency::USD(*gross_us as f64), - tax_paid: crate::Currency::USD(*tax_us as f64), + gross: crate::Currency::USD(*gross_us), + tax_paid: crate::Currency::USD(*tax_us), exchange_rate_date, exchange_rate, company: None, // No company info when interests are paid on money @@ -227,8 +235,8 @@ pub fn create_detailed_interests_transactions( } pub fn create_detailed_div_transactions( - transactions: Vec<(String, f32, f32, Option)>, - dates: &std::collections::HashMap>, + transactions: Vec<(String, Decimal, Decimal, Option)>, + dates: &std::collections::HashMap>, ) -> Result, &str> { let mut detailed_transactions: Vec = Vec::new(); transactions @@ -241,8 +249,8 @@ pub fn create_detailed_div_transactions( let transaction = Transaction { transaction_date: transaction_date.clone(), - gross: crate::Currency::USD(*gross_us as f64), - tax_paid: crate::Currency::USD(*tax_us as f64), + gross: crate::Currency::USD(*gross_us), + tax_paid: crate::Currency::USD(*tax_us), exchange_rate_date, exchange_rate, company: company.clone(), @@ -261,15 +269,15 @@ pub fn create_detailed_div_transactions( // pub trade_date: String, // pub settlement_date: String, // pub acquisition_date: String, -// pub income_us: f32, -// pub cost_basis: f32, +// pub income_us: Decimal, +// pub cost_basis: Decimal, // pub exchange_rate_settlement_date: String, -// pub exchange_rate_settlement: f32, +// pub exchange_rate_settlement: Decimal, // pub exchange_rate_acquisition_date: String, -// pub exchange_rate_acquisition: f32, +// pub exchange_rate_acquisition: Decimal, pub fn create_detailed_sold_transactions( - transactions: Vec<(String, String, String, f32, f32, Option)>, - dates: &std::collections::HashMap>, + transactions: Vec<(String, String, String, Decimal, Decimal, Option)>, + dates: &std::collections::HashMap>, ) -> Result, &str> { let mut detailed_transactions: Vec = Vec::new(); transactions.iter().for_each( @@ -315,7 +323,7 @@ pub fn create_detailed_revolut_sold_transactions( crate::Currency, Option, )>, - dates: &std::collections::HashMap>, + dates: &std::collections::HashMap>, ) -> Result, &str> { let mut detailed_transactions: Vec = Vec::new(); transactions.iter().for_each( @@ -333,8 +341,8 @@ pub fn create_detailed_revolut_sold_transactions( settlement_date: sold_date.clone(), trade_date: sold_date.clone(), acquisition_date: acquired_date.clone(), - income_us: (gross_income.value() as f32), - cost_basis: (cost_basis.value() as f32), + income_us: gross_income.value(), + cost_basis: cost_basis.value(), exchange_rate_settlement_date, exchange_rate_settlement, exchange_rate_acquisition_date, @@ -362,7 +370,7 @@ pub(crate) fn create_per_company_report( revolut_sold_transactions: &[SoldTransaction], ) -> Result { // Key: Company Name , Value : (gross_pl, tax_paid_in_us_pl, cost_pl) - let mut per_company_data: HashMap, (f32, f32, f32)> = HashMap::new(); + let mut per_company_data: HashMap, (Decimal, Decimal, Decimal)> = HashMap::new(); let interests_or_dividends = interests .iter() @@ -370,11 +378,13 @@ pub(crate) fn create_per_company_report( .chain(revolut_dividends_transactions.iter()); interests_or_dividends.for_each(|x| { - let entry = per_company_data - .entry(x.company.clone()) - .or_insert((0.0, 0.0, 0.0)); - entry.0 += x.exchange_rate * x.gross.value() as f32; - entry.1 += x.exchange_rate * x.tax_paid.value() as f32; + let entry = per_company_data.entry(x.company.clone()).or_insert(( + Decimal::ZERO, + Decimal::ZERO, + Decimal::ZERO, + )); + entry.0 += x.exchange_rate * x.gross.value(); + entry.1 += x.exchange_rate * x.tax_paid.value(); // No cost for dividends being paid }); @@ -382,9 +392,11 @@ pub(crate) fn create_per_company_report( .iter() .chain(revolut_sold_transactions.iter()); sells.for_each(|x| { - let entry = per_company_data - .entry(x.company.clone()) - .or_insert((0.0, 0.0, 0.0)); + let entry = per_company_data.entry(x.company.clone()).or_insert(( + Decimal::ZERO, + Decimal::ZERO, + Decimal::ZERO, + )); entry.0 += x.income_us * x.exchange_rate_settlement; // No tax from sold transactions entry.2 += x.cost_basis * x.exchange_rate_acquisition; @@ -392,9 +404,9 @@ pub(crate) fn create_per_company_report( // Convert my HashMap into DataFrame let mut companies: Vec> = Vec::new(); - let mut gross: Vec = Vec::new(); - let mut tax: Vec = Vec::new(); - let mut cost: Vec = Vec::new(); + let mut gross: Vec = Vec::new(); + let mut tax: Vec = Vec::new(); + let mut cost: Vec = Vec::new(); per_company_data .iter() .try_for_each(|(company, (gross_pl, tax_paid_in_us_pl, cost_pl))| { @@ -406,9 +418,9 @@ pub(crate) fn create_per_company_report( cost_pl ); companies.push(company.clone()); - gross.push(*gross_pl); - tax.push(*tax_paid_in_us_pl); - cost.push(*cost_pl); + gross.push(gross_pl.to_f64().unwrap_or(0.0)); + tax.push(tax_paid_in_us_pl.to_f64().unwrap_or(0.0)); + cost.push(cost_pl.to_f64().unwrap_or(0.0)); Ok::<(), &str>(()) })?; @@ -429,6 +441,7 @@ mod tests { use super::*; use crate::Currency; + use rust_decimal::dec; fn round4(val: f64) -> f64 { (val * 10_000.0).round() / 10_000.0 @@ -439,18 +452,18 @@ mod tests { let input = vec![ Transaction { transaction_date: "03/01/21".to_string(), - gross: crate::Currency::EUR(0.05), - tax_paid: crate::Currency::EUR(0.0), + gross: crate::Currency::EUR(dec!(0.05)), + tax_paid: crate::Currency::EUR(dec!(0.0)), exchange_rate_date: "02/28/21".to_string(), - exchange_rate: 2.0, + exchange_rate: dec!(2.0), company: None, }, Transaction { transaction_date: "04/11/21".to_string(), - gross: crate::Currency::EUR(0.07), - tax_paid: crate::Currency::EUR(0.0), + gross: crate::Currency::EUR(dec!(0.07)), + tax_paid: crate::Currency::EUR(dec!(0.0)), exchange_rate_date: "04/10/21".to_string(), - exchange_rate: 3.0, + exchange_rate: dec!(3.0), company: None, }, ]; @@ -481,26 +494,26 @@ mod tests { let input = vec![ Transaction { transaction_date: "04/11/21".to_string(), - gross: crate::Currency::USD(100.0), - tax_paid: crate::Currency::USD(25.0), + gross: crate::Currency::USD(dec!(100.0)), + tax_paid: crate::Currency::USD(dec!(25.0)), exchange_rate_date: "04/10/21".to_string(), - exchange_rate: 3.0, + exchange_rate: dec!(3.0), company: Some("INTEL CORP".to_owned()), }, Transaction { transaction_date: "03/01/21".to_string(), - gross: crate::Currency::USD(126.0), - tax_paid: crate::Currency::USD(10.0), + gross: crate::Currency::USD(dec!(126.0)), + tax_paid: crate::Currency::USD(dec!(10.0)), exchange_rate_date: "02/28/21".to_string(), - exchange_rate: 2.0, + exchange_rate: dec!(2.0), company: Some("INTEL CORP".to_owned()), }, Transaction { transaction_date: "03/11/21".to_string(), - gross: crate::Currency::USD(100.0), - tax_paid: crate::Currency::USD(0.0), + gross: crate::Currency::USD(dec!(100.0)), + tax_paid: crate::Currency::USD(dec!(0.0)), exchange_rate_date: "02/28/21".to_string(), - exchange_rate: 10.0, + exchange_rate: dec!(10.0), company: Some("ABEV".to_owned()), }, ]; @@ -550,36 +563,36 @@ mod tests { trade_date: "03/01/21".to_string(), settlement_date: "03/03/21".to_string(), acquisition_date: "01/01/21".to_string(), - income_us: 20.0, - cost_basis: 20.0, + income_us: dec!(20.0), + cost_basis: dec!(20.0), exchange_rate_settlement_date: "03/02/21".to_string(), - exchange_rate_settlement: 2.5, + exchange_rate_settlement: dec!(2.5), exchange_rate_acquisition_date: "02/28/21".to_string(), - exchange_rate_acquisition: 5.0, + exchange_rate_acquisition: dec!(5.0), company: Some("INTEL CORP".to_owned()), }, SoldTransaction { trade_date: "06/01/21".to_string(), settlement_date: "06/03/21".to_string(), acquisition_date: "01/01/19".to_string(), - income_us: 25.0, - cost_basis: 10.0, + income_us: dec!(25.0), + cost_basis: dec!(10.0), exchange_rate_settlement_date: "06/05/21".to_string(), - exchange_rate_settlement: 4.0, + exchange_rate_settlement: dec!(4.0), exchange_rate_acquisition_date: "12/30/18".to_string(), - exchange_rate_acquisition: 6.0, + exchange_rate_acquisition: dec!(6.0), company: Some("INTEL CORP".to_owned()), }, SoldTransaction { trade_date: "06/01/21".to_string(), settlement_date: "06/03/21".to_string(), acquisition_date: "01/01/19".to_string(), - income_us: 20.0, - cost_basis: 0.0, + income_us: dec!(20.0), + cost_basis: dec!(0.0), exchange_rate_settlement_date: "06/05/21".to_string(), - exchange_rate_settlement: 4.0, + exchange_rate_settlement: dec!(4.0), exchange_rate_acquisition_date: "12/30/18".to_string(), - exchange_rate_acquisition: 6.0, + exchange_rate_acquisition: dec!(6.0), company: Some("PXD".to_owned()), }, ]; @@ -624,9 +637,9 @@ mod tests { #[test] fn test_interests_verification_ok() -> Result<(), String> { - let transactions: Vec<(String, f32, f32)> = vec![ - ("06/01/21".to_string(), 100.0, 0.00), - ("03/01/21".to_string(), 126.0, 0.00), + let transactions: Vec<(String, Decimal, Decimal)> = vec![ + ("06/01/21".to_string(), dec!(100.0), dec!(0.00)), + ("03/01/21".to_string(), dec!(126.0), dec!(0.00)), ]; verify_interests_transactions(&transactions) } @@ -637,15 +650,15 @@ mod tests { ( "06/01/21".to_string(), "06/01/22".to_string(), - Currency::PLN(10.0), - Currency::PLN(2.0), + Currency::PLN(dec!(10.0)), + Currency::PLN(dec!(2.0)), Some("INTEL CORP".to_owned()), ), ( "06/01/21".to_string(), "07/04/23".to_string(), - Currency::PLN(10.0), - Currency::PLN(2.0), + Currency::PLN(dec!(10.0)), + Currency::PLN(dec!(2.0)), Some("INTEL CORP".to_owned()), ), ]; @@ -658,17 +671,17 @@ mod tests { #[test] fn test_dividends_verification_ok() -> Result<(), String> { - let transactions: Vec<(String, f32, f32, Option)> = vec![ + let transactions: Vec<(String, Decimal, Decimal, Option)> = vec![ ( "06/01/21".to_string(), - 100.0, - 25.0, + dec!(100.0), + dec!(25.0), Some("INTEL CORP".to_owned()), ), ( "03/01/21".to_string(), - 126.0, - 10.0, + dec!(126.0), + dec!(10.0), Some("INTEL CORP".to_owned()), ), ]; @@ -680,14 +693,14 @@ mod tests { let transactions: Vec<(String, Currency, Currency, Option)> = vec![ ( "06/01/21".to_string(), - Currency::PLN(10.0), - Currency::PLN(2.0), + Currency::PLN(dec!(10.0)), + Currency::PLN(dec!(2.0)), Some("INTEL CORP".to_owned()), ), ( "03/01/22".to_string(), - Currency::PLN(126.0), - Currency::PLN(10.0), + Currency::PLN(dec!(126.0)), + Currency::PLN(dec!(10.0)), Some("INTEL CORP".to_owned()), ), ]; @@ -703,28 +716,28 @@ mod tests { let parsed_transactions = vec![ ( "03/01/21".to_owned(), - crate::Currency::EUR(0.05), - crate::Currency::EUR(0.00), + crate::Currency::EUR(dec!(0.05)), + crate::Currency::EUR(dec!(0.00)), None, ), ( "04/11/21".to_owned(), - crate::Currency::EUR(0.07), - crate::Currency::EUR(0.00), + crate::Currency::EUR(dec!(0.07)), + crate::Currency::EUR(dec!(0.00)), None, ), ]; - let mut dates: std::collections::HashMap> = + let mut dates: std::collections::HashMap> = std::collections::HashMap::new(); dates.insert( crate::Exchange::EUR("03/01/21".to_owned()), - Some(("02/28/21".to_owned(), 2.0)), + Some(("02/28/21".to_owned(), dec!(2.0))), ); dates.insert( crate::Exchange::EUR("04/11/21".to_owned()), - Some(("04/10/21".to_owned(), 3.0)), + Some(("04/10/21".to_owned(), dec!(3.0))), ); let transactions = create_detailed_revolut_transactions(parsed_transactions, &dates); @@ -734,18 +747,18 @@ mod tests { Ok(vec![ Transaction { transaction_date: "03/01/21".to_string(), - gross: crate::Currency::EUR(0.05), - tax_paid: crate::Currency::EUR(0.0), + gross: crate::Currency::EUR(dec!(0.05)), + tax_paid: crate::Currency::EUR(dec!(0.0)), exchange_rate_date: "02/28/21".to_string(), - exchange_rate: 2.0, + exchange_rate: dec!(2.0), company: None, }, Transaction { transaction_date: "04/11/21".to_string(), - gross: crate::Currency::EUR(0.07), - tax_paid: crate::Currency::EUR(0.0), + gross: crate::Currency::EUR(dec!(0.07)), + tax_paid: crate::Currency::EUR(dec!(0.0)), exchange_rate_date: "04/10/21".to_string(), - exchange_rate: 3.0, + exchange_rate: dec!(3.0), company: None, }, ]) @@ -758,28 +771,28 @@ mod tests { let parsed_transactions = vec![ ( "03/01/21".to_owned(), - crate::Currency::PLN(0.44), - crate::Currency::PLN(0.00), + crate::Currency::PLN(dec!(0.44)), + crate::Currency::PLN(dec!(0.00)), None, ), ( "04/11/21".to_owned(), - crate::Currency::PLN(0.45), - crate::Currency::PLN(0.00), + crate::Currency::PLN(dec!(0.45)), + crate::Currency::PLN(dec!(0.00)), None, ), ]; - let mut dates: std::collections::HashMap> = + let mut dates: std::collections::HashMap> = std::collections::HashMap::new(); dates.insert( crate::Exchange::PLN("03/01/21".to_owned()), - Some(("N/A".to_owned(), 1.0)), + Some(("N/A".to_owned(), dec!(1.0))), ); dates.insert( crate::Exchange::PLN("04/11/21".to_owned()), - Some(("N/A".to_owned(), 1.0)), + Some(("N/A".to_owned(), dec!(1.0))), ); let transactions = create_detailed_revolut_transactions(parsed_transactions, &dates); @@ -789,18 +802,18 @@ mod tests { Ok(vec![ Transaction { transaction_date: "03/01/21".to_string(), - gross: crate::Currency::PLN(0.44), - tax_paid: crate::Currency::PLN(0.0), + gross: crate::Currency::PLN(dec!(0.44)), + tax_paid: crate::Currency::PLN(dec!(0.0)), exchange_rate_date: "N/A".to_string(), - exchange_rate: 1.0, + exchange_rate: dec!(1.0), company: None, }, Transaction { transaction_date: "04/11/21".to_string(), - gross: crate::Currency::PLN(0.45), - tax_paid: crate::Currency::PLN(0.0), + gross: crate::Currency::PLN(dec!(0.45)), + tax_paid: crate::Currency::PLN(dec!(0.0)), exchange_rate_date: "N/A".to_string(), - exchange_rate: 1.0, + exchange_rate: dec!(1.0), company: None, }, ]) @@ -810,21 +823,21 @@ mod tests { #[test] fn test_create_detailed_interests_transactions() -> Result<(), String> { - let parsed_transactions: Vec<(String, f32, f32)> = vec![ - ("04/11/21".to_string(), 100.0, 0.00), - ("03/01/21".to_string(), 126.0, 0.00), + let parsed_transactions: Vec<(String, Decimal, Decimal)> = vec![ + ("04/11/21".to_string(), dec!(100.0), dec!(0.00)), + ("03/01/21".to_string(), dec!(126.0), dec!(0.00)), ]; - let mut dates: std::collections::HashMap> = + let mut dates: std::collections::HashMap> = std::collections::HashMap::new(); dates.insert( crate::Exchange::USD("03/01/21".to_owned()), - Some(("02/28/21".to_owned(), 2.0)), + Some(("02/28/21".to_owned(), dec!(2.0))), ); dates.insert( crate::Exchange::USD("04/11/21".to_owned()), - Some(("04/10/21".to_owned(), 3.0)), + Some(("04/10/21".to_owned(), dec!(3.0))), ); let transactions = create_detailed_interests_transactions(parsed_transactions, &dates); @@ -834,18 +847,18 @@ mod tests { Ok(vec![ Transaction { transaction_date: "04/11/21".to_string(), - gross: crate::Currency::USD(100.0), - tax_paid: crate::Currency::USD(0.0), + gross: crate::Currency::USD(dec!(100.0)), + tax_paid: crate::Currency::USD(dec!(0.0)), exchange_rate_date: "04/10/21".to_string(), - exchange_rate: 3.0, + exchange_rate: dec!(3.0), company: None, }, Transaction { transaction_date: "03/01/21".to_string(), - gross: crate::Currency::USD(126.0), - tax_paid: crate::Currency::USD(0.0), + gross: crate::Currency::USD(dec!(126.0)), + tax_paid: crate::Currency::USD(dec!(0.0)), exchange_rate_date: "02/28/21".to_string(), - exchange_rate: 2.0, + exchange_rate: dec!(2.0), company: None, }, ]) @@ -855,31 +868,31 @@ mod tests { #[test] fn test_create_detailed_div_transactions() -> Result<(), String> { - let parsed_transactions: Vec<(String, f32, f32, Option)> = vec![ + let parsed_transactions: Vec<(String, Decimal, Decimal, Option)> = vec![ ( "04/11/21".to_string(), - 100.0, - 25.0, + dec!(100.0), + dec!(25.0), Some("INTEL CORP".to_owned()), ), ( "03/01/21".to_string(), - 126.0, - 10.0, + dec!(126.0), + dec!(10.0), Some("INTEL CORP".to_owned()), ), ]; - let mut dates: std::collections::HashMap> = + let mut dates: std::collections::HashMap> = std::collections::HashMap::new(); dates.insert( crate::Exchange::USD("03/01/21".to_owned()), - Some(("02/28/21".to_owned(), 2.0)), + Some(("02/28/21".to_owned(), dec!(2.0))), ); dates.insert( crate::Exchange::USD("04/11/21".to_owned()), - Some(("04/10/21".to_owned(), 3.0)), + Some(("04/10/21".to_owned(), dec!(3.0))), ); let transactions = create_detailed_div_transactions(parsed_transactions, &dates); @@ -889,18 +902,18 @@ mod tests { Ok(vec![ Transaction { transaction_date: "04/11/21".to_string(), - gross: crate::Currency::USD(100.0), - tax_paid: crate::Currency::USD(25.0), + gross: crate::Currency::USD(dec!(100.0)), + tax_paid: crate::Currency::USD(dec!(25.0)), exchange_rate_date: "04/10/21".to_string(), - exchange_rate: 3.0, + exchange_rate: dec!(3.0), company: Some("INTEL CORP".to_owned()) }, Transaction { transaction_date: "03/01/21".to_string(), - gross: crate::Currency::USD(126.0), - tax_paid: crate::Currency::USD(10.0), + gross: crate::Currency::USD(dec!(126.0)), + tax_paid: crate::Currency::USD(dec!(10.0)), exchange_rate_date: "02/28/21".to_string(), - exchange_rate: 2.0, + exchange_rate: dec!(2.0), company: Some("INTEL CORP".to_owned()) }, ]) @@ -914,21 +927,21 @@ mod tests { vec![( "11/20/23".to_string(), "12/08/24".to_string(), - Currency::USD(5000.0), - Currency::USD(5804.62), + Currency::USD(dec!(5000.0)), + Currency::USD(dec!(5804.62)), Some("INTEL CORP".to_owned()), )]; - let mut dates: std::collections::HashMap> = + let mut dates: std::collections::HashMap> = std::collections::HashMap::new(); dates.insert( crate::Exchange::USD("11/20/23".to_owned()), - Some(("11/19/23".to_owned(), 2.0)), + Some(("11/19/23".to_owned(), dec!(2.0))), ); dates.insert( crate::Exchange::USD("12/08/24".to_owned()), - Some(("12/06/24".to_owned(), 3.0)), + Some(("12/06/24".to_owned(), dec!(3.0))), ); let transactions = create_detailed_revolut_sold_transactions(parsed_transactions, &dates); @@ -939,12 +952,12 @@ mod tests { trade_date: "12/08/24".to_string(), settlement_date: "12/08/24".to_string(), acquisition_date: "11/20/23".to_string(), - income_us: 5804.62, - cost_basis: 5000.0, + income_us: dec!(5804.62), + cost_basis: dec!(5000.0), exchange_rate_settlement_date: "12/06/24".to_string(), - exchange_rate_settlement: 3.0, + exchange_rate_settlement: dec!(3.0), exchange_rate_acquisition_date: "11/19/23".to_string(), - exchange_rate_acquisition: 2.0, + exchange_rate_acquisition: dec!(2.0), company: Some("INTEL CORP".to_owned()), },]) ); @@ -953,59 +966,59 @@ mod tests { #[test] fn test_create_detailed_sold_transactions() -> Result<(), String> { - let parsed_transactions: Vec<(String, String, String, f32, f32, Option)> = vec![ + let parsed_transactions: Vec<(String, String, String, Decimal, Decimal, Option)> = vec![ ( "03/01/21".to_string(), "03/03/21".to_string(), "01/01/21".to_string(), - 20.0, - 20.0, + dec!(20.0), + dec!(20.0), Some("INTEL CORP".to_owned()), ), ( "06/01/21".to_string(), "06/03/21".to_string(), "01/01/19".to_string(), - 25.0, - 10.0, + dec!(25.0), + dec!(10.0), Some("INTEL CORP".to_owned()), ), ]; - let mut dates: std::collections::HashMap> = + let mut dates: std::collections::HashMap> = std::collections::HashMap::new(); dates.insert( crate::Exchange::USD("01/01/21".to_owned()), - Some(("12/30/20".to_owned(), 1.0)), + Some(("12/30/20".to_owned(), dec!(1.0))), ); dates.insert( crate::Exchange::USD("03/01/21".to_owned()), - Some(("02/28/21".to_owned(), 2.0)), + Some(("02/28/21".to_owned(), dec!(2.0))), ); dates.insert( crate::Exchange::USD("03/03/21".to_owned()), - Some(("03/02/21".to_owned(), 2.5)), + Some(("03/02/21".to_owned(), dec!(2.5))), ); dates.insert( crate::Exchange::USD("06/01/21".to_owned()), - Some(("06/03/21".to_owned(), 3.0)), + Some(("06/03/21".to_owned(), dec!(3.0))), ); dates.insert( crate::Exchange::USD("06/03/21".to_owned()), - Some(("06/05/21".to_owned(), 4.0)), + Some(("06/05/21".to_owned(), dec!(4.0))), ); dates.insert( crate::Exchange::USD("01/01/21".to_owned()), - Some(("02/28/21".to_owned(), 5.0)), + Some(("02/28/21".to_owned(), dec!(5.0))), ); dates.insert( crate::Exchange::USD("01/01/19".to_owned()), - Some(("12/30/18".to_owned(), 6.0)), + Some(("12/30/18".to_owned(), dec!(6.0))), ); dates.insert( crate::Exchange::USD("04/11/21".to_owned()), - Some(("04/10/21".to_owned(), 7.0)), + Some(("04/10/21".to_owned(), dec!(7.0))), ); let transactions = create_detailed_sold_transactions(parsed_transactions, &dates); @@ -1017,24 +1030,24 @@ mod tests { trade_date: "03/01/21".to_string(), settlement_date: "03/03/21".to_string(), acquisition_date: "01/01/21".to_string(), - income_us: 20.0, - cost_basis: 20.0, + income_us: dec!(20.0), + cost_basis: dec!(20.0), exchange_rate_settlement_date: "03/02/21".to_string(), - exchange_rate_settlement: 2.5, + exchange_rate_settlement: dec!(2.5), exchange_rate_acquisition_date: "02/28/21".to_string(), - exchange_rate_acquisition: 5.0, + exchange_rate_acquisition: dec!(5.0), company: Some("INTEL CORP".to_owned()), }, SoldTransaction { trade_date: "06/01/21".to_string(), settlement_date: "06/03/21".to_string(), acquisition_date: "01/01/19".to_string(), - income_us: 25.0, - cost_basis: 10.0, + income_us: dec!(25.0), + cost_basis: dec!(10.0), exchange_rate_settlement_date: "06/05/21".to_string(), - exchange_rate_settlement: 4.0, + exchange_rate_settlement: dec!(4.0), exchange_rate_acquisition_date: "12/30/18".to_string(), - exchange_rate_acquisition: 6.0, + exchange_rate_acquisition: dec!(6.0), company: Some("INTEL CORP".to_owned()), }, ]) @@ -1044,23 +1057,23 @@ mod tests { #[test] fn test_dividends_verification_empty_ok() -> Result<(), String> { - let transactions: Vec<(String, f32, f32, Option)> = vec![]; + let transactions: Vec<(String, Decimal, Decimal, Option)> = vec![]; verify_dividends_transactions(&transactions) } #[test] fn test_dividends_verification_fail() -> Result<(), String> { - let transactions: Vec<(String, f32, f32, Option)> = vec![ + let transactions: Vec<(String, Decimal, Decimal, Option)> = vec![ ( "04/11/22".to_string(), - 100.0, - 25.0, + dec!(100.0), + dec!(25.0), Some("INTEL CORP".to_owned()), ), ( "03/01/21".to_string(), - 126.0, - 10.0, + dec!(126.0), + dec!(10.0), Some("INTEL CORP".to_owned()), ), ]; @@ -1070,9 +1083,16 @@ mod tests { #[test] fn test_sold_transaction_reconstruction_dividiends_only() -> Result<(), String> { - let parsed_sold_transactions: Vec<(String, String, f32, f32, f32, Option)> = vec![]; + let parsed_sold_transactions: Vec<( + String, + String, + Decimal, + Decimal, + Decimal, + Option, + )> = vec![]; - let parsed_gains_and_losses: Vec<(String, String, f32, f32, f32)> = vec![]; + let parsed_gains_and_losses: Vec<(String, String, Decimal, Decimal, Decimal)> = vec![]; let detailed_sold_transactions = reconstruct_sold_transactions(&parsed_sold_transactions, &parsed_gains_and_losses)?; @@ -1087,39 +1107,46 @@ mod tests { #[test] fn test_sold_transaction_reconstruction_ok() -> Result<(), String> { - let parsed_sold_transactions: Vec<(String, String, f32, f32, f32, Option)> = vec![ + let parsed_sold_transactions: Vec<( + String, + String, + Decimal, + Decimal, + Decimal, + Option, + )> = vec![ ( "06/01/21".to_string(), "06/03/21".to_string(), - 1.0, - 25.0, - 24.8, + dec!(1.0), + dec!(25.0), + dec!(24.8), Some("INTEL CORP".to_owned()), ), ( "03/01/21".to_string(), "03/03/21".to_string(), - 2.0, - 10.0, - 19.8, + dec!(2.0), + dec!(10.0), + dec!(19.8), Some("INTEL CORP".to_owned()), ), ]; - let parsed_gains_and_losses: Vec<(String, String, f32, f32, f32)> = vec![ + let parsed_gains_and_losses: Vec<(String, String, Decimal, Decimal, Decimal)> = vec![ ( "01/01/2019".to_string(), "06/01/2021".to_string(), - 10.0, - 10.0, - 24.8, + dec!(10.0), + dec!(10.0), + dec!(24.8), ), ( "01/01/2021".to_string(), "03/01/2021".to_string(), - 20.0, - 20.0, - 19.8, + dec!(20.0), + dec!(20.0), + dec!(19.8), ), ]; @@ -1138,16 +1165,16 @@ mod tests { "06/01/21".to_string(), "06/03/21".to_string(), "01/01/19".to_string(), - 24.8, - 10.0, + dec!(24.8), + dec!(10.0), Some("INTEL CORP".to_owned()) ), ( "03/01/21".to_string(), "03/03/21".to_string(), "01/01/21".to_string(), - 19.8, - 20.0, + dec!(19.8), + dec!(20.0), Some("INTEL CORP".to_owned()) ), ] @@ -1157,39 +1184,46 @@ mod tests { #[test] fn test_sold_transaction_reconstruction_single_digits_ok() -> Result<(), String> { - let parsed_sold_transactions: Vec<(String, String, f32, f32, f32, Option)> = vec![ + let parsed_sold_transactions: Vec<( + String, + String, + Decimal, + Decimal, + Decimal, + Option, + )> = vec![ ( "6/1/21".to_string(), "6/3/21".to_string(), - 1.0, - 25.0, - 24.8, + dec!(1.0), + dec!(25.0), + dec!(24.8), Some("INTEL CORP".to_owned()), ), ( "3/1/21".to_string(), "3/3/21".to_string(), - 2.0, - 10.0, - 19.8, + dec!(2.0), + dec!(10.0), + dec!(19.8), Some("INTEL CORP".to_owned()), ), ]; - let parsed_gains_and_losses: Vec<(String, String, f32, f32, f32)> = vec![ + let parsed_gains_and_losses: Vec<(String, String, Decimal, Decimal, Decimal)> = vec![ ( "01/01/2019".to_string(), "06/01/2021".to_string(), - 10.0, - 10.0, - 24.8, + dec!(10.0), + dec!(10.0), + dec!(24.8), ), ( "01/01/2021".to_string(), "03/01/2021".to_string(), - 20.0, - 20.0, - 19.8, + dec!(20.0), + dec!(20.0), + dec!(19.8), ), ]; @@ -1208,16 +1242,16 @@ mod tests { "06/01/21".to_string(), "6/3/21".to_string(), "01/01/19".to_string(), - 24.8, - 10.0, + dec!(24.8), + dec!(10.0), Some("INTEL CORP".to_owned()) ), ( "03/01/21".to_string(), "3/3/21".to_string(), "01/01/21".to_string(), - 19.8, - 20.0, + dec!(19.8), + dec!(20.0), Some("INTEL CORP".to_owned()) ), ] @@ -1227,37 +1261,43 @@ mod tests { #[test] fn test_sold_transaction_reconstruction_second_fail() { - let parsed_sold_transactions: Vec<(String, String, f32, f32, f32, Option)> = - vec![( - "11/07/22".to_string(), // trade date - "11/09/22".to_string(), // settlement date - 173.0, // quantity - 28.2035, // price - 4877.36, // amount sold - Some("INTEL CORP".to_owned()), // company symbol (ticker) - )]; - - let parsed_gains_and_losses: Vec<(String, String, f32, f32, f32)> = vec![ + let parsed_sold_transactions: Vec<( + String, + String, + Decimal, + Decimal, + Decimal, + Option, + )> = vec![( + "11/07/22".to_string(), // trade date + "11/09/22".to_string(), // settlement date + dec!(173.0), // quantity + dec!(28.2035), // price + dec!(4877.36), // amount sold + Some("INTEL CORP".to_owned()), // company symbol (ticker) + )]; + + let parsed_gains_and_losses: Vec<(String, String, Decimal, Decimal, Decimal)> = vec![ ( "05/02/22".to_string(), // date when sold stock was acquired (date_acquired) "07/19/22".to_string(), // date when stock was sold (date_sold) - 0.0, // aqusition cost of sold stock (aquisition_cost) - 1593.0, // adjusted aquisition cost of sold stock (cost_basis) - 1415.480004, // income from sold stock (total_proceeds) + dec!(0.0), // aqusition cost of sold stock (aquisition_cost) + dec!(1593.0), // adjusted aquisition cost of sold stock (cost_basis) + dec!(1415.480004), // income from sold stock (total_proceeds) ), ( "02/18/22".to_string(), "07/19/22".to_string(), - 4241.16, - 4989.6, - 4325.10001, + dec!(4241.16), + dec!(4989.6), + dec!(4325.10001), ), ( "08/19/22".to_string(), "11/07/22".to_string(), - 5236.0872, - 6160.0975, - 4877.355438, + dec!(5236.0872), + dec!(6160.0975), + dec!(4877.355438), ), ]; @@ -1270,53 +1310,60 @@ mod tests { #[test] fn test_sold_transaction_reconstruction_multistock() -> Result<(), String> { - let parsed_sold_transactions: Vec<(String, String, f32, f32, f32, Option)> = vec![ + let parsed_sold_transactions: Vec<( + String, + String, + Decimal, + Decimal, + Decimal, + Option, + )> = vec![ ( "12/21/22".to_string(), "12/23/22".to_string(), - 163.0, - 26.5900, - 4332.44, + dec!(163.0), + dec!(26.5900), + dec!(4332.44), Some("INTEL CORP".to_owned()), ), ( "12/19/22".to_string(), "12/21/22".to_string(), - 252.0, - 26.5900, - 6698.00, + dec!(252.0), + dec!(26.5900), + dec!(6698.00), Some("INTEL CORP".to_owned()), ), ]; - let parsed_gains_and_losses: Vec<(String, String, f32, f32, f32)> = vec![ + let parsed_gains_and_losses: Vec<(String, String, Decimal, Decimal, Decimal)> = vec![ ( "08/19/2021".to_string(), "12/19/2022".to_string(), - 4336.4874, - 4758.6971, - 2711.0954, + dec!(4336.4874), + dec!(4758.6971), + dec!(2711.0954), ), ( "05/03/2021".to_string(), "12/21/2022".to_string(), - 0.0, - 3876.918, - 2046.61285, + dec!(0.0), + dec!(3876.918), + dec!(2046.61285), ), ( "08/19/2022".to_string(), "12/19/2022".to_string(), - 5045.6257, - 5936.0274, - 3986.9048, + dec!(5045.6257), + dec!(5936.0274), + dec!(3986.9048), ), ( "05/02/2022".to_string(), "12/21/2022".to_string(), - 0.0, - 4013.65, - 2285.82733, + dec!(0.0), + dec!(4013.65), + dec!(2285.82733), ), ]; @@ -1330,32 +1377,32 @@ mod tests { "12/19/22".to_string(), "12/21/22".to_string(), "08/19/21".to_string(), - 2711.0954, - 4336.4874, + dec!(2711.0954), + dec!(4336.4874), Some("INTEL CORP".to_owned()) ), ( "12/21/22".to_string(), "12/23/22".to_string(), "05/03/21".to_string(), - 2046.61285, - 0.0, + dec!(2046.61285), + dec!(0.0), Some("INTEL CORP".to_owned()) ), ( "12/19/22".to_string(), "12/21/22".to_string(), "08/19/22".to_string(), - 3986.9048, - 5045.6257, + dec!(3986.9048), + dec!(5045.6257), Some("INTEL CORP".to_owned()) ), ( "12/21/22".to_string(), "12/23/22".to_string(), "05/02/22".to_string(), - 2285.82733, - 0.0, + dec!(2285.82733), + dec!(0.0), Some("INTEL CORP".to_owned()) ), ] @@ -1365,26 +1412,33 @@ mod tests { #[test] fn test_sold_transaction_reconstruction_no_gains_fail() { - let parsed_sold_transactions: Vec<(String, String, f32, f32, f32, Option)> = vec![ + let parsed_sold_transactions: Vec<( + String, + String, + Decimal, + Decimal, + Decimal, + Option, + )> = vec![ ( "06/01/21".to_string(), "06/03/21".to_string(), - 1.0, - 25.0, - 24.8, + dec!(1.0), + dec!(25.0), + dec!(24.8), Some("INTEL CORP".to_owned()), ), ( "03/01/21".to_string(), "03/03/21".to_string(), - 2.0, - 10.0, - 19.8, + dec!(2.0), + dec!(10.0), + dec!(19.8), Some("INTEL CORP".to_owned()), ), ]; - let parsed_gains_and_losses: Vec<(String, String, f32, f32, f32)> = vec![]; + let parsed_gains_and_losses: Vec<(String, String, Decimal, Decimal, Decimal)> = vec![]; let result = reconstruct_sold_transactions(&parsed_sold_transactions, &parsed_gains_and_losses); diff --git a/src/us.rs b/src/us.rs index b3fe578..572b78e 100644 --- a/src/us.rs +++ b/src/us.rs @@ -1,28 +1,30 @@ // SPDX-FileCopyrightText: 2022-2025 RustInFinance // SPDX-License-Identifier: BSD-3-Clause +use rust_decimal::Decimal; + pub struct US {} impl etradeTaxReturnHelper::Residency for US { fn get_exchange_rates( &self, dates: &mut std::collections::HashMap< etradeTaxReturnHelper::Exchange, - Option<(String, f32)>, + Option<(String, Decimal)>, >, ) -> Result<(), String> { dates.iter_mut().for_each(|(_date, val)| { - *val = Some(("N/A".to_owned(), 1.0)); + *val = Some(("N/A".to_owned(), Decimal::ONE)); }); Ok(()) } fn present_result( &self, - gross_interests: f32, - gross_div: f32, - tax_div: f32, - gross_sold: f32, - cost_sold: f32, + gross_interests: Decimal, + gross_div: Decimal, + tax_div: Decimal, + gross_sold: Decimal, + cost_sold: Decimal, ) -> (Vec, Option) { let total_gross_div = gross_interests + gross_div; let mut presentation: Vec = vec![]; @@ -43,14 +45,15 @@ impl etradeTaxReturnHelper::Residency for US { #[cfg(test)] mod tests { use super::*; + use rust_decimal::dec; #[test] fn test_present_result_us() -> Result<(), String> { let rd: Box = Box::new(US {}); - let gross_div = 100.0f32; - let tax_div = 15.0f32; - let gross_sold = 1000.0f32; - let cost_sold = 10.0f32; + let gross_div = dec!(100.0); + let tax_div = dec!(15.0); + let gross_sold = dec!(1000.0); + let cost_sold = dec!(10.0); let ref_results: Vec = vec![ "===> (DIVIDENDS+INTERESTS) INCOME: $100.00".to_string(), @@ -59,7 +62,7 @@ mod tests { "===> (SOLD STOCK) TAX DEDUCTIBLE COST: $10.00".to_string(), ]; - let (results, _) = rd.present_result(0.0f32, gross_div, tax_div, gross_sold, cost_sold); + let (results, _) = rd.present_result(dec!(0.0), gross_div, tax_div, gross_sold, cost_sold); results .iter() diff --git a/src/xlsxparser.rs b/src/xlsxparser.rs index e68a7aa..1dfec96 100644 --- a/src/xlsxparser.rs +++ b/src/xlsxparser.rs @@ -2,6 +2,8 @@ // SPDX-License-Identifier: BSD-3-Clause use calamine::{open_workbook, Reader, Xlsx}; +use rust_decimal::Decimal; +use std::str::FromStr; pub use crate::logging::ResultExt; @@ -14,7 +16,7 @@ pub use crate::logging::ResultExt; /// income from sold stock (total_proceeds) pub fn parse_gains_and_losses( xlsxtoparse: &str, -) -> Result, &str> { +) -> Result, &str> { let mut excel: Xlsx<_> = open_workbook(xlsxtoparse).map_err(|_| "Error opening XLSX file: {}")?; let name = excel @@ -23,7 +25,7 @@ pub fn parse_gains_and_losses( .expect_and_log("No worksheet found") .clone(); log::info!("name: {}", name); - let mut transactions: Vec<(String, String, f32, f32, f32)> = vec![]; + let mut transactions: Vec<(String, String, Decimal, Decimal, Decimal)> = vec![]; if let Some(Ok(r)) = excel.worksheet_range(&name) { let mut rows = r.rows(); let categories = rows @@ -80,15 +82,30 @@ pub fn parse_gains_and_losses( } //println!("transakcja: {:?}", transakcja); + // XLSX natively stores numbers as IEEE 754 f64, so get_float() -> f64 -> Decimal + // is unavoidable here — there is no higher-precision source in the file. transactions.push(( transakcja[date_acquired_idx] .get_string() .unwrap() .to_owned(), transakcja[date_sold_idx].get_string().unwrap().to_owned(), - transakcja[acquistion_cost_idx].get_float().unwrap() as f32, - transakcja[cost_basis_idx].get_float().unwrap() as f32, - transakcja[total_proceeds_idx].get_float().unwrap() as f32, + Decimal::from_str( + &transakcja[acquistion_cost_idx] + .get_float() + .unwrap() + .to_string(), + ) + .unwrap(), + Decimal::from_str(&transakcja[cost_basis_idx].get_float().unwrap().to_string()) + .unwrap(), + Decimal::from_str( + &transakcja[total_proceeds_idx] + .get_float() + .unwrap() + .to_string(), + ) + .unwrap(), )); } } @@ -99,6 +116,7 @@ pub fn parse_gains_and_losses( #[cfg(test)] mod tests { use super::*; + use rust_decimal::dec; #[test] fn test_parse_gain_and_losses() -> Result<(), String> { @@ -108,16 +126,16 @@ mod tests { ( "04/24/2013".to_owned(), "04/11/2022".to_owned(), - 0.0, - 23.5175, - 46.9 + dec!(0.0), + dec!(23.5175), + dec!(46.9) ), ( "08/19/2015".to_owned(), "05/02/2022".to_owned(), - 24.258, - 29.28195, - 43.67 + dec!(24.258), + dec!(29.28195), + dec!(43.67) ) ]) ); @@ -127,16 +145,16 @@ mod tests { ( "04/24/2013".to_owned(), "04/11/2022".to_owned(), - 0.0, - 23.5175, - 46.9 + dec!(0.0), + dec!(23.5175), + dec!(46.9) ), ( "08/19/2015".to_owned(), "05/02/2022".to_owned(), - 24.258, - 29.28195, - 43.67 + dec!(24.258), + dec!(29.28195), + dec!(43.67) ) ]) ); @@ -152,72 +170,72 @@ mod tests { ( "02/17/2023".to_owned(), "02/21/2023".to_owned(), - 1791.0388, - 2107.1, - 2018.3545 + dec!(1791.0388), + dec!(2107.1), + dec!(2018.354496) ), ( "08/01/2022".to_owned(), "06/05/2023".to_owned(), - 0.0, - 258.09, - 219.0275 + dec!(0), + dec!(258.09), + dec!(219.027501) ), ( "01/31/2023".to_owned(), "06/05/2023".to_owned(), - 0.0, - 195.37, - 219.0275 + dec!(0), + dec!(195.37), + dec!(219.027501) ), ( "10/31/2022".to_owned(), "06/05/2023".to_owned(), - 0.0, - 200.305, - 219.0275 + dec!(0), + dec!(200.305), + dec!(219.027501) ), ( "05/01/2023".to_owned(), "06/05/2023".to_owned(), - 0.0, - 215.32, - 219.0275 + dec!(0), + dec!(215.32), + dec!(219.027501) ), ( "07/31/2023".to_owned(), "08/07/2023".to_owned(), - 0.0, - 255.0275, - 247.16 + dec!(0), + dec!(255.0275), + dec!(247.159997) ), ( "08/18/2023".to_owned(), "08/21/2023".to_owned(), - 1969.0505, - 2701.235, - 2689.0754 + dec!(1969.0505), + dec!(2701.235), + dec!(2689.0755) ), ( "08/30/2023".to_owned(), "12/13/2023".to_owned(), - 0.0, - 923.8725, - 1187.31 + dec!(0), + dec!(923.8725), + dec!(1187.310015) ), ( "11/30/2023".to_owned(), "12/13/2023".to_owned(), - 0.0, - 1163.5, - 1143.34 + dec!(0), + dec!(1163.5), + dec!(1143.33999) ), ( "10/31/2023".to_owned(), "12/13/2023".to_owned(), - 0.0, - 252.665, - 307.82 + dec!(0), + dec!(252.665), + dec!(307.819995) ) ]) );