From 234650059808836c638e9cb5e9d369a0389415d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=9Acibor=20Rudnicki?= Date: Tue, 26 Nov 2024 04:15:23 +0000 Subject: [PATCH 01/10] Initial commit. --- .gitignore | 44 +++++++++++++ README.md | 108 +++++++++++++++++++++++++++++++- ng-package.json | 7 +++ package.json | 31 +++++++++ src/lib/index.ts | 3 + src/lib/result-callback.func.ts | 6 ++ src/lib/type-of.func.ts | 8 +++ src/public-api.ts | 4 ++ tsconfig.lib.json | 15 +++++ tsconfig.lib.prod.json | 11 ++++ tsconfig.spec.json | 15 +++++ 11 files changed, 250 insertions(+), 2 deletions(-) create mode 100644 .gitignore create mode 100644 ng-package.json create mode 100644 package.json create mode 100644 src/lib/index.ts create mode 100644 src/lib/result-callback.func.ts create mode 100644 src/lib/type-of.func.ts create mode 100644 src/public-api.ts create mode 100644 tsconfig.lib.json create mode 100644 tsconfig.lib.prod.json create mode 100644 tsconfig.spec.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ded37a0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,44 @@ +# See https://docs.github.com/get-started/getting-started-with-git/ignoring-files for more about ignoring files. + +# Compiled output +/dist +/tmp +/out-tsc +/bazel-out + +# Node +/node_modules +npm-debug.log +yarn-error.log + +# IDEs and editors +.idea/ +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# Visual Studio Code +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history/* + +# Miscellaneous +/.angular/cache +.sass-cache/ +/connect.lock +/coverage +/libpeerconnection.log +testem.log +/typings + +# System files +.DS_Store +Thumbs.db +*.ignore +temp \ No newline at end of file diff --git a/README.md b/README.md index db2113b..7b6b2b8 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,106 @@ -# core -Main package. +# typescript-package + + + + + +## core + +`typescript-package/core` + +Core package. + + +[![npm version][typescript-package-npm-badge-svg]][typescript-package-npm-badge] + +[![GitHub issues][typescript-package-badge-issues]][typescript-package-issues] +[![GitHub forks][typescript-package-badge-forks]][typescript-package-forks] +[![GitHub stars][typescript-package-badge-stars]][typescript-package-stars] +[![GitHub license][typescript-package-badge-license]][typescript-package-license] + +
+ +## Table of contents + +* [Installation](#installation) +* [Api](#api) +* [Git](#git) + * [Commit](#commit) + * [Versioning](#versioning) +* [License](#license) + +## Installation + +```bash +npm install @typescript-package/core +``` + +## Api + +```typescript +import { + resultCallback, + typeOf +} from '@typescript-package/core'; +``` + +
+ +## GIT + +### Commit + +* [AngularJS Git Commit Message Conventions][git-commit-angular] +* [Karma Git Commit Msg][git-commit-karma] +* [Conventional Commits][git-commit-conventional] + +### Versioning + +[Semantic Versioning 2.0.0][git-semver] + +**Given a version number MAJOR.MINOR.PATCH, increment the:** + +* MAJOR version when you make incompatible API changes, +* MINOR version when you add functionality in a backwards-compatible manner, and +* PATCH version when you make backwards-compatible bug fixes. + +Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format. + +**FAQ** +How should I deal with revisions in the 0.y.z initial development phase? + +> The simplest thing to do is start your initial development release at 0.1.0 and then increment the minor version for each subsequent release. + +How do I know when to release 1.0.0? + +> If your software is being used in production, it should probably already be 1.0.0. If you have a stable API on which users have come to depend, you should be 1.0.0. If you’re worrying a lot about backwards compatibility, you should probably already be 1.0.0. + +## License + +MIT © angular-package ([license][typescript-package-license]) + + + + [typescript-package-badge-issues]: https://img.shields.io/github/issues/angular-package/typescript-package + [typescript-package-badge-forks]: https://img.shields.io/github/forks/angular-package/typescript-package + [typescript-package-badge-stars]: https://img.shields.io/github/stars/angular-package/typescript-package + [typescript-package-badge-license]: https://img.shields.io/github/license/angular-package/typescript-package + + [typescript-package-issues]: https://github.com/angular-package/typescript-package/issues + [typescript-package-forks]: https://github.com/angular-package/typescript-package/network + [typescript-package-license]: https://github.com/angular-package/typescript-package/blob/master/LICENSE + [typescript-package-stars]: https://github.com/angular-package/typescript-package/stargazers + + + + + [typescript-package-npm-badge-svg]: https://badge.fury.io/js/%40typescript-package%2Ftypescript-package.svg + [typescript-package-npm-badge]: https://badge.fury.io/js/%40typescript-package%2Ftypescript-package + + +[git-semver]: http://semver.org/ + + +[git-commit-angular]: https://gist.github.com/stephenparish/9941e89d80e2bc58a153 +[git-commit-karma]: http://karma-runner.github.io/0.10/dev/git-commit-msg.html +[git-commit-conventional]: https://www.conventionalcommits.org/en/v1.0.0/ diff --git a/ng-package.json b/ng-package.json new file mode 100644 index 0000000..b33f88a --- /dev/null +++ b/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../dist/core", + "lib": { + "entryFile": "src/public-api.ts" + } +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..3b462de --- /dev/null +++ b/package.json @@ -0,0 +1,31 @@ +{ + "name": "@testing-package/core", + "version": "1.0.0", + "author": "wwwdev.io ", + "description": "Core package.", + "license": "MIT", + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org" + }, + "peerDependencies": {}, + "scripts": {}, + "repository": { + "type": "git", + "url": "git+https://github.com/typescript-package/core.git" + }, + "bugs": { + "url": "https://github.com/typescript-package/core/issues" + }, + "keywords": [ + "@typescript-package", + "@typescript-package/core" + ], + "funding": [ + { + "type": "individual", + "url": "https://checkout.revolut.com/pay/048b10a3-0e10-42c8-a917-e3e9cb4c8e29" + } + ], + "sideEffects": false +} diff --git a/src/lib/index.ts b/src/lib/index.ts new file mode 100644 index 0000000..f4b5f6d --- /dev/null +++ b/src/lib/index.ts @@ -0,0 +1,3 @@ +// Function. +export { resultCallback } from './result-callback.func'; +export { typeOf } from './type-of.func'; diff --git a/src/lib/result-callback.func.ts b/src/lib/result-callback.func.ts new file mode 100644 index 0000000..278a608 --- /dev/null +++ b/src/lib/result-callback.func.ts @@ -0,0 +1,6 @@ +/** + * Default function to handle `callback` of functions. + * @param result A value of `boolean` type of the result of the check. + * @returns The return value is a `boolean` of the result of the check. + */ +export const resultCallback = (result: boolean): boolean => result; diff --git a/src/lib/type-of.func.ts b/src/lib/type-of.func.ts new file mode 100644 index 0000000..cd49ce4 --- /dev/null +++ b/src/lib/type-of.func.ts @@ -0,0 +1,8 @@ +/** + * @description Gets the specific object class type of any value. + * @param {*} value Any value to check its object class type. + * @returns {string} The return value is a `string` of the object class name. + * @author https://javascript.plainenglish.io/the-best-way-to-type-check-in-vanilla-js-55197b4f45ec + */ +export const typeOf = (value: any): string => + Object.prototype.toString.call(value).slice(8, -1).toLowerCase(); diff --git a/src/public-api.ts b/src/public-api.ts new file mode 100644 index 0000000..a2cadfd --- /dev/null +++ b/src/public-api.ts @@ -0,0 +1,4 @@ +/* + * Public API Surface of core + */ +export * from './lib'; \ No newline at end of file diff --git a/tsconfig.lib.json b/tsconfig.lib.json new file mode 100644 index 0000000..2359bf6 --- /dev/null +++ b/tsconfig.lib.json @@ -0,0 +1,15 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "../../out-tsc/lib", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [] + }, + "exclude": [ + "**/*.spec.ts" + ] +} diff --git a/tsconfig.lib.prod.json b/tsconfig.lib.prod.json new file mode 100644 index 0000000..9215caa --- /dev/null +++ b/tsconfig.lib.prod.json @@ -0,0 +1,11 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "declarationMap": false + }, + "angularCompilerOptions": { + "compilationMode": "partial" + } +} diff --git a/tsconfig.spec.json b/tsconfig.spec.json new file mode 100644 index 0000000..254686d --- /dev/null +++ b/tsconfig.spec.json @@ -0,0 +1,15 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "../../out-tsc/spec", + "types": [ + "jasmine" + ] + }, + "include": [ + "**/*.spec.ts", + "**/*.d.ts" + ] +} From 017f8f076901c8fd827b912e070b08a82f2ab00c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=9Acibor=20Rudnicki?= Date: Tue, 26 Nov 2024 04:30:48 +0000 Subject: [PATCH 02/10] docs(README.md): update. --- README.md | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 7b6b2b8..bf3ca21 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,8 @@ -# typescript-package - - + -`typescript-package/core` +## typescript-package/core Core package. From e34395c09925f4ddab067be9c315c81fad4461e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=9Acibor=20Rudnicki?= Date: Tue, 26 Nov 2024 04:36:58 +0000 Subject: [PATCH 03/10] chore(package): add `scripts`. --- package.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 3b462de..0de5a9b 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,11 @@ "registry": "https://registry.npmjs.org" }, "peerDependencies": {}, - "scripts": {}, + "scripts": { + "prepublishOnly": "npm run pkg && npm run clean", + "pkg": "npm pkg delete dependencies", + "clean": "npm pkg delete scripts" + }, "repository": { "type": "git", "url": "git+https://github.com/typescript-package/core.git" From 928aa221fdb8964189de3e3451a62fa520c24854 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=9Acibor=20Rudnicki?= Date: Tue, 26 Nov 2024 04:37:28 +0000 Subject: [PATCH 04/10] chore(ng-package): add `keepLifecycleScripts`. --- ng-package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ng-package.json b/ng-package.json index b33f88a..a29fbbc 100644 --- a/ng-package.json +++ b/ng-package.json @@ -3,5 +3,6 @@ "dest": "../../dist/core", "lib": { "entryFile": "src/public-api.ts" - } + }, + "keepLifecycleScripts": true } \ No newline at end of file From 1273727c35e277b46ad54cc00788d3c191b7b5fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=9Acibor=20Rudnicki?= Date: Tue, 26 Nov 2024 04:37:35 +0000 Subject: [PATCH 05/10] chore(package-lock): update. --- package-lock.json | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..a6a3453 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,19 @@ +{ + "name": "@testing-package/core", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@testing-package/core", + "version": "1.0.0", + "funding": [ + { + "type": "individual", + "url": "https://checkout.revolut.com/pay/048b10a3-0e10-42c8-a917-e3e9cb4c8e29" + } + ], + "license": "MIT" + } + } +} From ac080074753500e52dd61c99fc61e6b776f9cbb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=9Acibor=20Rudnicki?= Date: Tue, 26 Nov 2024 04:37:41 +0000 Subject: [PATCH 06/10] docs(README.md): update. --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index bf3ca21..f7c65f0 100644 --- a/README.md +++ b/README.md @@ -40,8 +40,6 @@ import { } from '@typescript-package/core'; ``` -
- ## GIT ### Commit From d05e6505e11ad6944795415d9fea7122a46d6de1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=9Acibor=20Rudnicki?= Date: Tue, 26 Nov 2024 04:43:07 +0000 Subject: [PATCH 07/10] docs(README.md): update. --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index f7c65f0..e3c3499 100644 --- a/README.md +++ b/README.md @@ -75,21 +75,21 @@ MIT © angular-package ([license][typescript-package-license]) - [typescript-package-badge-issues]: https://img.shields.io/github/issues/angular-package/typescript-package - [typescript-package-badge-forks]: https://img.shields.io/github/forks/angular-package/typescript-package - [typescript-package-badge-stars]: https://img.shields.io/github/stars/angular-package/typescript-package - [typescript-package-badge-license]: https://img.shields.io/github/license/angular-package/typescript-package + [typescript-package-badge-issues]: https://img.shields.io/github/issues/typescript-package/core + [typescript-package-badge-forks]: https://img.shields.io/github/forks/typescript-package/core + [typescript-package-badge-stars]: https://img.shields.io/github/stars/typescript-package/core + [typescript-package-badge-license]: https://img.shields.io/github/license/typescript-package/core - [typescript-package-issues]: https://github.com/angular-package/typescript-package/issues - [typescript-package-forks]: https://github.com/angular-package/typescript-package/network - [typescript-package-license]: https://github.com/angular-package/typescript-package/blob/master/LICENSE - [typescript-package-stars]: https://github.com/angular-package/typescript-package/stargazers + [typescript-package-issues]: https://github.com/typescript-package/core/issues + [typescript-package-forks]: https://github.com/typescript-package/core/network + [typescript-package-license]: https://github.com/typescript-package/core/blob/master/LICENSE + [typescript-package-stars]: https://github.com/typescript-package/core/stargazers - [typescript-package-npm-badge-svg]: https://badge.fury.io/js/%40typescript-package%2Ftypescript-package.svg - [typescript-package-npm-badge]: https://badge.fury.io/js/%40typescript-package%2Ftypescript-package + [typescript-package-npm-badge-svg]: https://badge.fury.io/js/%40typescript-package%2Fcore.svg + [typescript-package-npm-badge]: https://badge.fury.io/js/%40typescript-package%2Fcore [git-semver]: http://semver.org/ From d1d137a19aa45c6969e64d6513f9712c5dce5e83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=9Acibor=20Rudnicki?= Date: Tue, 26 Nov 2024 04:45:33 +0000 Subject: [PATCH 08/10] docs(README.md): update. --- README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/README.md b/README.md index e3c3499..75da9cd 100644 --- a/README.md +++ b/README.md @@ -8,10 +8,7 @@ Core package. [![npm version][typescript-package-npm-badge-svg]][typescript-package-npm-badge] - [![GitHub issues][typescript-package-badge-issues]][typescript-package-issues] -[![GitHub forks][typescript-package-badge-forks]][typescript-package-forks] -[![GitHub stars][typescript-package-badge-stars]][typescript-package-stars] [![GitHub license][typescript-package-badge-license]][typescript-package-license]
From 0bd7d64b5a0de363ea27c10463754f68225e4073 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=9Acibor=20Rudnicki?= Date: Tue, 26 Nov 2024 22:35:01 +0000 Subject: [PATCH 09/10] docs(resultCallback): update. --- src/lib/result-callback.func.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lib/result-callback.func.ts b/src/lib/result-callback.func.ts index 278a608..af861c5 100644 --- a/src/lib/result-callback.func.ts +++ b/src/lib/result-callback.func.ts @@ -1,6 +1,6 @@ /** - * Default function to handle `callback` of functions. - * @param result A value of `boolean` type of the result of the check. - * @returns The return value is a `boolean` of the result of the check. + * @description Default function to handle `callback` of functions. + * @param {boolean} result - A value of `boolean` type of the result of the check. + * @returns {boolean} The returned value is a `boolean` of the result of the check. */ export const resultCallback = (result: boolean): boolean => result; From 09f20f43bf0901f59765d6bfca2204cc1f65aba0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=9Acibor=20Rudnicki?= Date: Tue, 26 Nov 2024 22:35:13 +0000 Subject: [PATCH 10/10] chore: custom logo. --- ts-package-barcode-logo-512.png | Bin 0 -> 13997 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 ts-package-barcode-logo-512.png diff --git a/ts-package-barcode-logo-512.png b/ts-package-barcode-logo-512.png new file mode 100644 index 0000000000000000000000000000000000000000..9705d19cc4a3209b0da1f038a24198b5e74e8180 GIT binary patch literal 13997 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̶D zPUh9tT>V+4-EC!Vp&eA;m2y`d_H>+1mRw+%I$1ZW;KVVu_W^Sl`qY|@kvFvwcvA9= zrV$Ayq}8QOULME4>yxu3+}dzj?(r3g}n zO3Lnb&w0{!3_MbRbFsm=yl&r$;qqw|nXt-_w3)mpols@Iv7dsv#ZXT9#w+90iQA}! zR~Fr1fYkp6CfMCC{W#VzSlWM0^0q_fQb>)IyWLlb#88cNB^eEDsDHLt*1&p~&C{m4 z2W=&`J~We7C74pvbW9j zx|fHVwgitWTT6@TgTd|$nZ83akhKQ}vpA8F%F04>VB~}S-MQJj{orhY$WG~Vr(vKI=A0#aaiQ!-@Aa@3O__Bxb zX;p}R;_|xA)mgtn!-U)-_%NLh5u%gN%QO@&=*KWm_+H21TuA(wVHB_2?-<{p# zrfu>Ls+eFyrloYb;wBfpsy<3dS%>cJIdQukO9h9`yFblmYkji5|B9I9W_B8kbXdY7 zGV+gy&+LRe$^UBt=X|$VC+9@Bzl|KCQ(~>w*(n?;yx_Z|1ewb999fy*weORFb0^J0LAN(Qsj|RNUaUnoD?z z{ktDS`(`n(7g5BXbfb!`Rp$w+1mDG^p%=HmL zN^Bjf2?xulwAnKLXVJ4yh0n0JTvEO88`vRbEbne&BF8TNpsTjJ-}MNU*gT_|C#_ppd{Rhh6q!C0w&Hg+qWkI& zZlGkAf(Y>(@-{jfL}@GO7jEdP|CAJJ{+VUlq^PQ1>vLJoN>!Npj?VB!+X^Mv4a$?N z3yink4P`XbE-n4|3&5$s?B(+uQI7CO`@ZY9F^z?q4R4mB<&(~pN!vcj@0FLfA7lrO#y*Dp)&OQjJJkEfmwj6fXNyn$_b( z2-NYEqF5Gd+*gNHlG$scS6Kdv0Mp7+MjTwiKR1(9f3g&(g^9VyHi;96_p*)wh(TE~ z;&sf>N!AZGGAFqT4F;xlZ7tv0UO;;@IGV#NfSIia^_)iw?Eh&uSS@^=d1 zpg{>qqdocMA+E!18~;iM!JA+#y{O@;zK+0wc~F+K!!0X|v=e=AkD~KJETU4Cgp6+e zTq=qUHro0R61y@K2AoH2 z(;l+NQ+%g03<~2xtYSC$l-H#1>=54PQ7ATOpTE@yb&aYu>HR9dxT~>fpV8dOfc$X8 zaw`C5*N=gA)Z~cro&6f$PsO)c_JY$k5NfE2r<`|Fo15-!;*%GC8dZ|_mo)+=tC3eJ zJ^-mGv&#+E*uyR4>`=>?9uD};p+|Ihl(8%qH+0Tx3%PU3k&F`BrwrO!3HK?8UC71b z&o}g*C=+pdAilGHq;#IW!Suj2aad~cTIt$SAM~v#pWOfVwv$0AwS}lMWSHDP1qcf; z%Ln46LPK&hUOq&VR`S%_aT7Qzj2H?7_N`$<@clW3_ZaCv7zo(+_Q%YXT<^1s4|MKN z>cuieArUf3OP@nmJx=~&?Bdv3$quK?ZyX_bf`wKk{(2`d$}y-S{rI1(&5YR&#iaQ2 zeXt#UZ_MQXP`!&OxB0 zkx_}EutUQ@@(@px*AB)m1}kbb5rYCk@k|v>g2m!APw$~Fn&$G3@nRrtWGx^_)h}C* zH)A$n!X1`rRI{Ckt7#As9cxg2fkkgER$_$H>FrL|lgs}zFyN`uDn0nnnHx%#Z7enu zXME>$Mq=R>);?CE*_%JV(NpFsVPnHg_`Y*EaT{U@g{s z_%JicW{AIlGs_w+-d|0RoXjp%23sp`izKZUP!NgSYWuZ%QsB^f6!vy*0=PY>_|Y)D zwl^5iX2;Oe`3iz&L?#XA>K^=Q)o<2nzD%#U?D(m+6!&C}n%jDoE#6TxcwB8WZ;}83G3>Gb3n$@eU8)+F z&w?nu2PkfUo9D{&>pYWIX4!G4&}X?>GOdFiB>I-uypW3EQo^(ZGR;>__cOMozLGg} zVKFZ;f->Px&u6-Iu`}e*Ew~qxQ9jpB=pn3=F`orjMu+>(&@5mRizjWh3sb9}YUJ5x zo!#xNH?vfw_lm13{k?Fo>B&R5%ty&}{EEm&pdRv2>;>x4LydJPbKqjI-fgv#`aQT5 zq`fn+chN~hR2!_T3f1#^BYGk6{GW7N8c}zBRR5FY`JmI|Qn<|Rti9fv1Wa|)y&bs3 zPhSp~#@4CMu=CJ`g5rEFcmMm;r`UlOID%GMEVi+NTzkEJ>grqj(a5#nwYUV%M{vye zRW-s_=dYh1{^;Mwx;x_o74t(2-4qG)ntgFy3@A41YdvVa37e%h3R{_QfB2kWQB)InXMQKBe)k! zGt9SZN-zQ$G!GZ7Z-r6xe%Q(z6WUm}>(~7A3e3ws)OgP7X8N21;KUEvf5={xkreHq z;1IH`Zasb~JQmkV)lq1QdeE5IF6iTj#CU$$gO$#%D`d7^YOy^HJuI$nD6(RVA5Bu! z*s+n5#`>nWeCx66C{|`K%KyMxbLLk+qqbMohMR5x#y^!-8Cjq)u{cWL7Fgo2{P^g;zc~yXO~qD?ok}5ICvQ z5K1@lw;I<42iOLe9nW$_bL?LcK{yQhn`7)@`qEuy>|o2fVA4)!0=>l1N&(>RGs;&) z{yt8vLWUy}K-hg4jJKklKZ%9cf$lizh-K#p5A>Yv7*Li4mtK_{a!LxCf z&mcEW_UaDgUcLx$Y~xGEe0tofJbMs;{*pSP^zh>1}(+e_f{6acFI`=0|pV^dP)6?3c+A?)`T@(69dl%74z znHUYuDZH@g>6$f;_$SD=QjU$Kc|`hL+3Ogf>#F+pGT;@z=>J?~U;oQy6v)d8H8RlJ zHrJZlUMmXMs1Y`3fz74}Cuzr~NSfJ=Ff#LV7 z@b&(4K6EY5Xjbs4dZ=?3NtS9A{Odd-Kwqkq> zNZwbmy4G43FSmx84Bx@V@8wj*1u*Y3cpDp1c|q^*&lgwWHx{48HaBSRs5JL%raOtf z0rY)tpq277D-$8swIf5>JS>DysKYp7iw!9%uFkKsyk4s$`1n4er zf;vyw{anA-%7nE`q&}&waSgWS1^$=vX&4PUy^5r-!$5z{GRwhcqVFk z&w?=r6X5mKrSS~pF|lFEu85zxD}SC8@?fdnc{1ViMUD^gxts0twY|qeAE`Zm%31Hm zR;wV+mFr1w>wFdS_^Erwt;t|-ZY|4|ir2cg)p9lv4MaIW5kBeF=#3<8<#1~Fiz#rq z!;OTE6d6u5Ws)%Rzh{j$e5Q|*b~rki{)#Ah4GK!^i;X62g>$OcpE6C%1vFe{#g+K? zog?+kZ~N0wn3&n>`elNOu)+SXkqHhah1B^9l`uPLvur%}T@X9Z2|3Dm++Wc>R;?FA z9M+wiFnzkO0^gVnfWva7+-{wyh)(2=OUor$D_ogVcm|>ydJxj8v3iqRIW^R*UFJ0h zt+vHqUjzIk_h0^aP=&1eMpKI+R~+;W4{? zTw@AybFdCy!29mXugjsW~@BPRc7&izaLmO>_oNKg8 zx57d^_BFAnH|OsLURz!tZ(m}siSGY&N{XB6qO${+`{~^qQbpL~$!f-Lib)7QT%NCa zhqGosWvZRf_D-Z|cb`f%yXrT3>eaP4IpmYY!*Fxdz%M)@ciO+Fnchr)XN`Kutm{r4 z-D-b0B6&2I|E~|VuEUS~jyD0fh$~y0TSib^iOY+3pxFBtlRn4t7~$2ob^C!)X`dM3 zP`IIs$1W8$lwQaOc{AsDbn@7%59(x{{y+a1MKvCjHB+&xLeV$EP#Cv#f|-Tb{u{FH zbk2Ds$T#(HB<2a{&lc$0do#bry1Ai$>asYlv`7U%)>8?lrk+XVw(Ck83euqd5N=SU z51Y{(XBl4F5XA6_o#)rO>lN?Y^G+Egs*1i;7|e=Iiwb;2R(8xS2q&NFHxs*9*eGLk zf|0Ck7#z>)D^EBy72y0h;?jzj9kxxHSMCkVy!8E&-Cym+qjFtW1wiSXdL1kXWKYHd z`jn1x3Ar0*{k)eU-xADsrMu!Vg^EhgL{4ml-I<v#t>ueo!LI61$I@g3Salae{U&{SK|SG`=U<`(e6q1K72 zkeSHwFH^^T5wXkr%f_ToQQS(h_RF@9=^Ajra(;1#E8nNL#?8nMkcb3i8%%y1Gz%1r zmW0~G-segEY_M;bm_9Z5{qkb{?p6q8%7WgA;5r_*xazV7_swpyzM;-3G-=tIk-Wp~UGYNBS_30?&oN8MB@~cptuv6nI;Y!Maat)tc^j6I5TKHsiRZf}S+nRco%(uxP7hk`*sO!m0 z2SP~RpW`T6F`1`-GHFJWm{ntq_4)cVQWUpZFu+c$9rd-%vdC#n%e9@A9k6v@>xXe> z6ZdPb7rGoK_^0Yj?}#)#>!11UpR z`PajHb8$a=?TLTmC1|R4y8*H7C2$6q} zQ-9TK8GtZ`_{{HZ2=84ZPr$R>LcMZAXln?OHTV5-w2B_JYVW22-bjKTxy*VZ_oO^mkFebGSvSxC_2o#irRu6UN+aBp4DFeALk7v zof8~xFIYzpJ&Ti@N)K1cMb9h>p^a==hq?2%Cc$YsY2zd1k7baHwtFy*5{v5K&1yE& z$FOFd!EZLnbXIpFG#+K3sQw2MF#xCLqp|&?$T`RM*FRr3d>WQ|S!HjQcOGP{IGuGA zNyQ3$U)`POe%#NHy9#5C%y%{?J;A$LgkRQ(?Bc8naj(X$6b?0T>L{>XI-;yI_{!mF zub_pzt4AupA7+n-b%o)6s-%#Pl|0f+Kto8pT!wIVXGEl0o4u6vi6uD($}4U*UM)z%EC-DDBsn$lezBjC7~n zQ7@2POIB_yG(u!)yb*w^5;Hg+_!Zh*6bzA;if9Nbf{O$2QBH~K(%cpV%yz833}h}% zhL4#T4-X0O4rp{~F&`ExbHhZNT?XH+rf;T0Pl}t-WL;Cb=RtUvDR)UFXJc$51DX{A3OfZwG94?81qn zPub_$9q7yYc1@o&FCV5GcQ6s*Jw^9P;S3bkdNXdn-Yb>beuZ<# zL^u>5C4pgtvM)nWq_sk2%>0@wwy}et5*E)$2R+yvs^+vO`znQi1Ru%garp&EcJed? zX@RyGXr{ z`xv@U7?7%+6y>2J81F`B+H`$Wf%KG*LKj>eNl$us5@!SURGi;hd}C|Tih`h={bosO zx0lV123AadBshXD%p%5@fgd zwU9Brrly59(R>(m{*O)Rt0#5wE$RGP0}7lvhbd`L9LbJaGh!5QYKvq8wNJ6}2-X0> zukJkv z(P);!HIDXKoEA(LFwq6Y534w-Z2dQS+GCf&u459?r$Rz2{6pV^J(kE1 z*kr-P*4+DaI9A;B`pR{s&eF*rBj-q^(e)KKFW;~T$0xflsbn3{3hi9^CPkI{A(?ZLju&bVAq z!!$NnhNC}Y;-y0#c#q;%iiZv==5|)o%jL9ny@&$=%U>;Bl@zOeDX)LxPL@rY!;14i zGP2!);zvhU$ zPTE-ob&{tiUL~eKTy9*S%wpC-Cmj|x;(Qi!tw6f`&Dba4N#pqs^AAU3Dk8o`0}X5k zy)S6JIYj#7fP*dTfNHbp;}+a8q;&Es(B34`VA22m4Cu&HT57il_We5D6+-US9+s8? zT0@d-R0cNv5lWZ>X-E+ip!2TQhb}1XZS>+G4-kP$`#rR5IMPCvq@q!*WqvyxfJi6A zUBI~5P-f=9C7|>J%HQ~d0SahNe54t$EFH43BnH|tFI_7jPlSpHJD!9NNpp3B7OHLdKSZho?mPvQ%t3!1r^&q+nJObES z@Zztzir^V>m?eG7Epgt$#uGb)i!{=Er4qWSK?jz;t?8abP4Cw}L)RoflgV(n$p{C8 zN*{xPC-Z65FVb-S3}JOSmE>Wa$XXup61S%(p&TkwJ(zet=t1Gq15J#ivd}mvD1+fU zK#}QWWm-*c(`-4p@Jopw26tFIdmnQ$kzeW09vTPz0i!%)Xa!6k&jGn91C$_2=-g(v znTE}zgd|6amS|AyR(f;| z@D?nm5oyK9u*GeElHaNOc`DBNHwh&_x2qxa#nDj-F?f)Q>zFSU??>^$ktHC1T4K}O zoHJ1QbC~=YS6ahe{GPIZthI*(H!!hXu1jMXdZwhNdl^Zd2%qImbRF)E>B4Qmbp{5R zw}nOf=L0anQK3Wjf4#XQN;K`K$j2F5?Hi1udG;3SNiHJ8&s#~l0QntK@GBc3M38?h zu_1{Rzoj%uGo*E!nhp*HtfB9Malhspvhj!+-Ht$vZXnF6;kMmph{UY(JP+(Es2!9g zYhH{y$jS|+w$j{o;X+SeoC)Ottw{jdwFdfCnl%A^-v|=t2nUx1zF7v=ReiFjIV;ik z>z8?+>qYMSlw0m=u~@XRSM5Yxm8X04y!4CD3t1-)DSUhIa9nO-YpB97nK#(pf8UzN zy|{Bn#0l#FfKfK8@Bd$q&c8PFBWbMqI(Ruk*20`=JnoKxKIoddc2aodrK=8;x(XZU z;1=Q1xvk)G*ba3gN}#A8&F$~50ba+@6N;WO9)Hvs7z#R~JiN-Q#?d0KYl~i>Cuoh; zZ-vE0;YsPje;S5oDqFiwo&2UFNw9>?A*xZ5qcU0TF!Os&~)=wJNxf{^Fkm zcf_0%(p6)Uz{?{(dF{h2J$ebzW2Z(sNd*IkGEEgf-7S=cWcB_;Dj8k)xAnR^Aa`~d zCkAPydXXwDJGItg4e6jTlyL*)^Jsx6tt>`)u5p-<2im2qv7TG)u{32Ni2vv+V||S* z1btF?8QhDA-rF&-hT^2ilXhuba<=u=#^8)_a2Xh3COW9aE$|iAYi*%v14w{6zqPAE z+%C7Z1m&KtU>!tPf8W~ma}cy3pEToQL!Oc28&?jw&m6`tH(=J#qzMKp8bxpBX~t-{ z(0#})*by6D`N2WR%LAQe*6ndJ#Q~1nPO;HyhbP-Ptgl*3qlC|c(S)M;uAQzZ^;B5n zfN->@y?&j$I{0(UKr4dXyZaRy_HN!PD+9+aY2j#HDg_}<1p;{pt!dCJH(_BoyTps_ z_2a5T|877-nsJ-f$Jo%NiF`W=VD+PUqi07<|FXgpo6iYAnggkk4!t!ZRI_#Ai~l~g zgoxVfp9s}Zz*aI(X&S9rqt(3h7JWdnO%-2O%wkG&#MLfbL+2d(ME;)JVx?0UgE>^z zvbk?c6xn+`(652Mg-Xn@oVY|wiDP?L^6*fT=FxXdWqsBfh)NBO7_1Wl`jC5)Mb~Cg zRu`{zg6SwU^=wMkOJo;iMgB8k$L$Y~JQBuVvb%nfw$a&?0p21|#d`1IGX8xv;osLN zz}X z29}+<2xZVzDWfPAZ0AsVE;*lS!h*F)GsMb`;X85E+eMv!K)pEc65Ixiay@6yi<4&Su)?PO}SJ`Y*m-^Ci8x%zIZ6lRgXu7hBYf0Unv>nY{r17$yD!y4|5B5D zKJy9eXaX0taIrcm?^bxy=4!P{dgbS9OntU=Q=0K4SU@5d!B)$N|5yNcYY6gruHI?k zx_d;$l03C#7EphqLk*H0D0Uai>YHK-?TYg)|NSoRH)-)E9n@zKU0fzGA12^%d&EJh zY3}Q&PC)&A4f(Yrs<6tY>L6nbw=&*APLj*1n9sRPG*7|nNZe{XSF^d#KTscrtCLBa z$*nOHJ<{>dwO#{|gJg BDzpFq literal 0 HcmV?d00001