рдореИрдВрдиреЗ рдХреБрдЫ рдШрдВрдЯреЛрдВ рдХреА рдХрд╛рд░реНрдпрд╡рд╛рд╣реА рдХреЗ рдмрд╛рдж рдПрдХ рдЫреЛрдЯрд╛ рдиреЛрдЯ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ - рдЬрд╡рд╛рдм рдЕрднреА рдСрдирд▓рд╛рдЗрди рдирд╣реАрдВ, рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдФрд░ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рд╣реИрдВред
Habr├й рдкрд░ Microsoft CodeContracts рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд┐рдЦрд╛ рд╣реИ , рдпрд╣ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдФрд░ рдЯреВрд▓рдХрд┐рдЯ рд╣реИ, рдЬреЛ рд╕реА # рдореЗрдВ
"рдЕрдиреБрдмрдВрдз рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ" рдХреЗ рддрддреНрд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд╣рдордиреЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдХреЛрдбрдХреНрд░реЗрдХреНрдЯреНрд╕ (рдЗрд╕рдХреЗ рдмрд╛рдж рдХреЗрд╡рд▓ "рдЕрдиреБрдмрдВрдз" рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рдФрд░, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рд╕рдВрддреБрд╖реНрдЯ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдореЗрдВ рд╕рдВрдХрд▓рди рд╕рдордп рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕реЗрдХрдВрдб рдорд┐рд▓реЗ рд╣реИрдВред
рдЦреИрд░, рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рд╣рдо ReSharper рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░рд┐рдЪрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рд▓реЗрдХрд┐рди рдЗрд╕ рддрдереНрдп рдореЗрдВ рдХреБрдЫ рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реИрдВ рдХрд┐ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрди рджреЛ рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рджреЛрд╕реНрдд рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдкрд░рдорд╛рдгреБ 1. рд╡рд┐рдзрд┐ рдЖрд╣реНрд╡рд╛рди рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ ReSharper рдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрдмрдВрдз рдХреА рддрд░рд╣ рдХреБрдЫ рдХреЙрд▓реЛрдВ рдХреЛ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдирд┐рд░реНрджрдпрддрд╛ рд╕реЗ рдЙрдиреНрд╣реЗрдВ "рдХреВрдбрд╝реЗ":

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрди рдХреЙрд▓реЛрдВ рдХреЛ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╕реЗ
рдмрд╛рд╣рд░ рдирд╣реАрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдиреБрдмрдВрдз рдХреА рдХреБрдЫ рд╡рд┐рдзрд┐рдпрд╛рдБ, рдЬреИрд╕реЗ рдХрд┐
Contract.Requires
рдФрд░
Contract.Ensures
,
[Conditional("CONTRACTS_FULL")]
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рд╣реИрдВ, рд▓реЗрдХрд┐рди
CONTRACTS_FULL
рдзреНрд╡рдЬ рдХреЛ рд╕рдВрдХрд▓рди рд╕реЗ рдкрд╣рд▓реЗ рдЕрдиреБрдмрдВрдз рддрдВрддреНрд░ рджреНрд╡рд╛рд░рд╛ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдмрд┐рд▓реНрдб рд╕реНрдЯреЗрдЬ рдкрд░ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП ReSharper рдХреЗ рд╕рдВрдкрд╛рджрди рдЪрд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ) рдпрд╣ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рдВрдХрд▓рди рдкрд╛рддреНрд░реЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рджреЗрдЦрддрд╛ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдХрд▓рди рдХреЗ рдмрд╛рдж, рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдореИрдХреЗрдирд┐рдЬреНрдо рдкрд░рд┐рдгрд╛рдореА рдЖрдИрдПрд▓-рдХреЛрдб
__ConstractRuntime
, рдФрд░ рдЗрди рдХреЙрд▓реНрд╕ рдХреЛ
__ConstractRuntime
рдХреНрд▓рд╛рд╕ рд╕реЗ рджреВрд╕рд░реЛрдВ рдХреЗ рд╕рд╛рде рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ (рдЬрд▓реНрджреА рдХрд░реЛ рдЬрдмрдХрд┐ рдпрд╣ рдЕрднреА рднреА рдореБрдХреНрдд рд╣реИ)ред
рд▓реЗрдХрд┐рди
Contract.Assert
рдХреЛ рдХреЙрд▓ рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рд╕реЗ рдХреЛрдб рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВ, рдФрд░ рд╡реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреБрдирд░реНрд▓реЗрдЦрди рдХреЗ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рди рдХреЗрд╡рд▓
[Conditional("CONTRACTS_FULL")]
, рдмрд▓реНрдХрд┐
Conditional("DEBUG")
рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди (рдЬрд╣рд╛рдВ
DEBUG
рдкреНрд░рддреАрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдХреЗ рд▓рд┐рдП, ReSharper рд╕реНрд╡рдпрдВ рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЙрд▓ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реИред
рддреЛ рдЖрдк ReSharper рдХреЛ рдХреИрд╕реЗ рд╕рдордЭрд╛рддреЗ рд╣реИрдВ рдХрд┐
Contract.Requires
рднреА рдПрдХ "рдИрдорд╛рдирджрд╛рд░" рдХреЙрд▓ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ "рдЧрдбрд╝рдмрдбрд╝" рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдЖрдкрдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдб рдЯреИрдм рдкрд░ рд╕рд╢рд░реНрдд рд╕рдВрдХрд▓рди рдкреНрд░рддреАрдХ
CONSTRACTS_FULL
рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рд░рдирдЯрд╛рдЗрдо рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдЪреЗрдХ рдЪрд╛рд▓реВ рд╣реИ (рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд┐рдХрд▓реНрдк рдХреЛрдб> рд░рдирдЯрд╛рдЗрдо рдЪреЗрдХрд┐рдВрдЧ)ред
рд▓рд╛рдкрддрд╛ рддрд░реАрдХреЛрдВ рдХреЛ рддреБрд░рдВрдд "рджреЗрдЦ" рд╣реЛрдЧрд╛! рдмреЗрд╢рдХ, рдПрдХ рдЯреИрдм рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рдЭрдВрдбреЗ рдХреЗ рдЕрд░реНрде рдХреЛ рджреЛрд╣рд░рд╛рдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИ, рджреВрд╕рд░реЗ рдЯреИрдм рдкрд░ рднреА, рд▓реЗрдХрд┐рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдмрд╛рд░ рдРрд╕рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
JetBrains
рдХреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрддрд╛ рд╣реИ рдФрд░ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, ReSharper рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдмрдВрдзреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
Nuance 2. рд╕рдВрднрд╡рдд: NullReferenceException
рдПрдХ рдФрд░ рд╕реЗрдЯрд┐рдВрдЧ рдЬрд┐рд╕реЗ рдЕрдиреБрдмрдВрдз рдХреЗ рд╕рд╛рде рд░реАрд╢рд░ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдЕрдзрд┐рдХрддрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╡рд╣ рд╣реИ рдореВрд▓реНрдп рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реЗрдЯрд┐рдВрдЧред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, ReSharper
null
рдкрд░ рд╡рд┐рдзрд┐ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдЪреЗрдХреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ / рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ рдФрд░, рдЗрд╕ рддрд░рд╣ рдХреЗ рдЪреЗрдХ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рдПрдХ рддрд░реНрдХ рд╡рд╕реНрддреБ рдХреЗ рддрд░реАрдХреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрддреЗ рд╕рдордп
NullReferenceException
рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдлреЗрдВрдХрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИ:

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, ReSharper рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрдмрдВрдз рдкреВрд░реНрд╡ рд╢рд░реНрдд
Contract.Requires(visitor != null)
рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИред рдЕрд╕рдорд╛рди
Contract.Requires(visitor != null)
null
рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдБрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, ReSharper рдореЗрдВ рдПрдХ рддрдерд╛рдХрдерд┐рдд рддрдВрддреНрд░ рд╣реИред рдмрд╛рд╣рд░реА рдПрдиреЛрдЯреЗрд╢рди, рдЬреЛ рддреГрддреАрдп-рдкрдХреНрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рддрд░реАрдХреЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд░реАрд╢рд░ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдореЗрдЯрд╛-рдЬрд╛рдирдХрд╛рд░реА рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рддрд╛рдХрд┐ ReSharper рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдЪреЗрдХ рдХреЛ "рдкрд╣рдЪрд╛рди" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕реЗ
Contract
рдХреНрд▓рд╛рд╕ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдореЗрдЯрд╛ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рд╢реЗрд╖ xml-file рдХреЛ \ Bin \ ExternalAnnotations \ mscorlib \ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛
<assembly name="mscorlib"> <member name="M:System.Diagnostics.Contracts.Contract.Assert(System.Boolean)"> <attribute ctor="M:JetBrains.Annotations.AssertionMethodAttribute.#ctor"/> <parameter name="condition"> <attribute ctor="M:JetBrains.Annotations.AssertionConditionAttribute.#ctor(JetBrains.Annotations.AssertionConditionType)"> <argument>0</argument> </attribute> </parameter> </member> <member name="M:System.Diagnostics.Contracts.Contract.Assert(System.Boolean, System.String)"> <attribute ctor="M:JetBrains.Annotations.AssertionMethodAttribute.#ctor"/> <parameter name="condition"> <attribute ctor="M:JetBrains.Annotations.AssertionConditionAttribute.#ctor(JetBrains.Annotations.AssertionConditionType)"> <argument>0</argument> </attribute> </parameter> </member> <member name="M:System.Diagnostics.Contracts.Contract.Assume(System.Boolean)"> <attribute ctor="M:JetBrains.Annotations.AssertionMethodAttribute.#ctor"/> <parameter name="condition"> <attribute ctor="M:JetBrains.Annotations.AssertionConditionAttribute.#ctor(JetBrains.Annotations.AssertionConditionType)"> <argument>0</argument> </attribute> </parameter> </member> <member name="M:System.Diagnostics.Contracts.Contract.Assume(System.Boolean, System.String)"> <attribute ctor="M:JetBrains.Annotations.AssertionMethodAttribute.#ctor"/> <parameter name="condition"> <attribute ctor="M:JetBrains.Annotations.AssertionConditionAttribute.#ctor(JetBrains.Annotations.AssertionConditionType)"> <argument>0</argument> </attribute> </parameter> </member> <member name="M:System.Diagnostics.Contracts.Contract.Requires(System.Boolean)"> <attribute ctor="M:JetBrains.Annotations.AssertionMethodAttribute.#ctor"/> <parameter name="condition"> <attribute ctor="M:JetBrains.Annotations.AssertionConditionAttribute.#ctor(JetBrains.Annotations.AssertionConditionType)"> <argument>0</argument> </attribute> </parameter> </member> <member name="M:System.Diagnostics.Contracts.Contract.Requires``1(System.Boolean)"> <attribute ctor="M:JetBrains.Annotations.AssertionMethodAttribute.#ctor"/> <parameter name="condition"> <attribute ctor="M:JetBrains.Annotations.AssertionConditionAttribute.#ctor(JetBrains.Annotations.AssertionConditionType)"> <argument>0</argument> </attribute> </parameter> </member> <member name="M:System.Diagnostics.Contracts.Contract.Requires(System.Boolean,System.String)"> <attribute ctor="M:JetBrains.Annotations.AssertionMethodAttribute.#ctor"/> <parameter name="condition"> <attribute ctor="M:JetBrains.Annotations.AssertionConditionAttribute.#ctor(JetBrains.Annotations.AssertionConditionType)"> <argument>0</argument> </attribute> </parameter> </member> <member name="M:System.Diagnostics.Contracts.Contract.Requires``1(System.Boolean,System.String)"> <attribute ctor="M:JetBrains.Annotations.AssertionMethodAttribute.#ctor"/> <parameter name="condition"> <attribute ctor="M:JetBrains.Annotations.AssertionConditionAttribute.#ctor(JetBrains.Annotations.AssertionConditionType)"> <argument>0</argument> </attribute> </parameter> </member> <member name="M:System.Diagnostics.Contracts.Contract.Invariant(System.Boolean)"> <attribute ctor="M:JetBrains.Annotations.AssertionMethodAttribute.#ctor"/> <parameter name="condition"> <attribute ctor="M:JetBrains.Annotations.AssertionConditionAttribute.#ctor(JetBrains.Annotations.AssertionConditionType)"> <argument>0</argument> </attribute> </parameter> </member> <member name="M:System.Diagnostics.Contracts.Contract.Invariant(System.Boolean,System.String)"> <attribute ctor="M:JetBrains.Annotations.AssertionMethodAttribute.#ctor"/> <parameter name="condition"> <attribute ctor="M:JetBrains.Annotations.AssertionConditionAttribute.#ctor(JetBrains.Annotations.AssertionConditionType)"> <argument>0</argument> </attribute> </parameter> </member> </assembly>
рдЙрд╕рдХреЗ рдмрд╛рдж, рд╕рдм рдХреБрдЫ рдЬрдЧрд╣ рдореЗрдВ рдЧрд┐рд░ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЖрдк рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдЯреВрд▓ рдХреЗ рд╕реБрдЭрд╛рд╡реЛрдВ рдкрд░ рд╕рд╣рд░реНрд╖ рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдмрд┐рдирд╛ рдорд╛рдорд▓реЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдЬрдм рдпрд╣ рдЧрд▓рдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдбрдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯреНрд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг!