рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ , рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐
рд╣реИрдмреЗ рдкрд░,
рд░рд┐рдпрд▓рдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рд▓реЗрдЦреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣реИред рдпрд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдФрд░ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдкреНрд░рдпрд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдпрджрд┐ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЖрд▓реЗрдЦ рдЙрд╕ рдХрд╛рд░реНрдп рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдЧрд╛ рдЬреЛ рдореИрдВ рдЖрдпрд╛ рдерд╛ред
рд╕рдорд╕реНрдпрд╛рдУрдВ
рдХреЛрдб рдЕрдиреБрдХреВрд▓рди
рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╣рд░ рдмрд╛рд░ рдПрдХ рджрд╛рдпрд░реЗ рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдЖрд░рдВрднреАрдХрд░рдг рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдЖрдк рдЗрд╕реЗ рдЕрдореВрд░реНрддрди рдореЗрдВ рд▓рдкреЗрдЯ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ:
struct DAO<O: Object> { func persist(with object: O) { guard let realm = try? Realm() else { return } try? realm.write { realm.add(object, update: .all) } } func read(by key: String) -> O? { guard let realm = try? Realm() else { return [] } return realm.object(ofType: O.self, forPrimaryKey: key) } }
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
let yourObjectDAO = DAO<YourObject>() let object = YourObject(key) yourObjectDAO.persist(with: object) let allPersisted = yourObjectDAO.read(by: key)
рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреАрдПрдУ рдореЗрдВ рдХрдИ рдЙрдкрдпреЛрдЧреА рддрд░реАрдХреЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ: рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рд╣рдЯрд╛рдиреЗ, рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡реЗ рд╕рднреА рдХрд┐рд╕реА рднреА рджрд╛рдпрд░реЗ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред
рдЧрд▓рдд рдзрд╛рдЧреЗ рд╕реЗ рдкрд╣реБрдБрдЪрд╛
рдХреНрд╖реЗрддреНрд░ рдПрдХ рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд┐рдд рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реИред рдЗрд╕рд╕реЗ рдЬреЛ рдореБрдЦреНрдп рдЕрд╕реБрд╡рд┐рдзрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ, рд╡рд╣ Realm.Object рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рдереНрд░реЗрдб рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдерддрд╛ рд╣реИред
рдХреЛрдб:
DispatchQueue.global(qos: .background).async { let objects = yourObjectDAO.read(by: key) DispatchQueue.main.sync { print(objects) } }
рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рджреЗрдЧрд╛:
Terminating app due to uncaught exception 'RLMException', reason: 'Realm accessed from incorrect thread.'
рдмреЗрд╢рдХ, рдЖрдк рд╣рд░ рд╕рдордп рдПрдХ рдереНрд░реЗрдб рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдХреБрдЫ рдореБрд╢реНрдХрд┐рд▓реЗрдВ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рдЗрд╕реЗ рджрд░рдХрд┐рдирд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПред
рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП, рдпрд╣ Realm.Object рдХреЛ рдЙрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ" рд╣реИ рдЬреЛ рдЪреБрдкрдЪрд╛рдк рд╡рд┐рднрд┐рдиреНрди рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмреАрдЪ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред
рдХреНрд╖реЗрддреНрд░ рд╡рд╕реНрддреБ:
final class BirdObj: Object { @objc dynamic var id: String = "" @objc dynamic var name: String = "" override static func primaryKey() -> String? { return "id" } }
рд╕рдВрд░рдЪрдирд╛:
struct Bird { var id: String var name: String }
рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ
рдЕрдиреБрд╡рд╛рджрдХ:
protocol Translator { func toObject(with any: Any) -> Object func toAny(with object: Object) -> Any }
рдмрд░реНрдб рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
final class BirdTranslator: Translator { func toObject(with any: Any) -> Object { let any = any as! Bird let object = BirdObj() object.id = any.id object.name = any.name return object } func toAny(with object: Object) -> Any { let object = object as! BirdObj return Bird(id: object.id, name: object.name) } }
рдЕрдм рдпрд╣ рдбреАрдПрдУ рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗ рдФрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯреЗ, рди рдХрд┐ рджрд╛рдпрд░реЗ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛред
struct DAO<O: Object> { private let translator: Translator init(translator: Translator) { self.translator = translator } func persist(with any: Any) { guard let realm = try? Realm() else { return } let object = translator.toObject(with: any) try? realm.write { realm.add(object, update: .all) } } func read(by key: String) -> Any? { guard let realm = try? Realm() else { return nil } if let object = realm.object(ofType: O.self, forPrimaryKey: key) { return translator.toAny(with: object) } else { return nil } } }
рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛрддреА рджрд┐рдЦ рд░рд╣реА рд╣реИред рдЕрдм DAO рдПрдХ рдмрд░реНрдб рд╕рдВрд░рдЪрдирд╛ рд▓реМрдЯрд╛рдПрдЧрд╛ рдЬреЛ рдХрд┐ рдзрд╛рдЧреЛрдВ рдХреЗ рдмреАрдЪ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
let birdDAO = DAO<BirdObj>(translator: BirdTranslator()) DispatchQueue.global(qos: .background).async { let bird = birdDAO.read(by: key) DispatchQueue.main.sync { print(bird) } }
рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреЛрдб рдХреА рдПрдХ рдмрдбрд╝реА рд░рд╛рд╢рд┐ред
рдзрд╛рдЧреЗ рдХреЗ рдмреАрдЪ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдПрдХ рдирдП рдореЗрдВ рднрд╛рдЧ рдЧрдПред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╣рдорд╛рд░реЗ рд╕рд░рд▓рддрдо рдорд╛рдорд▓реЗ рдореЗрдВ, рджреЛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде, рд╣рдореЗрдВ рдХреЛрдб рдХреА 18 рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдЗрдиреЗрдВ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдпрджрд┐ рдХреЛрдИ 2 рдХреНрд╖реЗрддреНрд░ рдирд╣реАрдВ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 10, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдРрд╕реА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рднреА рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╕рдм рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреЛрдб рдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдмрдирд╛рддрд╛ рд╣реИред рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдПрдХ рддреБрдЪреНрдЫ рдкрд░рд┐рд╡рд░реНрддрди рдЖрдкрдХреЛ рддреАрди рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЪрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИред
рдкреНрд░рддреНрдпреЗрдХ рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣рдореЗрд╢рд╛, рд╕рд╛рд░ рдореЗрдВ, рд╕рдорд╛рди рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдЕрдВрддрд░ рдХреЗрд╡рд▓ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
рдЖрдк рдСрдЯреЛ-рдЬрдирд░реЗрд╢рди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП Realm.Object рдФрд░ Translator рдЬрд╛рд░реА рдХрд░рдХреЗ рд╣рдорд╛рд░реА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░ рджреЗрдЧрд╛ред
рдЦрдЯреНрдЯрд╛ рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреА рдорджрдж рд╕реЗ
рдореЙрдХрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА
рд╣реИрдмрд░ рдкрд░ рдПрдХ рд▓реЗрдЦ рдерд╛ред
рдЗрд╕ рдЙрдкрдХрд░рдг рдХреЛ рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрддрд░ рдкрд░ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдкрд╛рд╕
рдЦрд╛рдХреЗ рдХрд╛
рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЯреИрдЧ рдФрд░ рдлрд┐рд▓реНрдЯрд░ рд╕реНрдЯреИрдВрд╕рд┐рд▓ (рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реВрд░реНрдЪрд░реА рдмрдирд╛рдИ рдЧрдИ рдереА) рдФрд░
рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рдХрд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╡рд┐рд╡рд░рдг рдерд╛ред
рд╣рдорд╛рд░реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, Realm.Object рдХреА рдкреАрдврд╝реА рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддреА рд╣реИ:
import Foundation import RealmSwift #1 {% for type in types.structs %} #2 final class {{ type.name }}Obj: Object { #3 {% for variable in type.storedVariables %} {% if variable.typeName.name == "String" %} @objc dynamic var {{variable.name}}: String = "" {% endif %} {% endfor %} override static func primaryKey() -> String? { return "id" } } {% endfor %}
# 1 - рд╣рдо рд╕рднреА рд╕рдВрд░рдЪрдирд╛рдУрдВ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВред
# 2 - рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЗрдирд╣реЗрд░реАрдЯрд░ рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВред
# 3 - рдЯрд╛рдЗрдк рдирд╛рдо рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП == рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдПрдХ рд╣реА рдирд╛рдо рдФрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдЪрд░ рдмрдирд╛рдПрдВред рдпрд╣рд╛рдВ рдЖрдк рдЖрджрд┐рдореЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ Int, Date, рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд╛рд░ рд╕реНрдкрд╖реНрдЯ рд╣реИред
Translator рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдб рд╕рдорд╛рди рджрд┐рдЦрддрд╛ рд╣реИред
{% for type in types.structs %} final class {{ type.name }}Translator: Translator { func toObject(with entity: Any) -> Object { let entity = entity as! {{ type.name }} let object = {{ type.name }}Obj() {% for variable in type.storedVariables %} object.{{variable.name}} = entity.{{variable.name}} {% endfor %} return object } func toAny(with object: Object) -> Any { let object = object as! {{ type.name }}Obj return Bird( {% for variable in type.storedVariables %} {{variable.name}}: object.{{variable.name}}{%if not forloop.last%},{%endif%} {% endfor %} ) } } {% endfor %}
рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЙрд░реАрд░реА рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдЬреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рд╡рд╣ рд╕рднреА рдХреЗ рд▓рд┐рдП рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЯреВрдЯрддрд╛ рдирд╣реАрдВ рд╣реИред
рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж, рдмрд┐рд▓реНрдбрдкреЗрдЬрд╝ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЗрд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмреИрд╢ рдХреЛрдб рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рд▓рд┐рдЦрдирд╛ рд╢реЗрд╖ рд╣реИред рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдлрд╝рд╛рдЗрд▓реЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдирд┐рд╖реНрдХрд░реНрд╖
рдореИрдВрдиреЗ рдЬреЛ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рд╡рд╣ рдмрд╣реБрдд рд╕рд░рд▓ рдерд╛ред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ,ред рдкреЗрдВрд╕рд┐рд▓ рдЬреИрд╕реА рдлрд╛рдЗрд▓реЗрдВ рдмрд╣реБрдд рдмрдбрд╝реА рд╣реЛрдВрдЧреАред рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рд╡реЗ 200 рд╕реЗ рдХрдо рд▓рд╛рдЗрдиреЛрдВ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ 4000 рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рджрд╛рдпрд░реЗ рдореЗрдВ рдмрд╣реБрд░реВрдкрддрд╛ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВрдиреЗ рдХреБрдЫ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рджреВрд╕рд░реЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдХрд╛рд░рдг рджреЗрд░реА рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рдореБрдЭреЗ рдХрд┐рд╕реА рднреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рдЖрд▓реЛрдЪрдирд╛ рдкрд░ рдЦреБрд╢реА рд╣реЛрдЧреАред
рд╕рдВрджрд░реНрдн
рджрд╛рдпрд░реЗ рдХрд╛ рддреЗрдЬрдЦрдЯреНрдЯреА рдЧреАрдардмрдЦрдЯреНрдЯреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╕реНрдЯреИрдВрд╕рд┐рд▓ рдЕрдВрддрд░реНрдирд┐рд░реНрдорд┐рдд рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЯреИрдЧ рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░рд╕реЙрдХрд░реА рдХреЗ рд╕рд╛рде рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ рдореЙрдХрд┐рдВрдЧрджрд╛рдпрд░реЗ рдФрд░ рд╕реНрд╡рд┐рдлреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЯреВрдбреВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдирд╛