рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЕрдЬрдЧрд░ рдПрдХреНрд╕рдПрдордкреАрдкреА рдмреЙрдЯ рдирд╣реАрдВ рд╣реИ: рдЯрдирд▓рд┐рдВрдЧ

рдмрд╣реБрдд рдкрд╣рд▓реЗ рдирд╣реАрдВ, рдкрд╛рдпрдерди рдореЗрдВ рдЖрдИрд╕реАрдХреНрдпреВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рд╡рд┐рд╖рдп рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рджрд┐рд╢рд╛ рдореЗрдВред рдХреБрдЫ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдореБрдЭреЗ рд╣реЛрдо рдЗрдВрдЯрд░рдиреЗрдЯ рдХреЗ рд╕рд╛рде рдХрдард┐рдирд╛рдЗрдпрд╛рдБ рдереАрдВ: рдХреЗрд╡рд▓ рд╕реНрдерд╛рдиреАрдп рдиреЗрдЯрд╡рд░реНрдХ рддрдХ рдкрд╣реБрдВрдЪ, рдмрд╛рд╣рд░реА рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рд╕реЗ рдХреЗрд╡рд▓ рдЖрдИрд╕реАрдХреНрдпреВ рдФрд░ рд╕реНрдерд╛рдиреАрдп рдЬреИрдмрд░ рд╕рд░реНрд╡рд░ рддрдХ; рдХреЛрдИ рдФрд░ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рдерд╛ред рдирддреАрдЬрддрди, рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдЬрдиреНрдо XMPP рдореЗрдВ HTTP рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдЯрдирд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реБрдЖ рдерд╛ред







рдпреЛрдЬрдирд╛



рдпрд╣ рдпреЛрдЬрдирд╛ рддреАрди рдореБрдЦреНрдп рдШрдЯрдХреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ:







рдШрдЯрдХреЛрдВ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЗрдВрдЯрд░рдиреЗрдЯ рдПрдХреНрд╕реЗрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рджреВрд░рд╕реНрде рдорд╢реАрди рдкрд░, рдПрдХ рдмреЙрдЯ рд╕рд░реНрд╡рд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдкрд░, рдмреЙрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рдкреНрд░реЙрдХреНрд╕рд┐рд╕ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ; рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣рдорд╛рд░реЗ рдкреНрд░реЙрдХреНрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:



$ http_proxy="localhost:3128" wget ...









рдмреЙрдЯ-рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдмреЙрдЯ-рд╕рд░реНрд╡рд░ рдХреЛ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдПрдХреНрд╕рдПрдордПрд▓-рдЖрдзрд╛рд░рд┐рдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



Example.com рдЗрдВрдбреЗрдХреНрд╕ рдкреЗрдЬ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз:

 <url>http://example.com</url>
      
      







рдЙрддреНрддрд░ рд╣реИ:

 <answer chunk="2" count="19"><data>encoded_data</data></answer>
      
      







рдЙрддреНрддрд░ рдореЗрдВ рдХрдИ рднрд╛рдЧ рд╣реИрдВ, chunk'ovред рдпрд╣рд╛рдБ рдЪрдВрдХ , рдЪрдВрдХ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рдЧрд┐рдирддреА рдХреБрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЕрдиреБрд░реЛрдз рдХрд╛ рдЬрд╡рд╛рдм рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдПрдиреНрдХреЛрдбреЗрдб_рдбреЗрдЯрд╛ - рдмреЗрд╕ 64 рдПрдирдХреЛрдбреЗрдб рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рдкреАрд╕ред



рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЪрд┐рддреНрд░ рдХреЛ рдЪрд┐рддреНрд░рдордп рд░реВрдк рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░реВрдВрдЧрд╛:



                                      рд╕реНрдерд╛рдиреАрдп                                            
 + ------------------------------------------------- ---------------------------------- +
 |  http- рдХреНрд▓рд╛рдЗрдВрдЯ (рдмреНрд░рд╛рдЙрдЬрд╝рд░, wget) -> http-рдкреНрд░реЙрдХреНрд╕реА -> рдмреЙрдЯ-рдХреНрд▓рд╛рдЗрдВрдЯ | 
 + ------------------------------------------------- ---------------------------------- +
                                        / \ _
                                        ||
                                        \ /
                                     рджреВрд░рд╕реНрде
 + ------------------------------------------------- ---------------------------------- +
 |  рдмреЙрдЯ-рд╕рд░реНрд╡рд░ |
 + ------------------------------------------------- ---------------------------------- +




рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди



рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рдирдХрд╛рд░реА


XMPP рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЗ рд▓рд┐рдП xmpppy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЛрдИ рдореБрд╢реНрдХрд┐рд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЖрдкрдХреЛ рдмрд╕ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрддреНрддрд░ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред XML рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рд░реНрд╕ рдФрд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ - xml.dom.minidom ред



рдмреЙрдЯ рд╕рд░реНрд╡рд░


рд╕рд░реНрд╡рд░ рдХрд╛ рдХрд╛рд░реНрдп рдбрд╛рдЙрдирд▓реЛрдб рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рднреЗрдЬрдирд╛ рд╣реИ, рдЬреЛ рд╕реНрд╡рдпрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдПрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рд╕рд░реНрд╡рд░ рдЗрд╕ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░реЗрдЧрд╛ред



рдПрдХ рд╕рд░рд▓реАрдХреГрдд рдпреЛрдЬрдирд╛ рдореЗрдВ, рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд╕рдВрджреЗрд╢ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:



 import xmpp from Fetcher import Fetcher fetcher = None def message_callback(con, msg): global fetcher if msg.getBody(): try: ret = fetcher.process_command(msg.getBody()) except: ret = ["failed to process command"] for i in ret: reply = xmpp.Message(msg.getFrom(), i) reply.setType('chat') con.send(reply) if __name__ == "__main__": jid = xmpp.JID("my@server.jid") user = jid.getNode() server = jid.getDomain() password = "secret" conn = xmpp.Client(server, debug=[]) conres = conn.connect() authres = conn.auth(user, password, resource="foo") conn.RegisterHandler('message', message_callback) conn.sendInitPresence() fetcher = Fetcher() while True: conn.Process(1)
      
      







рдореИрдВрдиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдФрд░ рд╣рд╛рд░реНрдбрдХреЛрдб рдорд╛рдиреЛрдВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рддрд╛рдХрд┐ рдХреЛрдб рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ рдФрд░ рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реЛред рддреЛ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ? рд╣рдо рдЬреИрдмрд░ рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрджреЗрд╢ рд╣реИрдВрдбрд▓рд░ рдХреЛ рд▓рдЯрдХрд╛рддреЗ рд╣реИрдВ:



  conn.RegisterHandler('message', message_callback)
      
      







рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреНрд░рддреНрдпреЗрдХ рдирдП рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ message_callback (con, msg) рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдХреЗ рддрд░реНрдХ рдХрдиреЗрдХреНрд╢рди рд╣реИрдВрдбрд▓ рдФрд░ рд╕рдВрджреЗрд╢ рд╕реНрд╡рдпрдВ рд╣реЛрдВрдЧреЗред рдлрд╝рдВрдХреНрд╢рди рд╕реНрд╡рдпрдВ рдлрд╝реЙрдЪрд░ рдХреНрд▓рд╛рд╕ рд╕реЗ рдХрдорд╛рдВрдб рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕рднреА "рдЧрдВрджреЗ" рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рджрд┐рдП рдЧрдП рд╡рд┐рдЦрдВрдбреВ рдХреА рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╕рдм рд╣реИ, рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рд╕рд░реНрд╡рд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред



рдлрд╝реЗрдЪрд░


Fetcher рд╡рд░реНрдЧ HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдФрд░ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рдмрд╣реБрдд рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдкреВрд░рд╛ рдХреЛрдб рдирд╣реАрдВ рджрд┐рдпрд╛ рд╣реИ, рдЗрд╕реЗ рд▓реЗрдЦ рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдореИрдВ рдХреЗрд╡рд▓ рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛:



  def process_command(self, command): doc = xml.dom.minidom.parseString(command) url = self._gettext(doc.getElementsByTagName("url")[0].childNodes) try: f = urllib2.urlopen(url) except Exception, err: return ["%s" % str(err)] lines = base64.b64encode(f.read()) ret = [] chunk_size = 1024 x = 0 n = 1 chunk_count = (len(lines) + chunk_size - 1) / chunk_size while x < len(lines): ret.append(self._prepare_chunk(n, chunk_count, lines[x:x + chunk_size])) x += chunk_size n += 1 return ret
      
      







рдкреНрд░рдХреНрд░рд┐рдпрд╛_рдХрдорд╛рдВрдб рдлрд╝рдВрдХреНрд╢рди, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╢рд╛рдпрдж рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдмреЙрдЯ рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ XML рдЕрдиреБрд░реЛрдз рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХрд┐рд╕ URL рдХреЛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ urllib2 рдХреЗ рд╕рд╛рде рдХрд░рддрд╛ рд╣реИред рдбрд╛рдЙрдирд▓реЛрдб рдХреЛ base64 рдореЗрдВ рдЗрдирдХреЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдИ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рд╕рдорд╕реНрдпрд╛ рди рд╣реЛ, рдФрд░ рд╕рдорд╛рди рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛ рдЬрд╛рдП рддрд╛рдХрд┐ рд╕рдВрджреЗрд╢ рд▓рдВрдмрд╛рдИ рд╕реАрдорд╛ рдореЗрдВ рди рдЪрд▓рд╛ рдЬрд╛рдПред рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдЪрдВрдХ рдХреЛ XML рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдмрд╛рд╣рд░ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред



рдЧреНрд░рд╛рд╣рдХ


рдЧреНрд░рд╛рд╣рдХ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреЗрд╡рд▓ рдПрдХ рдХреЙрд▓рдмреИрдХ рд╣реИ, рдЬреЛ рдмреЗрд╕ 64 рд╕реЗ рдбреЗрдЯрд╛ рдФрд░ рдбрд┐рдХреЛрдб рдХреЛ рдЪрдордХрддрд╛ рд╣реИ:



 def message_callback(con, msg): global fetcher, output, result if msg.getBody(): message = msg.getBody() chunks, count, data = fetcher.parse_answer(message) output.append(data) if chunks == count: result = base64.b64decode(''.join(output))
      
      







рдкреНрд░рддрд┐рдирд┐рдзрд┐


рд╕реБрд░рдВрдЧ рдХреЛ рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ HTTP рдкреНрд░реЙрдХреНрд╕реА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ 3128 / tcp рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред рдкреНрд░рд╛рдкреНрдд рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдмреЙрдЯ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкрд░рд┐рдгрд╛рдо рдХреЛ рдбрд┐рдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЧреНрд░рд╛рд╣рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рд╣рдорд╛рд░рд╛ рдкреНрд░реЙрдХреНрд╕реА "рд╕рд╛рдзрд╛рд░рдг" рд▓реЛрдЧреЛрдВ рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред



рдПрдХ TCP рд╕рд░реНрд╡рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдорд╛рдирдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ SocketServer.StreamRequestHandler рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред



 class RequestHandler(SocketServer.StreamRequestHandler): def handle(self): data = self.request.recv(1024) method, url, headers = parse_http_request(data) if url is not None: response = fetch_file(server_jid, client_jid, password, url) self.wfile.write(response) self.request.close()
      
      







Parse_http_request () рдлрд╝рдВрдХреНрд╢рди рдПрдХ HTTP рдЕрдиреБрд░реЛрдз рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд╕рд╛рде url, рд╣реЗрдбрд░ рдФрд░ http рд╕рдВрд╕реНрдХрд░рдг рдЦреАрдВрдЪрддрд╛ рд╣реИ; fetch_file () - bot рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ url рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред



рдирд┐рд╖реНрдХрд░реНрд╖



рдкреВрд░реНрдг рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдВ рдПрдХ рддреАрд╡реНрд░ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ (рдЖрдкрдХреЛ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЪрд▓рд╛рдиреЗ рдФрд░ рдЗрд╕реЗ рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред рдмреЗрд╢рдХ, рдпрд╣ рдПрдХ рдкреВрд░реНрдг рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд╛ рдЕрдзрд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдХрдо рд╕реЗ рдХрдо рдЫреЛрдЯреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд▓реЗрдЦ рдХреЗ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: рдЖрдИрдПрдо рдмреЙрдЯ рдХреЗ "рдЧреИрд░-рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡" рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред



рдмрд╣реБрдд рдХреБрдЫ рд╣реИ рдЬреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЬреЛрдбрд╝рдиреЗ, рдЕрдиреБрд░реЛрдз рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд░реНрдерди, рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╣ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд╕рд╛рде рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрдзреНрдпрдпрди, рд╢рд╛рдпрдж, рдореИрдВ рдЬрд▓реНрдж рд╣реА рдЙрдард╛рдКрдВрдЧрд╛ред



All Articles