рдорд┐рдХрд░реЛрдЯрд┐рдХ рд░рд╛рдЙрдЯрд░ рдУрдПрд╕, рдЧрддрд┐рд╢реАрд▓ рдЧрддрд┐ рд╡рд┐рднрд╛рдЬрди рдХреА рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ (рд╕рдВрд╕реНрдХрд░рдг 2)
рдпрд╣ рджреВрд╕рд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдкрд╣рд▓рд╛ рдпрд╣рд╛рдБ рд╣реИ:
рдпрд╣рд╛рдБредрджреВрд╕рд░реЗ рджрд┐рди, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реБрдИ: рдЧрддрд┐ рдХреЛ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рддрд╛рдХрд┐ рдЧрддрд┐ рдЙрди рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рди рдХреА рдЬрд╛рдП рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрдВрдЯрд░рдиреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрд╛рдХреА рд╕рднреА рдХреЛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддрд╛рдХрд┐ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдФрд░ рдПрдХ рд╕рдВрдХреАрд░реНрдг рдЪреИрдирд▓ рдХреЗ рд╕рд╛рде, рдХреБрдЫ "рдмрдлрд░рд┐рдВрдЧ" рд╣реЛред рдЪреИрдирд▓ред
рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╡ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЕрддреАрдд рдХреА рдХрдорд┐рдпреЛрдВ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреА рдЧрдИ рдереА рдФрд░ рд╡рд░реНрддрдорд╛рди рдЬрд░реВрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рд░реВрдк рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдерд╛рди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЕрдм рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреИрд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ, рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдПрдХ рдЖрдИрдкреА рдкрддрд╛ рд╣реИ рдФрд░ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рддреЛ рдЪрд▓рд┐рдП рдЬрд╛рдиреЗ ...
рддреАрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдгред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрддреЗ 192.168.5.100-192.168.5.102
рд╣рдо рд╕реВрдЪрд┐рдпреЛрдВ рдореЗрдВ рддреАрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рдХреЗрд╡рд▓ рд╡реЗ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдкреВрд░реА рд░реЗрдВрдЬ рд╕реНрдХреЛрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд░рд┐рдХреЙрд░реНрдб рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛ред
/ip firewall address-list add list="users" address=192.168.5.100
/ip firewall address-list add list="users" address=192.168.5.101
/ip firewall address-list add list="users" address=192.168.5.102
рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЪрдХреНрд░ рдлреЗрдВрдХрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЧрддрд┐ рджреЗрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдПрдХ рд╣реА рд░рди рд╡рд╣реА рдХрд░реЗрдЧрд╛ рдЬреЛ рд╣рдордиреЗ рдКрдкрд░ рдХрд┐рдпрд╛ рдерд╛ред
#Settings
######################################################
:local start ("100");
:local stop ("102");
:local net ("192.168.5.");
######################################################
######################################################
:global count ($start);
:for count from=$start to=$stop step=1 do={
/ip firewall address-list add list="users" address=( $net . $count);};
######################################################
######################################################
# (C) Inlarion icq 429-587 mikrotik.axiom-pro.ru Copyright!
######################################################
рджреВрд╕рд░рд╛ рдЪрд░рдг рд╣реИ, рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ / рдХрддрд╛рд░ рдФрд░ / ip рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдореИрдиреНрдЧ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛, рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╢рд╛рд╕рдХ рдХреЛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреА рджрд┐рдирдЪрд░реНрдпрд╛ рд╕реЗ рдореБрдХреНрдд рдХрд░рдирд╛, рдЬреЛ рддрдм рд╕реЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рднрд░рд╛ рд╣реИ рдорд╛рдирд╡ рдХрд╛рд░рдХ рд╕реЛ рдирд╣реАрдВ рд░рд╣рд╛ рд╣реИ, рдПрдХ рдЫреЛрдЯреА рд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕реНрдХреЗрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╣рд░ рдмрд╛рд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ / ip рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдПрдбреНрд░реЗрд╕-рд▓рд┐рд╕реНрдЯ рд╕реВрдЪреА = "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ" рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдпрд╛ рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдирдИ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкреБрд░рд╛рдиреЗ рдХреЛ рд╣рдЯрд╛рдирд╛ рд╣реИ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рд╕реНрдЯрдо рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХреЛ рдХрдЪрд░рд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рд╣рдЯрд╛рдирд╛ рднреВрд▓ рдЧрдпрд╛ред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЦрддреНрдо рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╕рд┐рд╕реНрдЯрдо рд▓реЙрдЧ рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рдФрд░ рд╣рдЯрд╛рдП рдЧрдП рд░рд┐рдХреЙрд░реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЬрд╛рдирдХрд╛рд░реА рджрд░реНрдЬ рдХреА рдЬрд╛рдПрдЧреАред
#Settings
######################################################
:local DownloadParent ("Download");
:local UploadParent ("Upload");
######################################################
#Internal Var
######################################################
:local i;
:local z;
:local userX;
:local enum (" ");
:local mark;
:local qrd;
:local qru;
:local mrd;
:local mru;
:local qrdadd;
:local qruadd;
:local mrdadd;
:local mruadd;
:set qrd (0);
:set qru (0);
:set mrd (0);
:set mru (0);
:set qrdadd (0);
:set qruadd (0);
:set mrdadd (0);
:set mruadd (0);
######################################################
######################################################
:log warning ("Rules Manager Started!");
:if ([/queue type find name="dshaper_down"] = "") do={ /queue type add name="dshaper_down" kind="pcq" pcq-classifier=dst-address pcq-rate=0 pcq-limit=50 pcq-total-limit=2000;};
:if ([/queue type find name="dshaper_up"] = "") do={ /queue type add name="dshaper_up" kind="pcq" pcq-classifier=src-address pcq-rate=0 pcq-limit=50 pcq-total-limit=2000;};
:if ([/queue tree find name=$DownloadParent] = "") do={ /queue tree add name=$DownloadParent parent="global-out" queue="dshaper_down" priority=8;};
:if ([/queue tree find name=$UploadParent] = "") do={ /queue tree add name=$UploadParent parent="global-out" queue="dshaper_up" priority=8;};
:foreach i in=[/ip firewall address-list find list="users"] do={ :set userX [/ip firewall address-list get $i address];
:if ([/queue tree find name=($userX . "_down")] = "") do={ /queue tree add name=($userX . "_down") parent=$DownloadParent queue="dshaper_down" packet-mark=($userX . "_down") priority=8; :set qrdadd ($qrdadd+1); };
:if ([/queue tree find name=($userX . "_up")] = "") do={ /queue tree add name=($userX . "_up") parent=$UploadParent queue="dshaper_up" packet-mark=($userX . "_up") priority=8; :set qruadd ($qruadd+1);};
:set enum (" ");
:set enum ([/ip firewall mangle find comment=($userX . "_up")]);
:if ($enum = "") do={ /ip firewall mangle add chain=forward src-address=$userX dst-address=0.0.0.0/0 action=mark-packet new-packet-mark=($userX . "_up") comment=($userX . "_up") disabled=no passthrough=yes; :set mruadd ($mruadd+1);
};
:set enum (" ");
:set enum ([/ip firewall mangle find comment=($userX . "_down")]);
:if ($enum = "") do={ /ip firewall mangle add chain=forward src-address=0.0.0.0/0 dst-address=$userX action=mark-packet new-packet-mark=($userX . "_down") comment=($userX . "_down") disabled=no passthrough=yes; :set mrdadd ($mrdadd+1);
};
};
:foreach z in=[/queue tree find parent=$DownloadParent] do={
:set mark [/queue tree get $z name];
:if ($mark !="") do={
:set mark ([:tostr $mark]);
:set mark ([:pick $mark 0 ([:len $mark]-5)]);
:if ([/ip firewall address-list find address=$mark] = "") do={/queue tree remove [/queue tree find name=($mark . "_down")]; :set qrd ($qrd+1); };};};
:foreach z in=[/queue tree find parent=$UploadParent] do={
:set mark [/queue tree get $z name];
:if ($mark !="") do={
:set mark ([:tostr $mark]);
:set mark ([:pick $mark 0 ([:len $mark]-3)]);
:if ([/ip firewall address-list find address=$mark] = "") do={/queue tree remove [/queue tree find name=($mark . "_up")]; :set qru ($qru+1); };};};
:foreach z in=[/ip firewall mangle find src-address="0.0.0.0/0" action="mark-packet" chain="forward"] do={
:set mark [/ ip firewall mangle get $z comment];
:if ($mark !="") do={
:set mark ([:tostr $mark]);
:set mark ([:pick $mark 0 ([:len $mark]-5)]);
:if ([/ip firewall address-list find address=$mark] = "") do={
:if ([/ip firewall mangle find comment=($mark . "_down")] != "") do={/ip firewall mangle remove [/ip firewall mangle find comment=($mark . "_down")]; :set mrd ($mrd+1); }}}}
:foreach z in=[/ip firewall mangle find dst-address="0.0.0.0/0" action="mark-packet" chain="forward"] do={
:set mark [/ ip firewall mangle get $z comment];
:if ($mark !="") do={
:set mark ([:tostr $mark]);
:set mark ([:pick $mark 0 ([:len $mark]-3)]);
:if ([/ip firewall address-list find address=$mark] = "") do={
:if ([/ip firewall mangle find comment=($mark . "_up")] != "") do={/ip firewall mangle remove [/ ip firewall mangle find comment=($mark . "_up")]; :set mru ($mru+1); }}}}
######################################################
######################################################
:log info ("------------------------------------------");
:log warning ("Rules Manager:");
:log info ("Queue Tree Download Records Added: " . $qrdadd);
:log info ("Queue Tree Upload Records Added: " . $qruadd);
:log info ("Mangle Download Records Added: " . $mrdadd);
:log info ("Mangle Upload Records Added: " . $mruadd);
:log info ("Queue Tree Download Records Deleted: " . $qrd);
:log info ("Queue Tree Upload Records Deleted: " . $qru);
:log info ("Mangle Download Records Deleted: " . $mrd);
:log info ("Mangle Upload Records Deleted: " . $mru);
:log info ("------------------------------------------");
######################################################
######################################################
# (C) Inlarion icq 429-587 mikrotik.axiom-pro.ru Copyright!
######################################################
рдЕрдм рд╕рд░реНрдХрд┐рдЯ рдХреЗ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдФрд░ рдХрд╛рд░реНрдпрдХрд╛рд░реА рднрд╛рдЧреЛрдВ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ
рд▓рд┐рдкрд┐ рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрддред
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд░рд╛рдд рдХрд╛ рд╕рдордп рд╕рдорд░реНрдерди рд╕рдХреНрд╖рдо рд╣реИ рдФрд░ рд╡рд░реНрддрдорд╛рди рд╕рдордп рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ, рд╕рдордп рд╕реАрдорд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЪреИрдирд▓ рдмреИрдВрдбрд╡рд┐рдбреНрде рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИред
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдорд╛рдкрддреА рд╣реИ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд┐рддрдиреА рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдпрджрд┐ рд╡рд╣ ActiveThresholddown рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рдЗрд╕реЗ рд░рд┐рд╕реЗрдкреНрд╢рди рдкрд░ рдПрдХ рд╕рдХреНрд░рд┐рдп рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рд╕рдХреНрд░рд┐рдп рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рднреА рдмрдврд╝рд╛рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдмрд╛рдж, рдпрд╣ ActiveThresholdup рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ, рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдЗрд╕ рдЪрд┐рд╣реНрди рдХреЛ рдкрд╛рд░ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЗрд╕реЗ рд░рд┐рдЯрд░реНрди рдкрд░ рд╕рдХреНрд░рд┐рдп рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд╛рдкрд╕реА рдЧреНрд░рд╛рд╣рдХреЛрдВ рдкрд░ рд╕рдХреНрд░рд┐рдп рдХреЗ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред
рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ:
MaxRateDownload рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд░рд┐рдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдкреНрд░рддрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЧрддрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
MaxRateUpload рдкреНрд░рддрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдХреНрд░рд┐рдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдкреНрд░рддрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЧрддрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдмрд╛рдж, рдпрд╣ рдКрдкрд░ рдХреА рдЧрдгрдирд╛ рдХреА рдЧрдИ рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреНрдпреВ рдЯреНрд░реА рдореЗрдВ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реАрдорд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдлрд┐рд░ рдпрд╣ рдХрд┐рд▓реЛрдмрд╛рдЗрдЯ рдореЗрдВ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд▓реЙрдЧ рдореЗрдВ рдЖрдВрдХрдбрд╝реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЪрд░:
MaxRateDownload - рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ (рд╕реНрд╡рд╛рдЧрдд) рдмрд┐рдЯ / рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдЪреИрдирд▓ рдХреА рдЪреМрдбрд╝рд╛рдИред
MaxRateUpload - рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЪреИрдирд▓ рдХреА рдЪреМрдбрд╝рд╛рдИ (рд╡рд╛рдкрд╕реА) рдмрд┐рдЯ / рд╕реЗрдХрдВрдбред
MaxRateDownloadNight - рд░рд╛рдд (рд░рд┐рд╕реЗрдкреНрд╢рди) рдмрд┐рдЯ / рд╕реЗрдХрдВрдб рдореЗрдВ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЪреИрдирд▓ рдХреА рдЪреМрдбрд╝рд╛рдИред
MaxRateUploadNight - рд░рд╛рдд (рд╡рд╛рдкрд╕реА) рдмрд┐рдЯ / рд╕реЗрдХрдВрдб рдореЗрдВ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЪреИрдирд▓ рдХреА рдЪреМрдбрд╝рд╛рдИред
ActiveThresholddown - рдЕрдзрд┐рдХ рд╣реЛрдиреЗ рдкрд░ рдереНрд░реЗрд╢реЛрд▓реНрдб, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рдХреНрд░рд┐рдп рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ (рд░рд┐рд╕реЗрдкреНрд╢рди) Bit / sред
ActiveThresholdup - рдЕрдзрд┐рдХ рд╣реЛрдиреЗ рдкрд░ рдереНрд░реЗрд╢реЛрд▓реНрдб, рдЬрд┐рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдХреНрд░рд┐рдп (рд╡рд╛рдкрд╕реА) рдмрд┐рдЯ / рд╕реЗрдХрдВрдб рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред
usenighttime - "рд╣рд╛рдБ" рдФрд░ "рдирд╣реАрдВ" рдорд╛рдиреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдЪреИрдирд▓ рдЪреМрдбрд╝рд╛рдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд░рд╛рддреНрд░рд┐ рджрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ред
рдирд╛рдЗрдЯрдЯреАрдорд╕реНрдЯрд╛рд░реНрдЯ-рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд░рд╛рдд рдХреЗ рдЯреИрд░рд┐рдл рдХреА рд╢реБрд░реБрдЖрдд рдХреА рд╕реВрдЪрдирд╛ рджреЗрддрд╛ рд╣реИред
рдирд╛рдЗрдЯрдЯреАрдорд╕реНрдЯреЙрдк-рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд░рд╛рдд рдХреЗ рдЯреИрд░рд┐рдл рдХреЗ рдЕрдВрдд рдХреА рд╕реВрдЪрдирд╛ рджреЗрддрд╛ рд╣реИред
#Settings
######################################################
:local MaxRateDownload ("15000000");
:local MaxRateUpload ("15000000");
:local MaxRateDownloadNight ("20000000");
:local MaxRateUploadNight ("20000000");
:local ActiveThresholddown ("15000");
:local ActiveThresholdup ("15000");
:local usenighttime ("yes");
:local nighttimestart ("02:00");
:local nighttimestop ("08:00");
######################################################
#Internal Var
######################################################
:local z;
:local i;
:local ii;
:local userX;
:local timedelay (0);
:local startmin;
:local startsec;
:local stopmin;
:local stopsec;
:local scripttimedelay (0);
:local scriptstartmin;
:local scriptstartsec;
:local scriptstopmin;
:local scriptstopsec;
:local userscount ("0");
:local userstmp ("");
:local firstdowntmp ("");
:local firstuptmp ("");
:local twodowntmp ("");
:local twouptmp ("");
:local activedownuserstmp ("");
:local activeupuserstmp ("");
:local activedowncount ("0");
:local activeupcount ("0");
######################################################
######################################################
:set scriptstartmin ([: pick [/system clock get time] 3 5]);
:set scriptstartsec ([: pick [/system clock get time] 6 8]);
:if ($usenighttime = "yes") do={
:set nighttimestart ([: pick $nighttimestart 0 2] . [: pick $nighttimestart 3 5]);
:set nighttimestop ([: pick $nighttimestop 0 2] . [: pick $nighttimestop 3 5]);
:local currenthours ([: pick [/system clock get time] 0 2]);
:local currenttime ([: pick [/system clock get time] 0 2] . [: pick [/system clock get time] 3 5] );
:local acttime ("day");
:local starttime ("day");
:if ($currenthours < 10) do={ :set acttime ("night"); };
:if ( [: pick $nighttimestart 0 2] < 10) do={ :set starttime ("night"); };
:local night ("no");
:if ($starttime = "night") do={
:if ( $currenttime > $nighttimestart && $currenttime < $nighttimestop) do={ :set night ("yes"); };
};
:if ($starttime = "day") do={
:if ( $acttime = "day") do={
:if ( $currenttime >= $nighttimestart) do={ :set night ("yes"); };
};
:if ( $acttime = "night") do={
:if ( $currenttime < $nighttimestop ) do={ :set night ("yes"); };
};};
:if ($night = "yes") do={
:set MaxRateDownload ($MaxRateDownloadNight);
:set MaxRateUpload ($MaxRateUploadNight);
};
};
:set ActiveThresholddown ($ActiveThresholddown / 8);
:set ActiveThresholdup ($ActiveThresholdup / 8);
:foreach i in=[/ip firewall address-list find list="users"] do={ :set userX [/ip firewall address-list get $i address];
:set userscount ($userscount+1);
:set userstmp ($userstmp . $userX . ",");
};
:local users [:toarray $userstmp];
:set startmin ([: pick [/system clock get time] 3 5]);
:set startsec ([: pick [/system clock get time] 6 8]);
:global dcount ("1");
:for dcount from=1 to=$userscount step=1 do={
:set firstdowntmp ($firstdowntmp . [/ip firewall mangle get [/ip firewall mangle find comment=[:pick $users ($dcount-1)] . "_down"] bytes] . ",");
:set firstuptmp ($firstuptmp . [/ip firewall mangle get [/ip firewall mangle find comment=[:pick $users ($dcount-1)] . "_up"] bytes] . ",");
};
:set stopmin ([: pick [/system clock get time] 3 5]);
:set stopsec ([: pick [/system clock get time] 6 8]);
:global dcount ("1");
:for dcount from=1 to=$userscount step=1 do={
:set twodowntmp ($twodowntmp . [/ip firewall mangle get [/ip firewall mangle find comment=[:pick $users ($dcount-1)] . "_down"] bytes] . ",");
:set twouptmp ($twouptmp . [/ip firewall mangle get [/ip firewall mangle find comment=[:pick $users ($dcount-1)] . "_up"] bytes] . ",");
};
:if ( $stopmin > $startmin) do={
:set timedelay (($stopmin-$startmin) * 60);
};
:set timedelay (($timedelay+$stopsec)-$startsec);
:local firstdown [:toarray $firstdowntmp];
:local firstup [:toarray $firstuptmp];
:local twodown [:toarray $twodowntmp];
:local twoup [:toarray $twouptmp];
:global dcount ("1");
:for dcount from=1 to=$userscount step=1 do={
:if ( ($ActiveThresholddown * $timedelay) < ([:pick $twodown ($dcount-1)] - [:pick $firstdown ($dcount-1)]) ) do={
:set activedownuserstmp ($activedownuserstmp . [:pick $users ($dcount-1)] . ",");
:set activedowncount ($activedowncount+1);
};
:if ( ($ActiveThresholdup * $timedelay) < ([:pick $twoup ($dcount-1)] - [:pick $firstup ($dcount-1)]) ) do={
:set activeupuserstmp ($activeupuserstmp . [:pick $users ($dcount-1)] . ",");
:set activeupcount ($activeupcount+1);
};
};
:local activedownusers [:toarray $activedownuserstmp];
:local activeupusers [:toarray $activeupuserstmp];
:local maxlimitdown ("0");
:local maxlimitup ("0");
:if ( $activedowncount > 0 ) do={
:set maxlimitdown ($MaxRateDownload/$activedowncount);
:global dcount ("1");
:for dcount from=1 to=$activedowncount step=1 do={
:if ([/queue tree get [find name=[:pick $activedownusers ($dcount-1)] . "_down"] max-limit] != $maxlimitdown) do={
/queue tree set [/queue tree find name=[:pick $activedownusers ($dcount-1)] . "_down"] max-limit=$maxlimitdown; };
};
};
:if ( $activeupcount > 0 ) do={
:set maxlimitup ($MaxRateUpload/$activeupcount);
:global dcount ("1");
:for dcount from=1 to=$activeupcount step=1 do={
:if ([/queue tree get [find name=[:pick $activeupusers ($dcount-1)] . "_up"] max-limit] != $maxlimitup) do={
/queue tree set [/queue tree find name=[:pick $activeupusers ($dcount-1)] . "_up"] max-limit=$maxlimitup; };
};
};
:local kbsmaxdown ($MaxRateDownload/1000);
:local kbsmaxup ($MaxRateUpload /1000);
:if ( $maxlimitdown = 0 ) do={ :set maxlimitdown ($MaxRateDownload); };
:if ( $maxlimitup = 0 ) do={ :set maxlimitup ($MaxRateUpload); };
:local kbsmaxlimitdown ($maxlimitdown/1024);
:local kbsmaxlimitup ($maxlimitup/1024);
:set scriptstopmin ([: pick [/system clock get time] 3 5]);
:set scriptstopsec ([: pick [/system clock get time] 6 8]);
:if ( $scriptstopmin > $scriptstartmin) do={
:set scripttimedelay (($scriptstopmin-$scriptstartmin) * 60);
};
:set scripttimedelay (($scripttimedelay+$scriptstopsec)-$scriptstartsec);
######################################################
######################################################
:log info ("------------------------------------------");
:log warning ("Shaper:");
:log info ("MaxRate Download : " . $MaxRateDownload . " bps /" . $kbsmaxdown . " kbs / Upload : " . $MaxRateUpload . " bps /" . $kbsmaxup . " kbs");
:log info ("Active Users : Download : " . $activedowncount . " / Upload : " . $activeupcount );
:log info ("User Speed Download : " . $maxlimitdown . " bps /" . $kbsmaxlimitdown . " kbs / Upload : " . $maxlimitdown . " bps /" . $kbsmaxlimitup . " kbs" );
:log warning ("Performance Time: " . $scripttimedelay . " seconds.");
:log info ("------------------------------------------");
######################################################
######################################################
# (C) Inlarion icq 429-587 mikrotik.axiom-pro.ru Copyright!
######################################################
рдирд╡реАрдирддрдо рдЗрдЪреНрдЫрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдЖрдк рдкреНрд░рджрд░реНрд╢рди рдЯрд╛рдЗрдо рд╕рд┐рд╕реНрдЯрдо рд▓реЙрдЧ рдореЗрдВ рдПрдХ рдирдИ рд▓рд╛рдЗрди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдиреЛрдЯрд┐рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рд▓рд╛рдЗрди рдЖрдкрдХреЛ рд╢реЗрдбреНрдпреВрд▓рд░ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрди рдЕрдВрддрд░рд╛рд▓ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред "рдкреНрд░рджрд░реНрд╢рди рд╕рдордп" рд╕реЗрдХрдВрдб рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп + -1 рд╕реЗрдХрдВрдб рдХреА рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕рдордп рдХреЗ рд╕рд╛рде / ip рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдПрдбреНрд░реЗрд╕-рд▓рд┐рд╕реНрдЯ рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рд╡реГрджреНрдзрд┐ рд╣реЛрддреА рд╣реИ = "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛", рдЖрдкрдХреЗ рдорд╛рдЗрдХреНрд░реЛрдЯрд┐рдХ рдкрд░ рд▓реЛрдб рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрди рдЕрдВрддрд░рд╛рд▓ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рд▓рдЧрд╛рддрд╛рд░ рдирд┐рдЧрд░рд╛рдиреА рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред
рд╕реВрддреНрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрди рдЕрдВрддрд░рд╛рд▓ рд╕реЗрдЯ рдХрд░реЗрдВ: рдкреНрд░рджрд░реНрд╢рди рд╕рдордп + 10-15 рд╕реЗрдХрдВрдбред рдЬрдм рдЖрдк рдкрд╣рд▓реА рдмрд╛рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЕрдВрддрд░рд╛рд▓ рдХреЛ 1-2 рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░реЗрдВ, рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдпрджрд┐ рд╕рд┐рд╕реНрдЯрдо рдЙрд╕ рд╕рдордп рдпрдерд╛рд╕рдВрднрд╡ рд╡реНрдпрд╕реНрдд рд╣реИред
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреИрд░рд╛рдореАрдЯрд░:
:local MaxRateDownload ("15000000");
:local MaxRateUpload ("15000000");
:local MaxRateDownloadNight ("20000000");
:local MaxRateUploadNight ("20000000");
рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЪреИрдирд▓ рдХреА рдЪреМрдбрд╝рд╛рдИ рд╕реЗ рдереЛрдбрд╝рд╛ рдХрдо рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдмреНрд░реЗрдХ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдм рдХреЛрдИ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреЛ рдкрд╣рд▓реЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдХрд╛ рдЙрдкрднреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╕рдХреНрд░рд┐рдп рд╣реЛред
:local ActiveThresholddown ("15000");
:local ActiveThresholdup ("15000");
рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрди рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдЧрдгрдирд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░: рдереНрд░реЗрд╕рд╣реЛрд▓реНрдбрдбрд╛рдЙрди рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ = рдореИрдХреНрд╕рд░реЗрдбрдбрд╛рдЙрдирд▓реЛрдб рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдЕрдиреНрдпрдерд╛ рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣рдореЗрд╢рд╛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд░рд╣реЗрдВрдЧреЗ! рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ * ActiveThresholdup = MaxRateUpload рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдореЗрд╢рд╛ рдХреБрдЫ рдорд╛рд░реНрдЬрд┐рди рдЫреЛрдбрд╝ рджреЗрдВред
рд╕рдм рдХреБрдЫ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдВрд╕реНрдХрд░рдг 5.x рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдкрдпреБрдХреНрддрддрд╛ рдХрд╛ рд╕рд╡рд╛рд▓ рдмрдВрдж рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрд╕реНрдХрд░рдг 5.0rc7 рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рдж, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╢реНрд╡рд╕реНрдд рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдорд┐рдХрд░реЛрдЯрд┐рдХ рдореЗрдВ рдХрддрд╛рд░ рдкрд╣рд▓реЗ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдВрд╕реНрдХрд░рдг 5.x рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдмрдЧ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдкрд╛рдВрдЪрд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХрд╛ рдореБрджреНрджрд╛ рдмрд╣реБрдд рд╣реА рд╕рдВрджрд┐рдЧреНрдз рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрд░рд╕реА 3 рдореЗрдВ, рдкрд┐рдВрдЧ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдЕрдирд╛рдбрд╝реА рд╣реИ рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЖрд░рд╕реА 7 рдореЗрдВ, рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд░рд╛рдЙрдЯрд┐рдВрдЧ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкрд╣рд▓реЗ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╕рдм рдХреБрдЫ рдПрдХ рдзрдорд╛рдХреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рдЖрд░рд╕реА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд╛рддрд╡реАрдВ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╣реИ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЪрд┐рдВрддрд╛рдЬрдирдХ рд╣реИред
рднрд▓реЗ рд╣реА рдЖрдкрдХреЛ рдореБрдЦреНрдп рднрд╛рдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк / рдХрддрд╛рд░ рдкреЗрдбрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЖрдк рдмрд╕ рдирд┐рдпрдореЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ / рдирд┐рдХрд╛рд▓рддреЗ рд╕рдордп рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЪреАрдЬред