From 41faeab6926d6cef5c576cfb775bcd74b5470f95 Mon Sep 17 00:00:00 2001 From: Grimm Date: Wed, 4 Mar 2026 18:28:36 +0300 Subject: [PATCH 1/3] =?UTF-8?q?=D0=A1=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83?= =?UTF-8?q?=D1=80=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md => praktikum/README.md | 0 __init__.py => praktikum/__init__.py | 0 bun.py => praktikum/bun.py | 0 burger.py => praktikum/burger.py | 0 database.py => praktikum/database.py | 0 ingredient.py => praktikum/ingredient.py | 0 ingredient_types.py => praktikum/ingredient_types.py | 0 praktikum.py => praktikum/praktikum.py | 0 8 files changed, 0 insertions(+), 0 deletions(-) rename README.md => praktikum/README.md (100%) rename __init__.py => praktikum/__init__.py (100%) rename bun.py => praktikum/bun.py (100%) rename burger.py => praktikum/burger.py (100%) rename database.py => praktikum/database.py (100%) rename ingredient.py => praktikum/ingredient.py (100%) rename ingredient_types.py => praktikum/ingredient_types.py (100%) rename praktikum.py => praktikum/praktikum.py (100%) diff --git a/README.md b/praktikum/README.md similarity index 100% rename from README.md rename to praktikum/README.md diff --git a/__init__.py b/praktikum/__init__.py similarity index 100% rename from __init__.py rename to praktikum/__init__.py diff --git a/bun.py b/praktikum/bun.py similarity index 100% rename from bun.py rename to praktikum/bun.py diff --git a/burger.py b/praktikum/burger.py similarity index 100% rename from burger.py rename to praktikum/burger.py diff --git a/database.py b/praktikum/database.py similarity index 100% rename from database.py rename to praktikum/database.py diff --git a/ingredient.py b/praktikum/ingredient.py similarity index 100% rename from ingredient.py rename to praktikum/ingredient.py diff --git a/ingredient_types.py b/praktikum/ingredient_types.py similarity index 100% rename from ingredient_types.py rename to praktikum/ingredient_types.py diff --git a/praktikum.py b/praktikum/praktikum.py similarity index 100% rename from praktikum.py rename to praktikum/praktikum.py From 421635d8f90c5ce6c9e62fd18ee45dc867d72568 Mon Sep 17 00:00:00 2001 From: Grimm Date: Thu, 12 Mar 2026 15:13:28 +0300 Subject: [PATCH 2/3] =?UTF-8?q?=D0=A0=D0=B0=D0=B7=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0=20=D1=8E=D0=BD=D0=B8=D1=82-=D1=82=D0=B5?= =?UTF-8?q?=D1=81=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/test_burger.py | 131 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 tests/test_burger.py diff --git a/tests/test_burger.py b/tests/test_burger.py new file mode 100644 index 000000000..0f588e10c --- /dev/null +++ b/tests/test_burger.py @@ -0,0 +1,131 @@ +from praktikum.burger import Burger +from unittest.mock import Mock +from praktikum.ingredient_types import * +import pytest + +class TestBurger: + + + @pytest.mark.parametrize('bun_name', [ + 'Флюоресцентная булка R2-D3', + 'Краторная булка N-200i' + ]) + def test_buns(self, bun_name): + bun = Mock() + bun.name = bun_name + burger = Burger() + burger.set_buns(bun) + assert burger.bun.name == bun_name + + @pytest.mark.parametrize('ingredient_name', [ + 'Мясо бессмертных моллюсков Protostomia', + 'Говяжий метеорит (отбивная)', + 'Биокотлета из марсианской Магнолии', + 'Филе Люминесцентного тетраодонтимформа', + 'Хрустящие минеральные кольца', + 'Плоды Фалленианского дерева', + 'Кристаллы марсианских альфа-сахаридов', + 'Мини-салат Экзо-Плантаго', + 'Сыр с астероидной плесенью' + ]) + def test_ingredient(self, ingredient_name): + ingredient = Mock() + ingredient.name = ingredient_name + burger = Burger() + burger.add_ingredient(ingredient) + assert burger.ingredients[0].name == ingredient_name + + + @pytest.mark.parametrize('ingredient_name', [ + 'Соус Spicy-X', + 'Соус фирменный Space Sauce', + 'Соус традиционный галактический', + 'Соус с шипами Антарианского плоскоходца' + ]) + def test_remove_ingredient(self, ingredient_name): + ingredient = Mock() + ingredient.name = ingredient_name + burger = Burger() + burger.add_ingredient(ingredient) + assert len(burger.ingredients) == 1 + burger.remove_ingredient(0) + assert len(burger.ingredients) == 0 + + @pytest.mark.parametrize('ingredient1_name, ingredient2_name', [ + ('Соус Spicy-X', 'Мясо бессмертных моллюсков Protostomia'), + ('Соус фирменный Space Sauce', 'Говяжий метеорит (отбивная)'), + ('Соус традиционный галактический', 'Биокотлета из марсианской Магнолии'), + ('Соус с шипами Антарианского плоскоходца', 'Хрустящие минеральные кольца') + ]) + def test_move_ingredient(self, ingredient1_name, ingredient2_name): + ingredient1 = Mock() + ingredient1.name = ingredient1_name + ingredient2 = Mock() + ingredient2.name = ingredient2_name + burger = Burger() + burger.add_ingredient(ingredient1) + burger.add_ingredient(ingredient2) + assert burger.ingredients[0].name == ingredient1_name + assert burger.ingredients[1].name == ingredient2_name + burger.move_ingredient(1, 0) + assert burger.ingredients[0].name == ingredient2_name + assert burger.ingredients[1].name == ingredient1_name + + @pytest.mark.parametrize('bun_price, ingredient_price, ingredient2_price, expected_price', [ + (988, 80, 1337, 3393), + (1255, 90, 3000, 5600) + ]) + def test_get_price(self, bun_price, ingredient_price, ingredient2_price, expected_price): + bun = Mock() + bun.get_price.return_value = bun_price + + ingredient = Mock() + ingredient.get_price.return_value = ingredient_price + + ingredient2 = Mock() + ingredient2.get_price.return_value = ingredient2_price + + burger = Burger() + burger.set_buns(bun) + burger.add_ingredient(ingredient) + burger.add_ingredient(ingredient2) + + price = burger.get_price() + assert price == expected_price + + @pytest.mark.parametrize('bun_name, bun_price, ingredient_name, ingredient_type, ingredient_price, ingredient2_name, ingredient2_type, ingredient2_price, expected_receipt', [ + ( + 'Флюоресцентная булка R2-D3', 988, + 'Соус фирменный Space Sauce', INGREDIENT_TYPE_SAUCE, 80, + 'Мясо бессмертных моллюсков Protostomia', INGREDIENT_TYPE_FILLING, 1337, + '(==== Флюоресцентная булка R2-D3 ====)\n= sauce Соус фирменный Space Sauce =\n= filling Мясо бессмертных моллюсков Protostomia =\n(==== Флюоресцентная булка R2-D3 ====)\n\nPrice: 3393' + ), + ( + 'Краторная булка N-200i', 1255, + 'Соус Spicy-X', INGREDIENT_TYPE_SAUCE, 90, + 'Говяжий метеорит (отбивная)', INGREDIENT_TYPE_FILLING, 3000, + '(==== Краторная булка N-200i ====)\n= sauce Соус Spicy-X =\n= filling Говяжий метеорит (отбивная) =\n(==== Краторная булка N-200i ====)\n\nPrice: 5600' + ) + ]) + def test_get_receipt(self, bun_name, bun_price, ingredient_name, ingredient_type, ingredient_price, ingredient2_name, ingredient2_type, ingredient2_price, expected_receipt): + bun = Mock() + bun.get_name.return_value = bun_name + bun.get_price.return_value = bun_price + + ingredient = Mock() + ingredient.get_name.return_value = ingredient_name + ingredient.get_type.return_value = ingredient_type + ingredient.get_price.return_value = ingredient_price + + ingredient2 = Mock() + ingredient2.get_name.return_value = ingredient2_name + ingredient2.get_type.return_value = ingredient2_type + ingredient2.get_price.return_value = ingredient2_price + + burger = Burger() + burger.set_buns(bun) + burger.add_ingredient(ingredient) + burger.add_ingredient(ingredient2) + + receipt = burger.get_receipt() + assert receipt == expected_receipt \ No newline at end of file From 506a3f1effd7ed9755f78e7ad9dbaf04d753d0b2 Mon Sep 17 00:00:00 2001 From: Evolen Date: Wed, 18 Mar 2026 13:12:02 +0300 Subject: [PATCH 3/3] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=BF=D0=BE=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=8F=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .coverage | Bin 0 -> 53248 bytes .vscode/settings.json | 7 +++++ .../__pycache__/__init__.cpython-314.pyc | Bin 0 -> 152 bytes praktikum/__pycache__/bun.cpython-314.pyc | Bin 0 -> 1567 bytes praktikum/__pycache__/burger.cpython-314.pyc | Bin 0 -> 4158 bytes .../__pycache__/ingredient.cpython-314.pyc | Bin 0 -> 2016 bytes .../ingredient_types.cpython-314.pyc | Bin 0 -> 380 bytes .../burger_test.cpython-314-pytest-9.0.2.pyc | Bin 0 -> 2278 bytes .../test_burger.cpython-314-pytest-9.0.2.pyc | Bin 0 -> 11541 bytes ...dient _ sauce.cpython-314-pytest-9.0.2.pyc | Bin 0 -> 2526 bytes tests/test_burger.py | 24 +++++------------- 11 files changed, 14 insertions(+), 17 deletions(-) create mode 100644 .coverage create mode 100644 .vscode/settings.json create mode 100644 praktikum/__pycache__/__init__.cpython-314.pyc create mode 100644 praktikum/__pycache__/bun.cpython-314.pyc create mode 100644 praktikum/__pycache__/burger.cpython-314.pyc create mode 100644 praktikum/__pycache__/ingredient.cpython-314.pyc create mode 100644 praktikum/__pycache__/ingredient_types.cpython-314.pyc create mode 100644 tests/__pycache__/burger_test.cpython-314-pytest-9.0.2.pyc create mode 100644 tests/__pycache__/test_burger.cpython-314-pytest-9.0.2.pyc create mode 100644 tests/__pycache__/test_burger_add_ingredient _ sauce.cpython-314-pytest-9.0.2.pyc diff --git a/.coverage b/.coverage new file mode 100644 index 0000000000000000000000000000000000000000..15cb1d52bed8e21ca59dcad7d456fe60c87e6bd9 GIT binary patch literal 53248 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 Q00zJS7ytuc;7&F0e*`0cE&u=k literal 0 HcmV?d00001 diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..9b388533a --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "python.testing.pytestArgs": [ + "tests" + ], + "python.testing.unittestEnabled": false, + "python.testing.pytestEnabled": true +} \ No newline at end of file diff --git a/praktikum/__pycache__/__init__.cpython-314.pyc b/praktikum/__pycache__/__init__.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..acb3ca9b4523abfb9569e01c0b200c3cf255a4d4 GIT binary patch literal 152 zcmdPq>P{wCAAftgHh(Vb_lhJP_LlF~@{~08C%QV?4CbT%U zs5r*ey(lv`H^wEiASWM2#T&*H6eVVtWM-G<#>B^G=4F<|$LkeT-r}&y%}*)KNwq6t V1)2h~rx?We#LURZSi}ru0RUiuBY*$^ literal 0 HcmV?d00001 diff --git a/praktikum/__pycache__/bun.cpython-314.pyc b/praktikum/__pycache__/bun.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..799dd4b761768284f4fdae5360fabae99632676e GIT binary patch literal 1567 zcmb7E&u<$=6n?X7J8P3)r44Ca1g4Q9ETj|!NC;I3ArKc7fh$r8+>W-J4XnCehuQHV zJy{e{Dpgb*I7H$Pz_;)t5D}8UVSKCh%86SdOSnhAH)~^a0d*w5H}89I-oE+fJ-;wN zS0Sw3_r8z56-0lqFCeZOH1?|HE5X{;uR8ym-oD_v#6&-jcNj za8tmS9WSm1wl{bNn=V~jOvWC%R!hbdp`BK!C)Rt8D#5S#TXi=pq+z@@K~heP7s`WKcNC9|dIDm^x~)vjF**-nJ?F5ol!@YnQ-auCv1(Ei0_2gNeb40_kh5qMIEZrU*YXHM&6<$5P^5?Mw0P-^|;IyI!$iEPWp0(Oq=+spA&C zVFklyCvfPYwNALdh9%JY7jv6mh>xx#FY6xVSUy2l@@u`J>TucYJSQiv5Mt=ei|T+N H?18@lkgjo+ literal 0 HcmV?d00001 diff --git a/praktikum/__pycache__/burger.cpython-314.pyc b/praktikum/__pycache__/burger.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..69e5b5e8255413d43735288ad31b4300f96cb44c GIT binary patch literal 4158 zcmb_f&2JmW6`x&l$t6Welx2#l?T9OxmBmn%D_Kok`6I3!C32DqDviiNtaw3_Yj+!p zWM-F*t&?mAwcG|Za%trt2MH+P>ZUYR>&A)eKVi3YOksfl0g4`Svr3@KvG2|9k~F2- zanL!unSJx-&70r*nAv1oYmh*@`Pv^hIt?4ZFWZbS_17{;Xg3bddtsqI*+(l<2}VIl!enQIZpJ=UiC# zF^<4EKF0Agj-PQv#t|7Oz&Jt12{29zebGG77(g5&RK@R6XHC9pZ4#+dDSIx@_*lls^ zQu8;G@fqy+7nr&$8GmP%tpRJzybkKFpwXb@Dr~k2N4S9;(1eGwm*7EQ4_tW7S>PCJ zUS`Ic?}7RApmEjw6*Ks667JN9#M)3W16b7>y4gdBSnY$sJV}vhlCMn;;a5#MMfQ>v zZgPdUJm*Szt3|B^j)q~SDY^3+3in$FGGjBZYYNq7#$TrD?Ci{oYB5)EJ9&7fNYiiY z>f5E+nRCp4L&Zy$D9dVI)n(agx1BoVGTK3@*1_ys?~E>Z-xt?^uz$h(K+NH&$$$LiaSI0a}YrM*CImxb6Z3owfiw!7(!vJViLzm>JdIZyP0QiY|j+v>JRagBjyz zn%6tKekqg~L^D3C_DXg6}d2Lz`ZQ5i%y23K~mZYwI_ zFgr94!vGyQ1$}dyLaC-U&5b%Ii$OrU`0=z2;D0KrhW653;i z_AI{skI>$&*m*$;-CXSl^0=H%@hr1>$ZQV_Qi>*8fxPlA*aT40@5A?#f!qU9S`3Jj zz7rfmIKeHSddT{ZPubtLsf`hci2&bX6*Ks0V)nGOZFCEurm5AV+r8l%quk>}xtfRi zt6QF8p$J&8l7U#zBoGZP?suKm-t4k2$7M}?2FgBIxi#bimE<8ad8m?n!A!nzPbeo} zdLX{M)sIfVeY@Jc!rNuWM-{z9^Kiom=W~Vhw@3qYTs;kZLS%ygx%ng3)vW?4*1SNO z%RYp`)3|KZUJv)nV1t{A93&FzY-(Zh5`=t_KfPnSlI7|e#H+|@Mefzzgak+rndTs( zIfe%~6Gg1R1t|ALs%8{BC2b#Dg3V%8jd@v;*!4i4!$o1ov$eGhs-M6V_%yup_u>a) zCERC*`^w??(mP*-2Nr~{cJ)+tJ$rxGvkR}RhdL^egc(VcBgrp9$zP9ec*ySLLmvr8 z7D9Dgztg2cN5Ba1u}9PClk*d!uQ=+=Q%zu5JlPu_gj#9{vn$v)?$|CL03Q z)Lg%W;JG{E8R8z}-AVNBG&hAeZBt9}GXa-1%}?QV-qhTE+>2|fAr4$oR|ahHfR@Kw z>m3nXT`}@19M_JcZLNEXtF^%fVZ>A4;eVVPegvkl_B6G+mJz^}P-B)dr&2;XSC-nQ7a;> zixp|ul!nXF0V6iLI$=bQ+!v3oi|tG#y0r6F&vH+>ci50djOc;;;^II z3mI9a=wb?WjnG~s14#BG!3srB0I?$Q-iF7unvv7GPStZIUC}^AN5hLeqvUe33^kFx zHnHR!v+Eq@8AXC=sQnbkH`f6D4PFq$f4A|%4>v`4iQ_dM-Solh6GwwMisLAbqY2Kw z1kOv5K?+ literal 0 HcmV?d00001 diff --git a/praktikum/__pycache__/ingredient.cpython-314.pyc b/praktikum/__pycache__/ingredient.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5d4fd058b84086e8a9a703ec8345e2dc0f8cd609 GIT binary patch literal 2016 zcmbVMO>7%Q6rR~#J8LItQj(B3t%QjYuu!FxfYco4O zq$j5!s!A1HiNuWyxdmuMplZ2sp1oCj<-{$KCEO$LJ=?L%Ppj~xc{B6P%$xVVnfIPQ zFh($<_kUSxILM8~AAjBr5K#1)YRiVmM z(VYZ8rn2JO@nsp*!ys1e-{AV9{zl)`xAdOAo!%_#eSJs&n08=#3&wl;PI^u6t`_yz z|HLnp0ozTl)0toNE*`$E_si*)zMFoQZo#Q<|HEKe@1@xIy2v}M$}SnNe$H4O(9`Ta{t0*a`}{+A z8qy|ce%1tftUvH+vYGIRBcV21L1x8XBgk?s8Tx@^WM-mdmfMJ$o`P9^qbVDn%BF?z zBQHtnp|6BU(9%jLd&R#{`ydHqQhW0)88#ZVH^Nrb9CqSdttGuHD!kHe)JC_iwl=dV zA-p(lDo+JMWQ(I`TOD7p;g)0t)cp?YF*A4S5Y>)(fZg}!sr$K2U>9~VfB0i@f-V9j zcK10LblCcAj3~)^IUdr<)?bKmCyC1{Y=^HoW@aHXasp6^PB>O(B|)?yk^K>z;C)Yn z$Y~g4wh&<)0zKK>0|E6x3g#s2>#%$Cm79fo^Gl!>mcJ~@SwJ6ngtWF z+AfWp89v*w2$D;EUkcDYnihPF?iej4E^}>>@cPE%c>M!O3w_Yz&{WaQx#8 zL2_tB$>xnsZ7+=+`Tvy2C%}(K6EX+8WEs`bKZOa&F@q;d{~A0MqQ3`^ART!ME~CpG zbCi4%m)4v~OgrQb(yk~(qgii9IED)IY1@kiD>FiDgfdZ47zc3^mM4U$H+>=G0@^-} zY6aCZpt1$1a8Q~;UwBH%@Z+`$5;${mtOoi)6bS+Uobn5Kc)g!qSeqp(#F7_5-M z`OvU(c5e#m7FDfY5mM~{^R1VM--V+RjsC literal 0 HcmV?d00001 diff --git a/praktikum/__pycache__/ingredient_types.cpython-314.pyc b/praktikum/__pycache__/ingredient_types.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0dfcb6579c8e8cf6b9c1d5361f5687483e62d64f GIT binary patch literal 380 zcmdPq3tVA>2U=+hB~_{JZhK>)N^6q#pa8RTyCB|KAwK=U_qd^4ItBj^sWmVxNfn6 z)!$-=s`1lgzQrCNpOT*(AAd^}s42+R#naU_F#z|6?V_>qZ)k>vvygQUU*2GJW*%9j|#i#ULi00{z) Ag#Z8m literal 0 HcmV?d00001 diff --git a/tests/__pycache__/burger_test.cpython-314-pytest-9.0.2.pyc b/tests/__pycache__/burger_test.cpython-314-pytest-9.0.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1e579eee7c853efc8a95f3181e71375256e6c63d GIT binary patch literal 2278 zcmcIl-%lJx9G~6W+uJ)1D6|Mhlq1y2fm|tEE49Vc3K1S!>4sjTy>_x3d$3{eZke4^ z!8A}c7NU`dzBE4d!3TZAhsMOF{t0H!pe3Wm7hinCkf`y=@9eKTY7^swlg)g8eZI5b z?{~g4GuYCcKrmjr^qKLEfKY)8!H|4re-@Z^bRDU}G@^n_#i>YD>_Jl!jrMShI4w`b zXw2m!)5=tw#$8^RPS8XL>P4#5iPUIT^wy+Js?dkh@~>RHm=>6PzDgE!0-SWAQdl|= zN7VB{`-{M65Xm)&LPb=(9;J~dPz7C+X51`%oKI$&56WCp1yxid88L{1N0s$qG^R$W zl0!7E$`D(OC1!P-dT}vju3E-rt)y3n0PcM1+^>D?d|g|2?$vJAK5*_i4{Gl^51j4V zR?7LJ_MUU!`O4W&sUt%Zqt&C_;}gJc1BUzj19x#~WO&#p_{DMKX@WU|kg~r6+I5tN z&GAMMt|eY+FNfNEP^2&&E0T-M!~(B6&52pxs|Nu>sapbWd19t95?{T1IVX%wA+%h4 z&eu!|3mph`qkLHWnPjj=ox;{9a`LF4HeIhMAlO<-*gC z{HeW;47gs%C&(>`alZ2rzas&f(c|$_@E=wBS8O!IMpgNL$XN*1|BpF` zevq?#TzX!vSHy~`F;&UMjtd90N*=1|jfSkd0$rU#MU^0`fG!GZ{ET2pX9SW{<8Z)| ze~IJcEMlz;GkMNE{ahH~Q)h`ViLCy-u+Cmb&3HFe}tJO z&RHuI?gOk5)`kn3X=0*Vq);hY8qrx2%z!pbYJi7qRsdnME^IGWs^+{4#S3O-PBYzG zgvGI~6?MJ>YkApC(5RFr38@fv7#Ay~q*1KDZJAnGqhLwLnPlr`(JcvSgZKzPbgYU0 z)+^A7Mq#v3IOz%AsxLGOr|meba_m^j8!TIRF@G7VZRaOnB}S=~pD--55)gbM&nsZ( zz1_lG$XF{Z?$*UE)sflo%FKjXzEk#>Fs-9sTG~G>ZbWtuKlPFFV_WC#t_^utY1wMs zY`qiNQMz|qJGNFgR~=%c?B|8|stjkQn;nTwxsWM+Rb>Nd2FIP2__YO#{7#9sjGdapRH;@!xLpkeJ{3UV{ mM4q}0uL9bO2!il4LhqyRP~T7JnIBN|A5vTx+($6E?tcTI699Ms literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_burger.cpython-314-pytest-9.0.2.pyc b/tests/__pycache__/test_burger.cpython-314-pytest-9.0.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..33453ff3ff5f075ffbf71f8ab1bcd4f0ed491311 GIT binary patch literal 11541 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