From 9045a946f4dbdf8361e7ff79cc2007c270052be5 Mon Sep 17 00:00:00 2001 From: Arjun Vijay Prakash Date: Sat, 5 Oct 2024 09:12:34 -0700 Subject: [PATCH] feat: Add terminal portfolio project --- Public/Terminal-Portfolio/index.html | 31 +++ Public/Terminal-Portfolio/script.js | 195 ++++++++++++++++++ Public/Terminal-Portfolio/style.css | 182 ++++++++++++++++ README.md | 2 +- .../Terminal-Portfolio/terminal-portfolio.png | Bin 0 -> 39904 bytes cards.json | 37 ++-- 6 files changed, 428 insertions(+), 19 deletions(-) create mode 100644 Public/Terminal-Portfolio/index.html create mode 100644 Public/Terminal-Portfolio/script.js create mode 100644 Public/Terminal-Portfolio/style.css create mode 100644 assets/Images/Terminal-Portfolio/terminal-portfolio.png diff --git a/Public/Terminal-Portfolio/index.html b/Public/Terminal-Portfolio/index.html new file mode 100644 index 00000000..ec6c0d9a --- /dev/null +++ b/Public/Terminal-Portfolio/index.html @@ -0,0 +1,31 @@ + + + + + + + Terminal Portfolio + + + + +
+
+
+
+
Terminal Portfolio
+
+
+ $ + +
+
+
+
+ Built by ArjunCodess +
+
+ + + + \ No newline at end of file diff --git a/Public/Terminal-Portfolio/script.js b/Public/Terminal-Portfolio/script.js new file mode 100644 index 00000000..83431d64 --- /dev/null +++ b/Public/Terminal-Portfolio/script.js @@ -0,0 +1,195 @@ +const portfolioInfo = { + name: "John Doe", + personalBrand: 'CodeMaster', + title: "Full Stack Developer", + about: "I'm a passionate full-stack developer with a love for creating innovative web applications and solving complex problems.", + summary: "I'm John Doe, a full-stack developer with experience in building robust web applications. I enjoy working with modern technologies and frameworks to create efficient and scalable solutions. I'm always eager to learn new skills and take on challenging projects.", + skills: [ + "JavaScript", "React.js", "Node.js", "Express.js", "MongoDB", "SQL", + "Python", "Django", "HTML5", "CSS3", "Git", "Docker", + "AWS", "RESTful APIs", "GraphQL" + ], + experience: [ + { + company: "Tech Innovations Inc.", + position: "Senior Full Stack Developer", + duration: "2018 - Present", + description: "Lead development of complex web applications, mentored junior developers, and implemented best practices for code quality and performance optimization." + }, + { + company: "WebSolutions Co.", + position: "Full Stack Developer", + duration: "2015 - 2018", + description: "Developed and maintained various client projects, collaborated with cross-functional teams, and contributed to the company's internal tools and frameworks." + } + ], + education: [ + { + school: "University of Technology", + degree: "Bachelor of Science in Computer Science", + duration: "2011 - 2015" + } + ], + contact: "email: john.doe@example.com | tel: +1 (555) 123-4567", + certificates: { + webDevelopment: [ + "Advanced Web Development Bootcamp", + "React and Redux Masterclass", + "Node.js Advanced Concepts" + ], + cloudComputing: [ + "AWS Certified Solutions Architect", + "Google Cloud Professional Developer", + "Azure Fundamentals" + ] + } +}; + +const asciiBanner = ` +█▀▀ █▀█ █▀▄ █▀▀ █▀▄▀█ ▄▀█ █▀ ▀█▀ █▀▀ █▀█ +█▄▄ █▄█ █▄▀ ██▄ █░▀░█ █▀█ ▄█ ░█░ ██▄ █▀▄ +`; + +let commandHistory = []; + +const terminalOutput = document.getElementById('terminal-output'); +const commandInput = document.getElementById('command-input'); + +function initializeTerminal() { + commandHistory = [ + centerASCII(asciiBanner), + "Type 'help' for available commands.", + ]; + updateTerminal(); +} + +function centerASCII(art) { + const lines = art.split('\n'); + const maxLength = Math.max(...lines.map(line => line.length)); + return lines.map(line => line.padStart(line.length + Math.floor((maxLength - line.length) / 2)).padEnd(maxLength)).join('\n'); +} + +function updateTerminal() { + terminalOutput.innerHTML = commandHistory.map(line => + `${line}` + ).join(''); + terminalOutput.scrollTop = terminalOutput.scrollHeight; +} + +function executeCommand(command) { + const [cmd, ...args] = command.trim().split(" "); + let output = ""; + + switch (cmd.toLowerCase()) { + case "about": + output = getAboutInfo(); + break; + case "skills": + output = getSkillsInfo(); + break; + case "experience": + output = getExperienceInfo(); + break; + case "education": + output = getEducationInfo(); + break; + case "contact": + output = getContactInfo(); + break; + case "clear": + clearTerminal(); + return; + case "help": + output = getHelpInfo(); + break; + case "certificates": + output = getCertificatesInfo(); + break; + default: + output = `Command not recognized: ${cmd}. Type 'help' for available commands.`; + } + + commandHistory.push(`$ ${command}`, output, ""); + updateTerminal(); +} + +function getAboutInfo() { + return `Name: ${portfolioInfo.name}\nPersonal Brand: ${portfolioInfo.personalBrand}\nTitle: ${portfolioInfo.title}\n\n${portfolioInfo.about}\n\n${portfolioInfo.summary}`; +} + +function getSkillsInfo() { + return portfolioInfo.skills.join(", "); +} + +function getExperienceInfo() { + return "Professional Experience:\n\n" + portfolioInfo.experience.map(exp => + `${exp.position} (${exp.duration})\n${exp.company}\n${exp.description}\n` + ).join("\n"); +} + +function getEducationInfo() { + return portfolioInfo.education.map(edu => `${edu.degree}\n${edu.school}\n${edu.duration}\n`).join("\n"); +} + +function getContactInfo() { + return portfolioInfo.contact; +} + +function getCertificatesInfo() { + let output = ""; + output += "Web Development:\n" + portfolioInfo.certificates.webDevelopment.map(cert => `- ${cert}`).join('\n') + "\n\n"; + output += "Cloud Computing:\n" + portfolioInfo.certificates.cloudComputing.map(cert => `- ${cert}`).join('\n'); + return output; +} + +function getHelpInfo() { + return "Available commands:\n\n" + + "about - Display personal information\n" + + "skills - List technical skills\n" + + "experience - Show work experience\n" + + "education - Display educational background\n" + + "certificates - Display CS50 and freeCodeCamp certificates\n" + + "contact - Show contact information\n" + + "clear - Clear the terminal\n" + + "help - Show this help message"; +} + +function clearTerminal() { + commandHistory = [ + centerASCII(asciiBanner), + "Terminal cleared. Type 'help' for available commands.", + ]; + updateTerminal(); +} + +function handleUserInput(e) { + if (e.key === "Enter" && commandInput.value.trim()) { + executeCommand(commandInput.value); + commandInput.value = ""; + } +} + +function generateStars(count) { + const starsContainer = document.getElementById('stars-container'); + for (let i = 0; i < count; i++) { + const star = document.createElement('div'); + star.className = 'star'; + star.style.top = `${Math.random() * 100}%`; + star.style.left = `${Math.random() * 100}%`; + const size = `${Math.random() * 3 + 1}px`; + star.style.width = size; + star.style.height = size; + star.style.opacity = Math.random() * 0.7 + 0.3; + star.style.animation = `twinkle ${Math.random() * 5 + 3}s linear infinite`; + star.style.animationDelay = `${Math.random() * 5}s`; + starsContainer.appendChild(star); + } +} + +function init() { + commandInput.addEventListener('keydown', handleUserInput); + generateStars(200); + initializeTerminal(); +} + +init(); \ No newline at end of file diff --git a/Public/Terminal-Portfolio/style.css b/Public/Terminal-Portfolio/style.css new file mode 100644 index 00000000..ef1c7872 --- /dev/null +++ b/Public/Terminal-Portfolio/style.css @@ -0,0 +1,182 @@ +body, +html { + margin: 0; + padding: 0; + height: 100%; + background-color: #2c2c2c; + overflow: hidden; + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +} + +.container { + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + padding: 1rem; + box-sizing: border-box; +} + +.terminal-container { + width: 100%; + max-width: 1080px; + z-index: 10; +} + +.terminal { + background-color: #1e1e1e; + border-radius: 12px; + padding: 24px; + box-shadow: 0 12px 28px rgba(0, 0, 0, 0.3); +} + +.terminal-header { + text-align: center; + font-size: 1.5rem; + font-weight: bold; + color: #4ade80; + margin-bottom: 1.2rem; +} + +.terminal-output { + height: 480px; + overflow-y: auto; + background-color: #000; + color: #4ade80; + padding: 1.2rem; + white-space: pre-wrap; + font-size: 1rem; + margin-bottom: 1.2rem; + border-radius: 6px; +} + +.terminal-input { + display: flex; + align-items: center; + background-color: #000; + padding: 0.75rem; + border-radius: 7px; +} + +.prompt { + color: #4ade80; + margin-right: 0.75rem; + font-size: 1.125rem; +} + +#command-input { + flex-grow: 1; + background-color: transparent; + color: #4ade80; + border: none; + font-family: inherit; + font-size: 1.125rem; +} + +#command-input:focus { + outline: none; +} + +/* Scrollbar Styling */ +.terminal-output::-webkit-scrollbar { + width: 12px; +} + +.terminal-output::-webkit-scrollbar-track { + background: #1a202c; +} + +.terminal-output::-webkit-scrollbar-thumb { + background-color: #4ade80; + border-radius: 6px; +} + +/* Responsive adjustments */ +@media (max-width: 1200px) { + .terminal-container { + width: 80%; + } +} + +@media (max-width: 992px) { + .terminal-container { + width: 90%; + } + + .terminal-header { + font-size: 1.3rem; + } + + .terminal-output { + height: 400px; + } +} + +@media (max-width: 768px) { + .terminal-container { + width: 95%; + } + + .terminal { + padding: 16px; + } + + .terminal-header { + font-size: 1.2rem; + } + + .terminal-output { + height: 350px; + font-size: 0.9rem; + } + + .prompt, + #command-input { + font-size: 1rem; + } +} + +@media (max-width: 480px) { + .terminal-container { + width: 100%; + } + + .terminal { + padding: 12px; + border-radius: 8px; + } + + .terminal-header { + font-size: 1.1rem; + } + + .terminal-output { + height: 300px; + font-size: 0.8rem; + } + + .prompt, + #command-input { + font-size: 0.9rem; + } +} + +.credit { + position: fixed; + bottom: 10px; + right: 10px; + font-size: 0.8rem; + color: #4ade80; + text-align: right; + z-index: 100; +} + +.credit a { + color: #4ade80; + text-decoration: none; + font-weight: bold; +} + +.credit a:hover { + text-decoration: underline; +} \ No newline at end of file diff --git a/README.md b/README.md index d092bd7e..ff5d6460 100644 --- a/README.md +++ b/README.md @@ -265,7 +265,7 @@ git push -u origin | 169. | [Tearable Cloth](https://zerooctave.github.io/ZeroOctave-Javascript-Projects/Public/tearable-cloth.html)| 170. | [Rain Effects](https://zerooctave.github.io/ZeroOctave-Javascript-Projects/Public/RainEffects.html)| 171. | [Camera Web App](https://zerooctave.github.io/ZeroOctave-Javascript-Projects/Public/camera_app.html) | 172. | [Dynamic Picture Frame](https://zerooctave.github.io/ZeroOctave-Javascript-Projects/Public/picture-frame.html)| 173. | [FAQ Collapse](https://zerooctave.github.io/ZeroOctave-Javascript-Projects/Public/FAQcollapse.html)| 174. | [Multiplication Table Generator](https://zerooctave.github.io/ZeroOctave-Javascript-Projects/Public/multiplication-table-generator.html) | 175. | [Expense Tracker Calculator](https://zerooctave.github.io/ZeroOctave-Javascript-Projects/Public/trackerExpense/index.html)| 176. | [Check my IP](https://zerooctave.github.io/ZeroOctave-Javascript-Projects/Public/check-my-ip/check-my-ip.html) | 177. | [SocialTray](https://rococo-praline-28f4e4.netlify.app/) -| 178. | [SimplyRecipes](https://zerooctave.github.io/ZeroOctave-Javascript-Projects/Public/SimplyRecipes/) | 179. | [Employee DataBase](https://zerooctave.github.io/ZeroOctave-Javascript-Projects/Public/employeeDatabase.html) +| 178. | [SimplyRecipes](https://zerooctave.github.io/ZeroOctave-Javascript-Projects/Public/SimplyRecipes/) | 179. | [Employee DataBase](https://zerooctave.github.io/ZeroOctave-Javascript-Projects/Public/employeeDatabase.html) | 180. | [Terminal Portfolio](https://zerooctave.github.io/ZeroOctave-Javascript-Projects/Public/Terminal-Portfolio/index.html) |
diff --git a/assets/Images/Terminal-Portfolio/terminal-portfolio.png b/assets/Images/Terminal-Portfolio/terminal-portfolio.png new file mode 100644 index 0000000000000000000000000000000000000000..d270123582bc0a72c92c447914f22a09ed78542e GIT binary patch literal 39904 zcmeFZcT`hdw=c}|>SK8X8`7%{R6qzIRfvj$N)we{0z`TzQUi&K(u+zFsR{zp4b{-1 zLWpz`A+!)7K-*^9Tk73+ox z7RO)wf3dN#aooCj{Vp5Zfe<#fKLZc!14{QFRJ$ENhUAu=i4{RRV0A*}!@KaD% zC(k<`PVNt3r&P@0r~FT;$Vi?F0Dgldx1VG|O8%kH(h)UxoC95^ppt)$GPWs&zyRe?fCEkZ)j3Px=dBcEuHT!ntr-@ z>F%m-!|(Fuiw61y@KvfUyzySOLaHk>6+P3u9b^4x-1appNxJ^9R@i&%*E6=iqTii+ zTK4A6qk3umtM$WKR{7>WYX~q5oB>;a&7!-O)5ya*nIh!;_oby^?(NS7e$Lq3r$YXI zI4;WmkKOy{M{SPo-adM|Mev>L%yr(qySJhzzliSMvK>6O?~mR4o8dACc5km-dkW0M z&UO6M@21&)6J(1Sesjnc6@H5hK!o2qWQ!Hfyvu56*fcTPr}q|$8+P6*Vq;6tzj5P+ z(Le4w*d6746!a;(T6(AaT;5%n38DVc3tis5fh}>OJEeJtU{IN|gCSSMa}fPYyH%Ca z6H_$WFpoyHc=yU8igs$gp|qEO{&kxDi&Iw|=S~rOT7V+2`qQgQ^A*ek>!6(_;L&FX z^~0_Dyia?chzRV|J9h-;BeU}K>dh1puALHI^>*UtZ%6l?yoI>FQ)0a)o4G$PN#?+< z#q8ZB;dI!#n$jiUwI?D6cV9!d(?0(^zR%|Ra`sLM+q4X8e~1R}(_<}hyCv`1f<)PM zZUhI{tA-ytn{$pJdDpfm!@qu4g`4++5zq+V`O%1~ceeU}e>T_c4&B7Sn7yYb z;9opXv407du|P%-HW-t6b{dG@n=@InR61(^5h2Z6^7JY%HMH%`2z5`-=9aktT<7^q zV9>@1_$Nx3x?` zW$$;tR03BVM<;MwCJ%6_6uf_bu1+(C-_SosSgq#Qg|isK9o_=wr<*5%(Sc69jk-(! z8U{8qHz)lXZ8SZ!^VT2kNGJb1bc&vCS6|-WiDXuW|DD5)77;HuJ4HpD`qJ z{6NU_w1s`tAUMMGLgC|`TA#js?dq5yPw6Ry?PpiFIodjQpJPUxUc3Hd^u=kdGX9-f zGAEW`4++IbUmC}vHEyQM9MD*}&t9{RIe%c+ZfU&d@sE>v&ces^w18>I_h$dO?(iZ& zo_*)_1Y<_1M*C;{`{9mxMNPFQV_bYz#*GV)6>zjfuh_+ulF9&_%q`N~dx zLrBGl|Fd~*kI7%Hpy~tXkL|O$nE?IJ3HECz+3bF(e@oZs1bHd&)X{%10meCRTyoXy z=&rdGnm5upaq#IC)`1Y2tQ9*?^`JFRquoJ=#y7N29Q3?GJQ(76n`83R@GDGjs$I@b ztB;nZ+tRGilR`G{wghHs_R-ui&@MIVR(I7a?{{q<1DJuTo}+YkHZ8W`!+p^eYGosJe`mf<0n zcpUX!BpeKpapidMNzrr9_8&j}Qh2VczWmtJ8=!E_XI_7fm7SM7H~3}(uEAp7-3G+C z;b6phQDP6ow@NJOh}t=>~=GHDo1wed{;<-g-wdw zijg^RT2Fru>hUfQXzqg{J)HqEy7GSAY3|Xc4E}%+FwAqI&Yp?vI~0FZ!Tw753NV`M zfSA5j+%xOBer%^u&FwRiBeN*d*wpf}1IdVXI-S5p5tvGc;s7w9{hDnLKBZ=C8EM&!=z z694P>Of+Vs{ZNYP_(QS(U{Y(QZJyb)OOVkvK~eULHb+CxhU|{pQ+D#iTR6}|+m(HN z_dw?argo}YKM-(V4xbd|YXRiJfc@i6@1B7mtpmYZ$`2~Df2Sz0aro4h{t9<^v{Uj( zKA9f!8BjstHa~Yudg9U7rUYz`Zn%o>nZLvS9kJ^PSU=!hSPq*M=F7h@GdsI#wK0DG zaFRG2^8-$(6uRs$QwWS@g_sPk6SKGSbH5)Kq4a&lcP?-o-u-dxCe__}vT3C^YHY5^ zSGL2&xJe+>`LE)gTfM%O}?rHI0XG@~AIH zBnJ?ScrD}WUnhh7kmn}VmLrns=o}DqG{CEG02sm4T*n`&ybgpxx+pN!pR8qg4(vI- z&6Q{6F)Q{J_7j{`%|_Z?%Rj7Pb0%e%5q;B@0rQ)4%opw!Iwl|GFEUakY%QKVes0h! zBr+iT-n~IGSHGimUXX#^@Sk76sC7f!;is%DH{<=`Lz_yzXNIN{1ZoiQjhL zdPYM9@KbqpaGNs&{`2{Y*~+O*HGq5SRzF4hJGh}bzupI-)jL_u!@LzYj@ASP~j$(E%^>6soC&g{a5IeVnpe=&s+m#&IXS`*9)JCdLQ?3lB zcKKB6=2JV}=4baG5pKWD#`e5QZgZpWeQLU)?B8=KbA_}}3!0R?ELX^NsnqhAM^MAb zLXLW?;5=HNW-rUrG>yIq%XZf3^BsQS=s(xpkG@hB!aYEr5MvXw-M>ZV*Ynpl(t)0us>++!? zJcfqw#lWD5Me8sg< z^Msno0wu~aEL){;vXW($4Ssm*2jZc78qhwB<{>Yf@rM>m)*d?PQ!}Kww1LLLJ~p((NdivtEr{{HmRUehH%oqX6T7Y|n*xHG zzb&ZWjI*J`>G-BOOfASB>8Y3ILyZugx6 zf)rsyt;@U>G*XLETreWB@7WZgnIpr1TNPXF>uSjY7T;lYck-sn#Vtk$O>Q(a!ta-I8Gdk+v zq0)#$n>CcTF`v;Qn$J&Ou5L8yNKm4CxJM5ha?$q1+-**mQ?y6Uhj@iv*;-tKMcJ<% zfA^0+*xs<3gQo|D#ouY?H$1$>*tli0#uuCYLsqwzOX&|UY zeSlTq>4=#2>%;NYAH3lsYfsHmf9AH2g5bTpj??QcU0_^Ty_w=os z3?JEV;Cw0Ks+TCW$X`ssDs@PIfzeP?bJDEbZ!kK;l82z_c33FVue$!2YD4u!D^@Ef zYPx5j(iu*uI%P#4N%fK$Vmy_Dj=j8Y^m;0)=DY#n?6+?xilyzaPZmL=NXz@S*w-2; zkNJYN^^O5_{UT+o*Te0i7kIo;A!@AXnQ6{`CPswcwrh31#D_Xq=ZmCn9s~@XhXV^u zvl0Evu2rMw6)VWTGHH<@n-y|WGu+;fGj>tC%zHlv zirkEeky0#;RYNwMKYY0y9P2vu&<4?cbU%wR(7*JfbNKbt`@q&|o_&06=zg%AwI6UHrD4%WeSfS?25|qjq zuTatwB8m-uabmZc_m@V#)~+eZ{ne?Rs#;Wc2R*K4DK-#Sw?uL@=|;osylIU{Bz68` zq2m1vMbcWNh#FrV-Ns)6hZgd6zYKO(1&^HtkBq=<1!t$O)X^!3hN^In8O~e;r4=K*Vxcpf-v5M&T7Kc<_5KGDeB4W3qAH&^ z_@xt3sub5?T;_d{!kBWf6t0yOoTHD(oqZyD19$jgP;$o`N0sk(*VLRlqfw?HCrbKp zhhf_1WF`)<3|v%7oM3g#oAh5DO-fKBa_Zh(K1c*D5P=z;*# zEssv`8t+qeW#6JU79a4)o1dFL;4>OA5S4{kEhb>x1wTRgM*`$hY7Sm&DxV#TiPt;l z=lw2~>rYv&!wDvKP+mtjmFJ23TE-U*0+yd7FDc@2bClpylfGzsz~yl5`C%ws*FZvn zgWP^drEwb$(8UGAt3@n1rG&&r^R64d;_N-zL0H8rnDb}lw4E)EXmu$YYhj;c$`mDz z4jDqkG90k1Co;>!BFvv$5TApS;Nz0k~bq)i|CL>OHLgWP5ba zVfaU9m!x&mdu6$TgU?kDwC=5p zRW4R3mg&Q0Vxr_0Opf1EQS&ABKMw6*FLto)af|bz zxQJZNb~iJc>3j_sP@NGkPJ1~HZ5C|-7zEC(z?PDwn``)Fk-r6D9W|d!48dTlmSd9 zNF#+=-rh!bYXT6VoLq($GRWWu;hu=Y10TJT0Md}9*sO%KL=KoS4|aXIm>US zo<=#$PZnLSh)ps%kvsEcIeU4Ge?sPa*Zdn3v>Me8O9EVLf7Wc9J%@9`h4C?EiLSXL-Ul2!;KC? z)L5Da)7N6{SK6FfXw#-fw_PVI?N89MM7eEyd(q~|d4uI&F!J80syH! z5H!9y#D@%a`O(pN;kBB+WSr0uyF}sM<^g?6k)E#3g5cG`l(hj$!Ww=9Z^1NNZPf;(Y8fpjQ z8!mXcS~kEsTS|2C^QysJbt%KB%RQSW8*fu*?-WR{>PArDkqIi*|3pBTavMj$yfAh7 z;_=%OYHdQSOmZv>ZdzG?wL#?e42(E6zuFpeOu`#_J?vp~XMfo^e9_%#Hs+p>yZ$YV z+70M63wg!P^+7{Wer8*xd}**49!Km1%!cQ&1qB5~54S<~3o{m761_=yOL%I=2t{wp z-L&0uHy`zwY0RPFKJxx^pT2&pP)4j0seYy%Iq@Q z<#2od)zI6S^yY8;-DKYnb!F#$rHFzZrj^o%8_HCw{(1sT#kc)Ci&L%fNO-yk@&aN# zYE<<_`@yh=UpfnBLNkkILaN`6dZ+=*K2vLd8F!$s=;4v|>x{8{MUu5k-;WR|rH&87 z_+AYqFD+$~gNXjjochKUb>RV^N5S>J6o1l!PxmjqzHjk;%^+g zpHzPNc;`_@HW|RDHGU@?u>F6Pfw3Eh3>6kq?ZYg5?;+Q~F)(=k{B5_M@84hcYKAiW z5Hx}x>C@vqUQ^%RDtV9Jq#oXxtOSL?l__3DcZ+Bd01;IpMZbR!;IVwl7bGNVgD7`# z-KlO%fhzm|=B68f&32xvc`7DD9Z#UA4{5s@JEy)lvCqlbIkFy3Ywph0D&NgfnMyUt z*2FeNaAxP`in;LdJ-zz#2N20Rm#qe;p0Ii%y3;@VbwoqH+rq&syn9>Eur$&jT)S+& zPaCm$OLXtieUD|ovJM>D(lo&3c_BIKA5X7ZhYJDRNL?VL_U@Eh|C%6YFD>8wG<}PA zZ)krlrNP|aemDG?c42+}J)`b~XW;RDk5Bsk{Pg&5(aDPqIIk3ZFyzxw)rV7ecEdW4 z?&0cAq%~}JqU?QUm*qd@L#_VO17d_b{r%1Z*rvnpJb*1S{EsA8J&)Yj*npby1wQ+Y#Fu$pkicIt6s>Cj4j_ETdvg`H+)PxNw3v8 z_}kjGq6Swxd57Ln_Xk3G#F30Op)Gx)6{UZ?Ty(PDORK%+WZ@*?Ly;LbhT4YfE@Bs-T#Qqq4F%q>nUtvgq^f|bz6wYuOP5*wyz>cqk0 zG2|cEcSVEn7}R3);%eecQd6cPhV8{5yqH7nKSo_G2B+Kdz0WJ}LTP@0v%c3fO+4v?+OgTYO7B8e?*<#CCt)PtP2!p7CQ;5M6S~NRd&H~#xEL4SB zxC~qLE)aiOMXvPSRdv2o+|dMd)*w&CH?ds!Pqva&%albkj_mktWPY zh(E8*Yb)s>`m&ruXZ!8Odv={ackllSH*C1-CeLg1@b``V6Oy3H2`u5`d=&d*qbYhp9cG{klNB3?6ww`89HxxRT#Yho| z>Gqr@p-77sAlBEUwnFb`QYg|!Ubc;HNiy<5+d7(6Vk%-@f>a+=JCRMIT8Jr!Qh$%!~xyc+bT*SqQ>J=nvXWQVf@qtOz*}L*i{l5O!(fZ%lWuQm-j z`b!l~)>EBbgU9l`L<5|H z^&(6atprKs&Y$TQV*}bQhNDa`c`){u#F|ERwma{+9~=BK83vt+Ih5_|Yt)e%d=+TZ zxBE*n?J=x;@Jesf_&>#64ZtyYr>V@#eRwb*9BA-WW^^xR(IPBSiHca+G-16a{H;Gu zD&WC_L&o;Kb%|X*)5cPn0ZK;5hZ;r#??d}#$N!yiTavlU5kdOxwW@{OTl#$XSh@Sx zf&fLysKSwtXPwJuJ|#di-{n$Y!^aA=a_#=NGvnJ#9TJY#MW!1bLhz@$Z`!*;5)GG) z)Oe%`j0f@$dLN(1so&CV%)HDiO~A+%POO$eIIbvDck<{oZfwhooc#?#B-S8aLO3`d z6uZ#MgLzN%VWEPk6nV)pPyMsIf0^B3wBm=+ytiEcE)xiayHA?pycCQ z&|yplos#vZ0- zJ0fnqwFk8{xcY4DeH%=RZeMj*>vJ-1<@*a`dGkh!$#=M*(!z3%5Z4h z=}qt%&?A|z+gg3P>rW{ce`~Y$jYT(uWdb$$0#Sc6K)w>=zQr^RD#{9(G)MUdx=cJR zI8^3q3x{=PZ`_LF8G~5R+*1ZRrF?nRgqELf+SWqvU9j78Bn0?+rU-2VY?P^hxpmq( zb4z+o$I0B(`rFUKLT%YZ`2d*IE?ry+k8565(S3mQvnvuv0AjUUQqNyfpJ#dQbm=Rm zGaH~ow;EvMy|68Rx*uh@8FP&wP$4&?I}F-#q%^j*C`EB`$PfFZRJYT4PsQBKTcUWx zYY`a2*Sy^%$#D7hN?~g$fm^#l4P3}^-|Yv-zq8M$oA@Q)U6sRKx7O4Daj91+&2agj zibvoL-b!c#5Nbszp3^0Jw6ZA0I13_VRj#0bV08d1xGoC*mA1?K`rEvpq}Kf_uT)d} z{*6@;%VV5LjZrLDf%{28Y{R2Mu& zyJgD{C1$#ZPj(zjthPEit0)Uu9cKY(Ax} z;7@Y%4*?#{`8j|j^e4$aBrHgMSCcj)f6gRVPPG>$;oA_G*Z}>!O;&a;KnvY$Ug+Nx zpy4K^0hEvfh29+PZ;&mVEDpN3qndV@X;P>;Tw4~9g3+rE)3;dtT2Z8MMNv{40i9Qd3+37A|m%t|C&dsw=iM7GB2p1QFBLC3pU1K5W@N!$=;f@EWeD zY%$}x>frrhh|Dv&mtrS3zWqyY-LHYvXUrN4n8BX;G7E^YNjBSz&bF0{yiHl)XM2Ci zX~Gl= z$9zB*S+L`er{TF>>cZv=9+HI8&aTzMb*T4tx0;Fn-mUe!LbS|9^lx8c z{SNM+QKU-gcKllKCrzDSLfV|K1DLzfLAWg;&)2^4kBx=at$~_~2z0?^st}6XEp}uE z%51v{96uKPeg1=d><~xvPKz*y!v;@B`GPXNP*!xR3-IKeBu&pvb{+D zvZ0ZY=2o7y1ONfgb|?f8DyyfbnF}j4*qw_;TS1ZS>-S!cEi(Lf0MQ*f{&$^!_AHPA zb6Uc7DKF2?XQ#pO?!?-&Q(L^s2Q+TfW7#Nxsoyg=Np zl5=CZ`X+u6A^U(Nz4e)C!|ku-%D?}*Z)(cN#l>Y>{2r!OsyH<6gCEJwqt*5RiBmv^ z<6b@09^1Y+N`xH{b@$ow4(U@)E`IX!osr%AVYM7j5)8EO$t#Ln-gI{A7z}GK&B_N! zO!^|^B{H0QkpXZ?=2$O?KFoRbd7VL`A!u|?uAE;Z?}D@ai4f6%c>9$Km9L{p!zDz8 zBSb;S=NEoM!T8}>&%PaKRAv~k!QcIC({G;HpvM8~RdA0)h+FsA$6t!#JczGmR>+GP zn9UKBfDyH4cp7-a`ZDWR(wHy%+mJ=-Jpo&YOH+3r0kz1QaWZ@gEEtv;OXk|I27ACT z{YVI=I=Z?ay0RmU>~dd3JqLl{xwM2{a;CqUkU0=|zDQw=995rrz^nSb>W3z2LFtZU z_vg<_40oepv_wkzSiZdTz@MN?5XXTN;LTsl-4&xv-siL+&e6Fn*W3odSOlrXM2?)X zwwV@YJL^}bxyxG#G6$|m3l5fpB@E1<6?1Ko8t6U!+~)NCwLL-lOoi(MeD_V><^I(}##9U6Ki<71|?x#6=ovfg8R z%?_2H>9Tp-aq+7YRAsYBgEuY~Jk|i56T%i2LXC}b|t&W?;61JTpQn9AwzNY@+ zp=T6&u?H>}Ot2i@JTpiQc-R=f$edMtP@LDf=<>Y>RHf*1SEo+Z&;3<<_^n>(UlCuk zrF0hyJ7%HF%r0z$54Jon8>$;1);zF#DL}qM9I{n-CLQ<<1x0YMUN75plBo0wBaiu)?5u6!)Bq&I; z{zp2(vZ!Of_E4g*MAJ67%h)6f1}bc)eNzN^Be0Uvo*yp1D?){7QAs zO2k27Aw5&zh<9yUOZpID2-@bC8Bc|CASqgZMWvH8#_5v@_ifO@MEaxnA=wWW*$D12!RbzuaCYpycSyzu>ZXr>U zo#rz0P5v)cwf4g>A(=tsZsvIIi74}>YV|U!O$g;_YWc&SvpOLAf{Se{1B+H) zM<>G_ss?Y~LU#p?&zL;7%nUkurnKJ=%pJwDcSqUW0bJ-dk4TzS{Tmt6ps@^I&ffKg z=d&8xsziyxzUIEU0R0{wsj12R2=BD=cm7gGFpO(?SB$|_Q_WsTy;RaLU}vQvPaSxv zSWtGsnLJ)f76Q$lHie$gc4#W15RXNvtb~CKV4Ga1DKO!9iRmvg7vL~wP}OPoi9_FvH3eaUiFf!^&VftHMT=|tYBi}j*2 z4M<~2v=gF4x}w&&dAxIe{m@wO5yVCApyE`J%@;1O(RA!LEvpWOi*28XRCIt}rAO_> z$ze;$YQJXuCeFmuK-UJD-K-NEP%RxBfeg^bRe?>DRFU(#QKrPr2a%%4=95r!^XZ&LSy87I` z_xgNf7j}$Tf6D&hM#HnN$%V>;>z8--mayL$V$JivaY)7EO7KzG^TrnZ^OIb00`wPX z&{>FMz$IVxJB~9C?zW@d-F3o4P%gbhT){J1Q>(Uc^rcz;L!V!?MwP_EJTABg3_q<& zX7b>hR)!DL>KP9hKVQP3K1?Pm(0!rY4@l`Y^9~vK0bp#9!+Craw-!gtxi#mLbNe^e z6iM_~;|;T4!bsw!JjO1`6%V|0<}NFn_K}LB0`R&~t$oe?cW3Aq>&0?A&!1=$!(=s< zDeBe5mR|Sj_7NH!vRWS0S8yQvYWg&FPfDRiMh>Wt0?nJ?pIroMD9)n?aO*bnE`?5AUGb zvbpr-fP4(zqOxM(9ZS~Cp{sWV=p{Tv2c47+_AD>~a|Yqek@?-6{mZzRxTbQ!$1v~ezIwRM>3NfsS( zKsUTNqM_3o2bU0uNraWb;hhn|MqQYTlLWsqnY-ZejpeL3Jl7XaEdfXj4;VRCgJ5L? zeNAk%J-#?ym6E(cagRi=Bfi(DTG5XT_&;a0V}ezzB#KVm<+@i&H)(IU1X*xw)=I)g z_aB!YdFZh)@-UT4(>p2eB*x0l#%Fo?EHHxB(C6mF6h|z54Rvu< zK_*$t!F}I(hm6&DTwpjn)zbJPdTrq40>c<(jWAq5K60S9#hu0hk)+G4Pp$n8 zVnaKz-hDvyb}EE%eKL3K<@!A`?uWo%G4ndH`NrcSr#ZV<#txyX?_9_MDG*r{C^Jvt zhBm_20|K3^od#o@zvw`8+c)pvxVSH{Xm%h~FkkiTy8mLMfXYQ0D>E}LlMy!NSAcf* z!r!WuxiY>`l~P!pwZ6@vIU2GQ2=X ztcloa+mx-HDf}GG2F3X6E)G|@Mu@OxwV?E+s)}na6_Ut{3XIuAl$vU14H1C-lhO>J zw^s;6a~=<_k#qoDxNu_M=Z*e{EsdykxmhT&HMdBLyh=dP*6QzaRUT47;Ijc-wTe4- z3-9$`v~n%oAT1w?dl3;_+Eg;}EZ29V8b}%0tPis#>^EwT^>B@AG`%T>REtB*Hr30{ z4A)F87`3pDylM7{!?BhHB%qX;vD5m8Sra`dgx%tco0llHr^L8#?@?S_z=G6h#71eB z#)9zBUDx&sB6)>qG3?YE_4s{Mjee)pQ)=u2;$#LZ1_z~8>sjElrQPB}Q!#wt^$@+d zy!CowbilLTbZ-)#EYiA4bG`gkc_V!lwGIe@?z16ru#xn+it1P3Qq>0fgE=caKV5-~ zYs#7Op zOXq8wOL84IssV<_SkzVBBf`r(^`WkeYRGvtBl1GdLHvooaJ|FKRFDMHRscp`-J`Fm zk+)pqL4RD-XSjOfUeq5s#nMfajLpAjhTYw-__L=4q?;OgP4{dYvFwjz4t!HQQg^hJ zOKeCCTO^>OTOtJUvG#Kfs31KhA1p>OyFHp+SZ@grV4oKp*8)&(b7;B2Vino*&OAC7 z^<+w{%r}ln5r^+Gct~f(=3Ddp)69jX^{xw7JA0gn^S=AzVe&Ugn%88A1mIJ3+4m~Y z6`D%RwBi_M1T^;A>k75d-1*8tL+&a6iRr`hZly6aZenNVPzxp1NU6GGHZzVO&10_W zzy7ShOx^t8&w5y`scu$kL#+o~o%8O)?>G(iBtmzcxP)&~t(7X|JQY3o=dx_@34`8ZYCZ%XSW(*S>2ZGu@L?yu7by{T)-1At|kz60Jw1l{nM!^0u zf0$7rk+%?6Ug0f59_crB9#bR}=CSV@-**$#JfR;``5o+{9?XsWu)KLb>%2KiR7^is zE;2{2rZ#sQGTn171Ue^W+*IU2JpPLH5eoS@ekLw^fc`^2D!%_7PtyuD&Z5Q%(SGjf z9$y^Q!;WTlkU8Kmpp(wci2>q<^w0A`4YMz$rNYb0bZdGlg5j@3Z+`aky z!+9V&*>3FryCI5OpAf#TDIGE|!cj{6u{D09Me|K&cCEM68HK9U~R@eLwXsX zLqh6hHI&(FNv`I{9uP;qOPpti*E9NXbO`Cw7oCtdlSHKCMP)_I z-7EK8gBhud%x6NStT?Ol?#6?i{govjm$W*btYf*v#oFWe4gp)IE>)FSn9B;vdlB$3^X%F{^u~AGSf-U(e69U{D82v_XGo#=>&1cfoIlK|EB*5F zBrfzbyTeH9ZIn1eT1j+FsvlWS^_lfef^Id|Fs}Wp!cJ6o69|NEj9Slalw!3GMAuAx zPgW7nnp7m85KG@O+UEu>`rmgsPo7}iSm{o$%|hR49pcj+uo!u2dY%w9>&Vf8*+aUmw&afj?RKB&zt>q6?@OIV?^oBx$zP*{Lr&l zvG(v59@>gyN_#^{cNybZ|Hk7m+upJLB&=~H)BpST!tAP#jGHvE`x7M^y3sREJE~C6 z9AG$BP;juTlw_vN>D%*Pc3-Q{Dyr2=F);7FY&9g<`DsB`K!3K zfO3JG#4bSZZei?aS80lThDI4GMMDpZWR4`vtb?k#p{v*J<~lhfEna40Uzkz9Z_pdl@J$}gObU9b{J#e7?YtSd?(PmXl*T$mjTW-V3$ zNe-IPDQ5nKYo*y>bw&Hj)E1M9Q}72J2Mk9@MUgXSu`*3wm`bHd;kx6lAD2Z`Ab4qkifj=y167;BHJx3ZWQsl zW+f%L-`6q;P{+o@$3)h?k0qx-CP?oNH#6mtvr2nSU0Id-iXb9_o%aRNTr!U2>~AYuhFFjUKx@q#}j z=B^=GWK3MWG*8u(^&CMF3$9&#@&(gR>FnmvZ>E(}$gO8Wa_5x<{*HsE#Hp^M7l>YZ zQKsMqsmawbkxzaD4tXyA6|2^QmlGtSOCo1nmoO6@WGJDs>&Eh%qL(uM1tMr5>fI5% zybIEs)hbduWE z`7@qS^66V$09-Ix?zA&hn=!SO2;R0rD9b^zdiF zEoBi}{#wq#K4&z)tW5U8g$re72IN31kE#}6BfhRa#V-$&8RCtSJ@5@l3 zz+IVv6fsa7x2z~MtET1xjh{12z^~bb7$9#Xbx~+BkN&VVee`e(#)7ci+2+LXh zz5KpKWqEFLSi@|2pJ>f&k1)C$oF4~I1<)S zz!tX<0$@oRqU-A5nw;|^h-tL{W^QT1fhX)1%M`T}L=4o<6`@8;AF>S3mfD|fvwUcA zEK^+Vu7%?FHyj5C{ao)~vcFd$2sS<@h4%8(E+Lk(u0_an`(;F}VqU0XT&lD* z=w9zVV^ z9N5Y^03_rD;|KZaBg03fN4z{3Q?x3Fn4PZJ*!TYq`2wW)|35CfGatVX)7+xN?;}6~ zBK$rAbc+>!r;Th;;kSAMi12&s&lW5Ek8J(j%g6+aGhr%gCwQ+K6%ZA3vfb-+Yk6J&)87Sd;0U;%n$< z=ws-&ng@}dew>#X!$gm5owBffT{&g@x1IOsdXwmGDO*JNzY-LW z{cGdWsek3qUEe+}ZL9wC@PF-e{oU~H?#>G;9?x$9`K>GdnRfh}6u(Kav&f$L zy_o)OZTu$1Zxd^m7mok7Hvg82-=z5MgY5FcZ+A@eZ>jiAir=Kz;f3FL#c$|lS1bHR zvHl+c^gdlSZwLxN@7tM|bl}La|JB}?hBcWbjq;5xIEn(wzG^!ytsoc?*%QPTx*LU7 zWRX=80a;@RJAtUEtRXUp>>whbEQt}>A#ouD*`i_yJ4%4C1q=|vlI6a3;(YVmx!=9_ z$9bbE|HC#@#XrZ-!omXa;ha)dgXqsk{FKe7P|w{idF=u zTVlA^UH+itt(~E4veNc`5jc-(QZ_4~n!8+)UNyJD> zNm07Pb7&h;f$;31^r{B**19Vr0HdOzaU6bp9~q{pqLLgr9<6Ox4Avm=ruDlmL?iq$ zvNGKbBc~`30%(=9%gflJqM}ghnH;_YC6rTcKUHY5kt-h}#;)*H~|MtfIzjaJoBqSs-rcHYSP_1Ogt-RgB?Vq^bY=orqt zOH-&%lOKC-VIdV*@0Ecka}9eiX-7Yecp8ofVq7iuDW)jjDgTsu+SgzN!C9y8wkWSM z^d*oFo|9OqE#?RP2)uy*?Q_#t{$l4{B~N3yd%CBgva`~V13UIC0&fShw-)ew#CGuY z-$2yMJw^(vb`m>5yL2B-+HNu-!suvm;Vf6@9y5hidkLtl%fWNGS9s>)LPjrbLBgrs zhi)qWplHedX))#CpEF8?S%GAxg%6}{^MOBJQRCNZL&d@{Ohw7-218|Y{3`4UQ~E3H zv;Pn)to`8qvARIm1@`g*?a9LAy=!<9D5NFU&-^R3 zAu+W~L<)(aHR*l((z6#%RI%9u<9f9k&T!!xtFD8lYG7*WIzA5uN@N|Un@+vSBE--k zNjl3!uwDy~=Q8FNg5MyIKrqh5(MRIfY#>Pu=*uAm+B+I1w7BRe1RZtt&3Pu2nmUcy zHyB1uATWlZtX~&5M~k{3B_s0Al0zUloxKpwb@Q#BuT#E%LUaA&y}fE(bxS~zHzh#r zPS^a_4_5+|*wco#fO-vM!ygl6!&=`YC>Uo-qpg%%-8bSz6vL|umZ+9XmmarH2oLPQE>9>aZRUD)5wNcU{C* zUE|8O@KlJ4+Z79T+aR|XA_un*BAJ9JH*4e44zPK`wLe-{(Dp&@vLbR{d-NjWZ|kTK z`|0A|ArY~=y7t6QB8AUF!-V%5r~9xJmNPz;ILW-xVGY}$X>}ObqYU;H7Z^`f*HTV< zZ#=VMeDJ&1?bg4BPgR4UoJT`h&B`u@n{MW?WoZgqXB>5-mzrBA z!SZyKev*RH!-Yt%{h3wp4!1qZw_nm%W+z%LBI4G^2V;U&Zp+7PLqDe+C-6xv`XMci zqXYjDw>+XKgIXsJM)Ysh9{RN;l4e;=@^>5M4tWsbkm#mxUk9q8+--TMHA=Hu17(Ly zP%4I*H8PAd8i@Nk-WBN5wCrXiIA-pK+4_HWia zRhdFRJUMUzWzjbpbGB7jN>XID@h?eR@T>}o)LRcaks@t_hMqUSIIXU4&bI=DOr>$1 z&S}GPwMR2}*JHNQEAnAF0jA?#HJf-UYKKcnr5AKPG-C z-Da>Uf>T66O~vHgj)_zz`lMpEXSh%GoSR&B$gpxZ)?CR(Tc3K8Z0XKjpgRgwKp&C* zsKrvc4SG5{trc~GNc6KuRjrs?>ouRoH8&bT$v*5NAGF#8x@^hE+V%8}?d5j#Hi1KU zyvv1})=nVBn-*=_=UHqBYW`j_MFaL0 zF*OHoA8(sTsgMCH*?5{AP-?&N+ zaU(C4D*HmEZ1+gVY7Mjfu|jMcV(~@(WaS)N z;6-{SEo;U3t$@xyLipGm zcR5ZI5$|pi73c2RT4S%C9v54jq%By9MNDC6i0KYnn9sD~JbF3Ln7#NVDsDLTS<)5o zs*KTvRxE7F#hfby%b^9FWk8q`*l)8F8BBz?J2B*BN;Gp8$sWa4fa66Q-e{g-;I|EL zWF)rF(I~*4T9muO}1U^aiFNd&vAJ- z?BHu0t_|>J4Sc0imQy{SO6;mt+1fhH?mQsHm}O@uN3Xi5$3P<&W9!sciB+)qozxC% z9hh}|U0M;Jg(WB#zTkVn%6o-2)u}b4aGPo!uwi0Rn!b6&!E`4yWxB_u0JUjpzD{mK zT${YBnKS}!j_zO*z6?)R9>}CJz6cxj(;rY7pPfnjseDvuPhQn&>k%Pyh}=L<$3DpJ zit_uph}R%PS%N>n!vNg1FlVWYm@(lNmJz6bVV_yx(AGw0VZJurh257ixZPPwVCEi1 zpe7B?R4DtFQz-&YDS?DKyzbFr7y@Bdsw-sUv7B>BtJ8eMV(($lWx?3#pi!4-{1Ucp z0<5Zy<)8302Q|fge(di|cX2a`r@b@YsED2XnoohvPQQD3{lfHyVX4jJJ0bHAb@b{V z>POKT{=MXWd>=^OD|U93-AS4_uw7)KewJeQ5Y1gNDd3w~SL1nw^Ipud6;F2s&{nB7 zBg2N<@j4r8U&MeP!%uiU)PM5=gW#-HEj!l7@kqLO(@>rzYA$1p-Rp;ah-dt&j^6x3 zJ!&#H$_IKvWSpF`m;TEY9=Tz12+b~xs%upxzo3y6^Bd%|cR!mY0mc3j4UQRLHJ8`yQc<|hVF3`-Lk zpG#JL*L3#sT4i1+uiP~6Q%@~92~7&mCi_eWv;?(s29k9$FKY&=4{t}QSH_m)5tPl; zdLQ73KZP7!cu*2&-|@v&>9~o3x)d?~`N}bcfp)3-PXdiMnbalhS!Qce7G-daf7k_}-(Ou|kAD{g*?>O@TsGV25oR-+Ny8wl<9c5}YxWrEZPw_=B@w*HAr{ zqdh&GH%oftUgNz+ZevfIQW;apb{5#Z1pof_+N3B>?x5FRP1Tp)jI8P5jEyfcevJb? z?6Zi*)=HZRg@x{oYn3HYGjpo?PH+5qC%A5LP77LRpAherwhZQQFA8p-mmZDw z8ePNp>BB)SM-Oc5RZGrXjm}81z6@q(XIE9&_1^Ho<~dnU%!k&gbU$<+PxkN~vK(DE zBPq$CR?-JiWXmmwWElOL~%%fm`wGYh8sCdOp{-JJWaymNJ^YT(vOyrKhWBAJ&ao;3E%p|_RF{4UN4^u}b*%u@QP-F=K zUF2Oe$iK9Ak+P-!3$9rDjVGqdN&@<@jqt1y~jnrYt!+xc>sxDeRpjxTchRewuCLpy65ZLNm zFrlP%C`qulp*?+KNTDU(&t^3A+@59XxFKN^SBMb$En^EKgVPOr1^5IX;5JEu*(8y= zl(N0l^wWS&uSjGSA1MFuqVYK|a<0|3OY7F=wljnEt}bbUXn|{mhH`qao~GNGAlqL2 zn{*vme;uaR6|25=M!GQ9eWH<*NtpioJ5EeYe#>Hqxk~z3Y8EwasAF(_&J5}?Mj49j zLq^d9zq0My%U$(7mYW+HIJYASsRm~eU!^?4J?=-Epf4Ei$$h-C0pGMKP7dyUpnSn} ztLu-ZdQiyb`L{ixQv_eym?DzOpP0la;R>31Q`G}q6opj!&!Z%FC*7LPDqx3Gx5TsrDY1FsccE+rtZ@WQq0NqZ2Q9lV~SjU?KX_Uawrlu z??o_JBQT~PS|7|NhPu;QJQFSuV01o#m7oUo;B2Bl8$p>nxa44;&KtaEafqkuWk!m9 zYBr4P(a#EqY7NeU_534RfJr$KO79!w#B#|4Ri^o%G!3wFVi)DajqSc#toN89ue3zZ5?x zyL{AHM9~~Hp!**;7)j!Ypb+4(X2x6Ld@&^v+!zW)PCSgAEG3~MM>k&E!osK5a~p)< zB4Me1hmKe7V4KA0j(U$4C|$a{eooG+h0nXX$nRsn)9N}JKR!9YBCL|oT-e~|Yh=Zn z#Ny3RbAj_)Kdc+Ne_-QNpHvr2GpUeNXHh@i3>v7J$9NUZeJuX+=O)-{wvXrvCMxV8 z%pC@38OQCY#|EWyls@T&9`Q^dnV3YEMji~|ZL}f0IGaKxH)!04iv=plrD*nb)LhG0 zl;eFEa9=n50Ys+Xd2?hr2gS=`wsFciAH1T6VR+3nitt4YCw-qW@>CITMPLlR2;N_wIy%K3yyeh@ggTXOGv3-8tlpXT{Vt=*7js-JP&Fv>{Mb8GDj7z{VFZoxUndlKg_OE>JDDM6unoln6bel zji^Z_rjr&136b|0gR5CgVdr7Ci;~d1XErrD9K2Mb;N_^CwTpF)3ivD9&_3C zU%P1(Ntlmi>6#XEuuYQGeU6|0_3EnxLwi@g_OTh;jUo zI5qm!-+z?6m4@?B3rs;5Z}_(w5JUnYakK0Vwf+5r7zp!Z{y;mREJv6+&azyNO^|Gh@Kb?Wc7 z?uSIl*Ej2bo+$)kJwfgkKjZ;Yx6|oCE;)PU8~kE#fJ$#r+~K zrF5P)Kl-@I=HY(Ot_$q{5IuJ-q5IR!uUFFA5B?u9JMn+d>OIN-lkGd%8 z_G;3%PiELg+Uoc2htYu|@4KauL4{NygQTZeHdJXz6HgFkgp7Z00+nsHZj)Jc0#7;K z5smPE%r&<^kXi8KHQ$bc2j9VYKh`sMhPi=HjW(Dt90vk;-QuXkqx>GOdy!7!^G``< zeuZsGHGaS1(A>Y)WKNKLnXP>1WlHz&f3*?~|ENVC85RGdq-i(WTh|ry=~i1?+qC#@ z?EAf{xo?qWvN>u15v{7U*2#$5Vwc$LKJw_8`;6db2QW?9fRZKq?&L`a(U8xdrH;J#_0%aKL&){kpYjqH+DAv-`-YM! zJ66lYf?S@4Z4eCjPYuSv@`lFKk>`O(T%|R|uyTwkVw|gpfXGMhXE%M-oZ)DLkr71t z91z!_x~Jd0JJWSg*R&TkXk<`-Vnk{yXuC>PgZ^|9#c~$`k)u^N6EO4Qr9&w*KiIvE z-x~y9SAW&xu5#yL?{t6yM%}DGCuTb!815THJHNfVmQ{=!VvD-I|7&lDLM^7)A8l~U z#sF63JM2vB%!!!^)zv-aED2OK;v_VU6J1C0Roo2wiB<%3J;=e4Vubu2#5=2lbi||q z-P_{o>H+uy%Hx3Vx2oF@zSMo2$h1P;lBb;a5Y6?daK==N)(JAe_)mjdF5F|j`glar z`*qm7?UR9Zr#^=qe=kQ+c?N=W8H=wIb+J5NH}kO4wo26^z8uuMRAoe@Z9fgTCVg$d zz}VQ>6L+@1gTh>2_n+Fx?f5i8UtE6^g!QTCI~W>>Uci%3{N3O~dl1a+uf};}o;fUp zysC;pCa}VLdb7^tWZo6XR!0hZL-c#r-SeVxj?%dd;@-nwdzx{ ztTlW_`pxZtsf3p_nGq+Vxo-;|iZ;Mjm=cE=-|=%TYzVl@k z`OQ2Nah`;tl@8La7E?HfGSC?5jP~pARCYNAEG!un_q=b~_7N@aE>su559s}g<~s9uXtn25NIkMA z9P)=7_4DV?QBC`hr@>%u10VxA!R{4Yd-`IO2&UO1z4w#~_gSdMnfHR1T!#_+W{=>c ztz0pv=$=!)_5A*S;%D6_PBV?ZY7?ECc}G?b$!q-jeeXA%a_{Uv*AnW?A; zX<}g=0gRbt7HzS~)Ph)9NR<-A&{2%9zFPpf;bWX{v_$pVOh#$4I|d2SBAS z$uOPz=<^^}%pwg*a}~|`s4$@SH^=OV>m2vh@SgL-ao|}eu|*&DX(K9jBA})Su7@oh zqk13miO~~v8vEHH>O?m4<2=Di_Ijc6o#?DXyPoYA?~C`Zm`(om&@NpdMdIz_)7kpi zrufg!R8Y8>FyyCWNH3%b#eG>#HsJ)-l>OQw8wm)}(}(k$<>K+*UobVPFr=^6tr9MW zPZqpq0k%wwUEED7$JPhOeCh`%itmQvzPg#m<@&6FbY$cT;q|3YA_Bi{Rn=PVal?Bs zS)Ul9RlX@btl%1UY*6<0^9M~Qcg?+AwXG1duLP_3tbvkL;h}FjcqO5&(981f{HEz< zjtJyOYT-~^bw3hbXl|q{36)j+ghF*TZ1ZSHJFz}Lm|#b}3jpd6zQud)k_4!dLV;xw zUO(#}!d<&rz?fg#+*1gK=pF&ApAHntm`ce$@5mwgy8Y8i022KcHAY8SXu0T$*?V?3 zgR#neSU}wt$-~VuD3~FAXjegZ))|+NGgZHcjq0*jJhd<>&@Kg!fsB^WBf1-{ zU|`u9Yv2?yV=HPTv2sEv#X2N;Xs6e1(J#-Va+ebTZ{+*s=z;L#;;@Fav#3=OWBg4NrsdP;oNI|GCVtT~pViWFa zOM1Us{YeZJ(r3_aRTI&(E|KAZMk3Ln03MP4WWB}@yn>r|(b z`1N|*yGK>kH6k-foX;e2H3QHCV!Z#IQ2XzMS}`m9 iJE8VJ6KYlEgpg|)G9cN2x<9j!emiIP3(o55?f(G)l4HjJ literal 0 HcmV?d00001 diff --git a/cards.json b/cards.json index 5993d0d5..5afc4845 100644 --- a/cards.json +++ b/cards.json @@ -48,7 +48,6 @@ "name": "Birthday_card", "image": "assets/Images/birthday_card.png", "link": "Public/Birthday_card.html" - }, { "name": "BMI Calculator", @@ -100,7 +99,6 @@ "image": "assets/Images/Candy Store/cover1.jpg", "link": "Public/Candy Store/index.html" }, - { "name": "Car Race", "image": "assets/Images/car.jpg", @@ -147,9 +145,9 @@ "link": "Public/connectfour.html" }, { - "name":"Color Game", - "image": "assets/Images/color-game.png" , - "link":"Public/color-game.html" + "name": "Color Game", + "image": "assets/Images/color-game.png", + "link": "Public/color-game.html" }, { "name": "Confirm Password Validator", @@ -247,9 +245,9 @@ "link": "Public/EmailValidator.html" }, { - "name": "Employee database management", - "image": "assets/Images/employeeDatabase.png", - "link": "Public/employeeDatabase.html" + "name": "Employee database management", + "image": "assets/Images/employeeDatabase.png", + "link": "Public/employeeDatabase.html" }, { "name": "Expanding Cards UI design", @@ -291,7 +289,7 @@ "image": "assets/Images/food-filter/sweets-1.jpeg", "link": "Public/food-filter.html" }, - { + { "name": "Food Master", "image": "assets/Images/Food Master.png", "link": "Public/Foodmaster.html" @@ -339,7 +337,7 @@ { "name": "Grocery Manager", "image": "assets/Images/grocerymanager.png", - "link": "Public/grocerymanager.html" + "link": "Public/grocerymanager.html" }, { "name": "Guess Color", @@ -517,9 +515,9 @@ "link": "Public/placeholder.html" }, { - "name":"Picture Frame", - "image":"assets/Images/picture-frame.jpg", - "link":"Public/picture-frame.html" + "name": "Picture Frame", + "image": "assets/Images/picture-frame.jpg", + "link": "Public/picture-frame.html" }, { "name": "Pong", @@ -644,7 +642,7 @@ { "name": "SimplyRecipes", "image": "assets/Images/SimplyRecipes/assets/main.jpeg", - "link" : "Public/SimplyRecipes" + "link": "Public/SimplyRecipes" }, { "name": "Snake", @@ -791,7 +789,7 @@ "image": "assets/Images/trackerExpense/logo51-removebg-preview.png", "link": "Public/trackerExpense/index.html" }, - { + { "name": "Tourist Website", "image": "assets/Images/Skardu.jpg", "link": "Public/Tourist_Website/index.html" @@ -865,7 +863,10 @@ "name": "YouTube Clone", "image": "assets/Images/YouTubeClone/YouTubeClone.png", "link": "Public/YouTube_Clone/index.html" + }, + { + "name": "Terminal Portfolio", + "image": "assets/Images/Terminal-Portfolio/terminal-portfolio.png", + "link": "Public/Terminal-Portfolio/index.html" } - -] - +] \ No newline at end of file