From bf960c7833d16736cf87c3053bbc561c5d0712d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Thebault?= Date: Mon, 4 May 2026 13:34:02 +0200 Subject: [PATCH 01/16] new color implementation --- base/src/color.rs | 651 ++++++++++--- base/src/color/css4.rs | 307 +++--- base/src/color/xkcd.rs | 1902 ++++++++++++++++++------------------- base/src/lib.rs | 2 +- iced/src/figure.rs | 4 +- iced/src/lib.rs | 10 +- iced/src/surface.rs | 13 +- pxl/src/lib.rs | 6 +- src/lib.rs | 2 +- src/render.rs | 10 +- src/style.rs | 22 +- src/style/catppuccin.rs | 264 ++--- src/style/series.rs | 114 +-- src/style/theme.rs | 50 +- src/utils.rs | 20 +- svg/src/lib.rs | 6 +- tests/src/tests/series.rs | 12 +- tests/src/tests/style.rs | 6 +- text/src/rich.rs | 6 +- text/src/rich/builder.rs | 4 +- text/src/rich/render.rs | 8 +- 21 files changed, 1902 insertions(+), 1517 deletions(-) diff --git a/base/src/color.rs b/base/src/color.rs index d6f129c..845007e 100644 --- a/base/src/color.rs +++ b/base/src/color.rs @@ -1,3 +1,4 @@ +//! This module defines color types and conversions between them. use std::str::FromStr; use std::{error, fmt}; @@ -7,12 +8,12 @@ mod xkcd; pub use css4::*; pub trait ResolveColor { - fn resolve_color(&self, color: &Color) -> ColorU8; + fn resolve_color(&self, color: &Color) -> Rgba8; } pub trait Color: Clone + Copy { #[inline] - fn resolve(&self, rc: &R) -> ColorU8 + fn resolve(&self, rc: &R) -> Rgba8 where R: ResolveColor, Self: Sized, @@ -21,51 +22,72 @@ pub trait Color: Clone + Copy { } } -impl Color for ColorU8 {} +impl Color for Rgba8 {} -impl ResolveColor for () { - fn resolve_color(&self, color: &ColorU8) -> ColorU8 { +impl ResolveColor for () { + fn resolve_color(&self, color: &Rgba8) -> Rgba8 { *color } } -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] -pub struct ColorU8 { - r: u8, - g: u8, - b: u8, - a: u8, -} +/// A simple color type with 8-bit RGB components. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub struct Rgb8(u8, u8, u8); + +impl Rgb8 { + pub const fn new(r: u8, g: u8, b: u8) -> Self { + Self(r, g, b) + } + + /// Get the red component of the color. + pub const fn r(&self) -> u8 { + self.0 + } + + /// Get the green component of the color. + pub const fn g(&self) -> u8 { + self.1 + } -impl ColorU8 { - pub const fn from_rgb_f32(r: f32, g: f32, b: f32) -> Self { - let r = (r.clamp(0.0, 1.0) * 255.0) as u8; - let g = (g.clamp(0.0, 1.0) * 255.0) as u8; - let b = (b.clamp(0.0, 1.0) * 255.0) as u8; - ColorU8 { r, g, b, a: 255 } + /// Get the blue component of the color. + pub const fn b(&self) -> u8 { + self.2 } - pub const fn from_rgba_f32(r: f32, g: f32, b: f32, a: f32) -> Self { - let r = (r.clamp(0.0, 1.0) * 255.0) as u8; - let g = (g.clamp(0.0, 1.0) * 255.0) as u8; - let b = (b.clamp(0.0, 1.0) * 255.0) as u8; - let a = (a.clamp(0.0, 1.0) * 255.0) as u8; - ColorU8 { r, g, b, a } + /// Get the HTML hex string representation of the color, e.g. `#ff0000` for red. + pub fn html(&self) -> String { + format!("#{:02x}{:02x}{:02x}", self.r(), self.g(), self.b()) } - pub const fn from_rgb(r: u8, g: u8, b: u8) -> Self { - ColorU8 { r, g, b, a: 255 } + /// Get the RGB components of the color as an array. + pub const fn arr(&self) -> [u8; 3] { + [self.0, self.1, self.2] } - pub const fn from_rgba(r: u8, g: u8, b: u8, a: u8) -> Self { - ColorU8 { r, g, b, a } + /// Compute the relative luminance of the color, in linear RGB space. + pub fn luminance(&self) -> f32 { + let lin: LinRgb = (*self).into(); + lin.luminance() + } + + /// Get this color with an alpha channel, with the given alpha value. + pub const fn with_a(&self, a: u8) -> Rgba8 { + Rgba8(self.0, self.1, self.2, a) + } + + /// Get this color with an alpha channel, with alpha specified between 0.0 and 1.0. + pub const fn with_opacity(&self, opacity: f32) -> Rgba8 { + let a = (opacity.clamp(0.0, 1.0) * 255.0).round() as u8; + self.with_a(a) } /// Parse a color from an HTML hex string, e.g. `#ff0000` or `#f00` for red. - /// Supports also alpha channel: `#ff000080` or `#f008`. - pub const fn from_html(hex: &[u8]) -> Self { + /// The hex string must start with a `#` and be followed by either 3 or 6 hexadecimal digits. + /// + /// Panics if the hex string is invalid, e.g. if it contains non-hexadecimal characters or has an invalid length. + pub const fn from_hex(hex: &[u8]) -> Self { if hex[0] != b'#' { - panic!("Invalid hex color"); + panic!("Hex color must start with a #"); } match hex.len() { 4 => { @@ -75,121 +97,142 @@ impl ColorU8 { let r = r << 4 | r; let g = g << 4 | g; let b = b << 4 | b; - ColorU8::from_rgb(r, g, b) - } - 5 => { - let r = hex_to_u8(hex[1]); - let g = hex_to_u8(hex[2]); - let b = hex_to_u8(hex[3]); - let a = hex_to_u8(hex[4]); - let r = r << 4 | r; - let g = g << 4 | g; - let b = b << 4 | b; - let a = a << 4 | a; - ColorU8::from_rgba(r, g, b, a) + Rgb8::new(r, g, b) } 7 => { let r = hex_to_u8(hex[1]) << 4 | hex_to_u8(hex[2]); let g = hex_to_u8(hex[3]) << 4 | hex_to_u8(hex[4]); let b = hex_to_u8(hex[5]) << 4 | hex_to_u8(hex[6]); - ColorU8::from_rgb(r, g, b) - } - 9 => { - let r = hex_to_u8(hex[1]) << 4 | hex_to_u8(hex[2]); - let g = hex_to_u8(hex[3]) << 4 | hex_to_u8(hex[4]); - let b = hex_to_u8(hex[5]) << 4 | hex_to_u8(hex[6]); - let a = hex_to_u8(hex[7]) << 4 | hex_to_u8(hex[8]); - ColorU8::from_rgba(r, g, b, a) + Rgb8::new(r, g, b) } _ => panic!("Invalid hex color"), } } +} - pub const fn rgb(&self) -> [u8; 3] { - [self.r, self.g, self.b] - } - - pub const fn rgba(&self) -> [u8; 4] { - [self.r, self.g, self.b, self.a] - } - - pub const fn rgb_f32(&self) -> [f32; 3] { - [ - self.r as f32 / 255.0, - self.g as f32 / 255.0, - self.b as f32 / 255.0, - ] - } +/// A simple color type with 8-bit RGB components, including an alpha channel. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub struct Rgba8(u8, u8, u8, u8); - pub const fn rgba_f32(&self) -> [f32; 4] { - [ - self.r as f32 / 255.0, - self.g as f32 / 255.0, - self.b as f32 / 255.0, - self.a as f32 / 255.0, - ] +impl Rgba8 { + pub const fn new(r: u8, g: u8, b: u8, a: u8) -> Self { + Self(r, g, b, a) } - pub const fn red(&self) -> u8 { - self.r + /// Get the red component of the color. + pub const fn r(&self) -> u8 { + self.0 } - pub const fn green(&self) -> u8 { - self.g + /// Get the green component of the color. + pub const fn g(&self) -> u8 { + self.1 } - pub const fn blue(&self) -> u8 { - self.b + /// Get the blue component of the color. + pub const fn b(&self) -> u8 { + self.2 } - pub const fn alpha(&self) -> u8 { - self.a + /// Get the alpha channel of the color. + pub const fn a(&self) -> u8 { + self.3 } - pub const fn opacity(&self) -> Option { - if self.a == 255 { - None + /// Get the HTML hex string representation of the color, e.g. `#ff0000` for red. + pub fn html(&self) -> String { + if self.a() == 255 { + format!("#{:02x}{:02x}{:02x}", self.r(), self.g(), self.b()) } else { - Some(self.a as f32 / 255.0) + format!( + "#{:02x}{:02x}{:02x}{:02x}", + self.r(), + self.g(), + self.b(), + self.a() + ) } } - pub fn html(&self) -> String { - format!("#{:02x}{:02x}{:02x}", self.r, self.g, self.b) + /// Get the RGBA components of the color as an array. + pub const fn arr(&self) -> [u8; 4] { + [self.0, self.1, self.2, self.3] } - pub const fn with_red(self, r: u8) -> Self { - ColorU8 { r, ..self } + /// Get the Rgb8 representation of the color, ignoring the alpha channel. + pub const fn rgb(&self) -> Rgb8 { + Rgb8(self.0, self.1, self.2) } - pub const fn with_green(self, g: u8) -> Self { - ColorU8 { g, ..self } + /// Compute the relative luminance of the color, in linear RGB space. + /// The alpha channel is ignored for this computation. + pub fn luminance(&self) -> f32 { + let lin: LinRgb = self.rgb().into(); + lin.luminance() } - pub const fn with_blue(self, b: u8) -> Self { - ColorU8 { b, ..self } + /// Get the alpha channel of the color as a float between 0.0 and 1.0. + pub const fn opacity(&self) -> Option { + if self.a() == 255 { + None + } else { + Some(self.a() as f32 / 255.0) + } } - pub const fn with_alpha(self, a: u8) -> Self { - ColorU8 { a, ..self } - } + /// Get this color with an alpha channel, with alpha specified between 0.0 and 1.0. pub const fn with_opacity(self, opacity: f32) -> Self { assert!(0.0 <= opacity && opacity <= 1.0); - ColorU8 { - a: (self.a as f32 * opacity) as u8, - ..self - } - } - - pub const fn without_opacity(self) -> Self { - ColorU8 { a: 255, ..self } + let a = self.a() as f32 * opacity; + Rgba8(self.r(), self.g(), self.b(), a as u8) } - pub const fn luminance(&self) -> f32 { - 0.2126 * (self.r as f32 / 255.0) - + 0.7152 * (self.g as f32 / 255.0) - + 0.0722 * (self.b as f32 / 255.0) + /// Parse a color from an HTML hex string, e.g. `#ff0000` or `#f00` for red. + /// Supports also alpha channel: `#ff000080` or `#f008`. + /// The hex string must start with a `#` and be followed by either 3, 4, 6, or 8 hexadecimal digits. + /// + /// Panics if the hex string is invalid, e.g. if it contains non-hexadecimal characters or has an invalid length. + pub const fn from_hex(hex: &[u8]) -> Self { + if hex[0] != b'#' { + panic!("Hex color must start with a #"); + } + match hex.len() { + 4 => { + let r = hex_to_u8(hex[1]); + let g = hex_to_u8(hex[2]); + let b = hex_to_u8(hex[3]); + let r = r << 4 | r; + let g = g << 4 | g; + let b = b << 4 | b; + Rgba8::new(r, g, b, 255) + } + 5 => { + let r = hex_to_u8(hex[1]); + let g = hex_to_u8(hex[2]); + let b = hex_to_u8(hex[3]); + let a = hex_to_u8(hex[4]); + let r = r << 4 | r; + let g = g << 4 | g; + let b = b << 4 | b; + let a = a << 4 | a; + Rgba8::new(r, g, b, a) + } + 7 => { + let r = hex_to_u8(hex[1]) << 4 | hex_to_u8(hex[2]); + let g = hex_to_u8(hex[3]) << 4 | hex_to_u8(hex[4]); + let b = hex_to_u8(hex[5]) << 4 | hex_to_u8(hex[6]); + Rgba8::new(r, g, b, 255) + } + 9 => { + let r = hex_to_u8(hex[1]) << 4 | hex_to_u8(hex[2]); + let g = hex_to_u8(hex[3]) << 4 | hex_to_u8(hex[4]); + let b = hex_to_u8(hex[5]) << 4 | hex_to_u8(hex[6]); + let a = hex_to_u8(hex[7]) << 4 | hex_to_u8(hex[8]); + Rgba8::new(r, g, b, a) + } + _ => panic!("Invalid hex color"), + } } } @@ -206,7 +249,21 @@ const fn is_hex_char(c: u8) -> bool { matches!(c, b'0'..=b'9' | b'a'..=b'f' | b'A'..=b'F') } -/// Parsing error for ColorU8 +/// Rgba8 and Rgb8 are considered equal if their RGB components are equal and the alpha channel of Rgba8 is 255. +impl PartialEq for Rgba8 { + fn eq(&self, other: &Rgb8) -> bool { + self.0 == other.0 && self.1 == other.1 && self.2 == other.2 && self.3 == 255 + } +} + +/// Rgba8 and Rgb8 are considered equal if their RGB components are equal and the alpha channel of Rgba8 is 255. +impl PartialEq for Rgb8 { + fn eq(&self, other: &Rgba8) -> bool { + self.0 == other.0 && self.1 == other.1 && self.2 == other.2 && other.3 == 255 + } +} + +/// Parsing error for Rgba8 #[derive(Debug)] pub enum ParseError { InvalidFormat, @@ -282,12 +339,66 @@ fn parse_alpha(s: &str) -> Result { } } -/// Implement FromStr for ColorU8 to parse color from strings +/// Implement FromStr for Rgb8 to parse color from strings +/// Supported formats: +/// - HTML hex: `#rrggbb`, `#rgb` +/// - CSS rgb(): `rgb(r,g,b)` where r,g,b are 0-255 or percentages +/// - named color from CSS4 or XKCD color names +impl FromStr for Rgb8 { + type Err = ParseError; + + fn from_str(s: &str) -> Result { + let raw = s.trim(); + if raw.is_empty() { + return Err(ParseError::InvalidFormat); + } + + // HTML hex: starts with '#' + if raw.starts_with('#') { + // safe to call from_hex, but we should validate length first + let bytes = raw.as_bytes(); + match bytes.len() { + 4 | 7 => { + if bytes[1..].iter().all(|&c| is_hex_char(c)) { + Ok(Rgb8::from_hex(bytes)) + } else { + Err(ParseError::InvalidHex) + } + } + _ => Err(ParseError::InvalidHex), + } + } + // rgb(...) + else if raw.to_ascii_lowercase().starts_with("rgb(") && raw.ends_with(')') { + let inner = &raw[4..raw.len() - 1]; + let parts: Vec<&str> = inner.split(',').collect(); + if parts.len() != 3 { + return Err(ParseError::InvalidFormat); + } + let r = parse_component_0_255(parts[0])?; + let g = parse_component_0_255(parts[1])?; + let b = parse_component_0_255(parts[2])?; + Ok(Rgb8::new(r, g, b)) + } + // named color + else { + if let Some(col) = css4::lookup_name(raw) { + Ok(col.rgb()) + } else if let Some(col) = xkcd::lookup_name(raw) { + Ok(col.rgb()) + } else { + Err(ParseError::UnknownName) + } + } + } +} + +/// Implement FromStr for Rgba8 to parse color from strings /// Supported formats: /// - HTML hex: `#rrggbb`, `#rgb`, `#rrggbbaa`, `#rgba` /// - CSS rgb(): `rgb(r,g,b)` where r,g,b are 0-255 or percentages /// - CSS rgba(): `rgba(r,g,b,a)` where r,g,b are 0-255 or percentages, a is 0.0-1.0 -impl FromStr for ColorU8 { +impl FromStr for Rgba8 { type Err = ParseError; fn from_str(s: &str) -> Result { @@ -298,12 +409,12 @@ impl FromStr for ColorU8 { // HTML hex: starts with '#' if raw.starts_with('#') { - // safe to call from_html, but we should validate length first + // safe to call from_hex, but we should validate length first let bytes = raw.as_bytes(); match bytes.len() { 4 | 5 | 7 | 9 => { if bytes[1..].iter().all(|&c| is_hex_char(c)) { - Ok(ColorU8::from_html(bytes)) + Ok(Rgba8::from_hex(bytes)) } else { Err(ParseError::InvalidHex) } @@ -321,7 +432,7 @@ impl FromStr for ColorU8 { let r = parse_component_0_255(parts[0])?; let g = parse_component_0_255(parts[1])?; let b = parse_component_0_255(parts[2])?; - Ok(ColorU8::from_rgb(r, g, b)) + Ok(Rgb8::new(r, g, b).with_a(255)) } else if raw.to_ascii_lowercase().starts_with("rgba(") && raw.ends_with(')') { let inner = &raw[5..raw.len() - 1]; let parts: Vec<&str> = inner.split(',').collect(); @@ -332,7 +443,7 @@ impl FromStr for ColorU8 { let g = parse_component_0_255(parts[1])?; let b = parse_component_0_255(parts[2])?; let a = parse_alpha(parts[3])?; - Ok(ColorU8::from_rgba(r, g, b, a)) + Ok(Rgba8::new(r, g, b, a)) } // named color else { @@ -347,6 +458,265 @@ impl FromStr for ColorU8 { } } +/// Non-linear sRGB color with f32 RGB components in the range [0.0, 1.0]. +/// This is the same colorspace as Rgb8 but represented as f32. +#[derive(Debug, Clone, Copy, PartialEq)] +pub struct SRgb(f32, f32, f32); + +impl SRgb { + /// Create a Srgb from the 3 components, already in the sRGB colorspace, in the range [0.0, 1.0]. + /// Returns None if any component is out of range. + pub const fn new(r: f32, g: f32, b: f32) -> Option { + if r >= 0.0 && r <= 1.0 && g >= 0.0 && g <= 1.0 && b >= 0.0 && b <= 1.0 { + Some(Self(r, g, b)) + } else { + None + } + } + + /// Get the red component of the color. + pub const fn r(&self) -> f32 { + self.0 + } + + /// Get the green component of the color. + pub const fn g(&self) -> f32 { + self.1 + } + + /// Get the blue component of the color. + pub const fn b(&self) -> f32 { + self.2 + } + + /// Compute the relative luminance of the color, in linear RGB space. + pub fn luminance(&self) -> f32 { + let lin: LinRgb = (*self).into(); + lin.luminance() + } +} + +// It is checked that the components of the color are valid, so we can safely implement Eq. +impl Eq for SRgb {} + +/// A linear RGB color with f32 components in the range [0.0, 1.0]. +/// This is a linear colorspace where the components are proportional to the actual light intensity. +#[derive(Debug, Clone, Copy, PartialEq)] +pub struct LinRgb(f32, f32, f32); + +impl LinRgb { + /// Create a LinRgb from the 3 components, already in the linear RGB colorspace, in the range [0.0, 1.0]. + /// Returns None if any component is out of range. + pub const fn new(r: f32, g: f32, b: f32) -> Option { + if r >= 0.0 && r <= 1.0 && g >= 0.0 && g <= 1.0 && b >= 0.0 && b <= 1.0 { + Some(Self(r, g, b)) + } else { + None + } + } + + /// Get the red component of the color. + pub const fn r(&self) -> f32 { + self.0 + } + + /// Get the green component of the color. + pub const fn g(&self) -> f32 { + self.1 + } + + /// Get the blue component of the color. + pub const fn b(&self) -> f32 { + self.2 + } + + /// Compute the relative luminance of the color, in linear RGB space. + pub const fn luminance(&self) -> f32 { + 0.2126 * self.0 + 0.7152 * self.1 + 0.0722 * self.2 + } + + /// Interpolate between two linear RGB colors using a parameter t in the range [0.0, 1.0]. + pub const fn lerp(self, other: Self, t: f32) -> Self { + debug_assert!(t >= 0.0 && t <= 1.0, "t must be in the range [0.0, 1.0]"); + let r = self.0 * (1.0 - t) + other.0 * t; + let g = self.1 * (1.0 - t) + other.1 * t; + let b = self.2 * (1.0 - t) + other.2 * t; + Self(r, g, b) + } +} + +// It is checked that the components of the color are valid, so we can safely implement Eq. +impl Eq for LinRgb {} + +/// A perceptually uniform color space based on the OkLab model, with f32 components. +/// Very useful for interpolation of colors, as it produces much smoother gradients than sRGB or linear RGB. +#[derive(Debug, Clone, Copy, PartialEq)] +pub struct OkLab(f32, f32, f32); + +impl OkLab { + /// Create a OkLab from the 3 components, already in the OkLab colorspace. + /// Returns None if it can't be mapped to a valid linear RGB color. + pub fn new(l: f32, a: f32, b: f32) -> Option { + let lin: LinRgb = LinRgb::from(Self(l, a, b)); + if LinRgb::new(lin.0, lin.1, lin.2).is_none() { + return None; + } + + Some(Self(l, a, b)) + } + + /// Get the L component of the color. + pub const fn l(&self) -> f32 { + self.0 + } + + /// Get the a component of the color. + pub const fn a(&self) -> f32 { + self.1 + } + + /// Get the b component of the color. + pub const fn b(&self) -> f32 { + self.2 + } + + /// Interpolate between two OkLab colors using a parameter t in the range [0.0, 1.0]. + pub const fn lerp(self, other: Self, t: f32) -> Self { + debug_assert!(t >= 0.0 && t <= 1.0, "t must be in the range [0.0, 1.0]"); + let r = self.0 * (1.0 - t) + other.0 * t; + let g = self.1 * (1.0 - t) + other.1 * t; + let b = self.2 * (1.0 - t) + other.2 * t; + Self(r, g, b) + } +} + +// It is checked that the components of the color are valid, so we can safely implement Eq. +impl Eq for OkLab {} + +impl From for Rgb8 { + fn from(srgb: SRgb) -> Self { + let r = (srgb.0 * 255.0).round() as u8; + let g = (srgb.1 * 255.0).round() as u8; + let b = (srgb.2 * 255.0).round() as u8; + Self(r, g, b) + } +} + +impl From for SRgb { + fn from(rgb: Rgb8) -> Self { + let r = rgb.0 as f32 / 255.0; + let g = rgb.1 as f32 / 255.0; + let b = rgb.2 as f32 / 255.0; + Self(r, g, b) + } +} + +impl From for LinRgb { + fn from(srgb: SRgb) -> Self { + fn comp(c: f32) -> f32 { + if c >= 0.04045 { + ((c + 0.055) / 1.055).powf(2.4) + } else { + c / 12.92 + } + } + + Self(comp(srgb.0), comp(srgb.1), comp(srgb.2)) + } +} + +impl From for SRgb { + fn from(linrgb: LinRgb) -> Self { + fn comp(c: f32) -> f32 { + if c >= 0.0031308 { + 1.055 * c.powf(1.0 / 2.4) - 0.055 + } else { + 12.92 * c + } + } + + Self(comp(linrgb.0), comp(linrgb.1), comp(linrgb.2)) + } +} + +impl From for OkLab { + fn from(linrgb: LinRgb) -> Self { + let l = 0.4122214708 * linrgb.0 + 0.5363325363 * linrgb.1 + 0.0514459929 * linrgb.2; + let m = 0.2119034982 * linrgb.0 + 0.6806995451 * linrgb.1 + 0.1073969566 * linrgb.2; + let s = 0.0883024619 * linrgb.0 + 0.2817188376 * linrgb.1 + 0.6299787005 * linrgb.2; + + let l = l.cbrt(); + let m = m.cbrt(); + let s = s.cbrt(); + + Self( + 0.2104542553 * l + 0.7936177850 * m - 0.0040720468 * s, + 1.9779984951 * l - 2.4285922050 * m + 0.4505937099 * s, + 0.0259040371 * l + 0.7827717662 * m - 0.8086757660 * s, + ) + } +} + +impl From for LinRgb { + fn from(oklab: OkLab) -> Self { + let l = oklab.0 + 0.3963377774 * oklab.1 + 0.2158037573 * oklab.2; + let m = oklab.0 - 0.1055613458 * oklab.1 - 0.0638541728 * oklab.2; + let s = oklab.0 - 0.0894841775 * oklab.1 - 1.2914855480 * oklab.2; + + let l = l * l * l; + let m = m * m * m; + let s = s * s * s; + + Self( + 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, + -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, + -0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s, + ) + } +} + +impl From for LinRgb { + fn from(rgb: Rgb8) -> Self { + let srgb: SRgb = SRgb::from(rgb); + Self::from(srgb) + } +} + +impl From for OkLab { + fn from(rgb: Rgb8) -> Self { + let linrgb: LinRgb = LinRgb::from(rgb); + Self::from(linrgb) + } +} + +impl From for Rgb8 { + fn from(linrgb: LinRgb) -> Self { + let srgb: SRgb = SRgb::from(linrgb); + Self::from(srgb) + } +} + +impl From for Rgb8 { + fn from(oklab: OkLab) -> Self { + let linrgb: LinRgb = LinRgb::from(oklab); + Self::from(linrgb) + } +} + +impl From for OkLab { + fn from(srgb: SRgb) -> Self { + let linrgb: LinRgb = LinRgb::from(srgb); + Self::from(linrgb) + } +} + +impl From for SRgb { + fn from(oklab: OkLab) -> Self { + let linrgb: LinRgb = LinRgb::from(oklab); + Self::from(linrgb) + } +} + #[cfg(test)] mod tests { use super::*; @@ -354,77 +724,88 @@ mod tests { #[test] fn parse_html_hex() { // full and short hex - assert_eq!("#ff0000".parse::().unwrap(), RED); - assert_eq!("#f00".parse::().unwrap(), RED); + assert_eq!("#ff0000".parse::().unwrap(), RED); + assert_eq!("#f00".parse::().unwrap(), RED); // hex with alpha - let c = "#ff000080".parse::().unwrap(); - assert_eq!(c.rgba(), [255, 0, 0, 128]); + let c = "#ff000080".parse::().unwrap(); + assert_eq!(c.arr(), [255, 0, 0, 128]); } #[test] fn parse_css_rgb_rgba() { // integer rgb - assert_eq!("rgb(255,0,0)".parse::().unwrap(), RED); + assert_eq!("rgb(255,0,0)".parse::().unwrap(), RED); // percentage rgb assert_eq!( - "rgb(40.5%,0%,0%)".parse::().unwrap(), - ColorU8::from_rgb(103, 0, 0) + "rgb(40.5%,0%,0%)".parse::().unwrap(), + Rgb8::new(103, 0, 0) ); + // rgb with spaces + let c = "rgb(255, 0, 0)".parse::().unwrap(); + assert_eq!(c.arr(), [255, 0, 0]); + // rgba with float alpha - let c = "rgba(255,0,0,0.5)".parse::().unwrap(); - assert_eq!(c.rgba(), [255, 0, 0, 128]); + let c = "rgba(255,0,0,0.5)".parse::().unwrap(); + assert_eq!(c.arr(), [255, 0, 0, 128]); // rgba with percentage alpha - let c2 = "rgba(255,0,0,50%)".parse::().unwrap(); - assert_eq!(c2.rgba(), [255, 0, 0, 128]); + let c = "rgba(255,0,0,50%)".parse::().unwrap(); + assert_eq!(c.arr(), [255, 0, 0, 128]); // rgba with float alpha 0.0-1.0 - let c3 = "rgba(255, 0, 0, 0.5)".parse::().unwrap(); - assert_eq!(c3.rgba(), [255, 0, 0, 128]); + let c = "rgba(255, 0, 0, 0.5)".parse::().unwrap(); + assert_eq!(c.arr(), [255, 0, 0, 128]); } #[test] fn parse_named_colors() { // simple name - assert_eq!("red".parse::().unwrap(), RED); + assert_eq!("red".parse::().unwrap(), RED); // case-insensitive - assert_eq!("AliceBlue".parse::().unwrap(), ALICEBLUE); + assert_eq!("AliceBlue".parse::().unwrap(), ALICEBLUE); } #[test] fn parse_errors() { // empty assert!(matches!( - "".parse::(), + "".parse::(), Err(ParseError::InvalidFormat) )); // invalid hex length assert!(matches!( - "#12345".parse::(), + "#12345".parse::(), Err(ParseError::InvalidHex) )); // invalid rgb component (out of 0-255) assert!(matches!( - "rgb(300,0,0)".parse::(), + "rgb(300,0,0)".parse::(), Err(ParseError::InvalidComponent) )); // invalid rgba alpha (float > 1.0) assert!(matches!( - "rgba(255,0,0,2.0)".parse::(), + "rgba(255,0,0,2.0)".parse::(), Err(ParseError::InvalidAlphaComponent) )); // unknown name assert!(matches!( - "notacolor".parse::(), + "notacolor".parse::(), Err(ParseError::UnknownName) )); } + + #[test] + fn test_srgb_nan_fails() { + assert!(SRgb::new(f32::NAN, 0.0, 0.0).is_none()); + assert!(SRgb::new(0.0, f32::NAN, 0.0).is_none()); + assert!(SRgb::new(0.0, 0.0, f32::NAN).is_none()); + } } diff --git a/base/src/color/css4.rs b/base/src/color/css4.rs index c4b7072..d7552b0 100644 --- a/base/src/color/css4.rs +++ b/base/src/color/css4.rs @@ -1,313 +1,312 @@ -use super::ColorU8; +use super::Rgba8; +// standard CSS colors ///
-pub const TRANSPARENT: ColorU8 = ColorU8::from_rgba(0, 0, 0, 0); +pub const TRANSPARENT: Rgba8 = Rgba8::new(0, 0, 0, 0); -// standard CSS colors ///
-pub const BLACK: ColorU8 = ColorU8::from_html(b"#000000"); +pub const BLACK: Rgba8 = Rgba8::from_hex(b"#000000"); ///
-pub const SILVER: ColorU8 = ColorU8::from_html(b"#c0c0c0"); +pub const SILVER: Rgba8 = Rgba8::from_hex(b"#c0c0c0"); ///
-pub const GRAY: ColorU8 = ColorU8::from_html(b"#808080"); +pub const GRAY: Rgba8 = Rgba8::from_hex(b"#808080"); ///
-pub const WHITE: ColorU8 = ColorU8::from_html(b"#ffffff"); +pub const WHITE: Rgba8 = Rgba8::from_hex(b"#ffffff"); ///
-pub const MAROON: ColorU8 = ColorU8::from_html(b"#800000"); +pub const MAROON: Rgba8 = Rgba8::from_hex(b"#800000"); ///
-pub const RED: ColorU8 = ColorU8::from_html(b"#ff0000"); +pub const RED: Rgba8 = Rgba8::from_hex(b"#ff0000"); ///
-pub const PURPLE: ColorU8 = ColorU8::from_html(b"#800080"); +pub const PURPLE: Rgba8 = Rgba8::from_hex(b"#800080"); ///
-pub const FUCHSIA: ColorU8 = ColorU8::from_html(b"#ff00ff"); +pub const FUCHSIA: Rgba8 = Rgba8::from_hex(b"#ff00ff"); ///
-pub const GREEN: ColorU8 = ColorU8::from_html(b"#008000"); +pub const GREEN: Rgba8 = Rgba8::from_hex(b"#008000"); ///
-pub const LIME: ColorU8 = ColorU8::from_html(b"#00ff00"); +pub const LIME: Rgba8 = Rgba8::from_hex(b"#00ff00"); ///
-pub const OLIVE: ColorU8 = ColorU8::from_html(b"#808000"); +pub const OLIVE: Rgba8 = Rgba8::from_hex(b"#808000"); ///
-pub const YELLOW: ColorU8 = ColorU8::from_html(b"#ffff00"); +pub const YELLOW: Rgba8 = Rgba8::from_hex(b"#ffff00"); ///
-pub const NAVY: ColorU8 = ColorU8::from_html(b"#000080"); +pub const NAVY: Rgba8 = Rgba8::from_hex(b"#000080"); ///
-pub const BLUE: ColorU8 = ColorU8::from_html(b"#0000ff"); +pub const BLUE: Rgba8 = Rgba8::from_hex(b"#0000ff"); ///
-pub const TEAL: ColorU8 = ColorU8::from_html(b"#008080"); +pub const TEAL: Rgba8 = Rgba8::from_hex(b"#008080"); ///
-pub const AQUA: ColorU8 = ColorU8::from_html(b"#00ffff"); +pub const AQUA: Rgba8 = Rgba8::from_hex(b"#00ffff"); // other named colors ///
-pub const ALICEBLUE: ColorU8 = ColorU8::from_html(b"#f0f8ff"); +pub const ALICEBLUE: Rgba8 = Rgba8::from_hex(b"#f0f8ff"); ///
-pub const ANTIQUEWHITE: ColorU8 = ColorU8::from_html(b"#faebd7"); +pub const ANTIQUEWHITE: Rgba8 = Rgba8::from_hex(b"#faebd7"); ///
-pub const AQUAMARINE: ColorU8 = ColorU8::from_html(b"#7fffd4"); +pub const AQUAMARINE: Rgba8 = Rgba8::from_hex(b"#7fffd4"); ///
-pub const AZURE: ColorU8 = ColorU8::from_html(b"#f0ffff"); +pub const AZURE: Rgba8 = Rgba8::from_hex(b"#f0ffff"); ///
-pub const BEIGE: ColorU8 = ColorU8::from_html(b"#f5f5dc"); +pub const BEIGE: Rgba8 = Rgba8::from_hex(b"#f5f5dc"); ///
-pub const BISQUE: ColorU8 = ColorU8::from_html(b"#ffe4c4"); +pub const BISQUE: Rgba8 = Rgba8::from_hex(b"#ffe4c4"); ///
-pub const BLANCHEDALMOND: ColorU8 = ColorU8::from_html(b"#ffebcd"); +pub const BLANCHEDALMOND: Rgba8 = Rgba8::from_hex(b"#ffebcd"); ///
-pub const BLUEVIOLET: ColorU8 = ColorU8::from_html(b"#8a2be2"); +pub const BLUEVIOLET: Rgba8 = Rgba8::from_hex(b"#8a2be2"); ///
-pub const BROWN: ColorU8 = ColorU8::from_html(b"#a52a2a"); +pub const BROWN: Rgba8 = Rgba8::from_hex(b"#a52a2a"); ///
-pub const BURLYWOOD: ColorU8 = ColorU8::from_html(b"#deb887"); +pub const BURLYWOOD: Rgba8 = Rgba8::from_hex(b"#deb887"); ///
-pub const CADETBLUE: ColorU8 = ColorU8::from_html(b"#5f9ea0"); +pub const CADETBLUE: Rgba8 = Rgba8::from_hex(b"#5f9ea0"); ///
-pub const CHARTREUSE: ColorU8 = ColorU8::from_html(b"#7fff00"); +pub const CHARTREUSE: Rgba8 = Rgba8::from_hex(b"#7fff00"); ///
-pub const CHOCOLATE: ColorU8 = ColorU8::from_html(b"#d2691e"); +pub const CHOCOLATE: Rgba8 = Rgba8::from_hex(b"#d2691e"); ///
-pub const CORAL: ColorU8 = ColorU8::from_html(b"#ff7f50"); +pub const CORAL: Rgba8 = Rgba8::from_hex(b"#ff7f50"); ///
-pub const CORNFLOWERBLUE: ColorU8 = ColorU8::from_html(b"#6495ed"); +pub const CORNFLOWERBLUE: Rgba8 = Rgba8::from_hex(b"#6495ed"); ///
-pub const CORNSILK: ColorU8 = ColorU8::from_html(b"#fff8dc"); +pub const CORNSILK: Rgba8 = Rgba8::from_hex(b"#fff8dc"); ///
-pub const CRIMSON: ColorU8 = ColorU8::from_html(b"#dc143c"); +pub const CRIMSON: Rgba8 = Rgba8::from_hex(b"#dc143c"); ///
-pub const CYAN: ColorU8 = AQUA; +pub const CYAN: Rgba8 = AQUA; ///
-pub const DARKBLUE: ColorU8 = ColorU8::from_html(b"#00008b"); +pub const DARKBLUE: Rgba8 = Rgba8::from_hex(b"#00008b"); ///
-pub const DARKCYAN: ColorU8 = ColorU8::from_html(b"#008b8b"); +pub const DARKCYAN: Rgba8 = Rgba8::from_hex(b"#008b8b"); ///
-pub const DARKGOLDENROD: ColorU8 = ColorU8::from_html(b"#b8860b"); +pub const DARKGOLDENROD: Rgba8 = Rgba8::from_hex(b"#b8860b"); ///
-pub const DARKGRAY: ColorU8 = ColorU8::from_html(b"#a9a9a9"); +pub const DARKGRAY: Rgba8 = Rgba8::from_hex(b"#a9a9a9"); ///
-pub const DARKGREEN: ColorU8 = ColorU8::from_html(b"#006400"); +pub const DARKGREEN: Rgba8 = Rgba8::from_hex(b"#006400"); ///
-pub const DARKGREY: ColorU8 = ColorU8::from_html(b"#a9a9a9"); +pub const DARKGREY: Rgba8 = Rgba8::from_hex(b"#a9a9a9"); ///
-pub const DARKKHAKI: ColorU8 = ColorU8::from_html(b"#bdb76b"); +pub const DARKKHAKI: Rgba8 = Rgba8::from_hex(b"#bdb76b"); ///
-pub const DARKMAGENTA: ColorU8 = ColorU8::from_html(b"#8b008b"); +pub const DARKMAGENTA: Rgba8 = Rgba8::from_hex(b"#8b008b"); ///
-pub const DARKOLIVEGREEN: ColorU8 = ColorU8::from_html(b"#556b2f"); +pub const DARKOLIVEGREEN: Rgba8 = Rgba8::from_hex(b"#556b2f"); ///
-pub const DARKORANGE: ColorU8 = ColorU8::from_html(b"#ff8c00"); +pub const DARKORANGE: Rgba8 = Rgba8::from_hex(b"#ff8c00"); ///
-pub const DARKORCHID: ColorU8 = ColorU8::from_html(b"#9932cc"); +pub const DARKORCHID: Rgba8 = Rgba8::from_hex(b"#9932cc"); ///
-pub const DARKRED: ColorU8 = ColorU8::from_html(b"#8b0000"); +pub const DARKRED: Rgba8 = Rgba8::from_hex(b"#8b0000"); ///
-pub const DARKSALMON: ColorU8 = ColorU8::from_html(b"#e9967a"); +pub const DARKSALMON: Rgba8 = Rgba8::from_hex(b"#e9967a"); ///
-pub const DARKSEAGREEN: ColorU8 = ColorU8::from_html(b"#8fbc8f"); +pub const DARKSEAGREEN: Rgba8 = Rgba8::from_hex(b"#8fbc8f"); ///
-pub const DARKSLATEBLUE: ColorU8 = ColorU8::from_html(b"#483d8b"); +pub const DARKSLATEBLUE: Rgba8 = Rgba8::from_hex(b"#483d8b"); ///
-pub const DARKSLATEGRAY: ColorU8 = ColorU8::from_html(b"#2f4f4f"); +pub const DARKSLATEGRAY: Rgba8 = Rgba8::from_hex(b"#2f4f4f"); ///
-pub const DARKSLATEGREY: ColorU8 = ColorU8::from_html(b"#2f4f4f"); +pub const DARKSLATEGREY: Rgba8 = Rgba8::from_hex(b"#2f4f4f"); ///
-pub const DARKTURQUOISE: ColorU8 = ColorU8::from_html(b"#00ced1"); +pub const DARKTURQUOISE: Rgba8 = Rgba8::from_hex(b"#00ced1"); ///
-pub const DARKVIOLET: ColorU8 = ColorU8::from_html(b"#9400d3"); +pub const DARKVIOLET: Rgba8 = Rgba8::from_hex(b"#9400d3"); ///
-pub const DEEPPINK: ColorU8 = ColorU8::from_html(b"#ff1493"); +pub const DEEPPINK: Rgba8 = Rgba8::from_hex(b"#ff1493"); ///
-pub const DEEPSKYBLUE: ColorU8 = ColorU8::from_html(b"#00bfff"); +pub const DEEPSKYBLUE: Rgba8 = Rgba8::from_hex(b"#00bfff"); ///
-pub const DIMGRAY: ColorU8 = ColorU8::from_html(b"#696969"); +pub const DIMGRAY: Rgba8 = Rgba8::from_hex(b"#696969"); ///
-pub const DIMGREY: ColorU8 = ColorU8::from_html(b"#696969"); +pub const DIMGREY: Rgba8 = Rgba8::from_hex(b"#696969"); ///
-pub const DODGERBLUE: ColorU8 = ColorU8::from_html(b"#1e90ff"); +pub const DODGERBLUE: Rgba8 = Rgba8::from_hex(b"#1e90ff"); ///
-pub const FIREBRICK: ColorU8 = ColorU8::from_html(b"#b22222"); +pub const FIREBRICK: Rgba8 = Rgba8::from_hex(b"#b22222"); ///
-pub const FLORALWHITE: ColorU8 = ColorU8::from_html(b"#fffaf0"); +pub const FLORALWHITE: Rgba8 = Rgba8::from_hex(b"#fffaf0"); ///
-pub const FORESTGREEN: ColorU8 = ColorU8::from_html(b"#228b22"); +pub const FORESTGREEN: Rgba8 = Rgba8::from_hex(b"#228b22"); ///
-pub const GAINSBORO: ColorU8 = ColorU8::from_html(b"#dcdcdc"); +pub const GAINSBORO: Rgba8 = Rgba8::from_hex(b"#dcdcdc"); ///
-pub const GHOSTWHITE: ColorU8 = ColorU8::from_html(b"#f8f8ff"); +pub const GHOSTWHITE: Rgba8 = Rgba8::from_hex(b"#f8f8ff"); ///
-pub const GOLD: ColorU8 = ColorU8::from_html(b"#ffd700"); +pub const GOLD: Rgba8 = Rgba8::from_hex(b"#ffd700"); ///
-pub const GOLDENROD: ColorU8 = ColorU8::from_html(b"#daa520"); +pub const GOLDENROD: Rgba8 = Rgba8::from_hex(b"#daa520"); ///
-pub const GREENYELLOW: ColorU8 = ColorU8::from_html(b"#adff2f"); +pub const GREENYELLOW: Rgba8 = Rgba8::from_hex(b"#adff2f"); ///
-pub const GREY: ColorU8 = GRAY; +pub const GREY: Rgba8 = GRAY; ///
-pub const HONEYDEW: ColorU8 = ColorU8::from_html(b"#f0fff0"); +pub const HONEYDEW: Rgba8 = Rgba8::from_hex(b"#f0fff0"); ///
-pub const HOTPINK: ColorU8 = ColorU8::from_html(b"#ff69b4"); +pub const HOTPINK: Rgba8 = Rgba8::from_hex(b"#ff69b4"); ///
-pub const INDIANRED: ColorU8 = ColorU8::from_html(b"#cd5c5c"); +pub const INDIANRED: Rgba8 = Rgba8::from_hex(b"#cd5c5c"); ///
-pub const INDIGO: ColorU8 = ColorU8::from_html(b"#4b0082"); +pub const INDIGO: Rgba8 = Rgba8::from_hex(b"#4b0082"); ///
-pub const IVORY: ColorU8 = ColorU8::from_html(b"#fffff0"); +pub const IVORY: Rgba8 = Rgba8::from_hex(b"#fffff0"); ///
-pub const KHAKI: ColorU8 = ColorU8::from_html(b"#f0e68c"); +pub const KHAKI: Rgba8 = Rgba8::from_hex(b"#f0e68c"); ///
-pub const LAVENDER: ColorU8 = ColorU8::from_html(b"#e6e6fa"); +pub const LAVENDER: Rgba8 = Rgba8::from_hex(b"#e6e6fa"); ///
-pub const LAVENDERBLUSH: ColorU8 = ColorU8::from_html(b"#fff0f5"); +pub const LAVENDERBLUSH: Rgba8 = Rgba8::from_hex(b"#fff0f5"); ///
-pub const LAWNGREEN: ColorU8 = ColorU8::from_html(b"#7cfc00"); +pub const LAWNGREEN: Rgba8 = Rgba8::from_hex(b"#7cfc00"); ///
-pub const LEMONCHIFFON: ColorU8 = ColorU8::from_html(b"#fffacd"); +pub const LEMONCHIFFON: Rgba8 = Rgba8::from_hex(b"#fffacd"); ///
-pub const LIGHTBLUE: ColorU8 = ColorU8::from_html(b"#add8e6"); +pub const LIGHTBLUE: Rgba8 = Rgba8::from_hex(b"#add8e6"); ///
-pub const LIGHTCORAL: ColorU8 = ColorU8::from_html(b"#f08080"); +pub const LIGHTCORAL: Rgba8 = Rgba8::from_hex(b"#f08080"); ///
-pub const LIGHTCYAN: ColorU8 = ColorU8::from_html(b"#e0ffff"); +pub const LIGHTCYAN: Rgba8 = Rgba8::from_hex(b"#e0ffff"); ///
-pub const LIGHTGOLDENRODYELLOW: ColorU8 = ColorU8::from_html(b"#fafad2"); +pub const LIGHTGOLDENRODYELLOW: Rgba8 = Rgba8::from_hex(b"#fafad2"); ///
-pub const LIGHTGRAY: ColorU8 = ColorU8::from_html(b"#d3d3d3"); +pub const LIGHTGRAY: Rgba8 = Rgba8::from_hex(b"#d3d3d3"); ///
-pub const LIGHTGREEN: ColorU8 = ColorU8::from_html(b"#90ee90"); +pub const LIGHTGREEN: Rgba8 = Rgba8::from_hex(b"#90ee90"); ///
-pub const LIGHTGREY: ColorU8 = ColorU8::from_html(b"#d3d3d3"); +pub const LIGHTGREY: Rgba8 = Rgba8::from_hex(b"#d3d3d3"); ///
-pub const LIGHTPINK: ColorU8 = ColorU8::from_html(b"#ffb6c1"); +pub const LIGHTPINK: Rgba8 = Rgba8::from_hex(b"#ffb6c1"); ///
-pub const LIGHTSALMON: ColorU8 = ColorU8::from_html(b"#ffa07a"); +pub const LIGHTSALMON: Rgba8 = Rgba8::from_hex(b"#ffa07a"); ///
-pub const LIGHTSEAGREEN: ColorU8 = ColorU8::from_html(b"#20b2aa"); +pub const LIGHTSEAGREEN: Rgba8 = Rgba8::from_hex(b"#20b2aa"); ///
-pub const LIGHTSKYBLUE: ColorU8 = ColorU8::from_html(b"#87cefa"); +pub const LIGHTSKYBLUE: Rgba8 = Rgba8::from_hex(b"#87cefa"); ///
-pub const LIGHTSLATEGRAY: ColorU8 = ColorU8::from_html(b"#778899"); +pub const LIGHTSLATEGRAY: Rgba8 = Rgba8::from_hex(b"#778899"); ///
-pub const LIGHTSLATEGREY: ColorU8 = ColorU8::from_html(b"#778899"); +pub const LIGHTSLATEGREY: Rgba8 = Rgba8::from_hex(b"#778899"); ///
-pub const LIGHTSTEELBLUE: ColorU8 = ColorU8::from_html(b"#b0c4de"); +pub const LIGHTSTEELBLUE: Rgba8 = Rgba8::from_hex(b"#b0c4de"); ///
-pub const LIGHTYELLOW: ColorU8 = ColorU8::from_html(b"#ffffe0"); +pub const LIGHTYELLOW: Rgba8 = Rgba8::from_hex(b"#ffffe0"); ///
-pub const LIMEGREEN: ColorU8 = ColorU8::from_html(b"#32cd32"); +pub const LIMEGREEN: Rgba8 = Rgba8::from_hex(b"#32cd32"); ///
-pub const LINEN: ColorU8 = ColorU8::from_html(b"#faf0e6"); +pub const LINEN: Rgba8 = Rgba8::from_hex(b"#faf0e6"); ///
-pub const MAGENTA: ColorU8 = FUCHSIA; +pub const MAGENTA: Rgba8 = FUCHSIA; ///
-pub const MEDIUMAQUAMARINE: ColorU8 = ColorU8::from_html(b"#66cdaa"); +pub const MEDIUMAQUAMARINE: Rgba8 = Rgba8::from_hex(b"#66cdaa"); ///
-pub const MEDIUMBLUE: ColorU8 = ColorU8::from_html(b"#0000cd"); +pub const MEDIUMBLUE: Rgba8 = Rgba8::from_hex(b"#0000cd"); ///
-pub const MEDIUMORCHID: ColorU8 = ColorU8::from_html(b"#ba55d3"); +pub const MEDIUMORCHID: Rgba8 = Rgba8::from_hex(b"#ba55d3"); ///
-pub const MEDIUMPURPLE: ColorU8 = ColorU8::from_html(b"#9370db"); +pub const MEDIUMPURPLE: Rgba8 = Rgba8::from_hex(b"#9370db"); ///
-pub const MEDIUMSEAGREEN: ColorU8 = ColorU8::from_html(b"#3cb371"); +pub const MEDIUMSEAGREEN: Rgba8 = Rgba8::from_hex(b"#3cb371"); ///
-pub const MEDIUMSLATEBLUE: ColorU8 = ColorU8::from_html(b"#7b68ee"); +pub const MEDIUMSLATEBLUE: Rgba8 = Rgba8::from_hex(b"#7b68ee"); ///
-pub const MEDIUMSPRINGGREEN: ColorU8 = ColorU8::from_html(b"#00fa9a"); +pub const MEDIUMSPRINGGREEN: Rgba8 = Rgba8::from_hex(b"#00fa9a"); ///
-pub const MEDIUMTURQUOISE: ColorU8 = ColorU8::from_html(b"#48d1cc"); +pub const MEDIUMTURQUOISE: Rgba8 = Rgba8::from_hex(b"#48d1cc"); ///
-pub const MEDIUMVIOLETRED: ColorU8 = ColorU8::from_html(b"#c71585"); +pub const MEDIUMVIOLETRED: Rgba8 = Rgba8::from_hex(b"#c71585"); ///
-pub const MIDNIGHTBLUE: ColorU8 = ColorU8::from_html(b"#191970"); +pub const MIDNIGHTBLUE: Rgba8 = Rgba8::from_hex(b"#191970"); ///
-pub const MINTCREAM: ColorU8 = ColorU8::from_html(b"#f5fffa"); +pub const MINTCREAM: Rgba8 = Rgba8::from_hex(b"#f5fffa"); ///
-pub const MISTYROSE: ColorU8 = ColorU8::from_html(b"#ffe4e1"); +pub const MISTYROSE: Rgba8 = Rgba8::from_hex(b"#ffe4e1"); ///
-pub const MOCCASIN: ColorU8 = ColorU8::from_html(b"#ffe4b5"); +pub const MOCCASIN: Rgba8 = Rgba8::from_hex(b"#ffe4b5"); ///
-pub const NAVAJOWHITE: ColorU8 = ColorU8::from_html(b"#ffdead"); +pub const NAVAJOWHITE: Rgba8 = Rgba8::from_hex(b"#ffdead"); ///
-pub const OLDLACE: ColorU8 = ColorU8::from_html(b"#fdf5e6"); +pub const OLDLACE: Rgba8 = Rgba8::from_hex(b"#fdf5e6"); ///
-pub const OLIVEDRAB: ColorU8 = ColorU8::from_html(b"#6b8e23"); +pub const OLIVEDRAB: Rgba8 = Rgba8::from_hex(b"#6b8e23"); ///
-pub const ORANGE: ColorU8 = ColorU8::from_html(b"#ffa500"); +pub const ORANGE: Rgba8 = Rgba8::from_hex(b"#ffa500"); ///
-pub const ORANGERED: ColorU8 = ColorU8::from_html(b"#ff4500"); +pub const ORANGERED: Rgba8 = Rgba8::from_hex(b"#ff4500"); ///
-pub const ORCHID: ColorU8 = ColorU8::from_html(b"#da70d6"); +pub const ORCHID: Rgba8 = Rgba8::from_hex(b"#da70d6"); ///
-pub const PALEGOLDENROD: ColorU8 = ColorU8::from_html(b"#eee8aa"); +pub const PALEGOLDENROD: Rgba8 = Rgba8::from_hex(b"#eee8aa"); ///
-pub const PALEGREEN: ColorU8 = ColorU8::from_html(b"#98fb98"); +pub const PALEGREEN: Rgba8 = Rgba8::from_hex(b"#98fb98"); ///
-pub const PALETURQUOISE: ColorU8 = ColorU8::from_html(b"#afeeee"); +pub const PALETURQUOISE: Rgba8 = Rgba8::from_hex(b"#afeeee"); ///
-pub const PALEVIOLETRED: ColorU8 = ColorU8::from_html(b"#db7093"); +pub const PALEVIOLETRED: Rgba8 = Rgba8::from_hex(b"#db7093"); ///
-pub const PAPAYAWHIP: ColorU8 = ColorU8::from_html(b"#ffefd5"); +pub const PAPAYAWHIP: Rgba8 = Rgba8::from_hex(b"#ffefd5"); ///
-pub const PEACHPUFF: ColorU8 = ColorU8::from_html(b"#ffdab9"); +pub const PEACHPUFF: Rgba8 = Rgba8::from_hex(b"#ffdab9"); ///
-pub const PERU: ColorU8 = ColorU8::from_html(b"#cd853f"); +pub const PERU: Rgba8 = Rgba8::from_hex(b"#cd853f"); ///
-pub const PINK: ColorU8 = ColorU8::from_html(b"#ffc0cb"); +pub const PINK: Rgba8 = Rgba8::from_hex(b"#ffc0cb"); ///
-pub const PLUM: ColorU8 = ColorU8::from_html(b"#dda0dd"); +pub const PLUM: Rgba8 = Rgba8::from_hex(b"#dda0dd"); ///
-pub const POWDERBLUE: ColorU8 = ColorU8::from_html(b"#b0e0e6"); +pub const POWDERBLUE: Rgba8 = Rgba8::from_hex(b"#b0e0e6"); ///
-pub const REBECCAPURPLE: ColorU8 = ColorU8::from_html(b"#663399"); +pub const REBECCAPURPLE: Rgba8 = Rgba8::from_hex(b"#663399"); ///
-pub const ROSYBROWN: ColorU8 = ColorU8::from_html(b"#bc8f8f"); +pub const ROSYBROWN: Rgba8 = Rgba8::from_hex(b"#bc8f8f"); ///
-pub const ROYALBLUE: ColorU8 = ColorU8::from_html(b"#4169e1"); +pub const ROYALBLUE: Rgba8 = Rgba8::from_hex(b"#4169e1"); ///
-pub const SADDLEBROWN: ColorU8 = ColorU8::from_html(b"#8b4513"); +pub const SADDLEBROWN: Rgba8 = Rgba8::from_hex(b"#8b4513"); ///
-pub const SALMON: ColorU8 = ColorU8::from_html(b"#fa8072"); +pub const SALMON: Rgba8 = Rgba8::from_hex(b"#fa8072"); ///
-pub const SANDYBROWN: ColorU8 = ColorU8::from_html(b"#f4a460"); +pub const SANDYBROWN: Rgba8 = Rgba8::from_hex(b"#f4a460"); ///
-pub const SEAGREEN: ColorU8 = ColorU8::from_html(b"#2e8b57"); +pub const SEAGREEN: Rgba8 = Rgba8::from_hex(b"#2e8b57"); ///
-pub const SEASHELL: ColorU8 = ColorU8::from_html(b"#fff5ee"); +pub const SEASHELL: Rgba8 = Rgba8::from_hex(b"#fff5ee"); ///
-pub const SIENNA: ColorU8 = ColorU8::from_html(b"#a0522d"); +pub const SIENNA: Rgba8 = Rgba8::from_hex(b"#a0522d"); ///
-pub const SKYBLUE: ColorU8 = ColorU8::from_html(b"#87ceeb"); +pub const SKYBLUE: Rgba8 = Rgba8::from_hex(b"#87ceeb"); ///
-pub const SLATEBLUE: ColorU8 = ColorU8::from_html(b"#6a5acd"); +pub const SLATEBLUE: Rgba8 = Rgba8::from_hex(b"#6a5acd"); ///
-pub const SLATEGRAY: ColorU8 = ColorU8::from_html(b"#708090"); +pub const SLATEGRAY: Rgba8 = Rgba8::from_hex(b"#708090"); ///
-pub const SLATEGREY: ColorU8 = ColorU8::from_html(b"#708090"); +pub const SLATEGREY: Rgba8 = Rgba8::from_hex(b"#708090"); ///
-pub const SNOW: ColorU8 = ColorU8::from_html(b"#fffafa"); +pub const SNOW: Rgba8 = Rgba8::from_hex(b"#fffafa"); ///
-pub const SPRINGGREEN: ColorU8 = ColorU8::from_html(b"#00ff7f"); +pub const SPRINGGREEN: Rgba8 = Rgba8::from_hex(b"#00ff7f"); ///
-pub const STEELBLUE: ColorU8 = ColorU8::from_html(b"#4682b4"); +pub const STEELBLUE: Rgba8 = Rgba8::from_hex(b"#4682b4"); ///
-pub const TAN: ColorU8 = ColorU8::from_html(b"#d2b48c"); +pub const TAN: Rgba8 = Rgba8::from_hex(b"#d2b48c"); ///
-pub const THISTLE: ColorU8 = ColorU8::from_html(b"#d8bfd8"); +pub const THISTLE: Rgba8 = Rgba8::from_hex(b"#d8bfd8"); ///
-pub const TOMATO: ColorU8 = ColorU8::from_html(b"#ff6347"); +pub const TOMATO: Rgba8 = Rgba8::from_hex(b"#ff6347"); ///
-pub const TURQUOISE: ColorU8 = ColorU8::from_html(b"#40e0d0"); +pub const TURQUOISE: Rgba8 = Rgba8::from_hex(b"#40e0d0"); ///
-pub const VIOLET: ColorU8 = ColorU8::from_html(b"#ee82ee"); +pub const VIOLET: Rgba8 = Rgba8::from_hex(b"#ee82ee"); ///
-pub const WHEAT: ColorU8 = ColorU8::from_html(b"#f5deb3"); +pub const WHEAT: Rgba8 = Rgba8::from_hex(b"#f5deb3"); ///
-pub const WHITESMOKE: ColorU8 = ColorU8::from_html(b"#f5f5f5"); +pub const WHITESMOKE: Rgba8 = Rgba8::from_hex(b"#f5f5f5"); ///
-pub const YELLOWGREEN: ColorU8 = ColorU8::from_html(b"#9acd32"); +pub const YELLOWGREEN: Rgba8 = Rgba8::from_hex(b"#9acd32"); /// Lookup a named color (case-insensitive). -/// Return Some(ColorU8) if the name is known -pub(super) fn lookup_name(name: &str) -> Option { +/// Return Some(Rgba8) if the name is known +pub(super) fn lookup_name(name: &str) -> Option { match name.trim().to_ascii_lowercase().as_str() { - "transparent" => Some(TRANSPARENT), "black" => Some(BLACK), "silver" => Some(SILVER), "gray" | "grey" => Some(GRAY), diff --git a/base/src/color/xkcd.rs b/base/src/color/xkcd.rs index b5f7a34..db2270b 100644 --- a/base/src/color/xkcd.rs +++ b/base/src/color/xkcd.rs @@ -1,961 +1,961 @@ -use crate::ColorU8; +use super::Rgba8; /// Colors from the xkcd color survey. /// These are not intended to be used directly, but are available for users who want to use them. /// https://blog.xkcd.com/2010/05/03/color-survey-results/ -pub fn lookup_name(name: &str) -> Option { +pub fn lookup_name(name: &str) -> Option { // License: https://creativecommons.org/publicdomain/zero/1.0/ match name { - "cloudy blue" => Some(ColorU8::from_html(b"#acc2d9")), - "dark pastel green" => Some(ColorU8::from_html(b"#56ae57")), - "dust" => Some(ColorU8::from_html(b"#b2996e")), - "electric lime" => Some(ColorU8::from_html(b"#a8ff04")), - "fresh green" => Some(ColorU8::from_html(b"#69d84f")), - "light eggplant" => Some(ColorU8::from_html(b"#894585")), - "nasty green" => Some(ColorU8::from_html(b"#70b23f")), - "really light blue" => Some(ColorU8::from_html(b"#d4ffff")), - "tea" => Some(ColorU8::from_html(b"#65ab7c")), - "warm purple" => Some(ColorU8::from_html(b"#952e8f")), - "yellowish tan" => Some(ColorU8::from_html(b"#fcfc81")), - "cement" => Some(ColorU8::from_html(b"#a5a391")), - "dark grass green" => Some(ColorU8::from_html(b"#388004")), - "dusty teal" => Some(ColorU8::from_html(b"#4c9085")), - "grey teal" => Some(ColorU8::from_html(b"#5e9b8a")), - "macaroni and cheese" => Some(ColorU8::from_html(b"#efb435")), - "pinkish tan" => Some(ColorU8::from_html(b"#d99b82")), - "spruce" => Some(ColorU8::from_html(b"#0a5f38")), - "strong blue" => Some(ColorU8::from_html(b"#0c06f7")), - "toxic green" => Some(ColorU8::from_html(b"#61de2a")), - "windows blue" => Some(ColorU8::from_html(b"#3778bf")), - "blue blue" => Some(ColorU8::from_html(b"#2242c7")), - "blue with a hint of purple" => Some(ColorU8::from_html(b"#533cc6")), - "booger" => Some(ColorU8::from_html(b"#9bb53c")), - "bright sea green" => Some(ColorU8::from_html(b"#05ffa6")), - "dark green blue" => Some(ColorU8::from_html(b"#1f6357")), - "deep turquoise" => Some(ColorU8::from_html(b"#017374")), - "green teal" => Some(ColorU8::from_html(b"#0cb577")), - "strong pink" => Some(ColorU8::from_html(b"#ff0789")), - "bland" => Some(ColorU8::from_html(b"#afa88b")), - "deep aqua" => Some(ColorU8::from_html(b"#08787f")), - "lavender pink" => Some(ColorU8::from_html(b"#dd85d7")), - "light moss green" => Some(ColorU8::from_html(b"#a6c875")), - "light seafoam green" => Some(ColorU8::from_html(b"#a7ffb5")), - "olive yellow" => Some(ColorU8::from_html(b"#c2b709")), - "pig pink" => Some(ColorU8::from_html(b"#e78ea5")), - "deep lilac" => Some(ColorU8::from_html(b"#966ebd")), - "desert" => Some(ColorU8::from_html(b"#ccad60")), - "dusty lavender" => Some(ColorU8::from_html(b"#ac86a8")), - "purpley grey" => Some(ColorU8::from_html(b"#947e94")), - "purply" => Some(ColorU8::from_html(b"#983fb2")), - "candy pink" => Some(ColorU8::from_html(b"#ff63e9")), - "light pastel green" => Some(ColorU8::from_html(b"#b2fba5")), - "boring green" => Some(ColorU8::from_html(b"#63b365")), - "kiwi green" => Some(ColorU8::from_html(b"#8ee53f")), - "light grey green" => Some(ColorU8::from_html(b"#b7e1a1")), - "orange pink" => Some(ColorU8::from_html(b"#ff6f52")), - "tea green" => Some(ColorU8::from_html(b"#bdf8a3")), - "very light brown" => Some(ColorU8::from_html(b"#d3b683")), - "egg shell" => Some(ColorU8::from_html(b"#fffcc4")), - "eggplant purple" => Some(ColorU8::from_html(b"#430541")), - "powder pink" => Some(ColorU8::from_html(b"#ffb2d0")), - "reddish grey" => Some(ColorU8::from_html(b"#997570")), - "baby shit brown" => Some(ColorU8::from_html(b"#ad900d")), - "liliac" => Some(ColorU8::from_html(b"#c48efd")), - "stormy blue" => Some(ColorU8::from_html(b"#507b9c")), - "ugly brown" => Some(ColorU8::from_html(b"#7d7103")), - "custard" => Some(ColorU8::from_html(b"#fffd78")), - "darkish pink" => Some(ColorU8::from_html(b"#da467d")), - "deep brown" => Some(ColorU8::from_html(b"#410200")), - "greenish beige" => Some(ColorU8::from_html(b"#c9d179")), - "manilla" => Some(ColorU8::from_html(b"#fffa86")), - "off blue" => Some(ColorU8::from_html(b"#5684ae")), - "battleship grey" => Some(ColorU8::from_html(b"#6b7c85")), - "browny green" => Some(ColorU8::from_html(b"#6f6c0a")), - "bruise" => Some(ColorU8::from_html(b"#7e4071")), - "kelley green" => Some(ColorU8::from_html(b"#009337")), - "sickly yellow" => Some(ColorU8::from_html(b"#d0e429")), - "sunny yellow" => Some(ColorU8::from_html(b"#fff917")), - "azul" => Some(ColorU8::from_html(b"#1d5dec")), - "darkgreen" => Some(ColorU8::from_html(b"#054907")), - "green/yellow" => Some(ColorU8::from_html(b"#b5ce08")), - "lichen" => Some(ColorU8::from_html(b"#8fb67b")), - "light light green" => Some(ColorU8::from_html(b"#c8ffb0")), - "pale gold" => Some(ColorU8::from_html(b"#fdde6c")), - "sun yellow" => Some(ColorU8::from_html(b"#ffdf22")), - "tan green" => Some(ColorU8::from_html(b"#a9be70")), - "burple" => Some(ColorU8::from_html(b"#6832e3")), - "butterscotch" => Some(ColorU8::from_html(b"#fdb147")), - "toupe" => Some(ColorU8::from_html(b"#c7ac7d")), - "dark cream" => Some(ColorU8::from_html(b"#fff39a")), - "indian red" => Some(ColorU8::from_html(b"#850e04")), - "light lavendar" => Some(ColorU8::from_html(b"#efc0fe")), - "poison green" => Some(ColorU8::from_html(b"#40fd14")), - "baby puke green" => Some(ColorU8::from_html(b"#b6c406")), - "bright yellow green" => Some(ColorU8::from_html(b"#9dff00")), - "charcoal grey" => Some(ColorU8::from_html(b"#3c4142")), - "squash" => Some(ColorU8::from_html(b"#f2ab15")), - "cinnamon" => Some(ColorU8::from_html(b"#ac4f06")), - "light pea green" => Some(ColorU8::from_html(b"#c4fe82")), - "radioactive green" => Some(ColorU8::from_html(b"#2cfa1f")), - "raw sienna" => Some(ColorU8::from_html(b"#9a6200")), - "baby purple" => Some(ColorU8::from_html(b"#ca9bf7")), - "cocoa" => Some(ColorU8::from_html(b"#875f42")), - "light royal blue" => Some(ColorU8::from_html(b"#3a2efe")), - "orangeish" => Some(ColorU8::from_html(b"#fd8d49")), - "rust brown" => Some(ColorU8::from_html(b"#8b3103")), - "sand brown" => Some(ColorU8::from_html(b"#cba560")), - "swamp" => Some(ColorU8::from_html(b"#698339")), - "tealish green" => Some(ColorU8::from_html(b"#0cdc73")), - "burnt siena" => Some(ColorU8::from_html(b"#b75203")), - "camo" => Some(ColorU8::from_html(b"#7f8f4e")), - "dusk blue" => Some(ColorU8::from_html(b"#26538d")), - "fern" => Some(ColorU8::from_html(b"#63a950")), - "old rose" => Some(ColorU8::from_html(b"#c87f89")), - "pale light green" => Some(ColorU8::from_html(b"#b1fc99")), - "peachy pink" => Some(ColorU8::from_html(b"#ff9a8a")), - "rosy pink" => Some(ColorU8::from_html(b"#f6688e")), - "light bluish green" => Some(ColorU8::from_html(b"#76fda8")), - "light bright green" => Some(ColorU8::from_html(b"#53fe5c")), - "light neon green" => Some(ColorU8::from_html(b"#4efd54")), - "light seafoam" => Some(ColorU8::from_html(b"#a0febf")), - "tiffany blue" => Some(ColorU8::from_html(b"#7bf2da")), - "washed out green" => Some(ColorU8::from_html(b"#bcf5a6")), - "browny orange" => Some(ColorU8::from_html(b"#ca6b02")), - "nice blue" => Some(ColorU8::from_html(b"#107ab0")), - "sapphire" => Some(ColorU8::from_html(b"#2138ab")), - "greyish teal" => Some(ColorU8::from_html(b"#719f91")), - "orangey yellow" => Some(ColorU8::from_html(b"#fdb915")), - "parchment" => Some(ColorU8::from_html(b"#fefcaf")), - "straw" => Some(ColorU8::from_html(b"#fcf679")), - "very dark brown" => Some(ColorU8::from_html(b"#1d0200")), - "terracota" => Some(ColorU8::from_html(b"#cb6843")), - "ugly blue" => Some(ColorU8::from_html(b"#31668a")), - "clear blue" => Some(ColorU8::from_html(b"#247afd")), - "creme" => Some(ColorU8::from_html(b"#ffffb6")), - "foam green" => Some(ColorU8::from_html(b"#90fda9")), - "grey/green" => Some(ColorU8::from_html(b"#86a17d")), - "light gold" => Some(ColorU8::from_html(b"#fddc5c")), - "seafoam blue" => Some(ColorU8::from_html(b"#78d1b6")), - "topaz" => Some(ColorU8::from_html(b"#13bbaf")), - "violet pink" => Some(ColorU8::from_html(b"#fb5ffc")), - "wintergreen" => Some(ColorU8::from_html(b"#20f986")), - "yellow tan" => Some(ColorU8::from_html(b"#ffe36e")), - "dark fuchsia" => Some(ColorU8::from_html(b"#9d0759")), - "indigo blue" => Some(ColorU8::from_html(b"#3a18b1")), - "light yellowish green" => Some(ColorU8::from_html(b"#c2ff89")), - "pale magenta" => Some(ColorU8::from_html(b"#d767ad")), - "rich purple" => Some(ColorU8::from_html(b"#720058")), - "sunflower yellow" => Some(ColorU8::from_html(b"#ffda03")), - "green/blue" => Some(ColorU8::from_html(b"#01c08d")), - "leather" => Some(ColorU8::from_html(b"#ac7434")), - "racing green" => Some(ColorU8::from_html(b"#014600")), - "vivid purple" => Some(ColorU8::from_html(b"#9900fa")), - "dark royal blue" => Some(ColorU8::from_html(b"#02066f")), - "hazel" => Some(ColorU8::from_html(b"#8e7618")), - "muted pink" => Some(ColorU8::from_html(b"#d1768f")), - "booger green" => Some(ColorU8::from_html(b"#96b403")), - "canary" => Some(ColorU8::from_html(b"#fdff63")), - "cool grey" => Some(ColorU8::from_html(b"#95a3a6")), - "dark taupe" => Some(ColorU8::from_html(b"#7f684e")), - "darkish purple" => Some(ColorU8::from_html(b"#751973")), - "true green" => Some(ColorU8::from_html(b"#089404")), - "coral pink" => Some(ColorU8::from_html(b"#ff6163")), - "dark sage" => Some(ColorU8::from_html(b"#598556")), - "dark slate blue" => Some(ColorU8::from_html(b"#214761")), - "flat blue" => Some(ColorU8::from_html(b"#3c73a8")), - "mushroom" => Some(ColorU8::from_html(b"#ba9e88")), - "rich blue" => Some(ColorU8::from_html(b"#021bf9")), - "dirty purple" => Some(ColorU8::from_html(b"#734a65")), - "greenblue" => Some(ColorU8::from_html(b"#23c48b")), - "icky green" => Some(ColorU8::from_html(b"#8fae22")), - "light khaki" => Some(ColorU8::from_html(b"#e6f2a2")), - "warm blue" => Some(ColorU8::from_html(b"#4b57db")), - "dark hot pink" => Some(ColorU8::from_html(b"#d90166")), - "deep sea blue" => Some(ColorU8::from_html(b"#015482")), - "carmine" => Some(ColorU8::from_html(b"#9d0216")), - "dark yellow green" => Some(ColorU8::from_html(b"#728f02")), - "pale peach" => Some(ColorU8::from_html(b"#ffe5ad")), - "plum purple" => Some(ColorU8::from_html(b"#4e0550")), - "golden rod" => Some(ColorU8::from_html(b"#f9bc08")), - "neon red" => Some(ColorU8::from_html(b"#ff073a")), - "old pink" => Some(ColorU8::from_html(b"#c77986")), - "very pale blue" => Some(ColorU8::from_html(b"#d6fffe")), - "blood orange" => Some(ColorU8::from_html(b"#fe4b03")), - "grapefruit" => Some(ColorU8::from_html(b"#fd5956")), - "sand yellow" => Some(ColorU8::from_html(b"#fce166")), - "clay brown" => Some(ColorU8::from_html(b"#b2713d")), - "dark blue grey" => Some(ColorU8::from_html(b"#1f3b4d")), - "flat green" => Some(ColorU8::from_html(b"#699d4c")), - "light green blue" => Some(ColorU8::from_html(b"#56fca2")), - "warm pink" => Some(ColorU8::from_html(b"#fb5581")), - "dodger blue" => Some(ColorU8::from_html(b"#3e82fc")), - "gross green" => Some(ColorU8::from_html(b"#a0bf16")), - "ice" => Some(ColorU8::from_html(b"#d6fffa")), - "metallic blue" => Some(ColorU8::from_html(b"#4f738e")), - "pale salmon" => Some(ColorU8::from_html(b"#ffb19a")), - "sap green" => Some(ColorU8::from_html(b"#5c8b15")), - "algae" => Some(ColorU8::from_html(b"#54ac68")), - "bluey grey" => Some(ColorU8::from_html(b"#89a0b0")), - "greeny grey" => Some(ColorU8::from_html(b"#7ea07a")), - "highlighter green" => Some(ColorU8::from_html(b"#1bfc06")), - "light light blue" => Some(ColorU8::from_html(b"#cafffb")), - "light mint" => Some(ColorU8::from_html(b"#b6ffbb")), - "raw umber" => Some(ColorU8::from_html(b"#a75e09")), - "vivid blue" => Some(ColorU8::from_html(b"#152eff")), - "deep lavender" => Some(ColorU8::from_html(b"#8d5eb7")), - "dull teal" => Some(ColorU8::from_html(b"#5f9e8f")), - "light greenish blue" => Some(ColorU8::from_html(b"#63f7b4")), - "mud green" => Some(ColorU8::from_html(b"#606602")), - "pinky" => Some(ColorU8::from_html(b"#fc86aa")), - "red wine" => Some(ColorU8::from_html(b"#8c0034")), - "shit green" => Some(ColorU8::from_html(b"#758000")), - "tan brown" => Some(ColorU8::from_html(b"#ab7e4c")), - "darkblue" => Some(ColorU8::from_html(b"#030764")), - "rosa" => Some(ColorU8::from_html(b"#fe86a4")), - "lipstick" => Some(ColorU8::from_html(b"#d5174e")), - "pale mauve" => Some(ColorU8::from_html(b"#fed0fc")), - "claret" => Some(ColorU8::from_html(b"#680018")), - "dandelion" => Some(ColorU8::from_html(b"#fedf08")), - "orangered" => Some(ColorU8::from_html(b"#fe420f")), - "poop green" => Some(ColorU8::from_html(b"#6f7c00")), - "ruby" => Some(ColorU8::from_html(b"#ca0147")), - "dark" => Some(ColorU8::from_html(b"#1b2431")), - "greenish turquoise" => Some(ColorU8::from_html(b"#00fbb0")), - "pastel red" => Some(ColorU8::from_html(b"#db5856")), - "piss yellow" => Some(ColorU8::from_html(b"#ddd618")), - "bright cyan" => Some(ColorU8::from_html(b"#41fdfe")), - "dark coral" => Some(ColorU8::from_html(b"#cf524e")), - "algae green" => Some(ColorU8::from_html(b"#21c36f")), - "darkish red" => Some(ColorU8::from_html(b"#a90308")), - "reddy brown" => Some(ColorU8::from_html(b"#6e1005")), - "blush pink" => Some(ColorU8::from_html(b"#fe828c")), - "camouflage green" => Some(ColorU8::from_html(b"#4b6113")), - "lawn green" => Some(ColorU8::from_html(b"#4da409")), - "putty" => Some(ColorU8::from_html(b"#beae8a")), - "vibrant blue" => Some(ColorU8::from_html(b"#0339f8")), - "dark sand" => Some(ColorU8::from_html(b"#a88f59")), - "purple/blue" => Some(ColorU8::from_html(b"#5d21d0")), - "saffron" => Some(ColorU8::from_html(b"#feb209")), - "twilight" => Some(ColorU8::from_html(b"#4e518b")), - "warm brown" => Some(ColorU8::from_html(b"#964e02")), - "bluegrey" => Some(ColorU8::from_html(b"#85a3b2")), - "bubble gum pink" => Some(ColorU8::from_html(b"#ff69af")), - "duck egg blue" => Some(ColorU8::from_html(b"#c3fbf4")), - "greenish cyan" => Some(ColorU8::from_html(b"#2afeb7")), - "petrol" => Some(ColorU8::from_html(b"#005f6a")), - "royal" => Some(ColorU8::from_html(b"#0c1793")), - "butter" => Some(ColorU8::from_html(b"#ffff81")), - "dusty orange" => Some(ColorU8::from_html(b"#f0833a")), - "off yellow" => Some(ColorU8::from_html(b"#f1f33f")), - "pale olive green" => Some(ColorU8::from_html(b"#b1d27b")), - "orangish" => Some(ColorU8::from_html(b"#fc824a")), - "leaf" => Some(ColorU8::from_html(b"#71aa34")), - "light blue grey" => Some(ColorU8::from_html(b"#b7c9e2")), - "dried blood" => Some(ColorU8::from_html(b"#4b0101")), - "lightish purple" => Some(ColorU8::from_html(b"#a552e6")), - "rusty red" => Some(ColorU8::from_html(b"#af2f0d")), - "lavender blue" => Some(ColorU8::from_html(b"#8b88f8")), - "light grass green" => Some(ColorU8::from_html(b"#9af764")), - "light mint green" => Some(ColorU8::from_html(b"#a6fbb2")), - "sunflower" => Some(ColorU8::from_html(b"#ffc512")), - "velvet" => Some(ColorU8::from_html(b"#750851")), - "brick orange" => Some(ColorU8::from_html(b"#c14a09")), - "lightish red" => Some(ColorU8::from_html(b"#fe2f4a")), - "pure blue" => Some(ColorU8::from_html(b"#0203e2")), - "twilight blue" => Some(ColorU8::from_html(b"#0a437a")), - "violet red" => Some(ColorU8::from_html(b"#a50055")), - "yellowy brown" => Some(ColorU8::from_html(b"#ae8b0c")), - "carnation" => Some(ColorU8::from_html(b"#fd798f")), - "muddy yellow" => Some(ColorU8::from_html(b"#bfac05")), - "dark seafoam green" => Some(ColorU8::from_html(b"#3eaf76")), - "deep rose" => Some(ColorU8::from_html(b"#c74767")), - "dusty red" => Some(ColorU8::from_html(b"#b9484e")), - "grey/blue" => Some(ColorU8::from_html(b"#647d8e")), - "lemon lime" => Some(ColorU8::from_html(b"#bffe28")), - "purple/pink" => Some(ColorU8::from_html(b"#d725de")), - "brown yellow" => Some(ColorU8::from_html(b"#b29705")), - "purple brown" => Some(ColorU8::from_html(b"#673a3f")), - "wisteria" => Some(ColorU8::from_html(b"#a87dc2")), - "banana yellow" => Some(ColorU8::from_html(b"#fafe4b")), - "lipstick red" => Some(ColorU8::from_html(b"#c0022f")), - "water blue" => Some(ColorU8::from_html(b"#0e87cc")), - "brown grey" => Some(ColorU8::from_html(b"#8d8468")), - "vibrant purple" => Some(ColorU8::from_html(b"#ad03de")), - "baby green" => Some(ColorU8::from_html(b"#8cff9e")), - "barf green" => Some(ColorU8::from_html(b"#94ac02")), - "eggshell blue" => Some(ColorU8::from_html(b"#c4fff7")), - "sandy yellow" => Some(ColorU8::from_html(b"#fdee73")), - "cool green" => Some(ColorU8::from_html(b"#33b864")), - "pale" => Some(ColorU8::from_html(b"#fff9d0")), - "blue/grey" => Some(ColorU8::from_html(b"#758da3")), - "hot magenta" => Some(ColorU8::from_html(b"#f504c9")), - "greyblue" => Some(ColorU8::from_html(b"#77a1b5")), - "purpley" => Some(ColorU8::from_html(b"#8756e4")), - "baby shit green" => Some(ColorU8::from_html(b"#889717")), - "brownish pink" => Some(ColorU8::from_html(b"#c27e79")), - "dark aquamarine" => Some(ColorU8::from_html(b"#017371")), - "diarrhea" => Some(ColorU8::from_html(b"#9f8303")), - "light mustard" => Some(ColorU8::from_html(b"#f7d560")), - "pale sky blue" => Some(ColorU8::from_html(b"#bdf6fe")), - "turtle green" => Some(ColorU8::from_html(b"#75b84f")), - "bright olive" => Some(ColorU8::from_html(b"#9cbb04")), - "dark grey blue" => Some(ColorU8::from_html(b"#29465b")), - "greeny brown" => Some(ColorU8::from_html(b"#696006")), - "lemon green" => Some(ColorU8::from_html(b"#adf802")), - "light periwinkle" => Some(ColorU8::from_html(b"#c1c6fc")), - "seaweed green" => Some(ColorU8::from_html(b"#35ad6b")), - "sunshine yellow" => Some(ColorU8::from_html(b"#fffd37")), - "ugly purple" => Some(ColorU8::from_html(b"#a442a0")), - "medium pink" => Some(ColorU8::from_html(b"#f36196")), - "puke brown" => Some(ColorU8::from_html(b"#947706")), - "very light pink" => Some(ColorU8::from_html(b"#fff4f2")), - "viridian" => Some(ColorU8::from_html(b"#1e9167")), - "bile" => Some(ColorU8::from_html(b"#b5c306")), - "faded yellow" => Some(ColorU8::from_html(b"#feff7f")), - "very pale green" => Some(ColorU8::from_html(b"#cffdbc")), - "vibrant green" => Some(ColorU8::from_html(b"#0add08")), - "bright lime" => Some(ColorU8::from_html(b"#87fd05")), - "spearmint" => Some(ColorU8::from_html(b"#1ef876")), - "light aquamarine" => Some(ColorU8::from_html(b"#7bfdc7")), - "light sage" => Some(ColorU8::from_html(b"#bcecac")), - "yellowgreen" => Some(ColorU8::from_html(b"#bbf90f")), - "baby poo" => Some(ColorU8::from_html(b"#ab9004")), - "dark seafoam" => Some(ColorU8::from_html(b"#1fb57a")), - "deep teal" => Some(ColorU8::from_html(b"#00555a")), - "heather" => Some(ColorU8::from_html(b"#a484ac")), - "rust orange" => Some(ColorU8::from_html(b"#c45508")), - "dirty blue" => Some(ColorU8::from_html(b"#3f829d")), - "fern green" => Some(ColorU8::from_html(b"#548d44")), - "bright lilac" => Some(ColorU8::from_html(b"#c95efb")), - "weird green" => Some(ColorU8::from_html(b"#3ae57f")), - "peacock blue" => Some(ColorU8::from_html(b"#016795")), - "avocado green" => Some(ColorU8::from_html(b"#87a922")), - "faded orange" => Some(ColorU8::from_html(b"#f0944d")), - "grape purple" => Some(ColorU8::from_html(b"#5d1451")), - "hot green" => Some(ColorU8::from_html(b"#25ff29")), - "lime yellow" => Some(ColorU8::from_html(b"#d0fe1d")), - "mango" => Some(ColorU8::from_html(b"#ffa62b")), - "shamrock" => Some(ColorU8::from_html(b"#01b44c")), - "bubblegum" => Some(ColorU8::from_html(b"#ff6cb5")), - "purplish brown" => Some(ColorU8::from_html(b"#6b4247")), - "vomit yellow" => Some(ColorU8::from_html(b"#c7c10c")), - "pale cyan" => Some(ColorU8::from_html(b"#b7fffa")), - "key lime" => Some(ColorU8::from_html(b"#aeff6e")), - "tomato red" => Some(ColorU8::from_html(b"#ec2d01")), - "lightgreen" => Some(ColorU8::from_html(b"#76ff7b")), - "merlot" => Some(ColorU8::from_html(b"#730039")), - "night blue" => Some(ColorU8::from_html(b"#040348")), - "purpleish pink" => Some(ColorU8::from_html(b"#df4ec8")), - "apple" => Some(ColorU8::from_html(b"#6ecb3c")), - "baby poop green" => Some(ColorU8::from_html(b"#8f9805")), - "green apple" => Some(ColorU8::from_html(b"#5edc1f")), - "heliotrope" => Some(ColorU8::from_html(b"#d94ff5")), - "yellow/green" => Some(ColorU8::from_html(b"#c8fd3d")), - "almost black" => Some(ColorU8::from_html(b"#070d0d")), - "cool blue" => Some(ColorU8::from_html(b"#4984b8")), - "leafy green" => Some(ColorU8::from_html(b"#51b73b")), - "mustard brown" => Some(ColorU8::from_html(b"#ac7e04")), - "dusk" => Some(ColorU8::from_html(b"#4e5481")), - "dull brown" => Some(ColorU8::from_html(b"#876e4b")), - "frog green" => Some(ColorU8::from_html(b"#58bc08")), - "vivid green" => Some(ColorU8::from_html(b"#2fef10")), - "bright light green" => Some(ColorU8::from_html(b"#2dfe54")), - "fluro green" => Some(ColorU8::from_html(b"#0aff02")), - "kiwi" => Some(ColorU8::from_html(b"#9cef43")), - "seaweed" => Some(ColorU8::from_html(b"#18d17b")), - "navy green" => Some(ColorU8::from_html(b"#35530a")), - "ultramarine blue" => Some(ColorU8::from_html(b"#1805db")), - "iris" => Some(ColorU8::from_html(b"#6258c4")), - "pastel orange" => Some(ColorU8::from_html(b"#ff964f")), - "yellowish orange" => Some(ColorU8::from_html(b"#ffab0f")), - "perrywinkle" => Some(ColorU8::from_html(b"#8f8ce7")), - "tealish" => Some(ColorU8::from_html(b"#24bca8")), - "dark plum" => Some(ColorU8::from_html(b"#3f012c")), - "pear" => Some(ColorU8::from_html(b"#cbf85f")), - "pinkish orange" => Some(ColorU8::from_html(b"#ff724c")), - "midnight purple" => Some(ColorU8::from_html(b"#280137")), - "light urple" => Some(ColorU8::from_html(b"#b36ff6")), - "dark mint" => Some(ColorU8::from_html(b"#48c072")), - "greenish tan" => Some(ColorU8::from_html(b"#bccb7a")), - "light burgundy" => Some(ColorU8::from_html(b"#a8415b")), - "turquoise blue" => Some(ColorU8::from_html(b"#06b1c4")), - "ugly pink" => Some(ColorU8::from_html(b"#cd7584")), - "sandy" => Some(ColorU8::from_html(b"#f1da7a")), - "electric pink" => Some(ColorU8::from_html(b"#ff0490")), - "muted purple" => Some(ColorU8::from_html(b"#805b87")), - "mid green" => Some(ColorU8::from_html(b"#50a747")), - "greyish" => Some(ColorU8::from_html(b"#a8a495")), - "neon yellow" => Some(ColorU8::from_html(b"#cfff04")), - "banana" => Some(ColorU8::from_html(b"#ffff7e")), - "carnation pink" => Some(ColorU8::from_html(b"#ff7fa7")), - "tomato" => Some(ColorU8::from_html(b"#ef4026")), - "sea" => Some(ColorU8::from_html(b"#3c9992")), - "muddy brown" => Some(ColorU8::from_html(b"#886806")), - "turquoise green" => Some(ColorU8::from_html(b"#04f489")), - "buff" => Some(ColorU8::from_html(b"#fef69e")), - "fawn" => Some(ColorU8::from_html(b"#cfaf7b")), - "muted blue" => Some(ColorU8::from_html(b"#3b719f")), - "pale rose" => Some(ColorU8::from_html(b"#fdc1c5")), - "dark mint green" => Some(ColorU8::from_html(b"#20c073")), - "amethyst" => Some(ColorU8::from_html(b"#9b5fc0")), - "blue/green" => Some(ColorU8::from_html(b"#0f9b8e")), - "chestnut" => Some(ColorU8::from_html(b"#742802")), - "sick green" => Some(ColorU8::from_html(b"#9db92c")), - "pea" => Some(ColorU8::from_html(b"#a4bf20")), - "rusty orange" => Some(ColorU8::from_html(b"#cd5909")), - "stone" => Some(ColorU8::from_html(b"#ada587")), - "rose red" => Some(ColorU8::from_html(b"#be013c")), - "pale aqua" => Some(ColorU8::from_html(b"#b8ffeb")), - "deep orange" => Some(ColorU8::from_html(b"#dc4d01")), - "earth" => Some(ColorU8::from_html(b"#a2653e")), - "mossy green" => Some(ColorU8::from_html(b"#638b27")), - "grassy green" => Some(ColorU8::from_html(b"#419c03")), - "pale lime green" => Some(ColorU8::from_html(b"#b1ff65")), - "light grey blue" => Some(ColorU8::from_html(b"#9dbcd4")), - "pale grey" => Some(ColorU8::from_html(b"#fdfdfe")), - "asparagus" => Some(ColorU8::from_html(b"#77ab56")), - "blueberry" => Some(ColorU8::from_html(b"#464196")), - "purple red" => Some(ColorU8::from_html(b"#990147")), - "pale lime" => Some(ColorU8::from_html(b"#befd73")), - "greenish teal" => Some(ColorU8::from_html(b"#32bf84")), - "caramel" => Some(ColorU8::from_html(b"#af6f09")), - "deep magenta" => Some(ColorU8::from_html(b"#a0025c")), - "light peach" => Some(ColorU8::from_html(b"#ffd8b1")), - "milk chocolate" => Some(ColorU8::from_html(b"#7f4e1e")), - "ocher" => Some(ColorU8::from_html(b"#bf9b0c")), - "off green" => Some(ColorU8::from_html(b"#6ba353")), - "purply pink" => Some(ColorU8::from_html(b"#f075e6")), - "lightblue" => Some(ColorU8::from_html(b"#7bc8f6")), - "dusky blue" => Some(ColorU8::from_html(b"#475f94")), - "golden" => Some(ColorU8::from_html(b"#f5bf03")), - "light beige" => Some(ColorU8::from_html(b"#fffeb6")), - "butter yellow" => Some(ColorU8::from_html(b"#fffd74")), - "dusky purple" => Some(ColorU8::from_html(b"#895b7b")), - "french blue" => Some(ColorU8::from_html(b"#436bad")), - "ugly yellow" => Some(ColorU8::from_html(b"#d0c101")), - "greeny yellow" => Some(ColorU8::from_html(b"#c6f808")), - "orangish red" => Some(ColorU8::from_html(b"#f43605")), - "shamrock green" => Some(ColorU8::from_html(b"#02c14d")), - "orangish brown" => Some(ColorU8::from_html(b"#b25f03")), - "tree green" => Some(ColorU8::from_html(b"#2a7e19")), - "deep violet" => Some(ColorU8::from_html(b"#490648")), - "gunmetal" => Some(ColorU8::from_html(b"#536267")), - "blue/purple" => Some(ColorU8::from_html(b"#5a06ef")), - "cherry" => Some(ColorU8::from_html(b"#cf0234")), - "sandy brown" => Some(ColorU8::from_html(b"#c4a661")), - "warm grey" => Some(ColorU8::from_html(b"#978a84")), - "dark indigo" => Some(ColorU8::from_html(b"#1f0954")), - "midnight" => Some(ColorU8::from_html(b"#03012d")), - "bluey green" => Some(ColorU8::from_html(b"#2bb179")), - "grey pink" => Some(ColorU8::from_html(b"#c3909b")), - "soft purple" => Some(ColorU8::from_html(b"#a66fb5")), - "blood" => Some(ColorU8::from_html(b"#770001")), - "brown red" => Some(ColorU8::from_html(b"#922b05")), - "medium grey" => Some(ColorU8::from_html(b"#7d7f7c")), - "berry" => Some(ColorU8::from_html(b"#990f4b")), - "poo" => Some(ColorU8::from_html(b"#8f7303")), - "purpley pink" => Some(ColorU8::from_html(b"#c83cb9")), - "light salmon" => Some(ColorU8::from_html(b"#fea993")), - "snot" => Some(ColorU8::from_html(b"#acbb0d")), - "easter purple" => Some(ColorU8::from_html(b"#c071fe")), - "light yellow green" => Some(ColorU8::from_html(b"#ccfd7f")), - "dark navy blue" => Some(ColorU8::from_html(b"#00022e")), - "drab" => Some(ColorU8::from_html(b"#828344")), - "light rose" => Some(ColorU8::from_html(b"#ffc5cb")), - "rouge" => Some(ColorU8::from_html(b"#ab1239")), - "purplish red" => Some(ColorU8::from_html(b"#b0054b")), - "slime green" => Some(ColorU8::from_html(b"#99cc04")), - "baby poop" => Some(ColorU8::from_html(b"#937c00")), - "irish green" => Some(ColorU8::from_html(b"#019529")), - "pink/purple" => Some(ColorU8::from_html(b"#ef1de7")), - "dark navy" => Some(ColorU8::from_html(b"#000435")), - "greeny blue" => Some(ColorU8::from_html(b"#42b395")), - "light plum" => Some(ColorU8::from_html(b"#9d5783")), - "pinkish grey" => Some(ColorU8::from_html(b"#c8aca9")), - "dirty orange" => Some(ColorU8::from_html(b"#c87606")), - "rust red" => Some(ColorU8::from_html(b"#aa2704")), - "pale lilac" => Some(ColorU8::from_html(b"#e4cbff")), - "orangey red" => Some(ColorU8::from_html(b"#fa4224")), - "primary blue" => Some(ColorU8::from_html(b"#0804f9")), - "kermit green" => Some(ColorU8::from_html(b"#5cb200")), - "brownish purple" => Some(ColorU8::from_html(b"#76424e")), - "murky green" => Some(ColorU8::from_html(b"#6c7a0e")), - "wheat" => Some(ColorU8::from_html(b"#fbdd7e")), - "very dark purple" => Some(ColorU8::from_html(b"#2a0134")), - "bottle green" => Some(ColorU8::from_html(b"#044a05")), - "watermelon" => Some(ColorU8::from_html(b"#fd4659")), - "deep sky blue" => Some(ColorU8::from_html(b"#0d75f8")), - "fire engine red" => Some(ColorU8::from_html(b"#fe0002")), - "yellow ochre" => Some(ColorU8::from_html(b"#cb9d06")), - "pumpkin orange" => Some(ColorU8::from_html(b"#fb7d07")), - "pale olive" => Some(ColorU8::from_html(b"#b9cc81")), - "light lilac" => Some(ColorU8::from_html(b"#edc8ff")), - "lightish green" => Some(ColorU8::from_html(b"#61e160")), - "carolina blue" => Some(ColorU8::from_html(b"#8ab8fe")), - "mulberry" => Some(ColorU8::from_html(b"#920a4e")), - "shocking pink" => Some(ColorU8::from_html(b"#fe02a2")), - "auburn" => Some(ColorU8::from_html(b"#9a3001")), - "bright lime green" => Some(ColorU8::from_html(b"#65fe08")), - "celadon" => Some(ColorU8::from_html(b"#befdb7")), - "pinkish brown" => Some(ColorU8::from_html(b"#b17261")), - "poo brown" => Some(ColorU8::from_html(b"#885f01")), - "bright sky blue" => Some(ColorU8::from_html(b"#02ccfe")), - "celery" => Some(ColorU8::from_html(b"#c1fd95")), - "dirt brown" => Some(ColorU8::from_html(b"#836539")), - "strawberry" => Some(ColorU8::from_html(b"#fb2943")), - "dark lime" => Some(ColorU8::from_html(b"#84b701")), - "copper" => Some(ColorU8::from_html(b"#b66325")), - "medium brown" => Some(ColorU8::from_html(b"#7f5112")), - "muted green" => Some(ColorU8::from_html(b"#5fa052")), - "robin's egg" => Some(ColorU8::from_html(b"#6dedfd")), - "bright aqua" => Some(ColorU8::from_html(b"#0bf9ea")), - "bright lavender" => Some(ColorU8::from_html(b"#c760ff")), - "ivory" => Some(ColorU8::from_html(b"#ffffcb")), - "very light purple" => Some(ColorU8::from_html(b"#f6cefc")), - "light navy" => Some(ColorU8::from_html(b"#155084")), - "pink red" => Some(ColorU8::from_html(b"#f5054f")), - "olive brown" => Some(ColorU8::from_html(b"#645403")), - "poop brown" => Some(ColorU8::from_html(b"#7a5901")), - "mustard green" => Some(ColorU8::from_html(b"#a8b504")), - "ocean green" => Some(ColorU8::from_html(b"#3d9973")), - "very dark blue" => Some(ColorU8::from_html(b"#000133")), - "dusty green" => Some(ColorU8::from_html(b"#76a973")), - "light navy blue" => Some(ColorU8::from_html(b"#2e5a88")), - "minty green" => Some(ColorU8::from_html(b"#0bf77d")), - "adobe" => Some(ColorU8::from_html(b"#bd6c48")), - "barney" => Some(ColorU8::from_html(b"#ac1db8")), - "jade green" => Some(ColorU8::from_html(b"#2baf6a")), - "bright light blue" => Some(ColorU8::from_html(b"#26f7fd")), - "light lime" => Some(ColorU8::from_html(b"#aefd6c")), - "dark khaki" => Some(ColorU8::from_html(b"#9b8f55")), - "orange yellow" => Some(ColorU8::from_html(b"#ffad01")), - "ocre" => Some(ColorU8::from_html(b"#c69c04")), - "maize" => Some(ColorU8::from_html(b"#f4d054")), - "faded pink" => Some(ColorU8::from_html(b"#de9dac")), - "british racing green" => Some(ColorU8::from_html(b"#05480d")), - "sandstone" => Some(ColorU8::from_html(b"#c9ae74")), - "mud brown" => Some(ColorU8::from_html(b"#60460f")), - "light sea green" => Some(ColorU8::from_html(b"#98f6b0")), - "robin egg blue" => Some(ColorU8::from_html(b"#8af1fe")), - "aqua marine" => Some(ColorU8::from_html(b"#2ee8bb")), - "dark sea green" => Some(ColorU8::from_html(b"#11875d")), - "soft pink" => Some(ColorU8::from_html(b"#fdb0c0")), - "orangey brown" => Some(ColorU8::from_html(b"#b16002")), - "cherry red" => Some(ColorU8::from_html(b"#f7022a")), - "burnt yellow" => Some(ColorU8::from_html(b"#d5ab09")), - "brownish grey" => Some(ColorU8::from_html(b"#86775f")), - "camel" => Some(ColorU8::from_html(b"#c69f59")), - "purplish grey" => Some(ColorU8::from_html(b"#7a687f")), - "marine" => Some(ColorU8::from_html(b"#042e60")), - "greyish pink" => Some(ColorU8::from_html(b"#c88d94")), - "pale turquoise" => Some(ColorU8::from_html(b"#a5fbd5")), - "pastel yellow" => Some(ColorU8::from_html(b"#fffe71")), - "bluey purple" => Some(ColorU8::from_html(b"#6241c7")), - "canary yellow" => Some(ColorU8::from_html(b"#fffe40")), - "faded red" => Some(ColorU8::from_html(b"#d3494e")), - "sepia" => Some(ColorU8::from_html(b"#985e2b")), - "coffee" => Some(ColorU8::from_html(b"#a6814c")), - "bright magenta" => Some(ColorU8::from_html(b"#ff08e8")), - "mocha" => Some(ColorU8::from_html(b"#9d7651")), - "ecru" => Some(ColorU8::from_html(b"#feffca")), - "purpleish" => Some(ColorU8::from_html(b"#98568d")), - "cranberry" => Some(ColorU8::from_html(b"#9e003a")), - "darkish green" => Some(ColorU8::from_html(b"#287c37")), - "brown orange" => Some(ColorU8::from_html(b"#b96902")), - "dusky rose" => Some(ColorU8::from_html(b"#ba6873")), - "melon" => Some(ColorU8::from_html(b"#ff7855")), - "sickly green" => Some(ColorU8::from_html(b"#94b21c")), - "silver" => Some(ColorU8::from_html(b"#c5c9c7")), - "purply blue" => Some(ColorU8::from_html(b"#661aee")), - "purpleish blue" => Some(ColorU8::from_html(b"#6140ef")), - "hospital green" => Some(ColorU8::from_html(b"#9be5aa")), - "shit brown" => Some(ColorU8::from_html(b"#7b5804")), - "mid blue" => Some(ColorU8::from_html(b"#276ab3")), - "amber" => Some(ColorU8::from_html(b"#feb308")), - "easter green" => Some(ColorU8::from_html(b"#8cfd7e")), - "soft blue" => Some(ColorU8::from_html(b"#6488ea")), - "cerulean blue" => Some(ColorU8::from_html(b"#056eee")), - "golden brown" => Some(ColorU8::from_html(b"#b27a01")), - "bright turquoise" => Some(ColorU8::from_html(b"#0ffef9")), - "red pink" => Some(ColorU8::from_html(b"#fa2a55")), - "red purple" => Some(ColorU8::from_html(b"#820747")), - "greyish brown" => Some(ColorU8::from_html(b"#7a6a4f")), - "vermillion" => Some(ColorU8::from_html(b"#f4320c")), - "russet" => Some(ColorU8::from_html(b"#a13905")), - "steel grey" => Some(ColorU8::from_html(b"#6f828a")), - "lighter purple" => Some(ColorU8::from_html(b"#a55af4")), - "bright violet" => Some(ColorU8::from_html(b"#ad0afd")), - "prussian blue" => Some(ColorU8::from_html(b"#004577")), - "slate green" => Some(ColorU8::from_html(b"#658d6d")), - "dirty pink" => Some(ColorU8::from_html(b"#ca7b80")), - "dark blue green" => Some(ColorU8::from_html(b"#005249")), - "pine" => Some(ColorU8::from_html(b"#2b5d34")), - "yellowy green" => Some(ColorU8::from_html(b"#bff128")), - "dark gold" => Some(ColorU8::from_html(b"#b59410")), - "bluish" => Some(ColorU8::from_html(b"#2976bb")), - "darkish blue" => Some(ColorU8::from_html(b"#014182")), - "dull red" => Some(ColorU8::from_html(b"#bb3f3f")), - "pinky red" => Some(ColorU8::from_html(b"#fc2647")), - "bronze" => Some(ColorU8::from_html(b"#a87900")), - "pale teal" => Some(ColorU8::from_html(b"#82cbb2")), - "military green" => Some(ColorU8::from_html(b"#667c3e")), - "barbie pink" => Some(ColorU8::from_html(b"#fe46a5")), - "bubblegum pink" => Some(ColorU8::from_html(b"#fe83cc")), - "pea soup green" => Some(ColorU8::from_html(b"#94a617")), - "dark mustard" => Some(ColorU8::from_html(b"#a88905")), - "shit" => Some(ColorU8::from_html(b"#7f5f00")), - "medium purple" => Some(ColorU8::from_html(b"#9e43a2")), - "very dark green" => Some(ColorU8::from_html(b"#062e03")), - "dirt" => Some(ColorU8::from_html(b"#8a6e45")), - "dusky pink" => Some(ColorU8::from_html(b"#cc7a8b")), - "red violet" => Some(ColorU8::from_html(b"#9e0168")), - "lemon yellow" => Some(ColorU8::from_html(b"#fdff38")), - "pistachio" => Some(ColorU8::from_html(b"#c0fa8b")), - "dull yellow" => Some(ColorU8::from_html(b"#eedc5b")), - "dark lime green" => Some(ColorU8::from_html(b"#7ebd01")), - "denim blue" => Some(ColorU8::from_html(b"#3b5b92")), - "teal blue" => Some(ColorU8::from_html(b"#01889f")), - "lightish blue" => Some(ColorU8::from_html(b"#3d7afd")), - "purpley blue" => Some(ColorU8::from_html(b"#5f34e7")), - "light indigo" => Some(ColorU8::from_html(b"#6d5acf")), - "swamp green" => Some(ColorU8::from_html(b"#748500")), - "brown green" => Some(ColorU8::from_html(b"#706c11")), - "dark maroon" => Some(ColorU8::from_html(b"#3c0008")), - "hot purple" => Some(ColorU8::from_html(b"#cb00f5")), - "dark forest green" => Some(ColorU8::from_html(b"#002d04")), - "faded blue" => Some(ColorU8::from_html(b"#658cbb")), - "drab green" => Some(ColorU8::from_html(b"#749551")), - "light lime green" => Some(ColorU8::from_html(b"#b9ff66")), - "snot green" => Some(ColorU8::from_html(b"#9dc100")), - "yellowish" => Some(ColorU8::from_html(b"#faee66")), - "light blue green" => Some(ColorU8::from_html(b"#7efbb3")), - "bordeaux" => Some(ColorU8::from_html(b"#7b002c")), - "light mauve" => Some(ColorU8::from_html(b"#c292a1")), - "ocean" => Some(ColorU8::from_html(b"#017b92")), - "marigold" => Some(ColorU8::from_html(b"#fcc006")), - "muddy green" => Some(ColorU8::from_html(b"#657432")), - "dull orange" => Some(ColorU8::from_html(b"#d8863b")), - "steel" => Some(ColorU8::from_html(b"#738595")), - "electric purple" => Some(ColorU8::from_html(b"#aa23ff")), - "fluorescent green" => Some(ColorU8::from_html(b"#08ff08")), - "yellowish brown" => Some(ColorU8::from_html(b"#9b7a01")), - "blush" => Some(ColorU8::from_html(b"#f29e8e")), - "soft green" => Some(ColorU8::from_html(b"#6fc276")), - "bright orange" => Some(ColorU8::from_html(b"#ff5b00")), - "lemon" => Some(ColorU8::from_html(b"#fdff52")), - "purple grey" => Some(ColorU8::from_html(b"#866f85")), - "acid green" => Some(ColorU8::from_html(b"#8ffe09")), - "pale lavender" => Some(ColorU8::from_html(b"#eecffe")), - "violet blue" => Some(ColorU8::from_html(b"#510ac9")), - "light forest green" => Some(ColorU8::from_html(b"#4f9153")), - "burnt red" => Some(ColorU8::from_html(b"#9f2305")), - "khaki green" => Some(ColorU8::from_html(b"#728639")), - "cerise" => Some(ColorU8::from_html(b"#de0c62")), - "faded purple" => Some(ColorU8::from_html(b"#916e99")), - "apricot" => Some(ColorU8::from_html(b"#ffb16d")), - "dark olive green" => Some(ColorU8::from_html(b"#3c4d03")), - "grey brown" => Some(ColorU8::from_html(b"#7f7053")), - "green grey" => Some(ColorU8::from_html(b"#77926f")), - "true blue" => Some(ColorU8::from_html(b"#010fcc")), - "pale violet" => Some(ColorU8::from_html(b"#ceaefa")), - "periwinkle blue" => Some(ColorU8::from_html(b"#8f99fb")), - "light sky blue" => Some(ColorU8::from_html(b"#c6fcff")), - "blurple" => Some(ColorU8::from_html(b"#5539cc")), - "green brown" => Some(ColorU8::from_html(b"#544e03")), - "bluegreen" => Some(ColorU8::from_html(b"#017a79")), - "bright teal" => Some(ColorU8::from_html(b"#01f9c6")), - "brownish yellow" => Some(ColorU8::from_html(b"#c9b003")), - "pea soup" => Some(ColorU8::from_html(b"#929901")), - "forest" => Some(ColorU8::from_html(b"#0b5509")), - "barney purple" => Some(ColorU8::from_html(b"#a00498")), - "ultramarine" => Some(ColorU8::from_html(b"#2000b1")), - "purplish" => Some(ColorU8::from_html(b"#94568c")), - "puke yellow" => Some(ColorU8::from_html(b"#c2be0e")), - "bluish grey" => Some(ColorU8::from_html(b"#748b97")), - "dark periwinkle" => Some(ColorU8::from_html(b"#665fd1")), - "dark lilac" => Some(ColorU8::from_html(b"#9c6da5")), - "reddish" => Some(ColorU8::from_html(b"#c44240")), - "light maroon" => Some(ColorU8::from_html(b"#a24857")), - "dusty purple" => Some(ColorU8::from_html(b"#825f87")), - "terra cotta" => Some(ColorU8::from_html(b"#c9643b")), - "avocado" => Some(ColorU8::from_html(b"#90b134")), - "marine blue" => Some(ColorU8::from_html(b"#01386a")), - "teal green" => Some(ColorU8::from_html(b"#25a36f")), - "slate grey" => Some(ColorU8::from_html(b"#59656d")), - "lighter green" => Some(ColorU8::from_html(b"#75fd63")), - "electric green" => Some(ColorU8::from_html(b"#21fc0d")), - "dusty blue" => Some(ColorU8::from_html(b"#5a86ad")), - "golden yellow" => Some(ColorU8::from_html(b"#fec615")), - "bright yellow" => Some(ColorU8::from_html(b"#fffd01")), - "light lavender" => Some(ColorU8::from_html(b"#dfc5fe")), - "umber" => Some(ColorU8::from_html(b"#b26400")), - "poop" => Some(ColorU8::from_html(b"#7f5e00")), - "dark peach" => Some(ColorU8::from_html(b"#de7e5d")), - "jungle green" => Some(ColorU8::from_html(b"#048243")), - "eggshell" => Some(ColorU8::from_html(b"#ffffd4")), - "denim" => Some(ColorU8::from_html(b"#3b638c")), - "yellow brown" => Some(ColorU8::from_html(b"#b79400")), - "dull purple" => Some(ColorU8::from_html(b"#84597e")), - "chocolate brown" => Some(ColorU8::from_html(b"#411900")), - "wine red" => Some(ColorU8::from_html(b"#7b0323")), - "neon blue" => Some(ColorU8::from_html(b"#04d9ff")), - "dirty green" => Some(ColorU8::from_html(b"#667e2c")), - "light tan" => Some(ColorU8::from_html(b"#fbeeac")), - "ice blue" => Some(ColorU8::from_html(b"#d7fffe")), - "cadet blue" => Some(ColorU8::from_html(b"#4e7496")), - "dark mauve" => Some(ColorU8::from_html(b"#874c62")), - "very light blue" => Some(ColorU8::from_html(b"#d5ffff")), - "grey purple" => Some(ColorU8::from_html(b"#826d8c")), - "pastel pink" => Some(ColorU8::from_html(b"#ffbacd")), - "very light green" => Some(ColorU8::from_html(b"#d1ffbd")), - "dark sky blue" => Some(ColorU8::from_html(b"#448ee4")), - "evergreen" => Some(ColorU8::from_html(b"#05472a")), - "dull pink" => Some(ColorU8::from_html(b"#d5869d")), - "aubergine" => Some(ColorU8::from_html(b"#3d0734")), - "mahogany" => Some(ColorU8::from_html(b"#4a0100")), - "reddish orange" => Some(ColorU8::from_html(b"#f8481c")), - "deep green" => Some(ColorU8::from_html(b"#02590f")), - "vomit green" => Some(ColorU8::from_html(b"#89a203")), - "purple pink" => Some(ColorU8::from_html(b"#e03fd8")), - "dusty pink" => Some(ColorU8::from_html(b"#d58a94")), - "faded green" => Some(ColorU8::from_html(b"#7bb274")), - "camo green" => Some(ColorU8::from_html(b"#526525")), - "pinky purple" => Some(ColorU8::from_html(b"#c94cbe")), - "pink purple" => Some(ColorU8::from_html(b"#db4bda")), - "brownish red" => Some(ColorU8::from_html(b"#9e3623")), - "dark rose" => Some(ColorU8::from_html(b"#b5485d")), - "mud" => Some(ColorU8::from_html(b"#735c12")), - "brownish" => Some(ColorU8::from_html(b"#9c6d57")), - "emerald green" => Some(ColorU8::from_html(b"#028f1e")), - "pale brown" => Some(ColorU8::from_html(b"#b1916e")), - "dull blue" => Some(ColorU8::from_html(b"#49759c")), - "burnt umber" => Some(ColorU8::from_html(b"#a0450e")), - "medium green" => Some(ColorU8::from_html(b"#39ad48")), - "clay" => Some(ColorU8::from_html(b"#b66a50")), - "light aqua" => Some(ColorU8::from_html(b"#8cffdb")), - "light olive green" => Some(ColorU8::from_html(b"#a4be5c")), - "brownish orange" => Some(ColorU8::from_html(b"#cb7723")), - "dark aqua" => Some(ColorU8::from_html(b"#05696b")), - "purplish pink" => Some(ColorU8::from_html(b"#ce5dae")), - "dark salmon" => Some(ColorU8::from_html(b"#c85a53")), - "greenish grey" => Some(ColorU8::from_html(b"#96ae8d")), - "jade" => Some(ColorU8::from_html(b"#1fa774")), - "ugly green" => Some(ColorU8::from_html(b"#7a9703")), - "dark beige" => Some(ColorU8::from_html(b"#ac9362")), - "emerald" => Some(ColorU8::from_html(b"#01a049")), - "pale red" => Some(ColorU8::from_html(b"#d9544d")), - "light magenta" => Some(ColorU8::from_html(b"#fa5ff7")), - "sky" => Some(ColorU8::from_html(b"#82cafc")), - "light cyan" => Some(ColorU8::from_html(b"#acfffc")), - "yellow orange" => Some(ColorU8::from_html(b"#fcb001")), - "reddish purple" => Some(ColorU8::from_html(b"#910951")), - "reddish pink" => Some(ColorU8::from_html(b"#fe2c54")), - "orchid" => Some(ColorU8::from_html(b"#c875c4")), - "dirty yellow" => Some(ColorU8::from_html(b"#cdc50a")), - "orange red" => Some(ColorU8::from_html(b"#fd411e")), - "deep red" => Some(ColorU8::from_html(b"#9a0200")), - "orange brown" => Some(ColorU8::from_html(b"#be6400")), - "cobalt blue" => Some(ColorU8::from_html(b"#030aa7")), - "neon pink" => Some(ColorU8::from_html(b"#fe019a")), - "rose pink" => Some(ColorU8::from_html(b"#f7879a")), - "greyish purple" => Some(ColorU8::from_html(b"#887191")), - "raspberry" => Some(ColorU8::from_html(b"#b00149")), - "aqua green" => Some(ColorU8::from_html(b"#12e193")), - "salmon pink" => Some(ColorU8::from_html(b"#fe7b7c")), - "tangerine" => Some(ColorU8::from_html(b"#ff9408")), - "brownish green" => Some(ColorU8::from_html(b"#6a6e09")), - "red brown" => Some(ColorU8::from_html(b"#8b2e16")), - "greenish brown" => Some(ColorU8::from_html(b"#696112")), - "pumpkin" => Some(ColorU8::from_html(b"#e17701")), - "pine green" => Some(ColorU8::from_html(b"#0a481e")), - "charcoal" => Some(ColorU8::from_html(b"#343837")), - "baby pink" => Some(ColorU8::from_html(b"#ffb7ce")), - "cornflower" => Some(ColorU8::from_html(b"#6a79f7")), - "blue violet" => Some(ColorU8::from_html(b"#5d06e9")), - "chocolate" => Some(ColorU8::from_html(b"#3d1c02")), - "greyish green" => Some(ColorU8::from_html(b"#82a67d")), - "scarlet" => Some(ColorU8::from_html(b"#be0119")), - "green yellow" => Some(ColorU8::from_html(b"#c9ff27")), - "dark olive" => Some(ColorU8::from_html(b"#373e02")), - "sienna" => Some(ColorU8::from_html(b"#a9561e")), - "pastel purple" => Some(ColorU8::from_html(b"#caa0ff")), - "terracotta" => Some(ColorU8::from_html(b"#ca6641")), - "aqua blue" => Some(ColorU8::from_html(b"#02d8e9")), - "sage green" => Some(ColorU8::from_html(b"#88b378")), - "blood red" => Some(ColorU8::from_html(b"#980002")), - "deep pink" => Some(ColorU8::from_html(b"#cb0162")), - "grass" => Some(ColorU8::from_html(b"#5cac2d")), - "moss" => Some(ColorU8::from_html(b"#769958")), - "pastel blue" => Some(ColorU8::from_html(b"#a2bffe")), - "bluish green" => Some(ColorU8::from_html(b"#10a674")), - "green blue" => Some(ColorU8::from_html(b"#06b48b")), - "dark tan" => Some(ColorU8::from_html(b"#af884a")), - "greenish blue" => Some(ColorU8::from_html(b"#0b8b87")), - "pale orange" => Some(ColorU8::from_html(b"#ffa756")), - "vomit" => Some(ColorU8::from_html(b"#a2a415")), - "forrest green" => Some(ColorU8::from_html(b"#154406")), - "dark lavender" => Some(ColorU8::from_html(b"#856798")), - "dark violet" => Some(ColorU8::from_html(b"#34013f")), - "purple blue" => Some(ColorU8::from_html(b"#632de9")), - "dark cyan" => Some(ColorU8::from_html(b"#0a888a")), - "olive drab" => Some(ColorU8::from_html(b"#6f7632")), - "pinkish" => Some(ColorU8::from_html(b"#d46a7e")), - "cobalt" => Some(ColorU8::from_html(b"#1e488f")), - "neon purple" => Some(ColorU8::from_html(b"#bc13fe")), - "light turquoise" => Some(ColorU8::from_html(b"#7ef4cc")), - "apple green" => Some(ColorU8::from_html(b"#76cd26")), - "dull green" => Some(ColorU8::from_html(b"#74a662")), - "wine" => Some(ColorU8::from_html(b"#80013f")), - "powder blue" => Some(ColorU8::from_html(b"#b1d1fc")), - "off white" => Some(ColorU8::from_html(b"#ffffe4")), - "electric blue" => Some(ColorU8::from_html(b"#0652ff")), - "dark turquoise" => Some(ColorU8::from_html(b"#045c5a")), - "blue purple" => Some(ColorU8::from_html(b"#5729ce")), - "azure" => Some(ColorU8::from_html(b"#069af3")), - "bright red" => Some(ColorU8::from_html(b"#ff000d")), - "pinkish red" => Some(ColorU8::from_html(b"#f10c45")), - "cornflower blue" => Some(ColorU8::from_html(b"#5170d7")), - "light olive" => Some(ColorU8::from_html(b"#acbf69")), - "grape" => Some(ColorU8::from_html(b"#6c3461")), - "greyish blue" => Some(ColorU8::from_html(b"#5e819d")), - "purplish blue" => Some(ColorU8::from_html(b"#601ef9")), - "yellowish green" => Some(ColorU8::from_html(b"#b0dd16")), - "greenish yellow" => Some(ColorU8::from_html(b"#cdfd02")), - "medium blue" => Some(ColorU8::from_html(b"#2c6fbb")), - "dusty rose" => Some(ColorU8::from_html(b"#c0737a")), - "light violet" => Some(ColorU8::from_html(b"#d6b4fc")), - "midnight blue" => Some(ColorU8::from_html(b"#020035")), - "bluish purple" => Some(ColorU8::from_html(b"#703be7")), - "red orange" => Some(ColorU8::from_html(b"#fd3c06")), - "dark magenta" => Some(ColorU8::from_html(b"#960056")), - "greenish" => Some(ColorU8::from_html(b"#40a368")), - "ocean blue" => Some(ColorU8::from_html(b"#03719c")), - "coral" => Some(ColorU8::from_html(b"#fc5a50")), - "cream" => Some(ColorU8::from_html(b"#ffffc2")), - "reddish brown" => Some(ColorU8::from_html(b"#7f2b0a")), - "burnt sienna" => Some(ColorU8::from_html(b"#b04e0f")), - "brick" => Some(ColorU8::from_html(b"#a03623")), - "sage" => Some(ColorU8::from_html(b"#87ae73")), - "grey green" => Some(ColorU8::from_html(b"#789b73")), - "white" => Some(ColorU8::from_html(b"#ffffff")), - "robin's egg blue" => Some(ColorU8::from_html(b"#98eff9")), - "moss green" => Some(ColorU8::from_html(b"#658b38")), - "steel blue" => Some(ColorU8::from_html(b"#5a7d9a")), - "eggplant" => Some(ColorU8::from_html(b"#380835")), - "light yellow" => Some(ColorU8::from_html(b"#fffe7a")), - "leaf green" => Some(ColorU8::from_html(b"#5ca904")), - "light grey" => Some(ColorU8::from_html(b"#d8dcd6")), - "puke" => Some(ColorU8::from_html(b"#a5a502")), - "pinkish purple" => Some(ColorU8::from_html(b"#d648d7")), - "sea blue" => Some(ColorU8::from_html(b"#047495")), - "pale purple" => Some(ColorU8::from_html(b"#b790d4")), - "slate blue" => Some(ColorU8::from_html(b"#5b7c99")), - "blue grey" => Some(ColorU8::from_html(b"#607c8e")), - "hunter green" => Some(ColorU8::from_html(b"#0b4008")), - "fuchsia" => Some(ColorU8::from_html(b"#ed0dd9")), - "crimson" => Some(ColorU8::from_html(b"#8c000f")), - "pale yellow" => Some(ColorU8::from_html(b"#ffff84")), - "ochre" => Some(ColorU8::from_html(b"#bf9005")), - "mustard yellow" => Some(ColorU8::from_html(b"#d2bd0a")), - "light red" => Some(ColorU8::from_html(b"#ff474c")), - "cerulean" => Some(ColorU8::from_html(b"#0485d1")), - "pale pink" => Some(ColorU8::from_html(b"#ffcfdc")), - "deep blue" => Some(ColorU8::from_html(b"#040273")), - "rust" => Some(ColorU8::from_html(b"#a83c09")), - "light teal" => Some(ColorU8::from_html(b"#90e4c1")), - "slate" => Some(ColorU8::from_html(b"#516572")), - "goldenrod" => Some(ColorU8::from_html(b"#fac205")), - "dark yellow" => Some(ColorU8::from_html(b"#d5b60a")), - "dark grey" => Some(ColorU8::from_html(b"#363737")), - "army green" => Some(ColorU8::from_html(b"#4b5d16")), - "grey blue" => Some(ColorU8::from_html(b"#6b8ba4")), - "seafoam" => Some(ColorU8::from_html(b"#80f9ad")), - "puce" => Some(ColorU8::from_html(b"#a57e52")), - "spring green" => Some(ColorU8::from_html(b"#a9f971")), - "dark orange" => Some(ColorU8::from_html(b"#c65102")), - "sand" => Some(ColorU8::from_html(b"#e2ca76")), - "pastel green" => Some(ColorU8::from_html(b"#b0ff9d")), - "mint" => Some(ColorU8::from_html(b"#9ffeb0")), - "light orange" => Some(ColorU8::from_html(b"#fdaa48")), - "bright pink" => Some(ColorU8::from_html(b"#fe01b1")), - "chartreuse" => Some(ColorU8::from_html(b"#c1f80a")), - "deep purple" => Some(ColorU8::from_html(b"#36013f")), - "dark brown" => Some(ColorU8::from_html(b"#341c02")), - "taupe" => Some(ColorU8::from_html(b"#b9a281")), - "pea green" => Some(ColorU8::from_html(b"#8eab12")), - "puke green" => Some(ColorU8::from_html(b"#9aae07")), - "kelly green" => Some(ColorU8::from_html(b"#02ab2e")), - "seafoam green" => Some(ColorU8::from_html(b"#7af9ab")), - "blue green" => Some(ColorU8::from_html(b"#137e6d")), - "khaki" => Some(ColorU8::from_html(b"#aaa662")), - "burgundy" => Some(ColorU8::from_html(b"#610023")), - "dark teal" => Some(ColorU8::from_html(b"#014d4e")), - "brick red" => Some(ColorU8::from_html(b"#8f1402")), - "royal purple" => Some(ColorU8::from_html(b"#4b006e")), - "plum" => Some(ColorU8::from_html(b"#580f41")), - "mint green" => Some(ColorU8::from_html(b"#8fff9f")), - "gold" => Some(ColorU8::from_html(b"#dbb40c")), - "baby blue" => Some(ColorU8::from_html(b"#a2cffe")), - "yellow green" => Some(ColorU8::from_html(b"#c0fb2d")), - "bright purple" => Some(ColorU8::from_html(b"#be03fd")), - "dark red" => Some(ColorU8::from_html(b"#840000")), - "pale blue" => Some(ColorU8::from_html(b"#d0fefe")), - "grass green" => Some(ColorU8::from_html(b"#3f9b0b")), - "navy" => Some(ColorU8::from_html(b"#01153e")), - "aquamarine" => Some(ColorU8::from_html(b"#04d8b2")), - "burnt orange" => Some(ColorU8::from_html(b"#c04e01")), - "neon green" => Some(ColorU8::from_html(b"#0cff0c")), - "bright blue" => Some(ColorU8::from_html(b"#0165fc")), - "rose" => Some(ColorU8::from_html(b"#cf6275")), - "light pink" => Some(ColorU8::from_html(b"#ffd1df")), - "mustard" => Some(ColorU8::from_html(b"#ceb301")), - "indigo" => Some(ColorU8::from_html(b"#380282")), - "lime" => Some(ColorU8::from_html(b"#aaff32")), - "sea green" => Some(ColorU8::from_html(b"#53fca1")), - "periwinkle" => Some(ColorU8::from_html(b"#8e82fe")), - "dark pink" => Some(ColorU8::from_html(b"#cb416b")), - "olive green" => Some(ColorU8::from_html(b"#677a04")), - "peach" => Some(ColorU8::from_html(b"#ffb07c")), - "pale green" => Some(ColorU8::from_html(b"#c7fdb5")), - "light brown" => Some(ColorU8::from_html(b"#ad8150")), - "hot pink" => Some(ColorU8::from_html(b"#ff028d")), - "black" => Some(ColorU8::from_html(b"#000000")), - "lilac" => Some(ColorU8::from_html(b"#cea2fd")), - "navy blue" => Some(ColorU8::from_html(b"#001146")), - "royal blue" => Some(ColorU8::from_html(b"#0504aa")), - "beige" => Some(ColorU8::from_html(b"#e6daa6")), - "salmon" => Some(ColorU8::from_html(b"#ff796c")), - "olive" => Some(ColorU8::from_html(b"#6e750e")), - "maroon" => Some(ColorU8::from_html(b"#650021")), - "bright green" => Some(ColorU8::from_html(b"#01ff07")), - "dark purple" => Some(ColorU8::from_html(b"#35063e")), - "mauve" => Some(ColorU8::from_html(b"#ae7181")), - "forest green" => Some(ColorU8::from_html(b"#06470c")), - "aqua" => Some(ColorU8::from_html(b"#13eac9")), - "cyan" => Some(ColorU8::from_html(b"#00ffff")), - "tan" => Some(ColorU8::from_html(b"#d1b26f")), - "dark blue" => Some(ColorU8::from_html(b"#00035b")), - "lavender" => Some(ColorU8::from_html(b"#c79fef")), - "turquoise" => Some(ColorU8::from_html(b"#06c2ac")), - "dark green" => Some(ColorU8::from_html(b"#033500")), - "violet" => Some(ColorU8::from_html(b"#9a0eea")), - "light purple" => Some(ColorU8::from_html(b"#bf77f6")), - "lime green" => Some(ColorU8::from_html(b"#89fe05")), - "grey" => Some(ColorU8::from_html(b"#929591")), - "sky blue" => Some(ColorU8::from_html(b"#75bbfd")), - "yellow" => Some(ColorU8::from_html(b"#ffff14")), - "magenta" => Some(ColorU8::from_html(b"#c20078")), - "light green" => Some(ColorU8::from_html(b"#96f97b")), - "orange" => Some(ColorU8::from_html(b"#f97306")), - "teal" => Some(ColorU8::from_html(b"#029386")), - "light blue" => Some(ColorU8::from_html(b"#95d0fc")), - "red" => Some(ColorU8::from_html(b"#e50000")), - "brown" => Some(ColorU8::from_html(b"#653700")), - "pink" => Some(ColorU8::from_html(b"#ff81c0")), - "blue" => Some(ColorU8::from_html(b"#0343df")), - "green" => Some(ColorU8::from_html(b"#15b01a")), - "purple" => Some(ColorU8::from_html(b"#7e1e9c")), + "cloudy blue" => Some(Rgba8::from_hex(b"#acc2d9")), + "dark pastel green" => Some(Rgba8::from_hex(b"#56ae57")), + "dust" => Some(Rgba8::from_hex(b"#b2996e")), + "electric lime" => Some(Rgba8::from_hex(b"#a8ff04")), + "fresh green" => Some(Rgba8::from_hex(b"#69d84f")), + "light eggplant" => Some(Rgba8::from_hex(b"#894585")), + "nasty green" => Some(Rgba8::from_hex(b"#70b23f")), + "really light blue" => Some(Rgba8::from_hex(b"#d4ffff")), + "tea" => Some(Rgba8::from_hex(b"#65ab7c")), + "warm purple" => Some(Rgba8::from_hex(b"#952e8f")), + "yellowish tan" => Some(Rgba8::from_hex(b"#fcfc81")), + "cement" => Some(Rgba8::from_hex(b"#a5a391")), + "dark grass green" => Some(Rgba8::from_hex(b"#388004")), + "dusty teal" => Some(Rgba8::from_hex(b"#4c9085")), + "grey teal" => Some(Rgba8::from_hex(b"#5e9b8a")), + "macaroni and cheese" => Some(Rgba8::from_hex(b"#efb435")), + "pinkish tan" => Some(Rgba8::from_hex(b"#d99b82")), + "spruce" => Some(Rgba8::from_hex(b"#0a5f38")), + "strong blue" => Some(Rgba8::from_hex(b"#0c06f7")), + "toxic green" => Some(Rgba8::from_hex(b"#61de2a")), + "windows blue" => Some(Rgba8::from_hex(b"#3778bf")), + "blue blue" => Some(Rgba8::from_hex(b"#2242c7")), + "blue with a hint of purple" => Some(Rgba8::from_hex(b"#533cc6")), + "booger" => Some(Rgba8::from_hex(b"#9bb53c")), + "bright sea green" => Some(Rgba8::from_hex(b"#05ffa6")), + "dark green blue" => Some(Rgba8::from_hex(b"#1f6357")), + "deep turquoise" => Some(Rgba8::from_hex(b"#017374")), + "green teal" => Some(Rgba8::from_hex(b"#0cb577")), + "strong pink" => Some(Rgba8::from_hex(b"#ff0789")), + "bland" => Some(Rgba8::from_hex(b"#afa88b")), + "deep aqua" => Some(Rgba8::from_hex(b"#08787f")), + "lavender pink" => Some(Rgba8::from_hex(b"#dd85d7")), + "light moss green" => Some(Rgba8::from_hex(b"#a6c875")), + "light seafoam green" => Some(Rgba8::from_hex(b"#a7ffb5")), + "olive yellow" => Some(Rgba8::from_hex(b"#c2b709")), + "pig pink" => Some(Rgba8::from_hex(b"#e78ea5")), + "deep lilac" => Some(Rgba8::from_hex(b"#966ebd")), + "desert" => Some(Rgba8::from_hex(b"#ccad60")), + "dusty lavender" => Some(Rgba8::from_hex(b"#ac86a8")), + "purpley grey" => Some(Rgba8::from_hex(b"#947e94")), + "purply" => Some(Rgba8::from_hex(b"#983fb2")), + "candy pink" => Some(Rgba8::from_hex(b"#ff63e9")), + "light pastel green" => Some(Rgba8::from_hex(b"#b2fba5")), + "boring green" => Some(Rgba8::from_hex(b"#63b365")), + "kiwi green" => Some(Rgba8::from_hex(b"#8ee53f")), + "light grey green" => Some(Rgba8::from_hex(b"#b7e1a1")), + "orange pink" => Some(Rgba8::from_hex(b"#ff6f52")), + "tea green" => Some(Rgba8::from_hex(b"#bdf8a3")), + "very light brown" => Some(Rgba8::from_hex(b"#d3b683")), + "egg shell" => Some(Rgba8::from_hex(b"#fffcc4")), + "eggplant purple" => Some(Rgba8::from_hex(b"#430541")), + "powder pink" => Some(Rgba8::from_hex(b"#ffb2d0")), + "reddish grey" => Some(Rgba8::from_hex(b"#997570")), + "baby shit brown" => Some(Rgba8::from_hex(b"#ad900d")), + "liliac" => Some(Rgba8::from_hex(b"#c48efd")), + "stormy blue" => Some(Rgba8::from_hex(b"#507b9c")), + "ugly brown" => Some(Rgba8::from_hex(b"#7d7103")), + "custard" => Some(Rgba8::from_hex(b"#fffd78")), + "darkish pink" => Some(Rgba8::from_hex(b"#da467d")), + "deep brown" => Some(Rgba8::from_hex(b"#410200")), + "greenish beige" => Some(Rgba8::from_hex(b"#c9d179")), + "manilla" => Some(Rgba8::from_hex(b"#fffa86")), + "off blue" => Some(Rgba8::from_hex(b"#5684ae")), + "battleship grey" => Some(Rgba8::from_hex(b"#6b7c85")), + "browny green" => Some(Rgba8::from_hex(b"#6f6c0a")), + "bruise" => Some(Rgba8::from_hex(b"#7e4071")), + "kelley green" => Some(Rgba8::from_hex(b"#009337")), + "sickly yellow" => Some(Rgba8::from_hex(b"#d0e429")), + "sunny yellow" => Some(Rgba8::from_hex(b"#fff917")), + "azul" => Some(Rgba8::from_hex(b"#1d5dec")), + "darkgreen" => Some(Rgba8::from_hex(b"#054907")), + "green/yellow" => Some(Rgba8::from_hex(b"#b5ce08")), + "lichen" => Some(Rgba8::from_hex(b"#8fb67b")), + "light light green" => Some(Rgba8::from_hex(b"#c8ffb0")), + "pale gold" => Some(Rgba8::from_hex(b"#fdde6c")), + "sun yellow" => Some(Rgba8::from_hex(b"#ffdf22")), + "tan green" => Some(Rgba8::from_hex(b"#a9be70")), + "burple" => Some(Rgba8::from_hex(b"#6832e3")), + "butterscotch" => Some(Rgba8::from_hex(b"#fdb147")), + "toupe" => Some(Rgba8::from_hex(b"#c7ac7d")), + "dark cream" => Some(Rgba8::from_hex(b"#fff39a")), + "indian red" => Some(Rgba8::from_hex(b"#850e04")), + "light lavendar" => Some(Rgba8::from_hex(b"#efc0fe")), + "poison green" => Some(Rgba8::from_hex(b"#40fd14")), + "baby puke green" => Some(Rgba8::from_hex(b"#b6c406")), + "bright yellow green" => Some(Rgba8::from_hex(b"#9dff00")), + "charcoal grey" => Some(Rgba8::from_hex(b"#3c4142")), + "squash" => Some(Rgba8::from_hex(b"#f2ab15")), + "cinnamon" => Some(Rgba8::from_hex(b"#ac4f06")), + "light pea green" => Some(Rgba8::from_hex(b"#c4fe82")), + "radioactive green" => Some(Rgba8::from_hex(b"#2cfa1f")), + "raw sienna" => Some(Rgba8::from_hex(b"#9a6200")), + "baby purple" => Some(Rgba8::from_hex(b"#ca9bf7")), + "cocoa" => Some(Rgba8::from_hex(b"#875f42")), + "light royal blue" => Some(Rgba8::from_hex(b"#3a2efe")), + "orangeish" => Some(Rgba8::from_hex(b"#fd8d49")), + "rust brown" => Some(Rgba8::from_hex(b"#8b3103")), + "sand brown" => Some(Rgba8::from_hex(b"#cba560")), + "swamp" => Some(Rgba8::from_hex(b"#698339")), + "tealish green" => Some(Rgba8::from_hex(b"#0cdc73")), + "burnt siena" => Some(Rgba8::from_hex(b"#b75203")), + "camo" => Some(Rgba8::from_hex(b"#7f8f4e")), + "dusk blue" => Some(Rgba8::from_hex(b"#26538d")), + "fern" => Some(Rgba8::from_hex(b"#63a950")), + "old rose" => Some(Rgba8::from_hex(b"#c87f89")), + "pale light green" => Some(Rgba8::from_hex(b"#b1fc99")), + "peachy pink" => Some(Rgba8::from_hex(b"#ff9a8a")), + "rosy pink" => Some(Rgba8::from_hex(b"#f6688e")), + "light bluish green" => Some(Rgba8::from_hex(b"#76fda8")), + "light bright green" => Some(Rgba8::from_hex(b"#53fe5c")), + "light neon green" => Some(Rgba8::from_hex(b"#4efd54")), + "light seafoam" => Some(Rgba8::from_hex(b"#a0febf")), + "tiffany blue" => Some(Rgba8::from_hex(b"#7bf2da")), + "washed out green" => Some(Rgba8::from_hex(b"#bcf5a6")), + "browny orange" => Some(Rgba8::from_hex(b"#ca6b02")), + "nice blue" => Some(Rgba8::from_hex(b"#107ab0")), + "sapphire" => Some(Rgba8::from_hex(b"#2138ab")), + "greyish teal" => Some(Rgba8::from_hex(b"#719f91")), + "orangey yellow" => Some(Rgba8::from_hex(b"#fdb915")), + "parchment" => Some(Rgba8::from_hex(b"#fefcaf")), + "straw" => Some(Rgba8::from_hex(b"#fcf679")), + "very dark brown" => Some(Rgba8::from_hex(b"#1d0200")), + "terracota" => Some(Rgba8::from_hex(b"#cb6843")), + "ugly blue" => Some(Rgba8::from_hex(b"#31668a")), + "clear blue" => Some(Rgba8::from_hex(b"#247afd")), + "creme" => Some(Rgba8::from_hex(b"#ffffb6")), + "foam green" => Some(Rgba8::from_hex(b"#90fda9")), + "grey/green" => Some(Rgba8::from_hex(b"#86a17d")), + "light gold" => Some(Rgba8::from_hex(b"#fddc5c")), + "seafoam blue" => Some(Rgba8::from_hex(b"#78d1b6")), + "topaz" => Some(Rgba8::from_hex(b"#13bbaf")), + "violet pink" => Some(Rgba8::from_hex(b"#fb5ffc")), + "wintergreen" => Some(Rgba8::from_hex(b"#20f986")), + "yellow tan" => Some(Rgba8::from_hex(b"#ffe36e")), + "dark fuchsia" => Some(Rgba8::from_hex(b"#9d0759")), + "indigo blue" => Some(Rgba8::from_hex(b"#3a18b1")), + "light yellowish green" => Some(Rgba8::from_hex(b"#c2ff89")), + "pale magenta" => Some(Rgba8::from_hex(b"#d767ad")), + "rich purple" => Some(Rgba8::from_hex(b"#720058")), + "sunflower yellow" => Some(Rgba8::from_hex(b"#ffda03")), + "green/blue" => Some(Rgba8::from_hex(b"#01c08d")), + "leather" => Some(Rgba8::from_hex(b"#ac7434")), + "racing green" => Some(Rgba8::from_hex(b"#014600")), + "vivid purple" => Some(Rgba8::from_hex(b"#9900fa")), + "dark royal blue" => Some(Rgba8::from_hex(b"#02066f")), + "hazel" => Some(Rgba8::from_hex(b"#8e7618")), + "muted pink" => Some(Rgba8::from_hex(b"#d1768f")), + "booger green" => Some(Rgba8::from_hex(b"#96b403")), + "canary" => Some(Rgba8::from_hex(b"#fdff63")), + "cool grey" => Some(Rgba8::from_hex(b"#95a3a6")), + "dark taupe" => Some(Rgba8::from_hex(b"#7f684e")), + "darkish purple" => Some(Rgba8::from_hex(b"#751973")), + "true green" => Some(Rgba8::from_hex(b"#089404")), + "coral pink" => Some(Rgba8::from_hex(b"#ff6163")), + "dark sage" => Some(Rgba8::from_hex(b"#598556")), + "dark slate blue" => Some(Rgba8::from_hex(b"#214761")), + "flat blue" => Some(Rgba8::from_hex(b"#3c73a8")), + "mushroom" => Some(Rgba8::from_hex(b"#ba9e88")), + "rich blue" => Some(Rgba8::from_hex(b"#021bf9")), + "dirty purple" => Some(Rgba8::from_hex(b"#734a65")), + "greenblue" => Some(Rgba8::from_hex(b"#23c48b")), + "icky green" => Some(Rgba8::from_hex(b"#8fae22")), + "light khaki" => Some(Rgba8::from_hex(b"#e6f2a2")), + "warm blue" => Some(Rgba8::from_hex(b"#4b57db")), + "dark hot pink" => Some(Rgba8::from_hex(b"#d90166")), + "deep sea blue" => Some(Rgba8::from_hex(b"#015482")), + "carmine" => Some(Rgba8::from_hex(b"#9d0216")), + "dark yellow green" => Some(Rgba8::from_hex(b"#728f02")), + "pale peach" => Some(Rgba8::from_hex(b"#ffe5ad")), + "plum purple" => Some(Rgba8::from_hex(b"#4e0550")), + "golden rod" => Some(Rgba8::from_hex(b"#f9bc08")), + "neon red" => Some(Rgba8::from_hex(b"#ff073a")), + "old pink" => Some(Rgba8::from_hex(b"#c77986")), + "very pale blue" => Some(Rgba8::from_hex(b"#d6fffe")), + "blood orange" => Some(Rgba8::from_hex(b"#fe4b03")), + "grapefruit" => Some(Rgba8::from_hex(b"#fd5956")), + "sand yellow" => Some(Rgba8::from_hex(b"#fce166")), + "clay brown" => Some(Rgba8::from_hex(b"#b2713d")), + "dark blue grey" => Some(Rgba8::from_hex(b"#1f3b4d")), + "flat green" => Some(Rgba8::from_hex(b"#699d4c")), + "light green blue" => Some(Rgba8::from_hex(b"#56fca2")), + "warm pink" => Some(Rgba8::from_hex(b"#fb5581")), + "dodger blue" => Some(Rgba8::from_hex(b"#3e82fc")), + "gross green" => Some(Rgba8::from_hex(b"#a0bf16")), + "ice" => Some(Rgba8::from_hex(b"#d6fffa")), + "metallic blue" => Some(Rgba8::from_hex(b"#4f738e")), + "pale salmon" => Some(Rgba8::from_hex(b"#ffb19a")), + "sap green" => Some(Rgba8::from_hex(b"#5c8b15")), + "algae" => Some(Rgba8::from_hex(b"#54ac68")), + "bluey grey" => Some(Rgba8::from_hex(b"#89a0b0")), + "greeny grey" => Some(Rgba8::from_hex(b"#7ea07a")), + "highlighter green" => Some(Rgba8::from_hex(b"#1bfc06")), + "light light blue" => Some(Rgba8::from_hex(b"#cafffb")), + "light mint" => Some(Rgba8::from_hex(b"#b6ffbb")), + "raw umber" => Some(Rgba8::from_hex(b"#a75e09")), + "vivid blue" => Some(Rgba8::from_hex(b"#152eff")), + "deep lavender" => Some(Rgba8::from_hex(b"#8d5eb7")), + "dull teal" => Some(Rgba8::from_hex(b"#5f9e8f")), + "light greenish blue" => Some(Rgba8::from_hex(b"#63f7b4")), + "mud green" => Some(Rgba8::from_hex(b"#606602")), + "pinky" => Some(Rgba8::from_hex(b"#fc86aa")), + "red wine" => Some(Rgba8::from_hex(b"#8c0034")), + "shit green" => Some(Rgba8::from_hex(b"#758000")), + "tan brown" => Some(Rgba8::from_hex(b"#ab7e4c")), + "darkblue" => Some(Rgba8::from_hex(b"#030764")), + "rosa" => Some(Rgba8::from_hex(b"#fe86a4")), + "lipstick" => Some(Rgba8::from_hex(b"#d5174e")), + "pale mauve" => Some(Rgba8::from_hex(b"#fed0fc")), + "claret" => Some(Rgba8::from_hex(b"#680018")), + "dandelion" => Some(Rgba8::from_hex(b"#fedf08")), + "orangered" => Some(Rgba8::from_hex(b"#fe420f")), + "poop green" => Some(Rgba8::from_hex(b"#6f7c00")), + "ruby" => Some(Rgba8::from_hex(b"#ca0147")), + "dark" => Some(Rgba8::from_hex(b"#1b2431")), + "greenish turquoise" => Some(Rgba8::from_hex(b"#00fbb0")), + "pastel red" => Some(Rgba8::from_hex(b"#db5856")), + "piss yellow" => Some(Rgba8::from_hex(b"#ddd618")), + "bright cyan" => Some(Rgba8::from_hex(b"#41fdfe")), + "dark coral" => Some(Rgba8::from_hex(b"#cf524e")), + "algae green" => Some(Rgba8::from_hex(b"#21c36f")), + "darkish red" => Some(Rgba8::from_hex(b"#a90308")), + "reddy brown" => Some(Rgba8::from_hex(b"#6e1005")), + "blush pink" => Some(Rgba8::from_hex(b"#fe828c")), + "camouflage green" => Some(Rgba8::from_hex(b"#4b6113")), + "lawn green" => Some(Rgba8::from_hex(b"#4da409")), + "putty" => Some(Rgba8::from_hex(b"#beae8a")), + "vibrant blue" => Some(Rgba8::from_hex(b"#0339f8")), + "dark sand" => Some(Rgba8::from_hex(b"#a88f59")), + "purple/blue" => Some(Rgba8::from_hex(b"#5d21d0")), + "saffron" => Some(Rgba8::from_hex(b"#feb209")), + "twilight" => Some(Rgba8::from_hex(b"#4e518b")), + "warm brown" => Some(Rgba8::from_hex(b"#964e02")), + "bluegrey" => Some(Rgba8::from_hex(b"#85a3b2")), + "bubble gum pink" => Some(Rgba8::from_hex(b"#ff69af")), + "duck egg blue" => Some(Rgba8::from_hex(b"#c3fbf4")), + "greenish cyan" => Some(Rgba8::from_hex(b"#2afeb7")), + "petrol" => Some(Rgba8::from_hex(b"#005f6a")), + "royal" => Some(Rgba8::from_hex(b"#0c1793")), + "butter" => Some(Rgba8::from_hex(b"#ffff81")), + "dusty orange" => Some(Rgba8::from_hex(b"#f0833a")), + "off yellow" => Some(Rgba8::from_hex(b"#f1f33f")), + "pale olive green" => Some(Rgba8::from_hex(b"#b1d27b")), + "orangish" => Some(Rgba8::from_hex(b"#fc824a")), + "leaf" => Some(Rgba8::from_hex(b"#71aa34")), + "light blue grey" => Some(Rgba8::from_hex(b"#b7c9e2")), + "dried blood" => Some(Rgba8::from_hex(b"#4b0101")), + "lightish purple" => Some(Rgba8::from_hex(b"#a552e6")), + "rusty red" => Some(Rgba8::from_hex(b"#af2f0d")), + "lavender blue" => Some(Rgba8::from_hex(b"#8b88f8")), + "light grass green" => Some(Rgba8::from_hex(b"#9af764")), + "light mint green" => Some(Rgba8::from_hex(b"#a6fbb2")), + "sunflower" => Some(Rgba8::from_hex(b"#ffc512")), + "velvet" => Some(Rgba8::from_hex(b"#750851")), + "brick orange" => Some(Rgba8::from_hex(b"#c14a09")), + "lightish red" => Some(Rgba8::from_hex(b"#fe2f4a")), + "pure blue" => Some(Rgba8::from_hex(b"#0203e2")), + "twilight blue" => Some(Rgba8::from_hex(b"#0a437a")), + "violet red" => Some(Rgba8::from_hex(b"#a50055")), + "yellowy brown" => Some(Rgba8::from_hex(b"#ae8b0c")), + "carnation" => Some(Rgba8::from_hex(b"#fd798f")), + "muddy yellow" => Some(Rgba8::from_hex(b"#bfac05")), + "dark seafoam green" => Some(Rgba8::from_hex(b"#3eaf76")), + "deep rose" => Some(Rgba8::from_hex(b"#c74767")), + "dusty red" => Some(Rgba8::from_hex(b"#b9484e")), + "grey/blue" => Some(Rgba8::from_hex(b"#647d8e")), + "lemon lime" => Some(Rgba8::from_hex(b"#bffe28")), + "purple/pink" => Some(Rgba8::from_hex(b"#d725de")), + "brown yellow" => Some(Rgba8::from_hex(b"#b29705")), + "purple brown" => Some(Rgba8::from_hex(b"#673a3f")), + "wisteria" => Some(Rgba8::from_hex(b"#a87dc2")), + "banana yellow" => Some(Rgba8::from_hex(b"#fafe4b")), + "lipstick red" => Some(Rgba8::from_hex(b"#c0022f")), + "water blue" => Some(Rgba8::from_hex(b"#0e87cc")), + "brown grey" => Some(Rgba8::from_hex(b"#8d8468")), + "vibrant purple" => Some(Rgba8::from_hex(b"#ad03de")), + "baby green" => Some(Rgba8::from_hex(b"#8cff9e")), + "barf green" => Some(Rgba8::from_hex(b"#94ac02")), + "eggshell blue" => Some(Rgba8::from_hex(b"#c4fff7")), + "sandy yellow" => Some(Rgba8::from_hex(b"#fdee73")), + "cool green" => Some(Rgba8::from_hex(b"#33b864")), + "pale" => Some(Rgba8::from_hex(b"#fff9d0")), + "blue/grey" => Some(Rgba8::from_hex(b"#758da3")), + "hot magenta" => Some(Rgba8::from_hex(b"#f504c9")), + "greyblue" => Some(Rgba8::from_hex(b"#77a1b5")), + "purpley" => Some(Rgba8::from_hex(b"#8756e4")), + "baby shit green" => Some(Rgba8::from_hex(b"#889717")), + "brownish pink" => Some(Rgba8::from_hex(b"#c27e79")), + "dark aquamarine" => Some(Rgba8::from_hex(b"#017371")), + "diarrhea" => Some(Rgba8::from_hex(b"#9f8303")), + "light mustard" => Some(Rgba8::from_hex(b"#f7d560")), + "pale sky blue" => Some(Rgba8::from_hex(b"#bdf6fe")), + "turtle green" => Some(Rgba8::from_hex(b"#75b84f")), + "bright olive" => Some(Rgba8::from_hex(b"#9cbb04")), + "dark grey blue" => Some(Rgba8::from_hex(b"#29465b")), + "greeny brown" => Some(Rgba8::from_hex(b"#696006")), + "lemon green" => Some(Rgba8::from_hex(b"#adf802")), + "light periwinkle" => Some(Rgba8::from_hex(b"#c1c6fc")), + "seaweed green" => Some(Rgba8::from_hex(b"#35ad6b")), + "sunshine yellow" => Some(Rgba8::from_hex(b"#fffd37")), + "ugly purple" => Some(Rgba8::from_hex(b"#a442a0")), + "medium pink" => Some(Rgba8::from_hex(b"#f36196")), + "puke brown" => Some(Rgba8::from_hex(b"#947706")), + "very light pink" => Some(Rgba8::from_hex(b"#fff4f2")), + "viridian" => Some(Rgba8::from_hex(b"#1e9167")), + "bile" => Some(Rgba8::from_hex(b"#b5c306")), + "faded yellow" => Some(Rgba8::from_hex(b"#feff7f")), + "very pale green" => Some(Rgba8::from_hex(b"#cffdbc")), + "vibrant green" => Some(Rgba8::from_hex(b"#0add08")), + "bright lime" => Some(Rgba8::from_hex(b"#87fd05")), + "spearmint" => Some(Rgba8::from_hex(b"#1ef876")), + "light aquamarine" => Some(Rgba8::from_hex(b"#7bfdc7")), + "light sage" => Some(Rgba8::from_hex(b"#bcecac")), + "yellowgreen" => Some(Rgba8::from_hex(b"#bbf90f")), + "baby poo" => Some(Rgba8::from_hex(b"#ab9004")), + "dark seafoam" => Some(Rgba8::from_hex(b"#1fb57a")), + "deep teal" => Some(Rgba8::from_hex(b"#00555a")), + "heather" => Some(Rgba8::from_hex(b"#a484ac")), + "rust orange" => Some(Rgba8::from_hex(b"#c45508")), + "dirty blue" => Some(Rgba8::from_hex(b"#3f829d")), + "fern green" => Some(Rgba8::from_hex(b"#548d44")), + "bright lilac" => Some(Rgba8::from_hex(b"#c95efb")), + "weird green" => Some(Rgba8::from_hex(b"#3ae57f")), + "peacock blue" => Some(Rgba8::from_hex(b"#016795")), + "avocado green" => Some(Rgba8::from_hex(b"#87a922")), + "faded orange" => Some(Rgba8::from_hex(b"#f0944d")), + "grape purple" => Some(Rgba8::from_hex(b"#5d1451")), + "hot green" => Some(Rgba8::from_hex(b"#25ff29")), + "lime yellow" => Some(Rgba8::from_hex(b"#d0fe1d")), + "mango" => Some(Rgba8::from_hex(b"#ffa62b")), + "shamrock" => Some(Rgba8::from_hex(b"#01b44c")), + "bubblegum" => Some(Rgba8::from_hex(b"#ff6cb5")), + "purplish brown" => Some(Rgba8::from_hex(b"#6b4247")), + "vomit yellow" => Some(Rgba8::from_hex(b"#c7c10c")), + "pale cyan" => Some(Rgba8::from_hex(b"#b7fffa")), + "key lime" => Some(Rgba8::from_hex(b"#aeff6e")), + "tomato red" => Some(Rgba8::from_hex(b"#ec2d01")), + "lightgreen" => Some(Rgba8::from_hex(b"#76ff7b")), + "merlot" => Some(Rgba8::from_hex(b"#730039")), + "night blue" => Some(Rgba8::from_hex(b"#040348")), + "purpleish pink" => Some(Rgba8::from_hex(b"#df4ec8")), + "apple" => Some(Rgba8::from_hex(b"#6ecb3c")), + "baby poop green" => Some(Rgba8::from_hex(b"#8f9805")), + "green apple" => Some(Rgba8::from_hex(b"#5edc1f")), + "heliotrope" => Some(Rgba8::from_hex(b"#d94ff5")), + "yellow/green" => Some(Rgba8::from_hex(b"#c8fd3d")), + "almost black" => Some(Rgba8::from_hex(b"#070d0d")), + "cool blue" => Some(Rgba8::from_hex(b"#4984b8")), + "leafy green" => Some(Rgba8::from_hex(b"#51b73b")), + "mustard brown" => Some(Rgba8::from_hex(b"#ac7e04")), + "dusk" => Some(Rgba8::from_hex(b"#4e5481")), + "dull brown" => Some(Rgba8::from_hex(b"#876e4b")), + "frog green" => Some(Rgba8::from_hex(b"#58bc08")), + "vivid green" => Some(Rgba8::from_hex(b"#2fef10")), + "bright light green" => Some(Rgba8::from_hex(b"#2dfe54")), + "fluro green" => Some(Rgba8::from_hex(b"#0aff02")), + "kiwi" => Some(Rgba8::from_hex(b"#9cef43")), + "seaweed" => Some(Rgba8::from_hex(b"#18d17b")), + "navy green" => Some(Rgba8::from_hex(b"#35530a")), + "ultramarine blue" => Some(Rgba8::from_hex(b"#1805db")), + "iris" => Some(Rgba8::from_hex(b"#6258c4")), + "pastel orange" => Some(Rgba8::from_hex(b"#ff964f")), + "yellowish orange" => Some(Rgba8::from_hex(b"#ffab0f")), + "perrywinkle" => Some(Rgba8::from_hex(b"#8f8ce7")), + "tealish" => Some(Rgba8::from_hex(b"#24bca8")), + "dark plum" => Some(Rgba8::from_hex(b"#3f012c")), + "pear" => Some(Rgba8::from_hex(b"#cbf85f")), + "pinkish orange" => Some(Rgba8::from_hex(b"#ff724c")), + "midnight purple" => Some(Rgba8::from_hex(b"#280137")), + "light urple" => Some(Rgba8::from_hex(b"#b36ff6")), + "dark mint" => Some(Rgba8::from_hex(b"#48c072")), + "greenish tan" => Some(Rgba8::from_hex(b"#bccb7a")), + "light burgundy" => Some(Rgba8::from_hex(b"#a8415b")), + "turquoise blue" => Some(Rgba8::from_hex(b"#06b1c4")), + "ugly pink" => Some(Rgba8::from_hex(b"#cd7584")), + "sandy" => Some(Rgba8::from_hex(b"#f1da7a")), + "electric pink" => Some(Rgba8::from_hex(b"#ff0490")), + "muted purple" => Some(Rgba8::from_hex(b"#805b87")), + "mid green" => Some(Rgba8::from_hex(b"#50a747")), + "greyish" => Some(Rgba8::from_hex(b"#a8a495")), + "neon yellow" => Some(Rgba8::from_hex(b"#cfff04")), + "banana" => Some(Rgba8::from_hex(b"#ffff7e")), + "carnation pink" => Some(Rgba8::from_hex(b"#ff7fa7")), + "tomato" => Some(Rgba8::from_hex(b"#ef4026")), + "sea" => Some(Rgba8::from_hex(b"#3c9992")), + "muddy brown" => Some(Rgba8::from_hex(b"#886806")), + "turquoise green" => Some(Rgba8::from_hex(b"#04f489")), + "buff" => Some(Rgba8::from_hex(b"#fef69e")), + "fawn" => Some(Rgba8::from_hex(b"#cfaf7b")), + "muted blue" => Some(Rgba8::from_hex(b"#3b719f")), + "pale rose" => Some(Rgba8::from_hex(b"#fdc1c5")), + "dark mint green" => Some(Rgba8::from_hex(b"#20c073")), + "amethyst" => Some(Rgba8::from_hex(b"#9b5fc0")), + "blue/green" => Some(Rgba8::from_hex(b"#0f9b8e")), + "chestnut" => Some(Rgba8::from_hex(b"#742802")), + "sick green" => Some(Rgba8::from_hex(b"#9db92c")), + "pea" => Some(Rgba8::from_hex(b"#a4bf20")), + "rusty orange" => Some(Rgba8::from_hex(b"#cd5909")), + "stone" => Some(Rgba8::from_hex(b"#ada587")), + "rose red" => Some(Rgba8::from_hex(b"#be013c")), + "pale aqua" => Some(Rgba8::from_hex(b"#b8ffeb")), + "deep orange" => Some(Rgba8::from_hex(b"#dc4d01")), + "earth" => Some(Rgba8::from_hex(b"#a2653e")), + "mossy green" => Some(Rgba8::from_hex(b"#638b27")), + "grassy green" => Some(Rgba8::from_hex(b"#419c03")), + "pale lime green" => Some(Rgba8::from_hex(b"#b1ff65")), + "light grey blue" => Some(Rgba8::from_hex(b"#9dbcd4")), + "pale grey" => Some(Rgba8::from_hex(b"#fdfdfe")), + "asparagus" => Some(Rgba8::from_hex(b"#77ab56")), + "blueberry" => Some(Rgba8::from_hex(b"#464196")), + "purple red" => Some(Rgba8::from_hex(b"#990147")), + "pale lime" => Some(Rgba8::from_hex(b"#befd73")), + "greenish teal" => Some(Rgba8::from_hex(b"#32bf84")), + "caramel" => Some(Rgba8::from_hex(b"#af6f09")), + "deep magenta" => Some(Rgba8::from_hex(b"#a0025c")), + "light peach" => Some(Rgba8::from_hex(b"#ffd8b1")), + "milk chocolate" => Some(Rgba8::from_hex(b"#7f4e1e")), + "ocher" => Some(Rgba8::from_hex(b"#bf9b0c")), + "off green" => Some(Rgba8::from_hex(b"#6ba353")), + "purply pink" => Some(Rgba8::from_hex(b"#f075e6")), + "lightblue" => Some(Rgba8::from_hex(b"#7bc8f6")), + "dusky blue" => Some(Rgba8::from_hex(b"#475f94")), + "golden" => Some(Rgba8::from_hex(b"#f5bf03")), + "light beige" => Some(Rgba8::from_hex(b"#fffeb6")), + "butter yellow" => Some(Rgba8::from_hex(b"#fffd74")), + "dusky purple" => Some(Rgba8::from_hex(b"#895b7b")), + "french blue" => Some(Rgba8::from_hex(b"#436bad")), + "ugly yellow" => Some(Rgba8::from_hex(b"#d0c101")), + "greeny yellow" => Some(Rgba8::from_hex(b"#c6f808")), + "orangish red" => Some(Rgba8::from_hex(b"#f43605")), + "shamrock green" => Some(Rgba8::from_hex(b"#02c14d")), + "orangish brown" => Some(Rgba8::from_hex(b"#b25f03")), + "tree green" => Some(Rgba8::from_hex(b"#2a7e19")), + "deep violet" => Some(Rgba8::from_hex(b"#490648")), + "gunmetal" => Some(Rgba8::from_hex(b"#536267")), + "blue/purple" => Some(Rgba8::from_hex(b"#5a06ef")), + "cherry" => Some(Rgba8::from_hex(b"#cf0234")), + "sandy brown" => Some(Rgba8::from_hex(b"#c4a661")), + "warm grey" => Some(Rgba8::from_hex(b"#978a84")), + "dark indigo" => Some(Rgba8::from_hex(b"#1f0954")), + "midnight" => Some(Rgba8::from_hex(b"#03012d")), + "bluey green" => Some(Rgba8::from_hex(b"#2bb179")), + "grey pink" => Some(Rgba8::from_hex(b"#c3909b")), + "soft purple" => Some(Rgba8::from_hex(b"#a66fb5")), + "blood" => Some(Rgba8::from_hex(b"#770001")), + "brown red" => Some(Rgba8::from_hex(b"#922b05")), + "medium grey" => Some(Rgba8::from_hex(b"#7d7f7c")), + "berry" => Some(Rgba8::from_hex(b"#990f4b")), + "poo" => Some(Rgba8::from_hex(b"#8f7303")), + "purpley pink" => Some(Rgba8::from_hex(b"#c83cb9")), + "light salmon" => Some(Rgba8::from_hex(b"#fea993")), + "snot" => Some(Rgba8::from_hex(b"#acbb0d")), + "easter purple" => Some(Rgba8::from_hex(b"#c071fe")), + "light yellow green" => Some(Rgba8::from_hex(b"#ccfd7f")), + "dark navy blue" => Some(Rgba8::from_hex(b"#00022e")), + "drab" => Some(Rgba8::from_hex(b"#828344")), + "light rose" => Some(Rgba8::from_hex(b"#ffc5cb")), + "rouge" => Some(Rgba8::from_hex(b"#ab1239")), + "purplish red" => Some(Rgba8::from_hex(b"#b0054b")), + "slime green" => Some(Rgba8::from_hex(b"#99cc04")), + "baby poop" => Some(Rgba8::from_hex(b"#937c00")), + "irish green" => Some(Rgba8::from_hex(b"#019529")), + "pink/purple" => Some(Rgba8::from_hex(b"#ef1de7")), + "dark navy" => Some(Rgba8::from_hex(b"#000435")), + "greeny blue" => Some(Rgba8::from_hex(b"#42b395")), + "light plum" => Some(Rgba8::from_hex(b"#9d5783")), + "pinkish grey" => Some(Rgba8::from_hex(b"#c8aca9")), + "dirty orange" => Some(Rgba8::from_hex(b"#c87606")), + "rust red" => Some(Rgba8::from_hex(b"#aa2704")), + "pale lilac" => Some(Rgba8::from_hex(b"#e4cbff")), + "orangey red" => Some(Rgba8::from_hex(b"#fa4224")), + "primary blue" => Some(Rgba8::from_hex(b"#0804f9")), + "kermit green" => Some(Rgba8::from_hex(b"#5cb200")), + "brownish purple" => Some(Rgba8::from_hex(b"#76424e")), + "murky green" => Some(Rgba8::from_hex(b"#6c7a0e")), + "wheat" => Some(Rgba8::from_hex(b"#fbdd7e")), + "very dark purple" => Some(Rgba8::from_hex(b"#2a0134")), + "bottle green" => Some(Rgba8::from_hex(b"#044a05")), + "watermelon" => Some(Rgba8::from_hex(b"#fd4659")), + "deep sky blue" => Some(Rgba8::from_hex(b"#0d75f8")), + "fire engine red" => Some(Rgba8::from_hex(b"#fe0002")), + "yellow ochre" => Some(Rgba8::from_hex(b"#cb9d06")), + "pumpkin orange" => Some(Rgba8::from_hex(b"#fb7d07")), + "pale olive" => Some(Rgba8::from_hex(b"#b9cc81")), + "light lilac" => Some(Rgba8::from_hex(b"#edc8ff")), + "lightish green" => Some(Rgba8::from_hex(b"#61e160")), + "carolina blue" => Some(Rgba8::from_hex(b"#8ab8fe")), + "mulberry" => Some(Rgba8::from_hex(b"#920a4e")), + "shocking pink" => Some(Rgba8::from_hex(b"#fe02a2")), + "auburn" => Some(Rgba8::from_hex(b"#9a3001")), + "bright lime green" => Some(Rgba8::from_hex(b"#65fe08")), + "celadon" => Some(Rgba8::from_hex(b"#befdb7")), + "pinkish brown" => Some(Rgba8::from_hex(b"#b17261")), + "poo brown" => Some(Rgba8::from_hex(b"#885f01")), + "bright sky blue" => Some(Rgba8::from_hex(b"#02ccfe")), + "celery" => Some(Rgba8::from_hex(b"#c1fd95")), + "dirt brown" => Some(Rgba8::from_hex(b"#836539")), + "strawberry" => Some(Rgba8::from_hex(b"#fb2943")), + "dark lime" => Some(Rgba8::from_hex(b"#84b701")), + "copper" => Some(Rgba8::from_hex(b"#b66325")), + "medium brown" => Some(Rgba8::from_hex(b"#7f5112")), + "muted green" => Some(Rgba8::from_hex(b"#5fa052")), + "robin's egg" => Some(Rgba8::from_hex(b"#6dedfd")), + "bright aqua" => Some(Rgba8::from_hex(b"#0bf9ea")), + "bright lavender" => Some(Rgba8::from_hex(b"#c760ff")), + "ivory" => Some(Rgba8::from_hex(b"#ffffcb")), + "very light purple" => Some(Rgba8::from_hex(b"#f6cefc")), + "light navy" => Some(Rgba8::from_hex(b"#155084")), + "pink red" => Some(Rgba8::from_hex(b"#f5054f")), + "olive brown" => Some(Rgba8::from_hex(b"#645403")), + "poop brown" => Some(Rgba8::from_hex(b"#7a5901")), + "mustard green" => Some(Rgba8::from_hex(b"#a8b504")), + "ocean green" => Some(Rgba8::from_hex(b"#3d9973")), + "very dark blue" => Some(Rgba8::from_hex(b"#000133")), + "dusty green" => Some(Rgba8::from_hex(b"#76a973")), + "light navy blue" => Some(Rgba8::from_hex(b"#2e5a88")), + "minty green" => Some(Rgba8::from_hex(b"#0bf77d")), + "adobe" => Some(Rgba8::from_hex(b"#bd6c48")), + "barney" => Some(Rgba8::from_hex(b"#ac1db8")), + "jade green" => Some(Rgba8::from_hex(b"#2baf6a")), + "bright light blue" => Some(Rgba8::from_hex(b"#26f7fd")), + "light lime" => Some(Rgba8::from_hex(b"#aefd6c")), + "dark khaki" => Some(Rgba8::from_hex(b"#9b8f55")), + "orange yellow" => Some(Rgba8::from_hex(b"#ffad01")), + "ocre" => Some(Rgba8::from_hex(b"#c69c04")), + "maize" => Some(Rgba8::from_hex(b"#f4d054")), + "faded pink" => Some(Rgba8::from_hex(b"#de9dac")), + "british racing green" => Some(Rgba8::from_hex(b"#05480d")), + "sandstone" => Some(Rgba8::from_hex(b"#c9ae74")), + "mud brown" => Some(Rgba8::from_hex(b"#60460f")), + "light sea green" => Some(Rgba8::from_hex(b"#98f6b0")), + "robin egg blue" => Some(Rgba8::from_hex(b"#8af1fe")), + "aqua marine" => Some(Rgba8::from_hex(b"#2ee8bb")), + "dark sea green" => Some(Rgba8::from_hex(b"#11875d")), + "soft pink" => Some(Rgba8::from_hex(b"#fdb0c0")), + "orangey brown" => Some(Rgba8::from_hex(b"#b16002")), + "cherry red" => Some(Rgba8::from_hex(b"#f7022a")), + "burnt yellow" => Some(Rgba8::from_hex(b"#d5ab09")), + "brownish grey" => Some(Rgba8::from_hex(b"#86775f")), + "camel" => Some(Rgba8::from_hex(b"#c69f59")), + "purplish grey" => Some(Rgba8::from_hex(b"#7a687f")), + "marine" => Some(Rgba8::from_hex(b"#042e60")), + "greyish pink" => Some(Rgba8::from_hex(b"#c88d94")), + "pale turquoise" => Some(Rgba8::from_hex(b"#a5fbd5")), + "pastel yellow" => Some(Rgba8::from_hex(b"#fffe71")), + "bluey purple" => Some(Rgba8::from_hex(b"#6241c7")), + "canary yellow" => Some(Rgba8::from_hex(b"#fffe40")), + "faded red" => Some(Rgba8::from_hex(b"#d3494e")), + "sepia" => Some(Rgba8::from_hex(b"#985e2b")), + "coffee" => Some(Rgba8::from_hex(b"#a6814c")), + "bright magenta" => Some(Rgba8::from_hex(b"#ff08e8")), + "mocha" => Some(Rgba8::from_hex(b"#9d7651")), + "ecru" => Some(Rgba8::from_hex(b"#feffca")), + "purpleish" => Some(Rgba8::from_hex(b"#98568d")), + "cranberry" => Some(Rgba8::from_hex(b"#9e003a")), + "darkish green" => Some(Rgba8::from_hex(b"#287c37")), + "brown orange" => Some(Rgba8::from_hex(b"#b96902")), + "dusky rose" => Some(Rgba8::from_hex(b"#ba6873")), + "melon" => Some(Rgba8::from_hex(b"#ff7855")), + "sickly green" => Some(Rgba8::from_hex(b"#94b21c")), + "silver" => Some(Rgba8::from_hex(b"#c5c9c7")), + "purply blue" => Some(Rgba8::from_hex(b"#661aee")), + "purpleish blue" => Some(Rgba8::from_hex(b"#6140ef")), + "hospital green" => Some(Rgba8::from_hex(b"#9be5aa")), + "shit brown" => Some(Rgba8::from_hex(b"#7b5804")), + "mid blue" => Some(Rgba8::from_hex(b"#276ab3")), + "amber" => Some(Rgba8::from_hex(b"#feb308")), + "easter green" => Some(Rgba8::from_hex(b"#8cfd7e")), + "soft blue" => Some(Rgba8::from_hex(b"#6488ea")), + "cerulean blue" => Some(Rgba8::from_hex(b"#056eee")), + "golden brown" => Some(Rgba8::from_hex(b"#b27a01")), + "bright turquoise" => Some(Rgba8::from_hex(b"#0ffef9")), + "red pink" => Some(Rgba8::from_hex(b"#fa2a55")), + "red purple" => Some(Rgba8::from_hex(b"#820747")), + "greyish brown" => Some(Rgba8::from_hex(b"#7a6a4f")), + "vermillion" => Some(Rgba8::from_hex(b"#f4320c")), + "russet" => Some(Rgba8::from_hex(b"#a13905")), + "steel grey" => Some(Rgba8::from_hex(b"#6f828a")), + "lighter purple" => Some(Rgba8::from_hex(b"#a55af4")), + "bright violet" => Some(Rgba8::from_hex(b"#ad0afd")), + "prussian blue" => Some(Rgba8::from_hex(b"#004577")), + "slate green" => Some(Rgba8::from_hex(b"#658d6d")), + "dirty pink" => Some(Rgba8::from_hex(b"#ca7b80")), + "dark blue green" => Some(Rgba8::from_hex(b"#005249")), + "pine" => Some(Rgba8::from_hex(b"#2b5d34")), + "yellowy green" => Some(Rgba8::from_hex(b"#bff128")), + "dark gold" => Some(Rgba8::from_hex(b"#b59410")), + "bluish" => Some(Rgba8::from_hex(b"#2976bb")), + "darkish blue" => Some(Rgba8::from_hex(b"#014182")), + "dull red" => Some(Rgba8::from_hex(b"#bb3f3f")), + "pinky red" => Some(Rgba8::from_hex(b"#fc2647")), + "bronze" => Some(Rgba8::from_hex(b"#a87900")), + "pale teal" => Some(Rgba8::from_hex(b"#82cbb2")), + "military green" => Some(Rgba8::from_hex(b"#667c3e")), + "barbie pink" => Some(Rgba8::from_hex(b"#fe46a5")), + "bubblegum pink" => Some(Rgba8::from_hex(b"#fe83cc")), + "pea soup green" => Some(Rgba8::from_hex(b"#94a617")), + "dark mustard" => Some(Rgba8::from_hex(b"#a88905")), + "shit" => Some(Rgba8::from_hex(b"#7f5f00")), + "medium purple" => Some(Rgba8::from_hex(b"#9e43a2")), + "very dark green" => Some(Rgba8::from_hex(b"#062e03")), + "dirt" => Some(Rgba8::from_hex(b"#8a6e45")), + "dusky pink" => Some(Rgba8::from_hex(b"#cc7a8b")), + "red violet" => Some(Rgba8::from_hex(b"#9e0168")), + "lemon yellow" => Some(Rgba8::from_hex(b"#fdff38")), + "pistachio" => Some(Rgba8::from_hex(b"#c0fa8b")), + "dull yellow" => Some(Rgba8::from_hex(b"#eedc5b")), + "dark lime green" => Some(Rgba8::from_hex(b"#7ebd01")), + "denim blue" => Some(Rgba8::from_hex(b"#3b5b92")), + "teal blue" => Some(Rgba8::from_hex(b"#01889f")), + "lightish blue" => Some(Rgba8::from_hex(b"#3d7afd")), + "purpley blue" => Some(Rgba8::from_hex(b"#5f34e7")), + "light indigo" => Some(Rgba8::from_hex(b"#6d5acf")), + "swamp green" => Some(Rgba8::from_hex(b"#748500")), + "brown green" => Some(Rgba8::from_hex(b"#706c11")), + "dark maroon" => Some(Rgba8::from_hex(b"#3c0008")), + "hot purple" => Some(Rgba8::from_hex(b"#cb00f5")), + "dark forest green" => Some(Rgba8::from_hex(b"#002d04")), + "faded blue" => Some(Rgba8::from_hex(b"#658cbb")), + "drab green" => Some(Rgba8::from_hex(b"#749551")), + "light lime green" => Some(Rgba8::from_hex(b"#b9ff66")), + "snot green" => Some(Rgba8::from_hex(b"#9dc100")), + "yellowish" => Some(Rgba8::from_hex(b"#faee66")), + "light blue green" => Some(Rgba8::from_hex(b"#7efbb3")), + "bordeaux" => Some(Rgba8::from_hex(b"#7b002c")), + "light mauve" => Some(Rgba8::from_hex(b"#c292a1")), + "ocean" => Some(Rgba8::from_hex(b"#017b92")), + "marigold" => Some(Rgba8::from_hex(b"#fcc006")), + "muddy green" => Some(Rgba8::from_hex(b"#657432")), + "dull orange" => Some(Rgba8::from_hex(b"#d8863b")), + "steel" => Some(Rgba8::from_hex(b"#738595")), + "electric purple" => Some(Rgba8::from_hex(b"#aa23ff")), + "fluorescent green" => Some(Rgba8::from_hex(b"#08ff08")), + "yellowish brown" => Some(Rgba8::from_hex(b"#9b7a01")), + "blush" => Some(Rgba8::from_hex(b"#f29e8e")), + "soft green" => Some(Rgba8::from_hex(b"#6fc276")), + "bright orange" => Some(Rgba8::from_hex(b"#ff5b00")), + "lemon" => Some(Rgba8::from_hex(b"#fdff52")), + "purple grey" => Some(Rgba8::from_hex(b"#866f85")), + "acid green" => Some(Rgba8::from_hex(b"#8ffe09")), + "pale lavender" => Some(Rgba8::from_hex(b"#eecffe")), + "violet blue" => Some(Rgba8::from_hex(b"#510ac9")), + "light forest green" => Some(Rgba8::from_hex(b"#4f9153")), + "burnt red" => Some(Rgba8::from_hex(b"#9f2305")), + "khaki green" => Some(Rgba8::from_hex(b"#728639")), + "cerise" => Some(Rgba8::from_hex(b"#de0c62")), + "faded purple" => Some(Rgba8::from_hex(b"#916e99")), + "apricot" => Some(Rgba8::from_hex(b"#ffb16d")), + "dark olive green" => Some(Rgba8::from_hex(b"#3c4d03")), + "grey brown" => Some(Rgba8::from_hex(b"#7f7053")), + "green grey" => Some(Rgba8::from_hex(b"#77926f")), + "true blue" => Some(Rgba8::from_hex(b"#010fcc")), + "pale violet" => Some(Rgba8::from_hex(b"#ceaefa")), + "periwinkle blue" => Some(Rgba8::from_hex(b"#8f99fb")), + "light sky blue" => Some(Rgba8::from_hex(b"#c6fcff")), + "blurple" => Some(Rgba8::from_hex(b"#5539cc")), + "green brown" => Some(Rgba8::from_hex(b"#544e03")), + "bluegreen" => Some(Rgba8::from_hex(b"#017a79")), + "bright teal" => Some(Rgba8::from_hex(b"#01f9c6")), + "brownish yellow" => Some(Rgba8::from_hex(b"#c9b003")), + "pea soup" => Some(Rgba8::from_hex(b"#929901")), + "forest" => Some(Rgba8::from_hex(b"#0b5509")), + "barney purple" => Some(Rgba8::from_hex(b"#a00498")), + "ultramarine" => Some(Rgba8::from_hex(b"#2000b1")), + "purplish" => Some(Rgba8::from_hex(b"#94568c")), + "puke yellow" => Some(Rgba8::from_hex(b"#c2be0e")), + "bluish grey" => Some(Rgba8::from_hex(b"#748b97")), + "dark periwinkle" => Some(Rgba8::from_hex(b"#665fd1")), + "dark lilac" => Some(Rgba8::from_hex(b"#9c6da5")), + "reddish" => Some(Rgba8::from_hex(b"#c44240")), + "light maroon" => Some(Rgba8::from_hex(b"#a24857")), + "dusty purple" => Some(Rgba8::from_hex(b"#825f87")), + "terra cotta" => Some(Rgba8::from_hex(b"#c9643b")), + "avocado" => Some(Rgba8::from_hex(b"#90b134")), + "marine blue" => Some(Rgba8::from_hex(b"#01386a")), + "teal green" => Some(Rgba8::from_hex(b"#25a36f")), + "slate grey" => Some(Rgba8::from_hex(b"#59656d")), + "lighter green" => Some(Rgba8::from_hex(b"#75fd63")), + "electric green" => Some(Rgba8::from_hex(b"#21fc0d")), + "dusty blue" => Some(Rgba8::from_hex(b"#5a86ad")), + "golden yellow" => Some(Rgba8::from_hex(b"#fec615")), + "bright yellow" => Some(Rgba8::from_hex(b"#fffd01")), + "light lavender" => Some(Rgba8::from_hex(b"#dfc5fe")), + "umber" => Some(Rgba8::from_hex(b"#b26400")), + "poop" => Some(Rgba8::from_hex(b"#7f5e00")), + "dark peach" => Some(Rgba8::from_hex(b"#de7e5d")), + "jungle green" => Some(Rgba8::from_hex(b"#048243")), + "eggshell" => Some(Rgba8::from_hex(b"#ffffd4")), + "denim" => Some(Rgba8::from_hex(b"#3b638c")), + "yellow brown" => Some(Rgba8::from_hex(b"#b79400")), + "dull purple" => Some(Rgba8::from_hex(b"#84597e")), + "chocolate brown" => Some(Rgba8::from_hex(b"#411900")), + "wine red" => Some(Rgba8::from_hex(b"#7b0323")), + "neon blue" => Some(Rgba8::from_hex(b"#04d9ff")), + "dirty green" => Some(Rgba8::from_hex(b"#667e2c")), + "light tan" => Some(Rgba8::from_hex(b"#fbeeac")), + "ice blue" => Some(Rgba8::from_hex(b"#d7fffe")), + "cadet blue" => Some(Rgba8::from_hex(b"#4e7496")), + "dark mauve" => Some(Rgba8::from_hex(b"#874c62")), + "very light blue" => Some(Rgba8::from_hex(b"#d5ffff")), + "grey purple" => Some(Rgba8::from_hex(b"#826d8c")), + "pastel pink" => Some(Rgba8::from_hex(b"#ffbacd")), + "very light green" => Some(Rgba8::from_hex(b"#d1ffbd")), + "dark sky blue" => Some(Rgba8::from_hex(b"#448ee4")), + "evergreen" => Some(Rgba8::from_hex(b"#05472a")), + "dull pink" => Some(Rgba8::from_hex(b"#d5869d")), + "aubergine" => Some(Rgba8::from_hex(b"#3d0734")), + "mahogany" => Some(Rgba8::from_hex(b"#4a0100")), + "reddish orange" => Some(Rgba8::from_hex(b"#f8481c")), + "deep green" => Some(Rgba8::from_hex(b"#02590f")), + "vomit green" => Some(Rgba8::from_hex(b"#89a203")), + "purple pink" => Some(Rgba8::from_hex(b"#e03fd8")), + "dusty pink" => Some(Rgba8::from_hex(b"#d58a94")), + "faded green" => Some(Rgba8::from_hex(b"#7bb274")), + "camo green" => Some(Rgba8::from_hex(b"#526525")), + "pinky purple" => Some(Rgba8::from_hex(b"#c94cbe")), + "pink purple" => Some(Rgba8::from_hex(b"#db4bda")), + "brownish red" => Some(Rgba8::from_hex(b"#9e3623")), + "dark rose" => Some(Rgba8::from_hex(b"#b5485d")), + "mud" => Some(Rgba8::from_hex(b"#735c12")), + "brownish" => Some(Rgba8::from_hex(b"#9c6d57")), + "emerald green" => Some(Rgba8::from_hex(b"#028f1e")), + "pale brown" => Some(Rgba8::from_hex(b"#b1916e")), + "dull blue" => Some(Rgba8::from_hex(b"#49759c")), + "burnt umber" => Some(Rgba8::from_hex(b"#a0450e")), + "medium green" => Some(Rgba8::from_hex(b"#39ad48")), + "clay" => Some(Rgba8::from_hex(b"#b66a50")), + "light aqua" => Some(Rgba8::from_hex(b"#8cffdb")), + "light olive green" => Some(Rgba8::from_hex(b"#a4be5c")), + "brownish orange" => Some(Rgba8::from_hex(b"#cb7723")), + "dark aqua" => Some(Rgba8::from_hex(b"#05696b")), + "purplish pink" => Some(Rgba8::from_hex(b"#ce5dae")), + "dark salmon" => Some(Rgba8::from_hex(b"#c85a53")), + "greenish grey" => Some(Rgba8::from_hex(b"#96ae8d")), + "jade" => Some(Rgba8::from_hex(b"#1fa774")), + "ugly green" => Some(Rgba8::from_hex(b"#7a9703")), + "dark beige" => Some(Rgba8::from_hex(b"#ac9362")), + "emerald" => Some(Rgba8::from_hex(b"#01a049")), + "pale red" => Some(Rgba8::from_hex(b"#d9544d")), + "light magenta" => Some(Rgba8::from_hex(b"#fa5ff7")), + "sky" => Some(Rgba8::from_hex(b"#82cafc")), + "light cyan" => Some(Rgba8::from_hex(b"#acfffc")), + "yellow orange" => Some(Rgba8::from_hex(b"#fcb001")), + "reddish purple" => Some(Rgba8::from_hex(b"#910951")), + "reddish pink" => Some(Rgba8::from_hex(b"#fe2c54")), + "orchid" => Some(Rgba8::from_hex(b"#c875c4")), + "dirty yellow" => Some(Rgba8::from_hex(b"#cdc50a")), + "orange red" => Some(Rgba8::from_hex(b"#fd411e")), + "deep red" => Some(Rgba8::from_hex(b"#9a0200")), + "orange brown" => Some(Rgba8::from_hex(b"#be6400")), + "cobalt blue" => Some(Rgba8::from_hex(b"#030aa7")), + "neon pink" => Some(Rgba8::from_hex(b"#fe019a")), + "rose pink" => Some(Rgba8::from_hex(b"#f7879a")), + "greyish purple" => Some(Rgba8::from_hex(b"#887191")), + "raspberry" => Some(Rgba8::from_hex(b"#b00149")), + "aqua green" => Some(Rgba8::from_hex(b"#12e193")), + "salmon pink" => Some(Rgba8::from_hex(b"#fe7b7c")), + "tangerine" => Some(Rgba8::from_hex(b"#ff9408")), + "brownish green" => Some(Rgba8::from_hex(b"#6a6e09")), + "red brown" => Some(Rgba8::from_hex(b"#8b2e16")), + "greenish brown" => Some(Rgba8::from_hex(b"#696112")), + "pumpkin" => Some(Rgba8::from_hex(b"#e17701")), + "pine green" => Some(Rgba8::from_hex(b"#0a481e")), + "charcoal" => Some(Rgba8::from_hex(b"#343837")), + "baby pink" => Some(Rgba8::from_hex(b"#ffb7ce")), + "cornflower" => Some(Rgba8::from_hex(b"#6a79f7")), + "blue violet" => Some(Rgba8::from_hex(b"#5d06e9")), + "chocolate" => Some(Rgba8::from_hex(b"#3d1c02")), + "greyish green" => Some(Rgba8::from_hex(b"#82a67d")), + "scarlet" => Some(Rgba8::from_hex(b"#be0119")), + "green yellow" => Some(Rgba8::from_hex(b"#c9ff27")), + "dark olive" => Some(Rgba8::from_hex(b"#373e02")), + "sienna" => Some(Rgba8::from_hex(b"#a9561e")), + "pastel purple" => Some(Rgba8::from_hex(b"#caa0ff")), + "terracotta" => Some(Rgba8::from_hex(b"#ca6641")), + "aqua blue" => Some(Rgba8::from_hex(b"#02d8e9")), + "sage green" => Some(Rgba8::from_hex(b"#88b378")), + "blood red" => Some(Rgba8::from_hex(b"#980002")), + "deep pink" => Some(Rgba8::from_hex(b"#cb0162")), + "grass" => Some(Rgba8::from_hex(b"#5cac2d")), + "moss" => Some(Rgba8::from_hex(b"#769958")), + "pastel blue" => Some(Rgba8::from_hex(b"#a2bffe")), + "bluish green" => Some(Rgba8::from_hex(b"#10a674")), + "green blue" => Some(Rgba8::from_hex(b"#06b48b")), + "dark tan" => Some(Rgba8::from_hex(b"#af884a")), + "greenish blue" => Some(Rgba8::from_hex(b"#0b8b87")), + "pale orange" => Some(Rgba8::from_hex(b"#ffa756")), + "vomit" => Some(Rgba8::from_hex(b"#a2a415")), + "forrest green" => Some(Rgba8::from_hex(b"#154406")), + "dark lavender" => Some(Rgba8::from_hex(b"#856798")), + "dark violet" => Some(Rgba8::from_hex(b"#34013f")), + "purple blue" => Some(Rgba8::from_hex(b"#632de9")), + "dark cyan" => Some(Rgba8::from_hex(b"#0a888a")), + "olive drab" => Some(Rgba8::from_hex(b"#6f7632")), + "pinkish" => Some(Rgba8::from_hex(b"#d46a7e")), + "cobalt" => Some(Rgba8::from_hex(b"#1e488f")), + "neon purple" => Some(Rgba8::from_hex(b"#bc13fe")), + "light turquoise" => Some(Rgba8::from_hex(b"#7ef4cc")), + "apple green" => Some(Rgba8::from_hex(b"#76cd26")), + "dull green" => Some(Rgba8::from_hex(b"#74a662")), + "wine" => Some(Rgba8::from_hex(b"#80013f")), + "powder blue" => Some(Rgba8::from_hex(b"#b1d1fc")), + "off white" => Some(Rgba8::from_hex(b"#ffffe4")), + "electric blue" => Some(Rgba8::from_hex(b"#0652ff")), + "dark turquoise" => Some(Rgba8::from_hex(b"#045c5a")), + "blue purple" => Some(Rgba8::from_hex(b"#5729ce")), + "azure" => Some(Rgba8::from_hex(b"#069af3")), + "bright red" => Some(Rgba8::from_hex(b"#ff000d")), + "pinkish red" => Some(Rgba8::from_hex(b"#f10c45")), + "cornflower blue" => Some(Rgba8::from_hex(b"#5170d7")), + "light olive" => Some(Rgba8::from_hex(b"#acbf69")), + "grape" => Some(Rgba8::from_hex(b"#6c3461")), + "greyish blue" => Some(Rgba8::from_hex(b"#5e819d")), + "purplish blue" => Some(Rgba8::from_hex(b"#601ef9")), + "yellowish green" => Some(Rgba8::from_hex(b"#b0dd16")), + "greenish yellow" => Some(Rgba8::from_hex(b"#cdfd02")), + "medium blue" => Some(Rgba8::from_hex(b"#2c6fbb")), + "dusty rose" => Some(Rgba8::from_hex(b"#c0737a")), + "light violet" => Some(Rgba8::from_hex(b"#d6b4fc")), + "midnight blue" => Some(Rgba8::from_hex(b"#020035")), + "bluish purple" => Some(Rgba8::from_hex(b"#703be7")), + "red orange" => Some(Rgba8::from_hex(b"#fd3c06")), + "dark magenta" => Some(Rgba8::from_hex(b"#960056")), + "greenish" => Some(Rgba8::from_hex(b"#40a368")), + "ocean blue" => Some(Rgba8::from_hex(b"#03719c")), + "coral" => Some(Rgba8::from_hex(b"#fc5a50")), + "cream" => Some(Rgba8::from_hex(b"#ffffc2")), + "reddish brown" => Some(Rgba8::from_hex(b"#7f2b0a")), + "burnt sienna" => Some(Rgba8::from_hex(b"#b04e0f")), + "brick" => Some(Rgba8::from_hex(b"#a03623")), + "sage" => Some(Rgba8::from_hex(b"#87ae73")), + "grey green" => Some(Rgba8::from_hex(b"#789b73")), + "white" => Some(Rgba8::from_hex(b"#ffffff")), + "robin's egg blue" => Some(Rgba8::from_hex(b"#98eff9")), + "moss green" => Some(Rgba8::from_hex(b"#658b38")), + "steel blue" => Some(Rgba8::from_hex(b"#5a7d9a")), + "eggplant" => Some(Rgba8::from_hex(b"#380835")), + "light yellow" => Some(Rgba8::from_hex(b"#fffe7a")), + "leaf green" => Some(Rgba8::from_hex(b"#5ca904")), + "light grey" => Some(Rgba8::from_hex(b"#d8dcd6")), + "puke" => Some(Rgba8::from_hex(b"#a5a502")), + "pinkish purple" => Some(Rgba8::from_hex(b"#d648d7")), + "sea blue" => Some(Rgba8::from_hex(b"#047495")), + "pale purple" => Some(Rgba8::from_hex(b"#b790d4")), + "slate blue" => Some(Rgba8::from_hex(b"#5b7c99")), + "blue grey" => Some(Rgba8::from_hex(b"#607c8e")), + "hunter green" => Some(Rgba8::from_hex(b"#0b4008")), + "fuchsia" => Some(Rgba8::from_hex(b"#ed0dd9")), + "crimson" => Some(Rgba8::from_hex(b"#8c000f")), + "pale yellow" => Some(Rgba8::from_hex(b"#ffff84")), + "ochre" => Some(Rgba8::from_hex(b"#bf9005")), + "mustard yellow" => Some(Rgba8::from_hex(b"#d2bd0a")), + "light red" => Some(Rgba8::from_hex(b"#ff474c")), + "cerulean" => Some(Rgba8::from_hex(b"#0485d1")), + "pale pink" => Some(Rgba8::from_hex(b"#ffcfdc")), + "deep blue" => Some(Rgba8::from_hex(b"#040273")), + "rust" => Some(Rgba8::from_hex(b"#a83c09")), + "light teal" => Some(Rgba8::from_hex(b"#90e4c1")), + "slate" => Some(Rgba8::from_hex(b"#516572")), + "goldenrod" => Some(Rgba8::from_hex(b"#fac205")), + "dark yellow" => Some(Rgba8::from_hex(b"#d5b60a")), + "dark grey" => Some(Rgba8::from_hex(b"#363737")), + "army green" => Some(Rgba8::from_hex(b"#4b5d16")), + "grey blue" => Some(Rgba8::from_hex(b"#6b8ba4")), + "seafoam" => Some(Rgba8::from_hex(b"#80f9ad")), + "puce" => Some(Rgba8::from_hex(b"#a57e52")), + "spring green" => Some(Rgba8::from_hex(b"#a9f971")), + "dark orange" => Some(Rgba8::from_hex(b"#c65102")), + "sand" => Some(Rgba8::from_hex(b"#e2ca76")), + "pastel green" => Some(Rgba8::from_hex(b"#b0ff9d")), + "mint" => Some(Rgba8::from_hex(b"#9ffeb0")), + "light orange" => Some(Rgba8::from_hex(b"#fdaa48")), + "bright pink" => Some(Rgba8::from_hex(b"#fe01b1")), + "chartreuse" => Some(Rgba8::from_hex(b"#c1f80a")), + "deep purple" => Some(Rgba8::from_hex(b"#36013f")), + "dark brown" => Some(Rgba8::from_hex(b"#341c02")), + "taupe" => Some(Rgba8::from_hex(b"#b9a281")), + "pea green" => Some(Rgba8::from_hex(b"#8eab12")), + "puke green" => Some(Rgba8::from_hex(b"#9aae07")), + "kelly green" => Some(Rgba8::from_hex(b"#02ab2e")), + "seafoam green" => Some(Rgba8::from_hex(b"#7af9ab")), + "blue green" => Some(Rgba8::from_hex(b"#137e6d")), + "khaki" => Some(Rgba8::from_hex(b"#aaa662")), + "burgundy" => Some(Rgba8::from_hex(b"#610023")), + "dark teal" => Some(Rgba8::from_hex(b"#014d4e")), + "brick red" => Some(Rgba8::from_hex(b"#8f1402")), + "royal purple" => Some(Rgba8::from_hex(b"#4b006e")), + "plum" => Some(Rgba8::from_hex(b"#580f41")), + "mint green" => Some(Rgba8::from_hex(b"#8fff9f")), + "gold" => Some(Rgba8::from_hex(b"#dbb40c")), + "baby blue" => Some(Rgba8::from_hex(b"#a2cffe")), + "yellow green" => Some(Rgba8::from_hex(b"#c0fb2d")), + "bright purple" => Some(Rgba8::from_hex(b"#be03fd")), + "dark red" => Some(Rgba8::from_hex(b"#840000")), + "pale blue" => Some(Rgba8::from_hex(b"#d0fefe")), + "grass green" => Some(Rgba8::from_hex(b"#3f9b0b")), + "navy" => Some(Rgba8::from_hex(b"#01153e")), + "aquamarine" => Some(Rgba8::from_hex(b"#04d8b2")), + "burnt orange" => Some(Rgba8::from_hex(b"#c04e01")), + "neon green" => Some(Rgba8::from_hex(b"#0cff0c")), + "bright blue" => Some(Rgba8::from_hex(b"#0165fc")), + "rose" => Some(Rgba8::from_hex(b"#cf6275")), + "light pink" => Some(Rgba8::from_hex(b"#ffd1df")), + "mustard" => Some(Rgba8::from_hex(b"#ceb301")), + "indigo" => Some(Rgba8::from_hex(b"#380282")), + "lime" => Some(Rgba8::from_hex(b"#aaff32")), + "sea green" => Some(Rgba8::from_hex(b"#53fca1")), + "periwinkle" => Some(Rgba8::from_hex(b"#8e82fe")), + "dark pink" => Some(Rgba8::from_hex(b"#cb416b")), + "olive green" => Some(Rgba8::from_hex(b"#677a04")), + "peach" => Some(Rgba8::from_hex(b"#ffb07c")), + "pale green" => Some(Rgba8::from_hex(b"#c7fdb5")), + "light brown" => Some(Rgba8::from_hex(b"#ad8150")), + "hot pink" => Some(Rgba8::from_hex(b"#ff028d")), + "black" => Some(Rgba8::from_hex(b"#000000")), + "lilac" => Some(Rgba8::from_hex(b"#cea2fd")), + "navy blue" => Some(Rgba8::from_hex(b"#001146")), + "royal blue" => Some(Rgba8::from_hex(b"#0504aa")), + "beige" => Some(Rgba8::from_hex(b"#e6daa6")), + "salmon" => Some(Rgba8::from_hex(b"#ff796c")), + "olive" => Some(Rgba8::from_hex(b"#6e750e")), + "maroon" => Some(Rgba8::from_hex(b"#650021")), + "bright green" => Some(Rgba8::from_hex(b"#01ff07")), + "dark purple" => Some(Rgba8::from_hex(b"#35063e")), + "mauve" => Some(Rgba8::from_hex(b"#ae7181")), + "forest green" => Some(Rgba8::from_hex(b"#06470c")), + "aqua" => Some(Rgba8::from_hex(b"#13eac9")), + "cyan" => Some(Rgba8::from_hex(b"#00ffff")), + "tan" => Some(Rgba8::from_hex(b"#d1b26f")), + "dark blue" => Some(Rgba8::from_hex(b"#00035b")), + "lavender" => Some(Rgba8::from_hex(b"#c79fef")), + "turquoise" => Some(Rgba8::from_hex(b"#06c2ac")), + "dark green" => Some(Rgba8::from_hex(b"#033500")), + "violet" => Some(Rgba8::from_hex(b"#9a0eea")), + "light purple" => Some(Rgba8::from_hex(b"#bf77f6")), + "lime green" => Some(Rgba8::from_hex(b"#89fe05")), + "grey" => Some(Rgba8::from_hex(b"#929591")), + "sky blue" => Some(Rgba8::from_hex(b"#75bbfd")), + "yellow" => Some(Rgba8::from_hex(b"#ffff14")), + "magenta" => Some(Rgba8::from_hex(b"#c20078")), + "light green" => Some(Rgba8::from_hex(b"#96f97b")), + "orange" => Some(Rgba8::from_hex(b"#f97306")), + "teal" => Some(Rgba8::from_hex(b"#029386")), + "light blue" => Some(Rgba8::from_hex(b"#95d0fc")), + "red" => Some(Rgba8::from_hex(b"#e50000")), + "brown" => Some(Rgba8::from_hex(b"#653700")), + "pink" => Some(Rgba8::from_hex(b"#ff81c0")), + "blue" => Some(Rgba8::from_hex(b"#0343df")), + "green" => Some(Rgba8::from_hex(b"#15b01a")), + "purple" => Some(Rgba8::from_hex(b"#7e1e9c")), _ => None, } } diff --git a/base/src/lib.rs b/base/src/lib.rs index df77546..033a149 100644 --- a/base/src/lib.rs +++ b/base/src/lib.rs @@ -1,4 +1,4 @@ pub mod color; -pub use color::{Color, ColorU8, ResolveColor}; +pub use color::{Color, Rgb8, Rgba8, ResolveColor}; pub mod geom; diff --git a/iced/src/figure.rs b/iced/src/figure.rs index 0675250..4b10a20 100644 --- a/iced/src/figure.rs +++ b/iced/src/figure.rs @@ -352,9 +352,9 @@ pub trait Catalog: Sized { } #[inline] -fn from_iced_color(color: iced::Color) -> plotive::ColorU8 { +fn from_iced_color(color: iced::Color) -> plotive::Rgba8 { let [r, g, b, a] = color.into_rgba8(); - plotive::ColorU8::from_rgba(r, g, b, a) + plotive::Rgba8::new(r, g, b, a) } /// Map an `iced::Theme` to an plotive theme. diff --git a/iced/src/lib.rs b/iced/src/lib.rs index 4111c0e..50e3902 100644 --- a/iced/src/lib.rs +++ b/iced/src/lib.rs @@ -10,15 +10,15 @@ pub trait ToIced { fn to_iced(&self) -> Self::IcedType; } -impl ToIced for plotive::ColorU8 { +impl ToIced for plotive::Rgba8 { type IcedType = iced::Color; fn to_iced(&self) -> Self::IcedType { iced::Color::from_rgba8( - self.red(), - self.green(), - self.blue(), - self.alpha() as f32 / 255.0, + self.r(), + self.g(), + self.b(), + self.a() as f32 / 255.0, ) } } diff --git a/iced/src/surface.rs b/iced/src/surface.rs index a2edd09..65ae337 100644 --- a/iced/src/surface.rs +++ b/iced/src/surface.rs @@ -49,7 +49,7 @@ where fn fill(&mut self, fill: render::Paint) { let color = match fill { render::Paint::Solid(c) => { - iced::Color::from_rgba8(c.red(), c.green(), c.blue(), c.alpha() as f32 / 255.0) + iced::Color::from_rgba8(c.r(), c.g(), c.b(), c.a() as f32 / 255.0) } }; let bounds = self.clip_bounds(); @@ -100,9 +100,14 @@ where } #[inline] -fn to_iced_color(color: plotive::ColorU8) -> iced::Color { - let [r, g, b, a] = color.rgba_f32(); - iced::Color::from_rgba(r, g, b, a) +fn to_iced_color(color: plotive::Rgba8) -> iced::Color { + let [r, g, b, a] = color.arr(); + iced::Color::from_rgba( + r as f32 / 255.0, + g as f32 / 255.0, + b as f32 / 255.0, + a as f32 / 255.0, + ) } #[inline] diff --git a/pxl/src/lib.rs b/pxl/src/lib.rs index c4d714a..41ff497 100644 --- a/pxl/src/lib.rs +++ b/pxl/src/lib.rs @@ -1,7 +1,7 @@ use std::path::Path; use std::{fmt, io}; -use plotive::{ColorU8, Style, drawing, geom, render}; +use plotive::{Rgba8, Style, drawing, geom, render}; use tiny_skia::{self, FillRule, Mask, Pixmap, PixmapMut}; #[derive(Debug)] @@ -336,8 +336,8 @@ impl render::Surface for PxlSurfaceRef<'_> { } } -fn ts_color(color: ColorU8) -> tiny_skia::Color { - tiny_skia::Color::from_rgba8(color.red(), color.green(), color.blue(), color.alpha()) +fn ts_color(color: Rgba8) -> tiny_skia::Color { + tiny_skia::Color::from_rgba8(color.r(), color.g(), color.b(), color.a()) } fn ts_fill(fill: render::Paint, paint: &mut tiny_skia::Paint) { diff --git a/src/lib.rs b/src/lib.rs index 419cbfd..ef17707 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -168,7 +168,7 @@ pub use style::Style; pub mod color { pub use plotive_base::color::*; } -pub use color::{Color, ColorU8, ResolveColor}; +pub use color::{Color, Rgba8, ResolveColor}; /// Rexports of [`plotive_base::geom`]` items pub mod geom { diff --git a/src/render.rs b/src/render.rs index 4b4ebeb..ab3f28f 100644 --- a/src/render.rs +++ b/src/render.rs @@ -3,7 +3,7 @@ //! All rendering surfaces must implement the `Surface` trait. //! See the `plotive-pxl` and `plotive-svg` crates for examples. -use crate::{ColorU8, geom}; +use crate::{Rgba8, geom}; /// Surface trait: defines the rendering surface API pub trait Surface { @@ -43,11 +43,11 @@ pub trait Surface { #[derive(Debug, Clone, Copy)] pub enum Paint { /// Solid color fill - Solid(ColorU8), + Solid(Rgba8), } -impl From for Paint { - fn from(value: ColorU8) -> Self { +impl From for Paint { + fn from(value: Rgba8) -> Self { Paint::Solid(value) } } @@ -66,7 +66,7 @@ pub enum LinePattern<'a> { #[derive(Debug, Clone, Copy)] pub struct Stroke<'a> { /// Line color - pub color: ColorU8, + pub color: Rgba8, /// Line width in figure units pub width: f32, /// Line pattern diff --git a/src/style.rs b/src/style.rs index bc2d25b..85158cd 100644 --- a/src/style.rs +++ b/src/style.rs @@ -6,7 +6,7 @@ pub mod theme; pub use crate::style::series::Palette; pub use crate::style::theme::Theme; -use crate::{Color, ColorU8, ResolveColor, render}; +use crate::{Color, Rgba8, ResolveColor, render}; /// Overall style definition for figures /// @@ -118,25 +118,25 @@ impl Style { } impl ResolveColor for Style { - fn resolve_color(&self, col: &theme::Color) -> ColorU8 { + fn resolve_color(&self, col: &theme::Color) -> Rgba8 { self.theme().resolve_color(col) } } impl ResolveColor for Style { - fn resolve_color(&self, col: &series::IndexColor) -> ColorU8 { + fn resolve_color(&self, col: &series::IndexColor) -> Rgba8 { self.palette.get(*col) } } impl ResolveColor for (&Style, usize) { - fn resolve_color(&self, _col: &series::AutoColor) -> ColorU8 { + fn resolve_color(&self, _col: &series::AutoColor) -> Rgba8 { self.0.palette.get(series::IndexColor(self.1)) } } impl ResolveColor for (&Style, usize) { - fn resolve_color(&self, col: &series::Color) -> ColorU8 { + fn resolve_color(&self, col: &series::Color) -> Rgba8 { match col { series::Color::Auto => self.0.palette.get(series::IndexColor(self.1)), series::Color::Index(idx) => self.0.palette.get(*idx), @@ -534,7 +534,7 @@ where #[cfg(test)] mod tests { use super::*; - use crate::ColorU8; + use crate::Rgba8; use crate::style::theme; #[test] @@ -543,18 +543,18 @@ mod tests { let theme_line: theme::Stroke = (theme::Color::Theme(theme::Col::LegendBorder), 2.0).into(); let stroke = theme_line.as_stroke(&style); - assert_eq!(stroke.color, ColorU8::from_html(b"#000000")); + assert_eq!(stroke.color, Rgba8::from_hex(b"#000000")); let series_line: Stroke = (series::IndexColor(2), 2.0).into(); let stroke = series_line.as_stroke(&style); - assert_eq!(stroke.color, ColorU8::from_html(b"#2ca02c")); + assert_eq!(stroke.color, Rgba8::from_hex(b"#2ca02c")); let series_line: Stroke = (series::AutoColor, 2.0).into(); let stroke = series_line.as_stroke(&(&style, 2)); - assert_eq!(stroke.color, ColorU8::from_html(b"#2ca02c")); + assert_eq!(stroke.color, Rgba8::from_hex(b"#2ca02c")); - let fixed_color: Stroke = (ColorU8::from_html(b"#123456"), 2.0).into(); + let fixed_color: Stroke = (Rgba8::from_hex(b"#123456"), 2.0).into(); let stroke = fixed_color.as_stroke(&()); - assert_eq!(stroke.color, ColorU8::from_html(b"#123456")); + assert_eq!(stroke.color, Rgba8::from_hex(b"#123456")); } } diff --git a/src/style/catppuccin.rs b/src/style/catppuccin.rs index 7964e5f..2531aec 100644 --- a/src/style/catppuccin.rs +++ b/src/style/catppuccin.rs @@ -1,5 +1,5 @@ //! Catppuccin theme implementation -use crate::{ColorU8, style}; +use crate::{Rgba8, style}; /// Catppuccin Latte theme #[derive(Debug, Clone, Copy)] @@ -18,32 +18,32 @@ pub struct Macchiato; pub struct Mocha; pub trait Flavors { - const ROSEWATER: ColorU8; - const FLAMINGO: ColorU8; - const PINK: ColorU8; - const MAUVE: ColorU8; - const RED: ColorU8; - const MAROON: ColorU8; - const PEACH: ColorU8; - const YELLOW: ColorU8; - const GREEN: ColorU8; - const TEAL: ColorU8; - const SKY: ColorU8; - const SAPPHIRE: ColorU8; - const BLUE: ColorU8; - const LAVENDER: ColorU8; - const TEXT: ColorU8; - const _SUBTEXT1: ColorU8; - const _SUBTEXT0: ColorU8; - const OVERLAY2: ColorU8; - const _OVERLAY1: ColorU8; - const _OVERLAY0: ColorU8; - const SURFACE2: ColorU8; - const _SURFACE1: ColorU8; - const SURFACE0: ColorU8; - const BASE: ColorU8; - const _MANTLE: ColorU8; - const _CRUST: ColorU8; + const ROSEWATER: Rgba8; + const FLAMINGO: Rgba8; + const PINK: Rgba8; + const MAUVE: Rgba8; + const RED: Rgba8; + const MAROON: Rgba8; + const PEACH: Rgba8; + const YELLOW: Rgba8; + const GREEN: Rgba8; + const TEAL: Rgba8; + const SKY: Rgba8; + const SAPPHIRE: Rgba8; + const BLUE: Rgba8; + const LAVENDER: Rgba8; + const TEXT: Rgba8; + const _SUBTEXT1: Rgba8; + const _SUBTEXT0: Rgba8; + const OVERLAY2: Rgba8; + const _OVERLAY1: Rgba8; + const _OVERLAY0: Rgba8; + const SURFACE2: Rgba8; + const _SURFACE1: Rgba8; + const SURFACE0: Rgba8; + const BASE: Rgba8; + const _MANTLE: Rgba8; + const _CRUST: Rgba8; } pub const fn theme_palette() -> style::theme::ThemePalette @@ -59,7 +59,7 @@ where } } -pub const fn series_colors() -> &'static [ColorU8] +pub const fn series_colors() -> &'static [Rgba8] where F: Flavors, { @@ -82,117 +82,117 @@ where } impl Flavors for Latte { - const ROSEWATER: ColorU8 = ColorU8::from_html(b"#dc8a78"); - const FLAMINGO: ColorU8 = ColorU8::from_html(b"#dd7878"); - const PINK: ColorU8 = ColorU8::from_html(b"#ea76cb"); - const MAUVE: ColorU8 = ColorU8::from_html(b"#8839ef"); - const RED: ColorU8 = ColorU8::from_html(b"#d20f39"); - const MAROON: ColorU8 = ColorU8::from_html(b"#e64553"); - const PEACH: ColorU8 = ColorU8::from_html(b"#fe640b"); - const YELLOW: ColorU8 = ColorU8::from_html(b"#df8e1d"); - const GREEN: ColorU8 = ColorU8::from_html(b"#40a02b"); - const TEAL: ColorU8 = ColorU8::from_html(b"#179299"); - const SKY: ColorU8 = ColorU8::from_html(b"#04a5e5"); - const SAPPHIRE: ColorU8 = ColorU8::from_html(b"#209fb5"); - const BLUE: ColorU8 = ColorU8::from_html(b"#1e66f5"); - const LAVENDER: ColorU8 = ColorU8::from_html(b"#7287fd"); - const TEXT: ColorU8 = ColorU8::from_html(b"#4c4f69"); - const _SUBTEXT1: ColorU8 = ColorU8::from_html(b"#5c5f77"); - const _SUBTEXT0: ColorU8 = ColorU8::from_html(b"#6c6f85"); - const OVERLAY2: ColorU8 = ColorU8::from_html(b"#7c7f93"); - const _OVERLAY1: ColorU8 = ColorU8::from_html(b"#9ca0b0"); - const _OVERLAY0: ColorU8 = ColorU8::from_html(b"#c6c8d1"); - const SURFACE2: ColorU8 = ColorU8::from_html(b"#dfdfe0"); - const _SURFACE1: ColorU8 = ColorU8::from_html(b"#e8e8e8"); - const SURFACE0: ColorU8 = ColorU8::from_html(b"#f5f5f5"); - const BASE: ColorU8 = ColorU8::from_html(b"#eff1f5"); - const _MANTLE: ColorU8 = ColorU8::from_html(b"#e6e9ef"); - const _CRUST: ColorU8 = ColorU8::from_html(b"#dce0e8"); + const ROSEWATER: Rgba8 = Rgba8::from_hex(b"#dc8a78"); + const FLAMINGO: Rgba8 = Rgba8::from_hex(b"#dd7878"); + const PINK: Rgba8 = Rgba8::from_hex(b"#ea76cb"); + const MAUVE: Rgba8 = Rgba8::from_hex(b"#8839ef"); + const RED: Rgba8 = Rgba8::from_hex(b"#d20f39"); + const MAROON: Rgba8 = Rgba8::from_hex(b"#e64553"); + const PEACH: Rgba8 = Rgba8::from_hex(b"#fe640b"); + const YELLOW: Rgba8 = Rgba8::from_hex(b"#df8e1d"); + const GREEN: Rgba8 = Rgba8::from_hex(b"#40a02b"); + const TEAL: Rgba8 = Rgba8::from_hex(b"#179299"); + const SKY: Rgba8 = Rgba8::from_hex(b"#04a5e5"); + const SAPPHIRE: Rgba8 = Rgba8::from_hex(b"#209fb5"); + const BLUE: Rgba8 = Rgba8::from_hex(b"#1e66f5"); + const LAVENDER: Rgba8 = Rgba8::from_hex(b"#7287fd"); + const TEXT: Rgba8 = Rgba8::from_hex(b"#4c4f69"); + const _SUBTEXT1: Rgba8 = Rgba8::from_hex(b"#5c5f77"); + const _SUBTEXT0: Rgba8 = Rgba8::from_hex(b"#6c6f85"); + const OVERLAY2: Rgba8 = Rgba8::from_hex(b"#7c7f93"); + const _OVERLAY1: Rgba8 = Rgba8::from_hex(b"#9ca0b0"); + const _OVERLAY0: Rgba8 = Rgba8::from_hex(b"#c6c8d1"); + const SURFACE2: Rgba8 = Rgba8::from_hex(b"#dfdfe0"); + const _SURFACE1: Rgba8 = Rgba8::from_hex(b"#e8e8e8"); + const SURFACE0: Rgba8 = Rgba8::from_hex(b"#f5f5f5"); + const BASE: Rgba8 = Rgba8::from_hex(b"#eff1f5"); + const _MANTLE: Rgba8 = Rgba8::from_hex(b"#e6e9ef"); + const _CRUST: Rgba8 = Rgba8::from_hex(b"#dce0e8"); } impl Flavors for Frappe { - const ROSEWATER: ColorU8 = ColorU8::from_html(b"#f2d5cf"); - const FLAMINGO: ColorU8 = ColorU8::from_html(b"#eebebe"); - const PINK: ColorU8 = ColorU8::from_html(b"#f4b8e4"); - const MAUVE: ColorU8 = ColorU8::from_html(b"#ca9ee6"); - const RED: ColorU8 = ColorU8::from_html(b"#e78284"); - const MAROON: ColorU8 = ColorU8::from_html(b"#ea999c"); - const PEACH: ColorU8 = ColorU8::from_html(b"#ef9f76"); - const YELLOW: ColorU8 = ColorU8::from_html(b"#e5c890"); - const GREEN: ColorU8 = ColorU8::from_html(b"#a6d189"); - const TEAL: ColorU8 = ColorU8::from_html(b"#81c8be"); - const SKY: ColorU8 = ColorU8::from_html(b"#99d1db"); - const SAPPHIRE: ColorU8 = ColorU8::from_html(b"#85c1dc"); - const BLUE: ColorU8 = ColorU8::from_html(b"#8caaee"); - const LAVENDER: ColorU8 = ColorU8::from_html(b"#babbf1"); - const TEXT: ColorU8 = ColorU8::from_html(b"#c6d0f5"); - const _SUBTEXT1: ColorU8 = ColorU8::from_html(b"#b5bfe2"); - const _SUBTEXT0: ColorU8 = ColorU8::from_html(b"#a5adce"); - const OVERLAY2: ColorU8 = ColorU8::from_html(b"#949cbb"); - const _OVERLAY1: ColorU8 = ColorU8::from_html(b"#838ba7"); - const _OVERLAY0: ColorU8 = ColorU8::from_html(b"#737994"); - const SURFACE2: ColorU8 = ColorU8::from_html(b"#626880"); - const _SURFACE1: ColorU8 = ColorU8::from_html(b"#51576d"); - const SURFACE0: ColorU8 = ColorU8::from_html(b"#414559"); - const BASE: ColorU8 = ColorU8::from_html(b"#303446"); - const _MANTLE: ColorU8 = ColorU8::from_html(b"#292c36"); - const _CRUST: ColorU8 = ColorU8::from_html(b"#232634"); + const ROSEWATER: Rgba8 = Rgba8::from_hex(b"#f2d5cf"); + const FLAMINGO: Rgba8 = Rgba8::from_hex(b"#eebebe"); + const PINK: Rgba8 = Rgba8::from_hex(b"#f4b8e4"); + const MAUVE: Rgba8 = Rgba8::from_hex(b"#ca9ee6"); + const RED: Rgba8 = Rgba8::from_hex(b"#e78284"); + const MAROON: Rgba8 = Rgba8::from_hex(b"#ea999c"); + const PEACH: Rgba8 = Rgba8::from_hex(b"#ef9f76"); + const YELLOW: Rgba8 = Rgba8::from_hex(b"#e5c890"); + const GREEN: Rgba8 = Rgba8::from_hex(b"#a6d189"); + const TEAL: Rgba8 = Rgba8::from_hex(b"#81c8be"); + const SKY: Rgba8 = Rgba8::from_hex(b"#99d1db"); + const SAPPHIRE: Rgba8 = Rgba8::from_hex(b"#85c1dc"); + const BLUE: Rgba8 = Rgba8::from_hex(b"#8caaee"); + const LAVENDER: Rgba8 = Rgba8::from_hex(b"#babbf1"); + const TEXT: Rgba8 = Rgba8::from_hex(b"#c6d0f5"); + const _SUBTEXT1: Rgba8 = Rgba8::from_hex(b"#b5bfe2"); + const _SUBTEXT0: Rgba8 = Rgba8::from_hex(b"#a5adce"); + const OVERLAY2: Rgba8 = Rgba8::from_hex(b"#949cbb"); + const _OVERLAY1: Rgba8 = Rgba8::from_hex(b"#838ba7"); + const _OVERLAY0: Rgba8 = Rgba8::from_hex(b"#737994"); + const SURFACE2: Rgba8 = Rgba8::from_hex(b"#626880"); + const _SURFACE1: Rgba8 = Rgba8::from_hex(b"#51576d"); + const SURFACE0: Rgba8 = Rgba8::from_hex(b"#414559"); + const BASE: Rgba8 = Rgba8::from_hex(b"#303446"); + const _MANTLE: Rgba8 = Rgba8::from_hex(b"#292c36"); + const _CRUST: Rgba8 = Rgba8::from_hex(b"#232634"); } impl Flavors for Macchiato { - const ROSEWATER: ColorU8 = ColorU8::from_html(b"#f4dbd6"); - const FLAMINGO: ColorU8 = ColorU8::from_html(b"#f0c6c6"); - const PINK: ColorU8 = ColorU8::from_html(b"#f5bde6"); - const MAUVE: ColorU8 = ColorU8::from_html(b"#c6a0f6"); - const RED: ColorU8 = ColorU8::from_html(b"#ed8796"); - const MAROON: ColorU8 = ColorU8::from_html(b"#ee99a0"); - const PEACH: ColorU8 = ColorU8::from_html(b"#f5a97f"); - const YELLOW: ColorU8 = ColorU8::from_html(b"#eed49f"); - const GREEN: ColorU8 = ColorU8::from_html(b"#a6da95"); - const TEAL: ColorU8 = ColorU8::from_html(b"#8bd5ca"); - const SKY: ColorU8 = ColorU8::from_html(b"#91d7e3"); - const SAPPHIRE: ColorU8 = ColorU8::from_html(b"#7dc4e4"); - const BLUE: ColorU8 = ColorU8::from_html(b"#8aadf4"); - const LAVENDER: ColorU8 = ColorU8::from_html(b"#b7bdf8"); - const TEXT: ColorU8 = ColorU8::from_html(b"#cad3f5"); - const _SUBTEXT1: ColorU8 = ColorU8::from_html(b"#b8c0e0"); - const _SUBTEXT0: ColorU8 = ColorU8::from_html(b"#a5adcb"); - const OVERLAY2: ColorU8 = ColorU8::from_html(b"#939ab7"); - const _OVERLAY1: ColorU8 = ColorU8::from_html(b"#8087a2"); - const _OVERLAY0: ColorU8 = ColorU8::from_html(b"#6e738d"); - const SURFACE2: ColorU8 = ColorU8::from_html(b"#5b6078"); - const _SURFACE1: ColorU8 = ColorU8::from_html(b"#494d64"); - const SURFACE0: ColorU8 = ColorU8::from_html(b"#363a4f"); - const BASE: ColorU8 = ColorU8::from_html(b"#24273a"); - const _MANTLE: ColorU8 = ColorU8::from_html(b"#1e2030"); - const _CRUST: ColorU8 = ColorU8::from_html(b"#181926"); + const ROSEWATER: Rgba8 = Rgba8::from_hex(b"#f4dbd6"); + const FLAMINGO: Rgba8 = Rgba8::from_hex(b"#f0c6c6"); + const PINK: Rgba8 = Rgba8::from_hex(b"#f5bde6"); + const MAUVE: Rgba8 = Rgba8::from_hex(b"#c6a0f6"); + const RED: Rgba8 = Rgba8::from_hex(b"#ed8796"); + const MAROON: Rgba8 = Rgba8::from_hex(b"#ee99a0"); + const PEACH: Rgba8 = Rgba8::from_hex(b"#f5a97f"); + const YELLOW: Rgba8 = Rgba8::from_hex(b"#eed49f"); + const GREEN: Rgba8 = Rgba8::from_hex(b"#a6da95"); + const TEAL: Rgba8 = Rgba8::from_hex(b"#8bd5ca"); + const SKY: Rgba8 = Rgba8::from_hex(b"#91d7e3"); + const SAPPHIRE: Rgba8 = Rgba8::from_hex(b"#7dc4e4"); + const BLUE: Rgba8 = Rgba8::from_hex(b"#8aadf4"); + const LAVENDER: Rgba8 = Rgba8::from_hex(b"#b7bdf8"); + const TEXT: Rgba8 = Rgba8::from_hex(b"#cad3f5"); + const _SUBTEXT1: Rgba8 = Rgba8::from_hex(b"#b8c0e0"); + const _SUBTEXT0: Rgba8 = Rgba8::from_hex(b"#a5adcb"); + const OVERLAY2: Rgba8 = Rgba8::from_hex(b"#939ab7"); + const _OVERLAY1: Rgba8 = Rgba8::from_hex(b"#8087a2"); + const _OVERLAY0: Rgba8 = Rgba8::from_hex(b"#6e738d"); + const SURFACE2: Rgba8 = Rgba8::from_hex(b"#5b6078"); + const _SURFACE1: Rgba8 = Rgba8::from_hex(b"#494d64"); + const SURFACE0: Rgba8 = Rgba8::from_hex(b"#363a4f"); + const BASE: Rgba8 = Rgba8::from_hex(b"#24273a"); + const _MANTLE: Rgba8 = Rgba8::from_hex(b"#1e2030"); + const _CRUST: Rgba8 = Rgba8::from_hex(b"#181926"); } impl Flavors for Mocha { - const ROSEWATER: ColorU8 = ColorU8::from_html(b"#f5e0dc"); - const FLAMINGO: ColorU8 = ColorU8::from_html(b"#f2cdcd"); - const PINK: ColorU8 = ColorU8::from_html(b"#f5c2e7"); - const MAUVE: ColorU8 = ColorU8::from_html(b"#cba6f7"); - const RED: ColorU8 = ColorU8::from_html(b"#f38ba8"); - const MAROON: ColorU8 = ColorU8::from_html(b"#eba0ac"); - const PEACH: ColorU8 = ColorU8::from_html(b"#fab387"); - const YELLOW: ColorU8 = ColorU8::from_html(b"#f9e2af"); - const GREEN: ColorU8 = ColorU8::from_html(b"#a6e3a1"); - const TEAL: ColorU8 = ColorU8::from_html(b"#94e2d5"); - const SKY: ColorU8 = ColorU8::from_html(b"#89dceb"); - const SAPPHIRE: ColorU8 = ColorU8::from_html(b"#74c7ec"); - const BLUE: ColorU8 = ColorU8::from_html(b"#89b4fa"); - const LAVENDER: ColorU8 = ColorU8::from_html(b"#b4befe"); - const TEXT: ColorU8 = ColorU8::from_html(b"#cdd6f4"); - const _SUBTEXT1: ColorU8 = ColorU8::from_html(b"#bac2de"); - const _SUBTEXT0: ColorU8 = ColorU8::from_html(b"#a6adc8"); - const OVERLAY2: ColorU8 = ColorU8::from_html(b"#9399b2"); - const _OVERLAY1: ColorU8 = ColorU8::from_html(b"#7f849c"); - const _OVERLAY0: ColorU8 = ColorU8::from_html(b"#6c7086"); - const SURFACE2: ColorU8 = ColorU8::from_html(b"#585b70"); - const _SURFACE1: ColorU8 = ColorU8::from_html(b"#45475a"); - const SURFACE0: ColorU8 = ColorU8::from_html(b"#313244"); - const BASE: ColorU8 = ColorU8::from_html(b"#1e1e2e"); - const _MANTLE: ColorU8 = ColorU8::from_html(b"#181825"); - const _CRUST: ColorU8 = ColorU8::from_html(b"#11111b"); + const ROSEWATER: Rgba8 = Rgba8::from_hex(b"#f5e0dc"); + const FLAMINGO: Rgba8 = Rgba8::from_hex(b"#f2cdcd"); + const PINK: Rgba8 = Rgba8::from_hex(b"#f5c2e7"); + const MAUVE: Rgba8 = Rgba8::from_hex(b"#cba6f7"); + const RED: Rgba8 = Rgba8::from_hex(b"#f38ba8"); + const MAROON: Rgba8 = Rgba8::from_hex(b"#eba0ac"); + const PEACH: Rgba8 = Rgba8::from_hex(b"#fab387"); + const YELLOW: Rgba8 = Rgba8::from_hex(b"#f9e2af"); + const GREEN: Rgba8 = Rgba8::from_hex(b"#a6e3a1"); + const TEAL: Rgba8 = Rgba8::from_hex(b"#94e2d5"); + const SKY: Rgba8 = Rgba8::from_hex(b"#89dceb"); + const SAPPHIRE: Rgba8 = Rgba8::from_hex(b"#74c7ec"); + const BLUE: Rgba8 = Rgba8::from_hex(b"#89b4fa"); + const LAVENDER: Rgba8 = Rgba8::from_hex(b"#b4befe"); + const TEXT: Rgba8 = Rgba8::from_hex(b"#cdd6f4"); + const _SUBTEXT1: Rgba8 = Rgba8::from_hex(b"#bac2de"); + const _SUBTEXT0: Rgba8 = Rgba8::from_hex(b"#a6adc8"); + const OVERLAY2: Rgba8 = Rgba8::from_hex(b"#9399b2"); + const _OVERLAY1: Rgba8 = Rgba8::from_hex(b"#7f849c"); + const _OVERLAY0: Rgba8 = Rgba8::from_hex(b"#6c7086"); + const SURFACE2: Rgba8 = Rgba8::from_hex(b"#585b70"); + const _SURFACE1: Rgba8 = Rgba8::from_hex(b"#45475a"); + const SURFACE0: Rgba8 = Rgba8::from_hex(b"#313244"); + const BASE: Rgba8 = Rgba8::from_hex(b"#1e1e2e"); + const _MANTLE: Rgba8 = Rgba8::from_hex(b"#181825"); + const _CRUST: Rgba8 = Rgba8::from_hex(b"#11111b"); } diff --git a/src/style/series.rs b/src/style/series.rs index 20a8a0d..e7a0b15 100644 --- a/src/style/series.rs +++ b/src/style/series.rs @@ -2,7 +2,7 @@ * This module deals with colors and style of data series. */ use crate::style::{self, catppuccin, defaults}; -use crate::{ColorU8, ResolveColor}; +use crate::{Rgba8, ResolveColor}; /// A palette for data series. /// It provides ordered colors for series in a figure. @@ -30,12 +30,12 @@ pub enum Palette { /// Catppuccin Latte palette CatppuccinLatte, /// A custom palette - Custom(Vec), + Custom(Vec), } impl Palette { /// Get the colors in the palette - pub const fn colors(&self) -> &[ColorU8] { + pub const fn colors(&self) -> &[Rgba8] { match self { Palette::Black => palettes::BLACK, Palette::Standard => palettes::STANDARD, @@ -56,7 +56,7 @@ impl Palette { } /// Get a color from the palette by its index - pub const fn get(&self, col: IndexColor) -> ColorU8 { + pub const fn get(&self, col: IndexColor) -> Rgba8 { self.colors()[col.0 % self.len()] } } @@ -82,7 +82,7 @@ pub enum Color { /// Color from the palette by index Index(IndexColor), /// Fixed RGB color - Fixed(ColorU8), + Fixed(Rgba8), } impl From for Color { @@ -97,8 +97,8 @@ impl From for Color { } } -impl From for Color { - fn from(color: ColorU8) -> Self { +impl From for Color { + fn from(color: Rgba8) -> Self { Color::Fixed(color) } } @@ -106,19 +106,19 @@ impl From for Color { impl style::Color for Color {} impl ResolveColor for Palette { - fn resolve_color(&self, col: &IndexColor) -> ColorU8 { + fn resolve_color(&self, col: &IndexColor) -> Rgba8 { self.get(*col) } } impl ResolveColor for (&Palette, usize) { - fn resolve_color(&self, _col: &AutoColor) -> ColorU8 { + fn resolve_color(&self, _col: &AutoColor) -> Rgba8 { self.0.get(IndexColor(self.1)) } } impl ResolveColor for (&Palette, usize) { - fn resolve_color(&self, col: &Color) -> ColorU8 { + fn resolve_color(&self, col: &Color) -> Rgba8 { match col { Color::Auto => self.0.get(IndexColor(self.1)), Color::Index(idx) => self.0.get(*idx), @@ -141,8 +141,8 @@ impl Default for Stroke { } } -impl From for Stroke { - fn from(color: ColorU8) -> Self { +impl From for Stroke { + fn from(color: Rgba8) -> Self { Stroke { color: color.into(), width: defaults::SERIES_LINE_WIDTH, @@ -155,8 +155,8 @@ impl From for Stroke { /// Fill style for theme elements pub type Fill = style::Fill; -impl From for Fill { - fn from(color: ColorU8) -> Self { +impl From for Fill { + fn from(color: Rgba8) -> Self { Fill::Solid { color: color.into(), opacity: None, @@ -167,57 +167,57 @@ impl From for Fill { /// Marker style for theme elements pub type Marker = style::Marker; -impl From for Marker { - fn from(color: ColorU8) -> Self { +impl From for Marker { + fn from(color: Rgba8) -> Self { Marker::new_with_color(color.into()) } } /// Types for built-in and custom palettes mod palettes { - use crate::ColorU8; - - pub const BLACK: &[ColorU8] = &[ColorU8::from_html(b"#000000")]; - pub const STANDARD: &[ColorU8] = &[ - ColorU8::from_html(b"#1f77b4"), // blue - ColorU8::from_html(b"#ff7f0e"), // orange - ColorU8::from_html(b"#2ca02c"), // green - ColorU8::from_html(b"#d62728"), // red - ColorU8::from_html(b"#9467bd"), // purple - ColorU8::from_html(b"#8c564b"), // brown - ColorU8::from_html(b"#e377c2"), // pink - ColorU8::from_html(b"#7f7f7f"), // gray - ColorU8::from_html(b"#bcbd22"), // olive - ColorU8::from_html(b"#17becf"), // cyan + use crate::Rgba8; + + pub const BLACK: &[Rgba8] = &[Rgba8::from_hex(b"#000000")]; + pub const STANDARD: &[Rgba8] = &[ + Rgba8::from_hex(b"#1f77b4"), // blue + Rgba8::from_hex(b"#ff7f0e"), // orange + Rgba8::from_hex(b"#2ca02c"), // green + Rgba8::from_hex(b"#d62728"), // red + Rgba8::from_hex(b"#9467bd"), // purple + Rgba8::from_hex(b"#8c564b"), // brown + Rgba8::from_hex(b"#e377c2"), // pink + Rgba8::from_hex(b"#7f7f7f"), // gray + Rgba8::from_hex(b"#bcbd22"), // olive + Rgba8::from_hex(b"#17becf"), // cyan ]; - pub const PASTEL: &[ColorU8] = &[ - ColorU8::from_html(b"#aec7e8"), // light blue - ColorU8::from_html(b"#ffbb78"), // light orange - ColorU8::from_html(b"#98df8a"), // light green - ColorU8::from_html(b"#ff9896"), // light red - ColorU8::from_html(b"#c5b0d5"), // light purple - ColorU8::from_html(b"#c49c94"), // light brown - ColorU8::from_html(b"#f7b6d2"), // light pink - ColorU8::from_html(b"#c7c7c7"), // light gray - ColorU8::from_html(b"#dbdb8d"), // light olive - ColorU8::from_html(b"#9edae5"), // light cyan + pub const PASTEL: &[Rgba8] = &[ + Rgba8::from_hex(b"#aec7e8"), // light blue + Rgba8::from_hex(b"#ffbb78"), // light orange + Rgba8::from_hex(b"#98df8a"), // light green + Rgba8::from_hex(b"#ff9896"), // light red + Rgba8::from_hex(b"#c5b0d5"), // light purple + Rgba8::from_hex(b"#c49c94"), // light brown + Rgba8::from_hex(b"#f7b6d2"), // light pink + Rgba8::from_hex(b"#c7c7c7"), // light gray + Rgba8::from_hex(b"#dbdb8d"), // light olive + Rgba8::from_hex(b"#9edae5"), // light cyan ]; - pub const TOL_BRIGHT: &[ColorU8] = &[ - ColorU8::from_html(b"#4477AA"), // blue - ColorU8::from_html(b"#EE6677"), // red - ColorU8::from_html(b"#228833"), // green - ColorU8::from_html(b"#CCBB44"), // yellow - ColorU8::from_html(b"#66CCEE"), // cyan - ColorU8::from_html(b"#AA3377"), // purple - ColorU8::from_html(b"#BBBBBB"), // gray + pub const TOL_BRIGHT: &[Rgba8] = &[ + Rgba8::from_hex(b"#4477AA"), // blue + Rgba8::from_hex(b"#EE6677"), // red + Rgba8::from_hex(b"#228833"), // green + Rgba8::from_hex(b"#CCBB44"), // yellow + Rgba8::from_hex(b"#66CCEE"), // cyan + Rgba8::from_hex(b"#AA3377"), // purple + Rgba8::from_hex(b"#BBBBBB"), // gray ]; - pub const OKABE_ITO: &[ColorU8] = &[ - ColorU8::from_html(b"#E69F00"), // orange - ColorU8::from_html(b"#56B4E9"), // sky blue - ColorU8::from_html(b"#009E73"), // bluish green - ColorU8::from_html(b"#F0E442"), // yellow - ColorU8::from_html(b"#0072B2"), // blue - ColorU8::from_html(b"#D55E00"), // vermillion - ColorU8::from_html(b"#CC79A7"), // reddish purple + pub const OKABE_ITO: &[Rgba8] = &[ + Rgba8::from_hex(b"#E69F00"), // orange + Rgba8::from_hex(b"#56B4E9"), // sky blue + Rgba8::from_hex(b"#009E73"), // bluish green + Rgba8::from_hex(b"#F0E442"), // yellow + Rgba8::from_hex(b"#0072B2"), // blue + Rgba8::from_hex(b"#D55E00"), // vermillion + Rgba8::from_hex(b"#CC79A7"), // reddish purple ]; } diff --git a/src/style/theme.rs b/src/style/theme.rs index 91394a5..6a2c7da 100644 --- a/src/style/theme.rs +++ b/src/style/theme.rs @@ -1,6 +1,6 @@ //! Theme definitions and implementations -use crate::color::{self, ColorU8}; +use crate::color::{self, Rgb8, Rgba8}; use crate::style::catppuccin; use crate::{style, text}; @@ -26,27 +26,27 @@ pub enum Theme { impl Theme { /// Get the background color of the theme - pub const fn background(&self) -> ColorU8 { + pub const fn background(&self) -> Rgba8 { self.palette().background } /// Get the foreground color of the theme - pub const fn foreground(&self) -> ColorU8 { + pub const fn foreground(&self) -> Rgba8 { self.palette().foreground } /// Get the grid line color of the theme - pub const fn grid(&self) -> ColorU8 { + pub const fn grid(&self) -> Rgba8 { self.palette().grid } /// Get the legend background fill color of the theme - pub const fn legend_fill(&self) -> ColorU8 { + pub const fn legend_fill(&self) -> Rgba8 { self.palette().legend_fill } /// Get the legend border color of the theme - pub const fn legend_border(&self) -> ColorU8 { + pub const fn legend_border(&self) -> Rgba8 { self.palette().legend_border } @@ -74,15 +74,15 @@ impl Theme { #[derive(Debug, Clone, Copy, PartialEq)] pub struct ThemePalette { /// Background color - pub background: ColorU8, + pub background: Rgba8, /// Foreground color - pub foreground: ColorU8, + pub foreground: Rgba8, /// Grid line color - pub grid: ColorU8, + pub grid: Rgba8, /// Legend background fill color - pub legend_fill: ColorU8, + pub legend_fill: Rgba8, /// Legend border color - pub legend_border: ColorU8, + pub legend_border: Rgba8, } impl ThemePalette { @@ -90,17 +90,17 @@ impl ThemePalette { pub const LIGHT: Self = Self { background: color::WHITE, foreground: color::BLACK, - grid: ColorU8::from_html(b"#808080").with_opacity(0.6), + grid: Rgba8::from_hex(b"#808080").with_opacity(0.6), legend_fill: color::WHITE.with_opacity(0.5), legend_border: color::BLACK, }; /// The dark built-in theme palette pub const DARK: Self = Self { - background: ColorU8::from_html(b"#1e1e2e"), + background: Rgba8::from_hex(b"#1e1e2e"), foreground: color::WHITE, - grid: ColorU8::from_html(b"#c0c0c0").with_opacity(0.6), - legend_fill: ColorU8::from_html(b"#1e1e2e").with_opacity(0.5), + grid: Rgba8::from_hex(b"#c0c0c0").with_opacity(0.6), + legend_fill: Rgba8::from_hex(b"#1e1e2e").with_opacity(0.5), legend_border: color::WHITE, }; @@ -118,13 +118,13 @@ impl ThemePalette { /// Create a new custom theme from background and foreground colors /// The grid, legend fill and legend border colors are derived automatically. - pub fn new_back_and_fore(background: ColorU8, foreground: ColorU8) -> Self { + pub fn new_back_and_fore(background: Rgba8, foreground: Rgba8) -> Self { let grid = if background.luminance() < 0.5 { // Dark background - ColorU8::from_rgb(192, 192, 192).with_opacity(0.6) + Rgb8::new(192, 192, 192).with_opacity(0.6) } else { // Light background - ColorU8::from_rgb(128, 128, 128).with_opacity(0.6) + Rgb8::new(128, 128, 128).with_opacity(0.6) }; let legend_fill = background.with_opacity(0.5); @@ -172,7 +172,7 @@ impl std::str::FromStr for Col { } impl color::ResolveColor for Theme { - fn resolve_color(&self, col: &Col) -> ColorU8 { + fn resolve_color(&self, col: &Col) -> Rgba8 { match col { Col::Background => self.background(), Col::Foreground => self.foreground(), @@ -189,7 +189,7 @@ pub enum Color { /// A color from the theme Theme(Col), /// A fixed RGB color - Fixed(ColorU8), + Fixed(Rgba8), } impl From for Color { @@ -198,8 +198,8 @@ impl From for Color { } } -impl From for Color { - fn from(color: ColorU8) -> Self { +impl From for Color { + fn from(color: Rgba8) -> Self { Color::Fixed(color) } } @@ -207,13 +207,13 @@ impl From for Color { impl super::Color for Color {} impl std::str::FromStr for Color { - type Err = ::Err; + type Err = ::Err; fn from_str(s: &str) -> Result { if let Ok(col) = s.parse::() { Ok(Color::Theme(col)) } else { - let c = s.parse::()?; + let c = s.parse::()?; Ok(Color::Fixed(c)) } } @@ -226,7 +226,7 @@ impl text::rich::Foreground for Color { } impl color::ResolveColor for Theme { - fn resolve_color(&self, col: &Color) -> ColorU8 { + fn resolve_color(&self, col: &Color) -> Rgba8 { match col { Color::Theme(col) => self.resolve_color(col), Color::Fixed(c) => *c, diff --git a/src/utils.rs b/src/utils.rs index 1711041..c890a0d 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -2,7 +2,7 @@ use std::fmt; -use plotive_base::{ColorU8, color}; +use plotive_base::{Rgba8, color}; use crate::des::series; use crate::style; @@ -75,7 +75,7 @@ pub trait MplStyle { impl MplStyle for series::Line { fn with_mpl_style(mut self, mpl_style: &str) -> Result { - if let Ok(c) = mpl_style.parse::() { + if let Ok(c) = mpl_style.parse::() { let mut s = self.stroke().clone(); s.color = c.into(); return Ok(self.with_stroke(s)); @@ -157,14 +157,14 @@ impl LineMplStyle { } } ':' => style.set_pattern(style::LinePattern::Dot)?, - 'b' => style.set_color(ColorU8::from_html(b"#0000ff").into())?, - 'g' => style.set_color(ColorU8::from_html(b"#008000").into())?, - 'r' => style.set_color(ColorU8::from_html(b"#ff0000").into())?, - 'c' => style.set_color(ColorU8::from_html(b"#00bfbf").into())?, - 'm' => style.set_color(ColorU8::from_html(b"#bf00bf").into())?, - 'y' => style.set_color(ColorU8::from_html(b"#bfbf00").into())?, - 'k' => style.set_color(ColorU8::from_html(b"#000000").into())?, - 'w' => style.set_color(ColorU8::from_html(b"#ffffff").into())?, + 'b' => style.set_color(Rgba8::from_hex(b"#0000ff").into())?, + 'g' => style.set_color(Rgba8::from_hex(b"#008000").into())?, + 'r' => style.set_color(Rgba8::from_hex(b"#ff0000").into())?, + 'c' => style.set_color(Rgba8::from_hex(b"#00bfbf").into())?, + 'm' => style.set_color(Rgba8::from_hex(b"#bf00bf").into())?, + 'y' => style.set_color(Rgba8::from_hex(b"#bfbf00").into())?, + 'k' => style.set_color(Rgba8::from_hex(b"#000000").into())?, + 'w' => style.set_color(Rgba8::from_hex(b"#ffffff").into())?, 'C' => { let s: usize = mpl_style[i + 1..].parse().map_err(|_| { MplStyleError(format!( diff --git a/svg/src/lib.rs b/svg/src/lib.rs index 78c07fa..07683d9 100644 --- a/svg/src/lib.rs +++ b/svg/src/lib.rs @@ -275,7 +275,7 @@ impl SvgSurface { // let span_txt = &whole_txt[span.start()..span.end()]; // let mut span_node = element::TSpan::new(span_txt); // let paint = span.props().fill().map(|c| { - // render::Paint::Solid(ColorU8::from_rgba( + // render::Paint::Solid(Rgba8::from_rgba( // c.red(), // c.green(), // c.blue(), @@ -349,7 +349,7 @@ where N: Node, { if let Some(render::Paint::Solid(color)) = fill { - node.assign("fill", color.html()); + node.assign("fill", color.rgb().html()); if let Some(opacity) = color.opacity() { node.assign("fill-opacity", opacity); } @@ -364,7 +364,7 @@ where { if let Some(stroke) = stroke { let w = stroke.width; - node.assign("stroke", stroke.color.html()); + node.assign("stroke", stroke.color.rgb().html()); node.assign("stroke-width", w); if let Some(opacity) = stroke.color.opacity() { node.assign("stroke-opacity", opacity); diff --git a/tests/src/tests/series.rs b/tests/src/tests/series.rs index 1031aa5..ab8dfbe 100644 --- a/tests/src/tests/series.rs +++ b/tests/src/tests/series.rs @@ -37,7 +37,7 @@ fn series_scatter_sizes() { let y = vec![1.0, 4.0, 9.0, 16.0, 25.0]; let sizes = vec![300.0, 250.0, 200.0, 150.0, 100.0]; - let color: plotive::ColorU8 = "light eggplant".parse().unwrap(); + let color: plotive::Rgba8 = "light eggplant".parse().unwrap(); let plot = des::Plot::new(vec![ des::series::Scatter::new(des::data_inline(x), des::data_inline(y)) @@ -61,8 +61,8 @@ fn series_area_double() { let y1 = vec![10.0, 15.0, 8.0, 6.0, 12.0, 10.0]; let y2 = vec![4.0, 9.0, 2.0, 0.0, 6.0, 4.0]; - let fill = plotive::ColorU8::from_html(b"#888").into(); - let stroke: style::series::Stroke = plotive::ColorU8::from_html(b"#000").into(); + let fill = plotive::Rgba8::from_hex(b"#888").into(); + let stroke: style::series::Stroke = plotive::Rgba8::from_hex(b"#000").into(); let plot = des::Plot::new(vec![ des::series::Area::new( @@ -95,9 +95,9 @@ fn series_area_double_legend() { let y1 = vec![10.0, 15.0, 8.0, 6.0, 12.0, 10.0]; let y2 = vec![4.0, 9.0, 2.0, 0.0, 6.0, 4.0]; - let fill1 = plotive::ColorU8::from_html(b"#888").into(); - let fill2 = plotive::ColorU8::from_html(b"#444").into(); - let stroke: style::series::Stroke = plotive::ColorU8::from_html(b"#000").into(); + let fill1 = plotive::Rgba8::from_hex(b"#888").into(); + let fill2 = plotive::Rgba8::from_hex(b"#444").into(); + let stroke: style::series::Stroke = plotive::Rgba8::from_hex(b"#000").into(); let plot = des::Plot::new(vec![ des::series::Area::new( diff --git a/tests/src/tests/style.rs b/tests/src/tests/style.rs index 06c8169..20ad551 100644 --- a/tests/src/tests/style.rs +++ b/tests/src/tests/style.rs @@ -1,5 +1,5 @@ use plotive::utils::MplStyle; -use plotive::{ColorU8, des}; +use plotive::{Rgba8, des}; use super::{fig_small, line}; use crate::{TestHarness, assert_fig_eq_ref}; @@ -137,9 +137,9 @@ fn style_line_markers_triup_color() { let plot = line_spline() .with_marker( plotive::style::series::Marker::new_with_color( - plotive::ColorU8::from_html(b"#000").into(), + plotive::Rgba8::from_hex(b"#000").into(), ) - .with_stroke(ColorU8::from_html(b"#080").into()) + .with_stroke(Rgba8::from_hex(b"#080").into()) .with_shape(plotive::style::MarkerShape::TriangleUp), ) .into_plot(); diff --git a/text/src/rich.rs b/text/src/rich.rs index 5593e09..4c54c82 100644 --- a/text/src/rich.rs +++ b/text/src/rich.rs @@ -1,4 +1,4 @@ -use plotive_base::{Color, ColorU8, color, geom}; +use plotive_base::{Color, Rgba8, color, geom}; use ttf_parser as ttf; use crate::{Error, font, fontdb, line}; @@ -199,7 +199,7 @@ where } #[derive(Debug, Clone)] -pub struct RichText +pub struct RichText where C: Clone, { @@ -386,7 +386,7 @@ pub trait Foreground { fn foreground() -> Self; } -impl Foreground for ColorU8 { +impl Foreground for Rgba8 { fn foreground() -> Self { color::BLACK } diff --git a/text/src/rich/builder.rs b/text/src/rich/builder.rs index e12ae34..046897a 100644 --- a/text/src/rich/builder.rs +++ b/text/src/rich/builder.rs @@ -694,7 +694,7 @@ where #[cfg(test)] mod tests { - use plotive_base::ColorU8; + use plotive_base::Rgba8; use super::*; use crate::bundled_font_db; @@ -702,7 +702,7 @@ mod tests { #[test] fn underline_span() { let db = bundled_font_db(); - let mut builder: RichTextBuilder = + let mut builder: RichTextBuilder = RichTextBuilder::new("Some RICH\ntext string".to_string(), TextProps::new(12.0)); builder.add_span( 5, diff --git a/text/src/rich/render.rs b/text/src/rich/render.rs index 6cf9259..7c16bac 100644 --- a/text/src/rich/render.rs +++ b/text/src/rich/render.rs @@ -1,11 +1,11 @@ -use plotive_base::{ColorU8, geom}; +use plotive_base::{Rgba8, geom}; use ttf_parser as ttf; use super::RichText; use crate::{font, fontdb}; #[derive(Debug)] -pub enum RichPrimitive<'a, C = ColorU8> +pub enum RichPrimitive<'a, C = Rgba8> where C: Clone, { @@ -104,12 +104,12 @@ pub fn render_rich_text( let render_fn = |primitive: RichPrimitive| match primitive { RichPrimitive::Fill(path, color) => { let mut paint = tiny_skia::Paint::default(); - paint.set_color_rgba8(color.red(), color.green(), color.blue(), color.alpha()); + paint.set_color_rgba8(color.r(), color.g(), color.b(), color.a()); pixmap.fill_path(path, &paint, tiny_skia::FillRule::Winding, transform, mask); } RichPrimitive::Stroke(path, color, width) => { let mut paint = tiny_skia::Paint::default(); - paint.set_color_rgba8(color.red(), color.green(), color.blue(), color.alpha()); + paint.set_color_rgba8(color.r(), color.g(), color.b(), color.a()); let mut stroke = tiny_skia::Stroke::default(); stroke.width = width; pixmap.stroke_path(path, &paint, &stroke, transform, mask); From 9c28cd1278be2073140e784f75f14dab89099093 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Thebault?= Date: Mon, 4 May 2026 23:44:26 +0200 Subject: [PATCH 02/16] sanitize (a little) opacity handling --- base/src/color.rs | 171 +++++++++++----------- src/des/axis.rs | 4 +- src/des/legend.rs | 5 +- src/style.rs | 28 ++-- src/style/theme.rs | 14 +- svg/src/lib.rs | 14 +- tests/refs/legend-pos/bottom.svg | 2 +- tests/refs/legend-pos/in_bottom.svg | 2 +- tests/refs/legend-pos/in_bottom_left.svg | 2 +- tests/refs/legend-pos/in_bottom_right.svg | 2 +- tests/refs/legend-pos/in_left.svg | 2 +- tests/refs/legend-pos/in_right.svg | 2 +- tests/refs/legend-pos/in_top.svg | 2 +- tests/refs/legend-pos/in_top_left.svg | 2 +- tests/refs/legend-pos/in_top_right.svg | 2 +- tests/refs/legend-pos/left.svg | 2 +- tests/refs/legend-pos/right.svg | 2 +- tests/refs/legend-pos/top.svg | 2 +- tests/refs/series/area-double-legend.svg | 2 +- 19 files changed, 129 insertions(+), 133 deletions(-) diff --git a/base/src/color.rs b/base/src/color.rs index 845007e..a932b37 100644 --- a/base/src/color.rs +++ b/base/src/color.rs @@ -30,13 +30,13 @@ impl ResolveColor for () { } } -/// A simple color type with 8-bit RGB components. +/// A simple color type with 8-bit RGB components, including an alpha channel. #[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub struct Rgb8(u8, u8, u8); +pub struct Rgba8(u8, u8, u8, u8); -impl Rgb8 { - pub const fn new(r: u8, g: u8, b: u8) -> Self { - Self(r, g, b) +impl Rgba8 { + pub const fn new(r: u8, g: u8, b: u8, a: u8) -> Self { + Self(r, g, b, a) } /// Get the red component of the color. @@ -54,35 +54,57 @@ impl Rgb8 { self.2 } + /// Get the alpha channel of the color. + pub const fn a(&self) -> u8 { + self.3 + } + /// Get the HTML hex string representation of the color, e.g. `#ff0000` for red. pub fn html(&self) -> String { - format!("#{:02x}{:02x}{:02x}", self.r(), self.g(), self.b()) + if self.a() == 255 { + format!("#{:02x}{:02x}{:02x}", self.r(), self.g(), self.b()) + } else { + format!( + "#{:02x}{:02x}{:02x}{:02x}", + self.r(), + self.g(), + self.b(), + self.a() + ) + } } - /// Get the RGB components of the color as an array. - pub const fn arr(&self) -> [u8; 3] { - [self.0, self.1, self.2] + /// Get the RGBA components of the color as an array. + pub const fn arr(&self) -> [u8; 4] { + [self.0, self.1, self.2, self.3] } - /// Compute the relative luminance of the color, in linear RGB space. - pub fn luminance(&self) -> f32 { - let lin: LinRgb = (*self).into(); - lin.luminance() + /// Get the Rgb8 representation of the color, ignoring the alpha channel. + pub const fn rgb(&self) -> Rgb8 { + Rgb8(self.0, self.1, self.2) } - /// Get this color with an alpha channel, with the given alpha value. - pub const fn with_a(&self, a: u8) -> Rgba8 { - Rgba8(self.0, self.1, self.2, a) + /// Split the representation into Rgb8 representation and the optional opacity value. + /// The opacity value is None if the alpha channel is 255 (fully opaque), otherwise it is Some(alpha / 255.0). + pub const fn split_rgb_opacity(&self) -> (Rgb8, Option) { + let opacity = if self.a() == 255 { + None + } else { + Some(self.a() as f32 / 255.0) + }; + (Rgb8(self.0, self.1, self.2), opacity) } - /// Get this color with an alpha channel, with alpha specified between 0.0 and 1.0. - pub const fn with_opacity(&self, opacity: f32) -> Rgba8 { - let a = (opacity.clamp(0.0, 1.0) * 255.0).round() as u8; - self.with_a(a) + /// Compute the relative luminance of the color, in linear RGB space. + /// The alpha channel is ignored for this computation. + pub fn luminance(&self) -> f32 { + let lin: LinRgb = self.rgb().into(); + lin.luminance() } /// Parse a color from an HTML hex string, e.g. `#ff0000` or `#f00` for red. - /// The hex string must start with a `#` and be followed by either 3 or 6 hexadecimal digits. + /// Supports also alpha channel: `#ff000080` or `#f008`. + /// The hex string must start with a `#` and be followed by either 3, 4, 6, or 8 hexadecimal digits. /// /// Panics if the hex string is invalid, e.g. if it contains non-hexadecimal characters or has an invalid length. pub const fn from_hex(hex: &[u8]) -> Self { @@ -97,26 +119,44 @@ impl Rgb8 { let r = r << 4 | r; let g = g << 4 | g; let b = b << 4 | b; - Rgb8::new(r, g, b) + Rgba8::new(r, g, b, 255) + } + 5 => { + let r = hex_to_u8(hex[1]); + let g = hex_to_u8(hex[2]); + let b = hex_to_u8(hex[3]); + let a = hex_to_u8(hex[4]); + let r = r << 4 | r; + let g = g << 4 | g; + let b = b << 4 | b; + let a = a << 4 | a; + Rgba8::new(r, g, b, a) } 7 => { let r = hex_to_u8(hex[1]) << 4 | hex_to_u8(hex[2]); let g = hex_to_u8(hex[3]) << 4 | hex_to_u8(hex[4]); let b = hex_to_u8(hex[5]) << 4 | hex_to_u8(hex[6]); - Rgb8::new(r, g, b) + Rgba8::new(r, g, b, 255) + } + 9 => { + let r = hex_to_u8(hex[1]) << 4 | hex_to_u8(hex[2]); + let g = hex_to_u8(hex[3]) << 4 | hex_to_u8(hex[4]); + let b = hex_to_u8(hex[5]) << 4 | hex_to_u8(hex[6]); + let a = hex_to_u8(hex[7]) << 4 | hex_to_u8(hex[8]); + Rgba8::new(r, g, b, a) } _ => panic!("Invalid hex color"), } } } -/// A simple color type with 8-bit RGB components, including an alpha channel. +/// A simple color type with 8-bit RGB components. #[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub struct Rgba8(u8, u8, u8, u8); +pub struct Rgb8(u8, u8, u8); -impl Rgba8 { - pub const fn new(r: u8, g: u8, b: u8, a: u8) -> Self { - Self(r, g, b, a) +impl Rgb8 { + pub const fn new(r: u8, g: u8, b: u8) -> Self { + Self(r, g, b) } /// Get the red component of the color. @@ -134,63 +174,34 @@ impl Rgba8 { self.2 } - /// Get the alpha channel of the color. - pub const fn a(&self) -> u8 { - self.3 - } - /// Get the HTML hex string representation of the color, e.g. `#ff0000` for red. pub fn html(&self) -> String { - if self.a() == 255 { - format!("#{:02x}{:02x}{:02x}", self.r(), self.g(), self.b()) - } else { - format!( - "#{:02x}{:02x}{:02x}{:02x}", - self.r(), - self.g(), - self.b(), - self.a() - ) - } - } - - /// Get the RGBA components of the color as an array. - pub const fn arr(&self) -> [u8; 4] { - [self.0, self.1, self.2, self.3] + format!("#{:02x}{:02x}{:02x}", self.r(), self.g(), self.b()) } - /// Get the Rgb8 representation of the color, ignoring the alpha channel. - pub const fn rgb(&self) -> Rgb8 { - Rgb8(self.0, self.1, self.2) + /// Get the RGB components of the color as an array. + pub const fn arr(&self) -> [u8; 3] { + [self.0, self.1, self.2] } /// Compute the relative luminance of the color, in linear RGB space. - /// The alpha channel is ignored for this computation. pub fn luminance(&self) -> f32 { - let lin: LinRgb = self.rgb().into(); + let lin: LinRgb = (*self).into(); lin.luminance() } - /// Get the alpha channel of the color as a float between 0.0 and 1.0. - pub const fn opacity(&self) -> Option { - if self.a() == 255 { - None - } else { - Some(self.a() as f32 / 255.0) - } + /// Get this color with an alpha channel, with the given alpha value. + pub const fn with_a(&self, a: u8) -> Rgba8 { + Rgba8(self.0, self.1, self.2, a) } - /// Get this color with an alpha channel, with alpha specified between 0.0 and 1.0. - - pub const fn with_opacity(self, opacity: f32) -> Self { - assert!(0.0 <= opacity && opacity <= 1.0); - let a = self.a() as f32 * opacity; - Rgba8(self.r(), self.g(), self.b(), a as u8) + /// Get this color with an opaque alpha channel + pub const fn opaque(&self) -> Rgba8 { + Rgba8(self.0, self.1, self.2, 255) } /// Parse a color from an HTML hex string, e.g. `#ff0000` or `#f00` for red. - /// Supports also alpha channel: `#ff000080` or `#f008`. - /// The hex string must start with a `#` and be followed by either 3, 4, 6, or 8 hexadecimal digits. + /// The hex string must start with a `#` and be followed by either 3 or 6 hexadecimal digits. /// /// Panics if the hex string is invalid, e.g. if it contains non-hexadecimal characters or has an invalid length. pub const fn from_hex(hex: &[u8]) -> Self { @@ -205,31 +216,13 @@ impl Rgba8 { let r = r << 4 | r; let g = g << 4 | g; let b = b << 4 | b; - Rgba8::new(r, g, b, 255) - } - 5 => { - let r = hex_to_u8(hex[1]); - let g = hex_to_u8(hex[2]); - let b = hex_to_u8(hex[3]); - let a = hex_to_u8(hex[4]); - let r = r << 4 | r; - let g = g << 4 | g; - let b = b << 4 | b; - let a = a << 4 | a; - Rgba8::new(r, g, b, a) + Rgb8::new(r, g, b) } 7 => { let r = hex_to_u8(hex[1]) << 4 | hex_to_u8(hex[2]); let g = hex_to_u8(hex[3]) << 4 | hex_to_u8(hex[4]); let b = hex_to_u8(hex[5]) << 4 | hex_to_u8(hex[6]); - Rgba8::new(r, g, b, 255) - } - 9 => { - let r = hex_to_u8(hex[1]) << 4 | hex_to_u8(hex[2]); - let g = hex_to_u8(hex[3]) << 4 | hex_to_u8(hex[4]); - let b = hex_to_u8(hex[5]) << 4 | hex_to_u8(hex[6]); - let a = hex_to_u8(hex[7]) << 4 | hex_to_u8(hex[8]); - Rgba8::new(r, g, b, a) + Rgb8::new(r, g, b) } _ => panic!("Invalid hex color"), } diff --git a/src/des/axis.rs b/src/des/axis.rs index a2a7c98..27f5d5c 100644 --- a/src/des/axis.rs +++ b/src/des/axis.rs @@ -639,7 +639,7 @@ pub mod ticks { width: 1.0, color: theme::Col::Grid.into(), pattern: style::LinePattern::Solid, - opacity: None, + opacity: Some(0.6), }) } } @@ -736,7 +736,7 @@ pub mod ticks { width: 0.5, color: theme::Col::Grid.into(), pattern: style::LinePattern::Dash(Dash::default()), - opacity: None, + opacity: Some(0.6), }) } } diff --git a/src/des/legend.rs b/src/des/legend.rs index 915e455..5cf9f51 100644 --- a/src/des/legend.rs +++ b/src/des/legend.rs @@ -43,16 +43,17 @@ pub struct Legend { impl Default for Legend { /// Create a default legend configuration - /// - Fill color: theme::Col::LegendFill + /// - Fill color: theme::Col::LegendFill, opacity 0.5 /// - Border: theme::Col::LegendBorder, 1.0 /// - Font: default EntryFont /// - Default column layout (depdend on the position and number and width of entries) /// - Default padding and spacing fn default() -> Self { + let fill: theme::Fill = theme::Col::LegendFill.into(); Self { pos: Pos::default(), font: EntryFont::default(), - fill: Some(theme::Col::LegendFill.into()), + fill: Some(fill.with_opacity(0.5)), border: Some(theme::Col::LegendBorder.into()), columns: None, padding: defaults::LEGEND_PADDING.into(), diff --git a/src/style.rs b/src/style.rs index 85158cd..dae5135 100644 --- a/src/style.rs +++ b/src/style.rs @@ -6,7 +6,7 @@ pub mod theme; pub use crate::style::series::Palette; pub use crate::style::theme::Theme; -use crate::{Color, Rgba8, ResolveColor, render}; +use crate::{Color, ResolveColor, Rgba8, render}; /// Overall style definition for figures /// @@ -145,6 +145,15 @@ impl ResolveColor for (&Style, usize) { } } +fn add_opacity(c: Rgba8, opacity: Option) -> Rgba8 { + debug_assert!(opacity.map_or(true, |t| t >= 0.0 && t <= 1.0)); + + match opacity { + Some(opacity) => Rgba8::new(c.r(), c.g(), c.b(), (c.a() as f32 * opacity).round() as u8), + None => c, + } +} + /// Dash pattern for dashed lines /// A dash pattern is a sequence of lengths that specify the lengths of /// alternating dashes and gaps. @@ -228,11 +237,7 @@ impl Stroke { where R: ResolveColor, { - let color = if let Some(opacity) = self.opacity { - self.color.resolve(rc).with_opacity(opacity) - } else { - self.color.resolve(rc) - }; + let color = add_opacity(self.color.resolve(rc), self.opacity); let pattern = match &self.pattern { LinePattern::Solid => render::LinePattern::Solid, @@ -336,14 +341,9 @@ impl Fill { R: ResolveColor, { match self { - Fill::Solid { - color, - opacity: None, - } => render::Paint::Solid(color.resolve(rc)), - Fill::Solid { - color, - opacity: Some(opacity), - } => render::Paint::Solid(color.resolve(rc).with_opacity(*opacity)), + Fill::Solid { color, opacity } => { + render::Paint::Solid(add_opacity(color.resolve(rc), *opacity)) + } } } } diff --git a/src/style/theme.rs b/src/style/theme.rs index 6a2c7da..dbbc213 100644 --- a/src/style/theme.rs +++ b/src/style/theme.rs @@ -90,8 +90,8 @@ impl ThemePalette { pub const LIGHT: Self = Self { background: color::WHITE, foreground: color::BLACK, - grid: Rgba8::from_hex(b"#808080").with_opacity(0.6), - legend_fill: color::WHITE.with_opacity(0.5), + grid: Rgba8::from_hex(b"#808080"), + legend_fill: color::WHITE, legend_border: color::BLACK, }; @@ -99,8 +99,8 @@ impl ThemePalette { pub const DARK: Self = Self { background: Rgba8::from_hex(b"#1e1e2e"), foreground: color::WHITE, - grid: Rgba8::from_hex(b"#c0c0c0").with_opacity(0.6), - legend_fill: Rgba8::from_hex(b"#1e1e2e").with_opacity(0.5), + grid: Rgba8::from_hex(b"#c0c0c0"), + legend_fill: Rgba8::from_hex(b"#1e1e2e"), legend_border: color::WHITE, }; @@ -121,13 +121,13 @@ impl ThemePalette { pub fn new_back_and_fore(background: Rgba8, foreground: Rgba8) -> Self { let grid = if background.luminance() < 0.5 { // Dark background - Rgb8::new(192, 192, 192).with_opacity(0.6) + Rgb8::new(192, 192, 192).opaque() } else { // Light background - Rgb8::new(128, 128, 128).with_opacity(0.6) + Rgb8::new(128, 128, 128).opaque() }; - let legend_fill = background.with_opacity(0.5); + let legend_fill = background; let legend_border = foreground; Self { diff --git a/svg/src/lib.rs b/svg/src/lib.rs index 07683d9..12d429b 100644 --- a/svg/src/lib.rs +++ b/svg/src/lib.rs @@ -349,8 +349,9 @@ where N: Node, { if let Some(render::Paint::Solid(color)) = fill { - node.assign("fill", color.rgb().html()); - if let Some(opacity) = color.opacity() { + let (rgb, opacity) = color.split_rgb_opacity(); + node.assign("fill", rgb.html()); + if let Some(opacity) = opacity { node.assign("fill-opacity", opacity); } } else { @@ -363,12 +364,13 @@ where N: Node, { if let Some(stroke) = stroke { - let w = stroke.width; - node.assign("stroke", stroke.color.rgb().html()); - node.assign("stroke-width", w); - if let Some(opacity) = stroke.color.opacity() { + let (rgb, opacity) = stroke.color.split_rgb_opacity(); + node.assign("stroke", rgb.html()); + if let Some(opacity) = opacity { node.assign("stroke-opacity", opacity); } + let w = stroke.width; + node.assign("stroke-width", w); match stroke.pattern { render::LinePattern::Solid => (), render::LinePattern::Dash(dash) => { diff --git a/tests/refs/legend-pos/bottom.svg b/tests/refs/legend-pos/bottom.svg index df7adeb..ed4ed37 100644 --- a/tests/refs/legend-pos/bottom.svg +++ b/tests/refs/legend-pos/bottom.svg @@ -7,7 +7,7 @@ - + \ No newline at end of file diff --git a/tests/refs/legend-pos/in_bottom.svg b/tests/refs/legend-pos/in_bottom.svg index 3c8b86e..405e9a1 100644 --- a/tests/refs/legend-pos/in_bottom.svg +++ b/tests/refs/legend-pos/in_bottom.svg @@ -7,7 +7,7 @@ - + \ No newline at end of file diff --git a/tests/refs/legend-pos/in_bottom_left.svg b/tests/refs/legend-pos/in_bottom_left.svg index c1f76e6..f5e2387 100644 --- a/tests/refs/legend-pos/in_bottom_left.svg +++ b/tests/refs/legend-pos/in_bottom_left.svg @@ -7,7 +7,7 @@ - + \ No newline at end of file diff --git a/tests/refs/legend-pos/in_bottom_right.svg b/tests/refs/legend-pos/in_bottom_right.svg index 3d7117c..e9b5284 100644 --- a/tests/refs/legend-pos/in_bottom_right.svg +++ b/tests/refs/legend-pos/in_bottom_right.svg @@ -7,7 +7,7 @@ - + \ No newline at end of file diff --git a/tests/refs/legend-pos/in_left.svg b/tests/refs/legend-pos/in_left.svg index 9bed7d2..5408f19 100644 --- a/tests/refs/legend-pos/in_left.svg +++ b/tests/refs/legend-pos/in_left.svg @@ -7,7 +7,7 @@ - + \ No newline at end of file diff --git a/tests/refs/legend-pos/in_right.svg b/tests/refs/legend-pos/in_right.svg index 16cf201..3dd9e3a 100644 --- a/tests/refs/legend-pos/in_right.svg +++ b/tests/refs/legend-pos/in_right.svg @@ -7,7 +7,7 @@ - + \ No newline at end of file diff --git a/tests/refs/legend-pos/in_top.svg b/tests/refs/legend-pos/in_top.svg index 3131ed0..99e2b63 100644 --- a/tests/refs/legend-pos/in_top.svg +++ b/tests/refs/legend-pos/in_top.svg @@ -7,7 +7,7 @@ - + \ No newline at end of file diff --git a/tests/refs/legend-pos/in_top_left.svg b/tests/refs/legend-pos/in_top_left.svg index 5c5aa40..863d92f 100644 --- a/tests/refs/legend-pos/in_top_left.svg +++ b/tests/refs/legend-pos/in_top_left.svg @@ -7,7 +7,7 @@ - + \ No newline at end of file diff --git a/tests/refs/legend-pos/in_top_right.svg b/tests/refs/legend-pos/in_top_right.svg index 6c5c731..8bc6d2a 100644 --- a/tests/refs/legend-pos/in_top_right.svg +++ b/tests/refs/legend-pos/in_top_right.svg @@ -7,7 +7,7 @@ - + \ No newline at end of file diff --git a/tests/refs/legend-pos/left.svg b/tests/refs/legend-pos/left.svg index 3076852..a0a63e6 100644 --- a/tests/refs/legend-pos/left.svg +++ b/tests/refs/legend-pos/left.svg @@ -7,7 +7,7 @@ - + \ No newline at end of file diff --git a/tests/refs/legend-pos/right.svg b/tests/refs/legend-pos/right.svg index 3d19755..7800ecd 100644 --- a/tests/refs/legend-pos/right.svg +++ b/tests/refs/legend-pos/right.svg @@ -7,7 +7,7 @@ - + \ No newline at end of file diff --git a/tests/refs/legend-pos/top.svg b/tests/refs/legend-pos/top.svg index 5e84a75..88bff2a 100644 --- a/tests/refs/legend-pos/top.svg +++ b/tests/refs/legend-pos/top.svg @@ -7,7 +7,7 @@ - + \ No newline at end of file diff --git a/tests/refs/series/area-double-legend.svg b/tests/refs/series/area-double-legend.svg index 8bbf7ab..4496df1 100644 --- a/tests/refs/series/area-double-legend.svg +++ b/tests/refs/series/area-double-legend.svg @@ -1,6 +1,6 @@ - + From a73f74dabfd7eaacc6b3267b138a1b10a1580d48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Thebault?= Date: Tue, 5 May 2026 09:38:49 +0200 Subject: [PATCH 03/16] scale marker size with data instead of ignoring marker size --- src/des/series.rs | 7 +++---- src/drawing/series.rs | 14 ++++++-------- src/style.rs | 5 +++++ tests/refs/series/scatter-sizes.png | Bin 13189 -> 13075 bytes tests/refs/series/scatter-sizes.svg | 10 +++++----- tests/src/tests/series.rs | 2 +- 6 files changed, 20 insertions(+), 18 deletions(-) diff --git a/src/des/series.rs b/src/des/series.rs index 6d84273..73e0436 100644 --- a/src/des/series.rs +++ b/src/des/series.rs @@ -313,10 +313,9 @@ impl Line { /// Useful for visualizing correlations, distributions, and discrete data points. /// /// Optional sizes data column can be used to specify the size of each marker, for bubble charts. -/// If provided, the size field of the marker is ignored and the size of each marker -/// is determined by the corresponding value in the sizes data column. -/// Just like marker size, the size data is interpreted as an area. -/// (diameter = sqrt(size data) for circle marker). +/// If provided, the marker size will be determined by the values in the sizes data column, scaled by the marker size in the style (e.g. `marker.size`). +/// Marker size is interpreted as an area, so the actual size of the marker will be proportional to the square root of the sizes data value +/// (e.g. for circle marker: diameter = sqrt(marker size * size column data)). /// The sizes data column must have the same length as the x and y data columns. #[derive(Debug, Clone)] pub struct Scatter { diff --git a/src/drawing/series.rs b/src/drawing/series.rs index 42ee50f..435768e 100644 --- a/src/drawing/series.rs +++ b/src/drawing/series.rs @@ -617,7 +617,8 @@ impl MarkerData { let rc = (style, index); for p in &self.points { - let transform = geom::Transform::from_translate(p.0.x, p.0.y).pre_scale(p.1, p.1); + let scale = self.marker.size.scale(p.1).to_visual_size(); + let transform = geom::Transform::from_translate(p.0.x, p.0.y).pre_scale(scale, scale); let path = render::Path { path: &self.path, @@ -626,7 +627,7 @@ impl MarkerData { .marker .stroke .as_ref() - .map(|l| l.as_stroke(&rc).with_multiplied_width(1.0 / p.1)), + .map(|l| l.as_stroke(&rc).with_multiplied_width(1.0 / scale)), transform: Some(&transform), }; surface.draw_path(&path); @@ -693,7 +694,6 @@ impl Line { self.path = Some(path); if let Some(marker_data) = self.marker_data.as_mut() { - let size = marker_data.marker.size.to_visual_size(); let mut points = Vec::with_capacity(x_col.len()); for (x, y) in x_col.sample_iter().zip(y_col.sample_iter()) { @@ -703,7 +703,7 @@ impl Line { let (x, y) = cm.map_coord((x, y)).expect("Should be valid coordinates"); let x = rect.left() + x; let y = rect.bottom() - y; - points.push((geom::Point { x, y }, size)); + points.push((geom::Point { x, y }, 1.0)); } marker_data.points = points; } @@ -787,7 +787,6 @@ impl Scatter { } let mut points = Vec::with_capacity(x_col.len()); - let default_vs = self.marker_data.marker.size.to_visual_size(); let mut sizes_iter = sizes_col.map(|sc| sc.sample_iter()); @@ -803,10 +802,9 @@ impl Scatter { .as_mut() .and_then(|iter| iter.next()) .and_then(|v| v.as_num()) - .map(|v| style::MarkerSize::from(v as f32).to_visual_size()) - .unwrap_or(default_vs); + .unwrap_or(1.0); - points.push((geom::Point { x, y }, vs)); + points.push((geom::Point { x, y }, vs as f32)); } self.marker_data.points = points; } diff --git a/src/style.rs b/src/style.rs index dae5135..d7d8955 100644 --- a/src/style.rs +++ b/src/style.rs @@ -387,6 +387,11 @@ pub enum MarkerShape { pub struct MarkerSize(pub f32); impl MarkerSize { + /// Scale the marker area by the given factor, returning self for chaining + pub fn scale(self, factor: f32) -> Self { + MarkerSize(self.0 * factor) + } + /// Convert the marker size to a visual size (e.g. diameter for circle marker) pub fn to_visual_size(&self) -> f32 { self.0.sqrt() diff --git a/tests/refs/series/scatter-sizes.png b/tests/refs/series/scatter-sizes.png index 49ad4d0f9ff75421e878dcb7cf797581f07e7709..eba2215487411ce9d5129bf9dc44c5172fc64340 100644 GIT binary patch literal 13075 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 literal 13189 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 diff --git a/tests/refs/series/scatter-sizes.svg b/tests/refs/series/scatter-sizes.svg index 46b3187..f9c881a 100644 --- a/tests/refs/series/scatter-sizes.svg +++ b/tests/refs/series/scatter-sizes.svg @@ -4,11 +4,11 @@ - - - - - + + + + + \ No newline at end of file diff --git a/tests/src/tests/series.rs b/tests/src/tests/series.rs index ab8dfbe..ee9a41e 100644 --- a/tests/src/tests/series.rs +++ b/tests/src/tests/series.rs @@ -35,7 +35,7 @@ fn series_scatter_nodata() { fn series_scatter_sizes() { let x = vec![1.0, 2.0, 3.0, 4.0, 5.0]; let y = vec![1.0, 4.0, 9.0, 16.0, 25.0]; - let sizes = vec![300.0, 250.0, 200.0, 150.0, 100.0]; + let sizes = vec![8.0, 4.0, 2.0, 1.0, 0.5]; let color: plotive::Rgba8 = "light eggplant".parse().unwrap(); From 98ac52ab2e2b52b9f525db6008bae147e953de96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Thebault?= Date: Tue, 5 May 2026 00:31:44 +0200 Subject: [PATCH 04/16] colormap implementation for scatter plots --- Cargo.toml | 4 ++ base/src/color.rs | 28 +++++--- examples/stars.csv | 46 +++++++++++++ examples/stars.rs | 104 ++++++++++++++++++++++++++++ iced/src/surface.rs | 3 +- src/color.rs | 92 +++++++++++++++++++++++++ src/data.rs | 12 ++++ src/des.rs | 1 + src/des/cmap.rs | 107 +++++++++++++++++++++++++++++ src/des/series.rs | 39 +++++++++-- src/drawing/series.rs | 138 ++++++++++++++++++++++++++++++++------ src/lib.rs | 5 +- src/render.rs | 19 ++++++ tests/src/tests/series.rs | 2 +- 14 files changed, 557 insertions(+), 43 deletions(-) create mode 100644 examples/stars.csv create mode 100644 examples/stars.rs create mode 100644 src/color.rs create mode 100644 src/des/cmap.rs diff --git a/Cargo.toml b/Cargo.toml index 744918d..f18924f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -100,6 +100,10 @@ name = "readme" [[example]] name = "sine" +[[example]] +name = "stars" +required-features = ["data-csv"] + [[example]] name = "subplots" required-features = ["utils"] diff --git a/base/src/color.rs b/base/src/color.rs index a932b37..ca6df51 100644 --- a/base/src/color.rs +++ b/base/src/color.rs @@ -451,6 +451,12 @@ impl FromStr for Rgba8 { } } +/// A trait for interpolating between two colors, used for color scales in heatmaps and similar plots. +pub trait Lerp { + /// Interpolate between two colors using a parameter t in the range [0.0, 1.0]. + fn lerp(self, other: Self, t: f32) -> Self; +} + /// Non-linear sRGB color with f32 RGB components in the range [0.0, 1.0]. /// This is the same colorspace as Rgb8 but represented as f32. #[derive(Debug, Clone, Copy, PartialEq)] @@ -527,9 +533,13 @@ impl LinRgb { pub const fn luminance(&self) -> f32 { 0.2126 * self.0 + 0.7152 * self.1 + 0.0722 * self.2 } +} + +// It is checked that the components of the color are valid, so we can safely implement Eq. +impl Eq for LinRgb {} - /// Interpolate between two linear RGB colors using a parameter t in the range [0.0, 1.0]. - pub const fn lerp(self, other: Self, t: f32) -> Self { +impl Lerp for LinRgb { + fn lerp(self, other: Self, t: f32) -> Self { debug_assert!(t >= 0.0 && t <= 1.0, "t must be in the range [0.0, 1.0]"); let r = self.0 * (1.0 - t) + other.0 * t; let g = self.1 * (1.0 - t) + other.1 * t; @@ -538,9 +548,6 @@ impl LinRgb { } } -// It is checked that the components of the color are valid, so we can safely implement Eq. -impl Eq for LinRgb {} - /// A perceptually uniform color space based on the OkLab model, with f32 components. /// Very useful for interpolation of colors, as it produces much smoother gradients than sRGB or linear RGB. #[derive(Debug, Clone, Copy, PartialEq)] @@ -572,9 +579,13 @@ impl OkLab { pub const fn b(&self) -> f32 { self.2 } +} + +// It is checked that the components of the color are valid, so we can safely implement Eq. +impl Eq for OkLab {} - /// Interpolate between two OkLab colors using a parameter t in the range [0.0, 1.0]. - pub const fn lerp(self, other: Self, t: f32) -> Self { +impl Lerp for OkLab { + fn lerp(self, other: Self, t: f32) -> Self { debug_assert!(t >= 0.0 && t <= 1.0, "t must be in the range [0.0, 1.0]"); let r = self.0 * (1.0 - t) + other.0 * t; let g = self.1 * (1.0 - t) + other.1 * t; @@ -583,9 +594,6 @@ impl OkLab { } } -// It is checked that the components of the color are valid, so we can safely implement Eq. -impl Eq for OkLab {} - impl From for Rgb8 { fn from(srgb: SRgb) -> Self { let r = (srgb.0 * 255.0).round() as u8; diff --git a/examples/stars.csv b/examples/stars.csv new file mode 100644 index 0000000..9df7eb1 --- /dev/null +++ b/examples/stars.csv @@ -0,0 +1,46 @@ +Name,Mass (M☉),Absolute Magnitude,Apparent Magnitude,Distance (LY),RA (h:m:s),DEC (d:m:s),Surface Temperature (K),Spectral Type +Sirius A,2.02,1.42,-1.46,8.58,06:45:08.917,-16:42:58.01,9940,A1V +Canopus,8.5,-5.53,-0.72,310,06:23:57.109,-52:41:44.38,7200,F0Ib-II +Rigil Kentaurus,1.10,4.38,-0.27,4.37,14:39:36.494,-60:50:02.31,5790,G2V +Arcturus,1.08,-0.30,-0.05,36.7,14:15:39.672,+19:10:56.67,4290,K0III +Vega,2.15,0.58,0.03,25.05,18:36:56.336,+38:47:01.28,7600,A0V +Capella,5.04,-0.48,0.08,42.9,05:16:41.359,+45:59:52.77,4970,G5IIIe+G0III +Rigel,21.0,-8.10,0.13,863,05:14:32.272,-08:12:05.91,12100,B8Iab +Procyon,1.4,2.65,0.34,11.40,07:39:18.119,+05:13:29.99,6530,F5IV-V +Achernar,7.5,-2.77,0.46,114,01:37:42.845,-57:14:12.31,7700,B6Vep +Betelgeuse,19.0,-5.85,0.50,642.5,05:55:10.305,+07:24:25.43,3500,M1-2Ia +Hadar,14.0,-5.41,0.61,390,14:03:49.409,-60:22:22.95,22000,B1V +Altair,1.79,2.21,0.77,16.73,19:50:46.998,+08:52:05.96,7550,A7V +Acrux,16.0,-4.82,0.77,321,12:26:35.534,-63:05:56.73,28000,B0.5IV +Aldebaran,1.7,-0.63,0.85,65.3,04:35:55.239,+16:30:33.49,3910,K5III +Spica,10.25,-3.55,0.98,250,13:25:11.579,-11:09:40.75,22400,B1V +Antares,12.4,-5.28,1.06,550,16:29:24.459,-26:25:55.21,3400,M0.5Iab-Ib +Pollux,1.86,1.09,1.14,33.78,07:45:18.949,+28:01:34.32,4666,K0IIIb +Fomalhaut,1.92,1.74,1.16,25.13,22:57:39.045,-29:37:20.08,8590,A3V +Deneb,19.0,-8.38,1.25,2615,20:41:25.916,+45:16:49.22,8525,A2Iae +Beta Crucis,14.0,-3.92,1.25,280,12:47:43.120,-59:41:19.58,27000,B0.5IV +Regulus,3.8,-0.52,1.35,79.3,10:08:22.311,+11:58:01.98,10300,B7V +Adhara,4.5,-1.95,1.50,403,06:58:37.548,-28:58:19.51,22000,B2II +Castor,3.85,0.59,1.58,51.5,07:34:35.872,+31:53:17.82,10200,A1V+A2V +Gacrux,3.0,-0.56,1.59,88,12:31:09.215,-57:06:47.48,5800,M3.5III +Shaula,10.0,-4.54,1.62,360,17:33:36.520,-37:06:13.84,25000,B1.5V +Bellatrix,8.6,-2.72,1.64,244,05:25:07.863,+06:20:58.93,21500,B2III +Elnath,4.5,-1.65,1.65,131,05:26:17.420,+28:36:26.84,13400,B7III +Miaplacidus,3.6,-0.86,1.65,100,09:13:11.779,-69:43:02.76,12000,B1.5III +Alnilam,40.0,-6.40,1.69,1300,05:36:12.830,-01:12:06.91,25000,B0Iab +Alnitak,20.0,-5.25,1.74,800,05:40:45.520,-01:56:34.26,28000,O9.5Iab +Alioth,2.9,0.20,1.75,82.6,12:54:01.748,+55:57:35.36,9000,A1p +Dubhe,5.95,-0.80,1.79,123,11:03:38.270,+61:45:03.72,4500,K0III+F0V +Merak,2.7,0.40,2.34,79.4,11:01:50.479,+56:22:56.85,9200,A1V +Phecda,2.9,0.08,2.43,83.2,11:53:49.845,+53:41:41.12,9300,A0Ve +Mizar A,2.2,-0.20,2.23,78.2,13:23:55.543,+54:55:31.38,9000,A2V +Alcor,1.8,1.00,4.01,82.8,13:25:00.000,+54:59:00.00,8000,A5V +Polaris,5.4,-3.64,1.97,433,02:31:48.704,+89:15:50.79,5700,F7Ib-IIv +Kaus Australis,15.0,-3.41,1.85,145,18:24:10.286,-34:23:04.60,22000,B9V +Avior,3.0,-2.26,1.86,630,08:22:30.815,-59:30:33.40,15000,K3III +Menkalinan,2.3,-0.60,1.90,82,02:58:01.582,+03:50:18.46,9000,A2IV +Alkaid,6.0,-1.45,1.85,101,13:47:32.363,+49:18:47.76,15000,B3V +Sargas,7.0,-1.50,1.87,270,17:37:19.137,-42:59:52.34,7500,F1II +Atria,5.0,-2.80,1.92,390,16:58:05.854,-69:02:22.40,4500,K2IIb +Peacock,6.0,-2.00,1.94,180,20:25:38.865,-56:44:06.41,18000,B2IV +Alshain,1.2,2.20,4.22,45,19:55:33.472,+06:24:22.78,5000,K0IV \ No newline at end of file diff --git a/examples/stars.rs b/examples/stars.rs new file mode 100644 index 0000000..fcc73aa --- /dev/null +++ b/examples/stars.rs @@ -0,0 +1,104 @@ +use std::{fs, path}; + +use plotive::data::Source; +use plotive::des::cmap; +use plotive::{data, des, style}; + +mod common; + +fn stars_csv_path() -> path::PathBuf { + let csv = path::Path::new(file!()); + let parent = csv.parent().unwrap(); + parent.join("stars.csv") +} + +/// Convert a right ascension string in the format "h:m:s" to degrees. +fn ra_to_deg(ra: &str) -> f64 { + let parts: Vec<&str> = ra.split(':').collect(); + let h: f64 = parts[0].parse().unwrap(); + let m: f64 = parts[1].parse().unwrap(); + let s: f64 = parts[2].parse().unwrap(); + (h + m / 60.0 + s / 3600.0) * 15.0 +} + +/// Convert a declination string in the format "d:m:s" to degrees. +fn dec_to_deg(dec: &str) -> f64 { + let parts: Vec<&str> = dec.split(':').collect(); + let d: f64 = parts[0].parse().unwrap(); + let m: f64 = parts[1].parse().unwrap(); + let s: f64 = parts[2].parse().unwrap(); + let sign = if d < 0.0 { -1.0 } else { 1.0 }; + sign * (d.abs() + m / 60.0 + s / 3600.0) +} + +fn main() { + let csv_path = stars_csv_path(); + let csv_data = fs::read_to_string(&csv_path).unwrap(); + let table = data::csv::parse_str(&csv_data, Default::default()).unwrap(); + + const RA_COL: &str = "RA (h:m:s)"; + const DEC_COL: &str = "DEC (d:m:s)"; + const TEMP_COL: &str = "Surface Temperature (K)"; + const APP_MAG: &str = "Apparent Magnitude"; + + let mag_col = table.column(APP_MAG).unwrap().f64().unwrap(); + let temp_col = table.column(TEMP_COL).unwrap().f64().unwrap(); + + /// Map the apparent magnitude to a size factor for the star markers, + const MIN_SIZE: f64 = 0.2; + const MAX_SIZE: f64 = 20.0; + let mag_bounds = mag_col.minmax().unwrap(); + let mag_sizes = mag_col + .f64_iter() + .map(|mag| { + let mag = mag.unwrap(); + let norm = (mag - mag_bounds.0) / (mag_bounds.1 - mag_bounds.0); + MAX_SIZE - norm * (MAX_SIZE - MIN_SIZE) + }) + .collect::>(); + + // Map the surface temperatures range from 1000:40000 to 0:1 + const MIN_TEMP: f64 = 1000.0; + const MAX_TEMP: f64 = 40000.0; + let temp_colors = temp_col + .f64_iter() + .map(|temp| { + let temp = temp.unwrap(); + (temp - MIN_TEMP) / (MAX_TEMP - MIN_TEMP) + }) + .collect::>(); + + // Map the right ascension and declination to x and y coordinates in degrees + let ra_col = table.column(RA_COL).unwrap().str().unwrap(); + let dec_col = table.column(DEC_COL).unwrap().str().unwrap(); + let x_coords = ra_col + .str_iter() + .map(|ra| ra_to_deg(ra.unwrap())) + .collect::>(); + let y_coords = dec_col + .str_iter() + .map(|dec| dec_to_deg(dec.unwrap())) + .collect::>(); + + let data_source = data::NamedColumns::new() + .with_column("x", &x_coords) + .with_column("y", &y_coords) + .with_column("mag_sizes", &mag_sizes) + .with_column("temp_colors", &temp_colors); + + let fig = des::Figure::new( + des::Plot::new(vec![ + des::series::Scatter::new("x".into(), "y".into()) + .with_size_data("mag_sizes".into()) + .with_color_data("temp_colors".into(), cmap::stellar()) + .with_marker( + style::series::Marker::default() + .with_fill_opacity(0.6) + ) + .into(), + ]) + .into(), + ); + + common::save_figure(&fig, &data_source, Default::default(), "stars"); +} diff --git a/iced/src/surface.rs b/iced/src/surface.rs index 65ae337..203b8a9 100644 --- a/iced/src/surface.rs +++ b/iced/src/surface.rs @@ -69,8 +69,9 @@ where } if let Some(stroke) = path.stroke.as_ref() { + let tr_scale = (transform.sx.abs() + transform.sy.abs()) / 2.0; let mut pattern = Vec::new(); - let iced_stroke = to_iced_stroke(stroke, &mut pattern, self.scale); + let iced_stroke = to_iced_stroke(stroke, &mut pattern, self.scale * tr_scale); self.frames .last_mut() .unwrap() diff --git a/src/color.rs b/src/color.rs new file mode 100644 index 0000000..b93992e --- /dev/null +++ b/src/color.rs @@ -0,0 +1,92 @@ +//! Color types and utilities for the `plotive` crate. + +/// Rexports of [`plotive_base::color`]` items +pub use plotive_base::color::*; + +use crate::data::SampleRef; + +/// A trait for mapping scalar values to colors, used for color scales in heatmaps and similar plots. +pub trait ColorMap { + /// Maps a scalar value to an RGBA color. + + /// May panic if the value is not the expected type (e.g. numeric for linear or perceptual color maps). + fn map_color(&self, value: SampleRef) -> Rgb8; +} + +/// A color map that interpolates between two colors and optional stops in the linear RGB color space +pub type LinearColorMap = GenColorMap; + +/// A color map that interpolates between two colors and optional stops in a perceptual color space +pub type PerceptualColorMap = GenColorMap; + +/// A generic color map that interpolates between two colors and optional stops in the color space defined by the color type `C`. +#[derive(Debug, Clone)] +pub struct GenColorMap { + start: C, + end: C, + stops: Vec<(f32, C)>, +} + +impl> GenColorMap { + /// Creates a new `CColorMap` with the specified start and end colors, and optional stops. + pub fn new(start: Rgb8, end: Rgb8) -> Self { + Self { + start: start.into(), + end: end.into(), + stops: Vec::new(), + } + } + + /// Add a color stop at the specified position (between 0.0 and 1.0) with the given color. + pub fn with_stop(mut self, position: f32, color: Rgb8) -> Self { + assert!( + (0.0..=1.0).contains(&position), + "Color stop position must be between 0.0 and 1.0" + ); + self.stops.push((position, color.into())); + self.stops.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap()); + self + } + + /// Set the color stops at the specified position (between 0.0 and 1.0) with the given color. + pub fn with_stops(mut self, stops: I) -> Self + where + I: Iterator, + { + self.stops = stops.into_iter().map(|(position, color)| { + assert!( + (0.0..=1.0).contains(&position), + "Color stop position must be between 0.0 and 1.0" + ); + (position, color.into()) + }).collect(); + self.stops.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap()); + self + } +} + +impl> ColorMap for GenColorMap { + fn map_color(&self, value: SampleRef) -> Rgb8 { + let value = value + .as_num() + .expect("Color mapping requires numeric values") as f32; + + let mut start = (0.0, self.start); + let mut end = (1.0, self.end); + + for stop in &self.stops { + if stop.0 <= value { + start = *stop; + } else { + end = *stop; + break; + } + } + let t = if end.0 > start.0 { + (value - start.0) / (end.0 - start.0) + } else { + 0.0 + }; + start.1.lerp(end.1, t).into() + } +} diff --git a/src/data.rs b/src/data.rs index ac426ed..10aa13d 100644 --- a/src/data.rs +++ b/src/data.rs @@ -1363,6 +1363,12 @@ impl NamedOwnedColumns { self.names.push(name.to_string()); self.columns.push(col); } + + /// Add a column with the given name, returning self for chaining + pub fn with_column(mut self, name: &str, col: Box) -> Self { + self.add_column(name, col); + self + } } impl Source for NamedOwnedColumns { @@ -1412,6 +1418,12 @@ impl<'a> NamedColumns<'a> { self.names.push(name.to_string()); self.columns.push(col); } + + /// Add a column with the given name, returning self for chaining + pub fn with_column(mut self, name: &str, col: &'a dyn Column) -> Self { + self.add_column(name, col); + self + } } impl<'a> Source for NamedColumns<'a> { diff --git a/src/des.rs b/src/des.rs index 9751f60..ca976b1 100644 --- a/src/des.rs +++ b/src/des.rs @@ -5,6 +5,7 @@ */ pub mod annot; pub mod axis; +pub mod cmap; pub mod figure; pub mod legend; pub mod plot; diff --git a/src/des/cmap.rs b/src/des/cmap.rs new file mode 100644 index 0000000..334d63b --- /dev/null +++ b/src/des/cmap.rs @@ -0,0 +1,107 @@ +//! A module for defining color maps that can be used in the drawing engine (DES) to map scalar values to colors. +//! +//! The type defined in this module can be converted to a `ColorMap` implementation at draw time, which is used for color mapping in heatmaps and similar plots. +//! Although they could implement `ColorMap` directly, doing so would require additional color conversions for each call of `map_color`, which can be expensive. + +use std::sync::Arc; + +use crate::color::{LinearColorMap, ColorMap, PerceptualColorMap, Rgb8}; + +/// A trait for types that can be converted to a `ColorMap` implementation at draw time. +pub trait AsColorMap { + /// Get the name of this color map, if it has one. + /// It is used when drawing a color bar for this color map, to display the name as a label. + fn name(&self) -> Option<&str>; + /// Convert this type to a `ColorMap` implementation that can be used for color mapping. + fn as_color_map(&self) -> Arc; +} + +/// Describes how to interpolate between colors in a color map, either in linear RGB or perceptual color space. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum LerpMethod { + /// Interpolate colors in the linear RGB color space, which is faster but can produce less smooth gradients. + LinearRgb, + /// Interpolate colors in a perceptual color space, which produces smoother gradients but is slower. + Perceptual, +} + +/// A color map that can be converted to a `MapColor` implementation at draw time. +#[derive(Debug, Clone)] +pub struct LerpColorMap { + method: LerpMethod, + name: Option, + start: Rgb8, + end: Rgb8, + stops: Vec<(f32, Rgb8)>, +} + +impl LerpColorMap { + /// Creates a new `LerpColorMap` with the specified interpolation method, start and end colors, and optional stops. + pub fn new(method: LerpMethod, start: Rgb8, end: Rgb8) -> Self { + Self { + method, + name: None, + start, + end, + stops: Vec::new(), + } + } + + /// Set the name of this color map. + /// It is used when drawing a color bar for this color map, to display the name as a label. + pub fn with_name(mut self, name: impl Into) -> Self { + self.name = Some(name.into()); + self + } + + /// Adds a color stop at the specified position (between 0.0 and 1.0) with the given color. + pub fn with_stop(mut self, position: f32, color: Rgb8) -> Self { + assert!( + (0.0..=1.0).contains(&position), + "Color stop position must be between 0.0 and 1.0" + ); + self.stops.push((position, color)); + self.stops.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap()); + self + } + + /// Get the name of this color map, if it has one. + pub fn name(&self) -> Option<&str> { + self.name.as_deref() + } +} + +impl AsColorMap for LerpColorMap { + fn name(&self) -> Option<&str> { + self.name() + } + + fn as_color_map(&self) -> Arc { + match self.method { + LerpMethod::LinearRgb => { + let mut map = LinearColorMap::new(self.start, self.end); + if !self.stops.is_empty() { + map = map.with_stops(self.stops.iter().copied()); + } + Arc::new(map) + } + LerpMethod::Perceptual => { + let mut map = PerceptualColorMap::new(self.start, self.end); + if !self.stops.is_empty() { + map = map.with_stops(self.stops.iter().copied()); + } + Arc::new(map) + } + } + } +} + +/// A colormap that maps kelvin temperatures to colors, with a range from 1000K to 15000K. +pub fn stellar() -> LerpColorMap { + LerpColorMap::new( + LerpMethod::LinearRgb, + Rgb8::from_hex(b"#ff3800"), // 1000K + Rgb8::from_hex(b"#9bb0ff"), // 15000K + ) + .with_name("Stellar") +} \ No newline at end of file diff --git a/src/des/series.rs b/src/des/series.rs index 73e0436..4fb17e5 100644 --- a/src/des/series.rs +++ b/src/des/series.rs @@ -1,6 +1,6 @@ //! Data series definitions for plots. use crate::data; -use crate::des::axis; +use crate::des::{axis, cmap}; use crate::style::{self, defaults}; #[cfg(feature = "time")] use crate::time; @@ -31,6 +31,18 @@ pub fn data_src_ref>(src: S) -> DataCol { DataCol::SrcRef(src.into()) } +impl From for DataCol { + fn from(value: String) -> Self { + DataCol::SrcRef(value) + } +} + +impl From<&str> for DataCol { + fn from(value: &str) -> Self { + DataCol::SrcRef(value.to_string()) + } +} + /// Build a inline data column. /// Creates a [`DataCol::Inline`] variant from a vector of values. /// Use this to provide data directly in the series. @@ -326,7 +338,8 @@ pub struct Scatter { x_axis: axis::Ref, y_axis: axis::Ref, marker: style::series::Marker, - sizes_data: Option, + size_data: Option, + color_data: Option<(DataCol, cmap::LerpColorMap)>, } impl Scatter { @@ -340,7 +353,8 @@ impl Scatter { x_axis: Default::default(), y_axis: Default::default(), marker: style::series::Marker::default(), - sizes_data: None, + size_data: None, + color_data: None, } } @@ -373,8 +387,14 @@ impl Scatter { } /// Set the sizes data column and return self for chaining - pub fn with_sizes(mut self, sizes_data: DataCol) -> Self { - self.sizes_data = Some(sizes_data); + pub fn with_size_data(mut self, size_data: DataCol) -> Self { + self.size_data = Some(size_data); + self + } + + /// Set the color data column and color map, and return self for chaining + pub fn with_color_data(mut self, color_data: DataCol, color_map: cmap::LerpColorMap) -> Self { + self.color_data = Some((color_data, color_map)); self } @@ -409,8 +429,13 @@ impl Scatter { } /// Get the sizes data column, if any - pub fn sizes_data(&self) -> Option<&DataCol> { - self.sizes_data.as_ref() + pub fn size_data(&self) -> Option<&DataCol> { + self.size_data.as_ref() + } + + /// Get the color data column and color map, if any + pub fn color_data(&self) -> Option<&(DataCol, cmap::LerpColorMap)> { + self.color_data.as_ref() } } diff --git a/src/drawing/series.rs b/src/drawing/series.rs index 435768e..1397e3d 100644 --- a/src/drawing/series.rs +++ b/src/drawing/series.rs @@ -1,7 +1,13 @@ +use std::fmt; +use std::sync::Arc; + use axis::AsBoundRef; +use plotive_base::Rgb8; use plotive_base::geom::PathSegment; use scale::{CoordMap, CoordMapXy}; +use crate::color::ColorMap; +use crate::des::cmap::AsColorMap; use crate::drawing::axis::Bounds; use crate::drawing::plot::Orientation; use crate::drawing::{ @@ -585,10 +591,29 @@ fn calc_xy_line_path( } } +#[derive(Debug, Clone)] +struct MarkerPoint { + pos: geom::Point, + scale: f32, + fill: Option, + stroke: Option, +} + +impl Default for MarkerPoint { + fn default() -> Self { + MarkerPoint { + pos: geom::Point { x: 0.0, y: 0.0 }, + scale: 1.0, + fill: None, + stroke: None, + } + } +} + #[derive(Debug, Clone)] struct MarkerData { path: geom::Path, - points: Vec<(geom::Point, f32)>, // pos and scale + points: Vec, marker: style::series::Marker, } @@ -617,17 +642,32 @@ impl MarkerData { let rc = (style, index); for p in &self.points { - let scale = self.marker.size.scale(p.1).to_visual_size(); - let transform = geom::Transform::from_translate(p.0.x, p.0.y).pre_scale(scale, scale); + let scale = self.marker.size.scale(p.scale).to_visual_size(); + let transform = + geom::Transform::from_translate(p.pos.x, p.pos.y).pre_scale(scale, scale); + + let fill = self.marker.fill.as_ref().map(|f| { + let f = f.as_paint(&rc); + if let Some(rgb) = p.fill { + f.with_rgb(rgb) + } else { + f + } + }); + + let stroke = self.marker.stroke.as_ref().map(|s| { + let s = s.as_stroke(&rc).with_multiplied_width(1.0 / scale); + if let Some(rgb) = p.stroke { + s.with_rgb(rgb) + } else { + s + } + }); let path = render::Path { path: &self.path, - fill: self.marker.fill.as_ref().map(|f| f.as_paint(&rc)), - stroke: self - .marker - .stroke - .as_ref() - .map(|l| l.as_stroke(&rc).with_multiplied_width(1.0 / scale)), + fill, + stroke, transform: Some(&transform), }; surface.draw_path(&path); @@ -703,7 +743,10 @@ impl Line { let (x, y) = cm.map_coord((x, y)).expect("Should be valid coordinates"); let x = rect.left() + x; let y = rect.bottom() - y; - points.push((geom::Point { x, y }, 1.0)); + points.push(MarkerPoint { + pos: geom::Point { x, y }, + ..Default::default() + }); } marker_data.points = points; } @@ -731,29 +774,53 @@ impl Line { } } -#[derive(Debug, Clone)] +#[derive(Clone)] struct Scatter { index: usize, cols: (des::DataCol, des::DataCol), - sizes_col: Option, + size_col: Option, + color_data: Option<(des::DataCol, Option, Arc)>, ab: Option<(axis::Bounds, axis::Bounds)>, axes: (des::axis::Ref, des::axis::Ref), marker_data: MarkerData, } +impl fmt::Debug for Scatter { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_struct("Scatter") + .field("index", &self.index) + .field("cols", &self.cols) + .field("size_col", &self.size_col) + .field( + "color_data", + &(self.color_data.as_ref().map(|(col, label, _)| (col, label))), + ) + .field("ab", &self.ab) + .field("axes", &self.axes) + .finish() + } +} + impl Scatter { fn prepare(index: usize, des: &des::series::Scatter, data_source: &D) -> Result where D: data::Source + ?Sized, { let cols = (des.x_data().clone(), des.y_data().clone()); - let sizes_col = des.sizes_data().cloned(); + let size_col = des.size_data().cloned(); + let color_data = des.color_data().map(|(col, cmap)| { + let col = col.clone(); + let name = cmap.name().map(|l| l.to_string()); + let cmap = cmap.as_color_map(); + (col, name, cmap) + }); let xy_bounds = calc_xy_bounds(data_source, &cols.0, &cols.1)?; let marker_data = MarkerData::new(des.marker().clone()); Ok(Scatter { index, cols, - sizes_col, + size_col, + color_data, ab: xy_bounds, axes: (des.x_axis().clone(), des.y_axis().clone()), marker_data, @@ -768,11 +835,11 @@ impl Scatter { let y_col = get_column(&self.cols.1, data_source).unwrap(); debug_assert!(x_col.len() == y_col.len()); - let sizes_col = self - .sizes_col + let size_col = self + .size_col .as_ref() .map(|col| get_column(col, data_source).unwrap()); - debug_assert!(sizes_col.map_or(true, |sc| sc.len() == x_col.len())); + debug_assert!(size_col.map_or(true, |sc| sc.len() == x_col.len())); if self.ab.is_none() && x_col.is_empty() { self.marker_data.clear(); @@ -788,7 +855,15 @@ impl Scatter { let mut points = Vec::with_capacity(x_col.len()); - let mut sizes_iter = sizes_col.map(|sc| sc.sample_iter()); + let mut size_iter = size_col.map(|sc| sc.sample_iter()); + let mut color_iter = self + .color_data + .as_ref() + .map(|(col, _, _)| get_column(col, data_source).unwrap().sample_iter()); + let cmap = self.color_data.as_ref().map(|(_, _, cmap)| cmap.clone()); + + let has_fill = self.marker_data.marker.fill.is_some(); + let has_stroke = self.marker_data.marker.stroke.is_some(); for (x, y) in x_col.sample_iter().zip(y_col.sample_iter()) { if x.is_null() || y.is_null() { @@ -798,13 +873,36 @@ impl Scatter { let (x, y) = cm.map_coord((x, y)).expect("Should be valid coordinates"); let x = rect.left() + x; let y = rect.bottom() - y; - let vs = sizes_iter + let scale = size_iter .as_mut() .and_then(|iter| iter.next()) .and_then(|v| v.as_num()) + .map(|v| v as f32) .unwrap_or(1.0); - points.push((geom::Point { x, y }, vs as f32)); + let color_sample = color_iter.as_mut().and_then(|iter| iter.next()); + + let fill = if has_fill { + color_sample + .zip(cmap.as_ref()) + .map(|(v, cmap)| cmap.map_color(v)) + } else { + None + }; + let stroke = if has_stroke { + color_sample + .zip(cmap.as_ref()) + .map(|(v, cmap)| cmap.map_color(v)) + } else { + None + }; + + points.push(MarkerPoint { + pos: geom::Point { x, y }, + scale, + fill, + stroke, + }); } self.marker_data.points = points; } diff --git a/src/lib.rs b/src/lib.rs index ef17707..3d77828 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -164,10 +164,7 @@ pub mod time; pub use drawing::Prepare; pub use style::Style; -/// Rexports of [`plotive_base::color`]` items -pub mod color { - pub use plotive_base::color::*; -} +pub mod color; pub use color::{Color, Rgba8, ResolveColor}; /// Rexports of [`plotive_base::geom`]` items diff --git a/src/render.rs b/src/render.rs index ab3f28f..25650f3 100644 --- a/src/render.rs +++ b/src/render.rs @@ -3,6 +3,8 @@ //! All rendering surfaces must implement the `Surface` trait. //! See the `plotive-pxl` and `plotive-svg` crates for examples. +use plotive_base::Rgb8; + use crate::{Rgba8, geom}; /// Surface trait: defines the rendering surface API @@ -46,6 +48,15 @@ pub enum Paint { Solid(Rgba8), } +impl Paint { + /// Return a new `Paint` with the same alpha as the original, but with the RGB values replaced by the given color. + pub fn with_rgb(self, rgb: Rgb8) -> Self { + match self { + Paint::Solid(rgba) => Paint::Solid(rgb.with_a(rgba.a())), + } + } +} + impl From for Paint { fn from(value: Rgba8) -> Self { Paint::Solid(value) @@ -79,6 +90,14 @@ impl Stroke<'_> { self.width *= factor; self } + + /// Return a new `Stroke` with the same alpha as the original, but with the RGB values replaced by the given color. + pub fn with_rgb(self, rgb: Rgb8) -> Self { + Stroke { + color: rgb.with_a(self.color.a()), + ..self + } + } } /// Rectangle to draw diff --git a/tests/src/tests/series.rs b/tests/src/tests/series.rs index ee9a41e..fd7efa1 100644 --- a/tests/src/tests/series.rs +++ b/tests/src/tests/series.rs @@ -41,7 +41,7 @@ fn series_scatter_sizes() { let plot = des::Plot::new(vec![ des::series::Scatter::new(des::data_inline(x), des::data_inline(y)) - .with_sizes(des::data_inline(sizes)) + .with_size_data(des::data_inline(sizes)) .with_marker( style::series::Marker::default() .with_color(color.into()) From 21eef43d99be23583b482f45aeebb0c344517f3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Thebault?= Date: Tue, 5 May 2026 18:27:44 +0200 Subject: [PATCH 05/16] drawing colorbar (no ticks, no title) --- base/src/color.rs | 6 +- examples/stars.rs | 1 + src/des.rs | 2 + src/des/cmap.rs | 29 ++++++- src/des/colorbar.rs | 164 ++++++++++++++++++++++++++++++++++++++++ src/des/plot.rs | 17 ++++- src/drawing.rs | 1 + src/drawing/colorbar.rs | 154 +++++++++++++++++++++++++++++++++++++ src/drawing/plot.rs | 94 ++++++++++++++++++----- src/drawing/series.rs | 13 +++- src/style/defaults.rs | 5 ++ 11 files changed, 460 insertions(+), 26 deletions(-) create mode 100644 src/des/colorbar.rs create mode 100644 src/drawing/colorbar.rs diff --git a/base/src/color.rs b/base/src/color.rs index ca6df51..c79e12c 100644 --- a/base/src/color.rs +++ b/base/src/color.rs @@ -31,7 +31,7 @@ impl ResolveColor for () { } /// A simple color type with 8-bit RGB components, including an alpha channel. -#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub struct Rgba8(u8, u8, u8, u8); impl Rgba8 { @@ -151,7 +151,7 @@ impl Rgba8 { } /// A simple color type with 8-bit RGB components. -#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub struct Rgb8(u8, u8, u8); impl Rgb8 { @@ -540,7 +540,7 @@ impl Eq for LinRgb {} impl Lerp for LinRgb { fn lerp(self, other: Self, t: f32) -> Self { - debug_assert!(t >= 0.0 && t <= 1.0, "t must be in the range [0.0, 1.0]"); + debug_assert!(t >= 0.0 && t <= 1.0, "t must be in the range [0.0, 1.0] (got {})", t); let r = self.0 * (1.0 - t) + other.0 * t; let g = self.1 * (1.0 - t) + other.1 * t; let b = self.2 * (1.0 - t) + other.2 * t; diff --git a/examples/stars.rs b/examples/stars.rs index fcc73aa..d3f852c 100644 --- a/examples/stars.rs +++ b/examples/stars.rs @@ -97,6 +97,7 @@ fn main() { ) .into(), ]) + .with_colorbar(Default::default()) .into(), ); diff --git a/src/des.rs b/src/des.rs index ca976b1..f54ce8c 100644 --- a/src/des.rs +++ b/src/des.rs @@ -6,6 +6,7 @@ pub mod annot; pub mod axis; pub mod cmap; +pub mod colorbar; pub mod figure; pub mod legend; pub mod plot; @@ -16,6 +17,7 @@ pub use axis::Axis; pub use figure::{FigLegend, Figure}; pub use legend::Legend; pub use plot::{Plot, PlotLegend, Subplots}; +pub use colorbar::{ColorBar, ColorBarPos}; pub use series::{DataCol, Series, data_inline, data_src_ref}; /// Index of a plot in a subplot grid diff --git a/src/des/cmap.rs b/src/des/cmap.rs index 334d63b..3aa9c66 100644 --- a/src/des/cmap.rs +++ b/src/des/cmap.rs @@ -9,15 +9,20 @@ use crate::color::{LinearColorMap, ColorMap, PerceptualColorMap, Rgb8}; /// A trait for types that can be converted to a `ColorMap` implementation at draw time. pub trait AsColorMap { + /// Get a unique hash for this color map, used to avoid creating + /// multiple color bars for the same color map configuration. + fn hash(&self) -> u64; + /// Get the name of this color map, if it has one. /// It is used when drawing a color bar for this color map, to display the name as a label. fn name(&self) -> Option<&str>; + /// Convert this type to a `ColorMap` implementation that can be used for color mapping. fn as_color_map(&self) -> Arc; } /// Describes how to interpolate between colors in a color map, either in linear RGB or perceptual color space. -#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum LerpMethod { /// Interpolate colors in the linear RGB color space, which is faster but can produce less smooth gradients. LinearRgb, @@ -57,7 +62,7 @@ impl LerpColorMap { /// Adds a color stop at the specified position (between 0.0 and 1.0) with the given color. pub fn with_stop(mut self, position: f32, color: Rgb8) -> Self { assert!( - (0.0..=1.0).contains(&position), + position > 0.0 && position < 1.0, "Color stop position must be between 0.0 and 1.0" ); self.stops.push((position, color)); @@ -72,6 +77,22 @@ impl LerpColorMap { } impl AsColorMap for LerpColorMap { + fn hash(&self) -> u64 { + use std::hash::{Hash, Hasher, DefaultHasher}; + let mut hasher = DefaultHasher::new(); + self.method.hash(&mut hasher); + self.start.hash(&mut hasher); + self.end.hash(&mut hasher); + for stop in &self.stops { + // reinterpret the f32 position as u32 for hashing + // it is checked that the position can't be invalid or -0.0 + let pos_bits = stop.0.to_bits(); + pos_bits.hash(&mut hasher); + stop.1.hash(&mut hasher); + } + hasher.finish() + } + fn name(&self) -> Option<&str> { self.name() } @@ -96,12 +117,12 @@ impl AsColorMap for LerpColorMap { } } -/// A colormap that maps kelvin temperatures to colors, with a range from 1000K to 15000K. +/// A colormap that maps kelvin temperatures to colors, with a range from 1000K to 40000K. pub fn stellar() -> LerpColorMap { LerpColorMap::new( LerpMethod::LinearRgb, Rgb8::from_hex(b"#ff3800"), // 1000K - Rgb8::from_hex(b"#9bb0ff"), // 15000K + Rgb8::from_hex(b"#9bb0ff"), // 40000K ) .with_name("Stellar") } \ No newline at end of file diff --git a/src/des/colorbar.rs b/src/des/colorbar.rs new file mode 100644 index 0000000..2af7129 --- /dev/null +++ b/src/des/colorbar.rs @@ -0,0 +1,164 @@ +//! Color bar configuration +use crate::style::{defaults, theme}; +use crate::text; + +/// Position of a color bar relatively to the plot +#[derive(Debug, Default, Clone, Copy)] +pub enum ColorBarPos { + /// Position the color bar above the plot area + Top, + /// Position the color bar to the right of the plot area (default) + #[default] + Right, + /// Position the color bar below the plot area + Bottom, + /// Position the color bar to the left of the plot area + Left, +} + +/// Font configuration for a color bar label +#[derive(Debug, Clone)] +pub struct LabelFont { + /// The font size in figure units + pub size: f32, + /// The font + pub font: text::Font, + /// The font color + pub color: theme::Color, +} + +impl Default for LabelFont { + fn default() -> Self { + Self { + size: defaults::COLORBAR_LABEL_FONT_SIZE, + font: text::Font::default(), + color: theme::Col::Foreground.into(), + } + } +} + +/// Font configuration for color bar ticks +#[derive(Debug, Clone)] +pub struct TicksFont { + /// The font size in figure units + pub size: f32, + /// The font + pub font: text::Font, + /// The font color + pub color: theme::Color, +} + +impl Default for TicksFont { + fn default() -> Self { + Self { + size: defaults::COLORBAR_TICKS_FONT_SIZE, + font: text::Font::default(), + color: theme::Col::Foreground.into(), + } + } +} + +/// ColorBar configuration for a plot +#[derive(Debug, Clone)] +pub struct ColorBar { + pos: ColorBarPos, + width: f32, + label_font: LabelFont, + ticks_font: TicksFont, + border: Option, + margin: f32, +} + +impl Default for ColorBar { + fn default() -> Self { + Self { + pos: ColorBarPos::default(), + width: defaults::COLORBAR_WIDTH, + label_font: LabelFont::default(), + ticks_font: TicksFont::default(), + border: Some(theme::Stroke { + color: theme::Col::Foreground.into(), + width: 1.0, + pattern: Default::default(), + opacity: None, + }), + margin: defaults::COLORBAR_MARGIN, + } + } +} + +impl ColorBar { + /// Create a new color bar with the specified position + pub fn new(pos: ColorBarPos) -> Self { + Self { + pos, + ..Default::default() + } + } + + /// Set the width of the color bar and return self for chaining + pub fn with_width(mut self, width: f32) -> Self { + self.width = width; + self + } + + /// Set the label font properties and return self for chaining + pub fn with_label_font(mut self, label_font: LabelFont) -> Self { + self.label_font = label_font; + self + } + + /// Set the ticks font properties and return self for chaining + pub fn with_ticks_font(mut self, ticks_font: TicksFont) -> Self { + self.ticks_font = ticks_font; + self + } + + /// Set the border properties and return self for chaining + pub fn with_border(mut self, border: Option) -> Self { + self.border = border; + self + } + + /// Set the margin between the color bar and the plot area and return self for chaining + pub fn with_margin(mut self, margin: f32) -> Self { + self.margin = margin; + self + } + + /// Get the position of the color bar + pub fn pos(&self) -> ColorBarPos { + self.pos + } + + /// Get the width of the color bar + pub fn width(&self) -> f32 { + self.width + } + + /// Get the label font properties + pub fn label_font(&self) -> &LabelFont { + &self.label_font + } + + /// Get the ticks font properties + pub fn ticks_font(&self) -> &TicksFont { + &self.ticks_font + } + + /// Get the border properties + pub fn border(&self) -> Option<&theme::Stroke> { + self.border.as_ref() + } + + /// Get the margin between the color bar and the plot area + pub fn margin(&self) -> f32 { + self.margin + } +} + +impl From for ColorBar { + fn from(pos: ColorBarPos) -> Self { + Self::new(pos) + } +} diff --git a/src/des/plot.rs b/src/des/plot.rs index 068be0c..289280f 100644 --- a/src/des/plot.rs +++ b/src/des/plot.rs @@ -1,6 +1,6 @@ //! Plot design structures -use crate::des::{Annotation, Axis, Legend, PlotIdx, Series}; +use crate::des::{Annotation, Axis, ColorBar, Legend, PlotIdx, Series}; use crate::style::{defaults, theme}; /// Arrow border style for the plot area @@ -154,6 +154,7 @@ pub struct Plot { border: Option, insets: Option, legend: Option, + colorbar: Option, annotations: Vec, } @@ -171,6 +172,7 @@ impl Plot { border: Some(Border::default()), insets: Some(Insets::default()), legend: None, + colorbar: None, annotations: vec![], } } @@ -233,6 +235,14 @@ impl Plot { } } + /// Set the color bar of the plot and return self for chaining + pub fn with_colorbar(self, colorbar: ColorBar) -> Self { + Self { + colorbar: Some(colorbar), + ..self + } + } + /// Add an arbitrary [`Annotation`] to the plot and return self for chaining pub fn with_annotation(mut self, annotation: Annotation) -> Self { self.annotations.push(annotation); @@ -279,6 +289,11 @@ impl Plot { self.legend.as_ref() } + /// Get the color bar of the plot + pub fn colorbar(&self) -> Option<&ColorBar> { + self.colorbar.as_ref() + } + /// Get the annotations of the plot pub fn annotations(&self) -> &[Annotation] { &self.annotations diff --git a/src/drawing.rs b/src/drawing.rs index a41a8a3..67edb06 100644 --- a/src/drawing.rs +++ b/src/drawing.rs @@ -12,6 +12,7 @@ use crate::{Style, data, des, geom, render, text}; mod annot; mod axis; +mod colorbar; mod figure; mod hit_test; mod legend; diff --git a/src/drawing/colorbar.rs b/src/drawing/colorbar.rs new file mode 100644 index 0000000..7a20aff --- /dev/null +++ b/src/drawing/colorbar.rs @@ -0,0 +1,154 @@ +use std::fmt; +use std::sync::Arc; + +use super::axis::NumTicks; +use crate::color::ColorMap; +use crate::des::{self, ColorBarPos}; +use crate::{Style, data, geom, render, style}; + +/// A colorbar entry, used to populate one colorbar +#[derive(Clone)] +pub struct Entry<'a> { + pub hash: u64, + pub label: Option<&'a str>, + pub cmap: Arc, +} + +#[derive(Clone)] +pub struct ColorBar { + hash: u64, + pos: ColorBarPos, + width: f32, + label: Option, + ticks: Option, + border: Option, + margin: f32, + cmap: Arc, +} + +impl fmt::Debug for ColorBar { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_struct("ColorBar") + .field("hash", &self.hash) + .field("pos", &self.pos) + .field("width", &self.width) + .field("label", &self.label) + .field("ticks", &self.ticks) + .field("border", &self.border) + .field("margin", &self.margin) + .finish() + } +} + +impl ColorBar { + pub fn new(des_cbar: des::ColorBar, entry: Entry<'_>) -> Self { + Self { + hash: entry.hash, + pos: des_cbar.pos(), + width: des_cbar.width(), + label: entry.label.map(|s| s.to_string()), + ticks: None, + border: des_cbar.border().cloned(), + margin: des_cbar.margin(), + cmap: entry.cmap, + } + } + + pub fn hash(&self) -> u64 { + self.hash + } + + pub fn pos(&self) -> ColorBarPos { + self.pos + } + + pub fn width(&self) -> f32 { + self.width + } + + pub fn label(&self) -> Option<&str> { + self.label.as_deref() + } + + pub fn margin(&self) -> f32 { + self.margin + } + + pub fn calc_size_across(&self) -> f32 { + self.width + } + + pub fn draw(&self, surface: &mut S, style: &Style, plot_rect: &geom::Rect, plot_box: &geom::Rect) + where + S: render::Surface, + { + match self.pos { + ColorBarPos::Right => { + let x_left = plot_box.right() + self.margin; + self.draw_vertical(surface, style, plot_rect, x_left); + } + ColorBarPos::Left => { + let x_left = plot_box.left() - self.margin - self.width; + self.draw_vertical(surface, style, plot_rect, x_left); + } + _ => unimplemented!("only right colorbar is implemented for now"), + } + } + pub fn draw_vertical(&self, surface: &mut S, style: &Style, plot_rect: &geom::Rect, left: f32) + where + S: render::Surface, + { + let right = left + self.width; + let bottom = plot_rect.bottom(); + let height = plot_rect.height(); + + let num_pts = height.ceil() as usize; + + let mut y = bottom; + let yshift = height / num_pts as f32; + + let mut t = 0.0; + let tshift = 1.0 / num_pts as f32; + + let mut pb = geom::PathBuilder::with_capacity(5, 4); + + for i in 0..=num_pts { + let color = self.cmap.map_color(data::SampleRef::Num((t as f64).clamp(0.0, 1.0))); + let py = bottom - i as f32 * yshift; + let y2 = if i == num_pts { + py + } else { + py - yshift / 2.0 + }; + + pb.move_to(left, y); + pb.line_to(left, y2); + pb.line_to(right, y2); + pb.line_to(right, y); + + let path = pb.finish().expect("path should be valid"); + let rpath = render::Path { + path: &path, + fill: Some(color.opaque().into()), + stroke: None, + transform: None, + }; + surface.draw_path(&rpath); + + pb = path.clear(); + y = y2; + t += tshift; + } + + if let Some(border) = &self.border { + let path = geom::Rect::from_trbl(bottom -height, left + self.width, bottom, left).to_path(); + let rpath = render::Path { + path: &path, + fill: None, + stroke: Some(border.as_stroke(style)), + transform: None, + }; + surface.draw_path(&rpath); + } + } +} diff --git a/src/drawing/plot.rs b/src/drawing/plot.rs index 8a555b5..6f74774 100644 --- a/src/drawing/plot.rs +++ b/src/drawing/plot.rs @@ -5,6 +5,7 @@ use std::rc::Rc; use crate::des::{PlotIdx, annot}; use crate::drawing::annot::Annot; use crate::drawing::axis::{Axis, AxisScale, Bounds, Side}; +use crate::drawing::colorbar::ColorBar; use crate::drawing::legend::{Legend, LegendBuilder}; use crate::drawing::scale::CoordMapXy; use crate::drawing::series::{self, Series, SeriesExt}; @@ -59,6 +60,7 @@ pub(super) struct Plot { border: Option, series: Vec, legend: Option<(geom::Point, Legend)>, + colorbars: Vec, annots: Vec, } @@ -156,6 +158,7 @@ impl Axes { struct PlotData { series: Vec, legend: Option, + colorbars: Vec, insets: geom::Padding, } @@ -370,7 +373,12 @@ where subplot_rect_height, ); - let PlotData { series, legend, .. } = data.unwrap(); + let PlotData { + series, + legend, + colorbars, + .. + } = data.unwrap(); let legend = legend.map(|leg| { let top_left = legend_top_left( @@ -418,6 +426,7 @@ where axes, series, legend, + colorbars, annots, }; plots[plt_idx as usize] = Some(plot); @@ -450,10 +459,12 @@ where let cols = des_plots.cols() as f32; let avail_width = (rect.width() - des_plots.space() * (cols - 1.0)) / cols; let legend = self.setup_plot_legend(des_plot, avail_width)?; + let colorbars = self.setup_plot_colorbars(des_plot)?; let insets = plot_insets(des_plot); plot_data[idx] = Some(PlotData { series, legend, + colorbars, insets, }); } @@ -496,6 +507,26 @@ where Ok(builder.layout()) } + fn setup_plot_colorbars(&self, des_plot: &des::Plot) -> Result, Error> { + let Some(des_colorbar) = des_plot.colorbar() else { + return Ok(vec![]); + }; + let mut colorbars: Vec = Vec::new(); + + for_each_series(des_plot, |s| { + if let Some(entry) = s.colorbar_entry() { + if colorbars.iter().any(|cb| cb.hash() == entry.hash) { + // colorbar with same colormap already exists, skip + return Ok(()); + } + colorbars.push(ColorBar::new(des_colorbar.clone(), entry)); + } + Ok(()) + })?; + + Ok(colorbars) + } + fn calc_estimated_x_heights( &self, des_plots: &des::figure::Plots, @@ -585,6 +616,12 @@ where } } + for cbar in &data.colorbars { + if y_side_matches_colorbar_pos(side, cbar.pos()) { + width += cbar.calc_size_across() + cbar.margin(); + } + } + max_width = max_width.max(width); } } @@ -836,6 +873,14 @@ fn y_side_matches_out_legend_pos(side: des::axis::Side, legend_pos: des::plot::L } } +fn y_side_matches_colorbar_pos(side: des::axis::Side, pos: des::ColorBarPos) -> bool { + match (side, pos) { + (des::axis::Side::Main, des::ColorBarPos::Left) => true, + (des::axis::Side::Opposite, des::ColorBarPos::Right) => true, + _ => false, + } +} + impl Plots { pub fn update_series_data(&mut self, data_source: &D) -> Result<(), Error> where @@ -904,9 +949,13 @@ impl Plot { self.draw_series(surface, style); self.draw_annotations(surface, style, axes, annot::ZPos::AboveSeries); - axes.draw(surface, style, &self.rect); + let plot_box = axes.draw(surface, style, &self.rect); self.draw_border_box(surface, style); + for cbar in &self.colorbars { + cbar.draw(surface, style, &self.rect, &plot_box); + } + if let Some((top_left, leg)) = self.legend.as_ref() { leg.draw(surface, style, top_left); } @@ -996,14 +1045,20 @@ impl Axes { } } - fn draw(&self, surface: &mut S, style: &Style, plot_rect: &geom::Rect) + fn draw(&self, surface: &mut S, style: &Style, plot_rect: &geom::Rect) -> geom::Rect where S: render::Surface, { - self.draw_side(surface, style, &self.x, Side::Top, plot_rect); - self.draw_side(surface, style, &self.y, Side::Right, plot_rect); - self.draw_side(surface, style, &self.x, Side::Bottom, plot_rect); - self.draw_side(surface, style, &self.y, Side::Left, plot_rect); + let t = self.draw_side(surface, style, &self.x, Side::Top, plot_rect); + let r = self.draw_side(surface, style, &self.y, Side::Right, plot_rect); + let b = self.draw_side(surface, style, &self.x, Side::Bottom, plot_rect); + let l = self.draw_side(surface, style, &self.y, Side::Left, plot_rect); + + plot_rect + .shifted_top_side(t) + .shifted_right_side(-r) + .shifted_bottom_side(-b) + .shifted_left_side(l) } fn draw_side( @@ -1013,23 +1068,28 @@ impl Axes { axes: &[Axis], side: Side, plot_rect: &geom::Rect, - ) where + ) -> f32 + where S: render::Surface, { + let mut tot_shift = 0.0; let mut rect = *plot_rect; for axis in axes.iter() { if axis.side() == side { - let shift = axis.draw(surface, style, &rect) - + missing_params::AXIS_MARGIN - + missing_params::AXIS_SPINE_WIDTH; - rect = match side { - Side::Top => rect.shifted_top_side(-shift), - Side::Right => rect.shifted_right_side(shift), - Side::Bottom => rect.shifted_bottom_side(shift), - Side::Left => rect.shifted_left_side(-shift), - }; + let mut shift = axis.draw(surface, style, &rect); + if shift > 0.0 { + shift += missing_params::AXIS_MARGIN + missing_params::AXIS_SPINE_WIDTH; + rect = match side { + Side::Top => rect.shifted_top_side(-shift), + Side::Right => rect.shifted_right_side(shift), + Side::Bottom => rect.shifted_bottom_side(shift), + Side::Left => rect.shifted_left_side(-shift), + }; + tot_shift += shift; + } } } + tot_shift } } diff --git a/src/drawing/series.rs b/src/drawing/series.rs index 1397e3d..298792e 100644 --- a/src/drawing/series.rs +++ b/src/drawing/series.rs @@ -11,7 +11,7 @@ use crate::des::cmap::AsColorMap; use crate::drawing::axis::Bounds; use crate::drawing::plot::Orientation; use crate::drawing::{ - Categories, ColumnExt, Error, F64ColumnExt, axis, legend, marker, plot_to_fig, scale, + Categories, ColumnExt, Error, F64ColumnExt, axis, colorbar, legend, marker, plot_to_fig, scale }; use crate::{Style, data, des, geom, render, style}; @@ -19,6 +19,9 @@ use crate::{Style, data, des, geom, render, style}; /// has to populate the legend pub trait SeriesExt { fn legend_entry(&self) -> Option>; + fn colorbar_entry(&self) -> Option> { + None + } } impl SeriesExt for des::series::Line { @@ -39,6 +42,14 @@ impl SeriesExt for des::series::Scatter { shape: legend::ShapeRef::Marker(self.marker()), }) } + + fn colorbar_entry(&self) -> Option> { + self.color_data().map(|(_, cmap)| colorbar::Entry { + hash: cmap.hash(), + label: cmap.name(), + cmap: cmap.as_color_map(), + }) + } } impl SeriesExt for des::series::Area { diff --git a/src/style/defaults.rs b/src/style/defaults.rs index 0efd912..203e27c 100644 --- a/src/style/defaults.rs +++ b/src/style/defaults.rs @@ -20,6 +20,11 @@ pub const LEGEND_H_SPACING: f32 = 16.0; pub const LEGEND_V_SPACING: f32 = 10.0; pub const LEGEND_MARGIN: f32 = 12.0; +pub const COLORBAR_WIDTH: f32 = 20.0; +pub const COLORBAR_LABEL_FONT_SIZE: f32 = 16.0; +pub const COLORBAR_TICKS_FONT_SIZE: f32 = 12.0; +pub const COLORBAR_MARGIN: f32 = LEGEND_MARGIN; + pub const PLOT_XY_AUTO_INSETS: geom::Padding = geom::Padding::Even(20.0); pub const PLOT_VER_BARS_AUTO_INSETS: geom::Padding = geom::Padding::Custom { t: 20.0, From 12aa7631eb21ce2f648faeac389ea3cd1300027d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Thebault?= Date: Wed, 6 May 2026 08:50:29 +0200 Subject: [PATCH 06/16] Xyz colorspace support --- base/src/color.rs | 73 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/base/src/color.rs b/base/src/color.rs index c79e12c..69f0b1f 100644 --- a/base/src/color.rs +++ b/base/src/color.rs @@ -594,6 +594,32 @@ impl Lerp for OkLab { } } +#[derive(Debug, Clone, Copy, PartialEq)] +pub struct Xyz(f32, f32, f32); + +impl Xyz { + pub const fn new(x: f32, y: f32, z: f32) -> Option { + if x >= 0.0 && y >= 0.0 && z >= 0.0 { + Some(Self(x, y, z)) + } else { + None + } + } +} + +impl Eq for Xyz {} + +impl Lerp for Xyz { + fn lerp(self, other: Self, t: f32) -> Self { + debug_assert!(t >= 0.0 && t <= 1.0, "t must be in the range [0.0, 1.0]"); + let x = self.0 * (1.0 - t) + other.0 * t; + let y = self.1 * (1.0 - t) + other.1 * t; + let z = self.2 * (1.0 - t) + other.2 * t; + Self(x, y, z) + } +} + + impl From for Rgb8 { fn from(srgb: SRgb) -> Self { let r = (srgb.0 * 255.0).round() as u8; @@ -676,6 +702,25 @@ impl From for LinRgb { } } +impl From for Xyz { + fn from(LinRgb(r, g, b): LinRgb) -> Self { + let x = 0.4124564 * r + 0.3575761 * g + 0.1804375 * b; + let y = 0.2126729 * r + 0.7151522 * g + 0.0721750 * b; + let z = 0.0193339 * r + 0.1191920 * g + 0.9503041 * b; + Self(x, y, z) + } +} + +impl From for LinRgb { + fn from(Xyz(x, y, z): Xyz) -> Self { + let r = 3.2404542 * x - 1.5371385 * y - 0.4985314 * z; + let g = -0.9692660 * x + 1.8760108 * y + 0.0415560 * z; + let b = 0.0556434 * x - 0.2040259 * y + 1.0572252 * z; + Self(r, g, b) + } +} + + impl From for LinRgb { fn from(rgb: Rgb8) -> Self { let srgb: SRgb = SRgb::from(rgb); @@ -690,6 +735,13 @@ impl From for OkLab { } } +impl From for Xyz { + fn from(rgb: Rgb8) -> Self { + let linrgb: LinRgb = LinRgb::from(rgb); + Self::from(linrgb) + } +} + impl From for Rgb8 { fn from(linrgb: LinRgb) -> Self { let srgb: SRgb = SRgb::from(linrgb); @@ -704,6 +756,13 @@ impl From for Rgb8 { } } +impl From for Rgb8 { + fn from(xyz: Xyz) -> Self { + let linrgb: LinRgb = LinRgb::from(xyz); + Self::from(linrgb) + } +} + impl From for OkLab { fn from(srgb: SRgb) -> Self { let linrgb: LinRgb = LinRgb::from(srgb); @@ -711,6 +770,13 @@ impl From for OkLab { } } +impl From for Xyz { + fn from(srgb: SRgb) -> Self { + let linrgb: LinRgb = LinRgb::from(srgb); + Self::from(linrgb) + } +} + impl From for SRgb { fn from(oklab: OkLab) -> Self { let linrgb: LinRgb = LinRgb::from(oklab); @@ -718,6 +784,13 @@ impl From for SRgb { } } +impl From for SRgb { + fn from(xyz: Xyz) -> Self { + let linrgb: LinRgb = LinRgb::from(xyz); + Self::from(linrgb) + } +} + #[cfg(test)] mod tests { use super::*; From d094e6aee7178754898aa32fbdcaa613f4a2b04e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Thebault?= Date: Wed, 6 May 2026 08:51:01 +0200 Subject: [PATCH 07/16] colormap range, fix stellar --- examples/stars.rs | 17 ++----- src/color.rs | 23 ++++++--- src/des/cmap.rs | 110 ++++++++++++++++++++++++++++++++++------ src/drawing/colorbar.rs | 9 ++-- src/drawing/series.rs | 1 + 5 files changed, 119 insertions(+), 41 deletions(-) diff --git a/examples/stars.rs b/examples/stars.rs index d3f852c..b7d9965 100644 --- a/examples/stars.rs +++ b/examples/stars.rs @@ -42,7 +42,7 @@ fn main() { const APP_MAG: &str = "Apparent Magnitude"; let mag_col = table.column(APP_MAG).unwrap().f64().unwrap(); - let temp_col = table.column(TEMP_COL).unwrap().f64().unwrap(); + let temp_col = table.column(TEMP_COL).unwrap(); /// Map the apparent magnitude to a size factor for the star markers, const MIN_SIZE: f64 = 0.2; @@ -57,17 +57,6 @@ fn main() { }) .collect::>(); - // Map the surface temperatures range from 1000:40000 to 0:1 - const MIN_TEMP: f64 = 1000.0; - const MAX_TEMP: f64 = 40000.0; - let temp_colors = temp_col - .f64_iter() - .map(|temp| { - let temp = temp.unwrap(); - (temp - MIN_TEMP) / (MAX_TEMP - MIN_TEMP) - }) - .collect::>(); - // Map the right ascension and declination to x and y coordinates in degrees let ra_col = table.column(RA_COL).unwrap().str().unwrap(); let dec_col = table.column(DEC_COL).unwrap().str().unwrap(); @@ -84,13 +73,13 @@ fn main() { .with_column("x", &x_coords) .with_column("y", &y_coords) .with_column("mag_sizes", &mag_sizes) - .with_column("temp_colors", &temp_colors); + .with_column("temp", temp_col); let fig = des::Figure::new( des::Plot::new(vec![ des::series::Scatter::new("x".into(), "y".into()) .with_size_data("mag_sizes".into()) - .with_color_data("temp_colors".into(), cmap::stellar()) + .with_color_data("temp".into(), cmap::stellar()) .with_marker( style::series::Marker::default() .with_fill_opacity(0.6) diff --git a/src/color.rs b/src/color.rs index b93992e..f0f77af 100644 --- a/src/color.rs +++ b/src/color.rs @@ -19,18 +19,23 @@ pub type LinearColorMap = GenColorMap; /// A color map that interpolates between two colors and optional stops in a perceptual color space pub type PerceptualColorMap = GenColorMap; +/// A color map that interpolates between two colors and optional stops in a XYZ color space +pub type XyzColorMap = GenColorMap; + /// A generic color map that interpolates between two colors and optional stops in the color space defined by the color type `C`. #[derive(Debug, Clone)] pub struct GenColorMap { start: C, end: C, stops: Vec<(f32, C)>, + range: (f32, f32), } impl> GenColorMap { /// Creates a new `CColorMap` with the specified start and end colors, and optional stops. - pub fn new(start: Rgb8, end: Rgb8) -> Self { + pub fn new(range: (f32, f32), start: Rgb8, end: Rgb8) -> Self { Self { + range, start: start.into(), end: end.into(), stops: Vec::new(), @@ -40,8 +45,9 @@ impl> GenColorMap { /// Add a color stop at the specified position (between 0.0 and 1.0) with the given color. pub fn with_stop(mut self, position: f32, color: Rgb8) -> Self { assert!( - (0.0..=1.0).contains(&position), - "Color stop position must be between 0.0 and 1.0" + position >= self.range.0 && position <= self.range.1, + "Color stop position must be between {} and {}", + self.range.0, self.range.1 ); self.stops.push((position, color.into())); self.stops.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap()); @@ -55,8 +61,9 @@ impl> GenColorMap { { self.stops = stops.into_iter().map(|(position, color)| { assert!( - (0.0..=1.0).contains(&position), - "Color stop position must be between 0.0 and 1.0" + position >= self.range.0 && position <= self.range.1, + "Color stop position must be between {} and {}", + self.range.0, self.range.1 ); (position, color.into()) }).collect(); @@ -71,8 +78,8 @@ impl> ColorMap for GenColorMap { .as_num() .expect("Color mapping requires numeric values") as f32; - let mut start = (0.0, self.start); - let mut end = (1.0, self.end); + let mut start = (self.range.0, self.start); + let mut end = (self.range.1, self.end); for stop in &self.stops { if stop.0 <= value { @@ -82,7 +89,7 @@ impl> ColorMap for GenColorMap { break; } } - let t = if end.0 > start.0 { + let t = if end.0 != start.0 { (value - start.0) / (end.0 - start.0) } else { 0.0 diff --git a/src/des/cmap.rs b/src/des/cmap.rs index 3aa9c66..959553c 100644 --- a/src/des/cmap.rs +++ b/src/des/cmap.rs @@ -5,7 +5,7 @@ use std::sync::Arc; -use crate::color::{LinearColorMap, ColorMap, PerceptualColorMap, Rgb8}; +use crate::color::{ColorMap, LinearColorMap, PerceptualColorMap, Rgb8, XyzColorMap}; /// A trait for types that can be converted to a `ColorMap` implementation at draw time. pub trait AsColorMap { @@ -17,6 +17,9 @@ pub trait AsColorMap { /// It is used when drawing a color bar for this color map, to display the name as a label. fn name(&self) -> Option<&str>; + /// The range of scalar values that this color map maps to, as (min, max). + fn range(&self) -> (f32, f32); + /// Convert this type to a `ColorMap` implementation that can be used for color mapping. fn as_color_map(&self) -> Arc; } @@ -24,19 +27,22 @@ pub trait AsColorMap { /// Describes how to interpolate between colors in a color map, either in linear RGB or perceptual color space. #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum LerpMethod { - /// Interpolate colors in the linear RGB color space, which is faster but can produce less smooth gradients. + /// Interpolate colors in the linear RGB color space. LinearRgb, - /// Interpolate colors in a perceptual color space, which produces smoother gradients but is slower. + /// Interpolate colors in a perceptual color space. Perceptual, + /// Interpolate colors in the XYZ color space. + Xyz, } /// A color map that can be converted to a `MapColor` implementation at draw time. #[derive(Debug, Clone)] pub struct LerpColorMap { method: LerpMethod, - name: Option, start: Rgb8, end: Rgb8, + range: (f32, f32), + name: Option, stops: Vec<(f32, Rgb8)>, } @@ -48,6 +54,20 @@ impl LerpColorMap { name: None, start, end, + range: (0.0, 1.0), + stops: Vec::new(), + } + } + + /// Creates a new `LerpColorMap` with the specified interpolation method, start and end colors, and optional stops. + /// The range of scalar values that this color map maps to is set to the given range (min, max). + pub fn new_with_range(method: LerpMethod, start: Rgb8, end: Rgb8, range: (f32, f32)) -> Self { + Self { + method, + name: None, + start, + end, + range, stops: Vec::new(), } } @@ -60,10 +80,10 @@ impl LerpColorMap { } /// Adds a color stop at the specified position (between 0.0 and 1.0) with the given color. - pub fn with_stop(mut self, position: f32, color: Rgb8) -> Self { + pub fn with_stop(mut self, (position, color): (f32, Rgb8)) -> Self { assert!( - position > 0.0 && position < 1.0, - "Color stop position must be between 0.0 and 1.0" + position > self.range.0 && position < self.range.1, + "Color stop position must be in range" ); self.stops.push((position, color)); self.stops.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap()); @@ -78,7 +98,7 @@ impl LerpColorMap { impl AsColorMap for LerpColorMap { fn hash(&self) -> u64 { - use std::hash::{Hash, Hasher, DefaultHasher}; + use std::hash::{DefaultHasher, Hash, Hasher}; let mut hasher = DefaultHasher::new(); self.method.hash(&mut hasher); self.start.hash(&mut hasher); @@ -97,17 +117,28 @@ impl AsColorMap for LerpColorMap { self.name() } + fn range(&self) -> (f32, f32) { + self.range + } + fn as_color_map(&self) -> Arc { match self.method { LerpMethod::LinearRgb => { - let mut map = LinearColorMap::new(self.start, self.end); + let mut map = LinearColorMap::new(self.range, self.start, self.end); if !self.stops.is_empty() { map = map.with_stops(self.stops.iter().copied()); } Arc::new(map) } LerpMethod::Perceptual => { - let mut map = PerceptualColorMap::new(self.start, self.end); + let mut map = PerceptualColorMap::new(self.range, self.start, self.end); + if !self.stops.is_empty() { + map = map.with_stops(self.stops.iter().copied()); + } + Arc::new(map) + } + LerpMethod::Xyz => { + let mut map = XyzColorMap::new(self.range, self.start, self.end); if !self.stops.is_empty() { map = map.with_stops(self.stops.iter().copied()); } @@ -117,12 +148,59 @@ impl AsColorMap for LerpColorMap { } } -/// A colormap that maps kelvin temperatures to colors, with a range from 1000K to 40000K. +/// A colormap that maps kelvin temperatures to black body color, with a range from 1000K to 30000K. pub fn stellar() -> LerpColorMap { - LerpColorMap::new( - LerpMethod::LinearRgb, - Rgb8::from_hex(b"#ff3800"), // 1000K - Rgb8::from_hex(b"#9bb0ff"), // 40000K + const MIN_TEMP: f32 = 1000.0; + const MAX_TEMP: f32 = 30000.0; + fn stop_for_temp(temp: f32) -> (f32, Rgb8) { + // Approximate the color of a black body at the given temperature in kelvin. + // The formula is based on the on the Tanner Helland's approximation: + // https://tannerhelland.com/2012/09/18/convert-temperature-rgb-algorithm-code.html + + let t = temp / 100.0; + let r = if t <= 66.0 { + 255 + } else { + let r = 329.698727446 * (t - 60.0).powf(-0.1332047592); + r.clamp(0.0, 255.0) as u8 + }; + let g = if t <= 66.0 { + let g = 99.4708025861 * t.ln() - 161.1195681661; + g.clamp(0.0, 255.0) as u8 + } else { + let g = 288.1221695283 * (t - 60.0).powf(-0.0755148492); + g.clamp(0.0, 255.0) as u8 + }; + let b = if t >= 66.0 { + 255 + } else if t <= 19.0 { + 0 + } else { + let b = 138.5177312231 * (t - 10.0).ln() - 305.0447927307; + b.clamp(0.0, 255.0) as u8 + }; + + (temp, Rgb8::new(r, g, b)) + } + + LerpColorMap::new_with_range( + LerpMethod::Xyz, + stop_for_temp(MIN_TEMP).1, + stop_for_temp(MAX_TEMP).1, + (MIN_TEMP, MAX_TEMP), ) + .with_stop(stop_for_temp(2000.0)) + .with_stop(stop_for_temp(3000.0)) + .with_stop(stop_for_temp(4000.0)) + .with_stop(stop_for_temp(5000.0)) + .with_stop(stop_for_temp(6000.0)) + .with_stop(stop_for_temp(6500.0)) + .with_stop(stop_for_temp(7000.0)) + .with_stop(stop_for_temp(8000.0)) + .with_stop(stop_for_temp(9000.0)) + .with_stop(stop_for_temp(10000.0)) + .with_stop(stop_for_temp(12000.0)) + .with_stop(stop_for_temp(15000.0)) + .with_stop(stop_for_temp(20000.0)) .with_name("Stellar") -} \ No newline at end of file +} diff --git a/src/drawing/colorbar.rs b/src/drawing/colorbar.rs index 7a20aff..eed63a8 100644 --- a/src/drawing/colorbar.rs +++ b/src/drawing/colorbar.rs @@ -11,6 +11,7 @@ use crate::{Style, data, geom, render, style}; pub struct Entry<'a> { pub hash: u64, pub label: Option<&'a str>, + pub range: (f32, f32), pub cmap: Arc, } @@ -23,6 +24,7 @@ pub struct ColorBar { ticks: Option, border: Option, margin: f32, + range: (f32, f32), cmap: Arc, } @@ -50,6 +52,7 @@ impl ColorBar { ticks: None, border: des_cbar.border().cloned(), margin: des_cbar.margin(), + range: entry.range, cmap: entry.cmap, } } @@ -107,13 +110,13 @@ impl ColorBar { let mut y = bottom; let yshift = height / num_pts as f32; - let mut t = 0.0; - let tshift = 1.0 / num_pts as f32; + let mut t = self.range.0; + let tshift = (self.range.1 - self.range.0) / num_pts as f32; let mut pb = geom::PathBuilder::with_capacity(5, 4); for i in 0..=num_pts { - let color = self.cmap.map_color(data::SampleRef::Num((t as f64).clamp(0.0, 1.0))); + let color = self.cmap.map_color(data::SampleRef::Num(t as f64)); let py = bottom - i as f32 * yshift; let y2 = if i == num_pts { py diff --git a/src/drawing/series.rs b/src/drawing/series.rs index 298792e..9a3dd0e 100644 --- a/src/drawing/series.rs +++ b/src/drawing/series.rs @@ -48,6 +48,7 @@ impl SeriesExt for des::series::Scatter { hash: cmap.hash(), label: cmap.name(), cmap: cmap.as_color_map(), + range: cmap.range(), }) } } From 89777821870d1765123121069691c351a937f708 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Thebault?= Date: Wed, 6 May 2026 09:32:08 +0200 Subject: [PATCH 08/16] dynamic range of color data --- examples/stars.rs | 2 +- src/color.rs | 95 ------------------------- src/des/cmap.rs | 152 +++++++++++++--------------------------- src/des/colorbar.rs | 13 ++++ src/drawing.rs | 16 +++++ src/drawing/cmap.rs | 122 ++++++++++++++++++++++++++++++++ src/drawing/colorbar.rs | 137 +++++++++++++++++++++++------------- src/drawing/plot.rs | 46 +++++++++--- src/drawing/series.rs | 94 ++++++++++--------------- 9 files changed, 360 insertions(+), 317 deletions(-) create mode 100644 src/drawing/cmap.rs diff --git a/examples/stars.rs b/examples/stars.rs index b7d9965..d9aca0b 100644 --- a/examples/stars.rs +++ b/examples/stars.rs @@ -82,7 +82,7 @@ fn main() { .with_color_data("temp".into(), cmap::stellar()) .with_marker( style::series::Marker::default() - .with_fill_opacity(0.6) + .with_fill_opacity(0.85) ) .into(), ]) diff --git a/src/color.rs b/src/color.rs index f0f77af..58d67a3 100644 --- a/src/color.rs +++ b/src/color.rs @@ -2,98 +2,3 @@ /// Rexports of [`plotive_base::color`]` items pub use plotive_base::color::*; - -use crate::data::SampleRef; - -/// A trait for mapping scalar values to colors, used for color scales in heatmaps and similar plots. -pub trait ColorMap { - /// Maps a scalar value to an RGBA color. - - /// May panic if the value is not the expected type (e.g. numeric for linear or perceptual color maps). - fn map_color(&self, value: SampleRef) -> Rgb8; -} - -/// A color map that interpolates between two colors and optional stops in the linear RGB color space -pub type LinearColorMap = GenColorMap; - -/// A color map that interpolates between two colors and optional stops in a perceptual color space -pub type PerceptualColorMap = GenColorMap; - -/// A color map that interpolates between two colors and optional stops in a XYZ color space -pub type XyzColorMap = GenColorMap; - -/// A generic color map that interpolates between two colors and optional stops in the color space defined by the color type `C`. -#[derive(Debug, Clone)] -pub struct GenColorMap { - start: C, - end: C, - stops: Vec<(f32, C)>, - range: (f32, f32), -} - -impl> GenColorMap { - /// Creates a new `CColorMap` with the specified start and end colors, and optional stops. - pub fn new(range: (f32, f32), start: Rgb8, end: Rgb8) -> Self { - Self { - range, - start: start.into(), - end: end.into(), - stops: Vec::new(), - } - } - - /// Add a color stop at the specified position (between 0.0 and 1.0) with the given color. - pub fn with_stop(mut self, position: f32, color: Rgb8) -> Self { - assert!( - position >= self.range.0 && position <= self.range.1, - "Color stop position must be between {} and {}", - self.range.0, self.range.1 - ); - self.stops.push((position, color.into())); - self.stops.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap()); - self - } - - /// Set the color stops at the specified position (between 0.0 and 1.0) with the given color. - pub fn with_stops(mut self, stops: I) -> Self - where - I: Iterator, - { - self.stops = stops.into_iter().map(|(position, color)| { - assert!( - position >= self.range.0 && position <= self.range.1, - "Color stop position must be between {} and {}", - self.range.0, self.range.1 - ); - (position, color.into()) - }).collect(); - self.stops.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap()); - self - } -} - -impl> ColorMap for GenColorMap { - fn map_color(&self, value: SampleRef) -> Rgb8 { - let value = value - .as_num() - .expect("Color mapping requires numeric values") as f32; - - let mut start = (self.range.0, self.start); - let mut end = (self.range.1, self.end); - - for stop in &self.stops { - if stop.0 <= value { - start = *stop; - } else { - end = *stop; - break; - } - } - let t = if end.0 != start.0 { - (value - start.0) / (end.0 - start.0) - } else { - 0.0 - }; - start.1.lerp(end.1, t).into() - } -} diff --git a/src/des/cmap.rs b/src/des/cmap.rs index 959553c..165cc63 100644 --- a/src/des/cmap.rs +++ b/src/des/cmap.rs @@ -1,28 +1,7 @@ -//! A module for defining color maps that can be used in the drawing engine (DES) to map scalar values to colors. -//! -//! The type defined in this module can be converted to a `ColorMap` implementation at draw time, which is used for color mapping in heatmaps and similar plots. -//! Although they could implement `ColorMap` directly, doing so would require additional color conversions for each call of `map_color`, which can be expensive. +//! A module for defining color maps that can be used in the design of plots to map scalar values to colors. -use std::sync::Arc; +use crate::color::{Rgb8}; -use crate::color::{ColorMap, LinearColorMap, PerceptualColorMap, Rgb8, XyzColorMap}; - -/// A trait for types that can be converted to a `ColorMap` implementation at draw time. -pub trait AsColorMap { - /// Get a unique hash for this color map, used to avoid creating - /// multiple color bars for the same color map configuration. - fn hash(&self) -> u64; - - /// Get the name of this color map, if it has one. - /// It is used when drawing a color bar for this color map, to display the name as a label. - fn name(&self) -> Option<&str>; - - /// The range of scalar values that this color map maps to, as (min, max). - fn range(&self) -> (f32, f32); - - /// Convert this type to a `ColorMap` implementation that can be used for color mapping. - fn as_color_map(&self) -> Arc; -} /// Describes how to interpolate between colors in a color map, either in linear RGB or perceptual color space. #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] @@ -41,9 +20,8 @@ pub struct LerpColorMap { method: LerpMethod, start: Rgb8, end: Rgb8, - range: (f32, f32), - name: Option, stops: Vec<(f32, Rgb8)>, + data_range: Option<(f64, f64)>, } impl LerpColorMap { @@ -51,38 +29,16 @@ impl LerpColorMap { pub fn new(method: LerpMethod, start: Rgb8, end: Rgb8) -> Self { Self { method, - name: None, - start, - end, - range: (0.0, 1.0), - stops: Vec::new(), - } - } - - /// Creates a new `LerpColorMap` with the specified interpolation method, start and end colors, and optional stops. - /// The range of scalar values that this color map maps to is set to the given range (min, max). - pub fn new_with_range(method: LerpMethod, start: Rgb8, end: Rgb8, range: (f32, f32)) -> Self { - Self { - method, - name: None, start, end, - range, + data_range: None, stops: Vec::new(), } } - - /// Set the name of this color map. - /// It is used when drawing a color bar for this color map, to display the name as a label. - pub fn with_name(mut self, name: impl Into) -> Self { - self.name = Some(name.into()); - self - } - /// Adds a color stop at the specified position (between 0.0 and 1.0) with the given color. pub fn with_stop(mut self, (position, color): (f32, Rgb8)) -> Self { assert!( - position > self.range.0 && position < self.range.1, + position > 0.0 && position < 1.0, "Color stop position must be in range" ); self.stops.push((position, color)); @@ -90,69 +46,54 @@ impl LerpColorMap { self } - /// Get the name of this color map, if it has one. - pub fn name(&self) -> Option<&str> { - self.name.as_deref() + /// Set the range of scalar values that this color map maps to, as (min, max). + pub fn with_data_range(mut self, range: (f64, f64)) -> Self { + assert!( + range.0.is_finite() && range.1.is_finite(), + "Color map data range must be finite" + ); + assert!( + range.0 < range.1, + "Color map data range must have min < max" + ); + self.data_range = Some(range); + self } -} -impl AsColorMap for LerpColorMap { - fn hash(&self) -> u64 { - use std::hash::{DefaultHasher, Hash, Hasher}; - let mut hasher = DefaultHasher::new(); - self.method.hash(&mut hasher); - self.start.hash(&mut hasher); - self.end.hash(&mut hasher); - for stop in &self.stops { - // reinterpret the f32 position as u32 for hashing - // it is checked that the position can't be invalid or -0.0 - let pos_bits = stop.0.to_bits(); - pos_bits.hash(&mut hasher); - stop.1.hash(&mut hasher); - } - hasher.finish() + + /// Get the interpolation method used by this color map. + pub fn method(&self) -> LerpMethod { + self.method } - fn name(&self) -> Option<&str> { - self.name() + /// Get the start color of this color map. + pub fn start(&self) -> Rgb8 { + self.start } - fn range(&self) -> (f32, f32) { - self.range + /// Get the end color of this color map. + pub fn end(&self) -> Rgb8 { + self.end } - fn as_color_map(&self) -> Arc { - match self.method { - LerpMethod::LinearRgb => { - let mut map = LinearColorMap::new(self.range, self.start, self.end); - if !self.stops.is_empty() { - map = map.with_stops(self.stops.iter().copied()); - } - Arc::new(map) - } - LerpMethod::Perceptual => { - let mut map = PerceptualColorMap::new(self.range, self.start, self.end); - if !self.stops.is_empty() { - map = map.with_stops(self.stops.iter().copied()); - } - Arc::new(map) - } - LerpMethod::Xyz => { - let mut map = XyzColorMap::new(self.range, self.start, self.end); - if !self.stops.is_empty() { - map = map.with_stops(self.stops.iter().copied()); - } - Arc::new(map) - } - } + /// Get the color stops of this color map, as a slice of (position, color) tuples. + pub fn stops(&self) -> &[(f32, Rgb8)] { + &self.stops + } + + /// Get the range of scalar values that this color map maps to, if it has one. + /// If None, the color map is assumed to map the range of data values in the plot. + pub fn data_range(&self) -> Option<(f64, f64)> { + self.data_range } } /// A colormap that maps kelvin temperatures to black body color, with a range from 1000K to 30000K. pub fn stellar() -> LerpColorMap { - const MIN_TEMP: f32 = 1000.0; - const MAX_TEMP: f32 = 30000.0; - fn stop_for_temp(temp: f32) -> (f32, Rgb8) { + const MIN_TEMP: f64 = 1000.0; + const MAX_TEMP: f64 = 15000.0; + + fn stop_for_temp(temp: f64) -> (f32, Rgb8) { // Approximate the color of a black body at the given temperature in kelvin. // The formula is based on the on the Tanner Helland's approximation: // https://tannerhelland.com/2012/09/18/convert-temperature-rgb-algorithm-code.html @@ -180,14 +121,15 @@ pub fn stellar() -> LerpColorMap { b.clamp(0.0, 255.0) as u8 }; - (temp, Rgb8::new(r, g, b)) + let stop_pos = ((temp - MIN_TEMP) / (MAX_TEMP - MIN_TEMP)) as f32; + + (stop_pos, Rgb8::new(r, g, b)) } - LerpColorMap::new_with_range( + LerpColorMap::new( LerpMethod::Xyz, stop_for_temp(MIN_TEMP).1, stop_for_temp(MAX_TEMP).1, - (MIN_TEMP, MAX_TEMP), ) .with_stop(stop_for_temp(2000.0)) .with_stop(stop_for_temp(3000.0)) @@ -200,7 +142,7 @@ pub fn stellar() -> LerpColorMap { .with_stop(stop_for_temp(9000.0)) .with_stop(stop_for_temp(10000.0)) .with_stop(stop_for_temp(12000.0)) - .with_stop(stop_for_temp(15000.0)) - .with_stop(stop_for_temp(20000.0)) - .with_name("Stellar") + // .with_stop(stop_for_temp(15000.0)) + // .with_stop(stop_for_temp(20000.0)) + .with_data_range((MIN_TEMP, MAX_TEMP)) } diff --git a/src/des/colorbar.rs b/src/des/colorbar.rs index 2af7129..7e4b250 100644 --- a/src/des/colorbar.rs +++ b/src/des/colorbar.rs @@ -63,6 +63,7 @@ impl Default for TicksFont { pub struct ColorBar { pos: ColorBarPos, width: f32, + label: Option, label_font: LabelFont, ticks_font: TicksFont, border: Option, @@ -74,6 +75,7 @@ impl Default for ColorBar { Self { pos: ColorBarPos::default(), width: defaults::COLORBAR_WIDTH, + label: None, label_font: LabelFont::default(), ticks_font: TicksFont::default(), border: Some(theme::Stroke { @@ -102,6 +104,12 @@ impl ColorBar { self } + /// Set the label text and return self for chaining + pub fn with_label(mut self, label: impl Into) -> Self { + self.label = Some(label.into()); + self + } + /// Set the label font properties and return self for chaining pub fn with_label_font(mut self, label_font: LabelFont) -> Self { self.label_font = label_font; @@ -136,6 +144,11 @@ impl ColorBar { self.width } + /// Get the label text of the color bar, if it has one + pub fn label(&self) -> Option<&str> { + self.label.as_deref() + } + /// Get the label font properties pub fn label_font(&self) -> &LabelFont { &self.label_font diff --git a/src/drawing.rs b/src/drawing.rs index 67edb06..f9bdb99 100644 --- a/src/drawing.rs +++ b/src/drawing.rs @@ -12,6 +12,7 @@ use crate::{Style, data, des, geom, render, text}; mod annot; mod axis; +mod cmap; mod colorbar; mod figure; mod hit_test; @@ -150,6 +151,21 @@ impl Prepare for des::Figure { } } +fn get_column<'a, D>( + col: &'a des::series::DataCol, + data_source: &'a D, +) -> Result<&'a dyn data::Column, Error> +where + D: data::Source + ?Sized, +{ + match col { + des::series::DataCol::Inline(col) => Ok(col), + des::series::DataCol::SrcRef(name) => data_source + .column(name) + .ok_or_else(|| Error::MissingDataSrc(name.to_string())), + } +} + #[derive(Debug)] struct Ctx<'a, D: ?Sized> { data_source: &'a D, diff --git a/src/drawing/cmap.rs b/src/drawing/cmap.rs new file mode 100644 index 0000000..520a055 --- /dev/null +++ b/src/drawing/cmap.rs @@ -0,0 +1,122 @@ +use std::sync::Arc; + +use crate::color::{Lerp, LinRgb, OkLab, Rgb8, Xyz}; +use crate::des::cmap::{LerpColorMap, LerpMethod}; +use crate::drawing::axis; + +/// A trait for mapping scalar values to colors, used for color scales in heatmaps and similar plots. +pub trait ColorMap { + /// Maps a value in the range [0, 1] to an RGBA color. + fn map_color(&self, value: f32) -> Rgb8; +} + +/// A trait for types that can be converted to a `ColorMap` implementation at draw time. +pub trait AsColorMap { + fn hash(&self) -> u64; + + fn data_range(&self) -> Option; + + /// Convert this type to a `ColorMap` implementation that can be used for color mapping. + fn as_color_map(&self) -> Arc; +} + +impl AsColorMap for LerpColorMap { + /// Get a unique hash for this color map, used to avoid creating + /// multiple color bars for the same color map configuration. + fn hash(&self) -> u64 { + use std::hash::{DefaultHasher, Hash, Hasher}; + let mut hasher = DefaultHasher::new(); + self.method().hash(&mut hasher); + self.start().hash(&mut hasher); + self.end().hash(&mut hasher); + for stop in self.stops() { + // reinterpret the f32 position as u32 for hashing + // it is checked that the position can't be invalid or -0.0 + let pos_bits = stop.0.to_bits(); + pos_bits.hash(&mut hasher); + stop.1.hash(&mut hasher); + } + if let Some(range) = self.data_range() { + range.0.to_bits().hash(&mut hasher); + range.1.to_bits().hash(&mut hasher); + } + hasher.finish() + } + + fn data_range(&self) -> Option { + self.data_range().map(|rng| axis::NumBounds::from(rng).into()) + } + + fn as_color_map(&self) -> Arc { + let start = self.start(); + let end = self.end(); + let stops = self.stops().iter().copied(); + match self.method() { + LerpMethod::LinearRgb => { + Arc::new(LinearColorMap::new(start, end, stops)) + } + LerpMethod::Perceptual => { + Arc::new(PerceptualColorMap::new(start, end, stops)) + } + LerpMethod::Xyz => { + Arc::new(XyzColorMap::new(start, end, stops)) + } + } + } +} + +/// A color map that interpolates between two colors and optional stops in the linear RGB color space +pub type LinearColorMap = GenColorMap; + +/// A color map that interpolates between two colors and optional stops in a perceptual color space +pub type PerceptualColorMap = GenColorMap; + +/// A color map that interpolates between two colors and optional stops in a XYZ color space +pub type XyzColorMap = GenColorMap; + +/// A generic color map that interpolates between two colors and optional stops in the color space defined by the color type `C`. +#[derive(Debug, Clone)] +pub struct GenColorMap { + start: C, + end: C, + stops: Vec<(f32, C)>, +} + +impl> GenColorMap { + /// Creates a new `CColorMap` with the specified start and end colors, and optional stops. + pub fn new(start: Rgb8, end: Rgb8, stops: S) -> Self + where + S: IntoIterator, + { + Self { + start: start.into(), + end: end.into(), + stops: stops + .into_iter() + .map(|(pos, color)| (pos, color.into())) + .collect(), + } + } +} + +impl> ColorMap for GenColorMap { + fn map_color(&self, value: f32) -> Rgb8 { + let mut start = (0.0, self.start); + let mut end = (1.0, self.end); + + for stop in &self.stops { + if stop.0 <= value { + start = *stop; + } else { + end = *stop; + break; + } + } + let t = if end.0 != start.0 { + (value - start.0) / (end.0 - start.0) + } else { + 0.0 + }; + start.1.lerp(end.1, t).into() + } +} diff --git a/src/drawing/colorbar.rs b/src/drawing/colorbar.rs index eed63a8..f65d33f 100644 --- a/src/drawing/colorbar.rs +++ b/src/drawing/colorbar.rs @@ -1,107 +1,144 @@ use std::fmt; use std::sync::Arc; -use super::axis::NumTicks; -use crate::color::ColorMap; use crate::des::{self, ColorBarPos}; -use crate::{Style, data, geom, render, style}; +use crate::drawing::axis::{self, AsBoundRef}; +use crate::drawing::cmap::{AsColorMap, ColorMap}; +use crate::style::theme; +use crate::{Style, data, geom, render}; /// A colorbar entry, used to populate one colorbar #[derive(Clone)] pub struct Entry<'a> { - pub hash: u64, - pub label: Option<&'a str>, - pub range: (f32, f32), - pub cmap: Arc, + pub data_col: &'a des::DataCol, + pub cmap: &'a dyn AsColorMap +} + +/// A trait that maps data to a 0..1 range, used for color bars and similar features. +pub trait ColorDataMap { + // identifies the right colorbar when multiple color bars are present + fn hash(&self) -> u64; + fn map_color_data(&self, data: data::SampleRef<'_>) -> Option; +} + +#[derive(Clone)] +pub struct ColorBarBuilder { + hash: u64, + cmap: Arc, + data_bounds: axis::Bounds, +} + +impl ColorBarBuilder { + pub fn new(hash: u64, cmap: Arc, data_bounds: axis::Bounds) -> Self { + Self { hash, cmap, data_bounds } + } + + pub fn hash(&self) -> u64 { + self.hash + } + + pub fn data_bounds(&self) -> axis::BoundsRef<'_> { + self.data_bounds.as_bound_ref() + } + + pub fn unite_bounds(&mut self, data_bounds: axis::BoundsRef<'_>) -> Result<(), super::Error> { + self.data_bounds.unite_with(&data_bounds) + } + + pub fn build(self, des: des::ColorBar) -> ColorBar { + ColorBar{ + hash: self.hash, + des, + data_bounds: self.data_bounds, + cmap: self.cmap, + } + } } #[derive(Clone)] pub struct ColorBar { hash: u64, - pos: ColorBarPos, - width: f32, - label: Option, - ticks: Option, - border: Option, - margin: f32, - range: (f32, f32), + des: des::ColorBar, + data_bounds: axis::Bounds, cmap: Arc, } impl fmt::Debug for ColorBar { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.debug_struct("ColorBar") - .field("hash", &self.hash) - .field("pos", &self.pos) - .field("width", &self.width) - .field("label", &self.label) - .field("ticks", &self.ticks) - .field("border", &self.border) - .field("margin", &self.margin) + .field("des", &self.des) + .field("data_bounds", &self.data_bounds) .finish() } } -impl ColorBar { - pub fn new(des_cbar: des::ColorBar, entry: Entry<'_>) -> Self { - Self { - hash: entry.hash, - pos: des_cbar.pos(), - width: des_cbar.width(), - label: entry.label.map(|s| s.to_string()), - ticks: None, - border: des_cbar.border().cloned(), - margin: des_cbar.margin(), - range: entry.range, - cmap: entry.cmap, - } +impl ColorDataMap for ColorBar { + fn hash(&self) -> u64 { + self.hash } - pub fn hash(&self) -> u64 { - self.hash + fn map_color_data(&self, data: data::SampleRef<'_>) -> Option { + let bounds = self.data_bounds.as_bound_ref().as_num()?; + let val = data.as_num()?; + let min = bounds.start(); + let max = bounds.end(); + + if val.is_finite() && min.is_finite() && max.is_finite() && max > min { + Some(((val - min) / (max - min)).clamp(0.0, 1.0) as f32) + } else { + None + } } +} +impl ColorBar { pub fn pos(&self) -> ColorBarPos { - self.pos + self.des.pos() } pub fn width(&self) -> f32 { - self.width + self.des.width() } pub fn label(&self) -> Option<&str> { - self.label.as_deref() + self.des.label() } pub fn margin(&self) -> f32 { - self.margin + self.des.margin() + } + + pub fn border(&self) -> Option<&theme::Stroke> { + self.des.border() } pub fn calc_size_across(&self) -> f32 { - self.width + self.des.width() } pub fn draw(&self, surface: &mut S, style: &Style, plot_rect: &geom::Rect, plot_box: &geom::Rect) where S: render::Surface, { - match self.pos { + match self.pos() { ColorBarPos::Right => { - let x_left = plot_box.right() + self.margin; + let x_left = plot_box.right() + self.margin(); self.draw_vertical(surface, style, plot_rect, x_left); } ColorBarPos::Left => { - let x_left = plot_box.left() - self.margin - self.width; + let x_left = plot_box.left() - self.margin() - self.width(); self.draw_vertical(surface, style, plot_rect, x_left); } _ => unimplemented!("only right colorbar is implemented for now"), } } + pub fn draw_vertical(&self, surface: &mut S, style: &Style, plot_rect: &geom::Rect, left: f32) where S: render::Surface, { - let right = left + self.width; + //let data_bounds = self.data_bounds.as_num().expect("Only numeric color bars are supported for now"); + let right = left + self.width(); let bottom = plot_rect.bottom(); let height = plot_rect.height(); @@ -110,13 +147,13 @@ impl ColorBar { let mut y = bottom; let yshift = height / num_pts as f32; - let mut t = self.range.0; - let tshift = (self.range.1 - self.range.0) / num_pts as f32; + let mut t = 0.0; + let tshift = 1.0 / num_pts as f32; let mut pb = geom::PathBuilder::with_capacity(5, 4); for i in 0..=num_pts { - let color = self.cmap.map_color(data::SampleRef::Num(t as f64)); + let color = self.cmap.map_color(t); let py = bottom - i as f32 * yshift; let y2 = if i == num_pts { py @@ -143,8 +180,8 @@ impl ColorBar { t += tshift; } - if let Some(border) = &self.border { - let path = geom::Rect::from_trbl(bottom -height, left + self.width, bottom, left).to_path(); + if let Some(border) = self.border() { + let path = geom::Rect::from_trbl(bottom -height, left + self.width(), bottom, left).to_path(); let rpath = render::Path { path: &path, fill: None, diff --git a/src/drawing/plot.rs b/src/drawing/plot.rs index 6f74774..b2b7f4b 100644 --- a/src/drawing/plot.rs +++ b/src/drawing/plot.rs @@ -4,12 +4,12 @@ use std::rc::Rc; use crate::des::{PlotIdx, annot}; use crate::drawing::annot::Annot; -use crate::drawing::axis::{Axis, AxisScale, Bounds, Side}; -use crate::drawing::colorbar::ColorBar; +use crate::drawing::axis::{AsBoundRef, Axis, AxisScale, Bounds, Side}; +use crate::drawing::colorbar::{ColorBar, ColorBarBuilder}; use crate::drawing::legend::{Legend, LegendBuilder}; use crate::drawing::scale::CoordMapXy; use crate::drawing::series::{self, Series, SeriesExt}; -use crate::drawing::{Ctx, Error}; +use crate::drawing::{ColumnExt, Ctx, Error, get_column}; use crate::style::{defaults, theme}; use crate::{Style, data, des, geom, missing_params, render}; @@ -511,20 +511,46 @@ where let Some(des_colorbar) = des_plot.colorbar() else { return Ok(vec![]); }; - let mut colorbars: Vec = Vec::new(); + let mut builders: Vec = Vec::new(); for_each_series(des_plot, |s| { if let Some(entry) = s.colorbar_entry() { - if colorbars.iter().any(|cb| cb.hash() == entry.hash) { - // colorbar with same colormap already exists, skip - return Ok(()); + let forced_bounds = entry.cmap.data_range(); + let has_forced_bounds = forced_bounds.is_some(); + let bounds = if let Some(range) = forced_bounds { + range + } else { + let col = get_column(entry.data_col, self.data_source())?; + col.bounds() + .expect("Should get bounds for colormap data column") + }; + + let hash = entry.cmap.hash(); + + if let Some(cbb) = builders.iter_mut().find(|b| b.hash() == hash) { + if !has_forced_bounds { + cbb.unite_bounds(bounds.as_bound_ref())?; + } else { + debug_assert!( + cbb.data_bounds() == bounds.as_bound_ref(), + "Two color bars with same color map but different forced data range, this should not happen since the color map should be different if the data range is different" + ); + } + } else { + builders.push(ColorBarBuilder::new( + hash, + entry.cmap.as_color_map(), + bounds, + )); } - colorbars.push(ColorBar::new(des_colorbar.clone(), entry)); } Ok(()) })?; - Ok(colorbars) + Ok(builders + .into_iter() + .map(|b| b.build(des_colorbar.clone())) + .collect()) } fn calc_estimated_x_heights( @@ -928,7 +954,7 @@ impl Plot { y: &*y_cm, }; - series.update_data(data_source, &self.rect, &cm)?; + series.update_data(data_source, &self.rect, &cm, &self.colorbars)?; } Ok(()) } diff --git a/src/drawing/series.rs b/src/drawing/series.rs index 9a3dd0e..f74afe8 100644 --- a/src/drawing/series.rs +++ b/src/drawing/series.rs @@ -6,12 +6,13 @@ use plotive_base::Rgb8; use plotive_base::geom::PathSegment; use scale::{CoordMap, CoordMapXy}; -use crate::color::ColorMap; -use crate::des::cmap::AsColorMap; use crate::drawing::axis::Bounds; +use crate::drawing::cmap::{AsColorMap, ColorMap}; +use crate::drawing::colorbar::{ColorBar, ColorDataMap}; use crate::drawing::plot::Orientation; use crate::drawing::{ - Categories, ColumnExt, Error, F64ColumnExt, axis, colorbar, legend, marker, plot_to_fig, scale + Categories, ColumnExt, Error, F64ColumnExt, axis, colorbar, get_column, legend, marker, + plot_to_fig, scale, }; use crate::{Style, data, des, geom, render, style}; @@ -44,12 +45,8 @@ impl SeriesExt for des::series::Scatter { } fn colorbar_entry(&self) -> Option> { - self.color_data().map(|(_, cmap)| colorbar::Entry { - hash: cmap.hash(), - label: cmap.name(), - cmap: cmap.as_color_map(), - range: cmap.range(), - }) + self.color_data() + .map(|(data_col, cmap)| colorbar::Entry { data_col, cmap }) } } @@ -97,21 +94,6 @@ impl SeriesExt for des::series::BarSeries { } } -fn get_column<'a, D>( - col: &'a des::series::DataCol, - data_source: &'a D, -) -> Result<&'a dyn data::Column, Error> -where - D: data::Source + ?Sized, -{ - match col { - des::series::DataCol::Inline(col) => Ok(col), - des::series::DataCol::SrcRef(name) => data_source - .column(name) - .ok_or_else(|| Error::MissingDataSrc(name.to_string())), - } -} - fn calc_xy_bounds( data_source: &D, x_data: &des::series::DataCol, @@ -299,6 +281,7 @@ impl Series { data_source: &D, rect: &geom::Rect, cm: &CoordMapXy, + cbs: &[ColorBar], ) -> Result<(), Error> where D: data::Source + ?Sized, @@ -307,7 +290,7 @@ impl Series { SeriesPlot::Line(xy) => { xy.update_data(data_source, rect, cm); } - SeriesPlot::Scatter(sc) => sc.update_data(data_source, rect, cm), + SeriesPlot::Scatter(sc) => sc.update_data(data_source, rect, cm, cbs), SeriesPlot::Area(area) => area.update_data(data_source, rect, cm), SeriesPlot::Histogram(hist) => { hist.update_data(data_source, rect, cm); @@ -607,8 +590,7 @@ fn calc_xy_line_path( struct MarkerPoint { pos: geom::Point, scale: f32, - fill: Option, - stroke: Option, + color: Option, } impl Default for MarkerPoint { @@ -616,8 +598,7 @@ impl Default for MarkerPoint { MarkerPoint { pos: geom::Point { x: 0.0, y: 0.0 }, scale: 1.0, - fill: None, - stroke: None, + color: None, } } } @@ -660,7 +641,7 @@ impl MarkerData { let fill = self.marker.fill.as_ref().map(|f| { let f = f.as_paint(&rc); - if let Some(rgb) = p.fill { + if let Some(rgb) = p.color { f.with_rgb(rgb) } else { f @@ -669,7 +650,7 @@ impl MarkerData { let stroke = self.marker.stroke.as_ref().map(|s| { let s = s.as_stroke(&rc).with_multiplied_width(1.0 / scale); - if let Some(rgb) = p.stroke { + if let Some(rgb) = p.color { s.with_rgb(rgb) } else { s @@ -791,7 +772,7 @@ struct Scatter { index: usize, cols: (des::DataCol, des::DataCol), size_col: Option, - color_data: Option<(des::DataCol, Option, Arc)>, + color_data: Option<(des::DataCol, u64, Arc)>, ab: Option<(axis::Bounds, axis::Bounds)>, axes: (des::axis::Ref, des::axis::Ref), marker_data: MarkerData, @@ -805,7 +786,7 @@ impl fmt::Debug for Scatter { .field("size_col", &self.size_col) .field( "color_data", - &(self.color_data.as_ref().map(|(col, label, _)| (col, label))), + &(self.color_data.as_ref().map(|(col, hash, _)| (col, hash))), ) .field("ab", &self.ab) .field("axes", &self.axes) @@ -822,9 +803,9 @@ impl Scatter { let size_col = des.size_data().cloned(); let color_data = des.color_data().map(|(col, cmap)| { let col = col.clone(); - let name = cmap.name().map(|l| l.to_string()); + let hash = cmap.hash(); let cmap = cmap.as_color_map(); - (col, name, cmap) + (col, hash, cmap) }); let xy_bounds = calc_xy_bounds(data_source, &cols.0, &cols.1)?; let marker_data = MarkerData::new(des.marker().clone()); @@ -839,8 +820,13 @@ impl Scatter { }) } - fn update_data(&mut self, data_source: &D, rect: &geom::Rect, cm: &CoordMapXy) - where + fn update_data( + &mut self, + data_source: &D, + rect: &geom::Rect, + cm: &CoordMapXy, + cbs: &[ColorBar], + ) where D: data::Source + ?Sized, { let x_col = get_column(&self.cols.0, data_source).unwrap(); @@ -872,11 +858,13 @@ impl Scatter { .color_data .as_ref() .map(|(col, _, _)| get_column(col, data_source).unwrap().sample_iter()); + let cbar = self + .color_data + .as_ref() + .map(|(_, hash, _)| cbs.iter().find(|cb| cb.hash() == *hash)) + .flatten(); let cmap = self.color_data.as_ref().map(|(_, _, cmap)| cmap.clone()); - let has_fill = self.marker_data.marker.fill.is_some(); - let has_stroke = self.marker_data.marker.stroke.is_some(); - for (x, y) in x_col.sample_iter().zip(y_col.sample_iter()) { if x.is_null() || y.is_null() { continue; @@ -894,26 +882,20 @@ impl Scatter { let color_sample = color_iter.as_mut().and_then(|iter| iter.next()); - let fill = if has_fill { - color_sample - .zip(cmap.as_ref()) - .map(|(v, cmap)| cmap.map_color(v)) - } else { - None - }; - let stroke = if has_stroke { - color_sample - .zip(cmap.as_ref()) - .map(|(v, cmap)| cmap.map_color(v)) - } else { - None - }; + let color = color_sample + .zip(cmap.as_ref()) + .zip(cbar) + .map(|((v, cmap), cbar)| { + let mapped_value = cbar + .map_color_data(v) + .expect("TODO: handle invalid color data"); + cmap.map_color(mapped_value) + }); points.push(MarkerPoint { pos: geom::Point { x, y }, scale, - fill, - stroke, + color, }); } self.marker_data.points = points; From 52d2e25e71fceb4a025e7f9862a1dfb1162d4c84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Thebault?= Date: Wed, 6 May 2026 17:33:14 +0200 Subject: [PATCH 09/16] plotive::color is inline again --- src/color.rs | 4 ---- src/lib.rs | 8 +++++++- 2 files changed, 7 insertions(+), 5 deletions(-) delete mode 100644 src/color.rs diff --git a/src/color.rs b/src/color.rs deleted file mode 100644 index 58d67a3..0000000 --- a/src/color.rs +++ /dev/null @@ -1,4 +0,0 @@ -//! Color types and utilities for the `plotive` crate. - -/// Rexports of [`plotive_base::color`]` items -pub use plotive_base::color::*; diff --git a/src/lib.rs b/src/lib.rs index 3d77828..d2824ee 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -164,7 +164,13 @@ pub mod time; pub use drawing::Prepare; pub use style::Style; -pub mod color; + +/// Color types and utilities for the `plotive` crate. +pub mod color { + /// Rexports of [`plotive_base::color`]` items + pub use plotive_base::color::*; +} + pub use color::{Color, Rgba8, ResolveColor}; /// Rexports of [`plotive_base::geom`]` items From 2269f79f03ef6e25c4ad65c756fbd57f5222c48e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Thebault?= Date: Wed, 6 May 2026 17:38:16 +0200 Subject: [PATCH 10/16] colorbar versatile drawing --- examples/stars.rs | 10 +- src/des/colorbar.rs | 58 ++----- src/drawing.rs | 2 +- src/drawing/axis.rs | 5 +- src/drawing/axis/bounds.rs | 12 +- src/drawing/colorbar.rs | 328 +++++++++++++++++++++++++++++++------ src/drawing/plot.rs | 5 +- src/drawing/ticks.rs | 32 ++-- src/style/defaults.rs | 2 +- 9 files changed, 333 insertions(+), 121 deletions(-) diff --git a/examples/stars.rs b/examples/stars.rs index d9aca0b..06683d8 100644 --- a/examples/stars.rs +++ b/examples/stars.rs @@ -80,15 +80,13 @@ fn main() { des::series::Scatter::new("x".into(), "y".into()) .with_size_data("mag_sizes".into()) .with_color_data("temp".into(), cmap::stellar()) - .with_marker( - style::series::Marker::default() - .with_fill_opacity(0.85) - ) + .with_marker(style::series::Marker::default().with_fill_opacity(0.85)) .into(), ]) - .with_colorbar(Default::default()) + .with_colorbar(des::ColorBar::default().with_title("Surface Temperature [K]".into())) .into(), - ); + ) + .with_title("45 bright stars".into()); common::save_figure(&fig, &data_source, Default::default(), "stars"); } diff --git a/src/des/colorbar.rs b/src/des/colorbar.rs index 7e4b250..95c9b44 100644 --- a/src/des/colorbar.rs +++ b/src/des/colorbar.rs @@ -2,6 +2,14 @@ use crate::style::{defaults, theme}; use crate::text; +super::define_rich_text_structs!(Title, TitleProps, TitleOptProps); + +impl Default for TitleProps { + fn default() -> Self { + TitleProps::new(defaults::COLORBAR_TITLE_FONT_SIZE) + } +} + /// Position of a color bar relatively to the plot #[derive(Debug, Default, Clone, Copy)] pub enum ColorBarPos { @@ -16,27 +24,6 @@ pub enum ColorBarPos { Left, } -/// Font configuration for a color bar label -#[derive(Debug, Clone)] -pub struct LabelFont { - /// The font size in figure units - pub size: f32, - /// The font - pub font: text::Font, - /// The font color - pub color: theme::Color, -} - -impl Default for LabelFont { - fn default() -> Self { - Self { - size: defaults::COLORBAR_LABEL_FONT_SIZE, - font: text::Font::default(), - color: theme::Col::Foreground.into(), - } - } -} - /// Font configuration for color bar ticks #[derive(Debug, Clone)] pub struct TicksFont { @@ -63,8 +50,7 @@ impl Default for TicksFont { pub struct ColorBar { pos: ColorBarPos, width: f32, - label: Option, - label_font: LabelFont, + title: Option, ticks_font: TicksFont, border: Option<theme::Stroke>, margin: f32, @@ -75,8 +61,7 @@ impl Default for ColorBar { Self { pos: ColorBarPos::default(), width: defaults::COLORBAR_WIDTH, - label: None, - label_font: LabelFont::default(), + title: None, ticks_font: TicksFont::default(), border: Some(theme::Stroke { color: theme::Col::Foreground.into(), @@ -104,15 +89,9 @@ impl ColorBar { self } - /// Set the label text and return self for chaining - pub fn with_label(mut self, label: impl Into<String>) -> Self { - self.label = Some(label.into()); - self - } - - /// Set the label font properties and return self for chaining - pub fn with_label_font(mut self, label_font: LabelFont) -> Self { - self.label_font = label_font; + /// Set the title text and return self for chaining + pub fn with_title(mut self, title: Title) -> Self { + self.title = Some(title); self } @@ -144,14 +123,9 @@ impl ColorBar { self.width } - /// Get the label text of the color bar, if it has one - pub fn label(&self) -> Option<&str> { - self.label.as_deref() - } - - /// Get the label font properties - pub fn label_font(&self) -> &LabelFont { - &self.label_font + /// Get the title text of the color bar, if it has one + pub fn title(&self) -> Option<&Title> { + self.title.as_ref() } /// Get the ticks font properties diff --git a/src/drawing.rs b/src/drawing.rs index f9bdb99..2c5b422 100644 --- a/src/drawing.rs +++ b/src/drawing.rs @@ -386,7 +386,7 @@ impl Categories { self.cats.get(idx).map(|c| c.0.as_str()) } - fn _contains(&self, cat: &str) -> bool { + fn contains(&self, cat: &str) -> bool { self.cats.iter().any(|c| c.0 == cat) } diff --git a/src/drawing/axis.rs b/src/drawing/axis.rs index c834f87..1d4aa37 100644 --- a/src/drawing/axis.rs +++ b/src/drawing/axis.rs @@ -463,7 +463,8 @@ where let mut major_locs = ticks::locate_num(major_ticks.locator(), nb, scale)?; major_locs.retain(|l| nb.contains(*l)); - let lbl_formatter = ticks::num_label_formatter(major_ticks, nb, scale); + let lbl_formatter = + ticks::num_label_formatter(major_ticks.locator(), major_ticks.formatter(), nb, scale); let mut ticks = Vec::new(); for loc in major_locs.into_iter() { let text = lbl_formatter.format_label(loc.into()); @@ -546,7 +547,7 @@ where let mut major_locs = ticks::locate_datetime(major_ticks.locator(), tb)?; major_locs.retain(|l| tb.contains(*l)); - let lbl_formatter = ticks::datetime_label_formatter(major_ticks, tb, scale)?; + let lbl_formatter = ticks::datetime_label_formatter(major_ticks.formatter(), tb, scale)?; let mut ticks = Vec::new(); for loc in major_locs.into_iter() { let text = lbl_formatter.format_label(loc.into()); diff --git a/src/drawing/axis/bounds.rs b/src/drawing/axis/bounds.rs index d2c440f..1c4289c 100644 --- a/src/drawing/axis/bounds.rs +++ b/src/drawing/axis/bounds.rs @@ -1,4 +1,4 @@ -use crate::drawing::{Categories, Error}; +use crate::{data, drawing::{Categories, Error}}; #[cfg(feature = "time")] use crate::time::{DateTime, TimeDelta}; @@ -61,6 +61,16 @@ impl Bounds { )), } } + + pub fn contains(&self, point: data::SampleRef<'_>) -> bool { + match (self, point) { + (Bounds::Num(nb), data::SampleRef::Num(n)) => nb.contains(n), + (Bounds::Cat(c), data::SampleRef::Cat(s)) => c.contains(s), + #[cfg(feature = "time")] + (Bounds::Time(tb), data::SampleRef::Time(t)) => tb.contains(t), + _ => false, + } + } } /// Bounds of an axis, borrowing internal its data diff --git a/src/drawing/colorbar.rs b/src/drawing/colorbar.rs index f65d33f..a2d2184 100644 --- a/src/drawing/colorbar.rs +++ b/src/drawing/colorbar.rs @@ -4,14 +4,15 @@ use std::sync::Arc; use crate::des::{self, ColorBarPos}; use crate::drawing::axis::{self, AsBoundRef}; use crate::drawing::cmap::{AsColorMap, ColorMap}; +use crate::drawing::{Ctx, Text, ticks}; use crate::style::theme; -use crate::{Style, data, geom, render}; +use crate::{Style, data, geom, missing_params, render, text}; /// A colorbar entry, used to populate one colorbar #[derive(Clone)] pub struct Entry<'a> { pub data_col: &'a des::DataCol, - pub cmap: &'a dyn AsColorMap + pub cmap: &'a dyn AsColorMap, } /// A trait that maps data to a 0..1 range, used for color bars and similar features. @@ -30,7 +31,11 @@ pub struct ColorBarBuilder { impl ColorBarBuilder { pub fn new(hash: u64, cmap: Arc<dyn ColorMap>, data_bounds: axis::Bounds) -> Self { - Self { hash, cmap, data_bounds } + Self { + hash, + cmap, + data_bounds, + } } pub fn hash(&self) -> u64 { @@ -45,29 +50,99 @@ impl ColorBarBuilder { self.data_bounds.unite_with(&data_bounds) } - pub fn build(self, des: des::ColorBar) -> ColorBar { - ColorBar{ + pub fn build<D>(self, des: des::ColorBar, ctx: &Ctx<'_, D>) -> Result<ColorBar, super::Error> + where + D: data::Source + ?Sized, + { + let side = match des.pos() { + ColorBarPos::Right => axis::Side::Right, + ColorBarPos::Left => axis::Side::Left, + ColorBarPos::Top => axis::Side::Top, + ColorBarPos::Bottom => axis::Side::Bottom, + }; + + let title = des + .title() + .map(|title| title.to_rich_text(side.title_layout(), ctx.fontdb())) + .transpose()? + .map(|rt| Text::from_rich_text(&rt, ctx.fontdb())) + .transpose()?; + + let ticks = match &self.data_bounds { + axis::Bounds::Num(nb) => { + let align = side.ticks_labels_align(); + let font = des.ticks_font().clone(); + let scale: des::axis::Scale = + des::axis::Range::new(Some(nb.start()), Some(nb.end())).into(); + let locator = des::axis::ticks::Locator::Auto; + let formatter = des::axis::ticks::Formatter::Auto; + let ticks = ticks::locate_num(&locator, *nb, &scale)?; + let formatter = ticks::num_label_formatter(&locator, Some(&formatter), *nb, &scale); + ticks + .into_iter() + .map(|t| -> Result<_, super::Error> { + let text = formatter.format_label(t.into()); + let lt = text::LineText::new( + text, + align, + font.size, + font.font.clone(), + ctx.fontdb(), + )?; + let text = Text::from_line_text(<, ctx.fontdb(), font.color)?; + + Ok((data::Sample::Num(t), text)) + }) + .collect::<Result<Vec<_>, _>>()? + } + _ => vec![], + }; + + let ticks_mark = ( + theme::Stroke { + color: theme::Col::Foreground.into(), + width: 1.0, + pattern: Default::default(), + opacity: None, + }, + 4.0, + ); + + Ok(ColorBar { hash: self.hash, + side, des, data_bounds: self.data_bounds, cmap: self.cmap, - } + title, + ticks, + ticks_mark, + }) } } #[derive(Clone)] pub struct ColorBar { hash: u64, + side: axis::Side, des: des::ColorBar, data_bounds: axis::Bounds, cmap: Arc<dyn ColorMap>, + title: Option<Text>, + ticks: Vec<(data::Sample, Text)>, + ticks_mark: (theme::Stroke, f32), } impl fmt::Debug for ColorBar { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.debug_struct("ColorBar") + .field("hash", &self.hash) + .field("side", &self.side) .field("des", &self.des) .field("data_bounds", &self.data_bounds) + .field("title", &self.title) + .field("ticks", &self.ticks) + .field("ticks_mark", &self.ticks_mark) .finish() } } @@ -100,10 +175,6 @@ impl ColorBar { self.des.width() } - pub fn label(&self) -> Option<&str> { - self.des.label() - } - pub fn margin(&self) -> f32 { self.des.margin() } @@ -113,58 +184,109 @@ impl ColorBar { } pub fn calc_size_across(&self) -> f32 { - self.des.width() - } + let mut size = 0.0; - pub fn draw<S>(&self, surface: &mut S, style: &Style, plot_rect: &geom::Rect, plot_box: &geom::Rect) - where - S: render::Surface, - { - match self.pos() { - ColorBarPos::Right => { - let x_left = plot_box.right() + self.margin(); - self.draw_vertical(surface, style, plot_rect, x_left); - } - ColorBarPos::Left => { - let x_left = plot_box.left() - self.margin() - self.width(); - self.draw_vertical(surface, style, plot_rect, x_left); + if !self.ticks.is_empty() { + size += self.ticks_mark.1 + missing_params::TICK_LABEL_MARGIN; + match self.side { + axis::Side::Bottom | axis::Side::Top => { + let max_h = self + .ticks + .iter() + .map(|t| t.1.height()) + .max_by(|a, b| a.partial_cmp(b).unwrap()) + .unwrap_or(0.0); + size += max_h; + } + axis::Side::Left | axis::Side::Right => { + let max_w = self + .ticks + .iter() + .map(|t| t.1.width()) + .max_by(|a, b| a.partial_cmp(b).unwrap()) + .unwrap_or(0.0); + size += max_w; + } } - _ => unimplemented!("only right colorbar is implemented for now"), } + + if let Some(title) = self.title.as_ref() { + // vertical axis rotate the title, therefore we take the height in all cases. + size += title.height() + missing_params::AXIS_TITLE_MARGIN; + } + size } - pub fn draw_vertical<S>(&self, surface: &mut S, style: &Style, plot_rect: &geom::Rect, left: f32) - where + pub fn draw<S>( + &self, + surface: &mut S, + style: &Style, + plot_rect: &geom::Rect, + plot_box: &geom::Rect, + ) where S: render::Surface, { - //let data_bounds = self.data_bounds.as_num().expect("Only numeric color bars are supported for now"); - let right = left + self.width(); - let bottom = plot_rect.bottom(); - let height = plot_rect.height(); - - let num_pts = height.ceil() as usize; - - let mut y = bottom; - let yshift = height / num_pts as f32; - + let bar_rect = match self.side { + axis::Side::Right => geom::Rect::from_trbl( + plot_rect.top(), + plot_box.right() + self.margin() + self.width(), + plot_rect.bottom(), + plot_box.right() + self.margin(), + ), + axis::Side::Left => geom::Rect::from_trbl( + plot_rect.top(), + plot_box.left() - self.margin(), + plot_rect.bottom(), + plot_box.left() - self.margin() - self.width(), + ), + axis::Side::Top => geom::Rect::from_trbl( + plot_box.top() - self.margin() - self.width(), + plot_rect.right(), + plot_box.top() - self.margin(), + plot_rect.left(), + ), + axis::Side::Bottom => geom::Rect::from_trbl( + plot_box.bottom() + self.margin(), + plot_rect.right(), + plot_box.bottom() + self.margin() + self.width(), + plot_rect.left(), + ), + }; + let bar_len = match self.side { + axis::Side::Right | axis::Side::Left => bar_rect.height(), + axis::Side::Top | axis::Side::Bottom => bar_rect.width(), + }; + let num_pts = bar_len.ceil() as usize; + let (start, sign) = match self.side { + axis::Side::Right | axis::Side::Left => (bar_rect.bottom(), -1.0), + axis::Side::Top | axis::Side::Bottom => (bar_rect.left(), 1.0), + }; + let mut pos = start; + let pos_shift = sign * bar_len / num_pts as f32; let mut t = 0.0; - let tshift = 1.0 / num_pts as f32; + let t_shift = 1.0 / num_pts as f32; let mut pb = geom::PathBuilder::with_capacity(5, 4); - for i in 0..=num_pts { let color = self.cmap.map_color(t); - let py = bottom - i as f32 * yshift; - let y2 = if i == num_pts { - py + let pi = start + i as f32 * pos_shift; + let pos2 = if i == num_pts { + pi } else { - py - yshift / 2.0 + pi + pos_shift / 2.0 }; - - pb.move_to(left, y); - pb.line_to(left, y2); - pb.line_to(right, y2); - pb.line_to(right, y); + let (x1, y1, x2, y2) = match self.side { + axis::Side::Right | axis::Side::Left => { + (bar_rect.left(), pos, bar_rect.right(), pos2) + } + axis::Side::Top | axis::Side::Bottom => { + (pos, bar_rect.top(), pos2, bar_rect.bottom()) + } + }; + pb.move_to(x1, y1); + pb.line_to(x1, y2); + pb.line_to(x2, y2); + pb.line_to(x2, y1); let path = pb.finish().expect("path should be valid"); let rpath = render::Path { @@ -176,12 +298,12 @@ impl ColorBar { surface.draw_path(&rpath); pb = path.clear(); - y = y2; - t += tshift; + pos = pos2; + t += t_shift; } if let Some(border) = self.border() { - let path = geom::Rect::from_trbl(bottom -height, left + self.width(), bottom, left).to_path(); + let path = bar_rect.to_path(); let rpath = render::Path { path: &path, fill: None, @@ -190,5 +312,109 @@ impl ColorBar { }; surface.draw_path(&rpath); } + + let mut title_shift: f32 = 0.0; + + let mark_len = self.ticks_mark.1; + for (tick_val, tick_text) in &self.ticks { + if !self.data_bounds.contains(tick_val.as_ref()) { + continue; + } + let Some(t) = self.map_color_data(tick_val.as_ref()) else { + continue; + }; + let tick_pos = start + sign * t * bar_len; + let (tx1, tx2, ty1, ty2) = match self.side { + axis::Side::Right => ( + bar_rect.right(), + bar_rect.right() + mark_len, + tick_pos, + tick_pos, + ), + axis::Side::Left => ( + bar_rect.left(), + bar_rect.left() - mark_len, + tick_pos, + tick_pos, + ), + axis::Side::Top => ( + tick_pos, + tick_pos, + bar_rect.top(), + bar_rect.top() - mark_len, + ), + axis::Side::Bottom => ( + tick_pos, + tick_pos, + bar_rect.bottom(), + bar_rect.bottom() + mark_len, + ), + }; + pb.move_to(tx1, ty1); + pb.line_to(tx2, ty2); + let path = pb.finish().expect("path should be valid"); + let rpath = render::Path { + path: &path, + fill: None, + stroke: Some(self.ticks_mark.0.as_stroke(style)), + transform: None, + }; + surface.draw_path(&rpath); + pb = path.clear(); + + let (tx, ty, ts) = match self.side { + axis::Side::Right => ( + tx2 + missing_params::TICK_LABEL_MARGIN, + tick_pos, + tick_text.width(), + ), + axis::Side::Left => ( + tx2 - missing_params::TICK_LABEL_MARGIN, + tick_pos, + tick_text.width(), + ), + axis::Side::Top => ( + tick_pos, + ty2 - missing_params::TICK_LABEL_MARGIN, + tick_text.height(), + ), + axis::Side::Bottom => ( + tick_pos, + ty2 + missing_params::TICK_LABEL_MARGIN, + tick_text.height(), + ), + }; + let transform = geom::Transform::from_translate(tx, ty); + tick_text.draw(surface, style, Some(&transform)); + + title_shift = title_shift.max(ts + missing_params::TICK_LABEL_MARGIN + mark_len); + } + + if let Some(title) = self.title.as_ref() { + let (tx, ty, rot) = match self.side { + axis::Side::Right => ( + bar_rect.right() + title_shift + missing_params::AXIS_TITLE_MARGIN, + start + sign * bar_len / 2.0, + -90.0, + ), + axis::Side::Left => ( + bar_rect.left() - title_shift - missing_params::AXIS_TITLE_MARGIN, + start + sign * bar_len / 2.0, + -90.0, + ), + axis::Side::Top => ( + start + sign * bar_len / 2.0, + bar_rect.top() - title_shift - missing_params::AXIS_TITLE_MARGIN, + 0.0, + ), + axis::Side::Bottom => ( + start + sign * bar_len / 2.0, + bar_rect.bottom() + title_shift + missing_params::AXIS_TITLE_MARGIN, + 0.0, + ), + }; + let transform = geom::Transform::from_translate(tx, ty).pre_rotate(rot); + title.draw(surface, style, Some(&transform)); + } } } diff --git a/src/drawing/plot.rs b/src/drawing/plot.rs index b2b7f4b..fdc889c 100644 --- a/src/drawing/plot.rs +++ b/src/drawing/plot.rs @@ -549,8 +549,8 @@ where Ok(builders .into_iter() - .map(|b| b.build(des_colorbar.clone())) - .collect()) + .map(|b| b.build(des_colorbar.clone(), self)) + .collect::<Result<Vec<_>, _>>()?) } fn calc_estimated_x_heights( @@ -573,6 +573,7 @@ where height += leg.size().height() + des_leg.margin(); } } + max_height = max_height.max(height); } } diff --git a/src/drawing/ticks.rs b/src/drawing/ticks.rs index 5f3f6ba..7c0ae71 100644 --- a/src/drawing/ticks.rs +++ b/src/drawing/ticks.rs @@ -6,7 +6,7 @@ use crate::data; use crate::des::axis::ticks::{ DateTimeFormatter, DateTimeLocator, TimeDeltaFormatter, TimeDeltaLocator, }; -use crate::des::axis::ticks::{Formatter, Locator, Ticks}; +use crate::des::axis::ticks::{Formatter, Locator}; use crate::des::axis::{LogScale, Scale}; use crate::drawing::{Categories, Error, axis}; #[cfg(feature = "time")] @@ -318,7 +318,7 @@ const AUTO_STEPS: &[f64] = &[1.0, 2.0, 2.5, 5.0]; const PI: f64 = std::f64::consts::PI; const PI_STEPS: &[f64] = &[PI / 8.0, PI / 6.0, PI / 4.0, PI / 3.0, PI / 2.0, PI]; -struct MaxN<'a> { +pub(super) struct MaxN<'a> { bins: u32, steps: &'a [f64], } @@ -328,7 +328,7 @@ impl<'a> MaxN<'a> { Self { bins, steps } } - fn new_auto() -> Self { + pub(super) fn new_auto() -> Self { Self::new(AUTO_BINS, AUTO_STEPS) } @@ -340,7 +340,7 @@ impl<'a> MaxN<'a> { Self::new(bins, PI_STEPS) } - fn ticks(&self, nb: axis::NumBounds) -> Vec<f64> { + pub(super) fn ticks(&self, nb: axis::NumBounds) -> Vec<f64> { let target_step = nb.span() / self.bins as f64; // getting quite about where we need to be @@ -492,14 +492,15 @@ impl LogLocator { } pub fn num_label_formatter( - ticks: &Ticks, + locator: &Locator, + formatter: Option<&Formatter>, ab: axis::NumBounds, scale: &Scale, ) -> Arc<dyn LabelFormatter> { - match ticks.formatter() { + match formatter { None => Arc::new(NullFormat), Some(Formatter::Auto) if scale.is_shared() => Arc::new(NullFormat), - Some(Formatter::Auto | Formatter::SharedAuto) => auto_label_formatter(ticks, ab, scale), + Some(Formatter::Auto | Formatter::SharedAuto) => auto_label_formatter(locator, formatter, ab, scale), Some(Formatter::Prec(prec)) => Arc::new(PrecLabelFormat(*prec)), Some(Formatter::Percent(fmt)) => { let prec = fmt @@ -510,23 +511,24 @@ pub fn num_label_formatter( #[cfg(feature = "time")] Some(Formatter::TimeDelta(tdfmt)) => timedelta_label_formatter(ab, tdfmt), #[cfg(feature = "time")] - Some(Formatter::DateTime(_)) => datetime_label_formatter(ticks, ab.into(), scale).unwrap(), + Some(Formatter::DateTime(_)) => datetime_label_formatter(formatter, ab.into(), scale).unwrap(), } } fn auto_label_formatter( - ticks: &Ticks, + locator: &Locator, + formatter: Option<&Formatter>, ab: axis::NumBounds, scale: &Scale, ) -> Arc<dyn LabelFormatter> { - match (ticks.locator(), scale) { + match (locator, scale) { (Locator::PiMultiple { .. }, _) => Arc::new(PiMultipleLabelFormat { prec: 2 }), (Locator::Auto, Scale::Log(LogScale { base, .. })) if *base == 10.0 => { Arc::new(SciLabelFormat) } (Locator::Auto, _) => { let max = ab.start().abs().max(ab.end().abs()); - if max >= 10000.0 || max < 0.01 { + if max >= 100000.0 || max < 0.001 { Arc::new(SciLabelFormat) } else if max >= 100.0 { Arc::new(PrecLabelFormat(0)) @@ -537,10 +539,10 @@ fn auto_label_formatter( } } #[cfg(feature = "time")] - (Locator::DateTime(_), _) => datetime_label_formatter(ticks, ab.into(), scale).unwrap(), + (Locator::DateTime(_), _) => datetime_label_formatter(formatter, ab.into(), scale).unwrap(), _ => todo!( "auto label formatter for locator {:?} and scale {:?}", - ticks.locator(), + locator, scale ), } @@ -561,11 +563,11 @@ fn percent_auto_precision(ab: axis::NumBounds) -> usize { #[cfg(feature = "time")] pub fn datetime_label_formatter( - ticks: &Ticks, + formatter: Option<&Formatter>, tb: axis::TimeBounds, scale: &Scale, ) -> Result<Arc<dyn LabelFormatter>, Error> { - match ticks.formatter() { + match formatter { Some(Formatter::Auto) if scale.is_shared() => Ok(Arc::new(NullFormat)), Some(Formatter::Auto | Formatter::SharedAuto) => auto_datetime_label_formatter(tb), Some(Formatter::DateTime(DateTimeFormatter::Auto)) => auto_datetime_label_formatter(tb), diff --git a/src/style/defaults.rs b/src/style/defaults.rs index 203e27c..dbd03c6 100644 --- a/src/style/defaults.rs +++ b/src/style/defaults.rs @@ -21,7 +21,7 @@ pub const LEGEND_V_SPACING: f32 = 10.0; pub const LEGEND_MARGIN: f32 = 12.0; pub const COLORBAR_WIDTH: f32 = 20.0; -pub const COLORBAR_LABEL_FONT_SIZE: f32 = 16.0; +pub const COLORBAR_TITLE_FONT_SIZE: f32 = 16.0; pub const COLORBAR_TICKS_FONT_SIZE: f32 = 12.0; pub const COLORBAR_MARGIN: f32 = LEGEND_MARGIN; From 99d87d34bf6e91ae0de9757d1a2c9605ba810018 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Thebault?= <remi.thebault@gmail.com> Date: Thu, 7 May 2026 11:46:31 +0200 Subject: [PATCH 11/16] suppress warning --- src/drawing/ticks.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/drawing/ticks.rs b/src/drawing/ticks.rs index 7c0ae71..60d6f7f 100644 --- a/src/drawing/ticks.rs +++ b/src/drawing/ticks.rs @@ -517,6 +517,7 @@ pub fn num_label_formatter( fn auto_label_formatter( locator: &Locator, + #[allow(unused_variables)] formatter: Option<&Formatter>, ab: axis::NumBounds, scale: &Scale, From 0052e8b509d2fe4eafedb809783c322788a66e86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Thebault?= <remi.thebault@gmail.com> Date: Thu, 7 May 2026 14:12:58 +0200 Subject: [PATCH 12/16] add viridis colormap --- src/des/cmap.rs | 69 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 46 insertions(+), 23 deletions(-) diff --git a/src/des/cmap.rs b/src/des/cmap.rs index 165cc63..f2dfd1a 100644 --- a/src/des/cmap.rs +++ b/src/des/cmap.rs @@ -1,14 +1,13 @@ //! A module for defining color maps that can be used in the design of plots to map scalar values to colors. -use crate::color::{Rgb8}; - +use crate::color::Rgb8; /// Describes how to interpolate between colors in a color map, either in linear RGB or perceptual color space. #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum LerpMethod { /// Interpolate colors in the linear RGB color space. LinearRgb, - /// Interpolate colors in a perceptual color space. + /// Interpolate colors in a perceptual color space (OkLab). Perceptual, /// Interpolate colors in the XYZ color space. Xyz, @@ -60,7 +59,6 @@ impl LerpColorMap { self } - /// Get the interpolation method used by this color map. pub fn method(&self) -> LerpMethod { self.method @@ -88,42 +86,57 @@ impl LerpColorMap { } } -/// A colormap that maps kelvin temperatures to black body color, with a range from 1000K to 30000K. +impl From<(LerpMethod, &[Rgb8])> for LerpColorMap { + fn from((method, stops): (LerpMethod, &[Rgb8])) -> Self { + assert!(stops.len() >= 2, "At least two colors must be provided"); + let start = stops[0]; + let end = stops[stops.len() - 1]; + + let mut cmap = Self::new(method, start, end); + for (i, stop) in stops.iter().enumerate().skip(1).take(stops.len() - 2) { + let position = i as f32 / (stops.len() - 1) as f32; + cmap = cmap.with_stop((position, *stop)); + } + cmap + } +} + +/// A colormap that maps kelvin temperatures to black body color, with a range from 1000K to 15000K. +/// Based on the approximation from Tanner Helland: +/// https://tannerhelland.com/2012/09/18/convert-temperature-rgb-algorithm-code.html pub fn stellar() -> LerpColorMap { const MIN_TEMP: f64 = 1000.0; const MAX_TEMP: f64 = 15000.0; fn stop_for_temp(temp: f64) -> (f32, Rgb8) { - // Approximate the color of a black body at the given temperature in kelvin. - // The formula is based on the on the Tanner Helland's approximation: - // https://tannerhelland.com/2012/09/18/convert-temperature-rgb-algorithm-code.html - let t = temp / 100.0; let r = if t <= 66.0 { - 255 + 255.0 } else { - let r = 329.698727446 * (t - 60.0).powf(-0.1332047592); - r.clamp(0.0, 255.0) as u8 + 329.698727446 * (t - 60.0).powf(-0.1332047592) }; + let g = if t <= 66.0 { - let g = 99.4708025861 * t.ln() - 161.1195681661; - g.clamp(0.0, 255.0) as u8 + 99.4708025861 * t.ln() - 161.1195681661 } else { - let g = 288.1221695283 * (t - 60.0).powf(-0.0755148492); - g.clamp(0.0, 255.0) as u8 + 288.1221695283 * (t - 60.0).powf(-0.0755148492) }; let b = if t >= 66.0 { - 255 + 255.0 } else if t <= 19.0 { - 0 + 0.0 } else { - let b = 138.5177312231 * (t - 10.0).ln() - 305.0447927307; - b.clamp(0.0, 255.0) as u8 + 138.5177312231 * (t - 10.0).ln() - 305.0447927307 }; let stop_pos = ((temp - MIN_TEMP) / (MAX_TEMP - MIN_TEMP)) as f32; - (stop_pos, Rgb8::new(r, g, b)) + let r = r.clamp(0.0, 255.0) as u8; + let g = g.clamp(0.0, 255.0) as u8; + let b = b.clamp(0.0, 255.0) as u8; + let color = Rgb8::new(r, g, b); + + (stop_pos, color) } LerpColorMap::new( @@ -142,7 +155,17 @@ pub fn stellar() -> LerpColorMap { .with_stop(stop_for_temp(9000.0)) .with_stop(stop_for_temp(10000.0)) .with_stop(stop_for_temp(12000.0)) - // .with_stop(stop_for_temp(15000.0)) - // .with_stop(stop_for_temp(20000.0)) .with_data_range((MIN_TEMP, MAX_TEMP)) } + +/// The famous "viridis" color map from matplotlib +pub fn viridis() -> LerpColorMap { + const STOPS: &[Rgb8] = &[ + Rgb8::from_hex(b"#440154"), + Rgb8::from_hex(b"#3b518a"), + Rgb8::from_hex(b"#208f8c"), + Rgb8::from_hex(b"#5bc862"), + Rgb8::from_hex(b"#fde724"), + ]; + (LerpMethod::Perceptual, STOPS).into() +} From 8db05f9b3c74966708d0f6e74dd891dd7c818d3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Thebault?= <remi.thebault@gmail.com> Date: Thu, 7 May 2026 14:13:42 +0200 Subject: [PATCH 13/16] assertion msg --- base/src/color.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/src/color.rs b/base/src/color.rs index 69f0b1f..9674ae5 100644 --- a/base/src/color.rs +++ b/base/src/color.rs @@ -586,7 +586,7 @@ impl Eq for OkLab {} impl Lerp for OkLab { fn lerp(self, other: Self, t: f32) -> Self { - debug_assert!(t >= 0.0 && t <= 1.0, "t must be in the range [0.0, 1.0]"); + debug_assert!(t >= 0.0 && t <= 1.0, "t must be in the range [0.0, 1.0], got {}", t); let r = self.0 * (1.0 - t) + other.0 * t; let g = self.1 * (1.0 - t) + other.1 * t; let b = self.2 * (1.0 - t) + other.2 * t; From 2ee3ce94ff08a49928493d00832bf715f3525cf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Thebault?= <remi.thebault@gmail.com> Date: Thu, 7 May 2026 11:41:54 +0200 Subject: [PATCH 14/16] finalize colorbar impl and tests --- .vscode/launch.json | 11 + Cargo.lock | 3 + Cargo.toml | 9 +- src/drawing/colorbar.rs | 5 +- src/drawing/plot.rs | 20 ++ tests/Cargo.toml | 3 + tests/refs/colorbar/bottom.png | Bin 0 -> 29453 bytes tests/refs/colorbar/bottom.svg | 404 ++++++++++++++++++++++ tests/refs/colorbar/default-with-axes.png | Bin 0 -> 36936 bytes tests/refs/colorbar/default-with-axes.svg | 264 ++++++++++++++ tests/refs/colorbar/default.png | Bin 0 -> 31086 bytes tests/refs/colorbar/default.svg | 304 ++++++++++++++++ tests/refs/colorbar/forced-scale.png | Bin 0 -> 32764 bytes tests/refs/colorbar/forced-scale.svg | 308 +++++++++++++++++ tests/refs/colorbar/left.png | Bin 0 -> 31137 bytes tests/refs/colorbar/left.svg | 304 ++++++++++++++++ tests/refs/colorbar/top.png | Bin 0 -> 29112 bytes tests/refs/colorbar/top.svg | 404 ++++++++++++++++++++++ tests/src/tests.rs | 15 + tests/src/tests/colorbar.rs | 150 ++++++++ 20 files changed, 2198 insertions(+), 6 deletions(-) create mode 100644 tests/refs/colorbar/bottom.png create mode 100644 tests/refs/colorbar/bottom.svg create mode 100644 tests/refs/colorbar/default-with-axes.png create mode 100644 tests/refs/colorbar/default-with-axes.svg create mode 100644 tests/refs/colorbar/default.png create mode 100644 tests/refs/colorbar/default.svg create mode 100644 tests/refs/colorbar/forced-scale.png create mode 100644 tests/refs/colorbar/forced-scale.svg create mode 100644 tests/refs/colorbar/left.png create mode 100644 tests/refs/colorbar/left.svg create mode 100644 tests/refs/colorbar/top.png create mode 100644 tests/refs/colorbar/top.svg create mode 100644 tests/src/tests/colorbar.rs diff --git a/.vscode/launch.json b/.vscode/launch.json index 289249c..1d6002f 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -128,6 +128,17 @@ }, "args": ["png", "svg"] }, + { + "type": "lldb", + "request": "launch", + "name": "stars example", + "cargo": { + "args": [ + "build", "--example", "stars", + "--features", "data-csv" + ] + }, + }, { "type": "lldb", "request": "launch", diff --git a/Cargo.lock b/Cargo.lock index e1a1261..373ed8c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3832,6 +3832,9 @@ dependencies = [ "plotive", "plotive-pxl", "plotive-svg", + "rand", + "rand_chacha", + "rand_distr", "similar", "tiny-skia", ] diff --git a/Cargo.toml b/Cargo.toml index f18924f..dff085c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,9 +26,9 @@ polars = { workspace = true, optional = true } plotive-iced = { path = "iced", features = ["clipboard"] } plotive-svg = { path = "svg" } plotive-pxl = { path = "pxl" } -rand = "0.9.2" -rand_distr = "0.5.1" -rand_chacha = "0.9.0" +rand.workspace = true +rand_distr.workspace = true +rand_chacha.workspace = true ode_solvers = "0.6.1" [features] @@ -146,6 +146,9 @@ iced_font_awesome = "0.4.0" log = "0.4" miette = { version = "7.6.0", features = ["fancy"] } polars = { version = "0.50.0", features = ["lazy"] } +rand = "0.9.2" +rand_distr = "0.5.1" +rand_chacha = "0.9.0" rfd = "0.17.1" rustybuzz = "0.20.1" tiny-skia = "0.11.4" diff --git a/src/drawing/colorbar.rs b/src/drawing/colorbar.rs index a2d2184..ee320e3 100644 --- a/src/drawing/colorbar.rs +++ b/src/drawing/colorbar.rs @@ -90,7 +90,6 @@ impl ColorBarBuilder { ctx.fontdb(), )?; let text = Text::from_line_text(<, ctx.fontdb(), font.color)?; - Ok((data::Sample::Num(t), text)) }) .collect::<Result<Vec<_>, _>>()? @@ -184,7 +183,7 @@ impl ColorBar { } pub fn calc_size_across(&self) -> f32 { - let mut size = 0.0; + let mut size = self.width(); if !self.ticks.is_empty() { size += self.ticks_mark.1 + missing_params::TICK_LABEL_MARGIN; @@ -299,7 +298,7 @@ impl ColorBar { pb = path.clear(); pos = pos2; - t += t_shift; + t = (t + t_shift).min(1.0); } if let Some(border) = self.border() { diff --git a/src/drawing/plot.rs b/src/drawing/plot.rs index fdc889c..817901d 100644 --- a/src/drawing/plot.rs +++ b/src/drawing/plot.rs @@ -574,6 +574,12 @@ where } } + for cbar in &data.colorbars { + if x_side_matches_colorbar_pos(side, cbar.pos()) { + height += cbar.calc_size_across() + cbar.margin(); + } + } + max_height = max_height.max(height); } } @@ -610,6 +616,12 @@ where } } + for cbar in &data.colorbars { + if x_side_matches_colorbar_pos(side, cbar.pos()) { + height += cbar.calc_size_across() + cbar.margin(); + } + } + max_height = max_height.max(height); } debug_assert!(max_height.is_finite()); @@ -900,6 +912,14 @@ fn y_side_matches_out_legend_pos(side: des::axis::Side, legend_pos: des::plot::L } } +fn x_side_matches_colorbar_pos(side: des::axis::Side, pos: des::ColorBarPos) -> bool { + match (side, pos) { + (des::axis::Side::Main, des::ColorBarPos::Bottom) => true, + (des::axis::Side::Opposite, des::ColorBarPos::Top) => true, + _ => false, + } +} + fn y_side_matches_colorbar_pos(side: des::axis::Side, pos: des::ColorBarPos) -> bool { match (side, pos) { (des::axis::Side::Main, des::ColorBarPos::Left) => true, diff --git a/tests/Cargo.toml b/tests/Cargo.toml index 06af53b..c96de2b 100644 --- a/tests/Cargo.toml +++ b/tests/Cargo.toml @@ -15,3 +15,6 @@ plotive-pxl.workspace = true plotive-svg.workspace = true tiny-skia.workspace = true similar = "2.7.0" +rand.workspace = true +rand_distr.workspace = true +rand_chacha.workspace = true diff --git a/tests/refs/colorbar/bottom.png b/tests/refs/colorbar/bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..8358065be429ee183c242fe2b0d141cfbada567f GIT binary patch literal 29453 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 NPb=O!yJ+ps{{z~URO$c# literal 0 HcmV?d00001 diff --git a/tests/refs/colorbar/bottom.svg b/tests/refs/colorbar/bottom.svg new file mode 100644 index 0000000..85be6fb --- /dev/null +++ b/tests/refs/colorbar/bottom.svg @@ -0,0 +1,404 @@ +<svg height="300" viewBox="0 0 400 300" width="400" xmlns="http://www.w3.org/2000/svg"> +<rect fill="#ffffff" height="100%" width="100%"/> +<clipPath id="plotive-clip1"> +<rect height="203.656" width="360" x="20" y="20"/> +</clipPath> +<g clip-path="url(#plotive-clip1)"> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#54c16a" fill-opacity="0.7019608" stroke="#54c16a" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 228.47182 93.98552)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#3ba97e" fill-opacity="0.7019608" stroke="#3ba97e" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 214.8317 58.74176)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#8fd159" fill-opacity="0.7019608" stroke="#8fd159" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 242.92818 146.19653)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#440154" fill-opacity="0.7019608" stroke="#440154" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 201.02121 112.47543)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#35a282" fill-opacity="0.7019608" stroke="#35a282" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 40 105.80055)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#31778c" fill-opacity="0.7019608" stroke="#31778c" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 173.38101 40)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#70cb5f" fill-opacity="0.7019608" stroke="#70cb5f" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 190.30307 175.35294)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#38638b" fill-opacity="0.7019608" stroke="#38638b" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 67.984604 143.92642)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#36698c" fill-opacity="0.7019608" stroke="#36698c" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 120.19727 99.394485)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#fde724" fill-opacity="0.7019608" stroke="#fde724" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 258.7989 90.53172)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#33a083" fill-opacity="0.7019608" stroke="#33a083" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 202.37831 101.88791)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#90d159" fill-opacity="0.7019608" stroke="#90d159" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 326.33936 64.689316)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#461c61" fill-opacity="0.7019608" stroke="#461c61" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 360 148.72003)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#61c961" fill-opacity="0.7019608" stroke="#61c961" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 46.978165 203.656)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#279689" fill-opacity="0.7019608" stroke="#279689" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 168.67339 52.01378)"/> +</g> +<rect fill="none" height="203.656" stroke="#000000" stroke-width="1" width="360" x="20" y="20"/> +<path d="M20,235.656 L20,255.656 L20.5,255.656 L20.5,235.656" fill="#440154" stroke="none"/> +<path d="M20.5,235.656 L20.5,255.656 L21.5,255.656 L21.5,235.656" fill="#440255" stroke="none"/> +<path d="M21.5,235.656 L21.5,255.656 L22.5,255.656 L22.5,235.656" fill="#440455" stroke="none"/> +<path d="M22.5,235.656 L22.5,255.656 L23.5,255.656 L23.5,235.656" fill="#440556" stroke="none"/> +<path d="M23.5,235.656 L23.5,255.656 L24.5,255.656 L24.5,235.656" fill="#440756" stroke="none"/> +<path d="M24.5,235.656 L24.5,255.656 L25.5,255.656 L25.5,235.656" fill="#450857" stroke="none"/> +<path d="M25.5,235.656 L25.5,255.656 L26.5,255.656 L26.5,235.656" fill="#450957" stroke="none"/> +<path d="M26.5,235.656 L26.5,255.656 L27.5,255.656 L27.5,235.656" fill="#450b58" stroke="none"/> +<path d="M27.5,235.656 L27.5,255.656 L28.5,255.656 L28.5,235.656" fill="#450c59" stroke="none"/> +<path d="M28.5,235.656 L28.5,255.656 L29.5,255.656 L29.5,235.656" fill="#450e59" stroke="none"/> +<path d="M29.5,235.656 L29.5,255.656 L30.5,255.656 L30.5,235.656" fill="#450f5a" stroke="none"/> +<path d="M30.5,235.656 L30.5,255.656 L31.5,255.656 L31.5,235.656" fill="#45105a" stroke="none"/> +<path d="M31.5,235.656 L31.5,255.656 L32.5,255.656 L32.5,235.656" fill="#45115b" stroke="none"/> +<path d="M32.5,235.656 L32.5,255.656 L33.5,255.656 L33.5,235.656" fill="#45135c" stroke="none"/> +<path d="M33.5,235.656 L33.5,255.656 L34.5,255.656 L34.5,235.656" fill="#45145c" stroke="none"/> +<path d="M34.5,235.656 L34.5,255.656 L35.5,255.656 L35.5,235.656" fill="#45155d" stroke="none"/> +<path d="M35.5,235.656 L35.5,255.656 L36.5,255.656 L36.5,235.656" fill="#45165d" stroke="none"/> +<path d="M36.5,235.656 L36.5,255.656 L37.5,255.656 L37.5,235.656" fill="#45175e" stroke="none"/> +<path d="M37.5,235.656 L37.5,255.656 L38.5,255.656 L38.5,235.656" fill="#46185e" stroke="none"/> +<path d="M38.5,235.656 L38.5,255.656 L39.5,255.656 L39.5,235.656" fill="#46195f" stroke="none"/> +<path d="M39.5,235.656 L39.5,255.656 L40.5,255.656 L40.5,235.656" fill="#461a60" stroke="none"/> +<path d="M40.5,235.656 L40.5,255.656 L41.5,255.656 L41.5,235.656" fill="#461b60" stroke="none"/> +<path d="M41.5,235.656 L41.5,255.656 L42.5,255.656 L42.5,235.656" fill="#461c61" stroke="none"/> +<path d="M42.5,235.656 L42.5,255.656 L43.5,255.656 L43.5,235.656" fill="#461d61" stroke="none"/> +<path d="M43.5,235.656 L43.5,255.656 L44.5,255.656 L44.5,235.656" fill="#461e62" stroke="none"/> +<path d="M44.5,235.656 L44.5,255.656 L45.5,255.656 L45.5,235.656" fill="#461f63" stroke="none"/> +<path d="M45.5,235.656 L45.5,255.656 L46.5,255.656 L46.5,235.656" fill="#461f63" stroke="none"/> +<path d="M46.5,235.656 L46.5,255.656 L47.5,255.656 L47.5,235.656" fill="#462064" stroke="none"/> +<path d="M47.5,235.656 L47.5,255.656 L48.5,255.656 L48.5,235.656" fill="#462164" stroke="none"/> +<path d="M48.5,235.656 L48.5,255.656 L49.5,255.656 L49.5,235.656" fill="#462265" stroke="none"/> +<path d="M49.5,235.656 L49.5,255.656 L50.5,255.656 L50.5,235.656" fill="#462366" stroke="none"/> +<path d="M50.5,235.656 L50.5,255.656 L51.5,255.656 L51.5,235.656" fill="#462466" stroke="none"/> +<path d="M51.5,235.656 L51.5,255.656 L52.5,255.656 L52.5,235.656" fill="#462567" stroke="none"/> +<path d="M52.5,235.656 L52.5,255.656 L53.5,255.656 L53.5,235.656" fill="#462567" stroke="none"/> +<path d="M53.5,235.656 L53.5,255.656 L54.5,255.656 L54.5,235.656" fill="#462668" stroke="none"/> +<path d="M54.5,235.656 L54.5,255.656 L55.5,255.656 L55.5,235.656" fill="#462769" stroke="none"/> +<path d="M55.5,235.656 L55.5,255.656 L56.5,255.656 L56.5,235.656" fill="#462869" stroke="none"/> +<path d="M56.5,235.656 L56.5,255.656 L57.5,255.656 L57.5,235.656" fill="#46296a" stroke="none"/> +<path d="M57.5,235.656 L57.5,255.656 L58.5,255.656 L58.5,235.656" fill="#462a6a" stroke="none"/> +<path d="M58.5,235.656 L58.5,255.656 L59.5,255.656 L59.5,235.656" fill="#462a6b" stroke="none"/> +<path d="M59.5,235.656 L59.5,255.656 L60.5,255.656 L60.5,235.656" fill="#462b6c" stroke="none"/> +<path d="M60.5,235.656 L60.5,255.656 L61.5,255.656 L61.5,235.656" fill="#462c6c" stroke="none"/> +<path d="M61.5,235.656 L61.5,255.656 L62.5,255.656 L62.5,235.656" fill="#452d6d" stroke="none"/> +<path d="M62.5,235.656 L62.5,255.656 L63.5,255.656 L63.5,235.656" fill="#452e6d" stroke="none"/> +<path d="M63.5,235.656 L63.5,255.656 L64.5,255.656 L64.5,235.656" fill="#452e6e" stroke="none"/> +<path d="M64.5,235.656 L64.5,255.656 L65.5,255.656 L65.5,235.656" fill="#452f6f" stroke="none"/> +<path d="M65.5,235.656 L65.5,255.656 L66.5,255.656 L66.5,235.656" fill="#45306f" stroke="none"/> +<path d="M66.5,235.656 L66.5,255.656 L67.5,255.656 L67.5,235.656" fill="#453170" stroke="none"/> +<path d="M67.5,235.656 L67.5,255.656 L68.5,255.656 L68.5,235.656" fill="#453270" stroke="none"/> +<path d="M68.5,235.656 L68.5,255.656 L69.5,255.656 L69.5,235.656" fill="#453271" stroke="none"/> +<path d="M69.5,235.656 L69.5,255.656 L70.5,255.656 L70.5,235.656" fill="#453372" stroke="none"/> +<path d="M70.5,235.656 L70.5,255.656 L71.5,255.656 L71.5,235.656" fill="#453472" stroke="none"/> +<path d="M71.5,235.656 L71.5,255.656 L72.5,255.656 L72.5,235.656" fill="#453573" stroke="none"/> +<path d="M72.5,235.656 L72.5,255.656 L73.5,255.656 L73.5,235.656" fill="#443573" stroke="none"/> +<path d="M73.5,235.656 L73.5,255.656 L74.5,255.656 L74.5,235.656" fill="#443674" stroke="none"/> +<path d="M74.5,235.656 L74.5,255.656 L75.5,255.656 L75.5,235.656" fill="#443775" stroke="none"/> +<path d="M75.5,235.656 L75.5,255.656 L76.5,255.656 L76.5,235.656" fill="#443875" stroke="none"/> +<path d="M76.5,235.656 L76.5,255.656 L77.5,255.656 L77.5,235.656" fill="#443876" stroke="none"/> +<path d="M77.5,235.656 L77.5,255.656 L78.5,255.656 L78.5,235.656" fill="#443976" stroke="none"/> +<path d="M78.5,235.656 L78.5,255.656 L79.5,255.656 L79.5,235.656" fill="#443a77" stroke="none"/> +<path d="M79.5,235.656 L79.5,255.656 L80.5,255.656 L80.5,235.656" fill="#433b78" stroke="none"/> +<path d="M80.5,235.656 L80.5,255.656 L81.5,255.656 L81.5,235.656" fill="#433b78" stroke="none"/> +<path d="M81.5,235.656 L81.5,255.656 L82.5,255.656 L82.5,235.656" fill="#433c79" stroke="none"/> +<path d="M82.5,235.656 L82.5,255.656 L83.5,255.656 L83.5,235.656" fill="#433d79" stroke="none"/> +<path d="M83.5,235.656 L83.5,255.656 L84.5,255.656 L84.5,235.656" fill="#433e7a" stroke="none"/> +<path d="M84.5,235.656 L84.5,255.656 L85.5,255.656 L85.5,235.656" fill="#433f7b" stroke="none"/> +<path d="M85.5,235.656 L85.5,255.656 L86.5,255.656 L86.5,235.656" fill="#423f7b" stroke="none"/> +<path d="M86.5,235.656 L86.5,255.656 L87.5,255.656 L87.5,235.656" fill="#42407c" stroke="none"/> +<path d="M87.5,235.656 L87.5,255.656 L88.5,255.656 L88.5,235.656" fill="#42417c" stroke="none"/> +<path d="M88.5,235.656 L88.5,255.656 L89.5,255.656 L89.5,235.656" fill="#42417d" stroke="none"/> +<path d="M89.5,235.656 L89.5,255.656 L90.5,255.656 L90.5,235.656" fill="#41427e" stroke="none"/> +<path d="M90.5,235.656 L90.5,255.656 L91.5,255.656 L91.5,235.656" fill="#41437e" stroke="none"/> +<path d="M91.5,235.656 L91.5,255.656 L92.5,255.656 L92.5,235.656" fill="#41447f" stroke="none"/> +<path d="M92.5,235.656 L92.5,255.656 L93.5,255.656 L93.5,235.656" fill="#414480" stroke="none"/> +<path d="M93.5,235.656 L93.5,255.656 L94.5,255.656 L94.5,235.656" fill="#404580" stroke="none"/> +<path d="M94.5,235.656 L94.5,255.656 L95.5,255.656 L95.5,235.656" fill="#404681" stroke="none"/> +<path d="M95.5,235.656 L95.5,255.656 L96.5,255.656 L96.5,235.656" fill="#404781" stroke="none"/> +<path d="M96.5,235.656 L96.5,255.656 L97.5,255.656 L97.5,235.656" fill="#404782" stroke="none"/> +<path d="M97.5,235.656 L97.5,255.656 L98.5,255.656 L98.5,235.656" fill="#3f4883" stroke="none"/> +<path d="M98.5,235.656 L98.5,255.656 L99.5,255.656 L99.5,235.656" fill="#3f4983" stroke="none"/> +<path d="M99.5,235.656 L99.5,255.656 L100.5,255.656 L100.5,235.656" fill="#3f4a84" stroke="none"/> +<path d="M100.5,235.656 L100.5,255.656 L101.5,255.656 L101.5,235.656" fill="#3e4a84" stroke="none"/> +<path d="M101.5,235.656 L101.5,255.656 L102.5,255.656 L102.5,235.656" fill="#3e4b85" stroke="none"/> +<path d="M102.5,235.656 L102.5,255.656 L103.5,255.656 L103.5,235.656" fill="#3e4c86" stroke="none"/> +<path d="M103.5,235.656 L103.5,255.656 L104.5,255.656 L104.5,235.656" fill="#3d4d86" stroke="none"/> +<path d="M104.5,235.656 L104.5,255.656 L105.5,255.656 L105.5,235.656" fill="#3d4d87" stroke="none"/> +<path d="M105.5,235.656 L105.5,255.656 L106.5,255.656 L106.5,235.656" fill="#3d4e88" stroke="none"/> +<path d="M106.5,235.656 L106.5,255.656 L107.5,255.656 L107.5,235.656" fill="#3c4f88" stroke="none"/> +<path d="M107.5,235.656 L107.5,255.656 L108.5,255.656 L108.5,235.656" fill="#3c5089" stroke="none"/> +<path d="M108.5,235.656 L108.5,255.656 L109.5,255.656 L109.5,235.656" fill="#3b5089" stroke="none"/> +<path d="M109.5,235.656 L109.5,255.656 L110.5,255.656 L110.5,235.656" fill="#3b518a" stroke="none"/> +<path d="M110.5,235.656 L110.5,255.656 L111.5,255.656 L111.5,235.656" fill="#3b528a" stroke="none"/> +<path d="M111.5,235.656 L111.5,255.656 L112.5,255.656 L112.5,235.656" fill="#3b528a" stroke="none"/> +<path d="M112.5,235.656 L112.5,255.656 L113.5,255.656 L113.5,235.656" fill="#3b538a" stroke="none"/> +<path d="M113.5,235.656 L113.5,255.656 L114.5,255.656 L114.5,235.656" fill="#3b548a" stroke="none"/> +<path d="M114.5,235.656 L114.5,255.656 L115.5,255.656 L115.5,235.656" fill="#3a558a" stroke="none"/> +<path d="M115.5,235.656 L115.5,255.656 L116.5,255.656 L116.5,235.656" fill="#3a558a" stroke="none"/> +<path d="M116.5,235.656 L116.5,255.656 L117.5,255.656 L117.5,235.656" fill="#3a568a" stroke="none"/> +<path d="M117.5,235.656 L117.5,255.656 L118.5,255.656 L118.5,235.656" fill="#3a578a" stroke="none"/> +<path d="M118.5,235.656 L118.5,255.656 L119.5,255.656 L119.5,235.656" fill="#3a578b" stroke="none"/> +<path d="M119.5,235.656 L119.5,255.656 L120.5,255.656 L120.5,235.656" fill="#3a588b" stroke="none"/> +<path d="M120.5,235.656 L120.5,255.656 L121.5,255.656 L121.5,235.656" fill="#3a598b" stroke="none"/> +<path d="M121.5,235.656 L121.5,255.656 L122.5,255.656 L122.5,235.656" fill="#3a5a8b" stroke="none"/> +<path d="M122.5,235.656 L122.5,255.656 L123.5,255.656 L123.5,235.656" fill="#3a5a8b" stroke="none"/> +<path d="M123.5,235.656 L123.5,255.656 L124.5,255.656 L124.5,235.656" fill="#395b8b" stroke="none"/> +<path d="M124.5,235.656 L124.5,255.656 L125.5,255.656 L125.5,235.656" fill="#395c8b" stroke="none"/> +<path d="M125.5,235.656 L125.5,255.656 L126.5,255.656 L126.5,235.656" fill="#395c8b" stroke="none"/> +<path d="M126.5,235.656 L126.5,255.656 L127.5,255.656 L127.5,235.656" fill="#395d8b" stroke="none"/> +<path d="M127.5,235.656 L127.5,255.656 L128.5,255.656 L128.5,235.656" fill="#395e8b" stroke="none"/> +<path d="M128.5,235.656 L128.5,255.656 L129.5,255.656 L129.5,235.656" fill="#395e8b" stroke="none"/> +<path d="M129.5,235.656 L129.5,255.656 L130.5,255.656 L130.5,235.656" fill="#395f8b" stroke="none"/> +<path d="M130.5,235.656 L130.5,255.656 L131.5,255.656 L131.5,235.656" fill="#38608b" stroke="none"/> +<path d="M131.5,235.656 L131.5,255.656 L132.5,255.656 L132.5,235.656" fill="#38618b" stroke="none"/> +<path d="M132.5,235.656 L132.5,255.656 L133.5,255.656 L133.5,235.656" fill="#38618b" stroke="none"/> +<path d="M133.5,235.656 L133.5,255.656 L134.5,255.656 L134.5,235.656" fill="#38628b" stroke="none"/> +<path d="M134.5,235.656 L134.5,255.656 L135.5,255.656 L135.5,235.656" fill="#38638b" stroke="none"/> +<path d="M135.5,235.656 L135.5,255.656 L136.5,255.656 L136.5,235.656" fill="#38638b" stroke="none"/> +<path d="M136.5,235.656 L136.5,255.656 L137.5,255.656 L137.5,235.656" fill="#37648b" stroke="none"/> +<path d="M137.5,235.656 L137.5,255.656 L138.5,255.656 L138.5,235.656" fill="#37658b" stroke="none"/> +<path d="M138.5,235.656 L138.5,255.656 L139.5,255.656 L139.5,235.656" fill="#37658c" stroke="none"/> +<path d="M139.5,235.656 L139.5,255.656 L140.5,255.656 L140.5,235.656" fill="#37668c" stroke="none"/> +<path d="M140.5,235.656 L140.5,255.656 L141.5,255.656 L141.5,235.656" fill="#37678c" stroke="none"/> +<path d="M141.5,235.656 L141.5,255.656 L142.5,255.656 L142.5,235.656" fill="#36688c" stroke="none"/> +<path d="M142.5,235.656 L142.5,255.656 L143.5,255.656 L143.5,235.656" fill="#36688c" stroke="none"/> +<path d="M143.5,235.656 L143.5,255.656 L144.5,255.656 L144.5,235.656" fill="#36698c" stroke="none"/> +<path d="M144.5,235.656 L144.5,255.656 L145.5,255.656 L145.5,235.656" fill="#366a8c" stroke="none"/> +<path d="M145.5,235.656 L145.5,255.656 L146.5,255.656 L146.5,235.656" fill="#366a8c" stroke="none"/> +<path d="M146.5,235.656 L146.5,255.656 L147.5,255.656 L147.5,235.656" fill="#356b8c" stroke="none"/> +<path d="M147.5,235.656 L147.5,255.656 L148.5,255.656 L148.5,235.656" fill="#356c8c" stroke="none"/> +<path d="M148.5,235.656 L148.5,255.656 L149.5,255.656 L149.5,235.656" fill="#356c8c" stroke="none"/> +<path d="M149.5,235.656 L149.5,255.656 L150.5,255.656 L150.5,235.656" fill="#356d8c" stroke="none"/> +<path d="M150.5,235.656 L150.5,255.656 L151.5,255.656 L151.5,235.656" fill="#346e8c" stroke="none"/> +<path d="M151.5,235.656 L151.5,255.656 L152.5,255.656 L152.5,235.656" fill="#346e8c" stroke="none"/> +<path d="M152.5,235.656 L152.5,255.656 L153.5,255.656 L153.5,235.656" fill="#346f8c" stroke="none"/> +<path d="M153.5,235.656 L153.5,255.656 L154.5,255.656 L154.5,235.656" fill="#34708c" stroke="none"/> +<path d="M154.5,235.656 L154.5,255.656 L155.5,255.656 L155.5,235.656" fill="#33708c" stroke="none"/> +<path d="M155.5,235.656 L155.5,255.656 L156.5,255.656 L156.5,235.656" fill="#33718c" stroke="none"/> +<path d="M156.5,235.656 L156.5,255.656 L157.5,255.656 L157.5,235.656" fill="#33728c" stroke="none"/> +<path d="M157.5,235.656 L157.5,255.656 L158.5,255.656 L158.5,235.656" fill="#33728c" stroke="none"/> +<path d="M158.5,235.656 L158.5,255.656 L159.5,255.656 L159.5,235.656" fill="#32738c" stroke="none"/> +<path d="M159.5,235.656 L159.5,255.656 L160.5,255.656 L160.5,235.656" fill="#32748c" stroke="none"/> +<path d="M160.5,235.656 L160.5,255.656 L161.5,255.656 L161.5,235.656" fill="#32758c" stroke="none"/> +<path d="M161.5,235.656 L161.5,255.656 L162.5,255.656 L162.5,235.656" fill="#31758c" stroke="none"/> +<path d="M162.5,235.656 L162.5,255.656 L163.5,255.656 L163.5,235.656" fill="#31768c" stroke="none"/> +<path d="M163.5,235.656 L163.5,255.656 L164.5,255.656 L164.5,235.656" fill="#31778c" stroke="none"/> +<path d="M164.5,235.656 L164.5,255.656 L165.5,255.656 L165.5,235.656" fill="#31778c" stroke="none"/> +<path d="M165.5,235.656 L165.5,255.656 L166.5,255.656 L166.5,235.656" fill="#30788c" stroke="none"/> +<path d="M166.5,235.656 L166.5,255.656 L167.5,255.656 L167.5,235.656" fill="#30798c" stroke="none"/> +<path d="M167.5,235.656 L167.5,255.656 L168.5,255.656 L168.5,235.656" fill="#30798c" stroke="none"/> +<path d="M168.5,235.656 L168.5,255.656 L169.5,255.656 L169.5,235.656" fill="#2f7a8c" stroke="none"/> +<path d="M169.5,235.656 L169.5,255.656 L170.5,255.656 L170.5,235.656" fill="#2f7b8c" stroke="none"/> +<path d="M170.5,235.656 L170.5,255.656 L171.5,255.656 L171.5,235.656" fill="#2f7b8c" stroke="none"/> +<path d="M171.5,235.656 L171.5,255.656 L172.5,255.656 L172.5,235.656" fill="#2e7c8c" stroke="none"/> +<path d="M172.5,235.656 L172.5,255.656 L173.5,255.656 L173.5,235.656" fill="#2e7d8c" stroke="none"/> +<path d="M173.5,235.656 L173.5,255.656 L174.5,255.656 L174.5,235.656" fill="#2d7d8c" stroke="none"/> +<path d="M174.5,235.656 L174.5,255.656 L175.5,255.656 L175.5,235.656" fill="#2d7e8c" stroke="none"/> +<path d="M175.5,235.656 L175.5,255.656 L176.5,255.656 L176.5,235.656" fill="#2d7f8c" stroke="none"/> +<path d="M176.5,235.656 L176.5,255.656 L177.5,255.656 L177.5,235.656" fill="#2c7f8c" stroke="none"/> +<path d="M177.5,235.656 L177.5,255.656 L178.5,255.656 L178.5,235.656" fill="#2c808c" stroke="none"/> +<path d="M178.5,235.656 L178.5,255.656 L179.5,255.656 L179.5,235.656" fill="#2b818c" stroke="none"/> +<path d="M179.5,235.656 L179.5,255.656 L180.5,255.656 L180.5,235.656" fill="#2b818c" stroke="none"/> +<path d="M180.5,235.656 L180.5,255.656 L181.5,255.656 L181.5,235.656" fill="#2b828c" stroke="none"/> +<path d="M181.5,235.656 L181.5,255.656 L182.5,255.656 L182.5,235.656" fill="#2a838c" stroke="none"/> +<path d="M182.5,235.656 L182.5,255.656 L183.5,255.656 L183.5,235.656" fill="#2a838c" stroke="none"/> +<path d="M183.5,235.656 L183.5,255.656 L184.5,255.656 L184.5,235.656" fill="#29848c" stroke="none"/> +<path d="M184.5,235.656 L184.5,255.656 L185.5,255.656 L185.5,235.656" fill="#29858c" stroke="none"/> +<path d="M185.5,235.656 L185.5,255.656 L186.5,255.656 L186.5,235.656" fill="#28868c" stroke="none"/> +<path d="M186.5,235.656 L186.5,255.656 L187.5,255.656 L187.5,235.656" fill="#28868c" stroke="none"/> +<path d="M187.5,235.656 L187.5,255.656 L188.5,255.656 L188.5,235.656" fill="#27878c" stroke="none"/> +<path d="M188.5,235.656 L188.5,255.656 L189.5,255.656 L189.5,235.656" fill="#27888c" stroke="none"/> +<path d="M189.5,235.656 L189.5,255.656 L190.5,255.656 L190.5,235.656" fill="#26888c" stroke="none"/> +<path d="M190.5,235.656 L190.5,255.656 L191.5,255.656 L191.5,235.656" fill="#26898c" stroke="none"/> +<path d="M191.5,235.656 L191.5,255.656 L192.5,255.656 L192.5,235.656" fill="#258a8c" stroke="none"/> +<path d="M192.5,235.656 L192.5,255.656 L193.5,255.656 L193.5,235.656" fill="#258a8c" stroke="none"/> +<path d="M193.5,235.656 L193.5,255.656 L194.5,255.656 L194.5,235.656" fill="#248b8c" stroke="none"/> +<path d="M194.5,235.656 L194.5,255.656 L195.5,255.656 L195.5,235.656" fill="#238c8c" stroke="none"/> +<path d="M195.5,235.656 L195.5,255.656 L196.5,255.656 L196.5,235.656" fill="#238c8c" stroke="none"/> +<path d="M196.5,235.656 L196.5,255.656 L197.5,255.656 L197.5,235.656" fill="#228d8c" stroke="none"/> +<path d="M197.5,235.656 L197.5,255.656 L198.5,255.656 L198.5,235.656" fill="#218e8c" stroke="none"/> +<path d="M198.5,235.656 L198.5,255.656 L199.5,255.656 L199.5,235.656" fill="#218e8c" stroke="none"/> +<path d="M199.5,235.656 L199.5,255.656 L200.5,255.656 L200.5,235.656" fill="#208f8c" stroke="none"/> +<path d="M200.5,235.656 L200.5,255.656 L201.5,255.656 L201.5,235.656" fill="#21908c" stroke="none"/> +<path d="M201.5,235.656 L201.5,255.656 L202.5,255.656 L202.5,235.656" fill="#21908b" stroke="none"/> +<path d="M202.5,235.656 L202.5,255.656 L203.5,255.656 L203.5,235.656" fill="#22918b" stroke="none"/> +<path d="M203.5,235.656 L203.5,255.656 L204.5,255.656 L204.5,235.656" fill="#23928b" stroke="none"/> +<path d="M204.5,235.656 L204.5,255.656 L205.5,255.656 L205.5,235.656" fill="#24928a" stroke="none"/> +<path d="M205.5,235.656 L205.5,255.656 L206.5,255.656 L206.5,235.656" fill="#24938a" stroke="none"/> +<path d="M206.5,235.656 L206.5,255.656 L207.5,255.656 L207.5,235.656" fill="#25948a" stroke="none"/> +<path d="M207.5,235.656 L207.5,255.656 L208.5,255.656 L208.5,235.656" fill="#26948a" stroke="none"/> +<path d="M208.5,235.656 L208.5,255.656 L209.5,255.656 L209.5,235.656" fill="#269589" stroke="none"/> +<path d="M209.5,235.656 L209.5,255.656 L210.5,255.656 L210.5,235.656" fill="#279589" stroke="none"/> +<path d="M210.5,235.656 L210.5,255.656 L211.5,255.656 L211.5,235.656" fill="#289689" stroke="none"/> +<path d="M211.5,235.656 L211.5,255.656 L212.5,255.656 L212.5,235.656" fill="#289788" stroke="none"/> +<path d="M212.5,235.656 L212.5,255.656 L213.5,255.656 L213.5,235.656" fill="#299788" stroke="none"/> +<path d="M213.5,235.656 L213.5,255.656 L214.5,255.656 L214.5,235.656" fill="#2a9888" stroke="none"/> +<path d="M214.5,235.656 L214.5,255.656 L215.5,255.656 L215.5,235.656" fill="#2b9987" stroke="none"/> +<path d="M215.5,235.656 L215.5,255.656 L216.5,255.656 L216.5,235.656" fill="#2b9987" stroke="none"/> +<path d="M216.5,235.656 L216.5,255.656 L217.5,255.656 L217.5,235.656" fill="#2c9a87" stroke="none"/> +<path d="M217.5,235.656 L217.5,255.656 L218.5,255.656 L218.5,235.656" fill="#2d9b86" stroke="none"/> +<path d="M218.5,235.656 L218.5,255.656 L219.5,255.656 L219.5,235.656" fill="#2d9b86" stroke="none"/> +<path d="M219.5,235.656 L219.5,255.656 L220.5,255.656 L220.5,235.656" fill="#2e9c86" stroke="none"/> +<path d="M220.5,235.656 L220.5,255.656 L221.5,255.656 L221.5,235.656" fill="#2f9c85" stroke="none"/> +<path d="M221.5,235.656 L221.5,255.656 L222.5,255.656 L222.5,235.656" fill="#2f9d85" stroke="none"/> +<path d="M222.5,235.656 L222.5,255.656 L223.5,255.656 L223.5,235.656" fill="#309e84" stroke="none"/> +<path d="M223.5,235.656 L223.5,255.656 L224.5,255.656 L224.5,235.656" fill="#319e84" stroke="none"/> +<path d="M224.5,235.656 L224.5,255.656 L225.5,255.656 L225.5,235.656" fill="#319f84" stroke="none"/> +<path d="M225.5,235.656 L225.5,255.656 L226.5,255.656 L226.5,235.656" fill="#32a083" stroke="none"/> +<path d="M226.5,235.656 L226.5,255.656 L227.5,255.656 L227.5,235.656" fill="#33a083" stroke="none"/> +<path d="M227.5,235.656 L227.5,255.656 L228.5,255.656 L228.5,235.656" fill="#33a183" stroke="none"/> +<path d="M228.5,235.656 L228.5,255.656 L229.5,255.656 L229.5,235.656" fill="#34a282" stroke="none"/> +<path d="M229.5,235.656 L229.5,255.656 L230.5,255.656 L230.5,235.656" fill="#35a282" stroke="none"/> +<path d="M230.5,235.656 L230.5,255.656 L231.5,255.656 L231.5,235.656" fill="#35a382" stroke="none"/> +<path d="M231.5,235.656 L231.5,255.656 L232.5,255.656 L232.5,235.656" fill="#36a381" stroke="none"/> +<path d="M232.5,235.656 L232.5,255.656 L233.5,255.656 L233.5,235.656" fill="#37a481" stroke="none"/> +<path d="M233.5,235.656 L233.5,255.656 L234.5,255.656 L234.5,235.656" fill="#37a580" stroke="none"/> +<path d="M234.5,235.656 L234.5,255.656 L235.5,255.656 L235.5,235.656" fill="#38a580" stroke="none"/> +<path d="M235.5,235.656 L235.5,255.656 L236.5,255.656 L236.5,235.656" fill="#39a680" stroke="none"/> +<path d="M236.5,235.656 L236.5,255.656 L237.5,255.656 L237.5,235.656" fill="#39a77f" stroke="none"/> +<path d="M237.5,235.656 L237.5,255.656 L238.5,255.656 L238.5,235.656" fill="#3aa77f" stroke="none"/> +<path d="M238.5,235.656 L238.5,255.656 L239.5,255.656 L239.5,235.656" fill="#3aa87e" stroke="none"/> +<path d="M239.5,235.656 L239.5,255.656 L240.5,255.656 L240.5,235.656" fill="#3ba97e" stroke="none"/> +<path d="M240.5,235.656 L240.5,255.656 L241.5,255.656 L241.5,235.656" fill="#3ca97d" stroke="none"/> +<path d="M241.5,235.656 L241.5,255.656 L242.5,255.656 L242.5,235.656" fill="#3caa7d" stroke="none"/> +<path d="M242.5,235.656 L242.5,255.656 L243.5,255.656 L243.5,235.656" fill="#3daa7d" stroke="none"/> +<path d="M243.5,235.656 L243.5,255.656 L244.5,255.656 L244.5,235.656" fill="#3eab7c" stroke="none"/> +<path d="M244.5,235.656 L244.5,255.656 L245.5,255.656 L245.5,235.656" fill="#3eac7c" stroke="none"/> +<path d="M245.5,235.656 L245.5,255.656 L246.5,255.656 L246.5,235.656" fill="#3fac7b" stroke="none"/> +<path d="M246.5,235.656 L246.5,255.656 L247.5,255.656 L247.5,235.656" fill="#40ad7b" stroke="none"/> +<path d="M247.5,235.656 L247.5,255.656 L248.5,255.656 L248.5,235.656" fill="#40ae7a" stroke="none"/> +<path d="M248.5,235.656 L248.5,255.656 L249.5,255.656 L249.5,235.656" fill="#41ae7a" stroke="none"/> +<path d="M249.5,235.656 L249.5,255.656 L250.5,255.656 L250.5,235.656" fill="#42af79" stroke="none"/> +<path d="M250.5,235.656 L250.5,255.656 L251.5,255.656 L251.5,235.656" fill="#42af79" stroke="none"/> +<path d="M251.5,235.656 L251.5,255.656 L252.5,255.656 L252.5,235.656" fill="#43b078" stroke="none"/> +<path d="M252.5,235.656 L252.5,255.656 L253.5,255.656 L253.5,235.656" fill="#43b178" stroke="none"/> +<path d="M253.5,235.656 L253.5,255.656 L254.5,255.656 L254.5,235.656" fill="#44b178" stroke="none"/> +<path d="M254.5,235.656 L254.5,255.656 L255.5,255.656 L255.5,235.656" fill="#45b277" stroke="none"/> +<path d="M255.5,235.656 L255.5,255.656 L256.5,255.656 L256.5,235.656" fill="#45b377" stroke="none"/> +<path d="M256.5,235.656 L256.5,255.656 L257.5,255.656 L257.5,235.656" fill="#46b376" stroke="none"/> +<path d="M257.5,235.656 L257.5,255.656 L258.5,255.656 L258.5,235.656" fill="#47b476" stroke="none"/> +<path d="M258.5,235.656 L258.5,255.656 L259.5,255.656 L259.5,235.656" fill="#47b575" stroke="none"/> +<path d="M259.5,235.656 L259.5,255.656 L260.5,255.656 L260.5,235.656" fill="#48b575" stroke="none"/> +<path d="M260.5,235.656 L260.5,255.656 L261.5,255.656 L261.5,235.656" fill="#49b674" stroke="none"/> +<path d="M261.5,235.656 L261.5,255.656 L262.5,255.656 L262.5,235.656" fill="#49b673" stroke="none"/> +<path d="M262.5,235.656 L262.5,255.656 L263.5,255.656 L263.5,235.656" fill="#4ab773" stroke="none"/> +<path d="M263.5,235.656 L263.5,255.656 L264.5,255.656 L264.5,235.656" fill="#4bb872" stroke="none"/> +<path d="M264.5,235.656 L264.5,255.656 L265.5,255.656 L265.5,235.656" fill="#4bb872" stroke="none"/> +<path d="M265.5,235.656 L265.5,255.656 L266.5,255.656 L266.5,235.656" fill="#4cb971" stroke="none"/> +<path d="M266.5,235.656 L266.5,255.656 L267.5,255.656 L267.5,235.656" fill="#4cba71" stroke="none"/> +<path d="M267.5,235.656 L267.5,255.656 L268.5,255.656 L268.5,235.656" fill="#4dba70" stroke="none"/> +<path d="M268.5,235.656 L268.5,255.656 L269.5,255.656 L269.5,235.656" fill="#4ebb70" stroke="none"/> +<path d="M269.5,235.656 L269.5,255.656 L270.5,255.656 L270.5,235.656" fill="#4ebb6f" stroke="none"/> +<path d="M270.5,235.656 L270.5,255.656 L271.5,255.656 L271.5,235.656" fill="#4fbc6e" stroke="none"/> +<path d="M271.5,235.656 L271.5,255.656 L272.5,255.656 L272.5,235.656" fill="#50bd6e" stroke="none"/> +<path d="M272.5,235.656 L272.5,255.656 L273.5,255.656 L273.5,235.656" fill="#50bd6d" stroke="none"/> +<path d="M273.5,235.656 L273.5,255.656 L274.5,255.656 L274.5,235.656" fill="#51be6d" stroke="none"/> +<path d="M274.5,235.656 L274.5,255.656 L275.5,255.656 L275.5,235.656" fill="#51bf6c" stroke="none"/> +<path d="M275.5,235.656 L275.5,255.656 L276.5,255.656 L276.5,235.656" fill="#52bf6b" stroke="none"/> +<path d="M276.5,235.656 L276.5,255.656 L277.5,255.656 L277.5,235.656" fill="#53c06b" stroke="none"/> +<path d="M277.5,235.656 L277.5,255.656 L278.5,255.656 L278.5,235.656" fill="#53c06a" stroke="none"/> +<path d="M278.5,235.656 L278.5,255.656 L279.5,255.656 L279.5,235.656" fill="#54c16a" stroke="none"/> +<path d="M279.5,235.656 L279.5,255.656 L280.5,255.656 L280.5,235.656" fill="#55c269" stroke="none"/> +<path d="M280.5,235.656 L280.5,255.656 L281.5,255.656 L281.5,235.656" fill="#55c268" stroke="none"/> +<path d="M281.5,235.656 L281.5,255.656 L282.5,255.656 L282.5,235.656" fill="#56c368" stroke="none"/> +<path d="M282.5,235.656 L282.5,255.656 L283.5,255.656 L283.5,235.656" fill="#57c467" stroke="none"/> +<path d="M283.5,235.656 L283.5,255.656 L284.5,255.656 L284.5,235.656" fill="#57c466" stroke="none"/> +<path d="M284.5,235.656 L284.5,255.656 L285.5,255.656 L285.5,235.656" fill="#58c566" stroke="none"/> +<path d="M285.5,235.656 L285.5,255.656 L286.5,255.656 L286.5,235.656" fill="#58c565" stroke="none"/> +<path d="M286.5,235.656 L286.5,255.656 L287.5,255.656 L287.5,235.656" fill="#59c664" stroke="none"/> +<path d="M287.5,235.656 L287.5,255.656 L288.5,255.656 L288.5,235.656" fill="#5ac763" stroke="none"/> +<path d="M288.5,235.656 L288.5,255.656 L289.5,255.656 L289.5,235.656" fill="#5ac763" stroke="none"/> +<path d="M289.5,235.656 L289.5,255.656 L290.5,255.656 L290.5,235.656" fill="#5bc862" stroke="none"/> +<path d="M290.5,235.656 L290.5,255.656 L291.5,255.656 L291.5,235.656" fill="#5ec862" stroke="none"/> +<path d="M291.5,235.656 L291.5,255.656 L292.5,255.656 L292.5,235.656" fill="#60c961" stroke="none"/> +<path d="M292.5,235.656 L292.5,255.656 L293.5,255.656 L293.5,235.656" fill="#63c961" stroke="none"/> +<path d="M293.5,235.656 L293.5,255.656 L294.5,255.656 L294.5,235.656" fill="#65ca61" stroke="none"/> +<path d="M294.5,235.656 L294.5,255.656 L295.5,255.656 L295.5,235.656" fill="#67ca60" stroke="none"/> +<path d="M295.5,235.656 L295.5,255.656 L296.5,255.656 L296.5,235.656" fill="#6aca60" stroke="none"/> +<path d="M296.5,235.656 L296.5,255.656 L297.5,255.656 L297.5,235.656" fill="#6ccb60" stroke="none"/> +<path d="M297.5,235.656 L297.5,255.656 L298.5,255.656 L298.5,235.656" fill="#6ecb5f" stroke="none"/> +<path d="M298.5,235.656 L298.5,255.656 L299.5,255.656 L299.5,235.656" fill="#70cb5f" stroke="none"/> +<path d="M299.5,235.656 L299.5,255.656 L300.5,255.656 L300.5,235.656" fill="#73cc5f" stroke="none"/> +<path d="M300.5,235.656 L300.5,255.656 L301.5,255.656 L301.5,235.656" fill="#75cc5e" stroke="none"/> +<path d="M301.5,235.656 L301.5,255.656 L302.5,255.656 L302.5,235.656" fill="#77cd5e" stroke="none"/> +<path d="M302.5,235.656 L302.5,255.656 L303.5,255.656 L303.5,235.656" fill="#79cd5e" stroke="none"/> +<path d="M303.5,235.656 L303.5,255.656 L304.5,255.656 L304.5,235.656" fill="#7bcd5d" stroke="none"/> +<path d="M304.5,235.656 L304.5,255.656 L305.5,255.656 L305.5,235.656" fill="#7dce5d" stroke="none"/> +<path d="M305.5,235.656 L305.5,255.656 L306.5,255.656 L306.5,235.656" fill="#7fce5c" stroke="none"/> +<path d="M306.5,235.656 L306.5,255.656 L307.5,255.656 L307.5,235.656" fill="#81cf5c" stroke="none"/> +<path d="M307.5,235.656 L307.5,255.656 L308.5,255.656 L308.5,235.656" fill="#83cf5c" stroke="none"/> +<path d="M308.5,235.656 L308.5,255.656 L309.5,255.656 L309.5,235.656" fill="#85cf5b" stroke="none"/> +<path d="M309.5,235.656 L309.5,255.656 L310.5,255.656 L310.5,235.656" fill="#87d05b" stroke="none"/> +<path d="M310.5,235.656 L310.5,255.656 L311.5,255.656 L311.5,235.656" fill="#89d05b" stroke="none"/> +<path d="M311.5,235.656 L311.5,255.656 L312.5,255.656 L312.5,235.656" fill="#8bd05a" stroke="none"/> +<path d="M312.5,235.656 L312.5,255.656 L313.5,255.656 L313.5,235.656" fill="#8dd15a" stroke="none"/> +<path d="M313.5,235.656 L313.5,255.656 L314.5,255.656 L314.5,235.656" fill="#8fd159" stroke="none"/> +<path d="M314.5,235.656 L314.5,255.656 L315.5,255.656 L315.5,235.656" fill="#91d159" stroke="none"/> +<path d="M315.5,235.656 L315.5,255.656 L316.5,255.656 L316.5,235.656" fill="#93d258" stroke="none"/> +<path d="M316.5,235.656 L316.5,255.656 L317.5,255.656 L317.5,235.656" fill="#95d258" stroke="none"/> +<path d="M317.5,235.656 L317.5,255.656 L318.5,255.656 L318.5,235.656" fill="#96d358" stroke="none"/> +<path d="M318.5,235.656 L318.5,255.656 L319.5,255.656 L319.5,235.656" fill="#98d357" stroke="none"/> +<path d="M319.5,235.656 L319.5,255.656 L320.5,255.656 L320.5,235.656" fill="#9ad357" stroke="none"/> +<path d="M320.5,235.656 L320.5,255.656 L321.5,255.656 L321.5,235.656" fill="#9cd456" stroke="none"/> +<path d="M321.5,235.656 L321.5,255.656 L322.5,255.656 L322.5,235.656" fill="#9ed456" stroke="none"/> +<path d="M322.5,235.656 L322.5,255.656 L323.5,255.656 L323.5,235.656" fill="#a0d455" stroke="none"/> +<path d="M323.5,235.656 L323.5,255.656 L324.5,255.656 L324.5,235.656" fill="#a1d555" stroke="none"/> +<path d="M324.5,235.656 L324.5,255.656 L325.5,255.656 L325.5,235.656" fill="#a3d554" stroke="none"/> +<path d="M325.5,235.656 L325.5,255.656 L326.5,255.656 L326.5,235.656" fill="#a5d554" stroke="none"/> +<path d="M326.5,235.656 L326.5,255.656 L327.5,255.656 L327.5,235.656" fill="#a7d653" stroke="none"/> +<path d="M327.5,235.656 L327.5,255.656 L328.5,255.656 L328.5,235.656" fill="#a8d653" stroke="none"/> +<path d="M328.5,235.656 L328.5,255.656 L329.5,255.656 L329.5,235.656" fill="#aad752" stroke="none"/> +<path d="M329.5,235.656 L329.5,255.656 L330.5,255.656 L330.5,235.656" fill="#acd752" stroke="none"/> +<path d="M330.5,235.656 L330.5,255.656 L331.5,255.656 L331.5,235.656" fill="#aed751" stroke="none"/> +<path d="M331.5,235.656 L331.5,255.656 L332.5,255.656 L332.5,235.656" fill="#afd851" stroke="none"/> +<path d="M332.5,235.656 L332.5,255.656 L333.5,255.656 L333.5,235.656" fill="#b1d850" stroke="none"/> +<path d="M333.5,235.656 L333.5,255.656 L334.5,255.656 L334.5,235.656" fill="#b3d84f" stroke="none"/> +<path d="M334.5,235.656 L334.5,255.656 L335.5,255.656 L335.5,235.656" fill="#b4d94f" stroke="none"/> +<path d="M335.5,235.656 L335.5,255.656 L336.5,255.656 L336.5,235.656" fill="#b6d94e" stroke="none"/> +<path d="M336.5,235.656 L336.5,255.656 L337.5,255.656 L337.5,235.656" fill="#b8d94e" stroke="none"/> +<path d="M337.5,235.656 L337.5,255.656 L338.5,255.656 L338.5,235.656" fill="#bada4d" stroke="none"/> +<path d="M338.5,235.656 L338.5,255.656 L339.5,255.656 L339.5,235.656" fill="#bbda4d" stroke="none"/> +<path d="M339.5,235.656 L339.5,255.656 L340.5,255.656 L340.5,235.656" fill="#bdda4c" stroke="none"/> +<path d="M340.5,235.656 L340.5,255.656 L341.5,255.656 L341.5,235.656" fill="#bfdb4b" stroke="none"/> +<path d="M341.5,235.656 L341.5,255.656 L342.5,255.656 L342.5,235.656" fill="#c0db4b" stroke="none"/> +<path d="M342.5,235.656 L342.5,255.656 L343.5,255.656 L343.5,235.656" fill="#c2db4a" stroke="none"/> +<path d="M343.5,235.656 L343.5,255.656 L344.5,255.656 L344.5,235.656" fill="#c4dc49" stroke="none"/> +<path d="M344.5,235.656 L344.5,255.656 L345.5,255.656 L345.5,235.656" fill="#c5dc49" stroke="none"/> +<path d="M345.5,235.656 L345.5,255.656 L346.5,255.656 L346.5,235.656" fill="#c7dc48" stroke="none"/> +<path d="M346.5,235.656 L346.5,255.656 L347.5,255.656 L347.5,235.656" fill="#c9dd47" stroke="none"/> +<path d="M347.5,235.656 L347.5,255.656 L348.5,255.656 L348.5,235.656" fill="#cadd47" stroke="none"/> +<path d="M348.5,235.656 L348.5,255.656 L349.5,255.656 L349.5,235.656" fill="#ccdd46" stroke="none"/> +<path d="M349.5,235.656 L349.5,255.656 L350.5,255.656 L350.5,235.656" fill="#cdde45" stroke="none"/> +<path d="M350.5,235.656 L350.5,255.656 L351.5,255.656 L351.5,235.656" fill="#cfde44" stroke="none"/> +<path d="M351.5,235.656 L351.5,255.656 L352.5,255.656 L352.5,235.656" fill="#d1de44" stroke="none"/> +<path d="M352.5,235.656 L352.5,255.656 L353.5,255.656 L353.5,235.656" fill="#d2df43" stroke="none"/> +<path d="M353.5,235.656 L353.5,255.656 L354.5,255.656 L354.5,235.656" fill="#d4df42" stroke="none"/> +<path d="M354.5,235.656 L354.5,255.656 L355.5,255.656 L355.5,235.656" fill="#d6df41" stroke="none"/> +<path d="M355.5,235.656 L355.5,255.656 L356.5,255.656 L356.5,235.656" fill="#d7e040" stroke="none"/> +<path d="M356.5,235.656 L356.5,255.656 L357.5,255.656 L357.5,235.656" fill="#d9e040" stroke="none"/> +<path d="M357.5,235.656 L357.5,255.656 L358.5,255.656 L358.5,235.656" fill="#dae03f" stroke="none"/> +<path d="M358.5,235.656 L358.5,255.656 L359.5,255.656 L359.5,235.656" fill="#dce13e" stroke="none"/> +<path d="M359.5,235.656 L359.5,255.656 L360.5,255.656 L360.5,235.656" fill="#dee13d" stroke="none"/> +<path d="M360.5,235.656 L360.5,255.656 L361.5,255.656 L361.5,235.656" fill="#dfe13c" stroke="none"/> +<path d="M361.5,235.656 L361.5,255.656 L362.5,255.656 L362.5,235.656" fill="#e1e13b" stroke="none"/> +<path d="M362.5,235.656 L362.5,255.656 L363.5,255.656 L363.5,235.656" fill="#e2e23a" stroke="none"/> +<path d="M363.5,235.656 L363.5,255.656 L364.5,255.656 L364.5,235.656" fill="#e4e239" stroke="none"/> +<path d="M364.5,235.656 L364.5,255.656 L365.5,255.656 L365.5,235.656" fill="#e6e238" stroke="none"/> +<path d="M365.5,235.656 L365.5,255.656 L366.5,255.656 L366.5,235.656" fill="#e7e337" stroke="none"/> +<path d="M366.5,235.656 L366.5,255.656 L367.5,255.656 L367.5,235.656" fill="#e9e336" stroke="none"/> +<path d="M367.5,235.656 L367.5,255.656 L368.5,255.656 L368.5,235.656" fill="#eae335" stroke="none"/> +<path d="M368.5,235.656 L368.5,255.656 L369.5,255.656 L369.5,235.656" fill="#ece434" stroke="none"/> +<path d="M369.5,235.656 L369.5,255.656 L370.5,255.656 L370.5,235.656" fill="#ede433" stroke="none"/> +<path d="M370.5,235.656 L370.5,255.656 L371.5,255.656 L371.5,235.656" fill="#efe431" stroke="none"/> +<path d="M371.5,235.656 L371.5,255.656 L372.5,255.656 L372.5,235.656" fill="#f1e530" stroke="none"/> +<path d="M372.5,235.656 L372.5,255.656 L373.5,255.656 L373.5,235.656" fill="#f2e52f" stroke="none"/> +<path d="M373.5,235.656 L373.5,255.656 L374.5,255.656 L374.5,235.656" fill="#f4e52d" stroke="none"/> +<path d="M374.5,235.656 L374.5,255.656 L375.5,255.656 L375.5,235.656" fill="#f5e62c" stroke="none"/> +<path d="M375.5,235.656 L375.5,255.656 L376.5,255.656 L376.5,235.656" fill="#f7e62b" stroke="none"/> +<path d="M376.5,235.656 L376.5,255.656 L377.5,255.656 L377.5,235.656" fill="#f8e629" stroke="none"/> +<path d="M377.5,235.656 L377.5,255.656 L378.5,255.656 L378.5,235.656" fill="#fae627" stroke="none"/> +<path d="M378.5,235.656 L378.5,255.656 L379.5,255.656 L379.5,235.656" fill="#fbe726" stroke="none"/> +<path d="M379.5,235.656 L379.5,255.656 L380,255.656 L380,235.656" fill="#fde724" stroke="none"/> +<path d="M20,235.656 L380,235.656 L380,255.656 L20,255.656 z" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M39.962124,255.656 L39.962124,259.656" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M-5.6280003,8.532 Q-5.6280003,9.576,-5.7840004,10.392 Q-5.94,11.208,-6.282,11.778 Q-6.624,12.348,-7.17,12.648 Q-7.716,12.948,-8.484,12.948 Q-9.444,12.948,-10.074,12.42 Q-10.704,11.892,-11.01,10.902 Q-11.316,9.912,-11.316,8.532 Q-11.316,7.14,-11.034,6.156 Q-10.752001,5.172,-10.128,4.6499996 Q-9.504,4.1280003,-8.484,4.1280003 Q-7.524,4.1280003,-6.888,4.6499996 Q-6.2520003,5.172,-5.94,6.156 Q-5.6280003,7.14,-5.6280003,8.532 z M-10.26,8.532 Q-10.26,9.708,-10.086,10.488 Q-9.912001,11.268,-9.522,11.658 Q-9.132,12.048,-8.484,12.048 Q-7.8360004,12.048,-7.446,11.664 Q-7.056,11.28,-6.8760004,10.4939995 Q-6.696,9.708,-6.696,8.532 Q-6.696,7.356,-6.8760004,6.582 Q-7.056,5.808,-7.446,5.418 Q-7.8360004,5.028,-8.484,5.028 Q-9.132,5.028,-9.522,5.418 Q-9.912001,5.808,-10.086,6.582 Q-10.26,7.356,-10.26,8.532 z M-4.1760006,12.18 Q-4.1760006,11.736,-3.9600005,11.556 Q-3.7440004,11.376,-3.4440005,11.376 Q-3.1320004,11.376,-2.9100003,11.556 Q-2.6880004,11.736,-2.6880004,12.18 Q-2.6880004,12.612,-2.9100003,12.804 Q-3.1320004,12.996,-3.4440005,12.996 Q-3.7440004,12.996,-3.9600005,12.804 Q-4.1760006,12.612,-4.1760006,12.18 z M2.4359999,12.828 L1.4039996,12.828 L1.4039996,6.84 Q1.4039996,6.492,1.4099996,6.252 Q1.4159997,6.012,1.4279997,5.802 Q1.4399996,5.592,1.4519997,5.364 Q1.2599998,5.556,1.1039996,5.688 Q0.9479997,5.82,0.7079997,6.024 L-0.20400035,6.768 L-0.7560004,6.06 L1.5599997,4.26 L2.4359999,4.26 L2.4359999,12.828 z M11.316,8.532 Q11.316,9.576,11.16,10.392 Q11.004,11.208,10.662,11.778 Q10.32,12.348,9.774,12.648 Q9.228,12.948,8.459999,12.948 Q7.4999995,12.948,6.8699994,12.42 Q6.24,11.892,5.9339995,10.902 Q5.6279993,9.912,5.6279993,8.532 Q5.6279993,7.14,5.9099994,6.156 Q6.1919994,5.172,6.8159995,4.6499996 Q7.4399996,4.1280003,8.459999,4.1280003 Q9.42,4.1280003,10.056,4.6499996 Q10.691999,5.172,11.004,6.156 Q11.316,7.14,11.316,8.532 z M6.6839995,8.532 Q6.6839995,9.708,6.8579993,10.488 Q7.0319996,11.268,7.4219995,11.658 Q7.8119993,12.048,8.459999,12.048 Q9.108,12.048,9.497999,11.664 Q9.888,11.28,10.067999,10.4939995 Q10.247999,9.708,10.247999,8.532 Q10.247999,7.356,10.067999,6.582 Q9.888,5.808,9.497999,5.418 Q9.108,5.028,8.459999,5.028 Q7.8119993,5.028,7.4219995,5.418 Q7.0319996,5.808,6.8579993,6.582 Q6.6839995,7.356,6.6839995,8.532 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 39.962124 263.656)"/> +<path d="M79.42882,255.656 L79.42882,259.656" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M-5.6280003,8.532 Q-5.6280003,9.576,-5.7840004,10.392 Q-5.94,11.208,-6.282,11.778 Q-6.624,12.348,-7.17,12.648 Q-7.716,12.948,-8.484,12.948 Q-9.444,12.948,-10.074,12.42 Q-10.704,11.892,-11.01,10.902 Q-11.316,9.912,-11.316,8.532 Q-11.316,7.14,-11.034,6.156 Q-10.752001,5.172,-10.128,4.6499996 Q-9.504,4.1280003,-8.484,4.1280003 Q-7.524,4.1280003,-6.888,4.6499996 Q-6.2520003,5.172,-5.94,6.156 Q-5.6280003,7.14,-5.6280003,8.532 z M-10.26,8.532 Q-10.26,9.708,-10.086,10.488 Q-9.912001,11.268,-9.522,11.658 Q-9.132,12.048,-8.484,12.048 Q-7.8360004,12.048,-7.446,11.664 Q-7.056,11.28,-6.8760004,10.4939995 Q-6.696,9.708,-6.696,8.532 Q-6.696,7.356,-6.8760004,6.582 Q-7.056,5.808,-7.446,5.418 Q-7.8360004,5.028,-8.484,5.028 Q-9.132,5.028,-9.522,5.418 Q-9.912001,5.808,-10.086,6.582 Q-10.26,7.356,-10.26,8.532 z M-4.1760006,12.18 Q-4.1760006,11.736,-3.9600005,11.556 Q-3.7440004,11.376,-3.4440005,11.376 Q-3.1320004,11.376,-2.9100003,11.556 Q-2.6880004,11.736,-2.6880004,12.18 Q-2.6880004,12.612,-2.9100003,12.804 Q-3.1320004,12.996,-3.4440005,12.996 Q-3.7440004,12.996,-3.9600005,12.804 Q-4.1760006,12.612,-4.1760006,12.18 z M4.416,12.828 L-1.2480004,12.828 L-1.2480004,11.952 L0.9959996,9.684 Q1.6439996,9.036,2.0879996,8.532 Q2.5319996,8.028,2.7599998,7.542 Q2.988,7.056,2.988,6.48 Q2.988,5.772,2.5679998,5.406 Q2.1479998,5.04,1.4759996,5.04 Q0.85199976,5.04,0.37799954,5.256 Q-0.096000314,5.472,-0.5880003,5.856 L-1.1520004,5.148 Q-0.81600034,4.86,-0.4140004,4.632 Q-0.012000322,4.4040003,0.46199965,4.2720003 Q0.93599963,4.1400003,1.4759996,4.1400003 Q2.2799997,4.1400003,2.8559995,4.4160004 Q3.4319997,4.6920004,3.7499995,5.202 Q4.068,5.712,4.068,6.42 Q4.068,7.092,3.7919998,7.68 Q3.5159998,8.268,3.0239997,8.838 Q2.5319996,9.408,1.8719997,10.056 L0.083999634,11.82 L0.083999634,11.868 L4.416,11.868 L4.416,12.828 z M11.316,8.532 Q11.316,9.576,11.16,10.392 Q11.004,11.208,10.662,11.778 Q10.32,12.348,9.774,12.648 Q9.228,12.948,8.459999,12.948 Q7.4999995,12.948,6.8699994,12.42 Q6.24,11.892,5.9339995,10.902 Q5.6279993,9.912,5.6279993,8.532 Q5.6279993,7.14,5.9099994,6.156 Q6.1919994,5.172,6.8159995,4.6499996 Q7.4399996,4.1280003,8.459999,4.1280003 Q9.42,4.1280003,10.056,4.6499996 Q10.691999,5.172,11.004,6.156 Q11.316,7.14,11.316,8.532 z M6.6839995,8.532 Q6.6839995,9.708,6.8579993,10.488 Q7.0319996,11.268,7.4219995,11.658 Q7.8119993,12.048,8.459999,12.048 Q9.108,12.048,9.497999,11.664 Q9.888,11.28,10.067999,10.4939995 Q10.247999,9.708,10.247999,8.532 Q10.247999,7.356,10.067999,6.582 Q9.888,5.808,9.497999,5.418 Q9.108,5.028,8.459999,5.028 Q7.8119993,5.028,7.4219995,5.418 Q7.0319996,5.808,6.8579993,6.582 Q6.6839995,7.356,6.6839995,8.532 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 79.42882 263.656)"/> +<path d="M118.895515,255.656 L118.895515,259.656" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M-5.6280003,8.532 Q-5.6280003,9.576,-5.7840004,10.392 Q-5.94,11.208,-6.282,11.778 Q-6.624,12.348,-7.17,12.648 Q-7.716,12.948,-8.484,12.948 Q-9.444,12.948,-10.074,12.42 Q-10.704,11.892,-11.01,10.902 Q-11.316,9.912,-11.316,8.532 Q-11.316,7.14,-11.034,6.156 Q-10.752001,5.172,-10.128,4.6499996 Q-9.504,4.1280003,-8.484,4.1280003 Q-7.524,4.1280003,-6.888,4.6499996 Q-6.2520003,5.172,-5.94,6.156 Q-5.6280003,7.14,-5.6280003,8.532 z M-10.26,8.532 Q-10.26,9.708,-10.086,10.488 Q-9.912001,11.268,-9.522,11.658 Q-9.132,12.048,-8.484,12.048 Q-7.8360004,12.048,-7.446,11.664 Q-7.056,11.28,-6.8760004,10.4939995 Q-6.696,9.708,-6.696,8.532 Q-6.696,7.356,-6.8760004,6.582 Q-7.056,5.808,-7.446,5.418 Q-7.8360004,5.028,-8.484,5.028 Q-9.132,5.028,-9.522,5.418 Q-9.912001,5.808,-10.086,6.582 Q-10.26,7.356,-10.26,8.532 z M-4.1760006,12.18 Q-4.1760006,11.736,-3.9600005,11.556 Q-3.7440004,11.376,-3.4440005,11.376 Q-3.1320004,11.376,-2.9100003,11.556 Q-2.6880004,11.736,-2.6880004,12.18 Q-2.6880004,12.612,-2.9100003,12.804 Q-3.1320004,12.996,-3.4440005,12.996 Q-3.7440004,12.996,-3.9600005,12.804 Q-4.1760006,12.612,-4.1760006,12.18 z M4.0919995,6.264 Q4.0919995,6.84,3.876,7.26 Q3.6599998,7.68,3.258,7.9440002 Q2.8559995,8.208,2.3159995,8.316 L2.3159995,8.364 Q3.3479996,8.484,3.8519998,9.012 Q4.3559995,9.54,4.3559995,10.392 Q4.3559995,11.136,4.008,11.718 Q3.6599998,12.3,2.9339995,12.624001 Q2.2079997,12.948,1.0679996,12.948 Q0.39599967,12.948,-0.1800003,12.846 Q-0.7560004,12.744,-1.2840004,12.4800005 L-1.2840004,11.496 Q-0.7440003,11.76,-0.12000036,11.91 Q0.5039997,12.06,1.0799997,12.06 Q2.2319999,12.06,2.7419996,11.61 Q3.2519999,11.16,3.2519999,10.368 Q3.2519999,9.828,2.9699998,9.498 Q2.6879997,9.168,2.1479998,9.012 Q1.6079996,8.856,0.85199976,8.856 L0.023999691,8.856 L0.023999691,7.956 L0.8639996,7.956 Q1.5719998,7.956,2.0459998,7.752 Q2.5199995,7.548,2.7659998,7.182 Q3.0119996,6.816,3.0119996,6.336 Q3.0119996,5.712,2.5919995,5.37 Q2.1719997,5.028,1.4519997,5.028 Q0.9959996,5.028,0.6239996,5.118 Q0.25199962,5.208,-0.06600034,5.37 Q-0.3840003,5.532,-0.7080003,5.748 L-1.2360003,5.028 Q-0.7800003,4.668,-0.102000356,4.4040003 Q0.57599974,4.1400003,1.4399996,4.1400003 Q2.7839994,4.1400003,3.4379997,4.74 Q4.0919995,5.34,4.0919995,6.264 z M11.316,8.532 Q11.316,9.576,11.16,10.392 Q11.004,11.208,10.662,11.778 Q10.32,12.348,9.774,12.648 Q9.228,12.948,8.459999,12.948 Q7.4999995,12.948,6.8699994,12.42 Q6.24,11.892,5.9339995,10.902 Q5.6279993,9.912,5.6279993,8.532 Q5.6279993,7.14,5.9099994,6.156 Q6.1919994,5.172,6.8159995,4.6499996 Q7.4399996,4.1280003,8.459999,4.1280003 Q9.42,4.1280003,10.056,4.6499996 Q10.691999,5.172,11.004,6.156 Q11.316,7.14,11.316,8.532 z M6.6839995,8.532 Q6.6839995,9.708,6.8579993,10.488 Q7.0319996,11.268,7.4219995,11.658 Q7.8119993,12.048,8.459999,12.048 Q9.108,12.048,9.497999,11.664 Q9.888,11.28,10.067999,10.4939995 Q10.247999,9.708,10.247999,8.532 Q10.247999,7.356,10.067999,6.582 Q9.888,5.808,9.497999,5.418 Q9.108,5.028,8.459999,5.028 Q7.8119993,5.028,7.4219995,5.418 Q7.0319996,5.808,6.8579993,6.582 Q6.6839995,7.356,6.6839995,8.532 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 118.895515 263.656)"/> +<path d="M158.3622,255.656 L158.3622,259.656" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M-5.6280003,8.532 Q-5.6280003,9.576,-5.7840004,10.392 Q-5.94,11.208,-6.282,11.778 Q-6.624,12.348,-7.17,12.648 Q-7.716,12.948,-8.484,12.948 Q-9.444,12.948,-10.074,12.42 Q-10.704,11.892,-11.01,10.902 Q-11.316,9.912,-11.316,8.532 Q-11.316,7.14,-11.034,6.156 Q-10.752001,5.172,-10.128,4.6499996 Q-9.504,4.1280003,-8.484,4.1280003 Q-7.524,4.1280003,-6.888,4.6499996 Q-6.2520003,5.172,-5.94,6.156 Q-5.6280003,7.14,-5.6280003,8.532 z M-10.26,8.532 Q-10.26,9.708,-10.086,10.488 Q-9.912001,11.268,-9.522,11.658 Q-9.132,12.048,-8.484,12.048 Q-7.8360004,12.048,-7.446,11.664 Q-7.056,11.28,-6.8760004,10.4939995 Q-6.696,9.708,-6.696,8.532 Q-6.696,7.356,-6.8760004,6.582 Q-7.056,5.808,-7.446,5.418 Q-7.8360004,5.028,-8.484,5.028 Q-9.132,5.028,-9.522,5.418 Q-9.912001,5.808,-10.086,6.582 Q-10.26,7.356,-10.26,8.532 z M-4.1760006,12.18 Q-4.1760006,11.736,-3.9600005,11.556 Q-3.7440004,11.376,-3.4440005,11.376 Q-3.1320004,11.376,-2.9100003,11.556 Q-2.6880004,11.736,-2.6880004,12.18 Q-2.6880004,12.612,-2.9100003,12.804 Q-3.1320004,12.996,-3.4440005,12.996 Q-3.7440004,12.996,-3.9600005,12.804 Q-4.1760006,12.612,-4.1760006,12.18 z M4.7999997,10.884 L3.5519996,10.884 L3.5519996,12.828 L2.5319996,12.828 L2.5319996,10.884 L-1.5720004,10.884 L-1.5720004,9.984 L2.4599996,4.212 L3.5519996,4.212 L3.5519996,9.936 L4.7999997,9.936 L4.7999997,10.884 z M2.5319996,7.236 Q2.5319996,6.924,2.5379996,6.666 Q2.5439997,6.408,2.5559998,6.18 Q2.5679998,5.952,2.574,5.742 Q2.5799994,5.532,2.5919995,5.34 L2.5439997,5.34 Q2.4479995,5.568,2.304,5.832 Q2.1599996,6.096,2.0279996,6.276 L-0.5400003,9.936 L2.5319996,9.936 L2.5319996,7.236 z M11.316,8.532 Q11.316,9.576,11.16,10.392 Q11.004,11.208,10.662,11.778 Q10.32,12.348,9.774,12.648 Q9.228,12.948,8.459999,12.948 Q7.4999995,12.948,6.8699994,12.42 Q6.24,11.892,5.9339995,10.902 Q5.6279993,9.912,5.6279993,8.532 Q5.6279993,7.14,5.9099994,6.156 Q6.1919994,5.172,6.8159995,4.6499996 Q7.4399996,4.1280003,8.459999,4.1280003 Q9.42,4.1280003,10.056,4.6499996 Q10.691999,5.172,11.004,6.156 Q11.316,7.14,11.316,8.532 z M6.6839995,8.532 Q6.6839995,9.708,6.8579993,10.488 Q7.0319996,11.268,7.4219995,11.658 Q7.8119993,12.048,8.459999,12.048 Q9.108,12.048,9.497999,11.664 Q9.888,11.28,10.067999,10.4939995 Q10.247999,9.708,10.247999,8.532 Q10.247999,7.356,10.067999,6.582 Q9.888,5.808,9.497999,5.418 Q9.108,5.028,8.459999,5.028 Q7.8119993,5.028,7.4219995,5.418 Q7.0319996,5.808,6.8579993,6.582 Q6.6839995,7.356,6.6839995,8.532 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 158.3622 263.656)"/> +<path d="M197.8289,255.656 L197.8289,259.656" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M-5.6280003,8.532 Q-5.6280003,9.576,-5.7840004,10.392 Q-5.94,11.208,-6.282,11.778 Q-6.624,12.348,-7.17,12.648 Q-7.716,12.948,-8.484,12.948 Q-9.444,12.948,-10.074,12.42 Q-10.704,11.892,-11.01,10.902 Q-11.316,9.912,-11.316,8.532 Q-11.316,7.14,-11.034,6.156 Q-10.752001,5.172,-10.128,4.6499996 Q-9.504,4.1280003,-8.484,4.1280003 Q-7.524,4.1280003,-6.888,4.6499996 Q-6.2520003,5.172,-5.94,6.156 Q-5.6280003,7.14,-5.6280003,8.532 z M-10.26,8.532 Q-10.26,9.708,-10.086,10.488 Q-9.912001,11.268,-9.522,11.658 Q-9.132,12.048,-8.484,12.048 Q-7.8360004,12.048,-7.446,11.664 Q-7.056,11.28,-6.8760004,10.4939995 Q-6.696,9.708,-6.696,8.532 Q-6.696,7.356,-6.8760004,6.582 Q-7.056,5.808,-7.446,5.418 Q-7.8360004,5.028,-8.484,5.028 Q-9.132,5.028,-9.522,5.418 Q-9.912001,5.808,-10.086,6.582 Q-10.26,7.356,-10.26,8.532 z M-4.1760006,12.18 Q-4.1760006,11.736,-3.9600005,11.556 Q-3.7440004,11.376,-3.4440005,11.376 Q-3.1320004,11.376,-2.9100003,11.556 Q-2.6880004,11.736,-2.6880004,12.18 Q-2.6880004,12.612,-2.9100003,12.804 Q-3.1320004,12.996,-3.4440005,12.996 Q-3.7440004,12.996,-3.9600005,12.804 Q-4.1760006,12.612,-4.1760006,12.18 z M1.4759996,7.572 Q2.3519998,7.572,2.9999995,7.872 Q3.6479998,8.172,4.002,8.73 Q4.3559995,9.288,4.3559995,10.092 Q4.3559995,10.98,3.9719996,11.622 Q3.5879998,12.264,2.8739996,12.606 Q2.1599996,12.948,1.1519997,12.948 Q0.49199963,12.948,-0.09000039,12.828 Q-0.6720004,12.708,-1.0680003,12.4800005 L-1.0680003,11.484 Q-0.6360004,11.748,-0.018000364,11.898 Q0.59999967,12.048,1.1639996,12.048 Q1.7999997,12.048,2.2739997,11.85 Q2.7479997,11.652,3.0119996,11.238 Q3.2759995,10.824,3.2759995,10.2 Q3.2759995,9.360001,2.7599998,8.91 Q2.2439995,8.46,1.1279998,8.46 Q0.7919996,8.46,0.35999966,8.52 Q-0.072000384,8.58,-0.33600032,8.639999 L-0.8640003,8.304 L-0.5400003,4.26 L3.7559996,4.26 L3.7559996,5.22 L0.35999966,5.22 L0.15599966,7.704 Q0.35999966,7.668,0.7079997,7.62 Q1.0559998,7.572,1.4759996,7.572 z M11.316,8.532 Q11.316,9.576,11.16,10.392 Q11.004,11.208,10.662,11.778 Q10.32,12.348,9.774,12.648 Q9.228,12.948,8.459999,12.948 Q7.4999995,12.948,6.8699994,12.42 Q6.24,11.892,5.9339995,10.902 Q5.6279993,9.912,5.6279993,8.532 Q5.6279993,7.14,5.9099994,6.156 Q6.1919994,5.172,6.8159995,4.6499996 Q7.4399996,4.1280003,8.459999,4.1280003 Q9.42,4.1280003,10.056,4.6499996 Q10.691999,5.172,11.004,6.156 Q11.316,7.14,11.316,8.532 z M6.6839995,8.532 Q6.6839995,9.708,6.8579993,10.488 Q7.0319996,11.268,7.4219995,11.658 Q7.8119993,12.048,8.459999,12.048 Q9.108,12.048,9.497999,11.664 Q9.888,11.28,10.067999,10.4939995 Q10.247999,9.708,10.247999,8.532 Q10.247999,7.356,10.067999,6.582 Q9.888,5.808,9.497999,5.418 Q9.108,5.028,8.459999,5.028 Q7.8119993,5.028,7.4219995,5.418 Q7.0319996,5.808,6.8579993,6.582 Q6.6839995,7.356,6.6839995,8.532 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 197.8289 263.656)"/> +<path d="M237.29561,255.656 L237.29561,259.656" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M-5.6280003,8.532 Q-5.6280003,9.576,-5.7840004,10.392 Q-5.94,11.208,-6.282,11.778 Q-6.624,12.348,-7.17,12.648 Q-7.716,12.948,-8.484,12.948 Q-9.444,12.948,-10.074,12.42 Q-10.704,11.892,-11.01,10.902 Q-11.316,9.912,-11.316,8.532 Q-11.316,7.14,-11.034,6.156 Q-10.752001,5.172,-10.128,4.6499996 Q-9.504,4.1280003,-8.484,4.1280003 Q-7.524,4.1280003,-6.888,4.6499996 Q-6.2520003,5.172,-5.94,6.156 Q-5.6280003,7.14,-5.6280003,8.532 z M-10.26,8.532 Q-10.26,9.708,-10.086,10.488 Q-9.912001,11.268,-9.522,11.658 Q-9.132,12.048,-8.484,12.048 Q-7.8360004,12.048,-7.446,11.664 Q-7.056,11.28,-6.8760004,10.4939995 Q-6.696,9.708,-6.696,8.532 Q-6.696,7.356,-6.8760004,6.582 Q-7.056,5.808,-7.446,5.418 Q-7.8360004,5.028,-8.484,5.028 Q-9.132,5.028,-9.522,5.418 Q-9.912001,5.808,-10.086,6.582 Q-10.26,7.356,-10.26,8.532 z M-4.1760006,12.18 Q-4.1760006,11.736,-3.9600005,11.556 Q-3.7440004,11.376,-3.4440005,11.376 Q-3.1320004,11.376,-2.9100003,11.556 Q-2.6880004,11.736,-2.6880004,12.18 Q-2.6880004,12.612,-2.9100003,12.804 Q-3.1320004,12.996,-3.4440005,12.996 Q-3.7440004,12.996,-3.9600005,12.804 Q-4.1760006,12.612,-4.1760006,12.18 z M-1.1640003,9.168 Q-1.1640003,8.424,-1.0620003,7.704 Q-0.96000034,6.984,-0.7080003,6.342 Q-0.45600033,5.7,-0.012000322,5.202 Q0.43199968,4.7040005,1.1099997,4.422 Q1.7879996,4.1400003,2.7599998,4.1400003 Q3.0119996,4.1400003,3.3179998,4.1639996 Q3.6239996,4.1879997,3.8159995,4.248 L3.8159995,5.148 Q3.6,5.076,3.33,5.04 Q3.0599995,5.004,2.7839994,5.004 Q1.9559996,5.004,1.4039996,5.28 Q0.85199976,5.556,0.5339997,6.036 Q0.2159996,6.516,0.07199967,7.14 Q-0.072000384,7.764,-0.1080004,8.472 L-0.03600037,8.472 Q0.1439997,8.184,0.4199996,7.956 Q0.6959996,7.728,1.0859997,7.596 Q1.4759996,7.464,1.9919996,7.464 Q2.7359996,7.464,3.2939997,7.77 Q3.8519998,8.076,4.1639996,8.658 Q4.476,9.24,4.476,10.068 Q4.476,10.956,4.14,11.604 Q3.804,12.252,3.1979995,12.6 Q2.5919995,12.948,1.7519996,12.948 Q1.1399996,12.948,0.61199975,12.72 Q0.083999634,12.492,-0.31800032,12.024 Q-0.7200004,11.556,-0.9420003,10.842 Q-1.1640003,10.128,-1.1640003,9.168 z M1.7399998,12.06 Q2.4959998,12.06,2.9639997,11.574 Q3.4319997,11.088,3.4319997,10.068 Q3.4319997,9.252,3.0179996,8.771999 Q2.6039996,8.292,1.7759998,8.292 Q1.2119997,8.292,0.7919996,8.526 Q0.37199974,8.76,0.13799965,9.12 Q-0.096000314,9.48,-0.096000314,9.864 Q-0.096000314,10.26,0.017999649,10.644 Q0.13199961,11.028,0.3659997,11.352 Q0.59999967,11.676001,0.9419997,11.868 Q1.2839997,12.06,1.7399998,12.06 z M11.316,8.532 Q11.316,9.576,11.16,10.392 Q11.004,11.208,10.662,11.778 Q10.32,12.348,9.774,12.648 Q9.228,12.948,8.459999,12.948 Q7.4999995,12.948,6.8699994,12.42 Q6.24,11.892,5.9339995,10.902 Q5.6279993,9.912,5.6279993,8.532 Q5.6279993,7.14,5.9099994,6.156 Q6.1919994,5.172,6.8159995,4.6499996 Q7.4399996,4.1280003,8.459999,4.1280003 Q9.42,4.1280003,10.056,4.6499996 Q10.691999,5.172,11.004,6.156 Q11.316,7.14,11.316,8.532 z M6.6839995,8.532 Q6.6839995,9.708,6.8579993,10.488 Q7.0319996,11.268,7.4219995,11.658 Q7.8119993,12.048,8.459999,12.048 Q9.108,12.048,9.497999,11.664 Q9.888,11.28,10.067999,10.4939995 Q10.247999,9.708,10.247999,8.532 Q10.247999,7.356,10.067999,6.582 Q9.888,5.808,9.497999,5.418 Q9.108,5.028,8.459999,5.028 Q7.8119993,5.028,7.4219995,5.418 Q7.0319996,5.808,6.8579993,6.582 Q6.6839995,7.356,6.6839995,8.532 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 237.29561 263.656)"/> +<path d="M276.7623,255.656 L276.7623,259.656" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M-5.6280003,8.532 Q-5.6280003,9.576,-5.7840004,10.392 Q-5.94,11.208,-6.282,11.778 Q-6.624,12.348,-7.17,12.648 Q-7.716,12.948,-8.484,12.948 Q-9.444,12.948,-10.074,12.42 Q-10.704,11.892,-11.01,10.902 Q-11.316,9.912,-11.316,8.532 Q-11.316,7.14,-11.034,6.156 Q-10.752001,5.172,-10.128,4.6499996 Q-9.504,4.1280003,-8.484,4.1280003 Q-7.524,4.1280003,-6.888,4.6499996 Q-6.2520003,5.172,-5.94,6.156 Q-5.6280003,7.14,-5.6280003,8.532 z M-10.26,8.532 Q-10.26,9.708,-10.086,10.488 Q-9.912001,11.268,-9.522,11.658 Q-9.132,12.048,-8.484,12.048 Q-7.8360004,12.048,-7.446,11.664 Q-7.056,11.28,-6.8760004,10.4939995 Q-6.696,9.708,-6.696,8.532 Q-6.696,7.356,-6.8760004,6.582 Q-7.056,5.808,-7.446,5.418 Q-7.8360004,5.028,-8.484,5.028 Q-9.132,5.028,-9.522,5.418 Q-9.912001,5.808,-10.086,6.582 Q-10.26,7.356,-10.26,8.532 z M-4.1760006,12.18 Q-4.1760006,11.736,-3.9600005,11.556 Q-3.7440004,11.376,-3.4440005,11.376 Q-3.1320004,11.376,-2.9100003,11.556 Q-2.6880004,11.736,-2.6880004,12.18 Q-2.6880004,12.612,-2.9100003,12.804 Q-3.1320004,12.996,-3.4440005,12.996 Q-3.7440004,12.996,-3.9600005,12.804 Q-4.1760006,12.612,-4.1760006,12.18 z M-0.19200039,12.828 L3.324,5.22 L-1.2960004,5.22 L-1.2960004,4.26 L4.4519997,4.26 L4.4519997,5.076 L0.97199965,12.828 L-0.19200039,12.828 z M11.316,8.532 Q11.316,9.576,11.16,10.392 Q11.004,11.208,10.662,11.778 Q10.32,12.348,9.774,12.648 Q9.228,12.948,8.459999,12.948 Q7.4999995,12.948,6.8699994,12.42 Q6.24,11.892,5.9339995,10.902 Q5.6279993,9.912,5.6279993,8.532 Q5.6279993,7.14,5.9099994,6.156 Q6.1919994,5.172,6.8159995,4.6499996 Q7.4399996,4.1280003,8.459999,4.1280003 Q9.42,4.1280003,10.056,4.6499996 Q10.691999,5.172,11.004,6.156 Q11.316,7.14,11.316,8.532 z M6.6839995,8.532 Q6.6839995,9.708,6.8579993,10.488 Q7.0319996,11.268,7.4219995,11.658 Q7.8119993,12.048,8.459999,12.048 Q9.108,12.048,9.497999,11.664 Q9.888,11.28,10.067999,10.4939995 Q10.247999,9.708,10.247999,8.532 Q10.247999,7.356,10.067999,6.582 Q9.888,5.808,9.497999,5.418 Q9.108,5.028,8.459999,5.028 Q7.8119993,5.028,7.4219995,5.418 Q7.0319996,5.808,6.8579993,6.582 Q6.6839995,7.356,6.6839995,8.532 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 276.7623 263.656)"/> +<path d="M316.22897,255.656 L316.22897,259.656" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M-5.6280003,8.532 Q-5.6280003,9.576,-5.7840004,10.392 Q-5.94,11.208,-6.282,11.778 Q-6.624,12.348,-7.17,12.648 Q-7.716,12.948,-8.484,12.948 Q-9.444,12.948,-10.074,12.42 Q-10.704,11.892,-11.01,10.902 Q-11.316,9.912,-11.316,8.532 Q-11.316,7.14,-11.034,6.156 Q-10.752001,5.172,-10.128,4.6499996 Q-9.504,4.1280003,-8.484,4.1280003 Q-7.524,4.1280003,-6.888,4.6499996 Q-6.2520003,5.172,-5.94,6.156 Q-5.6280003,7.14,-5.6280003,8.532 z M-10.26,8.532 Q-10.26,9.708,-10.086,10.488 Q-9.912001,11.268,-9.522,11.658 Q-9.132,12.048,-8.484,12.048 Q-7.8360004,12.048,-7.446,11.664 Q-7.056,11.28,-6.8760004,10.4939995 Q-6.696,9.708,-6.696,8.532 Q-6.696,7.356,-6.8760004,6.582 Q-7.056,5.808,-7.446,5.418 Q-7.8360004,5.028,-8.484,5.028 Q-9.132,5.028,-9.522,5.418 Q-9.912001,5.808,-10.086,6.582 Q-10.26,7.356,-10.26,8.532 z M-4.1760006,12.18 Q-4.1760006,11.736,-3.9600005,11.556 Q-3.7440004,11.376,-3.4440005,11.376 Q-3.1320004,11.376,-2.9100003,11.556 Q-2.6880004,11.736,-2.6880004,12.18 Q-2.6880004,12.612,-2.9100003,12.804 Q-3.1320004,12.996,-3.4440005,12.996 Q-3.7440004,12.996,-3.9600005,12.804 Q-4.1760006,12.612,-4.1760006,12.18 z M1.5959997,4.1400003 Q2.3519998,4.1400003,2.9279995,4.3739996 Q3.5039997,4.608,3.8339996,5.064 Q4.1639996,5.52,4.1639996,6.192 Q4.1639996,6.708,3.942,7.092 Q3.7199998,7.476,3.3479996,7.77 Q2.9759998,8.064,2.5319996,8.292 Q3.0599995,8.544001,3.4919996,8.8619995 Q3.9239998,9.18,4.1819997,9.6 Q4.4399996,10.02,4.4399996,10.608 Q4.4399996,11.328,4.0919995,11.85 Q3.7439995,12.372,3.1139998,12.66 Q2.4839997,12.948,1.6319997,12.948 Q0.7079997,12.948,0.06599963,12.672 Q-0.57600033,12.396,-0.9060004,11.886 Q-1.2360003,11.376,-1.2360003,10.644 Q-1.2360003,10.056,-0.99000037,9.624001 Q-0.7440003,9.192,-0.33600032,8.88 Q0.07199967,8.568,0.5399997,8.352 Q0.11999965,8.1119995,-0.22200036,7.806 Q-0.56400037,7.5,-0.7620003,7.104 Q-0.96000034,6.708,-0.96000034,6.18 Q-0.96000034,5.52,-0.6240003,5.07 Q-0.28800035,4.62,0.28799963,4.38 Q0.8639996,4.1400003,1.5959997,4.1400003 z M-0.20400035,10.656 Q-0.20400035,11.28,0.23999977,11.694 Q0.6839998,12.108,1.6079996,12.108 Q2.4839997,12.108,2.9459996,11.694 Q3.4079995,11.28,3.4079995,10.62 Q3.4079995,10.2,3.1859999,9.882 Q2.9639997,9.564,2.5619998,9.312 Q2.1599996,9.059999,1.6079996,8.856 L1.4159997,8.784 Q0.8879998,9.012,0.52799964,9.276 Q0.16799963,9.54,-0.018000364,9.875999 Q-0.20400035,10.212,-0.20400035,10.656 z M1.5839996,4.992 Q0.92399955,4.992,0.49799967,5.31 Q0.07199967,5.628,0.07199967,6.228 Q0.07199967,6.672,0.2819996,6.972 Q0.49199963,7.272,0.85199976,7.482 Q1.2119997,7.692,1.6439996,7.884 Q2.0639997,7.704,2.3939996,7.488 Q2.7239995,7.272,2.9219995,6.966 Q3.12,6.66,3.12,6.228 Q3.12,5.628,2.6999998,5.31 Q2.2799997,4.992,1.5839996,4.992 z M11.316,8.532 Q11.316,9.576,11.16,10.392 Q11.004,11.208,10.662,11.778 Q10.32,12.348,9.774,12.648 Q9.228,12.948,8.459999,12.948 Q7.4999995,12.948,6.8699994,12.42 Q6.24,11.892,5.9339995,10.902 Q5.6279993,9.912,5.6279993,8.532 Q5.6279993,7.14,5.9099994,6.156 Q6.1919994,5.172,6.8159995,4.6499996 Q7.4399996,4.1280003,8.459999,4.1280003 Q9.42,4.1280003,10.056,4.6499996 Q10.691999,5.172,11.004,6.156 Q11.316,7.14,11.316,8.532 z M6.6839995,8.532 Q6.6839995,9.708,6.8579993,10.488 Q7.0319996,11.268,7.4219995,11.658 Q7.8119993,12.048,8.459999,12.048 Q9.108,12.048,9.497999,11.664 Q9.888,11.28,10.067999,10.4939995 Q10.247999,9.708,10.247999,8.532 Q10.247999,7.356,10.067999,6.582 Q9.888,5.808,9.497999,5.418 Q9.108,5.028,8.459999,5.028 Q7.8119993,5.028,7.4219995,5.418 Q7.0319996,5.808,6.8579993,6.582 Q6.6839995,7.356,6.6839995,8.532 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 316.22897 263.656)"/> +<path d="M355.69568,255.656 L355.69568,259.656" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M-5.6280003,8.532 Q-5.6280003,9.576,-5.7840004,10.392 Q-5.94,11.208,-6.282,11.778 Q-6.624,12.348,-7.17,12.648 Q-7.716,12.948,-8.484,12.948 Q-9.444,12.948,-10.074,12.42 Q-10.704,11.892,-11.01,10.902 Q-11.316,9.912,-11.316,8.532 Q-11.316,7.14,-11.034,6.156 Q-10.752001,5.172,-10.128,4.6499996 Q-9.504,4.1280003,-8.484,4.1280003 Q-7.524,4.1280003,-6.888,4.6499996 Q-6.2520003,5.172,-5.94,6.156 Q-5.6280003,7.14,-5.6280003,8.532 z M-10.26,8.532 Q-10.26,9.708,-10.086,10.488 Q-9.912001,11.268,-9.522,11.658 Q-9.132,12.048,-8.484,12.048 Q-7.8360004,12.048,-7.446,11.664 Q-7.056,11.28,-6.8760004,10.4939995 Q-6.696,9.708,-6.696,8.532 Q-6.696,7.356,-6.8760004,6.582 Q-7.056,5.808,-7.446,5.418 Q-7.8360004,5.028,-8.484,5.028 Q-9.132,5.028,-9.522,5.418 Q-9.912001,5.808,-10.086,6.582 Q-10.26,7.356,-10.26,8.532 z M-4.1760006,12.18 Q-4.1760006,11.736,-3.9600005,11.556 Q-3.7440004,11.376,-3.4440005,11.376 Q-3.1320004,11.376,-2.9100003,11.556 Q-2.6880004,11.736,-2.6880004,12.18 Q-2.6880004,12.612,-2.9100003,12.804 Q-3.1320004,12.996,-3.4440005,12.996 Q-3.7440004,12.996,-3.9600005,12.804 Q-4.1760006,12.612,-4.1760006,12.18 z M4.416,7.92 Q4.416,8.652,4.3139997,9.378 Q4.212,10.104,3.9599996,10.746 Q3.7079997,11.3880005,3.2639995,11.886 Q2.8199997,12.384,2.1359997,12.666 Q1.4519997,12.948,0.47999954,12.948 Q0.23999977,12.948,-0.07800031,12.918 Q-0.3960004,12.8880005,-0.6000004,12.828 L-0.6000004,11.928 Q-0.3840003,12,-0.096000314,12.042 Q0.19199967,12.084,0.4559996,12.084 Q1.2959998,12.084,1.8419998,11.808001 Q2.3879995,11.532,2.712,11.058001 Q3.0359998,10.584,3.1799998,9.954 Q3.324,9.324,3.3479996,8.628 L3.2759995,8.628 Q3.0959997,8.904,2.8199997,9.132 Q2.5439997,9.360001,2.1539996,9.492001 Q1.7639997,9.624001,1.2359996,9.624001 Q0.5039997,9.624001,-0.054000378,9.318 Q-0.61200035,9.012,-0.91800034,8.436 Q-1.2240003,7.86,-1.2240003,7.032 Q-1.2240003,6.132,-0.8820003,5.484 Q-0.5400003,4.836,0.07199967,4.488 Q0.6839998,4.1400003,1.5119996,4.1400003 Q2.1239996,4.1400003,2.6519995,4.3739996 Q3.1799998,4.608,3.5759997,5.076 Q3.9719996,5.544,4.194,6.252 Q4.416,6.96,4.416,7.92 z M1.5119996,5.028 Q0.76799965,5.028,0.29399967,5.52 Q-0.1800003,6.012,-0.1800003,7.02 Q-0.1800003,7.848,0.22199965,8.3220005 Q0.6239996,8.796,1.4639997,8.796 Q2.0399997,8.796,2.4599996,8.562 Q2.8799996,8.328,3.1139998,7.968 Q3.3479996,7.608,3.3479996,7.224 Q3.3479996,6.84,3.2339997,6.45 Q3.12,6.06,2.8919997,5.736 Q2.6639996,5.412,2.3159995,5.22 Q1.9679997,5.028,1.5119996,5.028 z M11.316,8.532 Q11.316,9.576,11.16,10.392 Q11.004,11.208,10.662,11.778 Q10.32,12.348,9.774,12.648 Q9.228,12.948,8.459999,12.948 Q7.4999995,12.948,6.8699994,12.42 Q6.24,11.892,5.9339995,10.902 Q5.6279993,9.912,5.6279993,8.532 Q5.6279993,7.14,5.9099994,6.156 Q6.1919994,5.172,6.8159995,4.6499996 Q7.4399996,4.1280003,8.459999,4.1280003 Q9.42,4.1280003,10.056,4.6499996 Q10.691999,5.172,11.004,6.156 Q11.316,7.14,11.316,8.532 z M6.6839995,8.532 Q6.6839995,9.708,6.8579993,10.488 Q7.0319996,11.268,7.4219995,11.658 Q7.8119993,12.048,8.459999,12.048 Q9.108,12.048,9.497999,11.664 Q9.888,11.28,10.067999,10.4939995 Q10.247999,9.708,10.247999,8.532 Q10.247999,7.356,10.067999,6.582 Q9.888,5.808,9.497999,5.418 Q9.108,5.028,8.459999,5.028 Q7.8119993,5.028,7.4219995,5.418 Q7.0319996,5.808,6.8579993,6.582 Q6.6839995,7.356,6.6839995,8.532 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 355.69568 263.656)"/> +</svg> \ No newline at end of file diff --git a/tests/refs/colorbar/default-with-axes.png b/tests/refs/colorbar/default-with-axes.png new file mode 100644 index 0000000000000000000000000000000000000000..651fcaf6781758a8931a1b461ba1be7133d2a592 GIT binary patch literal 36936 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 Jf4%nh{|5r=5x4*V literal 0 HcmV?d00001 diff --git a/tests/refs/colorbar/default-with-axes.svg b/tests/refs/colorbar/default-with-axes.svg new file mode 100644 index 0000000..c862f98 --- /dev/null +++ b/tests/refs/colorbar/default-with-axes.svg @@ -0,0 +1,264 @@ +<svg height="300" viewBox="0 0 400 300" width="400" xmlns="http://www.w3.org/2000/svg"> +<rect fill="#ffffff" height="100%" width="100%"/> +<clipPath id="plotive-clip1"> +<rect height="205.864" width="234.59201" x="81.6" y="20"/> +</clipPath> +<g clip-path="url(#plotive-clip1)"> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#54c16a" fill-opacity="0.7019608" stroke="#54c16a" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 216.20972 94.71388)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#3ba97e" fill-opacity="0.7019608" stroke="#3ba97e" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 207.91516 58.994614)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#8fd159" fill-opacity="0.7019608" stroke="#8fd159" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 225.00061 147.6293)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#440154" fill-opacity="0.7019608" stroke="#440154" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 199.517 113.45325)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#35a282" fill-opacity="0.7019608" stroke="#35a282" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 101.6 106.68832)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#31778c" fill-opacity="0.7019608" stroke="#31778c" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 182.70898 40)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#70cb5f" fill-opacity="0.7019608" stroke="#70cb5f" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 192.9993 177.17908)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#38638b" fill-opacity="0.7019608" stroke="#38638b" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 118.61743 145.32857)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#36698c" fill-opacity="0.7019608" stroke="#36698c" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 150.36797 100.19581)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#fde724" fill-opacity="0.7019608" stroke="#fde724" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 234.65158 91.21347)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#33a083" fill-opacity="0.7019608" stroke="#33a083" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 200.34225 102.722885)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#90d159" fill-opacity="0.7019608" stroke="#90d159" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 275.72296 65.022415)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#461c61" fill-opacity="0.7019608" stroke="#461c61" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 296.19202 150.18683)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#61c961" fill-opacity="0.7019608" stroke="#61c961" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 105.84342 205.864)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#279689" fill-opacity="0.7019608" stroke="#279689" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 179.84628 52.175858)"/> +</g> +<path d="M16.888134,-4 L16.888134,4 M61.17061,-4 L61.17061,4 M105.45309,-4 L105.45309,4 M149.73557,-4 L149.73557,4 M194.01804,-4 L194.01804,4" fill="none" stroke="#000000" stroke-width="1" transform="matrix(1 0 0 1 81.6 225.864)"/> +<path d="M-5.6280003,8.532 Q-5.6280003,9.576,-5.7840004,10.392 Q-5.94,11.208,-6.282,11.778 Q-6.624,12.348,-7.17,12.648 Q-7.716,12.948,-8.484,12.948 Q-9.444,12.948,-10.074,12.42 Q-10.704,11.892,-11.01,10.902 Q-11.316,9.912,-11.316,8.532 Q-11.316,7.14,-11.034,6.156 Q-10.752001,5.172,-10.128,4.6499996 Q-9.504,4.1280003,-8.484,4.1280003 Q-7.524,4.1280003,-6.888,4.6499996 Q-6.2520003,5.172,-5.94,6.156 Q-5.6280003,7.14,-5.6280003,8.532 z M-10.26,8.532 Q-10.26,9.708,-10.086,10.488 Q-9.912001,11.268,-9.522,11.658 Q-9.132,12.048,-8.484,12.048 Q-7.8360004,12.048,-7.446,11.664 Q-7.056,11.28,-6.8760004,10.4939995 Q-6.696,9.708,-6.696,8.532 Q-6.696,7.356,-6.8760004,6.582 Q-7.056,5.808,-7.446,5.418 Q-7.8360004,5.028,-8.484,5.028 Q-9.132,5.028,-9.522,5.418 Q-9.912001,5.808,-10.086,6.582 Q-10.26,7.356,-10.26,8.532 z M-4.1760006,12.18 Q-4.1760006,11.736,-3.9600005,11.556 Q-3.7440004,11.376,-3.4440005,11.376 Q-3.1320004,11.376,-2.9100003,11.556 Q-2.6880004,11.736,-2.6880004,12.18 Q-2.6880004,12.612,-2.9100003,12.804 Q-3.1320004,12.996,-3.4440005,12.996 Q-3.7440004,12.996,-3.9600005,12.804 Q-4.1760006,12.612,-4.1760006,12.18 z M4.4519997,8.532 Q4.4519997,9.576,4.2959995,10.392 Q4.14,11.208,3.7979999,11.778 Q3.4559999,12.348,2.9099998,12.648 Q2.3639998,12.948,1.5959997,12.948 Q0.6359997,12.948,0.0059996843,12.42 Q-0.6240003,11.892,-0.93000036,10.902 Q-1.2360003,9.912,-1.2360003,8.532 Q-1.2360003,7.14,-0.95400035,6.156 Q-0.6720004,5.172,-0.048000336,4.6499996 Q0.57599974,4.1280003,1.5959997,4.1280003 Q2.5559998,4.1280003,3.192,4.6499996 Q3.8279996,5.172,4.14,6.156 Q4.4519997,7.14,4.4519997,8.532 z M-0.1800003,8.532 Q-0.1800003,9.708,-0.0060003996,10.488 Q0.16799963,11.268,0.5579996,11.658 Q0.9479997,12.048,1.5959997,12.048 Q2.2439995,12.048,2.6339998,11.664 Q3.0239997,11.28,3.2039995,10.4939995 Q3.3839998,9.708,3.3839998,8.532 Q3.3839998,7.356,3.2039995,6.582 Q3.0239997,5.808,2.6339998,5.418 Q2.2439995,5.028,1.5959997,5.028 Q0.9479997,5.028,0.5579996,5.418 Q0.16799963,5.808,-0.0060003996,6.582 Q-0.1800003,7.356,-0.1800003,8.532 z M11.316,8.532 Q11.316,9.576,11.16,10.392 Q11.004,11.208,10.662,11.778 Q10.32,12.348,9.774,12.648 Q9.228,12.948,8.459999,12.948 Q7.4999995,12.948,6.8699994,12.42 Q6.24,11.892,5.9339995,10.902 Q5.6279993,9.912,5.6279993,8.532 Q5.6279993,7.14,5.9099994,6.156 Q6.1919994,5.172,6.8159995,4.6499996 Q7.4399996,4.1280003,8.459999,4.1280003 Q9.42,4.1280003,10.056,4.6499996 Q10.691999,5.172,11.004,6.156 Q11.316,7.14,11.316,8.532 z M6.6839995,8.532 Q6.6839995,9.708,6.8579993,10.488 Q7.0319996,11.268,7.4219995,11.658 Q7.8119993,12.048,8.459999,12.048 Q9.108,12.048,9.497999,11.664 Q9.888,11.28,10.067999,10.4939995 Q10.247999,9.708,10.247999,8.532 Q10.247999,7.356,10.067999,6.582 Q9.888,5.808,9.497999,5.418 Q9.108,5.028,8.459999,5.028 Q7.8119993,5.028,7.4219995,5.418 Q7.0319996,5.808,6.8579993,6.582 Q6.6839995,7.356,6.6839995,8.532 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 98.48813 233.864)"/> +<path d="M-5.6280003,8.532 Q-5.6280003,9.576,-5.7840004,10.392 Q-5.94,11.208,-6.282,11.778 Q-6.624,12.348,-7.17,12.648 Q-7.716,12.948,-8.484,12.948 Q-9.444,12.948,-10.074,12.42 Q-10.704,11.892,-11.01,10.902 Q-11.316,9.912,-11.316,8.532 Q-11.316,7.14,-11.034,6.156 Q-10.752001,5.172,-10.128,4.6499996 Q-9.504,4.1280003,-8.484,4.1280003 Q-7.524,4.1280003,-6.888,4.6499996 Q-6.2520003,5.172,-5.94,6.156 Q-5.6280003,7.14,-5.6280003,8.532 z M-10.26,8.532 Q-10.26,9.708,-10.086,10.488 Q-9.912001,11.268,-9.522,11.658 Q-9.132,12.048,-8.484,12.048 Q-7.8360004,12.048,-7.446,11.664 Q-7.056,11.28,-6.8760004,10.4939995 Q-6.696,9.708,-6.696,8.532 Q-6.696,7.356,-6.8760004,6.582 Q-7.056,5.808,-7.446,5.418 Q-7.8360004,5.028,-8.484,5.028 Q-9.132,5.028,-9.522,5.418 Q-9.912001,5.808,-10.086,6.582 Q-10.26,7.356,-10.26,8.532 z M-4.1760006,12.18 Q-4.1760006,11.736,-3.9600005,11.556 Q-3.7440004,11.376,-3.4440005,11.376 Q-3.1320004,11.376,-2.9100003,11.556 Q-2.6880004,11.736,-2.6880004,12.18 Q-2.6880004,12.612,-2.9100003,12.804 Q-3.1320004,12.996,-3.4440005,12.996 Q-3.7440004,12.996,-3.9600005,12.804 Q-4.1760006,12.612,-4.1760006,12.18 z M4.416,12.828 L-1.2480004,12.828 L-1.2480004,11.952 L0.9959996,9.684 Q1.6439996,9.036,2.0879996,8.532 Q2.5319996,8.028,2.7599998,7.542 Q2.988,7.056,2.988,6.48 Q2.988,5.772,2.5679998,5.406 Q2.1479998,5.04,1.4759996,5.04 Q0.85199976,5.04,0.37799954,5.256 Q-0.096000314,5.472,-0.5880003,5.856 L-1.1520004,5.148 Q-0.81600034,4.86,-0.4140004,4.632 Q-0.012000322,4.4040003,0.46199965,4.2720003 Q0.93599963,4.1400003,1.4759996,4.1400003 Q2.2799997,4.1400003,2.8559995,4.4160004 Q3.4319997,4.6920004,3.7499995,5.202 Q4.068,5.712,4.068,6.42 Q4.068,7.092,3.7919998,7.68 Q3.5159998,8.268,3.0239997,8.838 Q2.5319996,9.408,1.8719997,10.056 L0.083999634,11.82 L0.083999634,11.868 L4.416,11.868 L4.416,12.828 z M11.316,8.532 Q11.316,9.576,11.16,10.392 Q11.004,11.208,10.662,11.778 Q10.32,12.348,9.774,12.648 Q9.228,12.948,8.459999,12.948 Q7.4999995,12.948,6.8699994,12.42 Q6.24,11.892,5.9339995,10.902 Q5.6279993,9.912,5.6279993,8.532 Q5.6279993,7.14,5.9099994,6.156 Q6.1919994,5.172,6.8159995,4.6499996 Q7.4399996,4.1280003,8.459999,4.1280003 Q9.42,4.1280003,10.056,4.6499996 Q10.691999,5.172,11.004,6.156 Q11.316,7.14,11.316,8.532 z M6.6839995,8.532 Q6.6839995,9.708,6.8579993,10.488 Q7.0319996,11.268,7.4219995,11.658 Q7.8119993,12.048,8.459999,12.048 Q9.108,12.048,9.497999,11.664 Q9.888,11.28,10.067999,10.4939995 Q10.247999,9.708,10.247999,8.532 Q10.247999,7.356,10.067999,6.582 Q9.888,5.808,9.497999,5.418 Q9.108,5.028,8.459999,5.028 Q7.8119993,5.028,7.4219995,5.418 Q7.0319996,5.808,6.8579993,6.582 Q6.6839995,7.356,6.6839995,8.532 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 142.7706 233.864)"/> +<path d="M-5.6280003,8.532 Q-5.6280003,9.576,-5.7840004,10.392 Q-5.94,11.208,-6.282,11.778 Q-6.624,12.348,-7.17,12.648 Q-7.716,12.948,-8.484,12.948 Q-9.444,12.948,-10.074,12.42 Q-10.704,11.892,-11.01,10.902 Q-11.316,9.912,-11.316,8.532 Q-11.316,7.14,-11.034,6.156 Q-10.752001,5.172,-10.128,4.6499996 Q-9.504,4.1280003,-8.484,4.1280003 Q-7.524,4.1280003,-6.888,4.6499996 Q-6.2520003,5.172,-5.94,6.156 Q-5.6280003,7.14,-5.6280003,8.532 z M-10.26,8.532 Q-10.26,9.708,-10.086,10.488 Q-9.912001,11.268,-9.522,11.658 Q-9.132,12.048,-8.484,12.048 Q-7.8360004,12.048,-7.446,11.664 Q-7.056,11.28,-6.8760004,10.4939995 Q-6.696,9.708,-6.696,8.532 Q-6.696,7.356,-6.8760004,6.582 Q-7.056,5.808,-7.446,5.418 Q-7.8360004,5.028,-8.484,5.028 Q-9.132,5.028,-9.522,5.418 Q-9.912001,5.808,-10.086,6.582 Q-10.26,7.356,-10.26,8.532 z M-4.1760006,12.18 Q-4.1760006,11.736,-3.9600005,11.556 Q-3.7440004,11.376,-3.4440005,11.376 Q-3.1320004,11.376,-2.9100003,11.556 Q-2.6880004,11.736,-2.6880004,12.18 Q-2.6880004,12.612,-2.9100003,12.804 Q-3.1320004,12.996,-3.4440005,12.996 Q-3.7440004,12.996,-3.9600005,12.804 Q-4.1760006,12.612,-4.1760006,12.18 z M4.7999997,10.884 L3.5519996,10.884 L3.5519996,12.828 L2.5319996,12.828 L2.5319996,10.884 L-1.5720004,10.884 L-1.5720004,9.984 L2.4599996,4.212 L3.5519996,4.212 L3.5519996,9.936 L4.7999997,9.936 L4.7999997,10.884 z M2.5319996,7.236 Q2.5319996,6.924,2.5379996,6.666 Q2.5439997,6.408,2.5559998,6.18 Q2.5679998,5.952,2.574,5.742 Q2.5799994,5.532,2.5919995,5.34 L2.5439997,5.34 Q2.4479995,5.568,2.304,5.832 Q2.1599996,6.096,2.0279996,6.276 L-0.5400003,9.936 L2.5319996,9.936 L2.5319996,7.236 z M11.316,8.532 Q11.316,9.576,11.16,10.392 Q11.004,11.208,10.662,11.778 Q10.32,12.348,9.774,12.648 Q9.228,12.948,8.459999,12.948 Q7.4999995,12.948,6.8699994,12.42 Q6.24,11.892,5.9339995,10.902 Q5.6279993,9.912,5.6279993,8.532 Q5.6279993,7.14,5.9099994,6.156 Q6.1919994,5.172,6.8159995,4.6499996 Q7.4399996,4.1280003,8.459999,4.1280003 Q9.42,4.1280003,10.056,4.6499996 Q10.691999,5.172,11.004,6.156 Q11.316,7.14,11.316,8.532 z M6.6839995,8.532 Q6.6839995,9.708,6.8579993,10.488 Q7.0319996,11.268,7.4219995,11.658 Q7.8119993,12.048,8.459999,12.048 Q9.108,12.048,9.497999,11.664 Q9.888,11.28,10.067999,10.4939995 Q10.247999,9.708,10.247999,8.532 Q10.247999,7.356,10.067999,6.582 Q9.888,5.808,9.497999,5.418 Q9.108,5.028,8.459999,5.028 Q7.8119993,5.028,7.4219995,5.418 Q7.0319996,5.808,6.8579993,6.582 Q6.6839995,7.356,6.6839995,8.532 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 187.05309 233.864)"/> +<path d="M-5.6280003,8.532 Q-5.6280003,9.576,-5.7840004,10.392 Q-5.94,11.208,-6.282,11.778 Q-6.624,12.348,-7.17,12.648 Q-7.716,12.948,-8.484,12.948 Q-9.444,12.948,-10.074,12.42 Q-10.704,11.892,-11.01,10.902 Q-11.316,9.912,-11.316,8.532 Q-11.316,7.14,-11.034,6.156 Q-10.752001,5.172,-10.128,4.6499996 Q-9.504,4.1280003,-8.484,4.1280003 Q-7.524,4.1280003,-6.888,4.6499996 Q-6.2520003,5.172,-5.94,6.156 Q-5.6280003,7.14,-5.6280003,8.532 z M-10.26,8.532 Q-10.26,9.708,-10.086,10.488 Q-9.912001,11.268,-9.522,11.658 Q-9.132,12.048,-8.484,12.048 Q-7.8360004,12.048,-7.446,11.664 Q-7.056,11.28,-6.8760004,10.4939995 Q-6.696,9.708,-6.696,8.532 Q-6.696,7.356,-6.8760004,6.582 Q-7.056,5.808,-7.446,5.418 Q-7.8360004,5.028,-8.484,5.028 Q-9.132,5.028,-9.522,5.418 Q-9.912001,5.808,-10.086,6.582 Q-10.26,7.356,-10.26,8.532 z M-4.1760006,12.18 Q-4.1760006,11.736,-3.9600005,11.556 Q-3.7440004,11.376,-3.4440005,11.376 Q-3.1320004,11.376,-2.9100003,11.556 Q-2.6880004,11.736,-2.6880004,12.18 Q-2.6880004,12.612,-2.9100003,12.804 Q-3.1320004,12.996,-3.4440005,12.996 Q-3.7440004,12.996,-3.9600005,12.804 Q-4.1760006,12.612,-4.1760006,12.18 z M-1.1640003,9.168 Q-1.1640003,8.424,-1.0620003,7.704 Q-0.96000034,6.984,-0.7080003,6.342 Q-0.45600033,5.7,-0.012000322,5.202 Q0.43199968,4.7040005,1.1099997,4.422 Q1.7879996,4.1400003,2.7599998,4.1400003 Q3.0119996,4.1400003,3.3179998,4.1639996 Q3.6239996,4.1879997,3.8159995,4.248 L3.8159995,5.148 Q3.6,5.076,3.33,5.04 Q3.0599995,5.004,2.7839994,5.004 Q1.9559996,5.004,1.4039996,5.28 Q0.85199976,5.556,0.5339997,6.036 Q0.2159996,6.516,0.07199967,7.14 Q-0.072000384,7.764,-0.1080004,8.472 L-0.03600037,8.472 Q0.1439997,8.184,0.4199996,7.956 Q0.6959996,7.728,1.0859997,7.596 Q1.4759996,7.464,1.9919996,7.464 Q2.7359996,7.464,3.2939997,7.77 Q3.8519998,8.076,4.1639996,8.658 Q4.476,9.24,4.476,10.068 Q4.476,10.956,4.14,11.604 Q3.804,12.252,3.1979995,12.6 Q2.5919995,12.948,1.7519996,12.948 Q1.1399996,12.948,0.61199975,12.72 Q0.083999634,12.492,-0.31800032,12.024 Q-0.7200004,11.556,-0.9420003,10.842 Q-1.1640003,10.128,-1.1640003,9.168 z M1.7399998,12.06 Q2.4959998,12.06,2.9639997,11.574 Q3.4319997,11.088,3.4319997,10.068 Q3.4319997,9.252,3.0179996,8.771999 Q2.6039996,8.292,1.7759998,8.292 Q1.2119997,8.292,0.7919996,8.526 Q0.37199974,8.76,0.13799965,9.12 Q-0.096000314,9.48,-0.096000314,9.864 Q-0.096000314,10.26,0.017999649,10.644 Q0.13199961,11.028,0.3659997,11.352 Q0.59999967,11.676001,0.9419997,11.868 Q1.2839997,12.06,1.7399998,12.06 z M11.316,8.532 Q11.316,9.576,11.16,10.392 Q11.004,11.208,10.662,11.778 Q10.32,12.348,9.774,12.648 Q9.228,12.948,8.459999,12.948 Q7.4999995,12.948,6.8699994,12.42 Q6.24,11.892,5.9339995,10.902 Q5.6279993,9.912,5.6279993,8.532 Q5.6279993,7.14,5.9099994,6.156 Q6.1919994,5.172,6.8159995,4.6499996 Q7.4399996,4.1280003,8.459999,4.1280003 Q9.42,4.1280003,10.056,4.6499996 Q10.691999,5.172,11.004,6.156 Q11.316,7.14,11.316,8.532 z M6.6839995,8.532 Q6.6839995,9.708,6.8579993,10.488 Q7.0319996,11.268,7.4219995,11.658 Q7.8119993,12.048,8.459999,12.048 Q9.108,12.048,9.497999,11.664 Q9.888,11.28,10.067999,10.4939995 Q10.247999,9.708,10.247999,8.532 Q10.247999,7.356,10.067999,6.582 Q9.888,5.808,9.497999,5.418 Q9.108,5.028,8.459999,5.028 Q7.8119993,5.028,7.4219995,5.418 Q7.0319996,5.808,6.8579993,6.582 Q6.6839995,7.356,6.6839995,8.532 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 231.33557 233.864)"/> +<path d="M-5.6280003,8.532 Q-5.6280003,9.576,-5.7840004,10.392 Q-5.94,11.208,-6.282,11.778 Q-6.624,12.348,-7.17,12.648 Q-7.716,12.948,-8.484,12.948 Q-9.444,12.948,-10.074,12.42 Q-10.704,11.892,-11.01,10.902 Q-11.316,9.912,-11.316,8.532 Q-11.316,7.14,-11.034,6.156 Q-10.752001,5.172,-10.128,4.6499996 Q-9.504,4.1280003,-8.484,4.1280003 Q-7.524,4.1280003,-6.888,4.6499996 Q-6.2520003,5.172,-5.94,6.156 Q-5.6280003,7.14,-5.6280003,8.532 z M-10.26,8.532 Q-10.26,9.708,-10.086,10.488 Q-9.912001,11.268,-9.522,11.658 Q-9.132,12.048,-8.484,12.048 Q-7.8360004,12.048,-7.446,11.664 Q-7.056,11.28,-6.8760004,10.4939995 Q-6.696,9.708,-6.696,8.532 Q-6.696,7.356,-6.8760004,6.582 Q-7.056,5.808,-7.446,5.418 Q-7.8360004,5.028,-8.484,5.028 Q-9.132,5.028,-9.522,5.418 Q-9.912001,5.808,-10.086,6.582 Q-10.26,7.356,-10.26,8.532 z M-4.1760006,12.18 Q-4.1760006,11.736,-3.9600005,11.556 Q-3.7440004,11.376,-3.4440005,11.376 Q-3.1320004,11.376,-2.9100003,11.556 Q-2.6880004,11.736,-2.6880004,12.18 Q-2.6880004,12.612,-2.9100003,12.804 Q-3.1320004,12.996,-3.4440005,12.996 Q-3.7440004,12.996,-3.9600005,12.804 Q-4.1760006,12.612,-4.1760006,12.18 z M1.5959997,4.1400003 Q2.3519998,4.1400003,2.9279995,4.3739996 Q3.5039997,4.608,3.8339996,5.064 Q4.1639996,5.52,4.1639996,6.192 Q4.1639996,6.708,3.942,7.092 Q3.7199998,7.476,3.3479996,7.77 Q2.9759998,8.064,2.5319996,8.292 Q3.0599995,8.544001,3.4919996,8.8619995 Q3.9239998,9.18,4.1819997,9.6 Q4.4399996,10.02,4.4399996,10.608 Q4.4399996,11.328,4.0919995,11.85 Q3.7439995,12.372,3.1139998,12.66 Q2.4839997,12.948,1.6319997,12.948 Q0.7079997,12.948,0.06599963,12.672 Q-0.57600033,12.396,-0.9060004,11.886 Q-1.2360003,11.376,-1.2360003,10.644 Q-1.2360003,10.056,-0.99000037,9.624001 Q-0.7440003,9.192,-0.33600032,8.88 Q0.07199967,8.568,0.5399997,8.352 Q0.11999965,8.1119995,-0.22200036,7.806 Q-0.56400037,7.5,-0.7620003,7.104 Q-0.96000034,6.708,-0.96000034,6.18 Q-0.96000034,5.52,-0.6240003,5.07 Q-0.28800035,4.62,0.28799963,4.38 Q0.8639996,4.1400003,1.5959997,4.1400003 z M-0.20400035,10.656 Q-0.20400035,11.28,0.23999977,11.694 Q0.6839998,12.108,1.6079996,12.108 Q2.4839997,12.108,2.9459996,11.694 Q3.4079995,11.28,3.4079995,10.62 Q3.4079995,10.2,3.1859999,9.882 Q2.9639997,9.564,2.5619998,9.312 Q2.1599996,9.059999,1.6079996,8.856 L1.4159997,8.784 Q0.8879998,9.012,0.52799964,9.276 Q0.16799963,9.54,-0.018000364,9.875999 Q-0.20400035,10.212,-0.20400035,10.656 z M1.5839996,4.992 Q0.92399955,4.992,0.49799967,5.31 Q0.07199967,5.628,0.07199967,6.228 Q0.07199967,6.672,0.2819996,6.972 Q0.49199963,7.272,0.85199976,7.482 Q1.2119997,7.692,1.6439996,7.884 Q2.0639997,7.704,2.3939996,7.488 Q2.7239995,7.272,2.9219995,6.966 Q3.12,6.66,3.12,6.228 Q3.12,5.628,2.6999998,5.31 Q2.2799997,4.992,1.5839996,4.992 z M11.316,8.532 Q11.316,9.576,11.16,10.392 Q11.004,11.208,10.662,11.778 Q10.32,12.348,9.774,12.648 Q9.228,12.948,8.459999,12.948 Q7.4999995,12.948,6.8699994,12.42 Q6.24,11.892,5.9339995,10.902 Q5.6279993,9.912,5.6279993,8.532 Q5.6279993,7.14,5.9099994,6.156 Q6.1919994,5.172,6.8159995,4.6499996 Q7.4399996,4.1280003,8.459999,4.1280003 Q9.42,4.1280003,10.056,4.6499996 Q10.691999,5.172,11.004,6.156 Q11.316,7.14,11.316,8.532 z M6.6839995,8.532 Q6.6839995,9.708,6.8579993,10.488 Q7.0319996,11.268,7.4219995,11.658 Q7.8119993,12.048,8.459999,12.048 Q9.108,12.048,9.497999,11.664 Q9.888,11.28,10.067999,10.4939995 Q10.247999,9.708,10.247999,8.532 Q10.247999,7.356,10.067999,6.582 Q9.888,5.808,9.497999,5.418 Q9.108,5.028,8.459999,5.028 Q7.8119993,5.028,7.4219995,5.418 Q7.0319996,5.808,6.8579993,6.582 Q6.6839995,7.356,6.6839995,8.532 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 275.61804 233.864)"/> +<path d="M-0.84000015,12.719999 L-3.8000004,8.528 L-2.2000003,8.528 L0.007999897,11.76 L2.1999998,8.528 L3.7840004,8.528 L0.8239999,12.719999 L3.9440002,17.104 L2.3439999,17.104 L0.007999897,13.68 L-2.3600001,17.104 L-3.9440002,17.104 L-0.84000015,12.719999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 198.896 258.208)"/> +<path d="M16.511969,-4 L16.511969,4 M56.773296,-4 L56.773296,4 M97.034615,-4 L97.034615,4 M137.29594,-4 L137.29594,4 M177.55727,-4 L177.55727,4" fill="none" stroke="#000000" stroke-width="1" transform="matrix(-0.00000004371139 -1 1 -0.00000004371139 81.6 225.864)"/> +<path d="M-17.532001,-1.0799999 Q-17.532001,-0.036000013,-17.688,0.78 Q-17.844,1.5960001,-18.186,2.1660001 Q-18.528,2.736,-19.074001,3.036 Q-19.62,3.336,-20.388,3.336 Q-21.348,3.336,-21.978,2.808 Q-22.608,2.2800002,-22.914001,1.2900001 Q-23.220001,0.29999995,-23.220001,-1.0799999 Q-23.220001,-2.4720001,-22.938,-3.4559999 Q-22.656,-4.44,-22.032001,-4.9620004 Q-21.408,-5.4839997,-20.388,-5.4839997 Q-19.428001,-5.4839997,-18.792,-4.9620004 Q-18.156,-4.44,-17.844,-3.4559999 Q-17.532001,-2.4720001,-17.532001,-1.0799999 z M-22.164001,-1.0799999 Q-22.164001,0.095999956,-21.99,0.87600017 Q-21.816,1.656,-21.426,2.046 Q-21.036001,2.436,-20.388,2.436 Q-19.740002,2.436,-19.35,2.052 Q-18.960001,1.6680001,-18.78,0.88199997 Q-18.6,0.095999956,-18.6,-1.0799999 Q-18.6,-2.256,-18.78,-3.0300002 Q-18.960001,-3.804,-19.35,-4.194 Q-19.740002,-4.584,-20.388,-4.584 Q-21.036001,-4.584,-21.426,-4.194 Q-21.816,-3.804,-21.99,-3.0300002 Q-22.164001,-2.256,-22.164001,-1.0799999 z M-16.08,2.568 Q-16.08,2.124,-15.864,1.9440001 Q-15.648001,1.764,-15.348001,1.764 Q-15.036,1.764,-14.814,1.9440001 Q-14.592,2.124,-14.592,2.568 Q-14.592,3,-14.814,3.1920002 Q-15.036,3.384,-15.348001,3.384 Q-15.648001,3.384,-15.864,3.1920002 Q-16.08,3,-16.08,2.568 z M-7.4520006,-1.0799999 Q-7.4520006,-0.036000013,-7.6080008,0.78 Q-7.7640004,1.5960001,-8.106001,2.1660001 Q-8.448,2.736,-8.994,3.036 Q-9.540001,3.336,-10.308001,3.336 Q-11.268001,3.336,-11.898001,2.808 Q-12.528001,2.2800002,-12.834001,1.2900001 Q-13.14,0.29999995,-13.14,-1.0799999 Q-13.14,-2.4720001,-12.858001,-3.4559999 Q-12.576,-4.44,-11.952001,-4.9620004 Q-11.328001,-5.4839997,-10.308001,-5.4839997 Q-9.348001,-5.4839997,-8.712,-4.9620004 Q-8.076,-4.44,-7.7640004,-3.4559999 Q-7.4520006,-2.4720001,-7.4520006,-1.0799999 z M-12.084001,-1.0799999 Q-12.084001,0.095999956,-11.910001,0.87600017 Q-11.736001,1.656,-11.346001,2.046 Q-10.956,2.436,-10.308001,2.436 Q-9.660001,2.436,-9.27,2.052 Q-8.880001,1.6680001,-8.700001,0.88199997 Q-8.52,0.095999956,-8.52,-1.0799999 Q-8.52,-2.256,-8.700001,-3.0300002 Q-8.880001,-3.804,-9.27,-4.194 Q-9.660001,-4.584,-10.308001,-4.584 Q-10.956,-4.584,-11.346001,-4.194 Q-11.736001,-3.804,-11.910001,-3.0300002 Q-12.084001,-2.256,-12.084001,-1.0799999 z M-0.5880008,-1.0799999 Q-0.5880008,-0.036000013,-0.7440009,0.78 Q-0.9000006,1.5960001,-1.2420006,2.1660001 Q-1.5840006,2.736,-2.1300006,3.036 Q-2.6760006,3.336,-3.4440007,3.336 Q-4.4040008,3.336,-5.034001,2.808 Q-5.6640005,2.2800002,-5.9700007,1.2900001 Q-6.276001,0.29999995,-6.276001,-1.0799999 Q-6.276001,-2.4720001,-5.994001,-3.4559999 Q-5.712001,-4.44,-5.088001,-4.9620004 Q-4.4640007,-5.4839997,-3.4440007,-5.4839997 Q-2.4840007,-5.4839997,-1.8480005,-4.9620004 Q-1.2120008,-4.44,-0.9000006,-3.4559999 Q-0.5880008,-2.4720001,-0.5880008,-1.0799999 z M-5.2200007,-1.0799999 Q-5.2200007,0.095999956,-5.046001,0.87600017 Q-4.8720007,1.656,-4.482001,2.046 Q-4.092001,2.436,-3.4440007,2.436 Q-2.796001,2.436,-2.4060006,2.052 Q-2.0160007,1.6680001,-1.8360009,0.88199997 Q-1.6560006,0.095999956,-1.6560006,-1.0799999 Q-1.6560006,-2.256,-1.8360009,-3.0300002 Q-2.0160007,-3.804,-2.4060006,-4.194 Q-2.796001,-4.584,-3.4440007,-4.584 Q-4.092001,-4.584,-4.482001,-4.194 Q-4.8720007,-3.804,-5.046001,-3.0300002 Q-5.2200007,-2.256,-5.2200007,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 73.6 209.35204)"/> +<path d="M-17.532001,-1.0799999 Q-17.532001,-0.036000013,-17.688,0.78 Q-17.844,1.5960001,-18.186,2.1660001 Q-18.528,2.736,-19.074001,3.036 Q-19.62,3.336,-20.388,3.336 Q-21.348,3.336,-21.978,2.808 Q-22.608,2.2800002,-22.914001,1.2900001 Q-23.220001,0.29999995,-23.220001,-1.0799999 Q-23.220001,-2.4720001,-22.938,-3.4559999 Q-22.656,-4.44,-22.032001,-4.9620004 Q-21.408,-5.4839997,-20.388,-5.4839997 Q-19.428001,-5.4839997,-18.792,-4.9620004 Q-18.156,-4.44,-17.844,-3.4559999 Q-17.532001,-2.4720001,-17.532001,-1.0799999 z M-22.164001,-1.0799999 Q-22.164001,0.095999956,-21.99,0.87600017 Q-21.816,1.656,-21.426,2.046 Q-21.036001,2.436,-20.388,2.436 Q-19.740002,2.436,-19.35,2.052 Q-18.960001,1.6680001,-18.78,0.88199997 Q-18.6,0.095999956,-18.6,-1.0799999 Q-18.6,-2.256,-18.78,-3.0300002 Q-18.960001,-3.804,-19.35,-4.194 Q-19.740002,-4.584,-20.388,-4.584 Q-21.036001,-4.584,-21.426,-4.194 Q-21.816,-3.804,-21.99,-3.0300002 Q-22.164001,-2.256,-22.164001,-1.0799999 z M-16.08,2.568 Q-16.08,2.124,-15.864,1.9440001 Q-15.648001,1.764,-15.348001,1.764 Q-15.036,1.764,-14.814,1.9440001 Q-14.592,2.124,-14.592,2.568 Q-14.592,3,-14.814,3.1920002 Q-15.036,3.384,-15.348001,3.384 Q-15.648001,3.384,-15.864,3.1920002 Q-16.08,3,-16.08,2.568 z M-7.4880004,3.216 L-13.152,3.216 L-13.152,2.3400002 L-10.908001,0.07200003 Q-10.26,-0.576,-9.816001,-1.0799999 Q-9.372001,-1.5840001,-9.144001,-2.0700002 Q-8.916,-2.5559998,-8.916,-3.132 Q-8.916,-3.8400002,-9.336,-4.206 Q-9.7560005,-4.572,-10.428,-4.572 Q-11.052,-4.572,-11.526001,-4.356 Q-12.000001,-4.14,-12.492001,-3.756 L-13.056001,-4.464 Q-12.72,-4.752,-12.318001,-4.98 Q-11.916,-5.2079997,-11.442,-5.3399997 Q-10.968,-5.4719996,-10.428,-5.4719996 Q-9.624001,-5.4719996,-9.048,-5.1959996 Q-8.472,-4.9199996,-8.154001,-4.41 Q-7.8360004,-3.9,-7.8360004,-3.192 Q-7.8360004,-2.52,-8.112,-1.9320002 Q-8.3880005,-1.3439999,-8.880001,-0.7739999 Q-9.372001,-0.204,-10.032001,0.444 L-11.820001,2.2080002 L-11.820001,2.256 L-7.4880004,2.256 L-7.4880004,3.216 z M-0.5880008,-1.0799999 Q-0.5880008,-0.036000013,-0.7440009,0.78 Q-0.9000006,1.5960001,-1.2420006,2.1660001 Q-1.5840006,2.736,-2.1300006,3.036 Q-2.6760006,3.336,-3.4440007,3.336 Q-4.4040008,3.336,-5.034001,2.808 Q-5.6640005,2.2800002,-5.9700007,1.2900001 Q-6.276001,0.29999995,-6.276001,-1.0799999 Q-6.276001,-2.4720001,-5.994001,-3.4559999 Q-5.712001,-4.44,-5.088001,-4.9620004 Q-4.4640007,-5.4839997,-3.4440007,-5.4839997 Q-2.4840007,-5.4839997,-1.8480005,-4.9620004 Q-1.2120008,-4.44,-0.9000006,-3.4559999 Q-0.5880008,-2.4720001,-0.5880008,-1.0799999 z M-5.2200007,-1.0799999 Q-5.2200007,0.095999956,-5.046001,0.87600017 Q-4.8720007,1.656,-4.482001,2.046 Q-4.092001,2.436,-3.4440007,2.436 Q-2.796001,2.436,-2.4060006,2.052 Q-2.0160007,1.6680001,-1.8360009,0.88199997 Q-1.6560006,0.095999956,-1.6560006,-1.0799999 Q-1.6560006,-2.256,-1.8360009,-3.0300002 Q-2.0160007,-3.804,-2.4060006,-4.194 Q-2.796001,-4.584,-3.4440007,-4.584 Q-4.092001,-4.584,-4.482001,-4.194 Q-4.8720007,-3.804,-5.046001,-3.0300002 Q-5.2200007,-2.256,-5.2200007,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 73.6 169.0907)"/> +<path d="M-17.532001,-1.0799999 Q-17.532001,-0.036000013,-17.688,0.78 Q-17.844,1.5960001,-18.186,2.1660001 Q-18.528,2.736,-19.074001,3.036 Q-19.62,3.336,-20.388,3.336 Q-21.348,3.336,-21.978,2.808 Q-22.608,2.2800002,-22.914001,1.2900001 Q-23.220001,0.29999995,-23.220001,-1.0799999 Q-23.220001,-2.4720001,-22.938,-3.4559999 Q-22.656,-4.44,-22.032001,-4.9620004 Q-21.408,-5.4839997,-20.388,-5.4839997 Q-19.428001,-5.4839997,-18.792,-4.9620004 Q-18.156,-4.44,-17.844,-3.4559999 Q-17.532001,-2.4720001,-17.532001,-1.0799999 z M-22.164001,-1.0799999 Q-22.164001,0.095999956,-21.99,0.87600017 Q-21.816,1.656,-21.426,2.046 Q-21.036001,2.436,-20.388,2.436 Q-19.740002,2.436,-19.35,2.052 Q-18.960001,1.6680001,-18.78,0.88199997 Q-18.6,0.095999956,-18.6,-1.0799999 Q-18.6,-2.256,-18.78,-3.0300002 Q-18.960001,-3.804,-19.35,-4.194 Q-19.740002,-4.584,-20.388,-4.584 Q-21.036001,-4.584,-21.426,-4.194 Q-21.816,-3.804,-21.99,-3.0300002 Q-22.164001,-2.256,-22.164001,-1.0799999 z M-16.08,2.568 Q-16.08,2.124,-15.864,1.9440001 Q-15.648001,1.764,-15.348001,1.764 Q-15.036,1.764,-14.814,1.9440001 Q-14.592,2.124,-14.592,2.568 Q-14.592,3,-14.814,3.1920002 Q-15.036,3.384,-15.348001,3.384 Q-15.648001,3.384,-15.864,3.1920002 Q-16.08,3,-16.08,2.568 z M-7.1040006,1.2720001 L-8.352001,1.2720001 L-8.352001,3.216 L-9.372001,3.216 L-9.372001,1.2720001 L-13.476001,1.2720001 L-13.476001,0.37199998 L-9.444,-5.4 L-8.352001,-5.4 L-8.352001,0.32400012 L-7.1040006,0.32400012 L-7.1040006,1.2720001 z M-9.372001,-2.376 Q-9.372001,-2.6880002,-9.366001,-2.946 Q-9.360001,-3.204,-9.348001,-3.4320002 Q-9.336,-3.6599998,-9.33,-3.87 Q-9.324001,-4.08,-9.312,-4.272 L-9.360001,-4.272 Q-9.456001,-4.044,-9.6,-3.7800002 Q-9.744,-3.5159998,-9.876,-3.336 L-12.444,0.32400012 L-9.372001,0.32400012 L-9.372001,-2.376 z M-0.5880008,-1.0799999 Q-0.5880008,-0.036000013,-0.7440009,0.78 Q-0.9000006,1.5960001,-1.2420006,2.1660001 Q-1.5840006,2.736,-2.1300006,3.036 Q-2.6760006,3.336,-3.4440007,3.336 Q-4.4040008,3.336,-5.034001,2.808 Q-5.6640005,2.2800002,-5.9700007,1.2900001 Q-6.276001,0.29999995,-6.276001,-1.0799999 Q-6.276001,-2.4720001,-5.994001,-3.4559999 Q-5.712001,-4.44,-5.088001,-4.9620004 Q-4.4640007,-5.4839997,-3.4440007,-5.4839997 Q-2.4840007,-5.4839997,-1.8480005,-4.9620004 Q-1.2120008,-4.44,-0.9000006,-3.4559999 Q-0.5880008,-2.4720001,-0.5880008,-1.0799999 z M-5.2200007,-1.0799999 Q-5.2200007,0.095999956,-5.046001,0.87600017 Q-4.8720007,1.656,-4.482001,2.046 Q-4.092001,2.436,-3.4440007,2.436 Q-2.796001,2.436,-2.4060006,2.052 Q-2.0160007,1.6680001,-1.8360009,0.88199997 Q-1.6560006,0.095999956,-1.6560006,-1.0799999 Q-1.6560006,-2.256,-1.8360009,-3.0300002 Q-2.0160007,-3.804,-2.4060006,-4.194 Q-2.796001,-4.584,-3.4440007,-4.584 Q-4.092001,-4.584,-4.482001,-4.194 Q-4.8720007,-3.804,-5.046001,-3.0300002 Q-5.2200007,-2.256,-5.2200007,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 73.6 128.82938)"/> +<path d="M-17.532001,-1.0799999 Q-17.532001,-0.036000013,-17.688,0.78 Q-17.844,1.5960001,-18.186,2.1660001 Q-18.528,2.736,-19.074001,3.036 Q-19.62,3.336,-20.388,3.336 Q-21.348,3.336,-21.978,2.808 Q-22.608,2.2800002,-22.914001,1.2900001 Q-23.220001,0.29999995,-23.220001,-1.0799999 Q-23.220001,-2.4720001,-22.938,-3.4559999 Q-22.656,-4.44,-22.032001,-4.9620004 Q-21.408,-5.4839997,-20.388,-5.4839997 Q-19.428001,-5.4839997,-18.792,-4.9620004 Q-18.156,-4.44,-17.844,-3.4559999 Q-17.532001,-2.4720001,-17.532001,-1.0799999 z M-22.164001,-1.0799999 Q-22.164001,0.095999956,-21.99,0.87600017 Q-21.816,1.656,-21.426,2.046 Q-21.036001,2.436,-20.388,2.436 Q-19.740002,2.436,-19.35,2.052 Q-18.960001,1.6680001,-18.78,0.88199997 Q-18.6,0.095999956,-18.6,-1.0799999 Q-18.6,-2.256,-18.78,-3.0300002 Q-18.960001,-3.804,-19.35,-4.194 Q-19.740002,-4.584,-20.388,-4.584 Q-21.036001,-4.584,-21.426,-4.194 Q-21.816,-3.804,-21.99,-3.0300002 Q-22.164001,-2.256,-22.164001,-1.0799999 z M-16.08,2.568 Q-16.08,2.124,-15.864,1.9440001 Q-15.648001,1.764,-15.348001,1.764 Q-15.036,1.764,-14.814,1.9440001 Q-14.592,2.124,-14.592,2.568 Q-14.592,3,-14.814,3.1920002 Q-15.036,3.384,-15.348001,3.384 Q-15.648001,3.384,-15.864,3.1920002 Q-16.08,3,-16.08,2.568 z M-13.068001,-0.444 Q-13.068001,-1.1879997,-12.966001,-1.908 Q-12.864,-2.6279998,-12.612,-3.27 Q-12.360001,-3.9120002,-11.916,-4.41 Q-11.472,-4.9079995,-10.794001,-5.19 Q-10.116001,-5.4719996,-9.144001,-5.4719996 Q-8.892,-5.4719996,-8.586,-5.4480004 Q-8.280001,-5.4240003,-8.088001,-5.364 L-8.088001,-4.464 Q-8.304001,-4.536,-8.574,-4.572 Q-8.844001,-4.608,-9.120001,-4.608 Q-9.948001,-4.608,-10.500001,-4.332 Q-11.052,-4.0559998,-11.370001,-3.5760002 Q-11.688001,-3.0960002,-11.832001,-2.4720001 Q-11.976001,-1.848,-12.012001,-1.1399999 L-11.940001,-1.1399999 Q-11.76,-1.428,-11.484001,-1.6560001 Q-11.208,-1.8839998,-10.818001,-2.0159998 Q-10.428,-2.1479998,-9.912001,-2.1479998 Q-9.168001,-2.1479998,-8.610001,-1.842 Q-8.052,-1.5359998,-7.7400007,-0.954 Q-7.4280005,-0.37199998,-7.4280005,0.4560001 Q-7.4280005,1.3440001,-7.7640004,1.9920001 Q-8.1,2.64,-8.706001,2.9880002 Q-9.312,3.336,-10.152,3.336 Q-10.764001,3.336,-11.292001,3.108 Q-11.820001,2.88,-12.222,2.4120002 Q-12.624001,1.9440001,-12.846001,1.23 Q-13.068001,0.51600003,-13.068001,-0.444 z M-10.1640005,2.448 Q-9.408001,2.448,-8.940001,1.962 Q-8.472,1.4760001,-8.472,0.4560001 Q-8.472,-0.3599999,-8.886001,-0.84000015 Q-9.300001,-1.3200002,-10.128,-1.3200002 Q-10.692,-1.3200002,-11.112,-1.086 Q-11.532001,-0.85199976,-11.766001,-0.49199986 Q-12.000001,-0.13199997,-12.000001,0.2520001 Q-12.000001,0.648,-11.886001,1.0320001 Q-11.772,1.416,-11.538,1.74 Q-11.304001,2.0640001,-10.962001,2.256 Q-10.620001,2.448,-10.1640005,2.448 z M-0.5880008,-1.0799999 Q-0.5880008,-0.036000013,-0.7440009,0.78 Q-0.9000006,1.5960001,-1.2420006,2.1660001 Q-1.5840006,2.736,-2.1300006,3.036 Q-2.6760006,3.336,-3.4440007,3.336 Q-4.4040008,3.336,-5.034001,2.808 Q-5.6640005,2.2800002,-5.9700007,1.2900001 Q-6.276001,0.29999995,-6.276001,-1.0799999 Q-6.276001,-2.4720001,-5.994001,-3.4559999 Q-5.712001,-4.44,-5.088001,-4.9620004 Q-4.4640007,-5.4839997,-3.4440007,-5.4839997 Q-2.4840007,-5.4839997,-1.8480005,-4.9620004 Q-1.2120008,-4.44,-0.9000006,-3.4559999 Q-0.5880008,-2.4720001,-0.5880008,-1.0799999 z M-5.2200007,-1.0799999 Q-5.2200007,0.095999956,-5.046001,0.87600017 Q-4.8720007,1.656,-4.482001,2.046 Q-4.092001,2.436,-3.4440007,2.436 Q-2.796001,2.436,-2.4060006,2.052 Q-2.0160007,1.6680001,-1.8360009,0.88199997 Q-1.6560006,0.095999956,-1.6560006,-1.0799999 Q-1.6560006,-2.256,-1.8360009,-3.0300002 Q-2.0160007,-3.804,-2.4060006,-4.194 Q-2.796001,-4.584,-3.4440007,-4.584 Q-4.092001,-4.584,-4.482001,-4.194 Q-4.8720007,-3.804,-5.046001,-3.0300002 Q-5.2200007,-2.256,-5.2200007,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 73.6 88.568054)"/> +<path d="M-17.532001,-1.0799999 Q-17.532001,-0.036000013,-17.688,0.78 Q-17.844,1.5960001,-18.186,2.1660001 Q-18.528,2.736,-19.074001,3.036 Q-19.62,3.336,-20.388,3.336 Q-21.348,3.336,-21.978,2.808 Q-22.608,2.2800002,-22.914001,1.2900001 Q-23.220001,0.29999995,-23.220001,-1.0799999 Q-23.220001,-2.4720001,-22.938,-3.4559999 Q-22.656,-4.44,-22.032001,-4.9620004 Q-21.408,-5.4839997,-20.388,-5.4839997 Q-19.428001,-5.4839997,-18.792,-4.9620004 Q-18.156,-4.44,-17.844,-3.4559999 Q-17.532001,-2.4720001,-17.532001,-1.0799999 z M-22.164001,-1.0799999 Q-22.164001,0.095999956,-21.99,0.87600017 Q-21.816,1.656,-21.426,2.046 Q-21.036001,2.436,-20.388,2.436 Q-19.740002,2.436,-19.35,2.052 Q-18.960001,1.6680001,-18.78,0.88199997 Q-18.6,0.095999956,-18.6,-1.0799999 Q-18.6,-2.256,-18.78,-3.0300002 Q-18.960001,-3.804,-19.35,-4.194 Q-19.740002,-4.584,-20.388,-4.584 Q-21.036001,-4.584,-21.426,-4.194 Q-21.816,-3.804,-21.99,-3.0300002 Q-22.164001,-2.256,-22.164001,-1.0799999 z M-16.08,2.568 Q-16.08,2.124,-15.864,1.9440001 Q-15.648001,1.764,-15.348001,1.764 Q-15.036,1.764,-14.814,1.9440001 Q-14.592,2.124,-14.592,2.568 Q-14.592,3,-14.814,3.1920002 Q-15.036,3.384,-15.348001,3.384 Q-15.648001,3.384,-15.864,3.1920002 Q-16.08,3,-16.08,2.568 z M-10.308001,-5.4719996 Q-9.552,-5.4719996,-8.976001,-5.2380004 Q-8.400001,-5.004,-8.070001,-4.548 Q-7.7400007,-4.092,-7.7400007,-3.42 Q-7.7400007,-2.9039998,-7.9620004,-2.52 Q-8.184,-2.1360002,-8.556001,-1.842 Q-8.928,-1.5479999,-9.372001,-1.3200002 Q-8.844001,-1.0679998,-8.412001,-0.75 Q-7.9800005,-0.43199992,-7.7220006,-0.0119998455 Q-7.4640007,0.408,-7.4640007,0.99600005 Q-7.4640007,1.7160001,-7.8120008,2.2380002 Q-8.160001,2.76,-8.790001,3.048 Q-9.42,3.336,-10.272,3.336 Q-11.196001,3.336,-11.838,3.0600002 Q-12.4800005,2.7840002,-12.81,2.2740002 Q-13.14,1.764,-13.14,1.0320001 Q-13.14,0.444,-12.894001,0.012000084 Q-12.648001,-0.41999984,-12.240001,-0.7319999 Q-11.832001,-1.0440001,-11.364,-1.2599998 Q-11.784,-1.5,-12.126,-1.8059998 Q-12.468,-2.112,-12.666,-2.508 Q-12.864,-2.9039998,-12.864,-3.4320002 Q-12.864,-4.092,-12.528001,-4.542 Q-12.192,-4.992,-11.616001,-5.232 Q-11.040001,-5.4719996,-10.308001,-5.4719996 z M-12.108001,1.0440001 Q-12.108001,1.6680001,-11.6640005,2.082 Q-11.22,2.496,-10.2960005,2.496 Q-9.42,2.496,-8.958,2.082 Q-8.496,1.6680001,-8.496,1.0080001 Q-8.496,0.58800006,-8.718,0.26999998 Q-8.940001,-0.04799986,-9.342001,-0.29999995 Q-9.744,-0.55200005,-10.2960005,-0.75600004 L-10.488001,-0.82800007 Q-11.016001,-0.5999999,-11.376,-0.33599997 Q-11.736001,-0.07200003,-11.922001,0.26399994 Q-12.108001,0.60000014,-12.108001,1.0440001 z M-10.320001,-4.62 Q-10.9800005,-4.62,-11.406,-4.302 Q-11.832001,-3.9840002,-11.832001,-3.3839998 Q-11.832001,-2.94,-11.622001,-2.6399999 Q-11.412001,-2.3400002,-11.052,-2.13 Q-10.692,-1.9200001,-10.26,-1.7280002 Q-9.84,-1.908,-9.51,-2.124 Q-9.18,-2.3400002,-8.982,-2.646 Q-8.784,-2.9520001,-8.784,-3.3839998 Q-8.784,-3.9840002,-9.204,-4.302 Q-9.624001,-4.62,-10.320001,-4.62 z M-0.5880008,-1.0799999 Q-0.5880008,-0.036000013,-0.7440009,0.78 Q-0.9000006,1.5960001,-1.2420006,2.1660001 Q-1.5840006,2.736,-2.1300006,3.036 Q-2.6760006,3.336,-3.4440007,3.336 Q-4.4040008,3.336,-5.034001,2.808 Q-5.6640005,2.2800002,-5.9700007,1.2900001 Q-6.276001,0.29999995,-6.276001,-1.0799999 Q-6.276001,-2.4720001,-5.994001,-3.4559999 Q-5.712001,-4.44,-5.088001,-4.9620004 Q-4.4640007,-5.4839997,-3.4440007,-5.4839997 Q-2.4840007,-5.4839997,-1.8480005,-4.9620004 Q-1.2120008,-4.44,-0.9000006,-3.4559999 Q-0.5880008,-2.4720001,-0.5880008,-1.0799999 z M-5.2200007,-1.0799999 Q-5.2200007,0.095999956,-5.046001,0.87600017 Q-4.8720007,1.656,-4.482001,2.046 Q-4.092001,2.436,-3.4440007,2.436 Q-2.796001,2.436,-2.4060006,2.052 Q-2.0160007,1.6680001,-1.8360009,0.88199997 Q-1.6560006,0.095999956,-1.6560006,-1.0799999 Q-1.6560006,-2.256,-1.8360009,-3.0300002 Q-2.0160007,-3.804,-2.4060006,-4.194 Q-2.796001,-4.584,-3.4440007,-4.584 Q-4.092001,-4.584,-4.482001,-4.194 Q-4.8720007,-3.804,-5.046001,-3.0300002 Q-5.2200007,-2.256,-5.2200007,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 73.6 48.306732)"/> +<path d="M-4.0640006,-13.264 L-2.5600004,-13.264 L-0.70400023,-8.384001 Q-0.54400015,-7.9520006,-0.40800023,-7.552 Q-0.2720003,-7.1520004,-0.16000032,-6.776 Q-0.048000336,-6.4000006,0.015999794,-6.0480003 L0.07999992,-6.0480003 Q0.17599964,-6.4480004,0.38399982,-7.0960007 Q0.592,-7.7440004,0.816,-8.400001 L2.56,-13.264 L4.0800004,-13.264 L0.38399982,-3.5040002 Q0.07999992,-2.704,-0.3280003,-2.104 Q-0.7360003,-1.504,-1.3200002,-1.1760001 Q-1.9040003,-0.84800005,-2.7360003,-0.84800005 Q-3.1200004,-0.84800005,-3.4080005,-0.888 Q-3.6960003,-0.928,-3.9040003,-0.9760001 L-3.9040003,-2.0960002 Q-3.7280004,-2.0640001,-3.4800005,-2.032 Q-3.2320004,-2,-2.9600005,-2 Q-2.4640002,-2,-2.1040003,-2.184 Q-1.7440002,-2.368,-1.4880004,-2.7120001 Q-1.2320004,-3.0560002,-1.0560002,-3.52 L-0.6080003,-4.656 L-4.0640006,-13.264 z" fill="#000000" stroke="none" transform="matrix(-0.00000004371139 -1 1 -0.00000004371139 41.792 122.932)"/> +<rect fill="none" height="205.864" stroke="#000000" stroke-width="1" width="234.59201" x="81.6" y="20"/> +<path d="M328.19202,225.864 L328.19202,225.36433 L348.19202,225.36433 L348.19202,225.864" fill="#440154" stroke="none"/> +<path d="M328.19202,225.36433 L328.19202,224.36499 L348.19202,224.36499 L348.19202,225.36433" fill="#440355" stroke="none"/> +<path d="M328.19202,224.36499 L328.19202,223.36566 L348.19202,223.36566 L348.19202,224.36499" fill="#440656" stroke="none"/> +<path d="M328.19202,223.36566 L328.19202,222.36632 L348.19202,222.36632 L348.19202,223.36566" fill="#450857" stroke="none"/> +<path d="M328.19202,222.36632 L328.19202,221.36697 L348.19202,221.36697 L348.19202,222.36632" fill="#450b58" stroke="none"/> +<path d="M328.19202,221.36697 L328.19202,220.36763 L348.19202,220.36763 L348.19202,221.36697" fill="#450d59" stroke="none"/> +<path d="M328.19202,220.36763 L328.19202,219.3683 L348.19202,219.3683 L348.19202,220.36763" fill="#45105a" stroke="none"/> +<path d="M328.19202,219.3683 L328.19202,218.36896 L348.19202,218.36896 L348.19202,219.3683" fill="#45125b" stroke="none"/> +<path d="M328.19202,218.36896 L328.19202,217.36961 L348.19202,217.36961 L348.19202,218.36896" fill="#45145c" stroke="none"/> +<path d="M328.19202,217.36961 L328.19202,216.37027 L348.19202,216.37027 L348.19202,217.36961" fill="#45165d" stroke="none"/> +<path d="M328.19202,216.37027 L328.19202,215.37094 L348.19202,215.37094 L348.19202,216.37027" fill="#46175e" stroke="none"/> +<path d="M328.19202,215.37094 L328.19202,214.3716 L348.19202,214.3716 L348.19202,215.37094" fill="#46195f" stroke="none"/> +<path d="M328.19202,214.3716 L328.19202,213.37225 L348.19202,213.37225 L348.19202,214.3716" fill="#461b60" stroke="none"/> +<path d="M328.19202,213.37225 L328.19202,212.37291 L348.19202,212.37291 L348.19202,213.37225" fill="#461c61" stroke="none"/> +<path d="M328.19202,212.37291 L328.19202,211.37358 L348.19202,211.37358 L348.19202,212.37291" fill="#461e62" stroke="none"/> +<path d="M328.19202,211.37358 L328.19202,210.37424 L348.19202,210.37424 L348.19202,211.37358" fill="#462063" stroke="none"/> +<path d="M328.19202,210.37424 L328.19202,209.3749 L348.19202,209.3749 L348.19202,210.37424" fill="#462164" stroke="none"/> +<path d="M328.19202,209.3749 L328.19202,208.37555 L348.19202,208.37555 L348.19202,209.3749" fill="#462365" stroke="none"/> +<path d="M328.19202,208.37555 L328.19202,207.37622 L348.19202,207.37622 L348.19202,208.37555" fill="#462466" stroke="none"/> +<path d="M328.19202,207.37622 L328.19202,206.37688 L348.19202,206.37688 L348.19202,207.37622" fill="#462667" stroke="none"/> +<path d="M328.19202,206.37688 L328.19202,205.37753 L348.19202,205.37753 L348.19202,206.37688" fill="#462769" stroke="none"/> +<path d="M328.19202,205.37753 L328.19202,204.3782 L348.19202,204.3782 L348.19202,205.37753" fill="#46296a" stroke="none"/> +<path d="M328.19202,204.3782 L328.19202,203.37886 L348.19202,203.37886 L348.19202,204.3782" fill="#462a6b" stroke="none"/> +<path d="M328.19202,203.37886 L328.19202,202.37952 L348.19202,202.37952 L348.19202,203.37886" fill="#462b6c" stroke="none"/> +<path d="M328.19202,202.37952 L328.19202,201.38017 L348.19202,201.38017 L348.19202,202.37952" fill="#452d6d" stroke="none"/> +<path d="M328.19202,201.38017 L328.19202,200.38084 L348.19202,200.38084 L348.19202,201.38017" fill="#452e6e" stroke="none"/> +<path d="M328.19202,200.38084 L328.19202,199.3815 L348.19202,199.3815 L348.19202,200.38084" fill="#45306f" stroke="none"/> +<path d="M328.19202,199.3815 L328.19202,198.38216 L348.19202,198.38216 L348.19202,199.3815" fill="#453170" stroke="none"/> +<path d="M328.19202,198.38216 L328.19202,197.38281 L348.19202,197.38281 L348.19202,198.38216" fill="#453271" stroke="none"/> +<path d="M328.19202,197.38281 L328.19202,196.38348 L348.19202,196.38348 L348.19202,197.38281" fill="#453472" stroke="none"/> +<path d="M328.19202,196.38348 L328.19202,195.38414 L348.19202,195.38414 L348.19202,196.38348" fill="#453573" stroke="none"/> +<path d="M328.19202,195.38414 L328.19202,194.3848 L348.19202,194.3848 L348.19202,195.38414" fill="#443674" stroke="none"/> +<path d="M328.19202,194.3848 L328.19202,193.38547 L348.19202,193.38547 L348.19202,194.3848" fill="#443875" stroke="none"/> +<path d="M328.19202,193.38547 L328.19202,192.38612 L348.19202,192.38612 L348.19202,193.38547" fill="#443976" stroke="none"/> +<path d="M328.19202,192.38612 L328.19202,191.38678 L348.19202,191.38678 L348.19202,192.38612" fill="#443a77" stroke="none"/> +<path d="M328.19202,191.38678 L328.19202,190.38744 L348.19202,190.38744 L348.19202,191.38678" fill="#433c78" stroke="none"/> +<path d="M328.19202,190.38744 L328.19202,189.38809 L348.19202,189.38809 L348.19202,190.38744" fill="#433d79" stroke="none"/> +<path d="M328.19202,189.38809 L328.19202,188.38876 L348.19202,188.38876 L348.19202,189.38809" fill="#433e7a" stroke="none"/> +<path d="M328.19202,188.38876 L328.19202,187.38942 L348.19202,187.38942 L348.19202,188.38876" fill="#42407b" stroke="none"/> +<path d="M328.19202,187.38942 L328.19202,186.39008 L348.19202,186.39008 L348.19202,187.38942" fill="#42417d" stroke="none"/> +<path d="M328.19202,186.39008 L328.19202,185.39075 L348.19202,185.39075 L348.19202,186.39008" fill="#42427e" stroke="none"/> +<path d="M328.19202,185.39075 L328.19202,184.3914 L348.19202,184.3914 L348.19202,185.39075" fill="#41437f" stroke="none"/> +<path d="M328.19202,184.3914 L328.19202,183.39206 L348.19202,183.39206 L348.19202,184.3914" fill="#414580" stroke="none"/> +<path d="M328.19202,183.39206 L328.19202,182.39273 L348.19202,182.39273 L348.19202,183.39206" fill="#404681" stroke="none"/> +<path d="M328.19202,182.39273 L328.19202,181.39339 L348.19202,181.39339 L348.19202,182.39273" fill="#404782" stroke="none"/> +<path d="M328.19202,181.39339 L328.19202,180.39404 L348.19202,180.39404 L348.19202,181.39339" fill="#3f4983" stroke="none"/> +<path d="M328.19202,180.39404 L328.19202,179.3947 L348.19202,179.3947 L348.19202,180.39404" fill="#3f4a84" stroke="none"/> +<path d="M328.19202,179.3947 L328.19202,178.39536 L348.19202,178.39536 L348.19202,179.3947" fill="#3e4b85" stroke="none"/> +<path d="M328.19202,178.39536 L328.19202,177.39603 L348.19202,177.39603 L348.19202,178.39536" fill="#3d4d86" stroke="none"/> +<path d="M328.19202,177.39603 L328.19202,176.39668 L348.19202,176.39668 L348.19202,177.39603" fill="#3d4e87" stroke="none"/> +<path d="M328.19202,176.39668 L328.19202,175.39734 L348.19202,175.39734 L348.19202,176.39668" fill="#3c4f88" stroke="none"/> +<path d="M328.19202,175.39734 L328.19202,174.39801 L348.19202,174.39801 L348.19202,175.39734" fill="#3b5089" stroke="none"/> +<path d="M328.19202,174.39801 L328.19202,173.39867 L348.19202,173.39867 L348.19202,174.39801" fill="#3b528a" stroke="none"/> +<path d="M328.19202,173.39867 L328.19202,172.39932 L348.19202,172.39932 L348.19202,173.39867" fill="#3b538a" stroke="none"/> +<path d="M328.19202,172.39932 L328.19202,171.39998 L348.19202,171.39998 L348.19202,172.39932" fill="#3b548a" stroke="none"/> +<path d="M328.19202,171.39998 L328.19202,170.40063 L348.19202,170.40063 L348.19202,171.39998" fill="#3a558a" stroke="none"/> +<path d="M328.19202,170.40063 L328.19202,169.4013 L348.19202,169.4013 L348.19202,170.40063" fill="#3a578a" stroke="none"/> +<path d="M328.19202,169.4013 L328.19202,168.40196 L348.19202,168.40196 L348.19202,169.4013" fill="#3a588b" stroke="none"/> +<path d="M328.19202,168.40196 L328.19202,167.40262 L348.19202,167.40262 L348.19202,168.40196" fill="#3a598b" stroke="none"/> +<path d="M328.19202,167.40262 L328.19202,166.40329 L348.19202,166.40329 L348.19202,167.40262" fill="#3a5a8b" stroke="none"/> +<path d="M328.19202,166.40329 L328.19202,165.40395 L348.19202,165.40395 L348.19202,166.40329" fill="#395c8b" stroke="none"/> +<path d="M328.19202,165.40395 L328.19202,164.4046 L348.19202,164.4046 L348.19202,165.40395" fill="#395d8b" stroke="none"/> +<path d="M328.19202,164.4046 L328.19202,163.40527 L348.19202,163.40527 L348.19202,164.4046" fill="#395e8b" stroke="none"/> +<path d="M328.19202,163.40527 L328.19202,162.40593 L348.19202,162.40593 L348.19202,163.40527" fill="#385f8b" stroke="none"/> +<path d="M328.19202,162.40593 L328.19202,161.40659 L348.19202,161.40659 L348.19202,162.40593" fill="#38608b" stroke="none"/> +<path d="M328.19202,161.40659 L328.19202,160.40726 L348.19202,160.40726 L348.19202,161.40659" fill="#38628b" stroke="none"/> +<path d="M328.19202,160.40726 L328.19202,159.4079 L348.19202,159.4079 L348.19202,160.40726" fill="#38638b" stroke="none"/> +<path d="M328.19202,159.4079 L328.19202,158.40857 L348.19202,158.40857 L348.19202,159.4079" fill="#37648b" stroke="none"/> +<path d="M328.19202,158.40857 L328.19202,157.40923 L348.19202,157.40923 L348.19202,158.40857" fill="#37658c" stroke="none"/> +<path d="M328.19202,157.40923 L328.19202,156.40988 L348.19202,156.40988 L348.19202,157.40923" fill="#37678c" stroke="none"/> +<path d="M328.19202,156.40988 L328.19202,155.41055 L348.19202,155.41055 L348.19202,156.40988" fill="#36688c" stroke="none"/> +<path d="M328.19202,155.41055 L328.19202,154.41121 L348.19202,154.41121 L348.19202,155.41055" fill="#36698c" stroke="none"/> +<path d="M328.19202,154.41121 L328.19202,153.41187 L348.19202,153.41187 L348.19202,154.41121" fill="#366a8c" stroke="none"/> +<path d="M328.19202,153.41187 L328.19202,152.41254 L348.19202,152.41254 L348.19202,153.41187" fill="#356b8c" stroke="none"/> +<path d="M328.19202,152.41254 L328.19202,151.41318 L348.19202,151.41318 L348.19202,152.41254" fill="#356d8c" stroke="none"/> +<path d="M328.19202,151.41318 L328.19202,150.41385 L348.19202,150.41385 L348.19202,151.41318" fill="#346e8c" stroke="none"/> +<path d="M328.19202,150.41385 L328.19202,149.4145 L348.19202,149.4145 L348.19202,150.41385" fill="#346f8c" stroke="none"/> +<path d="M328.19202,149.4145 L328.19202,148.41516 L348.19202,148.41516 L348.19202,149.4145" fill="#34708c" stroke="none"/> +<path d="M328.19202,148.41516 L328.19202,147.41583 L348.19202,147.41583 L348.19202,148.41516" fill="#33718c" stroke="none"/> +<path d="M328.19202,147.41583 L328.19202,146.41649 L348.19202,146.41649 L348.19202,147.41583" fill="#33738c" stroke="none"/> +<path d="M328.19202,146.41649 L328.19202,145.41714 L348.19202,145.41714 L348.19202,146.41649" fill="#32748c" stroke="none"/> +<path d="M328.19202,145.41714 L328.19202,144.41782 L348.19202,144.41782 L348.19202,145.41714" fill="#32758c" stroke="none"/> +<path d="M328.19202,144.41782 L328.19202,143.41847 L348.19202,143.41847 L348.19202,144.41782" fill="#31768c" stroke="none"/> +<path d="M328.19202,143.41847 L328.19202,142.41913 L348.19202,142.41913 L348.19202,143.41847" fill="#31778c" stroke="none"/> +<path d="M328.19202,142.41913 L328.19202,141.4198 L348.19202,141.4198 L348.19202,142.41913" fill="#30788c" stroke="none"/> +<path d="M328.19202,141.4198 L328.19202,140.42044 L348.19202,140.42044 L348.19202,141.4198" fill="#2f7a8c" stroke="none"/> +<path d="M328.19202,140.42044 L328.19202,139.42111 L348.19202,139.42111 L348.19202,140.42044" fill="#2f7b8c" stroke="none"/> +<path d="M328.19202,139.42111 L328.19202,138.42177 L348.19202,138.42177 L348.19202,139.42111" fill="#2e7c8c" stroke="none"/> +<path d="M328.19202,138.42177 L328.19202,137.42242 L348.19202,137.42242 L348.19202,138.42177" fill="#2e7d8c" stroke="none"/> +<path d="M328.19202,137.42242 L328.19202,136.4231 L348.19202,136.4231 L348.19202,137.42242" fill="#2d7e8c" stroke="none"/> +<path d="M328.19202,136.4231 L328.19202,135.42375 L348.19202,135.42375 L348.19202,136.4231" fill="#2c808c" stroke="none"/> +<path d="M328.19202,135.42375 L328.19202,134.42441 L348.19202,134.42441 L348.19202,135.42375" fill="#2b818c" stroke="none"/> +<path d="M328.19202,134.42441 L328.19202,133.42508 L348.19202,133.42508 L348.19202,134.42441" fill="#2b828c" stroke="none"/> +<path d="M328.19202,133.42508 L328.19202,132.42572 L348.19202,132.42572 L348.19202,133.42508" fill="#2a838c" stroke="none"/> +<path d="M328.19202,132.42572 L328.19202,131.42639 L348.19202,131.42639 L348.19202,132.42572" fill="#29848c" stroke="none"/> +<path d="M328.19202,131.42639 L328.19202,130.42705 L348.19202,130.42705 L348.19202,131.42639" fill="#28868c" stroke="none"/> +<path d="M328.19202,130.42705 L328.19202,129.4277 L348.19202,129.4277 L348.19202,130.42705" fill="#27878c" stroke="none"/> +<path d="M328.19202,129.4277 L328.19202,128.42838 L348.19202,128.42838 L348.19202,129.4277" fill="#26888c" stroke="none"/> +<path d="M328.19202,128.42838 L328.19202,127.42902 L348.19202,127.42902 L348.19202,128.42838" fill="#26898c" stroke="none"/> +<path d="M328.19202,127.42902 L328.19202,126.42969 L348.19202,126.42969 L348.19202,127.42902" fill="#258a8c" stroke="none"/> +<path d="M328.19202,126.42969 L328.19202,125.43034 L348.19202,125.43034 L348.19202,126.42969" fill="#238b8c" stroke="none"/> +<path d="M328.19202,125.43034 L328.19202,124.43101 L348.19202,124.43101 L348.19202,125.43034" fill="#228d8c" stroke="none"/> +<path d="M328.19202,124.43101 L328.19202,123.43166 L348.19202,123.43166 L348.19202,124.43101" fill="#218e8c" stroke="none"/> +<path d="M328.19202,123.43166 L328.19202,122.43233 L348.19202,122.43233 L348.19202,123.43166" fill="#208f8c" stroke="none"/> +<path d="M328.19202,122.43233 L328.19202,121.43298 L348.19202,121.43298 L348.19202,122.43233" fill="#21908b" stroke="none"/> +<path d="M328.19202,121.43298 L328.19202,120.43365 L348.19202,120.43365 L348.19202,121.43298" fill="#23918b" stroke="none"/> +<path d="M328.19202,120.43365 L328.19202,119.4343 L348.19202,119.4343 L348.19202,120.43365" fill="#24928a" stroke="none"/> +<path d="M328.19202,119.4343 L328.19202,118.43497 L348.19202,118.43497 L348.19202,119.4343" fill="#25948a" stroke="none"/> +<path d="M328.19202,118.43497 L328.19202,117.43562 L348.19202,117.43562 L348.19202,118.43497" fill="#269589" stroke="none"/> +<path d="M328.19202,117.43562 L328.19202,116.43629 L348.19202,116.43629 L348.19202,117.43562" fill="#279689" stroke="none"/> +<path d="M328.19202,116.43629 L328.19202,115.43694 L348.19202,115.43694 L348.19202,116.43629" fill="#299788" stroke="none"/> +<path d="M328.19202,115.43694 L328.19202,114.43761 L348.19202,114.43761 L348.19202,115.43694" fill="#2a9888" stroke="none"/> +<path d="M328.19202,114.43761 L328.19202,113.43827 L348.19202,113.43827 L348.19202,114.43761" fill="#2b9987" stroke="none"/> +<path d="M328.19202,113.43827 L328.19202,112.43893 L348.19202,112.43893 L348.19202,113.43827" fill="#2c9a86" stroke="none"/> +<path d="M328.19202,112.43893 L328.19202,111.43959 L348.19202,111.43959 L348.19202,112.43893" fill="#2d9b86" stroke="none"/> +<path d="M328.19202,111.43959 L328.19202,110.44025 L348.19202,110.44025 L348.19202,111.43959" fill="#2f9c85" stroke="none"/> +<path d="M328.19202,110.44025 L328.19202,109.44091 L348.19202,109.44091 L348.19202,110.44025" fill="#309e85" stroke="none"/> +<path d="M328.19202,109.44091 L328.19202,108.44157 L348.19202,108.44157 L348.19202,109.44091" fill="#319f84" stroke="none"/> +<path d="M328.19202,108.44157 L328.19202,107.44223 L348.19202,107.44223 L348.19202,108.44157" fill="#32a083" stroke="none"/> +<path d="M328.19202,107.44223 L328.19202,106.44289 L348.19202,106.44289 L348.19202,107.44223" fill="#33a183" stroke="none"/> +<path d="M328.19202,106.44289 L328.19202,105.44355 L348.19202,105.44355 L348.19202,106.44289" fill="#34a282" stroke="none"/> +<path d="M328.19202,105.44355 L328.19202,104.44421 L348.19202,104.44421 L348.19202,105.44355" fill="#36a381" stroke="none"/> +<path d="M328.19202,104.44421 L328.19202,103.44487 L348.19202,103.44487 L348.19202,104.44421" fill="#37a481" stroke="none"/> +<path d="M328.19202,103.44487 L328.19202,102.445526 L348.19202,102.445526 L348.19202,103.44487" fill="#38a580" stroke="none"/> +<path d="M328.19202,102.445526 L328.19202,101.44619 L348.19202,101.44619 L348.19202,102.445526" fill="#39a67f" stroke="none"/> +<path d="M328.19202,101.44619 L328.19202,100.446846 L348.19202,100.446846 L348.19202,101.44619" fill="#3aa87f" stroke="none"/> +<path d="M328.19202,100.446846 L328.19202,99.44751 L348.19202,99.44751 L348.19202,100.446846" fill="#3ba97e" stroke="none"/> +<path d="M328.19202,99.44751 L328.19202,98.448166 L348.19202,98.448166 L348.19202,99.44751" fill="#3caa7d" stroke="none"/> +<path d="M328.19202,98.448166 L328.19202,97.44883 L348.19202,97.44883 L348.19202,98.448166" fill="#3dab7c" stroke="none"/> +<path d="M328.19202,97.44883 L328.19202,96.449486 L348.19202,96.449486 L348.19202,97.44883" fill="#3fac7b" stroke="none"/> +<path d="M328.19202,96.449486 L328.19202,95.45016 L348.19202,95.45016 L348.19202,96.449486" fill="#40ad7b" stroke="none"/> +<path d="M328.19202,95.45016 L328.19202,94.45081 L348.19202,94.45081 L348.19202,95.45016" fill="#41ae7a" stroke="none"/> +<path d="M328.19202,94.45081 L328.19202,93.45147 L348.19202,93.45147 L348.19202,94.45081" fill="#42af79" stroke="none"/> +<path d="M328.19202,93.45147 L328.19202,92.452126 L348.19202,92.452126 L348.19202,93.45147" fill="#43b078" stroke="none"/> +<path d="M328.19202,92.452126 L328.19202,91.4528 L348.19202,91.4528 L348.19202,92.452126" fill="#44b177" stroke="none"/> +<path d="M328.19202,91.4528 L328.19202,90.45345 L348.19202,90.45345 L348.19202,91.4528" fill="#45b377" stroke="none"/> +<path d="M328.19202,90.45345 L328.19202,89.45411 L348.19202,89.45411 L348.19202,90.45345" fill="#46b476" stroke="none"/> +<path d="M328.19202,89.45411 L328.19202,88.454765 L348.19202,88.454765 L348.19202,89.45411" fill="#48b575" stroke="none"/> +<path d="M328.19202,88.454765 L328.19202,87.45544 L348.19202,87.45544 L348.19202,88.454765" fill="#49b674" stroke="none"/> +<path d="M328.19202,87.45544 L328.19202,86.45609 L348.19202,86.45609 L348.19202,87.45544" fill="#4ab773" stroke="none"/> +<path d="M328.19202,86.45609 L328.19202,85.45675 L348.19202,85.45675 L348.19202,86.45609" fill="#4bb872" stroke="none"/> +<path d="M328.19202,85.45675 L328.19202,84.457405 L348.19202,84.457405 L348.19202,85.45675" fill="#4cb971" stroke="none"/> +<path d="M328.19202,84.457405 L328.19202,83.45808 L348.19202,83.45808 L348.19202,84.457405" fill="#4dba70" stroke="none"/> +<path d="M328.19202,83.45808 L328.19202,82.45873 L348.19202,82.45873 L348.19202,83.45808" fill="#4ebb6f" stroke="none"/> +<path d="M328.19202,82.45873 L328.19202,81.45939 L348.19202,81.45939 L348.19202,82.45873" fill="#4fbc6e" stroke="none"/> +<path d="M328.19202,81.45939 L328.19202,80.46006 L348.19202,80.46006 L348.19202,81.45939" fill="#50be6d" stroke="none"/> +<path d="M328.19202,80.46006 L328.19202,79.46072 L348.19202,79.46072 L348.19202,80.46006" fill="#52bf6c" stroke="none"/> +<path d="M328.19202,79.46072 L328.19202,78.46137 L348.19202,78.46137 L348.19202,79.46072" fill="#53c06b" stroke="none"/> +<path d="M328.19202,78.46137 L328.19202,77.46203 L348.19202,77.46203 L348.19202,78.46137" fill="#54c16a" stroke="none"/> +<path d="M328.19202,77.46203 L328.19202,76.4627 L348.19202,76.4627 L348.19202,77.46203" fill="#55c269" stroke="none"/> +<path d="M328.19202,76.4627 L328.19202,75.463356 L348.19202,75.463356 L348.19202,76.4627" fill="#56c368" stroke="none"/> +<path d="M328.19202,75.463356 L328.19202,74.46401 L348.19202,74.46401 L348.19202,75.463356" fill="#57c466" stroke="none"/> +<path d="M328.19202,74.46401 L328.19202,73.46467 L348.19202,73.46467 L348.19202,74.46401" fill="#58c565" stroke="none"/> +<path d="M328.19202,73.46467 L328.19202,72.46534 L348.19202,72.46534 L348.19202,73.46467" fill="#59c664" stroke="none"/> +<path d="M328.19202,72.46534 L328.19202,71.465996 L348.19202,71.465996 L348.19202,72.46534" fill="#5ac763" stroke="none"/> +<path d="M328.19202,71.465996 L328.19202,70.46665 L348.19202,70.46665 L348.19202,71.465996" fill="#5dc862" stroke="none"/> +<path d="M328.19202,70.46665 L328.19202,69.46731 L348.19202,69.46731 L348.19202,70.46665" fill="#62c961" stroke="none"/> +<path d="M328.19202,69.46731 L328.19202,68.46798 L348.19202,68.46798 L348.19202,69.46731" fill="#66ca61" stroke="none"/> +<path d="M328.19202,68.46798 L328.19202,67.468636 L348.19202,67.468636 L348.19202,68.46798" fill="#6aca60" stroke="none"/> +<path d="M328.19202,67.468636 L328.19202,66.46929 L348.19202,66.46929 L348.19202,67.468636" fill="#6ecb5f" stroke="none"/> +<path d="M328.19202,66.46929 L328.19202,65.46995 L348.19202,65.46995 L348.19202,66.46929" fill="#72cc5f" stroke="none"/> +<path d="M328.19202,65.46995 L328.19202,64.47062 L348.19202,64.47062 L348.19202,65.46995" fill="#76cc5e" stroke="none"/> +<path d="M328.19202,64.47062 L328.19202,63.47128 L348.19202,63.47128 L348.19202,64.47062" fill="#79cd5e" stroke="none"/> +<path d="M328.19202,63.47128 L328.19202,62.471935 L348.19202,62.471935 L348.19202,63.47128" fill="#7dce5d" stroke="none"/> +<path d="M328.19202,62.471935 L328.19202,61.472607 L348.19202,61.472607 L348.19202,62.471935" fill="#80ce5c" stroke="none"/> +<path d="M328.19202,61.472607 L328.19202,60.473263 L348.19202,60.473263 L348.19202,61.472607" fill="#84cf5c" stroke="none"/> +<path d="M328.19202,60.473263 L328.19202,59.47392 L348.19202,59.47392 L348.19202,60.473263" fill="#87d05b" stroke="none"/> +<path d="M328.19202,59.47392 L328.19202,58.474575 L348.19202,58.474575 L348.19202,59.47392" fill="#8bd05a" stroke="none"/> +<path d="M328.19202,58.474575 L328.19202,57.475246 L348.19202,57.475246 L348.19202,58.474575" fill="#8ed159" stroke="none"/> +<path d="M328.19202,57.475246 L328.19202,56.475903 L348.19202,56.475903 L348.19202,57.475246" fill="#91d259" stroke="none"/> +<path d="M328.19202,56.475903 L328.19202,55.47656 L348.19202,55.47656 L348.19202,56.475903" fill="#95d258" stroke="none"/> +<path d="M328.19202,55.47656 L328.19202,54.477215 L348.19202,54.477215 L348.19202,55.47656" fill="#98d357" stroke="none"/> +<path d="M328.19202,54.477215 L328.19202,53.477886 L348.19202,53.477886 L348.19202,54.477215" fill="#9bd456" stroke="none"/> +<path d="M328.19202,53.477886 L328.19202,52.478542 L348.19202,52.478542 L348.19202,53.477886" fill="#9ed456" stroke="none"/> +<path d="M328.19202,52.478542 L328.19202,51.4792 L348.19202,51.4792 L348.19202,52.478542" fill="#a1d555" stroke="none"/> +<path d="M328.19202,51.4792 L328.19202,50.479855 L348.19202,50.479855 L348.19202,51.4792" fill="#a5d554" stroke="none"/> +<path d="M328.19202,50.479855 L328.19202,49.480526 L348.19202,49.480526 L348.19202,50.479855" fill="#a8d653" stroke="none"/> +<path d="M328.19202,49.480526 L328.19202,48.481182 L348.19202,48.481182 L348.19202,49.480526" fill="#abd752" stroke="none"/> +<path d="M328.19202,48.481182 L328.19202,47.48184 L348.19202,47.48184 L348.19202,48.481182" fill="#aed751" stroke="none"/> +<path d="M328.19202,47.48184 L328.19202,46.48251 L348.19202,46.48251 L348.19202,47.48184" fill="#b1d850" stroke="none"/> +<path d="M328.19202,46.48251 L328.19202,45.483166 L348.19202,45.483166 L348.19202,46.48251" fill="#b4d84f" stroke="none"/> +<path d="M328.19202,45.483166 L328.19202,44.48382 L348.19202,44.48382 L348.19202,45.483166" fill="#b7d94e" stroke="none"/> +<path d="M328.19202,44.48382 L328.19202,43.484478 L348.19202,43.484478 L348.19202,44.48382" fill="#bada4d" stroke="none"/> +<path d="M328.19202,43.484478 L328.19202,42.48515 L348.19202,42.48515 L348.19202,43.484478" fill="#bdda4c" stroke="none"/> +<path d="M328.19202,42.48515 L328.19202,41.485806 L348.19202,41.485806 L348.19202,42.48515" fill="#c0db4b" stroke="none"/> +<path d="M328.19202,41.485806 L328.19202,40.48646 L348.19202,40.48646 L348.19202,41.485806" fill="#c2db4a" stroke="none"/> +<path d="M328.19202,40.48646 L328.19202,39.487118 L348.19202,39.487118 L348.19202,40.48646" fill="#c5dc49" stroke="none"/> +<path d="M328.19202,39.487118 L328.19202,38.48779 L348.19202,38.48779 L348.19202,39.487118" fill="#c8dd47" stroke="none"/> +<path d="M328.19202,38.48779 L328.19202,37.488445 L348.19202,37.488445 L348.19202,38.48779" fill="#cbdd46" stroke="none"/> +<path d="M328.19202,37.488445 L328.19202,36.4891 L348.19202,36.4891 L348.19202,37.488445" fill="#cede45" stroke="none"/> +<path d="M328.19202,36.4891 L328.19202,35.489758 L348.19202,35.489758 L348.19202,36.4891" fill="#d1de44" stroke="none"/> +<path d="M328.19202,35.489758 L328.19202,34.49043 L348.19202,34.49043 L348.19202,35.489758" fill="#d4df42" stroke="none"/> +<path d="M328.19202,34.49043 L328.19202,33.491085 L348.19202,33.491085 L348.19202,34.49043" fill="#d6df41" stroke="none"/> +<path d="M328.19202,33.491085 L328.19202,32.49174 L348.19202,32.49174 L348.19202,33.491085" fill="#d9e03f" stroke="none"/> +<path d="M328.19202,32.49174 L328.19202,31.49241 L348.19202,31.49241 L348.19202,32.49174" fill="#dce13e" stroke="none"/> +<path d="M328.19202,31.49241 L328.19202,30.493067 L348.19202,30.493067 L348.19202,31.49241" fill="#dfe13c" stroke="none"/> +<path d="M328.19202,30.493067 L328.19202,29.493723 L348.19202,29.493723 L348.19202,30.493067" fill="#e2e23b" stroke="none"/> +<path d="M328.19202,29.493723 L328.19202,28.494379 L348.19202,28.494379 L348.19202,29.493723" fill="#e4e239" stroke="none"/> +<path d="M328.19202,28.494379 L328.19202,27.49505 L348.19202,27.49505 L348.19202,28.494379" fill="#e7e337" stroke="none"/> +<path d="M328.19202,27.49505 L328.19202,26.495707 L348.19202,26.495707 L348.19202,27.49505" fill="#eae335" stroke="none"/> +<path d="M328.19202,26.495707 L328.19202,25.496363 L348.19202,25.496363 L348.19202,26.495707" fill="#ede433" stroke="none"/> +<path d="M328.19202,25.496363 L328.19202,24.497019 L348.19202,24.497019 L348.19202,25.496363" fill="#efe431" stroke="none"/> +<path d="M328.19202,24.497019 L328.19202,23.49769 L348.19202,23.49769 L348.19202,24.497019" fill="#f2e52f" stroke="none"/> +<path d="M328.19202,23.49769 L328.19202,22.498346 L348.19202,22.498346 L348.19202,23.49769" fill="#f5e52c" stroke="none"/> +<path d="M328.19202,22.498346 L328.19202,21.499002 L348.19202,21.499002 L348.19202,22.498346" fill="#f8e62a" stroke="none"/> +<path d="M328.19202,21.499002 L328.19202,20.499659 L348.19202,20.499659 L348.19202,21.499002" fill="#fae627" stroke="none"/> +<path d="M328.19202,20.499659 L328.19202,20 L348.19202,20 L348.19202,20.499659" fill="#fde724" stroke="none"/> +<path d="M328.19202,20 L348.19202,20 L348.19202,225.864 L328.19202,225.864 z" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M348.19202,214.44878 L352.19202,214.44878" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M6.276,-1.0799999 Q6.276,-0.036000013,6.12,0.78 Q5.964,1.5960001,5.622,2.1660001 Q5.28,2.736,4.734,3.036 Q4.188,3.336,3.42,3.336 Q2.46,3.336,1.83,2.808 Q1.2,2.2800002,0.894,1.2900001 Q0.588,0.29999995,0.588,-1.0799999 Q0.588,-2.4720001,0.87,-3.4559999 Q1.152,-4.44,1.776,-4.9620004 Q2.4,-5.4839997,3.42,-5.4839997 Q4.38,-5.4839997,5.0160003,-4.9620004 Q5.652,-4.44,5.964,-3.4559999 Q6.276,-2.4720001,6.276,-1.0799999 z M1.644,-1.0799999 Q1.644,0.095999956,1.818,0.87600017 Q1.992,1.656,2.382,2.046 Q2.772,2.436,3.42,2.436 Q4.068,2.436,4.458,2.052 Q4.848,1.6680001,5.028,0.88199997 Q5.208,0.095999956,5.208,-1.0799999 Q5.208,-2.256,5.028,-3.0300002 Q4.848,-3.804,4.458,-4.194 Q4.068,-4.584,3.42,-4.584 Q2.772,-4.584,2.382,-4.194 Q1.992,-3.804,1.818,-3.0300002 Q1.644,-2.256,1.644,-1.0799999 z M7.7279997,2.568 Q7.7279997,2.124,7.944,1.9440001 Q8.16,1.764,8.46,1.764 Q8.771999,1.764,8.9939995,1.9440001 Q9.216,2.124,9.216,2.568 Q9.216,3,8.9939995,3.1920002 Q8.771999,3.384,8.46,3.384 Q8.16,3.384,7.944,3.1920002 Q7.7279997,3,7.7279997,2.568 z M14.34,3.216 L13.308,3.216 L13.308,-2.7719998 Q13.308,-3.12,13.314,-3.3600001 Q13.32,-3.6,13.332,-3.81 Q13.344,-4.02,13.356,-4.248 Q13.164,-4.0559998,13.007999,-3.9239998 Q12.852,-3.7919998,12.6119995,-3.5879998 L11.7,-2.8439999 L11.148,-3.552 L13.464,-5.3519998 L14.34,-5.3519998 L14.34,3.216 z M23.220001,-1.0799999 Q23.220001,-0.036000013,23.064,0.78 Q22.908,1.5960001,22.566,2.1660001 Q22.224,2.736,21.678001,3.036 Q21.132,3.336,20.364,3.336 Q19.404,3.336,18.774,2.808 Q18.144001,2.2800002,17.838,1.2900001 Q17.532,0.29999995,17.532,-1.0799999 Q17.532,-2.4720001,17.814001,-3.4559999 Q18.096,-4.44,18.720001,-4.9620004 Q19.344,-5.4839997,20.364,-5.4839997 Q21.324001,-5.4839997,21.960001,-4.9620004 Q22.596,-4.44,22.908,-3.4559999 Q23.220001,-2.4720001,23.220001,-1.0799999 z M18.588001,-1.0799999 Q18.588001,0.095999956,18.762001,0.87600017 Q18.936,1.656,19.326,2.046 Q19.716,2.436,20.364,2.436 Q21.012001,2.436,21.402,2.052 Q21.792,1.6680001,21.972,0.88199997 Q22.152,0.095999956,22.152,-1.0799999 Q22.152,-2.256,21.972,-3.0300002 Q21.792,-3.804,21.402,-4.194 Q21.012001,-4.584,20.364,-4.584 Q19.716,-4.584,19.326,-4.194 Q18.936,-3.804,18.762001,-3.0300002 Q18.588001,-2.256,18.588001,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 356.19202 214.44878)"/> +<path d="M348.19202,191.87996 L352.19202,191.87996" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M6.276,-1.0799999 Q6.276,-0.036000013,6.12,0.78 Q5.964,1.5960001,5.622,2.1660001 Q5.28,2.736,4.734,3.036 Q4.188,3.336,3.42,3.336 Q2.46,3.336,1.83,2.808 Q1.2,2.2800002,0.894,1.2900001 Q0.588,0.29999995,0.588,-1.0799999 Q0.588,-2.4720001,0.87,-3.4559999 Q1.152,-4.44,1.776,-4.9620004 Q2.4,-5.4839997,3.42,-5.4839997 Q4.38,-5.4839997,5.0160003,-4.9620004 Q5.652,-4.44,5.964,-3.4559999 Q6.276,-2.4720001,6.276,-1.0799999 z M1.644,-1.0799999 Q1.644,0.095999956,1.818,0.87600017 Q1.992,1.656,2.382,2.046 Q2.772,2.436,3.42,2.436 Q4.068,2.436,4.458,2.052 Q4.848,1.6680001,5.028,0.88199997 Q5.208,0.095999956,5.208,-1.0799999 Q5.208,-2.256,5.028,-3.0300002 Q4.848,-3.804,4.458,-4.194 Q4.068,-4.584,3.42,-4.584 Q2.772,-4.584,2.382,-4.194 Q1.992,-3.804,1.818,-3.0300002 Q1.644,-2.256,1.644,-1.0799999 z M7.7279997,2.568 Q7.7279997,2.124,7.944,1.9440001 Q8.16,1.764,8.46,1.764 Q8.771999,1.764,8.9939995,1.9440001 Q9.216,2.124,9.216,2.568 Q9.216,3,8.9939995,3.1920002 Q8.771999,3.384,8.46,3.384 Q8.16,3.384,7.944,3.1920002 Q7.7279997,3,7.7279997,2.568 z M16.32,3.216 L10.656,3.216 L10.656,2.3400002 L12.9,0.07200003 Q13.548,-0.576,13.992,-1.0799999 Q14.436,-1.5840001,14.664,-2.0700002 Q14.892,-2.5559998,14.892,-3.132 Q14.892,-3.8400002,14.472,-4.206 Q14.052,-4.572,13.38,-4.572 Q12.7560005,-4.572,12.282,-4.356 Q11.808,-4.14,11.316,-3.756 L10.752,-4.464 Q11.088,-4.752,11.49,-4.98 Q11.892,-5.2079997,12.366,-5.3399997 Q12.84,-5.4719996,13.38,-5.4719996 Q14.184,-5.4719996,14.76,-5.1959996 Q15.336,-4.9199996,15.653999,-4.41 Q15.972,-3.9,15.972,-3.192 Q15.972,-2.52,15.696,-1.9320002 Q15.42,-1.3439999,14.9279995,-0.7739999 Q14.436,-0.204,13.776,0.444 L11.988,2.2080002 L11.988,2.256 L16.32,2.256 L16.32,3.216 z M23.220001,-1.0799999 Q23.220001,-0.036000013,23.064,0.78 Q22.908,1.5960001,22.566,2.1660001 Q22.224,2.736,21.678001,3.036 Q21.132,3.336,20.364,3.336 Q19.404,3.336,18.774,2.808 Q18.144001,2.2800002,17.838,1.2900001 Q17.532,0.29999995,17.532,-1.0799999 Q17.532,-2.4720001,17.814001,-3.4559999 Q18.096,-4.44,18.720001,-4.9620004 Q19.344,-5.4839997,20.364,-5.4839997 Q21.324001,-5.4839997,21.960001,-4.9620004 Q22.596,-4.44,22.908,-3.4559999 Q23.220001,-2.4720001,23.220001,-1.0799999 z M18.588001,-1.0799999 Q18.588001,0.095999956,18.762001,0.87600017 Q18.936,1.656,19.326,2.046 Q19.716,2.436,20.364,2.436 Q21.012001,2.436,21.402,2.052 Q21.792,1.6680001,21.972,0.88199997 Q22.152,0.095999956,22.152,-1.0799999 Q22.152,-2.256,21.972,-3.0300002 Q21.792,-3.804,21.402,-4.194 Q21.012001,-4.584,20.364,-4.584 Q19.716,-4.584,19.326,-4.194 Q18.936,-3.804,18.762001,-3.0300002 Q18.588001,-2.256,18.588001,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 356.19202 191.87996)"/> +<path d="M348.19202,169.31116 L352.19202,169.31116" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M6.276,-1.0799999 Q6.276,-0.036000013,6.12,0.78 Q5.964,1.5960001,5.622,2.1660001 Q5.28,2.736,4.734,3.036 Q4.188,3.336,3.42,3.336 Q2.46,3.336,1.83,2.808 Q1.2,2.2800002,0.894,1.2900001 Q0.588,0.29999995,0.588,-1.0799999 Q0.588,-2.4720001,0.87,-3.4559999 Q1.152,-4.44,1.776,-4.9620004 Q2.4,-5.4839997,3.42,-5.4839997 Q4.38,-5.4839997,5.0160003,-4.9620004 Q5.652,-4.44,5.964,-3.4559999 Q6.276,-2.4720001,6.276,-1.0799999 z M1.644,-1.0799999 Q1.644,0.095999956,1.818,0.87600017 Q1.992,1.656,2.382,2.046 Q2.772,2.436,3.42,2.436 Q4.068,2.436,4.458,2.052 Q4.848,1.6680001,5.028,0.88199997 Q5.208,0.095999956,5.208,-1.0799999 Q5.208,-2.256,5.028,-3.0300002 Q4.848,-3.804,4.458,-4.194 Q4.068,-4.584,3.42,-4.584 Q2.772,-4.584,2.382,-4.194 Q1.992,-3.804,1.818,-3.0300002 Q1.644,-2.256,1.644,-1.0799999 z M7.7279997,2.568 Q7.7279997,2.124,7.944,1.9440001 Q8.16,1.764,8.46,1.764 Q8.771999,1.764,8.9939995,1.9440001 Q9.216,2.124,9.216,2.568 Q9.216,3,8.9939995,3.1920002 Q8.771999,3.384,8.46,3.384 Q8.16,3.384,7.944,3.1920002 Q7.7279997,3,7.7279997,2.568 z M15.996,-3.348 Q15.996,-2.7719998,15.780001,-2.3519998 Q15.564,-1.9320002,15.162001,-1.6679997 Q14.76,-1.4039998,14.219999,-1.296 L14.219999,-1.2480001 Q15.252,-1.1279998,15.7560005,-0.5999999 Q16.26,-0.07200003,16.26,0.78 Q16.26,1.524,15.912001,2.106 Q15.564,2.6880002,14.837999,3.012 Q14.1119995,3.336,12.972,3.336 Q12.3,3.336,11.724,3.234 Q11.148,3.132,10.62,2.868 L10.62,1.8840001 Q11.16,2.1480002,11.784,2.298 Q12.408,2.448,12.984,2.448 Q14.136,2.448,14.646,1.998 Q15.156,1.5480001,15.156,0.75600004 Q15.156,0.21600008,14.874001,-0.11399984 Q14.592,-0.444,14.052,-0.5999999 Q13.512,-0.75600004,12.7560005,-0.75600004 L11.9279995,-0.75600004 L11.9279995,-1.6560001 L12.768,-1.6560001 Q13.476,-1.6560001,13.95,-1.8600001 Q14.424,-2.0640001,14.67,-2.4299998 Q14.916,-2.796,14.916,-3.276 Q14.916,-3.9,14.496,-4.242 Q14.076,-4.584,13.356,-4.584 Q12.9,-4.584,12.528,-4.494 Q12.156,-4.404,11.838,-4.242 Q11.52,-4.08,11.196,-3.8639998 L10.668,-4.584 Q11.124,-4.944,11.802,-5.2079997 Q12.48,-5.4719996,13.344,-5.4719996 Q14.688,-5.4719996,15.342,-4.872 Q15.996,-4.272,15.996,-3.348 z M23.220001,-1.0799999 Q23.220001,-0.036000013,23.064,0.78 Q22.908,1.5960001,22.566,2.1660001 Q22.224,2.736,21.678001,3.036 Q21.132,3.336,20.364,3.336 Q19.404,3.336,18.774,2.808 Q18.144001,2.2800002,17.838,1.2900001 Q17.532,0.29999995,17.532,-1.0799999 Q17.532,-2.4720001,17.814001,-3.4559999 Q18.096,-4.44,18.720001,-4.9620004 Q19.344,-5.4839997,20.364,-5.4839997 Q21.324001,-5.4839997,21.960001,-4.9620004 Q22.596,-4.44,22.908,-3.4559999 Q23.220001,-2.4720001,23.220001,-1.0799999 z M18.588001,-1.0799999 Q18.588001,0.095999956,18.762001,0.87600017 Q18.936,1.656,19.326,2.046 Q19.716,2.436,20.364,2.436 Q21.012001,2.436,21.402,2.052 Q21.792,1.6680001,21.972,0.88199997 Q22.152,0.095999956,22.152,-1.0799999 Q22.152,-2.256,21.972,-3.0300002 Q21.792,-3.804,21.402,-4.194 Q21.012001,-4.584,20.364,-4.584 Q19.716,-4.584,19.326,-4.194 Q18.936,-3.804,18.762001,-3.0300002 Q18.588001,-2.256,18.588001,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 356.19202 169.31116)"/> +<path d="M348.19202,146.74234 L352.19202,146.74234" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M6.276,-1.0799999 Q6.276,-0.036000013,6.12,0.78 Q5.964,1.5960001,5.622,2.1660001 Q5.28,2.736,4.734,3.036 Q4.188,3.336,3.42,3.336 Q2.46,3.336,1.83,2.808 Q1.2,2.2800002,0.894,1.2900001 Q0.588,0.29999995,0.588,-1.0799999 Q0.588,-2.4720001,0.87,-3.4559999 Q1.152,-4.44,1.776,-4.9620004 Q2.4,-5.4839997,3.42,-5.4839997 Q4.38,-5.4839997,5.0160003,-4.9620004 Q5.652,-4.44,5.964,-3.4559999 Q6.276,-2.4720001,6.276,-1.0799999 z M1.644,-1.0799999 Q1.644,0.095999956,1.818,0.87600017 Q1.992,1.656,2.382,2.046 Q2.772,2.436,3.42,2.436 Q4.068,2.436,4.458,2.052 Q4.848,1.6680001,5.028,0.88199997 Q5.208,0.095999956,5.208,-1.0799999 Q5.208,-2.256,5.028,-3.0300002 Q4.848,-3.804,4.458,-4.194 Q4.068,-4.584,3.42,-4.584 Q2.772,-4.584,2.382,-4.194 Q1.992,-3.804,1.818,-3.0300002 Q1.644,-2.256,1.644,-1.0799999 z M7.7279997,2.568 Q7.7279997,2.124,7.944,1.9440001 Q8.16,1.764,8.46,1.764 Q8.771999,1.764,8.9939995,1.9440001 Q9.216,2.124,9.216,2.568 Q9.216,3,8.9939995,3.1920002 Q8.771999,3.384,8.46,3.384 Q8.16,3.384,7.944,3.1920002 Q7.7279997,3,7.7279997,2.568 z M16.704,1.2720001 L15.455999,1.2720001 L15.455999,3.216 L14.436,3.216 L14.436,1.2720001 L10.332,1.2720001 L10.332,0.37199998 L14.364,-5.4 L15.455999,-5.4 L15.455999,0.32400012 L16.704,0.32400012 L16.704,1.2720001 z M14.436,-2.376 Q14.436,-2.6880002,14.441999,-2.946 Q14.448,-3.204,14.46,-3.4320002 Q14.472,-3.6599998,14.478001,-3.87 Q14.483999,-4.08,14.496,-4.272 L14.448,-4.272 Q14.351999,-4.044,14.208,-3.7800002 Q14.064,-3.5159998,13.932,-3.336 L11.364,0.32400012 L14.436,0.32400012 L14.436,-2.376 z M23.220001,-1.0799999 Q23.220001,-0.036000013,23.064,0.78 Q22.908,1.5960001,22.566,2.1660001 Q22.224,2.736,21.678001,3.036 Q21.132,3.336,20.364,3.336 Q19.404,3.336,18.774,2.808 Q18.144001,2.2800002,17.838,1.2900001 Q17.532,0.29999995,17.532,-1.0799999 Q17.532,-2.4720001,17.814001,-3.4559999 Q18.096,-4.44,18.720001,-4.9620004 Q19.344,-5.4839997,20.364,-5.4839997 Q21.324001,-5.4839997,21.960001,-4.9620004 Q22.596,-4.44,22.908,-3.4559999 Q23.220001,-2.4720001,23.220001,-1.0799999 z M18.588001,-1.0799999 Q18.588001,0.095999956,18.762001,0.87600017 Q18.936,1.656,19.326,2.046 Q19.716,2.436,20.364,2.436 Q21.012001,2.436,21.402,2.052 Q21.792,1.6680001,21.972,0.88199997 Q22.152,0.095999956,22.152,-1.0799999 Q22.152,-2.256,21.972,-3.0300002 Q21.792,-3.804,21.402,-4.194 Q21.012001,-4.584,20.364,-4.584 Q19.716,-4.584,19.326,-4.194 Q18.936,-3.804,18.762001,-3.0300002 Q18.588001,-2.256,18.588001,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 356.19202 146.74234)"/> +<path d="M348.19202,124.17353 L352.19202,124.17353" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M6.276,-1.0799999 Q6.276,-0.036000013,6.12,0.78 Q5.964,1.5960001,5.622,2.1660001 Q5.28,2.736,4.734,3.036 Q4.188,3.336,3.42,3.336 Q2.46,3.336,1.83,2.808 Q1.2,2.2800002,0.894,1.2900001 Q0.588,0.29999995,0.588,-1.0799999 Q0.588,-2.4720001,0.87,-3.4559999 Q1.152,-4.44,1.776,-4.9620004 Q2.4,-5.4839997,3.42,-5.4839997 Q4.38,-5.4839997,5.0160003,-4.9620004 Q5.652,-4.44,5.964,-3.4559999 Q6.276,-2.4720001,6.276,-1.0799999 z M1.644,-1.0799999 Q1.644,0.095999956,1.818,0.87600017 Q1.992,1.656,2.382,2.046 Q2.772,2.436,3.42,2.436 Q4.068,2.436,4.458,2.052 Q4.848,1.6680001,5.028,0.88199997 Q5.208,0.095999956,5.208,-1.0799999 Q5.208,-2.256,5.028,-3.0300002 Q4.848,-3.804,4.458,-4.194 Q4.068,-4.584,3.42,-4.584 Q2.772,-4.584,2.382,-4.194 Q1.992,-3.804,1.818,-3.0300002 Q1.644,-2.256,1.644,-1.0799999 z M7.7279997,2.568 Q7.7279997,2.124,7.944,1.9440001 Q8.16,1.764,8.46,1.764 Q8.771999,1.764,8.9939995,1.9440001 Q9.216,2.124,9.216,2.568 Q9.216,3,8.9939995,3.1920002 Q8.771999,3.384,8.46,3.384 Q8.16,3.384,7.944,3.1920002 Q7.7279997,3,7.7279997,2.568 z M13.38,-2.04 Q14.2560005,-2.04,14.903999,-1.7399998 Q15.552,-1.44,15.906,-0.88199997 Q16.26,-0.32399988,16.26,0.48000002 Q16.26,1.368,15.875999,2.0100002 Q15.492001,2.652,14.778,2.994 Q14.064,3.336,13.056,3.336 Q12.396,3.336,11.814,3.216 Q11.232,3.0960002,10.8359995,2.868 L10.8359995,1.8720001 Q11.268,2.1360002,11.886,2.286 Q12.504,2.436,13.068,2.436 Q13.704,2.436,14.1779995,2.2380002 Q14.652,2.04,14.916,1.626 Q15.18,1.2120001,15.18,0.58800006 Q15.18,-0.25199986,14.664,-0.7019999 Q14.148,-1.152,13.032,-1.152 Q12.696,-1.152,12.264,-1.092 Q11.832,-1.0320001,11.568,-0.9720001 L11.04,-1.3080001 L11.364,-5.3519998 L15.66,-5.3519998 L15.66,-4.392 L12.264,-4.392 L12.059999,-1.908 Q12.264,-1.9439998,12.6119995,-1.9920001 Q12.96,-2.04,13.38,-2.04 z M23.220001,-1.0799999 Q23.220001,-0.036000013,23.064,0.78 Q22.908,1.5960001,22.566,2.1660001 Q22.224,2.736,21.678001,3.036 Q21.132,3.336,20.364,3.336 Q19.404,3.336,18.774,2.808 Q18.144001,2.2800002,17.838,1.2900001 Q17.532,0.29999995,17.532,-1.0799999 Q17.532,-2.4720001,17.814001,-3.4559999 Q18.096,-4.44,18.720001,-4.9620004 Q19.344,-5.4839997,20.364,-5.4839997 Q21.324001,-5.4839997,21.960001,-4.9620004 Q22.596,-4.44,22.908,-3.4559999 Q23.220001,-2.4720001,23.220001,-1.0799999 z M18.588001,-1.0799999 Q18.588001,0.095999956,18.762001,0.87600017 Q18.936,1.656,19.326,2.046 Q19.716,2.436,20.364,2.436 Q21.012001,2.436,21.402,2.052 Q21.792,1.6680001,21.972,0.88199997 Q22.152,0.095999956,22.152,-1.0799999 Q22.152,-2.256,21.972,-3.0300002 Q21.792,-3.804,21.402,-4.194 Q21.012001,-4.584,20.364,-4.584 Q19.716,-4.584,19.326,-4.194 Q18.936,-3.804,18.762001,-3.0300002 Q18.588001,-2.256,18.588001,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 356.19202 124.17353)"/> +<path d="M348.19202,101.60471 L352.19202,101.60471" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M6.276,-1.0799999 Q6.276,-0.036000013,6.12,0.78 Q5.964,1.5960001,5.622,2.1660001 Q5.28,2.736,4.734,3.036 Q4.188,3.336,3.42,3.336 Q2.46,3.336,1.83,2.808 Q1.2,2.2800002,0.894,1.2900001 Q0.588,0.29999995,0.588,-1.0799999 Q0.588,-2.4720001,0.87,-3.4559999 Q1.152,-4.44,1.776,-4.9620004 Q2.4,-5.4839997,3.42,-5.4839997 Q4.38,-5.4839997,5.0160003,-4.9620004 Q5.652,-4.44,5.964,-3.4559999 Q6.276,-2.4720001,6.276,-1.0799999 z M1.644,-1.0799999 Q1.644,0.095999956,1.818,0.87600017 Q1.992,1.656,2.382,2.046 Q2.772,2.436,3.42,2.436 Q4.068,2.436,4.458,2.052 Q4.848,1.6680001,5.028,0.88199997 Q5.208,0.095999956,5.208,-1.0799999 Q5.208,-2.256,5.028,-3.0300002 Q4.848,-3.804,4.458,-4.194 Q4.068,-4.584,3.42,-4.584 Q2.772,-4.584,2.382,-4.194 Q1.992,-3.804,1.818,-3.0300002 Q1.644,-2.256,1.644,-1.0799999 z M7.7279997,2.568 Q7.7279997,2.124,7.944,1.9440001 Q8.16,1.764,8.46,1.764 Q8.771999,1.764,8.9939995,1.9440001 Q9.216,2.124,9.216,2.568 Q9.216,3,8.9939995,3.1920002 Q8.771999,3.384,8.46,3.384 Q8.16,3.384,7.944,3.1920002 Q7.7279997,3,7.7279997,2.568 z M10.74,-0.444 Q10.74,-1.1879997,10.842,-1.908 Q10.944,-2.6279998,11.196,-3.27 Q11.448,-3.9120002,11.892,-4.41 Q12.336,-4.9079995,13.014,-5.19 Q13.691999,-5.4719996,14.664,-5.4719996 Q14.916,-5.4719996,15.222,-5.4480004 Q15.528,-5.4240003,15.719999,-5.364 L15.719999,-4.464 Q15.504,-4.536,15.234,-4.572 Q14.964,-4.608,14.688,-4.608 Q13.86,-4.608,13.308,-4.332 Q12.7560005,-4.0559998,12.438,-3.5760002 Q12.12,-3.0960002,11.976,-2.4720001 Q11.832,-1.848,11.796,-1.1399999 L11.868,-1.1399999 Q12.048,-1.428,12.323999,-1.6560001 Q12.6,-1.8839998,12.99,-2.0159998 Q13.38,-2.1479998,13.896,-2.1479998 Q14.639999,-2.1479998,15.198,-1.842 Q15.7560005,-1.5359998,16.068,-0.954 Q16.380001,-0.37199998,16.380001,0.4560001 Q16.380001,1.3440001,16.044,1.9920001 Q15.708,2.64,15.101999,2.9880002 Q14.496,3.336,13.656,3.336 Q13.044,3.336,12.516,3.108 Q11.988,2.88,11.586,2.4120002 Q11.184,1.9440001,10.962,1.23 Q10.74,0.51600003,10.74,-0.444 z M13.644,2.448 Q14.4,2.448,14.868,1.962 Q15.336,1.4760001,15.336,0.4560001 Q15.336,-0.3599999,14.922,-0.84000015 Q14.507999,-1.3200002,13.68,-1.3200002 Q13.116,-1.3200002,12.696,-1.086 Q12.276,-0.85199976,12.042,-0.49199986 Q11.808,-0.13199997,11.808,0.2520001 Q11.808,0.648,11.922,1.0320001 Q12.036,1.416,12.27,1.74 Q12.504,2.0640001,12.846,2.256 Q13.188,2.448,13.644,2.448 z M23.220001,-1.0799999 Q23.220001,-0.036000013,23.064,0.78 Q22.908,1.5960001,22.566,2.1660001 Q22.224,2.736,21.678001,3.036 Q21.132,3.336,20.364,3.336 Q19.404,3.336,18.774,2.808 Q18.144001,2.2800002,17.838,1.2900001 Q17.532,0.29999995,17.532,-1.0799999 Q17.532,-2.4720001,17.814001,-3.4559999 Q18.096,-4.44,18.720001,-4.9620004 Q19.344,-5.4839997,20.364,-5.4839997 Q21.324001,-5.4839997,21.960001,-4.9620004 Q22.596,-4.44,22.908,-3.4559999 Q23.220001,-2.4720001,23.220001,-1.0799999 z M18.588001,-1.0799999 Q18.588001,0.095999956,18.762001,0.87600017 Q18.936,1.656,19.326,2.046 Q19.716,2.436,20.364,2.436 Q21.012001,2.436,21.402,2.052 Q21.792,1.6680001,21.972,0.88199997 Q22.152,0.095999956,22.152,-1.0799999 Q22.152,-2.256,21.972,-3.0300002 Q21.792,-3.804,21.402,-4.194 Q21.012001,-4.584,20.364,-4.584 Q19.716,-4.584,19.326,-4.194 Q18.936,-3.804,18.762001,-3.0300002 Q18.588001,-2.256,18.588001,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 356.19202 101.60471)"/> +<path d="M348.19202,79.035904 L352.19202,79.035904" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M6.276,-1.0799999 Q6.276,-0.036000013,6.12,0.78 Q5.964,1.5960001,5.622,2.1660001 Q5.28,2.736,4.734,3.036 Q4.188,3.336,3.42,3.336 Q2.46,3.336,1.83,2.808 Q1.2,2.2800002,0.894,1.2900001 Q0.588,0.29999995,0.588,-1.0799999 Q0.588,-2.4720001,0.87,-3.4559999 Q1.152,-4.44,1.776,-4.9620004 Q2.4,-5.4839997,3.42,-5.4839997 Q4.38,-5.4839997,5.0160003,-4.9620004 Q5.652,-4.44,5.964,-3.4559999 Q6.276,-2.4720001,6.276,-1.0799999 z M1.644,-1.0799999 Q1.644,0.095999956,1.818,0.87600017 Q1.992,1.656,2.382,2.046 Q2.772,2.436,3.42,2.436 Q4.068,2.436,4.458,2.052 Q4.848,1.6680001,5.028,0.88199997 Q5.208,0.095999956,5.208,-1.0799999 Q5.208,-2.256,5.028,-3.0300002 Q4.848,-3.804,4.458,-4.194 Q4.068,-4.584,3.42,-4.584 Q2.772,-4.584,2.382,-4.194 Q1.992,-3.804,1.818,-3.0300002 Q1.644,-2.256,1.644,-1.0799999 z M7.7279997,2.568 Q7.7279997,2.124,7.944,1.9440001 Q8.16,1.764,8.46,1.764 Q8.771999,1.764,8.9939995,1.9440001 Q9.216,2.124,9.216,2.568 Q9.216,3,8.9939995,3.1920002 Q8.771999,3.384,8.46,3.384 Q8.16,3.384,7.944,3.1920002 Q7.7279997,3,7.7279997,2.568 z M11.712,3.216 L15.228001,-4.392 L10.608,-4.392 L10.608,-5.3519998 L16.355999,-5.3519998 L16.355999,-4.536 L12.875999,3.216 L11.712,3.216 z M23.220001,-1.0799999 Q23.220001,-0.036000013,23.064,0.78 Q22.908,1.5960001,22.566,2.1660001 Q22.224,2.736,21.678001,3.036 Q21.132,3.336,20.364,3.336 Q19.404,3.336,18.774,2.808 Q18.144001,2.2800002,17.838,1.2900001 Q17.532,0.29999995,17.532,-1.0799999 Q17.532,-2.4720001,17.814001,-3.4559999 Q18.096,-4.44,18.720001,-4.9620004 Q19.344,-5.4839997,20.364,-5.4839997 Q21.324001,-5.4839997,21.960001,-4.9620004 Q22.596,-4.44,22.908,-3.4559999 Q23.220001,-2.4720001,23.220001,-1.0799999 z M18.588001,-1.0799999 Q18.588001,0.095999956,18.762001,0.87600017 Q18.936,1.656,19.326,2.046 Q19.716,2.436,20.364,2.436 Q21.012001,2.436,21.402,2.052 Q21.792,1.6680001,21.972,0.88199997 Q22.152,0.095999956,22.152,-1.0799999 Q22.152,-2.256,21.972,-3.0300002 Q21.792,-3.804,21.402,-4.194 Q21.012001,-4.584,20.364,-4.584 Q19.716,-4.584,19.326,-4.194 Q18.936,-3.804,18.762001,-3.0300002 Q18.588001,-2.256,18.588001,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 356.19202 79.035904)"/> +<path d="M348.19202,56.467102 L352.19202,56.467102" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M6.276,-1.0799999 Q6.276,-0.036000013,6.12,0.78 Q5.964,1.5960001,5.622,2.1660001 Q5.28,2.736,4.734,3.036 Q4.188,3.336,3.42,3.336 Q2.46,3.336,1.83,2.808 Q1.2,2.2800002,0.894,1.2900001 Q0.588,0.29999995,0.588,-1.0799999 Q0.588,-2.4720001,0.87,-3.4559999 Q1.152,-4.44,1.776,-4.9620004 Q2.4,-5.4839997,3.42,-5.4839997 Q4.38,-5.4839997,5.0160003,-4.9620004 Q5.652,-4.44,5.964,-3.4559999 Q6.276,-2.4720001,6.276,-1.0799999 z M1.644,-1.0799999 Q1.644,0.095999956,1.818,0.87600017 Q1.992,1.656,2.382,2.046 Q2.772,2.436,3.42,2.436 Q4.068,2.436,4.458,2.052 Q4.848,1.6680001,5.028,0.88199997 Q5.208,0.095999956,5.208,-1.0799999 Q5.208,-2.256,5.028,-3.0300002 Q4.848,-3.804,4.458,-4.194 Q4.068,-4.584,3.42,-4.584 Q2.772,-4.584,2.382,-4.194 Q1.992,-3.804,1.818,-3.0300002 Q1.644,-2.256,1.644,-1.0799999 z M7.7279997,2.568 Q7.7279997,2.124,7.944,1.9440001 Q8.16,1.764,8.46,1.764 Q8.771999,1.764,8.9939995,1.9440001 Q9.216,2.124,9.216,2.568 Q9.216,3,8.9939995,3.1920002 Q8.771999,3.384,8.46,3.384 Q8.16,3.384,7.944,3.1920002 Q7.7279997,3,7.7279997,2.568 z M13.5,-5.4719996 Q14.2560005,-5.4719996,14.832,-5.2380004 Q15.408,-5.004,15.738,-4.548 Q16.068,-4.092,16.068,-3.42 Q16.068,-2.9039998,15.846001,-2.52 Q15.624001,-2.1360002,15.252,-1.842 Q14.88,-1.5479999,14.436,-1.3200002 Q14.964,-1.0679998,15.396,-0.75 Q15.828,-0.43199992,16.086,-0.0119998455 Q16.344,0.408,16.344,0.99600005 Q16.344,1.7160001,15.996,2.2380002 Q15.648,2.76,15.018,3.048 Q14.3880005,3.336,13.536,3.336 Q12.6119995,3.336,11.97,3.0600002 Q11.328,2.7840002,10.998,2.2740002 Q10.668,1.764,10.668,1.0320001 Q10.668,0.444,10.914,0.012000084 Q11.16,-0.41999984,11.568,-0.7319999 Q11.976,-1.0440001,12.444,-1.2599998 Q12.024,-1.5,11.682,-1.8059998 Q11.34,-2.112,11.142,-2.508 Q10.944,-2.9039998,10.944,-3.4320002 Q10.944,-4.092,11.28,-4.542 Q11.616,-4.992,12.191999,-5.232 Q12.768,-5.4719996,13.5,-5.4719996 z M11.7,1.0440001 Q11.7,1.6680001,12.144,2.082 Q12.588,2.496,13.512,2.496 Q14.3880005,2.496,14.85,2.082 Q15.312,1.6680001,15.312,1.0080001 Q15.312,0.58800006,15.09,0.26999998 Q14.868,-0.04799986,14.466,-0.29999995 Q14.064,-0.55200005,13.512,-0.75600004 L13.32,-0.82800007 Q12.792,-0.5999999,12.432,-0.33599997 Q12.072,-0.07200003,11.886,0.26399994 Q11.7,0.60000014,11.7,1.0440001 z M13.488,-4.62 Q12.828,-4.62,12.402,-4.302 Q11.976,-3.9840002,11.976,-3.3839998 Q11.976,-2.94,12.186,-2.6399999 Q12.396,-2.3400002,12.7560005,-2.13 Q13.116,-1.9200001,13.548,-1.7280002 Q13.968,-1.908,14.298,-2.124 Q14.628,-2.3400002,14.826,-2.646 Q15.024,-2.9520001,15.024,-3.3839998 Q15.024,-3.9840002,14.604,-4.302 Q14.184,-4.62,13.488,-4.62 z M23.220001,-1.0799999 Q23.220001,-0.036000013,23.064,0.78 Q22.908,1.5960001,22.566,2.1660001 Q22.224,2.736,21.678001,3.036 Q21.132,3.336,20.364,3.336 Q19.404,3.336,18.774,2.808 Q18.144001,2.2800002,17.838,1.2900001 Q17.532,0.29999995,17.532,-1.0799999 Q17.532,-2.4720001,17.814001,-3.4559999 Q18.096,-4.44,18.720001,-4.9620004 Q19.344,-5.4839997,20.364,-5.4839997 Q21.324001,-5.4839997,21.960001,-4.9620004 Q22.596,-4.44,22.908,-3.4559999 Q23.220001,-2.4720001,23.220001,-1.0799999 z M18.588001,-1.0799999 Q18.588001,0.095999956,18.762001,0.87600017 Q18.936,1.656,19.326,2.046 Q19.716,2.436,20.364,2.436 Q21.012001,2.436,21.402,2.052 Q21.792,1.6680001,21.972,0.88199997 Q22.152,0.095999956,22.152,-1.0799999 Q22.152,-2.256,21.972,-3.0300002 Q21.792,-3.804,21.402,-4.194 Q21.012001,-4.584,20.364,-4.584 Q19.716,-4.584,19.326,-4.194 Q18.936,-3.804,18.762001,-3.0300002 Q18.588001,-2.256,18.588001,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 356.19202 56.467102)"/> +<path d="M348.19202,33.8983 L352.19202,33.8983" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M6.276,-1.0799999 Q6.276,-0.036000013,6.12,0.78 Q5.964,1.5960001,5.622,2.1660001 Q5.28,2.736,4.734,3.036 Q4.188,3.336,3.42,3.336 Q2.46,3.336,1.83,2.808 Q1.2,2.2800002,0.894,1.2900001 Q0.588,0.29999995,0.588,-1.0799999 Q0.588,-2.4720001,0.87,-3.4559999 Q1.152,-4.44,1.776,-4.9620004 Q2.4,-5.4839997,3.42,-5.4839997 Q4.38,-5.4839997,5.0160003,-4.9620004 Q5.652,-4.44,5.964,-3.4559999 Q6.276,-2.4720001,6.276,-1.0799999 z M1.644,-1.0799999 Q1.644,0.095999956,1.818,0.87600017 Q1.992,1.656,2.382,2.046 Q2.772,2.436,3.42,2.436 Q4.068,2.436,4.458,2.052 Q4.848,1.6680001,5.028,0.88199997 Q5.208,0.095999956,5.208,-1.0799999 Q5.208,-2.256,5.028,-3.0300002 Q4.848,-3.804,4.458,-4.194 Q4.068,-4.584,3.42,-4.584 Q2.772,-4.584,2.382,-4.194 Q1.992,-3.804,1.818,-3.0300002 Q1.644,-2.256,1.644,-1.0799999 z M7.7279997,2.568 Q7.7279997,2.124,7.944,1.9440001 Q8.16,1.764,8.46,1.764 Q8.771999,1.764,8.9939995,1.9440001 Q9.216,2.124,9.216,2.568 Q9.216,3,8.9939995,3.1920002 Q8.771999,3.384,8.46,3.384 Q8.16,3.384,7.944,3.1920002 Q7.7279997,3,7.7279997,2.568 z M16.32,-1.6919999 Q16.32,-0.96000004,16.218,-0.23399997 Q16.116001,0.4920001,15.864,1.1340001 Q15.6119995,1.776,15.167999,2.2740002 Q14.724,2.772,14.04,3.0540001 Q13.356,3.336,12.384,3.336 Q12.144,3.336,11.826,3.306 Q11.507999,3.276,11.304,3.216 L11.304,2.316 Q11.52,2.388,11.808,2.43 Q12.096,2.4720001,12.36,2.4720001 Q13.2,2.4720001,13.746,2.196 Q14.292,1.9200001,14.616,1.4460001 Q14.940001,0.9720001,15.084,0.342 Q15.228001,-0.28799987,15.252,-0.9839997 L15.18,-0.9839997 Q15,-0.70799994,14.724,-0.48000002 Q14.448,-0.25199986,14.058,-0.119999886 Q13.668,0.012000084,13.139999,0.012000084 Q12.408,0.012000084,11.85,-0.2939999 Q11.292,-0.5999999,10.986,-1.1760001 Q10.68,-1.7519999,10.68,-2.58 Q10.68,-3.48,11.022,-4.128 Q11.364,-4.776,11.976,-5.124 Q12.588,-5.4719996,13.416,-5.4719996 Q14.028,-5.4719996,14.556,-5.2380004 Q15.084,-5.004,15.48,-4.536 Q15.875999,-4.068,16.098,-3.3600001 Q16.32,-2.652,16.32,-1.6919999 z M13.416,-4.584 Q12.672,-4.584,12.198,-4.092 Q11.724,-3.6,11.724,-2.592 Q11.724,-1.7639999,12.125999,-1.29 Q12.528,-0.816,13.368,-0.816 Q13.944,-0.816,14.364,-1.0500002 Q14.784,-1.2839999,15.018,-1.644 Q15.252,-2.0040002,15.252,-2.388 Q15.252,-2.7719998,15.1380005,-3.1620002 Q15.024,-3.552,14.796,-3.876 Q14.568,-4.2,14.219999,-4.392 Q13.872,-4.584,13.416,-4.584 z M23.220001,-1.0799999 Q23.220001,-0.036000013,23.064,0.78 Q22.908,1.5960001,22.566,2.1660001 Q22.224,2.736,21.678001,3.036 Q21.132,3.336,20.364,3.336 Q19.404,3.336,18.774,2.808 Q18.144001,2.2800002,17.838,1.2900001 Q17.532,0.29999995,17.532,-1.0799999 Q17.532,-2.4720001,17.814001,-3.4559999 Q18.096,-4.44,18.720001,-4.9620004 Q19.344,-5.4839997,20.364,-5.4839997 Q21.324001,-5.4839997,21.960001,-4.9620004 Q22.596,-4.44,22.908,-3.4559999 Q23.220001,-2.4720001,23.220001,-1.0799999 z M18.588001,-1.0799999 Q18.588001,0.095999956,18.762001,0.87600017 Q18.936,1.656,19.326,2.046 Q19.716,2.436,20.364,2.436 Q21.012001,2.436,21.402,2.052 Q21.792,1.6680001,21.972,0.88199997 Q22.152,0.095999956,22.152,-1.0799999 Q22.152,-2.256,21.972,-3.0300002 Q21.792,-3.804,21.402,-4.194 Q21.012001,-4.584,20.364,-4.584 Q19.716,-4.584,19.326,-4.194 Q18.936,-3.804,18.762001,-3.0300002 Q18.588001,-2.256,18.588001,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 356.19202 33.8983)"/> +</svg> \ No newline at end of file diff --git a/tests/refs/colorbar/default.png b/tests/refs/colorbar/default.png new file mode 100644 index 0000000000000000000000000000000000000000..ad6faa41ca323f954da02a49a79d0e2916a16501 GIT binary patch literal 31086 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 D&+!1B literal 0 HcmV?d00001 diff --git a/tests/refs/colorbar/default.svg b/tests/refs/colorbar/default.svg new file mode 100644 index 0000000..53436e0 --- /dev/null +++ b/tests/refs/colorbar/default.svg @@ -0,0 +1,304 @@ +<svg height="300" viewBox="0 0 400 300" width="400" xmlns="http://www.w3.org/2000/svg"> +<rect fill="#ffffff" height="100%" width="100%"/> +<clipPath id="plotive-clip1"> +<rect height="260" width="296.19202" x="20" y="20"/> +</clipPath> +<g clip-path="url(#plotive-clip1)"> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#54c16a" fill-opacity="0.7019608" stroke="#54c16a" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 190.89055 112.57182)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#3ba97e" fill-opacity="0.7019608" stroke="#3ba97e" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 179.97026 65.19423)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#8fd159" fill-opacity="0.7019608" stroke="#8fd159" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 202.46431 182.75821)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#440154" fill-opacity="0.7019608" stroke="#440154" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 168.9136 137.4275)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#35a282" fill-opacity="0.7019608" stroke="#35a282" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 40 128.45457)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#31778c" fill-opacity="0.7019608" stroke="#31778c" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 146.78484 40)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#70cb5f" fill-opacity="0.7019608" stroke="#70cb5f" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 160.33264 221.95265)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#38638b" fill-opacity="0.7019608" stroke="#38638b" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 62.404472 179.70654)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#36698c" fill-opacity="0.7019608" stroke="#36698c" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 104.20594 119.84299)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#fde724" fill-opacity="0.7019608" stroke="#fde724" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 215.1704 107.928925)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#33a083" fill-opacity="0.7019608" stroke="#33a083" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 170.00009 123.19487)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#90d159" fill-opacity="0.7019608" stroke="#90d159" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 269.2433 73.18942)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#461c61" fill-opacity="0.7019608" stroke="#461c61" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 296.19202 186.15048)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#61c961" fill-opacity="0.7019608" stroke="#61c961" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 45.586716 260)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#279689" fill-opacity="0.7019608" stroke="#279689" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 143.01593 56.149902)"/> +</g> +<rect fill="none" height="260" stroke="#000000" stroke-width="1" width="296.19202" x="20" y="20"/> +<path d="M328.19202,280 L328.19202,279.5 L348.19202,279.5 L348.19202,280" fill="#440154" stroke="none"/> +<path d="M328.19202,279.5 L328.19202,278.5 L348.19202,278.5 L348.19202,279.5" fill="#440355" stroke="none"/> +<path d="M328.19202,278.5 L328.19202,277.5 L348.19202,277.5 L348.19202,278.5" fill="#440556" stroke="none"/> +<path d="M328.19202,277.5 L328.19202,276.5 L348.19202,276.5 L348.19202,277.5" fill="#440756" stroke="none"/> +<path d="M328.19202,276.5 L328.19202,275.5 L348.19202,275.5 L348.19202,276.5" fill="#450957" stroke="none"/> +<path d="M328.19202,275.5 L328.19202,274.5 L348.19202,274.5 L348.19202,275.5" fill="#450b58" stroke="none"/> +<path d="M328.19202,274.5 L328.19202,273.5 L348.19202,273.5 L348.19202,274.5" fill="#450d59" stroke="none"/> +<path d="M328.19202,273.5 L328.19202,272.5 L348.19202,272.5 L348.19202,273.5" fill="#450f5a" stroke="none"/> +<path d="M328.19202,272.5 L328.19202,271.5 L348.19202,271.5 L348.19202,272.5" fill="#45105a" stroke="none"/> +<path d="M328.19202,271.5 L328.19202,270.5 L348.19202,270.5 L348.19202,271.5" fill="#45125b" stroke="none"/> +<path d="M328.19202,270.5 L328.19202,269.5 L348.19202,269.5 L348.19202,270.5" fill="#45145c" stroke="none"/> +<path d="M328.19202,269.5 L328.19202,268.5 L348.19202,268.5 L348.19202,269.5" fill="#45155d" stroke="none"/> +<path d="M328.19202,268.5 L328.19202,267.5 L348.19202,267.5 L348.19202,268.5" fill="#45165e" stroke="none"/> +<path d="M328.19202,267.5 L328.19202,266.5 L348.19202,266.5 L348.19202,267.5" fill="#46185e" stroke="none"/> +<path d="M328.19202,266.5 L328.19202,265.5 L348.19202,265.5 L348.19202,266.5" fill="#46195f" stroke="none"/> +<path d="M328.19202,265.5 L328.19202,264.5 L348.19202,264.5 L348.19202,265.5" fill="#461b60" stroke="none"/> +<path d="M328.19202,264.5 L328.19202,263.5 L348.19202,263.5 L348.19202,264.5" fill="#461c61" stroke="none"/> +<path d="M328.19202,263.5 L328.19202,262.5 L348.19202,262.5 L348.19202,263.5" fill="#461d62" stroke="none"/> +<path d="M328.19202,262.5 L328.19202,261.5 L348.19202,261.5 L348.19202,262.5" fill="#461e63" stroke="none"/> +<path d="M328.19202,261.5 L328.19202,260.5 L348.19202,260.5 L348.19202,261.5" fill="#462063" stroke="none"/> +<path d="M328.19202,260.5 L328.19202,259.5 L348.19202,259.5 L348.19202,260.5" fill="#462164" stroke="none"/> +<path d="M328.19202,259.5 L328.19202,258.5 L348.19202,258.5 L348.19202,259.5" fill="#462265" stroke="none"/> +<path d="M328.19202,258.5 L328.19202,257.5 L348.19202,257.5 L348.19202,258.5" fill="#462366" stroke="none"/> +<path d="M328.19202,257.5 L328.19202,256.5 L348.19202,256.5 L348.19202,257.5" fill="#462467" stroke="none"/> +<path d="M328.19202,256.5 L328.19202,255.5 L348.19202,255.5 L348.19202,256.5" fill="#462667" stroke="none"/> +<path d="M328.19202,255.5 L328.19202,254.5 L348.19202,254.5 L348.19202,255.5" fill="#462768" stroke="none"/> +<path d="M328.19202,254.5 L328.19202,253.5 L348.19202,253.5 L348.19202,254.5" fill="#462869" stroke="none"/> +<path d="M328.19202,253.5 L328.19202,252.5 L348.19202,252.5 L348.19202,253.5" fill="#46296a" stroke="none"/> +<path d="M328.19202,252.5 L328.19202,251.5 L348.19202,251.5 L348.19202,252.5" fill="#462a6b" stroke="none"/> +<path d="M328.19202,251.5 L328.19202,250.5 L348.19202,250.5 L348.19202,251.5" fill="#462b6c" stroke="none"/> +<path d="M328.19202,250.5 L328.19202,249.5 L348.19202,249.5 L348.19202,250.5" fill="#452c6c" stroke="none"/> +<path d="M328.19202,249.5 L328.19202,248.5 L348.19202,248.5 L348.19202,249.5" fill="#452e6d" stroke="none"/> +<path d="M328.19202,248.5 L328.19202,247.5 L348.19202,247.5 L348.19202,248.5" fill="#452f6e" stroke="none"/> +<path d="M328.19202,247.5 L328.19202,246.5 L348.19202,246.5 L348.19202,247.5" fill="#45306f" stroke="none"/> +<path d="M328.19202,246.5 L328.19202,245.5 L348.19202,245.5 L348.19202,246.5" fill="#453170" stroke="none"/> +<path d="M328.19202,245.5 L328.19202,244.5 L348.19202,244.5 L348.19202,245.5" fill="#453271" stroke="none"/> +<path d="M328.19202,244.5 L328.19202,243.5 L348.19202,243.5 L348.19202,244.5" fill="#453371" stroke="none"/> +<path d="M328.19202,243.5 L328.19202,242.5 L348.19202,242.5 L348.19202,243.5" fill="#453472" stroke="none"/> +<path d="M328.19202,242.5 L328.19202,241.5 L348.19202,241.5 L348.19202,242.5" fill="#453573" stroke="none"/> +<path d="M328.19202,241.5 L328.19202,240.5 L348.19202,240.5 L348.19202,241.5" fill="#443674" stroke="none"/> +<path d="M328.19202,240.5 L328.19202,239.5 L348.19202,239.5 L348.19202,240.5" fill="#443775" stroke="none"/> +<path d="M328.19202,239.5 L328.19202,238.5 L348.19202,238.5 L348.19202,239.5" fill="#443876" stroke="none"/> +<path d="M328.19202,238.5 L328.19202,237.5 L348.19202,237.5 L348.19202,238.5" fill="#443976" stroke="none"/> +<path d="M328.19202,237.5 L328.19202,236.5 L348.19202,236.5 L348.19202,237.5" fill="#443a77" stroke="none"/> +<path d="M328.19202,236.5 L328.19202,235.5 L348.19202,235.5 L348.19202,236.5" fill="#433b78" stroke="none"/> +<path d="M328.19202,235.5 L328.19202,234.5 L348.19202,234.5 L348.19202,235.5" fill="#433c79" stroke="none"/> +<path d="M328.19202,234.5 L328.19202,233.5 L348.19202,233.5 L348.19202,234.5" fill="#433e7a" stroke="none"/> +<path d="M328.19202,233.5 L328.19202,232.5 L348.19202,232.5 L348.19202,233.5" fill="#433f7b" stroke="none"/> +<path d="M328.19202,232.5 L328.19202,231.5 L348.19202,231.5 L348.19202,232.5" fill="#42407c" stroke="none"/> +<path d="M328.19202,231.5 L328.19202,230.5 L348.19202,230.5 L348.19202,231.5" fill="#42417c" stroke="none"/> +<path d="M328.19202,230.5 L328.19202,229.5 L348.19202,229.5 L348.19202,230.5" fill="#42427d" stroke="none"/> +<path d="M328.19202,229.5 L328.19202,228.5 L348.19202,228.5 L348.19202,229.5" fill="#41437e" stroke="none"/> +<path d="M328.19202,228.5 L328.19202,227.5 L348.19202,227.5 L348.19202,228.5" fill="#41447f" stroke="none"/> +<path d="M328.19202,227.5 L328.19202,226.5 L348.19202,226.5 L348.19202,227.5" fill="#414580" stroke="none"/> +<path d="M328.19202,226.5 L328.19202,225.5 L348.19202,225.5 L348.19202,226.5" fill="#404681" stroke="none"/> +<path d="M328.19202,225.5 L328.19202,224.5 L348.19202,224.5 L348.19202,225.5" fill="#404781" stroke="none"/> +<path d="M328.19202,224.5 L328.19202,223.5 L348.19202,223.5 L348.19202,224.5" fill="#3f4882" stroke="none"/> +<path d="M328.19202,223.5 L328.19202,222.5 L348.19202,222.5 L348.19202,223.5" fill="#3f4983" stroke="none"/> +<path d="M328.19202,222.5 L328.19202,221.5 L348.19202,221.5 L348.19202,222.5" fill="#3f4a84" stroke="none"/> +<path d="M328.19202,221.5 L328.19202,220.5 L348.19202,220.5 L348.19202,221.5" fill="#3e4b85" stroke="none"/> +<path d="M328.19202,220.5 L328.19202,219.5 L348.19202,219.5 L348.19202,220.5" fill="#3e4c86" stroke="none"/> +<path d="M328.19202,219.5 L328.19202,218.5 L348.19202,218.5 L348.19202,219.5" fill="#3d4d87" stroke="none"/> +<path d="M328.19202,218.5 L328.19202,217.5 L348.19202,217.5 L348.19202,218.5" fill="#3d4e87" stroke="none"/> +<path d="M328.19202,217.5 L328.19202,216.5 L348.19202,216.5 L348.19202,217.5" fill="#3c4f88" stroke="none"/> +<path d="M328.19202,216.5 L328.19202,215.5 L348.19202,215.5 L348.19202,216.5" fill="#3c5089" stroke="none"/> +<path d="M328.19202,215.5 L328.19202,214.5 L348.19202,214.5 L348.19202,215.5" fill="#3b518a" stroke="none"/> +<path d="M328.19202,214.5 L328.19202,213.5 L348.19202,213.5 L348.19202,214.5" fill="#3b528a" stroke="none"/> +<path d="M328.19202,213.5 L328.19202,212.5 L348.19202,212.5 L348.19202,213.5" fill="#3b538a" stroke="none"/> +<path d="M328.19202,212.5 L328.19202,211.5 L348.19202,211.5 L348.19202,212.5" fill="#3b548a" stroke="none"/> +<path d="M328.19202,211.5 L328.19202,210.5 L348.19202,210.5 L348.19202,211.5" fill="#3a558a" stroke="none"/> +<path d="M328.19202,210.5 L328.19202,209.5 L348.19202,209.5 L348.19202,210.5" fill="#3a568a" stroke="none"/> +<path d="M328.19202,209.5 L328.19202,208.5 L348.19202,208.5 L348.19202,209.5" fill="#3a578b" stroke="none"/> +<path d="M328.19202,208.5 L328.19202,207.5 L348.19202,207.5 L348.19202,208.5" fill="#3a588b" stroke="none"/> +<path d="M328.19202,207.5 L328.19202,206.5 L348.19202,206.5 L348.19202,207.5" fill="#3a598b" stroke="none"/> +<path d="M328.19202,206.5 L328.19202,205.5 L348.19202,205.5 L348.19202,206.5" fill="#3a5a8b" stroke="none"/> +<path d="M328.19202,205.5 L328.19202,204.5 L348.19202,204.5 L348.19202,205.5" fill="#395b8b" stroke="none"/> +<path d="M328.19202,204.5 L328.19202,203.5 L348.19202,203.5 L348.19202,204.5" fill="#395c8b" stroke="none"/> +<path d="M328.19202,203.5 L328.19202,202.5 L348.19202,202.5 L348.19202,203.5" fill="#395d8b" stroke="none"/> +<path d="M328.19202,202.5 L328.19202,201.5 L348.19202,201.5 L348.19202,202.5" fill="#395e8b" stroke="none"/> +<path d="M328.19202,201.5 L328.19202,200.5 L348.19202,200.5 L348.19202,201.5" fill="#395f8b" stroke="none"/> +<path d="M328.19202,200.5 L328.19202,199.5 L348.19202,199.5 L348.19202,200.5" fill="#38608b" stroke="none"/> +<path d="M328.19202,199.5 L328.19202,198.5 L348.19202,198.5 L348.19202,199.5" fill="#38618b" stroke="none"/> +<path d="M328.19202,198.5 L328.19202,197.5 L348.19202,197.5 L348.19202,198.5" fill="#38628b" stroke="none"/> +<path d="M328.19202,197.5 L328.19202,196.5 L348.19202,196.5 L348.19202,197.5" fill="#38638b" stroke="none"/> +<path d="M328.19202,196.5 L328.19202,195.5 L348.19202,195.5 L348.19202,196.5" fill="#37648b" stroke="none"/> +<path d="M328.19202,195.5 L328.19202,194.5 L348.19202,194.5 L348.19202,195.5" fill="#37658b" stroke="none"/> +<path d="M328.19202,194.5 L328.19202,193.5 L348.19202,193.5 L348.19202,194.5" fill="#37658c" stroke="none"/> +<path d="M328.19202,193.5 L328.19202,192.5 L348.19202,192.5 L348.19202,193.5" fill="#37668c" stroke="none"/> +<path d="M328.19202,192.5 L328.19202,191.5 L348.19202,191.5 L348.19202,192.5" fill="#36678c" stroke="none"/> +<path d="M328.19202,191.5 L328.19202,190.5 L348.19202,190.5 L348.19202,191.5" fill="#36688c" stroke="none"/> +<path d="M328.19202,190.5 L328.19202,189.5 L348.19202,189.5 L348.19202,190.5" fill="#36698c" stroke="none"/> +<path d="M328.19202,189.5 L328.19202,188.5 L348.19202,188.5 L348.19202,189.5" fill="#366a8c" stroke="none"/> +<path d="M328.19202,188.5 L328.19202,187.5 L348.19202,187.5 L348.19202,188.5" fill="#356b8c" stroke="none"/> +<path d="M328.19202,187.5 L328.19202,186.5 L348.19202,186.5 L348.19202,187.5" fill="#356c8c" stroke="none"/> +<path d="M328.19202,186.5 L328.19202,185.5 L348.19202,185.5 L348.19202,186.5" fill="#356d8c" stroke="none"/> +<path d="M328.19202,185.5 L328.19202,184.5 L348.19202,184.5 L348.19202,185.5" fill="#346e8c" stroke="none"/> +<path d="M328.19202,184.5 L328.19202,183.5 L348.19202,183.5 L348.19202,184.5" fill="#346f8c" stroke="none"/> +<path d="M328.19202,183.5 L328.19202,182.5 L348.19202,182.5 L348.19202,183.5" fill="#34708c" stroke="none"/> +<path d="M328.19202,182.5 L328.19202,181.5 L348.19202,181.5 L348.19202,182.5" fill="#33718c" stroke="none"/> +<path d="M328.19202,181.5 L328.19202,180.5 L348.19202,180.5 L348.19202,181.5" fill="#33728c" stroke="none"/> +<path d="M328.19202,180.5 L328.19202,179.5 L348.19202,179.5 L348.19202,180.5" fill="#33738c" stroke="none"/> +<path d="M328.19202,179.5 L328.19202,178.5 L348.19202,178.5 L348.19202,179.5" fill="#32748c" stroke="none"/> +<path d="M328.19202,178.5 L328.19202,177.5 L348.19202,177.5 L348.19202,178.5" fill="#32758c" stroke="none"/> +<path d="M328.19202,177.5 L328.19202,176.5 L348.19202,176.5 L348.19202,177.5" fill="#31768c" stroke="none"/> +<path d="M328.19202,176.5 L328.19202,175.5 L348.19202,175.5 L348.19202,176.5" fill="#31778c" stroke="none"/> +<path d="M328.19202,175.5 L328.19202,174.5 L348.19202,174.5 L348.19202,175.5" fill="#30788c" stroke="none"/> +<path d="M328.19202,174.5 L328.19202,173.5 L348.19202,173.5 L348.19202,174.5" fill="#30788c" stroke="none"/> +<path d="M328.19202,173.5 L328.19202,172.5 L348.19202,172.5 L348.19202,173.5" fill="#30798c" stroke="none"/> +<path d="M328.19202,172.5 L328.19202,171.5 L348.19202,171.5 L348.19202,172.5" fill="#2f7a8c" stroke="none"/> +<path d="M328.19202,171.5 L328.19202,170.5 L348.19202,170.5 L348.19202,171.5" fill="#2f7b8c" stroke="none"/> +<path d="M328.19202,170.5 L328.19202,169.5 L348.19202,169.5 L348.19202,170.5" fill="#2e7c8c" stroke="none"/> +<path d="M328.19202,169.5 L328.19202,168.5 L348.19202,168.5 L348.19202,169.5" fill="#2e7d8c" stroke="none"/> +<path d="M328.19202,168.5 L328.19202,167.5 L348.19202,167.5 L348.19202,168.5" fill="#2d7e8c" stroke="none"/> +<path d="M328.19202,167.5 L328.19202,166.5 L348.19202,166.5 L348.19202,167.5" fill="#2d7f8c" stroke="none"/> +<path d="M328.19202,166.5 L328.19202,165.5 L348.19202,165.5 L348.19202,166.5" fill="#2c808c" stroke="none"/> +<path d="M328.19202,165.5 L328.19202,164.5 L348.19202,164.5 L348.19202,165.5" fill="#2b818c" stroke="none"/> +<path d="M328.19202,164.5 L328.19202,163.5 L348.19202,163.5 L348.19202,164.5" fill="#2b828c" stroke="none"/> +<path d="M328.19202,163.5 L328.19202,162.5 L348.19202,162.5 L348.19202,163.5" fill="#2a838c" stroke="none"/> +<path d="M328.19202,162.5 L328.19202,161.5 L348.19202,161.5 L348.19202,162.5" fill="#2a848c" stroke="none"/> +<path d="M328.19202,161.5 L328.19202,160.5 L348.19202,160.5 L348.19202,161.5" fill="#29858c" stroke="none"/> +<path d="M328.19202,160.5 L328.19202,159.5 L348.19202,159.5 L348.19202,160.5" fill="#28868c" stroke="none"/> +<path d="M328.19202,159.5 L328.19202,158.5 L348.19202,158.5 L348.19202,159.5" fill="#28878c" stroke="none"/> +<path d="M328.19202,158.5 L328.19202,157.5 L348.19202,157.5 L348.19202,158.5" fill="#27888c" stroke="none"/> +<path d="M328.19202,157.5 L328.19202,156.5 L348.19202,156.5 L348.19202,157.5" fill="#26888c" stroke="none"/> +<path d="M328.19202,156.5 L328.19202,155.5 L348.19202,155.5 L348.19202,156.5" fill="#25898c" stroke="none"/> +<path d="M328.19202,155.5 L328.19202,154.5 L348.19202,154.5 L348.19202,155.5" fill="#248a8c" stroke="none"/> +<path d="M328.19202,154.5 L328.19202,153.5 L348.19202,153.5 L348.19202,154.5" fill="#248b8c" stroke="none"/> +<path d="M328.19202,153.5 L328.19202,152.5 L348.19202,152.5 L348.19202,153.5" fill="#238c8c" stroke="none"/> +<path d="M328.19202,152.5 L328.19202,151.5 L348.19202,151.5 L348.19202,152.5" fill="#228d8c" stroke="none"/> +<path d="M328.19202,151.5 L328.19202,150.5 L348.19202,150.5 L348.19202,151.5" fill="#218e8c" stroke="none"/> +<path d="M328.19202,150.5 L328.19202,149.5 L348.19202,149.5 L348.19202,150.5" fill="#208f8c" stroke="none"/> +<path d="M328.19202,149.5 L328.19202,148.5 L348.19202,148.5 L348.19202,149.5" fill="#21908c" stroke="none"/> +<path d="M328.19202,148.5 L328.19202,147.5 L348.19202,147.5 L348.19202,148.5" fill="#22918b" stroke="none"/> +<path d="M328.19202,147.5 L328.19202,146.5 L348.19202,146.5 L348.19202,147.5" fill="#23928b" stroke="none"/> +<path d="M328.19202,146.5 L328.19202,145.5 L348.19202,145.5 L348.19202,146.5" fill="#24938a" stroke="none"/> +<path d="M328.19202,145.5 L328.19202,144.5 L348.19202,144.5 L348.19202,145.5" fill="#25938a" stroke="none"/> +<path d="M328.19202,144.5 L328.19202,143.5 L348.19202,143.5 L348.19202,144.5" fill="#269489" stroke="none"/> +<path d="M328.19202,143.5 L328.19202,142.5 L348.19202,142.5 L348.19202,143.5" fill="#279589" stroke="none"/> +<path d="M328.19202,142.5 L328.19202,141.5 L348.19202,141.5 L348.19202,142.5" fill="#289689" stroke="none"/> +<path d="M328.19202,141.5 L328.19202,140.5 L348.19202,140.5 L348.19202,141.5" fill="#299788" stroke="none"/> +<path d="M328.19202,140.5 L328.19202,139.5 L348.19202,139.5 L348.19202,140.5" fill="#2a9888" stroke="none"/> +<path d="M328.19202,139.5 L328.19202,138.5 L348.19202,138.5 L348.19202,139.5" fill="#2b9987" stroke="none"/> +<path d="M328.19202,138.5 L328.19202,137.5 L348.19202,137.5 L348.19202,138.5" fill="#2c9a87" stroke="none"/> +<path d="M328.19202,137.5 L328.19202,136.5 L348.19202,136.5 L348.19202,137.5" fill="#2d9b86" stroke="none"/> +<path d="M328.19202,136.5 L328.19202,135.5 L348.19202,135.5 L348.19202,136.5" fill="#2e9b86" stroke="none"/> +<path d="M328.19202,135.5 L328.19202,134.5 L348.19202,134.5 L348.19202,135.5" fill="#2e9c85" stroke="none"/> +<path d="M328.19202,134.5 L328.19202,133.5 L348.19202,133.5 L348.19202,134.5" fill="#2f9d85" stroke="none"/> +<path d="M328.19202,133.5 L328.19202,132.5 L348.19202,132.5 L348.19202,133.5" fill="#309e84" stroke="none"/> +<path d="M328.19202,132.5 L328.19202,131.5 L348.19202,131.5 L348.19202,132.5" fill="#319f84" stroke="none"/> +<path d="M328.19202,131.5 L328.19202,130.5 L348.19202,130.5 L348.19202,131.5" fill="#32a083" stroke="none"/> +<path d="M328.19202,130.5 L328.19202,129.5 L348.19202,129.5 L348.19202,130.5" fill="#33a183" stroke="none"/> +<path d="M328.19202,129.5 L328.19202,128.5 L348.19202,128.5 L348.19202,129.5" fill="#34a282" stroke="none"/> +<path d="M328.19202,128.5 L328.19202,127.5 L348.19202,127.5 L348.19202,128.5" fill="#35a282" stroke="none"/> +<path d="M328.19202,127.5 L328.19202,126.5 L348.19202,126.5 L348.19202,127.5" fill="#36a381" stroke="none"/> +<path d="M328.19202,126.5 L328.19202,125.5 L348.19202,125.5 L348.19202,126.5" fill="#37a481" stroke="none"/> +<path d="M328.19202,125.5 L328.19202,124.5 L348.19202,124.5 L348.19202,125.5" fill="#38a580" stroke="none"/> +<path d="M328.19202,124.5 L328.19202,123.5 L348.19202,123.5 L348.19202,124.5" fill="#39a680" stroke="none"/> +<path d="M328.19202,123.5 L328.19202,122.5 L348.19202,122.5 L348.19202,123.5" fill="#39a77f" stroke="none"/> +<path d="M328.19202,122.5 L328.19202,121.5 L348.19202,121.5 L348.19202,122.5" fill="#3aa87e" stroke="none"/> +<path d="M328.19202,121.5 L328.19202,120.5 L348.19202,120.5 L348.19202,121.5" fill="#3ba97e" stroke="none"/> +<path d="M328.19202,120.5 L328.19202,119.5 L348.19202,119.5 L348.19202,120.5" fill="#3caa7d" stroke="none"/> +<path d="M328.19202,119.5 L328.19202,118.5 L348.19202,118.5 L348.19202,119.5" fill="#3daa7d" stroke="none"/> +<path d="M328.19202,118.5 L328.19202,117.5 L348.19202,117.5 L348.19202,118.5" fill="#3eab7c" stroke="none"/> +<path d="M328.19202,117.5 L328.19202,116.5 L348.19202,116.5 L348.19202,117.5" fill="#3fac7b" stroke="none"/> +<path d="M328.19202,116.5 L328.19202,115.5 L348.19202,115.5 L348.19202,116.5" fill="#40ad7b" stroke="none"/> +<path d="M328.19202,115.5 L328.19202,114.5 L348.19202,114.5 L348.19202,115.5" fill="#41ae7a" stroke="none"/> +<path d="M328.19202,114.5 L328.19202,113.5 L348.19202,113.5 L348.19202,114.5" fill="#41af79" stroke="none"/> +<path d="M328.19202,113.5 L328.19202,112.5 L348.19202,112.5 L348.19202,113.5" fill="#42b079" stroke="none"/> +<path d="M328.19202,112.5 L328.19202,111.5 L348.19202,111.5 L348.19202,112.5" fill="#43b178" stroke="none"/> +<path d="M328.19202,111.5 L328.19202,110.5 L348.19202,110.5 L348.19202,111.5" fill="#44b178" stroke="none"/> +<path d="M328.19202,110.5 L328.19202,109.5 L348.19202,109.5 L348.19202,110.5" fill="#45b277" stroke="none"/> +<path d="M328.19202,109.5 L328.19202,108.5 L348.19202,108.5 L348.19202,109.5" fill="#46b376" stroke="none"/> +<path d="M328.19202,108.5 L328.19202,107.5 L348.19202,107.5 L348.19202,108.5" fill="#47b475" stroke="none"/> +<path d="M328.19202,107.5 L328.19202,106.5 L348.19202,106.5 L348.19202,107.5" fill="#48b575" stroke="none"/> +<path d="M328.19202,106.5 L328.19202,105.5 L348.19202,105.5 L348.19202,106.5" fill="#49b674" stroke="none"/> +<path d="M328.19202,105.5 L328.19202,104.5 L348.19202,104.5 L348.19202,105.5" fill="#49b773" stroke="none"/> +<path d="M328.19202,104.5 L328.19202,103.5 L348.19202,103.5 L348.19202,104.5" fill="#4ab773" stroke="none"/> +<path d="M328.19202,103.5 L328.19202,102.5 L348.19202,102.5 L348.19202,103.5" fill="#4bb872" stroke="none"/> +<path d="M328.19202,102.5 L328.19202,101.5 L348.19202,101.5 L348.19202,102.5" fill="#4cb971" stroke="none"/> +<path d="M328.19202,101.5 L328.19202,100.5 L348.19202,100.5 L348.19202,101.5" fill="#4dba70" stroke="none"/> +<path d="M328.19202,100.5 L328.19202,99.5 L348.19202,99.5 L348.19202,100.5" fill="#4ebb6f" stroke="none"/> +<path d="M328.19202,99.5 L328.19202,98.5 L348.19202,98.5 L348.19202,99.5" fill="#4fbc6f" stroke="none"/> +<path d="M328.19202,98.5 L328.19202,97.5 L348.19202,97.5 L348.19202,98.5" fill="#50bd6e" stroke="none"/> +<path d="M328.19202,97.5 L328.19202,96.5 L348.19202,96.5 L348.19202,97.5" fill="#50be6d" stroke="none"/> +<path d="M328.19202,96.5 L328.19202,95.5 L348.19202,95.5 L348.19202,96.5" fill="#51be6c" stroke="none"/> +<path d="M328.19202,95.5 L328.19202,94.5 L348.19202,94.5 L348.19202,95.5" fill="#52bf6b" stroke="none"/> +<path d="M328.19202,94.5 L328.19202,93.5 L348.19202,93.5 L348.19202,94.5" fill="#53c06b" stroke="none"/> +<path d="M328.19202,93.5 L328.19202,92.5 L348.19202,92.5 L348.19202,93.5" fill="#54c16a" stroke="none"/> +<path d="M328.19202,92.5 L328.19202,91.5 L348.19202,91.5 L348.19202,92.5" fill="#55c269" stroke="none"/> +<path d="M328.19202,91.5 L328.19202,90.5 L348.19202,90.5 L348.19202,91.5" fill="#56c368" stroke="none"/> +<path d="M328.19202,90.5 L328.19202,89.5 L348.19202,89.5 L348.19202,90.5" fill="#57c467" stroke="none"/> +<path d="M328.19202,89.5 L328.19202,88.5 L348.19202,88.5 L348.19202,89.5" fill="#57c566" stroke="none"/> +<path d="M328.19202,88.5 L328.19202,87.5 L348.19202,87.5 L348.19202,88.5" fill="#58c565" stroke="none"/> +<path d="M328.19202,87.5 L328.19202,86.5 L348.19202,86.5 L348.19202,87.5" fill="#59c664" stroke="none"/> +<path d="M328.19202,86.5 L328.19202,85.5 L348.19202,85.5 L348.19202,86.5" fill="#5ac763" stroke="none"/> +<path d="M328.19202,85.5 L328.19202,84.5 L348.19202,84.5 L348.19202,85.5" fill="#5bc862" stroke="none"/> +<path d="M328.19202,84.5 L328.19202,83.5 L348.19202,83.5 L348.19202,84.5" fill="#5fc962" stroke="none"/> +<path d="M328.19202,83.5 L328.19202,82.5 L348.19202,82.5 L348.19202,83.5" fill="#62c961" stroke="none"/> +<path d="M328.19202,82.5 L328.19202,81.5 L348.19202,81.5 L348.19202,82.5" fill="#65ca61" stroke="none"/> +<path d="M328.19202,81.5 L328.19202,80.5 L348.19202,80.5 L348.19202,81.5" fill="#69ca60" stroke="none"/> +<path d="M328.19202,80.5 L328.19202,79.5 L348.19202,79.5 L348.19202,80.5" fill="#6ccb60" stroke="none"/> +<path d="M328.19202,79.5 L328.19202,78.5 L348.19202,78.5 L348.19202,79.5" fill="#6fcb5f" stroke="none"/> +<path d="M328.19202,78.5 L328.19202,77.5 L348.19202,77.5 L348.19202,78.5" fill="#72cc5f" stroke="none"/> +<path d="M328.19202,77.5 L328.19202,76.5 L348.19202,76.5 L348.19202,77.5" fill="#75cc5e" stroke="none"/> +<path d="M328.19202,76.5 L328.19202,75.5 L348.19202,75.5 L348.19202,76.5" fill="#78cd5e" stroke="none"/> +<path d="M328.19202,75.5 L328.19202,74.5 L348.19202,74.5 L348.19202,75.5" fill="#7bcd5d" stroke="none"/> +<path d="M328.19202,74.5 L328.19202,73.5 L348.19202,73.5 L348.19202,74.5" fill="#7ece5d" stroke="none"/> +<path d="M328.19202,73.5 L328.19202,72.5 L348.19202,72.5 L348.19202,73.5" fill="#80ce5c" stroke="none"/> +<path d="M328.19202,72.5 L328.19202,71.5 L348.19202,71.5 L348.19202,72.5" fill="#83cf5c" stroke="none"/> +<path d="M328.19202,71.5 L328.19202,70.5 L348.19202,70.5 L348.19202,71.5" fill="#86cf5b" stroke="none"/> +<path d="M328.19202,70.5 L328.19202,69.5 L348.19202,69.5 L348.19202,70.5" fill="#89d05b" stroke="none"/> +<path d="M328.19202,69.5 L328.19202,68.5 L348.19202,68.5 L348.19202,69.5" fill="#8bd05a" stroke="none"/> +<path d="M328.19202,68.5 L328.19202,67.5 L348.19202,67.5 L348.19202,68.5" fill="#8ed159" stroke="none"/> +<path d="M328.19202,67.5 L328.19202,66.5 L348.19202,66.5 L348.19202,67.5" fill="#91d159" stroke="none"/> +<path d="M328.19202,66.5 L328.19202,65.5 L348.19202,65.5 L348.19202,66.5" fill="#93d258" stroke="none"/> +<path d="M328.19202,65.5 L328.19202,64.5 L348.19202,64.5 L348.19202,65.5" fill="#96d258" stroke="none"/> +<path d="M328.19202,64.5 L328.19202,63.5 L348.19202,63.5 L348.19202,64.5" fill="#98d357" stroke="none"/> +<path d="M328.19202,63.5 L328.19202,62.5 L348.19202,62.5 L348.19202,63.5" fill="#9bd356" stroke="none"/> +<path d="M328.19202,62.5 L328.19202,61.5 L348.19202,61.5 L348.19202,62.5" fill="#9dd456" stroke="none"/> +<path d="M328.19202,61.5 L328.19202,60.5 L348.19202,60.5 L348.19202,61.5" fill="#a0d455" stroke="none"/> +<path d="M328.19202,60.5 L328.19202,59.5 L348.19202,59.5 L348.19202,60.5" fill="#a2d554" stroke="none"/> +<path d="M328.19202,59.5 L328.19202,58.5 L348.19202,58.5 L348.19202,59.5" fill="#a5d554" stroke="none"/> +<path d="M328.19202,58.5 L328.19202,57.5 L348.19202,57.5 L348.19202,58.5" fill="#a7d653" stroke="none"/> +<path d="M328.19202,57.5 L328.19202,56.5 L348.19202,56.5 L348.19202,57.5" fill="#aad652" stroke="none"/> +<path d="M328.19202,56.5 L328.19202,55.5 L348.19202,55.5 L348.19202,56.5" fill="#acd752" stroke="none"/> +<path d="M328.19202,55.5 L328.19202,54.5 L348.19202,54.5 L348.19202,55.5" fill="#afd751" stroke="none"/> +<path d="M328.19202,54.5 L328.19202,53.5 L348.19202,53.5 L348.19202,54.5" fill="#b1d850" stroke="none"/> +<path d="M328.19202,53.5 L328.19202,52.5 L348.19202,52.5 L348.19202,53.5" fill="#b3d84f" stroke="none"/> +<path d="M328.19202,52.5 L328.19202,51.5 L348.19202,51.5 L348.19202,52.5" fill="#b6d94f" stroke="none"/> +<path d="M328.19202,51.5 L328.19202,50.5 L348.19202,50.5 L348.19202,51.5" fill="#b8d94e" stroke="none"/> +<path d="M328.19202,50.5 L328.19202,49.5 L348.19202,49.5 L348.19202,50.5" fill="#bada4d" stroke="none"/> +<path d="M328.19202,49.5 L328.19202,48.5 L348.19202,48.5 L348.19202,49.5" fill="#bdda4c" stroke="none"/> +<path d="M328.19202,48.5 L328.19202,47.5 L348.19202,47.5 L348.19202,48.5" fill="#bfdb4b" stroke="none"/> +<path d="M328.19202,47.5 L328.19202,46.5 L348.19202,46.5 L348.19202,47.5" fill="#c1db4a" stroke="none"/> +<path d="M328.19202,46.5 L328.19202,45.5 L348.19202,45.5 L348.19202,46.5" fill="#c4dc49" stroke="none"/> +<path d="M328.19202,45.5 L328.19202,44.5 L348.19202,44.5 L348.19202,45.5" fill="#c6dc48" stroke="none"/> +<path d="M328.19202,44.5 L328.19202,43.5 L348.19202,43.5 L348.19202,44.5" fill="#c8dd47" stroke="none"/> +<path d="M328.19202,43.5 L328.19202,42.5 L348.19202,42.5 L348.19202,43.5" fill="#cadd46" stroke="none"/> +<path d="M328.19202,42.5 L328.19202,41.5 L348.19202,41.5 L348.19202,42.5" fill="#cddd45" stroke="none"/> +<path d="M328.19202,41.5 L328.19202,40.5 L348.19202,40.5 L348.19202,41.5" fill="#cfde44" stroke="none"/> +<path d="M328.19202,40.5 L328.19202,39.5 L348.19202,39.5 L348.19202,40.5" fill="#d1de43" stroke="none"/> +<path d="M328.19202,39.5 L328.19202,38.5 L348.19202,38.5 L348.19202,39.5" fill="#d3df42" stroke="none"/> +<path d="M328.19202,38.5 L328.19202,37.5 L348.19202,37.5 L348.19202,38.5" fill="#d6df41" stroke="none"/> +<path d="M328.19202,37.5 L328.19202,36.5 L348.19202,36.5 L348.19202,37.5" fill="#d8e040" stroke="none"/> +<path d="M328.19202,36.5 L328.19202,35.5 L348.19202,35.5 L348.19202,36.5" fill="#dae03f" stroke="none"/> +<path d="M328.19202,35.5 L328.19202,34.5 L348.19202,34.5 L348.19202,35.5" fill="#dce13e" stroke="none"/> +<path d="M328.19202,34.5 L328.19202,33.5 L348.19202,33.5 L348.19202,34.5" fill="#dfe13c" stroke="none"/> +<path d="M328.19202,33.5 L328.19202,32.5 L348.19202,32.5 L348.19202,33.5" fill="#e1e13b" stroke="none"/> +<path d="M328.19202,32.5 L328.19202,31.5 L348.19202,31.5 L348.19202,32.5" fill="#e3e23a" stroke="none"/> +<path d="M328.19202,31.5 L328.19202,30.5 L348.19202,30.5 L348.19202,31.5" fill="#e5e238" stroke="none"/> +<path d="M328.19202,30.5 L328.19202,29.5 L348.19202,29.5 L348.19202,30.5" fill="#e7e337" stroke="none"/> +<path d="M328.19202,29.5 L328.19202,28.5 L348.19202,28.5 L348.19202,29.5" fill="#eae335" stroke="none"/> +<path d="M328.19202,28.5 L328.19202,27.5 L348.19202,27.5 L348.19202,28.5" fill="#ece434" stroke="none"/> +<path d="M328.19202,27.5 L328.19202,26.5 L348.19202,26.5 L348.19202,27.5" fill="#eee432" stroke="none"/> +<path d="M328.19202,26.5 L328.19202,25.5 L348.19202,25.5 L348.19202,26.5" fill="#f0e530" stroke="none"/> +<path d="M328.19202,25.5 L328.19202,24.5 L348.19202,24.5 L348.19202,25.5" fill="#f2e52f" stroke="none"/> +<path d="M328.19202,24.5 L328.19202,23.5 L348.19202,23.5 L348.19202,24.5" fill="#f4e52d" stroke="none"/> +<path d="M328.19202,23.5 L328.19202,22.5 L348.19202,22.5 L348.19202,23.5" fill="#f7e62b" stroke="none"/> +<path d="M328.19202,22.5 L328.19202,21.5 L348.19202,21.5 L348.19202,22.5" fill="#f9e629" stroke="none"/> +<path d="M328.19202,21.5 L328.19202,20.5 L348.19202,20.5 L348.19202,21.5" fill="#fbe726" stroke="none"/> +<path d="M328.19202,20.5 L328.19202,20 L348.19202,20 L348.19202,20.5" fill="#fde724" stroke="none"/> +<path d="M328.19202,20 L348.19202,20 L348.19202,280 L328.19202,280 z" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M348.19202,265.58292 L352.19202,265.58292" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M6.276,-1.0799999 Q6.276,-0.036000013,6.12,0.78 Q5.964,1.5960001,5.622,2.1660001 Q5.28,2.736,4.734,3.036 Q4.188,3.336,3.42,3.336 Q2.46,3.336,1.83,2.808 Q1.2,2.2800002,0.894,1.2900001 Q0.588,0.29999995,0.588,-1.0799999 Q0.588,-2.4720001,0.87,-3.4559999 Q1.152,-4.44,1.776,-4.9620004 Q2.4,-5.4839997,3.42,-5.4839997 Q4.38,-5.4839997,5.0160003,-4.9620004 Q5.652,-4.44,5.964,-3.4559999 Q6.276,-2.4720001,6.276,-1.0799999 z M1.644,-1.0799999 Q1.644,0.095999956,1.818,0.87600017 Q1.992,1.656,2.382,2.046 Q2.772,2.436,3.42,2.436 Q4.068,2.436,4.458,2.052 Q4.848,1.6680001,5.028,0.88199997 Q5.208,0.095999956,5.208,-1.0799999 Q5.208,-2.256,5.028,-3.0300002 Q4.848,-3.804,4.458,-4.194 Q4.068,-4.584,3.42,-4.584 Q2.772,-4.584,2.382,-4.194 Q1.992,-3.804,1.818,-3.0300002 Q1.644,-2.256,1.644,-1.0799999 z M7.7279997,2.568 Q7.7279997,2.124,7.944,1.9440001 Q8.16,1.764,8.46,1.764 Q8.771999,1.764,8.9939995,1.9440001 Q9.216,2.124,9.216,2.568 Q9.216,3,8.9939995,3.1920002 Q8.771999,3.384,8.46,3.384 Q8.16,3.384,7.944,3.1920002 Q7.7279997,3,7.7279997,2.568 z M14.34,3.216 L13.308,3.216 L13.308,-2.7719998 Q13.308,-3.12,13.314,-3.3600001 Q13.32,-3.6,13.332,-3.81 Q13.344,-4.02,13.356,-4.248 Q13.164,-4.0559998,13.007999,-3.9239998 Q12.852,-3.7919998,12.6119995,-3.5879998 L11.7,-2.8439999 L11.148,-3.552 L13.464,-5.3519998 L14.34,-5.3519998 L14.34,3.216 z M23.220001,-1.0799999 Q23.220001,-0.036000013,23.064,0.78 Q22.908,1.5960001,22.566,2.1660001 Q22.224,2.736,21.678001,3.036 Q21.132,3.336,20.364,3.336 Q19.404,3.336,18.774,2.808 Q18.144001,2.2800002,17.838,1.2900001 Q17.532,0.29999995,17.532,-1.0799999 Q17.532,-2.4720001,17.814001,-3.4559999 Q18.096,-4.44,18.720001,-4.9620004 Q19.344,-5.4839997,20.364,-5.4839997 Q21.324001,-5.4839997,21.960001,-4.9620004 Q22.596,-4.44,22.908,-3.4559999 Q23.220001,-2.4720001,23.220001,-1.0799999 z M18.588001,-1.0799999 Q18.588001,0.095999956,18.762001,0.87600017 Q18.936,1.656,19.326,2.046 Q19.716,2.436,20.364,2.436 Q21.012001,2.436,21.402,2.052 Q21.792,1.6680001,21.972,0.88199997 Q22.152,0.095999956,22.152,-1.0799999 Q22.152,-2.256,21.972,-3.0300002 Q21.792,-3.804,21.402,-4.194 Q21.012001,-4.584,20.364,-4.584 Q19.716,-4.584,19.326,-4.194 Q18.936,-3.804,18.762001,-3.0300002 Q18.588001,-2.256,18.588001,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 356.19202 265.58292)"/> +<path d="M348.19202,237.0792 L352.19202,237.0792" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M6.276,-1.0799999 Q6.276,-0.036000013,6.12,0.78 Q5.964,1.5960001,5.622,2.1660001 Q5.28,2.736,4.734,3.036 Q4.188,3.336,3.42,3.336 Q2.46,3.336,1.83,2.808 Q1.2,2.2800002,0.894,1.2900001 Q0.588,0.29999995,0.588,-1.0799999 Q0.588,-2.4720001,0.87,-3.4559999 Q1.152,-4.44,1.776,-4.9620004 Q2.4,-5.4839997,3.42,-5.4839997 Q4.38,-5.4839997,5.0160003,-4.9620004 Q5.652,-4.44,5.964,-3.4559999 Q6.276,-2.4720001,6.276,-1.0799999 z M1.644,-1.0799999 Q1.644,0.095999956,1.818,0.87600017 Q1.992,1.656,2.382,2.046 Q2.772,2.436,3.42,2.436 Q4.068,2.436,4.458,2.052 Q4.848,1.6680001,5.028,0.88199997 Q5.208,0.095999956,5.208,-1.0799999 Q5.208,-2.256,5.028,-3.0300002 Q4.848,-3.804,4.458,-4.194 Q4.068,-4.584,3.42,-4.584 Q2.772,-4.584,2.382,-4.194 Q1.992,-3.804,1.818,-3.0300002 Q1.644,-2.256,1.644,-1.0799999 z M7.7279997,2.568 Q7.7279997,2.124,7.944,1.9440001 Q8.16,1.764,8.46,1.764 Q8.771999,1.764,8.9939995,1.9440001 Q9.216,2.124,9.216,2.568 Q9.216,3,8.9939995,3.1920002 Q8.771999,3.384,8.46,3.384 Q8.16,3.384,7.944,3.1920002 Q7.7279997,3,7.7279997,2.568 z M16.32,3.216 L10.656,3.216 L10.656,2.3400002 L12.9,0.07200003 Q13.548,-0.576,13.992,-1.0799999 Q14.436,-1.5840001,14.664,-2.0700002 Q14.892,-2.5559998,14.892,-3.132 Q14.892,-3.8400002,14.472,-4.206 Q14.052,-4.572,13.38,-4.572 Q12.7560005,-4.572,12.282,-4.356 Q11.808,-4.14,11.316,-3.756 L10.752,-4.464 Q11.088,-4.752,11.49,-4.98 Q11.892,-5.2079997,12.366,-5.3399997 Q12.84,-5.4719996,13.38,-5.4719996 Q14.184,-5.4719996,14.76,-5.1959996 Q15.336,-4.9199996,15.653999,-4.41 Q15.972,-3.9,15.972,-3.192 Q15.972,-2.52,15.696,-1.9320002 Q15.42,-1.3439999,14.9279995,-0.7739999 Q14.436,-0.204,13.776,0.444 L11.988,2.2080002 L11.988,2.256 L16.32,2.256 L16.32,3.216 z M23.220001,-1.0799999 Q23.220001,-0.036000013,23.064,0.78 Q22.908,1.5960001,22.566,2.1660001 Q22.224,2.736,21.678001,3.036 Q21.132,3.336,20.364,3.336 Q19.404,3.336,18.774,2.808 Q18.144001,2.2800002,17.838,1.2900001 Q17.532,0.29999995,17.532,-1.0799999 Q17.532,-2.4720001,17.814001,-3.4559999 Q18.096,-4.44,18.720001,-4.9620004 Q19.344,-5.4839997,20.364,-5.4839997 Q21.324001,-5.4839997,21.960001,-4.9620004 Q22.596,-4.44,22.908,-3.4559999 Q23.220001,-2.4720001,23.220001,-1.0799999 z M18.588001,-1.0799999 Q18.588001,0.095999956,18.762001,0.87600017 Q18.936,1.656,19.326,2.046 Q19.716,2.436,20.364,2.436 Q21.012001,2.436,21.402,2.052 Q21.792,1.6680001,21.972,0.88199997 Q22.152,0.095999956,22.152,-1.0799999 Q22.152,-2.256,21.972,-3.0300002 Q21.792,-3.804,21.402,-4.194 Q21.012001,-4.584,20.364,-4.584 Q19.716,-4.584,19.326,-4.194 Q18.936,-3.804,18.762001,-3.0300002 Q18.588001,-2.256,18.588001,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 356.19202 237.0792)"/> +<path d="M348.19202,208.57547 L352.19202,208.57547" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M6.276,-1.0799999 Q6.276,-0.036000013,6.12,0.78 Q5.964,1.5960001,5.622,2.1660001 Q5.28,2.736,4.734,3.036 Q4.188,3.336,3.42,3.336 Q2.46,3.336,1.83,2.808 Q1.2,2.2800002,0.894,1.2900001 Q0.588,0.29999995,0.588,-1.0799999 Q0.588,-2.4720001,0.87,-3.4559999 Q1.152,-4.44,1.776,-4.9620004 Q2.4,-5.4839997,3.42,-5.4839997 Q4.38,-5.4839997,5.0160003,-4.9620004 Q5.652,-4.44,5.964,-3.4559999 Q6.276,-2.4720001,6.276,-1.0799999 z M1.644,-1.0799999 Q1.644,0.095999956,1.818,0.87600017 Q1.992,1.656,2.382,2.046 Q2.772,2.436,3.42,2.436 Q4.068,2.436,4.458,2.052 Q4.848,1.6680001,5.028,0.88199997 Q5.208,0.095999956,5.208,-1.0799999 Q5.208,-2.256,5.028,-3.0300002 Q4.848,-3.804,4.458,-4.194 Q4.068,-4.584,3.42,-4.584 Q2.772,-4.584,2.382,-4.194 Q1.992,-3.804,1.818,-3.0300002 Q1.644,-2.256,1.644,-1.0799999 z M7.7279997,2.568 Q7.7279997,2.124,7.944,1.9440001 Q8.16,1.764,8.46,1.764 Q8.771999,1.764,8.9939995,1.9440001 Q9.216,2.124,9.216,2.568 Q9.216,3,8.9939995,3.1920002 Q8.771999,3.384,8.46,3.384 Q8.16,3.384,7.944,3.1920002 Q7.7279997,3,7.7279997,2.568 z M15.996,-3.348 Q15.996,-2.7719998,15.780001,-2.3519998 Q15.564,-1.9320002,15.162001,-1.6679997 Q14.76,-1.4039998,14.219999,-1.296 L14.219999,-1.2480001 Q15.252,-1.1279998,15.7560005,-0.5999999 Q16.26,-0.07200003,16.26,0.78 Q16.26,1.524,15.912001,2.106 Q15.564,2.6880002,14.837999,3.012 Q14.1119995,3.336,12.972,3.336 Q12.3,3.336,11.724,3.234 Q11.148,3.132,10.62,2.868 L10.62,1.8840001 Q11.16,2.1480002,11.784,2.298 Q12.408,2.448,12.984,2.448 Q14.136,2.448,14.646,1.998 Q15.156,1.5480001,15.156,0.75600004 Q15.156,0.21600008,14.874001,-0.11399984 Q14.592,-0.444,14.052,-0.5999999 Q13.512,-0.75600004,12.7560005,-0.75600004 L11.9279995,-0.75600004 L11.9279995,-1.6560001 L12.768,-1.6560001 Q13.476,-1.6560001,13.95,-1.8600001 Q14.424,-2.0640001,14.67,-2.4299998 Q14.916,-2.796,14.916,-3.276 Q14.916,-3.9,14.496,-4.242 Q14.076,-4.584,13.356,-4.584 Q12.9,-4.584,12.528,-4.494 Q12.156,-4.404,11.838,-4.242 Q11.52,-4.08,11.196,-3.8639998 L10.668,-4.584 Q11.124,-4.944,11.802,-5.2079997 Q12.48,-5.4719996,13.344,-5.4719996 Q14.688,-5.4719996,15.342,-4.872 Q15.996,-4.272,15.996,-3.348 z M23.220001,-1.0799999 Q23.220001,-0.036000013,23.064,0.78 Q22.908,1.5960001,22.566,2.1660001 Q22.224,2.736,21.678001,3.036 Q21.132,3.336,20.364,3.336 Q19.404,3.336,18.774,2.808 Q18.144001,2.2800002,17.838,1.2900001 Q17.532,0.29999995,17.532,-1.0799999 Q17.532,-2.4720001,17.814001,-3.4559999 Q18.096,-4.44,18.720001,-4.9620004 Q19.344,-5.4839997,20.364,-5.4839997 Q21.324001,-5.4839997,21.960001,-4.9620004 Q22.596,-4.44,22.908,-3.4559999 Q23.220001,-2.4720001,23.220001,-1.0799999 z M18.588001,-1.0799999 Q18.588001,0.095999956,18.762001,0.87600017 Q18.936,1.656,19.326,2.046 Q19.716,2.436,20.364,2.436 Q21.012001,2.436,21.402,2.052 Q21.792,1.6680001,21.972,0.88199997 Q22.152,0.095999956,22.152,-1.0799999 Q22.152,-2.256,21.972,-3.0300002 Q21.792,-3.804,21.402,-4.194 Q21.012001,-4.584,20.364,-4.584 Q19.716,-4.584,19.326,-4.194 Q18.936,-3.804,18.762001,-3.0300002 Q18.588001,-2.256,18.588001,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 356.19202 208.57547)"/> +<path d="M348.19202,180.07175 L352.19202,180.07175" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M6.276,-1.0799999 Q6.276,-0.036000013,6.12,0.78 Q5.964,1.5960001,5.622,2.1660001 Q5.28,2.736,4.734,3.036 Q4.188,3.336,3.42,3.336 Q2.46,3.336,1.83,2.808 Q1.2,2.2800002,0.894,1.2900001 Q0.588,0.29999995,0.588,-1.0799999 Q0.588,-2.4720001,0.87,-3.4559999 Q1.152,-4.44,1.776,-4.9620004 Q2.4,-5.4839997,3.42,-5.4839997 Q4.38,-5.4839997,5.0160003,-4.9620004 Q5.652,-4.44,5.964,-3.4559999 Q6.276,-2.4720001,6.276,-1.0799999 z M1.644,-1.0799999 Q1.644,0.095999956,1.818,0.87600017 Q1.992,1.656,2.382,2.046 Q2.772,2.436,3.42,2.436 Q4.068,2.436,4.458,2.052 Q4.848,1.6680001,5.028,0.88199997 Q5.208,0.095999956,5.208,-1.0799999 Q5.208,-2.256,5.028,-3.0300002 Q4.848,-3.804,4.458,-4.194 Q4.068,-4.584,3.42,-4.584 Q2.772,-4.584,2.382,-4.194 Q1.992,-3.804,1.818,-3.0300002 Q1.644,-2.256,1.644,-1.0799999 z M7.7279997,2.568 Q7.7279997,2.124,7.944,1.9440001 Q8.16,1.764,8.46,1.764 Q8.771999,1.764,8.9939995,1.9440001 Q9.216,2.124,9.216,2.568 Q9.216,3,8.9939995,3.1920002 Q8.771999,3.384,8.46,3.384 Q8.16,3.384,7.944,3.1920002 Q7.7279997,3,7.7279997,2.568 z M16.704,1.2720001 L15.455999,1.2720001 L15.455999,3.216 L14.436,3.216 L14.436,1.2720001 L10.332,1.2720001 L10.332,0.37199998 L14.364,-5.4 L15.455999,-5.4 L15.455999,0.32400012 L16.704,0.32400012 L16.704,1.2720001 z M14.436,-2.376 Q14.436,-2.6880002,14.441999,-2.946 Q14.448,-3.204,14.46,-3.4320002 Q14.472,-3.6599998,14.478001,-3.87 Q14.483999,-4.08,14.496,-4.272 L14.448,-4.272 Q14.351999,-4.044,14.208,-3.7800002 Q14.064,-3.5159998,13.932,-3.336 L11.364,0.32400012 L14.436,0.32400012 L14.436,-2.376 z M23.220001,-1.0799999 Q23.220001,-0.036000013,23.064,0.78 Q22.908,1.5960001,22.566,2.1660001 Q22.224,2.736,21.678001,3.036 Q21.132,3.336,20.364,3.336 Q19.404,3.336,18.774,2.808 Q18.144001,2.2800002,17.838,1.2900001 Q17.532,0.29999995,17.532,-1.0799999 Q17.532,-2.4720001,17.814001,-3.4559999 Q18.096,-4.44,18.720001,-4.9620004 Q19.344,-5.4839997,20.364,-5.4839997 Q21.324001,-5.4839997,21.960001,-4.9620004 Q22.596,-4.44,22.908,-3.4559999 Q23.220001,-2.4720001,23.220001,-1.0799999 z M18.588001,-1.0799999 Q18.588001,0.095999956,18.762001,0.87600017 Q18.936,1.656,19.326,2.046 Q19.716,2.436,20.364,2.436 Q21.012001,2.436,21.402,2.052 Q21.792,1.6680001,21.972,0.88199997 Q22.152,0.095999956,22.152,-1.0799999 Q22.152,-2.256,21.972,-3.0300002 Q21.792,-3.804,21.402,-4.194 Q21.012001,-4.584,20.364,-4.584 Q19.716,-4.584,19.326,-4.194 Q18.936,-3.804,18.762001,-3.0300002 Q18.588001,-2.256,18.588001,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 356.19202 180.07175)"/> +<path d="M348.19202,151.56801 L352.19202,151.56801" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M6.276,-1.0799999 Q6.276,-0.036000013,6.12,0.78 Q5.964,1.5960001,5.622,2.1660001 Q5.28,2.736,4.734,3.036 Q4.188,3.336,3.42,3.336 Q2.46,3.336,1.83,2.808 Q1.2,2.2800002,0.894,1.2900001 Q0.588,0.29999995,0.588,-1.0799999 Q0.588,-2.4720001,0.87,-3.4559999 Q1.152,-4.44,1.776,-4.9620004 Q2.4,-5.4839997,3.42,-5.4839997 Q4.38,-5.4839997,5.0160003,-4.9620004 Q5.652,-4.44,5.964,-3.4559999 Q6.276,-2.4720001,6.276,-1.0799999 z M1.644,-1.0799999 Q1.644,0.095999956,1.818,0.87600017 Q1.992,1.656,2.382,2.046 Q2.772,2.436,3.42,2.436 Q4.068,2.436,4.458,2.052 Q4.848,1.6680001,5.028,0.88199997 Q5.208,0.095999956,5.208,-1.0799999 Q5.208,-2.256,5.028,-3.0300002 Q4.848,-3.804,4.458,-4.194 Q4.068,-4.584,3.42,-4.584 Q2.772,-4.584,2.382,-4.194 Q1.992,-3.804,1.818,-3.0300002 Q1.644,-2.256,1.644,-1.0799999 z M7.7279997,2.568 Q7.7279997,2.124,7.944,1.9440001 Q8.16,1.764,8.46,1.764 Q8.771999,1.764,8.9939995,1.9440001 Q9.216,2.124,9.216,2.568 Q9.216,3,8.9939995,3.1920002 Q8.771999,3.384,8.46,3.384 Q8.16,3.384,7.944,3.1920002 Q7.7279997,3,7.7279997,2.568 z M13.38,-2.04 Q14.2560005,-2.04,14.903999,-1.7399998 Q15.552,-1.44,15.906,-0.88199997 Q16.26,-0.32399988,16.26,0.48000002 Q16.26,1.368,15.875999,2.0100002 Q15.492001,2.652,14.778,2.994 Q14.064,3.336,13.056,3.336 Q12.396,3.336,11.814,3.216 Q11.232,3.0960002,10.8359995,2.868 L10.8359995,1.8720001 Q11.268,2.1360002,11.886,2.286 Q12.504,2.436,13.068,2.436 Q13.704,2.436,14.1779995,2.2380002 Q14.652,2.04,14.916,1.626 Q15.18,1.2120001,15.18,0.58800006 Q15.18,-0.25199986,14.664,-0.7019999 Q14.148,-1.152,13.032,-1.152 Q12.696,-1.152,12.264,-1.092 Q11.832,-1.0320001,11.568,-0.9720001 L11.04,-1.3080001 L11.364,-5.3519998 L15.66,-5.3519998 L15.66,-4.392 L12.264,-4.392 L12.059999,-1.908 Q12.264,-1.9439998,12.6119995,-1.9920001 Q12.96,-2.04,13.38,-2.04 z M23.220001,-1.0799999 Q23.220001,-0.036000013,23.064,0.78 Q22.908,1.5960001,22.566,2.1660001 Q22.224,2.736,21.678001,3.036 Q21.132,3.336,20.364,3.336 Q19.404,3.336,18.774,2.808 Q18.144001,2.2800002,17.838,1.2900001 Q17.532,0.29999995,17.532,-1.0799999 Q17.532,-2.4720001,17.814001,-3.4559999 Q18.096,-4.44,18.720001,-4.9620004 Q19.344,-5.4839997,20.364,-5.4839997 Q21.324001,-5.4839997,21.960001,-4.9620004 Q22.596,-4.44,22.908,-3.4559999 Q23.220001,-2.4720001,23.220001,-1.0799999 z M18.588001,-1.0799999 Q18.588001,0.095999956,18.762001,0.87600017 Q18.936,1.656,19.326,2.046 Q19.716,2.436,20.364,2.436 Q21.012001,2.436,21.402,2.052 Q21.792,1.6680001,21.972,0.88199997 Q22.152,0.095999956,22.152,-1.0799999 Q22.152,-2.256,21.972,-3.0300002 Q21.792,-3.804,21.402,-4.194 Q21.012001,-4.584,20.364,-4.584 Q19.716,-4.584,19.326,-4.194 Q18.936,-3.804,18.762001,-3.0300002 Q18.588001,-2.256,18.588001,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 356.19202 151.56801)"/> +<path d="M348.19202,123.064285 L352.19202,123.064285" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M6.276,-1.0799999 Q6.276,-0.036000013,6.12,0.78 Q5.964,1.5960001,5.622,2.1660001 Q5.28,2.736,4.734,3.036 Q4.188,3.336,3.42,3.336 Q2.46,3.336,1.83,2.808 Q1.2,2.2800002,0.894,1.2900001 Q0.588,0.29999995,0.588,-1.0799999 Q0.588,-2.4720001,0.87,-3.4559999 Q1.152,-4.44,1.776,-4.9620004 Q2.4,-5.4839997,3.42,-5.4839997 Q4.38,-5.4839997,5.0160003,-4.9620004 Q5.652,-4.44,5.964,-3.4559999 Q6.276,-2.4720001,6.276,-1.0799999 z M1.644,-1.0799999 Q1.644,0.095999956,1.818,0.87600017 Q1.992,1.656,2.382,2.046 Q2.772,2.436,3.42,2.436 Q4.068,2.436,4.458,2.052 Q4.848,1.6680001,5.028,0.88199997 Q5.208,0.095999956,5.208,-1.0799999 Q5.208,-2.256,5.028,-3.0300002 Q4.848,-3.804,4.458,-4.194 Q4.068,-4.584,3.42,-4.584 Q2.772,-4.584,2.382,-4.194 Q1.992,-3.804,1.818,-3.0300002 Q1.644,-2.256,1.644,-1.0799999 z M7.7279997,2.568 Q7.7279997,2.124,7.944,1.9440001 Q8.16,1.764,8.46,1.764 Q8.771999,1.764,8.9939995,1.9440001 Q9.216,2.124,9.216,2.568 Q9.216,3,8.9939995,3.1920002 Q8.771999,3.384,8.46,3.384 Q8.16,3.384,7.944,3.1920002 Q7.7279997,3,7.7279997,2.568 z M10.74,-0.444 Q10.74,-1.1879997,10.842,-1.908 Q10.944,-2.6279998,11.196,-3.27 Q11.448,-3.9120002,11.892,-4.41 Q12.336,-4.9079995,13.014,-5.19 Q13.691999,-5.4719996,14.664,-5.4719996 Q14.916,-5.4719996,15.222,-5.4480004 Q15.528,-5.4240003,15.719999,-5.364 L15.719999,-4.464 Q15.504,-4.536,15.234,-4.572 Q14.964,-4.608,14.688,-4.608 Q13.86,-4.608,13.308,-4.332 Q12.7560005,-4.0559998,12.438,-3.5760002 Q12.12,-3.0960002,11.976,-2.4720001 Q11.832,-1.848,11.796,-1.1399999 L11.868,-1.1399999 Q12.048,-1.428,12.323999,-1.6560001 Q12.6,-1.8839998,12.99,-2.0159998 Q13.38,-2.1479998,13.896,-2.1479998 Q14.639999,-2.1479998,15.198,-1.842 Q15.7560005,-1.5359998,16.068,-0.954 Q16.380001,-0.37199998,16.380001,0.4560001 Q16.380001,1.3440001,16.044,1.9920001 Q15.708,2.64,15.101999,2.9880002 Q14.496,3.336,13.656,3.336 Q13.044,3.336,12.516,3.108 Q11.988,2.88,11.586,2.4120002 Q11.184,1.9440001,10.962,1.23 Q10.74,0.51600003,10.74,-0.444 z M13.644,2.448 Q14.4,2.448,14.868,1.962 Q15.336,1.4760001,15.336,0.4560001 Q15.336,-0.3599999,14.922,-0.84000015 Q14.507999,-1.3200002,13.68,-1.3200002 Q13.116,-1.3200002,12.696,-1.086 Q12.276,-0.85199976,12.042,-0.49199986 Q11.808,-0.13199997,11.808,0.2520001 Q11.808,0.648,11.922,1.0320001 Q12.036,1.416,12.27,1.74 Q12.504,2.0640001,12.846,2.256 Q13.188,2.448,13.644,2.448 z M23.220001,-1.0799999 Q23.220001,-0.036000013,23.064,0.78 Q22.908,1.5960001,22.566,2.1660001 Q22.224,2.736,21.678001,3.036 Q21.132,3.336,20.364,3.336 Q19.404,3.336,18.774,2.808 Q18.144001,2.2800002,17.838,1.2900001 Q17.532,0.29999995,17.532,-1.0799999 Q17.532,-2.4720001,17.814001,-3.4559999 Q18.096,-4.44,18.720001,-4.9620004 Q19.344,-5.4839997,20.364,-5.4839997 Q21.324001,-5.4839997,21.960001,-4.9620004 Q22.596,-4.44,22.908,-3.4559999 Q23.220001,-2.4720001,23.220001,-1.0799999 z M18.588001,-1.0799999 Q18.588001,0.095999956,18.762001,0.87600017 Q18.936,1.656,19.326,2.046 Q19.716,2.436,20.364,2.436 Q21.012001,2.436,21.402,2.052 Q21.792,1.6680001,21.972,0.88199997 Q22.152,0.095999956,22.152,-1.0799999 Q22.152,-2.256,21.972,-3.0300002 Q21.792,-3.804,21.402,-4.194 Q21.012001,-4.584,20.364,-4.584 Q19.716,-4.584,19.326,-4.194 Q18.936,-3.804,18.762001,-3.0300002 Q18.588001,-2.256,18.588001,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 356.19202 123.064285)"/> +<path d="M348.19202,94.56056 L352.19202,94.56056" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M6.276,-1.0799999 Q6.276,-0.036000013,6.12,0.78 Q5.964,1.5960001,5.622,2.1660001 Q5.28,2.736,4.734,3.036 Q4.188,3.336,3.42,3.336 Q2.46,3.336,1.83,2.808 Q1.2,2.2800002,0.894,1.2900001 Q0.588,0.29999995,0.588,-1.0799999 Q0.588,-2.4720001,0.87,-3.4559999 Q1.152,-4.44,1.776,-4.9620004 Q2.4,-5.4839997,3.42,-5.4839997 Q4.38,-5.4839997,5.0160003,-4.9620004 Q5.652,-4.44,5.964,-3.4559999 Q6.276,-2.4720001,6.276,-1.0799999 z M1.644,-1.0799999 Q1.644,0.095999956,1.818,0.87600017 Q1.992,1.656,2.382,2.046 Q2.772,2.436,3.42,2.436 Q4.068,2.436,4.458,2.052 Q4.848,1.6680001,5.028,0.88199997 Q5.208,0.095999956,5.208,-1.0799999 Q5.208,-2.256,5.028,-3.0300002 Q4.848,-3.804,4.458,-4.194 Q4.068,-4.584,3.42,-4.584 Q2.772,-4.584,2.382,-4.194 Q1.992,-3.804,1.818,-3.0300002 Q1.644,-2.256,1.644,-1.0799999 z M7.7279997,2.568 Q7.7279997,2.124,7.944,1.9440001 Q8.16,1.764,8.46,1.764 Q8.771999,1.764,8.9939995,1.9440001 Q9.216,2.124,9.216,2.568 Q9.216,3,8.9939995,3.1920002 Q8.771999,3.384,8.46,3.384 Q8.16,3.384,7.944,3.1920002 Q7.7279997,3,7.7279997,2.568 z M11.712,3.216 L15.228001,-4.392 L10.608,-4.392 L10.608,-5.3519998 L16.355999,-5.3519998 L16.355999,-4.536 L12.875999,3.216 L11.712,3.216 z M23.220001,-1.0799999 Q23.220001,-0.036000013,23.064,0.78 Q22.908,1.5960001,22.566,2.1660001 Q22.224,2.736,21.678001,3.036 Q21.132,3.336,20.364,3.336 Q19.404,3.336,18.774,2.808 Q18.144001,2.2800002,17.838,1.2900001 Q17.532,0.29999995,17.532,-1.0799999 Q17.532,-2.4720001,17.814001,-3.4559999 Q18.096,-4.44,18.720001,-4.9620004 Q19.344,-5.4839997,20.364,-5.4839997 Q21.324001,-5.4839997,21.960001,-4.9620004 Q22.596,-4.44,22.908,-3.4559999 Q23.220001,-2.4720001,23.220001,-1.0799999 z M18.588001,-1.0799999 Q18.588001,0.095999956,18.762001,0.87600017 Q18.936,1.656,19.326,2.046 Q19.716,2.436,20.364,2.436 Q21.012001,2.436,21.402,2.052 Q21.792,1.6680001,21.972,0.88199997 Q22.152,0.095999956,22.152,-1.0799999 Q22.152,-2.256,21.972,-3.0300002 Q21.792,-3.804,21.402,-4.194 Q21.012001,-4.584,20.364,-4.584 Q19.716,-4.584,19.326,-4.194 Q18.936,-3.804,18.762001,-3.0300002 Q18.588001,-2.256,18.588001,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 356.19202 94.56056)"/> +<path d="M348.19202,66.056854 L352.19202,66.056854" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M6.276,-1.0799999 Q6.276,-0.036000013,6.12,0.78 Q5.964,1.5960001,5.622,2.1660001 Q5.28,2.736,4.734,3.036 Q4.188,3.336,3.42,3.336 Q2.46,3.336,1.83,2.808 Q1.2,2.2800002,0.894,1.2900001 Q0.588,0.29999995,0.588,-1.0799999 Q0.588,-2.4720001,0.87,-3.4559999 Q1.152,-4.44,1.776,-4.9620004 Q2.4,-5.4839997,3.42,-5.4839997 Q4.38,-5.4839997,5.0160003,-4.9620004 Q5.652,-4.44,5.964,-3.4559999 Q6.276,-2.4720001,6.276,-1.0799999 z M1.644,-1.0799999 Q1.644,0.095999956,1.818,0.87600017 Q1.992,1.656,2.382,2.046 Q2.772,2.436,3.42,2.436 Q4.068,2.436,4.458,2.052 Q4.848,1.6680001,5.028,0.88199997 Q5.208,0.095999956,5.208,-1.0799999 Q5.208,-2.256,5.028,-3.0300002 Q4.848,-3.804,4.458,-4.194 Q4.068,-4.584,3.42,-4.584 Q2.772,-4.584,2.382,-4.194 Q1.992,-3.804,1.818,-3.0300002 Q1.644,-2.256,1.644,-1.0799999 z M7.7279997,2.568 Q7.7279997,2.124,7.944,1.9440001 Q8.16,1.764,8.46,1.764 Q8.771999,1.764,8.9939995,1.9440001 Q9.216,2.124,9.216,2.568 Q9.216,3,8.9939995,3.1920002 Q8.771999,3.384,8.46,3.384 Q8.16,3.384,7.944,3.1920002 Q7.7279997,3,7.7279997,2.568 z M13.5,-5.4719996 Q14.2560005,-5.4719996,14.832,-5.2380004 Q15.408,-5.004,15.738,-4.548 Q16.068,-4.092,16.068,-3.42 Q16.068,-2.9039998,15.846001,-2.52 Q15.624001,-2.1360002,15.252,-1.842 Q14.88,-1.5479999,14.436,-1.3200002 Q14.964,-1.0679998,15.396,-0.75 Q15.828,-0.43199992,16.086,-0.0119998455 Q16.344,0.408,16.344,0.99600005 Q16.344,1.7160001,15.996,2.2380002 Q15.648,2.76,15.018,3.048 Q14.3880005,3.336,13.536,3.336 Q12.6119995,3.336,11.97,3.0600002 Q11.328,2.7840002,10.998,2.2740002 Q10.668,1.764,10.668,1.0320001 Q10.668,0.444,10.914,0.012000084 Q11.16,-0.41999984,11.568,-0.7319999 Q11.976,-1.0440001,12.444,-1.2599998 Q12.024,-1.5,11.682,-1.8059998 Q11.34,-2.112,11.142,-2.508 Q10.944,-2.9039998,10.944,-3.4320002 Q10.944,-4.092,11.28,-4.542 Q11.616,-4.992,12.191999,-5.232 Q12.768,-5.4719996,13.5,-5.4719996 z M11.7,1.0440001 Q11.7,1.6680001,12.144,2.082 Q12.588,2.496,13.512,2.496 Q14.3880005,2.496,14.85,2.082 Q15.312,1.6680001,15.312,1.0080001 Q15.312,0.58800006,15.09,0.26999998 Q14.868,-0.04799986,14.466,-0.29999995 Q14.064,-0.55200005,13.512,-0.75600004 L13.32,-0.82800007 Q12.792,-0.5999999,12.432,-0.33599997 Q12.072,-0.07200003,11.886,0.26399994 Q11.7,0.60000014,11.7,1.0440001 z M13.488,-4.62 Q12.828,-4.62,12.402,-4.302 Q11.976,-3.9840002,11.976,-3.3839998 Q11.976,-2.94,12.186,-2.6399999 Q12.396,-2.3400002,12.7560005,-2.13 Q13.116,-1.9200001,13.548,-1.7280002 Q13.968,-1.908,14.298,-2.124 Q14.628,-2.3400002,14.826,-2.646 Q15.024,-2.9520001,15.024,-3.3839998 Q15.024,-3.9840002,14.604,-4.302 Q14.184,-4.62,13.488,-4.62 z M23.220001,-1.0799999 Q23.220001,-0.036000013,23.064,0.78 Q22.908,1.5960001,22.566,2.1660001 Q22.224,2.736,21.678001,3.036 Q21.132,3.336,20.364,3.336 Q19.404,3.336,18.774,2.808 Q18.144001,2.2800002,17.838,1.2900001 Q17.532,0.29999995,17.532,-1.0799999 Q17.532,-2.4720001,17.814001,-3.4559999 Q18.096,-4.44,18.720001,-4.9620004 Q19.344,-5.4839997,20.364,-5.4839997 Q21.324001,-5.4839997,21.960001,-4.9620004 Q22.596,-4.44,22.908,-3.4559999 Q23.220001,-2.4720001,23.220001,-1.0799999 z M18.588001,-1.0799999 Q18.588001,0.095999956,18.762001,0.87600017 Q18.936,1.656,19.326,2.046 Q19.716,2.436,20.364,2.436 Q21.012001,2.436,21.402,2.052 Q21.792,1.6680001,21.972,0.88199997 Q22.152,0.095999956,22.152,-1.0799999 Q22.152,-2.256,21.972,-3.0300002 Q21.792,-3.804,21.402,-4.194 Q21.012001,-4.584,20.364,-4.584 Q19.716,-4.584,19.326,-4.194 Q18.936,-3.804,18.762001,-3.0300002 Q18.588001,-2.256,18.588001,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 356.19202 66.056854)"/> +<path d="M348.19202,37.55313 L352.19202,37.55313" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M6.276,-1.0799999 Q6.276,-0.036000013,6.12,0.78 Q5.964,1.5960001,5.622,2.1660001 Q5.28,2.736,4.734,3.036 Q4.188,3.336,3.42,3.336 Q2.46,3.336,1.83,2.808 Q1.2,2.2800002,0.894,1.2900001 Q0.588,0.29999995,0.588,-1.0799999 Q0.588,-2.4720001,0.87,-3.4559999 Q1.152,-4.44,1.776,-4.9620004 Q2.4,-5.4839997,3.42,-5.4839997 Q4.38,-5.4839997,5.0160003,-4.9620004 Q5.652,-4.44,5.964,-3.4559999 Q6.276,-2.4720001,6.276,-1.0799999 z M1.644,-1.0799999 Q1.644,0.095999956,1.818,0.87600017 Q1.992,1.656,2.382,2.046 Q2.772,2.436,3.42,2.436 Q4.068,2.436,4.458,2.052 Q4.848,1.6680001,5.028,0.88199997 Q5.208,0.095999956,5.208,-1.0799999 Q5.208,-2.256,5.028,-3.0300002 Q4.848,-3.804,4.458,-4.194 Q4.068,-4.584,3.42,-4.584 Q2.772,-4.584,2.382,-4.194 Q1.992,-3.804,1.818,-3.0300002 Q1.644,-2.256,1.644,-1.0799999 z M7.7279997,2.568 Q7.7279997,2.124,7.944,1.9440001 Q8.16,1.764,8.46,1.764 Q8.771999,1.764,8.9939995,1.9440001 Q9.216,2.124,9.216,2.568 Q9.216,3,8.9939995,3.1920002 Q8.771999,3.384,8.46,3.384 Q8.16,3.384,7.944,3.1920002 Q7.7279997,3,7.7279997,2.568 z M16.32,-1.6919999 Q16.32,-0.96000004,16.218,-0.23399997 Q16.116001,0.4920001,15.864,1.1340001 Q15.6119995,1.776,15.167999,2.2740002 Q14.724,2.772,14.04,3.0540001 Q13.356,3.336,12.384,3.336 Q12.144,3.336,11.826,3.306 Q11.507999,3.276,11.304,3.216 L11.304,2.316 Q11.52,2.388,11.808,2.43 Q12.096,2.4720001,12.36,2.4720001 Q13.2,2.4720001,13.746,2.196 Q14.292,1.9200001,14.616,1.4460001 Q14.940001,0.9720001,15.084,0.342 Q15.228001,-0.28799987,15.252,-0.9839997 L15.18,-0.9839997 Q15,-0.70799994,14.724,-0.48000002 Q14.448,-0.25199986,14.058,-0.119999886 Q13.668,0.012000084,13.139999,0.012000084 Q12.408,0.012000084,11.85,-0.2939999 Q11.292,-0.5999999,10.986,-1.1760001 Q10.68,-1.7519999,10.68,-2.58 Q10.68,-3.48,11.022,-4.128 Q11.364,-4.776,11.976,-5.124 Q12.588,-5.4719996,13.416,-5.4719996 Q14.028,-5.4719996,14.556,-5.2380004 Q15.084,-5.004,15.48,-4.536 Q15.875999,-4.068,16.098,-3.3600001 Q16.32,-2.652,16.32,-1.6919999 z M13.416,-4.584 Q12.672,-4.584,12.198,-4.092 Q11.724,-3.6,11.724,-2.592 Q11.724,-1.7639999,12.125999,-1.29 Q12.528,-0.816,13.368,-0.816 Q13.944,-0.816,14.364,-1.0500002 Q14.784,-1.2839999,15.018,-1.644 Q15.252,-2.0040002,15.252,-2.388 Q15.252,-2.7719998,15.1380005,-3.1620002 Q15.024,-3.552,14.796,-3.876 Q14.568,-4.2,14.219999,-4.392 Q13.872,-4.584,13.416,-4.584 z M23.220001,-1.0799999 Q23.220001,-0.036000013,23.064,0.78 Q22.908,1.5960001,22.566,2.1660001 Q22.224,2.736,21.678001,3.036 Q21.132,3.336,20.364,3.336 Q19.404,3.336,18.774,2.808 Q18.144001,2.2800002,17.838,1.2900001 Q17.532,0.29999995,17.532,-1.0799999 Q17.532,-2.4720001,17.814001,-3.4559999 Q18.096,-4.44,18.720001,-4.9620004 Q19.344,-5.4839997,20.364,-5.4839997 Q21.324001,-5.4839997,21.960001,-4.9620004 Q22.596,-4.44,22.908,-3.4559999 Q23.220001,-2.4720001,23.220001,-1.0799999 z M18.588001,-1.0799999 Q18.588001,0.095999956,18.762001,0.87600017 Q18.936,1.656,19.326,2.046 Q19.716,2.436,20.364,2.436 Q21.012001,2.436,21.402,2.052 Q21.792,1.6680001,21.972,0.88199997 Q22.152,0.095999956,22.152,-1.0799999 Q22.152,-2.256,21.972,-3.0300002 Q21.792,-3.804,21.402,-4.194 Q21.012001,-4.584,20.364,-4.584 Q19.716,-4.584,19.326,-4.194 Q18.936,-3.804,18.762001,-3.0300002 Q18.588001,-2.256,18.588001,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 356.19202 37.55313)"/> +</svg> \ No newline at end of file diff --git a/tests/refs/colorbar/forced-scale.png b/tests/refs/colorbar/forced-scale.png new file mode 100644 index 0000000000000000000000000000000000000000..c2ea542f0fc2683d08256ea19577eca4f7c143b7 GIT binary patch literal 32764 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 CyD!!N literal 0 HcmV?d00001 diff --git a/tests/refs/colorbar/forced-scale.svg b/tests/refs/colorbar/forced-scale.svg new file mode 100644 index 0000000..4f05836 --- /dev/null +++ b/tests/refs/colorbar/forced-scale.svg @@ -0,0 +1,308 @@ +<svg height="300" viewBox="0 0 400 300" width="400" xmlns="http://www.w3.org/2000/svg"> +<rect fill="#ffffff" height="100%" width="100%"/> +<clipPath id="plotive-clip1"> +<rect height="260" width="296.19202" x="20" y="20"/> +</clipPath> +<g clip-path="url(#plotive-clip1)"> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#356b8c" fill-opacity="0.7019608" stroke="#356b8c" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 190.89055 112.57182)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#395f8b" fill-opacity="0.7019608" stroke="#395f8b" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 179.97026 65.19423)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#31768c" fill-opacity="0.7019608" stroke="#31768c" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 202.46431 182.75821)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#450e59" fill-opacity="0.7019608" stroke="#450e59" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 168.9136 137.4275)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#395c8b" fill-opacity="0.7019608" stroke="#395c8b" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 40 128.45457)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#404681" fill-opacity="0.7019608" stroke="#404681" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 146.78484 40)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#33718c" fill-opacity="0.7019608" stroke="#33718c" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 160.33264 221.95265)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#433c79" fill-opacity="0.7019608" stroke="#433c79" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 62.404472 179.70654)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#433f7b" fill-opacity="0.7019608" stroke="#433f7b" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 104.20594 119.84299)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#248a8c" fill-opacity="0.7019608" stroke="#248a8c" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 215.1704 107.928925)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#395b8b" fill-opacity="0.7019608" stroke="#395b8b" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 170.00009 123.19487)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#31768c" fill-opacity="0.7019608" stroke="#31768c" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 269.2433 73.18942)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#46195f" fill-opacity="0.7019608" stroke="#46195f" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 296.19202 186.15048)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#346f8c" fill-opacity="0.7019608" stroke="#346f8c" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 45.586716 260)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#3a558a" fill-opacity="0.7019608" stroke="#3a558a" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 143.01593 56.149902)"/> +</g> +<rect fill="none" height="260" stroke="#000000" stroke-width="1" width="296.19202" x="20" y="20"/> +<path d="M328.19202,280 L328.19202,279.5 L348.19202,279.5 L348.19202,280" fill="#440154" stroke="none"/> +<path d="M328.19202,279.5 L328.19202,278.5 L348.19202,278.5 L348.19202,279.5" fill="#440355" stroke="none"/> +<path d="M328.19202,278.5 L328.19202,277.5 L348.19202,277.5 L348.19202,278.5" fill="#440556" stroke="none"/> +<path d="M328.19202,277.5 L328.19202,276.5 L348.19202,276.5 L348.19202,277.5" fill="#440756" stroke="none"/> +<path d="M328.19202,276.5 L328.19202,275.5 L348.19202,275.5 L348.19202,276.5" fill="#450957" stroke="none"/> +<path d="M328.19202,275.5 L328.19202,274.5 L348.19202,274.5 L348.19202,275.5" fill="#450b58" stroke="none"/> +<path d="M328.19202,274.5 L328.19202,273.5 L348.19202,273.5 L348.19202,274.5" fill="#450d59" stroke="none"/> +<path d="M328.19202,273.5 L328.19202,272.5 L348.19202,272.5 L348.19202,273.5" fill="#450f5a" stroke="none"/> +<path d="M328.19202,272.5 L328.19202,271.5 L348.19202,271.5 L348.19202,272.5" fill="#45105a" stroke="none"/> +<path d="M328.19202,271.5 L328.19202,270.5 L348.19202,270.5 L348.19202,271.5" fill="#45125b" stroke="none"/> +<path d="M328.19202,270.5 L328.19202,269.5 L348.19202,269.5 L348.19202,270.5" fill="#45145c" stroke="none"/> +<path d="M328.19202,269.5 L328.19202,268.5 L348.19202,268.5 L348.19202,269.5" fill="#45155d" stroke="none"/> +<path d="M328.19202,268.5 L328.19202,267.5 L348.19202,267.5 L348.19202,268.5" fill="#45165e" stroke="none"/> +<path d="M328.19202,267.5 L328.19202,266.5 L348.19202,266.5 L348.19202,267.5" fill="#46185e" stroke="none"/> +<path d="M328.19202,266.5 L328.19202,265.5 L348.19202,265.5 L348.19202,266.5" fill="#46195f" stroke="none"/> +<path d="M328.19202,265.5 L328.19202,264.5 L348.19202,264.5 L348.19202,265.5" fill="#461b60" stroke="none"/> +<path d="M328.19202,264.5 L328.19202,263.5 L348.19202,263.5 L348.19202,264.5" fill="#461c61" stroke="none"/> +<path d="M328.19202,263.5 L328.19202,262.5 L348.19202,262.5 L348.19202,263.5" fill="#461d62" stroke="none"/> +<path d="M328.19202,262.5 L328.19202,261.5 L348.19202,261.5 L348.19202,262.5" fill="#461e63" stroke="none"/> +<path d="M328.19202,261.5 L328.19202,260.5 L348.19202,260.5 L348.19202,261.5" fill="#462063" stroke="none"/> +<path d="M328.19202,260.5 L328.19202,259.5 L348.19202,259.5 L348.19202,260.5" fill="#462164" stroke="none"/> +<path d="M328.19202,259.5 L328.19202,258.5 L348.19202,258.5 L348.19202,259.5" fill="#462265" stroke="none"/> +<path d="M328.19202,258.5 L328.19202,257.5 L348.19202,257.5 L348.19202,258.5" fill="#462366" stroke="none"/> +<path d="M328.19202,257.5 L328.19202,256.5 L348.19202,256.5 L348.19202,257.5" fill="#462467" stroke="none"/> +<path d="M328.19202,256.5 L328.19202,255.5 L348.19202,255.5 L348.19202,256.5" fill="#462667" stroke="none"/> +<path d="M328.19202,255.5 L328.19202,254.5 L348.19202,254.5 L348.19202,255.5" fill="#462768" stroke="none"/> +<path d="M328.19202,254.5 L328.19202,253.5 L348.19202,253.5 L348.19202,254.5" fill="#462869" stroke="none"/> +<path d="M328.19202,253.5 L328.19202,252.5 L348.19202,252.5 L348.19202,253.5" fill="#46296a" stroke="none"/> +<path d="M328.19202,252.5 L328.19202,251.5 L348.19202,251.5 L348.19202,252.5" fill="#462a6b" stroke="none"/> +<path d="M328.19202,251.5 L328.19202,250.5 L348.19202,250.5 L348.19202,251.5" fill="#462b6c" stroke="none"/> +<path d="M328.19202,250.5 L328.19202,249.5 L348.19202,249.5 L348.19202,250.5" fill="#452c6c" stroke="none"/> +<path d="M328.19202,249.5 L328.19202,248.5 L348.19202,248.5 L348.19202,249.5" fill="#452e6d" stroke="none"/> +<path d="M328.19202,248.5 L328.19202,247.5 L348.19202,247.5 L348.19202,248.5" fill="#452f6e" stroke="none"/> +<path d="M328.19202,247.5 L328.19202,246.5 L348.19202,246.5 L348.19202,247.5" fill="#45306f" stroke="none"/> +<path d="M328.19202,246.5 L328.19202,245.5 L348.19202,245.5 L348.19202,246.5" fill="#453170" stroke="none"/> +<path d="M328.19202,245.5 L328.19202,244.5 L348.19202,244.5 L348.19202,245.5" fill="#453271" stroke="none"/> +<path d="M328.19202,244.5 L328.19202,243.5 L348.19202,243.5 L348.19202,244.5" fill="#453371" stroke="none"/> +<path d="M328.19202,243.5 L328.19202,242.5 L348.19202,242.5 L348.19202,243.5" fill="#453472" stroke="none"/> +<path d="M328.19202,242.5 L328.19202,241.5 L348.19202,241.5 L348.19202,242.5" fill="#453573" stroke="none"/> +<path d="M328.19202,241.5 L328.19202,240.5 L348.19202,240.5 L348.19202,241.5" fill="#443674" stroke="none"/> +<path d="M328.19202,240.5 L328.19202,239.5 L348.19202,239.5 L348.19202,240.5" fill="#443775" stroke="none"/> +<path d="M328.19202,239.5 L328.19202,238.5 L348.19202,238.5 L348.19202,239.5" fill="#443876" stroke="none"/> +<path d="M328.19202,238.5 L328.19202,237.5 L348.19202,237.5 L348.19202,238.5" fill="#443976" stroke="none"/> +<path d="M328.19202,237.5 L328.19202,236.5 L348.19202,236.5 L348.19202,237.5" fill="#443a77" stroke="none"/> +<path d="M328.19202,236.5 L328.19202,235.5 L348.19202,235.5 L348.19202,236.5" fill="#433b78" stroke="none"/> +<path d="M328.19202,235.5 L328.19202,234.5 L348.19202,234.5 L348.19202,235.5" fill="#433c79" stroke="none"/> +<path d="M328.19202,234.5 L328.19202,233.5 L348.19202,233.5 L348.19202,234.5" fill="#433e7a" stroke="none"/> +<path d="M328.19202,233.5 L328.19202,232.5 L348.19202,232.5 L348.19202,233.5" fill="#433f7b" stroke="none"/> +<path d="M328.19202,232.5 L328.19202,231.5 L348.19202,231.5 L348.19202,232.5" fill="#42407c" stroke="none"/> +<path d="M328.19202,231.5 L328.19202,230.5 L348.19202,230.5 L348.19202,231.5" fill="#42417c" stroke="none"/> +<path d="M328.19202,230.5 L328.19202,229.5 L348.19202,229.5 L348.19202,230.5" fill="#42427d" stroke="none"/> +<path d="M328.19202,229.5 L328.19202,228.5 L348.19202,228.5 L348.19202,229.5" fill="#41437e" stroke="none"/> +<path d="M328.19202,228.5 L328.19202,227.5 L348.19202,227.5 L348.19202,228.5" fill="#41447f" stroke="none"/> +<path d="M328.19202,227.5 L328.19202,226.5 L348.19202,226.5 L348.19202,227.5" fill="#414580" stroke="none"/> +<path d="M328.19202,226.5 L328.19202,225.5 L348.19202,225.5 L348.19202,226.5" fill="#404681" stroke="none"/> +<path d="M328.19202,225.5 L328.19202,224.5 L348.19202,224.5 L348.19202,225.5" fill="#404781" stroke="none"/> +<path d="M328.19202,224.5 L328.19202,223.5 L348.19202,223.5 L348.19202,224.5" fill="#3f4882" stroke="none"/> +<path d="M328.19202,223.5 L328.19202,222.5 L348.19202,222.5 L348.19202,223.5" fill="#3f4983" stroke="none"/> +<path d="M328.19202,222.5 L328.19202,221.5 L348.19202,221.5 L348.19202,222.5" fill="#3f4a84" stroke="none"/> +<path d="M328.19202,221.5 L328.19202,220.5 L348.19202,220.5 L348.19202,221.5" fill="#3e4b85" stroke="none"/> +<path d="M328.19202,220.5 L328.19202,219.5 L348.19202,219.5 L348.19202,220.5" fill="#3e4c86" stroke="none"/> +<path d="M328.19202,219.5 L328.19202,218.5 L348.19202,218.5 L348.19202,219.5" fill="#3d4d87" stroke="none"/> +<path d="M328.19202,218.5 L328.19202,217.5 L348.19202,217.5 L348.19202,218.5" fill="#3d4e87" stroke="none"/> +<path d="M328.19202,217.5 L328.19202,216.5 L348.19202,216.5 L348.19202,217.5" fill="#3c4f88" stroke="none"/> +<path d="M328.19202,216.5 L328.19202,215.5 L348.19202,215.5 L348.19202,216.5" fill="#3c5089" stroke="none"/> +<path d="M328.19202,215.5 L328.19202,214.5 L348.19202,214.5 L348.19202,215.5" fill="#3b518a" stroke="none"/> +<path d="M328.19202,214.5 L328.19202,213.5 L348.19202,213.5 L348.19202,214.5" fill="#3b528a" stroke="none"/> +<path d="M328.19202,213.5 L328.19202,212.5 L348.19202,212.5 L348.19202,213.5" fill="#3b538a" stroke="none"/> +<path d="M328.19202,212.5 L328.19202,211.5 L348.19202,211.5 L348.19202,212.5" fill="#3b548a" stroke="none"/> +<path d="M328.19202,211.5 L328.19202,210.5 L348.19202,210.5 L348.19202,211.5" fill="#3a558a" stroke="none"/> +<path d="M328.19202,210.5 L328.19202,209.5 L348.19202,209.5 L348.19202,210.5" fill="#3a568a" stroke="none"/> +<path d="M328.19202,209.5 L328.19202,208.5 L348.19202,208.5 L348.19202,209.5" fill="#3a578b" stroke="none"/> +<path d="M328.19202,208.5 L328.19202,207.5 L348.19202,207.5 L348.19202,208.5" fill="#3a588b" stroke="none"/> +<path d="M328.19202,207.5 L328.19202,206.5 L348.19202,206.5 L348.19202,207.5" fill="#3a598b" stroke="none"/> +<path d="M328.19202,206.5 L328.19202,205.5 L348.19202,205.5 L348.19202,206.5" fill="#3a5a8b" stroke="none"/> +<path d="M328.19202,205.5 L328.19202,204.5 L348.19202,204.5 L348.19202,205.5" fill="#395b8b" stroke="none"/> +<path d="M328.19202,204.5 L328.19202,203.5 L348.19202,203.5 L348.19202,204.5" fill="#395c8b" stroke="none"/> +<path d="M328.19202,203.5 L328.19202,202.5 L348.19202,202.5 L348.19202,203.5" fill="#395d8b" stroke="none"/> +<path d="M328.19202,202.5 L328.19202,201.5 L348.19202,201.5 L348.19202,202.5" fill="#395e8b" stroke="none"/> +<path d="M328.19202,201.5 L328.19202,200.5 L348.19202,200.5 L348.19202,201.5" fill="#395f8b" stroke="none"/> +<path d="M328.19202,200.5 L328.19202,199.5 L348.19202,199.5 L348.19202,200.5" fill="#38608b" stroke="none"/> +<path d="M328.19202,199.5 L328.19202,198.5 L348.19202,198.5 L348.19202,199.5" fill="#38618b" stroke="none"/> +<path d="M328.19202,198.5 L328.19202,197.5 L348.19202,197.5 L348.19202,198.5" fill="#38628b" stroke="none"/> +<path d="M328.19202,197.5 L328.19202,196.5 L348.19202,196.5 L348.19202,197.5" fill="#38638b" stroke="none"/> +<path d="M328.19202,196.5 L328.19202,195.5 L348.19202,195.5 L348.19202,196.5" fill="#37648b" stroke="none"/> +<path d="M328.19202,195.5 L328.19202,194.5 L348.19202,194.5 L348.19202,195.5" fill="#37658b" stroke="none"/> +<path d="M328.19202,194.5 L328.19202,193.5 L348.19202,193.5 L348.19202,194.5" fill="#37658c" stroke="none"/> +<path d="M328.19202,193.5 L328.19202,192.5 L348.19202,192.5 L348.19202,193.5" fill="#37668c" stroke="none"/> +<path d="M328.19202,192.5 L328.19202,191.5 L348.19202,191.5 L348.19202,192.5" fill="#36678c" stroke="none"/> +<path d="M328.19202,191.5 L328.19202,190.5 L348.19202,190.5 L348.19202,191.5" fill="#36688c" stroke="none"/> +<path d="M328.19202,190.5 L328.19202,189.5 L348.19202,189.5 L348.19202,190.5" fill="#36698c" stroke="none"/> +<path d="M328.19202,189.5 L328.19202,188.5 L348.19202,188.5 L348.19202,189.5" fill="#366a8c" stroke="none"/> +<path d="M328.19202,188.5 L328.19202,187.5 L348.19202,187.5 L348.19202,188.5" fill="#356b8c" stroke="none"/> +<path d="M328.19202,187.5 L328.19202,186.5 L348.19202,186.5 L348.19202,187.5" fill="#356c8c" stroke="none"/> +<path d="M328.19202,186.5 L328.19202,185.5 L348.19202,185.5 L348.19202,186.5" fill="#356d8c" stroke="none"/> +<path d="M328.19202,185.5 L328.19202,184.5 L348.19202,184.5 L348.19202,185.5" fill="#346e8c" stroke="none"/> +<path d="M328.19202,184.5 L328.19202,183.5 L348.19202,183.5 L348.19202,184.5" fill="#346f8c" stroke="none"/> +<path d="M328.19202,183.5 L328.19202,182.5 L348.19202,182.5 L348.19202,183.5" fill="#34708c" stroke="none"/> +<path d="M328.19202,182.5 L328.19202,181.5 L348.19202,181.5 L348.19202,182.5" fill="#33718c" stroke="none"/> +<path d="M328.19202,181.5 L328.19202,180.5 L348.19202,180.5 L348.19202,181.5" fill="#33728c" stroke="none"/> +<path d="M328.19202,180.5 L328.19202,179.5 L348.19202,179.5 L348.19202,180.5" fill="#33738c" stroke="none"/> +<path d="M328.19202,179.5 L328.19202,178.5 L348.19202,178.5 L348.19202,179.5" fill="#32748c" stroke="none"/> +<path d="M328.19202,178.5 L328.19202,177.5 L348.19202,177.5 L348.19202,178.5" fill="#32758c" stroke="none"/> +<path d="M328.19202,177.5 L328.19202,176.5 L348.19202,176.5 L348.19202,177.5" fill="#31768c" stroke="none"/> +<path d="M328.19202,176.5 L328.19202,175.5 L348.19202,175.5 L348.19202,176.5" fill="#31778c" stroke="none"/> +<path d="M328.19202,175.5 L328.19202,174.5 L348.19202,174.5 L348.19202,175.5" fill="#30788c" stroke="none"/> +<path d="M328.19202,174.5 L328.19202,173.5 L348.19202,173.5 L348.19202,174.5" fill="#30788c" stroke="none"/> +<path d="M328.19202,173.5 L328.19202,172.5 L348.19202,172.5 L348.19202,173.5" fill="#30798c" stroke="none"/> +<path d="M328.19202,172.5 L328.19202,171.5 L348.19202,171.5 L348.19202,172.5" fill="#2f7a8c" stroke="none"/> +<path d="M328.19202,171.5 L328.19202,170.5 L348.19202,170.5 L348.19202,171.5" fill="#2f7b8c" stroke="none"/> +<path d="M328.19202,170.5 L328.19202,169.5 L348.19202,169.5 L348.19202,170.5" fill="#2e7c8c" stroke="none"/> +<path d="M328.19202,169.5 L328.19202,168.5 L348.19202,168.5 L348.19202,169.5" fill="#2e7d8c" stroke="none"/> +<path d="M328.19202,168.5 L328.19202,167.5 L348.19202,167.5 L348.19202,168.5" fill="#2d7e8c" stroke="none"/> +<path d="M328.19202,167.5 L328.19202,166.5 L348.19202,166.5 L348.19202,167.5" fill="#2d7f8c" stroke="none"/> +<path d="M328.19202,166.5 L328.19202,165.5 L348.19202,165.5 L348.19202,166.5" fill="#2c808c" stroke="none"/> +<path d="M328.19202,165.5 L328.19202,164.5 L348.19202,164.5 L348.19202,165.5" fill="#2b818c" stroke="none"/> +<path d="M328.19202,164.5 L328.19202,163.5 L348.19202,163.5 L348.19202,164.5" fill="#2b828c" stroke="none"/> +<path d="M328.19202,163.5 L328.19202,162.5 L348.19202,162.5 L348.19202,163.5" fill="#2a838c" stroke="none"/> +<path d="M328.19202,162.5 L328.19202,161.5 L348.19202,161.5 L348.19202,162.5" fill="#2a848c" stroke="none"/> +<path d="M328.19202,161.5 L328.19202,160.5 L348.19202,160.5 L348.19202,161.5" fill="#29858c" stroke="none"/> +<path d="M328.19202,160.5 L328.19202,159.5 L348.19202,159.5 L348.19202,160.5" fill="#28868c" stroke="none"/> +<path d="M328.19202,159.5 L328.19202,158.5 L348.19202,158.5 L348.19202,159.5" fill="#28878c" stroke="none"/> +<path d="M328.19202,158.5 L328.19202,157.5 L348.19202,157.5 L348.19202,158.5" fill="#27888c" stroke="none"/> +<path d="M328.19202,157.5 L328.19202,156.5 L348.19202,156.5 L348.19202,157.5" fill="#26888c" stroke="none"/> +<path d="M328.19202,156.5 L328.19202,155.5 L348.19202,155.5 L348.19202,156.5" fill="#25898c" stroke="none"/> +<path d="M328.19202,155.5 L328.19202,154.5 L348.19202,154.5 L348.19202,155.5" fill="#248a8c" stroke="none"/> +<path d="M328.19202,154.5 L328.19202,153.5 L348.19202,153.5 L348.19202,154.5" fill="#248b8c" stroke="none"/> +<path d="M328.19202,153.5 L328.19202,152.5 L348.19202,152.5 L348.19202,153.5" fill="#238c8c" stroke="none"/> +<path d="M328.19202,152.5 L328.19202,151.5 L348.19202,151.5 L348.19202,152.5" fill="#228d8c" stroke="none"/> +<path d="M328.19202,151.5 L328.19202,150.5 L348.19202,150.5 L348.19202,151.5" fill="#218e8c" stroke="none"/> +<path d="M328.19202,150.5 L328.19202,149.5 L348.19202,149.5 L348.19202,150.5" fill="#208f8c" stroke="none"/> +<path d="M328.19202,149.5 L328.19202,148.5 L348.19202,148.5 L348.19202,149.5" fill="#21908c" stroke="none"/> +<path d="M328.19202,148.5 L328.19202,147.5 L348.19202,147.5 L348.19202,148.5" fill="#22918b" stroke="none"/> +<path d="M328.19202,147.5 L328.19202,146.5 L348.19202,146.5 L348.19202,147.5" fill="#23928b" stroke="none"/> +<path d="M328.19202,146.5 L328.19202,145.5 L348.19202,145.5 L348.19202,146.5" fill="#24938a" stroke="none"/> +<path d="M328.19202,145.5 L328.19202,144.5 L348.19202,144.5 L348.19202,145.5" fill="#25938a" stroke="none"/> +<path d="M328.19202,144.5 L328.19202,143.5 L348.19202,143.5 L348.19202,144.5" fill="#269489" stroke="none"/> +<path d="M328.19202,143.5 L328.19202,142.5 L348.19202,142.5 L348.19202,143.5" fill="#279589" stroke="none"/> +<path d="M328.19202,142.5 L328.19202,141.5 L348.19202,141.5 L348.19202,142.5" fill="#289689" stroke="none"/> +<path d="M328.19202,141.5 L328.19202,140.5 L348.19202,140.5 L348.19202,141.5" fill="#299788" stroke="none"/> +<path d="M328.19202,140.5 L328.19202,139.5 L348.19202,139.5 L348.19202,140.5" fill="#2a9888" stroke="none"/> +<path d="M328.19202,139.5 L328.19202,138.5 L348.19202,138.5 L348.19202,139.5" fill="#2b9987" stroke="none"/> +<path d="M328.19202,138.5 L328.19202,137.5 L348.19202,137.5 L348.19202,138.5" fill="#2c9a87" stroke="none"/> +<path d="M328.19202,137.5 L328.19202,136.5 L348.19202,136.5 L348.19202,137.5" fill="#2d9b86" stroke="none"/> +<path d="M328.19202,136.5 L328.19202,135.5 L348.19202,135.5 L348.19202,136.5" fill="#2e9b86" stroke="none"/> +<path d="M328.19202,135.5 L328.19202,134.5 L348.19202,134.5 L348.19202,135.5" fill="#2e9c85" stroke="none"/> +<path d="M328.19202,134.5 L328.19202,133.5 L348.19202,133.5 L348.19202,134.5" fill="#2f9d85" stroke="none"/> +<path d="M328.19202,133.5 L328.19202,132.5 L348.19202,132.5 L348.19202,133.5" fill="#309e84" stroke="none"/> +<path d="M328.19202,132.5 L328.19202,131.5 L348.19202,131.5 L348.19202,132.5" fill="#319f84" stroke="none"/> +<path d="M328.19202,131.5 L328.19202,130.5 L348.19202,130.5 L348.19202,131.5" fill="#32a083" stroke="none"/> +<path d="M328.19202,130.5 L328.19202,129.5 L348.19202,129.5 L348.19202,130.5" fill="#33a183" stroke="none"/> +<path d="M328.19202,129.5 L328.19202,128.5 L348.19202,128.5 L348.19202,129.5" fill="#34a282" stroke="none"/> +<path d="M328.19202,128.5 L328.19202,127.5 L348.19202,127.5 L348.19202,128.5" fill="#35a282" stroke="none"/> +<path d="M328.19202,127.5 L328.19202,126.5 L348.19202,126.5 L348.19202,127.5" fill="#36a381" stroke="none"/> +<path d="M328.19202,126.5 L328.19202,125.5 L348.19202,125.5 L348.19202,126.5" fill="#37a481" stroke="none"/> +<path d="M328.19202,125.5 L328.19202,124.5 L348.19202,124.5 L348.19202,125.5" fill="#38a580" stroke="none"/> +<path d="M328.19202,124.5 L328.19202,123.5 L348.19202,123.5 L348.19202,124.5" fill="#39a680" stroke="none"/> +<path d="M328.19202,123.5 L328.19202,122.5 L348.19202,122.5 L348.19202,123.5" fill="#39a77f" stroke="none"/> +<path d="M328.19202,122.5 L328.19202,121.5 L348.19202,121.5 L348.19202,122.5" fill="#3aa87e" stroke="none"/> +<path d="M328.19202,121.5 L328.19202,120.5 L348.19202,120.5 L348.19202,121.5" fill="#3ba97e" stroke="none"/> +<path d="M328.19202,120.5 L328.19202,119.5 L348.19202,119.5 L348.19202,120.5" fill="#3caa7d" stroke="none"/> +<path d="M328.19202,119.5 L328.19202,118.5 L348.19202,118.5 L348.19202,119.5" fill="#3daa7d" stroke="none"/> +<path d="M328.19202,118.5 L328.19202,117.5 L348.19202,117.5 L348.19202,118.5" fill="#3eab7c" stroke="none"/> +<path d="M328.19202,117.5 L328.19202,116.5 L348.19202,116.5 L348.19202,117.5" fill="#3fac7b" stroke="none"/> +<path d="M328.19202,116.5 L328.19202,115.5 L348.19202,115.5 L348.19202,116.5" fill="#40ad7b" stroke="none"/> +<path d="M328.19202,115.5 L328.19202,114.5 L348.19202,114.5 L348.19202,115.5" fill="#41ae7a" stroke="none"/> +<path d="M328.19202,114.5 L328.19202,113.5 L348.19202,113.5 L348.19202,114.5" fill="#41af79" stroke="none"/> +<path d="M328.19202,113.5 L328.19202,112.5 L348.19202,112.5 L348.19202,113.5" fill="#42b079" stroke="none"/> +<path d="M328.19202,112.5 L328.19202,111.5 L348.19202,111.5 L348.19202,112.5" fill="#43b178" stroke="none"/> +<path d="M328.19202,111.5 L328.19202,110.5 L348.19202,110.5 L348.19202,111.5" fill="#44b178" stroke="none"/> +<path d="M328.19202,110.5 L328.19202,109.5 L348.19202,109.5 L348.19202,110.5" fill="#45b277" stroke="none"/> +<path d="M328.19202,109.5 L328.19202,108.5 L348.19202,108.5 L348.19202,109.5" fill="#46b376" stroke="none"/> +<path d="M328.19202,108.5 L328.19202,107.5 L348.19202,107.5 L348.19202,108.5" fill="#47b475" stroke="none"/> +<path d="M328.19202,107.5 L328.19202,106.5 L348.19202,106.5 L348.19202,107.5" fill="#48b575" stroke="none"/> +<path d="M328.19202,106.5 L328.19202,105.5 L348.19202,105.5 L348.19202,106.5" fill="#49b674" stroke="none"/> +<path d="M328.19202,105.5 L328.19202,104.5 L348.19202,104.5 L348.19202,105.5" fill="#49b773" stroke="none"/> +<path d="M328.19202,104.5 L328.19202,103.5 L348.19202,103.5 L348.19202,104.5" fill="#4ab773" stroke="none"/> +<path d="M328.19202,103.5 L328.19202,102.5 L348.19202,102.5 L348.19202,103.5" fill="#4bb872" stroke="none"/> +<path d="M328.19202,102.5 L328.19202,101.5 L348.19202,101.5 L348.19202,102.5" fill="#4cb971" stroke="none"/> +<path d="M328.19202,101.5 L328.19202,100.5 L348.19202,100.5 L348.19202,101.5" fill="#4dba70" stroke="none"/> +<path d="M328.19202,100.5 L328.19202,99.5 L348.19202,99.5 L348.19202,100.5" fill="#4ebb6f" stroke="none"/> +<path d="M328.19202,99.5 L328.19202,98.5 L348.19202,98.5 L348.19202,99.5" fill="#4fbc6f" stroke="none"/> +<path d="M328.19202,98.5 L328.19202,97.5 L348.19202,97.5 L348.19202,98.5" fill="#50bd6e" stroke="none"/> +<path d="M328.19202,97.5 L328.19202,96.5 L348.19202,96.5 L348.19202,97.5" fill="#50be6d" stroke="none"/> +<path d="M328.19202,96.5 L328.19202,95.5 L348.19202,95.5 L348.19202,96.5" fill="#51be6c" stroke="none"/> +<path d="M328.19202,95.5 L328.19202,94.5 L348.19202,94.5 L348.19202,95.5" fill="#52bf6b" stroke="none"/> +<path d="M328.19202,94.5 L328.19202,93.5 L348.19202,93.5 L348.19202,94.5" fill="#53c06b" stroke="none"/> +<path d="M328.19202,93.5 L328.19202,92.5 L348.19202,92.5 L348.19202,93.5" fill="#54c16a" stroke="none"/> +<path d="M328.19202,92.5 L328.19202,91.5 L348.19202,91.5 L348.19202,92.5" fill="#55c269" stroke="none"/> +<path d="M328.19202,91.5 L328.19202,90.5 L348.19202,90.5 L348.19202,91.5" fill="#56c368" stroke="none"/> +<path d="M328.19202,90.5 L328.19202,89.5 L348.19202,89.5 L348.19202,90.5" fill="#57c467" stroke="none"/> +<path d="M328.19202,89.5 L328.19202,88.5 L348.19202,88.5 L348.19202,89.5" fill="#57c566" stroke="none"/> +<path d="M328.19202,88.5 L328.19202,87.5 L348.19202,87.5 L348.19202,88.5" fill="#58c565" stroke="none"/> +<path d="M328.19202,87.5 L328.19202,86.5 L348.19202,86.5 L348.19202,87.5" fill="#59c664" stroke="none"/> +<path d="M328.19202,86.5 L328.19202,85.5 L348.19202,85.5 L348.19202,86.5" fill="#5ac763" stroke="none"/> +<path d="M328.19202,85.5 L328.19202,84.5 L348.19202,84.5 L348.19202,85.5" fill="#5bc862" stroke="none"/> +<path d="M328.19202,84.5 L328.19202,83.5 L348.19202,83.5 L348.19202,84.5" fill="#5fc962" stroke="none"/> +<path d="M328.19202,83.5 L328.19202,82.5 L348.19202,82.5 L348.19202,83.5" fill="#62c961" stroke="none"/> +<path d="M328.19202,82.5 L328.19202,81.5 L348.19202,81.5 L348.19202,82.5" fill="#65ca61" stroke="none"/> +<path d="M328.19202,81.5 L328.19202,80.5 L348.19202,80.5 L348.19202,81.5" fill="#69ca60" stroke="none"/> +<path d="M328.19202,80.5 L328.19202,79.5 L348.19202,79.5 L348.19202,80.5" fill="#6ccb60" stroke="none"/> +<path d="M328.19202,79.5 L328.19202,78.5 L348.19202,78.5 L348.19202,79.5" fill="#6fcb5f" stroke="none"/> +<path d="M328.19202,78.5 L328.19202,77.5 L348.19202,77.5 L348.19202,78.5" fill="#72cc5f" stroke="none"/> +<path d="M328.19202,77.5 L328.19202,76.5 L348.19202,76.5 L348.19202,77.5" fill="#75cc5e" stroke="none"/> +<path d="M328.19202,76.5 L328.19202,75.5 L348.19202,75.5 L348.19202,76.5" fill="#78cd5e" stroke="none"/> +<path d="M328.19202,75.5 L328.19202,74.5 L348.19202,74.5 L348.19202,75.5" fill="#7bcd5d" stroke="none"/> +<path d="M328.19202,74.5 L328.19202,73.5 L348.19202,73.5 L348.19202,74.5" fill="#7ece5d" stroke="none"/> +<path d="M328.19202,73.5 L328.19202,72.5 L348.19202,72.5 L348.19202,73.5" fill="#80ce5c" stroke="none"/> +<path d="M328.19202,72.5 L328.19202,71.5 L348.19202,71.5 L348.19202,72.5" fill="#83cf5c" stroke="none"/> +<path d="M328.19202,71.5 L328.19202,70.5 L348.19202,70.5 L348.19202,71.5" fill="#86cf5b" stroke="none"/> +<path d="M328.19202,70.5 L328.19202,69.5 L348.19202,69.5 L348.19202,70.5" fill="#89d05b" stroke="none"/> +<path d="M328.19202,69.5 L328.19202,68.5 L348.19202,68.5 L348.19202,69.5" fill="#8bd05a" stroke="none"/> +<path d="M328.19202,68.5 L328.19202,67.5 L348.19202,67.5 L348.19202,68.5" fill="#8ed159" stroke="none"/> +<path d="M328.19202,67.5 L328.19202,66.5 L348.19202,66.5 L348.19202,67.5" fill="#91d159" stroke="none"/> +<path d="M328.19202,66.5 L328.19202,65.5 L348.19202,65.5 L348.19202,66.5" fill="#93d258" stroke="none"/> +<path d="M328.19202,65.5 L328.19202,64.5 L348.19202,64.5 L348.19202,65.5" fill="#96d258" stroke="none"/> +<path d="M328.19202,64.5 L328.19202,63.5 L348.19202,63.5 L348.19202,64.5" fill="#98d357" stroke="none"/> +<path d="M328.19202,63.5 L328.19202,62.5 L348.19202,62.5 L348.19202,63.5" fill="#9bd356" stroke="none"/> +<path d="M328.19202,62.5 L328.19202,61.5 L348.19202,61.5 L348.19202,62.5" fill="#9dd456" stroke="none"/> +<path d="M328.19202,61.5 L328.19202,60.5 L348.19202,60.5 L348.19202,61.5" fill="#a0d455" stroke="none"/> +<path d="M328.19202,60.5 L328.19202,59.5 L348.19202,59.5 L348.19202,60.5" fill="#a2d554" stroke="none"/> +<path d="M328.19202,59.5 L328.19202,58.5 L348.19202,58.5 L348.19202,59.5" fill="#a5d554" stroke="none"/> +<path d="M328.19202,58.5 L328.19202,57.5 L348.19202,57.5 L348.19202,58.5" fill="#a7d653" stroke="none"/> +<path d="M328.19202,57.5 L328.19202,56.5 L348.19202,56.5 L348.19202,57.5" fill="#aad652" stroke="none"/> +<path d="M328.19202,56.5 L328.19202,55.5 L348.19202,55.5 L348.19202,56.5" fill="#acd752" stroke="none"/> +<path d="M328.19202,55.5 L328.19202,54.5 L348.19202,54.5 L348.19202,55.5" fill="#afd751" stroke="none"/> +<path d="M328.19202,54.5 L328.19202,53.5 L348.19202,53.5 L348.19202,54.5" fill="#b1d850" stroke="none"/> +<path d="M328.19202,53.5 L328.19202,52.5 L348.19202,52.5 L348.19202,53.5" fill="#b3d84f" stroke="none"/> +<path d="M328.19202,52.5 L328.19202,51.5 L348.19202,51.5 L348.19202,52.5" fill="#b6d94f" stroke="none"/> +<path d="M328.19202,51.5 L328.19202,50.5 L348.19202,50.5 L348.19202,51.5" fill="#b8d94e" stroke="none"/> +<path d="M328.19202,50.5 L328.19202,49.5 L348.19202,49.5 L348.19202,50.5" fill="#bada4d" stroke="none"/> +<path d="M328.19202,49.5 L328.19202,48.5 L348.19202,48.5 L348.19202,49.5" fill="#bdda4c" stroke="none"/> +<path d="M328.19202,48.5 L328.19202,47.5 L348.19202,47.5 L348.19202,48.5" fill="#bfdb4b" stroke="none"/> +<path d="M328.19202,47.5 L328.19202,46.5 L348.19202,46.5 L348.19202,47.5" fill="#c1db4a" stroke="none"/> +<path d="M328.19202,46.5 L328.19202,45.5 L348.19202,45.5 L348.19202,46.5" fill="#c4dc49" stroke="none"/> +<path d="M328.19202,45.5 L328.19202,44.5 L348.19202,44.5 L348.19202,45.5" fill="#c6dc48" stroke="none"/> +<path d="M328.19202,44.5 L328.19202,43.5 L348.19202,43.5 L348.19202,44.5" fill="#c8dd47" stroke="none"/> +<path d="M328.19202,43.5 L328.19202,42.5 L348.19202,42.5 L348.19202,43.5" fill="#cadd46" stroke="none"/> +<path d="M328.19202,42.5 L328.19202,41.5 L348.19202,41.5 L348.19202,42.5" fill="#cddd45" stroke="none"/> +<path d="M328.19202,41.5 L328.19202,40.5 L348.19202,40.5 L348.19202,41.5" fill="#cfde44" stroke="none"/> +<path d="M328.19202,40.5 L328.19202,39.5 L348.19202,39.5 L348.19202,40.5" fill="#d1de43" stroke="none"/> +<path d="M328.19202,39.5 L328.19202,38.5 L348.19202,38.5 L348.19202,39.5" fill="#d3df42" stroke="none"/> +<path d="M328.19202,38.5 L328.19202,37.5 L348.19202,37.5 L348.19202,38.5" fill="#d6df41" stroke="none"/> +<path d="M328.19202,37.5 L328.19202,36.5 L348.19202,36.5 L348.19202,37.5" fill="#d8e040" stroke="none"/> +<path d="M328.19202,36.5 L328.19202,35.5 L348.19202,35.5 L348.19202,36.5" fill="#dae03f" stroke="none"/> +<path d="M328.19202,35.5 L328.19202,34.5 L348.19202,34.5 L348.19202,35.5" fill="#dce13e" stroke="none"/> +<path d="M328.19202,34.5 L328.19202,33.5 L348.19202,33.5 L348.19202,34.5" fill="#dfe13c" stroke="none"/> +<path d="M328.19202,33.5 L328.19202,32.5 L348.19202,32.5 L348.19202,33.5" fill="#e1e13b" stroke="none"/> +<path d="M328.19202,32.5 L328.19202,31.5 L348.19202,31.5 L348.19202,32.5" fill="#e3e23a" stroke="none"/> +<path d="M328.19202,31.5 L328.19202,30.5 L348.19202,30.5 L348.19202,31.5" fill="#e5e238" stroke="none"/> +<path d="M328.19202,30.5 L328.19202,29.5 L348.19202,29.5 L348.19202,30.5" fill="#e7e337" stroke="none"/> +<path d="M328.19202,29.5 L328.19202,28.5 L348.19202,28.5 L348.19202,29.5" fill="#eae335" stroke="none"/> +<path d="M328.19202,28.5 L328.19202,27.5 L348.19202,27.5 L348.19202,28.5" fill="#ece434" stroke="none"/> +<path d="M328.19202,27.5 L328.19202,26.5 L348.19202,26.5 L348.19202,27.5" fill="#eee432" stroke="none"/> +<path d="M328.19202,26.5 L328.19202,25.5 L348.19202,25.5 L348.19202,26.5" fill="#f0e530" stroke="none"/> +<path d="M328.19202,25.5 L328.19202,24.5 L348.19202,24.5 L348.19202,25.5" fill="#f2e52f" stroke="none"/> +<path d="M328.19202,24.5 L328.19202,23.5 L348.19202,23.5 L348.19202,24.5" fill="#f4e52d" stroke="none"/> +<path d="M328.19202,23.5 L328.19202,22.5 L348.19202,22.5 L348.19202,23.5" fill="#f7e62b" stroke="none"/> +<path d="M328.19202,22.5 L328.19202,21.5 L348.19202,21.5 L348.19202,22.5" fill="#f9e629" stroke="none"/> +<path d="M328.19202,21.5 L328.19202,20.5 L348.19202,20.5 L348.19202,21.5" fill="#fbe726" stroke="none"/> +<path d="M328.19202,20.5 L328.19202,20 L348.19202,20 L348.19202,20.5" fill="#fde724" stroke="none"/> +<path d="M328.19202,20 L348.19202,20 L348.19202,280 L328.19202,280 z" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M348.19202,280 L352.19202,280" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M6.276,-1.0799999 Q6.276,-0.036000013,6.12,0.78 Q5.964,1.5960001,5.622,2.1660001 Q5.28,2.736,4.734,3.036 Q4.188,3.336,3.42,3.336 Q2.46,3.336,1.83,2.808 Q1.2,2.2800002,0.894,1.2900001 Q0.588,0.29999995,0.588,-1.0799999 Q0.588,-2.4720001,0.87,-3.4559999 Q1.152,-4.44,1.776,-4.9620004 Q2.4,-5.4839997,3.42,-5.4839997 Q4.38,-5.4839997,5.0160003,-4.9620004 Q5.652,-4.44,5.964,-3.4559999 Q6.276,-2.4720001,6.276,-1.0799999 z M1.644,-1.0799999 Q1.644,0.095999956,1.818,0.87600017 Q1.992,1.656,2.382,2.046 Q2.772,2.436,3.42,2.436 Q4.068,2.436,4.458,2.052 Q4.848,1.6680001,5.028,0.88199997 Q5.208,0.095999956,5.208,-1.0799999 Q5.208,-2.256,5.028,-3.0300002 Q4.848,-3.804,4.458,-4.194 Q4.068,-4.584,3.42,-4.584 Q2.772,-4.584,2.382,-4.194 Q1.992,-3.804,1.818,-3.0300002 Q1.644,-2.256,1.644,-1.0799999 z M7.7279997,2.568 Q7.7279997,2.124,7.944,1.9440001 Q8.16,1.764,8.46,1.764 Q8.771999,1.764,8.9939995,1.9440001 Q9.216,2.124,9.216,2.568 Q9.216,3,8.9939995,3.1920002 Q8.771999,3.384,8.46,3.384 Q8.16,3.384,7.944,3.1920002 Q7.7279997,3,7.7279997,2.568 z M16.355999,-1.0799999 Q16.355999,-0.036000013,16.2,0.78 Q16.044,1.5960001,15.702,2.1660001 Q15.360001,2.736,14.814,3.036 Q14.268,3.336,13.5,3.336 Q12.54,3.336,11.91,2.808 Q11.28,2.2800002,10.974,1.2900001 Q10.668,0.29999995,10.668,-1.0799999 Q10.668,-2.4720001,10.95,-3.4559999 Q11.232,-4.44,11.856,-4.9620004 Q12.48,-5.4839997,13.5,-5.4839997 Q14.46,-5.4839997,15.096001,-4.9620004 Q15.732,-4.44,16.044,-3.4559999 Q16.355999,-2.4720001,16.355999,-1.0799999 z M11.724,-1.0799999 Q11.724,0.095999956,11.898,0.87600017 Q12.072,1.656,12.462,2.046 Q12.852,2.436,13.5,2.436 Q14.148,2.436,14.538,2.052 Q14.9279995,1.6680001,15.108,0.88199997 Q15.288,0.095999956,15.288,-1.0799999 Q15.288,-2.256,15.108,-3.0300002 Q14.9279995,-3.804,14.538,-4.194 Q14.148,-4.584,13.5,-4.584 Q12.852,-4.584,12.462,-4.194 Q12.072,-3.804,11.898,-3.0300002 Q11.724,-2.256,11.724,-1.0799999 z M23.220001,-1.0799999 Q23.220001,-0.036000013,23.064,0.78 Q22.908,1.5960001,22.566,2.1660001 Q22.224,2.736,21.678001,3.036 Q21.132,3.336,20.364,3.336 Q19.404,3.336,18.774,2.808 Q18.144001,2.2800002,17.838,1.2900001 Q17.532,0.29999995,17.532,-1.0799999 Q17.532,-2.4720001,17.814001,-3.4559999 Q18.096,-4.44,18.720001,-4.9620004 Q19.344,-5.4839997,20.364,-5.4839997 Q21.324001,-5.4839997,21.960001,-4.9620004 Q22.596,-4.44,22.908,-3.4559999 Q23.220001,-2.4720001,23.220001,-1.0799999 z M18.588001,-1.0799999 Q18.588001,0.095999956,18.762001,0.87600017 Q18.936,1.656,19.326,2.046 Q19.716,2.436,20.364,2.436 Q21.012001,2.436,21.402,2.052 Q21.792,1.6680001,21.972,0.88199997 Q22.152,0.095999956,22.152,-1.0799999 Q22.152,-2.256,21.972,-3.0300002 Q21.792,-3.804,21.402,-4.194 Q21.012001,-4.584,20.364,-4.584 Q19.716,-4.584,19.326,-4.194 Q18.936,-3.804,18.762001,-3.0300002 Q18.588001,-2.256,18.588001,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 356.19202 280)"/> +<path d="M348.19202,254 L352.19202,254" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M6.276,-1.0799999 Q6.276,-0.036000013,6.12,0.78 Q5.964,1.5960001,5.622,2.1660001 Q5.28,2.736,4.734,3.036 Q4.188,3.336,3.42,3.336 Q2.46,3.336,1.83,2.808 Q1.2,2.2800002,0.894,1.2900001 Q0.588,0.29999995,0.588,-1.0799999 Q0.588,-2.4720001,0.87,-3.4559999 Q1.152,-4.44,1.776,-4.9620004 Q2.4,-5.4839997,3.42,-5.4839997 Q4.38,-5.4839997,5.0160003,-4.9620004 Q5.652,-4.44,5.964,-3.4559999 Q6.276,-2.4720001,6.276,-1.0799999 z M1.644,-1.0799999 Q1.644,0.095999956,1.818,0.87600017 Q1.992,1.656,2.382,2.046 Q2.772,2.436,3.42,2.436 Q4.068,2.436,4.458,2.052 Q4.848,1.6680001,5.028,0.88199997 Q5.208,0.095999956,5.208,-1.0799999 Q5.208,-2.256,5.028,-3.0300002 Q4.848,-3.804,4.458,-4.194 Q4.068,-4.584,3.42,-4.584 Q2.772,-4.584,2.382,-4.194 Q1.992,-3.804,1.818,-3.0300002 Q1.644,-2.256,1.644,-1.0799999 z M7.7279997,2.568 Q7.7279997,2.124,7.944,1.9440001 Q8.16,1.764,8.46,1.764 Q8.771999,1.764,8.9939995,1.9440001 Q9.216,2.124,9.216,2.568 Q9.216,3,8.9939995,3.1920002 Q8.771999,3.384,8.46,3.384 Q8.16,3.384,7.944,3.1920002 Q7.7279997,3,7.7279997,2.568 z M16.32,3.216 L10.656,3.216 L10.656,2.3400002 L12.9,0.07200003 Q13.548,-0.576,13.992,-1.0799999 Q14.436,-1.5840001,14.664,-2.0700002 Q14.892,-2.5559998,14.892,-3.132 Q14.892,-3.8400002,14.472,-4.206 Q14.052,-4.572,13.38,-4.572 Q12.7560005,-4.572,12.282,-4.356 Q11.808,-4.14,11.316,-3.756 L10.752,-4.464 Q11.088,-4.752,11.49,-4.98 Q11.892,-5.2079997,12.366,-5.3399997 Q12.84,-5.4719996,13.38,-5.4719996 Q14.184,-5.4719996,14.76,-5.1959996 Q15.336,-4.9199996,15.653999,-4.41 Q15.972,-3.9,15.972,-3.192 Q15.972,-2.52,15.696,-1.9320002 Q15.42,-1.3439999,14.9279995,-0.7739999 Q14.436,-0.204,13.776,0.444 L11.988,2.2080002 L11.988,2.256 L16.32,2.256 L16.32,3.216 z M23.220001,-1.0799999 Q23.220001,-0.036000013,23.064,0.78 Q22.908,1.5960001,22.566,2.1660001 Q22.224,2.736,21.678001,3.036 Q21.132,3.336,20.364,3.336 Q19.404,3.336,18.774,2.808 Q18.144001,2.2800002,17.838,1.2900001 Q17.532,0.29999995,17.532,-1.0799999 Q17.532,-2.4720001,17.814001,-3.4559999 Q18.096,-4.44,18.720001,-4.9620004 Q19.344,-5.4839997,20.364,-5.4839997 Q21.324001,-5.4839997,21.960001,-4.9620004 Q22.596,-4.44,22.908,-3.4559999 Q23.220001,-2.4720001,23.220001,-1.0799999 z M18.588001,-1.0799999 Q18.588001,0.095999956,18.762001,0.87600017 Q18.936,1.656,19.326,2.046 Q19.716,2.436,20.364,2.436 Q21.012001,2.436,21.402,2.052 Q21.792,1.6680001,21.972,0.88199997 Q22.152,0.095999956,22.152,-1.0799999 Q22.152,-2.256,21.972,-3.0300002 Q21.792,-3.804,21.402,-4.194 Q21.012001,-4.584,20.364,-4.584 Q19.716,-4.584,19.326,-4.194 Q18.936,-3.804,18.762001,-3.0300002 Q18.588001,-2.256,18.588001,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 356.19202 254)"/> +<path d="M348.19202,228 L352.19202,228" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M6.276,-1.0799999 Q6.276,-0.036000013,6.12,0.78 Q5.964,1.5960001,5.622,2.1660001 Q5.28,2.736,4.734,3.036 Q4.188,3.336,3.42,3.336 Q2.46,3.336,1.83,2.808 Q1.2,2.2800002,0.894,1.2900001 Q0.588,0.29999995,0.588,-1.0799999 Q0.588,-2.4720001,0.87,-3.4559999 Q1.152,-4.44,1.776,-4.9620004 Q2.4,-5.4839997,3.42,-5.4839997 Q4.38,-5.4839997,5.0160003,-4.9620004 Q5.652,-4.44,5.964,-3.4559999 Q6.276,-2.4720001,6.276,-1.0799999 z M1.644,-1.0799999 Q1.644,0.095999956,1.818,0.87600017 Q1.992,1.656,2.382,2.046 Q2.772,2.436,3.42,2.436 Q4.068,2.436,4.458,2.052 Q4.848,1.6680001,5.028,0.88199997 Q5.208,0.095999956,5.208,-1.0799999 Q5.208,-2.256,5.028,-3.0300002 Q4.848,-3.804,4.458,-4.194 Q4.068,-4.584,3.42,-4.584 Q2.772,-4.584,2.382,-4.194 Q1.992,-3.804,1.818,-3.0300002 Q1.644,-2.256,1.644,-1.0799999 z M7.7279997,2.568 Q7.7279997,2.124,7.944,1.9440001 Q8.16,1.764,8.46,1.764 Q8.771999,1.764,8.9939995,1.9440001 Q9.216,2.124,9.216,2.568 Q9.216,3,8.9939995,3.1920002 Q8.771999,3.384,8.46,3.384 Q8.16,3.384,7.944,3.1920002 Q7.7279997,3,7.7279997,2.568 z M16.704,1.2720001 L15.455999,1.2720001 L15.455999,3.216 L14.436,3.216 L14.436,1.2720001 L10.332,1.2720001 L10.332,0.37199998 L14.364,-5.4 L15.455999,-5.4 L15.455999,0.32400012 L16.704,0.32400012 L16.704,1.2720001 z M14.436,-2.376 Q14.436,-2.6880002,14.441999,-2.946 Q14.448,-3.204,14.46,-3.4320002 Q14.472,-3.6599998,14.478001,-3.87 Q14.483999,-4.08,14.496,-4.272 L14.448,-4.272 Q14.351999,-4.044,14.208,-3.7800002 Q14.064,-3.5159998,13.932,-3.336 L11.364,0.32400012 L14.436,0.32400012 L14.436,-2.376 z M23.220001,-1.0799999 Q23.220001,-0.036000013,23.064,0.78 Q22.908,1.5960001,22.566,2.1660001 Q22.224,2.736,21.678001,3.036 Q21.132,3.336,20.364,3.336 Q19.404,3.336,18.774,2.808 Q18.144001,2.2800002,17.838,1.2900001 Q17.532,0.29999995,17.532,-1.0799999 Q17.532,-2.4720001,17.814001,-3.4559999 Q18.096,-4.44,18.720001,-4.9620004 Q19.344,-5.4839997,20.364,-5.4839997 Q21.324001,-5.4839997,21.960001,-4.9620004 Q22.596,-4.44,22.908,-3.4559999 Q23.220001,-2.4720001,23.220001,-1.0799999 z M18.588001,-1.0799999 Q18.588001,0.095999956,18.762001,0.87600017 Q18.936,1.656,19.326,2.046 Q19.716,2.436,20.364,2.436 Q21.012001,2.436,21.402,2.052 Q21.792,1.6680001,21.972,0.88199997 Q22.152,0.095999956,22.152,-1.0799999 Q22.152,-2.256,21.972,-3.0300002 Q21.792,-3.804,21.402,-4.194 Q21.012001,-4.584,20.364,-4.584 Q19.716,-4.584,19.326,-4.194 Q18.936,-3.804,18.762001,-3.0300002 Q18.588001,-2.256,18.588001,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 356.19202 228)"/> +<path d="M348.19202,202 L352.19202,202" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M6.276,-1.0799999 Q6.276,-0.036000013,6.12,0.78 Q5.964,1.5960001,5.622,2.1660001 Q5.28,2.736,4.734,3.036 Q4.188,3.336,3.42,3.336 Q2.46,3.336,1.83,2.808 Q1.2,2.2800002,0.894,1.2900001 Q0.588,0.29999995,0.588,-1.0799999 Q0.588,-2.4720001,0.87,-3.4559999 Q1.152,-4.44,1.776,-4.9620004 Q2.4,-5.4839997,3.42,-5.4839997 Q4.38,-5.4839997,5.0160003,-4.9620004 Q5.652,-4.44,5.964,-3.4559999 Q6.276,-2.4720001,6.276,-1.0799999 z M1.644,-1.0799999 Q1.644,0.095999956,1.818,0.87600017 Q1.992,1.656,2.382,2.046 Q2.772,2.436,3.42,2.436 Q4.068,2.436,4.458,2.052 Q4.848,1.6680001,5.028,0.88199997 Q5.208,0.095999956,5.208,-1.0799999 Q5.208,-2.256,5.028,-3.0300002 Q4.848,-3.804,4.458,-4.194 Q4.068,-4.584,3.42,-4.584 Q2.772,-4.584,2.382,-4.194 Q1.992,-3.804,1.818,-3.0300002 Q1.644,-2.256,1.644,-1.0799999 z M7.7279997,2.568 Q7.7279997,2.124,7.944,1.9440001 Q8.16,1.764,8.46,1.764 Q8.771999,1.764,8.9939995,1.9440001 Q9.216,2.124,9.216,2.568 Q9.216,3,8.9939995,3.1920002 Q8.771999,3.384,8.46,3.384 Q8.16,3.384,7.944,3.1920002 Q7.7279997,3,7.7279997,2.568 z M10.74,-0.444 Q10.74,-1.1879997,10.842,-1.908 Q10.944,-2.6279998,11.196,-3.27 Q11.448,-3.9120002,11.892,-4.41 Q12.336,-4.9079995,13.014,-5.19 Q13.691999,-5.4719996,14.664,-5.4719996 Q14.916,-5.4719996,15.222,-5.4480004 Q15.528,-5.4240003,15.719999,-5.364 L15.719999,-4.464 Q15.504,-4.536,15.234,-4.572 Q14.964,-4.608,14.688,-4.608 Q13.86,-4.608,13.308,-4.332 Q12.7560005,-4.0559998,12.438,-3.5760002 Q12.12,-3.0960002,11.976,-2.4720001 Q11.832,-1.848,11.796,-1.1399999 L11.868,-1.1399999 Q12.048,-1.428,12.323999,-1.6560001 Q12.6,-1.8839998,12.99,-2.0159998 Q13.38,-2.1479998,13.896,-2.1479998 Q14.639999,-2.1479998,15.198,-1.842 Q15.7560005,-1.5359998,16.068,-0.954 Q16.380001,-0.37199998,16.380001,0.4560001 Q16.380001,1.3440001,16.044,1.9920001 Q15.708,2.64,15.101999,2.9880002 Q14.496,3.336,13.656,3.336 Q13.044,3.336,12.516,3.108 Q11.988,2.88,11.586,2.4120002 Q11.184,1.9440001,10.962,1.23 Q10.74,0.51600003,10.74,-0.444 z M13.644,2.448 Q14.4,2.448,14.868,1.962 Q15.336,1.4760001,15.336,0.4560001 Q15.336,-0.3599999,14.922,-0.84000015 Q14.507999,-1.3200002,13.68,-1.3200002 Q13.116,-1.3200002,12.696,-1.086 Q12.276,-0.85199976,12.042,-0.49199986 Q11.808,-0.13199997,11.808,0.2520001 Q11.808,0.648,11.922,1.0320001 Q12.036,1.416,12.27,1.74 Q12.504,2.0640001,12.846,2.256 Q13.188,2.448,13.644,2.448 z M23.220001,-1.0799999 Q23.220001,-0.036000013,23.064,0.78 Q22.908,1.5960001,22.566,2.1660001 Q22.224,2.736,21.678001,3.036 Q21.132,3.336,20.364,3.336 Q19.404,3.336,18.774,2.808 Q18.144001,2.2800002,17.838,1.2900001 Q17.532,0.29999995,17.532,-1.0799999 Q17.532,-2.4720001,17.814001,-3.4559999 Q18.096,-4.44,18.720001,-4.9620004 Q19.344,-5.4839997,20.364,-5.4839997 Q21.324001,-5.4839997,21.960001,-4.9620004 Q22.596,-4.44,22.908,-3.4559999 Q23.220001,-2.4720001,23.220001,-1.0799999 z M18.588001,-1.0799999 Q18.588001,0.095999956,18.762001,0.87600017 Q18.936,1.656,19.326,2.046 Q19.716,2.436,20.364,2.436 Q21.012001,2.436,21.402,2.052 Q21.792,1.6680001,21.972,0.88199997 Q22.152,0.095999956,22.152,-1.0799999 Q22.152,-2.256,21.972,-3.0300002 Q21.792,-3.804,21.402,-4.194 Q21.012001,-4.584,20.364,-4.584 Q19.716,-4.584,19.326,-4.194 Q18.936,-3.804,18.762001,-3.0300002 Q18.588001,-2.256,18.588001,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 356.19202 202)"/> +<path d="M348.19202,176 L352.19202,176" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M6.276,-1.0799999 Q6.276,-0.036000013,6.12,0.78 Q5.964,1.5960001,5.622,2.1660001 Q5.28,2.736,4.734,3.036 Q4.188,3.336,3.42,3.336 Q2.46,3.336,1.83,2.808 Q1.2,2.2800002,0.894,1.2900001 Q0.588,0.29999995,0.588,-1.0799999 Q0.588,-2.4720001,0.87,-3.4559999 Q1.152,-4.44,1.776,-4.9620004 Q2.4,-5.4839997,3.42,-5.4839997 Q4.38,-5.4839997,5.0160003,-4.9620004 Q5.652,-4.44,5.964,-3.4559999 Q6.276,-2.4720001,6.276,-1.0799999 z M1.644,-1.0799999 Q1.644,0.095999956,1.818,0.87600017 Q1.992,1.656,2.382,2.046 Q2.772,2.436,3.42,2.436 Q4.068,2.436,4.458,2.052 Q4.848,1.6680001,5.028,0.88199997 Q5.208,0.095999956,5.208,-1.0799999 Q5.208,-2.256,5.028,-3.0300002 Q4.848,-3.804,4.458,-4.194 Q4.068,-4.584,3.42,-4.584 Q2.772,-4.584,2.382,-4.194 Q1.992,-3.804,1.818,-3.0300002 Q1.644,-2.256,1.644,-1.0799999 z M7.7279997,2.568 Q7.7279997,2.124,7.944,1.9440001 Q8.16,1.764,8.46,1.764 Q8.771999,1.764,8.9939995,1.9440001 Q9.216,2.124,9.216,2.568 Q9.216,3,8.9939995,3.1920002 Q8.771999,3.384,8.46,3.384 Q8.16,3.384,7.944,3.1920002 Q7.7279997,3,7.7279997,2.568 z M13.5,-5.4719996 Q14.2560005,-5.4719996,14.832,-5.2380004 Q15.408,-5.004,15.738,-4.548 Q16.068,-4.092,16.068,-3.42 Q16.068,-2.9039998,15.846001,-2.52 Q15.624001,-2.1360002,15.252,-1.842 Q14.88,-1.5479999,14.436,-1.3200002 Q14.964,-1.0679998,15.396,-0.75 Q15.828,-0.43199992,16.086,-0.0119998455 Q16.344,0.408,16.344,0.99600005 Q16.344,1.7160001,15.996,2.2380002 Q15.648,2.76,15.018,3.048 Q14.3880005,3.336,13.536,3.336 Q12.6119995,3.336,11.97,3.0600002 Q11.328,2.7840002,10.998,2.2740002 Q10.668,1.764,10.668,1.0320001 Q10.668,0.444,10.914,0.012000084 Q11.16,-0.41999984,11.568,-0.7319999 Q11.976,-1.0440001,12.444,-1.2599998 Q12.024,-1.5,11.682,-1.8059998 Q11.34,-2.112,11.142,-2.508 Q10.944,-2.9039998,10.944,-3.4320002 Q10.944,-4.092,11.28,-4.542 Q11.616,-4.992,12.191999,-5.232 Q12.768,-5.4719996,13.5,-5.4719996 z M11.7,1.0440001 Q11.7,1.6680001,12.144,2.082 Q12.588,2.496,13.512,2.496 Q14.3880005,2.496,14.85,2.082 Q15.312,1.6680001,15.312,1.0080001 Q15.312,0.58800006,15.09,0.26999998 Q14.868,-0.04799986,14.466,-0.29999995 Q14.064,-0.55200005,13.512,-0.75600004 L13.32,-0.82800007 Q12.792,-0.5999999,12.432,-0.33599997 Q12.072,-0.07200003,11.886,0.26399994 Q11.7,0.60000014,11.7,1.0440001 z M13.488,-4.62 Q12.828,-4.62,12.402,-4.302 Q11.976,-3.9840002,11.976,-3.3839998 Q11.976,-2.94,12.186,-2.6399999 Q12.396,-2.3400002,12.7560005,-2.13 Q13.116,-1.9200001,13.548,-1.7280002 Q13.968,-1.908,14.298,-2.124 Q14.628,-2.3400002,14.826,-2.646 Q15.024,-2.9520001,15.024,-3.3839998 Q15.024,-3.9840002,14.604,-4.302 Q14.184,-4.62,13.488,-4.62 z M23.220001,-1.0799999 Q23.220001,-0.036000013,23.064,0.78 Q22.908,1.5960001,22.566,2.1660001 Q22.224,2.736,21.678001,3.036 Q21.132,3.336,20.364,3.336 Q19.404,3.336,18.774,2.808 Q18.144001,2.2800002,17.838,1.2900001 Q17.532,0.29999995,17.532,-1.0799999 Q17.532,-2.4720001,17.814001,-3.4559999 Q18.096,-4.44,18.720001,-4.9620004 Q19.344,-5.4839997,20.364,-5.4839997 Q21.324001,-5.4839997,21.960001,-4.9620004 Q22.596,-4.44,22.908,-3.4559999 Q23.220001,-2.4720001,23.220001,-1.0799999 z M18.588001,-1.0799999 Q18.588001,0.095999956,18.762001,0.87600017 Q18.936,1.656,19.326,2.046 Q19.716,2.436,20.364,2.436 Q21.012001,2.436,21.402,2.052 Q21.792,1.6680001,21.972,0.88199997 Q22.152,0.095999956,22.152,-1.0799999 Q22.152,-2.256,21.972,-3.0300002 Q21.792,-3.804,21.402,-4.194 Q21.012001,-4.584,20.364,-4.584 Q19.716,-4.584,19.326,-4.194 Q18.936,-3.804,18.762001,-3.0300002 Q18.588001,-2.256,18.588001,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 356.19202 176)"/> +<path d="M348.19202,150 L352.19202,150" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M4.26,3.216 L3.228,3.216 L3.228,-2.7719998 Q3.228,-3.12,3.234,-3.3600001 Q3.24,-3.6,3.252,-3.81 Q3.264,-4.02,3.276,-4.248 Q3.084,-4.0559998,2.928,-3.9239998 Q2.772,-3.7919998,2.532,-3.5879998 L1.62,-2.8439999 L1.068,-3.552 L3.384,-5.3519998 L4.26,-5.3519998 L4.26,3.216 z M7.7279997,2.568 Q7.7279997,2.124,7.944,1.9440001 Q8.16,1.764,8.46,1.764 Q8.771999,1.764,8.9939995,1.9440001 Q9.216,2.124,9.216,2.568 Q9.216,3,8.9939995,3.1920002 Q8.771999,3.384,8.46,3.384 Q8.16,3.384,7.944,3.1920002 Q7.7279997,3,7.7279997,2.568 z M16.355999,-1.0799999 Q16.355999,-0.036000013,16.2,0.78 Q16.044,1.5960001,15.702,2.1660001 Q15.360001,2.736,14.814,3.036 Q14.268,3.336,13.5,3.336 Q12.54,3.336,11.91,2.808 Q11.28,2.2800002,10.974,1.2900001 Q10.668,0.29999995,10.668,-1.0799999 Q10.668,-2.4720001,10.95,-3.4559999 Q11.232,-4.44,11.856,-4.9620004 Q12.48,-5.4839997,13.5,-5.4839997 Q14.46,-5.4839997,15.096001,-4.9620004 Q15.732,-4.44,16.044,-3.4559999 Q16.355999,-2.4720001,16.355999,-1.0799999 z M11.724,-1.0799999 Q11.724,0.095999956,11.898,0.87600017 Q12.072,1.656,12.462,2.046 Q12.852,2.436,13.5,2.436 Q14.148,2.436,14.538,2.052 Q14.9279995,1.6680001,15.108,0.88199997 Q15.288,0.095999956,15.288,-1.0799999 Q15.288,-2.256,15.108,-3.0300002 Q14.9279995,-3.804,14.538,-4.194 Q14.148,-4.584,13.5,-4.584 Q12.852,-4.584,12.462,-4.194 Q12.072,-3.804,11.898,-3.0300002 Q11.724,-2.256,11.724,-1.0799999 z M23.220001,-1.0799999 Q23.220001,-0.036000013,23.064,0.78 Q22.908,1.5960001,22.566,2.1660001 Q22.224,2.736,21.678001,3.036 Q21.132,3.336,20.364,3.336 Q19.404,3.336,18.774,2.808 Q18.144001,2.2800002,17.838,1.2900001 Q17.532,0.29999995,17.532,-1.0799999 Q17.532,-2.4720001,17.814001,-3.4559999 Q18.096,-4.44,18.720001,-4.9620004 Q19.344,-5.4839997,20.364,-5.4839997 Q21.324001,-5.4839997,21.960001,-4.9620004 Q22.596,-4.44,22.908,-3.4559999 Q23.220001,-2.4720001,23.220001,-1.0799999 z M18.588001,-1.0799999 Q18.588001,0.095999956,18.762001,0.87600017 Q18.936,1.656,19.326,2.046 Q19.716,2.436,20.364,2.436 Q21.012001,2.436,21.402,2.052 Q21.792,1.6680001,21.972,0.88199997 Q22.152,0.095999956,22.152,-1.0799999 Q22.152,-2.256,21.972,-3.0300002 Q21.792,-3.804,21.402,-4.194 Q21.012001,-4.584,20.364,-4.584 Q19.716,-4.584,19.326,-4.194 Q18.936,-3.804,18.762001,-3.0300002 Q18.588001,-2.256,18.588001,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 356.19202 150)"/> +<path d="M348.19202,124 L352.19202,124" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M4.26,3.216 L3.228,3.216 L3.228,-2.7719998 Q3.228,-3.12,3.234,-3.3600001 Q3.24,-3.6,3.252,-3.81 Q3.264,-4.02,3.276,-4.248 Q3.084,-4.0559998,2.928,-3.9239998 Q2.772,-3.7919998,2.532,-3.5879998 L1.62,-2.8439999 L1.068,-3.552 L3.384,-5.3519998 L4.26,-5.3519998 L4.26,3.216 z M7.7279997,2.568 Q7.7279997,2.124,7.944,1.9440001 Q8.16,1.764,8.46,1.764 Q8.771999,1.764,8.9939995,1.9440001 Q9.216,2.124,9.216,2.568 Q9.216,3,8.9939995,3.1920002 Q8.771999,3.384,8.46,3.384 Q8.16,3.384,7.944,3.1920002 Q7.7279997,3,7.7279997,2.568 z M16.32,3.216 L10.656,3.216 L10.656,2.3400002 L12.9,0.07200003 Q13.548,-0.576,13.992,-1.0799999 Q14.436,-1.5840001,14.664,-2.0700002 Q14.892,-2.5559998,14.892,-3.132 Q14.892,-3.8400002,14.472,-4.206 Q14.052,-4.572,13.38,-4.572 Q12.7560005,-4.572,12.282,-4.356 Q11.808,-4.14,11.316,-3.756 L10.752,-4.464 Q11.088,-4.752,11.49,-4.98 Q11.892,-5.2079997,12.366,-5.3399997 Q12.84,-5.4719996,13.38,-5.4719996 Q14.184,-5.4719996,14.76,-5.1959996 Q15.336,-4.9199996,15.653999,-4.41 Q15.972,-3.9,15.972,-3.192 Q15.972,-2.52,15.696,-1.9320002 Q15.42,-1.3439999,14.9279995,-0.7739999 Q14.436,-0.204,13.776,0.444 L11.988,2.2080002 L11.988,2.256 L16.32,2.256 L16.32,3.216 z M23.220001,-1.0799999 Q23.220001,-0.036000013,23.064,0.78 Q22.908,1.5960001,22.566,2.1660001 Q22.224,2.736,21.678001,3.036 Q21.132,3.336,20.364,3.336 Q19.404,3.336,18.774,2.808 Q18.144001,2.2800002,17.838,1.2900001 Q17.532,0.29999995,17.532,-1.0799999 Q17.532,-2.4720001,17.814001,-3.4559999 Q18.096,-4.44,18.720001,-4.9620004 Q19.344,-5.4839997,20.364,-5.4839997 Q21.324001,-5.4839997,21.960001,-4.9620004 Q22.596,-4.44,22.908,-3.4559999 Q23.220001,-2.4720001,23.220001,-1.0799999 z M18.588001,-1.0799999 Q18.588001,0.095999956,18.762001,0.87600017 Q18.936,1.656,19.326,2.046 Q19.716,2.436,20.364,2.436 Q21.012001,2.436,21.402,2.052 Q21.792,1.6680001,21.972,0.88199997 Q22.152,0.095999956,22.152,-1.0799999 Q22.152,-2.256,21.972,-3.0300002 Q21.792,-3.804,21.402,-4.194 Q21.012001,-4.584,20.364,-4.584 Q19.716,-4.584,19.326,-4.194 Q18.936,-3.804,18.762001,-3.0300002 Q18.588001,-2.256,18.588001,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 356.19202 124)"/> +<path d="M348.19202,98 L352.19202,98" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M4.26,3.216 L3.228,3.216 L3.228,-2.7719998 Q3.228,-3.12,3.234,-3.3600001 Q3.24,-3.6,3.252,-3.81 Q3.264,-4.02,3.276,-4.248 Q3.084,-4.0559998,2.928,-3.9239998 Q2.772,-3.7919998,2.532,-3.5879998 L1.62,-2.8439999 L1.068,-3.552 L3.384,-5.3519998 L4.26,-5.3519998 L4.26,3.216 z M7.7279997,2.568 Q7.7279997,2.124,7.944,1.9440001 Q8.16,1.764,8.46,1.764 Q8.771999,1.764,8.9939995,1.9440001 Q9.216,2.124,9.216,2.568 Q9.216,3,8.9939995,3.1920002 Q8.771999,3.384,8.46,3.384 Q8.16,3.384,7.944,3.1920002 Q7.7279997,3,7.7279997,2.568 z M16.704,1.2720001 L15.455999,1.2720001 L15.455999,3.216 L14.436,3.216 L14.436,1.2720001 L10.332,1.2720001 L10.332,0.37199998 L14.364,-5.4 L15.455999,-5.4 L15.455999,0.32400012 L16.704,0.32400012 L16.704,1.2720001 z M14.436,-2.376 Q14.436,-2.6880002,14.441999,-2.946 Q14.448,-3.204,14.46,-3.4320002 Q14.472,-3.6599998,14.478001,-3.87 Q14.483999,-4.08,14.496,-4.272 L14.448,-4.272 Q14.351999,-4.044,14.208,-3.7800002 Q14.064,-3.5159998,13.932,-3.336 L11.364,0.32400012 L14.436,0.32400012 L14.436,-2.376 z M23.220001,-1.0799999 Q23.220001,-0.036000013,23.064,0.78 Q22.908,1.5960001,22.566,2.1660001 Q22.224,2.736,21.678001,3.036 Q21.132,3.336,20.364,3.336 Q19.404,3.336,18.774,2.808 Q18.144001,2.2800002,17.838,1.2900001 Q17.532,0.29999995,17.532,-1.0799999 Q17.532,-2.4720001,17.814001,-3.4559999 Q18.096,-4.44,18.720001,-4.9620004 Q19.344,-5.4839997,20.364,-5.4839997 Q21.324001,-5.4839997,21.960001,-4.9620004 Q22.596,-4.44,22.908,-3.4559999 Q23.220001,-2.4720001,23.220001,-1.0799999 z M18.588001,-1.0799999 Q18.588001,0.095999956,18.762001,0.87600017 Q18.936,1.656,19.326,2.046 Q19.716,2.436,20.364,2.436 Q21.012001,2.436,21.402,2.052 Q21.792,1.6680001,21.972,0.88199997 Q22.152,0.095999956,22.152,-1.0799999 Q22.152,-2.256,21.972,-3.0300002 Q21.792,-3.804,21.402,-4.194 Q21.012001,-4.584,20.364,-4.584 Q19.716,-4.584,19.326,-4.194 Q18.936,-3.804,18.762001,-3.0300002 Q18.588001,-2.256,18.588001,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 356.19202 98)"/> +<path d="M348.19202,72 L352.19202,72" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M4.26,3.216 L3.228,3.216 L3.228,-2.7719998 Q3.228,-3.12,3.234,-3.3600001 Q3.24,-3.6,3.252,-3.81 Q3.264,-4.02,3.276,-4.248 Q3.084,-4.0559998,2.928,-3.9239998 Q2.772,-3.7919998,2.532,-3.5879998 L1.62,-2.8439999 L1.068,-3.552 L3.384,-5.3519998 L4.26,-5.3519998 L4.26,3.216 z M7.7279997,2.568 Q7.7279997,2.124,7.944,1.9440001 Q8.16,1.764,8.46,1.764 Q8.771999,1.764,8.9939995,1.9440001 Q9.216,2.124,9.216,2.568 Q9.216,3,8.9939995,3.1920002 Q8.771999,3.384,8.46,3.384 Q8.16,3.384,7.944,3.1920002 Q7.7279997,3,7.7279997,2.568 z M10.74,-0.444 Q10.74,-1.1879997,10.842,-1.908 Q10.944,-2.6279998,11.196,-3.27 Q11.448,-3.9120002,11.892,-4.41 Q12.336,-4.9079995,13.014,-5.19 Q13.691999,-5.4719996,14.664,-5.4719996 Q14.916,-5.4719996,15.222,-5.4480004 Q15.528,-5.4240003,15.719999,-5.364 L15.719999,-4.464 Q15.504,-4.536,15.234,-4.572 Q14.964,-4.608,14.688,-4.608 Q13.86,-4.608,13.308,-4.332 Q12.7560005,-4.0559998,12.438,-3.5760002 Q12.12,-3.0960002,11.976,-2.4720001 Q11.832,-1.848,11.796,-1.1399999 L11.868,-1.1399999 Q12.048,-1.428,12.323999,-1.6560001 Q12.6,-1.8839998,12.99,-2.0159998 Q13.38,-2.1479998,13.896,-2.1479998 Q14.639999,-2.1479998,15.198,-1.842 Q15.7560005,-1.5359998,16.068,-0.954 Q16.380001,-0.37199998,16.380001,0.4560001 Q16.380001,1.3440001,16.044,1.9920001 Q15.708,2.64,15.101999,2.9880002 Q14.496,3.336,13.656,3.336 Q13.044,3.336,12.516,3.108 Q11.988,2.88,11.586,2.4120002 Q11.184,1.9440001,10.962,1.23 Q10.74,0.51600003,10.74,-0.444 z M13.644,2.448 Q14.4,2.448,14.868,1.962 Q15.336,1.4760001,15.336,0.4560001 Q15.336,-0.3599999,14.922,-0.84000015 Q14.507999,-1.3200002,13.68,-1.3200002 Q13.116,-1.3200002,12.696,-1.086 Q12.276,-0.85199976,12.042,-0.49199986 Q11.808,-0.13199997,11.808,0.2520001 Q11.808,0.648,11.922,1.0320001 Q12.036,1.416,12.27,1.74 Q12.504,2.0640001,12.846,2.256 Q13.188,2.448,13.644,2.448 z M23.220001,-1.0799999 Q23.220001,-0.036000013,23.064,0.78 Q22.908,1.5960001,22.566,2.1660001 Q22.224,2.736,21.678001,3.036 Q21.132,3.336,20.364,3.336 Q19.404,3.336,18.774,2.808 Q18.144001,2.2800002,17.838,1.2900001 Q17.532,0.29999995,17.532,-1.0799999 Q17.532,-2.4720001,17.814001,-3.4559999 Q18.096,-4.44,18.720001,-4.9620004 Q19.344,-5.4839997,20.364,-5.4839997 Q21.324001,-5.4839997,21.960001,-4.9620004 Q22.596,-4.44,22.908,-3.4559999 Q23.220001,-2.4720001,23.220001,-1.0799999 z M18.588001,-1.0799999 Q18.588001,0.095999956,18.762001,0.87600017 Q18.936,1.656,19.326,2.046 Q19.716,2.436,20.364,2.436 Q21.012001,2.436,21.402,2.052 Q21.792,1.6680001,21.972,0.88199997 Q22.152,0.095999956,22.152,-1.0799999 Q22.152,-2.256,21.972,-3.0300002 Q21.792,-3.804,21.402,-4.194 Q21.012001,-4.584,20.364,-4.584 Q19.716,-4.584,19.326,-4.194 Q18.936,-3.804,18.762001,-3.0300002 Q18.588001,-2.256,18.588001,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 356.19202 72)"/> +<path d="M348.19202,46 L352.19202,46" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M4.26,3.216 L3.228,3.216 L3.228,-2.7719998 Q3.228,-3.12,3.234,-3.3600001 Q3.24,-3.6,3.252,-3.81 Q3.264,-4.02,3.276,-4.248 Q3.084,-4.0559998,2.928,-3.9239998 Q2.772,-3.7919998,2.532,-3.5879998 L1.62,-2.8439999 L1.068,-3.552 L3.384,-5.3519998 L4.26,-5.3519998 L4.26,3.216 z M7.7279997,2.568 Q7.7279997,2.124,7.944,1.9440001 Q8.16,1.764,8.46,1.764 Q8.771999,1.764,8.9939995,1.9440001 Q9.216,2.124,9.216,2.568 Q9.216,3,8.9939995,3.1920002 Q8.771999,3.384,8.46,3.384 Q8.16,3.384,7.944,3.1920002 Q7.7279997,3,7.7279997,2.568 z M13.5,-5.4719996 Q14.2560005,-5.4719996,14.832,-5.2380004 Q15.408,-5.004,15.738,-4.548 Q16.068,-4.092,16.068,-3.42 Q16.068,-2.9039998,15.846001,-2.52 Q15.624001,-2.1360002,15.252,-1.842 Q14.88,-1.5479999,14.436,-1.3200002 Q14.964,-1.0679998,15.396,-0.75 Q15.828,-0.43199992,16.086,-0.0119998455 Q16.344,0.408,16.344,0.99600005 Q16.344,1.7160001,15.996,2.2380002 Q15.648,2.76,15.018,3.048 Q14.3880005,3.336,13.536,3.336 Q12.6119995,3.336,11.97,3.0600002 Q11.328,2.7840002,10.998,2.2740002 Q10.668,1.764,10.668,1.0320001 Q10.668,0.444,10.914,0.012000084 Q11.16,-0.41999984,11.568,-0.7319999 Q11.976,-1.0440001,12.444,-1.2599998 Q12.024,-1.5,11.682,-1.8059998 Q11.34,-2.112,11.142,-2.508 Q10.944,-2.9039998,10.944,-3.4320002 Q10.944,-4.092,11.28,-4.542 Q11.616,-4.992,12.191999,-5.232 Q12.768,-5.4719996,13.5,-5.4719996 z M11.7,1.0440001 Q11.7,1.6680001,12.144,2.082 Q12.588,2.496,13.512,2.496 Q14.3880005,2.496,14.85,2.082 Q15.312,1.6680001,15.312,1.0080001 Q15.312,0.58800006,15.09,0.26999998 Q14.868,-0.04799986,14.466,-0.29999995 Q14.064,-0.55200005,13.512,-0.75600004 L13.32,-0.82800007 Q12.792,-0.5999999,12.432,-0.33599997 Q12.072,-0.07200003,11.886,0.26399994 Q11.7,0.60000014,11.7,1.0440001 z M13.488,-4.62 Q12.828,-4.62,12.402,-4.302 Q11.976,-3.9840002,11.976,-3.3839998 Q11.976,-2.94,12.186,-2.6399999 Q12.396,-2.3400002,12.7560005,-2.13 Q13.116,-1.9200001,13.548,-1.7280002 Q13.968,-1.908,14.298,-2.124 Q14.628,-2.3400002,14.826,-2.646 Q15.024,-2.9520001,15.024,-3.3839998 Q15.024,-3.9840002,14.604,-4.302 Q14.184,-4.62,13.488,-4.62 z M23.220001,-1.0799999 Q23.220001,-0.036000013,23.064,0.78 Q22.908,1.5960001,22.566,2.1660001 Q22.224,2.736,21.678001,3.036 Q21.132,3.336,20.364,3.336 Q19.404,3.336,18.774,2.808 Q18.144001,2.2800002,17.838,1.2900001 Q17.532,0.29999995,17.532,-1.0799999 Q17.532,-2.4720001,17.814001,-3.4559999 Q18.096,-4.44,18.720001,-4.9620004 Q19.344,-5.4839997,20.364,-5.4839997 Q21.324001,-5.4839997,21.960001,-4.9620004 Q22.596,-4.44,22.908,-3.4559999 Q23.220001,-2.4720001,23.220001,-1.0799999 z M18.588001,-1.0799999 Q18.588001,0.095999956,18.762001,0.87600017 Q18.936,1.656,19.326,2.046 Q19.716,2.436,20.364,2.436 Q21.012001,2.436,21.402,2.052 Q21.792,1.6680001,21.972,0.88199997 Q22.152,0.095999956,22.152,-1.0799999 Q22.152,-2.256,21.972,-3.0300002 Q21.792,-3.804,21.402,-4.194 Q21.012001,-4.584,20.364,-4.584 Q19.716,-4.584,19.326,-4.194 Q18.936,-3.804,18.762001,-3.0300002 Q18.588001,-2.256,18.588001,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 356.19202 46)"/> +<path d="M348.19202,20 L352.19202,20" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M6.2400002,3.216 L0.576,3.216 L0.576,2.3400002 L2.82,0.07200003 Q3.468,-0.576,3.912,-1.0799999 Q4.356,-1.5840001,4.584,-2.0700002 Q4.8120003,-2.5559998,4.8120003,-3.132 Q4.8120003,-3.8400002,4.392,-4.206 Q3.9720001,-4.572,3.3,-4.572 Q2.676,-4.572,2.202,-4.356 Q1.728,-4.14,1.2360001,-3.756 L0.672,-4.464 Q1.008,-4.752,1.41,-4.98 Q1.812,-5.2079997,2.286,-5.3399997 Q2.76,-5.4719996,3.3,-5.4719996 Q4.104,-5.4719996,4.68,-5.1959996 Q5.256,-4.9199996,5.574,-4.41 Q5.892,-3.9,5.892,-3.192 Q5.892,-2.52,5.616,-1.9320002 Q5.34,-1.3439999,4.848,-0.7739999 Q4.356,-0.204,3.696,0.444 L1.908,2.2080002 L1.908,2.256 L6.2400002,2.256 L6.2400002,3.216 z M7.7279997,2.568 Q7.7279997,2.124,7.944,1.9440001 Q8.16,1.764,8.46,1.764 Q8.771999,1.764,8.9939995,1.9440001 Q9.216,2.124,9.216,2.568 Q9.216,3,8.9939995,3.1920002 Q8.771999,3.384,8.46,3.384 Q8.16,3.384,7.944,3.1920002 Q7.7279997,3,7.7279997,2.568 z M16.355999,-1.0799999 Q16.355999,-0.036000013,16.2,0.78 Q16.044,1.5960001,15.702,2.1660001 Q15.360001,2.736,14.814,3.036 Q14.268,3.336,13.5,3.336 Q12.54,3.336,11.91,2.808 Q11.28,2.2800002,10.974,1.2900001 Q10.668,0.29999995,10.668,-1.0799999 Q10.668,-2.4720001,10.95,-3.4559999 Q11.232,-4.44,11.856,-4.9620004 Q12.48,-5.4839997,13.5,-5.4839997 Q14.46,-5.4839997,15.096001,-4.9620004 Q15.732,-4.44,16.044,-3.4559999 Q16.355999,-2.4720001,16.355999,-1.0799999 z M11.724,-1.0799999 Q11.724,0.095999956,11.898,0.87600017 Q12.072,1.656,12.462,2.046 Q12.852,2.436,13.5,2.436 Q14.148,2.436,14.538,2.052 Q14.9279995,1.6680001,15.108,0.88199997 Q15.288,0.095999956,15.288,-1.0799999 Q15.288,-2.256,15.108,-3.0300002 Q14.9279995,-3.804,14.538,-4.194 Q14.148,-4.584,13.5,-4.584 Q12.852,-4.584,12.462,-4.194 Q12.072,-3.804,11.898,-3.0300002 Q11.724,-2.256,11.724,-1.0799999 z M23.220001,-1.0799999 Q23.220001,-0.036000013,23.064,0.78 Q22.908,1.5960001,22.566,2.1660001 Q22.224,2.736,21.678001,3.036 Q21.132,3.336,20.364,3.336 Q19.404,3.336,18.774,2.808 Q18.144001,2.2800002,17.838,1.2900001 Q17.532,0.29999995,17.532,-1.0799999 Q17.532,-2.4720001,17.814001,-3.4559999 Q18.096,-4.44,18.720001,-4.9620004 Q19.344,-5.4839997,20.364,-5.4839997 Q21.324001,-5.4839997,21.960001,-4.9620004 Q22.596,-4.44,22.908,-3.4559999 Q23.220001,-2.4720001,23.220001,-1.0799999 z M18.588001,-1.0799999 Q18.588001,0.095999956,18.762001,0.87600017 Q18.936,1.656,19.326,2.046 Q19.716,2.436,20.364,2.436 Q21.012001,2.436,21.402,2.052 Q21.792,1.6680001,21.972,0.88199997 Q22.152,0.095999956,22.152,-1.0799999 Q22.152,-2.256,21.972,-3.0300002 Q21.792,-3.804,21.402,-4.194 Q21.012001,-4.584,20.364,-4.584 Q19.716,-4.584,19.326,-4.194 Q18.936,-3.804,18.762001,-3.0300002 Q18.588001,-2.256,18.588001,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 356.19202 20)"/> +</svg> \ No newline at end of file diff --git a/tests/refs/colorbar/left.png b/tests/refs/colorbar/left.png new file mode 100644 index 0000000000000000000000000000000000000000..699a2e013e0ba1373129536ffa3497a3631a37e8 GIT binary patch literal 31137 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 literal 0 HcmV?d00001 diff --git a/tests/refs/colorbar/left.svg b/tests/refs/colorbar/left.svg new file mode 100644 index 0000000..d011f39 --- /dev/null +++ b/tests/refs/colorbar/left.svg @@ -0,0 +1,304 @@ +<svg height="300" viewBox="0 0 400 300" width="400" xmlns="http://www.w3.org/2000/svg"> +<rect fill="#ffffff" height="100%" width="100%"/> +<clipPath id="plotive-clip1"> +<rect height="260" width="296.19202" x="83.808" y="20"/> +</clipPath> +<g clip-path="url(#plotive-clip1)"> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#54c16a" fill-opacity="0.7019608" stroke="#54c16a" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 254.69855 112.57182)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#3ba97e" fill-opacity="0.7019608" stroke="#3ba97e" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 243.77826 65.19423)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#8fd159" fill-opacity="0.7019608" stroke="#8fd159" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 266.2723 182.75821)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#440154" fill-opacity="0.7019608" stroke="#440154" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 232.7216 137.4275)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#35a282" fill-opacity="0.7019608" stroke="#35a282" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 103.808 128.45457)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#31778c" fill-opacity="0.7019608" stroke="#31778c" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 210.59283 40)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#70cb5f" fill-opacity="0.7019608" stroke="#70cb5f" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 224.14064 221.95265)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#38638b" fill-opacity="0.7019608" stroke="#38638b" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 126.21247 179.70654)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#36698c" fill-opacity="0.7019608" stroke="#36698c" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 168.01395 119.84299)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#fde724" fill-opacity="0.7019608" stroke="#fde724" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 278.9784 107.928925)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#33a083" fill-opacity="0.7019608" stroke="#33a083" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 233.80809 123.19487)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#90d159" fill-opacity="0.7019608" stroke="#90d159" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 333.05127 73.18942)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#461c61" fill-opacity="0.7019608" stroke="#461c61" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 360 186.15048)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#61c961" fill-opacity="0.7019608" stroke="#61c961" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 109.394714 260)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#279689" fill-opacity="0.7019608" stroke="#279689" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 206.82393 56.149902)"/> +</g> +<rect fill="none" height="260" stroke="#000000" stroke-width="1" width="296.19202" x="83.808" y="20"/> +<path d="M51.808,280 L51.808,279.5 L71.808,279.5 L71.808,280" fill="#440154" stroke="none"/> +<path d="M51.808,279.5 L51.808,278.5 L71.808,278.5 L71.808,279.5" fill="#440355" stroke="none"/> +<path d="M51.808,278.5 L51.808,277.5 L71.808,277.5 L71.808,278.5" fill="#440556" stroke="none"/> +<path d="M51.808,277.5 L51.808,276.5 L71.808,276.5 L71.808,277.5" fill="#440756" stroke="none"/> +<path d="M51.808,276.5 L51.808,275.5 L71.808,275.5 L71.808,276.5" fill="#450957" stroke="none"/> +<path d="M51.808,275.5 L51.808,274.5 L71.808,274.5 L71.808,275.5" fill="#450b58" stroke="none"/> +<path d="M51.808,274.5 L51.808,273.5 L71.808,273.5 L71.808,274.5" fill="#450d59" stroke="none"/> +<path d="M51.808,273.5 L51.808,272.5 L71.808,272.5 L71.808,273.5" fill="#450f5a" stroke="none"/> +<path d="M51.808,272.5 L51.808,271.5 L71.808,271.5 L71.808,272.5" fill="#45105a" stroke="none"/> +<path d="M51.808,271.5 L51.808,270.5 L71.808,270.5 L71.808,271.5" fill="#45125b" stroke="none"/> +<path d="M51.808,270.5 L51.808,269.5 L71.808,269.5 L71.808,270.5" fill="#45145c" stroke="none"/> +<path d="M51.808,269.5 L51.808,268.5 L71.808,268.5 L71.808,269.5" fill="#45155d" stroke="none"/> +<path d="M51.808,268.5 L51.808,267.5 L71.808,267.5 L71.808,268.5" fill="#45165e" stroke="none"/> +<path d="M51.808,267.5 L51.808,266.5 L71.808,266.5 L71.808,267.5" fill="#46185e" stroke="none"/> +<path d="M51.808,266.5 L51.808,265.5 L71.808,265.5 L71.808,266.5" fill="#46195f" stroke="none"/> +<path d="M51.808,265.5 L51.808,264.5 L71.808,264.5 L71.808,265.5" fill="#461b60" stroke="none"/> +<path d="M51.808,264.5 L51.808,263.5 L71.808,263.5 L71.808,264.5" fill="#461c61" stroke="none"/> +<path d="M51.808,263.5 L51.808,262.5 L71.808,262.5 L71.808,263.5" fill="#461d62" stroke="none"/> +<path d="M51.808,262.5 L51.808,261.5 L71.808,261.5 L71.808,262.5" fill="#461e63" stroke="none"/> +<path d="M51.808,261.5 L51.808,260.5 L71.808,260.5 L71.808,261.5" fill="#462063" stroke="none"/> +<path d="M51.808,260.5 L51.808,259.5 L71.808,259.5 L71.808,260.5" fill="#462164" stroke="none"/> +<path d="M51.808,259.5 L51.808,258.5 L71.808,258.5 L71.808,259.5" fill="#462265" stroke="none"/> +<path d="M51.808,258.5 L51.808,257.5 L71.808,257.5 L71.808,258.5" fill="#462366" stroke="none"/> +<path d="M51.808,257.5 L51.808,256.5 L71.808,256.5 L71.808,257.5" fill="#462467" stroke="none"/> +<path d="M51.808,256.5 L51.808,255.5 L71.808,255.5 L71.808,256.5" fill="#462667" stroke="none"/> +<path d="M51.808,255.5 L51.808,254.5 L71.808,254.5 L71.808,255.5" fill="#462768" stroke="none"/> +<path d="M51.808,254.5 L51.808,253.5 L71.808,253.5 L71.808,254.5" fill="#462869" stroke="none"/> +<path d="M51.808,253.5 L51.808,252.5 L71.808,252.5 L71.808,253.5" fill="#46296a" stroke="none"/> +<path d="M51.808,252.5 L51.808,251.5 L71.808,251.5 L71.808,252.5" fill="#462a6b" stroke="none"/> +<path d="M51.808,251.5 L51.808,250.5 L71.808,250.5 L71.808,251.5" fill="#462b6c" stroke="none"/> +<path d="M51.808,250.5 L51.808,249.5 L71.808,249.5 L71.808,250.5" fill="#452c6c" stroke="none"/> +<path d="M51.808,249.5 L51.808,248.5 L71.808,248.5 L71.808,249.5" fill="#452e6d" stroke="none"/> +<path d="M51.808,248.5 L51.808,247.5 L71.808,247.5 L71.808,248.5" fill="#452f6e" stroke="none"/> +<path d="M51.808,247.5 L51.808,246.5 L71.808,246.5 L71.808,247.5" fill="#45306f" stroke="none"/> +<path d="M51.808,246.5 L51.808,245.5 L71.808,245.5 L71.808,246.5" fill="#453170" stroke="none"/> +<path d="M51.808,245.5 L51.808,244.5 L71.808,244.5 L71.808,245.5" fill="#453271" stroke="none"/> +<path d="M51.808,244.5 L51.808,243.5 L71.808,243.5 L71.808,244.5" fill="#453371" stroke="none"/> +<path d="M51.808,243.5 L51.808,242.5 L71.808,242.5 L71.808,243.5" fill="#453472" stroke="none"/> +<path d="M51.808,242.5 L51.808,241.5 L71.808,241.5 L71.808,242.5" fill="#453573" stroke="none"/> +<path d="M51.808,241.5 L51.808,240.5 L71.808,240.5 L71.808,241.5" fill="#443674" stroke="none"/> +<path d="M51.808,240.5 L51.808,239.5 L71.808,239.5 L71.808,240.5" fill="#443775" stroke="none"/> +<path d="M51.808,239.5 L51.808,238.5 L71.808,238.5 L71.808,239.5" fill="#443876" stroke="none"/> +<path d="M51.808,238.5 L51.808,237.5 L71.808,237.5 L71.808,238.5" fill="#443976" stroke="none"/> +<path d="M51.808,237.5 L51.808,236.5 L71.808,236.5 L71.808,237.5" fill="#443a77" stroke="none"/> +<path d="M51.808,236.5 L51.808,235.5 L71.808,235.5 L71.808,236.5" fill="#433b78" stroke="none"/> +<path d="M51.808,235.5 L51.808,234.5 L71.808,234.5 L71.808,235.5" fill="#433c79" stroke="none"/> +<path d="M51.808,234.5 L51.808,233.5 L71.808,233.5 L71.808,234.5" fill="#433e7a" stroke="none"/> +<path d="M51.808,233.5 L51.808,232.5 L71.808,232.5 L71.808,233.5" fill="#433f7b" stroke="none"/> +<path d="M51.808,232.5 L51.808,231.5 L71.808,231.5 L71.808,232.5" fill="#42407c" stroke="none"/> +<path d="M51.808,231.5 L51.808,230.5 L71.808,230.5 L71.808,231.5" fill="#42417c" stroke="none"/> +<path d="M51.808,230.5 L51.808,229.5 L71.808,229.5 L71.808,230.5" fill="#42427d" stroke="none"/> +<path d="M51.808,229.5 L51.808,228.5 L71.808,228.5 L71.808,229.5" fill="#41437e" stroke="none"/> +<path d="M51.808,228.5 L51.808,227.5 L71.808,227.5 L71.808,228.5" fill="#41447f" stroke="none"/> +<path d="M51.808,227.5 L51.808,226.5 L71.808,226.5 L71.808,227.5" fill="#414580" stroke="none"/> +<path d="M51.808,226.5 L51.808,225.5 L71.808,225.5 L71.808,226.5" fill="#404681" stroke="none"/> +<path d="M51.808,225.5 L51.808,224.5 L71.808,224.5 L71.808,225.5" fill="#404781" stroke="none"/> +<path d="M51.808,224.5 L51.808,223.5 L71.808,223.5 L71.808,224.5" fill="#3f4882" stroke="none"/> +<path d="M51.808,223.5 L51.808,222.5 L71.808,222.5 L71.808,223.5" fill="#3f4983" stroke="none"/> +<path d="M51.808,222.5 L51.808,221.5 L71.808,221.5 L71.808,222.5" fill="#3f4a84" stroke="none"/> +<path d="M51.808,221.5 L51.808,220.5 L71.808,220.5 L71.808,221.5" fill="#3e4b85" stroke="none"/> +<path d="M51.808,220.5 L51.808,219.5 L71.808,219.5 L71.808,220.5" fill="#3e4c86" stroke="none"/> +<path d="M51.808,219.5 L51.808,218.5 L71.808,218.5 L71.808,219.5" fill="#3d4d87" stroke="none"/> +<path d="M51.808,218.5 L51.808,217.5 L71.808,217.5 L71.808,218.5" fill="#3d4e87" stroke="none"/> +<path d="M51.808,217.5 L51.808,216.5 L71.808,216.5 L71.808,217.5" fill="#3c4f88" stroke="none"/> +<path d="M51.808,216.5 L51.808,215.5 L71.808,215.5 L71.808,216.5" fill="#3c5089" stroke="none"/> +<path d="M51.808,215.5 L51.808,214.5 L71.808,214.5 L71.808,215.5" fill="#3b518a" stroke="none"/> +<path d="M51.808,214.5 L51.808,213.5 L71.808,213.5 L71.808,214.5" fill="#3b528a" stroke="none"/> +<path d="M51.808,213.5 L51.808,212.5 L71.808,212.5 L71.808,213.5" fill="#3b538a" stroke="none"/> +<path d="M51.808,212.5 L51.808,211.5 L71.808,211.5 L71.808,212.5" fill="#3b548a" stroke="none"/> +<path d="M51.808,211.5 L51.808,210.5 L71.808,210.5 L71.808,211.5" fill="#3a558a" stroke="none"/> +<path d="M51.808,210.5 L51.808,209.5 L71.808,209.5 L71.808,210.5" fill="#3a568a" stroke="none"/> +<path d="M51.808,209.5 L51.808,208.5 L71.808,208.5 L71.808,209.5" fill="#3a578b" stroke="none"/> +<path d="M51.808,208.5 L51.808,207.5 L71.808,207.5 L71.808,208.5" fill="#3a588b" stroke="none"/> +<path d="M51.808,207.5 L51.808,206.5 L71.808,206.5 L71.808,207.5" fill="#3a598b" stroke="none"/> +<path d="M51.808,206.5 L51.808,205.5 L71.808,205.5 L71.808,206.5" fill="#3a5a8b" stroke="none"/> +<path d="M51.808,205.5 L51.808,204.5 L71.808,204.5 L71.808,205.5" fill="#395b8b" stroke="none"/> +<path d="M51.808,204.5 L51.808,203.5 L71.808,203.5 L71.808,204.5" fill="#395c8b" stroke="none"/> +<path d="M51.808,203.5 L51.808,202.5 L71.808,202.5 L71.808,203.5" fill="#395d8b" stroke="none"/> +<path d="M51.808,202.5 L51.808,201.5 L71.808,201.5 L71.808,202.5" fill="#395e8b" stroke="none"/> +<path d="M51.808,201.5 L51.808,200.5 L71.808,200.5 L71.808,201.5" fill="#395f8b" stroke="none"/> +<path d="M51.808,200.5 L51.808,199.5 L71.808,199.5 L71.808,200.5" fill="#38608b" stroke="none"/> +<path d="M51.808,199.5 L51.808,198.5 L71.808,198.5 L71.808,199.5" fill="#38618b" stroke="none"/> +<path d="M51.808,198.5 L51.808,197.5 L71.808,197.5 L71.808,198.5" fill="#38628b" stroke="none"/> +<path d="M51.808,197.5 L51.808,196.5 L71.808,196.5 L71.808,197.5" fill="#38638b" stroke="none"/> +<path d="M51.808,196.5 L51.808,195.5 L71.808,195.5 L71.808,196.5" fill="#37648b" stroke="none"/> +<path d="M51.808,195.5 L51.808,194.5 L71.808,194.5 L71.808,195.5" fill="#37658b" stroke="none"/> +<path d="M51.808,194.5 L51.808,193.5 L71.808,193.5 L71.808,194.5" fill="#37658c" stroke="none"/> +<path d="M51.808,193.5 L51.808,192.5 L71.808,192.5 L71.808,193.5" fill="#37668c" stroke="none"/> +<path d="M51.808,192.5 L51.808,191.5 L71.808,191.5 L71.808,192.5" fill="#36678c" stroke="none"/> +<path d="M51.808,191.5 L51.808,190.5 L71.808,190.5 L71.808,191.5" fill="#36688c" stroke="none"/> +<path d="M51.808,190.5 L51.808,189.5 L71.808,189.5 L71.808,190.5" fill="#36698c" stroke="none"/> +<path d="M51.808,189.5 L51.808,188.5 L71.808,188.5 L71.808,189.5" fill="#366a8c" stroke="none"/> +<path d="M51.808,188.5 L51.808,187.5 L71.808,187.5 L71.808,188.5" fill="#356b8c" stroke="none"/> +<path d="M51.808,187.5 L51.808,186.5 L71.808,186.5 L71.808,187.5" fill="#356c8c" stroke="none"/> +<path d="M51.808,186.5 L51.808,185.5 L71.808,185.5 L71.808,186.5" fill="#356d8c" stroke="none"/> +<path d="M51.808,185.5 L51.808,184.5 L71.808,184.5 L71.808,185.5" fill="#346e8c" stroke="none"/> +<path d="M51.808,184.5 L51.808,183.5 L71.808,183.5 L71.808,184.5" fill="#346f8c" stroke="none"/> +<path d="M51.808,183.5 L51.808,182.5 L71.808,182.5 L71.808,183.5" fill="#34708c" stroke="none"/> +<path d="M51.808,182.5 L51.808,181.5 L71.808,181.5 L71.808,182.5" fill="#33718c" stroke="none"/> +<path d="M51.808,181.5 L51.808,180.5 L71.808,180.5 L71.808,181.5" fill="#33728c" stroke="none"/> +<path d="M51.808,180.5 L51.808,179.5 L71.808,179.5 L71.808,180.5" fill="#33738c" stroke="none"/> +<path d="M51.808,179.5 L51.808,178.5 L71.808,178.5 L71.808,179.5" fill="#32748c" stroke="none"/> +<path d="M51.808,178.5 L51.808,177.5 L71.808,177.5 L71.808,178.5" fill="#32758c" stroke="none"/> +<path d="M51.808,177.5 L51.808,176.5 L71.808,176.5 L71.808,177.5" fill="#31768c" stroke="none"/> +<path d="M51.808,176.5 L51.808,175.5 L71.808,175.5 L71.808,176.5" fill="#31778c" stroke="none"/> +<path d="M51.808,175.5 L51.808,174.5 L71.808,174.5 L71.808,175.5" fill="#30788c" stroke="none"/> +<path d="M51.808,174.5 L51.808,173.5 L71.808,173.5 L71.808,174.5" fill="#30788c" stroke="none"/> +<path d="M51.808,173.5 L51.808,172.5 L71.808,172.5 L71.808,173.5" fill="#30798c" stroke="none"/> +<path d="M51.808,172.5 L51.808,171.5 L71.808,171.5 L71.808,172.5" fill="#2f7a8c" stroke="none"/> +<path d="M51.808,171.5 L51.808,170.5 L71.808,170.5 L71.808,171.5" fill="#2f7b8c" stroke="none"/> +<path d="M51.808,170.5 L51.808,169.5 L71.808,169.5 L71.808,170.5" fill="#2e7c8c" stroke="none"/> +<path d="M51.808,169.5 L51.808,168.5 L71.808,168.5 L71.808,169.5" fill="#2e7d8c" stroke="none"/> +<path d="M51.808,168.5 L51.808,167.5 L71.808,167.5 L71.808,168.5" fill="#2d7e8c" stroke="none"/> +<path d="M51.808,167.5 L51.808,166.5 L71.808,166.5 L71.808,167.5" fill="#2d7f8c" stroke="none"/> +<path d="M51.808,166.5 L51.808,165.5 L71.808,165.5 L71.808,166.5" fill="#2c808c" stroke="none"/> +<path d="M51.808,165.5 L51.808,164.5 L71.808,164.5 L71.808,165.5" fill="#2b818c" stroke="none"/> +<path d="M51.808,164.5 L51.808,163.5 L71.808,163.5 L71.808,164.5" fill="#2b828c" stroke="none"/> +<path d="M51.808,163.5 L51.808,162.5 L71.808,162.5 L71.808,163.5" fill="#2a838c" stroke="none"/> +<path d="M51.808,162.5 L51.808,161.5 L71.808,161.5 L71.808,162.5" fill="#2a848c" stroke="none"/> +<path d="M51.808,161.5 L51.808,160.5 L71.808,160.5 L71.808,161.5" fill="#29858c" stroke="none"/> +<path d="M51.808,160.5 L51.808,159.5 L71.808,159.5 L71.808,160.5" fill="#28868c" stroke="none"/> +<path d="M51.808,159.5 L51.808,158.5 L71.808,158.5 L71.808,159.5" fill="#28878c" stroke="none"/> +<path d="M51.808,158.5 L51.808,157.5 L71.808,157.5 L71.808,158.5" fill="#27888c" stroke="none"/> +<path d="M51.808,157.5 L51.808,156.5 L71.808,156.5 L71.808,157.5" fill="#26888c" stroke="none"/> +<path d="M51.808,156.5 L51.808,155.5 L71.808,155.5 L71.808,156.5" fill="#25898c" stroke="none"/> +<path d="M51.808,155.5 L51.808,154.5 L71.808,154.5 L71.808,155.5" fill="#248a8c" stroke="none"/> +<path d="M51.808,154.5 L51.808,153.5 L71.808,153.5 L71.808,154.5" fill="#248b8c" stroke="none"/> +<path d="M51.808,153.5 L51.808,152.5 L71.808,152.5 L71.808,153.5" fill="#238c8c" stroke="none"/> +<path d="M51.808,152.5 L51.808,151.5 L71.808,151.5 L71.808,152.5" fill="#228d8c" stroke="none"/> +<path d="M51.808,151.5 L51.808,150.5 L71.808,150.5 L71.808,151.5" fill="#218e8c" stroke="none"/> +<path d="M51.808,150.5 L51.808,149.5 L71.808,149.5 L71.808,150.5" fill="#208f8c" stroke="none"/> +<path d="M51.808,149.5 L51.808,148.5 L71.808,148.5 L71.808,149.5" fill="#21908c" stroke="none"/> +<path d="M51.808,148.5 L51.808,147.5 L71.808,147.5 L71.808,148.5" fill="#22918b" stroke="none"/> +<path d="M51.808,147.5 L51.808,146.5 L71.808,146.5 L71.808,147.5" fill="#23928b" stroke="none"/> +<path d="M51.808,146.5 L51.808,145.5 L71.808,145.5 L71.808,146.5" fill="#24938a" stroke="none"/> +<path d="M51.808,145.5 L51.808,144.5 L71.808,144.5 L71.808,145.5" fill="#25938a" stroke="none"/> +<path d="M51.808,144.5 L51.808,143.5 L71.808,143.5 L71.808,144.5" fill="#269489" stroke="none"/> +<path d="M51.808,143.5 L51.808,142.5 L71.808,142.5 L71.808,143.5" fill="#279589" stroke="none"/> +<path d="M51.808,142.5 L51.808,141.5 L71.808,141.5 L71.808,142.5" fill="#289689" stroke="none"/> +<path d="M51.808,141.5 L51.808,140.5 L71.808,140.5 L71.808,141.5" fill="#299788" stroke="none"/> +<path d="M51.808,140.5 L51.808,139.5 L71.808,139.5 L71.808,140.5" fill="#2a9888" stroke="none"/> +<path d="M51.808,139.5 L51.808,138.5 L71.808,138.5 L71.808,139.5" fill="#2b9987" stroke="none"/> +<path d="M51.808,138.5 L51.808,137.5 L71.808,137.5 L71.808,138.5" fill="#2c9a87" stroke="none"/> +<path d="M51.808,137.5 L51.808,136.5 L71.808,136.5 L71.808,137.5" fill="#2d9b86" stroke="none"/> +<path d="M51.808,136.5 L51.808,135.5 L71.808,135.5 L71.808,136.5" fill="#2e9b86" stroke="none"/> +<path d="M51.808,135.5 L51.808,134.5 L71.808,134.5 L71.808,135.5" fill="#2e9c85" stroke="none"/> +<path d="M51.808,134.5 L51.808,133.5 L71.808,133.5 L71.808,134.5" fill="#2f9d85" stroke="none"/> +<path d="M51.808,133.5 L51.808,132.5 L71.808,132.5 L71.808,133.5" fill="#309e84" stroke="none"/> +<path d="M51.808,132.5 L51.808,131.5 L71.808,131.5 L71.808,132.5" fill="#319f84" stroke="none"/> +<path d="M51.808,131.5 L51.808,130.5 L71.808,130.5 L71.808,131.5" fill="#32a083" stroke="none"/> +<path d="M51.808,130.5 L51.808,129.5 L71.808,129.5 L71.808,130.5" fill="#33a183" stroke="none"/> +<path d="M51.808,129.5 L51.808,128.5 L71.808,128.5 L71.808,129.5" fill="#34a282" stroke="none"/> +<path d="M51.808,128.5 L51.808,127.5 L71.808,127.5 L71.808,128.5" fill="#35a282" stroke="none"/> +<path d="M51.808,127.5 L51.808,126.5 L71.808,126.5 L71.808,127.5" fill="#36a381" stroke="none"/> +<path d="M51.808,126.5 L51.808,125.5 L71.808,125.5 L71.808,126.5" fill="#37a481" stroke="none"/> +<path d="M51.808,125.5 L51.808,124.5 L71.808,124.5 L71.808,125.5" fill="#38a580" stroke="none"/> +<path d="M51.808,124.5 L51.808,123.5 L71.808,123.5 L71.808,124.5" fill="#39a680" stroke="none"/> +<path d="M51.808,123.5 L51.808,122.5 L71.808,122.5 L71.808,123.5" fill="#39a77f" stroke="none"/> +<path d="M51.808,122.5 L51.808,121.5 L71.808,121.5 L71.808,122.5" fill="#3aa87e" stroke="none"/> +<path d="M51.808,121.5 L51.808,120.5 L71.808,120.5 L71.808,121.5" fill="#3ba97e" stroke="none"/> +<path d="M51.808,120.5 L51.808,119.5 L71.808,119.5 L71.808,120.5" fill="#3caa7d" stroke="none"/> +<path d="M51.808,119.5 L51.808,118.5 L71.808,118.5 L71.808,119.5" fill="#3daa7d" stroke="none"/> +<path d="M51.808,118.5 L51.808,117.5 L71.808,117.5 L71.808,118.5" fill="#3eab7c" stroke="none"/> +<path d="M51.808,117.5 L51.808,116.5 L71.808,116.5 L71.808,117.5" fill="#3fac7b" stroke="none"/> +<path d="M51.808,116.5 L51.808,115.5 L71.808,115.5 L71.808,116.5" fill="#40ad7b" stroke="none"/> +<path d="M51.808,115.5 L51.808,114.5 L71.808,114.5 L71.808,115.5" fill="#41ae7a" stroke="none"/> +<path d="M51.808,114.5 L51.808,113.5 L71.808,113.5 L71.808,114.5" fill="#41af79" stroke="none"/> +<path d="M51.808,113.5 L51.808,112.5 L71.808,112.5 L71.808,113.5" fill="#42b079" stroke="none"/> +<path d="M51.808,112.5 L51.808,111.5 L71.808,111.5 L71.808,112.5" fill="#43b178" stroke="none"/> +<path d="M51.808,111.5 L51.808,110.5 L71.808,110.5 L71.808,111.5" fill="#44b178" stroke="none"/> +<path d="M51.808,110.5 L51.808,109.5 L71.808,109.5 L71.808,110.5" fill="#45b277" stroke="none"/> +<path d="M51.808,109.5 L51.808,108.5 L71.808,108.5 L71.808,109.5" fill="#46b376" stroke="none"/> +<path d="M51.808,108.5 L51.808,107.5 L71.808,107.5 L71.808,108.5" fill="#47b475" stroke="none"/> +<path d="M51.808,107.5 L51.808,106.5 L71.808,106.5 L71.808,107.5" fill="#48b575" stroke="none"/> +<path d="M51.808,106.5 L51.808,105.5 L71.808,105.5 L71.808,106.5" fill="#49b674" stroke="none"/> +<path d="M51.808,105.5 L51.808,104.5 L71.808,104.5 L71.808,105.5" fill="#49b773" stroke="none"/> +<path d="M51.808,104.5 L51.808,103.5 L71.808,103.5 L71.808,104.5" fill="#4ab773" stroke="none"/> +<path d="M51.808,103.5 L51.808,102.5 L71.808,102.5 L71.808,103.5" fill="#4bb872" stroke="none"/> +<path d="M51.808,102.5 L51.808,101.5 L71.808,101.5 L71.808,102.5" fill="#4cb971" stroke="none"/> +<path d="M51.808,101.5 L51.808,100.5 L71.808,100.5 L71.808,101.5" fill="#4dba70" stroke="none"/> +<path d="M51.808,100.5 L51.808,99.5 L71.808,99.5 L71.808,100.5" fill="#4ebb6f" stroke="none"/> +<path d="M51.808,99.5 L51.808,98.5 L71.808,98.5 L71.808,99.5" fill="#4fbc6f" stroke="none"/> +<path d="M51.808,98.5 L51.808,97.5 L71.808,97.5 L71.808,98.5" fill="#50bd6e" stroke="none"/> +<path d="M51.808,97.5 L51.808,96.5 L71.808,96.5 L71.808,97.5" fill="#50be6d" stroke="none"/> +<path d="M51.808,96.5 L51.808,95.5 L71.808,95.5 L71.808,96.5" fill="#51be6c" stroke="none"/> +<path d="M51.808,95.5 L51.808,94.5 L71.808,94.5 L71.808,95.5" fill="#52bf6b" stroke="none"/> +<path d="M51.808,94.5 L51.808,93.5 L71.808,93.5 L71.808,94.5" fill="#53c06b" stroke="none"/> +<path d="M51.808,93.5 L51.808,92.5 L71.808,92.5 L71.808,93.5" fill="#54c16a" stroke="none"/> +<path d="M51.808,92.5 L51.808,91.5 L71.808,91.5 L71.808,92.5" fill="#55c269" stroke="none"/> +<path d="M51.808,91.5 L51.808,90.5 L71.808,90.5 L71.808,91.5" fill="#56c368" stroke="none"/> +<path d="M51.808,90.5 L51.808,89.5 L71.808,89.5 L71.808,90.5" fill="#57c467" stroke="none"/> +<path d="M51.808,89.5 L51.808,88.5 L71.808,88.5 L71.808,89.5" fill="#57c566" stroke="none"/> +<path d="M51.808,88.5 L51.808,87.5 L71.808,87.5 L71.808,88.5" fill="#58c565" stroke="none"/> +<path d="M51.808,87.5 L51.808,86.5 L71.808,86.5 L71.808,87.5" fill="#59c664" stroke="none"/> +<path d="M51.808,86.5 L51.808,85.5 L71.808,85.5 L71.808,86.5" fill="#5ac763" stroke="none"/> +<path d="M51.808,85.5 L51.808,84.5 L71.808,84.5 L71.808,85.5" fill="#5bc862" stroke="none"/> +<path d="M51.808,84.5 L51.808,83.5 L71.808,83.5 L71.808,84.5" fill="#5fc962" stroke="none"/> +<path d="M51.808,83.5 L51.808,82.5 L71.808,82.5 L71.808,83.5" fill="#62c961" stroke="none"/> +<path d="M51.808,82.5 L51.808,81.5 L71.808,81.5 L71.808,82.5" fill="#65ca61" stroke="none"/> +<path d="M51.808,81.5 L51.808,80.5 L71.808,80.5 L71.808,81.5" fill="#69ca60" stroke="none"/> +<path d="M51.808,80.5 L51.808,79.5 L71.808,79.5 L71.808,80.5" fill="#6ccb60" stroke="none"/> +<path d="M51.808,79.5 L51.808,78.5 L71.808,78.5 L71.808,79.5" fill="#6fcb5f" stroke="none"/> +<path d="M51.808,78.5 L51.808,77.5 L71.808,77.5 L71.808,78.5" fill="#72cc5f" stroke="none"/> +<path d="M51.808,77.5 L51.808,76.5 L71.808,76.5 L71.808,77.5" fill="#75cc5e" stroke="none"/> +<path d="M51.808,76.5 L51.808,75.5 L71.808,75.5 L71.808,76.5" fill="#78cd5e" stroke="none"/> +<path d="M51.808,75.5 L51.808,74.5 L71.808,74.5 L71.808,75.5" fill="#7bcd5d" stroke="none"/> +<path d="M51.808,74.5 L51.808,73.5 L71.808,73.5 L71.808,74.5" fill="#7ece5d" stroke="none"/> +<path d="M51.808,73.5 L51.808,72.5 L71.808,72.5 L71.808,73.5" fill="#80ce5c" stroke="none"/> +<path d="M51.808,72.5 L51.808,71.5 L71.808,71.5 L71.808,72.5" fill="#83cf5c" stroke="none"/> +<path d="M51.808,71.5 L51.808,70.5 L71.808,70.5 L71.808,71.5" fill="#86cf5b" stroke="none"/> +<path d="M51.808,70.5 L51.808,69.5 L71.808,69.5 L71.808,70.5" fill="#89d05b" stroke="none"/> +<path d="M51.808,69.5 L51.808,68.5 L71.808,68.5 L71.808,69.5" fill="#8bd05a" stroke="none"/> +<path d="M51.808,68.5 L51.808,67.5 L71.808,67.5 L71.808,68.5" fill="#8ed159" stroke="none"/> +<path d="M51.808,67.5 L51.808,66.5 L71.808,66.5 L71.808,67.5" fill="#91d159" stroke="none"/> +<path d="M51.808,66.5 L51.808,65.5 L71.808,65.5 L71.808,66.5" fill="#93d258" stroke="none"/> +<path d="M51.808,65.5 L51.808,64.5 L71.808,64.5 L71.808,65.5" fill="#96d258" stroke="none"/> +<path d="M51.808,64.5 L51.808,63.5 L71.808,63.5 L71.808,64.5" fill="#98d357" stroke="none"/> +<path d="M51.808,63.5 L51.808,62.5 L71.808,62.5 L71.808,63.5" fill="#9bd356" stroke="none"/> +<path d="M51.808,62.5 L51.808,61.5 L71.808,61.5 L71.808,62.5" fill="#9dd456" stroke="none"/> +<path d="M51.808,61.5 L51.808,60.5 L71.808,60.5 L71.808,61.5" fill="#a0d455" stroke="none"/> +<path d="M51.808,60.5 L51.808,59.5 L71.808,59.5 L71.808,60.5" fill="#a2d554" stroke="none"/> +<path d="M51.808,59.5 L51.808,58.5 L71.808,58.5 L71.808,59.5" fill="#a5d554" stroke="none"/> +<path d="M51.808,58.5 L51.808,57.5 L71.808,57.5 L71.808,58.5" fill="#a7d653" stroke="none"/> +<path d="M51.808,57.5 L51.808,56.5 L71.808,56.5 L71.808,57.5" fill="#aad652" stroke="none"/> +<path d="M51.808,56.5 L51.808,55.5 L71.808,55.5 L71.808,56.5" fill="#acd752" stroke="none"/> +<path d="M51.808,55.5 L51.808,54.5 L71.808,54.5 L71.808,55.5" fill="#afd751" stroke="none"/> +<path d="M51.808,54.5 L51.808,53.5 L71.808,53.5 L71.808,54.5" fill="#b1d850" stroke="none"/> +<path d="M51.808,53.5 L51.808,52.5 L71.808,52.5 L71.808,53.5" fill="#b3d84f" stroke="none"/> +<path d="M51.808,52.5 L51.808,51.5 L71.808,51.5 L71.808,52.5" fill="#b6d94f" stroke="none"/> +<path d="M51.808,51.5 L51.808,50.5 L71.808,50.5 L71.808,51.5" fill="#b8d94e" stroke="none"/> +<path d="M51.808,50.5 L51.808,49.5 L71.808,49.5 L71.808,50.5" fill="#bada4d" stroke="none"/> +<path d="M51.808,49.5 L51.808,48.5 L71.808,48.5 L71.808,49.5" fill="#bdda4c" stroke="none"/> +<path d="M51.808,48.5 L51.808,47.5 L71.808,47.5 L71.808,48.5" fill="#bfdb4b" stroke="none"/> +<path d="M51.808,47.5 L51.808,46.5 L71.808,46.5 L71.808,47.5" fill="#c1db4a" stroke="none"/> +<path d="M51.808,46.5 L51.808,45.5 L71.808,45.5 L71.808,46.5" fill="#c4dc49" stroke="none"/> +<path d="M51.808,45.5 L51.808,44.5 L71.808,44.5 L71.808,45.5" fill="#c6dc48" stroke="none"/> +<path d="M51.808,44.5 L51.808,43.5 L71.808,43.5 L71.808,44.5" fill="#c8dd47" stroke="none"/> +<path d="M51.808,43.5 L51.808,42.5 L71.808,42.5 L71.808,43.5" fill="#cadd46" stroke="none"/> +<path d="M51.808,42.5 L51.808,41.5 L71.808,41.5 L71.808,42.5" fill="#cddd45" stroke="none"/> +<path d="M51.808,41.5 L51.808,40.5 L71.808,40.5 L71.808,41.5" fill="#cfde44" stroke="none"/> +<path d="M51.808,40.5 L51.808,39.5 L71.808,39.5 L71.808,40.5" fill="#d1de43" stroke="none"/> +<path d="M51.808,39.5 L51.808,38.5 L71.808,38.5 L71.808,39.5" fill="#d3df42" stroke="none"/> +<path d="M51.808,38.5 L51.808,37.5 L71.808,37.5 L71.808,38.5" fill="#d6df41" stroke="none"/> +<path d="M51.808,37.5 L51.808,36.5 L71.808,36.5 L71.808,37.5" fill="#d8e040" stroke="none"/> +<path d="M51.808,36.5 L51.808,35.5 L71.808,35.5 L71.808,36.5" fill="#dae03f" stroke="none"/> +<path d="M51.808,35.5 L51.808,34.5 L71.808,34.5 L71.808,35.5" fill="#dce13e" stroke="none"/> +<path d="M51.808,34.5 L51.808,33.5 L71.808,33.5 L71.808,34.5" fill="#dfe13c" stroke="none"/> +<path d="M51.808,33.5 L51.808,32.5 L71.808,32.5 L71.808,33.5" fill="#e1e13b" stroke="none"/> +<path d="M51.808,32.5 L51.808,31.5 L71.808,31.5 L71.808,32.5" fill="#e3e23a" stroke="none"/> +<path d="M51.808,31.5 L51.808,30.5 L71.808,30.5 L71.808,31.5" fill="#e5e238" stroke="none"/> +<path d="M51.808,30.5 L51.808,29.5 L71.808,29.5 L71.808,30.5" fill="#e7e337" stroke="none"/> +<path d="M51.808,29.5 L51.808,28.5 L71.808,28.5 L71.808,29.5" fill="#eae335" stroke="none"/> +<path d="M51.808,28.5 L51.808,27.5 L71.808,27.5 L71.808,28.5" fill="#ece434" stroke="none"/> +<path d="M51.808,27.5 L51.808,26.5 L71.808,26.5 L71.808,27.5" fill="#eee432" stroke="none"/> +<path d="M51.808,26.5 L51.808,25.5 L71.808,25.5 L71.808,26.5" fill="#f0e530" stroke="none"/> +<path d="M51.808,25.5 L51.808,24.5 L71.808,24.5 L71.808,25.5" fill="#f2e52f" stroke="none"/> +<path d="M51.808,24.5 L51.808,23.5 L71.808,23.5 L71.808,24.5" fill="#f4e52d" stroke="none"/> +<path d="M51.808,23.5 L51.808,22.5 L71.808,22.5 L71.808,23.5" fill="#f7e62b" stroke="none"/> +<path d="M51.808,22.5 L51.808,21.5 L71.808,21.5 L71.808,22.5" fill="#f9e629" stroke="none"/> +<path d="M51.808,21.5 L51.808,20.5 L71.808,20.5 L71.808,21.5" fill="#fbe726" stroke="none"/> +<path d="M51.808,20.5 L51.808,20 L71.808,20 L71.808,20.5" fill="#fde724" stroke="none"/> +<path d="M51.808,20 L71.808,20 L71.808,280 L51.808,280 z" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M51.808,265.58292 L47.808,265.58292" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M-17.532001,-1.0799999 Q-17.532001,-0.036000013,-17.688,0.78 Q-17.844,1.5960001,-18.186,2.1660001 Q-18.528,2.736,-19.074001,3.036 Q-19.62,3.336,-20.388,3.336 Q-21.348,3.336,-21.978,2.808 Q-22.608,2.2800002,-22.914001,1.2900001 Q-23.220001,0.29999995,-23.220001,-1.0799999 Q-23.220001,-2.4720001,-22.938,-3.4559999 Q-22.656,-4.44,-22.032001,-4.9620004 Q-21.408,-5.4839997,-20.388,-5.4839997 Q-19.428001,-5.4839997,-18.792,-4.9620004 Q-18.156,-4.44,-17.844,-3.4559999 Q-17.532001,-2.4720001,-17.532001,-1.0799999 z M-22.164001,-1.0799999 Q-22.164001,0.095999956,-21.99,0.87600017 Q-21.816,1.656,-21.426,2.046 Q-21.036001,2.436,-20.388,2.436 Q-19.740002,2.436,-19.35,2.052 Q-18.960001,1.6680001,-18.78,0.88199997 Q-18.6,0.095999956,-18.6,-1.0799999 Q-18.6,-2.256,-18.78,-3.0300002 Q-18.960001,-3.804,-19.35,-4.194 Q-19.740002,-4.584,-20.388,-4.584 Q-21.036001,-4.584,-21.426,-4.194 Q-21.816,-3.804,-21.99,-3.0300002 Q-22.164001,-2.256,-22.164001,-1.0799999 z M-16.08,2.568 Q-16.08,2.124,-15.864,1.9440001 Q-15.648001,1.764,-15.348001,1.764 Q-15.036,1.764,-14.814,1.9440001 Q-14.592,2.124,-14.592,2.568 Q-14.592,3,-14.814,3.1920002 Q-15.036,3.384,-15.348001,3.384 Q-15.648001,3.384,-15.864,3.1920002 Q-16.08,3,-16.08,2.568 z M-9.468,3.216 L-10.500001,3.216 L-10.500001,-2.7719998 Q-10.500001,-3.12,-10.494,-3.3600001 Q-10.488001,-3.6,-10.476001,-3.81 Q-10.464001,-4.02,-10.452001,-4.248 Q-10.644001,-4.0559998,-10.800001,-3.9239998 Q-10.956,-3.7919998,-11.196001,-3.5879998 L-12.108001,-2.8439999 L-12.660001,-3.552 L-10.344001,-5.3519998 L-9.468,-5.3519998 L-9.468,3.216 z M-0.5880008,-1.0799999 Q-0.5880008,-0.036000013,-0.7440009,0.78 Q-0.9000006,1.5960001,-1.2420006,2.1660001 Q-1.5840006,2.736,-2.1300006,3.036 Q-2.6760006,3.336,-3.4440007,3.336 Q-4.4040008,3.336,-5.034001,2.808 Q-5.6640005,2.2800002,-5.9700007,1.2900001 Q-6.276001,0.29999995,-6.276001,-1.0799999 Q-6.276001,-2.4720001,-5.994001,-3.4559999 Q-5.712001,-4.44,-5.088001,-4.9620004 Q-4.4640007,-5.4839997,-3.4440007,-5.4839997 Q-2.4840007,-5.4839997,-1.8480005,-4.9620004 Q-1.2120008,-4.44,-0.9000006,-3.4559999 Q-0.5880008,-2.4720001,-0.5880008,-1.0799999 z M-5.2200007,-1.0799999 Q-5.2200007,0.095999956,-5.046001,0.87600017 Q-4.8720007,1.656,-4.482001,2.046 Q-4.092001,2.436,-3.4440007,2.436 Q-2.796001,2.436,-2.4060006,2.052 Q-2.0160007,1.6680001,-1.8360009,0.88199997 Q-1.6560006,0.095999956,-1.6560006,-1.0799999 Q-1.6560006,-2.256,-1.8360009,-3.0300002 Q-2.0160007,-3.804,-2.4060006,-4.194 Q-2.796001,-4.584,-3.4440007,-4.584 Q-4.092001,-4.584,-4.482001,-4.194 Q-4.8720007,-3.804,-5.046001,-3.0300002 Q-5.2200007,-2.256,-5.2200007,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 43.808 265.58292)"/> +<path d="M51.808,237.0792 L47.808,237.0792" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M-17.532001,-1.0799999 Q-17.532001,-0.036000013,-17.688,0.78 Q-17.844,1.5960001,-18.186,2.1660001 Q-18.528,2.736,-19.074001,3.036 Q-19.62,3.336,-20.388,3.336 Q-21.348,3.336,-21.978,2.808 Q-22.608,2.2800002,-22.914001,1.2900001 Q-23.220001,0.29999995,-23.220001,-1.0799999 Q-23.220001,-2.4720001,-22.938,-3.4559999 Q-22.656,-4.44,-22.032001,-4.9620004 Q-21.408,-5.4839997,-20.388,-5.4839997 Q-19.428001,-5.4839997,-18.792,-4.9620004 Q-18.156,-4.44,-17.844,-3.4559999 Q-17.532001,-2.4720001,-17.532001,-1.0799999 z M-22.164001,-1.0799999 Q-22.164001,0.095999956,-21.99,0.87600017 Q-21.816,1.656,-21.426,2.046 Q-21.036001,2.436,-20.388,2.436 Q-19.740002,2.436,-19.35,2.052 Q-18.960001,1.6680001,-18.78,0.88199997 Q-18.6,0.095999956,-18.6,-1.0799999 Q-18.6,-2.256,-18.78,-3.0300002 Q-18.960001,-3.804,-19.35,-4.194 Q-19.740002,-4.584,-20.388,-4.584 Q-21.036001,-4.584,-21.426,-4.194 Q-21.816,-3.804,-21.99,-3.0300002 Q-22.164001,-2.256,-22.164001,-1.0799999 z M-16.08,2.568 Q-16.08,2.124,-15.864,1.9440001 Q-15.648001,1.764,-15.348001,1.764 Q-15.036,1.764,-14.814,1.9440001 Q-14.592,2.124,-14.592,2.568 Q-14.592,3,-14.814,3.1920002 Q-15.036,3.384,-15.348001,3.384 Q-15.648001,3.384,-15.864,3.1920002 Q-16.08,3,-16.08,2.568 z M-7.4880004,3.216 L-13.152,3.216 L-13.152,2.3400002 L-10.908001,0.07200003 Q-10.26,-0.576,-9.816001,-1.0799999 Q-9.372001,-1.5840001,-9.144001,-2.0700002 Q-8.916,-2.5559998,-8.916,-3.132 Q-8.916,-3.8400002,-9.336,-4.206 Q-9.7560005,-4.572,-10.428,-4.572 Q-11.052,-4.572,-11.526001,-4.356 Q-12.000001,-4.14,-12.492001,-3.756 L-13.056001,-4.464 Q-12.72,-4.752,-12.318001,-4.98 Q-11.916,-5.2079997,-11.442,-5.3399997 Q-10.968,-5.4719996,-10.428,-5.4719996 Q-9.624001,-5.4719996,-9.048,-5.1959996 Q-8.472,-4.9199996,-8.154001,-4.41 Q-7.8360004,-3.9,-7.8360004,-3.192 Q-7.8360004,-2.52,-8.112,-1.9320002 Q-8.3880005,-1.3439999,-8.880001,-0.7739999 Q-9.372001,-0.204,-10.032001,0.444 L-11.820001,2.2080002 L-11.820001,2.256 L-7.4880004,2.256 L-7.4880004,3.216 z M-0.5880008,-1.0799999 Q-0.5880008,-0.036000013,-0.7440009,0.78 Q-0.9000006,1.5960001,-1.2420006,2.1660001 Q-1.5840006,2.736,-2.1300006,3.036 Q-2.6760006,3.336,-3.4440007,3.336 Q-4.4040008,3.336,-5.034001,2.808 Q-5.6640005,2.2800002,-5.9700007,1.2900001 Q-6.276001,0.29999995,-6.276001,-1.0799999 Q-6.276001,-2.4720001,-5.994001,-3.4559999 Q-5.712001,-4.44,-5.088001,-4.9620004 Q-4.4640007,-5.4839997,-3.4440007,-5.4839997 Q-2.4840007,-5.4839997,-1.8480005,-4.9620004 Q-1.2120008,-4.44,-0.9000006,-3.4559999 Q-0.5880008,-2.4720001,-0.5880008,-1.0799999 z M-5.2200007,-1.0799999 Q-5.2200007,0.095999956,-5.046001,0.87600017 Q-4.8720007,1.656,-4.482001,2.046 Q-4.092001,2.436,-3.4440007,2.436 Q-2.796001,2.436,-2.4060006,2.052 Q-2.0160007,1.6680001,-1.8360009,0.88199997 Q-1.6560006,0.095999956,-1.6560006,-1.0799999 Q-1.6560006,-2.256,-1.8360009,-3.0300002 Q-2.0160007,-3.804,-2.4060006,-4.194 Q-2.796001,-4.584,-3.4440007,-4.584 Q-4.092001,-4.584,-4.482001,-4.194 Q-4.8720007,-3.804,-5.046001,-3.0300002 Q-5.2200007,-2.256,-5.2200007,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 43.808 237.0792)"/> +<path d="M51.808,208.57547 L47.808,208.57547" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M-17.532001,-1.0799999 Q-17.532001,-0.036000013,-17.688,0.78 Q-17.844,1.5960001,-18.186,2.1660001 Q-18.528,2.736,-19.074001,3.036 Q-19.62,3.336,-20.388,3.336 Q-21.348,3.336,-21.978,2.808 Q-22.608,2.2800002,-22.914001,1.2900001 Q-23.220001,0.29999995,-23.220001,-1.0799999 Q-23.220001,-2.4720001,-22.938,-3.4559999 Q-22.656,-4.44,-22.032001,-4.9620004 Q-21.408,-5.4839997,-20.388,-5.4839997 Q-19.428001,-5.4839997,-18.792,-4.9620004 Q-18.156,-4.44,-17.844,-3.4559999 Q-17.532001,-2.4720001,-17.532001,-1.0799999 z M-22.164001,-1.0799999 Q-22.164001,0.095999956,-21.99,0.87600017 Q-21.816,1.656,-21.426,2.046 Q-21.036001,2.436,-20.388,2.436 Q-19.740002,2.436,-19.35,2.052 Q-18.960001,1.6680001,-18.78,0.88199997 Q-18.6,0.095999956,-18.6,-1.0799999 Q-18.6,-2.256,-18.78,-3.0300002 Q-18.960001,-3.804,-19.35,-4.194 Q-19.740002,-4.584,-20.388,-4.584 Q-21.036001,-4.584,-21.426,-4.194 Q-21.816,-3.804,-21.99,-3.0300002 Q-22.164001,-2.256,-22.164001,-1.0799999 z M-16.08,2.568 Q-16.08,2.124,-15.864,1.9440001 Q-15.648001,1.764,-15.348001,1.764 Q-15.036,1.764,-14.814,1.9440001 Q-14.592,2.124,-14.592,2.568 Q-14.592,3,-14.814,3.1920002 Q-15.036,3.384,-15.348001,3.384 Q-15.648001,3.384,-15.864,3.1920002 Q-16.08,3,-16.08,2.568 z M-7.8120008,-3.348 Q-7.8120008,-2.7719998,-8.028,-2.3519998 Q-8.244,-1.9320002,-8.646,-1.6679997 Q-9.048,-1.4039998,-9.588001,-1.296 L-9.588001,-1.2480001 Q-8.556001,-1.1279998,-8.052,-0.5999999 Q-7.548001,-0.07200003,-7.548001,0.78 Q-7.548001,1.524,-7.8960004,2.106 Q-8.244,2.6880002,-8.970001,3.012 Q-9.696001,3.336,-10.836,3.336 Q-11.508,3.336,-12.084001,3.234 Q-12.660001,3.132,-13.188001,2.868 L-13.188001,1.8840001 Q-12.648001,2.1480002,-12.024,2.298 Q-11.400001,2.448,-10.824,2.448 Q-9.672001,2.448,-9.162001,1.998 Q-8.652,1.5480001,-8.652,0.75600004 Q-8.652,0.21600008,-8.934,-0.11399984 Q-9.216001,-0.444,-9.7560005,-0.5999999 Q-10.2960005,-0.75600004,-11.052,-0.75600004 L-11.880001,-0.75600004 L-11.880001,-1.6560001 L-11.040001,-1.6560001 Q-10.332001,-1.6560001,-9.858001,-1.8600001 Q-9.384001,-2.0640001,-9.1380005,-2.4299998 Q-8.892,-2.796,-8.892,-3.276 Q-8.892,-3.9,-9.312,-4.242 Q-9.732,-4.584,-10.452001,-4.584 Q-10.908001,-4.584,-11.280001,-4.494 Q-11.652,-4.404,-11.97,-4.242 Q-12.288,-4.08,-12.612,-3.8639998 L-13.14,-4.584 Q-12.684001,-4.944,-12.0060005,-5.2079997 Q-11.328001,-5.4719996,-10.464001,-5.4719996 Q-9.120001,-5.4719996,-8.466001,-4.872 Q-7.8120008,-4.272,-7.8120008,-3.348 z M-0.5880008,-1.0799999 Q-0.5880008,-0.036000013,-0.7440009,0.78 Q-0.9000006,1.5960001,-1.2420006,2.1660001 Q-1.5840006,2.736,-2.1300006,3.036 Q-2.6760006,3.336,-3.4440007,3.336 Q-4.4040008,3.336,-5.034001,2.808 Q-5.6640005,2.2800002,-5.9700007,1.2900001 Q-6.276001,0.29999995,-6.276001,-1.0799999 Q-6.276001,-2.4720001,-5.994001,-3.4559999 Q-5.712001,-4.44,-5.088001,-4.9620004 Q-4.4640007,-5.4839997,-3.4440007,-5.4839997 Q-2.4840007,-5.4839997,-1.8480005,-4.9620004 Q-1.2120008,-4.44,-0.9000006,-3.4559999 Q-0.5880008,-2.4720001,-0.5880008,-1.0799999 z M-5.2200007,-1.0799999 Q-5.2200007,0.095999956,-5.046001,0.87600017 Q-4.8720007,1.656,-4.482001,2.046 Q-4.092001,2.436,-3.4440007,2.436 Q-2.796001,2.436,-2.4060006,2.052 Q-2.0160007,1.6680001,-1.8360009,0.88199997 Q-1.6560006,0.095999956,-1.6560006,-1.0799999 Q-1.6560006,-2.256,-1.8360009,-3.0300002 Q-2.0160007,-3.804,-2.4060006,-4.194 Q-2.796001,-4.584,-3.4440007,-4.584 Q-4.092001,-4.584,-4.482001,-4.194 Q-4.8720007,-3.804,-5.046001,-3.0300002 Q-5.2200007,-2.256,-5.2200007,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 43.808 208.57547)"/> +<path d="M51.808,180.07175 L47.808,180.07175" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M-17.532001,-1.0799999 Q-17.532001,-0.036000013,-17.688,0.78 Q-17.844,1.5960001,-18.186,2.1660001 Q-18.528,2.736,-19.074001,3.036 Q-19.62,3.336,-20.388,3.336 Q-21.348,3.336,-21.978,2.808 Q-22.608,2.2800002,-22.914001,1.2900001 Q-23.220001,0.29999995,-23.220001,-1.0799999 Q-23.220001,-2.4720001,-22.938,-3.4559999 Q-22.656,-4.44,-22.032001,-4.9620004 Q-21.408,-5.4839997,-20.388,-5.4839997 Q-19.428001,-5.4839997,-18.792,-4.9620004 Q-18.156,-4.44,-17.844,-3.4559999 Q-17.532001,-2.4720001,-17.532001,-1.0799999 z M-22.164001,-1.0799999 Q-22.164001,0.095999956,-21.99,0.87600017 Q-21.816,1.656,-21.426,2.046 Q-21.036001,2.436,-20.388,2.436 Q-19.740002,2.436,-19.35,2.052 Q-18.960001,1.6680001,-18.78,0.88199997 Q-18.6,0.095999956,-18.6,-1.0799999 Q-18.6,-2.256,-18.78,-3.0300002 Q-18.960001,-3.804,-19.35,-4.194 Q-19.740002,-4.584,-20.388,-4.584 Q-21.036001,-4.584,-21.426,-4.194 Q-21.816,-3.804,-21.99,-3.0300002 Q-22.164001,-2.256,-22.164001,-1.0799999 z M-16.08,2.568 Q-16.08,2.124,-15.864,1.9440001 Q-15.648001,1.764,-15.348001,1.764 Q-15.036,1.764,-14.814,1.9440001 Q-14.592,2.124,-14.592,2.568 Q-14.592,3,-14.814,3.1920002 Q-15.036,3.384,-15.348001,3.384 Q-15.648001,3.384,-15.864,3.1920002 Q-16.08,3,-16.08,2.568 z M-7.1040006,1.2720001 L-8.352001,1.2720001 L-8.352001,3.216 L-9.372001,3.216 L-9.372001,1.2720001 L-13.476001,1.2720001 L-13.476001,0.37199998 L-9.444,-5.4 L-8.352001,-5.4 L-8.352001,0.32400012 L-7.1040006,0.32400012 L-7.1040006,1.2720001 z M-9.372001,-2.376 Q-9.372001,-2.6880002,-9.366001,-2.946 Q-9.360001,-3.204,-9.348001,-3.4320002 Q-9.336,-3.6599998,-9.33,-3.87 Q-9.324001,-4.08,-9.312,-4.272 L-9.360001,-4.272 Q-9.456001,-4.044,-9.6,-3.7800002 Q-9.744,-3.5159998,-9.876,-3.336 L-12.444,0.32400012 L-9.372001,0.32400012 L-9.372001,-2.376 z M-0.5880008,-1.0799999 Q-0.5880008,-0.036000013,-0.7440009,0.78 Q-0.9000006,1.5960001,-1.2420006,2.1660001 Q-1.5840006,2.736,-2.1300006,3.036 Q-2.6760006,3.336,-3.4440007,3.336 Q-4.4040008,3.336,-5.034001,2.808 Q-5.6640005,2.2800002,-5.9700007,1.2900001 Q-6.276001,0.29999995,-6.276001,-1.0799999 Q-6.276001,-2.4720001,-5.994001,-3.4559999 Q-5.712001,-4.44,-5.088001,-4.9620004 Q-4.4640007,-5.4839997,-3.4440007,-5.4839997 Q-2.4840007,-5.4839997,-1.8480005,-4.9620004 Q-1.2120008,-4.44,-0.9000006,-3.4559999 Q-0.5880008,-2.4720001,-0.5880008,-1.0799999 z M-5.2200007,-1.0799999 Q-5.2200007,0.095999956,-5.046001,0.87600017 Q-4.8720007,1.656,-4.482001,2.046 Q-4.092001,2.436,-3.4440007,2.436 Q-2.796001,2.436,-2.4060006,2.052 Q-2.0160007,1.6680001,-1.8360009,0.88199997 Q-1.6560006,0.095999956,-1.6560006,-1.0799999 Q-1.6560006,-2.256,-1.8360009,-3.0300002 Q-2.0160007,-3.804,-2.4060006,-4.194 Q-2.796001,-4.584,-3.4440007,-4.584 Q-4.092001,-4.584,-4.482001,-4.194 Q-4.8720007,-3.804,-5.046001,-3.0300002 Q-5.2200007,-2.256,-5.2200007,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 43.808 180.07175)"/> +<path d="M51.808,151.56801 L47.808,151.56801" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M-17.532001,-1.0799999 Q-17.532001,-0.036000013,-17.688,0.78 Q-17.844,1.5960001,-18.186,2.1660001 Q-18.528,2.736,-19.074001,3.036 Q-19.62,3.336,-20.388,3.336 Q-21.348,3.336,-21.978,2.808 Q-22.608,2.2800002,-22.914001,1.2900001 Q-23.220001,0.29999995,-23.220001,-1.0799999 Q-23.220001,-2.4720001,-22.938,-3.4559999 Q-22.656,-4.44,-22.032001,-4.9620004 Q-21.408,-5.4839997,-20.388,-5.4839997 Q-19.428001,-5.4839997,-18.792,-4.9620004 Q-18.156,-4.44,-17.844,-3.4559999 Q-17.532001,-2.4720001,-17.532001,-1.0799999 z M-22.164001,-1.0799999 Q-22.164001,0.095999956,-21.99,0.87600017 Q-21.816,1.656,-21.426,2.046 Q-21.036001,2.436,-20.388,2.436 Q-19.740002,2.436,-19.35,2.052 Q-18.960001,1.6680001,-18.78,0.88199997 Q-18.6,0.095999956,-18.6,-1.0799999 Q-18.6,-2.256,-18.78,-3.0300002 Q-18.960001,-3.804,-19.35,-4.194 Q-19.740002,-4.584,-20.388,-4.584 Q-21.036001,-4.584,-21.426,-4.194 Q-21.816,-3.804,-21.99,-3.0300002 Q-22.164001,-2.256,-22.164001,-1.0799999 z M-16.08,2.568 Q-16.08,2.124,-15.864,1.9440001 Q-15.648001,1.764,-15.348001,1.764 Q-15.036,1.764,-14.814,1.9440001 Q-14.592,2.124,-14.592,2.568 Q-14.592,3,-14.814,3.1920002 Q-15.036,3.384,-15.348001,3.384 Q-15.648001,3.384,-15.864,3.1920002 Q-16.08,3,-16.08,2.568 z M-10.428,-2.04 Q-9.552,-2.04,-8.904001,-1.7399998 Q-8.2560005,-1.44,-7.9020004,-0.88199997 Q-7.548001,-0.32399988,-7.548001,0.48000002 Q-7.548001,1.368,-7.9320006,2.0100002 Q-8.316,2.652,-9.030001,2.994 Q-9.744,3.336,-10.752001,3.336 Q-11.412001,3.336,-11.994,3.216 Q-12.576,3.0960002,-12.972001,2.868 L-12.972001,1.8720001 Q-12.540001,2.1360002,-11.922001,2.286 Q-11.304001,2.436,-10.740001,2.436 Q-10.104,2.436,-9.630001,2.2380002 Q-9.156,2.04,-8.892,1.626 Q-8.628,1.2120001,-8.628,0.58800006 Q-8.628,-0.25199986,-9.144001,-0.7019999 Q-9.660001,-1.152,-10.776001,-1.152 Q-11.112,-1.152,-11.544001,-1.092 Q-11.976001,-1.0320001,-12.240001,-0.9720001 L-12.768001,-1.3080001 L-12.444,-5.3519998 L-8.148001,-5.3519998 L-8.148001,-4.392 L-11.544001,-4.392 L-11.748001,-1.908 Q-11.544001,-1.9439998,-11.196001,-1.9920001 Q-10.848001,-2.04,-10.428,-2.04 z M-0.5880008,-1.0799999 Q-0.5880008,-0.036000013,-0.7440009,0.78 Q-0.9000006,1.5960001,-1.2420006,2.1660001 Q-1.5840006,2.736,-2.1300006,3.036 Q-2.6760006,3.336,-3.4440007,3.336 Q-4.4040008,3.336,-5.034001,2.808 Q-5.6640005,2.2800002,-5.9700007,1.2900001 Q-6.276001,0.29999995,-6.276001,-1.0799999 Q-6.276001,-2.4720001,-5.994001,-3.4559999 Q-5.712001,-4.44,-5.088001,-4.9620004 Q-4.4640007,-5.4839997,-3.4440007,-5.4839997 Q-2.4840007,-5.4839997,-1.8480005,-4.9620004 Q-1.2120008,-4.44,-0.9000006,-3.4559999 Q-0.5880008,-2.4720001,-0.5880008,-1.0799999 z M-5.2200007,-1.0799999 Q-5.2200007,0.095999956,-5.046001,0.87600017 Q-4.8720007,1.656,-4.482001,2.046 Q-4.092001,2.436,-3.4440007,2.436 Q-2.796001,2.436,-2.4060006,2.052 Q-2.0160007,1.6680001,-1.8360009,0.88199997 Q-1.6560006,0.095999956,-1.6560006,-1.0799999 Q-1.6560006,-2.256,-1.8360009,-3.0300002 Q-2.0160007,-3.804,-2.4060006,-4.194 Q-2.796001,-4.584,-3.4440007,-4.584 Q-4.092001,-4.584,-4.482001,-4.194 Q-4.8720007,-3.804,-5.046001,-3.0300002 Q-5.2200007,-2.256,-5.2200007,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 43.808 151.56801)"/> +<path d="M51.808,123.064285 L47.808,123.064285" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M-17.532001,-1.0799999 Q-17.532001,-0.036000013,-17.688,0.78 Q-17.844,1.5960001,-18.186,2.1660001 Q-18.528,2.736,-19.074001,3.036 Q-19.62,3.336,-20.388,3.336 Q-21.348,3.336,-21.978,2.808 Q-22.608,2.2800002,-22.914001,1.2900001 Q-23.220001,0.29999995,-23.220001,-1.0799999 Q-23.220001,-2.4720001,-22.938,-3.4559999 Q-22.656,-4.44,-22.032001,-4.9620004 Q-21.408,-5.4839997,-20.388,-5.4839997 Q-19.428001,-5.4839997,-18.792,-4.9620004 Q-18.156,-4.44,-17.844,-3.4559999 Q-17.532001,-2.4720001,-17.532001,-1.0799999 z M-22.164001,-1.0799999 Q-22.164001,0.095999956,-21.99,0.87600017 Q-21.816,1.656,-21.426,2.046 Q-21.036001,2.436,-20.388,2.436 Q-19.740002,2.436,-19.35,2.052 Q-18.960001,1.6680001,-18.78,0.88199997 Q-18.6,0.095999956,-18.6,-1.0799999 Q-18.6,-2.256,-18.78,-3.0300002 Q-18.960001,-3.804,-19.35,-4.194 Q-19.740002,-4.584,-20.388,-4.584 Q-21.036001,-4.584,-21.426,-4.194 Q-21.816,-3.804,-21.99,-3.0300002 Q-22.164001,-2.256,-22.164001,-1.0799999 z M-16.08,2.568 Q-16.08,2.124,-15.864,1.9440001 Q-15.648001,1.764,-15.348001,1.764 Q-15.036,1.764,-14.814,1.9440001 Q-14.592,2.124,-14.592,2.568 Q-14.592,3,-14.814,3.1920002 Q-15.036,3.384,-15.348001,3.384 Q-15.648001,3.384,-15.864,3.1920002 Q-16.08,3,-16.08,2.568 z M-13.068001,-0.444 Q-13.068001,-1.1879997,-12.966001,-1.908 Q-12.864,-2.6279998,-12.612,-3.27 Q-12.360001,-3.9120002,-11.916,-4.41 Q-11.472,-4.9079995,-10.794001,-5.19 Q-10.116001,-5.4719996,-9.144001,-5.4719996 Q-8.892,-5.4719996,-8.586,-5.4480004 Q-8.280001,-5.4240003,-8.088001,-5.364 L-8.088001,-4.464 Q-8.304001,-4.536,-8.574,-4.572 Q-8.844001,-4.608,-9.120001,-4.608 Q-9.948001,-4.608,-10.500001,-4.332 Q-11.052,-4.0559998,-11.370001,-3.5760002 Q-11.688001,-3.0960002,-11.832001,-2.4720001 Q-11.976001,-1.848,-12.012001,-1.1399999 L-11.940001,-1.1399999 Q-11.76,-1.428,-11.484001,-1.6560001 Q-11.208,-1.8839998,-10.818001,-2.0159998 Q-10.428,-2.1479998,-9.912001,-2.1479998 Q-9.168001,-2.1479998,-8.610001,-1.842 Q-8.052,-1.5359998,-7.7400007,-0.954 Q-7.4280005,-0.37199998,-7.4280005,0.4560001 Q-7.4280005,1.3440001,-7.7640004,1.9920001 Q-8.1,2.64,-8.706001,2.9880002 Q-9.312,3.336,-10.152,3.336 Q-10.764001,3.336,-11.292001,3.108 Q-11.820001,2.88,-12.222,2.4120002 Q-12.624001,1.9440001,-12.846001,1.23 Q-13.068001,0.51600003,-13.068001,-0.444 z M-10.1640005,2.448 Q-9.408001,2.448,-8.940001,1.962 Q-8.472,1.4760001,-8.472,0.4560001 Q-8.472,-0.3599999,-8.886001,-0.84000015 Q-9.300001,-1.3200002,-10.128,-1.3200002 Q-10.692,-1.3200002,-11.112,-1.086 Q-11.532001,-0.85199976,-11.766001,-0.49199986 Q-12.000001,-0.13199997,-12.000001,0.2520001 Q-12.000001,0.648,-11.886001,1.0320001 Q-11.772,1.416,-11.538,1.74 Q-11.304001,2.0640001,-10.962001,2.256 Q-10.620001,2.448,-10.1640005,2.448 z M-0.5880008,-1.0799999 Q-0.5880008,-0.036000013,-0.7440009,0.78 Q-0.9000006,1.5960001,-1.2420006,2.1660001 Q-1.5840006,2.736,-2.1300006,3.036 Q-2.6760006,3.336,-3.4440007,3.336 Q-4.4040008,3.336,-5.034001,2.808 Q-5.6640005,2.2800002,-5.9700007,1.2900001 Q-6.276001,0.29999995,-6.276001,-1.0799999 Q-6.276001,-2.4720001,-5.994001,-3.4559999 Q-5.712001,-4.44,-5.088001,-4.9620004 Q-4.4640007,-5.4839997,-3.4440007,-5.4839997 Q-2.4840007,-5.4839997,-1.8480005,-4.9620004 Q-1.2120008,-4.44,-0.9000006,-3.4559999 Q-0.5880008,-2.4720001,-0.5880008,-1.0799999 z M-5.2200007,-1.0799999 Q-5.2200007,0.095999956,-5.046001,0.87600017 Q-4.8720007,1.656,-4.482001,2.046 Q-4.092001,2.436,-3.4440007,2.436 Q-2.796001,2.436,-2.4060006,2.052 Q-2.0160007,1.6680001,-1.8360009,0.88199997 Q-1.6560006,0.095999956,-1.6560006,-1.0799999 Q-1.6560006,-2.256,-1.8360009,-3.0300002 Q-2.0160007,-3.804,-2.4060006,-4.194 Q-2.796001,-4.584,-3.4440007,-4.584 Q-4.092001,-4.584,-4.482001,-4.194 Q-4.8720007,-3.804,-5.046001,-3.0300002 Q-5.2200007,-2.256,-5.2200007,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 43.808 123.064285)"/> +<path d="M51.808,94.56056 L47.808,94.56056" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M-17.532001,-1.0799999 Q-17.532001,-0.036000013,-17.688,0.78 Q-17.844,1.5960001,-18.186,2.1660001 Q-18.528,2.736,-19.074001,3.036 Q-19.62,3.336,-20.388,3.336 Q-21.348,3.336,-21.978,2.808 Q-22.608,2.2800002,-22.914001,1.2900001 Q-23.220001,0.29999995,-23.220001,-1.0799999 Q-23.220001,-2.4720001,-22.938,-3.4559999 Q-22.656,-4.44,-22.032001,-4.9620004 Q-21.408,-5.4839997,-20.388,-5.4839997 Q-19.428001,-5.4839997,-18.792,-4.9620004 Q-18.156,-4.44,-17.844,-3.4559999 Q-17.532001,-2.4720001,-17.532001,-1.0799999 z M-22.164001,-1.0799999 Q-22.164001,0.095999956,-21.99,0.87600017 Q-21.816,1.656,-21.426,2.046 Q-21.036001,2.436,-20.388,2.436 Q-19.740002,2.436,-19.35,2.052 Q-18.960001,1.6680001,-18.78,0.88199997 Q-18.6,0.095999956,-18.6,-1.0799999 Q-18.6,-2.256,-18.78,-3.0300002 Q-18.960001,-3.804,-19.35,-4.194 Q-19.740002,-4.584,-20.388,-4.584 Q-21.036001,-4.584,-21.426,-4.194 Q-21.816,-3.804,-21.99,-3.0300002 Q-22.164001,-2.256,-22.164001,-1.0799999 z M-16.08,2.568 Q-16.08,2.124,-15.864,1.9440001 Q-15.648001,1.764,-15.348001,1.764 Q-15.036,1.764,-14.814,1.9440001 Q-14.592,2.124,-14.592,2.568 Q-14.592,3,-14.814,3.1920002 Q-15.036,3.384,-15.348001,3.384 Q-15.648001,3.384,-15.864,3.1920002 Q-16.08,3,-16.08,2.568 z M-12.096001,3.216 L-8.58,-4.392 L-13.200001,-4.392 L-13.200001,-5.3519998 L-7.4520006,-5.3519998 L-7.4520006,-4.536 L-10.932001,3.216 L-12.096001,3.216 z M-0.5880008,-1.0799999 Q-0.5880008,-0.036000013,-0.7440009,0.78 Q-0.9000006,1.5960001,-1.2420006,2.1660001 Q-1.5840006,2.736,-2.1300006,3.036 Q-2.6760006,3.336,-3.4440007,3.336 Q-4.4040008,3.336,-5.034001,2.808 Q-5.6640005,2.2800002,-5.9700007,1.2900001 Q-6.276001,0.29999995,-6.276001,-1.0799999 Q-6.276001,-2.4720001,-5.994001,-3.4559999 Q-5.712001,-4.44,-5.088001,-4.9620004 Q-4.4640007,-5.4839997,-3.4440007,-5.4839997 Q-2.4840007,-5.4839997,-1.8480005,-4.9620004 Q-1.2120008,-4.44,-0.9000006,-3.4559999 Q-0.5880008,-2.4720001,-0.5880008,-1.0799999 z M-5.2200007,-1.0799999 Q-5.2200007,0.095999956,-5.046001,0.87600017 Q-4.8720007,1.656,-4.482001,2.046 Q-4.092001,2.436,-3.4440007,2.436 Q-2.796001,2.436,-2.4060006,2.052 Q-2.0160007,1.6680001,-1.8360009,0.88199997 Q-1.6560006,0.095999956,-1.6560006,-1.0799999 Q-1.6560006,-2.256,-1.8360009,-3.0300002 Q-2.0160007,-3.804,-2.4060006,-4.194 Q-2.796001,-4.584,-3.4440007,-4.584 Q-4.092001,-4.584,-4.482001,-4.194 Q-4.8720007,-3.804,-5.046001,-3.0300002 Q-5.2200007,-2.256,-5.2200007,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 43.808 94.56056)"/> +<path d="M51.808,66.056854 L47.808,66.056854" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M-17.532001,-1.0799999 Q-17.532001,-0.036000013,-17.688,0.78 Q-17.844,1.5960001,-18.186,2.1660001 Q-18.528,2.736,-19.074001,3.036 Q-19.62,3.336,-20.388,3.336 Q-21.348,3.336,-21.978,2.808 Q-22.608,2.2800002,-22.914001,1.2900001 Q-23.220001,0.29999995,-23.220001,-1.0799999 Q-23.220001,-2.4720001,-22.938,-3.4559999 Q-22.656,-4.44,-22.032001,-4.9620004 Q-21.408,-5.4839997,-20.388,-5.4839997 Q-19.428001,-5.4839997,-18.792,-4.9620004 Q-18.156,-4.44,-17.844,-3.4559999 Q-17.532001,-2.4720001,-17.532001,-1.0799999 z M-22.164001,-1.0799999 Q-22.164001,0.095999956,-21.99,0.87600017 Q-21.816,1.656,-21.426,2.046 Q-21.036001,2.436,-20.388,2.436 Q-19.740002,2.436,-19.35,2.052 Q-18.960001,1.6680001,-18.78,0.88199997 Q-18.6,0.095999956,-18.6,-1.0799999 Q-18.6,-2.256,-18.78,-3.0300002 Q-18.960001,-3.804,-19.35,-4.194 Q-19.740002,-4.584,-20.388,-4.584 Q-21.036001,-4.584,-21.426,-4.194 Q-21.816,-3.804,-21.99,-3.0300002 Q-22.164001,-2.256,-22.164001,-1.0799999 z M-16.08,2.568 Q-16.08,2.124,-15.864,1.9440001 Q-15.648001,1.764,-15.348001,1.764 Q-15.036,1.764,-14.814,1.9440001 Q-14.592,2.124,-14.592,2.568 Q-14.592,3,-14.814,3.1920002 Q-15.036,3.384,-15.348001,3.384 Q-15.648001,3.384,-15.864,3.1920002 Q-16.08,3,-16.08,2.568 z M-10.308001,-5.4719996 Q-9.552,-5.4719996,-8.976001,-5.2380004 Q-8.400001,-5.004,-8.070001,-4.548 Q-7.7400007,-4.092,-7.7400007,-3.42 Q-7.7400007,-2.9039998,-7.9620004,-2.52 Q-8.184,-2.1360002,-8.556001,-1.842 Q-8.928,-1.5479999,-9.372001,-1.3200002 Q-8.844001,-1.0679998,-8.412001,-0.75 Q-7.9800005,-0.43199992,-7.7220006,-0.0119998455 Q-7.4640007,0.408,-7.4640007,0.99600005 Q-7.4640007,1.7160001,-7.8120008,2.2380002 Q-8.160001,2.76,-8.790001,3.048 Q-9.42,3.336,-10.272,3.336 Q-11.196001,3.336,-11.838,3.0600002 Q-12.4800005,2.7840002,-12.81,2.2740002 Q-13.14,1.764,-13.14,1.0320001 Q-13.14,0.444,-12.894001,0.012000084 Q-12.648001,-0.41999984,-12.240001,-0.7319999 Q-11.832001,-1.0440001,-11.364,-1.2599998 Q-11.784,-1.5,-12.126,-1.8059998 Q-12.468,-2.112,-12.666,-2.508 Q-12.864,-2.9039998,-12.864,-3.4320002 Q-12.864,-4.092,-12.528001,-4.542 Q-12.192,-4.992,-11.616001,-5.232 Q-11.040001,-5.4719996,-10.308001,-5.4719996 z M-12.108001,1.0440001 Q-12.108001,1.6680001,-11.6640005,2.082 Q-11.22,2.496,-10.2960005,2.496 Q-9.42,2.496,-8.958,2.082 Q-8.496,1.6680001,-8.496,1.0080001 Q-8.496,0.58800006,-8.718,0.26999998 Q-8.940001,-0.04799986,-9.342001,-0.29999995 Q-9.744,-0.55200005,-10.2960005,-0.75600004 L-10.488001,-0.82800007 Q-11.016001,-0.5999999,-11.376,-0.33599997 Q-11.736001,-0.07200003,-11.922001,0.26399994 Q-12.108001,0.60000014,-12.108001,1.0440001 z M-10.320001,-4.62 Q-10.9800005,-4.62,-11.406,-4.302 Q-11.832001,-3.9840002,-11.832001,-3.3839998 Q-11.832001,-2.94,-11.622001,-2.6399999 Q-11.412001,-2.3400002,-11.052,-2.13 Q-10.692,-1.9200001,-10.26,-1.7280002 Q-9.84,-1.908,-9.51,-2.124 Q-9.18,-2.3400002,-8.982,-2.646 Q-8.784,-2.9520001,-8.784,-3.3839998 Q-8.784,-3.9840002,-9.204,-4.302 Q-9.624001,-4.62,-10.320001,-4.62 z M-0.5880008,-1.0799999 Q-0.5880008,-0.036000013,-0.7440009,0.78 Q-0.9000006,1.5960001,-1.2420006,2.1660001 Q-1.5840006,2.736,-2.1300006,3.036 Q-2.6760006,3.336,-3.4440007,3.336 Q-4.4040008,3.336,-5.034001,2.808 Q-5.6640005,2.2800002,-5.9700007,1.2900001 Q-6.276001,0.29999995,-6.276001,-1.0799999 Q-6.276001,-2.4720001,-5.994001,-3.4559999 Q-5.712001,-4.44,-5.088001,-4.9620004 Q-4.4640007,-5.4839997,-3.4440007,-5.4839997 Q-2.4840007,-5.4839997,-1.8480005,-4.9620004 Q-1.2120008,-4.44,-0.9000006,-3.4559999 Q-0.5880008,-2.4720001,-0.5880008,-1.0799999 z M-5.2200007,-1.0799999 Q-5.2200007,0.095999956,-5.046001,0.87600017 Q-4.8720007,1.656,-4.482001,2.046 Q-4.092001,2.436,-3.4440007,2.436 Q-2.796001,2.436,-2.4060006,2.052 Q-2.0160007,1.6680001,-1.8360009,0.88199997 Q-1.6560006,0.095999956,-1.6560006,-1.0799999 Q-1.6560006,-2.256,-1.8360009,-3.0300002 Q-2.0160007,-3.804,-2.4060006,-4.194 Q-2.796001,-4.584,-3.4440007,-4.584 Q-4.092001,-4.584,-4.482001,-4.194 Q-4.8720007,-3.804,-5.046001,-3.0300002 Q-5.2200007,-2.256,-5.2200007,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 43.808 66.056854)"/> +<path d="M51.808,37.55313 L47.808,37.55313" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M-17.532001,-1.0799999 Q-17.532001,-0.036000013,-17.688,0.78 Q-17.844,1.5960001,-18.186,2.1660001 Q-18.528,2.736,-19.074001,3.036 Q-19.62,3.336,-20.388,3.336 Q-21.348,3.336,-21.978,2.808 Q-22.608,2.2800002,-22.914001,1.2900001 Q-23.220001,0.29999995,-23.220001,-1.0799999 Q-23.220001,-2.4720001,-22.938,-3.4559999 Q-22.656,-4.44,-22.032001,-4.9620004 Q-21.408,-5.4839997,-20.388,-5.4839997 Q-19.428001,-5.4839997,-18.792,-4.9620004 Q-18.156,-4.44,-17.844,-3.4559999 Q-17.532001,-2.4720001,-17.532001,-1.0799999 z M-22.164001,-1.0799999 Q-22.164001,0.095999956,-21.99,0.87600017 Q-21.816,1.656,-21.426,2.046 Q-21.036001,2.436,-20.388,2.436 Q-19.740002,2.436,-19.35,2.052 Q-18.960001,1.6680001,-18.78,0.88199997 Q-18.6,0.095999956,-18.6,-1.0799999 Q-18.6,-2.256,-18.78,-3.0300002 Q-18.960001,-3.804,-19.35,-4.194 Q-19.740002,-4.584,-20.388,-4.584 Q-21.036001,-4.584,-21.426,-4.194 Q-21.816,-3.804,-21.99,-3.0300002 Q-22.164001,-2.256,-22.164001,-1.0799999 z M-16.08,2.568 Q-16.08,2.124,-15.864,1.9440001 Q-15.648001,1.764,-15.348001,1.764 Q-15.036,1.764,-14.814,1.9440001 Q-14.592,2.124,-14.592,2.568 Q-14.592,3,-14.814,3.1920002 Q-15.036,3.384,-15.348001,3.384 Q-15.648001,3.384,-15.864,3.1920002 Q-16.08,3,-16.08,2.568 z M-7.4880004,-1.6919999 Q-7.4880004,-0.96000004,-7.5900006,-0.23399997 Q-7.6920004,0.4920001,-7.9440007,1.1340001 Q-8.196001,1.776,-8.640001,2.2740002 Q-9.084001,2.772,-9.768001,3.0540001 Q-10.452001,3.336,-11.424001,3.336 Q-11.6640005,3.336,-11.982,3.306 Q-12.300001,3.276,-12.504001,3.216 L-12.504001,2.316 Q-12.288,2.388,-12.000001,2.43 Q-11.712001,2.4720001,-11.448001,2.4720001 Q-10.608001,2.4720001,-10.062,2.196 Q-9.516001,1.9200001,-9.192,1.4460001 Q-8.868,0.9720001,-8.724001,0.342 Q-8.58,-0.28799987,-8.556001,-0.9839997 L-8.628,-0.9839997 Q-8.808001,-0.70799994,-9.084001,-0.48000002 Q-9.360001,-0.25199986,-9.750001,-0.119999886 Q-10.14,0.012000084,-10.668001,0.012000084 Q-11.400001,0.012000084,-11.958,-0.2939999 Q-12.516001,-0.5999999,-12.8220005,-1.1760001 Q-13.128,-1.7519999,-13.128,-2.58 Q-13.128,-3.48,-12.786,-4.128 Q-12.444,-4.776,-11.832001,-5.124 Q-11.22,-5.4719996,-10.392,-5.4719996 Q-9.780001,-5.4719996,-9.252001,-5.2380004 Q-8.724001,-5.004,-8.328001,-4.536 Q-7.9320006,-4.068,-7.7100005,-3.3600001 Q-7.4880004,-2.652,-7.4880004,-1.6919999 z M-10.392,-4.584 Q-11.136001,-4.584,-11.610001,-4.092 Q-12.084001,-3.6,-12.084001,-2.592 Q-12.084001,-1.7639999,-11.682001,-1.29 Q-11.280001,-0.816,-10.440001,-0.816 Q-9.864,-0.816,-9.444,-1.0500002 Q-9.024,-1.2839999,-8.790001,-1.644 Q-8.556001,-2.0040002,-8.556001,-2.388 Q-8.556001,-2.7719998,-8.67,-3.1620002 Q-8.784,-3.552,-9.012001,-3.876 Q-9.240001,-4.2,-9.588001,-4.392 Q-9.936001,-4.584,-10.392,-4.584 z M-0.5880008,-1.0799999 Q-0.5880008,-0.036000013,-0.7440009,0.78 Q-0.9000006,1.5960001,-1.2420006,2.1660001 Q-1.5840006,2.736,-2.1300006,3.036 Q-2.6760006,3.336,-3.4440007,3.336 Q-4.4040008,3.336,-5.034001,2.808 Q-5.6640005,2.2800002,-5.9700007,1.2900001 Q-6.276001,0.29999995,-6.276001,-1.0799999 Q-6.276001,-2.4720001,-5.994001,-3.4559999 Q-5.712001,-4.44,-5.088001,-4.9620004 Q-4.4640007,-5.4839997,-3.4440007,-5.4839997 Q-2.4840007,-5.4839997,-1.8480005,-4.9620004 Q-1.2120008,-4.44,-0.9000006,-3.4559999 Q-0.5880008,-2.4720001,-0.5880008,-1.0799999 z M-5.2200007,-1.0799999 Q-5.2200007,0.095999956,-5.046001,0.87600017 Q-4.8720007,1.656,-4.482001,2.046 Q-4.092001,2.436,-3.4440007,2.436 Q-2.796001,2.436,-2.4060006,2.052 Q-2.0160007,1.6680001,-1.8360009,0.88199997 Q-1.6560006,0.095999956,-1.6560006,-1.0799999 Q-1.6560006,-2.256,-1.8360009,-3.0300002 Q-2.0160007,-3.804,-2.4060006,-4.194 Q-2.796001,-4.584,-3.4440007,-4.584 Q-4.092001,-4.584,-4.482001,-4.194 Q-4.8720007,-3.804,-5.046001,-3.0300002 Q-5.2200007,-2.256,-5.2200007,-1.0799999 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 43.808 37.55313)"/> +</svg> \ No newline at end of file diff --git a/tests/refs/colorbar/top.png b/tests/refs/colorbar/top.png new file mode 100644 index 0000000000000000000000000000000000000000..a6384fe6c575f3602a4c30bf8741ba05a33cf346 GIT binary patch literal 29112 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 literal 0 HcmV?d00001 diff --git a/tests/refs/colorbar/top.svg b/tests/refs/colorbar/top.svg new file mode 100644 index 0000000..62a4270 --- /dev/null +++ b/tests/refs/colorbar/top.svg @@ -0,0 +1,404 @@ +<svg height="300" viewBox="0 0 400 300" width="400" xmlns="http://www.w3.org/2000/svg"> +<rect fill="#ffffff" height="100%" width="100%"/> +<clipPath id="plotive-clip1"> +<rect height="203.656" width="360" x="20" y="76.344"/> +</clipPath> +<g clip-path="url(#plotive-clip1)"> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#54c16a" fill-opacity="0.7019608" stroke="#54c16a" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 228.47182 150.32951)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#3ba97e" fill-opacity="0.7019608" stroke="#3ba97e" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 214.8317 115.085754)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#8fd159" fill-opacity="0.7019608" stroke="#8fd159" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 242.92818 202.54053)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#440154" fill-opacity="0.7019608" stroke="#440154" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 201.02121 168.81943)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#35a282" fill-opacity="0.7019608" stroke="#35a282" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 40 162.14455)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#31778c" fill-opacity="0.7019608" stroke="#31778c" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 173.38101 96.343994)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#70cb5f" fill-opacity="0.7019608" stroke="#70cb5f" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 190.30307 231.69693)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#38638b" fill-opacity="0.7019608" stroke="#38638b" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 67.984604 200.27042)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#36698c" fill-opacity="0.7019608" stroke="#36698c" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 120.19727 155.73848)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#fde724" fill-opacity="0.7019608" stroke="#fde724" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 258.7989 146.87572)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#33a083" fill-opacity="0.7019608" stroke="#33a083" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 202.37831 158.2319)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#90d159" fill-opacity="0.7019608" stroke="#90d159" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 326.33936 121.03331)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#461c61" fill-opacity="0.7019608" stroke="#461c61" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 360 205.06403)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#61c961" fill-opacity="0.7019608" stroke="#61c961" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 46.978165 260)"/> +<path d="M0.5,0 Q0.49999997,0.20710677,0.35355338,0.35355338 Q0.20710677,0.49999997,0,0.5 Q-0.20710677,0.49999997,-0.35355338,0.35355338 Q-0.49999997,0.20710677,-0.5,0 Q-0.49999997,-0.20710677,-0.35355338,-0.35355338 Q-0.20710677,-0.49999997,0,-0.5 Q0.20710677,-0.49999997,0.35355338,-0.35355338 Q0.49999997,-0.20710677,0.5,0 z" fill="#279689" fill-opacity="0.7019608" stroke="#279689" stroke-width="0.23529412" transform="matrix(8.5 0 0 8.5 168.67339 108.35777)"/> +</g> +<rect fill="none" height="203.656" stroke="#000000" stroke-width="1" width="360" x="20" y="76.344"/> +<path d="M20,44.344 L20,64.344 L20.5,64.344 L20.5,44.344" fill="#440154" stroke="none"/> +<path d="M20.5,44.344 L20.5,64.344 L21.5,64.344 L21.5,44.344" fill="#440255" stroke="none"/> +<path d="M21.5,44.344 L21.5,64.344 L22.5,64.344 L22.5,44.344" fill="#440455" stroke="none"/> +<path d="M22.5,44.344 L22.5,64.344 L23.5,64.344 L23.5,44.344" fill="#440556" stroke="none"/> +<path d="M23.5,44.344 L23.5,64.344 L24.5,64.344 L24.5,44.344" fill="#440756" stroke="none"/> +<path d="M24.5,44.344 L24.5,64.344 L25.5,64.344 L25.5,44.344" fill="#450857" stroke="none"/> +<path d="M25.5,44.344 L25.5,64.344 L26.5,64.344 L26.5,44.344" fill="#450957" stroke="none"/> +<path d="M26.5,44.344 L26.5,64.344 L27.5,64.344 L27.5,44.344" fill="#450b58" stroke="none"/> +<path d="M27.5,44.344 L27.5,64.344 L28.5,64.344 L28.5,44.344" fill="#450c59" stroke="none"/> +<path d="M28.5,44.344 L28.5,64.344 L29.5,64.344 L29.5,44.344" fill="#450e59" stroke="none"/> +<path d="M29.5,44.344 L29.5,64.344 L30.5,64.344 L30.5,44.344" fill="#450f5a" stroke="none"/> +<path d="M30.5,44.344 L30.5,64.344 L31.5,64.344 L31.5,44.344" fill="#45105a" stroke="none"/> +<path d="M31.5,44.344 L31.5,64.344 L32.5,64.344 L32.5,44.344" fill="#45115b" stroke="none"/> +<path d="M32.5,44.344 L32.5,64.344 L33.5,64.344 L33.5,44.344" fill="#45135c" stroke="none"/> +<path d="M33.5,44.344 L33.5,64.344 L34.5,64.344 L34.5,44.344" fill="#45145c" stroke="none"/> +<path d="M34.5,44.344 L34.5,64.344 L35.5,64.344 L35.5,44.344" fill="#45155d" stroke="none"/> +<path d="M35.5,44.344 L35.5,64.344 L36.5,64.344 L36.5,44.344" fill="#45165d" stroke="none"/> +<path d="M36.5,44.344 L36.5,64.344 L37.5,64.344 L37.5,44.344" fill="#45175e" stroke="none"/> +<path d="M37.5,44.344 L37.5,64.344 L38.5,64.344 L38.5,44.344" fill="#46185e" stroke="none"/> +<path d="M38.5,44.344 L38.5,64.344 L39.5,64.344 L39.5,44.344" fill="#46195f" stroke="none"/> +<path d="M39.5,44.344 L39.5,64.344 L40.5,64.344 L40.5,44.344" fill="#461a60" stroke="none"/> +<path d="M40.5,44.344 L40.5,64.344 L41.5,64.344 L41.5,44.344" fill="#461b60" stroke="none"/> +<path d="M41.5,44.344 L41.5,64.344 L42.5,64.344 L42.5,44.344" fill="#461c61" stroke="none"/> +<path d="M42.5,44.344 L42.5,64.344 L43.5,64.344 L43.5,44.344" fill="#461d61" stroke="none"/> +<path d="M43.5,44.344 L43.5,64.344 L44.5,64.344 L44.5,44.344" fill="#461e62" stroke="none"/> +<path d="M44.5,44.344 L44.5,64.344 L45.5,64.344 L45.5,44.344" fill="#461f63" stroke="none"/> +<path d="M45.5,44.344 L45.5,64.344 L46.5,64.344 L46.5,44.344" fill="#461f63" stroke="none"/> +<path d="M46.5,44.344 L46.5,64.344 L47.5,64.344 L47.5,44.344" fill="#462064" stroke="none"/> +<path d="M47.5,44.344 L47.5,64.344 L48.5,64.344 L48.5,44.344" fill="#462164" stroke="none"/> +<path d="M48.5,44.344 L48.5,64.344 L49.5,64.344 L49.5,44.344" fill="#462265" stroke="none"/> +<path d="M49.5,44.344 L49.5,64.344 L50.5,64.344 L50.5,44.344" fill="#462366" stroke="none"/> +<path d="M50.5,44.344 L50.5,64.344 L51.5,64.344 L51.5,44.344" fill="#462466" stroke="none"/> +<path d="M51.5,44.344 L51.5,64.344 L52.5,64.344 L52.5,44.344" fill="#462567" stroke="none"/> +<path d="M52.5,44.344 L52.5,64.344 L53.5,64.344 L53.5,44.344" fill="#462567" stroke="none"/> +<path d="M53.5,44.344 L53.5,64.344 L54.5,64.344 L54.5,44.344" fill="#462668" stroke="none"/> +<path d="M54.5,44.344 L54.5,64.344 L55.5,64.344 L55.5,44.344" fill="#462769" stroke="none"/> +<path d="M55.5,44.344 L55.5,64.344 L56.5,64.344 L56.5,44.344" fill="#462869" stroke="none"/> +<path d="M56.5,44.344 L56.5,64.344 L57.5,64.344 L57.5,44.344" fill="#46296a" stroke="none"/> +<path d="M57.5,44.344 L57.5,64.344 L58.5,64.344 L58.5,44.344" fill="#462a6a" stroke="none"/> +<path d="M58.5,44.344 L58.5,64.344 L59.5,64.344 L59.5,44.344" fill="#462a6b" stroke="none"/> +<path d="M59.5,44.344 L59.5,64.344 L60.5,64.344 L60.5,44.344" fill="#462b6c" stroke="none"/> +<path d="M60.5,44.344 L60.5,64.344 L61.5,64.344 L61.5,44.344" fill="#462c6c" stroke="none"/> +<path d="M61.5,44.344 L61.5,64.344 L62.5,64.344 L62.5,44.344" fill="#452d6d" stroke="none"/> +<path d="M62.5,44.344 L62.5,64.344 L63.5,64.344 L63.5,44.344" fill="#452e6d" stroke="none"/> +<path d="M63.5,44.344 L63.5,64.344 L64.5,64.344 L64.5,44.344" fill="#452e6e" stroke="none"/> +<path d="M64.5,44.344 L64.5,64.344 L65.5,64.344 L65.5,44.344" fill="#452f6f" stroke="none"/> +<path d="M65.5,44.344 L65.5,64.344 L66.5,64.344 L66.5,44.344" fill="#45306f" stroke="none"/> +<path d="M66.5,44.344 L66.5,64.344 L67.5,64.344 L67.5,44.344" fill="#453170" stroke="none"/> +<path d="M67.5,44.344 L67.5,64.344 L68.5,64.344 L68.5,44.344" fill="#453270" stroke="none"/> +<path d="M68.5,44.344 L68.5,64.344 L69.5,64.344 L69.5,44.344" fill="#453271" stroke="none"/> +<path d="M69.5,44.344 L69.5,64.344 L70.5,64.344 L70.5,44.344" fill="#453372" stroke="none"/> +<path d="M70.5,44.344 L70.5,64.344 L71.5,64.344 L71.5,44.344" fill="#453472" stroke="none"/> +<path d="M71.5,44.344 L71.5,64.344 L72.5,64.344 L72.5,44.344" fill="#453573" stroke="none"/> +<path d="M72.5,44.344 L72.5,64.344 L73.5,64.344 L73.5,44.344" fill="#443573" stroke="none"/> +<path d="M73.5,44.344 L73.5,64.344 L74.5,64.344 L74.5,44.344" fill="#443674" stroke="none"/> +<path d="M74.5,44.344 L74.5,64.344 L75.5,64.344 L75.5,44.344" fill="#443775" stroke="none"/> +<path d="M75.5,44.344 L75.5,64.344 L76.5,64.344 L76.5,44.344" fill="#443875" stroke="none"/> +<path d="M76.5,44.344 L76.5,64.344 L77.5,64.344 L77.5,44.344" fill="#443876" stroke="none"/> +<path d="M77.5,44.344 L77.5,64.344 L78.5,64.344 L78.5,44.344" fill="#443976" stroke="none"/> +<path d="M78.5,44.344 L78.5,64.344 L79.5,64.344 L79.5,44.344" fill="#443a77" stroke="none"/> +<path d="M79.5,44.344 L79.5,64.344 L80.5,64.344 L80.5,44.344" fill="#433b78" stroke="none"/> +<path d="M80.5,44.344 L80.5,64.344 L81.5,64.344 L81.5,44.344" fill="#433b78" stroke="none"/> +<path d="M81.5,44.344 L81.5,64.344 L82.5,64.344 L82.5,44.344" fill="#433c79" stroke="none"/> +<path d="M82.5,44.344 L82.5,64.344 L83.5,64.344 L83.5,44.344" fill="#433d79" stroke="none"/> +<path d="M83.5,44.344 L83.5,64.344 L84.5,64.344 L84.5,44.344" fill="#433e7a" stroke="none"/> +<path d="M84.5,44.344 L84.5,64.344 L85.5,64.344 L85.5,44.344" fill="#433f7b" stroke="none"/> +<path d="M85.5,44.344 L85.5,64.344 L86.5,64.344 L86.5,44.344" fill="#423f7b" stroke="none"/> +<path d="M86.5,44.344 L86.5,64.344 L87.5,64.344 L87.5,44.344" fill="#42407c" stroke="none"/> +<path d="M87.5,44.344 L87.5,64.344 L88.5,64.344 L88.5,44.344" fill="#42417c" stroke="none"/> +<path d="M88.5,44.344 L88.5,64.344 L89.5,64.344 L89.5,44.344" fill="#42417d" stroke="none"/> +<path d="M89.5,44.344 L89.5,64.344 L90.5,64.344 L90.5,44.344" fill="#41427e" stroke="none"/> +<path d="M90.5,44.344 L90.5,64.344 L91.5,64.344 L91.5,44.344" fill="#41437e" stroke="none"/> +<path d="M91.5,44.344 L91.5,64.344 L92.5,64.344 L92.5,44.344" fill="#41447f" stroke="none"/> +<path d="M92.5,44.344 L92.5,64.344 L93.5,64.344 L93.5,44.344" fill="#414480" stroke="none"/> +<path d="M93.5,44.344 L93.5,64.344 L94.5,64.344 L94.5,44.344" fill="#404580" stroke="none"/> +<path d="M94.5,44.344 L94.5,64.344 L95.5,64.344 L95.5,44.344" fill="#404681" stroke="none"/> +<path d="M95.5,44.344 L95.5,64.344 L96.5,64.344 L96.5,44.344" fill="#404781" stroke="none"/> +<path d="M96.5,44.344 L96.5,64.344 L97.5,64.344 L97.5,44.344" fill="#404782" stroke="none"/> +<path d="M97.5,44.344 L97.5,64.344 L98.5,64.344 L98.5,44.344" fill="#3f4883" stroke="none"/> +<path d="M98.5,44.344 L98.5,64.344 L99.5,64.344 L99.5,44.344" fill="#3f4983" stroke="none"/> +<path d="M99.5,44.344 L99.5,64.344 L100.5,64.344 L100.5,44.344" fill="#3f4a84" stroke="none"/> +<path d="M100.5,44.344 L100.5,64.344 L101.5,64.344 L101.5,44.344" fill="#3e4a84" stroke="none"/> +<path d="M101.5,44.344 L101.5,64.344 L102.5,64.344 L102.5,44.344" fill="#3e4b85" stroke="none"/> +<path d="M102.5,44.344 L102.5,64.344 L103.5,64.344 L103.5,44.344" fill="#3e4c86" stroke="none"/> +<path d="M103.5,44.344 L103.5,64.344 L104.5,64.344 L104.5,44.344" fill="#3d4d86" stroke="none"/> +<path d="M104.5,44.344 L104.5,64.344 L105.5,64.344 L105.5,44.344" fill="#3d4d87" stroke="none"/> +<path d="M105.5,44.344 L105.5,64.344 L106.5,64.344 L106.5,44.344" fill="#3d4e88" stroke="none"/> +<path d="M106.5,44.344 L106.5,64.344 L107.5,64.344 L107.5,44.344" fill="#3c4f88" stroke="none"/> +<path d="M107.5,44.344 L107.5,64.344 L108.5,64.344 L108.5,44.344" fill="#3c5089" stroke="none"/> +<path d="M108.5,44.344 L108.5,64.344 L109.5,64.344 L109.5,44.344" fill="#3b5089" stroke="none"/> +<path d="M109.5,44.344 L109.5,64.344 L110.5,64.344 L110.5,44.344" fill="#3b518a" stroke="none"/> +<path d="M110.5,44.344 L110.5,64.344 L111.5,64.344 L111.5,44.344" fill="#3b528a" stroke="none"/> +<path d="M111.5,44.344 L111.5,64.344 L112.5,64.344 L112.5,44.344" fill="#3b528a" stroke="none"/> +<path d="M112.5,44.344 L112.5,64.344 L113.5,64.344 L113.5,44.344" fill="#3b538a" stroke="none"/> +<path d="M113.5,44.344 L113.5,64.344 L114.5,64.344 L114.5,44.344" fill="#3b548a" stroke="none"/> +<path d="M114.5,44.344 L114.5,64.344 L115.5,64.344 L115.5,44.344" fill="#3a558a" stroke="none"/> +<path d="M115.5,44.344 L115.5,64.344 L116.5,64.344 L116.5,44.344" fill="#3a558a" stroke="none"/> +<path d="M116.5,44.344 L116.5,64.344 L117.5,64.344 L117.5,44.344" fill="#3a568a" stroke="none"/> +<path d="M117.5,44.344 L117.5,64.344 L118.5,64.344 L118.5,44.344" fill="#3a578a" stroke="none"/> +<path d="M118.5,44.344 L118.5,64.344 L119.5,64.344 L119.5,44.344" fill="#3a578b" stroke="none"/> +<path d="M119.5,44.344 L119.5,64.344 L120.5,64.344 L120.5,44.344" fill="#3a588b" stroke="none"/> +<path d="M120.5,44.344 L120.5,64.344 L121.5,64.344 L121.5,44.344" fill="#3a598b" stroke="none"/> +<path d="M121.5,44.344 L121.5,64.344 L122.5,64.344 L122.5,44.344" fill="#3a5a8b" stroke="none"/> +<path d="M122.5,44.344 L122.5,64.344 L123.5,64.344 L123.5,44.344" fill="#3a5a8b" stroke="none"/> +<path d="M123.5,44.344 L123.5,64.344 L124.5,64.344 L124.5,44.344" fill="#395b8b" stroke="none"/> +<path d="M124.5,44.344 L124.5,64.344 L125.5,64.344 L125.5,44.344" fill="#395c8b" stroke="none"/> +<path d="M125.5,44.344 L125.5,64.344 L126.5,64.344 L126.5,44.344" fill="#395c8b" stroke="none"/> +<path d="M126.5,44.344 L126.5,64.344 L127.5,64.344 L127.5,44.344" fill="#395d8b" stroke="none"/> +<path d="M127.5,44.344 L127.5,64.344 L128.5,64.344 L128.5,44.344" fill="#395e8b" stroke="none"/> +<path d="M128.5,44.344 L128.5,64.344 L129.5,64.344 L129.5,44.344" fill="#395e8b" stroke="none"/> +<path d="M129.5,44.344 L129.5,64.344 L130.5,64.344 L130.5,44.344" fill="#395f8b" stroke="none"/> +<path d="M130.5,44.344 L130.5,64.344 L131.5,64.344 L131.5,44.344" fill="#38608b" stroke="none"/> +<path d="M131.5,44.344 L131.5,64.344 L132.5,64.344 L132.5,44.344" fill="#38618b" stroke="none"/> +<path d="M132.5,44.344 L132.5,64.344 L133.5,64.344 L133.5,44.344" fill="#38618b" stroke="none"/> +<path d="M133.5,44.344 L133.5,64.344 L134.5,64.344 L134.5,44.344" fill="#38628b" stroke="none"/> +<path d="M134.5,44.344 L134.5,64.344 L135.5,64.344 L135.5,44.344" fill="#38638b" stroke="none"/> +<path d="M135.5,44.344 L135.5,64.344 L136.5,64.344 L136.5,44.344" fill="#38638b" stroke="none"/> +<path d="M136.5,44.344 L136.5,64.344 L137.5,64.344 L137.5,44.344" fill="#37648b" stroke="none"/> +<path d="M137.5,44.344 L137.5,64.344 L138.5,64.344 L138.5,44.344" fill="#37658b" stroke="none"/> +<path d="M138.5,44.344 L138.5,64.344 L139.5,64.344 L139.5,44.344" fill="#37658c" stroke="none"/> +<path d="M139.5,44.344 L139.5,64.344 L140.5,64.344 L140.5,44.344" fill="#37668c" stroke="none"/> +<path d="M140.5,44.344 L140.5,64.344 L141.5,64.344 L141.5,44.344" fill="#37678c" stroke="none"/> +<path d="M141.5,44.344 L141.5,64.344 L142.5,64.344 L142.5,44.344" fill="#36688c" stroke="none"/> +<path d="M142.5,44.344 L142.5,64.344 L143.5,64.344 L143.5,44.344" fill="#36688c" stroke="none"/> +<path d="M143.5,44.344 L143.5,64.344 L144.5,64.344 L144.5,44.344" fill="#36698c" stroke="none"/> +<path d="M144.5,44.344 L144.5,64.344 L145.5,64.344 L145.5,44.344" fill="#366a8c" stroke="none"/> +<path d="M145.5,44.344 L145.5,64.344 L146.5,64.344 L146.5,44.344" fill="#366a8c" stroke="none"/> +<path d="M146.5,44.344 L146.5,64.344 L147.5,64.344 L147.5,44.344" fill="#356b8c" stroke="none"/> +<path d="M147.5,44.344 L147.5,64.344 L148.5,64.344 L148.5,44.344" fill="#356c8c" stroke="none"/> +<path d="M148.5,44.344 L148.5,64.344 L149.5,64.344 L149.5,44.344" fill="#356c8c" stroke="none"/> +<path d="M149.5,44.344 L149.5,64.344 L150.5,64.344 L150.5,44.344" fill="#356d8c" stroke="none"/> +<path d="M150.5,44.344 L150.5,64.344 L151.5,64.344 L151.5,44.344" fill="#346e8c" stroke="none"/> +<path d="M151.5,44.344 L151.5,64.344 L152.5,64.344 L152.5,44.344" fill="#346e8c" stroke="none"/> +<path d="M152.5,44.344 L152.5,64.344 L153.5,64.344 L153.5,44.344" fill="#346f8c" stroke="none"/> +<path d="M153.5,44.344 L153.5,64.344 L154.5,64.344 L154.5,44.344" fill="#34708c" stroke="none"/> +<path d="M154.5,44.344 L154.5,64.344 L155.5,64.344 L155.5,44.344" fill="#33708c" stroke="none"/> +<path d="M155.5,44.344 L155.5,64.344 L156.5,64.344 L156.5,44.344" fill="#33718c" stroke="none"/> +<path d="M156.5,44.344 L156.5,64.344 L157.5,64.344 L157.5,44.344" fill="#33728c" stroke="none"/> +<path d="M157.5,44.344 L157.5,64.344 L158.5,64.344 L158.5,44.344" fill="#33728c" stroke="none"/> +<path d="M158.5,44.344 L158.5,64.344 L159.5,64.344 L159.5,44.344" fill="#32738c" stroke="none"/> +<path d="M159.5,44.344 L159.5,64.344 L160.5,64.344 L160.5,44.344" fill="#32748c" stroke="none"/> +<path d="M160.5,44.344 L160.5,64.344 L161.5,64.344 L161.5,44.344" fill="#32758c" stroke="none"/> +<path d="M161.5,44.344 L161.5,64.344 L162.5,64.344 L162.5,44.344" fill="#31758c" stroke="none"/> +<path d="M162.5,44.344 L162.5,64.344 L163.5,64.344 L163.5,44.344" fill="#31768c" stroke="none"/> +<path d="M163.5,44.344 L163.5,64.344 L164.5,64.344 L164.5,44.344" fill="#31778c" stroke="none"/> +<path d="M164.5,44.344 L164.5,64.344 L165.5,64.344 L165.5,44.344" fill="#31778c" stroke="none"/> +<path d="M165.5,44.344 L165.5,64.344 L166.5,64.344 L166.5,44.344" fill="#30788c" stroke="none"/> +<path d="M166.5,44.344 L166.5,64.344 L167.5,64.344 L167.5,44.344" fill="#30798c" stroke="none"/> +<path d="M167.5,44.344 L167.5,64.344 L168.5,64.344 L168.5,44.344" fill="#30798c" stroke="none"/> +<path d="M168.5,44.344 L168.5,64.344 L169.5,64.344 L169.5,44.344" fill="#2f7a8c" stroke="none"/> +<path d="M169.5,44.344 L169.5,64.344 L170.5,64.344 L170.5,44.344" fill="#2f7b8c" stroke="none"/> +<path d="M170.5,44.344 L170.5,64.344 L171.5,64.344 L171.5,44.344" fill="#2f7b8c" stroke="none"/> +<path d="M171.5,44.344 L171.5,64.344 L172.5,64.344 L172.5,44.344" fill="#2e7c8c" stroke="none"/> +<path d="M172.5,44.344 L172.5,64.344 L173.5,64.344 L173.5,44.344" fill="#2e7d8c" stroke="none"/> +<path d="M173.5,44.344 L173.5,64.344 L174.5,64.344 L174.5,44.344" fill="#2d7d8c" stroke="none"/> +<path d="M174.5,44.344 L174.5,64.344 L175.5,64.344 L175.5,44.344" fill="#2d7e8c" stroke="none"/> +<path d="M175.5,44.344 L175.5,64.344 L176.5,64.344 L176.5,44.344" fill="#2d7f8c" stroke="none"/> +<path d="M176.5,44.344 L176.5,64.344 L177.5,64.344 L177.5,44.344" fill="#2c7f8c" stroke="none"/> +<path d="M177.5,44.344 L177.5,64.344 L178.5,64.344 L178.5,44.344" fill="#2c808c" stroke="none"/> +<path d="M178.5,44.344 L178.5,64.344 L179.5,64.344 L179.5,44.344" fill="#2b818c" stroke="none"/> +<path d="M179.5,44.344 L179.5,64.344 L180.5,64.344 L180.5,44.344" fill="#2b818c" stroke="none"/> +<path d="M180.5,44.344 L180.5,64.344 L181.5,64.344 L181.5,44.344" fill="#2b828c" stroke="none"/> +<path d="M181.5,44.344 L181.5,64.344 L182.5,64.344 L182.5,44.344" fill="#2a838c" stroke="none"/> +<path d="M182.5,44.344 L182.5,64.344 L183.5,64.344 L183.5,44.344" fill="#2a838c" stroke="none"/> +<path d="M183.5,44.344 L183.5,64.344 L184.5,64.344 L184.5,44.344" fill="#29848c" stroke="none"/> +<path d="M184.5,44.344 L184.5,64.344 L185.5,64.344 L185.5,44.344" fill="#29858c" stroke="none"/> +<path d="M185.5,44.344 L185.5,64.344 L186.5,64.344 L186.5,44.344" fill="#28868c" stroke="none"/> +<path d="M186.5,44.344 L186.5,64.344 L187.5,64.344 L187.5,44.344" fill="#28868c" stroke="none"/> +<path d="M187.5,44.344 L187.5,64.344 L188.5,64.344 L188.5,44.344" fill="#27878c" stroke="none"/> +<path d="M188.5,44.344 L188.5,64.344 L189.5,64.344 L189.5,44.344" fill="#27888c" stroke="none"/> +<path d="M189.5,44.344 L189.5,64.344 L190.5,64.344 L190.5,44.344" fill="#26888c" stroke="none"/> +<path d="M190.5,44.344 L190.5,64.344 L191.5,64.344 L191.5,44.344" fill="#26898c" stroke="none"/> +<path d="M191.5,44.344 L191.5,64.344 L192.5,64.344 L192.5,44.344" fill="#258a8c" stroke="none"/> +<path d="M192.5,44.344 L192.5,64.344 L193.5,64.344 L193.5,44.344" fill="#258a8c" stroke="none"/> +<path d="M193.5,44.344 L193.5,64.344 L194.5,64.344 L194.5,44.344" fill="#248b8c" stroke="none"/> +<path d="M194.5,44.344 L194.5,64.344 L195.5,64.344 L195.5,44.344" fill="#238c8c" stroke="none"/> +<path d="M195.5,44.344 L195.5,64.344 L196.5,64.344 L196.5,44.344" fill="#238c8c" stroke="none"/> +<path d="M196.5,44.344 L196.5,64.344 L197.5,64.344 L197.5,44.344" fill="#228d8c" stroke="none"/> +<path d="M197.5,44.344 L197.5,64.344 L198.5,64.344 L198.5,44.344" fill="#218e8c" stroke="none"/> +<path d="M198.5,44.344 L198.5,64.344 L199.5,64.344 L199.5,44.344" fill="#218e8c" stroke="none"/> +<path d="M199.5,44.344 L199.5,64.344 L200.5,64.344 L200.5,44.344" fill="#208f8c" stroke="none"/> +<path d="M200.5,44.344 L200.5,64.344 L201.5,64.344 L201.5,44.344" fill="#21908c" stroke="none"/> +<path d="M201.5,44.344 L201.5,64.344 L202.5,64.344 L202.5,44.344" fill="#21908b" stroke="none"/> +<path d="M202.5,44.344 L202.5,64.344 L203.5,64.344 L203.5,44.344" fill="#22918b" stroke="none"/> +<path d="M203.5,44.344 L203.5,64.344 L204.5,64.344 L204.5,44.344" fill="#23928b" stroke="none"/> +<path d="M204.5,44.344 L204.5,64.344 L205.5,64.344 L205.5,44.344" fill="#24928a" stroke="none"/> +<path d="M205.5,44.344 L205.5,64.344 L206.5,64.344 L206.5,44.344" fill="#24938a" stroke="none"/> +<path d="M206.5,44.344 L206.5,64.344 L207.5,64.344 L207.5,44.344" fill="#25948a" stroke="none"/> +<path d="M207.5,44.344 L207.5,64.344 L208.5,64.344 L208.5,44.344" fill="#26948a" stroke="none"/> +<path d="M208.5,44.344 L208.5,64.344 L209.5,64.344 L209.5,44.344" fill="#269589" stroke="none"/> +<path d="M209.5,44.344 L209.5,64.344 L210.5,64.344 L210.5,44.344" fill="#279589" stroke="none"/> +<path d="M210.5,44.344 L210.5,64.344 L211.5,64.344 L211.5,44.344" fill="#289689" stroke="none"/> +<path d="M211.5,44.344 L211.5,64.344 L212.5,64.344 L212.5,44.344" fill="#289788" stroke="none"/> +<path d="M212.5,44.344 L212.5,64.344 L213.5,64.344 L213.5,44.344" fill="#299788" stroke="none"/> +<path d="M213.5,44.344 L213.5,64.344 L214.5,64.344 L214.5,44.344" fill="#2a9888" stroke="none"/> +<path d="M214.5,44.344 L214.5,64.344 L215.5,64.344 L215.5,44.344" fill="#2b9987" stroke="none"/> +<path d="M215.5,44.344 L215.5,64.344 L216.5,64.344 L216.5,44.344" fill="#2b9987" stroke="none"/> +<path d="M216.5,44.344 L216.5,64.344 L217.5,64.344 L217.5,44.344" fill="#2c9a87" stroke="none"/> +<path d="M217.5,44.344 L217.5,64.344 L218.5,64.344 L218.5,44.344" fill="#2d9b86" stroke="none"/> +<path d="M218.5,44.344 L218.5,64.344 L219.5,64.344 L219.5,44.344" fill="#2d9b86" stroke="none"/> +<path d="M219.5,44.344 L219.5,64.344 L220.5,64.344 L220.5,44.344" fill="#2e9c86" stroke="none"/> +<path d="M220.5,44.344 L220.5,64.344 L221.5,64.344 L221.5,44.344" fill="#2f9c85" stroke="none"/> +<path d="M221.5,44.344 L221.5,64.344 L222.5,64.344 L222.5,44.344" fill="#2f9d85" stroke="none"/> +<path d="M222.5,44.344 L222.5,64.344 L223.5,64.344 L223.5,44.344" fill="#309e84" stroke="none"/> +<path d="M223.5,44.344 L223.5,64.344 L224.5,64.344 L224.5,44.344" fill="#319e84" stroke="none"/> +<path d="M224.5,44.344 L224.5,64.344 L225.5,64.344 L225.5,44.344" fill="#319f84" stroke="none"/> +<path d="M225.5,44.344 L225.5,64.344 L226.5,64.344 L226.5,44.344" fill="#32a083" stroke="none"/> +<path d="M226.5,44.344 L226.5,64.344 L227.5,64.344 L227.5,44.344" fill="#33a083" stroke="none"/> +<path d="M227.5,44.344 L227.5,64.344 L228.5,64.344 L228.5,44.344" fill="#33a183" stroke="none"/> +<path d="M228.5,44.344 L228.5,64.344 L229.5,64.344 L229.5,44.344" fill="#34a282" stroke="none"/> +<path d="M229.5,44.344 L229.5,64.344 L230.5,64.344 L230.5,44.344" fill="#35a282" stroke="none"/> +<path d="M230.5,44.344 L230.5,64.344 L231.5,64.344 L231.5,44.344" fill="#35a382" stroke="none"/> +<path d="M231.5,44.344 L231.5,64.344 L232.5,64.344 L232.5,44.344" fill="#36a381" stroke="none"/> +<path d="M232.5,44.344 L232.5,64.344 L233.5,64.344 L233.5,44.344" fill="#37a481" stroke="none"/> +<path d="M233.5,44.344 L233.5,64.344 L234.5,64.344 L234.5,44.344" fill="#37a580" stroke="none"/> +<path d="M234.5,44.344 L234.5,64.344 L235.5,64.344 L235.5,44.344" fill="#38a580" stroke="none"/> +<path d="M235.5,44.344 L235.5,64.344 L236.5,64.344 L236.5,44.344" fill="#39a680" stroke="none"/> +<path d="M236.5,44.344 L236.5,64.344 L237.5,64.344 L237.5,44.344" fill="#39a77f" stroke="none"/> +<path d="M237.5,44.344 L237.5,64.344 L238.5,64.344 L238.5,44.344" fill="#3aa77f" stroke="none"/> +<path d="M238.5,44.344 L238.5,64.344 L239.5,64.344 L239.5,44.344" fill="#3aa87e" stroke="none"/> +<path d="M239.5,44.344 L239.5,64.344 L240.5,64.344 L240.5,44.344" fill="#3ba97e" stroke="none"/> +<path d="M240.5,44.344 L240.5,64.344 L241.5,64.344 L241.5,44.344" fill="#3ca97d" stroke="none"/> +<path d="M241.5,44.344 L241.5,64.344 L242.5,64.344 L242.5,44.344" fill="#3caa7d" stroke="none"/> +<path d="M242.5,44.344 L242.5,64.344 L243.5,64.344 L243.5,44.344" fill="#3daa7d" stroke="none"/> +<path d="M243.5,44.344 L243.5,64.344 L244.5,64.344 L244.5,44.344" fill="#3eab7c" stroke="none"/> +<path d="M244.5,44.344 L244.5,64.344 L245.5,64.344 L245.5,44.344" fill="#3eac7c" stroke="none"/> +<path d="M245.5,44.344 L245.5,64.344 L246.5,64.344 L246.5,44.344" fill="#3fac7b" stroke="none"/> +<path d="M246.5,44.344 L246.5,64.344 L247.5,64.344 L247.5,44.344" fill="#40ad7b" stroke="none"/> +<path d="M247.5,44.344 L247.5,64.344 L248.5,64.344 L248.5,44.344" fill="#40ae7a" stroke="none"/> +<path d="M248.5,44.344 L248.5,64.344 L249.5,64.344 L249.5,44.344" fill="#41ae7a" stroke="none"/> +<path d="M249.5,44.344 L249.5,64.344 L250.5,64.344 L250.5,44.344" fill="#42af79" stroke="none"/> +<path d="M250.5,44.344 L250.5,64.344 L251.5,64.344 L251.5,44.344" fill="#42af79" stroke="none"/> +<path d="M251.5,44.344 L251.5,64.344 L252.5,64.344 L252.5,44.344" fill="#43b078" stroke="none"/> +<path d="M252.5,44.344 L252.5,64.344 L253.5,64.344 L253.5,44.344" fill="#43b178" stroke="none"/> +<path d="M253.5,44.344 L253.5,64.344 L254.5,64.344 L254.5,44.344" fill="#44b178" stroke="none"/> +<path d="M254.5,44.344 L254.5,64.344 L255.5,64.344 L255.5,44.344" fill="#45b277" stroke="none"/> +<path d="M255.5,44.344 L255.5,64.344 L256.5,64.344 L256.5,44.344" fill="#45b377" stroke="none"/> +<path d="M256.5,44.344 L256.5,64.344 L257.5,64.344 L257.5,44.344" fill="#46b376" stroke="none"/> +<path d="M257.5,44.344 L257.5,64.344 L258.5,64.344 L258.5,44.344" fill="#47b476" stroke="none"/> +<path d="M258.5,44.344 L258.5,64.344 L259.5,64.344 L259.5,44.344" fill="#47b575" stroke="none"/> +<path d="M259.5,44.344 L259.5,64.344 L260.5,64.344 L260.5,44.344" fill="#48b575" stroke="none"/> +<path d="M260.5,44.344 L260.5,64.344 L261.5,64.344 L261.5,44.344" fill="#49b674" stroke="none"/> +<path d="M261.5,44.344 L261.5,64.344 L262.5,64.344 L262.5,44.344" fill="#49b673" stroke="none"/> +<path d="M262.5,44.344 L262.5,64.344 L263.5,64.344 L263.5,44.344" fill="#4ab773" stroke="none"/> +<path d="M263.5,44.344 L263.5,64.344 L264.5,64.344 L264.5,44.344" fill="#4bb872" stroke="none"/> +<path d="M264.5,44.344 L264.5,64.344 L265.5,64.344 L265.5,44.344" fill="#4bb872" stroke="none"/> +<path d="M265.5,44.344 L265.5,64.344 L266.5,64.344 L266.5,44.344" fill="#4cb971" stroke="none"/> +<path d="M266.5,44.344 L266.5,64.344 L267.5,64.344 L267.5,44.344" fill="#4cba71" stroke="none"/> +<path d="M267.5,44.344 L267.5,64.344 L268.5,64.344 L268.5,44.344" fill="#4dba70" stroke="none"/> +<path d="M268.5,44.344 L268.5,64.344 L269.5,64.344 L269.5,44.344" fill="#4ebb70" stroke="none"/> +<path d="M269.5,44.344 L269.5,64.344 L270.5,64.344 L270.5,44.344" fill="#4ebb6f" stroke="none"/> +<path d="M270.5,44.344 L270.5,64.344 L271.5,64.344 L271.5,44.344" fill="#4fbc6e" stroke="none"/> +<path d="M271.5,44.344 L271.5,64.344 L272.5,64.344 L272.5,44.344" fill="#50bd6e" stroke="none"/> +<path d="M272.5,44.344 L272.5,64.344 L273.5,64.344 L273.5,44.344" fill="#50bd6d" stroke="none"/> +<path d="M273.5,44.344 L273.5,64.344 L274.5,64.344 L274.5,44.344" fill="#51be6d" stroke="none"/> +<path d="M274.5,44.344 L274.5,64.344 L275.5,64.344 L275.5,44.344" fill="#51bf6c" stroke="none"/> +<path d="M275.5,44.344 L275.5,64.344 L276.5,64.344 L276.5,44.344" fill="#52bf6b" stroke="none"/> +<path d="M276.5,44.344 L276.5,64.344 L277.5,64.344 L277.5,44.344" fill="#53c06b" stroke="none"/> +<path d="M277.5,44.344 L277.5,64.344 L278.5,64.344 L278.5,44.344" fill="#53c06a" stroke="none"/> +<path d="M278.5,44.344 L278.5,64.344 L279.5,64.344 L279.5,44.344" fill="#54c16a" stroke="none"/> +<path d="M279.5,44.344 L279.5,64.344 L280.5,64.344 L280.5,44.344" fill="#55c269" stroke="none"/> +<path d="M280.5,44.344 L280.5,64.344 L281.5,64.344 L281.5,44.344" fill="#55c268" stroke="none"/> +<path d="M281.5,44.344 L281.5,64.344 L282.5,64.344 L282.5,44.344" fill="#56c368" stroke="none"/> +<path d="M282.5,44.344 L282.5,64.344 L283.5,64.344 L283.5,44.344" fill="#57c467" stroke="none"/> +<path d="M283.5,44.344 L283.5,64.344 L284.5,64.344 L284.5,44.344" fill="#57c466" stroke="none"/> +<path d="M284.5,44.344 L284.5,64.344 L285.5,64.344 L285.5,44.344" fill="#58c566" stroke="none"/> +<path d="M285.5,44.344 L285.5,64.344 L286.5,64.344 L286.5,44.344" fill="#58c565" stroke="none"/> +<path d="M286.5,44.344 L286.5,64.344 L287.5,64.344 L287.5,44.344" fill="#59c664" stroke="none"/> +<path d="M287.5,44.344 L287.5,64.344 L288.5,64.344 L288.5,44.344" fill="#5ac763" stroke="none"/> +<path d="M288.5,44.344 L288.5,64.344 L289.5,64.344 L289.5,44.344" fill="#5ac763" stroke="none"/> +<path d="M289.5,44.344 L289.5,64.344 L290.5,64.344 L290.5,44.344" fill="#5bc862" stroke="none"/> +<path d="M290.5,44.344 L290.5,64.344 L291.5,64.344 L291.5,44.344" fill="#5ec862" stroke="none"/> +<path d="M291.5,44.344 L291.5,64.344 L292.5,64.344 L292.5,44.344" fill="#60c961" stroke="none"/> +<path d="M292.5,44.344 L292.5,64.344 L293.5,64.344 L293.5,44.344" fill="#63c961" stroke="none"/> +<path d="M293.5,44.344 L293.5,64.344 L294.5,64.344 L294.5,44.344" fill="#65ca61" stroke="none"/> +<path d="M294.5,44.344 L294.5,64.344 L295.5,64.344 L295.5,44.344" fill="#67ca60" stroke="none"/> +<path d="M295.5,44.344 L295.5,64.344 L296.5,64.344 L296.5,44.344" fill="#6aca60" stroke="none"/> +<path d="M296.5,44.344 L296.5,64.344 L297.5,64.344 L297.5,44.344" fill="#6ccb60" stroke="none"/> +<path d="M297.5,44.344 L297.5,64.344 L298.5,64.344 L298.5,44.344" fill="#6ecb5f" stroke="none"/> +<path d="M298.5,44.344 L298.5,64.344 L299.5,64.344 L299.5,44.344" fill="#70cb5f" stroke="none"/> +<path d="M299.5,44.344 L299.5,64.344 L300.5,64.344 L300.5,44.344" fill="#73cc5f" stroke="none"/> +<path d="M300.5,44.344 L300.5,64.344 L301.5,64.344 L301.5,44.344" fill="#75cc5e" stroke="none"/> +<path d="M301.5,44.344 L301.5,64.344 L302.5,64.344 L302.5,44.344" fill="#77cd5e" stroke="none"/> +<path d="M302.5,44.344 L302.5,64.344 L303.5,64.344 L303.5,44.344" fill="#79cd5e" stroke="none"/> +<path d="M303.5,44.344 L303.5,64.344 L304.5,64.344 L304.5,44.344" fill="#7bcd5d" stroke="none"/> +<path d="M304.5,44.344 L304.5,64.344 L305.5,64.344 L305.5,44.344" fill="#7dce5d" stroke="none"/> +<path d="M305.5,44.344 L305.5,64.344 L306.5,64.344 L306.5,44.344" fill="#7fce5c" stroke="none"/> +<path d="M306.5,44.344 L306.5,64.344 L307.5,64.344 L307.5,44.344" fill="#81cf5c" stroke="none"/> +<path d="M307.5,44.344 L307.5,64.344 L308.5,64.344 L308.5,44.344" fill="#83cf5c" stroke="none"/> +<path d="M308.5,44.344 L308.5,64.344 L309.5,64.344 L309.5,44.344" fill="#85cf5b" stroke="none"/> +<path d="M309.5,44.344 L309.5,64.344 L310.5,64.344 L310.5,44.344" fill="#87d05b" stroke="none"/> +<path d="M310.5,44.344 L310.5,64.344 L311.5,64.344 L311.5,44.344" fill="#89d05b" stroke="none"/> +<path d="M311.5,44.344 L311.5,64.344 L312.5,64.344 L312.5,44.344" fill="#8bd05a" stroke="none"/> +<path d="M312.5,44.344 L312.5,64.344 L313.5,64.344 L313.5,44.344" fill="#8dd15a" stroke="none"/> +<path d="M313.5,44.344 L313.5,64.344 L314.5,64.344 L314.5,44.344" fill="#8fd159" stroke="none"/> +<path d="M314.5,44.344 L314.5,64.344 L315.5,64.344 L315.5,44.344" fill="#91d159" stroke="none"/> +<path d="M315.5,44.344 L315.5,64.344 L316.5,64.344 L316.5,44.344" fill="#93d258" stroke="none"/> +<path d="M316.5,44.344 L316.5,64.344 L317.5,64.344 L317.5,44.344" fill="#95d258" stroke="none"/> +<path d="M317.5,44.344 L317.5,64.344 L318.5,64.344 L318.5,44.344" fill="#96d358" stroke="none"/> +<path d="M318.5,44.344 L318.5,64.344 L319.5,64.344 L319.5,44.344" fill="#98d357" stroke="none"/> +<path d="M319.5,44.344 L319.5,64.344 L320.5,64.344 L320.5,44.344" fill="#9ad357" stroke="none"/> +<path d="M320.5,44.344 L320.5,64.344 L321.5,64.344 L321.5,44.344" fill="#9cd456" stroke="none"/> +<path d="M321.5,44.344 L321.5,64.344 L322.5,64.344 L322.5,44.344" fill="#9ed456" stroke="none"/> +<path d="M322.5,44.344 L322.5,64.344 L323.5,64.344 L323.5,44.344" fill="#a0d455" stroke="none"/> +<path d="M323.5,44.344 L323.5,64.344 L324.5,64.344 L324.5,44.344" fill="#a1d555" stroke="none"/> +<path d="M324.5,44.344 L324.5,64.344 L325.5,64.344 L325.5,44.344" fill="#a3d554" stroke="none"/> +<path d="M325.5,44.344 L325.5,64.344 L326.5,64.344 L326.5,44.344" fill="#a5d554" stroke="none"/> +<path d="M326.5,44.344 L326.5,64.344 L327.5,64.344 L327.5,44.344" fill="#a7d653" stroke="none"/> +<path d="M327.5,44.344 L327.5,64.344 L328.5,64.344 L328.5,44.344" fill="#a8d653" stroke="none"/> +<path d="M328.5,44.344 L328.5,64.344 L329.5,64.344 L329.5,44.344" fill="#aad752" stroke="none"/> +<path d="M329.5,44.344 L329.5,64.344 L330.5,64.344 L330.5,44.344" fill="#acd752" stroke="none"/> +<path d="M330.5,44.344 L330.5,64.344 L331.5,64.344 L331.5,44.344" fill="#aed751" stroke="none"/> +<path d="M331.5,44.344 L331.5,64.344 L332.5,64.344 L332.5,44.344" fill="#afd851" stroke="none"/> +<path d="M332.5,44.344 L332.5,64.344 L333.5,64.344 L333.5,44.344" fill="#b1d850" stroke="none"/> +<path d="M333.5,44.344 L333.5,64.344 L334.5,64.344 L334.5,44.344" fill="#b3d84f" stroke="none"/> +<path d="M334.5,44.344 L334.5,64.344 L335.5,64.344 L335.5,44.344" fill="#b4d94f" stroke="none"/> +<path d="M335.5,44.344 L335.5,64.344 L336.5,64.344 L336.5,44.344" fill="#b6d94e" stroke="none"/> +<path d="M336.5,44.344 L336.5,64.344 L337.5,64.344 L337.5,44.344" fill="#b8d94e" stroke="none"/> +<path d="M337.5,44.344 L337.5,64.344 L338.5,64.344 L338.5,44.344" fill="#bada4d" stroke="none"/> +<path d="M338.5,44.344 L338.5,64.344 L339.5,64.344 L339.5,44.344" fill="#bbda4d" stroke="none"/> +<path d="M339.5,44.344 L339.5,64.344 L340.5,64.344 L340.5,44.344" fill="#bdda4c" stroke="none"/> +<path d="M340.5,44.344 L340.5,64.344 L341.5,64.344 L341.5,44.344" fill="#bfdb4b" stroke="none"/> +<path d="M341.5,44.344 L341.5,64.344 L342.5,64.344 L342.5,44.344" fill="#c0db4b" stroke="none"/> +<path d="M342.5,44.344 L342.5,64.344 L343.5,64.344 L343.5,44.344" fill="#c2db4a" stroke="none"/> +<path d="M343.5,44.344 L343.5,64.344 L344.5,64.344 L344.5,44.344" fill="#c4dc49" stroke="none"/> +<path d="M344.5,44.344 L344.5,64.344 L345.5,64.344 L345.5,44.344" fill="#c5dc49" stroke="none"/> +<path d="M345.5,44.344 L345.5,64.344 L346.5,64.344 L346.5,44.344" fill="#c7dc48" stroke="none"/> +<path d="M346.5,44.344 L346.5,64.344 L347.5,64.344 L347.5,44.344" fill="#c9dd47" stroke="none"/> +<path d="M347.5,44.344 L347.5,64.344 L348.5,64.344 L348.5,44.344" fill="#cadd47" stroke="none"/> +<path d="M348.5,44.344 L348.5,64.344 L349.5,64.344 L349.5,44.344" fill="#ccdd46" stroke="none"/> +<path d="M349.5,44.344 L349.5,64.344 L350.5,64.344 L350.5,44.344" fill="#cdde45" stroke="none"/> +<path d="M350.5,44.344 L350.5,64.344 L351.5,64.344 L351.5,44.344" fill="#cfde44" stroke="none"/> +<path d="M351.5,44.344 L351.5,64.344 L352.5,64.344 L352.5,44.344" fill="#d1de44" stroke="none"/> +<path d="M352.5,44.344 L352.5,64.344 L353.5,64.344 L353.5,44.344" fill="#d2df43" stroke="none"/> +<path d="M353.5,44.344 L353.5,64.344 L354.5,64.344 L354.5,44.344" fill="#d4df42" stroke="none"/> +<path d="M354.5,44.344 L354.5,64.344 L355.5,64.344 L355.5,44.344" fill="#d6df41" stroke="none"/> +<path d="M355.5,44.344 L355.5,64.344 L356.5,64.344 L356.5,44.344" fill="#d7e040" stroke="none"/> +<path d="M356.5,44.344 L356.5,64.344 L357.5,64.344 L357.5,44.344" fill="#d9e040" stroke="none"/> +<path d="M357.5,44.344 L357.5,64.344 L358.5,64.344 L358.5,44.344" fill="#dae03f" stroke="none"/> +<path d="M358.5,44.344 L358.5,64.344 L359.5,64.344 L359.5,44.344" fill="#dce13e" stroke="none"/> +<path d="M359.5,44.344 L359.5,64.344 L360.5,64.344 L360.5,44.344" fill="#dee13d" stroke="none"/> +<path d="M360.5,44.344 L360.5,64.344 L361.5,64.344 L361.5,44.344" fill="#dfe13c" stroke="none"/> +<path d="M361.5,44.344 L361.5,64.344 L362.5,64.344 L362.5,44.344" fill="#e1e13b" stroke="none"/> +<path d="M362.5,44.344 L362.5,64.344 L363.5,64.344 L363.5,44.344" fill="#e2e23a" stroke="none"/> +<path d="M363.5,44.344 L363.5,64.344 L364.5,64.344 L364.5,44.344" fill="#e4e239" stroke="none"/> +<path d="M364.5,44.344 L364.5,64.344 L365.5,64.344 L365.5,44.344" fill="#e6e238" stroke="none"/> +<path d="M365.5,44.344 L365.5,64.344 L366.5,64.344 L366.5,44.344" fill="#e7e337" stroke="none"/> +<path d="M366.5,44.344 L366.5,64.344 L367.5,64.344 L367.5,44.344" fill="#e9e336" stroke="none"/> +<path d="M367.5,44.344 L367.5,64.344 L368.5,64.344 L368.5,44.344" fill="#eae335" stroke="none"/> +<path d="M368.5,44.344 L368.5,64.344 L369.5,64.344 L369.5,44.344" fill="#ece434" stroke="none"/> +<path d="M369.5,44.344 L369.5,64.344 L370.5,64.344 L370.5,44.344" fill="#ede433" stroke="none"/> +<path d="M370.5,44.344 L370.5,64.344 L371.5,64.344 L371.5,44.344" fill="#efe431" stroke="none"/> +<path d="M371.5,44.344 L371.5,64.344 L372.5,64.344 L372.5,44.344" fill="#f1e530" stroke="none"/> +<path d="M372.5,44.344 L372.5,64.344 L373.5,64.344 L373.5,44.344" fill="#f2e52f" stroke="none"/> +<path d="M373.5,44.344 L373.5,64.344 L374.5,64.344 L374.5,44.344" fill="#f4e52d" stroke="none"/> +<path d="M374.5,44.344 L374.5,64.344 L375.5,64.344 L375.5,44.344" fill="#f5e62c" stroke="none"/> +<path d="M375.5,44.344 L375.5,64.344 L376.5,64.344 L376.5,44.344" fill="#f7e62b" stroke="none"/> +<path d="M376.5,44.344 L376.5,64.344 L377.5,64.344 L377.5,44.344" fill="#f8e629" stroke="none"/> +<path d="M377.5,44.344 L377.5,64.344 L378.5,64.344 L378.5,44.344" fill="#fae627" stroke="none"/> +<path d="M378.5,44.344 L378.5,64.344 L379.5,64.344 L379.5,44.344" fill="#fbe726" stroke="none"/> +<path d="M379.5,44.344 L379.5,64.344 L380,64.344 L380,44.344" fill="#fde724" stroke="none"/> +<path d="M20,44.344 L380,44.344 L380,64.344 L20,64.344 z" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M39.962124,44.344 L39.962124,40.344" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M-5.6280003,-7.8120003 Q-5.6280003,-6.768,-5.7840004,-5.952 Q-5.94,-5.136,-6.282,-4.566 Q-6.624,-3.996,-7.17,-3.696 Q-7.716,-3.396,-8.484,-3.396 Q-9.444,-3.396,-10.074,-3.924 Q-10.704,-4.452,-11.01,-5.442 Q-11.316,-6.432,-11.316,-7.8120003 Q-11.316,-9.204,-11.034,-10.188 Q-10.752001,-11.172,-10.128,-11.694 Q-9.504,-12.216,-8.484,-12.216 Q-7.524,-12.216,-6.888,-11.694 Q-6.2520003,-11.172,-5.94,-10.188 Q-5.6280003,-9.204,-5.6280003,-7.8120003 z M-10.26,-7.8120003 Q-10.26,-6.636,-10.086,-5.856 Q-9.912001,-5.076,-9.522,-4.686 Q-9.132,-4.296,-8.484,-4.296 Q-7.8360004,-4.296,-7.446,-4.6800003 Q-7.056,-5.064,-6.8760004,-5.8500004 Q-6.696,-6.636,-6.696,-7.8120003 Q-6.696,-8.988,-6.8760004,-9.762 Q-7.056,-10.536,-7.446,-10.926 Q-7.8360004,-11.316,-8.484,-11.316 Q-9.132,-11.316,-9.522,-10.926 Q-9.912001,-10.536,-10.086,-9.762 Q-10.26,-8.988,-10.26,-7.8120003 z M-4.1760006,-4.164 Q-4.1760006,-4.608,-3.9600005,-4.788 Q-3.7440004,-4.968,-3.4440005,-4.968 Q-3.1320004,-4.968,-2.9100003,-4.788 Q-2.6880004,-4.608,-2.6880004,-4.164 Q-2.6880004,-3.732,-2.9100003,-3.54 Q-3.1320004,-3.348,-3.4440005,-3.348 Q-3.7440004,-3.348,-3.9600005,-3.54 Q-4.1760006,-3.732,-4.1760006,-4.164 z M2.4359999,-3.516 L1.4039996,-3.516 L1.4039996,-9.504 Q1.4039996,-9.852,1.4099996,-10.092 Q1.4159997,-10.332,1.4279997,-10.542 Q1.4399996,-10.752,1.4519997,-10.9800005 Q1.2599998,-10.788,1.1039996,-10.656 Q0.9479997,-10.524,0.7079997,-10.32 L-0.20400035,-9.576 L-0.7560004,-10.284 L1.5599997,-12.084 L2.4359999,-12.084 L2.4359999,-3.516 z M11.316,-7.8120003 Q11.316,-6.768,11.16,-5.952 Q11.004,-5.136,10.662,-4.566 Q10.32,-3.996,9.774,-3.696 Q9.228,-3.396,8.459999,-3.396 Q7.4999995,-3.396,6.8699994,-3.924 Q6.24,-4.452,5.9339995,-5.442 Q5.6279993,-6.432,5.6279993,-7.8120003 Q5.6279993,-9.204,5.9099994,-10.188 Q6.1919994,-11.172,6.8159995,-11.694 Q7.4399996,-12.216,8.459999,-12.216 Q9.42,-12.216,10.056,-11.694 Q10.691999,-11.172,11.004,-10.188 Q11.316,-9.204,11.316,-7.8120003 z M6.6839995,-7.8120003 Q6.6839995,-6.636,6.8579993,-5.856 Q7.0319996,-5.076,7.4219995,-4.686 Q7.8119993,-4.296,8.459999,-4.296 Q9.108,-4.296,9.497999,-4.6800003 Q9.888,-5.064,10.067999,-5.8500004 Q10.247999,-6.636,10.247999,-7.8120003 Q10.247999,-8.988,10.067999,-9.762 Q9.888,-10.536,9.497999,-10.926 Q9.108,-11.316,8.459999,-11.316 Q7.8119993,-11.316,7.4219995,-10.926 Q7.0319996,-10.536,6.8579993,-9.762 Q6.6839995,-8.988,6.6839995,-7.8120003 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 39.962124 36.344)"/> +<path d="M79.42882,44.344 L79.42882,40.344" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M-5.6280003,-7.8120003 Q-5.6280003,-6.768,-5.7840004,-5.952 Q-5.94,-5.136,-6.282,-4.566 Q-6.624,-3.996,-7.17,-3.696 Q-7.716,-3.396,-8.484,-3.396 Q-9.444,-3.396,-10.074,-3.924 Q-10.704,-4.452,-11.01,-5.442 Q-11.316,-6.432,-11.316,-7.8120003 Q-11.316,-9.204,-11.034,-10.188 Q-10.752001,-11.172,-10.128,-11.694 Q-9.504,-12.216,-8.484,-12.216 Q-7.524,-12.216,-6.888,-11.694 Q-6.2520003,-11.172,-5.94,-10.188 Q-5.6280003,-9.204,-5.6280003,-7.8120003 z M-10.26,-7.8120003 Q-10.26,-6.636,-10.086,-5.856 Q-9.912001,-5.076,-9.522,-4.686 Q-9.132,-4.296,-8.484,-4.296 Q-7.8360004,-4.296,-7.446,-4.6800003 Q-7.056,-5.064,-6.8760004,-5.8500004 Q-6.696,-6.636,-6.696,-7.8120003 Q-6.696,-8.988,-6.8760004,-9.762 Q-7.056,-10.536,-7.446,-10.926 Q-7.8360004,-11.316,-8.484,-11.316 Q-9.132,-11.316,-9.522,-10.926 Q-9.912001,-10.536,-10.086,-9.762 Q-10.26,-8.988,-10.26,-7.8120003 z M-4.1760006,-4.164 Q-4.1760006,-4.608,-3.9600005,-4.788 Q-3.7440004,-4.968,-3.4440005,-4.968 Q-3.1320004,-4.968,-2.9100003,-4.788 Q-2.6880004,-4.608,-2.6880004,-4.164 Q-2.6880004,-3.732,-2.9100003,-3.54 Q-3.1320004,-3.348,-3.4440005,-3.348 Q-3.7440004,-3.348,-3.9600005,-3.54 Q-4.1760006,-3.732,-4.1760006,-4.164 z M4.416,-3.516 L-1.2480004,-3.516 L-1.2480004,-4.392 L0.9959996,-6.66 Q1.6439996,-7.308,2.0879996,-7.8120003 Q2.5319996,-8.316,2.7599998,-8.802 Q2.988,-9.288,2.988,-9.864 Q2.988,-10.5720005,2.5679998,-10.938 Q2.1479998,-11.304,1.4759996,-11.304 Q0.85199976,-11.304,0.37799954,-11.088 Q-0.096000314,-10.872,-0.5880003,-10.488 L-1.1520004,-11.196 Q-0.81600034,-11.484,-0.4140004,-11.712 Q-0.012000322,-11.94,0.46199965,-12.072 Q0.93599963,-12.2039995,1.4759996,-12.2039995 Q2.2799997,-12.2039995,2.8559995,-11.9279995 Q3.4319997,-11.651999,3.7499995,-11.142 Q4.068,-10.632,4.068,-9.924 Q4.068,-9.252,3.7919998,-8.6640005 Q3.5159998,-8.076,3.0239997,-7.506 Q2.5319996,-6.936,1.8719997,-6.288 L0.083999634,-4.524 L0.083999634,-4.476 L4.416,-4.476 L4.416,-3.516 z M11.316,-7.8120003 Q11.316,-6.768,11.16,-5.952 Q11.004,-5.136,10.662,-4.566 Q10.32,-3.996,9.774,-3.696 Q9.228,-3.396,8.459999,-3.396 Q7.4999995,-3.396,6.8699994,-3.924 Q6.24,-4.452,5.9339995,-5.442 Q5.6279993,-6.432,5.6279993,-7.8120003 Q5.6279993,-9.204,5.9099994,-10.188 Q6.1919994,-11.172,6.8159995,-11.694 Q7.4399996,-12.216,8.459999,-12.216 Q9.42,-12.216,10.056,-11.694 Q10.691999,-11.172,11.004,-10.188 Q11.316,-9.204,11.316,-7.8120003 z M6.6839995,-7.8120003 Q6.6839995,-6.636,6.8579993,-5.856 Q7.0319996,-5.076,7.4219995,-4.686 Q7.8119993,-4.296,8.459999,-4.296 Q9.108,-4.296,9.497999,-4.6800003 Q9.888,-5.064,10.067999,-5.8500004 Q10.247999,-6.636,10.247999,-7.8120003 Q10.247999,-8.988,10.067999,-9.762 Q9.888,-10.536,9.497999,-10.926 Q9.108,-11.316,8.459999,-11.316 Q7.8119993,-11.316,7.4219995,-10.926 Q7.0319996,-10.536,6.8579993,-9.762 Q6.6839995,-8.988,6.6839995,-7.8120003 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 79.42882 36.344)"/> +<path d="M118.895515,44.344 L118.895515,40.344" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M-5.6280003,-7.8120003 Q-5.6280003,-6.768,-5.7840004,-5.952 Q-5.94,-5.136,-6.282,-4.566 Q-6.624,-3.996,-7.17,-3.696 Q-7.716,-3.396,-8.484,-3.396 Q-9.444,-3.396,-10.074,-3.924 Q-10.704,-4.452,-11.01,-5.442 Q-11.316,-6.432,-11.316,-7.8120003 Q-11.316,-9.204,-11.034,-10.188 Q-10.752001,-11.172,-10.128,-11.694 Q-9.504,-12.216,-8.484,-12.216 Q-7.524,-12.216,-6.888,-11.694 Q-6.2520003,-11.172,-5.94,-10.188 Q-5.6280003,-9.204,-5.6280003,-7.8120003 z M-10.26,-7.8120003 Q-10.26,-6.636,-10.086,-5.856 Q-9.912001,-5.076,-9.522,-4.686 Q-9.132,-4.296,-8.484,-4.296 Q-7.8360004,-4.296,-7.446,-4.6800003 Q-7.056,-5.064,-6.8760004,-5.8500004 Q-6.696,-6.636,-6.696,-7.8120003 Q-6.696,-8.988,-6.8760004,-9.762 Q-7.056,-10.536,-7.446,-10.926 Q-7.8360004,-11.316,-8.484,-11.316 Q-9.132,-11.316,-9.522,-10.926 Q-9.912001,-10.536,-10.086,-9.762 Q-10.26,-8.988,-10.26,-7.8120003 z M-4.1760006,-4.164 Q-4.1760006,-4.608,-3.9600005,-4.788 Q-3.7440004,-4.968,-3.4440005,-4.968 Q-3.1320004,-4.968,-2.9100003,-4.788 Q-2.6880004,-4.608,-2.6880004,-4.164 Q-2.6880004,-3.732,-2.9100003,-3.54 Q-3.1320004,-3.348,-3.4440005,-3.348 Q-3.7440004,-3.348,-3.9600005,-3.54 Q-4.1760006,-3.732,-4.1760006,-4.164 z M4.0919995,-10.08 Q4.0919995,-9.504,3.876,-9.084 Q3.6599998,-8.6640005,3.258,-8.4 Q2.8559995,-8.136,2.3159995,-8.028 L2.3159995,-7.9800005 Q3.3479996,-7.8599997,3.8519998,-7.332 Q4.3559995,-6.804,4.3559995,-5.952 Q4.3559995,-5.208,4.008,-4.626 Q3.6599998,-4.044,2.9339995,-3.72 Q2.2079997,-3.396,1.0679996,-3.396 Q0.39599967,-3.396,-0.1800003,-3.4980001 Q-0.7560004,-3.6000001,-1.2840004,-3.864 L-1.2840004,-4.848 Q-0.7440003,-4.584,-0.12000036,-4.434 Q0.5039997,-4.284,1.0799997,-4.284 Q2.2319999,-4.284,2.7419996,-4.734 Q3.2519999,-5.184,3.2519999,-5.976 Q3.2519999,-6.516,2.9699998,-6.8459997 Q2.6879997,-7.176,2.1479998,-7.332 Q1.6079996,-7.488,0.85199976,-7.488 L0.023999691,-7.488 L0.023999691,-8.3880005 L0.8639996,-8.3880005 Q1.5719998,-8.3880005,2.0459998,-8.592 Q2.5199995,-8.7960005,2.7659998,-9.162 Q3.0119996,-9.528,3.0119996,-10.008 Q3.0119996,-10.632,2.5919995,-10.974 Q2.1719997,-11.316,1.4519997,-11.316 Q0.9959996,-11.316,0.6239996,-11.226 Q0.25199962,-11.136,-0.06600034,-10.974 Q-0.3840003,-10.812,-0.7080003,-10.596 L-1.2360003,-11.316 Q-0.7800003,-11.676,-0.102000356,-11.94 Q0.57599974,-12.2039995,1.4399996,-12.2039995 Q2.7839994,-12.2039995,3.4379997,-11.604 Q4.0919995,-11.004,4.0919995,-10.08 z M11.316,-7.8120003 Q11.316,-6.768,11.16,-5.952 Q11.004,-5.136,10.662,-4.566 Q10.32,-3.996,9.774,-3.696 Q9.228,-3.396,8.459999,-3.396 Q7.4999995,-3.396,6.8699994,-3.924 Q6.24,-4.452,5.9339995,-5.442 Q5.6279993,-6.432,5.6279993,-7.8120003 Q5.6279993,-9.204,5.9099994,-10.188 Q6.1919994,-11.172,6.8159995,-11.694 Q7.4399996,-12.216,8.459999,-12.216 Q9.42,-12.216,10.056,-11.694 Q10.691999,-11.172,11.004,-10.188 Q11.316,-9.204,11.316,-7.8120003 z M6.6839995,-7.8120003 Q6.6839995,-6.636,6.8579993,-5.856 Q7.0319996,-5.076,7.4219995,-4.686 Q7.8119993,-4.296,8.459999,-4.296 Q9.108,-4.296,9.497999,-4.6800003 Q9.888,-5.064,10.067999,-5.8500004 Q10.247999,-6.636,10.247999,-7.8120003 Q10.247999,-8.988,10.067999,-9.762 Q9.888,-10.536,9.497999,-10.926 Q9.108,-11.316,8.459999,-11.316 Q7.8119993,-11.316,7.4219995,-10.926 Q7.0319996,-10.536,6.8579993,-9.762 Q6.6839995,-8.988,6.6839995,-7.8120003 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 118.895515 36.344)"/> +<path d="M158.3622,44.344 L158.3622,40.344" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M-5.6280003,-7.8120003 Q-5.6280003,-6.768,-5.7840004,-5.952 Q-5.94,-5.136,-6.282,-4.566 Q-6.624,-3.996,-7.17,-3.696 Q-7.716,-3.396,-8.484,-3.396 Q-9.444,-3.396,-10.074,-3.924 Q-10.704,-4.452,-11.01,-5.442 Q-11.316,-6.432,-11.316,-7.8120003 Q-11.316,-9.204,-11.034,-10.188 Q-10.752001,-11.172,-10.128,-11.694 Q-9.504,-12.216,-8.484,-12.216 Q-7.524,-12.216,-6.888,-11.694 Q-6.2520003,-11.172,-5.94,-10.188 Q-5.6280003,-9.204,-5.6280003,-7.8120003 z M-10.26,-7.8120003 Q-10.26,-6.636,-10.086,-5.856 Q-9.912001,-5.076,-9.522,-4.686 Q-9.132,-4.296,-8.484,-4.296 Q-7.8360004,-4.296,-7.446,-4.6800003 Q-7.056,-5.064,-6.8760004,-5.8500004 Q-6.696,-6.636,-6.696,-7.8120003 Q-6.696,-8.988,-6.8760004,-9.762 Q-7.056,-10.536,-7.446,-10.926 Q-7.8360004,-11.316,-8.484,-11.316 Q-9.132,-11.316,-9.522,-10.926 Q-9.912001,-10.536,-10.086,-9.762 Q-10.26,-8.988,-10.26,-7.8120003 z M-4.1760006,-4.164 Q-4.1760006,-4.608,-3.9600005,-4.788 Q-3.7440004,-4.968,-3.4440005,-4.968 Q-3.1320004,-4.968,-2.9100003,-4.788 Q-2.6880004,-4.608,-2.6880004,-4.164 Q-2.6880004,-3.732,-2.9100003,-3.54 Q-3.1320004,-3.348,-3.4440005,-3.348 Q-3.7440004,-3.348,-3.9600005,-3.54 Q-4.1760006,-3.732,-4.1760006,-4.164 z M4.7999997,-5.46 L3.5519996,-5.46 L3.5519996,-3.516 L2.5319996,-3.516 L2.5319996,-5.46 L-1.5720004,-5.46 L-1.5720004,-6.36 L2.4599996,-12.132 L3.5519996,-12.132 L3.5519996,-6.408 L4.7999997,-6.408 L4.7999997,-5.46 z M2.5319996,-9.108 Q2.5319996,-9.42,2.5379996,-9.678 Q2.5439997,-9.936,2.5559998,-10.1640005 Q2.5679998,-10.392,2.574,-10.602 Q2.5799994,-10.812,2.5919995,-11.004 L2.5439997,-11.004 Q2.4479995,-10.776,2.304,-10.512 Q2.1599996,-10.248,2.0279996,-10.068 L-0.5400003,-6.408 L2.5319996,-6.408 L2.5319996,-9.108 z M11.316,-7.8120003 Q11.316,-6.768,11.16,-5.952 Q11.004,-5.136,10.662,-4.566 Q10.32,-3.996,9.774,-3.696 Q9.228,-3.396,8.459999,-3.396 Q7.4999995,-3.396,6.8699994,-3.924 Q6.24,-4.452,5.9339995,-5.442 Q5.6279993,-6.432,5.6279993,-7.8120003 Q5.6279993,-9.204,5.9099994,-10.188 Q6.1919994,-11.172,6.8159995,-11.694 Q7.4399996,-12.216,8.459999,-12.216 Q9.42,-12.216,10.056,-11.694 Q10.691999,-11.172,11.004,-10.188 Q11.316,-9.204,11.316,-7.8120003 z M6.6839995,-7.8120003 Q6.6839995,-6.636,6.8579993,-5.856 Q7.0319996,-5.076,7.4219995,-4.686 Q7.8119993,-4.296,8.459999,-4.296 Q9.108,-4.296,9.497999,-4.6800003 Q9.888,-5.064,10.067999,-5.8500004 Q10.247999,-6.636,10.247999,-7.8120003 Q10.247999,-8.988,10.067999,-9.762 Q9.888,-10.536,9.497999,-10.926 Q9.108,-11.316,8.459999,-11.316 Q7.8119993,-11.316,7.4219995,-10.926 Q7.0319996,-10.536,6.8579993,-9.762 Q6.6839995,-8.988,6.6839995,-7.8120003 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 158.3622 36.344)"/> +<path d="M197.8289,44.344 L197.8289,40.344" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M-5.6280003,-7.8120003 Q-5.6280003,-6.768,-5.7840004,-5.952 Q-5.94,-5.136,-6.282,-4.566 Q-6.624,-3.996,-7.17,-3.696 Q-7.716,-3.396,-8.484,-3.396 Q-9.444,-3.396,-10.074,-3.924 Q-10.704,-4.452,-11.01,-5.442 Q-11.316,-6.432,-11.316,-7.8120003 Q-11.316,-9.204,-11.034,-10.188 Q-10.752001,-11.172,-10.128,-11.694 Q-9.504,-12.216,-8.484,-12.216 Q-7.524,-12.216,-6.888,-11.694 Q-6.2520003,-11.172,-5.94,-10.188 Q-5.6280003,-9.204,-5.6280003,-7.8120003 z M-10.26,-7.8120003 Q-10.26,-6.636,-10.086,-5.856 Q-9.912001,-5.076,-9.522,-4.686 Q-9.132,-4.296,-8.484,-4.296 Q-7.8360004,-4.296,-7.446,-4.6800003 Q-7.056,-5.064,-6.8760004,-5.8500004 Q-6.696,-6.636,-6.696,-7.8120003 Q-6.696,-8.988,-6.8760004,-9.762 Q-7.056,-10.536,-7.446,-10.926 Q-7.8360004,-11.316,-8.484,-11.316 Q-9.132,-11.316,-9.522,-10.926 Q-9.912001,-10.536,-10.086,-9.762 Q-10.26,-8.988,-10.26,-7.8120003 z M-4.1760006,-4.164 Q-4.1760006,-4.608,-3.9600005,-4.788 Q-3.7440004,-4.968,-3.4440005,-4.968 Q-3.1320004,-4.968,-2.9100003,-4.788 Q-2.6880004,-4.608,-2.6880004,-4.164 Q-2.6880004,-3.732,-2.9100003,-3.54 Q-3.1320004,-3.348,-3.4440005,-3.348 Q-3.7440004,-3.348,-3.9600005,-3.54 Q-4.1760006,-3.732,-4.1760006,-4.164 z M1.4759996,-8.772 Q2.3519998,-8.772,2.9999995,-8.472 Q3.6479998,-8.172,4.002,-7.6140003 Q4.3559995,-7.0559998,4.3559995,-6.252 Q4.3559995,-5.3640003,3.9719996,-4.722 Q3.5879998,-4.08,2.8739996,-3.738 Q2.1599996,-3.396,1.1519997,-3.396 Q0.49199963,-3.396,-0.09000039,-3.516 Q-0.6720004,-3.6360002,-1.0680003,-3.864 L-1.0680003,-4.86 Q-0.6360004,-4.596,-0.018000364,-4.446 Q0.59999967,-4.296,1.1639996,-4.296 Q1.7999997,-4.296,2.2739997,-4.494 Q2.7479997,-4.692,3.0119996,-5.106 Q3.2759995,-5.52,3.2759995,-6.144 Q3.2759995,-6.984,2.7599998,-7.434 Q2.2439995,-7.884,1.1279998,-7.884 Q0.7919996,-7.884,0.35999966,-7.8240004 Q-0.072000384,-7.764,-0.33600032,-7.7040005 L-0.8640003,-8.04 L-0.5400003,-12.084 L3.7559996,-12.084 L3.7559996,-11.124001 L0.35999966,-11.124001 L0.15599966,-8.64 Q0.35999966,-8.676,0.7079997,-8.724 Q1.0559998,-8.772,1.4759996,-8.772 z M11.316,-7.8120003 Q11.316,-6.768,11.16,-5.952 Q11.004,-5.136,10.662,-4.566 Q10.32,-3.996,9.774,-3.696 Q9.228,-3.396,8.459999,-3.396 Q7.4999995,-3.396,6.8699994,-3.924 Q6.24,-4.452,5.9339995,-5.442 Q5.6279993,-6.432,5.6279993,-7.8120003 Q5.6279993,-9.204,5.9099994,-10.188 Q6.1919994,-11.172,6.8159995,-11.694 Q7.4399996,-12.216,8.459999,-12.216 Q9.42,-12.216,10.056,-11.694 Q10.691999,-11.172,11.004,-10.188 Q11.316,-9.204,11.316,-7.8120003 z M6.6839995,-7.8120003 Q6.6839995,-6.636,6.8579993,-5.856 Q7.0319996,-5.076,7.4219995,-4.686 Q7.8119993,-4.296,8.459999,-4.296 Q9.108,-4.296,9.497999,-4.6800003 Q9.888,-5.064,10.067999,-5.8500004 Q10.247999,-6.636,10.247999,-7.8120003 Q10.247999,-8.988,10.067999,-9.762 Q9.888,-10.536,9.497999,-10.926 Q9.108,-11.316,8.459999,-11.316 Q7.8119993,-11.316,7.4219995,-10.926 Q7.0319996,-10.536,6.8579993,-9.762 Q6.6839995,-8.988,6.6839995,-7.8120003 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 197.8289 36.344)"/> +<path d="M237.29561,44.344 L237.29561,40.344" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M-5.6280003,-7.8120003 Q-5.6280003,-6.768,-5.7840004,-5.952 Q-5.94,-5.136,-6.282,-4.566 Q-6.624,-3.996,-7.17,-3.696 Q-7.716,-3.396,-8.484,-3.396 Q-9.444,-3.396,-10.074,-3.924 Q-10.704,-4.452,-11.01,-5.442 Q-11.316,-6.432,-11.316,-7.8120003 Q-11.316,-9.204,-11.034,-10.188 Q-10.752001,-11.172,-10.128,-11.694 Q-9.504,-12.216,-8.484,-12.216 Q-7.524,-12.216,-6.888,-11.694 Q-6.2520003,-11.172,-5.94,-10.188 Q-5.6280003,-9.204,-5.6280003,-7.8120003 z M-10.26,-7.8120003 Q-10.26,-6.636,-10.086,-5.856 Q-9.912001,-5.076,-9.522,-4.686 Q-9.132,-4.296,-8.484,-4.296 Q-7.8360004,-4.296,-7.446,-4.6800003 Q-7.056,-5.064,-6.8760004,-5.8500004 Q-6.696,-6.636,-6.696,-7.8120003 Q-6.696,-8.988,-6.8760004,-9.762 Q-7.056,-10.536,-7.446,-10.926 Q-7.8360004,-11.316,-8.484,-11.316 Q-9.132,-11.316,-9.522,-10.926 Q-9.912001,-10.536,-10.086,-9.762 Q-10.26,-8.988,-10.26,-7.8120003 z M-4.1760006,-4.164 Q-4.1760006,-4.608,-3.9600005,-4.788 Q-3.7440004,-4.968,-3.4440005,-4.968 Q-3.1320004,-4.968,-2.9100003,-4.788 Q-2.6880004,-4.608,-2.6880004,-4.164 Q-2.6880004,-3.732,-2.9100003,-3.54 Q-3.1320004,-3.348,-3.4440005,-3.348 Q-3.7440004,-3.348,-3.9600005,-3.54 Q-4.1760006,-3.732,-4.1760006,-4.164 z M-1.1640003,-7.176 Q-1.1640003,-7.92,-1.0620003,-8.64 Q-0.96000034,-9.36,-0.7080003,-10.002 Q-0.45600033,-10.644,-0.012000322,-11.142 Q0.43199968,-11.639999,1.1099997,-11.922 Q1.7879996,-12.2039995,2.7599998,-12.2039995 Q3.0119996,-12.2039995,3.3179998,-12.18 Q3.6239996,-12.156,3.8159995,-12.096 L3.8159995,-11.196 Q3.6,-11.268,3.33,-11.304 Q3.0599995,-11.34,2.7839994,-11.34 Q1.9559996,-11.34,1.4039996,-11.064 Q0.85199976,-10.788,0.5339997,-10.308001 Q0.2159996,-9.828,0.07199967,-9.204 Q-0.072000384,-8.58,-0.1080004,-7.8719997 L-0.03600037,-7.8719997 Q0.1439997,-8.16,0.4199996,-8.3880005 Q0.6959996,-8.616,1.0859997,-8.748 Q1.4759996,-8.88,1.9919996,-8.88 Q2.7359996,-8.88,3.2939997,-8.574 Q3.8519998,-8.268,4.1639996,-7.686 Q4.476,-7.104,4.476,-6.276 Q4.476,-5.388,4.14,-4.74 Q3.804,-4.092,3.1979995,-3.744 Q2.5919995,-3.396,1.7519996,-3.396 Q1.1399996,-3.396,0.61199975,-3.624 Q0.083999634,-3.852,-0.31800032,-4.32 Q-0.7200004,-4.788,-0.9420003,-5.502 Q-1.1640003,-6.216,-1.1640003,-7.176 z M1.7399998,-4.284 Q2.4959998,-4.284,2.9639997,-4.77 Q3.4319997,-5.256,3.4319997,-6.276 Q3.4319997,-7.092,3.0179996,-7.5720005 Q2.6039996,-8.052,1.7759998,-8.052 Q1.2119997,-8.052,0.7919996,-7.818 Q0.37199974,-7.5839996,0.13799965,-7.224 Q-0.096000314,-6.8640003,-0.096000314,-6.48 Q-0.096000314,-6.084,0.017999649,-5.7 Q0.13199961,-5.316,0.3659997,-4.992 Q0.59999967,-4.668,0.9419997,-4.476 Q1.2839997,-4.284,1.7399998,-4.284 z M11.316,-7.8120003 Q11.316,-6.768,11.16,-5.952 Q11.004,-5.136,10.662,-4.566 Q10.32,-3.996,9.774,-3.696 Q9.228,-3.396,8.459999,-3.396 Q7.4999995,-3.396,6.8699994,-3.924 Q6.24,-4.452,5.9339995,-5.442 Q5.6279993,-6.432,5.6279993,-7.8120003 Q5.6279993,-9.204,5.9099994,-10.188 Q6.1919994,-11.172,6.8159995,-11.694 Q7.4399996,-12.216,8.459999,-12.216 Q9.42,-12.216,10.056,-11.694 Q10.691999,-11.172,11.004,-10.188 Q11.316,-9.204,11.316,-7.8120003 z M6.6839995,-7.8120003 Q6.6839995,-6.636,6.8579993,-5.856 Q7.0319996,-5.076,7.4219995,-4.686 Q7.8119993,-4.296,8.459999,-4.296 Q9.108,-4.296,9.497999,-4.6800003 Q9.888,-5.064,10.067999,-5.8500004 Q10.247999,-6.636,10.247999,-7.8120003 Q10.247999,-8.988,10.067999,-9.762 Q9.888,-10.536,9.497999,-10.926 Q9.108,-11.316,8.459999,-11.316 Q7.8119993,-11.316,7.4219995,-10.926 Q7.0319996,-10.536,6.8579993,-9.762 Q6.6839995,-8.988,6.6839995,-7.8120003 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 237.29561 36.344)"/> +<path d="M276.7623,44.344 L276.7623,40.344" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M-5.6280003,-7.8120003 Q-5.6280003,-6.768,-5.7840004,-5.952 Q-5.94,-5.136,-6.282,-4.566 Q-6.624,-3.996,-7.17,-3.696 Q-7.716,-3.396,-8.484,-3.396 Q-9.444,-3.396,-10.074,-3.924 Q-10.704,-4.452,-11.01,-5.442 Q-11.316,-6.432,-11.316,-7.8120003 Q-11.316,-9.204,-11.034,-10.188 Q-10.752001,-11.172,-10.128,-11.694 Q-9.504,-12.216,-8.484,-12.216 Q-7.524,-12.216,-6.888,-11.694 Q-6.2520003,-11.172,-5.94,-10.188 Q-5.6280003,-9.204,-5.6280003,-7.8120003 z M-10.26,-7.8120003 Q-10.26,-6.636,-10.086,-5.856 Q-9.912001,-5.076,-9.522,-4.686 Q-9.132,-4.296,-8.484,-4.296 Q-7.8360004,-4.296,-7.446,-4.6800003 Q-7.056,-5.064,-6.8760004,-5.8500004 Q-6.696,-6.636,-6.696,-7.8120003 Q-6.696,-8.988,-6.8760004,-9.762 Q-7.056,-10.536,-7.446,-10.926 Q-7.8360004,-11.316,-8.484,-11.316 Q-9.132,-11.316,-9.522,-10.926 Q-9.912001,-10.536,-10.086,-9.762 Q-10.26,-8.988,-10.26,-7.8120003 z M-4.1760006,-4.164 Q-4.1760006,-4.608,-3.9600005,-4.788 Q-3.7440004,-4.968,-3.4440005,-4.968 Q-3.1320004,-4.968,-2.9100003,-4.788 Q-2.6880004,-4.608,-2.6880004,-4.164 Q-2.6880004,-3.732,-2.9100003,-3.54 Q-3.1320004,-3.348,-3.4440005,-3.348 Q-3.7440004,-3.348,-3.9600005,-3.54 Q-4.1760006,-3.732,-4.1760006,-4.164 z M-0.19200039,-3.516 L3.324,-11.124001 L-1.2960004,-11.124001 L-1.2960004,-12.084 L4.4519997,-12.084 L4.4519997,-11.268 L0.97199965,-3.516 L-0.19200039,-3.516 z M11.316,-7.8120003 Q11.316,-6.768,11.16,-5.952 Q11.004,-5.136,10.662,-4.566 Q10.32,-3.996,9.774,-3.696 Q9.228,-3.396,8.459999,-3.396 Q7.4999995,-3.396,6.8699994,-3.924 Q6.24,-4.452,5.9339995,-5.442 Q5.6279993,-6.432,5.6279993,-7.8120003 Q5.6279993,-9.204,5.9099994,-10.188 Q6.1919994,-11.172,6.8159995,-11.694 Q7.4399996,-12.216,8.459999,-12.216 Q9.42,-12.216,10.056,-11.694 Q10.691999,-11.172,11.004,-10.188 Q11.316,-9.204,11.316,-7.8120003 z M6.6839995,-7.8120003 Q6.6839995,-6.636,6.8579993,-5.856 Q7.0319996,-5.076,7.4219995,-4.686 Q7.8119993,-4.296,8.459999,-4.296 Q9.108,-4.296,9.497999,-4.6800003 Q9.888,-5.064,10.067999,-5.8500004 Q10.247999,-6.636,10.247999,-7.8120003 Q10.247999,-8.988,10.067999,-9.762 Q9.888,-10.536,9.497999,-10.926 Q9.108,-11.316,8.459999,-11.316 Q7.8119993,-11.316,7.4219995,-10.926 Q7.0319996,-10.536,6.8579993,-9.762 Q6.6839995,-8.988,6.6839995,-7.8120003 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 276.7623 36.344)"/> +<path d="M316.22897,44.344 L316.22897,40.344" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M-5.6280003,-7.8120003 Q-5.6280003,-6.768,-5.7840004,-5.952 Q-5.94,-5.136,-6.282,-4.566 Q-6.624,-3.996,-7.17,-3.696 Q-7.716,-3.396,-8.484,-3.396 Q-9.444,-3.396,-10.074,-3.924 Q-10.704,-4.452,-11.01,-5.442 Q-11.316,-6.432,-11.316,-7.8120003 Q-11.316,-9.204,-11.034,-10.188 Q-10.752001,-11.172,-10.128,-11.694 Q-9.504,-12.216,-8.484,-12.216 Q-7.524,-12.216,-6.888,-11.694 Q-6.2520003,-11.172,-5.94,-10.188 Q-5.6280003,-9.204,-5.6280003,-7.8120003 z M-10.26,-7.8120003 Q-10.26,-6.636,-10.086,-5.856 Q-9.912001,-5.076,-9.522,-4.686 Q-9.132,-4.296,-8.484,-4.296 Q-7.8360004,-4.296,-7.446,-4.6800003 Q-7.056,-5.064,-6.8760004,-5.8500004 Q-6.696,-6.636,-6.696,-7.8120003 Q-6.696,-8.988,-6.8760004,-9.762 Q-7.056,-10.536,-7.446,-10.926 Q-7.8360004,-11.316,-8.484,-11.316 Q-9.132,-11.316,-9.522,-10.926 Q-9.912001,-10.536,-10.086,-9.762 Q-10.26,-8.988,-10.26,-7.8120003 z M-4.1760006,-4.164 Q-4.1760006,-4.608,-3.9600005,-4.788 Q-3.7440004,-4.968,-3.4440005,-4.968 Q-3.1320004,-4.968,-2.9100003,-4.788 Q-2.6880004,-4.608,-2.6880004,-4.164 Q-2.6880004,-3.732,-2.9100003,-3.54 Q-3.1320004,-3.348,-3.4440005,-3.348 Q-3.7440004,-3.348,-3.9600005,-3.54 Q-4.1760006,-3.732,-4.1760006,-4.164 z M1.5959997,-12.2039995 Q2.3519998,-12.2039995,2.9279995,-11.97 Q3.5039997,-11.736,3.8339996,-11.28 Q4.1639996,-10.824,4.1639996,-10.152 Q4.1639996,-9.636,3.942,-9.252 Q3.7199998,-8.868,3.3479996,-8.574 Q2.9759998,-8.28,2.5319996,-8.052 Q3.0599995,-7.8,3.4919996,-7.4820004 Q3.9239998,-7.164,4.1819997,-6.744 Q4.4399996,-6.3240004,4.4399996,-5.736 Q4.4399996,-5.016,4.0919995,-4.494 Q3.7439995,-3.9720001,3.1139998,-3.684 Q2.4839997,-3.396,1.6319997,-3.396 Q0.7079997,-3.396,0.06599963,-3.672 Q-0.57600033,-3.948,-0.9060004,-4.458 Q-1.2360003,-4.968,-1.2360003,-5.7 Q-1.2360003,-6.288,-0.99000037,-6.7200003 Q-0.7440003,-7.152,-0.33600032,-7.4639997 Q0.07199967,-7.776,0.5399997,-7.9919996 Q0.11999965,-8.232,-0.22200036,-8.538 Q-0.56400037,-8.844,-0.7620003,-9.24 Q-0.96000034,-9.636,-0.96000034,-10.1640005 Q-0.96000034,-10.824,-0.6240003,-11.274 Q-0.28800035,-11.724,0.28799963,-11.964 Q0.8639996,-12.2039995,1.5959997,-12.2039995 z M-0.20400035,-5.6879997 Q-0.20400035,-5.064,0.23999977,-4.65 Q0.6839998,-4.236,1.6079996,-4.236 Q2.4839997,-4.236,2.9459996,-4.65 Q3.4079995,-5.064,3.4079995,-5.724 Q3.4079995,-6.144,3.1859999,-6.462 Q2.9639997,-6.7799997,2.5619998,-7.032 Q2.1599996,-7.2840004,1.6079996,-7.488 L1.4159997,-7.5600004 Q0.8879998,-7.332,0.52799964,-7.068 Q0.16799963,-6.804,-0.018000364,-6.4680004 Q-0.20400035,-6.132,-0.20400035,-5.6879997 z M1.5839996,-11.352 Q0.92399955,-11.352,0.49799967,-11.034 Q0.07199967,-10.716001,0.07199967,-10.116 Q0.07199967,-9.672,0.2819996,-9.372 Q0.49199963,-9.0720005,0.85199976,-8.862 Q1.2119997,-8.652,1.6439996,-8.46 Q2.0639997,-8.64,2.3939996,-8.856 Q2.7239995,-9.0720005,2.9219995,-9.378 Q3.12,-9.684,3.12,-10.116 Q3.12,-10.716001,2.6999998,-11.034 Q2.2799997,-11.352,1.5839996,-11.352 z M11.316,-7.8120003 Q11.316,-6.768,11.16,-5.952 Q11.004,-5.136,10.662,-4.566 Q10.32,-3.996,9.774,-3.696 Q9.228,-3.396,8.459999,-3.396 Q7.4999995,-3.396,6.8699994,-3.924 Q6.24,-4.452,5.9339995,-5.442 Q5.6279993,-6.432,5.6279993,-7.8120003 Q5.6279993,-9.204,5.9099994,-10.188 Q6.1919994,-11.172,6.8159995,-11.694 Q7.4399996,-12.216,8.459999,-12.216 Q9.42,-12.216,10.056,-11.694 Q10.691999,-11.172,11.004,-10.188 Q11.316,-9.204,11.316,-7.8120003 z M6.6839995,-7.8120003 Q6.6839995,-6.636,6.8579993,-5.856 Q7.0319996,-5.076,7.4219995,-4.686 Q7.8119993,-4.296,8.459999,-4.296 Q9.108,-4.296,9.497999,-4.6800003 Q9.888,-5.064,10.067999,-5.8500004 Q10.247999,-6.636,10.247999,-7.8120003 Q10.247999,-8.988,10.067999,-9.762 Q9.888,-10.536,9.497999,-10.926 Q9.108,-11.316,8.459999,-11.316 Q7.8119993,-11.316,7.4219995,-10.926 Q7.0319996,-10.536,6.8579993,-9.762 Q6.6839995,-8.988,6.6839995,-7.8120003 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 316.22897 36.344)"/> +<path d="M355.69568,44.344 L355.69568,40.344" fill="none" stroke="#000000" stroke-width="1"/> +<path d="M-5.6280003,-7.8120003 Q-5.6280003,-6.768,-5.7840004,-5.952 Q-5.94,-5.136,-6.282,-4.566 Q-6.624,-3.996,-7.17,-3.696 Q-7.716,-3.396,-8.484,-3.396 Q-9.444,-3.396,-10.074,-3.924 Q-10.704,-4.452,-11.01,-5.442 Q-11.316,-6.432,-11.316,-7.8120003 Q-11.316,-9.204,-11.034,-10.188 Q-10.752001,-11.172,-10.128,-11.694 Q-9.504,-12.216,-8.484,-12.216 Q-7.524,-12.216,-6.888,-11.694 Q-6.2520003,-11.172,-5.94,-10.188 Q-5.6280003,-9.204,-5.6280003,-7.8120003 z M-10.26,-7.8120003 Q-10.26,-6.636,-10.086,-5.856 Q-9.912001,-5.076,-9.522,-4.686 Q-9.132,-4.296,-8.484,-4.296 Q-7.8360004,-4.296,-7.446,-4.6800003 Q-7.056,-5.064,-6.8760004,-5.8500004 Q-6.696,-6.636,-6.696,-7.8120003 Q-6.696,-8.988,-6.8760004,-9.762 Q-7.056,-10.536,-7.446,-10.926 Q-7.8360004,-11.316,-8.484,-11.316 Q-9.132,-11.316,-9.522,-10.926 Q-9.912001,-10.536,-10.086,-9.762 Q-10.26,-8.988,-10.26,-7.8120003 z M-4.1760006,-4.164 Q-4.1760006,-4.608,-3.9600005,-4.788 Q-3.7440004,-4.968,-3.4440005,-4.968 Q-3.1320004,-4.968,-2.9100003,-4.788 Q-2.6880004,-4.608,-2.6880004,-4.164 Q-2.6880004,-3.732,-2.9100003,-3.54 Q-3.1320004,-3.348,-3.4440005,-3.348 Q-3.7440004,-3.348,-3.9600005,-3.54 Q-4.1760006,-3.732,-4.1760006,-4.164 z M4.416,-8.424 Q4.416,-7.6920004,4.3139997,-6.966 Q4.212,-6.24,3.9599996,-5.598 Q3.7079997,-4.9560003,3.2639995,-4.458 Q2.8199997,-3.96,2.1359997,-3.678 Q1.4519997,-3.396,0.47999954,-3.396 Q0.23999977,-3.396,-0.07800031,-3.426 Q-0.3960004,-3.456,-0.6000004,-3.516 L-0.6000004,-4.416 Q-0.3840003,-4.344,-0.096000314,-4.302 Q0.19199967,-4.26,0.4559996,-4.26 Q1.2959998,-4.26,1.8419998,-4.5360003 Q2.3879995,-4.8120003,2.712,-5.2860003 Q3.0359998,-5.76,3.1799998,-6.3900003 Q3.324,-7.02,3.3479996,-7.7159996 L3.2759995,-7.7159996 Q3.0959997,-7.44,2.8199997,-7.212 Q2.5439997,-6.984,2.1539996,-6.852 Q1.7639997,-6.7200003,1.2359996,-6.7200003 Q0.5039997,-6.7200003,-0.054000378,-7.026 Q-0.61200035,-7.332,-0.91800034,-7.908 Q-1.2240003,-8.484,-1.2240003,-9.312 Q-1.2240003,-10.212,-0.8820003,-10.86 Q-0.5400003,-11.508,0.07199967,-11.856 Q0.6839998,-12.2039995,1.5119996,-12.2039995 Q2.1239996,-12.2039995,2.6519995,-11.97 Q3.1799998,-11.736,3.5759997,-11.268 Q3.9719996,-10.8,4.194,-10.092 Q4.416,-9.384,4.416,-8.424 z M1.5119996,-11.316 Q0.76799965,-11.316,0.29399967,-10.824 Q-0.1800003,-10.332,-0.1800003,-9.324 Q-0.1800003,-8.496,0.22199965,-8.022 Q0.6239996,-7.5480003,1.4639997,-7.5480003 Q2.0399997,-7.5480003,2.4599996,-7.7820005 Q2.8799996,-8.016,3.1139998,-8.376 Q3.3479996,-8.736,3.3479996,-9.12 Q3.3479996,-9.504,3.2339997,-9.894 Q3.12,-10.284,2.8919997,-10.608 Q2.6639996,-10.932,2.3159995,-11.124001 Q1.9679997,-11.316,1.5119996,-11.316 z M11.316,-7.8120003 Q11.316,-6.768,11.16,-5.952 Q11.004,-5.136,10.662,-4.566 Q10.32,-3.996,9.774,-3.696 Q9.228,-3.396,8.459999,-3.396 Q7.4999995,-3.396,6.8699994,-3.924 Q6.24,-4.452,5.9339995,-5.442 Q5.6279993,-6.432,5.6279993,-7.8120003 Q5.6279993,-9.204,5.9099994,-10.188 Q6.1919994,-11.172,6.8159995,-11.694 Q7.4399996,-12.216,8.459999,-12.216 Q9.42,-12.216,10.056,-11.694 Q10.691999,-11.172,11.004,-10.188 Q11.316,-9.204,11.316,-7.8120003 z M6.6839995,-7.8120003 Q6.6839995,-6.636,6.8579993,-5.856 Q7.0319996,-5.076,7.4219995,-4.686 Q7.8119993,-4.296,8.459999,-4.296 Q9.108,-4.296,9.497999,-4.6800003 Q9.888,-5.064,10.067999,-5.8500004 Q10.247999,-6.636,10.247999,-7.8120003 Q10.247999,-8.988,10.067999,-9.762 Q9.888,-10.536,9.497999,-10.926 Q9.108,-11.316,8.459999,-11.316 Q7.8119993,-11.316,7.4219995,-10.926 Q7.0319996,-10.536,6.8579993,-9.762 Q6.6839995,-8.988,6.6839995,-7.8120003 z" fill="#000000" stroke="none" transform="matrix(1 0 0 1 355.69568 36.344)"/> +</svg> \ No newline at end of file diff --git a/tests/src/tests.rs b/tests/src/tests.rs index d32e1b8..d8ab900 100644 --- a/tests/src/tests.rs +++ b/tests/src/tests.rs @@ -1,4 +1,5 @@ use plotive::{des, geom}; +use rand::SeedableRng; use crate::*; @@ -42,7 +43,21 @@ fn line2(x: &[f64], y: &[f64]) -> des::series::Line { des::series::Line::new(x.into(), y.into()) } +/// Get a predictable random number generator +fn rng(seed: Option<u64>) -> impl rand::Rng { + let seed = seed.unwrap_or(1234567890987654321); + rand_chacha::ChaCha8Rng::seed_from_u64(seed) +} + +fn make_col<D>(n: usize, distr: D, rng: &mut impl rand::Rng) -> Vec<f64> +where + D: rand_distr::Distribution<f64>, +{ + (0..n).map(|_| distr.sample(rng)).collect() +} + mod axes; +mod colorbar; mod interp; mod legend; mod nulls; diff --git a/tests/src/tests/colorbar.rs b/tests/src/tests/colorbar.rs new file mode 100644 index 0000000..6782e54 --- /dev/null +++ b/tests/src/tests/colorbar.rs @@ -0,0 +1,150 @@ +use plotive::des::cmap; +use plotive::{des, style}; +use rand_distr::Uniform; + +use crate::tests::fig_small; +use crate::{TestHarness, assert_fig_eq_ref}; + +fn columns() -> (Vec<f64>, Vec<f64>, Vec<f64>) { + let mut rng = super::rng(None); + let distr = Uniform::new(0.0, 1.0).unwrap(); + + let x = super::make_col(15, distr, &mut rng); + let y = super::make_col(15, distr, &mut rng); + let col = super::make_col(15, distr, &mut rng); + + (x, y, col) +} + +#[test] +fn colorbar_default() { + let (x, y, col) = columns(); + + let plot = des::Plot::new(vec![ + des::series::Scatter::new(des::data_inline(x), des::data_inline(y)) + .with_color_data(des::data_inline(col), cmap::viridis()) + .with_marker( + style::series::Marker::default() + .with_fill_opacity(0.7) + .with_stroke_width(2.0), + ) + .into(), + ]) + .with_colorbar(Default::default()); + let fig = fig_small(plot); + + assert_fig_eq_ref!(&fig, "colorbar/default"); +} + +#[test] +fn colorbar_default_with_axes() { + let (x, y, col) = columns(); + + let plot = des::Plot::new(vec![ + des::series::Scatter::new(des::data_inline(x), des::data_inline(y)) + .with_color_data(des::data_inline(col), cmap::viridis()) + .with_marker( + style::series::Marker::default() + .with_fill_opacity(0.7) + .with_stroke_width(2.0), + ) + .into(), + ]) + .with_x_axis( + des::Axis::default() + .with_ticks(des::axis::Ticks::default()) + .with_title("x".into()), + ) + .with_y_axis( + des::Axis::default() + .with_ticks(des::axis::Ticks::default()) + .with_title("y".into()), + ) + .with_colorbar(Default::default()); + let fig = fig_small(plot); + + assert_fig_eq_ref!(&fig, "colorbar/default-with-axes"); +} + +#[test] +fn colorbar_forced_scale() { + let (x, y, col) = columns(); + + let plot = des::Plot::new(vec![ + des::series::Scatter::new(des::data_inline(x), des::data_inline(y)) + .with_color_data( + des::data_inline(col), + cmap::viridis().with_data_range((0.0, 2.0)), + ) + .with_marker( + style::series::Marker::default() + .with_fill_opacity(0.7) + .with_stroke_width(2.0), + ) + .into(), + ]) + .with_colorbar(Default::default()); + let fig = fig_small(plot); + + assert_fig_eq_ref!(&fig, "colorbar/forced-scale"); +} + +#[test] +fn colorbar_left() { + let (x, y, col) = columns(); + + let plot = des::Plot::new(vec![ + des::series::Scatter::new(des::data_inline(x), des::data_inline(y)) + .with_color_data(des::data_inline(col), cmap::viridis()) + .with_marker( + style::series::Marker::default() + .with_fill_opacity(0.7) + .with_stroke_width(2.0), + ) + .into(), + ]) + .with_colorbar(des::ColorBarPos::Left.into()); + let fig = fig_small(plot); + + assert_fig_eq_ref!(&fig, "colorbar/left"); +} + +#[test] +fn colorbar_top() { + let (x, y, col) = columns(); + + let plot = des::Plot::new(vec![ + des::series::Scatter::new(des::data_inline(x), des::data_inline(y)) + .with_color_data(des::data_inline(col), cmap::viridis()) + .with_marker( + style::series::Marker::default() + .with_fill_opacity(0.7) + .with_stroke_width(2.0), + ) + .into(), + ]) + .with_colorbar(des::ColorBarPos::Top.into()); + let fig = fig_small(plot); + + assert_fig_eq_ref!(&fig, "colorbar/top"); +} + +#[test] +fn colorbar_bottom() { + let (x, y, col) = columns(); + + let plot = des::Plot::new(vec![ + des::series::Scatter::new(des::data_inline(x), des::data_inline(y)) + .with_color_data(des::data_inline(col), cmap::viridis()) + .with_marker( + style::series::Marker::default() + .with_fill_opacity(0.7) + .with_stroke_width(2.0), + ) + .into(), + ]) + .with_colorbar(des::ColorBarPos::Bottom.into()); + let fig = fig_small(plot); + + assert_fig_eq_ref!(&fig, "colorbar/bottom"); +} From bb4bc40b1927fe69498ada3d4e7ac9baff6f78a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Thebault?= <remi.thebault@gmail.com> Date: Thu, 7 May 2026 14:12:14 +0200 Subject: [PATCH 15/16] add stars to scripts --- generate_gallery.sh | 2 +- run_all_examples.sh | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/generate_gallery.sh b/generate_gallery.sh index 69bc420..d71d817 100755 --- a/generate_gallery.sh +++ b/generate_gallery.sh @@ -14,4 +14,4 @@ cargo run --example subplots --features utils -- png=gallery/subplots.png cargo run --example bitcoin --features data-csv,time -- png=gallery/bitcoin.png cargo run --example iris --features data-csv -- png=gallery/iris.png - +cargo run --example stars --features data-csv -- png=gallery/stars.png dark diff --git a/run_all_examples.sh b/run_all_examples.sh index 5aa1dde..3773b98 100755 --- a/run_all_examples.sh +++ b/run_all_examples.sh @@ -37,6 +37,7 @@ cargo run --example subplots --features utils -- ${POS_ARGS[@]} cargo run --example bitcoin --features data-csv,time -- ${POS_ARGS[@]} cargo run --example iris --features data-csv -- ${POS_ARGS[@]} +cargo run --example stars --features data-csv -- ${POS_ARGS[@]} cargo run --example bode_rlc_dsl --features dsl,noto-serif-italic,utils -- ${POS_ARGS[@]} From 2c56b9cc1822e9dc120e17b3025298525ea81500 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Thebault?= <remi.thebault@gmail.com> Date: Thu, 7 May 2026 14:17:28 +0200 Subject: [PATCH 16/16] cargo +nightly fmt --- base/src/color.rs | 14 ++++++++++---- base/src/lib.rs | 2 +- iced/src/lib.rs | 7 +------ src/des.rs | 2 +- src/des/cmap.rs | 2 +- src/drawing/axis/bounds.rs | 3 ++- src/drawing/cmap.rs | 15 +++++---------- src/drawing/ticks.rs | 11 +++++++---- src/lib.rs | 3 +-- src/style/series.rs | 2 +- 10 files changed, 30 insertions(+), 31 deletions(-) diff --git a/base/src/color.rs b/base/src/color.rs index 9674ae5..c5751df 100644 --- a/base/src/color.rs +++ b/base/src/color.rs @@ -540,7 +540,11 @@ impl Eq for LinRgb {} impl Lerp for LinRgb { fn lerp(self, other: Self, t: f32) -> Self { - debug_assert!(t >= 0.0 && t <= 1.0, "t must be in the range [0.0, 1.0] (got {})", t); + debug_assert!( + t >= 0.0 && t <= 1.0, + "t must be in the range [0.0, 1.0] (got {})", + t + ); let r = self.0 * (1.0 - t) + other.0 * t; let g = self.1 * (1.0 - t) + other.1 * t; let b = self.2 * (1.0 - t) + other.2 * t; @@ -586,7 +590,11 @@ impl Eq for OkLab {} impl Lerp for OkLab { fn lerp(self, other: Self, t: f32) -> Self { - debug_assert!(t >= 0.0 && t <= 1.0, "t must be in the range [0.0, 1.0], got {}", t); + debug_assert!( + t >= 0.0 && t <= 1.0, + "t must be in the range [0.0, 1.0], got {}", + t + ); let r = self.0 * (1.0 - t) + other.0 * t; let g = self.1 * (1.0 - t) + other.1 * t; let b = self.2 * (1.0 - t) + other.2 * t; @@ -619,7 +627,6 @@ impl Lerp for Xyz { } } - impl From<SRgb> for Rgb8 { fn from(srgb: SRgb) -> Self { let r = (srgb.0 * 255.0).round() as u8; @@ -720,7 +727,6 @@ impl From<Xyz> for LinRgb { } } - impl From<Rgb8> for LinRgb { fn from(rgb: Rgb8) -> Self { let srgb: SRgb = SRgb::from(rgb); diff --git a/base/src/lib.rs b/base/src/lib.rs index 033a149..cafcec1 100644 --- a/base/src/lib.rs +++ b/base/src/lib.rs @@ -1,4 +1,4 @@ pub mod color; -pub use color::{Color, Rgb8, Rgba8, ResolveColor}; +pub use color::{Color, ResolveColor, Rgb8, Rgba8}; pub mod geom; diff --git a/iced/src/lib.rs b/iced/src/lib.rs index 50e3902..426ccb4 100644 --- a/iced/src/lib.rs +++ b/iced/src/lib.rs @@ -14,11 +14,6 @@ impl ToIced for plotive::Rgba8 { type IcedType = iced::Color; fn to_iced(&self) -> Self::IcedType { - iced::Color::from_rgba8( - self.r(), - self.g(), - self.b(), - self.a() as f32 / 255.0, - ) + iced::Color::from_rgba8(self.r(), self.g(), self.b(), self.a() as f32 / 255.0) } } diff --git a/src/des.rs b/src/des.rs index f54ce8c..10fda1f 100644 --- a/src/des.rs +++ b/src/des.rs @@ -14,10 +14,10 @@ pub mod series; pub use annot::Annotation; pub use axis::Axis; +pub use colorbar::{ColorBar, ColorBarPos}; pub use figure::{FigLegend, Figure}; pub use legend::Legend; pub use plot::{Plot, PlotLegend, Subplots}; -pub use colorbar::{ColorBar, ColorBarPos}; pub use series::{DataCol, Series, data_inline, data_src_ref}; /// Index of a plot in a subplot grid diff --git a/src/des/cmap.rs b/src/des/cmap.rs index f2dfd1a..e1fc36a 100644 --- a/src/des/cmap.rs +++ b/src/des/cmap.rs @@ -126,7 +126,7 @@ pub fn stellar() -> LerpColorMap { } else if t <= 19.0 { 0.0 } else { - 138.5177312231 * (t - 10.0).ln() - 305.0447927307 + 138.5177312231 * (t - 10.0).ln() - 305.0447927307 }; let stop_pos = ((temp - MIN_TEMP) / (MAX_TEMP - MIN_TEMP)) as f32; diff --git a/src/drawing/axis/bounds.rs b/src/drawing/axis/bounds.rs index 1c4289c..b8b45bb 100644 --- a/src/drawing/axis/bounds.rs +++ b/src/drawing/axis/bounds.rs @@ -1,4 +1,5 @@ -use crate::{data, drawing::{Categories, Error}}; +use crate::data; +use crate::drawing::{Categories, Error}; #[cfg(feature = "time")] use crate::time::{DateTime, TimeDelta}; diff --git a/src/drawing/cmap.rs b/src/drawing/cmap.rs index 520a055..6856b83 100644 --- a/src/drawing/cmap.rs +++ b/src/drawing/cmap.rs @@ -44,7 +44,8 @@ impl AsColorMap for LerpColorMap { } fn data_range(&self) -> Option<axis::Bounds> { - self.data_range().map(|rng| axis::NumBounds::from(rng).into()) + self.data_range() + .map(|rng| axis::NumBounds::from(rng).into()) } fn as_color_map(&self) -> Arc<dyn ColorMap> { @@ -52,15 +53,9 @@ impl AsColorMap for LerpColorMap { let end = self.end(); let stops = self.stops().iter().copied(); match self.method() { - LerpMethod::LinearRgb => { - Arc::new(LinearColorMap::new(start, end, stops)) - } - LerpMethod::Perceptual => { - Arc::new(PerceptualColorMap::new(start, end, stops)) - } - LerpMethod::Xyz => { - Arc::new(XyzColorMap::new(start, end, stops)) - } + LerpMethod::LinearRgb => Arc::new(LinearColorMap::new(start, end, stops)), + LerpMethod::Perceptual => Arc::new(PerceptualColorMap::new(start, end, stops)), + LerpMethod::Xyz => Arc::new(XyzColorMap::new(start, end, stops)), } } } diff --git a/src/drawing/ticks.rs b/src/drawing/ticks.rs index 60d6f7f..0652382 100644 --- a/src/drawing/ticks.rs +++ b/src/drawing/ticks.rs @@ -500,7 +500,9 @@ pub fn num_label_formatter( match formatter { None => Arc::new(NullFormat), Some(Formatter::Auto) if scale.is_shared() => Arc::new(NullFormat), - Some(Formatter::Auto | Formatter::SharedAuto) => auto_label_formatter(locator, formatter, ab, scale), + Some(Formatter::Auto | Formatter::SharedAuto) => { + auto_label_formatter(locator, formatter, ab, scale) + } Some(Formatter::Prec(prec)) => Arc::new(PrecLabelFormat(*prec)), Some(Formatter::Percent(fmt)) => { let prec = fmt @@ -511,14 +513,15 @@ pub fn num_label_formatter( #[cfg(feature = "time")] Some(Formatter::TimeDelta(tdfmt)) => timedelta_label_formatter(ab, tdfmt), #[cfg(feature = "time")] - Some(Formatter::DateTime(_)) => datetime_label_formatter(formatter, ab.into(), scale).unwrap(), + Some(Formatter::DateTime(_)) => { + datetime_label_formatter(formatter, ab.into(), scale).unwrap() + } } } fn auto_label_formatter( locator: &Locator, - #[allow(unused_variables)] - formatter: Option<&Formatter>, + #[allow(unused_variables)] formatter: Option<&Formatter>, ab: axis::NumBounds, scale: &Scale, ) -> Arc<dyn LabelFormatter> { diff --git a/src/lib.rs b/src/lib.rs index d2824ee..f7f9cef 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -164,14 +164,13 @@ pub mod time; pub use drawing::Prepare; pub use style::Style; - /// Color types and utilities for the `plotive` crate. pub mod color { /// Rexports of [`plotive_base::color`]` items pub use plotive_base::color::*; } -pub use color::{Color, Rgba8, ResolveColor}; +pub use color::{Color, ResolveColor, Rgba8}; /// Rexports of [`plotive_base::geom`]` items pub mod geom { diff --git a/src/style/series.rs b/src/style/series.rs index e7a0b15..4629c3f 100644 --- a/src/style/series.rs +++ b/src/style/series.rs @@ -2,7 +2,7 @@ * This module deals with colors and style of data series. */ use crate::style::{self, catppuccin, defaults}; -use crate::{Rgba8, ResolveColor}; +use crate::{ResolveColor, Rgba8}; /// A palette for data series. /// It provides ordered colors for series in a figure.