From a0fc59bd4b366518edb47254bd7052888b56efd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=82=E3=82=8F=E3=82=8F=E3=82=8F=E3=81=A8=E3=83=BC?= =?UTF-8?q?=E3=81=AB=E3=82=85?= <17376330+u1-liquid@users.noreply.github.com> Date: Mon, 16 Dec 2024 09:33:59 +0900 Subject: [PATCH 01/33] watermark wip --- locales/index.d.ts | 64 +++++++++++++++++- locales/ja-JP.yml | 17 ++++- packages/frontend-shared/js/const.ts | 1 + .../frontend/assets/default-watermark.png | Bin 0 -> 1880 bytes packages/frontend/src/components/MkDrive.vue | 11 ++- packages/frontend/src/pages/admin/roles.vue | 16 ++--- .../frontend/src/pages/settings/drive.vue | 33 ++++++++- packages/frontend/src/scripts/select-file.ts | 16 +++-- packages/frontend/src/scripts/upload.ts | 1 + packages/frontend/src/store.ts | 24 +++++++ 10 files changed, 165 insertions(+), 18 deletions(-) create mode 100644 packages/frontend/assets/default-watermark.png diff --git a/locales/index.d.ts b/locales/index.d.ts index 0ae188f1f7f8..beccac4a1d74 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -1902,6 +1902,18 @@ export interface Locale extends ILocale { * 既定アップロード先 */ "uploadFolder": string; + /** + * ウォーターマーク + */ + "watermark": string; + /** + * ウォーターマークをつける + */ + "useWatermark": string; + /** + * 画像にウォーターマークを追加します + */ + "useWatermarkDescription": string; /** * すべての通知を既読にする */ @@ -3143,13 +3155,25 @@ export interface Locale extends ILocale { */ "duplicate": string; /** - * 左 + * 上 */ - "left": string; + "top": string; + /** + * 下 + */ + "bottom": string; /** * 中央 */ "center": string; + /** + * 左 + */ + "left": string; + /** + * 右 + */ + "right": string; /** * 広い */ @@ -4458,18 +4482,38 @@ export interface Locale extends ILocale { * 通知の表示 */ "notificationDisplay": string; + /** + * 配置 + */ + "placement": string; /** * 左上 */ "leftTop": string; + /** + * 中上 + */ + "centerTop": string; /** * 右上 */ "rightTop": string; + /** + * 左中 + */ + "leftCenter": string; + /** + * 右中 + */ + "rightCenter": string; /** * 左下 */ "leftBottom": string; + /** + * 中下 + */ + "centerBottom": string; /** * 右下 */ @@ -4490,6 +4534,22 @@ export interface Locale extends ILocale { * 位置 */ "position": string; + /** + * 繰り返し + */ + "repeat": string; + /** + * 引き伸ばし + */ + "enlargement": string; + /** + * 回転 + */ + "rotate": string; + /** + * 透明度 + */ + "opacity": string; /** * サーバールール */ diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 1b59708d8530..01fdd36abe6b 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -471,6 +471,9 @@ share: "共有" notFound: "見つかりません" notFoundDescription: "指定されたURLに該当するページはありませんでした。" uploadFolder: "既定アップロード先" +watermark: "ウォーターマーク" +useWatermark: "ウォーターマークをつける" +useWatermarkDescription: "画像にウォーターマークを追加します" markAsReadAllNotifications: "すべての通知を既読にする" markAsReadAllUnreadNotes: "すべての投稿を既読にする" markAsReadAllTalkMessages: "すべてのチャットを既読にする" @@ -781,8 +784,11 @@ makeExplorable: "アカウントを見つけやすくする" makeExplorableDescription: "オフにすると、「みつける」にアカウントが載らなくなります。" showGapBetweenNotesInTimeline: "タイムラインのノートを離して表示" duplicate: "複製" -left: "左" +top: "上" +bottom: "下" center: "中央" +left: "左" +right: "右" wide: "広い" narrow: "狭い" reloadToApplySetting: "設定はページリロード後に反映されます。" @@ -1110,14 +1116,23 @@ editMemo: "メモを編集" reactionsList: "リアクション一覧" renotesList: "リノート一覧" notificationDisplay: "通知の表示" +placement: "配置" leftTop: "左上" +centerTop: "中上" rightTop: "右上" +leftCenter: "左中" +rightCenter: "右中" leftBottom: "左下" +centerBottom: "中下" rightBottom: "右下" stackAxis: "スタック方向" vertical: "縦" horizontal: "横" position: "位置" +repeat: "繰り返し" +enlargement: "引き伸ばし" +rotate: "回転" +opacity: "透明度" serverRules: "サーバールール" pleaseConfirmBelowBeforeSignup: "このサーバーに登録するには、以下の内容を確認し同意する必要があります。" pleaseAgreeAllToContinue: "続けるには、全ての「同意する」にチェックが入っている必要があります。" diff --git a/packages/frontend-shared/js/const.ts b/packages/frontend-shared/js/const.ts index 4fe5cbb205a7..7253bc180c6e 100644 --- a/packages/frontend-shared/js/const.ts +++ b/packages/frontend-shared/js/const.ts @@ -86,6 +86,7 @@ export const ROLE_POLICIES = [ 'canManageCustomEmojis', 'canManageAvatarDecorations', 'canSearchNotes', + 'canUseReaction', 'canUseTranslator', 'canHideAds', 'driveCapacityMb', diff --git a/packages/frontend/assets/default-watermark.png b/packages/frontend/assets/default-watermark.png new file mode 100644 index 0000000000000000000000000000000000000000..e8edd64f69bebf928fdfe82eec48e6391465d722 GIT binary patch literal 1880 zcmV-e2dDT_Nk&Fc2LJ$9MM6+kP&iCO2LJ#s4M7JG_n{_|BxT~eXO7;#P^ zG2TOj+D4Mv+{Abf5enP3Z85XkA0UA7-ax^JSp*Lf4hCv{ct4u|>-Q>aNn;4D@wIZL zaHX(0Gbu4C(HNPONC-4WkRaQ3+ct3TMRpu1y+{dN;yjXI1Nc}>528FtS;B<^`#LyQhaW=o8uUhXJ7sTyOl8~?CiosYni-? zi3`=*{mI;1+n-Md@ufPsr))vpy-=84# z{;0Bi-oxwb59@DB&Gn3_0+wvvgi-%c|+du@dQJ$jnAat51Z5gxLa) zyTv9P+FpQ*L(A5PHjToc6S?65kvDHulfwvaT3)JkS$^g4C&+v+2?R!!j0}nmJ zsP&L0RffUNTXD`cPO3mV#wrIc6c)`3ISg9FVKq}uzHpRe@Gk~VMK2PBP^L>Cl&(R! zCRpMsP2NLBF7<8tr2LR2`MW6e&p!C?k8Zlu=AF6QT#oyd|B=^!R= zvT*^GK}Y#Vz5hpyY8>0H@!No@vTWtPgDtDiLix_BxVQs#M&V#j+?0OBWWd{v~bQfB_R zC`vIZ<>42?UNiB>kRFvSk)`s|5Jq*Ydus!XQOs#&2!gA{ecL66)pM?V(PFYFIu-r?F$Cdf>%GuvlJHqFxEm zFruoN#MhXpI$_*(1oxStn8lIo8X}*g*e$u0gECK08bpxEnDywbS6;sEVi&`9BHi~G zmdSg$)_9O3MZwp&7LrW1T^ZU61qw%vI{Qb~cnkU1)j5ix&VX!aQ-GF~tkeyu!d8OX z)fG)$+Of6z?sPf@E@?NTOM%OnAIs!5Du-Nj+S$oF9+SCyb6;&h9vdrXekFCDju$R* zDu8=)Lv0^%+W>J+QrbM;9f5X!b+dUE+Gq#ZR%YowNes*66^klM?Yhyu)g|!GF7%od zDTVVF6FEkgn57eAV(tmCk!Niy>LzffWMvZQQVOtMuMwsHS0+XaMgNP|3P|u zMnHcM)YlE>>Jv{+-|_yq+Trh)+nZnie%<=%S@LwC-d#Q3OipeRs`w+_Yh(+bx1ZP7 zr`|YTpZsLzhsg7TY(2bAd^s~QS}3m)IJqKEJ7Bjt5oW%cgQwlZPS%8OXeJMj?}CrU zoPG5MPd3{)O$mf9A_i9z=j7=6`XY3zS}}eayg_}*wob1PO_UbP%NDL9%-w$eK=;&x SH95IIQEr2a{O6OwIWhn;$D-;0 literal 0 HcmV?d00001 diff --git a/packages/frontend/src/components/MkDrive.vue b/packages/frontend/src/components/MkDrive.vue index 8be6d6f53de9..fe44c33c6b94 100644 --- a/packages/frontend/src/components/MkDrive.vue +++ b/packages/frontend/src/components/MkDrive.vue @@ -106,6 +106,7 @@ import XFile from '@/components/MkDrive.file.vue'; import * as os from '@/os.js'; import { misskeyApi } from '@/scripts/misskey-api.js'; import { useStream } from '@/stream.js'; +import { $i } from '@/account.js'; import { defaultStore } from '@/store.js'; import { i18n } from '@/i18n.js'; import { uploadFile, uploads } from '@/scripts/upload.js'; @@ -143,6 +144,7 @@ const selectedFolders = ref([]); const uploadings = uploads; const connection = useStream().useChannel('drive'); const keepOriginal = ref(defaultStore.state.keepOriginalUploading); // 外部渡しが多いので$refは使わないほうがよい +const useWatermark = ref(defaultStore.state.useWatermark); // ドロップされようとしているか const draghover = ref(false); @@ -391,7 +393,7 @@ function onChangeFileInput() { } function upload(file: File, folderToUpload?: Misskey.entities.DriveFolder | null) { - uploadFile(file, (folderToUpload && typeof folderToUpload === 'object') ? folderToUpload.id : null, undefined, keepOriginal.value).then(res => { + uploadFile(file, (folderToUpload && typeof folderToUpload === 'object') ? folderToUpload.id : null, undefined, keepOriginal.value, useWatermark.value).then(res => { addFile(res, true); }); } @@ -633,7 +635,12 @@ function getMenu() { type: 'switch', text: i18n.ts.keepOriginalUploading, ref: keepOriginal, - }, { type: 'divider' }, { + }, ...($i?.policies.canUseWatermark ? [{ + type: 'switch', + text: i18n.ts.useWatermark, + ref: useWatermark, + }] as MenuItem[] : [] + ), { type: 'divider' }, { text: i18n.ts.addFile, type: 'label', }, { diff --git a/packages/frontend/src/pages/admin/roles.vue b/packages/frontend/src/pages/admin/roles.vue index b1cbdad137f5..cc1546e0eff4 100644 --- a/packages/frontend/src/pages/admin/roles.vue +++ b/packages/frontend/src/pages/admin/roles.vue @@ -89,14 +89,6 @@ SPDX-License-Identifier: AGPL-3.0-only - - - - - - - - @@ -105,6 +97,14 @@ SPDX-License-Identifier: AGPL-3.0-only + + + + + + + + diff --git a/packages/frontend/src/pages/settings/drive.vue b/packages/frontend/src/pages/settings/drive.vue index 0e66b93f1c32..1eeb14b85413 100644 --- a/packages/frontend/src/pages/settings/drive.vue +++ b/packages/frontend/src/pages/settings/drive.vue @@ -33,11 +33,36 @@ SPDX-License-Identifier: AGPL-3.0-only
+ {{ i18n.ts.uploadFolder }} - + + + +
+ + + + + + +
+
+ +
+
+ +
+ {{ i18n.ts.selectFile }} + {{ i18n.ts.defa }} +
+
+
+
+
+ {{ i18n.ts.drivecleaner }} @@ -77,6 +102,9 @@ import MkChart from '@/components/MkChart.vue'; import { i18n } from '@/i18n.js'; import { definePageMetadata } from '@/scripts/page-metadata.js'; import { signinRequired } from '@/account.js'; +import MkInfo from "@/components/MkInfo.vue"; +import MkButton from "@/components/MkButton.vue"; +import MkFolder from "@/components/MkFolder.vue"; const $i = signinRequired(); @@ -102,6 +130,9 @@ const meterStyle = computed(() => { const keepOriginalUploading = computed(defaultStore.makeGetterSetter('keepOriginalUploading')); const keepOriginalFilename = computed(defaultStore.makeGetterSetter('keepOriginalFilename')); +const useWatermark = computed(defaultStore.makeGetterSetter('useWatermark')); +const watermarkConfig = computed(defaultStore.makeGetterSetter('watermarkConfig')); + misskeyApi('drive').then(info => { capacity.value = info.capacity; usage.value = info.usage; diff --git a/packages/frontend/src/scripts/select-file.ts b/packages/frontend/src/scripts/select-file.ts index b037aa8accf8..d0d874d42826 100644 --- a/packages/frontend/src/scripts/select-file.ts +++ b/packages/frontend/src/scripts/select-file.ts @@ -9,17 +9,19 @@ import * as os from '@/os.js'; import { misskeyApi } from '@/scripts/misskey-api.js'; import { useStream } from '@/stream.js'; import { i18n } from '@/i18n.js'; +import { $i } from '@/account.js'; import { defaultStore } from '@/store.js'; import { uploadFile } from '@/scripts/upload.js'; +import type { MenuItem } from '@/types/menu.js'; -export function chooseFileFromPc(multiple: boolean, keepOriginal = false): Promise { +export function chooseFileFromPc(multiple: boolean, keepOriginal = false, useWatermark = false): Promise { return new Promise((res, rej) => { const input = document.createElement('input'); input.type = 'file'; input.multiple = multiple; input.onchange = () => { if (!input.files) return res([]); - const promises = Array.from(input.files, file => uploadFile(file, defaultStore.state.uploadFolder, undefined, keepOriginal)); + const promises = Array.from(input.files, file => uploadFile(file, defaultStore.state.uploadFolder, undefined, keepOriginal, useWatermark)); Promise.all(promises).then(driveFiles => { res(driveFiles); @@ -83,6 +85,7 @@ export function chooseFileFromUrl(): Promise { function select(src: HTMLElement | EventTarget | null, label: string | null, multiple: boolean): Promise { return new Promise((res, rej) => { const keepOriginal = ref(defaultStore.state.keepOriginalUploading); + const useWatermark = ref(defaultStore.state.useWatermark); os.popupMenu([label ? { text: label, @@ -91,10 +94,15 @@ function select(src: HTMLElement | EventTarget | null, label: string | null, mul type: 'switch', text: i18n.ts.keepOriginalUploading, ref: keepOriginal, - }, { + }, ...($i?.policies.canUseWatermark ? [{ + type: 'switch', + text: i18n.ts.useWatermark, + ref: useWatermark, + }] as MenuItem[] : [] + ), { text: i18n.ts.upload, icon: 'ti ti-upload', - action: () => chooseFileFromPc(multiple, keepOriginal.value).then(files => res(files)), + action: () => chooseFileFromPc(multiple, keepOriginal.value, useWatermark.value).then(files => res(files)), }, { text: i18n.ts.fromDrive, icon: 'ti ti-cloud', diff --git a/packages/frontend/src/scripts/upload.ts b/packages/frontend/src/scripts/upload.ts index 713573a3779a..e9991ba69c6d 100644 --- a/packages/frontend/src/scripts/upload.ts +++ b/packages/frontend/src/scripts/upload.ts @@ -35,6 +35,7 @@ export function uploadFile( folder?: string | Misskey.entities.DriveFolder, name?: string, keepOriginal: boolean = defaultStore.state.keepOriginalUploading, + watermark: boolean = defaultStore.state.useWatermark, ): Promise { if ($i == null) throw new Error('Not logged in'); diff --git a/packages/frontend/src/store.ts b/packages/frontend/src/store.ts index 1d981e897bd6..3b2ac3b61d41 100644 --- a/packages/frontend/src/store.ts +++ b/packages/frontend/src/store.ts @@ -474,6 +474,30 @@ export const defaultStore = markRaw(new Storage('base', { where: 'device', default: true, }, + useWatermark: { + where: 'device', + default: false, + }, + watermarkConfig: { + where: 'account', + default: null as { + fileId: string | null; + fileUrl: string | null; + width: number | null; + height: number | null; + enlargement: 'scale-down' | 'contain' | 'cover' | 'crop' | 'pad'; + gravity: 'auto' | 'left' | 'right' | 'top' | 'bottom'; + opacity: number; + repeat: true | false | 'x' | 'y'; + anchor: 'center' | 'top' | 'left' | 'bottom' | 'right' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'; + offsetTop: number | null; + offsetLeft: number | null; + offsetBottom: number | null; + offsetRight: number | null; + backgroundColor: string | null; + rotate: number | null; + } | null, + }, sound_masterVolume: { where: 'device', From ba147c08fc274f56f58b09c0009781e9a5c35587 Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Mon, 16 Dec 2024 10:00:34 +0900 Subject: [PATCH 02/33] wip --- .../components/MkWatermarkEditorDialog.vue | 205 ++++++++++++++++++ .../frontend/src/components/form/link.vue | 23 +- .../frontend/src/pages/settings/drive.vue | 47 ++-- 3 files changed, 230 insertions(+), 45 deletions(-) create mode 100644 packages/frontend/src/components/MkWatermarkEditorDialog.vue diff --git a/packages/frontend/src/components/MkWatermarkEditorDialog.vue b/packages/frontend/src/components/MkWatermarkEditorDialog.vue new file mode 100644 index 000000000000..ad19f543e68b --- /dev/null +++ b/packages/frontend/src/components/MkWatermarkEditorDialog.vue @@ -0,0 +1,205 @@ + + + + + + + diff --git a/packages/frontend/src/components/form/link.vue b/packages/frontend/src/components/form/link.vue index 8fa9e4affbd9..f9445cfc0c88 100644 --- a/packages/frontend/src/components/form/link.vue +++ b/packages/frontend/src/components/form/link.vue @@ -5,30 +5,29 @@ SPDX-License-Identifier: AGPL-3.0-only From 32ee4d8c7a360a1a8f4dd3f9701b5df33dcbf9d6 Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Mon, 16 Dec 2024 10:16:22 +0900 Subject: [PATCH 04/33] wip --- .../components/MkWatermarkEditorDialog.vue | 7 +- packages/frontend/src/scripts/watermark.ts | 109 ++++++++++++++++++ packages/frontend/src/store.ts | 19 +-- 3 files changed, 116 insertions(+), 19 deletions(-) create mode 100644 packages/frontend/src/scripts/watermark.ts diff --git a/packages/frontend/src/components/MkWatermarkEditorDialog.vue b/packages/frontend/src/components/MkWatermarkEditorDialog.vue index ad19f543e68b..72b65b26f743 100644 --- a/packages/frontend/src/components/MkWatermarkEditorDialog.vue +++ b/packages/frontend/src/components/MkWatermarkEditorDialog.vue @@ -9,8 +9,9 @@ SPDX-License-Identifier: AGPL-3.0-only :width="1000" :height="600" :scroll="false" - :withOkButton="false" + :withOkButton="true" @close="cancel()" + @ok="save()" @closed="emit('closed')" > @@ -56,13 +57,15 @@ function cancel() { dialogEl.value?.close(); } -function close() { +function save() { + emit('ok'); dialogEl.value?.close(); } //#endregion //#region 設定 const useWatermark = computed(defaultStore.makeGetterSetter('useWatermark')); +const watermarkConfig = ref(defaultStore.state.watermarkConfig); //#endregion //#region Canvasの制御 diff --git a/packages/frontend/src/scripts/watermark.ts b/packages/frontend/src/scripts/watermark.ts new file mode 100644 index 000000000000..f6b03568c680 --- /dev/null +++ b/packages/frontend/src/scripts/watermark.ts @@ -0,0 +1,109 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ +import { getProxiedImageUrl } from "@/scripts/media-proxy.js"; + +export type WatermarkConfig = { + fileId: string | null; + fileUrl: string | null; + width: number | null; + height: number | null; + enlargement: 'scale-down' | 'contain' | 'cover' | 'crop' | 'pad'; + gravity: 'auto' | 'left' | 'right' | 'top' | 'bottom'; + opacity: number; + repeat: true | false | 'x' | 'y'; + anchor: 'center' | 'top' | 'left' | 'bottom' | 'right' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'; + offsetTop: number | null; + offsetLeft: number | null; + offsetBottom: number | null; + offsetRight: number | null; + backgroundColor: string | null; + rotate: number | null; +}; + +/** + * ウォーターマークを適用してキャンバスに描画する + * + * @param img ウォーターマークを適用する画像(stringは画像URL。**プレビュー用途専用**) + * @param el ウォーターマークを適用するキャンバス + * @param config ウォーターマークの設定 + */ +export function applyWatermark(img: string | Blob, el: HTMLCanvasElement, config: WatermarkConfig) { + const canvas = el; + const ctx = canvas.getContext('2d')!; + const imgEl = new Image(); + imgEl.onload = () => { + canvas.width = imgEl.width; + canvas.height = imgEl.height; + ctx.drawImage(imgEl, 0, 0); + if (config.fileUrl) { + const watermark = new Image(); + watermark.onload = () => { + const width = config.width || watermark.width; + const height = config.height || watermark.height; + const x = (() => { + switch (config.anchor) { + case 'center': + case 'top': + case 'bottom': + return (canvas.width - width) / 2; + case 'left': + case 'top-left': + case 'bottom-left': + return 0; + case 'right': + case 'top-right': + case 'bottom-right': + return canvas.width - width; + } + })(); + const y = (() => { + switch (config.anchor) { + case 'center': + case 'left': + case 'right': + return (canvas.height - height) / 2; + case 'top': + case 'top-left': + case 'top-right': + return 0; + case 'bottom': + case 'bottom-left': + case 'bottom-right': + return canvas.height - height; + } + })(); + ctx.globalAlpha = config.opacity; + ctx.drawImage(watermark, x, y, width, height); + }; + watermark.src = config.fileUrl; + } + }; + if (typeof img === 'string') { + imgEl.src = getProxiedImageUrl(img, undefined, true); + } else { + const reader = new FileReader(); + reader.onload = () => { + imgEl.src = reader.result as string; + }; + reader.readAsDataURL(img); + } +} + +/** + * ウォーターマークを適用した画像をBlobとして取得する + * + * @param img ウォーターマークを適用する画像 + * @param config ウォーターマークの設定 + * @returns ウォーターマークを適用した画像のBlob + */ +export function getWatermarkAppliedImage(img: Blob, config: WatermarkConfig): Promise { + const canvas = document.createElement('canvas'); + applyWatermark(img, canvas, config); + return new Promise(resolve => { + canvas.toBlob(blob => { + resolve(blob!); + }); + }); +} diff --git a/packages/frontend/src/store.ts b/packages/frontend/src/store.ts index 3b2ac3b61d41..c5d9f9149bd6 100644 --- a/packages/frontend/src/store.ts +++ b/packages/frontend/src/store.ts @@ -9,6 +9,7 @@ import { hemisphere } from '@@/js/intl-const.js'; import lightTheme from '@@/themes/l-light.json5'; import darkTheme from '@@/themes/d-green-lime.json5'; import type { SoundType } from '@/scripts/sound.js'; +import type { WatermarkConfig } from './scripts/watermark.js'; import { DEFAULT_DEVICE_KIND, type DeviceKind } from '@/scripts/device-kind.js'; import { miLocalStorage } from '@/local-storage.js'; import { Storage } from '@/pizzax.js'; @@ -480,23 +481,7 @@ export const defaultStore = markRaw(new Storage('base', { }, watermarkConfig: { where: 'account', - default: null as { - fileId: string | null; - fileUrl: string | null; - width: number | null; - height: number | null; - enlargement: 'scale-down' | 'contain' | 'cover' | 'crop' | 'pad'; - gravity: 'auto' | 'left' | 'right' | 'top' | 'bottom'; - opacity: number; - repeat: true | false | 'x' | 'y'; - anchor: 'center' | 'top' | 'left' | 'bottom' | 'right' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'; - offsetTop: number | null; - offsetLeft: number | null; - offsetBottom: number | null; - offsetRight: number | null; - backgroundColor: string | null; - rotate: number | null; - } | null, + default: null as WatermarkConfig | null, }, sound_masterVolume: { From de93d68c5460918c19c3022a25dc7d3fa38db008 Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Mon, 16 Dec 2024 10:18:51 +0900 Subject: [PATCH 05/33] fix --- packages/frontend/src/components/MkDrive.vue | 5 ++--- packages/frontend/src/scripts/select-file.ts | 11 +++++------ 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/packages/frontend/src/components/MkDrive.vue b/packages/frontend/src/components/MkDrive.vue index fe44c33c6b94..8b5dcad887b0 100644 --- a/packages/frontend/src/components/MkDrive.vue +++ b/packages/frontend/src/components/MkDrive.vue @@ -635,12 +635,11 @@ function getMenu() { type: 'switch', text: i18n.ts.keepOriginalUploading, ref: keepOriginal, - }, ...($i?.policies.canUseWatermark ? [{ + }, { type: 'switch', text: i18n.ts.useWatermark, ref: useWatermark, - }] as MenuItem[] : [] - ), { type: 'divider' }, { + }, { type: 'divider' }, { text: i18n.ts.addFile, type: 'label', }, { diff --git a/packages/frontend/src/scripts/select-file.ts b/packages/frontend/src/scripts/select-file.ts index d0d874d42826..667226ed688f 100644 --- a/packages/frontend/src/scripts/select-file.ts +++ b/packages/frontend/src/scripts/select-file.ts @@ -94,12 +94,11 @@ function select(src: HTMLElement | EventTarget | null, label: string | null, mul type: 'switch', text: i18n.ts.keepOriginalUploading, ref: keepOriginal, - }, ...($i?.policies.canUseWatermark ? [{ - type: 'switch', - text: i18n.ts.useWatermark, - ref: useWatermark, - }] as MenuItem[] : [] - ), { + }, { + type: 'switch', + text: i18n.ts.useWatermark, + ref: useWatermark, + }, { text: i18n.ts.upload, icon: 'ti ti-upload', action: () => chooseFileFromPc(multiple, keepOriginal.value, useWatermark.value).then(files => res(files)), From fa3da435ee9a662c816ae0f89562aeb555f43725 Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Mon, 16 Dec 2024 10:20:01 +0900 Subject: [PATCH 06/33] fix --- packages/frontend-shared/js/const.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/frontend-shared/js/const.ts b/packages/frontend-shared/js/const.ts index 7253bc180c6e..4fe5cbb205a7 100644 --- a/packages/frontend-shared/js/const.ts +++ b/packages/frontend-shared/js/const.ts @@ -86,7 +86,6 @@ export const ROLE_POLICIES = [ 'canManageCustomEmojis', 'canManageAvatarDecorations', 'canSearchNotes', - 'canUseReaction', 'canUseTranslator', 'canHideAds', 'driveCapacityMb', From 0aa91e24626346da84b3ac3c634c9924a5fa4316 Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Mon, 16 Dec 2024 10:20:42 +0900 Subject: [PATCH 07/33] lint --- packages/frontend/src/components/MkDrive.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/frontend/src/components/MkDrive.vue b/packages/frontend/src/components/MkDrive.vue index 8b5dcad887b0..2388f44b436b 100644 --- a/packages/frontend/src/components/MkDrive.vue +++ b/packages/frontend/src/components/MkDrive.vue @@ -636,9 +636,9 @@ function getMenu() { text: i18n.ts.keepOriginalUploading, ref: keepOriginal, }, { - type: 'switch', - text: i18n.ts.useWatermark, - ref: useWatermark, + type: 'switch', + text: i18n.ts.useWatermark, + ref: useWatermark, }, { type: 'divider' }, { text: i18n.ts.addFile, type: 'label', From 84289303b30ca098f63630619c51c83eff9167ad Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Mon, 16 Dec 2024 10:25:23 +0900 Subject: [PATCH 08/33] fix --- packages/frontend/src/store.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/frontend/src/store.ts b/packages/frontend/src/store.ts index c5d9f9149bd6..5cbb33e978c8 100644 --- a/packages/frontend/src/store.ts +++ b/packages/frontend/src/store.ts @@ -9,7 +9,7 @@ import { hemisphere } from '@@/js/intl-const.js'; import lightTheme from '@@/themes/l-light.json5'; import darkTheme from '@@/themes/d-green-lime.json5'; import type { SoundType } from '@/scripts/sound.js'; -import type { WatermarkConfig } from './scripts/watermark.js'; +import type { WatermarkConfig } from '@/scripts/watermark.js'; import { DEFAULT_DEVICE_KIND, type DeviceKind } from '@/scripts/device-kind.js'; import { miLocalStorage } from '@/local-storage.js'; import { Storage } from '@/pizzax.js'; From d5ca458c402fc8ba8a92e92f6ac91caea912251e Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Mon, 16 Dec 2024 10:36:30 +0900 Subject: [PATCH 09/33] :art: --- packages/frontend/assets/hill.webp | Bin 0 -> 206039 bytes .../components/MkWatermarkEditorDialog.vue | 25 +++++++----------- 2 files changed, 9 insertions(+), 16 deletions(-) create mode 100644 packages/frontend/assets/hill.webp diff --git a/packages/frontend/assets/hill.webp b/packages/frontend/assets/hill.webp new file mode 100644 index 0000000000000000000000000000000000000000..20877449b483ee5c6e15f378b6fd4f93695604d1 GIT binary patch literal 206039 zcmbTdXH-*L6fPP-Kq=OQUKA8a5Tt}AU8DsPNJ5P$(n%CBARs|hR8T{Q&_ah)5ETtg zgkuY+h(HoJ8VD*SN>}Ou)N^y*eeb?8-miD>PWBinJ1cwcz2=w6a*w3s9-zFeJn(;e`}aBEz-|e^ zE`WrX7C`)fn8X3Ge_sPM0RS;c(b@iY!vFUsCN4ThDe2vNWMoALwC)Fpi%Cd`?~?fM ztVKtsiM|KyIv{!Qh_R#8A!LZO79MDlUQoAN`&7#d5Ni0xQPa@)n|ovw6qS@!j_K&? zfgw;ca|=tWlTN3dU0mJVVQ3#;KmUM0OjvkCWK=X3mvA{TDfvnY;nwYp%sY4Q5eth* z#U-U><>dMX3YA7@FdH8~VYRlkcXU2|`RX;hx9`o{cN{KnWc2TkpZH%Vr>19w-@ebz z{ajgHTi@9HXKVXEyTn9x{y*FQH0=Ll*8!1T;=6W9?2`V^E-~?B(Jpadm*f#+se_J4 z=@9%OEtB-!z*7ZvEid+Ho1%VzLgR;J6pli_9{c&9Y5$jH|NjiT`F~{D|1#|VwTlms zlMoZ#Jc$DUd%$mr=eF2vk}!^3aqg2)PR1FyeM(PUSzCV5djS;cyOrQ=2KCThVVigg zX|y6TOULyYuddzaI2{_#dR>*(6Q#z9vf+t);RtPW?t7<6P1&m)GAphRc;|h9jIoFJ z{jx<=BHIu-?q{h?dqN=l#g$T>wf92WTw)55-m$>NG3IwIOk@iCc-m~UkDTpnhhQ{k zM714yPcaq@u8vJ(%H3)e7oP57R^+&x%O)Q8GBT!dTJkLg4tu7O5iT)NIxy=Sa!7(~B8`ho!{SaG&IJ);7dT6`lG@NtsNngUkfb(b zyoSam|8#^oy;!HJ$3tvi=8X75zb)BoQS!Q-5dQkk{ZDl$xZG0wIyGMHo}Xuw4Y$4d z)Wh^_)bd+3pO2(|pnx^-iMlEs;$HtS^t>?wlXr>EWJ0DkIH)D6V8I?@sCZ}@IUxCy zUqGSb#}f@)JGMFDyh8hlqD%U4T_{QJdif$^@Y=}UulbVp$^F^r{oxuA^SF0~`J?Ih zcNHzLp@K!X#~=w{v(5sC2UT_7>}DL7Cb(QGKHU{?mUaFbbodDLv-L!l^1k|dlTm?mm-VPNbzTsMEG(0Qj}uVb^Z^N>^33A0v(;0sz|7exNL+ahXXF|Mm zi00{Tt@^UgK*2}^?GDoYY01q8hI5xJ8Kb4TqjkMIyNiRzh>5NU2JZQZ3Hn3zD~#{8 zr&)j7GAW^j6-r2FojEKZhUzb##n3onB=jup z#=)X!Dm{i~%!<(19 zzm{pH%o_ScUxYTf$r0ha3bu~3o1_befZp^ugRL_LgOhlN++T6CYq?$e>;UsOty(io6^nDdTkxedz7DyP~-?-)@PICC8nam2E2cf}=L zVtkva?_bUKiN@op9(|bXN=_6fbJjhhH)@n*9EA6rM__u;7Fxlqh?Iu+a-H8HZP6dV z0ao{(&4sx?Eq_{+G{M_)?+P70^|iAh50kVXBtf<8Nk!WX&mxyWFzqKgSX(AUU6`}; zbfk7hQ<#cc(r7(o4lakj9=XSNu$?pdL*k#pbJ7GwbFLY^OL<0#OkM-oF2t2uxG zX-@UgH=B*~hwXUP$#kGtw8t2*Ct8s0BjY%&B8z&g9CoGlopq&;*q#0XtzWD{an754 zR&)t+Q~Rx>HZy?HRfqjz@8F#&-&5$-1PuUXeUTPIVMUIcD>9NSEIpN z-iq=dJqV2#T$%OoeO=A_YVi;l5cIm@@6q%l>jO^0RCIe)XZ;)haGDqH)Wo{N*Ljz( z^UnEOd~QCdM4ZdT(MTAu;`R#5sWp#s<_ka za1Z=kST}Bq{ZzZhM2|7c+nolz+Ox)D$y>{hJ-xNENk=*cz4tPOcI5!kn%4V`>37y? zoD-TD+3W`}Rp?^t!KqgJ#PH3b@M4XH%hb=M44s2Zk&G#*M-#lF4;c;4gk)jPeL=J}4<-(As z9`^SE7sn+6#tRgS=_rob;X_m?851F{Smf?(6)lGK;UFFQ5`lO3ev!t&u3nT7$1XtK zT2@R^8RB&*Ph)VGBBz(;y)VRLAZGbf)z}vuoAoc=-zf(XDp95cmCzlP-2>LLW$$PO z#Kc{bPxS7P_pseP8+Bevcorl_R{L}6B9AcZch6eIl2+l3V#%mXtqKHg&qqSbAXL~W zgwvGdW8rp^2Bu%KdKJtH6_}NuG5hIA!qaCq6KXYtIDZGZs9tOFLea)H;fbt zts$gn8u_$-6`V{!h6G%)s;$8giB_&5f1+9?Ti}DOY6NtP+MBb&3K-tK!1L-GJ?dlu zWy~R=&Rv2*oxSC)Ab<;e--X2wmLpb;mwg=v3@5w6@pY>Tzh0iKL<%DtwR|N5=+XK?v<~A z{e=vn4x-Ciro_ymi6iM5c2u|4gfR?*X{cOKXFb>7Js<0o<|s=)U#*5Uw< z`{+U7iCkV!5SH?}#`qKQ5v@piycjVnf#7B(t%3Uhen1E9lJUW9924@m7WtcxCjy7?h z!L3?H{kE`r^*3a|3MDu8lQDX=;`!Me?o*jCxtN{)n%<%-6v0zsgrs%mcVjp+EH4>T z4oJDSwq2xYXzYN@b%mYu!A93JRj)FsrUq)g1r8q#r5tJvSILAifSIO4c*bDOp%kkPAnO zr`)V9XpgMX5sXMATAI0qPIHsVFc{}=&_{GYB_5$uA4g_5fj?0stb}C)JYTJIx4Sa5 zExH}uoK0fi4nM9h#ZO5!HGyV5getoN1zpW%Ze!kYn-l@!l`tZg_4Z7*1ad30NGm_% zI6j*rrBztSJZS$O8aIeZFS{oXd6T;8qji>7zR74Wny46jIP2zrY&A!>%A4DcmMw}E zcp#hhW){8Qq$uhHip?Sd+oQbz2Rq8)0j4cxF%up2XMbpA9Tz8c&yTZ26l}xia5zx-lRzU;?5!%3_;rs9f8YS z-upq^1!LQ2@zAm8i8NzmEcNrsx{!JLbQf`5SoGeGG;;nLi?x9II~4wE79sE+Mz8~_ zOX|?5*mXvzx<|(paAX$d)qGfvOdv-9_fGMMLBzXiLwj)-txHbd;1*{RM!fM}Xb+OC zPLWQn-}uWM-hBlfYM{N!twc@OaRmc?)KX*mUFL8*YQGS7mPM+aq?VMWKN(x6#ctAv zjORUZr*083(dSc9v4ht+g*{W6LKIhf*|TUF$yiTw)sJCX#4uhAK$x*>_Yv&7JKR|! zc3m=O%wuNJhQmdqVY9D&Imz`vW0Q(JllFDLXo%E%K|e%36_!N45J{=ezdKq&%0~X< zZH(^)n{!YPF=3Akc5%3W?+R1bb8u0hto$>NikWJ*?%$*tXDML_$rSClZZnF0Zi4&5 zt_mz}pLKGpRoQ4H<^EU-w1!YN(3Zb6E)6@60?)!B#wc$W+%BiKQVC9Jj2YvATGlP{ zgP)tA=xmP3t@Wle2jAJ`%A4U*?l>V?k&IIZh!=dyo&!hE@{}K|po<%@>d|9IG|e&7Kl?rMRno+#y6IVXgaG+OV?A8bLZ>uQM>c#&%wZcf zMRb`=4^pYMb8| zhu;&twQvwkqecZpla-IJK?9HE;V}0ev%Vy_>MgnL)zdXo2X393u4vog z+_P;I=XGUROPd~#`uvkBpSvDJK)3s> z!2Q;@)|2&2g#xEdO$^~zKl1W(daNbDTe0OBa3qG;b#uLzTZTzW_DS7LqQ-SOEXSY! zk_7#d;EgWsU?W}<4x!!HVvM&8F}->s0Nl^1@OXMd&6HmSm*xaQ!Vv58> z{h$?PUF>W89;Tu^&j-evD{^iLi(X?q`->3pkB}no7IES@7cw!33v)RseA4NsU%bxv z7}*RBd5ZUbL#LX+c07#|IEER*xKt0)@pjo1C5^J~5HwVn6ny7J&zi8^(Lq z51gwdR%UZCwt_iQSN_Pm7{?Hs%{%%K`q^lkTil-Xg7Hy&+*`|e zr@kSMT<$&qFfcGXV|i3q=%SyCZFW}|hBg0J|C}irt?(%X^`-IQJZ=ppH*(gos?Vlu z*?ohUK`zp&y6v%%?(xk>%_r*PNT3*YdeG4m6A9P(Er48f*FHdm<@C(bV(nT_9bJ_) z{6R?Y{j+|u>PAV?dyQ6gT{~95o@X!S-5wKor`H;^vcy7yd$5zC)<1on4onn>+i)H! z{25+E9K1EbjI(3K+Oaxa z0xnO6xY&`<2_6ozPb;2rxM!LHU}akDuis!%p-tjG#&$8@+JXUQ<|JX^4K*d=*|m3i z06N!=4Tvo3^A0~6O0;>>1zhsZ>U@fRK3{-vd%8-*GkT~2=IPmZcQ3)y8}%9Sto{25 z+*eUlS0O}1lz2A7UR?H6(je{Mhq;+ee%E^|iDMG}4Z4~3akA*jpXGUcaU95VQ)_OYs(F^u5 zI6PudyV-a=>}sV1IftUlubyAwm@G9KA9}w*LxrQb```J6d?xOdM!WrU@jQ1wo?n#l zW}WfFmEaOaet_H;IS2w7h|0(#87<`KgwN#EFr@(t**|cV1GQ>NjPO1sW*$fabrhBt zcN9Gb;T#6mA-;MkExS8~kGss^PL>qpN?~`0gt5Mnb1H~sm0ZYzm(jq-?^p{>4Bl~! zn9FcP7^dRk^*7Wzwud{mxmcfA%UK86qPD6x=l20gKBRRuc>@!olV(?prTGX*18(RH zfP49^HI5w4Csv3h9v!y@kNAd9(htUh%=NC=k$zyaI7BBk1lVFUARjz04 zUF(HC6WfRMmBC|PR9B_3Tj+SY6nepZsi&;TtRl z0~V{TNLC<%Ne`@L$tO9Bbg3-F<(^;hP&riFTo`tV3~$aH>Dw$BL-e!YtR z<4ndUSXlN*i5Ki1sU7$x!iu!bQ<^eM$)8eUI}DG$EibN^MVe}?H0D9Oh9ouAR`rOgx0c(-%2je08e1LJ>TmEoP1`V~j)3AEQn_S} z(iE}o4AMc%rc5+NdWHJg3k%qU_RpO<}Z3k%B3 z6lD*fi<6@&(QQ#}VDsTiN=nVgqlEOZ!`s}ePi8%xnD)f{s7q{BxKWODr z0Md4JFed)hKi(3>Ka7b5xDzMjtm+c@`HDxb^->#&xWw-enWOc2-MM&}6fV|SMBQYZ zWyMmPJ~qk1`Eb=-0J8z5NbV-WUSF*GNsJRTSvR5&l7rYE8*}>1^l+EjKcvu8q&dYe zU-rJFp)OfY%_DdJBwmY`^oY=Ujc-Vsd(@KQZA^YZ2Sr-h1x0~K52D+K;61!T7jy1r zUbBJof=ScqgwgUrYEVQUEZ2F=H#L2CShk9{DdL|V#Kw>rJIfG z=7|-=80$y+ZPs!qQK40k26yqVYZAMEg@&G$DdOkv8L*GSTnf^o)Rr<2oxo+fb-rP~ z5v7Zr&}QYwov2O*aU^pdIkMj;x(_;d;%C$GR*)%pKlJ=M2spg>9rDVM@08PAT}%m- zRLOPQA+{b3W6UBKoA0&0>pIDk>%vVP8E|<%Re;fn97Zy8yPhU8Kc&zff8(=0zHf50 zVv;pTy}`JP<@+l)85HRUkXI*wH$n>}gS!?H7x8Sj?~~fwBL>-rocteQ(UT8+vo%8pp!0FpgjR=Z2fd8esP$@1ZCwNgB~-+FYZ0f z@T*ibv%&v*MXY(NDPVR6wS#Z3)63GVnl1pwDid5wQr=Mf!R{e(&F)=sN=>2ru~+l2 z)V0JHcM1v+QZ>^t->=l3>PIPrz*=&DW9NE!Ge~|`Nq#kK8qc=Ef`>N-v=+1~jhbZL zXYybQw&k^9HxE1)Quu!4tacmTjmakwwfue1>AVEITLPbY=g6F_#^^tk74ubcjb(@j z^1TT&zDh4pJ}~-KBCs0O>~A7laR2tLbnho6(<9Fy-z1c2W=|LGSfqT=W8C`-H&m@N z{P-T{<8c824?(B{F*t8iq^okIdgG*v<^2ai={Bjm|B~`}bY@d4HUhFR)oNQD#tTCFPV!T_HQ{}8Hm47?bHX3Wo_z0d?`RTB( z+{MqI-mou5bf`;O6Qx7jwHa);Mw}<|Bf7gUq#})Zin}3W(}KhYL~>nTpv;pd%Mf~w zA?7kU4TG?9d~UQsiKQA^7UUWA2%58J4l+82A!L!7r^(K@mj+?29&E99ryEl_TdCdG zWvXprXHie&JJ?!<5LXF{bCR$&dbiu&GtimyQqpERm6YJ{e*w7Sm|j;M8XYCngs1@1 ziMU?J0e2T?gG@93m4@gKc!V@Ggs?%4U�b(^`i%KD&hXVC50Q_XeclUiKP$H^@Kx z3FBCBC^FV)QJ1 z)k9p!3Dya!cF;bUU&#A=7Pmf&c$E8`FyNpmbj$gDV8I<5p229jn*h>z(beq5&#`8s z%MI_<@dHjB+an({U+^2Wp{oPXk${1&f_4F8qUMO~61H-C4&gf(Zgz#%4#+EV84T`lKaCS`&9Ig$jPcqetexbyezQeiCi2?4e9|keXFF2F% z$P~v^v^J^s(;DNGDu-or;}cDZSvdL5?hFByaz)xKA;RVD3!n_!bdgg+7kTZ~dIGm2 zfLOr9s+47lsI%x=r^k8&<~6J^C?K=^8Fxd)>qLxMNS*y?DspCr)3`Wbi`W|--^P~r zVHY0_HIZ{E9H!7C>%n|E&LeLsUV# zZHE0qzkkWN*dTN!Ck>Kv^Uc7HeeK{Be8*Zp3e+N^Q9s^y&?;r^MIQ@`n*>3g?=>>U zoP!Z$T(XAn9{eEOG0nr<=wG*H{cXCtXR!%#4@#Op%#~jp44SOYLs2UHn>{JLcb}Cs z^v4BrXr@xN)gx8?j}P;G6Nq`_)~BV>YxMVq=hzV+=HeeRnEX14xNhq?kD;j2N7HB* z!6ylF0l6HW9$|}%{v3r%KNAPiYJ)pcE(Qi#AUk}{1Y(ujzHq^Z;x_6UHLdxj@0BR& zIed%IY7qem*O{6<)iMZtJM{Rkq@qNfJ>T(&bEMv?TjJ$2`!EFwL^!=!>&Q8yP1-@ad;unSu!dP&F|Z|d>}mC*8rW@>>^A@;`nX;FJ?&mgn!;ge zDC>6*ud(ArA2eD)o3_*>*Y$+${0ND^hwA0A^Eg!BG0#&RGf3XcN|(7iTDK2|wYnp( zvS!{cq5`&^skCn#%CL1V-+UYOU>^?NTj_!=xFG9n3p9e#Gzku-i3XOZZ~;@uWw)y| ze5l^+fYLfhb70o95I(W4>gLZJIF-US#E$_Fy+Dp&tLk$sUfUXlw)1m_Cr)SBM=RlVlTK+gJh!9FWa~P#ZhFv)?vn!TEhA<3Q4OHKmvN3q^df*2f1Ska%Dgyu6^&i<*3xl& ztBzB+!)!`TV|GQ$n%v8Nh`GSzLsp%0TUAe~^2_e~_#Wm}G&;q)!s191B#TQbUQ|mx zs{!#teW2r)ir!LCN21?tP!2pvntaf>MD-O6`HVk6m6l8tL!7v}Kbp=VuvZ^nX(+o& zO}y>XSQ}OO2l#W3`s|pzm+{pG?Q`oPVOs=_tMXJU;+a|GCwJNQYMisgXoZ(AgFt5F z(NiKz%=C%ZL)cOHJ0*0+fW=#ojwyn#X#2e*^Y|IKn-muObCdE>er1p<;%k|pWS=Z0 zD@F&WGq^ueR|2|xbW^Db)|KGV+Km+yzwyr)dU0pZxPatLG_go_Q2*?FI;RTD& zmP0kgF8i2R+~JT%C)PvrhZG>tW2tDlfMx$SVwlrEs4hh?(m$?SlDH1K=+d-|e4Jc+ zN5N53jmvjzZ?@>yAkF0EcGP|J3%fS^))uQ`l0sd1zD#s5-{H#20a~8Z%gQ$BO)=-O zJ|&9|qqQy7l8C$7n`V0_D-)@o=iR8Gy>s{eTq6w{#ZaZnos!5XdK}1JAS{Sb|A!)Z z{W$mUW`vSOx5YaR*1?95eqE-py1A3!b1fKlw$&f=)I&u@lC`9N&tj>EGag?Ea!kC=m5%V$Q$? z4e(h2A7zXYJxKTHUhOl&xq$D=Gs4-|*-I$mg!;GdLxg(_oBd=PpO{V5mR6HGlD&0CwSn8^+; zH40!fWzg@ZwfNc8&ASZstSu=V=1;IbpAde4a76{v6Df5tc=to@Ew3>|gc4;>HAxO~ z*woMO0Aj@#3uI~g%oF2#5#SwX**@q4x8-gZKH=L^-iMsb;&)D?nS6n>SX#8Ow!tiY z&e^Oqn)cT81j5;QgTD5rxzMO1b9_UDbVsY>_EDWT9$Z^C^ILLQX?Vmojh%G4A^}ys zy|9~tRa8FLdP+ME1_Muj#T8g+M{Q0PQ@wjyRng)#2ynSz!9ysw!+kcg#xNgBMS(uL z9|?8A-VrL99ftRhHWc772Q6YOlE9y!IRnrm!|+=JXL8{m@4v)*uI`@yHSg+GR&1?` z(l+^F>O;BBv_T)?9m`2-szguc!#d?uc~J#{49nv8lv4t17jc7TWo0#47PyJ$w9c5u zA6rdpq|{hg{46rNrV_--|>KDb0T?iHffXM{fvMrUL;~l z&&T3C4v#ImX??iTgzQ75MAAi$EVg^e)B!o~|ErLfmfh}1wCcJ8_UgB*F#i zXp4PmI`JePeENP%HF&}sbm9Dhv1!Jhd96(~^7k#-3<)rUrDGXXIWZX35F=qK!Zk`~0DK|k@X zbJ>g5thg5$7Mo%Qjmev2JG;UP3tKKE&0Vr;oIk=03w@bhh&n)a#+~K$n&0S36%ymW zWUEMrSZIKgQH#HrEWjM%Ci#9UH|wA=TVij0MMnYxlUpFZs6on6vg6Hx(`An=fi2gW zcR!>sKJE+RrEBmpc;$vhA|Q4+dq|Yl%*lpMPGElwNX5P{KP`~_h+VR5{+GfXeQrN~H3oTd46*HJ{+u4P#77xaY zNP1drGHA~h7IbB@`gvfWZ==(qZ=p8YwbHxy7%Ybz=8yfmim6p)^q55KZS~jN>^sTK32Cep7h;`{yfp^NJt~b>g`| z+eYX1DPrrB7+nGNy&YRpPk ze#hY(vEUIwCaSpOhdvXEhn^nn;uHNcN}DZ&!MG>JHbrxK{NZ&gV3X*2@1)NoCR_Xy ze6o)C&ch+r=u#S(I{qdvx!YZ+-XWSX1{#4BTbCj-Ea@d!Ast{zwZBX@=NgYP0XHJc zTp$s5!>lL~>X6sI;ahpYfxj%Y?iX8qi7cB-gNTUNBMtP6-0~FKA>z<`zb&S(3q&W@ zMalcI-01C~(tj9<`}kF(l~;l^NKdoxHAvH?`Spbc-8e!{)fsy;asBF6h0lZ%XSK=t zo!HX zZZb2{u)a^x%7$>jP|n{(3!mM^;cO4zbWvx`IyHnIN`Pn@ahk|kpwzrr776KD=T`+E zn}s!Ejeu%CS@3$w9^aPHnvN*-IS6=sPc)4o&#&_Fp0Q4NQ)*@ww)a1Qg|a%UWqg`9T-HlkqBM$9TKs5c@@605p|b>nof(oVfBIYni(6tkk$?71xqF8Np*&PTOm$Hx$p|d& zjG+3O*-4sLy&_TgK>=G=>|u9ytYh(cADWek>(ql%v(BGvn(9t@Xw^p5^wy@@v8|fD zOyA=yMci2UN`v+SWcTV)flT$pl?n2bZ48Pu#Kjpjs9j5PPto61B!IBLnm4> z1?HWVKR0P6c3&~ayIbI*niE|1G$Q(FxJ~xRt;31)w`P$s@*;+z@!_S`J5SDQK=yTc z@l$`gw^h9zCpz~{jn?zijQ<&_+z0bIZf0HZ&R2U3`dQ~;N+@~wRxdaKSReIP{nRj- zyW*@{D6b}XH)9I&q8gV@w5oiJnZxO{0uySdO_OS1Hcv)bDg(JjduXbmbgJEj1y^nG zgEOs`QQd(n_&%?fWnp$@wM_vyE>nE6qzFK75FJ+zlsu4_E@gfp5LII&?Q#N`E;8b>}IiMPy$KY zLl1B;t$J$6(*|we4VX9H-5Fru_Bg897>ms=smUjx!H#UC(`c1v&^Gr58(^TZhD5#> z^I%1$kBye(hTH|poMkPtx?vC%FweJ#2r^m(h!08Wab1F!a!ytlk8BE*)8-f-BD_Nao;1{D*LS|3+HzW>`UeR%_1&}MR&F9#s1nO{UhXv4Vk#~XZT`aT3RmMk zbqqC5$xtVoV%yotBe&+=nh{K)Qp^UuaXMkN=#o}7U8nf@uJh;? z#2A8dHWNLy>`4vUU@9L2-m(#vNJA-SZ}ORO%Cz1_LY%p zFc2}Fg#?7a?P~9}71j(s7pLJ*hw>-*YR?uP2VTGZ)5}jj*Vt$FboPBCT#yUxtf1AM zf$^Mzezr9FHp3u$qL2n}FCP;uBY%u&mQ9ep{AmrMB4vn*yA-cVLM#wFW4 z;-O2IW&Fi5KczvQjfQ{O_YDIe5dBo2a!{ddnbw%C6b4zny9rzW0bCOWy2kCaq3OH! zd7?eT{qC29NptEhq&-XD9wpW*g5ka*vDd&e3@T`zB^z4H^+sDQqcTL?AnXvI`u51j z3SgBDhd7%|HC{H6SRvwgQ=&NeplxIkddulAjNJ$OH}v;+LIJNYQzvkK?fT1b zqkK~$0g!$t0kJA++7F$%{j{3I5_c}U%(e)uOma!hYTK7>^zX&F=A}dYe5nibUIXo&(mGN zyv58i`FfFR$v+Q7il~$!F&M1~OZ}$A2H0Y;<=RxWZ_NPf=(o?XQ<6zrqENsdBPN=9PCU zQ89L;8FVGNAeSluC2a#l-sTJhAph5{GY7Chp?tza%kF{t(H8B^=ENjWpQwkSN91>? z@Zpf4qFbMVU2F%eB9#3eabKZI=o?(oZBarEeE=?t{d)am>|E0~)cxnFqvP}wCJ~j~ z^7Jp48~?<&T82DDJvzH@Y_uGKI@7K5yJzjfQ0PVAs1vy;5x6dHs=O{@ftHI_sB2uZ7kJaycLUsOKz0ZjqSYKnRTMVpz|4_YAr!8XR zmp;5A5z;R5m6Or$%(v)fPjg3@E8HaT;PsbHmFM0n!!LZ7bQq0l*J`cSgx#yNog>}7 zyb!@U`Y&LQea6v}h3lCt74x+QtSA#(Wp8=5wcCndgl?gLyWSkEI}}M8tEPHQd6ePQ z-=~W$8GCHtw?-cpeO5#5PEKM9_acO$W8Wt7o?HVpO&41-?FOrFmKwu$_wFdqv;O!j zKdxCK|GhG}86EK3*)X)5Y|I}nZ86gCI+>fpP1srd0JyEoL zrk?Hg^&0E*!q4A)tD#iGUd5uyP3Wt*zjO63eUu=3Jxb+%b6ogzXXAV-T4kW4`7QKc zfRlHHNw<9!s!;b+*}s6W4SHI|-^3B~`_@sj?$bMmyvnMbOy4NYdYwUzhqCNG*vjh` zwMGk9H6dWL4y(hcw0z^qhr53w0ygmzrAF}$HXqX`iZ5>8xZoc1Dv9mZ_GM_=?sQaI zQGBlHvd8b5t{Z!rkKGo5J9PCYrcl2?SwA$D1_@qxbbY1_)TsD_9#$v%_|pTL>&D4{ z0ZC<-!#?``!Y{pH+b?`c8~<~;yFv4@tHtl)!++Gchzh;=Urn?XuaIpn<{&tsWe1vz zz4+-&K_4gYX!B*efHhi*UW&F^(DaH@D%{4!`C>)*8ZE8d|ML&}2Ro+|{ToaL(|<;m zAO8!eL}%NLSnNgBzqV>v__H3>-$yvh>LkuU${Z*wxCy@a;&(maUR0J#Kfg-Nb|B~z z`@bSB_x#LZqg>wSqa#%f?Ld%xwXs*3m0NKVmpN(tnQShTEGtLlWB;7h2yRuBcZq>s z6fAn-{?mj1B2el}m6>`l7kUiz+3#qvbdSr_uv>_4R%~?waTl}_^)FzrNTD&1P?5rl zy3*T<0PD58H-_6N;92)aLtoDn7>saf^>O*m`OBnH2Hh&R<4Qtv+ zaz5Enr9|&))|_6)0&uBOQrX(s!0n}IJqrDy0JvVei;v|Y9bS*Q42#4!Ao9N*;k!ie zmWZB5Me%cZfB{-zjiZ(5PdQ;`M}YiYF53E^H8YN&1aO4EI+L~gPFxSxyn4hIh_l^o zE?R-3VTxX~BMDeb`ukA}N+3h7=Sq(Cjdu}VGaMza(X8~Wwj9>)zj6$R&-z*Jez`3& zg)frE&v#5>a$Z zn+rBDx)-PN=(PkeHe%U>#aX0?-=ARpv}9~>VyK~=Sz=E-p81BsU#NovuCgB*p|1@! z{hdekmm@@$0t2kFG(y)0pgkr&Jo%E^@FaRjf(aU*{$>DNF}BWldKoC7kv$ll<+^32 zHPhHxla?=&wJU>|gC?fE(T_o&uz2z{SE|prUyaZVo&(IfZs4pV5a3Q&b&0xY>kh}O zt4hXUNJh(S$8qx6zjBa!SY8G01xSvN#!gW1HLk`!4{b_mhVM8LCQHFrXPT?mez*EY zS_x@^?RfMBAf?ws-!PS z#sX13W(=hG=>qZ*mYN2h^MaW64CeAi^AfQssZYr8;-Hr^dJ7FPK`VYm3xC#vWGb*p zD(xbazj}Oa*TAZIsr#1h#qNu>W{Of@>k< zO}2_n{YjZ*MR4$2;J<*QmwSyl^cA>82=&s8{_m* znTwR8hUprw(Ta@(|MJvOa(^!A27Lqn{rX9#IAXiI1M!;M8vS=A!S{X?@p?%QDJWv! zlXNaQt_Y)Jl#13c?gK6lHmE?TBFb;(|UL@8%?UI+eioE#96~ve(fl4$>0;vE_wLO4mU7qXjf_)W6Y~Q zJs@(}!5cdkJ?3ECCE^spYu-m#F*;SwM#>)T>4;h9!}1jbZW}qiZ4M(N4BK_>8EWg= z+PbnOU4)usrhw-|DZY~pe~zQKhrH2`^dx{C13G{dij3)ib&P?cQVg&Hi}i0la<4rR z9At2kn7sdm^0I5`vKM_3_`rI}eu@*7_C$?E>qP)&Yp1dv8T~CP;3Xv|`p7w!jetoaa_v3nVnFzaeZ+Pe8lE~R_m`N`}ikpJWuvYg%W!yVn{C(-mXawc2(!h?*u(l6M;X zK0nlK)^J;=r`#H?d<@t}^?K&pFrM|c59Vb^TU8vocDXBkk(eAha~cL-Ti?kn4wEX1 zIO-B6RS*LF-Ry|wXWh~JY>)=_bpiWmOxB39s+Q7?Ww`OuqL)aYfGs@maozBzm@h7G z`E=zqtL8P^MY=w5Qc(C8us*zT{rU$=pv(^U_WP4!uBMt=hj+l|wzkoKK1{Si-g{w! zjqv24_g7m~XCANDx;T4upnf&G8V51=|JUAAja+XE^ul@4YpL(Oz(FrvuXCzf3U2xN zJe)$Xt&89J$&$}z-rou>ie96>KX7k%5ck*9avup!dB;8iX=#_sNqDP$`64{hfS;AV z@7zsd3dYGt=k_nKc_tl6mQr<=wq;tN%Na^d?nUk|8t`LmfHfXtL5_m5Zo3O>U~-@4 zk?pV;ad=@QIY1@muvP6I3#nROAT(C=B9x2}^+HZ_MXQryDWBS@)*-c0TQ@T*eu%gl zcL(V*!JT>6@?~e!_qAak(y+-sxUqy@>{afpqtm7eHtaL7H-<-ALQrZ5`D$pr`mg7y z0(TKXgHjT~#NVvDbn-Q>qqb2RIA^dG{vR;ib=^WF&$^uDZJ=H4iXBe%w`H6iF$9wU zF?|=gGE)rtl7R@6KF|+>iMsWwoE0_o1gw}%s(ldBtw~nYm_rvQ>VfW==STYqkV8tj zB*}YNKe8&l+uh+7bY|Ao9^-B5FhoK+AC7%hlEZ7{SqwN_7>|Y9A`(2MfipOD4?J}s~6{iBBht0lVIP)b8B#ZwqWsT;E0u6+7TertvCQ)g?E)xGS3rqcoyLgCm zlh!!ZvUgP7ioUdf-O*e5-Vu;h^O9KfgD!{axcg#2_bWQ)?56=8LC;9g-=IuXwg!)d zmX#WIZ>!YaY!DSQ4-}MMwW>gDSQpj2>#ZMi^h~aQ1M{p{RK;HX>TU9PvM5GjZ&Dyu?0bUy z)4JLdxS)oO?6Nm!CNdANPSi<2XWlfBtUhj=e4c>5G<7lGtY;@&J}N?KQLo+$lbKhZd*-nk2PKkimZA16yJ95%ty4{P>~{*)phM}AYEyKfje z|DK-ix!N|8xT=IFmiEU^qtr*1Y&;R7o}2JB#;-cEudgyi%X^9oq}5}tm$%(4Y4`!o z$-^j2>1QK_OSS45R5@o^-B#;MP!QhceImW-gs25xDg&@iaWvA;mBuK$@U!|iDc@Qs z#_XhNuK7>$m0+~TO!|

P0~ekpGBTz1HI}B~=*hr;ln5T(M>5>_bEg9V1Uuh6_+B z$Gfd)O2Ipw^vg%?zrGA4b)9)MunRP2?7533N(BI0l)!9-OGk0A=~iH6d1Q8S;MYW*(a%a!6Nlnx0-s(JkZ_om0`V zJp{k=I7*Fs^)CXvZYy(??fHw=qZjxt~_8uI!RP%v3DczZaG! zcSp4j*{#*!Y7L_gExZ3SdY!-T0rna%Et*#y`Uidtttdb5%C}|kuCmFV#0NTW>B_sQ z_@ZIoUxPTCSDv6OppQm!w`G+89CX0I%s-BhmAn&7HF~rV-LaIJad?fMoy)8IdCM#3 zDe->*=Rg?0e8)d38_feXJ`E?9r=>1ymCEErPxAfg%&NU#AB7)QG`WM>vNlk?=_*a6 z^*Q`0yM5}ptWAc~yu9_|o+AU_@TYC3aoLdU_NQzV{=U?^MI6NPq8-%o*f^;+=cOjv zE``d7xbH|5w@R1FUs@SK?M~p8hH~9SAWU|tcG0v^%qtOXK9p_tr+GgA0Hq#Jzv)in zvKnIon!_fgWX?IH+I@dYE>9^I+BVdlSsm$=?mkg5k9slfQhfBx)3|c^iH}MIN7EF! zp`vfmB6-6DS7nGQu7^8{{UK@_U6ZI(l0{Z@Akh+ za{SduUmiilIWC(VbfgA|jXUn4t<$LM^r}sK{ePt~uO&J8vG`QknsXxQkKU7L9M)u) zQz*!9(xdxi{hFPbE=yxuXl|mHXsn@oa48WT2qEkfwohda=G=y*Fv}sXXNV^)H&9 zqKl81gE;F(YR{U04xgPn%u;<#JC;=3DGY#B##C?N6q{oH?N2ZjLEY1uTDYv83W`R@ zT+z%jwI;(>H!t^Tt%_t2QBt?CrkKlg9Mc`fRNHDlE?@SkJh?x;kH(e5UCAkSj=1KL zV5kP6h9G}dZsNk9(VX{GkmZ8vI-rxXDzOVXnAX_*wpVaLt-P*CTXs_{{^$GtJg z>ROPboEk1kZ*4BYRn}oo z^D)||Qnczzuu^$r(wXM_VxN&k-%#a2<iI6o0Flt?blW1mX~cCX>%dj zjoJ@Uns1XI_ZRZ1Hqo}9G8LH*lCAs$@}{&S94;!x+Gshaa%{@JSfk7Lt49O1LRm*@ z9EV~rBsT?s`qV9Mt5dQD=y6cByY_$5gv2ny1t#7>%_~DH_su7jH~Ga-t~!cviT;#% zE$S%;FmE*N;+f^Qts5GZhP4&3^rU1B)`p4poKy`VQO-x%2Hc`I3t>s zZU;g!Qu#5r@cy)Yl{*9Z(RH{a#*2v0@cxv(WKGH7(*2BjnvJb?@~1RtK2}Jg9?g%& zq+P0hSu<4{9=udd4h>G77;23*A$!yED;VS+2kS@L9XJHla*F2QA-SgU=~)Y@I<5%K zJNsMOrNpjf)YaqCkCb)(b(S?yX@1zP(2+{ae9<(EEhm`1zny0J!Mpyn-NV+IE=HG} zJxAwFYlU8?HJ(&AT1~#^^QT}h{jhcdm+i_r_a45k6ctGNaC&3Zy$QmGZ{ptSMa1G6=~xgSAkKRe|o!_ z@-n_TCXtwoVyt;5)||GbhI2*GxfxAlJ?Z0j@m00A3-3-A#Yg1Q zxcM0tO*E6oa5Gvif-2Rrfmbi=|EVQarLF$?@-B}Ij1&2%{0)g zNzbJ&PjOYb>~Th0`^JlfiT6{tR3MW}%`yphQs$xuAH|wC8e=E(11arCozt4H%`W^< zBG1|bbfxo<`&Dh;)U5bDDr`HJ)X?{9jSiN zMS|tk_B5=j-D-iKZ*xc5zuPpNN6cPm^G#?^s5M{hxa<9CP2u`d_qqw#o6B!Ne;Q|& z{)7V?jE$Ez@wRul$UiF6$p@;cbo4}?ow7CwvK&izF_sG z-YEE@m1Es;m4X@}=_E z`?#i2Q+73A@>A0^jRN)`ttB;y?ME{-)TSc6 z8ky(yrum-q{Rd)grjNV8>rr{ao98VJjF=2kY#qjGHJcsrPVGY(WjZ9{bnQORmLZ53e6+LO%nHC)V|L{<9=(lwauO<6JlN#=S}yoJjWu(TqS zTan(UX+5cpH{(v?vJPoiicQ|8jpCUFdyB`7fb#SB)8oGRKqy0c4r$@>+Jy+GIOdC? zk{P33rw7ubj`PlwVxa@MG_?8vmumV_GAj|s9@QV2v~x-4dsJ#&i9EIR{b=&XYG<51 zX*~K@eaf^+HVSUqPd1UJ;+kaG8|4|Hmm`{QolWx(tvid9U51+9bW*gxg)ycL{6dw* zVMyEsF`*6DgGZgo$@)}M&m(=t+xTXwTu#8y;+oLyr!0-Po@i+eSSt-!PkxmD04E9w zrtYK8&rWD0Yep$H3U`L?r6A+o7RP2dZ*?eT6dn_r}Lvw)2VZc20dz`+_3kf?G5WltqW%!v~g8M z$?s0{Lv=K+!$NYtl-;!#pX)%JcQo!RB3-oY-t_>SAL9Kf%QF2x8dqbqdym`iQVfcN z%=B#1G=+Q8<{gqJ+Rs8RI1eobZFz$)`%1=0UH4`xPq-h6AoxvhcICpH)tizsv zTCLpCyVjkqPctrkqy4Yem(TQk)eYj1FckSh<^KRYuX<0lH?>gnJ?L49=xL9b(OaX> zN^raNtlu=#ywls7Rvpo!_M+YMPWwQt&p6TN8de0+q%J*aeBoK^H>EG1Qc-)(_oK}o zwL|SR?>o@YD_pzgk6Jv@>r}ksP4hPWXahse%Jt0xZ1$=mX8KdU(6j}MerMtIr1L$h zpPXrY?|OG(V&9l3^954-N4*AocccaHFj9tA_NqR2y&iYH0&3;`!GDU6Fnwx>n?30B zkF5gbF9!7#ZWTw&BlxL&!|On~OY0}0rtYdQ zjogwxw8hF@$ftS3>r}T7S`tmU$)Gt=bIuLZicc_fCaU>^)|1Qxnk+t4TJsmyk1%$s zyN9hU1r~QLCgJH&nFo3|QE(*VnmDMu#r3ANo|NtdhEYwxs6@x`ph{0uO2A9SFXK>o zoSyWaXSEAJCOP$_{u+zUK9rte^{R601oa-#=}g>xX*X@7nTo<34%8l$tk|UU53cH~ zh;0PojoW)uN#cSv5uJ;5rul}EjSW}KM<~8wq~2*Zds1xAN_RxrlB}4gd7$S96)icwVZSD~ZKZ(5T1i*!|Gn6bq;&5_oST%RJ0imT>r@0w3By=bspv%FHX z4YgUMJ&g+???7CZlWjB1`Ex?H>HtqHQ%^mpX+H{F)!dP}C$$@m89ub7s1|{?f~5DP zWiVT)fVc0@5|Pv;6HT*ML|Ozoc@$^2E_Rkfcn&V zpb_7ScM&eoX!?qUY5De}n4!xO?$3I6l(dIFl)&V4rFK0B`AbKZKe|6EJmKj{=MPF( z9gs9D*kY6H>q+MyT0GQ2zjF$)(#_#f7-G`%n_0C9uOJ9^8$mr@dOk)ZG}m@Y?6m z>#JL}=(GkwIgic5MB#Ss+xM}I3*dSa}3mGc&x`&DUPAoz)GXK#07_BXO?jm4!; zkO`zeJ4P295m=rF93NisK0CnHX($?8hDpS6$sPD8%5XhC_Hr;N_ESuL(l)ziuz9q3 z#=dv)2ki-SZs~OdcNSt)ju>I`gR4on@5vzZ_f!GzT9#iJuO_s%w$x*}gHw%u(JK9( zO~|7kcp{vUy?#&$8;_4MiptZN^N znruEfw(%6YjH?djStO2QBB~LOERYWz=kTtm;V*qoX=3csvGvF_jQGbD;P+p&b+?A} z%k4tu#kCtmn2$CqqINGNWCS=ENqjXvtf zOYjnN9R!F|hC6r9g55l0oQC8UFz5XLC)~EwyW9xU_YeChiYH zI)m;j;@e-^IIQxsX~{H^s~eV)e4^4RRUE4pVYCy#>-kq_@W03M>AJR|eWh7%vc0+k z?CEhCV&$^S&}Sr{y1C9d>z(5%Nu^?W?0ryOPkK^)O>z)?PVmjgmyK35GB(8$BPLtZ zk&M#nUlOz(I5?913r5>y9F3!#oRNdb#}(7bF2d)E>UI8SIL#Zm&TGx=elA(9Gd7~VV3XEX!%~Pc{&`PXd zQ?A|q)i-c&;>~%@{{Y4tJtxR}yICII>L-#9vw+Qoa))+U4}L1nk@053Sh#CDJvUO8 z;Sj(2k+T4Sl0hVAJaO33?5Atke$qF!&iqOE(r#Z**0^sFc+zb@Qqv_{JxEzBZ7s-( z*LslH3JL5-Cm9tKzZR@5Y{b)P_m-vGY$EAILQXp5o(E6QjMMfrX*9Pd+d(#)*zb29 z#}x&xrE93GHMPWZs`W9P;?#X(#nzEadz^P zv|t^b4nZf^*jG*Ae~BJ;o+Q=Sd9vP{c>JXb6m3JuC#G2Q?0qVwhMZN%jv^A3k4RZM z;L>@UyVhOSw_#&$vrl&vaIxAOc0oALZ)(f&H;XMan;D{t@;L9Nfz6@FVA5?nK+gn| z+ou)F7&$vw>6Fw}+c$3Yiw!-BU0uU$cJ4lNg&6h8;-<6IEw8QCds*VTg}O-$fzlJ&q94GrSTufi|q~wrTZc>TB6d$y_k}8!(#?>bUv(t+C_TS>X`qjnK+0AipDYKQFHWf$9 zw5R}_{qCpO^{G5Ns$6Q;Vhf3W&=l>DcVUs=zctrS3w>mARK&RH6X*{Q_{!77R~L5Z ztp&}y5My(l%baieXCk)z^=S9223%w?JR0zCwn^c8%~EOihFJ1^mgSU!O6NWDD?-P{ zmsYJNl=7Kv=8UQ-KkD#F<8rg+ZZP`q1qhDc>{6*6)OJHPm! z*1865xZ^eB)>@FW@m-S0;y7ahcXN^e4B+(kCcAmQBxq@I6}(ePJIMPFmm3Ydfs>qZ z&u>cSsYRx_5w$w0r_9crNJDkaD3cY7;_Y1cf5Vshg8ld-+`I$HAP&D;^B)BKa+_4R z)YDUqT02-g^koXHesH^TFgj%P>}qMysZtJc=s8!XPD&Dcp3mnGN<8z}k@(jh-x9Q2 zIWD8UyN=!M@Wf!}1QIysu&q1q5?d~padT-R%u*vDWg&+c$A5Z{XDzI0%^PlRdHYx{ z5uUhA()Q&{431tJ|jhOtN3y|$>6v9WKz5Nk}3uN09Y4-dz4?qiu4%gNs(G7 zSrNK2oP$$3a)Z=xsHCo$ch3N1kO!&amvv+{^`@a=F-H=@GOj_u7yz991XJYHqFYs+ zCy&Z!QRW8)a99J+O3#&=DH@yh_odxcR!-QbO)}fY(n#wXFD00O2jf$zT*}uc+p zR$k=QSZ<=YK=8xy;@mN%L_-L+fJ zKDnp)-qeN6Pv#n5GOHQ3f=>Vpoc5?KbqFsb-weqj=NpjZRr0d=x))aCbdI6^?l>K| zsXW8$Sdrc>t=6SH?iK}T@r68mgVV2Cy&jr9IRz zsA*+LmpIF?1NE*WN%3{e{xrF_lKERq4*e)9)a6xr%FcS1bFpGOpai#o41s z)Qpwl%c1e!ow)x1dc6CFZt2?%tGCrz&#g zkg3*r|cK4** zJ!k@7GLJKy)FMUQw|egW?nY>*VO*QcrSmEZRq2eq+JsY0s@E<4p{9O*N$X zdeUUl?yF3PsL>~{G;cJRrjeXg-5KggBs3WhYKY}~(_6PW{3%>6$=X9nxYS=YA2l$$ z9LF8;O2qMjQSPLra3AKMN*T^^P5Zq?J8dh4m?Iu(nKb>hjHfviH>QKwPcZlA@ua2N zXxe=#U$`MNMolimOp$(4a;xr57Z@yx`N7T(4L{BF6_23IW`x|v{yI4;@7YKYaVmRdr3(wPfm70q9KK+!DinpC?NB})8}DJ*h8;A5VmtLa}7 zbiHF#x3GdM#g=v|k0c-`0G>{G;Cfby65hsK@x88fo5dUHtfSVGk6O;gyrYW~){`{L zsg1q7lKt(9TOUDOM1K%2TMS^gbn14JGsbv1KGmdCmc+`@-0pXZUHz$;$0xNam1PA^ zK^dubWpa)$p42XT3O3RawR+~KOBG?~BfsfL#IJg-Yb1^42{wYQv~4{`0na~Lvzn`g zfJpwd`e)-!t8OQPQ;* z^8}17>~Gjhj)!|hJx@R6ZFqB1)qE4;DK(uZ#_{Sm^APB6=av4>HkBoOmviAi44bE088sLoX58ra3K3fbs?Cr}38Gs+9|t`671W1ez4*6}BR^eskBHCq1w zP}8k#?BP^zviZaYW_`r&9Q@rsP(iMr!G8{XD<+?D41O_=S>%1G_UOzg0}ciX;kg9y zp1k6^DORG@%9Lw1*F%A`y47_ijA|O3JE3v223!UwIZ&~&9D-`}Hrl85ppGqiAGMq; zH>*66#`~B8yPZ{s1m|!A8SB!!Td#pO6W=hn@l=-)vI88td=Rosa0>y6Hx|i1DMiPx zLT_9C%hs238;CXA*z96`vq>e8oq~~(`?#E(=NJbIHR)h zW|waizq~NEr6saEWNpcjRZk{{T~l?!)^FPtmlQU8ja!GRi3Jr3zIJ;!aBw+qeul7y}j^ zO4D49p2}Azl14ety>WVPhV^|$-aEZ2{u>J%f#pQy)^$=r-cdFv z``EzF4o-7Z_>;x<-VT;4dkEQ**oB?i+B^kj191U?ILH9}xv!e8{;@kJc6$_~D8}+f zL2rAgX|RD6_P|MvU1VjKJwqG-qlN3%pw*zflHAEYv2}77s;Al{EEEmAf!t#tg+`DF!@_>kS+np=CF8FbMhhV0}(8_*K#4 zi1hGPhExnRF_PHM8=q|d03lveapHshps-k3D4oA_%L^#UEWL5S!voGwUc$3(H97v> zJ+;NOo^f?Xw&%<(o$FqH{$f(9o96>B{fTnT{`I${i@#nZSll#cCg?X1_;K+19&6u;<-+5F9Zul?%J(P&1r! zUCC9ZX4;d~_U%IU8y!~4(%SKLeLDA3iqW%gE6S>K<_|A>4g&gm{IxHMwQGG)IMX#p z(b*il7glc?5gC-m6e}kjfPHbty?BnL7mD<8Wp}1YZf*tKD{mH=VQp&|akwcg%eQ$} zlkb8#IL|?W;(s3Mo(8peJXNPlYb=(#Ew5Fh@`>I^a;h6AoE?N`Y2%ZPV|hJZqMVcx zNgkc3cU3TI`-7^8(2d>QH?s4}|u6wrqp==?N`rk&jlJitm zhEFDVB*w#)&J<_m2;GPCBj(Qx{6f(u((L4x=`U`TFO97245=U@5bSr8kCO$y=@>W} zYE2i$9vIX$4HheZ8VF^R32|#@36Jd;1;_&%5q6!+jH&7CTG>hJN^?>77U!?{hvII% z;>+tqzVPku+8Zwf+G@O3?-tO1c&`MmrAU08!yIwk(C|v@+SR_PuR(JMh4kGh2xOC2 znbb2kq1pi4Tm@jc?lX$Y(tb1OFvn-6*!Z7Hvd|`xA%?;jLOe{w1Ga6W49t3*f-}x* zL&Y8u@g}8XuEA$%r0TkL#H%n#E|=~A#2w7+Hv-IZyE^;Ui}_ZF=agK1>0PkXekW>e zV%n9*h+#>s?t~$yodS?me(4Y~epsHF03S-~HBXB%U1*|M;2Mq3*~pyf_p!hsa=>7T z;yZ@kHz+)wqP#~<(Cn>DnohUKeX{q}?h- zeQk9MMe@rH!fs4sIP#^Cl6?Rt=IO@{QHAcAoGMgnm95WgxA@uOacgm)Lu(E8n=}m^ zHfD5L;t%&(WP@Sd^B;0g;ax9*Q^c>K>%JoLTf?`Oa7JLYnt5cnyak*yM;xSvWjJC^ zMlg8JYsYkLW8o$Dh3CJx@!qAO_?IF}J6nAZQj#c0?9zE`c|E~kF`t`&Jf833wyu|w zJ)XPb3GhJkB7)!s0Pj(Zc0A)88qeBuT_dO1)Qy~#{ST%-AbeKU_1Po2mq6C^x#5sI z+(B~iBH#hEsE=+pVC3_b;MPU2#;Jw$mvh-l?SwY*CZQt5Y~vp`(n~jQl(stb>0dnF zd{EalD>H3-sQ8X}NdEv;C7jX@x$p0a)$kXOBkrYDc=B z=10)&=8JI=LbonFzHyBH0Gt6!;t$$C!--N< zv-t6$YnoiPFQME)s!ba~8(ZB8QKTU4Dj5SD9j5@3*V`!%#m^4-nE5g2n!T{Kw`mUf zqsPjua(+%S0qN*!KLTo6=ZZcXc#``>@RT;X49_Gtvq_@IVKLhnF))ZRFN1@)amnM1 z4+2*DeP2Y&U*`Byl`0pmF}4wvyyz!K@@uRJBL%YA7g z2D6%bV*!JALnqn%%!KC)w>%Nw9Wcbg*0V<>snwIeGP&zge%4nrPYX7SZ@-Yub9zW( z*grPN!3+1e9XR}YZ3p&}(REAfYgr(NPKrQelIn8gL9}InE0WkF0FW{dIO$m44u|3A zj`a&|OT)eawS6|$7Lny^fh$Nr`3k6!SP;rGt`xRd^T9pVz5870S{AMLJO2QMVo+^_ zzEo{)CAW|Q%#tgrjiq*#WG5$Z#x}Dmn5d=hrfp9RRs2#$H^g7s6GnqWo((5iv$(mM zTX`NGw+^#yWO73l#|JnJM^@w>zHy{{aF)V5xgfBxnmHk8WRh5<4bc4A564{eJ^r<~ z@hA3^@F$Ek?;`Kvgtpfzi!2Cj#Avd4aybsc5wZ|DAY^gZjMtD$@moi~jK`*0S=k|k zuxYKrjo&d0qEg3p2^knYDi$s=hKY)JdAVxQ>@a+2y43t7uXvv0PqDbQf>N*o!+Ota~o}lX!shTxS$P{!9k9y)f8Sw|h+V6sV zPorxgbjv34@0RK{+8%6tk!>eEW9m8rKBJxSH;XL1IU%snF0f?zq4)I z$jAh8If>&T74F5{9U8Y+nz8Qi{BX6A3S0Po-XhVce=_B#ViXb%UnNdYP;-tu=C0^} zwBXX@jV8LfNP`wX+42p!13cw{!60`v^WK|%;uo>fH5sh#Zfq~aqBinaq`Md^fwhKu zlpGFw@mN-KUwAGRo^KCo7q>(b%O#AU;g^ks1NCY9<$X}4drG||Y0^TK;{iQX{Rmimlx zLD6>t0xIr7)pPtO9gTeF;k(ZeTw3d7=<(RKm58{IUo@lbi{_x%iW3EhWnjDv0zs}f z!{f!CB)r!2yInt88Z_~|a9g#ku|SfQCf%422LAvs3=&5nMsvYFu}!~rEVU}%3uo5y ze$`rLrrM;;OApl&-z>M>lVtNUt2d2w+Kwa%XKv`K0jaVhgq z;E$UivEXE=$jHxLemC)UgX0TknYBo-?(d$^BD_{I1H|fa=40l@Gn3CzfNRWk9}jqm zt{7d|UqI~|N)~9Ha-?N=$8mx<>59@WP2E|1jT9v%X6$~B_;>cd7R!BSV{xKSF_bim z4bw(@?p>{&z=C>o#%pI!{jc7}*5^)LD$p(AV$J7D{{S;C7=jm$nZeIm{MPW@pNKT; zrMa-PySKX$$+lFtl1Dsz+yHifrMdPs?jHj6&lPyWdGt~C>z!gap5i$sLhUIms>;s5 z5Kiv7><3OqLTXRmMiZx2pTR4m?VUgNhz*L^kEdAL==U*dnmm&N z*8Xr2%vGBkOSjCRusuk?C$(*SGt>SmL8>UX+cFSdcyDA$JkA+T<-ukg6Z3KM=RNCw zSlP-}FmtHdgl}W$%g@^S%Snj;fZ@TivP&5z4Yg zKvFw7x@LtP>UaHb%2!Ipc3b#(JIyeAR77_L|e}V7s+Rbq!+I z%V^wMqXQak4ZCr{%J4If!<^T}pYWC&%UNYE!o^);mPd79jQQF!N{)zg$mNDJkz4v- z#BD1}yG>4e+dHEyO&PVF5d#KBQ;(Q}bFdIj-WZNYK3yDC`T1oH4vBMeX!Snl()@W0 zIt{gr?DzU~vO}CZd9Sg9I^~p}tIj~{?I4bsgZ6~DyU}5H`xV}o zp;;EPN0!YBJdq(TP?sA(XGPipz$6inK<|}k#WcE^^Eo8qwiEV@{iD7hj~;4P8fSw4d$QXKO0?G+kLNnwAL$nE-n@A)5zYzcVRH&%x6_)&M-$s z;}67N4RxtCr?a-VvABU@5yy1*E>Q{FxbNVGQfbs1<>!vaE6-jiVqo1BT`IF6?6<*FbCK zC-WHOA46Xq{5trpJ(iQ8X;+uA-9_f2Ji3&s^G6(#X{mZ)Btnlt#rHKk8Ck2p^&N4c2TT!nWPyEcP=>(bdciHaj#kA2|%M_Eo zJgc+|BA^_T+dX&$_Vuo+$HmtX*~x6TQWB9O7FIY+cEAUx7~`7wgGuoRi=NhDWq)~T z2yC^MpDf4#7{q}-U8-AdN$-K_R`s8Z9wpVZ`D|qIoRc&;6I(!Hifo`NR0UNn(DBp1 zrEglSbmnO0r7mBB=h$8+T|)CqcxKfa8+cr@CCO$Xzz24J9tS7bRQGzrEw0%ae8{8e z*DAc64Eq}RXH@v5s(86leNy)H#b)6x*5*j#ZM|La0_|O*?P7_NwcH>{hlBT^oC)V-ERF-U}0v zj=1lRcqX=+$MW05rQBQUi#?r%y8W@dz(ni;2aaFR<$(Qp`6E>Lit)1ACZuE3r*+uM z3rLwKkU%?IgY#q%GwLgvxAB*c?zPctX|7*t7qGi;v4xAwMg~J9d>@pI?gV_?j!3L< zn22KI?`YA}Qf`*W`6{M zmP@N^jr=JX8OhH>jCz{zp8#s!HInbdP)}*7$0XW4)yhEHQ!kxxB2`6DLEgZD#yL0` z=~}ivEclV(c_grx;j@W#1`|fsb`nQ|7Yc=!aK{{}Bb|}UTsMuc7)JvM@xoO@e z)oktLxU;xf;7J{wq;1Nl4TGET3?8S7V2axZ>PzX8@Cn=Bisf_`Gzs{>F6H_d}XR>`a9fs%f4W`F((a3PCIgF%v z$IZiJG=~u#>{$Zr z5Azn|Ilw)8nN+FEUQ+(CDE*`BMfim^ylpMTta8SvUu*=HZ%lO`uWIIXkBWDfx})1i z1eR9OF$*MRiE?(}91MEb&UQZ*HO*T|z0__zFD=d8lc6DImPM7BumHCzbBrCwJZC(S zipsu&*bta1)XW#IJ{aG@0LqjF`4=2qsh?fP$s zwFBb;sN4fB(p(l*nM&>fKpYHquR@#Rt>I5o;|qTox`WCW9uF>w$X09snG1;?^B+m zJuzMh;Qs&@Yx<{#>~&LNsQH@Ht1YCrkh~BfW9A-Foj^>s3W7FcxzAdBOt$vq>lZcz zAY~U?fQmL_fS~>CXXrS|u0LZK%F;W1vy!||M*jeW>fNST#0*0|!27r!K;TF6~_g(5Ato}l_18u_!v-ZGEjiTggeti;omd5c=ud7!V|PzjN6 z#OJQyFmgu~$aq)wg1ptWhtqC#>s>EQR%uASu-PG9nM3lke8hGn4mdeHzpE)L#gX-= z8FI+`Ev^C~c9Uv>l1b<*E&OGs1}c{Zd=LqU0y+04yc5LV7jAX!J}GTATM?&5c9|OH zIK{yr5r*6XmK_(9Seh;Oi8VRyp3_s(ZsYqXkXpvGW6TfE=T^=z89^A&_eW6>!)bXk zrHHe%RnMsHb=y0;U$jR$`B)_G;D9*Errmg(OR?MboBMc6as$c%uLZQQ@z3^LbMDea z>m!qFURI0C+BV^XXRblxfzLe;JF03vGQZJpuUo@b=@pd88W^W6Zb^NP5N^l-;N_HX zdK?;2p$R{TsaBj~n~tZ|2KFy4Uvjdr+z35JGm-dKZP$yms~`;b9!NbmqYvp`J)!uQ zS#37j3;hF7)2?F(4EGl?7}WG3LXyk}9Rcgos$Xl?+OC&#s_NwEHg>mWIojdEwthwW zV0Bf~@KH|*M#98+Z&NnnMo&0R z9`XYGt+O4;$6hhsqEJdYY9Clvyq%A>t-M8NbtA^otP>|#ka%j_~g{!^I(xhsU zmTAaPG5{Q$cl_%k;s&W_sCazGYjpsoGny#<#S(*&eT`JilfUDuxWFAjUbv$Lf8}U-)|w9x~F)#1Yllf+I!$0G4g& zN%gNA@Sn#!FC2JJRMt<4benA(O_LM7^eb(NO0y(ETN~VjasuZ&JClmb@L%ms;QfB) z<{dj;x6*Yql@>4U7}m}?V%p|LSqUl#D7XZS?!X7PM?2+lvCOH(Ni_66*zpI6;PCI+ z1ktpH;n^2y01PQ&Pv9#W9fhF+xdmoDBZlbWeikp8~G<6i9eSt6lCnrLZqaUl0K%? zE(2*d4!z=HKPvJKHH%r>FMlm@pP;Upeku5KQ?+e6JwZ+Ek%*LI<#{l2s>6bK{+(-v zv(>D$yL$(_x`x?V5GzdU9!>^vlkPt{xcjKiZZ6hmyxchu$VUVNQ0ej(u(m9IZ!L4r zwQ+tT_{HIW57^B%qkb&yGvu4O05JK4H}3Z-IB%5kj&d=Y@-K>Cw+Def8~AP~(k@}~ zE~A!-ZEa=3rreFp*dUC7z&SY>&0)&zWOO=_TC?e;b4`$vI5;)=KWqDVd|1A`yfAo~ zk?xfiHImK@LxOlk*|2AD1&AczbgxJ7{{Zc=@nYH|J><4pg{`|5c9OvnWDLZBSy*)F zHueLlp{E_pV~VEF(D>Fxl5@W&%m<+3u*$-YDx!8r36dY(t&S-J9;^@wbJ zIPX7fj}>auOB#5B z8yQ!XNTIiRBRIohopYYQ#D5Ol2D$MsTJcoO_ZrpCrq>Y&<+_q!cdCFwoDNPuL5`eO z4yTb15gv!>zkM_d7K_P$vjxce@y?1_MvW@}zSK|$= z$t2}%XVm3*%K5GvYKG28$WDij{e~;8@Xzfb;=cpOYWg3H?<^pMgB`8Zf>>}mAVvq} z;GBKlbB>hbQ=4K|A$3RVgp&nQeJTw$=-pVuGoP8%6JMKJAE!E=xu)o=8){mWo}RK25w535gC9Y-jMd1UE+I)`k!6X%Ws)K_(7Q#IYK#J(fH zx44QOvCkdDd8*1AU_iXDBzNvlwP$8S#l|mV8N6kpNvlQnyX%efbR z5bcw5yEf6z(a%g|_8B#sr4+iqlt8NhXd9#LTx`KPBaV6YuEmE|F;i_^`U_OmV24t+ zZ?jsW3u}0uMP27UT81S_CvYJ1o}+0COYAhpQ9LP6uks*v&l=N?gsW*r|2ni$4=;7Z6=vTwi^pA3My9 z*$w9byuT@#j(^%b=eA9C-Uskqwx6pi+3K1enQ3`DESFdJ@=3Km^g>9>NDGo%g5!|g zHj2a1egfTjlRWy|a$U%nF{~*QM%(~EMF8~ckHfWf+8@GeYZxX=+e?2CuuR7svc{x0 za%A!xoZxY^V1v&!=tec;qcLtBMtGiB?HblCTg7r{s<@6LqS@MAd4~mwV4_W^c;}3> zo_GM!(R?SOX*Tj&T-sXQ*-v>lovLb9wzo55%iLoMh@+i^fsEz0;PF>Ag}CsZog%M* zHOrf6WW%M7y4OZLjAw6=luQB2V;HJlEb$k^8*L`m*Fx~`h@{j*=4H6QDo`{-_@#~T zR!k3@`={2TtxA;Dq==U+x}Hzs3-1s3BgP+Q(_y(!?KC%T(FTGP*g7;}N0*WgR1WGm z@6Kx4QuxaHJCt9s$tO1=0t{|4xtE=!l}w+1lzN({eel;?@rJa`ZEbmXX_byy3_(!j z?f|=C54chXQ|n#Vg1!&x+8oizb#N_VloKpAC}omBbA@*R#6Ua0ByAii!j|W-ubirs z8>@eK^zf9bVl4>9=<|I?$2R%~p$?yAE61g2(r%rtdj5^;cXlN6BYU=aN-*el z@Qsi5l=b$m;aL$DGY^vzjG~kwS0f)NJvhMPxN73zPR^Vkn`hKe$)!{H(@V)}c=y5o z015ct!5$+|64>kC@Q&(=`>cf6yxOiok)O*O4&^0J%1JzG3*K`$}s*Bob-e;yb@e%4Dr}N>c!+`3%g?|`3MDh$l&*^4+Q?wUl06oga zGLyp*#t5&C8}@s>{{V!8#G0aB+9}m_YmH0gS3FB0VvYk0fV)=%(46zfw@R%}PkVF6 zl`4Gwk<0kn%R~DtVRXptq_nz3c>c;E8}h^!d;@^ck;1oLagb}8y7(6t#_M&w(gvp< zs~Whswezi+S#n4oQIQ!Jr_2?2Anhi-*TDY(4?G{?Ul(|LOYs!imDZngB+}fnznAkQ zE)$qSxKc}HNp3*o=L6{-Kj9z1EB!yow9_;gBVmvWJ+!3t$ShU!@7B4hVrtWF$nB>? z4(-iz;tvA;#C|J(Dh+N6?J65+Zlg)9-U;*PL}Mp!o`p*F0B+BE?DU`bCRLW}JL_K` zT-!{HvZ~9cm33jr%PhPRfzY0vYuJ81d@1pd!v6pa>9>CjJa4GL`i1`hk}dTnOUPh= z#_l|yF;7j3GIB^c&s_MtKk(33=Sv?nIpr~Y3QG@E$4^TEu;8{ zsNZR1DQiigSmljWAKj}nHdKrbPZ${Kit+t>#J?8&J2FFk@pD*fsT<0I#?IOXxtc?c z5kzCuWsU$Ob6(%@WA=Ucuj7bgo8sq-{8JutXTf*=9iL8`H2(mJUb$@~ep9K*G0PJT z+qn5$aC3&i#d5~9uWRUN=*N2=2k`?z@V~>K2x`71)U9qNu+w7mrAuT(Cep!hpp_ZR z4)mT2@V|z9ec?SP#8x(UQCR9$$#V>MEwVtYG6Mx-0q3#Bd3VGQi{Bo62-7EuejjLd zx?Xs=n%3akzd2Lptdd9Xf? ztq(d-ap-G!!{aBz&kKA&z3_y-8Q1SM3td7TK3QS9*$(-6RtL?_(Sw|*BhtO={uM8W z*DAJmAb0-&Pq_Y)3i(|A);|ztxMD4pQJbH$Y4E!rLKME@Y739r`^GWuR@AQ%*Mg@{ zuv}xVb0$aSTXH*D5YMdF;XZ(@xUpu#XZN?0x%@Xdt~ zM4c`61IXk|c9FcHch?t}7t0OHi+hOY2pTn1`MkZqcRc5lUswDw{iwVr z@%!QjhGFpFyj$B9yOQ$GUoDJzh$^sUVha84cs)4nUVTb)gS$N%a*U6ezAt{pK05eO zpz4p|i<$gKqxsRiP}>q7IDnMNx<5~uI(~KX^6M8Ge6JMBZ6-nqjn$B;^}xXu`*|(X z8`z`dD@Ml#B2NW#)9ODu`E&NY_(9T)$+uYhTigS~g-GeVV^{tIR_C442 z1)6AlS7masDJ5-Ku*#y(thUNU}NeHI@W_`gfjbrWfE9qdmdTuG>3c^*=cl_b9T#zSVCjAV{}R|d5_BJ03jA#G|qyRw%sNo#n@ z(cBr^&1*T;3B%+P&KKrh{1KehPub7lr^H*&5L;`yErYowY4WHBYm!-toFe zEWf-PqB#Q~agoh^HLmJDJ->lcZ-;uOmP5xldx-6J9gZ6qhUbRkIKa+2jkhvPSm zejmemsLQ6Nn=&X=ku>QBI%9i_vZ^uw;Ga%&O-D{tfwlIJY`*=Ywe2tA?ZQi_Tk5_h zjyDp^b#LSgqvyjO_*cwbxJg-n!NCAygI<&3KZu$|pNqUPq8&=c<~>SD4E}N%%Ml8d zKmo#nTyuPa>=L#j=h9$Yl9G|6Q-~Q0I zH}-O+_lk9$_QxSS^6ws1l&UrZ07EuZum_Ct7P0mU_BuYWqOSEm-SM}LG(8W**M1)U z$k61L(mO(;?!?HhZduhpzyUyDx#Rfrp4HC$bn!Qe{3D^*-25)^UYD%Fs6a){4?L*DkYP6QJmlwbBuJ)U#)4{-$!OH#k`6Zc!IK{02RZltEn84 zHl8@-^~F_ce9^RYA{8wo@6QK(JGk*jgEaXrJVkvqwXM8UUTO1w<#x%rN0!jK$cOLX z`OHp6?cEMf#BbQ=UeVTDzX>!f8Gg?QfuT74t#F$hl62V zJ{?gnbo*yXV218ik~C#1V{x9qc0RT27Ju+iZ;AH0bauu+3rxzSeWF`w+DGJ^oJt1+ zjDcKVSHwnFf!3?x2unxFldf-@TWoQaKsvgNpi>;XmyM@bC7Z(V+0>i!|#i9}*F?X}63TIo}+;tb~RQ z{?86M#^4F8KZxJ4EwN|3@Pk6*snhiX&-?;x9CpBE`n_u$Ok*xe>dc3Ra$NLX(d3eR zcJbYxfnLK$)ve|63f%8E+LU5tdvd3AVm=f;;G`S@)E>3KS^Qt|eYUl5Q&qTvjs4TU;B3&}$BqB{3?QlA>5}-Q!s}b*1EiLAT zFt*ncStOq+Ye`-s&rV`&kF9qqF>9JSrgF-=i&39I@h9yk<85`|uwN1BvAk?ITdtXF zB;<9$QZfz=S&zd}_`6)Q)b&X9EoV@Spte|aM}ZKl5~KGpg=3$7co@Zc$HD&qhhGzX zY2u3wcSO}%Z9WhpxYWEruXStkoNkG78QdN)q$nejwf5(S{3Btbm~Lc-JIzit!MuBY zgc2~t1~7p0(B~WyYskdUm)uD8Fz{3N<*%vm`+meSYCaK$T}MpQ^ayUJjz!bwdCAHv z1(2jtAc=ru^5?!;K?4;$FZ&YScxO+zv$gR~pBxtxtnw>qlStbJ{D<{>oNG&-%y{h|{94aE0p_NW>-qM2rpffyqH_5=V>IBWfARF`IGM)3?IAJ zz0<%C7<(JmRMad)Rij?%<-5#_VU2NEVQNWzkFj91V881Z+C{C(oRV^Yxc8!cx{ zJ9p`-B8Wu0SSbNE6u|_STx5_l^K9;E+_S!}09%ZsA$CR?j zJyl=xF z7quS__?f5E?xl{*DGp1A%*8M+>5BOF7GNiMsd^vPk)%;)M|OG}JeE~|SSr+=RjR4f7cG8nP>RCL?-j{xM?m#&`^ zY7DY{xk3;y%e$rqH=Vfl1P-893)xnSibO75*5}f?AH?lBkz{*-Z7oz3%8;OWgaBKf zcQ+r0rC@kc;jI2Q+-kN^yIPwqhT*SH=8z(xlOuNFf|)`w^Mlw5^1Uk6FLfP4O+Q1L z4LxNL?veh}y*DcI-cBO`(-{1Mb{wQmr3($dx(7<@T=i4vCT z(?XyC7@oQ5j-%F@rfPm2n@yTa`&+s1qTWTvnhep97_d-I4>61qx#Qlpr;Bu~s;wVm zNl@zvQ88*jG@6i@;#4c=%2LbhV{=J>ehF< zFW8}vKiNjyo0&r{?Zt}$^0PkRdSP*cfmD2L;*SMK@b6T)wYQP&q=UDkHMkf|<1XKn~5IPHvAq0bqv zc$mdad$M;&+4_gXi#=;ixQ2actjvtEEDWFq8?px6aCZZeIU}arb9+si=f$ZMS8l02 zqJk~ufXNv~03E}i&It;ALBPdv-Y4*;r*)>ob0zA*a%`k=dfAFaR8c5N6y`$54bM2o zJ$Sw1EjHRsT04z8@=0J@ecx!@#l%hvtc@b=P!x$X*aU3nXf@02DqiYGSF?uJE&l+* z$kX(Dtk_K~wy7Z982J=om>uF6!7*{hIl};Po*g%iJT&(Dg{H0I$+W9^BND?ljVG4R zu!RfrFF8ixK?M5auLE`C%U=NNUQ|}I9a3Vm*xfqG8ImvgOAlj#mf5 zJ}Y?e_|wH#x06HWv(CjChKFH+dnW-gU4PuCwETN zx=y9y8J6pIt81i2z{4fBq*g%@4DN)O(m|X#%WnjnWqMYP--dN^I5dKK1`OT zIBv1$2_KXH03OVH;DU3<2hzFHcez}y*0s(m&iho+EbO7Z)26>Ms<)iBmvI##x!S%^ zRmRoE+;-&LkNo3N78}@om&k&qXCpEa3chQaKj@UXBEv|U1}Z_i%`?F zd6wTwSxi#QjX$3p>dLI4fEoD!$2^dIYgX-4kBgtgJ`zT`)8nza)7~^?SrP~UQVTP)0gPa0j1z;5 zkaLl)Yq!?$$)`i5%=eQsOtZF`_N4N}yGSa8fx?_K;jxY|L9FZl03*Ww9n_AU9-*n( z`43`1zA%_$1MerwRdA<*IM1hAs{a5G^*sja=4<}|07E95AbBUcf@zDSIDR>cYB(E7 zWn;Ssh2tFm09cDxxu>ydo&JyE+bJQNTwM%WOA78upG-k3j!qNzB$4=^YRlB4*ENq5 zX|vkLA+mg~X0VaWc*$Z{0aOlg#(AzXAKIJ4@aQtdr|4RT_I;^VxmfPte=as`ZdMPL z$vk78xy4uUAMNK2zLG8UZwy>D)N8e#^fM;Gm2bL1Rvcs=o4LmXk;JvESrSxsXQ}@H z!W*b)Xik~oEelael}lYMjCQ9ZK9YRIoQ`pi&b*)g7A4bMNvGP_*yy)J#tgcZr;!5T z&i(Gdau*yH1mvD;$NW$GW_W^I$!60c({#r3H-T+D(lc%an3a*)1`qoy`BpE)588uX z__d&WC17-t@pS|0#-+B^GusQ&=7CHpZ~33WZZ zk*Uc37bG9VQjC2-e;^NWmwrSO~x^pRem&KaRdJ z_{&_@uc5WpE-#-}j4jMDyEwQ|aswgxcpqDIaz09@n~*be@gucN*{c!Ny%uiz;3jSIkYXx=xpytW@?({x7y_!a%( zh0-sTc_(WyCmjwmUOA_J${!VV?M5g+;SSXj38MQ#?y#EPD2Z$s_spslhj0nV=ubG- zoMR=<)r{)Xce2#;{{Rqp6U1+;=rV~R*RAz=8_9h&o^r~YcY~A%h0jiyG`g?B-x}!h zB2S=Sxts$Bl?jkaNds@moDrUf(-rh5fPZHn8u&-X9vqv*I$os*gl#n#+WOY|<}(n5 zjwWn|8wSvM>GZFoejsXI2KYy3rE9iV`rNa}bm;@zW+2Js=Vs$62r|Rw+IMm=YNd$w zc2>F53_m<>^s(>;wfjH(O7Mn@2CJ(0KU~w`x(czp)@-8$Am+a2@V~~N5d1e9euJub2Tj#=?N?40l4@G2%PUJ0F~hdguqg<` z3%8tSkU_8En_W}J9}-i=TE~cNyfyum36oD35T)EuBd!clLm_uK1e`HAEP3cFWjAKp zAyHD;`5w>Ve~Dp+@lC9_z%fRb5&Y~M87f;pbhoEpsI1*<;rEC%)p@1S?+vnoOtHpX zC>iAK&N%hrzf8P);{N~;ct650Sm@gKg1lltXxj7pJ>gfCX5a?{K`6jJJ$o@ zPm0%2!C|D?cpBZWBwdqP-&w^ivpHbSir0S>7sJ|()|qFb z>b8k+ZhpeD2^3So1w!hT3a197-gC(S6Fv~ zuHd%a#fb!95;2?uUbErf*!NAE&U_Z5~}aPl|0a;#Y*m(H}WYy0W7n85v?pV5LrI zlT%xf>}3<@Umssx>K7L?!0~xALmud3kjMg}Dr6qn3JLrx%XMq%?q)36A($@&o_hB@ zSLznI`!QH})58<#^7uDLx3v2dg4t036pR5A4_QXGgk< z8}ATk@?I>6Wz&Aw0>oKP)>f4UP-ClOKR2#w=}E<1p-T?iPUq&*THZ9VAG6I7ay+)^ z9OsN5sO?=!!+L+v@A@jcA;EK%87Cm%00-fU{VDKo?6vT#Tha~OQQb=o)4E%3h{qMY zTYD~|VS}v1y9;>80k8L!`X7+bc#=xYA9H!UYrPp*s z=bw}ce$(1MUQtSevefxwP`L3NnjVw=u`RXcpDny|TCkQWN~g^dtL@Gk_Xmc@btG*n2cIppt8p~+q-9xAz~Y7Cuqho$Ri@L zl(`${i9c0y_+**+#VprQ-hH}jbSw}w{#r)p+? zt)@vD9X|g6?Cj_c;4vVLcVn;z@vpT!3FAKr>%I}ReIrYgLAH>Ipja$E&jFL9tq1{C z#^OPB>-dV7;s?Zyf9y6kUKy~DQ&StI)9P%A5j+)QLl-B87z3TdCyK%jTO+w)Y1>^{ z`NQK2-wWJ$UB;L+LTzm=Y^0Lj*jP;*fFy;b9!mMn86=FdmSP<^Ahymo#s2^VFSPwG zJBZ-CvNzWM0BN+ALPfR9`HD7TRaVBreL&PiTLr&6Q?*;JBy^v6N%UaR51hZ--2^#;F= zS?@15Gb2ngkb-(5kVkRJC#M*#7Qau2aKWm&9p2 z4|S;~m3ehwu4nsozL^@SjZp79(bFIu*#%D-$?7YN9~)#vR9Hf)o`2B^&#@+N^NQ9o zi_tQEtv9MYblSqr{-!hk00E|(8+QKymN6cC#w*GH0O5EYtUQHX$2nU@By{Ku`0ZL6 zf5nYMP_xu;?R55*+fRjLyMMAUSdpYuRzK+-+0=2*BDCj7pQ=y$8Ksv_b&ZTWWLF%6laiS9#eC$y8nt-TV%FGg@8mvD9m$t9^oQ*K0As9b z`YnfwX4NdM?X@^&Ni5dRM|H%^qYl$x9npi0xWUCGPMt-{)ytQ+!>?)0W57H?qw4zh zxh$IQr**1dTQfk@+{|PHX~xwU7{Ldp70+vpXP~GO+eLRUBWlPofNR{epM@SS_`EfZ zW5fO%lf>2*`hgd#1;j|3!-r`8b_edCPKLZbe}nqYo2p;wn&r)hho`VnEav`ZbwzC8 z<`t9EA5sTXin%&;qsdO%eg=4TR~IjBh?C!L=BI&tb)?$fD18EZ+s>)7bjJXkl2m?K z?Ovmz{?YcXte$`q=*AT&`kR)bRYwMnb4nO0^1cQ^Ge)Vrh{jIfW zb!%%)8q(ebx|P_^KA_?R$lddAgPuX^r1ERPFT4@p>kU5MU-(TYxSn|Y*yD>zAqtFx z^BFUc!Iv2R5_({tLACJDfVDjzP0`;})ZXIuNaKXs*{0`q;a8UKa5x?N)->|mG+#1~ z-lnzlTt<;{x_)2q53{r%i`H7#g6!jx^3PG#p=?d|1(Bn6Cbno_? z@^EXk@Grw(4fvztwY(M=4Sf=c{?!7q%Nh?Lm0|`*1dJY;_Z05AoKo2Hr6q2A?s`VC z@iRl4#F}2F+J%GKta8G$wxFUBAX0I=95x^I9@)7!$3G6+Z%^%QHR8w1w(LkxuOp0p zIj(!f9s}|`Z=q>=ZH!kCExpCrwUJsBljRDm<~Z1{NgRbd5IXhi{5#-{GEWU@a!qM( zXCSwaG07XI$4~ZzN$xFdE_d&2<-ufNPEK$JKPv6KTjGz0-U`>W zt8HIbu(G<6LvJ)6XWr37*kd``+1fS%x2fE44h}p^#$U9Cjd^FS>3TeKG&e13Y$rrm zjlb@(D!1Os?*rI^c^RzvswSF=5|Z^k+4u*iX!HC-@UMujEHrq&$EUTdT7yn}_X`)7 z9#blyfw+9Yk(>--zNXf^bz!6Fmp89>ZzNDc^AQ}YxP?;37$^ItzZ<+c`$=mWG}?62 z>QO9K@-)T;Lae2Z?gE3!B%I@dMmtxv_&?)6#~+MZdDFZJ;R~DVRt5&u^%x@-+gU=k z;~?43%y1YVo1wr1j-+Q&SGA6s6awZzqx|7Hi_ZLaO9D zvPQu{I0JDVYnHhG0D_44F3wAMb>SqJVn4JkhlXyKPiuQSV;n5;WaA#aQ92 zKt(dTk;5yMKU|8`xBZQL1s%G>Br{y>UAyE8 z9Q&3~GJWgkkAeCG9~XWH_;&L{wA6eX<82Lpv#$I>r_Vj9zF2_~U?YWmN3bzvCvfzw zXmtMoiyAJKX)dqvgG|wFRF5p)Ev#}b{16@619!eNobq#6DQeT);@9?j_;msWUkzBwiu-oRoBnRNIXs{6uFl6m z(sXx+|dF@bH4 ztEfE8$F311D%>C8CmG}njN|H`+lJmrwL9%lBFM2c#@^yp8;%DvN;|hh>sIL}xuT~i z{iF7heM`bnFl*~gCNrI(r;a4~hH`#k$Mx-5`frH79ctQ?T5K<%eY#)uR`JhnWRQ+< z5l-y&Jw0pj>)|(q?fxlv!q-Ew@ewz&Zgdw~JZ~8b$MM@52*xd~&f0Y*q@yQveI?>w4SYQC=h<#G zogYintYuw*$|HqY$T$UwQJeW0Zh?U*%sh ze%oIVwSO9TOT(6W28aEz66zNEgGXo?&y*s#0k;8wzcTaCFiDHSr3;X=UfZ|2@FrpI_AEM z)T3J%Wx0|;9lU5>Mq|PNGD-HXalB=rjhnTL1q@H#yNCb>a!Y=leY)e^qgFMe%@%nT zBPw#`k~qx<$4l{t?%2XLWq~fI(ysLsn(E#+I7X3DSH^MIByu_AR}b;S_E$d_taST( z9a`VR6I(l(ZXvQ++Hgt`4p~USP7ZsYQ=Y#2#F_?)uAOsA*0i{_2OA_|cLDQLp;-C$cJa!xc_ilq73!n{N7J?l8LFPncAv?ON1a|f zqsMIj0AsHL+gQPFsjWou#;EUa;t7#mfB>*oM#fG~Gl5yU=j>OZ-bWwyM~HRpDp2`z zKCIVBR~-WRNsrFGs!xbs8i|!#UDH8gLCx$#XdTbZ$8I|F>~R}>Oz_^-VXf)GNx|KH z3gg`T{C+(9S9EV3Q#oa>jeZBm-Z1@^{D0y7Vn{UD&bOzNm~SGwRNOroU4aZgBiPm! zqx(PnO44-8oBNFtEywC&jQOvUz$<0EJ}$~q(XUf1#CT=+}lC6~m$3h`c(r)&GX$?QwCcK0lDLk1`o zIZg@Z(T-jDXa{{XJ;-y*`X-A8Vg z_t4KA`<@hr+U<*|86*=3Q-RM1y(mOyc*I)MJZw??oheF#>6s^t^zVwsq$5#UX7r~z zZ`?m)^u1repBl6mTPvL}#JYQc?+M!bGxu4Mxl`!a9-#NHIq(ncgW>x>6kPa=T$)Wr z!f6D$Z-+~7w6k0c7Lk|Dm5(QDHqp4Q8?Ah6`!f6=*L;2AOIhsoZBN6N@rf=H?>2yf^U=;#QO4So|-l z=@!@aqUp7(`-sK8s+d|pvYZgCcI^XqC5Np-jHIrO`I3CSPpEEm`)kEzxwnF7&sCBz zMQ7Z28^iZ%%RYgn%&tLUEu3w;9XKj`f%#VjuYS>f7SlwLSv}UfFvtc7{J4St0DZvx z)HQIEe$zVa(0Lkeou*klU@9%hl7EyAqYRnp?NXcB8+#`8vDbWb_*vo2W5PNfix!t> zrNwouL28m&+s6|`CS&Fm!uRBn-1i-8<*$mL0CmrS^G7VU>#g`|Nl1rK({0#HtU=;f zQ#+0@Hvn^ikjIhfek1*$H4E$QA|Dg#R-%Bx+D#!!?`Aw;we$C zVn>ZxR!~29r)wYHb?isIdrpV(E5d#X)U77*9-V(aqNxs}435GUh-8%tvPyi+I*v%e z$>)G7{{V;sZOM1?6YK7%H1jAmax$va8CqIc(dq zG3{iy@sEx**(TFpKy6ak+M^58Ex-Duhirw;@Hgd-{Nr{8dELGv&3sqk z(M{txXowN4~YZwNJIm zCq`9P5)&R$CI@~3;DSM`x`)7zh_|y#b^ibe9rxPZ-Q}65)8sN1a@&WOAvwVS^T`C{ zlgBiw(`~gQe_=T*IGlHg{tw)E9rTTJP1b+4?{56~C({z#v4mk(H)kAeWn-4zfw!p* zfsc80qTX4po&NxXY{b^+QYN>)o(+$H424t`cFK&iq}ekkBD@Y)T}j+4C)ql z;w(oD_GPlokC?oBfC@ffqmp)m!K!-Ki6gv*JwN+0(@!>RVpd2>&l--Avu()=Fgd~F zn)Gn;qT{S@=6LvwJz8@2CCX=bK-+j<#F6TwPqx3bTfud6rcXNTxz6@g1O;!Ah$`61 z_2#s-PZr&3E36|}!nWFh-YwSTl!Wg_$X=%fI-H-IoZweJ*HFovOB{>NKm>w$@0|Wr z=^~CiBD^jOV|*^aHV+&#XY&;5(4$j$l}@EtbvcVB0R?C&kMn{Lkc7$?khi0)uRBL4suF_Or{8um-AO3%bTYioLJI)%e3puQ2R zU7~?xQ*9x|a1jbAfn#Bq+w!r2a_4 zt!mXY!>Ih<`~#`*f5Sn2;45oAPgl0o{8elFi`!`Dc*JqIWGHsDioq4e7;X);u5!HB z@T%K*f<1EcS+Ku~?$=9uI~zF_AZECYK-nOgL}pNqRJxpRNgM942hO9_=e5IMS}=#q zW{9f?Rpb>4{Z)oWK+jS@T=6ybou>H4FtgsYcbUv`NbFC|oxtwrl6n$A=N)lb>a^Zi6gYrE+V*v7tC9Y%b(sxpenWxRvGm5ub|t*o+a?^mvd>PYGUV3nl?*| zcqElSbaRu#h53i~agcp8p7-Goz%LO?sLyXci>K(aP62x%g+ky`d#5=w7Q8cCJ~nw;bJVf0adex#tG}kKDFrI z26R`q@in8QuL5~f-|d}%Ef(2g`9S54^T-+Ccdw#6Rb#GvJJhYTzY};~#^cFnnIpbg z5iUVJM6j}MQPYmxH>F;Oz`hyrCZzr)@OHg+G`k4oYp)DylC#~~JeyH`xXY6yMVUrb zhBySd$Q<<`ly7^Zs+^pjs?3YwFN`(qQ^XMIy3Fq_y0m1bM2E}Vf!@vH@=g^n%1c&hpsGb zA=?GUp?f>qS}w&gkt4g|U3mpI?in3OSUc ztCds1!LBO&m~@<^ozA>7o+46=V%567zK4c*XTkdZp{Ly4YWjVOTH0JpWYu*rk=xrS z18(`5@E8zA5IYY+n&Y(}8CzQDcXk6+f*7P_b{Z5H^T-)aL0MVtV;rC1>)$o>Kg0-2 zcu!ZoznQfO?d&cLW?}+H1TXTU02K#slny%PzB%}ztWBf%7VA`kCbhNx%$16g0a=}( z5UD<(w4FHM`U>TvSyyhz^<{_TjoUkIVkvw};d=vu-&m&m!(^h0m9Qr)U_*PYhp= zo-pxb*7y3Jq;2Jf)Ibu&o(P|UOpdD9E?9;q*BAf*D*dmDJVPR>6SV@rkkeuh>rJ~e8JX1fC8X9T%hOX+k$^O&xZ2z`%2pW zTZ=ciwG3gMq_=jAk&J_qMhW(+aq00}!z?1#N@&ewjv~)P149BRAC&g3BAd1y&VKF-5Kfg!+IW{e}Cc9Y??)H zwd*k`Rge}^9zEQt!wfJP$3vcaZ8FX5AiK7X(M`0GZFnPu6?NPQ7*ULF!+svZmQN0) zzWhV=(g$MeI(sUYil!HByOR1 zTcO7j0#pKUrLohVGgP!c2I-pht=6|5t7~gHn-kkfVdTXe%vgkvV`F9r#sMH?1tD^K zOJ4%m_=8Zlx7GByp|n&;-cL5-BC$r8U*iLXP&w=?iI2oqz7hC$HKwG|%$EB3fII2x z%1TGO%QA-EPJ84W9B?{kDoQ@-qoXGkSED_{N&S?3S8<}=9Wzyh?kBcOh^}J}v29Z2 zfh;*W>5LW`AQ6Cmi1=gsANXTZ_*0HYmN!+}%4^z!@RON!@=Ck}yLk&VRmF@SLo-Ft;@Tn(EWU*B%|7`^DCtAJeog+ez_Mki`o=a0bzZ1d;q*O?lsmyepyTQr{+{@czct zEaGeF#+3tw5vUAgQ4`^Y-gpP;Sk9*{uOrol4pP6fOYaSH_H*zqgKwy6HeNBiabppY zU9M4>VZ65`BY~IzasdH>Ja?}y(tK5C;I9~1!{KA%ct8@|!S?y1SYAIVn7YHXZonn7 zeK1$49&Hbfo5Y_OE$zM*={l4e%yLZ`w~p#GdD1Y&@`NFa7+_VOk&IV$;@=Ja(OTu| zU0e84<4#nF!xOH(Yb1)NJY}RHXL0S3>t3BW$uHi!-0`YSZ3VYuzVQD5hY!ct?-C!1 z8tj+SL?)X{zO!JM2b?O*BPtF!7#xlTavvN%4QiS`gKwj19xtBhrYSnjs7^sc-UN%x zlMXuW1Of>F;2hw1A4&Ly;Tg1zH^dehG*-_xg>+$!)Qi_S)`eI8-N*gMxSV9187xEAS7)zADqEx`V~n+I`e< z2@=-#NC@)vz>U1+SKtG|=Wxb(rPnl@uLhlB`1p)mTH46SnhvzG!a-Tj?#Mqg3@+X~ zl5jSf=KM$EDEv{OG#1_~ztUuqP?pwK`g)MDfWr+hoxO?5uQ&j6$u-iY2DEl&aiuuy zkDVIxk+^Q_<4i>KLLwZ?;=(n2GddG*Z5N^=*u`Fm} zBlvK^lw%wQ+A>K873;bO!>@l2?KJS`|&J$_Dvz zFbFI`AnKhX!x|*NY@fq=U6uK8=u*}>B?oUgDmXbA80>NmbBM1s?c0u9`h2BW!2f!K6Ik1sEjr$MIu>kzOIIc#ivAyPwLEds{bd7D+eA>T{8w z`DUlOCOY+~E+mfT{Un=Iv%0#GW7_Y12s@osip0CPQcoVL0miuh?F-ub)dFoYFk`(~wYT#|#k;kWhz*U%A_tD+P-c8&`_jgv(G;+p!6<~5Y`qicI z{nS=+0JffE$e15(gfJL?N8|d`mYx~7gng>;m@F40s!1EkK02&PyOYx=pvcM2D@(4V z>wOJ7&xxKoy3yNBkH#0PZIhLEQ7IU~22i_*IQ}xmxeaPS+G}1*V?D;R3yHqbaPnNi zKh3nj%M(VTJ%o~7a!AHN>n5S%Ei%#zi<_M2_VFAyosc8KF~gE_56jMW<0pmSRvh0D zJR@-#$BVQQ&+_?+tlOigBd9yZ4@`UgGg9LgthOz4DPMElJ{^2`g4^M(-lO9CJv!4+ zGs2PC>2JDAr9?=?sDa2pfGY4p{Jn|WUQy#uj~bVVpi5gDc=V_{$fWu0o(SEZ0rnmG z*U!40)~60egX4`m#S^K*+KJ$4W^dx*25Nau62GUc&5hId%KMuIjybkJc(qt zV}y_#5PAWP-TiCMmLHZ*%=F_?TVvJdym@AMB`)$e-ex6<_axH9+7+f2Oi z7mIJL?gI%mE4iZm@|>x-ZKnYL0CfKV_3M!Ew0>r|5;8-1a_waVoa}5K0X=bEw|DUO zN7PzJxRUlyG0U>F!yAbt@CO`|(-oU>@b^X1)XxgevKIkKobV5CdiwauC1dA3qDkGI zhPUGBZT|pgd(9_Mj&l=11Xg&xnC@dTyF10ZXdHZ}ZaC;Mlk;m_0@)osE7Wxl57=tc zSXj%vERrZ^^9DgA4Cf!twVUA1fXWn0eYj_zIY;PJ(FCD#sn(6G`W_(*Vq`cN&TvLW zYU)~n)ioQd$A;eBr~S*TVjeyB{J-S zF&ZH!I8_4*2VgiIE7_Oe-jG-iv8xOKS+xfocC^Opc(fRT!&T%mw&=rtbK-CF??3qP(#MCMl+Fv$XdsiNuRC%-^zsBafo>)K7#hM}NnvtCS_2B5ls?^~7Su;ZKzWOf+E zeBEc`4N~@Hjqe#T$!1hJ{MNN5@qdUk`63WqM>Ym`JPDEdS9+;ScN2s! z@z%cDJ%*tz#C~L#Ge)6eMGNJuM>qrhv)9tHFT8K!2^ki9=UjZss-Z{dDSLWK{HWXe zKNRiFCHJ%F#?-ChaU1zjmLw{w<0l6l0q=^$@mIx-bK$I-Zl$EPv&_>nY?%v!yLnaw z;DQbhe|qsPTT#{i(`5tdmuJkkNpNRvptrVo;j>I;NBMh{Wnw>9$Ti4sxppTctakojfq z8Ev@|9n(ve9P$RtA5F{Fxz7yhX>X}np#c^rc~oN~%-izhcjyK`#=LG@Cn&8?T6FIn z4^{Y+ph4pw5Di;Z)h4slt~SPO?X9MtZwDKTtYuF*+k^aF@+&Lhf54r0$Da_aJS!2i z)9-GJnC^83a;&KfN*z^4Dph#Telx+wP1ldLTglz$l_rUZ4;05Cim^MJaqE%#SGxYm zx~#K))7pKC+u1_a@2RwNENs{!85Dpw@Vx*X02r<)OAxm)rzvdqJxk%A{1e{m!rnB} zJVC8^vfEKh8>G8Be0q5DrDZt*w-O5E4hq-aFzWAb3~@ybx}q)?HDUsfKmg!Z7$np` z=kDB(`t@)AIZ}ylIR5}jj1NHv{{UrCQ<|o-XKZE5vD@4Dg5b6!5U;o=6?^+~L(swx z)c*j5dE&LpbM~{J`s6>xox1aH7mxn{ewMlYnWwd7f7&`7KgC}I{9&bQ65GXRd1PP` zu>eCWGKgd)hyX0R7?MB$SLKI|z8TqkJkj(=vDED~tE=d>A#;6ftU^m|511Ar$_nFh zf=5!Pk}LER_N1EWegOE}7frY9IVo2YnG;NF>MF}8qDEcbB)wsv1CSqsL+ zgJ1%r9&wD|?UzG`8;(>#(lapk!h|xaTFv{uA20Yrwibqj}*C7|4xj zBzDlFTFD%-EJb2aM!_IZ0S6pl4xCqte$}#G{7U$1AA@XSOM8n=X)c=j@zxtzl$pTt z+{oLH?^CyYXFOHLDNC5aR8Cs#eBt{DTqHlV*M|u^S)sd)S(La8*77LG1bX_{+h4Xy zg!miclXZ1$v9u8`)V6KIGNR;u^RYgMjMvG3vroeY_-pa2P1NTJ=BL`{VD2wNC`k;XNl&v(<*AK$_;s0Z4qg6^JdrsoTdGJo8%3 zsZBIhNha4R^Jl^RHr9U`_$C=IV!24~Ze`i!IowJw2PAeu{{YvobNI_+q{H9~i6Dhx zb8`_}t8{#*6E0WpwAdHSC>s>2U z)E35jyU!Y1y|^fR*li+-BIgBLb2mMR;EY%2XT$wBMUTXGmzR%u`<60EwPAr2gYu|s zKHx^dj04H~*Sz0;(iZw2nPH=UXW!}4c`?iO{Wn=ynVWAJ_7mr}gu zKeI}$Bkd&y=M9~~ShpcUkzb%z?R`9iJZ9c7KJzl1`(PUR{B)dZrn?@_6W)fUFA`Ww zd!y>nO+M>+EhJ5hv9RS>9H~qk@xian4~-fRf&4x3Z&C1!x(=;-sM+ahdnTxLc;k(T z(}mDM5Vknr2*KQaYxL8^3v`+-=!)Z?DTm$Z!LOG5UHd<1UN!iIcjE0%Ij7VvE&j(R z+4T=CT?L}s9FHX9zXq9(4{Fky$6hhrv#vUrK)@{)0f~~{{W8kyCbGdW)_j# zT}Upr{{9u*2}J`Su<4(E)%OR%zkz@7sQf|VEh|mcZWhLSs9o)2B_Jori$A&tZcgF} z$3Qw)k^E@*d8c?Y;3T>hoQ)Qix|O1=cNZRG`HwMt?+CdWUrPGE%u4<`)JK{KHxZH* z*PoIxpSkp}PPJ818frJ4*XHKayEuJ6;7yvz@TmQm5AB&W_q{6y z1FVu;!li)&pSBCI>SBY=#ArnTh`Kh)N z9d|?XgOl_0I6jqXqiLJ+IIT`ER`^q+GS4Znv{ytU{yp$GANA6-FLd2A>^~4=f;D&} z&|-qqZG^!dK?LY_9mFZz$TP?!uctlDo#RQWPAue)%uq=CHGZB6Uih7TqR;j{Mb_F2&?B~<9XX_yNeMgR8+Qe4Y{LQ% zEzqVaCyI|Zva`7`rtf>3ULEn5ihMU|WVU`6hBFID*^)#+K44YGZUghV@-~n$z-;mK zzlpv*X+9BO?7Lf=>&;Fpaq_~7A&yL8K~TYp=eYIjUlROM@ix0}qaUzbT)b^8Vp-#` zWH86LZgZS)06yG)UPYq(bGy^EhncmRUr84(3u+dN9M=$)F3iMBv^fPw9e3vkq4ROd ztm2*-uQOUzd30yjpA)}mZENEupQU(nP0^&*Y&8*!%{7u7w1|AbWm%^MR0Jev9IgoI zT&y;JHqq4~i@-NATBpjZ6t;m;ev5PbvtDcA-;H{Hhoz>!q}mI6hBLF@TUo4fuH|5^ zP{?2dGe6EYZaCb(DsJ76_L%W*yWz_{c+LHpXp@*_hs=zoL$1~>%Sp!K!9l>s86vsk zTD2%B?sZeI1$N%0PZ9pn);MO6zQog`kTUaDzvYm<(kjMi;L~IQQ2wjb*EiJ&8O^h6HkWtG^e% z7HIwphh5TQyzw5fE6p?r(@OWZH!db}tt(_40DzsUM^k`FYVZ#d+UeGQB8i$rVQ+2> zv8<|G5IGnpgU3&$b;302M)uI=saCBiSo&gL+CE73%l`lfuBALIBX^n=R*oSeB#0T+ znL#M(a85=*ARa5H(f%)LdcxexVc@M&Mz;!OM|Sx`7TOA|OnKVa$8qaepR;F+Jnski zy3Ot9I$oi57>DPHnm7AA5wI$*#O_t=&}{3HK==Ou2i{m|Kk$%VTs_1QrKPJDG2~!9 z#xe5s$^C1VtkpdfPMUQpN&H93@_yR3GF?Sy2ZXPh{#pLcE&kKMe1W$u8uQ5G+-9-7 zU;A8mw?u1ub?~K~tk+6e7UDwfjGX<~!RSXy@*9X&>-K|=+6~iN!{P;$+#n3TSajUk z18x9LwcGq=@ZPJfc$-IU2E=MH#|FtKlWc1fZf-Xm1H*O(y(J21tqyluqg$1{S@9=P z*QIGZK-z7k#hH>lmj3`|S(VmCP@$E?p>PR5D+9ZyJi#}`FAQoHw>oZz;aDy%W{i}+ z{?E5rpeR8M2@J#K&n3qzlaXFoodvS)qP;kxu@ayPL)~iEc+7F41 zoHx*<@RTCvNme8oK-muJF^-)%_pK!qdGcQM@2U2$z`u;zh3ACyPYz#ckZC$aj-d0T zuc<-i29e}I_5@Vj>Vj`~$6YaXHT z!^fIe#OUuCyfWGzg?(TiS#@huE~$BM8cf^Zu#K1Zf4u}vJdvW2(C{nf4+HooMDeVe z#g>Js&*8WMt(-sQWpp3JR17;KZ_p&ZahDKVHb)#Cp>q_ zAi6i2uG#JjjjYm3Du-ty_}G@|&lTss8?pEqXJg{~`%e-0e%|8t=3PNhc$NZQLZPq+ z4T9tDgO5s7=PGpCj9M;q<2feT#cO{8;P`uIYThi?tkdnln18YKnJ$qwkk8NCfyP__ zcJq!!W@;Y|d?lx75$m&fmr{>Sb8)s|q=eof0i^&5>+(3j&tBwgY3L%;NOTEkAyXL*R5{!nKX#nV=b@xLtI+P zw=zTW;BDjv190H>^G_Rio5Vi=8MOUdM%y*OcS~izHxQRqS7IGuUAR^R<2lIh$ogOQ zRrnLFd=c=^h%{-hZzs6Cxm&1Zn@N)1-F|y@;1f z>)-6c@=GPeX4oQ0YaAnJ4(!KtigAzO9FCRMPP_KJsofY)4+R$5K4;c`I(V}BON(JP znWL;SG;^{<(lF_era;Fdp5K*6ec;Ql5qOtQwy-*!mac8r?c2suR|*`nvhHuZag*O2 ztE%wdgYUdI<9%;ayt2~uCe$-4+TG0JD8!rcKoRF~+A!OP9lb2s`0K*n1-nlxL9&)u z3}G&`i}y~kz8LC07t`(FpI6mh&g92zP(^Oi?{gvI zO^oDz?~D=2>MGj&H}L-ek1cI9&+K0j$27MJ#(h3+9zU6PFp(U2d;(4e3G^ARX8Yr2 zwebSZ;cT?~f%X{|RgT`@&6$An1aE-H1bMD9MmWgH>E_-S__bqw;!7JHUG6RIWV~3e zp545uQXl7RWf_M{-A% z#&Fw|<2cVs@lObT&fX00uCg^aA)mzeQOM0~*U}WRwgeIUAs*!5kJ73vy&wcC0qAcgn^-P=DHNw#W=y} zcSj2g^G#|;_Bk)5hD+(1?VJ02XSzH&97#CrP7t z2rcF-e7GHX>BbFMj3nDY^O>^ysF8NHM$pq1*{2kY^w#AOOI3=QZqQ>zd~-DtwT+k>MFW z7v5?X*4N(?C9|?WD>L|d>wa;^+}=9z!kYHM;2(x*Zc^XkJ7z#K*Lp^w2qUgP+R&8$6gOR(Gh5WBwI?g6CKAJ}Y=y6>MN# zNp&9{`>og8@~Hm+;ZgW+%V^>Fx8PTIAb{GMM}g`4!l#};D(oyHv(+yO*mz6C*D$VL zdz(ACZWas<425Ci?w-Devvr2F&~*vzt~@2<8@S`1NDbzj1b2{^LPLPeS2!S!ooguK zt357h^?DDXjK2hQ;|qv>B={!fq-DU1U9ubu=kHEEN99kC_ItmPSuFM64c_nDmQ8z3 z#s+%-0HkNGKPs;NBJf45GR1$Pc-F(pjJNt$hiVBy{6l>CBm66WNz!~1sZBMCuBl@x zLH3U>>r1m6lsX|RvPa1VMbEZQYe{13M{_T$P?1XK;0KF5FX4TER>qqwHu`PGX0+98 z<=9##3QpNc>+Ex0Egyz7Ul4d6`u_F{r)#ZNIpeppmu!-}miE#}!9-43e|Y?3sK#-c z`om1{j)mcGxA{$LCCUS9J*U}Yic#}~WqpGL1Jq}=cz&64qiI?iYFbW?my4rZz07GF zs>qH^aF$mgjxfuR0m9_t1A?7*QMpK(@r+`rt%xi&Eh|CLqr1{{O>4uq4(|v{wpqe| zt0b0aqHH$R1FtL7k_Wqf%RVC4rkh;{Uxz?}r;@`ouRq~AU#?%+ z_J$K1+%%h&khq!Ah&_Jm3?4d;mH1HpHSq+O#_#)b_S#+hve&H{QV$r*bO#vpz^_rz z{{U)_iqOpnUy8b+UBEKWs0p_E{o-@Mtt!)$^%WV$7f0*V-U`xW)FafUVfLs{BFyqJ z0YT3>Y;J1K&9?hxB`pkOFv&`289^6Q<`~L99XeOcQ2yE;GuO0K zf?Z2M)GlE1qI=7!WPucN3y~v*EzocI@*2@}O-Cj6> zBytM7M-Wh?t0@hRK_8EwDv_t8nX8;nZ}BC+!d+A0&yKbK02pdEHqu3@PYs>*wcnc7 zts)s>RY-CU9LNAG$V1I!X}^Q@FpgZdGLpst?^(5^fkBdUZM8H2KoyW-Apa%VYHtn*XYnF-DU!OCTU>#Mlw*_)A1!h=k8Vue6)5Yeot4(tSv)s)loo=w%nA9`B zma2ZtBMLGKwlKYOUn+jh-?aCSJWJy51?YGBzM7U+Xqs$y7bZ9+Sd59?$u3BZR|D^4 z=YUB13&H;Y3%nEKuNLYvYCb5RTD$Y4l-OC3VH&G^rF^K{b~dKdf-n>ea4VLrH60{+ zSbSrX=3AY{m!SAJT+>=jGsdRk;jP}{1+|{qLO>rYZ3y`tdLD3bTt9>L&lYO>gJ@nL z@qVEOm3&gdNG>$P8buo+GP+L6fi{3t954le_Z{Z7;y(d=DPQazBf?F6b8{9=wVi+| zGWy9g4XiQ_OEJbdBbxbBQuv|bjXTA1=@)TXXjjl(tOC~I7V8m>#|!1SRo%I9jsV4S z%BrBQmClN|hf>PCv^`VeC&E93x(e^ob^T?ok%F;E<7l6t;k==^;2*k9YsYk5VLUUc z-c8}SzRuD{V@*R)fg0&!Y#s5&Kv>xA#_pITQ+#uGZ61py#*3<5>UUEgw9WR`dF78d z43T4QM10_d1-BoVoCUTHI$@5L zMwF#^o;65PQs$(Nmg`!-@phA>TfFhbHk%|X_G2(vu2D(c?94*8e8Mm|yv_o4F#Fct;=rsyH|U<^*wpfu#6S%EL>u)aCK!pW=9K9b?pO zw3Z6?XKIk7ZeUcG0D=I@9CD;ry!0R4VX~foAz_}}-5ALda)nj%ouC#Ys8f@U zF;^;y&z)=}oR5%o-xGXi@ylpBHJ+2Gcz)YcaSi3{78A!PUofjXz7Ev@Zuvk20n;T% z=ug6b*!SS=ufrb<4MV_s9;2vDr(4f=bE#Xc#PZJZt4Qq9WwKbFJ9HSXW5%BY{4=gJ z`s{Xgx^?!HB#~YtACopok;AV*cM@~K1fINO-o75|9v!jxZQ+kT?$#uSNwp6vaGXMe zA-WOn4k^{H>LqOss#MfgsNtjij(!X4QM|W*4svz!{{ZMRiuD}>#QqV!Ss=I9G})&Y6B8U)idbewBOo^%bM)q< zn_lp((-nhS({MOxKHRwa0lKjEv$w>~j#b$3+t1i9;9}e+n`hv4iYbquEKzEgilw8< zp(oDBz?J%X`&XHM)W5Mmf*{cJJKqnr{)ew>I@PwAw`r-)u)_;SE+a_GGDd)+fE9QH zrG0tlcz^q1(ILOIVdPAHTeUpyh<|&~{*~u{v}N^{k)rrI@+*XRBk?_>Tzt(WeqWb1 zOY986bB=IvN4BZIF;RqM?PKEKj32T80EIpW{1vm-5-4?@a^ap!>xrk8PafHLgG;fFb$b}+nWU4>K^9{ei{TpBXrF>PUxOhA@ z4YFK5lM5K&X-&1dhXGFqG86a;(bPX-{{RhLc$WV5E2*ut*^=F1fml1CQvPt|Kp7rZ z4o^nN>0ak&;9E-%9$)yX-umfowFFr1ZC}f1N~~&wZ^^xX)uBHz1g}c!8~1DdYnkF| z-$@%PFum+^-v>McrhGVx_d(I)mK`qM&ellad70EZNpc;4Ckk6?XJ`PCoMyd8$_v{S z%6MEc@eZlRb7N*d@-5YMn~APYw`X!zNh9%zuNbc3_s=An$k(+DM{Eeod6>Ze0Cd(q zx$tksws+G+nw_=mDsLn?%{=@T7r`b6=q}qpN4cN`vLPW(J#l2Z{8E&)<^aRZ&kl#%1S1qReHqvjepte3U(@RX@7s-ZK zVoAUl$6CEDani%+mGwQ=M%nkiL)V%^eGF#?;t+f8kw^8f1h?=fhi2Qq$J$(EjO`Xz zYsvxw;R>!WyFfdR2|qJ8eC2Z{(j7W2#mV$Ki``P(*<24kJ=+Ka zaOy`Ko+~rLem2r=bh}$SjY%yoV1Xl*ZWW^nRYK!&8-H5!dmjV%MZ6{AZB%P_@|zQD z4jR;af>&Z+uVWBgf3|t8&x0CYgifh`ZSVEF$4HkuY~ob_lb*8k(A7IAw#^j_?9WZQ z@fDmpZN{Q+R!b-l$n!xbnz;4K=i0eFTjM8(XVLWwc(ogeT1$B%RQo)bEL4CFKplT7 zlj2sF;Oko$r;+tbSCO3_NHpk6vXmjS{*b=8{5w~b%sc}en2zUGAoiO{U&xid0*Kfl zNp(2wEk(7#d4K~L=C`BrZX^K_S(-d5g&8M30RI3zYp1x6!5Vd*lW^7-lO@DbN&Cwt z0$fPzy8`s%1#ymZjQdw_@V{E{-nrr^?2=1}40gA7s3EoyXYAIKPO8LC-!5YSjB+^d znrghQc*MHcbluxLOIy)ytgP(dx`nLf1>DDR6Gqr#3Y-y=2*xT~d#fp|e$NGfitgWS zz|^-sIcdE2L1^NvW!znItVBK2bPbgN*fI*0FUQo~YK|>XptjUh!qW zh%M%yQ?Xd}pEu20t99CBRy&wJPd#!DKdo~oRCw-IWFIgX`Lq1THR)^Oj|NFCte^0P z+)8}0_w`leae{ww*A>!gm);Jwg^+j^H%)CEo5lKNcSaavHvAu(s5Nn#hL+qT7~1US zXVf$~yffjbFZA1q?cUvqhfkcV#Qtogx6ZCe$2&n@xvBKOg?e9(V{4B9>ayS7!~@Bt z>IjyTDDG8^jIYnob6ppLWAMNBrMyky>x43BIAE}WHo8Qqb!l@7uG^SA)XK`)S4bBhbDwYyMkzXqD{aiVU7JkEw$nU2qTF0* zz9@rR)AdD=BU{^~E%tnzzX2{{T5DS4gsHjACs=cu>TDY29==0RI52_CJ+#(RlO2{#j@7PKXqB#-|_i^C}CU z9r#a7D|vI`?G^~9KW14Z)gcPbpED>Wv5+NP_vB}&u3m2;?V;6w!aHWe1@FlJ0I;3U z>HE$<3Qzb%^wuYEyd(XsLg4=ZIV+v;uZlE{M%^uK^{qPQ@uiskp5E>$9|A`s3K*Ze zkHebi*-&R|5BuRy^sKp_=8inB$C3WiTJMCu9sD)(_4_&QwCk(*EsSa!;ISK}Act;2 z5it6&&lw}&i+|dKRx7uct;oTM(mRp;BFHaDx<%$$+ozKWI;|v$(1fQQ3 zO4s5ygJbYS8g-9`F0^f3NC#NAoo05&5-!rI_tc!_n{ODv;CDYAG}ZA|rq8A75!+ha zX}V!H2N1T=Xw0Gal!#=i5Qxpl&N#0Oy3m`$YKedSt7c^RmOG6+D0SoJT*=7y73eNm zEsXgSM(v-9W4P6&xruKK+%nxetYHcjAeB%D0e`*R)?C-xj;Vd9Mv%=lypz21T0{tp zIXU~I7{@>u2|p%75P0N$ zaC2GO)w~xP*@8>^i^!40|4+&K_efHbICfsZ-Hf+v=Dy5= zoOG{r(61qy;&qDmP>4h4OSk(%Y1Nu_Iou~{K?rcjxY~z+Fi5IqOLnuC)_LUA2#aG& zaIyK4uu==Q#6-#e0A*ATz*aD*sOXZH$hpJXYVKa0}2Sv&)Ct$aK2 z4W-_vtg6{dYSu8vs!A3T=0N5oX4<6f8TosDHRIRcvwx1SF0EHf@dfqL&nSpTcX09f zc_=bY;xG%~@DCj;+NX%axck;tIb903_jNt%`)lIkU3u3(6uuwBHqn_a)g_Yv00!l> z2kwA9@#&h&z8)igEw8>ScsAE!Y;P+@mQHtYa3f5ApTo^2{hRfTFUFn|@TR2C?$DZVQ3t=EM7MXhMsXN3GKbsm{@J)~DNSgCmyCn&5- z$;luBc=fL6%A2<tD+%X9ld+QGFk7umGiuwzvij4OHS09*`UFHSLB zDD(*1-$WTwyC=at&Og8kR57Yjo%2oPvPGfYX1Q6ja%GD3rvwoHLQsbn5!5ZfWreN zxc99RUC=iqWxtNJh;D!bDm@eZ?TrvMh-OU1R3?cH1VgsMh{Q-Oe|7~P*kT;;Z{ajj}Pjqi!| zjZehhOUlt`_ZJr?31bLHnvAXrkaqA?U=j6P`MfT}#}nM#>6WqicQUiwNp@fkNo5V4 z#E+PVA5LpK#@-#elKKem?kr)1TMMOYIl~~1NaJmKo z;Iy{5@}c`Jt-k0j+82a~?lv^vsVYFoKsYf;7xQkF1uQpa)$Q8pW9mi3Q zhm7-BM+=E0{oxOdk+udg)MBcJAD7>5_cc)J&$#ugj|p3NBTKjN)P5JzHE9z!*4kd9 zCHpW{QS+p$wL0Ys0q7f!eEMBN)-c+1I(60ctT$0fJpN*dUNFk#LLe+30I1#as&5@P zJ$c{k`)d{Uxpy??IBgo)p^`_rXxXGZD|~>q6L4-6{oXm|zLD@Bf?@vvgxPf4>zh|M z8ef$p_UdG|OJ$SFRaV@fGZ)%h8}^nTE)IO$O+HG#LX8(Kj_cs0!@&Ol2{m68Pp5e{ zdZpW5SlGrSJ+iyH@rp?lLMiR^mA8XzQ7{H65tNn~4!CoP9Q@S;DP+bm}T-GkNjW$c0 z`JU=ouBMVkn3I#{%gzsa^Y7W7_CfniS*I6@=RA{I!F24z#RGj1=Ty(EG__rQ~ai`fq4xOi)@jA@j zRg`&&HntAnILXF2$;NrF&o7GYyW*FO8)(aGH@O4;yS;s3@P>7>{g`|k82L@b{oIG& zY_f{wcvVN1eAl_vDf1?*YeM0?#=`}T*-xV2k^L&7>h>2Cv^Mv)_Y8QTPeHwhY-F0L@ZVXo(KNUpQ@yvfougvl zwtT!SVYg#|Lm|lP&{u4tqP1t8&8?0<#+Me0tayYjt7kp>>M}UC3o5m;`O*grT|%)W z#(q{f1pXB?pA$`QsokphX2rC$j!-0)86-P|4$-SHY<%T9cgq3Oja_rXwi+LfpT$z@ zmO7@Nb$K+hS+oVE9${gXM)_Z9Y=+4h3P>P~z`DkfB*HtrLg!7llqq<08J$bv2;5PL z0kX#LZc}=f{p(G zHsitk@~r*|>KlX2b!leFmti!W!n8;0j#K_i}>2jR(9rCw`O)8u6;lE1o- zYw+*v*YMxQ+D@5grFgGUkHoW;j^ZgNfZB!-yR%2O+jESffW3cs4X6}mj{FQ zPaUf-X^DbqJF~8XQ(pduiqHQ51n%(+N==`RqkI#B_EW==pZ0vuPR6nIZ`g;&ejn3C z-M@`|;Ib@BZ)xXwlFC>pR1%1nInP!c17D?f`dlpxVrP+DC=3(=Gm7WDL*Z#=wYHAX zG}|>O?io(i#9@giuV8w0u79mm-LtMVqkANLUGV<^_Ivo9;XexeLbtuS*Jr)dv}o6duYaRbAWss#~%ZrX0@6aUDY^fEBvY)js@DrSFJQBM{ zKPV)Qndx70{>|U8mxTO5quThhQFHMIYo}>a_FI>=(-`hKX!5>vtPVl*BMQVC{OyNI zztr_8Y%Hv1xV^cNQX4yHndEk3!lI0^C!if`_Ve~8@b;nL{{Y#4z`9nsrQT^erMT}*ckr%=`ukeqv$?yCo zz6tS%f;4!%X?v>PT-=%UN6d<{A|zroMHtF9Nyx9ez9cwb1M4T!-Mzb4=jX+rh%eyZ z6xja&r$c9JG(}xzi5*)EbB1L&;Edz026Nliz+Y639Af5*x$2(=e`ntfc!KA}m+)Td zsWz5@YZGGabl$_nRk>CW@ox}OV2t@s{IKTWi})9&;!d3AGk*A}uR&dKNA0y53B zD$?>w@~i8~yB@q&P5%IAiQAF)PB|DfjeTcv<{2zkG7YRmtTHkW^HE%ptsCA<-c%&^ zM@i#98A7@&pV`{AoHq+`3cFlJ(<-4PuqcNl?FSr=mF50A(>!nE4-&&2hx{XQcv&M^ zqI>as9q*VPJ?9}pZQ4#d=N^W-Wrs`hC5-8cM2;MvIG#Wtbspxg{{U>k3^628%WScn z;XJp`Pw%0};fmH(;Zs)3Ru)m0HIJTuXpJvQ@V=uS`G@wNq>|4PN9N_W+(zV{Km!HG z;%ngh`~7my!Li3_doG`Cs_K_Tq>_2#5+XEPbAyf#LJzOw^-t~J;*TrF-VP{yvn8F# z1mJXZ?gyoL0M}u%@D7o#>edm7F0HR^KE)G8%^-^E)ltfU&e+2?KpDXIBhkat{n}{a z#U&}(y;0x(#JWxAjJ#qkyiCjD8wj+!x$I@sU9Rw=duYbNGH#3v$Or^(-N?XN`ukk? zJ>bTJ%((DwgL-q1E?qtjbI0B>oPJgF5A08>$KpSZ`o5`c1dv%t;YE%p=2S@z+o-`T zsz?Nt?sI@USJ{3txi;3eAU?q@$U}@|{_WTSkb9^zy*iSFoh;o{>;&vVJ-_%HCr zXykkU0EJ!`L$l2JH0xPg(;ULSxvDnbvrobA5=>%GhdM+O1@jO5OJRv|kUF8xes50I z-)fTGvu%zUof$%JRLCDNI45tlX!tpQ;$?Z}&afD5%)4bw84*Y>R1!EC0G`B;Y~k;8 zWyV_Sc-M`;V?Tu}qsDFg8DVWJ-`PXH2_}r~lIkRJ^0?}(!||xK&)DzaUXQ1}?f(FV zKEY~>yv%hQsDk<)E`FUotKEEkK0GS~@JYAK)O6C4?cKL^>=N{lMSH=40jyx9^!>uPp(e3Uc@siyiv}%_u$7FFJ5wRczVs?O}4l;61b6=>p zdIWw6yVBm%O*4~nCYC!8qiU;ec?z*mPDtQnobWiW$8R3#5cqGzvzr@>d#xsEa}?JI z;$VOe-AJKBFCm6-Hw7oBPTVi=E~-1&;KVCf?(O`2sap7w)$bTs$K|!s-b#xzO46ux zQ<6e~B$*p_@_88Isr+2klf<4MwbmxJ-Ez!{_NlESU8ooRP;4+m%P_!DNjrI3=XI?v zR`5;ih6}4J-Xk{H%p zWk=ro;2tso>4FDTX+=#q_c%2yd@#7azVW7yXQ0e2B)XYx{QIeq7CwG&-h8A0IO+~h zT#;VwZ}F#E_<8XcQM!vkwUpmMy6O{qb1FkCFlQ?0+?LzBoZv`$WUBm~;hz#6Cg#+n zY*H!K;6%-oXI@m`k5E4f_nijeH9L5GL3ytIj%&tbpXNpk#ek4`PMdi-=rQvQ4%D%& zQjO%d2;LHEC#jzwUFwsy>^g0|td{`ZKq0>jR⩔>Q-dm<`PMD%Mpdb0ni=YYtMDR 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 literal 0 HcmV?d00001 diff --git a/packages/frontend/src/components/MkWatermarkEditorDialog.vue b/packages/frontend/src/components/MkWatermarkEditorDialog.vue index 72b65b26f743..cd476a8f473a 100644 --- a/packages/frontend/src/components/MkWatermarkEditorDialog.vue +++ b/packages/frontend/src/components/MkWatermarkEditorDialog.vue @@ -20,6 +20,7 @@ SPDX-License-Identifier: AGPL-3.0-only

+
{{ i18n.ts.preview }}
@@ -135,22 +136,14 @@ const canvasLoading = ref(true); -webkit-user-drag: none; } -.watermarkEditorPreviewResizerRoot { - position: relative; - flex: 1 0; -} - -.watermarkEditorPreviewResizer { - position: absolute; - top: 50%; - left: 50%; -} - -.watermarkEditorPreviewIframe { - display: block; - border: none; - width: 500px; - color-scheme: light dark; +.watermarkEditorPreviewCanvas { + width: 100%; + height: 100%; + padding: 20px; + box-sizing: border-box; + object-fit: contain; + pointer-events: none; + user-select: none; } .watermarkEditorSettings { From d2b242269778a95f47c76298dfa3465f5d217409 Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Mon, 16 Dec 2024 10:48:04 +0900 Subject: [PATCH 10/33] fix --- packages/frontend/src/scripts/watermark.ts | 79 +++++++++++++--------- 1 file changed, 46 insertions(+), 33 deletions(-) diff --git a/packages/frontend/src/scripts/watermark.ts b/packages/frontend/src/scripts/watermark.ts index f6b03568c680..8b5ccf7d5d54 100644 --- a/packages/frontend/src/scripts/watermark.ts +++ b/packages/frontend/src/scripts/watermark.ts @@ -42,40 +42,53 @@ export function applyWatermark(img: string | Blob, el: HTMLCanvasElement, config watermark.onload = () => { const width = config.width || watermark.width; const height = config.height || watermark.height; - const x = (() => { - switch (config.anchor) { - case 'center': - case 'top': - case 'bottom': - return (canvas.width - width) / 2; - case 'left': - case 'top-left': - case 'bottom-left': - return 0; - case 'right': - case 'top-right': - case 'bottom-right': - return canvas.width - width; - } - })(); - const y = (() => { - switch (config.anchor) { - case 'center': - case 'left': - case 'right': - return (canvas.height - height) / 2; - case 'top': - case 'top-left': - case 'top-right': - return 0; - case 'bottom': - case 'bottom-left': - case 'bottom-right': - return canvas.height - height; - } - })(); ctx.globalAlpha = config.opacity; - ctx.drawImage(watermark, x, y, width, height); + if (config.repeat !== false) { + const resizedWatermark = document.createElement('canvas'); + resizedWatermark.width = width; + resizedWatermark.height = height; + const resizedCtx = resizedWatermark.getContext('2d')!; + resizedCtx.drawImage(watermark, 0, 0, width, height); + const pattern = ctx.createPattern(resizedWatermark, config.repeat === true ? 'repeat' : `repeat-${config.repeat}`); + if (pattern) { + ctx.fillStyle = pattern; + ctx.fillRect(0, 0, canvas.width, canvas.height); + } + } else { + const x = (() => { + switch (config.anchor) { + case 'center': + case 'top': + case 'bottom': + return (canvas.width - width) / 2; + case 'left': + case 'top-left': + case 'bottom-left': + return 0; + case 'right': + case 'top-right': + case 'bottom-right': + return canvas.width - width; + } + })(); + const y = (() => { + switch (config.anchor) { + case 'center': + case 'left': + case 'right': + return (canvas.height - height) / 2; + case 'top': + case 'top-left': + case 'top-right': + return 0; + case 'bottom': + case 'bottom-left': + case 'bottom-right': + return canvas.height - height; + } + })(); + ctx.drawImage(watermark, x, y, width, height); + } }; watermark.src = config.fileUrl; } From 47ef78afe49298efbbcfcfee88c4651038384b2a Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Mon, 16 Dec 2024 10:53:16 +0900 Subject: [PATCH 11/33] :art: --- packages/frontend/src/components/MkWatermarkEditorDialog.vue | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/frontend/src/components/MkWatermarkEditorDialog.vue b/packages/frontend/src/components/MkWatermarkEditorDialog.vue index cd476a8f473a..6aee39b4cbdf 100644 --- a/packages/frontend/src/components/MkWatermarkEditorDialog.vue +++ b/packages/frontend/src/components/MkWatermarkEditorDialog.vue @@ -137,13 +137,14 @@ const canvasLoading = ref(true); } .watermarkEditorPreviewCanvas { + position: absolute; + top: 0; + left: 0; width: 100%; height: 100%; padding: 20px; box-sizing: border-box; object-fit: contain; - pointer-events: none; - user-select: none; } .watermarkEditorSettings { From 8f3241a6aebaa69bcf1dcdcd230fcc46805feb0f Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Mon, 16 Dec 2024 11:19:20 +0900 Subject: [PATCH 12/33] =?UTF-8?q?=E3=81=A8=E3=82=8A=E3=81=82=E3=81=88?= =?UTF-8?q?=E3=81=9A=E5=87=BA=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97?= =?UTF-8?q?=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/MkWatermarkEditorDialog.vue | 21 +++++++-- packages/frontend/src/scripts/watermark.ts | 47 ++++++++++++------- 2 files changed, 48 insertions(+), 20 deletions(-) diff --git a/packages/frontend/src/components/MkWatermarkEditorDialog.vue b/packages/frontend/src/components/MkWatermarkEditorDialog.vue index 6aee39b4cbdf..820b6bdc8416 100644 --- a/packages/frontend/src/components/MkWatermarkEditorDialog.vue +++ b/packages/frontend/src/components/MkWatermarkEditorDialog.vue @@ -20,7 +20,7 @@ SPDX-License-Identifier: AGPL-3.0-only
- +
{{ i18n.ts.preview }}
@@ -37,12 +37,13 @@ SPDX-License-Identifier: AGPL-3.0-only diff --git a/packages/frontend/src/scripts/watermark.ts b/packages/frontend/src/scripts/watermark.ts index 8b5ccf7d5d54..00bf9f8adac1 100644 --- a/packages/frontend/src/scripts/watermark.ts +++ b/packages/frontend/src/scripts/watermark.ts @@ -3,37 +3,41 @@ * SPDX-License-Identifier: AGPL-3.0-only */ import { getProxiedImageUrl } from "@/scripts/media-proxy.js"; +import { misskeyApi } from "@/scripts/misskey-api.js"; export type WatermarkConfig = { - fileId: string | null; - fileUrl: string | null; - width: number | null; - height: number | null; + fileId?: string; + fileUrl?: string; + width?: number; + height?: number; enlargement: 'scale-down' | 'contain' | 'cover' | 'crop' | 'pad'; gravity: 'auto' | 'left' | 'right' | 'top' | 'bottom'; - opacity: number; + opacity?: number; repeat: true | false | 'x' | 'y'; anchor: 'center' | 'top' | 'left' | 'bottom' | 'right' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'; - offsetTop: number | null; - offsetLeft: number | null; - offsetBottom: number | null; - offsetRight: number | null; - backgroundColor: string | null; - rotate: number | null; + offsetTop?: number; + offsetLeft?: number; + offsetBottom?: number; + offsetRight?: number; + backgroundColor?: string; + rotate?: number; + + /** @internal */ + __bypassMediaProxy?: boolean; }; /** * ウォーターマークを適用してキャンバスに描画する * - * @param img ウォーターマークを適用する画像(stringは画像URL。**プレビュー用途専用**) + * @param img ウォーターマークを適用する画像(stringは画像URL) * @param el ウォーターマークを適用するキャンバス * @param config ウォーターマークの設定 */ -export function applyWatermark(img: string | Blob, el: HTMLCanvasElement, config: WatermarkConfig) { +export async function applyWatermark(img: string | Blob, el: HTMLCanvasElement, config: WatermarkConfig) { const canvas = el; const ctx = canvas.getContext('2d')!; const imgEl = new Image(); - imgEl.onload = () => { + imgEl.onload = async () => { canvas.width = imgEl.width; canvas.height = imgEl.height; ctx.drawImage(imgEl, 0, 0); @@ -42,7 +46,7 @@ export function applyWatermark(img: string | Blob, el: HTMLCanvasElement, config watermark.onload = () => { const width = config.width || watermark.width; const height = config.height || watermark.height; - ctx.globalAlpha = config.opacity; + ctx.globalAlpha = config.opacity ?? 1; if (config.repeat !== false) { const resizedWatermark = document.createElement('canvas'); resizedWatermark.width = width; @@ -90,11 +94,20 @@ export function applyWatermark(img: string | Blob, el: HTMLCanvasElement, config ctx.drawImage(watermark, x, y, width, height); } }; - watermark.src = config.fileUrl; + + let watermarkUrl: string; + if (config.fileUrl == null && config.fileId != null) { + const res = await misskeyApi('drive/files/show', { fileId: config.fileId }); + watermarkUrl = res.url; + } else { + watermarkUrl = config.fileUrl!; + } + + watermark.src = config.__bypassMediaProxy ? config.fileUrl : getProxiedImageUrl(watermarkUrl, undefined, true); } }; if (typeof img === 'string') { - imgEl.src = getProxiedImageUrl(img, undefined, true); + imgEl.src = img; } else { const reader = new FileReader(); reader.onload = () => { From 7d80c2129be976f09a134c2ded8f18771d8b948a Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Mon, 16 Dec 2024 11:33:04 +0900 Subject: [PATCH 13/33] =?UTF-8?q?repeat=E3=81=AErotate=E3=81=AB=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/MkWatermarkEditorDialog.vue | 3 ++- packages/frontend/src/scripts/watermark.ts | 13 ++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/frontend/src/components/MkWatermarkEditorDialog.vue b/packages/frontend/src/components/MkWatermarkEditorDialog.vue index 820b6bdc8416..f114824835ae 100644 --- a/packages/frontend/src/components/MkWatermarkEditorDialog.vue +++ b/packages/frontend/src/components/MkWatermarkEditorDialog.vue @@ -73,7 +73,8 @@ const watermarkConfig = ref(defaultStore.state.watermarkConfig opacity: 0.5, anchor: 'bottom-right', gravity: 'auto', - repeat: false, + repeat: true, + rotate: 15, __bypassMediaProxy: true, }); //#endregion diff --git a/packages/frontend/src/scripts/watermark.ts b/packages/frontend/src/scripts/watermark.ts index 00bf9f8adac1..b8da4999858c 100644 --- a/packages/frontend/src/scripts/watermark.ts +++ b/packages/frontend/src/scripts/watermark.ts @@ -56,7 +56,18 @@ export async function applyWatermark(img: string | Blob, el: HTMLCanvasElement, const pattern = ctx.createPattern(resizedWatermark, config.repeat === true ? 'repeat' : `repeat-${config.repeat}`); if (pattern) { ctx.fillStyle = pattern; - ctx.fillRect(0, 0, canvas.width, canvas.height); + if (config.rotate) { + ctx.translate(canvas.width / 2, canvas.height / 2); + ctx.rotate(config.rotate * Math.PI / 180); + ctx.translate(-canvas.width / 2, -canvas.height / 2); + const rotatedWidth = Math.abs(canvas.width * Math.cos(config.rotate * Math.PI / 180)) + Math.abs(canvas.height * Math.sin(config.rotate * Math.PI / 180)); + const rotatedHeight = Math.abs(canvas.width * Math.sin(config.rotate * Math.PI / 180)) + Math.abs(canvas.height * Math.cos(config.rotate * Math.PI / 180)); + const x = Math.abs(rotatedWidth - canvas.width) / -2; + const y = Math.abs(rotatedHeight - canvas.height) / -2; + ctx.fillRect(x, y, rotatedWidth, rotatedHeight); + } else { + ctx.fillRect(0, 0, canvas.width, canvas.height); + } } } else { const x = (() => { From 00a5b5b7774fd117a1c68a3cf8efff5bbbf88b41 Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Mon, 16 Dec 2024 11:37:59 +0900 Subject: [PATCH 14/33] refactor --- packages/frontend/src/scripts/watermark.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/frontend/src/scripts/watermark.ts b/packages/frontend/src/scripts/watermark.ts index b8da4999858c..36add1b61faa 100644 --- a/packages/frontend/src/scripts/watermark.ts +++ b/packages/frontend/src/scripts/watermark.ts @@ -57,11 +57,12 @@ export async function applyWatermark(img: string | Blob, el: HTMLCanvasElement, if (pattern) { ctx.fillStyle = pattern; if (config.rotate) { + const rotateRad = config.rotate * Math.PI / 180; ctx.translate(canvas.width / 2, canvas.height / 2); - ctx.rotate(config.rotate * Math.PI / 180); + ctx.rotate(rotateRad); ctx.translate(-canvas.width / 2, -canvas.height / 2); - const rotatedWidth = Math.abs(canvas.width * Math.cos(config.rotate * Math.PI / 180)) + Math.abs(canvas.height * Math.sin(config.rotate * Math.PI / 180)); - const rotatedHeight = Math.abs(canvas.width * Math.sin(config.rotate * Math.PI / 180)) + Math.abs(canvas.height * Math.cos(config.rotate * Math.PI / 180)); + const rotatedWidth = Math.abs(canvas.width * Math.cos(rotateRad)) + Math.abs(canvas.height * Math.sin(rotateRad)); + const rotatedHeight = Math.abs(canvas.width * Math.sin(rotateRad)) + Math.abs(canvas.height * Math.cos(rotateRad)); const x = Math.abs(rotatedWidth - canvas.width) / -2; const y = Math.abs(rotatedHeight - canvas.height) / -2; ctx.fillRect(x, y, rotatedWidth, rotatedHeight); From 79882895c52387bae5923767907f3811fea41284 Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Mon, 16 Dec 2024 17:42:49 +0900 Subject: [PATCH 15/33] =?UTF-8?q?selectFile=E3=81=AE=E8=AA=BF=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (ウォーターマークの画像を指定するところでウォーターマークをかけるかどうかの設定が出るのは変すぎるので) --- .../frontend/src/components/MkPostForm.vue | 7 +- .../components/MkUserSetupDialog.Profile.vue | 4 +- .../frontend/src/pages/channel-editor.vue | 2 +- .../frontend/src/pages/emoji-edit-dialog.vue | 2 +- packages/frontend/src/pages/gallery/edit.vue | 8 +- .../src/pages/page-editor/page-editor.vue | 2 +- .../frontend/src/pages/settings/profile.vue | 4 +- .../src/pages/settings/sounds.sound.vue | 4 +- .../frontend/src/pages/settings/theme.vue | 2 +- packages/frontend/src/scripts/select-file.ts | 91 +++++++++++++------ 10 files changed, 86 insertions(+), 40 deletions(-) diff --git a/packages/frontend/src/components/MkPostForm.vue b/packages/frontend/src/components/MkPostForm.vue index 0b5794d1e309..6f6dbfc8cc19 100644 --- a/packages/frontend/src/components/MkPostForm.vue +++ b/packages/frontend/src/components/MkPostForm.vue @@ -116,7 +116,7 @@ import { formatTimeString } from '@/scripts/format-time-string.js'; import { Autocomplete } from '@/scripts/autocomplete.js'; import * as os from '@/os.js'; import { misskeyApi } from '@/scripts/misskey-api.js'; -import { selectFiles } from '@/scripts/select-file.js'; +import { selectFile } from '@/scripts/select-file.js'; import { defaultStore, notePostInterruptors, postFormActions } from '@/store.js'; import MkInfo from '@/components/MkInfo.vue'; import { i18n } from '@/i18n.js'; @@ -413,7 +413,10 @@ function focus() { function chooseFileFrom(ev) { if (props.mock) return; - selectFiles(ev.currentTarget ?? ev.target, i18n.ts.attachFile).then(files_ => { + selectFile(ev.currentTarget ?? ev.target, { + label: i18n.ts.attachFile, + multiple: true, + }).then(files_ => { for (const file of files_) { files.value.push(file); } diff --git a/packages/frontend/src/components/MkUserSetupDialog.Profile.vue b/packages/frontend/src/components/MkUserSetupDialog.Profile.vue index 7cb48f6afb81..ac7d0a6a8359 100644 --- a/packages/frontend/src/components/MkUserSetupDialog.Profile.vue +++ b/packages/frontend/src/components/MkUserSetupDialog.Profile.vue @@ -68,7 +68,9 @@ watch(description, () => { }); function setAvatar(ev) { - chooseFileFromPc(false).then(async (files) => { + chooseFileFromPc({ + multiple: false, + }).then(async (files) => { const file = files[0]; let originalOrCropped = file; diff --git a/packages/frontend/src/pages/channel-editor.vue b/packages/frontend/src/pages/channel-editor.vue index 6d8274a55c17..67fa90401570 100644 --- a/packages/frontend/src/pages/channel-editor.vue +++ b/packages/frontend/src/pages/channel-editor.vue @@ -189,7 +189,7 @@ async function archive() { } function setBannerImage(evt) { - selectFile(evt.currentTarget ?? evt.target, null).then(file => { + selectFile(evt.currentTarget ?? evt.target).then(file => { bannerId.value = file.id; }); } diff --git a/packages/frontend/src/pages/emoji-edit-dialog.vue b/packages/frontend/src/pages/emoji-edit-dialog.vue index 3765319b2591..eea726dbe6b4 100644 --- a/packages/frontend/src/pages/emoji-edit-dialog.vue +++ b/packages/frontend/src/pages/emoji-edit-dialog.vue @@ -121,7 +121,7 @@ watch(roleIdsThatCanBeUsedThisEmojiAsReaction, async () => { const imgUrl = computed(() => file.value ? file.value.url : props.emoji ? `/emoji/${props.emoji.name}.webp` : null); async function changeImage(ev: Event) { - file.value = await selectFile(ev.currentTarget ?? ev.target, null); + file.value = await selectFile(ev.currentTarget ?? ev.target); const candidate = file.value.name.replace(/\.(.+)$/, ''); if (candidate.match(/^[a-z0-9_]+$/)) { name.value = candidate; diff --git a/packages/frontend/src/pages/gallery/edit.vue b/packages/frontend/src/pages/gallery/edit.vue index 70f8b2c31d76..8c5be813e452 100644 --- a/packages/frontend/src/pages/gallery/edit.vue +++ b/packages/frontend/src/pages/gallery/edit.vue @@ -21,7 +21,7 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ file.name }}
- {{ i18n.ts.attachFile }} + {{ i18n.ts.attachFile }}
{{ i18n.ts.markAsSensitive }} @@ -45,7 +45,7 @@ import MkInput from '@/components/MkInput.vue'; import MkTextarea from '@/components/MkTextarea.vue'; import MkSwitch from '@/components/MkSwitch.vue'; import FormSuspense from '@/components/form/suspense.vue'; -import { selectFiles } from '@/scripts/select-file.js'; +import { selectFile } from '@/scripts/select-file.js'; import * as os from '@/os.js'; import { misskeyApi } from '@/scripts/misskey-api.js'; import { definePageMetadata } from '@/scripts/page-metadata.js'; @@ -64,8 +64,8 @@ const description = ref(null); const title = ref(null); const isSensitive = ref(false); -function selectFile(evt) { - selectFiles(evt.currentTarget ?? evt.target, null).then(selected => { +function chooseFile(evt) { + selectFile(evt.currentTarget ?? evt.target, { multiple: true }).then(selected => { files.value = files.value.concat(selected); }); } diff --git a/packages/frontend/src/pages/page-editor/page-editor.vue b/packages/frontend/src/pages/page-editor/page-editor.vue index ddb808390cb0..134849925d22 100644 --- a/packages/frontend/src/pages/page-editor/page-editor.vue +++ b/packages/frontend/src/pages/page-editor/page-editor.vue @@ -217,7 +217,7 @@ async function add() { } function setEyeCatchingImage(img) { - selectFile(img.currentTarget ?? img.target, null).then(file => { + selectFile(img.currentTarget ?? img.target).then(file => { eyeCatchingImageId.value = file.id; }); } diff --git a/packages/frontend/src/pages/settings/profile.vue b/packages/frontend/src/pages/settings/profile.vue index 561894d2b77b..aaecea1aa30a 100644 --- a/packages/frontend/src/pages/settings/profile.vue +++ b/packages/frontend/src/pages/settings/profile.vue @@ -223,7 +223,7 @@ function save() { } function changeAvatar(ev) { - selectFile(ev.currentTarget ?? ev.target, i18n.ts.avatar).then(async (file) => { + selectFile(ev.currentTarget ?? ev.target, { label: i18n.ts.avatar }).then(async (file) => { let originalOrCropped = file; const { canceled } = await os.confirm({ @@ -250,7 +250,7 @@ function changeAvatar(ev) { } function changeBanner(ev) { - selectFile(ev.currentTarget ?? ev.target, i18n.ts.banner).then(async (file) => { + selectFile(ev.currentTarget ?? ev.target, { label: i18n.ts.banner }).then(async (file) => { let originalOrCropped = file; const { canceled } = await os.confirm({ diff --git a/packages/frontend/src/pages/settings/sounds.sound.vue b/packages/frontend/src/pages/settings/sounds.sound.vue index 56f65e230996..be68afed98f0 100644 --- a/packages/frontend/src/pages/settings/sounds.sound.vue +++ b/packages/frontend/src/pages/settings/sounds.sound.vue @@ -94,7 +94,9 @@ const friendlyFileName = computed(() => { }); function selectSound(ev) { - selectFile(ev.currentTarget ?? ev.target, i18n.ts._soundSettings.driveFile).then(async (file) => { + selectFile(ev.currentTarget ?? ev.target, { + label: i18n.ts._soundSettings.driveFile, + }).then(async (file) => { if (!file.type.startsWith('audio')) { os.alert({ type: 'warning', diff --git a/packages/frontend/src/pages/settings/theme.vue b/packages/frontend/src/pages/settings/theme.vue index f1ec23158826..cbd128d69fe6 100644 --- a/packages/frontend/src/pages/settings/theme.vue +++ b/packages/frontend/src/pages/settings/theme.vue @@ -158,7 +158,7 @@ fetchThemes().then(() => { }); function setWallpaper(event) { - selectFile(event.currentTarget ?? event.target, null).then(file => { + selectFile(event.currentTarget ?? event.target).then(file => { wallpaper.value = file.url; }); } diff --git a/packages/frontend/src/scripts/select-file.ts b/packages/frontend/src/scripts/select-file.ts index 667226ed688f..747ce3600e2c 100644 --- a/packages/frontend/src/scripts/select-file.ts +++ b/packages/frontend/src/scripts/select-file.ts @@ -9,19 +9,22 @@ import * as os from '@/os.js'; import { misskeyApi } from '@/scripts/misskey-api.js'; import { useStream } from '@/stream.js'; import { i18n } from '@/i18n.js'; -import { $i } from '@/account.js'; import { defaultStore } from '@/store.js'; import { uploadFile } from '@/scripts/upload.js'; import type { MenuItem } from '@/types/menu.js'; -export function chooseFileFromPc(multiple: boolean, keepOriginal = false, useWatermark = false): Promise { +export function chooseFileFromPc(opts?: { + multiple?: boolean; + keepOriginal?: boolean; + useWatermark?: boolean; +}): Promise { return new Promise((res, rej) => { const input = document.createElement('input'); input.type = 'file'; - input.multiple = multiple; + input.multiple = opts?.multiple ?? false; input.onchange = () => { if (!input.files) return res([]); - const promises = Array.from(input.files, file => uploadFile(file, defaultStore.state.uploadFolder, undefined, keepOriginal, useWatermark)); + const promises = Array.from(input.files, file => uploadFile(file, defaultStore.state.uploadFolder, undefined, opts?.keepOriginal, opts?.useWatermark)); Promise.all(promises).then(driveFiles => { res(driveFiles); @@ -41,9 +44,11 @@ export function chooseFileFromPc(multiple: boolean, keepOriginal = false, useWat }); } -export function chooseFileFromDrive(multiple: boolean): Promise { +export function chooseFileFromDrive(opts?: { + multiple?: boolean; +}): Promise { return new Promise((res, rej) => { - os.selectDriveFile(multiple).then(files => { + os.selectDriveFile(opts?.multiple ?? false).then(files => { res(files); }); }); @@ -82,42 +87,76 @@ export function chooseFileFromUrl(): Promise { }); } -function select(src: HTMLElement | EventTarget | null, label: string | null, multiple: boolean): Promise { +function select(src: HTMLElement | EventTarget | null, opts?: { + label?: string; + multiple?: boolean; + dontUseWatermark?: boolean; +}): Promise { return new Promise((res, rej) => { const keepOriginal = ref(defaultStore.state.keepOriginalUploading); - const useWatermark = ref(defaultStore.state.useWatermark); + const useWatermark = ref(opts?.dontUseWatermark ? false : defaultStore.state.useWatermark); - os.popupMenu([label ? { - text: label, - type: 'label', - } : undefined, { + const menu: MenuItem[] = []; + + if (opts?.label) { + menu.push({ + text: opts.label, + type: 'label', + }); + } + + menu.push({ type: 'switch', text: i18n.ts.keepOriginalUploading, ref: keepOriginal, - }, { - type: 'switch', - text: i18n.ts.useWatermark, - ref: useWatermark, - }, { + }); + + if (!opts?.dontUseWatermark) { + menu.push({ + type: 'switch', + text: i18n.ts.useWatermark, + ref: useWatermark, + }); + } + + menu.push({ text: i18n.ts.upload, icon: 'ti ti-upload', - action: () => chooseFileFromPc(multiple, keepOriginal.value, useWatermark.value).then(files => res(files)), + action: () => chooseFileFromPc({ + multiple: opts?.multiple, + keepOriginal: keepOriginal.value, + useWatermark: useWatermark.value, + }).then(files => res(files)), }, { text: i18n.ts.fromDrive, icon: 'ti ti-cloud', - action: () => chooseFileFromDrive(multiple).then(files => res(files)), + action: () => chooseFileFromDrive({ multiple: opts?.multiple }).then(files => res(files)), }, { text: i18n.ts.fromUrl, icon: 'ti ti-link', action: () => chooseFileFromUrl().then(file => res([file])), - }], src); - }); -} + }); -export function selectFile(src: HTMLElement | EventTarget | null, label: string | null = null): Promise { - return select(src, label, false).then(files => files[0]); + os.popupMenu(menu, src); + }); } -export function selectFiles(src: HTMLElement | EventTarget | null, label: string | null = null): Promise { - return select(src, label, true); +export function selectFile(src: HTMLElement | EventTarget | null, opts: { + label?: string; + multiple: true; + dontUseWatermark?: boolean; +}): Promise; +export function selectFile(src: HTMLElement | EventTarget | null, opts?: { + label?: string; + multiple?: false; + dontUseWatermark?: boolean; +}): Promise; +export function selectFile(src: HTMLElement | EventTarget | null, opts?: { + label?: string; + multiple?: boolean; + dontUseWatermark?: boolean; +}): Promise { + return select(src, opts).then(files => { + return opts?.multiple ? files : files[0]; + }); } From dc197da0555ec4c89ed4f0f2741a4f00e7634326 Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Mon, 16 Dec 2024 20:52:07 +0900 Subject: [PATCH 16/33] wip MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit repeat-x, repeat-yは実装が難しすぎるので断念 --- locales/index.d.ts | 18 ++ locales/ja-JP.yml | 6 + .../MkWatermarkEditorDialog.anchor.vue | 94 +++++++ .../components/MkWatermarkEditorDialog.vue | 198 ++++++++++---- packages/frontend/src/scripts/upload.ts | 24 +- .../src/scripts/upload/compress-config.ts | 2 +- packages/frontend/src/scripts/watermark.ts | 244 ++++++++++++------ 7 files changed, 447 insertions(+), 139 deletions(-) create mode 100644 packages/frontend/src/components/MkWatermarkEditorDialog.anchor.vue diff --git a/locales/index.d.ts b/locales/index.d.ts index beccac4a1d74..a3cb8e1799e7 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -10661,6 +10661,24 @@ export interface Locale extends ILocale { */ "sent": string; }; + "_watermarkEditor": { + /** + * このファイルは対応していません + */ + "driveFileTypeWarn": string; + /** + * 画像ファイルを選択してください + */ + "driveFileTypeWarnDescription": string; + /** + * 描画モード + */ + "repeatSetting": string; + /** + * 全体を埋め尽くす + */ + "repeat": string; + }; } declare const locales: { [lang: string]: Locale; diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 01fdd36abe6b..7f098e0e0d80 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -2841,3 +2841,9 @@ _selfXssPrevention: _followRequest: recieved: "受け取った申請" sent: "送った申請" + +_watermarkEditor: + driveFileTypeWarn: "このファイルは対応していません" + driveFileTypeWarnDescription: "画像ファイルを選択してください" + repeatSetting: "描画モード" + repeat: "全体を埋め尽くす" diff --git a/packages/frontend/src/components/MkWatermarkEditorDialog.anchor.vue b/packages/frontend/src/components/MkWatermarkEditorDialog.anchor.vue new file mode 100644 index 000000000000..2728b0576c26 --- /dev/null +++ b/packages/frontend/src/components/MkWatermarkEditorDialog.anchor.vue @@ -0,0 +1,94 @@ + + + + + + diff --git a/packages/frontend/src/components/MkWatermarkEditorDialog.vue b/packages/frontend/src/components/MkWatermarkEditorDialog.vue index f114824835ae..6fcbb4694689 100644 --- a/packages/frontend/src/components/MkWatermarkEditorDialog.vue +++ b/packages/frontend/src/components/MkWatermarkEditorDialog.vue @@ -19,8 +19,8 @@ SPDX-License-Identifier: AGPL-3.0-only
- +
{{ i18n.ts.preview }}
@@ -30,6 +30,39 @@ SPDX-License-Identifier: AGPL-3.0-only + +
+
{{ i18n.ts.watermark }}
+
+ {{ i18n.ts.selectFile }} +
{{ friendlyFileName }}
+
+
+ +
@@ -37,13 +70,21 @@ SPDX-License-Identifier: AGPL-3.0-only @@ -168,45 +292,31 @@ onMounted(() => { overflow-y: scroll; } -.watermarkEditorResultRoot { - box-sizing: border-box; - padding: 24px; - height: 100%; - max-width: 700px; - margin: 0 auto; - display: flex; - align-items: center; +.formLabel { + font-size: 0.85em; + padding: 0 0 8px 0; } -.watermarkEditorResultHeading { - text-align: center; - font-size: 1.2em; -} - -.watermarkEditorResultHeadingIcon { - margin: 0 auto; - background-color: var(--MI_THEME-accentedBg); - color: var(--MI_THEME-accent); - text-align: center; - height: 64px; - width: 64px; - font-size: 24px; - line-height: 64px; - border-radius: 50%; +.fileSelectorRoot { + display: flex; + align-items: center; + gap: 8px; } -.watermarkEditorResultDescription { - text-align: center; - white-space: pre-wrap; +.fileErrorRoot { + flex-grow: 1; + min-width: 0; + font-weight: 700; + color: var(--MI_THEME-error); } -.watermarkEditorResultWrapper, -.watermarkEditorResultCode { - width: 100%; +.fileSelectorButton { + flex-shrink: 0; } -.watermarkEditorResultButtons { - margin: 0 auto; +.fileNotSelected { + font-weight: 700; + color: var(--MI_THEME-infoWarnFg); } @container (max-width: 800px) { diff --git a/packages/frontend/src/scripts/upload.ts b/packages/frontend/src/scripts/upload.ts index e9991ba69c6d..bc19fefc2d32 100644 --- a/packages/frontend/src/scripts/upload.ts +++ b/packages/frontend/src/scripts/upload.ts @@ -14,6 +14,7 @@ import { $i } from '@/account.js'; import { alert } from '@/os.js'; import { i18n } from '@/i18n.js'; import { instance } from '@/instance.js'; +import { canPreview, getWatermarkAppliedImage } from './watermark.js'; type Uploading = { id: string; @@ -68,22 +69,27 @@ export function uploadFile( uploads.value.push(ctx); - const config = !keepOriginal ? await getCompressionConfig(file) : undefined; - let resizedImage: Blob | undefined; + let _file: Blob = file; + + if (_file.type.startsWith('image/') && watermark && canPreview(defaultStore.state.watermarkConfig)) { + _file = await getWatermarkAppliedImage(_file, defaultStore.state.watermarkConfig); + } + + const config = !keepOriginal ? await getCompressionConfig(_file) : undefined; if (config) { try { - const resized = await readAndCompressImage(file, config); - if (resized.size < file.size || file.type === 'image/webp') { + const resized = await readAndCompressImage(_file, config); + if (resized.size < _file.size || _file.type === 'image/webp') { // The compression may not always reduce the file size // (and WebP is not browser safe yet) - resizedImage = resized; + _file = resized; } if (_DEV_) { - const saved = ((1 - resized.size / file.size) * 100).toFixed(2); - console.log(`Image compression: before ${file.size} bytes, after ${resized.size} bytes, saved ${saved}%`); + const saved = ((1 - resized.size / _file.size) * 100).toFixed(2); + console.log(`Image compression: before ${_file.size} bytes, after ${resized.size} bytes, saved ${saved}%`); } - ctx.name = file.type !== config.mimeType ? `${ctx.name}.${mimeTypeMap[config.mimeType]}` : ctx.name; + ctx.name = _file.type !== config.mimeType ? `${ctx.name}.${mimeTypeMap[config.mimeType]}` : ctx.name; } catch (err) { console.error('Failed to resize image', err); } @@ -92,7 +98,7 @@ export function uploadFile( const formData = new FormData(); formData.append('i', $i!.token); formData.append('force', 'true'); - formData.append('file', resizedImage ?? file); + formData.append('file', _file); formData.append('name', ctx.name); if (_folder) formData.append('folderId', _folder); diff --git a/packages/frontend/src/scripts/upload/compress-config.ts b/packages/frontend/src/scripts/upload/compress-config.ts index 3046b7f518b9..bd3952714720 100644 --- a/packages/frontend/src/scripts/upload/compress-config.ts +++ b/packages/frontend/src/scripts/upload/compress-config.ts @@ -21,7 +21,7 @@ const compressTypeMapFallback = { 'image/svg+xml': { quality: 1, mimeType: 'image/png' }, } as const; -export async function getCompressionConfig(file: File): Promise { +export async function getCompressionConfig(file: Blob): Promise { const imgConfig = (isWebpSupported() ? compressTypeMap : compressTypeMapFallback)[file.type]; if (!imgConfig || await isAnimated(file)) { return; diff --git a/packages/frontend/src/scripts/watermark.ts b/packages/frontend/src/scripts/watermark.ts index 36add1b61faa..b810a36dc11a 100644 --- a/packages/frontend/src/scripts/watermark.ts +++ b/packages/frontend/src/scripts/watermark.ts @@ -5,26 +5,57 @@ import { getProxiedImageUrl } from "@/scripts/media-proxy.js"; import { misskeyApi } from "@/scripts/misskey-api.js"; +export const watermarkAnchor = [ + 'top-left', + 'top', + 'top-right', + 'left', + 'center', + 'right', + 'bottom-left', + 'bottom', + 'bottom-right', +] as const; + +export type WatermarkAnchor = typeof watermarkAnchor[number]; + export type WatermarkConfig = { + /** ドライブファイルのID */ fileId?: string; + /** 画像URL */ fileUrl?: string; - width?: number; - height?: number; - enlargement: 'scale-down' | 'contain' | 'cover' | 'crop' | 'pad'; - gravity: 'auto' | 'left' | 'right' | 'top' | 'bottom'; + /** 親画像に対するウォーターマークの幅比率。ない場合は1。親画像が縦長の場合は幅の比率として、横長の場合は高さ比率として使用される */ + sizeRatio?: number; + /** 透明度 */ opacity?: number; - repeat: true | false | 'x' | 'y'; - anchor: 'center' | 'top' | 'left' | 'bottom' | 'right' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'; - offsetTop?: number; - offsetLeft?: number; - offsetBottom?: number; - offsetRight?: number; - backgroundColor?: string; + /** 回転角度(度数) */ rotate?: number; + /** パディング */ + padding?: { + top: number; + right: number; + bottom: number; + left: number; + }; /** @internal */ __bypassMediaProxy?: boolean; -}; +} & ({ + /** 繰り返し */ + repeat?: false; + /** 画像の始祖点 */ + anchor: WatermarkAnchor; +} | { + /** 繰り返し */ + repeat: true; +}); + +/** + * プレビューに必要な値が全部揃っているかどうかを判定する + */ +export function canPreview(config: Partial | null): config is WatermarkConfig { + return config != null && (config.fileUrl != null || config.fileId != null); +} /** * ウォーターマークを適用してキャンバスに描画する @@ -33,7 +64,7 @@ export type WatermarkConfig = { * @param el ウォーターマークを適用するキャンバス * @param config ウォーターマークの設定 */ -export async function applyWatermark(img: string | Blob, el: HTMLCanvasElement, config: WatermarkConfig) { +export async function applyWatermark(img: string | Blob, el: HTMLCanvasElement, config: WatermarkConfig | null) { const canvas = el; const ctx = canvas.getContext('2d')!; const imgEl = new Image(); @@ -41,91 +72,134 @@ export async function applyWatermark(img: string | Blob, el: HTMLCanvasElement, canvas.width = imgEl.width; canvas.height = imgEl.height; ctx.drawImage(imgEl, 0, 0); - if (config.fileUrl) { - const watermark = new Image(); - watermark.onload = () => { - const width = config.width || watermark.width; - const height = config.height || watermark.height; - ctx.globalAlpha = config.opacity ?? 1; - if (config.repeat !== false) { - const resizedWatermark = document.createElement('canvas'); - resizedWatermark.width = width; - resizedWatermark.height = height; - const resizedCtx = resizedWatermark.getContext('2d')!; - resizedCtx.drawImage(watermark, 0, 0, width, height); - const pattern = ctx.createPattern(resizedWatermark, config.repeat === true ? 'repeat' : `repeat-${config.repeat}`); - if (pattern) { - ctx.fillStyle = pattern; + + if (config != null) { + if (config.fileUrl) { + const watermark = new Image(); + watermark.onload = () => { + const canvasAspectRatio = canvas.width / canvas.height; // 横長は1より大きい + const watermarkAspectRatio = watermark.width / watermark.height; // 横長は1より大きい + const { width, height } = (() => { + const desiredWidth = canvas.width * (config.sizeRatio ?? 1); + const desiredHeight = canvas.height * (config.sizeRatio ?? 1); + + if ( + (watermarkAspectRatio > 1 && canvasAspectRatio > 1) || + (watermarkAspectRatio < 1 && canvasAspectRatio < 1) + ) { + return { + width: desiredWidth, + height: desiredWidth / watermarkAspectRatio + }; + } else { + return { + width: desiredHeight * watermarkAspectRatio, + height: desiredHeight + }; + } + })(); + + ctx.globalAlpha = config.opacity ?? 1; + + if (config.repeat) { + // 余白をもたせた状態のウォーターマークを作成しておく + const resizedWatermark = document.createElement('canvas'); + resizedWatermark.width = width + (config.padding ? (config.padding.left ?? 0) + (config.padding.right ?? 0) : 0); + resizedWatermark.height = height + (config.padding ? (config.padding.top ?? 0) + (config.padding.bottom ?? 0) : 0); + const resizedCtx = resizedWatermark.getContext('2d')!; + resizedCtx.drawImage( + watermark, + (config.padding ? config.padding.left ?? 0 : 0), + (config.padding ? config.padding.top ?? 0 : 0), + width, + height + ); + + const pattern = ctx.createPattern(resizedWatermark, config.repeat === true ? 'repeat' : `repeat-${config.repeat}`); + if (pattern) { + ctx.fillStyle = pattern; + if (config.rotate != null && config.rotate !== 0) { + const rotateRad = config.rotate * Math.PI / 180; + ctx.translate(canvas.width / 2, canvas.height / 2); + ctx.rotate(rotateRad); + ctx.translate(-canvas.width / 2, -canvas.height / 2); + const rotatedWidth = Math.abs(canvas.width * Math.cos(rotateRad)) + Math.abs(canvas.height * Math.sin(rotateRad)); + const rotatedHeight = Math.abs(canvas.width * Math.sin(rotateRad)) + Math.abs(canvas.height * Math.cos(rotateRad)); + const x = Math.abs(rotatedWidth - canvas.width) / -2; + const y = Math.abs(rotatedHeight - canvas.height) / -2; + ctx.fillRect(x, y, rotatedWidth, rotatedHeight); + } else { + ctx.fillRect(0, 0, canvas.width, canvas.height); + } + } + } else { + const x = (() => { + switch (config.anchor) { + case 'center': + case 'top': + case 'bottom': + return (canvas.width - width) / 2; + case 'left': + case 'top-left': + case 'bottom-left': + return 0 + (config.padding ? config.padding.left ?? 0 : 0); + case 'right': + case 'top-right': + case 'bottom-right': + return canvas.width - width - (config.padding ? config.padding.right ?? 0 : 0); + } + })(); + const y = (() => { + let rotateY = 0; // 回転によるY座標の補正 + + if (config.rotate) { + const rotateRad = config.rotate * Math.PI / 180; + rotateY = Math.abs(Math.abs(width * Math.sin(rotateRad)) + Math.abs(height * Math.cos(rotateRad)) - height) / 2; + } + + switch (config.anchor) { + case 'center': + case 'left': + case 'right': + return (canvas.height - height) / 2 + (config.padding ? config.padding.top ?? 0 : 0); + case 'top': + case 'top-left': + case 'top-right': + return rotateY; + case 'bottom': + case 'bottom-left': + case 'bottom-right': + return canvas.height - height - (config.padding ? config.padding.bottom ?? 0 : 0) - rotateY; + } + })(); + if (config.rotate) { const rotateRad = config.rotate * Math.PI / 180; - ctx.translate(canvas.width / 2, canvas.height / 2); + ctx.translate(x + width / 2, y + height / 2); ctx.rotate(rotateRad); - ctx.translate(-canvas.width / 2, -canvas.height / 2); - const rotatedWidth = Math.abs(canvas.width * Math.cos(rotateRad)) + Math.abs(canvas.height * Math.sin(rotateRad)); - const rotatedHeight = Math.abs(canvas.width * Math.sin(rotateRad)) + Math.abs(canvas.height * Math.cos(rotateRad)); - const x = Math.abs(rotatedWidth - canvas.width) / -2; - const y = Math.abs(rotatedHeight - canvas.height) / -2; - ctx.fillRect(x, y, rotatedWidth, rotatedHeight); - } else { - ctx.fillRect(0, 0, canvas.width, canvas.height); + ctx.translate(-x - width / 2, -y - height / 2); } + ctx.drawImage(watermark, x, y, width, height); } + }; + + let watermarkUrl: string; + if (config.fileUrl == null && config.fileId != null) { + const res = await misskeyApi('drive/files/show', { fileId: config.fileId }); + watermarkUrl = res.url; } else { - const x = (() => { - switch (config.anchor) { - case 'center': - case 'top': - case 'bottom': - return (canvas.width - width) / 2; - case 'left': - case 'top-left': - case 'bottom-left': - return 0; - case 'right': - case 'top-right': - case 'bottom-right': - return canvas.width - width; - } - })(); - const y = (() => { - switch (config.anchor) { - case 'center': - case 'left': - case 'right': - return (canvas.height - height) / 2; - case 'top': - case 'top-left': - case 'top-right': - return 0; - case 'bottom': - case 'bottom-left': - case 'bottom-right': - return canvas.height - height; - } - })(); - ctx.drawImage(watermark, x, y, width, height); + watermarkUrl = config.fileUrl!; } - }; - - let watermarkUrl: string; - if (config.fileUrl == null && config.fileId != null) { - const res = await misskeyApi('drive/files/show', { fileId: config.fileId }); - watermarkUrl = res.url; - } else { - watermarkUrl = config.fileUrl!; - } - watermark.src = config.__bypassMediaProxy ? config.fileUrl : getProxiedImageUrl(watermarkUrl, undefined, true); + watermark.src = config.__bypassMediaProxy ? config.fileUrl : getProxiedImageUrl(watermarkUrl, undefined, true); + } } + }; if (typeof img === 'string') { imgEl.src = img; } else { - const reader = new FileReader(); - reader.onload = () => { - imgEl.src = reader.result as string; - }; - reader.readAsDataURL(img); + imgEl.src = URL.createObjectURL(img); } } From 83b795d2f8d2ec7ea1b97da8b44343c3370dc4b8 Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Mon, 16 Dec 2024 23:28:32 +0900 Subject: [PATCH 17/33] lint --- .../frontend/src/components/MkWatermarkEditorDialog.anchor.vue | 2 +- packages/frontend/src/scripts/watermark.ts | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/frontend/src/components/MkWatermarkEditorDialog.anchor.vue b/packages/frontend/src/components/MkWatermarkEditorDialog.anchor.vue index 2728b0576c26..8e427023a6e5 100644 --- a/packages/frontend/src/components/MkWatermarkEditorDialog.anchor.vue +++ b/packages/frontend/src/components/MkWatermarkEditorDialog.anchor.vue @@ -5,7 +5,7 @@ SPDX-License-Identifier: AGPL-3.0-only