From 3d65a46cc1b7a33bfc6c11ce78df5e2c1723b26d Mon Sep 17 00:00:00 2001 From: Oleksii Vodka Date: Thu, 22 Dec 2022 16:54:14 +0200 Subject: [PATCH 01/15] Homeworks 1. Create readme file Signed-off-by: Oleksii Vodka --- task1-simple-program/README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 task1-simple-program/README.md diff --git a/task1-simple-program/README.md b/task1-simple-program/README.md new file mode 100644 index 00000000..8b0a402e --- /dev/null +++ b/task1-simple-program/README.md @@ -0,0 +1,13 @@ +# Simple c program with commits +The main idea of of this task is to demonstrate your ability to work with git and create correctly formed commit. +So, you have to focus on the rules and principals of working with github, not on code complexity. +## Task +1. Please, write simple game "guess a number". User input some number from 0 to 9. Computer also generates random number from 0 to 9. If values are equal, user will get message “You win”. In other case – “You loose”. main() function should return 0 if you win, and non-zero value otherwise. +2. When you working on code, please divide it on several steps. Each steps will be new commit. There are possible steps: + a. Create simple *.c file with empty main() function + b. Write main functionality + c. Rewrite code, that random number generates in you own defined function. +3. Check coding style with checkpatch.pl +4. Also don't forget to create .gitignore file +5. Create pull request to this repo into you own branch (have to be already exist) +6. Good luck \ No newline at end of file From e6bd88b0ee3740d10d5ead8d5e20f6f5df811483 Mon Sep 17 00:00:00 2001 From: Oleksii Vodka Date: Thu, 22 Dec 2022 17:12:57 +0200 Subject: [PATCH 02/15] Homeworks 2: Create readme file Signed-off-by: Oleksii Vodka --- task2-bash/README.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 task2-bash/README.md diff --git a/task2-bash/README.md b/task2-bash/README.md new file mode 100644 index 00000000..265aa56e --- /dev/null +++ b/task2-bash/README.md @@ -0,0 +1,9 @@ +# Part 2. Bash +The main idea of this task is to increase you level of bash-scripting. + +## Task +1. Please write a bash script that is copping all source code of your project form part1 to /tmp/guesanumber. Compress this folder to gzip archive (please google tar command) with same name. Copy gzip archive to “release” subdirectory in project dir. Please, don't forget to divide script on commits. +2. Please write another script, which run program "guess a number" from task1 in infinity loop, and each iteration ask user to press "y" to continue, "n" to exit, or number to set number of runs of tries without asking "y or n". Script counting users success cases and printing it numbers. Also after each success script says "Good job", otherwise "Wish a good luck next time". Please, don't forget to divide script on commits. +3. Make a pull request. +4. If you want, you may use colors to increase readability of script output. +5. Good luck From 0747309cb9cdcdb06ca8553e1134cc58830df7d3 Mon Sep 17 00:00:00 2001 From: Oleksii Vodka Date: Thu, 22 Dec 2022 17:26:01 +0200 Subject: [PATCH 03/15] Homeworks 3: Create readme file Signed-off-by: Oleksii Vodka --- task3-make/README.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 task3-make/README.md diff --git a/task3-make/README.md b/task3-make/README.md new file mode 100644 index 00000000..1b43522c --- /dev/null +++ b/task3-make/README.md @@ -0,0 +1,15 @@ + +# Part 3. Make +The main idea of this task in improve your skills in writing Makefiles. + +## Task + +1. Please, divide your source code form Task1 into two source file. First one should contains the main() function. Other one contains all other code. Write a Makefile for your project. +2. Implement options to build your project with gcc or clang +3. Implement options to link second files in regular way, static library (.a) or dynamic library (.so). +4. Implement option to check all project code using checkpatch.pl or cppcheck +5. Implement option to include debug information. +6. Implement option to print all warning during compilation. +7. Implement "clean" options. +8. Submit this Makefile with all code to github as pull request. Don't forget commit each step. +9. Good luck From caeae8451590b864808092c8df81d4172953d1d1 Mon Sep 17 00:00:00 2001 From: Bezkorovainyi_Yurii <13736343+bezkor@users.noreply.github.com> Date: Mon, 26 Dec 2022 21:05:18 +0200 Subject: [PATCH 04/15] Homeworks1. Create initial guess_game.c source file --- task1-simple-program/guess_game.c | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 task1-simple-program/guess_game.c diff --git a/task1-simple-program/guess_game.c b/task1-simple-program/guess_game.c new file mode 100644 index 00000000..843ff35f --- /dev/null +++ b/task1-simple-program/guess_game.c @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: GPL-2.0+ + +int main(void) +{ +return 0; +} From 2bd4aeada2f3dc305e3ea6a77ad6062cc6c4ce12 Mon Sep 17 00:00:00 2001 From: "Yurii.Bezkorovainyi" <13736343+bezkor@users.noreply.github.com> Date: Tue, 27 Dec 2022 15:33:16 +0200 Subject: [PATCH 05/15] TASK01: Add Main functionality Modify code for realise of main functionflity and check codestyle --- task1-simple-program/guess_game.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/task1-simple-program/guess_game.c b/task1-simple-program/guess_game.c index 843ff35f..e3d78d43 100644 --- a/task1-simple-program/guess_game.c +++ b/task1-simple-program/guess_game.c @@ -1,6 +1,21 @@ // SPDX-License-Identifier: GPL-2.0+ - +#include +#include int main(void) { -return 0; +int user_choice; + +printf("User guess [0-9]:"); +user_choice = getchar() - '0'; +if (user_choice < 0 || user_choice > 9) { + puts("Bad input"); + return -1; +} + +if (user_choice == rand() % 10) { + puts("You win"); + return 0; +} +puts("You loose"); +return 1; } From e5a43ad3838c0ac38e6eb7a3dde1615f06201ef2 Mon Sep 17 00:00:00 2001 From: "Yurii.Bezkorovainyi" <13736343+bezkor@users.noreply.github.com> Date: Tue, 27 Dec 2022 15:41:28 +0200 Subject: [PATCH 06/15] TASK01: Add .gitignore file Adding .gitignore file for future --- .gitignore | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..e69de29b From 826d972dc1fc5cd8e1381485e32b1ff34a758e97 Mon Sep 17 00:00:00 2001 From: "Yurii.Bezkorovainyi" <13736343+bezkor@users.noreply.github.com> Date: Tue, 27 Dec 2022 16:08:46 +0200 Subject: [PATCH 07/15] TASK01: Move random part in function Implement function who return random numeric 0-9 --- task1-simple-program/guess_game.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/task1-simple-program/guess_game.c b/task1-simple-program/guess_game.c index e3d78d43..cafec55f 100644 --- a/task1-simple-program/guess_game.c +++ b/task1-simple-program/guess_game.c @@ -1,6 +1,8 @@ // SPDX-License-Identifier: GPL-2.0+ #include #include +int get_random_numeric(int); + int main(void) { int user_choice; @@ -12,10 +14,16 @@ if (user_choice < 0 || user_choice > 9) { return -1; } -if (user_choice == rand() % 10) { +if (user_choice == get_random_numeric(user_choice)) { puts("You win"); return 0; } puts("You loose"); return 1; } + + +int get_random_numeric(int user_choice){ +srand(user_choice); +return rand()%10; +} From e15c7aa1f5cb6e5ad849624d1fa876b3c233e01b Mon Sep 17 00:00:00 2001 From: "Yurii.Bezkorovainyi" <13736343+bezkor@users.noreply.github.com> Date: Tue, 27 Dec 2022 16:14:55 +0200 Subject: [PATCH 08/15] TASK01: Fix style for linux kernel styleguide Refactoring of code for compliance of kernel styleguide --- task1-simple-program/guess_game.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/task1-simple-program/guess_game.c b/task1-simple-program/guess_game.c index cafec55f..d12c2636 100644 --- a/task1-simple-program/guess_game.c +++ b/task1-simple-program/guess_game.c @@ -1,7 +1,11 @@ // SPDX-License-Identifier: GPL-2.0+ #include #include -int get_random_numeric(int); +int get_random_numeric(int user_choice) +{ +srand(user_choice); +return rand()%10; +} int main(void) { @@ -23,7 +27,3 @@ return 1; } -int get_random_numeric(int user_choice){ -srand(user_choice); -return rand()%10; -} From a5f999e8369058cf6e9605cfd961c574375ec3ca Mon Sep 17 00:00:00 2001 From: "Yurii.Bezkorovainyi" <13736343+bezkor@users.noreply.github.com> Date: Wed, 28 Dec 2022 19:27:30 +0200 Subject: [PATCH 09/15] TASK02: Add script file for backup source code Create empty backup_guess_game.sh for backup source code of my awesome program --- task2-bash/backup_guess_game.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 task2-bash/backup_guess_game.sh diff --git a/task2-bash/backup_guess_game.sh b/task2-bash/backup_guess_game.sh new file mode 100644 index 00000000..e69de29b From b7e09b090c18dd601d1cc55d357c85f1cbb3e455 Mon Sep 17 00:00:00 2001 From: "Yurii.Bezkorovainyi" <13736343+bezkor@users.noreply.github.com> Date: Wed, 28 Dec 2022 19:50:46 +0200 Subject: [PATCH 10/15] TASK02: Add script body draft Adding some script of backup service code --- task2-bash/backup_guess_game.sh | 40 +++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) mode change 100644 => 100755 task2-bash/backup_guess_game.sh diff --git a/task2-bash/backup_guess_game.sh b/task2-bash/backup_guess_game.sh old mode 100644 new mode 100755 index e69de29b..13e016a1 --- a/task2-bash/backup_guess_game.sh +++ b/task2-bash/backup_guess_game.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +echo Backup source code + +BACKUPDIR="/tmp/guesanumber" +SOURCEDIR="../task1-simple-program" +RELEASEDIR=$PWD/release + +echo Backup on $BACKUPDIR + +if [ -d "$BACKUPDIR" ] +then + echo "Directory $BACKUPDIR exists." + echo "Clean $BACKUPDIR" + rm -rf $BACKUPDIR/* +else + echo "Directory $BACKUPDIR does not exists." + echo "Create $BACKUPDIR" + mkdir $BACKUPDIR +fi + +echo "Copy project files to $BACKUPDIR" +cp $SOURCEDIR/* $BACKUPDIR/ +echo "List of files" +ls -ld $BACKUPDIR/* + + +if [ -d "$RELEASEDIR" ] +then + echo "Directory $RELEASEDIR exists." + echo "Clean $RELEASEDIR" + rm -rf $RELEASEDIR/* +else + echo "Directory $RELEASEDIR does not exists." + echo "Create $RELEASEDIR" + mkdir $RELEASEDIR +fi + + +echo "GZIP files" From 8a413a333c5a2f3064f74356dddb83a258c92622 Mon Sep 17 00:00:00 2001 From: "Yurii.Bezkorovainyi" <13736343+bezkor@users.noreply.github.com> Date: Wed, 28 Dec 2022 20:08:54 +0200 Subject: [PATCH 11/15] TASK02: Change backup script Realize expected functionality of backup_guess_game.sh script --- task2-bash/backup_guess_game.sh | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/task2-bash/backup_guess_game.sh b/task2-bash/backup_guess_game.sh index 13e016a1..a86f9c80 100755 --- a/task2-bash/backup_guess_game.sh +++ b/task2-bash/backup_guess_game.sh @@ -8,7 +8,9 @@ RELEASEDIR=$PWD/release echo Backup on $BACKUPDIR -if [ -d "$BACKUPDIR" ] +echo "==========" + +if [[ -d "$BACKUPDIR" ]]; then echo "Directory $BACKUPDIR exists." echo "Clean $BACKUPDIR" @@ -19,13 +21,16 @@ else mkdir $BACKUPDIR fi +echo "==========" + echo "Copy project files to $BACKUPDIR" cp $SOURCEDIR/* $BACKUPDIR/ -echo "List of files" +echo "List of files:" ls -ld $BACKUPDIR/* +echo "==========" -if [ -d "$RELEASEDIR" ] +if [[ -d "$RELEASEDIR" ]]; then echo "Directory $RELEASEDIR exists." echo "Clean $RELEASEDIR" @@ -36,5 +41,13 @@ else mkdir $RELEASEDIR fi +echo "==========" echo "GZIP files" +cd $BACKUPDIR +tar -czvf $RELEASEDIR/guess_game.tar.gz * +cd $OLDPWD + +echo "==========" + +echo "DONE" From 1c806b2cb78ad9b350a626e1a7f6ad60ce45e37e Mon Sep 17 00:00:00 2001 From: "Yurii.Bezkorovainyi" <13736343+bezkor@users.noreply.github.com> Date: Wed, 28 Dec 2022 20:14:48 +0200 Subject: [PATCH 12/15] TASK02: Add loop_guess_game.sh Add prototype of loop game script --- task2-bash/loop_guess_game.sh | 5 +++++ 1 file changed, 5 insertions(+) create mode 100755 task2-bash/loop_guess_game.sh diff --git a/task2-bash/loop_guess_game.sh b/task2-bash/loop_guess_game.sh new file mode 100755 index 00000000..044346fc --- /dev/null +++ b/task2-bash/loop_guess_game.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +echo "Loop Guess Game" +echo "Good job" +echo "Wish a good luck next time". From f46011a71a134ecfcc85b91dcee6376e3def5e36 Mon Sep 17 00:00:00 2001 From: "Yurii.Bezkorovainyi" <13736343+bezkor@users.noreply.github.com> Date: Thu, 29 Dec 2022 09:16:41 +0200 Subject: [PATCH 13/15] TASK02: Add working script of guess game Add code to realise of basics functionality of loop guess game --- task2-bash/loop_guess_game.sh | 66 ++++++++++++++++++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) diff --git a/task2-bash/loop_guess_game.sh b/task2-bash/loop_guess_game.sh index 044346fc..a622bd67 100755 --- a/task2-bash/loop_guess_game.sh +++ b/task2-bash/loop_guess_game.sh @@ -1,5 +1,69 @@ #!/bin/bash +guess_game(){ +USER="" +while [[ ! $USER =~ ^[0-9] ]]; do + read -p "Guess a number [0-9] : " -n 1 USER + echo +done + +PC=$(($RANDOM % 10)) +echo "User choice -" $USER +echo " PC choice -" $PC + +if [[ "$USER" == "$PC" ]]; +then + echo "You win" + return 0 +fi +echo "You loose" +return 1 +} + echo "Loop Guess Game" + +USER_INPUT="" +NUM_GAMES="" + +while true; do + +read -p "Are you want play game [y/n/Num games] : " USER_INPUT +echo "Your input is - << $USER_INPUT >>" + +if ! [[ $USER_INPUT =~ ^[0-9]+$ ]]; +then + case $USER_INPUT in + [nN] ) + NUM_GAMES=0 + break; + ;; + [yY] ) + echo "Lets try to play game" + NUM_GAMES=1 + ;; + *) + echo "Wrong input, try again" + ;; +esac + +else + echo "You want play $USER_INPUT games?"; + NUM_GAMES=$USER_INPUT +fi + +for ((gm =1 ;gm <=$NUM_GAMES;gm++)); +do +echo "Game $gm of $NUM_GAMES start" +guess_game +if [[ $? == "0" ]]; +then echo "Good job" -echo "Wish a good luck next time". +else +echo "Wish a good luck next time" +fi + +done + +done + +echo "Bye-bye" From b0451639a4aaf5702d2c8e17bfd99bc3ca7abb8b Mon Sep 17 00:00:00 2001 From: "Yurii.Bezkorovainyi" <13736343+bezkor@users.noreply.github.com> Date: Thu, 29 Dec 2022 09:29:10 +0200 Subject: [PATCH 14/15] TASK02: Format code and minor changes Format code with shfmt utility and fix sometime errors --- task2-bash/backup_guess_game.sh | 32 ++++++----- task2-bash/loop_guess_game.sh | 94 ++++++++++++++++----------------- 2 files changed, 60 insertions(+), 66 deletions(-) diff --git a/task2-bash/backup_guess_game.sh b/task2-bash/backup_guess_game.sh index a86f9c80..01b899e4 100755 --- a/task2-bash/backup_guess_game.sh +++ b/task2-bash/backup_guess_game.sh @@ -10,15 +10,14 @@ echo Backup on $BACKUPDIR echo "==========" -if [[ -d "$BACKUPDIR" ]]; -then - echo "Directory $BACKUPDIR exists." - echo "Clean $BACKUPDIR" - rm -rf $BACKUPDIR/* +if [[ -d "$BACKUPDIR" ]]; then + echo "Directory $BACKUPDIR exists." + echo "Clean $BACKUPDIR" + rm -rf $BACKUPDIR/* else - echo "Directory $BACKUPDIR does not exists." - echo "Create $BACKUPDIR" - mkdir $BACKUPDIR + echo "Directory $BACKUPDIR does not exists." + echo "Create $BACKUPDIR" + mkdir $BACKUPDIR fi echo "==========" @@ -30,22 +29,21 @@ ls -ld $BACKUPDIR/* echo "==========" -if [[ -d "$RELEASEDIR" ]]; -then - echo "Directory $RELEASEDIR exists." - echo "Clean $RELEASEDIR" - rm -rf $RELEASEDIR/* +if [[ -d "$RELEASEDIR" ]]; then + echo "Directory $RELEASEDIR exists." + echo "Clean $RELEASEDIR" + rm -rf $RELEASEDIR/* else - echo "Directory $RELEASEDIR does not exists." - echo "Create $RELEASEDIR" - mkdir $RELEASEDIR + echo "Directory $RELEASEDIR does not exists." + echo "Create $RELEASEDIR" + mkdir $RELEASEDIR fi echo "==========" echo "GZIP files" cd $BACKUPDIR -tar -czvf $RELEASEDIR/guess_game.tar.gz * +tar -czvf $RELEASEDIR/guess_game.tar.gz * cd $OLDPWD echo "==========" diff --git a/task2-bash/loop_guess_game.sh b/task2-bash/loop_guess_game.sh index a622bd67..f1bce9ea 100755 --- a/task2-bash/loop_guess_game.sh +++ b/task2-bash/loop_guess_game.sh @@ -1,23 +1,23 @@ #!/bin/bash +# TASK 02: LOOP GUESS GAME -guess_game(){ -USER="" -while [[ ! $USER =~ ^[0-9] ]]; do - read -p "Guess a number [0-9] : " -n 1 USER - echo -done +guess_game() { + USER="" + while [[ ! $USER =~ ^[0-9] ]]; do + read -p "Guess a number [0-9] : " -n 1 USER + echo + done -PC=$(($RANDOM % 10)) -echo "User choice -" $USER -echo " PC choice -" $PC + PC=$(($RANDOM % 10)) + echo "User choice -" $USER + echo " PC choice -" $PC -if [[ "$USER" == "$PC" ]]; -then - echo "You win" - return 0 -fi -echo "You loose" -return 1 + if [[ "$USER" == "$PC" ]]; then + echo "You win" + return 0 + fi + echo "You loose" + return 1 } echo "Loop Guess Game" @@ -27,42 +27,38 @@ NUM_GAMES="" while true; do -read -p "Are you want play game [y/n/Num games] : " USER_INPUT -echo "Your input is - << $USER_INPUT >>" - -if ! [[ $USER_INPUT =~ ^[0-9]+$ ]]; -then - case $USER_INPUT in - [nN] ) - NUM_GAMES=0 - break; - ;; - [yY] ) - echo "Lets try to play game" - NUM_GAMES=1 - ;; - *) - echo "Wrong input, try again" - ;; -esac + read -p "Are you want play game [y/n/Num games] : " USER_INPUT + echo "Your input is - << $USER_INPUT >>" -else - echo "You want play $USER_INPUT games?"; - NUM_GAMES=$USER_INPUT -fi + NUM_GAMES=0 -for ((gm =1 ;gm <=$NUM_GAMES;gm++)); -do -echo "Game $gm of $NUM_GAMES start" -guess_game -if [[ $? == "0" ]]; -then -echo "Good job" -else -echo "Wish a good luck next time" -fi + if ! [[ $USER_INPUT =~ ^[0-9]+$ ]]; then + case $USER_INPUT in + [nN]) + break + ;; + [yY]) + echo "Lets try to play game" + NUM_GAMES=1 + ;; + *) + echo "Wrong input, try again" + ;; + esac + else + echo "You want play $USER_INPUT games?" + NUM_GAMES=$USER_INPUT + fi -done + for ((gm = 1; gm <= $NUM_GAMES; gm++)); do + echo "Game $gm of $NUM_GAMES start" + guess_game + if [[ $? == "0" ]]; then + echo "Good job" + else + echo "Wish a good luck next time" + fi + done done From 61875c7ead19004e7c0a54f342c28cdd90ffb4c6 Mon Sep 17 00:00:00 2001 From: "Yurii.Bezkorovainyi" <13736343+bezkor@users.noreply.github.com> Date: Thu, 29 Dec 2022 09:30:54 +0200 Subject: [PATCH 15/15] TASK02: Add release files to repository Add backup of TASK01 targzipped files with release directopy --- task2-bash/release/guess_game.tar.gz | Bin 0 -> 974 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 task2-bash/release/guess_game.tar.gz diff --git a/task2-bash/release/guess_game.tar.gz b/task2-bash/release/guess_game.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..c5ab2ae30c3f95ff19142b401a86c3f0a6650888 GIT binary patch literal 974 zcmV;<12Oy`iwFP!000001MOAaZre5#_O1C82M&hVo2^RDkCCJ)(5^vIpaX)Y!!`^< zKvPE+VTsg8DxTX8=sWCod$~Tz4k^3wf(*S_yI}x77?4aJ9)9OLKU%bC?e&7!n26qI zLP|J3KJ?FQc9iZu17>N~%MK5Y4yK1$I?Z}%Hl3x%JxD(npXk9LKQa<|YQYGhp zO)3Wqbk~NfT-VpCtHZm$1?;kb zhmgYCx4Rd>BRCns8`f`HXNQ9)JO`=h-8=7ZC{MDE>m6t3=l7|x8}yFjA9M>Vsdn84 z1#WjMtt}32h3YP4|1keAFCIVr<|3){Pf|_y<0Ji_&1UJH{?BGv7W@C-z#d%5x~UKZ zG)6BBuc-`O2}0Mkbe6p;F*G2^969L1|6D08IBu8VpBi$kwX)7|hp^VI0X~3S`8h4InkU$tPq4~jTvgkITFuJC(K}=5)_?oV19jy{CP3^DHt74%W0{0$yUce2n zS|64{z@J-Qjl%?@V5-WG5U7a>Um(1H_xol}ynpuxom8Mn6a#`{pv~X524PeLlQ26+ zP_#-oNm|%aw^a_?2?I2<)}6<3P*rI)d5uPQlsfk-X)$5b1imX#b>UT_2H7p%Q1BI4hmB3(f{U_y@8X)1fVkRb9jMMIdappEt(9|1LohyNeNM7=HM7aj zmx+Kv(o4uT)(w@~oj_TCPJBaBL-lUgxvxvs7YV$?F6UhUuH^1cl5UeHyQuX_QK=VF zQL%3QCG3FMl_-|pk=Mk!^_H3N>kX%GPSRBDFoDOuC~~d#oiBQySt@}|KO|JOa-lRS z;A3M)AEItrlFLwGpbZB?`x$IB5u?9bYICAb5)Ze1Ljv=PJmhPjy0>n`juUvMbq-Z4 wmjCtKiHL}Zh=_=Yh=_=Yh=_=Yh=_=Yh=_=Yh=_=Yi1@Vl6B&J|z5ply0C_~yNB{r; literal 0 HcmV?d00001