From fde9b7730c01e594accc82023c91b008ae4e0076 Mon Sep 17 00:00:00 2001 From: JesmoDev Date: Wed, 6 Jul 2022 16:50:08 +0200 Subject: [PATCH] modal service and container WIP. Updated modal packages --- src/Umbraco.Web.UI.Client/package-lock.json | 16 ++--- .../src/backoffice/backoffice.element.ts | 4 ++ .../backoffice-modal-container.element.ts | 55 +++++++++++++++++ .../property-editor-content-picker.element.ts | 49 +++++++-------- .../services/modal-content-picker.element.ts | 58 ++++++++++++++++++ .../src/core/services/modal.service.ts | 26 ++++++++ .../src/core/services/modalHandler.ts | 34 ++++++++++ .../umbraco-ui-uui-modal-0.0.0.tgz | Bin 2520 -> 2570 bytes .../umbraco-ui-uui-modal-container-0.0.0.tgz | Bin 2402 -> 2406 bytes .../umbraco-ui-uui-modal-dialog-0.0.0.tgz | Bin 1927 -> 1739 bytes .../umbraco-ui-uui-modal-sidebar-0.0.0.tgz | Bin 2775 -> 2825 bytes 11 files changed, 206 insertions(+), 36 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/backoffice/components/backoffice-modal-container.element.ts create mode 100644 src/Umbraco.Web.UI.Client/src/core/services/modal-content-picker.element.ts create mode 100644 src/Umbraco.Web.UI.Client/src/core/services/modal.service.ts create mode 100644 src/Umbraco.Web.UI.Client/src/core/services/modalHandler.ts diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json index 18f196cea3..dd1803a7b4 100644 --- a/src/Umbraco.Web.UI.Client/package-lock.json +++ b/src/Umbraco.Web.UI.Client/package-lock.json @@ -1310,7 +1310,7 @@ "node_modules/@umbraco-ui/uui-modal": { "version": "0.0.0", "resolved": "file:umbraco-ui-uui-modal-0.0.0.tgz", - "integrity": "sha512-Iq0OuIpjuEeQHafZibNkJ0PcN3Xxanqgo5NTJbMVeO+HSGbA1hAWV2XLx/bKjUB5vgcUxqcpwJGQQREDrgDXKg==", + "integrity": "sha512-BYfbO5UocZrtj8t1Baox3ivldbNyoKugZGvwKXl0XZ7FZVGvAMrVmzZSI6KtEvYl9Jey/I8VqkZh30QBflEM0Q==", "license": "MIT", "dependencies": { "@umbraco-ui/uui-base": "1.0.0-rc.0" @@ -1319,7 +1319,7 @@ "node_modules/@umbraco-ui/uui-modal-container": { "version": "0.0.0", "resolved": "file:umbraco-ui-uui-modal-container-0.0.0.tgz", - "integrity": "sha512-Cpkib1X0f+HS4W6o9NKUw65vaSmJSAccw+o7svbNfWAsZ5EyvyvAWvxpdAfQTtK0EWIqDhKMTo9hjFdXGlceCg==", + "integrity": "sha512-nsw2fkpOnG7pU+TqDZqXF57eNw2a4zIyN1TllVNEU4tdPrF5c4vTyIzE5O6Flsu8euCVruDZepo9SyLTm6jnew==", "license": "MIT", "dependencies": { "@umbraco-ui/uui-base": "1.0.0-rc.0" @@ -1336,7 +1336,7 @@ "node_modules/@umbraco-ui/uui-modal-dialog": { "version": "0.0.0", "resolved": "file:umbraco-ui-uui-modal-dialog-0.0.0.tgz", - "integrity": "sha512-YtoIaGPFJaDjX3UFrpap2w6r/LLz8x8GqZkh2wH+imi1EIatyj1eq9zE8LAe+I0IaJ/8SAAEG4kY9OhlVpkhJg==", + "integrity": "sha512-hv3LQ/kzTZQMMXDt8NM5ZJTIsEYof5zKx9VFxbUGnhJhNRLeJ4bk9suWVl8h942VsOJwR+NbXzOs4XTIqXb9MA==", "license": "MIT", "dependencies": { "@umbraco-ui/uui-base": "1.0.0-rc.0" @@ -1353,7 +1353,7 @@ "node_modules/@umbraco-ui/uui-modal-sidebar": { "version": "0.0.0", "resolved": "file:umbraco-ui-uui-modal-sidebar-0.0.0.tgz", - "integrity": "sha512-KyLsrek2qPjgmZYjKbGkomskyb5Uy4oSIAOuWJPo3nMTEUyTP55Nq1BlXkRqiGPxK/8NYbIHD5TR33G9KSkWDw==", + "integrity": "sha512-qQTO/YD3wzACmHf6QVW5c2smWMPougDwyKLV6Zku+QdgeZleS1ZiR/AvqHVHiRjuQ84ZhKyBl4H1IcYnAMntnw==", "license": "MIT", "dependencies": { "@umbraco-ui/uui-base": "1.0.0-rc.0" @@ -8904,7 +8904,7 @@ }, "@umbraco-ui/uui-modal": { "version": "file:umbraco-ui-uui-modal-0.0.0.tgz", - "integrity": "sha512-Iq0OuIpjuEeQHafZibNkJ0PcN3Xxanqgo5NTJbMVeO+HSGbA1hAWV2XLx/bKjUB5vgcUxqcpwJGQQREDrgDXKg==", + "integrity": "sha512-BYfbO5UocZrtj8t1Baox3ivldbNyoKugZGvwKXl0XZ7FZVGvAMrVmzZSI6KtEvYl9Jey/I8VqkZh30QBflEM0Q==", "requires": { "@umbraco-ui/uui-base": "1.0.0-rc.0" }, @@ -8921,7 +8921,7 @@ }, "@umbraco-ui/uui-modal-container": { "version": "file:umbraco-ui-uui-modal-container-0.0.0.tgz", - "integrity": "sha512-Cpkib1X0f+HS4W6o9NKUw65vaSmJSAccw+o7svbNfWAsZ5EyvyvAWvxpdAfQTtK0EWIqDhKMTo9hjFdXGlceCg==", + "integrity": "sha512-nsw2fkpOnG7pU+TqDZqXF57eNw2a4zIyN1TllVNEU4tdPrF5c4vTyIzE5O6Flsu8euCVruDZepo9SyLTm6jnew==", "requires": { "@umbraco-ui/uui-base": "1.0.0-rc.0" }, @@ -8938,7 +8938,7 @@ }, "@umbraco-ui/uui-modal-dialog": { "version": "file:umbraco-ui-uui-modal-dialog-0.0.0.tgz", - "integrity": "sha512-YtoIaGPFJaDjX3UFrpap2w6r/LLz8x8GqZkh2wH+imi1EIatyj1eq9zE8LAe+I0IaJ/8SAAEG4kY9OhlVpkhJg==", + "integrity": "sha512-hv3LQ/kzTZQMMXDt8NM5ZJTIsEYof5zKx9VFxbUGnhJhNRLeJ4bk9suWVl8h942VsOJwR+NbXzOs4XTIqXb9MA==", "requires": { "@umbraco-ui/uui-base": "1.0.0-rc.0" }, @@ -8955,7 +8955,7 @@ }, "@umbraco-ui/uui-modal-sidebar": { "version": "file:umbraco-ui-uui-modal-sidebar-0.0.0.tgz", - "integrity": "sha512-KyLsrek2qPjgmZYjKbGkomskyb5Uy4oSIAOuWJPo3nMTEUyTP55Nq1BlXkRqiGPxK/8NYbIHD5TR33G9KSkWDw==", + "integrity": "sha512-qQTO/YD3wzACmHf6QVW5c2smWMPougDwyKLV6Zku+QdgeZleS1ZiR/AvqHVHiRjuQ84ZhKyBl4H1IcYnAMntnw==", "requires": { "@umbraco-ui/uui-base": "1.0.0-rc.0" }, diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/backoffice.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/backoffice.element.ts index 957af35b5f..dd5557113c 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/backoffice.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/backoffice.element.ts @@ -3,6 +3,7 @@ import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import { css, html, LitElement } from 'lit'; import { UmbContextProviderMixin } from '../core/context'; +import { UmbModalService } from '../core/services/modal.service'; import { UmbNotificationService } from '../core/services/notification.service'; import { UmbDataTypeStore } from '../core/stores/data-type.store'; import { UmbNodeStore } from '../core/stores/node.store'; @@ -10,6 +11,7 @@ import { UmbNodeStore } from '../core/stores/node.store'; import './components/backoffice-header.element'; import './components/backoffice-main.element'; import './components/backoffice-notification-container.element'; +import './components/backoffice-modal-container.element'; import './components/editor-layout.element'; import './components/editor-property-layout.element'; import './components/node-property.element'; @@ -38,6 +40,7 @@ export default class UmbBackoffice extends UmbContextProviderMixin(LitElement) { this.provideContext('umbNodeStore', new UmbNodeStore()); this.provideContext('umbDataTypeStore', new UmbDataTypeStore()); this.provideContext('umbNotificationService', new UmbNotificationService()); + this.provideContext('umbModalService', new UmbModalService()); } render() { @@ -45,6 +48,7 @@ export default class UmbBackoffice extends UmbContextProviderMixin(LitElement) { + `; } } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/components/backoffice-modal-container.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/components/backoffice-modal-container.element.ts new file mode 100644 index 0000000000..e9033992a5 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/components/backoffice-modal-container.element.ts @@ -0,0 +1,55 @@ +import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; +import { css, CSSResultGroup, html, LitElement } from 'lit'; +import { customElement, state } from 'lit/decorators.js'; +import { repeat } from 'lit/directives/repeat.js'; +import { Subscription } from 'rxjs'; +import { UmbContextConsumerMixin } from '../../core/context'; +import { UmbModalService } from '../../core/services/modal.service'; + +@customElement('umb-backoffice-modal-container') +export class UmbBackofficeModalContainer extends UmbContextConsumerMixin(LitElement) { + static styles: CSSResultGroup = [ + UUITextStyles, + css` + :host { + position: absolute; + } + `, + ]; + + @state() + private _modals: any[] = []; + + private _modalService?: UmbModalService; + private _modalSubscription?: Subscription; + + constructor() { + super(); + + this.consumeContext('umbModalService', (modalService: UmbModalService) => { + this._modalService = modalService; + this._modalSubscription?.unsubscribe(); + this._modalService?.modals.subscribe((modals: Array) => { + this._modals = modals; + console.log('modals', modals); + }); + }); + } + + disconnectedCallback(): void { + super.disconnectedCallback(); + this._modalSubscription?.unsubscribe(); + } + + render() { + return html` + ${repeat(this._modals, (modal) => html`${modal.modal}`)} + `; + } +} + +declare global { + interface HTMLElementTagNameMap { + 'umb-backoffice-modal-container': UmbBackofficeModalContainer; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/property-editors/property-editor-content-picker.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/property-editors/property-editor-content-picker.element.ts index d6ed2de2bc..985f7d91e6 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/property-editors/property-editor-content-picker.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/property-editors/property-editor-content-picker.element.ts @@ -7,9 +7,14 @@ import '@umbraco-ui/uui-modal-container'; import '@umbraco-ui/uui-modal-dialog'; import '@umbraco-ui/uui-modal-sidebar'; import { UUIModalSidebarElement } from '@umbraco-ui/uui-modal-sidebar'; +import { UmbContextConsumerMixin } from '../../core/context'; +import { UmbModalService } from '../../core/services/modal.service'; +import { Subscription } from 'rxjs'; + +import '../../core/services/modal-content-picker.element'; @customElement('umb-property-editor-content-picker') -class UmbPropertyEditorContentPicker extends LitElement { +class UmbPropertyEditorContentPicker extends UmbContextConsumerMixin(LitElement) { static styles = [ UUITextStyles, css` @@ -30,39 +35,27 @@ class UmbPropertyEditorContentPicker extends LitElement { `, ]; - @state() - open = false; - @query('uui-modal-sidebar') sidebar?: UUIModalSidebarElement; - private _renderModal() { - return this.open - ? html` (this.open = false)}> - -

Select content

- - -
- Lorem ipsum dolor sit amet consectetur adipisicing elit. Ab minima et praesentium rem, nesciunt, - blanditiis culpa esse tempore perspiciatis recusandae magni voluptas tempora officiis commodi nihil - deserunt quidem aliquid sed? -
-
- this.sidebar?.close(e)} - >Close -
-
-
` - : ''; + private _modalService?: UmbModalService; + + constructor() { + super(); + this.consumeContext('umbModalService', (modalService: UmbModalService) => { + this._modalService = modalService; + }); + } + + private _open() { + const modalHandler = this._modalService?.open('umb-modal-content-picker'); + modalHandler?.onClose().then((result) => { + console.log('result', result); + }); } render() { - return html` - (this.open = !this.open)} label="open">Open - ${this._renderModal()} - `; + return html` Open `; } } diff --git a/src/Umbraco.Web.UI.Client/src/core/services/modal-content-picker.element.ts b/src/Umbraco.Web.UI.Client/src/core/services/modal-content-picker.element.ts new file mode 100644 index 0000000000..cd8d749e64 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/core/services/modal-content-picker.element.ts @@ -0,0 +1,58 @@ +import { css, html, LitElement } from 'lit'; +import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; +import { customElement, property } from 'lit/decorators.js'; +import UmbModalHandler from './modalHandler'; + +@customElement('umb-modal-content-picker') +class UmbModalContentPicker extends LitElement { + static styles = [ + UUITextStyles, + css` + h3 { + margin-left: 16px; + margin-right: 16px; + } + + uui-input { + width: 100%; + } + + hr { + border: none; + border-bottom: 1px solid var(--uui-color-divider); + margin: 16px 0; + } + `, + ]; + + @property({ attribute: false }) + modalHandler?: UmbModalHandler; + + private _close() { + this.modalHandler?.close(); + } + + render() { + return html` + +

Select content

+ + +
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Ab minima et praesentium rem, nesciunt, blanditiis + culpa esse tempore perspiciatis recusandae magni voluptas tempora officiis commodi nihil deserunt quidem + aliquid sed? +
+
+ +
+
+ `; + } +} + +declare global { + interface HTMLElementTagNameMap { + 'umb-modal-content-picker': UmbModalContentPicker; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/core/services/modal.service.ts b/src/Umbraco.Web.UI.Client/src/core/services/modal.service.ts new file mode 100644 index 0000000000..a226b25c5e --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/core/services/modal.service.ts @@ -0,0 +1,26 @@ +import { BehaviorSubject, Observable } from 'rxjs'; +import UmbModalHandler from './modalHandler'; + +export class UmbModalService { + private _modals: BehaviorSubject> = new BehaviorSubject(>[]); + public readonly modals: Observable> = this._modals.asObservable(); + + public createModal(modalHandler: UmbModalHandler): void { + this._modals.next([...this._modals.getValue(), modalHandler]); + } + + public open(elementName: string): UmbModalHandler { + const modalHandler = new UmbModalHandler(elementName); + modalHandler.onClose().then(() => this._close(modalHandler)); + this._modals.next([...this._modals.getValue(), modalHandler]); + return modalHandler; + } + + private _close(modalHandler: UmbModalHandler) { + console.log('close', modalHandler); + modalHandler.modal.close(); + modalHandler.modal.addEventListener('close-end', () => + this._modals.next(this._modals.getValue().filter((modal) => modal.key !== modalHandler.key)) + ); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/core/services/modalHandler.ts b/src/Umbraco.Web.UI.Client/src/core/services/modalHandler.ts new file mode 100644 index 0000000000..5ebf1b56f5 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/core/services/modalHandler.ts @@ -0,0 +1,34 @@ +export default class UmbModalHandler { + private _elementName; + private _closeResolver: any; + private _closePromise: any; + + public element?: any; + public key: string; + public modal: any; + + constructor(elementName: string) { + this.key = Date.now().toString(); //TODO better key + this._elementName = elementName; + this._createLayoutElement(); + this._closePromise = new Promise((res) => { + this._closeResolver = res; + }); + } + + private _createLayoutElement() { + this.modal = document.createElement('uui-modal-sidebar'); + this.modal.size = 'small'; //TODO make meta object for settings + this.element = document.createElement(this._elementName); + this.modal.appendChild(this.element); + this.element.modalHandler = this; + } + + public close(...args: any) { + this._closeResolver(...args); + } + + public onClose(): Promise { + return this._closePromise; + } +} diff --git a/src/Umbraco.Web.UI.Client/umbraco-ui-uui-modal-0.0.0.tgz b/src/Umbraco.Web.UI.Client/umbraco-ui-uui-modal-0.0.0.tgz index 6ca017dabf903891c2628c68aa81287af4b34c8d..59e52f8bd66b845daf497f2ac5b034421cd2e9ff 100644 GIT binary patch literal 2570 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 literal 2520 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 diff --git a/src/Umbraco.Web.UI.Client/umbraco-ui-uui-modal-container-0.0.0.tgz b/src/Umbraco.Web.UI.Client/umbraco-ui-uui-modal-container-0.0.0.tgz index 74e72049a590d3896b185a083bd0a2efcaaa1f93..f5639e95526418bde66b0cb2b7dc45d9e36a65f7 100644 GIT binary patch literal 2406 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 Yw#~D7HqYkSJZql60jF2<$N(|`0L`nU&;S4c literal 2402 zcmV-o37z&IiwFP!00002|Lq!UbK5pDpE=|IfGBNEc_d2mLz$6cJE`N&c_wZ;bv*sx zYAlF^L?jTwBS6P)qW|8-gAYlR?A$rN#|U{)++FN07Q2fDz!>|V@PxD&9kpl_kX!Gg zc=pJx-EMdH_fZub+Cg^@aC-;ccBj+rw&6GYIB4&|^Vt)$R7jkFDvvNoXefXFk2E@s zc_Psl6p%5E$SEUJ5=k^e{acjLI_cKU0$2y%B;=A`;jhqD{G)J8o6J6=-EEwQWvnR)F4 z$1zWktJqTDSh58p(L{!*i8_q}+y|l%)bNMY)|3VdIqWk`jGgW&WA zSiJ*BCm__VfxkqxhQVI*NbB?-VC#GNj0+k~7CW98uu06l{^ma z;Ss`fk;kkY5H{X($I zDam8kt_P}!7`_q^+vv6W-`5d-_`{dwY%n`|)lwu!L&Fl5kX6fvC*&O?YJtB}i-izF zt5h%KLYBr8P!Ypq_0WiM|5HDQhlEZ-*+ZRn`^N(MnFcak1jdjtRjt&6Au*_$Zpgd^ zhR&exEL0w@Qme8?a_uTc7%X2r>7kk`&W!H|6f-{QMO?a9cIg?^8>k?#PPIT$YiO2Z zP!86uo}MLTz`8SNtXzP-IN_4ZyO=ak&G-{c@NWH)hVs2M&EnhYx~9CS8pd3u?3UE^ zv;MWUs(?g?+}aX&rEKuqr>Os9yZ`fHAH=6kVrK=aZ5}<%{;&PAyR`q?+iQ0>`@g4X zD*9?SBoUCCY7l(jm?WXf2QbrtR+D%l0CS~-F3X9v2v13EE?5iiZ)8Lvg|qeCWYsHHBLpj!kt`P{H`|=SA%&1h+qt0MRTRfuR$%x z&Km3GWl63|UKYzXgs%qZD@r4iE`o=PD6-Q!As2?~K3VqHAg|*G&a5i_?ekIN{$cUI zyW8DcKL0uBY~ugP;y?4e#nYauz%D0?wg-O3l+w4DFb*Qns%t5j#7rokBtx_%R1nGA#K(tacNTZ&ng(z^WrnrCdijb2IV5 zqjP&1A1ZYorIZDVI*O+#Nh5?K%& ze}M@>tITVR6Q?6aMR=lzQF!6;O}Msg&FYdglH!|RyD(6OQ;a3 z4vX2dO?&+M|M$~3Z_iJ?Y49CntY7~-otFoT>wo)Te{=uyB<%&N2r|ccegz3`;AT-u zrxQ^>F8x*v3ufa|z%aBRbwcM zk0Z@ulYake^8b8M_mue`knN@Y-^<-i{(q8Y4i)Hlg3 zp2m#)TUp`0^WXjMV*GbI>YJcV{6FFMKjm+BJ`k95EQvWio&S1g%Ykj@mIE2%wM`3X zjo&E3)>d}i5fG?mlB}j#u0u?p%C9-L%q@|Gdd)Yrqv+X6(5-=DwYpb2?(J`7pClO0 zJ@k(c=kF{ti;NR`17k!u2;S-|vt_tFV_iU)BVY^6?kjr>Mtjvc0*cv|lZ|=8_z1IX zAT*LB8DpQ675jiEzv3x5$8koc+V&drZueGN(dswTO8m?5pPvhSzxeO$wL8o4-+8%- z|Nl_@FUI@Q#^FKx1?5qdz2`43?%8zMyO508LsHMTr5wxW(Nc~{4#z#TbQxp`vfG^! z$>LQ`k-ZkbPV4ER diff --git a/src/Umbraco.Web.UI.Client/umbraco-ui-uui-modal-dialog-0.0.0.tgz b/src/Umbraco.Web.UI.Client/umbraco-ui-uui-modal-dialog-0.0.0.tgz index 72658959ea1ef484afb9618cf99ade6a8719c662..1b6f3b50bbfb26357e299a350ad587f6e30fb659 100644 GIT binary patch literal 1739 zcmV;+1~mB}iwFP!00002|LqxTZ`(Gop9SPU+*GWw3tO`D8ek`Bw=~59EZfjF*oVxR zX^FPk(xO08ZnG}`eMgFV_?5O>n_-*TCQ|OrBYAf`r6hVoCN$)16tX0y?}FFr!Dk+w zPUq<00M@~A?Co{B@L>P&sMGBp9d(cnUk;9r@cG~#My528Xv$}pBn~K_|B}IGsgN4p zLrljkq34{=Xrkd3#!}2+_h~j8NfL>6#=&3#NL; zOA(yuI>FV|#ifV||B$AcAu_6v*_#syzx{?L{wzfbC-BqgHH~zT+iYM|>YKhJn^67J z+r&VhQ599x72Hr8oMfpMvR{gi1Wt&aaiSEmH5@=loDyylL9}aKKHfpV` zM~@0FtE*hNwSo<&q&kyHDeAWGajMIm@{AEKCdGa^fyk~8eWz&>tCjuq-pa#BCeK8I zB)ZYGuu_ZJoWtXo%}8gp)q1#7hjO5bp5Hpey61wpW+-Qin^#Dg$& zuI^2R(v9ng3&oPjpxN30huG?J=9(c=5;1+#!{seubEepcaSNWZIHpO3O9jI@%Ql^( zF{%fNNN9n*wa=k9*f2Mo)Y2Jfm`N_gg@#`q&310A-}DBp^-G0I>(O^h$9_>I`uV|j z{F5Vf`9H!uC}wS%FO0$}KqU8*|GNkK`^))%f8VCkZT|n_!^9eYPNl*;?)SjQ14|_{ zdw_7?1S(&Xi9*b^4If2l@)I(nhJGa;6v53;iJlsYz$Ecse_bXF+*S*;s(6Ujl8rJ= zD~)xn3z}WnESW7*-=r2f5`t5bEFv+K5lk=!KPFsJzeL`;w?SonUM8@Qu_O=r>kT=3 z`SOKLYuAH~##|>E=PmPVP&29Z7p7nO@5?(VPca{M4!SYl(UE?%8IzW zc$LGj#(yhhTtx`~Di`iTj(=t=4k#*)0{jadK_u|DnAD+H7scBTOc$@VpoF}lG-ufc zCk$fw#m<@Ow8GT|)TdMF$jy~B#b}9_n;T@x!$uh^CzZ-fas!!aovL0KB4(P60+bax z*M&}BaCH&X_+lpU3Ytsz-C0wsKK5Mn@<*9Xy6-<-Ysi$!FdLPkW`reW9xi)4`K(cS z#_1-knZH^_#zn#|-Q$E6~aiyUSd|iUp3aqVu zYA%0ClxJ?|z;$g5V_etl;kJx$BbWZlcTbIZlrbI~>Li_k%n~38;WxiibI;W(f_B?d z;1e(Ikp)Y^d6q&ua&Nd+$(T**v#{A0g)U04U@L*mBpKt4P-(DEKwhYM12+2AlmWSc zM*LekYL{ER?GO^Il&S(l%_7s!aY0~{dvoWc*@!bWJ+srPTtuRXD!bg4AgUOqVn$Qk z?DhSND-gH^v77jbDHTsbWzNT%Gx7gO#Q$*qe{ufpv&-{f7JmU9AGrT@_gC_N=Wu`9 z|Gk&-5S9;|=Y4gJk#5i^jw_o@0ySln$0}eVL|ixz?@bv`cae9V z^^`)rX$@iw!{cR^(;>_m=~*SO$(-cLpy*!j-lc7~pX>W&N)zBhyurH{XaO8=N)nHl zwP3im4>kmokX&Pv;D0c=74u9S3TfNHw%chcFGw?ql?qiYh|!heE^{|_-R^3+FUZ@^ab!{GtS?SBe%IZxS4~_k&7!=9R6SP|Hhj*s-wbNa_Wq9h=DYAEc!8m9 z${FN(MQ172nlxuU?w%s=?T%L%JKC_!%;+Ua3o`Z+sWZ>`#GNZO9=*p7P|e*)ZtG3x**008gbZaM$} literal 1927 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