From bfaf5447a789cd0dbbb1e418bea62fef9edc2b7d Mon Sep 17 00:00:00 2001 From: Laurenz Date: Fri, 6 May 2022 10:05:11 +0200 Subject: [PATCH] Cast content from string --- macros/src/lib.rs | 46 ++++++++++++++------------------ src/eval/args.rs | 28 +++++++++---------- src/eval/func.rs | 9 ++++--- src/eval/value.rs | 12 +++++++-- src/library/graphics/shape.rs | 21 +++------------ src/library/layout/container.rs | 4 +-- src/library/layout/pad.rs | 2 +- src/library/layout/page.rs | 15 +---------- src/library/text/link.rs | 2 +- src/library/text/mod.rs | 44 +++++++++++++++++++++++++----- tests/ref/text/font.png | Bin 17334 -> 21070 bytes tests/typ/style/show-node.typ | 4 +-- tests/typ/text/font.typ | 8 ++++++ 13 files changed, 106 insertions(+), 89 deletions(-) diff --git a/macros/src/lib.rs b/macros/src/lib.rs index 027db89d9..496238346 100644 --- a/macros/src/lib.rs +++ b/macros/src/lib.rs @@ -53,8 +53,7 @@ fn expand(stream: TokenStream2, mut impl_block: syn::ItemImpl) -> Result false, "showable" => true, @@ -244,10 +243,9 @@ fn process_const( /// A style property. struct Property { name: Ident, - hidden: bool, + skip: bool, referenced: bool, shorthand: Option, - variadic: bool, resolve: bool, fold: bool, } @@ -261,10 +259,9 @@ enum Shorthand { fn parse_property(item: &mut syn::ImplItemConst) -> Result { let mut property = Property { name: item.ident.clone(), - hidden: false, - referenced: false, + skip: false, shorthand: None, - variadic: false, + referenced: false, resolve: false, fold: false, }; @@ -279,7 +276,7 @@ fn parse_property(item: &mut syn::ImplItemConst) -> Result { while let Some(token) = stream.next() { match token { TokenTree::Ident(ident) => match ident.to_string().as_str() { - "hidden" => property.hidden = true, + "skip" => property.skip = true, "shorthand" => { let short = if let Some(TokenTree::Group(group)) = stream.peek() { let span = group.span(); @@ -296,7 +293,6 @@ fn parse_property(item: &mut syn::ImplItemConst) -> Result { property.shorthand = Some(short); } "referenced" => property.referenced = true, - "variadic" => property.variadic = true, "resolve" => property.resolve = true, "fold" => property.fold = true, _ => return Err(Error::new(ident.span(), "invalid attribute")), @@ -308,10 +304,10 @@ fn parse_property(item: &mut syn::ImplItemConst) -> Result { } let span = property.name.span(); - if property.shorthand.is_some() && property.variadic { + if property.skip && property.shorthand.is_some() { return Err(Error::new( span, - "shorthand and variadic are mutually exclusive", + "skip and shorthand are mutually exclusive", )); } @@ -326,26 +322,24 @@ fn parse_property(item: &mut syn::ImplItemConst) -> Result { } /// Auto-generate a `set` function from properties. -fn generate_set(properties: &[Property]) -> syn::ImplItemMethod { +fn generate_set( + properties: &[Property], + user: Option, +) -> syn::ImplItemMethod { + let user = user.map(|method| { + let block = &method.block; + quote! { (|| -> TypResult<()> { #block; Ok(()) } )()?; } + }); + let mut shorthands = vec![]; let sets: Vec<_> = properties .iter() - .filter(|p| !p.hidden) + .filter(|p| !p.skip) .map(|property| { let name = &property.name; let string = name.to_string().replace("_", "-").to_lowercase(); - let value = if property.variadic { - quote! { - match args.named(#string)? { - Some(value) => value, - None => { - let list: Vec<_> = args.all()?; - (!list.is_empty()).then(|| list) - } - } - } - } else if let Some(short) = &property.shorthand { + let value = if let Some(short) = &property.shorthand { match short { Shorthand::Positional => quote! { args.named_or_find(#string)? }, Shorthand::Named(named) => { @@ -357,7 +351,6 @@ fn generate_set(properties: &[Property]) -> syn::ImplItemMethod { quote! { args.named(#string)? } }; - quote! { styles.set_opt(Self::#name, #value); } }) .collect(); @@ -371,8 +364,9 @@ fn generate_set(properties: &[Property]) -> syn::ImplItemMethod { }); parse_quote! { - fn set(args: &mut Args) -> TypResult { + fn set(args: &mut Args, constructor: bool) -> TypResult { let mut styles = StyleMap::new(); + #user #(#bindings)* #(#sets)* Ok(styles) diff --git a/src/eval/args.rs b/src/eval/args.rs index f507e7145..9b21cfa2b 100644 --- a/src/eval/args.rs +++ b/src/eval/args.rs @@ -44,20 +44,6 @@ impl Args { Self { span, items } } - /// Consume and cast the first positional argument. - /// - /// Returns a `missing argument: {what}` error if no positional argument is - /// left. - pub fn expect(&mut self, what: &str) -> TypResult - where - T: Cast>, - { - match self.eat()? { - Some(v) => Ok(v), - None => bail!(self.span, "missing argument: {}", what), - } - } - /// Consume and cast the first positional argument if there is one. pub fn eat(&mut self) -> TypResult> where @@ -73,6 +59,20 @@ impl Args { Ok(None) } + /// Consume and cast the first positional argument. + /// + /// Returns a `missing argument: {what}` error if no positional argument is + /// left. + pub fn expect(&mut self, what: &str) -> TypResult + where + T: Cast>, + { + match self.eat()? { + Some(v) => Ok(v), + None => bail!(self.span, "missing argument: {}", what), + } + } + /// Find and consume the first castable positional argument. pub fn find(&mut self) -> TypResult> where diff --git a/src/eval/func.rs b/src/eval/func.rs index b72e9f184..73f2cac92 100644 --- a/src/eval/func.rs +++ b/src/eval/func.rs @@ -43,11 +43,11 @@ impl Func { Self(Arc::new(Repr::Native(Native { name, func: |ctx, args| { - let styles = T::set(args)?; + let styles = T::set(args, true)?; let content = T::construct(ctx, args)?; Ok(Value::Content(content.styled_with_map(styles.scoped()))) }, - set: Some(T::set), + set: Some(|args| T::set(args, false)), node: T::SHOWABLE.then(|| NodeId::of::()), }))) } @@ -165,7 +165,10 @@ pub trait Node: 'static { fn construct(ctx: &mut Context, args: &mut Args) -> TypResult; /// Parse the arguments into style properties for this node. - fn set(args: &mut Args) -> TypResult; + /// + /// When `constructor` is true, [`construct`](Self::construct) will run + /// after this invocation of `set`. + fn set(args: &mut Args, constructor: bool) -> TypResult; } /// A user-defined closure. diff --git a/src/eval/value.rs b/src/eval/value.rs index b5607cfdd..dd1839269 100644 --- a/src/eval/value.rs +++ b/src/eval/value.rs @@ -464,11 +464,19 @@ primitive! { f64: "float", Float, Int(v) => v as f64 } primitive! { RawLength: "length", Length } primitive! { Angle: "angle", Angle } primitive! { Ratio: "ratio", Ratio } -primitive! { Relative: "relative length", Relative, Length(v) => v.into(), Ratio(v) => v.into() } +primitive! { Relative: "relative length", + Relative, + Length(v) => v.into(), + Ratio(v) => v.into() +} primitive! { Fraction: "fraction", Fraction } primitive! { Color: "color", Color } primitive! { EcoString: "string", Str } -primitive! { Content: "content", Content, None => Content::new() } +primitive! { Content: "content", + Content, + None => Content::new(), + Str(text) => Content::Text(text) +} primitive! { Array: "array", Array } primitive! { Dict: "dictionary", Dict } primitive! { Func: "function", Func } diff --git a/src/library/graphics/shape.rs b/src/library/graphics/shape.rs index 40b6e1e3e..bc768628b 100644 --- a/src/library/graphics/shape.rs +++ b/src/library/graphics/shape.rs @@ -24,19 +24,17 @@ impl ShapeNode { /// How to fill the shape. pub const FILL: Option = None; /// How to stroke the shape. - #[property(resolve, fold)] + #[property(skip, resolve, fold)] pub const STROKE: Smart>> = Smart::Auto; /// How much to pad the shape's content. #[property(resolve, fold)] pub const INSET: Sides>> = Sides::splat(Relative::zero()); - /// How much to extend the shape's dimensions beyond the allocated space. #[property(resolve, fold)] pub const OUTSET: Sides>> = Sides::splat(Relative::zero()); - /// How much to round the shape's corners. - #[property(resolve, fold)] + #[property(skip, resolve, fold)] pub const RADIUS: Sides>> = Sides::splat(Relative::zero()); fn construct(_: &mut Context, args: &mut Args) -> TypResult { @@ -57,14 +55,11 @@ impl ShapeNode { }; Ok(Content::inline( - Self(args.find()?).pack().sized(Spec::new(width, height)), + Self(args.eat()?).pack().sized(Spec::new(width, height)), )) } - fn set(args: &mut Args) -> TypResult { - let mut styles = StyleMap::new(); - styles.set_opt(Self::FILL, args.named("fill")?); - + fn set(...) { if is_round(S) { styles.set_opt( Self::STROKE, @@ -73,16 +68,8 @@ impl ShapeNode { ); } else { styles.set_opt(Self::STROKE, args.named("stroke")?); - } - - styles.set_opt(Self::INSET, args.named("inset")?); - styles.set_opt(Self::OUTSET, args.named("outset")?); - - if !is_round(S) { styles.set_opt(Self::RADIUS, args.named("radius")?); } - - Ok(styles) } } diff --git a/src/library/layout/container.rs b/src/library/layout/container.rs index 6689dd487..5264f2580 100644 --- a/src/library/layout/container.rs +++ b/src/library/layout/container.rs @@ -8,7 +8,7 @@ impl BoxNode { fn construct(_: &mut Context, args: &mut Args) -> TypResult { let width = args.named("width")?; let height = args.named("height")?; - let body: LayoutNode = args.find()?.unwrap_or_default(); + let body: LayoutNode = args.eat()?.unwrap_or_default(); Ok(Content::inline(body.sized(Spec::new(width, height)))) } } @@ -19,6 +19,6 @@ pub struct BlockNode; #[node] impl BlockNode { fn construct(_: &mut Context, args: &mut Args) -> TypResult { - Ok(Content::Block(args.find()?.unwrap_or_default())) + Ok(Content::Block(args.eat()?.unwrap_or_default())) } } diff --git a/src/library/layout/pad.rs b/src/library/layout/pad.rs index 2be21bcb3..aff0e8b0b 100644 --- a/src/library/layout/pad.rs +++ b/src/library/layout/pad.rs @@ -12,7 +12,7 @@ pub struct PadNode { #[node] impl PadNode { fn construct(_: &mut Context, args: &mut Args) -> TypResult { - let all = args.find()?; + let all = args.named("rest")?.or(args.find()?); let x = args.named("x")?; let y = args.named("y")?; let left = args.named("left")?.or(x).or(all).unwrap_or_default(); diff --git a/src/library/layout/page.rs b/src/library/layout/page.rs index c8495e646..324ac285d 100644 --- a/src/library/layout/page.rs +++ b/src/library/layout/page.rs @@ -39,24 +39,11 @@ impl PageNode { Ok(Content::Page(Self(args.expect("body")?))) } - fn set(args: &mut Args) -> TypResult { - let mut styles = StyleMap::new(); - + fn set(...) { if let Some(paper) = args.named_or_find::("paper")? { styles.set(Self::WIDTH, Smart::Custom(paper.width().into())); styles.set(Self::HEIGHT, Smart::Custom(paper.height().into())); } - - styles.set_opt(Self::WIDTH, args.named("width")?); - styles.set_opt(Self::HEIGHT, args.named("height")?); - styles.set_opt(Self::MARGINS, args.named("margins")?); - styles.set_opt(Self::FLIPPED, args.named("flipped")?); - styles.set_opt(Self::FILL, args.named("fill")?); - styles.set_opt(Self::COLUMNS, args.named("columns")?); - styles.set_opt(Self::HEADER, args.named("header")?); - styles.set_opt(Self::FOOTER, args.named("footer")?); - - Ok(styles) } } diff --git a/src/library/text/link.rs b/src/library/text/link.rs index 423bcbfb3..9e9335298 100644 --- a/src/library/text/link.rs +++ b/src/library/text/link.rs @@ -22,7 +22,7 @@ impl LinkNode { fn construct(_: &mut Context, args: &mut Args) -> TypResult { Ok(Content::show(Self { url: args.expect::("url")?, - body: args.find()?, + body: args.eat()?, })) } } diff --git a/src/library/text/mod.rs b/src/library/text/mod.rs index 09c7fa173..80b036ac5 100644 --- a/src/library/text/mod.rs +++ b/src/library/text/mod.rs @@ -35,7 +35,7 @@ pub struct TextNode; #[node] impl TextNode { /// A prioritized sequence of font families. - #[property(referenced, variadic)] + #[property(skip, referenced)] pub const FAMILY: Vec = vec![FontFamily::new("IBM Plex Sans")]; /// Whether to allow font fallback when the primary font list contains no /// match. @@ -109,22 +109,22 @@ impl TextNode { pub const FEATURES: Vec<(Tag, u32)> = vec![]; /// Whether the font weight should be increased by 300. - #[property(hidden, fold)] + #[property(skip, fold)] pub const STRONG: Toggle = false; /// Whether the the font style should be inverted. - #[property(hidden, fold)] + #[property(skip, fold)] pub const EMPH: Toggle = false; /// A case transformation that should be applied to the text. - #[property(hidden)] + #[property(skip)] pub const CASE: Option = None; /// Whether small capital glyphs should be used. ("smcp") - #[property(hidden)] + #[property(skip)] pub const SMALLCAPS: bool = false; /// An URL the text should link to. - #[property(hidden, referenced)] + #[property(skip, referenced)] pub const LINK: Option = None; /// Decorative lines. - #[property(hidden, fold)] + #[property(skip, fold)] pub const DECO: Decoration = vec![]; fn construct(_: &mut Context, args: &mut Args) -> TypResult { @@ -133,6 +133,36 @@ impl TextNode { // styles all text in it. args.expect("body") } + + fn set(...) { + if let Some(family) = args.named("family")? { + styles.set(Self::FAMILY, family); + } else { + let mut count = 0; + let mut content = false; + for item in args.items.iter().filter(|item| item.name.is_none()) { + if EcoString::is(&item.value) { + count += 1; + } else if Content::is(&item.value) { + content = true; + } + } + + // Skip the final string if it's needed as the body. + if constructor && !content && count > 0 { + count -= 1; + } + + if count > 0 { + let mut list = Vec::with_capacity(count); + for _ in 0 .. count { + list.push(args.find()?.unwrap()); + } + + styles.set(Self::FAMILY, list); + } + } + } } /// A font family like "Arial". diff --git a/tests/ref/text/font.png b/tests/ref/text/font.png index 6725137112e681724cc827f500dab39a74379970..cce4897b2af5804b5de774dac45baa1ac17bf686 100644 GIT binary patch literal 21070 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 literal 17334 zcmbt+1yq$?w>65Q=m7&o4y{N@9~wzPLQ+XVK;#h8T@oS+(hbtxCDJV(l`iS-lLMj3qU12N66dIfH%jq+K1$_iw}>z~WSiz;Fm(v$-KU?I>BE`K#hyom zXh!6gUG^?^VDOey4=Xl*MxB=G(q-3wAke=NV5u>(KW{ zG?b-CyUokXdvGKzCnqPKCM6}sq+Wd0Wvs&5penZX!-tEDScjC%%RrYJAry=%hWB$*IN=tWlcAh49A&{FV)EVjN$y|TF>R=XZoYux_ zo=+wvB`GusdzwGw=O?`@Xt%8PfpT@E!b8Oik7W1c(+v_XM0iAW^s|iace~5pDi{o= zt_aP*z@QYCmPRddlZ4AeI7eJu{9l(qcc;r{u2V?_+`QD)+1Xk1&OYom5_up%Eg>$R zY$YB@?*F1MU(@#mm+8=UTm}<8y|>S^XU`s7o$5-FFx+uFJE90}`sjp%Dn=6e_LiAz zBQTdPUE18-R7iGrzrYt86*ahb$4p<}v$?RWOoILfIlnNy%h9f0q1yN>D;pb*M+QBa z&*?t3>E9sbxk-(4>5{MjHgZVj^=ryUj+--0vIIwaYiDiB5x?H-tc@qk=UREj?_OX3{3>p=+VCAke;BneuvfB&vq{kboL(6(4yM&^mAhQ&p&|tN+`Bj9s?2vzr_IIcf3p*RL)W7M6n2h~?SYPrGrv z*81IfGXk|weF;lS(0p-YIjSr@(=2p!6NAxVVIQ9n-nx~QnfZPQ2etlGSvfp2lg?8o zIXPKbSy`6-OH53P$I{YLX^F*V`)D|WYP6YuV4#GC2A>T>ko~HXvT{rtB`s}#bJB&N zB%~n+@gwWWAFxCY8&j8?JF^rsmX?f8rStRi#XD?@H@En$W+at({KbvC-~L@(Od?~^ zsva=$glSJk7#SHU3=8AbDyXVT=#AC7RHgC%`SXV^FeiuMjJm3_GP#C>lT)Kv*Vx#1 zGczY=OMBDn1_ht}s-Mo6uU{=-af%#ai+1S}fB5j>)2B}glfs?_3Q9^3>F7Qi`2_}c zco3=;8{Rq%=Cz(%*WQoiweB1=8?7u!3+ad#@ZIDX#+Z5k?Jr2FnVFrXC`LH-T*G_~ zrImm32^(4aAti-sj4(Q&rc}(*vM?w}A*S|D$AB?IYl2XnEHyXTyUW5jS~PO8pUZA7 zX;!H4*ss3QsJqjlSrI|U#B`UC&`hz3-+mS=$UQPPmh_vC@!PkHr9OUsh~}*15@2Zv7RK>dldAGrW=Tt;~KT_Nhw8(YBz)Wttx zw-0YO-`epuyMFz8rX8gyyPCRsa&%r|;`e#x3l}b=3T0(wG3iOm%2IcPcI;&|mC-le z>r;QTJWy!r;uh^3ldL(0y6h^7eE9I8LJ5s_`N5-1%fMZuS=t2W8=(pLlHI>+K7JIF zcGQALaZ~;H(K+re=Iht5teK9Kn0sR4;vsb#gM)*|Yvt!VrGI@AqtVRnyl-I>Qd(Mi z94TWuQnnqjI9Bs+xaaQu`w5)Kr)4tk0}-sK1lk)9*EYb)Xtr( zV|c=~dIdq$d8m;-qj=xh?x|#{`M6xI-Zd6+4@APG1&@`L)rsJbGg<9#mMlz6{=4Tp zzDQ`y@NXEs;*irDLPA1AZC>7r^dfR&EG#q@R?r13 zVH_;1|NIBMf`*rZE}-E}_yqEwUie?WbAGk=+LAcJ%R@rf~vVJWs6|X1Y7ZB*0*?I8b0pxvB*4N+nH>RO#22Ae{78#tJoWSq-si_|? zE-frAy*OHBH)#K9`ASaCY^eCHW~B{;$74>FyXUv|LfyPnh;F)l>((u+LkDtXb91xP z?lQ02>2Y)Ov#_bZe;F7VW$>{3ON>=`}kdtc?1MbFkUw#aUk3^G&HzkWN(T| zNqH9++w855Ml!y9p{eOlvkmdf8!(OL@JvihJUuz0rJ+ggt*)+iJvn?X%Hx5c#JDkt zy1Kgd=WF)%_Qr(kz;~ZKdBWdzmx?L{a#zx`K(vCg@+|MA5ceUh$Ikn#0n@d$wdiM0 zo?Hx=?s>amY-E)AiHMl^+V$(9)76yNjqBsh!YZhq>d9c8-Q~fMkP!Z=ZbJ?P=FOWo znQf`*sL!82D=3^jxY$G`YHQ0GFkNN0@<5UKRXMB9kB?_3 zYi{UeuJcPIp%N#Gcmf{t@W9tykN49jg#`ozvK)t`aY#r=NE_^z2W}A)LxlX-P4^e~Vy?ggi8ls{eaPjD9;*QRxy%tu7_1Aar-d$p5 z*KdVg24BM#xoKx-m+8FZ;+ZBL36mHT73JvQ5G(M`4uFV&(>5eTBYUKbtgIy|z{i?` zf`W{U`45+`!!`)i`SR)0Q!OoWk(;o57*-RQ6nF{+cVW-n;QK5r@=u;jK?w6N+VHvj zNtL>N`*zR7Bq@Hw*qH17`Xo<){og**_E=shYdtjpKg-O=+ZDq;eYz}PJoo-R7Q`8B zvtW8i;gFtrVCB{G^71%2IF@^|2m+?5#Qk{emWh0Ssh64zLi*FLc5vThQTzIO;H!@8 zjVtdFLSazS({H^UCd2m<9h<-w#&M{)@}E-6KPRLAK280HclM|C8qY!i#;noH%FCO> zZl78Dbp0MAa|eC3i|+&IM4g=YEksha;P>36Gu#l-u>L`vkqQdmoPeIxMd57`-efNtRg@Yy#*`y5( z0c4Mj`*P3s0Q~y*Pug|cU2Rj-mFFqq!8yPJh&+?Bin_M5^!4?50vPD&VT!zceDFzm zf+X%@q4%Ru0GD4AiTm?>*6&z_l}0KCQC@|r_5AsB)Uma)a_>)X0@$IES3j1Q^Vq5! z?)>fF``aJ*s-(1(@b>L%SFZ}^zzCo=l@%7cKf|)QbDqY>Id;9GqocolLsh7&snIbq zR-2Ct8pUH@!Jpuf6K`>W1PsXpcNG8%yZIRZcEz`E-y{Ob)6>&?ZeP20EfEKcOcDnM zQR{NF`4HBw`{&P(uS!Zvep$xO+qq|Dy@jmRw7B?ujTZ<=9whzqY?Q|WwTHB!DG#gj zmfp>K_Yxl4Gjq=N=BN^R@;-hXN^d>iPR3z)vm+psMm8D8RlLRkHM6xf-;tG9z@$-n z_4;+Uc`^Z*k{f!$_Be1;QQ2z8EgDaqrluxz^XFSsbFERLZHk(jOphKJnVHF@8@_!D zZ*6SHH}&V{m2PA!+LN#>rM7;+j=qGI+(E_Wht7xAu zUk0+3b24iTmTG(<4K%m3Y&oc@s$Sv5TA)Lb^4VO)u*Pr5!sMrKa8XlJH?4|TS$%`~ z512+Gk#uR9nO7Su0ZCciyL|cbQqA>u@7_Tn*?dy}rm&}{Co_)`YyT~3|L|~isN`=! z-RbQ+cSb6#=Yi%m$%=a6D=R2KF~h%h?E#4#Pr%=Wg;!N}ZGZl}c=6&-PmhwY@M{3C zxVX5NM8uvx)gdZ%KCmM87q_dYmHG18z`#o-Cp-IacZGq9%6en!DJ^YAQz)(d$`I$H zN7sz7*0=Q301D7u>)ANXQ7r%v8bHjs1bYUZ3@EdbfE%(kq{rf74qMwDh|piZekExi zLV0U!Y6`|k7_`SCAKNjOScXSM@#_BelZ)fSy?z~T`1|M2?{yRlYAI5tQ%7DNYK(+C zTI5*A+5gX69R&ox5g0zud=&6}D9Kn*2||*RlOLquIyySev^pMpxTPBR=jY7~*0~8a z+bs{U?KfbPNqg!x1aNAYKmvvsl#VkF?=6rukrEmetv$rxy#@5TH*y=4waFs01)g~M*slH zN1>=6KD>m+a%Dq8Ayr5Q?!F_TDJ+bYK}km^nb$3=XJKiXwEE!DqwIo$8)SxwDJ`sk zow_M_t!6&Mhdp(E{P=;s6go4577-C4Z8+PjJ0s(F=mcP;TA;-f04Ul(U!RKs+xHhS zpAB91p^uLbq#j7&nKxl5;e4GC4?XWo|MumHhVKK_rTaBFh)nwu6~)OQibg+dX0=&R zu$o%E%b+66j=R4j9%?~KJ1j>)D<{SoQ;iRaIWY{t8y5p6Poqr1r?ytmCedA63P)FW z`p`}4*)w7u3(99Vu3x9R`ld5cBy(wgW+stL@x==TAHXw3D4nm(>vT=Y-@f$_2~_f{_EGUj&<1xQhbBfFKl!t z#|K-NM2Lup60^@bgw7KA$;rv-el<2;O@k~HexH#M5l%@(B|6qLR&GfJj~Bq~@#V{x zrMl0)zA0h=K4CZ9slKWF1}Y;2vsR^zl#C3*KOdlFa`NHc8kFPDpBn*VSzB2x*c`sU zfZeGDImXt?O1;D=9Lh=~*0B?rAp!%jBQnRq&Tc$}0VReuN(bYKH$KYFP&wJK)FtpN1_teY+yGq<=XHL9+vYM`r|lAkZ= zdhCEoT!Hj)=gysvpFX9frUK4m)~@x#w>&wt{kLGHz;N^5#D9-ix4QAKK>zDJCYy%S%FCeJJo?4sc0mP|!l-Sqw0B82`%9 z<=$=i;QJgLcVzLUtYf$jtm&QWD2)KDN}GV?J7W8Fegz0vSY?Xcr1< zUlBD84L%Z;3i#_fA!FyCKTD%kWl$r0@3Ax@K$<%_+!-!1=m4^Dk4gO@Gqarkhfiu1 zR@4F0ut_0yfIYyNi}c%)o7Z<&h9O`;#5*6Mr>7^x+Fz*7=g?b3Q&STbsHewf>ZkY6 z&=6g9P)P}ARQ>QUNyEm*bOQ+zDI3S9tfXY~<0Ecr8So&O?KnQ$KfS%2TwD>s!Ha!) z!*H#p(eY|WDkdf-O3Fl-G!QcG-!HVDmkXMd57q$)1AGF_8XN)CE-W;Z;nAZfIcaHW z)4%#~1Ed*v3Sj!OAx`)+a>~ zn8tx}nD)_1+m!awmAN_3X$KGl)#D%}V3!jia7u#c71M)IXaj?39#=>}>0UHd%#b?) z3MT9GSkEB>rlE+6=D-tocXhqp)d-7>gp8}mLUl>x=kMPkUEWagKYjcN@?I7a0MA78 zdPXCw=}>V&^Tfo&dmS}1GiJ_00IZm=AXYw)k?KLvZRde%^->mCo5rH>c+IVOSLv z6+ckM3%LO~2TYKJed5*perN;eZr%(V3iX3EH#gTWT1{J99#3mP$#Y@BFdG5I1Vq8S zMhh5hMC~-tA@z_+s8dQv7&UAffUI4kx1n%SP*4;v{`Mzf3NOgZ^FJgZ@~o(;@<6y{ zB2-jV0E>P%Wzqq)O-D^ccJO&`3D39n9a)6KEmdGxC7M_ z;MuwCeevSO%#^c*E-D1(_~b<65$RL3jiu!UmW(_3y09upRjwGj&s(n}tK7qkVL~ z08BADndVuYnCRS&NxlK1A5VaWy84Ts#UjY_Xc-Nqvj}EQpXq&2 zSQTuMD0E})%c4dRTCSM9v@}kOiSIWk1lQ>?Fvpgp8C`~GPY~hqHLG4ogeoa1iTe>f zfB8}>ePDPvkd!xsbmgt4C(I?abcDjM#`gAfJM2#0P~A5Rxt{oBfT2IDK+YV@kWT;! z1?2%-u5tZJ(>frlLfwWb9zg(0E5l{5f$_-sfr@T>_^fYj{q4!>Ug%0OH8BB54k?K4 z(IY3oz$lEW-fLDO$QV2U=UQoddwXlENnh?uC^l)$H%Ul_L1?nH+<3qn5*rQ`&0ELK&ii)bK5!n(o zwrG}_jXLeE);MnIzk7ECigD5rD0QrGgiYYQw;Bg46(3I?7I5$i-xmST_CztP59mn_I>|G} zjN*`n`g@N>%TF*PHB~`07T~jd=;YKdU!H)_`t+M1pq*tQKqqU7VDfO|?<_<^{rhFf z|M+oCwA!mz)h2`A_V*o7pD>d=yu1K*vNJPHhKlKd*^X>4^)g6EGyrc)08o6eH4i26 z3$Hazv^ftm^D4x1OC$>{2jAc)RxU2WJ9j|IL2+?;;<~uwKlBI;yb&-BADH(p6;G?J zb%m(T&d!E*)#BngdV~TN6B&7Lh?tnTQooHDfw8f%fscenMR`AQQBhKIc=rxa1LSl- z`(eDCoRDmlAyK@1IoR8~Qy0LF_a0&T9y2Ku!-dyi31igI7}m$02XVj+0u`-r;{)aC z>CxH+Y@D9HzL3(_L|kuvUd8dKN28#YO866ha=J)QPp^bbjJjmA(3J|+ne4Hh&Dt2* z+2_>M)X-3Zitzf^HY-Env^e?>4#4(i*7!nnp!zE{G@h~noJ665?j8cDfDYP1Z_Yi? z`DE&WOp!L+V^p(<|KRVB7cdR6o!I=H3UCwfqaY;}6_|i2o`4_0K=dbgplecFhl{2J z!EK)m4YkAkP*@DAL%=lM9pY;wW;!}uhsu`$bvq(~s70`7w}*a-jrE)6A!f7JsMsi+xoA#f3(_07xcAw6dVBpTgaoOn&o9P+OifFR zWYQo6?JXweXzJH>5|S7ghhhSa)6s4o+$l3Nv!dd_pM;x~j0{u(T_Yo((%N@>%qY}t z46CN*C`8K=dp0Nybe`L#ro*tsJ6EdVMID_2&WSqdKIoaErgLg`1`mC1M!9r!s->d<{r^rqYT$8@&~`BNvHPoMbZePlbDnpvhYWcF-4 zG1iA!Y7mP~&+$%VsrN8hYPHS|+ATOp*N+HjIx~gK#EE_z&C1IQ4-RJI<~Fz6VW=Ci zEh)4cjyL;b*BLikZev$mqH`2Ke6*SU(Qjm6n{+%dJpL8ATkZ*4)=T%v!m;{W&zqu} zUXJ);C!k_|(i&=0`Z-aJ)J3_RS8~^C*!WkfMuzBVrkNVor_pMKZ=Q+~KrfhYZv3z8 z`-X1WA$jh%N4Xjn;|g1gG^R^^$p(Q`Z955Of7&gq(S5zH*3wyDQy(zRn_4J+Fi;qP zk>A=_T(AmuJ=1p`S;;+4=CUOj=|=L?^l+kljMO>HlHy!^Cy-|IIpA30BLhD$46 z$Nk>4dAH@&pK2flM^nj6cMh6^Rvhm-euz-3G96#WPA)Ef$i+)dFId^^rmX)xe3`cR z*^&28hP~2=>G<~Y_-Ag)yN=#25_QqX6}uXawF9%8hJT;W=Sjr*2bKrZyho5p;}{q~ zmF4E<;)2@uh=BpRn!!wTkP{cXGjcLB)zs92>V>2pP*Fi&gH|@W*sv=ZO816Mu&j*C z$jFGgx`4y_1V9moi%Q(@yd`U1%WDy2(gX=Qubt8M7pyKA;+UFzsvzC-ILbAr!`?xv ztG6!4a;XoP6n}kLV;i_zndhU}tJkw5k==@eb-%kQzCr`6V1pt7U7#eW<-Ma}Av`@vvKt<^PV+2{9 z^Y@^HL0TiwtlbC zg0PjNOP}&C% zzFAI-qdK6RvLW7WFLY%D|7?}f(a`~k6NO_2+6sIY@JVw90_543&{hD^Rh{?1(AbQ9 zaYa|i>>wjIn)3n^p58bQN`=DgrLEJSmbT`#vZlJDcQRe$&qVaqCrOkTx^?Sb;+zx> zr$^oB6RN_?BVOb6Lx0IBIu6D1d4%ECx`^a!HVgs&p^O7k9ig7^$v~klk*9$3evpim zoZN5LWl-)7dm9@wf%O0s@6k0KuhkS2ORcPora;y{6Me~cfYFX78uh^)as5;>32|t8 z`d3N+rk2lN6_#!_lZm1?&pMl>B6nMF@bE~fh_H@0a>Mzi4U}fazkClO9RnOWwG(?;S z^|`U7g?r`QYoc91X?DSrITzO%gXa!Smt<7?dycKm6vL)%{D0v{M=aE7QI`peO6wNZ zy zMAI=aq%>2~(ERTHM0xc`cQ*m%E6}$xUxYcuQHhji&-LA7d-6Z*sIUx~I&-0&uuti~ z-(Vl&%tJEdI1td%HxUcNFHglZk<_NZo*iAuYGI*vzy z$l_1-I3nYmJ0LKCRED17=xdsaT^E>3m;PAc`u2^@loW$t0q)WkhpI6{pOZ{yw{}wD zz<1NdFkD3g&n1QjNS{|UxqT}9D1&YG=_u2X$=42xt(sP;2zEP3^RELnT|dO#LV0Z& z@1pnf&}ubKwxAfk)D|o&dbei=J-lzmr*Wu668x-t%Ll>tH&X8w<(DoD>bm;aR!uVJ zBofW@G>zKj!+2m?<+txP$VS_}tr(&a(1h{*v<}_NeW660K~(dqc1b|{f^;DNCi`A( zuB~Jo#|0+hh-ZKC^PNjVHOLBNWMrc+-om7m zEi&|vDShMUdWz!LWYe;qQrmth@AeeJ;BH9;Onx*$!w}P#iLJo#j8i+kSs(^L-C`mt zhA~QKJr8ZArO1&zOw>E_vVZCftGAsJ$MPbjM={$4%Nmw)25Hl1E5{8!eDuC03IT$E zIsx=&VTXO71PuFW8rb3{Mx9YFk z1wMNH{5vcwYL0eX%AVV083ISJ))sN^;1o^A6&ziqV$=mnG;yyA;P?rr1XzNikVO11W zRS~iD{8K&~+K}uk`s&pyaB@L!GA7(Tcf>fd#e}raV8se)dJ%yxkpoO;kDDNe5OmNq?WSG#@^z-VA(7f7TzW2B_8hy)oDhi*?+4e7M?d@{Up95zsv_%T?TF4nh<@iEyDP1|OK~>LkMZhgY zJVB@i74PcRtL0TyWvWpWo7(pT-pQcK@+l}@4=5-hp;EW=*To4!cHn}?7kxQ?I=OG-+buQhAGI{D+rlN&bzp`3j3^n5~gLZJ7$Pz`$818`Uvv&KK&;KAhmNc1xBM&wG`V;JfO1@Vv}(@m;q5I2(%^9AJ&*dU`1p2KRz87& zXF4c_0}viTI0n$(78>AM2eK&$t042u&(CM%=Z_uk6M11^k;<)Ro2MHBkq8`RPv|j$ zLkTP)*RNjXhkiYXd!9qC21qbZ0G%9iVq;@vZES1=0|pVVRjQZQmBEvJwsVgK2qLnw zZIzXL@v>m6p}qP8B;mntdgrozSQsO;H`6kgmrXc1OMpKBfrNp8yHinJJvyv@e0;pE z%@mxG&<3-$wg$XJjLf~YkEa(D8L6tGGADEf`4_TQqrS4CVJ5UJJ?bg1z5!NtRswCA zE3%P7V1ryb-Uq__5VS(0W}tlVyy}nqOC1m^!-Hzj}| z6ZO{zpA4vt0n_~64>^csq5D}~9UCoKgG$t4AZ-9RdaY!aJ2ELhAHTuUD08bX3OpsP zQPsCjK}!LILRPe z0Llh!CTN5N(Sxz%hvf(?orwr%_#|8&^jD@)77egoe0Rszh^!wNP?MF#%U)h%5e4_C zr%sQ>Lf-o3tTbr@tgYi8uMT!4kCR_^`UOQ<6N`WaL7wu?7WTir^x% zd|+v32Ug8VWbACP4j52CJP=MeJD8`)tg6dHoSvQnM0MK!+|h0fEhuO&WqMm$S^`=) z@FaO*dhUC10E3;SWdi0kNQ2Wna=%~kgZkZZ@^NC~HFym`dWvWUc@POQ{*E2^TWul4 z^Kx?=PdSK{p4MHKE#UvYM&$v*wx`ayyUsol-uL}Ibp6^jxdg$L>1pfjh362eaAy^A z!b4Xi4{19vj+&a9roZPQP*WpNf&owL=SODHScFUjnJFwLX4t6^#F-Rv|0eotGseS zCI#cz@Nkvvtn+YZc2!jsbTS}k#>Htu4^;WCjcujd*(tP602Mi|ik3YA`%hin8RSoR zL@~oS_rUYNAbN(}!vp^T zA&AP&XR@9Fekm!sZ{N}@F$PTzL*$t&iq>JC*g1kJ7LO5Z-8DE0(6R^ZxsPJ>KzV;7 zFcG`X0|Dp_R?JXT6cfRu@p^)EKSl3#(I5~WP<}caaS}WJx8C;u*c1OxP4dnSba{9% z$@-xw19H>I$famYZJZ;pQ)uvjSNSFd-u@tJf4+JYNjTj6;ak=yE~=bj>=`eiPGJbg zTKUvwY5ez`W@4%6vW*nF%uC)+$+5|5iJ#srWteI^C5 zv+w+Ml0`d(60ncDgb-Aw?JYk$qI|}z6sLsRzBO-J>V8>Z)*d(-GNwp{;m4Q@kL8QYg-%mld|-Cf@(_F4Uky+a=Kjgt7q8Gk9&Pu0xLX+Xvh zTJE8G&_giE`P5M*bX|q2$%ArxGmx zOucNUtq|NVe=f)4t&{qTU%#m>DC!4(`7hR9z4%j7dtb7dHi0ved1Rk>uC#=jeSzDE ze;fbTPlcKZWT!z6ksVV0x~t=@tQs<5ks$lXdPB1~3P3KI};(|x&S2LQ>C>a|yd-I?b3eSxvW@#felUwpf z)K}nHXOuq>+&g%xIsPro@w77otbz^747_vJy?(gU>DBEfS~!@?t=GNkBnLB_ShYnI zXvhs#*>%+Nk5n(?Th}4?&~)1V1SItWVt=++(24sPS;X}>L`GItTCQ^0SyNgKhP1GX zG??b^tVYcTKN0lN_IAp$MXET|d+)>Db&e6t8;usc2jO?xVmj)n=dx;AQ>p}&b3f8~ zdgIeF#TSZrI7FUh{fH@e?O0V@ew4J*dJ=P%_r=6)j-f%&T;Sb%o!%!VRe`9lYoqDu zY>X;wfy>9q;j>GPHOxucLCIx)c*M&RuKd)NEP|?mih2`oFS5z2vzy8|bQ~{V_-*GB zl$7E}67Q) z7YfE*Ul$Y2xNE%QVtVjpgtaQy*dQun*Xr+fMA|YX%ePa@KLnX|S~=)XW|0J!xPK|_Dbl8vdg|o1?d};uhV++W7rN_kbPcx9qoBV_ICyeTILu4N41Vwz zuUtnytNrpfqR^NL^M{b@5J&ZozxwqER5 zyVtzV7iz37#=3T}#`-#5pwkB-b41pPal^QHYO8tnYYQ5Osc2D4ZS6KSA7!6s;OC?F zL>F^by*jpV%`DeXHgC;IG1#q-cAU&bKQaqszwcA{PT=vnV&)S$9j&e2J!xb)mE7+k z3U=df31j9G$nuk;HYdhNMeQ)fSB*^bOU*3pTTl1boL-)v6ksSIUYyds zMX1rWPj9uKRn7sSt#3X3gddgr?k3yDT+KrAi*4+9ZN;1!^3E3oz8XwFD6Fo~1+GnU zkz@)?2U2Cka=%Pidq~7GbNVy+oenA2Q6YtH!?QU-g5-EqtFlTfS)={eiP8e~EYoo? z>V91tpX4JX-d|i&dhxS(xc#fz4zH*+>Sk{^dgU7^ zgO5dl#YKCJ1y@1^E~drR$p22?=r(Xr)e!2SRa=^-dXZVjHp-q^o}aYi)MOfv;TquH zvTHp*mM~Q5H$*q3C4k^Wl5kc~#ls?Zkj?yjnp~x;%^@AIe9U8FG(M!g6oaNzV~l8c zx_V327D<>>PGM)hpKC0QN__lij-mX(K3|8(*xE~*h2s9v6R>(e5XJVr`$c2@Tg8~s z!th>)Z|&!?AZu#)VqB?TOV)ArW~ejgtg^JgYcsrwoBUVO ziU#(y?#24aK1N3F%G(K^7i|7qR_^DD+?r7RRx6Y&^bAt*y5M^paVf*KpO z?_(0iMpBq5vIp7ZUkaK*k&|0BCpWyKwYo@WVUD#m;)4UM9p8y+Z}&&(Y@5)B3-1wb z_^sVX- zwB=l9;m?NgOYG)CJ-oj&>aug)`7WW3osm}Af|7r#HD46f)@8Q(7`?nV4uyc`-K9{_^^iKBJ$rXNdeW87m)Aq?~CHa1uMKbO|LxoeRu_j zJ*zm`r+q@(^TQ3>x3kI!t~Eag6MPX_v7(1;1F?V{sNasw;@Ma+_+oUpqUPf3Ph&5E zJ#mFmwBD;S?LyLwNzj(dhi-cF;XA#(1qei_-L5!+H1n?8rstn3Qx#7M$2A(q5z(}! z%0qG=x#Ygn(89L>zWyBkt_jA~EjVJ@a0^j*!F;gR)pc8CoxJ8U-^%WZ3iD;~LUzWZ zl)8}5R!_Ul#`oIVr61*$$H%j;?7C3fyKUoG)K{Zp)$447*}K!~3kqg={`cowlr))qC+- z89$|RImUBC1>goEY`8Rbc277(v}IPOLc?jFZn^HRDX~f7^cOFu8$8(2OMqi7=a;m0 z`LJ{GiN+8ghW&GfKEb6z0S@uWA)&VBo2sp*>-+j{Yz&A{Ot9td;Jql}@TA

Rn3g z^-#Sa>zXR+8ONfS1;*X01_=VUEcq83v{IjSRX>;Zl)x!aHHW3|l3l$mQ*l?az0U_t zNgML7#l}8tOP6ErVE^#&=~k)F=Xoh1WJ}x?+>%@eG)yMd;7Dsd%&zwG8TdN+w!?KQ z4LX++2}PCY#}S6aE*A1)vAMo1#1vD(_mjV>h0M7KMV8r}&f4`)jaPi%kJQ2DZWldw zs=~RIQbEUj2TX$c*1kd#5XAI7d?3=AG5-)#PMf#bajYd zI+6UrsjkG7iny7E-T+Ay<*%Bp^$PpRge{e8=kZE~{PxILoae{{;p(|G5)(btcE1Z9 z^l>>mI+$4yu%LolS#q~x18(TnEXFU*gtoc|NW@) zvHKmBSuI~)C;C67veFiw1_CLBr%sd@^G_=$oK?pW&X}plsf%tk_)MbDo;5?K9{OY4 zhMkF^KwQGXIh|OO&*;9l?w+5&x<|pl%Nv!T3nxWNl%B}FT`G(E+G5_6CP|XHN~Y?$ zy=?FAJ5Ff(y?_J6!O@RkOwq0eF3O* zsT@>s(8cy6&n+V0eul1?CfedEmq^^lfn!=|XABxBsHl*0nGD>BxX`cxa!E#7+TA;M z5M+E|$95nCK=k#p{^UqIxDsLOooP?mDlRwQ<3;t4h-Orys!5PcQ(9pl&I0eOu@YMHT9&b3` z3gTQ_M3LjxTyR?<9FUF3M_hGuJOC{Tls^#<9PmGYQ2$I)GSPgf76tx~jEsg!3oxRA z(E(0m!_jOoHTrS6WFSiS`h!w3BOjQ8AyB&ctJ|3?SfF!r<#n>a@aQkDTQmqpMKFY- zOTkm8OB4|j^5+F_B#ZV~4=J2R&wGWu2{#2{7mjJbDPNE!Xu35*?t@EokqT6$@2rdu z9$d_WLyM)%FbQzlnfhvSX(<;IQyvJ==tKMFpu<(g*2dywA|lyCYQ0PdLuf=6QGGED zpB#>snsI3F&KUV(d2WxlJkCLV_V(sHiW~&npsL;i82Y4exz&&0C`{(!I2ESkOA4I< zc1pl}z@^6Zmd4j_-hjs|62zFb$okPy7kTSgA-7svqy?$HmDQ9558Q|L>KibNXoug2 z0d7-)piATl&a@kOA^l|$=mj`Efkva@IEK*KG3HI-Tt~vV3erJb&XHKM|4qOT0L3pn zJ3AFFTyQ@>98gt~hXU)mnXq+hyg-#LvU4;aJn(Ob?A9klK2U;L^2}EdEU*)B12~fg za|O!K+IXF|s%l1V?g$N1p@t>5ncC%ZV@1CSHZB^D6+o}@76CyFn=Z~#%f7Ktc~mht z)yz^cR1%FjmzD}aA1$dufEjDXf(LA?h9z)wFhYZt4gS327KP`kn`=SO3w1MprAcah zbDz0sauEfh7YM;{bC4jxLK(4njD`FiNYU}85bST_E3{W}aSx7;K$?}5l5$bT0jU<8 zanK5JR>q;CqB09JR#Y?+N`ez=pbIv)x6hrW$B2Gys>+t%$oq>dxoewn`u>zYf1T$y z3%!TCyF2*m;Y`+TXbX6%px4*e!FmbV2X4Re0Nbd{WVBLQP3_Bkz6A)M3VEglk2`q+ z_Lh2$!8GhZ;CX|h7LH18HVbETLy!Kgx%v3BD?_`d#DBcxk z#+#u04Ulqja`u=^PELZdpOOwo2>2bIJ zMFRtar6LU`yu6_??NF6FqBlPp{BU$I+Oa26zr25ed=dwV^?{V*{c4 z6f;fLO)je5a~