From ca5db4b0ed0cf4178c1197e5a92c8f5ecf53923c Mon Sep 17 00:00:00 2001 From: Shane <6071159+smashedr@users.noreply.github.com> Date: Fri, 3 May 2024 21:36:38 -0700 Subject: [PATCH] Adding to GitHub --- .github/workflows/build.yaml | 56 +++++++++++++++++++++ .gitignore | 5 ++ .prettierrc.json | 20 ++++++++ README.md | 31 ++++++++++++ _config.yml | 17 +++++++ _layouts/default.html | 95 +++++++++++++++++++++++++++++++++++ apple-touch-icon.png | Bin 0 -> 3953 bytes css/main.css | 0 css/screenshots.css | 68 +++++++++++++++++++++++++ css/uninstall.css | 35 +++++++++++++ docs.html | 70 ++++++++++++++++++++++++++ favicon.ico | Bin 0 -> 22382 bytes genshots.js | 19 +++++++ index.html | 86 +++++++++++++++++++++++++++++++ js/main.js | 11 ++++ js/screenshots.js | 49 ++++++++++++++++++ js/theme.js | 80 +++++++++++++++++++++++++++++ js/uninstall.js | 78 ++++++++++++++++++++++++++++ js/vars.js | 5 ++ media/logo.png | Bin 0 -> 2188 bytes media/loop1.webm | Bin 0 -> 213594 bytes screenshots.html | 52 +++++++++++++++++++ screenshots/01.jpg | Bin 0 -> 130533 bytes screenshots/02.jpg | Bin 0 -> 149603 bytes screenshots/03.jpg | Bin 0 -> 329017 bytes uninstall.html | 59 ++++++++++++++++++++++ 26 files changed, 836 insertions(+) create mode 100644 .github/workflows/build.yaml create mode 100644 .gitignore create mode 100644 .prettierrc.json create mode 100644 README.md create mode 100644 _config.yml create mode 100644 _layouts/default.html create mode 100644 apple-touch-icon.png create mode 100644 css/main.css create mode 100644 css/screenshots.css create mode 100644 css/uninstall.css create mode 100644 docs.html create mode 100644 favicon.ico create mode 100644 genshots.js create mode 100644 index.html create mode 100644 js/main.js create mode 100644 js/screenshots.js create mode 100644 js/theme.js create mode 100644 js/uninstall.js create mode 100644 js/vars.js create mode 100644 media/logo.png create mode 100644 media/loop1.webm create mode 100644 screenshots.html create mode 100644 screenshots/01.jpg create mode 100644 screenshots/02.jpg create mode 100644 screenshots/03.jpg create mode 100644 uninstall.html diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml new file mode 100644 index 0000000..23255a8 --- /dev/null +++ b/.github/workflows/build.yaml @@ -0,0 +1,56 @@ +name: 'GitHub Pages' + +on: + push: + branches: ['master'] + repository_dispatch: + types: + - webhook + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: 'pages' + cancel-in-progress: false + +jobs: + build: + name: 'Build' + runs-on: ubuntu-latest + timeout-minutes: 5 + + steps: + - name: 'Checkout' + uses: actions/checkout@v3 + + - name: 'Configure Pages' + uses: actions/configure-pages@v3 + + - name: 'Jekyll Build Pages' + uses: actions/jekyll-build-pages@v1 + + - name: 'Upload Pages Artifact' + uses: actions/upload-pages-artifact@v2 + with: + path: _site/ + + deploy: + name: 'Deploy' + runs-on: ubuntu-latest + timeout-minutes: 5 + needs: build + + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + + steps: + - name: 'Deploy Pages' + id: deployment + uses: actions/deploy-pages@v2 + with: + artifact_name: github-pages diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..007cec2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.idea/ +*.iml +.vscode/ +.jekyll-cache/ +_site/ diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..8d7724b --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,20 @@ +{ + "trailingComma": "es5", + "tabWidth": 4, + "semi": false, + "singleQuote": true, + "overrides": [ + { + "files": ["**/*.html"], + "options": { + "singleQuote": false + } + }, + { + "files": ["**/*.json", "**/*.yaml"], + "options": { + "tabWidth": 2 + } + } + ] +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..fd45208 --- /dev/null +++ b/README.md @@ -0,0 +1,31 @@ +[![Chrome Web Store Users](https://img.shields.io/chrome-web-store/users/efahmjakjnnmleokcaomicgfhobabdkc?logo=google&logoColor=white&label=google%20users)](https://chrome.google.com/webstore/detail/open-links-in-new-tab/efahmjakjnnmleokcaomicgfhobabdkc) +[![Mozilla Add-on Users](https://img.shields.io/amo/users/open-links-in-new-tab?logo=mozilla&label=mozilla%20users)](https://addons.mozilla.org/addon/open-links-in-new-tab) +[![Chrome Web Store Version](https://img.shields.io/chrome-web-store/v/efahmjakjnnmleokcaomicgfhobabdkc?label=chrome&logo=googlechrome)](https://chrome.google.com/webstore/detail/open-links-in-new-tab/efahmjakjnnmleokcaomicgfhobabdkc) +[![Mozilla Add-on Version](https://img.shields.io/amo/v/open-links-in-new-tab?label=firefox&logo=firefox)](https://addons.mozilla.org/addon/open-links-in-new-tab) +[![GitHub Release Version](https://img.shields.io/github/v/release/cssnr/open-links-in-new-tab?logo=github)](https://github.com/cssnr/open-links-in-new-tab/releases/latest) +[![Manifest Version](https://img.shields.io/github/manifest-json/v/cssnr/open-links-in-new-tab?filename=manifest.json&logo=json&label=manifest)](https://github.com/cssnr/open-links-in-new-tab/blob/master/manifest.json) +# Open Links in New Tab Site + +* Website: https://open-links-in-new-tab.cssnr.com +* Github: https://github.com/cssnr/open-links-in-new-tab + +# Install + +* [Google Chrome Web Store](https://chrome.google.com/webstore/detail/open-links-in-new-tab/efahmjakjnnmleokcaomicgfhobabdkc) +* [Mozilla Firefox Add-ons](https://addons.mozilla.org/addon/open-links-in-new-tab) + + + + + + + + + + + + + + +All **Chromium** Based Browsers can install the extension from the +[Chrome Web Store](https://chrome.google.com/webstore/detail/open-links-in-new-tab/efahmjakjnnmleokcaomicgfhobabdkc). diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..02a598c --- /dev/null +++ b/_config.yml @@ -0,0 +1,17 @@ +timezone: America/Los_Angeles +encoding: utf-8 + +author: Shane +site_name: Open Links in New Tab +site_url: https://open-links-in-new-tab.cssnr.com + +github_name: cssnr/open-links-in-new-tab +github_url: https://github.com/cssnr/open-links-in-new-tab + +chrome_id: efahmjakjnnmleokcaomicgfhobabdkc +chrome_url: https://chromewebstore.google.com/detail/open-links-in-new-tab/efahmjakjnnmleokcaomicgfhobabdkc + +firefox_id: open-links-in-new-tab +firefox_url: https://addons.mozilla.org/addon/open-links-in-new-tab + +discord_webhook: https://discord.com/api/webhooks/242137648028712961/4xM7SXClH_i8we_epG6AXMaqhueg5L5oAVf1dnLw1_el05OxZ-JVfph-QrcQwPkOMJem diff --git a/_layouts/default.html b/_layouts/default.html new file mode 100644 index 0000000..67e357e --- /dev/null +++ b/_layouts/default.html @@ -0,0 +1,95 @@ + + +
+ + + +W zCoS+_Hdq?@GetT3m}evp#5u(6YX#>T8V12TiIJz=7$wuPNMG1{Cl67%n-AnYMV2)m zm&=wTx<8R8tcY(U>q4Of8!N~C>K|aZ48LE5t&~Z^N1=GZLsXono37`#_0Zi4*>at3 z;KGi;DKzIMh*GAf^BHkecFdRVV?iv0j1VnU7;6qv=DS=0CGx+F)Qp;A9ZqYt z6`*KPH=1|#$8m{5HGemd<;SCDr2)%n=1SZ&{a+7+7e`HZ=Q;c) `jtfjV zdH5%IU$=Auc1EziQcpkcWbOJy{CZA8RR 7Zv^O9`;djQ8Rsz);UY~Sp4+>?QGa`PE zUcSlOzHgJ0c4|l$E+tS4Tslyr1iRelbT{xaNMcc^uL&@M3}uk>UFXJ|Qk9S_pGdpz zCGk8QR)sIm$;nvl_czyk >u SazQxv2?u@ zxCPtHyh_@NS@Y$;&F@iQn9DSQwd4~IW({P~^NvYVSa55};PWu{z{HO7cM)1}(D)2H z 2+KnZD2VYcQ`@Nd)?3!nYIHf(~kr9^PQu^3(E z!wzG8e?{Npm|RS12MXif{s(i7ig`5hAz3DOaL}{$*Xy0YpU;Lawx!~=_uf+~U@*_v zOdCDBAg2aj5m^nUx)v?vzd7w{%I4z}P-Uo3V?X(TH~`hf`sr^UmJK|cZO&Y6i6r$* zNKM( DnoOQseaPX%TeSc4W1*cyRKc3nA^S zTjvPrEjY+Coptq*70(NfCMG5z4*a+{DkwrhfS1ygz|ZlM=B_U_epHLlJSVPAk 3cY=OplteOb@xSpK>YI7w#K|GDt1lGacXJ8K$!$1^w^5fz1WqkDQJ()qdSNBStJL zR0~wM-6+}trD$Eq!ZXaC-dSoLVbTYAt!q-$=D#;UY{4vg({5k?+S5dWapv^rUwm2X zFSC`^?#VYw+Nzk}!>k;4he&@Jrp{^3-uBT@e;TQVw!T8*8t*TH=F}@KRJIf1xH U6-UtCs|^M)Ny7@Mw@#lu zxHy2qD)&qPRovpiDeiJ~jXddOB`g(HB!+jpx-IqA=oSoa?rfunPL54W|4 0})}skgIm*wf1;Q5y`vcDBq*c?#k` zoUK4!zthR#Jr8O7^17v{Hd^2UU6;(Ra$4!+=JjzJ_mN62GGjW~NiRQbb?cHv@9% 5{zc2MXW!6&wp`V98HuYHH0nLSP1i7{85i~#?J2k^B8S=wRA(6s8`%k2g zE}*|%B4o@~4PZ|Jmi QgeLD!h8R^OG|sQ6r-Nda_a*kF}ai&_xKLK?>0U%P)WiK_v= >Az(pH42aGWN2D{Ljqp zMq7&zxAb=Qh_ep^mk#-u(dXy) %%!M3>9{ zZ_ctel6ZS(7@AVMHvYceuvkCrQv5+$*o}mImeq@T5@hA4Exd(ebH9h}bk;avX`48% zL!GSq51Q_n8iA-iEhCc$$eQ)4-J5qXSCH#&>wp9)OEkvVXkiH_Hy&CG_b;dt&R>$2 z1-qkiJ$MUM%=W`dRG(GwJ_C0otKaXuco44uE;6&X*6D8BoBa5&l44Y66~gS4hdDxN zPM&ELC;PcsZ%Thf0jD9dzv|feuVs=;S%$*~&xgi9b#Okvv(RqWxnc$3-)Yzh*|` zgdC+aV9)t&Q7!>L
P<#SXWq77jX5ZIEw0F 6C;u9XI3@}E HIeL+txqS2g$kI4iuJGw#)@bJNif{aPAuwfnqdAn_-0SaVf8~w zUlJ#p%<5d#Z-JkbgXV{8Whfm2BC!zmsbwCA#_Xr-SsQL2a!W~RGqIuj6>2}hrVCNy z_b0k!bNaZ|kNZT4`}2!~B4bGVN9rpGSp%6dIrM~tEq)I8WP4btz^;ySu5Z_%c{MDn zMAUNszAmY4m$ND5Q)S*%?upmn%Yj{S(O}OZL}iss&@{y=WdqPkQULSEly;0!kYaR; zUpEk!7i&XMa^-fjIuhLYIoGwiMZeCK$_DtcC{}G~#=^u|5uJHg>c6a QB)HRvL#K^+18usAje*pOfTQUFu literal 0 HcmV?d00001 diff --git a/css/main.css b/css/main.css new file mode 100644 index 0000000..e69de29 diff --git a/css/screenshots.css b/css/screenshots.css new file mode 100644 index 0000000..8a3f0e7 --- /dev/null +++ b/css/screenshots.css @@ -0,0 +1,68 @@ +html, +body { + font-family: + Helvetica Neue, + Helvetica, + Arial, + sans-serif; + font-size: 14px; + margin: 0; + padding: 0; + position: relative; + height: 100%; + background: #111; + color: #111; +} +body { + background: #343432; + font-family: + Helvetica Neue, + Helvetica, + Arial, + sans-serif; + font-size: 14px; + color: #111; + margin: 0; + padding: 0; +} +.swiper { + width: 100%; + height: 300px; + margin-left: auto; + margin-right: auto; +} +.swiper-slide { + text-align: center; + font-size: 18px; + display: flex; + justify-content: center; + align-items: center; + background-size: cover; + background: #343432 center; +} +.swiper-slide img { + display: block; + max-width: 100%; + max-height: 100%; + object-fit: cover; +} +.mySwiper2 { + height: 80%; + width: 100%; +} +.mySwiper { + height: 20%; + box-sizing: border-box; + padding: 8px 0; +} +.mySwiper .swiper-slide { + width: 25%; + height: 100%; + opacity: 0.4; +} +.mySwiper .swiper-slide-thumb-active { + opacity: 1; +} +.swiper-pagination { + color: white; +} diff --git a/css/uninstall.css b/css/uninstall.css new file mode 100644 index 0000000..4aa6ec6 --- /dev/null +++ b/css/uninstall.css @@ -0,0 +1,35 @@ +body { + margin: 0; + /*background: #011467;*/ +} + +video { + position: fixed; + top: 50%; + left: 50%; + min-width: 100%; + min-height: 100%; + width: auto; + height: auto; + z-index: -100; + transform: translateX(-50%) translateY(-50%); + filter: blur(10px); + /*background: url('/media/loop1.jpg') no-repeat;*/ + background-size: cover; + transition: 1s opacity; +} + +#login-outer { + border-radius: 15px; + background: rgba(0 0 0 / 30%); + filter: drop-shadow(15px 15px 12px #000000); +} + +.form-control { + background: rgba(0 0 0 / 30%); +} + +#inputCounter { + margin-top: -25px; + margin-right: 15px; +} diff --git a/docs.html b/docs.html new file mode 100644 index 0000000..9241718 --- /dev/null +++ b/docs.html @@ -0,0 +1,70 @@ +--- +layout: default +permalink: /docs/ +title: Docs +description: Documentation and Instructions for configuring and using Open Links in New Tab Extension. +--- + + {{ page.title }}
+ + + +Please view the README.md for more information.
+ +Configure
+
+ +You can access {{ site.site_name }} through the Icon on the Extension Toolbar or Right Click Context Menu.
+You can pin the Addon by locating the {{ site.site_name }} Extension icon on the Extension Toolbar, then;
++
+ +- Firefox, click the Settings Wheel and Pin to Toolbar.
+- Chrome, click the Pin icon.
+Usage
+
+ +Coming Soon...
+{% comment %}Activate 1 of 3 ways:
{% endcomment %} +{% comment %}{% endcomment %} + {% comment %}
{% endcomment %} +{% comment %}{% endcomment %} +{% comment %}- Toolbar Icon Popup
{% endcomment %} + {% comment %}- Right Click Context Menu
{% endcomment %} + {% comment %}- Keyboard Shortcuts for Extract/Popup
{% endcomment %} +{% comment %}Extract all links, just domains, use a quick filter, or a saved filter.
{% endcomment %} +{% comment %}Tip: You may also select text with your mouse, and right click to extract links from the selection.
{% endcomment %} + +Options
+
+ +Keyboard Shortcuts
+These can be configured on your browser's extension management page and varies by browser.
+ +Coming Soon...
+ +{% comment %}Regex Flags
{% endcomment %} +{% comment %}{% endcomment %} + {% comment %}This is the default flags used when filtering links via quick filter or a saved filter.{% endcomment %} + {% comment %}For more information{% endcomment %} + {% comment %}read this document.{% endcomment %} +{% comment %}
{% endcomment %} +{% comment %}{% endcomment %} +{% comment %}Filters
{% endcomment %} +{% comment %}{% endcomment %} + {% comment %}Add as many saved filters as you need.{% endcomment %} + {% comment %}They will show up on the Popup Filter Dropdown, and on the Right Click Context Menu.{% endcomment %} +{% comment %}
{% endcomment %} +{% comment %}{% endcomment %} +{% comment %}Enable Right Click Menu
{% endcomment %} +{% comment %}Enable or Disable Right Click Context Menu.
{% endcomment %} +{% comment %}{% endcomment %} +{% comment %}Use Default Link Filtering
{% endcomment %} +{% comment %}{% endcomment %} + {% comment %}Filter out any links that do not contain ://.{% endcomment %} + {% comment %}Turn this off this to include links such as
{% endcomment %} +{% comment %}{% endcomment %} +{% comment %}magnet:
andmailto:
etc.{% endcomment %} +{% comment %}Show Release Notes on Update
{% endcomment %} +{% comment %}Open the Release Notes after a new update has been installed.
{% endcomment %} diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..158a224edb9c1ef78bd11606f40f0a9fc635429d GIT binary patch literal 22382 zcmeI4UyNK;9mmfwrJHmMEk2-xLRa}$Vl=TWBqYR^1`II@S_l#obb~FzO#e`#*+Qc` zEf^_kqK_t8eKOUA3f36$X)BP@2@A&H7?T@BC zEB&uC_z&RE*hJn(1!Dhzy?xE;9{fZbJ!r3V{g)X)fBJdfk6a=8t1*rBZl4FeQ~Dpt z|A 7+A%UIz1zlT&ed1F%5?Vp&(@95sJFL%hv z+O_54p^OdKtN4=8w6m&bsiSW6e_QYNy7)tmm{hg?*q!}p{Jwf@3S)J78=O?#?9a2u zk+)uN+UN9+eJo?{6k<}<`lt1s?V-Q-Q<*rRZ=r2rWA=QT_FF>Om*@Ig_ny5E^2Vf8 z-d^kf!Nxyd-v-HYra=GlHo&(4K8M@iW~SXW&%*l{-N{q6{`iM}p1!XCeqy<{fR4T$ zc=^2!<-Uhit-q0MjB)hy#Q3Oe5bNK5`Ks2Rc9-s{Zyb9YRINYuW?W}{Cr+9BjB^}} zLjSd7gHh?fR%|dz{V$XaXlIQ1%nJZ>KjuF%bAVCnKS~>*AG&j11IoIKxj#U!Fjqo` zUg<*U5AUk`M05}9%qO(gYTAzpj|p?a-O~M1XM;KAD~f{)rGJ$+2;Xe+?=$T)3x81? z2z$ckWrI^{3s<^!VU({|x{&%;WrJDivs(AO?}6{g1`YGwB=5NBUzH6`w*8)`yI*TI z?X!x34Xz!Glm5fmU|zo8B;S5ovE5sD*50fQnST-Ez0!q_|EwJ4`ow=q@1F>rdn;jo zA*JK4Kei}mgH*@-J(dvv)%w3^9Lf51(CbmzpgRBWaBV2euVN|V6nj=Nb{mBas?nc4 z#RuHED%SPPIby+HCHoYNRm{)&rEVL{tDV!{ k9Z!~rqG_>R5k=Y3x{TKyk)W9c#Rdau9+$iVz67Ubtl-WfL!BMuBGNZ2RL zY5n-l7}vj_@AP}PkMTcpVe6*7RlNQol(Tj3a@e5%JS?kwI;Slj-+S})I>hLY?(}De zwO(l2ACEwP<{`vD@jT4Odv-oQobK2rMt{N){o#MWUN2g-Z(lAp`prY(%^KFP XrBl>$i z<2L}YeO@*nIxMM<=T)aapYQs>90L%4^n0w|(>3hyHW) zOUFOPzTo2=^ >-9T9N1$}#Lj f7UdhaBUaur+N2 z&{xo3GG@?z%i)yjxx>t9Ul5=1J!;%jw*O_UV7}nb%?$p#JI)`>CibMwV&AopLf=Eb zGYs%K?Uu7RYeo09;Gc<%{}&dpy^_;zlU;VSuE`szX3sln0-ay<_nmZC^1PeY#Bj;% zTC9sM4@J$qE5BlPC3I^-Hzjl`q4k8;R?PfjeTAjBb#&f(x(llQVXLDpv&qo~Gv(-_ zsh{7f_vcM*VUy^RI+7_-OaoPgj;aDrTM1oA=ps~l%XU*-s{*LRa#Uh@8t#+#HK@we zC>N-nxqIbxRAuYD*Xa`SNMg?iN_nXAN~8S5|B09pb_?zQ6R}x0 i2%m^7p#)yJYkZ GI^M+VFgRrE;{9BPKkM}M zLY8}oy{!K5ztQntoiqN<$JBc9&i>|f!hab1V^jJu;x*uS@~qP{qp&}`54zt`?@??# zDBRHg_QAVs^0MOp?3r7BzaJa_-SOw!=^oYjcY!wb2VqC946HN1=JxzgD9^G()6SdS zIri#q|M~In^F64#LVJe3By`K*^U{9bCwwje*M8lTwbfw!ZxBE9E|vlN2N|H*Yu;s3 zEPrB+Jq+~qdKb%( *KK}Ig#f#$e zl)yY7jn$^zAHkpTJAaRY7)1UMPsK5r^7S(CtpHs+^+%?V_YLK_MX_EN560^h2X*~~ z>(_i7b^Btw>Ot>NS0~Nq->~ *zCB#6GJh^87s^BV-uM|&&p-Id$2qoL?eEpHbn_>U{QsKzq{{wH$nwg&epmeO zY4Z>5yJ=}-=lYcI<{xawK3>z_tnw#?Jlo?3?0-VIOz`^qIJ{WzelFz6yZTvY{83A= zAvV2V@Z)qEcOeFeKR>Rf@kjh0Ymc?>CNdC1oj{J)#OvdtUiR$YU
KUb?<~uCxNBte{Jkv5Q-q-3a9k@X&F;a1_7PgzQxNK1u*>yU zz~Zg-*5Vdnqp(g;er `KAMejKgKf5ixEYRYluCd5a>^8M|n5qL^vu4?y9__dcJS!{u9Cng==!~AwAovyqpPnN!OfNpgo52v>(a_o$}} { + files.push(file) +}) +console.log(files) + +const file = fs.createWriteStream('./js/vars.js') +file.on('error', function (err) { + console.error('err', err) +}) +file.write('const screenShots = [\n') +files.forEach(function (x) { + file.write(` '${x}',\n`) +}) +file.write(']\n') +file.end() diff --git a/index.html b/index.html new file mode 100644 index 0000000..2b66d11 --- /dev/null +++ b/index.html @@ -0,0 +1,86 @@ +--- +layout: default +permalink: / +title: Home +description: Modern Chrome Web Extension and Firefox Browser Addon for The Aviation Safety Network to enable dark mode plus add additional features. +--- + + {{ site.site_name }}
+ + + ++ Modern Chrome Web Extension and Firefox Browser Addon for The Aviation Safety Network to enable dark mode plus add additional features. +
+ + + +Features
++
+- Toggle Sites to Always Open Links in New Tabs
+- Temporarily Open All Links in New Tabs for Current Site
+- Update on Scroll Option to Always Update Links
+- Options Page to View and Edit Toggled Sites and More
+- Automatic Dark/Light Mode based on Browser Setting
+- Activate from Icon, Context Menu, or Keyboard Shortcuts
+See more in the Screen Shot Gallery.
+ +Upcoming Features
++
+ +- Enable for Specific URL Only
+- Enable for Matching Regex URL Only
+- Toggle Enable Globally
+- Toggle Blacklist/Whitelist
+Install
++ + Google Chrome Web Store +
+
+ + Mozilla Firefox Add-ons ++ All Chromium Based Browsers can install the extension from the + Chrome Web Store. +
+ +Support
++ Please submit an + Issue + if you find bugs and open a + Feature Request + if you have any ideas, suggestions, or requests. +
+For usage instructions, head over to the documentation.
diff --git a/js/main.js b/js/main.js new file mode 100644 index 0000000..c995bae --- /dev/null +++ b/js/main.js @@ -0,0 +1,11 @@ +// JS Main + +// document.addEventListener('DOMContentLoaded', domContentLoaded) +// +// /** +// * DOMContentLoaded +// * @function domContentLoaded +// */ +// async function domContentLoaded() { +// console.debug('domContentLoaded') +// } diff --git a/js/screenshots.js b/js/screenshots.js new file mode 100644 index 0000000..8aebb8b --- /dev/null +++ b/js/screenshots.js @@ -0,0 +1,49 @@ +// JS for screenshots.html + +const shotsEl = document.getElementById('swiper-shots') +const thumbsEl = document.getElementById('swiper-thumbs') + +for (const shot of screenShots) { + // console.debug('shot', shot) + const div = document.createElement('div') + div.classList.add('swiper-slide') + const img = document.createElement('img') + img.src = shot + img.alt = shot + div.appendChild(img) + shotsEl.appendChild(div) + thumbsEl.appendChild(div.cloneNode(true)) +} + +const swiper = new Swiper('.mySwiper', { + freeMode: true, + grabCursor: true, + loop: true, + mousewheel: true, + slidesPerView: 3, + spaceBetween: 10, + watchSlidesProgress: true, +}) + +new Swiper('.mySwiper2', { + grabCursor: true, + effect: 'fade', + loop: true, + mousewheel: true, + spaceBetween: 10, + zoom: true, + keyboard: { + enabled: true, + }, + navigation: { + nextEl: '.swiper-button-next', + prevEl: '.swiper-button-prev', + }, + pagination: { + el: '.swiper-pagination', + type: 'fraction', + }, + thumbs: { + swiper: swiper, + }, +}) diff --git a/js/theme.js b/js/theme.js new file mode 100644 index 0000000..d79f45e --- /dev/null +++ b/js/theme.js @@ -0,0 +1,80 @@ +/*! + * Color mode toggler for Bootstrap's docs (https://getbootstrap.com/) + * Copyright 2011-2023 The Bootstrap Authors + * Licensed under the Creative Commons Attribution 3.0 Unported License. + */ + +(() => { + 'use strict' + + const getStoredTheme = () => localStorage.getItem('theme') + const setStoredTheme = theme => localStorage.setItem('theme', theme) + + const getPreferredTheme = () => { + const storedTheme = getStoredTheme() + if (storedTheme) { + return storedTheme + } + + return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' + } + + const setTheme = theme => { + if (theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches) { + document.documentElement.setAttribute('data-bs-theme', 'dark') + } else { + document.documentElement.setAttribute('data-bs-theme', theme) + } + } + + setTheme(getPreferredTheme()) + + const showActiveTheme = (theme, focus = false) => { + const themeSwitcher = document.querySelector('#bd-theme') + + if (!themeSwitcher) { + return + } + + const themeSwitcherText = document.querySelector('#bd-theme-text') + const activeThemeIcon = document.querySelector('.theme-icon-active use') + const btnToActive = document.querySelector(`[data-bs-theme-value="${theme}"]`) + const svgOfActiveBtn = btnToActive.querySelector('svg use').getAttribute('href') + + document.querySelectorAll('[data-bs-theme-value]').forEach(element => { + element.classList.remove('active') + element.setAttribute('aria-pressed', 'false') + }) + + btnToActive.classList.add('active') + btnToActive.setAttribute('aria-pressed', 'true') + activeThemeIcon.setAttribute('href', svgOfActiveBtn) + const themeSwitcherLabel = `${themeSwitcherText.textContent} (${btnToActive.dataset.bsThemeValue})` + themeSwitcher.setAttribute('aria-label', themeSwitcherLabel) + + if (focus) { + themeSwitcher.focus() + } + } + + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => { + const storedTheme = getStoredTheme() + if (storedTheme !== 'light' && storedTheme !== 'dark') { + setTheme(getPreferredTheme()) + } + }) + + window.addEventListener('DOMContentLoaded', () => { + showActiveTheme(getPreferredTheme()) + + document.querySelectorAll('[data-bs-theme-value]') + .forEach(toggle => { + toggle.addEventListener('click', () => { + const theme = toggle.getAttribute('data-bs-theme-value') + setStoredTheme(theme) + setTheme(theme) + showActiveTheme(theme, true) + }) + }) + }) +})() diff --git a/js/uninstall.js b/js/uninstall.js new file mode 100644 index 0000000..77c0fdc --- /dev/null +++ b/js/uninstall.js @@ -0,0 +1,78 @@ +// JS uninstall.html + +const uninstallMessage = 'Uninstall Feedback for Open Links in New Tab Extension.' +const discordUsername = 'Open Links in New Tab' +const discordAvatar = 'https://open-links-in-new-tab.cssnr.com/media/logo.png' + +const uninstallForm = document.getElementById('uninstall-form') +const uninstallResponse = document.getElementById('uninstall-response') +const inputCount = document.getElementById('input-count') +const submitBtn = document.getElementById('submit-btn') +const errorAlert = document.getElementById('error-alert') + +uninstallForm.addEventListener('submit', formSubmit) +uninstallResponse.addEventListener('input', function (e) { + inputCount.textContent = this.value.length +}) + +async function formSubmit(event) { + console.debug('formSubmit:', event, this) + event.preventDefault() + errorAlert.style.display = 'none' + const url = this[0].value + const notUsed = this[1].checked + const notExpected = this[2].checked + const notWorking = this[3].checked + const feedbackText = this[4].value + if (!(notUsed || notExpected || notWorking || feedbackText)) { + return console.warn('No Data to Send.') + } + submitBtn.classList.add('disabled') + const lines = [ + uninstallMessage, + `\`${navigator.userAgent}\``, + `${getBoolIcon(notUsed)} Not Used`, + `${getBoolIcon(notExpected)} Not as Expected`, + `${getBoolIcon(notWorking)} Not Working`, + ] + if (feedbackText) { + lines.push(`\`\`\`\n${feedbackText}\n\`\`\``) + } + // console.debug('lines:', lines) + const response = await sendDiscord(url, lines.join('\n')) + console.debug('response:', response) + submitBtn.classList.remove('disabled') + if (response.status >= 200 && response.status <= 299) { + console.debug('Success') + window.location = '/' + } else { + console.warn(`Error ${response.status}`, response) + errorAlert.textContent = `Error ${response.status}: ${response.statusText}` + errorAlert.style.display = 'block' + } +} + +async function sendDiscord(url, content) { + // console.debug('sendDiscord', url, content) + const body = { + username: discordUsername, + avatar_url: discordAvatar, + content: content, + } + const opts = { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(body), + } + return await fetch(url, opts) +} + +function getBoolIcon(value) { + if (value) { + return '✅' + } else { + return '🔳' + } +} diff --git a/js/vars.js b/js/vars.js new file mode 100644 index 0000000..01d50ea --- /dev/null +++ b/js/vars.js @@ -0,0 +1,5 @@ +const screenShots = [ + '01.jpg', + '02.jpg', + '03.jpg', +] diff --git a/media/logo.png b/media/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..86b6b9259c503991daf12fc8e46010b158b7c6d3 GIT binary patch literal 2188 zcmcJR={pp98^?dM7)#klLYizfNWzF3GMcf5vSuH&j5Q9~vW+!Mgr1qQJCr3$l2XnY z#+I=U(@HW~LgzTf5@GP@Jb%OU;=VuE^6<$^lTT-^{|pJn-Nh;B`nKpcus$4DTvA1lbVd$UZ*u< z-)X&L?cDbLDod?iSa`B!ZyA0mj_@ds@)Bp~vuGb_15||Kp{2m?GgRUVQHu<{{M!LL z*O);dfa_Mf{M!$07#c`4;~+n#)tVljDt(M(1tUX<@nz`~VA+Ma*(jj*4c&61H>rhl1^Ffv$tE yQdf-Q$(`bLOH$W8GWQ$G= l0%4!{K-|JvDrI5 zxviOBN>_8Qs{*%LrzJ7B^oue%((0Xo_g4`%quS~7hWQnpxgux~05IE~+G8&F)(v}8 zRqY(0hNyrF<#X~p@lfWN{Q3)n&*qkd6QJE0lWrxMP#qg05N$A#9M_}R_uR% -fJsF^)B zqZ72GY&nD@PP^lTjdp8kzf2oiL6nko-XDMV!x3BgFb;acT>JL;YLmf-dkDl=C^LIi zQ~dC}9~{R;p4Z} uEPU1Y#i8$W5+Gw<$RdBY5NkG)Hv&KUx891(xd =eyF zc_IXj0#AQI5-k0KFi=<62QLWRM}sgqnNdQhyKk=-tdKG$*aS;>%$UsbshB>jc NB9^Op(4bc-GKjT6vw(`_)ewfbsHuZ~WIKkeha D&?bK z&3tA&sk9N;>945n2rwBXgUXbCAiWtvL{p$Rg|_F~)=~ho@`sL+Duisj%iT$3LzoQW zD{(2ze(I9~Upurkr(}^!kT>0rMGgszfz0UE)kGLhVRB&85JL8OH%i)6R1M2tT_3a@ zmkEcn5cEQ$1-F5&wz=(8f+?6OXc}9fm=j`yh_H}h=YQa(VmVJi#No{Vl6u`k+wRoZ z&OOxB-2|fL@t7O5ur-O(esYyL!@5z*k=jKa1Cye?TG>d@;p);;7gH|onAA)c _Dqu1r3 zi4!Nk`Td=Ci)c+=;KEeehBwcS|2ACo6hr`gu!-+e2Jz>pHB>15g tHVTxmi1Fw4x!|hLfn!m+4iO+*HBp)hYY&oj7g zsZ1p45Al&P2fSU5^;fLdA86f{p MX3Qw8`87!xkHATKm3?LYYPV4Ej7h^M~p&80TkYZ^I^BFiRipFJ#2 z?rzNrV_kA;Hgi=kgp8?L?+v_0h5#yi%ovRc9}h`$zT;qwl1(his`RxSN$TQ5eIQJM zAXIH|tRoJ>=@cIF{T=9P(NMw;fXhjI?u-UQ7E3*e62O4Vu013`)?#fhd+^YO4RmXg jq3nURSUt!8)s|7zzi|U!%b}0=zYJhzWJRdI;F0iO- Zx7(O!rznt7m!_*dm+x*@D495W&Y^_YDwS@D>Oy=pX22VrU~6@@p6b1pTPwX9fcJ zb%6;|A 0cD3t}GOO%)@l>>ACjxdxft$vM`WZEKsJws9MGgB(}2Pu$gi~2Rh zRcib7FaS*8?Cj4E0RZa1fA9Z~>$g|6REsqMNP_$_eo@i}uBNQ)bZnpL7#SGU1pe=_ za9Ak+xcnb4e!I^ `*pVfLH^C5u?PhH zHHX(s?Ww^-pz!~iBUnIBPF_VxwKTwpE=RR35WK%05C8<-j>`suHiYsY+W+y`&=^Q) zl$Ri9@8TqGVqgpc$`0b!_UFlO@CBfqoc{BS+^E~nZ1}$cwn%=6h^&yDu!y2?$p4MT z|GZ#i)E!~;f1>}Ncgg |6ur^$w>b9WXb>U$?Sf`{r@!+``@_$00N;# z7b1j_Lm(huK?n!{`1wl&2=dchVSUD6C&m3J`2k$qclnvy%sZsuSvM)7H#&XeHiFfQ z>`-d>OvY_Rs>ozpDC4cG;AdCdv=^UcYm1z^S~r)k>^-($&1J=ITPMC8jc1EcS<+>t zMis;y@Rj`VfzNZ%hd}Dyn+tfk`OCy}dxwA2ty;ZeyMLXyc#ul_5#g=-GSnG 52%OQaW$%uTqjdlqJQp%tKMJ`-J)0X$5BMf;g994kIsCpCs% z^U{#sR9s%+aoe2n)r1kad{ZrVcz9MxqfVDJOy-9MuV43cMf4>oP02fDM+;*hu)CWC zxf7MN8EgnW{x~*V3jl_# Av&6)ppoH_a|7ek4C+#NSa4r+WzB&J)TOc$pQox zsWm^wV(7fFi0yTh)hIX=w1wQfl$?klAda{Vye$JEj1 EoOUKEiH>Sfq=0o(9LajI8#h$akBqd4g-!|Ua@vzym6p^Z z9x`ngUcN#2c2lRDE6Xpz=AW@oMA7KJtI*DwTkN=lS6^M0TplcX*+y=PD~2JCAXYu$ z$_$-m_6!q JHtN7AU5`e5gFsZr+i_B{hI zl!`VfT@MI#4`KzLJG*ZP0DsKAuM!p_v}Dy5KBMJlAnCvV$S?gFUoUi{XIRst;+U)e zs*9$j(Kut(cmMkv>s!-M 4Ts^&=l`fDA1=A`=?0Bk^~;y z!1#Q|>v6N_BwSd_$cq&sXgtohclKwZ_C@!qS0a &RhrLABF4U58~qW|qwazLmovwxtD`)pU&tXp@|O*J|d$TD%uI zXdCa3jpUQys0Y7-l=$_ gUGjNhm|BC8_Z|jrnUtn?($zF+#jMTO4}!Oc_g#_x z+Ms8=lt?%=B||rIcOm3)&05nn@-6Pki%v_yq%MA60yZ&4QILWbfD?=pqid+DBbu_H zdQz#apA{)HFyxD&04bLsbj9Ol{cKbB@HH^18!n{~+gBaP;ZtA;$BDyrE)p#!XSQ+c zWLIUZfjHNPv1q6QO z5+IlXp~A$OfJWv&?mG`I;9GSo5JLk+xR?DI`bkfjS~*u(=3 _!_CY1s>VTZ?2SnXi-JKag@G!*nLhW6AGJZNmH>W1==)5= zn}VUD&L=p*v{9{mexEYihrBydGcbFf28V`62E}~_hz>m=HJU0FlXA|w#F^+F zXI+dYE%2_wc@q-~x(rf>TrCk^D6x4m{7{VjJFQaev;y6pjV1(&1@UyfJe6W5=XjD) ztQ!1aswt5dE)fHaVdC&qMX=gK)?k>zR8u=G;7BR=?1$$atb1*LgxK)Ta=ywV+0@9r zPJyClof@qfOjTzskO~sp2$L!^&?JYUeV3t*7&vJknwWMARYCD8;2f!1m{`bzad2%R zZ;6s)_#yV4%XTf3FCG t?oq4E9s{5?MhU$_%1Dz&n#Cg#cO_vEWIq9Bi7BorPu)u*r{Dq z86T*dl?xoQ{w!lZQ)t|@W3d0U%ig^wJ-_A+%+akgB9L8qB85uA48TsfzKuO`$Hlnq z2yn%r=vxiGA5}qL1~IctC*ZUVzdP9wB`CtpSBjnFdWQ$;MV~*V`M@-KD0EzcZAPAI z{g%y_4zp?eR68f_No!8(b3Ahl>qblPeS!H4=175gw8t4gOaEyzeL@4Y0 }$5W_RBd|=T%xTadhheb(MH_ zCRBP |-0`HAc3 zZkrJROX>W*CI>9|wkq&&V|kntgU`m+qddo+`7J>BDlftMv(Jf#O2A6!mW3wJ>a{za zjGMC|uJOPT?Apk~s+cnr^Hf2(@w<-V5$km4t- ~w*X@{3D_B@aJGN=oy7&!CID0+%6LgfyjQ1{n_ zIy&Eo<3}nA@6jo3-eoKBwZ2Wh6w}k4c6)!e^~W>01}yI4_EacOlp0($Ohxb4^5(rn z-}SDQA29ZWmuqg= PPkUv-x zSvWPk0zhbgu lcYCmz5GOB zGf89N&24o7g%H+u{I%Zn{IUfi7FyG~&b9?;VNs;cZ6IlBWJ@m{6qNYcaeTRAeeI&B zPP2t_MslX=!a@-xbNMV+35)4Np*P1UhK=ip0?6dOyMK5Wbqj>I(DzVu=t5ProMCy^-R9xHJHM7Z zGVa9hezn2;8tz44LhHJTTmV%9A>$o{VfernoaG69w(pMvE9c~- I+F9RT_)OWoQe96LR{b1%})C-%qL!EF+|d9Hns4AwQNdTR7^o|96fNM z5S y#swHU++$ytQESWHuhEREUha_oT=+4?x8gF7Ng$+Mu7faM?F%sOaDAdXvko zPa@`ylSF3~V a` zZIYCXc%TB|Vm6E)xXMEkZum3_qA@||(!0rPywr~U$xSK-IGLSmq7nGGb?Nei3Xhg8 zo#6F)XD`iGfDEn(H#i&J#v#m3Y2Q0Hjo*bBiOb#8ULV_+hN3zc=K0ENCIZ@fD~69j zJO!quFhW?Zim 4fIo}KA>h0~j z8m?O1r{mlPS)C&XTxX^ff>L|uBy9l0Z$EBfIj((co7oYP7&(5HS?%zs%RCaUR-t~1 zcfhCbhQuO-J3I}@i80|S;cZ~}9Bp9+uk9^{dv&DkiM$3kmwXUfM)qZcQyh;Uw)mZ` z45mTLn B=6<*J<( by`5Rfvw;WO zvM?1!#xQz;{_>lLxLuw_y`}855ot_F;DoF&bHj&EHadMEvtp|) BC2>~#P=z?&lCI-<;{rVw7Jf%HgzQM{>@-z-BE?YD%HOxk5KR7`zc^hF% zkYVMUe)hWOzXBZA)j@$8_w!*#u>u?-7D}!$9ucHb!3P>7jXZ z@3>$f+xU7DBP+Zs%V!?t#S@=R*RZ+q_U5be2LslO4wS8z@t<#XETEc~GbTTbs;=kZ z-)OwZU~gb!?4J6N_YF~HTz#f43W#1n=Uip*1XH+)x>aW|=n ;bF4p1b& z<)@q9#p}<$Ad`lf)E}tWjb6mnH$U8H>2kDp&lKRn=nFrGXJ?#x?m~bD&&ACgJ15+- zSDPD%&*P0?4(?B;h?&FM? pLr-Q;60b4` z(eHuNVqOx|3yj(*2$>W0%MbAffcU+>|NL#B|1tQJfB*_WFn~Y)YMLJ$fT;fzT~OHl ztD6DfGW>DZj3I6Ecp%kG3hW*s5KBI{`V_i%iuDEDzWVusYZ&GrnQmfe$QqK`yx$1k zC}*P?-Gb1hIm``U@IEx?rT#hIDusM{LqW`5u!HRUF|W|GG0wSVodkha;}X+t@9DO! zRE}D8?c?1jQ*>^^lN}}{?AousLEi8r;J1U6|2*aS>*)m$ApghHNE+E~04P9zgz&eY z21Y*VOJo83^<&To?cDe-_7NJA-Vci3O$M`-F>S(BW;zJ@wC$%BF48#AW$?jY`;7>U z?`-!6`kAhJ8Y?^k^UF~ujc;vrRoBA02cC7O5nhT?8p_Ay?->2@*Ovzc`~YUJX)D*Q z{2KVq;R#oH$lIY?6wHp?YWtPi<3WXh6VDR##DrnNc1JP?K4j)j>ln>mf73a7{=!S! zU1eNLsS+zD>!KDFz5JC5RF5)bA=Ug$zYl(cP}f3iHD)$$+8}Iiix_UNPlXc~&9|FR z^p?*Vt$db$AW--Rfyp03;8!Qi{VxRe@*n^xKl_Wrd0FewVtwLH8iU_p0FKN)sgp4< z$%jV)2~c?OFd@Qdi9&)+uE@?!eu8u4Swa$QV*T2@L7_}4DE%O(B6v_FK|F?{Xz=Y} zp60y5wZ98JjD}T+oW8Fb;dq0J5a~}YxzRr@cd`L_X__3jN4;d*L*RQE^OSEtbIxK^ z8DxYmhMLFEWN+aZc1({flA!xI5L8K(Rsc3hK*`%YzPYmsaE2i^RLIGpH^~tja!SP*SwqrZ@DIOUhzyFJc^TM_fuGl zr0Hvdd)t+&(mW)vZ AE9zBVpH6ZVwY2l7vt5E42^@*<(HtdbJJB<;(kcq ztk_|~ZLwTi{m77GU)@XCf82W$Bb%ynMH!kAFPRtqu}7rc{AcsP4}AYVy0=>SxDPC= ztfr*T_bX!bLPckumB{J2C|~%l6D`Fhx9+t3$1t|wN8Rg^gH|lif{A_(x{N4@P6|cQ z6<}g$B8-1HfBR7@9DV!&M-pcXA!xobGsre~GboK?=t1cS3a*G&%C)cy>zTb|V{4Ws z;%l#K1&}9_%4Q~FPevq(vqRbzIcuP#b`>z%
PKf4E=O8Loc)&@d65pkLLuKEpyB0P`)#M~=otVnUpjpR=IO zLf2`)&F#6|tm@E0cYrRFCRYZsxrTg5(O~&!xEd0;AZOI`%}_#kXErYd3iO7d-kyFF zOW6Vq6WR!t4QKbY7?olG^369)@F%p^k5dD=89MorN%LZedyY1WHkMnrTpiPtUjB)6 z+EDl(yuZ@XX88~jX9hn*&bVLPFkpEFBn^^s?P7l#`!FM^L(RW2%*NN6U+{21U>4fj z*e&>du1pC>sn8hWaT3S$CL|`49d*Pkgg4PN$9@o?Ssznqs=4%h+|hwy9W3PoS1dM` z96XAzOj0TYdycSARC(F41l9$=qm<*%)$ZdN1o0wnJqtQS%r5f0HHD&Yiqe^VD_a}SN3k`g9m&fOZV#o>jV)ED>yL8)b zb!i`P3qtXcuol)5F^jc1^5|$QN19|qA0E)xqGy*Nb&M TnqRsMssD#zU!C$k h{ z=(xJbeGvrvJ_YwTfHK!ks9iF^{V@ R?u###!ZdMqlq7E@%Rpe+T5i7 zAT_1WRwF%>3vHdO5pGTd0>pC{;+LR zgrlYch_S0AVQvQ&r6jTee|Muw$vxdB`v-DMgh)%kPMpyF1(@oDGoD?)=r?>}?z)ge z(W9PPNP5YaZ7aTs%HtExmsCj%cZUAXcc5u}$&37K{m=DJXq@G-W9CR>-bW8{Q< zM0A<+mSD&?hOxu@9Mzp* LcqhPCT)!yQ@nEg zUh!FnKU?$_^x2?^VR6SgI~7!93Ah8dls>X_do!4Vx(<)LP`HBX{E$|xbH EM A3THao`FH$7( z5}!}?duBf;1a}2E)i#r4^QUO05YIAMc%Gv325mBzGl($2o}aYS_wcW@-swkhf=$#1 zID>PmdF7Gjf-I(mAy>-_MJH`PJ9w)E{5yKrp=(NnHY`id8`w52dz;o^miq;_KwB)i zmuQ_cnKo_weyiB^e>{Oe{N)J_2=ei-iuL?X>%ZT_Oms55KFWi>q6*JYAh0^9sMT>_ zej7`POnSqvDhR3!z>K$NRDXEiGf#!V!^LabZQ^OHi@q3?dk#jn%#d6mS)`S`hjFJ| zL%yF5;e=k3WRISRljH*p%YLvn9a*|_K>wPQ9S$&d3>jFY(nPg(XjO(D%`GIi|7ecd zosA0ywfmBpcfAy&pVM&FBU67+cS2rxFYlX-6KosX;w^hC0Qat!sj0WiOP-K~(&jJ_ zJtk8lfMGM_B~z<=;P`D+C5p*@He~qXZ09Gu?ka%lMzzV=IcNP-V^0xQd@Rh)B&k9T zo|+~8m#f)6yeKv>^=wQBJ9X*bc?^Q}4 wxo7muYZFqs^mSuAbcmq+Bd#1mwlMnuXE)LVMc2zu0=clqkm`;#RtptD4; z1xrdqh_-VSyL;S#v$W_X-PqHhC6`B>h=7bE7Z1T$a$B3}!*s>soH+L32s%^8es)2B zwyGxjE0({Pm_(S9>W!%2sS1`*7vWxWx%%l>Czw7EjvU^`vNiVd1Ku!U-6aGE@Uy(2 ztY-_?*7f6Uo2B}Ju%4ClL}ap%&gnaKHeu@N9+m#)ISZr_C^z|9{TXbF>RA9IR>XJ~ z#E-X5-*?`_bl_{}bZc3<@7k>v7RhU#4{(pH_=rCR8b;CfoqEx~4l~+tzAcbRxxDqp zu+f%Fiq5{6lKJX8oD1M61U|TTXI5C-V!|CWXIa~~Z?R_c*XKerO4Fdj>B3#FkROAI z1Bp96MrneBl2pt)RfP={tfP63MR?cq1wP-V;@h~3 $JE+5=CQz>Z88<9f#3{)lg;2k*n=&Xr~93%<7Eb0f@FLL~clxgdx6 zl#Bj1Y7!VMIzGfzNyYtVZ9YVAhc4Kt;nSrI=eOxyDv(PFS%b+2)th!(sUus7$aX!h z_{ry!e9fnx*fYwh3bD2+2Z6pR((t=ogkmFhC2tuJH>iz8*(m`&5TkQHikAFL&|$hH zZ(Zt>#b!62ONJUiWYyeOr5K5o(f7NVr*)KQS3fc7xC4AM2Yyk8Y9~j71F|P*SwQF- ziCuNR?29_Om?L6XsZ6gpOIQpFO!u?^-Vr2%MAa??{t8;k%GF&Ce$_D*!e&X@v9>`= z!Zq-rlZPuD{ElUNi`z?Qc`PSyc`#*cY4j&Olty>_PH1kMwrV>4eR2Q>EGzam;xPP! zMoUz6{i(g!Avwu?F$bAZ=pEcNd#SI!a%X(1IH}Qm8=NqHY#RGuMO_}R*fqYjO=rD< z#tz{Sw^&5^E>-Ljvn9@5#pejMk#Gg_OX_inH`1ti Df# zbI|;iC1l+c4YIb7*|}(_@rKNGgMthWPY4zsF(P0}98ZDho!>f7+d`H 0_gzF(jk6rO-b;1XFBsy{0J^m z?l^ DU+2oImt0_`@B}}==+|e`5lrASec~-0MXJ(Wm+n{O@RjI4gH<3wk;tva0 zeo80J6l98BM;&n$BEMF6079G=yt5(gn!89+oT%xf?%W)d&(lGF;+@%`zDLgBe-P!h z$g8o%ArAh4R>8t?;~Aqj?_Q6#^qt$i3v7wrJgRChMJ4Rc_LbWNO*FU{r*hisT+;bW z)P!e%cvXtt?==Z>r-yAgqx;4tk%*7cZ%Kl#0=}V@Ycil3+RO%|$t2DgUicjSYejcd z?m|n%y1-LbS`*9>?v?rVj69EbPaLgr3m>m`F>5nQe~*&SrK6n~YO@q?l1=Q`?%U53 zkP~V!-HhR{BLsZkd@>k>VhPKON-wwxdC*UyUA@DYDQlIua1!&$H>)VLNEG`V4#5>D z_n!*=r9X1-_q;tDbJZA5=^tx23QZkv^f5vc<7lTV3p;{?5KPs8Ff2KqeVziK30w8* z_Rhneert5$aj~{rT}l~oP1Vk0n2zh~o*#Olcha;QlMzB~RB`CuMwxw3iv&!F_IE*| zIYs2of1HOCHiM;*%zzuZ@C%J>3GVT2v$jV-=&L1`ssLjRc6P^OJbLdE@V&|}c+C0w z#dlu-CX_D8LZ<{YCA1#Eb-!Ak9i4{l&|P7m=7=@!fZ|)iwEZKj0#TO`j%FKzr*WX1 zMeyX~JUU{Z#6@9#&Fa>9Fz~psILbYU{w$$O;nN6#okP+i7;7jHm9S$DsYP-W%VqWs zs%)eK(NX-E?>ifn6-4dk%1X^ec>(gz5nR<$zG<%LJ7S`kdpPWZxydd%>fN8pxc%>o zrXVCS)I$4@#R`=8F}5jz*hwG#OuJk8Q5#?=jzx`#vNP>)gCDDm1}r=#ZV<4W`}&(! zexAE~m3W0DBNP~y=N8-_AP5QMgF8wtyvZ@|9 PENK#=A?+7QYAtBC>u(7)?9H2KyDDEKWALR<@Kukn5Tv8RQc#m6%(@w8dk7TsJ4 zV~;zW1dWbO &$DR< zP>+!2gL=nfz3g=vT+(jNh$i5kY?8$ivHls)qz`A4hbj(DYPP_0BhY)nDhOeQNlJcN z^cS5Eru0}hWw8vN%gy8v>HI}ju|T7xKasTji)8$dAut34+4>uazKp={Lk|MPADNqw z4P7=Q#mrX{x%8jg1DB^yr W$THH2&S`hx%J8zTS8Pcz`k;N=>Xsf5#%$5($e=MF|5_=gEM|Qv>H@&_~sJhI&CfU zF%HY)i?bn=&x+hpQOs<>$xu*+5wGiv_KE(9#y;`>x7?lj#yEgQmEiNuVQI1aP-=fs z+|RG}v!8TNw8QutG5{z0oDK2Yo?I>rMfkixF?X&eXtBzD7j7Aa4PRlC ^!GrR`)^;_IO+;0El_Wm!op+HdRKipmu{i iCts`qnK? }#KIH5IGWxbW%jAn@_ z&6j}+v}KeoXQO|Lldwmb;UF`y#%)$=^j0@bD4TEo&IyOa;GqA7N$ z 1N(bh&s6UeQb@`v k@&1xy1_WjJL(bJSSKz->Y_>F~Ei*)Sk`6h?v;6qX5cL)lXBR>Y8&6rur$E?g zFI4lC+~?Cf>5;eHH_cu!Y`0s3Z Ah3+A3$0keH_@#}hxW^-t z{0z8OmbbdiQo0*zDR+OarZQR*8%id`!mXBK6z5WMf8g3+@}7rR8+j()FHZIHGjp z1jpz>VOMEDs+9 i}}m0Mk^@<` &2sU*5$j#Tt_zYk(~+-r}Cy*{s}5|7v= zn4V)u$G1ecz!%>3=o0613&+X9)Yr?lQB^@RuC!kpq7dzKR@5!lLcKm&JR`Lvo)du3 z9X}U6@Wl !9lzO%nr2tV4*3?qc{E_8 z)YPD!@7Y(o;J0xdT3I3&6)!{T 0et$7Bmm~rp0-TDjd>6`nN?R5*z=u+wrg&?r2==h1%nkn3I8Zn-s`}h~ zE0Q?cCwaH)D(8;QvUgB|q~N`pLZ`0#veA=IKP}RZ8)>5i<7;4r{g9W2(@shhcgyH* z`_z5vy}2@LElO1=)kq2b;Ju+<@N(&$KTNNQYDSTxb4jbrC W_^Uw98~bw4?h7<(S{%`c~a4KFJE@&6h2DnOcZU(V9CRuY`gUiKi`t! zW97R2L}eeG7GF$=f<+@-Euy@tuEG`d?y~WeFj_wfAeGw~ZMjw9fK3csOAcP~t;)%r zY@km?|H#@ADa<2Xy^EiSv)aCQlpA9ozO%jAM{%LIMD^3H6Xr**^xjs`QN5T%#K^0$ zAdCo?j^Gc;yb@9BP}bNIBqA)-fTnq<8$Jx7hqN?Sq|TntW4DL1aHy%aqSIRklUcyx z*SF>?2bW#`QuhG4f)v@;Sc*X{z9cOR0M$DYBDJLQW7yZyoanWF|IK5zM(B@tW0zZV z5w8(+u0Q2^K55}D&ClpjM-)ygz-97U65KVl!>v*wSV`z!ed&-;a&fcKLE-L{FPz9j zlPFA5iV{65(wNV#T4wxI#_-5lr{Uk*bZ8~uRZ}JJS~exF>0D_!*AL0C%d%nrZU5bw zRlmqkQcgCl!JSwx*v#}RVt({Qq`4YEflm8*&Lmhe@4Mk>;0PW4fpA&%Cg~9*@MRAm zTF>r&`jjLUr^4(L#%+PUW8+o1yZb(9^VAe?3NvNN*-dxa;?YYJ_mdGyj{(YlEd)*q z@9opK;aumSjop>ekWYPT&!Q5Glce9B9O^oqO~C{E*`Go7gyBoNy93%^-xa$>5q~ff z&R IVgL79!W3q^&jqs9aB${8&=N^2kRhOfnVKisr=GS%Y6~Y@nQW=@g}T zy6(21Vtbb#b3Eioz}ym_s3Dpc#&8>tOJ{81uSJra?r>R?GlyBE2P9La1+0*H>TaMI z4GIO*UJl{b#CBz{dc$d*;07?}s?`kbur*bH{$wOfD&jO)ne}-=%@kk88u*=_FUe)$ z%RfR>rC)g4ZpPM-nb06BFW65L<*`bfZ2a(Bna(*HPjJ#>pCz~qPfDR=N3YLC`4KMJ zF$5+&aSy}}+pKT(^L({v)rJgB*5;lec}&W_O_a=%di`l=!-M=))gV iD~;|0-zrX!Oxbln zdtHf9>i}o0Hu%#M< V7ww#` z(047rJ{UkksU2{_kw@oD9-*mf=@r>ApOay5Cq~49Rrh)~qw}czQ4-)kB}w|LuFXKu z;=kJtf&bH=6_P9@&jC=Hz%MGE59@1GMbqQWI2ZKYUDOt=FQm!ta8%~JpY;P$ndKSX zmHe^YFwj#4W1cd-$A~vK_2W0cA?{0j z;>461HNdeqtijOP#L!OLL9McsxA|g-fs#R)9e8-I|LUq-1jmbNRp!+=w(Ik&6OyWT zOW0%a9aA~G8$;0+AIK&2PuKdqzgl!iJ3pp}2RxYsH8r!l=xi_PB+7iy%(2;Ga7c=r zlxCnJ%8L|hy28yTo=zk5ZF@9HZz;<~cu&;1;F_cE<}NP84d_A0S-)NP@`OWXpevi6 zZR$TC#6UkvsHhg4%uFf7*wE06C?+XM|G0E{z(_dxbqs&S{OO{Qo}N9 H zc@uCPr%8)$Bwy~NCtUb5yr_~9fF*Be$zw}+2QAjPUBfEcu=2(R-I)@dn2yI 6nf%OPnL9U{j>Oj^hfusyMVWb z6B0@z|0zvp>xCo4Dxt;sn4Z&F_P7qw+qNsB-8kNCrI@|wx`_0(_D+hHJ)O^k6R_`U z#h*d;LvyN%an_g|t2O*nXzuKAOg;ZShc#r3_@5k^{+A>Be-r)(5cJ32gh&3B@Q4P4 zh-AmVa|2)_4U&&(Vtb=Taz3x}%dKmvIFraN3yS)Y9USQFIkC7i8%IMU7oU&q#Ar+I zl1sd}CEwLaDh|A(!$VWkP~*XFq@_p-brM5DbD6(ben>jm(-)dL4T>%{dS+U6rJ8uU z9<{;GSoTlSX~t|L6hkv6+cp938zJ9r8w>flyw(2>ijFqyRe4pNX1uy{KaM<$ Z6w*%iMVIPwrjY xg7(@UjpPD1Oo9!SP2*g$G<@ZOr+ zIzVFg+-Yh1%+Jv(xB8PTN(|23h_>oxbBY~5` 9z; Kp`Yg#i3B*o?Z#Xi!jj5)B|g)!;L(vu^0|6a6T3e3~XnK+rk zv+xdk5?espRwz{Z7)IM2_08*$i}Ky#MWO4RSV-80GB(d4@cQ-a;RRpvy6W=iExN1Y zT9cdv1?dj&us8A@@jNj#@U!A)8P&k#i0e5F7w#F8(Lp$*OXU}0S56;34LgO0VfmQ; zbK*M|`|iwA^gF+A{X3WKQ}OJ&mFuNOx1s(3!(gkDb)+FtnMCxedO`(`lTt}q_2*M{ zxQ(r|;Er<_036(1=&eFtgX))jeg-;dJYL$pZAmoO;ZY+p7rS^R{xAI45~I8L f7;n=*m_M$V9gA;I_+5r4TPJP>xNSyf@tOV+cf9hBOeGQ z(C#{6a@bm$JZs&_pqus`W{W#It?#=+*B2 OMQFesXlwYC^1_# z3;tf9f`*x$aYGQ~wqEb*Ew4XgiaH>O{+SoY1TC-{o>%yp@+8BT92M)uWmg4pwQ%4j zEtyBUanq;1(kdM0nBn5>0~Aga(clghv}*zmNIu9do~!K<&-d&LFmJ2d@?^LSkhkuB zSfRQKaly+UOgVXviex}&_^Afw+}DB?KB@RDGH+-*Xto)f(^uaYA7OcieIkV^N8(i3 z-t`V)I&Xe_vhO%{Y$8y1+&4K3QEr7_;BHKy)Ib%?)ff%bk?lR#-10)3tZ6JjV)yLL zGvkkD(%$8L@!&HqE1~7JdZtL*s#;?GoC$nN&Za>$8}V@}qNnAYEqV>4$ )S*?1Fu_cp{w;yo8_Zq?&54%*VpDk9E`f zY4jGaa<$8a-{N63;bxp#0Sg_;^TUFnl)JQ2kuHea8MT9d=9-KofO~_->db4Pve2sv zc=2I_vb6Bo55gkU^cznDp8jm`On3EiW@F12c2l<`gTc@@bA)BHA*@aLxr-hg;neIE zJSx9b9leJcf?_oWb4ACICooSv9XoBv{XsoKFoxh^@MH!$N0{Ox)=gBk67Gg5Py>@6 zJkwJ59dJ|Ad!;D=HDfygQ@4**h0aCX{(BYdkxzoYOQA1;NGLG0Xod!yO@I&rG=tXP z(g8;FPdZrt>S#3(O#HuE`@fE5QoO(gahMwRk8mbi8IOcT2>HqPpWDQEpir<;RLb z_*qrNOB+4RKTuoiv0YfHJcKrLwB3yfp8#st$8w1}Wy?)N!DlC6bc*%>+}O*LL ~*uzS-lPQWygmmgAH>J7FBvFs|< zBddA5#PX$fSRaQmWYTkQaq@zH2O;q<2%SHMfEW KtH74o-hs+fmyo?@h&e8YhJ#_EreZr<8dw_Bjj#*G64{bAbqF;`n z4K$;>I>lA22{A>IyQY{wmEU3o#}FO69}cnw+~CRY#A}S=@l6n-EG2PJ>0RnjvF4FH zejkFvss72rK4#Z;^4=bPdf>L+ZdH+$7Y7GO>+lF5YqjJ6h!2@dS#qNkzP5z*_*?4_ zjMHruxcKXgyr7K a6wg+w~ZTFvs7MR07Y=iz{+XDnk z`HSuEwktTm{_^giKY{-@xT8dxae(L~!EgbK+8{?|rg;0BtX?TmOwiY*Dn>4Brz@vd zpW`wiyLPFLg}%5sI(YjlnNi#`a|PzbR9dxGb-ui2&GjFsfFfqMr}KwLWQ`a%>RDNc z+@3KDQJor1Yt^59bE5Y*=mc5J-$)Mw9{DDmbt9tzpFXU&dF4|Yz>zLea8o@uPhr z$0xWXG;K8raV!~Z-mPq5Q_DoKiTRpdWW?LW7EZi&yOFUtD%{w yNN>0XK!X(g@i0NR#?+v2sqebt=WZD~UnIRF8!o-OOnKpcu>j-x5LZv% z`HXqPGvqbFe(MIdM@1U*Rl~tlWritfU2r5DdJ<_i;ktC+!vKhyNB4R^AobHn(Y>9! za8+184(x>;@%;ze9@ZS`mL5s~N(8Ss+^_#{P^|^;-|S;AC<=QjK$ClEg=pevkP1F4 z%+jWwK#EW7>b-4opwVfDTMswks^Z<&>GK}l8O=S)GGZIHjC I;*TNpi`DKwtX@t3`T&LPP)`C4 zguGph;{DAl0Ax;Ji@?0{$0}ffYzsJ%^$CZ{_h!DcpaQoK2Lb%bf85&id8?McC`|*a z@v-J)o49v{?aWY&*45d+KHoXS8XSDncYt?8>T8xa&I3@jKXH)cJ$tOm(U8qO>v2`J zUYQs%!r8bf29WGp{`m5!qiD(ea?wz Ok#y9{}S2x6BonU2-6)Xx$?k0 zJv~sTNf5LQj;B#!^9&RhUWKUBpS}3@n8R%B%8&XHXWHtk%wg6pF36gzhs1``kds>; z3)A>fMU*cCO`1lN5wXj!ya?KF5GcKZrEC|!)_-L!^64Ylx1_!764j{hMH?NJ=fK(U z*j#KCpq8u-!Jlr&3Vs*?epv;Q- !pZ#R63_hZ z3T0?To v?i;Ts?}S1_|Ld@ZoyCBXrL48aNS%F8Yuko|+z zqRor|wH?fuNVvn~M{z%9png ^n%S|d6VUqEkvkoHvItZ@?*gqcxncHvz ;!$|je^|nyQ~?iV8d8eqdZm> z?4Lup>%Vd=N5bjg*BtL1h=9wz6nh~G$&ztdTykmVby2d+0un51=V!~>puk+gmB7Vi z{rAGO1RO)%5LF85-g{yJX_2nvPao)yY`yDwX&YmYiVI(D*-tdP_BOGxuj_4TeHao< z1KgqOcwX=}sgNcfhccx=&>n}aE-WNfUKtKDt!)fIH3{2BHd%EN#*zXH%&MLk)5aEe zbT|81;Tt$pk|KhV6lCkz7s|ieQ90#eFh0k-EE$pLTEr7`;@Vz(FuHvqmL0#vQt?^B z76qm*K*&KKmq6*!v~T6~7Atb0YXm>-$*)mBq9jL{Qnr-)NN4EaF7GCSx4c*16iL+I zy&b%#|0(7@|5o+ #sD1n=a7V*?%&RCkE3 zWc^vrl*h>cP6(2>RdK9#(I+l5zV=*f6>JDS1BmlDTQD<3{`pGPqhneQI&kSv>f`Wa z?_!^`o5VC| 1kAr^_0F^#Rx9-8#R5>sM!Z e6dDFbFF2C!V7z^_WM{Gb7sqyhukh{k0h9msEE#qXEC z1>52`EyNn%qD@?RSjzG~b>$tWh#-hBn`08Jc2gHZ96;6f?9|BQyqHI5FP6~{Q9N|s zcKE4H>mT;y5Z~jU`oZLV@DsNwpSC}=PZTy9t}wAev&Gk3m7=!XZeu|tSjw5K|9_bH z#=tzEr|a0ZZ8lCC+qP{tcJ3ri(%81sG*-jLwr$&J^rY#p@Bh6%&ByDUnK`>VJ3BP_ zm2M|bhpY5=^Lt<{GA)-*e4zf_IB{UCO)LO>2brfk?i2whI)QH^g{8Nrw vzoGKyp6b6oRU4SSGtx>A1Pg%6{-}QCc+zW< zEI`c}FUEnHYz-alNW1lwOa(iZG|#6Q03sFhI3|VxAH|^nDohMsVjf?xM&DNUMuQ_K z;Yf~z>cd3_ozsm((Prh&WcUi4z8)Jb`Cc0_Jfe#)SMFc}Z _1yVRl z@oEhevb~62pcK6b$v1;PhWkpiQ&ebzm8fY)ZwLLpiLV!|ZGK^%PJpxwnVX7N$! 0wgT>sdR{V@JaVKMj{XDaVEvXDTI)31y`H*YhbD<>O&vIp20uUCL;WY=%CG- 6cAB}iqHL0?=;PJkv93R*>-3P>@UA90??AdCgx#h zky7a>j<$xtBxKG}>C8o?rq^1rwhtz$8yo9Sdx8oo3l`)V{7PwG95)=zhUkuwuX%CM zf1gk2 r;j!K@oCw* zOtG{d$@#OkT%mATj$T+NTuNR es)#GC_PkuuPFq(W1{O#8t-(agVpiruEt^HAN zF8aCLdSRHw;YHtQyzd(9cLWsR@i#*)mo(Ew$b+IeLbJ=`Ei>TdvEraE+}PUQY?J1s zD;ZrO4{XQG^t{i*+?^MwzwX1~N#4{1mmrXxv4#SPf4^STX4T dy-zv`p%*SkMbwjkOZ@r!E0)o4-f*Bh9yh;TUY)Hbq_(d$Pmvt^ zx};^qsbt$yG~ag{z~P{qn`l<1WU2OW*(m`iJLWJ4%9K?{<>+=d=qv=g%2!;|h4XkG z?SnZ=-%k=mZvr}bPsVrTUc;Lz;@PyU{Hz%O4&MlW4 Pb=1M`p*THu>-pVy{c@#f>b2ubdjk@kF zEN~ q7@hn%QH&@}yxFI*M*Rr*5|4F9Ep%ZDK_0{{#C-}(XP zaQN^i_}51)17L8;!?rxbe}jFDWzWc_F-qYd8`o8yO$gVr31_Adqtx6o_Z^%cn8| zbas8ljCog$u8h1WzC*xHer_18ebNi`wXjEe@l2I&XG)J;OK`>@S{Se=NxcJ-pgacW z=*o}Ju5h?SpQ(pq3PJs0!Niy|c`79Zj~Dw2OS4hui}lqSg@w7``Eeh&*c~8Ox+ht7 z>|Ku$-HJJqu`U9!*ilun!7(8mKPg`Cft_#})52-M25xB 2O><$2e=!v%rIBD$Y?m?pxKGgn4^LpVTk!~{eK>_nnk z3B<6igDc~;>~Dd9-7EOB6to0pYlg=-EfkqIXsN@2W99g>pPkL5uV70F`H80?P0DnV z^LrelsKv`_5&zzvD` ~I77{dMOn)D5)7(Z$+q)BO?^81h!w|}vvrsI8pC-Y@p9zQ(?`Z1I(sZon`6qzrX z)@X8!MxWmogRwC~9f+r}(ygIkVPL{Sc0N=m{%GQz8=p>Y-10Id#_q%mkMD&-M0sQZ zJk^HyUOpr%g3L*lZLP36O%kdRw=1|EBo*3W7NXY*Kas}|r^D%F%ly#z`V89aO)g(N zD?#u*MuE37DqU>ISEs%+F1c{=N9({dzk;xdgu9Z)CR>?$0YyC6VE)*wfT`UAk-Rkq z=lboi)da-(!sv-Y%o<=4t?Y;_O=DMXzqy@ntfgpPcq0*yGY}%#-B`9aMs;`F4Gr<# z@lvQkM@o*|wOyYkeUU)bCt5ySq0)0?^u`LAK`8U8YSuA94$~UTa@ArFM=P_=97SPZ zN7eloTapON Nh4h!4VFeGx;@9WryOdrUl3F`_T|omkn2mEgy7`r|>avVO&lq7{J)? zP`j9O=y1AzS1EYl_Z>E`3PL=Z#lx587@QRy3)~pI0HIH*%{*rhu&A-;47xl&=Dle$ zf;ih?>Ea2l^Mg5 Lo;n9ag_rSo7TbJ_&^6Rj9; vQ8VPt z*3hT8gQ3&RY>>F9AD25OCjnHs<2~q~WR1klS!=sJ
R=kmF|JT{wd){tIPgl~y=$N3H5u!D#S+U{ c0)ZgVW1d0Y9trIkP=i50mrEH1{MS24y7C9AfcRETS~&xBPRA(k1Q^ZZ(w z-ex9%`U&*`n~Y;=^)ni#R ! zwwQ93noh7_)CcN2g}%;B n9g zY>tiH2pV#|H=XILXsoG{5~RHJFkAZL99hF=HHdGK9)W%j5rn3K(Y>Pkf|mKJ?d<$M zBa2k_=;qpBC~}`!TTKdn-3myHj vT*S$+xoRuOr1L& zew8>mPMOCJKO#m6r;hV@=v)hE2`kWF0kdp-7?#Qwjy4{0Tc(8cj}!)^(CqDdq*w zpJ!(DldSgw!f}dXe7e&RkXQwil7#getQg|CfsKXJsvr=|Nm{^Jl;RG36&^sRl<<}w zT}WF(=RE9rLiavzIH`#{A8c-$T}P*!PffdIpE1b|6e&9{$hat*@l&6*xtud2aRVy6 zo{X}9#3Z!W0v2gu9d*i}a|ds*p6yvlO04;vAof$yz2JP&^%$H;m-TD3E^rFf3{1dt zaXF3B_OH$(&fq|L&Uk6@yaU~WUBzS{JQ>RGnt@uBK%??p9nRlF2;??d5XV_R^Fw>q zWl;9sdvtaC&&8ENvZp$0;>4R!-*gztl=!dP43Q-4gn=tb^Rv~RjjB5taXia+{MrA2 z1OJy5;OHNQASVEv>VNy6_wzG$H|L*>c>lgpSfe)dLcw?-ab%FsQIba@&er)2x!Xq= z4Urx;GK~b76TJaFw}KZ{)CF%9R; iEFN<7|qRNC6GeL5G9V9jk-=8J@G zzQr4h3EuJW7kH&n$COJfpkM9^VVe*8UBtr1d??$`-b@r7WOz~f1r9!ova2msNlY(x z<<|;Lh-XR~wqN{a4m>wX_AqF((V@&HrWjAbxhZ5517t`}b7VZiuIKebgX5{7R$}Aa zFLc3xW>nAyZ*ad?G#8@&D&Z>wEN3?j*M@Z}SM1M?*gyRx?k_JGOP!F%>K{#~<9m`Z z{r`|j{f|uEzhtrlz!m-@^S#*)#z8CPgUAd~{$S#p01;gg!a|<=RWOrEx-kotX->J} zuISI2yl$4VvHCE0 cr5E21bN7S!{t0i!?~Ovm*q 4;Xw6%$4 zk&*_*a^-ov6M{pp4@kNv6m_LI({C04{jV@8j>lZiSFrm>F~N%-X&B@RdFQG2Z)f#c z!^1g$s8sw%rRj$uunhor|6g4GcUZT>{n?yLRx7!(&a*Mc@hEQ!I*=e>w7r#QfUAEM zrMk04- HrQt#YR}_S#3zv3 zLZ=ST?EnQT#hJWc+yVyFWT 79Qf@u z)bWm*ymJ-KD3;F(v9tyz_GcZj^_9UN+#dgMM}8PWxB&2+|5mB@WBL2N&f)LRF&|NM ziVJct(|Hr_j}?ll?H)>p1{+)&XT=dOsE1d9GaY!v91Q %Bj9Tn%<6X#7yg0b++!psD20@m-CHO(i<#U`=vx8;zL z=?iiNxIAD1rRnE9Pl4x3np}F0yRmFjm=zRuKdDK4&4-=0zVTm4ZE%Fng0~@mCja#n zu?D x{*dy1<^EG-8b^kyB?`>XA%(sar_`w>y>AxyLmy&_3_|3 z|1Sn!bED}O3$5mceoZI`1{V}1G-qQ8c9yCFOm_xYcgSWaKjgGznGD!^>)^NST%eSJ zb}gn6L=k5Rd9A6e)9Z46KsjM#0>~aj9@9dyCBM2C^-xX2j+%768D<|)R{Roe44b(d zYf6I~5yojT>;NotN=|s&0`z@06UwsmhYl!2f4Q9uq?sX-3H5&c?ni3bT_@!b=7;sx zX;&(<%(Yepgzlb75CZEM15?;Q Xo zL^<(|gjpmuNT?nJ(rR8u`Wq;i3qjpEy|ZNst!>o!*H&35a7gSym%A^qKk|HoJ&lus z9D@ptDTpN;V {nn~OF(C^%T z@lyXcPwD~S1Ap`6&j#(kJkb_p1-TitI01>N>{IdCjl0$e*0zG<&e~?TqEbP8OblHf zY%qcII#N!|q|!s(Tqs!FqiNFii@GszG*wRE50w@y!zKI8VAU$EH`vajwxRt>pI_aB zuhcVm3&bOfTLMvlFHv?4)6Xzq#Ye1#)dylP-((>PVTOU5D%LS@rP<_PlrDX C>qByKx;jUDc{0V(v zGz>^E|0Y@vO;S-M2N-)tr~RQjzz>Pb#&h87LRVw li|pxeibvB#Aq#9H zHMqQ=L;*JP^zH;-dGrp@ uun> |1E5FZ{TJ8@cX7h2(lQXz oA&p Vow zs)&2Fn>?0zi#UVlo92R}65=m_ynrE;%XG2BmU3;m8g^Ke1uQ1Vf`F$t4))d*uYhV+ z9rpRQM#9pi@_7@PFwPa?o@~3-dkgRgi }5%d zT+Fz9g5XAulyl5$qLI)WlfQoR&(ocw3#u>Alim;9YGyw>vB~_Q{1e1vVrArH?y MjxTgq{B9pL}ek z-5(t)G9R{8V=*k`86G)JPbNo+5(DbOOm}P(42tV1ZAj@=8i2m=1@=dcN+ZuTV|*@z zVCU{;{%mT#?SA>nIKg*L`wh`Ag3u{gmSJ71*K -Ki#NPf4)(mWID&LVZE9&(G`oS+jF3F*hgZRA~g;*klCNGF5TDPLut z#6meT8=NjVVd5Pdp`VPh82u%!qzqf-9J@N@4#6Q=-35Ai6ahbhs h9jSV#yBB%)F@y2n%4s `sd_)P zo%`s%D5&dgOSk5PG$#R8*Swi6Nsa^vX^%jX-(NV8JVFJkgQ=!CSZRMh>(sze1lZ5f zBT5sZ-nW@0zt8hku7*zN>46}3-?$2q5GtclcQo5z`vt H-cI zaT7 bq0m znptQGn00M-E*;|Os;wBOgo>t6TYj+`V}+wDNUPfb^Y314!{t!BPKW^J->1J}0B=rs zDllZZJ8t6sfgbolTT{9I&J?pusgwfgV=FYUKKf!DZhSt9)+CEEtzYsuXHsA)+~s?Y z;b?)UQp b-TXL#txK6{EGd~$Ved8Q&qmRe68^ChJ)HeMJQWM7;< zHp-J0uxmvq#fzlu5#&%N|AtH5IYyQW6YpW3#evu4A4d`C7T_CpARZsd!O17mTZG@C zj@=}vAWR0Xr9p-^S!Qh)oWe^S3YtphmW8K&8-uL@+tsvLUUU+)S39Y3`)IG=h26R6 zrVQ(H4N~T+{HiZ}V&^EKL2Ud2IsqHb)2f)|bO`Z)(K|y1S(jf$5R3McG%?a_x5I;& zL((TdhsbHdjBH6o%YIoq1|yV5eWlNxu%~S)42Bh+X=bc9zffg8FNC@&C6``n*XEDR zLJ0no9@W1xn*)Hb_>kF%Pw)LOp#BEG8AsFy{>YBF2g?lOlh07X=Nt_^JzmNfR3un( zZxSZ#Wft&s!I=6+cZ&E=nndY#44@d>sHq%ag8HbM-)HiF(uFrL?IyU_5UrOf&B zvjX`R0tlK$c@^6?+&D?a_gU~ANSTsOmJ6_lIYyTH%<5Kf<1qY(7X!H3)E#lea4e)L z{MR`Tejz;jPJH~d<-ecy`7i|00T3~Ne_G)E9`*gjp(WCvKL&cAFqKAJQ>g3sud(d@b)>Kq3hw8JM6$^A%j>F7 I37{^tFPSQy!roM0z)8yPy%UrFxj>2Cv;+t zWDHjM5lYPLojra4)OK{qNGRZkNH0A`>n82?ppbL6n@q@=aMy9quBgx5ne4twE?|EZ zhi7U#5A4PfktAm#=9g1+%-vpjw_$VV(bl*=PW;;$hl3o*T(i8CtAdS%I_fjHm)DQ# zeUP-@HSn~d1<(38{ozt4edan^)v`UC_^)Kr__nDs6gjUmKX`?`t1ZwmdHp? `6(cI z`txH8!HuW6)iFxDDlSEWPKe7697@|s!o={8 4~D8Td<508V}qmr9v*i{IBtp82_yfpgPOIrYljSnwfBEJvS`fnV~16F-Oiv0ke zy`)&e*wG>o^5HK|O%xjAZKM08hJb!uL= bZ|0I4L^0@v@sy28NaDQEy{euafXP6JOE zLT4!sPi@Q22mF*1Fb9JnXiRjYVioB5HHG9f$5a3^HiavM=7(Wb3HZ*sB&<^Y&H<~BXcQyh%WI-Bl;O0!~**oEbKm^*4z=>uYm=}*WB`` zorl057|h>*a*`*?n#Z7fDnDJ0AecBq^+?i~$B;TWX#j>Bp?IMLvnau)f5RoZ>W!Si ziM#whH&=zTO~;Lg>IZ5nIxTq%gp32O`lG1dvS}U4r)8+iZwjRf(u+V?;4~nK_;Wl! zT^oBp>%H<1Gk;HcA5=gx?n3Q3X=n*0Ie93oG%BB)PsH~r&xhoMU3kfw+GxhuK$dYu zo{EY|P$=-Yt8BiZ4obmd6`%6Fy+sKN4dZcuOwqLT1sO1!N$s-3J7=dwFcHMIWQ?GO z9-(xWp$ZUUBUI oaM$V(O6O0n4Pr^sKJo;yf_jwX0W2U9tUbE#q6lzEv3x84ph+-us< zo;ScyTlK_!x!>2)a7DF;rPfWZQ4#t{##jxeO)Ii})p_>6YH#{pB0*^)2ZdlE$~RK^ za0yIKTEWFQu^hDzj9a}_%o4^gs12RBdSAx+=2AoKw{5iG%)YMdXCn#-aB$#9ckV7Y zZ e(8c68>ut4Jf4Pj3J &^9D+l;+q%E#K|$q8?LJ+#|JoZd6|{q)l}|f?bz9 zn(URyL$L;Q%NMPKJ1acXRG}0q%(@@2g@v$}8o)o7>77I1;1qQ{VfyJVDtltVmmteb zpr)>{lb#BH>hrcIm~0t2wee$t481+mOk&Wp5tUZ{Rl|g;iAoBy J*)l~;EOI~T2!a%yvH9!+ zs3g8#v?Y?)(pyHvA0JjeA-B;>PXGEHe*J{T>`U#Y5fzfbN!Rah-^@!m;#&G1zpp5q zze(L#P(O>os) z#)He@SKVgPX5-g!ofEuv23{mUh`Nqzrh0MmZpcG`BJ+)E$bj&vAx9@iCQ9FJ)d(TH zm(r~ -mkg!hN5f(PKN;v8}|D8yK2z@lLc>$=#SjPF$@lCKqBdKr*b%(vKP| zHqmwR3D91b=?h7SHBR@E?ru;y?ltbQ T=*`8V7jC)Jmpy;71g-9fbZIDXIF)BlaD~nTVgn8CBMNa} zO|D;9{FUD9hd~9FQqm}_JCzWeiRuxmWj;rl>m2x>{4j4FnA>bQQ$$LJ9mvKyMX zAeMf?1U{dHnmV_crETx5K+S=kQod87XLLx@gD{ zwy4AV!3ES+@I9w(v{y|mA86gs8gD?2SV_(bLSeKl+-qjWIYp&O3UsBd|8hBfTw`F? zfZqyf?VXDvDzAh3x%y|SM7SYMWH|La$=lny%Pt#%#E=sE&=5csbGIV9NChyJL`7Nx zdwP-(qE)rq7}vEi7;TX(mU_bU@-)7YA?!l3jciiw8;+EamIPD#I21QUM>Rly#JG3| zT~i;!yRF0xvQDe13y%UJnezBroJoSd1@pDW-mIWdX3o(2_38}Wv4d0TmgbzVZT*QY z0yEz{!9o0+7O1L=q<@i@fSD_M5I&y02nDdoot<7A7~sljs*b{fP9%E~RIpbNkZi-4 z3Rb!{VYADYII|@qFlh^oe!S;RKZLKDfKu^Rl{8O)-yFW8Z|4Lx05}I*$5h@7!g*~> zB2SnMnIa#;XOulHcc>*Y^xcM3J+iwgmR=^s>1Alu2g^~f1VDMuh*S3+SdZ?wj3lQv z)7 |NsaeUnHNliVN6*HanjfYe9jz)O zd%Ts#j(k|be)
F4b)=NtM!fGA- z&07Q3KVprrm{r4GP2K}AxP&3rAtRbV+yGwjop}(HJpp@epAK)KG|fDDVfIkFRm>VO z7NUTJz_VIPBg8_YTd7Z@R3uv9Cv3ZwEa1B>DOn&F3_-*Jv+jP6fW!>v)BCjDuIV5* z!%1T(1frRE!|)V#8Z*(f7{#_!iZ>2I8a63P(fTja91dAip7pHawlM`i^9 THK7UHUy$%f>(k zLS%M2nz`-VR>L=n1^SG>GMx5GL&I6bMGbZuHo#rgj{GLfu7?wCN%9OGP2rzbrLFNd zGFiMLvi 0cnd; zJuYX`gyFS#xOWnH)z#kC{#{Cgi 0tm z$51UZh)IM!sBT-}{3b@5&Y*(h(^OZ3QvnV^sV0!obr2apBujK^|CHy$^FxYRWOw$U zz0oT|=CAb40zP8CXEgXk>2zXcxz|%Xq@7<31lmU(8wjGKzAKJ@wxp1Ne?pn~VF<(n zAWQxVW$vHa^WXBDh b r&M~E8V`}G$lbmk<5h|7Ppyk$bcg4!anMWCq?c#x zNNhRipKup126fvgaBI7-r~K%2m=LUG0Jn0PQ(h-`t?dw%GA%vsLOb)%t>nz+tNZu7 zDkgVB wzfW@gjzK15eR+RXlJEth1ELC2u$uK& z8^DmDAK-~R5v=-#`AQM$F$<(!Ha2ZX;@{!awV=g=!i42jMl=krd-(g%W-V23OJyS= zD*6VX)hdMD#K4}$fP6VcAa@+`13dp6(m5W$WfKAgL!R CH zxfswjih43n8Wh)YogG79!fA*Zf~?4zr$}2`Gml8k3q(5R6(DKgrc)O}y?a_S!?n8p z$-Z^XAtRg`Nm*Q|9J8&|vq?pg-ynm#tJe5d*Uy4)mzqB#^E>-Y@|L#NLERmPq{axb zcLmt{yOtje(8R8g@##(S;;caKw)9faX_vvtyUjdP&UW8#e<6^IRsAfehULzG8Z8ly zM8zKhDO&^mLZNmB7=#@w?N+4#2V6_a>y8X}1~r`!F|yGew)Tt5fI!l6{$hL@)(&nJ z=9D6%pS9&k>K6Izo2O3O978pF5hs2J?rDv39NngSzCA7^g9Wj#{>8HmE!8=o(d9xL zN{#j?22%F$WRV|2RrHsG(20+-UF0?xEB(>Zs{2Y31I1Nq(Pv2x-K5*pEupPJK6R5O zjdT+`k$gXb1KBaeN>MN6aFDM~f`?W3p+&Bfw7j3JE%K40m0W(LFu9kQ3vzA%;hMy7 z@v (kTq0tdGp8<2i$NiF_94i%aA#}9 zn0=M%d;PU95*fc3GKm&12wU?f`6mAb_3q!~`w4)2_`7@i)A$Z&NQCpTnFi8zo?Qwj z4_M5gjnX{CqLz;gfH!6I&7;6X+N