From 0a3f41d2234ff44ce7a9cbea55baeb7f475e708f Mon Sep 17 00:00:00 2001 From: Maria Hutt Date: Tue, 17 Mar 2026 15:02:21 -0700 Subject: [PATCH 01/16] feat(spinner): add recipe and tokens --- core/src/components.d.ts | 12 +- .../src/components/spinner/spinner.ionic.scss | 3 +- .../components/spinner/spinner.native.scss | 2 +- .../{spinner.common.scss => spinner.scss} | 89 +++++++++----- core/src/components/spinner/spinner.tsx | 45 +++----- .../components/spinner/test/color/index.html | 80 ++++++++----- .../components/spinner/test/size/index.html | 109 +++++++++++++----- .../spinner/test/size/spinner.e2e.ts | 2 +- ...-size-large-md-ltr-Mobile-Chrome-linux.png | Bin 0 -> 830 bytes ...size-large-md-ltr-Mobile-Firefox-linux.png | Bin 0 -> 972 bytes ...-size-large-md-ltr-Mobile-Safari-linux.png | Bin 0 -> 795 bytes ...size-medium-md-ltr-Mobile-Chrome-linux.png | Bin 0 -> 665 bytes ...ize-medium-md-ltr-Mobile-Firefox-linux.png | Bin 0 -> 800 bytes ...size-medium-md-ltr-Mobile-Safari-linux.png | Bin 0 -> 663 bytes ...-size-small-md-ltr-Mobile-Chrome-linux.png | Bin 0 -> 494 bytes ...size-small-md-ltr-Mobile-Firefox-linux.png | Bin 0 -> 569 bytes ...-size-small-md-ltr-Mobile-Safari-linux.png | Bin 0 -> 491 bytes ...size-xlarge-md-ltr-Mobile-Chrome-linux.png | Bin 0 -> 1071 bytes ...ize-xlarge-md-ltr-Mobile-Firefox-linux.png | Bin 0 -> 1269 bytes ...size-xlarge-md-ltr-Mobile-Safari-linux.png | Bin 0 -> 1068 bytes ...size-xsmall-md-ltr-Mobile-Chrome-linux.png | Bin 0 -> 412 bytes ...ize-xsmall-md-ltr-Mobile-Firefox-linux.png | Bin 0 -> 452 bytes ...size-xsmall-md-ltr-Mobile-Safari-linux.png | Bin 0 -> 414 bytes core/src/themes/ionic/default.tokens.ts | 72 ++++++++++++ core/src/themes/ios/default.tokens.ts | 72 ++++++++++++ core/src/themes/md/default.tokens.ts | 72 ++++++++++++ core/src/themes/themes.interfaces.ts | 2 + 27 files changed, 431 insertions(+), 129 deletions(-) rename core/src/components/spinner/{spinner.common.scss => spinner.scss} (65%) create mode 100644 core/src/components/spinner/test/size/spinner.e2e.ts-snapshots/spinner-size-large-md-ltr-Mobile-Chrome-linux.png create mode 100644 core/src/components/spinner/test/size/spinner.e2e.ts-snapshots/spinner-size-large-md-ltr-Mobile-Firefox-linux.png create mode 100644 core/src/components/spinner/test/size/spinner.e2e.ts-snapshots/spinner-size-large-md-ltr-Mobile-Safari-linux.png create mode 100644 core/src/components/spinner/test/size/spinner.e2e.ts-snapshots/spinner-size-medium-md-ltr-Mobile-Chrome-linux.png create mode 100644 core/src/components/spinner/test/size/spinner.e2e.ts-snapshots/spinner-size-medium-md-ltr-Mobile-Firefox-linux.png create mode 100644 core/src/components/spinner/test/size/spinner.e2e.ts-snapshots/spinner-size-medium-md-ltr-Mobile-Safari-linux.png create mode 100644 core/src/components/spinner/test/size/spinner.e2e.ts-snapshots/spinner-size-small-md-ltr-Mobile-Chrome-linux.png create mode 100644 core/src/components/spinner/test/size/spinner.e2e.ts-snapshots/spinner-size-small-md-ltr-Mobile-Firefox-linux.png create mode 100644 core/src/components/spinner/test/size/spinner.e2e.ts-snapshots/spinner-size-small-md-ltr-Mobile-Safari-linux.png create mode 100644 core/src/components/spinner/test/size/spinner.e2e.ts-snapshots/spinner-size-xlarge-md-ltr-Mobile-Chrome-linux.png create mode 100644 core/src/components/spinner/test/size/spinner.e2e.ts-snapshots/spinner-size-xlarge-md-ltr-Mobile-Firefox-linux.png create mode 100644 core/src/components/spinner/test/size/spinner.e2e.ts-snapshots/spinner-size-xlarge-md-ltr-Mobile-Safari-linux.png create mode 100644 core/src/components/spinner/test/size/spinner.e2e.ts-snapshots/spinner-size-xsmall-md-ltr-Mobile-Chrome-linux.png create mode 100644 core/src/components/spinner/test/size/spinner.e2e.ts-snapshots/spinner-size-xsmall-md-ltr-Mobile-Firefox-linux.png create mode 100644 core/src/components/spinner/test/size/spinner.e2e.ts-snapshots/spinner-size-xsmall-md-ltr-Mobile-Safari-linux.png diff --git a/core/src/components.d.ts b/core/src/components.d.ts index 5bc8b061e63..5083bc48903 100644 --- a/core/src/components.d.ts +++ b/core/src/components.d.ts @@ -3881,13 +3881,9 @@ export namespace Components { */ "paused": boolean; /** - * Set to `"xsmall"` for the smallest size. Set to `"small"` for a smaller size. Set to `"medium"` for a medium size. Set to `"large"` for a large size. Set to `"xlarge"` for the largest size. Defaults to `"xsmall"` for the `ionic` theme, undefined for all other themes. + * Set to `"xsmall"` for the smallest size. Set to `"small"` for a smaller size. Set to `"medium"` for a medium size. Set to `"large"` for a large size. Set to `"xlarge"` for the largest size. Defaults to `"medium"`. */ "size"?: 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge'; - /** - * The theme determines the visual appearance of the component. - */ - "theme"?: "ios" | "md" | "ionic"; } interface IonSplitPane { /** @@ -9911,13 +9907,9 @@ declare namespace LocalJSX { */ "paused"?: boolean; /** - * Set to `"xsmall"` for the smallest size. Set to `"small"` for a smaller size. Set to `"medium"` for a medium size. Set to `"large"` for a large size. Set to `"xlarge"` for the largest size. Defaults to `"xsmall"` for the `ionic` theme, undefined for all other themes. + * Set to `"xsmall"` for the smallest size. Set to `"small"` for a smaller size. Set to `"medium"` for a medium size. Set to `"large"` for a large size. Set to `"xlarge"` for the largest size. Defaults to `"medium"`. */ "size"?: 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge'; - /** - * The theme determines the visual appearance of the component. - */ - "theme"?: "ios" | "md" | "ionic"; } interface IonSplitPane { /** diff --git a/core/src/components/spinner/spinner.ionic.scss b/core/src/components/spinner/spinner.ionic.scss index f8fe09383f6..664018a268f 100644 --- a/core/src/components/spinner/spinner.ionic.scss +++ b/core/src/components/spinner/spinner.ionic.scss @@ -1,5 +1,5 @@ @use "../../themes/ionic/ionic.globals.scss" as globals; -@use "./spinner.common"; +@use "./spinner"; // Ionic Spinner // -------------------------------------------------- @@ -11,6 +11,7 @@ height: globals.$ion-scale-700; } +// TODO add this :host(.ion-color-medium) { color: #{globals.ion-color(medium, contrast, $subtle: true)}; } diff --git a/core/src/components/spinner/spinner.native.scss b/core/src/components/spinner/spinner.native.scss index 03c63c675cf..17bf070c2e5 100644 --- a/core/src/components/spinner/spinner.native.scss +++ b/core/src/components/spinner/spinner.native.scss @@ -1,4 +1,4 @@ -@import "./spinner.common.scss"; +@import "./spinner.scss"; // Spinner: lines / lines-small / lines-sharp / lines-sharp-small // -------------------------------------------------- diff --git a/core/src/components/spinner/spinner.common.scss b/core/src/components/spinner/spinner.scss similarity index 65% rename from core/src/components/spinner/spinner.common.scss rename to core/src/components/spinner/spinner.scss index 2f1cb572c35..476cd7969a4 100644 --- a/core/src/components/spinner/spinner.common.scss +++ b/core/src/components/spinner/spinner.scss @@ -1,32 +1,29 @@ -@import "../../themes/mixins"; -// Required to use the current-color function -@import "../../themes/functions.color"; +@use "../../themes/mixins" as mixins; +@use "../../themes/functions.color" as colors; -// Spinners +// Spinner: Common Styles // -------------------------------------------------- :host { /** * @prop --color: Color of the spinner */ + --color: var(--ion-spinner-color); display: inline-block; position: relative; - width: 28px; - height: 28px; - color: var(--color); user-select: none; } :host(.ion-color) { - color: current-color(base); + color: colors.current-color(base); } svg { - @include transform-origin(center); + @include mixins.transform-origin(center); position: absolute; @@ -45,9 +42,10 @@ svg { transform: translateZ(0); } -// Spinner: lines / lines-small / lines-sharp / lines-sharp-small +// Spinner Names // -------------------------------------------------- +// lines / lines-small / lines-sharp / lines-sharp-small :host(.spinner-lines) line, :host(.spinner-lines-small) line, :host(.spinner-lines-sharp) line, @@ -63,42 +61,50 @@ svg { animation: spinner-fade-out 1s linear infinite; } -// Spinner: bubbles -// -------------------------------------------------- +:host(.spinner-lines) line { + stroke-width: var(--ion-spinner-lines-stroke-width); +} + +:host(.spinner-lines-small) line { + stroke-width: var(--ion-spinner-lines-small-stroke-width); +} + +:host(.spinner-lines-sharp) line { + stroke-width: var(--ion-spinner-lines-sharp-stroke-width); +} +:host(.spinner-lines-sharp-small) line { + stroke-width: var(--ion-spinner-lines-sharp-small-stroke-width); +} + +// bubbles :host(.spinner-bubbles) svg { animation: spinner-scale-out 1s linear infinite; fill: currentColor; } -// Spinner: circles -// -------------------------------------------------- - +// circles :host(.spinner-circles) svg { animation: spinner-fade-out 1s linear infinite; fill: currentColor; } -// Spinner: crescent -// -------------------------------------------------- - :host(.spinner-crescent) circle { fill: transparent; - stroke-width: 4px; + stroke-width: var(--ion-spinner-crescent-stroke-width); stroke-dasharray: 128px; stroke-dashoffset: 82px; stroke: currentColor; } +// crescent :host(.spinner-crescent) svg { animation: spinner-rotate 1s linear infinite; } -// Spinner: dots -// -------------------------------------------------- - +// dots :host(.spinner-dots) circle { - stroke-width: 0; + stroke-width: var(--ion-spinner-dots-stroke-width); fill: currentColor; } @@ -106,9 +112,7 @@ svg { animation: spinner-dots 1s linear infinite; } -// Spinner: circular -// -------------------------------------------------- - +// circular :host(.spinner-circular) svg { animation: spinner-circular linear infinite; } @@ -118,13 +122,42 @@ svg { stroke: currentColor; stroke-dasharray: 80px, 200px; stroke-dashoffset: 0px; - stroke-width: 5.6; + stroke-width: var(--ion-spinner-circular-stroke-width); fill: none; } -// Spinner: paused +// Spinner Sizes +// -------------------------------------------------- + +:host(.spinner-xsmall) { + width: var(--ion-spinner-size-xsmall-width); + height: var(--ion-spinner-size-xsmall-height); +} + +:host(.spinner-small) { + width: var(--ion-spinner-size-small-width); + height: var(--ion-spinner-size-small-height); +} + +:host(.spinner-medium) { + width: var(--ion-spinner-size-medium-width); + height: var(--ion-spinner-size-medium-height); +} + +:host(.spinner-large) { + width: var(--ion-spinner-size-large-width); + height: var(--ion-spinner-size-large-height); +} + +:host(.spinner-xlarge) { + width: var(--ion-spinner-size-xlarge-width); + height: var(--ion-spinner-size-xlarge-height); +} + +// Spinner States // -------------------------------------------------- +// Paused :host(.spinner-paused), :host(.spinner-paused) svg, :host(.spinner-paused) circle { diff --git a/core/src/components/spinner/spinner.tsx b/core/src/components/spinner/spinner.tsx index 0cf6cbd006e..730771ef37f 100644 --- a/core/src/components/spinner/spinner.tsx +++ b/core/src/components/spinner/spinner.tsx @@ -3,7 +3,7 @@ import { Component, Host, Prop, h } from '@stencil/core'; import { createColorClasses } from '@utils/theme'; import { config } from '../../global/config'; -import { getIonTheme, getIonMode } from '../../global/ionic-global'; +import { getIonMode } from '../../global/ionic-global'; import type { Color } from '../../interface'; import type { SpinnerTypes } from './spinner-configs'; @@ -12,15 +12,10 @@ import type { SpinnerConfig } from './spinner-interface'; /** * @virtualProp {"ios" | "md"} mode - The mode determines the platform behaviors of the component. - * @virtualProp {"ios" | "md" | "ionic"} theme - The theme determines the visual appearance of the component. */ @Component({ tag: 'ion-spinner', - styleUrls: { - ios: 'spinner.native.scss', - md: 'spinner.native.scss', - ionic: 'spinner.ionic.scss', - }, + styleUrl: 'spinner.scss', shadow: true, }) export class Spinner implements ComponentInterface { @@ -54,7 +49,7 @@ export class Spinner implements ComponentInterface { * Set to `"large"` for a large size. * Set to `"xlarge"` for the largest size. * - * Defaults to `"xsmall"` for the `ionic` theme, undefined for all other themes. + * Defaults to `"medium"`. */ @Prop() size?: 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge'; @@ -67,29 +62,22 @@ export class Spinner implements ComponentInterface { return mode === 'ios' ? 'lines' : 'circular'; } - private getSize(): string | undefined { - const theme = getIonTheme(this); - const { size } = this; - - // TODO(ROU-10912): Remove theme check when sizes are defined for all themes. - if (theme !== 'ionic') { - return undefined; - } - - if (size === undefined) { - return 'xsmall'; - } + /** + * Set the size based on the custom theme config + */ + get sizeValue(): string { + const sizeConfig = config.getObjectValue('IonSpinner.size', 'medium') as string; + console.log('sizeConfig', sizeConfig); + const size = this.size || sizeConfig; return size; } render() { - const self = this; - const theme = getIonTheme(self); - const spinnerName = self.getName(); - const size = this.getSize(); + const { duration: animatedDuration, color, paused, sizeValue } = this; + const spinnerName = this.getName(); const spinner = SPINNERS[spinnerName] ?? SPINNERS['lines']; - const duration = typeof self.duration === 'number' && self.duration > 10 ? self.duration : spinner.dur; + const duration = typeof animatedDuration === 'number' && animatedDuration > 10 ? animatedDuration : spinner.dur; const svgs: SVGElement[] = []; if (spinner.circles !== undefined) { @@ -104,11 +92,10 @@ export class Spinner implements ComponentInterface { return ( + @@ -23,37 +31,47 @@ - - lines (primary) - lines-small (secondary) - circular (tertiary) - dots (success) - bubbles (warning) - circles (danger) - crescent (dark) - lines (paused, - medium) - +
+
+ +

Primary

+
+ +
+ +

Secondary

+
+ +
+ +

Tertiary

+
+ +
+ +

Success

+
+ +
+ +

Warning

+
+ +
+ +

Danger

+
+ +
+ +

Dark

+
+ +
+ +

Paused (Medium)

+
+
diff --git a/core/src/components/spinner/test/size/index.html b/core/src/components/spinner/test/size/index.html index f045932d4ca..75e7ec00800 100644 --- a/core/src/components/spinner/test/size/index.html +++ b/core/src/components/spinner/test/size/index.html @@ -12,6 +12,14 @@ + @@ -22,34 +30,79 @@ - - - - -

Default

-
- - -

xsmall

-
- - -

small

-
- - -

medium

-
- - -

large

-
- - -

xlarge

-
-
-
+ + + diff --git a/core/src/components/spinner/test/size/spinner.e2e.ts b/core/src/components/spinner/test/size/spinner.e2e.ts index bb62285cba0..8c3421acd73 100644 --- a/core/src/components/spinner/test/size/spinner.e2e.ts +++ b/core/src/components/spinner/test/size/spinner.e2e.ts @@ -4,7 +4,7 @@ import { configs, test } from '@utils/test/playwright'; /** * This behavior does not vary across directions. */ -configs({ directions: ['ltr'], modes: ['ionic-md'] }).forEach(({ config, screenshot, title }) => { +configs({ directions: ['ltr'], modes: ['md', 'ionic-md'] }).forEach(({ config, screenshot, title }) => { test.describe(title('spinner: size'), () => { test('should render xsmall spinner', async ({ page }) => { await page.setContent( diff --git a/core/src/components/spinner/test/size/spinner.e2e.ts-snapshots/spinner-size-large-md-ltr-Mobile-Chrome-linux.png b/core/src/components/spinner/test/size/spinner.e2e.ts-snapshots/spinner-size-large-md-ltr-Mobile-Chrome-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..50a012eb4dad3e9300aca8e3450e0911bbb5d741 GIT binary patch literal 830 zcmV-E1Ht@>P)Nkl9e?6jU09q{qictya6fz7AZAUr1ucPft(x_xHf5J`c$2>no8^0)e2t zy&X6ek4freGTGhT?e%(zBoc`h78Zb0ayGI*k#~fg;$EczCMS;!I(Wg zJvN&Ss8jFl?NKNOZEtVG4}@0=BB6G7cbP$cWtmK7cz75)3q{=C-tO=3L;1SCzCJoS zBD250-)J;4-zmQ`H1KHD)zwkZ;o%{6R47wdS69c!$7Et|;R&D}`MmH94Gld%Ka+_o zJ~%ko+1Y{86pzQZwziPOu0c5A;NT#c0&JCJ3=9lls6wG258mk>9v-lM;wEFQDT;Bs z-8VNktE;O@rIPKxyu94l*kF5jg~jmv{G9y;q|wpQ+1c5#u`wKAMKu@<_$qR_T(8#` z247rUoSvS3aq@~*Ua3^Nva*s$B%pj@8GLzpnVXv{d{q3dkD+F>d1+}0%GC1mvc+O4 zO8OQCzf&8lfJ&t*v3E~QOkgp@Bi+%_@m&nBlm>=Zpd3e?Q&HV)c0RR8(J?n=6000I_L_t&o0JJ1GXISS5Pyhe`07*qo IM6N<$f+X68pa1{> literal 0 HcmV?d00001 diff --git a/core/src/components/spinner/test/size/spinner.e2e.ts-snapshots/spinner-size-large-md-ltr-Mobile-Firefox-linux.png b/core/src/components/spinner/test/size/spinner.e2e.ts-snapshots/spinner-size-large-md-ltr-Mobile-Firefox-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..0d49fa723f2c972ca796ad031d277572befb2e19 GIT binary patch literal 972 zcmV;-12g=IP)*xcL%c}Y%VKub$Yh=_;~bVo);keZq*CkxYJ zKou1gXl!ic;+5TElv!F@;^EN~j8tkB@2~Dj9owdwfu(Qb}IB#>U2k zJm>4{i{0H_HBfwfJf^3oIZ#-iHgg9HAOx3@P-mKGKkzv?MExRg?~&#dPB@Jvk)t*xynEiDzq^Yio3-QE4GK$)4D z7#bQ9)@*NYM{#j6`;GTQ&(F^Y4i085hqkq}wCI3-myiObyu4hP9vB#ijg1X{kq}x~ z8VCyu!|m-YpQKPI(A?boV<_q-Dl03YeRH?Aw#Mq}DuRN7-t^vIr6(pPkeHaL;{=Mr zj*bqaokJf-X++=FPfkvPQjWIiy$03P)S#}ePDk9y$%$Qya&mIu=H~Vx+|khy`uqDq zDMh;z)l4$f9vi$$6A*zJvXGDv#Ky)VG&B_S{PgsM_4ReEtgK*WW(I3(YX;}i+ErCm zddEM!+f(+Yd~tVoXY^L-n_y#O18R-q;^GXh_vxPvlrJbUC{g~zl9Q8JaCmrle7MY~ zK$_Xh%gdnNn>qnwj2gX$h6aR(hkt3>mw_~^ot~buLOeA!1xojHU@tB%*s!CcBODwY um=`E|XlqPx#1am@3R0s$N2z&@+hyVZr#Ysd#R9J=W*FR4pK^O+`XEE^)5(_aBi4Y1+jE#lX zBvh7?5N#}|A>k`51Ph}Dh1mE3G!|+$0Y8IlER78fi5nsm8WRa2vhlg%4({e=LAhgh zuedjvVrSlc=eN5sJFAc+{-N-=4fs9&gFcIapx4(|ryRZL3reTc*xcMir_*uL1JEK; zsT2Va0F%k2Rf=sPfqunw+tJaHJD{_(GYK;`HpZ)~E9XJ&cALRq&{d28+TY)o?oKwF zbrd6j78Vu+%<}RwJDrX@AYIp`yK{Pa>NtiZJpiC-ny?g1PfsI}NZ7jE^a~FF+}+&? zox8icn3$Mw4^*qwgwAL*>Iw$v16o{MbOi$do>r@cx3@Q;(^ZgZno=hn*hE$;6)1`# zv}Usj&&dBn7FOwSIBe@`{PFR@Kp-H@d2(_>^2e*AQmIIN~J~)N+y%iJjG&B2AQVG z)zwugxlkyK40CvRDAiwCSrMLuu!X(9zvtA{lyHKgC?i1~92`(l6rr}y=i|e}gODd} z@-HthrK%kld9nvF(-wOWnka+#{Ca(#V$;JNvHzVC(f1(Bqt zX`Gy#99Vpq=Jk3lAJdmXBw4LixxKyp*O;B19X>ujem33bpl;mU+%OuA4h@OLV$^m0 ztJ6>+hui$r>vfb$C1{!k!!Ypt{EU~E7XX0Y@5k)yEJC3W;_*1Pwze=oKR--)3=Oh7 Zz5!u?$Whet?KZXwhisBuEgiMvI^j z3U5Jhmpkr0u6wSyw)0i%o7wZttTk)a+QjjAM9&6+z5(ANO26W>*$h#}AEKpFNhA_g zDiuTxH1eWAQKQi;77I3;U9DCH0s(py=aWt*6Qj`xieQh&V~U48UzE@18xDuqP9zd0 zlL=A4$^Fr2#N+V}hXZhj!x0LF5H*}m8jr`Z;`{r1AP_*5aT1M2qnKDM78Z+zD1%t7 zR?TJ;6PwM3o&loY?~_EKP@rdk7z_s3qSNUN1_M067Gm3KwIcjXA*;k<@ou*RE|<$8vIKE&@!oE?N~N;VXn_6t`r7SwA)cp`^7(w1 z%SAfk_xsV^@Or&i5#V;a@eQ5p>3lwy$z(1?d^u#a=G+)JmGK{Q-~(K zOuXc?NW+HU2)KhO1SA%VsZ^>j6$^y|gs<1@VG52zU6)Fwn9?p=G?Xj5-F`U&->KE= zAHM+m6^q4uJ`d^LYPHC3AmL%*W!<1%_5DmHV>X*{3%Ca#A0Mey3i{CH;B`0E>-Eq} zv|25?0|tWu-qMxg7bhi=PNyT0NH&{Yuh&;oa2qPmVwe zLxp^KdAYIbCjbBd|NrURi~Ilp00v1!K~w_(h*<|-K5z=L00000NkvXXu0mjf?x!l@ literal 0 HcmV?d00001 diff --git a/core/src/components/spinner/test/size/spinner.e2e.ts-snapshots/spinner-size-medium-md-ltr-Mobile-Firefox-linux.png b/core/src/components/spinner/test/size/spinner.e2e.ts-snapshots/spinner-size-medium-md-ltr-Mobile-Firefox-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..48a527a9e7b578e69c8dc5bfc3275ed6e5b972fe GIT binary patch literal 800 zcmV+*1K<3KP)r(0LI~WoDMH0nP_8OkDnXkP ziy&JBK`DJe5mD_DEbW65xz973sZK};F`p$Y#dFcyoU zsHjMmM1M-@&dv_Hy1KBrxrzGvddZ;~K!UZmx8v#Q31wwv*xTD<|56$UMj{bZRaN2k z_Llh<1OY26E9ma-mXZe!93CEq$K&D7ytJO$La%5x#v$M03 z!#L34aA16VoB`-`o}Ztiq@+YXpiZYlC=_CVp`jtn&(F&OV-Y?)JcvrAk^=&P09spH zoR z;$rTLZZF~R@KCI+t<4y0X=#xJNPzdj93LM;NNG?kEiL5$r_+hi(NRf&@8w1gqtWQA z@U>bkE-x<`WME(b3kwU90Q>vhhi18g=Mrl+TK0*;N1!R2!CxpZyL%*?Q7UM=GBIO^)^aB*?L zKcq{XHvXqFAxRNzZf=hIpuIadIN&}q3h@5^J`4r}C?#p5R4*kaAbNXy zadmaYzoS%A5wEGK;bWg#jHRU|3=R(RQkDLaCK-)JG&eW1A1#VHgzfEZY;A4f=;$b8 zK~%uWS6^RW=6JR?acyl4CX)&G_xCyNp-QEK&*x+9%18TcUz)nqVX;`?_xt|{N(~qt z7;0Ct*|&}G>gpPx#1am@3R0s$N2z&@+hyVZrK}keGR7i=<*0E0NP#6dB?=(PaEnz|FB56#gF2cea zFfr&eIA}T<1_=wVz)Kk71dEG777|DR6FV6b2T8yV;9zX1Nn_-HhwD9hL?V|<&Ha)y zoc5gmuQ}~$%K(6Wu%w^F{vXhF-Jb)y-7e|6PM4RL!HD=!olXa;s)C5Hv9W={V1QK@ z2Ol3Fkw_#!L?9wC#!#(Rg99zg;usO3R;#TXPqNqnnu#*=B9Aaw(XUHpR+VgBPkw_ zQ!<$h95f7rVzJoomv^yP6gK|d-Q7Pw{{4O*ilXq`QmF*sZQ~DzLxjU&elnd-P$-m0B#0X0#G1q5 zaJ$`x=ytn-KtLfZ)ZA*dL^2YIC?|g-d%fPtWa4tUMx&8dt5puO^?D5wDxc4*A_chL z?~BUk^AVNCw%aWRyYtx~t!4gYvNZZ;bw0U5-9xS9?sZ^wBX0!Qvz3z59X(p9Qp=PNO zxwo67*XzY%G5NOPL(OK>@Av=G`P)GXT7?TQvNJTkuu4|U_lhwOrjWMS7dNElMF&x6qzweq?AmOOa{py zlKfuh=v8{XbuaJxY`^oI^Z9+B^L)?4u$RC;4CcQAce@?l-rm6Fa-Y_GQ@G#nVYOPJ zQmIfV6kZ2991b*_O$zFCI|SHWUg$B9UOdUOxpCi9}S)g$1V9>#;_ok%E@XB|bhregwVr0CKsUp6U1dV2;Nl zOJ2wMd`6?ufZcBY5wKpb!|8N_!{Oj?I9zR`R;w|cPGK^c(Cv1?%YB&CwhlUb=$Dyi>?O&-NB1c>tDiy>v>00000NkvXX Hu0mjfnQsF- literal 0 HcmV?d00001 diff --git a/core/src/components/spinner/test/size/spinner.e2e.ts-snapshots/spinner-size-small-md-ltr-Mobile-Safari-linux.png b/core/src/components/spinner/test/size/spinner.e2e.ts-snapshots/spinner-size-small-md-ltr-Mobile-Safari-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..adde2f796597dc3cc3c4847e4d93fe270c8e3b94 GIT binary patch literal 491 zcmVPx#1am@3R0s$N2z&@+hyVZql}SWFR5*>T)iH{~Ko|w!m%%y+DXapDjY0&8Sa<~s zu@*t_0xEb43wtX|5w!6FY4irM6cw$5f+mmw-xj;huEd31{7S7>BLD)R<2ZaZAj#Qmrm%Xw{xYUO+qMaSmSxfR z{dnMhzgJ&3olaw6Bq>&_l^V}-xg2jo0Epx92msJ^9hpofKB(*Z=ZSc|$CJq3 zG=eA=ivWPr>4d}K@NaCl+u?jZ0|0E>2Es6;5P|@>SS1v1lh5Y~ zfR##xQp!JLQc9LeB?4ffP$2o$hvV^BwNAg^|1;R@_0)5d$>bX($ws50Znj!2dY<Jqo;BF6!3-&@c=RheNuqtBPIM8RrS zVVWjWsZ`{8x7&>@)d%n%$8l(yW(4^8g5`4gbT~Bf`4(`y-LTzmvDs{}UayfzB#_JH hkj-Y1PN#oe2p=9%=h&wsW}W~5002ovPDHLkV1i1u*Y5xT literal 0 HcmV?d00001 diff --git a/core/src/components/spinner/test/size/spinner.e2e.ts-snapshots/spinner-size-xlarge-md-ltr-Mobile-Chrome-linux.png b/core/src/components/spinner/test/size/spinner.e2e.ts-snapshots/spinner-size-xlarge-md-ltr-Mobile-Chrome-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..1695dbf30cd3cbcecb84c1456716693f633455f2 GIT binary patch literal 1071 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 IM6N<$f;Nn#AOHXW literal 0 HcmV?d00001 diff --git a/core/src/themes/ionic/default.tokens.ts b/core/src/themes/ionic/default.tokens.ts index 10687c955ea..3f6403146de 100644 --- a/core/src/themes/ionic/default.tokens.ts +++ b/core/src/themes/ionic/default.tokens.ts @@ -25,6 +25,10 @@ export const defaultTheme: DefaultTheme = { shape: 'round', size: 'large', }, + + IonSpinner: { + size: 'xsmall', + }, }, }, @@ -261,5 +265,73 @@ export const defaultTheme: DefaultTheme = { }, }, }, + + IonSpinner: { + color: '#626262', + + lines: { + stroke: { + width: 'var(--ion-scaling-150)', + }, + + small: { + stroke: { + width: 'var(--ion-scaling-150)', + }, + }, + + sharp: { + stroke: { + width: 'var(--ion-scaling-100)', + }, + + small: { + stroke: { + width: 'var(--ion-scaling-100)', + }, + }, + }, + }, + + circular: { + stroke: { + width: '5.6', + }, + }, + + crescent: { + stroke: { + width: 'var(--ion-scaling-100)', + }, + }, + + // Sizes + size: { + xsmall: { + width: 'var(--ion-scaling-xs)', + height: 'var(--ion-scaling-xs)', + }, + + small: { + width: 'var(--ion-scaling-md)', + height: 'var(--ion-scaling-md)', + }, + + medium: { + width: 'var(--ion-scaling-lg)', + height: 'var(--ion-scaling-lg)', + }, + + large: { + width: 'var(--ion-scaling-xl)', + height: 'var(--ion-scaling-xl)', + }, + + xlarge: { + width: 'var(--ion-scaling-xxl)', + height: 'var(--ion-scaling-xxl)', + }, + }, + }, }, }; diff --git a/core/src/themes/ios/default.tokens.ts b/core/src/themes/ios/default.tokens.ts index c426ff9ab65..41c60aa3db3 100644 --- a/core/src/themes/ios/default.tokens.ts +++ b/core/src/themes/ios/default.tokens.ts @@ -32,6 +32,10 @@ export const defaultTheme: DefaultTheme = { shape: 'soft', size: 'large', }, + + IonSpinner: { + size: 'medium', + }, }, }, @@ -400,5 +404,73 @@ export const defaultTheme: DefaultTheme = { }, }, }, + + IonSpinner: { + color: 'var(--ion-text-color, #000)', + + lines: { + stroke: { + width: '7px', + }, + + small: { + stroke: { + width: '7px', + }, + }, + + sharp: { + stroke: { + width: 'var(--ion-scaling-100)', + }, + + small: { + stroke: { + width: 'var(--ion-scaling-100)', + }, + }, + }, + }, + + circular: { + stroke: { + width: '5.6', + }, + }, + + crescent: { + stroke: { + width: 'var(--ion-scaling-100)', + }, + }, + + // Sizes + size: { + xsmall: { + width: 'var(--ion-scaling-400)', + height: 'var(--ion-scaling-400)', + }, + + small: { + width: 'var(--ion-scaling-xxs)', + height: 'var(--ion-scaling-xxs)', + }, + + medium: { + width: 'var(--ion-scaling-sm)', + height: 'var(--ion-scaling-sm)', + }, + + large: { + width: 'var(--ion-scaling-lg)', + height: 'var(--ion-scaling-lg)', + }, + + xlarge: { + width: 'var(--ion-scaling-xxxl)', + height: 'var(--ion-scaling-xxxl)', + }, + }, + }, }, }; diff --git a/core/src/themes/md/default.tokens.ts b/core/src/themes/md/default.tokens.ts index 6de8c3c547b..61617bd3817 100644 --- a/core/src/themes/md/default.tokens.ts +++ b/core/src/themes/md/default.tokens.ts @@ -35,6 +35,10 @@ export const defaultTheme: DefaultTheme = { shape: 'soft', size: 'large', }, + + IonSpinner: { + size: 'medium', + }, }, }, @@ -397,5 +401,73 @@ export const defaultTheme: DefaultTheme = { }, }, }, + + IonSpinner: { + color: 'var(--ion-text-color, #000)', + + lines: { + stroke: { + width: '7px', + }, + + small: { + stroke: { + width: '7px', + }, + }, + + sharp: { + stroke: { + width: 'var(--ion-scaling-100)', + }, + + small: { + stroke: { + width: 'var(--ion-scaling-100)', + }, + }, + }, + }, + + circular: { + stroke: { + width: '5.6', + }, + }, + + crescent: { + stroke: { + width: 'var(--ion-scaling-100)', + }, + }, + + // Sizes + size: { + xsmall: { + width: 'var(--ion-scaling-xxxs)', + height: 'var(--ion-scaling-xxxs)', + }, + + small: { + width: 'var(--ion-scaling-xxs)', + height: 'var(--ion-scaling-xxs)', + }, + + medium: { + width: 'var(--ion-scaling-sm)', + height: 'var(--ion-scaling-sm)', + }, + + large: { + width: 'var(--ion-scaling-lg)', + height: 'var(--ion-scaling-lg)', + }, + + xlarge: { + width: 'var(--ion-scaling-xxxl)', + height: 'var(--ion-scaling-xxxl)', + }, + }, + }, }, }; diff --git a/core/src/themes/themes.interfaces.ts b/core/src/themes/themes.interfaces.ts index dd236fff88b..59b77807bea 100644 --- a/core/src/themes/themes.interfaces.ts +++ b/core/src/themes/themes.interfaces.ts @@ -245,6 +245,7 @@ export type BaseTheme = { export type IonicConfig = IonicGlobalConfig & { components?: { IonChip?: IonChipConfig; + IonSpinner?: any; }; }; @@ -282,6 +283,7 @@ export type DefaultTheme = BaseTheme & { type Components = { IonChip?: IonChipRecipe; + IonSpinner?: any; IonCard?: any; IonItem?: any; From 5eee3a88a256f273dd0238ef1299e63ef69d03d8 Mon Sep 17 00:00:00 2001 From: Maria Hutt Date: Tue, 17 Mar 2026 15:17:19 -0700 Subject: [PATCH 02/16] chore(spinner): run build --- core/api.txt | 5 +---- packages/angular/src/directives/proxies.ts | 4 ++-- packages/angular/standalone/src/directives/proxies.ts | 4 ++-- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/core/api.txt b/core/api.txt index 9551b242b94..51133cd2a78 100644 --- a/core/api.txt +++ b/core/api.txt @@ -2309,10 +2309,7 @@ ion-spinner,prop,mode,"ios" | "md",undefined,false,false ion-spinner,prop,name,"bubbles" | "circles" | "circular" | "crescent" | "dots" | "lines" | "lines-sharp" | "lines-sharp-small" | "lines-small" | undefined,undefined,false,false ion-spinner,prop,paused,boolean,false,false,false ion-spinner,prop,size,"large" | "medium" | "small" | "xlarge" | "xsmall" | undefined,undefined,false,false -ion-spinner,prop,theme,"ios" | "md" | "ionic",undefined,false,false -ion-spinner,css-prop,--color,ionic -ion-spinner,css-prop,--color,ios -ion-spinner,css-prop,--color,md +ion-spinner,css-prop,--color ion-split-pane,shadow ion-split-pane,prop,contentId,string | undefined,undefined,false,true diff --git a/packages/angular/src/directives/proxies.ts b/packages/angular/src/directives/proxies.ts index 19731f54a06..b74882e957e 100644 --- a/packages/angular/src/directives/proxies.ts +++ b/packages/angular/src/directives/proxies.ts @@ -2286,14 +2286,14 @@ export declare interface IonSkeletonText extends Components.IonSkeletonText {} @ProxyCmp({ - inputs: ['color', 'duration', 'mode', 'name', 'paused', 'size', 'theme'] + inputs: ['color', 'duration', 'mode', 'name', 'paused', 'size'] }) @Component({ selector: 'ion-spinner', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property - inputs: ['color', 'duration', 'mode', 'name', 'paused', 'size', 'theme'], + inputs: ['color', 'duration', 'mode', 'name', 'paused', 'size'], }) export class IonSpinner { protected el: HTMLIonSpinnerElement; diff --git a/packages/angular/standalone/src/directives/proxies.ts b/packages/angular/standalone/src/directives/proxies.ts index 15cfacbfdc1..49ce468b73f 100644 --- a/packages/angular/standalone/src/directives/proxies.ts +++ b/packages/angular/standalone/src/directives/proxies.ts @@ -2023,14 +2023,14 @@ export declare interface IonSkeletonText extends Components.IonSkeletonText {} @ProxyCmp({ defineCustomElementFn: defineIonSpinner, - inputs: ['color', 'duration', 'mode', 'name', 'paused', 'size', 'theme'] + inputs: ['color', 'duration', 'mode', 'name', 'paused', 'size'] }) @Component({ selector: 'ion-spinner', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property - inputs: ['color', 'duration', 'mode', 'name', 'paused', 'size', 'theme'], + inputs: ['color', 'duration', 'mode', 'name', 'paused', 'size'], standalone: true }) export class IonSpinner { From 75a325a8896651a2a1804725e05e97f72d9a29f6 Mon Sep 17 00:00:00 2001 From: Maria Hutt Date: Tue, 17 Mar 2026 15:26:47 -0700 Subject: [PATCH 03/16] test(color): update test page and snapshots --- .../components/spinner/test/color/index.html | 27 ++++++++++------- .../spinner/test/color/spinner.e2e.ts | 28 +++++++++++++----- ...-color-diff-md-ltr-Mobile-Chrome-linux.png | Bin 25125 -> 6008 bytes ...color-diff-md-ltr-Mobile-Firefox-linux.png | Bin 32654 -> 6929 bytes ...-color-diff-md-ltr-Mobile-Safari-linux.png | Bin 31811 -> 7007 bytes 5 files changed, 36 insertions(+), 19 deletions(-) diff --git a/core/src/components/spinner/test/color/index.html b/core/src/components/spinner/test/color/index.html index 1fa807c42b1..2da1af778ae 100644 --- a/core/src/components/spinner/test/color/index.html +++ b/core/src/components/spinner/test/color/index.html @@ -17,7 +17,7 @@ display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 150px), 1fr)); gap: 20px; - margin-bottom: 40px; + margin-top: 40px; } @@ -33,43 +33,48 @@
- +

Primary

- +

Secondary

- +

Tertiary

- +

Success

- +

Warning

- +

Danger

- -

Dark

+ +

Light

- -

Paused (Medium)

+ +

Medium

+
+ +
+ +

Dark

diff --git a/core/src/components/spinner/test/color/spinner.e2e.ts b/core/src/components/spinner/test/color/spinner.e2e.ts index 89e1ce0e35a..bf445f883e6 100644 --- a/core/src/components/spinner/test/color/spinner.e2e.ts +++ b/core/src/components/spinner/test/color/spinner.e2e.ts @@ -6,15 +6,27 @@ import { configs, test } from '@utils/test/playwright'; */ configs({ directions: ['ltr'], modes: ['md'] }).forEach(({ title, screenshot, config }) => { test.describe(title('spinner: color'), () => { - test.beforeEach(async ({ page }) => { - await page.goto('/src/components/spinner/test/color', config); - }); - test.describe('spinner: visual regression tests', () => { - test('should not have visual regressions', async ({ page }) => { - await page.setIonViewport(); + test('should not have visual regressions', async ({ page }) => { + await page.setContent( + ` +
+ + + + + + + + + +
+ `, + config + ); + + const container = page.locator('.container'); - await expect(page).toHaveScreenshot(screenshot(`spinner-color-diff`)); - }); + await expect(container).toHaveScreenshot(screenshot(`spinner-color-diff`)); }); }); }); diff --git a/core/src/components/spinner/test/color/spinner.e2e.ts-snapshots/spinner-color-diff-md-ltr-Mobile-Chrome-linux.png b/core/src/components/spinner/test/color/spinner.e2e.ts-snapshots/spinner-color-diff-md-ltr-Mobile-Chrome-linux.png index f745a35fc42d243f338043a9e29215a4b07e2327..74c4099e1333c1cd86663dd99a965ae3a28e5329 100644 GIT binary patch literal 6008 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 literal 25125 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 LeXsm`k7s`cKGy4b diff --git a/core/src/components/spinner/test/color/spinner.e2e.ts-snapshots/spinner-color-diff-md-ltr-Mobile-Firefox-linux.png b/core/src/components/spinner/test/color/spinner.e2e.ts-snapshots/spinner-color-diff-md-ltr-Mobile-Firefox-linux.png index a3d8e1fe23bde2c9c241a502e21f3d5eb1cfcc24..798071b0a8c8f64636d77ae94634efe0b1d8981b 100644 GIT binary patch literal 6929 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 bxFcafyOh28b>00i>Oup{s7TjJnuh-$##mv1 literal 32654 zcmd43byQT*-#1DOFheu6_tD>T*K?o0?ppW0?|Ro7U28Zo`|PvN-k!w90s_JW z0s^8*I4Sr`a9vvo0RcCGuBMuK@RiMcl6r>z(bp7l3)|FPpGBh<&WQwbH^Zp5VZRru zyLbmwX!BHkDPXt2_CH%*?bDmKzp93}ZCe7V$>xS{Ui$6xYkaG^oK-zcI`=&`5(a%b ziK2`d5aHtgzDDz?;umh+{kw(Rnh0!=|F=N^c}$&7fB+vkqeulr|NS}==nIUJFj2E} z*4-!*I)t5H74MtJY76bC+DZEu3wv9&rl|}4iXS-F|6vFDKE#F|?5IstUglww_0D{g zBmSoK)^|+!@qy`MRl+ihitOHax}F;YVMo8RG~%dr*N5|0ztwaEz2tK63I6fL~~`O=g;WzWZ{W zzIQx5K9sui%QMLg!KK{xa(Hyy%^Y@*glL(r@^Su>f% zB$Y#f?}<)YHW>{kw%okz>YpE9jnqDOM0DiI`Kc#pg8%b2dUDvdW*YRtrYFTa?_}q( z`4{m!W83H{l;gKP%#pyM&^Qyrt<1@1z~Z7}EkEBL zW?QRYW>r)0Cv>Sd;kol`@~r*RE3aO@eQ-g4IA4Ju?!_o%j+Hmqbahm?wau_{q5WWq z;=YX61B3jF7N@62K7mxpErt(egd&{X2g*bo+U;aKr?^40Ycvy(TK?<9Reg@PtNGF| zxQ`i!M0cG2(MO=1k8ZOBA#y1^7doTd+t((_ErjI*){>XxgLfR4oh0mQ9iuisHC^IV z4lO-k60@_GOlA_bp)Ev+@jLl&O>G5!pR@m&phd_8o2+rLDkAlJf+s*6kb(|}Ij_Ry zyM!#tpR$*g(M#z(Nx=OI`S?_K_3LQK&|vpamM}kuLXfn~3qB+^UL(HVqGIC9C!db2 zMz2q#bco7MKV|mfvS$YOO%vi8m%`3YU)|iA8P9d;TDLia?;8{-US8@;sd)Kbv-=0T zzJicj2PbXWVozMf8rH^Eh@f*Sy|wGOUf!<7Un~62SAHHd_8$3K&S$4r+aKAn8IVI8H-^X%#uuQWm z-H;C(e(laS=(8!8Epizhus&=t89CZpP1Jb(1Ny$COYDr&@$vqMP;$`L%!MrG&JC9R zjftv<7bndz+^L8A>p5^bG!~48z?Oz7zZ)%i?;gsMAue2Qjg+Z|A&{khB}Vx+37nRP zv@133fAqGh9lH{6JYl(snlEpDed@Q|Clmpbd`+FIO@vusgRU<3&$r2%Yv74~?!T%R zb^SUi|9D$Sz-p%Ss3y_45uE-;tWep53m)b9YIjMgV0FQ{7x1bFdI3M=n4dkje|ghn z3k-r%b&Xxvxcp{wsi}4C8VYS{V)WFnzYa~MFNP-cO zY$cAbcWYOSgJD%wh`i|$UhyN3RC2aHHND9ewOtv&^Yr0+?ps#bSe&ruVHa2mVpQ87 zU;j|_vGtZuVEYBUM9l+rPfkfNx{2Yu_Y+}xn7lUE)i*g-MX_y~t3z290_5`4EZvT! z=RR(NKS$G2QaZ<{Kj1?aFN%6JQB0~8bdAxz(W&mtQ2XLKoL5FY-Fi=z8g6lomIzm2 zu&+=Y9cjL*?Id&bRO4P2?xrKI0T-g|}kaFxKSY@C)z5McKnSbSk zCeb1XCc^MuZ2i$KJJkty1zu1|2P;R{8+Es+>S`9Lz8P`Rk&Cs2%A9?Rm4i z-0Cb&Gl8NBxF=!87|-x)!9<7y7~y9vBFWpm@0-*e=i8UVT)V%1jMU-6C5H=~z10Cf% zoF^ZUT%vO4mqGi{wt|{B(II?=*Rfz$_pxcIUY1aFT`pf~gIW>8q$#5E)gqr;I}@#_ z+^x)xBFc#|2~I`+s6>$}%_-@X*dc)`34*QqJea!ifUaYclP-pR>n?inZT>Yj1Y z%OqIwRE3o|cpTHpH`FrD?fxt^c~Z_Fz3a@C1@d7k@6K&HCD&M7Tj09=#mO|hL20W*x8tOzW5%q4o z1{DR0C?pGU!E)q)jTBr0*IA#42%!Oe;%}Av^#uijo-cEEx&KqBQ8!*$06Bbo@i`SD zm3>&V)T*S3yy)oL;NYj5w5582)!?J~z06D931z=&(|JB3)(qjwT-uzwy! zM@gbrVm`yl>%HgN%7WBO&-(4stvlk;ULOWDR|sB`gVW>b<@ooZc>Q* zwa|5UBUJH4q&;Ww%u#Q{D=_rhzUSogpb6dJ&4w6u*5roX2A-20J0v$D_=F*hF+WxZ z=l)`|8n`j$cq7PP3OowX!kdU|SDa>pfY$*dVGS*!13fedfvrd`y2sdq5ARmYp~F;t z0N8q!@LUBt;|>q_qVn>79yxT_7sE(&p{&U-9U^eXaLq{cqK@o6GZgg0ub?018#?{_ z!)eeDe{uB}`uoGO;D_flr@8+AFdg{9_1VBE210y4_*C)l9||1tKxa@vtKxT_JRB_h z+oU;|0P;5dwFu}83p(IS_|5b3j8K!_KP1pn_bJ*;gU)aqPoUME=FL~44mIgE{bTGG z!^{(~>_Ha=4+PjGP28b9)2imm;6quT6)<7#E%uNd9_&8(^W^^5j+5)B|E>&%iGqN| zdP>Cdr7!ObdF`5gk;h{gPi_2iL&Qe_%Ir{y5oGVdNHQYz;29i69 z0OhEQ>Bb>=4v6uckDwKz)MK(*5Fh+|JO2-HRHqS00y?-Ig~-?F zKc+hI6XM})GL?UxXfFNQ`ou-&{4t2OxD`$whk&lNR!@~ecG1U6HmZZ}Hu=w; z#h$bWs*Yq%f?R6tP|v6mof>vZix+MQa5EGZD2KUENrX~n#MRc{U8wHv=-|%d08rYI zu9hKOYTl&u5mlC<9;TiH7n@K-Ywf@?oDGmtEh3lydEG-}v{UJIQ?!#9IYUC{X}9k$ zaPBCr&QLd}Sqqkoi8Ccir*0gY&f0n+i0Ch$#hxZ5SDHN`OL4-$#6 zUFa4<_dq_%I2PCN+Lzu0x+Ty@D|#Nf*`VJX5v5I?Qe0g=@V{F+-3s|KJ55msuc57k zNO&r=FV)|D3BN7!?fo5Q;Hy5Y`QF0s=)WWbaEWj-XvjhAVPQAF_vaDU)4d%Xq)h$5 zo{=O**Rw|jS_r`Bif-pJTJq*9#n<+o`_Yn5jTpXKu2R&%der_kEq-0!u~j^nPs8e! z@n);Vse0^KO83#qEUo{;qRm0986D&s`4XvbzTRdbHEz(_Hq9a~5f}MXu z!7PT|7%Mx;j_Md0@$q5jXOe);3Lzg`H(@pJ&&xcZE4_d(mEBGdnc5u+_Qob@#!+)z z-CG&-Kl}-E-&5#dpz1-sej6uZu{pTE) zGtdP_wD0Y~92nqsW*-HA{-flQk&GO^RPng3Qh8@ajwHa(&)K_6Mi-BcfuI`4_fJhV zfGmtGwN%+QWhc<{4*|}>tDVepo4U)@p~?GmhREgT1G$nePrX0Clo_Gf#;uP$((g-V zeFj##kB`-eOOE`kdPpdkun_n8^5F@R--!K|ee6jFpneLf^rPbzaqoM{v`cmP?!8vO~ zeV{A;&;$PFSlSRCBBCF3)}$bJsPC!EE?h72d0%htmF%V*rL*th@SVYryHS3wKPeZ> zLiiR1PfCs*(!kP}1Mu>leC%vXfDX7M5%9EUnLg8#Pazg!qv5&|CIiS8V|G^^ zgwyRwXAB=m>jG5mp;&V5O}3Q#m;kHP)p!QLF#yBB;L%#96*qAsMvs(5!QayXYoJh9 zy7PP6!l|G@>5ksJ2N#|JcD!8RjQn(|Ju6waTW|Jyp-AfQ;bj{CjlMgF7hUA6)|ZX%c%c0b_pYs~)^#^v zkXY9=c6n3x@p4`;<>#1{7zvh;9epi%bai*>wN${G0Wal%U?)OD&JlvqtvG<~g~{3@ z&cY$;?EhXu&clv=*yemZjNKO;khR=*2SGM zc7FVciU%Yz-M%%5wZ|SFwl&*g2B@W5oV`miH{KJD^6&yx%Bl- zn$)dN!Y#jl^te3{y{FW+a`sVqJz}R@;c~#2j-AYj%b;&aLK3e#STnJ@(M^-fdVOj% zOk@;xHNj-?844)`Z5rnQzVRYc)YkG!N4O}U%-ILK%fhJ0C$T8`)b`q|1so9x`9L!3d1ZP;yjffD?$|oSEK>u4w4oO%%}-U5FXLqsNF8(`I|vEbRMwxL z-zoy$^Y;>EnZr-6$0|#l-54z%94)z&^`w8B&?SyT-d__C`NCdlhxSmWnzY$VMVbj? z)v)E>2;VFTCv~;qYk>Opc>q$3g*fy$e+poNci>;p$ZMp^8B}L&h#<>2o!*R1LFE{m z=ohct=JlcqXznVVdKJK*mnXGfE3J-)S@!szO32CL3~Og%jXM*(0sYa-6evt}xsW<8 zt1c#yIS%-pMJyFtvE|pb)hb$6oINQei{nZmf*>z2Q{YVLS?V|R*CgMZX93al34z}x zbis3!eB#0%na+HA-Ln3=$px9r((ZI&H5Q6i>bI-lann<*Z;xi<>9zwH!K$?Yh(5YN zbXlFMb16TzI1d-<4w$UA-!GV_PQ?L)^=Q(cVe7~^CNug)pprB8KKmo*Z(Y-k^ghq5 zI~KIi4i9Rd-->V7HMG(sstYlv>Z)hFz|PmLIhes~R&i@n$ZH3vEF3TncJ#}IEFyd9leiP-jORh|Up#o*O3el*VLZ4@;!ssYQS#`cObkq*HFcKL zg)RC1i9mLx)Zp8%6B)o8Ur5T@$6b|!1O9IiyA~x~4 zS!P_fAbJJ&nUFHe2pjrDlTkid#%reZQI5#vqEw!*DSI>b_%EG{t4x5EXBlVVf>?T9 z-TA!&WH`0*hX(sh)oYk~UwTeeoZP}!uN4*v89@6YaOt#C6y8mDbsuLSw(uGs$~z6d zli_F-ghmyU|-TOCWJd?*U*r{_Qr_ejx4~iV1fWt=&i#WlM4>8!z#0zmwg88GdYe0qbhjo zD^i0+gnyq|{n^-_^be*vUC_z6;9<$wI+-!q$X?qtg6NLRr=PnYV}GyA$qmUcwFUpDVv#o1`&Jyr^;xK!ICy z0FD`)sUQr-&AE31e0`!~j5FDHjDreJFA1psu~MF74mR@ImjkKK2A}#mzOJ*f<*e!!CA>JuTd6U)DZ~Pzll- z4t#Xj41&=PECpVg2Cpj{5=6#mh~;{rhPzWYe>V<8|v3`m~bNUG>xW8gcWoyVt40nuOsWe`nj_pKaQBqo*S*Ml0+js*ST}nNCH?;jc>sbiDnveK~4|7-{kW{W;d=2DpxpYlVt8+Ll32}LaUwll`#e9j?$*5pmo zh9~k_@NZi_I{DBZzbT7(PM7_$(m%EL`I63vX9ED7Vp+mg#aP%rN8@Y$=H*-4v-sWw z`ZvG_d1hW_+J3^eclKmb12fkVAr82G-JlCtG)-HBybgcQNAOyTFa=G)`sio%I;+r8 zc-j0r#;)7VPx(v~H58}Ec0J@H*6+97IWzglpDZ+=JjM5Ec-EqyjagT4lx-#G8_rOn zX$_`Pc)W4;PH`6Js}B^ntAHi!O*%xB^=<-2gSk|oSpK@gs^%#`zt3-eHH~s9H7iLq z$dyp*j-{$dRS7?~ejw{32D~-%{`0`dd3F0|29WuuFWmCjLftMieU<^tl|f*;Sp+`? zAd`sy_tE!`3P~|wv{ad|=aex-Zx*{_%+^&O`}%Mj*En=!14(xX2%;FkDmD%POXAgtrF`zYsQ%Lp=;ZDq zEIxpgCQquJ9UKBF2he9JKp~QruAlRssdc*hhkO`N}sWkIt$^#IX9C3$i z0KtcVVKqMM%f8<|@}S|ys5Y&u`ZmRWXIK(2uE@tPcuc&l{tml@CcH%laixVa{>bD|CX4PG93`jGWpQm*UZm-=9O0+ zCHqOK&J6&{mgUHOOZw&)<5fFUFzt={7*#4xMQcb~)#L>OS{onFF8>?}(PyD3+ya+E zkO4vlN8e4;PqQ28WB@dY^NFy&=oP7M_gtDjL|ymK98ufinS}s}m;;wNdH)sT`GhjF z67r0(W-^KRKeF?oJm+2CO6&=lm!|&-1tcmcj6WEOXikdUM*FQzm|ecT@SyE%$0SAG z;ES=Ts1~v)p>1%M%m%Hje=@bIP-NqMfqxz2l5p%F3->*i!=#{`VG` z>e&d?jXTGM>bk{DG6n)IlFy5JQ~umoz3M&O7!bJEnD-diVY$S^T(J(Wl^Kte?iAyQ zh#dducK|c5!9C{g-NH&H;V(cG5!7+M!g&$s9Z#N&t;NgO$o1OX0W9%7Jg`f$J4Btu zH>|SFs>x?MAA?;-%s?z01^h52IFq)Wd2sEjE_#|t&ALHgDqU?+>1nOdIrmLKKF zsQ>hHMPvfLCmjBuD@r|*jx*`ph4Ol@PnHQuuGT*_ju+md3TX3z_fK-4jHRbg!%o^Q z?Y(UbIb-s=7O;RV7#9oF(`zd_y>-s(%OlLW)gJqDcH1@oo_e=%2`p0MuSf#C;>v!; zl-IO{?3de8O!a8qcknoy0b$5pR zr(p}68^;8`pwjk9tqkN5sEedcP?S3vvLO^7#u8$KKTT6{Do45Dt8$NtAE`Bp$fB zS~jH-gRbW$du_Qk5z8TmoHjfmgoJjF7l=D_mA~jnr9Kzt{yGDXVfl)P?%gCYUjcFs}^@wZSVFv>j-8y-u?#N|4(OC#aB zKrzNW8~kAtVy8q_*J!^uf}HI4QOwp`zNH(cvGj7j>AvC+QNGH6h z_%1?j*5vdIrC64O`WvIlZxBGGPpx310%E9HsCz;BU$`G+yl2V>O~c@mHR6!g`}aapOEoQ`j#{Zu=WW z3+*fuGe9ellaagCdx%Pnzr$k}{W+}#3+vZmv-0gjSWLm#6YdhmG0B`Y~g-17MWYbq6KTr`e1 zz!vqsmfq{AE!mIcK29!d$y%25oh@>aG{eh zu)6F9N-}i5Uh3MNc4nZK%&GxQ`{CNO32Vz@vftYo4|$PSBooIC?Dj)X?-h=}c5XV8f&@O8;%`hyFs8lwjpSokmyUC9%M*vh6+^uK7~sAS5B$XQFvO-as$UOQ?v{2+(Y)ZV73|LDBytWBObqCf zrtdwFu$d#kxx7y!$oLt&O(0LKXs7+ch#=wCrda3O0%pPtenfC|WWSd4_#&Iy9FZ+w z0MVtl_a^_*OkZdVk&AQ~MJ2t9EB!yZNka#x!|%MG{j1r4KQRMlX$KovgP7&Q2w;|{ zp||8^|1wKFV3t~uo<@-y6Uqjw!K}@>(#}q5X zqz~i)ZGSZHX!O_7wL^gvU<~IcU=pQAJ_20-;E-zV$6sZE5qQy7U+P5vw;u!&Yj51p z_@V=O`G1WhiiAMlDHq;hCjMr=ScZr_0qqLIUqvDf@kIzp8^8EYYp$Isfm7${ygHu6 z?X*c3&~%`7B7K73rjH+qhksx_$I(3)oJKQO3Q=tfLekOH%ff=_ybNK5)`9pxO2mjK?Ex{w5x^186tlO1GAd2+n)mn&&9A$D zo2csRf;2z~@Zx$b9)cK_wAYMud}p<7lM%?wJ=Q;)=xe(6hN;ZDt_ZS~B={lqY#(-$ zF5zcKqR8RuC^uT0iM37}leo?_H#{=;#@2PDz+T9zy0Z0unsi@s)kxPLHUZiHsH-n*IK36DShqXe|M4Z;j-XO*N+s z&AN9{h5J(dY?IF;U_Kkm2lrNk7@v^I6YVSj^jO7d`kMgp44lotGKgQX+gl$I2h=bF z;&cEBJXMXl#O?X>dpY)Pfs!rYjgPCTAkqkw3mth=7R~ON1NVu_vbB1@W$i#^_8-7| z$-15eB7rZ1w#wOMU{HU5Kj|HBbE=VznBx(YK5H`$I;TG^>yrTl`6#fdd9+A-v%n6A^T*L0Q zp-f%GIm@5Lt_AnxfHz@NbqUzCHjSQTMln1_SwdN=r5lqqHJZ*N1xi94Q4;rDv%3v} z^D;|_)A^M3ShT#-mlLN)kJyB#&%dWsNC6|0?K{_=4CF~8b>49wgGV<9h(zV-9FTM@ z54BoQ14lBV-D&(l`J2x=>C&L3^;Wi^nRb<9)qPQXq#0np@7?UDHs&qxs_^SWnSw-q zs?C7fxw-SEM)XLC#cTR5Yg{K)fNhckpwznvIFdQFJYc(hW`J{w0CU*_B@W2fx3xm4 zJDN+7br#88Kh;tw^%XP*EE3F&(W9D60824%UX<2ors^g@bygF#mI4}!DE}a>As`G! zrXC#VLYsp%%r#m>;aZ)6cnOidIN77L!7(NDBF{z-yyo|Hi8H5~S%$oR+Km)Rrj|UGv zMUYl0k;XRRqZ_dSXzk?EJ$`uq2Qatf@hm*Y&bA4BeDUBkm0hVoivDqzuqLwjrgu?s zRqe+(mna^8EetTh%h>TP(;HleX^g^_r3WgNV9W>w`P5)B2D!#cD&Ib9R_$ zHm-smFfGUW4^L=1gCwRH(!XsT!0Qmec9HhL?!YF3K)!etJ`Boz!J+sJ@=5pYN1+ zPs@Drs4?sO`)WtwS%y6N#_Bi5K6IYi4K zs+-Jm0x||$Oo)}s3(3r)HViPnJ>oAOn^Scg0hk4Ro=%wva`eF>;-=R)XC9WDA(n$M zV`*k|wpbp4>8PW4crmb?JgjTsN8S0(d)pI1NV(r&`Y}f*g*f&Te~`GaqdLyqYb7k; zd-AY{6U)5=Zx%tSPSjNvs;^D(2a~)>lIAF-87PY-bNyX?G-jo!@nNX;?CWTaWf+b{ zM(AGchNhq(JLe{d_z7LEvXDIi%EnNk6A8_z^C?L0R-InpPca?<1l&A>$uE3AA10JZ zYt^5~MKf8*&Oqv?YDBOUC4|OgEyizs*5zL7aD8{qqVTG_fKS+uFZdyg(EWF^8x|N^ zs&GAAD6y5mXnI8D=3=j;_AynR9oT=V6A@xnneo=jMpw5sFa1bQV`;X-csoyC zpKBNTSW*nv^K@dQqIg}d@^Yf&hKKp9&S|HgiQ@u!tT5tOc0%Xl;#hyPcL{(s)xVfH z1D=;TmSi&4(eYW*R9g%7aT>^@RqT!3{Q9vhQDka9;;d?BIbUC3RV$0J&$9;W7?^@P zYVeqhR>UWl)N~Q(I+%wSZor*TwW?F36%n}H9T9aP>5N$e`<#YLxpdD7CotN+B!?v-eXIwjee&!8B2waw=(Q*E1_223N_LlLlCI9RVzV8tx~I{6;ZkOSqDo zAehe?tjT&f11d(-(qHQST#Fa~3ppU{!V4F-$R1MGkWN-sI+8i@O0~by?Slg5!`u+`&xU^+E%mLQoANarulvF2S|$$9B>=g7^Ue%M;AeyCp`H|A8I6RgpPqWPKA;#90FH%nsld^k?(SO#~K0q~+ zy7KO!6|E8Ud^a0G8j5dF4deZ}Z~IYQA4<-*xeM42Uy9)Q9(gvnz3GHMA9wmjCAZO2 z*&5SP=${Cp0FX%~1-r?NFjzkD#v}4IX_fu^&@4hspOTpdGw1J50L>2C=`k~uizWSC zvv@(Bf|BM(!PK`Y;}=X!WiG+C+Q(N@8;@k3#-jd!r&D zrtv)6-1CzZ)b6{_cTZ*SEB&PbFCbTargQEUUCZ@grnfuE7PJ&z!L2vT-=dv*<|7BUfK^V3y!N;8fVpF9Y*8daT$kc+Hqs+qD!OKnrObbQWEFu1Z8Z5-xYg zt@6J`0MEY*d-)E^DuUDpRQFV7S@q!3NX%V+!U%9X;e`0+fb~?+AZyy&f)?eO9TEK^ z!!=-m1;r6@&@ew+pXw%VA?5eJjE%oN=qo+r-pUzEwolU~wU^Xp{IqnqC*48wxH ze&l7`KLaZluR0D6Re-TdI^#Ajy#ReO2$cC%VEJW0{NNoZgkVd%tKXl>aSaqWAr*o= zfpwO0b9;6=_!xk=jdP%s$$V14{$>43ZGia4<$+6QvJAyY!9uSNik3t{w=zq7q&&=p ztS-pm0#;Z1-ch$-hH57r5bX=Xf(300LTy-?(z11maH&67jb9D>tr~^>9Jd-$>#plU zrLoBxflT5xh6IrC10JXCRp72|NWrO`UaJIdnE%`d(EA#&BBel%a9NLKSPFPK8^JkZ z_G4m%s4^@bJqYmCD)5RwHv72*wtZeApMDg-mQW{PXx8XcI z2pZ}_F**4KsyY(0lqBKbnOBdThEUgez>udn#8k z@446;_=MJ$Uk?|lMiEK5^ieLOHpOb4`-j-NiSEMH(%+{kDInyoZIT01R0M&<7>B7o zuC={*^Gmv3W{)mN@;M;xx=t-RUU4KMOB>>eC&AH>;x)Hn@(l5;e?DlE^y3e7BBta! zcb~W;QX{5noywJ9Ex=FF^CV{!y4og&dj|9ep^!^p_T4cedYRCh`zh(##K{FU*J*(u zk{etd*}Lb#%_rey=e8WQCiJ*g0+N8Tu@9m0Igkc@X7dxctXJ&G&xUg)pDb8EkiIeI z20$!GH@gQ?@h8|vg@g!elDB3N5|gr&5V>8cbyQ=VQ7`T_77=? z#|sB^ zeFy4-V7s>~H|xs#N2ao-c#zi5md{y#u$A)K{vr$l%8&Ai)IhyS@=%YpR6M1+;gktC zO*98=k7fYx$b6TBl#-p!*{0dIa48o=m;#jx5Rw-*i=kYnevVk+vQ?fvSeTmC!B}hF z{Z&2IK4r`K>g-3QTBXE?t0v`y84`A$%LhL$_GclU6p;!C;Zo~M!s%?(OUZ@}Kk0H? z;UNJ)@R$vSzH_#jVvNt}eOfjVR^Krv{i|7&kmpYc@Ph#>V=Pb}3Q0OF;} zZ*LJ6Cwv20IpLC&`SXa`nM% z)Ri>M0m!b8mH8$QuwE~U8nJ2e{u|1MlE;19>5hGJv}-M4M~&`xAJP4ZLK)z$$|FBv zHC=wD(lS|opQ$EMU^S<6YAa3cUe6UrPCY=OQrdl~GbXX+-{)T0^1gJUCHB>*UIfVo z3!@0|CnN|62eKa`;A4PajZv3^&_Z-N+ZsZnfF#Qal6>~ZDA6f?Pd+9=8OwZN;32-} zEv-LM&pYl*VH;X3gwYd4;u?PSHdubf*^#J=`TiFILe7Rs^bGwA(y$5Qz+a|&5oOPAdXu$ zx|~0=0WBM?Y&?w{65LGWR&6E?auHw)2YTMdKFItEQO0;g66@hm*0j7U?CCvfd+de$ zEb3MQVGWHHyIJ4q`*nfd%+0MuBplR6PF!&fH_h7>{&`dlKt-JYB}h8P;qr5DOueC>T)hAg3OfWblXJY? zcvw^N$dK(b_l8~uZm)6_4v{M`ujtph6ah3I463p;;d5-6T}AASjQYhRnz)7Z+3*{{ z2TJPnFrp=gAbT*VpaMH_wM`;)ulBAP>g#LxV!b=0_c*Xa57$&@!%eP0!Mhs(WR`rW zL;aPc)ZU0P3uK&vCH*1=D9ha`>c*_^&Jg_TWrujq74WN{xR*bSe-!-)DRK6?9U1q%iP0s^7cV zLRQC4093cu(Ur&fzu_R1Fw)06w3|)2?vcxXtO{8~ur@{{p{qd+ZABH~sN0%^`L^{C zChz{YaV|vL%m{twonP4lr{-#PYp(>5Vo_XA*2W-)(D@tQY=w!YziUjV`HT1b``c${ zz1{IEtwKndVz`F!%kU(ivv7lC%0$B@pUq7mS0TmhH&c=}%{J9WDA#cGi!Qxnzp!YU^}?rnlveo))I+<$&` z4BH7PmoPFniC6Od+Vz(nJC1N6kkoh{yz5+MTo`Ru@72&0s0fPb!Q{pmxYZtZq}LIC zl6NkyLHmEy1-<(ZB8eUtI27toIxCqW6w#st3tI!cv)ffFx5 z!#Yi`{=D(q`$Ms5|D{GTw~AL)%f1U>QoRS1!8f<&!`7Mb*FQc@fXtId@6YZY7dcf@ z{eFVrR4fgb7%0^k-TDIrhfJXOz5#glnN5TH%b#yjvE1p1FXG5*Tyo{s#hY#Vjd{&g z`qS<{-9*{BHPi0Is*d*_Hjwai@iE&oT5M(OoyWXkem-h_Y9%&l0;#42O$1u3Ye&$ zC<6Wea(ieCyJGPB;91K%9{pYkz5hJ|w_Nq#B5)6s|3%=cyM^Qm1kLy$_aRf*%7~-C z1q2Cm0GZGSg8VATK_P`LMOanB+oU}v4D$EELNo~ei2_w28-#&MNBE5LN|*jXVKz{w z{RWghj3u4{LWBHI(rhWV-4P;UAWBz}PS<@4SPI$kbUb>%m>H)o2JsdDy%k;E9I^a! zW+3fm(fae-r2h2tYfxvu9`_>la7JV15JAqmJ9%zFu0RLCtKfW|l(Rta0nTU*LR|LFDfZOw#ykC9PV=>#t zx51~NULsQt3Zg-;ngGE59^fYBwKT&z4Rp9QKz01VtYi^&RTpDfbET@c8en}r3{b2P zf8tOm`=?ks!OPE|N`t}`z;^k7KVu$!0~mqUvmM}3Jr~maOSpRiLpufg!HB3Ga_NCnmI{d1HIT=l%BWCx_SaIt%L`OC&c|aP%6Mf4=n%0~_{pul zFVv`5#zt#YF6`{G_7WFztgzHejDmuUOsr$2L)gzOcQQf(noS|8s{@WE7;Xc(Y70KK zPG&JXfhM1M%dpU+ttNl)z7k&eOe*=l&xax{T3}sG(OH(8>!##D5at}=i5Aha-!Dmr(50v)d_bL4n6>l>YsgxW}W)+(rW8wP;davwtT`!Tt8uWnl;kf_Um0I_K+ z2}_<-FUcYw{0kUvtKh`}8#FM|N$m(57HThPd}Mkgk3p*pjv6JVuYlMO*G^>@ghIT4 zke4e%sM(^zG7Dg|bL+TtZoN>$TS&QhV+M6c09^yNn(kJCHL>?dQ+*`eLPC~hn8Jy< z(#VNRIn-F#>7C@mBv|)3Uo6n5ZMUj8fbtK20z$+FG5C5$#XV{|v}QV(4_MuB_C$Nc zzSUEg9mgvz$kldeA9Pb|o_|Z%Pq!cU;*r9wYLE%GiV3d0qk2ZmSvji_L(U5&qK27- z{WmF*ym}Z~;T7dP#st7Z%~mP$=n(OyAa!TXqW1#Cmb%GI)QmtX>faquPcz1IqJ)L* zxQW0!Pt5APavN{!e1YOU5Fou==Nv=c&}l4r7gke-wf69-i10uYqB@5OjM!Vxz2kPa zK6%L2mmK0~MZ{0t6TlKoO&IOyK48%~jV{aw%E#Bwtxd>SdVV7T!l>Zu@)Yb30d6P1 zq$ce+BZk6g5(V@dIggc^$Y`OxX6j7=l84@e;?cq3X$VBYeIxY|W4tg*m`!#xj?HXoeJXa}aIDfKL; z2Aq_dZkUsl>^`>|(Ua@f!?@{EKa*(E(bS_VaUCXnNp_TdA3)V<;6B85@h@E834!?pv2@i0nb<6ocR}xhp;oue9orL+Wq~Vg%|fEDAtL})Mxnt;Andww zA>C2?3mJ-kliCr>$&(i?Wm0)cC)Pb;!%LenmrH@{DlU$Bj^r~a-D8_VJ$6`;sBLWy z*)LvTG0z01b)pdw)5*q__E( zT;MAHYWy=98_xm9kq@(`ZUNO~gLaS1rkSiFd_`a<04Px7esZ3es@*(7O22S(F_aHM zPafd=Plq&3W<1cx*8NdT(`d_73M*~_x z_|so`FinC(^k@hg6C1E&t`HRQA4OXn$&z-yX7&Af^VM_o9oJLx>AJ5K4|+H}Vkt%^9i(SG3MOZ?w(wKw|fstkfmXBhX-c1JIxJ#z%61hy5g-e1=-p~ zf8O3dFO;|P4RE@SvN*0febq9t?n?uOkEN~Oe0_Y8s+D7tz(m^sy5aeeceJ{}88U*K zk>&pRG4nqorKX^CEq{&4(#D%uTJ~-S?EB?GFWkZoPJU0f^thWiY)Xqe?P-?G(O#&0 z5ORl!Xqz!%A&892f$U6WG=$r4OLXV65;f-8?m7R;c9TCFBe7(}_~glqqf)P3t24vG4e!8>m~{^He9*evLX2hTneYUmryOUqy&!TA#1PBIoI%NCoh82BiJ z1A>dbiK+vMI5Q1b9_Smi%VTVCqIAt)$z2%>@bF#P6pg=f_5a>Yf2(7(RR4+Z|7Tan zsK&?lKKv#-hV9|k-8_h&{`dNTP8XP>7;-Y4Q)u!Jl?A=QOi2>vq$RGO?+pcXhkzNX z-T4H)`)k5WK3&2-oo?;$cQQ_&cD~MJ-}B$SNTch5SApUFnX+ zx7`xMPUT9DrBP~pjTjOC3)tCmkD~1VTk7ZTv@iMJ7Xk4hyJE7cX;?+A?)+dzaOj!- zU+sNmKvZqJwcw}>ASnpaFo1L^-5t^@pp;0cgoH?^2#$mdl2Qf+U80nLfKn2QNJyth z3?W_LwRxWRd(Zd&IRCzL{yhE~8TQJ^!KnVetBH z8~-oIe;7L$W#lCSR|!DnYKE|UKm@%s*xVhOMETzjzN%V(*|f#K$$D-#HWa+^jtEID z>%VDW)42Ke=hp_KEKN3(0&_!)wS}K1P{zO3c(1fw4&h^vIi?0aeh$#+mh~Ng=_TG9 zQDY!<^ib1NuLvZSN!DjY6Zrj?8syU@f2P~^HS4Glzg&J%+?FDv+(_?jPR31upjpsE zTp98jsZhfJzsFA0=`>V%-qgH?iz>Mp@Ku)0r-$zA^Jakeu!TW1l7Uo9zDShI7wPgM zBUe@Upt+U-kvhQgIuH}&c^V6)1d_mH2SXd>T;!>xz;572bdrUyeK!Zz=hgIin?@p; zv#Y1z@|Ym5K;g3*)L&yV@U4v?j1ojlBrrwUG(3!YkcJd(@q|mGy+IeLPhhug1_YVq zvpQW8xaZpflq3Mlkv`atBt^hOYWfnCp1kX1Gp1mJN)f&m8g`Q5^4h`X@^#N4IPTDE zZ{%^v>&JM&7Z-%{N&=Y8(DVmrGEFdk9Ci`@_Iw};C(ZJkK%#xC4GQwqdwb(+)`b*N zQQto|kQ}Gquc5u*jvtmoS{I}&^5%P0pz=W|Ud{``QQ5E!ASQO7t(BLD)MeUCdnz~Z zxe_raRvCn?gVR7KRI|IHLoe=>j5xiSGDYnkz6GVfdh{7iu%sCFngXRSy$)!x4aCEz zf{>lW5Ap5!O8I`+E)E0ZRDcoCty4EBM{0c6a#W+wT!M%RTUjRbH)sLnOeCs4hZLze zg`mKe1iqwmH@Xx-Le6%K_>{rI!tBTs&D}rU`bf1nWy^**?PrxGtz8%UIKN~nSh1@; z%xawdul)V3FBFvR845uKIccMtY^=hPR+2XaxSvHcJmb|RMO-!zf))?VP`3D{KZtj< zlc7tLrAoL(Ah`i_?;8(b-}652OgvI(MNAq<;sEav%~;kDLk#3&orNQeJ$M0|k2*Z~ z9CGx;cReL)EGfOHCUilN?uGVQYe1w%GFY(p@90h?`USQ318uGkZPKn>Wv#-%(1vf2 zj3*ViTkfv;!wCul1m8rm8v^8?iW>XU-afp4@26JdBNi((XwgYqoTHBQXcs}NMF%tv zcAyxcjUYck_ObrAWhtOd;+!%l4>_Rka)|}7+?7%AXDW&^Wq!N~koHRYy+#SfeW1yE z94OF}QhFJ(JW!Gv&OEh}^tl+Kl!u@P)uS>e+F9QrU3B*4mMBew}?JOxswlgm({TT23d`X3`y7=l7q6y0j%n;OV6@Q6n?}`HRDw78y3agRl`u+ z4K)^%@Y{Khp+Y(wguy+c%2$ejLe0KZMQiynry9^Xuk6v+hv@v~kGvG(sT-GT0|P+V zlT6HU)1Jo-+7gCk)O9}1&eef?SMEnGaYM+%Z(q}oU;ysw>x9bl*i^Rb{@M4skGZ1r zAR8lLmFkZYHV=s9x}xIKjDk)m;vREGV*(|3OEBZWkM zTp@K_|2};ezIwq2?G42h>{PDLA$(#lkL2+D!Dny0MHq&A+aqhU3qYJg(zAV(6~`Cc z@VSGKZy)a3?1p9*)~I_-5A5G$DF;EBOL7@gbW3BC^qR!vQ5ZIhQEG*0{UJ*EPTwbl z6uJM09~<^grL>W`H;nEIHJa!&ie##Vf);sbz-<8CEy=9N}@2Z3|oh(2@PNXu374&7h!9c_Nc@M^T` zkr_w(n#aEYZ4<9qmlbj@o_BCA)MT~2KX-r+Ixv2jlc-8qMInn9hPsb{&sgO-lN1F2 zc}k_?kDB^cpj zZ!4B{BGmY7^9xq3JnV6Kl~2@n_4=}JRG(PyrN=JwKekb1>yMQ=hB+FF3PiK>$NqT>tiDo$EC~DL3dN; z_ClGs*i%wl);yw7fK-YgJ}`zw!BXygG}DnZp}Qx9F>$y}wK8%>7kGNVcV6+Nj2i~9 zZde@DZV+%^*c9ANmjsV*9er?|5z4bS$)O%dWaOoe;{mK9k34`<%5D5~S&y){p%15` z)I674SYw2BnLk6J{Y~4N%}MhMhe-%VV!KK2_{*}sF*CU8?2Al`)T;OYnqY{))8LDT z?dcNcO_Wj|lSn{bW$}{;>pEyTzF|zvX1iR->FA6_4VcYY&7Gd9(}JFeaf0{rapG`o z7J)zaRK>v*Pv7D|mnISSLvyJfSdm+I>Nn~6oG{;u9fbpU>1`rPtahWjXjBQ&i$Fdw zShb0`3`$N-j=jZ6MhJhr*_k4y0S#H_B+VNW8f!FRZ~eDc5F(JXV>F*$`KqSxgxEa4 z0ac_d@ybaM>nk5KgbHKCV(&~55<_zm*<=sDL8e!acnEmpaxPWeTp75_7tj%WRKta! z{we+4Q+?-^M$L->iNA5B)ppVKU@rL6f;4A7QoBZK_T?D3|DhSL4vC?zd)(c8bhLsf z@0;9Bq9C^0U67x^NqRQolglx@MSX*30Uh&T!z%4xN*M)2A`-svi|^x*#n;Ke_+hVO zlc*R*splEh>Y{zd;pR$+vCM-~Q+*R@^bl_tT2OoRmR=|*fK!U_=OQo~X$aR8LI2!aSPam<0k9}+PVT4(1@CTGE zFV&BFgLSgxnZHn;cMQnt>y7AIJ-Vk75DFH^do~Jo_Oa$8K7t4gj8$v~%pJz)XL%?k zsYawEbGIo^9Qx7OKxIPdKJR0PAVNSdr_hD9YK*MNabb)=+&34`BplM~b0EyG-lug7 zh8e_AxC2|w)|6p#h}#PhB76I4BLTwD|M!Fat)*wvNd4c6}qF0inc0C_r68 zWVl-`iHwgl4#K=fSYjYgGZ>{De?*O4b$N9h8Gm#L#vcv{l9WbHo5+yx6qe#sXXK%> z#S4@z-Wz*kzmU0LRfW@5KBXXZ=o%P?1h}!GjffWr=>PvVSWvUo?q6E@-xN%U(~}d( zLpJH-mJlaUCkk_VBuMPt?GZtU$e|=s1A)3qlqx)6FF{rS(H%c27>)`d!X6ya8+_f@ z7aDdzh$meRd2cyRDmq12W2S-*b}|{|{Y{l4$QEcw zrHEj%DZ%UzNRo&B7vFqq$`XJq#El@ia(ayedW1*2KEJ)y!^>k;Q=K_XqZf(thvb37 zIFgqTWQWj@2waY$6Hx{gdd}h~^wVELoT~f8=aV;wt1I%XYAwOdeilB@q{-@oFDGE- z$6yH{PP0ZN3-w`WDsd-M&s~r_LRgX9A-U|C4;(msE!&TR+qnm)c#Pgy)I(=>5}aH{ z*clKdYh}p#Ts$C}l?~dLZGJBTRfGG|sL~q!=YfA`N)3At15d>vaOJH*?iQ2~z!_V_ zdq|v=aPBKo+TOqyc3^1*o&fQvt`1x|2%wGjzUN%hfwCpfTfnl~^bp2f=cR%;k@(%M zRUOD3KE>fo3Q~~AVQA`BxFG`Y5?Br{0tHS`<`jb$7>R>*pM-0Z2rRlb@K1;!K^=#1 zGw!yo1t-s(i#;u5sTo3e?E7+N;I@`jU5c0k?={5>wSb_t0g@J&zPx^(1-vh~s7EAN z(WyegXq}^i7&kz}gwDBd4IFk7u=8z5h*Kbklf}s80}5=G*5g+A#ft}!gO~`VQY%oV z(aZjhV_fr2tlpYu9mVg?o6dGUy9a)G^>43qbLHg&w%^(|$9_CZg%pXIAhQ4F&4j5L z8^pz{3lfYMgIX#9PXuy>-x@mR3f@bKw?L)RhX+P8j$5BOj2uN6N=gt($q|m<6L)LG zj7FdcjW9)(YRM=*JDpcp)V?4TFR{j>zYZy3BQ~Bs&=g(VJTb=8_ctLd3hBL5=i1wJ z@-0R(_SvW?&OD%=2cPg|nGCpqT5x%KKrlkc{yoo3j2`M9Hy3D5BmrlhEgWZ`NY(r1 zi82v-hV9XjYraq_Z6l(o^Hvx6Zaxz*#?{4;Jj2ZA!4|qlzYPjki-qYf`K-*LrG^nt zJuE7XeRPfeYp$1-*<0^yFld{X*mg{Q$FwtiBw$+~uJCZkWhdYUzuO?|4C|>-Z@GHS zD>P&)WJEJ{*|)-b#BA1Fy@B=p#3W=X>)AK3wlK@W9wJOWeMAOypTu*?iOB#YC&?+! zbgLc@Ks+(+4$!Ii_^=U_^a*qyaqpp6L!c;%YKztnf|^K*2uTFaIS`-TB73j_nC+t8 zJ=owVR#4TJ7+#aTj-q-w!K%AXk5TCHIb~8Z8a+2ivAnFN?BV~4`)2MOfX|%jaC_Ha zV9|H;6v8Z_8;60ROvq^L7q-{`kmG`{tGm?E;}reE0-%-V!YEWPOF}c$GsznHcvSt*d!7amqssY z_gFJr7@~nQsfv7)^V5Q9T}m)i~&RS+x*KctO$F^-nuo419U|HTtlf|%kPJ-T3DqK$tu?%{m;7(t^OGCfSdm=5*% zu+7_Eu~>t!hqKFmE0b7}%xmOU89nqVW#(!yxTRJZ!tgGPgK#ghd4T8v$PU%V-}-TUn0h z^cjy8&4l;Wf043>pf25aHRy;uLAl&?4##9PG3E*IY@cKF5_^bIFBy{z!|>}n{jpBELT!os7dtt+233x< ztb->mTUCZRjD)9wZYfCX20n;5+ij^5pj0OH5;4wubvi$aNy74#ZYGcBK%(F!BlQ?M zUMv6QWB5alW2_<()zTYHM)5H5%LUt+jpDM)ktfPvy%#hgJ-^{CNuo^Iv-GY@&_Y@( zec-$b1zHFiCjir)Qo>Oek|oUo>BR(z_JB{Kw|tN5H|Wm1`sAETR!+*_>88U<2vG^z zo`$Qcoy{Z-ZKF%@Vndru6>Jdq0NaVf>LNgYBn>J-56sUf@P3!ub{m$u2TaEbiou=x5SDk;0w*%~}8Q<)o1TCx2!VVA*QOErw4;eWbkywTIvL#!C49HTm&AY_GP=%_H*xTV?;+{_E+aJpfTK5-@+tfOugd$v zk{@I3PoX~83oHD$O86}*Z3{byMsR?j24qK0 z>osS{RgHGS_EUYUJoj?GkxkS=8O2C6NO@bJ2{Z)_tsLS`i}n97rWUjnSy8!SffFa> zcp~Bv1C7@a$#R(SmPh$d+6pZEY}eC#etU#Hr-&0h{eW<5ReR#V5#MoLAU8+$NG6K@ z+$ak%FHs-WG13Rm!<2A$GtP58r<1;*?W%bH^1Y+?MESZ{pQ;)>Q&Npqzn(@o-bH2| z`R0ZJ!ByvD#mAyTRboHZ)T-!hRpyQ57x=1O%Ex0q8{ilGI=6r1?#VddJ*+<19MJGO zncWj381b1&Zz#=J%Nyeq@@X+rvH7TH%`D_U8ghcnEM{{hsaEz8-cqc_P8W?8@*g8< z0B57@@juEeR@>i_!cSL^9&0G;wUlwH*_tNVyK9-LXlDIUnccyCU5bUVpnSYljoWix zL?hZ{a%8I`p~1pyL=HphQnQsfwt$y(`MNPLy;FMhv@q*5vE4V{uaTB-2ktlC4%+!S z_KZB>*HT4ifQ$FESf-iF@88naa0ZtaHj{uis-CSGn~0Z~+w#;aey!?R-P>p6cltZYtab)^KSxh_ zbjo>|OE=@}!c@qlY|R~O<_fC9KWq&9d3X8^iw(}mZ_wB7M=0!G^Pb|fk}`L1;hgAw z|I?*v>;Xp%UB=GfOpI0MM$KCOZ6=qBsl;m^)_yP?%m?88MqbM1Bd-7_Pr%a4L~pNshHAqSMoWgRdw zZ`Pe4EA$(h`@EVOGqShn)sSno_xtOOhLaMEb9;YYE6B~4PsFrYxNNuR2a3x6Hhgqu z_+Wp7oMnG0!oe$RR_r%yz13An3fMa35#WbIK)jTz%js!M9+EVQeU4@J$Ca*zB z@tLBX#i~a-;g9?$IZmhlY?5CuUM?$uzbjJw?n0N@-L%A1qn#7-OCeux*4UH#G^>OI z5DD5`D-4qRk&>CoPn~gh;O2zm%$obgc9etc^}(5k{dX7x{(Nnann@EIbZt1Pv%51! zjvh=UBw?oFS$yJH$RPgnPWQDJ(cL$-AMBs@x%8Bu4^#3ixrJx$ zlMXS~$v)G)m8YT2a=m1%ONE>%aCd^Gb1}9?EMuKvcqx4B1S@ zz*Q3y|Lt+u`pYCs>EoL}uHKfjRIT2f5@Ol-7$dvVd=2uindVYr$}w-g>FAf_Kdjvv ze!*U3q|9#eG|6H;f9zeq)!R>xG;Y@p74=*u&+L`j8$W#@XTEliWxrv=o^a5)*TSCq z_wiNV^sT_|mBduh7P%=NeKQ+Pr{Yhv4ZXF2oi8d=C^A;lW=P>~+bRFLHF`q9n>6$S zos_8IblJ*VqZql3L67P<*`4{)B=4LGl|JY9L!WayKdG>f#bc#43c}tG+{$$m)jwiK z)rv|*yAHUvSNanEe)rRb;lN4Wi>l(5zV(MW3;dap8I#)W9?551L>Zfn+%aD2BfHZQ zO+}_bduvU2Enz#VPNt4aCKl(1Uvgr^q^33B*b(~wHqMmB$4VaTt~R01Yy8$TwY|6X zICFQBJ!z0FO9TB3)eqyy=yjmKGm2op!kQ{kbNTbkuKQwl`p~I5K3{H}%*R1PJ&nci zz=NHUM{M%FJYJbT2eX<6a`V^78SsPOSWblWXj#7uYrKh<_bA`~%_3A*@FK?dXVDaG z+i*NAT7mLuuH)Z&ZCQ5un8JIRcXJYMy=P~`X^A}!iopkNR81s!7N}F7LI;~O$;180 zQk%gy#ILX0hBkBYUQHd5)vK={wA@|(5q6>Afd`E&Q@3hji+r0zH*TZ-$@)2|J(zF0 z!d(x~%n#9NomTrRNy|YDPDLN9mB;VH%J2OtJ$G}E(v~pQ50gc8$L#Zym_eye7?TAv z7p-R7(6pUjOa2>}S29>9R)-2FY4?4z#I}Q16R^yz{7OQLkHyNQhRqC4r6Fqx>9Sa- ztVeZ~_j06_tl&}Irg43V{APFK#Kl(}GZ~z(%vCRFB(CX!Omw;ay7aeh{*%+stt(T_ zvlV_>M%57$<;BNJ&Q5mQo2d5+teqp1n;gBi)6ev&B*w9z;;!UY{7VJhm8FP-Zr9D9 zWLHCs4%~h{3{&NbGx_j4qicJAqgJ7yY(~g$f5m~lRrK4P^O>G2=34gO(qb+UrP!7> z#-b%mcDtFB*U8--gzp=C<`=-Y_r?Z9@>}V)DW*(%aDM2wPmLx>&?=*%LRX=56P?{T zYZ}O8qWowph!1{_?2E&KFFkP}G}|oYKTe%Vm*l#V;qmA`F;B8O=yhJ{%R^#ndZR2b>z9#d2 z`)th4(QX{}yyI#l3xo@Am17=zw1j1FFiZ#q%<43?kI$N3(VXO!Vwg75Yw`73JnPOW z=UlBn@hY}im1TneG+ZBsUXRY@%DDmty!T3_nPr>1@uF>sNoiK@aCXf1c)RACDV&8B zU2HhH=T4grH-&~h9`Qf3Q{eDYLr2YE{<`1-Tx3 z650}D2e0|>uVz~PxmI7Tw|J#QAx=w9N6zeYXPjvVhen2LD}KDyU3Zv6N220-<$OsS z?T5~xQjI62ZmBJjEXr*s2v%*4#Zx>cJ2)QS5l@?`a+4dGdNr%Zu47xZSUKlya$b%n zaib$pJ#oo>vOvHO)va=TtCU2r+?B_I}qG(`^NRY+3EZuL%c}T8S?O)m}`Nfpu~W3Ay9VkCn|xI%xbBkBE*< zH*@5qpkBXDE%}5>eae4+ za{2477jyd;oG$)Ckq^6rG+bSd)PBC^@-&t8Bcc^{9tw}IuT!k|J7l^EC=}v8gkI>9 z7`oFf8RF0_;kbfM2vg*G#qVcFEy0Fsk*EHVx&P<2n?B@ev21rmeC94Ls9tGxo8{5J zZdcM7LAiRvaq-HEt?{6{Lp+C$rCGR6ALiWZnrx!9+|apWt{KU#_N#+0D!E1Ot6FlH z?D;6N>Uj3&YT?J@Usu`0x%Sy5S$zHwIf&*GE^+dnh?WpMk4bb$+_1pKHXl>2mk2a_ zb%(+<9YuQ%Lwm5s$erQ(#ajc%o%|z3?&jlwhp?Upg>%I0?ntlX?B=P8%dBqR%5WaB zPj&vxH_GVKA+ICh@yLln-z2k*1bg9a_c#55f>I3;x$WfMFO%t*>_v>tyXs)n*<12GUdwxN1|v$({gjHhUs7M#4vjIvqmxnU%3S)) zb{77R<+*Wau}q)l1pj@0tIjN$A(~0XQuBnD>3jv{HfeoSbY_bwi|$5V zTq7tGaa^fVW~I9X&ZEU~=9Yq&9J)Dyh6>$j>M+Yi@MNRS*uLBNvQK81Ti{9cMPVuo zI`MneTN&(DGCc8(T+en>I{ocEpD?76gct$}w^_DoTP|l}k+~Wwbz`u~dt(;QG~z$d z6^J(jI`ebIEkhmJ?Oyjh^oLFwzkNwzQV+Z z(zT^p1(}-I+R@vdj`eXJ+?i<|5x-0Dv1@Z(?CCcnpJ9G1t1IGF?9)yx+^PJ~U%x&+_NW#=-ZR>Yx-srDgn#mE@pLQ+nyl(uQMD zSw-dksH6}f%9kkbPpm2P&lP1GpNW9u0tf1mPrp z5E8Hz)1EU#BgdYF*9Ik)NyrI>z{!z3d4qyu`QsIu$3v4@M||XSTO@{uRMd7Z%By#`Qbkk z^3Toi&x7#K%J9#s_|J~;&u;k7Zurk`_|I00001b5ch_0Itp) z=>Px#1am@3R0s$N2z&@+hyVZ^2}wjjRCt{2oq1qW#TvJtByE}$+ESn_Et@O_Dk>tf z2!gm=P~1g9+2m8afL;~Z1O-KutCx$&RRkAQkRsp)%2H4f+4q99Knt`$TUxrWY1T8} zAE!-HvZuA+_vQI(&Y9&sNlwo1%*;FQD1;D#009C72oRtOrLPq-3nY5ZD5THKLNW`a zzv7zQ+b^o5=e%F(^UiN%7FE`}{ld%e=2I|lw4APQE}IJ(k@h+x)8F8-xv>5(z?cQc z`oZyma=M-=_;x*qTgQ?1!qj@V4PdrN=qe2ujpnOj|M20XOq)K7_|gseFs$0C=SZ5F182>w+Nu95uF1XqeHS=-p@@U&g{<0lq2BH9+XNR* zL0XcWu5UIL@8P8WJSQs8v9Wkh{a--tH&BrX<%i^SJ(IQYLyVc1$ocqljF++adAn#+y8v|m*nJJW>x%ZE?>^Acl!bA2cLzZL?<~- z*B2#~Ca3B8qO#n1y1porbWYRthNZ-Lx}GrQ703wzrkwikve}El)fj~>E3@5nB_;L$ z{TCM6dZ~H&dG&5TK>gq#4CQ*k^smdA`)vi~df#t+odM>osbJd5a=+@A8_Y~ycbvID zokVA}_-@~5Vb1y_rhR*ya)a;PeZ3CWybl{b0iz!sBBLID{210QlH2kXouuc#mshhi z?*}S{!RPvw!oZT;?^t+wH9EnZBpqCQ3(n7!+wu|JiDb@<`6q=N z{OgYCQ_phd>51g8`QESkk`NdSCM*{JUV4NO7>p*&e%8;-%wqZSuSh(0+^_nVFJI=1 zFIIB!;9ZhllXWI0c{Jilhbf*K<89`T`Sg=9If}i9E!p@UM zHqDGgqxP;bodJftUBs@_@|%2ksDjzU8u)ZU3ldUze_JX5zn!|w*2x3Vs#V_EH(D67 zXeYbR0P;<@Ct|Fy&)VYrLy#)WgC_keVnTYa76W&-rAYFAFxY zvS2d+2P%?T)^-LOg?B$dr7$q@!hblbO97yvQp-Q19`Wr0vKGOm|HmQZQcC=?2x?0>xUQ*v|j*th>6 z!-o&!p1be#x^8A>77G?EqC%%*@4o%CZrzHOEnE0xf70_Wa{j^v)^GTU*Jr)TxN&2> zu6z1)3Qvt1OG!xyKm53!u3fs&v113H><73uaOg2~ZDrGn?MWscSx`*Xz3vvh5eD0d z0zl_z2i@^Vmlk2x^zJkH-2cDb=uMt`4tkS?!SCBd0id&8Ti(*Loh_Z32p_x%CNEyx zO$PYyM4Ko8v}otDxJ#~6x3s2@>QZ>&;(sv+&qHPgVPe9C_pG7-&@QBrvm01y)sZB4IT`yIdU*y&Y0dr<&TtAlCMq_NNTV`Dp6({Imz zm-u+^=8;lTQmvu@pwVb*e3k%zFC2v7iM}EHpFy@)?yc?t0b=O>PvM_Y21dIL!W;f4flR++X=9ukVpL^lfyL~p#kchqvjkwKve6Zpq&tF`CNw^*sGYAvU zUtB<~FK7Nfyakx?xlu9MfjeiEU+RLuK9dFH@LrhGJ^?1&kZ+R4ll$2DS9681+ z3M!R~#UCt0tM#&{8Q_}3K^T-u_-sPBOL4I81+1DN0z#^OqthegGSx&qDYxOfZv(+CnsdXhErhgh zXFZoTX^M5uK-;N3019<5nvU%;W@K_=pq(hFlyv!a1&trP&u7~J3I%92YDaOXnlrHP zQ7DxPgutmNs8oLZ_&`KNIIqr_Ler*At>@z7*I4Hanm3OEA4neoMQ7- z7_X~T+V z{1XLxgapfG!a-Zpyz@OoHj~du7U(+^^0Q#}6Sgva?}PF4{1XLxBm^@um$0>TzxCYu z4)4({xG`Hx_hS(f_eb<2%aq4s=WOHnLnHd}PRs;9MWN;ukTMqX?Iv-190hf>d`_5U z0Wh40#9p>CQ6nJsbNmqndyJV`oVfj74CgNb5ZbLP-B0YJ@>B{%3BMBBEsjR_4C3OP zcgUQ#K(3@z(B-?8G=AiPTG0ZHw0a&X6$-RkwRQeMsZgL&DKVPNnCyl+YaInz*>Gtl#i68#itNszhPpczWF2z1H@# zb8;9yViZ|f@>-SHPMz4Y`6tevJ;%;nyNK=7iT?fjvFL;U@zIi{R{KjnTFl^o+*51& z0j@H_4JNY?Pb@4J47)7iUd|ViZ^bNB`62q766N+cn ziR))4xVHa#f>1oOPK^3&zpywfD`0R8c3C9bNgd`q1J6+t6JW{-x`LVD#DN~y(5T{28v0E#|(H=rLZCeuJ z$jx$@lyO3cy88n3>F33vHrIe#+1H;>9wDTEK`=km+dC7nc}RHBXRQm3{71Rx|)V+iR=B)eWk zT~k_GMs`jPv7I`)oXpP3x`aZZAUfI)X9Euu6cljwTpGP@?dj5fO6nPuN(G%dcC2&z z0j>@TA%rNa6s*{xC%?>bf_F%FHGN{en@Br+&dkOmjxIb=;Yvmi&=4N#{KhKNn_02< zJo#mgb%)&0fe@>B6HiY#RgdHoyS#En|-{&30qH2x?{bT}WW3g>}F{b}gR z?bK2RxvRib;FuTr4+!h!c-|T1N1$+v^4hd%P4}B_bopRUOG{@< z!dA@Ynhp*cjfRIGdXVPLn|ZWvG#c5sX)_ranGShzab3Clt~>qm(h6{OPzWK!khhE3 zdfc_wN#cUWbZ_V0^>lx#iN3EDxy*m)))3ZDcYcEpS+tXF$*xzi9-VU!-P<&BZ$GVo z+vaa~ng3w-Xx6{b&uQMmNszS9X%+x;*FYN&?(paSgty(eeBXQrytv4D-h>P9vA5!c z%ew2@ze5*ITetTAtUSx8^fz7R4+`tS;?}P?&rE(0ihp(8c=vtK;3l{BDLV*%-r+jG z@%_+sox^E!egTJ~J0ncay{)E@if3i)Oy zT^XO-a1%bk(>evC7ojKoY(p{{5iTA|a=BB+P6rJ-|g{jzgYCp=MxM4?2XzIH?Kf zlAvfCSe%5w2<;3_9sz}iFF+V&Z>7p}j(JKgG`wF3S zFTeiAsZ*yNu3e>4aocTuz4CIpl%37CZNEB=-_*EqBo9CQ5Md2njHL#+=I}WA43Ku& zLc1uHOBYm0f(!W;u50Ff_yAu>%d4PW(@>X_dy)`bD9~|TQ{TdGcuQU;G>vxcf+{4) z&xR-$&)wRRY04!!ILf69s)XQ@DW6uZCWmW_J{>e|aqWUCf#D*Aw5xmDLZDB-fW~fJ z!N}UMQf)^g^8Vcui)wd0HXupD$qClF}<*`f7zm z5{&!e5FKZ3rpMf0ut<&?X0k}!Jogtmyt{ta9FCLAI=M!FF=l3wczthzh$DS z+aUJ>bd^SQmBt!t73`5DL50phh0fr2;5=6p6%{dO&OBz$n!`^&I}b{imX^-cX|tFz zbtZ=oAFWgS**Q53zW06x-SrRt_u&$!WsV&?&Takgpl`o{Y~GSkr}hI}JzNTdB*EB^ zO8IJsJic=Lf|(0>@}Fbl5hDqS^4Mcqu7y7@%0ob3?a(v!qq-3XNeIR+Kgf!`=K=UL zvxEx;@=(Xd<biW8uh7n@PISsr=M7hFaSO#|3U?JC7l=**0WkKR-~L zsH|5~R8+)!|9PM69Qi&^Oq73bykC%x((`mJdk)p2u=>D7 z>$yjI#Lzyf0SQStJow>m?)zXD2}wD0ZV|@AH`~T=;`d+V>00(2szqVHo#*8(cS2Mv zSr8V#1n<8fr(3jx9)oP<_HBmG=hRLdBm}QzEn`!OEg;=pVLfRT+>G7j$NAUAg-p7* zfZgTCX{T<pCkw)DkvaBlpIoO|{~j`zF+VKmZW{8)mTR>c;Q1S!ME`5m&m znkz*CAUIf_V=)*^7>s6gRbeo$^fc1ffjG#bu!#J8oBQy+L;eB4ik0!KSh0$EZ~q&! z+01|e{b<;*LDh8&mVNTM-yyrJ$nQ7ah@1M^-3&5<`W;1ivY#x4i7)GOs z5yPJ#GP04?{=Z(D?03lS0M`xyG!<8fiV?IAf{C=A#4C>O1`0;W;xb=y)o3%Q<`nlc=>SFV?UbXK6 zV?ICVmwh3@r?1No_-eY|3jdrhr;pls1Xiaf{97(l&E8FN8-9I$1g~W+WmAc5ceY*) z;&`{!^8jowJ7PUwoqn&?^Ym(9i%Pn&WDl=pEp?bo_4W!#eMWx3R}(Q1V!xErg+JTQ zSEoCFC6}ot?;E)dKkQpWVc4xlX#ep-nvQr3fRY`%0kD*mQnGy~!7W>G!>$B^8dte9 zTO>{o8$)q|8~0l`I1_~sbr3;S>k#Z8`WB0XLV<%jYi-1#Iuu5JzRitoLrVR zN{ZZrs;ty=`g95r5fRLoF@*+I0Rx2)EM58;NlD3m*{=?TVZR>XtvBcJ!2Lr3*ni+4 z0A=On?AyPeX3e5l`%OF%Rr5QNB=P(UFY(7tCkuK4{B3X$hR=ShtkF}rvs-YDJsBb! z*e2ns(;78wni)y|E;ez9-=$~ycHj48{%mJ@jh@1wF3s5VQhzkT@|#&?sO?W!oz?`a z*z{6=`gOET(5*gjk>$J7eYXF{4>fxVU2lcSA3|_dr>KFQV@q{9I7BYf$i>u^QmJdSmPssED9|qK4U#rHn4sE z;AZmgt?d#^w;h{o;$XIL>XDI{{MdTZU@$p~f_<;RZW6kBLRwK3N68+&!Q|JA!RO0Y zSmPssEDD3}7+^hCt8KmW>dD@gEm|;b+GMLZNRq@yOFp5rwA5$&Q>V_b#zz8K6h@AG z(s~>kYMbD$jsn}ELwml7UuhKwi^al(i7(U;w*Y@H9E71%XSH9yU)NZ@ZD@DPr{a_VaUl~wC9LhW`u5d!7owwhWqTr6;5SY5Ora1VsgIl>|6Voe2 z!5txrV3xI=Q9~Sb7Jqhdvs-8ZT z+Wiy_!WmSm?g#! z@a+G6C4(N9_f^n@!qc<86NPHj8hOXJFW&;Q5e7c$vw4O`-pw&xDxpd(Z$v-il_*rB zRfMpt%?#eW^f^Xh;<3mnJauKx+nOp@0%G#}@)`3_6p z=lqN}X!`iWw0M5JPjzK+*hu;-uMs);F4V1j_a6>X2V*dr2ntg9w0j#=iGxOs(P&1c zQu-A)Yt*PG`R@Dm^z7M#I|mK)T)_@m9A07V+VALgeH@XIE`ocxVcy&~cyGZ%?z?v| zqenSkDej8Sonu)Yzmj+6zsv2n_ornG-*%4+aP8nA3=K63m!T`Xp@Bxh>X-em-!LS| zW#|g8?1u!g`nf)S*Vlx)4qf35AzFFP!Cyj^8rPvKyg;iA;k~N)2)|G@bQ-$CYm^P3 z^9sMKH|*V$Zae&+JZ{kaM!IeP*>gb`D3$WVy*BkV8vi!w0chX;I;KyX?05Y(ty?i| z>dSuD@810;zKLJycm24yuEekM|Mw4YZBYBb@c{w^2oT`^DSQ@&M|*2%)mTZ3MoLEX z^I@2wj(D_33^9>fnulu`(aZNeeQV1tcgdUeL^OfkL+af;cZc0d^Pt8w35wv}aL1r% ze>qJa0(A@oH;1N=*Sq-^Hl$atTe&_i&U1wTe@nayi4h<`fB*sh{~<7x6d*u=00C+c5QYE& x0t5(9gMcsu2oNAZfEomZAwYlt0Rq(E{{j>TdRkpKI?@0D002ovPDHLkV1h?1$&dy!5t(NhQX-Nm^DIfo zJeKMGUH{>E-*>&=`o8si&-3oJ_S$>PzVGWguk$>P-*jB}RWB;iQL|8!NF=&*XBE^) zBr<;zi9BKp6@KEJs~3WQklCv#%8}CR*+%gno9yMzsc*qw9$Sn8NTj`_a|)-_U0(g} zb@iZITCbjI7uOUyAh)BLDl6>lm7C_O+7sOe^VR6G=9|M)w6q*~mConoUC~juuxVww zelty>Wye;o@Z_!?>inAb-*Wf&bN(@oI21gfklZjg^LZ%h*j(h4N5ikkrRP&ilJ>Mp zynYOFTV^&Mo$e)Z-DOZ=+De6gNbI1M+rs5=fcY+i+^@5OTe$8v2J7SZV)s|<#g7#4 zoWhSDZ}P>D*#Ara13yiUT_R&}aPajaJIat6h0*3j*O^bdv$C_@65N8=C962SS5Kv0 zO|x}yIDXk8`eIgAmcr@N!B3v}`1(?W@oBtPxW6MvedOy)vC+;PZqnRHL(`WM0*R{|GcoiJVf7X=kD%KMaQD>&S`=pMK_Vru=?@Ag9rVz3#^4~2Ts}_ zUwRV~8d`aWlBT2Bk?;BQ=UsMue0*+8lV4xjl>PZk#(&pEbeEE#!kII(6`MJqym;{- zK7POQOVLkNRsK7j!L_9XumU7LS?tK6BP}X*Bs&t71e@7L)Tx(e#O^QC@ zzQ}*@e7I57qdn@$s;9II9LKK`*OqVDDfd#;YI=U2|3f%6SJWB59kkDm=#a-;P17n~ zw~lW*i?!(}vgal}JF55EZDEW}(&^FkwC&-mZ_j>uu&Wd6qLF?*)?u_6-%UugEa(UzQH7q`0`!maXsa`Gas5x<`5G&{ez__I|*uQk8iI8Cge1M`Pmo z-A+?|%Ga(jpNZeDqN383Ywnw9TrY1w*&|L)PQE;zQO=`Va>8-EE%8$P8RkIe>gfWT z{`!US_BT53M9-Z&x4PJEqn>{KxmcgeNB(Njg9jcLURc(z}IZE7m5})_q zdGm07%{wn&vWnUC9XNRKwD!oS7OwZOWU zZJdsZLjK;i;jTQ36Oxh^UqYTfU0$7Q*t%_7TiDXlQqq;wtB+Vj4z~-IwEMQ)!Y0JM zkiTDFTgfwQidUq^`Hr&1M(HhfG;B}Tsr>XwNdG;l*l9xP+iT@FYKgU;<?lv87OS9}L433m^{yskb5Nk@pldFrC<&1Co+!!lQ?0`#` zE_tjiw6CtOOj-68hY=rIT)crZezWauO=?EjgNF~l$g_Rw>1B0Uidvq!Qtq|J_Qh*; zM)8iXZ&pEp>GJeo;k$SC-z&HNtb6{kK2q|HYAiVp`A^TKwM<8x@a8-V4W+Qd3v~_q zc78Wk<*68$oUF$qh!C}6!O{4MvO@g*8dYm~dATv)O54)P%D&ec2VTo1^r&7`U#UBm z`9rMyJu|FQ*-ARTV87zymSX4C)m3J3y8}W(LS3Qt?t!dg7bR~!`>!}vzq(pcNt+DtMG|IUvJw{cZoPH42YotvK4 zZ;Cs8AwuwWyRJJO78d1a8E48BRRp`=?y=SH-@hF+7%yJD*i{#AKT^NTtbE(HZN(uo zrTwZoDk)3F&ePp(ZA_Aqk|gW?GCCti3O_$TGR^)*9IV7OY16Dm38wb&I*JG?As^D=RI|e=DkHmDb-0kJK^0&b@@Xj)@8QsyX%s@ zYmCnN>eZ{q&71EYQhvd}$*F>UjvaGISorC=kV9Ge6?Z&TqB{G3?%cVPvq+lWPWbDQ zmrtI=2)q=t(Ty4o2??27&G(dj{P=OP5c5FU5+}|dh32smwab^$MQWTmXJ%$dp+|Hi z6j{%Q^FNQjZqUkg*F_>in)&I|r$hxM;b06GjYLsoU*ym!cBuID$xlUgEfhTlb*ji? zD&_0?PhE8}i(c02rEUu!T3bch?I^`hjr{zkBI_A5Yg`-Jq^qc?IP%xZWA5kI>%|WD zsdpW2Ec0}q=oohT6#DAb+tT_nt=d5GF$Os)_BsyQty{Nt1zyqfn4#?J>nmPZiu#*#1lX-YO_^XX1m~^}N}AcI$aulFT})nSFPD z-eK=}_eQqy7m`^==Afr3?eq9;T$SG{erwQD`4YuY=tkw1`e<2|{xZ)u*Ru9u^Ib1- z2`(%=K|)84G-NSF#qixs|5~@y?ZBZ!c4)pNY<`767LmH%7V`0LN%Z%&v40=CnOV->R|x_|K=-KeOj<-dP_Mu_89 z1Wf8*)d07gaGgDX3Qdu1!brz*oTs`~+q&-3J%;Z!rmFP9S4OyuOiXsLvI2!rJ2^QO zIf<;!emTm2y^sMN7=u$bhQHK$V7}I=!lJF+%{}%q ztI4dgscGi+-$l+`kAIvs;hLj`TmJ)EUjAiBOBsw_;N~WACSIuBlm~z2;t>@<0MD5p zPtp(k-vg$@&ySg+pzaeFe~zswEG+!_^XJB0Popgv@%e2*UPvlV0s)Di^D(YLaS+=cB-Mngj*z=+>* zyuEi2@OguF$^TA;{(H0IHwX0%4SmDH!ep2y=_t2SaNS)tJ;qF1Y@3;xS;$I@1BGo8 z6WXjJaQ4I&u1eXy<(2+ho?lbao3qB8S(#gzWun-+8Pp!-tsl4dGMiOt|jO*E&M0p11Ko znZA_bJNKVM_aj-GKMqG+81rH~zov4dh%My#1{LT7M`|?(E#Dor6CN_Y137!%Zc%dW zdAD0`OK=c=zSUXS-ctbIT%*6JUlM+q2mYYlN;UfnKc@0H%baeF3ZZGP@goI3oQMHM73O@!Fs+`U8 z4gUEhtsPh0%U2X6*k4x#hX*f-@|rge^Lg^ny7Y#Nv2;Ydb0y)ZJ$dqkp`^4F`^Gig zq9u8IszydtSFz7CDHBn{Dq1;tdCsD!H0=Vri7t_2xt~k;`T0+{&GVpp@QuCR!Zm5I zs4vK3(5bq@HaK1NXcH+#+I#76%$*!RChG3TeQQ@`1{}4^ysJ43x#$9c>sd@qO)V`a zIi>P$w#F$2ahz@rWMpKl1WbM|7u`NT;VMq`2ax-gYkv8|hYu%QruSM~Tca6W$~HQeR+p~x4pjGjbMw=10qy3( zTZUGVHAXk^rJFWyHWYrItd>ZPj`Qj3S7q%DfX2BdMNR|LB{M^Q5RjoD+4aw2n;t#@ z`TKZ}e&pfNGX1r`3$wnLD5 z!B`+NpjrQv#aeS{ht2U!gQlGf)Fd=goSa-Y-2ld5|~XK*A1-R z*0!>;atzI=q@*PIN-7h2j!8q5bk|=xR#8DPOR%^zAWeeLFA!+7>n}ha12gkkJhD7v zz!@XlSWmIzL*lcYC$HyQ_oi5MV{vAdmbecc@(1k7wrD?s+VE$gU9ZSxW*-Ser>%C= zrcKkm&iz?8K2clu6q21hdv*(8hv}c$VX)uf6Gy6pI7jYrdJU{hm78Lt7DwOxYPGSl zIAORn*;_1efsG@J25D`5X0tn&XbrT*n%OHHI!6 zo;G?>Tlem4?5}T0L0VZiPDhOgamuEX99I^tdS@3Wy7_?X!-9ijL)FFxDtuD_B@WMR z$esiWXvMwf&H_7K;`Erlz3BDf?$(?2uf$y^ofm(1-hA&vR%{GzedWlJBPnRKH__F` z;)7%WV#3sLRo@ohft6AwgF&Sp(J4;;GdGf&n|qux8C;$(F|^p@Pd2%F^<(zdOoNXt zKWaj*fU&6$RRy;86xm?8uE)$L zwv`gEH3=vPKf*M0$zq^N0P=3q)6)ZZNeW{HS3pIe`fPvZGWOlf!UAQC^Hd)}ejn`O z%f_9c7n}pCah>~V*wd*R;R@>3lwPW|QrQH-oR%6Q1iKzOh1L zxteq1&&nby?H3>XHnFFglRBqDO*4IDA+S%f8N%?ZUtk91+6UYK!I13J9 z{w4C&tFy`i9dimhcJ6f4IO=y0B?pp;FKGQ7$_vQEM`&od&()W{p%8=eb(DL{LZg9t zz+KJ%=I-51*wxgjf8+u->xb(nYxX^TF+7((wkoo7vYyGcUbMFEE??FmkC%+UwX=($ zE$n1sI)h`XsssQ}N7}c4zqtG2TTwn!Y}~@aLPCrnZ2{GeSgQn?<~^SyS96dC&FDw;;Og z+qZ9eW~S-lSZA-vpRAmmc)fD3w|eDK*c>?~Uth2pqY^swTFC{(T~6L9ul&4m` zwv(AT`5jrR`M1}_Hlx^_hV#Fgx~|D5U5t#t!A3zG%4v`xD)0#jiJQYO(HM-34(NF< z?8-51cx~{}pLUP1g7y@)Fp84B)m%Zp*ZB(rb01Pp#^irF6L+xWb#*GRn87Shy@_XK0Q3wKO-0R}zj&n%df_5fRK*nv3d67cA~|di`9-Oy$ri|-;0kod|WZMa!yI< z`|vZps{a1yXL??m1=gL}#+xW9v&@?I*^6mxnPI5&8v9yzx6GTy@8?m?EW2xM>fh+N zoGJFMEU0jvXk1Nv$6Yvlig!NpWx${Pz zZPdPaSy|9&%iK!1wD69*IL!U>vVn7U(aWWl z!Shrxz=2(1w+jlyfFX`%EBeUtJ3Bj91+w15U!p#dUu$b0K>7oC`?l|9B*Q*26HY_G z^XbTtvs<+(X!^4nX2z|e-6xiN_Y+LsH^(kA7I@lm z_<~?GkOOrCcS$wJ^ZmA@TRpy7<2nz&LCPX(&{Y-`!EUa@H#W6Ez&bHI>UGz6UbTBt z4mil_u3AsRfQZs<4m z6z&|(c}RjQG4sX$3r#Ui?dB^Vy4*Nq`VX#>waJ3)Upxiq@?kOW_dObB6@s(R;ypMW zqUgQ08NUC{pmSnX=e64WiqKu+2ZK>_9=W0=_?Gt{{AeIXRdjc=hSY?b7NK5e0cpHV zOQXq?R(Y}dSmjhuKjhFYbaVoBuVn~D9;DQ3Wuic?`<|a4CH9zcUx}+X#0hHczOc%Hps^xVz#gRvZL z$(Oo6D=9-M?se+aDWa_FymK-zHa1>AvreI@sVQ{py8?tAKWycNu~xpZL-$S9V<|sY zPo&r%5PqzzxIsRE&zHJBF_W&Y#P==t#j(qxiofJ4M#6S8x8`dZh@`%UZt|v-L)a)_ zGKJ7xj$3twW@ZX*W0C3E$X{7~1RT={Qfe-IL~bN7+!d-v}3fv6h% z>eZur_coWhFIAy}&?+8D^^Epj7w7bx5AGcExO(Em2|h3DpUD*Dm0J?@<4Y z2S4})*%dlGW)qjw*WU|}-!7n{tZa;xgSHe(GCk_jvo*0_uhz<-B=Bw zq+zlhYvC2O?)i*H?Kn($hpTIAdDcZhh9DzUA3o9)oWBxK!q~No!ly}J|5ABzVR)|b zr`u=CCUjVR4j=iHCv4xJqI|E@eYCqV@?4}eO^!Hyf<}h!E70qP1ts3H)!Fml_O?z= zuW?ieD+9-e>B#lZNzqz5ox!1{pN&oC)>`g^>3_;;lmTra@nNa zLJ4SO-75h$Op1{8mcd@#4gvF1SJ#WtZ%K1MU)s!ennoKOXE}HFYz$T$v_JUy^K&?$ z;6Hj1$4s|@EH|gyqTy6GC!Qb06?v~M?51JjZ}hBcX;H@+sqM@mo(m0}MuWzfQ*SkM z`~ghJ2ukJjyW~>o(o3s@ir-{EUrYF!~6#dLjKyS#^{fI~BZP_>*p+DY94&9EaLuUd< zChU9Dlm9F)>l+x5`QXUnQ}+o71U`C13vaOsZruH#pv^HCo(mV-cwixts9CVZHeB!w9 zBqAc<;X|6+w{HU?SWryD)o7L@ivfpFPtyuRzi7@eRe@TFZP;+D1RU)I0t~0N6)>2X zw&|-X4WB5YFp6LlD)=@lRU!M^=`?S~bJ6_#e3E5X?z!>4Wy$!afS@3HeDxtPoBKPt zpGHJ{ju0{=+1lH`n>y*>)!pBn-$Qj2%%&DNFjvUuHy^7#zO4PRd_EEsnQ#ctJZ3wG zI08Q7HO_y@VwVL;OY9i|y#K<*egsL6Smf!7&BcyrK3cmkfJ%WUG-P=W*M@bXjCyuk znw!5_n9+kbb@)okj}`F(oGp-|FEt_DZ?KTJ(~H5A{iCBfweu}w!65vY-hJm zL_|bU+tbt2btq8mgyR?^bhda%FdnNj)u42nu$XvOI2MgM=BL_(@-j1HjB1{OLXC8C z0MA@+htPM!MsNB^4Z<208uYG&vIuZNAQ~*D{&AMhd@EK|;V%X2C@;d+JttmYc>V!7 zgyruKkJ^QzlD@C0dGp?i>BFl!nX1OL$E>|$zn%ro$yQ8XQT(&uTP1#Ro;&?O<7l_% zyp`(h`$4YLozOvmWWXzZ)gHhXBQfmRQ-iviHyMVii9;#}H=jm*D&~|gv&c=xgG!+> zcEh!>D7S*gX%$%0y@#EYSx`{@?OO;8k+!#*@pSK*D&s9}jKFav`M5Hx0Cqb(qsgV3L$;oWD z79RdudDmn|*8ai4LFh*3wY|}Mai+cy=?R>YPa1ljr`6P+wxyW}KZkHU0G;$`;|v+0 z6I-;syXfiD&_8UGR$+ zwb(eC5Y+Oe4j+C1d12@F?G>ojTWM)wi79CJL+kEkmWN);EbW%-WH$l52TkDy&<)|& z|L!Z*Za>}pR`VFp(jO>45z_9W5Ri>fzbUPk*77sJ^>*=@C~r@{UX(4mNMF?gH}Kk ze25ucp~I^ju{ZF@wQWj2;X&^a)F&NO`cZON#^IN0nZ_$QMwTmQClgGP7jy1}8VuZ= zu&Ld+_(p!jP(91J?afG^PSUo>pi9wK5^wmv8BfZDJ+(gk*5rQm08&)7P>McPR+@bQ zrD=s1kc@`M7()`lA~>%7bxgYe!H?yb$)oK2{Hs3DCthgfngt6#pIl$cH2-$!O43Dk zO6(h@H@L~vgoFcDYk=Et`rO6^tTqtDk3sqAxHZn?v;Cypsw5KSC_&V|y0HH87CFLk7&4sCc*>*#R zpLKgElL3j@#_@RLNRDVJci61C>gr?E2R%-6=KWH_aM?U8#~2O-v<~W9~HE5_T0HaDDNl4#ibj);L_kB zb7Px)nb`w4bw*W{0o~6n*@$V<11RNJRiL!To|wBR2r&5YlPO`Fg^IuzE0IGJndT69kl4}*!vsnYmVdpQziN0 z*p%98hhV!{>!Yd_JdC(q~%G=BZ<^&)w(_eJC%4fA~UAFd|JG^78}#{}wypCXVy z=#$P8LCMOH)L-7qC-E;kPybhflaX@nzZXNsz|BwhZh|!)S0g|Fk9?-a)Bkb~^Pfpi zMkT=m{YM^Y5faTd6MFx-Y6ErmLfhsZ5l9&>Y;`QOBS9bMD{M!Y>O44a#DCRX8QRUk z@wmKP7S8DDUPk zu*T?c?pj@hkZ)sSqg?97R9swKN2$AW?BvIqn)@(0r%}sxjd|T&=00{_u;+pA`#k4< zv2iNL7cb*~#sP&25RW}9tQ8jq&T-4hsj8~#b>rgp|FB7m7yke@pS*T0LUT;kdtC~8 zW{XZB{5e6Wfz)$~6d*ZY%Qx0+z-Tm*SGIqTuH!HNQ{qiywBg;@#ZT57!BbFgA%pX&u3%OFEhXeD zJH0D*o~q|V6ffr9v3n361`(_a3JPM90t_L{8sCcP&kOx3K^)RVV*>0fS^qokSA3Lf z{eImJ+Ld+Zr95X=odf9PVingkUW*fpT7Ws}HJIoqm$N-At;L&xNswrimsX+a?la$2WAicx}{EvsM zb>~#Tz3I;tPr}Kc)%SSnmG{QCU0Wtt0>1aTxcwm}CZ?kB(bm-65HddJJpTOoEILWm z@6MdOkRQG+8$49B%rWlKNFt-z(Dalch&q7B1@=cmrt6iI>r*%q_6THMjFLJ>*v#2L zbO|87p#s|BgqzPH?Ivj6e1JqyRU9d_a=(BAN-rM;d^i3qL`X#-Csm zI5mhS5}7AL7=gG#q=Py-JCU_MiMDRuTPy-^6ZXt^IEwfIfnq_#NvohU$Uy$8I*(uj zAx9IA2OMs(FSmAo*PQuW!QigEQPzAuNXu|g61x}R$@@o$6H2rFD~GR|8*AV}fiW?A z5!Y2huIm2%`;^xG1WQE>Ja6fr05Z$8fdi=YD=zr<+xL5bBX=IUpg-{bHVGLiO0;S0 zZz6Gg`z>Dr7>OF-6A2Dd6?hntMI|s<`nxe*pjLe-=OrtX??~{-h+kWr>^%>VmS-oR zm8%aw2Rcls8o}zf4L$) zaG%IkA-Ie929E8^#P!XQuDLe-GV2Q&-nYiv1SS%qx=&i@PCR_@AP%y@pGj^AP5|ft z`L6|1bxS4KC7pf{>^~b)t9k77UMBu)@83<8Jyd&ubA&unvS!Yqrl!BF`b3~O@H{RP zg{uN_!~{Ca4UkI$I`6LR)R0HC5owo4npMo%ykV_*MphP4f1lcXbPt>=V2(l)CLADOSJo zJp=QnKI`|X-ojhHaNDz8W^UAm3lMt~Wd(s}-S zk4{ZZO;FE8t|*Zpk52=tS{v&geZ8~vzi(8oEiGhXbDq}Mk8wTh9`IL3M<;JURVfQ) z>iU;8>60X2y{**LA9{Orw3*o0R!>gY|C5vT+rfj`y?Zwvay1H}gE!HoV?2Kn#p3`k z?|mH7TfZ8)fKJb$`porCVxyWuAtSQm0LszGAPzK7^! zd+S!Lb?+U|%+)bM^g*+z1g1t23c)Et5Z10`==bjn$h|v`wVdKT4GxO17*vJ8U3^y? z0XLvKd`6w(G?R)4PQ}R(sGcnkQUn|JBP#7kJ-e>k=;Xj9w9@_k^UpxrQ6#WB&FN<^ z913xgYfwRueUGFQKjav&)xOU{l%iZ*WS=GcVd2hw)}TGe7OUR*Zfe6z*qbqUsbyGg z+k@xkcK6@ClO%l3BS#+dUVfc8Ghn&{zYVL;gpd}-${T$+k*{?0SGgln@bW%^1?)p1Hb*#cJS^pt1*>@ z314di-?)vcXJWdZ*Sv(y^_mpEcYO=}(r%IazMwaR=H=x*xPQM%pg+&z8N`WDa&;r4 z1U02MIE*6b`^GT*NmtUeMDk!I8Vf%M5BN9Sua*JzZNbFI8TBOCZene342@ypR zS6xdur=r5m!xMlV`ZFSqTGKfa!Hyb!F+u8?x55^JC)+}6#16w!WBpRdU?> zSo7d-p%Xi)yxIKA>qmM_rgy7U=R70Qp_RWYNVYd*>)0Ka+Iu)cm4#fqsa)E`Y~BIK z|Hx3iLpCr*c}<-CB8Nxjgs%0bQbqaaJ)Cp<@4`9Xr6p)2$+GFxy6tyT!iZ3nxfRV( zkBG#d6EQEh;&3JNQG%%c#wNb~YT zA@>0*z#7-jE=VaO`qA;u+2)d%{FYmsJ7`Zri-e>>pZgVZCM2zv{S(fZehOkcqQZ*2 z1RZ|q$nM5jKW5msyP?NM zh62z!2Py!*&;@_~2C9N}sT!dHq3&~psvWmzdjw+$VQvzN)dd4SH52K6{h6Gu}aq}JMc!?keBtqB55Q`ns z8%RM>_`qX~_L$vDLNPFep!A4ck_j^3#b}v8UtiyRPlOB6h`vLXgX3s6p`@&Q5dI`c znHmC{M7|MT0@>LM7k)sTjfXG<(ZIYLQu0;+FNiGEMt)iV+)xibB0GR9{f@4>vI>C~ zve!$rt)ZVk&!AQEUVR&p-)AJ81v-eugu0jnBMQ9X=6IMI!k@%A4kD<@faXU_=bu`0 zqB;)0zfG+Ff9=PQ^1O-aCMK_E7ZbqNaw!9LzpSApmYSQXMM&a-UMN=IFNgcj!i&(!$JOR_M>*%zikU{N1 z)Zi4^7z%vx#9_o`u4d?_m7?iANKuWw^Fq+z4vVZ;3DHQjitG~e*Wr+iA?$Yv$X)$g zl8Oc}>s5HD>WJT?7hpi8)qScoN!NWsWC5;O3i24KDOXZcj+xf~TD%0$LBy)-_(BbL zG!K!wvFsG?ogqG(Mbhc*3sI{V2-T?)iOgDL*lQtA@|nYYNoAhS@Kt$EA|-b73z1Z%ly`8*C5JTCgVCadCG)X45ByC!b4TA@IpF1D^7Ff}j>8;fZIKAiq43=0fU%O3CLVV6Q7+ue|`u%qb;uhd0c><`1jE&TV`A$ z1en#X)E6y#>zSkr2YtYR)=B3$V5%0~?v4)96RelO7q7@tE3bb>8&~0!8xol)Dyp%I z2-3}nkKF{r#W$M%_#9jU0_ZVY!woHhbpFeo2KqvfZgj_7Ycn7^0^E=>Wwl5yFCndH}b1te_; zd=`trr@%_>)>mDvIzi9gfGH7qRAIz1bzFW_=?khtAoTF`6nC3X&hLRN)Y8(zW(+?^ z9Bfo}ZGI=x>GPAlFHwwkE$1L*+OwqaQd&SX!-b%wGFkbwXNEw3Y zgU?RGB>3>*4xWr4PL`F{c&Ua2IxG^{6Q$5I06ObkW8kSE5rYfKc3A)Z2!P2Y3 z-{88NvF^l3C>ZahIEAfn&3|=d#a}f=XcA()Yo_-}E```**ATA zFTlv;*Ua8zV`BsP>?8P3-U8OUvaKzAV|}R{CNOaC7kCeesqx^I{CZ`taLC|CoPubP zr*GEwb`O#jgdqzO4ZL_3K4qR&X-UZz(5O}jJG;0h4^BDaNZEa{UU$A6| z2N5AXLcamF5q2C?pU4q2Ya}7*4Dn*yd)&wUfPeugiARxwB_1`j7sw#=puf2bbF2T( z0$_*JWA+QR2n_T+L`OnhLk#CbMa6CKObS&*_|wwbGxWG&VeD4Lo>RCKvU5P=`#; zN6LEZVt`vkTMsr&9w=t7P)EMi%M^`_D5dk~k2RdyB^UAan5%DhNX-AUy)pSZ$5M%x z@H#ZJ6Vfflr*NuZ(6{uSbk0EYfIJ6MQ@0Szro?OAS8_iu&oSN6s9?xz1<>Vyv~(m+ zuQ|oH&OY}kY51Zafh^`$X%P+Ps!&zHt)9-%Erpoc_}X8F4`af6q}`4~7z%k8<>x|v zPLMH{nCOGvhZ2>b9I}=KC5JHCP&8_m?=YzFZ1vyAgt-qyC+zBGHj;|*R3Jfi3`H+{$ zP_Q#<&L`W(H_xK!`0z&8yQRWc4b|QQ8Sfk<6ZY-066YUgc+Is(Ehn5!Mv1xG?uCG; z|DLw$yZtvF1;09U?B3Ul!{dU-E^SfPO#95WKi=*v6MMo?@4`yFicPv>rROuNjFF+i ztQ9Z4_7yk1CHJ0;6;GY^m9qN*XXA!!G|~=`vLBO~_HwGbn@~^p*!4R41_a!^P#}L! zGx%gP<6c9tC&ilz%d#EZ|F+weKH_xjqT9DGMZA|v-k3~Z_lf3>p9&P`rb5?i z?zd?c5HTERy`z>JW3~6_IUfVR#{fnwV}ghC9cOEk*>NJ?_u#<;2d76#rxE*q%qgqe z-n;j&VxyIyIunVmo1(XY)W+vize1L}M0RP@EAKpqU!!fJdvB?ain4#Mt(7}>?tcAZ zM!E;iM8N&~w=vv#oaL+GQoIB-Aq7jzxAk4#*OB!4h(Ym7s;V)0qF?LkGNC3As;ibo z$gh4Sv5Jyu4U^ z?HQ0d6)71)L;d4hzdM9}_Z02K*%cHNZ0x+nK@4j4xeU=E?M97xa4qw1Jw0qFX1ow> ziQkTR@#1EpPMr7t2`c#+oxNq;sxIt}7Nia@vIx3o6fwfey*^dj-j_x+j|8$iuuz{q zeYyiLgTR^7H#NP7kpc?1*_%jjwF|a!aByU1XOok#zJt(apuIW-E@qr_bwo7!78nWY zDm^NUt(~1(?Qs@5$nW8S1_WX9h&HcsEK4>^LF)FJ$$ z7X2B#!h^si#N#2NP-*$f^EPq4u?cn4&8j4yr>o6ev5HNuM;j-dACDWNb` zSTPg{^{%T;Go1qrUSzD)PLwB_3 zfP^Gm8Q)}Pi?(Rlkx7QC@)5&MiC(ap_6ZB`fEy$S!xa%QV$2$RV>3qSI|^(#iO?sM z`MAtX)y^s0{xamC;E<5`T!JYf=}t_4DXOZf`pL^74!Z?;UEp#CCMJKt*-&>n7}oOm z+(~2thUSzNvL%XxVt4$l^7&(t7(`=3dg1Q#cTXf+EkGjDcO(*FC?m^JjStluQt4=& z*f=m@(^I$|Za{Uw_WdL&mz~Z|PE;h&A}T_a9}d$Xo$S;-boekex`v>T5Sglk5mDET zjExNda!EeFewh(M9wb5~9|A-YRtkbYxMCk@Z2Ne5x8f2%q9+Uv4f$d)l9pY9k;K5l z@&Ge-h}+Qtnw#~PNzcyB4UUf9hwbyRrG*iTb}ip>54x5=GNz$U73(hRg+c+GZe>EXayIC9apnGmwV) z2$X>FOdkxCxBl8VxVc$?W%SZCCkLWUW_hgxq5TD|S`z^TN36BCnV z1VBRdiBfk9kqHF_1-wLpoHUJVGXxS+lf(iOI~_yp_4<3=E_AUgrL;5J7H%qGpg5s> zG*Zt+{e|VgqBDI||N6E@BlC=)4Z>g>hAt3DMndLhm-CxDVe;5MJQK3~va*~cL9jO* zsgHeq960FVSH)f3+-?B6VMGyw8vC)!kJ2Rpn8u)&s=dRT6y$)d?d(+>mp%6aQ+5xKrl6ZQbFNv?rI(ogc6Tb-PehV zRaKlfve0c@S6+K>tgA&h{%RzH@unKZDdoa|Xsw1E8BeK1@>vKJsZvbauS|@xD3O!Y z9roudjVto9_EW`_ya`wK9~&JV9Ay1)Ojwx1eB(u^#%o9rBp-~c1Ll$CES{?-f)4JBs$n2(z=fbsc*H=j~bp$Bo4 z$3qYGgw~a1@|ES4r1Lh^>Cg4`>G>OB3%ip~=%;p#47x^vaPY`mw3@>YA7KuN@^Q*w zelSHYlz*~>!gf}3pkc#(UUXiWqwW|fF=!z$uf2NX{$np&ie7|L3~t^`c{`Sso2%Zp z$&X0mMl5nwTZV(tx=6g$8O#a2WY5DI-($jp9dB(3d$+wS;zSq@jj>9h&}Gdc7R0v3AIoN9VXEO2-K`OVe8fO>sv2hzD)2L zyx~Hmue^9x7@Jb@)G4x`^^p(Jrw(^RaC(5G0#V(t--L)2farI47$(Bmix;avL$)(B z2LMMHBAcaDR9Y$x0&;oM1>zDBM2*eJ2*UFs=V8AAqQL>~dZ@Gt%#@3tpBDH4N`gG5 zQ4nw^Q(yOgd!8V*2nOAQb~Z!=gy7N>FZi%qzoy>~o`)d--5;%S>t@Lol7+ zi6-@cZb=TSjmv9FOM#Zx{zhb;T+$GG8>wkR#Szy#E$$|h zy6BBYN{?qn4CVpU9ET|znz81BEOiqY^@Ud_vL3rD%`YXsj7>NbsU*)eXQ`A$3wWEF9ec&AGDWTUVt=_W!afct)VXc03`W+Pftm` z{2)YR;*A49NT?flCCP2*gYT=W6}S4Kh<*o3a6w!+#XK+|C9YfC|552K*$f^*^_v4l zDrDcd61}6euNDV#Jj5}EsZX4uG_Qx|Iyn24Fl8H&Lx#@H40z(3l_eyzIxSC1T(X8G zzK@58(1KHj`gW|9jxO%*ndI11?=IugcVl0p6P@kEvAwSAz7v7$KIw{Irc_k;2>|qW z;qv6c<#(vdELeDbYwO3@UA!8?Z{EE5+|ZCQ6FIJ+PGIqKGEaVQ?%7~h)h0DuproDP zqo)N*x0hJ|I-;b`#H^s8J~DQQIUwNIn}r5u7bKI@3Mo5)QeNZ|G(|v_W$%p{qsx54lq;O^e7AlzI420h6_HE zwpqTp@=ZYASirT^$7f%h$jhf!QBY`2Zne>9H8LI2n9FDIJDs>$gEhv~ZO6Rwg`24~ zxHq~;9iboGYqwuoi0vEyEOauSxA)p5syFJ18?9zf9Dgudr}qY|CdfLprYSxJ3V}+B zLY18UPEJAH!eIxk>+U1_>hoFCOT;#h{H6c2Fq}$8`g`b*;1UOAGAWs4KXs{5Oq7ar zU9XIV`17!(pL_A^vq!GCoNni+0d^V$O#1LaE-haYBSi>xQ(1N8R$!hpqcxxNb(2{p z#3b(vnd}Jk%H}Gl)8H$eou)#fOn|GTdi5W+VU!&Te2G9WJr#gTBJT0pzErcZ{S9k@pE-0kUSLC&{SRhIX zB85wUav)3MZ9Pc6Y7H%>?nLYjuX>09TC{a^BwmrDMyw(LB@~_=EP;fKi`R+V!@FJ7 z$`F%);=kG7-#^IFE9xr#Kh&wc#PD+S`J=6l&H?MeSZ_BvmVu%x=Q+(eKkhF6;M7f} zZ1< zvMUub&tqiFMl>LmHz_J4WmX8KZJ%}bzVCOw>l@BDoO500pYOjev4`im@87+CYpvgU zLRwqBs2LR7n|D*w*X`SP`lYrJY0RMFZ$7Dnn6yT>$#37jQJUF%@rM=;4q@mH;}a6p zQ#;XJLdmJZ+#*`ey$nxfbRYC#gy^kvcz3{d9JAv-;7YkUsAq{mn=9Lrbwo%z`|;yP zDJiK6042;f_`oD%^VkkDS7Lh)Qa`nCZDhOcd>s(f{w$0*5giIBXpmQ>zM_R7Q)|Rw ziSIdjConcvY-%KiC5qXjUIQc*)<(tW$;9G&8@dSxc7L%Mx)hssv$;1eigx|_bx|dy z$-q{dS2?jSTOFX)P-GM`WAxXY=xAX$AOYxns;kw>;)4GI^DQ$e$WXL_h+;&HK+8x| z_JmZ6aSmTlx|J<0B^ue=z(BiRA!;;RM8k8#70Sv&6zx_gpPc!Yf`>BupU{zoVSiBE z&DpfnGNt!pL5X!T4eMb$8ZF~i_giCMM@MUAOV|Bb12JxrYM689jxV+>VV#dFtX;cJ zP0h!!5PPV$Y3C7$Sn?QhsgF|P_4@H;76G(y#Td1QF~&r;&=qE0ozDOR(g8-iF=lo7 zL|lv2o6<8nic7d`t{H#gJ6?Vu$aqSG?QGsIEBgY2rK?x3&M+AidRlF4^d8%8h|>HE%30@`MaMKq~m_mcRA;NW1AzW~$H)=Xm= zs{!;NavL^ipgq?$H1q>IL1w>fnp;}_?mn}dIoF0?A0f}oZ&7uO!mS{Cl008 zxzHMuv;@f7!gx^)w4@w34ER)?jZkdPqo#|>%X7hWpaGjCxbKKzoB&pc+TqdOj8gx9 z(>E*=vV)uj-1ZP}Pcm+?3kX(E`!&r-hSc`Wn+0J5h1208T;JYl*_7~6b8~NOA4~YB zNmv!`04EohPl27tN>Sq4CioMPrQ~l>aZxCUhpzm4Z@O(*ctpeuAZmy}cQri3<90|m ztHpEKm>uWgy%5GFJ;EDQC7_W0Hu3WVt?)HoxkYmB!8<1{(@{3HOU4`=A^73k+ODB- zA)g6ph6hyH5=tF?d<}XWyq!NjB+|z84jfoXrXLtKUiiU6;@M@}0^=`9FlI0q*CEco zAnHZUeJ}d(@NjjR>qvyliapmw(SXUoavh;qQ&R(6ymRmV{d1`**mW_}8kmu>5>!4i zba*Lsuwli`g*fEDz-wyz=`fexCPg$G{Q;dDCmX#YK3)A)(&XIzR{GNNqNNktGFj0(T<-B=w0J$S%;s}FRlUCy)0kq^RLz*Q8 zU-$QXGh=XO$C)`!+C?$$s)aqkOfas~Hgf3>nwg0}V>I&AF#rPv^gi_}7Bo{Z7B?S1 zKfdm4IC3XIN?U-6Nt_}*RC}$DiFYu0UbRD=g_bE zI)N$Tig*#=VMm2^f+32hy>~HGyvseC80|^VMf+Z@F7g_jcB7;;&L^Z`RmsCr&{^+k!i_#=V+7FEKi|^)E3AT~08_2kq` z^?K`|at&Eje~qhu<0<|8%z>=Q>^*4BXDBG}iyFOFMM)u?CzwBkk#c}PPuvs#+#F;i z$+JWQjB^X|y9;Dw()ooLC1ZuhUr$4@9dP0@MMZuDGV&o9^Ts-xY1B?kO2Qj*k~QUl z|D8?(LH%$6WSINWNrQ2mj#*`)TW@#7>!%V_KRVPV0=2>#Nfigr1a_MZn7P)FVK}&2 z2zZ1EiJNeCz@&*k2H%zv>;fuet)PlK!Q-_zX%s=%AmseOxnRKM5>jb9AZ%-X!*6qO za#HZ9Ai$HrJT&m@RXk4*486*o4wSbQ80uD36cP{SBey!y9X&Lmq(LO%&q#Ix#2W+Y zu%MuADD~gRhgL`N;)Z}0w?xZMeiLtCGWf=39Y03$7bAkZ0ws?W#MI3=hwx@(2Y~Vd z8M(KEYy{@t-}d1~N<-FKoiJ3AXv?P3;l$g9SSHEGt-+e@PYU}!-R1t@!;S@@0{*Hm0i zPPhK1f)21DvHT~JtJCq}g9O5r5%W=q;gV|6aSwBPnA$tB-bRG_`PHDyk#i8e^NVaVMoTl9PtCV$)^33XW_d@y)W=~?0_$;^BkOUv^J2eIwLq-M?=GD1#Ko`~ZH zk!n&D^LLx&LIqyiOx}j3^_s5^^eA1Luc=Dt^|0Nkt#mvu_y_5X>{Fa~FD>r(4cP=<> zMB~9nBeP`0!qz#NJB&S(%K72dG$Be&xHxhy7jIsT!2^u^bTTG#Tg%uPbWpAZG~AADxYy@r%AJ? z7D?fUJ+vD0sh{iDKE0igFar+!LnjgMMaWxy4@6F2`--k!ty8T3y-(=*Z&Y^nI)z_= z>N{0Jmab(7P~uZ@-w2Z4591_@X>?8Lr}gy&M_E`}>UVAk+&LNDYmWY(8>#Bgvttat z(nZwJo;tQyupxY%2iKr#?bFS^m=vaUp}{7TOm$kDuPs${mO_HzMKBY~mMxo(CI0|1 z-$@arMMXp_C1Pf*e(E!LcvG3Zp=JjsVcKfsbB81-e{Sr!%^DIfP9ot^+1O#$LV=R5 zG)LElMtN7Z4fZzKDCAS4joUWc2Ljlx(o@8Rcg<3=qb#5B%U01U&2(I^~VER{o^ zH9|c-gdjw`BMN;G2&-!st_Gx>*nB$uG6x68 z=h&egJ9QZI3r!9z>!I1wyPoH+EUEvp4XE^tHbu)D9XK6*I%QfvZ7gJ)zN@(nR_ z54?Ptd!FODnK80vwO{+y)lb7li!An4o$1+yWH=HWh$ge zqtU>sFqVx^c>v|c75mSuufJjBwrnXES5tYiWhhWywD6Ao-eBMiial}6YKWgJ1PVNP1@UR=xs97h5e>c`9NBil!e?K;ary6apNhQUiW+N{Wt z%O|}#7WUId54;6uk(`pGW1KU}~VH)O$T;nH_!B?)_QRbo(j8Kp&sPCLe_)Ye>HxTn|}kCdz6+SlAAX?Ls$|1Mh-#S@qO^lfN$bY}-TTlkWrO+I0=J<69B&5#(3d zXya~0Rbf4??tXR!x~6|&+YO2e2>dqx>1M0IC9*fRCF)l`P7Tu^f(q=Dcx3LIvd9Y{ z&n@2@Acff+;p#9@fX!C%hW~o;JQT(XfFgwU&j*NhA9WplLR$^vuu$R0ery&p?p4A#8xcq$Ec^#npK7x}7 z;>Q^Sp4q4*?wR$vfZ$+wkj3E)osEM6nzD2ko{S)aa+q+NxccDJkw=gPktMlNYH^T4 z-B2W+MX2FdLQnmeIEe=mRK0q|2W!wp06ymhot>R0@#FwxEOFvz*Y7TR3Kk8O zjfB2%adgbFep^!Dyb@#*x%s&WXMdh+wL=~Nuj}iQ#ft+l7i~h09pbCCL{2rV@y2+b zgq{u1gwQl^&=6cO1*2=(SBCIaOL*ex<%4SgQx;LxcoIZ4Y84@iz^s(QxW*0Hga<%n z5s|dVFTqvbG$~lAqWB5a8#35=S#)(#rLtqoQQdO!=cxBJ+LzSmoq}D0Mft z5{y;BA{2z(pxn6Wl#9y}gaB}%E#Sr!15zx63FmbDUD-ae#XwSwssdwBf$2GaTXuUQkXhi=QQ|M#^fcicfP~1{asTJ9%z8ftZGVsyfMlV53LCg z=Q`BiMHC$C_)=5cxjEQMRN|EYXtp?4)lZ(3{~O{!|0JYuD@-zL60G;Y9j_voHFo1+L6nyo25au zlPAaMy3vn1IIyajqHg-8b1pnpaQ8X&iCbo6Yw7qg#2)fynwlED#xu?iR7&oqndLf7 zxr--hNB&S}zDUaR>ZT$TT*PMJma+d2Dpl4=od%65%La7)4ryf^6_{ z5tOzBi=d0A`(Np~_J8=`hwIsi+;n7FZGjR;;5wD4z<>1EF{H6fLoq}*k@iKx1xuAY zP7OjML32d6v#^LAR%8varWQi1)myRF%F z2yj`=WXa5Jk!(WNVV59gvP951?7(MnUI`XaaFdgI%hT%W85H3>Ge>>9ci9{<($~}L z+O5YXsw9)nZf|(cSXD-5GW>gj9sS+qT=|3bZ5oA6YBearT$Q=DuN6gO~F~88I0|CRtVCHdibK~6F zj%7pGY(pA-I2jA;(c{NznBak_$e+}|%Gmip3vfiu@m~Y4U+v}2ypd-Jib{3B)X5e7 zCA_@JdxraNl$U!JGbHhXU4uc=`-L862gD}(V=Eu>8Zg3S^MaW?Z)P8T9p^tPUAV@+ z)zs>J^_QJGI;%~RHt52py2`XWHKRX7`zFx_F>Qs}z>*dVHoE3aTs3TjPOub4cW*{U zqCdW^@vyF;!B{0+5; zgksNGVM7AHgso#MRBh+zpZkcbV8x5$UMH$RXUXn~PdHcMgT z_r93t?m>P1xXtA_g%QioOAN)7=0$z%G5>(6B=cX1Mce!|& z51K}9(2eMlc7U9;IDFU-1&SoVk+?yq+KC;xc`oxnke8gcgLepOjUK;B<5x*bbm6!# zofzY5Jc+AAH#$Q6ra+wZ;-I|YG{Z9u(S|QsSt%mIPU3016`3wgfOyB>4f9MXol%); zdl<9R!S)D$$ppyi-Z1j9n*{YC(v-OJyxqzHT~yS>9~P; zAyJq*;nSuxReO;2`xk=HEC)}NkOw$#FXCwJfUW|1tO{F@KBl#257D!bP0EeL|1I!G zJMlWcmgvDIB92Fh>tf&u;29%*IyzwX+s=X>FcOnKpO~Wo&2b7Y1vJzRy@KRi_`^k) zEsIZLm8KoR#{@}J30(tC@S`VBYJfK60ZM+-z{K~Saj@%V^i*Xsqt+!| z>6i`;He|pJFfN%dTO{1XOH2n1_4UO!c;@cg6a{-fiF&6K0m%~KAk(}lQ8+}a@!e)n z#BYJu1sz}s{#jE9{SWcA*z|P4-VAuXe0jvcmqJih$GQdHJXPS@Z0oZj9mrc z!EIU;C#sA4=<^+fK-IsR9pJB1+NlXP4x4jW88x^alJ*!W9sj9reZt-4 zfjJdI=Ugfdg^n;5=#!*Q-*sqPh433`ir5K*P%voM(qDeKwMj`S2nc1j$4%vPch6$1 z3t_N@4!o<&KA+FG#}wsz64!G^IH32E=IjA4b>6M*bx&G3na>t}aXwcmJXGH23)RxX zs9lk&2<|a>hN_dXU&L=>;#bYLyfK$cWBMBL&9HBi=D9{Z;en>AmT62lBMefeI&yEu zdfT*Vlib?1>7#=07+xZ{oIo>K`3nJuafqEyO||hKm@P)0^+~i_8M~=o_-)luw6I4d z?AxF>Kma^%=J{>ABWl9))x!gR^6NXy@QfE*FQ3Lv-?>`WeGE-+bp-IE|b+e6o!og> z#)XiGyu63(?CjT7>^Y7f7Y@#a<;3^VqeU%)@7gZ>$pIM5pRM~{2_g7GfPKczZ&M6_ z0f@^+&f#5I$sk9#dSB%);|zf^@8MWo9>DW@cb2lW;IN2oUz;_?L9Zjb7{#re?Azz6KWDPUcdB z+<|ll-2;Zfkm_tp&v_|<@uxH$THMYaS;S;2m#If~+rZp|5tgY%9;dhC{&nC=oA%># zDsx1=dk7)UOSM2452CzB7_thqSjs}SE|T&fZG@xV{QQ42K~2=X|3Q)a3+*oOB}0A4 z=FFej1q0RoS9ZaF#-sR;1-*aW_xPXJ{LhvDH|( Date: Tue, 17 Mar 2026 15:32:28 -0700 Subject: [PATCH 04/16] chore(spinner): delete old styles --- .../src/components/spinner/spinner.ionic.scss | 63 ------------------- .../components/spinner/spinner.native.scss | 14 ----- 2 files changed, 77 deletions(-) delete mode 100644 core/src/components/spinner/spinner.ionic.scss delete mode 100644 core/src/components/spinner/spinner.native.scss diff --git a/core/src/components/spinner/spinner.ionic.scss b/core/src/components/spinner/spinner.ionic.scss deleted file mode 100644 index 664018a268f..00000000000 --- a/core/src/components/spinner/spinner.ionic.scss +++ /dev/null @@ -1,63 +0,0 @@ -@use "../../themes/ionic/ionic.globals.scss" as globals; -@use "./spinner"; - -// Ionic Spinner -// -------------------------------------------------- - -:host { - --color: #{globals.$ion-primitives-neutral-800}; - - width: globals.$ion-scale-700; - height: globals.$ion-scale-700; -} - -// TODO add this -:host(.ion-color-medium) { - color: #{globals.ion-color(medium, contrast, $subtle: true)}; -} - -// Spinner: lines / lines-small / lines-sharp / lines-sharp-small -// -------------------------------------------------- - -:host(.spinner-lines) line, -:host(.spinner-lines-small) line { - stroke-width: globals.$ion-scale-150; -} - -:host(.spinner-lines-sharp) line, -:host(.spinner-lines-sharp-small) line { - stroke-width: globals.$ion-scale-100; -} - -// Sizes -// -------------------------------------------------- - -/* Extra Small */ -:host(.spinner-xsmall) { - width: globals.$ion-scale-600; - height: globals.$ion-scale-600; -} - -/* Small */ -:host(.spinner-small) { - width: globals.$ion-scale-800; - height: globals.$ion-scale-800; -} - -/* Medium */ -:host(.spinner-medium) { - width: globals.$ion-scale-1000; - height: globals.$ion-scale-1000; -} - -/* Large */ -:host(.spinner-large) { - width: globals.$ion-scale-1200; - height: globals.$ion-scale-1200; -} - -/* Extra Large */ -:host(.spinner-xlarge) { - width: globals.$ion-scale-1400; - height: globals.$ion-scale-1400; -} diff --git a/core/src/components/spinner/spinner.native.scss b/core/src/components/spinner/spinner.native.scss deleted file mode 100644 index 17bf070c2e5..00000000000 --- a/core/src/components/spinner/spinner.native.scss +++ /dev/null @@ -1,14 +0,0 @@ -@import "./spinner.scss"; - -// Spinner: lines / lines-small / lines-sharp / lines-sharp-small -// -------------------------------------------------- - -:host(.spinner-lines) line, -:host(.spinner-lines-small) line { - stroke-width: 7px; -} - -:host(.spinner-lines-sharp) line, -:host(.spinner-lines-sharp-small) line { - stroke-width: 4px; -} From 78cfbba78cf8d929694277d3ba32370f50fdddea Mon Sep 17 00:00:00 2001 From: Maria Hutt Date: Tue, 17 Mar 2026 15:41:20 -0700 Subject: [PATCH 05/16] test(spinner): update resize --- .../spinner/test/resize/spinner.e2e.ts | 40 +++++++++++-------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/core/src/components/spinner/test/resize/spinner.e2e.ts b/core/src/components/spinner/test/resize/spinner.e2e.ts index 5874f05181c..c5fbb6b3a33 100644 --- a/core/src/components/spinner/test/resize/spinner.e2e.ts +++ b/core/src/components/spinner/test/resize/spinner.e2e.ts @@ -9,25 +9,31 @@ configs({ directions: ['ltr'], modes: ['md'] }).forEach(({ title, screenshot, co test.beforeEach(async ({ page }) => { await page.setViewportSize({ width: 320, height: 340 }); }); - test('should not have visual regressions', async ({ page }) => { + test('should not have visual regressions', async ({ page }, testInfo) => { + testInfo.annotations.push({ + type: 'issue', + description: 'https://github.com/ionic-team/ionic-framework/issues/18115', + }); + await page.setContent( ` - - - - - - - - - - - `, + + + + + + + + + + + + `, config ); From edb041475e65de059183c3dcb5ca77e9be2ced14 Mon Sep 17 00:00:00 2001 From: Maria Hutt Date: Tue, 17 Mar 2026 15:46:17 -0700 Subject: [PATCH 06/16] test(spinner): remove diff term --- .../components/spinner/test/basic/spinner.e2e.ts | 2 +- ...> spinner-basic-ios-ltr-Mobile-Chrome-linux.png} | Bin ... spinner-basic-ios-ltr-Mobile-Firefox-linux.png} | Bin ...> spinner-basic-ios-ltr-Mobile-Safari-linux.png} | Bin ...> spinner-basic-ios-rtl-Mobile-Chrome-linux.png} | Bin ... spinner-basic-ios-rtl-Mobile-Firefox-linux.png} | Bin ...> spinner-basic-ios-rtl-Mobile-Safari-linux.png} | Bin ...=> spinner-basic-md-ltr-Mobile-Chrome-linux.png} | Bin ...> spinner-basic-md-ltr-Mobile-Firefox-linux.png} | Bin ...=> spinner-basic-md-ltr-Mobile-Safari-linux.png} | Bin ...=> spinner-basic-md-rtl-Mobile-Chrome-linux.png} | Bin ...> spinner-basic-md-rtl-Mobile-Firefox-linux.png} | Bin ...=> spinner-basic-md-rtl-Mobile-Safari-linux.png} | Bin .../components/spinner/test/color/spinner.e2e.ts | 2 +- ...=> spinner-color-md-ltr-Mobile-Chrome-linux.png} | Bin ...> spinner-color-md-ltr-Mobile-Firefox-linux.png} | Bin ...=> spinner-color-md-ltr-Mobile-Safari-linux.png} | Bin .../components/spinner/test/resize/spinner.e2e.ts | 2 +- ...> spinner-resize-md-ltr-Mobile-Chrome-linux.png} | Bin ... spinner-resize-md-ltr-Mobile-Firefox-linux.png} | Bin ...> spinner-resize-md-ltr-Mobile-Safari-linux.png} | Bin 21 files changed, 3 insertions(+), 3 deletions(-) rename core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/{spinner-basic-diff-ios-ltr-Mobile-Chrome-linux.png => spinner-basic-ios-ltr-Mobile-Chrome-linux.png} (100%) rename core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/{spinner-basic-diff-ios-ltr-Mobile-Firefox-linux.png => spinner-basic-ios-ltr-Mobile-Firefox-linux.png} (100%) rename core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/{spinner-basic-diff-ios-ltr-Mobile-Safari-linux.png => spinner-basic-ios-ltr-Mobile-Safari-linux.png} (100%) rename core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/{spinner-basic-diff-ios-rtl-Mobile-Chrome-linux.png => spinner-basic-ios-rtl-Mobile-Chrome-linux.png} (100%) rename core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/{spinner-basic-diff-ios-rtl-Mobile-Firefox-linux.png => spinner-basic-ios-rtl-Mobile-Firefox-linux.png} (100%) rename core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/{spinner-basic-diff-ios-rtl-Mobile-Safari-linux.png => spinner-basic-ios-rtl-Mobile-Safari-linux.png} (100%) rename core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/{spinner-basic-diff-md-ltr-Mobile-Chrome-linux.png => spinner-basic-md-ltr-Mobile-Chrome-linux.png} (100%) rename core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/{spinner-basic-diff-md-ltr-Mobile-Firefox-linux.png => spinner-basic-md-ltr-Mobile-Firefox-linux.png} (100%) rename core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/{spinner-basic-diff-md-ltr-Mobile-Safari-linux.png => spinner-basic-md-ltr-Mobile-Safari-linux.png} (100%) rename core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/{spinner-basic-diff-md-rtl-Mobile-Chrome-linux.png => spinner-basic-md-rtl-Mobile-Chrome-linux.png} (100%) rename core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/{spinner-basic-diff-md-rtl-Mobile-Firefox-linux.png => spinner-basic-md-rtl-Mobile-Firefox-linux.png} (100%) rename core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/{spinner-basic-diff-md-rtl-Mobile-Safari-linux.png => spinner-basic-md-rtl-Mobile-Safari-linux.png} (100%) rename core/src/components/spinner/test/color/spinner.e2e.ts-snapshots/{spinner-color-diff-md-ltr-Mobile-Chrome-linux.png => spinner-color-md-ltr-Mobile-Chrome-linux.png} (100%) rename core/src/components/spinner/test/color/spinner.e2e.ts-snapshots/{spinner-color-diff-md-ltr-Mobile-Firefox-linux.png => spinner-color-md-ltr-Mobile-Firefox-linux.png} (100%) rename core/src/components/spinner/test/color/spinner.e2e.ts-snapshots/{spinner-color-diff-md-ltr-Mobile-Safari-linux.png => spinner-color-md-ltr-Mobile-Safari-linux.png} (100%) rename core/src/components/spinner/test/resize/spinner.e2e.ts-snapshots/{spinner-resize-diff-md-ltr-Mobile-Chrome-linux.png => spinner-resize-md-ltr-Mobile-Chrome-linux.png} (100%) rename core/src/components/spinner/test/resize/spinner.e2e.ts-snapshots/{spinner-resize-diff-md-ltr-Mobile-Firefox-linux.png => spinner-resize-md-ltr-Mobile-Firefox-linux.png} (100%) rename core/src/components/spinner/test/resize/spinner.e2e.ts-snapshots/{spinner-resize-diff-md-ltr-Mobile-Safari-linux.png => spinner-resize-md-ltr-Mobile-Safari-linux.png} (100%) diff --git a/core/src/components/spinner/test/basic/spinner.e2e.ts b/core/src/components/spinner/test/basic/spinner.e2e.ts index c1e148b28cc..8a4a61c15ac 100644 --- a/core/src/components/spinner/test/basic/spinner.e2e.ts +++ b/core/src/components/spinner/test/basic/spinner.e2e.ts @@ -10,7 +10,7 @@ configs().forEach(({ title, screenshot, config }) => { test('should not have visual regressions', async ({ page }) => { await page.setIonViewport(); - await expect(page).toHaveScreenshot(screenshot(`spinner-basic-diff`)); + await expect(page).toHaveScreenshot(screenshot('spinner-basic')); }); }); }); diff --git a/core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-diff-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-ios-ltr-Mobile-Chrome-linux.png similarity index 100% rename from core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-diff-ios-ltr-Mobile-Chrome-linux.png rename to core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-ios-ltr-Mobile-Chrome-linux.png diff --git a/core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-diff-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-ios-ltr-Mobile-Firefox-linux.png similarity index 100% rename from core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-diff-ios-ltr-Mobile-Firefox-linux.png rename to core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-ios-ltr-Mobile-Firefox-linux.png diff --git a/core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-diff-ios-ltr-Mobile-Safari-linux.png b/core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-ios-ltr-Mobile-Safari-linux.png similarity index 100% rename from core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-diff-ios-ltr-Mobile-Safari-linux.png rename to core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-ios-ltr-Mobile-Safari-linux.png diff --git a/core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-diff-ios-rtl-Mobile-Chrome-linux.png b/core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-ios-rtl-Mobile-Chrome-linux.png similarity index 100% rename from core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-diff-ios-rtl-Mobile-Chrome-linux.png rename to core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-ios-rtl-Mobile-Chrome-linux.png diff --git a/core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-diff-ios-rtl-Mobile-Firefox-linux.png b/core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-ios-rtl-Mobile-Firefox-linux.png similarity index 100% rename from core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-diff-ios-rtl-Mobile-Firefox-linux.png rename to core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-ios-rtl-Mobile-Firefox-linux.png diff --git a/core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-diff-ios-rtl-Mobile-Safari-linux.png b/core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-ios-rtl-Mobile-Safari-linux.png similarity index 100% rename from core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-diff-ios-rtl-Mobile-Safari-linux.png rename to core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-ios-rtl-Mobile-Safari-linux.png diff --git a/core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-diff-md-ltr-Mobile-Chrome-linux.png b/core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-md-ltr-Mobile-Chrome-linux.png similarity index 100% rename from core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-diff-md-ltr-Mobile-Chrome-linux.png rename to core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-md-ltr-Mobile-Chrome-linux.png diff --git a/core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-diff-md-ltr-Mobile-Firefox-linux.png b/core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-md-ltr-Mobile-Firefox-linux.png similarity index 100% rename from core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-diff-md-ltr-Mobile-Firefox-linux.png rename to core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-md-ltr-Mobile-Firefox-linux.png diff --git a/core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-diff-md-ltr-Mobile-Safari-linux.png b/core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-md-ltr-Mobile-Safari-linux.png similarity index 100% rename from core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-diff-md-ltr-Mobile-Safari-linux.png rename to core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-md-ltr-Mobile-Safari-linux.png diff --git a/core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-diff-md-rtl-Mobile-Chrome-linux.png b/core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-md-rtl-Mobile-Chrome-linux.png similarity index 100% rename from core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-diff-md-rtl-Mobile-Chrome-linux.png rename to core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-md-rtl-Mobile-Chrome-linux.png diff --git a/core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-diff-md-rtl-Mobile-Firefox-linux.png b/core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-md-rtl-Mobile-Firefox-linux.png similarity index 100% rename from core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-diff-md-rtl-Mobile-Firefox-linux.png rename to core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-md-rtl-Mobile-Firefox-linux.png diff --git a/core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-diff-md-rtl-Mobile-Safari-linux.png b/core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-md-rtl-Mobile-Safari-linux.png similarity index 100% rename from core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-diff-md-rtl-Mobile-Safari-linux.png rename to core/src/components/spinner/test/basic/spinner.e2e.ts-snapshots/spinner-basic-md-rtl-Mobile-Safari-linux.png diff --git a/core/src/components/spinner/test/color/spinner.e2e.ts b/core/src/components/spinner/test/color/spinner.e2e.ts index bf445f883e6..313c4470145 100644 --- a/core/src/components/spinner/test/color/spinner.e2e.ts +++ b/core/src/components/spinner/test/color/spinner.e2e.ts @@ -26,7 +26,7 @@ configs({ directions: ['ltr'], modes: ['md'] }).forEach(({ title, screenshot, co const container = page.locator('.container'); - await expect(container).toHaveScreenshot(screenshot(`spinner-color-diff`)); + await expect(container).toHaveScreenshot(screenshot('spinner-color')); }); }); }); diff --git a/core/src/components/spinner/test/color/spinner.e2e.ts-snapshots/spinner-color-diff-md-ltr-Mobile-Chrome-linux.png b/core/src/components/spinner/test/color/spinner.e2e.ts-snapshots/spinner-color-md-ltr-Mobile-Chrome-linux.png similarity index 100% rename from core/src/components/spinner/test/color/spinner.e2e.ts-snapshots/spinner-color-diff-md-ltr-Mobile-Chrome-linux.png rename to core/src/components/spinner/test/color/spinner.e2e.ts-snapshots/spinner-color-md-ltr-Mobile-Chrome-linux.png diff --git a/core/src/components/spinner/test/color/spinner.e2e.ts-snapshots/spinner-color-diff-md-ltr-Mobile-Firefox-linux.png b/core/src/components/spinner/test/color/spinner.e2e.ts-snapshots/spinner-color-md-ltr-Mobile-Firefox-linux.png similarity index 100% rename from core/src/components/spinner/test/color/spinner.e2e.ts-snapshots/spinner-color-diff-md-ltr-Mobile-Firefox-linux.png rename to core/src/components/spinner/test/color/spinner.e2e.ts-snapshots/spinner-color-md-ltr-Mobile-Firefox-linux.png diff --git a/core/src/components/spinner/test/color/spinner.e2e.ts-snapshots/spinner-color-diff-md-ltr-Mobile-Safari-linux.png b/core/src/components/spinner/test/color/spinner.e2e.ts-snapshots/spinner-color-md-ltr-Mobile-Safari-linux.png similarity index 100% rename from core/src/components/spinner/test/color/spinner.e2e.ts-snapshots/spinner-color-diff-md-ltr-Mobile-Safari-linux.png rename to core/src/components/spinner/test/color/spinner.e2e.ts-snapshots/spinner-color-md-ltr-Mobile-Safari-linux.png diff --git a/core/src/components/spinner/test/resize/spinner.e2e.ts b/core/src/components/spinner/test/resize/spinner.e2e.ts index c5fbb6b3a33..dabaff8813d 100644 --- a/core/src/components/spinner/test/resize/spinner.e2e.ts +++ b/core/src/components/spinner/test/resize/spinner.e2e.ts @@ -37,7 +37,7 @@ configs({ directions: ['ltr'], modes: ['md'] }).forEach(({ title, screenshot, co config ); - await expect(page).toHaveScreenshot(screenshot(`spinner-resize-diff`)); + await expect(page).toHaveScreenshot(screenshot('spinner-resize')); }); }); }); diff --git a/core/src/components/spinner/test/resize/spinner.e2e.ts-snapshots/spinner-resize-diff-md-ltr-Mobile-Chrome-linux.png b/core/src/components/spinner/test/resize/spinner.e2e.ts-snapshots/spinner-resize-md-ltr-Mobile-Chrome-linux.png similarity index 100% rename from core/src/components/spinner/test/resize/spinner.e2e.ts-snapshots/spinner-resize-diff-md-ltr-Mobile-Chrome-linux.png rename to core/src/components/spinner/test/resize/spinner.e2e.ts-snapshots/spinner-resize-md-ltr-Mobile-Chrome-linux.png diff --git a/core/src/components/spinner/test/resize/spinner.e2e.ts-snapshots/spinner-resize-diff-md-ltr-Mobile-Firefox-linux.png b/core/src/components/spinner/test/resize/spinner.e2e.ts-snapshots/spinner-resize-md-ltr-Mobile-Firefox-linux.png similarity index 100% rename from core/src/components/spinner/test/resize/spinner.e2e.ts-snapshots/spinner-resize-diff-md-ltr-Mobile-Firefox-linux.png rename to core/src/components/spinner/test/resize/spinner.e2e.ts-snapshots/spinner-resize-md-ltr-Mobile-Firefox-linux.png diff --git a/core/src/components/spinner/test/resize/spinner.e2e.ts-snapshots/spinner-resize-diff-md-ltr-Mobile-Safari-linux.png b/core/src/components/spinner/test/resize/spinner.e2e.ts-snapshots/spinner-resize-md-ltr-Mobile-Safari-linux.png similarity index 100% rename from core/src/components/spinner/test/resize/spinner.e2e.ts-snapshots/spinner-resize-diff-md-ltr-Mobile-Safari-linux.png rename to core/src/components/spinner/test/resize/spinner.e2e.ts-snapshots/spinner-resize-md-ltr-Mobile-Safari-linux.png From 2ffac3e237eb9875fb518b7d884d3de378ee23b0 Mon Sep 17 00:00:00 2001 From: Maria Hutt Date: Tue, 17 Mar 2026 15:55:38 -0700 Subject: [PATCH 07/16] test(spinner): update spacing --- .../spinner/test/size/spinner.e2e.ts | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/core/src/components/spinner/test/size/spinner.e2e.ts b/core/src/components/spinner/test/size/spinner.e2e.ts index 8c3421acd73..0f9ed25de9f 100644 --- a/core/src/components/spinner/test/size/spinner.e2e.ts +++ b/core/src/components/spinner/test/size/spinner.e2e.ts @@ -3,14 +3,16 @@ import { configs, test } from '@utils/test/playwright'; /** * This behavior does not vary across directions. + * + * `ios` does not differ from `md`. */ configs({ directions: ['ltr'], modes: ['md', 'ionic-md'] }).forEach(({ config, screenshot, title }) => { test.describe(title('spinner: size'), () => { test('should render xsmall spinner', async ({ page }) => { await page.setContent( ` - - `, + + `, config ); @@ -22,8 +24,8 @@ configs({ directions: ['ltr'], modes: ['md', 'ionic-md'] }).forEach(({ config, s test('should render small spinner', async ({ page }) => { await page.setContent( ` - - `, + + `, config ); @@ -35,8 +37,8 @@ configs({ directions: ['ltr'], modes: ['md', 'ionic-md'] }).forEach(({ config, s test('should render medium spinner', async ({ page }) => { await page.setContent( ` - - `, + + `, config ); @@ -48,8 +50,8 @@ configs({ directions: ['ltr'], modes: ['md', 'ionic-md'] }).forEach(({ config, s test('should render large spinner', async ({ page }) => { await page.setContent( ` - - `, + + `, config ); @@ -61,8 +63,8 @@ configs({ directions: ['ltr'], modes: ['md', 'ionic-md'] }).forEach(({ config, s test('should render xlarge spinner', async ({ page }) => { await page.setContent( ` - - `, + + `, config ); From 3d89f210c9d2b859b7f07f3119f901a5218d0b60 Mon Sep 17 00:00:00 2001 From: Maria Hutt Date: Tue, 17 Mar 2026 16:13:50 -0700 Subject: [PATCH 08/16] feat(spinner): add recipe and config types --- core/src/components.d.ts | 6 +- .../src/components/spinner/spinner-configs.ts | 2 +- .../components/spinner/spinner-interface.ts | 22 ------ .../components/spinner/spinner.interfaces.ts | 78 +++++++++++++++++++ core/src/components/spinner/spinner.tsx | 5 +- .../spinner/test/size/spinner.e2e.ts | 2 +- core/src/themes/themes.interfaces.ts | 5 +- 7 files changed, 89 insertions(+), 31 deletions(-) delete mode 100644 core/src/components/spinner/spinner-interface.ts create mode 100644 core/src/components/spinner/spinner.interfaces.ts diff --git a/core/src/components.d.ts b/core/src/components.d.ts index 5083bc48903..67d5dfefe8b 100644 --- a/core/src/components.d.ts +++ b/core/src/components.d.ts @@ -39,6 +39,7 @@ import { SegmentViewScrollEvent } from "./components/segment-view/segment-view-i import { SelectChangeEventDetail, SelectCompareFn, SelectInterface } from "./components/select/select-interface"; import { SelectModalOption } from "./components/select-modal/select-modal-interface"; import { SelectPopoverOption } from "./components/select-popover/select-popover-interface"; +import { IonSpinnerSizes } from "./components/spinner/spinner.interfaces"; import { TabBarChangedEventDetail, TabButtonClickEventDetail, TabButtonLayout } from "./components/tab-bar/tab-bar-interface"; import { TextareaChangeEventDetail, TextareaInputEventDetail } from "./components/textarea/textarea-interface"; import { ToastButton, ToastDismissOptions, ToastLayout, ToastPosition, ToastPresentOptions, ToastSwipeGestureDirection } from "./components/toast/toast-interface"; @@ -77,6 +78,7 @@ export { SegmentViewScrollEvent } from "./components/segment-view/segment-view-i export { SelectChangeEventDetail, SelectCompareFn, SelectInterface } from "./components/select/select-interface"; export { SelectModalOption } from "./components/select-modal/select-modal-interface"; export { SelectPopoverOption } from "./components/select-popover/select-popover-interface"; +export { IonSpinnerSizes } from "./components/spinner/spinner.interfaces"; export { TabBarChangedEventDetail, TabButtonClickEventDetail, TabButtonLayout } from "./components/tab-bar/tab-bar-interface"; export { TextareaChangeEventDetail, TextareaInputEventDetail } from "./components/textarea/textarea-interface"; export { ToastButton, ToastDismissOptions, ToastLayout, ToastPosition, ToastPresentOptions, ToastSwipeGestureDirection } from "./components/toast/toast-interface"; @@ -3883,7 +3885,7 @@ export namespace Components { /** * Set to `"xsmall"` for the smallest size. Set to `"small"` for a smaller size. Set to `"medium"` for a medium size. Set to `"large"` for a large size. Set to `"xlarge"` for the largest size. Defaults to `"medium"`. */ - "size"?: 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge'; + "size"?: IonSpinnerSizes; } interface IonSplitPane { /** @@ -9909,7 +9911,7 @@ declare namespace LocalJSX { /** * Set to `"xsmall"` for the smallest size. Set to `"small"` for a smaller size. Set to `"medium"` for a medium size. Set to `"large"` for a large size. Set to `"xlarge"` for the largest size. Defaults to `"medium"`. */ - "size"?: 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge'; + "size"?: IonSpinnerSizes; } interface IonSplitPane { /** diff --git a/core/src/components/spinner/spinner-configs.ts b/core/src/components/spinner/spinner-configs.ts index ecc15c14ef6..705a61e7291 100644 --- a/core/src/components/spinner/spinner-configs.ts +++ b/core/src/components/spinner/spinner-configs.ts @@ -1,4 +1,4 @@ -import type { SpinnerConfigs } from './spinner-interface'; +import type { SpinnerConfigs } from './spinner.interfaces'; const spinners = { bubbles: { diff --git a/core/src/components/spinner/spinner-interface.ts b/core/src/components/spinner/spinner-interface.ts deleted file mode 100644 index f2ab24691e2..00000000000 --- a/core/src/components/spinner/spinner-interface.ts +++ /dev/null @@ -1,22 +0,0 @@ -export interface SpinnerConfigs { - [spinnerName: string]: SpinnerConfig; -} - -export interface SpinnerConfig { - dur: number; - circles?: number; - lines?: number; - elmDuration?: boolean; - fn: (dur: number, index: number, total: number) => SpinnerData; -} - -export interface SpinnerData { - r?: number; - y1?: number; - y2?: number; - cx?: number; - cy?: number; - style: { [key: string]: string | undefined }; - viewBox?: string; - transform?: string; -} diff --git a/core/src/components/spinner/spinner.interfaces.ts b/core/src/components/spinner/spinner.interfaces.ts new file mode 100644 index 00000000000..eef2a05da16 --- /dev/null +++ b/core/src/components/spinner/spinner.interfaces.ts @@ -0,0 +1,78 @@ +export interface SpinnerConfigs { + [spinnerName: string]: SpinnerConfig; +} + +export interface SpinnerConfig { + dur: number; + circles?: number; + lines?: number; + elmDuration?: boolean; + fn: (dur: number, index: number, total: number) => SpinnerData; +} + +interface SpinnerData { + r?: number; + y1?: number; + y2?: number; + cx?: number; + cy?: number; + style: { [key: string]: string | undefined }; + viewBox?: string; + transform?: string; +} + +export type IonSpinnerRecipe = { + color?: string; + + lines?: { + stroke?: { + width?: string; + }; + + small?: { + stroke?: { + width?: string; + }; + }; + + sharp?: { + stroke?: { + width?: string; + }; + + small?: { + stroke?: { + width?: string; + }; + }; + }; + }; + + circular?: { + stroke?: { + width?: string; + }; + }; + + crescent?: { + stroke?: { + width?: string; + }; + }; + + // Sizes + size?: { + [K in IonSpinnerSizes]?: IonSpinnerSizeDefinition; + }; +}; + +type IonSpinnerSizeDefinition = { + width?: string; + height?: string; +}; + +export type IonSpinnerConfig = { + size?: IonSpinnerSizes; +}; + +export type IonSpinnerSizes = 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge'; diff --git a/core/src/components/spinner/spinner.tsx b/core/src/components/spinner/spinner.tsx index 730771ef37f..b9e02ff842d 100644 --- a/core/src/components/spinner/spinner.tsx +++ b/core/src/components/spinner/spinner.tsx @@ -8,7 +8,7 @@ import type { Color } from '../../interface'; import type { SpinnerTypes } from './spinner-configs'; import { SPINNERS } from './spinner-configs'; -import type { SpinnerConfig } from './spinner-interface'; +import type { SpinnerConfig, IonSpinnerSizes } from './spinner.interfaces'; /** * @virtualProp {"ios" | "md"} mode - The mode determines the platform behaviors of the component. @@ -51,7 +51,7 @@ export class Spinner implements ComponentInterface { * * Defaults to `"medium"`. */ - @Prop() size?: 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge'; + @Prop() size?: IonSpinnerSizes; private getName(): SpinnerTypes { const spinnerName = this.name || config.get('spinner'); @@ -67,7 +67,6 @@ export class Spinner implements ComponentInterface { */ get sizeValue(): string { const sizeConfig = config.getObjectValue('IonSpinner.size', 'medium') as string; - console.log('sizeConfig', sizeConfig); const size = this.size || sizeConfig; return size; diff --git a/core/src/components/spinner/test/size/spinner.e2e.ts b/core/src/components/spinner/test/size/spinner.e2e.ts index 0f9ed25de9f..79452e7b885 100644 --- a/core/src/components/spinner/test/size/spinner.e2e.ts +++ b/core/src/components/spinner/test/size/spinner.e2e.ts @@ -3,7 +3,7 @@ import { configs, test } from '@utils/test/playwright'; /** * This behavior does not vary across directions. - * + * * `ios` does not differ from `md`. */ configs({ directions: ['ltr'], modes: ['md', 'ionic-md'] }).forEach(({ config, screenshot, title }) => { diff --git a/core/src/themes/themes.interfaces.ts b/core/src/themes/themes.interfaces.ts index 59b77807bea..bd6a263344d 100644 --- a/core/src/themes/themes.interfaces.ts +++ b/core/src/themes/themes.interfaces.ts @@ -1,4 +1,5 @@ import type { IonChipRecipe, IonChipConfig } from '../components/chip/chip.interfaces'; +import type { IonSpinnerRecipe, IonSpinnerConfig } from '../components/spinner/spinner.interfaces'; import type { IonicConfig as IonicGlobalConfig } from '../utils/config'; // Platform-specific theme @@ -245,7 +246,7 @@ export type BaseTheme = { export type IonicConfig = IonicGlobalConfig & { components?: { IonChip?: IonChipConfig; - IonSpinner?: any; + IonSpinner?: IonSpinnerConfig; }; }; @@ -283,7 +284,7 @@ export type DefaultTheme = BaseTheme & { type Components = { IonChip?: IonChipRecipe; - IonSpinner?: any; + IonSpinner?: IonSpinnerRecipe; IonCard?: any; IonItem?: any; From 363cddfc880954671ade0342293f9c0677f3d86e Mon Sep 17 00:00:00 2001 From: Maria Hutt Date: Tue, 17 Mar 2026 16:15:59 -0700 Subject: [PATCH 09/16] feat(spinner): change class names --- core/src/components/spinner/spinner.scss | 50 ++++++++++++------------ core/src/components/spinner/spinner.tsx | 4 +- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/core/src/components/spinner/spinner.scss b/core/src/components/spinner/spinner.scss index 476cd7969a4..70bd1ca84f6 100644 --- a/core/src/components/spinner/spinner.scss +++ b/core/src/components/spinner/spinner.scss @@ -46,50 +46,50 @@ svg { // -------------------------------------------------- // lines / lines-small / lines-sharp / lines-sharp-small -:host(.spinner-lines) line, -:host(.spinner-lines-small) line, -:host(.spinner-lines-sharp) line, -:host(.spinner-lines-sharp-small) line { +:host(.spinner-name-lines) line, +:host(.spinner-name-lines-small) line, +:host(.spinner-name-lines-sharp) line, +:host(.spinner-name-lines-sharp-small) line { stroke-linecap: round; stroke: currentColor; } -:host(.spinner-lines) svg, -:host(.spinner-lines-small) svg, -:host(.spinner-lines-sharp) svg, -:host(.spinner-lines-sharp-small) svg { +:host(.spinner-name-lines) svg, +:host(.spinner-name-lines-small) svg, +:host(.spinner-name-lines-sharp) svg, +:host(.spinner-name-lines-sharp-small) svg { animation: spinner-fade-out 1s linear infinite; } -:host(.spinner-lines) line { +:host(.spinner-name-lines) line { stroke-width: var(--ion-spinner-lines-stroke-width); } -:host(.spinner-lines-small) line { +:host(.spinner-name-lines-small) line { stroke-width: var(--ion-spinner-lines-small-stroke-width); } -:host(.spinner-lines-sharp) line { +:host(.spinner-name-lines-sharp) line { stroke-width: var(--ion-spinner-lines-sharp-stroke-width); } -:host(.spinner-lines-sharp-small) line { +:host(.spinner-name-lines-sharp-small) line { stroke-width: var(--ion-spinner-lines-sharp-small-stroke-width); } // bubbles -:host(.spinner-bubbles) svg { +:host(.spinner-name-bubbles) svg { animation: spinner-scale-out 1s linear infinite; fill: currentColor; } // circles -:host(.spinner-circles) svg { +:host(.spinner-name-circles) svg { animation: spinner-fade-out 1s linear infinite; fill: currentColor; } -:host(.spinner-crescent) circle { +:host(.spinner-name-crescent) circle { fill: transparent; stroke-width: var(--ion-spinner-crescent-stroke-width); stroke-dasharray: 128px; @@ -98,26 +98,26 @@ svg { } // crescent -:host(.spinner-crescent) svg { +:host(.spinner-name-crescent) svg { animation: spinner-rotate 1s linear infinite; } // dots -:host(.spinner-dots) circle { +:host(.spinner-name-dots) circle { stroke-width: var(--ion-spinner-dots-stroke-width); fill: currentColor; } -:host(.spinner-dots) svg { +:host(.spinner-name-dots) svg { animation: spinner-dots 1s linear infinite; } // circular -:host(.spinner-circular) svg { +:host(.spinner-name-circular) svg { animation: spinner-circular linear infinite; } -:host(.spinner-circular) circle { +:host(.spinner-name-circular) circle { animation: spinner-circular-inner ease-in-out infinite; stroke: currentColor; stroke-dasharray: 80px, 200px; @@ -129,27 +129,27 @@ svg { // Spinner Sizes // -------------------------------------------------- -:host(.spinner-xsmall) { +:host(.spinner-size-xsmall) { width: var(--ion-spinner-size-xsmall-width); height: var(--ion-spinner-size-xsmall-height); } -:host(.spinner-small) { +:host(.spinner-size-small) { width: var(--ion-spinner-size-small-width); height: var(--ion-spinner-size-small-height); } -:host(.spinner-medium) { +:host(.spinner-size-medium) { width: var(--ion-spinner-size-medium-width); height: var(--ion-spinner-size-medium-height); } -:host(.spinner-large) { +:host(.spinner-size-large) { width: var(--ion-spinner-size-large-width); height: var(--ion-spinner-size-large-height); } -:host(.spinner-xlarge) { +:host(.spinner-size-xlarge) { width: var(--ion-spinner-size-xlarge-width); height: var(--ion-spinner-size-xlarge-height); } diff --git a/core/src/components/spinner/spinner.tsx b/core/src/components/spinner/spinner.tsx index b9e02ff842d..6f2cabced14 100644 --- a/core/src/components/spinner/spinner.tsx +++ b/core/src/components/spinner/spinner.tsx @@ -92,9 +92,9 @@ export class Spinner implements ComponentInterface { return ( Date: Tue, 17 Mar 2026 16:19:17 -0700 Subject: [PATCH 10/16] test(spinner): update class --- core/src/components/spinner/test/resize/spinner.e2e.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/components/spinner/test/resize/spinner.e2e.ts b/core/src/components/spinner/test/resize/spinner.e2e.ts index dabaff8813d..8f43c22161c 100644 --- a/core/src/components/spinner/test/resize/spinner.e2e.ts +++ b/core/src/components/spinner/test/resize/spinner.e2e.ts @@ -18,7 +18,7 @@ configs({ directions: ['ltr'], modes: ['md'] }).forEach(({ title, screenshot, co await page.setContent( `